aboutsummaryrefslogtreecommitdiff
path: root/nuttx/graphics
diff options
context:
space:
mode:
authorpx4dev <px4@purgatory.org>2012-08-04 15:12:36 -0700
committerpx4dev <px4@purgatory.org>2012-08-04 15:12:36 -0700
commit8a365179eafdf3aea98e60ab9f5882b200d4c759 (patch)
tree4f38d6d4cd80bd0b6e22e2bb534c3f117ce44e56 /nuttx/graphics
downloadpx4-firmware-8a365179eafdf3aea98e60ab9f5882b200d4c759.tar.gz
px4-firmware-8a365179eafdf3aea98e60ab9f5882b200d4c759.tar.bz2
px4-firmware-8a365179eafdf3aea98e60ab9f5882b200d4c759.zip
Fresh import of the PX4 firmware sources.
Diffstat (limited to 'nuttx/graphics')
-rw-r--r--nuttx/graphics/Kconfig4
-rw-r--r--nuttx/graphics/Makefile215
-rw-r--r--nuttx/graphics/README.txt401
-rw-r--r--nuttx/graphics/nxbe/Make.defs41
-rw-r--r--nuttx/graphics/nxbe/nxbe.h533
-rw-r--r--nuttx/graphics/nxbe/nxbe_bitmap.c192
-rw-r--r--nuttx/graphics/nxbe/nxbe_clipper.c278
-rw-r--r--nuttx/graphics/nxbe/nxbe_closewindow.c137
-rw-r--r--nuttx/graphics/nxbe/nxbe_colormap.c155
-rw-r--r--nuttx/graphics/nxbe/nxbe_configure.c219
-rw-r--r--nuttx/graphics/nxbe/nxbe_fill.c157
-rw-r--r--nuttx/graphics/nxbe/nxbe_filltrapezoid.c173
-rw-r--r--nuttx/graphics/nxbe/nxbe_getrectangle.c138
-rw-r--r--nuttx/graphics/nxbe/nxbe_lower.c125
-rw-r--r--nuttx/graphics/nxbe/nxbe_move.c284
-rw-r--r--nuttx/graphics/nxbe/nxbe_raise.c116
-rw-r--r--nuttx/graphics/nxbe/nxbe_redraw.c139
-rw-r--r--nuttx/graphics/nxbe/nxbe_redrawbelow.c91
-rw-r--r--nuttx/graphics/nxbe/nxbe_setpixel.c158
-rw-r--r--nuttx/graphics/nxbe/nxbe_setposition.c119
-rw-r--r--nuttx/graphics/nxbe/nxbe_setsize.c121
-rw-r--r--nuttx/graphics/nxbe/nxbe_visible.c134
-rw-r--r--nuttx/graphics/nxconsole/Make.defs48
-rw-r--r--nuttx/graphics/nxconsole/nx_register.c193
-rwxr-xr-xnuttx/graphics/nxconsole/nxcon_driver.c257
-rw-r--r--nuttx/graphics/nxconsole/nxcon_font.c651
-rw-r--r--nuttx/graphics/nxconsole/nxcon_internal.h254
-rw-r--r--nuttx/graphics/nxconsole/nxcon_kbdin.c489
-rw-r--r--nuttx/graphics/nxconsole/nxcon_putc.c203
-rwxr-xr-xnuttx/graphics/nxconsole/nxcon_redraw.c152
-rw-r--r--nuttx/graphics/nxconsole/nxcon_register.c160
-rwxr-xr-xnuttx/graphics/nxconsole/nxcon_scroll.c239
-rw-r--r--nuttx/graphics/nxconsole/nxcon_sem.c129
-rw-r--r--nuttx/graphics/nxconsole/nxcon_unregister.c123
-rw-r--r--nuttx/graphics/nxconsole/nxcon_vt100.c289
-rw-r--r--nuttx/graphics/nxconsole/nxtk_register.c192
-rw-r--r--nuttx/graphics/nxconsole/nxtool_register.c195
-rw-r--r--nuttx/graphics/nxfonts/Make.defs122
-rw-r--r--nuttx/graphics/nxfonts/Makefile.sources189
-rw-r--r--nuttx/graphics/nxfonts/nxfonts_bitmaps.c1689
-rw-r--r--nuttx/graphics/nxfonts/nxfonts_convert.c290
-rw-r--r--nuttx/graphics/nxfonts/nxfonts_getfont.c411
-rw-r--r--nuttx/graphics/nxfonts/nxfonts_internal.h88
-rw-r--r--nuttx/graphics/nxfonts/nxfonts_sans17x22.h849
-rw-r--r--nuttx/graphics/nxfonts/nxfonts_sans17x23b.h849
-rw-r--r--nuttx/graphics/nxfonts/nxfonts_sans20x26.h849
-rw-r--r--nuttx/graphics/nxfonts/nxfonts_sans20x27b.h849
-rw-r--r--nuttx/graphics/nxfonts/nxfonts_sans22x29.h849
-rw-r--r--nuttx/graphics/nxfonts/nxfonts_sans22x29b.h849
-rw-r--r--nuttx/graphics/nxfonts/nxfonts_sans23x27.h859
-rw-r--r--nuttx/graphics/nxfonts/nxfonts_sans28x37.h849
-rwxr-xr-xnuttx/graphics/nxfonts/nxfonts_sans28x37b.h849
-rw-r--r--nuttx/graphics/nxfonts/nxfonts_sans39x48.h849
-rwxr-xr-xnuttx/graphics/nxfonts/nxfonts_sans40x49b.h849
-rw-r--r--nuttx/graphics/nxfonts/nxfonts_serif22x28b.h849
-rw-r--r--nuttx/graphics/nxfonts/nxfonts_serif22x29.h849
-rwxr-xr-xnuttx/graphics/nxfonts/nxfonts_serif27x38b.h849
-rwxr-xr-xnuttx/graphics/nxfonts/nxfonts_serif29x37.h849
-rw-r--r--nuttx/graphics/nxfonts/nxfonts_serif38x48.h849
-rw-r--r--nuttx/graphics/nxfonts/nxfonts_serif38x49b.h849
-rw-r--r--nuttx/graphics/nxglib/Make.defs93
-rw-r--r--nuttx/graphics/nxglib/Makefile.sources175
-rw-r--r--nuttx/graphics/nxglib/fb/nxglib_copyrectangle.c179
-rw-r--r--nuttx/graphics/nxglib/fb/nxglib_fillrectangle.c177
-rw-r--r--nuttx/graphics/nxglib/fb/nxglib_filltrapezoid.c285
-rw-r--r--nuttx/graphics/nxglib/fb/nxglib_getrectangle.c201
-rw-r--r--nuttx/graphics/nxglib/fb/nxglib_moverectangle.c252
-rw-r--r--nuttx/graphics/nxglib/fb/nxglib_setpixel.c156
-rw-r--r--nuttx/graphics/nxglib/lcd/nxglib_copyrectangle.c141
-rw-r--r--nuttx/graphics/nxglib/lcd/nxglib_fillrectangle.c111
-rw-r--r--nuttx/graphics/nxglib/lcd/nxglib_filltrapezoid.c259
-rw-r--r--nuttx/graphics/nxglib/lcd/nxglib_getrectangle.c105
-rw-r--r--nuttx/graphics/nxglib/lcd/nxglib_moverectangle.c131
-rw-r--r--nuttx/graphics/nxglib/lcd/nxglib_setpixel.c153
-rw-r--r--nuttx/graphics/nxglib/nxglib_bitblit.h208
-rw-r--r--nuttx/graphics/nxglib/nxglib_circlepts.c171
-rw-r--r--nuttx/graphics/nxglib/nxglib_circletraps.c176
-rw-r--r--nuttx/graphics/nxglib/nxglib_colorcopy.c87
-rw-r--r--nuttx/graphics/nxglib/nxglib_copyrun.h346
-rw-r--r--nuttx/graphics/nxglib/nxglib_fillrun.h196
-rw-r--r--nuttx/graphics/nxglib/nxglib_intersecting.c83
-rw-r--r--nuttx/graphics/nxglib/nxglib_nonintersecting.c151
-rw-r--r--nuttx/graphics/nxglib/nxglib_nullrect.c82
-rw-r--r--nuttx/graphics/nxglib/nxglib_rectadd.c84
-rw-r--r--nuttx/graphics/nxglib/nxglib_rectcopy.c84
-rw-r--r--nuttx/graphics/nxglib/nxglib_rectinside.c83
-rw-r--r--nuttx/graphics/nxglib/nxglib_rectintersect.c84
-rw-r--r--nuttx/graphics/nxglib/nxglib_rectoffset.c87
-rw-r--r--nuttx/graphics/nxglib/nxglib_rectoverlap.c90
-rw-r--r--nuttx/graphics/nxglib/nxglib_rectsize.c81
-rw-r--r--nuttx/graphics/nxglib/nxglib_rectunion.c85
-rw-r--r--nuttx/graphics/nxglib/nxglib_rgb2yuv.c103
-rw-r--r--nuttx/graphics/nxglib/nxglib_runcopy.c82
-rw-r--r--nuttx/graphics/nxglib/nxglib_runoffset.c85
-rw-r--r--nuttx/graphics/nxglib/nxglib_splitline.c337
-rw-r--r--nuttx/graphics/nxglib/nxglib_trapcopy.c82
-rw-r--r--nuttx/graphics/nxglib/nxglib_trapoffset.c82
-rw-r--r--nuttx/graphics/nxglib/nxglib_vectoradd.c84
-rw-r--r--nuttx/graphics/nxglib/nxglib_vectsubtract.c84
-rw-r--r--nuttx/graphics/nxglib/nxglib_yuv2rgb.c102
-rw-r--r--nuttx/graphics/nxmu/Make.defs48
-rw-r--r--nuttx/graphics/nxmu/nx_bitmap.c130
-rw-r--r--nuttx/graphics/nxmu/nx_block.c148
-rw-r--r--nuttx/graphics/nxmu/nx_closewindow.c100
-rw-r--r--nuttx/graphics/nxmu/nx_connect.c220
-rw-r--r--nuttx/graphics/nxmu/nx_disconnect.c108
-rw-r--r--nuttx/graphics/nxmu/nx_drawcircle.c145
-rw-r--r--nuttx/graphics/nxmu/nx_drawline.c136
-rw-r--r--nuttx/graphics/nxmu/nx_eventhandler.c260
-rw-r--r--nuttx/graphics/nxmu/nx_eventnotify.c111
-rw-r--r--nuttx/graphics/nxmu/nx_fill.c116
-rw-r--r--nuttx/graphics/nxmu/nx_fillcircle.c114
-rw-r--r--nuttx/graphics/nxmu/nx_filltrapezoid.c142
-rw-r--r--nuttx/graphics/nxmu/nx_getposition.c114
-rw-r--r--nuttx/graphics/nxmu/nx_getrectangle.c124
-rw-r--r--nuttx/graphics/nxmu/nx_kbdchin.c99
-rw-r--r--nuttx/graphics/nxmu/nx_kbdin.c122
-rw-r--r--nuttx/graphics/nxmu/nx_lower.c98
-rw-r--r--nuttx/graphics/nxmu/nx_mousein.c100
-rw-r--r--nuttx/graphics/nxmu/nx_move.c114
-rw-r--r--nuttx/graphics/nxmu/nx_openwindow.c131
-rw-r--r--nuttx/graphics/nxmu/nx_raise.c98
-rw-r--r--nuttx/graphics/nxmu/nx_releasebkgd.c105
-rw-r--r--nuttx/graphics/nxmu/nx_requestbkgd.c136
-rw-r--r--nuttx/graphics/nxmu/nx_setbgcolor.c109
-rw-r--r--nuttx/graphics/nxmu/nx_setpixel.c118
-rw-r--r--nuttx/graphics/nxmu/nx_setposition.c108
-rw-r--r--nuttx/graphics/nxmu/nx_setsize.c108
-rw-r--r--nuttx/graphics/nxmu/nxfe.h733
-rw-r--r--nuttx/graphics/nxmu/nxmu_constructwindow.c137
-rw-r--r--nuttx/graphics/nxmu/nxmu_kbdin.c117
-rw-r--r--nuttx/graphics/nxmu/nxmu_mouse.c215
-rw-r--r--nuttx/graphics/nxmu/nxmu_openwindow.c113
-rw-r--r--nuttx/graphics/nxmu/nxmu_redrawreq.c93
-rw-r--r--nuttx/graphics/nxmu/nxmu_releasebkgd.c110
-rw-r--r--nuttx/graphics/nxmu/nxmu_reportposition.c108
-rw-r--r--nuttx/graphics/nxmu/nxmu_requestbkgd.c124
-rw-r--r--nuttx/graphics/nxmu/nxmu_semtake.c87
-rw-r--r--nuttx/graphics/nxmu/nxmu_sendclient.c112
-rw-r--r--nuttx/graphics/nxmu/nxmu_sendserver.c112
-rw-r--r--nuttx/graphics/nxmu/nxmu_sendwindow.c114
-rw-r--r--nuttx/graphics/nxmu/nxmu_server.c530
-rw-r--r--nuttx/graphics/nxsu/Make.defs44
-rw-r--r--nuttx/graphics/nxsu/nx_bitmap.c110
-rw-r--r--nuttx/graphics/nxsu/nx_close.c91
-rw-r--r--nuttx/graphics/nxsu/nx_closewindow.c100
-rw-r--r--nuttx/graphics/nxsu/nx_drawcircle.c145
-rw-r--r--nuttx/graphics/nxsu/nx_drawline.c136
-rw-r--r--nuttx/graphics/nxsu/nx_fill.c103
-rw-r--r--nuttx/graphics/nxsu/nx_fillcircle.c114
-rw-r--r--nuttx/graphics/nxsu/nx_filltrapezoid.c105
-rw-r--r--nuttx/graphics/nxsu/nx_getposition.c106
-rw-r--r--nuttx/graphics/nxsu/nx_getrectangle.c110
-rw-r--r--nuttx/graphics/nxsu/nx_kbdchin.c101
-rw-r--r--nuttx/graphics/nxsu/nx_kbdin.c100
-rw-r--r--nuttx/graphics/nxsu/nx_lower.c99
-rw-r--r--nuttx/graphics/nxsu/nx_mousein.c200
-rw-r--r--nuttx/graphics/nxsu/nx_move.c101
-rw-r--r--nuttx/graphics/nxsu/nx_open.c218
-rw-r--r--nuttx/graphics/nxsu/nx_openwindow.c127
-rw-r--r--nuttx/graphics/nxsu/nx_raise.c99
-rw-r--r--nuttx/graphics/nxsu/nx_releasebkgd.c109
-rw-r--r--nuttx/graphics/nxsu/nx_requestbkgd.c155
-rw-r--r--nuttx/graphics/nxsu/nx_setbgcolor.c103
-rw-r--r--nuttx/graphics/nxsu/nx_setpixel.c104
-rw-r--r--nuttx/graphics/nxsu/nx_setposition.c99
-rw-r--r--nuttx/graphics/nxsu/nx_setsize.c99
-rw-r--r--nuttx/graphics/nxsu/nxfe.h185
-rw-r--r--nuttx/graphics/nxsu/nxsu_constructwindow.c150
-rw-r--r--nuttx/graphics/nxsu/nxsu_redrawreq.c104
-rw-r--r--nuttx/graphics/nxsu/nxsu_reportposition.c107
-rw-r--r--nuttx/graphics/nxtk/Make.defs48
-rw-r--r--nuttx/graphics/nxtk/nxtk_bitmaptoolbar.c137
-rw-r--r--nuttx/graphics/nxtk/nxtk_bitmapwindow.c137
-rw-r--r--nuttx/graphics/nxtk/nxtk_block.c109
-rw-r--r--nuttx/graphics/nxtk/nxtk_closetoolbar.c111
-rw-r--r--nuttx/graphics/nxtk/nxtk_closewindow.c95
-rw-r--r--nuttx/graphics/nxtk/nxtk_containerclip.c122
-rw-r--r--nuttx/graphics/nxtk/nxtk_drawcircletoolbar.c145
-rw-r--r--nuttx/graphics/nxtk/nxtk_drawcirclewindow.c145
-rw-r--r--nuttx/graphics/nxtk/nxtk_drawframe.c310
-rw-r--r--nuttx/graphics/nxtk/nxtk_drawlinetoolbar.c139
-rw-r--r--nuttx/graphics/nxtk/nxtk_drawlinewindow.c138
-rw-r--r--nuttx/graphics/nxtk/nxtk_events.c297
-rw-r--r--nuttx/graphics/nxtk/nxtk_fillcircletoolbar.c115
-rw-r--r--nuttx/graphics/nxtk/nxtk_fillcirclewindow.c115
-rw-r--r--nuttx/graphics/nxtk/nxtk_filltoolbar.c116
-rw-r--r--nuttx/graphics/nxtk/nxtk_filltraptoolbar.c110
-rw-r--r--nuttx/graphics/nxtk/nxtk_filltrapwindow.c110
-rw-r--r--nuttx/graphics/nxtk/nxtk_fillwindow.c116
-rw-r--r--nuttx/graphics/nxtk/nxtk_getposition.c95
-rw-r--r--nuttx/graphics/nxtk/nxtk_gettoolbar.c123
-rw-r--r--nuttx/graphics/nxtk/nxtk_getwindow.c123
-rw-r--r--nuttx/graphics/nxtk/nxtk_internal.h220
-rw-r--r--nuttx/graphics/nxtk/nxtk_lower.c95
-rw-r--r--nuttx/graphics/nxtk/nxtk_movetoolbar.c119
-rw-r--r--nuttx/graphics/nxtk/nxtk_movewindow.c118
-rw-r--r--nuttx/graphics/nxtk/nxtk_opentoolbar.c127
-rw-r--r--nuttx/graphics/nxtk/nxtk_openwindow.c160
-rw-r--r--nuttx/graphics/nxtk/nxtk_raise.c95
-rw-r--r--nuttx/graphics/nxtk/nxtk_setposition.c107
-rw-r--r--nuttx/graphics/nxtk/nxtk_setsize.c114
-rw-r--r--nuttx/graphics/nxtk/nxtk_setsubwindows.c165
-rw-r--r--nuttx/graphics/nxtk/nxtk_subwindowclip.c118
-rw-r--r--nuttx/graphics/nxtk/nxtk_subwindowmove.c151
-rw-r--r--nuttx/graphics/nxtk/nxtk_toolbarbounds.c107
206 files changed, 44616 insertions, 0 deletions
diff --git a/nuttx/graphics/Kconfig b/nuttx/graphics/Kconfig
new file mode 100644
index 000000000..ae2bf3130
--- /dev/null
+++ b/nuttx/graphics/Kconfig
@@ -0,0 +1,4 @@
+#
+# For a description of the syntax of this configuration file,
+# see misc/tools/kconfig-language.txt.
+#
diff --git a/nuttx/graphics/Makefile b/nuttx/graphics/Makefile
new file mode 100644
index 000000000..6e549c1dd
--- /dev/null
+++ b/nuttx/graphics/Makefile
@@ -0,0 +1,215 @@
+############################################################################
+# graphics/Makefile
+#
+# Copyright (C) 2008-2009, 2011-2012 Gregory Nutt. All rights reserved.
+# Author: Gregory Nutt <gnutt@nuttx.org>
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in
+# the documentation and/or other materials provided with the
+# distribution.
+# 3. Neither the name NuttX nor the names of its contributors may be
+# used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+############################################################################
+
+-include $(TOPDIR)/.config
+-include $(TOPDIR)/Make.defs
+
+DEPPATH = --dep-path .
+
+ifeq ($(WINTOOL),y)
+INCDIROPT = -w
+endif
+
+include nxglib/Make.defs
+DEPPATH += --dep-path nxglib
+CFLAGS += ${shell $(TOPDIR)/tools/incdir.sh $(INCDIROPT) "$(CC)" $(TOPDIR)/graphics/nxglib}
+
+include nxbe/Make.defs
+DEPPATH += --dep-path nxbe
+CFLAGS += ${shell $(TOPDIR)/tools/incdir.sh $(INCDIROPT) "$(CC)" $(TOPDIR)/graphics/nxbe}
+
+ifeq ($(CONFIG_NX_MULTIUSER),y)
+include nxmu/Make.defs
+DEPPATH += --dep-path nxmu
+CFLAGS += ${shell $(TOPDIR)/tools/incdir.sh $(INCDIROPT) "$(CC)" $(TOPDIR)/graphics/nxmu}
+else
+include nxsu/Make.defs
+DEPPATH += --dep-path nxsu
+CFLAGS += ${shell $(TOPDIR)/tools/incdir.sh $(INCDIROPT) "$(CC)" $(TOPDIR)/graphics/nxsu}
+endif
+
+include nxtk/Make.defs
+DEPPATH += --dep-path nxtk
+CFLAGS += ${shell $(TOPDIR)/tools/incdir.sh $(INCDIROPT) "$(CC)" $(TOPDIR)/graphics/nxtk}
+
+include nxfonts/Make.defs
+DEPPATH += --dep-path nxfonts
+CFLAGS += ${shell $(TOPDIR)/tools/incdir.sh $(INCDIROPT) "$(CC)" $(TOPDIR)/graphics/nxfonts}
+
+ifeq ($(CONFIG_NXCONSOLE),y)
+include nxconsole/Make.defs
+DEPPATH += --dep-path nxconsole
+CFLAGS += ${shell $(TOPDIR)/tools/incdir.sh $(INCDIROPT) "$(CC)" $(TOPDIR)/graphics/nxconsole}
+endif
+
+ASRCS = $(NXGLIB_ASRCS) $(NXBE_ASRCS) $(NX_ASRCS) $(NXTK_ASRCS) $(NXFONTS_ASRCS) $(NXCON_ASRCS)
+AOBJS = $(ASRCS:.S=$(OBJEXT))
+
+CSRCS = $(NXGLIB_CSRCS) $(NXBE_CSRCS) $(NX_CSRCS) $(NXTK_CSRCS) $(NXFONTS_CSRCS) $(NXCON_CSRCS)
+COBJS = $(CSRCS:.c=$(OBJEXT))
+
+SRCS = $(ASRCS) $(CSRCS)
+OBJS = $(AOBJS) $(COBJS)
+
+BIN = libgraphics$(LIBEXT)
+
+ifeq ($(CONFIG_NX_MULTIUSER),y)
+VPATH = nxglib:nxbe:nxmu:nxtk:nxfonts:nxconsole
+else
+VPATH = nxglib:nxbe:nxsu:nxtk:nxfonts:nxconsole
+endif
+
+all: mklibgraphics
+.PHONY : context depend clean distclean mklibgraphics gensources gen1bppsources \
+ gen2bppsource gen4bppsource gen8bppsource gen16bppsource gen24bppsource \
+ gen32bppsources genfontsources
+
+gen1bppsources:
+ @$(MAKE) -C nxglib -f Makefile.sources TOPDIR=$(TOPDIR) NXGLIB_BITSPERPIXEL=1 EXTRADEFINES=$(EXTRADEFINES)
+ @$(MAKE) -C nxfonts -f Makefile.sources TOPDIR=$(TOPDIR) NXFONTS_BITSPERPIXEL=1 EXTRADEFINES=$(EXTRADEFINES)
+
+gen2bppsource:
+ @$(MAKE) -C nxglib -f Makefile.sources TOPDIR=$(TOPDIR) NXGLIB_BITSPERPIXEL=2 EXTRADEFINES=$(EXTRADEFINES)
+ @$(MAKE) -C nxfonts -f Makefile.sources TOPDIR=$(TOPDIR) NXFONTS_BITSPERPIXEL=2 EXTRADEFINES=$(EXTRADEFINES)
+
+gen4bppsource:
+ @$(MAKE) -C nxglib -f Makefile.sources TOPDIR=$(TOPDIR) NXGLIB_BITSPERPIXEL=4 EXTRADEFINES=$(EXTRADEFINES)
+ @$(MAKE) -C nxfonts -f Makefile.sources TOPDIR=$(TOPDIR) NXFONTS_BITSPERPIXEL=4 EXTRADEFINES=$(EXTRADEFINES)
+
+gen8bppsource:
+ @$(MAKE) -C nxglib -f Makefile.sources TOPDIR=$(TOPDIR) NXGLIB_BITSPERPIXEL=8 EXTRADEFINES=$(EXTRADEFINES)
+ @$(MAKE) -C nxfonts -f Makefile.sources TOPDIR=$(TOPDIR) NXFONTS_BITSPERPIXEL=8 EXTRADEFINES=$(EXTRADEFINES)
+
+gen16bppsource:
+ @$(MAKE) -C nxglib -f Makefile.sources TOPDIR=$(TOPDIR) NXGLIB_BITSPERPIXEL=16 EXTRADEFINES=$(EXTRADEFINES)
+ @$(MAKE) -C nxfonts -f Makefile.sources TOPDIR=$(TOPDIR) NXFONTS_BITSPERPIXEL=16 EXTRADEFINES=$(EXTRADEFINES)
+
+gen24bppsource:
+ @$(MAKE) -C nxglib -f Makefile.sources TOPDIR=$(TOPDIR) NXGLIB_BITSPERPIXEL=24 EXTRADEFINES=$(EXTRADEFINES)
+ @$(MAKE) -C nxfonts -f Makefile.sources TOPDIR=$(TOPDIR) NXFONTS_BITSPERPIXEL=24 EXTRADEFINES=$(EXTRADEFINES)
+
+gen32bppsources:
+ @$(MAKE) -C nxglib -f Makefile.sources TOPDIR=$(TOPDIR) NXGLIB_BITSPERPIXEL=32 EXTRADEFINES=$(EXTRADEFINES)
+ @$(MAKE) -C nxfonts -f Makefile.sources TOPDIR=$(TOPDIR) NXFONTS_BITSPERPIXEL=32 EXTRADEFINES=$(EXTRADEFINES)
+
+genfontsources:
+ifeq ($(CONFIG_NXFONT_SANS23X27),y)
+ @$(MAKE) -C nxfonts -f Makefile.sources TOPDIR=$(TOPDIR) NXFONTS_FONTID=1 EXTRADEFINES=$(EXTRADEFINES)
+endif
+ifeq ($(CONFIG_NXFONT_SANS22X29),y)
+ @$(MAKE) -C nxfonts -f Makefile.sources TOPDIR=$(TOPDIR) NXFONTS_FONTID=2 EXTRADEFINES=$(EXTRADEFINES)
+endif
+ifeq ($(CONFIG_NXFONT_SANS28X37),y)
+ @$(MAKE) -C nxfonts -f Makefile.sources TOPDIR=$(TOPDIR) NXFONTS_FONTID=3 EXTRADEFINES=$(EXTRADEFINES)
+endif
+ifeq ($(CONFIG_NXFONT_SANS39X48),y)
+ @$(MAKE) -C nxfonts -f Makefile.sources TOPDIR=$(TOPDIR) NXFONTS_FONTID=4 EXTRADEFINES=$(EXTRADEFINES)
+endif
+ifeq ($(CONFIG_NXFONT_SANS17X23B),y)
+ @$(MAKE) -C nxfonts -f Makefile.sources TOPDIR=$(TOPDIR) NXFONTS_FONTID=16 EXTRADEFINES=$(EXTRADEFINES)
+endif
+ifeq ($(CONFIG_NXFONT_SANS20X27B),y)
+ @$(MAKE) -C nxfonts -f Makefile.sources TOPDIR=$(TOPDIR) NXFONTS_FONTID=17 EXTRADEFINES=$(EXTRADEFINES)
+endif
+ifeq ($(CONFIG_NXFONT_SANS22X29B),y)
+ @$(MAKE) -C nxfonts -f Makefile.sources TOPDIR=$(TOPDIR) NXFONTS_FONTID=5 EXTRADEFINES=$(EXTRADEFINES)
+endif
+ifeq ($(CONFIG_NXFONT_SANS28X37B),y)
+ @$(MAKE) -C nxfonts -f Makefile.sources TOPDIR=$(TOPDIR) NXFONTS_FONTID=6 EXTRADEFINES=$(EXTRADEFINES)
+endif
+ifeq ($(CONFIG_NXFONT_SANS40X49B),y)
+ @$(MAKE) -C nxfonts -f Makefile.sources TOPDIR=$(TOPDIR) NXFONTS_FONTID=7 EXTRADEFINES=$(EXTRADEFINES)
+endif
+ifeq ($(CONFIG_NXFONT_SERIF22X29),y)
+ @$(MAKE) -C nxfonts -f Makefile.sources TOPDIR=$(TOPDIR) NXFONTS_FONTID=8 EXTRADEFINES=$(EXTRADEFINES)
+endif
+ifeq ($(CONFIG_NXFONT_SERIF29X37),y)
+ @$(MAKE) -C nxfonts -f Makefile.sources TOPDIR=$(TOPDIR) NXFONTS_FONTID=9 EXTRADEFINES=$(EXTRADEFINES)
+endif
+ifeq ($(CONFIG_NXFONT_SERIF38X48),y)
+ @$(MAKE) -C nxfonts -f Makefile.sources TOPDIR=$(TOPDIR) NXFONTS_FONTID=10 EXTRADEFINES=$(EXTRADEFINES)
+endif
+ifeq ($(CONFIG_NXFONT_SERIF22X28B),y)
+ @$(MAKE) -C nxfonts -f Makefile.sources TOPDIR=$(TOPDIR) NXFONTS_FONTID=11 EXTRADEFINES=$(EXTRADEFINES)
+endif
+ifeq ($(CONFIG_NXFONT_SERIF27X38B),y)
+ @$(MAKE) -C nxfonts -f Makefile.sources TOPDIR=$(TOPDIR) NXFONTS_FONTID=12 EXTRADEFINES=$(EXTRADEFINES)
+endif
+ifeq ($(CONFIG_NXFONT_SERIF38X49B),y)
+ @$(MAKE) -C nxfonts -f Makefile.sources TOPDIR=$(TOPDIR) NXFONTS_FONTID=13 EXTRADEFINES=$(EXTRADEFINES)
+endif
+ifeq ($(CONFIG_NXFONT_SANS17X22),y)
+ @$(MAKE) -C nxfonts -f Makefile.sources TOPDIR=$(TOPDIR) NXFONTS_FONTID=14 EXTRADEFINES=$(EXTRADEFINES)
+endif
+ifeq ($(CONFIG_NXFONT_SANS20X26),y)
+ @$(MAKE) -C nxfonts -f Makefile.sources TOPDIR=$(TOPDIR) NXFONTS_FONTID=15 EXTRADEFINES=$(EXTRADEFINES)
+endif
+
+gensources: gen1bppsources gen2bppsource gen4bppsource gen8bppsource gen16bppsource gen24bppsource gen32bppsources genfontsources
+
+$(AOBJS): %$(OBJEXT): %.S
+ $(call ASSEMBLE, $<, $@)
+
+$(COBJS): %$(OBJEXT): %.c
+ $(call COMPILE, $<, $@)
+
+$(BIN): $(OBJS)
+ @( for obj in $(OBJS) ; do \
+ $(call ARCHIVE, $@, $${obj}); \
+ done ; )
+
+mklibgraphics: gensources $(BIN)
+
+.depend: gensources Makefile $(SRCS)
+ @$(MKDEP) $(DEPPATH) $(CC) -- $(CFLAGS) -- $(SRCS) >Make.dep
+ @touch $@
+
+depend: .depend
+
+context: gensources
+
+clean:
+ @$(MAKE) -C nxglib -f Makefile.sources clean TOPDIR=$(TOPDIR) EXTRADEFINES=$(EXTRADEFINES)
+ @$(MAKE) -C nxfonts -f Makefile.sources clean TOPDIR=$(TOPDIR) EXTRADEFINES=$(EXTRADEFINES)
+ @rm -f $(BIN) *~ .*.swp
+ $(call CLEAN)
+
+distclean: clean
+ @$(MAKE) -C nxglib -f Makefile.sources distclean TOPDIR=$(TOPDIR) EXTRADEFINES=$(EXTRADEFINES)
+ @$(MAKE) -C nxfonts -f Makefile.sources distclean TOPDIR=$(TOPDIR) EXTRADEFINES=$(EXTRADEFINES)
+ @rm -f Make.dep .depend
+
+-include Make.dep
+
diff --git a/nuttx/graphics/README.txt b/nuttx/graphics/README.txt
new file mode 100644
index 000000000..18aebadbd
--- /dev/null
+++ b/nuttx/graphics/README.txt
@@ -0,0 +1,401 @@
+README
+^^^^^^
+
+This directory contains tiny graphics support for NuttX. The contents of this directory
+are only build if CONFIG_NX is defined in the NuttX configuration file.
+
+Contents
+^^^^^^^^
+ Roadmap
+ Related Header Files
+ Directories
+ Installing New Fonts
+ Configuration Settings
+
+Roadmap
+^^^^^^^
+
+This directory holds NuttX graphic packages. Not all of these packages are implemented
+at the present, but here is the longer term roadmap:
+
+ NxWidgets - NxWidgets is a higher level, C++, object-oriented library for object-
+ oriented access to graphics "widgets." NxWidgets is provided as a separate
+ package. NxWidgets is built on top of the core NuttX graphics subsystem,
+ but is not a part of the core graphics subystems.
+ NXTOOLKIT - A set of C graphics tools that provide higher-level window drawing
+ operations. The toolkit can be used for window-oriented graphics
+ without NxWidgets and is built on top of NX.
+ NXFONTS - A set of C graphics tools for present (bitmap) font images.
+ NX - The tiny NuttX windowing system. This includes both a small-footprint,
+ single user implementaton (NXSU as described below) and a somewhat
+ larger multi-user implentation (NXMU as described below). Both
+ conform to the same APIs as defined in include/nuttx/nx/nx.h and, hence,
+ are more-or-less interchangable. NX can be used without NxWidgets
+ and without NXTOOLKIT for raw access to window memory.
+ NXGLIB - Low level graphics utilities and direct framebuffer rendering logic.
+ NX is built on top of NXGLIB.
+ NxConsole - NxConsole is a write-only character device that is built on top of
+ an NX window. This character device can be used to provide stdout
+ and stderr and, hence, can provide the output side of NuttX console.
+ NxConsole is only available when the multi-user NX implementation is
+ selected (CONFIG_NX_MULTIUSERs).
+
+
+Related Header Files
+^^^^^^^^^^^^^^^^^^^^
+
+include/nuttx/nx/nxglib.h -- Describes the NXGLIB C interfaces
+include/nuttx/nx/nx.h -- Describes the NX C interfaces
+include/nuttx/nx/nxtk.h -- Describe the NXTOOLKIT C interfaces
+include/nuttx/nx/nxfont.h -- Describe sthe NXFONT C interfaces
+
+Directories
+^^^^^^^^^^^
+
+graphics/nxglib
+ The NuttX tiny graphics library. The directory contains generic utilities
+ support operations on primitive graphics objects and logic to rasterize directly
+ into a framebuffer. It has no concept of windows (other than the one, framebuffer
+ window).
+
+graphics/nxbe
+ This is the "back-end" of a tiny windowing system. It can be used with either of
+ two front-ends to complete a windowing system (see nxmu and nxsu below). It
+ contains most of the important window management logic: clipping, window controls,
+ window drawing, etc.
+
+graphics/nxsu
+ This is the NX single user "front end". When combined with the generic "back-end"
+ (nxbe), it implements a single thread, single user windowing system. The files
+ in this directory present the window APIs described in include/nuttx/nx/nx.h. The
+ single user front-end is selected when CONFIG_NX_MULTIUSER is not defined in the
+ NuttX configuration file.
+
+graphics/nxmu
+ This is the NX multi user "front end". When combined with the generic "back-end"
+ (nxbe), it implements a multi-threaded, multi-user windowing system. The files
+ in this directory present the window APIs described in include/nuttx/nx/nx.h. The
+ multi-user front end includes a graphics server that executes on its own thread;
+ multiple graphics clients then communicate with the server via a POSIX message
+ queue to serialize window operations from many threads. The multi-user front-end
+ is selected when CONFIG_NX_MULTIUSER is defined in the NuttX configuration file.
+
+graphics/nxfonts
+ This is where the NXFONTS implementation resides. This is a relatively low-
+ level set of charset set/glyph management APIs. See include/nuttx/nx/nxfonts.h
+
+graphics/nxtk
+ This is where the NXTOOLKIT implementation resides. This toolkit is built on
+ top of NX and works with either the single-user or multi-user NX version. See
+ include/nuttx/nx/nxtk.h
+
+nuttx/../NxWidgets
+ The NxWidgets code is provided as a separate package located outside of the
+ NuttX source tree (probably at this location).
+
+Installing New Fonts
+^^^^^^^^^^^^^^^^^^^^
+
+ There is a tool called bdf-converter in the directory tools/. The bdf-converter
+ program be used to convert fonts in Bitmap Distribution Format (BDF)
+ into fonts that can be used in the NX graphics system.
+
+ Below are general instructions for creating and installing a new font
+ in the NX graphic system:
+
+ 1. Locate a font in BDF format,
+ 2. Use the bdf-converter program to convert the BDF font to the NuttX
+ font format. This will result in a C header file containing
+ defintions. That header file should be installed at, for example,
+ graphics/nxfonts/nxfonts_myfont.h.
+
+ Create a new NuttX configuration variable. For example, suppose
+ you define the following variable: CONFIG_NXFONT_MYFONT. Then
+ you would need to:
+
+ 3. Define CONFIG_NXFONT_MYFONT=y in your NuttX configuration file.
+
+ A font ID number has to be assigned for each new font. The font ID
+ is defined in the file include/nuttx/nx/nxfonts.h. Those definitions
+ have to be extended to support your new font. Look at how the font ID
+ enabled by CONFIG_NXFONT_SANS23X27 is defined and add an ID for your
+ new font in a similar fashion:
+
+ 4. include/nuttx/nx/nxfonts.h. Add you new font as a possible system
+ default font:
+
+ #if defined(CONFIG_NXFONT_SANS23X27)
+ # define NXFONT_DEFAULT FONTID_SANS23X27
+ #elif defined(CONFIG_NXFONT_MYFONT)
+ # define NXFONT_DEFAULT FONTID_MYFONT
+ #endif
+
+ Then define the actual font ID. Make sure that the font ID value
+ is unique:
+
+ enum nx_fontid_e
+ {
+ FONTID_DEFAULT = 0 /* The default font */
+ #ifdef CONFIG_NXFONT_SANS23X27
+ , FONTID_SANS23X27 = 1 /* The 23x27 sans serif font */
+ #endif
+ #ifdef CONFIG_NXFONT_MYFONT
+ , FONTID_MYFONT = 2 /* My shiny, new font */
+ #endif
+ ...
+
+ New Add the font to the NX build system. There are several files that
+ you have to modify to to this. Look how the build system uses the
+ font CONFIG_NXFONT_SANS23X27 for examaples:
+
+ 5. nuttx/graphics/Makefile. This file needs logic to auto-generate
+ a C source file from the header file that you generated with the
+ the bdf-converter program. Notice NXFONTS_FONTID=2; this must be
+ set to the same font ID value that you defined in the
+ include/nuttx/nx/nxfonts.h file.
+
+ genfontsources:
+ ifeq ($(CONFIG_NXFONT_SANS23X27),y)
+ @$(MAKE) -C nxfonts -f Makefile.sources TOPDIR=$(TOPDIR) NXFONTS_FONTID=1 EXTRADEFINES=$(EXTRADEFINES)
+ endif
+ ifeq ($(CONFIG_NXFONT_MYFONT),y)
+ @$(MAKE) -C nxfonts -f Makefile.sources TOPDIR=$(TOPDIR) NXFONTS_FONTID=2 EXTRADEFINES=$(EXTRADEFINES)
+ endif
+
+ 6. nuttx/graphics/nxfonts/Make.defs. Set the make variable NXFSET_CSRCS.
+ NXFSET_CSRCS determines the name of the font C file to build when
+ NXFONTS_FONTID=2:
+
+ ifeq ($(CONFIG_NXFONT_SANS23X27),y)
+ NXFSET_CSRCS += nxfonts_bitmaps_sans23x27.c
+ endif
+ ifeq ($(CONFIG_NXFONT_MYFONT),y)
+ NXFSET_CSRCS += nxfonts_bitmaps_myfont.c
+ endif
+
+ 7. nuttx/graphics/nxfonts/Makefile.sources. This is the Makefile used
+ in step 5 that will actually generate the font C file. So, given
+ your NXFONTS_FONTID=2, it needs to determine a prefix to use for
+ auto-generated variable and function names and (again) the name of
+ the autogenerated file to create (this must be the same name that
+ was used in nuttx/graphics/nxfonts/Make.defs):
+
+ ifeq ($(NXFONTS_FONTID),1)
+ NXFONTS_PREFIX := g_sans23x27_
+ GEN_CSRC = nxfonts_bitmaps_sans23x27.c
+ endif
+ ifeq ($(NXFONTS_FONTID),2)
+ NXFONTS_PREFIX := g_myfont_
+ GEN_CSRC = nxfonts_bitmaps_myfont.c
+ endif
+
+ 8. graphics/nxfonts/nxfonts_bitmaps.c. This is the file that contains
+ the generic font structures. It is used as a "template" file by
+ nuttx/graphics/nxfonts/Makefile.sources to create your customized
+ font data set.
+
+ #if NXFONTS_FONTID == 1
+ # include "nxfonts_sans23x27.h"
+ #elif NXFONTS_FONTID == 2
+ # include "nxfonts_myfont.h"
+ #else
+ # error "No font ID specified"
+ #endif
+
+ Where nxfonts_myfont.h is the NuttX font file that we generated in
+ step 2 using the bdf-converter tool.
+
+ 9. graphics/nxfonts/nxfonts_getfont.c. Finally, we need to extend the
+ logic that does the run-time font lookups so that can find our new
+ font. The lookup function is NXHANDLE nxf_getfonthandle(enum nx_fontid_e fontid).
+ The new font information needs to be added to data structures used by
+ that function:
+
+ #ifdef CONFIG_NXFONT_SANS23X27
+ extern const struct nx_fontpackage_s g_sans23x27_package;
+ #endif
+ #ifdef CONFIG_NXFONT_MYFONT
+ extern const struct nx_fontpackage_s g_myfont_package;
+ #endif
+
+ static FAR const struct nx_fontpackage_s *g_fontpackages[] =
+ {
+ #ifdef CONFIG_NXFONT_SANS23X27
+ &g_sans23x27_package,
+ #endif
+ #ifdef CONFIG_NXFONT_MYFONT
+ &g_myfont_package,
+ #endif
+ NULL
+ };
+
+Configuration Settings
+^^^^^^^^^^^^^^^^^^^^^^
+
+General NX Settings
+-------------------
+
+CONFIG_NX
+ Enables overall support for graphics library and NX
+CONFIG_NX_MULTIUSER
+ Configures NX in multi-user mode
+CONFIG_NX_NPLANES
+ Some YUV color formats requires support for multiple planes, one for each
+ color component. Unless you have such special hardware, this value should be
+ undefined or set to 1.
+CONFIG_NX_WRITEONLY
+ Define if the underlying graphics device does not support read operations.
+ Automatically defined if CONFIG_NX_LCDDRIVER and CONFIG_LCD_NOGETRUN are
+ defined.
+CONFIG_NX_DISABLE_1BPP, CONFIG_NX_DISABLE_2BPP,
+CONFIG_NX_DISABLE_4BPP, CONFIG_NX_DISABLE_8BPP,
+CONFIG_NX_DISABLE_16BPP, CONFIG_NX_DISABLE_24BPP, and
+CONFIG_NX_DISABLE_32BPP
+ NX supports a variety of pixel depths. You can save some memory by disabling
+ support for unused color depths.
+CONFIG_NX_PACKEDMSFIRST
+ If a pixel depth of less than 8-bits is used, then NX needs to know if the
+ pixels pack from the MS to LS or from LS to MS
+CONFIG_NX_MOUSE
+ Build in support for mouse input.
+CONFIG_NX_KBD
+ Build in support of keypad/keyboard input.
+CONFIG_NXTK_BORDERWIDTH
+ Specifies with with of the border (in pixels) used with framed windows.
+ The default is 4.
+CONFIG_NXTK_BORDERCOLOR1, CONFIG_NXTK_BORDERCOLOR2, CONFIG_NXTK_BORDERCOLOR3
+ Specify the colors of the border used with framed windows.
+ CONFIG_NXTK_BORDERCOLOR2 is the shadow side color and so is normally darker.
+ CONFIG_NXTK_BORDERCOLOR3 is the shiny side color and so is normally brighter.
+ The default is mediumdark grey, and light grey, respectively
+CONFIG_NXTK_AUTORAISE
+ If set, a window will be raised to the top if the mouse position is over a
+ visible portion of the window. Default: A mouse button must be clicked over
+ a visible portion of the window.
+CONFIG_NXFONTS_CHARBITS
+ The number of bits in the character set. Current options are only 7 and 8.
+ The default is 7.
+
+Font Selections
+---------------
+
+CONFIG_NXFONT_SANS17X22
+ This option enables support for a tiny, 17x22 san serif font
+ (font ID FONTID_SANS17X22 == 14).
+CONFIG_NXFONT_SANS20X26
+ This option enables support for a tiny, 20x26 san serif font
+ (font ID FONTID_SANS20X26 == 15).
+CONFIG_NXFONT_SANS23X27
+ This option enables support for a tiny, 23x27 san serif font
+ (font ID FONTID_SANS23X27 == 1).
+CONFIG_NXFONT_SANS22X29
+ This option enables support for a small, 22x29 san serif font
+ (font ID FONTID_SANS22X29 == 2).
+CONFIG_NXFONT_SANS28X37
+ This option enables support for a medium, 28x37 san serif font
+ (font ID FONTID_SANS28X37 == 3).
+CONFIG_NXFONT_SANS39X48
+ This option enables support for a large, 39x48 san serif font
+ (font ID FONTID_SANS39X48 == 4).
+CONFIG_NXFONT_SANS17X23B
+ This option enables support for a tiny, 17x23 san serif bold font
+ (font ID FONTID_SANS17X23B == 16).
+CONFIG_NXFONT_SANS20X27B
+ This option enables support for a tiny, 20x27 san serif bold font
+ (font ID FONTID_SANS20X27B == 17).
+CONFIG_NXFONT_SANS22X29B
+ This option enables support for a small, 22x29 san serif bold font
+ (font ID FONTID_SANS22X29B == 5).
+CONFIG_NXFONT_SANS28X37B
+ This option enables support for a medium, 28x37 san serif bold font
+ (font ID FONTID_SANS28X37B == 6).
+CONFIG_NXFONT_SANS40X49B
+ This option enables support for a large, 40x49 san serif bold font
+ (font ID FONTID_SANS40X49B == 7).
+CONFIG_NXFONT_SERIF22X29
+ This option enables support for a small, 22x29 font (with serifs)
+ (font ID FONTID_SERIF22X29 == 8).
+CONFIG_NXFONT_SERIF29X37
+ This option enables support for a medium, 29x37 font (with serifs)
+ (font ID FONTID_SERIF29X37 == 9).
+CONFIG_NXFONT_SERIF38X48
+ This option enables support for a large, 38x48 font (with serifs)
+ (font ID FONTID_SERIF38X48 == 10).
+CONFIG_NXFONT_SERIF22X28B
+ This option enables support for a small, 27x38 bold font (with serifs)
+ (font ID FONTID_SERIF22X28B == 11).
+CONFIG_NXFONT_SERIF27X38B
+ This option enables support for a medium, 27x38 bold font (with serifs)
+ (font ID FONTID_SERIF27X38B == 12).
+CONFIG_NXFONT_SERIF38X49B
+ This option enables support for a large, 38x49 bold font (with serifs)
+ (font ID FONTID_SERIF38X49B == 13).
+
+NxConsole Configuration Settings
+--------------------------------
+
+CONFIG_NXCONSOLE
+ Enables building of the NxConsole driver.
+
+NxConsole output text/graphics options:
+
+CONFIG_NXCONSOLE_BPP
+ Currently, NxConsole supports only a single pixel depth. This
+ configuration setting must be provided to support that single pixel depth.
+ Default: The smallest enabled pixel depth. (see CONFIG_NX_DISABLE_*BPP)
+CONFIG_NXCONSOLE_CURSORCHAR
+ The bitmap code to use as the cursor. Default '_'
+CONFIG_NXCONSOLE_MXCHARS
+ NxConsole needs to remember every character written to the console so
+ that it can redraw the window. This setting determines the size of some
+ internal memory allocations used to hold the character data. Default: 128.
+CONFIG_NXCONSOLE_CACHESIZE
+ NxConsole supports caching of rendered fonts. This font caching is required
+ for two reasons: (1) First, it improves text performance, but more
+ importantly (2) it preserves the font memory. Since the NX server runs on
+ a separate server thread, it requires that the rendered font memory persist
+ until the server has a chance to render the font. Unfortunately, the font
+ cache would be quite large if all fonts were saved. The CONFIG_NXCONSOLE_CACHESIZE
+ setting will control the size of the font cache (in number of glyphs). Only that
+ number of the most recently used glyphs will be retained. Default: 16.
+ NOTE: There can still be a race condition between the NxConsole driver and the
+ NX task. If you every see character corruption (especially when printing
+ a lot of data or scrolling), then increasing the value of CONFIG_NXCONSOLE_CACHESIZE
+ is something that you should try. Alternatively, you can reduce the size of
+ CONFIG_MQ_MAXMSGSIZE which will force NxConsole task to pace the server task.
+ CONFIG_NXCONSOLE_CACHESIZE should be larger than ONFIG_MQ_MAXMSGSIZE in any event.
+CONFIG_NXCONSOLE_LINESEPARATION
+ This the space (in rows) between each row of test. Default: 0
+CONFIG_NXCONSOLE_NOWRAP
+ By default, lines will wrap when the test reaches the right hand side
+ of the window. This setting can be defining to change this behavior so
+ that the text is simply truncated until a new line is encountered.
+
+NxConsole Input options
+
+CONFIG_NXCONSOLE_NXKBDIN
+ Take input from the NX keyboard input callback. By default, keyboard
+ input is taken from stdin (/dev/console). If this option is set, then
+ the interface nxcon_kdbin() is enabled. That interface may be driven
+ by window callback functions so that keyboard input *only* goes to the
+ top window.
+CONFIG__NXCONSOLE_KBDBUFSIZE
+ If CONFIG_NXCONSOLE_NXKBDIN is enabled, then this value may be used to
+ define the size of the per-window keyboard input buffer. Default: 16
+CONFIG_NXCONSOLE_NPOLLWAITERS
+ The number of threads that can be waiting for read data available.
+ Default: 4
+
+NX Multi-user only options
+--------------------------
+
+CONFIG_NX_BLOCKING
+ Open the client message queues in blocking mode. In this case,
+ nx_eventhandler() will not return until a message is received and processed.
+CONFIG_NX_MXSERVERMSGS and CONFIG_NX_MXCLIENTMSGS
+ Specifies the maximum number of messages that can fit in the message queues.
+ No additional resources are allocated, but this can be set to prevent
+ flooding of the client or server with too many messages (CONFIG_PREALLOC_MQ_MSGS
+ controls how many messages are pre-allocated).
+
+
diff --git a/nuttx/graphics/nxbe/Make.defs b/nuttx/graphics/nxbe/Make.defs
new file mode 100644
index 000000000..53fdf9664
--- /dev/null
+++ b/nuttx/graphics/nxbe/Make.defs
@@ -0,0 +1,41 @@
+############################################################################
+# graphics/nxbe/Make.defs
+#
+# Copyright (C) 2008, 2011 Gregory Nutt. All rights reserved.
+# Author: Gregory Nutt <gnutt@nuttx.org>
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in
+# the documentation and/or other materials provided with the
+# distribution.
+# 3. Neither the name NuttX nor the names of its contributors may be
+# used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+############################################################################
+
+NXBE_ASRCS =
+NXBE_CSRCS = nxbe_bitmap.c nxbe_configure.c nxbe_colormap.c nxbe_clipper.c \
+ nxbe_closewindow.c nxbe_fill.c nxbe_filltrapezoid.c \
+ nxbe_getrectangle.c nxbe_lower.c nxbe_move.c nxbe_raise.c \
+ nxbe_redraw.c nxbe_redrawbelow.c nxbe_setpixel.c nxbe_setposition.c \
+ nxbe_setsize.c nxbe_visible.c
diff --git a/nuttx/graphics/nxbe/nxbe.h b/nuttx/graphics/nxbe/nxbe.h
new file mode 100644
index 000000000..aff42d6b3
--- /dev/null
+++ b/nuttx/graphics/nxbe/nxbe.h
@@ -0,0 +1,533 @@
+/****************************************************************************
+ * graphics/nxbe/nxbe.h
+ *
+ * Copyright (C) 2008-2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+#ifndef __GRAPHICS_NXBE_NXBE_H
+#define __GRAPHICS_NXBE_NXBE_H
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdint.h>
+#include <stdbool.h>
+
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxglib.h>
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/* Configuration ************************************************************/
+
+#ifndef CONFIG_NX_NPLANES
+# define CONFIG_NX_NPLANES 1 /* Max number of color planes supported */
+#endif
+
+#ifndef CONFIG_NX_NCOLORS
+# define CONFIG_NX_NCOLORS 256
+#endif
+
+/* NXBE Definitions *********************************************************/
+/* These are the values for the clipping order provided to nx_clipper */
+
+#define NX_CLIPORDER_TLRB (0) /* Top-left-right-bottom */
+#define NX_CLIPORDER_TRLB (1) /* Top-right-left-bottom */
+#define NX_CLIPORDER_BLRT (2) /* Bottom-left-right-top */
+#define NX_CLIPORDER_BRLT (3) /* Bottom-right-left-top */
+#define NX_CLIPORDER_DEFAULT NX_CLIPORDER_TLRB
+
+/* Window flags and helper macros */
+
+#define NXBE_WINDOW_BLOCKED (1 << 0) /* The window is blocked and will not
+ * receive further input. */
+
+#define NXBE_ISBLOCKED(wnd) (((wnd)->flags & NXBE_WINDOW_BLOCKED) != 0)
+#define NXBE_SETBLOCKED(wnd) do { (wnd)->flags |= NXBE_WINDOW_BLOCKED; } while (0)
+
+/****************************************************************************
+ * Public Types
+ ****************************************************************************/
+
+/* Rasterization ************************************************************/
+
+/* A tiny vtable of raster operation function pointers. The types of the
+ * function points must match the rasterizer types exported by nxglib
+ */
+
+struct nxbe_plane_s
+{
+ /* Raster operation callbacks for this bits-per-pixel value */
+
+ void (*setpixel)(FAR NX_PLANEINFOTYPE *pinfo,
+ FAR const struct nxgl_point_s *pos,
+ nxgl_mxpixel_t color);
+ void (*fillrectangle)(FAR NX_PLANEINFOTYPE *pinfo,
+ FAR const struct nxgl_rect_s *rect,
+ nxgl_mxpixel_t color);
+ void (*getrectangle)(FAR NX_PLANEINFOTYPE *pinfo,
+ FAR const struct nxgl_rect_s *rect,
+ FAR void *dest, unsigned int deststride);
+ void (*filltrapezoid)(FAR NX_PLANEINFOTYPE *pinfo,
+ FAR const struct nxgl_trapezoid_s *trap,
+ FAR const struct nxgl_rect_s *bounds,
+ nxgl_mxpixel_t color);
+ void (*moverectangle)(FAR NX_PLANEINFOTYPE *pinfo,
+ FAR const struct nxgl_rect_s *rect,
+ FAR struct nxgl_point_s *offset);
+ void (*copyrectangle)(FAR NX_PLANEINFOTYPE *pinfo,
+ FAR const struct nxgl_rect_s *dest,
+ FAR const void *src,
+ FAR const struct nxgl_point_s *origin,
+ unsigned int srcstride);
+
+ /* Framebuffer plane info describing destination video plane */
+
+ NX_PLANEINFOTYPE pinfo;
+};
+
+/* Clipping *****************************************************************/
+
+/* Clipping callback functions called nxbe_clipper for each visible and
+ * obscured region of a rectangle within a window.
+ */
+
+struct nxbe_clipops_s
+{
+ void (*visible)(FAR struct nxbe_clipops_s *cops,
+ FAR struct nxbe_plane_s *plane,
+ FAR const struct nxgl_rect_s *rect);
+
+ void (*obscured)(FAR struct nxbe_clipops_s *cops,
+ FAR struct nxbe_plane_s *plane,
+ FAR const struct nxgl_rect_s *rect);
+};
+
+/* Windows ******************************************************************/
+
+/* This structure represents one window. */
+
+struct nxbe_state_s;
+struct nxfe_conn_s;
+struct nxbe_window_s
+{
+ /* State information */
+
+ FAR struct nxbe_state_s *be; /* The back-end state structure */
+#ifdef CONFIG_NX_MULTIUSER
+ FAR struct nxfe_conn_s *conn; /* Connection to the window client */
+#endif
+ FAR const struct nx_callback_s *cb; /* Event handling callbacks */
+
+ /* The following links provide the window's vertical position using a
+ * singly linked list.
+ */
+
+ FAR struct nxbe_window_s *above; /* The window "above" this window */
+ FAR struct nxbe_window_s *below; /* The window "below this one */
+
+ /* Window geometry. The window is described by a rectangle in the
+ * absolute screen coordinate system (0,0)->(xres,yres)
+ */
+
+ struct nxgl_rect_s bounds; /* The bounding rectangle of window */
+
+ /* Window flags (see the NXBE_* bit definitions above) */
+
+#ifdef CONFIG_NX_MULTIUSER /* Currently used only in multi-user mode */
+ uint8_t flags;
+#endif
+
+ /* Client state information this is provide in window callbacks */
+
+ FAR void *arg;
+};
+
+/* Back-end state ***********************************************************/
+
+/* This structure describes the overall back-end window state */
+
+struct nxbe_state_s
+{
+ /* The window list (with the background window always at the bottom) */
+
+ FAR struct nxbe_window_s *topwnd; /* The window at the top of the display */
+ struct nxbe_window_s bkgd; /* The background window is always at the bottom */
+
+ /* At present, only a solid colored background is supported for refills. The
+ * following provides the background color. It would be nice to support
+ * background bitmap images as well.
+ */
+
+ nxgl_mxpixel_t bgcolor[CONFIG_NX_NPLANES];
+
+ /* vinfo describes the video controller and plane[n].pinfo describes color
+ * plane 'n' supported by the video controller. Most common color models
+ * fit in one plane, but this array provides future support for hardware
+ * with planar YUV types with 3 or 4 color planes.
+ */
+
+ struct fb_videoinfo_s vinfo;
+
+ /* Rasterizing functions selected to match the BPP reported in pinfo[] */
+
+ struct nxbe_plane_s plane[CONFIG_NX_NPLANES];
+};
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+#define EXTERN extern "C"
+extern "C" {
+#else
+#define EXTERN extern
+#endif
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxbe_colormap
+ *
+ * Description:
+ * Set the harware color map to the palette expected by NX
+ *
+ ****************************************************************************/
+
+#ifdef CONFIG_FB_CMAP
+EXTERN int nxbe_colormap(FAR NX_DRIVERTYPE *dev);
+#endif
+
+/****************************************************************************
+ * Name: nx_configure
+ *
+ * Description:
+ * Configure the back end state structure based on information from the
+ * framebuffer or LCD driver
+ *
+ ****************************************************************************/
+
+EXTERN int nxbe_configure(FAR NX_DRIVERTYPE *dev,
+ FAR struct nxbe_state_s *be);
+
+/****************************************************************************
+ * Name: nxbe_closewindow
+ *
+ * Description:
+ * Close an existing window
+ *
+ * Input Parameters:
+ * wnd - The window to be closed (and deallocated)
+ *
+ * Return:
+ * None
+ *
+ ****************************************************************************/
+
+EXTERN void nxbe_closewindow(struct nxbe_window_s *wnd);
+
+/****************************************************************************
+ * Name: nxbe_setposition
+ *
+ * Descripton:
+ * This function checks for intersections and redraws the display after
+ * a change in the position of a window.
+ *
+ ****************************************************************************/
+
+EXTERN void nxbe_setposition(FAR struct nxbe_window_s *wnd,
+ FAR const struct nxgl_point_s *pos);
+
+/****************************************************************************
+ * Name: nxbe_setsize
+ *
+ * Descripton:
+ * This function checks for intersections and redraws the display after
+ * a change in the size of a window.
+ *
+ ****************************************************************************/
+
+EXTERN void nxbe_setsize(FAR struct nxbe_window_s *wnd,
+ FAR const struct nxgl_size_s *size);
+
+/****************************************************************************
+ * Name: nxbe_raise
+ *
+ * Description:
+ * Bring the specified window to the top of the display.
+ *
+ ****************************************************************************/
+
+EXTERN void nxbe_raise(FAR struct nxbe_window_s *wnd);
+
+/****************************************************************************
+ * Name: nxbe_lower
+ *
+ * Description:
+ * Lower the specified window to the bottom of the display.
+ *
+ ****************************************************************************/
+
+EXTERN void nxbe_lower(FAR struct nxbe_window_s *wnd);
+
+/****************************************************************************
+ * Name: nxbe_setpixel
+ *
+ * Description:
+ * Set a single pixel in the window to the specified color. This is simply
+ * a degenerate case of nxbe_fill(), but may be optimized in some architectures.
+ *
+ * Input Parameters:
+ * wnd - The window structure reference
+ * pos - The pixel location to be set
+ * col - The color to use in the set
+ *
+ * Return:
+ * None
+ *
+ ****************************************************************************/
+
+EXTERN void nxbe_setpixel(FAR struct nxbe_window_s *wnd,
+ FAR const struct nxgl_point_s *pos,
+ nxgl_mxpixel_t color[CONFIG_NX_NPLANES]);
+
+/****************************************************************************
+ * Name: nxbe_fill
+ *
+ * Description:
+ * Fill the specified rectangle in the window with the specified color
+ *
+ * Input Parameters:
+ * wnd - The window structure reference
+ * rect - The location to be filled
+ * col - The color to use in the fill
+ *
+ * Return:
+ * None
+ *
+ ****************************************************************************/
+
+EXTERN void nxbe_fill(FAR struct nxbe_window_s *wnd,
+ FAR const struct nxgl_rect_s *rect,
+ nxgl_mxpixel_t color[CONFIG_NX_NPLANES]);
+
+/****************************************************************************
+ * Name: nxbe_filltrapezoid
+ *
+ * Description:
+ * Fill the specified rectangle in the window with the specified color
+ *
+ * Input Parameters:
+ * wnd - The window structure reference
+ * clip - Clipping region (may be null)
+ * rect - The location to be filled
+ * col - The color to use in the fill
+ *
+ * Return:
+ * None
+ *
+ ****************************************************************************/
+
+EXTERN void nxbe_filltrapezoid(FAR struct nxbe_window_s *wnd,
+ FAR const struct nxgl_rect_s *clip,
+ FAR const struct nxgl_trapezoid_s *trap,
+ nxgl_mxpixel_t color[CONFIG_NX_NPLANES]);
+
+/****************************************************************************
+ * Name: nxbe_getrectangle
+ *
+ * Description:
+ * Get the raw contents of graphic memory within a rectangular region. NOTE:
+ * Since raw graphic memory is returned, the returned memory content may be
+ * the memory of windows above this one and may not necessarily belong to
+ * this window unless you assure that this is the top window.
+ *
+ * Input Parameters:
+ * wnd - The window structure reference
+ * rect - The location to be copied
+ * plane - Specifies the color plane to get from.
+ * dest - The location to copy the memory region
+ * deststride - The width, in bytes, the the dest memory
+ *
+ * Return:
+ * None
+ *
+ ****************************************************************************/
+
+EXTERN void nxbe_getrectangle(FAR struct nxbe_window_s *wnd,
+ FAR const struct nxgl_rect_s *rect,
+ unsigned int plane,
+ FAR uint8_t *dest, unsigned int deststride);
+
+/****************************************************************************
+ * Name: nxbe_move
+ *
+ * Description:
+ * Move a rectangular region within the window
+ *
+ * Input Parameters:
+ * wnd - The window within which the move is to be done
+ * rect - Describes the rectangular region to move
+ * offset - The offset to move the region
+ *
+ * Return:
+ * None
+ *
+ ****************************************************************************/
+
+EXTERN void nxbe_move(FAR struct nxbe_window_s *wnd,
+ FAR const struct nxgl_rect_s *rect,
+ FAR const struct nxgl_point_s *offset);
+
+/****************************************************************************
+ * Name: nxbe_bitmap
+ *
+ * Description:
+ * Copy a rectangular region of a larger image into the rectangle in the
+ * specified window.
+ *
+ * Input Parameters:
+ * wnd - The window that will receive the bitmap image
+ * dest - Describes the rectangular on the display that will receive the
+ * the bit map.
+ * src - The start of the source image.
+ * origin - The origin of the upper, left-most corner of the full bitmap.
+ * Both dest and origin are in window coordinates, however, origin
+ * may lie outside of the display.
+ * stride - The width of the full source image in pixels.
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+EXTERN void nxbe_bitmap(FAR struct nxbe_window_s *wnd,
+ FAR const struct nxgl_rect_s *dest,
+ FAR const void *src[CONFIG_NX_NPLANES],
+ FAR const struct nxgl_point_s *origin,
+ unsigned int stride);
+
+/****************************************************************************
+ * Name: nxbe_redraw
+ *
+ * Descripton:
+ * Re-draw the visible portions of the rectangular region for the
+ * specified window
+ *
+ ****************************************************************************/
+
+EXTERN void nxbe_redraw(FAR struct nxbe_state_s *be,
+ FAR struct nxbe_window_s *wnd,
+ FAR const struct nxgl_rect_s *rect);
+
+/****************************************************************************
+ * Name: nxbe_redrawbelow
+ *
+ * Descripton:
+ * Re-draw the visible portions of the rectangular region for all windows
+ * below (and including) the specified window. This function is called
+ * whenever a window is closed, moved, lowered or re-sized in order to
+ * expose newly visible portions of lower windows.
+ *
+ ****************************************************************************/
+
+EXTERN void nxbe_redrawbelow(FAR struct nxbe_state_s *be,
+ FAR struct nxbe_window_s *wnd,
+ FAR const struct nxgl_rect_s *rect);
+
+/****************************************************************************
+ * Name: nxbe_visible
+ *
+ * Descripton:
+ * Return true if the point, pt, in window wnd is visible. pt is in
+ * absolute screen coordinates
+ *
+ ****************************************************************************/
+
+EXTERN bool nxbe_visible(FAR struct nxbe_window_s *wnd,
+ FAR const struct nxgl_point_s *pos);
+
+/****************************************************************************
+ * Name: nxbe_clipper
+ *
+ * Descripton:
+ * Perform flexible clipping operations. Callbacks are executed for
+ * each oscured and visible portions of the window.
+ *
+ * Input Parameters:
+ * wnd - The window to be clipped.
+ * rect - The region of concern within the window
+ * order - Specifies the order to process the parts of the non-intersecting
+ * sub-rectangles.
+ * cops - The callbacks to handle obscured and visible parts of the
+ * sub-rectangles.
+ * plane - The raster operations to be used by the callback functions.
+ * These may vary with different color formats.
+ *
+ * Returned Value:
+ * None
+ *
+ ****************************************************************************/
+
+EXTERN void nxbe_clipper(FAR struct nxbe_window_s *wnd,
+ FAR const struct nxgl_rect_s *dest, uint8_t order,
+ FAR struct nxbe_clipops_s *cops,
+ FAR struct nxbe_plane_s *plane);
+
+/****************************************************************************
+ * Name: nxbe_clipnull
+ *
+ * Descripton:
+ * The do-nothing clipping callback function
+ *
+ ****************************************************************************/
+
+EXTERN void nxbe_clipnull(FAR struct nxbe_clipops_s *cops,
+ FAR struct nxbe_plane_s *plane,
+ FAR const struct nxgl_rect_s *rect);
+
+#undef EXTERN
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* __GRAPHICS_NXBE_NXBE_H */
+
diff --git a/nuttx/graphics/nxbe/nxbe_bitmap.c b/nuttx/graphics/nxbe/nxbe_bitmap.c
new file mode 100644
index 000000000..991b91d82
--- /dev/null
+++ b/nuttx/graphics/nxbe/nxbe_bitmap.c
@@ -0,0 +1,192 @@
+/****************************************************************************
+ * graphics/nxbe/nxbe_bitmap.c
+ *
+ * Copyright (C) 2008-2009, 2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nxglib.h>
+#include "nxbe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+struct nx_bitmap_s
+{
+ struct nxbe_clipops_s cops;
+ FAR const void *src; /* The start of the source image. */
+ struct nxgl_point_s origin; /* Offset into the source image data */
+ unsigned int stride; /* The width of the full source image in pixels. */
+};
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxs_clipcopy
+ *
+ * Description:
+ * Called from nxbe_clipper() to performed the fill operation on visible portions
+ * of the rectangle.
+ *
+ ****************************************************************************/
+
+static void nxs_clipcopy(FAR struct nxbe_clipops_s *cops,
+ FAR struct nxbe_plane_s *plane,
+ FAR const struct nxgl_rect_s *rect)
+{
+ struct nx_bitmap_s *bminfo = (struct nx_bitmap_s *)cops;
+ plane->copyrectangle(&plane->pinfo, rect, bminfo->src,
+ &bminfo->origin, bminfo->stride);
+}
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxbe_bitmap
+ *
+ * Description:
+ * Copy a rectangular region of a larger image into the rectangle in the
+ * specified window.
+ *
+ * Input Parameters:
+ * wnd - The window that will receive the bitmap image
+ * dest - Describes the rectangular on the display that will receive the
+ * the bit map.
+ * src - The start of the source image.
+ * origin - The origin of the upper, left-most corner of the full bitmap.
+ * Both dest and origin are in window coordinates, however, origin
+ * may lie outside of the display.
+ * stride - The width of the full source image in pixels.
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+void nxbe_bitmap(FAR struct nxbe_window_s *wnd, FAR const struct nxgl_rect_s *dest,
+ FAR const void *src[CONFIG_NX_NPLANES],
+ FAR const struct nxgl_point_s *origin, unsigned int stride)
+{
+ struct nx_bitmap_s info;
+ struct nxgl_rect_s bounds;
+ struct nxgl_point_s offset;
+ struct nxgl_rect_s remaining;
+ unsigned int deststride;
+ int i;
+
+#ifdef CONFIG_DEBUG
+ if (!wnd || !dest || !src || !origin)
+ {
+ return;
+ }
+#endif
+
+ /* Verify that the destination rectangle begins "below" and to the "right"
+ * of the origin
+ */
+
+ if (dest->pt1.x < origin->x || dest->pt1.y < origin->y)
+ {
+ gdbg("Bad dest start position\n");
+ return;
+ }
+
+ /* Verify that the width of the destination rectangle does not exceed the
+ * width of the source bitmap data (taking into account the bitmap origin)
+ */
+
+ deststride = (((dest->pt2.x - origin->x + 1) * wnd->be->plane[0].pinfo.bpp + 7) >> 3);
+ if (deststride > stride)
+ {
+ gdbg("Bad dest width\n");
+ return;
+ }
+
+ /* Offset the rectangle and image origin by the window origin */
+
+ nxgl_rectoffset(&bounds, dest, wnd->bounds.pt1.x, wnd->bounds.pt1.y);
+ nxgl_vectoradd(&offset, origin, &wnd->bounds.pt1);
+
+ /* Clip to the limits of the window and of the background screen */
+
+ nxgl_rectintersect(&remaining, &bounds, &wnd->bounds);
+ nxgl_rectintersect(&remaining, &remaining, &wnd->be->bkgd.bounds);
+ if (nxgl_nullrect(&remaining))
+ {
+ return;
+ }
+
+ /* Then perform the clipped fill */
+
+#if CONFIG_NX_NPLANES > 1
+ for (i = 0; i < wnd->be->vinfo.nplanes; i++)
+#else
+ i = 0;
+#endif
+ {
+ info.cops.visible = nxs_clipcopy;
+ info.cops.obscured = nxbe_clipnull;
+ info.src = src[i];
+ info.origin.x = offset.x;
+ info.origin.y = offset.y;
+ info.stride = stride;
+
+ nxbe_clipper(wnd->above, &remaining, NX_CLIPORDER_DEFAULT,
+ &info.cops, &wnd->be->plane[i]);
+ }
+}
+
diff --git a/nuttx/graphics/nxbe/nxbe_clipper.c b/nuttx/graphics/nxbe/nxbe_clipper.c
new file mode 100644
index 000000000..580c8bc4c
--- /dev/null
+++ b/nuttx/graphics/nxbe/nxbe_clipper.c
@@ -0,0 +1,278 @@
+/****************************************************************************
+ * graphics/nxbe/nxbe_clipper.c
+ *
+ * Copyright (C) 2008-2009 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdint.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include <debug.h>
+
+#include <nuttx/nx/nxglib.h>
+#include "nxbe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+#define NX_INITIAL_STACKSIZE (32)
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/* This structure is a container that retains an associated between a
+ * window instance and a rectangle.
+ */
+
+struct nxbe_cliprect_s
+{
+ FAR struct nxbe_window_s *wnd;
+ struct nxgl_rect_s rect;
+};
+
+/* This is the stack of pending clip operations */
+
+struct nxbe_clipstack_s
+{
+ uint16_t npushed; /* Number of deferred rectangles in stack */
+ uint16_t mxrects; /* The capacity of the stack */
+ struct nxbe_cliprect_s *stack; /* The stack of deferred rectangles */
+};
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+static const uint8_t g_nxcliporder[4][4] =
+{
+ { NX_TOP_NDX, NX_LEFT_NDX, NX_RIGHT_NDX, NX_BOTTOM_NDX }, /* index = NX_CLIPORDER_TLRB */
+ { NX_TOP_NDX, NX_RIGHT_NDX, NX_LEFT_NDX, NX_BOTTOM_NDX }, /* NX_CLIPORDER_TRLB */
+ { NX_BOTTOM_NDX, NX_LEFT_NDX, NX_RIGHT_NDX, NX_TOP_NDX }, /* NX_CLIPORDER_BLRT */
+ { NX_BOTTOM_NDX, NX_RIGHT_NDX, NX_LEFT_NDX, NX_TOP_NDX } /* NX_CLIPORDER_BRLT */
+};
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxbe_pushrectangle
+ ****************************************************************************/
+
+static inline void nxbe_pushrectangle(FAR struct nxbe_clipstack_s *stack,
+ FAR struct nxbe_window_s *wnd,
+ FAR const struct nxgl_rect_s *rect)
+{
+ /* Check if there is room on the stack to hold another rectangle */
+
+ if ((stack->npushed + 1) > stack->mxrects)
+ {
+ /* No then we will need to reallocate the stack to hole more */
+
+ int mxrects = stack->mxrects ? 2 * stack->mxrects : NX_INITIAL_STACKSIZE;
+ struct nxbe_cliprect_s *newstack;
+
+ newstack = realloc(stack->stack, sizeof(struct nxbe_cliprect_s) * mxrects);
+ if (!newstack)
+ {
+ gdbg("Failed to reallocate stack\n");
+ return;
+ }
+
+ stack->stack = newstack;
+ stack->mxrects = mxrects;
+ }
+
+ /* Then push the new rectangle onto the stack */
+
+ stack->stack[stack->npushed].wnd = wnd;
+ nxgl_rectcopy(&stack->stack[stack->npushed].rect, rect);
+ stack->npushed++;
+}
+
+/****************************************************************************
+ * Name: nxbe_poprectangle
+ ****************************************************************************/
+
+static inline bool nxbe_poprectangle(struct nxbe_clipstack_s *stack,
+ FAR struct nxbe_window_s **wnd,
+ struct nxgl_rect_s *rect)
+{
+ if(stack->npushed > 0)
+ {
+ stack->npushed--;
+ *wnd = stack->stack[stack->npushed].wnd;
+ nxgl_rectcopy(rect, &stack->stack[stack->npushed].rect);
+ return true;
+ }
+ return false;
+}
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxbe_clipper
+ *
+ * Descripton:
+ * Perform flexible clipping operations. Callbacks are executed for
+ * each oscured and visible portions of the window.
+ *
+ * Input Parameters:
+ * wnd - The window to be clipped.
+ * rect - The region of concern within the window
+ * order - Specifies the order to process the parts of the non-intersecting
+ * sub-rectangles.
+ * cops - The callbacks to handle obscured and visible parts of the
+ * sub-rectangles.
+ * plane - The raster operations to be used by the callback functions.
+ * These may vary with different color formats.
+ *
+ * Returned Value:
+ * None
+ *
+ ****************************************************************************/
+
+void nxbe_clipper(FAR struct nxbe_window_s *wnd,
+ FAR const struct nxgl_rect_s *dest, uint8_t order,
+ FAR struct nxbe_clipops_s *cops,
+ FAR struct nxbe_plane_s *plane)
+{
+ struct nxbe_clipstack_s stack;
+ FAR struct nxbe_window_s *currw;
+ struct nxgl_rect_s rect;
+ struct nxgl_rect_s obscuredrect;
+ struct nxgl_rect_s currbounds;
+ struct nxgl_rect_s nonoverlapped[4];
+ int i;
+
+ /* Initialize the stack where we will keep deferred rectangle operations */
+
+ stack.npushed = 0;
+ stack.mxrects = 0;
+ stack.stack = NULL;
+
+ /* Loop until there are no further pending operations */
+
+ nxgl_rectcopy(&rect, dest); /* Start with the whole dest rectangle */
+ do
+ {
+ /* Loop for every window from the current window and above. Only windows
+ * above the current window can obscure the current window
+ */
+
+ for (currw = wnd; currw; currw = currw->above)
+ {
+ /* Does the current window overlap the dest rectangle? */
+
+ currbounds = currw->bounds;
+ if (nxgl_rectoverlap(&rect, &currbounds))
+ {
+ /* Yes.. then it obscures all or part of the dest rectangle.
+ * Divide the potentially visible, non-overlapping regions into 4
+ * smaller rectangles and push them onto the stack for processing
+ * on the next time through the outer loop.
+ */
+
+ nxgl_nonintersecting(nonoverlapped, &rect, &currbounds);
+ for (i = 3; i >= 0; i--)
+ {
+ /* Push the rectangles in the order specific by the input
+ * argument of that name.
+ */
+
+ struct nxgl_rect_s *candidate = &nonoverlapped[g_nxcliporder[order][i]];
+ if (!nxgl_nullrect(candidate))
+ {
+ nxbe_pushrectangle(&stack, currw->above, candidate);
+ }
+ }
+
+ /* Now performed any required processing on the obscurred,
+ * overlapped region.
+ */
+
+ nxgl_rectintersect(&obscuredrect, &rect, &currbounds);
+ cops->obscured(cops, plane, &obscuredrect);
+
+ /* Break out of the loop to process the pushed rectangles */
+
+ break;
+ }
+ }
+
+ /* If there are no other windows overlapping this rectangle, then this
+ * rectangular region must be visible.
+ */
+
+ if (!currw && !nxgl_nullrect(&rect))
+ {
+ cops->visible(cops, plane, &rect);
+ }
+ }
+ while (nxbe_poprectangle(&stack, &wnd, &rect));
+
+ /* Done! If any stack was allocated, then free it before exit-ting */
+
+ if (stack.stack)
+ {
+ free(stack.stack);
+ }
+}
+
+/****************************************************************************
+ * Name: nxbe_clipnull
+ *
+ * Descripton:
+ * The do-nothing clipping callback function
+ *
+ ****************************************************************************/
+
+void nxbe_clipnull(FAR struct nxbe_clipops_s *cops,
+ FAR struct nxbe_plane_s *plane,
+ FAR const struct nxgl_rect_s *rect)
+{
+}
+
diff --git a/nuttx/graphics/nxbe/nxbe_closewindow.c b/nuttx/graphics/nxbe/nxbe_closewindow.c
new file mode 100644
index 000000000..3c583fcfb
--- /dev/null
+++ b/nuttx/graphics/nxbe/nxbe_closewindow.c
@@ -0,0 +1,137 @@
+/****************************************************************************
+ * graphics/nxbe/nxbe_closewindow.c
+ *
+ * Copyright (C) 2008-2009, 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdlib.h>
+#include <assert.h>
+#include <debug.h>
+
+#include <nuttx/nx/nxglib.h>
+#include "nxbe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxbe_closewindow
+ *
+ * Description:
+ * Close an existing window
+ *
+ * Input Parameters:
+ * wnd - The window to be closed (and deallocated)
+ *
+ * Return:
+ * None
+ *
+ ****************************************************************************/
+
+void nxbe_closewindow(struct nxbe_window_s *wnd)
+{
+ FAR struct nxbe_state_s *be;
+
+#ifdef CONFIG_DEBUG
+ if (!wnd)
+ {
+ return;
+ }
+#endif
+ be = wnd->be;
+
+ /* The background window should never be closed */
+
+ DEBUGASSERT(wnd != &be->bkgd);
+
+ /* Is there a window above the one being closed? */
+
+ if (wnd->above)
+ {
+ /* Yes, now the window below that one is the window below
+ * the one being closed.
+ */
+
+ wnd->above->below = wnd->below;
+ }
+ else
+ {
+ /* No, then the top window is the one below this (which
+ * can never be NULL because the background window is
+ * always at the true bottom of the list
+ */
+
+ be->topwnd = wnd->below;
+ }
+
+ /* There is always a window below the one being closed (because
+ * the background is never closed. Now, the window above that
+ * is the window above the one that is being closed.
+ */
+
+ wnd->below->above = wnd->above;
+
+ /* Redraw the windows that were below us (and may now be exposed) */
+
+ nxbe_redrawbelow(be, wnd->below, &wnd->bounds);
+
+ /* Then discard the window structure */
+
+ free(wnd);
+}
diff --git a/nuttx/graphics/nxbe/nxbe_colormap.c b/nuttx/graphics/nxbe/nxbe_colormap.c
new file mode 100644
index 000000000..144317519
--- /dev/null
+++ b/nuttx/graphics/nxbe/nxbe_colormap.c
@@ -0,0 +1,155 @@
+/****************************************************************************
+ * graphics/nxbe/nxbe_colormap.c
+ *
+ * Copyright (C) 2008-2009,2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <debug.h>
+
+#include "nxbe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxbe_colormap
+ *
+ * Description:
+ * Set the harware color map to the palette expected by NX
+ *
+ ****************************************************************************/
+
+#if CONFIG_FB_CMAP
+int nxbe_colormap(FAR NX_DRIVERTYPE *dev)
+{
+ struct fb_cmap_s cmap;
+ uint8_t *alloc;
+ uint8_t *red;
+ uint8_t *green;
+ uint8_t *blue;
+ uint8_t rval;
+ uint8_t gval;
+ int size;
+ int ndx;
+ int ret;
+ int i, j, k;
+
+ /* Allocate the color map tables in one allocation:
+ *
+ * size = 3 colors x CONFIG_NX_COLORS each x 8-bits per color
+ */
+
+ size = 3 * CONFIG_NX_NCOLORS * sizeof(uint8_t);
+ alloc = (uint8_t*)malloc(size);
+ if (alloc == NULL)
+ {
+ return -ENOMEM;
+ }
+ memset(alloc, 0xff, size);
+
+ /* Then get pointers to each color table */
+
+ red = alloc;
+ green = &alloc[CONFIG_NX_NCOLORS];
+ blue = &alloc[2*CONFIG_NX_NCOLORS];
+
+ /* Initialize the color map tables. 6*6*6 = 216, the rest
+ * are (0xff, 0xfff 0xff)
+ */
+
+ ndx = 0;
+ for (i = 0; i < 6; i++)
+ {
+ rval = (i * (CONFIG_NX_NCOLORS-1) / 5) << 8;
+ for (j = 0; j < 6; j++)
+ {
+ gval = (j * (CONFIG_NX_NCOLORS-1) / 5) << 8;
+ for (k = 0; k < 6; k++)
+ {
+ red[ndx] = rval;
+ green[ndx] = gval;
+ blue[ndx] = k * (CONFIG_NX_NCOLORS-1) / 5;
+ ndx++;
+ }
+ }
+ }
+
+ /* Now configure the cmap structure */
+
+ cmap.first = 0;
+ cmap.len = CONFIG_NX_NCOLORS;
+ cmap.red = red;
+ cmap.green = green;
+ cmap.blue = blue;
+#ifdef CONFIG_FB_TRANSPARENCY
+ cmap.transp = NULL;
+#endif
+
+ /* Then set the color map */
+
+ ret = dev->putcmap(dev, &cmap);
+
+ free(alloc);
+ return ret;
+}
+#endif
diff --git a/nuttx/graphics/nxbe/nxbe_configure.c b/nuttx/graphics/nxbe/nxbe_configure.c
new file mode 100644
index 000000000..80c71db3a
--- /dev/null
+++ b/nuttx/graphics/nxbe/nxbe_configure.c
@@ -0,0 +1,219 @@
+/****************************************************************************
+ * graphics/nxbe/nxbe_configure.c
+ *
+ * Copyright (C) 2008-2010 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stddef.h>
+#include <errno.h>
+#include <debug.h>
+
+#include "nxbe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxbe_configure
+ *
+ * Description:
+ * Configure the back end state structure based on information from the
+ * framebuffer driver
+ *
+ ****************************************************************************/
+
+int nxbe_configure(FAR NX_DRIVERTYPE *dev, FAR struct nxbe_state_s *be)
+{
+ int ret;
+ int i;
+
+ /* Get the video controller configuration */
+
+ ret = dev->getvideoinfo(dev, &be->vinfo);
+ if (ret < 0)
+ {
+ gdbg("Failed to get vinfo\n");
+ return ret;
+ }
+
+ /* Check the number of color planes */
+
+#ifdef CONFIG_DEBUG
+ if (be->vinfo.nplanes > CONFIG_NX_NPLANES)
+ {
+ gdbg("NX configured for only %d planes, controller wants %d\n",
+ CONFIG_NX_NPLANES, be->vinfo.nplanes);
+ return -E2BIG;
+ }
+ else if (be->vinfo.nplanes < CONFIG_NX_NPLANES)
+ {
+ gdbg("NX configured for %d planes, controller only needs %d\n",
+ CONFIG_NX_NPLANES, be->vinfo.nplanes);
+ }
+#endif
+
+ /* Then get information about each color plane */
+
+ for (i = 0; i < be->vinfo.nplanes; i++)
+ {
+ ret = dev->getplaneinfo(dev, i, &be->plane[i].pinfo);
+ if (ret < 0)
+ {
+ gdbg("Failed to get pinfo[%d]\n", i);
+ return ret;
+ }
+
+ /* Select rasterizers to match the BPP reported for this plane.
+ * NOTE that there are configuration options to eliminate support
+ * for unused BPP values. If the unused BPP values are not suppressed
+ * in this way, then ALL rasterizers will be drawn into the link and
+ * will signicantly increase the size
+ */
+
+#ifndef CONFIG_NX_DISABLE_1BPP
+ if (be->plane[i].pinfo.bpp == 1)
+ {
+ be->plane[i].setpixel = nxgl_setpixel_1bpp;
+ be->plane[i].fillrectangle = nxgl_fillrectangle_1bpp;
+ be->plane[i].getrectangle = nxgl_getrectangle_1bpp;
+ be->plane[i].filltrapezoid = nxgl_filltrapezoid_1bpp;
+ be->plane[i].moverectangle = nxgl_moverectangle_1bpp;
+ be->plane[i].copyrectangle = nxgl_copyrectangle_1bpp;
+ }
+ else
+#endif
+#ifndef CONFIG_NX_DISABLE_2BPP
+ if (be->plane[i].pinfo.bpp == 2)
+ {
+ be->plane[i].setpixel = nxgl_setpixel_2bpp;
+ be->plane[i].fillrectangle = nxgl_fillrectangle_2bpp;
+ be->plane[i].getrectangle = nxgl_getrectangle_2bpp;
+ be->plane[i].filltrapezoid = nxgl_filltrapezoid_2bpp;
+ be->plane[i].moverectangle = nxgl_moverectangle_2bpp;
+ be->plane[i].copyrectangle = nxgl_copyrectangle_2bpp;
+ }
+ else
+#endif
+#ifndef CONFIG_NX_DISABLE_4BPP
+ if (be->plane[i].pinfo.bpp == 4)
+ {
+ be->plane[i].setpixel = nxgl_setpixel_4bpp;
+ be->plane[i].fillrectangle = nxgl_fillrectangle_4bpp;
+ be->plane[i].getrectangle = nxgl_getrectangle_4bpp;
+ be->plane[i].filltrapezoid = nxgl_filltrapezoid_4bpp;
+ be->plane[i].moverectangle = nxgl_moverectangle_4bpp;
+ be->plane[i].copyrectangle = nxgl_copyrectangle_4bpp;
+ }
+ else
+#endif
+#ifndef CONFIG_NX_DISABLE_8BPP
+ if (be->plane[i].pinfo.bpp == 8)
+ {
+ be->plane[i].setpixel = nxgl_setpixel_8bpp;
+ be->plane[i].fillrectangle = nxgl_fillrectangle_8bpp;
+ be->plane[i].getrectangle = nxgl_getrectangle_8bpp;
+ be->plane[i].filltrapezoid = nxgl_filltrapezoid_8bpp;
+ be->plane[i].moverectangle = nxgl_moverectangle_8bpp;
+ be->plane[i].copyrectangle = nxgl_copyrectangle_8bpp;
+ }
+ else
+#endif
+#ifndef CONFIG_NX_DISABLE_16BPP
+ if (be->plane[i].pinfo.bpp == 16)
+ {
+ be->plane[i].setpixel = nxgl_setpixel_16bpp;
+ be->plane[i].fillrectangle = nxgl_fillrectangle_16bpp;
+ be->plane[i].getrectangle = nxgl_getrectangle_16bpp;
+ be->plane[i].filltrapezoid = nxgl_filltrapezoid_16bpp;
+ be->plane[i].moverectangle = nxgl_moverectangle_16bpp;
+ be->plane[i].copyrectangle = nxgl_copyrectangle_16bpp;
+ }
+ else
+#endif
+#ifndef CONFIG_NX_DISABLE_24BPP
+ if (be->plane[i].pinfo.bpp == 24)
+ {
+ be->plane[i].setpixel = nxgl_setpixel_24bpp;
+ be->plane[i].fillrectangle = nxgl_fillrectangle_24bpp;
+ be->plane[i].getrectangle = nxgl_getrectangle_24bpp;
+ be->plane[i].filltrapezoid = nxgl_filltrapezoid_24bpp;
+ be->plane[i].moverectangle = nxgl_moverectangle_24bpp;
+ be->plane[i].copyrectangle = nxgl_copyrectangle_24bpp;
+ }
+ else
+#endif
+#ifndef CONFIG_NX_DISABLE_32BPP
+ if (be->plane[i].pinfo.bpp == 32)
+ {
+ be->plane[i].setpixel = nxgl_setpixel_32bpp;
+ be->plane[i].fillrectangle = nxgl_fillrectangle_32bpp;
+ be->plane[i].getrectangle = nxgl_getrectangle_32bpp;
+ be->plane[i].filltrapezoid = nxgl_filltrapezoid_32bpp;
+ be->plane[i].moverectangle = nxgl_moverectangle_32bpp;
+ be->plane[i].copyrectangle = nxgl_copyrectangle_32bpp;
+ }
+ else
+#endif
+ {
+ gdbg("Unsupported pinfo[%d] BPP: %d\n", i, be->plane[i].pinfo.bpp);
+ return -ENOSYS;
+ }
+ }
+ return OK;
+}
diff --git a/nuttx/graphics/nxbe/nxbe_fill.c b/nuttx/graphics/nxbe/nxbe_fill.c
new file mode 100644
index 000000000..f4aec7477
--- /dev/null
+++ b/nuttx/graphics/nxbe/nxbe_fill.c
@@ -0,0 +1,157 @@
+/****************************************************************************
+ * graphics/nxbe/nxbe_fill.c
+ *
+ * Copyright (C) 2008-2009, 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <nuttx/nx/nxglib.h>
+
+#include "nxbe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+struct nxbe_fill_s
+{
+ struct nxbe_clipops_s cops;
+ nxgl_mxpixel_t color;
+};
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxbe_clipfill
+ *
+ * Description:
+ * Called from nxbe_clipper() to performed the fill operation on visible portions
+ * of the rectangle.
+ *
+ ****************************************************************************/
+
+static void nxbe_clipfill(FAR struct nxbe_clipops_s *cops,
+ FAR struct nxbe_plane_s *plane,
+ FAR const struct nxgl_rect_s *rect)
+{
+ struct nxbe_fill_s *fillinfo = (struct nxbe_fill_s *)cops;
+ plane->fillrectangle(&plane->pinfo, rect, fillinfo->color);
+}
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxbe_fill
+ *
+ * Description:
+ * Fill the specified rectangle in the window with the specified color
+ *
+ * Input Parameters:
+ * wnd - The window structure reference
+ * rect - The location to be filled
+ * col - The color to use in the fill
+ *
+ * Return:
+ * None
+ *
+ ****************************************************************************/
+
+void nxbe_fill(FAR struct nxbe_window_s *wnd,
+ FAR const struct nxgl_rect_s *rect,
+ nxgl_mxpixel_t color[CONFIG_NX_NPLANES])
+{
+ struct nxbe_fill_s info;
+ struct nxgl_rect_s remaining;
+ int i;
+
+#ifdef CONFIG_DEBUG
+ if (!wnd || !rect)
+ {
+ return;
+ }
+#endif
+
+ /* Offset the rectangle by the window origin to convert it into a
+ * bounding box
+ */
+
+ nxgl_rectoffset(&remaining, rect, wnd->bounds.pt1.x, wnd->bounds.pt1.y);
+
+ /* Clip to the bounding box to the limits of the window and of the
+ * background screen
+ */
+
+ nxgl_rectintersect(&remaining, &remaining, &wnd->bounds);
+ nxgl_rectintersect(&remaining, &remaining, &wnd->be->bkgd.bounds);
+
+ /* Then clip the bounding box due to other windows above this one.
+ * Render the portions of the trapezoid exposed in visible regions.
+ */
+
+ if (!nxgl_nullrect(&remaining))
+ {
+#if CONFIG_NX_NPLANES > 1
+ for (i = 0; i < wnd->be->vinfo.nplanes; i++)
+#else
+ i = 0;
+#endif
+ {
+ info.cops.visible = nxbe_clipfill;
+ info.cops.obscured = nxbe_clipnull;
+ info.color = color[i];
+
+ nxbe_clipper(wnd->above, &remaining, NX_CLIPORDER_DEFAULT,
+ &info.cops, &wnd->be->plane[i]);
+ }
+ }
+}
diff --git a/nuttx/graphics/nxbe/nxbe_filltrapezoid.c b/nuttx/graphics/nxbe/nxbe_filltrapezoid.c
new file mode 100644
index 000000000..68dad838c
--- /dev/null
+++ b/nuttx/graphics/nxbe/nxbe_filltrapezoid.c
@@ -0,0 +1,173 @@
+/****************************************************************************
+ * graphics/nxbe/nxbe_filltrapezoid.c
+ *
+ * Copyright (C) 2008-2009, 2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <fixedmath.h>
+#include <nuttx/nx/nxglib.h>
+
+#include "nxbe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+struct nxbe_filltrap_s
+{
+ struct nxbe_clipops_s cops;
+ struct nxgl_trapezoid_s trap;
+ nxgl_mxpixel_t color;
+};
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxbe_clipfilltrapezoid
+ *
+ * Description:
+ * Called from nxbe_clipper() to performed the fill operation on visible portions
+ * of the rectangle.
+ *
+ ****************************************************************************/
+
+static void nxbe_clipfilltrapezoid(FAR struct nxbe_clipops_s *cops,
+ FAR struct nxbe_plane_s *plane,
+ FAR const struct nxgl_rect_s *rect)
+{
+ struct nxbe_filltrap_s *fillinfo = (struct nxbe_filltrap_s *)cops;
+ plane->filltrapezoid(&plane->pinfo, &fillinfo->trap, rect, fillinfo->color);
+}
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxbe_filltrapezoid
+ *
+ * Description:
+ * Fill the specified rectangle in the window with the specified color
+ *
+ * Input Parameters:
+ * wnd - The window structure reference
+ * clip - Clipping region (in relative window coordinates)
+ * rect - The location to be filled (in relative window coordinates)
+ * col - The color to use in the fill
+ *
+ * Return:
+ * None
+ *
+ ****************************************************************************/
+
+void nxbe_filltrapezoid(FAR struct nxbe_window_s *wnd,
+ FAR const struct nxgl_rect_s *clip,
+ FAR const struct nxgl_trapezoid_s *trap,
+ nxgl_mxpixel_t color[CONFIG_NX_NPLANES])
+{
+ struct nxbe_filltrap_s info;
+ struct nxgl_rect_s remaining;
+ int i;
+
+#ifdef CONFIG_DEBUG
+ if (!wnd || !trap)
+ {
+ return;
+ }
+#endif
+
+ /* Offset the trapezoid by the window origin to position it within
+ * the framebuffer region
+ */
+
+ nxgl_trapoffset(&info.trap, trap, wnd->bounds.pt1.x, wnd->bounds.pt1.y);
+
+ /* Create a bounding box that contains the trapezoid */
+
+ remaining.pt1.x = b16toi(ngl_min(info.trap.top.x1, info.trap.bot.x1));
+ remaining.pt1.y = info.trap.top.y;
+ remaining.pt2.x = b16toi(ngl_max(info.trap.top.x2, info.trap.bot.x2));
+ remaining.pt2.y = info.trap.bot.y;
+
+ /* Clip to any user specified clipping window */
+
+ if (clip)
+ {
+ struct nxgl_rect_s tmp;
+ nxgl_rectoffset(&tmp, clip, wnd->bounds.pt1.x, wnd->bounds.pt1.y);
+ nxgl_rectintersect(&remaining, &remaining, &tmp);
+ }
+
+ /* Clip to the limits of the window and of the background screen */
+
+ nxgl_rectintersect(&remaining, &remaining, &wnd->bounds);
+ nxgl_rectintersect(&remaining, &remaining, &wnd->be->bkgd.bounds);
+
+ if (!nxgl_nullrect(&remaining))
+ {
+ info.cops.visible = nxbe_clipfilltrapezoid;
+ info.cops.obscured = nxbe_clipnull;
+
+ /* Then process each color plane */
+
+#if CONFIG_NX_NPLANES > 1
+ for (i = 0; i < wnd->be->vinfo.nplanes; i++)
+#else
+ i = 0;
+#endif
+ {
+ info.color = color[i];
+ nxbe_clipper(wnd->above, &remaining, NX_CLIPORDER_DEFAULT,
+ &info.cops, &wnd->be->plane[i]);
+ }
+ }
+}
diff --git a/nuttx/graphics/nxbe/nxbe_getrectangle.c b/nuttx/graphics/nxbe/nxbe_getrectangle.c
new file mode 100644
index 000000000..84f010cd5
--- /dev/null
+++ b/nuttx/graphics/nxbe/nxbe_getrectangle.c
@@ -0,0 +1,138 @@
+/****************************************************************************
+ * graphics/nxbe/nxbe_fill.c
+ *
+ * Copyright (C) 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nxglib.h>
+
+#include "nxbe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+struct nxbe_fill_s
+{
+ struct nxbe_clipops_s cops;
+ nxgl_mxpixel_t color;
+};
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxbe_getrectangle
+ *
+ * Description:
+ * Get the raw contents of graphic memory within a rectangular region. NOTE:
+ * Since raw graphic memory is returned, the returned memory content may be
+ * the memory of windows above this one and may not necessarily belong to
+ * this window unless you assure that this is the top window.
+ *
+ * Input Parameters:
+ * wnd - The window structure reference
+ * rect - The location to be copied
+ * plane - Specifies the color plane to get from.
+ * dest - The location to copy the memory region
+ * deststride - The width, in bytes, the the dest memory
+ *
+ * Return:
+ * None
+ *
+ ****************************************************************************/
+
+void nxbe_getrectangle(FAR struct nxbe_window_s *wnd,
+ FAR const struct nxgl_rect_s *rect, unsigned int plane,
+ FAR uint8_t *dest, unsigned int deststride)
+{
+ struct nxgl_rect_s remaining;
+
+#ifdef CONFIG_DEBUG
+ if (!wnd || !rect || ! rect || plane >= wnd->be->vinfo.nplanes)
+ {
+ gvdbg("Invalid parameters\n");
+ return;
+ }
+#endif
+
+ /* Offset the rectangle by the window origin to convert it into a
+ * bounding box
+ */
+
+ nxgl_rectoffset(&remaining, rect, wnd->bounds.pt1.x, wnd->bounds.pt1.y);
+
+ /* Clip to the bounding box to the limits of the window and of the
+ * background screen
+ */
+
+ nxgl_rectintersect(&remaining, &remaining, &wnd->bounds);
+ nxgl_rectintersect(&remaining, &remaining, &wnd->be->bkgd.bounds);
+
+ /* The return the graphics memory at this location. NOTE: Since raw
+ * graphic memory is returned, the returned memory content may be
+ * the memory of windows above this one and may not necessarily belong
+ * to this window.
+ */
+
+ if (!nxgl_nullrect(&remaining))
+ {
+ FAR struct nxbe_plane_s *pplane = &wnd->be->plane[plane];
+ pplane->getrectangle(&pplane->pinfo, &remaining, dest, deststride);
+ }
+}
diff --git a/nuttx/graphics/nxbe/nxbe_lower.c b/nuttx/graphics/nxbe/nxbe_lower.c
new file mode 100644
index 000000000..545342d5b
--- /dev/null
+++ b/nuttx/graphics/nxbe/nxbe_lower.c
@@ -0,0 +1,125 @@
+/****************************************************************************
+ * graphics/nxbe/nxbe_lower.c
+ *
+ * Copyright (C) 2008-2009, 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stddef.h>
+#include <debug.h>
+
+#include <nuttx/nx/nxglib.h>
+#include "nxbe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxbe_lower
+ *
+ * Description:
+ * Lower the specified window to the bottom of the display.
+ *
+ ****************************************************************************/
+
+void nxbe_lower(FAR struct nxbe_window_s *wnd)
+{
+ FAR struct nxbe_state_s *be = wnd->be;
+ FAR struct nxbe_window_s *below;
+
+ /* If the window is already at the bottom, then there is nothing to do */
+
+ if (!wnd->below || wnd->below == &be->bkgd)
+ {
+ return;
+ }
+
+ /* Remove the window from its current position in the list */
+
+ wnd->below->above = wnd->above;
+
+ /* Was it at the top of the display? */
+
+ if (wnd->above)
+ {
+ /* No... it was in the middle somewhere */
+
+ wnd->above->below = wnd->below;
+ }
+ else
+ {
+ /* Yes.. set the new top window */
+
+ be->topwnd = wnd->below;
+ be->topwnd->above = NULL;
+ }
+
+ /* Remember the window that was just below us */
+
+ below = wnd->below;
+
+ /* Then put the lowered window at the bottom (just above the background window) */
+
+ wnd->below = &be->bkgd;
+ wnd->above = be->bkgd.above;
+ be->bkgd.above = wnd;
+
+ /* Redraw the windows that were below us (but now are above) */
+
+ nxbe_redrawbelow(be, below, &wnd->bounds);
+}
diff --git a/nuttx/graphics/nxbe/nxbe_move.c b/nuttx/graphics/nxbe/nxbe_move.c
new file mode 100644
index 000000000..193b174c2
--- /dev/null
+++ b/nuttx/graphics/nxbe/nxbe_move.c
@@ -0,0 +1,284 @@
+/****************************************************************************
+ * graphics/nxbe/nxbe_move.c
+ *
+ * Copyright (C) 2008-2009, 2011-2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdint.h>
+
+#include <nuttx/nx/nxglib.h>
+
+#include "nxbe.h"
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+struct nxbe_move_s
+{
+ struct nxbe_clipops_s cops;
+ struct nxgl_point_s offset;
+ FAR struct nxbe_window_s *wnd;
+ struct nxgl_rect_s srcrect;
+ uint8_t order;
+};
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxbe_clipmovesrc
+ *
+ * Description:
+ * Called from nxbe_clipper() to performed the move operation on visible regions
+ * of the rectangle.
+ *
+ ****************************************************************************/
+
+static void nxbe_clipmovesrc(FAR struct nxbe_clipops_s *cops,
+ FAR struct nxbe_plane_s *plane,
+ FAR const struct nxgl_rect_s *rect)
+{
+ struct nxbe_move_s *info = (struct nxbe_move_s *)cops;
+ struct nxgl_point_s offset;
+
+ if (info->offset.x != 0 || info->offset.y != 0)
+ {
+ /* Offset is the destination position of the moved rectangle */
+
+ offset.x = rect->pt1.x + info->offset.x;
+ offset.y = rect->pt1.y + info->offset.y;
+
+ plane->moverectangle(&plane->pinfo, rect, &offset);
+ }
+}
+
+/****************************************************************************
+ * Name: nxbe_clipmoveobscured
+ *
+ * Description:
+ * Called from nxbe_clipper() to performed the move operation on obsrured regions
+ * of the rectangle.
+ *
+ ****************************************************************************/
+
+static void nxbe_clipmoveobscured(FAR struct nxbe_clipops_s *cops,
+ FAR struct nxbe_plane_s *plane,
+ FAR const struct nxgl_rect_s *rect)
+{
+ struct nxbe_move_s *info = (struct nxbe_move_s *)cops;
+ struct nxgl_rect_s dst;
+
+ nxgl_rectoffset(&dst, rect, info->offset.x, info->offset.y);
+ nxfe_redrawreq(info->wnd, &dst);
+}
+
+/****************************************************************************
+ * Name: nxbe_clipmovedest
+ *
+ * Description:
+ * Called from nxbe_clipper() to performed the move operation on visible
+ * regions of the source rectangle.
+ *
+ ****************************************************************************/
+
+static void nxbe_clipmovedest(FAR struct nxbe_clipops_s *cops,
+ FAR struct nxbe_plane_s *plane,
+ FAR const struct nxgl_rect_s *rect)
+{
+ struct nxbe_move_s *dstdata = (struct nxbe_move_s *)cops;
+ struct nxbe_window_s *wnd = dstdata->wnd;
+ struct nxgl_point_s offset = dstdata->offset;
+ struct nxgl_rect_s src;
+ struct nxgl_rect_s tmprect1;
+ struct nxgl_rect_s tmprect2;
+ struct nxgl_rect_s nonintersecting[4];
+ int i;
+
+ /* Redraw dest regions where the source is outside of the bounds of the
+ * background window
+ */
+
+ nxgl_rectoffset(&tmprect1, &dstdata->srcrect, offset.x, offset.y);
+ nxgl_rectintersect(&tmprect2, &tmprect1, &wnd->be->bkgd.bounds);
+ nxgl_nonintersecting(nonintersecting, rect, &tmprect2);
+
+ for (i = 0; i < 4; i++)
+ {
+ if (!nxgl_nullrect(&nonintersecting[i]))
+ {
+ nxfe_redrawreq(dstdata->wnd, &nonintersecting[i]);
+ }
+ }
+
+ /* Clip to determine what is inside the bounds */
+
+ nxgl_rectintersect(&src, rect, &dstdata->srcrect);
+
+ if (!nxgl_nullrect(&src))
+ {
+ struct nxbe_move_s srcinfo;
+
+ srcinfo.cops.visible = nxbe_clipmovesrc;
+ srcinfo.cops.obscured = nxbe_clipmoveobscured;
+ srcinfo.offset = offset;
+ srcinfo.wnd = wnd;
+
+ nxbe_clipper(dstdata->wnd->above, &src, dstdata->order,
+ &srcinfo.cops, plane);
+ }
+}
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxbe_move
+ *
+ * Description:
+ * Move a rectangular region within the window
+ *
+ * Input Parameters:
+ * wnd - The window within which the move is to be done
+ * rect - Describes the rectangular region to move
+ * offset - The offset to move the region
+ *
+ * Return:
+ * None
+ *
+ ****************************************************************************/
+
+void nxbe_move(FAR struct nxbe_window_s *wnd, FAR const struct nxgl_rect_s *rect,
+ FAR const struct nxgl_point_s *offset)
+{
+ struct nxbe_move_s info;
+ int i;
+
+#ifdef CONFIG_DEBUG
+ if (!wnd || !rect)
+ {
+ return;
+ }
+#endif
+
+ /* Offset the rectangle by the window origin to create a bounding box */
+
+ nxgl_rectoffset(&info.srcrect, rect, wnd->bounds.pt1.x, wnd->bounds.pt1.y);
+
+ /* Clip to the limits of the window and of the background screen */
+
+ nxgl_rectintersect(&info.srcrect, &info.srcrect, &wnd->bounds);
+ nxgl_rectintersect(&info.srcrect, &info.srcrect, &wnd->be->bkgd.bounds);
+
+ if (nxgl_nullrect(&info.srcrect))
+ {
+ return;
+ }
+
+ info.cops.visible = nxbe_clipmovedest;
+ info.cops.obscured = nxbe_clipnull;
+ info.offset.x = offset->x;
+ info.offset.y = offset->y;
+ info.wnd = wnd;
+
+ /* The clip order depends up the direction that the rectangle is being
+ * moved.
+ */
+
+ if (offset->y < 0)
+ {
+ /* Moving rectangle up */
+
+ if (offset->x < 0)
+ {
+ /* Moving to upper-left */
+
+ info.order = NX_CLIPORDER_TLRB; /* Top-left-right-bottom */
+ }
+ else
+ {
+ /* Moving to upper-right (or just up) */
+
+ info.order = NX_CLIPORDER_TRLB; /* Top-right-left-bottom */
+ }
+ }
+ else
+ {
+ /* Moving rectangle down (or just left/right) */
+
+ if (offset->x < 0)
+ {
+ /* Moving to lower-left */
+
+ info.order = NX_CLIPORDER_BLRT; /* Bottom-left-right-top */
+ }
+ else
+ {
+ /* Moving to lower-right */
+
+ info.order = NX_CLIPORDER_BRLT; /* Bottom-right-left-top */
+ }
+ }
+
+ /* Then perform the move */
+
+#if CONFIG_NX_NPLANES > 1
+ for (i = 0; i < wnd->be->vinfo.nplanes; i++)
+#else
+ i = 0;
+#endif
+ {
+ nxbe_clipper(wnd->above, &info.srcrect, info.order,
+ &info.cops, &wnd->be->plane[i]);
+ }
+}
diff --git a/nuttx/graphics/nxbe/nxbe_raise.c b/nuttx/graphics/nxbe/nxbe_raise.c
new file mode 100644
index 000000000..ef4c392c0
--- /dev/null
+++ b/nuttx/graphics/nxbe/nxbe_raise.c
@@ -0,0 +1,116 @@
+/****************************************************************************
+ * graphics/nxbe/nxbe_raise.c
+ *
+ * Copyright (C) 2008-2009, 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <nuttx/nx/nxglib.h>
+
+#include "nxbe.h"
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+struct nxbe_raise_s
+{
+ struct nxbe_clipops_s cops;
+ FAR struct nxbe_window_s *wnd;
+};
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxbe_raise
+ *
+ * Description:
+ * Bring the specified window to the top of the display.
+ *
+ ****************************************************************************/
+
+void nxbe_raise(FAR struct nxbe_window_s *wnd)
+{
+ FAR struct nxbe_state_s *be = wnd->be;
+
+ /* If this window is already at the top of the display, then do nothing */
+
+ if (!wnd->above)
+ {
+ return;
+ }
+
+ /* Remove window from the list. Note that there is always
+ * some below this window (it may only be the background window)
+ */
+
+ wnd->above->below = wnd->below;
+ wnd->below->above = wnd->above;
+
+ /* Then put it back in the list at the top */
+
+ wnd->above = NULL;
+ wnd->below = be->topwnd;
+
+ be->topwnd->above = wnd;
+ be->topwnd = wnd;
+
+ /* This window is now at the top of the display, we know, therefore, that
+ * it is not obscured by another window
+ */
+
+ nxfe_redrawreq(wnd, &wnd->bounds);
+}
diff --git a/nuttx/graphics/nxbe/nxbe_redraw.c b/nuttx/graphics/nxbe/nxbe_redraw.c
new file mode 100644
index 000000000..3226ccf32
--- /dev/null
+++ b/nuttx/graphics/nxbe/nxbe_redraw.c
@@ -0,0 +1,139 @@
+/****************************************************************************
+ * graphics/nxbe/nxbe_redraw.c
+ *
+ * Copyright (C) 2008-2009, 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nxglib.h>
+
+#include "nxbe.h"
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+struct nxbe_redraw_s
+{
+ struct nxbe_clipops_s cops;
+ FAR struct nxbe_window_s *wnd;
+};
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxbe_clipredraw
+ ****************************************************************************/
+
+static void nxbe_clipredraw(FAR struct nxbe_clipops_s *cops,
+ FAR struct nxbe_plane_s *plane,
+ FAR const struct nxgl_rect_s *rect)
+{
+ FAR struct nxbe_window_s *wnd = ((struct nxbe_redraw_s *)cops)->wnd;
+ if (wnd)
+ {
+ nxfe_redrawreq(wnd, rect);
+ }
+}
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxbe_redraw
+ *
+ * Descripton:
+ * Re-draw the visible portions of the rectangular region for the
+ * specified window
+ *
+ ****************************************************************************/
+
+void nxbe_redraw(FAR struct nxbe_state_s *be,
+ FAR struct nxbe_window_s *wnd,
+ FAR const struct nxgl_rect_s *rect)
+{
+ struct nxbe_redraw_s info;
+ struct nxgl_rect_s remaining;
+#if CONFIG_NX_NPLANES > 1
+ int i;
+#endif
+
+ /* Clip to the limits of the window and of the background screen */
+
+ nxgl_rectintersect(&remaining, rect, &be->bkgd.bounds);
+ nxgl_rectintersect(&remaining, &remaining, &wnd->bounds);
+ if (!nxgl_nullrect(&remaining))
+ {
+ /* Now, request to re-draw any visible rectangular regions not obscured
+ * by windows above this one.
+ */
+
+ info.cops.visible = nxbe_clipredraw;
+ info.cops.obscured = nxbe_clipnull;
+ info.wnd = wnd;
+
+#if CONFIG_NX_NPLANES > 1
+ for (i = 0; i < be->vinfo.nplanes; i++)
+ {
+ nxbe_clipper(wnd->above, &remaining, NX_CLIPORDER_DEFAULT,
+ &info.cops, &be->plane[i]);
+ }
+#else
+ nxbe_clipper(wnd->above, &remaining, NX_CLIPORDER_DEFAULT,
+ &info.cops, &be->plane[0]);
+#endif
+ }
+}
diff --git a/nuttx/graphics/nxbe/nxbe_redrawbelow.c b/nuttx/graphics/nxbe/nxbe_redrawbelow.c
new file mode 100644
index 000000000..c795e5fed
--- /dev/null
+++ b/nuttx/graphics/nxbe/nxbe_redrawbelow.c
@@ -0,0 +1,91 @@
+/****************************************************************************
+ * graphics/nxbe/nxbe_redraw.c
+ *
+ * Copyright (C) 2008-2009, 2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <errno.h>
+#include <debug.h>
+
+#include "nxbe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxbe_redrawbelow
+ *
+ * Descripton:
+ * Re-draw the visible portions of the rectangular region for all windows
+ * below (and including) the specified window. This function is called
+ * whenever a window is closed, moved, lowered or re-sized in order to
+ * expose newly visible portions of lower windows.
+ *
+ ****************************************************************************/
+
+void nxbe_redrawbelow(FAR struct nxbe_state_s *be, FAR struct nxbe_window_s *wnd,
+ FAR const struct nxgl_rect_s *rect)
+{
+ FAR struct nxbe_window_s *currwnd;
+
+ for (currwnd = wnd; currwnd; currwnd = currwnd->below)
+ {
+ nxbe_redraw(be, currwnd, rect);
+ }
+}
diff --git a/nuttx/graphics/nxbe/nxbe_setpixel.c b/nuttx/graphics/nxbe/nxbe_setpixel.c
new file mode 100644
index 000000000..d333b9b76
--- /dev/null
+++ b/nuttx/graphics/nxbe/nxbe_setpixel.c
@@ -0,0 +1,158 @@
+/****************************************************************************
+ * graphics/nxbe/nxbe_setpixel.c
+ *
+ * Copyright (C) 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <nuttx/nx/nxglib.h>
+
+#include "nxbe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+struct nxbe_setpixel_s
+{
+ struct nxbe_clipops_s cops;
+ nxgl_mxpixel_t color;
+};
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxbe_clipfill
+ *
+ * Description:
+ * Called from nxbe_clipper() to performed the fill operation on visible portions
+ * of the rectangle.
+ *
+ ****************************************************************************/
+
+static void nxbe_clipfill(FAR struct nxbe_clipops_s *cops,
+ FAR struct nxbe_plane_s *plane,
+ FAR const struct nxgl_rect_s *rect)
+{
+ struct nxbe_setpixel_s *fillinfo = (struct nxbe_setpixel_s *)cops;
+ plane->setpixel(&plane->pinfo, &rect->pt1, fillinfo->color);
+}
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxbe_fill
+ *
+ * Description:
+ * Fill the specified rectangle in the window with the specified color
+ *
+ * Input Parameters:
+ * wnd - The window structure reference
+ * rect - The location to be filled
+ * col - The color to use in the fill
+ *
+ * Return:
+ * None
+ *
+ ****************************************************************************/
+
+void nxbe_setpixel(FAR struct nxbe_window_s *wnd,
+ FAR const struct nxgl_point_s *pos,
+ nxgl_mxpixel_t color[CONFIG_NX_NPLANES])
+{
+ struct nxbe_setpixel_s info;
+ struct nxgl_rect_s rect;
+ int i;
+
+#ifdef CONFIG_DEBUG
+ if (!wnd || !pos)
+ {
+ return;
+ }
+#endif
+
+ /* Offset the position by the window origin */
+
+ nxgl_vectoradd(&rect.pt1, pos, &wnd->bounds.pt1);
+
+ /* Make sure that the point is within the limits of the window
+ * and of the background screen
+ */
+
+ if (!nxgl_rectinside(&wnd->bounds, &rect.pt1) ||
+ !nxgl_rectinside(&wnd->be->bkgd.bounds, &rect.pt1))
+ {
+ return;
+ }
+
+ /* Then create a bounding box and render the point if there it
+ * is exposed.
+ */
+
+ rect.pt2.x = rect.pt1.x;
+ rect.pt2.y = rect.pt1.y;
+
+#if CONFIG_NX_NPLANES > 1
+ for (i = 0; i < wnd->be->vinfo.nplanes; i++)
+#else
+ i = 0;
+#endif
+ {
+ info.cops.visible = nxbe_clipfill;
+ info.cops.obscured = nxbe_clipnull;
+ info.color = color[i];
+
+ nxbe_clipper(wnd->above, &rect, NX_CLIPORDER_DEFAULT,
+ &info.cops, &wnd->be->plane[i]);
+ }
+}
diff --git a/nuttx/graphics/nxbe/nxbe_setposition.c b/nuttx/graphics/nxbe/nxbe_setposition.c
new file mode 100644
index 000000000..f407eea3f
--- /dev/null
+++ b/nuttx/graphics/nxbe/nxbe_setposition.c
@@ -0,0 +1,119 @@
+/****************************************************************************
+ * graphics/nxbe/nxbe_setposition.c
+ *
+ * Copyright (C) 2008-2009, 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <nuttx/nx/nxglib.h>
+
+#include "nxbe.h"
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxbe_setposition
+ *
+ * Descripton:
+ * This function checks for intersections and redraws the display after
+ * a change in the position of a window.
+ *
+ ****************************************************************************/
+
+void nxbe_setposition(FAR struct nxbe_window_s *wnd,
+ FAR const struct nxgl_point_s *pos)
+{
+ struct nxgl_rect_s before;
+ struct nxgl_rect_s rect;
+
+#ifdef CONFIG_DEBUG
+ if (!wnd)
+ {
+ return;
+ }
+#endif
+
+ /* Back out the old window origin position from the bounding box */
+
+ nxgl_rectoffset(&rect, &wnd->bounds, -wnd->bounds.pt1.x, -wnd->bounds.pt1.y);
+
+ /* Add the new window origin into the bounding box */
+
+ nxgl_rectcopy(&before, &wnd->bounds);
+ nxgl_rectoffset(&wnd->bounds, &rect, pos->x, pos->y);
+
+ /* Get the union of the 'before' bounding box and the 'after' bounding
+ * this union is the region of the display that must be updated.
+ */
+
+ nxgl_rectunion(&rect, &before, &wnd->bounds);
+ nxgl_rectintersect(&rect, &rect, &wnd->be->bkgd.bounds);
+
+ /* Report the new size/position */
+
+ nxfe_reportposition(wnd);
+
+ /* Then redraw this window AND all windows below it. Having moved the
+ * window, we may have exposed previoulsy obscured portions of windows
+ * below this one.
+ */
+
+ nxbe_redrawbelow(wnd->be, wnd, &rect);
+}
diff --git a/nuttx/graphics/nxbe/nxbe_setsize.c b/nuttx/graphics/nxbe/nxbe_setsize.c
new file mode 100644
index 000000000..367f5d7dc
--- /dev/null
+++ b/nuttx/graphics/nxbe/nxbe_setsize.c
@@ -0,0 +1,121 @@
+/****************************************************************************
+ * graphics/nxbe/nxbe_setsize.c
+ *
+ * Copyright (C) 2008-2009, 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <nuttx/nx/nxglib.h>
+
+#include "nxbe.h"
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxbe_setsize
+ *
+ * Descripton:
+ * This function checks for intersections and redraws the display after
+ * a change in the size of a window.
+ *
+ ****************************************************************************/
+
+void nxbe_setsize(FAR struct nxbe_window_s *wnd,
+ FAR const struct nxgl_size_s *size)
+{
+ struct nxgl_rect_s bounds;
+
+#ifdef CONFIG_DEBUG
+ if (!wnd)
+ {
+ return;
+ }
+#endif
+
+ /* Save the before size of the window's bounding box */
+
+ nxgl_rectcopy(&bounds, &wnd->bounds);
+
+ /* Add the window origin to the supplied size get the new window bounding box */
+
+ wnd->bounds.pt2.x = wnd->bounds.pt1.x + size->w - 1;
+ wnd->bounds.pt2.y = wnd->bounds.pt1.y + size->h - 1;
+
+ /* Clip the new bounding box so that lies within the background screen */
+
+ nxgl_rectintersect(&wnd->bounds, &wnd->bounds, &wnd->be->bkgd.bounds);
+
+ /* We need to update the larger of the two rectangles. That will be the
+ * union of the before and after sizes.
+ */
+
+ nxgl_rectunion(&bounds, &bounds, &wnd->bounds);
+
+ /* Report the new size/position */
+
+ nxfe_reportposition(wnd);
+
+ /* Then redraw this window AND all windows below it. Having resized the
+ * window, we may have exposed previoulsy obscured portions of windows
+ * below this one.
+ */
+
+ nxbe_redrawbelow(wnd->be, wnd, &bounds);
+}
diff --git a/nuttx/graphics/nxbe/nxbe_visible.c b/nuttx/graphics/nxbe/nxbe_visible.c
new file mode 100644
index 000000000..6b8b9291b
--- /dev/null
+++ b/nuttx/graphics/nxbe/nxbe_visible.c
@@ -0,0 +1,134 @@
+/****************************************************************************
+ * graphics/nxbe/nxbe_redraw.c
+ *
+ * Copyright (C) 2008-2009, 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdbool.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nxglib.h>
+
+#include "nxbe.h"
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+struct nxbe_visible_s
+{
+ struct nxbe_clipops_s cops;
+ bool visible;
+};
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxbe_clipvisible
+ ****************************************************************************/
+
+static void nxbe_clipvisible(FAR struct nxbe_clipops_s *cops,
+ FAR struct nxbe_plane_s *plane,
+ FAR const struct nxgl_rect_s *rect)
+{
+ FAR struct nxbe_visible_s *info = (FAR struct nxbe_visible_s *)cops;
+ info->visible = true;
+}
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxbe_visible
+ *
+ * Descripton:
+ * Return true if the point, pt, in window wnd is visible. pt is in
+ * absolute screen coordinates
+ *
+ ****************************************************************************/
+
+bool nxbe_visible(FAR struct nxbe_window_s *wnd,
+ FAR const struct nxgl_point_s *pos)
+{
+ struct nxbe_visible_s info;
+
+ /* Check if the absolute position lies within the window */
+
+ if (!nxgl_rectinside(&wnd->bounds, pos))
+ {
+ return false;
+ }
+
+ /* If this is the top window, then the psition is visible */
+
+ if (!wnd->above)
+ {
+ return true;
+ }
+
+ /* The position within the window range, but the window is not at
+ * the top. We will have to work harder to determine if the point
+ * visible
+ */
+
+ info.cops.visible = nxbe_clipvisible;
+ info.cops.obscured = nxbe_clipnull;
+ info.visible = false;
+
+ nxbe_clipper(wnd->above, &wnd->bounds, NX_CLIPORDER_DEFAULT,
+ &info.cops, &wnd->be->plane[0]);
+
+ return info.visible;
+}
diff --git a/nuttx/graphics/nxconsole/Make.defs b/nuttx/graphics/nxconsole/Make.defs
new file mode 100644
index 000000000..a57b22885
--- /dev/null
+++ b/nuttx/graphics/nxconsole/Make.defs
@@ -0,0 +1,48 @@
+############################################################################
+# graphics/nxconsole/Make.defs
+#
+# Copyright (C) 2012 Gregory Nutt. All rights reserved.
+# Author: Gregory Nutt <gnutt@nuttx.org>
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in
+# the documentation and/or other materials provided with the
+# distribution.
+# 3. Neither the name NuttX nor the names of its contributors may be
+# used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+############################################################################
+
+NXCON_ASRCS =
+NXCON_CSRCS = nx_register.c nxcon_driver.c nxcon_font.c nxcon_putc.c
+NXCON_CSRCS += nxcon_redraw.c nxcon_register.c nxcon_scroll.c
+NXCON_CSRCS += nxcon_vt100.c nxcon_unregister.c nxtk_register.c
+NXCON_CSRCS += nxtool_register.c
+
+ifeq ($(CONFIG_NXCONSOLE_NXKBDIN),y)
+NXCON_CSRCS += nxcon_kbdin.c
+endif
+
+ifeq ($(CONFIG_DEBUG),y)
+NXCON_CSRCS += nxcon_sem.c
+endif
diff --git a/nuttx/graphics/nxconsole/nx_register.c b/nuttx/graphics/nxconsole/nx_register.c
new file mode 100644
index 000000000..8ebe0c0d5
--- /dev/null
+++ b/nuttx/graphics/nxconsole/nx_register.c
@@ -0,0 +1,193 @@
+/****************************************************************************
+ * nuttx/graphics/nxconsole/nx_register.c
+ *
+ * Copyright (C) 2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxconsole.h>
+
+#include "nxcon_internal.h"
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Function Prototypes
+ ****************************************************************************/
+
+static int nxcon_fill(FAR struct nxcon_state_s *priv,
+ FAR const struct nxgl_rect_s *rect,
+ nxgl_mxpixel_t wcolor[CONFIG_NX_NPLANES]);
+#ifndef CONFIG_NX_WRITEONLY
+static int nxcon_move(FAR struct nxcon_state_s *priv,
+ FAR const struct nxgl_rect_s *rect,
+ FAR const struct nxgl_point_s *offset);
+#endif
+static int nxcon_bitmap(FAR struct nxcon_state_s *priv,
+ FAR const struct nxgl_rect_s *dest,
+ FAR const void *src[CONFIG_NX_NPLANES],
+ FAR const struct nxgl_point_s *origin,
+ unsigned int stride);
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+static const struct nxcon_operations_s g_nxops =
+{
+ nxcon_fill,
+#ifndef CONFIG_NX_WRITEONLY
+ nxcon_move,
+#endif
+ nxcon_bitmap
+};
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxcon_fill
+ *
+ * Description:
+ * Fill the specified rectangle in the window with the specified color
+ *
+ * Input Parameters:
+ * priv - The driver state structure.
+ * rect - The location to be filled
+ * color - The color to use in the fill
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+static int nxcon_fill(FAR struct nxcon_state_s *priv,
+ FAR const struct nxgl_rect_s *rect,
+ nxgl_mxpixel_t wcolor[CONFIG_NX_NPLANES])
+{
+ return nx_fill((NXWINDOW)priv->handle, rect, wcolor);
+}
+
+/****************************************************************************
+ * Name: nxcon_move
+ *
+ * Description:
+ * Move a rectangular region within the window
+ *
+ * Input Parameters:
+ * priv - The driver state structure.
+ * rect - Describes the rectangular region to move
+ * offset - The offset to move the region. The rectangular region will be
+ * moved so that the origin is translated by this amount.
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+#ifndef CONFIG_NX_WRITEONLY
+static int nxcon_move(FAR struct nxcon_state_s *priv,
+ FAR const struct nxgl_rect_s *rect,
+ FAR const struct nxgl_point_s *offset)
+{
+ return nx_move((NXWINDOW)priv->handle, rect, offset);
+}
+#endif
+
+/****************************************************************************
+ * Name: nxcon_bitmap
+ *
+ * Description:
+ * Copy a rectangular region of a larger image into the rectangle in the
+ * specified window.
+ *
+ * Input Parameters:
+ * priv - The driver state structure.
+ * dest - Describes the rectangular region on the display that will
+ * receive the bit map.
+ * src - The start of the source image. This is an array source
+ * images of size CONFIG_NX_NPLANES.
+ * origin - The origin of the upper, left-most corner of the full bitmap.
+ * Both dest and origin are in window coordinates, however, origin
+ * may lie outside of the display.
+ * stride - The width of the full source image in bytes.
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+static int nxcon_bitmap(FAR struct nxcon_state_s *priv,
+ FAR const struct nxgl_rect_s *dest,
+ FAR const void *src[CONFIG_NX_NPLANES],
+ FAR const struct nxgl_point_s *origin,
+ unsigned int stride)
+{
+ return nx_bitmap((NXWINDOW)priv->handle, dest, src, origin, stride);
+}
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nx_register
+ *
+ * Description:
+ * Register a console device on a raw NX window. The device will be
+ * registered at /dev/nxconN where N is the provided minor number.
+ *
+ * Input Parameters:
+ * hwnd - A handle that will be used to access the window. The window must
+ * persist and this handle must be valid for the life of the NX console.
+ * wndo - Describes the window and font to be used
+ * minor - The device minor number
+ *
+ * Return:
+ * A non-NULL handle is returned on success.
+ *
+ ****************************************************************************/
+
+NXCONSOLE nx_register(NXWINDOW hwnd, FAR struct nxcon_window_s *wndo, int minor)
+{
+ return nxcon_register((NXCONSOLE)hwnd, wndo, &g_nxops, minor);
+}
+
diff --git a/nuttx/graphics/nxconsole/nxcon_driver.c b/nuttx/graphics/nxconsole/nxcon_driver.c
new file mode 100755
index 000000000..c647f97bb
--- /dev/null
+++ b/nuttx/graphics/nxconsole/nxcon_driver.c
@@ -0,0 +1,257 @@
+/****************************************************************************
+ * nuttx/graphics/nxconsole/nxcon_driver.c
+ *
+ * Copyright (C) 2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <sys/types.h>
+#include <stdbool.h>
+#include <string.h>
+#include <fcntl.h>
+#include <assert.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/fs/fs.h>
+
+#include "nxcon_internal.h"
+
+/****************************************************************************
+ * Private Function Prototypes
+ ****************************************************************************/
+
+static int nxcon_open(FAR struct file *filep);
+static ssize_t nxcon_write(FAR struct file *filep, FAR const char *buffer,
+ size_t buflen);
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+/* This is the common NX driver file operations */
+
+#ifdef CONFIG_NXCONSOLE_NXKBDIN
+
+const struct file_operations g_nxcon_drvrops =
+{
+ nxcon_open, /* open */
+ 0, /* close */
+ nxcon_read, /* read */
+ nxcon_write, /* write */
+ 0, /* seek */
+ 0 /* ioctl */
+#ifndef CONFIG_DISABLE_POLL
+ ,
+ nxcon_poll /* poll */
+#endif
+};
+
+#else /* CONFIG_NXCONSOLE_NXKBDIN */
+
+const struct file_operations g_nxcon_drvrops =
+{
+ nxcon_open, /* open */
+ 0, /* close */
+ 0, /* read */
+ nxcon_write, /* write */
+ 0, /* seek */
+ 0 /* ioctl */
+#ifndef CONFIG_DISABLE_POLL
+ ,
+ 0 /* poll */
+#endif
+};
+
+#endif /* CONFIG_NXCONSOLE_NXKBDIN */
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxcon_open
+ ****************************************************************************/
+
+static int nxcon_open(FAR struct file *filep)
+{
+ FAR struct inode *inode = filep->f_inode;
+ FAR struct nxcon_state_s *priv = inode->i_private;
+
+ DEBUGASSERT(filep && filep->f_inode);
+
+ /* Get the driver structure from the inode */
+
+ inode = filep->f_inode;
+ priv = (FAR struct nxcon_state_s *)inode->i_private;
+ DEBUGASSERT(priv);
+
+ /* Verify that the driver is opened for write-only access */
+
+#ifndef CONFIG_NXCONSOLE_NXKBDIN
+ if ((filep->f_oflags & O_RDOK) != 0)
+ {
+ gdbg("ERROR: Attempted open with read access\n");
+ return -EACCES;
+ }
+#endif
+
+ /* Assign the driver structure to the file */
+
+ filep->f_priv = priv;
+ return OK;
+}
+
+/****************************************************************************
+ * Name: nxcon_write
+ ****************************************************************************/
+
+static ssize_t nxcon_write(FAR struct file *filep, FAR const char *buffer,
+ size_t buflen)
+{
+ FAR struct nxcon_state_s *priv;
+ enum nxcon_vt100state_e state;
+ ssize_t remaining;
+ char ch;
+ int ret;
+
+ /* Recover our private state structure */
+
+ DEBUGASSERT(filep && filep->f_priv);
+ priv = (FAR struct nxcon_state_s *)filep->f_priv;
+
+ /* Get exclusive access */
+
+ ret = nxcon_semwait(priv);
+ if (ret < 0)
+ {
+ return ret;
+ }
+
+ /* Hide the cursor while we update the display */
+
+ nxcon_hidecursor(priv);
+
+ /* Loop writing each character to the display */
+
+ for (remaining = (ssize_t)buflen; remaining > 0; remaining--)
+ {
+ /* Get the next character from the user buffer */
+
+ ch = *buffer++;
+
+ /* Check if this character is part of a VT100 escape sequence */
+
+ do
+ {
+ /* Is the character part of a VT100 escape sequnce? */
+
+ state = nxcon_vt100(priv, ch);
+ switch (state)
+ {
+ /* Character is not part of a VT100 escape sequence (and no
+ * characters are buffer.
+ */
+
+ default:
+ case VT100_NOT_CONSUMED:
+ {
+ /* We can output the character to the window */
+
+ nxcon_putc(priv, (uint8_t)ch);
+ }
+ break;
+
+ /* The full VT100 escape sequence was processed (and the new
+ * character was consumed)
+ */
+
+ case VT100_PROCESSED:
+
+ /* Character was consumed as part of the VT100 escape processing
+ * (but the escape sequence is still incomplete.
+ */
+
+ case VT100_CONSUMED:
+ {
+ /* Do nothing... the VT100 logic owns the character */
+ }
+ break;
+
+ /* Invalid/unsupported character in escape sequence */
+
+ case VT100_ABORT:
+ {
+ int i;
+
+ /* Add the first unhandled character to the window */
+
+ nxcon_putc(priv, (uint8_t)priv->seq[0]);
+
+ /* Move all buffer characters down one */
+
+ for (i = 1; i < priv->nseq; i++)
+ {
+ priv->seq[i-1] = priv->seq[i];
+ }
+ priv->nseq--;
+
+ /* Then loop again and check if what remains is part of a
+ * VT100 escape sequence. We could speed this up by
+ * checking if priv->seq[0] == ASCII_ESC.
+ */
+ }
+ break;
+ }
+ }
+ while (state == VT100_ABORT);
+ }
+
+ /* Show the cursor at its new position */
+
+ nxcon_showcursor(priv);
+ nxcon_sempost(priv);
+ return (ssize_t)buflen;
+}
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
diff --git a/nuttx/graphics/nxconsole/nxcon_font.c b/nuttx/graphics/nxconsole/nxcon_font.c
new file mode 100644
index 000000000..2bdf21cf6
--- /dev/null
+++ b/nuttx/graphics/nxconsole/nxcon_font.c
@@ -0,0 +1,651 @@
+/****************************************************************************
+ * nuttx/graphics/nxconsole/nxcon_font.c
+ *
+ * Copyright (C) 2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <string.h>
+#include <assert.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/kmalloc.h>
+
+#include "nxcon_internal.h"
+
+/****************************************************************************
+ * Definitions
+ ****************************************************************************/
+
+/* Select renderer -- Some additional logic would be required to support
+ * pixel depths that are not directly addressable (1,2,4, and 24).
+ */
+
+#if CONFIG_NXCONSOLE_BPP == 1
+# define RENDERER nxf_convert_1bpp
+#elif CONFIG_NXCONSOLE_BPP == 2
+# define RENDERER nxf_convert_2bpp
+#elif CONFIG_NXCONSOLE_BPP == 4
+# define RENDERER nxf_convert_4bpp
+#elif CONFIG_NXCONSOLE_BPP == 8
+# define RENDERER nxf_convert_8bpp
+#elif CONFIG_NXCONSOLE_BPP == 16
+# define RENDERER nxf_convert_16bpp
+#elif CONFIG_NXCONSOLE_BPP == 24
+# define RENDERER nxf_convert_24bpp
+#elif CONFIG_NXCONSOLE_BPP == 32
+# define RENDERER nxf_convert_32bpp
+#else
+# error "Unsupported CONFIG_NXCONSOLE_BPP"
+#endif
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Function Prototypes
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxcon_freeglyph
+ ****************************************************************************/
+
+static void nxcon_freeglyph(FAR struct nxcon_glyph_s *glyph)
+{
+ if (glyph->bitmap)
+ {
+ kfree(glyph->bitmap);
+ }
+ memset(glyph, 0, sizeof(struct nxcon_glyph_s));
+}
+
+/****************************************************************************
+ * Name: nxcon_allocglyph
+ ****************************************************************************/
+
+static inline FAR struct nxcon_glyph_s *
+nxcon_allocglyph(FAR struct nxcon_state_s *priv)
+{
+ FAR struct nxcon_glyph_s *glyph = NULL;
+ FAR struct nxcon_glyph_s *luglyph = NULL;
+ uint8_t luusecnt;
+ int i;
+
+ /* Search through the glyph cache looking for an unused glyph. Also, keep
+ * track of the least used glyph as well. We need that if we have to replace
+ * a glyph in the cache.
+ */
+
+ for (i = 0; i < priv->maxglyphs; i++)
+ {
+ /* Is this glyph in use? */
+
+ glyph = &priv->glyph[i];
+ if (!glyph->usecnt)
+ {
+ /* No.. return this glyph with a use count of one */
+
+ glyph->usecnt = 1;
+ return glyph;
+ }
+
+ /* Yes.. check for the least recently used */
+
+ if (!luglyph || glyph->usecnt < luglyph->usecnt)
+ {
+ luglyph = glyph;
+ }
+ }
+
+ /* If we get here, the glyph cache is full. We replace the least used
+ * glyph with the one we need now. (luglyph can't be NULL).
+ */
+
+ luusecnt = luglyph->usecnt;
+ nxcon_freeglyph(luglyph);
+
+ /* But lets decrement all of the usecnts so that the new one one be so
+ * far behind in the counts as the older ones.
+ */
+
+ if (luusecnt > 1)
+ {
+ uint8_t decr = luusecnt - 1;
+
+ for (i = 0; i < priv->maxglyphs; i++)
+ {
+ /* Is this glyph in use? */
+
+ glyph = &priv->glyph[i];
+ if (glyph->usecnt > decr)
+ {
+ glyph->usecnt -= decr;
+ }
+ }
+ }
+
+ /* Then return the least used glyph */
+
+ luglyph->usecnt = 1;
+ return luglyph;
+}
+
+/****************************************************************************
+ * Name: nxcon_findglyph
+ ****************************************************************************/
+
+static FAR struct nxcon_glyph_s *
+nxcon_findglyph(FAR struct nxcon_state_s *priv, uint8_t ch)
+{
+ int i;
+
+ /* First, try to find the glyph in the cache of pre-rendered glyphs */
+
+ for (i = 0; i < priv->maxglyphs; i++)
+ {
+ FAR struct nxcon_glyph_s *glyph = &priv->glyph[i];
+ if (glyph->usecnt > 0 && glyph->code == ch)
+ {
+ /* Increment the use count (unless it is already at the max) */
+
+ if (glyph->usecnt < MAX_USECNT)
+ {
+ glyph->usecnt++;
+ }
+
+ /* And return the glyph that we found */
+
+ return glyph;
+ }
+ }
+ return NULL;
+}
+
+/****************************************************************************
+ * Name: nxcon_renderglyph
+ ****************************************************************************/
+
+static inline FAR struct nxcon_glyph_s *
+nxcon_renderglyph(FAR struct nxcon_state_s *priv,
+ FAR const struct nx_fontbitmap_s *fbm, uint8_t ch)
+{
+ FAR struct nxcon_glyph_s *glyph = NULL;
+ FAR nxgl_mxpixel_t *ptr;
+#if CONFIG_NXCONSOLE_BPP < 8
+ nxgl_mxpixel_t pixel;
+#endif
+ int bmsize;
+ int row;
+ int col;
+ int ret;
+
+ /* Allocate the glyph (always succeeds) */
+
+ glyph = nxcon_allocglyph(priv);
+ glyph->code = ch;
+
+ /* Get the dimensions of the glyph */
+
+ glyph->width = fbm->metric.width + fbm->metric.xoffset;
+ glyph->height = fbm->metric.height + fbm->metric.yoffset;
+
+ /* Get the physical width of the glyph in bytes */
+
+ glyph->stride = (glyph->width * CONFIG_NXCONSOLE_BPP + 7) / 8;
+
+ /* Allocate memory to hold the glyph with its offsets */
+
+ bmsize = glyph->stride * glyph->height;
+ glyph->bitmap = (FAR uint8_t *)kmalloc(bmsize);
+
+ if (glyph->bitmap)
+ {
+ /* Initialize the glyph memory to the background color using the
+ * hard-coded bits-per-pixel (BPP).
+ *
+ * TODO: The rest of NX is configured to support multiple devices
+ * with differing BPP. They logic should be extended to support
+ * differing BPP's as well.
+ */
+
+#if CONFIG_NXCONSOLE_BPP < 8
+ pixel = priv->wcolor[0];
+
+# if CONFIG_NXCONSOLE_BPP == 1
+
+ /* Pack 1-bit pixels into a 2-bits */
+
+ pixel &= 0x01;
+ pixel = (pixel) << 1 | pixel;
+
+# endif
+# if CONFIG_NXCONSOLE_BPP < 4
+
+ /* Pack 2-bit pixels into a nibble */
+
+ pixel &= 0x03;
+ pixel = (pixel) << 2 | pixel;
+
+# endif
+
+ /* Pack 4-bit nibbles into a byte */
+
+ pixel &= 0x0f;
+ pixel = (pixel) << 4 | pixel;
+
+ ptr = (FAR nxgl_mxpixel_t *)glyph->bitmap;
+ for (row = 0; row < glyph->height; row++)
+ {
+ for (col = 0; col < glyph->stride; col++)
+ {
+ /* Transfer the packed bytes into the buffer */
+
+ *ptr++ = pixel;
+ }
+ }
+
+#elif CONFIG_NXCONSOLE_BPP == 24
+# error "Additional logic is needed here for 24bpp support"
+
+#else /* CONFIG_NXCONSOLE_BPP = {8,16,32} */
+
+ ptr = (FAR nxgl_mxpixel_t *)glyph->bitmap;
+ for (row = 0; row < glyph->height; row++)
+ {
+ /* Just copy the color value into the glyph memory */
+
+ for (col = 0; col < glyph->width; col++)
+ {
+ *ptr++ = priv->wndo.wcolor[0];
+ }
+ }
+#endif
+
+ /* Then render the glyph into the allocated memory */
+
+ ret = RENDERER((FAR nxgl_mxpixel_t*)glyph->bitmap,
+ glyph->height, glyph->width, glyph->stride,
+ fbm, priv->wndo.fcolor[0]);
+ if (ret < 0)
+ {
+ /* Actually, the RENDERER never returns a failure */
+
+ gdbg("nxcon_renderglyph: RENDERER failed\n");
+ nxcon_freeglyph(glyph);
+ glyph = NULL;
+ }
+ }
+
+ return glyph;
+}
+
+/****************************************************************************
+ * Name: nxcon_fontsize
+ ****************************************************************************/
+
+static int nxcon_fontsize(NXHANDLE hfont, uint8_t ch, FAR struct nxgl_size_s *size)
+{
+ FAR const struct nx_fontbitmap_s *fbm;
+
+ /* No, it is not cached... Does the code map to a font? */
+
+ fbm = nxf_getbitmap(hfont, ch);
+ if (fbm)
+ {
+ /* Yes.. return the font size */
+
+ size->w = fbm->metric.width + fbm->metric.xoffset;
+ size->h = fbm->metric.height + fbm->metric.yoffset;
+ return OK;
+ }
+
+ return ERROR;
+}
+
+/****************************************************************************
+ * Name: nxcon_getglyph
+ ****************************************************************************/
+
+static FAR struct nxcon_glyph_s *
+nxcon_getglyph(NXHANDLE hfont, FAR struct nxcon_state_s *priv, uint8_t ch)
+{
+ FAR struct nxcon_glyph_s *glyph;
+ FAR const struct nx_fontbitmap_s *fbm;
+
+ /* First, try to find the glyph in the cache of pre-rendered glyphs */
+
+ glyph = nxcon_findglyph(priv, ch);
+ if (glyph)
+ {
+ /* We found it in the cache .. return the cached glyph */
+
+ return glyph;
+ }
+
+ /* No, it is not cached... Does the code map to a font? */
+
+ fbm = nxf_getbitmap(hfont, ch);
+ if (fbm)
+ {
+ /* Yes.. render the glyph */
+
+ glyph = nxcon_renderglyph(priv, fbm, ch);
+ }
+
+ return glyph;
+}
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxcon_addchar
+ *
+ * Description:
+ * This is part of the nxcon_putc logic. It creates and positions a
+ * the character and renders (or re-uses) a glyph for font.
+ *
+ ****************************************************************************/
+
+FAR const struct nxcon_bitmap_s *
+nxcon_addchar(NXHANDLE hfont, FAR struct nxcon_state_s *priv, uint8_t ch)
+{
+ FAR struct nxcon_bitmap_s *bm = NULL;
+ FAR struct nxcon_glyph_s *glyph;
+
+ /* Is there space for another character on the display? */
+
+ if (priv->nchars < priv->maxchars)
+ {
+ /* Yes, setup the bitmap information */
+
+ bm = &priv->bm[priv->nchars];
+ bm->code = ch;
+ bm->flags = 0;
+ bm->pos.x = priv->fpos.x;
+ bm->pos.y = priv->fpos.y;
+
+ /* Find (or create) the matching glyph */
+
+ glyph = nxcon_getglyph(hfont, priv, ch);
+ if (!glyph)
+ {
+ /* No, there is no font for this code. Just mark this as a space. */
+
+ bm->flags |= BMFLAGS_NOGLYPH;
+
+ /* Set up the next character position */
+
+ priv->fpos.x += priv->spwidth;
+ }
+ else
+ {
+ /* Set up the next character position */
+
+ priv->fpos.x += glyph->width;
+ }
+
+ /* Success.. increment nchars to retain this character */
+
+ priv->nchars++;
+ }
+
+ return bm;
+}
+
+/****************************************************************************
+ * Name: nxcon_hidechar
+ *
+ * Description:
+ * Erase a character from the window.
+ *
+ ****************************************************************************/
+int nxcon_hidechar(FAR struct nxcon_state_s *priv,
+ FAR const struct nxcon_bitmap_s *bm)
+{
+ struct nxgl_rect_s bounds;
+ struct nxgl_size_s fsize;
+ int ret;
+
+ /* Get the size of the font glyph. If nxcon_fontsize, then the
+ * character will have been rendered as a space, and no display
+ * modification is required (not an error).
+ */
+
+ ret = nxcon_fontsize(priv->font, bm->code, &fsize);
+ if (ret < 0)
+ {
+ /* It was rendered as a space. */
+
+ return OK;
+ }
+
+ /* Construct a bounding box for the glyph */
+
+ bounds.pt1.x = bm->pos.x;
+ bounds.pt1.y = bm->pos.y;
+ bounds.pt2.x = bm->pos.x + fsize.w - 1;
+ bounds.pt2.y = bm->pos.y + fsize.h - 1;
+
+ /* Fill the bitmap region with the background color, erasing the
+ * character from the display. NOTE: This region might actually
+ * be obscured... NX will handle that case.
+ */
+
+ return priv->ops->fill(priv, &bounds, priv->wndo.wcolor);
+}
+
+/****************************************************************************
+ * Name: nxcon_backspace
+ *
+ * Description:
+ * Remove the last character from the window.
+ *
+ ****************************************************************************/
+
+int nxcon_backspace(FAR struct nxcon_state_s *priv)
+{
+ FAR struct nxcon_bitmap_s *bm;
+ int ndx;
+ int ret = -ENOENT;
+
+ /* Is there a character on the display? */
+
+ if (priv->nchars > 0)
+ {
+ /* Yes.. Get the index to the last bitmap on the display */
+
+ ndx = priv->nchars - 1;
+ bm = &priv->bm[ndx];
+
+ /* Erase the character from the display */
+
+ ret = nxcon_hidechar(priv, bm);
+
+ /* The current position to the location where the last character was */
+
+ priv->fpos.x = bm->pos.x;
+ priv->fpos.y = bm->pos.y;
+
+ /* Decrement nchars to discard this character */
+
+ priv->nchars = ndx;
+ }
+
+ return ret;
+}
+
+/****************************************************************************
+ * Name: nxcon_home
+ *
+ * Description:
+ * Set the next character position to the top-left corner of the display.
+ *
+ ****************************************************************************/
+
+void nxcon_home(FAR struct nxcon_state_s *priv)
+{
+ /* The first character is one space from the left */
+
+ priv->fpos.x = priv->spwidth;
+
+ /* And CONFIG_NXCONSOLE_LINESEPARATION lines from the top */
+
+ priv->fpos.y = CONFIG_NXCONSOLE_LINESEPARATION;
+}
+
+/****************************************************************************
+ * Name: nxcon_newline
+ *
+ * Description:
+ * Set the next character position to the beginning of the next line.
+ *
+ ****************************************************************************/
+
+void nxcon_newline(FAR struct nxcon_state_s *priv)
+{
+ /* Carriage return: The first character is one space from the left */
+
+ priv->fpos.x = priv->spwidth;
+
+ /* Linefeed: Down the max font height + CONFIG_NXCONSOLE_LINESEPARATION */
+
+ priv->fpos.y += (priv->fheight + CONFIG_NXCONSOLE_LINESEPARATION);
+}
+
+/****************************************************************************
+ * Name: nxcon_fillchar
+ *
+ * Description:
+ * This implements the character display. It is part of the nxcon_putc
+ * operation but may also be used when redrawing an existing display.
+ *
+ ****************************************************************************/
+
+void nxcon_fillchar(FAR struct nxcon_state_s *priv,
+ FAR const struct nxgl_rect_s *rect,
+ FAR const struct nxcon_bitmap_s *bm)
+{
+ FAR struct nxcon_glyph_s *glyph;
+ struct nxgl_rect_s bounds;
+ struct nxgl_rect_s intersection;
+ struct nxgl_size_s fsize;
+ int ret;
+
+ /* Handle the special case of spaces which have no glyph bitmap */
+
+ if (BM_ISSPACE(bm))
+ {
+ return;
+ }
+
+ /* Get the size of the font glyph (which may not have been created yet) */
+
+ ret = nxcon_fontsize(priv->font, bm->code, &fsize);
+ if (ret < 0)
+ {
+ /* This would mean that there is no bitmap for the character code and
+ * that the font would be rendered as a space. But this case should
+ * never happen here because the BM_ISSPACE() should have already
+ * found all such cases.
+ */
+
+ return;
+ }
+
+ /* Construct a bounding box for the glyph */
+
+ bounds.pt1.x = bm->pos.x;
+ bounds.pt1.y = bm->pos.y;
+ bounds.pt2.x = bm->pos.x + fsize.w - 1;
+ bounds.pt2.y = bm->pos.y + fsize.h - 1;
+
+ /* Should this also be clipped to a region in the window? */
+
+ if (rect)
+ {
+ /* Get the intersection of the redraw region and the character bitmap */
+
+ nxgl_rectintersect(&intersection, rect, &bounds);
+ }
+ else
+ {
+ /* The intersection is the whole glyph */
+
+ nxgl_rectcopy(&intersection, &bounds);
+ }
+
+ /* Check for empty intersections */
+
+ if (!nxgl_nullrect(&intersection))
+ {
+ FAR const void *src;
+
+ /* Find (or create) the glyph that goes with this font */
+
+ glyph = nxcon_getglyph(priv->font, priv, bm->code);
+ if (!glyph)
+ {
+ /* Shouldn't happen */
+
+ return;
+ }
+
+ /* Blit the font bitmap into the window */
+
+ src = (FAR const void *)glyph->bitmap;
+ ret = priv->ops->bitmap(priv, &intersection, &src,
+ &bm->pos, (unsigned int)glyph->stride);
+ DEBUGASSERT(ret >= 0);
+ }
+}
+
diff --git a/nuttx/graphics/nxconsole/nxcon_internal.h b/nuttx/graphics/nxconsole/nxcon_internal.h
new file mode 100644
index 000000000..dc976a662
--- /dev/null
+++ b/nuttx/graphics/nxconsole/nxcon_internal.h
@@ -0,0 +1,254 @@
+/****************************************************************************
+ * nuttx/graphics/nxconsole/nxcon_internal.h
+ *
+ * Copyright (C) 2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+#ifndef __GRAPHICS_NXCONSOLE_NXCON_INTERNAL_H
+#define __GRAPHICS_NXCONSOLE_NXCON_INTERNAL_H
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdint.h>
+#include <semaphore.h>
+
+#include <nuttx/fs/fs.h>
+
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxtk.h>
+#include <nuttx/nx/nxfonts.h>
+#include <nuttx/nx/nxconsole.h>
+
+/****************************************************************************
+ * Definitions
+ ****************************************************************************/
+/* NxConsole Definitions ****************************************************/
+/* Bitmap flags */
+
+#define BMFLAGS_NOGLYPH (1 << 0) /* No glyph available, use space */
+#define BM_ISSPACE(bm) (((bm)->flags & BMFLAGS_NOGLYPH) != 0)
+
+/* Sizes and maximums */
+
+#define MAX_USECNT 255 /* Limit to range of a uint8_t */
+
+/* Device path formats */
+
+#define NX_DEVNAME_FORMAT "/dev/nxcon%d"
+#define NX_DEVNAME_SIZE 16
+
+/* Semaphore protection */
+
+#define NO_HOLDER (pid_t)-1
+
+/* VT100 escape sequence processing */
+
+#define VT100_MAX_SEQUENCE 3
+
+/****************************************************************************
+ * Public Types
+ ****************************************************************************/
+/* Identifies the state of the VT100 escape sequence processing */
+
+enum nxcon_vt100state_e
+{
+ VT100_NOT_CONSUMED = 0, /* Character is not part of a VT100 escape sequence */
+ VT100_CONSUMED, /* Character was consumed as part of the VT100 escape processing */
+ VT100_PROCESSED, /* The full VT100 escape sequence was processed */
+ VT100_ABORT /* Invalid/unsupported character in buffered escape sequence */
+};
+
+/* Describes on set of console window callbacks */
+
+struct nxcon_state_s;
+struct nxcon_operations_s
+{
+ int (*fill)(FAR struct nxcon_state_s *priv,
+ FAR const struct nxgl_rect_s *rect,
+ nxgl_mxpixel_t wcolor[CONFIG_NX_NPLANES]);
+#ifndef CONFIG_NX_WRITEONLY
+ int (*move)(FAR struct nxcon_state_s *priv,
+ FAR const struct nxgl_rect_s *rect,
+ FAR const struct nxgl_point_s *offset);
+#endif
+ int (*bitmap)(FAR struct nxcon_state_s *priv,
+ FAR const struct nxgl_rect_s *dest,
+ FAR const void *src[CONFIG_NX_NPLANES],
+ FAR const struct nxgl_point_s *origin,
+ unsigned int stride);
+};
+
+/* Describes one cached glyph bitmap */
+
+struct nxcon_glyph_s
+{
+ uint8_t code; /* Character code */
+ uint8_t height; /* Height of this glyph (in rows) */
+ uint8_t width; /* Width of this glyph (in pixels) */
+ uint8_t stride; /* Width of the glyph row (in bytes) */
+ uint8_t usecnt; /* Use count */
+ FAR uint8_t *bitmap; /* Allocated bitmap memory */
+};
+
+/* Describes on character on the display */
+
+struct nxcon_bitmap_s
+{
+ uint8_t code; /* Character code */
+ uint8_t flags; /* See BMFLAGS_* */
+ struct nxgl_point_s pos; /* Character position */
+};
+
+/* Describes the state of one NX console driver*/
+
+struct nxcon_state_s
+{
+ FAR const struct nxcon_operations_s *ops; /* Window operations */
+ FAR void *handle; /* The window handle */
+ FAR struct nxcon_window_s wndo; /* Describes the window and font */
+ NXHANDLE font; /* The current font handle */
+ sem_t exclsem; /* Forces mutually exclusive access */
+#ifdef CONFIG_DEBUG
+ pid_t holder; /* Deadlock avoidance */
+#endif
+ uint8_t minor; /* Device minor number */
+
+ /* Text output support */
+
+ uint8_t fheight; /* Max height of a font in pixels */
+ uint8_t fwidth; /* Max width of a font in pixels */
+ uint8_t spwidth; /* The width of a space */
+ uint8_t maxglyphs; /* Size of the glyph[] array */
+
+ uint16_t maxchars; /* Size of the bm[] array */
+ uint16_t nchars; /* Number of chars in the bm[] array */
+
+ struct nxgl_point_s fpos; /* Next display position */
+
+ /* VT100 escape sequence processing */
+
+ char seq[VT100_MAX_SEQUENCE]; /* Buffered characters */
+ uint8_t nseq; /* Number of buffered characters */
+
+ /* Font cache data storage */
+
+ struct nxcon_bitmap_s cursor;
+ struct nxcon_bitmap_s bm[CONFIG_NXCONSOLE_MXCHARS];
+
+ /* Glyph cache data storage */
+
+ struct nxcon_glyph_s glyph[CONFIG_NXCONSOLE_CACHESIZE];
+
+ /* Keyboard input support */
+
+#ifdef CONFIG_NXCONSOLE_NXKBDIN
+ sem_t waitsem; /* Supports waiting for input data */
+ uint8_t nwaiters; /* Number of threads waiting for data */
+ uint8_t head; /* rxbuffer head/input index */
+ uint8_t tail; /* rxbuffer tail/output index */
+
+ uint8_t rxbuffer[CONFIG_NXCONSOLE_KBDBUFSIZE];
+
+ /* The following is a list if poll structures of threads waiting for
+ * driver events. The 'struct pollfd' reference for each open is also
+ * retained in the f_priv field of the 'struct file'.
+ */
+
+#ifndef CONFIG_DISABLE_POLL
+ struct pollfd *fds[CONFIG_RAMLOG_NPOLLWAITERS];
+#endif
+#endif /* CONFIG_NXCONSOLE_NXKBDIN */
+};
+
+/****************************************************************************
+ * Public Variables
+ ****************************************************************************/
+
+/* This is the common NX driver file operations */
+
+extern const struct file_operations g_nxcon_drvrops;
+
+/****************************************************************************
+ * Public Function Prototypes
+ ****************************************************************************/
+/* Semaphore helpers */
+
+#ifdef CONFIG_DEBUG
+int nxcon_semwait(FAR struct nxcon_state_s *priv);
+int nxcon_sempost(FAR struct nxcon_state_s *priv);
+#else
+# define nxcon_semwait(p) sem_wait(&p->exclsem)
+# define nxcon_sempost(p) sem_post(&p->exclsem)
+#endif
+
+/* Common device registration */
+
+FAR struct nxcon_state_s *nxcon_register(NXCONSOLE handle,
+ FAR struct nxcon_window_s *wndo, FAR const struct nxcon_operations_s *ops,
+ int minor);
+
+#ifdef CONFIG_NXCONSOLE_NXKBDIN
+ssize_t nxcon_read(FAR struct file *filep, FAR char *buffer, size_t len);
+#ifndef CONFIG_DISABLE_POLL
+int nxcon_poll(FAR struct file *filep, FAR struct pollfd *fds, bool setup);
+#endif
+#endif
+
+/* VT100 Terminal emulation */
+
+enum nxcon_vt100state_e nxcon_vt100(FAR struct nxcon_state_s *priv, char ch);
+
+/* Generic text display helpers */
+
+void nxcon_home(FAR struct nxcon_state_s *priv);
+void nxcon_newline(FAR struct nxcon_state_s *priv);
+FAR const struct nxcon_bitmap_s *nxcon_addchar(NXHANDLE hfont,
+ FAR struct nxcon_state_s *priv, uint8_t ch);
+int nxcon_hidechar(FAR struct nxcon_state_s *priv,
+ FAR const struct nxcon_bitmap_s *bm);
+int nxcon_backspace(FAR struct nxcon_state_s *priv);
+void nxcon_fillchar(FAR struct nxcon_state_s *priv,
+ FAR const struct nxgl_rect_s *rect, FAR const struct nxcon_bitmap_s *bm);
+
+void nxcon_putc(FAR struct nxcon_state_s *priv, uint8_t ch);
+void nxcon_showcursor(FAR struct nxcon_state_s *priv);
+void nxcon_hidecursor(FAR struct nxcon_state_s *priv);
+
+/* Scrolling support */
+
+void nxcon_scroll(FAR struct nxcon_state_s *priv, int scrollheight);
+
+#endif /* __GRAPHICS_NXCONSOLE_NXCON_INTERNAL_H */
diff --git a/nuttx/graphics/nxconsole/nxcon_kbdin.c b/nuttx/graphics/nxconsole/nxcon_kbdin.c
new file mode 100644
index 000000000..f4b116c46
--- /dev/null
+++ b/nuttx/graphics/nxconsole/nxcon_kbdin.c
@@ -0,0 +1,489 @@
+/****************************************************************************
+ * nuttx/graphics/nxconsole/nxcon_kbdin.c
+ *
+ * Copyright (C) 2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <fcntl.h>
+#include <sched.h>
+#include <assert.h>
+#include <errno.h>
+#include <debug.h>
+
+#include "nxcon_internal.h"
+
+#ifdef CONFIG_NXCONSOLE_NXKBDIN
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Function Prototypes
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxcon_pollnotify
+ ****************************************************************************/
+
+#ifndef CONFIG_DISABLE_POLL
+static void nxcon_pollnotify(FAR struct nxcon_state_s *priv, pollevent_t eventset)
+{
+ FAR struct pollfd *fds;
+ irqstate_t flags;
+ int i;
+
+ /* This function may be called from an interrupt handler */
+
+ for (i = 0; i < CONFIG_NXCONSOLE_NPOLLWAITERS; i++)
+ {
+ flags = irqsave();
+ fds = priv->fds[i];
+ if (fds)
+ {
+ fds->revents |= (fds->events & eventset);
+ if (fds->revents != 0)
+ {
+ sem_post(fds->sem);
+ }
+ }
+ irqrestore(flags);
+ }
+}
+#else
+# define nxcon_pollnotify(priv,event)
+#endif
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxcon_read
+ *
+ * Description:
+ * The optional NxConsole read method
+ *
+ ****************************************************************************/
+
+ssize_t nxcon_read(FAR struct file *filep, FAR char *buffer, size_t len)
+{
+ FAR struct nxcon_state_s *priv;
+ ssize_t nread;
+ char ch;
+ int ret;
+
+ /* Recover our private state structure */
+
+ DEBUGASSERT(filep && filep->f_priv);
+ priv = (FAR struct nxcon_state_s *)filep->f_priv;
+
+ /* Get exclusive access to the driver structure */
+
+ ret = nxcon_semwait(priv);
+ if (ret < 0)
+ {
+ gdbg("ERROR: nxcon_semwait failed\n");
+ return ret;
+ }
+
+ /* Loop until something is read */
+
+ for (nread = 0; nread < len; )
+ {
+ /* Get the next byte from the buffer */
+
+ if (priv->head == priv->tail)
+ {
+ /* The circular buffer is empty. Did we read anything? */
+
+ if (nread > 0)
+ {
+ /* Yes.. break out to return what we have. */
+
+ break;
+ }
+
+ /* If the driver was opened with O_NONBLOCK option, then don't wait.
+ * Just return EGAIN.
+ */
+
+ if (filep->f_oflags & O_NONBLOCK)
+ {
+ nread = -EAGAIN;
+ break;
+ }
+
+ /* Otherwise, wait for something to be written to the circular
+ * buffer. Increment the number of waiters so that the nxcon_write()
+ * will not that it needs to post the semaphore to wake us up.
+ */
+
+ sched_lock();
+ priv->nwaiters++;
+ nxcon_sempost(priv);
+
+ /* We may now be pre-empted! But that should be okay because we
+ * have already incremented nwaiters. Pre-emption is disabled
+ * but will be re-enabled while we are waiting.
+ */
+
+ ret = sem_wait(&priv->waitsem);
+
+ /* Pre-emption will be disabled when we return. So the decrementing
+ * nwaiters here is safe.
+ */
+
+ priv->nwaiters--;
+ sched_unlock();
+
+ /* Did we successfully get the waitsem? */
+
+ if (ret >= 0)
+ {
+ /* Yes... then retake the mutual exclusion semaphore */
+
+ ret = nxcon_semwait(priv);
+ }
+
+ /* Was the semaphore wait successful? Did we successful re-take the
+ * mutual exclusion semaphore?
+ */
+
+ if (ret < 0)
+ {
+ /* No.. One of the two sem_wait's failed. */
+
+ int errval = errno;
+
+ gdbg("ERROR: nxcon_semwait failed\n");
+
+ /* Were we awakened by a signal? Did we read anything before
+ * we received the signal?
+ */
+
+ if (errval != EINTR || nread >= 0)
+ {
+ /* Yes.. return the error. */
+
+ nread = -errval;
+ }
+
+ /* Break out to return what we have. Note, we can't exactly
+ * "break" out because whichever error occurred, we do not hold
+ * the exclusion semaphore.
+ */
+
+ goto errout_without_sem;
+ }
+ }
+ else
+ {
+ /* The circular buffer is not empty, get the next byte from the
+ * tail index.
+ */
+
+ ch = priv->rxbuffer[priv->tail];
+
+ /* Increment the tail index and re-enable interrupts */
+
+ if (++priv->tail >= CONFIG_NXCONSOLE_KBDBUFSIZE)
+ {
+ priv->tail = 0;
+ }
+
+ /* Add the character to the user buffer */
+
+ buffer[nread] = ch;
+ nread++;
+ }
+ }
+
+ /* Relinquish the mutual exclusion semaphore */
+
+ nxcon_sempost(priv);
+
+ /* Notify all poll/select waiters that they can write to the FIFO */
+
+errout_without_sem:
+
+#ifndef CONFIG_DISABLE_POLL
+ if (nread > 0)
+ {
+ nxcon_pollnotify(priv, POLLOUT);
+ }
+#endif
+
+ /* Return the number of characters actually read */
+
+ return nread;
+}
+
+/****************************************************************************
+ * Name: nxcon_poll
+ ****************************************************************************/
+
+#ifndef CONFIG_DISABLE_POLL
+int nxcon_poll(FAR struct file *filep, FAR struct pollfd *fds, bool setup)
+{
+ FAR struct inode *inode = filep->f_inode;
+ FAR struct nxcon_state_s *priv;
+ pollevent_t eventset;
+ int ndx;
+ int ret;
+ int i;
+
+ /* Some sanity checking */
+
+ DEBUGASSERT(inode && inode->i_private);
+ priv = inode->i_private;
+
+ /* Get exclusive access to the driver structure */
+
+ ret = nxcon_semwait(priv);
+ if (ret < 0)
+ {
+ gdbg("ERROR: nxcon_semwait failed\n");
+ return ret;
+ }
+
+ /* Are we setting up the poll? Or tearing it down? */
+
+ if (setup)
+ {
+ /* This is a request to set up the poll. Find an available
+ * slot for the poll structure reference
+ */
+
+ for (i = 0; i < CONFIG_NXCONSOLE_NPOLLWAITERS; i++)
+ {
+ /* Find an available slot */
+
+ if (!priv->fds[i])
+ {
+ /* Bind the poll structure and this slot */
+
+ priv->fds[i] = fds;
+ fds->priv = &priv->fds[i];
+ break;
+ }
+ }
+
+ if (i >= CONFIG_NXCONSOLE_NPOLLWAITERS)
+ {
+ gdbg("ERROR: Too many poll waiters\n");
+
+ fds->priv = NULL;
+ ret = -EBUSY;
+ goto errout;
+ }
+
+ /* Should immediately notify on any of the requested events?
+ * This driver is always available for transmission.
+ */
+
+ eventset = POLLOUT;
+
+ /* Check if the receive buffer is empty */
+
+ if (priv->head != priv->tail)
+ {
+ eventset |= POLLIN;
+ }
+
+ if (eventset)
+ {
+ nxcon_pollnotify(priv, eventset);
+ }
+
+ }
+ else if (fds->priv)
+ {
+ /* This is a request to tear down the poll. */
+
+ struct pollfd **slot = (struct pollfd **)fds->priv;
+
+#ifdef CONFIG_DEBUG
+ if (!slot)
+ {
+ gdbg("ERROR: No slot\n");
+
+ ret = -EIO;
+ goto errout;
+ }
+#endif
+
+ /* Remove all memory of the poll setup */
+
+ *slot = NULL;
+ fds->priv = NULL;
+ }
+
+errout:
+ nxcon_sempost(priv);
+ return ret;
+}
+#endif
+
+/****************************************************************************
+ * Name: nxcon_kbdin
+ *
+ * Description:
+ * This function should be driven by the window kbdin callback function
+ * (see nx.h). When the NxConsole is the top window and keyboard input is
+ * received on the top window, that window callback should be directed to
+ * this function. This function will buffer the keyboard data and may
+ * it available to the NxConsole as stdin.
+ *
+ * If CONFIG_NXCONSOLE_NXKBDIN is not selected, then the NxConsole will
+ * receive its input from stdin (/dev/console). This works great but
+ * cannot be shared between different windows. Chaos will ensue if you
+ * try to support multiple NxConsole windows without CONFIG_NXCONSOLE_NXKBDIN
+ *
+ * Input Parameters:
+ * handle - A handle previously returned by nx_register, nxtk_register, or
+ * nxtool_register.
+ * buffer - The array of characters
+ * buflen - The number of characters that are available in buffer[]
+ *
+ * Returned Value:
+ * None
+ *
+ ****************************************************************************/
+
+void nxcon_kbdin(NXCONSOLE handle, FAR const uint8_t *buffer, uint8_t buflen)
+{
+ FAR struct nxcon_state_s *priv;
+ ssize_t nwritten;
+ int nexthead;
+ char ch;
+ int ret;
+
+ gvdbg("buflen=%d\n");
+ DEBUGASSERT(handle);
+
+ /* Get the reference to the driver structure from the handle */
+
+ priv = (FAR struct nxcon_state_s *)handle;
+
+ /* Get exclusive access to the driver structure */
+
+ ret = nxcon_semwait(priv);
+ if (ret < 0)
+ {
+ gdbg("ERROR: nxcon_semwait failed\n");
+ return;
+ }
+
+ /* Loop until all of the bytes have been written. This function may be
+ * called from an interrupt handler! Semaphores cannot be used!
+ *
+ * The write logic only needs to modify the head index. Therefore,
+ * there is a difference in the way that head and tail are protected:
+ * tail is protected with a semaphore; tail is protected by disabling
+ * interrupts.
+ */
+
+ for (nwritten = 0; nwritten < buflen; nwritten++)
+ {
+ /* Add the next character */
+
+ ch = buffer[nwritten];
+
+ /* Calculate the write index AFTER the next byte is add to the ring
+ * buffer
+ */
+
+ nexthead = priv->head + 1;
+ if (nexthead >= CONFIG_NXCONSOLE_KBDBUFSIZE)
+ {
+ nexthead = 0;
+ }
+
+ /* Would the next write overflow the circular buffer? */
+
+ if (nexthead == priv->tail)
+ {
+ /* Yes... Return an indication that nothing was saved in the buffer. */
+
+ gdbg("ERROR: Keyboard data overrun\n");
+ break;
+ }
+
+ /* No... copy the byte */
+
+ priv->rxbuffer[priv->head] = ch;
+ priv->head = nexthead;
+ }
+
+ /* Was anything written? */
+
+ if (nwritten > 0)
+ {
+ int i;
+
+ /* Are there threads waiting for read data? */
+
+ sched_lock();
+ for (i = 0; i < priv->nwaiters; i++)
+ {
+ /* Yes.. Notify all of the waiting readers that more data is available */
+
+ sem_post(&priv->waitsem);
+ }
+
+ /* Notify all poll/select waiters that they can write to the FIFO */
+
+#ifndef CONFIG_DISABLE_POLL
+ nxcon_pollnotify(priv, POLLIN);
+#endif
+ sched_unlock();
+ }
+
+ nxcon_sempost(priv);
+}
+
+#endif /* CONFIG_NXCONSOLE_NXKBDIN */
diff --git a/nuttx/graphics/nxconsole/nxcon_putc.c b/nuttx/graphics/nxconsole/nxcon_putc.c
new file mode 100644
index 000000000..d51d79c79
--- /dev/null
+++ b/nuttx/graphics/nxconsole/nxcon_putc.c
@@ -0,0 +1,203 @@
+/****************************************************************************
+ * nuttx/graphics/nxconsole/nxcon_putc.c
+ *
+ * Copyright (C) 2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <nuttx/ascii.h>
+
+#include "nxcon_internal.h"
+
+/****************************************************************************
+ * Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Function Prototypes
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxcon_putc
+ *
+ * Description:
+ * Render the specified character at the current display position.
+ *
+ ****************************************************************************/
+
+void nxcon_putc(FAR struct nxcon_state_s *priv, uint8_t ch)
+{
+ FAR const struct nxcon_bitmap_s *bm;
+ int lineheight;
+
+ /* Ignore carriage returns */
+
+ if (ch == '\r')
+ {
+ return;
+ }
+
+ /* Handle backspace (treating both BS and DEL as backspace) */
+
+ if (ch == ASCII_BS || ch == ASCII_DEL)
+ {
+ nxcon_backspace(priv);
+ return;
+ }
+
+ /* Will another character fit on this line? */
+
+ if (priv->fpos.x + priv->fwidth > priv->wndo.wsize.w)
+ {
+#ifndef CONFIG_NXCONSOLE_NOWRAP
+ /* No.. move to the next line */
+
+ nxcon_newline(priv);
+
+ /* If we were about to output a newline character, then don't */
+
+ if (ch == '\n')
+ {
+ return;
+ }
+#else
+ /* No.. Ignore all further characters until a newline is encountered */
+
+ if (ch != '\n')
+ {
+ return;
+ }
+#endif
+ }
+
+ /* If it is a newline character, then just perform the logical newline
+ * operation.
+ */
+
+ if (ch == '\n')
+ {
+ nxcon_newline(priv);
+ return;
+ }
+
+ /* Check if we need to scroll up */
+
+ lineheight = (priv->fheight + CONFIG_NXCONSOLE_LINESEPARATION);
+ while (priv->fpos.y >= priv->wndo.wsize.h - lineheight)
+ {
+ nxcon_scroll(priv, lineheight);
+ }
+
+ /* Find the glyph associated with the character and render it onto the
+ * display.
+ */
+
+ bm = nxcon_addchar(priv->font, priv, ch);
+ if (bm)
+ {
+ nxcon_fillchar(priv, NULL, bm);
+ }
+}
+
+/****************************************************************************
+ * Name: nxcon_showcursor
+ *
+ * Description:
+ * Render the cursor character at the current display position.
+ *
+ ****************************************************************************/
+
+void nxcon_showcursor(FAR struct nxcon_state_s *priv)
+{
+ int lineheight;
+
+ /* Will another character fit on this line? */
+
+ if (priv->fpos.x + priv->fwidth > priv->wndo.wsize.w)
+ {
+#ifndef CONFIG_NXCONSOLE_NOWRAP
+ /* No.. move to the next line */
+
+ nxcon_newline(priv);
+#else
+ return;
+#endif
+ }
+
+ /* Check if we need to scroll up */
+
+ lineheight = (priv->fheight + CONFIG_NXCONSOLE_LINESEPARATION);
+ while (priv->fpos.y >= priv->wndo.wsize.h - lineheight)
+ {
+ nxcon_scroll(priv, lineheight);
+ }
+
+ /* Render the cursor glyph onto the display. */
+
+ priv->cursor.pos.x = priv->fpos.x;
+ priv->cursor.pos.y = priv->fpos.y;
+ nxcon_fillchar(priv, NULL, &priv->cursor);
+}
+
+/****************************************************************************
+ * Name: nxcon_hidecursor
+ *
+ * Description:
+ * Render the cursor cursor character from the display.
+ *
+ ****************************************************************************/
+
+void nxcon_hidecursor(FAR struct nxcon_state_s *priv)
+{
+ (void)nxcon_hidechar(priv, &priv->cursor);
+}
diff --git a/nuttx/graphics/nxconsole/nxcon_redraw.c b/nuttx/graphics/nxconsole/nxcon_redraw.c
new file mode 100755
index 000000000..05f0a47f8
--- /dev/null
+++ b/nuttx/graphics/nxconsole/nxcon_redraw.c
@@ -0,0 +1,152 @@
+/****************************************************************************
+ * nuttx/graphics/nxconsole/nxcon_bkgd.c
+ *
+ * Copyright (C) 2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdint.h>
+#include <stdbool.h>
+#include <semaphore.h>
+#include <assert.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxglib.h>
+
+#include "nxcon_internal.h"
+
+/****************************************************************************
+ * Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Function Prototypes
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxcon_redraw
+ *
+ * Description:
+ * Re-draw a portion of the NX console. This function should be called
+ * from the appropriate window callback logic.
+ *
+ * Input Parameters:
+ * handle - A handle previously returned by nx_register, nxtk_register, or
+ * nxtool_register.
+ * rect - The rectangle that needs to be re-drawn (in window relative
+ * coordinates)
+ * more - true: More re-draw requests will follow
+ *
+ * Returned Value:
+ * None
+ *
+ ****************************************************************************/
+
+void nxcon_redraw(NXCONSOLE handle, FAR const struct nxgl_rect_s *rect, bool more)
+{
+ FAR struct nxcon_state_s *priv;
+ int ret;
+ int i;
+
+ DEBUGASSERT(handle && rect);
+ gvdbg("rect={(%d,%d),(%d,%d)} more=%s\n",
+ rect->pt1.x, rect->pt1.y, rect->pt2.x, rect->pt2.y,
+ more ? "true" : "false");
+
+ /* Recover our private state structure */
+
+ priv = (FAR struct nxcon_state_s *)handle;
+
+ /* Get exclusive access to the state structure */
+
+ do
+ {
+ ret = nxcon_semwait(priv);
+
+ /* Check for errors */
+
+ if (ret < 0)
+ {
+ /* The only expected error is if the wait failed because of it
+ * was interrupted by a signal.
+ */
+
+ DEBUGASSERT(errno == EINTR);
+ }
+ }
+ while (ret < 0);
+
+ /* Fill the rectangular region with the window background color */
+
+ ret = priv->ops->fill(priv, rect, priv->wndo.wcolor);
+ if (ret < 0)
+ {
+ gdbg("fill failed: %d\n", errno);
+ }
+
+ /* Then redraw each character on the display (Only the characters within
+ * the rectangle will actually be redrawn).
+ */
+
+ for (i = 0; i < priv->nchars; i++)
+ {
+ nxcon_fillchar(priv, rect, &priv->bm[i]);
+ }
+ ret = nxcon_sempost(priv);
+}
diff --git a/nuttx/graphics/nxconsole/nxcon_register.c b/nuttx/graphics/nxconsole/nxcon_register.c
new file mode 100644
index 000000000..cadda7394
--- /dev/null
+++ b/nuttx/graphics/nxconsole/nxcon_register.c
@@ -0,0 +1,160 @@
+/****************************************************************************
+ * nuttx/graphics/nxconsole/nxcon_register.c
+ *
+ * Copyright (C) 2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <sys/types.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/kmalloc.h>
+#include <nuttx/fs/fs.h>
+
+#include "nxcon_internal.h"
+
+/****************************************************************************
+ * Private Function Prototypes
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxcon_allocate
+ ****************************************************************************/
+
+FAR struct nxcon_state_s *
+ nxcon_register(NXCONSOLE handle, FAR struct nxcon_window_s *wndo,
+ FAR const struct nxcon_operations_s *ops, int minor)
+{
+ FAR struct nxcon_state_s *priv;
+ char devname[NX_DEVNAME_SIZE];
+ int ret;
+
+ DEBUGASSERT(handle && wndo && ops && (unsigned)minor < 256);
+
+ /* Allocate the driver structure */
+
+ priv = (FAR struct nxcon_state_s *)kzalloc(sizeof(struct nxcon_state_s));
+ if (!priv)
+ {
+ gdbg("Failed to allocate the NX driver structure\n");
+ return NULL;
+ }
+
+ /* Initialize the driver structure */
+
+ priv->ops = ops;
+ priv->handle = handle;
+ priv->minor = minor;
+ memcpy(&priv->wndo, wndo, sizeof( struct nxcon_window_s));
+
+ sem_init(&priv->exclsem, 0, 1);
+#ifdef CONFIG_DEBUG
+ priv->holder = NO_HOLDER;
+#endif
+
+#ifdef CONFIG_NXCONSOLE_NXKBDIN
+ sem_init(&priv->waitsem, 0, 0);
+#endif
+
+ /* Select the font */
+
+ priv->font = nxf_getfonthandle(wndo->fontid);
+ if (!priv->font)
+ {
+ gdbg("Failed to get font ID %d: %d\n", wndo->fontid, errno);
+ goto errout;
+ }
+
+ FAR const struct nx_font_s *fontset;
+
+ /* Get information about the font set being used and save this in the
+ * state structure
+ */
+
+ fontset = nxf_getfontset(priv->font);
+ priv->fheight = fontset->mxheight;
+ priv->fwidth = fontset->mxwidth;
+ priv->spwidth = fontset->spwidth;
+
+ /* Set up the text cache */
+
+ priv->maxchars = CONFIG_NXCONSOLE_MXCHARS;
+
+ /* Set up the font glyph bitmap cache */
+
+ priv->maxglyphs = CONFIG_NXCONSOLE_CACHESIZE;
+
+ /* Set the initial display position */
+
+ nxcon_home(priv);
+
+ /* Show the cursor */
+
+ priv->cursor.code = CONFIG_NXCONSOLE_CURSORCHAR;
+ nxcon_showcursor(priv);
+
+ /* Register the driver */
+
+ snprintf(devname, NX_DEVNAME_SIZE, NX_DEVNAME_FORMAT, minor);
+ ret = register_driver(devname, &g_nxcon_drvrops, 0666, priv);
+ if (ret < 0)
+ {
+ gdbg("Failed to register %s\n", devname);
+ }
+ return (NXCONSOLE)priv;
+
+errout:
+ kfree(priv);
+ return NULL;
+}
diff --git a/nuttx/graphics/nxconsole/nxcon_scroll.c b/nuttx/graphics/nxconsole/nxcon_scroll.c
new file mode 100755
index 000000000..c1a0fec95
--- /dev/null
+++ b/nuttx/graphics/nxconsole/nxcon_scroll.c
@@ -0,0 +1,239 @@
+/****************************************************************************
+ * nuttx/graphics/nxconsole/nxcon_scroll.c
+ *
+ * Copyright (C) 2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdint.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <semaphore.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxfonts.h>
+
+#include "nxcon_internal.h"
+
+/****************************************************************************
+ * Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Function Prototypes
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxcon_movedisplay
+ *
+ * Description:
+ * This function implements the data movement for the scroll operation. If
+ * we can read the displays framebuffer memory, then the job is pretty
+ * easy. However, many displays (such as SPI-based LCDs) are often read-
+ * only.
+ ****************************************************************************/
+
+#ifdef CONFIG_NX_WRITEONLY
+static inline void nxcon_movedisplay(FAR struct nxcon_state_s *priv,
+ int bottom, int scrollheight)
+{
+ FAR struct nxcon_bitmap_s *bm;
+ struct nxgl_rect_s rect;
+ nxgl_coord_t row;
+ int ret;
+ int i;
+
+ /* Move each row, one at a time. They could all be moved at once (by calling
+ * nxcon_redraw), but the since the region is cleared, then re-written, the
+ * effect would not be good. Below the region is also cleared and re-written,
+ * however, in much smaller chunks.
+ */
+
+ rect.pt1.x = 0;
+ rect.pt2.x = priv->wndo.wsize.w - 1;
+
+ for (row = CONFIG_NXCONSOLE_LINESEPARATION; row < bottom; row += scrollheight)
+ {
+ /* Create a bounding box the size of one row of characters */
+
+ rect.pt1.y = row;
+ rect.pt2.y = row + scrollheight - 1;
+
+ /* Clear the region */
+
+ ret = priv->ops->fill(priv, &rect, priv->wndo.wcolor);
+ if (ret < 0)
+ {
+ gdbg("fill failed: %d\n", errno);
+ }
+
+ /* Fill each character that might lie within in the bounding box */
+
+ for (i = 0; i < priv->nchars; i++)
+ {
+ bm = &priv->bm[i];
+ if (bm->pos.y <= rect.pt2.y && bm->pos.y + priv->fheight >= rect.pt1.y)
+ {
+ nxcon_fillchar(priv, &rect, bm);
+ }
+ }
+ }
+
+ /* Finally, clear the bottom part of the display */
+
+ rect.pt1.y = bottom;
+ rect.pt2.y = priv->wndo.wsize.h- 1;
+
+ ret = priv->ops->fill(priv, &rect, priv->wndo.wcolor);
+ if (ret < 0)
+ {
+ gdbg("nxcon_movedisplay: fill failed: %d\n", errno);
+ }
+}
+#else
+static inline void nxcon_movedisplay(FAR struct nxcon_state_s *priv,
+ int bottom, int scrollheight)
+{
+ struct nxgl_rect_s rect;
+ struct nxgl_point_s offset;
+ int ret;
+
+ /* Move the display in the range of 0-height up one scrollheight. The
+ * line at the bottom will be reset to the background color automatically.
+ *
+ * The source rectangle to be moved.
+ */
+
+ rect.pt1.x = 0;
+ rect.pt1.y = scrollheight + CONFIG_NXCONSOLE_LINESEPARATION;
+ rect.pt2.x = priv->wndo.wsize.w - 1;
+ rect.pt2.y = priv->wndo.wsize.h - 1;
+
+ /* The offset that determines how far to move the source rectangle */
+
+ offset.x = 0;
+ offset.y = -scrollheight;
+
+ /* Move the source rectangle */
+
+ ret = priv->ops->move(priv, &rect, &offset);
+ if (ret < 0)
+ {
+ gdbg("move failed: %d\n", errno);
+ }
+}
+#endif
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxcon_scroll
+ ****************************************************************************/
+
+void nxcon_scroll(FAR struct nxcon_state_s *priv, int scrollheight)
+{
+ int i;
+ int j;
+
+ /* Adjust the vertical position of each character */
+
+ for (i = 0; i < priv->nchars; )
+ {
+ FAR struct nxcon_bitmap_s *bm = &priv->bm[i];
+
+ /* Has any part of this character scrolled off the screen? */
+
+ if (bm->pos.y < scrollheight + CONFIG_NXCONSOLE_LINESEPARATION)
+ {
+ /* Yes... Delete the character by moving all of the data */
+
+ for (j = i; j < priv->nchars-1; j++)
+ {
+ memcpy(&priv->bm[j], &priv->bm[j+1], sizeof(struct nxcon_bitmap_s));
+ }
+
+ /* Decrement the number of cached characters ('i' is not incremented
+ * in this case because it already points to the next character)
+ */
+
+ priv->nchars--;
+ }
+
+ /* No.. just decrement its vertical position (moving it "up" the
+ * display by one line).
+ */
+
+ else
+ {
+ bm->pos.y -= scrollheight;
+
+ /* We are keeping this one so increment to the next character */
+
+ i++;
+ }
+ }
+
+ /* And move the next display position up by one line as well */
+
+ priv->fpos.y -= scrollheight;
+
+ /* Move the display in the range of 0-height up one scrollheight. */
+
+ nxcon_movedisplay(priv, priv->fpos.y, scrollheight);
+}
diff --git a/nuttx/graphics/nxconsole/nxcon_sem.c b/nuttx/graphics/nxconsole/nxcon_sem.c
new file mode 100644
index 000000000..4cf960971
--- /dev/null
+++ b/nuttx/graphics/nxconsole/nxcon_sem.c
@@ -0,0 +1,129 @@
+/****************************************************************************
+ * nuttx/graphics/nxconsole/nxcon_sem.c
+ *
+ * Copyright (C) 2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <unistd.h>
+#include <semaphore.h>
+#include <assert.h>
+#include <errno.h>
+
+#include "nxcon_internal.h"
+
+#ifdef CONFIG_DEBUG
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Function Prototypes
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxcon_semwait and nxcon_sempost
+ *
+ * Description:
+ * If debug is on, then lower level code may attempt console output while
+ * we are doing console output! In this case, we will toss the nested
+ * output to avoid deadlocks and infinite loops.
+ *
+ * Input Parameters:
+ * priv - Driver data structure
+ *
+ * Returned Value:
+ *
+ *
+ ****************************************************************************/
+
+int nxcon_semwait(FAR struct nxcon_state_s *priv)
+{
+ pid_t me;
+ int ret;
+
+ /* Does I already hold the semaphore */
+
+ me = getpid();
+ if (priv->holder != me)
+ {
+ /* No.. then wait until the thread that does hold it is finished with it */
+
+ ret = sem_wait(&priv->exclsem);
+ if (ret == OK)
+ {
+ /* No I hold the semaphore */
+
+ priv->holder = me;
+ }
+ return ret;
+ }
+
+ /* Abort, abort, abort! I have been re-entered */
+
+ set_errno(EBUSY);
+ return ERROR;
+}
+
+int nxcon_sempost(FAR struct nxcon_state_s *priv)
+{
+ pid_t me = getpid();
+
+ /* Make sure that I really hold the semaphore */
+
+ ASSERT(priv->holder == me);
+
+ /* Then let go of it */
+
+ priv->holder = NO_HOLDER;
+ return sem_post(&priv->exclsem);
+}
+
+#endif /* CONFIG_DEBUG */
diff --git a/nuttx/graphics/nxconsole/nxcon_unregister.c b/nuttx/graphics/nxconsole/nxcon_unregister.c
new file mode 100644
index 000000000..af6a53370
--- /dev/null
+++ b/nuttx/graphics/nxconsole/nxcon_unregister.c
@@ -0,0 +1,123 @@
+/****************************************************************************
+ * nuttx/graphics/nxconsole/nxcon_unregister.c
+ *
+ * Copyright (C) 2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <sys/types.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+
+#include <nuttx/kmalloc.h>
+#include <nuttx/nx/nxconsole.h>
+
+#include "nxcon_internal.h"
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Function Prototypes
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxcon_unregister
+ *
+ * Description:
+ * Un-register to NX console device.
+ *
+ * Input Parameters:
+ * handle - A handle previously returned by nx_register, nxtk_register, or
+ * nxtool_register.
+ *
+ * Returned Value:
+ * None
+ *
+ ****************************************************************************/
+
+void nxcon_unregister(NXCONSOLE handle)
+{
+ FAR struct nxcon_state_s *priv;
+ char devname[NX_DEVNAME_SIZE];
+ int i;
+
+ DEBUGASSERT(handle);
+
+ /* Get the reference to the driver structure from the handle */
+
+ priv = (FAR struct nxcon_state_s *)handle;
+ sem_destroy(&priv->exclsem);
+#ifdef CONFIG_NXCONSOLE_NXKBDIN
+ sem_destroy(&priv->waitsem);
+#endif
+
+ /* Free all allocated glyph bitmap */
+
+ for (i = 0; i < CONFIG_NXCONSOLE_CACHESIZE; i++)
+ {
+ FAR struct nxcon_glyph_s *glyph = &priv->glyph[i];
+ if (glyph->bitmap)
+ {
+ kfree(glyph->bitmap);
+ }
+ }
+
+ /* Unregister the driver */
+
+ snprintf(devname, NX_DEVNAME_SIZE, NX_DEVNAME_FORMAT, priv->minor);
+ (void)unregister_driver(devname);
+
+ /* Free the private data structure */
+
+ kfree(handle);
+}
diff --git a/nuttx/graphics/nxconsole/nxcon_vt100.c b/nuttx/graphics/nxconsole/nxcon_vt100.c
new file mode 100644
index 000000000..3e3374dce
--- /dev/null
+++ b/nuttx/graphics/nxconsole/nxcon_vt100.c
@@ -0,0 +1,289 @@
+/****************************************************************************
+ * nuttx/graphics/nxconsole/nxcon_vt100.c
+ *
+ * Copyright (C) 2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <string.h>
+#include <assert.h>
+
+#include <nuttx/vt100.h>
+
+#include "nxcon_internal.h"
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+typedef int (*seqhandler_t)(FAR struct nxcon_state_s *priv);
+
+struct vt100_sequence_s
+{
+ FAR const char *seq;
+ seqhandler_t handler;
+ uint8_t size;
+};
+
+/****************************************************************************
+ * Private Function Prototypes
+ ****************************************************************************/
+
+static int nxcon_erasetoeol(FAR struct nxcon_state_s *priv);
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/* All recognized VT100 escape sequences. Very little as present, this is
+ * a placeholder for a future, more complete VT100 emulation.
+ */
+
+/* <esc>[K is the VT100 command erases to the end of the line. */
+
+static const char g_erasetoeol[] = VT100_CLEAREOL;
+
+/* The list of all VT100 sequences supported by the emulation */
+
+static const struct vt100_sequence_s g_vt100sequences[] =
+{
+ {g_erasetoeol, nxcon_erasetoeol, sizeof(g_erasetoeol)},
+ {NULL, NULL, 0}
+};
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxcon_erasetoeol
+ *
+ * Description:
+ * Handle the erase-to-eol VT100 escapte sequence
+ *
+ * Input Parameters:
+ * priv - Driver data structure
+ *
+ * Returned Value:
+ * The index of the match in g_vt100sequences[]
+ *
+ ****************************************************************************/
+
+static int nxcon_erasetoeol(FAR struct nxcon_state_s *priv)
+{
+ /* Does nothing yet (other than consume the sequence) */
+
+ return OK;
+}
+
+/****************************************************************************
+ * Name: nxcon_vt100part
+ *
+ * Description:
+ * Return the next entry that is a partial match to the sequence.
+ *
+ * Input Parameters:
+ * priv - Driver data structure
+ * seqsize - The number of bytes in the sequence
+ * startndx - The index to start searching
+ *
+ * Returned Value:
+ * A pointer to the matching sequence in g_vt100sequences[]
+ *
+ ****************************************************************************/
+
+FAR const struct vt100_sequence_s *
+nxcon_vt100part(FAR struct nxcon_state_s *priv, int seqsize)
+{
+ FAR const struct vt100_sequence_s *seq;
+ int ndx;
+
+ /* Search from the beginning of the sequence table */
+
+ for (ndx = 0; g_vt100sequences[ndx].seq; ndx++)
+ {
+ /* Is this sequence big enough? */
+
+ seq = &g_vt100sequences[ndx];
+ if (seq->size >= seqsize)
+ {
+ /* Yes... are the first 'seqsize' bytes the same */
+
+ if (memcmp(seq->seq, priv->seq, seqsize) == 0)
+ {
+ /* Yes.. return the match */
+
+ return seq;
+ }
+ }
+ }
+ return NULL;
+}
+
+/****************************************************************************
+ * Name: nxcon_vt100seq
+ *
+ * Description:
+ * Determine if the new sequence is a part of a supported VT100 escape
+ * sequence.
+ *
+ * Input Parameters:
+ * priv - Driver data structure
+ * seqsize - The number of bytes in the sequence
+ *
+ * Returned Value:
+ * state - See enum nxcon_vt100state_e;
+ *
+ ****************************************************************************/
+
+static enum nxcon_vt100state_e nxcon_vt100seq(FAR struct nxcon_state_s *priv,
+ int seqsize)
+{
+ FAR const struct vt100_sequence_s *seq;
+ enum nxcon_vt100state_e ret;
+
+ /* Is there any VT100 escape sequence that matches what we have
+ * buffered so far?
+ */
+
+ seq = nxcon_vt100part(priv, seqsize);
+ if (seq)
+ {
+ /* Yes.. if the size of that escape sequence is the same as what we
+ * have buffered, then we have an exact match.
+ */
+
+ if (seq->size == seqsize)
+ {
+ /* Process the VT100 sequence */
+
+ seq->handler(priv);
+ priv->nseq = 0;
+ return VT100_PROCESSED;
+ }
+
+ /* The 'seqsize' is still smaller than the potential match(es). We
+ * will need to collect more characters before we can make a decision.
+ * Retun an indication that we have consumed the character.
+ */
+
+ return VT100_CONSUMED;
+ }
+
+ /* We get here on a failure. The buffer sequence is not part of any
+ * supported VT100 escape sequence. If seqsize > 1 then we need to
+ * return a special value because we have to re-process the buffered
+ * data.
+ */
+
+ ret = seqsize > 1 ? VT100_ABORT : VT100_NOT_CONSUMED;
+ return ret;
+}
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxcon_vt100
+ *
+ * Description:
+ * Test if the newly received byte is part of a VT100 escape sequence
+ *
+ * Input Parameters:
+ * priv - Driver data structure
+ * ch - The newly received character
+ *
+ * Returned Value:
+ * state - See enum nxcon_vt100state_e;
+ *
+ ****************************************************************************/
+
+enum nxcon_vt100state_e nxcon_vt100(FAR struct nxcon_state_s *priv, char ch)
+{
+ enum nxcon_vt100state_e ret;
+ int seqsize;
+
+ DEBUGASSERT(priv && priv->nseq < VT100_MAX_SEQUENCE);
+
+ /* If we have no buffered characters, then 'ch' must be the first character
+ * of an escape sequence.
+ */
+
+ if (priv->nseq < 1)
+ {
+ /* The first character of an escape sequence must be an an escape
+ * character (duh).
+ */
+
+ if (ch != ASCII_ESC)
+ {
+ return VT100_NOT_CONSUMED;
+ }
+
+ /* Add the escape character to the buffer but don't bother with any
+ * further checking.
+ */
+
+ priv->seq[0] = ASCII_ESC;
+ priv->nseq = 1;
+ return VT100_CONSUMED;
+ }
+
+ /* Temporarily add the next character to the buffer */
+
+ seqsize = priv->nseq;
+ priv->seq[seqsize] = ch;
+
+ /* Then check if this sequence is part of an a valid escape sequence */
+
+ seqsize++;
+ ret = nxcon_vt100seq(priv, seqsize);
+ if (ret == VT100_CONSUMED)
+ {
+ /* The newly added character is indeed part of a VT100 escape sequence
+ * (which is still incomplete). Keep it in the buffer.
+ */
+
+ priv->nseq = seqsize;
+ }
+ return ret;
+}
diff --git a/nuttx/graphics/nxconsole/nxtk_register.c b/nuttx/graphics/nxconsole/nxtk_register.c
new file mode 100644
index 000000000..0a11fc6cf
--- /dev/null
+++ b/nuttx/graphics/nxconsole/nxtk_register.c
@@ -0,0 +1,192 @@
+/****************************************************************************
+ * nuttx/graphics/nxconsole/nxtk_register.c
+ *
+ * Copyright (C) 2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <nuttx/nx/nxtk.h>
+#include <nuttx/nx/nxconsole.h>
+
+#include "nxcon_internal.h"
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Function Prototypes
+ ****************************************************************************/
+
+static int nxtkcon_fill(FAR struct nxcon_state_s *priv,
+ FAR const struct nxgl_rect_s *rect,
+ nxgl_mxpixel_t wcolor[CONFIG_NX_NPLANES]);
+#ifndef CONFIG_NX_WRITEONLY
+static int nxtkcon_move(FAR struct nxcon_state_s *priv,
+ FAR const struct nxgl_rect_s *rect,
+ FAR const struct nxgl_point_s *offset);
+#endif
+static int nxtkcon_bitmap(FAR struct nxcon_state_s *priv,
+ FAR const struct nxgl_rect_s *dest,
+ FAR const void *src[CONFIG_NX_NPLANES],
+ FAR const struct nxgl_point_s *origin,
+ unsigned int stride);
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+static const struct nxcon_operations_s g_nxtkops =
+{
+ nxtkcon_fill,
+#ifndef CONFIG_NX_WRITEONLY
+ nxtkcon_move,
+#endif
+ nxtkcon_bitmap
+};
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtkcon_fill
+ *
+ * Description:
+ * Fill the specified rectangle in the window with the specified color
+ *
+ * Input Parameters:
+ * priv - The driver state structure.
+ * rect - The location to be filled
+ * color - The color to use in the fill
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+static int nxtkcon_fill(FAR struct nxcon_state_s *priv,
+ FAR const struct nxgl_rect_s *rect,
+ nxgl_mxpixel_t wcolor[CONFIG_NX_NPLANES])
+{
+ return nxtk_fillwindow((NXTKWINDOW)priv->handle, rect, wcolor);
+}
+
+/****************************************************************************
+ * Name: nxtkcon_move
+ *
+ * Description:
+ * Move a rectangular region within the window
+ *
+ * Input Parameters:
+ * priv - The driver state structure.
+ * rect - Describes the rectangular region to move
+ * offset - The offset to move the region. The rectangular region will be
+ * moved so that the origin is translated by this amount.
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+#ifndef CONFIG_NX_WRITEONLY
+static int nxtkcon_move(FAR struct nxcon_state_s *priv,
+ FAR const struct nxgl_rect_s *rect,
+ FAR const struct nxgl_point_s *offset)
+{
+ return nxtk_movewindow((NXTKWINDOW)priv->handle, rect, offset);
+}
+#endif
+
+/****************************************************************************
+ * Name: nxtkcon_bitmap
+ *
+ * Description:
+ * Copy a rectangular region of a larger image into the rectangle in the
+ * specified window.
+ *
+ * Input Parameters:
+ * priv - The driver state structure.
+ * dest - Describes the rectangular region on the display that will
+ * receive the bit map.
+ * src - The start of the source image. This is an array source
+ * images of size CONFIG_NX_NPLANES.
+ * origin - The origin of the upper, left-most corner of the full bitmap.
+ * Both dest and origin are in window coordinates, however, origin
+ * may lie outside of the display.
+ * stride - The width of the full source image in bytes.
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+static int nxtkcon_bitmap(FAR struct nxcon_state_s *priv,
+ FAR const struct nxgl_rect_s *dest,
+ FAR const void *src[CONFIG_NX_NPLANES],
+ FAR const struct nxgl_point_s *origin,
+ unsigned int stride)
+{
+ return nxtk_bitmapwindow((NXTKWINDOW)priv->handle, dest, src, origin, stride);
+}
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_register
+ *
+ * Description:
+ * Register a console device on a framed NX window. The device will be
+ * registered at /dev/nxtkN where N is the provided minor number.
+ *
+ * Input Parameters:
+ * hfwnd - A handle that will be used to access the window. The window must
+ * persist and this handle must be valid for the life of the NX console.
+ * wndo - Describes the window and font to be used
+ * minor - The device minor number
+ *
+ * Return:
+ * A non-NULL handle is returned on success.
+ *
+ ****************************************************************************/
+
+NXCONSOLE nxtk_register(NXTKWINDOW hfwnd, FAR struct nxcon_window_s *wndo, int minor)
+{
+ return nxcon_register((NXCONSOLE)hfwnd, wndo, &g_nxtkops, minor);
+}
diff --git a/nuttx/graphics/nxconsole/nxtool_register.c b/nuttx/graphics/nxconsole/nxtool_register.c
new file mode 100644
index 000000000..b063d5a61
--- /dev/null
+++ b/nuttx/graphics/nxconsole/nxtool_register.c
@@ -0,0 +1,195 @@
+/****************************************************************************
+ * nuttx/graphics/nxconsole/nxtool_register.c
+ *
+ * Copyright (C) 2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <nuttx/nx/nxtk.h>
+#include <nuttx/nx/nxconsole.h>
+
+#include "nxcon_internal.h"
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Function Prototypes
+ ****************************************************************************/
+
+static int nxtool_fill(FAR struct nxcon_state_s *priv,
+ FAR const struct nxgl_rect_s *rect,
+ nxgl_mxpixel_t wcolor[CONFIG_NX_NPLANES]);
+#ifndef CONFIG_NX_WRITEONLY
+static int nxtool_move(FAR struct nxcon_state_s *priv,
+ FAR const struct nxgl_rect_s *rect,
+ FAR const struct nxgl_point_s *offset);
+#endif
+static int nxtool_bitmap(FAR struct nxcon_state_s *priv,
+ FAR const struct nxgl_rect_s *dest,
+ FAR const void *src[CONFIG_NX_NPLANES],
+ FAR const struct nxgl_point_s *origin,
+ unsigned int stride);
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+static const struct nxcon_operations_s g_nxtoolops =
+{
+ nxtool_fill,
+#ifndef CONFIG_NX_WRITEONLY
+ nxtool_move,
+#endif
+ nxtool_bitmap
+};
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtool_fill
+ *
+ * Description:
+ * Fill the specified rectangle in the window with the specified color
+ *
+ * Input Parameters:
+ * priv - The driver state structure.
+ * rect - The location to be filled
+ * color - The color to use in the fill
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+static int nxtool_fill(FAR struct nxcon_state_s *priv,
+ FAR const struct nxgl_rect_s *rect,
+ nxgl_mxpixel_t wcolor[CONFIG_NX_NPLANES])
+{
+ return nxtk_filltoolbar((NXTKWINDOW)priv->handle, rect, wcolor);
+}
+
+/****************************************************************************
+ * Name: nxtool_move
+ *
+ * Description:
+ * Move a rectangular region within the window
+ *
+ * Input Parameters:
+ * priv - The driver state structure.
+ * rect - Describes the rectangular region to move
+ * offset - The offset to move the region. The rectangular region will be
+ * moved so that the origin is translated by this amount.
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+#ifndef CONFIG_NX_WRITEONLY
+static int nxtool_move(FAR struct nxcon_state_s *priv,
+ FAR const struct nxgl_rect_s *rect,
+ FAR const struct nxgl_point_s *offset)
+{
+ return nxtk_movetoolbar((NXTKWINDOW)priv->handle, rect, offset);
+}
+#endif
+
+/****************************************************************************
+ * Name: nxtool_bitmap
+ *
+ * Description:
+ * Copy a rectangular region of a larger image into the rectangle in the
+ * specified window.
+ *
+ * Input Parameters:
+ * priv - The driver state structure.
+ * dest - Describes the rectangular region on the display that will
+ * receive the bit map.
+ * src - The start of the source image. This is an array source
+ * images of size CONFIG_NX_NPLANES.
+ * origin - The origin of the upper, left-most corner of the full bitmap.
+ * Both dest and origin are in window coordinates, however, origin
+ * may lie outside of the display.
+ * stride - The width of the full source image in bytes.
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+static int nxtool_bitmap(FAR struct nxcon_state_s *priv,
+ FAR const struct nxgl_rect_s *dest,
+ FAR const void *src[CONFIG_NX_NPLANES],
+ FAR const struct nxgl_point_s *origin,
+ unsigned int stride)
+{
+ return nxtk_bitmaptoolbar((NXTKWINDOW)priv->handle, dest, src, origin, stride);
+}
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtool_register
+ *
+ * Description:
+ * Register a console device on a toolbar of a framed NX window. The
+ * device will be registered at /dev/nxtoolN where N is the provided minor
+ * number.
+ *
+ * Input Parameters:
+ * hfwnd - A handle that will be used to access the toolbar. The toolbar
+ * must persist and this handle must be valid for the life of the NX
+ * console.
+ * wndo - Describes the window and font to be used
+ * minor - The device minor number
+ *
+ * Return:
+ * A non-NULL handle is returned on success.
+ *
+ ****************************************************************************/
+
+NXCONSOLE nxtool_register(NXTKWINDOW hfwnd, FAR struct nxcon_window_s *wndo, int minor)
+{
+ return nxcon_register((NXCONSOLE)hfwnd, wndo, &g_nxtoolops, minor);
+}
+
diff --git a/nuttx/graphics/nxfonts/Make.defs b/nuttx/graphics/nxfonts/Make.defs
new file mode 100644
index 000000000..95665ad36
--- /dev/null
+++ b/nuttx/graphics/nxfonts/Make.defs
@@ -0,0 +1,122 @@
+############################################################################
+# graphics/nxfonts/Make.defs
+#
+# Copyright (C) 2008 Gregory Nutt. All rights reserved.
+# Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in
+# the documentation and/or other materials provided with the
+# distribution.
+# 3. Neither the name NuttX nor the names of its contributors may be
+# used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+############################################################################
+
+NXFCONV_ASRCS =
+NXFCONV_CSRCS = nxfonts_convert_1bpp.c nxfonts_convert_2bpp.c \
+ nxfonts_convert_4bpp.c nxfonts_convert_8bpp.c \
+ nxfonts_convert_16bpp.c nxfonts_convert_24bpp.c \
+ nxfonts_convert_32bpp.c
+
+NXFSET_ASRCS =
+NXFSET_CSRCS =
+
+# Sans serif fonts
+
+ifeq ($(CONFIG_NXFONT_SANS17X22),y)
+NXFSET_CSRCS += nxfonts_bitmaps_sans17x22.c
+endif
+
+ifeq ($(CONFIG_NXFONT_SANS20X26),y)
+NXFSET_CSRCS += nxfonts_bitmaps_sans20x26.c
+endif
+
+ifeq ($(CONFIG_NXFONT_SANS23X27),y)
+NXFSET_CSRCS += nxfonts_bitmaps_sans23x27.c
+endif
+
+ifeq ($(CONFIG_NXFONT_SANS22X29),y)
+NXFSET_CSRCS += nxfonts_bitmaps_sans22x29.c
+endif
+
+ifeq ($(CONFIG_NXFONT_SANS28X37),y)
+NXFSET_CSRCS += nxfonts_bitmaps_sans28x37.c
+endif
+
+ifeq ($(CONFIG_NXFONT_SANS39X48),y)
+NXFSET_CSRCS += nxfonts_bitmaps_sans39x48.c
+endif
+
+# Sans serif bold fonts
+
+ifeq ($(CONFIG_NXFONT_SANS17X23B),y)
+NXFSET_CSRCS += nxfonts_bitmaps_sans17x23b.c
+endif
+
+ifeq ($(CONFIG_NXFONT_SANS20X27B),y)
+NXFSET_CSRCS += nxfonts_bitmaps_sans20x27b.c
+endif
+
+ifeq ($(CONFIG_NXFONT_SANS22X29B),y)
+NXFSET_CSRCS += nxfonts_bitmaps_sans22x29b.c
+endif
+
+ifeq ($(CONFIG_NXFONT_SANS28X37B),y)
+NXFSET_CSRCS += nxfonts_bitmaps_sans28x37b.c
+endif
+
+ifeq ($(CONFIG_NXFONT_SANS40X49B),y)
+NXFSET_CSRCS += nxfonts_bitmaps_sans40x49b.c
+endif
+
+# Serif fonts
+
+ifeq ($(CONFIG_NXFONT_SERIF22X29),y)
+NXFSET_CSRCS += nxfonts_bitmaps_serif22x29.c
+endif
+
+ifeq ($(CONFIG_NXFONT_SERIF29X37),y)
+NXFSET_CSRCS += nxfonts_bitmaps_serif29x37.c
+endif
+
+ifeq ($(CONFIG_NXFONT_SERIF38X48),y)
+NXFSET_CSRCS += nxfonts_bitmaps_serif38x48.c
+endif
+
+# Serif bold fonts
+
+ifeq ($(CONFIG_NXFONT_SERIF22X28B),y)
+NXFSET_CSRCS += nxfonts_bitmaps_serif22x28b.c
+endif
+
+ifeq ($(CONFIG_NXFONT_SERIF27X38B),y)
+NXFSET_CSRCS += nxfonts_bitmaps_serif27x38b.c
+endif
+
+ifeq ($(CONFIG_NXFONT_SERIF38X49B),y)
+NXFSET_CSRCS += nxfonts_bitmaps_serif38x49b.c
+endif
+
+NXFONTS_ASRCS = $(NXFCONV_ASRCS) $(NXFSET_ASRCS)
+NXFONTS_CSRCS = nxfonts_getfont.c $(NXFCONV_CSRCS) $(NXFSET_CSRCS)
diff --git a/nuttx/graphics/nxfonts/Makefile.sources b/nuttx/graphics/nxfonts/Makefile.sources
new file mode 100644
index 000000000..286742579
--- /dev/null
+++ b/nuttx/graphics/nxfonts/Makefile.sources
@@ -0,0 +1,189 @@
+############################################################################
+# graphics/nxfonts/Makefile.sources
+#
+# Copyright (C) 2008 Gregory Nutt. All rights reserved.
+# Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in
+# the documentation and/or other materials provided with the
+# distribution.
+# 3. Neither the name NuttX nor the names of its contributors may be
+# used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+############################################################################
+
+-include $(TOPDIR)/.config
+-include $(TOPDIR)/Make.defs
+
+ifdef NXFONTS_BITSPERPIXEL
+ifeq ($(NXFONTS_BITSPERPIXEL),1)
+NXFONTS_SUFFIX := _1bpp
+GEN_CSRC := nxfonts_convert_1bpp.c
+endif
+ifeq ($(NXFONTS_BITSPERPIXEL),2)
+NXFONTS_SUFFIX := _2bpp
+GEN_CSRC := nxfonts_convert_2bpp.c
+endif
+ifeq ($(NXFONTS_BITSPERPIXEL),4)
+NXFONTS_SUFFIX := _4bpp
+GEN_CSRC := nxfonts_convert_4bpp.c
+endif
+ifeq ($(NXFONTS_BITSPERPIXEL),8)
+NXFONTS_SUFFIX := _8bpp
+GEN_CSRC := nxfonts_convert_8bpp.c
+endif
+ifeq ($(NXFONTS_BITSPERPIXEL),16)
+NXFONTS_SUFFIX := _16bpp
+GEN_CSRC := nxfonts_convert_16bpp.c
+endif
+ifeq ($(NXFONTS_BITSPERPIXEL),24)
+NXFONTS_SUFFIX := _24bpp
+GEN_CSRC := nxfonts_convert_24bpp.c
+endif
+ifeq ($(NXFONTS_BITSPERPIXEL),32)
+NXFONTS_SUFFIX := _32bpp
+GEN_CSRC := nxfonts_convert_32bpp.c
+endif
+
+DEPENDENCY := nxfonts_convert.c
+CPPFLAGS += -DNXFONTS_BITSPERPIXEL=$(NXFONTS_BITSPERPIXEL)
+CPPFLAGS += -DNXFONTS_SUFFIX=$(NXFONTS_SUFFIX)
+endif
+
+ifdef NXFONTS_FONTID
+
+# SANS
+
+ifeq ($(NXFONTS_FONTID),14)
+NXFONTS_PREFIX := g_sans17x22_
+GEN_CSRC = nxfonts_bitmaps_sans17x22.c
+endif
+
+ifeq ($(NXFONTS_FONTID),15)
+NXFONTS_PREFIX := g_sans20x26_
+GEN_CSRC = nxfonts_bitmaps_sans20x26.c
+endif
+
+ifeq ($(NXFONTS_FONTID),1)
+NXFONTS_PREFIX := g_sans23x27_
+GEN_CSRC = nxfonts_bitmaps_sans23x27.c
+endif
+
+ifeq ($(NXFONTS_FONTID),2)
+NXFONTS_PREFIX := g_sans22x29_
+GEN_CSRC = nxfonts_bitmaps_sans22x29.c
+endif
+
+ifeq ($(NXFONTS_FONTID),3)
+NXFONTS_PREFIX := g_sans28x37_
+GEN_CSRC = nxfonts_bitmaps_sans28x37.c
+endif
+
+ifeq ($(NXFONTS_FONTID),4)
+NXFONTS_PREFIX := g_sans39x48_
+GEN_CSRC = nxfonts_bitmaps_sans39x48.c
+endif
+
+# SANS-BOLD
+
+ifeq ($(NXFONTS_FONTID),16)
+NXFONTS_PREFIX := g_sans17x23b_
+GEN_CSRC = nxfonts_bitmaps_sans17x23b.c
+endif
+
+ifeq ($(NXFONTS_FONTID),17)
+NXFONTS_PREFIX := g_sans20x27b_
+GEN_CSRC = nxfonts_bitmaps_sans20x27b.c
+endif
+
+ifeq ($(NXFONTS_FONTID),5)
+NXFONTS_PREFIX := g_sans22x29b_
+GEN_CSRC = nxfonts_bitmaps_sans22x29b.c
+endif
+
+ifeq ($(NXFONTS_FONTID),6)
+NXFONTS_PREFIX := g_sans28x37b_
+GEN_CSRC = nxfonts_bitmaps_sans28x37b.c
+endif
+
+ifeq ($(NXFONTS_FONTID),7)
+NXFONTS_PREFIX := g_sans40x49b_
+GEN_CSRC = nxfonts_bitmaps_sans40x49b.c
+endif
+
+# SERIF
+
+ifeq ($(NXFONTS_FONTID),8)
+NXFONTS_PREFIX := g_serif22x29_
+GEN_CSRC = nxfonts_bitmaps_serif22x29.c
+endif
+
+ifeq ($(NXFONTS_FONTID),9)
+NXFONTS_PREFIX := g_serif29x37_
+GEN_CSRC = nxfonts_bitmaps_serif29x37.c
+endif
+
+ifeq ($(NXFONTS_FONTID),10)
+NXFONTS_PREFIX := g_serif38x48_
+GEN_CSRC = nxfonts_bitmaps_serif38x48.c
+endif
+
+# SERIF-BOLD
+
+ifeq ($(NXFONTS_FONTID),11)
+NXFONTS_PREFIX := g_serif22x28b_
+GEN_CSRC = nxfonts_bitmaps_serif22x28b.c
+endif
+
+ifeq ($(NXFONTS_FONTID),12)
+NXFONTS_PREFIX := g_serif27x38b_
+GEN_CSRC = nxfonts_bitmaps_serif27x38b.c
+endif
+
+ifeq ($(NXFONTS_FONTID),13)
+NXFONTS_PREFIX := g_serif38x49b_
+GEN_CSRC = nxfonts_bitmaps_serif38x49b.c
+endif
+
+DEPENDENCY := nxfonts_bitmaps.c
+CPPFLAGS += -DNXFONTS_FONTID=$(NXFONTS_FONTID)
+CPPFLAGS += -DNXFONTS_PREFIX=$(NXFONTS_PREFIX)
+endif
+
+GEN_TMP = $(GEN_CSRC:.c=.i)
+
+all: $(GEN_CSRC)
+.PHONY : clean distclean
+
+$(GEN_CSRC) : $(DEPENDENCY)
+ @$(call PREPROCESS, $<, $(GEN_TMP))
+ @cat $(GEN_TMP) | sed -e "/^#/d" >$@
+ @rm -f $(GEN_TMP)
+
+clean:
+ @rm -f *~ .*.swp *.i
+
+distclean: clean
+ @rm -f nxfonts_convert_*bpp.c
+ @rm -f nxfonts_bitmaps_*.c
diff --git a/nuttx/graphics/nxfonts/nxfonts_bitmaps.c b/nuttx/graphics/nxfonts/nxfonts_bitmaps.c
new file mode 100644
index 000000000..9b255b97a
--- /dev/null
+++ b/nuttx/graphics/nxfonts/nxfonts_bitmaps.c
@@ -0,0 +1,1689 @@
+/****************************************************************************
+ * graphics/nxfonts/nxfonts_bitmaps.c
+ *
+ * Copyright (C) 2008-2009, 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT}
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING}
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdint.h>
+#include <nuttx/nx/nxfonts.h>
+
+#include "nxfonts_internal.h"
+
+/* Pick the fontset */
+
+#if NXFONTS_FONTID == 1
+# include "nxfonts_sans23x27.h"
+#elif NXFONTS_FONTID == 2
+# include "nxfonts_sans22x29.h"
+#elif NXFONTS_FONTID == 3
+# include "nxfonts_sans28x37.h"
+#elif NXFONTS_FONTID == 4
+# include "nxfonts_sans39x48.h"
+#elif NXFONTS_FONTID == 5
+# include "nxfonts_sans22x29b.h"
+#elif NXFONTS_FONTID == 6
+# include "nxfonts_sans28x37b.h"
+#elif NXFONTS_FONTID == 7
+# include "nxfonts_sans40x49b.h"
+#elif NXFONTS_FONTID == 8
+# include "nxfonts_serif22x29.h"
+#elif NXFONTS_FONTID == 9
+# include "nxfonts_serif29x37.h"
+#elif NXFONTS_FONTID == 10
+# include "nxfonts_serif38x48.h"
+#elif NXFONTS_FONTID == 11
+# include "nxfonts_serif22x28b.h"
+#elif NXFONTS_FONTID == 12
+# include "nxfonts_serif27x38b.h"
+#elif NXFONTS_FONTID == 13
+# include "nxfonts_serif38x49b.h"
+#elif NXFONTS_FONTID == 14
+# include "nxfonts_sans17x22.h"
+#elif NXFONTS_FONTID == 15
+# include "nxfonts_sans20x26.h"
+#elif NXFONTS_FONTID == 16
+# include "nxfonts_sans17x23b.h"
+#elif NXFONTS_FONTID == 17
+# include "nxfonts_sans20x27b.h"
+#else
+# error "No font ID specified"
+#endif
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+#define NXFONT_N7BITFONTS (NXFONT_MAX7BIT - NXFONT_MIN7BIT + 1)
+#define NXFONT_N8BITFONTS (NXFONT_MAX8BIT - NXFONT_MIN8BIT + 1)
+
+#define NXFONT_CONCAT(a,b) a##b
+#define NXFONT_DEFBITMAP(n) \
+static const uint8_t NXFONT_CONCAT(g_bitmap_,n)[] = NXFONT_CONCAT(NXFONT_BITMAP_,n)
+#define NXFONT_DEFMETRIC(n) \
+ { NXFONT_CONCAT(NXFONT_METRICS_,n), NXFONT_CONCAT(g_bitmap_,n) }
+#define NXF_SYMNAME(a,b) NXFONT_CONCAT(a,b)
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+#if NXFONT_MIN7BIT <= 0 && NXFONT_MAX7BIT >= 0
+NXFONT_DEFBITMAP(0);
+#endif
+#if NXFONT_MIN7BIT <= 1 && NXFONT_MAX7BIT >= 1
+NXFONT_DEFBITMAP(1);
+#endif
+#if NXFONT_MIN7BIT <= 2 && NXFONT_MAX7BIT >= 2
+NXFONT_DEFBITMAP(2);
+#endif
+#if NXFONT_MIN7BIT <= 3 && NXFONT_MAX7BIT >= 3
+NXFONT_DEFBITMAP(3);
+#endif
+#if NXFONT_MIN7BIT <= 4 && NXFONT_MAX7BIT >= 4
+NXFONT_DEFBITMAP(4);
+#endif
+#if NXFONT_MIN7BIT <= 5 && NXFONT_MAX7BIT >= 5
+NXFONT_DEFBITMAP(5);
+#endif
+#if NXFONT_MIN7BIT <= 6 && NXFONT_MAX7BIT >= 6
+NXFONT_DEFBITMAP(6);
+#endif
+#if NXFONT_MIN7BIT <= 7 && NXFONT_MAX7BIT >= 7
+NXFONT_DEFBITMAP(7);
+#endif
+#if NXFONT_MIN7BIT <= 8 && NXFONT_MAX7BIT >= 8
+NXFONT_DEFBITMAP(8);
+#endif
+#if NXFONT_MIN7BIT <= 9 && NXFONT_MAX7BIT >= 9
+NXFONT_DEFBITMAP(9);
+#endif
+#if NXFONT_MIN7BIT <= 10 && NXFONT_MAX7BIT >= 10
+NXFONT_DEFBITMAP(10);
+#endif
+#if NXFONT_MIN7BIT <= 11 && NXFONT_MAX7BIT >= 11
+NXFONT_DEFBITMAP(11);
+#endif
+#if NXFONT_MIN7BIT <= 12 && NXFONT_MAX7BIT >= 12
+NXFONT_DEFBITMAP(12);
+#endif
+#if NXFONT_MIN7BIT <= 13 && NXFONT_MAX7BIT >= 13
+NXFONT_DEFBITMAP(13);
+#endif
+#if NXFONT_MIN7BIT <= 14 && NXFONT_MAX7BIT >= 14
+NXFONT_DEFBITMAP(14);
+#endif
+#if NXFONT_MIN7BIT <= 15 && NXFONT_MAX7BIT >= 15
+NXFONT_DEFBITMAP(15);
+#endif
+#if NXFONT_MIN7BIT <= 16 && NXFONT_MAX7BIT >= 16
+NXFONT_DEFBITMAP(16);
+#endif
+#if NXFONT_MIN7BIT <= 17 && NXFONT_MAX7BIT >= 17
+NXFONT_DEFBITMAP(17);
+#endif
+#if NXFONT_MIN7BIT <= 18 && NXFONT_MAX7BIT >= 18
+NXFONT_DEFBITMAP(18);
+#endif
+#if NXFONT_MIN7BIT <= 19 && NXFONT_MAX7BIT >= 19
+NXFONT_DEFBITMAP(19);
+#endif
+#if NXFONT_MIN7BIT <= 20 && NXFONT_MAX7BIT >= 20
+NXFONT_DEFBITMAP(20);
+#endif
+#if NXFONT_MIN7BIT <= 21 && NXFONT_MAX7BIT >= 21
+NXFONT_DEFBITMAP(21);
+#endif
+#if NXFONT_MIN7BIT <= 22 && NXFONT_MAX7BIT >= 22
+NXFONT_DEFBITMAP(22);
+#endif
+#if NXFONT_MIN7BIT <= 23 && NXFONT_MAX7BIT >= 23
+NXFONT_DEFBITMAP(23);
+#endif
+#if NXFONT_MIN7BIT <= 24 && NXFONT_MAX7BIT >= 24
+NXFONT_DEFBITMAP(24);
+#endif
+#if NXFONT_MIN7BIT <= 25 && NXFONT_MAX7BIT >= 25
+NXFONT_DEFBITMAP(25);
+#endif
+#if NXFONT_MIN7BIT <= 26 && NXFONT_MAX7BIT >= 26
+NXFONT_DEFBITMAP(26);
+#endif
+#if NXFONT_MIN7BIT <= 27 && NXFONT_MAX7BIT >= 27
+NXFONT_DEFBITMAP(27);
+#endif
+#if NXFONT_MIN7BIT <= 28 && NXFONT_MAX7BIT >= 28
+NXFONT_DEFBITMAP(28);
+#endif
+#if NXFONT_MIN7BIT <= 29 && NXFONT_MAX7BIT >= 29
+NXFONT_DEFBITMAP(29);
+#endif
+#if NXFONT_MIN7BIT <= 30 && NXFONT_MAX7BIT >= 30
+NXFONT_DEFBITMAP(30);
+#endif
+#if NXFONT_MIN7BIT <= 31 && NXFONT_MAX7BIT >= 31
+NXFONT_DEFBITMAP(31);
+#endif
+#if NXFONT_MIN7BIT <= 32 && NXFONT_MAX7BIT >= 32
+NXFONT_DEFBITMAP(32);
+#endif
+#if NXFONT_MIN7BIT <= 33 && NXFONT_MAX7BIT >= 33
+NXFONT_DEFBITMAP(33);
+#endif
+#if NXFONT_MIN7BIT <= 34 && NXFONT_MAX7BIT >= 34
+NXFONT_DEFBITMAP(34);
+#endif
+#if NXFONT_MIN7BIT <= 35 && NXFONT_MAX7BIT >= 35
+NXFONT_DEFBITMAP(35);
+#endif
+#if NXFONT_MIN7BIT <= 36 && NXFONT_MAX7BIT >= 36
+NXFONT_DEFBITMAP(36);
+#endif
+#if NXFONT_MIN7BIT <= 37 && NXFONT_MAX7BIT >= 37
+NXFONT_DEFBITMAP(37);
+#endif
+#if NXFONT_MIN7BIT <= 38 && NXFONT_MAX7BIT >= 38
+NXFONT_DEFBITMAP(38);
+#endif
+#if NXFONT_MIN7BIT <= 39 && NXFONT_MAX7BIT >= 39
+NXFONT_DEFBITMAP(39);
+#endif
+#if NXFONT_MIN7BIT <= 40 && NXFONT_MAX7BIT >= 40
+NXFONT_DEFBITMAP(40);
+#endif
+#if NXFONT_MIN7BIT <= 41 && NXFONT_MAX7BIT >= 41
+NXFONT_DEFBITMAP(41);
+#endif
+#if NXFONT_MIN7BIT <= 42 && NXFONT_MAX7BIT >= 42
+NXFONT_DEFBITMAP(42);
+#endif
+#if NXFONT_MIN7BIT <= 43 && NXFONT_MAX7BIT >= 43
+NXFONT_DEFBITMAP(43);
+#endif
+#if NXFONT_MIN7BIT <= 44 && NXFONT_MAX7BIT >= 44
+NXFONT_DEFBITMAP(44);
+#endif
+#if NXFONT_MIN7BIT <= 45 && NXFONT_MAX7BIT >= 45
+NXFONT_DEFBITMAP(45);
+#endif
+#if NXFONT_MIN7BIT <= 46 && NXFONT_MAX7BIT >= 46
+NXFONT_DEFBITMAP(46);
+#endif
+#if NXFONT_MIN7BIT <= 47 && NXFONT_MAX7BIT >= 47
+NXFONT_DEFBITMAP(47);
+#endif
+#if NXFONT_MIN7BIT <= 48 && NXFONT_MAX7BIT >= 48
+NXFONT_DEFBITMAP(48);
+#endif
+#if NXFONT_MIN7BIT <= 49 && NXFONT_MAX7BIT >= 49
+NXFONT_DEFBITMAP(49);
+#endif
+#if NXFONT_MIN7BIT <= 50 && NXFONT_MAX7BIT >= 50
+NXFONT_DEFBITMAP(50);
+#endif
+#if NXFONT_MIN7BIT <= 51 && NXFONT_MAX7BIT >= 51
+NXFONT_DEFBITMAP(51);
+#endif
+#if NXFONT_MIN7BIT <= 52 && NXFONT_MAX7BIT >= 52
+NXFONT_DEFBITMAP(52);
+#endif
+#if NXFONT_MIN7BIT <= 53 && NXFONT_MAX7BIT >= 53
+NXFONT_DEFBITMAP(53);
+#endif
+#if NXFONT_MIN7BIT <= 54 && NXFONT_MAX7BIT >= 54
+NXFONT_DEFBITMAP(54);
+#endif
+#if NXFONT_MIN7BIT <= 55 && NXFONT_MAX7BIT >= 55
+NXFONT_DEFBITMAP(55);
+#endif
+#if NXFONT_MIN7BIT <= 56 && NXFONT_MAX7BIT >= 56
+NXFONT_DEFBITMAP(56);
+#endif
+#if NXFONT_MIN7BIT <= 57 && NXFONT_MAX7BIT >= 57
+NXFONT_DEFBITMAP(57);
+#endif
+#if NXFONT_MIN7BIT <= 58 && NXFONT_MAX7BIT >= 58
+NXFONT_DEFBITMAP(58);
+#endif
+#if NXFONT_MIN7BIT <= 59 && NXFONT_MAX7BIT >= 59
+NXFONT_DEFBITMAP(59);
+#endif
+#if NXFONT_MIN7BIT <= 60 && NXFONT_MAX7BIT >= 60
+NXFONT_DEFBITMAP(60);
+#endif
+#if NXFONT_MIN7BIT <= 61 && NXFONT_MAX7BIT >= 61
+NXFONT_DEFBITMAP(61);
+#endif
+#if NXFONT_MIN7BIT <= 62 && NXFONT_MAX7BIT >= 62
+NXFONT_DEFBITMAP(62);
+#endif
+#if NXFONT_MIN7BIT <= 63 && NXFONT_MAX7BIT >= 63
+NXFONT_DEFBITMAP(63);
+#endif
+#if NXFONT_MIN7BIT <= 64 && NXFONT_MAX7BIT >= 64
+NXFONT_DEFBITMAP(64);
+#endif
+#if NXFONT_MIN7BIT <= 65 && NXFONT_MAX7BIT >= 65
+NXFONT_DEFBITMAP(65);
+#endif
+#if NXFONT_MIN7BIT <= 66 && NXFONT_MAX7BIT >= 66
+NXFONT_DEFBITMAP(66);
+#endif
+#if NXFONT_MIN7BIT <= 67 && NXFONT_MAX7BIT >= 67
+NXFONT_DEFBITMAP(67);
+#endif
+#if NXFONT_MIN7BIT <= 68 && NXFONT_MAX7BIT >= 68
+NXFONT_DEFBITMAP(68);
+#endif
+#if NXFONT_MIN7BIT <= 69 && NXFONT_MAX7BIT >= 69
+NXFONT_DEFBITMAP(69);
+#endif
+#if NXFONT_MIN7BIT <= 70 && NXFONT_MAX7BIT >= 70
+NXFONT_DEFBITMAP(70);
+#endif
+#if NXFONT_MIN7BIT <= 71 && NXFONT_MAX7BIT >= 71
+NXFONT_DEFBITMAP(71);
+#endif
+#if NXFONT_MIN7BIT <= 72 && NXFONT_MAX7BIT >= 72
+NXFONT_DEFBITMAP(72);
+#endif
+#if NXFONT_MIN7BIT <= 73 && NXFONT_MAX7BIT >= 73
+NXFONT_DEFBITMAP(73);
+#endif
+#if NXFONT_MIN7BIT <= 74 && NXFONT_MAX7BIT >= 74
+NXFONT_DEFBITMAP(74);
+#endif
+#if NXFONT_MIN7BIT <= 75 && NXFONT_MAX7BIT >= 75
+NXFONT_DEFBITMAP(75);
+#endif
+#if NXFONT_MIN7BIT <= 76 && NXFONT_MAX7BIT >= 76
+NXFONT_DEFBITMAP(76);
+#endif
+#if NXFONT_MIN7BIT <= 77 && NXFONT_MAX7BIT >= 77
+NXFONT_DEFBITMAP(77);
+#endif
+#if NXFONT_MIN7BIT <= 78 && NXFONT_MAX7BIT >= 78
+NXFONT_DEFBITMAP(78);
+#endif
+#if NXFONT_MIN7BIT <= 79 && NXFONT_MAX7BIT >= 79
+NXFONT_DEFBITMAP(79);
+#endif
+#if NXFONT_MIN7BIT <= 80 && NXFONT_MAX7BIT >= 80
+NXFONT_DEFBITMAP(80);
+#endif
+#if NXFONT_MIN7BIT <= 81 && NXFONT_MAX7BIT >= 81
+NXFONT_DEFBITMAP(81);
+#endif
+#if NXFONT_MIN7BIT <= 82 && NXFONT_MAX7BIT >= 82
+NXFONT_DEFBITMAP(82);
+#endif
+#if NXFONT_MIN7BIT <= 83 && NXFONT_MAX7BIT >= 83
+NXFONT_DEFBITMAP(83);
+#endif
+#if NXFONT_MIN7BIT <= 84 && NXFONT_MAX7BIT >= 84
+NXFONT_DEFBITMAP(84);
+#endif
+#if NXFONT_MIN7BIT <= 85 && NXFONT_MAX7BIT >= 85
+NXFONT_DEFBITMAP(85);
+#endif
+#if NXFONT_MIN7BIT <= 86 && NXFONT_MAX7BIT >= 86
+NXFONT_DEFBITMAP(86);
+#endif
+#if NXFONT_MIN7BIT <= 87 && NXFONT_MAX7BIT >= 87
+NXFONT_DEFBITMAP(87);
+#endif
+#if NXFONT_MIN7BIT <= 88 && NXFONT_MAX7BIT >= 88
+NXFONT_DEFBITMAP(88);
+#endif
+#if NXFONT_MIN7BIT <= 89 && NXFONT_MAX7BIT >= 89
+NXFONT_DEFBITMAP(89);
+#endif
+#if NXFONT_MIN7BIT <= 90 && NXFONT_MAX7BIT >= 90
+NXFONT_DEFBITMAP(90);
+#endif
+#if NXFONT_MIN7BIT <= 91 && NXFONT_MAX7BIT >= 91
+NXFONT_DEFBITMAP(91);
+#endif
+#if NXFONT_MIN7BIT <= 92 && NXFONT_MAX7BIT >= 92
+NXFONT_DEFBITMAP(92);
+#endif
+#if NXFONT_MIN7BIT <= 93 && NXFONT_MAX7BIT >= 93
+NXFONT_DEFBITMAP(93);
+#endif
+#if NXFONT_MIN7BIT <= 94 && NXFONT_MAX7BIT >= 94
+NXFONT_DEFBITMAP(94);
+#endif
+#if NXFONT_MIN7BIT <= 95 && NXFONT_MAX7BIT >= 95
+NXFONT_DEFBITMAP(95);
+#endif
+#if NXFONT_MIN7BIT <= 96 && NXFONT_MAX7BIT >= 96
+NXFONT_DEFBITMAP(96);
+#endif
+#if NXFONT_MIN7BIT <= 97 && NXFONT_MAX7BIT >= 97
+NXFONT_DEFBITMAP(97);
+#endif
+#if NXFONT_MIN7BIT <= 98 && NXFONT_MAX7BIT >= 98
+NXFONT_DEFBITMAP(98);
+#endif
+#if NXFONT_MIN7BIT <= 99 && NXFONT_MAX7BIT >= 99
+NXFONT_DEFBITMAP(99);
+#endif
+#if NXFONT_MIN7BIT <= 100 && NXFONT_MAX7BIT >= 100
+NXFONT_DEFBITMAP(100);
+#endif
+#if NXFONT_MIN7BIT <= 101 && NXFONT_MAX7BIT >= 101
+NXFONT_DEFBITMAP(101);
+#endif
+#if NXFONT_MIN7BIT <= 102 && NXFONT_MAX7BIT >= 102
+NXFONT_DEFBITMAP(102);
+#endif
+#if NXFONT_MIN7BIT <= 103 && NXFONT_MAX7BIT >= 103
+NXFONT_DEFBITMAP(103);
+#endif
+#if NXFONT_MIN7BIT <= 104 && NXFONT_MAX7BIT >= 104
+NXFONT_DEFBITMAP(104);
+#endif
+#if NXFONT_MIN7BIT <= 105 && NXFONT_MAX7BIT >= 105
+NXFONT_DEFBITMAP(105);
+#endif
+#if NXFONT_MIN7BIT <= 106 && NXFONT_MAX7BIT >= 106
+NXFONT_DEFBITMAP(106);
+#endif
+#if NXFONT_MIN7BIT <= 107 && NXFONT_MAX7BIT >= 107
+NXFONT_DEFBITMAP(107);
+#endif
+#if NXFONT_MIN7BIT <= 108 && NXFONT_MAX7BIT >= 108
+NXFONT_DEFBITMAP(108);
+#endif
+#if NXFONT_MIN7BIT <= 109 && NXFONT_MAX7BIT >= 109
+NXFONT_DEFBITMAP(109);
+#endif
+#if NXFONT_MIN7BIT <= 110 && NXFONT_MAX7BIT >= 110
+NXFONT_DEFBITMAP(110);
+#endif
+#if NXFONT_MIN7BIT <= 111 && NXFONT_MAX7BIT >= 111
+NXFONT_DEFBITMAP(111);
+#endif
+#if NXFONT_MIN7BIT <= 112 && NXFONT_MAX7BIT >= 112
+NXFONT_DEFBITMAP(112);
+#endif
+#if NXFONT_MIN7BIT <= 113 && NXFONT_MAX7BIT >= 113
+NXFONT_DEFBITMAP(113);
+#endif
+#if NXFONT_MIN7BIT <= 114 && NXFONT_MAX7BIT >= 114
+NXFONT_DEFBITMAP(114);
+#endif
+#if NXFONT_MIN7BIT <= 115 && NXFONT_MAX7BIT >= 115
+NXFONT_DEFBITMAP(115);
+#endif
+#if NXFONT_MIN7BIT <= 116 && NXFONT_MAX7BIT >= 116
+NXFONT_DEFBITMAP(116);
+#endif
+#if NXFONT_MIN7BIT <= 117 && NXFONT_MAX7BIT >= 117
+NXFONT_DEFBITMAP(117);
+#endif
+#if NXFONT_MIN7BIT <= 118 && NXFONT_MAX7BIT >= 118
+NXFONT_DEFBITMAP(118);
+#endif
+#if NXFONT_MIN7BIT <= 119 && NXFONT_MAX7BIT >= 119
+NXFONT_DEFBITMAP(119);
+#endif
+#if NXFONT_MIN7BIT <= 120 && NXFONT_MAX7BIT >= 120
+NXFONT_DEFBITMAP(120);
+#endif
+#if NXFONT_MIN7BIT <= 121 && NXFONT_MAX7BIT >= 121
+NXFONT_DEFBITMAP(121);
+#endif
+#if NXFONT_MIN7BIT <= 122 && NXFONT_MAX7BIT >= 122
+NXFONT_DEFBITMAP(122);
+#endif
+#if NXFONT_MIN7BIT <= 123 && NXFONT_MAX7BIT >= 123
+NXFONT_DEFBITMAP(123);
+#endif
+#if NXFONT_MIN7BIT <= 124 && NXFONT_MAX7BIT >= 124
+NXFONT_DEFBITMAP(124);
+#endif
+#if NXFONT_MIN7BIT <= 125 && NXFONT_MAX7BIT >= 125
+NXFONT_DEFBITMAP(125);
+#endif
+#if NXFONT_MIN7BIT <= 126 && NXFONT_MAX7BIT >= 126
+NXFONT_DEFBITMAP(126);
+#endif
+#if NXFONT_MIN7BIT <= 127 && NXFONT_MAX7BIT >= 127
+NXFONT_DEFBITMAP(127);
+#endif
+
+#if CONFIG_NXFONTS_CHARBITS >= 8
+#if NXFONT_MIN8BIT <= 128 && NXFONT_MAX8BIT >= 128
+NXFONT_DEFBITMAP(128);
+#endif
+#if NXFONT_MIN8BIT <= 129 && NXFONT_MAX8BIT >= 129
+NXFONT_DEFBITMAP(129);
+#endif
+#if NXFONT_MIN8BIT <= 130 && NXFONT_MAX8BIT >= 130
+NXFONT_DEFBITMAP(130);
+#endif
+#if NXFONT_MIN8BIT <= 131 && NXFONT_MAX8BIT >= 131
+NXFONT_DEFBITMAP(131);
+#endif
+#if NXFONT_MIN8BIT <= 132 && NXFONT_MAX8BIT >= 132
+NXFONT_DEFBITMAP(132);
+#endif
+#if NXFONT_MIN8BIT <= 133 && NXFONT_MAX8BIT >= 133
+NXFONT_DEFBITMAP(133);
+#endif
+#if NXFONT_MIN8BIT <= 134 && NXFONT_MAX8BIT >= 134
+NXFONT_DEFBITMAP(134);
+#endif
+#if NXFONT_MIN8BIT <= 135 && NXFONT_MAX8BIT >= 135
+NXFONT_DEFBITMAP(135);
+#endif
+#if NXFONT_MIN8BIT <= 136 && NXFONT_MAX8BIT >= 136
+NXFONT_DEFBITMAP(136);
+#endif
+#if NXFONT_MIN8BIT <= 137 && NXFONT_MAX8BIT >= 137
+NXFONT_DEFBITMAP(137);
+#endif
+#if NXFONT_MIN8BIT <= 138 && NXFONT_MAX8BIT >= 138
+NXFONT_DEFBITMAP(138);
+#endif
+#if NXFONT_MIN8BIT <= 139 && NXFONT_MAX8BIT >= 139
+NXFONT_DEFBITMAP(139);
+#endif
+#if NXFONT_MIN8BIT <= 140 && NXFONT_MAX8BIT >= 140
+NXFONT_DEFBITMAP(140);
+#endif
+#if NXFONT_MIN8BIT <= 141 && NXFONT_MAX8BIT >= 141
+NXFONT_DEFBITMAP(141);
+#endif
+#if NXFONT_MIN8BIT <= 142 && NXFONT_MAX8BIT >= 142
+NXFONT_DEFBITMAP(142);
+#endif
+#if NXFONT_MIN8BIT <= 143 && NXFONT_MAX8BIT >= 143
+NXFONT_DEFBITMAP(143);
+#endif
+#if NXFONT_MIN8BIT <= 144 && NXFONT_MAX8BIT >= 144
+NXFONT_DEFBITMAP(144);
+#endif
+#if NXFONT_MIN8BIT <= 145 && NXFONT_MAX8BIT >= 145
+NXFONT_DEFBITMAP(145);
+#endif
+#if NXFONT_MIN8BIT <= 146 && NXFONT_MAX8BIT >= 146
+NXFONT_DEFBITMAP(146);
+#endif
+#if NXFONT_MIN8BIT <= 147 && NXFONT_MAX8BIT >= 147
+NXFONT_DEFBITMAP(147);
+#endif
+#if NXFONT_MIN8BIT <= 148 && NXFONT_MAX8BIT >= 148
+NXFONT_DEFBITMAP(148);
+#endif
+#if NXFONT_MIN8BIT <= 149 && NXFONT_MAX8BIT >= 149
+NXFONT_DEFBITMAP(149);
+#endif
+#if NXFONT_MIN8BIT <= 150 && NXFONT_MAX8BIT >= 150
+NXFONT_DEFBITMAP(150);
+#endif
+#if NXFONT_MIN8BIT <= 151 && NXFONT_MAX8BIT >= 151
+NXFONT_DEFBITMAP(151);
+#endif
+#if NXFONT_MIN8BIT <= 152 && NXFONT_MAX8BIT >= 152
+NXFONT_DEFBITMAP(152);
+#endif
+#if NXFONT_MIN8BIT <= 153 && NXFONT_MAX8BIT >= 153
+NXFONT_DEFBITMAP(153);
+#endif
+#if NXFONT_MIN8BIT <= 154 && NXFONT_MAX8BIT >= 154
+NXFONT_DEFBITMAP(154);
+#endif
+#if NXFONT_MIN8BIT <= 155 && NXFONT_MAX8BIT >= 155
+NXFONT_DEFBITMAP(155);
+#endif
+#if NXFONT_MIN8BIT <= 156 && NXFONT_MAX8BIT >= 156
+NXFONT_DEFBITMAP(156);
+#endif
+#if NXFONT_MIN8BIT <= 157 && NXFONT_MAX8BIT >= 157
+NXFONT_DEFBITMAP(157);
+#endif
+#if NXFONT_MIN8BIT <= 158 && NXFONT_MAX8BIT >= 158
+NXFONT_DEFBITMAP(158);
+#endif
+#if NXFONT_MIN8BIT <= 159 && NXFONT_MAX8BIT >= 159
+NXFONT_DEFBITMAP(159);
+#endif
+#if NXFONT_MIN8BIT <= 160 && NXFONT_MAX8BIT >= 160
+NXFONT_DEFBITMAP(160);
+#endif
+#if NXFONT_MIN8BIT <= 161 && NXFONT_MAX8BIT >= 161
+NXFONT_DEFBITMAP(161);
+#endif
+#if NXFONT_MIN8BIT <= 162 && NXFONT_MAX8BIT >= 162
+NXFONT_DEFBITMAP(162);
+#endif
+#if NXFONT_MIN8BIT <= 163 && NXFONT_MAX8BIT >= 163
+NXFONT_DEFBITMAP(163);
+#endif
+#if NXFONT_MIN8BIT <= 164 && NXFONT_MAX8BIT >= 164
+NXFONT_DEFBITMAP(164);
+#endif
+#if NXFONT_MIN8BIT <= 165 && NXFONT_MAX8BIT >= 165
+NXFONT_DEFBITMAP(165);
+#endif
+#if NXFONT_MIN8BIT <= 166 && NXFONT_MAX8BIT >= 166
+NXFONT_DEFBITMAP(166);
+#endif
+#if NXFONT_MIN8BIT <= 167 && NXFONT_MAX8BIT >= 167
+NXFONT_DEFBITMAP(167);
+#endif
+#if NXFONT_MIN8BIT <= 168 && NXFONT_MAX8BIT >= 168
+NXFONT_DEFBITMAP(168);
+#endif
+#if NXFONT_MIN8BIT <= 169 && NXFONT_MAX8BIT >= 169
+NXFONT_DEFBITMAP(169);
+#endif
+#if NXFONT_MIN8BIT <= 170 && NXFONT_MAX8BIT >= 170
+NXFONT_DEFBITMAP(170);
+#endif
+#if NXFONT_MIN8BIT <= 171 && NXFONT_MAX8BIT >= 171
+NXFONT_DEFBITMAP(171);
+#endif
+#if NXFONT_MIN8BIT <= 172 && NXFONT_MAX8BIT >= 172
+NXFONT_DEFBITMAP(172);
+#endif
+#if NXFONT_MIN8BIT <= 173 && NXFONT_MAX8BIT >= 173
+NXFONT_DEFBITMAP(173);
+#endif
+#if NXFONT_MIN8BIT <= 174 && NXFONT_MAX8BIT >= 174
+NXFONT_DEFBITMAP(174);
+#endif
+#if NXFONT_MIN8BIT <= 175 && NXFONT_MAX8BIT >= 175
+NXFONT_DEFBITMAP(175);
+#endif
+#if NXFONT_MIN8BIT <= 176 && NXFONT_MAX8BIT >= 176
+NXFONT_DEFBITMAP(176);
+#endif
+#if NXFONT_MIN8BIT <= 177 && NXFONT_MAX8BIT >= 177
+NXFONT_DEFBITMAP(177);
+#endif
+#if NXFONT_MIN8BIT <= 178 && NXFONT_MAX8BIT >= 178
+NXFONT_DEFBITMAP(178);
+#endif
+#if NXFONT_MIN8BIT <= 179 && NXFONT_MAX8BIT >= 179
+NXFONT_DEFBITMAP(179);
+#endif
+#if NXFONT_MIN8BIT <= 180 && NXFONT_MAX8BIT >= 180
+NXFONT_DEFBITMAP(180);
+#endif
+#if NXFONT_MIN8BIT <= 181 && NXFONT_MAX8BIT >= 181
+NXFONT_DEFBITMAP(181);
+#endif
+#if NXFONT_MIN8BIT <= 182 && NXFONT_MAX8BIT >= 182
+NXFONT_DEFBITMAP(182);
+#endif
+#if NXFONT_MIN8BIT <= 183 && NXFONT_MAX8BIT >= 183
+NXFONT_DEFBITMAP(183);
+#endif
+#if NXFONT_MIN8BIT <= 184 && NXFONT_MAX8BIT >= 184
+NXFONT_DEFBITMAP(184);
+#endif
+#if NXFONT_MIN8BIT <= 185 && NXFONT_MAX8BIT >= 185
+NXFONT_DEFBITMAP(185);
+#endif
+#if NXFONT_MIN8BIT <= 186 && NXFONT_MAX8BIT >= 186
+NXFONT_DEFBITMAP(186);
+#endif
+#if NXFONT_MIN8BIT <= 187 && NXFONT_MAX8BIT >= 187
+NXFONT_DEFBITMAP(187);
+#endif
+#if NXFONT_MIN8BIT <= 188 && NXFONT_MAX8BIT >= 188
+NXFONT_DEFBITMAP(188);
+#endif
+#if NXFONT_MIN8BIT <= 189 && NXFONT_MAX8BIT >= 189
+NXFONT_DEFBITMAP(189);
+#endif
+#if NXFONT_MIN8BIT <= 190 && NXFONT_MAX8BIT >= 190
+NXFONT_DEFBITMAP(190);
+#endif
+#if NXFONT_MIN8BIT <= 191 && NXFONT_MAX8BIT >= 191
+NXFONT_DEFBITMAP(191);
+#endif
+#if NXFONT_MIN8BIT <= 192 && NXFONT_MAX8BIT >= 192
+NXFONT_DEFBITMAP(192);
+#endif
+#if NXFONT_MIN8BIT <= 193 && NXFONT_MAX8BIT >= 193
+NXFONT_DEFBITMAP(193);
+#endif
+#if NXFONT_MIN8BIT <= 194 && NXFONT_MAX8BIT >= 194
+NXFONT_DEFBITMAP(194);
+#endif
+#if NXFONT_MIN8BIT <= 195 && NXFONT_MAX8BIT >= 195
+NXFONT_DEFBITMAP(195);
+#endif
+#if NXFONT_MIN8BIT <= 196 && NXFONT_MAX8BIT >= 196
+NXFONT_DEFBITMAP(196);
+#endif
+#if NXFONT_MIN8BIT <= 197 && NXFONT_MAX8BIT >= 197
+NXFONT_DEFBITMAP(197);
+#endif
+#if NXFONT_MIN8BIT <= 198 && NXFONT_MAX8BIT >= 198
+NXFONT_DEFBITMAP(198);
+#endif
+#if NXFONT_MIN8BIT <= 199 && NXFONT_MAX8BIT >= 199
+NXFONT_DEFBITMAP(199);
+#endif
+#if NXFONT_MIN8BIT <= 200 && NXFONT_MAX8BIT >= 200
+NXFONT_DEFBITMAP(200);
+#endif
+#if NXFONT_MIN8BIT <= 201 && NXFONT_MAX8BIT >= 201
+NXFONT_DEFBITMAP(201);
+#endif
+#if NXFONT_MIN8BIT <= 202 && NXFONT_MAX8BIT >= 202
+NXFONT_DEFBITMAP(202);
+#endif
+#if NXFONT_MIN8BIT <= 203 && NXFONT_MAX8BIT >= 203
+NXFONT_DEFBITMAP(203);
+#endif
+#if NXFONT_MIN8BIT <= 204 && NXFONT_MAX8BIT >= 204
+NXFONT_DEFBITMAP(204);
+#endif
+#if NXFONT_MIN8BIT <= 205 && NXFONT_MAX8BIT >= 205
+NXFONT_DEFBITMAP(205);
+#endif
+#if NXFONT_MIN8BIT <= 206 && NXFONT_MAX8BIT >= 206
+NXFONT_DEFBITMAP(206);
+#endif
+#if NXFONT_MIN8BIT <= 207 && NXFONT_MAX8BIT >= 207
+NXFONT_DEFBITMAP(207);
+#endif
+#if NXFONT_MIN8BIT <= 208 && NXFONT_MAX8BIT >= 208
+NXFONT_DEFBITMAP(208);
+#endif
+#if NXFONT_MIN8BIT <= 209 && NXFONT_MAX8BIT >= 209
+NXFONT_DEFBITMAP(209);
+#endif
+#if NXFONT_MIN8BIT <= 210 && NXFONT_MAX8BIT >= 210
+NXFONT_DEFBITMAP(210);
+#endif
+#if NXFONT_MIN8BIT <= 211 && NXFONT_MAX8BIT >= 211
+NXFONT_DEFBITMAP(211);
+#endif
+#if NXFONT_MIN8BIT <= 212 && NXFONT_MAX8BIT >= 212
+NXFONT_DEFBITMAP(212);
+#endif
+#if NXFONT_MIN8BIT <= 213 && NXFONT_MAX8BIT >= 213
+NXFONT_DEFBITMAP(213);
+#endif
+#if NXFONT_MIN8BIT <= 214 && NXFONT_MAX8BIT >= 214
+NXFONT_DEFBITMAP(214);
+#endif
+#if NXFONT_MIN8BIT <= 215 && NXFONT_MAX8BIT >= 215
+NXFONT_DEFBITMAP(215);
+#endif
+#if NXFONT_MIN8BIT <= 216 && NXFONT_MAX8BIT >= 216
+NXFONT_DEFBITMAP(216);
+#endif
+#if NXFONT_MIN8BIT <= 217 && NXFONT_MAX8BIT >= 217
+NXFONT_DEFBITMAP(217);
+#endif
+#if NXFONT_MIN8BIT <= 218 && NXFONT_MAX8BIT >= 218
+NXFONT_DEFBITMAP(218);
+#endif
+#if NXFONT_MIN8BIT <= 219 && NXFONT_MAX8BIT >= 219
+NXFONT_DEFBITMAP(219);
+#endif
+#if NXFONT_MIN8BIT <= 220 && NXFONT_MAX8BIT >= 220
+NXFONT_DEFBITMAP(220);
+#endif
+#if NXFONT_MIN8BIT <= 221 && NXFONT_MAX8BIT >= 221
+NXFONT_DEFBITMAP(221);
+#endif
+#if NXFONT_MIN8BIT <= 222 && NXFONT_MAX8BIT >= 222
+NXFONT_DEFBITMAP(222);
+#endif
+#if NXFONT_MIN8BIT <= 223 && NXFONT_MAX8BIT >= 223
+NXFONT_DEFBITMAP(223);
+#endif
+#if NXFONT_MIN8BIT <= 224 && NXFONT_MAX8BIT >= 224
+NXFONT_DEFBITMAP(224);
+#endif
+#if NXFONT_MIN8BIT <= 225 && NXFONT_MAX8BIT >= 225
+NXFONT_DEFBITMAP(225);
+#endif
+#if NXFONT_MIN8BIT <= 226 && NXFONT_MAX8BIT >= 226
+NXFONT_DEFBITMAP(226);
+#endif
+#if NXFONT_MIN8BIT <= 227 && NXFONT_MAX8BIT >= 227
+NXFONT_DEFBITMAP(227);
+#endif
+#if NXFONT_MIN8BIT <= 228 && NXFONT_MAX8BIT >= 228
+NXFONT_DEFBITMAP(228);
+#endif
+#if NXFONT_MIN8BIT <= 229 && NXFONT_MAX8BIT >= 229
+NXFONT_DEFBITMAP(229);
+#endif
+#if NXFONT_MIN8BIT <= 230 && NXFONT_MAX8BIT >= 230
+NXFONT_DEFBITMAP(230);
+#endif
+#if NXFONT_MIN8BIT <= 231 && NXFONT_MAX8BIT >= 231
+NXFONT_DEFBITMAP(231);
+#endif
+#if NXFONT_MIN8BIT <= 232 && NXFONT_MAX8BIT >= 232
+NXFONT_DEFBITMAP(232);
+#endif
+#if NXFONT_MIN8BIT <= 233 && NXFONT_MAX8BIT >= 233
+NXFONT_DEFBITMAP(233);
+#endif
+#if NXFONT_MIN8BIT <= 234 && NXFONT_MAX8BIT >= 234
+NXFONT_DEFBITMAP(234);
+#endif
+#if NXFONT_MIN8BIT <= 235 && NXFONT_MAX8BIT >= 235
+NXFONT_DEFBITMAP(235);
+#endif
+#if NXFONT_MIN8BIT <= 236 && NXFONT_MAX8BIT >= 236
+NXFONT_DEFBITMAP(236);
+#endif
+#if NXFONT_MIN8BIT <= 237 && NXFONT_MAX8BIT >= 237
+NXFONT_DEFBITMAP(237);
+#endif
+#if NXFONT_MIN8BIT <= 238 && NXFONT_MAX8BIT >= 238
+NXFONT_DEFBITMAP(238);
+#endif
+#if NXFONT_MIN8BIT <= 239 && NXFONT_MAX8BIT >= 239
+NXFONT_DEFBITMAP(239);
+#endif
+#if NXFONT_MIN8BIT <= 240 && NXFONT_MAX8BIT >= 240
+NXFONT_DEFBITMAP(240);
+#endif
+#if NXFONT_MIN8BIT <= 241 && NXFONT_MAX8BIT >= 241
+NXFONT_DEFBITMAP(241);
+#endif
+#if NXFONT_MIN8BIT <= 242 && NXFONT_MAX8BIT >= 242
+NXFONT_DEFBITMAP(242);
+#endif
+#if NXFONT_MIN8BIT <= 243 && NXFONT_MAX8BIT >= 243
+NXFONT_DEFBITMAP(243);
+#endif
+#if NXFONT_MIN8BIT <= 244 && NXFONT_MAX8BIT >= 244
+NXFONT_DEFBITMAP(244);
+#endif
+#if NXFONT_MIN8BIT <= 245 && NXFONT_MAX8BIT >= 245
+NXFONT_DEFBITMAP(245);
+#endif
+#if NXFONT_MIN8BIT <= 246 && NXFONT_MAX8BIT >= 246
+NXFONT_DEFBITMAP(246);
+#endif
+#if NXFONT_MIN8BIT <= 247 && NXFONT_MAX8BIT >= 247
+NXFONT_DEFBITMAP(247);
+#endif
+#if NXFONT_MIN8BIT <= 248 && NXFONT_MAX8BIT >= 248
+NXFONT_DEFBITMAP(248);
+#endif
+#if NXFONT_MIN8BIT <= 249 && NXFONT_MAX8BIT >= 249
+NXFONT_DEFBITMAP(249);
+#endif
+#if NXFONT_MIN8BIT <= 250 && NXFONT_MAX8BIT >= 250
+NXFONT_DEFBITMAP(250);
+#endif
+#if NXFONT_MIN8BIT <= 251 && NXFONT_MAX8BIT >= 251
+NXFONT_DEFBITMAP(251);
+#endif
+#if NXFONT_MIN8BIT <= 252 && NXFONT_MAX8BIT >= 252
+NXFONT_DEFBITMAP(252);
+#endif
+#if NXFONT_MIN8BIT <= 253 && NXFONT_MAX8BIT >= 253
+NXFONT_DEFBITMAP(253);
+#endif
+#if NXFONT_MIN8BIT <= 254 && NXFONT_MAX8BIT >= 254
+NXFONT_DEFBITMAP(254);
+#endif
+#if NXFONT_MIN8BIT <= 255 && NXFONT_MAX8BIT >= 255
+NXFONT_DEFBITMAP(255);
+#endif
+#endif
+
+static const struct nx_fontbitmap_s NXF_SYMNAME(NXFONTS_PREFIX,7bitmaps)[NXFONT_N7BITFONTS] =
+{
+#if NXFONT_MIN7BIT <= 0 && NXFONT_MAX7BIT >= 0
+NXFONT_DEFMETRIC(0),
+#endif
+#if NXFONT_MIN7BIT <= 1 && NXFONT_MAX7BIT >= 1
+NXFONT_DEFMETRIC(1),
+#endif
+#if NXFONT_MIN7BIT <= 2 && NXFONT_MAX7BIT >= 2
+NXFONT_DEFMETRIC(2),
+#endif
+#if NXFONT_MIN7BIT <= 3 && NXFONT_MAX7BIT >= 3
+NXFONT_DEFMETRIC(3),
+#endif
+#if NXFONT_MIN7BIT <= 4 && NXFONT_MAX7BIT >= 4
+NXFONT_DEFMETRIC(4),
+#endif
+#if NXFONT_MIN7BIT <= 5 && NXFONT_MAX7BIT >= 5
+NXFONT_DEFMETRIC(5),
+#endif
+#if NXFONT_MIN7BIT <= 6 && NXFONT_MAX7BIT >= 6
+NXFONT_DEFMETRIC(6),
+#endif
+#if NXFONT_MIN7BIT <= 7 && NXFONT_MAX7BIT >= 7
+NXFONT_DEFMETRIC(7),
+#endif
+#if NXFONT_MIN7BIT <= 8 && NXFONT_MAX7BIT >= 8
+NXFONT_DEFMETRIC(8),
+#endif
+#if NXFONT_MIN7BIT <= 9 && NXFONT_MAX7BIT >= 9
+NXFONT_DEFMETRIC(9),
+#endif
+#if NXFONT_MIN7BIT <= 10 && NXFONT_MAX7BIT >= 10
+NXFONT_DEFMETRIC(10),
+#endif
+#if NXFONT_MIN7BIT <= 11 && NXFONT_MAX7BIT >= 11
+NXFONT_DEFMETRIC(11),
+#endif
+#if NXFONT_MIN7BIT <= 12 && NXFONT_MAX7BIT >= 12
+NXFONT_DEFMETRIC(12),
+#endif
+#if NXFONT_MIN7BIT <= 13 && NXFONT_MAX7BIT >= 13
+NXFONT_DEFMETRIC(13),
+#endif
+#if NXFONT_MIN7BIT <= 14 && NXFONT_MAX7BIT >= 14
+NXFONT_DEFMETRIC(14),
+#endif
+#if NXFONT_MIN7BIT <= 15 && NXFONT_MAX7BIT >= 15
+NXFONT_DEFMETRIC(15),
+#endif
+#if NXFONT_MIN7BIT <= 16 && NXFONT_MAX7BIT >= 16
+NXFONT_DEFMETRIC(16),
+#endif
+#if NXFONT_MIN7BIT <= 17 && NXFONT_MAX7BIT >= 17
+NXFONT_DEFMETRIC(17),
+#endif
+#if NXFONT_MIN7BIT <= 18 && NXFONT_MAX7BIT >= 18
+NXFONT_DEFMETRIC(18),
+#endif
+#if NXFONT_MIN7BIT <= 19 && NXFONT_MAX7BIT >= 19
+NXFONT_DEFMETRIC(19),
+#endif
+#if NXFONT_MIN7BIT <= 20 && NXFONT_MAX7BIT >= 20
+NXFONT_DEFMETRIC(20),
+#endif
+#if NXFONT_MIN7BIT <= 21 && NXFONT_MAX7BIT >= 21
+NXFONT_DEFMETRIC(21),
+#endif
+#if NXFONT_MIN7BIT <= 22 && NXFONT_MAX7BIT >= 22
+NXFONT_DEFMETRIC(22),
+#endif
+#if NXFONT_MIN7BIT <= 23 && NXFONT_MAX7BIT >= 23
+NXFONT_DEFMETRIC(23),
+#endif
+#if NXFONT_MIN7BIT <= 24 && NXFONT_MAX7BIT >= 24
+NXFONT_DEFMETRIC(24),
+#endif
+#if NXFONT_MIN7BIT <= 25 && NXFONT_MAX7BIT >= 25
+NXFONT_DEFMETRIC(25),
+#endif
+#if NXFONT_MIN7BIT <= 26 && NXFONT_MAX7BIT >= 26
+NXFONT_DEFMETRIC(26),
+#endif
+#if NXFONT_MIN7BIT <= 27 && NXFONT_MAX7BIT >= 27
+NXFONT_DEFMETRIC(27),
+#endif
+#if NXFONT_MIN7BIT <= 28 && NXFONT_MAX7BIT >= 28
+NXFONT_DEFMETRIC(28),
+#endif
+#if NXFONT_MIN7BIT <= 29 && NXFONT_MAX7BIT >= 29
+NXFONT_DEFMETRIC(29),
+#endif
+#if NXFONT_MIN7BIT <= 30 && NXFONT_MAX7BIT >= 30
+NXFONT_DEFMETRIC(30),
+#endif
+#if NXFONT_MIN7BIT <= 31 && NXFONT_MAX7BIT >= 31
+NXFONT_DEFMETRIC(31),
+#endif
+#if NXFONT_MIN7BIT <= 32 && NXFONT_MAX7BIT >= 32
+NXFONT_DEFMETRIC(32),
+#endif
+#if NXFONT_MIN7BIT <= 33 && NXFONT_MAX7BIT >= 33
+NXFONT_DEFMETRIC(33),
+#endif
+#if NXFONT_MIN7BIT <= 34 && NXFONT_MAX7BIT >= 34
+NXFONT_DEFMETRIC(34),
+#endif
+#if NXFONT_MIN7BIT <= 35 && NXFONT_MAX7BIT >= 35
+NXFONT_DEFMETRIC(35),
+#endif
+#if NXFONT_MIN7BIT <= 36 && NXFONT_MAX7BIT >= 36
+NXFONT_DEFMETRIC(36),
+#endif
+#if NXFONT_MIN7BIT <= 37 && NXFONT_MAX7BIT >= 37
+NXFONT_DEFMETRIC(37),
+#endif
+#if NXFONT_MIN7BIT <= 38 && NXFONT_MAX7BIT >= 38
+NXFONT_DEFMETRIC(38),
+#endif
+#if NXFONT_MIN7BIT <= 39 && NXFONT_MAX7BIT >= 39
+NXFONT_DEFMETRIC(39),
+#endif
+#if NXFONT_MIN7BIT <= 40 && NXFONT_MAX7BIT >= 40
+NXFONT_DEFMETRIC(40),
+#endif
+#if NXFONT_MIN7BIT <= 41 && NXFONT_MAX7BIT >= 41
+NXFONT_DEFMETRIC(41),
+#endif
+#if NXFONT_MIN7BIT <= 42 && NXFONT_MAX7BIT >= 42
+NXFONT_DEFMETRIC(42),
+#endif
+#if NXFONT_MIN7BIT <= 43 && NXFONT_MAX7BIT >= 43
+NXFONT_DEFMETRIC(43),
+#endif
+#if NXFONT_MIN7BIT <= 44 && NXFONT_MAX7BIT >= 44
+NXFONT_DEFMETRIC(44),
+#endif
+#if NXFONT_MIN7BIT <= 45 && NXFONT_MAX7BIT >= 45
+NXFONT_DEFMETRIC(45),
+#endif
+#if NXFONT_MIN7BIT <= 46 && NXFONT_MAX7BIT >= 46
+NXFONT_DEFMETRIC(46),
+#endif
+#if NXFONT_MIN7BIT <= 47 && NXFONT_MAX7BIT >= 47
+NXFONT_DEFMETRIC(47),
+#endif
+#if NXFONT_MIN7BIT <= 48 && NXFONT_MAX7BIT >= 48
+NXFONT_DEFMETRIC(48),
+#endif
+#if NXFONT_MIN7BIT <= 49 && NXFONT_MAX7BIT >= 49
+NXFONT_DEFMETRIC(49),
+#endif
+#if NXFONT_MIN7BIT <= 50 && NXFONT_MAX7BIT >= 50
+NXFONT_DEFMETRIC(50),
+#endif
+#if NXFONT_MIN7BIT <= 51 && NXFONT_MAX7BIT >= 51
+NXFONT_DEFMETRIC(51),
+#endif
+#if NXFONT_MIN7BIT <= 52 && NXFONT_MAX7BIT >= 52
+NXFONT_DEFMETRIC(52),
+#endif
+#if NXFONT_MIN7BIT <= 53 && NXFONT_MAX7BIT >= 53
+NXFONT_DEFMETRIC(53),
+#endif
+#if NXFONT_MIN7BIT <= 54 && NXFONT_MAX7BIT >= 54
+NXFONT_DEFMETRIC(54),
+#endif
+#if NXFONT_MIN7BIT <= 55 && NXFONT_MAX7BIT >= 55
+NXFONT_DEFMETRIC(55),
+#endif
+#if NXFONT_MIN7BIT <= 56 && NXFONT_MAX7BIT >= 56
+NXFONT_DEFMETRIC(56),
+#endif
+#if NXFONT_MIN7BIT <= 57 && NXFONT_MAX7BIT >= 57
+NXFONT_DEFMETRIC(57),
+#endif
+#if NXFONT_MIN7BIT <= 58 && NXFONT_MAX7BIT >= 58
+NXFONT_DEFMETRIC(58),
+#endif
+#if NXFONT_MIN7BIT <= 59 && NXFONT_MAX7BIT >= 59
+NXFONT_DEFMETRIC(59),
+#endif
+#if NXFONT_MIN7BIT <= 60 && NXFONT_MAX7BIT >= 60
+NXFONT_DEFMETRIC(60),
+#endif
+#if NXFONT_MIN7BIT <= 61 && NXFONT_MAX7BIT >= 61
+NXFONT_DEFMETRIC(61),
+#endif
+#if NXFONT_MIN7BIT <= 62 && NXFONT_MAX7BIT >= 62
+NXFONT_DEFMETRIC(62),
+#endif
+#if NXFONT_MIN7BIT <= 63 && NXFONT_MAX7BIT >= 63
+NXFONT_DEFMETRIC(63),
+#endif
+#if NXFONT_MIN7BIT <= 64 && NXFONT_MAX7BIT >= 64
+NXFONT_DEFMETRIC(64),
+#endif
+#if NXFONT_MIN7BIT <= 65 && NXFONT_MAX7BIT >= 65
+NXFONT_DEFMETRIC(65),
+#endif
+#if NXFONT_MIN7BIT <= 66 && NXFONT_MAX7BIT >= 66
+NXFONT_DEFMETRIC(66),
+#endif
+#if NXFONT_MIN7BIT <= 67 && NXFONT_MAX7BIT >= 67
+NXFONT_DEFMETRIC(67),
+#endif
+#if NXFONT_MIN7BIT <= 68 && NXFONT_MAX7BIT >= 68
+NXFONT_DEFMETRIC(68),
+#endif
+#if NXFONT_MIN7BIT <= 69 && NXFONT_MAX7BIT >= 69
+NXFONT_DEFMETRIC(69),
+#endif
+#if NXFONT_MIN7BIT <= 70 && NXFONT_MAX7BIT >= 70
+NXFONT_DEFMETRIC(70),
+#endif
+#if NXFONT_MIN7BIT <= 71 && NXFONT_MAX7BIT >= 71
+NXFONT_DEFMETRIC(71),
+#endif
+#if NXFONT_MIN7BIT <= 72 && NXFONT_MAX7BIT >= 72
+NXFONT_DEFMETRIC(72),
+#endif
+#if NXFONT_MIN7BIT <= 73 && NXFONT_MAX7BIT >= 73
+NXFONT_DEFMETRIC(73),
+#endif
+#if NXFONT_MIN7BIT <= 74 && NXFONT_MAX7BIT >= 74
+NXFONT_DEFMETRIC(74),
+#endif
+#if NXFONT_MIN7BIT <= 75 && NXFONT_MAX7BIT >= 75
+NXFONT_DEFMETRIC(75),
+#endif
+#if NXFONT_MIN7BIT <= 76 && NXFONT_MAX7BIT >= 76
+NXFONT_DEFMETRIC(76),
+#endif
+#if NXFONT_MIN7BIT <= 77 && NXFONT_MAX7BIT >= 77
+NXFONT_DEFMETRIC(77),
+#endif
+#if NXFONT_MIN7BIT <= 78 && NXFONT_MAX7BIT >= 78
+NXFONT_DEFMETRIC(78),
+#endif
+#if NXFONT_MIN7BIT <= 79 && NXFONT_MAX7BIT >= 79
+NXFONT_DEFMETRIC(79),
+#endif
+#if NXFONT_MIN7BIT <= 80 && NXFONT_MAX7BIT >= 80
+NXFONT_DEFMETRIC(80),
+#endif
+#if NXFONT_MIN7BIT <= 81 && NXFONT_MAX7BIT >= 81
+NXFONT_DEFMETRIC(81),
+#endif
+#if NXFONT_MIN7BIT <= 82 && NXFONT_MAX7BIT >= 82
+NXFONT_DEFMETRIC(82),
+#endif
+#if NXFONT_MIN7BIT <= 83 && NXFONT_MAX7BIT >= 83
+NXFONT_DEFMETRIC(83),
+#endif
+#if NXFONT_MIN7BIT <= 84 && NXFONT_MAX7BIT >= 84
+NXFONT_DEFMETRIC(84),
+#endif
+#if NXFONT_MIN7BIT <= 85 && NXFONT_MAX7BIT >= 85
+NXFONT_DEFMETRIC(85),
+#endif
+#if NXFONT_MIN7BIT <= 86 && NXFONT_MAX7BIT >= 86
+NXFONT_DEFMETRIC(86),
+#endif
+#if NXFONT_MIN7BIT <= 87 && NXFONT_MAX7BIT >= 87
+NXFONT_DEFMETRIC(87),
+#endif
+#if NXFONT_MIN7BIT <= 88 && NXFONT_MAX7BIT >= 88
+NXFONT_DEFMETRIC(88),
+#endif
+#if NXFONT_MIN7BIT <= 89 && NXFONT_MAX7BIT >= 89
+NXFONT_DEFMETRIC(89),
+#endif
+#if NXFONT_MIN7BIT <= 90 && NXFONT_MAX7BIT >= 90
+NXFONT_DEFMETRIC(90),
+#endif
+#if NXFONT_MIN7BIT <= 91 && NXFONT_MAX7BIT >= 91
+NXFONT_DEFMETRIC(91),
+#endif
+#if NXFONT_MIN7BIT <= 92 && NXFONT_MAX7BIT >= 92
+NXFONT_DEFMETRIC(92),
+#endif
+#if NXFONT_MIN7BIT <= 93 && NXFONT_MAX7BIT >= 93
+NXFONT_DEFMETRIC(93),
+#endif
+#if NXFONT_MIN7BIT <= 94 && NXFONT_MAX7BIT >= 94
+NXFONT_DEFMETRIC(94),
+#endif
+#if NXFONT_MIN7BIT <= 95 && NXFONT_MAX7BIT >= 95
+NXFONT_DEFMETRIC(95),
+#endif
+#if NXFONT_MIN7BIT <= 96 && NXFONT_MAX7BIT >= 96
+NXFONT_DEFMETRIC(96),
+#endif
+#if NXFONT_MIN7BIT <= 97 && NXFONT_MAX7BIT >= 97
+NXFONT_DEFMETRIC(97),
+#endif
+#if NXFONT_MIN7BIT <= 98 && NXFONT_MAX7BIT >= 98
+NXFONT_DEFMETRIC(98),
+#endif
+#if NXFONT_MIN7BIT <= 99 && NXFONT_MAX7BIT >= 99
+NXFONT_DEFMETRIC(99),
+#endif
+#if NXFONT_MIN7BIT <= 100 && NXFONT_MAX7BIT >= 100
+NXFONT_DEFMETRIC(100),
+#endif
+#if NXFONT_MIN7BIT <= 101 && NXFONT_MAX7BIT >= 101
+NXFONT_DEFMETRIC(101),
+#endif
+#if NXFONT_MIN7BIT <= 102 && NXFONT_MAX7BIT >= 102
+NXFONT_DEFMETRIC(102),
+#endif
+#if NXFONT_MIN7BIT <= 103 && NXFONT_MAX7BIT >= 103
+NXFONT_DEFMETRIC(103),
+#endif
+#if NXFONT_MIN7BIT <= 104 && NXFONT_MAX7BIT >= 104
+NXFONT_DEFMETRIC(104),
+#endif
+#if NXFONT_MIN7BIT <= 105 && NXFONT_MAX7BIT >= 105
+NXFONT_DEFMETRIC(105),
+#endif
+#if NXFONT_MIN7BIT <= 106 && NXFONT_MAX7BIT >= 106
+NXFONT_DEFMETRIC(106),
+#endif
+#if NXFONT_MIN7BIT <= 107 && NXFONT_MAX7BIT >= 107
+NXFONT_DEFMETRIC(107),
+#endif
+#if NXFONT_MIN7BIT <= 108 && NXFONT_MAX7BIT >= 108
+NXFONT_DEFMETRIC(108),
+#endif
+#if NXFONT_MIN7BIT <= 109 && NXFONT_MAX7BIT >= 109
+NXFONT_DEFMETRIC(109),
+#endif
+#if NXFONT_MIN7BIT <= 110 && NXFONT_MAX7BIT >= 110
+NXFONT_DEFMETRIC(110),
+#endif
+#if NXFONT_MIN7BIT <= 111 && NXFONT_MAX7BIT >= 111
+NXFONT_DEFMETRIC(111),
+#endif
+#if NXFONT_MIN7BIT <= 112 && NXFONT_MAX7BIT >= 112
+NXFONT_DEFMETRIC(112),
+#endif
+#if NXFONT_MIN7BIT <= 113 && NXFONT_MAX7BIT >= 113
+NXFONT_DEFMETRIC(113),
+#endif
+#if NXFONT_MIN7BIT <= 114 && NXFONT_MAX7BIT >= 114
+NXFONT_DEFMETRIC(114),
+#endif
+#if NXFONT_MIN7BIT <= 115 && NXFONT_MAX7BIT >= 115
+NXFONT_DEFMETRIC(115),
+#endif
+#if NXFONT_MIN7BIT <= 116 && NXFONT_MAX7BIT >= 116
+NXFONT_DEFMETRIC(116),
+#endif
+#if NXFONT_MIN7BIT <= 117 && NXFONT_MAX7BIT >= 117
+NXFONT_DEFMETRIC(117),
+#endif
+#if NXFONT_MIN7BIT <= 118 && NXFONT_MAX7BIT >= 118
+NXFONT_DEFMETRIC(118),
+#endif
+#if NXFONT_MIN7BIT <= 119 && NXFONT_MAX7BIT >= 119
+NXFONT_DEFMETRIC(119),
+#endif
+#if NXFONT_MIN7BIT <= 120 && NXFONT_MAX7BIT >= 120
+NXFONT_DEFMETRIC(120),
+#endif
+#if NXFONT_MIN7BIT <= 121 && NXFONT_MAX7BIT >= 121
+NXFONT_DEFMETRIC(121),
+#endif
+#if NXFONT_MIN7BIT <= 122 && NXFONT_MAX7BIT >= 122
+NXFONT_DEFMETRIC(122),
+#endif
+#if NXFONT_MIN7BIT <= 123 && NXFONT_MAX7BIT >= 123
+NXFONT_DEFMETRIC(123),
+#endif
+#if NXFONT_MIN7BIT <= 124 && NXFONT_MAX7BIT >= 124
+NXFONT_DEFMETRIC(124),
+#endif
+#if NXFONT_MIN7BIT <= 125 && NXFONT_MAX7BIT >= 125
+NXFONT_DEFMETRIC(125),
+#endif
+#if NXFONT_MIN7BIT <= 126 && NXFONT_MAX7BIT >= 126
+NXFONT_DEFMETRIC(126),
+#endif
+#if NXFONT_MIN7BIT <= 127 && NXFONT_MAX7BIT >= 127
+NXFONT_DEFMETRIC(127),
+#endif
+};
+
+#if CONFIG_NXFONTS_CHARBITS >= 8
+static const struct nx_fontbitmap_s NXF_SYMNAME(NXFONTS_PREFIX,8bitmaps)[NXFONT_N8BITFONTS] =
+{
+#if NXFONT_MIN8BIT <= 128 && NXFONT_MAX8BIT >= 128
+NXFONT_DEFMETRIC(128),
+#endif
+#if NXFONT_MIN8BIT <= 129 && NXFONT_MAX8BIT >= 129
+NXFONT_DEFMETRIC(129),
+#endif
+#if NXFONT_MIN8BIT <= 130 && NXFONT_MAX8BIT >= 130
+NXFONT_DEFMETRIC(130),
+#endif
+#if NXFONT_MIN8BIT <= 131 && NXFONT_MAX8BIT >= 131
+NXFONT_DEFMETRIC(131),
+#endif
+#if NXFONT_MIN8BIT <= 132 && NXFONT_MAX8BIT >= 132
+NXFONT_DEFMETRIC(132),
+#endif
+#if NXFONT_MIN8BIT <= 133 && NXFONT_MAX8BIT >= 133
+NXFONT_DEFMETRIC(133),
+#endif
+#if NXFONT_MIN8BIT <= 134 && NXFONT_MAX8BIT >= 134
+NXFONT_DEFMETRIC(134),
+#endif
+#if NXFONT_MIN8BIT <= 135 && NXFONT_MAX8BIT >= 135
+NXFONT_DEFMETRIC(135),
+#endif
+#if NXFONT_MIN8BIT <= 136 && NXFONT_MAX8BIT >= 136
+NXFONT_DEFMETRIC(136),
+#endif
+#if NXFONT_MIN8BIT <= 137 && NXFONT_MAX8BIT >= 137
+NXFONT_DEFMETRIC(137),
+#endif
+#if NXFONT_MIN8BIT <= 138 && NXFONT_MAX8BIT >= 138
+NXFONT_DEFMETRIC(138),
+#endif
+#if NXFONT_MIN8BIT <= 139 && NXFONT_MAX8BIT >= 139
+NXFONT_DEFMETRIC(139),
+#endif
+#if NXFONT_MIN8BIT <= 140 && NXFONT_MAX8BIT >= 140
+NXFONT_DEFMETRIC(140),
+#endif
+#if NXFONT_MIN8BIT <= 141 && NXFONT_MAX8BIT >= 141
+NXFONT_DEFMETRIC(141),
+#endif
+#if NXFONT_MIN8BIT <= 142 && NXFONT_MAX8BIT >= 142
+NXFONT_DEFMETRIC(142),
+#endif
+#if NXFONT_MIN8BIT <= 143 && NXFONT_MAX8BIT >= 143
+NXFONT_DEFMETRIC(143),
+#endif
+#if NXFONT_MIN8BIT <= 144 && NXFONT_MAX8BIT >= 144
+NXFONT_DEFMETRIC(144),
+#endif
+#if NXFONT_MIN8BIT <= 145 && NXFONT_MAX8BIT >= 145
+NXFONT_DEFMETRIC(145),
+#endif
+#if NXFONT_MIN8BIT <= 146 && NXFONT_MAX8BIT >= 146
+NXFONT_DEFMETRIC(146),
+#endif
+#if NXFONT_MIN8BIT <= 147 && NXFONT_MAX8BIT >= 147
+NXFONT_DEFMETRIC(147),
+#endif
+#if NXFONT_MIN8BIT <= 148 && NXFONT_MAX8BIT >= 148
+NXFONT_DEFMETRIC(148),
+#endif
+#if NXFONT_MIN8BIT <= 149 && NXFONT_MAX8BIT >= 149
+NXFONT_DEFMETRIC(149),
+#endif
+#if NXFONT_MIN8BIT <= 150 && NXFONT_MAX8BIT >= 150
+NXFONT_DEFMETRIC(150),
+#endif
+#if NXFONT_MIN8BIT <= 151 && NXFONT_MAX8BIT >= 151
+NXFONT_DEFMETRIC(151),
+#endif
+#if NXFONT_MIN8BIT <= 152 && NXFONT_MAX8BIT >= 152
+NXFONT_DEFMETRIC(152),
+#endif
+#if NXFONT_MIN8BIT <= 153 && NXFONT_MAX8BIT >= 153
+NXFONT_DEFMETRIC(153),
+#endif
+#if NXFONT_MIN8BIT <= 154 && NXFONT_MAX8BIT >= 154
+NXFONT_DEFMETRIC(154),
+#endif
+#if NXFONT_MIN8BIT <= 155 && NXFONT_MAX8BIT >= 155
+NXFONT_DEFMETRIC(155),
+#endif
+#if NXFONT_MIN8BIT <= 156 && NXFONT_MAX8BIT >= 156
+NXFONT_DEFMETRIC(156),
+#endif
+#if NXFONT_MIN8BIT <= 157 && NXFONT_MAX8BIT >= 157
+NXFONT_DEFMETRIC(157),
+#endif
+#if NXFONT_MIN8BIT <= 158 && NXFONT_MAX8BIT >= 158
+NXFONT_DEFMETRIC(158),
+#endif
+#if NXFONT_MIN8BIT <= 159 && NXFONT_MAX8BIT >= 159
+NXFONT_DEFMETRIC(159),
+#endif
+#if NXFONT_MIN8BIT <= 160 && NXFONT_MAX8BIT >= 160
+NXFONT_DEFMETRIC(160),
+#endif
+#if NXFONT_MIN8BIT <= 161 && NXFONT_MAX8BIT >= 161
+NXFONT_DEFMETRIC(161),
+#endif
+#if NXFONT_MIN8BIT <= 162 && NXFONT_MAX8BIT >= 162
+NXFONT_DEFMETRIC(162),
+#endif
+#if NXFONT_MIN8BIT <= 163 && NXFONT_MAX8BIT >= 163
+NXFONT_DEFMETRIC(163),
+#endif
+#if NXFONT_MIN8BIT <= 164 && NXFONT_MAX8BIT >= 164
+NXFONT_DEFMETRIC(164),
+#endif
+#if NXFONT_MIN8BIT <= 165 && NXFONT_MAX8BIT >= 165
+NXFONT_DEFMETRIC(165),
+#endif
+#if NXFONT_MIN8BIT <= 166 && NXFONT_MAX8BIT >= 166
+NXFONT_DEFMETRIC(166),
+#endif
+#if NXFONT_MIN8BIT <= 167 && NXFONT_MAX8BIT >= 167
+NXFONT_DEFMETRIC(167),
+#endif
+#if NXFONT_MIN8BIT <= 168 && NXFONT_MAX8BIT >= 168
+NXFONT_DEFMETRIC(168),
+#endif
+#if NXFONT_MIN8BIT <= 169 && NXFONT_MAX8BIT >= 169
+NXFONT_DEFMETRIC(169),
+#endif
+#if NXFONT_MIN8BIT <= 170 && NXFONT_MAX8BIT >= 170
+NXFONT_DEFMETRIC(170),
+#endif
+#if NXFONT_MIN8BIT <= 171 && NXFONT_MAX8BIT >= 171
+NXFONT_DEFMETRIC(171),
+#endif
+#if NXFONT_MIN8BIT <= 172 && NXFONT_MAX8BIT >= 172
+NXFONT_DEFMETRIC(172),
+#endif
+#if NXFONT_MIN8BIT <= 173 && NXFONT_MAX8BIT >= 173
+NXFONT_DEFMETRIC(173),
+#endif
+#if NXFONT_MIN8BIT <= 174 && NXFONT_MAX8BIT >= 174
+NXFONT_DEFMETRIC(174),
+#endif
+#if NXFONT_MIN8BIT <= 175 && NXFONT_MAX8BIT >= 175
+NXFONT_DEFMETRIC(175),
+#endif
+#if NXFONT_MIN8BIT <= 176 && NXFONT_MAX8BIT >= 176
+NXFONT_DEFMETRIC(176),
+#endif
+#if NXFONT_MIN8BIT <= 177 && NXFONT_MAX8BIT >= 177
+NXFONT_DEFMETRIC(177),
+#endif
+#if NXFONT_MIN8BIT <= 178 && NXFONT_MAX8BIT >= 178
+NXFONT_DEFMETRIC(178),
+#endif
+#if NXFONT_MIN8BIT <= 179 && NXFONT_MAX8BIT >= 179
+NXFONT_DEFMETRIC(179),
+#endif
+#if NXFONT_MIN8BIT <= 180 && NXFONT_MAX8BIT >= 180
+NXFONT_DEFMETRIC(180),
+#endif
+#if NXFONT_MIN8BIT <= 181 && NXFONT_MAX8BIT >= 181
+NXFONT_DEFMETRIC(181),
+#endif
+#if NXFONT_MIN8BIT <= 182 && NXFONT_MAX8BIT >= 182
+NXFONT_DEFMETRIC(182),
+#endif
+#if NXFONT_MIN8BIT <= 183 && NXFONT_MAX8BIT >= 183
+NXFONT_DEFMETRIC(183),
+#endif
+#if NXFONT_MIN8BIT <= 184 && NXFONT_MAX8BIT >= 184
+NXFONT_DEFMETRIC(184),
+#endif
+#if NXFONT_MIN8BIT <= 185 && NXFONT_MAX8BIT >= 185
+NXFONT_DEFMETRIC(185),
+#endif
+#if NXFONT_MIN8BIT <= 186 && NXFONT_MAX8BIT >= 186
+NXFONT_DEFMETRIC(186),
+#endif
+#if NXFONT_MIN8BIT <= 187 && NXFONT_MAX8BIT >= 187
+NXFONT_DEFMETRIC(187),
+#endif
+#if NXFONT_MIN8BIT <= 188 && NXFONT_MAX8BIT >= 188
+NXFONT_DEFMETRIC(188),
+#endif
+#if NXFONT_MIN8BIT <= 189 && NXFONT_MAX8BIT >= 189
+NXFONT_DEFMETRIC(189),
+#endif
+#if NXFONT_MIN8BIT <= 190 && NXFONT_MAX8BIT >= 190
+NXFONT_DEFMETRIC(190),
+#endif
+#if NXFONT_MIN8BIT <= 191 && NXFONT_MAX8BIT >= 191
+NXFONT_DEFMETRIC(191),
+#endif
+#if NXFONT_MIN8BIT <= 192 && NXFONT_MAX8BIT >= 192
+NXFONT_DEFMETRIC(192),
+#endif
+#if NXFONT_MIN8BIT <= 193 && NXFONT_MAX8BIT >= 193
+NXFONT_DEFMETRIC(193),
+#endif
+#if NXFONT_MIN8BIT <= 194 && NXFONT_MAX8BIT >= 194
+NXFONT_DEFMETRIC(194),
+#endif
+#if NXFONT_MIN8BIT <= 195 && NXFONT_MAX8BIT >= 195
+NXFONT_DEFMETRIC(195),
+#endif
+#if NXFONT_MIN8BIT <= 196 && NXFONT_MAX8BIT >= 196
+NXFONT_DEFMETRIC(196),
+#endif
+#if NXFONT_MIN8BIT <= 197 && NXFONT_MAX8BIT >= 197
+NXFONT_DEFMETRIC(197),
+#endif
+#if NXFONT_MIN8BIT <= 198 && NXFONT_MAX8BIT >= 198
+NXFONT_DEFMETRIC(198),
+#endif
+#if NXFONT_MIN8BIT <= 199 && NXFONT_MAX8BIT >= 199
+NXFONT_DEFMETRIC(199),
+#endif
+#if NXFONT_MIN8BIT <= 200 && NXFONT_MAX8BIT >= 200
+NXFONT_DEFMETRIC(200),
+#endif
+#if NXFONT_MIN8BIT <= 201 && NXFONT_MAX8BIT >= 201
+NXFONT_DEFMETRIC(201),
+#endif
+#if NXFONT_MIN8BIT <= 202 && NXFONT_MAX8BIT >= 202
+NXFONT_DEFMETRIC(202),
+#endif
+#if NXFONT_MIN8BIT <= 203 && NXFONT_MAX8BIT >= 203
+NXFONT_DEFMETRIC(203),
+#endif
+#if NXFONT_MIN8BIT <= 204 && NXFONT_MAX8BIT >= 204
+NXFONT_DEFMETRIC(204),
+#endif
+#if NXFONT_MIN8BIT <= 205 && NXFONT_MAX8BIT >= 205
+NXFONT_DEFMETRIC(205),
+#endif
+#if NXFONT_MIN8BIT <= 206 && NXFONT_MAX8BIT >= 206
+NXFONT_DEFMETRIC(206),
+#endif
+#if NXFONT_MIN8BIT <= 207 && NXFONT_MAX8BIT >= 207
+NXFONT_DEFMETRIC(207),
+#endif
+#if NXFONT_MIN8BIT <= 208 && NXFONT_MAX8BIT >= 208
+NXFONT_DEFMETRIC(208),
+#endif
+#if NXFONT_MIN8BIT <= 209 && NXFONT_MAX8BIT >= 209
+NXFONT_DEFMETRIC(209),
+#endif
+#if NXFONT_MIN8BIT <= 210 && NXFONT_MAX8BIT >= 210
+NXFONT_DEFMETRIC(210),
+#endif
+#if NXFONT_MIN8BIT <= 211 && NXFONT_MAX8BIT >= 211
+NXFONT_DEFMETRIC(211),
+#endif
+#if NXFONT_MIN8BIT <= 212 && NXFONT_MAX8BIT >= 212
+NXFONT_DEFMETRIC(212),
+#endif
+#if NXFONT_MIN8BIT <= 213 && NXFONT_MAX8BIT >= 213
+NXFONT_DEFMETRIC(213),
+#endif
+#if NXFONT_MIN8BIT <= 214 && NXFONT_MAX8BIT >= 214
+NXFONT_DEFMETRIC(214),
+#endif
+#if NXFONT_MIN8BIT <= 215 && NXFONT_MAX8BIT >= 215
+NXFONT_DEFMETRIC(215),
+#endif
+#if NXFONT_MIN8BIT <= 216 && NXFONT_MAX8BIT >= 216
+NXFONT_DEFMETRIC(216),
+#endif
+#if NXFONT_MIN8BIT <= 217 && NXFONT_MAX8BIT >= 217
+NXFONT_DEFMETRIC(217),
+#endif
+#if NXFONT_MIN8BIT <= 218 && NXFONT_MAX8BIT >= 218
+NXFONT_DEFMETRIC(218),
+#endif
+#if NXFONT_MIN8BIT <= 219 && NXFONT_MAX8BIT >= 219
+NXFONT_DEFMETRIC(219),
+#endif
+#if NXFONT_MIN8BIT <= 220 && NXFONT_MAX8BIT >= 220
+NXFONT_DEFMETRIC(220),
+#endif
+#if NXFONT_MIN8BIT <= 221 && NXFONT_MAX8BIT >= 221
+NXFONT_DEFMETRIC(221),
+#endif
+#if NXFONT_MIN8BIT <= 222 && NXFONT_MAX8BIT >= 222
+NXFONT_DEFMETRIC(222),
+#endif
+#if NXFONT_MIN8BIT <= 223 && NXFONT_MAX8BIT >= 223
+NXFONT_DEFMETRIC(223),
+#endif
+#if NXFONT_MIN8BIT <= 224 && NXFONT_MAX8BIT >= 224
+NXFONT_DEFMETRIC(224),
+#endif
+#if NXFONT_MIN8BIT <= 225 && NXFONT_MAX8BIT >= 225
+NXFONT_DEFMETRIC(225),
+#endif
+#if NXFONT_MIN8BIT <= 226 && NXFONT_MAX8BIT >= 226
+NXFONT_DEFMETRIC(226),
+#endif
+#if NXFONT_MIN8BIT <= 227 && NXFONT_MAX8BIT >= 227
+NXFONT_DEFMETRIC(227),
+#endif
+#if NXFONT_MIN8BIT <= 228 && NXFONT_MAX8BIT >= 228
+NXFONT_DEFMETRIC(228),
+#endif
+#if NXFONT_MIN8BIT <= 229 && NXFONT_MAX8BIT >= 229
+NXFONT_DEFMETRIC(229),
+#endif
+#if NXFONT_MIN8BIT <= 230 && NXFONT_MAX8BIT >= 230
+NXFONT_DEFMETRIC(230),
+#endif
+#if NXFONT_MIN8BIT <= 231 && NXFONT_MAX8BIT >= 231
+NXFONT_DEFMETRIC(231),
+#endif
+#if NXFONT_MIN8BIT <= 232 && NXFONT_MAX8BIT >= 232
+NXFONT_DEFMETRIC(232),
+#endif
+#if NXFONT_MIN8BIT <= 233 && NXFONT_MAX8BIT >= 233
+NXFONT_DEFMETRIC(233),
+#endif
+#if NXFONT_MIN8BIT <= 234 && NXFONT_MAX8BIT >= 234
+NXFONT_DEFMETRIC(234),
+#endif
+#if NXFONT_MIN8BIT <= 235 && NXFONT_MAX8BIT >= 235
+NXFONT_DEFMETRIC(235),
+#endif
+#if NXFONT_MIN8BIT <= 236 && NXFONT_MAX8BIT >= 236
+NXFONT_DEFMETRIC(236),
+#endif
+#if NXFONT_MIN8BIT <= 237 && NXFONT_MAX8BIT >= 237
+NXFONT_DEFMETRIC(237),
+#endif
+#if NXFONT_MIN8BIT <= 238 && NXFONT_MAX8BIT >= 238
+NXFONT_DEFMETRIC(238),
+#endif
+#if NXFONT_MIN8BIT <= 239 && NXFONT_MAX8BIT >= 239
+NXFONT_DEFMETRIC(239),
+#endif
+#if NXFONT_MIN8BIT <= 240 && NXFONT_MAX8BIT >= 240
+NXFONT_DEFMETRIC(240),
+#endif
+#if NXFONT_MIN8BIT <= 241 && NXFONT_MAX8BIT >= 241
+NXFONT_DEFMETRIC(241),
+#endif
+#if NXFONT_MIN8BIT <= 242 && NXFONT_MAX8BIT >= 242
+NXFONT_DEFMETRIC(242),
+#endif
+#if NXFONT_MIN8BIT <= 243 && NXFONT_MAX8BIT >= 243
+NXFONT_DEFMETRIC(243),
+#endif
+#if NXFONT_MIN8BIT <= 244 && NXFONT_MAX8BIT >= 244
+NXFONT_DEFMETRIC(244),
+#endif
+#if NXFONT_MIN8BIT <= 245 && NXFONT_MAX8BIT >= 245
+NXFONT_DEFMETRIC(245),
+#endif
+#if NXFONT_MIN8BIT <= 246 && NXFONT_MAX8BIT >= 246
+NXFONT_DEFMETRIC(246),
+#endif
+#if NXFONT_MIN8BIT <= 247 && NXFONT_MAX8BIT >= 247
+NXFONT_DEFMETRIC(247),
+#endif
+#if NXFONT_MIN8BIT <= 248 && NXFONT_MAX8BIT >= 248
+NXFONT_DEFMETRIC(248),
+#endif
+#if NXFONT_MIN8BIT <= 249 && NXFONT_MAX8BIT >= 249
+NXFONT_DEFMETRIC(249),
+#endif
+#if NXFONT_MIN8BIT <= 250 && NXFONT_MAX8BIT >= 250
+NXFONT_DEFMETRIC(250),
+#endif
+#if NXFONT_MIN8BIT <= 251 && NXFONT_MAX8BIT >= 251
+NXFONT_DEFMETRIC(251),
+#endif
+#if NXFONT_MIN8BIT <= 252 && NXFONT_MAX8BIT >= 252
+NXFONT_DEFMETRIC(252),
+#endif
+#if NXFONT_MIN8BIT <= 253 && NXFONT_MAX8BIT >= 253
+NXFONT_DEFMETRIC(253),
+#endif
+#if NXFONT_MIN8BIT <= 254 && NXFONT_MAX8BIT >= 254
+NXFONT_DEFMETRIC(254),
+#endif
+#if NXFONT_MIN8BIT <= 255 && NXFONT_MAX8BIT >= 255
+NXFONT_DEFMETRIC(255),
+#endif
+};
+#endif
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+const struct nx_fontpackage_s NXF_SYMNAME(NXFONTS_PREFIX,package) =
+{
+ NXFONT_ID, /* The font ID */
+ { /* Font set metrics: */
+ NXFONT_MAXHEIGHT, /* Max. height of a glyph in rows */
+ NXFONT_MAXWIDTH, /* Max. width of a glyph in pixels */
+ CONFIG_NXFONTS_CHARBITS, /* Max number of bits per character code */
+ NXFONT_SPACEWIDTH, /* The width of a space in pixels */
+ },
+ { /* Fonts for 7-bit encoding */
+ NXFONT_MIN7BIT, /* First glyph code */
+ NXFONT_N7BITFONTS, /* Number of bitmap glyphs */
+ NXF_SYMNAME(NXFONTS_PREFIX,7bitmaps) /* List of glyphs */
+ }
+#if CONFIG_NXFONTS_CHARBITS >= 8
+, { /* Fonts for 8-bit encoding */
+ NXFONT_MIN8BIT, /* First glyph code */
+ NXFONT_N8BITFONTS, /* Number of bitmap glyphs */
+ NXF_SYMNAME(NXFONTS_PREFIX,8bitmaps) /* List of glyphs */
+ }
+#endif
+};
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
diff --git a/nuttx/graphics/nxfonts/nxfonts_convert.c b/nuttx/graphics/nxfonts/nxfonts_convert.c
new file mode 100644
index 000000000..00cd61a6c
--- /dev/null
+++ b/nuttx/graphics/nxfonts/nxfonts_convert.c
@@ -0,0 +1,290 @@
+/****************************************************************************
+ * graphics/nxfonts/nxfonts_convert.c
+ *
+ * Copyright (C) 2008-2010 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT}
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING}
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdint.h>
+#include <stddef.h>
+#include <debug.h>
+
+#include <nuttx/nx/nxglib.h>
+#include <nuttx/nx/nxfonts.h>
+
+#include "nxfonts_internal.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/* Make sure the bits-per-pixel value has been set */
+
+#ifndef NXFONTS_BITSPERPIXEL
+# error "NXFONTS_BITSPERPIXEL must be defined on the command line"
+#endif
+
+/* Set up bit blit macros for this BPP */
+
+#if NXFONTS_BITSPERPIXEL == 1
+
+# define NXF_PIXELMASK 0x01
+# define NXF_SCALEX(x) ((x) >> 3)
+# define NXF_PIXEL_T uint8_t
+# define NXF_MULTIPIXEL(p) ((p) ? 0xff : 0x00)
+
+#elif NXFONTS_BITSPERPIXEL == 2
+
+# define NXF_PIXELMASK 0x03
+# define NXF_SCALEX(x) ((x) >> 2)
+# define NXF_PIXEL_T uint8_t
+# define NXF_MULTIPIXEL(p) ((uint8_t)(p) << 6 | (uint8_t)(p) << 4 | (uint8_t)(p) << 2 | (p))
+
+#elif NXFONTS_BITSPERPIXEL == 4
+
+# define NXF_PIXELMASK 0x0f
+# define NXF_SCALEX(x) ((x) >> 1)
+# define NXF_PIXEL_T uint8_t
+# define NXF_MULTIPIXEL(p) ((uint8_t)(p) << 4 | (p))
+
+#elif NXFONTS_BITSPERPIXEL == 8
+
+# define NXF_SCALEX(x) (x)
+# define NXF_PIXEL_T uint8_t
+
+#elif NXFONTS_BITSPERPIXEL == 16
+
+# define NXF_SCALEX(x) ((x) << 1)
+# define NXF_PIXEL_T uint16_t
+
+#elif NXFONTS_BITSPERPIXEL == 24
+
+# define NXF_SCALEX(x) (((x) << 1) + (x))
+# define NXF_PIXEL_T uint32_t
+
+#elif NXFONTS_BITSPERPIXEL == 32
+
+# define NXF_SCALEX(x) ((x) << 2)
+# define NXF_PIXEL_T uint32_t
+
+#endif
+
+#if NXFONTS_BITSPERPIXEL < 8
+# ifdef CONFIG_NX_PACKEDMSFIRST
+# define NXF_INITMASK (NXF_PIXELMASK << (8 - NXFONTS_BITSPERPIXEL))
+# else
+# define NXF_INITMASK NXF_PIXELMASK
+# endif
+#endif
+
+/* Form a function name by concatenating two strings */
+
+#define _NXF_FUNCNAME(a,b) a ## b
+#define NXF_FUNCNAME(a,b) _NXF_FUNCNAME(a,b)
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxf_convert_*bpp
+ *
+ * Description:
+ * Convert the 1BPP font to a new pixel depth
+ *
+ * Input Parameters:
+ * dest - The destination buffer provided by the caller.
+ * height - The max height of the returned char in rows
+ * width - The max width of the returned char in pixels
+ * stride - The width of the destination buffer in bytes
+ * bm - Describes the character glyph to convert
+ * color - The color to use for '1' bits in the font bitmap
+ * (0 bits are transparent)
+ *
+ * Returned Value:
+ * OK on Success, ERROR: on failure with errno set appropriately.
+ * (never fails)
+ *
+ ****************************************************************************/
+
+int NXF_FUNCNAME(nxf_convert,NXFONTS_SUFFIX)
+(FAR NXF_PIXEL_T *dest, uint16_t height, uint16_t width, uint16_t stride,
+ FAR const struct nx_fontbitmap_s *bm, nxgl_mxpixel_t color)
+{
+ FAR uint8_t *line;
+ FAR NXF_PIXEL_T *dptr;
+ FAR const uint8_t *sptr;
+ uint8_t bmbyte;
+ int bmbit;
+ int row;
+ int col;
+ int bmndx;
+
+#if NXFONTS_BITSPERPIXEL < 8
+ NXF_PIXEL_T mpixel;
+ NXF_PIXEL_T mask;
+ NXF_PIXEL_T pixel;
+ int nbits;
+#endif
+
+ /* Get the starting position */
+
+ line = (uint8_t*)dest + bm->metric.yoffset * stride + NXF_SCALEX(bm->metric.xoffset);
+
+ /* Then copy the font */
+
+ height = ngl_min(bm->metric.height, height - bm->metric.yoffset);
+ width = ngl_min(bm->metric.width, width - bm->metric.xoffset);
+
+ /* Render each row of the glyph */
+
+ sptr = bm->bitmap;
+#if NXFONTS_BITSPERPIXEL < 8
+ mpixel = NXF_MULTIPIXEL(color);
+
+ /* Handle each row in both the input and output */
+
+ for (row = 0; row < height; row++)
+ {
+ /* Process each byte in the glyph row */
+
+ col = 0;
+ dptr = (FAR NXF_PIXEL_T*)line;
+ pixel = *dptr;
+ mask = NXF_INITMASK;
+ nbits = 0;
+
+ for (bmndx = 0; bmndx < bm->metric.stride && col < width; bmndx++)
+ {
+ bmbyte = *sptr++;
+
+ /* Process each bit in one byte */
+
+ for (bmbit = 7; bmbit >= 0 && col < width; bmbit--, col++)
+ {
+ /* Is the bit set? */
+
+ if (bmbyte & (1 << bmbit))
+ {
+ /* Yes.. set the bit to 'color' in the output */
+
+ pixel = ((pixel & ~mask) | (mpixel & mask));
+ }
+
+#ifdef CONFIG_NX_PACKEDMSFIRST
+ mask >>= NXFONTS_BITSPERPIXEL;
+#else
+ mask <<= NXFONTS_BITSPERPIXEL;
+#endif
+ nbits += NXFONTS_BITSPERPIXEL;
+ if (nbits >= 8)
+ {
+ *dptr++ = pixel;
+ pixel = *dptr;
+ mask = NXF_INITMASK;
+ nbits = 0;
+ }
+ }
+ }
+
+ /* The entire glyph row has been rendered. Handle any fractional bytes at
+ * the end of the row
+ */
+
+ if (nbits > 0)
+ {
+ *dptr = pixel;
+ }
+
+ /* Point to the beginning of the next row */
+
+ line += stride;
+ }
+#else
+ /* Handle each row in both the input and output */
+
+ for (row = 0; row < height; row++)
+ {
+ /* Process each byte in the glyph */
+
+ col = 0;
+ dptr = (FAR NXF_PIXEL_T*)line;
+
+ for (bmndx = 0; bmndx < bm->metric.stride && col < width; bmndx++)
+ {
+ bmbyte = *sptr++;
+
+ /* Process each bit in the byte */
+
+ for (bmbit = 7; bmbit >= 0 && col < width; bmbit--, col++)
+ {
+ /* Is the bit set? */
+
+ if (bmbyte & (1 << bmbit))
+ {
+ /* Yes.. set the bit to 'color' in the output */
+
+ *dptr++ = color;
+ }
+ else
+ {
+ /* No... keep the background color in the output */
+
+ dptr++;
+ }
+ }
+ }
+
+ /* Advance to the beginning of the next line in the destination */
+
+ line += stride;
+ }
+#endif
+ return OK;
+}
diff --git a/nuttx/graphics/nxfonts/nxfonts_getfont.c b/nuttx/graphics/nxfonts/nxfonts_getfont.c
new file mode 100644
index 000000000..e17d3be31
--- /dev/null
+++ b/nuttx/graphics/nxfonts/nxfonts_getfont.c
@@ -0,0 +1,411 @@
+/****************************************************************************
+ * graphics/nxfonts/nxfonts_getfont.c
+ *
+ * Copyright (C) 2008-2009, 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT}
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING}
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdint.h>
+#include <stddef.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxfonts.h>
+
+#include "nxfonts_internal.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/* SANS */
+
+#ifdef CONFIG_NXFONT_SANS17X22
+extern const struct nx_fontpackage_s g_sans17x22_package;
+#endif
+
+#ifdef CONFIG_NXFONT_SANS20X26
+extern const struct nx_fontpackage_s g_sans20x26_package;
+#endif
+
+#ifdef CONFIG_NXFONT_SANS23X27
+extern const struct nx_fontpackage_s g_sans23x27_package;
+#endif
+
+#ifdef CONFIG_NXFONT_SANS22X29
+extern const struct nx_fontpackage_s g_sans22x29_package;
+#endif
+
+#ifdef CONFIG_NXFONT_SANS28X37
+extern const struct nx_fontpackage_s g_sans28x37_package;
+#endif
+
+#ifdef CONFIG_NXFONT_SANS39X48
+extern const struct nx_fontpackage_s g_sans39x48_package;
+#endif
+
+/* SANS-BOLD */
+
+#ifdef CONFIG_NXFONT_SANS17X23B
+extern const struct nx_fontpackage_s g_sans17x23b_package;
+#endif
+
+#ifdef CONFIG_NXFONT_SANS20X27B
+extern const struct nx_fontpackage_s g_sans20x27b_package;
+#endif
+
+#ifdef CONFIG_NXFONT_SANS22X29B
+extern const struct nx_fontpackage_s g_sans22x29b_package;
+#endif
+
+#ifdef CONFIG_NXFONT_SANS28X37B
+extern const struct nx_fontpackage_s g_sans28x37b_package;
+#endif
+
+#ifdef CONFIG_NXFONT_SANS40X49B
+extern const struct nx_fontpackage_s g_sans40x49b_package;
+#endif
+
+/* SERIF */
+
+#ifdef CONFIG_NXFONT_SERIF22X29
+extern const struct nx_fontpackage_s g_serif22x29_package;
+#endif
+
+#ifdef CONFIG_NXFONT_SERIF29X37
+extern const struct nx_fontpackage_s g_serif29x37_package;
+#endif
+
+#ifdef CONFIG_NXFONT_SERIF38X48
+extern const struct nx_fontpackage_s g_serif38x48_package;
+#endif
+
+/* SERIF-BOLD */
+
+#ifdef CONFIG_NXFONT_SERIF22X28B
+extern const struct nx_fontpackage_s g_serif22x28b_package;
+#endif
+
+#ifdef CONFIG_NXFONT_SERIF27X38B
+extern const struct nx_fontpackage_s g_serif27x38b_package;
+#endif
+
+#ifdef CONFIG_NXFONT_SERIF38X49
+extern const struct nx_fontpackage_s g_serif38x49b_package;
+#endif
+
+static FAR const struct nx_fontpackage_s *g_fontpackages[] =
+{
+
+/* SANS */
+
+#ifdef CONFIG_NXFONT_SANS17X22
+ &g_sans17x22_package,
+#endif
+
+#ifdef CONFIG_NXFONT_SANS20X26
+ &g_sans20x26_package,
+#endif
+
+#ifdef CONFIG_NXFONT_SANS23X27
+ &g_sans23x27_package,
+#endif
+
+#ifdef CONFIG_NXFONT_SANS22X29
+ &g_sans22x29_package,
+#endif
+
+#ifdef CONFIG_NXFONT_SANS28X37
+ &g_sans28x37_package,
+#endif
+
+#ifdef CONFIG_NXFONT_SANS39X48
+ &g_sans39x48_package,
+#endif
+
+/* SANS-BOLD */
+
+#ifdef CONFIG_NXFONT_SANS17X23B
+ &g_sans17x23b_package,
+#endif
+
+#ifdef CONFIG_NXFONT_SANS20X27B
+ &g_sans20x27b_package,
+#endif
+
+#ifdef CONFIG_NXFONT_SANS22X29B
+ &g_sans22x29b_package,
+#endif
+
+#ifdef CONFIG_NXFONT_SANS28X37B
+ &g_sans28x37b_package,
+#endif
+
+#ifdef CONFIG_NXFONT_SANS40X49B
+ &g_sans40x49b_package,
+#endif
+
+/* SERIF */
+
+#ifdef CONFIG_NXFONT_SERIF22X29
+ &g_serif22x29_package,
+#endif
+
+#ifdef CONFIG_NXFONT_SERIF29X37
+ &g_serif29x37_package,
+#endif
+
+#ifdef CONFIG_NXFONT_SERIF38X48
+ &g_serif38x48_package,
+#endif
+
+/* SERIF-BOLD */
+
+#ifdef CONFIG_NXFONT_SERIF22X28B
+ &g_serif22x28b_package,
+#endif
+
+#ifdef CONFIG_NXFONT_SERIF27X38B
+ &g_serif27x38b_package,
+#endif
+
+#ifdef CONFIG_NXFONT_SERIF38X49B
+ &g_serif38x49b_package,
+#endif
+
+ NULL
+};
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxf_getglyphset
+ *
+ * Description:
+ * Return information about the font set containtined he selected
+ * character encoding.
+ *
+ * Input Parameters:
+ * ch: character code
+ * package: The selected font package
+ *
+ ****************************************************************************/
+
+static inline FAR const struct nx_fontset_s *
+ nxf_getglyphset(uint16_t ch, FAR const struct nx_fontpackage_s *package)
+{
+ FAR const struct nx_fontset_s *fontset;
+
+ /* Select the 7- or 8-bit font set */
+
+ if (ch < 128)
+ {
+ /* Select the 7-bit font set */
+
+ fontset = &package->font7;
+ }
+ else if (ch < 256)
+ {
+#if CONFIG_NXFONTS_CHARBITS >= 8
+ /* Select the 8-bit font set */
+
+ fontset = &package->font8;
+#else
+ gdbg("8-bit font support disabled: %d\n", ch);
+ return NULL;
+#endif
+ }
+ else
+ {
+ /* Someday, perhaps 16-bit fonts will go here */
+
+ gdbg("16-bit font not currently supported\n");
+ return NULL;
+ }
+
+ /* Then verify that the character actually resides in the font */
+
+ if (ch >= fontset->first && ch < fontset->first +fontset->nchars)
+ {
+ return fontset;
+ }
+
+ gdbg("No bitmap for code %02x\n", ch);
+ return NULL;
+}
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxf_getfonthandle
+ *
+ * Description:
+ * Given a numeric font ID, return a handle that may be subsequently be
+ * used to access the font data sets.
+ *
+ * Input Parameters:
+ * fontid: Identifies the font set to get
+ *
+ ****************************************************************************/
+
+NXHANDLE nxf_getfonthandle(enum nx_fontid_e fontid)
+{
+ FAR const struct nx_fontpackage_s **pkglist;
+ FAR const struct nx_fontpackage_s *package;
+ FAR const struct nx_fontpackage_s *defpkg = NULL;
+
+ /* Handle the default font package */
+
+ if (fontid == FONTID_DEFAULT)
+ {
+ fontid = NXFONT_DEFAULT;
+ }
+
+ /* Then search for the font package with this ID */
+
+ for (pkglist = g_fontpackages; *pkglist; pkglist++)
+ {
+ /* Is this the package with the matching font ID? */
+
+ package = *pkglist;
+ if (package->id == fontid)
+ {
+ /* Yes.. return a pointer to the package as the handle */
+
+ return (NXHANDLE)package;
+ }
+
+ /* No.. is it the default font? */
+
+ else if (package->id == NXFONT_DEFAULT)
+ {
+ /* Yes.. save the pointer to the default font. We will return the
+ * default font if the requested font cannot be found.
+ */
+
+ defpkg = package;
+ }
+ }
+
+ /* Return a pointer to the default font as the handle. */
+
+ return (NXHANDLE)defpkg;
+}
+
+/****************************************************************************
+ * Name: nxf_getfontset
+ *
+ * Description:
+ * Return information about the current font set
+ *
+ * Input Parameters:
+ * handle: A font handle previously returned by nxf_getfonthandle
+ *
+ ****************************************************************************/
+
+FAR const struct nx_font_s *nxf_getfontset(NXHANDLE handle)
+{
+ FAR const struct nx_fontpackage_s *package =
+ (FAR const struct nx_fontpackage_s *)handle;
+
+ /* Find the font package associated with this font ID */
+
+ if (package)
+ {
+ /* Found... return the font set metrics for this font package */
+
+ return &package->metrics;
+ }
+
+ return NULL;
+}
+
+/****************************************************************************
+ * Name: nxf_getbitmap
+ *
+ * Description:
+ * Return font bitmap information for the selected character encoding.
+ *
+ * Input Parameters:
+ * handle: A font handle previously returned by nxf_getfonthandle
+ * ch: Character code whose bitmap is requested
+ *
+ * Returned Value:
+ * An instance of struct nx_fontbitmap_s describing the glyph.
+ *
+ ****************************************************************************/
+
+FAR const struct nx_fontbitmap_s *nxf_getbitmap(NXHANDLE handle, uint16_t ch)
+{
+ FAR const struct nx_fontpackage_s *package =
+ (FAR const struct nx_fontpackage_s *)handle;
+ FAR const struct nx_fontset_s *fontset;
+ FAR const struct nx_fontbitmap_s *bm = NULL;
+
+ /* Verify that the handle is a font package */
+
+ if (package)
+ {
+ /* Now get the fontset from the package */
+
+ fontset = nxf_getglyphset(ch, package);
+ if (fontset)
+ {
+ /* Then get the bitmap from the font set */
+
+ bm = &fontset->bitmap[ch - fontset->first];
+ }
+ }
+
+ return bm;
+}
diff --git a/nuttx/graphics/nxfonts/nxfonts_internal.h b/nuttx/graphics/nxfonts/nxfonts_internal.h
new file mode 100644
index 000000000..fa7864170
--- /dev/null
+++ b/nuttx/graphics/nxfonts/nxfonts_internal.h
@@ -0,0 +1,88 @@
+/****************************************************************************
+ * graphics/nxfonts/nxfonts_internal.h
+ *
+ * Copyright (C) 2008-2009, 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+#ifndef __GRAPHICS_NXFONTS_NXFONTS_INTERNAL_H
+#define __GRAPHICS_NXFONTS_NXFONTS_INTERNAL_H
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <nuttx/nx/nxfonts.h>
+
+/****************************************************************************
+ * Pre-processor definitions
+ ****************************************************************************/
+
+/* Configuration ************************************************************/
+
+#ifndef CONFIG_NXFONTS_CHARBITS
+# define CONFIG_NXFONTS_CHARBITS 7
+#endif
+
+/****************************************************************************
+ * Public Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+# define EXTERN extern "C"
+extern "C" {
+#else
+# define EXTERN extern
+#endif
+
+EXTERN struct nx_fontset_s g_7bitfonts;
+#if CONFIG_NXFONTS_CHARBITS >= 8
+EXTERN struct nx_fontset_s g_8bitfonts;
+#endif
+EXTERN struct nx_font_s g_fonts;
+
+/****************************************************************************
+ * Public Function Prototypes
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* __GRAPHICS_NXFONTS_NXFONTS_INTERNAL_H */
diff --git a/nuttx/graphics/nxfonts/nxfonts_sans17x22.h b/nuttx/graphics/nxfonts/nxfonts_sans17x22.h
new file mode 100644
index 000000000..cea027447
--- /dev/null
+++ b/nuttx/graphics/nxfonts/nxfonts_sans17x22.h
@@ -0,0 +1,849 @@
+/****************************************************************************
+ * graphics/nxfonts/nxfonts_serif30x26.h
+ *
+ * Copyright (C) 2011-2012 NX Engineering, S.A., All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT}
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING}
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+#ifndef __GRAPHICS_NXFONTS_NXFONTS_SANS17X22_H
+#define __GRAPHICS_NXFONTS_NXFONTS_SANS17X22_H
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/* Font ID */
+
+#define NXFONT_ID FONTID_SANS17X22
+
+/* Ranges of 7-bit and 8-bit fonts */
+
+#define NXFONT_MIN7BIT 33
+#define NXFONT_MAX7BIT 126
+
+#define NXFONT_MIN8BIT 161
+#define NXFONT_MAX8BIT 255
+
+/* Maximum height and width of any glyph in the set */
+
+#define NXFONT_MAXHEIGHT 22
+#define NXFONT_MAXWIDTH 17
+
+/* The width of a space */
+
+#define NXFONT_SPACEWIDTH 4
+
+/* exclam (33) */
+#define NXFONT_METRICS_33 {1, 1, 11, 2, 6, 0}
+#define NXFONT_BITMAP_33 {0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x0, 0x80, 0x80}
+
+/* quotedbl (34) */
+#define NXFONT_METRICS_34 {1, 3, 3, 1, 6, 0}
+#define NXFONT_BITMAP_34 {0xa0, 0xa0, 0xa0}
+
+/* numbersign (35) */
+#define NXFONT_METRICS_35 {1, 7, 10, 0, 7, 0}
+#define NXFONT_BITMAP_35 {0x14, 0x14, 0x14, 0x7e, 0x28, 0x28, 0xfc, 0x50, 0x50, 0x50}
+
+/* dollar (36) */
+#define NXFONT_METRICS_36 {1, 7, 14, 0, 5, 0}
+#define NXFONT_BITMAP_36 {0x10, 0x7c, 0x92, 0x92, 0x90, 0x50, 0x38, 0x14, 0x12, 0x92, 0x92, 0x7c, 0x10, 0x10}
+
+/* percent (37) */
+#define NXFONT_METRICS_37 {2, 11, 11, 0, 6, 0}
+#define NXFONT_BITMAP_37 {0x70, 0x80, 0x89, 0x0, 0x89, 0x0, 0x72, 0x0, 0x2, 0x0, 0x4, 0x0, 0x8, 0x0, 0x9, 0xc0, 0x12, 0x20, 0x12, 0x20, 0x21, 0xc0}
+
+/* ampersand (38) */
+#define NXFONT_METRICS_38 {1, 8, 10, 1, 7, 0}
+#define NXFONT_BITMAP_38 {0x30, 0x48, 0x48, 0x30, 0x20, 0x52, 0x8a, 0x84, 0x8a, 0x71}
+
+/* quotesingle (39) */
+#define NXFONT_METRICS_39 {1, 1, 3, 1, 6, 0}
+#define NXFONT_BITMAP_39 {0x80, 0x80, 0x80}
+
+/* parenleft (40) */
+#define NXFONT_METRICS_40 {1, 3, 14, 1, 6, 0}
+#define NXFONT_BITMAP_40 {0x20, 0x40, 0x40, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20}
+
+/* parenright (41) */
+#define NXFONT_METRICS_41 {1, 3, 14, 1, 6, 0}
+#define NXFONT_BITMAP_41 {0x80, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x40, 0x40, 0x80}
+
+/* asterisk (42) */
+#define NXFONT_METRICS_42 {1, 5, 5, 1, 6, 0}
+#define NXFONT_BITMAP_42 {0x20, 0xa8, 0x70, 0xa8, 0x20}
+
+/* plus (43) */
+#define NXFONT_METRICS_43 {1, 7, 7, 1, 9, 0}
+#define NXFONT_BITMAP_43 {0x10, 0x10, 0x10, 0xfe, 0x10, 0x10, 0x10}
+
+/* comma (44) */
+#define NXFONT_METRICS_44 {1, 2, 4, 0, 15, 0}
+#define NXFONT_BITMAP_44 {0x40, 0x40, 0x40, 0x80}
+
+/* hyphen (45) */
+#define NXFONT_METRICS_45 {1, 3, 1, 0, 12, 0}
+#define NXFONT_BITMAP_45 {0xe0}
+
+/* period (46) */
+#define NXFONT_METRICS_46 {1, 1, 2, 1, 15, 0}
+#define NXFONT_BITMAP_46 {0x80, 0x80}
+
+/* slash (47) */
+#define NXFONT_METRICS_47 {1, 4, 11, 0, 6, 0}
+#define NXFONT_BITMAP_47 {0x10, 0x10, 0x20, 0x20, 0x20, 0x40, 0x40, 0x40, 0x80, 0x80, 0x80}
+
+/* zero (48) */
+#define NXFONT_METRICS_48 {1, 6, 11, 1, 6, 0}
+#define NXFONT_BITMAP_48 {0x78, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x78}
+
+/* one (49) */
+#define NXFONT_METRICS_49 {1, 3, 11, 2, 6, 0}
+#define NXFONT_BITMAP_49 {0x20, 0xe0, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20}
+
+/* two (50) */
+#define NXFONT_METRICS_50 {1, 6, 11, 1, 6, 0}
+#define NXFONT_BITMAP_50 {0x78, 0x84, 0x84, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80, 0x80, 0xfc}
+
+/* three (51) */
+#define NXFONT_METRICS_51 {1, 6, 11, 1, 6, 0}
+#define NXFONT_BITMAP_51 {0x78, 0x84, 0x84, 0x4, 0x4, 0x38, 0x4, 0x4, 0x84, 0x84, 0x78}
+
+/* four (52) */
+#define NXFONT_METRICS_52 {1, 7, 11, 1, 6, 0}
+#define NXFONT_BITMAP_52 {0x4, 0xc, 0x14, 0x24, 0x44, 0x84, 0x84, 0xfe, 0x4, 0x4, 0x4}
+
+/* five (53) */
+#define NXFONT_METRICS_53 {1, 6, 11, 1, 6, 0}
+#define NXFONT_BITMAP_53 {0xfc, 0x80, 0x80, 0x80, 0xf8, 0x4, 0x4, 0x4, 0x84, 0x84, 0x78}
+
+/* six (54) */
+#define NXFONT_METRICS_54 {1, 6, 11, 1, 6, 0}
+#define NXFONT_BITMAP_54 {0x78, 0x84, 0x80, 0x80, 0xb8, 0xc4, 0x84, 0x84, 0x84, 0x84, 0x78}
+
+/* seven (55) */
+#define NXFONT_METRICS_55 {1, 6, 11, 1, 6, 0}
+#define NXFONT_BITMAP_55 {0xfc, 0x4, 0x8, 0x8, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x40}
+
+/* eight (56) */
+#define NXFONT_METRICS_56 {1, 6, 11, 1, 6, 0}
+#define NXFONT_BITMAP_56 {0x78, 0x84, 0x84, 0x84, 0x84, 0x78, 0x84, 0x84, 0x84, 0x84, 0x78}
+
+/* nine (57) */
+#define NXFONT_METRICS_57 {1, 6, 11, 1, 6, 0}
+#define NXFONT_BITMAP_57 {0x78, 0x84, 0x84, 0x84, 0x84, 0x7c, 0x4, 0x4, 0x84, 0x84, 0x78}
+
+/* colon (58) */
+#define NXFONT_METRICS_58 {1, 1, 8, 1, 9, 0}
+#define NXFONT_BITMAP_58 {0x80, 0x80, 0x0, 0x0, 0x0, 0x0, 0x80, 0x80}
+
+/* semicolon (59) */
+#define NXFONT_METRICS_59 {1, 2, 10, 0, 9, 0}
+#define NXFONT_BITMAP_59 {0x40, 0x40, 0x0, 0x0, 0x0, 0x0, 0x40, 0x40, 0x40, 0x80}
+
+/* less (60) */
+#define NXFONT_METRICS_60 {1, 6, 5, 1, 10, 0}
+#define NXFONT_BITMAP_60 {0xc, 0x30, 0xc0, 0x30, 0xc}
+
+/* equal (61) */
+#define NXFONT_METRICS_61 {1, 6, 3, 1, 11, 0}
+#define NXFONT_BITMAP_61 {0xfc, 0x0, 0xfc}
+
+/* greater (62) */
+#define NXFONT_METRICS_62 {1, 6, 5, 1, 10, 0}
+#define NXFONT_BITMAP_62 {0xc0, 0x30, 0xc, 0x30, 0xc0}
+
+/* question (63) */
+#define NXFONT_METRICS_63 {1, 6, 11, 1, 6, 0}
+#define NXFONT_BITMAP_63 {0x30, 0xcc, 0x84, 0x84, 0x4, 0x8, 0x10, 0x20, 0x0, 0x20, 0x20}
+
+/* at (64) */
+#define NXFONT_METRICS_64 {2, 11, 12, 1, 6, 0}
+#define NXFONT_BITMAP_64 {0xf, 0x0, 0x30, 0xc0, 0x40, 0x20, 0x46, 0xa0, 0x89, 0x20, 0x91, 0x20, 0x91, 0x20, 0x93, 0x40, 0x8d, 0x80, 0x40, 0x0, 0x60, 0x80, 0x1f, 0x0}
+
+/* A (65) */
+#define NXFONT_METRICS_65 {2, 9, 11, 0, 6, 0}
+#define NXFONT_BITMAP_65 {0x8, 0x0, 0x1c, 0x0, 0x14, 0x0, 0x14, 0x0, 0x22, 0x0, 0x22, 0x0, 0x41, 0x0, 0x7f, 0x0, 0x41, 0x0, 0x80, 0x80, 0x80, 0x80}
+
+/* B (66) */
+#define NXFONT_METRICS_66 {1, 7, 11, 1, 6, 0}
+#define NXFONT_BITMAP_66 {0xfc, 0x86, 0x82, 0x82, 0x84, 0xf8, 0x84, 0x82, 0x82, 0x86, 0xfc}
+
+/* C (67) */
+#define NXFONT_METRICS_67 {1, 8, 11, 1, 6, 0}
+#define NXFONT_BITMAP_67 {0x1c, 0x63, 0x41, 0x80, 0x80, 0x80, 0x80, 0x80, 0x41, 0x63, 0x1c}
+
+/* D (68) */
+#define NXFONT_METRICS_68 {1, 8, 11, 1, 6, 0}
+#define NXFONT_BITMAP_68 {0xf8, 0x86, 0x82, 0x81, 0x81, 0x81, 0x81, 0x81, 0x82, 0x86, 0xf8}
+
+/* E (69) */
+#define NXFONT_METRICS_69 {1, 7, 11, 1, 6, 0}
+#define NXFONT_BITMAP_69 {0xfe, 0x80, 0x80, 0x80, 0x80, 0xfc, 0x80, 0x80, 0x80, 0x80, 0xfe}
+
+/* F (70) */
+#define NXFONT_METRICS_70 {1, 7, 11, 1, 6, 0}
+#define NXFONT_BITMAP_70 {0xfe, 0x80, 0x80, 0x80, 0x80, 0xfc, 0x80, 0x80, 0x80, 0x80, 0x80}
+
+/* G (71) */
+#define NXFONT_METRICS_71 {2, 9, 11, 1, 6, 0}
+#define NXFONT_BITMAP_71 {0x1e, 0x0, 0x61, 0x80, 0x40, 0x80, 0x80, 0x0, 0x80, 0x0, 0x87, 0x80, 0x80, 0x80, 0x80, 0x80, 0x40, 0x80, 0x63, 0x80, 0x1c, 0x80}
+
+/* H (72) */
+#define NXFONT_METRICS_72 {1, 8, 11, 1, 6, 0}
+#define NXFONT_BITMAP_72 {0x81, 0x81, 0x81, 0x81, 0x81, 0xff, 0x81, 0x81, 0x81, 0x81, 0x81}
+
+/* I (73) */
+#define NXFONT_METRICS_73 {1, 1, 11, 2, 6, 0}
+#define NXFONT_BITMAP_73 {0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}
+
+/* J (74) */
+#define NXFONT_METRICS_74 {1, 6, 11, 0, 6, 0}
+#define NXFONT_BITMAP_74 {0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x84, 0x84, 0x78}
+
+/* K (75) */
+#define NXFONT_METRICS_75 {1, 8, 11, 1, 6, 0}
+#define NXFONT_BITMAP_75 {0x82, 0x84, 0x88, 0x90, 0xa0, 0xe0, 0x90, 0x88, 0x84, 0x82, 0x81}
+
+/* L (76) */
+#define NXFONT_METRICS_76 {1, 6, 11, 2, 6, 0}
+#define NXFONT_BITMAP_76 {0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xfc}
+
+/* M (77) */
+#define NXFONT_METRICS_77 {2, 11, 11, 0, 6, 0}
+#define NXFONT_BITMAP_77 {0x80, 0x20, 0xc0, 0x60, 0xc0, 0x60, 0xa0, 0xa0, 0xa0, 0xa0, 0x91, 0x20, 0x91, 0x20, 0x8a, 0x20, 0x8a, 0x20, 0x84, 0x20, 0x84, 0x20}
+
+/* N (78) */
+#define NXFONT_METRICS_78 {1, 8, 11, 1, 6, 0}
+#define NXFONT_BITMAP_78 {0xc1, 0xa1, 0xa1, 0x91, 0x91, 0x89, 0x89, 0x85, 0x85, 0x83, 0x83}
+
+/* O (79) */
+#define NXFONT_METRICS_79 {2, 9, 11, 1, 6, 0}
+#define NXFONT_BITMAP_79 {0x1c, 0x0, 0x63, 0x0, 0x41, 0x0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x41, 0x0, 0x63, 0x0, 0x1c, 0x0}
+
+/* P (80) */
+#define NXFONT_METRICS_80 {1, 7, 11, 1, 6, 0}
+#define NXFONT_BITMAP_80 {0xfc, 0x86, 0x82, 0x82, 0x86, 0xfc, 0x80, 0x80, 0x80, 0x80, 0x80}
+
+/* Q (81) */
+#define NXFONT_METRICS_81 {2, 9, 11, 1, 6, 0}
+#define NXFONT_BITMAP_81 {0x1c, 0x0, 0x63, 0x0, 0x41, 0x0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x88, 0x80, 0x84, 0x80, 0x43, 0x0, 0x63, 0x0, 0x1c, 0x80}
+
+/* R (82) */
+#define NXFONT_METRICS_82 {1, 8, 11, 1, 6, 0}
+#define NXFONT_BITMAP_82 {0xfe, 0x83, 0x81, 0x81, 0x82, 0xfc, 0x82, 0x81, 0x81, 0x81, 0x81}
+
+/* S (83) */
+#define NXFONT_METRICS_83 {1, 7, 11, 1, 6, 0}
+#define NXFONT_BITMAP_83 {0x38, 0xc6, 0x82, 0x80, 0x60, 0x18, 0x6, 0x2, 0x82, 0xc6, 0x38}
+
+/* T (84) */
+#define NXFONT_METRICS_84 {2, 9, 11, 0, 6, 0}
+#define NXFONT_BITMAP_84 {0xff, 0x80, 0x8, 0x0, 0x8, 0x0, 0x8, 0x0, 0x8, 0x0, 0x8, 0x0, 0x8, 0x0, 0x8, 0x0, 0x8, 0x0, 0x8, 0x0, 0x8, 0x0}
+
+/* U (85) */
+#define NXFONT_METRICS_85 {1, 8, 11, 1, 6, 0}
+#define NXFONT_BITMAP_85 {0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x42, 0x3c}
+
+/* V (86) */
+#define NXFONT_METRICS_86 {2, 9, 11, 0, 6, 0}
+#define NXFONT_BITMAP_86 {0x80, 0x80, 0x80, 0x80, 0x41, 0x0, 0x41, 0x0, 0x63, 0x0, 0x22, 0x0, 0x22, 0x0, 0x14, 0x0, 0x14, 0x0, 0x8, 0x0, 0x8, 0x0}
+
+/* W (87) */
+#define NXFONT_METRICS_87 {2, 13, 11, 0, 6, 0}
+#define NXFONT_BITMAP_87 {0x82, 0x8, 0x82, 0x8, 0x85, 0x8, 0x45, 0x10, 0x45, 0x10, 0x45, 0x10, 0x28, 0xa0, 0x28, 0xa0, 0x28, 0xa0, 0x10, 0x40, 0x10, 0x40}
+
+/* X (88) */
+#define NXFONT_METRICS_88 {2, 9, 11, 0, 6, 0}
+#define NXFONT_BITMAP_88 {0x80, 0x80, 0x41, 0x0, 0x22, 0x0, 0x14, 0x0, 0x8, 0x0, 0x8, 0x0, 0x14, 0x0, 0x22, 0x0, 0x41, 0x0, 0x41, 0x0, 0x80, 0x80}
+
+/* Y (89) */
+#define NXFONT_METRICS_89 {2, 9, 11, 0, 6, 0}
+#define NXFONT_BITMAP_89 {0x80, 0x80, 0xc1, 0x80, 0x41, 0x0, 0x22, 0x0, 0x22, 0x0, 0x14, 0x0, 0x1c, 0x0, 0x8, 0x0, 0x8, 0x0, 0x8, 0x0, 0x8, 0x0}
+
+/* Z (90) */
+#define NXFONT_METRICS_90 {1, 7, 11, 1, 6, 0}
+#define NXFONT_BITMAP_90 {0xfe, 0x2, 0x4, 0x8, 0x18, 0x10, 0x20, 0x60, 0x40, 0x80, 0xfe}
+
+/* bracketleft (91) */
+#define NXFONT_METRICS_91 {1, 3, 14, 1, 6, 0}
+#define NXFONT_BITMAP_91 {0xe0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xe0}
+
+/* backslash (92) */
+#define NXFONT_METRICS_92 {1, 4, 11, 0, 6, 0}
+#define NXFONT_BITMAP_92 {0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10}
+
+/* bracketright (93) */
+#define NXFONT_METRICS_93 {1, 3, 14, 0, 6, 0}
+#define NXFONT_BITMAP_93 {0xe0, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xe0}
+
+/* asciicircum (94) */
+#define NXFONT_METRICS_94 {1, 5, 5, 1, 6, 0}
+#define NXFONT_BITMAP_94 {0x20, 0x50, 0x50, 0x88, 0x88}
+
+/* underscore (95) */
+#define NXFONT_METRICS_95 {1, 8, 1, 0, 19, 0}
+#define NXFONT_BITMAP_95 {0xff}
+
+/* grave (96) */
+#define NXFONT_METRICS_96 {1, 2, 2, 1, 6, 0}
+#define NXFONT_BITMAP_96 {0x80, 0x40}
+
+/* a (97) */
+#define NXFONT_METRICS_97 {1, 7, 8, 1, 9, 0}
+#define NXFONT_BITMAP_97 {0x78, 0xcc, 0x4, 0x7c, 0xc4, 0x84, 0xcc, 0x76}
+
+/* b (98) */
+#define NXFONT_METRICS_98 {1, 6, 11, 1, 6, 0}
+#define NXFONT_BITMAP_98 {0x80, 0x80, 0x80, 0xb8, 0xcc, 0x84, 0x84, 0x84, 0x84, 0xcc, 0xb8}
+
+/* c (99) */
+#define NXFONT_METRICS_99 {1, 6, 8, 1, 9, 0}
+#define NXFONT_BITMAP_99 {0x78, 0xcc, 0x80, 0x80, 0x80, 0x84, 0xcc, 0x78}
+
+/* d (100) */
+#define NXFONT_METRICS_100 {1, 6, 11, 1, 6, 0}
+#define NXFONT_BITMAP_100 {0x4, 0x4, 0x4, 0x74, 0xcc, 0x84, 0x84, 0x84, 0x84, 0xcc, 0x74}
+
+/* e (101) */
+#define NXFONT_METRICS_101 {1, 6, 8, 1, 9, 0}
+#define NXFONT_BITMAP_101 {0x78, 0xcc, 0x84, 0xfc, 0x80, 0x80, 0xcc, 0x78}
+
+/* f (102) */
+#define NXFONT_METRICS_102 {1, 4, 11, 0, 6, 0}
+#define NXFONT_BITMAP_102 {0x30, 0x40, 0x40, 0xe0, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40}
+
+/* g (103) */
+#define NXFONT_METRICS_103 {1, 6, 11, 1, 9, 0}
+#define NXFONT_BITMAP_103 {0x74, 0xcc, 0x84, 0x84, 0x84, 0x84, 0xcc, 0x74, 0x4, 0xcc, 0x78}
+
+/* h (104) */
+#define NXFONT_METRICS_104 {1, 6, 11, 1, 6, 0}
+#define NXFONT_BITMAP_104 {0x80, 0x80, 0x80, 0xb8, 0xcc, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84}
+
+/* i (105) */
+#define NXFONT_METRICS_105 {1, 1, 11, 1, 6, 0}
+#define NXFONT_BITMAP_105 {0x80, 0x80, 0x0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}
+
+/* j (106) -- NOTE: Xoffset should be -1, not 0. */
+#define NXFONT_METRICS_106 {1, 3, 14, 0, 6, 0}
+#define NXFONT_BITMAP_106 {0x20, 0x20, 0x0, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xc0}
+
+/* k (107) */
+#define NXFONT_METRICS_107 {1, 6, 11, 1, 6, 0}
+#define NXFONT_BITMAP_107 {0x80, 0x80, 0x80, 0x88, 0x90, 0xa0, 0xc0, 0xa0, 0x90, 0x88, 0x84}
+
+/* l (108) */
+#define NXFONT_METRICS_108 {1, 1, 11, 1, 6, 0}
+#define NXFONT_BITMAP_108 {0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}
+
+/* m (109) */
+#define NXFONT_METRICS_109 {2, 9, 8, 1, 9, 0}
+#define NXFONT_BITMAP_109 {0xb3, 0x0, 0xcc, 0x80, 0x88, 0x80, 0x88, 0x80, 0x88, 0x80, 0x88, 0x80, 0x88, 0x80, 0x88, 0x80}
+
+/* n (110) */
+#define NXFONT_METRICS_110 {1, 6, 8, 1, 9, 0}
+#define NXFONT_BITMAP_110 {0xb8, 0xcc, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84}
+
+/* o (111) */
+#define NXFONT_METRICS_111 {1, 6, 8, 1, 9, 0}
+#define NXFONT_BITMAP_111 {0x78, 0xcc, 0x84, 0x84, 0x84, 0x84, 0xcc, 0x78}
+
+/* p (112) */
+#define NXFONT_METRICS_112 {1, 6, 11, 1, 9, 0}
+#define NXFONT_BITMAP_112 {0xb8, 0xcc, 0x84, 0x84, 0x84, 0x84, 0xcc, 0xb8, 0x80, 0x80, 0x80}
+
+/* q (113) */
+#define NXFONT_METRICS_113 {1, 6, 11, 1, 9, 0}
+#define NXFONT_BITMAP_113 {0x74, 0xcc, 0x84, 0x84, 0x84, 0x84, 0xcc, 0x74, 0x4, 0x4, 0x4}
+
+/* r (114) */
+#define NXFONT_METRICS_114 {1, 4, 8, 1, 9, 0}
+#define NXFONT_BITMAP_114 {0xb0, 0xc0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}
+
+/* s (115) */
+#define NXFONT_METRICS_115 {1, 5, 8, 1, 9, 0}
+#define NXFONT_BITMAP_115 {0x70, 0x88, 0xc0, 0x70, 0x18, 0x8, 0x88, 0x70}
+
+/* t (116) */
+#define NXFONT_METRICS_116 {1, 4, 10, 0, 7, 0}
+#define NXFONT_BITMAP_116 {0x40, 0x40, 0xe0, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x30}
+
+/* u (117) */
+#define NXFONT_METRICS_117 {1, 6, 8, 1, 9, 0}
+#define NXFONT_BITMAP_117 {0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0xcc, 0x74}
+
+/* v (118) */
+#define NXFONT_METRICS_118 {1, 7, 8, 0, 9, 0}
+#define NXFONT_BITMAP_118 {0x82, 0x82, 0x44, 0x44, 0x44, 0x28, 0x28, 0x10}
+
+/* w (119) */
+#define NXFONT_METRICS_119 {2, 9, 8, 0, 9, 0}
+#define NXFONT_BITMAP_119 {0x88, 0x80, 0x88, 0x80, 0x88, 0x80, 0x49, 0x0, 0x49, 0x0, 0x55, 0x0, 0x22, 0x0, 0x22, 0x0}
+
+/* x (120) */
+#define NXFONT_METRICS_120 {1, 7, 8, 0, 9, 0}
+#define NXFONT_BITMAP_120 {0xc6, 0x44, 0x28, 0x10, 0x10, 0x28, 0x44, 0xc6}
+
+/* y (121) */
+#define NXFONT_METRICS_121 {1, 7, 11, 0, 9, 0}
+#define NXFONT_BITMAP_121 {0x82, 0xc2, 0x44, 0x44, 0x24, 0x28, 0x18, 0x10, 0x10, 0x30, 0x60}
+
+/* z (122) */
+#define NXFONT_METRICS_122 {1, 6, 8, 0, 9, 0}
+#define NXFONT_BITMAP_122 {0xfc, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80, 0xfc}
+
+/* braceleft (123) */
+#define NXFONT_METRICS_123 {1, 5, 14, 0, 6, 0}
+#define NXFONT_BITMAP_123 {0x18, 0x20, 0x20, 0x20, 0x20, 0x40, 0x80, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x18}
+
+/* bar (124) */
+#define NXFONT_METRICS_124 {1, 1, 14, 1, 6, 0}
+#define NXFONT_BITMAP_124 {0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}
+
+/* braceright (125) */
+#define NXFONT_METRICS_125 {1, 5, 14, 0, 6, 0}
+#define NXFONT_BITMAP_125 {0xc0, 0x20, 0x20, 0x20, 0x20, 0x10, 0x8, 0x10, 0x20, 0x20, 0x20, 0x20, 0x20, 0xc0}
+
+/* asciitilde (126) */
+#define NXFONT_METRICS_126 {1, 6, 3, 1, 11, 0}
+#define NXFONT_BITMAP_126 {0x64, 0xb4, 0x98}
+
+/* exclamdown (161) */
+#define NXFONT_METRICS_161 {1, 1, 11, 1, 9, 0}
+#define NXFONT_BITMAP_161 {0x80, 0x80, 0x0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}
+
+/* cent (162) */
+#define NXFONT_METRICS_162 {1, 6, 10, 1, 8, 0}
+#define NXFONT_BITMAP_162 {0x4, 0x78, 0xcc, 0x90, 0x90, 0xa0, 0xa4, 0xcc, 0x78, 0x80}
+
+/* sterling (163) */
+#define NXFONT_METRICS_163 {1, 7, 11, 0, 6, 0}
+#define NXFONT_BITMAP_163 {0x38, 0x44, 0x40, 0x40, 0xf8, 0x20, 0x20, 0x20, 0x40, 0x62, 0xdc}
+
+/* currency (164) */
+#define NXFONT_METRICS_164 {1, 6, 6, 1, 9, 0}
+#define NXFONT_BITMAP_164 {0x84, 0x78, 0x48, 0x48, 0x78, 0x84}
+
+/* yen (165) */
+#define NXFONT_METRICS_165 {1, 7, 11, 0, 6, 0}
+#define NXFONT_BITMAP_165 {0x82, 0x82, 0x82, 0x44, 0x44, 0x28, 0xfe, 0x10, 0xfe, 0x10, 0x10}
+
+/* brokenbar (166) */
+#define NXFONT_METRICS_166 {1, 1, 14, 1, 6, 0}
+#define NXFONT_BITMAP_166 {0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x0, 0x0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}
+
+/* section (167) */
+#define NXFONT_METRICS_167 {1, 5, 14, 2, 6, 0}
+#define NXFONT_BITMAP_167 {0x70, 0xd8, 0x88, 0xc0, 0x70, 0x98, 0x88, 0x88, 0xc8, 0x70, 0x18, 0x88, 0xd8, 0x70}
+
+/* dieresis (168) */
+#define NXFONT_METRICS_168 {1, 5, 1, 0, 7, 0}
+#define NXFONT_BITMAP_168 {0xd8}
+
+/* copyright (169) */
+#define NXFONT_METRICS_169 {2, 10, 11, 1, 6, 0}
+#define NXFONT_BITMAP_169 {0x1e, 0x0, 0x61, 0x80, 0x5c, 0x80, 0xa2, 0xc0, 0xa2, 0x40, 0xa0, 0x40, 0xa2, 0x40, 0x9c, 0x40, 0x40, 0x80, 0x61, 0x80, 0x1e, 0x0}
+
+/* ordfeminine (170) */
+#define NXFONT_METRICS_170 {1, 4, 7, 1, 6, 0}
+#define NXFONT_BITMAP_170 {0xe0, 0x10, 0x70, 0x90, 0xd0, 0x0, 0xf0}
+
+/* guillemotleft (171) */
+#define NXFONT_METRICS_171 {1, 6, 5, 1, 10, 0}
+#define NXFONT_BITMAP_171 {0x24, 0x48, 0x90, 0x48, 0x24}
+
+/* logicalnot (172) */
+#define NXFONT_METRICS_172 {1, 7, 4, 1, 11, 0}
+#define NXFONT_BITMAP_172 {0xfe, 0x2, 0x2, 0x2}
+
+/* hyphen (173) */
+#define NXFONT_METRICS_173 {1, 3, 1, 0, 12, 0}
+#define NXFONT_BITMAP_173 {0xe0}
+
+/* registered (174) */
+#define NXFONT_METRICS_174 {2, 10, 11, 1, 6, 0}
+#define NXFONT_BITMAP_174 {0x1e, 0x0, 0x61, 0x80, 0x5c, 0x80, 0x92, 0x40, 0x92, 0x40, 0x9c, 0x40, 0x92, 0x40, 0x92, 0x40, 0x40, 0x80, 0x61, 0x80, 0x1e, 0x0}
+
+/* macron (175) */
+#define NXFONT_METRICS_175 {1, 4, 1, 0, 7, 0}
+#define NXFONT_BITMAP_175 {0xf0}
+
+/* degree (176) */
+#define NXFONT_METRICS_176 {1, 4, 4, 1, 6, 0}
+#define NXFONT_BITMAP_176 {0x60, 0x90, 0x90, 0x60}
+
+/* plusminus (177) */
+#define NXFONT_METRICS_177 {1, 7, 9, 1, 8, 0}
+#define NXFONT_BITMAP_177 {0x10, 0x10, 0x10, 0xfe, 0x10, 0x10, 0x10, 0x0, 0xfe}
+
+/* twosuperior (178) */
+#define NXFONT_METRICS_178 {1, 4, 6, 0, 6, 0}
+#define NXFONT_BITMAP_178 {0x60, 0x90, 0x10, 0x20, 0x40, 0xf0}
+
+/* threesuperior (179) */
+#define NXFONT_METRICS_179 {1, 4, 6, 0, 6, 0}
+#define NXFONT_BITMAP_179 {0x60, 0x90, 0x20, 0x10, 0x90, 0x60}
+
+/* acute (180) */
+#define NXFONT_METRICS_180 {1, 2, 2, 2, 6, 0}
+#define NXFONT_BITMAP_180 {0x40, 0x80}
+
+/* mu (181) */
+#define NXFONT_METRICS_181 {1, 6, 11, 1, 9, 0}
+#define NXFONT_BITMAP_181 {0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0xcc, 0xb4, 0x80, 0x80, 0x80}
+
+/* paragraph (182) */
+#define NXFONT_METRICS_182 {1, 7, 14, 0, 6, 0}
+#define NXFONT_BITMAP_182 {0x3e, 0x74, 0xf4, 0xf4, 0xf4, 0x74, 0x34, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14}
+
+/* periodcentered (183) */
+#define NXFONT_METRICS_183 {1, 2, 1, 1, 12, 0}
+#define NXFONT_BITMAP_183 {0xc0}
+
+/* cedilla (184) */
+#define NXFONT_METRICS_184 {1, 4, 3, 0, 17, 0}
+#define NXFONT_BITMAP_184 {0x20, 0x90, 0x60}
+
+/* onesuperior (185) */
+#define NXFONT_METRICS_185 {1, 2, 6, 1, 6, 0}
+#define NXFONT_BITMAP_185 {0x40, 0xc0, 0x40, 0x40, 0x40, 0x40}
+
+/* ordmasculine (186) */
+#define NXFONT_METRICS_186 {1, 4, 7, 1, 6, 0}
+#define NXFONT_BITMAP_186 {0x60, 0x90, 0x90, 0x90, 0x60, 0x0, 0xf0}
+
+/* guillemotright (187) */
+#define NXFONT_METRICS_187 {1, 6, 5, 1, 10, 0}
+#define NXFONT_BITMAP_187 {0x90, 0x48, 0x24, 0x48, 0x90}
+
+/* onequarter (188) */
+#define NXFONT_METRICS_188 {2, 10, 11, 1, 6, 0}
+#define NXFONT_BITMAP_188 {0x42, 0x0, 0xc2, 0x0, 0x44, 0x0, 0x44, 0x0, 0x48, 0x0, 0x48, 0x80, 0x9, 0x80, 0x12, 0x80, 0x14, 0x80, 0x27, 0xc0, 0x20, 0x80}
+
+/* onehalf (189) */
+#define NXFONT_METRICS_189 {2, 9, 11, 1, 6, 0}
+#define NXFONT_BITMAP_189 {0x42, 0x0, 0xc2, 0x0, 0x44, 0x0, 0x44, 0x0, 0x48, 0x0, 0x4b, 0x0, 0x14, 0x80, 0x10, 0x80, 0x11, 0x0, 0x22, 0x0, 0x27, 0x80}
+
+/* threequarters (190) */
+#define NXFONT_METRICS_190 {2, 11, 11, 0, 6, 0}
+#define NXFONT_BITMAP_190 {0x61, 0x0, 0x91, 0x0, 0x22, 0x0, 0x12, 0x0, 0x94, 0x0, 0x64, 0x40, 0x4, 0xc0, 0x9, 0x40, 0xa, 0x40, 0x13, 0xe0, 0x10, 0x40}
+
+/* questiondown (191) */
+#define NXFONT_METRICS_191 {1, 6, 11, 1, 9, 0}
+#define NXFONT_BITMAP_191 {0x10, 0x10, 0x0, 0x10, 0x20, 0x40, 0x80, 0x84, 0x84, 0xcc, 0x30}
+
+/* Agrave (192) */
+#define NXFONT_METRICS_192 {2, 9, 14, 0, 3, 0}
+#define NXFONT_BITMAP_192 {0x10, 0x0, 0x8, 0x0, 0x0, 0x0, 0x8, 0x0, 0x1c, 0x0, 0x14, 0x0, 0x14, 0x0, 0x22, 0x0, 0x22, 0x0, 0x41, 0x0, 0x7f, 0x0, 0x41, 0x0, 0x80, 0x80, 0x80, 0x80}
+
+/* Aacute (193) */
+#define NXFONT_METRICS_193 {2, 9, 14, 0, 3, 0}
+#define NXFONT_BITMAP_193 {0x4, 0x0, 0x8, 0x0, 0x0, 0x0, 0x8, 0x0, 0x1c, 0x0, 0x14, 0x0, 0x14, 0x0, 0x22, 0x0, 0x22, 0x0, 0x41, 0x0, 0x7f, 0x0, 0x41, 0x0, 0x80, 0x80, 0x80, 0x80}
+
+/* Acircumflex (194) */
+#define NXFONT_METRICS_194 {2, 9, 14, 0, 3, 0}
+#define NXFONT_BITMAP_194 {0xc, 0x0, 0x12, 0x0, 0x0, 0x0, 0x8, 0x0, 0x1c, 0x0, 0x14, 0x0, 0x14, 0x0, 0x22, 0x0, 0x22, 0x0, 0x41, 0x0, 0x7f, 0x0, 0x41, 0x0, 0x80, 0x80, 0x80, 0x80}
+
+/* Atilde (195) */
+#define NXFONT_METRICS_195 {2, 9, 14, 0, 3, 0}
+#define NXFONT_BITMAP_195 {0x1a, 0x0, 0x2c, 0x0, 0x0, 0x0, 0x8, 0x0, 0x1c, 0x0, 0x14, 0x0, 0x14, 0x0, 0x22, 0x0, 0x22, 0x0, 0x41, 0x0, 0x7f, 0x0, 0x41, 0x0, 0x80, 0x80, 0x80, 0x80}
+
+/* Adieresis (196) */
+#define NXFONT_METRICS_196 {2, 9, 13, 0, 4, 0}
+#define NXFONT_BITMAP_196 {0x36, 0x0, 0x0, 0x0, 0x8, 0x0, 0x1c, 0x0, 0x14, 0x0, 0x14, 0x0, 0x22, 0x0, 0x22, 0x0, 0x41, 0x0, 0x7f, 0x0, 0x41, 0x0, 0x80, 0x80, 0x80, 0x80}
+
+/* Aring (197) */
+#define NXFONT_METRICS_197 {2, 9, 14, 0, 3, 0}
+#define NXFONT_BITMAP_197 {0xc, 0x0, 0x12, 0x0, 0x12, 0x0, 0xc, 0x0, 0xc, 0x0, 0x14, 0x0, 0x14, 0x0, 0x22, 0x0, 0x22, 0x0, 0x41, 0x0, 0x7f, 0x0, 0x41, 0x0, 0x80, 0x80, 0x80, 0x80}
+
+/* AE (198) */
+#define NXFONT_METRICS_198 {2, 12, 11, 1, 6, 0}
+#define NXFONT_BITMAP_198 {0x1f, 0xf0, 0x12, 0x0, 0x12, 0x0, 0x22, 0x0, 0x22, 0x0, 0x23, 0xf0, 0x7e, 0x0, 0x42, 0x0, 0x42, 0x0, 0x82, 0x0, 0x83, 0xf0}
+
+/* Ccedilla (199) */
+#define NXFONT_METRICS_199 {1, 8, 14, 1, 6, 0}
+#define NXFONT_BITMAP_199 {0x1c, 0x63, 0x41, 0x80, 0x80, 0x80, 0x80, 0x80, 0x41, 0x63, 0x1c, 0x8, 0x24, 0x18}
+
+/* Egrave (200) */
+#define NXFONT_METRICS_200 {1, 7, 14, 1, 3, 0}
+#define NXFONT_BITMAP_200 {0x20, 0x10, 0x0, 0xfe, 0x80, 0x80, 0x80, 0x80, 0xfc, 0x80, 0x80, 0x80, 0x80, 0xfe}
+
+/* Eacute (201) */
+#define NXFONT_METRICS_201 {1, 7, 14, 1, 3, 0}
+#define NXFONT_BITMAP_201 {0x8, 0x10, 0x0, 0xfe, 0x80, 0x80, 0x80, 0x80, 0xfc, 0x80, 0x80, 0x80, 0x80, 0xfe}
+
+/* Ecircumflex (202) */
+#define NXFONT_METRICS_202 {1, 7, 14, 1, 3, 0}
+#define NXFONT_BITMAP_202 {0x18, 0x24, 0x0, 0xfe, 0x80, 0x80, 0x80, 0x80, 0xfc, 0x80, 0x80, 0x80, 0x80, 0xfe}
+
+/* Edieresis (203) */
+#define NXFONT_METRICS_203 {1, 7, 13, 1, 4, 0}
+#define NXFONT_BITMAP_203 {0x6c, 0x0, 0xfe, 0x80, 0x80, 0x80, 0x80, 0xfc, 0x80, 0x80, 0x80, 0x80, 0xfe}
+
+/* Igrave (204) */
+#define NXFONT_METRICS_204 {1, 2, 14, 1, 3, 0}
+#define NXFONT_BITMAP_204 {0x80, 0x40, 0x0, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40}
+
+/* Iacute (205) */
+#define NXFONT_METRICS_205 {1, 2, 14, 2, 3, 0}
+#define NXFONT_BITMAP_205 {0x40, 0x80, 0x0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}
+
+/* Icircumflex (206) */
+#define NXFONT_METRICS_206 {1, 4, 14, 1, 3, 0}
+#define NXFONT_BITMAP_206 {0x60, 0x90, 0x0, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40}
+
+/* Idieresis (207) */
+#define NXFONT_METRICS_207 {1, 5, 13, 0, 4, 0}
+#define NXFONT_BITMAP_207 {0xd8, 0x0, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20}
+
+/* Eth (208) */
+#define NXFONT_METRICS_208 {2, 9, 11, 0, 6, 0}
+#define NXFONT_BITMAP_208 {0x7c, 0x0, 0x43, 0x0, 0x41, 0x0, 0x40, 0x80, 0x40, 0x80, 0xf0, 0x80, 0x40, 0x80, 0x40, 0x80, 0x41, 0x0, 0x43, 0x0, 0x7c, 0x0}
+
+/* Ntilde (209) */
+#define NXFONT_METRICS_209 {1, 8, 14, 1, 3, 0}
+#define NXFONT_BITMAP_209 {0x1a, 0x2c, 0x0, 0xc1, 0xa1, 0xa1, 0x91, 0x91, 0x89, 0x89, 0x85, 0x85, 0x83, 0x83}
+
+/* Ograve (210) */
+#define NXFONT_METRICS_210 {2, 9, 14, 1, 3, 0}
+#define NXFONT_BITMAP_210 {0x10, 0x0, 0x8, 0x0, 0x0, 0x0, 0x1c, 0x0, 0x63, 0x0, 0x41, 0x0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x41, 0x0, 0x63, 0x0, 0x1c, 0x0}
+
+/* Oacute (211) */
+#define NXFONT_METRICS_211 {2, 9, 14, 1, 3, 0}
+#define NXFONT_BITMAP_211 {0x4, 0x0, 0x8, 0x0, 0x0, 0x0, 0x1c, 0x0, 0x63, 0x0, 0x41, 0x0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x41, 0x0, 0x63, 0x0, 0x1c, 0x0}
+
+/* Ocircumflex (212) */
+#define NXFONT_METRICS_212 {2, 9, 14, 1, 3, 0}
+#define NXFONT_BITMAP_212 {0xc, 0x0, 0x12, 0x0, 0x0, 0x0, 0x1c, 0x0, 0x63, 0x0, 0x41, 0x0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x41, 0x0, 0x63, 0x0, 0x1c, 0x0}
+
+/* Otilde (213) */
+#define NXFONT_METRICS_213 {2, 9, 14, 1, 3, 0}
+#define NXFONT_BITMAP_213 {0x1a, 0x0, 0x2c, 0x0, 0x0, 0x0, 0x1c, 0x0, 0x63, 0x0, 0x41, 0x0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x41, 0x0, 0x63, 0x0, 0x1c, 0x0}
+
+/* Odieresis (214) */
+#define NXFONT_METRICS_214 {2, 9, 13, 1, 4, 0}
+#define NXFONT_BITMAP_214 {0x33, 0x0, 0x0, 0x0, 0x1c, 0x0, 0x63, 0x0, 0x41, 0x0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x41, 0x0, 0x63, 0x0, 0x1c, 0x0}
+
+/* multiply (215) */
+#define NXFONT_METRICS_215 {1, 7, 7, 1, 9, 0}
+#define NXFONT_BITMAP_215 {0x82, 0x44, 0x28, 0x10, 0x28, 0x44, 0x82}
+
+/* Oslash (216) */
+#define NXFONT_METRICS_216 {2, 11, 11, 0, 6, 0}
+#define NXFONT_BITMAP_216 {0xe, 0x20, 0x31, 0xc0, 0x20, 0x80, 0x41, 0x40, 0x42, 0x40, 0x44, 0x40, 0x48, 0x40, 0x50, 0x40, 0x20, 0x80, 0x71, 0x80, 0x8e, 0x0}
+
+/* Ugrave (217) */
+#define NXFONT_METRICS_217 {1, 8, 14, 1, 3, 0}
+#define NXFONT_BITMAP_217 {0x10, 0x8, 0x0, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x42, 0x3c}
+
+/* Uacute (218) */
+#define NXFONT_METRICS_218 {1, 8, 14, 1, 3, 0}
+#define NXFONT_BITMAP_218 {0x4, 0x8, 0x0, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x42, 0x3c}
+
+/* Ucircumflex (219) */
+#define NXFONT_METRICS_219 {1, 8, 14, 1, 3, 0}
+#define NXFONT_BITMAP_219 {0x18, 0x24, 0x0, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x42, 0x3c}
+
+/* Udieresis (220) */
+#define NXFONT_METRICS_220 {1, 8, 13, 1, 4, 0}
+#define NXFONT_BITMAP_220 {0x66, 0x0, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x42, 0x3c}
+
+/* Yacute (221) */
+#define NXFONT_METRICS_221 {2, 9, 14, 0, 3, 0}
+#define NXFONT_BITMAP_221 {0x4, 0x0, 0x8, 0x0, 0x0, 0x0, 0x80, 0x80, 0xc1, 0x80, 0x41, 0x0, 0x22, 0x0, 0x22, 0x0, 0x14, 0x0, 0x1c, 0x0, 0x8, 0x0, 0x8, 0x0, 0x8, 0x0, 0x8, 0x0}
+
+/* Thorn (222) */
+#define NXFONT_METRICS_222 {1, 7, 11, 1, 6, 0}
+#define NXFONT_BITMAP_222 {0x80, 0x80, 0xfc, 0x86, 0x82, 0x82, 0x86, 0xfc, 0x80, 0x80, 0x80}
+
+/* germandbls (223) */
+#define NXFONT_METRICS_223 {1, 5, 11, 1, 6, 0}
+#define NXFONT_BITMAP_223 {0x70, 0x88, 0x88, 0x88, 0xb0, 0x90, 0x88, 0x88, 0x88, 0x88, 0xb0}
+
+/* agrave (224) */
+#define NXFONT_METRICS_224 {1, 7, 11, 1, 6, 0}
+#define NXFONT_BITMAP_224 {0x20, 0x10, 0x0, 0x78, 0xcc, 0x4, 0x7c, 0xc4, 0x84, 0xcc, 0x76}
+
+/* aacute (225) */
+#define NXFONT_METRICS_225 {1, 7, 11, 1, 6, 0}
+#define NXFONT_BITMAP_225 {0x10, 0x20, 0x0, 0x78, 0xcc, 0x4, 0x7c, 0xc4, 0x84, 0xcc, 0x76}
+
+/* acircumflex (226) */
+#define NXFONT_METRICS_226 {1, 7, 11, 1, 6, 0}
+#define NXFONT_BITMAP_226 {0x30, 0x48, 0x0, 0x78, 0xcc, 0x4, 0x7c, 0xc4, 0x84, 0xcc, 0x76}
+
+/* atilde (227) */
+#define NXFONT_METRICS_227 {1, 7, 11, 1, 6, 0}
+#define NXFONT_BITMAP_227 {0x34, 0x58, 0x0, 0x78, 0xcc, 0x4, 0x7c, 0xc4, 0x84, 0xcc, 0x76}
+
+/* adieresis (228) */
+#define NXFONT_METRICS_228 {1, 7, 11, 1, 6, 0}
+#define NXFONT_BITMAP_228 {0x48, 0x48, 0x0, 0x78, 0xcc, 0x4, 0x7c, 0xc4, 0x84, 0xcc, 0x76}
+
+/* aring (229) */
+#define NXFONT_METRICS_229 {1, 7, 12, 1, 5, 0}
+#define NXFONT_BITMAP_229 {0x30, 0x48, 0x30, 0x0, 0x78, 0xcc, 0x4, 0x7c, 0xc4, 0x84, 0xcc, 0x76}
+
+/* ae (230) */
+#define NXFONT_METRICS_230 {2, 11, 8, 1, 9, 0}
+#define NXFONT_BITMAP_230 {0x7b, 0xc0, 0xc6, 0x60, 0x4, 0x20, 0x7f, 0xe0, 0xc4, 0x0, 0x84, 0x0, 0xce, 0x60, 0x7b, 0xc0}
+
+/* ccedilla (231) */
+#define NXFONT_METRICS_231 {1, 6, 11, 1, 9, 0}
+#define NXFONT_BITMAP_231 {0x78, 0xcc, 0x80, 0x80, 0x80, 0x84, 0xcc, 0x78, 0x10, 0x48, 0x30}
+
+/* egrave (232) */
+#define NXFONT_METRICS_232 {1, 6, 11, 1, 6, 0}
+#define NXFONT_BITMAP_232 {0x20, 0x10, 0x0, 0x78, 0xcc, 0x84, 0xfc, 0x80, 0x80, 0xcc, 0x78}
+
+/* eacute (233) */
+#define NXFONT_METRICS_233 {1, 6, 11, 1, 6, 0}
+#define NXFONT_BITMAP_233 {0x10, 0x20, 0x0, 0x78, 0xcc, 0x84, 0xfc, 0x80, 0x80, 0xcc, 0x78}
+
+/* ecircumflex (234) */
+#define NXFONT_METRICS_234 {1, 6, 11, 1, 6, 0}
+#define NXFONT_BITMAP_234 {0x30, 0x48, 0x0, 0x78, 0xcc, 0x84, 0xfc, 0x80, 0x80, 0xcc, 0x78}
+
+/* edieresis (235) */
+#define NXFONT_METRICS_235 {1, 6, 11, 1, 6, 0}
+#define NXFONT_BITMAP_235 {0x48, 0x48, 0x0, 0x78, 0xcc, 0x84, 0xfc, 0x80, 0x80, 0xcc, 0x78}
+
+/* igrave (236) */
+#define NXFONT_METRICS_236 {1, 2, 11, 1, 6, 0}
+#define NXFONT_BITMAP_236 {0x80, 0x40, 0x0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}
+
+/* iacute (237) */
+#define NXFONT_METRICS_237 {1, 2, 11, 1, 6, 0}
+#define NXFONT_BITMAP_237 {0x40, 0x80, 0x0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}
+
+/* icircumflex (238) */
+#define NXFONT_METRICS_238 {1, 4, 11, 0, 6, 0}
+#define NXFONT_BITMAP_238 {0x60, 0x90, 0x0, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40}
+
+/* idieresis (239) */
+#define NXFONT_METRICS_239 {1, 3, 11, 0, 6, 0}
+#define NXFONT_BITMAP_239 {0xa0, 0xa0, 0x0, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40}
+
+/* eth (240) */
+#define NXFONT_METRICS_240 {1, 6, 11, 1, 6, 0}
+#define NXFONT_BITMAP_240 {0xd8, 0x70, 0x90, 0x78, 0xcc, 0x84, 0x84, 0x84, 0x84, 0xcc, 0x78}
+
+/* ntilde (241) */
+#define NXFONT_METRICS_241 {1, 6, 11, 1, 6, 0}
+#define NXFONT_BITMAP_241 {0x68, 0xb0, 0x0, 0xb8, 0xcc, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84}
+
+/* ograve (242) */
+#define NXFONT_METRICS_242 {1, 6, 11, 1, 6, 0}
+#define NXFONT_BITMAP_242 {0x20, 0x10, 0x0, 0x78, 0xcc, 0x84, 0x84, 0x84, 0x84, 0xcc, 0x78}
+
+/* oacute (243) */
+#define NXFONT_METRICS_243 {1, 6, 11, 1, 6, 0}
+#define NXFONT_BITMAP_243 {0x10, 0x20, 0x0, 0x78, 0xcc, 0x84, 0x84, 0x84, 0x84, 0xcc, 0x78}
+
+/* ocircumflex (244) */
+#define NXFONT_METRICS_244 {1, 6, 11, 1, 6, 0}
+#define NXFONT_BITMAP_244 {0x30, 0x48, 0x0, 0x78, 0xcc, 0x84, 0x84, 0x84, 0x84, 0xcc, 0x78}
+
+/* otilde (245) */
+#define NXFONT_METRICS_245 {1, 6, 11, 1, 6, 0}
+#define NXFONT_BITMAP_245 {0x68, 0xb0, 0x0, 0x78, 0xcc, 0x84, 0x84, 0x84, 0x84, 0xcc, 0x78}
+
+/* odieresis (246) */
+#define NXFONT_METRICS_246 {1, 6, 11, 1, 6, 0}
+#define NXFONT_BITMAP_246 {0x48, 0x48, 0x0, 0x78, 0xcc, 0x84, 0x84, 0x84, 0x84, 0xcc, 0x78}
+
+/* divide (247) */
+#define NXFONT_METRICS_247 {1, 7, 7, 1, 9, 0}
+#define NXFONT_BITMAP_247 {0x10, 0x10, 0x0, 0xfe, 0x0, 0x10, 0x10}
+
+/* oslash (248) */
+#define NXFONT_METRICS_248 {1, 8, 8, 0, 9, 0}
+#define NXFONT_BITMAP_248 {0x3d, 0x62, 0x46, 0x4a, 0x52, 0x62, 0x46, 0xbc}
+
+/* ugrave (249) */
+#define NXFONT_METRICS_249 {1, 6, 11, 1, 6, 0}
+#define NXFONT_BITMAP_249 {0x20, 0x10, 0x0, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0xcc, 0x74}
+
+/* uacute (250) */
+#define NXFONT_METRICS_250 {1, 6, 11, 1, 6, 0}
+#define NXFONT_BITMAP_250 {0x10, 0x20, 0x0, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0xcc, 0x74}
+
+/* ucircumflex (251) */
+#define NXFONT_METRICS_251 {1, 6, 11, 1, 6, 0}
+#define NXFONT_BITMAP_251 {0x30, 0x48, 0x0, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0xcc, 0x74}
+
+/* udieresis (252) */
+#define NXFONT_METRICS_252 {1, 6, 11, 1, 6, 0}
+#define NXFONT_BITMAP_252 {0x48, 0x48, 0x0, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0xcc, 0x74}
+
+/* yacute (253) */
+#define NXFONT_METRICS_253 {1, 7, 14, 0, 6, 0}
+#define NXFONT_BITMAP_253 {0x8, 0x10, 0x0, 0x82, 0xc2, 0x44, 0x44, 0x24, 0x28, 0x18, 0x10, 0x10, 0x30, 0x60}
+
+/* thorn (254) */
+#define NXFONT_METRICS_254 {1, 6, 14, 1, 6, 0}
+#define NXFONT_BITMAP_254 {0x80, 0x80, 0x80, 0xb8, 0xcc, 0x84, 0x84, 0x84, 0x84, 0xcc, 0xb8, 0x80, 0x80, 0x80}
+
+/* ydieresis (255) */
+#define NXFONT_METRICS_255 {1, 7, 14, 0, 6, 0}
+#define NXFONT_BITMAP_255 {0x24, 0x24, 0x0, 0x82, 0xc2, 0x44, 0x44, 0x24, 0x28, 0x18, 0x10, 0x10, 0x30, 0x60}
+
+/****************************************************************************
+ * Public Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+#define EXTERN extern "C"
+extern "C" {
+#else
+#define EXTERN extern
+#endif
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* __GRAPHICS_NXFONTS_NXFONTS_SANS17X22_H */
diff --git a/nuttx/graphics/nxfonts/nxfonts_sans17x23b.h b/nuttx/graphics/nxfonts/nxfonts_sans17x23b.h
new file mode 100644
index 000000000..007986399
--- /dev/null
+++ b/nuttx/graphics/nxfonts/nxfonts_sans17x23b.h
@@ -0,0 +1,849 @@
+/****************************************************************************
+ * graphics/nxfonts/nxfonts_serif17x23b.h
+ *
+ * Copyright (C) 2011-2012 NX Engineering, S.A., All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT}
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING}
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+#ifndef __GRAPHICS_NXFONTS_NXFONTS_SANS17X23B_H
+#define __GRAPHICS_NXFONTS_NXFONTS_SANS17X23B_H
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/* Font ID */
+
+#define NXFONT_ID FONTID_SANS17X23B
+
+/* Ranges of 7-bit and 8-bit fonts */
+
+#define NXFONT_MIN7BIT 33
+#define NXFONT_MAX7BIT 126
+
+#define NXFONT_MIN8BIT 161
+#define NXFONT_MAX8BIT 255
+
+/* Maximum height and width of any glyph in the set */
+
+#define NXFONT_MAXHEIGHT 23
+#define NXFONT_MAXWIDTH 17
+
+/* The width of a space */
+
+#define NXFONT_SPACEWIDTH 4
+
+/* exclam (33) */
+#define NXFONT_METRICS_33 {1, 2, 11, 1, 6, 0}
+#define NXFONT_BITMAP_33 {0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x80, 0x80, 0x0, 0xc0, 0xc0}
+
+/* quotedbl (34) */
+#define NXFONT_METRICS_34 {1, 5, 3, 1, 6, 0}
+#define NXFONT_BITMAP_34 {0xd8, 0xd8, 0x90}
+
+/* numbersign (35) */
+#define NXFONT_METRICS_35 {2, 9, 10, 0, 7, 0}
+#define NXFONT_BITMAP_35 {0x1b, 0x0, 0x1b, 0x0, 0x1b, 0x0, 0x7f, 0x80, 0x36, 0x0, 0x36, 0x0, 0xff, 0x0, 0x6c, 0x0, 0x6c, 0x0, 0x6c, 0x0}
+
+/* dollar (36) */
+#define NXFONT_METRICS_36 {1, 7, 14, 0, 5, 0}
+#define NXFONT_BITMAP_36 {0x10, 0x7c, 0xd6, 0xd6, 0xd0, 0xf0, 0x78, 0x1c, 0x16, 0xd6, 0xd6, 0x7c, 0x10, 0x10}
+
+/* percent (37) */
+#define NXFONT_METRICS_37 {2, 12, 11, 0, 6, 0}
+#define NXFONT_BITMAP_37 {0x78, 0x40, 0xcc, 0xc0, 0xcd, 0x80, 0x79, 0x0, 0x3, 0x0, 0x6, 0x0, 0x4, 0x0, 0xd, 0xe0, 0xb, 0x30, 0x1b, 0x30, 0x11, 0xe0}
+
+/* ampersand (38) */
+#define NXFONT_METRICS_38 {2, 9, 10, 1, 7, 0}
+#define NXFONT_BITMAP_38 {0x38, 0x0, 0x6c, 0x0, 0x6c, 0x0, 0x38, 0x0, 0x73, 0x0, 0xfb, 0x0, 0xce, 0x0, 0xc6, 0x0, 0xcf, 0x0, 0x7d, 0x80}
+
+/* quotesingle (39) */
+#define NXFONT_METRICS_39 {1, 2, 3, 1, 6, 0}
+#define NXFONT_BITMAP_39 {0xc0, 0xc0, 0x80}
+
+/* parenleft (40) */
+#define NXFONT_METRICS_40 {1, 4, 14, 1, 6, 0}
+#define NXFONT_BITMAP_40 {0x30, 0x60, 0x60, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x60, 0x60, 0x30}
+
+/* parenright (41) */
+#define NXFONT_METRICS_41 {1, 4, 14, 0, 6, 0}
+#define NXFONT_BITMAP_41 {0xc0, 0x60, 0x60, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x60, 0x60, 0xc0}
+
+/* asterisk (42) */
+#define NXFONT_METRICS_42 {1, 5, 4, 0, 6, 0}
+#define NXFONT_BITMAP_42 {0x20, 0xf8, 0x70, 0xd8}
+
+/* plus (43) */
+#define NXFONT_METRICS_43 {1, 8, 7, 0, 9, 0}
+#define NXFONT_BITMAP_43 {0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18}
+
+/* comma (44) */
+#define NXFONT_METRICS_44 {1, 3, 3, 0, 15, 0}
+#define NXFONT_BITMAP_44 {0x60, 0x60, 0xc0}
+
+/* hyphen (45) */
+#define NXFONT_METRICS_45 {1, 3, 1, 0, 12, 0}
+#define NXFONT_BITMAP_45 {0xe0}
+
+/* period (46) */
+#define NXFONT_METRICS_46 {1, 2, 2, 1, 15, 0}
+#define NXFONT_BITMAP_46 {0xc0, 0xc0}
+
+/* slash (47) */
+#define NXFONT_METRICS_47 {1, 4, 11, 0, 6, 0}
+#define NXFONT_BITMAP_47 {0x10, 0x10, 0x30, 0x20, 0x20, 0x60, 0x40, 0x40, 0xc0, 0x80, 0x80}
+
+/* zero (48) */
+#define NXFONT_METRICS_48 {1, 7, 11, 0, 6, 0}
+#define NXFONT_BITMAP_48 {0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38}
+
+/* one (49) */
+#define NXFONT_METRICS_49 {1, 4, 11, 1, 6, 0}
+#define NXFONT_BITMAP_49 {0x30, 0xf0, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30}
+
+/* two (50) */
+#define NXFONT_METRICS_50 {1, 7, 11, 0, 6, 0}
+#define NXFONT_BITMAP_50 {0x7c, 0xc6, 0xc6, 0x6, 0xe, 0xc, 0x18, 0x30, 0x60, 0xc0, 0xfe}
+
+/* three (51) */
+#define NXFONT_METRICS_51 {1, 7, 11, 0, 6, 0}
+#define NXFONT_BITMAP_51 {0x7c, 0xc6, 0xc6, 0x6, 0x6, 0x3c, 0x6, 0x6, 0xc6, 0xc6, 0x7c}
+
+/* four (52) */
+#define NXFONT_METRICS_52 {1, 8, 11, 0, 6, 0}
+#define NXFONT_BITMAP_52 {0x6, 0xe, 0x1e, 0x36, 0x66, 0xc6, 0xc6, 0xff, 0x6, 0x6, 0x6}
+
+/* five (53) */
+#define NXFONT_METRICS_53 {1, 7, 11, 0, 6, 0}
+#define NXFONT_BITMAP_53 {0x7e, 0x60, 0x60, 0xc0, 0xfc, 0xe, 0x6, 0x6, 0xc6, 0xcc, 0x78}
+
+/* six (54) */
+#define NXFONT_METRICS_54 {1, 7, 11, 0, 6, 0}
+#define NXFONT_BITMAP_54 {0x3c, 0x66, 0x66, 0xc0, 0xdc, 0xe6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c}
+
+/* seven (55) */
+#define NXFONT_METRICS_55 {1, 7, 11, 0, 6, 0}
+#define NXFONT_BITMAP_55 {0xfe, 0x6, 0xc, 0xc, 0x18, 0x18, 0x30, 0x30, 0x60, 0x60, 0x60}
+
+/* eight (56) */
+#define NXFONT_METRICS_56 {1, 7, 11, 0, 6, 0}
+#define NXFONT_BITMAP_56 {0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c}
+
+/* nine (57) */
+#define NXFONT_METRICS_57 {1, 7, 11, 0, 6, 0}
+#define NXFONT_BITMAP_57 {0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x6, 0xc6, 0xcc, 0x78}
+
+/* colon (58) */
+#define NXFONT_METRICS_58 {1, 2, 8, 2, 9, 0}
+#define NXFONT_BITMAP_58 {0xc0, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xc0, 0xc0}
+
+/* semicolon (59) */
+#define NXFONT_METRICS_59 {1, 3, 9, 1, 9, 0}
+#define NXFONT_BITMAP_59 {0x60, 0x60, 0x0, 0x0, 0x0, 0x0, 0x60, 0x60, 0xc0}
+
+/* less (60) */
+#define NXFONT_METRICS_60 {1, 6, 5, 1, 10, 0}
+#define NXFONT_BITMAP_60 {0x1c, 0x70, 0xc0, 0x70, 0x1c}
+
+/* equal (61) */
+#define NXFONT_METRICS_61 {1, 7, 3, 1, 11, 0}
+#define NXFONT_BITMAP_61 {0xfe, 0x0, 0xfe}
+
+/* greater (62) */
+#define NXFONT_METRICS_62 {1, 6, 5, 1, 10, 0}
+#define NXFONT_BITMAP_62 {0xe0, 0x38, 0xc, 0x38, 0xe0}
+
+/* question (63) */
+#define NXFONT_METRICS_63 {1, 7, 11, 1, 6, 0}
+#define NXFONT_BITMAP_63 {0x7c, 0xc6, 0xc6, 0x6, 0xc, 0x18, 0x30, 0x30, 0x0, 0x30, 0x30}
+
+/* at (64) */
+#define NXFONT_METRICS_64 {2, 13, 12, 0, 6, 0}
+#define NXFONT_BITMAP_64 {0xf, 0x80, 0x38, 0xe0, 0x70, 0x70, 0x66, 0xb0, 0xcd, 0x98, 0xd9, 0x98, 0xdb, 0x18, 0xdb, 0x30, 0xce, 0xe0, 0x60, 0x0, 0x31, 0x80, 0x1f, 0x0}
+
+/* A (65) */
+#define NXFONT_METRICS_65 {2, 10, 11, 0, 6, 0}
+#define NXFONT_BITMAP_65 {0xc, 0x0, 0xc, 0x0, 0x1e, 0x0, 0x12, 0x0, 0x33, 0x0, 0x33, 0x0, 0x61, 0x80, 0x7f, 0x80, 0x61, 0x80, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* B (66) */
+#define NXFONT_METRICS_66 {1, 8, 11, 1, 6, 0}
+#define NXFONT_BITMAP_66 {0xfe, 0xc7, 0xc3, 0xc3, 0xc6, 0xfc, 0xc6, 0xc3, 0xc3, 0xc7, 0xfe}
+
+/* C (67) */
+#define NXFONT_METRICS_67 {2, 9, 11, 1, 6, 0}
+#define NXFONT_BITMAP_67 {0x1f, 0x0, 0x7b, 0x80, 0x60, 0x80, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0x60, 0x80, 0x7b, 0x80, 0x1f, 0x0}
+
+/* D (68) */
+#define NXFONT_METRICS_68 {2, 9, 11, 1, 6, 0}
+#define NXFONT_BITMAP_68 {0xfc, 0x0, 0xc7, 0x0, 0xc3, 0x0, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc3, 0x0, 0xc7, 0x0, 0xfc, 0x0}
+
+/* E (69) */
+#define NXFONT_METRICS_69 {1, 7, 11, 1, 6, 0}
+#define NXFONT_BITMAP_69 {0xfe, 0xc0, 0xc0, 0xc0, 0xc0, 0xfe, 0xc0, 0xc0, 0xc0, 0xc0, 0xfe}
+
+/* F (70) */
+#define NXFONT_METRICS_70 {1, 7, 11, 1, 6, 0}
+#define NXFONT_BITMAP_70 {0xfe, 0xc0, 0xc0, 0xc0, 0xc0, 0xfc, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* G (71) */
+#define NXFONT_METRICS_71 {2, 9, 11, 1, 6, 0}
+#define NXFONT_BITMAP_71 {0x1f, 0x0, 0x7b, 0x80, 0x60, 0x80, 0xc0, 0x0, 0xc0, 0x0, 0xc7, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0x61, 0x80, 0x7b, 0x80, 0x1e, 0x80}
+
+/* H (72) */
+#define NXFONT_METRICS_72 {1, 8, 11, 1, 6, 0}
+#define NXFONT_BITMAP_72 {0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xff, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3}
+
+/* I (73) */
+#define NXFONT_METRICS_73 {1, 2, 11, 1, 6, 0}
+#define NXFONT_BITMAP_73 {0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* J (74) */
+#define NXFONT_METRICS_74 {1, 7, 11, 0, 6, 0}
+#define NXFONT_BITMAP_74 {0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0xc6, 0xc6, 0xee, 0x7c}
+
+/* K (75) */
+#define NXFONT_METRICS_75 {2, 9, 11, 1, 6, 0}
+#define NXFONT_BITMAP_75 {0xc3, 0x0, 0xc6, 0x0, 0xcc, 0x0, 0xd8, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xd8, 0x0, 0xcc, 0x0, 0xc6, 0x0, 0xc3, 0x0, 0xc1, 0x80}
+
+/* L (76) */
+#define NXFONT_METRICS_76 {1, 7, 11, 1, 6, 0}
+#define NXFONT_BITMAP_76 {0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xfe}
+
+/* M (77) */
+#define NXFONT_METRICS_77 {2, 11, 11, 1, 6, 0}
+#define NXFONT_BITMAP_77 {0xc0, 0x60, 0xc0, 0x60, 0xe0, 0xe0, 0xe0, 0xe0, 0xf1, 0xe0, 0xd1, 0x60, 0xd1, 0x60, 0xdb, 0x60, 0xca, 0x60, 0xce, 0x60, 0xc4, 0x60}
+
+/* N (78) */
+#define NXFONT_METRICS_78 {2, 9, 11, 1, 6, 0}
+#define NXFONT_BITMAP_78 {0xc1, 0x80, 0xe1, 0x80, 0xe1, 0x80, 0xd1, 0x80, 0xd9, 0x80, 0xc9, 0x80, 0xcd, 0x80, 0xc5, 0x80, 0xc3, 0x80, 0xc3, 0x80, 0xc1, 0x80}
+
+/* O (79) */
+#define NXFONT_METRICS_79 {2, 10, 11, 1, 6, 0}
+#define NXFONT_BITMAP_79 {0x1e, 0x0, 0x73, 0x80, 0x61, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x61, 0x80, 0x73, 0x80, 0x1e, 0x0}
+
+/* P (80) */
+#define NXFONT_METRICS_80 {1, 8, 11, 1, 6, 0}
+#define NXFONT_BITMAP_80 {0xfe, 0xc7, 0xc3, 0xc3, 0xc7, 0xfe, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* Q (81) */
+#define NXFONT_METRICS_81 {2, 10, 11, 1, 6, 0}
+#define NXFONT_BITMAP_81 {0x1e, 0x0, 0x73, 0x80, 0x61, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc6, 0xc0, 0x63, 0x80, 0x73, 0x80, 0x1e, 0xc0}
+
+/* R (82) */
+#define NXFONT_METRICS_82 {2, 9, 11, 1, 6, 0}
+#define NXFONT_BITMAP_82 {0xfe, 0x0, 0xc7, 0x0, 0xc3, 0x0, 0xc3, 0x0, 0xc6, 0x0, 0xfe, 0x0, 0xc7, 0x0, 0xc3, 0x0, 0xc3, 0x0, 0xc3, 0x0, 0xc1, 0x80}
+
+/* S (83) */
+#define NXFONT_METRICS_83 {1, 8, 11, 1, 6, 0}
+#define NXFONT_BITMAP_83 {0x7e, 0xe7, 0xc3, 0xe0, 0x78, 0x1e, 0x7, 0x3, 0xc3, 0xee, 0x7c}
+
+/* T (84) */
+#define NXFONT_METRICS_84 {1, 8, 11, 0, 6, 0}
+#define NXFONT_BITMAP_84 {0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}
+
+/* U (85) */
+#define NXFONT_METRICS_85 {2, 9, 11, 1, 6, 0}
+#define NXFONT_BITMAP_85 {0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0x63, 0x0, 0x3e, 0x0}
+
+/* V (86) */
+#define NXFONT_METRICS_86 {2, 10, 11, 0, 6, 0}
+#define NXFONT_BITMAP_86 {0xc0, 0xc0, 0xc0, 0xc0, 0x61, 0x80, 0x61, 0x80, 0x73, 0x80, 0x33, 0x0, 0x33, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0xc, 0x0, 0xc, 0x0}
+
+/* W (87) */
+#define NXFONT_METRICS_87 {2, 14, 11, 0, 6, 0}
+#define NXFONT_BITMAP_87 {0xc3, 0xc, 0xc3, 0xc, 0xc3, 0xc, 0x67, 0x98, 0x64, 0x98, 0x64, 0x98, 0x6c, 0xd8, 0x2c, 0xd0, 0x38, 0x70, 0x18, 0x60, 0x18, 0x60}
+
+/* X (88) */
+#define NXFONT_METRICS_88 {2, 9, 11, 0, 6, 0}
+#define NXFONT_BITMAP_88 {0xc1, 0x80, 0xc1, 0x80, 0x63, 0x0, 0x36, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x36, 0x0, 0x63, 0x0, 0x63, 0x0, 0xc1, 0x80, 0xc1, 0x80}
+
+/* Y (89) */
+#define NXFONT_METRICS_89 {2, 10, 11, 0, 6, 0}
+#define NXFONT_BITMAP_89 {0xc0, 0xc0, 0x61, 0x80, 0x61, 0x80, 0x33, 0x0, 0x33, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0xc, 0x0, 0xc, 0x0, 0xc, 0x0, 0xc, 0x0}
+
+/* Z (90) */
+#define NXFONT_METRICS_90 {1, 8, 11, 0, 6, 0}
+#define NXFONT_BITMAP_90 {0xff, 0x3, 0x6, 0xc, 0x1c, 0x18, 0x30, 0x70, 0x60, 0xc0, 0xff}
+
+/* bracketleft (91) */
+#define NXFONT_METRICS_91 {1, 4, 14, 1, 6, 0}
+#define NXFONT_BITMAP_91 {0xf0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf0}
+
+/* backslash (92) */
+#define NXFONT_METRICS_92 {1, 4, 11, 0, 6, 0}
+#define NXFONT_BITMAP_92 {0x80, 0x80, 0xc0, 0x40, 0x40, 0x60, 0x20, 0x20, 0x30, 0x10, 0x10}
+
+/* bracketright (93) */
+#define NXFONT_METRICS_93 {1, 4, 14, 0, 6, 0}
+#define NXFONT_BITMAP_93 {0xf0, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0xf0}
+
+/* asciicircum (94) */
+#define NXFONT_METRICS_94 {1, 6, 5, 1, 6, 0}
+#define NXFONT_BITMAP_94 {0x30, 0x78, 0x48, 0xcc, 0xcc}
+
+/* underscore (95) */
+#define NXFONT_METRICS_95 {1, 8, 1, 0, 19, 0}
+#define NXFONT_BITMAP_95 {0xff}
+
+/* grave (96) */
+#define NXFONT_METRICS_96 {1, 3, 2, 1, 6, 0}
+#define NXFONT_BITMAP_96 {0xc0, 0x60}
+
+/* a (97) */
+#define NXFONT_METRICS_97 {1, 7, 8, 1, 9, 0}
+#define NXFONT_BITMAP_97 {0x78, 0xcc, 0xc, 0x7c, 0xcc, 0xcc, 0xdc, 0x76}
+
+/* b (98) */
+#define NXFONT_METRICS_98 {1, 7, 11, 1, 6, 0}
+#define NXFONT_BITMAP_98 {0xc0, 0xc0, 0xc0, 0xd8, 0xec, 0xc6, 0xc6, 0xc6, 0xc6, 0xec, 0xd8}
+
+/* c (99) */
+#define NXFONT_METRICS_99 {1, 6, 8, 1, 9, 0}
+#define NXFONT_BITMAP_99 {0x38, 0x6c, 0xcc, 0xc0, 0xc0, 0xcc, 0x6c, 0x38}
+
+/* d (100) */
+#define NXFONT_METRICS_100 {1, 7, 11, 1, 6, 0}
+#define NXFONT_BITMAP_100 {0x6, 0x6, 0x6, 0x36, 0x6e, 0xc6, 0xc6, 0xc6, 0xc6, 0x6e, 0x36}
+
+/* e (101) */
+#define NXFONT_METRICS_101 {1, 6, 8, 1, 9, 0}
+#define NXFONT_BITMAP_101 {0x78, 0xcc, 0xcc, 0xfc, 0xc0, 0xc0, 0xec, 0x78}
+
+/* f (102) */
+#define NXFONT_METRICS_102 {1, 5, 11, 0, 6, 0}
+#define NXFONT_BITMAP_102 {0x38, 0x60, 0x60, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60}
+
+/* g (103) */
+#define NXFONT_METRICS_103 {1, 7, 11, 1, 9, 0}
+#define NXFONT_BITMAP_103 {0x3a, 0x6e, 0xc6, 0xc6, 0xc6, 0xc6, 0x6e, 0x36, 0x6, 0xce, 0x7c}
+
+/* h (104) */
+#define NXFONT_METRICS_104 {1, 7, 11, 1, 6, 0}
+#define NXFONT_BITMAP_104 {0xc0, 0xc0, 0xc0, 0xdc, 0xee, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6}
+
+/* i (105) */
+#define NXFONT_METRICS_105 {1, 2, 11, 1, 6, 0}
+#define NXFONT_BITMAP_105 {0xc0, 0xc0, 0x0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* j (106) */
+#define NXFONT_METRICS_106 {1, 3, 14, 0, 6, 0}
+#define NXFONT_BITMAP_106 {0x60, 0x60, 0x0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xe0, 0xc0}
+
+/* k (107) */
+#define NXFONT_METRICS_107 {1, 6, 11, 1, 6, 0}
+#define NXFONT_BITMAP_107 {0xc0, 0xc0, 0xc0, 0xcc, 0xd8, 0xf0, 0xf0, 0xd8, 0xd8, 0xcc, 0xcc}
+
+/* l (108) */
+#define NXFONT_METRICS_108 {1, 2, 11, 1, 6, 0}
+#define NXFONT_BITMAP_108 {0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* m (109) */
+#define NXFONT_METRICS_109 {2, 10, 8, 1, 9, 0}
+#define NXFONT_BITMAP_109 {0xdb, 0x80, 0xee, 0xc0, 0xcc, 0xc0, 0xcc, 0xc0, 0xcc, 0xc0, 0xcc, 0xc0, 0xcc, 0xc0, 0xcc, 0xc0}
+
+/* n (110) */
+#define NXFONT_METRICS_110 {1, 7, 8, 1, 9, 0}
+#define NXFONT_BITMAP_110 {0xdc, 0xee, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6}
+
+/* o (111) */
+#define NXFONT_METRICS_111 {1, 7, 8, 1, 9, 0}
+#define NXFONT_BITMAP_111 {0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38}
+
+/* p (112) */
+#define NXFONT_METRICS_112 {1, 7, 11, 1, 9, 0}
+#define NXFONT_BITMAP_112 {0xd8, 0xec, 0xc6, 0xc6, 0xc6, 0xc6, 0xec, 0xd8, 0xc0, 0xc0, 0xc0}
+
+/* q (113) */
+#define NXFONT_METRICS_113 {1, 7, 11, 1, 9, 0}
+#define NXFONT_BITMAP_113 {0x36, 0x6e, 0xc6, 0xc6, 0xc6, 0xc6, 0x6e, 0x36, 0x6, 0x6, 0x6}
+
+/* r (114) */
+#define NXFONT_METRICS_114 {1, 5, 8, 1, 9, 0}
+#define NXFONT_BITMAP_114 {0xd8, 0xf8, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* s (115) */
+#define NXFONT_METRICS_115 {1, 6, 8, 1, 9, 0}
+#define NXFONT_BITMAP_115 {0x78, 0xcc, 0xe0, 0x78, 0x1c, 0xc, 0xec, 0x78}
+
+/* t (116) */
+#define NXFONT_METRICS_116 {1, 5, 10, 0, 7, 0}
+#define NXFONT_BITMAP_116 {0x60, 0x60, 0xf8, 0x60, 0x60, 0x60, 0x60, 0x60, 0x68, 0x30}
+
+/* u (117) */
+#define NXFONT_METRICS_117 {1, 7, 8, 1, 9, 0}
+#define NXFONT_BITMAP_117 {0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xee, 0x76}
+
+/* v (118) */
+#define NXFONT_METRICS_118 {1, 8, 8, 0, 9, 0}
+#define NXFONT_BITMAP_118 {0xc3, 0xc3, 0x66, 0x66, 0x24, 0x3c, 0x18, 0x18}
+
+/* w (119) */
+#define NXFONT_METRICS_119 {2, 10, 8, 0, 9, 0}
+#define NXFONT_BITMAP_119 {0xcc, 0xc0, 0xcc, 0xc0, 0xcc, 0xc0, 0x6d, 0x80, 0x6d, 0x80, 0x33, 0x0, 0x33, 0x0, 0x33, 0x0}
+
+/* x (120) */
+#define NXFONT_METRICS_120 {1, 7, 8, 0, 9, 0}
+#define NXFONT_BITMAP_120 {0xc6, 0xc6, 0x6c, 0x38, 0x38, 0x6c, 0xc6, 0xc6}
+
+/* y (121) */
+#define NXFONT_METRICS_121 {1, 8, 11, 0, 9, 0}
+#define NXFONT_BITMAP_121 {0xc3, 0xc3, 0x66, 0x66, 0x24, 0x3c, 0x18, 0x18, 0x18, 0x30, 0x70}
+
+/* z (122) */
+#define NXFONT_METRICS_122 {1, 6, 8, 0, 9, 0}
+#define NXFONT_BITMAP_122 {0xfc, 0xc, 0x18, 0x30, 0x30, 0x60, 0xc0, 0xfc}
+
+/* braceleft (123) */
+#define NXFONT_METRICS_123 {1, 5, 14, 0, 6, 0}
+#define NXFONT_BITMAP_123 {0x18, 0x30, 0x30, 0x30, 0x30, 0x60, 0xc0, 0x60, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18}
+
+/* bar (124) */
+#define NXFONT_METRICS_124 {1, 1, 14, 2, 6, 0}
+#define NXFONT_BITMAP_124 {0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}
+
+/* braceright (125) */
+#define NXFONT_METRICS_125 {1, 5, 14, 1, 6, 0}
+#define NXFONT_BITMAP_125 {0xc0, 0x60, 0x60, 0x60, 0x60, 0x30, 0x18, 0x30, 0x60, 0x60, 0x60, 0x60, 0x60, 0xc0}
+
+/* asciitilde (126) */
+#define NXFONT_METRICS_126 {1, 7, 3, 1, 11, 0}
+#define NXFONT_BITMAP_126 {0x72, 0xde, 0x8c}
+
+/* exclamdown (161) */
+#define NXFONT_METRICS_161 {1, 2, 11, 1, 9, 0}
+#define NXFONT_BITMAP_161 {0xc0, 0xc0, 0x0, 0x40, 0x40, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* cent (162) */
+#define NXFONT_METRICS_162 {1, 7, 10, 0, 8, 0}
+#define NXFONT_BITMAP_162 {0x4, 0x3c, 0x6e, 0xc8, 0xd0, 0xd0, 0xe6, 0x66, 0x7c, 0x40}
+
+/* sterling (163) */
+#define NXFONT_METRICS_163 {1, 8, 11, 0, 6, 0}
+#define NXFONT_BITMAP_163 {0x3c, 0x66, 0x66, 0x60, 0xfc, 0x30, 0x30, 0x30, 0x60, 0xfb, 0xde}
+
+/* currency (164) */
+#define NXFONT_METRICS_164 {1, 7, 7, 0, 8, 0}
+#define NXFONT_BITMAP_164 {0x82, 0x7c, 0x6c, 0x6c, 0x6c, 0x7c, 0x82}
+
+/* yen (165) */
+#define NXFONT_METRICS_165 {1, 8, 11, 0, 6, 0}
+#define NXFONT_BITMAP_165 {0xc3, 0xc3, 0xc3, 0x66, 0x66, 0x3c, 0x7e, 0x18, 0x7e, 0x18, 0x18}
+
+/* brokenbar (166) */
+#define NXFONT_METRICS_166 {1, 1, 14, 2, 6, 0}
+#define NXFONT_BITMAP_166 {0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x0, 0x0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}
+
+/* section (167) */
+#define NXFONT_METRICS_167 {1, 6, 14, 1, 6, 0}
+#define NXFONT_BITMAP_167 {0x78, 0xcc, 0xcc, 0xe0, 0x78, 0xdc, 0xcc, 0xcc, 0xec, 0x78, 0x1c, 0xcc, 0xcc, 0x78}
+
+/* dieresis (168) */
+#define NXFONT_METRICS_168 {1, 5, 2, 0, 6, 0}
+#define NXFONT_BITMAP_168 {0xd8, 0xd8}
+
+/* copyright (169) */
+#define NXFONT_METRICS_169 {2, 10, 11, 1, 6, 0}
+#define NXFONT_BITMAP_169 {0x1e, 0x0, 0x61, 0x80, 0x4c, 0x80, 0xd2, 0xc0, 0x90, 0x40, 0x90, 0x40, 0x90, 0x40, 0x92, 0x40, 0x4c, 0x80, 0x61, 0x80, 0x1e, 0x0}
+
+/* ordfeminine (170) */
+#define NXFONT_METRICS_170 {1, 5, 7, 0, 6, 0}
+#define NXFONT_BITMAP_170 {0x70, 0x90, 0x70, 0xd0, 0xf8, 0x0, 0xf8}
+
+/* guillemotleft (171) */
+#define NXFONT_METRICS_171 {1, 7, 5, 1, 10, 0}
+#define NXFONT_BITMAP_171 {0x36, 0x6c, 0xd8, 0x6c, 0x36}
+
+/* logicalnot (172) */
+#define NXFONT_METRICS_172 {1, 7, 4, 1, 11, 0}
+#define NXFONT_BITMAP_172 {0xfe, 0xfe, 0x2, 0x2}
+
+/* hyphen (173) */
+#define NXFONT_METRICS_173 {1, 3, 1, 0, 12, 0}
+#define NXFONT_BITMAP_173 {0xe0}
+
+/* registered (174) */
+#define NXFONT_METRICS_174 {2, 10, 11, 1, 6, 0}
+#define NXFONT_BITMAP_174 {0x1e, 0x0, 0x61, 0x80, 0x5c, 0x80, 0x92, 0x40, 0x92, 0x40, 0x9c, 0x40, 0x92, 0x40, 0x92, 0x40, 0x52, 0x80, 0x61, 0x80, 0x1e, 0x0}
+
+/* macron (175) */
+#define NXFONT_METRICS_175 {1, 5, 1, 0, 7, 0}
+#define NXFONT_BITMAP_175 {0xf8}
+
+/* degree (176) */
+#define NXFONT_METRICS_176 {1, 4, 4, 1, 6, 0}
+#define NXFONT_BITMAP_176 {0x60, 0x90, 0x90, 0x60}
+
+/* plusminus (177) */
+#define NXFONT_METRICS_177 {1, 8, 9, 0, 8, 0}
+#define NXFONT_BITMAP_177 {0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18, 0x0, 0xff}
+
+/* twosuperior (178) */
+#define NXFONT_METRICS_178 {1, 4, 6, 0, 6, 0}
+#define NXFONT_BITMAP_178 {0x60, 0xb0, 0x30, 0x60, 0xc0, 0xf0}
+
+/* threesuperior (179) */
+#define NXFONT_METRICS_179 {1, 4, 6, 0, 6, 0}
+#define NXFONT_BITMAP_179 {0x60, 0xb0, 0x60, 0x30, 0xb0, 0x60}
+
+/* acute (180) */
+#define NXFONT_METRICS_180 {1, 3, 2, 1, 6, 0}
+#define NXFONT_BITMAP_180 {0x60, 0xc0}
+
+/* mu (181) */
+#define NXFONT_METRICS_181 {1, 7, 11, 1, 9, 0}
+#define NXFONT_BITMAP_181 {0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xee, 0xf6, 0xc0, 0xc0, 0xc0}
+
+/* paragraph (182) */
+#define NXFONT_METRICS_182 {1, 8, 14, 0, 6, 0}
+#define NXFONT_BITMAP_182 {0x3f, 0x7a, 0xfa, 0xfa, 0xfa, 0x7a, 0x3a, 0xa, 0xa, 0xa, 0xa, 0xa, 0xa, 0xa}
+
+/* periodcentered (183) */
+#define NXFONT_METRICS_183 {1, 2, 2, 1, 12, 0}
+#define NXFONT_BITMAP_183 {0xc0, 0xc0}
+
+/* cedilla (184) */
+#define NXFONT_METRICS_184 {1, 5, 3, 0, 17, 0}
+#define NXFONT_BITMAP_184 {0x18, 0xd8, 0x70}
+
+/* onesuperior (185) */
+#define NXFONT_METRICS_185 {1, 3, 6, 0, 6, 0}
+#define NXFONT_BITMAP_185 {0x60, 0xe0, 0x60, 0x60, 0x60, 0x60}
+
+/* ordmasculine (186) */
+#define NXFONT_METRICS_186 {1, 5, 7, 0, 6, 0}
+#define NXFONT_BITMAP_186 {0x70, 0xd8, 0xd8, 0xd8, 0x70, 0x0, 0xf8}
+
+/* guillemotright (187) */
+#define NXFONT_METRICS_187 {1, 7, 5, 1, 10, 0}
+#define NXFONT_BITMAP_187 {0xd8, 0x6c, 0x36, 0x6c, 0xd8}
+
+/* onequarter (188) */
+#define NXFONT_METRICS_188 {2, 12, 11, 0, 6, 0}
+#define NXFONT_BITMAP_188 {0x61, 0x80, 0xe1, 0x80, 0x63, 0x0, 0x63, 0x0, 0x66, 0x0, 0x66, 0x20, 0x6, 0x60, 0xc, 0xe0, 0xd, 0x60, 0x19, 0xf0, 0x18, 0x60}
+
+/* onehalf (189) */
+#define NXFONT_METRICS_189 {2, 11, 11, 0, 6, 0}
+#define NXFONT_BITMAP_189 {0x61, 0x80, 0xe1, 0x80, 0x63, 0x0, 0x63, 0x0, 0x66, 0x0, 0x66, 0xc0, 0x7, 0x60, 0xc, 0x60, 0xc, 0xc0, 0x19, 0x80, 0x19, 0xe0}
+
+/* threequarters (190) */
+#define NXFONT_METRICS_190 {2, 12, 11, 0, 6, 0}
+#define NXFONT_BITMAP_190 {0x61, 0x80, 0xb1, 0x80, 0x63, 0x0, 0x33, 0x0, 0xb6, 0x0, 0x66, 0x20, 0x6, 0x60, 0xc, 0xe0, 0xd, 0x60, 0x19, 0xf0, 0x18, 0x60}
+
+/* questiondown (191) */
+#define NXFONT_METRICS_191 {1, 7, 11, 1, 9, 0}
+#define NXFONT_BITMAP_191 {0x18, 0x18, 0x0, 0x18, 0x18, 0x30, 0x60, 0xc0, 0xc6, 0xc6, 0x7c}
+
+/* Agrave (192) */
+#define NXFONT_METRICS_192 {2, 10, 14, 0, 3, 0}
+#define NXFONT_BITMAP_192 {0x18, 0x0, 0xc, 0x0, 0x0, 0x0, 0xc, 0x0, 0xc, 0x0, 0x1e, 0x0, 0x12, 0x0, 0x33, 0x0, 0x33, 0x0, 0x61, 0x80, 0x7f, 0x80, 0x61, 0x80, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* Aacute (193) */
+#define NXFONT_METRICS_193 {2, 10, 14, 0, 3, 0}
+#define NXFONT_BITMAP_193 {0x6, 0x0, 0xc, 0x0, 0x0, 0x0, 0xc, 0x0, 0xc, 0x0, 0x1e, 0x0, 0x12, 0x0, 0x33, 0x0, 0x33, 0x0, 0x61, 0x80, 0x7f, 0x80, 0x61, 0x80, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* Acircumflex (194) */
+#define NXFONT_METRICS_194 {2, 10, 14, 0, 3, 0}
+#define NXFONT_BITMAP_194 {0xe, 0x0, 0x1b, 0x0, 0x0, 0x0, 0xc, 0x0, 0xc, 0x0, 0x1e, 0x0, 0x12, 0x0, 0x33, 0x0, 0x33, 0x0, 0x61, 0x80, 0x7f, 0x80, 0x61, 0x80, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* Atilde (195) */
+#define NXFONT_METRICS_195 {2, 10, 14, 0, 3, 0}
+#define NXFONT_BITMAP_195 {0xd, 0x0, 0x16, 0x0, 0x0, 0x0, 0xc, 0x0, 0xc, 0x0, 0x1e, 0x0, 0x12, 0x0, 0x33, 0x0, 0x33, 0x0, 0x61, 0x80, 0x7f, 0x80, 0x61, 0x80, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* Adieresis (196) */
+#define NXFONT_METRICS_196 {2, 10, 14, 0, 3, 0}
+#define NXFONT_BITMAP_196 {0x33, 0x0, 0x33, 0x0, 0x0, 0x0, 0xc, 0x0, 0xc, 0x0, 0x1e, 0x0, 0x12, 0x0, 0x33, 0x0, 0x33, 0x0, 0x61, 0x80, 0x7f, 0x80, 0x61, 0x80, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* Aring (197) */
+#define NXFONT_METRICS_197 {2, 10, 14, 0, 3, 0}
+#define NXFONT_BITMAP_197 {0xc, 0x0, 0x12, 0x0, 0xc, 0x0, 0xc, 0x0, 0xc, 0x0, 0x1e, 0x0, 0x12, 0x0, 0x33, 0x0, 0x33, 0x0, 0x61, 0x80, 0x7f, 0x80, 0x61, 0x80, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* AE (198) */
+#define NXFONT_METRICS_198 {2, 14, 11, 0, 6, 0}
+#define NXFONT_BITMAP_198 {0xf, 0xfc, 0xf, 0x0, 0x1b, 0x0, 0x13, 0x0, 0x33, 0x0, 0x33, 0xf8, 0x63, 0x0, 0x7f, 0x0, 0x63, 0x0, 0xc3, 0x0, 0xc3, 0xfc}
+
+/* Ccedilla (199) */
+#define NXFONT_METRICS_199 {2, 9, 14, 1, 6, 0}
+#define NXFONT_BITMAP_199 {0x1f, 0x0, 0x7b, 0x80, 0x60, 0x80, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0x60, 0x80, 0x7b, 0x80, 0x1f, 0x0, 0x6, 0x0, 0x36, 0x0, 0x1c, 0x0}
+
+/* Egrave (200) */
+#define NXFONT_METRICS_200 {1, 7, 14, 1, 3, 0}
+#define NXFONT_BITMAP_200 {0x30, 0x18, 0x0, 0xfe, 0xc0, 0xc0, 0xc0, 0xc0, 0xfe, 0xc0, 0xc0, 0xc0, 0xc0, 0xfe}
+
+/* Eacute (201) */
+#define NXFONT_METRICS_201 {1, 7, 14, 1, 3, 0}
+#define NXFONT_BITMAP_201 {0xc, 0x18, 0x0, 0xfe, 0xc0, 0xc0, 0xc0, 0xc0, 0xfe, 0xc0, 0xc0, 0xc0, 0xc0, 0xfe}
+
+/* Ecircumflex (202) */
+#define NXFONT_METRICS_202 {1, 7, 14, 1, 3, 0}
+#define NXFONT_BITMAP_202 {0x1c, 0x36, 0x0, 0xfe, 0xc0, 0xc0, 0xc0, 0xc0, 0xfe, 0xc0, 0xc0, 0xc0, 0xc0, 0xfe}
+
+/* Edieresis (203) */
+#define NXFONT_METRICS_203 {1, 7, 14, 1, 3, 0}
+#define NXFONT_BITMAP_203 {0x6c, 0x6c, 0x0, 0xfe, 0xc0, 0xc0, 0xc0, 0xc0, 0xfe, 0xc0, 0xc0, 0xc0, 0xc0, 0xfe}
+
+/* Igrave (204) */
+#define NXFONT_METRICS_204 {1, 3, 14, 0, 3, 0}
+#define NXFONT_BITMAP_204 {0xc0, 0x60, 0x0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60}
+
+/* Iacute (205) */
+#define NXFONT_METRICS_205 {1, 3, 14, 1, 3, 0}
+#define NXFONT_BITMAP_205 {0x60, 0xc0, 0x0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* Icircumflex (206) */
+#define NXFONT_METRICS_206 {1, 5, 14, 0, 3, 0}
+#define NXFONT_BITMAP_206 {0x70, 0xd8, 0x0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60}
+
+/* Idieresis (207) */
+#define NXFONT_METRICS_207 {1, 5, 14, 0, 3, 0}
+#define NXFONT_BITMAP_207 {0xd8, 0xd8, 0x0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60}
+
+/* Eth (208) */
+#define NXFONT_METRICS_208 {2, 10, 11, 0, 6, 0}
+#define NXFONT_BITMAP_208 {0x7e, 0x0, 0x63, 0x80, 0x61, 0x80, 0x60, 0xc0, 0x60, 0xc0, 0xf8, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x61, 0x80, 0x63, 0x80, 0x7e, 0x0}
+
+/* Ntilde (209) */
+#define NXFONT_METRICS_209 {2, 9, 14, 1, 3, 0}
+#define NXFONT_BITMAP_209 {0x1a, 0x0, 0x2c, 0x0, 0x0, 0x0, 0xc1, 0x80, 0xe1, 0x80, 0xe1, 0x80, 0xd1, 0x80, 0xd9, 0x80, 0xc9, 0x80, 0xcd, 0x80, 0xc5, 0x80, 0xc3, 0x80, 0xc3, 0x80, 0xc1, 0x80}
+
+/* Ograve (210) */
+#define NXFONT_METRICS_210 {2, 10, 14, 1, 3, 0}
+#define NXFONT_BITMAP_210 {0x18, 0x0, 0xc, 0x0, 0x0, 0x0, 0x1e, 0x0, 0x73, 0x80, 0x61, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x61, 0x80, 0x73, 0x80, 0x1e, 0x0}
+
+/* Oacute (211) */
+#define NXFONT_METRICS_211 {2, 10, 14, 1, 3, 0}
+#define NXFONT_BITMAP_211 {0x6, 0x0, 0xc, 0x0, 0x0, 0x0, 0x1e, 0x0, 0x73, 0x80, 0x61, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x61, 0x80, 0x73, 0x80, 0x1e, 0x0}
+
+/* Ocircumflex (212) */
+#define NXFONT_METRICS_212 {2, 10, 14, 1, 3, 0}
+#define NXFONT_BITMAP_212 {0xe, 0x0, 0x1b, 0x0, 0x0, 0x0, 0x1e, 0x0, 0x73, 0x80, 0x61, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x61, 0x80, 0x73, 0x80, 0x1e, 0x0}
+
+/* Otilde (213) */
+#define NXFONT_METRICS_213 {2, 10, 14, 1, 3, 0}
+#define NXFONT_BITMAP_213 {0xd, 0x0, 0x16, 0x0, 0x0, 0x0, 0x1e, 0x0, 0x73, 0x80, 0x61, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x61, 0x80, 0x73, 0x80, 0x1e, 0x0}
+
+/* Odieresis (214) */
+#define NXFONT_METRICS_214 {2, 10, 14, 1, 3, 0}
+#define NXFONT_BITMAP_214 {0x33, 0x0, 0x33, 0x0, 0x0, 0x0, 0x1e, 0x0, 0x73, 0x80, 0x61, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x61, 0x80, 0x73, 0x80, 0x1e, 0x0}
+
+/* multiply (215) */
+#define NXFONT_METRICS_215 {1, 8, 7, 0, 9, 0}
+#define NXFONT_BITMAP_215 {0xc3, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0xc3}
+
+/* Oslash (216) */
+#define NXFONT_METRICS_216 {2, 12, 11, 0, 6, 0}
+#define NXFONT_BITMAP_216 {0xf, 0x30, 0x39, 0xe0, 0x30, 0xc0, 0x61, 0xe0, 0x63, 0x60, 0x66, 0x60, 0x6c, 0x60, 0x78, 0x60, 0x30, 0xc0, 0x79, 0xc0, 0xcf, 0x0}
+
+/* Ugrave (217) */
+#define NXFONT_METRICS_217 {2, 9, 14, 1, 3, 0}
+#define NXFONT_BITMAP_217 {0x18, 0x0, 0xc, 0x0, 0x0, 0x0, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0x63, 0x0, 0x3e, 0x0}
+
+/* Uacute (218) */
+#define NXFONT_METRICS_218 {2, 9, 14, 1, 3, 0}
+#define NXFONT_BITMAP_218 {0x6, 0x0, 0xc, 0x0, 0x0, 0x0, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0x63, 0x0, 0x3e, 0x0}
+
+/* Ucircumflex (219) */
+#define NXFONT_METRICS_219 {2, 9, 14, 1, 3, 0}
+#define NXFONT_BITMAP_219 {0x1c, 0x0, 0x36, 0x0, 0x0, 0x0, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0x63, 0x0, 0x3e, 0x0}
+
+/* Udieresis (220) */
+#define NXFONT_METRICS_220 {2, 9, 14, 1, 3, 0}
+#define NXFONT_BITMAP_220 {0x63, 0x0, 0x63, 0x0, 0x0, 0x0, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0x63, 0x0, 0x3e, 0x0}
+
+/* Yacute (221) */
+#define NXFONT_METRICS_221 {2, 10, 14, 0, 3, 0}
+#define NXFONT_BITMAP_221 {0x6, 0x0, 0xc, 0x0, 0x0, 0x0, 0xc0, 0xc0, 0x61, 0x80, 0x61, 0x80, 0x33, 0x0, 0x33, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0xc, 0x0, 0xc, 0x0, 0xc, 0x0, 0xc, 0x0}
+
+/* Thorn (222) */
+#define NXFONT_METRICS_222 {1, 8, 11, 1, 6, 0}
+#define NXFONT_BITMAP_222 {0xc0, 0xc0, 0xfe, 0xc7, 0xc3, 0xc3, 0xc7, 0xfe, 0xc0, 0xc0, 0xc0}
+
+/* germandbls (223) */
+#define NXFONT_METRICS_223 {1, 6, 11, 1, 6, 0}
+#define NXFONT_BITMAP_223 {0x78, 0xcc, 0xcc, 0xcc, 0xd8, 0xd8, 0xcc, 0xcc, 0xcc, 0xcc, 0xd8}
+
+/* agrave (224) */
+#define NXFONT_METRICS_224 {1, 7, 11, 1, 6, 0}
+#define NXFONT_BITMAP_224 {0x30, 0x18, 0x0, 0x78, 0xcc, 0xc, 0x7c, 0xcc, 0xcc, 0xdc, 0x76}
+
+/* aacute (225) */
+#define NXFONT_METRICS_225 {1, 7, 11, 1, 6, 0}
+#define NXFONT_BITMAP_225 {0x18, 0x30, 0x0, 0x78, 0xcc, 0xc, 0x7c, 0xcc, 0xcc, 0xdc, 0x76}
+
+/* acircumflex (226) */
+#define NXFONT_METRICS_226 {1, 7, 11, 1, 6, 0}
+#define NXFONT_BITMAP_226 {0x38, 0x6c, 0x0, 0x78, 0xcc, 0xc, 0x7c, 0xcc, 0xcc, 0xdc, 0x76}
+
+/* atilde (227) */
+#define NXFONT_METRICS_227 {1, 7, 11, 1, 6, 0}
+#define NXFONT_BITMAP_227 {0x34, 0x58, 0x0, 0x78, 0xcc, 0xc, 0x7c, 0xcc, 0xcc, 0xdc, 0x76}
+
+/* adieresis (228) */
+#define NXFONT_METRICS_228 {1, 7, 11, 1, 6, 0}
+#define NXFONT_BITMAP_228 {0x6c, 0x6c, 0x0, 0x78, 0xcc, 0xc, 0x7c, 0xcc, 0xcc, 0xdc, 0x76}
+
+/* aring (229) */
+#define NXFONT_METRICS_229 {1, 7, 11, 1, 6, 0}
+#define NXFONT_BITMAP_229 {0x30, 0x48, 0x30, 0x78, 0xcc, 0xc, 0x7c, 0xcc, 0xcc, 0xdc, 0x76}
+
+/* ae (230) */
+#define NXFONT_METRICS_230 {2, 11, 8, 1, 9, 0}
+#define NXFONT_BITMAP_230 {0x7b, 0xc0, 0xce, 0x60, 0xc, 0x60, 0x7f, 0xe0, 0xcc, 0x0, 0xcc, 0x0, 0xde, 0x60, 0x77, 0xc0}
+
+/* ccedilla (231) */
+#define NXFONT_METRICS_231 {1, 7, 11, 1, 9, 0}
+#define NXFONT_BITMAP_231 {0x3c, 0x66, 0xc6, 0xc0, 0xc0, 0xc6, 0x66, 0x3c, 0x18, 0x58, 0x70}
+
+/* egrave (232) */
+#define NXFONT_METRICS_232 {1, 6, 11, 1, 6, 0}
+#define NXFONT_BITMAP_232 {0x60, 0x30, 0x0, 0x78, 0xcc, 0xcc, 0xfc, 0xc0, 0xc0, 0xec, 0x78}
+
+/* eacute (233) */
+#define NXFONT_METRICS_233 {1, 6, 11, 1, 6, 0}
+#define NXFONT_BITMAP_233 {0x18, 0x30, 0x0, 0x78, 0xcc, 0xcc, 0xfc, 0xc0, 0xc0, 0xec, 0x78}
+
+/* ecircumflex (234) */
+#define NXFONT_METRICS_234 {1, 6, 11, 1, 6, 0}
+#define NXFONT_BITMAP_234 {0x38, 0x6c, 0x0, 0x78, 0xcc, 0xcc, 0xfc, 0xc0, 0xc0, 0xec, 0x78}
+
+/* edieresis (235) */
+#define NXFONT_METRICS_235 {1, 6, 11, 1, 6, 0}
+#define NXFONT_BITMAP_235 {0x6c, 0x6c, 0x0, 0x78, 0xcc, 0xcc, 0xfc, 0xc0, 0xc0, 0xec, 0x78}
+
+/* igrave (236) */
+#define NXFONT_METRICS_236 {1, 3, 11, 0, 6, 0}
+#define NXFONT_BITMAP_236 {0xc0, 0x60, 0x0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60}
+
+/* iacute (237) */
+#define NXFONT_METRICS_237 {1, 3, 11, 1, 6, 0}
+#define NXFONT_BITMAP_237 {0x60, 0xc0, 0x0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* icircumflex (238) */
+#define NXFONT_METRICS_238 {1, 5, 11, 0, 6, 0}
+#define NXFONT_BITMAP_238 {0x70, 0xd8, 0x0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60}
+
+/* idieresis (239) */
+#define NXFONT_METRICS_239 {1, 5, 11, 0, 6, 0}
+#define NXFONT_BITMAP_239 {0xd8, 0xd8, 0x0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60}
+
+/* eth (240) */
+#define NXFONT_METRICS_240 {1, 7, 11, 1, 6, 0}
+#define NXFONT_BITMAP_240 {0x6c, 0x38, 0x48, 0x3c, 0x6c, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38}
+
+/* ntilde (241) */
+#define NXFONT_METRICS_241 {1, 7, 11, 1, 6, 0}
+#define NXFONT_BITMAP_241 {0x34, 0x58, 0x0, 0xdc, 0xee, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6}
+
+/* ograve (242) */
+#define NXFONT_METRICS_242 {1, 7, 11, 1, 6, 0}
+#define NXFONT_BITMAP_242 {0x30, 0x18, 0x0, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38}
+
+/* oacute (243) */
+#define NXFONT_METRICS_243 {1, 7, 11, 1, 6, 0}
+#define NXFONT_BITMAP_243 {0x18, 0x30, 0x0, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38}
+
+/* ocircumflex (244) */
+#define NXFONT_METRICS_244 {1, 7, 11, 1, 6, 0}
+#define NXFONT_BITMAP_244 {0x38, 0x6c, 0x0, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38}
+
+/* otilde (245) */
+#define NXFONT_METRICS_245 {1, 7, 11, 1, 6, 0}
+#define NXFONT_BITMAP_245 {0x34, 0x58, 0x0, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38}
+
+/* odieresis (246) */
+#define NXFONT_METRICS_246 {1, 7, 11, 1, 6, 0}
+#define NXFONT_BITMAP_246 {0x6c, 0x6c, 0x0, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38}
+
+/* divide (247) */
+#define NXFONT_METRICS_247 {1, 8, 7, 0, 9, 0}
+#define NXFONT_BITMAP_247 {0x18, 0x18, 0x0, 0xff, 0x0, 0x18, 0x18}
+
+/* oslash (248) */
+#define NXFONT_METRICS_248 {1, 7, 8, 1, 9, 0}
+#define NXFONT_BITMAP_248 {0x3a, 0x6c, 0xce, 0xd6, 0xd6, 0xe6, 0x6c, 0xb8}
+
+/* ugrave (249) */
+#define NXFONT_METRICS_249 {1, 7, 11, 1, 6, 0}
+#define NXFONT_BITMAP_249 {0x30, 0x18, 0x0, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xee, 0x76}
+
+/* uacute (250) */
+#define NXFONT_METRICS_250 {1, 7, 11, 1, 6, 0}
+#define NXFONT_BITMAP_250 {0xc, 0x18, 0x0, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xee, 0x76}
+
+/* ucircumflex (251) */
+#define NXFONT_METRICS_251 {1, 7, 11, 1, 6, 0}
+#define NXFONT_BITMAP_251 {0x38, 0x6c, 0x0, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xee, 0x76}
+
+/* udieresis (252) */
+#define NXFONT_METRICS_252 {1, 7, 11, 1, 6, 0}
+#define NXFONT_BITMAP_252 {0x6c, 0x6c, 0x0, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xee, 0x76}
+
+/* yacute (253) */
+#define NXFONT_METRICS_253 {1, 8, 14, 0, 6, 0}
+#define NXFONT_BITMAP_253 {0xc, 0x18, 0x0, 0xc3, 0xc3, 0x66, 0x66, 0x24, 0x3c, 0x18, 0x18, 0x18, 0x30, 0x70}
+
+/* thorn (254) */
+#define NXFONT_METRICS_254 {1, 7, 14, 1, 6, 0}
+#define NXFONT_BITMAP_254 {0xc0, 0xc0, 0xc0, 0xd8, 0xec, 0xc6, 0xc6, 0xc6, 0xc6, 0xec, 0xd8, 0xc0, 0xc0, 0xc0}
+
+/* ydieresis (255) */
+#define NXFONT_METRICS_255 {1, 8, 14, 0, 6, 0}
+#define NXFONT_BITMAP_255 {0x36, 0x36, 0x0, 0xc3, 0xc3, 0x66, 0x66, 0x24, 0x3c, 0x18, 0x18, 0x18, 0x30, 0x70}
+
+/****************************************************************************
+ * Public Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+#define EXTERN extern "C"
+extern "C" {
+#else
+#define EXTERN extern
+#endif
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* __GRAPHICS_NXFONTS_NXFONTS_SANS17X23B_H */
diff --git a/nuttx/graphics/nxfonts/nxfonts_sans20x26.h b/nuttx/graphics/nxfonts/nxfonts_sans20x26.h
new file mode 100644
index 000000000..c887da5e5
--- /dev/null
+++ b/nuttx/graphics/nxfonts/nxfonts_sans20x26.h
@@ -0,0 +1,849 @@
+/****************************************************************************
+ * graphics/nxfonts/nxfonts_serif30x26.h
+ *
+ * Copyright (C) 2011-2012 NX Engineering, S.A., All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT}
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING}
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+#ifndef __GRAPHICS_NXFONTS_NXFONTS_SANS20X26_H
+#define __GRAPHICS_NXFONTS_NXFONTS_SANS20X26_H
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/* Font ID */
+
+#define NXFONT_ID FONTID_SANS20X26
+
+/* Ranges of 7-bit and 8-bit fonts */
+
+#define NXFONT_MIN7BIT 33
+#define NXFONT_MAX7BIT 126
+
+#define NXFONT_MIN8BIT 161
+#define NXFONT_MAX8BIT 255
+
+/* Maximum height and width of any glyph in the set */
+
+#define NXFONT_MAXHEIGHT 26
+#define NXFONT_MAXWIDTH 20
+
+/* The width of a space */
+
+#define NXFONT_SPACEWIDTH 5
+
+/* exclam (33) */
+#define NXFONT_METRICS_33 {1, 1, 12, 2, 8, 0}
+#define NXFONT_BITMAP_33 {0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x0, 0x80, 0x80}
+
+/* quotedbl (34) */
+#define NXFONT_METRICS_34 {1, 4, 4, 1, 8, 0}
+#define NXFONT_BITMAP_34 {0x90, 0x90, 0x90, 0x90}
+
+/* numbersign (35) */
+#define NXFONT_METRICS_35 {1, 8, 11, 0, 9, 0}
+#define NXFONT_BITMAP_35 {0x12, 0x12, 0x12, 0x7f, 0x24, 0x24, 0x24, 0xfe, 0x48, 0x48, 0x48}
+
+/* dollar (36) */
+#define NXFONT_METRICS_36 {1, 7, 15, 1, 7, 0}
+#define NXFONT_BITMAP_36 {0x10, 0x7c, 0x92, 0x92, 0x90, 0x50, 0x30, 0x18, 0x14, 0x12, 0x92, 0x92, 0x7c, 0x10, 0x10}
+
+/* percent (37) */
+#define NXFONT_METRICS_37 {2, 12, 12, 0, 8, 0}
+#define NXFONT_BITMAP_37 {0x70, 0x40, 0x88, 0x80, 0x88, 0x80, 0x89, 0x0, 0x72, 0x0, 0x2, 0x0, 0x4, 0x0, 0x4, 0xe0, 0x9, 0x10, 0x11, 0x10, 0x11, 0x10, 0x20, 0xe0}
+
+/* ampersand (38) */
+#define NXFONT_METRICS_38 {2, 10, 12, 0, 8, 0}
+#define NXFONT_BITMAP_38 {0x18, 0x0, 0x24, 0x0, 0x42, 0x0, 0x42, 0x0, 0x24, 0x0, 0x18, 0x0, 0x29, 0x0, 0x45, 0x0, 0x82, 0x0, 0x83, 0x0, 0x44, 0x80, 0x38, 0x40}
+
+/* quotesingle (39) */
+#define NXFONT_METRICS_39 {1, 2, 4, 0, 8, 0}
+#define NXFONT_BITMAP_39 {0xc0, 0xc0, 0x40, 0x40}
+
+/* parenleft (40) */
+#define NXFONT_METRICS_40 {1, 3, 16, 1, 8, 0}
+#define NXFONT_BITMAP_40 {0x20, 0x40, 0x40, 0x40, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x20}
+
+/* parenright (41) */
+#define NXFONT_METRICS_41 {1, 3, 16, 1, 8, 0}
+#define NXFONT_BITMAP_41 {0x80, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x40, 0x40, 0x40, 0x80}
+
+/* asterisk (42) */
+#define NXFONT_METRICS_42 {1, 5, 5, 0, 8, 0}
+#define NXFONT_BITMAP_42 {0x20, 0xa8, 0x70, 0x50, 0x88}
+
+/* plus (43) */
+#define NXFONT_METRICS_43 {2, 9, 9, 0, 11, 0}
+#define NXFONT_BITMAP_43 {0x8, 0x0, 0x8, 0x0, 0x8, 0x0, 0x8, 0x0, 0xff, 0x80, 0x8, 0x0, 0x8, 0x0, 0x8, 0x0, 0x8, 0x0}
+
+/* comma (44) */
+#define NXFONT_METRICS_44 {1, 2, 4, 1, 18, 0}
+#define NXFONT_BITMAP_44 {0x40, 0x40, 0x40, 0x80}
+
+/* hyphen (45) */
+#define NXFONT_METRICS_45 {1, 4, 1, 0, 15, 0}
+#define NXFONT_BITMAP_45 {0xf0}
+
+/* period (46) */
+#define NXFONT_METRICS_46 {1, 1, 2, 2, 18, 0}
+#define NXFONT_BITMAP_46 {0x80, 0x80}
+
+/* slash (47) */
+#define NXFONT_METRICS_47 {1, 4, 12, 0, 8, 0}
+#define NXFONT_BITMAP_47 {0x10, 0x10, 0x20, 0x20, 0x20, 0x20, 0x40, 0x40, 0x40, 0x80, 0x80, 0x80}
+
+/* zero (48) */
+#define NXFONT_METRICS_48 {1, 7, 12, 1, 8, 0}
+#define NXFONT_BITMAP_48 {0x38, 0x44, 0x44, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x44, 0x44, 0x38}
+
+/* one (49) */
+#define NXFONT_METRICS_49 {1, 3, 12, 3, 8, 0}
+#define NXFONT_BITMAP_49 {0x20, 0x20, 0x60, 0xa0, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20}
+
+/* two (50) */
+#define NXFONT_METRICS_50 {1, 7, 12, 1, 8, 0}
+#define NXFONT_BITMAP_50 {0x38, 0x44, 0x82, 0x82, 0x2, 0x4, 0x8, 0x30, 0x40, 0x80, 0x80, 0xfe}
+
+/* three (51) */
+#define NXFONT_METRICS_51 {1, 7, 12, 1, 8, 0}
+#define NXFONT_BITMAP_51 {0x38, 0x44, 0x82, 0x82, 0x4, 0x38, 0x4, 0x2, 0x82, 0x82, 0x44, 0x38}
+
+/* four (52) */
+#define NXFONT_METRICS_52 {1, 8, 12, 0, 8, 0}
+#define NXFONT_BITMAP_52 {0xc, 0x14, 0x14, 0x24, 0x24, 0x44, 0x44, 0x84, 0xff, 0x4, 0x4, 0x4}
+
+/* five (53) */
+#define NXFONT_METRICS_53 {1, 7, 12, 1, 8, 0}
+#define NXFONT_BITMAP_53 {0x3e, 0x20, 0x20, 0x40, 0x78, 0x44, 0x2, 0x2, 0x2, 0x82, 0x44, 0x38}
+
+/* six (54) */
+#define NXFONT_METRICS_54 {1, 7, 12, 1, 8, 0}
+#define NXFONT_BITMAP_54 {0x3c, 0x42, 0x82, 0x80, 0xb8, 0xc4, 0x82, 0x82, 0x82, 0x82, 0x44, 0x38}
+
+/* seven (55) */
+#define NXFONT_METRICS_55 {1, 8, 12, 0, 8, 0}
+#define NXFONT_BITMAP_55 {0xff, 0x1, 0x2, 0x4, 0x4, 0x8, 0x8, 0x10, 0x10, 0x10, 0x20, 0x20}
+
+/* eight (56) */
+#define NXFONT_METRICS_56 {1, 7, 12, 1, 8, 0}
+#define NXFONT_BITMAP_56 {0x38, 0x44, 0x82, 0x82, 0x44, 0x38, 0x44, 0x82, 0x82, 0x82, 0x44, 0x38}
+
+/* nine (57) */
+#define NXFONT_METRICS_57 {1, 7, 12, 1, 8, 0}
+#define NXFONT_BITMAP_57 {0x38, 0x44, 0x82, 0x82, 0x82, 0x82, 0x46, 0x3a, 0x2, 0x82, 0x84, 0x78}
+
+/* colon (58) */
+#define NXFONT_METRICS_58 {1, 1, 9, 2, 11, 0}
+#define NXFONT_BITMAP_58 {0x80, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80, 0x80}
+
+/* semicolon (59) */
+#define NXFONT_METRICS_59 {1, 2, 11, 1, 11, 0}
+#define NXFONT_BITMAP_59 {0x40, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40, 0x40, 0x40, 0x80}
+
+/* less (60) */
+#define NXFONT_METRICS_60 {2, 9, 9, 0, 11, 0}
+#define NXFONT_BITMAP_60 {0x1, 0x80, 0x6, 0x0, 0x18, 0x0, 0x60, 0x0, 0x80, 0x0, 0x60, 0x0, 0x18, 0x0, 0x6, 0x0, 0x1, 0x80}
+
+/* equal (61) */
+#define NXFONT_METRICS_61 {1, 8, 4, 0, 14, 0}
+#define NXFONT_BITMAP_61 {0xff, 0x0, 0x0, 0xff}
+
+/* greater (62) */
+#define NXFONT_METRICS_62 {2, 9, 9, 1, 11, 0}
+#define NXFONT_BITMAP_62 {0xc0, 0x0, 0x30, 0x0, 0xc, 0x0, 0x3, 0x0, 0x0, 0x80, 0x3, 0x0, 0xc, 0x0, 0x30, 0x0, 0xc0, 0x0}
+
+/* question (63) */
+#define NXFONT_METRICS_63 {1, 7, 12, 1, 8, 0}
+#define NXFONT_BITMAP_63 {0x38, 0x44, 0x82, 0x82, 0x2, 0x4, 0x8, 0x10, 0x10, 0x0, 0x10, 0x10}
+
+/* at (64) */
+#define NXFONT_METRICS_64 {2, 13, 14, 1, 8, 0}
+#define NXFONT_BITMAP_64 {0x7, 0x80, 0x18, 0x60, 0x20, 0x10, 0x43, 0xd0, 0x4c, 0x48, 0x88, 0x48, 0x90, 0x88, 0x90, 0x88, 0x90, 0x90, 0x99, 0x90, 0x4e, 0x60, 0x40, 0x0, 0x30, 0x60, 0xf, 0x80}
+
+/* A (65) */
+#define NXFONT_METRICS_65 {2, 10, 12, 0, 8, 0}
+#define NXFONT_BITMAP_65 {0xc, 0x0, 0xc, 0x0, 0x12, 0x0, 0x12, 0x0, 0x12, 0x0, 0x21, 0x0, 0x21, 0x0, 0x7f, 0x80, 0x40, 0x80, 0x40, 0x80, 0x80, 0x40, 0x80, 0x40}
+
+/* B (66) */
+#define NXFONT_METRICS_66 {2, 9, 12, 1, 8, 0}
+#define NXFONT_BITMAP_66 {0xfc, 0x0, 0x82, 0x0, 0x81, 0x0, 0x81, 0x0, 0x82, 0x0, 0xfe, 0x0, 0x81, 0x0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, 0x0, 0xfe, 0x0}
+
+/* C (67) */
+#define NXFONT_METRICS_67 {2, 10, 12, 1, 8, 0}
+#define NXFONT_BITMAP_67 {0xf, 0x0, 0x30, 0x80, 0x40, 0x40, 0x40, 0x0, 0x80, 0x0, 0x80, 0x0, 0x80, 0x0, 0x80, 0x0, 0x40, 0x0, 0x40, 0x40, 0x30, 0x80, 0xf, 0x0}
+
+/* D (68) */
+#define NXFONT_METRICS_68 {2, 10, 12, 1, 8, 0}
+#define NXFONT_BITMAP_68 {0xfc, 0x0, 0x83, 0x0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40, 0x80, 0x80, 0x80, 0x80, 0x83, 0x0, 0xfc, 0x0}
+
+/* E (69) */
+#define NXFONT_METRICS_69 {1, 8, 12, 1, 8, 0}
+#define NXFONT_BITMAP_69 {0xff, 0x80, 0x80, 0x80, 0x80, 0xff, 0x80, 0x80, 0x80, 0x80, 0x80, 0xff}
+
+/* F (70) */
+#define NXFONT_METRICS_70 {1, 7, 12, 1, 8, 0}
+#define NXFONT_BITMAP_70 {0xfe, 0x80, 0x80, 0x80, 0x80, 0xfe, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}
+
+/* G (71) */
+#define NXFONT_METRICS_71 {2, 10, 12, 1, 8, 0}
+#define NXFONT_BITMAP_71 {0xe, 0x0, 0x31, 0x80, 0x40, 0x40, 0x40, 0x0, 0x80, 0x0, 0x80, 0x0, 0x87, 0xc0, 0x80, 0x40, 0x40, 0x40, 0x40, 0xc0, 0x31, 0x40, 0xe, 0x40}
+
+/* H (72) */
+#define NXFONT_METRICS_72 {2, 9, 12, 1, 8, 0}
+#define NXFONT_BITMAP_72 {0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xff, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}
+
+/* I (73) */
+#define NXFONT_METRICS_73 {1, 1, 12, 1, 8, 0}
+#define NXFONT_BITMAP_73 {0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}
+
+/* J (74) */
+#define NXFONT_METRICS_74 {1, 6, 12, 0, 8, 0}
+#define NXFONT_BITMAP_74 {0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x84, 0x84, 0x84, 0x78}
+
+/* K (75) */
+#define NXFONT_METRICS_75 {1, 8, 12, 1, 8, 0}
+#define NXFONT_BITMAP_75 {0x81, 0x82, 0x84, 0x88, 0x90, 0xb0, 0xc8, 0x88, 0x84, 0x82, 0x82, 0x81}
+
+/* L (76) */
+#define NXFONT_METRICS_76 {1, 7, 12, 1, 8, 0}
+#define NXFONT_BITMAP_76 {0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xfe}
+
+/* M (77) */
+#define NXFONT_METRICS_77 {2, 11, 12, 1, 8, 0}
+#define NXFONT_BITMAP_77 {0x80, 0x20, 0xc0, 0x60, 0xc0, 0x60, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0x91, 0x20, 0x91, 0x20, 0x91, 0x20, 0x8a, 0x20, 0x8a, 0x20, 0x84, 0x20}
+
+/* N (78) */
+#define NXFONT_METRICS_78 {2, 9, 12, 1, 8, 0}
+#define NXFONT_BITMAP_78 {0x80, 0x80, 0xc0, 0x80, 0xa0, 0x80, 0xa0, 0x80, 0x90, 0x80, 0x88, 0x80, 0x88, 0x80, 0x84, 0x80, 0x82, 0x80, 0x82, 0x80, 0x81, 0x80, 0x80, 0x80}
+
+/* O (79) */
+#define NXFONT_METRICS_79 {2, 11, 12, 1, 8, 0}
+#define NXFONT_BITMAP_79 {0xe, 0x0, 0x31, 0x80, 0x40, 0x40, 0x40, 0x40, 0x80, 0x20, 0x80, 0x20, 0x80, 0x20, 0x80, 0x20, 0x40, 0x40, 0x40, 0x40, 0x31, 0x80, 0xe, 0x0}
+
+/* P (80) */
+#define NXFONT_METRICS_80 {1, 8, 12, 2, 8, 0}
+#define NXFONT_BITMAP_80 {0xfc, 0x82, 0x81, 0x81, 0x82, 0xfc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}
+
+/* Q (81) */
+#define NXFONT_METRICS_81 {2, 11, 13, 1, 8, 0}
+#define NXFONT_BITMAP_81 {0xe, 0x0, 0x31, 0x80, 0x40, 0x40, 0x40, 0x40, 0x80, 0x20, 0x80, 0x20, 0x80, 0x20, 0x80, 0x20, 0x40, 0x40, 0x42, 0x40, 0x31, 0x80, 0xe, 0x80, 0x0, 0x40}
+
+/* R (82) */
+#define NXFONT_METRICS_82 {2, 9, 12, 2, 8, 0}
+#define NXFONT_BITMAP_82 {0xfc, 0x0, 0x82, 0x0, 0x81, 0x0, 0x81, 0x0, 0x82, 0x0, 0xfc, 0x0, 0x82, 0x0, 0x81, 0x0, 0x81, 0x0, 0x81, 0x0, 0x81, 0x0, 0x80, 0x80}
+
+/* S (83) */
+#define NXFONT_METRICS_83 {2, 9, 12, 1, 8, 0}
+#define NXFONT_BITMAP_83 {0x3e, 0x0, 0x41, 0x0, 0x80, 0x80, 0x80, 0x80, 0x40, 0x0, 0x30, 0x0, 0xe, 0x0, 0x1, 0x0, 0x80, 0x80, 0x80, 0x80, 0x41, 0x0, 0x3e, 0x0}
+
+/* T (84) */
+#define NXFONT_METRICS_84 {2, 9, 12, 0, 8, 0}
+#define NXFONT_BITMAP_84 {0xff, 0x80, 0x8, 0x0, 0x8, 0x0, 0x8, 0x0, 0x8, 0x0, 0x8, 0x0, 0x8, 0x0, 0x8, 0x0, 0x8, 0x0, 0x8, 0x0, 0x8, 0x0, 0x8, 0x0}
+
+/* U (85) */
+#define NXFONT_METRICS_85 {2, 9, 12, 1, 8, 0}
+#define NXFONT_BITMAP_85 {0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x41, 0x0, 0x3e, 0x0}
+
+/* V (86) */
+#define NXFONT_METRICS_86 {2, 10, 12, 0, 8, 0}
+#define NXFONT_BITMAP_86 {0x80, 0x40, 0x80, 0x40, 0x40, 0x80, 0x40, 0x80, 0x40, 0x80, 0x21, 0x0, 0x21, 0x0, 0x12, 0x0, 0x12, 0x0, 0x12, 0x0, 0xc, 0x0, 0xc, 0x0}
+
+/* W (87) */
+#define NXFONT_METRICS_87 {2, 13, 12, 1, 8, 0}
+#define NXFONT_BITMAP_87 {0x82, 0x8, 0x82, 0x8, 0x82, 0x8, 0x45, 0x10, 0x45, 0x10, 0x45, 0x10, 0x28, 0xa0, 0x28, 0xa0, 0x28, 0xa0, 0x10, 0x40, 0x10, 0x40, 0x10, 0x40}
+
+/* X (88) */
+#define NXFONT_METRICS_88 {1, 8, 12, 1, 8, 0}
+#define NXFONT_BITMAP_88 {0x81, 0x42, 0x42, 0x24, 0x24, 0x18, 0x18, 0x24, 0x24, 0x42, 0x42, 0x81}
+
+/* Y (89) */
+#define NXFONT_METRICS_89 {2, 9, 12, 1, 8, 0}
+#define NXFONT_BITMAP_89 {0x80, 0x80, 0x41, 0x0, 0x41, 0x0, 0x22, 0x0, 0x22, 0x0, 0x14, 0x0, 0x1c, 0x0, 0x8, 0x0, 0x8, 0x0, 0x8, 0x0, 0x8, 0x0, 0x8, 0x0}
+
+/* Z (90) */
+#define NXFONT_METRICS_90 {2, 9, 12, 0, 8, 0}
+#define NXFONT_BITMAP_90 {0x7f, 0x80, 0x1, 0x0, 0x3, 0x0, 0x2, 0x0, 0x4, 0x0, 0xc, 0x0, 0x8, 0x0, 0x10, 0x0, 0x30, 0x0, 0x20, 0x0, 0x40, 0x0, 0xff, 0x80}
+
+/* bracketleft (91) */
+#define NXFONT_METRICS_91 {1, 3, 15, 1, 8, 0}
+#define NXFONT_BITMAP_91 {0xe0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xe0}
+
+/* backslash (92) */
+#define NXFONT_METRICS_92 {1, 4, 12, 0, 8, 0}
+#define NXFONT_BITMAP_92 {0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10}
+
+/* bracketright (93) */
+#define NXFONT_METRICS_93 {1, 3, 15, 0, 8, 0}
+#define NXFONT_BITMAP_93 {0xe0, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xe0}
+
+/* asciicircum (94) */
+#define NXFONT_METRICS_94 {1, 7, 7, 0, 8, 0}
+#define NXFONT_BITMAP_94 {0x10, 0x28, 0x28, 0x44, 0x44, 0x82, 0x82}
+
+/* underscore (95) */
+#define NXFONT_METRICS_95 {2, 9, 1, 0, 22, 0}
+#define NXFONT_BITMAP_95 {0xff, 0x80}
+
+/* grave (96) */
+#define NXFONT_METRICS_96 {1, 3, 3, 0, 7, 0}
+#define NXFONT_BITMAP_96 {0x80, 0xc0, 0x20}
+
+/* a (97) */
+#define NXFONT_METRICS_97 {1, 8, 9, 1, 11, 0}
+#define NXFONT_BITMAP_97 {0x7c, 0x82, 0x2, 0x6, 0x7a, 0x82, 0x82, 0x86, 0x7b}
+
+/* b (98) */
+#define NXFONT_METRICS_98 {1, 7, 12, 1, 8, 0}
+#define NXFONT_BITMAP_98 {0x80, 0x80, 0x80, 0xb8, 0xc4, 0x82, 0x82, 0x82, 0x82, 0x82, 0xc4, 0xb8}
+
+/* c (99) */
+#define NXFONT_METRICS_99 {1, 7, 9, 1, 11, 0}
+#define NXFONT_BITMAP_99 {0x38, 0x44, 0x82, 0x80, 0x80, 0x80, 0x82, 0x44, 0x38}
+
+/* d (100) */
+#define NXFONT_METRICS_100 {1, 7, 12, 1, 8, 0}
+#define NXFONT_BITMAP_100 {0x2, 0x2, 0x2, 0x3a, 0x46, 0x82, 0x82, 0x82, 0x82, 0x82, 0x46, 0x3a}
+
+/* e (101) */
+#define NXFONT_METRICS_101 {1, 7, 9, 1, 11, 0}
+#define NXFONT_BITMAP_101 {0x38, 0x44, 0x82, 0x82, 0xfe, 0x80, 0x82, 0x44, 0x38}
+
+/* f (102) */
+#define NXFONT_METRICS_102 {1, 4, 12, 1, 8, 0}
+#define NXFONT_BITMAP_102 {0x30, 0x40, 0x40, 0xf0, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40}
+
+/* g (103) */
+#define NXFONT_METRICS_103 {1, 7, 13, 1, 11, 0}
+#define NXFONT_BITMAP_103 {0x3a, 0x46, 0x82, 0x82, 0x82, 0x82, 0x82, 0x46, 0x3a, 0x2, 0x82, 0x84, 0x78}
+
+/* h (104) */
+#define NXFONT_METRICS_104 {1, 7, 12, 1, 8, 0}
+#define NXFONT_BITMAP_104 {0x80, 0x80, 0x80, 0xbc, 0xc2, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82}
+
+/* i (105) */
+#define NXFONT_METRICS_105 {1, 1, 12, 1, 8, 0}
+#define NXFONT_BITMAP_105 {0x80, 0x80, 0x0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}
+
+/* j (106) -- NOTE: Xoffset should be -1, not 0. */
+#define NXFONT_METRICS_106 {1, 3, 16, 0, 8, 0}
+#define NXFONT_BITMAP_106 {0x20, 0x20, 0x0, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xc0}
+
+/* k (107) */
+#define NXFONT_METRICS_107 {1, 7, 12, 0, 8, 0}
+#define NXFONT_BITMAP_107 {0x80, 0x80, 0x80, 0x84, 0x88, 0x90, 0xa0, 0xe0, 0x90, 0x88, 0x84, 0x82}
+
+/* l (108) */
+#define NXFONT_METRICS_108 {1, 1, 12, 1, 8, 0}
+#define NXFONT_BITMAP_108 {0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}
+
+/* m (109) */
+#define NXFONT_METRICS_109 {2, 11, 9, 2, 11, 0}
+#define NXFONT_BITMAP_109 {0xb9, 0xc0, 0xc6, 0x20, 0x84, 0x20, 0x84, 0x20, 0x84, 0x20, 0x84, 0x20, 0x84, 0x20, 0x84, 0x20, 0x84, 0x20}
+
+/* n (110) */
+#define NXFONT_METRICS_110 {1, 7, 9, 1, 11, 0}
+#define NXFONT_BITMAP_110 {0xbc, 0xc2, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82}
+
+/* o (111) */
+#define NXFONT_METRICS_111 {1, 7, 9, 1, 11, 0}
+#define NXFONT_BITMAP_111 {0x38, 0x44, 0x82, 0x82, 0x82, 0x82, 0x82, 0x44, 0x38}
+
+/* p (112) */
+#define NXFONT_METRICS_112 {1, 7, 13, 1, 11, 0}
+#define NXFONT_BITMAP_112 {0xb8, 0xc4, 0x82, 0x82, 0x82, 0x82, 0x82, 0xc4, 0xb8, 0x80, 0x80, 0x80, 0x80}
+
+/* q (113) */
+#define NXFONT_METRICS_113 {1, 7, 13, 1, 11, 0}
+#define NXFONT_BITMAP_113 {0x3a, 0x46, 0x82, 0x82, 0x82, 0x82, 0x82, 0x46, 0x3a, 0x2, 0x2, 0x2, 0x2}
+
+/* r (114) */
+#define NXFONT_METRICS_114 {1, 4, 9, 1, 11, 0}
+#define NXFONT_BITMAP_114 {0xb0, 0xc0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}
+
+/* s (115) */
+#define NXFONT_METRICS_115 {1, 6, 9, 1, 11, 0}
+#define NXFONT_BITMAP_115 {0x78, 0x84, 0x84, 0xc0, 0x30, 0xc, 0x84, 0x84, 0x78}
+
+/* t (116) */
+#define NXFONT_METRICS_116 {1, 4, 11, 1, 9, 0}
+#define NXFONT_BITMAP_116 {0x40, 0x40, 0xf0, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x30}
+
+/* u (117) */
+#define NXFONT_METRICS_117 {1, 7, 9, 1, 11, 0}
+#define NXFONT_BITMAP_117 {0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x86, 0x7a}
+
+/* v (118) */
+#define NXFONT_METRICS_118 {1, 7, 9, 0, 11, 0}
+#define NXFONT_BITMAP_118 {0x82, 0x82, 0x44, 0x44, 0x44, 0x28, 0x28, 0x38, 0x10}
+
+/* w (119) */
+#define NXFONT_METRICS_119 {2, 11, 9, 0, 11, 0}
+#define NXFONT_BITMAP_119 {0x84, 0x20, 0x84, 0x20, 0x44, 0x40, 0x4e, 0x40, 0x4a, 0x40, 0x2a, 0x80, 0x2a, 0x80, 0x11, 0x0, 0x11, 0x0}
+
+/* x (120) */
+#define NXFONT_METRICS_120 {1, 7, 9, 0, 11, 0}
+#define NXFONT_BITMAP_120 {0x82, 0x44, 0x44, 0x28, 0x10, 0x28, 0x44, 0x44, 0x82}
+
+/* y (121) */
+#define NXFONT_METRICS_121 {1, 7, 12, 0, 11, 0}
+#define NXFONT_BITMAP_121 {0x82, 0x82, 0x44, 0x44, 0x28, 0x28, 0x38, 0x10, 0x10, 0x20, 0x20, 0xc0}
+
+/* z (122) */
+#define NXFONT_METRICS_122 {1, 6, 9, 1, 11, 0}
+#define NXFONT_BITMAP_122 {0xfc, 0x4, 0x8, 0x10, 0x20, 0x20, 0x40, 0x80, 0xfc}
+
+/* braceleft (123) */
+#define NXFONT_METRICS_123 {1, 3, 16, 1, 8, 0}
+#define NXFONT_BITMAP_123 {0x20, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x80, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x20}
+
+/* bar (124) */
+#define NXFONT_METRICS_124 {1, 1, 16, 1, 8, 0}
+#define NXFONT_BITMAP_124 {0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}
+
+/* braceright (125) */
+#define NXFONT_METRICS_125 {1, 3, 16, 1, 8, 0}
+#define NXFONT_BITMAP_125 {0x80, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x20, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x80}
+
+/* asciitilde (126) */
+#define NXFONT_METRICS_126 {1, 8, 2, 1, 14, 0}
+#define NXFONT_BITMAP_126 {0x71, 0x8e}
+
+/* exclamdown (161) */
+#define NXFONT_METRICS_161 {1, 1, 12, 2, 11, 0}
+#define NXFONT_BITMAP_161 {0x80, 0x80, 0x0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}
+
+/* cent (162) */
+#define NXFONT_METRICS_162 {1, 7, 13, 1, 9, 0}
+#define NXFONT_BITMAP_162 {0x4, 0x4, 0x38, 0x4c, 0x8a, 0x90, 0x90, 0x90, 0xa2, 0x64, 0x38, 0x40, 0x40}
+
+/* sterling (163) */
+#define NXFONT_METRICS_163 {1, 8, 12, 0, 8, 0}
+#define NXFONT_BITMAP_163 {0xe, 0x11, 0x21, 0x20, 0x20, 0x10, 0x7e, 0x8, 0x10, 0x20, 0x79, 0x86}
+
+/* currency (164) */
+#define NXFONT_METRICS_164 {1, 8, 7, 0, 10, 0}
+#define NXFONT_BITMAP_164 {0xbd, 0x66, 0x42, 0x42, 0x42, 0x66, 0xbd}
+
+/* yen (165) */
+#define NXFONT_METRICS_165 {2, 9, 12, 0, 8, 0}
+#define NXFONT_BITMAP_165 {0x80, 0x80, 0x41, 0x0, 0x41, 0x0, 0x22, 0x0, 0x22, 0x0, 0x14, 0x0, 0x7f, 0x0, 0x8, 0x0, 0x7f, 0x0, 0x8, 0x0, 0x8, 0x0, 0x8, 0x0}
+
+/* brokenbar (166) */
+#define NXFONT_METRICS_166 {1, 1, 16, 1, 8, 0}
+#define NXFONT_BITMAP_166 {0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x0, 0x0, 0x0, 0x0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}
+
+/* section (167) */
+#define NXFONT_METRICS_167 {1, 7, 15, 1, 8, 0}
+#define NXFONT_BITMAP_167 {0x38, 0x44, 0x46, 0x60, 0x98, 0x8c, 0x86, 0xc2, 0x62, 0x32, 0x1c, 0x4, 0xc4, 0x44, 0x38}
+
+/* dieresis (168) */
+#define NXFONT_METRICS_168 {1, 3, 2, 1, 8, 0}
+#define NXFONT_BITMAP_168 {0xa0, 0xa0}
+
+/* copyright (169) */
+#define NXFONT_METRICS_169 {2, 12, 12, 0, 8, 0}
+#define NXFONT_BITMAP_169 {0xf, 0x0, 0x30, 0xc0, 0x47, 0x20, 0x48, 0xa0, 0x90, 0x10, 0x90, 0x10, 0x90, 0x10, 0x90, 0x10, 0x48, 0xa0, 0x47, 0x20, 0x30, 0xc0, 0xf, 0x0}
+
+/* ordfeminine (170) */
+#define NXFONT_METRICS_170 {1, 5, 7, 1, 8, 0}
+#define NXFONT_BITMAP_170 {0x60, 0x90, 0x70, 0x90, 0x78, 0x0, 0xf8}
+
+/* guillemotleft (171) */
+#define NXFONT_METRICS_171 {1, 6, 6, 1, 12, 0}
+#define NXFONT_BITMAP_171 {0x24, 0x48, 0x90, 0x90, 0x48, 0x24}
+
+/* logicalnot (172) */
+#define NXFONT_METRICS_172 {1, 8, 5, 0, 14, 0}
+#define NXFONT_BITMAP_172 {0xff, 0x1, 0x1, 0x1, 0x1}
+
+/* hyphen (173) */
+#define NXFONT_METRICS_173 {1, 4, 1, 0, 15, 0}
+#define NXFONT_BITMAP_173 {0xf0}
+
+/* registered (174) */
+#define NXFONT_METRICS_174 {2, 12, 12, 0, 8, 0}
+#define NXFONT_BITMAP_174 {0xf, 0x0, 0x30, 0xc0, 0x40, 0x20, 0x4f, 0x20, 0x88, 0x90, 0x88, 0x90, 0x8f, 0x10, 0x8a, 0x10, 0x49, 0x20, 0x48, 0xa0, 0x30, 0xc0, 0xf, 0x0}
+
+/* macron (175) */
+#define NXFONT_METRICS_175 {1, 5, 1, 0, 9, 0}
+#define NXFONT_BITMAP_175 {0xf8}
+
+/* degree (176) */
+#define NXFONT_METRICS_176 {1, 5, 5, 1, 8, 0}
+#define NXFONT_BITMAP_176 {0x70, 0x88, 0x88, 0x88, 0x70}
+
+/* plusminus (177) */
+#define NXFONT_METRICS_177 {2, 9, 11, 0, 9, 0}
+#define NXFONT_BITMAP_177 {0x8, 0x0, 0x8, 0x0, 0x8, 0x0, 0x8, 0x0, 0xff, 0x80, 0x8, 0x0, 0x8, 0x0, 0x8, 0x0, 0x8, 0x0, 0x0, 0x0, 0xff, 0x80}
+
+/* twosuperior (178) */
+#define NXFONT_METRICS_178 {1, 5, 7, 0, 8, 0}
+#define NXFONT_BITMAP_178 {0x70, 0x88, 0x88, 0x10, 0x60, 0x80, 0xf8}
+
+/* threesuperior (179) */
+#define NXFONT_METRICS_179 {1, 5, 7, 0, 8, 0}
+#define NXFONT_BITMAP_179 {0x70, 0x88, 0x8, 0x30, 0x8, 0x88, 0x70}
+
+/* acute (180) */
+#define NXFONT_METRICS_180 {1, 3, 3, 1, 7, 0}
+#define NXFONT_BITMAP_180 {0x20, 0x60, 0x80}
+
+/* mu (181) */
+#define NXFONT_METRICS_181 {1, 7, 13, 1, 11, 0}
+#define NXFONT_BITMAP_181 {0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x86, 0xfa, 0x80, 0x80, 0x80, 0x80}
+
+/* paragraph (182) */
+#define NXFONT_METRICS_182 {1, 7, 15, 1, 8, 0}
+#define NXFONT_BITMAP_182 {0x3e, 0x74, 0xf4, 0xf4, 0xf4, 0xf4, 0x74, 0x34, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14}
+
+/* periodcentered (183) */
+#define NXFONT_METRICS_183 {1, 1, 2, 2, 14, 0}
+#define NXFONT_BITMAP_183 {0x80, 0x80}
+
+/* cedilla (184) */
+#define NXFONT_METRICS_184 {1, 4, 4, 0, 20, 0}
+#define NXFONT_BITMAP_184 {0x20, 0x20, 0x90, 0x60}
+
+/* onesuperior (185) */
+#define NXFONT_METRICS_185 {1, 3, 7, 0, 8, 0}
+#define NXFONT_BITMAP_185 {0x20, 0xe0, 0x20, 0x20, 0x20, 0x20, 0x20}
+
+/* ordmasculine (186) */
+#define NXFONT_METRICS_186 {1, 4, 7, 1, 8, 0}
+#define NXFONT_BITMAP_186 {0x60, 0x90, 0x90, 0x90, 0x60, 0x0, 0xf0}
+
+/* guillemotright (187) */
+#define NXFONT_METRICS_187 {1, 6, 6, 1, 12, 0}
+#define NXFONT_BITMAP_187 {0x90, 0x48, 0x24, 0x24, 0x48, 0x90}
+
+/* onequarter (188) */
+#define NXFONT_METRICS_188 {2, 12, 12, 0, 8, 0}
+#define NXFONT_BITMAP_188 {0x20, 0x40, 0xe0, 0x80, 0x20, 0x80, 0x21, 0x0, 0x22, 0x0, 0x22, 0x20, 0x24, 0x60, 0x4, 0xa0, 0x9, 0x20, 0x11, 0xf0, 0x10, 0x20, 0x20, 0x20}
+
+/* onehalf (189) */
+#define NXFONT_METRICS_189 {2, 12, 13, 0, 7, 0}
+#define NXFONT_BITMAP_189 {0x0, 0x40, 0x20, 0x80, 0xe0, 0x80, 0x21, 0x0, 0x22, 0x0, 0x22, 0x0, 0x24, 0xe0, 0x25, 0x10, 0x9, 0x10, 0x8, 0x20, 0x10, 0xc0, 0x21, 0x0, 0x21, 0xf0}
+
+/* threequarters (190) */
+#define NXFONT_METRICS_190 {2, 13, 12, 0, 8, 0}
+#define NXFONT_BITMAP_190 {0x70, 0x40, 0x88, 0x40, 0x8, 0x80, 0x30, 0x80, 0x9, 0x0, 0x89, 0x10, 0x72, 0x30, 0x2, 0x50, 0x4, 0x90, 0x4, 0xf8, 0x8, 0x10, 0x8, 0x10}
+
+/* questiondown (191) */
+#define NXFONT_METRICS_191 {1, 7, 12, 1, 11, 0}
+#define NXFONT_BITMAP_191 {0x10, 0x10, 0x0, 0x10, 0x10, 0x20, 0x40, 0x80, 0x82, 0x82, 0x44, 0x38}
+
+/* Agrave (192) */
+#define NXFONT_METRICS_192 {2, 10, 16, 0, 4, 0}
+#define NXFONT_BITMAP_192 {0x10, 0x0, 0x18, 0x0, 0x4, 0x0, 0x0, 0x0, 0xc, 0x0, 0xc, 0x0, 0x12, 0x0, 0x12, 0x0, 0x12, 0x0, 0x21, 0x0, 0x21, 0x0, 0x7f, 0x80, 0x40, 0x80, 0x40, 0x80, 0x80, 0x40, 0x80, 0x40}
+
+/* Aacute (193) */
+#define NXFONT_METRICS_193 {2, 10, 16, 0, 4, 0}
+#define NXFONT_BITMAP_193 {0x2, 0x0, 0x6, 0x0, 0x8, 0x0, 0x0, 0x0, 0xc, 0x0, 0xc, 0x0, 0x12, 0x0, 0x12, 0x0, 0x12, 0x0, 0x21, 0x0, 0x21, 0x0, 0x7f, 0x80, 0x40, 0x80, 0x40, 0x80, 0x80, 0x40, 0x80, 0x40}
+
+/* Acircumflex (194) */
+#define NXFONT_METRICS_194 {2, 10, 16, 0, 4, 0}
+#define NXFONT_BITMAP_194 {0x4, 0x0, 0xe, 0x0, 0x11, 0x0, 0x0, 0x0, 0xc, 0x0, 0xc, 0x0, 0x12, 0x0, 0x12, 0x0, 0x12, 0x0, 0x21, 0x0, 0x21, 0x0, 0x7f, 0x80, 0x40, 0x80, 0x40, 0x80, 0x80, 0x40, 0x80, 0x40}
+
+/* Atilde (195) */
+#define NXFONT_METRICS_195 {2, 10, 15, 0, 5, 0}
+#define NXFONT_BITMAP_195 {0x1a, 0x0, 0x2c, 0x0, 0x0, 0x0, 0xc, 0x0, 0xc, 0x0, 0x12, 0x0, 0x12, 0x0, 0x12, 0x0, 0x21, 0x0, 0x21, 0x0, 0x7f, 0x80, 0x40, 0x80, 0x40, 0x80, 0x80, 0x40, 0x80, 0x40}
+
+/* Adieresis (196) */
+#define NXFONT_METRICS_196 {2, 10, 15, 0, 5, 0}
+#define NXFONT_BITMAP_196 {0x12, 0x0, 0x12, 0x0, 0x0, 0x0, 0xc, 0x0, 0xc, 0x0, 0x12, 0x0, 0x12, 0x0, 0x12, 0x0, 0x21, 0x0, 0x21, 0x0, 0x7f, 0x80, 0x40, 0x80, 0x40, 0x80, 0x80, 0x40, 0x80, 0x40}
+
+/* Aring (197) */
+#define NXFONT_METRICS_197 {2, 10, 15, 0, 5, 0}
+#define NXFONT_BITMAP_197 {0xc, 0x0, 0x12, 0x0, 0x12, 0x0, 0xc, 0x0, 0xc, 0x0, 0x12, 0x0, 0x12, 0x0, 0x12, 0x0, 0x21, 0x0, 0x21, 0x0, 0x7f, 0x80, 0x40, 0x80, 0x40, 0x80, 0x80, 0x40, 0x80, 0x40}
+
+/* AE (198) */
+#define NXFONT_METRICS_198 {2, 14, 12, 0, 8, 0}
+#define NXFONT_BITMAP_198 {0x7, 0xfc, 0x9, 0x0, 0x9, 0x0, 0x11, 0x0, 0x11, 0x0, 0x21, 0xfc, 0x21, 0x0, 0x7f, 0x0, 0x41, 0x0, 0x41, 0x0, 0x81, 0x0, 0x81, 0xfc}
+
+/* Ccedilla (199) */
+#define NXFONT_METRICS_199 {2, 10, 16, 1, 8, 0}
+#define NXFONT_BITMAP_199 {0xf, 0x0, 0x30, 0x80, 0x40, 0x40, 0x40, 0x0, 0x80, 0x0, 0x80, 0x0, 0x80, 0x0, 0x80, 0x0, 0x40, 0x0, 0x40, 0x40, 0x30, 0x80, 0xf, 0x0, 0x4, 0x0, 0x4, 0x0, 0x12, 0x0, 0xc, 0x0}
+
+/* Egrave (200) */
+#define NXFONT_METRICS_200 {1, 8, 16, 1, 4, 0}
+#define NXFONT_BITMAP_200 {0x20, 0x30, 0x8, 0x0, 0xff, 0x80, 0x80, 0x80, 0x80, 0xff, 0x80, 0x80, 0x80, 0x80, 0x80, 0xff}
+
+/* Eacute (201) */
+#define NXFONT_METRICS_201 {1, 8, 16, 1, 4, 0}
+#define NXFONT_BITMAP_201 {0x4, 0xc, 0x10, 0x0, 0xff, 0x80, 0x80, 0x80, 0x80, 0xff, 0x80, 0x80, 0x80, 0x80, 0x80, 0xff}
+
+/* Ecircumflex (202) */
+#define NXFONT_METRICS_202 {1, 8, 16, 1, 4, 0}
+#define NXFONT_BITMAP_202 {0x10, 0x38, 0x44, 0x0, 0xff, 0x80, 0x80, 0x80, 0x80, 0xff, 0x80, 0x80, 0x80, 0x80, 0x80, 0xff}
+
+/* Edieresis (203) */
+#define NXFONT_METRICS_203 {1, 8, 15, 1, 5, 0}
+#define NXFONT_BITMAP_203 {0x24, 0x24, 0x0, 0xff, 0x80, 0x80, 0x80, 0x80, 0xff, 0x80, 0x80, 0x80, 0x80, 0x80, 0xff}
+
+/* Igrave (204) */
+#define NXFONT_METRICS_204 {1, 3, 16, 0, 4, 0}
+#define NXFONT_BITMAP_204 {0x80, 0xc0, 0x20, 0x0, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40}
+
+/* Iacute (205) */
+#define NXFONT_METRICS_205 {1, 3, 16, 0, 4, 0}
+#define NXFONT_BITMAP_205 {0x20, 0x60, 0x80, 0x0, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40}
+
+/* Icircumflex (206) -- NOTE: Xoffset should be -1, not 0. */
+#define NXFONT_METRICS_206 {1, 5, 16, 0, 4, 0}
+#define NXFONT_BITMAP_206 {0x20, 0x70, 0x88, 0x0, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20}
+
+/* Idieresis (207) */
+#define NXFONT_METRICS_207 {1, 3, 15, 0, 5, 0}
+#define NXFONT_BITMAP_207 {0xa0, 0xa0, 0x0, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40}
+
+/* Eth (208) */
+#define NXFONT_METRICS_208 {2, 12, 12, 0, 8, 0}
+#define NXFONT_BITMAP_208 {0x3f, 0x0, 0x20, 0xc0, 0x20, 0x20, 0x20, 0x20, 0x20, 0x10, 0xf8, 0x10, 0x20, 0x10, 0x20, 0x10, 0x20, 0x20, 0x20, 0x20, 0x20, 0xc0, 0x3f, 0x0}
+
+/* Ntilde (209) */
+#define NXFONT_METRICS_209 {2, 9, 15, 1, 5, 0}
+#define NXFONT_BITMAP_209 {0x1a, 0x0, 0x2c, 0x0, 0x0, 0x0, 0x80, 0x80, 0xc0, 0x80, 0xa0, 0x80, 0xa0, 0x80, 0x90, 0x80, 0x88, 0x80, 0x88, 0x80, 0x84, 0x80, 0x82, 0x80, 0x82, 0x80, 0x81, 0x80, 0x80, 0x80}
+
+/* Ograve (210) */
+#define NXFONT_METRICS_210 {2, 11, 16, 1, 4, 0}
+#define NXFONT_BITMAP_210 {0x8, 0x0, 0xc, 0x0, 0x2, 0x0, 0x0, 0x0, 0xe, 0x0, 0x31, 0x80, 0x40, 0x40, 0x40, 0x40, 0x80, 0x20, 0x80, 0x20, 0x80, 0x20, 0x80, 0x20, 0x40, 0x40, 0x40, 0x40, 0x31, 0x80, 0xe, 0x0}
+
+/* Oacute (211) */
+#define NXFONT_METRICS_211 {2, 11, 16, 1, 4, 0}
+#define NXFONT_BITMAP_211 {0x1, 0x0, 0x3, 0x0, 0x4, 0x0, 0x0, 0x0, 0xe, 0x0, 0x31, 0x80, 0x40, 0x40, 0x40, 0x40, 0x80, 0x20, 0x80, 0x20, 0x80, 0x20, 0x80, 0x20, 0x40, 0x40, 0x40, 0x40, 0x31, 0x80, 0xe, 0x0}
+
+/* Ocircumflex (212) */
+#define NXFONT_METRICS_212 {2, 11, 16, 1, 4, 0}
+#define NXFONT_BITMAP_212 {0x4, 0x0, 0xe, 0x0, 0x11, 0x0, 0x0, 0x0, 0xe, 0x0, 0x31, 0x80, 0x40, 0x40, 0x40, 0x40, 0x80, 0x20, 0x80, 0x20, 0x80, 0x20, 0x80, 0x20, 0x40, 0x40, 0x40, 0x40, 0x31, 0x80, 0xe, 0x0}
+
+/* Otilde (213) */
+#define NXFONT_METRICS_213 {2, 11, 15, 1, 5, 0}
+#define NXFONT_BITMAP_213 {0xd, 0x0, 0x16, 0x0, 0x0, 0x0, 0xe, 0x0, 0x31, 0x80, 0x40, 0x40, 0x40, 0x40, 0x80, 0x20, 0x80, 0x20, 0x80, 0x20, 0x80, 0x20, 0x40, 0x40, 0x40, 0x40, 0x31, 0x80, 0xe, 0x0}
+
+/* Odieresis (214) */
+#define NXFONT_METRICS_214 {2, 11, 15, 1, 5, 0}
+#define NXFONT_BITMAP_214 {0x11, 0x0, 0x11, 0x0, 0x0, 0x0, 0xe, 0x0, 0x31, 0x80, 0x40, 0x40, 0x40, 0x40, 0x80, 0x20, 0x80, 0x20, 0x80, 0x20, 0x80, 0x20, 0x40, 0x40, 0x40, 0x40, 0x31, 0x80, 0xe, 0x0}
+
+/* multiply (215) */
+#define NXFONT_METRICS_215 {1, 8, 8, 1, 12, 0}
+#define NXFONT_BITMAP_215 {0x81, 0x42, 0x24, 0x18, 0x18, 0x24, 0x42, 0x81}
+
+/* Oslash (216) */
+#define NXFONT_METRICS_216 {2, 11, 14, 1, 7, 0}
+#define NXFONT_BITMAP_216 {0x0, 0x40, 0xe, 0x80, 0x31, 0x80, 0x41, 0x40, 0x42, 0x40, 0x82, 0x20, 0x84, 0x20, 0x84, 0x20, 0x88, 0x20, 0x48, 0x40, 0x50, 0x40, 0x31, 0x80, 0x2e, 0x0, 0x40, 0x0}
+
+/* Ugrave (217) */
+#define NXFONT_METRICS_217 {2, 9, 16, 1, 4, 0}
+#define NXFONT_BITMAP_217 {0x20, 0x0, 0x30, 0x0, 0x8, 0x0, 0x0, 0x0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x41, 0x0, 0x3e, 0x0}
+
+/* Uacute (218) */
+#define NXFONT_METRICS_218 {2, 9, 16, 1, 4, 0}
+#define NXFONT_BITMAP_218 {0x2, 0x0, 0x6, 0x0, 0x8, 0x0, 0x0, 0x0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x41, 0x0, 0x3e, 0x0}
+
+/* Ucircumflex (219) */
+#define NXFONT_METRICS_219 {2, 9, 16, 1, 4, 0}
+#define NXFONT_BITMAP_219 {0x8, 0x0, 0x1c, 0x0, 0x22, 0x0, 0x0, 0x0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x41, 0x0, 0x3e, 0x0}
+
+/* Udieresis (220) */
+#define NXFONT_METRICS_220 {2, 9, 15, 1, 5, 0}
+#define NXFONT_BITMAP_220 {0x22, 0x0, 0x22, 0x0, 0x0, 0x0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x41, 0x0, 0x3e, 0x0}
+
+/* Yacute (221) */
+#define NXFONT_METRICS_221 {2, 9, 16, 1, 4, 0}
+#define NXFONT_BITMAP_221 {0x2, 0x0, 0x6, 0x0, 0x8, 0x0, 0x0, 0x0, 0x80, 0x80, 0x41, 0x0, 0x41, 0x0, 0x22, 0x0, 0x22, 0x0, 0x14, 0x0, 0x1c, 0x0, 0x8, 0x0, 0x8, 0x0, 0x8, 0x0, 0x8, 0x0, 0x8, 0x0}
+
+/* Thorn (222) */
+#define NXFONT_METRICS_222 {1, 8, 12, 2, 8, 0}
+#define NXFONT_BITMAP_222 {0x80, 0x80, 0xfc, 0x82, 0x81, 0x81, 0x82, 0xfc, 0x80, 0x80, 0x80, 0x80}
+
+/* germandbls (223) */
+#define NXFONT_METRICS_223 {1, 7, 12, 2, 8, 0}
+#define NXFONT_BITMAP_223 {0x78, 0x84, 0x82, 0x82, 0x84, 0xbc, 0x86, 0x82, 0x82, 0x82, 0x84, 0xb8}
+
+/* agrave (224) */
+#define NXFONT_METRICS_224 {1, 8, 13, 1, 7, 0}
+#define NXFONT_BITMAP_224 {0x20, 0x30, 0x8, 0x0, 0x7c, 0x82, 0x2, 0x6, 0x7a, 0x82, 0x82, 0x86, 0x7b}
+
+/* aacute (225) */
+#define NXFONT_METRICS_225 {1, 8, 13, 1, 7, 0}
+#define NXFONT_BITMAP_225 {0x4, 0xc, 0x10, 0x0, 0x7c, 0x82, 0x2, 0x6, 0x7a, 0x82, 0x82, 0x86, 0x7b}
+
+/* acircumflex (226) */
+#define NXFONT_METRICS_226 {1, 8, 13, 1, 7, 0}
+#define NXFONT_BITMAP_226 {0x10, 0x38, 0x44, 0x0, 0x7c, 0x82, 0x2, 0x6, 0x7a, 0x82, 0x82, 0x86, 0x7b}
+
+/* atilde (227) */
+#define NXFONT_METRICS_227 {1, 8, 12, 1, 8, 0}
+#define NXFONT_BITMAP_227 {0x34, 0x58, 0x0, 0x7c, 0x82, 0x2, 0x6, 0x7a, 0x82, 0x82, 0x86, 0x7b}
+
+/* adieresis (228) */
+#define NXFONT_METRICS_228 {1, 8, 12, 1, 8, 0}
+#define NXFONT_BITMAP_228 {0x28, 0x28, 0x0, 0x7c, 0x82, 0x2, 0x6, 0x7a, 0x82, 0x82, 0x86, 0x7b}
+
+/* aring (229) */
+#define NXFONT_METRICS_229 {1, 8, 13, 1, 7, 0}
+#define NXFONT_BITMAP_229 {0x10, 0x28, 0x10, 0x0, 0x7c, 0x82, 0x2, 0x6, 0x7a, 0x82, 0x82, 0x86, 0x7b}
+
+/* ae (230) */
+#define NXFONT_METRICS_230 {2, 13, 9, 1, 11, 0}
+#define NXFONT_BITMAP_230 {0x7c, 0xe0, 0x83, 0x10, 0x2, 0x8, 0x6, 0x8, 0x7b, 0xf8, 0x82, 0x0, 0x82, 0x8, 0x87, 0x10, 0x78, 0xe0}
+
+/* ccedilla (231) */
+#define NXFONT_METRICS_231 {1, 7, 13, 1, 11, 0}
+#define NXFONT_BITMAP_231 {0x38, 0x44, 0x82, 0x80, 0x80, 0x80, 0x82, 0x44, 0x38, 0x10, 0x10, 0x48, 0x30}
+
+/* egrave (232) */
+#define NXFONT_METRICS_232 {1, 7, 13, 1, 7, 0}
+#define NXFONT_BITMAP_232 {0x40, 0x60, 0x10, 0x0, 0x38, 0x44, 0x82, 0x82, 0xfe, 0x80, 0x82, 0x44, 0x38}
+
+/* eacute (233) */
+#define NXFONT_METRICS_233 {1, 7, 13, 1, 7, 0}
+#define NXFONT_BITMAP_233 {0x8, 0x18, 0x20, 0x0, 0x38, 0x44, 0x82, 0x82, 0xfe, 0x80, 0x82, 0x44, 0x38}
+
+/* ecircumflex (234) */
+#define NXFONT_METRICS_234 {1, 7, 13, 1, 7, 0}
+#define NXFONT_BITMAP_234 {0x10, 0x38, 0x44, 0x0, 0x38, 0x44, 0x82, 0x82, 0xfe, 0x80, 0x82, 0x44, 0x38}
+
+/* edieresis (235) */
+#define NXFONT_METRICS_235 {1, 7, 12, 1, 8, 0}
+#define NXFONT_BITMAP_235 {0x28, 0x28, 0x0, 0x38, 0x44, 0x82, 0x82, 0xfe, 0x80, 0x82, 0x44, 0x38}
+
+/* igrave (236) */
+#define NXFONT_METRICS_236 {1, 3, 13, 1, 7, 0}
+#define NXFONT_BITMAP_236 {0x80, 0xc0, 0x20, 0x0, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40}
+
+/* iacute (237) */
+#define NXFONT_METRICS_237 {1, 3, 13, 1, 7, 0}
+#define NXFONT_BITMAP_237 {0x20, 0x60, 0x80, 0x0, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40}
+
+/* icircumflex (238) */
+#define NXFONT_METRICS_238 {1, 5, 13, 0, 7, 0}
+#define NXFONT_BITMAP_238 {0x20, 0x70, 0x88, 0x0, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20}
+
+/* idieresis (239) */
+#define NXFONT_METRICS_239 {1, 3, 12, 1, 8, 0}
+#define NXFONT_BITMAP_239 {0xa0, 0xa0, 0x0, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40}
+
+/* eth (240) */
+#define NXFONT_METRICS_240 {1, 7, 12, 1, 8, 0}
+#define NXFONT_BITMAP_240 {0x48, 0x30, 0x58, 0x3c, 0x44, 0x82, 0x82, 0x82, 0x82, 0x82, 0x44, 0x38}
+
+/* ntilde (241) */
+#define NXFONT_METRICS_241 {1, 7, 12, 1, 8, 0}
+#define NXFONT_BITMAP_241 {0x34, 0x58, 0x0, 0xbc, 0xc2, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82}
+
+/* ograve (242) */
+#define NXFONT_METRICS_242 {1, 7, 13, 1, 7, 0}
+#define NXFONT_BITMAP_242 {0x20, 0x30, 0x8, 0x0, 0x38, 0x44, 0x82, 0x82, 0x82, 0x82, 0x82, 0x44, 0x38}
+
+/* oacute (243) */
+#define NXFONT_METRICS_243 {1, 7, 13, 1, 7, 0}
+#define NXFONT_BITMAP_243 {0x8, 0x18, 0x20, 0x0, 0x38, 0x44, 0x82, 0x82, 0x82, 0x82, 0x82, 0x44, 0x38}
+
+/* ocircumflex (244) */
+#define NXFONT_METRICS_244 {1, 7, 13, 1, 7, 0}
+#define NXFONT_BITMAP_244 {0x10, 0x38, 0x44, 0x0, 0x38, 0x44, 0x82, 0x82, 0x82, 0x82, 0x82, 0x44, 0x38}
+
+/* otilde (245) */
+#define NXFONT_METRICS_245 {1, 7, 12, 1, 8, 0}
+#define NXFONT_BITMAP_245 {0x34, 0x58, 0x0, 0x38, 0x44, 0x82, 0x82, 0x82, 0x82, 0x82, 0x44, 0x38}
+
+/* odieresis (246) */
+#define NXFONT_METRICS_246 {1, 7, 12, 1, 8, 0}
+#define NXFONT_BITMAP_246 {0x28, 0x28, 0x0, 0x38, 0x44, 0x82, 0x82, 0x82, 0x82, 0x82, 0x44, 0x38}
+
+/* divide (247) */
+#define NXFONT_METRICS_247 {1, 7, 9, 1, 11, 0}
+#define NXFONT_BITMAP_247 {0x10, 0x10, 0x0, 0x0, 0xfe, 0x0, 0x0, 0x10, 0x10}
+
+/* oslash (248) */
+#define NXFONT_METRICS_248 {1, 7, 10, 1, 10, 0}
+#define NXFONT_BITMAP_248 {0x2, 0x3c, 0x44, 0x8a, 0x92, 0x92, 0xa2, 0xa2, 0x44, 0xb8}
+
+/* ugrave (249) */
+#define NXFONT_METRICS_249 {1, 7, 13, 1, 7, 0}
+#define NXFONT_BITMAP_249 {0x20, 0x30, 0x8, 0x0, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x86, 0x7a}
+
+/* uacute (250) */
+#define NXFONT_METRICS_250 {1, 7, 13, 1, 7, 0}
+#define NXFONT_BITMAP_250 {0x4, 0xc, 0x10, 0x0, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x86, 0x7a}
+
+/* ucircumflex (251) */
+#define NXFONT_METRICS_251 {1, 7, 13, 1, 7, 0}
+#define NXFONT_BITMAP_251 {0x10, 0x38, 0x44, 0x0, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x86, 0x7a}
+
+/* udieresis (252) */
+#define NXFONT_METRICS_252 {1, 7, 12, 1, 8, 0}
+#define NXFONT_BITMAP_252 {0x28, 0x28, 0x0, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x86, 0x7a}
+
+/* yacute (253) */
+#define NXFONT_METRICS_253 {1, 7, 16, 0, 7, 0}
+#define NXFONT_BITMAP_253 {0x8, 0x18, 0x20, 0x0, 0x82, 0x82, 0x44, 0x44, 0x28, 0x28, 0x38, 0x10, 0x10, 0x20, 0x20, 0xc0}
+
+/* thorn (254) */
+#define NXFONT_METRICS_254 {1, 7, 16, 1, 8, 0}
+#define NXFONT_BITMAP_254 {0x80, 0x80, 0x80, 0xb8, 0xc4, 0x82, 0x82, 0x82, 0x82, 0x82, 0xc4, 0xb8, 0x80, 0x80, 0x80, 0x80}
+
+/* ydieresis (255) */
+#define NXFONT_METRICS_255 {1, 7, 15, 0, 8, 0}
+#define NXFONT_BITMAP_255 {0x28, 0x28, 0x0, 0x82, 0x82, 0x44, 0x44, 0x28, 0x28, 0x38, 0x10, 0x10, 0x20, 0x20, 0xc0}
+
+/****************************************************************************
+ * Public Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+#define EXTERN extern "C"
+extern "C" {
+#else
+#define EXTERN extern
+#endif
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* __GRAPHICS_NXFONTS_NXFONTS_SANS20X26_H */
diff --git a/nuttx/graphics/nxfonts/nxfonts_sans20x27b.h b/nuttx/graphics/nxfonts/nxfonts_sans20x27b.h
new file mode 100644
index 000000000..b9a8ea65d
--- /dev/null
+++ b/nuttx/graphics/nxfonts/nxfonts_sans20x27b.h
@@ -0,0 +1,849 @@
+/****************************************************************************
+ * graphics/nxfonts/nxfonts_serif20x27b.h
+ *
+ * Copyright (C) 2011-2012 NX Engineering, S.A., All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT}
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING}
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+#ifndef __GRAPHICS_NXFONTS_NXFONTS_SANS20X27B_H
+#define __GRAPHICS_NXFONTS_NXFONTS_SANS20X27B_H
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/* Font ID */
+
+#define NXFONT_ID FONTID_SANS20X27B
+
+/* Ranges of 7-bit and 8-bit fonts */
+
+#define NXFONT_MIN7BIT 33
+#define NXFONT_MAX7BIT 126
+
+#define NXFONT_MIN8BIT 161
+#define NXFONT_MAX8BIT 255
+
+/* Maximum height and width of any glyph in the set */
+
+#define NXFONT_MAXHEIGHT 27
+#define NXFONT_MAXWIDTH 20
+
+/* The width of a space */
+
+#define NXFONT_SPACEWIDTH 5
+
+/* exclam (33) */
+#define NXFONT_METRICS_33 {1, 2, 12, 2, 8, 0}
+#define NXFONT_BITMAP_33 {0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x80, 0x80, 0x80, 0x0, 0xc0, 0xc0}
+
+/* quotedbl (34) */
+#define NXFONT_METRICS_34 {1, 5, 4, 1, 8, 0}
+#define NXFONT_BITMAP_34 {0xd8, 0xd8, 0xd8, 0x48}
+
+/* numbersign (35) */
+#define NXFONT_METRICS_35 {2, 9, 12, 0, 8, 0}
+#define NXFONT_BITMAP_35 {0x1b, 0x0, 0x1b, 0x0, 0x1b, 0x0, 0x7f, 0x80, 0x7f, 0x80, 0x36, 0x0, 0x36, 0x0, 0xff, 0x0, 0xff, 0x0, 0x6c, 0x0, 0x6c, 0x0, 0x6c, 0x0}
+
+/* dollar (36) */
+#define NXFONT_METRICS_36 {1, 7, 14, 1, 7, 0}
+#define NXFONT_BITMAP_36 {0x10, 0x7c, 0xfe, 0xd6, 0xd0, 0xf0, 0x78, 0x3c, 0x1e, 0x16, 0xd6, 0xfe, 0x7c, 0x10}
+
+/* percent (37) */
+#define NXFONT_METRICS_37 {2, 13, 12, 0, 8, 0}
+#define NXFONT_BITMAP_37 {0x30, 0x40, 0x78, 0x80, 0xcc, 0x80, 0xcd, 0x0, 0x79, 0x0, 0x32, 0x0, 0x2, 0x60, 0x4, 0xf0, 0x5, 0x98, 0x9, 0x98, 0x8, 0xf0, 0x10, 0x60}
+
+/* ampersand (38) */
+#define NXFONT_METRICS_38 {2, 10, 12, 1, 8, 0}
+#define NXFONT_BITMAP_38 {0x3c, 0x0, 0x7e, 0x0, 0x66, 0x0, 0x66, 0x0, 0x3c, 0x0, 0x38, 0xc0, 0x7d, 0xc0, 0xcf, 0x80, 0xc7, 0x0, 0xc7, 0x0, 0x7f, 0x80, 0x39, 0xc0}
+
+/* quotesingle (39) */
+#define NXFONT_METRICS_39 {1, 2, 4, 1, 8, 0}
+#define NXFONT_BITMAP_39 {0xc0, 0xc0, 0xc0, 0x40}
+
+/* parenleft (40) */
+#define NXFONT_METRICS_40 {1, 4, 15, 1, 8, 0}
+#define NXFONT_BITMAP_40 {0x30, 0x70, 0x60, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x60, 0x70, 0x30}
+
+/* parenright (41) */
+#define NXFONT_METRICS_41 {1, 4, 15, 0, 8, 0}
+#define NXFONT_BITMAP_41 {0xc0, 0xe0, 0x60, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x60, 0xe0, 0xc0}
+
+/* asterisk (42) */
+#define NXFONT_METRICS_42 {1, 5, 5, 0, 8, 0}
+#define NXFONT_BITMAP_42 {0x20, 0xa8, 0x70, 0x70, 0x88}
+
+/* plus (43) */
+#define NXFONT_METRICS_43 {1, 8, 8, 1, 12, 0}
+#define NXFONT_BITMAP_43 {0x18, 0x18, 0x18, 0xff, 0xff, 0x18, 0x18, 0x18}
+
+/* comma (44) */
+#define NXFONT_METRICS_44 {1, 2, 5, 1, 18, 0}
+#define NXFONT_BITMAP_44 {0xc0, 0xc0, 0x40, 0x40, 0x80}
+
+/* hyphen (45) */
+#define NXFONT_METRICS_45 {1, 4, 2, 0, 15, 0}
+#define NXFONT_BITMAP_45 {0xf0, 0xf0}
+
+/* period (46) */
+#define NXFONT_METRICS_46 {1, 2, 2, 1, 18, 0}
+#define NXFONT_BITMAP_46 {0xc0, 0xc0}
+
+/* slash (47) */
+#define NXFONT_METRICS_47 {1, 4, 12, 0, 8, 0}
+#define NXFONT_BITMAP_47 {0x10, 0x10, 0x30, 0x20, 0x20, 0x60, 0x40, 0x40, 0xc0, 0x80, 0x80, 0x80}
+
+/* zero (48) */
+#define NXFONT_METRICS_48 {1, 8, 12, 0, 8, 0}
+#define NXFONT_BITMAP_48 {0x3c, 0x7e, 0xe7, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xe7, 0x7e, 0x3c}
+
+/* one (49) */
+#define NXFONT_METRICS_49 {1, 5, 12, 1, 8, 0}
+#define NXFONT_BITMAP_49 {0x8, 0x18, 0xf8, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}
+
+/* two (50) */
+#define NXFONT_METRICS_50 {1, 8, 12, 0, 8, 0}
+#define NXFONT_BITMAP_50 {0x3c, 0x7e, 0xe7, 0xc3, 0xc3, 0x7, 0xe, 0x1c, 0x38, 0x70, 0xff, 0xff}
+
+/* three (51) */
+#define NXFONT_METRICS_51 {1, 8, 12, 0, 8, 0}
+#define NXFONT_BITMAP_51 {0x3c, 0x7e, 0xe7, 0xc3, 0x7, 0x1e, 0x1e, 0x7, 0xc3, 0xe7, 0x7e, 0x3c}
+
+/* four (52) */
+#define NXFONT_METRICS_52 {1, 8, 12, 0, 8, 0}
+#define NXFONT_BITMAP_52 {0xe, 0x1e, 0x36, 0x36, 0x66, 0x66, 0xc6, 0xff, 0xff, 0x6, 0x6, 0x6}
+
+/* five (53) */
+#define NXFONT_METRICS_53 {1, 8, 12, 0, 8, 0}
+#define NXFONT_BITMAP_53 {0x3f, 0x3f, 0x30, 0x30, 0x7c, 0x7e, 0x47, 0x3, 0x3, 0xe7, 0x7e, 0x3c}
+
+/* six (54) */
+#define NXFONT_METRICS_54 {1, 8, 12, 0, 8, 0}
+#define NXFONT_BITMAP_54 {0x3c, 0x7e, 0xe7, 0xc0, 0xdc, 0xfe, 0xe7, 0xc3, 0xc3, 0xe7, 0x7e, 0x3c}
+
+/* seven (55) */
+#define NXFONT_METRICS_55 {1, 8, 12, 0, 8, 0}
+#define NXFONT_BITMAP_55 {0xff, 0xff, 0x6, 0x6, 0xc, 0xc, 0x18, 0x18, 0x18, 0x30, 0x30, 0x30}
+
+/* eight (56) */
+#define NXFONT_METRICS_56 {1, 8, 12, 0, 8, 0}
+#define NXFONT_BITMAP_56 {0x3c, 0x7e, 0xe7, 0xc3, 0x66, 0x3c, 0x7e, 0xe7, 0xc3, 0xe7, 0x7e, 0x3c}
+
+/* nine (57) */
+#define NXFONT_METRICS_57 {1, 8, 12, 0, 8, 0}
+#define NXFONT_BITMAP_57 {0x3c, 0x7e, 0xe7, 0xc3, 0xc3, 0xe7, 0x7f, 0x3b, 0x3, 0xe7, 0x7e, 0x3c}
+
+/* colon (58) */
+#define NXFONT_METRICS_58 {1, 2, 8, 2, 12, 0}
+#define NXFONT_BITMAP_58 {0xc0, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xc0, 0xc0}
+
+/* semicolon (59) */
+#define NXFONT_METRICS_59 {1, 2, 11, 2, 12, 0}
+#define NXFONT_BITMAP_59 {0xc0, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xc0, 0xc0, 0x40, 0x40, 0x80}
+
+/* less (60) */
+#define NXFONT_METRICS_60 {1, 8, 8, 1, 12, 0}
+#define NXFONT_BITMAP_60 {0x3, 0xf, 0x3c, 0xe0, 0xe0, 0x3c, 0xf, 0x3}
+
+/* equal (61) */
+#define NXFONT_METRICS_61 {1, 8, 6, 1, 13, 0}
+#define NXFONT_BITMAP_61 {0xff, 0xff, 0x0, 0x0, 0xff, 0xff}
+
+/* greater (62) */
+#define NXFONT_METRICS_62 {1, 8, 8, 1, 12, 0}
+#define NXFONT_BITMAP_62 {0xc0, 0xf0, 0x3c, 0x7, 0x7, 0x3c, 0xf0, 0xc0}
+
+/* question (63) */
+#define NXFONT_METRICS_63 {1, 7, 12, 1, 8, 0}
+#define NXFONT_BITMAP_63 {0x7c, 0xfe, 0xc6, 0xc6, 0x6, 0xe, 0xc, 0x18, 0x18, 0x0, 0x18, 0x18}
+
+/* at (64) */
+#define NXFONT_METRICS_64 {2, 13, 14, 1, 8, 0}
+#define NXFONT_BITMAP_64 {0xf, 0xc0, 0x38, 0x60, 0x60, 0x10, 0x47, 0xd8, 0xcc, 0x48, 0x88, 0xc8, 0x98, 0xc8, 0x98, 0x88, 0x99, 0x98, 0xc9, 0x90, 0x46, 0x60, 0x60, 0x0, 0x38, 0xc0, 0xf, 0x80}
+
+/* A (65) */
+#define NXFONT_METRICS_65 {2, 11, 12, 0, 8, 0}
+#define NXFONT_BITMAP_65 {0xe, 0x0, 0xe, 0x0, 0x1f, 0x0, 0x1b, 0x0, 0x3b, 0x80, 0x31, 0x80, 0x71, 0xc0, 0x60, 0xc0, 0x7f, 0xc0, 0xff, 0xe0, 0xc0, 0x60, 0xc0, 0x60}
+
+/* B (66) */
+#define NXFONT_METRICS_66 {2, 9, 12, 1, 8, 0}
+#define NXFONT_BITMAP_66 {0xfe, 0x0, 0xff, 0x0, 0xc3, 0x80, 0xc1, 0x80, 0xc3, 0x80, 0xff, 0x0, 0xff, 0x0, 0xc3, 0x80, 0xc1, 0x80, 0xc3, 0x80, 0xff, 0x0, 0xfe, 0x0}
+
+/* C (67) */
+#define NXFONT_METRICS_67 {2, 10, 12, 1, 8, 0}
+#define NXFONT_BITMAP_67 {0x1f, 0x0, 0x3f, 0x80, 0x71, 0xc0, 0x60, 0xc0, 0xe0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xe0, 0x0, 0x60, 0xc0, 0x71, 0xc0, 0x3f, 0x80, 0x1f, 0x0}
+
+/* D (68) */
+#define NXFONT_METRICS_68 {2, 10, 12, 1, 8, 0}
+#define NXFONT_BITMAP_68 {0xfc, 0x0, 0xff, 0x0, 0xc3, 0x80, 0xc1, 0x80, 0xc1, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc1, 0xc0, 0xc1, 0x80, 0xc3, 0x80, 0xff, 0x0, 0xfc, 0x0}
+
+/* E (69) */
+#define NXFONT_METRICS_69 {1, 8, 12, 1, 8, 0}
+#define NXFONT_BITMAP_69 {0xff, 0xff, 0xc0, 0xc0, 0xc0, 0xfe, 0xfe, 0xc0, 0xc0, 0xc0, 0xff, 0xff}
+
+/* F (70) */
+#define NXFONT_METRICS_70 {1, 8, 12, 1, 8, 0}
+#define NXFONT_BITMAP_70 {0xff, 0xff, 0xc0, 0xc0, 0xc0, 0xfe, 0xfe, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* G (71) */
+#define NXFONT_METRICS_71 {2, 10, 12, 1, 8, 0}
+#define NXFONT_BITMAP_71 {0x1f, 0x0, 0x3f, 0x80, 0x71, 0xc0, 0x60, 0xc0, 0xe0, 0x0, 0xc0, 0x0, 0xc3, 0xc0, 0xe3, 0xc0, 0x60, 0xc0, 0x71, 0xc0, 0x3f, 0xc0, 0x1e, 0xc0}
+
+/* H (72) */
+#define NXFONT_METRICS_72 {2, 10, 12, 1, 8, 0}
+#define NXFONT_BITMAP_72 {0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xff, 0xc0, 0xff, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* I (73) */
+#define NXFONT_METRICS_73 {1, 2, 12, 1, 8, 0}
+#define NXFONT_BITMAP_73 {0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* J (74) */
+#define NXFONT_METRICS_74 {1, 7, 12, 1, 8, 0}
+#define NXFONT_BITMAP_74 {0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0xc6, 0xc6, 0xfe, 0x7c}
+
+/* K (75) */
+#define NXFONT_METRICS_75 {2, 11, 12, 1, 8, 0}
+#define NXFONT_BITMAP_75 {0xc1, 0xc0, 0xc3, 0x80, 0xc7, 0x0, 0xce, 0x0, 0xdc, 0x0, 0xf8, 0x0, 0xfc, 0x0, 0xce, 0x0, 0xc7, 0x0, 0xc3, 0x80, 0xc1, 0xc0, 0xc0, 0xe0}
+
+/* L (76) */
+#define NXFONT_METRICS_76 {1, 8, 12, 1, 8, 0}
+#define NXFONT_BITMAP_76 {0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xff, 0xff}
+
+/* M (77) */
+#define NXFONT_METRICS_77 {2, 11, 12, 1, 8, 0}
+#define NXFONT_BITMAP_77 {0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xf1, 0xe0, 0xf1, 0xe0, 0xd1, 0x60, 0xdb, 0x60, 0xdb, 0x60, 0xca, 0x60, 0xce, 0x60, 0xce, 0x60, 0xc4, 0x60}
+
+/* N (78) */
+#define NXFONT_METRICS_78 {2, 10, 12, 1, 8, 0}
+#define NXFONT_BITMAP_78 {0xe0, 0xc0, 0xf0, 0xc0, 0xf0, 0xc0, 0xd8, 0xc0, 0xd8, 0xc0, 0xcc, 0xc0, 0xcc, 0xc0, 0xc6, 0xc0, 0xc6, 0xc0, 0xc3, 0xc0, 0xc3, 0xc0, 0xc1, 0xc0}
+
+/* O (79) */
+#define NXFONT_METRICS_79 {2, 11, 12, 1, 8, 0}
+#define NXFONT_BITMAP_79 {0x1f, 0x0, 0x3f, 0x80, 0x71, 0xc0, 0x60, 0xc0, 0xe0, 0xe0, 0xc0, 0x60, 0xc0, 0x60, 0xe0, 0xe0, 0x60, 0xc0, 0x71, 0xc0, 0x3f, 0x80, 0x1f, 0x0}
+
+/* P (80) */
+#define NXFONT_METRICS_80 {2, 9, 12, 1, 8, 0}
+#define NXFONT_BITMAP_80 {0xfe, 0x0, 0xff, 0x0, 0xc3, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc3, 0x80, 0xff, 0x0, 0xfe, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0}
+
+/* Q (81) */
+#define NXFONT_METRICS_81 {2, 11, 13, 1, 8, 0}
+#define NXFONT_BITMAP_81 {0x1f, 0x0, 0x3f, 0x80, 0x71, 0xc0, 0x60, 0xc0, 0xe0, 0xe0, 0xc0, 0x60, 0xc0, 0x60, 0xe2, 0x60, 0x67, 0xc0, 0x73, 0xc0, 0x3f, 0x80, 0x1f, 0xc0, 0x0, 0x80}
+
+/* R (82) */
+#define NXFONT_METRICS_82 {2, 10, 12, 1, 8, 0}
+#define NXFONT_BITMAP_82 {0xff, 0x0, 0xff, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc3, 0x80, 0xff, 0x0, 0xff, 0x0, 0xc3, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0xc0, 0xc1, 0xc0}
+
+/* S (83) */
+#define NXFONT_METRICS_83 {2, 9, 12, 1, 8, 0}
+#define NXFONT_BITMAP_83 {0x3e, 0x0, 0x7f, 0x0, 0xe3, 0x80, 0xc1, 0x80, 0xf0, 0x0, 0x7e, 0x0, 0x1f, 0x0, 0x3, 0x80, 0xc1, 0x80, 0xe3, 0x80, 0x7f, 0x0, 0x3e, 0x0}
+
+/* T (84) */
+#define NXFONT_METRICS_84 {2, 10, 12, 0, 8, 0}
+#define NXFONT_BITMAP_84 {0xff, 0xc0, 0xff, 0xc0, 0xc, 0x0, 0xc, 0x0, 0xc, 0x0, 0xc, 0x0, 0xc, 0x0, 0xc, 0x0, 0xc, 0x0, 0xc, 0x0, 0xc, 0x0, 0xc, 0x0}
+
+/* U (85) */
+#define NXFONT_METRICS_85 {2, 10, 12, 1, 8, 0}
+#define NXFONT_BITMAP_85 {0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xe1, 0xc0, 0x7f, 0x80, 0x3f, 0x0}
+
+/* V (86) */
+#define NXFONT_METRICS_86 {2, 10, 12, 0, 8, 0}
+#define NXFONT_BITMAP_86 {0xc0, 0xc0, 0xc0, 0xc0, 0x61, 0x80, 0x61, 0x80, 0x61, 0x80, 0x33, 0x0, 0x33, 0x0, 0x33, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0xc, 0x0, 0xc, 0x0}
+
+/* W (87) */
+#define NXFONT_METRICS_87 {2, 14, 12, 0, 8, 0}
+#define NXFONT_BITMAP_87 {0xc3, 0xc, 0xc3, 0xc, 0xc3, 0xc, 0x63, 0x18, 0x67, 0x98, 0x67, 0x98, 0x34, 0xb0, 0x3c, 0xf0, 0x3c, 0xf0, 0x18, 0x60, 0x18, 0x60, 0x18, 0x60}
+
+/* X (88) */
+#define NXFONT_METRICS_88 {2, 9, 12, 1, 8, 0}
+#define NXFONT_BITMAP_88 {0xc1, 0x80, 0xe3, 0x80, 0x63, 0x0, 0x36, 0x0, 0x3e, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x3e, 0x0, 0x36, 0x0, 0x63, 0x0, 0xe3, 0x80, 0xc1, 0x80}
+
+/* Y (89) */
+#define NXFONT_METRICS_89 {2, 10, 12, 0, 8, 0}
+#define NXFONT_BITMAP_89 {0xc0, 0xc0, 0xe1, 0xc0, 0x61, 0x80, 0x33, 0x0, 0x33, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0xc, 0x0, 0xc, 0x0, 0xc, 0x0, 0xc, 0x0, 0xc, 0x0}
+
+/* Z (90) */
+#define NXFONT_METRICS_90 {1, 8, 12, 1, 8, 0}
+#define NXFONT_BITMAP_90 {0xff, 0xff, 0x7, 0x6, 0xc, 0x1c, 0x38, 0x30, 0x60, 0xe0, 0xff, 0xff}
+
+/* bracketleft (91) */
+#define NXFONT_METRICS_91 {1, 4, 15, 1, 8, 0}
+#define NXFONT_BITMAP_91 {0xf0, 0xf0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf0, 0xf0}
+
+/* backslash (92) */
+#define NXFONT_METRICS_92 {1, 4, 12, 0, 8, 0}
+#define NXFONT_BITMAP_92 {0x80, 0x80, 0xc0, 0x40, 0x40, 0x60, 0x20, 0x20, 0x30, 0x10, 0x10, 0x10}
+
+/* bracketright (93) */
+#define NXFONT_METRICS_93 {1, 4, 15, 0, 8, 0}
+#define NXFONT_BITMAP_93 {0xf0, 0xf0, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0xf0, 0xf0}
+
+/* asciicircum (94) */
+#define NXFONT_METRICS_94 {1, 8, 7, 1, 8, 0}
+#define NXFONT_BITMAP_94 {0x18, 0x18, 0x3c, 0x66, 0x66, 0xc3, 0xc3}
+
+/* underscore (95) */
+#define NXFONT_METRICS_95 {2, 9, 1, 0, 22, 0}
+#define NXFONT_BITMAP_95 {0xff, 0x80}
+
+/* grave (96) */
+#define NXFONT_METRICS_96 {1, 3, 3, 2, 7, 0}
+#define NXFONT_BITMAP_96 {0x80, 0xc0, 0x20}
+
+/* a (97) */
+#define NXFONT_METRICS_97 {1, 8, 9, 1, 11, 0}
+#define NXFONT_BITMAP_97 {0x7c, 0xfe, 0xc6, 0xe, 0x7e, 0xe6, 0xc6, 0xfe, 0x77}
+
+/* b (98) */
+#define NXFONT_METRICS_98 {1, 8, 12, 1, 8, 0}
+#define NXFONT_BITMAP_98 {0xc0, 0xc0, 0xc0, 0xdc, 0xfe, 0xe7, 0xc3, 0xc3, 0xc3, 0xe7, 0xfe, 0xdc}
+
+/* c (99) */
+#define NXFONT_METRICS_99 {1, 8, 9, 1, 11, 0}
+#define NXFONT_BITMAP_99 {0x3c, 0x7e, 0xe7, 0xc0, 0xc0, 0xc0, 0xe7, 0x7e, 0x3c}
+
+/* d (100) */
+#define NXFONT_METRICS_100 {1, 8, 12, 1, 8, 0}
+#define NXFONT_BITMAP_100 {0x3, 0x3, 0x3, 0x3f, 0x7f, 0xe7, 0xc3, 0xc3, 0xc3, 0xe7, 0x7f, 0x3b}
+
+/* e (101) */
+#define NXFONT_METRICS_101 {1, 8, 9, 1, 11, 0}
+#define NXFONT_BITMAP_101 {0x3c, 0x7e, 0xc3, 0xff, 0xff, 0xc0, 0xe7, 0x7e, 0x3c}
+
+/* f (102) */
+#define NXFONT_METRICS_102 {1, 4, 12, 1, 8, 0}
+#define NXFONT_BITMAP_102 {0x30, 0x70, 0x60, 0xf0, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60}
+
+/* g (103) */
+#define NXFONT_METRICS_103 {1, 8, 13, 1, 11, 0}
+#define NXFONT_BITMAP_103 {0x3b, 0x7f, 0xe7, 0xc3, 0xc3, 0xc3, 0xe7, 0x7f, 0x3b, 0x3, 0xe7, 0x7e, 0x3c}
+
+/* h (104) */
+#define NXFONT_METRICS_104 {1, 8, 12, 1, 8, 0}
+#define NXFONT_BITMAP_104 {0xc0, 0xc0, 0xc0, 0xde, 0xff, 0xe3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3}
+
+/* i (105) */
+#define NXFONT_METRICS_105 {1, 2, 12, 1, 8, 0}
+#define NXFONT_BITMAP_105 {0xc0, 0xc0, 0x0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* j (106) */
+#define NXFONT_METRICS_106 {1, 3, 16, 1, 8, 0}
+#define NXFONT_BITMAP_106 {0x60, 0x60, 0x0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xe0, 0xc0}
+
+/* k (107) */
+#define NXFONT_METRICS_107 {1, 8, 12, 1, 8, 0}
+#define NXFONT_BITMAP_107 {0xc0, 0xc0, 0xc0, 0xc7, 0xce, 0xdc, 0xf8, 0xfc, 0xec, 0xce, 0xc6, 0xc7}
+
+/* l (108) */
+#define NXFONT_METRICS_108 {1, 2, 12, 1, 8, 0}
+#define NXFONT_BITMAP_108 {0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* m (109) */
+#define NXFONT_METRICS_109 {2, 12, 9, 1, 11, 0}
+#define NXFONT_BITMAP_109 {0xde, 0xe0, 0xff, 0xf0, 0xe7, 0x30, 0xc6, 0x30, 0xc6, 0x30, 0xc6, 0x30, 0xc6, 0x30, 0xc6, 0x30, 0xc6, 0x30}
+
+/* n (110) */
+#define NXFONT_METRICS_110 {1, 8, 9, 1, 11, 0}
+#define NXFONT_BITMAP_110 {0xde, 0xff, 0xe3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3}
+
+/* o (111) */
+#define NXFONT_METRICS_111 {1, 8, 9, 1, 11, 0}
+#define NXFONT_BITMAP_111 {0x3c, 0x7e, 0xe7, 0xc3, 0xc3, 0xc3, 0xe7, 0x7e, 0x3c}
+
+/* p (112) */
+#define NXFONT_METRICS_112 {1, 8, 13, 1, 11, 0}
+#define NXFONT_BITMAP_112 {0xdc, 0xfe, 0xe7, 0xc3, 0xc3, 0xc3, 0xe7, 0xfe, 0xdc, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* q (113) */
+#define NXFONT_METRICS_113 {1, 8, 13, 1, 11, 0}
+#define NXFONT_BITMAP_113 {0x3b, 0x7f, 0xe7, 0xc3, 0xc3, 0xc3, 0xe7, 0x7f, 0x3b, 0x3, 0x3, 0x3, 0x3}
+
+/* r (114) */
+#define NXFONT_METRICS_114 {1, 5, 9, 1, 11, 0}
+#define NXFONT_BITMAP_114 {0xd8, 0xf8, 0xe0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* s (115) */
+#define NXFONT_METRICS_115 {1, 7, 9, 1, 11, 0}
+#define NXFONT_BITMAP_115 {0x7c, 0xfe, 0xc6, 0xf0, 0x7c, 0xe, 0xc6, 0xfe, 0x7c}
+
+/* t (116) */
+#define NXFONT_METRICS_116 {1, 4, 11, 1, 9, 0}
+#define NXFONT_BITMAP_116 {0x60, 0x60, 0xf0, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x70, 0x30}
+
+/* u (117) */
+#define NXFONT_METRICS_117 {1, 8, 9, 1, 11, 0}
+#define NXFONT_BITMAP_117 {0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc7, 0xff, 0x7b}
+
+/* v (118) */
+#define NXFONT_METRICS_118 {1, 8, 9, 0, 11, 0}
+#define NXFONT_BITMAP_118 {0xc3, 0xc3, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18}
+
+/* w (119) */
+#define NXFONT_METRICS_119 {2, 12, 9, 0, 11, 0}
+#define NXFONT_BITMAP_119 {0xc6, 0x30, 0xc6, 0x30, 0x66, 0x60, 0x66, 0x60, 0x6f, 0x60, 0x3f, 0xc0, 0x39, 0xc0, 0x19, 0x80, 0x19, 0x80}
+
+/* x (120) */
+#define NXFONT_METRICS_120 {1, 7, 9, 1, 11, 0}
+#define NXFONT_BITMAP_120 {0xc6, 0xc6, 0x6c, 0x7c, 0x38, 0x7c, 0x6c, 0xc6, 0xc6}
+
+/* y (121) */
+#define NXFONT_METRICS_121 {1, 8, 13, 0, 11, 0}
+#define NXFONT_BITMAP_121 {0xc3, 0xc3, 0x63, 0x66, 0x36, 0x36, 0x3c, 0x1c, 0x18, 0x18, 0x18, 0x70, 0x60}
+
+/* z (122) */
+#define NXFONT_METRICS_122 {1, 7, 9, 0, 11, 0}
+#define NXFONT_BITMAP_122 {0xfe, 0xfe, 0xe, 0x1c, 0x18, 0x38, 0x70, 0xfe, 0xfe}
+
+/* braceleft (123) */
+#define NXFONT_METRICS_123 {1, 4, 15, 1, 8, 0}
+#define NXFONT_BITMAP_123 {0x30, 0x70, 0x60, 0x60, 0x60, 0x60, 0x60, 0xc0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x70, 0x30}
+
+/* bar (124) */
+#define NXFONT_METRICS_124 {1, 1, 16, 1, 8, 0}
+#define NXFONT_BITMAP_124 {0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}
+
+/* braceright (125) */
+#define NXFONT_METRICS_125 {1, 4, 15, 1, 8, 0}
+#define NXFONT_BITMAP_125 {0xc0, 0xe0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x30, 0x60, 0x60, 0x60, 0x60, 0x60, 0xe0, 0xc0}
+
+/* asciitilde (126) */
+#define NXFONT_METRICS_126 {1, 8, 3, 1, 14, 0}
+#define NXFONT_BITMAP_126 {0x71, 0x99, 0x8e}
+
+/* exclamdown (161) */
+#define NXFONT_METRICS_161 {1, 2, 12, 1, 11, 0}
+#define NXFONT_BITMAP_161 {0xc0, 0xc0, 0x0, 0x40, 0x40, 0x40, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* cent (162) */
+#define NXFONT_METRICS_162 {1, 8, 11, 0, 10, 0}
+#define NXFONT_BITMAP_162 {0x4, 0x3c, 0x7e, 0xef, 0xc8, 0xd8, 0xd0, 0xf7, 0x7e, 0x3c, 0x20}
+
+/* sterling (163) */
+#define NXFONT_METRICS_163 {1, 8, 12, 0, 8, 0}
+#define NXFONT_BITMAP_163 {0x1c, 0x3e, 0x63, 0x63, 0x60, 0x30, 0x7c, 0x30, 0x30, 0x20, 0x7f, 0xff}
+
+/* currency (164) */
+#define NXFONT_METRICS_164 {1, 7, 7, 1, 11, 0}
+#define NXFONT_BITMAP_164 {0xba, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0xba}
+
+/* yen (165) */
+#define NXFONT_METRICS_165 {1, 8, 12, 0, 8, 0}
+#define NXFONT_BITMAP_165 {0xc3, 0xc3, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x7e, 0x18, 0x18, 0x18}
+
+/* brokenbar (166) */
+#define NXFONT_METRICS_166 {1, 1, 16, 2, 8, 0}
+#define NXFONT_BITMAP_166 {0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x0, 0x0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}
+
+/* section (167) */
+#define NXFONT_METRICS_167 {1, 8, 15, 0, 8, 0}
+#define NXFONT_BITMAP_167 {0x3c, 0x7e, 0x66, 0x60, 0x78, 0x7e, 0xc7, 0xc3, 0xf3, 0x7e, 0x1e, 0x6, 0x66, 0x7e, 0x3c}
+
+/* dieresis (168) */
+#define NXFONT_METRICS_168 {1, 5, 2, 0, 8, 0}
+#define NXFONT_BITMAP_168 {0xd8, 0xd8}
+
+/* copyright (169) */
+#define NXFONT_METRICS_169 {2, 12, 12, 0, 8, 0}
+#define NXFONT_BITMAP_169 {0xf, 0x0, 0x39, 0xc0, 0x60, 0x60, 0x4f, 0x20, 0xd9, 0xb0, 0x90, 0x10, 0x90, 0x10, 0xd9, 0xb0, 0x4f, 0x20, 0x60, 0x20, 0x39, 0xc0, 0xf, 0x0}
+
+/* ordfeminine (170) */
+#define NXFONT_METRICS_170 {1, 5, 7, 1, 8, 0}
+#define NXFONT_BITMAP_170 {0x60, 0x90, 0x70, 0x90, 0x78, 0x0, 0xf8}
+
+/* guillemotleft (171) */
+#define NXFONT_METRICS_171 {1, 8, 6, 0, 12, 0}
+#define NXFONT_BITMAP_171 {0x33, 0x66, 0xcc, 0xcc, 0x66, 0x33}
+
+/* logicalnot (172) */
+#define NXFONT_METRICS_172 {1, 8, 5, 0, 13, 0}
+#define NXFONT_BITMAP_172 {0xff, 0xff, 0x3, 0x3, 0x3}
+
+/* hyphen (173) */
+#define NXFONT_METRICS_173 {1, 4, 2, 0, 15, 0}
+#define NXFONT_BITMAP_173 {0xf0, 0xf0}
+
+/* registered (174) */
+#define NXFONT_METRICS_174 {2, 12, 12, 0, 8, 0}
+#define NXFONT_BITMAP_174 {0xf, 0x0, 0x39, 0xc0, 0x60, 0x60, 0x5f, 0x20, 0xd9, 0xb0, 0x99, 0x90, 0x9e, 0x10, 0xdb, 0x30, 0x5b, 0x20, 0x60, 0x60, 0x39, 0xc0, 0xf, 0x0}
+
+/* macron (175) */
+#define NXFONT_METRICS_175 {1, 5, 1, 0, 9, 0}
+#define NXFONT_BITMAP_175 {0xf8}
+
+/* degree (176) */
+#define NXFONT_METRICS_176 {1, 4, 5, 1, 8, 0}
+#define NXFONT_BITMAP_176 {0x60, 0x90, 0x90, 0x90, 0x60}
+
+/* plusminus (177) */
+#define NXFONT_METRICS_177 {1, 8, 11, 1, 9, 0}
+#define NXFONT_BITMAP_177 {0x18, 0x18, 0x18, 0xff, 0xff, 0x18, 0x18, 0x18, 0x0, 0xff, 0xff}
+
+/* twosuperior (178) */
+#define NXFONT_METRICS_178 {1, 5, 7, 0, 8, 0}
+#define NXFONT_BITMAP_178 {0x70, 0xd8, 0xd8, 0x30, 0x60, 0xf8, 0xf8}
+
+/* threesuperior (179) */
+#define NXFONT_METRICS_179 {1, 5, 7, 0, 8, 0}
+#define NXFONT_BITMAP_179 {0x70, 0xd8, 0x18, 0x30, 0x18, 0xd8, 0x70}
+
+/* acute (180) */
+#define NXFONT_METRICS_180 {1, 3, 3, 1, 7, 0}
+#define NXFONT_BITMAP_180 {0x20, 0x60, 0x80}
+
+/* mu (181) */
+#define NXFONT_METRICS_181 {1, 8, 12, 1, 11, 0}
+#define NXFONT_BITMAP_181 {0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc7, 0xff, 0xfb, 0xc0, 0xc0, 0xc0}
+
+/* paragraph (182) */
+#define NXFONT_METRICS_182 {1, 8, 15, 0, 8, 0}
+#define NXFONT_BITMAP_182 {0x7f, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0x72, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12}
+
+/* periodcentered (183) */
+#define NXFONT_METRICS_183 {1, 2, 2, 1, 14, 0}
+#define NXFONT_BITMAP_183 {0xc0, 0xc0}
+
+/* cedilla (184) */
+#define NXFONT_METRICS_184 {1, 5, 4, 0, 20, 0}
+#define NXFONT_BITMAP_184 {0x20, 0x30, 0x98, 0x70}
+
+/* onesuperior (185) */
+#define NXFONT_METRICS_185 {1, 4, 7, 1, 8, 0}
+#define NXFONT_BITMAP_185 {0x30, 0xf0, 0xf0, 0x30, 0x30, 0x30, 0x30}
+
+/* ordmasculine (186) */
+#define NXFONT_METRICS_186 {1, 5, 7, 0, 8, 0}
+#define NXFONT_BITMAP_186 {0x70, 0xd8, 0x88, 0xd8, 0x70, 0x0, 0xf8}
+
+/* guillemotright (187) */
+#define NXFONT_METRICS_187 {1, 8, 6, 1, 12, 0}
+#define NXFONT_BITMAP_187 {0xcc, 0x66, 0x33, 0x33, 0x66, 0xcc}
+
+/* onequarter (188) */
+#define NXFONT_METRICS_188 {2, 13, 12, 1, 8, 0}
+#define NXFONT_BITMAP_188 {0x30, 0xc0, 0xf0, 0x80, 0xf1, 0x80, 0x31, 0x0, 0x33, 0x30, 0x32, 0x70, 0x36, 0xf0, 0x4, 0xb0, 0xd, 0xb0, 0x9, 0xf8, 0x18, 0x30, 0x10, 0x30}
+
+/* onehalf (189) */
+#define NXFONT_METRICS_189 {2, 12, 12, 0, 8, 0}
+#define NXFONT_BITMAP_189 {0x30, 0x80, 0xf1, 0x80, 0xf1, 0x0, 0x33, 0x0, 0x32, 0x0, 0x36, 0xe0, 0x35, 0xb0, 0xd, 0xb0, 0x8, 0x60, 0x18, 0xc0, 0x11, 0xf0, 0x31, 0xf0}
+
+/* threequarters (190) */
+#define NXFONT_METRICS_190 {2, 13, 12, 0, 8, 0}
+#define NXFONT_BITMAP_190 {0x70, 0x40, 0xd8, 0xc0, 0x18, 0x80, 0x31, 0x80, 0x19, 0x30, 0xdb, 0x70, 0x72, 0xf0, 0x6, 0xb0, 0x5, 0xb0, 0xd, 0xf8, 0x8, 0x30, 0x18, 0x30}
+
+/* questiondown (191) */
+#define NXFONT_METRICS_191 {1, 7, 12, 1, 11, 0}
+#define NXFONT_BITMAP_191 {0x30, 0x30, 0x0, 0x30, 0x30, 0x60, 0xe0, 0xc0, 0xc6, 0xc6, 0xfe, 0x7c}
+
+/* Agrave (192) */
+#define NXFONT_METRICS_192 {2, 11, 16, 0, 4, 0}
+#define NXFONT_BITMAP_192 {0x10, 0x0, 0x18, 0x0, 0x4, 0x0, 0x0, 0x0, 0xe, 0x0, 0xe, 0x0, 0x1f, 0x0, 0x1b, 0x0, 0x3b, 0x80, 0x31, 0x80, 0x71, 0xc0, 0x60, 0xc0, 0x7f, 0xc0, 0xff, 0xe0, 0xc0, 0x60, 0xc0, 0x60}
+
+/* Aacute (193) */
+#define NXFONT_METRICS_193 {2, 11, 16, 0, 4, 0}
+#define NXFONT_BITMAP_193 {0x2, 0x0, 0x6, 0x0, 0x8, 0x0, 0x0, 0x0, 0xe, 0x0, 0xe, 0x0, 0x1f, 0x0, 0x1b, 0x0, 0x3b, 0x80, 0x31, 0x80, 0x71, 0xc0, 0x60, 0xc0, 0x7f, 0xc0, 0xff, 0xe0, 0xc0, 0x60, 0xc0, 0x60}
+
+/* Acircumflex (194) */
+#define NXFONT_METRICS_194 {2, 11, 16, 0, 4, 0}
+#define NXFONT_BITMAP_194 {0x4, 0x0, 0xe, 0x0, 0x11, 0x0, 0x0, 0x0, 0xe, 0x0, 0xe, 0x0, 0x1f, 0x0, 0x1b, 0x0, 0x3b, 0x80, 0x31, 0x80, 0x71, 0xc0, 0x60, 0xc0, 0x7f, 0xc0, 0xff, 0xe0, 0xc0, 0x60, 0xc0, 0x60}
+
+/* Atilde (195) */
+#define NXFONT_METRICS_195 {2, 11, 15, 0, 5, 0}
+#define NXFONT_BITMAP_195 {0xe, 0x80, 0x17, 0x0, 0x0, 0x0, 0xe, 0x0, 0xe, 0x0, 0x1f, 0x0, 0x1b, 0x0, 0x3b, 0x80, 0x31, 0x80, 0x71, 0xc0, 0x60, 0xc0, 0x7f, 0xc0, 0xff, 0xe0, 0xc0, 0x60, 0xc0, 0x60}
+
+/* Adieresis (196) */
+#define NXFONT_METRICS_196 {2, 11, 15, 0, 5, 0}
+#define NXFONT_BITMAP_196 {0x31, 0x80, 0x31, 0x80, 0x0, 0x0, 0xe, 0x0, 0xe, 0x0, 0x1f, 0x0, 0x1b, 0x0, 0x3b, 0x80, 0x31, 0x80, 0x71, 0xc0, 0x60, 0xc0, 0x7f, 0xc0, 0xff, 0xe0, 0xc0, 0x60, 0xc0, 0x60}
+
+/* Aring (197) */
+#define NXFONT_METRICS_197 {2, 11, 16, 0, 4, 0}
+#define NXFONT_BITMAP_197 {0xc, 0x0, 0x12, 0x0, 0x12, 0x0, 0xc, 0x0, 0xe, 0x0, 0xe, 0x0, 0x1f, 0x0, 0x1b, 0x0, 0x3b, 0x80, 0x31, 0x80, 0x71, 0xc0, 0x60, 0xc0, 0x7f, 0xc0, 0xff, 0xe0, 0xc0, 0x60, 0xc0, 0x60}
+
+/* AE (198) */
+#define NXFONT_METRICS_198 {2, 14, 12, 0, 8, 0}
+#define NXFONT_BITMAP_198 {0x1f, 0xfc, 0x1f, 0xfc, 0x1b, 0x0, 0x33, 0x0, 0x33, 0x0, 0x33, 0xf8, 0x63, 0xf8, 0x7f, 0x0, 0x7f, 0x0, 0xc3, 0x0, 0xc3, 0xfc, 0xc3, 0xfc}
+
+/* Ccedilla (199) */
+#define NXFONT_METRICS_199 {2, 10, 16, 1, 8, 0}
+#define NXFONT_BITMAP_199 {0x1f, 0x0, 0x3f, 0x80, 0x71, 0xc0, 0x60, 0xc0, 0xe0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xe0, 0x0, 0x60, 0xc0, 0x71, 0xc0, 0x3f, 0x80, 0x1f, 0x0, 0x4, 0x0, 0x6, 0x0, 0x13, 0x0, 0xe, 0x0}
+
+/* Egrave (200) */
+#define NXFONT_METRICS_200 {1, 8, 16, 1, 4, 0}
+#define NXFONT_BITMAP_200 {0x20, 0x30, 0x8, 0x0, 0xff, 0xff, 0xc0, 0xc0, 0xc0, 0xfe, 0xfe, 0xc0, 0xc0, 0xc0, 0xff, 0xff}
+
+/* Eacute (201) */
+#define NXFONT_METRICS_201 {1, 8, 16, 1, 4, 0}
+#define NXFONT_BITMAP_201 {0x4, 0xc, 0x10, 0x0, 0xff, 0xff, 0xc0, 0xc0, 0xc0, 0xfe, 0xfe, 0xc0, 0xc0, 0xc0, 0xff, 0xff}
+
+/* Ecircumflex (202) */
+#define NXFONT_METRICS_202 {1, 8, 16, 1, 4, 0}
+#define NXFONT_BITMAP_202 {0x8, 0x1c, 0x22, 0x0, 0xff, 0xff, 0xc0, 0xc0, 0xc0, 0xfe, 0xfe, 0xc0, 0xc0, 0xc0, 0xff, 0xff}
+
+/* Edieresis (203) */
+#define NXFONT_METRICS_203 {1, 8, 15, 1, 5, 0}
+#define NXFONT_BITMAP_203 {0x66, 0x66, 0x0, 0xff, 0xff, 0xc0, 0xc0, 0xc0, 0xfe, 0xfe, 0xc0, 0xc0, 0xc0, 0xff, 0xff}
+
+/* Igrave (204) */
+#define NXFONT_METRICS_204 {1, 3, 16, 0, 4, 0}
+#define NXFONT_BITMAP_204 {0x80, 0xc0, 0x20, 0x0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60}
+
+/* Iacute (205) */
+#define NXFONT_METRICS_205 {1, 3, 16, 1, 4, 0}
+#define NXFONT_BITMAP_205 {0x20, 0x60, 0x80, 0x0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* Icircumflex (206) */
+#define NXFONT_METRICS_206 {1, 5, 16, 0, 4, 0}
+#define NXFONT_BITMAP_206 {0x20, 0x70, 0x88, 0x0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60}
+
+/* Idieresis (207) -- NOTE: Xoffset should be -1, not 0. */
+#define NXFONT_METRICS_207 {1, 6, 15, 0, 5, 0}
+#define NXFONT_BITMAP_207 {0xcc, 0xcc, 0x0, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30}
+
+/* Eth (208) */
+#define NXFONT_METRICS_208 {2, 12, 12, 0, 8, 0}
+#define NXFONT_BITMAP_208 {0x3f, 0x0, 0x3f, 0xc0, 0x30, 0xe0, 0x30, 0x60, 0x30, 0x70, 0xfc, 0x30, 0xfc, 0x30, 0x30, 0x70, 0x30, 0x60, 0x30, 0xe0, 0x3f, 0xc0, 0x3f, 0x0}
+
+/* Ntilde (209) */
+#define NXFONT_METRICS_209 {2, 10, 15, 1, 5, 0}
+#define NXFONT_BITMAP_209 {0x1d, 0x0, 0x2e, 0x0, 0x0, 0x0, 0xe0, 0xc0, 0xf0, 0xc0, 0xf0, 0xc0, 0xd8, 0xc0, 0xd8, 0xc0, 0xcc, 0xc0, 0xcc, 0xc0, 0xc6, 0xc0, 0xc6, 0xc0, 0xc3, 0xc0, 0xc3, 0xc0, 0xc1, 0xc0}
+
+/* Ograve (210) */
+#define NXFONT_METRICS_210 {2, 11, 16, 1, 4, 0}
+#define NXFONT_BITMAP_210 {0x8, 0x0, 0xc, 0x0, 0x2, 0x0, 0x0, 0x0, 0x1f, 0x0, 0x3f, 0x80, 0x71, 0xc0, 0x60, 0xc0, 0xe0, 0xe0, 0xc0, 0x60, 0xc0, 0x60, 0xe0, 0xe0, 0x60, 0xc0, 0x71, 0xc0, 0x3f, 0x80, 0x1f, 0x0}
+
+/* Oacute (211) */
+#define NXFONT_METRICS_211 {2, 11, 16, 1, 4, 0}
+#define NXFONT_BITMAP_211 {0x1, 0x0, 0x3, 0x0, 0x4, 0x0, 0x0, 0x0, 0x1f, 0x0, 0x3f, 0x80, 0x71, 0xc0, 0x60, 0xc0, 0xe0, 0xe0, 0xc0, 0x60, 0xc0, 0x60, 0xe0, 0xe0, 0x60, 0xc0, 0x71, 0xc0, 0x3f, 0x80, 0x1f, 0x0}
+
+/* Ocircumflex (212) */
+#define NXFONT_METRICS_212 {2, 11, 16, 1, 4, 0}
+#define NXFONT_BITMAP_212 {0x4, 0x0, 0xe, 0x0, 0x11, 0x0, 0x0, 0x0, 0x1f, 0x0, 0x3f, 0x80, 0x71, 0xc0, 0x60, 0xc0, 0xe0, 0xe0, 0xc0, 0x60, 0xc0, 0x60, 0xe0, 0xe0, 0x60, 0xc0, 0x71, 0xc0, 0x3f, 0x80, 0x1f, 0x0}
+
+/* Otilde (213) */
+#define NXFONT_METRICS_213 {2, 11, 15, 1, 5, 0}
+#define NXFONT_BITMAP_213 {0xe, 0x80, 0x17, 0x0, 0x0, 0x0, 0x1f, 0x0, 0x3f, 0x80, 0x71, 0xc0, 0x60, 0xc0, 0xe0, 0xe0, 0xc0, 0x60, 0xc0, 0x60, 0xe0, 0xe0, 0x60, 0xc0, 0x71, 0xc0, 0x3f, 0x80, 0x1f, 0x0}
+
+/* Odieresis (214) */
+#define NXFONT_METRICS_214 {2, 11, 15, 1, 5, 0}
+#define NXFONT_BITMAP_214 {0x19, 0x80, 0x19, 0x80, 0x0, 0x0, 0x1f, 0x0, 0x3f, 0x80, 0x71, 0xc0, 0x60, 0xc0, 0xe0, 0xe0, 0xc0, 0x60, 0xc0, 0x60, 0xe0, 0xe0, 0x60, 0xc0, 0x71, 0xc0, 0x3f, 0x80, 0x1f, 0x0}
+
+/* multiply (215) */
+#define NXFONT_METRICS_215 {2, 9, 9, 0, 11, 0}
+#define NXFONT_BITMAP_215 {0x41, 0x0, 0xe3, 0x80, 0x77, 0x0, 0x3e, 0x0, 0x1c, 0x0, 0x3e, 0x0, 0x77, 0x0, 0xe3, 0x80, 0x41, 0x0}
+
+/* Oslash (216) */
+#define NXFONT_METRICS_216 {2, 11, 12, 1, 8, 0}
+#define NXFONT_BITMAP_216 {0x1f, 0x20, 0x3f, 0xc0, 0x70, 0xc0, 0x61, 0xc0, 0xe3, 0x60, 0xc6, 0x60, 0xcc, 0x60, 0xd8, 0xe0, 0x70, 0xc0, 0x61, 0xc0, 0x7f, 0x80, 0x9f, 0x0}
+
+/* Ugrave (217) */
+#define NXFONT_METRICS_217 {2, 10, 16, 1, 4, 0}
+#define NXFONT_BITMAP_217 {0x10, 0x0, 0x18, 0x0, 0x4, 0x0, 0x0, 0x0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xe1, 0xc0, 0x7f, 0x80, 0x3f, 0x0}
+
+/* Uacute (218) */
+#define NXFONT_METRICS_218 {2, 10, 16, 1, 4, 0}
+#define NXFONT_BITMAP_218 {0x2, 0x0, 0x6, 0x0, 0x8, 0x0, 0x0, 0x0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xe1, 0xc0, 0x7f, 0x80, 0x3f, 0x0}
+
+/* Ucircumflex (219) */
+#define NXFONT_METRICS_219 {2, 10, 16, 1, 4, 0}
+#define NXFONT_BITMAP_219 {0x4, 0x0, 0xe, 0x0, 0x11, 0x0, 0x0, 0x0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xe1, 0xc0, 0x7f, 0x80, 0x3f, 0x0}
+
+/* Udieresis (220) */
+#define NXFONT_METRICS_220 {2, 10, 15, 1, 5, 0}
+#define NXFONT_BITMAP_220 {0x33, 0x0, 0x33, 0x0, 0x0, 0x0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xe1, 0xc0, 0x7f, 0x80, 0x3f, 0x0}
+
+/* Yacute (221) */
+#define NXFONT_METRICS_221 {2, 10, 16, 0, 4, 0}
+#define NXFONT_BITMAP_221 {0x2, 0x0, 0x6, 0x0, 0x8, 0x0, 0x0, 0x0, 0xc0, 0xc0, 0xe1, 0xc0, 0x61, 0x80, 0x33, 0x0, 0x33, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0xc, 0x0, 0xc, 0x0, 0xc, 0x0, 0xc, 0x0, 0xc, 0x0}
+
+/* Thorn (222) */
+#define NXFONT_METRICS_222 {2, 9, 12, 1, 8, 0}
+#define NXFONT_BITMAP_222 {0xc0, 0x0, 0xfe, 0x0, 0xff, 0x0, 0xc3, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc3, 0x80, 0xff, 0x0, 0xfe, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0}
+
+/* germandbls (223) */
+#define NXFONT_METRICS_223 {1, 8, 12, 1, 8, 0}
+#define NXFONT_BITMAP_223 {0x7c, 0xfe, 0xc6, 0xc6, 0xdc, 0xde, 0xc3, 0xc3, 0xc3, 0xc3, 0xde, 0xdc}
+
+/* agrave (224) */
+#define NXFONT_METRICS_224 {1, 8, 13, 1, 7, 0}
+#define NXFONT_BITMAP_224 {0x20, 0x30, 0x8, 0x0, 0x7c, 0xfe, 0xc6, 0xe, 0x7e, 0xe6, 0xc6, 0xfe, 0x77}
+
+/* aacute (225) */
+#define NXFONT_METRICS_225 {1, 8, 13, 1, 7, 0}
+#define NXFONT_BITMAP_225 {0x4, 0xc, 0x10, 0x0, 0x7c, 0xfe, 0xc6, 0xe, 0x7e, 0xe6, 0xc6, 0xfe, 0x77}
+
+/* acircumflex (226) */
+#define NXFONT_METRICS_226 {1, 8, 13, 1, 7, 0}
+#define NXFONT_BITMAP_226 {0x10, 0x38, 0x44, 0x0, 0x7c, 0xfe, 0xc6, 0xe, 0x7e, 0xe6, 0xc6, 0xfe, 0x77}
+
+/* atilde (227) */
+#define NXFONT_METRICS_227 {1, 8, 12, 1, 8, 0}
+#define NXFONT_BITMAP_227 {0x3a, 0x5c, 0x0, 0x7c, 0xfe, 0xc6, 0xe, 0x7e, 0xe6, 0xc6, 0xfe, 0x77}
+
+/* adieresis (228) */
+#define NXFONT_METRICS_228 {1, 8, 12, 1, 8, 0}
+#define NXFONT_BITMAP_228 {0x6c, 0x6c, 0x0, 0x7c, 0xfe, 0xc6, 0xe, 0x7e, 0xe6, 0xc6, 0xfe, 0x77}
+
+/* aring (229) */
+#define NXFONT_METRICS_229 {1, 8, 13, 1, 7, 0}
+#define NXFONT_BITMAP_229 {0x18, 0x24, 0x24, 0x18, 0x7c, 0xfe, 0xc6, 0xe, 0x7e, 0xe6, 0xc6, 0xfe, 0x77}
+
+/* ae (230) */
+#define NXFONT_METRICS_230 {2, 13, 9, 1, 11, 0}
+#define NXFONT_BITMAP_230 {0x7d, 0xe0, 0xff, 0xf0, 0xc6, 0x18, 0xf, 0xf8, 0x7f, 0xf8, 0xe6, 0x0, 0xcf, 0x38, 0xff, 0xf0, 0x79, 0xe0}
+
+/* ccedilla (231) */
+#define NXFONT_METRICS_231 {1, 8, 13, 1, 11, 0}
+#define NXFONT_BITMAP_231 {0x3c, 0x7e, 0xe7, 0xc0, 0xc0, 0xc0, 0xe7, 0x7e, 0x3c, 0x10, 0x18, 0x4c, 0x38}
+
+/* egrave (232) */
+#define NXFONT_METRICS_232 {1, 8, 13, 1, 7, 0}
+#define NXFONT_BITMAP_232 {0x20, 0x30, 0x8, 0x0, 0x3c, 0x7e, 0xc3, 0xff, 0xff, 0xc0, 0xe7, 0x7e, 0x3c}
+
+/* eacute (233) */
+#define NXFONT_METRICS_233 {1, 8, 13, 1, 7, 0}
+#define NXFONT_BITMAP_233 {0x4, 0xc, 0x10, 0x0, 0x3c, 0x7e, 0xc3, 0xff, 0xff, 0xc0, 0xe7, 0x7e, 0x3c}
+
+/* ecircumflex (234) */
+#define NXFONT_METRICS_234 {1, 8, 13, 1, 7, 0}
+#define NXFONT_BITMAP_234 {0x8, 0x1c, 0x22, 0x0, 0x3c, 0x7e, 0xc3, 0xff, 0xff, 0xc0, 0xe7, 0x7e, 0x3c}
+
+/* edieresis (235) */
+#define NXFONT_METRICS_235 {1, 8, 12, 1, 8, 0}
+#define NXFONT_BITMAP_235 {0x36, 0x36, 0x0, 0x3c, 0x7e, 0xc3, 0xff, 0xff, 0xc0, 0xe7, 0x7e, 0x3c}
+
+/* igrave (236) */
+#define NXFONT_METRICS_236 {1, 3, 13, 0, 7, 0}
+#define NXFONT_BITMAP_236 {0x80, 0xc0, 0x20, 0x0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60}
+
+/* iacute (237) */
+#define NXFONT_METRICS_237 {1, 3, 13, 1, 7, 0}
+#define NXFONT_BITMAP_237 {0x20, 0x60, 0x80, 0x0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* icircumflex (238) */
+#define NXFONT_METRICS_238 {1, 5, 13, 0, 7, 0}
+#define NXFONT_BITMAP_238 {0x20, 0x70, 0x88, 0x0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60}
+
+/* idieresis (239) */
+#define NXFONT_METRICS_239 {1, 5, 12, 0, 8, 0}
+#define NXFONT_BITMAP_239 {0xd8, 0xd8, 0x0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60}
+
+/* eth (240) */
+#define NXFONT_METRICS_240 {1, 8, 12, 1, 8, 0}
+#define NXFONT_BITMAP_240 {0x60, 0x7c, 0xf8, 0x1c, 0x7e, 0xe7, 0xc3, 0xc3, 0xc3, 0xe7, 0x7e, 0x3c}
+
+/* ntilde (241) */
+#define NXFONT_METRICS_241 {1, 8, 12, 1, 8, 0}
+#define NXFONT_BITMAP_241 {0x3a, 0x5c, 0x0, 0xde, 0xff, 0xe3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3}
+
+/* ograve (242) */
+#define NXFONT_METRICS_242 {1, 8, 13, 1, 7, 0}
+#define NXFONT_BITMAP_242 {0x20, 0x30, 0x8, 0x0, 0x3c, 0x7e, 0xe7, 0xc3, 0xc3, 0xc3, 0xe7, 0x7e, 0x3c}
+
+/* oacute (243) */
+#define NXFONT_METRICS_243 {1, 8, 13, 1, 7, 0}
+#define NXFONT_BITMAP_243 {0x8, 0x18, 0x20, 0x0, 0x3c, 0x7e, 0xe7, 0xc3, 0xc3, 0xc3, 0xe7, 0x7e, 0x3c}
+
+/* ocircumflex (244) */
+#define NXFONT_METRICS_244 {1, 8, 13, 1, 7, 0}
+#define NXFONT_BITMAP_244 {0x10, 0x38, 0x44, 0x0, 0x3c, 0x7e, 0xe7, 0xc3, 0xc3, 0xc3, 0xe7, 0x7e, 0x3c}
+
+/* otilde (245) */
+#define NXFONT_METRICS_245 {1, 8, 12, 1, 8, 0}
+#define NXFONT_BITMAP_245 {0x3a, 0x5c, 0x0, 0x3c, 0x7e, 0xe7, 0xc3, 0xc3, 0xc3, 0xe7, 0x7e, 0x3c}
+
+/* odieresis (246) */
+#define NXFONT_METRICS_246 {1, 8, 12, 1, 8, 0}
+#define NXFONT_BITMAP_246 {0x6c, 0x6c, 0x0, 0x3c, 0x7e, 0xe7, 0xc3, 0xc3, 0xc3, 0xe7, 0x7e, 0x3c}
+
+/* divide (247) */
+#define NXFONT_METRICS_247 {1, 8, 8, 1, 12, 0}
+#define NXFONT_BITMAP_247 {0x18, 0x18, 0x0, 0xff, 0xff, 0x0, 0x18, 0x18}
+
+/* oslash (248) */
+#define NXFONT_METRICS_248 {1, 8, 9, 1, 11, 0}
+#define NXFONT_BITMAP_248 {0x3d, 0x7f, 0xe7, 0xcf, 0xdb, 0xf3, 0xe7, 0xfe, 0xbc}
+
+/* ugrave (249) */
+#define NXFONT_METRICS_249 {1, 8, 13, 1, 7, 0}
+#define NXFONT_BITMAP_249 {0x20, 0x30, 0x8, 0x0, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc7, 0xff, 0x7b}
+
+/* uacute (250) */
+#define NXFONT_METRICS_250 {1, 8, 13, 1, 7, 0}
+#define NXFONT_BITMAP_250 {0x8, 0x18, 0x20, 0x0, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc7, 0xff, 0x7b}
+
+/* ucircumflex (251) */
+#define NXFONT_METRICS_251 {1, 8, 13, 1, 7, 0}
+#define NXFONT_BITMAP_251 {0x10, 0x38, 0x44, 0x0, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc7, 0xff, 0x7b}
+
+/* udieresis (252) */
+#define NXFONT_METRICS_252 {1, 8, 12, 1, 8, 0}
+#define NXFONT_BITMAP_252 {0x6c, 0x6c, 0x0, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc7, 0xff, 0x7b}
+
+/* yacute (253) */
+#define NXFONT_METRICS_253 {1, 8, 17, 0, 7, 0}
+#define NXFONT_BITMAP_253 {0x4, 0xc, 0x10, 0x0, 0xc3, 0xc3, 0x63, 0x66, 0x36, 0x36, 0x3c, 0x1c, 0x18, 0x18, 0x18, 0x70, 0x60}
+
+/* thorn (254) */
+#define NXFONT_METRICS_254 {1, 8, 16, 1, 8, 0}
+#define NXFONT_BITMAP_254 {0xc0, 0xc0, 0xc0, 0xdc, 0xfe, 0xe7, 0xc3, 0xc3, 0xc3, 0xe7, 0xfe, 0xdc, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* ydieresis (255) */
+#define NXFONT_METRICS_255 {1, 8, 16, 0, 8, 0}
+#define NXFONT_BITMAP_255 {0x36, 0x36, 0x0, 0xc3, 0xc3, 0x63, 0x66, 0x36, 0x36, 0x3c, 0x1c, 0x18, 0x18, 0x18, 0x70, 0x60}
+
+/****************************************************************************
+ * Public Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+#define EXTERN extern "C"
+extern "C" {
+#else
+#define EXTERN extern
+#endif
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* __GRAPHICS_NXFONTS_NXFONTS_SANS20X27B_H */
diff --git a/nuttx/graphics/nxfonts/nxfonts_sans22x29.h b/nuttx/graphics/nxfonts/nxfonts_sans22x29.h
new file mode 100644
index 000000000..e47020bbd
--- /dev/null
+++ b/nuttx/graphics/nxfonts/nxfonts_sans22x29.h
@@ -0,0 +1,849 @@
+/****************************************************************************
+ * graphics/nxfonts/nxfonts_sans22x29.h
+ *
+ * Copyright (C) 2011-2012 NX Engineering, S.A., All rights reserved.
+ * Author: Jose Pablo Carballo Gomez <jcarballo@nx-engineering.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT}
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING}
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+#ifndef __GRAPHICS_NXFONTS_NXFONTS_SANS22X29_H
+#define __GRAPHICS_NXFONTS_NXFONTS_SANS22X29_H
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/* Font ID */
+
+#define NXFONT_ID FONTID_SANS22X29
+
+/* Ranges of 7-bit and 8-bit fonts */
+
+#define NXFONT_MIN7BIT 33
+#define NXFONT_MAX7BIT 126
+
+#define NXFONT_MIN8BIT 161
+#define NXFONT_MAX8BIT 255
+
+/* Maximum height and width of any glyph in the set */
+
+#define NXFONT_MAXHEIGHT 29
+#define NXFONT_MAXWIDTH 22
+
+/* The width of a space */
+
+#define NXFONT_SPACEWIDTH 5
+
+/* exclam (33) */
+#define NXFONT_METRICS_33 {1, 2, 14, 2, 8, 0}
+#define NXFONT_BITMAP_33 {0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x80, 0x80, 0x0, 0x0, 0xc0, 0xc0}
+
+/* quotedbl (34) */
+#define NXFONT_METRICS_34 {1, 5, 5, 0, 8, 0}
+#define NXFONT_BITMAP_34 {0xd8, 0xd8, 0xd8, 0xd8, 0xd8}
+
+/* numbersign (35) */
+#define NXFONT_METRICS_35 {2, 10, 13, 0, 9, 0}
+#define NXFONT_BITMAP_35 {0x9, 0x0, 0x9, 0x0, 0x9, 0x0, 0x7f, 0xc0, 0x7f, 0xc0, 0x12, 0x0, 0x12, 0x0, 0x12, 0x0, 0xff, 0x80, 0xff, 0x80, 0x24, 0x0, 0x24, 0x0, 0x24, 0x0}
+
+/* dollar (36) */
+#define NXFONT_METRICS_36 {2, 9, 16, 1, 8, 0}
+#define NXFONT_BITMAP_36 {0x8, 0x0, 0x3e, 0x0, 0x7f, 0x0, 0xcb, 0x0, 0xc8, 0x0, 0xe8, 0x0, 0x78, 0x0, 0x3e, 0x0, 0xf, 0x0, 0x9, 0x80, 0xc9, 0x80, 0xeb, 0x80, 0x7f, 0x0, 0x3e, 0x0, 0x8, 0x0, 0x8, 0x0}
+
+/* percent (37) */
+#define NXFONT_METRICS_37 {2, 14, 13, 1, 9, 0}
+#define NXFONT_BITMAP_37 {0x78, 0x60, 0xcc, 0xc0, 0xcc, 0xc0, 0xcd, 0x80, 0xcd, 0x80, 0x7b, 0x0, 0x3, 0x0, 0x6, 0x78, 0x6, 0xcc, 0xc, 0xcc, 0xc, 0xcc, 0x18, 0xcc, 0x18, 0x78}
+
+/* ampersand (38) */
+#define NXFONT_METRICS_38 {2, 12, 13, 1, 9, 0}
+#define NXFONT_BITMAP_38 {0x3c, 0x0, 0x7e, 0x0, 0x66, 0x0, 0x66, 0x0, 0x3c, 0x0, 0x7c, 0x0, 0xee, 0xc0, 0xc6, 0xc0, 0xc3, 0xc0, 0xc3, 0x80, 0xe7, 0xc0, 0x7e, 0xe0, 0x3c, 0x70}
+
+/* quotesingle (39) */
+#define NXFONT_METRICS_39 {1, 1, 5, 1, 8, 0}
+#define NXFONT_BITMAP_39 {0x80, 0x80, 0x80, 0x80, 0x80}
+
+/* parenleft (40) */
+#define NXFONT_METRICS_40 {1, 4, 18, 0, 8, 0}
+#define NXFONT_BITMAP_40 {0x10, 0x30, 0x60, 0x60, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x60, 0x60, 0x30, 0x10}
+
+/* parenright (41) */
+#define NXFONT_METRICS_41 {1, 4, 18, 1, 8, 0}
+#define NXFONT_BITMAP_41 {0x80, 0xc0, 0x60, 0x60, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x60, 0x60, 0xc0, 0x80}
+
+/* asterisk (42) */
+#define NXFONT_METRICS_42 {1, 5, 7, 1, 8, 0}
+#define NXFONT_BITMAP_42 {0x20, 0xa8, 0xf8, 0x20, 0xf8, 0xa8, 0x20}
+
+/* plus (43) */
+#define NXFONT_METRICS_43 {1, 8, 10, 1, 12, 0}
+#define NXFONT_BITMAP_43 {0x18, 0x18, 0x18, 0x18, 0xff, 0xff, 0x18, 0x18, 0x18, 0x18}
+
+/* comma (44) */
+#define NXFONT_METRICS_44 {1, 2, 5, 1, 20, 0}
+#define NXFONT_BITMAP_44 {0xc0, 0xc0, 0x40, 0x40, 0x80}
+
+/* hyphen (45) */
+#define NXFONT_METRICS_45 {1, 5, 1, 0, 16, 0}
+#define NXFONT_BITMAP_45 {0xf8}
+
+/* period (46) */
+#define NXFONT_METRICS_46 {1, 2, 2, 1, 20, 0}
+#define NXFONT_BITMAP_46 {0xc0, 0xc0}
+
+/* slash (47) */
+#define NXFONT_METRICS_47 {1, 5, 14, 0, 8, 0}
+#define NXFONT_BITMAP_47 {0x18, 0x18, 0x18, 0x18, 0x30, 0x30, 0x30, 0x60, 0x60, 0x60, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* zero (48) */
+#define NXFONT_METRICS_48 {1, 8, 13, 1, 9, 0}
+#define NXFONT_BITMAP_48 {0x3c, 0x7e, 0x66, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x66, 0x7e, 0x3c}
+
+/* one (49) */
+#define NXFONT_METRICS_49 {1, 5, 13, 2, 9, 0}
+#define NXFONT_BITMAP_49 {0x18, 0xf8, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}
+
+/* two (50) */
+#define NXFONT_METRICS_50 {1, 8, 13, 1, 9, 0}
+#define NXFONT_BITMAP_50 {0x3c, 0xfe, 0xc3, 0x3, 0x7, 0xe, 0x1c, 0x38, 0x70, 0xe0, 0xc0, 0xff, 0xff}
+
+/* three (51) */
+#define NXFONT_METRICS_51 {1, 8, 13, 1, 9, 0}
+#define NXFONT_BITMAP_51 {0x3e, 0x7f, 0xc3, 0xc3, 0x6, 0x1c, 0x1e, 0x7, 0x3, 0xc3, 0xc7, 0x7e, 0x3c}
+
+/* four (52) */
+#define NXFONT_METRICS_52 {2, 9, 13, 0, 9, 0}
+#define NXFONT_BITMAP_52 {0x3, 0x0, 0x7, 0x0, 0xf, 0x0, 0x1b, 0x0, 0x33, 0x0, 0x33, 0x0, 0x63, 0x0, 0xc3, 0x0, 0xff, 0x80, 0xff, 0x80, 0x3, 0x0, 0x3, 0x0, 0x3, 0x0}
+
+/* five (53) */
+#define NXFONT_METRICS_53 {1, 8, 13, 1, 9, 0}
+#define NXFONT_BITMAP_53 {0xfe, 0xfe, 0xc0, 0xc0, 0xfc, 0xfe, 0xc7, 0x3, 0x3, 0xc3, 0xc7, 0xfe, 0x7c}
+
+/* six (54) */
+#define NXFONT_METRICS_54 {1, 8, 13, 1, 9, 0}
+#define NXFONT_BITMAP_54 {0x3c, 0x7f, 0x63, 0xc0, 0xc0, 0xdc, 0xfe, 0xc3, 0xc3, 0xc3, 0xe3, 0x7e, 0x3c}
+
+/* seven (55) */
+#define NXFONT_METRICS_55 {1, 8, 13, 1, 9, 0}
+#define NXFONT_BITMAP_55 {0xff, 0xff, 0x3, 0x6, 0xc, 0xc, 0x18, 0x18, 0x30, 0x30, 0x60, 0x60, 0x60}
+
+/* eight (56) */
+#define NXFONT_METRICS_56 {1, 8, 13, 1, 9, 0}
+#define NXFONT_BITMAP_56 {0x3c, 0x7e, 0xe7, 0xc3, 0xc3, 0x66, 0x7e, 0xe7, 0xc3, 0xc3, 0xe7, 0x7e, 0x3c}
+
+/* nine (57) */
+#define NXFONT_METRICS_57 {1, 8, 13, 1, 9, 0}
+#define NXFONT_BITMAP_57 {0x3c, 0x7e, 0xc7, 0xc3, 0xc3, 0xc3, 0x7f, 0x3b, 0x3, 0x3, 0xc6, 0xfe, 0x7c}
+
+/* colon (58) */
+#define NXFONT_METRICS_58 {1, 2, 10, 1, 12, 0}
+#define NXFONT_BITMAP_58 {0xc0, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc0, 0xc0}
+
+/* semicolon (59) */
+#define NXFONT_METRICS_59 {1, 2, 13, 1, 12, 0}
+#define NXFONT_BITMAP_59 {0xc0, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc0, 0xc0, 0x40, 0x40, 0x80}
+
+/* less (60) */
+#define NXFONT_METRICS_60 {1, 8, 9, 1, 13, 0}
+#define NXFONT_BITMAP_60 {0x3, 0xf, 0x3c, 0x70, 0xc0, 0x70, 0x3c, 0xf, 0x3}
+
+/* equal (61) */
+#define NXFONT_METRICS_61 {1, 7, 5, 2, 15, 0}
+#define NXFONT_BITMAP_61 {0xfe, 0xfe, 0x0, 0xfe, 0xfe}
+
+/* greater (62) */
+#define NXFONT_METRICS_62 {1, 8, 9, 1, 13, 0}
+#define NXFONT_BITMAP_62 {0xc0, 0xf0, 0x3c, 0xe, 0x3, 0xe, 0x3c, 0xf0, 0xc0}
+
+/* question (63) */
+#define NXFONT_METRICS_63 {1, 7, 14, 1, 8, 0}
+#define NXFONT_BITMAP_63 {0x7c, 0xfe, 0xc6, 0xc6, 0xe, 0x1c, 0x38, 0x30, 0x30, 0x30, 0x0, 0x0, 0x30, 0x30}
+
+/* at (64) */
+#define NXFONT_METRICS_64 {2, 16, 17, 1, 8, 0}
+#define NXFONT_BITMAP_64 {0x3, 0xf0, 0xf, 0xfc, 0x1c, 0xe, 0x30, 0x6, 0x63, 0xd3, 0x67, 0x73, 0xc6, 0x33, 0xcc, 0x63, 0xcc, 0x66, 0xcc, 0x66, 0xcc, 0xcc, 0xcf, 0xf8, 0x67, 0x70, 0x70, 0x0, 0x38, 0x0, 0x1f, 0xf0, 0x7, 0xe0}
+
+/* A (65) */
+#define NXFONT_METRICS_65 {2, 12, 14, 0, 8, 0}
+#define NXFONT_BITMAP_65 {0x6, 0x0, 0x6, 0x0, 0xf, 0x0, 0xf, 0x0, 0x19, 0x80, 0x19, 0x80, 0x30, 0xc0, 0x30, 0xc0, 0x3f, 0xc0, 0x7f, 0xe0, 0x60, 0x60, 0x60, 0x60, 0xc0, 0x30, 0xc0, 0x30}
+
+/* B (66) */
+#define NXFONT_METRICS_66 {2, 11, 14, 1, 8, 0}
+#define NXFONT_BITMAP_66 {0xff, 0x0, 0xff, 0x80, 0xc1, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc1, 0x80, 0xff, 0x80, 0xff, 0xc0, 0xc0, 0xe0, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0xe0, 0xff, 0xc0, 0xff, 0x80}
+
+/* C (67) */
+#define NXFONT_METRICS_67 {2, 12, 14, 1, 8, 0}
+#define NXFONT_BITMAP_67 {0xf, 0x80, 0x3f, 0xe0, 0x70, 0x70, 0x60, 0x30, 0xe0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xe0, 0x0, 0x60, 0x30, 0x70, 0x70, 0x3f, 0xe0, 0xf, 0x80}
+
+/* D (68) */
+#define NXFONT_METRICS_68 {2, 12, 14, 1, 8, 0}
+#define NXFONT_BITMAP_68 {0xff, 0x80, 0xff, 0xc0, 0xc0, 0xe0, 0xc0, 0x60, 0xc0, 0x30, 0xc0, 0x30, 0xc0, 0x30, 0xc0, 0x30, 0xc0, 0x30, 0xc0, 0x30, 0xc0, 0x60, 0xc0, 0xe0, 0xff, 0xc0, 0xff, 0x80}
+
+/* E (69) */
+#define NXFONT_METRICS_69 {2, 10, 14, 2, 8, 0}
+#define NXFONT_BITMAP_69 {0xff, 0xc0, 0xff, 0xc0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xff, 0x80, 0xff, 0x80, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xff, 0xc0, 0xff, 0xc0}
+
+/* F (70) */
+#define NXFONT_METRICS_70 {2, 9, 14, 2, 8, 0}
+#define NXFONT_BITMAP_70 {0xff, 0x80, 0xff, 0x80, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xff, 0x0, 0xff, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0}
+
+/* G (71) */
+#define NXFONT_METRICS_71 {2, 13, 14, 1, 8, 0}
+#define NXFONT_BITMAP_71 {0xf, 0xc0, 0x3f, 0xf0, 0x70, 0x38, 0x60, 0x18, 0xe0, 0x18, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0xf8, 0xc0, 0xf8, 0xe0, 0x18, 0x60, 0x18, 0x70, 0x38, 0x3f, 0xf8, 0xf, 0xd8}
+
+/* H (72) */
+#define NXFONT_METRICS_72 {2, 11, 14, 1, 8, 0}
+#define NXFONT_BITMAP_72 {0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xff, 0xe0, 0xff, 0xe0, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60}
+
+/* I (73) */
+#define NXFONT_METRICS_73 {1, 2, 14, 2, 8, 0}
+#define NXFONT_BITMAP_73 {0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* J (74) */
+#define NXFONT_METRICS_74 {1, 8, 14, 0, 8, 0}
+#define NXFONT_BITMAP_74 {0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0xc3, 0xc3, 0xe7, 0x7e, 0x3c}
+
+/* K (75) */
+#define NXFONT_METRICS_75 {2, 12, 14, 2, 8, 0}
+#define NXFONT_BITMAP_75 {0xc0, 0xe0, 0xc1, 0xc0, 0xc3, 0x80, 0xc7, 0x0, 0xce, 0x0, 0xdc, 0x0, 0xf8, 0x0, 0xfc, 0x0, 0xce, 0x0, 0xc7, 0x0, 0xc3, 0x80, 0xc1, 0xc0, 0xc0, 0xe0, 0xc0, 0x70}
+
+/* L (76) */
+#define NXFONT_METRICS_76 {2, 9, 14, 1, 8, 0}
+#define NXFONT_BITMAP_76 {0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xff, 0x80, 0xff, 0x80}
+
+/* M (77) */
+#define NXFONT_METRICS_77 {2, 14, 14, 1, 8, 0}
+#define NXFONT_BITMAP_77 {0xc0, 0xc, 0xc0, 0xc, 0xe0, 0x1c, 0xe0, 0x1c, 0xf0, 0x3c, 0xf0, 0x3c, 0xd8, 0x6c, 0xd8, 0x6c, 0xcc, 0xcc, 0xcc, 0xcc, 0xc4, 0x8c, 0xc7, 0x8c, 0xc3, 0xc, 0xc3, 0xc}
+
+/* N (78) */
+#define NXFONT_METRICS_78 {2, 11, 14, 1, 8, 0}
+#define NXFONT_BITMAP_78 {0xc0, 0x60, 0xe0, 0x60, 0xf0, 0x60, 0xf0, 0x60, 0xd8, 0x60, 0xcc, 0x60, 0xcc, 0x60, 0xc6, 0x60, 0xc6, 0x60, 0xc3, 0x60, 0xc1, 0xe0, 0xc1, 0xe0, 0xc0, 0xe0, 0xc0, 0x60}
+
+/* O (79) */
+#define NXFONT_METRICS_79 {2, 13, 14, 1, 8, 0}
+#define NXFONT_BITMAP_79 {0xf, 0x80, 0x3f, 0xe0, 0x70, 0x70, 0x60, 0x30, 0xe0, 0x38, 0xc0, 0x18, 0xc0, 0x18, 0xc0, 0x18, 0xc0, 0x18, 0xe0, 0x38, 0x60, 0x30, 0x70, 0x70, 0x3f, 0xe0, 0xf, 0x80}
+
+/* P (80) */
+#define NXFONT_METRICS_80 {2, 10, 14, 2, 8, 0}
+#define NXFONT_BITMAP_80 {0xff, 0x0, 0xff, 0x80, 0xc1, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc1, 0xc0, 0xff, 0x80, 0xff, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0}
+
+/* Q (81) */
+#define NXFONT_METRICS_81 {2, 13, 15, 1, 8, 0}
+#define NXFONT_BITMAP_81 {0xf, 0x80, 0x3f, 0xe0, 0x70, 0x70, 0x60, 0x30, 0xe0, 0x38, 0xc0, 0x18, 0xc0, 0x18, 0xc0, 0x18, 0xc0, 0x18, 0xe1, 0xb8, 0x61, 0xb0, 0x70, 0xf0, 0x3f, 0xe0, 0xf, 0xb0, 0x0, 0x30}
+
+/* R (82) */
+#define NXFONT_METRICS_82 {2, 11, 14, 1, 8, 0}
+#define NXFONT_BITMAP_82 {0xff, 0x80, 0xff, 0xc0, 0xc0, 0xe0, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0xe0, 0xff, 0xc0, 0xff, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60}
+
+/* S (83) */
+#define NXFONT_METRICS_83 {2, 10, 14, 1, 8, 0}
+#define NXFONT_BITMAP_83 {0x1e, 0x0, 0x7f, 0x80, 0xe1, 0xc0, 0xc0, 0xc0, 0xe0, 0x0, 0x7c, 0x0, 0x1f, 0x0, 0x3, 0x80, 0x1, 0xc0, 0x0, 0xc0, 0xc0, 0xc0, 0xe1, 0xc0, 0x7f, 0x80, 0x3f, 0x0}
+
+/* T (84) */
+#define NXFONT_METRICS_84 {2, 10, 14, 1, 8, 0}
+#define NXFONT_BITMAP_84 {0xff, 0xc0, 0xff, 0xc0, 0xc, 0x0, 0xc, 0x0, 0xc, 0x0, 0xc, 0x0, 0xc, 0x0, 0xc, 0x0, 0xc, 0x0, 0xc, 0x0, 0xc, 0x0, 0xc, 0x0, 0xc, 0x0, 0xc, 0x0}
+
+/* U (85) */
+#define NXFONT_METRICS_85 {2, 11, 14, 1, 8, 0}
+#define NXFONT_BITMAP_85 {0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0x60, 0xc0, 0x7f, 0xc0, 0x1f, 0x0}
+
+/* V (86) */
+#define NXFONT_METRICS_86 {2, 12, 14, 0, 8, 0}
+#define NXFONT_BITMAP_86 {0xc0, 0x30, 0xc0, 0x30, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x30, 0xc0, 0x30, 0xc0, 0x30, 0xc0, 0x19, 0x80, 0x19, 0x80, 0x19, 0x80, 0xf, 0x0, 0xf, 0x0, 0x6, 0x0}
+
+/* W (87) */
+#define NXFONT_METRICS_87 {2, 16, 14, 1, 8, 0}
+#define NXFONT_BITMAP_87 {0xc1, 0x83, 0xc1, 0x83, 0xc1, 0x83, 0xc3, 0xc3, 0x63, 0xc6, 0x62, 0x46, 0x66, 0x66, 0x66, 0x66, 0x36, 0x6c, 0x36, 0x6c, 0x34, 0x2c, 0x1c, 0x38, 0x18, 0x18, 0x18, 0x18}
+
+/* X (88) */
+#define NXFONT_METRICS_88 {2, 11, 14, 1, 8, 0}
+#define NXFONT_BITMAP_88 {0xc0, 0x60, 0xc0, 0x60, 0x60, 0xc0, 0x71, 0xc0, 0x31, 0x80, 0x1b, 0x0, 0xe, 0x0, 0xe, 0x0, 0x1b, 0x0, 0x31, 0x80, 0x71, 0xc0, 0x60, 0xc0, 0xc0, 0x60, 0xc0, 0x60}
+
+/* Y (89) */
+#define NXFONT_METRICS_89 {2, 12, 14, 0, 8, 0}
+#define NXFONT_BITMAP_89 {0xc0, 0x30, 0xc0, 0x30, 0x60, 0x60, 0x60, 0x60, 0x30, 0xc0, 0x39, 0xc0, 0x19, 0x80, 0xf, 0x0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0}
+
+/* Z (90) */
+#define NXFONT_METRICS_90 {2, 10, 14, 1, 8, 0}
+#define NXFONT_BITMAP_90 {0xff, 0xc0, 0xff, 0xc0, 0x0, 0xc0, 0x1, 0x80, 0x3, 0x0, 0x6, 0x0, 0xc, 0x0, 0x1c, 0x0, 0x18, 0x0, 0x30, 0x0, 0x60, 0x0, 0xc0, 0x0, 0xff, 0xc0, 0xff, 0xc0}
+
+/* bracketleft (91) */
+#define NXFONT_METRICS_91 {1, 4, 18, 0, 8, 0}
+#define NXFONT_BITMAP_91 {0xf0, 0xf0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf0, 0xf0}
+
+/* backslash (92) */
+#define NXFONT_METRICS_92 {1, 5, 14, 0, 8, 0}
+#define NXFONT_BITMAP_92 {0xc0, 0xc0, 0xc0, 0x60, 0x60, 0x60, 0x30, 0x30, 0x30, 0x30, 0x18, 0x18, 0x18, 0x18}
+
+/* bracketright (93) */
+#define NXFONT_METRICS_93 {1, 4, 18, 0, 8, 0}
+#define NXFONT_BITMAP_93 {0xf0, 0xf0, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0xf0, 0xf0}
+
+/* asciicircum (94) */
+#define NXFONT_METRICS_94 {1, 7, 6, 1, 9, 0}
+#define NXFONT_BITMAP_94 {0x10, 0x38, 0x6c, 0x6c, 0xc6, 0xc6}
+
+/* underscore (95) */
+#define NXFONT_METRICS_95 {2, 11, 2, 0, 24, 0}
+#define NXFONT_BITMAP_95 {0xff, 0xe0, 0xff, 0xe0}
+
+/* grave (96) */
+#define NXFONT_METRICS_96 {1, 4, 3, 0, 8, 0}
+#define NXFONT_BITMAP_96 {0xc0, 0x60, 0x30}
+
+/* a (97) */
+#define NXFONT_METRICS_97 {2, 9, 10, 1, 12, 0}
+#define NXFONT_BITMAP_97 {0x7e, 0x0, 0xe7, 0x0, 0xc3, 0x0, 0x7, 0x0, 0x7f, 0x0, 0xe3, 0x0, 0xc3, 0x0, 0xc3, 0x0, 0xe7, 0x80, 0x79, 0x80}
+
+/* b (98) */
+#define NXFONT_METRICS_98 {2, 9, 14, 1, 8, 0}
+#define NXFONT_BITMAP_98 {0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xde, 0x0, 0xff, 0x0, 0xe3, 0x0, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xe3, 0x0, 0xff, 0x0, 0xde, 0x0}
+
+/* c (99) */
+#define NXFONT_METRICS_99 {1, 8, 10, 1, 12, 0}
+#define NXFONT_BITMAP_99 {0x3e, 0x7f, 0x63, 0xc0, 0xc0, 0xc0, 0xc0, 0x63, 0x7f, 0x3e}
+
+/* d (100) */
+#define NXFONT_METRICS_100 {2, 9, 14, 1, 8, 0}
+#define NXFONT_BITMAP_100 {0x1, 0x80, 0x1, 0x80, 0x1, 0x80, 0x1, 0x80, 0x3d, 0x80, 0x7f, 0x80, 0x63, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0x63, 0x80, 0x7f, 0x80, 0x3d, 0x80}
+
+/* e (101) */
+#define NXFONT_METRICS_101 {1, 8, 10, 1, 12, 0}
+#define NXFONT_BITMAP_101 {0x3c, 0x7e, 0xc3, 0xc3, 0xff, 0xc0, 0xc0, 0xe3, 0x7f, 0x3c}
+
+/* f (102) */
+#define NXFONT_METRICS_102 {1, 6, 14, 0, 8, 0}
+#define NXFONT_BITMAP_102 {0x1c, 0x3c, 0x30, 0x30, 0xfc, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30}
+
+/* g (103) */
+#define NXFONT_METRICS_103 {2, 9, 14, 1, 12, 0}
+#define NXFONT_BITMAP_103 {0x3d, 0x80, 0x7f, 0x80, 0x61, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0x63, 0x80, 0x7f, 0x80, 0x3d, 0x80, 0x1, 0x80, 0x63, 0x0, 0x7f, 0x0, 0x1c, 0x0}
+
+/* h (104) */
+#define NXFONT_METRICS_104 {1, 8, 14, 1, 8, 0}
+#define NXFONT_BITMAP_104 {0xc0, 0xc0, 0xc0, 0xc0, 0xde, 0xff, 0xe3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3}
+
+/* i (105) */
+#define NXFONT_METRICS_105 {1, 2, 14, 1, 8, 0}
+#define NXFONT_BITMAP_105 {0xc0, 0xc0, 0x0, 0x0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* j (106) -- NOTE: Xoffset should be -1, not 0. */
+#define NXFONT_METRICS_106 {1, 4, 18, 0, 8, 0}
+#define NXFONT_BITMAP_106 {0x30, 0x30, 0x0, 0x0, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0xf0, 0xe0}
+
+/* k (107) */
+#define NXFONT_METRICS_107 {1, 8, 14, 1, 8, 0}
+#define NXFONT_BITMAP_107 {0xc0, 0xc0, 0xc0, 0xc0, 0xc6, 0xcc, 0xd8, 0xf0, 0xf8, 0xd8, 0xcc, 0xce, 0xc6, 0xc7}
+
+/* l (108) */
+#define NXFONT_METRICS_108 {1, 2, 14, 1, 8, 0}
+#define NXFONT_BITMAP_108 {0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* m (109) */
+#define NXFONT_METRICS_109 {2, 14, 10, 1, 12, 0}
+#define NXFONT_BITMAP_109 {0xde, 0x78, 0xff, 0xfc, 0xe3, 0x8c, 0xc3, 0xc, 0xc3, 0xc, 0xc3, 0xc, 0xc3, 0xc, 0xc3, 0xc, 0xc3, 0xc, 0xc3, 0xc}
+
+/* n (110) */
+#define NXFONT_METRICS_110 {1, 8, 10, 1, 12, 0}
+#define NXFONT_BITMAP_110 {0xde, 0xff, 0xe3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3}
+
+/* o (111) */
+#define NXFONT_METRICS_111 {2, 9, 10, 1, 12, 0}
+#define NXFONT_BITMAP_111 {0x3e, 0x0, 0x7f, 0x0, 0x63, 0x0, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0x63, 0x0, 0x7f, 0x0, 0x3e, 0x0}
+
+/* p (112) */
+#define NXFONT_METRICS_112 {2, 9, 14, 1, 12, 0}
+#define NXFONT_BITMAP_112 {0xde, 0x0, 0xff, 0x0, 0xe3, 0x0, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xe3, 0x0, 0xff, 0x0, 0xde, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0}
+
+/* q (113) */
+#define NXFONT_METRICS_113 {2, 9, 14, 1, 12, 0}
+#define NXFONT_BITMAP_113 {0x3d, 0x80, 0x7f, 0x80, 0x63, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0x63, 0x80, 0x7f, 0x80, 0x3d, 0x80, 0x1, 0x80, 0x1, 0x80, 0x1, 0x80, 0x1, 0x80}
+
+/* r (114) */
+#define NXFONT_METRICS_114 {1, 5, 10, 1, 12, 0}
+#define NXFONT_BITMAP_114 {0xd8, 0xd8, 0xe0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* s (115) */
+#define NXFONT_METRICS_115 {1, 7, 10, 1, 12, 0}
+#define NXFONT_BITMAP_115 {0x3c, 0x7e, 0xc6, 0xc0, 0xfc, 0x3e, 0x6, 0xc6, 0xfc, 0x78}
+
+/* t (116) */
+#define NXFONT_METRICS_116 {1, 6, 13, 0, 9, 0}
+#define NXFONT_BITMAP_116 {0x30, 0x30, 0x30, 0xfc, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3c, 0x1c}
+
+/* u (117) */
+#define NXFONT_METRICS_117 {1, 8, 10, 1, 12, 0}
+#define NXFONT_BITMAP_117 {0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc7, 0xff, 0x7b}
+
+/* v (118) */
+#define NXFONT_METRICS_118 {1, 8, 10, 1, 12, 0}
+#define NXFONT_BITMAP_118 {0xc3, 0xc3, 0xc3, 0x66, 0x66, 0x66, 0x24, 0x3c, 0x18, 0x18}
+
+/* w (119) */
+#define NXFONT_METRICS_119 {2, 12, 10, 1, 12, 0}
+#define NXFONT_BITMAP_119 {0xc6, 0x30, 0xc6, 0x30, 0xc6, 0x30, 0x66, 0x60, 0x66, 0x60, 0x69, 0x60, 0x29, 0x40, 0x39, 0xc0, 0x19, 0x80, 0x19, 0x80}
+
+/* x (120) */
+#define NXFONT_METRICS_120 {1, 8, 10, 1, 12, 0}
+#define NXFONT_BITMAP_120 {0xc3, 0xe7, 0x66, 0x3c, 0x18, 0x18, 0x3c, 0x66, 0xe7, 0xc3}
+
+/* y (121) */
+#define NXFONT_METRICS_121 {1, 8, 14, 1, 12, 0}
+#define NXFONT_BITMAP_121 {0xc3, 0xc3, 0xc3, 0x66, 0x66, 0x66, 0x24, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x70, 0x70}
+
+/* z (122) */
+#define NXFONT_METRICS_122 {1, 7, 10, 1, 12, 0}
+#define NXFONT_BITMAP_122 {0xfe, 0xfe, 0x6, 0xc, 0x18, 0x30, 0x60, 0xc0, 0xfe, 0xfe}
+
+/* braceleft (123) -- NOTE: Xoffset should be -1, not 0. */
+#define NXFONT_METRICS_123 {1, 6, 18, 0, 8, 0}
+#define NXFONT_BITMAP_123 {0xc, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x60, 0xc0, 0x60, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0xc}
+
+/* bar (124) */
+#define NXFONT_METRICS_124 {1, 2, 18, 1, 8, 0}
+#define NXFONT_BITMAP_124 {0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* braceright (125) */
+#define NXFONT_METRICS_125 {1, 6, 18, 0, 8, 0}
+#define NXFONT_BITMAP_125 {0xc0, 0x60, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0xc, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x60, 0xc0}
+
+/* asciitilde (126) */
+#define NXFONT_METRICS_126 {1, 8, 3, 1, 15, 0}
+#define NXFONT_BITMAP_126 {0x73, 0xff, 0xce}
+
+/* exclamdown (161) */
+#define NXFONT_METRICS_161 {1, 2, 14, 2, 12, 0}
+#define NXFONT_BITMAP_161 {0xc0, 0xc0, 0x0, 0x0, 0x40, 0x40, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* cent (162) */
+#define NXFONT_METRICS_162 {1, 8, 14, 1, 10, 0}
+#define NXFONT_BITMAP_162 {0x4, 0x4, 0x3e, 0x7f, 0x6b, 0xc8, 0xc8, 0xc8, 0xc8, 0x6b, 0x7f, 0x3e, 0x10, 0x10}
+
+/* sterling (163) */
+#define NXFONT_METRICS_163 {2, 9, 13, 0, 9, 0}
+#define NXFONT_BITMAP_163 {0x1e, 0x0, 0x3f, 0x0, 0x61, 0x80, 0x61, 0x80, 0x60, 0x0, 0x30, 0x0, 0x7e, 0x0, 0x18, 0x0, 0x18, 0x0, 0x30, 0x0, 0x60, 0x80, 0xff, 0x80, 0xdf, 0x0}
+
+/* currency (164) */
+#define NXFONT_METRICS_164 {1, 8, 7, 1, 12, 0}
+#define NXFONT_BITMAP_164 {0xc3, 0xff, 0x66, 0x66, 0x66, 0xff, 0xc3}
+
+/* yen (165) */
+#define NXFONT_METRICS_165 {1, 8, 13, 1, 9, 0}
+#define NXFONT_BITMAP_165 {0xc3, 0xc3, 0x66, 0x66, 0x66, 0x3c, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18}
+
+/* brokenbar (166) */
+#define NXFONT_METRICS_166 {1, 2, 18, 1, 8, 0}
+#define NXFONT_BITMAP_166 {0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* section (167) */
+#define NXFONT_METRICS_167 {1, 8, 18, 1, 8, 0}
+#define NXFONT_BITMAP_167 {0x3c, 0x7e, 0xc3, 0xc3, 0xf0, 0x7c, 0x6e, 0xc7, 0xc3, 0xe3, 0x73, 0x3e, 0xe, 0x7, 0xc3, 0xc3, 0x7e, 0x3c}
+
+/* dieresis (168) */
+#define NXFONT_METRICS_168 {1, 5, 2, 0, 8, 0}
+#define NXFONT_BITMAP_168 {0xd8, 0xd8}
+
+/* copyright (169) */
+#define NXFONT_METRICS_169 {2, 13, 14, 1, 8, 0}
+#define NXFONT_BITMAP_169 {0xf, 0x80, 0x30, 0x60, 0x40, 0x10, 0x47, 0x10, 0x88, 0x88, 0x90, 0x88, 0x90, 0x8, 0x90, 0x8, 0x90, 0x8, 0x88, 0x88, 0x47, 0x10, 0x40, 0x10, 0x30, 0x60, 0xf, 0x80}
+
+/* ordfeminine (170) */
+#define NXFONT_METRICS_170 {1, 5, 8, 1, 8, 0}
+#define NXFONT_BITMAP_170 {0x70, 0x98, 0x38, 0x48, 0xd8, 0x68, 0x0, 0xf8}
+
+/* guillemotleft (171) */
+#define NXFONT_METRICS_171 {1, 7, 6, 1, 14, 0}
+#define NXFONT_BITMAP_171 {0x36, 0x6c, 0xd8, 0xd8, 0x6c, 0x36}
+
+/* logicalnot (172) */
+#define NXFONT_METRICS_172 {2, 9, 5, 1, 14, 0}
+#define NXFONT_BITMAP_172 {0xff, 0x80, 0xff, 0x80, 0x1, 0x80, 0x1, 0x80, 0x1, 0x80}
+
+/* hyphen (173) */
+#define NXFONT_METRICS_173 {1, 5, 1, 0, 16, 0}
+#define NXFONT_BITMAP_173 {0xf8}
+
+/* registered (174) */
+#define NXFONT_METRICS_174 {2, 13, 14, 0, 8, 0}
+#define NXFONT_BITMAP_174 {0xf, 0x80, 0x30, 0x60, 0x40, 0x10, 0x4f, 0x90, 0x88, 0x48, 0x88, 0x48, 0x88, 0x48, 0x8f, 0x88, 0x89, 0x8, 0x88, 0x88, 0x48, 0x50, 0x40, 0x10, 0x30, 0x60, 0xf, 0x80}
+
+/* macron (175) */
+#define NXFONT_METRICS_175 {1, 5, 1, 0, 9, 0}
+#define NXFONT_BITMAP_175 {0xf8}
+
+/* degree (176) */
+#define NXFONT_METRICS_176 {1, 5, 5, 1, 9, 0}
+#define NXFONT_BITMAP_176 {0x70, 0xd8, 0x88, 0xd8, 0x70}
+
+/* plusminus (177) */
+#define NXFONT_METRICS_177 {1, 8, 11, 1, 11, 0}
+#define NXFONT_BITMAP_177 {0x18, 0x18, 0x18, 0xff, 0xff, 0x18, 0x18, 0x18, 0x0, 0xff, 0xff}
+
+/* twosuperior (178) */
+#define NXFONT_METRICS_178 {1, 5, 8, 0, 9, 0}
+#define NXFONT_BITMAP_178 {0x70, 0xf8, 0x98, 0x18, 0x30, 0x60, 0xf8, 0xf8}
+
+/* threesuperior (179) */
+#define NXFONT_METRICS_179 {1, 5, 8, 0, 9, 0}
+#define NXFONT_BITMAP_179 {0x70, 0xf8, 0x98, 0x30, 0x30, 0x98, 0xf8, 0x70}
+
+/* acute (180) */
+#define NXFONT_METRICS_180 {1, 4, 3, 0, 8, 0}
+#define NXFONT_BITMAP_180 {0x30, 0x60, 0xc0}
+
+/* mu (181) */
+#define NXFONT_METRICS_181 {1, 8, 14, 1, 12, 0}
+#define NXFONT_BITMAP_181 {0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xe7, 0xff, 0xdb, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* paragraph (182) */
+#define NXFONT_METRICS_182 {1, 8, 18, 1, 8, 0}
+#define NXFONT_BITMAP_182 {0x3f, 0x72, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0x72, 0x32, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12}
+
+/* periodcentered (183) */
+#define NXFONT_METRICS_183 {1, 2, 2, 1, 16, 0}
+#define NXFONT_BITMAP_183 {0xc0, 0xc0}
+
+/* cedilla (184) */
+#define NXFONT_METRICS_184 {1, 5, 5, 0, 21, 0}
+#define NXFONT_BITMAP_184 {0x60, 0x70, 0x18, 0xd8, 0xf0}
+
+/* onesuperior (185) */
+#define NXFONT_METRICS_185 {1, 4, 8, 0, 9, 0}
+#define NXFONT_BITMAP_185 {0x30, 0xf0, 0xf0, 0x30, 0x30, 0x30, 0x30, 0x30}
+
+/* ordmasculine (186) */
+#define NXFONT_METRICS_186 {1, 5, 8, 1, 8, 0}
+#define NXFONT_BITMAP_186 {0x70, 0xd8, 0x88, 0x88, 0xd8, 0x70, 0x0, 0xf8}
+
+/* guillemotright (187) */
+#define NXFONT_METRICS_187 {1, 7, 6, 1, 14, 0}
+#define NXFONT_BITMAP_187 {0xd8, 0x6c, 0x36, 0x36, 0x6c, 0xd8}
+
+/* onequarter (188) */
+#define NXFONT_METRICS_188 {2, 14, 13, 0, 9, 0}
+#define NXFONT_BITMAP_188 {0x30, 0x30, 0xf0, 0x30, 0xf0, 0x60, 0x30, 0xc0, 0x30, 0xc0, 0x31, 0x88, 0x31, 0x18, 0x33, 0x38, 0x6, 0x78, 0x6, 0xd8, 0xc, 0xfc, 0x18, 0x18, 0x18, 0x18}
+
+/* onehalf (189) */
+#define NXFONT_METRICS_189 {2, 14, 13, 0, 9, 0}
+#define NXFONT_BITMAP_189 {0x30, 0x30, 0xf0, 0x30, 0xf0, 0x60, 0x30, 0xc0, 0x30, 0xc0, 0x31, 0xb8, 0x31, 0x7c, 0x33, 0x4c, 0x6, 0xc, 0x6, 0x18, 0xc, 0x30, 0x18, 0x7c, 0x18, 0x7c}
+
+/* threequarters (190) */
+#define NXFONT_METRICS_190 {2, 14, 13, 0, 9, 0}
+#define NXFONT_BITMAP_190 {0x70, 0x30, 0xf8, 0x30, 0x98, 0x60, 0x30, 0xc0, 0x30, 0xc0, 0x99, 0x88, 0xf9, 0x18, 0x73, 0x38, 0x6, 0x78, 0x6, 0xd8, 0xc, 0xfc, 0x18, 0x18, 0x18, 0x18}
+
+/* questiondown (191) */
+#define NXFONT_METRICS_191 {1, 7, 14, 1, 12, 0}
+#define NXFONT_BITMAP_191 {0x18, 0x18, 0x0, 0x0, 0x18, 0x18, 0x18, 0x38, 0x70, 0xe0, 0xc6, 0xc6, 0xfe, 0x7c}
+
+/* Agrave (192) */
+#define NXFONT_METRICS_192 {2, 12, 18, 0, 4, 0}
+#define NXFONT_BITMAP_192 {0x18, 0x0, 0xc, 0x0, 0x6, 0x0, 0x0, 0x0, 0x6, 0x0, 0x6, 0x0, 0xf, 0x0, 0xf, 0x0, 0x19, 0x80, 0x19, 0x80, 0x30, 0xc0, 0x30, 0xc0, 0x3f, 0xc0, 0x7f, 0xe0, 0x60, 0x60, 0x60, 0x60, 0xc0, 0x30, 0xc0, 0x30}
+
+/* Aacute (193) */
+#define NXFONT_METRICS_193 {2, 12, 18, 0, 4, 0}
+#define NXFONT_BITMAP_193 {0x1, 0x80, 0x3, 0x0, 0x6, 0x0, 0x0, 0x0, 0x6, 0x0, 0x6, 0x0, 0xf, 0x0, 0xf, 0x0, 0x19, 0x80, 0x19, 0x80, 0x30, 0xc0, 0x30, 0xc0, 0x3f, 0xc0, 0x7f, 0xe0, 0x60, 0x60, 0x60, 0x60, 0xc0, 0x30, 0xc0, 0x30}
+
+/* Acircumflex (194) */
+#define NXFONT_METRICS_194 {2, 12, 18, 0, 4, 0}
+#define NXFONT_BITMAP_194 {0x6, 0x0, 0xf, 0x0, 0x19, 0x80, 0x0, 0x0, 0x6, 0x0, 0x6, 0x0, 0xf, 0x0, 0xf, 0x0, 0x19, 0x80, 0x19, 0x80, 0x30, 0xc0, 0x30, 0xc0, 0x3f, 0xc0, 0x7f, 0xe0, 0x60, 0x60, 0x60, 0x60, 0xc0, 0x30, 0xc0, 0x30}
+
+/* Atilde (195) */
+#define NXFONT_METRICS_195 {2, 12, 18, 0, 4, 0}
+#define NXFONT_BITMAP_195 {0xc, 0x80, 0x16, 0x80, 0x13, 0x0, 0x0, 0x0, 0x6, 0x0, 0x6, 0x0, 0xf, 0x0, 0xf, 0x0, 0x19, 0x80, 0x19, 0x80, 0x30, 0xc0, 0x30, 0xc0, 0x3f, 0xc0, 0x7f, 0xe0, 0x60, 0x60, 0x60, 0x60, 0xc0, 0x30, 0xc0, 0x30}
+
+/* Adieresis (196) */
+#define NXFONT_METRICS_196 {2, 12, 17, 0, 5, 0}
+#define NXFONT_BITMAP_196 {0x19, 0x80, 0x19, 0x80, 0x0, 0x0, 0x6, 0x0, 0x6, 0x0, 0xf, 0x0, 0xf, 0x0, 0x19, 0x80, 0x19, 0x80, 0x30, 0xc0, 0x30, 0xc0, 0x3f, 0xc0, 0x7f, 0xe0, 0x60, 0x60, 0x60, 0x60, 0xc0, 0x30, 0xc0, 0x30}
+
+/* Aring (197) */
+#define NXFONT_METRICS_197 {2, 12, 17, 0, 5, 0}
+#define NXFONT_BITMAP_197 {0x6, 0x0, 0x9, 0x0, 0x9, 0x0, 0x6, 0x0, 0x6, 0x0, 0xf, 0x0, 0xf, 0x0, 0x19, 0x80, 0x19, 0x80, 0x30, 0xc0, 0x30, 0xc0, 0x3f, 0xc0, 0x7f, 0xe0, 0x60, 0x60, 0x60, 0x60, 0xc0, 0x30, 0xc0, 0x30}
+
+/* AE (198) */
+#define NXFONT_METRICS_198 {2, 16, 14, 1, 8, 0}
+#define NXFONT_BITMAP_198 {0x7, 0xff, 0x7, 0xff, 0xd, 0x80, 0xd, 0x80, 0x19, 0x80, 0x19, 0x80, 0x31, 0xfe, 0x31, 0xfe, 0x3f, 0x80, 0x7f, 0x80, 0x61, 0x80, 0x61, 0x80, 0xc1, 0xff, 0xc1, 0xff}
+
+/* Ccedilla (199) */
+#define NXFONT_METRICS_199 {2, 12, 18, 1, 8, 0}
+#define NXFONT_BITMAP_199 {0xf, 0x80, 0x3f, 0xe0, 0x70, 0x70, 0x60, 0x30, 0xe0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xe0, 0x0, 0x60, 0x30, 0x70, 0x70, 0x3f, 0xe0, 0xf, 0x80, 0x6, 0x0, 0x3, 0x0, 0x1b, 0x0, 0x1e, 0x0}
+
+/* Egrave (200) */
+#define NXFONT_METRICS_200 {2, 10, 18, 2, 4, 0}
+#define NXFONT_BITMAP_200 {0x30, 0x0, 0x18, 0x0, 0xc, 0x0, 0x0, 0x0, 0xff, 0xc0, 0xff, 0xc0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xff, 0x80, 0xff, 0x80, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xff, 0xc0, 0xff, 0xc0}
+
+/* Eacute (201) */
+#define NXFONT_METRICS_201 {2, 10, 18, 2, 4, 0}
+#define NXFONT_BITMAP_201 {0x3, 0x0, 0x6, 0x0, 0xc, 0x0, 0x0, 0x0, 0xff, 0xc0, 0xff, 0xc0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xff, 0x80, 0xff, 0x80, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xff, 0xc0, 0xff, 0xc0}
+
+/* Ecircumflex (202) */
+#define NXFONT_METRICS_202 {2, 10, 18, 2, 4, 0}
+#define NXFONT_BITMAP_202 {0xc, 0x0, 0x1e, 0x0, 0x33, 0x0, 0x0, 0x0, 0xff, 0xc0, 0xff, 0xc0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xff, 0x80, 0xff, 0x80, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xff, 0xc0, 0xff, 0xc0}
+
+/* Edieresis (203) */
+#define NXFONT_METRICS_203 {2, 10, 17, 2, 5, 0}
+#define NXFONT_BITMAP_203 {0x33, 0x0, 0x33, 0x0, 0x0, 0x0, 0xff, 0xc0, 0xff, 0xc0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xff, 0x80, 0xff, 0x80, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xff, 0xc0, 0xff, 0xc0}
+
+/* Igrave (204) */
+#define NXFONT_METRICS_204 {1, 4, 18, 0, 4, 0}
+#define NXFONT_BITMAP_204 {0xc0, 0x60, 0x30, 0x0, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30}
+
+/* Iacute (205) */
+#define NXFONT_METRICS_205 {1, 4, 18, 2, 4, 0}
+#define NXFONT_BITMAP_205 {0x30, 0x60, 0xc0, 0x0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* Icircumflex (206) */
+#define NXFONT_METRICS_206 {1, 6, 18, 0, 4, 0}
+#define NXFONT_BITMAP_206 {0x30, 0x78, 0x84, 0x0, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30}
+
+/* Idieresis (207) */
+#define NXFONT_METRICS_207 {1, 6, 17, 0, 5, 0}
+#define NXFONT_BITMAP_207 {0xcc, 0xcc, 0x0, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30}
+
+/* Eth (208) -- NOTE: Xoffset should be -1, not 0. */
+#define NXFONT_METRICS_208 {2, 14, 14, 0, 8, 0}
+#define NXFONT_BITMAP_208 {0x3f, 0xe0, 0x3f, 0xf0, 0x30, 0x38, 0x30, 0x18, 0x30, 0xc, 0x30, 0xc, 0xfe, 0xc, 0xfe, 0xc, 0x30, 0xc, 0x30, 0xc, 0x30, 0x18, 0x30, 0x38, 0x3f, 0xf0, 0x3f, 0xe0}
+
+/* Ntilde (209) */
+#define NXFONT_METRICS_209 {2, 11, 18, 1, 4, 0}
+#define NXFONT_BITMAP_209 {0xc, 0x80, 0x16, 0x80, 0x13, 0x0, 0x0, 0x0, 0xc0, 0x60, 0xe0, 0x60, 0xf0, 0x60, 0xf0, 0x60, 0xd8, 0x60, 0xcc, 0x60, 0xcc, 0x60, 0xc6, 0x60, 0xc6, 0x60, 0xc3, 0x60, 0xc1, 0xe0, 0xc1, 0xe0, 0xc0, 0xe0, 0xc0, 0x60}
+
+/* Ograve (210) */
+#define NXFONT_METRICS_210 {2, 13, 18, 1, 4, 0}
+#define NXFONT_BITMAP_210 {0x18, 0x0, 0xc, 0x0, 0x6, 0x0, 0x0, 0x0, 0xf, 0x80, 0x3f, 0xe0, 0x70, 0x70, 0x60, 0x30, 0xe0, 0x38, 0xc0, 0x18, 0xc0, 0x18, 0xc0, 0x18, 0xc0, 0x18, 0xe0, 0x38, 0x60, 0x30, 0x70, 0x70, 0x3f, 0xe0, 0xf, 0x80}
+
+/* Oacute (211) */
+#define NXFONT_METRICS_211 {2, 13, 18, 1, 4, 0}
+#define NXFONT_BITMAP_211 {0x1, 0x80, 0x3, 0x0, 0x6, 0x0, 0x0, 0x0, 0xf, 0x80, 0x3f, 0xe0, 0x70, 0x70, 0x60, 0x30, 0xe0, 0x38, 0xc0, 0x18, 0xc0, 0x18, 0xc0, 0x18, 0xc0, 0x18, 0xe0, 0x38, 0x60, 0x30, 0x70, 0x70, 0x3f, 0xe0, 0xf, 0x80}
+
+/* Ocircumflex (212) */
+#define NXFONT_METRICS_212 {2, 13, 18, 1, 4, 0}
+#define NXFONT_BITMAP_212 {0x3, 0x0, 0x7, 0x80, 0xc, 0xc0, 0x0, 0x0, 0xf, 0x80, 0x3f, 0xe0, 0x70, 0x70, 0x60, 0x30, 0xe0, 0x38, 0xc0, 0x18, 0xc0, 0x18, 0xc0, 0x18, 0xc0, 0x18, 0xe0, 0x38, 0x60, 0x30, 0x70, 0x70, 0x3f, 0xe0, 0xf, 0x80}
+
+/* Otilde (213) */
+#define NXFONT_METRICS_213 {2, 13, 18, 1, 4, 0}
+#define NXFONT_BITMAP_213 {0x6, 0x40, 0xb, 0x40, 0x9, 0x80, 0x0, 0x0, 0xf, 0x80, 0x3f, 0xe0, 0x70, 0x70, 0x60, 0x30, 0xe0, 0x38, 0xc0, 0x18, 0xc0, 0x18, 0xc0, 0x18, 0xc0, 0x18, 0xe0, 0x38, 0x60, 0x30, 0x70, 0x70, 0x3f, 0xe0, 0xf, 0x80}
+
+/* Odieresis (214) */
+#define NXFONT_METRICS_214 {2, 13, 17, 1, 5, 0}
+#define NXFONT_BITMAP_214 {0xc, 0xc0, 0xc, 0xc0, 0x0, 0x0, 0xf, 0x80, 0x3f, 0xe0, 0x70, 0x70, 0x60, 0x30, 0xe0, 0x38, 0xc0, 0x18, 0xc0, 0x18, 0xc0, 0x18, 0xc0, 0x18, 0xe0, 0x38, 0x60, 0x30, 0x70, 0x70, 0x3f, 0xe0, 0xf, 0x80}
+
+/* multiply (215) */
+#define NXFONT_METRICS_215 {2, 10, 9, 0, 13, 0}
+#define NXFONT_BITMAP_215 {0xc0, 0xc0, 0x61, 0x80, 0x33, 0x0, 0x1e, 0x0, 0xc, 0x0, 0x1e, 0x0, 0x33, 0x0, 0x61, 0x80, 0xc0, 0xc0}
+
+/* Oslash (216) */
+#define NXFONT_METRICS_216 {2, 14, 14, 0, 8, 0}
+#define NXFONT_BITMAP_216 {0x7, 0xcc, 0x1f, 0xf8, 0x38, 0x30, 0x30, 0x78, 0x70, 0xdc, 0x61, 0x8c, 0x63, 0xc, 0x62, 0xc, 0x66, 0xc, 0x6c, 0x1c, 0x38, 0x18, 0x38, 0x38, 0x6f, 0xf0, 0xc7, 0xc0}
+
+/* Ugrave (217) */
+#define NXFONT_METRICS_217 {2, 11, 18, 1, 4, 0}
+#define NXFONT_BITMAP_217 {0x18, 0x0, 0xc, 0x0, 0x6, 0x0, 0x0, 0x0, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0x60, 0xc0, 0x7f, 0xc0, 0x1f, 0x0}
+
+/* Uacute (218) */
+#define NXFONT_METRICS_218 {2, 11, 18, 1, 4, 0}
+#define NXFONT_BITMAP_218 {0x3, 0x0, 0x6, 0x0, 0xc, 0x0, 0x0, 0x0, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0x60, 0xc0, 0x7f, 0xc0, 0x1f, 0x0}
+
+/* Ucircumflex (219) */
+#define NXFONT_METRICS_219 {2, 11, 18, 1, 4, 0}
+#define NXFONT_BITMAP_219 {0x6, 0x0, 0xf, 0x0, 0x19, 0x80, 0x0, 0x0, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0x60, 0xc0, 0x7f, 0xc0, 0x1f, 0x0}
+
+/* Udieresis (220) */
+#define NXFONT_METRICS_220 {2, 11, 17, 1, 5, 0}
+#define NXFONT_BITMAP_220 {0x31, 0x80, 0x31, 0x80, 0x0, 0x0, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0x60, 0xc0, 0x7f, 0xc0, 0x1f, 0x0}
+
+/* Yacute (221) */
+#define NXFONT_METRICS_221 {2, 12, 18, 0, 4, 0}
+#define NXFONT_BITMAP_221 {0x1, 0x80, 0x3, 0x0, 0x6, 0x0, 0x0, 0x0, 0xc0, 0x30, 0xc0, 0x30, 0x60, 0x60, 0x60, 0x60, 0x30, 0xc0, 0x39, 0xc0, 0x19, 0x80, 0xf, 0x0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0}
+
+/* Thorn (222) */
+#define NXFONT_METRICS_222 {2, 10, 14, 1, 8, 0}
+#define NXFONT_BITMAP_222 {0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xff, 0x0, 0xff, 0x80, 0xc1, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc1, 0xc0, 0xff, 0x80, 0xff, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0}
+
+/* germandbls (223) */
+#define NXFONT_METRICS_223 {1, 7, 14, 1, 8, 0}
+#define NXFONT_BITMAP_223 {0x38, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xdc, 0xdc, 0xc6, 0xc6, 0xc6, 0xc6, 0xde, 0xdc}
+
+/* agrave (224) */
+#define NXFONT_METRICS_224 {2, 9, 14, 1, 8, 0}
+#define NXFONT_BITMAP_224 {0x30, 0x0, 0x18, 0x0, 0xc, 0x0, 0x0, 0x0, 0x7e, 0x0, 0xe7, 0x0, 0xc3, 0x0, 0x7, 0x0, 0x7f, 0x0, 0xe3, 0x0, 0xc3, 0x0, 0xc3, 0x0, 0xe7, 0x80, 0x79, 0x80}
+
+/* aacute (225) */
+#define NXFONT_METRICS_225 {2, 9, 14, 1, 8, 0}
+#define NXFONT_BITMAP_225 {0xc, 0x0, 0x18, 0x0, 0x30, 0x0, 0x0, 0x0, 0x7e, 0x0, 0xe7, 0x0, 0xc3, 0x0, 0x7, 0x0, 0x7f, 0x0, 0xe3, 0x0, 0xc3, 0x0, 0xc3, 0x0, 0xe7, 0x80, 0x79, 0x80}
+
+/* acircumflex (226) */
+#define NXFONT_METRICS_226 {2, 9, 14, 1, 8, 0}
+#define NXFONT_BITMAP_226 {0x18, 0x0, 0x3c, 0x0, 0x66, 0x0, 0x0, 0x0, 0x7e, 0x0, 0xe7, 0x0, 0xc3, 0x0, 0x7, 0x0, 0x7f, 0x0, 0xe3, 0x0, 0xc3, 0x0, 0xc3, 0x0, 0xe7, 0x80, 0x79, 0x80}
+
+/* atilde (227) */
+#define NXFONT_METRICS_227 {2, 9, 14, 1, 8, 0}
+#define NXFONT_BITMAP_227 {0x32, 0x0, 0x5a, 0x0, 0x4c, 0x0, 0x0, 0x0, 0x7e, 0x0, 0xe7, 0x0, 0xc3, 0x0, 0x7, 0x0, 0x7f, 0x0, 0xe3, 0x0, 0xc3, 0x0, 0xc3, 0x0, 0xe7, 0x80, 0x79, 0x80}
+
+/* adieresis (228) */
+#define NXFONT_METRICS_228 {2, 9, 14, 1, 8, 0}
+#define NXFONT_BITMAP_228 {0x66, 0x0, 0x66, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7e, 0x0, 0xe7, 0x0, 0xc3, 0x0, 0x7, 0x0, 0x7f, 0x0, 0xe3, 0x0, 0xc3, 0x0, 0xc3, 0x0, 0xe7, 0x80, 0x79, 0x80}
+
+/* aring (229) */
+#define NXFONT_METRICS_229 {2, 9, 14, 1, 8, 0}
+#define NXFONT_BITMAP_229 {0x18, 0x0, 0x24, 0x0, 0x24, 0x0, 0x18, 0x0, 0x7e, 0x0, 0xe7, 0x0, 0xc3, 0x0, 0x7, 0x0, 0x7f, 0x0, 0xe3, 0x0, 0xc3, 0x0, 0xc3, 0x0, 0xe7, 0x80, 0x79, 0x80}
+
+/* ae (230) */
+#define NXFONT_METRICS_230 {2, 14, 10, 2, 12, 0}
+#define NXFONT_BITMAP_230 {0x7e, 0xf0, 0xe7, 0xf8, 0xc3, 0xc, 0x7, 0xc, 0x7f, 0xfc, 0xe3, 0x0, 0xc3, 0x0, 0xc3, 0x8c, 0xe7, 0xfc, 0x7a, 0xf0}
+
+/* ccedilla (231) */
+#define NXFONT_METRICS_231 {1, 8, 14, 1, 12, 0}
+#define NXFONT_BITMAP_231 {0x3e, 0x7f, 0x63, 0xc0, 0xc0, 0xc0, 0xc0, 0x63, 0x7f, 0x3e, 0x18, 0xc, 0x6c, 0x78}
+
+/* egrave (232) */
+#define NXFONT_METRICS_232 {1, 8, 14, 1, 8, 0}
+#define NXFONT_BITMAP_232 {0x30, 0x18, 0xc, 0x0, 0x3c, 0x7e, 0xc3, 0xc3, 0xff, 0xc0, 0xc0, 0xe3, 0x7f, 0x3c}
+
+/* eacute (233) */
+#define NXFONT_METRICS_233 {1, 8, 14, 1, 8, 0}
+#define NXFONT_BITMAP_233 {0xc, 0x18, 0x30, 0x0, 0x3c, 0x7e, 0xc3, 0xc3, 0xff, 0xc0, 0xc0, 0xe3, 0x7f, 0x3c}
+
+/* ecircumflex (234) */
+#define NXFONT_METRICS_234 {1, 8, 14, 1, 8, 0}
+#define NXFONT_BITMAP_234 {0x18, 0x3c, 0x66, 0x0, 0x3c, 0x7e, 0xc3, 0xc3, 0xff, 0xc0, 0xc0, 0xe3, 0x7f, 0x3c}
+
+/* edieresis (235) */
+#define NXFONT_METRICS_235 {1, 8, 14, 1, 8, 0}
+#define NXFONT_BITMAP_235 {0x66, 0x66, 0x0, 0x0, 0x3c, 0x7e, 0xc3, 0xc3, 0xff, 0xc0, 0xc0, 0xe3, 0x7f, 0x3c}
+
+/* igrave (236) */
+#define NXFONT_METRICS_236 {1, 4, 14, 0, 8, 0}
+#define NXFONT_BITMAP_236 {0xc0, 0x60, 0x30, 0x0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60}
+
+/* iacute (237) */
+#define NXFONT_METRICS_237 {1, 4, 14, 0, 8, 0}
+#define NXFONT_BITMAP_237 {0x30, 0x60, 0xc0, 0x0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60}
+
+/* icircumflex (238) -- NOTE: Xoffset should be -1, not 0. */
+#define NXFONT_METRICS_238 {1, 6, 14, 0, 8, 0}
+#define NXFONT_BITMAP_238 {0x30, 0x78, 0xcc, 0x0, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30}
+
+/* idieresis (239) */
+#define NXFONT_METRICS_239 {1, 5, 14, 0, 8, 0}
+#define NXFONT_BITMAP_239 {0xd8, 0xd8, 0x0, 0x0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60}
+
+/* eth (240) */
+#define NXFONT_METRICS_240 {2, 9, 14, 1, 8, 0}
+#define NXFONT_BITMAP_240 {0x60, 0x0, 0x36, 0x0, 0x38, 0x0, 0x4c, 0x0, 0x3e, 0x0, 0x7f, 0x0, 0x63, 0x0, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0x63, 0x0, 0x7f, 0x0, 0x3e, 0x0}
+
+/* ntilde (241) */
+#define NXFONT_METRICS_241 {1, 8, 14, 1, 8, 0}
+#define NXFONT_BITMAP_241 {0x32, 0x5a, 0x4c, 0x0, 0xde, 0xff, 0xe3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3}
+
+/* ograve (242) */
+#define NXFONT_METRICS_242 {2, 9, 14, 1, 8, 0}
+#define NXFONT_BITMAP_242 {0x30, 0x0, 0x18, 0x0, 0xc, 0x0, 0x0, 0x0, 0x3e, 0x0, 0x7f, 0x0, 0x63, 0x0, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0x63, 0x0, 0x7f, 0x0, 0x3e, 0x0}
+
+/* oacute (243) */
+#define NXFONT_METRICS_243 {2, 9, 14, 1, 8, 0}
+#define NXFONT_BITMAP_243 {0x6, 0x0, 0xc, 0x0, 0x18, 0x0, 0x0, 0x0, 0x3e, 0x0, 0x7f, 0x0, 0x63, 0x0, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0x63, 0x0, 0x7f, 0x0, 0x3e, 0x0}
+
+/* ocircumflex (244) */
+#define NXFONT_METRICS_244 {2, 9, 14, 1, 8, 0}
+#define NXFONT_BITMAP_244 {0x18, 0x0, 0x3c, 0x0, 0x66, 0x0, 0x0, 0x0, 0x3e, 0x0, 0x7f, 0x0, 0x63, 0x0, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0x63, 0x0, 0x7f, 0x0, 0x3e, 0x0}
+
+/* otilde (245) */
+#define NXFONT_METRICS_245 {2, 9, 14, 1, 8, 0}
+#define NXFONT_BITMAP_245 {0x32, 0x0, 0x5a, 0x0, 0x4c, 0x0, 0x0, 0x0, 0x3e, 0x0, 0x7f, 0x0, 0x63, 0x0, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0x63, 0x0, 0x7f, 0x0, 0x3e, 0x0}
+
+/* odieresis (246) */
+#define NXFONT_METRICS_246 {2, 9, 14, 1, 8, 0}
+#define NXFONT_BITMAP_246 {0x33, 0x0, 0x33, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e, 0x0, 0x7f, 0x0, 0x63, 0x0, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0x63, 0x0, 0x7f, 0x0, 0x3e, 0x0}
+
+/* divide (247) */
+#define NXFONT_METRICS_247 {1, 8, 8, 1, 13, 0}
+#define NXFONT_BITMAP_247 {0x18, 0x18, 0x0, 0xff, 0xff, 0x0, 0x18, 0x18}
+
+/* oslash (248) */
+#define NXFONT_METRICS_248 {2, 11, 10, 0, 12, 0}
+#define NXFONT_BITMAP_248 {0xe, 0x60, 0x3f, 0xc0, 0x31, 0x80, 0x63, 0xc0, 0x66, 0xc0, 0x6c, 0xc0, 0x78, 0xc0, 0x31, 0x80, 0x7f, 0x80, 0xce, 0x0}
+
+/* ugrave (249) */
+#define NXFONT_METRICS_249 {1, 8, 14, 1, 8, 0}
+#define NXFONT_BITMAP_249 {0x30, 0x18, 0xc, 0x0, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc7, 0xff, 0x7b}
+
+/* uacute (250) */
+#define NXFONT_METRICS_250 {1, 8, 14, 1, 8, 0}
+#define NXFONT_BITMAP_250 {0x6, 0xc, 0x18, 0x0, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc7, 0xff, 0x7b}
+
+/* ucircumflex (251) */
+#define NXFONT_METRICS_251 {1, 8, 14, 1, 8, 0}
+#define NXFONT_BITMAP_251 {0x18, 0x3c, 0x66, 0x0, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc7, 0xff, 0x7b}
+
+/* udieresis (252) */
+#define NXFONT_METRICS_252 {1, 8, 14, 1, 8, 0}
+#define NXFONT_BITMAP_252 {0x66, 0x66, 0x0, 0x0, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc7, 0xff, 0x7b}
+
+/* yacute (253) */
+#define NXFONT_METRICS_253 {1, 8, 18, 1, 8, 0}
+#define NXFONT_BITMAP_253 {0x6, 0xc, 0x18, 0x0, 0xc3, 0xc3, 0xc3, 0x66, 0x66, 0x66, 0x24, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x70, 0x70}
+
+/* thorn (254) */
+#define NXFONT_METRICS_254 {2, 9, 18, 1, 8, 0}
+#define NXFONT_BITMAP_254 {0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xde, 0x0, 0xff, 0x0, 0xe3, 0x0, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xe3, 0x0, 0xff, 0x0, 0xde, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0}
+
+/* ydieresis (255) */
+#define NXFONT_METRICS_255 {1, 8, 18, 1, 8, 0}
+#define NXFONT_BITMAP_255 {0x66, 0x66, 0x0, 0x0, 0xc3, 0xc3, 0xc3, 0x66, 0x66, 0x66, 0x24, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x70, 0x70}
+
+/****************************************************************************
+ * Public Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+#define EXTERN extern "C"
+extern "C" {
+#else
+#define EXTERN extern
+#endif
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* __GRAPHICS_NXFONTS_NXFONTS_SANS22X29_H */
diff --git a/nuttx/graphics/nxfonts/nxfonts_sans22x29b.h b/nuttx/graphics/nxfonts/nxfonts_sans22x29b.h
new file mode 100644
index 000000000..c2e29bff0
--- /dev/null
+++ b/nuttx/graphics/nxfonts/nxfonts_sans22x29b.h
@@ -0,0 +1,849 @@
+/****************************************************************************
+ * graphics/nxfonts/nxfonts_sans22x29b.h
+ *
+ * Copyright (C) 2011-2012 NX Engineering, S.A., All rights reserved.
+ * Author: Jose Pablo Carballo Gomez <jcarballo@nx-engineering.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT}
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING}
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+#ifndef __GRAPHICS_NXFONTS_NXFONTS_SANS22X29B_H
+#define __GRAPHICS_NXFONTS_NXFONTS_SANS22X29B_H
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/* Font ID */
+
+#define NXFONT_ID FONTID_SANS22X29B
+
+/* Ranges of 7-bit and 8-bit fonts */
+
+#define NXFONT_MIN7BIT 33
+#define NXFONT_MAX7BIT 126
+
+#define NXFONT_MIN8BIT 161
+#define NXFONT_MAX8BIT 255
+
+/* Maximum height and width of any glyph in the set */
+
+#define NXFONT_MAXHEIGHT 29
+#define NXFONT_MAXWIDTH 22
+
+/* The width of a space */
+
+#define NXFONT_SPACEWIDTH 5
+
+/* exclam (33) */
+#define NXFONT_METRICS_33 {1, 3, 14, 1, 8, 0}
+#define NXFONT_BITMAP_33 {0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xc0, 0xc0, 0x0, 0xe0, 0xe0, 0xe0}
+
+/* quotedbl (34) */
+#define NXFONT_METRICS_34 {1, 5, 5, 1, 8, 0}
+#define NXFONT_BITMAP_34 {0xd8, 0xd8, 0xd8, 0xd8, 0x90}
+
+/* numbersign (35) */
+#define NXFONT_METRICS_35 {2, 11, 13, 0, 9, 0}
+#define NXFONT_BITMAP_35 {0xd, 0x80, 0xd, 0x80, 0xd, 0x80, 0x7f, 0xe0, 0x7f, 0xe0, 0x1b, 0x0, 0x1b, 0x0, 0x1b, 0x0, 0xff, 0xc0, 0xff, 0xc0, 0x36, 0x0, 0x36, 0x0, 0x36, 0x0}
+
+/* dollar (36) */
+#define NXFONT_METRICS_36 {2, 10, 16, 0, 8, 0}
+#define NXFONT_BITMAP_36 {0x4, 0x0, 0x3f, 0x0, 0x7f, 0x80, 0xe5, 0x80, 0xe4, 0x0, 0xe4, 0x0, 0x7c, 0x0, 0x3f, 0x0, 0xf, 0x80, 0x9, 0xc0, 0xe9, 0xc0, 0xe9, 0xc0, 0x7f, 0x80, 0x3f, 0x0, 0x8, 0x0, 0x8, 0x0}
+
+/* percent (37) */
+#define NXFONT_METRICS_37 {2, 13, 13, 1, 9, 0}
+#define NXFONT_BITMAP_37 {0x78, 0x60, 0xfc, 0x60, 0xcc, 0xc0, 0xcc, 0x80, 0xfd, 0x80, 0x7b, 0x0, 0x2, 0x0, 0x6, 0xf0, 0xd, 0xf8, 0x9, 0x98, 0x19, 0x98, 0x31, 0xf8, 0x30, 0xf0}
+
+/* ampersand (38) */
+#define NXFONT_METRICS_38 {2, 13, 14, 1, 8, 0}
+#define NXFONT_BITMAP_38 {0x1e, 0x0, 0x3f, 0x0, 0x73, 0x80, 0x61, 0x80, 0x73, 0x0, 0x3e, 0x0, 0x1c, 0x60, 0x7e, 0x60, 0xe7, 0xe0, 0xc3, 0xc0, 0xc1, 0xc0, 0xe3, 0xe0, 0x7f, 0x70, 0x3e, 0x38}
+
+/* quotesingle (39) */
+#define NXFONT_METRICS_39 {1, 2, 5, 1, 8, 0}
+#define NXFONT_BITMAP_39 {0xc0, 0xc0, 0xc0, 0xc0, 0x80}
+
+/* parenleft (40) */
+#define NXFONT_METRICS_40 {1, 6, 18, 1, 8, 0}
+#define NXFONT_BITMAP_40 {0x1c, 0x38, 0x30, 0x70, 0x60, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0x60, 0x70, 0x30, 0x38, 0x1c}
+
+/* parenright (41) */
+#define NXFONT_METRICS_41 {1, 6, 18, 0, 8, 0}
+#define NXFONT_BITMAP_41 {0xe0, 0x70, 0x30, 0x38, 0x18, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x18, 0x38, 0x30, 0x70, 0xe0}
+
+/* asterisk (42) */
+#define NXFONT_METRICS_42 {1, 7, 6, 1, 8, 0}
+#define NXFONT_BITMAP_42 {0x10, 0xd6, 0x7c, 0x38, 0x6c, 0x44}
+
+/* plus (43) */
+#define NXFONT_METRICS_43 {1, 8, 8, 1, 13, 0}
+#define NXFONT_BITMAP_43 {0x18, 0x18, 0x18, 0xff, 0xff, 0x18, 0x18, 0x18}
+
+/* comma (44) */
+#define NXFONT_METRICS_44 {1, 3, 6, 1, 19, 0}
+#define NXFONT_BITMAP_44 {0xe0, 0xe0, 0xe0, 0x60, 0xc0, 0x80}
+
+/* hyphen (45) */
+#define NXFONT_METRICS_45 {1, 5, 3, 0, 15, 0}
+#define NXFONT_BITMAP_45 {0xf8, 0xf8, 0xf8}
+
+/* period (46) */
+#define NXFONT_METRICS_46 {1, 3, 3, 1, 19, 0}
+#define NXFONT_BITMAP_46 {0xe0, 0xe0, 0xe0}
+
+/* slash (47) */
+#define NXFONT_METRICS_47 {1, 5, 14, 0, 8, 0}
+#define NXFONT_BITMAP_47 {0x18, 0x18, 0x18, 0x38, 0x30, 0x30, 0x30, 0x70, 0x60, 0x60, 0xe0, 0xc0, 0xc0, 0xc0}
+
+/* zero (48) */
+#define NXFONT_METRICS_48 {2, 9, 13, 0, 9, 0}
+#define NXFONT_BITMAP_48 {0x1c, 0x0, 0x7f, 0x0, 0x77, 0x0, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0x77, 0x0, 0x7f, 0x0, 0x1c, 0x0}
+
+/* one (49) */
+#define NXFONT_METRICS_49 {1, 6, 13, 1, 9, 0}
+#define NXFONT_BITMAP_49 {0x1c, 0x3c, 0xfc, 0xfc, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}
+
+/* two (50) */
+#define NXFONT_METRICS_50 {2, 9, 13, 0, 9, 0}
+#define NXFONT_BITMAP_50 {0x3e, 0x0, 0x7f, 0x0, 0xe3, 0x80, 0xe3, 0x80, 0x3, 0x80, 0x7, 0x0, 0x1f, 0x0, 0x3e, 0x0, 0x78, 0x0, 0x70, 0x0, 0xe0, 0x0, 0xff, 0x80, 0xff, 0x80}
+
+/* three (51) */
+#define NXFONT_METRICS_51 {2, 9, 13, 0, 9, 0}
+#define NXFONT_BITMAP_51 {0x3e, 0x0, 0x7f, 0x0, 0xe7, 0x0, 0xe3, 0x0, 0x7, 0x0, 0x1e, 0x0, 0x1f, 0x0, 0x7, 0x80, 0x3, 0x80, 0xe3, 0x80, 0xe7, 0x80, 0x7f, 0x0, 0x3e, 0x0}
+
+/* four (52) */
+#define NXFONT_METRICS_52 {2, 9, 13, 0, 9, 0}
+#define NXFONT_BITMAP_52 {0x7, 0x0, 0xf, 0x0, 0x1f, 0x0, 0x3f, 0x0, 0x37, 0x0, 0x77, 0x0, 0x67, 0x0, 0xe7, 0x0, 0xff, 0x80, 0xff, 0x80, 0x7, 0x0, 0x7, 0x0, 0x7, 0x0}
+
+/* five (53) */
+#define NXFONT_METRICS_53 {2, 9, 13, 0, 9, 0}
+#define NXFONT_BITMAP_53 {0xff, 0x0, 0xff, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xfe, 0x0, 0xff, 0x0, 0xe7, 0x80, 0x3, 0x80, 0x3, 0x80, 0xe3, 0x80, 0xe7, 0x80, 0xff, 0x0, 0x7e, 0x0}
+
+/* six (54) */
+#define NXFONT_METRICS_54 {2, 9, 13, 0, 9, 0}
+#define NXFONT_BITMAP_54 {0x3f, 0x0, 0x7f, 0x80, 0x71, 0x80, 0xe0, 0x0, 0xee, 0x0, 0xff, 0x0, 0xf3, 0x80, 0xe1, 0x80, 0xe1, 0x80, 0xe1, 0x80, 0xf3, 0x80, 0x7f, 0x0, 0x3e, 0x0}
+
+/* seven (55) */
+#define NXFONT_METRICS_55 {2, 9, 13, 0, 9, 0}
+#define NXFONT_BITMAP_55 {0xff, 0x80, 0xff, 0x80, 0x3, 0x80, 0x7, 0x0, 0xe, 0x0, 0xe, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x38, 0x0, 0x38, 0x0, 0x70, 0x0, 0x70, 0x0, 0x70, 0x0}
+
+/* eight (56) */
+#define NXFONT_METRICS_56 {2, 9, 13, 0, 9, 0}
+#define NXFONT_BITMAP_56 {0x3e, 0x0, 0x7f, 0x0, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0x7f, 0x0, 0x3e, 0x0, 0x77, 0x0, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0x7f, 0x0, 0x3e, 0x0}
+
+/* nine (57) */
+#define NXFONT_METRICS_57 {2, 9, 13, 0, 9, 0}
+#define NXFONT_BITMAP_57 {0x3e, 0x0, 0x7f, 0x0, 0xe7, 0x80, 0xc3, 0x80, 0xc3, 0x80, 0xc3, 0x80, 0xe7, 0x80, 0x7f, 0x80, 0x3b, 0x80, 0x3, 0x80, 0xc7, 0x0, 0xff, 0x0, 0x7e, 0x0}
+
+/* colon (58) */
+#define NXFONT_METRICS_58 {1, 3, 10, 1, 12, 0}
+#define NXFONT_BITMAP_58 {0xe0, 0xe0, 0xe0, 0x0, 0x0, 0x0, 0x0, 0xe0, 0xe0, 0xe0}
+
+/* semicolon (59) */
+#define NXFONT_METRICS_59 {1, 3, 13, 1, 12, 0}
+#define NXFONT_BITMAP_59 {0xe0, 0xe0, 0xe0, 0x0, 0x0, 0x0, 0x0, 0xe0, 0xe0, 0xe0, 0x60, 0xc0, 0x80}
+
+/* less (60) */
+#define NXFONT_METRICS_60 {2, 9, 9, 1, 13, 0}
+#define NXFONT_BITMAP_60 {0x3, 0x80, 0xf, 0x80, 0x3e, 0x0, 0x78, 0x0, 0xe0, 0x0, 0x78, 0x0, 0x3e, 0x0, 0xf, 0x80, 0x3, 0x80}
+
+/* equal (61) */
+#define NXFONT_METRICS_61 {2, 9, 5, 1, 14, 0}
+#define NXFONT_BITMAP_61 {0xff, 0x80, 0xff, 0x80, 0x0, 0x0, 0xff, 0x80, 0xff, 0x80}
+
+/* greater (62) */
+#define NXFONT_METRICS_62 {2, 9, 9, 1, 13, 0}
+#define NXFONT_BITMAP_62 {0xe0, 0x0, 0xf8, 0x0, 0x3e, 0x0, 0xf, 0x0, 0x3, 0x80, 0xf, 0x0, 0x3e, 0x0, 0xf8, 0x0, 0xe0, 0x0}
+
+/* question (63) */
+#define NXFONT_METRICS_63 {1, 8, 14, 1, 8, 0}
+#define NXFONT_BITMAP_63 {0x7e, 0xff, 0xe7, 0xe7, 0xe, 0x1e, 0x1c, 0x38, 0x38, 0x38, 0x0, 0x38, 0x38, 0x38}
+
+/* at (64) */
+#define NXFONT_METRICS_64 {2, 16, 17, 1, 8, 0}
+#define NXFONT_BITMAP_64 {0x7, 0xf0, 0x1f, 0xfc, 0x3c, 0x1e, 0x70, 0x6, 0x63, 0xb7, 0xe7, 0xf3, 0xc6, 0x63, 0xcc, 0x63, 0xcc, 0xc3, 0xcc, 0xc6, 0xcc, 0xc6, 0xef, 0xfc, 0xe7, 0xb8, 0x70, 0x0, 0x3c, 0x0, 0x1f, 0xf0, 0x7, 0xf0}
+
+/* A (65) */
+#define NXFONT_METRICS_65 {2, 12, 14, 1, 8, 0}
+#define NXFONT_BITMAP_65 {0xf, 0x0, 0xf, 0x0, 0x1f, 0x80, 0x19, 0x80, 0x19, 0x80, 0x39, 0xc0, 0x39, 0xc0, 0x30, 0xc0, 0x70, 0xe0, 0x7f, 0xe0, 0x7f, 0xe0, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70}
+
+/* B (66) */
+#define NXFONT_METRICS_66 {2, 11, 14, 2, 8, 0}
+#define NXFONT_BITMAP_66 {0xfe, 0x0, 0xff, 0x80, 0xe3, 0xc0, 0xe1, 0xc0, 0xe1, 0xc0, 0xe3, 0x80, 0xff, 0x80, 0xff, 0xc0, 0xe1, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe1, 0xe0, 0xff, 0xc0, 0xff, 0x0}
+
+/* C (67) */
+#define NXFONT_METRICS_67 {2, 12, 14, 1, 8, 0}
+#define NXFONT_BITMAP_67 {0xf, 0x80, 0x3f, 0xe0, 0x78, 0xe0, 0x70, 0x70, 0xf0, 0x70, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xf0, 0x70, 0x70, 0x70, 0x78, 0xe0, 0x3f, 0xe0, 0xf, 0x80}
+
+/* D (68) */
+#define NXFONT_METRICS_68 {2, 12, 14, 1, 8, 0}
+#define NXFONT_BITMAP_68 {0xff, 0x0, 0xff, 0xc0, 0xe1, 0xe0, 0xe0, 0xe0, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0xe0, 0xe1, 0xe0, 0xff, 0xc0, 0xff, 0x0}
+
+/* E (69) */
+#define NXFONT_METRICS_69 {2, 10, 14, 2, 8, 0}
+#define NXFONT_BITMAP_69 {0xff, 0xc0, 0xff, 0xc0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xff, 0x80, 0xff, 0x80, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xff, 0xc0, 0xff, 0xc0}
+
+/* F (70) */
+#define NXFONT_METRICS_70 {2, 10, 14, 1, 8, 0}
+#define NXFONT_BITMAP_70 {0xff, 0xc0, 0xff, 0xc0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xff, 0x80, 0xff, 0x80, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0}
+
+/* G (71) */
+#define NXFONT_METRICS_71 {2, 12, 14, 1, 8, 0}
+#define NXFONT_BITMAP_71 {0xf, 0x80, 0x3f, 0xe0, 0x78, 0xe0, 0x70, 0x70, 0xf0, 0x70, 0xe0, 0x0, 0xe0, 0x0, 0xe3, 0xf0, 0xe3, 0xf0, 0xf0, 0x70, 0x70, 0x70, 0x78, 0xf0, 0x3f, 0xf0, 0x1f, 0xb0}
+
+/* H (72) */
+#define NXFONT_METRICS_72 {2, 12, 14, 1, 8, 0}
+#define NXFONT_BITMAP_72 {0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xff, 0xf0, 0xff, 0xf0, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70}
+
+/* I (73) */
+#define NXFONT_METRICS_73 {1, 3, 14, 1, 8, 0}
+#define NXFONT_BITMAP_73 {0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0}
+
+/* J (74) */
+#define NXFONT_METRICS_74 {2, 9, 14, 0, 8, 0}
+#define NXFONT_BITMAP_74 {0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xf7, 0x80, 0x7f, 0x0, 0x3e, 0x0}
+
+/* K (75) */
+#define NXFONT_METRICS_75 {2, 13, 14, 1, 8, 0}
+#define NXFONT_BITMAP_75 {0xe0, 0xf0, 0xe1, 0xe0, 0xe3, 0xc0, 0xe7, 0x80, 0xef, 0x0, 0xfe, 0x0, 0xfc, 0x0, 0xfe, 0x0, 0xef, 0x0, 0xe7, 0x80, 0xe3, 0xc0, 0xe1, 0xe0, 0xe0, 0xf0, 0xe0, 0x78}
+
+/* L (76) */
+#define NXFONT_METRICS_76 {2, 9, 14, 1, 8, 0}
+#define NXFONT_BITMAP_76 {0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xff, 0x80, 0xff, 0x80}
+
+/* M (77) */
+#define NXFONT_METRICS_77 {2, 14, 14, 1, 8, 0}
+#define NXFONT_BITMAP_77 {0xe0, 0x1c, 0xe0, 0x1c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf8, 0x7c, 0xf8, 0x7c, 0xf8, 0x7c, 0xec, 0xdc, 0xec, 0xdc, 0xec, 0xdc, 0xe7, 0x9c, 0xe7, 0x9c, 0xe3, 0x1c, 0xe3, 0x1c}
+
+/* N (78) */
+#define NXFONT_METRICS_78 {2, 12, 14, 1, 8, 0}
+#define NXFONT_BITMAP_78 {0xe0, 0x70, 0xf0, 0x70, 0xf0, 0x70, 0xf8, 0x70, 0xfc, 0x70, 0xec, 0x70, 0xee, 0x70, 0xe6, 0x70, 0xe7, 0x70, 0xe3, 0x70, 0xe1, 0xf0, 0xe1, 0xf0, 0xe0, 0xf0, 0xe0, 0x70}
+
+/* O (79) */
+#define NXFONT_METRICS_79 {2, 13, 14, 1, 8, 0}
+#define NXFONT_BITMAP_79 {0xf, 0x80, 0x3f, 0xe0, 0x78, 0xf0, 0x70, 0x70, 0xf0, 0x78, 0xe0, 0x38, 0xe0, 0x38, 0xe0, 0x38, 0xe0, 0x38, 0xf0, 0x78, 0x70, 0x70, 0x78, 0xf0, 0x3f, 0xe0, 0xf, 0x80}
+
+/* P (80) */
+#define NXFONT_METRICS_80 {2, 11, 14, 1, 8, 0}
+#define NXFONT_BITMAP_80 {0xff, 0x0, 0xff, 0xc0, 0xe1, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe1, 0xe0, 0xff, 0xc0, 0xff, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0}
+
+/* Q (81) */
+#define NXFONT_METRICS_81 {2, 13, 15, 1, 8, 0}
+#define NXFONT_BITMAP_81 {0xf, 0x80, 0x3f, 0xe0, 0x78, 0xf0, 0x70, 0x70, 0xf0, 0x78, 0xe0, 0x38, 0xe0, 0x38, 0xe0, 0x38, 0xe0, 0x38, 0xf3, 0x78, 0x73, 0xf0, 0x79, 0xf0, 0x3f, 0xe0, 0xf, 0xf0, 0x0, 0x30}
+
+/* R (82) */
+#define NXFONT_METRICS_82 {2, 12, 14, 1, 8, 0}
+#define NXFONT_BITMAP_82 {0xff, 0x0, 0xff, 0xc0, 0xe1, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe1, 0xe0, 0xff, 0xc0, 0xff, 0x80, 0xe1, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xf0}
+
+/* S (83) */
+#define NXFONT_METRICS_83 {2, 11, 14, 1, 8, 0}
+#define NXFONT_BITMAP_83 {0x3f, 0x80, 0x7f, 0xc0, 0xf1, 0xe0, 0xe0, 0xe0, 0xf0, 0x0, 0x7e, 0x0, 0x3f, 0x80, 0xf, 0xc0, 0x1, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xf1, 0xe0, 0x7f, 0xc0, 0x3f, 0x80}
+
+/* T (84) */
+#define NXFONT_METRICS_84 {2, 11, 14, 0, 8, 0}
+#define NXFONT_BITMAP_84 {0xff, 0xe0, 0xff, 0xe0, 0xe, 0x0, 0xe, 0x0, 0xe, 0x0, 0xe, 0x0, 0xe, 0x0, 0xe, 0x0, 0xe, 0x0, 0xe, 0x0, 0xe, 0x0, 0xe, 0x0, 0xe, 0x0, 0xe, 0x0}
+
+/* U (85) */
+#define NXFONT_METRICS_85 {2, 12, 14, 1, 8, 0}
+#define NXFONT_BITMAP_85 {0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0x70, 0xe0, 0x7f, 0xe0, 0x1f, 0x80}
+
+/* V (86) */
+#define NXFONT_METRICS_86 {2, 13, 14, 0, 8, 0}
+#define NXFONT_BITMAP_86 {0xe0, 0x38, 0xe0, 0x38, 0x70, 0x70, 0x70, 0x70, 0x30, 0x60, 0x38, 0xe0, 0x38, 0xe0, 0x1d, 0xc0, 0x1d, 0xc0, 0xd, 0x80, 0xf, 0x80, 0xf, 0x80, 0x7, 0x0, 0x7, 0x0}
+
+/* W (87) */
+#define NXFONT_METRICS_87 {2, 15, 14, 1, 8, 0}
+#define NXFONT_BITMAP_87 {0xe3, 0x8e, 0xe3, 0x8e, 0xe3, 0x8e, 0xe3, 0x8e, 0x73, 0x9c, 0x73, 0x9c, 0x73, 0x9c, 0x76, 0xdc, 0x36, 0xd8, 0x36, 0xd8, 0x3e, 0xf8, 0x1c, 0x70, 0x1c, 0x70, 0x1c, 0x70}
+
+/* X (88) */
+#define NXFONT_METRICS_88 {2, 12, 14, 0, 8, 0}
+#define NXFONT_BITMAP_88 {0xe0, 0x70, 0xe0, 0x70, 0x70, 0xe0, 0x79, 0xe0, 0x19, 0x80, 0x1f, 0x80, 0xf, 0x0, 0x1f, 0x80, 0x19, 0x80, 0x39, 0xc0, 0x70, 0xe0, 0x70, 0xe0, 0xe0, 0x70, 0xe0, 0x70}
+
+/* Y (89) */
+#define NXFONT_METRICS_89 {2, 13, 14, 0, 8, 0}
+#define NXFONT_BITMAP_89 {0xe0, 0x38, 0xe0, 0x38, 0x70, 0x70, 0x38, 0xe0, 0x38, 0xe0, 0x1d, 0xc0, 0x1d, 0xc0, 0xf, 0x80, 0x7, 0x0, 0x7, 0x0, 0x7, 0x0, 0x7, 0x0, 0x7, 0x0, 0x7, 0x0}
+
+/* Z (90) */
+#define NXFONT_METRICS_90 {2, 10, 14, 1, 8, 0}
+#define NXFONT_BITMAP_90 {0xff, 0xc0, 0xff, 0xc0, 0x1, 0xc0, 0x3, 0x80, 0x7, 0x0, 0x7, 0x0, 0xe, 0x0, 0x1c, 0x0, 0x38, 0x0, 0x38, 0x0, 0x70, 0x0, 0xe0, 0x0, 0xff, 0xc0, 0xff, 0xc0}
+
+/* bracketleft (91) */
+#define NXFONT_METRICS_91 {1, 5, 18, 1, 8, 0}
+#define NXFONT_BITMAP_91 {0xf8, 0xf8, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xf8, 0xf8}
+
+/* backslash (92) */
+#define NXFONT_METRICS_92 {1, 5, 14, 0, 8, 0}
+#define NXFONT_BITMAP_92 {0xc0, 0xc0, 0xc0, 0xe0, 0x60, 0x60, 0x60, 0x70, 0x30, 0x30, 0x38, 0x18, 0x18, 0x18}
+
+/* bracketright (93) */
+#define NXFONT_METRICS_93 {1, 5, 18, 0, 8, 0}
+#define NXFONT_BITMAP_93 {0xf8, 0xf8, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0xf8, 0xf8}
+
+/* asciicircum (94) */
+#define NXFONT_METRICS_94 {2, 10, 7, 0, 9, 0}
+#define NXFONT_BITMAP_94 {0xc, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x33, 0x0, 0x73, 0x80, 0x61, 0x80, 0xe1, 0xc0}
+
+/* underscore (95) */
+#define NXFONT_METRICS_95 {2, 10, 2, 0, 24, 0}
+#define NXFONT_BITMAP_95 {0xff, 0xc0, 0xff, 0xc0}
+
+/* grave (96) */
+#define NXFONT_METRICS_96 {1, 5, 3, 0, 8, 0}
+#define NXFONT_BITMAP_96 {0xe0, 0x70, 0x38}
+
+/* a (97) */
+#define NXFONT_METRICS_97 {2, 10, 10, 1, 12, 0}
+#define NXFONT_BITMAP_97 {0x3e, 0x0, 0x7f, 0x0, 0x63, 0x80, 0x7, 0x80, 0x3f, 0x80, 0x7b, 0x80, 0xe3, 0x80, 0xe7, 0x80, 0xfb, 0x80, 0x7b, 0xc0}
+
+/* b (98) */
+#define NXFONT_METRICS_98 {2, 10, 14, 1, 8, 0}
+#define NXFONT_BITMAP_98 {0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xef, 0x0, 0xff, 0x80, 0xf3, 0x80, 0xe1, 0xc0, 0xe1, 0xc0, 0xe1, 0xc0, 0xe1, 0xc0, 0xf3, 0x80, 0xff, 0x80, 0xef, 0x0}
+
+/* c (99) */
+#define NXFONT_METRICS_99 {2, 9, 10, 1, 12, 0}
+#define NXFONT_BITMAP_99 {0x1e, 0x0, 0x7f, 0x80, 0x73, 0x80, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0x73, 0x80, 0x7f, 0x80, 0x1e, 0x0}
+
+/* d (100) */
+#define NXFONT_METRICS_100 {2, 10, 14, 1, 8, 0}
+#define NXFONT_BITMAP_100 {0x1, 0xc0, 0x1, 0xc0, 0x1, 0xc0, 0x1, 0xc0, 0x3d, 0xc0, 0x7f, 0xc0, 0x73, 0xc0, 0xe1, 0xc0, 0xe1, 0xc0, 0xe1, 0xc0, 0xe1, 0xc0, 0x73, 0xc0, 0x7f, 0xc0, 0x3d, 0xc0}
+
+/* e (101) */
+#define NXFONT_METRICS_101 {2, 9, 10, 1, 12, 0}
+#define NXFONT_BITMAP_101 {0x1e, 0x0, 0x7f, 0x0, 0x73, 0x80, 0xe1, 0x80, 0xff, 0x80, 0xff, 0x80, 0xe0, 0x0, 0x73, 0x80, 0x7f, 0x80, 0x1e, 0x0}
+
+/* f (102) */
+#define NXFONT_METRICS_102 {1, 7, 14, 0, 8, 0}
+#define NXFONT_BITMAP_102 {0x1e, 0x3e, 0x38, 0x38, 0xfe, 0xfe, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38}
+
+/* g (103) */
+#define NXFONT_METRICS_103 {2, 10, 14, 1, 12, 0}
+#define NXFONT_BITMAP_103 {0x3d, 0xc0, 0x7f, 0xc0, 0x73, 0xc0, 0xe1, 0xc0, 0xe1, 0xc0, 0xe1, 0xc0, 0xe1, 0xc0, 0x73, 0xc0, 0x7f, 0xc0, 0x3d, 0xc0, 0x1, 0xc0, 0x73, 0x80, 0x7f, 0x80, 0x1e, 0x0}
+
+/* h (104) */
+#define NXFONT_METRICS_104 {2, 9, 14, 1, 8, 0}
+#define NXFONT_BITMAP_104 {0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xef, 0x0, 0xff, 0x80, 0xf3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80}
+
+/* i (105) */
+#define NXFONT_METRICS_105 {1, 3, 14, 1, 8, 0}
+#define NXFONT_BITMAP_105 {0xe0, 0xe0, 0xe0, 0x0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0}
+
+/* j (106) -- NOTE: Xoffset should be -1, not 0. */
+#define NXFONT_METRICS_106 {1, 5, 18, 0, 8, 0}
+#define NXFONT_BITMAP_106 {0x38, 0x38, 0x38, 0x0, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0xf8, 0xf0}
+
+/* k (107) */
+#define NXFONT_METRICS_107 {2, 9, 14, 1, 8, 0}
+#define NXFONT_BITMAP_107 {0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe7, 0x0, 0xee, 0x0, 0xfc, 0x0, 0xf8, 0x0, 0xf8, 0x0, 0xfc, 0x0, 0xee, 0x0, 0xe7, 0x0, 0xe7, 0x80, 0xe3, 0x80}
+
+/* l (108) */
+#define NXFONT_METRICS_108 {1, 3, 14, 1, 8, 0}
+#define NXFONT_BITMAP_108 {0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0}
+
+/* m (109) */
+#define NXFONT_METRICS_109 {2, 15, 10, 1, 12, 0}
+#define NXFONT_BITMAP_109 {0xef, 0x3c, 0xff, 0xfe, 0xf3, 0xce, 0xe3, 0x8e, 0xe3, 0x8e, 0xe3, 0x8e, 0xe3, 0x8e, 0xe3, 0x8e, 0xe3, 0x8e, 0xe3, 0x8e}
+
+/* n (110) */
+#define NXFONT_METRICS_110 {2, 9, 10, 1, 12, 0}
+#define NXFONT_BITMAP_110 {0xef, 0x0, 0xff, 0x80, 0xf3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80}
+
+/* o (111) */
+#define NXFONT_METRICS_111 {2, 10, 10, 1, 12, 0}
+#define NXFONT_BITMAP_111 {0x1e, 0x0, 0x7f, 0x80, 0x73, 0x80, 0xe1, 0xc0, 0xe1, 0xc0, 0xe1, 0xc0, 0xe1, 0xc0, 0x73, 0x80, 0x7f, 0x80, 0x1e, 0x0}
+
+/* p (112) */
+#define NXFONT_METRICS_112 {2, 10, 14, 1, 12, 0}
+#define NXFONT_BITMAP_112 {0xef, 0x0, 0xff, 0x80, 0xf3, 0x80, 0xe1, 0xc0, 0xe1, 0xc0, 0xe1, 0xc0, 0xe1, 0xc0, 0xf3, 0x80, 0xff, 0x80, 0xef, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0}
+
+/* q (113) */
+#define NXFONT_METRICS_113 {2, 10, 14, 1, 12, 0}
+#define NXFONT_BITMAP_113 {0x3d, 0xc0, 0x7f, 0xc0, 0x73, 0xc0, 0xe1, 0xc0, 0xe1, 0xc0, 0xe1, 0xc0, 0xe1, 0xc0, 0x73, 0xc0, 0x7f, 0xc0, 0x3d, 0xc0, 0x1, 0xc0, 0x1, 0xc0, 0x1, 0xc0, 0x1, 0xc0}
+
+/* r (114) */
+#define NXFONT_METRICS_114 {1, 6, 10, 1, 12, 0}
+#define NXFONT_BITMAP_114 {0xec, 0xfc, 0xfc, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0}
+
+/* s (115) */
+#define NXFONT_METRICS_115 {2, 9, 10, 1, 12, 0}
+#define NXFONT_BITMAP_115 {0x3f, 0x0, 0x7f, 0x80, 0xe3, 0x80, 0xe0, 0x0, 0xff, 0x0, 0x3f, 0x80, 0x3, 0x80, 0xe3, 0x80, 0xff, 0x0, 0x7e, 0x0}
+
+/* t (116) */
+#define NXFONT_METRICS_116 {1, 6, 13, 0, 9, 0}
+#define NXFONT_BITMAP_116 {0x70, 0x70, 0x70, 0xfc, 0xfc, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x7c, 0x3c}
+
+/* u (117) */
+#define NXFONT_METRICS_117 {2, 9, 10, 1, 12, 0}
+#define NXFONT_BITMAP_117 {0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe7, 0x80, 0xff, 0x80, 0x7b, 0x80}
+
+/* v (118) */
+#define NXFONT_METRICS_118 {2, 9, 10, 0, 12, 0}
+#define NXFONT_BITMAP_118 {0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0x77, 0x0, 0x77, 0x0, 0x77, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x1c, 0x0, 0x1c, 0x0}
+
+/* w (119) */
+#define NXFONT_METRICS_119 {2, 15, 10, 0, 12, 0}
+#define NXFONT_BITMAP_119 {0xe3, 0x8e, 0xe3, 0x8e, 0xe3, 0x8e, 0x73, 0x9c, 0x77, 0xdc, 0x76, 0xdc, 0x3e, 0xf8, 0x3c, 0x78, 0x1c, 0x70, 0x1c, 0x70}
+
+/* x (120) */
+#define NXFONT_METRICS_120 {2, 9, 10, 1, 12, 0}
+#define NXFONT_BITMAP_120 {0xe3, 0x80, 0xe3, 0x80, 0x77, 0x0, 0x3e, 0x0, 0x1c, 0x0, 0x3e, 0x0, 0x77, 0x0, 0x77, 0x0, 0xe3, 0x80, 0xe3, 0x80}
+
+/* y (121) */
+#define NXFONT_METRICS_121 {2, 9, 14, 1, 12, 0}
+#define NXFONT_BITMAP_121 {0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0x77, 0x0, 0x77, 0x0, 0x77, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x18, 0x0, 0x78, 0x0, 0x70, 0x0}
+
+/* z (122) */
+#define NXFONT_METRICS_122 {1, 8, 10, 1, 12, 0}
+#define NXFONT_BITMAP_122 {0xff, 0xff, 0x7, 0xe, 0x1c, 0x38, 0x70, 0xe0, 0xff, 0xff}
+
+/* braceleft (123) */
+#define NXFONT_METRICS_123 {1, 7, 18, 1, 8, 0}
+#define NXFONT_BITMAP_123 {0xe, 0x1c, 0x38, 0x38, 0x38, 0x38, 0x38, 0x70, 0xe0, 0x70, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x1c, 0xe}
+
+/* bar (124) */
+#define NXFONT_METRICS_124 {1, 2, 18, 1, 8, 0}
+#define NXFONT_BITMAP_124 {0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* braceright (125) */
+#define NXFONT_METRICS_125 {1, 7, 18, 0, 8, 0}
+#define NXFONT_BITMAP_125 {0xe0, 0x70, 0x38, 0x38, 0x38, 0x38, 0x38, 0x1c, 0xe, 0x1c, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x70, 0xe0}
+
+/* asciitilde (126) */
+#define NXFONT_METRICS_126 {2, 9, 3, 1, 15, 0}
+#define NXFONT_BITMAP_126 {0x79, 0x80, 0xff, 0x80, 0xcf, 0x0}
+
+/* exclamdown (161) */
+#define NXFONT_METRICS_161 {1, 3, 14, 2, 12, 0}
+#define NXFONT_BITMAP_161 {0xe0, 0xe0, 0xe0, 0x0, 0x60, 0x60, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0}
+
+/* cent (162) */
+#define NXFONT_METRICS_162 {1, 8, 14, 1, 10, 0}
+#define NXFONT_BITMAP_162 {0x2, 0x2, 0x3e, 0x7f, 0xe7, 0xc8, 0xc8, 0xd0, 0xd0, 0xe3, 0x7f, 0x7e, 0x40, 0x40}
+
+/* sterling (163) */
+#define NXFONT_METRICS_163 {2, 10, 13, 0, 9, 0}
+#define NXFONT_BITMAP_163 {0x1f, 0x0, 0x3f, 0xc0, 0x71, 0xc0, 0x70, 0x0, 0x70, 0x0, 0x38, 0x0, 0x7f, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x38, 0x0, 0x70, 0xc0, 0xff, 0xc0, 0xef, 0x80}
+
+/* currency (164) */
+#define NXFONT_METRICS_164 {2, 9, 8, 1, 12, 0}
+#define NXFONT_BITMAP_164 {0xc1, 0x80, 0xff, 0x80, 0x77, 0x0, 0x63, 0x0, 0x63, 0x0, 0x77, 0x0, 0xff, 0x80, 0xc1, 0x80}
+
+/* yen (165) */
+#define NXFONT_METRICS_165 {2, 9, 13, 0, 9, 0}
+#define NXFONT_BITMAP_165 {0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0x77, 0x0, 0x77, 0x0, 0x3e, 0x0, 0xff, 0x80, 0x1c, 0x0, 0xff, 0x80, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0}
+
+/* brokenbar (166) */
+#define NXFONT_METRICS_166 {1, 2, 18, 1, 8, 0}
+#define NXFONT_BITMAP_166 {0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x0, 0x0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* section (167) */
+#define NXFONT_METRICS_167 {2, 9, 18, 0, 8, 0}
+#define NXFONT_BITMAP_167 {0x3e, 0x0, 0x7f, 0x0, 0xe3, 0x80, 0xe3, 0x80, 0xf0, 0x0, 0x7c, 0x0, 0xfe, 0x0, 0xc7, 0x0, 0xc3, 0x80, 0xe1, 0x80, 0x71, 0x80, 0x3f, 0x80, 0xf, 0x0, 0x7, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0x7f, 0x0, 0x3e, 0x0}
+
+/* dieresis (168) */
+#define NXFONT_METRICS_168 {1, 5, 2, 1, 8, 0}
+#define NXFONT_BITMAP_168 {0xd8, 0xd8}
+
+/* copyright (169) */
+#define NXFONT_METRICS_169 {2, 14, 14, 1, 8, 0}
+#define NXFONT_BITMAP_169 {0xf, 0xc0, 0x38, 0x70, 0x60, 0x18, 0xc7, 0x8c, 0xcf, 0xcc, 0x98, 0xc4, 0x98, 0x4, 0x98, 0x4, 0x98, 0x44, 0xcf, 0xcc, 0xc7, 0x8c, 0x60, 0x18, 0x38, 0x70, 0xf, 0xc0}
+
+/* ordfeminine (170) */
+#define NXFONT_METRICS_170 {1, 6, 9, 1, 8, 0}
+#define NXFONT_BITMAP_170 {0x78, 0x8c, 0x7c, 0xcc, 0xcc, 0x74, 0x0, 0xfc, 0xfc}
+
+/* guillemotleft (171) */
+#define NXFONT_METRICS_171 {2, 10, 8, 0, 13, 0}
+#define NXFONT_BITMAP_171 {0x1d, 0xc0, 0x3b, 0x80, 0x77, 0x0, 0xee, 0x0, 0xee, 0x0, 0x77, 0x0, 0x3b, 0x80, 0x1d, 0xc0}
+
+/* logicalnot (172) */
+#define NXFONT_METRICS_172 {2, 9, 5, 1, 14, 0}
+#define NXFONT_BITMAP_172 {0xff, 0x80, 0xff, 0x80, 0x1, 0x80, 0x1, 0x80, 0x1, 0x80}
+
+/* hyphen (173) */
+#define NXFONT_METRICS_173 {1, 5, 3, 0, 15, 0}
+#define NXFONT_BITMAP_173 {0xf8, 0xf8, 0xf8}
+
+/* registered (174) */
+#define NXFONT_METRICS_174 {2, 13, 14, 1, 8, 0}
+#define NXFONT_BITMAP_174 {0xf, 0x80, 0x30, 0x60, 0x60, 0x10, 0x5f, 0x90, 0x99, 0xc8, 0x98, 0xc8, 0x99, 0xc8, 0x9f, 0x8, 0x99, 0x88, 0x99, 0x88, 0x58, 0xd0, 0x60, 0x30, 0x38, 0xe0, 0xf, 0x80}
+
+/* macron (175) */
+#define NXFONT_METRICS_175 {1, 5, 2, 1, 8, 0}
+#define NXFONT_BITMAP_175 {0xf8, 0xf8}
+
+/* degree (176) */
+#define NXFONT_METRICS_176 {1, 6, 6, 0, 9, 0}
+#define NXFONT_BITMAP_176 {0x78, 0xfc, 0xcc, 0xcc, 0xfc, 0x78}
+
+/* plusminus (177) */
+#define NXFONT_METRICS_177 {2, 9, 9, 1, 13, 0}
+#define NXFONT_BITMAP_177 {0x1c, 0x0, 0x1c, 0x0, 0xff, 0x80, 0xff, 0x80, 0x1c, 0x0, 0x1c, 0x0, 0x0, 0x0, 0xff, 0x80, 0xff, 0x80}
+
+/* twosuperior (178) */
+#define NXFONT_METRICS_178 {1, 6, 8, 0, 9, 0}
+#define NXFONT_BITMAP_178 {0x78, 0xfc, 0xcc, 0x1c, 0x78, 0xe0, 0xfc, 0xfc}
+
+/* threesuperior (179) */
+#define NXFONT_METRICS_179 {1, 6, 8, 0, 9, 0}
+#define NXFONT_BITMAP_179 {0x78, 0xfc, 0xcc, 0x38, 0x3c, 0xcc, 0xfc, 0x78}
+
+/* acute (180) */
+#define NXFONT_METRICS_180 {1, 5, 3, 0, 8, 0}
+#define NXFONT_BITMAP_180 {0x38, 0x70, 0xe0}
+
+/* mu (181) */
+#define NXFONT_METRICS_181 {2, 9, 14, 1, 12, 0}
+#define NXFONT_BITMAP_181 {0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe7, 0x80, 0xff, 0x80, 0xfb, 0x80, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0}
+
+/* paragraph (182) */
+#define NXFONT_METRICS_182 {2, 9, 18, 0, 8, 0}
+#define NXFONT_BITMAP_182 {0x3f, 0x80, 0x7b, 0x0, 0xfb, 0x0, 0xfb, 0x0, 0xfb, 0x0, 0xfb, 0x0, 0xfb, 0x0, 0x7b, 0x0, 0x3b, 0x0, 0x1b, 0x0, 0x1b, 0x0, 0x1b, 0x0, 0x1b, 0x0, 0x1b, 0x0, 0x1b, 0x0, 0x1b, 0x0, 0x1b, 0x0, 0x1b, 0x0}
+
+/* periodcentered (183) */
+#define NXFONT_METRICS_183 {1, 2, 2, 1, 14, 0}
+#define NXFONT_BITMAP_183 {0xc0, 0xc0}
+
+/* cedilla (184) */
+#define NXFONT_METRICS_184 {1, 5, 5, 1, 22, 0}
+#define NXFONT_BITMAP_184 {0x60, 0x70, 0x18, 0xf8, 0xf0}
+
+/* onesuperior (185) */
+#define NXFONT_METRICS_185 {1, 4, 8, 0, 9, 0}
+#define NXFONT_BITMAP_185 {0x30, 0xf0, 0xf0, 0x30, 0x30, 0x30, 0x30, 0x30}
+
+/* ordmasculine (186) */
+#define NXFONT_METRICS_186 {1, 6, 9, 1, 8, 0}
+#define NXFONT_BITMAP_186 {0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x0, 0xfc, 0xfc}
+
+/* guillemotright (187) */
+#define NXFONT_METRICS_187 {2, 10, 8, 0, 13, 0}
+#define NXFONT_BITMAP_187 {0xee, 0x0, 0x77, 0x0, 0x3b, 0x80, 0x1d, 0xc0, 0x1d, 0xc0, 0x3b, 0x80, 0x77, 0x0, 0xee, 0x0}
+
+/* onequarter (188) */
+#define NXFONT_METRICS_188 {2, 14, 13, 0, 9, 0}
+#define NXFONT_BITMAP_188 {0x30, 0x60, 0xf0, 0x60, 0xf0, 0xc0, 0x30, 0xc0, 0x31, 0x80, 0x31, 0x98, 0x33, 0x38, 0x36, 0x38, 0x6, 0x78, 0xc, 0xd8, 0xc, 0xfc, 0x18, 0x18, 0x18, 0x18}
+
+/* onehalf (189) */
+#define NXFONT_METRICS_189 {2, 15, 13, 0, 9, 0}
+#define NXFONT_BITMAP_189 {0x30, 0x60, 0xf0, 0x60, 0xf0, 0xc0, 0x30, 0xc0, 0x31, 0x80, 0x31, 0xbc, 0x33, 0x7e, 0x36, 0x66, 0x6, 0xe, 0xc, 0x3c, 0xc, 0x70, 0x18, 0x7e, 0x18, 0x7e}
+
+/* threequarters (190) */
+#define NXFONT_METRICS_190 {2, 14, 13, 0, 9, 0}
+#define NXFONT_BITMAP_190 {0x78, 0x30, 0xfc, 0x30, 0xcc, 0x60, 0x38, 0x60, 0x3c, 0xc0, 0xcc, 0xd8, 0xfd, 0xb8, 0x7b, 0x38, 0x3, 0x78, 0x6, 0xd8, 0x6, 0xfc, 0xc, 0x18, 0xc, 0x18}
+
+/* questiondown (191) */
+#define NXFONT_METRICS_191 {1, 8, 14, 1, 12, 0}
+#define NXFONT_BITMAP_191 {0x1c, 0x1c, 0x1c, 0x0, 0x1c, 0x1c, 0x1c, 0x38, 0x78, 0x70, 0xe7, 0xe7, 0xff, 0x7e}
+
+/* Agrave (192) */
+#define NXFONT_METRICS_192 {2, 12, 18, 1, 4, 0}
+#define NXFONT_BITMAP_192 {0x38, 0x0, 0x1c, 0x0, 0x6, 0x0, 0x0, 0x0, 0xf, 0x0, 0xf, 0x0, 0x1f, 0x80, 0x19, 0x80, 0x19, 0x80, 0x39, 0xc0, 0x39, 0xc0, 0x30, 0xc0, 0x70, 0xe0, 0x7f, 0xe0, 0x7f, 0xe0, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70}
+
+/* Aacute (193) */
+#define NXFONT_METRICS_193 {2, 12, 18, 1, 4, 0}
+#define NXFONT_BITMAP_193 {0x1, 0xc0, 0x3, 0x80, 0x6, 0x0, 0x0, 0x0, 0xf, 0x0, 0xf, 0x0, 0x1f, 0x80, 0x19, 0x80, 0x19, 0x80, 0x39, 0xc0, 0x39, 0xc0, 0x30, 0xc0, 0x70, 0xe0, 0x7f, 0xe0, 0x7f, 0xe0, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70}
+
+/* Acircumflex (194) */
+#define NXFONT_METRICS_194 {2, 12, 18, 1, 4, 0}
+#define NXFONT_BITMAP_194 {0x7, 0x0, 0xf, 0x80, 0x1d, 0xc0, 0x0, 0x0, 0xf, 0x0, 0xf, 0x0, 0x1f, 0x80, 0x19, 0x80, 0x19, 0x80, 0x39, 0xc0, 0x39, 0xc0, 0x30, 0xc0, 0x70, 0xe0, 0x7f, 0xe0, 0x7f, 0xe0, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70}
+
+/* Atilde (195) */
+#define NXFONT_METRICS_195 {2, 12, 18, 1, 4, 0}
+#define NXFONT_BITMAP_195 {0xe, 0x20, 0x1f, 0xc0, 0x23, 0x80, 0x0, 0x0, 0xf, 0x0, 0xf, 0x0, 0x1f, 0x80, 0x19, 0x80, 0x19, 0x80, 0x39, 0xc0, 0x39, 0xc0, 0x30, 0xc0, 0x70, 0xe0, 0x7f, 0xe0, 0x7f, 0xe0, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70}
+
+/* Adieresis (196) */
+#define NXFONT_METRICS_196 {2, 12, 18, 1, 4, 0}
+#define NXFONT_BITMAP_196 {0x19, 0x80, 0x19, 0x80, 0x19, 0x80, 0x0, 0x0, 0xf, 0x0, 0xf, 0x0, 0x1f, 0x80, 0x19, 0x80, 0x19, 0x80, 0x39, 0xc0, 0x39, 0xc0, 0x30, 0xc0, 0x70, 0xe0, 0x7f, 0xe0, 0x7f, 0xe0, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70}
+
+/* Aring (197) */
+#define NXFONT_METRICS_197 {2, 12, 18, 1, 4, 0}
+#define NXFONT_BITMAP_197 {0xf, 0x0, 0x19, 0x80, 0x19, 0x80, 0xf, 0x0, 0xf, 0x0, 0xf, 0x0, 0x1f, 0x80, 0x19, 0x80, 0x19, 0x80, 0x39, 0xc0, 0x39, 0xc0, 0x30, 0xc0, 0x70, 0xe0, 0x7f, 0xe0, 0x7f, 0xe0, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70}
+
+/* AE (198) */
+#define NXFONT_METRICS_198 {2, 16, 14, 1, 8, 0}
+#define NXFONT_BITMAP_198 {0xf, 0xff, 0xf, 0xff, 0x1f, 0x80, 0x1b, 0x80, 0x3b, 0x80, 0x3b, 0x80, 0x33, 0xfe, 0x73, 0xfe, 0x73, 0x80, 0x7f, 0x80, 0xff, 0x80, 0xe3, 0x80, 0xe3, 0xff, 0xe3, 0xff}
+
+/* Ccedilla (199) */
+#define NXFONT_METRICS_199 {2, 12, 19, 1, 8, 0}
+#define NXFONT_BITMAP_199 {0xf, 0x80, 0x3f, 0xe0, 0x78, 0xe0, 0x70, 0x70, 0xf0, 0x70, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xf0, 0x70, 0x70, 0x70, 0x78, 0xe0, 0x3f, 0xe0, 0xf, 0x80, 0xc, 0x0, 0xe, 0x0, 0x3, 0x0, 0x1f, 0x0, 0x1e, 0x0}
+
+/* Egrave (200) */
+#define NXFONT_METRICS_200 {2, 10, 18, 2, 4, 0}
+#define NXFONT_BITMAP_200 {0x38, 0x0, 0x1c, 0x0, 0x6, 0x0, 0x0, 0x0, 0xff, 0xc0, 0xff, 0xc0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xff, 0x80, 0xff, 0x80, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xff, 0xc0, 0xff, 0xc0}
+
+/* Eacute (201) */
+#define NXFONT_METRICS_201 {2, 10, 18, 2, 4, 0}
+#define NXFONT_BITMAP_201 {0x3, 0x80, 0x7, 0x0, 0xc, 0x0, 0x0, 0x0, 0xff, 0xc0, 0xff, 0xc0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xff, 0x80, 0xff, 0x80, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xff, 0xc0, 0xff, 0xc0}
+
+/* Ecircumflex (202) */
+#define NXFONT_METRICS_202 {2, 10, 18, 2, 4, 0}
+#define NXFONT_BITMAP_202 {0xe, 0x0, 0x1f, 0x0, 0x3b, 0x80, 0x0, 0x0, 0xff, 0xc0, 0xff, 0xc0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xff, 0x80, 0xff, 0x80, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xff, 0xc0, 0xff, 0xc0}
+
+/* Edieresis (203) */
+#define NXFONT_METRICS_203 {2, 10, 18, 2, 4, 0}
+#define NXFONT_BITMAP_203 {0x33, 0x0, 0x33, 0x0, 0x33, 0x0, 0x0, 0x0, 0xff, 0xc0, 0xff, 0xc0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xff, 0x80, 0xff, 0x80, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xff, 0xc0, 0xff, 0xc0}
+
+/* Igrave (204) -- NOTE: Xoffset should be -1, not 0. */
+#define NXFONT_METRICS_204 {1, 5, 18, 0, 4, 0}
+#define NXFONT_BITMAP_204 {0xe0, 0x70, 0x18, 0x0, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38}
+
+/* Iacute (205) */
+#define NXFONT_METRICS_205 {1, 5, 18, 1, 4, 0}
+#define NXFONT_BITMAP_205 {0x38, 0x70, 0xc0, 0x0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0}
+
+/* Icircumflex (206) -- NOTE: Xoffset should be -1, not 0. */
+#define NXFONT_METRICS_206 {1, 7, 18, 0, 4, 0}
+#define NXFONT_BITMAP_206 {0x38, 0x7c, 0xee, 0x0, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38}
+
+/* Idieresis (207) */
+#define NXFONT_METRICS_207 {1, 6, 18, 0, 4, 0}
+#define NXFONT_BITMAP_207 {0xcc, 0xcc, 0xcc, 0x0, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70}
+
+/* Eth (208) -- NOTE: Xoffset should be -1, not 0. */
+#define NXFONT_METRICS_208 {2, 14, 14, 0, 8, 0}
+#define NXFONT_BITMAP_208 {0x3f, 0xc0, 0x3f, 0xf0, 0x38, 0x78, 0x38, 0x38, 0x38, 0x1c, 0x38, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x38, 0x38, 0x78, 0x3f, 0xf0, 0x3f, 0xc0}
+
+/* Ntilde (209) */
+#define NXFONT_METRICS_209 {2, 12, 18, 1, 4, 0}
+#define NXFONT_BITMAP_209 {0xe, 0x20, 0x1f, 0xc0, 0x23, 0x80, 0x0, 0x0, 0xe0, 0x70, 0xf0, 0x70, 0xf0, 0x70, 0xf8, 0x70, 0xfc, 0x70, 0xec, 0x70, 0xee, 0x70, 0xe6, 0x70, 0xe7, 0x70, 0xe3, 0x70, 0xe1, 0xf0, 0xe1, 0xf0, 0xe0, 0xf0, 0xe0, 0x70}
+
+/* Ograve (210) */
+#define NXFONT_METRICS_210 {2, 13, 18, 1, 4, 0}
+#define NXFONT_BITMAP_210 {0x1c, 0x0, 0xe, 0x0, 0x3, 0x0, 0x0, 0x0, 0xf, 0x80, 0x3f, 0xe0, 0x78, 0xf0, 0x70, 0x70, 0xf0, 0x78, 0xe0, 0x38, 0xe0, 0x38, 0xe0, 0x38, 0xe0, 0x38, 0xf0, 0x78, 0x70, 0x70, 0x78, 0xf0, 0x3f, 0xe0, 0xf, 0x80}
+
+/* Oacute (211) */
+#define NXFONT_METRICS_211 {2, 13, 18, 1, 4, 0}
+#define NXFONT_BITMAP_211 {0x1, 0xc0, 0x3, 0x80, 0x6, 0x0, 0x0, 0x0, 0xf, 0x80, 0x3f, 0xe0, 0x78, 0xf0, 0x70, 0x70, 0xf0, 0x78, 0xe0, 0x38, 0xe0, 0x38, 0xe0, 0x38, 0xe0, 0x38, 0xf0, 0x78, 0x70, 0x70, 0x78, 0xf0, 0x3f, 0xe0, 0xf, 0x80}
+
+/* Ocircumflex (212) */
+#define NXFONT_METRICS_212 {2, 13, 18, 1, 4, 0}
+#define NXFONT_BITMAP_212 {0x7, 0x0, 0xf, 0x80, 0x1d, 0xc0, 0x0, 0x0, 0xf, 0x80, 0x3f, 0xe0, 0x78, 0xf0, 0x70, 0x70, 0xf0, 0x78, 0xe0, 0x38, 0xe0, 0x38, 0xe0, 0x38, 0xe0, 0x38, 0xf0, 0x78, 0x70, 0x70, 0x78, 0xf0, 0x3f, 0xe0, 0xf, 0x80}
+
+/* Otilde (213) */
+#define NXFONT_METRICS_213 {2, 13, 18, 1, 4, 0}
+#define NXFONT_BITMAP_213 {0x7, 0x10, 0xf, 0xe0, 0x11, 0xc0, 0x0, 0x0, 0xf, 0x80, 0x3f, 0xe0, 0x78, 0xf0, 0x70, 0x70, 0xf0, 0x78, 0xe0, 0x38, 0xe0, 0x38, 0xe0, 0x38, 0xe0, 0x38, 0xf0, 0x78, 0x70, 0x70, 0x78, 0xf0, 0x3f, 0xe0, 0xf, 0x80}
+
+/* Odieresis (214) */
+#define NXFONT_METRICS_214 {2, 13, 18, 1, 4, 0}
+#define NXFONT_BITMAP_214 {0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0x0, 0x0, 0xf, 0x80, 0x3f, 0xe0, 0x78, 0xf0, 0x70, 0x70, 0xf0, 0x78, 0xe0, 0x38, 0xe0, 0x38, 0xe0, 0x38, 0xe0, 0x38, 0xf0, 0x78, 0x70, 0x70, 0x78, 0xf0, 0x3f, 0xe0, 0xf, 0x80}
+
+/* multiply (215) */
+#define NXFONT_METRICS_215 {2, 10, 8, 0, 13, 0}
+#define NXFONT_BITMAP_215 {0xe1, 0xc0, 0x73, 0x80, 0x3f, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x3f, 0x0, 0x73, 0x80, 0xe1, 0xc0}
+
+/* Oslash (216) */
+#define NXFONT_METRICS_216 {2, 15, 14, 0, 8, 0}
+#define NXFONT_BITMAP_216 {0x7, 0xc6, 0x1f, 0xfc, 0x3c, 0x38, 0x38, 0x78, 0x78, 0xdc, 0x71, 0x9c, 0x71, 0x1c, 0x73, 0x1c, 0x76, 0x1c, 0x7c, 0x3c, 0x38, 0x38, 0x3c, 0x78, 0x7f, 0xf0, 0xc7, 0xc0}
+
+/* Ugrave (217) */
+#define NXFONT_METRICS_217 {2, 12, 18, 1, 4, 0}
+#define NXFONT_BITMAP_217 {0x1c, 0x0, 0xe, 0x0, 0x3, 0x0, 0x0, 0x0, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0x70, 0xe0, 0x7f, 0xe0, 0x1f, 0x80}
+
+/* Uacute (218) */
+#define NXFONT_METRICS_218 {2, 12, 18, 1, 4, 0}
+#define NXFONT_BITMAP_218 {0x1, 0xc0, 0x3, 0x80, 0x6, 0x0, 0x0, 0x0, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0x70, 0xe0, 0x7f, 0xe0, 0x1f, 0x80}
+
+/* Ucircumflex (219) */
+#define NXFONT_METRICS_219 {2, 12, 18, 1, 4, 0}
+#define NXFONT_BITMAP_219 {0x7, 0x0, 0xf, 0x80, 0x1d, 0xc0, 0x0, 0x0, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0x70, 0xe0, 0x7f, 0xe0, 0x1f, 0x80}
+
+/* Udieresis (220) */
+#define NXFONT_METRICS_220 {2, 12, 18, 1, 4, 0}
+#define NXFONT_BITMAP_220 {0x19, 0x80, 0x19, 0x80, 0x19, 0x80, 0x0, 0x0, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0x70, 0xe0, 0x7f, 0xe0, 0x1f, 0x80}
+
+/* Yacute (221) */
+#define NXFONT_METRICS_221 {2, 13, 18, 0, 4, 0}
+#define NXFONT_BITMAP_221 {0x1, 0xc0, 0x3, 0x80, 0x6, 0x0, 0x0, 0x0, 0xe0, 0x38, 0xe0, 0x38, 0x70, 0x70, 0x38, 0xe0, 0x38, 0xe0, 0x1d, 0xc0, 0x1d, 0xc0, 0xf, 0x80, 0x7, 0x0, 0x7, 0x0, 0x7, 0x0, 0x7, 0x0, 0x7, 0x0, 0x7, 0x0}
+
+/* Thorn (222) */
+#define NXFONT_METRICS_222 {2, 11, 14, 1, 8, 0}
+#define NXFONT_BITMAP_222 {0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xff, 0x0, 0xff, 0xc0, 0xe1, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe1, 0xe0, 0xff, 0xc0, 0xff, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0}
+
+/* germandbls (223) */
+#define NXFONT_METRICS_223 {1, 8, 14, 1, 8, 0}
+#define NXFONT_BITMAP_223 {0x3c, 0x7e, 0xe7, 0xe7, 0xe7, 0xe7, 0xee, 0xee, 0xe7, 0xe7, 0xe7, 0xe7, 0xef, 0xee}
+
+/* agrave (224) */
+#define NXFONT_METRICS_224 {2, 10, 14, 1, 8, 0}
+#define NXFONT_BITMAP_224 {0x70, 0x0, 0x38, 0x0, 0xc, 0x0, 0x0, 0x0, 0x3e, 0x0, 0x7f, 0x0, 0x73, 0x80, 0x7, 0x80, 0x3f, 0x80, 0x7b, 0x80, 0xe3, 0x80, 0xe7, 0x80, 0xfb, 0x80, 0x7b, 0xc0}
+
+/* aacute (225) */
+#define NXFONT_METRICS_225 {2, 10, 14, 1, 8, 0}
+#define NXFONT_BITMAP_225 {0x3, 0x80, 0x7, 0x0, 0xc, 0x0, 0x0, 0x0, 0x3e, 0x0, 0x7f, 0x0, 0x73, 0x80, 0x7, 0x80, 0x3f, 0x80, 0x7b, 0x80, 0xe3, 0x80, 0xe7, 0x80, 0xfb, 0x80, 0x7b, 0xc0}
+
+/* acircumflex (226) */
+#define NXFONT_METRICS_226 {2, 10, 14, 1, 8, 0}
+#define NXFONT_BITMAP_226 {0x1c, 0x0, 0x3e, 0x0, 0x77, 0x0, 0x0, 0x0, 0x3e, 0x0, 0x7f, 0x0, 0x73, 0x80, 0x7, 0x80, 0x3f, 0x80, 0x7b, 0x80, 0xe3, 0x80, 0xe7, 0x80, 0xfb, 0x80, 0x7b, 0xc0}
+
+/* atilde (227) */
+#define NXFONT_METRICS_227 {2, 10, 14, 1, 8, 0}
+#define NXFONT_BITMAP_227 {0x3b, 0x0, 0x7f, 0x0, 0x6e, 0x0, 0x0, 0x0, 0x3e, 0x0, 0x7f, 0x0, 0x73, 0x80, 0x7, 0x80, 0x3f, 0x80, 0x7b, 0x80, 0xe3, 0x80, 0xe7, 0x80, 0xfb, 0x80, 0x7b, 0xc0}
+
+/* adieresis (228) */
+#define NXFONT_METRICS_228 {2, 10, 14, 1, 8, 0}
+#define NXFONT_BITMAP_228 {0x33, 0x0, 0x33, 0x0, 0x33, 0x0, 0x0, 0x0, 0x3e, 0x0, 0x7f, 0x0, 0x73, 0x80, 0x7, 0x80, 0x3f, 0x80, 0x7b, 0x80, 0xe3, 0x80, 0xe7, 0x80, 0xfb, 0x80, 0x7b, 0xc0}
+
+/* aring (229) */
+#define NXFONT_METRICS_229 {2, 10, 14, 1, 8, 0}
+#define NXFONT_BITMAP_229 {0x3c, 0x0, 0x66, 0x0, 0x66, 0x0, 0x3c, 0x0, 0x3e, 0x0, 0x7f, 0x0, 0x73, 0x80, 0x7, 0x80, 0x3f, 0x80, 0x7b, 0x80, 0xe3, 0x80, 0xe7, 0x80, 0xfb, 0x80, 0x7b, 0xc0}
+
+/* ae (230) */
+#define NXFONT_METRICS_230 {2, 14, 10, 1, 12, 0}
+#define NXFONT_BITMAP_230 {0x3d, 0xf0, 0x7f, 0xf8, 0x67, 0x1c, 0xf, 0x1c, 0x3f, 0xfc, 0x77, 0x0, 0xe7, 0x0, 0xef, 0x9c, 0xff, 0xfc, 0x79, 0xf0}
+
+/* ccedilla (231) */
+#define NXFONT_METRICS_231 {2, 9, 15, 1, 12, 0}
+#define NXFONT_BITMAP_231 {0x1e, 0x0, 0x7f, 0x80, 0x73, 0x80, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0x73, 0x80, 0x7f, 0x80, 0x1e, 0x0, 0x18, 0x0, 0x1c, 0x0, 0x6, 0x0, 0x3e, 0x0, 0x3c, 0x0}
+
+/* egrave (232) */
+#define NXFONT_METRICS_232 {2, 9, 14, 1, 8, 0}
+#define NXFONT_BITMAP_232 {0x70, 0x0, 0x38, 0x0, 0xc, 0x0, 0x0, 0x0, 0x1e, 0x0, 0x7f, 0x0, 0x73, 0x80, 0xe1, 0x80, 0xff, 0x80, 0xff, 0x80, 0xe0, 0x0, 0x73, 0x80, 0x7f, 0x80, 0x1e, 0x0}
+
+/* eacute (233) */
+#define NXFONT_METRICS_233 {2, 9, 14, 1, 8, 0}
+#define NXFONT_BITMAP_233 {0x3, 0x80, 0x7, 0x0, 0xc, 0x0, 0x0, 0x0, 0x1e, 0x0, 0x7f, 0x0, 0x73, 0x80, 0xe1, 0x80, 0xff, 0x80, 0xff, 0x80, 0xe0, 0x0, 0x73, 0x80, 0x7f, 0x80, 0x1e, 0x0}
+
+/* ecircumflex (234) */
+#define NXFONT_METRICS_234 {2, 9, 14, 1, 8, 0}
+#define NXFONT_BITMAP_234 {0x1c, 0x0, 0x3e, 0x0, 0x77, 0x0, 0x0, 0x0, 0x1e, 0x0, 0x7f, 0x0, 0x73, 0x80, 0xe1, 0x80, 0xff, 0x80, 0xff, 0x80, 0xe0, 0x0, 0x73, 0x80, 0x7f, 0x80, 0x1e, 0x0}
+
+/* edieresis (235) */
+#define NXFONT_METRICS_235 {2, 9, 14, 1, 8, 0}
+#define NXFONT_BITMAP_235 {0x33, 0x0, 0x33, 0x0, 0x33, 0x0, 0x0, 0x0, 0x1e, 0x0, 0x7f, 0x0, 0x73, 0x80, 0xe1, 0x80, 0xff, 0x80, 0xff, 0x80, 0xe0, 0x0, 0x73, 0x80, 0x7f, 0x80, 0x1e, 0x0}
+
+/* igrave (236) -- NOTE: Xoffset should be -1, not 0. */
+#define NXFONT_METRICS_236 {1, 5, 14, 0, 8, 0}
+#define NXFONT_BITMAP_236 {0xe0, 0x70, 0x18, 0x0, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38}
+
+/* iacute (237) */
+#define NXFONT_METRICS_237 {1, 5, 14, 1, 8, 0}
+#define NXFONT_BITMAP_237 {0x38, 0x70, 0xc0, 0x0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0}
+
+/* icircumflex (238) -- NOTE: Xoffset should be -1, not 0. */
+#define NXFONT_METRICS_238 {1, 7, 14, 0, 8, 0}
+#define NXFONT_BITMAP_238 {0x38, 0x7c, 0xee, 0x0, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38}
+
+/* idieresis (239) */
+#define NXFONT_METRICS_239 {1, 5, 14, 0, 8, 0}
+#define NXFONT_BITMAP_239 {0xd8, 0xd8, 0xd8, 0x0, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70}
+
+/* eth (240) */
+#define NXFONT_METRICS_240 {2, 10, 14, 1, 8, 0}
+#define NXFONT_BITMAP_240 {0x60, 0x0, 0x37, 0x0, 0x3c, 0x0, 0x66, 0x0, 0x1f, 0x0, 0x7f, 0x80, 0x73, 0x80, 0xe1, 0xc0, 0xe1, 0xc0, 0xe1, 0xc0, 0xe1, 0xc0, 0x73, 0x80, 0x7f, 0x80, 0x1e, 0x0}
+
+/* ntilde (241) */
+#define NXFONT_METRICS_241 {2, 9, 14, 1, 8, 0}
+#define NXFONT_BITMAP_241 {0x3b, 0x0, 0x7f, 0x0, 0x6e, 0x0, 0x0, 0x0, 0xef, 0x0, 0xff, 0x80, 0xf3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80}
+
+/* ograve (242) */
+#define NXFONT_METRICS_242 {2, 10, 14, 1, 8, 0}
+#define NXFONT_BITMAP_242 {0x70, 0x0, 0x38, 0x0, 0xc, 0x0, 0x0, 0x0, 0x1e, 0x0, 0x7f, 0x80, 0x73, 0x80, 0xe1, 0xc0, 0xe1, 0xc0, 0xe1, 0xc0, 0xe1, 0xc0, 0x73, 0x80, 0x7f, 0x80, 0x1e, 0x0}
+
+/* oacute (243) */
+#define NXFONT_METRICS_243 {2, 10, 14, 1, 8, 0}
+#define NXFONT_BITMAP_243 {0x3, 0x80, 0x7, 0x0, 0xc, 0x0, 0x0, 0x0, 0x1e, 0x0, 0x7f, 0x80, 0x73, 0x80, 0xe1, 0xc0, 0xe1, 0xc0, 0xe1, 0xc0, 0xe1, 0xc0, 0x73, 0x80, 0x7f, 0x80, 0x1e, 0x0}
+
+/* ocircumflex (244) */
+#define NXFONT_METRICS_244 {2, 10, 14, 1, 8, 0}
+#define NXFONT_BITMAP_244 {0x1c, 0x0, 0x3e, 0x0, 0x77, 0x0, 0x0, 0x0, 0x1e, 0x0, 0x7f, 0x80, 0x73, 0x80, 0xe1, 0xc0, 0xe1, 0xc0, 0xe1, 0xc0, 0xe1, 0xc0, 0x73, 0x80, 0x7f, 0x80, 0x1e, 0x0}
+
+/* otilde (245) */
+#define NXFONT_METRICS_245 {2, 10, 14, 1, 8, 0}
+#define NXFONT_BITMAP_245 {0x3b, 0x0, 0x7f, 0x0, 0x6e, 0x0, 0x0, 0x0, 0x1e, 0x0, 0x7f, 0x80, 0x73, 0x80, 0xe1, 0xc0, 0xe1, 0xc0, 0xe1, 0xc0, 0xe1, 0xc0, 0x73, 0x80, 0x7f, 0x80, 0x1e, 0x0}
+
+/* odieresis (246) */
+#define NXFONT_METRICS_246 {2, 10, 14, 1, 8, 0}
+#define NXFONT_BITMAP_246 {0x33, 0x0, 0x33, 0x0, 0x33, 0x0, 0x0, 0x0, 0x1e, 0x0, 0x7f, 0x80, 0x73, 0x80, 0xe1, 0xc0, 0xe1, 0xc0, 0xe1, 0xc0, 0xe1, 0xc0, 0x73, 0x80, 0x7f, 0x80, 0x1e, 0x0}
+
+/* divide (247) */
+#define NXFONT_METRICS_247 {2, 9, 8, 1, 13, 0}
+#define NXFONT_BITMAP_247 {0x1c, 0x0, 0x1c, 0x0, 0x0, 0x0, 0xff, 0x80, 0xff, 0x80, 0x0, 0x0, 0x1c, 0x0, 0x1c, 0x0}
+
+/* oslash (248) */
+#define NXFONT_METRICS_248 {2, 12, 10, 0, 12, 0}
+#define NXFONT_BITMAP_248 {0xf, 0x30, 0x3f, 0xe0, 0x39, 0xc0, 0x73, 0xe0, 0x77, 0xe0, 0x7e, 0xe0, 0x7c, 0xe0, 0x39, 0xc0, 0x7f, 0xc0, 0xcf, 0x0}
+
+/* ugrave (249) */
+#define NXFONT_METRICS_249 {2, 9, 14, 1, 8, 0}
+#define NXFONT_BITMAP_249 {0x70, 0x0, 0x38, 0x0, 0xc, 0x0, 0x0, 0x0, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe7, 0x80, 0xff, 0x80, 0x7b, 0x80}
+
+/* uacute (250) */
+#define NXFONT_METRICS_250 {2, 9, 14, 1, 8, 0}
+#define NXFONT_BITMAP_250 {0x3, 0x80, 0x7, 0x0, 0xc, 0x0, 0x0, 0x0, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe7, 0x80, 0xff, 0x80, 0x7b, 0x80}
+
+/* ucircumflex (251) */
+#define NXFONT_METRICS_251 {2, 9, 14, 1, 8, 0}
+#define NXFONT_BITMAP_251 {0x1c, 0x0, 0x3e, 0x0, 0x77, 0x0, 0x0, 0x0, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe7, 0x80, 0xff, 0x80, 0x7b, 0x80}
+
+/* udieresis (252) */
+#define NXFONT_METRICS_252 {2, 9, 14, 1, 8, 0}
+#define NXFONT_BITMAP_252 {0x33, 0x0, 0x33, 0x0, 0x33, 0x0, 0x0, 0x0, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe7, 0x80, 0xff, 0x80, 0x7b, 0x80}
+
+/* yacute (253) */
+#define NXFONT_METRICS_253 {2, 9, 18, 1, 8, 0}
+#define NXFONT_BITMAP_253 {0x7, 0x0, 0xe, 0x0, 0x18, 0x0, 0x0, 0x0, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0x77, 0x0, 0x77, 0x0, 0x77, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x18, 0x0, 0x78, 0x0, 0x70, 0x0}
+
+/* thorn (254) */
+#define NXFONT_METRICS_254 {2, 10, 18, 1, 8, 0}
+#define NXFONT_BITMAP_254 {0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xef, 0x0, 0xff, 0x80, 0xf3, 0x80, 0xe1, 0xc0, 0xe1, 0xc0, 0xe1, 0xc0, 0xe1, 0xc0, 0xf3, 0x80, 0xff, 0x80, 0xef, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0}
+
+/* ydieresis (255) */
+#define NXFONT_METRICS_255 {2, 9, 18, 1, 8, 0}
+#define NXFONT_BITMAP_255 {0x33, 0x0, 0x33, 0x0, 0x33, 0x0, 0x0, 0x0, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0x77, 0x0, 0x77, 0x0, 0x77, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x18, 0x0, 0x78, 0x0, 0x70, 0x0}
+
+/****************************************************************************
+ * Public Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+#define EXTERN extern "C"
+extern "C" {
+#else
+#define EXTERN extern
+#endif
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* __GRAPHICS_NXFONTS_NXFONTS_SANS22X29B_H */
diff --git a/nuttx/graphics/nxfonts/nxfonts_sans23x27.h b/nuttx/graphics/nxfonts/nxfonts_sans23x27.h
new file mode 100644
index 000000000..5feb39d9c
--- /dev/null
+++ b/nuttx/graphics/nxfonts/nxfonts_sans23x27.h
@@ -0,0 +1,859 @@
+/****************************************************************************
+ * graphics/nxfonts/nxfonts_sans23x27.h
+ *
+ * Copyright (C) 2008, 2011-2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT}
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING}
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+#ifndef __GRAPHICS_NXFONTS_NXFONTS_SANS23X27_H
+#define __GRAPHICS_NXFONTS_NXFONTS_SANS23X27_H
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/* Font ID */
+
+#define NXFONT_ID FONTID_SANS23X27
+
+/* Ranges of 7-bit and 8-bit fonts */
+
+#define NXFONT_MIN7BIT 33
+#define NXFONT_MAX7BIT 126
+
+#define NXFONT_MIN8BIT 161
+#define NXFONT_MAX8BIT 255
+
+/* Maximum height and width of any glyph in the set */
+
+#define NXFONT_MAXHEIGHT 23
+#define NXFONT_MAXWIDTH 27
+
+/* The width of a space */
+
+#define NXFONT_SPACEWIDTH 4
+
+/* A sans serif font kind of like Lucida */
+
+/* Space (32) */
+
+/* Exclamation point (33) */
+#define NXFONT_METRICS_33 {1, 1, 9, 2, 5, 0}
+#define NXFONT_BITMAP_33 {0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80}
+
+/* Double quote (34) */
+#define NXFONT_METRICS_34 {1, 3, 3, 1, 4, 0}
+#define NXFONT_BITMAP_34 {0xa0, 0xa0, 0xa0}
+
+/* Number sign (35) */
+#define NXFONT_METRICS_35 {1, 7, 9, 1, 5, 0}
+#define NXFONT_BITMAP_35 {0x24, 0x24, 0x24, 0xfe, 0x28, 0xfe, 0x48, 0x48, 0x48}
+
+/* Dollar sign (36) */
+#define NXFONT_METRICS_36 {1, 6, 11, 1, 4, 0}
+#define NXFONT_BITMAP_36 {0x10, 0x78, 0x94, 0x90, 0x50, 0x30, 0x28, 0x24, 0xa4, 0x78, 0x20}
+
+/* Percent sign (37) */
+#define NXFONT_METRICS_37 {1, 7, 9, 1, 5, 0}
+#define NXFONT_BITMAP_37 {0x60, 0x92, 0x94, 0x68, 0x10, 0x2c, 0x52, 0x92, 0x0c}
+
+/* Ampersand (38) */
+#define NXFONT_METRICS_38 {1, 7, 9, 1, 5, 0}
+#define NXFONT_BITMAP_38 {0x30, 0x48, 0x48, 0x30, 0x66, 0x94, 0x88, 0x88, 0x76}
+
+/* Single quote (39) */
+#define NXFONT_METRICS_39 {1, 1, 3, 1, 4, 0}
+#define NXFONT_BITMAP_39 {0x80, 0x80, 0x80}
+
+/* Left parenthis (40) */
+#define NXFONT_METRICS_40 {1, 3, 10, 1, 5, 0}
+#define NXFONT_BITMAP_40 {0x20, 0x40, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20}
+
+/* Right parenthis (41) */
+#define NXFONT_METRICS_41 {1, 3, 11, 0, 5, 0}
+#define NXFONT_BITMAP_41 {0x80, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x40, 0x40, 0x80}
+
+/* Asterisk (42) */
+#define NXFONT_METRICS_42 {1, 5, 5, 1, 5, 0}
+#define NXFONT_BITMAP_42 {0x20, 0xa8, 0x50, 0xa8, 0x20}
+
+/* Plus (43) */
+#define NXFONT_METRICS_43 {1, 7, 7, 1, 7, 0}
+#define NXFONT_BITMAP_43 {0x10, 0x10, 0x10, 0xfe, 0x10, 0x10, 0x10}
+
+/* Comma (44) */
+#define NXFONT_METRICS_44 {1, 2, 4, 1, 12, 0}
+#define NXFONT_BITMAP_44 {0x40, 0x40, 0x80, 0x80}
+
+/* Hyphen (45) */
+#define NXFONT_METRICS_45 {1, 5, 1, 1, 10, 0}
+#define NXFONT_BITMAP_45 {0xf8}
+
+/* Period (46) */
+#define NXFONT_METRICS_46 {1, 1, 2, 2, 12, 0}
+#define NXFONT_BITMAP_46 {0x80, 0x80}
+
+/* Forward slash (47) */
+#define NXFONT_METRICS_47 {1, 4, 11, 1, 5, 0}
+#define NXFONT_BITMAP_47 {0x10, 0x10, 0x10, 0x20, 0x20, 0x20, 0x40, 0x40, 0x40, 0x80, 0x80}
+
+/* '0' (48) */
+#define NXFONT_METRICS_48 {1, 6, 9, 1, 5, 0}
+#define NXFONT_BITMAP_48 {0x30, 0x48, 0x84, 0x84, 0x84, 0x84, 0x84, 0x48, 0x30}
+
+/* '1' (49) */
+#define NXFONT_METRICS_49 {1, 5, 9, 2, 5, 0}
+#define NXFONT_BITMAP_49 {0x20, 0xe0, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xf8}
+
+/* '2' (50) */
+#define NXFONT_METRICS_50 {1, 6, 9, 1, 5, 0}
+#define NXFONT_BITMAP_50 {0x78, 0x84, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0xfc}
+
+/* '3' (51) */
+#define NXFONT_METRICS_51 {1, 6, 9, 1, 5, 0}
+#define NXFONT_BITMAP_51 {0x78, 0x84, 0x04, 0x04, 0x38, 0x04, 0x04, 0x84, 0x78}
+
+/* '4' (52) */
+#define NXFONT_METRICS_52 {1, 6, 9, 1, 5, 0}
+#define NXFONT_BITMAP_52 {0x08, 0x18, 0x28, 0x48, 0x88, 0x88, 0xfc, 0x08, 0x08}
+
+/* '5' (53) */
+#define NXFONT_METRICS_53 {1, 6, 9, 1, 5, 0}
+#define NXFONT_BITMAP_53 {0xfc, 0x80, 0x80, 0xf0, 0x08, 0x04, 0x04, 0x84, 0x78}
+
+/* '6' (54) */
+#define NXFONT_METRICS_54 {1, 6, 9, 1, 5, 0}
+#define NXFONT_BITMAP_54 {0x3c, 0x40, 0x80, 0xb8, 0xc4, 0x84, 0x84, 0x44, 0x38}
+
+/* '7' (55) */
+#define NXFONT_METRICS_55 {1, 6, 9, 1, 5, 0}
+#define NXFONT_BITMAP_55 {0xfc, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40}
+
+/* '8' (56) */
+#define NXFONT_METRICS_56 {1, 6, 9, 1, 5, 0}
+#define NXFONT_BITMAP_56 {0x78, 0x84, 0x84, 0x84, 0x78, 0x84, 0x84, 0x84, 0x78}
+
+/* '9' (57) */
+#define NXFONT_METRICS_57 {1, 6, 9, 1, 5, 0}
+#define NXFONT_BITMAP_57 {0x70, 0x88, 0x84, 0x84, 0x8c, 0x74, 0x04, 0x08, 0xf0}
+
+/* Colon (58) */
+#define NXFONT_METRICS_58 {1, 1, 7, 2, 7, 0}
+#define NXFONT_BITMAP_58 {0x80, 0x80, 0x00, 0x00, 0x00, 0x80, 0x80}
+
+/* Semicolon (59) */
+#define NXFONT_METRICS_59 {1, 2, 9, 1, 7, 0}
+#define NXFONT_BITMAP_59 {0x40, 0x40, 0x00, 0x00, 0x00, 0x40, 0x40, 0x80, 0x80}
+
+/* Less than sign (60) */
+#define NXFONT_METRICS_60 {1, 6, 7, 2, 7, 0}
+#define NXFONT_BITMAP_60 {0x04, 0x18, 0x20, 0xc0, 0x20, 0x18, 0x04}
+
+/* Equal to sign (61) */
+#define NXFONT_METRICS_61 {1, 7, 3, 1, 9, 0}
+#define NXFONT_BITMAP_61 {0xfe, 0x00, 0xfe}
+
+/* Greater than sign (62) */
+#define NXFONT_METRICS_62 {1, 6, 7, 2, 7, 0}
+#define NXFONT_BITMAP_62 {0x80, 0x60, 0x10, 0x0c, 0x10, 0x60, 0x80}
+
+/* Question mark (63) */
+#define NXFONT_METRICS_63 {1, 4, 9, 1, 5, 0}
+#define NXFONT_BITMAP_63 {0xe0, 0x10, 0x10, 0x60, 0x40, 0x40, 0x00, 0x40, 0x40}
+
+/* at sign (64) */
+#define NXFONT_METRICS_64 { 2, 9, 9, 1, 5, 0}
+#define NXFONT_BITMAP_64 {0x1e, 0x00, 0x21, 0x00, 0x4c, 0x80, 0x92, 0x80, 0xa4, 0x80, 0xad, 0x00,\
+ 0x96, 0x00, 0x40, 0x00, 0x3c, 0x00}
+
+/* 'A' (65) */
+#define NXFONT_METRICS_65 {1, 6, 9, 1, 5, 0}
+#define NXFONT_BITMAP_65 {0x30, 0x30, 0x48, 0x48, 0x48, 0xfc, 0x84, 0x84, 0x84}
+
+/* 'B' (66) */
+#define NXFONT_METRICS_66 {1, 5, 9, 1, 5, 0}
+#define NXFONT_BITMAP_66 {0xf0, 0x88, 0x88, 0x88, 0xf0, 0x88, 0x88, 0x88, 0xf0}
+
+/* 'C' (67) */
+#define NXFONT_METRICS_67 {1, 6, 9, 1, 5, 0}
+#define NXFONT_BITMAP_67 {0x3c, 0x40, 0x80, 0x80, 0x80, 0x80, 0x80, 0x40, 0x3c}
+
+/* 'D' (68) */
+#define NXFONT_METRICS_68 {1, 7, 9, 1, 5, 0}
+#define NXFONT_BITMAP_68 {0xf8, 0x84, 0x82, 0x82, 0x82, 0x82, 0x82, 0x84, 0xf8}
+
+/* 'E' (69) */
+#define NXFONT_METRICS_69 {1, 5, 9, 1, 5, 0}
+#define NXFONT_BITMAP_69 {0xf8, 0x80, 0x80, 0x80, 0xf0, 0x80, 0x80, 0x80, 0xf8}
+
+/* 'F' (70) */
+#define NXFONT_METRICS_70 {1, 4, 9, 1, 5, 0}
+#define NXFONT_BITMAP_70 {0xf0, 0x80, 0x80, 0x80, 0xf0, 0x80, 0x80, 0x80, 0x80}
+
+/* 'G' (71) */
+#define NXFONT_METRICS_71 {1, 7, 9, 1, 5, 0}
+#define NXFONT_BITMAP_71 {0x3e, 0x40, 0x80, 0x80, 0x82, 0x82, 0x82, 0x42, 0x3e}
+
+/* 'H' (72) */
+#define NXFONT_METRICS_72 {1, 7, 9, 1, 5, 0}
+#define NXFONT_BITMAP_72 {0x82, 0x82, 0x82, 0x82, 0xfe, 0x82, 0x82, 0x82, 0x82}
+
+/* 'I' (73) */
+#define NXFONT_METRICS_73 {1, 1, 9, 1, 5, 0}
+#define NXFONT_BITMAP_73 {0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}
+
+/* 'J' (74) */
+#define NXFONT_METRICS_74 {1, 3, 11, 0, 5, 0}
+#define NXFONT_BITMAP_74 {0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xc0}
+
+/* 'K' (75) */
+#define NXFONT_METRICS_75 {1, 6, 9, 1, 5, 0}
+#define NXFONT_BITMAP_75 {0x84, 0x88, 0x90, 0xa0, 0xe0, 0x90, 0x88, 0x84, 0x84}
+
+/* 'L' (76) */
+#define NXFONT_METRICS_76 {1, 5, 9, 1, 5, 0}
+#define NXFONT_BITMAP_76 {0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xf8}
+
+/* 'M' (77) */
+#define NXFONT_METRICS_77 {1, 8, 9, 1, 5, 0}
+#define NXFONT_BITMAP_77 {0x81, 0xc3, 0xc3, 0xa5, 0xa5, 0x99, 0x99, 0x81, 0x81}
+
+/* 'N' (78) */
+#define NXFONT_METRICS_78 {1, 7, 9, 1, 5, 0}
+#define NXFONT_BITMAP_78 {0x82, 0xc2, 0xc2, 0xa2, 0x92, 0x8a, 0x86, 0x86, 0x82}
+
+/* 'O' (79) */
+#define NXFONT_METRICS_79 {1, 7, 9, 1, 5, 0}
+#define NXFONT_BITMAP_79 {0x38, 0x44, 0x82, 0x82, 0x82, 0x82, 0x82, 0x44, 0x38}
+
+/* 'P' (80) */
+#define NXFONT_METRICS_80 {1, 5, 9, 1, 5, 0}
+#define NXFONT_BITMAP_80 {0xf0, 0x88, 0x88, 0x88, 0x88, 0xf0, 0x80, 0x80, 0x80}
+
+/* 'Q' (81) */
+#define NXFONT_METRICS_81 {1, 8, 11, 1, 5, 0}
+#define NXFONT_BITMAP_81 {0x38, 0x44, 0x82, 0x82, 0x82, 0x82, 0x82, 0x44, 0x38, 0x04, 0x03}
+
+/* 'R' (82) */
+#define NXFONT_METRICS_82 {1, 6, 9, 1, 5, 0}
+#define NXFONT_BITMAP_82 {0xf0, 0x88, 0x88, 0x88, 0xf0, 0x90, 0x88, 0x84, 0x84}
+
+/* 'S' (83) */
+#define NXFONT_METRICS_83 {1, 5, 9, 1, 5, 0}
+#define NXFONT_BITMAP_83 {0x78, 0x80, 0x80, 0x40, 0x20, 0x10, 0x08, 0x08, 0xf0}
+
+/* 'T' (84) */
+#define NXFONT_METRICS_84 {1, 7, 9, 1, 5, 0}
+#define NXFONT_BITMAP_84 {0xfe, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10}
+
+/* 'U' (85) */
+#define NXFONT_METRICS_85 {1, 6, 9, 1, 5, 0}
+#define NXFONT_BITMAP_85 {0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x48, 0x30}
+
+/* 'V' (86) */
+#define NXFONT_METRICS_86 {1, 7, 9, 1, 5, 0}
+#define NXFONT_BITMAP_86 {0x82, 0x82, 0x44, 0x44, 0x44, 0x28, 0x28, 0x10, 0x10}
+
+/* 'W' (87) */
+#define NXFONT_METRICS_87 {2, 9, 9, 1, 5, 0}
+#define NXFONT_BITMAP_87 {0x80, 0x80, 0x88, 0x80, 0x88, 0x80, 0x55, 0x00, 0x55, 0x00, 0x55, 0x00,\
+ 0x22, 0x00, 0x22, 0x00, 0x22, 0x00}
+
+/* 'X' (88) */
+#define NXFONT_METRICS_88 {1, 6, 9, 1, 5, 0}
+#define NXFONT_BITMAP_88 {0x84, 0x84, 0x48, 0x28, 0x30, 0x50, 0x48, 0x84, 0x84}
+
+/* 'Y' (89) */
+#define NXFONT_METRICS_89 {1, 7, 9, 0, 5, 0}
+#define NXFONT_BITMAP_89 {0x82, 0x82, 0x44, 0x44, 0x28, 0x10, 0x10, 0x10, 0x10}
+
+/* 'Z' (90) */
+#define NXFONT_METRICS_90 {1, 5, 9, 1, 5, 0}
+#define NXFONT_BITMAP_90 {0xf8, 0x08, 0x10, 0x10, 0x20, 0x40, 0x40, 0x80, 0xf8}
+
+/* Left bracket (91) */
+#define NXFONT_METRICS_91 {1, 2, 11, 1, 5, 0}
+#define NXFONT_BITMAP_91 {0xc0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xc0}
+
+/* Back slash (92) */
+#define NXFONT_METRICS_92 {1, 4, 11, 1, 5, 0}
+#define NXFONT_BITMAP_92 {0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x10, 0x10}
+
+/* Right bracket (93) */
+#define NXFONT_METRICS_93 {1, 2, 11, 1, 5, 0}
+#define NXFONT_BITMAP_93 {0xc0, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0xc0}
+
+/* ascii circumflex (94) */
+#define NXFONT_METRICS_94 {1, 6, 6, 1, 5, 0}
+#define NXFONT_BITMAP_94 {0x30, 0x30, 0x48, 0x48, 0x84, 0x84}
+
+/* Underscore (95) */
+#define NXFONT_METRICS_95 {1, 6, 1, 0, 14, 0}
+#define NXFONT_BITMAP_95 {0xfc}
+
+/* Grave (96) */
+#define NXFONT_METRICS_96 {1, 3, 2, 2, 4, 0}
+#define NXFONT_BITMAP_96 {0xc0, 0x20}
+
+/* 'a' (97) */
+#define NXFONT_METRICS_97 {1, 6, 7, 1, 7, 0}
+#define NXFONT_BITMAP_97 {0x70, 0x88, 0x08, 0x78, 0x88, 0x88, 0x74}
+
+/* 'b' (98) */
+#define NXFONT_METRICS_98 {1, 6, 10, 1, 4, 0}
+#define NXFONT_BITMAP_98 {0x80, 0x80, 0x80, 0xb8, 0xc4, 0x84, 0x84, 0x84, 0xc4, 0xb8}
+
+/* 'c' (99) */
+#define NXFONT_METRICS_99 {1, 4, 7, 1, 7, 0}
+#define NXFONT_BITMAP_99 {0x70, 0x80, 0x80, 0x80, 0x80, 0x80, 0x70}
+
+/* 'd' (100) */
+#define NXFONT_METRICS_100 {1, 6, 10, 1, 4, 0}
+#define NXFONT_BITMAP_100 {0x04, 0x04, 0x04, 0x74, 0x8c, 0x84, 0x84, 0x84, 0x8c, 0x74}
+
+/* 'e' (101) */
+#define NXFONT_METRICS_101 {1, 5, 7, 1, 7, 0}
+#define NXFONT_BITMAP_101 {0x70, 0x88, 0x88, 0xf8, 0x80, 0x80, 0x78}
+
+/* 'f' (102) */
+#define NXFONT_METRICS_102 {1, 4, 10, 0, 4, 0}
+#define NXFONT_BITMAP_102 {0x30, 0x40, 0x40, 0x40, 0xf0, 0x40, 0x40, 0x40, 0x40, 0x40}
+
+/* 'g' (103) */
+#define NXFONT_METRICS_103 {1, 5, 9, 1, 7, 0}
+#define NXFONT_BITMAP_103 {0x68, 0x98, 0x88, 0x88, 0x98, 0x68, 0x08, 0x08, 0xf0}
+
+/* 'h' (104) */
+#define NXFONT_METRICS_104 {1, 5, 9, 1, 5, 0}
+#define NXFONT_BITMAP_104 {0x80, 0x80, 0xb0, 0xc8, 0x88, 0x88, 0x88, 0x88, 0x88}
+
+/* 'i' (105) */
+#define NXFONT_METRICS_105 {1, 1, 9, 1, 5, 0}
+#define NXFONT_BITMAP_105 {0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}
+
+/* 'j' (106) */
+#define NXFONT_METRICS_106 {1, 3, 11, 0, 5, 0}
+#define NXFONT_BITMAP_106 {0x20, 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xc0}
+
+/* 'k' (107) */
+#define NXFONT_METRICS_107 {1, 6, 10, 1, 4, 0}
+#define NXFONT_BITMAP_107 {0x80, 0x80, 0x80, 0x88, 0x90, 0xa0, 0xe0, 0x90, 0x88, 0x84}
+
+/* 'l' (108) */
+#define NXFONT_METRICS_108 {1, 1, 10, 1, 4, 0}
+#define NXFONT_BITMAP_108 {0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}
+
+/* 'm' (109) */
+#define NXFONT_METRICS_109 {2, 9, 7, 1, 7, 0}
+#define NXFONT_BITMAP_109 {0xb3, 0x00, 0xcc, 0x80, 0x88, 0x80, 0x88, 0x80, 0x88, 0x80, 0x88, 0x80,\
+ 0x88, 0x80}
+/* 'n' (110) */
+#define NXFONT_METRICS_110 {1, 5, 7, 1, 7, 0}
+#define NXFONT_BITMAP_110 {0xb0, 0xc8, 0x88, 0x88, 0x88, 0x88, 0x88}
+
+/* 'o' (111) */
+#define NXFONT_METRICS_111 {1, 6, 7, 1, 7, 0}
+#define NXFONT_BITMAP_111 {0x30, 0x48, 0x84, 0x84, 0x84, 0x48, 0x30}
+
+/* 'p' (112) */
+#define NXFONT_METRICS_112 {1, 6, 9, 1, 7, 0}
+#define NXFONT_BITMAP_112 {0xb8, 0xc4, 0x84, 0x84, 0x84, 0xc4, 0xb8, 0x80, 0x80}
+
+/* 'q' (113) */
+#define NXFONT_METRICS_113 {1, 6, 9, 1, 7, 0}
+#define NXFONT_BITMAP_113 {0x74, 0x8c, 0x84, 0x84, 0x84, 0x9c, 0x74, 0x04, 0x04}
+
+/* 'r' (114) */
+#define NXFONT_METRICS_114 {1, 4, 7, 1, 7, 0}
+#define NXFONT_BITMAP_114 {0xb0, 0xc0, 0x80, 0x80, 0x80, 0x80, 0x80}
+
+/* 's' (115) */
+#define NXFONT_METRICS_115 {1, 4, 7, 1, 7, 0}
+#define NXFONT_BITMAP_115 {0x70, 0x80, 0x80, 0x60, 0x10, 0x10, 0xe0}
+
+/* 't' (116) */
+#define NXFONT_METRICS_116 {1, 4, 9, 0, 5, 0}
+#define NXFONT_BITMAP_116 {0x40, 0x40, 0xf0, 0x40, 0x40, 0x40, 0x40, 0x40, 0x30}
+
+/* 'u' (117) */
+#define NXFONT_METRICS_117 {1, 5, 7, 1, 7, 0}
+#define NXFONT_BITMAP_117 {0x88, 0x88, 0x88, 0x88, 0x88, 0x98, 0x68}
+
+/* 'v' (118) */
+#define NXFONT_METRICS_118 {1, 5, 7, 1, 7, 0}
+#define NXFONT_BITMAP_118 {0x88, 0x88, 0x88, 0x50, 0x50, 0x20, 0x20}
+
+/* 'w' (119) */
+#define NXFONT_METRICS_119 {2, 9, 7, 0, 7, 0}
+#define NXFONT_BITMAP_119 {0x80, 0x80, 0x88, 0x80, 0x49, 0x00, 0x55, 0x00, 0x55, 0x00, 0x22, 0x00,\
+ 0x22, 0x00}
+
+/* 'x' (120) */
+#define NXFONT_METRICS_120 {1, 5, 7, 1, 7, 0}
+#define NXFONT_BITMAP_120 {0x88, 0x88, 0x50, 0x20, 0x50, 0x88, 0x88}
+
+/* 'y' (121) */
+#define NXFONT_METRICS_121 {1, 5, 9, 1, 7, 0}
+#define NXFONT_BITMAP_121 {0x88, 0x88, 0x88, 0x50, 0x50, 0x20, 0x20, 0x40, 0xc0}
+
+/* 'z' (122) */
+#define NXFONT_METRICS_122 {1, 5, 7, 1, 7, 0}
+#define NXFONT_BITMAP_122 {0xf8, 0x08, 0x10, 0x20, 0x40, 0x80, 0xf8}
+
+/* Left brace (123) */
+#define NXFONT_METRICS_123 {1, 4, 11, 0, 5, 0}
+#define NXFONT_BITMAP_123 {0x30, 0x40, 0x40, 0x40, 0x20, 0xc0, 0x20, 0x40, 0x40, 0x40, 0x30}
+
+/* Vertical bar (124) */
+#define NXFONT_METRICS_124 {1, 1, 11, 2, 5, 0}
+#define NXFONT_BITMAP_124 {0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}
+
+/* Right brace (125) */
+#define NXFONT_METRICS_125 {1, 4, 11, 0, 5, 0}
+#define NXFONT_BITMAP_125 {0xc0, 0x20, 0x20, 0x20, 0x40, 0x30, 0x40, 0x20, 0x20, 0x20, 0xc0}
+
+/* Tilde (126) */
+#define NXFONT_METRICS_126 {1, 6, 3, 1, 9, 0}
+#define NXFONT_BITMAP_126 {0x44, 0xb4, 0x88}
+
+/* Space (160) */
+
+/* Down exclamation point (161) */
+#define NXFONT_METRICS_161 {1, 1, 9, 1, 7, 0}
+#define NXFONT_BITMAP_161 {0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}
+
+/* Cent (162) */
+#define NXFONT_METRICS_162 {1, 6, 9, 1, 5, 0}
+#define NXFONT_BITMAP_162 {0x10, 0x3c, 0x50, 0x90, 0x90, 0x90, 0x50, 0x3c, 0x10}
+
+/* Sterling (163) */
+#define NXFONT_METRICS_163 {1, 6, 9, 1, 5, 0}
+#define NXFONT_BITMAP_163 {0x1c, 0x20, 0x20, 0x20, 0x78, 0x20, 0x20, 0x40, 0xfc}
+
+/* Currency (164) */
+#define NXFONT_METRICS_164 {1, 5, 7, 1, 6, 0}
+#define NXFONT_BITMAP_164 {0x88, 0x70, 0x88, 0x88, 0x88, 0x70, 0x88}
+
+/* Yen (165) */
+#define NXFONT_METRICS_165 {1, 7, 9, 0, 5, 0}
+#define NXFONT_BITMAP_165 {0x82, 0x44, 0x28, 0x10, 0x7c, 0x10, 0x7c, 0x10, 0x10}
+
+/* Broken bar (166) */
+#define NXFONT_METRICS_166 {1, 1, 11, 2, 5, 0}
+#define NXFONT_BITMAP_166 {0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80}
+
+/* Section (167) */
+#define NXFONT_METRICS_167 {1, 5, 11, 1, 5, 0}
+#define NXFONT_BITMAP_167 {0x78, 0x80, 0x80, 0x60, 0x98, 0x88, 0xc8, 0x30, 0x08, 0x08, 0xf0}
+
+/* Dieresis (168) */
+#define NXFONT_METRICS_168 {1, 3, 2, 2, 4, 0}
+#define NXFONT_BITMAP_168 {0xa0, 0xa0}
+
+/* Copyright (169) */
+#define NXFONT_METRICS_169 {2, 9, 9, 1, 5, 0}
+#define NXFONT_BITMAP_169 {0x3e, 0x00, 0x41, 0x00, 0x9c, 0x80, 0xa0, 0x80, 0xa0, 0x80, 0xa0, 0x80,\
+ 0x9c, 0x80, 0x41, 0x00, 0x3e, 0x00}
+/* Ord feminine (170) */
+#define NXFONT_METRICS_170 {1, 3, 5, 1, 4, 0}
+#define NXFONT_BITMAP_170 {0xc0, 0x20, 0xe0, 0xa0, 0xe0}
+
+/* Left guillemot (171) */
+#define NXFONT_METRICS_171 {1, 4, 6, 1, 8, 0}
+#define NXFONT_BITMAP_171 {0x50, 0x50, 0xa0, 0xa0, 0x50, 0x50}
+
+/* Logical not (172) */
+#define NXFONT_METRICS_172 {1, 7, 3, 1, 9, 0}
+#define NXFONT_BITMAP_172 {0xfe, 0x02, 0x02}
+
+/* Hyphen (173) */
+#define NXFONT_METRICS_173 {1, 5, 1, 1, 10, 0}
+#define NXFONT_BITMAP_173 {0xf8}
+
+/* Registered (174) */
+#define NXFONT_METRICS_174 {1, 6, 6, 1, 5, 0}
+#define NXFONT_BITMAP_174 {0x78, 0xb4, 0xb4, 0xac, 0xac, 0x78}
+
+/* Macron (175) */
+#define NXFONT_METRICS_175 {1, 6, 1, 0, 4, 0}
+#define NXFONT_BITMAP_175 {0xfc}
+
+/* Degree (176) */
+#define NXFONT_METRICS_176 {1, 3, 3, 0, 5, 0}
+#define NXFONT_BITMAP_176 {0x40, 0xa0, 0x40}
+
+/* plus/minus (177) */
+#define NXFONT_METRICS_177 {1, 7, 7, 1, 7, 0}
+#define NXFONT_BITMAP_177 {0x10, 0x10, 0xfe, 0x10, 0x10, 0x00, 0xfe}
+
+/* '2' superior (178) */
+#define NXFONT_METRICS_178 {1, 3, 5, 1, 5, 0}
+#define NXFONT_BITMAP_178 {0xc0, 0x20, 0x60, 0x80, 0xe0}
+
+/* '3' superior (179) */
+#define NXFONT_METRICS_179 {1, 3, 5, 1, 5, 0}
+#define NXFONT_BITMAP_179 {0xc0, 0x20, 0xc0, 0x20, 0xc0}
+
+/* Acute (180) */
+#define NXFONT_METRICS_180 {1, 3, 2, 2, 4, 0}
+#define NXFONT_BITMAP_180 {0x60, 0x80}
+
+/* Mu (181) */
+#define NXFONT_METRICS_181 {1, 5, 9, 1, 7, 0}
+#define NXFONT_BITMAP_181 {0x88, 0x88, 0x88, 0x88, 0x88, 0xd8, 0xa8, 0x80, 0x80}
+
+/* Paragraph (182) */
+#define NXFONT_METRICS_182 {1, 5, 11, 1, 5, 0}
+#define NXFONT_BITMAP_182 {0x78, 0xe8, 0xe8, 0xe8, 0x68, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28}
+
+/* Centered period (183) */
+#define NXFONT_METRICS_183 {1, 1, 2, 2, 9, 0}
+#define NXFONT_BITMAP_183 {0x80, 0x80}
+
+/* Cedilla (184) */
+#define NXFONT_METRICS_184 {1, 3, 2, 2, 14, 0}
+#define NXFONT_BITMAP_184 {0x20, 0xc0}
+
+/* '1' superior (185) */
+#define NXFONT_METRICS_185 {1, 2, 5, 1, 5, 0}
+#define NXFONT_BITMAP_185 {0x40, 0xc0, 0x40, 0x40, 0x40}
+
+/* Ord masculine (186) */
+#define NXFONT_METRICS_186 {1, 4, 5, 1, 5, 0}
+#define NXFONT_BITMAP_186 {0x60, 0x90, 0x90, 0x90, 0x60}
+
+/* Right guillemot (187) */
+#define NXFONT_METRICS_187 {1, 4, 6, 1, 8, 0}
+#define NXFONT_BITMAP_187 {0xa0, 0xa0, 0x50, 0x50, 0xa0, 0xa0}
+
+/* One quarter (188) */
+#define NXFONT_METRICS_188 {1, 8, 10, 1, 5, 0}
+#define NXFONT_BITMAP_188 {0x42, 0xc4, 0x44, 0x48, 0x52, 0x16, 0x2a, 0x4f, 0x42, 0x80}
+
+/* One half (189) */
+#define NXFONT_METRICS_189 {1, 8, 10, 1, 5, 0}
+#define NXFONT_BITMAP_189 {0x42, 0xc4, 0x44, 0x48, 0x56, 0x11, 0x22, 0x44, 0x47, 0x80}
+
+/* Three quarters (190) */
+#define NXFONT_METRICS_190 {1, 8, 10, 1, 5, 0}
+#define NXFONT_BITMAP_190 {0xc2, 0x24, 0xc4, 0x28, 0xd2, 0x16, 0x2a, 0x4f, 0x42, 0x80}
+
+/* Upside down question mark (191) */
+#define NXFONT_METRICS_191 {1, 5, 9, 0, 7, 0}
+#define NXFONT_BITMAP_191 {0x20, 0x20, 0x00, 0x20, 0x20, 0x60, 0x80, 0x80, 0x78}
+
+/* Agrave (192) */
+#define NXFONT_METRICS_192 {1, 6, 12, 1, 2, 0}
+#define NXFONT_BITMAP_192 {0x60, 0x10, 0x00, 0x30, 0x30, 0x48, 0x48, 0x48, 0xfc, 0x84, 0x84, 0x84}
+
+/* 'A' acute (193) */
+#define NXFONT_METRICS_193 {1, 6, 12, 1, 2, 0}
+#define NXFONT_BITMAP_193 {0x18, 0x20, 0x00, 0x30, 0x30, 0x48, 0x48, 0x48, 0xfc, 0x84, 0x84, 0x84}
+
+/* 'A' circumflex (194) */
+#define NXFONT_METRICS_194 {1, 6, 12, 1, 2, 0}
+#define NXFONT_BITMAP_194 {0x10, 0x20, 0x00, 0x30, 0x30, 0x48, 0x48, 0x48, 0xfc, 0x84, 0x84, 0x84}
+
+/* 'A' tilde (195) */
+#define NXFONT_METRICS_195 {1, 6, 12, 1, 2, 0}
+#define NXFONT_BITMAP_195 {0x34, 0x48, 0x00, 0x30, 0x30, 0x48, 0x48, 0x48, 0xfc, 0x84, 0x84, 0x84}
+
+/* 'A' dieresis (196) */
+#define NXFONT_METRICS_196 {1, 6, 12, 1, 2, 0}
+#define NXFONT_BITMAP_196 {0x48, 0x48, 0x00, 0x30, 0x30, 0x48, 0x48, 0x48, 0xfc, 0x84, 0x84, 0x84}
+
+/* 'A'ring (197) */
+#define NXFONT_METRICS_197 {1, 6, 12, 1, 2, 0}
+#define NXFONT_BITMAP_197 {0x30, 0x48, 0x48, 0x30, 0x30, 0x48, 0x48, 0x48, 0xfc, 0x84, 0x84, 0x84}
+
+/* 'AE' (198) */
+#define NXFONT_METRICS_198 {2, 9, 9, 1, 5, 0}
+#define NXFONT_BITMAP_198 {0x0f, 0x80, 0x14, 0x00, 0x14, 0x00, 0x24, 0x00, 0x27, 0x80, 0x7c, 0x00,\
+ 0x44, 0x00, 0x84, 0x00, 0x87, 0x80}
+
+/* 'C' cedilla (199) */
+#define NXFONT_METRICS_199 {1, 6, 11, 1, 5, 0}
+#define NXFONT_BITMAP_199 {0x3c, 0x40, 0x80, 0x80, 0x80, 0x80, 0x80, 0x40, 0x3c, 0x08, 0x30}
+
+/* 'E' grave (200) */
+#define NXFONT_METRICS_200 {1, 5, 12, 1, 2, 0}
+#define NXFONT_BITMAP_200 {0xc0, 0x20, 0x00, 0xf8, 0x80, 0x80, 0x80, 0xf0, 0x80, 0x80, 0x80, 0xf8}
+
+/* 'E' acute (201) */
+#define NXFONT_METRICS_201 {1, 5, 12, 1, 2, 0}
+#define NXFONT_BITMAP_201 {0x18, 0x20, 0x00, 0xf8, 0x80, 0x80, 0x80, 0xf0, 0x80, 0x80, 0x80, 0xf8}
+
+/* 'E' circumflex (202) */
+#define NXFONT_METRICS_202 {1, 5, 12, 1, 2, 0}
+#define NXFONT_BITMAP_202 {0x20, 0x50, 0x00, 0xf8, 0x80, 0x80, 0x80, 0xf0, 0x80, 0x80, 0x80, 0xf8}
+
+/* 'E' dieresis (203) */
+#define NXFONT_METRICS_203 {1, 5, 12, 1, 2, 0}
+#define NXFONT_BITMAP_203 {0x50, 0x50, 0x00, 0xf8, 0x80, 0x80, 0x80, 0xf0, 0x80, 0x80, 0x80, 0xf8}
+
+/* 'I' grave (204) */
+#define NXFONT_METRICS_204 {1, 3, 12, 0, 2, 0}
+#define NXFONT_BITMAP_204 {0xc0, 0x20, 0x00, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40}
+
+/* 'I' acute (205) */
+#define NXFONT_METRICS_205 {1, 3, 12, 0, 2, 0}
+#define NXFONT_BITMAP_205 {0x60, 0x80, 0x00, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40}
+
+/* 'I' circumflex (206) */
+#define NXFONT_METRICS_206 {1, 3, 12, 0, 2, 0}
+#define NXFONT_BITMAP_206 {0x40, 0xa0, 0x00, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40}
+
+/* 'I' dieresis (207) */
+#define NXFONT_METRICS_207 {1, 3, 12, 0, 2, 0}
+#define NXFONT_BITMAP_207 {0xa0, 0xa0, 0x00, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40}
+
+/* 'E' th (208) */
+#define NXFONT_METRICS_208 {1, 8, 9, 0, 5, 0}
+#define NXFONT_BITMAP_208 {0x7c, 0x42, 0x41, 0x41, 0xf1, 0x41, 0x41, 0x42, 0x7c}
+
+/* 'N' tilde (209) */
+#define NXFONT_METRICS_209 {1, 7, 12, 1, 2, 0}
+#define NXFONT_BITMAP_209 {0x34, 0x48, 0x00, 0x82, 0xc2, 0xe2, 0xa2, 0x92, 0x8a, 0x86, 0x86, 0x82}
+
+/* 'O' grave (210) */
+#define NXFONT_METRICS_210 {1, 7, 12, 1, 2, 0}
+#define NXFONT_BITMAP_210 {0x30, 0x08, 0x00, 0x38, 0x44, 0x82, 0x82, 0x82, 0x82, 0x82, 0x44, 0x38}
+
+/* 'O' acute (211) */
+#define NXFONT_METRICS_211 {1, 7, 12, 1, 2, 0}
+#define NXFONT_BITMAP_211 {0x18, 0x20, 0x00, 0x38, 0x44, 0x82, 0x82, 0x82, 0x82, 0x82, 0x44, 0x38}
+
+/* 'O' circumflex (212) */
+#define NXFONT_METRICS_212 {1, 7, 12, 1, 2, 0}
+#define NXFONT_BITMAP_212 {0x10, 0x28, 0x00, 0x38, 0x44, 0x82, 0x82, 0x82, 0x82, 0x82, 0x44, 0x38}
+
+/* 'O' tilde (213) */
+#define NXFONT_METRICS_213 {1, 7, 12, 1, 2, 0}
+#define NXFONT_BITMAP_213 {0x34, 0x48, 0x00, 0x38, 0x44, 0x82, 0x82, 0x82, 0x82, 0x82, 0x44, 0x38}
+
+/* 'O' dieresis (214) */
+#define NXFONT_METRICS_214 {1, 7, 12, 1, 2, 0}
+#define NXFONT_BITMAP_214 {0x44, 0x44, 0x00, 0x38, 0x44, 0x82, 0x82, 0x82, 0x82, 0x82, 0x44, 0x38}
+
+/* Multiply sign (215) */
+#define NXFONT_METRICS_215 {1, 7, 7, 1, 7, 0}
+#define NXFONT_BITMAP_215 {0x82, 0x44, 0x28, 0x10, 0x28, 0x44, 0x82}
+
+/* 'O' slash (216) */
+#define NXFONT_METRICS_216 {1, 7, 9, 1, 5, 0}
+#define NXFONT_BITMAP_216 {0x3a, 0x44, 0x8a, 0x8a, 0x92, 0xa2, 0xa2, 0x44, 0xb8}
+
+/*'U' grave (217) */
+#define NXFONT_METRICS_217 {1, 6, 12, 1, 2, 0}
+#define NXFONT_BITMAP_217 {0x60, 0x10, 0x00, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x48, 0x30}
+
+/* 'U' acute (218) */
+#define NXFONT_METRICS_218 {1, 6, 12, 1, 2, 0}
+#define NXFONT_BITMAP_218 {0x18, 0x20, 0x00, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x48, 0x30}
+
+/* 'U' circumflex (219) */
+#define NXFONT_METRICS_219 {1, 6, 12, 1, 2, 0}
+#define NXFONT_BITMAP_219 {0x10, 0x28, 0x00, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x48, 0x30}
+
+/* 'U' dieresis (220) */
+#define NXFONT_METRICS_220 {1, 6, 12, 1, 2, 0}
+#define NXFONT_BITMAP_220 {0x48, 0x48, 0x00, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x48, 0x30}
+
+/* 'Y' acute (221) */
+#define NXFONT_METRICS_221 {1, 7, 12, 0, 2, 0}
+#define NXFONT_BITMAP_221 {0x18, 0x20, 0x00, 0x82, 0x82, 0x44, 0x44, 0x28, 0x10, 0x10, 0x10, 0x10}
+
+/* 'T' horn (222) */
+#define NXFONT_METRICS_222 {1, 5, 9, 1, 5, 0}
+#define NXFONT_BITMAP_222 {0x80, 0x80, 0xf0, 0x88, 0x88, 0x88, 0xf0, 0x80, 0x80}
+
+/* germandbls (223) */
+#define NXFONT_METRICS_223 {1, 5, 10, 1, 4, 0}
+#define NXFONT_BITMAP_223 {0x60, 0x90, 0x90, 0xa0, 0xa0, 0x90, 0x88, 0x88, 0x88, 0xb0}
+
+/* 'a' grave (224) */
+#define NXFONT_METRICS_224 {1, 6, 10, 1, 4, 0}
+#define NXFONT_BITMAP_224 {0x60, 0x10, 0x00, 0x70, 0x88, 0x08, 0x78, 0x88, 0x88, 0x74}
+
+/* 'a' acute (225) */
+#define NXFONT_METRICS_225 {1, 6, 10, 1, 4, 0}
+#define NXFONT_BITMAP_225 {0x18, 0x20, 0x00, 0x70, 0x88, 0x08, 0x78, 0x88, 0x88, 0x74}
+
+/* 'a' circumflex (226) */
+#define NXFONT_METRICS_226 {1, 6, 10, 1, 4, 0}
+#define NXFONT_BITMAP_226 {0x20, 0x50, 0x00, 0x70, 0x88, 0x08, 0x78, 0x88, 0x88, 0x74}
+
+/* 'a' tilde (227) */
+#define NXFONT_METRICS_227 {1, 6, 10, 1, 4, 0}
+#define NXFONT_BITMAP_227 {0x68, 0x90, 0x00, 0x70, 0x88, 0x08, 0x78, 0x88, 0x88, 0x74}
+
+/* 'a' dieresis (228) */
+#define NXFONT_METRICS_228 {1, 6, 10, 1, 4, 0}
+#define NXFONT_BITMAP_228 {0x50, 0x50, 0x00, 0x70, 0x88, 0x08, 0x78, 0x88, 0x88, 0x74}
+
+/* a' ring (229) */
+#define NXFONT_METRICS_229 {1, 6, 11, 1, 3, 0}
+#define NXFONT_BITMAP_229 {0x20, 0x50, 0x20, 0x00, 0x70, 0x88, 0x08, 0x78, 0x88, 0x88, 0x74}
+
+/* 'ae' (230) */
+#define NXFONT_METRICS_230 {1, 8, 7, 1, 7, 0}
+#define NXFONT_BITMAP_230 {0x76, 0x89, 0x09, 0x7f, 0x88, 0x88, 0x77}
+
+/* 'c' cedilla (231) */
+#define NXFONT_METRICS_231 {1, 4, 9, 1, 7, 0}
+#define NXFONT_BITMAP_231 {0x70, 0x80, 0x80, 0x80, 0x80, 0x80, 0x70, 0x20, 0xc0}
+
+/* 'e' grave (232) */
+#define NXFONT_METRICS_232 {1, 5, 10, 1, 4, 0}
+#define NXFONT_BITMAP_232 {0x60, 0x10, 0x00, 0x70, 0x88, 0x88, 0xf8, 0x80, 0x80, 0x78}
+
+/* 'e' acute (233) */
+#define NXFONT_METRICS_233 {1, 5, 10, 1, 4, 0}
+#define NXFONT_BITMAP_233 {0x18, 0x20, 0x00, 0x70, 0x88, 0x88, 0xf8, 0x80, 0x80, 0x78}
+
+/* 'e' circumflex (234) */
+#define NXFONT_METRICS_234 {1, 5, 10, 1, 4, 0}
+#define NXFONT_BITMAP_234 {0x20, 0x50, 0x00, 0x70, 0x88, 0x88, 0xf8, 0x80, 0x80, 0x78}
+
+/* 'e' dieresis (235) */
+#define NXFONT_METRICS_235 {1, 5, 10, 1, 4, 0}
+#define NXFONT_BITMAP_235 {0x50, 0x50, 0x00, 0x70, 0x88, 0x88, 0xf8, 0x80, 0x80, 0x78}
+
+/* 'i' grave (236) */
+#define NXFONT_METRICS_236 {1, 3, 10, 0, 4, 0}
+#define NXFONT_BITMAP_236 {0xc0, 0x20, 0x00, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40}
+
+/* 'i' acute (237) */
+#define NXFONT_METRICS_237 {1, 3, 10, 0, 4, 0}
+#define NXFONT_BITMAP_237 {0x60, 0x80, 0x00, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40}
+
+/* 'i' circumflex (238) */
+#define NXFONT_METRICS_238 {1, 3, 10, 0, 4, 0}
+#define NXFONT_BITMAP_238 {0x40, 0xa0, 0x00, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40}
+
+/* 'i' dieresis (239) */
+#define NXFONT_METRICS_239 {1, 3, 10, 0, 4, 0}
+#define NXFONT_BITMAP_239 {0xa0, 0xa0, 0x00, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40}
+
+/* 'e' th (240) */
+#define NXFONT_METRICS_240 {1, 6, 10, 1, 4, 0}
+#define NXFONT_BITMAP_240 {0xd0, 0x20, 0x50, 0x10, 0x68, 0x84, 0x84, 0x84, 0x48, 0x30}
+
+/* 'n' tilde (241) */
+#define NXFONT_METRICS_241 {1, 5, 10, 1, 4, 0}
+#define NXFONT_BITMAP_241 {0x68, 0x90, 0x00, 0xb0, 0xc8, 0x88, 0x88, 0x88, 0x88, 0x88}
+
+/* 'o' grave (242) */
+#define NXFONT_METRICS_242 {1, 6, 10, 1, 4, 0}
+#define NXFONT_BITMAP_242 {0x60, 0x10, 0x00, 0x30, 0x48, 0x84, 0x84, 0x84, 0x48, 0x30}
+
+/* 'o' acute (243) */
+#define NXFONT_METRICS_243 {1, 6, 10, 1, 4, 0}
+#define NXFONT_BITMAP_243 {0x18, 0x20, 0x00, 0x30, 0x48, 0x84, 0x84, 0x84, 0x48, 0x30}
+
+/* 'o' circumflex (244) */
+#define NXFONT_METRICS_244 {1, 6, 10, 1, 4, 0}
+#define NXFONT_BITMAP_244 {0x10, 0x28, 0x00, 0x30, 0x48, 0x84, 0x84, 0x84, 0x48, 0x30}
+
+/* 'o' tilde (245) */
+#define NXFONT_METRICS_245 {1, 6, 10, 1, 4, 0}
+#define NXFONT_BITMAP_245 {0x34, 0x48, 0x00, 0x30, 0x48, 0x84, 0x84, 0x84, 0x48, 0x30}
+
+/* 'o' dieresis (246) */
+#define NXFONT_METRICS_246 {1, 6, 10, 1, 4, 0}
+#define NXFONT_BITMAP_246 {0x48, 0x48, 0x00, 0x30, 0x48, 0x84, 0x84, 0x84, 0x48, 0x30}
+
+/* Division sign (247) */
+#define NXFONT_METRICS_247 {1, 7, 7, 1, 7, 0}
+#define NXFONT_BITMAP_247 {0x10, 0x10, 0x00, 0xfe, 0x00, 0x10, 0x10}
+
+/* 'o' slash (248) */
+#define NXFONT_METRICS_248 {1, 6, 7, 1, 7, 0}
+#define NXFONT_BITMAP_248 {0x34, 0x48, 0x94, 0x94, 0xa4 0x48, 0xb0}
+
+/* 'u' grave (249) */
+#define NXFONT_METRICS_249 {1, 5, 10, 1, 4, 0}
+#define NXFONT_BITMAP_249 {0xc0, 0x20, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x98, 0x68}
+
+/* 'u' acute (250) */
+#define NXFONT_METRICS_250 {1, 5, 10, 1, 4, 0}
+#define NXFONT_BITMAP_250 {0x18, 0x20, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x98, 0x68}
+
+/* 'u' circumflex (251) */
+#define NXFONT_METRICS_251 {1, 5, 10, 1, 4, 0}
+#define NXFONT_BITMAP_251 {0x20, 0x50, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x98, 0x68}
+
+/* 'u' dieresis (252) */
+#define NXFONT_METRICS_252 {1, 5, 10, 1, 4, 0}
+#define NXFONT_BITMAP_252 {0x50, 0x50, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x98, 0x68}
+
+/* 'y' acute (253) */
+#define NXFONT_METRICS_253 {1, 5, 12, 1, 4, 0}
+#define NXFONT_BITMAP_253 {0x18, 0x20, 0x00, 0x88, 0x88, 0x88, 0x50, 0x50, 0x20, 0x20, 0x40, 0xc0}
+
+/* 't' horn (254) */
+#define NXFONT_METRICS_254 {1, 6, 12, 1, 4, 0}
+#define NXFONT_BITMAP_254 {0x80, 0x80, 0x80, 0xb8, 0xc4, 0x84, 0x84, 0x84, 0xc4, 0xb8, 0x80, 0x80}
+
+/* 'y' dieresis (255) */
+#define NXFONT_METRICS_255 {1, 5, 12, 1, 4, 0}
+#define NXFONT_BITMAP_255 {0x50, 0x50, 0x00, 0x88, 0x88, 0x88, 0x50, 0x50, 0x20, 0x20, 0x40, 0xc0}
+
+/****************************************************************************
+ * Public Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+#define EXTERN extern "C"
+extern "C" {
+#else
+#define EXTERN extern
+#endif
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* __GRAPHICS_NXFONTS_NXFONTS_SANS23X27_H */
diff --git a/nuttx/graphics/nxfonts/nxfonts_sans28x37.h b/nuttx/graphics/nxfonts/nxfonts_sans28x37.h
new file mode 100644
index 000000000..f41ff30cf
--- /dev/null
+++ b/nuttx/graphics/nxfonts/nxfonts_sans28x37.h
@@ -0,0 +1,849 @@
+/****************************************************************************
+ * graphics/nxfonts/nxfonts_sans28x37.h
+ *
+ * Copyright (C) 2011-2012 NX Engineering, S.A., All rights reserved.
+ * Author: Jose Pablo Carballo Gomez <jcarballo@nx-engineering.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT}
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING}
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+#ifndef __GRAPHICS_NXFONTS_NXFONTS_SANS28X37_H
+#define __GRAPHICS_NXFONTS_NXFONTS_SANS28X37_H
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/* Font ID */
+
+#define NXFONT_ID FONTID_SANS28X37
+
+/* Ranges of 7-bit and 8-bit fonts */
+
+#define NXFONT_MIN7BIT 33
+#define NXFONT_MAX7BIT 126
+
+#define NXFONT_MIN8BIT 161
+#define NXFONT_MAX8BIT 255
+
+/* Maximum height and width of any glyph in the set */
+
+#define NXFONT_MAXHEIGHT 37
+#define NXFONT_MAXWIDTH 28
+
+/* The width of a space */
+
+#define NXFONT_SPACEWIDTH 6
+
+/* exclam (33) */
+#define NXFONT_METRICS_33 {1, 2, 19, 2, 10, 0}
+#define NXFONT_BITMAP_33 {0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x80, 0x80, 0x0, 0x0, 0xc0, 0xc0, 0xc0}
+
+/* quotedbl (34) */
+#define NXFONT_METRICS_34 {1, 6, 6, 1, 10, 0}
+#define NXFONT_BITMAP_34 {0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x44}
+
+/* numbersign (35) */
+#define NXFONT_METRICS_35 {2, 11, 17, 2, 12, 0}
+#define NXFONT_BITMAP_35 {0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0x19, 0x80, 0xff, 0xe0, 0xff, 0xe0, 0x19, 0x80, 0x19, 0x80, 0x33, 0x0, 0x33, 0x0, 0xff, 0xe0, 0xff, 0xe0, 0x33, 0x0, 0x33, 0x0, 0x66, 0x0, 0x66, 0x0, 0x66, 0x0}
+
+/* dollar (36) */
+#define NXFONT_METRICS_36 {2, 11, 22, 1, 9, 0}
+#define NXFONT_BITMAP_36 {0x6, 0x0, 0x6, 0x0, 0x1f, 0x80, 0x3f, 0xc0, 0x76, 0xe0, 0x66, 0x60, 0x66, 0x60, 0x66, 0x0, 0x76, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0xf, 0x80, 0x7, 0xc0, 0x6, 0xe0, 0x6, 0x60, 0xc6, 0x60, 0xc6, 0x60, 0xe6, 0xe0, 0x7f, 0xc0, 0x3f, 0x80, 0x6, 0x0, 0x6, 0x0}
+
+/* percent (37) */
+#define NXFONT_METRICS_37 {3, 19, 18, 1, 11, 0}
+#define NXFONT_BITMAP_37 {0x0, 0x6, 0x0, 0x3c, 0xc, 0x0, 0x7e, 0xc, 0x0, 0xc3, 0x18, 0x0, 0xc3, 0x18, 0x0, 0xc3, 0x30, 0x0, 0xc3, 0x30, 0x0, 0x7e, 0x60, 0x0, 0x3c, 0x60, 0x0, 0x0, 0xc0, 0x0, 0x0, 0xc7, 0x80, 0x1, 0x8f, 0xc0, 0x1, 0x98, 0x60, 0x3, 0x18, 0x60, 0x3, 0x18, 0x60, 0x6, 0x18, 0x60, 0x6, 0xf, 0xc0, 0x4, 0x7, 0x80}
+
+/* ampersand (38) */
+#define NXFONT_METRICS_38 {2, 14, 18, 2, 11, 0}
+#define NXFONT_BITMAP_38 {0xf, 0x0, 0x1f, 0x80, 0x39, 0xc0, 0x30, 0xc0, 0x30, 0xc0, 0x30, 0xc0, 0x19, 0x80, 0xf, 0x0, 0x1e, 0x0, 0x3f, 0x18, 0x73, 0x98, 0x61, 0xd8, 0xc0, 0xf0, 0xc0, 0x60, 0xc0, 0xf0, 0xe1, 0xd8, 0x7f, 0x9c, 0x1e, 0x0}
+
+/* quotesingle (39) */
+#define NXFONT_METRICS_39 {1, 2, 6, 2, 10, 0}
+#define NXFONT_BITMAP_39 {0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x40}
+
+/* parenleft (40) */
+#define NXFONT_METRICS_40 {1, 5, 24, 2, 10, 0}
+#define NXFONT_BITMAP_40 {0x18, 0x18, 0x30, 0x30, 0x60, 0x60, 0x60, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x60, 0x60, 0x60, 0x30, 0x30, 0x18, 0x18}
+
+/* parenright (41) */
+#define NXFONT_METRICS_41 {1, 5, 24, 1, 10, 0}
+#define NXFONT_BITMAP_41 {0xc0, 0xc0, 0x60, 0x60, 0x30, 0x30, 0x30, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x30, 0x30, 0x30, 0x60, 0x60, 0xc0, 0xc0}
+
+/* asterisk (42) */
+#define NXFONT_METRICS_42 {1, 7, 7, 1, 10, 0}
+#define NXFONT_BITMAP_42 {0x10, 0x10, 0xd6, 0x7c, 0x38, 0x6c, 0x44}
+
+/* plus (43) */
+#define NXFONT_METRICS_43 {2, 12, 12, 1, 16, 0}
+#define NXFONT_BITMAP_43 {0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0xff, 0xf0, 0xff, 0xf0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0}
+
+/* comma (44) */
+#define NXFONT_METRICS_44 {1, 2, 6, 2, 26, 0}
+#define NXFONT_BITMAP_44 {0xc0, 0xc0, 0xc0, 0x40, 0x40, 0x80}
+
+/* hyphen (45) */
+#define NXFONT_METRICS_45 {1, 6, 2, 1, 21, 0}
+#define NXFONT_BITMAP_45 {0xfc, 0xfc}
+
+/* period (46) */
+#define NXFONT_METRICS_46 {1, 2, 3, 2, 26, 0}
+#define NXFONT_BITMAP_46 {0xc0, 0xc0, 0xc0}
+
+/* slash (47) */
+#define NXFONT_METRICS_47 {1, 7, 19, 0, 10, 0}
+#define NXFONT_BITMAP_47 {0x6, 0x4, 0xc, 0xc, 0x8, 0x18, 0x18, 0x10, 0x10, 0x30, 0x30, 0x20, 0x60, 0x60, 0x40, 0xc0, 0xc0, 0x80, 0x80}
+
+/* zero (48) */
+#define NXFONT_METRICS_48 {2, 11, 18, 1, 11, 0}
+#define NXFONT_BITMAP_48 {0x1f, 0x0, 0x3f, 0x80, 0x71, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0xe0, 0xe0, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xe0, 0xe0, 0x60, 0xc0, 0x60, 0xc0, 0x71, 0xc0, 0x3f, 0x80, 0x1f, 0x0}
+
+/* one (49) */
+#define NXFONT_METRICS_49 {1, 6, 18, 2, 11, 0}
+#define NXFONT_BITMAP_49 {0xc, 0xc, 0x1c, 0xfc, 0xfc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc}
+
+/* two (50) */
+#define NXFONT_METRICS_50 {2, 11, 18, 1, 11, 0}
+#define NXFONT_BITMAP_50 {0x1e, 0x0, 0x7f, 0x80, 0x61, 0xc0, 0xc0, 0xc0, 0xc0, 0x60, 0xc0, 0x60, 0x0, 0xe0, 0x0, 0xc0, 0x1, 0xc0, 0x3, 0x80, 0xf, 0x0, 0x1c, 0x0, 0x38, 0x0, 0x70, 0x0, 0xe0, 0x0, 0xc0, 0x0, 0xff, 0xe0, 0xff, 0xe0}
+
+/* three (51) */
+#define NXFONT_METRICS_51 {2, 11, 18, 1, 11, 0}
+#define NXFONT_BITMAP_51 {0x1f, 0x0, 0x7f, 0x80, 0x61, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x0, 0xc0, 0x1, 0x80, 0xf, 0x0, 0xf, 0xc0, 0x0, 0xc0, 0x0, 0x60, 0x0, 0x60, 0xc0, 0x60, 0xc0, 0xc0, 0x61, 0xc0, 0x7f, 0x80, 0x1f, 0x0}
+
+/* four (52) */
+#define NXFONT_METRICS_52 {2, 11, 18, 1, 11, 0}
+#define NXFONT_BITMAP_52 {0x1, 0x80, 0x3, 0x80, 0x3, 0x80, 0x7, 0x80, 0xf, 0x80, 0xd, 0x80, 0x19, 0x80, 0x39, 0x80, 0x31, 0x80, 0x61, 0x80, 0xe1, 0x80, 0xc1, 0x80, 0xff, 0xe0, 0xff, 0xe0, 0x1, 0x80, 0x1, 0x80, 0x1, 0x80, 0x1, 0x80}
+
+/* five (53) */
+#define NXFONT_METRICS_53 {2, 11, 18, 1, 11, 0}
+#define NXFONT_BITMAP_53 {0x7f, 0xc0, 0x7f, 0xc0, 0x60, 0x0, 0x60, 0x0, 0x60, 0x0, 0x60, 0x0, 0x7e, 0x0, 0x7f, 0x80, 0x71, 0xc0, 0x0, 0xc0, 0x0, 0xe0, 0x0, 0x60, 0x0, 0x60, 0xc0, 0xe0, 0xc0, 0xc0, 0xe1, 0xc0, 0x7f, 0x80, 0x1e, 0x0}
+
+/* six (54) */
+#define NXFONT_METRICS_54 {2, 11, 18, 1, 11, 0}
+#define NXFONT_BITMAP_54 {0xf, 0x0, 0x3f, 0xc0, 0x70, 0xc0, 0x60, 0x60, 0xe0, 0x60, 0xc0, 0x0, 0xc0, 0x0, 0xcf, 0x0, 0xdf, 0x80, 0xf1, 0xc0, 0xe0, 0xc0, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xe0, 0xe0, 0x71, 0xc0, 0x7f, 0xc0, 0x1f, 0x0}
+
+/* seven (55) */
+#define NXFONT_METRICS_55 {2, 11, 18, 1, 11, 0}
+#define NXFONT_BITMAP_55 {0xff, 0xe0, 0xff, 0xe0, 0x0, 0xe0, 0x0, 0xc0, 0x1, 0x80, 0x1, 0x80, 0x3, 0x0, 0x3, 0x0, 0x6, 0x0, 0x6, 0x0, 0xc, 0x0, 0xc, 0x0, 0x1c, 0x0, 0x18, 0x0, 0x18, 0x0, 0x38, 0x0, 0x30, 0x0, 0x30, 0x0}
+
+/* eight (56) */
+#define NXFONT_METRICS_56 {2, 11, 18, 1, 11, 0}
+#define NXFONT_BITMAP_56 {0xe, 0x0, 0x3f, 0x80, 0x31, 0x80, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x31, 0x80, 0x1f, 0x0, 0x3f, 0x80, 0x71, 0xc0, 0x60, 0xc0, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0x60, 0xc0, 0x7f, 0xc0, 0x1f, 0x0}
+
+/* nine (57) */
+#define NXFONT_METRICS_57 {2, 11, 18, 1, 11, 0}
+#define NXFONT_BITMAP_57 {0x1f, 0x0, 0x7f, 0xc0, 0x71, 0xc0, 0xe0, 0xc0, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xe0, 0xe0, 0x71, 0xe0, 0x7f, 0x60, 0x1e, 0x60, 0x0, 0x60, 0x0, 0xe0, 0xc0, 0xc0, 0xe1, 0xc0, 0x7f, 0x80, 0x1e, 0x0}
+
+/* colon (58) */
+#define NXFONT_METRICS_58 {1, 2, 14, 2, 15, 0}
+#define NXFONT_BITMAP_58 {0xc0, 0xc0, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc0, 0xc0, 0xc0}
+
+/* semicolon (59) */
+#define NXFONT_METRICS_59 {1, 2, 17, 2, 15, 0}
+#define NXFONT_BITMAP_59 {0xc0, 0xc0, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc0, 0xc0, 0xc0, 0x40, 0x40, 0x80}
+
+/* less (60) */
+#define NXFONT_METRICS_60 {2, 12, 12, 1, 16, 0}
+#define NXFONT_BITMAP_60 {0x0, 0x30, 0x0, 0xf0, 0x3, 0xc0, 0xf, 0x0, 0x3c, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0x3c, 0x0, 0xf, 0x0, 0x3, 0xc0, 0x0, 0xf0, 0x0, 0x30}
+
+/* equal (61) */
+#define NXFONT_METRICS_61 {2, 10, 5, 2, 19, 0}
+#define NXFONT_BITMAP_61 {0xff, 0xc0, 0xff, 0xc0, 0x0, 0x0, 0xff, 0xc0, 0xff, 0xc0}
+
+/* greater (62) */
+#define NXFONT_METRICS_62 {2, 12, 12, 1, 16, 0}
+#define NXFONT_BITMAP_62 {0xc0, 0x0, 0xf0, 0x0, 0x3c, 0x0, 0xf, 0x0, 0x3, 0xc0, 0x0, 0x70, 0x0, 0x70, 0x3, 0xc0, 0xf, 0x0, 0x3c, 0x0, 0xf0, 0x0, 0xc0, 0x0}
+
+/* question (63) */
+#define NXFONT_METRICS_63 {2, 10, 19, 1, 10, 0}
+#define NXFONT_BITMAP_63 {0x1f, 0x0, 0x7f, 0x80, 0x71, 0xc0, 0xe0, 0xc0, 0xc0, 0xc0, 0xc1, 0xc0, 0x1, 0x80, 0x3, 0x80, 0x7, 0x0, 0x6, 0x0, 0xc, 0x0, 0xc, 0x0, 0xc, 0x0, 0xc, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0x0, 0xc, 0x0, 0xc, 0x0}
+
+/* at (64) */
+#define NXFONT_METRICS_64 {3, 22, 23, 2, 10, 0}
+#define NXFONT_BITMAP_64 {0x0, 0xff, 0x0, 0x3, 0xff, 0xc0, 0xf, 0x1, 0xe0, 0x1c, 0x0, 0x70, 0x38, 0x0, 0x18, 0x30, 0x0, 0x18, 0x60, 0x73, 0xc, 0x60, 0xfb, 0xc, 0xc1, 0xc7, 0xc, 0xc3, 0x86, 0xc, 0xc3, 0x6, 0xc, 0xc6, 0x6, 0xc, 0xc6, 0xc, 0x1c, 0xc6, 0xc, 0x18, 0xc6, 0xc, 0x38, 0xe7, 0x1c, 0x70, 0x63, 0xf7, 0xe0, 0x71, 0xe3, 0x80, 0x38, 0x0, 0x0, 0x1c, 0x0, 0x0, 0xf, 0x3, 0x0, 0x7, 0xff, 0x0, 0x0, 0xfc, 0x0}
+
+/* A (65) */
+#define NXFONT_METRICS_65 {2, 15, 19, 1, 10, 0}
+#define NXFONT_BITMAP_65 {0x3, 0x80, 0x3, 0x80, 0x6, 0xc0, 0x6, 0xc0, 0xc, 0x40, 0xc, 0x60, 0xc, 0x60, 0x18, 0x30, 0x18, 0x30, 0x18, 0x30, 0x30, 0x18, 0x3f, 0xf8, 0x3f, 0xf8, 0x60, 0xc, 0x60, 0xc, 0x60, 0xc, 0xc0, 0x6, 0xc0, 0x6, 0xc0, 0x6}
+
+/* B (66) */
+#define NXFONT_METRICS_66 {2, 14, 19, 2, 10, 0}
+#define NXFONT_BITMAP_66 {0xff, 0xc0, 0xff, 0xf0, 0xc0, 0x70, 0xc0, 0x18, 0xc0, 0x18, 0xc0, 0x18, 0xc0, 0x18, 0xc0, 0x30, 0xff, 0xe0, 0xff, 0xf0, 0xc0, 0x18, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0x1c, 0xc0, 0x78, 0xff, 0xf0, 0xff, 0xc0}
+
+/* C (67) */
+#define NXFONT_METRICS_67 {2, 15, 19, 1, 10, 0}
+#define NXFONT_BITMAP_67 {0x7, 0xe0, 0x1f, 0xf8, 0x3c, 0x3c, 0x70, 0xe, 0x60, 0x6, 0xe0, 0x6, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xe0, 0x6, 0x60, 0x6, 0x70, 0xe, 0x3c, 0x3c, 0x1f, 0xf8, 0x7, 0xe0}
+
+/* D (68) */
+#define NXFONT_METRICS_68 {2, 15, 19, 2, 10, 0}
+#define NXFONT_BITMAP_68 {0xff, 0xc0, 0xff, 0xf0, 0xc0, 0x78, 0xc0, 0x1c, 0xc0, 0xc, 0xc0, 0xe, 0xc0, 0x6, 0xc0, 0x6, 0xc0, 0x6, 0xc0, 0x6, 0xc0, 0x6, 0xc0, 0x6, 0xc0, 0x6, 0xc0, 0xe, 0xc0, 0xc, 0xc0, 0x1c, 0xc0, 0x78, 0xff, 0xf0, 0xff, 0xc0}
+
+/* E (69) */
+#define NXFONT_METRICS_69 {2, 12, 19, 2, 10, 0}
+#define NXFONT_BITMAP_69 {0xff, 0xf0, 0xff, 0xf0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xff, 0xe0, 0xff, 0xe0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xff, 0xf0, 0xff, 0xf0}
+
+/* F (70) */
+#define NXFONT_METRICS_70 {2, 11, 19, 2, 10, 0}
+#define NXFONT_BITMAP_70 {0xff, 0xe0, 0xff, 0xe0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xff, 0xc0, 0xff, 0xc0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0}
+
+/* G (71) */
+#define NXFONT_METRICS_71 {2, 16, 19, 1, 10, 0}
+#define NXFONT_BITMAP_71 {0x7, 0xe0, 0x1f, 0xf8, 0x3c, 0x3c, 0x70, 0xe, 0x60, 0x6, 0xe0, 0x6, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x7f, 0xc0, 0x7f, 0xc0, 0x3, 0xc0, 0x3, 0xe0, 0x3, 0x60, 0x7, 0x70, 0xf, 0x3c, 0x3f, 0x1f, 0xfb, 0x7, 0xe3}
+
+/* H (72) */
+#define NXFONT_METRICS_72 {2, 14, 19, 2, 10, 0}
+#define NXFONT_BITMAP_72 {0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xff, 0xfc, 0xff, 0xfc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc}
+
+/* I (73) */
+#define NXFONT_METRICS_73 {1, 2, 19, 3, 10, 0}
+#define NXFONT_BITMAP_73 {0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* J (74) */
+#define NXFONT_METRICS_74 {2, 10, 19, 1, 10, 0}
+#define NXFONT_BITMAP_74 {0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x61, 0x80, 0x7f, 0x80, 0x3f, 0x0}
+
+/* K (75) */
+#define NXFONT_METRICS_75 {2, 13, 19, 3, 10, 0}
+#define NXFONT_BITMAP_75 {0xc0, 0x38, 0xc0, 0x70, 0xc0, 0xe0, 0xc1, 0xc0, 0xc3, 0x80, 0xc7, 0x0, 0xce, 0x0, 0xdc, 0x0, 0xfc, 0x0, 0xfe, 0x0, 0xe7, 0x0, 0xc3, 0x80, 0xc1, 0x80, 0xc1, 0xc0, 0xc0, 0xe0, 0xc0, 0x60, 0xc0, 0x70, 0xc0, 0x38, 0xc0, 0x18}
+
+/* L (76) */
+#define NXFONT_METRICS_76 {2, 11, 19, 2, 10, 0}
+#define NXFONT_BITMAP_76 {0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xff, 0xe0, 0xff, 0xe0}
+
+/* M (77) */
+#define NXFONT_METRICS_77 {3, 17, 19, 2, 10, 0}
+#define NXFONT_BITMAP_77 {0xc0, 0x1, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x3, 0x80, 0xf0, 0x7, 0x80, 0xf0, 0x7, 0x80, 0xd8, 0xd, 0x80, 0xd8, 0xd, 0x80, 0xd8, 0xd, 0x80, 0xcc, 0x19, 0x80, 0xcc, 0x19, 0x80, 0xcc, 0x19, 0x80, 0xc6, 0x31, 0x80, 0xc6, 0x31, 0x80, 0xc6, 0x31, 0x80, 0xc3, 0x61, 0x80, 0xc3, 0x61, 0x80, 0xc3, 0x61, 0x80, 0xc1, 0xc1, 0x80, 0xc1, 0xc1, 0x80}
+
+/* N (78) */
+#define NXFONT_METRICS_78 {2, 14, 19, 2, 10, 0}
+#define NXFONT_BITMAP_78 {0xe0, 0xc, 0xf0, 0xc, 0xf0, 0xc, 0xd8, 0xc, 0xdc, 0xc, 0xcc, 0xc, 0xce, 0xc, 0xc6, 0xc, 0xc7, 0xc, 0xc3, 0xc, 0xc3, 0x8c, 0xc1, 0x8c, 0xc1, 0xcc, 0xc0, 0xcc, 0xc0, 0xec, 0xc0, 0x6c, 0xc0, 0x3c, 0xc0, 0x3c, 0xc0, 0x1c}
+
+/* O (79) */
+#define NXFONT_METRICS_79 {2, 16, 19, 1, 10, 0}
+#define NXFONT_BITMAP_79 {0x7, 0xe0, 0x1f, 0xf8, 0x3c, 0x3c, 0x70, 0xe, 0x60, 0x6, 0xe0, 0x7, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xe0, 0x7, 0x60, 0x6, 0x70, 0xe, 0x3c, 0x3c, 0x1f, 0xf8, 0x7, 0xe0}
+
+/* P (80) */
+#define NXFONT_METRICS_80 {2, 13, 19, 2, 10, 0}
+#define NXFONT_BITMAP_80 {0xff, 0xe0, 0xff, 0xf0, 0xc0, 0x30, 0xc0, 0x18, 0xc0, 0x18, 0xc0, 0x18, 0xc0, 0x18, 0xc0, 0x30, 0xff, 0xf0, 0xff, 0xe0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0}
+
+/* Q (81) */
+#define NXFONT_METRICS_81 {2, 16, 19, 1, 10, 0}
+#define NXFONT_BITMAP_81 {0x7, 0xe0, 0x1f, 0xf8, 0x3c, 0x3c, 0x70, 0xe, 0x60, 0x6, 0xe0, 0x7, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xe0, 0x7, 0x60, 0xe6, 0x70, 0x7e, 0x3c, 0x1c, 0x1f, 0xfe, 0x7, 0xe7}
+
+/* R (82) */
+#define NXFONT_METRICS_82 {2, 13, 19, 2, 10, 0}
+#define NXFONT_BITMAP_82 {0xff, 0xe0, 0xff, 0xf0, 0xc0, 0x30, 0xc0, 0x18, 0xc0, 0x18, 0xc0, 0x18, 0xc0, 0x18, 0xc0, 0x30, 0xff, 0xf0, 0xff, 0xe0, 0xc0, 0x70, 0xc0, 0x30, 0xc0, 0x18, 0xc0, 0x18, 0xc0, 0x18, 0xc0, 0x18, 0xc0, 0x18, 0xc0, 0x18, 0xc0, 0x18}
+
+/* S (83) */
+#define NXFONT_METRICS_83 {2, 13, 19, 2, 10, 0}
+#define NXFONT_BITMAP_83 {0xf, 0x80, 0x3f, 0xe0, 0x60, 0x60, 0xc0, 0x30, 0xc0, 0x30, 0xc0, 0x0, 0xe0, 0x0, 0x7c, 0x0, 0x3f, 0x80, 0x7, 0xe0, 0x0, 0xf0, 0x0, 0x38, 0x0, 0x18, 0x0, 0x18, 0xc0, 0x18, 0xc0, 0x38, 0xf0, 0x70, 0x7f, 0xe0, 0x1f, 0x80}
+
+/* T (84) */
+#define NXFONT_METRICS_84 {2, 14, 19, 1, 10, 0}
+#define NXFONT_BITMAP_84 {0xff, 0xfc, 0xff, 0xfc, 0x3, 0x0, 0x3, 0x0, 0x3, 0x0, 0x3, 0x0, 0x3, 0x0, 0x3, 0x0, 0x3, 0x0, 0x3, 0x0, 0x3, 0x0, 0x3, 0x0, 0x3, 0x0, 0x3, 0x0, 0x3, 0x0, 0x3, 0x0, 0x3, 0x0, 0x3, 0x0, 0x3, 0x0}
+
+/* U (85) */
+#define NXFONT_METRICS_85 {2, 14, 19, 2, 10, 0}
+#define NXFONT_BITMAP_85 {0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0x60, 0x18, 0x70, 0x38, 0x3f, 0xf0, 0xf, 0xc0}
+
+/* V (86) */
+#define NXFONT_METRICS_86 {2, 15, 19, 1, 10, 0}
+#define NXFONT_BITMAP_86 {0xc0, 0x6, 0xc0, 0x6, 0xe0, 0xe, 0x60, 0xc, 0x70, 0x1c, 0x30, 0x18, 0x30, 0x18, 0x38, 0x38, 0x18, 0x30, 0x18, 0x30, 0x1c, 0x70, 0xc, 0x60, 0xc, 0x60, 0xe, 0xe0, 0x6, 0xc0, 0x6, 0xc0, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80}
+
+/* W (87) */
+#define NXFONT_METRICS_87 {3, 20, 19, 1, 10, 0}
+#define NXFONT_BITMAP_87 {0xc0, 0x60, 0x30, 0xc0, 0x60, 0x30, 0xc0, 0x60, 0x30, 0xc0, 0xf0, 0x30, 0x60, 0xf0, 0x60, 0x61, 0x98, 0x60, 0x61, 0x98, 0x60, 0x61, 0x98, 0x60, 0x61, 0x98, 0x60, 0x31, 0x98, 0xc0, 0x33, 0xc, 0xc0, 0x33, 0xc, 0xc0, 0x33, 0xc, 0xc0, 0x1b, 0xd, 0x80, 0x1b, 0xd, 0x80, 0x1e, 0x7, 0x80, 0xe, 0x7, 0x0, 0xc, 0x3, 0x0, 0xc, 0x3, 0x0}
+
+/* X (88) */
+#define NXFONT_METRICS_88 {2, 15, 19, 1, 10, 0}
+#define NXFONT_BITMAP_88 {0xc0, 0x6, 0xe0, 0xe, 0x70, 0x1c, 0x30, 0x18, 0x18, 0x30, 0x1c, 0x70, 0xe, 0xe0, 0x7, 0xc0, 0x3, 0x80, 0x3, 0x80, 0x7, 0xc0, 0xe, 0xe0, 0xc, 0x60, 0x1c, 0x70, 0x38, 0x38, 0x30, 0x18, 0x60, 0xc, 0xe0, 0xe, 0xc0, 0x6}
+
+/* Y (89) */
+#define NXFONT_METRICS_89 {2, 14, 19, 1, 10, 0}
+#define NXFONT_BITMAP_89 {0xc0, 0xc, 0xe0, 0x1c, 0x60, 0x18, 0x70, 0x38, 0x30, 0x30, 0x38, 0x70, 0x18, 0x60, 0x1c, 0xe0, 0xc, 0xc0, 0xf, 0xc0, 0x7, 0x80, 0x7, 0x80, 0x3, 0x0, 0x3, 0x0, 0x3, 0x0, 0x3, 0x0, 0x3, 0x0, 0x3, 0x0, 0x3, 0x0}
+
+/* Z (90) */
+#define NXFONT_METRICS_90 {2, 13, 19, 1, 10, 0}
+#define NXFONT_BITMAP_90 {0xff, 0xf8, 0xff, 0xf8, 0x0, 0x38, 0x0, 0x70, 0x0, 0xe0, 0x1, 0xc0, 0x1, 0xc0, 0x3, 0x80, 0x7, 0x0, 0x7, 0x0, 0xe, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x38, 0x0, 0x70, 0x0, 0x70, 0x0, 0xe0, 0x0, 0xff, 0xf8, 0xff, 0xf8}
+
+/* bracketleft (91) */
+#define NXFONT_METRICS_91 {1, 4, 24, 2, 10, 0}
+#define NXFONT_BITMAP_91 {0xf0, 0xf0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf0, 0xf0}
+
+/* backslash (92) */
+#define NXFONT_METRICS_92 {1, 8, 19, 0, 10, 0}
+#define NXFONT_BITMAP_92 {0xc0, 0x40, 0x40, 0x60, 0x20, 0x20, 0x30, 0x10, 0x10, 0x10, 0x18, 0x8, 0x8, 0xc, 0x4, 0x4, 0x6, 0x2, 0x3}
+
+/* bracketright (93) */
+#define NXFONT_METRICS_93 {1, 4, 24, 1, 10, 0}
+#define NXFONT_BITMAP_93 {0xf0, 0xf0, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0xf0, 0xf0}
+
+/* asciicircum (94) */
+#define NXFONT_METRICS_94 {2, 10, 9, 1, 10, 0}
+#define NXFONT_BITMAP_94 {0xc, 0x0, 0xc, 0x0, 0x1e, 0x0, 0x12, 0x0, 0x33, 0x0, 0x61, 0x80, 0x61, 0x80, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* underscore (95) */
+#define NXFONT_METRICS_95 {2, 14, 2, 0, 32, 0}
+#define NXFONT_BITMAP_95 {0xff, 0xfc, 0xff, 0xfc}
+
+/* grave (96) */
+#define NXFONT_METRICS_96 {1, 5, 4, 1, 10, 0}
+#define NXFONT_BITMAP_96 {0xc0, 0x60, 0x30, 0x18}
+
+/* a (97) */
+#define NXFONT_METRICS_97 {2, 11, 14, 1, 15, 0}
+#define NXFONT_BITMAP_97 {0x1f, 0x0, 0x3f, 0x80, 0x61, 0xc0, 0x60, 0xc0, 0x0, 0xc0, 0x7, 0xc0, 0x3f, 0xc0, 0x78, 0xc0, 0xe0, 0xc0, 0xc0, 0xc0, 0xc1, 0xc0, 0xe3, 0xc0, 0x7e, 0xe0, 0x3c, 0x60}
+
+/* b (98) */
+#define NXFONT_METRICS_98 {2, 11, 19, 2, 10, 0}
+#define NXFONT_BITMAP_98 {0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xcf, 0x0, 0xdf, 0x80, 0xf1, 0xc0, 0xe0, 0xc0, 0xc0, 0xe0, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0xe0, 0xe0, 0xc0, 0xf1, 0xc0, 0xdf, 0x80, 0xcf, 0x0}
+
+/* c (99) */
+#define NXFONT_METRICS_99 {2, 10, 14, 1, 15, 0}
+#define NXFONT_BITMAP_99 {0x1f, 0x0, 0x3f, 0x80, 0x71, 0xc0, 0x60, 0xc0, 0xe0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xe0, 0x0, 0x60, 0xc0, 0x71, 0xc0, 0x3f, 0x80, 0x1f, 0x0}
+
+/* d (100) */
+#define NXFONT_METRICS_100 {2, 11, 19, 1, 10, 0}
+#define NXFONT_BITMAP_100 {0x0, 0x60, 0x0, 0x60, 0x0, 0x60, 0x0, 0x60, 0x0, 0x60, 0x1e, 0x60, 0x3f, 0x60, 0x71, 0xe0, 0x60, 0xe0, 0xe0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xe0, 0x60, 0x60, 0xe0, 0x71, 0xe0, 0x3f, 0x60, 0x1e, 0x60}
+
+/* e (101) */
+#define NXFONT_METRICS_101 {2, 11, 14, 1, 15, 0}
+#define NXFONT_BITMAP_101 {0xe, 0x0, 0x3f, 0x80, 0x71, 0xc0, 0x60, 0xc0, 0xc0, 0x60, 0xc0, 0x60, 0xff, 0xe0, 0xff, 0xe0, 0xc0, 0x0, 0xc0, 0x0, 0x60, 0x60, 0x70, 0xe0, 0x3f, 0xc0, 0xf, 0x0}
+
+/* f (102) */
+#define NXFONT_METRICS_102 {1, 6, 19, 1, 10, 0}
+#define NXFONT_BITMAP_102 {0x1c, 0x3c, 0x30, 0x30, 0x30, 0xfc, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30}
+
+/* g (103) */
+#define NXFONT_METRICS_103 {2, 11, 19, 1, 15, 0}
+#define NXFONT_BITMAP_103 {0x1e, 0x60, 0x3f, 0x60, 0x71, 0xe0, 0x60, 0xe0, 0xe0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xe0, 0x60, 0x60, 0xe0, 0x71, 0xe0, 0x3f, 0x60, 0x1e, 0x60, 0x0, 0x60, 0xc0, 0x60, 0xe0, 0xc0, 0x7f, 0xc0, 0x1f, 0x0}
+
+/* h (104) */
+#define NXFONT_METRICS_104 {2, 10, 19, 2, 10, 0}
+#define NXFONT_BITMAP_104 {0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xce, 0x0, 0xdf, 0x80, 0xf1, 0x80, 0xe0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* i (105) */
+#define NXFONT_METRICS_105 {1, 2, 19, 2, 10, 0}
+#define NXFONT_BITMAP_105 {0xc0, 0xc0, 0xc0, 0x0, 0x0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* j (106) */
+#define NXFONT_METRICS_106 {1, 4, 24, 0, 10, 0}
+#define NXFONT_BITMAP_106 {0x30, 0x30, 0x30, 0x0, 0x0, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0xf0, 0xe0}
+
+/* k (107) */
+#define NXFONT_METRICS_107 {2, 10, 19, 2, 10, 0}
+#define NXFONT_BITMAP_107 {0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc1, 0x80, 0xc3, 0x80, 0xc7, 0x0, 0xce, 0x0, 0xdc, 0x0, 0xf8, 0x0, 0xfc, 0x0, 0xce, 0x0, 0xc6, 0x0, 0xc7, 0x0, 0xc3, 0x80, 0xc1, 0x80, 0xc1, 0xc0, 0xc0, 0xc0}
+
+/* l (108) */
+#define NXFONT_METRICS_108 {1, 2, 19, 2, 10, 0}
+#define NXFONT_BITMAP_108 {0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* m (109) */
+#define NXFONT_METRICS_109 {2, 16, 14, 2, 15, 0}
+#define NXFONT_BITMAP_109 {0xce, 0x3c, 0xff, 0x7e, 0xe3, 0xc7, 0xc1, 0x83, 0xc1, 0x83, 0xc1, 0x83, 0xc1, 0x83, 0xc1, 0x83, 0xc1, 0x83, 0xc1, 0x83, 0xc1, 0x83, 0xc1, 0x83, 0xc1, 0x83, 0xc1, 0x83}
+
+/* n (110) */
+#define NXFONT_METRICS_110 {2, 10, 14, 2, 15, 0}
+#define NXFONT_BITMAP_110 {0xce, 0x0, 0xdf, 0x80, 0xf1, 0x80, 0xe0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* o (111) */
+#define NXFONT_METRICS_111 {2, 11, 14, 1, 15, 0}
+#define NXFONT_BITMAP_111 {0x1f, 0x0, 0x3f, 0x80, 0x71, 0xc0, 0x60, 0xc0, 0xe0, 0xe0, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xe0, 0xe0, 0x60, 0xc0, 0x71, 0xc0, 0x3f, 0x80, 0x1f, 0x0}
+
+/* p (112) */
+#define NXFONT_METRICS_112 {2, 11, 19, 2, 15, 0}
+#define NXFONT_BITMAP_112 {0xcf, 0x0, 0xdf, 0x80, 0xf1, 0xc0, 0xe0, 0xc0, 0xc0, 0xe0, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0xe0, 0xe0, 0xc0, 0xf1, 0xc0, 0xdf, 0x80, 0xcf, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0}
+
+/* q (113) */
+#define NXFONT_METRICS_113 {2, 11, 19, 1, 15, 0}
+#define NXFONT_BITMAP_113 {0x1e, 0x60, 0x3f, 0x60, 0x71, 0xe0, 0x60, 0xe0, 0xe0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xe0, 0x60, 0x60, 0xe0, 0x71, 0xe0, 0x3f, 0x60, 0x1e, 0x60, 0x0, 0x60, 0x0, 0x60, 0x0, 0x60, 0x0, 0x60, 0x0, 0x60}
+
+/* r (114) */
+#define NXFONT_METRICS_114 {1, 6, 14, 2, 15, 0}
+#define NXFONT_BITMAP_114 {0xcc, 0xdc, 0xf8, 0xf0, 0xe0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* s (115) */
+#define NXFONT_METRICS_115 {2, 10, 14, 1, 15, 0}
+#define NXFONT_BITMAP_115 {0x3f, 0x0, 0x7f, 0x80, 0xe1, 0xc0, 0xc0, 0xc0, 0xc0, 0x0, 0xf8, 0x0, 0x7f, 0x0, 0xf, 0x80, 0x1, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xe1, 0xc0, 0x7f, 0x80, 0x3f, 0x0}
+
+/* t (116) */
+#define NXFONT_METRICS_116 {1, 6, 18, 1, 11, 0}
+#define NXFONT_BITMAP_116 {0x30, 0x30, 0x30, 0x30, 0xfc, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3c, 0x1c}
+
+/* u (117) */
+#define NXFONT_METRICS_117 {2, 10, 14, 2, 15, 0}
+#define NXFONT_BITMAP_117 {0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc1, 0xc0, 0x63, 0xc0, 0x7e, 0xc0, 0x1c, 0xc0}
+
+/* v (118) */
+#define NXFONT_METRICS_118 {2, 11, 14, 1, 15, 0}
+#define NXFONT_BITMAP_118 {0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0x60, 0xc0, 0x60, 0xc0, 0x71, 0xc0, 0x31, 0x80, 0x31, 0x80, 0x1b, 0x0, 0x1b, 0x0, 0x1b, 0x0, 0xe, 0x0, 0xe, 0x0, 0xe, 0x0}
+
+/* w (119) */
+#define NXFONT_METRICS_119 {3, 18, 14, 0, 15, 0}
+#define NXFONT_BITMAP_119 {0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x61, 0xe1, 0x80, 0x61, 0xe1, 0x80, 0x61, 0xe1, 0x80, 0x31, 0x23, 0x0, 0x33, 0x33, 0x0, 0x33, 0x33, 0x0, 0x1b, 0x36, 0x0, 0x1a, 0x16, 0x0, 0x1e, 0x1e, 0x0, 0xe, 0x1c, 0x0, 0xc, 0xc, 0x0, 0xc, 0xc, 0x0}
+
+/* x (120) */
+#define NXFONT_METRICS_120 {2, 10, 14, 1, 15, 0}
+#define NXFONT_BITMAP_120 {0xc0, 0xc0, 0xe1, 0xc0, 0x61, 0x80, 0x33, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0xc, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x33, 0x0, 0x73, 0x80, 0x61, 0x80, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* y (121) */
+#define NXFONT_METRICS_121 {2, 12, 19, 0, 15, 0}
+#define NXFONT_BITMAP_121 {0xc0, 0x30, 0xc0, 0x30, 0x60, 0x30, 0x70, 0x60, 0x30, 0x60, 0x38, 0xe0, 0x18, 0xc0, 0x18, 0xc0, 0xd, 0x80, 0xd, 0x80, 0x7, 0x80, 0x7, 0x0, 0x3, 0x0, 0x3, 0x0, 0x6, 0x0, 0x6, 0x0, 0xc, 0x0, 0x3c, 0x0, 0x38, 0x0}
+
+/* z (122) */
+#define NXFONT_METRICS_122 {2, 10, 14, 1, 15, 0}
+#define NXFONT_BITMAP_122 {0xff, 0xc0, 0xff, 0xc0, 0x1, 0x80, 0x3, 0x0, 0x7, 0x0, 0xe, 0x0, 0xc, 0x0, 0x1c, 0x0, 0x38, 0x0, 0x30, 0x0, 0x60, 0x0, 0xe0, 0x0, 0xff, 0xc0, 0xff, 0xc0}
+
+/* braceleft (123) */
+#define NXFONT_METRICS_123 {1, 6, 24, 1, 10, 0}
+#define NXFONT_BITMAP_123 {0xc, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x60, 0xc0, 0xc0, 0x60, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0xc}
+
+/* bar (124) */
+#define NXFONT_METRICS_124 {1, 1, 24, 2, 10, 0}
+#define NXFONT_BITMAP_124 {0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}
+
+/* braceright (125) */
+#define NXFONT_METRICS_125 {1, 6, 24, 1, 10, 0}
+#define NXFONT_BITMAP_125 {0xc0, 0x60, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0xc, 0xc, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x60, 0xc0}
+
+/* asciitilde (126) */
+#define NXFONT_METRICS_126 {2, 10, 4, 2, 20, 0}
+#define NXFONT_BITMAP_126 {0x70, 0xc0, 0xfc, 0xc0, 0xcf, 0xc0, 0xc3, 0x80}
+
+/* exclamdown (161) */
+#define NXFONT_METRICS_161 {1, 2, 19, 2, 15, 0}
+#define NXFONT_BITMAP_161 {0xc0, 0xc0, 0xc0, 0x0, 0x0, 0x40, 0x40, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* cent (162) */
+#define NXFONT_METRICS_162 {2, 10, 18, 1, 13, 0}
+#define NXFONT_BITMAP_162 {0x1, 0x80, 0x1, 0x80, 0x1f, 0x0, 0x3f, 0x80, 0x73, 0xc0, 0x66, 0xc0, 0xc6, 0x0, 0xcc, 0x0, 0xcc, 0x0, 0xcc, 0x0, 0xd8, 0x0, 0xd8, 0x0, 0xd8, 0xc0, 0x71, 0xc0, 0x7f, 0x80, 0x3f, 0x0, 0x60, 0x0, 0x60, 0x0}
+
+/* sterling (163) */
+#define NXFONT_METRICS_163 {2, 12, 18, 1, 11, 0}
+#define NXFONT_BITMAP_163 {0x1f, 0x80, 0x3f, 0xe0, 0x70, 0x70, 0x60, 0x30, 0x60, 0x0, 0x70, 0x0, 0x30, 0x0, 0x18, 0x0, 0xff, 0x80, 0xff, 0x80, 0x18, 0x0, 0x18, 0x0, 0x18, 0x0, 0x30, 0x0, 0x30, 0x0, 0x67, 0x30, 0xff, 0xf0, 0xf0, 0xe0}
+
+/* currency (164) */
+#define NXFONT_METRICS_164 {2, 11, 12, 1, 14, 0}
+#define NXFONT_BITMAP_164 {0xc0, 0x60, 0xee, 0xe0, 0x7f, 0xc0, 0x31, 0x80, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x31, 0x80, 0x7f, 0xc0, 0xee, 0xe0, 0xc0, 0x60}
+
+/* yen (165) */
+#define NXFONT_METRICS_165 {2, 14, 18, 0, 11, 0}
+#define NXFONT_BITMAP_165 {0xe0, 0x1c, 0x60, 0x18, 0x70, 0x38, 0x30, 0x30, 0x38, 0x70, 0x18, 0x60, 0x1c, 0xe0, 0xc, 0xc0, 0x3f, 0xf0, 0x3f, 0xf0, 0x3, 0x0, 0x3f, 0xf0, 0x3f, 0xf0, 0x3, 0x0, 0x3, 0x0, 0x3, 0x0, 0x3, 0x0, 0x3, 0x0}
+
+/* brokenbar (166) */
+#define NXFONT_METRICS_166 {1, 2, 24, 2, 10, 0}
+#define NXFONT_BITMAP_166 {0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* section (167) */
+#define NXFONT_METRICS_167 {2, 11, 24, 1, 10, 0}
+#define NXFONT_BITMAP_167 {0x1f, 0x0, 0x3f, 0x80, 0x71, 0xc0, 0x60, 0xc0, 0x70, 0xc0, 0x38, 0x0, 0x1c, 0x0, 0x7e, 0x0, 0xe7, 0x0, 0xc3, 0x80, 0xc1, 0xc0, 0xc0, 0xc0, 0x60, 0x60, 0x70, 0x60, 0x38, 0x60, 0x1c, 0xc0, 0xf, 0x80, 0x7, 0x0, 0x3, 0x80, 0x61, 0xc0, 0x60, 0xc0, 0x71, 0xc0, 0x3f, 0x80, 0x1f, 0x0}
+
+/* dieresis (168) */
+#define NXFONT_METRICS_168 {1, 6, 2, 1, 11, 0}
+#define NXFONT_BITMAP_168 {0xcc, 0xcc}
+
+/* copyright (169) */
+#define NXFONT_METRICS_169 {3, 19, 19, 1, 10, 0}
+#define NXFONT_BITMAP_169 {0x3, 0xf8, 0x0, 0xe, 0xe, 0x0, 0x30, 0x1, 0x80, 0x60, 0x0, 0xc0, 0x41, 0xf0, 0x40, 0xc3, 0x18, 0x60, 0x86, 0xc, 0x20, 0x84, 0x0, 0x20, 0x84, 0x0, 0x20, 0x84, 0x0, 0x20, 0x84, 0x0, 0x20, 0x86, 0xc, 0x20, 0xc3, 0x18, 0x60, 0x41, 0xf0, 0x40, 0x60, 0x0, 0xc0, 0x30, 0x1, 0x80, 0x18, 0x3, 0x0, 0xe, 0xe, 0x0, 0x3, 0xf8, 0x0}
+
+/* ordfeminine (170) */
+#define NXFONT_METRICS_170 {1, 7, 12, 1, 10, 0}
+#define NXFONT_BITMAP_170 {0x78, 0xcc, 0xcc, 0x1c, 0x6c, 0xcc, 0xcc, 0xdc, 0x76, 0x0, 0xfe, 0xfe}
+
+/* guillemotleft (171) */
+#define NXFONT_METRICS_171 {2, 9, 8, 2, 18, 0}
+#define NXFONT_BITMAP_171 {0x19, 0x80, 0x33, 0x0, 0x66, 0x0, 0xcc, 0x0, 0xcc, 0x0, 0x66, 0x0, 0x33, 0x0, 0x19, 0x80}
+
+/* logicalnot (172) */
+#define NXFONT_METRICS_172 {2, 13, 8, 1, 19, 0}
+#define NXFONT_BITMAP_172 {0xff, 0xf8, 0xff, 0xf8, 0x0, 0x18, 0x0, 0x18, 0x0, 0x18, 0x0, 0x18, 0x0, 0x18, 0x0, 0x18}
+
+/* hyphen (173) */
+#define NXFONT_METRICS_173 {1, 6, 2, 1, 21, 0}
+#define NXFONT_BITMAP_173 {0xfc, 0xfc}
+
+/* registered (174) */
+#define NXFONT_METRICS_174 {3, 18, 19, 1, 10, 0}
+#define NXFONT_BITMAP_174 {0x7, 0xf8, 0x0, 0x1c, 0xe, 0x0, 0x30, 0x3, 0x0, 0x60, 0x1, 0x80, 0x43, 0xf0, 0x80, 0xc2, 0x18, 0xc0, 0x82, 0x8, 0x40, 0x82, 0x8, 0x40, 0x82, 0x8, 0x40, 0x82, 0x10, 0x40, 0x83, 0xf0, 0x40, 0x82, 0x20, 0x40, 0x82, 0x10, 0x40, 0xc2, 0x10, 0xc0, 0x42, 0x8, 0x80, 0x60, 0x1, 0x80, 0x30, 0x3, 0x0, 0x1c, 0xe, 0x0, 0x7, 0xf8, 0x0}
+
+/* macron (175) */
+#define NXFONT_METRICS_175 {1, 6, 2, 1, 11, 0}
+#define NXFONT_BITMAP_175 {0xfc, 0xfc}
+
+/* degree (176) */
+#define NXFONT_METRICS_176 {1, 8, 7, 0, 11, 0}
+#define NXFONT_BITMAP_176 {0x3c, 0x66, 0xc3, 0xc3, 0xc3, 0x66, 0x3c}
+
+/* plusminus (177) */
+#define NXFONT_METRICS_177 {2, 12, 13, 1, 16, 0}
+#define NXFONT_BITMAP_177 {0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0xff, 0xf0, 0xff, 0xf0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0x0, 0x0, 0xff, 0xf0, 0xff, 0xf0}
+
+/* twosuperior (178) */
+#define NXFONT_METRICS_178 {1, 7, 10, 0, 11, 0}
+#define NXFONT_BITMAP_178 {0x3c, 0x7e, 0xc6, 0x6, 0xc, 0x18, 0x30, 0x60, 0xfe, 0xfe}
+
+/* threesuperior (179) */
+#define NXFONT_METRICS_179 {1, 7, 10, 0, 11, 0}
+#define NXFONT_BITMAP_179 {0x7c, 0xfe, 0xc6, 0x6, 0x3c, 0x3c, 0x6, 0xc6, 0xfe, 0x7c}
+
+/* acute (180) */
+#define NXFONT_METRICS_180 {1, 5, 4, 1, 10, 0}
+#define NXFONT_BITMAP_180 {0x18, 0x30, 0x60, 0xc0}
+
+/* mu (181) */
+#define NXFONT_METRICS_181 {2, 10, 19, 2, 15, 0}
+#define NXFONT_BITMAP_181 {0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc1, 0xc0, 0xe3, 0xc0, 0xfe, 0xc0, 0xdc, 0xc0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0}
+
+/* paragraph (182) */
+#define NXFONT_METRICS_182 {2, 10, 24, 1, 10, 0}
+#define NXFONT_BITMAP_182 {0x1f, 0xc0, 0x7f, 0xc0, 0x7d, 0x80, 0xfd, 0x80, 0xfd, 0x80, 0xfd, 0x80, 0xfd, 0x80, 0xfd, 0x80, 0xfd, 0x80, 0x7d, 0x80, 0x7d, 0x80, 0x3d, 0x80, 0xd, 0x80, 0xd, 0x80, 0xd, 0x80, 0xd, 0x80, 0xd, 0x80, 0xd, 0x80, 0xd, 0x80, 0xd, 0x80, 0xd, 0x80, 0xd, 0x80, 0xd, 0x80, 0xd, 0x80}
+
+/* periodcentered (183) */
+#define NXFONT_METRICS_183 {1, 2, 3, 2, 20, 0}
+#define NXFONT_BITMAP_183 {0xc0, 0xc0, 0xc0}
+
+/* cedilla (184) */
+#define NXFONT_METRICS_184 {1, 5, 6, 1, 28, 0}
+#define NXFONT_BITMAP_184 {0x60, 0x70, 0x18, 0x18, 0xf8, 0x70}
+
+/* onesuperior (185) */
+#define NXFONT_METRICS_185 {1, 4, 10, 0, 11, 0}
+#define NXFONT_BITMAP_185 {0x30, 0x30, 0xf0, 0xf0, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30}
+
+/* ordmasculine (186) */
+#define NXFONT_METRICS_186 {1, 7, 12, 1, 10, 0}
+#define NXFONT_BITMAP_186 {0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x0, 0xfe, 0xfe}
+
+/* guillemotright (187) */
+#define NXFONT_METRICS_187 {2, 9, 8, 3, 18, 0}
+#define NXFONT_BITMAP_187 {0xcc, 0x0, 0x66, 0x0, 0x33, 0x0, 0x19, 0x80, 0x19, 0x80, 0x33, 0x0, 0x66, 0x0, 0xcc, 0x0}
+
+/* onequarter (188) */
+#define NXFONT_METRICS_188 {3, 18, 18, 1, 11, 0}
+#define NXFONT_BITMAP_188 {0x30, 0x18, 0x0, 0x30, 0x18, 0x0, 0xf0, 0x30, 0x0, 0xf0, 0x30, 0x0, 0x30, 0x60, 0x0, 0x30, 0x60, 0x0, 0x30, 0xc0, 0x0, 0x30, 0xc0, 0x0, 0x31, 0x83, 0x0, 0x31, 0x87, 0x0, 0x3, 0xf, 0x0, 0x3, 0xf, 0x0, 0x6, 0x1b, 0x0, 0x6, 0x33, 0x0, 0xc, 0x7f, 0xc0, 0xc, 0x7f, 0xc0, 0x18, 0x3, 0x0, 0x18, 0x3, 0x0}
+
+/* onehalf (189) */
+#define NXFONT_METRICS_189 {3, 18, 18, 1, 11, 0}
+#define NXFONT_BITMAP_189 {0x30, 0x18, 0x0, 0x30, 0x18, 0x0, 0xf0, 0x30, 0x0, 0xf0, 0x30, 0x0, 0x30, 0x60, 0x0, 0x30, 0x60, 0x0, 0x30, 0xc0, 0x0, 0x30, 0xc0, 0x0, 0x31, 0x87, 0x80, 0x31, 0x8f, 0xc0, 0x3, 0x18, 0xc0, 0x3, 0x0, 0xc0, 0x6, 0x1, 0x80, 0x6, 0x3, 0x0, 0xc, 0x6, 0x0, 0xc, 0xc, 0x0, 0x18, 0x1f, 0xc0, 0x18, 0x1f, 0xc0}
+
+/* threequarters (190) */
+#define NXFONT_METRICS_190 {3, 19, 18, 0, 11, 0}
+#define NXFONT_BITMAP_190 {0x7c, 0xc, 0x0, 0xfe, 0xc, 0x0, 0xc6, 0x18, 0x0, 0x6, 0x18, 0x0, 0x3c, 0x30, 0x0, 0x3c, 0x30, 0x0, 0x6, 0x60, 0x0, 0xc6, 0x60, 0x0, 0xfe, 0xc1, 0x80, 0x7c, 0xc3, 0x80, 0x1, 0x87, 0x80, 0x1, 0x87, 0x80, 0x3, 0xd, 0x80, 0x3, 0x19, 0x80, 0x6, 0x3f, 0xe0, 0x6, 0x3f, 0xe0, 0xc, 0x1, 0x80, 0xc, 0x1, 0x80}
+
+/* questiondown (191) */
+#define NXFONT_METRICS_191 {2, 10, 19, 1, 15, 0}
+#define NXFONT_BITMAP_191 {0xc, 0x0, 0xc, 0x0, 0xc, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0x0, 0xc, 0x0, 0xc, 0x0, 0xc, 0x0, 0x18, 0x0, 0x38, 0x0, 0x70, 0x0, 0x60, 0x0, 0xe0, 0xc0, 0xc0, 0xc0, 0xc1, 0xc0, 0xe3, 0x80, 0x7f, 0x80, 0x3e, 0x0}
+
+/* Agrave (192) */
+#define NXFONT_METRICS_192 {2, 15, 24, 1, 5, 0}
+#define NXFONT_BITMAP_192 {0xc, 0x0, 0x6, 0x0, 0x3, 0x0, 0x1, 0x80, 0x0, 0x0, 0x3, 0x80, 0x3, 0x80, 0x6, 0xc0, 0x6, 0xc0, 0xc, 0x40, 0xc, 0x60, 0xc, 0x60, 0x18, 0x30, 0x18, 0x30, 0x18, 0x30, 0x30, 0x18, 0x3f, 0xf8, 0x3f, 0xf8, 0x60, 0xc, 0x60, 0xc, 0x60, 0xc, 0xc0, 0x6, 0xc0, 0x6, 0xc0, 0x6}
+
+/* Aacute (193) */
+#define NXFONT_METRICS_193 {2, 15, 24, 1, 5, 0}
+#define NXFONT_BITMAP_193 {0x0, 0x60, 0x0, 0xc0, 0x1, 0x80, 0x3, 0x0, 0x0, 0x0, 0x3, 0x80, 0x3, 0x80, 0x6, 0xc0, 0x6, 0xc0, 0xc, 0x40, 0xc, 0x60, 0xc, 0x60, 0x18, 0x30, 0x18, 0x30, 0x18, 0x30, 0x30, 0x18, 0x3f, 0xf8, 0x3f, 0xf8, 0x60, 0xc, 0x60, 0xc, 0x60, 0xc, 0xc0, 0x6, 0xc0, 0x6, 0xc0, 0x6}
+
+/* Acircumflex (194) */
+#define NXFONT_METRICS_194 {2, 15, 24, 1, 5, 0}
+#define NXFONT_BITMAP_194 {0x1, 0x80, 0x3, 0xc0, 0x6, 0x60, 0xc, 0x30, 0x0, 0x0, 0x3, 0x80, 0x3, 0x80, 0x6, 0xc0, 0x6, 0xc0, 0xc, 0x40, 0xc, 0x60, 0xc, 0x60, 0x18, 0x30, 0x18, 0x30, 0x18, 0x30, 0x30, 0x18, 0x3f, 0xf8, 0x3f, 0xf8, 0x60, 0xc, 0x60, 0xc, 0x60, 0xc, 0xc0, 0x6, 0xc0, 0x6, 0xc0, 0x6}
+
+/* Atilde (195) */
+#define NXFONT_METRICS_195 {2, 15, 23, 1, 6, 0}
+#define NXFONT_BITMAP_195 {0x7, 0x10, 0xd, 0xb0, 0x8, 0xe0, 0x0, 0x0, 0x3, 0x80, 0x3, 0x80, 0x6, 0xc0, 0x6, 0xc0, 0xc, 0x40, 0xc, 0x60, 0xc, 0x60, 0x18, 0x30, 0x18, 0x30, 0x18, 0x30, 0x30, 0x18, 0x3f, 0xf8, 0x3f, 0xf8, 0x60, 0xc, 0x60, 0xc, 0x60, 0xc, 0xc0, 0x6, 0xc0, 0x6, 0xc0, 0x6}
+
+/* Adieresis (196) */
+#define NXFONT_METRICS_196 {2, 15, 23, 1, 6, 0}
+#define NXFONT_BITMAP_196 {0xc, 0x60, 0xc, 0x60, 0x0, 0x0, 0x0, 0x0, 0x3, 0x80, 0x3, 0x80, 0x6, 0xc0, 0x6, 0xc0, 0xc, 0x40, 0xc, 0x60, 0xc, 0x60, 0x18, 0x30, 0x18, 0x30, 0x18, 0x30, 0x30, 0x18, 0x3f, 0xf8, 0x3f, 0xf8, 0x60, 0xc, 0x60, 0xc, 0x60, 0xc, 0xc0, 0x6, 0xc0, 0x6, 0xc0, 0x6}
+
+/* Aring (197) */
+#define NXFONT_METRICS_197 {2, 15, 24, 1, 5, 0}
+#define NXFONT_BITMAP_197 {0x3, 0x80, 0x4, 0x40, 0x4, 0x40, 0x3, 0x80, 0x0, 0x0, 0x3, 0x80, 0x3, 0x80, 0x6, 0xc0, 0x6, 0xc0, 0xc, 0x40, 0xc, 0x60, 0xc, 0x60, 0x18, 0x30, 0x18, 0x30, 0x18, 0x30, 0x30, 0x18, 0x3f, 0xf8, 0x3f, 0xf8, 0x60, 0xc, 0x60, 0xc, 0x60, 0xc, 0xc0, 0x6, 0xc0, 0x6, 0xc0, 0x6}
+
+/* AE (198) */
+#define NXFONT_METRICS_198 {3, 21, 19, 1, 10, 0}
+#define NXFONT_BITMAP_198 {0x3, 0xff, 0xf8, 0x3, 0xff, 0xf8, 0x6, 0x60, 0x0, 0x6, 0x60, 0x0, 0xc, 0x60, 0x0, 0xc, 0x60, 0x0, 0xc, 0x60, 0x0, 0x18, 0x60, 0x0, 0x18, 0x7f, 0xf8, 0x18, 0x7f, 0xf8, 0x30, 0x60, 0x0, 0x3f, 0xe0, 0x0, 0x3f, 0xe0, 0x0, 0x60, 0x60, 0x0, 0x60, 0x60, 0x0, 0x60, 0x60, 0x0, 0xc0, 0x60, 0x0, 0xc0, 0x7f, 0xf8, 0xc0, 0x7f, 0xf8}
+
+/* Ccedilla (199) */
+#define NXFONT_METRICS_199 {2, 15, 24, 1, 10, 0}
+#define NXFONT_BITMAP_199 {0x7, 0xe0, 0x1f, 0xf8, 0x3c, 0x3c, 0x70, 0xe, 0x60, 0x6, 0xe0, 0x6, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xe0, 0x6, 0x60, 0x6, 0x70, 0xe, 0x3c, 0x3c, 0x1f, 0xf8, 0x7, 0xe0, 0x1, 0x80, 0x0, 0xc0, 0x0, 0xc0, 0x7, 0xc0, 0x3, 0x80}
+
+/* Egrave (200) */
+#define NXFONT_METRICS_200 {2, 12, 24, 2, 5, 0}
+#define NXFONT_BITMAP_200 {0x30, 0x0, 0x18, 0x0, 0xc, 0x0, 0x6, 0x0, 0x0, 0x0, 0xff, 0xf0, 0xff, 0xf0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xff, 0xe0, 0xff, 0xe0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xff, 0xf0, 0xff, 0xf0}
+
+/* Eacute (201) */
+#define NXFONT_METRICS_201 {2, 12, 24, 2, 5, 0}
+#define NXFONT_BITMAP_201 {0x1, 0x80, 0x3, 0x0, 0x6, 0x0, 0xc, 0x0, 0x0, 0x0, 0xff, 0xf0, 0xff, 0xf0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xff, 0xe0, 0xff, 0xe0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xff, 0xf0, 0xff, 0xf0}
+
+/* Ecircumflex (202) */
+#define NXFONT_METRICS_202 {2, 12, 24, 2, 5, 0}
+#define NXFONT_BITMAP_202 {0x6, 0x0, 0xf, 0x0, 0x19, 0x80, 0x30, 0xc0, 0x0, 0x0, 0xff, 0xf0, 0xff, 0xf0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xff, 0xe0, 0xff, 0xe0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xff, 0xf0, 0xff, 0xf0}
+
+/* Edieresis (203) */
+#define NXFONT_METRICS_203 {2, 12, 23, 2, 6, 0}
+#define NXFONT_BITMAP_203 {0x18, 0xc0, 0x18, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xf0, 0xff, 0xf0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xff, 0xe0, 0xff, 0xe0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xff, 0xf0, 0xff, 0xf0}
+
+/* Igrave (204) */
+#define NXFONT_METRICS_204 {1, 5, 24, 1, 5, 0}
+#define NXFONT_BITMAP_204 {0xc0, 0x60, 0x30, 0x18, 0x0, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30}
+
+/* Iacute (205) */
+#define NXFONT_METRICS_205 {1, 5, 24, 2, 5, 0}
+#define NXFONT_BITMAP_205 {0x18, 0x30, 0x60, 0xc0, 0x0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60}
+
+/* Icircumflex (206) */
+#define NXFONT_METRICS_206 {1, 8, 24, 0, 5, 0}
+#define NXFONT_BITMAP_206 {0x18, 0x3c, 0x66, 0xc3, 0x0, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}
+
+/* Idieresis (207) */
+#define NXFONT_METRICS_207 {1, 6, 23, 1, 6, 0}
+#define NXFONT_BITMAP_207 {0xcc, 0xcc, 0x0, 0x0, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30}
+
+/* Eth (208) -- NOTE: Xoffset should be -1, not 0. */
+#define NXFONT_METRICS_208 {3, 18, 19, 0, 10, 0}
+#define NXFONT_BITMAP_208 {0x1f, 0xf8, 0x0, 0x1f, 0xfe, 0x0, 0x18, 0xf, 0x0, 0x18, 0x3, 0x80, 0x18, 0x1, 0x80, 0x18, 0x1, 0xc0, 0x18, 0x0, 0xc0, 0x18, 0x0, 0xc0, 0xff, 0x80, 0xc0, 0xff, 0x80, 0xc0, 0x18, 0x0, 0xc0, 0x18, 0x0, 0xc0, 0x18, 0x0, 0xc0, 0x18, 0x1, 0xc0, 0x18, 0x1, 0x80, 0x18, 0x3, 0x80, 0x18, 0xf, 0x0, 0x1f, 0xfe, 0x0, 0x1f, 0xf8, 0x0}
+
+/* Ntilde (209) */
+#define NXFONT_METRICS_209 {2, 14, 23, 2, 6, 0}
+#define NXFONT_BITMAP_209 {0xe, 0x20, 0x1b, 0x60, 0x11, 0xc0, 0x0, 0x0, 0xe0, 0xc, 0xf0, 0xc, 0xf0, 0xc, 0xd8, 0xc, 0xdc, 0xc, 0xcc, 0xc, 0xce, 0xc, 0xc6, 0xc, 0xc7, 0xc, 0xc3, 0xc, 0xc3, 0x8c, 0xc1, 0x8c, 0xc1, 0xcc, 0xc0, 0xcc, 0xc0, 0xec, 0xc0, 0x6c, 0xc0, 0x3c, 0xc0, 0x3c, 0xc0, 0x1c}
+
+/* Ograve (210) */
+#define NXFONT_METRICS_210 {2, 16, 24, 1, 5, 0}
+#define NXFONT_BITMAP_210 {0xc, 0x0, 0x6, 0x0, 0x3, 0x0, 0x1, 0x80, 0x0, 0x0, 0x7, 0xe0, 0x1f, 0xf8, 0x3c, 0x3c, 0x70, 0xe, 0x60, 0x6, 0xe0, 0x7, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xe0, 0x7, 0x60, 0x6, 0x70, 0xe, 0x3c, 0x3c, 0x1f, 0xf8, 0x7, 0xe0}
+
+/* Oacute (211) */
+#define NXFONT_METRICS_211 {2, 16, 24, 1, 5, 0}
+#define NXFONT_BITMAP_211 {0x0, 0x30, 0x0, 0x60, 0x0, 0xc0, 0x1, 0x80, 0x0, 0x0, 0x7, 0xe0, 0x1f, 0xf8, 0x3c, 0x3c, 0x70, 0xe, 0x60, 0x6, 0xe0, 0x7, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xe0, 0x7, 0x60, 0x6, 0x70, 0xe, 0x3c, 0x3c, 0x1f, 0xf8, 0x7, 0xe0}
+
+/* Ocircumflex (212) */
+#define NXFONT_METRICS_212 {2, 16, 24, 1, 5, 0}
+#define NXFONT_BITMAP_212 {0x0, 0xc0, 0x1, 0xe0, 0x3, 0x30, 0x6, 0x18, 0x0, 0x0, 0x7, 0xe0, 0x1f, 0xf8, 0x3c, 0x3c, 0x70, 0xe, 0x60, 0x6, 0xe0, 0x7, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xe0, 0x7, 0x60, 0x6, 0x70, 0xe, 0x3c, 0x3c, 0x1f, 0xf8, 0x7, 0xe0}
+
+/* Otilde (213) */
+#define NXFONT_METRICS_213 {2, 16, 23, 1, 6, 0}
+#define NXFONT_BITMAP_213 {0x3, 0x88, 0x6, 0xd8, 0x4, 0x70, 0x0, 0x0, 0x7, 0xe0, 0x1f, 0xf8, 0x3c, 0x3c, 0x70, 0xe, 0x60, 0x6, 0xe0, 0x7, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xe0, 0x7, 0x60, 0x6, 0x70, 0xe, 0x3c, 0x3c, 0x1f, 0xf8, 0x7, 0xe0}
+
+/* Odieresis (214) */
+#define NXFONT_METRICS_214 {2, 16, 23, 1, 6, 0}
+#define NXFONT_BITMAP_214 {0x6, 0x30, 0x6, 0x30, 0x0, 0x0, 0x0, 0x0, 0x7, 0xe0, 0x1f, 0xf8, 0x3c, 0x3c, 0x70, 0xe, 0x60, 0x6, 0xe0, 0x7, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xe0, 0x7, 0x60, 0x6, 0x70, 0xe, 0x3c, 0x3c, 0x1f, 0xf8, 0x7, 0xe0}
+
+/* multiply (215) */
+#define NXFONT_METRICS_215 {2, 13, 12, 0, 16, 0}
+#define NXFONT_BITMAP_215 {0xc0, 0x18, 0x60, 0x30, 0x30, 0x60, 0x18, 0xc0, 0xd, 0x80, 0x7, 0x0, 0x7, 0x0, 0xd, 0x80, 0x18, 0xc0, 0x30, 0x60, 0x60, 0x30, 0xc0, 0x18}
+
+/* Oslash (216) */
+#define NXFONT_METRICS_216 {3, 18, 19, 0, 10, 0}
+#define NXFONT_BITMAP_216 {0x3, 0xf0, 0xc0, 0xf, 0xfd, 0xc0, 0x1e, 0x1f, 0x80, 0x38, 0x7, 0x0, 0x30, 0xf, 0x0, 0x70, 0x1d, 0x80, 0x60, 0x39, 0x80, 0x60, 0x71, 0x80, 0x60, 0xe1, 0x80, 0x61, 0xc1, 0x80, 0x63, 0x81, 0x80, 0x67, 0x1, 0x80, 0x6e, 0x1, 0x80, 0x7c, 0x3, 0x80, 0x38, 0x3, 0x0, 0x38, 0x7, 0x0, 0x7e, 0x1e, 0x0, 0xef, 0xfc, 0x0, 0xc3, 0xf0, 0x0}
+
+/* Ugrave (217) */
+#define NXFONT_METRICS_217 {2, 14, 24, 2, 5, 0}
+#define NXFONT_BITMAP_217 {0x18, 0x0, 0xc, 0x0, 0x6, 0x0, 0x3, 0x0, 0x0, 0x0, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0x60, 0x18, 0x70, 0x38, 0x3f, 0xf0, 0xf, 0xc0}
+
+/* Uacute (218) */
+#define NXFONT_METRICS_218 {2, 14, 24, 2, 5, 0}
+#define NXFONT_BITMAP_218 {0x0, 0x60, 0x0, 0xc0, 0x1, 0x80, 0x3, 0x0, 0x0, 0x0, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0x60, 0x18, 0x70, 0x38, 0x3f, 0xf0, 0xf, 0xc0}
+
+/* Ucircumflex (219) */
+#define NXFONT_METRICS_219 {2, 14, 24, 2, 5, 0}
+#define NXFONT_BITMAP_219 {0x3, 0x0, 0x7, 0x80, 0xc, 0xc0, 0x18, 0x60, 0x0, 0x0, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0x60, 0x18, 0x70, 0x38, 0x3f, 0xf0, 0xf, 0xc0}
+
+/* Udieresis (220) */
+#define NXFONT_METRICS_220 {2, 14, 23, 2, 6, 0}
+#define NXFONT_BITMAP_220 {0x18, 0xc0, 0x18, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0x60, 0x18, 0x70, 0x38, 0x3f, 0xf0, 0xf, 0xc0}
+
+/* Yacute (221) */
+#define NXFONT_METRICS_221 {2, 14, 24, 1, 5, 0}
+#define NXFONT_BITMAP_221 {0x0, 0x60, 0x0, 0xc0, 0x1, 0x80, 0x3, 0x0, 0x0, 0x0, 0xc0, 0xc, 0xe0, 0x1c, 0x60, 0x18, 0x70, 0x38, 0x30, 0x30, 0x38, 0x70, 0x18, 0x60, 0x1c, 0xe0, 0xc, 0xc0, 0xf, 0xc0, 0x7, 0x80, 0x7, 0x80, 0x3, 0x0, 0x3, 0x0, 0x3, 0x0, 0x3, 0x0, 0x3, 0x0, 0x3, 0x0, 0x3, 0x0}
+
+/* Thorn (222) */
+#define NXFONT_METRICS_222 {2, 13, 19, 2, 10, 0}
+#define NXFONT_BITMAP_222 {0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xff, 0xe0, 0xff, 0xf0, 0xc0, 0x30, 0xc0, 0x18, 0xc0, 0x18, 0xc0, 0x18, 0xc0, 0x18, 0xc0, 0x30, 0xff, 0xf0, 0xff, 0xe0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0}
+
+/* germandbls (223) */
+#define NXFONT_METRICS_223 {2, 10, 19, 3, 10, 0}
+#define NXFONT_BITMAP_223 {0x1c, 0x0, 0x7f, 0x0, 0xe3, 0x0, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc3, 0x0, 0xc7, 0x0, 0xce, 0x0, 0xcf, 0x0, 0xc3, 0x80, 0xc1, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc1, 0x80, 0xc3, 0x80, 0xcf, 0x0, 0xce, 0x0}
+
+/* agrave (224) */
+#define NXFONT_METRICS_224 {2, 11, 19, 1, 10, 0}
+#define NXFONT_BITMAP_224 {0x18, 0x0, 0xc, 0x0, 0x6, 0x0, 0x3, 0x0, 0x0, 0x0, 0x1f, 0x0, 0x3f, 0x80, 0x61, 0xc0, 0x60, 0xc0, 0x0, 0xc0, 0x7, 0xc0, 0x3f, 0xc0, 0x78, 0xc0, 0xe0, 0xc0, 0xc0, 0xc0, 0xc1, 0xc0, 0xe3, 0xc0, 0x7e, 0xe0, 0x3c, 0x60}
+
+/* aacute (225) */
+#define NXFONT_METRICS_225 {2, 11, 19, 1, 10, 0}
+#define NXFONT_BITMAP_225 {0x1, 0x80, 0x3, 0x0, 0x6, 0x0, 0xc, 0x0, 0x0, 0x0, 0x1f, 0x0, 0x3f, 0x80, 0x61, 0xc0, 0x60, 0xc0, 0x0, 0xc0, 0x7, 0xc0, 0x3f, 0xc0, 0x78, 0xc0, 0xe0, 0xc0, 0xc0, 0xc0, 0xc1, 0xc0, 0xe3, 0xc0, 0x7e, 0xe0, 0x3c, 0x60}
+
+/* acircumflex (226) */
+#define NXFONT_METRICS_226 {2, 11, 19, 1, 10, 0}
+#define NXFONT_BITMAP_226 {0xc, 0x0, 0x1e, 0x0, 0x33, 0x0, 0x61, 0x80, 0x0, 0x0, 0x1f, 0x0, 0x3f, 0x80, 0x61, 0xc0, 0x60, 0xc0, 0x0, 0xc0, 0x7, 0xc0, 0x3f, 0xc0, 0x78, 0xc0, 0xe0, 0xc0, 0xc0, 0xc0, 0xc1, 0xc0, 0xe3, 0xc0, 0x7e, 0xe0, 0x3c, 0x60}
+
+/* atilde (227) */
+#define NXFONT_METRICS_227 {2, 11, 18, 1, 11, 0}
+#define NXFONT_BITMAP_227 {0x1c, 0x40, 0x36, 0xc0, 0x23, 0x80, 0x0, 0x0, 0x1f, 0x0, 0x3f, 0x80, 0x61, 0xc0, 0x60, 0xc0, 0x0, 0xc0, 0x7, 0xc0, 0x3f, 0xc0, 0x78, 0xc0, 0xe0, 0xc0, 0xc0, 0xc0, 0xc1, 0xc0, 0xe3, 0xc0, 0x7e, 0xe0, 0x3c, 0x60}
+
+/* adieresis (228) */
+#define NXFONT_METRICS_228 {2, 11, 18, 1, 11, 0}
+#define NXFONT_BITMAP_228 {0x33, 0x0, 0x33, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x0, 0x3f, 0x80, 0x61, 0xc0, 0x60, 0xc0, 0x0, 0xc0, 0x7, 0xc0, 0x3f, 0xc0, 0x78, 0xc0, 0xe0, 0xc0, 0xc0, 0xc0, 0xc1, 0xc0, 0xe3, 0xc0, 0x7e, 0xe0, 0x3c, 0x60}
+
+/* aring (229) */
+#define NXFONT_METRICS_229 {2, 11, 19, 1, 10, 0}
+#define NXFONT_BITMAP_229 {0x6, 0x0, 0x9, 0x0, 0x9, 0x0, 0x6, 0x0, 0x0, 0x0, 0x1f, 0x0, 0x3f, 0x80, 0x61, 0xc0, 0x60, 0xc0, 0x0, 0xc0, 0x7, 0xc0, 0x3f, 0xc0, 0x78, 0xc0, 0xe0, 0xc0, 0xc0, 0xc0, 0xc1, 0xc0, 0xe3, 0xc0, 0x7e, 0xe0, 0x3c, 0x60}
+
+/* ae (230) */
+#define NXFONT_METRICS_230 {3, 19, 14, 1, 15, 0}
+#define NXFONT_BITMAP_230 {0x1f, 0xe, 0x0, 0x3f, 0xbf, 0x80, 0x61, 0xf1, 0xc0, 0x60, 0xe0, 0xc0, 0x0, 0xc0, 0x60, 0x7, 0xc0, 0x60, 0x3f, 0xff, 0xe0, 0x78, 0xff, 0xe0, 0xe0, 0xc0, 0x0, 0xc0, 0xc0, 0x0, 0xc1, 0xe0, 0x60, 0xe3, 0xf0, 0xe0, 0x7e, 0x3f, 0xc0, 0x3c, 0xf, 0x0}
+
+/* ccedilla (231) */
+#define NXFONT_METRICS_231 {2, 10, 19, 1, 15, 0}
+#define NXFONT_BITMAP_231 {0x1f, 0x0, 0x3f, 0x80, 0x71, 0xc0, 0x60, 0xc0, 0xe0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xe0, 0x0, 0x60, 0xc0, 0x71, 0xc0, 0x3f, 0x80, 0x1f, 0x0, 0xc, 0x0, 0x6, 0x0, 0x6, 0x0, 0x3e, 0x0, 0x1c, 0x0}
+
+/* egrave (232) */
+#define NXFONT_METRICS_232 {2, 11, 19, 1, 10, 0}
+#define NXFONT_BITMAP_232 {0x18, 0x0, 0xc, 0x0, 0x6, 0x0, 0x3, 0x0, 0x0, 0x0, 0xe, 0x0, 0x3f, 0x80, 0x71, 0xc0, 0x60, 0xc0, 0xc0, 0x60, 0xc0, 0x60, 0xff, 0xe0, 0xff, 0xe0, 0xc0, 0x0, 0xc0, 0x0, 0x60, 0x60, 0x70, 0xe0, 0x3f, 0xc0, 0xf, 0x0}
+
+/* eacute (233) */
+#define NXFONT_METRICS_233 {2, 11, 19, 1, 10, 0}
+#define NXFONT_BITMAP_233 {0x3, 0x0, 0x6, 0x0, 0xc, 0x0, 0x18, 0x0, 0x0, 0x0, 0xe, 0x0, 0x3f, 0x80, 0x71, 0xc0, 0x60, 0xc0, 0xc0, 0x60, 0xc0, 0x60, 0xff, 0xe0, 0xff, 0xe0, 0xc0, 0x0, 0xc0, 0x0, 0x60, 0x60, 0x70, 0xe0, 0x3f, 0xc0, 0xf, 0x0}
+
+/* ecircumflex (234) */
+#define NXFONT_METRICS_234 {2, 11, 19, 1, 10, 0}
+#define NXFONT_BITMAP_234 {0xc, 0x0, 0x1e, 0x0, 0x33, 0x0, 0x61, 0x80, 0x0, 0x0, 0xe, 0x0, 0x3f, 0x80, 0x71, 0xc0, 0x60, 0xc0, 0xc0, 0x60, 0xc0, 0x60, 0xff, 0xe0, 0xff, 0xe0, 0xc0, 0x0, 0xc0, 0x0, 0x60, 0x60, 0x70, 0xe0, 0x3f, 0xc0, 0xf, 0x0}
+
+/* edieresis (235) */
+#define NXFONT_METRICS_235 {2, 11, 18, 1, 11, 0}
+#define NXFONT_BITMAP_235 {0x33, 0x0, 0x33, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe, 0x0, 0x3f, 0x80, 0x71, 0xc0, 0x60, 0xc0, 0xc0, 0x60, 0xc0, 0x60, 0xff, 0xe0, 0xff, 0xe0, 0xc0, 0x0, 0xc0, 0x0, 0x60, 0x60, 0x70, 0xe0, 0x3f, 0xc0, 0xf, 0x0}
+
+/* igrave (236) */
+#define NXFONT_METRICS_236 {1, 5, 19, 0, 10, 0}
+#define NXFONT_BITMAP_236 {0xc0, 0x60, 0x30, 0x18, 0x0, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30}
+
+/* iacute (237) */
+#define NXFONT_METRICS_237 {1, 5, 19, 1, 10, 0}
+#define NXFONT_BITMAP_237 {0x18, 0x30, 0x60, 0xc0, 0x0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60}
+
+/* icircumflex (238) -- NOTE: Xoffset should be -1, not 0. */
+#define NXFONT_METRICS_238 {1, 8, 19, 0, 10, 0}
+#define NXFONT_BITMAP_238 {0x18, 0x3c, 0x66, 0xc3, 0x0, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}
+
+/* idieresis (239) */
+#define NXFONT_METRICS_239 {1, 6, 18, 0, 11, 0}
+#define NXFONT_BITMAP_239 {0xcc, 0xcc, 0x0, 0x0, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30}
+
+/* eth (240) */
+#define NXFONT_METRICS_240 {2, 11, 19, 1, 10, 0}
+#define NXFONT_BITMAP_240 {0x60, 0x0, 0x39, 0x80, 0xe, 0x0, 0x1e, 0x0, 0x63, 0x0, 0x1f, 0x80, 0x3f, 0x80, 0x71, 0xc0, 0x60, 0xc0, 0xe0, 0xe0, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xe0, 0xe0, 0x60, 0xc0, 0x71, 0xc0, 0x3f, 0x80, 0x1f, 0x0}
+
+/* ntilde (241) */
+#define NXFONT_METRICS_241 {2, 10, 18, 2, 11, 0}
+#define NXFONT_BITMAP_241 {0x38, 0x80, 0x6d, 0x80, 0x47, 0x0, 0x0, 0x0, 0xce, 0x0, 0xdf, 0x80, 0xf1, 0x80, 0xe0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* ograve (242) */
+#define NXFONT_METRICS_242 {2, 11, 19, 1, 10, 0}
+#define NXFONT_BITMAP_242 {0x18, 0x0, 0xc, 0x0, 0x6, 0x0, 0x3, 0x0, 0x0, 0x0, 0x1f, 0x0, 0x3f, 0x80, 0x71, 0xc0, 0x60, 0xc0, 0xe0, 0xe0, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xe0, 0xe0, 0x60, 0xc0, 0x71, 0xc0, 0x3f, 0x80, 0x1f, 0x0}
+
+/* oacute (243) */
+#define NXFONT_METRICS_243 {2, 11, 19, 1, 10, 0}
+#define NXFONT_BITMAP_243 {0x3, 0x0, 0x6, 0x0, 0xc, 0x0, 0x18, 0x0, 0x0, 0x0, 0x1f, 0x0, 0x3f, 0x80, 0x71, 0xc0, 0x60, 0xc0, 0xe0, 0xe0, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xe0, 0xe0, 0x60, 0xc0, 0x71, 0xc0, 0x3f, 0x80, 0x1f, 0x0}
+
+/* ocircumflex (244) */
+#define NXFONT_METRICS_244 {2, 11, 19, 1, 10, 0}
+#define NXFONT_BITMAP_244 {0xc, 0x0, 0x1e, 0x0, 0x33, 0x0, 0x61, 0x80, 0x0, 0x0, 0x1f, 0x0, 0x3f, 0x80, 0x71, 0xc0, 0x60, 0xc0, 0xe0, 0xe0, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xe0, 0xe0, 0x60, 0xc0, 0x71, 0xc0, 0x3f, 0x80, 0x1f, 0x0}
+
+/* otilde (245) */
+#define NXFONT_METRICS_245 {2, 11, 18, 1, 11, 0}
+#define NXFONT_BITMAP_245 {0x1c, 0x40, 0x36, 0xc0, 0x23, 0x80, 0x0, 0x0, 0x1f, 0x0, 0x3f, 0x80, 0x71, 0xc0, 0x60, 0xc0, 0xe0, 0xe0, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xe0, 0xe0, 0x60, 0xc0, 0x71, 0xc0, 0x3f, 0x80, 0x1f, 0x0}
+
+/* odieresis (246) */
+#define NXFONT_METRICS_246 {2, 11, 18, 1, 11, 0}
+#define NXFONT_BITMAP_246 {0x33, 0x0, 0x33, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x0, 0x3f, 0x80, 0x71, 0xc0, 0x60, 0xc0, 0xe0, 0xe0, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xe0, 0xe0, 0x60, 0xc0, 0x71, 0xc0, 0x3f, 0x80, 0x1f, 0x0}
+
+/* divide (247) */
+#define NXFONT_METRICS_247 {2, 12, 12, 1, 16, 0}
+#define NXFONT_BITMAP_247 {0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xf0, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0}
+
+/* oslash (248) */
+#define NXFONT_METRICS_248 {2, 13, 14, 0, 15, 0}
+#define NXFONT_BITMAP_248 {0xf, 0x98, 0x1f, 0xf8, 0x38, 0x70, 0x30, 0xe0, 0x71, 0xf0, 0x63, 0xb0, 0x63, 0x30, 0x66, 0x30, 0x6c, 0x30, 0x7c, 0x70, 0x38, 0x60, 0x70, 0xe0, 0xff, 0xc0, 0xcf, 0x80}
+
+/* ugrave (249) */
+#define NXFONT_METRICS_249 {2, 10, 19, 2, 10, 0}
+#define NXFONT_BITMAP_249 {0x30, 0x0, 0x18, 0x0, 0xc, 0x0, 0x6, 0x0, 0x0, 0x0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc1, 0xc0, 0x63, 0xc0, 0x7e, 0xc0, 0x1c, 0xc0}
+
+/* uacute (250) */
+#define NXFONT_METRICS_250 {2, 10, 19, 2, 10, 0}
+#define NXFONT_BITMAP_250 {0x3, 0x0, 0x6, 0x0, 0xc, 0x0, 0x18, 0x0, 0x0, 0x0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc1, 0xc0, 0x63, 0xc0, 0x7e, 0xc0, 0x1c, 0xc0}
+
+/* ucircumflex (251) */
+#define NXFONT_METRICS_251 {2, 10, 19, 2, 10, 0}
+#define NXFONT_BITMAP_251 {0xc, 0x0, 0x1e, 0x0, 0x33, 0x0, 0x61, 0x80, 0x0, 0x0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc1, 0xc0, 0x63, 0xc0, 0x7e, 0xc0, 0x1c, 0xc0}
+
+/* udieresis (252) */
+#define NXFONT_METRICS_252 {2, 10, 18, 2, 11, 0}
+#define NXFONT_BITMAP_252 {0x33, 0x0, 0x33, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc1, 0xc0, 0x63, 0xc0, 0x7e, 0xc0, 0x1c, 0xc0}
+
+/* yacute (253) */
+#define NXFONT_METRICS_253 {2, 12, 24, 0, 10, 0}
+#define NXFONT_BITMAP_253 {0x0, 0xc0, 0x1, 0x80, 0x3, 0x0, 0x6, 0x0, 0x0, 0x0, 0xc0, 0x30, 0xc0, 0x30, 0x60, 0x30, 0x70, 0x60, 0x30, 0x60, 0x38, 0xe0, 0x18, 0xc0, 0x18, 0xc0, 0xd, 0x80, 0xd, 0x80, 0x7, 0x80, 0x7, 0x0, 0x3, 0x0, 0x3, 0x0, 0x6, 0x0, 0x6, 0x0, 0xc, 0x0, 0x3c, 0x0, 0x38, 0x0}
+
+/* thorn (254) */
+#define NXFONT_METRICS_254 {2, 11, 24, 2, 10, 0}
+#define NXFONT_BITMAP_254 {0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xcf, 0x0, 0xdf, 0x80, 0xf1, 0xc0, 0xe0, 0xc0, 0xc0, 0xe0, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0xe0, 0xe0, 0xc0, 0xf1, 0xc0, 0xdf, 0x80, 0xcf, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0}
+
+/* ydieresis (255) */
+#define NXFONT_METRICS_255 {2, 12, 23, 0, 11, 0}
+#define NXFONT_BITMAP_255 {0x19, 0x80, 0x19, 0x80, 0x0, 0x0, 0x0, 0x0, 0xc0, 0x30, 0xc0, 0x30, 0x60, 0x30, 0x70, 0x60, 0x30, 0x60, 0x38, 0xe0, 0x18, 0xc0, 0x18, 0xc0, 0xd, 0x80, 0xd, 0x80, 0x7, 0x80, 0x7, 0x0, 0x3, 0x0, 0x3, 0x0, 0x6, 0x0, 0x6, 0x0, 0xc, 0x0, 0x3c, 0x0, 0x38, 0x0}
+
+/****************************************************************************
+ * Public Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+#define EXTERN extern "C"
+extern "C" {
+#else
+#define EXTERN extern
+#endif
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* __GRAPHICS_NXFONTS_NXFONTS_SANS28X37_H */
diff --git a/nuttx/graphics/nxfonts/nxfonts_sans28x37b.h b/nuttx/graphics/nxfonts/nxfonts_sans28x37b.h
new file mode 100755
index 000000000..6f368056d
--- /dev/null
+++ b/nuttx/graphics/nxfonts/nxfonts_sans28x37b.h
@@ -0,0 +1,849 @@
+/****************************************************************************
+ * graphics/nxfonts/nxfonts_sans28x37b.h
+ *
+ * Copyright (C) 2011-2012 NX Engineering, S.A., All rights reserved.
+ * Author: Jose Pablo Carballo Gomez <jcarballo@nx-engineering.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT}
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING}
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+#ifndef __GRAPHICS_NXFONTS_NXFONTS_SANS28X37B_H
+#define __GRAPHICS_NXFONTS_NXFONTS_SANS28X37B_H
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/* Font ID */
+
+#define NXFONT_ID FONTID_SANS28X37B
+
+/* Ranges of 7-bit and 8-bit fonts */
+
+#define NXFONT_MIN7BIT 33
+#define NXFONT_MAX7BIT 126
+
+#define NXFONT_MIN8BIT 161
+#define NXFONT_MAX8BIT 255
+
+/* Maximum height and width of any glyph in the set */
+
+#define NXFONT_MAXHEIGHT 37
+#define NXFONT_MAXWIDTH 28
+
+/* The width of a space */
+
+#define NXFONT_SPACEWIDTH 6
+
+/* exclam (33) */
+#define NXFONT_METRICS_33 {1, 3, 19, 2, 10, 0}
+#define NXFONT_BITMAP_33 {0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xc0, 0xc0, 0xc0, 0x0, 0x0, 0xe0, 0xe0, 0xe0}
+
+/* quotedbl (34) */
+#define NXFONT_METRICS_34 {1, 5, 6, 2, 10, 0}
+#define NXFONT_BITMAP_34 {0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0x90}
+
+/* numbersign (35) */
+#define NXFONT_METRICS_35 {2, 12, 18, 1, 11, 0}
+#define NXFONT_BITMAP_35 {0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0x7f, 0xf0, 0x7f, 0xf0, 0x19, 0x80, 0x19, 0x80, 0x19, 0x80, 0x19, 0x80, 0xff, 0xe0, 0xff, 0xe0, 0x33, 0x0, 0x33, 0x0, 0x33, 0x0, 0x33, 0x0, 0x33, 0x0}
+
+/* dollar (36) */
+#define NXFONT_METRICS_36 {2, 12, 21, 0, 10, 0}
+#define NXFONT_BITMAP_36 {0x6, 0x0, 0x3f, 0x80, 0x7f, 0xe0, 0xf6, 0xe0, 0xe6, 0x70, 0xe6, 0x70, 0xf6, 0x0, 0x7e, 0x0, 0x3e, 0x0, 0xf, 0x0, 0x7, 0xc0, 0x7, 0xe0, 0x6, 0xf0, 0xe6, 0x70, 0xe6, 0x70, 0xe6, 0x70, 0xf6, 0xf0, 0x7f, 0xe0, 0x1f, 0xc0, 0x6, 0x0, 0x6, 0x0}
+
+/* percent (37) */
+#define NXFONT_METRICS_37 {3, 21, 18, 0, 11, 0}
+#define NXFONT_BITMAP_37 {0x0, 0x7, 0x0, 0x3e, 0x7, 0x0, 0x7f, 0xe, 0x0, 0xe3, 0x8e, 0x0, 0xc1, 0x9c, 0x0, 0xc1, 0x9c, 0x0, 0xe3, 0xb8, 0x0, 0x7f, 0x38, 0x0, 0x3e, 0x70, 0x0, 0x0, 0x70, 0x0, 0x0, 0xe3, 0xe0, 0x0, 0xe7, 0xf0, 0x1, 0xce, 0x38, 0x1, 0xcc, 0x18, 0x3, 0x8c, 0x18, 0x3, 0x8e, 0x38, 0x7, 0x7, 0xf0, 0x7, 0x3, 0xe0}
+
+/* ampersand (38) */
+#define NXFONT_METRICS_38 {2, 16, 18, 1, 11, 0}
+#define NXFONT_BITMAP_38 {0xf, 0x80, 0x1f, 0xc0, 0x3d, 0xe0, 0x38, 0xe0, 0x38, 0xe0, 0x38, 0xe0, 0x1d, 0xc0, 0xf, 0x80, 0x1f, 0x0, 0x3f, 0x9c, 0x7b, 0xdc, 0x71, 0xfc, 0xe0, 0xf8, 0xe0, 0x70, 0xe0, 0xf8, 0xf1, 0xfc, 0x7f, 0xce, 0x1f, 0x87}
+
+/* quotesingle (39) */
+#define NXFONT_METRICS_39 {1, 2, 6, 2, 10, 0}
+#define NXFONT_BITMAP_39 {0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x80}
+
+/* parenleft (40) */
+#define NXFONT_METRICS_40 {1, 6, 24, 1, 10, 0}
+#define NXFONT_BITMAP_40 {0xc, 0x1c, 0x38, 0x38, 0x70, 0x70, 0x60, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0x60, 0x70, 0x70, 0x38, 0x38, 0x1c, 0xc}
+
+/* parenright (41) */
+#define NXFONT_METRICS_41 {1, 6, 24, 1, 10, 0}
+#define NXFONT_BITMAP_41 {0xc0, 0xe0, 0x70, 0x70, 0x38, 0x38, 0x18, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x18, 0x38, 0x38, 0x70, 0x70, 0xe0, 0xc0}
+
+/* asterisk (42) */
+#define NXFONT_METRICS_42 {1, 8, 7, 1, 10, 0}
+#define NXFONT_BITMAP_42 {0x18, 0x18, 0xdb, 0xff, 0x3c, 0x66, 0x66}
+
+/* plus (43) */
+#define NXFONT_METRICS_43 {2, 12, 12, 1, 16, 0}
+#define NXFONT_BITMAP_43 {0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0xff, 0xf0, 0xff, 0xf0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0}
+
+/* comma (44) */
+#define NXFONT_METRICS_44 {1, 3, 6, 2, 26, 0}
+#define NXFONT_BITMAP_44 {0xe0, 0xe0, 0xe0, 0x60, 0x60, 0xc0}
+
+/* hyphen (45) */
+#define NXFONT_METRICS_45 {1, 7, 3, 0, 20, 0}
+#define NXFONT_BITMAP_45 {0xfe, 0xfe, 0xfe}
+
+/* period (46) */
+#define NXFONT_METRICS_46 {1, 3, 3, 2, 26, 0}
+#define NXFONT_BITMAP_46 {0xe0, 0xe0, 0xe0}
+
+/* slash (47) */
+#define NXFONT_METRICS_47 {1, 7, 19, 1, 10, 0}
+#define NXFONT_BITMAP_47 {0x6, 0x6, 0x6, 0xc, 0xc, 0xc, 0x18, 0x18, 0x18, 0x18, 0x30, 0x30, 0x30, 0x60, 0x60, 0x60, 0xc0, 0xc0, 0xc0}
+
+/* zero (48) */
+#define NXFONT_METRICS_48 {2, 12, 18, 0, 11, 0}
+#define NXFONT_BITMAP_48 {0x1f, 0x80, 0x3f, 0xc0, 0x79, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0x70, 0xe0, 0x70, 0xe0, 0x79, 0xe0, 0x3f, 0xc0, 0x1f, 0x80}
+
+/* one (49) */
+#define NXFONT_METRICS_49 {1, 7, 18, 2, 11, 0}
+#define NXFONT_BITMAP_49 {0xe, 0xe, 0x1e, 0xfe, 0xfe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe}
+
+/* two (50) */
+#define NXFONT_METRICS_50 {2, 12, 18, 0, 11, 0}
+#define NXFONT_BITMAP_50 {0x1f, 0x0, 0x7f, 0xc0, 0x71, 0xe0, 0xe0, 0xe0, 0xe0, 0x70, 0xe0, 0x70, 0x0, 0x70, 0x0, 0xe0, 0x1, 0xe0, 0x3, 0xc0, 0x7, 0x80, 0x1f, 0x0, 0x3c, 0x0, 0x78, 0x0, 0xf0, 0x0, 0xe0, 0x0, 0xff, 0xf0, 0xff, 0xf0}
+
+/* three (51) */
+#define NXFONT_METRICS_51 {2, 12, 18, 0, 11, 0}
+#define NXFONT_BITMAP_51 {0x1f, 0x0, 0x7f, 0xc0, 0x71, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0x0, 0xe0, 0x1, 0xc0, 0xf, 0x80, 0xf, 0xe0, 0x0, 0xe0, 0x0, 0x70, 0x0, 0x70, 0xe0, 0x70, 0xe0, 0xf0, 0x71, 0xe0, 0x7f, 0xe0, 0x1f, 0x80}
+
+/* four (52) */
+#define NXFONT_METRICS_52 {2, 12, 18, 0, 11, 0}
+#define NXFONT_BITMAP_52 {0x1, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x7, 0xc0, 0x7, 0xc0, 0xd, 0xc0, 0x1d, 0xc0, 0x19, 0xc0, 0x31, 0xc0, 0x71, 0xc0, 0x61, 0xc0, 0xe1, 0xc0, 0xff, 0xf0, 0xff, 0xf0, 0x1, 0xc0, 0x1, 0xc0, 0x1, 0xc0, 0x1, 0xc0}
+
+/* five (53) */
+#define NXFONT_METRICS_53 {2, 12, 18, 0, 11, 0}
+#define NXFONT_BITMAP_53 {0x7f, 0xe0, 0x7f, 0xe0, 0x70, 0x0, 0x70, 0x0, 0x70, 0x0, 0x70, 0x0, 0x7f, 0x80, 0x7f, 0xc0, 0x71, 0xe0, 0x0, 0xe0, 0x0, 0x70, 0x0, 0x70, 0x0, 0x70, 0xe0, 0x70, 0xe0, 0xf0, 0xf1, 0xe0, 0x7f, 0xc0, 0x1f, 0x80}
+
+/* six (54) */
+#define NXFONT_METRICS_54 {2, 12, 18, 0, 11, 0}
+#define NXFONT_BITMAP_54 {0xf, 0x80, 0x3f, 0xe0, 0x78, 0xe0, 0x70, 0x70, 0xe0, 0x70, 0xe0, 0x0, 0xe0, 0x0, 0xef, 0x0, 0xff, 0xc0, 0xf9, 0xe0, 0xf0, 0xe0, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0x70, 0xe0, 0x79, 0xe0, 0x3f, 0xc0, 0x1f, 0x80}
+
+/* seven (55) */
+#define NXFONT_METRICS_55 {2, 12, 18, 0, 11, 0}
+#define NXFONT_BITMAP_55 {0xff, 0xf0, 0xff, 0xf0, 0x0, 0xf0, 0x0, 0xe0, 0x1, 0xc0, 0x1, 0xc0, 0x3, 0x80, 0x3, 0x80, 0x7, 0x0, 0x7, 0x0, 0xe, 0x0, 0xe, 0x0, 0x1e, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x3c, 0x0, 0x38, 0x0, 0x38, 0x0}
+
+/* eight (56) */
+#define NXFONT_METRICS_56 {2, 12, 18, 0, 11, 0}
+#define NXFONT_BITMAP_56 {0xf, 0x0, 0x3f, 0xc0, 0x39, 0xc0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x39, 0xc0, 0x1f, 0x80, 0x3f, 0xc0, 0x70, 0xe0, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0x70, 0xe0, 0x7f, 0xe0, 0x1f, 0x80}
+
+/* nine (57) */
+#define NXFONT_METRICS_57 {2, 12, 18, 0, 11, 0}
+#define NXFONT_BITMAP_57 {0x1f, 0x80, 0x7f, 0xc0, 0x79, 0xe0, 0xf0, 0xe0, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xf0, 0xf0, 0x79, 0xf0, 0x7f, 0xf0, 0x1f, 0x70, 0x0, 0x70, 0x0, 0x70, 0xe0, 0xe0, 0xf3, 0xe0, 0x7f, 0xc0, 0x1f, 0x0}
+
+/* colon (58) */
+#define NXFONT_METRICS_58 {1, 3, 14, 2, 15, 0}
+#define NXFONT_BITMAP_58 {0xe0, 0xe0, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe0, 0xe0, 0xe0}
+
+/* semicolon (59) */
+#define NXFONT_METRICS_59 {1, 3, 17, 2, 15, 0}
+#define NXFONT_BITMAP_59 {0xe0, 0xe0, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe0, 0xe0, 0xe0, 0x60, 0x60, 0xc0}
+
+/* less (60) */
+#define NXFONT_METRICS_60 {2, 13, 12, 0, 16, 0}
+#define NXFONT_BITMAP_60 {0x0, 0x38, 0x0, 0xf8, 0x3, 0xe0, 0xf, 0x80, 0x3e, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0x3e, 0x0, 0xf, 0x80, 0x3, 0xe0, 0x0, 0xf8, 0x0, 0x38}
+
+/* equal (61) */
+#define NXFONT_METRICS_61 {2, 10, 5, 2, 19, 0}
+#define NXFONT_BITMAP_61 {0xff, 0xc0, 0xff, 0xc0, 0x0, 0x0, 0xff, 0xc0, 0xff, 0xc0}
+
+/* greater (62) */
+#define NXFONT_METRICS_62 {2, 13, 12, 1, 16, 0}
+#define NXFONT_BITMAP_62 {0xe0, 0x0, 0xf8, 0x0, 0x3e, 0x0, 0xf, 0x80, 0x3, 0xe0, 0x0, 0x78, 0x0, 0x78, 0x3, 0xe0, 0xf, 0x80, 0x3e, 0x0, 0xf8, 0x0, 0xe0, 0x0}
+
+/* question (63) */
+#define NXFONT_METRICS_63 {2, 11, 19, 2, 10, 0}
+#define NXFONT_BITMAP_63 {0x1f, 0x80, 0x7f, 0xc0, 0x79, 0xe0, 0xf0, 0xe0, 0xe0, 0xe0, 0xe1, 0xe0, 0x1, 0xc0, 0x3, 0xc0, 0x7, 0x80, 0x7, 0x0, 0xe, 0x0, 0xe, 0x0, 0xe, 0x0, 0xe, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe, 0x0, 0xe, 0x0, 0xe, 0x0}
+
+/* at (64) */
+#define NXFONT_METRICS_64 {3, 22, 22, 1, 11, 0}
+#define NXFONT_BITMAP_64 {0x1, 0xff, 0x0, 0x7, 0xff, 0xc0, 0xf, 0x81, 0xf0, 0x1e, 0x0, 0x78, 0x3c, 0x0, 0x38, 0x78, 0x7d, 0x9c, 0x70, 0xff, 0x9c, 0xf1, 0xc7, 0x1c, 0xe3, 0x87, 0x1c, 0xe3, 0xe, 0x1c, 0xe7, 0xe, 0x38, 0xe7, 0xc, 0x38, 0xe7, 0x1c, 0x70, 0xe7, 0x1c, 0x70, 0xe3, 0x9d, 0xe0, 0xf3, 0xff, 0xc0, 0x71, 0xf7, 0x0, 0x78, 0x0, 0x0, 0x3c, 0x0, 0x0, 0x1f, 0x7, 0x0, 0xf, 0xff, 0x0, 0x3, 0xfc, 0x0}
+
+/* A (65) */
+#define NXFONT_METRICS_65 {2, 16, 19, 1, 10, 0}
+#define NXFONT_BITMAP_65 {0x3, 0xc0, 0x3, 0xc0, 0x7, 0xe0, 0x7, 0xe0, 0xe, 0x60, 0xe, 0x70, 0xe, 0x70, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x38, 0x1c, 0x38, 0x1c, 0x3f, 0xfc, 0x7f, 0xfe, 0x70, 0xe, 0x70, 0xe, 0xe0, 0x7, 0xe0, 0x7, 0xe0, 0x7}
+
+/* B (66) */
+#define NXFONT_METRICS_66 {2, 15, 19, 2, 10, 0}
+#define NXFONT_BITMAP_66 {0xff, 0xe0, 0xff, 0xf8, 0xe0, 0x78, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x38, 0xff, 0xf0, 0xff, 0xf8, 0xe0, 0x1c, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0x1e, 0xe0, 0x7c, 0xff, 0xf8, 0xff, 0xe0}
+
+/* C (67) */
+#define NXFONT_METRICS_67 {2, 16, 19, 1, 10, 0}
+#define NXFONT_BITMAP_67 {0x7, 0xf0, 0x1f, 0xfc, 0x3e, 0x3e, 0x78, 0xf, 0x70, 0x7, 0xf0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xf0, 0x7, 0x70, 0x7, 0x78, 0xf, 0x3e, 0x3e, 0x1f, 0xfc, 0x7, 0xf0}
+
+/* D (68) */
+#define NXFONT_METRICS_68 {2, 16, 19, 2, 10, 0}
+#define NXFONT_BITMAP_68 {0xff, 0xe0, 0xff, 0xf8, 0xe0, 0x7c, 0xe0, 0x1e, 0xe0, 0xe, 0xe0, 0xf, 0xe0, 0x7, 0xe0, 0x7, 0xe0, 0x7, 0xe0, 0x7, 0xe0, 0x7, 0xe0, 0x7, 0xe0, 0x7, 0xe0, 0xf, 0xe0, 0xe, 0xe0, 0x1e, 0xe0, 0x7c, 0xff, 0xf8, 0xff, 0xe0}
+
+/* E (69) */
+#define NXFONT_METRICS_69 {2, 13, 19, 2, 10, 0}
+#define NXFONT_BITMAP_69 {0xff, 0xf0, 0xff, 0xf0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xff, 0xe0, 0xff, 0xe0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xff, 0xf8, 0xff, 0xf8}
+
+/* F (70) */
+#define NXFONT_METRICS_70 {2, 12, 19, 2, 10, 0}
+#define NXFONT_BITMAP_70 {0xff, 0xf0, 0xff, 0xf0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xff, 0xe0, 0xff, 0xe0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0}
+
+/* G (71) */
+#define NXFONT_METRICS_71 {3, 17, 19, 1, 10, 0}
+#define NXFONT_BITMAP_71 {0x7, 0xf0, 0x0, 0x1f, 0xfc, 0x0, 0x3e, 0x3e, 0x0, 0x78, 0xf, 0x0, 0x70, 0x7, 0x0, 0xf0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x7f, 0x80, 0xe0, 0x7f, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x3, 0x80, 0xf0, 0x3, 0x80, 0x70, 0x7, 0x80, 0x78, 0xf, 0x80, 0x3e, 0x3f, 0x80, 0x1f, 0xfb, 0x80, 0x7, 0xf3, 0x80}
+
+/* H (72) */
+#define NXFONT_METRICS_72 {2, 15, 19, 2, 10, 0}
+#define NXFONT_BITMAP_72 {0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xff, 0xfe, 0xff, 0xfe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe}
+
+/* I (73) */
+#define NXFONT_METRICS_73 {1, 3, 19, 2, 10, 0}
+#define NXFONT_BITMAP_73 {0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0}
+
+/* J (74) */
+#define NXFONT_METRICS_74 {2, 11, 19, 1, 10, 0}
+#define NXFONT_BITMAP_74 {0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0x71, 0xe0, 0x7f, 0xc0, 0x3f, 0x80}
+
+/* K (75) */
+#define NXFONT_METRICS_75 {2, 14, 19, 2, 10, 0}
+#define NXFONT_BITMAP_75 {0xe0, 0x3c, 0xe0, 0x78, 0xe0, 0xf0, 0xe1, 0xe0, 0xe3, 0xc0, 0xe7, 0x80, 0xef, 0x0, 0xfe, 0x0, 0xfe, 0x0, 0xff, 0x0, 0xf7, 0x80, 0xe3, 0x80, 0xe1, 0xc0, 0xe1, 0xe0, 0xe0, 0xe0, 0xe0, 0x70, 0xe0, 0x78, 0xe0, 0x38, 0xe0, 0x3c}
+
+/* L (76) */
+#define NXFONT_METRICS_76 {2, 12, 19, 2, 10, 0}
+#define NXFONT_BITMAP_76 {0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xff, 0xf0, 0xff, 0xf0}
+
+/* M (77) */
+#define NXFONT_METRICS_77 {3, 19, 19, 2, 10, 0}
+#define NXFONT_BITMAP_77 {0xe0, 0x0, 0xe0, 0xf0, 0x1, 0xe0, 0xf0, 0x1, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xfc, 0x7, 0xe0, 0xec, 0x6, 0xe0, 0xee, 0xe, 0xe0, 0xe6, 0xc, 0xe0, 0xe7, 0x1c, 0xe0, 0xe7, 0x1c, 0xe0, 0xe3, 0x18, 0xe0, 0xe3, 0xb8, 0xe0, 0xe3, 0xb8, 0xe0, 0xe1, 0xf0, 0xe0, 0xe1, 0xf0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0}
+
+/* N (78) */
+#define NXFONT_METRICS_78 {2, 15, 19, 2, 10, 0}
+#define NXFONT_BITMAP_78 {0xe0, 0xe, 0xf0, 0xe, 0xf0, 0xe, 0xf8, 0xe, 0xf8, 0xe, 0xfc, 0xe, 0xee, 0xe, 0xee, 0xe, 0xe7, 0xe, 0xe3, 0x8e, 0xe3, 0x8e, 0xe1, 0xce, 0xe0, 0xce, 0xe0, 0xee, 0xe0, 0x7e, 0xe0, 0x3e, 0xe0, 0x3e, 0xe0, 0x1e, 0xe0, 0xe}
+
+/* O (79) */
+#define NXFONT_METRICS_79 {3, 17, 19, 1, 10, 0}
+#define NXFONT_BITMAP_79 {0x7, 0xf0, 0x0, 0x1f, 0xfc, 0x0, 0x3e, 0x3e, 0x0, 0x78, 0xf, 0x0, 0x70, 0x7, 0x0, 0xf0, 0x7, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x3, 0x80, 0xf0, 0x7, 0x80, 0x70, 0x7, 0x0, 0x78, 0xf, 0x0, 0x3e, 0x3e, 0x0, 0x1f, 0xfc, 0x0, 0x7, 0xf0, 0x0}
+
+/* P (80) */
+#define NXFONT_METRICS_80 {2, 14, 19, 2, 10, 0}
+#define NXFONT_BITMAP_80 {0xff, 0xe0, 0xff, 0xf8, 0xe0, 0x38, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x38, 0xff, 0xf8, 0xff, 0xf0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0}
+
+/* Q (81) */
+#define NXFONT_METRICS_81 {3, 17, 20, 1, 10, 0}
+#define NXFONT_BITMAP_81 {0x7, 0xf0, 0x0, 0x1f, 0xfc, 0x0, 0x3e, 0x3e, 0x0, 0x78, 0xf, 0x0, 0x70, 0x7, 0x0, 0xf0, 0x7, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x3, 0x80, 0xf0, 0x27, 0x80, 0x70, 0x77, 0x0, 0x78, 0x3f, 0x0, 0x3e, 0x1e, 0x0, 0x1f, 0xfe, 0x0, 0x7, 0xf7, 0x0, 0x0, 0x2, 0x0}
+
+/* R (82) */
+#define NXFONT_METRICS_82 {2, 14, 19, 2, 10, 0}
+#define NXFONT_BITMAP_82 {0xff, 0xe0, 0xff, 0xf8, 0xe0, 0x38, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x38, 0xff, 0xf8, 0xff, 0xf0, 0xe0, 0x78, 0xe0, 0x38, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c}
+
+/* S (83) */
+#define NXFONT_METRICS_83 {2, 14, 19, 2, 10, 0}
+#define NXFONT_BITMAP_83 {0xf, 0xc0, 0x3f, 0xf0, 0x78, 0xf8, 0xf0, 0x38, 0xe0, 0x38, 0xe0, 0x0, 0xf0, 0x0, 0x7c, 0x0, 0x3f, 0xc0, 0x7, 0xf0, 0x0, 0xf8, 0x0, 0x3c, 0x0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x3c, 0xf8, 0xf8, 0x7f, 0xf0, 0x1f, 0xc0}
+
+/* T (84) */
+#define NXFONT_METRICS_84 {2, 15, 19, 0, 10, 0}
+#define NXFONT_BITMAP_84 {0xff, 0xfe, 0xff, 0xfe, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80}
+
+/* U (85) */
+#define NXFONT_METRICS_85 {2, 15, 19, 2, 10, 0}
+#define NXFONT_BITMAP_85 {0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xf0, 0x1e, 0x70, 0x1c, 0x7c, 0x7c, 0x3f, 0xf8, 0xf, 0xe0}
+
+/* V (86) */
+#define NXFONT_METRICS_86 {2, 16, 19, 1, 10, 0}
+#define NXFONT_BITMAP_86 {0xe0, 0x7, 0xe0, 0x7, 0xf0, 0xf, 0x70, 0xe, 0x78, 0x1e, 0x38, 0x1c, 0x38, 0x1c, 0x3c, 0x3c, 0x1c, 0x38, 0x1c, 0x38, 0x1e, 0x78, 0xe, 0x70, 0xe, 0x70, 0xe, 0x70, 0x7, 0xe0, 0x7, 0xe0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0}
+
+/* W (87) */
+#define NXFONT_METRICS_87 {3, 21, 19, 1, 10, 0}
+#define NXFONT_BITMAP_87 {0xe0, 0x70, 0x38, 0xe0, 0x70, 0x38, 0xe0, 0x70, 0x38, 0xe0, 0x70, 0x38, 0x70, 0xf8, 0x70, 0x70, 0xf8, 0x70, 0x70, 0xd8, 0x70, 0x71, 0xdc, 0x70, 0x31, 0xdc, 0x60, 0x39, 0xdc, 0xe0, 0x39, 0x8c, 0xe0, 0x3b, 0x8e, 0xe0, 0x1b, 0x8e, 0xc0, 0x1b, 0x8e, 0xc0, 0x1f, 0x7, 0xc0, 0x1f, 0x7, 0xc0, 0xe, 0x3, 0x80, 0xe, 0x3, 0x80, 0xe, 0x3, 0x80}
+
+/* X (88) */
+#define NXFONT_METRICS_88 {2, 16, 19, 1, 10, 0}
+#define NXFONT_BITMAP_88 {0xe0, 0x7, 0xf0, 0xf, 0x78, 0x1e, 0x38, 0x1c, 0x1c, 0x38, 0xe, 0x70, 0xf, 0xf0, 0x7, 0xe0, 0x3, 0xc0, 0x3, 0xc0, 0x7, 0xe0, 0xf, 0xf0, 0xe, 0x70, 0x1c, 0x38, 0x3c, 0x3c, 0x38, 0x1c, 0x70, 0xe, 0xf0, 0xf, 0xe0, 0x7}
+
+/* Y (89) */
+#define NXFONT_METRICS_89 {2, 15, 19, 1, 10, 0}
+#define NXFONT_BITMAP_89 {0xe0, 0xe, 0xf0, 0xe, 0x70, 0x1c, 0x78, 0x1c, 0x38, 0x38, 0x3c, 0x38, 0x1c, 0x70, 0x1c, 0x70, 0xe, 0xe0, 0xe, 0xe0, 0x7, 0xc0, 0x7, 0xc0, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80}
+
+/* Z (90) */
+#define NXFONT_METRICS_90 {2, 14, 19, 1, 10, 0}
+#define NXFONT_BITMAP_90 {0xff, 0xfc, 0xff, 0xfc, 0x0, 0x3c, 0x0, 0x78, 0x0, 0xf0, 0x1, 0xe0, 0x1, 0xe0, 0x3, 0xc0, 0x7, 0x80, 0x7, 0x80, 0xf, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x3c, 0x0, 0x38, 0x0, 0x78, 0x0, 0xf0, 0x0, 0xff, 0xfc, 0xff, 0xfc}
+
+/* bracketleft (91) */
+#define NXFONT_METRICS_91 {1, 5, 24, 1, 10, 0}
+#define NXFONT_BITMAP_91 {0xf8, 0xf8, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xf8, 0xf8}
+
+/* backslash (92) */
+#define NXFONT_METRICS_92 {1, 7, 19, 0, 10, 0}
+#define NXFONT_BITMAP_92 {0xc0, 0xc0, 0xc0, 0x60, 0x60, 0x60, 0x30, 0x30, 0x30, 0x30, 0x18, 0x18, 0x18, 0xc, 0xc, 0xc, 0x6, 0x6, 0x6}
+
+/* bracketright (93) */
+#define NXFONT_METRICS_93 {1, 5, 24, 2, 10, 0}
+#define NXFONT_BITMAP_93 {0xf8, 0xf8, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0xf8, 0xf8}
+
+/* asciicircum (94) */
+#define NXFONT_METRICS_94 {2, 11, 9, 1, 10, 0}
+#define NXFONT_BITMAP_94 {0xe, 0x0, 0xe, 0x0, 0x1f, 0x0, 0x1b, 0x0, 0x3b, 0x80, 0x71, 0xc0, 0x71, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0}
+
+/* underscore (95) */
+#define NXFONT_METRICS_95 {2, 14, 2, 0, 32, 0}
+#define NXFONT_BITMAP_95 {0xff, 0xfc, 0xff, 0xfc}
+
+/* grave (96) */
+#define NXFONT_METRICS_96 {1, 6, 4, 1, 10, 0}
+#define NXFONT_BITMAP_96 {0xe0, 0x70, 0x38, 0x1c}
+
+/* a (97) */
+#define NXFONT_METRICS_97 {2, 12, 14, 1, 15, 0}
+#define NXFONT_BITMAP_97 {0x1f, 0x80, 0x3f, 0xc0, 0x71, 0xe0, 0x70, 0xe0, 0x0, 0xe0, 0x7, 0xe0, 0x3f, 0xe0, 0x7c, 0xe0, 0xf0, 0xe0, 0xe0, 0xe0, 0xe1, 0xe0, 0xf3, 0xe0, 0x7f, 0xf0, 0x3e, 0x70}
+
+/* b (98) */
+#define NXFONT_METRICS_98 {2, 12, 19, 2, 10, 0}
+#define NXFONT_BITMAP_98 {0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xef, 0x80, 0xff, 0xc0, 0xf9, 0xe0, 0xf0, 0xe0, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xf0, 0xe0, 0xf9, 0xe0, 0xff, 0xc0, 0xef, 0x80}
+
+/* c (99) */
+#define NXFONT_METRICS_99 {2, 11, 14, 1, 15, 0}
+#define NXFONT_BITMAP_99 {0x1f, 0x80, 0x3f, 0xc0, 0x79, 0xe0, 0x70, 0xe0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0x70, 0xe0, 0x79, 0xe0, 0x3f, 0xc0, 0x1f, 0x80}
+
+/* d (100) */
+#define NXFONT_METRICS_100 {2, 12, 19, 1, 10, 0}
+#define NXFONT_BITMAP_100 {0x0, 0x70, 0x0, 0x70, 0x0, 0x70, 0x0, 0x70, 0x0, 0x70, 0x1f, 0x70, 0x3f, 0xf0, 0x79, 0xf0, 0x70, 0xf0, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0x70, 0xf0, 0x79, 0xf0, 0x3f, 0xf0, 0x1f, 0x70}
+
+/* e (101) */
+#define NXFONT_METRICS_101 {2, 12, 14, 1, 15, 0}
+#define NXFONT_BITMAP_101 {0xf, 0x0, 0x3f, 0xc0, 0x79, 0xe0, 0x70, 0xe0, 0xe0, 0x70, 0xe0, 0x70, 0xff, 0xf0, 0xff, 0xf0, 0xe0, 0x0, 0xe0, 0x0, 0x70, 0x70, 0x78, 0xf0, 0x3f, 0xe0, 0xf, 0x80}
+
+/* f (102) */
+#define NXFONT_METRICS_102 {1, 7, 19, 1, 10, 0}
+#define NXFONT_BITMAP_102 {0x1e, 0x3e, 0x38, 0x38, 0x38, 0xfe, 0xfe, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38}
+
+/* g (103) */
+#define NXFONT_METRICS_103 {2, 12, 19, 1, 15, 0}
+#define NXFONT_BITMAP_103 {0x1f, 0x70, 0x3f, 0xf0, 0x79, 0xf0, 0x70, 0xf0, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0x70, 0xf0, 0x79, 0xf0, 0x3f, 0xf0, 0x1f, 0x70, 0x0, 0x70, 0xe0, 0x70, 0xf0, 0xe0, 0x7f, 0xe0, 0x1f, 0x80}
+
+/* h (104) */
+#define NXFONT_METRICS_104 {2, 11, 19, 2, 10, 0}
+#define NXFONT_BITMAP_104 {0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xef, 0x0, 0xff, 0xc0, 0xf1, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0}
+
+/* i (105) */
+#define NXFONT_METRICS_105 {1, 3, 19, 2, 10, 0}
+#define NXFONT_BITMAP_105 {0xe0, 0xe0, 0xe0, 0x0, 0x0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0}
+
+/* j (106) */
+#define NXFONT_METRICS_106 {1, 5, 24, 0, 10, 0}
+#define NXFONT_BITMAP_106 {0x38, 0x38, 0x38, 0x0, 0x0, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0xf8, 0xf0}
+
+/* k (107) */
+#define NXFONT_METRICS_107 {2, 11, 19, 2, 10, 0}
+#define NXFONT_BITMAP_107 {0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe1, 0xc0, 0xe3, 0xc0, 0xe7, 0x80, 0xef, 0x0, 0xfe, 0x0, 0xfc, 0x0, 0xfe, 0x0, 0xef, 0x0, 0xe7, 0x0, 0xe7, 0x80, 0xe3, 0xc0, 0xe1, 0xc0, 0xe1, 0xe0, 0xe0, 0xe0}
+
+/* l (108) */
+#define NXFONT_METRICS_108 {1, 3, 19, 2, 10, 0}
+#define NXFONT_BITMAP_108 {0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0}
+
+/* m (109) */
+#define NXFONT_METRICS_109 {3, 17, 14, 2, 15, 0}
+#define NXFONT_BITMAP_109 {0xef, 0x3e, 0x0, 0xff, 0xff, 0x0, 0xf3, 0xe7, 0x80, 0xe1, 0xc3, 0x80, 0xe1, 0xc3, 0x80, 0xe1, 0xc3, 0x80, 0xe1, 0xc3, 0x80, 0xe1, 0xc3, 0x80, 0xe1, 0xc3, 0x80, 0xe1, 0xc3, 0x80, 0xe1, 0xc3, 0x80, 0xe1, 0xc3, 0x80, 0xe1, 0xc3, 0x80, 0xe1, 0xc3, 0x80}
+
+/* n (110) */
+#define NXFONT_METRICS_110 {2, 11, 14, 2, 15, 0}
+#define NXFONT_BITMAP_110 {0xef, 0x80, 0xff, 0xc0, 0xf1, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0}
+
+/* o (111) */
+#define NXFONT_METRICS_111 {2, 12, 14, 1, 15, 0}
+#define NXFONT_BITMAP_111 {0xf, 0x0, 0x3f, 0xc0, 0x79, 0xe0, 0x70, 0xe0, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0x70, 0xe0, 0x79, 0xe0, 0x3f, 0xc0, 0xf, 0x0}
+
+/* p (112) */
+#define NXFONT_METRICS_112 {2, 12, 19, 2, 15, 0}
+#define NXFONT_BITMAP_112 {0xef, 0x80, 0xff, 0xc0, 0xf9, 0xe0, 0xf0, 0xe0, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xf0, 0xe0, 0xf9, 0xe0, 0xff, 0xc0, 0xef, 0x80, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0}
+
+/* q (113) */
+#define NXFONT_METRICS_113 {2, 12, 19, 1, 15, 0}
+#define NXFONT_BITMAP_113 {0x1f, 0x70, 0x3f, 0xf0, 0x79, 0xf0, 0x70, 0xf0, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0x70, 0xf0, 0x79, 0xf0, 0x3f, 0xf0, 0x1f, 0x70, 0x0, 0x70, 0x0, 0x70, 0x0, 0x70, 0x0, 0x70, 0x0, 0x70}
+
+/* r (114) */
+#define NXFONT_METRICS_114 {1, 7, 14, 2, 15, 0}
+#define NXFONT_BITMAP_114 {0xee, 0xfe, 0xfe, 0xf0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0}
+
+/* s (115) */
+#define NXFONT_METRICS_115 {2, 11, 14, 1, 15, 0}
+#define NXFONT_BITMAP_115 {0x3f, 0x0, 0x7f, 0x80, 0xf3, 0xc0, 0xe1, 0xc0, 0xe0, 0x0, 0xfc, 0x0, 0x7f, 0x80, 0xf, 0xc0, 0x1, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xf1, 0xe0, 0x7f, 0xc0, 0x3f, 0x80}
+
+/* t (116) */
+#define NXFONT_METRICS_116 {1, 7, 18, 1, 11, 0}
+#define NXFONT_BITMAP_116 {0x38, 0x38, 0x38, 0x38, 0xfe, 0xfe, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x3e, 0x1e}
+
+/* u (117) */
+#define NXFONT_METRICS_117 {2, 11, 14, 2, 15, 0}
+#define NXFONT_BITMAP_117 {0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe1, 0xe0, 0x73, 0xe0, 0x7e, 0xe0, 0x1c, 0xe0}
+
+/* v (118) */
+#define NXFONT_METRICS_118 {2, 12, 14, 1, 15, 0}
+#define NXFONT_BITMAP_118 {0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x39, 0xc0, 0x39, 0xc0, 0x39, 0xc0, 0x1f, 0x80, 0x1f, 0x80, 0xf, 0x0, 0xf, 0x0, 0xf, 0x0}
+
+/* w (119) */
+#define NXFONT_METRICS_119 {3, 19, 14, 0, 15, 0}
+#define NXFONT_BITMAP_119 {0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0x60, 0xe0, 0xc0, 0x71, 0xf1, 0xc0, 0x71, 0xf1, 0xc0, 0x31, 0xb1, 0x80, 0x33, 0xb9, 0x80, 0x3b, 0xbb, 0x80, 0x1b, 0x1b, 0x0, 0x1f, 0x1f, 0x0, 0x1f, 0x1f, 0x0, 0xe, 0xe, 0x0, 0xe, 0xe, 0x0, 0xe, 0xe, 0x0}
+
+/* x (120) */
+#define NXFONT_METRICS_120 {2, 11, 14, 1, 15, 0}
+#define NXFONT_BITMAP_120 {0xe0, 0xe0, 0xf1, 0xe0, 0x71, 0xc0, 0x3b, 0x80, 0x3f, 0x80, 0x1f, 0x0, 0xe, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x3b, 0x80, 0x7b, 0xc0, 0x71, 0xc0, 0xf1, 0xe0, 0xe0, 0xe0}
+
+/* y (121) */
+#define NXFONT_METRICS_121 {2, 13, 19, 1, 15, 0}
+#define NXFONT_BITMAP_121 {0xe0, 0x38, 0xe0, 0x38, 0x70, 0x38, 0x78, 0x70, 0x38, 0x70, 0x3c, 0xf0, 0x1c, 0xe0, 0x1c, 0xe0, 0xf, 0xc0, 0xf, 0xc0, 0x7, 0xc0, 0x7, 0x80, 0x3, 0x80, 0x3, 0x80, 0x7, 0x0, 0x7, 0x0, 0xe, 0x0, 0x3e, 0x0, 0x3c, 0x0}
+
+/* z (122) */
+#define NXFONT_METRICS_122 {2, 11, 14, 1, 15, 0}
+#define NXFONT_BITMAP_122 {0xff, 0xe0, 0xff, 0xe0, 0x1, 0xc0, 0x3, 0x80, 0x7, 0x80, 0xf, 0x0, 0xe, 0x0, 0x1e, 0x0, 0x3c, 0x0, 0x38, 0x0, 0x70, 0x0, 0xf0, 0x0, 0xff, 0xe0, 0xff, 0xe0}
+
+/* braceleft (123) */
+#define NXFONT_METRICS_123 {1, 7, 24, 1, 10, 0}
+#define NXFONT_BITMAP_123 {0xe, 0x1c, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x70, 0xe0, 0xe0, 0x70, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x1c, 0xe}
+
+/* bar (124) */
+#define NXFONT_METRICS_124 {1, 2, 24, 3, 10, 0}
+#define NXFONT_BITMAP_124 {0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* braceright (125) */
+#define NXFONT_METRICS_125 {1, 7, 24, 2, 10, 0}
+#define NXFONT_BITMAP_125 {0xe0, 0x70, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x1c, 0xe, 0xe, 0x1c, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x70, 0xe0}
+
+/* asciitilde (126) */
+#define NXFONT_METRICS_126 {2, 11, 4, 1, 20, 0}
+#define NXFONT_BITMAP_126 {0x78, 0xe0, 0xfe, 0xe0, 0xef, 0xe0, 0xe3, 0xc0}
+
+/* exclamdown (161) */
+#define NXFONT_METRICS_161 {1, 3, 19, 2, 15, 0}
+#define NXFONT_BITMAP_161 {0xe0, 0xe0, 0xe0, 0x0, 0x0, 0x60, 0x60, 0x60, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0}
+
+/* cent (162) */
+#define NXFONT_METRICS_162 {2, 11, 18, 1, 13, 0}
+#define NXFONT_BITMAP_162 {0x1, 0x80, 0x1, 0x80, 0x1f, 0x80, 0x3f, 0xc0, 0x7b, 0xe0, 0x73, 0x60, 0xe3, 0x0, 0xe6, 0x0, 0xe6, 0x0, 0xe6, 0x0, 0xe6, 0x0, 0xec, 0x0, 0xec, 0xe0, 0x7d, 0xe0, 0x7f, 0xc0, 0x3f, 0x80, 0x18, 0x0, 0x18, 0x0}
+
+/* sterling (163) */
+#define NXFONT_METRICS_163 {2, 13, 18, 1, 11, 0}
+#define NXFONT_BITMAP_163 {0x1f, 0x80, 0x3f, 0xc0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0x0, 0x78, 0x0, 0x38, 0x0, 0x1c, 0x0, 0xff, 0xc0, 0xff, 0xc0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x38, 0x0, 0x38, 0x0, 0x7f, 0x38, 0xff, 0xf8, 0xf1, 0xf0}
+
+/* currency (164) */
+#define NXFONT_METRICS_164 {2, 12, 12, 1, 14, 0}
+#define NXFONT_BITMAP_164 {0xc0, 0x30, 0xef, 0x70, 0x7f, 0xe0, 0x39, 0xc0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x39, 0xc0, 0x7f, 0xe0, 0xef, 0x70, 0xc0, 0x30}
+
+/* yen (165) */
+#define NXFONT_METRICS_165 {2, 13, 18, 0, 11, 0}
+#define NXFONT_BITMAP_165 {0xe0, 0x38, 0xe0, 0x38, 0x70, 0x70, 0x70, 0x70, 0x38, 0xe0, 0x38, 0xe0, 0x1d, 0xc0, 0x1d, 0xc0, 0x7f, 0xf0, 0x7f, 0xf0, 0x7, 0x0, 0x7f, 0xf0, 0x7f, 0xf0, 0x7, 0x0, 0x7, 0x0, 0x7, 0x0, 0x7, 0x0, 0x7, 0x0}
+
+/* brokenbar (166) */
+#define NXFONT_METRICS_166 {1, 2, 24, 3, 10, 0}
+#define NXFONT_BITMAP_166 {0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* section (167) */
+#define NXFONT_METRICS_167 {2, 12, 24, 1, 10, 0}
+#define NXFONT_BITMAP_167 {0x1f, 0x80, 0x3f, 0xc0, 0x79, 0xe0, 0x70, 0xe0, 0x78, 0xe0, 0x3c, 0x0, 0x1e, 0x0, 0x7f, 0x0, 0xf7, 0x80, 0xe3, 0xc0, 0xe1, 0xe0, 0xe0, 0xe0, 0x70, 0x70, 0x78, 0x70, 0x3c, 0x70, 0x1e, 0xe0, 0xf, 0xc0, 0x7, 0x80, 0x3, 0xc0, 0x71, 0xe0, 0x70, 0xe0, 0x79, 0xe0, 0x3f, 0xc0, 0x1f, 0x80}
+
+/* dieresis (168) */
+#define NXFONT_METRICS_168 {1, 7, 2, 1, 11, 0}
+#define NXFONT_BITMAP_168 {0xee, 0xee}
+
+/* copyright (169) */
+#define NXFONT_METRICS_169 {3, 19, 19, 0, 10, 0}
+#define NXFONT_BITMAP_169 {0x1, 0xf0, 0x0, 0xf, 0xfe, 0x0, 0x1e, 0xf, 0x0, 0x38, 0x3, 0x80, 0x70, 0x1, 0xc0, 0x61, 0xf0, 0xc0, 0xe3, 0xb8, 0xe0, 0xc6, 0xc, 0x60, 0xc6, 0x0, 0x60, 0xc6, 0x0, 0x60, 0xc6, 0x0, 0x60, 0xc6, 0xc, 0x60, 0xe3, 0xb8, 0xe0, 0x61, 0xf0, 0xc0, 0x70, 0x1, 0xc0, 0x38, 0x3, 0x80, 0x1e, 0xf, 0x0, 0xf, 0xfe, 0x0, 0x1, 0xf0, 0x0}
+
+/* ordfeminine (170) */
+#define NXFONT_METRICS_170 {1, 8, 12, 1, 10, 0}
+#define NXFONT_BITMAP_170 {0x7c, 0xfe, 0xc6, 0x1e, 0x7e, 0xe6, 0xc6, 0xff, 0x7b, 0x0, 0xff, 0xff}
+
+/* guillemotleft (171) */
+#define NXFONT_METRICS_171 {2, 10, 8, 1, 18, 0}
+#define NXFONT_BITMAP_171 {0x1d, 0xc0, 0x3b, 0x80, 0x77, 0x0, 0xee, 0x0, 0xee, 0x0, 0x77, 0x0, 0x3b, 0x80, 0x1d, 0xc0}
+
+/* logicalnot (172) */
+#define NXFONT_METRICS_172 {2, 12, 7, 1, 18, 0}
+#define NXFONT_BITMAP_172 {0xff, 0xf0, 0xff, 0xf0, 0x0, 0x30, 0x0, 0x30, 0x0, 0x30, 0x0, 0x30, 0x0, 0x30}
+
+/* hyphen (173) */
+#define NXFONT_METRICS_173 {1, 7, 3, 0, 20, 0}
+#define NXFONT_BITMAP_173 {0xfe, 0xfe, 0xfe}
+
+/* registered (174) */
+#define NXFONT_METRICS_174 {3, 19, 19, 0, 10, 0}
+#define NXFONT_BITMAP_174 {0x3, 0xf8, 0x0, 0xf, 0xfe, 0x0, 0x1c, 0xf, 0x0, 0x38, 0x3, 0x80, 0x73, 0xf9, 0xc0, 0x63, 0x1c, 0xc0, 0xe3, 0xc, 0xe0, 0xc3, 0xc, 0x60, 0xc3, 0x18, 0x60, 0xc3, 0xf0, 0x60, 0xc3, 0x30, 0x60, 0xc3, 0x18, 0x60, 0xe3, 0x18, 0x60, 0x63, 0xc, 0xe0, 0x70, 0x0, 0xc0, 0x38, 0x1, 0xc0, 0x1e, 0x3, 0x80, 0xf, 0xfe, 0x0, 0x3, 0xf8, 0x0}
+
+/* macron (175) */
+#define NXFONT_METRICS_175 {1, 7, 2, 1, 10, 0}
+#define NXFONT_BITMAP_175 {0xfe, 0xfe}
+
+/* degree (176) */
+#define NXFONT_METRICS_176 {1, 8, 7, 0, 11, 0}
+#define NXFONT_BITMAP_176 {0x3c, 0x66, 0xc3, 0xc3, 0xc3, 0x66, 0x3c}
+
+/* plusminus (177) */
+#define NXFONT_METRICS_177 {2, 11, 13, 2, 16, 0}
+#define NXFONT_BITMAP_177 {0xe, 0x0, 0xe, 0x0, 0xe, 0x0, 0xe, 0x0, 0xff, 0xe0, 0xff, 0xe0, 0xe, 0x0, 0xe, 0x0, 0xe, 0x0, 0xe, 0x0, 0x0, 0x0, 0xff, 0xe0, 0xff, 0xe0}
+
+/* twosuperior (178) */
+#define NXFONT_METRICS_178 {1, 6, 10, 0, 11, 0}
+#define NXFONT_BITMAP_178 {0x78, 0xfc, 0xcc, 0xc, 0x1c, 0x78, 0xe0, 0xc0, 0xfc, 0xfc}
+
+/* threesuperior (179) */
+#define NXFONT_METRICS_179 {1, 6, 10, 0, 11, 0}
+#define NXFONT_BITMAP_179 {0x78, 0xfc, 0xcc, 0xc, 0x38, 0x38, 0xc, 0xcc, 0xfc, 0x78}
+
+/* acute (180) */
+#define NXFONT_METRICS_180 {1, 6, 4, 1, 10, 0}
+#define NXFONT_BITMAP_180 {0x1c, 0x38, 0x70, 0xe0}
+
+/* mu (181) */
+#define NXFONT_METRICS_181 {2, 11, 19, 2, 15, 0}
+#define NXFONT_BITMAP_181 {0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe1, 0xe0, 0xf3, 0xe0, 0xfe, 0xe0, 0xec, 0xe0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0}
+
+/* paragraph (182) */
+#define NXFONT_METRICS_182 {2, 11, 24, 1, 10, 0}
+#define NXFONT_BITMAP_182 {0xf, 0xe0, 0x3f, 0xe0, 0x7c, 0xc0, 0x7c, 0xc0, 0xfc, 0xc0, 0xfc, 0xc0, 0xfc, 0xc0, 0xfc, 0xc0, 0xfc, 0xc0, 0x7c, 0xc0, 0x7c, 0xc0, 0x3c, 0xc0, 0x1c, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0}
+
+/* periodcentered (183) */
+#define NXFONT_METRICS_183 {1, 3, 3, 2, 20, 0}
+#define NXFONT_BITMAP_183 {0xe0, 0xe0, 0xe0}
+
+/* cedilla (184) */
+#define NXFONT_METRICS_184 {1, 6, 6, 1, 28, 0}
+#define NXFONT_BITMAP_184 {0x70, 0x78, 0x1c, 0x1c, 0xfc, 0x78}
+
+/* onesuperior (185) */
+#define NXFONT_METRICS_185 {1, 4, 10, 1, 11, 0}
+#define NXFONT_BITMAP_185 {0x30, 0x30, 0xf0, 0xf0, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30}
+
+/* ordmasculine (186) */
+#define NXFONT_METRICS_186 {1, 8, 12, 1, 10, 0}
+#define NXFONT_BITMAP_186 {0x3c, 0x7e, 0xe7, 0xc3, 0xc3, 0xc3, 0xe7, 0x7e, 0x3c, 0x0, 0xff, 0xff}
+
+/* guillemotright (187) */
+#define NXFONT_METRICS_187 {2, 10, 8, 1, 18, 0}
+#define NXFONT_BITMAP_187 {0xee, 0x0, 0x77, 0x0, 0x3b, 0x80, 0x1d, 0xc0, 0x1d, 0xc0, 0x3b, 0x80, 0x77, 0x0, 0xee, 0x0}
+
+/* onequarter (188) */
+#define NXFONT_METRICS_188 {3, 17, 18, 1, 11, 0}
+#define NXFONT_BITMAP_188 {0x30, 0x18, 0x0, 0x30, 0x18, 0x0, 0xf0, 0x30, 0x0, 0xf0, 0x30, 0x0, 0x30, 0x60, 0x0, 0x30, 0x60, 0x0, 0x30, 0xc0, 0x0, 0x30, 0xc0, 0x0, 0x31, 0x86, 0x0, 0x31, 0x8e, 0x0, 0x3, 0x1e, 0x0, 0x3, 0x1e, 0x0, 0x6, 0x36, 0x0, 0x6, 0x66, 0x0, 0xc, 0x7f, 0x80, 0xc, 0x7f, 0x80, 0x18, 0x6, 0x0, 0x18, 0x6, 0x0}
+
+/* onehalf (189) */
+#define NXFONT_METRICS_189 {2, 16, 18, 1, 11, 0}
+#define NXFONT_BITMAP_189 {0x30, 0x18, 0x30, 0x18, 0xf0, 0x30, 0xf0, 0x30, 0x30, 0x60, 0x30, 0x60, 0x30, 0xc0, 0x30, 0xc0, 0x31, 0x9e, 0x31, 0xbf, 0x3, 0x33, 0x3, 0x3, 0x6, 0x7, 0x6, 0x1e, 0xc, 0x38, 0xc, 0x30, 0x18, 0x3f, 0x18, 0x3f}
+
+/* threequarters (190) */
+#define NXFONT_METRICS_190 {3, 17, 18, 1, 11, 0}
+#define NXFONT_BITMAP_190 {0x78, 0x18, 0x0, 0xfc, 0x18, 0x0, 0xcc, 0x30, 0x0, 0xc, 0x30, 0x0, 0x38, 0x60, 0x0, 0x38, 0x60, 0x0, 0xc, 0xc0, 0x0, 0xcc, 0xc0, 0x0, 0xfd, 0x86, 0x0, 0x79, 0x8e, 0x0, 0x3, 0x1e, 0x0, 0x3, 0x1e, 0x0, 0x6, 0x36, 0x0, 0x6, 0x66, 0x0, 0xc, 0x7f, 0x80, 0xc, 0x7f, 0x80, 0x18, 0x6, 0x0, 0x18, 0x6, 0x0}
+
+/* questiondown (191) */
+#define NXFONT_METRICS_191 {2, 11, 19, 2, 15, 0}
+#define NXFONT_BITMAP_191 {0xe, 0x0, 0xe, 0x0, 0xe, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe, 0x0, 0xe, 0x0, 0xe, 0x0, 0xe, 0x0, 0x1c, 0x0, 0x3c, 0x0, 0x78, 0x0, 0x70, 0x0, 0xf0, 0xe0, 0xe0, 0xe0, 0xe1, 0xe0, 0xf3, 0xc0, 0x7f, 0xc0, 0x3f, 0x0}
+
+/* Agrave (192) */
+#define NXFONT_METRICS_192 {2, 16, 24, 1, 5, 0}
+#define NXFONT_BITMAP_192 {0xe, 0x0, 0x7, 0x0, 0x3, 0x80, 0x1, 0xc0, 0x0, 0x0, 0x3, 0xc0, 0x3, 0xc0, 0x7, 0xe0, 0x7, 0xe0, 0xe, 0x60, 0xe, 0x70, 0xe, 0x70, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x38, 0x1c, 0x38, 0x1c, 0x3f, 0xfc, 0x7f, 0xfe, 0x70, 0xe, 0x70, 0xe, 0xe0, 0x7, 0xe0, 0x7, 0xe0, 0x7}
+
+/* Aacute (193) */
+#define NXFONT_METRICS_193 {2, 16, 24, 1, 5, 0}
+#define NXFONT_BITMAP_193 {0x0, 0x70, 0x0, 0xe0, 0x1, 0xc0, 0x3, 0x80, 0x0, 0x0, 0x3, 0xc0, 0x3, 0xc0, 0x7, 0xe0, 0x7, 0xe0, 0xe, 0x60, 0xe, 0x70, 0xe, 0x70, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x38, 0x1c, 0x38, 0x1c, 0x3f, 0xfc, 0x7f, 0xfe, 0x70, 0xe, 0x70, 0xe, 0xe0, 0x7, 0xe0, 0x7, 0xe0, 0x7}
+
+/* Acircumflex (194) */
+#define NXFONT_METRICS_194 {2, 16, 24, 1, 5, 0}
+#define NXFONT_BITMAP_194 {0x1, 0xc0, 0x3, 0xe0, 0x7, 0x70, 0xe, 0x38, 0x0, 0x0, 0x3, 0xc0, 0x3, 0xc0, 0x7, 0xe0, 0x7, 0xe0, 0xe, 0x60, 0xe, 0x70, 0xe, 0x70, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x38, 0x1c, 0x38, 0x1c, 0x3f, 0xfc, 0x7f, 0xfe, 0x70, 0xe, 0x70, 0xe, 0xe0, 0x7, 0xe0, 0x7, 0xe0, 0x7}
+
+/* Atilde (195) */
+#define NXFONT_METRICS_195 {2, 16, 23, 1, 6, 0}
+#define NXFONT_BITMAP_195 {0x7, 0x98, 0xf, 0xf8, 0xc, 0xf0, 0x0, 0x0, 0x3, 0xc0, 0x3, 0xc0, 0x7, 0xe0, 0x7, 0xe0, 0xe, 0x60, 0xe, 0x70, 0xe, 0x70, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x38, 0x1c, 0x38, 0x1c, 0x3f, 0xfc, 0x7f, 0xfe, 0x70, 0xe, 0x70, 0xe, 0xe0, 0x7, 0xe0, 0x7, 0xe0, 0x7}
+
+/* Adieresis (196) */
+#define NXFONT_METRICS_196 {2, 16, 23, 1, 6, 0}
+#define NXFONT_BITMAP_196 {0xe, 0x70, 0xe, 0x70, 0x0, 0x0, 0x0, 0x0, 0x3, 0xc0, 0x3, 0xc0, 0x7, 0xe0, 0x7, 0xe0, 0xe, 0x60, 0xe, 0x70, 0xe, 0x70, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x38, 0x1c, 0x38, 0x1c, 0x3f, 0xfc, 0x7f, 0xfe, 0x70, 0xe, 0x70, 0xe, 0xe0, 0x7, 0xe0, 0x7, 0xe0, 0x7}
+
+/* Aring (197) */
+#define NXFONT_METRICS_197 {2, 16, 24, 1, 5, 0}
+#define NXFONT_BITMAP_197 {0x3, 0xc0, 0x6, 0x60, 0x4, 0x20, 0x6, 0x60, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x7, 0xe0, 0x7, 0xe0, 0xe, 0x60, 0xe, 0x70, 0xe, 0x70, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x38, 0x1c, 0x38, 0x1c, 0x3f, 0xfc, 0x7f, 0xfe, 0x70, 0xe, 0x70, 0xe, 0xe0, 0x7, 0xe0, 0x7, 0xe0, 0x7}
+
+/* AE (198) */
+#define NXFONT_METRICS_198 {3, 22, 19, 1, 10, 0}
+#define NXFONT_BITMAP_198 {0x3, 0xff, 0xf8, 0x3, 0xff, 0xf8, 0x7, 0x70, 0x0, 0x7, 0x70, 0x0, 0xe, 0x70, 0x0, 0xe, 0x70, 0x0, 0xe, 0x70, 0x0, 0x1c, 0x70, 0x0, 0x1c, 0x7f, 0xf0, 0x1c, 0x7f, 0xf0, 0x38, 0x70, 0x0, 0x38, 0x70, 0x0, 0x3f, 0xf0, 0x0, 0x7f, 0xf0, 0x0, 0x70, 0x70, 0x0, 0x70, 0x70, 0x0, 0xe0, 0x70, 0x0, 0xe0, 0x7f, 0xfc, 0xe0, 0x7f, 0xfc}
+
+/* Ccedilla (199) */
+#define NXFONT_METRICS_199 {2, 16, 24, 1, 10, 0}
+#define NXFONT_BITMAP_199 {0x7, 0xf0, 0x1f, 0xfc, 0x3e, 0x3e, 0x78, 0xf, 0x70, 0x7, 0xf0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xf0, 0x7, 0x70, 0x7, 0x78, 0xf, 0x3e, 0x3e, 0x1f, 0xfc, 0x7, 0xf0, 0x3, 0xc0, 0x0, 0xe0, 0x0, 0xe0, 0x7, 0xe0, 0x3, 0xc0}
+
+/* Egrave (200) */
+#define NXFONT_METRICS_200 {2, 13, 24, 2, 5, 0}
+#define NXFONT_BITMAP_200 {0x38, 0x0, 0x1c, 0x0, 0xe, 0x0, 0x7, 0x0, 0x0, 0x0, 0xff, 0xf0, 0xff, 0xf0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xff, 0xe0, 0xff, 0xe0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xff, 0xf8, 0xff, 0xf8}
+
+/* Eacute (201) */
+#define NXFONT_METRICS_201 {2, 13, 24, 2, 5, 0}
+#define NXFONT_BITMAP_201 {0x1, 0xc0, 0x3, 0x80, 0x7, 0x0, 0xe, 0x0, 0x0, 0x0, 0xff, 0xf0, 0xff, 0xf0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xff, 0xe0, 0xff, 0xe0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xff, 0xf8, 0xff, 0xf8}
+
+/* Ecircumflex (202) */
+#define NXFONT_METRICS_202 {2, 13, 24, 2, 5, 0}
+#define NXFONT_BITMAP_202 {0x7, 0x0, 0xf, 0x80, 0x1d, 0xc0, 0x38, 0xe0, 0x0, 0x0, 0xff, 0xf0, 0xff, 0xf0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xff, 0xe0, 0xff, 0xe0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xff, 0xf8, 0xff, 0xf8}
+
+/* Edieresis (203) */
+#define NXFONT_METRICS_203 {2, 13, 23, 2, 6, 0}
+#define NXFONT_BITMAP_203 {0x38, 0xe0, 0x38, 0xe0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xf0, 0xff, 0xf0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xff, 0xe0, 0xff, 0xe0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xff, 0xf8, 0xff, 0xf8}
+
+/* Igrave (204) */
+#define NXFONT_METRICS_204 {1, 6, 24, 0, 5, 0}
+#define NXFONT_BITMAP_204 {0xe0, 0x70, 0x38, 0x1c, 0x0, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38}
+
+/* Iacute (205) */
+#define NXFONT_METRICS_205 {1, 6, 24, 1, 5, 0}
+#define NXFONT_BITMAP_205 {0x1c, 0x38, 0x70, 0xe0, 0x0, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70}
+
+/* Icircumflex (206) - NOTE: Xoffset should be -1, not 0. */
+#define NXFONT_METRICS_206 {2, 9, 24, 0, 5, 0}
+#define NXFONT_BITMAP_206 {0x1c, 0x0, 0x3e, 0x0, 0x77, 0x0, 0xe3, 0x80, 0x0, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0}
+
+/* Idieresis (207) */
+#define NXFONT_METRICS_207 {1, 7, 23, 0, 6, 0}
+#define NXFONT_BITMAP_207 {0xee, 0xee, 0x0, 0x0, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38}
+
+/* Eth (208) - NOTE: Xoffset should be -1, not 0. */
+#define NXFONT_METRICS_208 {3, 19, 19, 0, 10, 0}
+#define NXFONT_BITMAP_208 {0x1f, 0xfc, 0x0, 0x1f, 0xff, 0x0, 0x1c, 0xf, 0x80, 0x1c, 0x3, 0xc0, 0x1c, 0x1, 0xc0, 0x1c, 0x1, 0xe0, 0x1c, 0x0, 0xe0, 0x1c, 0x0, 0xe0, 0xff, 0xc0, 0xe0, 0xff, 0xc0, 0xe0, 0x1c, 0x0, 0xe0, 0x1c, 0x0, 0xe0, 0x1c, 0x0, 0xe0, 0x1c, 0x1, 0xe0, 0x1c, 0x1, 0xc0, 0x1c, 0x3, 0xc0, 0x1c, 0xf, 0x80, 0x1f, 0xff, 0x0, 0x1f, 0xfc, 0x0}
+
+/* Ntilde (209) */
+#define NXFONT_METRICS_209 {2, 15, 23, 2, 6, 0}
+#define NXFONT_BITMAP_209 {0xf, 0x30, 0x1f, 0xf0, 0x19, 0xe0, 0x0, 0x0, 0xe0, 0xe, 0xf0, 0xe, 0xf0, 0xe, 0xf8, 0xe, 0xf8, 0xe, 0xfc, 0xe, 0xee, 0xe, 0xee, 0xe, 0xe7, 0xe, 0xe3, 0x8e, 0xe3, 0x8e, 0xe1, 0xce, 0xe0, 0xce, 0xe0, 0xee, 0xe0, 0x7e, 0xe0, 0x3e, 0xe0, 0x3e, 0xe0, 0x1e, 0xe0, 0xe}
+
+/* Ograve (210) */
+#define NXFONT_METRICS_210 {3, 17, 24, 1, 5, 0}
+#define NXFONT_BITMAP_210 {0xe, 0x0, 0x0, 0x7, 0x0, 0x0, 0x3, 0x80, 0x0, 0x1, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf0, 0x0, 0x1f, 0xfc, 0x0, 0x3e, 0x3e, 0x0, 0x78, 0xf, 0x0, 0x70, 0x7, 0x0, 0xf0, 0x7, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x3, 0x80, 0xf0, 0x7, 0x80, 0x70, 0x7, 0x0, 0x78, 0xf, 0x0, 0x3e, 0x3e, 0x0, 0x1f, 0xfc, 0x0, 0x7, 0xf0, 0x0}
+
+/* Oacute (211) */
+#define NXFONT_METRICS_211 {3, 17, 24, 1, 5, 0}
+#define NXFONT_BITMAP_211 {0x0, 0x38, 0x0, 0x0, 0x70, 0x0, 0x0, 0xe0, 0x0, 0x1, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf0, 0x0, 0x1f, 0xfc, 0x0, 0x3e, 0x3e, 0x0, 0x78, 0xf, 0x0, 0x70, 0x7, 0x0, 0xf0, 0x7, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x3, 0x80, 0xf0, 0x7, 0x80, 0x70, 0x7, 0x0, 0x78, 0xf, 0x0, 0x3e, 0x3e, 0x0, 0x1f, 0xfc, 0x0, 0x7, 0xf0, 0x0}
+
+/* Ocircumflex (212) */
+#define NXFONT_METRICS_212 {3, 17, 24, 1, 5, 0}
+#define NXFONT_BITMAP_212 {0x1, 0xc0, 0x0, 0x3, 0xe0, 0x0, 0x7, 0x70, 0x0, 0xe, 0x38, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf0, 0x0, 0x1f, 0xfc, 0x0, 0x3e, 0x3e, 0x0, 0x78, 0xf, 0x0, 0x70, 0x7, 0x0, 0xf0, 0x7, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x3, 0x80, 0xf0, 0x7, 0x80, 0x70, 0x7, 0x0, 0x78, 0xf, 0x0, 0x3e, 0x3e, 0x0, 0x1f, 0xfc, 0x0, 0x7, 0xf0, 0x0}
+
+/* Otilde (213) */
+#define NXFONT_METRICS_213 {3, 17, 23, 1, 6, 0}
+#define NXFONT_BITMAP_213 {0x7, 0x98, 0x0, 0xf, 0xf8, 0x0, 0xc, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf0, 0x0, 0x1f, 0xfc, 0x0, 0x3e, 0x3e, 0x0, 0x78, 0xf, 0x0, 0x70, 0x7, 0x0, 0xf0, 0x7, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x3, 0x80, 0xf0, 0x7, 0x80, 0x70, 0x7, 0x0, 0x78, 0xf, 0x0, 0x3e, 0x3e, 0x0, 0x1f, 0xfc, 0x0, 0x7, 0xf0, 0x0}
+
+/* Odieresis (214) */
+#define NXFONT_METRICS_214 {3, 17, 23, 1, 6, 0}
+#define NXFONT_BITMAP_214 {0xe, 0x38, 0x0, 0xe, 0x38, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf0, 0x0, 0x1f, 0xfc, 0x0, 0x3e, 0x3e, 0x0, 0x78, 0xf, 0x0, 0x70, 0x7, 0x0, 0xf0, 0x7, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x3, 0x80, 0xf0, 0x7, 0x80, 0x70, 0x7, 0x0, 0x78, 0xf, 0x0, 0x3e, 0x3e, 0x0, 0x1f, 0xfc, 0x0, 0x7, 0xf0, 0x0}
+
+/* multiply (215) */
+#define NXFONT_METRICS_215 {2, 12, 12, 1, 16, 0}
+#define NXFONT_BITMAP_215 {0x40, 0x20, 0xe0, 0x70, 0x70, 0xe0, 0x39, 0xc0, 0x1f, 0x80, 0xf, 0x0, 0xf, 0x0, 0x1f, 0x80, 0x39, 0xc0, 0x70, 0xe0, 0xe0, 0x70, 0x40, 0x20}
+
+/* Oslash (216) */
+#define NXFONT_METRICS_216 {3, 19, 19, 0, 10, 0}
+#define NXFONT_BITMAP_216 {0x3, 0xf8, 0x60, 0xf, 0xfe, 0xe0, 0x1f, 0x1f, 0xc0, 0x3c, 0x3, 0x80, 0x38, 0x7, 0x80, 0x78, 0xf, 0xc0, 0x70, 0x1d, 0xc0, 0x70, 0x39, 0xc0, 0x70, 0x71, 0xc0, 0x70, 0xe1, 0xc0, 0x71, 0xc1, 0xc0, 0x73, 0x81, 0xc0, 0x77, 0x1, 0xc0, 0x7e, 0x3, 0xc0, 0x3c, 0x3, 0x80, 0x3c, 0x7, 0x80, 0x7f, 0x1f, 0x0, 0xef, 0xfe, 0x0, 0xc3, 0xf8, 0x0}
+
+/* Ugrave (217) */
+#define NXFONT_METRICS_217 {2, 15, 24, 2, 5, 0}
+#define NXFONT_BITMAP_217 {0xe, 0x0, 0x7, 0x0, 0x3, 0x80, 0x1, 0xc0, 0x0, 0x0, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xf0, 0x1e, 0x70, 0x1c, 0x7c, 0x7c, 0x3f, 0xf8, 0xf, 0xe0}
+
+/* Uacute (218) */
+#define NXFONT_METRICS_218 {2, 15, 24, 2, 5, 0}
+#define NXFONT_BITMAP_218 {0x0, 0x70, 0x0, 0xe0, 0x1, 0xc0, 0x3, 0x80, 0x0, 0x0, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xf0, 0x1e, 0x70, 0x1c, 0x7c, 0x7c, 0x3f, 0xf8, 0xf, 0xe0}
+
+/* Ucircumflex (219) */
+#define NXFONT_METRICS_219 {2, 15, 24, 2, 5, 0}
+#define NXFONT_BITMAP_219 {0x3, 0x80, 0x7, 0xc0, 0xe, 0xe0, 0x1c, 0x70, 0x0, 0x0, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xf0, 0x1e, 0x70, 0x1c, 0x7c, 0x7c, 0x3f, 0xf8, 0xf, 0xe0}
+
+/* Udieresis (220) */
+#define NXFONT_METRICS_220 {2, 15, 23, 2, 6, 0}
+#define NXFONT_BITMAP_220 {0x1c, 0x70, 0x1c, 0x70, 0x0, 0x0, 0x0, 0x0, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xf0, 0x1e, 0x70, 0x1c, 0x7c, 0x7c, 0x3f, 0xf8, 0xf, 0xe0}
+
+/* Yacute (221) */
+#define NXFONT_METRICS_221 {2, 15, 24, 1, 5, 0}
+#define NXFONT_BITMAP_221 {0x0, 0x70, 0x0, 0xe0, 0x1, 0xc0, 0x3, 0x80, 0x0, 0x0, 0xe0, 0xe, 0xf0, 0x1e, 0x70, 0x1c, 0x78, 0x3c, 0x38, 0x38, 0x3c, 0x78, 0x1c, 0x70, 0x1e, 0xf0, 0xe, 0xe0, 0xf, 0xe0, 0x7, 0xc0, 0x7, 0xc0, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80}
+
+/* Thorn (222) */
+#define NXFONT_METRICS_222 {2, 14, 19, 2, 10, 0}
+#define NXFONT_BITMAP_222 {0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xff, 0xe0, 0xff, 0xf8, 0xe0, 0x38, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x38, 0xff, 0xf8, 0xff, 0xf0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0}
+
+/* germandbls (223) */
+#define NXFONT_METRICS_223 {2, 11, 19, 2, 10, 0}
+#define NXFONT_BITMAP_223 {0x1e, 0x0, 0x7f, 0x80, 0xf3, 0x80, 0xe1, 0xc0, 0xe1, 0xc0, 0xe1, 0xc0, 0xe1, 0xc0, 0xe3, 0x80, 0xef, 0x0, 0xef, 0x80, 0xe3, 0xc0, 0xe1, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe1, 0xc0, 0xef, 0xc0, 0xef, 0x80}
+
+/* agrave (224) */
+#define NXFONT_METRICS_224 {2, 12, 19, 1, 10, 0}
+#define NXFONT_BITMAP_224 {0x1c, 0x0, 0xe, 0x0, 0x7, 0x0, 0x3, 0x80, 0x0, 0x0, 0x1f, 0x80, 0x3f, 0xc0, 0x71, 0xe0, 0x70, 0xe0, 0x0, 0xe0, 0x7, 0xe0, 0x3f, 0xe0, 0x7c, 0xe0, 0xf0, 0xe0, 0xe0, 0xe0, 0xe1, 0xe0, 0xf3, 0xe0, 0x7f, 0xf0, 0x3e, 0x70}
+
+/* aacute (225) */
+#define NXFONT_METRICS_225 {2, 12, 19, 1, 10, 0}
+#define NXFONT_BITMAP_225 {0x1, 0xc0, 0x3, 0x80, 0x7, 0x0, 0xe, 0x0, 0x0, 0x0, 0x1f, 0x80, 0x3f, 0xc0, 0x71, 0xe0, 0x70, 0xe0, 0x0, 0xe0, 0x7, 0xe0, 0x3f, 0xe0, 0x7c, 0xe0, 0xf0, 0xe0, 0xe0, 0xe0, 0xe1, 0xe0, 0xf3, 0xe0, 0x7f, 0xf0, 0x3e, 0x70}
+
+/* acircumflex (226) */
+#define NXFONT_METRICS_226 {2, 12, 19, 1, 10, 0}
+#define NXFONT_BITMAP_226 {0x7, 0x0, 0xf, 0x80, 0x1d, 0xc0, 0x38, 0xe0, 0x0, 0x0, 0x1f, 0x80, 0x3f, 0xc0, 0x71, 0xe0, 0x70, 0xe0, 0x0, 0xe0, 0x7, 0xe0, 0x3f, 0xe0, 0x7c, 0xe0, 0xf0, 0xe0, 0xe0, 0xe0, 0xe1, 0xe0, 0xf3, 0xe0, 0x7f, 0xf0, 0x3e, 0x70}
+
+/* atilde (227) */
+#define NXFONT_METRICS_227 {2, 12, 19, 1, 10, 0}
+#define NXFONT_BITMAP_227 {0x3c, 0xc0, 0x7f, 0xc0, 0x67, 0x80, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x80, 0x3f, 0xc0, 0x71, 0xe0, 0x70, 0xe0, 0x0, 0xe0, 0x7, 0xe0, 0x3f, 0xe0, 0x7c, 0xe0, 0xf0, 0xe0, 0xe0, 0xe0, 0xe1, 0xe0, 0xf3, 0xe0, 0x7f, 0xf0, 0x3e, 0x70}
+
+/* adieresis (228) */
+#define NXFONT_METRICS_228 {2, 12, 18, 1, 11, 0}
+#define NXFONT_BITMAP_228 {0x39, 0xc0, 0x39, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x80, 0x3f, 0xc0, 0x71, 0xe0, 0x70, 0xe0, 0x0, 0xe0, 0x7, 0xe0, 0x3f, 0xe0, 0x7c, 0xe0, 0xf0, 0xe0, 0xe0, 0xe0, 0xe1, 0xe0, 0xf3, 0xe0, 0x7f, 0xf0, 0x3e, 0x70}
+
+/* aring (229) */
+#define NXFONT_METRICS_229 {2, 12, 19, 1, 10, 0}
+#define NXFONT_BITMAP_229 {0x7, 0x0, 0xd, 0x80, 0x8, 0x80, 0xd, 0x80, 0x7, 0x0, 0x1f, 0x80, 0x3f, 0xc0, 0x71, 0xe0, 0x70, 0xe0, 0x0, 0xe0, 0x7, 0xe0, 0x3f, 0xe0, 0x7c, 0xe0, 0xf0, 0xe0, 0xe0, 0xe0, 0xe1, 0xe0, 0xf3, 0xe0, 0x7f, 0xf0, 0x3e, 0x70}
+
+/* ae (230) */
+#define NXFONT_METRICS_230 {3, 20, 14, 1, 15, 0}
+#define NXFONT_BITMAP_230 {0x1f, 0x8f, 0x0, 0x3f, 0xff, 0xc0, 0x71, 0xf9, 0xe0, 0x70, 0xf0, 0xe0, 0x0, 0xe0, 0x70, 0x7, 0xe0, 0x70, 0x3f, 0xff, 0xf0, 0x7c, 0xff, 0xf0, 0xf0, 0xe0, 0x0, 0xe0, 0xe0, 0x0, 0xe1, 0xf0, 0x70, 0xf3, 0xf8, 0xf0, 0x7f, 0x3f, 0xe0, 0x3e, 0xf, 0x80}
+
+/* ccedilla (231) */
+#define NXFONT_METRICS_231 {2, 11, 19, 1, 15, 0}
+#define NXFONT_BITMAP_231 {0x1f, 0x80, 0x3f, 0xc0, 0x79, 0xe0, 0x70, 0xe0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0x70, 0xe0, 0x79, 0xe0, 0x3f, 0xc0, 0x1f, 0x80, 0x1e, 0x0, 0x7, 0x0, 0x7, 0x0, 0x3f, 0x0, 0x1e, 0x0}
+
+/* egrave (232) */
+#define NXFONT_METRICS_232 {2, 12, 19, 1, 10, 0}
+#define NXFONT_BITMAP_232 {0x1c, 0x0, 0xe, 0x0, 0x7, 0x0, 0x3, 0x80, 0x0, 0x0, 0xf, 0x0, 0x3f, 0xc0, 0x79, 0xe0, 0x70, 0xe0, 0xe0, 0x70, 0xe0, 0x70, 0xff, 0xf0, 0xff, 0xf0, 0xe0, 0x0, 0xe0, 0x0, 0x70, 0x70, 0x78, 0xf0, 0x3f, 0xe0, 0xf, 0x80}
+
+/* eacute (233) */
+#define NXFONT_METRICS_233 {2, 12, 19, 1, 10, 0}
+#define NXFONT_BITMAP_233 {0x3, 0x80, 0x7, 0x0, 0xe, 0x0, 0x1c, 0x0, 0x0, 0x0, 0xf, 0x0, 0x3f, 0xc0, 0x79, 0xe0, 0x70, 0xe0, 0xe0, 0x70, 0xe0, 0x70, 0xff, 0xf0, 0xff, 0xf0, 0xe0, 0x0, 0xe0, 0x0, 0x70, 0x70, 0x78, 0xf0, 0x3f, 0xe0, 0xf, 0x80}
+
+/* ecircumflex (234) */
+#define NXFONT_METRICS_234 {2, 12, 19, 1, 10, 0}
+#define NXFONT_BITMAP_234 {0x7, 0x0, 0xf, 0x80, 0x1d, 0xc0, 0x38, 0xe0, 0x0, 0x0, 0xf, 0x0, 0x3f, 0xc0, 0x79, 0xe0, 0x70, 0xe0, 0xe0, 0x70, 0xe0, 0x70, 0xff, 0xf0, 0xff, 0xf0, 0xe0, 0x0, 0xe0, 0x0, 0x70, 0x70, 0x78, 0xf0, 0x3f, 0xe0, 0xf, 0x80}
+
+/* edieresis (235) */
+#define NXFONT_METRICS_235 {2, 12, 18, 1, 11, 0}
+#define NXFONT_BITMAP_235 {0x39, 0xc0, 0x39, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xf, 0x0, 0x3f, 0xc0, 0x79, 0xe0, 0x70, 0xe0, 0xe0, 0x70, 0xe0, 0x70, 0xff, 0xf0, 0xff, 0xf0, 0xe0, 0x0, 0xe0, 0x0, 0x70, 0x70, 0x78, 0xf0, 0x3f, 0xe0, 0xf, 0x80}
+
+/* igrave (236) */
+#define NXFONT_METRICS_236 {1, 6, 19, 0, 10, 0}
+#define NXFONT_BITMAP_236 {0xe0, 0x70, 0x38, 0x1c, 0x0, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38}
+
+/* iacute (237) */
+#define NXFONT_METRICS_237 {1, 6, 19, 1, 10, 0}
+#define NXFONT_BITMAP_237 {0x1c, 0x38, 0x70, 0xe0, 0x0, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70}
+
+/* icircumflex (238) - NOTE: Xoffset should be -1, not 0. */
+#define NXFONT_METRICS_238 {2, 9, 19, 0, 10, 0}
+#define NXFONT_BITMAP_238 {0x1c, 0x0, 0x3e, 0x0, 0x77, 0x0, 0xe3, 0x80, 0x0, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0}
+
+/* idieresis (239) */
+#define NXFONT_METRICS_239 {1, 7, 18, 0, 11, 0}
+#define NXFONT_BITMAP_239 {0xee, 0xee, 0x0, 0x0, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38}
+
+/* eth (240) */
+#define NXFONT_METRICS_240 {2, 12, 19, 1, 10, 0}
+#define NXFONT_BITMAP_240 {0x70, 0x0, 0x1d, 0xc0, 0x7, 0x0, 0x1f, 0x0, 0x61, 0x80, 0xf, 0xc0, 0x3f, 0xc0, 0x79, 0xe0, 0x70, 0xe0, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0x70, 0xe0, 0x79, 0xe0, 0x3f, 0xc0, 0xf, 0x0}
+
+/* ntilde (241) */
+#define NXFONT_METRICS_241 {2, 11, 19, 2, 10, 0}
+#define NXFONT_BITMAP_241 {0x3c, 0xc0, 0x7f, 0xc0, 0x67, 0x80, 0x0, 0x0, 0x0, 0x0, 0xef, 0x80, 0xff, 0xc0, 0xf1, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0}
+
+/* ograve (242) */
+#define NXFONT_METRICS_242 {2, 12, 19, 1, 10, 0}
+#define NXFONT_BITMAP_242 {0x1c, 0x0, 0xe, 0x0, 0x7, 0x0, 0x3, 0x80, 0x0, 0x0, 0xf, 0x0, 0x3f, 0xc0, 0x79, 0xe0, 0x70, 0xe0, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0x70, 0xe0, 0x79, 0xe0, 0x3f, 0xc0, 0xf, 0x0}
+
+/* oacute (243) */
+#define NXFONT_METRICS_243 {2, 12, 19, 1, 10, 0}
+#define NXFONT_BITMAP_243 {0x3, 0x80, 0x7, 0x0, 0xe, 0x0, 0x1c, 0x0, 0x0, 0x0, 0xf, 0x0, 0x3f, 0xc0, 0x79, 0xe0, 0x70, 0xe0, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0x70, 0xe0, 0x79, 0xe0, 0x3f, 0xc0, 0xf, 0x0}
+
+/* ocircumflex (244) */
+#define NXFONT_METRICS_244 {2, 12, 19, 1, 10, 0}
+#define NXFONT_BITMAP_244 {0xe, 0x0, 0x1f, 0x0, 0x3b, 0x80, 0x71, 0xc0, 0x0, 0x0, 0xf, 0x0, 0x3f, 0xc0, 0x79, 0xe0, 0x70, 0xe0, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0x70, 0xe0, 0x79, 0xe0, 0x3f, 0xc0, 0xf, 0x0}
+
+/* otilde (245) */
+#define NXFONT_METRICS_245 {2, 12, 19, 1, 10, 0}
+#define NXFONT_BITMAP_245 {0x3c, 0xc0, 0x7f, 0xc0, 0x67, 0x80, 0x0, 0x0, 0x0, 0x0, 0xf, 0x0, 0x3f, 0xc0, 0x79, 0xe0, 0x70, 0xe0, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0x70, 0xe0, 0x79, 0xe0, 0x3f, 0xc0, 0xf, 0x0}
+
+/* odieresis (246) */
+#define NXFONT_METRICS_246 {2, 12, 18, 1, 11, 0}
+#define NXFONT_BITMAP_246 {0x39, 0xc0, 0x39, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xf, 0x0, 0x3f, 0xc0, 0x79, 0xe0, 0x70, 0xe0, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0x70, 0xe0, 0x79, 0xe0, 0x3f, 0xc0, 0xf, 0x0}
+
+/* divide (247) */
+#define NXFONT_METRICS_247 {2, 11, 12, 2, 16, 0}
+#define NXFONT_BITMAP_247 {0xe, 0x0, 0xe, 0x0, 0xe, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xe0, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, 0xe, 0x0, 0xe, 0x0, 0xe, 0x0}
+
+/* oslash (248) */
+#define NXFONT_METRICS_248 {2, 14, 14, 0, 15, 0}
+#define NXFONT_BITMAP_248 {0x7, 0x8c, 0x1f, 0xfc, 0x3c, 0xf8, 0x38, 0x70, 0x70, 0xf8, 0x71, 0xf8, 0x73, 0xb8, 0x77, 0x38, 0x7e, 0x38, 0x7c, 0x38, 0x38, 0x70, 0x7c, 0xf0, 0xff, 0xe0, 0xc7, 0x80}
+
+/* ugrave (249) */
+#define NXFONT_METRICS_249 {2, 11, 19, 2, 10, 0}
+#define NXFONT_BITMAP_249 {0x38, 0x0, 0x1c, 0x0, 0xe, 0x0, 0x7, 0x0, 0x0, 0x0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe1, 0xe0, 0x73, 0xe0, 0x7e, 0xe0, 0x1c, 0xe0}
+
+/* uacute (250) */
+#define NXFONT_METRICS_250 {2, 11, 19, 2, 10, 0}
+#define NXFONT_BITMAP_250 {0x3, 0x80, 0x7, 0x0, 0xe, 0x0, 0x1c, 0x0, 0x0, 0x0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe1, 0xe0, 0x73, 0xe0, 0x7e, 0xe0, 0x1c, 0xe0}
+
+/* ucircumflex (251) */
+#define NXFONT_METRICS_251 {2, 11, 19, 2, 10, 0}
+#define NXFONT_BITMAP_251 {0xe, 0x0, 0x1f, 0x0, 0x3b, 0x80, 0x71, 0xc0, 0x0, 0x0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe1, 0xe0, 0x73, 0xe0, 0x7e, 0xe0, 0x1c, 0xe0}
+
+/* udieresis (252) */
+#define NXFONT_METRICS_252 {2, 11, 18, 2, 11, 0}
+#define NXFONT_BITMAP_252 {0x39, 0xc0, 0x39, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe1, 0xe0, 0x73, 0xe0, 0x7e, 0xe0, 0x1c, 0xe0}
+
+/* yacute (253) */
+#define NXFONT_METRICS_253 {2, 13, 24, 1, 10, 0}
+#define NXFONT_BITMAP_253 {0x0, 0xe0, 0x1, 0xc0, 0x3, 0x80, 0x7, 0x0, 0x0, 0x0, 0xe0, 0x38, 0xe0, 0x38, 0x70, 0x38, 0x78, 0x70, 0x38, 0x70, 0x3c, 0xf0, 0x1c, 0xe0, 0x1c, 0xe0, 0xf, 0xc0, 0xf, 0xc0, 0x7, 0xc0, 0x7, 0x80, 0x3, 0x80, 0x3, 0x80, 0x7, 0x0, 0x7, 0x0, 0xe, 0x0, 0x3e, 0x0, 0x3c, 0x0}
+
+/* thorn (254) */
+#define NXFONT_METRICS_254 {2, 12, 24, 2, 10, 0}
+#define NXFONT_BITMAP_254 {0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xef, 0x80, 0xff, 0xc0, 0xf9, 0xe0, 0xf0, 0xe0, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xf0, 0xe0, 0xf9, 0xe0, 0xff, 0xc0, 0xef, 0x80, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0}
+
+/* ydieresis (255) */
+#define NXFONT_METRICS_255 {2, 13, 23, 1, 11, 0}
+#define NXFONT_BITMAP_255 {0x1c, 0xe0, 0x1c, 0xe0, 0x0, 0x0, 0x0, 0x0, 0xe0, 0x38, 0xe0, 0x38, 0x70, 0x38, 0x78, 0x70, 0x38, 0x70, 0x3c, 0xf0, 0x1c, 0xe0, 0x1c, 0xe0, 0xf, 0xc0, 0xf, 0xc0, 0x7, 0xc0, 0x7, 0x80, 0x3, 0x80, 0x3, 0x80, 0x7, 0x0, 0x7, 0x0, 0xe, 0x0, 0x3e, 0x0, 0x3c, 0x0}
+
+/****************************************************************************
+ * Public Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+#define EXTERN extern "C"
+extern "C" {
+#else
+#define EXTERN extern
+#endif
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* __GRAPHICS_NXFONTS_NXFONTS_SANS28X37B_H */
diff --git a/nuttx/graphics/nxfonts/nxfonts_sans39x48.h b/nuttx/graphics/nxfonts/nxfonts_sans39x48.h
new file mode 100644
index 000000000..62aaf1eb3
--- /dev/null
+++ b/nuttx/graphics/nxfonts/nxfonts_sans39x48.h
@@ -0,0 +1,849 @@
+/****************************************************************************
+ * graphics/nxfonts/nxfonts_serif39x48.h
+ *
+ * Copyright (C) 2011-2012 NX Engineering, S.A., All rights reserved.
+ * Author: Jose Pablo Carballo Gomez <jcarballo@nx-engineering.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT}
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING}
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+#ifndef __GRAPHICS_NXFONTS_NXFONTS_SERIF39X48_H
+#define __GRAPHICS_NXFONTS_NXFONTS_SERIF39X48_H
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/* Font ID */
+
+#define NXFONT_ID FONTID_SERIF39X48
+
+/* Ranges of 7-bit and 8-bit fonts */
+
+#define NXFONT_MIN7BIT 33
+#define NXFONT_MAX7BIT 126
+
+#define NXFONT_MIN8BIT 161
+#define NXFONT_MAX8BIT 255
+
+/* Maximum height and width of any glyph in the set */
+
+#define NXFONT_MAXHEIGHT 48
+#define NXFONT_MAXWIDTH 39
+
+/* The width of a space */
+
+#define NXFONT_SPACEWIDTH 9
+
+/* exclam (33) */
+#define NXFONT_METRICS_33 {1, 3, 25, 4, 12, 0}
+#define NXFONT_BITMAP_33 {0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0x40, 0x40, 0x0, 0x0, 0xe0, 0xe0, 0xe0, 0xe0}
+
+/* quotedbl (34) */
+#define NXFONT_METRICS_34 {1, 8, 8, 2, 14, 0}
+#define NXFONT_BITMAP_34 {0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0x42, 0x42}
+
+/* numbersign (35) */
+#define NXFONT_METRICS_35 {3, 17, 23, 1, 14, 0}
+#define NXFONT_BITMAP_35 {0x3, 0x87, 0x0, 0x3, 0x87, 0x0, 0x3, 0x6, 0x0, 0x3, 0x6, 0x0, 0x7, 0xe, 0x0, 0x7, 0xe, 0x0, 0x7f, 0xff, 0x80, 0x7f, 0xff, 0x80, 0x7f, 0xff, 0x80, 0xe, 0x1c, 0x0, 0xe, 0x1c, 0x0, 0xc, 0x18, 0x0, 0x1c, 0x38, 0x0, 0x1c, 0x38, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0x38, 0x70, 0x0, 0x38, 0x70, 0x0, 0x30, 0x60, 0x0, 0x30, 0x60, 0x0, 0x70, 0xe0, 0x0, 0x70, 0xe0, 0x0}
+
+/* dollar (36) */
+#define NXFONT_METRICS_36 {2, 16, 31, 1, 10, 0}
+#define NXFONT_BITMAP_36 {0x1, 0x80, 0x1, 0x80, 0x1, 0x80, 0xf, 0xf0, 0x1f, 0xf8, 0x3d, 0xbc, 0x71, 0x8e, 0x71, 0x8e, 0xe1, 0x8e, 0xe1, 0x80, 0xe1, 0x80, 0x71, 0x80, 0x7d, 0x80, 0x3f, 0xc0, 0x1f, 0xf0, 0x7, 0xfc, 0x1, 0xfe, 0x1, 0x9e, 0x1, 0x8f, 0x1, 0x87, 0xe1, 0x87, 0xe1, 0x87, 0x71, 0x8e, 0x71, 0x8e, 0x3d, 0xbc, 0x3f, 0xf8, 0xf, 0xf0, 0x1, 0x80, 0x1, 0x80, 0x1, 0x80, 0x1, 0x80}
+
+/* percent (37) */
+#define NXFONT_METRICS_37 {4, 26, 24, 1, 13, 0}
+#define NXFONT_BITMAP_37 {0x0, 0x0, 0x30, 0x0, 0x1f, 0x0, 0x70, 0x0, 0x7f, 0x80, 0x60, 0x0, 0x73, 0xc0, 0xe0, 0x0, 0xe0, 0xc0, 0xc0, 0x0, 0xc0, 0xe1, 0xc0, 0x0, 0xc0, 0xe1, 0x80, 0x0, 0xc0, 0xe3, 0x80, 0x0, 0xe0, 0xc3, 0x0, 0x0, 0x73, 0xc7, 0x0, 0x0, 0x7f, 0x86, 0x0, 0x0, 0x1f, 0xe, 0x0, 0x0, 0x0, 0xc, 0x0, 0x0, 0x0, 0x1c, 0x3e, 0x0, 0x0, 0x18, 0x7f, 0x80, 0x0, 0x38, 0xf3, 0x80, 0x0, 0x30, 0xc1, 0xc0, 0x0, 0x71, 0xc0, 0xc0, 0x0, 0x61, 0xc0, 0xc0, 0x0, 0xe1, 0xc0, 0xc0, 0x0, 0xc0, 0xc1, 0xc0, 0x1, 0xc0, 0xe3, 0x80, 0x1, 0x80, 0x7f, 0x80, 0x3, 0x80, 0x3e, 0x0}
+
+/* ampersand (38) */
+#define NXFONT_METRICS_38 {3, 18, 23, 2, 14, 0}
+#define NXFONT_BITMAP_38 {0x7, 0xc0, 0x0, 0xf, 0xe0, 0x0, 0x1e, 0x70, 0x0, 0x3c, 0x38, 0x0, 0x38, 0x38, 0x0, 0x38, 0x38, 0x0, 0x3c, 0x70, 0x0, 0x1e, 0xf0, 0x0, 0xf, 0xe0, 0x0, 0x7, 0xc0, 0x0, 0xf, 0x80, 0x0, 0x3f, 0xc0, 0x0, 0x79, 0xc7, 0x0, 0x70, 0xe7, 0x0, 0xe0, 0xf6, 0x0, 0xe0, 0x7e, 0x0, 0xe0, 0x3c, 0x0, 0xe0, 0x1c, 0x0, 0xf0, 0x3e, 0x0, 0x78, 0x7f, 0x0, 0x7f, 0xf7, 0x80, 0x3f, 0xe3, 0xc0, 0xf, 0x0, 0x0}
+
+/* quotesingle (39) */
+#define NXFONT_METRICS_39 {1, 3, 8, 2, 14, 0}
+#define NXFONT_BITMAP_39 {0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0x40}
+
+/* parenleft (40) */
+#define NXFONT_METRICS_40 {1, 7, 31, 2, 13, 0}
+#define NXFONT_BITMAP_40 {0x6, 0xc, 0xc, 0x18, 0x18, 0x38, 0x30, 0x70, 0x70, 0x70, 0x60, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0x60, 0x70, 0x70, 0x70, 0x30, 0x38, 0x18, 0x18, 0xc, 0xc, 0x6}
+
+/* parenright (41) */
+#define NXFONT_METRICS_41 {1, 7, 31, 1, 13, 0}
+#define NXFONT_BITMAP_41 {0xc0, 0x60, 0x60, 0x30, 0x30, 0x38, 0x18, 0x1c, 0x1c, 0x1c, 0xc, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xc, 0xc, 0x1c, 0x1c, 0x18, 0x18, 0x38, 0x30, 0x70, 0x60, 0x60, 0xc0}
+
+/* asterisk (42) */
+#define NXFONT_METRICS_42 {2, 10, 11, 1, 11, 0}
+#define NXFONT_BITMAP_42 {0xc, 0x0, 0xc, 0x0, 0x4c, 0x80, 0xed, 0xc0, 0x7f, 0x80, 0x3f, 0x0, 0x1e, 0x0, 0x3f, 0x0, 0x73, 0x80, 0xe1, 0xc0, 0x40, 0x80}
+
+/* plus (43) */
+#define NXFONT_METRICS_43 {3, 17, 16, 1, 20, 0}
+#define NXFONT_BITMAP_43 {0x1, 0xc0, 0x0, 0x1, 0xc0, 0x0, 0x1, 0xc0, 0x0, 0x1, 0xc0, 0x0, 0x1, 0xc0, 0x0, 0x1, 0xc0, 0x0, 0x1, 0xc0, 0x0, 0xff, 0xff, 0x80, 0xff, 0xff, 0x80, 0xff, 0xff, 0x80, 0x1, 0xc0, 0x0, 0x1, 0xc0, 0x0, 0x1, 0xc0, 0x0, 0x1, 0xc0, 0x0, 0x1, 0xc0, 0x0, 0x1, 0xc0, 0x0}
+
+/* comma (44) */
+#define NXFONT_METRICS_44 {1, 3, 9, 3, 33, 0}
+#define NXFONT_BITMAP_44 {0xe0, 0xe0, 0xe0, 0xe0, 0x20, 0x60, 0x60, 0xc0, 0x80}
+
+/* hyphen (45) */
+#define NXFONT_METRICS_45 {1, 8, 2, 1, 27, 0}
+#define NXFONT_BITMAP_45 {0xff, 0xff}
+
+/* period (46) */
+#define NXFONT_METRICS_46 {1, 3, 4, 3, 33, 0}
+#define NXFONT_BITMAP_46 {0xe0, 0xe0, 0xe0, 0xe0}
+
+/* slash (47) */
+#define NXFONT_METRICS_47 {2, 9, 24, 0, 13, 0}
+#define NXFONT_BITMAP_47 {0x1, 0x80, 0x1, 0x80, 0x1, 0x80, 0x3, 0x0, 0x3, 0x0, 0x3, 0x0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0xc, 0x0, 0xc, 0x0, 0xc, 0x0, 0x8, 0x0, 0x18, 0x0, 0x18, 0x0, 0x18, 0x0, 0x30, 0x0, 0x30, 0x0, 0x30, 0x0, 0x60, 0x0, 0x60, 0x0, 0x60, 0x0, 0xc0, 0x0, 0xc0, 0x0}
+
+/* zero (48) */
+#define NXFONT_METRICS_48 {2, 15, 24, 1, 13, 0}
+#define NXFONT_BITMAP_48 {0x7, 0xc0, 0x1f, 0xf0, 0x3f, 0xf8, 0x3c, 0x78, 0x78, 0x3c, 0x70, 0x1c, 0x70, 0x1c, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0x70, 0x1c, 0x70, 0x1c, 0x70, 0x3c, 0x3c, 0x78, 0x3f, 0xf8, 0x1f, 0xf0, 0x7, 0xc0}
+
+/* one (49) */
+#define NXFONT_METRICS_49 {1, 8, 24, 3, 13, 0}
+#define NXFONT_BITMAP_49 {0x3, 0x7, 0x7, 0xf, 0x3f, 0xff, 0xff, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7}
+
+/* two (50) */
+#define NXFONT_METRICS_50 {2, 15, 24, 1, 13, 0}
+#define NXFONT_BITMAP_50 {0x7, 0xc0, 0x1f, 0xf0, 0x3f, 0xf8, 0x78, 0x3c, 0x70, 0x1c, 0xf0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0x0, 0xe, 0x0, 0x1c, 0x0, 0x3c, 0x0, 0x78, 0x0, 0xf0, 0x3, 0xe0, 0x7, 0xc0, 0x1f, 0x0, 0x3c, 0x0, 0x78, 0x0, 0x70, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe}
+
+/* three (51) */
+#define NXFONT_METRICS_51 {2, 15, 24, 1, 13, 0}
+#define NXFONT_BITMAP_51 {0x7, 0xc0, 0x1f, 0xf0, 0x3f, 0xf8, 0x38, 0x38, 0x70, 0x1c, 0x70, 0x1c, 0x70, 0x1c, 0x70, 0x1c, 0x0, 0x1c, 0x0, 0x38, 0x3, 0xf8, 0x3, 0xf0, 0x3, 0xf8, 0x0, 0x3c, 0x0, 0x1e, 0x0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0x70, 0x1c, 0x78, 0x3c, 0x3f, 0xf8, 0x1f, 0xf0, 0x7, 0xc0}
+
+/* four (52) */
+#define NXFONT_METRICS_52 {2, 16, 24, 0, 13, 0}
+#define NXFONT_BITMAP_52 {0x0, 0x18, 0x0, 0x38, 0x0, 0x78, 0x0, 0x78, 0x0, 0xf8, 0x1, 0xf8, 0x3, 0xb8, 0x3, 0xb8, 0x7, 0x38, 0xe, 0x38, 0xe, 0x38, 0x1c, 0x38, 0x38, 0x38, 0x38, 0x38, 0x70, 0x38, 0xe0, 0x38, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38}
+
+/* five (53) */
+#define NXFONT_METRICS_53 {2, 15, 24, 1, 13, 0}
+#define NXFONT_BITMAP_53 {0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x70, 0x0, 0x70, 0x0, 0x77, 0xc0, 0x7f, 0xf0, 0x7f, 0xf8, 0x78, 0x7c, 0x70, 0x1c, 0x0, 0x1e, 0x0, 0xe, 0x0, 0xe, 0x0, 0xe, 0xe0, 0xe, 0xe0, 0x1e, 0xf0, 0x1c, 0x78, 0x7c, 0x7f, 0xf8, 0x3f, 0xf0, 0xf, 0x80}
+
+/* six (54) */
+#define NXFONT_METRICS_54 {2, 15, 24, 1, 13, 0}
+#define NXFONT_BITMAP_54 {0x3, 0xc0, 0xf, 0xf0, 0x1f, 0xf8, 0x3c, 0x38, 0x38, 0x1c, 0x70, 0x1c, 0x70, 0x0, 0x70, 0x0, 0x60, 0x0, 0xe3, 0xc0, 0xef, 0xf0, 0xff, 0xf8, 0xf8, 0x3c, 0xf0, 0x1c, 0xf0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0x60, 0xe, 0x70, 0xe, 0x70, 0x1c, 0x38, 0x3c, 0x3f, 0xf8, 0x1f, 0xf0, 0x7, 0xc0}
+
+/* seven (55) */
+#define NXFONT_METRICS_55 {2, 15, 24, 1, 13, 0}
+#define NXFONT_BITMAP_55 {0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0x0, 0xe, 0x0, 0x1c, 0x0, 0x18, 0x0, 0x38, 0x0, 0x70, 0x0, 0x70, 0x0, 0xe0, 0x0, 0xe0, 0x1, 0xc0, 0x1, 0xc0, 0x3, 0x80, 0x3, 0x80, 0x7, 0x0, 0x7, 0x0, 0x7, 0x0, 0xe, 0x0, 0xe, 0x0, 0xe, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0}
+
+/* eight (56) */
+#define NXFONT_METRICS_56 {2, 15, 24, 1, 13, 0}
+#define NXFONT_BITMAP_56 {0x7, 0xc0, 0x1f, 0xf0, 0x3f, 0xf8, 0x38, 0x3c, 0x70, 0x1c, 0x70, 0x1c, 0x70, 0x1c, 0x70, 0x1c, 0x78, 0x3c, 0x3c, 0x78, 0x1f, 0xf0, 0xf, 0xe0, 0x3f, 0xf8, 0x78, 0x3c, 0x70, 0x1c, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xf0, 0x1c, 0x78, 0x3c, 0x3f, 0xf8, 0x1f, 0xf0, 0x7, 0xc0}
+
+/* nine (57) */
+#define NXFONT_METRICS_57 {2, 15, 24, 1, 13, 0}
+#define NXFONT_BITMAP_57 {0x7, 0xc0, 0x1f, 0xf0, 0x3f, 0xf8, 0x78, 0x7c, 0x70, 0x3c, 0xf0, 0x1c, 0xe0, 0x1e, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0x1e, 0xe0, 0x1e, 0x70, 0x3e, 0x7f, 0xfe, 0x3f, 0xee, 0xf, 0xce, 0x0, 0xe, 0x0, 0x1c, 0xe0, 0x1c, 0xf0, 0x3c, 0x78, 0x78, 0x3f, 0xf0, 0x3f, 0xe0, 0xf, 0x80}
+
+/* colon (58) */
+#define NXFONT_METRICS_58 {1, 3, 18, 4, 19, 0}
+#define NXFONT_BITMAP_58 {0xe0, 0xe0, 0xe0, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe0, 0xe0, 0xe0, 0xe0}
+
+/* semicolon (59) */
+#define NXFONT_METRICS_59 {1, 3, 22, 4, 20, 0}
+#define NXFONT_BITMAP_59 {0xe0, 0xe0, 0xe0, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe0, 0xe0, 0xe0, 0xe0, 0x20, 0x60, 0x60, 0xc0, 0x80}
+
+/* less (60) */
+#define NXFONT_METRICS_60 {2, 16, 16, 2, 21, 0}
+#define NXFONT_BITMAP_60 {0x0, 0x3, 0x0, 0xf, 0x0, 0x3f, 0x1, 0xfc, 0x7, 0xe0, 0x1f, 0x80, 0xfe, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xfe, 0x0, 0x1f, 0x80, 0x7, 0xe0, 0x1, 0xfc, 0x0, 0x7f, 0x0, 0xf, 0x0, 0x3}
+
+/* equal (61) */
+#define NXFONT_METRICS_61 {2, 15, 9, 2, 24, 0}
+#define NXFONT_BITMAP_61 {0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe}
+
+/* greater (62) */
+#define NXFONT_METRICS_62 {2, 16, 16, 1, 21, 0}
+#define NXFONT_BITMAP_62 {0xc0, 0x0, 0xf0, 0x0, 0xfe, 0x0, 0x3f, 0x80, 0x7, 0xe0, 0x1, 0xf8, 0x0, 0x7f, 0x0, 0xf, 0x0, 0xf, 0x0, 0x7f, 0x1, 0xf8, 0x7, 0xe0, 0x3f, 0x80, 0xfe, 0x0, 0xf0, 0x0, 0xc0, 0x0}
+
+/* question (63) */
+#define NXFONT_METRICS_63 {2, 14, 25, 2, 12, 0}
+#define NXFONT_BITMAP_63 {0x7, 0xc0, 0x1f, 0xf0, 0x3f, 0xf8, 0x78, 0x38, 0x70, 0x1c, 0xf0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0x0, 0x1c, 0x0, 0x38, 0x0, 0x38, 0x0, 0x70, 0x0, 0xe0, 0x1, 0xe0, 0x1, 0xc0, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x0, 0x0, 0x0, 0x0, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80}
+
+/* at (64) */
+#define NXFONT_METRICS_64 {4, 29, 30, 1, 12, 0}
+#define NXFONT_BITMAP_64 {0x0, 0x7, 0xc0, 0x0, 0x0, 0x3f, 0xf8, 0x0, 0x0, 0xff, 0xfe, 0x0, 0x3, 0xf0, 0x3f, 0x80, 0x7, 0xc0, 0x7, 0xc0, 0xf, 0x0, 0x3, 0xe0, 0x1e, 0x0, 0x1, 0xe0, 0x1c, 0x0, 0x0, 0xf0, 0x38, 0xf, 0x8c, 0x70, 0x38, 0x1f, 0xdc, 0x38, 0x70, 0x3c, 0xfc, 0x38, 0x70, 0x70, 0x7c, 0x38, 0x60, 0xe0, 0x38, 0x18, 0xe0, 0xe0, 0x38, 0x18, 0xe1, 0xe0, 0x38, 0x18, 0xe1, 0xc0, 0x70, 0x38, 0xe1, 0xc0, 0x70, 0x38, 0xe1, 0xc0, 0x70, 0x70, 0xe1, 0xc0, 0xe0, 0x70, 0xe1, 0xe0, 0xe0, 0xe0, 0x70, 0xf3, 0xf3, 0xc0, 0x70, 0xff, 0x7f, 0x80, 0x78, 0x3e, 0x7f, 0x0, 0x3c, 0x0, 0x0, 0x0, 0x1e, 0x0, 0x0, 0x0, 0x1f, 0x0, 0x0, 0x0, 0xf, 0x80, 0x0, 0x0, 0x3, 0xe0, 0x78, 0x0, 0x1, 0xff, 0xf8, 0x0, 0x0, 0x7f, 0xe0, 0x0}
+
+/* A (65) */
+#define NXFONT_METRICS_65 {3, 20, 25, 1, 12, 0}
+#define NXFONT_BITMAP_65 {0x0, 0xf0, 0x0, 0x0, 0xf0, 0x0, 0x0, 0xf8, 0x0, 0x1, 0xf8, 0x0, 0x1, 0xf8, 0x0, 0x3, 0x9c, 0x0, 0x3, 0x9c, 0x0, 0x3, 0x9c, 0x0, 0x7, 0x9e, 0x0, 0x7, 0xe, 0x0, 0x7, 0xe, 0x0, 0xf, 0xf, 0x0, 0xf, 0xf, 0x0, 0xe, 0x7, 0x0, 0x1e, 0x7, 0x80, 0x1f, 0xff, 0x80, 0x1f, 0xff, 0x80, 0x3f, 0xff, 0xc0, 0x3c, 0x3, 0xc0, 0x38, 0x1, 0xc0, 0x78, 0x1, 0xe0, 0x78, 0x1, 0xe0, 0x70, 0x0, 0xe0, 0xf0, 0x0, 0xf0, 0xf0, 0x0, 0xf0}
+
+/* B (66) */
+#define NXFONT_METRICS_66 {3, 17, 25, 3, 12, 0}
+#define NXFONT_BITMAP_66 {0xff, 0xf0, 0x0, 0xff, 0xfc, 0x0, 0xff, 0xfe, 0x0, 0xe0, 0x3e, 0x0, 0xe0, 0xf, 0x0, 0xe0, 0xf, 0x0, 0xe0, 0x7, 0x0, 0xe0, 0x7, 0x0, 0xe0, 0xf, 0x0, 0xe0, 0xe, 0x0, 0xe0, 0x3e, 0x0, 0xff, 0xfc, 0x0, 0xff, 0xfc, 0x0, 0xff, 0xfe, 0x0, 0xe0, 0x1f, 0x0, 0xe0, 0x7, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x7, 0x80, 0xe0, 0xf, 0x0, 0xff, 0xfe, 0x0, 0xff, 0xfe, 0x0, 0xff, 0xf8, 0x0}
+
+/* C (67) */
+#define NXFONT_METRICS_67 {3, 20, 25, 2, 12, 0}
+#define NXFONT_BITMAP_67 {0x1, 0xfc, 0x0, 0x7, 0xff, 0x0, 0xf, 0xff, 0x80, 0x1f, 0x7, 0xc0, 0x3c, 0x1, 0xe0, 0x38, 0x0, 0xe0, 0x70, 0x0, 0xf0, 0x70, 0x0, 0x70, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x70, 0xf0, 0x0, 0x70, 0x70, 0x0, 0xf0, 0x78, 0x0, 0xe0, 0x3c, 0x1, 0xe0, 0x3f, 0x7, 0xc0, 0x1f, 0xff, 0x80, 0x7, 0xfe, 0x0, 0x1, 0xf8, 0x0}
+
+/* D (68) */
+#define NXFONT_METRICS_68 {3, 18, 25, 3, 12, 0}
+#define NXFONT_BITMAP_68 {0xff, 0xf0, 0x0, 0xff, 0xfc, 0x0, 0xff, 0xfe, 0x0, 0xe0, 0x1f, 0x0, 0xe0, 0xf, 0x0, 0xe0, 0x7, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x3, 0xc0, 0xe0, 0x3, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x7, 0x80, 0xe0, 0xf, 0x0, 0xe0, 0x1e, 0x0, 0xff, 0xfe, 0x0, 0xff, 0xfc, 0x0, 0xff, 0xf0, 0x0}
+
+/* E (69) */
+#define NXFONT_METRICS_69 {3, 17, 25, 3, 12, 0}
+#define NXFONT_BITMAP_69 {0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xff, 0xff, 0x80, 0xff, 0xff, 0x80, 0xff, 0xff, 0x80}
+
+/* F (70) */
+#define NXFONT_METRICS_70 {2, 16, 25, 3, 12, 0}
+#define NXFONT_BITMAP_70 {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xff, 0xfc, 0xff, 0xfc, 0xff, 0xfc, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0}
+
+/* G (71) */
+#define NXFONT_METRICS_71 {3, 22, 25, 1, 12, 0}
+#define NXFONT_BITMAP_71 {0x0, 0xfe, 0x0, 0x3, 0xff, 0x80, 0xf, 0xff, 0xc0, 0x1f, 0x83, 0xf0, 0x3e, 0x0, 0xf0, 0x3c, 0x0, 0x78, 0x78, 0x0, 0x38, 0x70, 0x0, 0x38, 0xf0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0xf, 0xfc, 0xe0, 0xf, 0xfc, 0xe0, 0xf, 0xfc, 0xe0, 0x0, 0x1c, 0xf0, 0x0, 0x1c, 0x70, 0x0, 0x1c, 0x78, 0x0, 0x3c, 0x38, 0x0, 0x3c, 0x3c, 0x0, 0xfc, 0x1f, 0x1, 0xfc, 0xf, 0xff, 0xdc, 0x7, 0xff, 0x1c, 0x1, 0xfc, 0x1c}
+
+/* H (72) */
+#define NXFONT_METRICS_72 {3, 18, 25, 3, 12, 0}
+#define NXFONT_BITMAP_72 {0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0}
+
+/* I (73) */
+#define NXFONT_METRICS_73 {1, 3, 25, 3, 12, 0}
+#define NXFONT_BITMAP_73 {0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0}
+
+/* J (74) */
+#define NXFONT_METRICS_74 {2, 13, 25, 1, 12, 0}
+#define NXFONT_BITMAP_74 {0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0xe0, 0x38, 0xe0, 0x38, 0xe0, 0x38, 0xe0, 0x38, 0xf0, 0x78, 0x78, 0xf0, 0x7f, 0xf0, 0x3f, 0xe0, 0x1f, 0x80}
+
+/* K (75) */
+#define NXFONT_METRICS_75 {3, 20, 25, 3, 12, 0}
+#define NXFONT_BITMAP_75 {0xe0, 0x3, 0xc0, 0xe0, 0x7, 0x80, 0xe0, 0xf, 0x0, 0xe0, 0x1e, 0x0, 0xe0, 0x3c, 0x0, 0xe0, 0x78, 0x0, 0xe0, 0xf0, 0x0, 0xe1, 0xe0, 0x0, 0xe3, 0xc0, 0x0, 0xe7, 0xc0, 0x0, 0xef, 0x80, 0x0, 0xff, 0xc0, 0x0, 0xff, 0xc0, 0x0, 0xf9, 0xe0, 0x0, 0xf0, 0xf0, 0x0, 0xe0, 0x70, 0x0, 0xe0, 0x78, 0x0, 0xe0, 0x3c, 0x0, 0xe0, 0x1c, 0x0, 0xe0, 0x1e, 0x0, 0xe0, 0xf, 0x0, 0xe0, 0x7, 0x80, 0xe0, 0x3, 0xc0, 0xe0, 0x3, 0xe0, 0xe0, 0x1, 0xf0}
+
+/* L (76) */
+#define NXFONT_METRICS_76 {2, 14, 25, 3, 12, 0}
+#define NXFONT_BITMAP_76 {0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xff, 0xfc, 0xff, 0xfc, 0xff, 0xfc}
+
+/* M (77) */
+#define NXFONT_METRICS_77 {3, 21, 25, 3, 12, 0}
+#define NXFONT_BITMAP_77 {0xf0, 0x0, 0x78, 0xf0, 0x0, 0x78, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xfc, 0x1, 0xf8, 0xfc, 0x1, 0xf8, 0xfc, 0x1, 0xf8, 0xec, 0x1, 0xb8, 0xee, 0x3, 0xb8, 0xee, 0x3, 0xb8, 0xe6, 0x3, 0x38, 0xe7, 0x7, 0x38, 0xe7, 0x7, 0x38, 0xe3, 0x6, 0x38, 0xe3, 0x8e, 0x38, 0xe3, 0x8e, 0x38, 0xe3, 0x8e, 0x38, 0xe1, 0x8c, 0x38, 0xe1, 0xdc, 0x38, 0xe1, 0xdc, 0x38, 0xe0, 0xd8, 0x38, 0xe0, 0xf8, 0x38, 0xe0, 0xf8, 0x38, 0xe0, 0x70, 0x38, 0xe0, 0x70, 0x38}
+
+/* N (78) */
+#define NXFONT_METRICS_78 {3, 19, 25, 2, 12, 0}
+#define NXFONT_BITMAP_78 {0xf0, 0x0, 0xe0, 0xf0, 0x0, 0xe0, 0xf8, 0x0, 0xe0, 0xfc, 0x0, 0xe0, 0xfc, 0x0, 0xe0, 0xfe, 0x0, 0xe0, 0xef, 0x0, 0xe0, 0xe7, 0x0, 0xe0, 0xe7, 0x80, 0xe0, 0xe3, 0xc0, 0xe0, 0xe3, 0xc0, 0xe0, 0xe1, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xf0, 0xe0, 0xe0, 0x78, 0xe0, 0xe0, 0x38, 0xe0, 0xe0, 0x3c, 0xe0, 0xe0, 0x1c, 0xe0, 0xe0, 0x1e, 0xe0, 0xe0, 0xf, 0xe0, 0xe0, 0x7, 0xe0, 0xe0, 0x7, 0xe0, 0xe0, 0x3, 0xe0, 0xe0, 0x1, 0xe0, 0xe0, 0x1, 0xe0}
+
+/* O (79) */
+#define NXFONT_METRICS_79 {3, 23, 25, 1, 12, 0}
+#define NXFONT_BITMAP_79 {0x0, 0xfe, 0x0, 0x3, 0xff, 0x80, 0xf, 0xef, 0xe0, 0x1f, 0x1, 0xf0, 0x3e, 0x0, 0xf8, 0x3c, 0x0, 0x78, 0x78, 0x0, 0x3c, 0x70, 0x0, 0x1c, 0xf0, 0x0, 0x1e, 0xe0, 0x0, 0xe, 0xe0, 0x0, 0xe, 0xe0, 0x0, 0xe, 0xe0, 0x0, 0xe, 0xe0, 0x0, 0xe, 0xe0, 0x0, 0xe, 0xe0, 0x0, 0xe, 0xf0, 0x0, 0x1e, 0xf0, 0x0, 0x1e, 0x78, 0x0, 0x3c, 0x3c, 0x0, 0x78, 0x3e, 0x0, 0xf8, 0x1f, 0x1, 0xf0, 0xf, 0xef, 0xe0, 0x3, 0xff, 0x80, 0x0, 0xfe, 0x0}
+
+/* P (80) */
+#define NXFONT_METRICS_80 {3, 17, 25, 3, 12, 0}
+#define NXFONT_BITMAP_80 {0xff, 0xf8, 0x0, 0xff, 0xfe, 0x0, 0xff, 0xff, 0x0, 0xe0, 0xf, 0x0, 0xe0, 0x7, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x7, 0x80, 0xe0, 0xf, 0x0, 0xff, 0xff, 0x0, 0xff, 0xfe, 0x0, 0xff, 0xf8, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0}
+
+/* Q (81) */
+#define NXFONT_METRICS_81 {3, 23, 26, 1, 12, 0}
+#define NXFONT_BITMAP_81 {0x0, 0xfe, 0x0, 0x3, 0xff, 0x80, 0xf, 0xef, 0xe0, 0x1f, 0x1, 0xf0, 0x3e, 0x0, 0xf8, 0x3c, 0x0, 0x78, 0x78, 0x0, 0x3c, 0x70, 0x0, 0x1c, 0xf0, 0x0, 0x1e, 0xe0, 0x0, 0xe, 0xe0, 0x0, 0xe, 0xe0, 0x0, 0xe, 0xe0, 0x0, 0xe, 0xe0, 0x0, 0xe, 0xe0, 0x0, 0xe, 0xe0, 0x0, 0xe, 0xf0, 0x0, 0x1e, 0xf0, 0x2, 0x1e, 0x78, 0x7, 0x3c, 0x3c, 0x7, 0xb8, 0x3e, 0x3, 0xf8, 0x1f, 0x1, 0xf0, 0xf, 0xef, 0xf8, 0x3, 0xff, 0xbc, 0x0, 0xfe, 0x1e, 0x0, 0x0, 0xc}
+
+/* R (82) */
+#define NXFONT_METRICS_82 {3, 19, 25, 3, 12, 0}
+#define NXFONT_BITMAP_82 {0xff, 0xfc, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x80, 0xe0, 0x7, 0x80, 0xe0, 0x3, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x3, 0xc0, 0xe0, 0x3, 0x80, 0xe0, 0xf, 0x80, 0xff, 0xff, 0x0, 0xff, 0xfe, 0x0, 0xff, 0xff, 0x0, 0xe0, 0xf, 0x80, 0xe0, 0x7, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x3, 0xc0, 0xe0, 0x3, 0xc0, 0xe0, 0x3, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xe0}
+
+/* S (83) */
+#define NXFONT_METRICS_83 {3, 19, 25, 1, 12, 0}
+#define NXFONT_BITMAP_83 {0x3, 0xf8, 0x0, 0xf, 0xfe, 0x0, 0x1f, 0xff, 0x0, 0x3c, 0xf, 0x80, 0x38, 0x3, 0xc0, 0x70, 0x1, 0xc0, 0x70, 0x1, 0xc0, 0x70, 0x0, 0x0, 0x78, 0x0, 0x0, 0x7c, 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x1f, 0xf8, 0x0, 0x7, 0xff, 0x0, 0x0, 0x7f, 0x80, 0x0, 0xf, 0xc0, 0x0, 0x1, 0xe0, 0x0, 0x0, 0xe0, 0xe0, 0x0, 0xe0, 0xf0, 0x0, 0xe0, 0x70, 0x1, 0xe0, 0x78, 0x1, 0xc0, 0x3e, 0x7, 0xc0, 0x3f, 0xff, 0x80, 0xf, 0xfe, 0x0, 0x3, 0xf8, 0x0}
+
+/* T (84) */
+#define NXFONT_METRICS_84 {3, 19, 25, 0, 12, 0}
+#define NXFONT_BITMAP_84 {0xff, 0xff, 0xe0, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xe0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0}
+
+/* U (85) */
+#define NXFONT_METRICS_85 {3, 18, 25, 3, 12, 0}
+#define NXFONT_BITMAP_85 {0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xf0, 0x3, 0xc0, 0x78, 0x7, 0x80, 0x7c, 0xf, 0x80, 0x3f, 0xff, 0x0, 0x1f, 0xfe, 0x0, 0x3, 0xf0, 0x0}
+
+/* V (86) */
+#define NXFONT_METRICS_86 {3, 19, 25, 1, 12, 0}
+#define NXFONT_BITMAP_86 {0xf0, 0x1, 0xe0, 0xf0, 0x1, 0xe0, 0xf0, 0x1, 0xe0, 0x70, 0x1, 0xc0, 0x78, 0x3, 0xc0, 0x78, 0x3, 0xc0, 0x38, 0x3, 0x80, 0x38, 0x3, 0x80, 0x3c, 0x7, 0x80, 0x1c, 0x7, 0x0, 0x1c, 0x7, 0x0, 0x1e, 0xf, 0x0, 0xe, 0xe, 0x0, 0xe, 0xe, 0x0, 0xf, 0xe, 0x0, 0x7, 0x1c, 0x0, 0x7, 0x1c, 0x0, 0x7, 0x9c, 0x0, 0x3, 0xb8, 0x0, 0x3, 0xb8, 0x0, 0x3, 0xb8, 0x0, 0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0}
+
+/* W (87) */
+#define NXFONT_METRICS_87 {4, 29, 25, 1, 12, 0}
+#define NXFONT_BITMAP_87 {0xf0, 0x7, 0x0, 0x78, 0xf0, 0x7, 0x0, 0x78, 0xf0, 0xf, 0x80, 0x78, 0x70, 0xf, 0x80, 0x70, 0x70, 0xf, 0x80, 0x70, 0x78, 0x1d, 0xc0, 0xf0, 0x78, 0x1d, 0xc0, 0xf0, 0x38, 0x1d, 0xc0, 0xe0, 0x38, 0x1d, 0xc0, 0xe0, 0x38, 0x38, 0xe0, 0xe0, 0x3c, 0x38, 0xe1, 0xe0, 0x1c, 0x38, 0xe1, 0xc0, 0x1c, 0x30, 0xe1, 0xc0, 0x1c, 0x70, 0x71, 0xc0, 0x1c, 0x70, 0x71, 0xc0, 0xe, 0x70, 0x73, 0x80, 0xe, 0xe0, 0x3b, 0x80, 0xe, 0xe0, 0x3b, 0x80, 0xe, 0xe0, 0x3b, 0x80, 0x7, 0xe0, 0x3f, 0x80, 0x7, 0xc0, 0x1f, 0x0, 0x7, 0xc0, 0x1f, 0x0, 0x7, 0xc0, 0x1f, 0x0, 0x3, 0x80, 0xe, 0x0, 0x3, 0x80, 0xe, 0x0}
+
+/* X (88) */
+#define NXFONT_METRICS_88 {3, 20, 25, 1, 12, 0}
+#define NXFONT_BITMAP_88 {0xf8, 0x0, 0xf0, 0x78, 0x1, 0xe0, 0x3c, 0x3, 0xc0, 0x1c, 0x3, 0xc0, 0x1e, 0x7, 0x80, 0xf, 0x7, 0x0, 0xf, 0xf, 0x0, 0x7, 0x9e, 0x0, 0x3, 0x9c, 0x0, 0x3, 0xfc, 0x0, 0x1, 0xf8, 0x0, 0x0, 0xf0, 0x0, 0x0, 0xf0, 0x0, 0x1, 0xf8, 0x0, 0x1, 0xf8, 0x0, 0x3, 0x9c, 0x0, 0x7, 0x9e, 0x0, 0x7, 0xe, 0x0, 0xf, 0xf, 0x0, 0x1e, 0x7, 0x80, 0x1e, 0x7, 0x80, 0x3c, 0x3, 0xc0, 0x78, 0x1, 0xe0, 0x78, 0x1, 0xe0, 0xf0, 0x0, 0xf0}
+
+/* Y (89) */
+#define NXFONT_METRICS_89 {3, 21, 25, 0, 12, 0}
+#define NXFONT_BITMAP_89 {0xf0, 0x0, 0x78, 0x78, 0x0, 0xf0, 0x78, 0x0, 0xe0, 0x3c, 0x1, 0xe0, 0x1c, 0x1, 0xc0, 0x1e, 0x3, 0xc0, 0xe, 0x7, 0x80, 0xf, 0x7, 0x80, 0x7, 0x8f, 0x0, 0x3, 0x8e, 0x0, 0x3, 0xde, 0x0, 0x1, 0xdc, 0x0, 0x1, 0xfc, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0x70, 0x0, 0x0, 0x70, 0x0, 0x0, 0x70, 0x0, 0x0, 0x70, 0x0, 0x0, 0x70, 0x0, 0x0, 0x70, 0x0, 0x0, 0x70, 0x0, 0x0, 0x70, 0x0, 0x0, 0x70, 0x0, 0x0, 0x70, 0x0}
+
+/* Z (90) */
+#define NXFONT_METRICS_90 {3, 18, 25, 1, 12, 0}
+#define NXFONT_BITMAP_90 {0x7f, 0xff, 0xc0, 0x7f, 0xff, 0xc0, 0x7f, 0xff, 0xc0, 0x0, 0x7, 0x80, 0x0, 0xf, 0x80, 0x0, 0xf, 0x0, 0x0, 0x1e, 0x0, 0x0, 0x3c, 0x0, 0x0, 0x3c, 0x0, 0x0, 0x78, 0x0, 0x0, 0xf0, 0x0, 0x1, 0xe0, 0x0, 0x1, 0xe0, 0x0, 0x3, 0xc0, 0x0, 0x7, 0x80, 0x0, 0x7, 0x80, 0x0, 0xf, 0x0, 0x0, 0x1e, 0x0, 0x0, 0x3c, 0x0, 0x0, 0x3c, 0x0, 0x0, 0x78, 0x0, 0x0, 0xf0, 0x0, 0x0, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xc0}
+
+/* bracketleft (91) */
+#define NXFONT_METRICS_91 {1, 6, 32, 2, 12, 0}
+#define NXFONT_BITMAP_91 {0xfc, 0xfc, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xfc, 0xfc}
+
+/* backslash (92) */
+#define NXFONT_METRICS_92 {2, 9, 24, 0, 13, 0}
+#define NXFONT_BITMAP_92 {0xc0, 0x0, 0xc0, 0x0, 0x60, 0x0, 0x60, 0x0, 0x60, 0x0, 0x30, 0x0, 0x30, 0x0, 0x30, 0x0, 0x10, 0x0, 0x18, 0x0, 0x18, 0x0, 0x18, 0x0, 0xc, 0x0, 0xc, 0x0, 0xc, 0x0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0x2, 0x0, 0x3, 0x0, 0x3, 0x0, 0x3, 0x0, 0x1, 0x80, 0x1, 0x80}
+
+/* bracketright (93) */
+#define NXFONT_METRICS_93 {1, 6, 32, 1, 12, 0}
+#define NXFONT_BITMAP_93 {0xfc, 0xfc, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0xfc, 0xfc}
+
+/* asciicircum (94) */
+#define NXFONT_METRICS_94 {2, 12, 13, 1, 13, 0}
+#define NXFONT_BITMAP_94 {0x6, 0x0, 0xf, 0x0, 0xf, 0x0, 0x1f, 0x80, 0x19, 0x80, 0x19, 0x80, 0x39, 0xc0, 0x30, 0xc0, 0x70, 0xe0, 0x60, 0x60, 0x60, 0x60, 0xe0, 0x70, 0xc0, 0x30}
+
+/* underscore (95) */
+#define NXFONT_METRICS_95 {3, 18, 2, 0, 41, 0}
+#define NXFONT_BITMAP_95 {0xff, 0xff, 0xc0, 0xff, 0xff, 0xc0}
+
+/* grave (96) */
+#define NXFONT_METRICS_96 {1, 6, 5, 1, 12, 0}
+#define NXFONT_BITMAP_96 {0xe0, 0xf0, 0x70, 0x38, 0x1c}
+
+/* a (97) */
+#define NXFONT_METRICS_97 {2, 16, 18, 1, 19, 0}
+#define NXFONT_BITMAP_97 {0xf, 0xe0, 0x3f, 0xf8, 0x3c, 0x78, 0x70, 0x3c, 0x70, 0x1c, 0x0, 0x1c, 0x0, 0x3c, 0x1, 0xfc, 0x1f, 0xfc, 0x7e, 0x1c, 0x78, 0x1c, 0xf0, 0x1c, 0xe0, 0x1c, 0xe0, 0x3c, 0xe0, 0x7c, 0x79, 0xfe, 0x7f, 0xdf, 0x3f, 0x8f}
+
+/* b (98) */
+#define NXFONT_METRICS_98 {2, 15, 25, 2, 12, 0}
+#define NXFONT_BITMAP_98 {0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe3, 0xe0, 0xef, 0xf0, 0xff, 0xf8, 0xf8, 0x3c, 0xf0, 0x1c, 0xf0, 0x1e, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xf0, 0x1e, 0xf0, 0x1c, 0xfc, 0x3c, 0xff, 0xf8, 0xef, 0xf0, 0xe7, 0xe0}
+
+/* c (99) */
+#define NXFONT_METRICS_99 {2, 14, 18, 1, 19, 0}
+#define NXFONT_BITMAP_99 {0x7, 0xc0, 0x1f, 0xf0, 0x3f, 0xf8, 0x38, 0x3c, 0x70, 0x1c, 0x70, 0x1c, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x1c, 0xe0, 0x1c, 0x70, 0x1c, 0x78, 0x38, 0x3f, 0xf8, 0x1f, 0xf0, 0x7, 0xc0}
+
+/* d (100) */
+#define NXFONT_METRICS_100 {2, 15, 25, 1, 12, 0}
+#define NXFONT_BITMAP_100 {0x0, 0xe, 0x0, 0xe, 0x0, 0xe, 0x0, 0xe, 0x0, 0xe, 0x0, 0xe, 0x0, 0xe, 0x7, 0xce, 0x1f, 0xee, 0x3f, 0xfe, 0x7c, 0x3e, 0x70, 0x1e, 0xf0, 0x1e, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xf0, 0x1e, 0xf0, 0x1e, 0x78, 0x3e, 0x7f, 0xfe, 0x3f, 0xee, 0xf, 0xce}
+
+/* e (101) */
+#define NXFONT_METRICS_101 {2, 15, 18, 2, 19, 0}
+#define NXFONT_BITMAP_101 {0x7, 0xc0, 0x1f, 0xf0, 0x3f, 0xf8, 0x78, 0x3c, 0x70, 0x1c, 0xf0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xff, 0xfe, 0xff, 0xfe, 0xe0, 0x0, 0xe0, 0x0, 0xf0, 0xe, 0x70, 0x1e, 0x78, 0x3c, 0x3f, 0xf8, 0x1f, 0xf0, 0x7, 0xc0}
+
+/* f (102) */
+#define NXFONT_METRICS_102 {1, 8, 25, 1, 12, 0}
+#define NXFONT_BITMAP_102 {0xf, 0x1f, 0x3c, 0x38, 0x38, 0x38, 0x38, 0xff, 0xff, 0xff, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38}
+
+/* g (103) */
+#define NXFONT_METRICS_103 {2, 15, 25, 1, 19, 0}
+#define NXFONT_BITMAP_103 {0x7, 0xce, 0x1f, 0xee, 0x3f, 0xfe, 0x7c, 0x3e, 0x70, 0x1e, 0xf0, 0x1e, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xf0, 0x1e, 0x70, 0x3e, 0x78, 0x3e, 0x3f, 0xfe, 0x1f, 0xee, 0x7, 0x8e, 0x0, 0xe, 0xe0, 0xe, 0xe0, 0x1c, 0xf0, 0x1c, 0x7c, 0x78, 0x3f, 0xf8, 0x1f, 0xe0}
+
+/* h (104) */
+#define NXFONT_METRICS_104 {2, 14, 25, 2, 12, 0}
+#define NXFONT_BITMAP_104 {0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe3, 0xe0, 0xef, 0xf0, 0xff, 0xf8, 0xf8, 0x3c, 0xf0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c}
+
+/* i (105) */
+#define NXFONT_METRICS_105 {1, 3, 25, 2, 12, 0}
+#define NXFONT_BITMAP_105 {0xe0, 0xe0, 0xe0, 0xe0, 0x0, 0x0, 0x0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0}
+
+/* j (106) -- NOTE: Xoffset should be -1, not 0. */
+#define NXFONT_METRICS_106 {1, 6, 32, 0, 12, 0}
+#define NXFONT_BITMAP_106 {0x1c, 0x1c, 0x1c, 0x1c, 0x0, 0x0, 0x0, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x3c, 0xfc, 0xf8}
+
+/* k (107) */
+#define NXFONT_METRICS_107 {2, 15, 25, 1, 12, 0}
+#define NXFONT_BITMAP_107 {0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x78, 0xe0, 0xf0, 0xe1, 0xe0, 0xe3, 0xc0, 0xe7, 0x80, 0xef, 0x0, 0xff, 0x0, 0xff, 0x0, 0xfb, 0x80, 0xf3, 0xc0, 0xe1, 0xc0, 0xe1, 0xe0, 0xe0, 0xe0, 0xe0, 0xf0, 0xe0, 0x78, 0xe0, 0x38, 0xe0, 0x3c, 0xe0, 0x1e}
+
+/* l (108) */
+#define NXFONT_METRICS_108 {1, 3, 25, 2, 12, 0}
+#define NXFONT_BITMAP_108 {0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0}
+
+/* m (109) */
+#define NXFONT_METRICS_109 {3, 23, 18, 2, 19, 0}
+#define NXFONT_BITMAP_109 {0xe3, 0xc0, 0xf0, 0xef, 0xf3, 0xfc, 0xff, 0xf7, 0xfc, 0xf8, 0x7e, 0x1e, 0xf0, 0x3c, 0xe, 0xe0, 0x38, 0xe, 0xe0, 0x38, 0xe, 0xe0, 0x38, 0xe, 0xe0, 0x38, 0xe, 0xe0, 0x38, 0xe, 0xe0, 0x38, 0xe, 0xe0, 0x38, 0xe, 0xe0, 0x38, 0xe, 0xe0, 0x38, 0xe, 0xe0, 0x38, 0xe, 0xe0, 0x38, 0xe, 0xe0, 0x38, 0xe, 0xe0, 0x38, 0xe}
+
+/* n (110) */
+#define NXFONT_METRICS_110 {2, 14, 18, 2, 19, 0}
+#define NXFONT_BITMAP_110 {0xe3, 0xe0, 0xef, 0xf8, 0xff, 0xf8, 0xf8, 0x3c, 0xf0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c}
+
+/* o (111) */
+#define NXFONT_METRICS_111 {2, 15, 18, 1, 19, 0}
+#define NXFONT_BITMAP_111 {0x7, 0xc0, 0x1f, 0xf0, 0x3f, 0xf8, 0x78, 0x3c, 0x70, 0x1c, 0xf0, 0x1e, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xf0, 0x1e, 0x70, 0x1c, 0x78, 0x3c, 0x3f, 0xf8, 0x1f, 0xf0, 0x7, 0xc0}
+
+/* p (112) */
+#define NXFONT_METRICS_112 {2, 15, 25, 2, 19, 0}
+#define NXFONT_BITMAP_112 {0x3, 0xc0, 0xef, 0xf0, 0xff, 0xf8, 0xf8, 0x3c, 0xf0, 0x1c, 0xf0, 0x1e, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xf0, 0x1e, 0xf0, 0x1c, 0xf8, 0x3c, 0xff, 0xf8, 0xef, 0xf0, 0xe7, 0xe0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0}
+
+/* q (113) */
+#define NXFONT_METRICS_113 {2, 15, 25, 1, 19, 0}
+#define NXFONT_BITMAP_113 {0x7, 0xc0, 0x1f, 0xee, 0x3f, 0xfe, 0x7c, 0x3e, 0x70, 0x1e, 0xf0, 0x1e, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xf0, 0x1e, 0x70, 0x1e, 0x78, 0x3e, 0x3f, 0xfe, 0x1f, 0xee, 0xf, 0xce, 0x0, 0xe, 0x0, 0xe, 0x0, 0xe, 0x0, 0xe, 0x0, 0xe, 0x0, 0xe, 0x0, 0xe}
+
+/* r (114) */
+#define NXFONT_METRICS_114 {1, 8, 18, 2, 19, 0}
+#define NXFONT_BITMAP_114 {0xe7, 0xef, 0xff, 0xfc, 0xf0, 0xf0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0}
+
+/* s (115) */
+#define NXFONT_METRICS_115 {2, 13, 18, 2, 19, 0}
+#define NXFONT_BITMAP_115 {0xf, 0x80, 0x3f, 0xe0, 0x7f, 0xe0, 0x70, 0xf0, 0xe0, 0x70, 0xe0, 0x0, 0x70, 0x0, 0x7e, 0x0, 0x3f, 0xc0, 0x7, 0xf0, 0x0, 0xf0, 0x0, 0x78, 0xe0, 0x38, 0xe0, 0x38, 0xf0, 0x70, 0x7f, 0xf0, 0x7f, 0xe0, 0x1f, 0x80}
+
+/* t (116) */
+#define NXFONT_METRICS_116 {1, 8, 22, 1, 15, 0}
+#define NXFONT_BITMAP_116 {0x38, 0x38, 0x38, 0x38, 0xff, 0xff, 0xff, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x3c, 0x3f, 0x1f}
+
+/* u (117) */
+#define NXFONT_METRICS_117 {2, 14, 18, 2, 19, 0}
+#define NXFONT_BITMAP_117 {0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x3c, 0xf0, 0x7c, 0x7f, 0xfc, 0x7f, 0xdc, 0x1f, 0x1c}
+
+/* v (118) */
+#define NXFONT_METRICS_118 {2, 15, 18, 0, 19, 0}
+#define NXFONT_BITMAP_118 {0xe0, 0xe, 0xe0, 0xe, 0x70, 0x1c, 0x70, 0x1c, 0x70, 0x1c, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x1c, 0x70, 0x1c, 0x70, 0x1c, 0x70, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0x7, 0xc0, 0x7, 0xc0, 0x3, 0x80, 0x3, 0x80}
+
+/* w (119) */
+#define NXFONT_METRICS_119 {3, 23, 18, 0, 19, 0}
+#define NXFONT_BITMAP_119 {0xe0, 0x38, 0xe, 0xe0, 0x38, 0xe, 0x70, 0x7c, 0x1c, 0x70, 0x7c, 0x1c, 0x70, 0x6c, 0x1c, 0x38, 0xee, 0x1c, 0x38, 0xee, 0x38, 0x38, 0xee, 0x38, 0x38, 0xc6, 0x38, 0x18, 0xc6, 0x30, 0x1d, 0xc7, 0x70, 0x1d, 0xc7, 0x70, 0x1d, 0xc7, 0x70, 0xd, 0x83, 0x60, 0xf, 0x83, 0xe0, 0xf, 0x83, 0xe0, 0x7, 0x1, 0xc0, 0x7, 0x1, 0xc0}
+
+/* x (120) */
+#define NXFONT_METRICS_120 {2, 15, 18, 0, 19, 0}
+#define NXFONT_BITMAP_120 {0xf0, 0x1e, 0x78, 0x1c, 0x38, 0x38, 0x3c, 0x70, 0x1c, 0x70, 0xe, 0xe0, 0xf, 0xe0, 0x7, 0xc0, 0x3, 0x80, 0x7, 0xc0, 0x7, 0xc0, 0xf, 0xe0, 0x1e, 0xe0, 0x1c, 0x70, 0x38, 0x78, 0x38, 0x38, 0x70, 0x1c, 0xf0, 0x1e}
+
+/* y (121) */
+#define NXFONT_METRICS_121 {2, 14, 25, 1, 19, 0}
+#define NXFONT_BITMAP_121 {0xe0, 0x1c, 0xe0, 0x1c, 0xf0, 0x38, 0x70, 0x38, 0x70, 0x38, 0x70, 0x70, 0x38, 0x70, 0x38, 0x70, 0x38, 0xe0, 0x3c, 0xe0, 0x1c, 0xe0, 0x1d, 0xc0, 0x1d, 0xc0, 0xf, 0xc0, 0xf, 0x80, 0xf, 0x80, 0x7, 0x0, 0x7, 0x0, 0x7, 0x0, 0xe, 0x0, 0xe, 0x0, 0x1c, 0x0, 0x7c, 0x0, 0x78, 0x0, 0x70, 0x0}
+
+/* z (122) */
+#define NXFONT_METRICS_122 {2, 14, 18, 1, 19, 0}
+#define NXFONT_BITMAP_122 {0x7f, 0xf8, 0x7f, 0xf8, 0x7f, 0xf8, 0x0, 0x78, 0x0, 0xf0, 0x0, 0xe0, 0x1, 0xc0, 0x3, 0xc0, 0x7, 0x80, 0x7, 0x0, 0xe, 0x0, 0x1c, 0x0, 0x3c, 0x0, 0x78, 0x0, 0x70, 0x0, 0xff, 0xfc, 0xff, 0xfc, 0xff, 0xfc}
+
+/* braceleft (123) */
+#define NXFONT_METRICS_123 {1, 8, 32, 1, 12, 0}
+#define NXFONT_BITMAP_123 {0xf, 0x1f, 0x1c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x38, 0x38, 0x70, 0xe0, 0xe0, 0x70, 0x38, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1c, 0x1f, 0xf}
+
+/* bar (124) */
+#define NXFONT_METRICS_124 {1, 2, 31, 3, 13, 0}
+#define NXFONT_BITMAP_124 {0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* braceright (125) */
+#define NXFONT_METRICS_125 {1, 8, 32, 1, 12, 0}
+#define NXFONT_BITMAP_125 {0xf0, 0xf8, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1c, 0x1c, 0xe, 0x7, 0x7, 0xe, 0x1c, 0x1c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x38, 0xf8, 0xf0}
+
+/* asciitilde (126) */
+#define NXFONT_METRICS_126 {2, 14, 6, 2, 22, 0}
+#define NXFONT_BITMAP_126 {0x18, 0x0, 0x7c, 0xc, 0x7f, 0xc, 0xc7, 0xdc, 0xc1, 0xf8, 0x0, 0xf0}
+
+/* exclamdown (161) */
+#define NXFONT_METRICS_161 {1, 3, 25, 4, 19, 0}
+#define NXFONT_BITMAP_161 {0xe0, 0xe0, 0xe0, 0xe0, 0x0, 0x0, 0x40, 0x40, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0}
+
+/* cent (162) */
+#define NXFONT_METRICS_162 {2, 14, 25, 2, 16, 0}
+#define NXFONT_BITMAP_162 {0x0, 0x20, 0x0, 0x60, 0x0, 0x40, 0x7, 0xe0, 0x1f, 0xf0, 0x3c, 0xf8, 0x78, 0xbc, 0x70, 0x9c, 0x70, 0x9c, 0xe1, 0x80, 0xe1, 0x0, 0xe1, 0x0, 0xe3, 0x0, 0xe3, 0x0, 0xe2, 0xc, 0xe2, 0x1c, 0x76, 0x1c, 0x7c, 0x3c, 0x3c, 0x78, 0x1f, 0xf0, 0xf, 0xe0, 0x8, 0x0, 0x18, 0x0, 0x10, 0x0, 0x10, 0x0}
+
+/* sterling (163) */
+#define NXFONT_METRICS_163 {2, 15, 24, 1, 13, 0}
+#define NXFONT_BITMAP_163 {0x3, 0xc0, 0xf, 0xf8, 0x1f, 0xfc, 0x3c, 0x3c, 0x78, 0x1e, 0x70, 0xe, 0x70, 0xe, 0x70, 0x0, 0x70, 0x0, 0x38, 0x0, 0x38, 0x0, 0xff, 0xc0, 0xff, 0xc0, 0xc, 0x0, 0xe, 0x0, 0xe, 0x0, 0xc, 0x0, 0x1c, 0x0, 0x18, 0x0, 0x38, 0x0, 0x73, 0x86, 0xff, 0xfe, 0xff, 0xfe, 0x60, 0x7c}
+
+/* currency (164) */
+#define NXFONT_METRICS_164 {2, 12, 13, 3, 19, 0}
+#define NXFONT_BITMAP_164 {0xe6, 0x30, 0xff, 0xf0, 0x7f, 0xf0, 0x70, 0xe0, 0x60, 0x60, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0x60, 0x60, 0x70, 0xe0, 0x7f, 0xf0, 0xff, 0xf0, 0xe6, 0x30}
+
+/* yen (165) */
+#define NXFONT_METRICS_165 {2, 16, 24, 1, 13, 0}
+#define NXFONT_BITMAP_165 {0xe0, 0x7, 0xe0, 0x7, 0x70, 0xe, 0x70, 0xe, 0x38, 0x1c, 0x38, 0x1c, 0x1c, 0x38, 0x1c, 0x38, 0xe, 0x70, 0xe, 0x70, 0x7, 0xe0, 0x7f, 0xfe, 0x7f, 0xfe, 0x7f, 0xfe, 0x1, 0xc0, 0x1, 0xc0, 0x7f, 0xfe, 0x7f, 0xfe, 0x7f, 0xfe, 0x1, 0xc0, 0x1, 0xc0, 0x1, 0xc0, 0x1, 0xc0, 0x1, 0xc0}
+
+/* brokenbar (166) */
+#define NXFONT_METRICS_166 {1, 2, 32, 3, 12, 0}
+#define NXFONT_BITMAP_166 {0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* section (167) */
+#define NXFONT_METRICS_167 {2, 15, 32, 1, 12, 0}
+#define NXFONT_BITMAP_167 {0x3, 0xc0, 0xf, 0xf0, 0x1f, 0xf8, 0x1c, 0x78, 0x38, 0x3c, 0x38, 0x1c, 0x38, 0x1c, 0x3c, 0x0, 0x1e, 0x0, 0x1f, 0x80, 0x3f, 0xe0, 0x71, 0xf0, 0xe0, 0xf8, 0xe0, 0x7c, 0xe0, 0x1c, 0xe0, 0x1e, 0x70, 0xe, 0x7c, 0xe, 0x3e, 0xe, 0x1f, 0x1c, 0xf, 0x9c, 0x3, 0xf8, 0x1, 0xf0, 0x0, 0xf0, 0x0, 0x78, 0x70, 0x38, 0x70, 0x38, 0x78, 0x38, 0x38, 0x70, 0x3f, 0xf0, 0x1f, 0xe0, 0x7, 0x80}
+
+/* dieresis (168) */
+#define NXFONT_METRICS_168 {1, 8, 3, 1, 12, 0}
+#define NXFONT_BITMAP_168 {0xe7, 0xe7, 0xe7}
+
+/* copyright (169) */
+#define NXFONT_METRICS_169 {3, 24, 25, 0, 12, 0}
+#define NXFONT_BITMAP_169 {0x0, 0xfe, 0x0, 0x3, 0xff, 0x80, 0x7, 0x1, 0xe0, 0xc, 0x0, 0x70, 0x18, 0x0, 0x18, 0x30, 0x7e, 0xc, 0x60, 0xff, 0x86, 0x61, 0xc1, 0xc6, 0xc3, 0x80, 0xc3, 0xc3, 0x0, 0x3, 0xc7, 0x0, 0x3, 0x86, 0x0, 0x1, 0x86, 0x0, 0x1, 0x86, 0x0, 0x1, 0x86, 0x0, 0x1, 0xc7, 0x0, 0x3, 0xc3, 0x80, 0xc3, 0x61, 0xe1, 0xc6, 0x60, 0xff, 0x86, 0x30, 0x3e, 0xc, 0x18, 0x0, 0x18, 0x1c, 0x0, 0x38, 0x7, 0x1, 0xe0, 0x3, 0xff, 0x80, 0x0, 0xfe, 0x0}
+
+/* ordfeminine (170) */
+#define NXFONT_METRICS_170 {2, 10, 15, 1, 12, 0}
+#define NXFONT_BITMAP_170 {0x3f, 0x0, 0x77, 0x80, 0x61, 0x80, 0x1, 0x80, 0x7, 0x80, 0x7f, 0x80, 0xe1, 0x80, 0xc1, 0x80, 0xc3, 0x80, 0xe7, 0x80, 0x7d, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xc0, 0xff, 0xc0}
+
+/* guillemotleft (171) */
+#define NXFONT_METRICS_171 {2, 12, 9, 3, 23, 0}
+#define NXFONT_BITMAP_171 {0x1c, 0x70, 0x38, 0xe0, 0x71, 0xc0, 0xe3, 0x80, 0xc3, 0x0, 0xe3, 0x80, 0x71, 0xc0, 0x38, 0xe0, 0x1c, 0x70}
+
+/* logicalnot (172) */
+#define NXFONT_METRICS_172 {2, 16, 9, 1, 25, 0}
+#define NXFONT_BITMAP_172 {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x7, 0x0, 0x7, 0x0, 0x7, 0x0, 0x7, 0x0, 0x7, 0x0, 0x7}
+
+/* hyphen (173) */
+#define NXFONT_METRICS_173 {1, 8, 2, 1, 27, 0}
+#define NXFONT_BITMAP_173 {0xff, 0xff}
+
+/* registered (174) */
+#define NXFONT_METRICS_174 {3, 24, 25, 0, 12, 0}
+#define NXFONT_BITMAP_174 {0x0, 0x7e, 0x0, 0x3, 0xff, 0x80, 0x7, 0x1, 0xe0, 0xc, 0x0, 0x70, 0x18, 0x0, 0x18, 0x30, 0x0, 0xc, 0x61, 0xff, 0x6, 0x61, 0xff, 0x86, 0xc1, 0x81, 0xc3, 0xc1, 0x80, 0xc3, 0xc1, 0x80, 0xc3, 0x81, 0x81, 0x81, 0x81, 0xff, 0x1, 0x81, 0xfc, 0x1, 0x81, 0x8e, 0x1, 0xc1, 0x86, 0x3, 0xc1, 0x83, 0x3, 0x61, 0x81, 0x86, 0x61, 0x81, 0xc6, 0x30, 0x0, 0xc, 0x18, 0x0, 0x18, 0x1c, 0x0, 0x38, 0x7, 0x1, 0xe0, 0x3, 0xff, 0x80, 0x0, 0x7e, 0x0}
+
+/* macron (175) */
+#define NXFONT_METRICS_175 {2, 9, 2, 1, 13, 0}
+#define NXFONT_BITMAP_175 {0xff, 0x80, 0xff, 0x80}
+
+/* degree (176) */
+#define NXFONT_METRICS_176 {2, 9, 9, 2, 13, 0}
+#define NXFONT_BITMAP_176 {0x3e, 0x0, 0x7f, 0x0, 0xe3, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xe3, 0x80, 0x7f, 0x0, 0x3e, 0x0}
+
+/* plusminus (177) */
+#define NXFONT_METRICS_177 {3, 17, 21, 1, 16, 0}
+#define NXFONT_BITMAP_177 {0x1, 0xc0, 0x0, 0x1, 0xc0, 0x0, 0x1, 0xc0, 0x0, 0x1, 0xc0, 0x0, 0x1, 0xc0, 0x0, 0x1, 0xc0, 0x0, 0x1, 0xc0, 0x0, 0xff, 0xff, 0x80, 0xff, 0xff, 0x80, 0xff, 0xff, 0x80, 0x1, 0xc0, 0x0, 0x1, 0xc0, 0x0, 0x1, 0xc0, 0x0, 0x1, 0xc0, 0x0, 0x1, 0xc0, 0x0, 0x1, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x80, 0xff, 0xff, 0x80, 0xff, 0xff, 0x80}
+
+/* twosuperior (178) */
+#define NXFONT_METRICS_178 {2, 9, 15, 1, 13, 0}
+#define NXFONT_BITMAP_178 {0x1e, 0x0, 0x7f, 0x0, 0x63, 0x0, 0xc1, 0x80, 0xc1, 0x80, 0x1, 0x80, 0x3, 0x0, 0x7, 0x0, 0x1e, 0x0, 0x38, 0x0, 0x70, 0x0, 0xe0, 0x0, 0xc0, 0x0, 0xff, 0x80, 0xff, 0x80}
+
+/* threesuperior (179) */
+#define NXFONT_METRICS_179 {2, 9, 15, 1, 13, 0}
+#define NXFONT_BITMAP_179 {0x3e, 0x0, 0x7f, 0x0, 0xe3, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0x3, 0x80, 0xf, 0x0, 0xf, 0x0, 0x3, 0x80, 0x1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xe3, 0x80, 0x7f, 0x0, 0x3e, 0x0}
+
+/* acute (180) */
+#define NXFONT_METRICS_180 {1, 7, 5, 3, 10, 0}
+#define NXFONT_BITMAP_180 {0x1e, 0x3c, 0x38, 0x70, 0xe0}
+
+/* mu (181) */
+#define NXFONT_METRICS_181 {2, 14, 24, 2, 19, 0}
+#define NXFONT_BITMAP_181 {0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x3c, 0xf0, 0x7c, 0xff, 0xfc, 0xff, 0xdc, 0xff, 0x1c, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0}
+
+/* paragraph (182) */
+#define NXFONT_METRICS_182 {2, 16, 30, 1, 12, 0}
+#define NXFONT_BITMAP_182 {0x7, 0xff, 0x1f, 0xff, 0x3f, 0x8c, 0x3f, 0x8c, 0x7f, 0x8c, 0x7f, 0x8c, 0xff, 0x8c, 0xff, 0x8c, 0xff, 0x8c, 0xff, 0x8c, 0x7f, 0x8c, 0x7f, 0x8c, 0x3f, 0x8c, 0x3f, 0x8c, 0x1f, 0x8c, 0x3, 0x8c, 0x1, 0x8c, 0x1, 0x8c, 0x1, 0x8c, 0x1, 0x8c, 0x1, 0x8c, 0x1, 0x8c, 0x1, 0x8c, 0x1, 0x8c, 0x1, 0x8c, 0x1, 0x8c, 0x1, 0x8c, 0x1, 0x8c, 0x1, 0x8c, 0x1, 0x8c}
+
+/* periodcentered (183) */
+#define NXFONT_METRICS_183 {1, 4, 4, 3, 22, 0}
+#define NXFONT_BITMAP_183 {0x60, 0xf0, 0xf0, 0x60}
+
+/* cedilla (184) */
+#define NXFONT_METRICS_184 {1, 7, 7, 2, 37, 0}
+#define NXFONT_BITMAP_184 {0x18, 0x18, 0x3c, 0xe, 0x6, 0xce, 0x7c}
+
+/* onesuperior (185) */
+#define NXFONT_METRICS_185 {1, 5, 15, 2, 13, 0}
+#define NXFONT_BITMAP_185 {0x18, 0x38, 0xf8, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}
+
+/* ordmasculine (186) */
+#define NXFONT_METRICS_186 {2, 10, 15, 1, 12, 0}
+#define NXFONT_BITMAP_186 {0x1e, 0x0, 0x7f, 0x80, 0x61, 0x80, 0xe1, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xe1, 0xc0, 0x61, 0x80, 0x7f, 0x80, 0x1e, 0x0, 0x0, 0x0, 0xff, 0xc0, 0xff, 0xc0}
+
+/* guillemotright (187) */
+#define NXFONT_METRICS_187 {2, 12, 9, 3, 23, 0}
+#define NXFONT_BITMAP_187 {0xe3, 0x80, 0x71, 0xc0, 0x38, 0xe0, 0x1c, 0x70, 0xc, 0x30, 0x1c, 0x70, 0x38, 0xe0, 0x71, 0xc0, 0xe3, 0x80}
+
+/* onequarter (188) */
+#define NXFONT_METRICS_188 {4, 25, 25, 1, 12, 0}
+#define NXFONT_BITMAP_188 {0x0, 0x0, 0x30, 0x0, 0x18, 0x0, 0x70, 0x0, 0x38, 0x0, 0x60, 0x0, 0xf8, 0x0, 0xe0, 0x0, 0xf8, 0x1, 0xc0, 0x0, 0x18, 0x1, 0x80, 0x0, 0x18, 0x3, 0x80, 0x0, 0x18, 0x3, 0x0, 0x0, 0x18, 0x7, 0x0, 0x0, 0x18, 0xe, 0x0, 0x0, 0x18, 0xc, 0x0, 0x0, 0x18, 0x1c, 0x6, 0x0, 0x18, 0x18, 0xe, 0x0, 0x18, 0x38, 0x1e, 0x0, 0x18, 0x70, 0x3e, 0x0, 0x18, 0x60, 0x76, 0x0, 0x0, 0xe0, 0x66, 0x0, 0x1, 0xc0, 0xc6, 0x0, 0x1, 0x81, 0xc6, 0x0, 0x3, 0x83, 0x86, 0x0, 0x3, 0x3, 0xff, 0x80, 0x7, 0x3, 0xff, 0x80, 0x6, 0x0, 0x6, 0x0, 0xe, 0x0, 0x6, 0x0, 0xc, 0x0, 0x6, 0x0}
+
+/* onehalf (189) */
+#define NXFONT_METRICS_189 {4, 25, 25, 1, 12, 0}
+#define NXFONT_BITMAP_189 {0x0, 0x0, 0x60, 0x0, 0x18, 0x0, 0xe0, 0x0, 0x38, 0x0, 0xc0, 0x0, 0xf8, 0x1, 0x80, 0x0, 0xf8, 0x3, 0x80, 0x0, 0x18, 0x3, 0x0, 0x0, 0x18, 0x6, 0x0, 0x0, 0x18, 0xe, 0x0, 0x0, 0x18, 0xc, 0x0, 0x0, 0x18, 0x1c, 0x0, 0x0, 0x18, 0x18, 0x0, 0x0, 0x18, 0x38, 0x3c, 0x0, 0x18, 0x30, 0xff, 0x0, 0x18, 0x70, 0xc3, 0x80, 0x18, 0x61, 0x81, 0x80, 0x18, 0xc1, 0x81, 0x80, 0x1, 0xc0, 0x3, 0x80, 0x1, 0x80, 0x7, 0x0, 0x3, 0x80, 0xe, 0x0, 0x3, 0x0, 0x3c, 0x0, 0x6, 0x0, 0x70, 0x0, 0xe, 0x0, 0xe0, 0x0, 0xc, 0x1, 0xc0, 0x0, 0x1c, 0x1, 0xff, 0x80, 0x18, 0x1, 0xff, 0x80}
+
+/* threequarters (190) */
+#define NXFONT_METRICS_190 {4, 25, 24, 1, 13, 0}
+#define NXFONT_BITMAP_190 {0x3e, 0x0, 0xe, 0x0, 0x7f, 0x0, 0xc, 0x0, 0x63, 0x80, 0x18, 0x0, 0xc1, 0x80, 0x38, 0x0, 0xc1, 0x80, 0x30, 0x0, 0x3, 0x80, 0x60, 0x0, 0xf, 0x0, 0xe0, 0x0, 0xf, 0x80, 0xc0, 0x0, 0x1, 0xc1, 0x80, 0x0, 0x0, 0xc3, 0x80, 0x0, 0xc0, 0xc3, 0x6, 0x0, 0xc0, 0xc7, 0xe, 0x0, 0x61, 0xce, 0x1e, 0x0, 0x7f, 0x8c, 0x3e, 0x0, 0x1e, 0x18, 0x76, 0x0, 0x0, 0x38, 0x66, 0x0, 0x0, 0x30, 0xc6, 0x0, 0x0, 0x61, 0xc6, 0x0, 0x0, 0xe3, 0x86, 0x0, 0x1, 0xc3, 0xff, 0x80, 0x1, 0x83, 0xff, 0x80, 0x3, 0x0, 0x6, 0x0, 0x7, 0x0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0}
+
+/* questiondown (191) */
+#define NXFONT_METRICS_191 {2, 14, 25, 3, 19, 0}
+#define NXFONT_BITMAP_191 {0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x0, 0x0, 0x0, 0x0, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x7, 0x80, 0x7, 0x0, 0xf, 0x0, 0x1e, 0x0, 0x3c, 0x0, 0x78, 0x0, 0x70, 0x0, 0xf0, 0x0, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xf0, 0x3c, 0x78, 0x78, 0x7f, 0xf0, 0x3f, 0xe0, 0x7, 0x80}
+
+/* Agrave (192) */
+#define NXFONT_METRICS_192 {3, 20, 31, 1, 6, 0}
+#define NXFONT_BITMAP_192 {0x3, 0xc0, 0x0, 0x1, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0x70, 0x0, 0x0, 0x38, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf0, 0x0, 0x0, 0xf0, 0x0, 0x0, 0xf0, 0x0, 0x1, 0xf8, 0x0, 0x1, 0xf8, 0x0, 0x3, 0xfc, 0x0, 0x3, 0x9c, 0x0, 0x3, 0x9c, 0x0, 0x7, 0x9e, 0x0, 0x7, 0xe, 0x0, 0x7, 0xe, 0x0, 0xf, 0xf, 0x0, 0xe, 0xf, 0x0, 0xe, 0x7, 0x0, 0x1e, 0x7, 0x80, 0x1f, 0xff, 0x80, 0x1f, 0xff, 0x80, 0x3f, 0xff, 0xc0, 0x3c, 0x3, 0xc0, 0x38, 0x1, 0xc0, 0x78, 0x1, 0xe0, 0x78, 0x1, 0xe0, 0x70, 0x0, 0xe0, 0xf0, 0x0, 0xf0, 0xf0, 0x0, 0xf0}
+
+/* Aacute (193) */
+#define NXFONT_METRICS_193 {3, 20, 31, 1, 6, 0}
+#define NXFONT_BITMAP_193 {0x0, 0x3c, 0x0, 0x0, 0x78, 0x0, 0x0, 0x70, 0x0, 0x0, 0xe0, 0x0, 0x1, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf0, 0x0, 0x0, 0xf0, 0x0, 0x0, 0xf0, 0x0, 0x1, 0xf8, 0x0, 0x1, 0xf8, 0x0, 0x3, 0xfc, 0x0, 0x3, 0x9c, 0x0, 0x3, 0x9c, 0x0, 0x7, 0x9e, 0x0, 0x7, 0xe, 0x0, 0x7, 0xe, 0x0, 0xf, 0xf, 0x0, 0xf, 0xf, 0x0, 0xe, 0x7, 0x0, 0x1e, 0x7, 0x80, 0x1f, 0xff, 0x80, 0x1f, 0xff, 0x80, 0x3f, 0xff, 0xc0, 0x3c, 0x3, 0xc0, 0x78, 0x1, 0xc0, 0x78, 0x1, 0xe0, 0x78, 0x1, 0xe0, 0x70, 0x0, 0xe0, 0xf0, 0x0, 0xf0, 0xf0, 0x0, 0xf0}
+
+/* Acircumflex (194) */
+#define NXFONT_METRICS_194 {3, 20, 31, 1, 6, 0}
+#define NXFONT_BITMAP_194 {0x0, 0x40, 0x0, 0x0, 0xe0, 0x0, 0x1, 0xf0, 0x0, 0x3, 0xb8, 0x0, 0x7, 0x1c, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf0, 0x0, 0x0, 0xf0, 0x0, 0x0, 0xf0, 0x0, 0x1, 0xf8, 0x0, 0x1, 0xf8, 0x0, 0x3, 0xfc, 0x0, 0x3, 0x9c, 0x0, 0x3, 0x9c, 0x0, 0x7, 0x9e, 0x0, 0x7, 0xe, 0x0, 0x7, 0xe, 0x0, 0xf, 0xf, 0x0, 0xf, 0xf, 0x0, 0xe, 0x7, 0x0, 0x1e, 0x7, 0x80, 0x1f, 0xff, 0x80, 0x1f, 0xff, 0x80, 0x3f, 0xff, 0xc0, 0x3c, 0x3, 0xc0, 0x38, 0x1, 0xc0, 0x78, 0x1, 0xe0, 0x78, 0x1, 0xe0, 0x70, 0x0, 0xe0, 0xf0, 0x0, 0xf0, 0xf0, 0x0, 0xf0}
+
+/* Atilde (195) */
+#define NXFONT_METRICS_195 {3, 20, 30, 1, 7, 0}
+#define NXFONT_BITMAP_195 {0x1, 0xc6, 0x0, 0x3, 0xfe, 0x0, 0x7, 0xfc, 0x0, 0x6, 0x38, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf0, 0x0, 0x0, 0xf0, 0x0, 0x0, 0xf0, 0x0, 0x1, 0xf8, 0x0, 0x1, 0xf8, 0x0, 0x3, 0xfc, 0x0, 0x3, 0x9c, 0x0, 0x3, 0x9c, 0x0, 0x7, 0x9e, 0x0, 0x7, 0xe, 0x0, 0x7, 0xe, 0x0, 0xf, 0xf, 0x0, 0xf, 0xf, 0x0, 0xe, 0x7, 0x0, 0x1e, 0x7, 0x80, 0x1f, 0xff, 0x80, 0x1f, 0xff, 0x80, 0x3f, 0xff, 0xc0, 0x3c, 0x3, 0xc0, 0x38, 0x1, 0xc0, 0x78, 0x1, 0xe0, 0x78, 0x1, 0xe0, 0x70, 0x0, 0xe0, 0xf0, 0x0, 0xf0, 0xf0, 0x0, 0xf0}
+
+/* Adieresis (196) */
+#define NXFONT_METRICS_196 {3, 20, 30, 1, 7, 0}
+#define NXFONT_BITMAP_196 {0x3, 0x9c, 0x0, 0x3, 0x9c, 0x0, 0x3, 0x9c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf0, 0x0, 0x0, 0xf0, 0x0, 0x0, 0xf0, 0x0, 0x1, 0xf8, 0x0, 0x1, 0xf8, 0x0, 0x3, 0xfc, 0x0, 0x3, 0x9c, 0x0, 0x3, 0x9c, 0x0, 0x7, 0x9e, 0x0, 0x7, 0xe, 0x0, 0x7, 0xe, 0x0, 0xf, 0xf, 0x0, 0xf, 0xf, 0x0, 0xe, 0x7, 0x0, 0x1e, 0x7, 0x80, 0x1f, 0xff, 0x80, 0x1f, 0xff, 0x80, 0x3f, 0xff, 0xc0, 0x3c, 0x3, 0xc0, 0x38, 0x1, 0xc0, 0x78, 0x1, 0xe0, 0x78, 0x1, 0xe0, 0x70, 0x0, 0xe0, 0xf0, 0x0, 0xf0, 0xf0, 0x0, 0xf0}
+
+/* Aring (197) */
+#define NXFONT_METRICS_197 {3, 20, 31, 1, 6, 0}
+#define NXFONT_BITMAP_197 {0x0, 0xf0, 0x0, 0x1, 0x98, 0x0, 0x1, 0x8, 0x0, 0x1, 0x8, 0x0, 0x1, 0x98, 0x0, 0x0, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf0, 0x0, 0x0, 0xf0, 0x0, 0x1, 0xf8, 0x0, 0x1, 0xf8, 0x0, 0x3, 0xfc, 0x0, 0x3, 0x9c, 0x0, 0x3, 0x9c, 0x0, 0x7, 0x9e, 0x0, 0x7, 0xe, 0x0, 0x7, 0xe, 0x0, 0xf, 0xf, 0x0, 0xe, 0xf, 0x0, 0xe, 0x7, 0x0, 0x1e, 0x7, 0x80, 0x1f, 0xff, 0x80, 0x1f, 0xff, 0x80, 0x3f, 0xff, 0xc0, 0x3c, 0x3, 0xc0, 0x38, 0x1, 0xc0, 0x78, 0x1, 0xe0, 0x78, 0x1, 0xe0, 0x70, 0x0, 0xe0, 0xf0, 0x0, 0xf0, 0xf0, 0x0, 0xf0}
+
+/* AE (198) */
+#define NXFONT_METRICS_198 {4, 29, 25, 1, 12, 0}
+#define NXFONT_BITMAP_198 {0x0, 0x7f, 0xff, 0xf8, 0x0, 0x7f, 0xff, 0xf8, 0x0, 0xff, 0xff, 0xf8, 0x0, 0xe3, 0x80, 0x0, 0x1, 0xc3, 0x80, 0x0, 0x1, 0xc3, 0x80, 0x0, 0x3, 0xc3, 0x80, 0x0, 0x3, 0x83, 0x80, 0x0, 0x3, 0x83, 0x80, 0x0, 0x7, 0x83, 0x80, 0x0, 0x7, 0x3, 0x80, 0x0, 0x7, 0x3, 0xff, 0xf0, 0xf, 0x3, 0xff, 0xf0, 0xe, 0x3, 0xff, 0xf0, 0x1e, 0x3, 0x80, 0x0, 0x1f, 0xff, 0x80, 0x0, 0x1f, 0xff, 0x80, 0x0, 0x3f, 0xff, 0x80, 0x0, 0x38, 0x3, 0x80, 0x0, 0x78, 0x3, 0x80, 0x0, 0x78, 0x3, 0x80, 0x0, 0x70, 0x3, 0x80, 0x0, 0xf0, 0x3, 0xff, 0xf8, 0xe0, 0x3, 0xff, 0xf8, 0xe0, 0x3, 0xff, 0xf8}
+
+/* Ccedilla (199) */
+#define NXFONT_METRICS_199 {3, 20, 32, 2, 12, 0}
+#define NXFONT_BITMAP_199 {0x1, 0xf8, 0x0, 0x7, 0xfe, 0x0, 0xf, 0xff, 0x80, 0x1f, 0x7, 0x80, 0x3c, 0x3, 0xc0, 0x78, 0x1, 0xe0, 0x70, 0x0, 0xe0, 0x70, 0x0, 0xe0, 0xf0, 0x0, 0x0, 0xf0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xf0, 0x0, 0x70, 0xf0, 0x0, 0x70, 0x70, 0x0, 0xf0, 0x70, 0x0, 0xe0, 0x78, 0x1, 0xe0, 0x3c, 0x3, 0xc0, 0x1f, 0x7, 0xc0, 0xf, 0xff, 0x80, 0x7, 0xfe, 0x0, 0x1, 0xf8, 0x0, 0x0, 0x60, 0x0, 0x0, 0x60, 0x0, 0x0, 0xf0, 0x0, 0x0, 0x38, 0x0, 0x0, 0x18, 0x0, 0x3, 0x38, 0x0, 0x1, 0xf0, 0x0}
+
+/* Egrave (200) */
+#define NXFONT_METRICS_200 {3, 17, 31, 3, 6, 0}
+#define NXFONT_BITMAP_200 {0xf, 0x0, 0x0, 0x7, 0x80, 0x0, 0x3, 0x80, 0x0, 0x1, 0xc0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xff, 0xff, 0x80, 0xff, 0xff, 0x80, 0xff, 0xff, 0x80}
+
+/* Eacute (201) */
+#define NXFONT_METRICS_201 {3, 17, 31, 3, 6, 0}
+#define NXFONT_BITMAP_201 {0x0, 0x78, 0x0, 0x0, 0xf0, 0x0, 0x0, 0xe0, 0x0, 0x1, 0xc0, 0x0, 0x3, 0x80, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xff, 0xff, 0x80, 0xff, 0xff, 0x80, 0xff, 0xff, 0x80}
+
+/* Ecircumflex (202) */
+#define NXFONT_METRICS_202 {3, 17, 31, 3, 6, 0}
+#define NXFONT_BITMAP_202 {0x0, 0x80, 0x0, 0x1, 0xc0, 0x0, 0x3, 0xe0, 0x0, 0x7, 0x70, 0x0, 0xe, 0x38, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xff, 0xff, 0x80, 0xff, 0xff, 0x80, 0xff, 0xff, 0x80}
+
+/* Edieresis (203) */
+#define NXFONT_METRICS_203 {3, 17, 30, 3, 7, 0}
+#define NXFONT_BITMAP_203 {0x1c, 0x38, 0x0, 0x1c, 0x38, 0x0, 0x1c, 0x38, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xff, 0xff, 0x80, 0xff, 0xff, 0x80, 0xff, 0xff, 0x80}
+
+/* Igrave (204) */
+#define NXFONT_METRICS_204 {1, 7, 31, 0, 6, 0}
+#define NXFONT_BITMAP_204 {0xf0, 0x78, 0x38, 0x1c, 0xe, 0x0, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}
+
+/* Iacute (205) */
+#define NXFONT_METRICS_205 {1, 7, 31, 2, 6, 0}
+#define NXFONT_BITMAP_205 {0x1e, 0x3c, 0x38, 0x70, 0xe0, 0x0, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70}
+
+/* Icircumflex (206) */
+#define NXFONT_METRICS_206 {2, 9, 31, 0, 6, 0}
+#define NXFONT_BITMAP_206 {0x8, 0x0, 0x1c, 0x0, 0x3e, 0x0, 0x77, 0x0, 0xe3, 0x80, 0x0, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0}
+
+/* Idieresis (207) */
+#define NXFONT_METRICS_207 {2, 9, 30, 0, 7, 0}
+#define NXFONT_BITMAP_207 {0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0x0, 0x0, 0x0, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0}
+
+/* Eth (208) */
+#define NXFONT_METRICS_208 {3, 21, 25, 0, 12, 0}
+#define NXFONT_BITMAP_208 {0x1f, 0xfe, 0x0, 0x1f, 0xff, 0x80, 0x1f, 0xff, 0xc0, 0x1c, 0x3, 0xe0, 0x1c, 0x0, 0xe0, 0x1c, 0x0, 0xf0, 0x1c, 0x0, 0x70, 0x1c, 0x0, 0x70, 0x1c, 0x0, 0x38, 0x1c, 0x0, 0x38, 0x1c, 0x0, 0x38, 0xff, 0xc0, 0x38, 0xff, 0xc0, 0x38, 0x1c, 0x0, 0x38, 0x1c, 0x0, 0x38, 0x1c, 0x0, 0x38, 0x1c, 0x0, 0x78, 0x1c, 0x0, 0x70, 0x1c, 0x0, 0x70, 0x1c, 0x0, 0xf0, 0x1c, 0x0, 0xe0, 0x1c, 0x3, 0xc0, 0x1f, 0xff, 0xc0, 0x1f, 0xff, 0x80, 0x1f, 0xfe, 0x0}
+
+/* Ntilde (209) */
+#define NXFONT_METRICS_209 {3, 19, 30, 2, 7, 0}
+#define NXFONT_BITMAP_209 {0x1, 0xc6, 0x0, 0x3, 0xfe, 0x0, 0x7, 0xfc, 0x0, 0x6, 0x38, 0x0, 0x0, 0x0, 0x0, 0xf0, 0x0, 0xe0, 0xf8, 0x0, 0xe0, 0xf8, 0x0, 0xe0, 0xfc, 0x0, 0xe0, 0xfc, 0x0, 0xe0, 0xfe, 0x0, 0xe0, 0xef, 0x0, 0xe0, 0xe7, 0x0, 0xe0, 0xe7, 0x80, 0xe0, 0xe3, 0xc0, 0xe0, 0xe3, 0xc0, 0xe0, 0xe1, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xf0, 0xe0, 0xe0, 0x78, 0xe0, 0xe0, 0x38, 0xe0, 0xe0, 0x3c, 0xe0, 0xe0, 0x1c, 0xe0, 0xe0, 0x1e, 0xe0, 0xe0, 0xf, 0xe0, 0xe0, 0x7, 0xe0, 0xe0, 0x7, 0xe0, 0xe0, 0x3, 0xe0, 0xe0, 0x1, 0xe0, 0xe0, 0x1, 0xe0}
+
+/* Ograve (210) */
+#define NXFONT_METRICS_210 {3, 23, 31, 1, 6, 0}
+#define NXFONT_BITMAP_210 {0x0, 0xf0, 0x0, 0x0, 0x78, 0x0, 0x0, 0x38, 0x0, 0x0, 0x1c, 0x0, 0x0, 0xe, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe, 0x0, 0x3, 0xff, 0x80, 0xf, 0xff, 0xe0, 0x1f, 0x1, 0xf0, 0x3e, 0x0, 0xf8, 0x3c, 0x0, 0x78, 0x78, 0x0, 0x3c, 0x70, 0x0, 0x1c, 0x70, 0x0, 0x1c, 0xf0, 0x0, 0x1e, 0xe0, 0x0, 0xe, 0xe0, 0x0, 0xe, 0xe0, 0x0, 0xe, 0xe0, 0x0, 0xe, 0xe0, 0x0, 0xe, 0xf0, 0x0, 0x1e, 0xf0, 0x0, 0x1e, 0x70, 0x0, 0x1c, 0x78, 0x0, 0x3c, 0x3c, 0x0, 0x78, 0x3e, 0x0, 0xf8, 0x1f, 0x1, 0xf0, 0xf, 0xff, 0xe0, 0x3, 0xff, 0x80, 0x0, 0xfe, 0x0}
+
+/* Oacute (211) */
+#define NXFONT_METRICS_211 {3, 23, 31, 1, 6, 0}
+#define NXFONT_BITMAP_211 {0x0, 0xf, 0x0, 0x0, 0x1e, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x38, 0x0, 0x0, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe, 0x0, 0x3, 0xff, 0x80, 0xf, 0xff, 0xe0, 0x1f, 0x1, 0xf0, 0x3e, 0x0, 0xf8, 0x3c, 0x0, 0x78, 0x78, 0x0, 0x3c, 0x70, 0x0, 0x1c, 0x70, 0x0, 0x1c, 0xf0, 0x0, 0x1e, 0xe0, 0x0, 0xe, 0xe0, 0x0, 0xe, 0xe0, 0x0, 0xe, 0xe0, 0x0, 0xe, 0xe0, 0x0, 0xe, 0xf0, 0x0, 0x1e, 0xf0, 0x0, 0x1e, 0x70, 0x0, 0x1c, 0x78, 0x0, 0x3c, 0x3c, 0x0, 0x78, 0x3e, 0x0, 0xf8, 0x1f, 0x1, 0xf0, 0xf, 0xff, 0xe0, 0x3, 0xff, 0x80, 0x0, 0xfe, 0x0}
+
+/* Ocircumflex (212) */
+#define NXFONT_METRICS_212 {3, 23, 31, 1, 6, 0}
+#define NXFONT_BITMAP_212 {0x0, 0x10, 0x0, 0x0, 0x38, 0x0, 0x0, 0x7c, 0x0, 0x0, 0xee, 0x0, 0x1, 0xc7, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe, 0x0, 0x3, 0xff, 0x80, 0xf, 0xff, 0xe0, 0x1f, 0x1, 0xf0, 0x3e, 0x0, 0xf8, 0x3c, 0x0, 0x78, 0x78, 0x0, 0x3c, 0x70, 0x0, 0x1c, 0x70, 0x0, 0x1c, 0xf0, 0x0, 0x1e, 0xe0, 0x0, 0xe, 0xe0, 0x0, 0xe, 0xe0, 0x0, 0xe, 0xe0, 0x0, 0xe, 0xe0, 0x0, 0xe, 0xf0, 0x0, 0x1e, 0xf0, 0x0, 0x1e, 0x70, 0x0, 0x1c, 0x78, 0x0, 0x3c, 0x3c, 0x0, 0x78, 0x3e, 0x0, 0xf8, 0x1f, 0x1, 0xf0, 0xf, 0xff, 0xe0, 0x3, 0xff, 0x80, 0x0, 0xfe, 0x0}
+
+/* Otilde (213) */
+#define NXFONT_METRICS_213 {3, 23, 30, 1, 7, 0}
+#define NXFONT_BITMAP_213 {0x0, 0x71, 0x80, 0x0, 0xff, 0x80, 0x1, 0xff, 0x0, 0x1, 0x8e, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe, 0x0, 0x3, 0xff, 0x80, 0xf, 0xff, 0xe0, 0x1f, 0x1, 0xf0, 0x3e, 0x0, 0xf8, 0x3c, 0x0, 0x78, 0x78, 0x0, 0x3c, 0x70, 0x0, 0x1c, 0x70, 0x0, 0x1c, 0xf0, 0x0, 0x1e, 0xe0, 0x0, 0xe, 0xe0, 0x0, 0xe, 0xe0, 0x0, 0xe, 0xe0, 0x0, 0xe, 0xe0, 0x0, 0xe, 0xf0, 0x0, 0x1e, 0xf0, 0x0, 0x1e, 0x70, 0x0, 0x1c, 0x78, 0x0, 0x3c, 0x3c, 0x0, 0x78, 0x3e, 0x0, 0xf8, 0x1f, 0x1, 0xf0, 0xf, 0xff, 0xe0, 0x3, 0xff, 0x80, 0x0, 0xfe, 0x0}
+
+/* Odieresis (214) */
+#define NXFONT_METRICS_214 {3, 23, 29, 1, 8, 0}
+#define NXFONT_BITMAP_214 {0x1, 0xc3, 0x80, 0x1, 0xc3, 0x80, 0x1, 0xc3, 0x80, 0x0, 0x0, 0x0, 0x0, 0xfe, 0x0, 0x3, 0xff, 0x80, 0xf, 0xff, 0xe0, 0x1f, 0x1, 0xf0, 0x3e, 0x0, 0xf8, 0x3c, 0x0, 0x78, 0x78, 0x0, 0x3c, 0x70, 0x0, 0x1c, 0x70, 0x0, 0x1c, 0xf0, 0x0, 0x1e, 0xe0, 0x0, 0xe, 0xe0, 0x0, 0xe, 0xe0, 0x0, 0xe, 0xe0, 0x0, 0xe, 0xe0, 0x0, 0xe, 0xf0, 0x0, 0x1e, 0xf0, 0x0, 0x1e, 0x70, 0x0, 0x1c, 0x78, 0x0, 0x3c, 0x3c, 0x0, 0x78, 0x3e, 0x0, 0xf8, 0x1f, 0x1, 0xf0, 0xf, 0xff, 0xe0, 0x3, 0xff, 0x80, 0x0, 0xfe, 0x0}
+
+/* multiply (215) */
+#define NXFONT_METRICS_215 {2, 15, 15, 2, 21, 0}
+#define NXFONT_BITMAP_215 {0x40, 0x4, 0xe0, 0xe, 0xf0, 0x1e, 0x78, 0x3c, 0x3c, 0x78, 0x1f, 0xf0, 0xf, 0xe0, 0x7, 0xc0, 0x7, 0xc0, 0xf, 0xe0, 0x1e, 0xf0, 0x3c, 0x78, 0x78, 0x3c, 0xf0, 0x1e, 0x60, 0xc}
+
+/* Oslash (216) */
+#define NXFONT_METRICS_216 {3, 23, 25, 1, 12, 0}
+#define NXFONT_BITMAP_216 {0x0, 0xfe, 0x6, 0x3, 0xff, 0x8c, 0xf, 0xff, 0xf8, 0x1f, 0x1, 0xf0, 0x3e, 0x0, 0xf8, 0x3c, 0x0, 0xf8, 0x78, 0x1, 0xbc, 0x70, 0x3, 0x1c, 0x70, 0x6, 0x1c, 0xf0, 0x6, 0x1e, 0xe0, 0xc, 0xe, 0xe0, 0x18, 0xe, 0xe0, 0x30, 0xe, 0xe0, 0x60, 0xe, 0xe0, 0xc0, 0xe, 0xe1, 0x80, 0x1e, 0xf3, 0x0, 0x1e, 0x76, 0x0, 0x1c, 0x7c, 0x0, 0x3c, 0x3c, 0x0, 0x78, 0x3e, 0x0, 0xf8, 0x3f, 0x1, 0xf0, 0x6f, 0xff, 0xe0, 0xc3, 0xff, 0x80, 0x0, 0xfe, 0x0}
+
+/* Ugrave (217) */
+#define NXFONT_METRICS_217 {3, 18, 31, 3, 6, 0}
+#define NXFONT_BITMAP_217 {0x7, 0x80, 0x0, 0x3, 0xc0, 0x0, 0x1, 0xc0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0x70, 0x0, 0x0, 0x0, 0x0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xf0, 0x3, 0xc0, 0x78, 0x7, 0x80, 0x7c, 0xf, 0x80, 0x3f, 0xff, 0x0, 0x1f, 0xfe, 0x0, 0x3, 0xf0, 0x0}
+
+/* Uacute (218) */
+#define NXFONT_METRICS_218 {3, 18, 31, 3, 6, 0}
+#define NXFONT_BITMAP_218 {0x0, 0x78, 0x0, 0x0, 0xf0, 0x0, 0x0, 0xe0, 0x0, 0x1, 0xc0, 0x0, 0x3, 0x80, 0x0, 0x0, 0x0, 0x0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xf0, 0x3, 0xc0, 0x78, 0x7, 0x80, 0x7c, 0xf, 0x80, 0x3f, 0xff, 0x0, 0x1f, 0xfe, 0x0, 0x3, 0xf0, 0x0}
+
+/* Ucircumflex (219) */
+#define NXFONT_METRICS_219 {3, 18, 31, 3, 6, 0}
+#define NXFONT_BITMAP_219 {0x0, 0x40, 0x0, 0x0, 0xe0, 0x0, 0x1, 0xf0, 0x0, 0x3, 0xb8, 0x0, 0x7, 0x1c, 0x0, 0x0, 0x0, 0x0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xf0, 0x3, 0xc0, 0x78, 0x7, 0x80, 0x7c, 0xf, 0x80, 0x3f, 0xff, 0x0, 0x1f, 0xfe, 0x0, 0x3, 0xf0, 0x0}
+
+/* Udieresis (220) */
+#define NXFONT_METRICS_220 {3, 18, 30, 3, 7, 0}
+#define NXFONT_BITMAP_220 {0xe, 0x1c, 0x0, 0xe, 0x1c, 0x0, 0xe, 0x1c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xe0, 0x1, 0xc0, 0xf0, 0x3, 0xc0, 0x78, 0x7, 0x80, 0x7c, 0xf, 0x80, 0x3f, 0xff, 0x0, 0x1f, 0xfe, 0x0, 0x3, 0xf0, 0x0}
+
+/* Yacute (221) */
+#define NXFONT_METRICS_221 {3, 19, 31, 1, 6, 0}
+#define NXFONT_BITMAP_221 {0x0, 0x3c, 0x0, 0x0, 0x78, 0x0, 0x0, 0x70, 0x0, 0x0, 0xe0, 0x0, 0x1, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xe0, 0x0, 0xe0, 0xf0, 0x1, 0xe0, 0x70, 0x1, 0xc0, 0x78, 0x3, 0xc0, 0x38, 0x3, 0x80, 0x3c, 0x7, 0x80, 0x1c, 0xf, 0x0, 0x1e, 0xf, 0x0, 0xf, 0x1e, 0x0, 0x7, 0x1c, 0x0, 0x7, 0xbc, 0x0, 0x3, 0xb8, 0x0, 0x3, 0xf8, 0x0, 0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0}
+
+/* Thorn (222) */
+#define NXFONT_METRICS_222 {3, 17, 25, 3, 12, 0}
+#define NXFONT_BITMAP_222 {0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xff, 0xf8, 0x0, 0xff, 0xfe, 0x0, 0xff, 0xff, 0x0, 0xe0, 0xf, 0x0, 0xe0, 0x7, 0x0, 0xe0, 0x7, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x3, 0x80, 0xe0, 0x7, 0x80, 0xe0, 0x7, 0x0, 0xe0, 0xf, 0x0, 0xff, 0xfe, 0x0, 0xff, 0xfc, 0x0, 0xff, 0xf8, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0}
+
+/* germandbls (223) */
+#define NXFONT_METRICS_223 {2, 14, 25, 4, 12, 0}
+#define NXFONT_BITMAP_223 {0xf, 0x80, 0x3f, 0xe0, 0x7f, 0xf0, 0x78, 0xf0, 0xf0, 0x78, 0xe0, 0x38, 0xe0, 0x38, 0xe0, 0x38, 0xe0, 0x78, 0xe0, 0xf0, 0xe3, 0xe0, 0xe3, 0xe0, 0xe3, 0xf0, 0xe0, 0x78, 0xe0, 0x3c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x38, 0xe0, 0x78, 0xe7, 0xf0, 0xe7, 0xe0, 0xe7, 0x80}
+
+/* agrave (224) */
+#define NXFONT_METRICS_224 {2, 16, 25, 1, 12, 0}
+#define NXFONT_BITMAP_224 {0xf, 0x0, 0x7, 0x80, 0x3, 0x80, 0x1, 0xc0, 0x0, 0xe0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xe0, 0x3f, 0xf8, 0x3c, 0x7c, 0x70, 0x1c, 0x70, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0xfc, 0x1f, 0xfc, 0x7f, 0x9c, 0x78, 0x1c, 0xf0, 0x1c, 0xe0, 0x1c, 0xe0, 0x3c, 0xe0, 0x7c, 0x79, 0xfc, 0x7f, 0xdf, 0x3f, 0x8f}
+
+/* aacute (225) */
+#define NXFONT_METRICS_225 {2, 16, 25, 1, 12, 0}
+#define NXFONT_BITMAP_225 {0x0, 0xf0, 0x1, 0xe0, 0x1, 0xc0, 0x3, 0x80, 0x7, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xe0, 0x3f, 0xf8, 0x3c, 0x7c, 0x70, 0x1c, 0x70, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0xfc, 0x1f, 0xfc, 0x7f, 0x9c, 0x78, 0x1c, 0xf0, 0x1c, 0xe0, 0x1c, 0xe0, 0x3c, 0xe0, 0x7c, 0x78, 0xfc, 0x7f, 0xdf, 0x3f, 0x8f}
+
+/* acircumflex (226) */
+#define NXFONT_METRICS_226 {2, 16, 25, 1, 12, 0}
+#define NXFONT_BITMAP_226 {0x1, 0x0, 0x3, 0x80, 0x7, 0xc0, 0xe, 0xe0, 0x1c, 0x70, 0x0, 0x0, 0x0, 0x0, 0xf, 0xe0, 0x3f, 0xf8, 0x3c, 0x7c, 0x70, 0x1c, 0x70, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0xfc, 0x1f, 0xfc, 0x7f, 0x9c, 0x78, 0x1c, 0xf0, 0x1c, 0xe0, 0x1c, 0xe0, 0x3c, 0xe0, 0x7c, 0x78, 0xfc, 0x7f, 0xdf, 0x3f, 0x8f}
+
+/* atilde (227) */
+#define NXFONT_METRICS_227 {2, 16, 24, 1, 13, 0}
+#define NXFONT_BITMAP_227 {0x7, 0x18, 0xf, 0xf8, 0x1f, 0xf0, 0x18, 0xe0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xe0, 0x3f, 0xf8, 0x3c, 0x7c, 0x70, 0x1c, 0x70, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0xfc, 0x1f, 0xfc, 0x7f, 0x9c, 0x78, 0x1c, 0xf0, 0x1c, 0xe0, 0x1c, 0xe0, 0x3c, 0xe0, 0x7c, 0x78, 0xfc, 0x7f, 0xdf, 0x3f, 0x8f}
+
+/* adieresis (228) */
+#define NXFONT_METRICS_228 {2, 16, 23, 1, 14, 0}
+#define NXFONT_BITMAP_228 {0xe, 0x70, 0xe, 0x70, 0xe, 0x70, 0x0, 0x0, 0x0, 0x0, 0xf, 0xe0, 0x3f, 0xf8, 0x3c, 0xfc, 0x70, 0x1c, 0x70, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0xfc, 0x1f, 0xfc, 0x7f, 0x9c, 0x78, 0x1c, 0xf0, 0x1c, 0xe0, 0x1c, 0xe0, 0x3c, 0xe0, 0x7c, 0x79, 0xfc, 0x7f, 0xdf, 0x3f, 0x8f}
+
+/* aring (229) */
+#define NXFONT_METRICS_229 {2, 16, 25, 1, 12, 0}
+#define NXFONT_BITMAP_229 {0x3, 0x80, 0x6, 0xc0, 0x4, 0x40, 0x4, 0x40, 0x6, 0xc0, 0x3, 0x80, 0x0, 0x0, 0xf, 0xe0, 0x3f, 0xf8, 0x3c, 0x7c, 0x70, 0x1c, 0x70, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0xfc, 0x1f, 0xfc, 0x7f, 0x9c, 0x78, 0x1c, 0xf0, 0x1c, 0xe0, 0x1c, 0xe0, 0x3c, 0xe0, 0x7c, 0x78, 0xfc, 0x7f, 0xdf, 0x3f, 0x8f}
+
+/* ae (230) */
+#define NXFONT_METRICS_230 {4, 26, 18, 1, 19, 0}
+#define NXFONT_BITMAP_230 {0x7, 0xc0, 0xf8, 0x0, 0x1f, 0xf1, 0xfe, 0x0, 0x3c, 0x7f, 0x8f, 0x0, 0x70, 0x3e, 0x3, 0x80, 0x70, 0x1e, 0x3, 0x80, 0x0, 0x1c, 0x1, 0xc0, 0x0, 0x1c, 0x1, 0xc0, 0x0, 0xfc, 0x1, 0xc0, 0xf, 0xff, 0xff, 0xc0, 0x3f, 0xff, 0xff, 0xc0, 0x7e, 0x1f, 0xff, 0xc0, 0xf0, 0x1c, 0x0, 0x0, 0xe0, 0x1c, 0x1, 0xc0, 0xe0, 0x1e, 0x1, 0xc0, 0xe0, 0x7e, 0x3, 0x80, 0xf8, 0xf7, 0x8f, 0x0, 0x7f, 0xe7, 0xff, 0x0, 0x3f, 0x81, 0xfc, 0x0}
+
+/* ccedilla (231) */
+#define NXFONT_METRICS_231 {2, 14, 25, 1, 19, 0}
+#define NXFONT_BITMAP_231 {0x7, 0xc0, 0x1f, 0xf0, 0x3f, 0xf8, 0x38, 0x38, 0x70, 0x1c, 0x70, 0x1c, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x1c, 0xe0, 0x1c, 0x70, 0x38, 0x78, 0x78, 0x3f, 0xf0, 0x1f, 0xe0, 0x7, 0x80, 0x3, 0x0, 0x3, 0x0, 0x7, 0x80, 0x1, 0xc0, 0x0, 0xc0, 0x19, 0xc0, 0xf, 0x80}
+
+/* egrave (232) */
+#define NXFONT_METRICS_232 {2, 15, 25, 1, 12, 0}
+#define NXFONT_BITMAP_232 {0x1e, 0x0, 0xf, 0x0, 0x7, 0x0, 0x3, 0x80, 0x1, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xc0, 0x1f, 0xf0, 0x3e, 0x78, 0x78, 0x1c, 0x70, 0x1c, 0xf0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xff, 0xfe, 0xff, 0xfe, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0xe, 0x70, 0xe, 0x78, 0x1c, 0x3c, 0x7c, 0x1f, 0xf0, 0xf, 0xe0}
+
+/* eacute (233) */
+#define NXFONT_METRICS_233 {2, 15, 25, 1, 12, 0}
+#define NXFONT_BITMAP_233 {0x1, 0xe0, 0x3, 0xc0, 0x3, 0x80, 0x7, 0x0, 0xe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xc0, 0x1f, 0xf0, 0x3c, 0x78, 0x78, 0x1c, 0x70, 0x1c, 0xf0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xff, 0xfe, 0xff, 0xfe, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0xe, 0x70, 0xe, 0x78, 0x1c, 0x3c, 0x7c, 0x1f, 0xf0, 0xf, 0xe0}
+
+/* ecircumflex (234) */
+#define NXFONT_METRICS_234 {2, 15, 25, 1, 12, 0}
+#define NXFONT_BITMAP_234 {0x1, 0x0, 0x3, 0x80, 0x7, 0xc0, 0xe, 0xe0, 0x1c, 0x70, 0x0, 0x0, 0x0, 0x0, 0x7, 0xc0, 0x1f, 0xf0, 0x3c, 0x78, 0x78, 0x1c, 0x70, 0x1c, 0xf0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xff, 0xfe, 0xff, 0xfe, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0xe, 0x70, 0xe, 0x78, 0x1c, 0x3c, 0x7c, 0x1f, 0xf0, 0x7, 0xc0}
+
+/* edieresis (235) */
+#define NXFONT_METRICS_235 {2, 15, 23, 1, 14, 0}
+#define NXFONT_BITMAP_235 {0x1c, 0x70, 0x1c, 0x70, 0x1c, 0x70, 0x0, 0x0, 0x0, 0x0, 0x7, 0xc0, 0x1f, 0xf0, 0x3c, 0x78, 0x78, 0x1c, 0x70, 0x1c, 0xf0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xff, 0xfe, 0xff, 0xfe, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0xe, 0x70, 0xe, 0x78, 0x1c, 0x3c, 0x7c, 0x1f, 0xf0, 0x7, 0xc0}
+
+/* igrave (236) */
+#define NXFONT_METRICS_236 {1, 7, 25, 0, 12, 0}
+#define NXFONT_BITMAP_236 {0xf0, 0x78, 0x38, 0x1c, 0xe, 0x0, 0x0, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}
+
+/* iacute (237) */
+#define NXFONT_METRICS_237 {1, 7, 25, 2, 12, 0}
+#define NXFONT_BITMAP_237 {0x1e, 0x3c, 0x38, 0x70, 0xe0, 0x0, 0x0, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70}
+
+/* icircumflex (238) */
+#define NXFONT_METRICS_238 {2, 9, 25, 0, 12, 0}
+#define NXFONT_BITMAP_238 {0x8, 0x0, 0x1c, 0x0, 0x3e, 0x0, 0x77, 0x0, 0xe3, 0x80, 0x0, 0x0, 0x0, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0}
+
+/* idieresis (239) */
+#define NXFONT_METRICS_239 {1, 8, 23, 1, 14, 0}
+#define NXFONT_BITMAP_239 {0xe7, 0xe7, 0xe7, 0x0, 0x0, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38}
+
+/* eth (240) */
+#define NXFONT_METRICS_240 {2, 15, 25, 1, 12, 0}
+#define NXFONT_BITMAP_240 {0x78, 0x40, 0x3c, 0xe0, 0x1f, 0xc0, 0xf, 0x80, 0x1f, 0x80, 0x3b, 0xc0, 0x11, 0xe0, 0x7, 0xf0, 0x1f, 0xf8, 0x3f, 0xf8, 0x78, 0x3c, 0x70, 0x1c, 0x70, 0x1c, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0x70, 0x1c, 0x70, 0x1c, 0x78, 0x3c, 0x3f, 0xf8, 0x1f, 0xf0, 0x7, 0xc0}
+
+/* ntilde (241) */
+#define NXFONT_METRICS_241 {2, 14, 24, 2, 13, 0}
+#define NXFONT_BITMAP_241 {0xe, 0x30, 0x1f, 0xf0, 0x3f, 0xe0, 0x31, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xc0, 0xef, 0xf0, 0xff, 0xf8, 0xf8, 0x3c, 0xf0, 0x1c, 0xf0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c}
+
+/* ograve (242) */
+#define NXFONT_METRICS_242 {2, 15, 25, 1, 12, 0}
+#define NXFONT_BITMAP_242 {0x1e, 0x0, 0xf, 0x0, 0x7, 0x0, 0x3, 0x80, 0x1, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xc0, 0x1f, 0xf0, 0x3f, 0xf8, 0x78, 0x3c, 0x70, 0x1c, 0x70, 0x1c, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0x70, 0x1c, 0x70, 0x1c, 0x78, 0x3c, 0x3f, 0xf8, 0x1f, 0xf0, 0x7, 0xc0}
+
+/* oacute (243) */
+#define NXFONT_METRICS_243 {2, 15, 25, 1, 12, 0}
+#define NXFONT_BITMAP_243 {0x1, 0xe0, 0x3, 0xc0, 0x3, 0x80, 0x7, 0x0, 0xe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xc0, 0x1f, 0xf0, 0x3f, 0xf8, 0x78, 0x3c, 0x70, 0x1c, 0x70, 0x1c, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0x70, 0x1c, 0x70, 0x1c, 0x78, 0x3c, 0x3f, 0xf8, 0x1f, 0xf0, 0x7, 0xc0}
+
+/* ocircumflex (244) */
+#define NXFONT_METRICS_244 {2, 15, 25, 1, 12, 0}
+#define NXFONT_BITMAP_244 {0x1, 0x0, 0x3, 0x80, 0x7, 0xc0, 0xe, 0xe0, 0x1c, 0x70, 0x0, 0x0, 0x0, 0x0, 0x7, 0xc0, 0x1f, 0xf0, 0x3f, 0xf8, 0x78, 0x3c, 0x70, 0x1c, 0x70, 0x1c, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0x70, 0x1c, 0x70, 0x1c, 0x78, 0x3c, 0x3f, 0xf8, 0x1f, 0xf0, 0x7, 0xc0}
+
+/* otilde (245) */
+#define NXFONT_METRICS_245 {2, 15, 24, 1, 13, 0}
+#define NXFONT_BITMAP_245 {0xe, 0x30, 0x1f, 0xf0, 0x3f, 0xe0, 0x31, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xc0, 0x1f, 0xf0, 0x3f, 0xf8, 0x78, 0x3c, 0x70, 0x1c, 0x70, 0x1c, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0x70, 0x1c, 0x70, 0x1c, 0x78, 0x3c, 0x3f, 0xf8, 0x1f, 0xf0, 0x7, 0xc0}
+
+/* odieresis (246) */
+#define NXFONT_METRICS_246 {2, 15, 23, 1, 14, 0}
+#define NXFONT_BITMAP_246 {0x1c, 0x70, 0x1c, 0x70, 0x1c, 0x70, 0x0, 0x0, 0x0, 0x0, 0x7, 0xc0, 0x1f, 0xf0, 0x3f, 0xf8, 0x78, 0x3c, 0x70, 0x1c, 0x70, 0x1c, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0x70, 0x1c, 0x70, 0x1c, 0x78, 0x3c, 0x3f, 0xf8, 0x1f, 0xf0, 0x7, 0xc0}
+
+/* divide (247) */
+#define NXFONT_METRICS_247 {2, 15, 15, 2, 21, 0}
+#define NXFONT_BITMAP_247 {0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80}
+
+/* oslash (248) */
+#define NXFONT_METRICS_248 {2, 16, 18, 2, 19, 0}
+#define NXFONT_BITMAP_248 {0x7, 0xc3, 0x1f, 0xf6, 0x3f, 0xfc, 0x78, 0x78, 0x70, 0x1c, 0x70, 0x3c, 0xe0, 0x6e, 0xe0, 0xce, 0xe1, 0x8e, 0xe3, 0xe, 0xe6, 0xe, 0xec, 0xe, 0x78, 0x1c, 0x70, 0x1c, 0x38, 0x3c, 0x7f, 0xf8, 0xdf, 0xf0, 0x87, 0xc0}
+
+/* ugrave (249) */
+#define NXFONT_METRICS_249 {2, 14, 25, 2, 12, 0}
+#define NXFONT_BITMAP_249 {0x1e, 0x0, 0xf, 0x0, 0x7, 0x0, 0x3, 0x80, 0x1, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x3c, 0xe0, 0x3c, 0xf0, 0xfc, 0x7f, 0xfc, 0x3f, 0xdc, 0xf, 0x0}
+
+/* uacute (250) */
+#define NXFONT_METRICS_250 {2, 14, 25, 2, 12, 0}
+#define NXFONT_BITMAP_250 {0x1, 0xe0, 0x3, 0xc0, 0x3, 0x80, 0x7, 0x0, 0xe, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x3c, 0xe0, 0x3c, 0xf0, 0xfc, 0x7f, 0xfc, 0x3f, 0xdc, 0xf, 0x0}
+
+/* ucircumflex (251) */
+#define NXFONT_METRICS_251 {2, 14, 25, 2, 12, 0}
+#define NXFONT_BITMAP_251 {0x1, 0x0, 0x3, 0x80, 0x7, 0xc0, 0xe, 0xe0, 0x1c, 0x70, 0x0, 0x0, 0x0, 0x0, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x3c, 0xe0, 0x3c, 0xf0, 0xfc, 0x7f, 0xfc, 0x3f, 0xdc, 0xf, 0x0}
+
+/* udieresis (252) */
+#define NXFONT_METRICS_252 {2, 14, 23, 2, 14, 0}
+#define NXFONT_BITMAP_252 {0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x0, 0x0, 0x0, 0x0, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x3c, 0xe0, 0x3c, 0xf0, 0xfc, 0x7f, 0xfc, 0x3f, 0xdc, 0xf, 0x0}
+
+/* yacute (253) */
+#define NXFONT_METRICS_253 {2, 14, 32, 1, 12, 0}
+#define NXFONT_BITMAP_253 {0x0, 0xf0, 0x1, 0xe0, 0x1, 0xc0, 0x3, 0x80, 0x7, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x3c, 0x70, 0x38, 0x70, 0x38, 0x70, 0x38, 0x78, 0x70, 0x38, 0x70, 0x38, 0xf0, 0x3c, 0xe0, 0x1c, 0xe0, 0x1d, 0xc0, 0x1d, 0xc0, 0xf, 0xc0, 0xf, 0x80, 0xf, 0x80, 0x7, 0x0, 0x7, 0x0, 0x7, 0x0, 0xe, 0x0, 0xe, 0x0, 0x1e, 0x0, 0x7c, 0x0, 0x7c, 0x0, 0x70, 0x0}
+
+/* thorn (254) */
+#define NXFONT_METRICS_254 {2, 15, 31, 2, 12, 0}
+#define NXFONT_BITMAP_254 {0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe7, 0xe0, 0xef, 0xf0, 0xff, 0xf8, 0xf8, 0x3c, 0xf0, 0x1c, 0xf0, 0x1e, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xe0, 0xe, 0xf0, 0x1c, 0xf0, 0x1c, 0xf8, 0x3c, 0xff, 0xf8, 0xef, 0xf0, 0xe3, 0xc0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0}
+
+/* ydieresis (255) */
+#define NXFONT_METRICS_255 {2, 14, 30, 1, 14, 0}
+#define NXFONT_BITMAP_255 {0x1c, 0x70, 0x1c, 0x70, 0x1c, 0x70, 0x0, 0x0, 0x0, 0x0, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x3c, 0x70, 0x38, 0x70, 0x38, 0x70, 0x78, 0x78, 0x70, 0x38, 0x70, 0x38, 0xf0, 0x3c, 0xe0, 0x1c, 0xe0, 0x1d, 0xc0, 0x1d, 0xc0, 0xf, 0xc0, 0xf, 0x80, 0xf, 0x80, 0x7, 0x0, 0x7, 0x0, 0x7, 0x0, 0xe, 0x0, 0xe, 0x0, 0x1e, 0x0, 0x7c, 0x0, 0x7c, 0x0, 0x70, 0x0}
+
+/****************************************************************************
+ * Public Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+#define EXTERN extern "C"
+extern "C" {
+#else
+#define EXTERN extern
+#endif
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* __GRAPHICS_NXFONTS_NXFONTS_SERIF39X48_H */
diff --git a/nuttx/graphics/nxfonts/nxfonts_sans40x49b.h b/nuttx/graphics/nxfonts/nxfonts_sans40x49b.h
new file mode 100755
index 000000000..d7a5e19ab
--- /dev/null
+++ b/nuttx/graphics/nxfonts/nxfonts_sans40x49b.h
@@ -0,0 +1,849 @@
+/****************************************************************************
+ * graphics/nxfonts/nxfonts_sans40x49b.h
+ *
+ * Copyright (C) 2011-2012 NX Engineering, S.A., All rights reserved.
+ * Author: Jose Pablo Carballo Gomez <jcarballo@nx-engineering.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT}
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING}
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+#ifndef __GRAPHICS_NXFONTS_NXFONTS_SANS40X49B_H
+#define __GRAPHICS_NXFONTS_NXFONTS_SANS40X49B_H
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/* Font ID */
+
+#define NXFONT_ID FONTID_SANS40X49B
+
+/* Ranges of 7-bit and 8-bit fonts */
+
+#define NXFONT_MIN7BIT 33
+#define NXFONT_MAX7BIT 126
+
+#define NXFONT_MIN8BIT 161
+#define NXFONT_MAX8BIT 255
+
+/* Maximum height and width of any glyph in the set */
+
+#define NXFONT_MAXHEIGHT 49
+#define NXFONT_MAXWIDTH 40
+
+/* The width of a space */
+
+#define NXFONT_SPACEWIDTH 9
+
+/* exclam (33) */
+#define NXFONT_METRICS_33 {1, 5, 25, 3, 12, 0}
+#define NXFONT_BITMAP_33 {0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x0, 0x0, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8}
+
+/* quotedbl (34) */
+#define NXFONT_METRICS_34 {2, 11, 9, 2, 12, 0}
+#define NXFONT_BITMAP_34 {0xf1, 0xe0, 0xf1, 0xe0, 0xf1, 0xe0, 0xf1, 0xe0, 0xf1, 0xe0, 0xf1, 0xe0, 0xf1, 0xe0, 0x60, 0xc0, 0x60, 0xc0}
+
+/* numbersign (35) */
+#define NXFONT_METRICS_35 {3, 18, 25, 0, 13, 0}
+#define NXFONT_BITMAP_35 {0x3, 0xc7, 0x0, 0x3, 0xc7, 0x0, 0x3, 0x8f, 0x0, 0x3, 0x8f, 0x0, 0x7, 0x8f, 0x0, 0x7, 0x8e, 0x0, 0x7, 0x8e, 0x0, 0x7f, 0xff, 0xc0, 0x7f, 0xff, 0xc0, 0x7f, 0xff, 0xc0, 0x7f, 0xff, 0xc0, 0xf, 0x1c, 0x0, 0xe, 0x1c, 0x0, 0xe, 0x1c, 0x0, 0xe, 0x3c, 0x0, 0xff, 0xff, 0x80, 0xff, 0xff, 0x80, 0xff, 0xff, 0x80, 0xff, 0xff, 0x80, 0x1c, 0x78, 0x0, 0x3c, 0x78, 0x0, 0x3c, 0x70, 0x0, 0x3c, 0x70, 0x0, 0x38, 0xf0, 0x0, 0x38, 0xf0, 0x0}
+
+/* dollar (36) */
+#define NXFONT_METRICS_36 {2, 16, 28, 1, 12, 0}
+#define NXFONT_BITMAP_36 {0x1, 0x80, 0x1, 0x80, 0xf, 0xf0, 0x3f, 0xfc, 0x7f, 0xfe, 0xfd, 0xbe, 0xf9, 0x9f, 0xf1, 0x9f, 0xf1, 0x8f, 0xf9, 0x80, 0xff, 0x80, 0x7f, 0xc0, 0x3f, 0xf0, 0xf, 0xfc, 0x1, 0xfe, 0x1, 0xff, 0x1, 0x9f, 0x1, 0x8f, 0xf1, 0x8f, 0xf1, 0x9f, 0xf9, 0x9f, 0x7f, 0xfe, 0x7f, 0xfe, 0x3f, 0xf8, 0x7, 0xe0, 0x1, 0x80, 0x1, 0x80, 0x1, 0x80}
+
+/* percent (37) */
+#define NXFONT_METRICS_37 {4, 26, 23, 1, 14, 0}
+#define NXFONT_BITMAP_37 {0xe, 0x0, 0x30, 0x0, 0x3f, 0x80, 0x70, 0x0, 0x7f, 0xc0, 0x60, 0x0, 0x71, 0xc0, 0xe0, 0x0, 0xe0, 0xe0, 0xc0, 0x0, 0xe0, 0xe1, 0xc0, 0x0, 0xe0, 0xe3, 0x80, 0x0, 0xe0, 0xe3, 0x80, 0x0, 0x71, 0xc7, 0x0, 0x0, 0x7f, 0xc6, 0x0, 0x0, 0x3f, 0x8e, 0x0, 0x0, 0xe, 0xc, 0x1c, 0x0, 0x0, 0x1c, 0x7f, 0x0, 0x0, 0x18, 0xff, 0x80, 0x0, 0x38, 0xe3, 0x80, 0x0, 0x31, 0xc1, 0xc0, 0x0, 0x71, 0xc1, 0xc0, 0x0, 0x61, 0xc1, 0xc0, 0x0, 0xe1, 0xc1, 0xc0, 0x1, 0xc0, 0xe3, 0x80, 0x1, 0xc0, 0xff, 0x80, 0x3, 0x80, 0x7f, 0x0, 0x3, 0x0, 0x1c, 0x0}
+
+/* ampersand (38) */
+#define NXFONT_METRICS_38 {3, 20, 25, 2, 12, 0}
+#define NXFONT_BITMAP_38 {0x3, 0xe0, 0x0, 0xf, 0xf8, 0x0, 0x1f, 0xfc, 0x0, 0x1f, 0xfc, 0x0, 0x1e, 0x3c, 0x0, 0x3e, 0x3c, 0x0, 0x3e, 0x3c, 0x0, 0x1f, 0x3c, 0x0, 0x1f, 0xf8, 0x0, 0xf, 0xf8, 0x0, 0xf, 0xf0, 0x0, 0xf, 0xe0, 0x0, 0x3f, 0xf1, 0xe0, 0x7f, 0xf1, 0xe0, 0x7c, 0xf9, 0xc0, 0xf8, 0xff, 0xc0, 0xf0, 0x7f, 0xc0, 0xf0, 0x3f, 0x80, 0xf0, 0x1f, 0x0, 0xf8, 0xf, 0x80, 0xfc, 0x3f, 0xc0, 0x7f, 0xff, 0xe0, 0x7f, 0xfb, 0xe0, 0x1f, 0xf1, 0xf0, 0x7, 0xc0, 0x0}
+
+/* quotesingle (39) */
+#define NXFONT_METRICS_39 {1, 4, 9, 2, 12, 0}
+#define NXFONT_BITMAP_39 {0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0x60, 0x60}
+
+/* parenleft (40) */
+#define NXFONT_METRICS_40 {1, 8, 31, 1, 12, 0}
+#define NXFONT_BITMAP_40 {0x7, 0xf, 0x1e, 0x1e, 0x3c, 0x3c, 0x38, 0x78, 0x78, 0x78, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf8, 0x78, 0x78, 0x78, 0x78, 0x3c, 0x3c, 0x1c, 0x1e, 0xe, 0xf, 0x7}
+
+/* parenright (41) */
+#define NXFONT_METRICS_41 {1, 8, 31, 1, 12, 0}
+#define NXFONT_BITMAP_41 {0xe0, 0xf0, 0x78, 0x78, 0x3c, 0x3c, 0x1c, 0x1e, 0x1e, 0x1e, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x1f, 0x1e, 0x1e, 0x1e, 0x1c, 0x3c, 0x3c, 0x38, 0x78, 0x70, 0xf0, 0xe0}
+
+/* asterisk (42) */
+#define NXFONT_METRICS_42 {2, 10, 11, 1, 13, 0}
+#define NXFONT_BITMAP_42 {0xc, 0x0, 0xc, 0x0, 0x4c, 0x80, 0xed, 0xc0, 0xff, 0xc0, 0x7f, 0x80, 0x1e, 0x0, 0x3f, 0x0, 0x7f, 0x80, 0x73, 0x80, 0x21, 0x0}
+
+/* plus (43) */
+#define NXFONT_METRICS_43 {2, 16, 16, 1, 21, 0}
+#define NXFONT_BITMAP_43 {0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0}
+
+/* comma (44) */
+#define NXFONT_METRICS_44 {1, 5, 11, 2, 32, 0}
+#define NXFONT_BITMAP_44 {0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0x18, 0x18, 0x38, 0x70, 0xe0, 0x80}
+
+/* hyphen (45) */
+#define NXFONT_METRICS_45 {2, 9, 5, 1, 25, 0}
+#define NXFONT_BITMAP_45 {0xff, 0x80, 0xff, 0x80, 0xff, 0x80, 0xff, 0x80, 0xff, 0x80}
+
+/* period (46) */
+#define NXFONT_METRICS_46 {1, 5, 5, 2, 32, 0}
+#define NXFONT_BITMAP_46 {0xf8, 0xf8, 0xf8, 0xf8, 0xf8}
+
+/* slash (47) */
+#define NXFONT_METRICS_47 {1, 8, 25, 0, 12, 0}
+#define NXFONT_BITMAP_47 {0x3, 0x3, 0x3, 0x3, 0x6, 0x6, 0x6, 0xe, 0xc, 0xc, 0xc, 0x1c, 0x18, 0x18, 0x18, 0x30, 0x30, 0x30, 0x70, 0x60, 0x60, 0x60, 0xc0, 0xc0, 0xc0}
+
+/* zero (48) */
+#define NXFONT_METRICS_48 {2, 15, 24, 1, 13, 0}
+#define NXFONT_BITMAP_48 {0xf, 0xe0, 0x1f, 0xf0, 0x3f, 0xf8, 0x7f, 0xfc, 0x7c, 0x7c, 0xf8, 0x3e, 0xf8, 0x3e, 0xf8, 0x3e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf8, 0x3e, 0xf8, 0x3e, 0xf8, 0x3e, 0x7c, 0x7c, 0x7f, 0xfc, 0x3f, 0xf8, 0x1f, 0xf0, 0xf, 0xe0}
+
+/* one (49) */
+#define NXFONT_METRICS_49 {2, 10, 23, 2, 14, 0}
+#define NXFONT_BITMAP_49 {0x1, 0xc0, 0x3, 0xc0, 0x7, 0xc0, 0x1f, 0xc0, 0xff, 0xc0, 0xff, 0xc0, 0xff, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0}
+
+/* two (50) */
+#define NXFONT_METRICS_50 {2, 16, 24, 1, 13, 0}
+#define NXFONT_BITMAP_50 {0xf, 0xe0, 0x3f, 0xf8, 0x7f, 0xfc, 0x7f, 0xfe, 0xfc, 0x7e, 0xf8, 0x3f, 0xf8, 0x1f, 0xf0, 0x1f, 0xf0, 0x1f, 0x0, 0x3f, 0x0, 0x3e, 0x0, 0x7e, 0x0, 0xfc, 0x1, 0xf8, 0x7, 0xf0, 0xf, 0xe0, 0x1f, 0x80, 0x3f, 0x0, 0x7e, 0x0, 0xfc, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}
+
+/* three (51) */
+#define NXFONT_METRICS_51 {2, 16, 24, 1, 13, 0}
+#define NXFONT_BITMAP_51 {0xf, 0xe0, 0x3f, 0xf8, 0x7f, 0xfc, 0x7f, 0xfc, 0xf8, 0x3e, 0xf0, 0x3e, 0xf0, 0x1e, 0xf0, 0x1e, 0x0, 0x3e, 0x0, 0x7c, 0x3, 0xf8, 0x3, 0xf0, 0x3, 0xfc, 0x0, 0x7e, 0x0, 0x3f, 0x0, 0x1f, 0xf0, 0x1f, 0xf0, 0x1f, 0xf0, 0x3f, 0xf8, 0x3e, 0x7f, 0xfe, 0x7f, 0xfc, 0x3f, 0xf8, 0xf, 0xe0}
+
+/* four (52) */
+#define NXFONT_METRICS_52 {2, 16, 24, 1, 13, 0}
+#define NXFONT_BITMAP_52 {0x0, 0xf8, 0x0, 0xf8, 0x1, 0xf8, 0x3, 0xf8, 0x3, 0xf8, 0x7, 0xf8, 0xf, 0x78, 0xe, 0x78, 0x1e, 0x78, 0x1c, 0x78, 0x3c, 0x78, 0x78, 0x78, 0x70, 0x78, 0xf0, 0x78, 0xe0, 0x78, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x78, 0x0, 0x78, 0x0, 0x78, 0x0, 0x78, 0x0, 0x78}
+
+/* five (53) */
+#define NXFONT_METRICS_53 {2, 15, 24, 1, 13, 0}
+#define NXFONT_BITMAP_53 {0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x38, 0x0, 0x78, 0x0, 0x78, 0x0, 0x78, 0x0, 0x7b, 0xe0, 0x7f, 0xf8, 0x7f, 0xfc, 0x7f, 0xfc, 0x78, 0x7e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x1e, 0x0, 0x1e, 0xf0, 0x3e, 0xf0, 0x3e, 0xf8, 0x7c, 0x7f, 0xfc, 0x7f, 0xf8, 0x3f, 0xf0, 0xf, 0xc0}
+
+/* six (54) */
+#define NXFONT_METRICS_54 {2, 15, 24, 1, 13, 0}
+#define NXFONT_BITMAP_54 {0x7, 0xe0, 0x1f, 0xf8, 0x3f, 0xfc, 0x3f, 0xfe, 0x7c, 0x3e, 0x78, 0x1e, 0xf0, 0x0, 0xf0, 0x0, 0xf3, 0xe0, 0xf7, 0xf8, 0xff, 0xfc, 0xff, 0xfc, 0xfc, 0x7e, 0xf8, 0x3e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf8, 0x3e, 0x7c, 0x7c, 0x7f, 0xfc, 0x3f, 0xf8, 0x1f, 0xf0, 0x7, 0xc0}
+
+/* seven (55) */
+#define NXFONT_METRICS_55 {2, 16, 24, 1, 13, 0}
+#define NXFONT_BITMAP_55 {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x1e, 0x0, 0x3e, 0x0, 0x3c, 0x0, 0x78, 0x0, 0xf8, 0x0, 0xf0, 0x1, 0xf0, 0x1, 0xe0, 0x3, 0xe0, 0x3, 0xc0, 0x7, 0xc0, 0x7, 0xc0, 0x7, 0x80, 0xf, 0x80, 0xf, 0x80, 0xf, 0x80, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0}
+
+/* eight (56) */
+#define NXFONT_METRICS_56 {3, 17, 24, 0, 13, 0}
+#define NXFONT_BITMAP_56 {0x7, 0xf0, 0x0, 0x1f, 0xfc, 0x0, 0x3f, 0xfe, 0x0, 0x3e, 0x3e, 0x0, 0x7c, 0x1f, 0x0, 0x78, 0xf, 0x0, 0x78, 0xf, 0x0, 0x78, 0xf, 0x0, 0x7c, 0x1f, 0x0, 0x3e, 0x3e, 0x0, 0x1f, 0xfc, 0x0, 0x1f, 0xfc, 0x0, 0x3f, 0xfe, 0x0, 0x7c, 0x1f, 0x0, 0xf8, 0xf, 0x80, 0xf0, 0x7, 0x80, 0xf0, 0x7, 0x80, 0xf0, 0x7, 0x80, 0xf8, 0xf, 0x80, 0x7e, 0x3f, 0x0, 0x7f, 0xfe, 0x0, 0x3f, 0xfe, 0x0, 0x1f, 0xfc, 0x0, 0x7, 0xf0, 0x0}
+
+/* nine (57) */
+#define NXFONT_METRICS_57 {2, 15, 24, 1, 13, 0}
+#define NXFONT_BITMAP_57 {0x7, 0xc0, 0x1f, 0xf0, 0x3f, 0xf8, 0x7f, 0xfc, 0x7c, 0x7c, 0xf8, 0x3e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf8, 0x3e, 0xfc, 0x7e, 0x7f, 0xfe, 0x7f, 0xfe, 0x3f, 0xde, 0x7, 0x9e, 0x0, 0x1e, 0x0, 0x1e, 0xf0, 0x3c, 0xf8, 0x7c, 0x7f, 0xf8, 0x7f, 0xf8, 0x1f, 0xf0, 0x7, 0xc0}
+
+/* colon (58) */
+#define NXFONT_METRICS_58 {1, 5, 17, 3, 20, 0}
+#define NXFONT_BITMAP_58 {0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8}
+
+/* semicolon (59) */
+#define NXFONT_METRICS_59 {1, 5, 23, 3, 20, 0}
+#define NXFONT_BITMAP_59 {0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0x18, 0x18, 0x38, 0x70, 0xe0, 0x80}
+
+/* less (60) */
+#define NXFONT_METRICS_60 {2, 16, 16, 1, 21, 0}
+#define NXFONT_BITMAP_60 {0x0, 0x3, 0x0, 0x1f, 0x0, 0x7f, 0x3, 0xff, 0xf, 0xfe, 0x7f, 0xf8, 0xff, 0xc0, 0xfe, 0x0, 0xfe, 0x0, 0xff, 0xc0, 0x7f, 0xf0, 0xf, 0xfe, 0x3, 0xff, 0x0, 0x7f, 0x0, 0x1f, 0x0, 0x3}
+
+/* equal (61) */
+#define NXFONT_METRICS_61 {2, 15, 12, 2, 23, 0}
+#define NXFONT_BITMAP_61 {0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe}
+
+/* greater (62) */
+#define NXFONT_METRICS_62 {2, 16, 16, 1, 21, 0}
+#define NXFONT_BITMAP_62 {0xc0, 0x0, 0xf0, 0x0, 0xfe, 0x0, 0xff, 0xc0, 0x7f, 0xf0, 0x1f, 0xfe, 0x3, 0xff, 0x0, 0x7f, 0x0, 0x7f, 0x3, 0xff, 0x1f, 0xfe, 0x7f, 0xf0, 0xff, 0xc0, 0xfe, 0x0, 0xf0, 0x0, 0xc0, 0x0}
+
+/* question (63) */
+#define NXFONT_METRICS_63 {2, 16, 25, 2, 12, 0}
+#define NXFONT_BITMAP_63 {0xf, 0xe0, 0x3f, 0xf8, 0x7f, 0xfc, 0x7f, 0xfe, 0xfc, 0x7e, 0xf8, 0x3f, 0xf8, 0x1f, 0xf0, 0x1f, 0xf0, 0x1f, 0x0, 0x3f, 0x0, 0x7e, 0x0, 0xfe, 0x1, 0xfc, 0x1, 0xf8, 0x3, 0xe0, 0x3, 0xc0, 0x7, 0xc0, 0x7, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xc0, 0x7, 0xc0, 0x7, 0xc0, 0x7, 0xc0, 0x7, 0xc0}
+
+/* at (64) */
+#define NXFONT_METRICS_64 {4, 29, 30, 1, 12, 0}
+#define NXFONT_BITMAP_64 {0x0, 0xf, 0xe0, 0x0, 0x0, 0x7f, 0xfc, 0x0, 0x1, 0xff, 0xfe, 0x0, 0x3, 0xf0, 0x3f, 0x80, 0x7, 0xc0, 0x7, 0xc0, 0xf, 0x0, 0x3, 0xc0, 0x1e, 0x0, 0x1, 0xe0, 0x1c, 0x0, 0x0, 0xf0, 0x3c, 0x7, 0xdc, 0x70, 0x38, 0x1f, 0xfc, 0x70, 0x70, 0x3c, 0xfc, 0x38, 0x70, 0x78, 0x78, 0x38, 0xf0, 0xf0, 0x38, 0x38, 0xe0, 0xe0, 0x38, 0x38, 0xe1, 0xe0, 0x38, 0x38, 0xe1, 0xc0, 0x70, 0x78, 0xe1, 0xc0, 0x70, 0x70, 0xe1, 0xc0, 0x70, 0x70, 0xe1, 0xe0, 0xf0, 0xe0, 0xf1, 0xe1, 0xf1, 0xe0, 0x70, 0xff, 0xff, 0xc0, 0x78, 0x7f, 0x3f, 0x80, 0x38, 0x3e, 0x1e, 0x0, 0x3c, 0x0, 0x0, 0x0, 0x1e, 0x0, 0x0, 0x0, 0xf, 0x80, 0x0, 0x0, 0xf, 0xf0, 0x3c, 0x0, 0x3, 0xff, 0xfc, 0x0, 0x1, 0xff, 0xfc, 0x0, 0x0, 0x7f, 0xe0, 0x0}
+
+/* A (65) */
+#define NXFONT_METRICS_65 {3, 22, 25, 0, 12, 0}
+#define NXFONT_BITMAP_65 {0x0, 0xfc, 0x0, 0x0, 0xfc, 0x0, 0x1, 0xfe, 0x0, 0x1, 0xfe, 0x0, 0x1, 0xfe, 0x0, 0x3, 0xff, 0x0, 0x3, 0xff, 0x0, 0x3, 0xff, 0x0, 0x7, 0xcf, 0x80, 0x7, 0xcf, 0x80, 0x7, 0xcf, 0x80, 0xf, 0x87, 0x80, 0xf, 0x87, 0xc0, 0xf, 0x87, 0xc0, 0x1f, 0x3, 0xc0, 0x1f, 0x3, 0xe0, 0x1f, 0xff, 0xe0, 0x1f, 0xff, 0xe0, 0x3f, 0xff, 0xf0, 0x3f, 0xff, 0xf0, 0x3e, 0x1, 0xf0, 0x7c, 0x0, 0xf8, 0x7c, 0x0, 0xf8, 0xfc, 0x0, 0xfc, 0xf8, 0x0, 0x7c}
+
+/* B (66) */
+#define NXFONT_METRICS_66 {3, 19, 25, 3, 12, 0}
+#define NXFONT_BITMAP_66 {0xff, 0xfc, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x80, 0xff, 0xff, 0x80, 0xf8, 0xf, 0xc0, 0xf8, 0x7, 0xc0, 0xf8, 0x7, 0xc0, 0xf8, 0x7, 0xc0, 0xf8, 0x7, 0xc0, 0xf8, 0xf, 0x80, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x80, 0xff, 0xff, 0xc0, 0xf8, 0x7, 0xc0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x7, 0xe0, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xc0, 0xff, 0xff, 0x80, 0xff, 0xfe, 0x0}
+
+/* C (67) */
+#define NXFONT_METRICS_67 {3, 21, 25, 1, 12, 0}
+#define NXFONT_BITMAP_67 {0x1, 0xfe, 0x0, 0x7, 0xff, 0x80, 0xf, 0xff, 0xc0, 0x1f, 0xff, 0xe0, 0x3f, 0x87, 0xf0, 0x3e, 0x1, 0xf0, 0x7c, 0x1, 0xf8, 0x7c, 0x0, 0xf8, 0x7c, 0x0, 0xf8, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0x7c, 0x0, 0xf8, 0x7c, 0x0, 0xf8, 0x7e, 0x1, 0xf8, 0x3e, 0x1, 0xf0, 0x3f, 0x87, 0xf0, 0x1f, 0xff, 0xe0, 0xf, 0xff, 0xc0, 0x7, 0xff, 0x80, 0x1, 0xfe, 0x0}
+
+/* D (68) */
+#define NXFONT_METRICS_68 {3, 21, 25, 2, 12, 0}
+#define NXFONT_BITMAP_68 {0xff, 0xf8, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x80, 0xff, 0xff, 0xc0, 0xf8, 0xf, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xf0, 0xf8, 0x1, 0xf0, 0xf8, 0x1, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x1, 0xf8, 0xf8, 0x1, 0xf0, 0xf8, 0x3, 0xf0, 0xf8, 0x3, 0xe0, 0xf8, 0xf, 0xe0, 0xff, 0xff, 0xc0, 0xff, 0xff, 0x80, 0xff, 0xff, 0x0, 0xff, 0xf8, 0x0}
+
+/* E (69) */
+#define NXFONT_METRICS_69 {3, 18, 25, 2, 12, 0}
+#define NXFONT_BITMAP_69 {0xff, 0xff, 0x80, 0xff, 0xff, 0x80, 0xff, 0xff, 0x80, 0xff, 0xff, 0x80, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xc0}
+
+/* F (70) */
+#define NXFONT_METRICS_70 {2, 16, 25, 2, 12, 0}
+#define NXFONT_BITMAP_70 {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x0, 0xf8, 0x0, 0xf8, 0x0, 0xf8, 0x0, 0xf8, 0x0, 0xf8, 0x0, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xf8, 0x0, 0xf8, 0x0, 0xf8, 0x0, 0xf8, 0x0, 0xf8, 0x0, 0xf8, 0x0, 0xf8, 0x0, 0xf8, 0x0, 0xf8, 0x0, 0xf8, 0x0, 0xf8, 0x0}
+
+/* G (71) */
+#define NXFONT_METRICS_71 {3, 22, 25, 1, 12, 0}
+#define NXFONT_BITMAP_71 {0x0, 0xff, 0x0, 0x3, 0xff, 0xc0, 0xf, 0xff, 0xe0, 0x1f, 0xff, 0xf0, 0x1f, 0xc3, 0xf8, 0x3f, 0x0, 0xf8, 0x7e, 0x0, 0x7c, 0x7c, 0x0, 0x7c, 0xfc, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0xf, 0xfc, 0xf8, 0xf, 0xfc, 0xf8, 0xf, 0xfc, 0xf8, 0xf, 0xfc, 0xfc, 0x0, 0x7c, 0x7c, 0x0, 0x7c, 0x7e, 0x0, 0x7c, 0x7e, 0x0, 0xfc, 0x3f, 0x83, 0xfc, 0x3f, 0xff, 0xfc, 0x1f, 0xff, 0xdc, 0x7, 0xff, 0x9c, 0x3, 0xfe, 0x1c}
+
+/* H (72) */
+#define NXFONT_METRICS_72 {3, 19, 25, 2, 12, 0}
+#define NXFONT_BITMAP_72 {0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0}
+
+/* I (73) */
+#define NXFONT_METRICS_73 {1, 5, 25, 2, 12, 0}
+#define NXFONT_BITMAP_73 {0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8}
+
+/* J (74) */
+#define NXFONT_METRICS_74 {2, 15, 25, 1, 12, 0}
+#define NXFONT_BITMAP_74 {0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0xf8, 0x3e, 0xf8, 0x3e, 0xf8, 0x3e, 0xf8, 0x3e, 0xf8, 0x3e, 0xfc, 0x7e, 0xff, 0xfc, 0x7f, 0xfc, 0x3f, 0xf8, 0xf, 0xe0}
+
+/* K (75) */
+#define NXFONT_METRICS_75 {3, 20, 25, 2, 12, 0}
+#define NXFONT_BITMAP_75 {0xf8, 0x7, 0xe0, 0xf8, 0x7, 0xe0, 0xf8, 0xf, 0xc0, 0xf8, 0x1f, 0x80, 0xf8, 0x3f, 0x0, 0xf8, 0x7e, 0x0, 0xf8, 0xfc, 0x0, 0xf8, 0xf8, 0x0, 0xf9, 0xf8, 0x0, 0xfb, 0xf0, 0x0, 0xff, 0xe0, 0x0, 0xff, 0xe0, 0x0, 0xff, 0xf0, 0x0, 0xff, 0xf0, 0x0, 0xff, 0xf8, 0x0, 0xfc, 0xfc, 0x0, 0xf8, 0x7e, 0x0, 0xf8, 0x7e, 0x0, 0xf8, 0x3f, 0x0, 0xf8, 0x1f, 0x80, 0xf8, 0xf, 0x80, 0xf8, 0xf, 0xc0, 0xf8, 0x7, 0xe0, 0xf8, 0x3, 0xf0, 0xf8, 0x3, 0xf0}
+
+/* L (76) */
+#define NXFONT_METRICS_76 {2, 16, 25, 2, 12, 0}
+#define NXFONT_BITMAP_76 {0xf8, 0x0, 0xf8, 0x0, 0xf8, 0x0, 0xf8, 0x0, 0xf8, 0x0, 0xf8, 0x0, 0xf8, 0x0, 0xf8, 0x0, 0xf8, 0x0, 0xf8, 0x0, 0xf8, 0x0, 0xf8, 0x0, 0xf8, 0x0, 0xf8, 0x0, 0xf8, 0x0, 0xf8, 0x0, 0xf8, 0x0, 0xf8, 0x0, 0xf8, 0x0, 0xf8, 0x0, 0xf8, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}
+
+/* M (77) */
+#define NXFONT_METRICS_77 {3, 23, 25, 2, 12, 0}
+#define NXFONT_BITMAP_77 {0xfe, 0x0, 0xfe, 0xfe, 0x0, 0xfe, 0xff, 0x1, 0xfe, 0xff, 0x1, 0xfe, 0xff, 0x1, 0xfe, 0xff, 0x1, 0xfe, 0xff, 0x83, 0xfe, 0xff, 0x83, 0xfe, 0xfb, 0x83, 0xbe, 0xfb, 0x83, 0xbe, 0xfb, 0xc7, 0xbe, 0xfb, 0xc7, 0xbe, 0xfb, 0xc7, 0xbe, 0xf9, 0xc7, 0x3e, 0xf9, 0xef, 0x3e, 0xf9, 0xef, 0x3e, 0xf9, 0xef, 0x3e, 0xf9, 0xef, 0x3e, 0xf8, 0xee, 0x3e, 0xf8, 0xfe, 0x3e, 0xf8, 0xfe, 0x3e, 0xf8, 0xfe, 0x3e, 0xf8, 0x7c, 0x3e, 0xf8, 0x7c, 0x3e, 0xf8, 0x7c, 0x3e}
+
+/* N (78) */
+#define NXFONT_METRICS_78 {3, 19, 25, 2, 12, 0}
+#define NXFONT_BITMAP_78 {0xf8, 0x3, 0xe0, 0xfc, 0x3, 0xe0, 0xfc, 0x3, 0xe0, 0xfe, 0x3, 0xe0, 0xfe, 0x3, 0xe0, 0xff, 0x3, 0xe0, 0xff, 0x3, 0xe0, 0xff, 0x83, 0xe0, 0xff, 0xc3, 0xe0, 0xfb, 0xc3, 0xe0, 0xfb, 0xe3, 0xe0, 0xf9, 0xe3, 0xe0, 0xf9, 0xf3, 0xe0, 0xf8, 0xf3, 0xe0, 0xf8, 0xfb, 0xe0, 0xf8, 0x7b, 0xe0, 0xf8, 0x3f, 0xe0, 0xf8, 0x3f, 0xe0, 0xf8, 0x1f, 0xe0, 0xf8, 0x1f, 0xe0, 0xf8, 0xf, 0xe0, 0xf8, 0xf, 0xe0, 0xf8, 0x7, 0xe0, 0xf8, 0x7, 0xe0, 0xf8, 0x3, 0xe0}
+
+/* O (79) */
+#define NXFONT_METRICS_79 {3, 23, 25, 1, 12, 0}
+#define NXFONT_BITMAP_79 {0x1, 0xff, 0x0, 0x7, 0xff, 0xc0, 0xf, 0xff, 0xe0, 0x1f, 0xff, 0xf0, 0x3f, 0xc7, 0xf8, 0x3f, 0x1, 0xf8, 0x7e, 0x0, 0xfc, 0x7c, 0x0, 0x7c, 0x7c, 0x0, 0x7c, 0xf8, 0x0, 0x3e, 0xf8, 0x0, 0x3e, 0xf8, 0x0, 0x3e, 0xf8, 0x0, 0x3e, 0xf8, 0x0, 0x3e, 0xf8, 0x0, 0x3e, 0xf8, 0x0, 0x3e, 0x7c, 0x0, 0x7c, 0x7c, 0x0, 0x7c, 0x7e, 0x0, 0xfc, 0x3f, 0x1, 0xf8, 0x3f, 0xc7, 0xf8, 0x1f, 0xff, 0xf0, 0xf, 0xff, 0xe0, 0x7, 0xff, 0xc0, 0x1, 0xff, 0x0}
+
+/* P (80) */
+#define NXFONT_METRICS_80 {3, 18, 25, 2, 12, 0}
+#define NXFONT_BITMAP_80 {0xff, 0xf8, 0x0, 0xff, 0xfe, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x80, 0xf8, 0x1f, 0x80, 0xf8, 0xf, 0xc0, 0xf8, 0x7, 0xc0, 0xf8, 0x7, 0xc0, 0xf8, 0x7, 0xc0, 0xf8, 0x7, 0xc0, 0xf8, 0xf, 0xc0, 0xf8, 0x1f, 0x80, 0xff, 0xff, 0x80, 0xff, 0xff, 0x0, 0xff, 0xfc, 0x0, 0xff, 0xf0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0}
+
+/* Q (81) */
+#define NXFONT_METRICS_81 {3, 23, 26, 1, 12, 0}
+#define NXFONT_BITMAP_81 {0x1, 0xff, 0x0, 0x7, 0xff, 0xc0, 0xf, 0xff, 0xe0, 0x1f, 0xff, 0xf0, 0x3f, 0xc7, 0xf8, 0x3f, 0x1, 0xf8, 0x7e, 0x0, 0xfc, 0x7c, 0x0, 0x7c, 0xfc, 0x0, 0x7e, 0xf8, 0x0, 0x3e, 0xf8, 0x0, 0x3e, 0xf8, 0x0, 0x3e, 0xf8, 0x0, 0x3e, 0xf8, 0x0, 0x3e, 0xf8, 0x0, 0x3e, 0xf8, 0x2, 0x3e, 0xfc, 0x7, 0x3e, 0x7c, 0xf, 0xbc, 0x7e, 0xf, 0xfc, 0x3f, 0x7, 0xf8, 0x3f, 0xc3, 0xf0, 0x1f, 0xff, 0xf8, 0xf, 0xff, 0xfc, 0x7, 0xff, 0xfe, 0x1, 0xff, 0x3c, 0x0, 0x0, 0x18}
+
+/* R (82) */
+#define NXFONT_METRICS_82 {3, 19, 25, 2, 12, 0}
+#define NXFONT_BITMAP_82 {0xff, 0xfe, 0x0, 0xff, 0xff, 0x80, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xc0, 0xf8, 0x7, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x7, 0xc0, 0xf8, 0xf, 0xc0, 0xff, 0xff, 0x80, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x80, 0xf8, 0xf, 0xc0, 0xf8, 0x7, 0xc0, 0xf8, 0x7, 0xc0, 0xf8, 0x7, 0xc0, 0xf8, 0x7, 0xc0, 0xf8, 0x7, 0xc0, 0xf8, 0x7, 0xc0, 0xf8, 0x7, 0xc0, 0xf8, 0x7, 0xe0, 0xf8, 0x3, 0xe0}
+
+/* S (83) */
+#define NXFONT_METRICS_83 {3, 19, 25, 1, 12, 0}
+#define NXFONT_BITMAP_83 {0x3, 0xf8, 0x0, 0xf, 0xfe, 0x0, 0x1f, 0xff, 0x0, 0x3f, 0xff, 0x80, 0x3e, 0x1f, 0x80, 0x7c, 0x7, 0xc0, 0x78, 0x7, 0xc0, 0x78, 0x3, 0xc0, 0x7c, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x3f, 0xf0, 0x0, 0x3f, 0xfe, 0x0, 0x1f, 0xff, 0x80, 0x3, 0xff, 0xc0, 0x0, 0x3f, 0xc0, 0x0, 0x7, 0xe0, 0x0, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0x7c, 0x3, 0xe0, 0x7e, 0xf, 0xc0, 0x3f, 0xff, 0xc0, 0x1f, 0xff, 0x80, 0xf, 0xff, 0x0, 0x3, 0xf8, 0x0}
+
+/* T (84) */
+#define NXFONT_METRICS_84 {3, 19, 25, 0, 12, 0}
+#define NXFONT_BITMAP_84 {0xff, 0xff, 0xe0, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xe0, 0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0}
+
+/* U (85) */
+#define NXFONT_METRICS_85 {3, 19, 25, 2, 12, 0}
+#define NXFONT_BITMAP_85 {0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xfc, 0x7, 0xe0, 0x7f, 0x1f, 0xc0, 0x7f, 0xff, 0xc0, 0x3f, 0xff, 0x80, 0x1f, 0xff, 0x0, 0x7, 0xfc, 0x0}
+
+/* V (86) */
+#define NXFONT_METRICS_86 {3, 20, 25, 1, 12, 0}
+#define NXFONT_BITMAP_86 {0xf8, 0x1, 0xf0, 0xf8, 0x1, 0xf0, 0x7c, 0x3, 0xe0, 0x7c, 0x3, 0xe0, 0x7c, 0x3, 0xe0, 0x3c, 0x3, 0xc0, 0x3e, 0x7, 0xc0, 0x3e, 0x7, 0xc0, 0x1e, 0x7, 0x80, 0x1f, 0xf, 0x80, 0x1f, 0xf, 0x80, 0xf, 0xf, 0x0, 0xf, 0xf, 0x0, 0xf, 0xf, 0x0, 0x7, 0x9e, 0x0, 0x7, 0x9e, 0x0, 0x7, 0x9e, 0x0, 0x7, 0xfe, 0x0, 0x3, 0xfc, 0x0, 0x3, 0xfc, 0x0, 0x3, 0xfc, 0x0, 0x1, 0xf8, 0x0, 0x1, 0xf8, 0x0, 0x1, 0xf8, 0x0, 0x0, 0xf0, 0x0}
+
+/* W (87) */
+#define NXFONT_METRICS_87 {4, 29, 25, 1, 12, 0}
+#define NXFONT_BITMAP_87 {0xf8, 0x1f, 0x81, 0xf8, 0xf8, 0x1f, 0x81, 0xf8, 0x78, 0x1f, 0x81, 0xf0, 0x78, 0x1f, 0x81, 0xf0, 0x78, 0x1f, 0x81, 0xf0, 0x7c, 0x3f, 0xc3, 0xe0, 0x7c, 0x3f, 0xc3, 0xe0, 0x7c, 0x3f, 0xc3, 0xe0, 0x3c, 0x3f, 0xc3, 0xe0, 0x3c, 0x39, 0xc3, 0xc0, 0x3e, 0x79, 0xe3, 0xc0, 0x3e, 0x79, 0xe7, 0xc0, 0x1e, 0x79, 0xe7, 0xc0, 0x1e, 0x79, 0xe7, 0x80, 0x1e, 0x70, 0xe7, 0x80, 0x1e, 0x70, 0xe7, 0x80, 0xf, 0xf0, 0xff, 0x0, 0xf, 0xf0, 0xff, 0x0, 0xf, 0xf0, 0xff, 0x0, 0xf, 0xe0, 0x7f, 0x0, 0x7, 0xe0, 0x7e, 0x0, 0x7, 0xe0, 0x7e, 0x0, 0x7, 0xe0, 0x7e, 0x0, 0x3, 0xc0, 0x3c, 0x0, 0x3, 0xc0, 0x3c, 0x0}
+
+/* X (88) */
+#define NXFONT_METRICS_88 {3, 20, 25, 1, 12, 0}
+#define NXFONT_BITMAP_88 {0xfc, 0x3, 0xe0, 0x7e, 0x7, 0xe0, 0x7e, 0x7, 0xc0, 0x3f, 0xf, 0xc0, 0x1f, 0xf, 0x80, 0x1f, 0x9f, 0x0, 0xf, 0x9f, 0x0, 0xf, 0xbe, 0x0, 0x7, 0xfe, 0x0, 0x7, 0xfc, 0x0, 0x3, 0xfc, 0x0, 0x3, 0xf8, 0x0, 0x1, 0xf8, 0x0, 0x3, 0xf8, 0x0, 0x3, 0xfc, 0x0, 0x7, 0xfc, 0x0, 0x7, 0xfe, 0x0, 0xf, 0xbf, 0x0, 0x1f, 0x9f, 0x0, 0x1f, 0x1f, 0x80, 0x3f, 0xf, 0x80, 0x3e, 0xf, 0xc0, 0x7e, 0x7, 0xc0, 0xfc, 0x7, 0xe0, 0xfc, 0x3, 0xf0}
+
+/* Y (89) */
+#define NXFONT_METRICS_89 {3, 20, 25, 1, 12, 0}
+#define NXFONT_BITMAP_89 {0xfc, 0x3, 0xf0, 0xfc, 0x3, 0xe0, 0x7e, 0x7, 0xe0, 0x3e, 0x7, 0xc0, 0x3f, 0xf, 0xc0, 0x3f, 0xf, 0x80, 0x1f, 0xf, 0x80, 0x1f, 0x9f, 0x0, 0xf, 0x9f, 0x0, 0xf, 0xfe, 0x0, 0x7, 0xfe, 0x0, 0x7, 0xfc, 0x0, 0x3, 0xfc, 0x0, 0x3, 0xf8, 0x0, 0x3, 0xf8, 0x0, 0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0}
+
+/* Z (90) */
+#define NXFONT_METRICS_90 {3, 17, 25, 1, 12, 0}
+#define NXFONT_BITMAP_90 {0xff, 0xff, 0x80, 0xff, 0xff, 0x80, 0xff, 0xff, 0x80, 0xff, 0xff, 0x80, 0x0, 0xf, 0x80, 0x0, 0x1f, 0x80, 0x0, 0x3f, 0x0, 0x0, 0x7e, 0x0, 0x0, 0x7c, 0x0, 0x0, 0xfc, 0x0, 0x1, 0xf8, 0x0, 0x3, 0xf0, 0x0, 0x3, 0xf0, 0x0, 0x7, 0xe0, 0x0, 0xf, 0xc0, 0x0, 0xf, 0x80, 0x0, 0x1f, 0x80, 0x0, 0x3f, 0x0, 0x0, 0x7e, 0x0, 0x0, 0x7e, 0x0, 0x0, 0xfc, 0x0, 0x0, 0xff, 0xff, 0x80, 0xff, 0xff, 0x80, 0xff, 0xff, 0x80, 0xff, 0xff, 0x80}
+
+/* bracketleft (91) */
+#define NXFONT_METRICS_91 {1, 8, 31, 2, 12, 0}
+#define NXFONT_BITMAP_91 {0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xff, 0xff, 0xff}
+
+/* backslash (92) */
+#define NXFONT_METRICS_92 {2, 9, 25, 0, 12, 0}
+#define NXFONT_BITMAP_92 {0xc0, 0x0, 0xc0, 0x0, 0xe0, 0x0, 0x60, 0x0, 0x60, 0x0, 0x70, 0x0, 0x70, 0x0, 0x30, 0x0, 0x38, 0x0, 0x38, 0x0, 0x18, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0xc, 0x0, 0xc, 0x0, 0xe, 0x0, 0xe, 0x0, 0x6, 0x0, 0x7, 0x0, 0x7, 0x0, 0x3, 0x0, 0x3, 0x80, 0x3, 0x80, 0x1, 0x80, 0x1, 0x80}
+
+/* bracketright (93) */
+#define NXFONT_METRICS_93 {1, 8, 31, 0, 12, 0}
+#define NXFONT_BITMAP_93 {0xff, 0xff, 0xff, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xff, 0xff, 0xff}
+
+/* asciicircum (94) */
+#define NXFONT_METRICS_94 {2, 14, 14, 2, 14, 0}
+#define NXFONT_BITMAP_94 {0x7, 0x80, 0xf, 0xc0, 0xf, 0xc0, 0xf, 0xc0, 0x1f, 0xe0, 0x1f, 0xe0, 0x3c, 0xf0, 0x3c, 0xf0, 0x38, 0x70, 0x78, 0x78, 0x78, 0x78, 0x70, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c}
+
+/* underscore (95) */
+#define NXFONT_METRICS_95 {3, 18, 2, 0, 41, 0}
+#define NXFONT_BITMAP_95 {0xff, 0xff, 0xc0, 0xff, 0xff, 0xc0}
+
+/* grave (96) */
+#define NXFONT_METRICS_96 {1, 5, 5, 2, 12, 0}
+#define NXFONT_BITMAP_96 {0xe0, 0xf0, 0x70, 0x78, 0x38}
+
+/* a (97) */
+#define NXFONT_METRICS_97 {2, 15, 18, 1, 19, 0}
+#define NXFONT_BITMAP_97 {0xf, 0xf0, 0x3f, 0xfc, 0x7f, 0xfc, 0x7c, 0x3e, 0xf8, 0x1e, 0xf8, 0x1e, 0x0, 0xfe, 0xf, 0xfe, 0x3f, 0xfe, 0x7f, 0x1e, 0xf8, 0x1e, 0xf8, 0x1e, 0xf0, 0x3e, 0xf8, 0x7e, 0xff, 0xfe, 0xff, 0xfe, 0x7f, 0xde, 0x3f, 0x1e}
+
+/* b (98) */
+#define NXFONT_METRICS_98 {2, 16, 25, 2, 12, 0}
+#define NXFONT_BITMAP_98 {0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf3, 0xf0, 0xf7, 0xfc, 0xff, 0xfc, 0xff, 0xfe, 0xfc, 0x3e, 0xf8, 0x1f, 0xf0, 0x1f, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0x1f, 0xf0, 0x1f, 0xf8, 0x3e, 0xff, 0xfe, 0xff, 0xfc, 0xf7, 0xf8, 0xf1, 0xf0}
+
+/* c (99) */
+#define NXFONT_METRICS_99 {2, 15, 18, 1, 19, 0}
+#define NXFONT_BITMAP_99 {0x7, 0xe0, 0x1f, 0xf8, 0x3f, 0xfc, 0x3f, 0xfc, 0x7c, 0x3e, 0x78, 0x3e, 0xf0, 0x1e, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x1e, 0xf8, 0x1e, 0x7c, 0x3e, 0x7f, 0xfc, 0x3f, 0xf8, 0x1f, 0xf8, 0x7, 0xe0}
+
+/* d (100) */
+#define NXFONT_METRICS_100 {2, 16, 25, 1, 12, 0}
+#define NXFONT_BITMAP_100 {0x0, 0xf, 0x0, 0xf, 0x0, 0xf, 0x0, 0xf, 0x0, 0xf, 0x0, 0xf, 0x0, 0xf, 0xf, 0xcf, 0x1f, 0xef, 0x3f, 0xff, 0x7f, 0xff, 0x7c, 0x3f, 0xf8, 0x1f, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf8, 0x1f, 0x7c, 0x3f, 0x7f, 0xff, 0x3f, 0xef, 0x1f, 0xef, 0xf, 0x8f}
+
+/* e (101) */
+#define NXFONT_METRICS_101 {2, 16, 18, 1, 19, 0}
+#define NXFONT_BITMAP_101 {0x7, 0xe0, 0x1f, 0xf8, 0x3f, 0xfc, 0x7f, 0xfe, 0x7c, 0x3e, 0xf8, 0x1f, 0xf0, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x0, 0xf0, 0x0, 0xf8, 0x1e, 0x7c, 0x3e, 0x7f, 0xfc, 0x3f, 0xfc, 0x1f, 0xf0, 0x7, 0xc0}
+
+/* f (102) */
+#define NXFONT_METRICS_102 {2, 10, 25, 0, 12, 0}
+#define NXFONT_BITMAP_102 {0x7, 0xc0, 0xf, 0xc0, 0x1f, 0xc0, 0x1f, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0xff, 0xc0, 0xff, 0xc0, 0xff, 0xc0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0}
+
+/* g (103) */
+#define NXFONT_METRICS_103 {2, 16, 25, 1, 19, 0}
+#define NXFONT_BITMAP_103 {0xf, 0xcf, 0x1f, 0xef, 0x3f, 0xff, 0x7f, 0xff, 0x7c, 0x3f, 0xf8, 0x1f, 0xf8, 0x1f, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf8, 0x1f, 0xf8, 0x1f, 0x7c, 0x3f, 0x7f, 0xff, 0x3f, 0xff, 0x1f, 0xef, 0xf, 0xcf, 0x0, 0xf, 0xf8, 0x1f, 0xf8, 0x1f, 0x7e, 0x7e, 0x7f, 0xfe, 0x3f, 0xfc, 0xf, 0xf0}
+
+/* h (104) */
+#define NXFONT_METRICS_104 {2, 15, 25, 2, 12, 0}
+#define NXFONT_BITMAP_104 {0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf1, 0xe0, 0xf7, 0xf8, 0xff, 0xfc, 0xff, 0xfc, 0xfc, 0x3e, 0xf8, 0x1e, 0xf8, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e}
+
+/* i (105) */
+#define NXFONT_METRICS_105 {1, 4, 25, 2, 12, 0}
+#define NXFONT_BITMAP_105 {0xf0, 0xf0, 0xf0, 0xf0, 0x0, 0x0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0}
+
+/* j (106) */
+#define NXFONT_METRICS_106 {1, 6, 32, 0, 12, 0}
+#define NXFONT_BITMAP_106 {0x3c, 0x3c, 0x3c, 0x3c, 0x0, 0x0, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0xfc, 0xfc, 0xf8, 0xf8}
+
+/* k (107) */
+#define NXFONT_METRICS_107 {2, 15, 25, 2, 12, 0}
+#define NXFONT_BITMAP_107 {0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x3e, 0xf0, 0x7c, 0xf0, 0xf8, 0xf1, 0xf0, 0xf3, 0xe0, 0xf7, 0xc0, 0xff, 0x80, 0xff, 0xc0, 0xff, 0xc0, 0xff, 0xe0, 0xff, 0xe0, 0xf9, 0xf0, 0xf1, 0xf0, 0xf0, 0xf8, 0xf0, 0x78, 0xf0, 0x7c, 0xf0, 0x3e, 0xf0, 0x3e}
+
+/* l (108) */
+#define NXFONT_METRICS_108 {1, 4, 25, 2, 12, 0}
+#define NXFONT_BITMAP_108 {0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0}
+
+/* m (109) */
+#define NXFONT_METRICS_109 {3, 24, 18, 2, 19, 0}
+#define NXFONT_BITMAP_109 {0xf1, 0xe0, 0xf8, 0xf7, 0xfb, 0xfe, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfc, 0x7f, 0x1f, 0xf8, 0x3e, 0xf, 0xf0, 0x3c, 0xf, 0xf0, 0x3c, 0xf, 0xf0, 0x3c, 0xf, 0xf0, 0x3c, 0xf, 0xf0, 0x3c, 0xf, 0xf0, 0x3c, 0xf, 0xf0, 0x3c, 0xf, 0xf0, 0x3c, 0xf, 0xf0, 0x3c, 0xf, 0xf0, 0x3c, 0xf, 0xf0, 0x3c, 0xf, 0xf0, 0x3c, 0xf}
+
+/* n (110) */
+#define NXFONT_METRICS_110 {2, 15, 18, 2, 19, 0}
+#define NXFONT_BITMAP_110 {0xf1, 0xf0, 0xf7, 0xfc, 0xff, 0xfc, 0xff, 0xfe, 0xfc, 0x3e, 0xf8, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e}
+
+/* o (111) */
+#define NXFONT_METRICS_111 {3, 17, 18, 1, 19, 0}
+#define NXFONT_BITMAP_111 {0x7, 0xf0, 0x0, 0x1f, 0xfc, 0x0, 0x3f, 0xfe, 0x0, 0x7f, 0xff, 0x0, 0x7c, 0x1f, 0x0, 0xf8, 0xf, 0x80, 0xf8, 0xf, 0x80, 0xf0, 0x7, 0x80, 0xf0, 0x7, 0x80, 0xf0, 0x7, 0x80, 0xf0, 0x7, 0x80, 0xf8, 0xf, 0x80, 0xf8, 0xf, 0x80, 0x7c, 0x1f, 0x0, 0x7f, 0xff, 0x0, 0x3f, 0xfe, 0x0, 0x1f, 0xfc, 0x0, 0x7, 0xf0, 0x0}
+
+/* p (112) */
+#define NXFONT_METRICS_112 {2, 16, 25, 2, 19, 0}
+#define NXFONT_BITMAP_112 {0xf1, 0xf0, 0xf7, 0xf8, 0xff, 0xfc, 0xff, 0xfe, 0xfc, 0x3e, 0xf8, 0x1f, 0xf8, 0x1f, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf8, 0x1f, 0xf8, 0x1f, 0xfc, 0x3e, 0xff, 0xfe, 0xff, 0xfc, 0xf7, 0xf8, 0xf1, 0xf0, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0}
+
+/* q (113) */
+#define NXFONT_METRICS_113 {2, 16, 25, 1, 19, 0}
+#define NXFONT_BITMAP_113 {0x7, 0xcf, 0x1f, 0xef, 0x3f, 0xff, 0x7f, 0xff, 0x7c, 0x3f, 0xf8, 0x1f, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf8, 0x1f, 0x7c, 0x3f, 0x7f, 0xff, 0x3f, 0xff, 0x3f, 0xef, 0xf, 0xcf, 0x0, 0xf, 0x0, 0xf, 0x0, 0xf, 0x0, 0xf, 0x0, 0xf, 0x0, 0xf, 0x0, 0xf}
+
+/* r (114) */
+#define NXFONT_METRICS_114 {2, 10, 18, 2, 19, 0}
+#define NXFONT_BITMAP_114 {0xf0, 0xc0, 0xf3, 0xc0, 0xf7, 0xc0, 0xff, 0xc0, 0xff, 0xc0, 0xfc, 0x0, 0xf8, 0x0, 0xf8, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0}
+
+/* s (115) */
+#define NXFONT_METRICS_115 {2, 16, 18, 1, 19, 0}
+#define NXFONT_BITMAP_115 {0x7, 0xf0, 0x1f, 0xfc, 0x3f, 0xfe, 0x7c, 0x3e, 0x78, 0x1f, 0x78, 0x1f, 0x7c, 0x0, 0x7f, 0xc0, 0x3f, 0xf8, 0xf, 0xfe, 0x3, 0xff, 0x0, 0x3f, 0xf8, 0xf, 0xf8, 0xf, 0x7c, 0x1f, 0x7f, 0xfe, 0x3f, 0xfc, 0xf, 0xf0}
+
+/* t (116) */
+#define NXFONT_METRICS_116 {2, 9, 22, 1, 15, 0}
+#define NXFONT_BITMAP_116 {0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0xff, 0x80, 0xff, 0x80, 0xff, 0x80, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3f, 0x80, 0x3f, 0x80, 0x1f, 0x80, 0xf, 0x80}
+
+/* u (117) */
+#define NXFONT_METRICS_117 {2, 15, 18, 2, 19, 0}
+#define NXFONT_BITMAP_117 {0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf8, 0x3e, 0xf8, 0x7e, 0xff, 0xfe, 0x7f, 0xfe, 0x7f, 0xde, 0x1f, 0x1e}
+
+/* v (118) */
+#define NXFONT_METRICS_118 {3, 17, 18, 0, 19, 0}
+#define NXFONT_BITMAP_118 {0xf8, 0xf, 0x80, 0xf8, 0xf, 0x80, 0x7c, 0x1f, 0x0, 0x7c, 0x1f, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3e, 0x3e, 0x0, 0x1e, 0x3c, 0x0, 0x1e, 0x3c, 0x0, 0x1e, 0x3c, 0x0, 0xf, 0x78, 0x0, 0xf, 0x78, 0x0, 0xf, 0x78, 0x0, 0x7, 0xf0, 0x0, 0x7, 0xf0, 0x0, 0x7, 0xf0, 0x0, 0x3, 0xe0, 0x0, 0x3, 0xe0, 0x0}
+
+/* w (119) */
+#define NXFONT_METRICS_119 {4, 25, 18, 0, 19, 0}
+#define NXFONT_BITMAP_119 {0xf8, 0x3e, 0xf, 0x80, 0xf8, 0x3e, 0xf, 0x80, 0x78, 0x3e, 0xf, 0x0, 0x7c, 0x3e, 0x1f, 0x0, 0x7c, 0x7f, 0x1f, 0x0, 0x3c, 0x7f, 0x1e, 0x0, 0x3c, 0x7f, 0x1e, 0x0, 0x3c, 0x77, 0x1e, 0x0, 0x3c, 0xf7, 0x9e, 0x0, 0x1e, 0xe3, 0xbc, 0x0, 0x1e, 0xe3, 0xbc, 0x0, 0x1e, 0xe3, 0xbc, 0x0, 0x1f, 0xe3, 0xfc, 0x0, 0xf, 0xc1, 0xf8, 0x0, 0xf, 0xc1, 0xf8, 0x0, 0xf, 0xc1, 0xf8, 0x0, 0x7, 0x80, 0xf0, 0x0, 0x7, 0x80, 0xf0, 0x0}
+
+/* x (120) */
+#define NXFONT_METRICS_120 {2, 16, 18, 1, 19, 0}
+#define NXFONT_BITMAP_120 {0xf8, 0x1f, 0xfc, 0x3f, 0x7c, 0x3e, 0x3e, 0x7c, 0x3e, 0x78, 0x1f, 0xf8, 0xf, 0xf0, 0x7, 0xe0, 0x3, 0xc0, 0x7, 0xe0, 0xf, 0xe0, 0xf, 0xf0, 0x1f, 0xf8, 0x3e, 0x78, 0x3e, 0x7c, 0x7c, 0x3e, 0xfc, 0x3f, 0xf8, 0x1f}
+
+/* y (121) */
+#define NXFONT_METRICS_121 {2, 16, 25, 1, 19, 0}
+#define NXFONT_BITMAP_121 {0xf8, 0x1f, 0xf8, 0x1f, 0xf8, 0x1e, 0x78, 0x3e, 0x7c, 0x3e, 0x7c, 0x3c, 0x3c, 0x3c, 0x3e, 0x7c, 0x3e, 0x78, 0x1e, 0x78, 0x1e, 0x78, 0x1f, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xe0, 0x7, 0xe0, 0x7, 0xe0, 0x7, 0xc0, 0x7, 0xc0, 0x7, 0xc0, 0xf, 0x80, 0x3f, 0x80, 0x3f, 0x0, 0x3f, 0x0, 0x3c, 0x0}
+
+/* z (122) */
+#define NXFONT_METRICS_122 {2, 14, 18, 1, 19, 0}
+#define NXFONT_BITMAP_122 {0xff, 0xfc, 0xff, 0xfc, 0xff, 0xfc, 0xff, 0xfc, 0x0, 0xf8, 0x1, 0xf0, 0x3, 0xf0, 0x7, 0xe0, 0xf, 0xc0, 0x1f, 0x80, 0x1f, 0x0, 0x3e, 0x0, 0x7c, 0x0, 0xf8, 0x0, 0xff, 0xfc, 0xff, 0xfc, 0xff, 0xfc, 0xff, 0xfc}
+
+/* braceleft (123) */
+#define NXFONT_METRICS_123 {2, 9, 32, 2, 12, 0}
+#define NXFONT_BITMAP_123 {0xf, 0x80, 0x1f, 0x80, 0x3f, 0x80, 0x3e, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x7c, 0x0, 0x78, 0x0, 0xe0, 0x0, 0x78, 0x0, 0x7c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3f, 0x80, 0x1f, 0x80, 0xf, 0x80}
+
+/* bar (124) */
+#define NXFONT_METRICS_124 {1, 3, 31, 3, 12, 0}
+#define NXFONT_BITMAP_124 {0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0}
+
+/* braceright (125) */
+#define NXFONT_METRICS_125 {2, 9, 32, 2, 12, 0}
+#define NXFONT_BITMAP_125 {0xf8, 0x0, 0xfc, 0x0, 0xfe, 0x0, 0x3e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1f, 0x0, 0xf, 0x0, 0x3, 0x80, 0xf, 0x0, 0x1f, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0xfe, 0x0, 0xfc, 0x0, 0xf8, 0x0}
+
+/* asciitilde (126) */
+#define NXFONT_METRICS_126 {2, 14, 6, 2, 26, 0}
+#define NXFONT_BITMAP_126 {0x38, 0x0, 0x7e, 0xc, 0xff, 0x9c, 0xe7, 0xfc, 0xc1, 0xf8, 0x0, 0x70}
+
+/* exclamdown (161) */
+#define NXFONT_METRICS_161 {1, 5, 24, 2, 19, 0}
+#define NXFONT_BITMAP_161 {0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0x0, 0x0, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8}
+
+/* cent (162) */
+#define NXFONT_METRICS_162 {2, 15, 24, 1, 16, 0}
+#define NXFONT_BITMAP_162 {0x0, 0x20, 0x0, 0x20, 0x0, 0x60, 0x7, 0xf0, 0x1f, 0xf8, 0x3f, 0xfc, 0x7f, 0xfc, 0x7c, 0xbe, 0xf8, 0x9e, 0xf9, 0x9e, 0xf1, 0x80, 0xf1, 0x80, 0xf3, 0x0, 0xf3, 0x0, 0xf3, 0x1e, 0xfa, 0x1e, 0x7e, 0x3e, 0x7f, 0xfc, 0x3f, 0xf8, 0x1f, 0xf0, 0xf, 0xc0, 0xc, 0x0, 0x8, 0x0, 0x8, 0x0}
+
+/* sterling (163) */
+#define NXFONT_METRICS_163 {3, 17, 24, 0, 13, 0}
+#define NXFONT_BITMAP_163 {0x3, 0xf0, 0x0, 0x1f, 0xfc, 0x0, 0x3f, 0xfe, 0x0, 0x3f, 0xff, 0x0, 0x7e, 0x1f, 0x0, 0x7c, 0xf, 0x80, 0x7c, 0xf, 0x80, 0x7c, 0x7, 0x80, 0x7c, 0x0, 0x0, 0x7e, 0x0, 0x0, 0x3e, 0x0, 0x0, 0xff, 0xf0, 0x0, 0xff, 0xf0, 0x0, 0x1f, 0x0, 0x0, 0xf, 0x0, 0x0, 0xf, 0x0, 0x0, 0xf, 0x0, 0x0, 0x1f, 0x0, 0x0, 0x1e, 0x0, 0x0, 0x3d, 0xe3, 0x0, 0x7f, 0xff, 0x80, 0xff, 0xff, 0x80, 0xff, 0xff, 0x0, 0x60, 0x7e, 0x0}
+
+/* currency (164) */
+#define NXFONT_METRICS_164 {2, 15, 15, 1, 18, 0}
+#define NXFONT_BITMAP_164 {0xe0, 0xe, 0xf7, 0xde, 0xff, 0xfe, 0x7f, 0xfc, 0x3c, 0x78, 0x78, 0x3c, 0x70, 0x1c, 0x70, 0x1c, 0x70, 0x1c, 0x78, 0x3c, 0x3c, 0x78, 0x7f, 0xfc, 0xff, 0xfe, 0xf7, 0xde, 0xe0, 0xe}
+
+/* yen (165) */
+#define NXFONT_METRICS_165 {3, 18, 24, 0, 13, 0}
+#define NXFONT_BITMAP_165 {0xf8, 0x7, 0xc0, 0xf8, 0x7, 0xc0, 0x7c, 0xf, 0x80, 0x3c, 0xf, 0x0, 0x1e, 0x1e, 0x0, 0x1e, 0x1e, 0x0, 0xf, 0x3c, 0x0, 0xf, 0x3c, 0x0, 0x7, 0xf8, 0x0, 0x7, 0xf8, 0x0, 0x3, 0xf0, 0x0, 0x1, 0xe0, 0x0, 0x3f, 0xff, 0x0, 0x3f, 0xff, 0x0, 0x1, 0xe0, 0x0, 0x1, 0xe0, 0x0, 0x3f, 0xff, 0x0, 0x3f, 0xff, 0x0, 0x1, 0xe0, 0x0, 0x1, 0xe0, 0x0, 0x1, 0xe0, 0x0, 0x1, 0xe0, 0x0, 0x1, 0xe0, 0x0, 0x1, 0xe0, 0x0}
+
+/* brokenbar (166) */
+#define NXFONT_METRICS_166 {1, 3, 31, 3, 12, 0}
+#define NXFONT_BITMAP_166 {0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0}
+
+/* section (167) */
+#define NXFONT_METRICS_167 {2, 16, 32, 1, 12, 0}
+#define NXFONT_BITMAP_167 {0xf, 0xf0, 0x1f, 0xf8, 0x3f, 0xf8, 0x7e, 0x7c, 0x7c, 0x3c, 0x7c, 0x3c, 0x7e, 0x0, 0x7f, 0x0, 0x3f, 0xc0, 0x1f, 0xe0, 0x3f, 0xf8, 0x7f, 0xfc, 0x71, 0xfe, 0xf0, 0xff, 0xf0, 0x3f, 0xf8, 0x1f, 0xfc, 0xf, 0x7f, 0xf, 0x7f, 0x9f, 0x3f, 0xfe, 0x1f, 0xf8, 0x7, 0xfc, 0x1, 0xfe, 0x0, 0x7e, 0x0, 0x3e, 0x78, 0x1e, 0x78, 0x1e, 0x7c, 0x3e, 0x3f, 0xfc, 0x3f, 0xfc, 0x1f, 0xf8, 0x7, 0xe0}
+
+/* dieresis (168) */
+#define NXFONT_METRICS_168 {2, 10, 4, 0, 12, 0}
+#define NXFONT_BITMAP_168 {0xf3, 0xc0, 0xf3, 0xc0, 0xf3, 0xc0, 0xf3, 0xc0}
+
+/* copyright (169) */
+#define NXFONT_METRICS_169 {4, 26, 25, 0, 12, 0}
+#define NXFONT_BITMAP_169 {0x0, 0x7f, 0x80, 0x0, 0x3, 0xff, 0xe0, 0x0, 0x7, 0x80, 0xf8, 0x0, 0x1f, 0x0, 0x3c, 0x0, 0x1c, 0x0, 0xe, 0x0, 0x38, 0x0, 0x7, 0x0, 0x70, 0x3f, 0x3, 0x0, 0x70, 0x7f, 0x83, 0x80, 0xe0, 0xf3, 0xc1, 0x80, 0xe1, 0xc0, 0xe1, 0xc0, 0xc1, 0xc0, 0xe0, 0xc0, 0xc3, 0x80, 0x0, 0xc0, 0xc3, 0x80, 0x0, 0xc0, 0xc3, 0x80, 0x0, 0xc0, 0xc3, 0x80, 0x0, 0xc0, 0xc1, 0xc0, 0xe0, 0xc0, 0xe1, 0xc0, 0xe1, 0xc0, 0xe0, 0xf3, 0xc3, 0x80, 0x60, 0x7f, 0x83, 0x80, 0x70, 0x3f, 0x7, 0x0, 0x38, 0x0, 0xe, 0x0, 0x1e, 0x0, 0x3c, 0x0, 0xf, 0x80, 0xf8, 0x0, 0x7, 0xff, 0xe0, 0x0, 0x1, 0xff, 0x80, 0x0}
+
+/* ordfeminine (170) */
+#define NXFONT_METRICS_170 {2, 9, 16, 1, 12, 0}
+#define NXFONT_BITMAP_170 {0x3e, 0x0, 0x7f, 0x0, 0xe3, 0x80, 0xc3, 0x80, 0x1f, 0x80, 0x7f, 0x80, 0xf3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xff, 0x80, 0x7b, 0x80, 0x0, 0x0, 0x0, 0x0, 0xff, 0x80, 0xff, 0x80, 0xff, 0x80}
+
+/* guillemotleft (171) */
+#define NXFONT_METRICS_171 {2, 12, 13, 3, 22, 0}
+#define NXFONT_BITMAP_171 {0x8, 0x10, 0x18, 0x30, 0x38, 0x70, 0x78, 0xf0, 0xf1, 0xe0, 0xe1, 0xc0, 0xe1, 0xc0, 0xf1, 0xe0, 0xf9, 0xf0, 0x78, 0xf0, 0x38, 0x70, 0x18, 0x30, 0x8, 0x10}
+
+/* logicalnot (172) */
+#define NXFONT_METRICS_172 {2, 16, 10, 1, 23, 0}
+#define NXFONT_BITMAP_172 {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0xf, 0x0, 0xf, 0x0, 0xf, 0x0, 0xf, 0x0, 0xf, 0x0, 0xf}
+
+/* hyphen (173) */
+#define NXFONT_METRICS_173 {2, 9, 5, 1, 25, 0}
+#define NXFONT_BITMAP_173 {0xff, 0x80, 0xff, 0x80, 0xff, 0x80, 0xff, 0x80, 0xff, 0x80}
+
+/* registered (174) */
+#define NXFONT_METRICS_174 {4, 26, 25, 0, 12, 0}
+#define NXFONT_BITMAP_174 {0x0, 0xff, 0x80, 0x0, 0x3, 0xff, 0xe0, 0x0, 0x7, 0x80, 0xf8, 0x0, 0x1e, 0x0, 0x3c, 0x0, 0x1c, 0x0, 0xe, 0x0, 0x38, 0xff, 0x87, 0x0, 0x70, 0xff, 0xc3, 0x0, 0x70, 0xe1, 0xe3, 0x80, 0xe0, 0xe0, 0xe1, 0x80, 0xe0, 0xe0, 0xe1, 0x80, 0xc0, 0xe0, 0xe1, 0xc0, 0xc0, 0xe1, 0xc1, 0xc0, 0xc0, 0xff, 0x81, 0xc0, 0xc0, 0xff, 0x1, 0xc0, 0xc0, 0xe3, 0x81, 0xc0, 0xc0, 0xe3, 0xc1, 0xc0, 0xe0, 0xe1, 0xc1, 0x80, 0xe0, 0xe0, 0xe3, 0x80, 0x70, 0xe0, 0xf3, 0x80, 0x70, 0xe0, 0x77, 0x0, 0x38, 0x0, 0xe, 0x0, 0x1e, 0x0, 0x1c, 0x0, 0xf, 0x80, 0x78, 0x0, 0x7, 0xff, 0xe0, 0x0, 0x1, 0xff, 0x80, 0x0}
+
+/* macron (175) */
+#define NXFONT_METRICS_175 {2, 10, 3, 0, 13, 0}
+#define NXFONT_BITMAP_175 {0xff, 0xc0, 0xff, 0xc0, 0xff, 0xc0}
+
+/* degree (176) */
+#define NXFONT_METRICS_176 {2, 9, 10, 2, 13, 0}
+#define NXFONT_BITMAP_176 {0x3e, 0x0, 0x7f, 0x0, 0x63, 0x0, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0x63, 0x0, 0x7f, 0x0, 0x3e, 0x0}
+
+/* plusminus (177) */
+#define NXFONT_METRICS_177 {2, 16, 22, 1, 15, 0}
+#define NXFONT_BITMAP_177 {0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}
+
+/* twosuperior (178) */
+#define NXFONT_METRICS_178 {2, 10, 15, 0, 13, 0}
+#define NXFONT_BITMAP_178 {0x3f, 0x0, 0x7f, 0x80, 0xf3, 0xc0, 0xe1, 0xc0, 0xe1, 0xc0, 0x1, 0xc0, 0x3, 0xc0, 0x7, 0x80, 0xf, 0x0, 0x3e, 0x0, 0x78, 0x0, 0x70, 0x0, 0xff, 0xc0, 0xff, 0xc0, 0xff, 0xc0}
+
+/* threesuperior (179) */
+#define NXFONT_METRICS_179 {2, 10, 15, 0, 13, 0}
+#define NXFONT_BITMAP_179 {0x1e, 0x0, 0x7f, 0x80, 0xf3, 0xc0, 0xe1, 0xc0, 0xe1, 0xc0, 0x3, 0xc0, 0xf, 0x80, 0xf, 0x80, 0x3, 0xc0, 0x1, 0xc0, 0xe1, 0xc0, 0xe1, 0xc0, 0xf3, 0xc0, 0x7f, 0x80, 0x3e, 0x0}
+
+/* acute (180) */
+#define NXFONT_METRICS_180 {1, 6, 5, 4, 12, 0}
+#define NXFONT_BITMAP_180 {0x3c, 0x78, 0x70, 0xe0, 0xe0}
+
+/* mu (181) */
+#define NXFONT_METRICS_181 {2, 15, 25, 2, 19, 0}
+#define NXFONT_BITMAP_181 {0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf8, 0x3e, 0xf8, 0x7e, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xde, 0xf7, 0x9e, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0}
+
+/* paragraph (182) */
+#define NXFONT_METRICS_182 {3, 17, 31, 0, 12, 0}
+#define NXFONT_BITMAP_182 {0xf, 0xff, 0x80, 0x1f, 0xff, 0x80, 0x3f, 0x8c, 0x0, 0x7f, 0x8c, 0x0, 0x7f, 0x8c, 0x0, 0xff, 0x8c, 0x0, 0xff, 0x8c, 0x0, 0xff, 0x8c, 0x0, 0xff, 0x8c, 0x0, 0xff, 0x8c, 0x0, 0x7f, 0x8c, 0x0, 0x7f, 0x8c, 0x0, 0x3f, 0x8c, 0x0, 0x3f, 0x8c, 0x0, 0xf, 0x8c, 0x0, 0x1, 0x8c, 0x0, 0x1, 0x8c, 0x0, 0x1, 0x8c, 0x0, 0x1, 0x8c, 0x0, 0x1, 0x8c, 0x0, 0x1, 0x8c, 0x0, 0x1, 0x8c, 0x0, 0x1, 0x8c, 0x0, 0x1, 0x8c, 0x0, 0x1, 0x8c, 0x0, 0x1, 0x8c, 0x0, 0x1, 0x8c, 0x0, 0x1, 0x8c, 0x0, 0x1, 0x8c, 0x0, 0x1, 0x8c, 0x0, 0x1, 0x8c, 0x0}
+
+/* periodcentered (183) */
+#define NXFONT_METRICS_183 {1, 4, 5, 2, 21, 0}
+#define NXFONT_BITMAP_183 {0x60, 0xf0, 0xf0, 0xf0, 0x60}
+
+/* cedilla (184) */
+#define NXFONT_METRICS_184 {1, 7, 8, 2, 36, 0}
+#define NXFONT_BITMAP_184 {0x30, 0x30, 0x30, 0x7c, 0x1e, 0xe, 0xfc, 0xf8}
+
+/* onesuperior (185) */
+#define NXFONT_METRICS_185 {1, 6, 15, 2, 13, 0}
+#define NXFONT_BITMAP_185 {0x1c, 0x3c, 0xfc, 0xfc, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}
+
+/* ordmasculine (186) */
+#define NXFONT_METRICS_186 {2, 10, 16, 1, 12, 0}
+#define NXFONT_BITMAP_186 {0x3f, 0x0, 0x7f, 0x80, 0x73, 0x80, 0xe1, 0xc0, 0xe1, 0xc0, 0xe1, 0xc0, 0xe1, 0xc0, 0xe1, 0xc0, 0x73, 0x80, 0x7f, 0x80, 0x3f, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xc0, 0xff, 0xc0, 0xff, 0xc0}
+
+/* guillemotright (187) */
+#define NXFONT_METRICS_187 {2, 12, 12, 3, 22, 0}
+#define NXFONT_BITMAP_187 {0x81, 0x0, 0xc1, 0x80, 0xe1, 0xc0, 0xf1, 0xe0, 0x78, 0xf0, 0x38, 0x70, 0x38, 0x70, 0x78, 0xf0, 0xf1, 0xe0, 0xe1, 0xc0, 0xc1, 0x80, 0x81, 0x0}
+
+/* onequarter (188) */
+#define NXFONT_METRICS_188 {4, 26, 24, 0, 13, 0}
+#define NXFONT_BITMAP_188 {0x0, 0x0, 0x38, 0x0, 0x6, 0x0, 0x70, 0x0, 0x1e, 0x0, 0x70, 0x0, 0xfe, 0x0, 0xe0, 0x0, 0xfe, 0x1, 0xc0, 0x0, 0xe, 0x1, 0xc0, 0x0, 0xe, 0x3, 0x80, 0x0, 0xe, 0x3, 0x80, 0x0, 0xe, 0x7, 0x0, 0x0, 0xe, 0x7, 0x0, 0x0, 0xe, 0xe, 0x7, 0x0, 0xe, 0x1c, 0xf, 0x0, 0xe, 0x1c, 0x1f, 0x0, 0xe, 0x38, 0x1f, 0x0, 0x0, 0x38, 0x37, 0x0, 0x0, 0x70, 0x67, 0x0, 0x0, 0x70, 0xe7, 0x0, 0x0, 0xe0, 0xc7, 0x0, 0x1, 0xc1, 0x87, 0x0, 0x1, 0xc1, 0xff, 0xc0, 0x3, 0x81, 0xff, 0xc0, 0x3, 0x80, 0x7, 0x0, 0x7, 0x0, 0x7, 0x0, 0x7, 0x0, 0x7, 0x0}
+
+/* onehalf (189) */
+#define NXFONT_METRICS_189 {4, 25, 24, 1, 13, 0}
+#define NXFONT_BITMAP_189 {0x0, 0x0, 0xe0, 0x0, 0xc, 0x1, 0xc0, 0x0, 0x1c, 0x1, 0xc0, 0x0, 0xfc, 0x3, 0x80, 0x0, 0xfc, 0x3, 0x80, 0x0, 0x1c, 0x7, 0x0, 0x0, 0x1c, 0xe, 0x0, 0x0, 0x1c, 0xe, 0x0, 0x0, 0x1c, 0x1c, 0x0, 0x0, 0x1c, 0x1c, 0x0, 0x0, 0x1c, 0x38, 0x7e, 0x0, 0x1c, 0x30, 0xff, 0x0, 0x1c, 0x71, 0xe7, 0x80, 0x1c, 0xe1, 0xc3, 0x80, 0x0, 0xe1, 0xc3, 0x80, 0x1, 0xc0, 0x7, 0x80, 0x1, 0xc0, 0xf, 0x0, 0x3, 0x80, 0x1e, 0x0, 0x7, 0x0, 0x3c, 0x0, 0x7, 0x0, 0x78, 0x0, 0xe, 0x0, 0xf0, 0x0, 0xe, 0x1, 0xff, 0x80, 0x1c, 0x1, 0xff, 0x80, 0x1c, 0x1, 0xff, 0x80}
+
+/* threequarters (190) */
+#define NXFONT_METRICS_190 {4, 25, 24, 1, 13, 0}
+#define NXFONT_BITMAP_190 {0x3f, 0x0, 0x1c, 0x0, 0x7f, 0x80, 0x38, 0x0, 0xf3, 0xc0, 0x38, 0x0, 0xe1, 0xc0, 0x70, 0x0, 0xe1, 0xc0, 0xe0, 0x0, 0x3, 0xc0, 0xe0, 0x0, 0xf, 0x81, 0xc0, 0x0, 0xf, 0x81, 0xc0, 0x0, 0xf, 0xc3, 0x80, 0x0, 0x1, 0xc7, 0x0, 0x0, 0xe1, 0xc7, 0xe, 0x0, 0xe1, 0xce, 0x1e, 0x0, 0xf3, 0xce, 0x1e, 0x0, 0x7f, 0x9c, 0x3e, 0x0, 0x3f, 0x1c, 0x7e, 0x0, 0x0, 0x38, 0xee, 0x0, 0x0, 0x70, 0xce, 0x0, 0x0, 0x71, 0x8e, 0x0, 0x0, 0xe3, 0x8e, 0x0, 0x0, 0xe3, 0xff, 0x80, 0x1, 0xc3, 0xff, 0x80, 0x1, 0xc0, 0xe, 0x0, 0x3, 0x80, 0xe, 0x0, 0x3, 0x80, 0xe, 0x0}
+
+/* questiondown (191) */
+#define NXFONT_METRICS_191 {2, 16, 24, 1, 19, 0}
+#define NXFONT_BITMAP_191 {0x3, 0xe0, 0x3, 0xe0, 0x3, 0xe0, 0x3, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x7, 0xc0, 0x1f, 0x80, 0x3f, 0x80, 0x7f, 0x0, 0x7e, 0x0, 0xfc, 0x0, 0xf8, 0xf, 0xf8, 0xf, 0xf8, 0xf, 0xfc, 0x1f, 0x7e, 0x7f, 0x7f, 0xfe, 0x3f, 0xfe, 0x3f, 0xfc, 0xf, 0xf0}
+
+/* Agrave (192) */
+#define NXFONT_METRICS_192 {3, 22, 31, 0, 6, 0}
+#define NXFONT_BITMAP_192 {0x3, 0xc0, 0x0, 0x1, 0xe0, 0x0, 0x0, 0xf0, 0x0, 0x0, 0x78, 0x0, 0x0, 0x3c, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfc, 0x0, 0x0, 0xfc, 0x0, 0x1, 0xfe, 0x0, 0x1, 0xfe, 0x0, 0x1, 0xfe, 0x0, 0x3, 0xff, 0x0, 0x3, 0xff, 0x0, 0x3, 0xff, 0x0, 0x7, 0xcf, 0x80, 0x7, 0xcf, 0x80, 0x7, 0xcf, 0x80, 0xf, 0x87, 0x80, 0xf, 0x87, 0xc0, 0xf, 0x87, 0xc0, 0x1f, 0x3, 0xc0, 0x1f, 0x3, 0xe0, 0x1f, 0xff, 0xe0, 0x1f, 0xff, 0xe0, 0x3f, 0xff, 0xf0, 0x3f, 0xff, 0xf0, 0x3e, 0x1, 0xf0, 0x7c, 0x0, 0xf8, 0x7c, 0x0, 0xf8, 0xfc, 0x0, 0xfc, 0xf8, 0x0, 0x7c}
+
+/* Aacute (193) */
+#define NXFONT_METRICS_193 {3, 22, 31, 0, 6, 0}
+#define NXFONT_BITMAP_193 {0x0, 0xf, 0x0, 0x0, 0x1e, 0x0, 0x0, 0x3c, 0x0, 0x0, 0x78, 0x0, 0x0, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfc, 0x0, 0x0, 0xfc, 0x0, 0x1, 0xfe, 0x0, 0x1, 0xfe, 0x0, 0x1, 0xfe, 0x0, 0x3, 0xff, 0x0, 0x3, 0xff, 0x0, 0x3, 0xff, 0x0, 0x7, 0xcf, 0x80, 0x7, 0xcf, 0x80, 0x7, 0xcf, 0x80, 0xf, 0x87, 0x80, 0xf, 0x87, 0xc0, 0xf, 0x87, 0xc0, 0x1f, 0x3, 0xc0, 0x1f, 0x3, 0xe0, 0x1f, 0xff, 0xe0, 0x1f, 0xff, 0xe0, 0x3f, 0xff, 0xf0, 0x3f, 0xff, 0xf0, 0x3e, 0x1, 0xf0, 0x7c, 0x0, 0xf8, 0x7c, 0x0, 0xf8, 0xfc, 0x0, 0xfc, 0xf8, 0x0, 0x7c}
+
+/* Acircumflex (194) */
+#define NXFONT_METRICS_194 {3, 22, 31, 0, 6, 0}
+#define NXFONT_BITMAP_194 {0x0, 0x30, 0x0, 0x0, 0x78, 0x0, 0x0, 0xfc, 0x0, 0x1, 0xce, 0x0, 0x3, 0x87, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfc, 0x0, 0x0, 0xfc, 0x0, 0x1, 0xfe, 0x0, 0x1, 0xfe, 0x0, 0x1, 0xfe, 0x0, 0x3, 0xff, 0x0, 0x3, 0xff, 0x0, 0x3, 0xff, 0x0, 0x7, 0xcf, 0x80, 0x7, 0xcf, 0x80, 0x7, 0xcf, 0x80, 0xf, 0x87, 0x80, 0xf, 0x87, 0xc0, 0xf, 0x87, 0xc0, 0x1f, 0x3, 0xc0, 0x1f, 0x3, 0xe0, 0x1f, 0xff, 0xe0, 0x1f, 0xff, 0xe0, 0x3f, 0xff, 0xf0, 0x3f, 0xff, 0xf0, 0x3e, 0x1, 0xf0, 0x7c, 0x0, 0xf8, 0x7c, 0x0, 0xf8, 0xfc, 0x0, 0xfc, 0xf8, 0x0, 0x7c}
+
+/* Atilde (195) */
+#define NXFONT_METRICS_195 {3, 22, 30, 0, 7, 0}
+#define NXFONT_BITMAP_195 {0x0, 0xf1, 0x80, 0x1, 0xff, 0x80, 0x3, 0xff, 0x0, 0x3, 0x1e, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfc, 0x0, 0x0, 0xfc, 0x0, 0x1, 0xfe, 0x0, 0x1, 0xfe, 0x0, 0x1, 0xfe, 0x0, 0x3, 0xff, 0x0, 0x3, 0xff, 0x0, 0x3, 0xff, 0x0, 0x7, 0xcf, 0x80, 0x7, 0xcf, 0x80, 0x7, 0xcf, 0x80, 0xf, 0x87, 0x80, 0xf, 0x87, 0xc0, 0xf, 0x87, 0xc0, 0x1f, 0x3, 0xc0, 0x1f, 0x3, 0xe0, 0x1f, 0xff, 0xe0, 0x1f, 0xff, 0xe0, 0x3f, 0xff, 0xf0, 0x3f, 0xff, 0xf0, 0x3e, 0x1, 0xf0, 0x7c, 0x0, 0xf8, 0x7c, 0x0, 0xf8, 0xfc, 0x0, 0xfc, 0xf8, 0x0, 0x7c}
+
+/* Adieresis (196) */
+#define NXFONT_METRICS_196 {3, 22, 31, 0, 6, 0}
+#define NXFONT_BITMAP_196 {0x3, 0xcf, 0x0, 0x3, 0xcf, 0x0, 0x3, 0xcf, 0x0, 0x3, 0xcf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfc, 0x0, 0x0, 0xfc, 0x0, 0x1, 0xfe, 0x0, 0x1, 0xfe, 0x0, 0x1, 0xfe, 0x0, 0x3, 0xff, 0x0, 0x3, 0xff, 0x0, 0x3, 0xff, 0x0, 0x7, 0xcf, 0x80, 0x7, 0xcf, 0x80, 0x7, 0xcf, 0x80, 0xf, 0x87, 0x80, 0xf, 0x87, 0xc0, 0xf, 0x87, 0xc0, 0x1f, 0x3, 0xc0, 0x1f, 0x3, 0xe0, 0x1f, 0xff, 0xe0, 0x1f, 0xff, 0xe0, 0x3f, 0xff, 0xf0, 0x3f, 0xff, 0xf0, 0x3e, 0x1, 0xf0, 0x7c, 0x0, 0xf8, 0x7c, 0x0, 0xf8, 0xfc, 0x0, 0xfc, 0xf8, 0x0, 0x7c}
+
+/* Aring (197) */
+#define NXFONT_METRICS_197 {3, 22, 31, 0, 6, 0}
+#define NXFONT_BITMAP_197 {0x0, 0x78, 0x0, 0x0, 0xcc, 0x0, 0x0, 0x84, 0x0, 0x0, 0x84, 0x0, 0x0, 0xcc, 0x0, 0x0, 0x78, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfc, 0x0, 0x1, 0xfe, 0x0, 0x1, 0xfe, 0x0, 0x1, 0xfe, 0x0, 0x3, 0xff, 0x0, 0x3, 0xff, 0x0, 0x3, 0xff, 0x0, 0x7, 0xcf, 0x80, 0x7, 0xcf, 0x80, 0x7, 0xcf, 0x80, 0xf, 0x87, 0x80, 0xf, 0x87, 0xc0, 0xf, 0x87, 0xc0, 0x1f, 0x3, 0xc0, 0x1f, 0x3, 0xe0, 0x1f, 0xff, 0xe0, 0x1f, 0xff, 0xe0, 0x3f, 0xff, 0xf0, 0x3f, 0xff, 0xf0, 0x3e, 0x1, 0xf0, 0x7c, 0x0, 0xf8, 0x7c, 0x0, 0xf8, 0xfc, 0x0, 0xfc, 0xf8, 0x0, 0x7c}
+
+/* AE (198) */
+#define NXFONT_METRICS_198 {4, 31, 25, 0, 12, 0}
+#define NXFONT_BITMAP_198 {0x0, 0xff, 0xff, 0xfc, 0x0, 0xff, 0xff, 0xfc, 0x0, 0xff, 0xff, 0xfc, 0x1, 0xff, 0xff, 0xfc, 0x1, 0xf3, 0xc0, 0x0, 0x1, 0xe3, 0xc0, 0x0, 0x3, 0xe3, 0xc0, 0x0, 0x3, 0xe3, 0xc0, 0x0, 0x3, 0xc3, 0xc0, 0x0, 0x7, 0xc3, 0xc0, 0x0, 0x7, 0xc3, 0xc0, 0x0, 0x7, 0xc3, 0xff, 0xf8, 0xf, 0x83, 0xff, 0xf8, 0xf, 0x83, 0xff, 0xf8, 0xf, 0x83, 0xff, 0xf8, 0x1f, 0x3, 0xc0, 0x0, 0x1f, 0xff, 0xc0, 0x0, 0x1f, 0xff, 0xc0, 0x0, 0x3f, 0xff, 0xc0, 0x0, 0x3f, 0xff, 0xc0, 0x0, 0x3e, 0x3, 0xc0, 0x0, 0x7c, 0x3, 0xff, 0xfe, 0x7c, 0x3, 0xff, 0xfe, 0xf8, 0x3, 0xff, 0xfe, 0xf8, 0x3, 0xff, 0xfe}
+
+/* Ccedilla (199) */
+#define NXFONT_METRICS_199 {3, 21, 32, 1, 12, 0}
+#define NXFONT_BITMAP_199 {0x1, 0xfe, 0x0, 0x7, 0xff, 0x80, 0xf, 0xff, 0xc0, 0x1f, 0xff, 0xe0, 0x3f, 0x87, 0xf0, 0x3e, 0x1, 0xf0, 0x7c, 0x1, 0xf0, 0x7c, 0x0, 0xf8, 0x7c, 0x0, 0xf8, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0x7c, 0x0, 0xf8, 0x7c, 0x0, 0xf8, 0x7e, 0x1, 0xf8, 0x3e, 0x1, 0xf0, 0x3f, 0x87, 0xf0, 0x1f, 0xff, 0xe0, 0xf, 0xff, 0xc0, 0x7, 0xff, 0x80, 0x1, 0xfc, 0x0, 0x0, 0x60, 0x0, 0x0, 0x60, 0x0, 0x0, 0xf8, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x1c, 0x0, 0x1, 0xf8, 0x0, 0x1, 0xf0, 0x0}
+
+/* Egrave (200) */
+#define NXFONT_METRICS_200 {3, 18, 31, 2, 6, 0}
+#define NXFONT_BITMAP_200 {0x1e, 0x0, 0x0, 0xf, 0x0, 0x0, 0x7, 0x80, 0x0, 0x3, 0xc0, 0x0, 0x1, 0xe0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x80, 0xff, 0xff, 0x80, 0xff, 0xff, 0x80, 0xff, 0xff, 0x80, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xc0}
+
+/* Eacute (201) */
+#define NXFONT_METRICS_201 {3, 18, 31, 2, 6, 0}
+#define NXFONT_BITMAP_201 {0x0, 0x78, 0x0, 0x0, 0xf0, 0x0, 0x1, 0xe0, 0x0, 0x3, 0xc0, 0x0, 0x7, 0x80, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x80, 0xff, 0xff, 0x80, 0xff, 0xff, 0x80, 0xff, 0xff, 0x80, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xc0}
+
+/* Ecircumflex (202) */
+#define NXFONT_METRICS_202 {3, 18, 31, 2, 6, 0}
+#define NXFONT_BITMAP_202 {0x0, 0xc0, 0x0, 0x1, 0xe0, 0x0, 0x3, 0xf0, 0x0, 0x7, 0x38, 0x0, 0xe, 0x1c, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x80, 0xff, 0xff, 0x80, 0xff, 0xff, 0x80, 0xff, 0xff, 0x80, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xc0}
+
+/* Edieresis (203) */
+#define NXFONT_METRICS_203 {3, 18, 31, 2, 6, 0}
+#define NXFONT_BITMAP_203 {0x1e, 0x3c, 0x0, 0x1e, 0x3c, 0x0, 0x1e, 0x3c, 0x0, 0x1e, 0x3c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x80, 0xff, 0xff, 0x80, 0xff, 0xff, 0x80, 0xff, 0xff, 0x80, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xc0}
+
+/* Igrave (204) */
+#define NXFONT_METRICS_204 {1, 8, 31, 0, 6, 0}
+#define NXFONT_BITMAP_204 {0xf0, 0x78, 0x3c, 0x1e, 0xf, 0x0, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e}
+
+/* Iacute (205) */
+#define NXFONT_METRICS_205 {1, 8, 31, 2, 6, 0}
+#define NXFONT_BITMAP_205 {0xf, 0x1e, 0x3c, 0x78, 0xf0, 0x0, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8}
+
+/* Icircumflex (206) */
+#define NXFONT_METRICS_206 {2, 10, 31, 0, 6, 0}
+#define NXFONT_BITMAP_206 {0xc, 0x0, 0x1e, 0x0, 0x3f, 0x0, 0x73, 0x80, 0xe1, 0xc0, 0x0, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0}
+
+/* Idieresis (207) */
+#define NXFONT_METRICS_207 {2, 10, 31, 0, 6, 0}
+#define NXFONT_BITMAP_207 {0xf3, 0xc0, 0xf3, 0xc0, 0xf3, 0xc0, 0xf3, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0, 0x3e, 0x0}
+
+/* Eth (208) -- NOTE: Xoffset should be -1, not 0. */
+#define NXFONT_METRICS_208 {3, 23, 25, 0, 12, 0}
+#define NXFONT_BITMAP_208 {0x1f, 0xff, 0x80, 0x1f, 0xff, 0xe0, 0x1f, 0xff, 0xf0, 0x1f, 0xff, 0xf8, 0x1f, 0x7, 0xf8, 0x1f, 0x0, 0xfc, 0x1f, 0x0, 0xfc, 0x1f, 0x0, 0x7c, 0x1f, 0x0, 0x7e, 0x1f, 0x0, 0x3e, 0x1f, 0x0, 0x3e, 0xff, 0xf0, 0x3e, 0xff, 0xf0, 0x3e, 0xff, 0xf0, 0x3e, 0x1f, 0x0, 0x3e, 0x1f, 0x0, 0x3e, 0x1f, 0x0, 0x7c, 0x1f, 0x0, 0x7c, 0x1f, 0x0, 0x7c, 0x1f, 0x0, 0xf8, 0x1f, 0x3, 0xf8, 0x1f, 0xff, 0xf0, 0x1f, 0xff, 0xf0, 0x1f, 0xff, 0xc0, 0x1f, 0xff, 0x80}
+
+/* Ntilde (209) */
+#define NXFONT_METRICS_209 {3, 19, 30, 2, 7, 0}
+#define NXFONT_BITMAP_209 {0x3, 0xc6, 0x0, 0x7, 0xfe, 0x0, 0xf, 0xfc, 0x0, 0xc, 0x78, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x3, 0xe0, 0xfc, 0x3, 0xe0, 0xfc, 0x3, 0xe0, 0xfe, 0x3, 0xe0, 0xfe, 0x3, 0xe0, 0xff, 0x3, 0xe0, 0xff, 0x3, 0xe0, 0xff, 0x83, 0xe0, 0xff, 0xc3, 0xe0, 0xfb, 0xc3, 0xe0, 0xfb, 0xe3, 0xe0, 0xf9, 0xe3, 0xe0, 0xf9, 0xf3, 0xe0, 0xf8, 0xf3, 0xe0, 0xf8, 0xfb, 0xe0, 0xf8, 0x7b, 0xe0, 0xf8, 0x3f, 0xe0, 0xf8, 0x3f, 0xe0, 0xf8, 0x1f, 0xe0, 0xf8, 0x1f, 0xe0, 0xf8, 0xf, 0xe0, 0xf8, 0xf, 0xe0, 0xf8, 0x7, 0xe0, 0xf8, 0x7, 0xe0, 0xf8, 0x3, 0xe0}
+
+/* Ograve (210) */
+#define NXFONT_METRICS_210 {3, 23, 31, 1, 6, 0}
+#define NXFONT_BITMAP_210 {0x1, 0xe0, 0x0, 0x0, 0xf0, 0x0, 0x0, 0x78, 0x0, 0x0, 0x3c, 0x0, 0x0, 0x1e, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0x0, 0x7, 0xff, 0xc0, 0xf, 0xff, 0xe0, 0x1f, 0xff, 0xf0, 0x3f, 0xc7, 0xf8, 0x3f, 0x1, 0xf8, 0x7e, 0x0, 0xfc, 0x7c, 0x0, 0x7c, 0x7c, 0x0, 0x7c, 0xf8, 0x0, 0x3e, 0xf8, 0x0, 0x3e, 0xf8, 0x0, 0x3e, 0xf8, 0x0, 0x3e, 0xf8, 0x0, 0x3e, 0xf8, 0x0, 0x3e, 0xf8, 0x0, 0x3e, 0x7c, 0x0, 0x7c, 0x7c, 0x0, 0x7c, 0x7e, 0x0, 0xfc, 0x3f, 0x1, 0xf8, 0x3f, 0xc7, 0xf8, 0x1f, 0xff, 0xf0, 0xf, 0xff, 0xe0, 0x7, 0xff, 0xc0, 0x1, 0xff, 0x0}
+
+/* Oacute (211) */
+#define NXFONT_METRICS_211 {3, 23, 31, 1, 6, 0}
+#define NXFONT_BITMAP_211 {0x0, 0x7, 0x80, 0x0, 0xf, 0x0, 0x0, 0x1e, 0x0, 0x0, 0x3c, 0x0, 0x0, 0x78, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0x0, 0x7, 0xff, 0xc0, 0xf, 0xff, 0xe0, 0x1f, 0xff, 0xf0, 0x3f, 0xc7, 0xf8, 0x3f, 0x1, 0xf8, 0x7e, 0x0, 0xfc, 0x7c, 0x0, 0x7c, 0x7c, 0x0, 0x7c, 0xf8, 0x0, 0x3e, 0xf8, 0x0, 0x3e, 0xf8, 0x0, 0x3e, 0xf8, 0x0, 0x3e, 0xf8, 0x0, 0x3e, 0xf8, 0x0, 0x3e, 0xf8, 0x0, 0x3e, 0x7c, 0x0, 0x7c, 0x7c, 0x0, 0x7c, 0x7e, 0x0, 0xfc, 0x3f, 0x1, 0xf8, 0x3f, 0xc7, 0xf8, 0x1f, 0xff, 0xf0, 0xf, 0xff, 0xe0, 0x7, 0xff, 0xc0, 0x1, 0xff, 0x0}
+
+/* Ocircumflex (212) */
+#define NXFONT_METRICS_212 {3, 23, 31, 1, 6, 0}
+#define NXFONT_BITMAP_212 {0x0, 0x18, 0x0, 0x0, 0x3c, 0x0, 0x0, 0x7e, 0x0, 0x0, 0xe7, 0x0, 0x1, 0xc3, 0x80, 0x0, 0x0, 0x0, 0x1, 0xff, 0x0, 0x7, 0xff, 0xc0, 0xf, 0xff, 0xe0, 0x1f, 0xff, 0xf0, 0x3f, 0xc7, 0xf8, 0x3f, 0x1, 0xf8, 0x7e, 0x0, 0xfc, 0x7c, 0x0, 0x7c, 0x7c, 0x0, 0x7c, 0xf8, 0x0, 0x3e, 0xf8, 0x0, 0x3e, 0xf8, 0x0, 0x3e, 0xf8, 0x0, 0x3e, 0xf8, 0x0, 0x3e, 0xf8, 0x0, 0x3e, 0xf8, 0x0, 0x3e, 0x7c, 0x0, 0x7c, 0x7c, 0x0, 0x7c, 0x7e, 0x0, 0xfc, 0x3f, 0x1, 0xf8, 0x3f, 0xc7, 0xf8, 0x1f, 0xff, 0xf0, 0xf, 0xff, 0xe0, 0x7, 0xff, 0xc0, 0x1, 0xff, 0x0}
+
+/* Otilde (213) */
+#define NXFONT_METRICS_213 {3, 23, 30, 1, 7, 0}
+#define NXFONT_BITMAP_213 {0x0, 0x78, 0xc0, 0x0, 0xff, 0xc0, 0x1, 0xff, 0x80, 0x1, 0x8f, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0x0, 0x7, 0xff, 0xc0, 0xf, 0xff, 0xe0, 0x1f, 0xff, 0xf0, 0x3f, 0xc7, 0xf8, 0x3f, 0x1, 0xf8, 0x7e, 0x0, 0xfc, 0x7c, 0x0, 0x7c, 0x7c, 0x0, 0x7c, 0xf8, 0x0, 0x3e, 0xf8, 0x0, 0x3e, 0xf8, 0x0, 0x3e, 0xf8, 0x0, 0x3e, 0xf8, 0x0, 0x3e, 0xf8, 0x0, 0x3e, 0xf8, 0x0, 0x3e, 0x7c, 0x0, 0x7c, 0x7c, 0x0, 0x7c, 0x7e, 0x0, 0xfc, 0x3f, 0x1, 0xf8, 0x3f, 0xc7, 0xf8, 0x1f, 0xff, 0xf0, 0xf, 0xff, 0xe0, 0x7, 0xff, 0xc0, 0x1, 0xff, 0x0}
+
+/* Odieresis (214) */
+#define NXFONT_METRICS_214 {3, 23, 31, 1, 6, 0}
+#define NXFONT_BITMAP_214 {0x1, 0xe7, 0x80, 0x1, 0xe7, 0x80, 0x1, 0xe7, 0x80, 0x1, 0xe7, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0x0, 0x7, 0xff, 0xc0, 0xf, 0xff, 0xe0, 0x1f, 0xff, 0xf0, 0x3f, 0xc7, 0xf8, 0x3f, 0x1, 0xf8, 0x7e, 0x0, 0xfc, 0x7c, 0x0, 0x7c, 0x7c, 0x0, 0x7c, 0xf8, 0x0, 0x3e, 0xf8, 0x0, 0x3e, 0xf8, 0x0, 0x3e, 0xf8, 0x0, 0x3e, 0xf8, 0x0, 0x3e, 0xf8, 0x0, 0x3e, 0xf8, 0x0, 0x3e, 0x7c, 0x0, 0x7c, 0x7c, 0x0, 0x7c, 0x7e, 0x0, 0xfc, 0x3f, 0x1, 0xf8, 0x3f, 0xc7, 0xf8, 0x1f, 0xff, 0xf0, 0xf, 0xff, 0xe0, 0x7, 0xff, 0xc0, 0x1, 0xff, 0x0}
+
+/* multiply (215) */
+#define NXFONT_METRICS_215 {2, 15, 16, 2, 21, 0}
+#define NXFONT_BITMAP_215 {0x20, 0x8, 0x70, 0x1c, 0xf8, 0x3e, 0xfc, 0x7e, 0x7e, 0xfc, 0x3f, 0xf8, 0x1f, 0xf0, 0xf, 0xe0, 0xf, 0xe0, 0x1f, 0xf0, 0x3f, 0xf8, 0x7e, 0xfc, 0xfc, 0x7e, 0xf8, 0x3e, 0x70, 0x1c, 0x20, 0x8}
+
+/* Oslash (216) */
+#define NXFONT_METRICS_216 {3, 24, 25, 1, 12, 0}
+#define NXFONT_BITMAP_216 {0x1, 0xff, 0x7, 0x7, 0xff, 0xce, 0xf, 0xff, 0xfc, 0x1f, 0xff, 0xf8, 0x3f, 0xc7, 0xf8, 0x3f, 0x0, 0xf8, 0x7e, 0x1, 0xfc, 0x7c, 0x3, 0xfc, 0x7c, 0x7, 0xbc, 0xf8, 0x7, 0x3e, 0xf8, 0xe, 0x3e, 0xf8, 0x1c, 0x3e, 0xf8, 0x38, 0x3e, 0xf8, 0x70, 0x3e, 0xf8, 0xe0, 0x3e, 0xf8, 0xe0, 0x3e, 0x7d, 0xc0, 0x7c, 0x7f, 0x80, 0x7c, 0x7f, 0x0, 0xfc, 0x3f, 0x1, 0xf8, 0x3f, 0xc7, 0xf8, 0x3f, 0xff, 0xf0, 0x3f, 0xff, 0xe0, 0x77, 0xff, 0xc0, 0xe1, 0xff, 0x0}
+
+/* Ugrave (217) */
+#define NXFONT_METRICS_217 {3, 19, 31, 2, 6, 0}
+#define NXFONT_BITMAP_217 {0x7, 0x80, 0x0, 0x3, 0xc0, 0x0, 0x1, 0xe0, 0x0, 0x0, 0xf0, 0x0, 0x0, 0x78, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xfc, 0x7, 0xe0, 0x7f, 0x1f, 0xc0, 0x7f, 0xff, 0xc0, 0x3f, 0xff, 0x80, 0x1f, 0xff, 0x0, 0x7, 0xfc, 0x0}
+
+/* Uacute (218) */
+#define NXFONT_METRICS_218 {3, 19, 31, 2, 6, 0}
+#define NXFONT_BITMAP_218 {0x0, 0x1e, 0x0, 0x0, 0x3c, 0x0, 0x0, 0x78, 0x0, 0x0, 0xf0, 0x0, 0x1, 0xe0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xfc, 0x7, 0xe0, 0x7f, 0x1f, 0xc0, 0x7f, 0xff, 0xc0, 0x3f, 0xff, 0x80, 0x1f, 0xff, 0x0, 0x7, 0xfc, 0x0}
+
+/* Ucircumflex (219) */
+#define NXFONT_METRICS_219 {3, 19, 31, 2, 6, 0}
+#define NXFONT_BITMAP_219 {0x0, 0x60, 0x0, 0x0, 0xf0, 0x0, 0x1, 0xf8, 0x0, 0x3, 0x9c, 0x0, 0x7, 0xe, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xfc, 0x7, 0xe0, 0x7f, 0x1f, 0xc0, 0x7f, 0xff, 0xc0, 0x3f, 0xff, 0x80, 0x1f, 0xff, 0x0, 0x7, 0xfc, 0x0}
+
+/* Udieresis (220) */
+#define NXFONT_METRICS_220 {3, 19, 31, 2, 6, 0}
+#define NXFONT_BITMAP_220 {0xf, 0x1e, 0x0, 0xf, 0x1e, 0x0, 0xf, 0x1e, 0x0, 0xf, 0x1e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xf8, 0x3, 0xe0, 0xfc, 0x7, 0xe0, 0x7f, 0x1f, 0xc0, 0x7f, 0xff, 0xc0, 0x3f, 0xff, 0x80, 0x1f, 0xff, 0x0, 0x7, 0xfc, 0x0}
+
+/* Yacute (221) */
+#define NXFONT_METRICS_221 {3, 20, 31, 1, 6, 0}
+#define NXFONT_BITMAP_221 {0x0, 0x1e, 0x0, 0x0, 0x3c, 0x0, 0x0, 0x78, 0x0, 0x0, 0xf0, 0x0, 0x1, 0xe0, 0x0, 0x0, 0x0, 0x0, 0xfc, 0x3, 0xf0, 0xfc, 0x3, 0xf0, 0x7e, 0x7, 0xe0, 0x3e, 0x7, 0xc0, 0x3f, 0xf, 0xc0, 0x3f, 0xf, 0x80, 0x1f, 0xf, 0x80, 0x1f, 0x9f, 0x0, 0xf, 0x9f, 0x0, 0xf, 0xfe, 0x0, 0x7, 0xfe, 0x0, 0x7, 0xfc, 0x0, 0x3, 0xfc, 0x0, 0x3, 0xf8, 0x0, 0x3, 0xf8, 0x0, 0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0}
+
+/* Thorn (222) */
+#define NXFONT_METRICS_222 {3, 18, 25, 2, 12, 0}
+#define NXFONT_BITMAP_222 {0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xff, 0xf8, 0x0, 0xff, 0xfe, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x80, 0xf8, 0x1f, 0x80, 0xf8, 0xf, 0xc0, 0xf8, 0x7, 0xc0, 0xf8, 0x7, 0xc0, 0xf8, 0x7, 0xc0, 0xf8, 0x7, 0xc0, 0xf8, 0xf, 0xc0, 0xf8, 0x1f, 0x80, 0xff, 0xff, 0x80, 0xff, 0xff, 0x0, 0xff, 0xfe, 0x0, 0xff, 0xfc, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0}
+
+/* germandbls (223) */
+#define NXFONT_METRICS_223 {3, 17, 25, 2, 12, 0}
+#define NXFONT_BITMAP_223 {0xf, 0xc0, 0x0, 0x3f, 0xf0, 0x0, 0x7f, 0xfc, 0x0, 0xff, 0xfc, 0x0, 0xf8, 0x7e, 0x0, 0xf8, 0x3e, 0x0, 0xf0, 0x3e, 0x0, 0xf0, 0x3e, 0x0, 0xf0, 0x7c, 0x0, 0xf0, 0xfc, 0x0, 0xf1, 0xf8, 0x0, 0xf1, 0xfc, 0x0, 0xf1, 0xfe, 0x0, 0xf0, 0x7f, 0x0, 0xf0, 0x1f, 0x0, 0xf0, 0x1f, 0x80, 0xf0, 0xf, 0x80, 0xf0, 0xf, 0x80, 0xf0, 0xf, 0x80, 0xf0, 0x1f, 0x80, 0xf0, 0x3f, 0x0, 0xf1, 0xff, 0x0, 0xf1, 0xfe, 0x0, 0xf1, 0xfc, 0x0, 0xf1, 0xf0, 0x0}
+
+/* agrave (224) */
+#define NXFONT_METRICS_224 {2, 15, 25, 1, 12, 0}
+#define NXFONT_BITMAP_224 {0xf, 0x0, 0x7, 0x80, 0x3, 0x80, 0x1, 0xc0, 0x0, 0xe0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x3f, 0xfc, 0x7f, 0xfc, 0x7c, 0x3e, 0xf8, 0x1e, 0xf8, 0x1e, 0x1, 0xfe, 0xf, 0xfe, 0x3f, 0xfe, 0x7f, 0x1e, 0xf8, 0x1e, 0xf0, 0x1e, 0xf0, 0x3e, 0xf8, 0x7e, 0xff, 0xfe, 0xff, 0xfe, 0x7f, 0xde, 0x3f, 0x1e}
+
+/* aacute (225) */
+#define NXFONT_METRICS_225 {2, 15, 25, 1, 12, 0}
+#define NXFONT_BITMAP_225 {0x0, 0x78, 0x0, 0xf0, 0x0, 0xe0, 0x1, 0xc0, 0x3, 0x80, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x3f, 0xfc, 0x7f, 0xfc, 0x7c, 0x3e, 0xf8, 0x1e, 0xf8, 0x1e, 0x1, 0xfe, 0xf, 0xfe, 0x3f, 0xfe, 0x7f, 0x1e, 0xf8, 0x1e, 0xf0, 0x1e, 0xf0, 0x3e, 0xf8, 0x7e, 0xff, 0xfe, 0xff, 0xfe, 0x7f, 0xde, 0x3f, 0x1e}
+
+/* acircumflex (226) */
+#define NXFONT_METRICS_226 {2, 15, 25, 1, 12, 0}
+#define NXFONT_BITMAP_226 {0x1, 0x80, 0x3, 0xc0, 0x7, 0xe0, 0xe, 0x70, 0x1c, 0x38, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x3f, 0xfc, 0x7f, 0xfc, 0x7c, 0x3e, 0xf8, 0x1e, 0xf8, 0x1e, 0x1, 0xfe, 0xf, 0xfe, 0x3f, 0xfe, 0x7f, 0x1e, 0xf8, 0x1e, 0xf0, 0x1e, 0xf0, 0x3e, 0xf8, 0x7e, 0xff, 0xfe, 0xff, 0xfe, 0x7f, 0xde, 0x3f, 0x1e}
+
+/* atilde (227) */
+#define NXFONT_METRICS_227 {2, 15, 24, 1, 13, 0}
+#define NXFONT_BITMAP_227 {0x7, 0x8c, 0xf, 0xfc, 0x1f, 0xf8, 0x18, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x3f, 0xfc, 0x7f, 0xfc, 0x7c, 0x3e, 0xf8, 0x1e, 0xf8, 0x1e, 0x1, 0xfe, 0xf, 0xfe, 0x3f, 0xfe, 0x7f, 0x1e, 0xf8, 0x1e, 0xf0, 0x1e, 0xf0, 0x3e, 0xf8, 0x7e, 0xff, 0xfe, 0xff, 0xfe, 0x7f, 0xde, 0x3f, 0x1e}
+
+/* adieresis (228) */
+#define NXFONT_METRICS_228 {2, 15, 24, 1, 13, 0}
+#define NXFONT_BITMAP_228 {0x1e, 0x78, 0x1e, 0x78, 0x1e, 0x78, 0x1e, 0x78, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x3f, 0xfc, 0x7f, 0xfc, 0x7c, 0x3e, 0xf8, 0x1e, 0xf8, 0x1e, 0x1, 0xfe, 0xf, 0xfe, 0x3f, 0xfe, 0x7f, 0x1e, 0xf8, 0x1e, 0xf0, 0x1e, 0xf0, 0x3e, 0xf8, 0x7e, 0xff, 0xfe, 0xff, 0xfe, 0x7f, 0xde, 0x3f, 0x1e}
+
+/* aring (229) */
+#define NXFONT_METRICS_229 {2, 15, 25, 1, 12, 0}
+#define NXFONT_BITMAP_229 {0x3, 0xc0, 0x6, 0x60, 0x4, 0x20, 0x4, 0x20, 0x6, 0x60, 0x3, 0xc0, 0x0, 0x0, 0xf, 0xf0, 0x3f, 0xfc, 0x7f, 0xfc, 0x7c, 0x3e, 0xf8, 0x1e, 0xf8, 0x1e, 0x1, 0xfe, 0xf, 0xfe, 0x3f, 0xfe, 0x7f, 0x1e, 0xf8, 0x1e, 0xf8, 0x1e, 0xf0, 0x3e, 0xf8, 0x7e, 0xff, 0xfe, 0xff, 0xfe, 0x7f, 0xde, 0x3f, 0x1e}
+
+/* ae (230) */
+#define NXFONT_METRICS_230 {4, 26, 19, 1, 18, 0}
+#define NXFONT_BITMAP_230 {0x7, 0xe0, 0xf8, 0x0, 0x1f, 0xfb, 0xfe, 0x0, 0x3f, 0xff, 0xff, 0x0, 0x3f, 0xff, 0xff, 0x0, 0x7c, 0x3f, 0xf, 0x80, 0x78, 0x1e, 0x7, 0x80, 0x78, 0x1e, 0x7, 0xc0, 0x0, 0x3e, 0x7, 0xc0, 0x7, 0xff, 0xff, 0xc0, 0x3f, 0xff, 0xff, 0xc0, 0x7f, 0xff, 0xff, 0xc0, 0x7c, 0x1e, 0x0, 0x0, 0xf8, 0x1e, 0x0, 0x0, 0xf8, 0x1e, 0x7, 0xc0, 0xfc, 0x3f, 0xf, 0xc0, 0xff, 0xff, 0xff, 0x80, 0x7f, 0xf7, 0xff, 0x0, 0x3f, 0xe3, 0xfe, 0x0, 0xf, 0x81, 0xf8, 0x0}
+
+/* ccedilla (231) */
+#define NXFONT_METRICS_231 {2, 15, 25, 1, 19, 0}
+#define NXFONT_BITMAP_231 {0x7, 0xe0, 0x1f, 0xf8, 0x3f, 0xfc, 0x3f, 0xfc, 0x7c, 0x3e, 0x78, 0x1e, 0xf8, 0x1e, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf8, 0x1e, 0xf8, 0x1e, 0x7c, 0x3e, 0x7f, 0xfc, 0x3f, 0xf8, 0x1f, 0xf8, 0x7, 0xe0, 0x3, 0x0, 0x3, 0x0, 0x7, 0xc0, 0x0, 0xe0, 0x0, 0xe0, 0xf, 0xc0, 0xf, 0x80}
+
+/* egrave (232) */
+#define NXFONT_METRICS_232 {2, 16, 25, 1, 12, 0}
+#define NXFONT_BITMAP_232 {0xf, 0x0, 0x7, 0x80, 0x3, 0x80, 0x1, 0xc0, 0x0, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xe0, 0x1f, 0xf8, 0x3f, 0xfc, 0x7f, 0xfe, 0x7c, 0x3e, 0xf8, 0x1e, 0xf0, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x0, 0xf0, 0x0, 0xf8, 0x1e, 0x7c, 0x3e, 0x7f, 0xfe, 0x3f, 0xfc, 0x1f, 0xf0, 0x7, 0xc0}
+
+/* eacute (233) */
+#define NXFONT_METRICS_233 {2, 16, 25, 1, 12, 0}
+#define NXFONT_BITMAP_233 {0x0, 0x78, 0x0, 0xf0, 0x0, 0xe0, 0x1, 0xc0, 0x3, 0x80, 0x0, 0x0, 0x0, 0x0, 0x7, 0xe0, 0x1f, 0xf8, 0x3f, 0xfc, 0x7f, 0xfe, 0x7c, 0x3e, 0xf8, 0x1e, 0xf0, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x0, 0xf0, 0x0, 0xf8, 0x1e, 0x7c, 0x3e, 0x7f, 0xfe, 0x3f, 0xfc, 0x1f, 0xf0, 0x7, 0xc0}
+
+/* ecircumflex (234) */
+#define NXFONT_METRICS_234 {2, 16, 25, 1, 12, 0}
+#define NXFONT_BITMAP_234 {0x1, 0x80, 0x3, 0xc0, 0x7, 0xe0, 0xe, 0x70, 0x1c, 0x38, 0x0, 0x0, 0x0, 0x0, 0x7, 0xe0, 0x1f, 0xf8, 0x3f, 0xfc, 0x7f, 0xfe, 0x7c, 0x3e, 0xf8, 0x1e, 0xf0, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x0, 0xf0, 0x0, 0xf8, 0x1e, 0x7c, 0x3e, 0x7f, 0xfe, 0x3f, 0xfc, 0x1f, 0xf0, 0x7, 0xc0}
+
+/* edieresis (235) */
+#define NXFONT_METRICS_235 {2, 16, 24, 1, 13, 0}
+#define NXFONT_BITMAP_235 {0x1e, 0x78, 0x1e, 0x78, 0x1e, 0x78, 0x1e, 0x78, 0x0, 0x0, 0x0, 0x0, 0x7, 0xe0, 0x1f, 0xf8, 0x3f, 0xfc, 0x7f, 0xfe, 0x7c, 0x3e, 0xf8, 0x1e, 0xf0, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x0, 0xf0, 0x0, 0xf8, 0x1e, 0x7c, 0x3e, 0x7f, 0xfe, 0x3f, 0xfc, 0x1f, 0xf0, 0x7, 0xc0}
+
+/* igrave (236) */
+#define NXFONT_METRICS_236 {1, 7, 25, 1, 12, 0}
+#define NXFONT_BITMAP_236 {0xf0, 0x78, 0x38, 0x1c, 0xe, 0x0, 0x0, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e}
+
+/* iacute (237) */
+#define NXFONT_METRICS_237 {1, 6, 25, 2, 12, 0}
+#define NXFONT_BITMAP_237 {0x3c, 0x38, 0x70, 0x70, 0xe0, 0x0, 0x0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0}
+
+/* icircumflex (238) -- NOTE: Xoffset should be -1, not 0. */
+#define NXFONT_METRICS_238 {2, 10, 25, 0, 12, 0}
+#define NXFONT_BITMAP_238 {0xc, 0x0, 0x1e, 0x0, 0x3f, 0x0, 0x73, 0x80, 0xe1, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0}
+
+/* idieresis (239) - NOTE: Xoffset should be -1, not 0. */
+#define NXFONT_METRICS_239 {2, 10, 24, 0, 13, 0}
+#define NXFONT_BITMAP_239 {0xf3, 0xc0, 0xf3, 0xc0, 0xf3, 0xc0, 0xf3, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0}
+
+/* eth (240) */
+#define NXFONT_METRICS_240 {3, 17, 26, 1, 11, 0}
+#define NXFONT_BITMAP_240 {0x30, 0x0, 0x0, 0x78, 0x20, 0x0, 0x7c, 0xf0, 0x0, 0x3f, 0xe0, 0x0, 0x1f, 0xc0, 0x0, 0x3f, 0xe0, 0x0, 0x73, 0xf0, 0x0, 0x21, 0xf8, 0x0, 0x7, 0xfc, 0x0, 0x1f, 0xfe, 0x0, 0x3f, 0xfe, 0x0, 0x7f, 0xff, 0x0, 0x7c, 0x1f, 0x0, 0xf8, 0xf, 0x80, 0xf8, 0xf, 0x80, 0xf0, 0x7, 0x80, 0xf0, 0x7, 0x80, 0xf0, 0x7, 0x80, 0xf8, 0xf, 0x80, 0xf8, 0xf, 0x80, 0xfc, 0x1f, 0x80, 0x7e, 0x3f, 0x0, 0x7f, 0xff, 0x0, 0x3f, 0xfe, 0x0, 0x1f, 0xfc, 0x0, 0x7, 0xf0, 0x0}
+
+/* ntilde (241) */
+#define NXFONT_METRICS_241 {2, 15, 24, 2, 13, 0}
+#define NXFONT_BITMAP_241 {0xf, 0x18, 0x1f, 0xf8, 0x3f, 0xf0, 0x31, 0xe0, 0x0, 0x0, 0x0, 0x0, 0xf3, 0xf0, 0xf7, 0xf8, 0xff, 0xfc, 0xff, 0xfe, 0xfc, 0x3e, 0xf8, 0x3e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e}
+
+/* ograve (242) */
+#define NXFONT_METRICS_242 {3, 17, 25, 1, 12, 0}
+#define NXFONT_BITMAP_242 {0x7, 0x80, 0x0, 0x3, 0xc0, 0x0, 0x1, 0xc0, 0x0, 0x1, 0xe0, 0x0, 0x0, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf0, 0x0, 0x1f, 0xfc, 0x0, 0x3f, 0xfe, 0x0, 0x7f, 0xff, 0x0, 0x7c, 0x1f, 0x0, 0xf8, 0xf, 0x80, 0xf8, 0xf, 0x80, 0xf0, 0x7, 0x80, 0xf0, 0x7, 0x80, 0xf0, 0x7, 0x80, 0xf0, 0x7, 0x80, 0xf8, 0xf, 0x80, 0xf8, 0xf, 0x80, 0x7c, 0x1f, 0x0, 0x7f, 0xff, 0x0, 0x3f, 0xfe, 0x0, 0x1f, 0xfc, 0x0, 0x7, 0xf0, 0x0}
+
+/* oacute (243) */
+#define NXFONT_METRICS_243 {3, 17, 25, 1, 12, 0}
+#define NXFONT_BITMAP_243 {0x0, 0x78, 0x0, 0x0, 0xf0, 0x0, 0x0, 0xe0, 0x0, 0x1, 0xc0, 0x0, 0x3, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf0, 0x0, 0x1f, 0xfc, 0x0, 0x3f, 0xfe, 0x0, 0x7f, 0xff, 0x0, 0x7c, 0x1f, 0x0, 0xf8, 0xf, 0x80, 0xf8, 0xf, 0x80, 0xf0, 0x7, 0x80, 0xf0, 0x7, 0x80, 0xf0, 0x7, 0x80, 0xf0, 0x7, 0x80, 0xf8, 0xf, 0x80, 0xf8, 0xf, 0x80, 0x7c, 0x1f, 0x0, 0x7f, 0xff, 0x0, 0x3f, 0xfe, 0x0, 0x1f, 0xfc, 0x0, 0x7, 0xf0, 0x0}
+
+/* ocircumflex (244) */
+#define NXFONT_METRICS_244 {3, 17, 25, 1, 12, 0}
+#define NXFONT_BITMAP_244 {0x0, 0xc0, 0x0, 0x1, 0xe0, 0x0, 0x3, 0xf0, 0x0, 0x7, 0x38, 0x0, 0xe, 0x1c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf0, 0x0, 0x1f, 0xfc, 0x0, 0x3f, 0xfe, 0x0, 0x7f, 0xff, 0x0, 0x7c, 0x1f, 0x0, 0xf8, 0xf, 0x80, 0xf8, 0xf, 0x80, 0xf0, 0x7, 0x80, 0xf0, 0x7, 0x80, 0xf0, 0x7, 0x80, 0xf0, 0x7, 0x80, 0xf8, 0xf, 0x80, 0xf8, 0xf, 0x80, 0x7c, 0x1f, 0x0, 0x7f, 0xff, 0x0, 0x3f, 0xfe, 0x0, 0x1f, 0xfc, 0x0, 0x7, 0xf0, 0x0}
+
+/* otilde (245) */
+#define NXFONT_METRICS_245 {3, 17, 24, 1, 13, 0}
+#define NXFONT_BITMAP_245 {0x7, 0x8c, 0x0, 0xf, 0xfc, 0x0, 0x1f, 0xf8, 0x0, 0x18, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf0, 0x0, 0x1f, 0xfc, 0x0, 0x3f, 0xfe, 0x0, 0x7f, 0xff, 0x0, 0x7c, 0x1f, 0x0, 0xf8, 0xf, 0x80, 0xf8, 0xf, 0x80, 0xf0, 0x7, 0x80, 0xf0, 0x7, 0x80, 0xf0, 0x7, 0x80, 0xf0, 0x7, 0x80, 0xf8, 0xf, 0x80, 0xf8, 0xf, 0x80, 0x7c, 0x1f, 0x0, 0x7f, 0xff, 0x0, 0x3f, 0xfe, 0x0, 0x1f, 0xfc, 0x0, 0x7, 0xf0, 0x0}
+
+/* odieresis (246) */
+#define NXFONT_METRICS_246 {3, 17, 24, 1, 13, 0}
+#define NXFONT_BITMAP_246 {0x1e, 0x3c, 0x0, 0x1e, 0x3c, 0x0, 0x1e, 0x3c, 0x0, 0x1e, 0x3c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf0, 0x0, 0x1f, 0xfc, 0x0, 0x3f, 0xfe, 0x0, 0x7f, 0xff, 0x0, 0x7c, 0x1f, 0x0, 0xf8, 0xf, 0x80, 0xf8, 0xf, 0x80, 0xf0, 0x7, 0x80, 0xf0, 0x7, 0x80, 0xf0, 0x7, 0x80, 0xf0, 0x7, 0x80, 0xf8, 0xf, 0x80, 0xf8, 0xf, 0x80, 0x7c, 0x1f, 0x0, 0x7f, 0xff, 0x0, 0x3f, 0xfe, 0x0, 0x1f, 0xfc, 0x0, 0x7, 0xf0, 0x0}
+
+/* divide (247) */
+#define NXFONT_METRICS_247 {2, 16, 16, 1, 21, 0}
+#define NXFONT_BITMAP_247 {0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0}
+
+/* oslash (248) - NOTE: Xoffset should be -1, not 0. */
+#define NXFONT_METRICS_248 {3, 21, 18, 0, 19, 0}
+#define NXFONT_BITMAP_248 {0x1, 0xfc, 0x38, 0x7, 0xff, 0x70, 0xf, 0xff, 0xe0, 0x1f, 0xff, 0xc0, 0x1f, 0x8f, 0xc0, 0x3e, 0x7, 0xe0, 0x3e, 0xf, 0xe0, 0x3c, 0x1d, 0xe0, 0x3c, 0x39, 0xe0, 0x3c, 0x71, 0xe0, 0x3e, 0xe3, 0xe0, 0x3f, 0x83, 0xe0, 0x3f, 0x7, 0xe0, 0x1f, 0x8f, 0xc0, 0x1f, 0xff, 0xc0, 0x3f, 0xff, 0x80, 0x77, 0xff, 0x0, 0xe1, 0xfc, 0x0}
+
+/* ugrave (249) */
+#define NXFONT_METRICS_249 {2, 15, 25, 2, 12, 0}
+#define NXFONT_BITMAP_249 {0x1e, 0x0, 0xf, 0x0, 0x7, 0x0, 0x3, 0x80, 0x1, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf8, 0x3e, 0xf8, 0x7e, 0xff, 0xfe, 0x7f, 0xfe, 0x7f, 0xde, 0x1f, 0x1e}
+
+/* uacute (250) */
+#define NXFONT_METRICS_250 {2, 15, 25, 2, 12, 0}
+#define NXFONT_BITMAP_250 {0x0, 0xf0, 0x1, 0xe0, 0x1, 0xc0, 0x3, 0x80, 0x7, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf8, 0x3e, 0xf8, 0x7e, 0xff, 0xfe, 0x7f, 0xfe, 0x7f, 0xde, 0x1f, 0x1e}
+
+/* ucircumflex (251) */
+#define NXFONT_METRICS_251 {2, 15, 25, 2, 12, 0}
+#define NXFONT_BITMAP_251 {0x3, 0x0, 0x7, 0x80, 0xf, 0xc0, 0x1c, 0xe0, 0x38, 0x70, 0x0, 0x0, 0x0, 0x0, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf8, 0x3e, 0xf8, 0x7e, 0xff, 0xfe, 0x7f, 0xfe, 0x7f, 0xde, 0x1f, 0x1e}
+
+/* udieresis (252) */
+#define NXFONT_METRICS_252 {2, 15, 25, 2, 12, 0}
+#define NXFONT_BITMAP_252 {0x3c, 0x78, 0x3c, 0x78, 0x3c, 0x78, 0x3c, 0x78, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0xf8, 0x3e, 0xf8, 0x7e, 0xff, 0xfe, 0x7f, 0xfe, 0x7f, 0xde, 0x1f, 0x1e}
+
+/* yacute (253) */
+#define NXFONT_METRICS_253 {2, 16, 32, 1, 12, 0}
+#define NXFONT_BITMAP_253 {0x0, 0x78, 0x0, 0xf0, 0x1, 0xe0, 0x1, 0xc0, 0x3, 0x80, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x1f, 0xf8, 0x1f, 0xf8, 0x1f, 0x78, 0x1e, 0x7c, 0x3e, 0x7c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3e, 0x78, 0x3e, 0x78, 0x1e, 0x78, 0x1f, 0xf0, 0x1f, 0xf0, 0xf, 0xf0, 0xf, 0xe0, 0x7, 0xe0, 0x7, 0xe0, 0x7, 0xc0, 0x7, 0xc0, 0x7, 0xc0, 0xf, 0x80, 0x3f, 0x80, 0x3f, 0x0, 0x3f, 0x0, 0x3c, 0x0}
+
+/* thorn (254) */
+#define NXFONT_METRICS_254 {2, 16, 32, 2, 12, 0}
+#define NXFONT_BITMAP_254 {0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf3, 0xf0, 0xf7, 0xfc, 0xff, 0xfe, 0xff, 0xfe, 0xfc, 0x3f, 0xf8, 0x1f, 0xf8, 0x1f, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf8, 0x1f, 0xf8, 0x1f, 0xfc, 0x3e, 0xff, 0xfe, 0xff, 0xfc, 0xf7, 0xf8, 0xf1, 0xf0, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0}
+
+/* ydieresis (255) */
+#define NXFONT_METRICS_255 {2, 16, 31, 1, 13, 0}
+#define NXFONT_BITMAP_255 {0x1e, 0x78, 0x1e, 0x78, 0x1e, 0x78, 0x1e, 0x78, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x1f, 0xf8, 0x1f, 0xf8, 0x1f, 0x78, 0x3e, 0x7c, 0x3e, 0x7c, 0x3c, 0x7c, 0x3c, 0x3e, 0x7c, 0x3e, 0x78, 0x3e, 0x78, 0x1e, 0x78, 0x1f, 0xf0, 0x1f, 0xf0, 0xf, 0xf0, 0xf, 0xe0, 0x7, 0xe0, 0x7, 0xe0, 0x7, 0xc0, 0x7, 0xc0, 0x7, 0xc0, 0xf, 0x80, 0x3f, 0x80, 0x3f, 0x0, 0x3f, 0x0, 0x3c, 0x0}
+
+/****************************************************************************
+ * Public Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+#define EXTERN extern "C"
+extern "C" {
+#else
+#define EXTERN extern
+#endif
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* __GRAPHICS_NXFONTS_NXFONTS_SANS40X49B_H */
diff --git a/nuttx/graphics/nxfonts/nxfonts_serif22x28b.h b/nuttx/graphics/nxfonts/nxfonts_serif22x28b.h
new file mode 100644
index 000000000..8f01ccf8c
--- /dev/null
+++ b/nuttx/graphics/nxfonts/nxfonts_serif22x28b.h
@@ -0,0 +1,849 @@
+/****************************************************************************
+ * graphics/nxfonts/nxfonts_serif22x28b.h
+ *
+ * Copyright (C) 2011-2012 NX Engineering, S.A., All rights reserved.
+ * Author: Jose Pablo Carballo Gomez <jcarballo@nx-engineering.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT}
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING}
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+#ifndef __GRAPHICS_NXFONTS_NXFONTS_SERIF22X28B_H
+#define __GRAPHICS_NXFONTS_NXFONTS_SERIF22X28B_H
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/* Font ID */
+
+#define NXFONT_ID FONTID_SERIF22X28B
+
+/* Ranges of 7-bit and 8-bit fonts */
+
+#define NXFONT_MIN7BIT 33
+#define NXFONT_MAX7BIT 126
+
+#define NXFONT_MIN8BIT 161
+#define NXFONT_MAX8BIT 255
+
+/* Maximum height and width of any glyph in the set */
+
+#define NXFONT_MAXHEIGHT 28
+#define NXFONT_MAXWIDTH 22
+
+/* The width of a space */
+
+#define NXFONT_SPACEWIDTH 5
+
+/* exclam (33) */
+#define NXFONT_METRICS_33 {1, 3, 13, 1, 8, 0}
+#define NXFONT_BITMAP_33 {0x40, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0x40, 0x40, 0x0, 0xe0, 0xe0, 0xe0}
+
+/* quotedbl (34) */
+#define NXFONT_METRICS_34 {1, 6, 6, 2, 8, 0}
+#define NXFONT_BITMAP_34 {0xcc, 0xcc, 0xcc, 0xcc, 0x88, 0x88}
+
+/* numbersign (35) */
+#define NXFONT_METRICS_35 {2, 10, 12, 0, 9, 0}
+#define NXFONT_BITMAP_35 {0x19, 0x80, 0x19, 0x80, 0x19, 0x80, 0x7f, 0xc0, 0x7f, 0xc0, 0x33, 0x0, 0x33, 0x0, 0xff, 0x80, 0xff, 0x80, 0x66, 0x0, 0x66, 0x0, 0x66, 0x0}
+
+/* dollar (36) */
+#define NXFONT_METRICS_36 {1, 8, 16, 0, 7, 0}
+#define NXFONT_BITMAP_36 {0x18, 0x7e, 0xdb, 0xdb, 0xd8, 0xf8, 0x7c, 0x3e, 0x1f, 0x1f, 0x1b, 0xdb, 0xdb, 0x7e, 0x18, 0x18}
+
+/* percent (37) */
+#define NXFONT_METRICS_37 {2, 14, 13, 1, 8, 0}
+#define NXFONT_BITMAP_37 {0x3c, 0x18, 0x77, 0xf0, 0xe2, 0x60, 0xe2, 0x40, 0xe4, 0xc0, 0xfd, 0x80, 0x73, 0x78, 0x6, 0xec, 0x6, 0xc4, 0xd, 0xc4, 0x19, 0xc8, 0x31, 0xf8, 0x30, 0xe0}
+
+/* ampersand (38) */
+#define NXFONT_METRICS_38 {2, 13, 13, 2, 8, 0}
+#define NXFONT_BITMAP_38 {0x1e, 0x0, 0x33, 0x0, 0x33, 0x0, 0x33, 0x0, 0x3a, 0x0, 0x1c, 0xf0, 0x3c, 0x60, 0x5e, 0x40, 0xcf, 0x80, 0xc7, 0x80, 0xe3, 0xc0, 0xff, 0xf8, 0x78, 0xf0}
+
+/* quotesingle (39) */
+#define NXFONT_METRICS_39 {1, 2, 6, 1, 8, 0}
+#define NXFONT_BITMAP_39 {0xc0, 0xc0, 0xc0, 0xc0, 0x80, 0x80}
+
+/* parenleft (40) */
+#define NXFONT_METRICS_40 {1, 5, 17, 1, 8, 0}
+#define NXFONT_BITMAP_40 {0x8, 0x10, 0x30, 0x60, 0x60, 0xe0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xe0, 0x60, 0x60, 0x30, 0x10, 0x8}
+
+/* parenright (41) */
+#define NXFONT_METRICS_41 {1, 5, 17, 0, 8, 0}
+#define NXFONT_BITMAP_41 {0x80, 0x40, 0x60, 0x30, 0x30, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x38, 0x30, 0x20, 0x60, 0x40, 0x80}
+
+/* asterisk (42) */
+#define NXFONT_METRICS_42 {1, 8, 9, 0, 8, 0}
+#define NXFONT_BITMAP_42 {0x18, 0x18, 0xdb, 0xff, 0x3c, 0xff, 0xdb, 0x18, 0x18}
+
+/* plus (43) */
+#define NXFONT_METRICS_43 {2, 10, 10, 0, 11, 0}
+#define NXFONT_BITMAP_43 {0xc, 0x0, 0xc, 0x0, 0xc, 0x0, 0xc, 0x0, 0xff, 0xc0, 0xff, 0xc0, 0xc, 0x0, 0xc, 0x0, 0xc, 0x0, 0xc, 0x0}
+
+/* comma (44) */
+#define NXFONT_METRICS_44 {1, 4, 6, 0, 18, 0}
+#define NXFONT_BITMAP_44 {0x70, 0x70, 0x70, 0x30, 0x60, 0xc0}
+
+/* hyphen (45) */
+#define NXFONT_METRICS_45 {1, 5, 3, 0, 14, 0}
+#define NXFONT_BITMAP_45 {0xf8, 0xf8, 0xf8}
+
+/* period (46) */
+#define NXFONT_METRICS_46 {1, 3, 3, 1, 18, 0}
+#define NXFONT_BITMAP_46 {0xe0, 0xe0, 0xe0}
+
+/* slash (47) */
+#define NXFONT_METRICS_47 {1, 5, 13, 0, 8, 0}
+#define NXFONT_BITMAP_47 {0x18, 0x18, 0x18, 0x30, 0x30, 0x30, 0x20, 0x60, 0x60, 0x60, 0xc0, 0xc0, 0xc0}
+
+/* zero (48) */
+#define NXFONT_METRICS_48 {1, 8, 13, 0, 8, 0}
+#define NXFONT_BITMAP_48 {0x3c, 0x66, 0x67, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0x66, 0x66, 0x3c}
+
+/* one (49) */
+#define NXFONT_METRICS_49 {1, 8, 13, 0, 8, 0}
+#define NXFONT_BITMAP_49 {0x1c, 0x3c, 0xfc, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x7f}
+
+/* two (50) */
+#define NXFONT_METRICS_50 {1, 8, 13, 0, 8, 0}
+#define NXFONT_BITMAP_50 {0x3c, 0x7e, 0xcf, 0x87, 0x7, 0x7, 0x6, 0xc, 0x18, 0x31, 0x63, 0xff, 0xff}
+
+/* three (51) */
+#define NXFONT_METRICS_51 {2, 9, 13, 0, 8, 0}
+#define NXFONT_BITMAP_51 {0x3c, 0x0, 0x7e, 0x0, 0x8f, 0x0, 0x7, 0x0, 0xe, 0x0, 0x1c, 0x0, 0x3e, 0x0, 0xf, 0x0, 0x7, 0x80, 0x3, 0x80, 0xc3, 0x0, 0xe6, 0x0, 0x7c, 0x0}
+
+/* four (52) */
+#define NXFONT_METRICS_52 {1, 8, 13, 0, 8, 0}
+#define NXFONT_BITMAP_52 {0xe, 0x1e, 0x1e, 0x2e, 0x2e, 0x4e, 0xce, 0x8e, 0xff, 0xff, 0xe, 0xe, 0xe}
+
+/* five (53) */
+#define NXFONT_METRICS_53 {2, 9, 13, 0, 8, 0}
+#define NXFONT_BITMAP_53 {0x3f, 0x0, 0x3f, 0x0, 0x3e, 0x0, 0x40, 0x0, 0x78, 0x0, 0x7e, 0x0, 0x3f, 0x0, 0x7, 0x80, 0x3, 0x80, 0x3, 0x80, 0xc3, 0x0, 0xe6, 0x0, 0xfc, 0x0}
+
+/* six (54) */
+#define NXFONT_METRICS_54 {1, 8, 13, 0, 8, 0}
+#define NXFONT_BITMAP_54 {0x7, 0x1c, 0x38, 0x70, 0x60, 0xfc, 0xe6, 0xe7, 0xe7, 0xe7, 0xe7, 0x66, 0x3c}
+
+/* seven (55) */
+#define NXFONT_METRICS_55 {1, 8, 13, 0, 8, 0}
+#define NXFONT_BITMAP_55 {0xff, 0xff, 0xfe, 0x86, 0xc, 0xc, 0xc, 0x18, 0x18, 0x38, 0x30, 0x30, 0x70}
+
+/* eight (56) */
+#define NXFONT_METRICS_56 {1, 8, 13, 0, 8, 0}
+#define NXFONT_BITMAP_56 {0x3c, 0x66, 0xe3, 0xe3, 0xf6, 0x7c, 0x3c, 0x7e, 0xcf, 0xc7, 0xc3, 0xe7, 0x7e}
+
+/* nine (57) */
+#define NXFONT_METRICS_57 {1, 8, 13, 0, 8, 0}
+#define NXFONT_BITMAP_57 {0x3c, 0x66, 0xe7, 0xe7, 0xe7, 0xe7, 0x67, 0x3f, 0x7, 0x6, 0xe, 0x3c, 0xf0}
+
+/* colon (58) */
+#define NXFONT_METRICS_58 {1, 3, 9, 1, 12, 0}
+#define NXFONT_BITMAP_58 {0xe0, 0xe0, 0xe0, 0x0, 0x0, 0x0, 0xe0, 0xe0, 0xe0}
+
+/* semicolon (59) */
+#define NXFONT_METRICS_59 {1, 4, 12, 0, 12, 0}
+#define NXFONT_BITMAP_59 {0x70, 0x70, 0x70, 0x0, 0x0, 0x0, 0x70, 0x70, 0x70, 0x30, 0x60, 0xc0}
+
+/* less (60) */
+#define NXFONT_METRICS_60 {2, 9, 9, 1, 12, 0}
+#define NXFONT_BITMAP_60 {0x3, 0x80, 0xf, 0x0, 0x3c, 0x0, 0xf0, 0x0, 0xc0, 0x0, 0xf0, 0x0, 0x3c, 0x0, 0xf, 0x0, 0x3, 0x80}
+
+/* equal (61) */
+#define NXFONT_METRICS_61 {2, 9, 6, 1, 13, 0}
+#define NXFONT_BITMAP_61 {0xff, 0x80, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0xff, 0x80, 0xff, 0x80}
+
+/* greater (62) */
+#define NXFONT_METRICS_62 {2, 9, 9, 1, 12, 0}
+#define NXFONT_BITMAP_62 {0xe0, 0x0, 0x78, 0x0, 0x1e, 0x0, 0x7, 0x80, 0x1, 0x80, 0x7, 0x80, 0x1e, 0x0, 0x78, 0x0, 0xe0, 0x0}
+
+/* question (63) */
+#define NXFONT_METRICS_63 {1, 7, 13, 1, 8, 0}
+#define NXFONT_BITMAP_63 {0x7c, 0xce, 0xee, 0xee, 0x4e, 0xc, 0x18, 0x10, 0x10, 0x0, 0x38, 0x38, 0x38}
+
+/* at (64) */
+#define NXFONT_METRICS_64 {2, 15, 16, 1, 8, 0}
+#define NXFONT_BITMAP_64 {0x3, 0xe0, 0xf, 0x38, 0x38, 0xc, 0x30, 0x4, 0x73, 0xb6, 0x67, 0x76, 0xe7, 0x76, 0xee, 0x66, 0xee, 0x66, 0xee, 0xec, 0xef, 0xfc, 0x67, 0xb8, 0x70, 0x0, 0x38, 0x0, 0x1e, 0x0, 0x7, 0xf0}
+
+/* A (65) */
+#define NXFONT_METRICS_65 {2, 14, 13, 0, 8, 0}
+#define NXFONT_BITMAP_65 {0x3, 0x0, 0x3, 0x80, 0x7, 0x80, 0x5, 0xc0, 0xd, 0xc0, 0x8, 0xc0, 0x18, 0xe0, 0x10, 0x60, 0x1f, 0xf0, 0x30, 0x70, 0x20, 0x38, 0x60, 0x38, 0xf8, 0xfc}
+
+/* B (66) */
+#define NXFONT_METRICS_66 {2, 10, 13, 1, 8, 0}
+#define NXFONT_BITMAP_66 {0xfe, 0x0, 0x73, 0x80, 0x71, 0xc0, 0x71, 0xc0, 0x71, 0xc0, 0x73, 0x80, 0x7e, 0x0, 0x73, 0x80, 0x71, 0xc0, 0x71, 0xc0, 0x71, 0xc0, 0x73, 0x80, 0xff, 0x0}
+
+/* C (67) */
+#define NXFONT_METRICS_67 {2, 12, 13, 1, 8, 0}
+#define NXFONT_BITMAP_67 {0xf, 0x90, 0x38, 0xf0, 0x70, 0x70, 0x70, 0x30, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0x70, 0x0, 0x70, 0x30, 0x3c, 0xe0, 0xf, 0x80}
+
+/* D (68) */
+#define NXFONT_METRICS_68 {2, 12, 13, 1, 8, 0}
+#define NXFONT_BITMAP_68 {0xff, 0x0, 0x71, 0xc0, 0x70, 0xe0, 0x70, 0x60, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x60, 0x70, 0xe0, 0x71, 0xc0, 0xff, 0x0}
+
+/* E (69) */
+#define NXFONT_METRICS_69 {2, 10, 13, 2, 8, 0}
+#define NXFONT_BITMAP_69 {0xff, 0xc0, 0x70, 0xc0, 0x70, 0x40, 0x70, 0x0, 0x70, 0x0, 0x71, 0x0, 0x7f, 0x0, 0x71, 0x0, 0x70, 0x0, 0x70, 0x0, 0x70, 0x40, 0x70, 0xc0, 0xff, 0xc0}
+
+/* F (70) */
+#define NXFONT_METRICS_70 {2, 10, 13, 2, 8, 0}
+#define NXFONT_BITMAP_70 {0xff, 0xc0, 0x70, 0xc0, 0x70, 0x40, 0x70, 0x0, 0x70, 0x0, 0x71, 0x0, 0x7f, 0x0, 0x71, 0x0, 0x70, 0x0, 0x70, 0x0, 0x70, 0x0, 0x70, 0x0, 0xf8, 0x0}
+
+/* G (71) */
+#define NXFONT_METRICS_71 {2, 13, 13, 1, 8, 0}
+#define NXFONT_BITMAP_71 {0xf, 0x90, 0x38, 0xf0, 0x70, 0x70, 0x70, 0x30, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0xf8, 0xe0, 0x70, 0xe0, 0x70, 0x70, 0x70, 0x70, 0x70, 0x38, 0xf0, 0xf, 0xc0}
+
+/* H (72) */
+#define NXFONT_METRICS_72 {2, 13, 13, 1, 8, 0}
+#define NXFONT_BITMAP_72 {0xf8, 0xf8, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x7f, 0xf0, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0xf9, 0xf8}
+
+/* I (73) */
+#define NXFONT_METRICS_73 {1, 5, 13, 1, 8, 0}
+#define NXFONT_BITMAP_73 {0xf8, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0xf8}
+
+/* J (74) */
+#define NXFONT_METRICS_74 {1, 8, 15, 0, 8, 0}
+#define NXFONT_BITMAP_74 {0x1f, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xee, 0xec, 0x78}
+
+/* K (75) */
+#define NXFONT_METRICS_75 {2, 12, 13, 2, 8, 0}
+#define NXFONT_BITMAP_75 {0xf9, 0xf0, 0x70, 0xc0, 0x71, 0x80, 0x73, 0x0, 0x76, 0x0, 0x7c, 0x0, 0x7c, 0x0, 0x7e, 0x0, 0x77, 0x0, 0x77, 0x80, 0x73, 0xc0, 0x71, 0xe0, 0xf8, 0xf0}
+
+/* L (76) */
+#define NXFONT_METRICS_76 {2, 10, 13, 2, 8, 0}
+#define NXFONT_BITMAP_76 {0xf8, 0x0, 0x70, 0x0, 0x70, 0x0, 0x70, 0x0, 0x70, 0x0, 0x70, 0x0, 0x70, 0x0, 0x70, 0x0, 0x70, 0x0, 0x70, 0x0, 0x70, 0x40, 0x70, 0xc0, 0xff, 0xc0}
+
+/* M (77) */
+#define NXFONT_METRICS_77 {2, 15, 13, 2, 8, 0}
+#define NXFONT_BITMAP_77 {0xf0, 0x1e, 0x70, 0x1c, 0x78, 0x3c, 0x78, 0x3c, 0x7c, 0x5c, 0x5c, 0x5c, 0x5e, 0xdc, 0x4e, 0x9c, 0x4f, 0x9c, 0x47, 0x1c, 0x47, 0x1c, 0x43, 0x1c, 0xe2, 0x3e}
+
+/* N (78) */
+#define NXFONT_METRICS_78 {2, 12, 13, 1, 8, 0}
+#define NXFONT_BITMAP_78 {0xf0, 0x70, 0x78, 0x20, 0x78, 0x20, 0x7c, 0x20, 0x5e, 0x20, 0x4e, 0x20, 0x4f, 0x20, 0x47, 0xa0, 0x43, 0xa0, 0x43, 0xe0, 0x41, 0xe0, 0x40, 0xe0, 0xe0, 0xe0}
+
+/* O (79) */
+#define NXFONT_METRICS_79 {2, 13, 13, 1, 8, 0}
+#define NXFONT_BITMAP_79 {0xf, 0x80, 0x38, 0xe0, 0x70, 0x70, 0x70, 0x70, 0xe0, 0x38, 0xe0, 0x38, 0xe0, 0x38, 0xe0, 0x38, 0xe0, 0x38, 0x70, 0x70, 0x70, 0x70, 0x38, 0xe0, 0xf, 0x80}
+
+/* P (80) */
+#define NXFONT_METRICS_80 {2, 10, 13, 1, 8, 0}
+#define NXFONT_BITMAP_80 {0xff, 0x0, 0x73, 0x80, 0x71, 0xc0, 0x71, 0xc0, 0x71, 0xc0, 0x73, 0x80, 0x7f, 0x0, 0x70, 0x0, 0x70, 0x0, 0x70, 0x0, 0x70, 0x0, 0x70, 0x0, 0xf8, 0x0}
+
+/* Q (81) */
+#define NXFONT_METRICS_81 {2, 13, 17, 1, 8, 0}
+#define NXFONT_BITMAP_81 {0xf, 0x80, 0x38, 0xe0, 0x70, 0x70, 0x70, 0x70, 0xe0, 0x38, 0xe0, 0x38, 0xe0, 0x38, 0xe0, 0x38, 0xe0, 0x38, 0x70, 0x70, 0x70, 0x70, 0x38, 0xe0, 0xf, 0x80, 0xf, 0x0, 0x7, 0x80, 0x3, 0xe0, 0x0, 0xf8}
+
+/* R (82) */
+#define NXFONT_METRICS_82 {2, 12, 13, 1, 8, 0}
+#define NXFONT_BITMAP_82 {0xff, 0x0, 0x73, 0x80, 0x71, 0xc0, 0x71, 0xc0, 0x71, 0xc0, 0x73, 0x80, 0x7f, 0x0, 0x77, 0x0, 0x73, 0x80, 0x71, 0xc0, 0x71, 0xc0, 0x70, 0xe0, 0xf8, 0xf0}
+
+/* S (83) */
+#define NXFONT_METRICS_83 {2, 9, 13, 1, 8, 0}
+#define NXFONT_BITMAP_83 {0x1e, 0x80, 0x63, 0x80, 0xe1, 0x80, 0xe0, 0x0, 0xf8, 0x0, 0x7c, 0x0, 0x3f, 0x0, 0xf, 0x80, 0x7, 0x80, 0x3, 0x80, 0xc3, 0x80, 0xe7, 0x0, 0xbc, 0x0}
+
+/* T (84) */
+#define NXFONT_METRICS_84 {2, 11, 13, 1, 8, 0}
+#define NXFONT_BITMAP_84 {0xff, 0xe0, 0xce, 0x60, 0x8e, 0x20, 0xe, 0x0, 0xe, 0x0, 0xe, 0x0, 0xe, 0x0, 0xe, 0x0, 0xe, 0x0, 0xe, 0x0, 0xe, 0x0, 0xe, 0x0, 0x1f, 0x0}
+
+/* U (85) */
+#define NXFONT_METRICS_85 {2, 12, 13, 1, 8, 0}
+#define NXFONT_BITMAP_85 {0xf8, 0xf0, 0x70, 0x20, 0x70, 0x20, 0x70, 0x20, 0x70, 0x20, 0x70, 0x20, 0x70, 0x20, 0x70, 0x20, 0x70, 0x20, 0x70, 0x20, 0x70, 0x60, 0x38, 0xc0, 0x1f, 0x80}
+
+/* V (86) */
+#define NXFONT_METRICS_86 {2, 14, 13, 0, 8, 0}
+#define NXFONT_BITMAP_86 {0xfc, 0x7c, 0x78, 0x18, 0x38, 0x10, 0x3c, 0x30, 0x1c, 0x20, 0x1e, 0x60, 0x1e, 0x40, 0xe, 0xc0, 0xf, 0x80, 0x7, 0x80, 0x7, 0x0, 0x3, 0x0, 0x2, 0x0}
+
+/* W (87) */
+#define NXFONT_METRICS_87 {3, 18, 13, 1, 8, 0}
+#define NXFONT_BITMAP_87 {0xfd, 0xf7, 0xc0, 0x79, 0xe1, 0x80, 0x38, 0xe1, 0x0, 0x3c, 0xe3, 0x0, 0x3c, 0xe2, 0x0, 0x1c, 0x72, 0x0, 0x1e, 0x76, 0x0, 0xe, 0x74, 0x0, 0xe, 0xbc, 0x0, 0xf, 0x3c, 0x0, 0x7, 0x3c, 0x0, 0x6, 0x18, 0x0, 0x6, 0x18, 0x0}
+
+/* X (88) */
+#define NXFONT_METRICS_88 {2, 14, 13, 0, 8, 0}
+#define NXFONT_BITMAP_88 {0xf8, 0x78, 0x78, 0x30, 0x3c, 0x60, 0x1c, 0xc0, 0xf, 0x80, 0x7, 0x0, 0x7, 0x80, 0x7, 0xc0, 0xd, 0xc0, 0x18, 0xe0, 0x30, 0x70, 0x60, 0x78, 0xf0, 0xfc}
+
+/* Y (89) */
+#define NXFONT_METRICS_89 {2, 13, 13, 1, 8, 0}
+#define NXFONT_BITMAP_89 {0xfc, 0x78, 0x78, 0x30, 0x38, 0x60, 0x3c, 0x40, 0x1e, 0xc0, 0xe, 0x80, 0xf, 0x80, 0x7, 0x0, 0x7, 0x0, 0x7, 0x0, 0x7, 0x0, 0x7, 0x0, 0x1f, 0xc0}
+
+/* Z (90) */
+#define NXFONT_METRICS_90 {2, 10, 13, 2, 8, 0}
+#define NXFONT_BITMAP_90 {0xff, 0xc0, 0xc3, 0xc0, 0x83, 0x80, 0x7, 0x80, 0xf, 0x0, 0xe, 0x0, 0x1e, 0x0, 0x3c, 0x0, 0x38, 0x0, 0x78, 0x0, 0xf0, 0x40, 0xe0, 0xc0, 0xff, 0xc0}
+
+/* bracketleft (91) */
+#define NXFONT_METRICS_91 {1, 4, 16, 1, 8, 0}
+#define NXFONT_BITMAP_91 {0xf0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf0}
+
+/* backslash (92) */
+#define NXFONT_METRICS_92 {1, 5, 13, 0, 8, 0}
+#define NXFONT_BITMAP_92 {0xc0, 0xc0, 0xc0, 0x60, 0x60, 0x60, 0x20, 0x30, 0x30, 0x30, 0x18, 0x18, 0x18}
+
+/* bracketright (93) */
+#define NXFONT_METRICS_93 {1, 4, 16, 1, 8, 0}
+#define NXFONT_BITMAP_93 {0xf0, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0xf0}
+
+/* asciicircum (94) */
+#define NXFONT_METRICS_94 {1, 8, 7, 1, 8, 0}
+#define NXFONT_BITMAP_94 {0x18, 0x18, 0x3c, 0x24, 0x66, 0xc3, 0xc3}
+
+/* underscore (95) */
+#define NXFONT_METRICS_95 {2, 9, 2, 0, 23, 0}
+#define NXFONT_BITMAP_95 {0xff, 0x80, 0xff, 0x80}
+
+/* grave (96) */
+#define NXFONT_METRICS_96 {1, 5, 3, 0, 8, 0}
+#define NXFONT_BITMAP_96 {0xe0, 0x70, 0x18}
+
+/* a (97) */
+#define NXFONT_METRICS_97 {1, 8, 9, 0, 12, 0}
+#define NXFONT_BITMAP_97 {0x7c, 0xce, 0xce, 0x1e, 0x6e, 0xce, 0xce, 0xfe, 0x77}
+
+/* b (98) -- NOTE: Xoffset should be -1, not 0. */
+#define NXFONT_METRICS_98 {2, 9, 13, 0, 8, 0}
+#define NXFONT_BITMAP_98 {0xf0, 0x0, 0x70, 0x0, 0x70, 0x0, 0x70, 0x0, 0x76, 0x0, 0x7f, 0x0, 0x73, 0x80, 0x73, 0x80, 0x73, 0x80, 0x73, 0x80, 0x73, 0x80, 0x73, 0x0, 0x6e, 0x0}
+
+/* c (99) */
+#define NXFONT_METRICS_99 {1, 7, 9, 0, 12, 0}
+#define NXFONT_BITMAP_99 {0x3e, 0x76, 0xe6, 0xe0, 0xe0, 0xe0, 0xe0, 0x76, 0x3c}
+
+/* d (100) */
+#define NXFONT_METRICS_100 {2, 9, 13, 0, 8, 0}
+#define NXFONT_BITMAP_100 {0xf, 0x0, 0x7, 0x0, 0x7, 0x0, 0x7, 0x0, 0x37, 0x0, 0x7f, 0x0, 0xe7, 0x0, 0xe7, 0x0, 0xe7, 0x0, 0xe7, 0x0, 0xe7, 0x0, 0x77, 0x0, 0x3b, 0x80}
+
+/* e (101) */
+#define NXFONT_METRICS_101 {1, 7, 9, 0, 12, 0}
+#define NXFONT_BITMAP_101 {0x3c, 0x76, 0xe6, 0xfe, 0xe0, 0xe0, 0xe0, 0x76, 0x3c}
+
+/* f (102) */
+#define NXFONT_METRICS_102 {1, 7, 13, 0, 8, 0}
+#define NXFONT_BITMAP_102 {0x3e, 0x76, 0x76, 0x70, 0xfc, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0xf8}
+
+/* g (103) */
+#define NXFONT_METRICS_103 {2, 9, 13, 0, 12, 0}
+#define NXFONT_BITMAP_103 {0x3f, 0x80, 0xe7, 0x0, 0xe7, 0x0, 0xe7, 0x0, 0xe6, 0x0, 0x78, 0x0, 0x60, 0x0, 0xfe, 0x0, 0xff, 0x80, 0xe3, 0x80, 0xc1, 0x80, 0xe3, 0x0, 0x7e, 0x0}
+
+/* h (104) */
+#define NXFONT_METRICS_104 {2, 10, 13, 0, 8, 0}
+#define NXFONT_BITMAP_104 {0xf0, 0x0, 0x70, 0x0, 0x70, 0x0, 0x70, 0x0, 0x77, 0x0, 0x7f, 0x80, 0x73, 0x80, 0x73, 0x80, 0x73, 0x80, 0x73, 0x80, 0x73, 0x80, 0x73, 0x80, 0xfb, 0xc0}
+
+/* i (105) */
+#define NXFONT_METRICS_105 {1, 5, 13, 0, 8, 0}
+#define NXFONT_BITMAP_105 {0x60, 0x60, 0x60, 0x0, 0xf0, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0xf8}
+
+/* j (106) -- NOTE: Xoffset should be -2, not 0. */
+#define NXFONT_METRICS_106 {1, 6, 17, 0, 8, 0}
+#define NXFONT_BITMAP_106 {0x18, 0x18, 0x18, 0x0, 0x3c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0xdc, 0xd8, 0x70}
+
+/* k (107) */
+#define NXFONT_METRICS_107 {2, 10, 13, 0, 8, 0}
+#define NXFONT_BITMAP_107 {0xf0, 0x0, 0x70, 0x0, 0x70, 0x0, 0x70, 0x0, 0x73, 0x80, 0x73, 0x0, 0x76, 0x0, 0x7c, 0x0, 0x7c, 0x0, 0x7e, 0x0, 0x77, 0x0, 0x73, 0x80, 0xf7, 0xc0}
+
+/* l (108) */
+#define NXFONT_METRICS_108 {1, 5, 13, 0, 8, 0}
+#define NXFONT_BITMAP_108 {0xf0, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0xf8}
+
+/* m (109) */
+#define NXFONT_METRICS_109 {2, 15, 9, 0, 12, 0}
+#define NXFONT_BITMAP_109 {0xf7, 0x38, 0x7b, 0xdc, 0x73, 0x9c, 0x73, 0x9c, 0x73, 0x9c, 0x73, 0x9c, 0x73, 0x9c, 0x73, 0x9c, 0xfb, 0xde}
+
+/* n (110) */
+#define NXFONT_METRICS_110 {2, 10, 9, 0, 12, 0}
+#define NXFONT_BITMAP_110 {0xe7, 0x0, 0x7f, 0x80, 0x73, 0x80, 0x73, 0x80, 0x73, 0x80, 0x73, 0x80, 0x73, 0x80, 0x73, 0x80, 0xfb, 0xc0}
+
+/* o (111) */
+#define NXFONT_METRICS_111 {1, 8, 9, 0, 12, 0}
+#define NXFONT_BITMAP_111 {0x3c, 0x66, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0x66, 0x3c}
+
+/* p (112) */
+#define NXFONT_METRICS_112 {2, 9, 13, 0, 12, 0}
+#define NXFONT_BITMAP_112 {0xe6, 0x0, 0x7f, 0x0, 0x73, 0x80, 0x73, 0x80, 0x73, 0x80, 0x73, 0x80, 0x73, 0x80, 0x7b, 0x0, 0x76, 0x0, 0x70, 0x0, 0x70, 0x0, 0x70, 0x0, 0xf8, 0x0}
+
+/* q (113) */
+#define NXFONT_METRICS_113 {2, 9, 13, 0, 12, 0}
+#define NXFONT_BITMAP_113 {0x39, 0x0, 0x77, 0x0, 0xe7, 0x0, 0xe7, 0x0, 0xe7, 0x0, 0xe7, 0x0, 0xe7, 0x0, 0x7f, 0x0, 0x37, 0x0, 0x7, 0x0, 0x7, 0x0, 0x7, 0x0, 0xf, 0x80}
+
+/* r (114) */
+#define NXFONT_METRICS_114 {1, 7, 9, 0, 12, 0}
+#define NXFONT_BITMAP_114 {0xee, 0x76, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0xf8}
+
+/* s (115) */
+#define NXFONT_METRICS_115 {1, 6, 9, 0, 12, 0}
+#define NXFONT_BITMAP_115 {0x7c, 0xcc, 0xe4, 0xf0, 0x78, 0x3c, 0x9c, 0xcc, 0xf8}
+
+/* t (116) */
+#define NXFONT_METRICS_116 {1, 6, 11, 0, 10, 0}
+#define NXFONT_BITMAP_116 {0x10, 0x30, 0xfc, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x74, 0x38}
+
+/* u (117) */
+#define NXFONT_METRICS_117 {2, 10, 9, 0, 12, 0}
+#define NXFONT_BITMAP_117 {0xf7, 0x80, 0x73, 0x80, 0x73, 0x80, 0x73, 0x80, 0x73, 0x80, 0x73, 0x80, 0x73, 0x80, 0x7f, 0x80, 0x3d, 0xc0}
+
+/* v (118) -- NOTE: Xoffset should be -1, not 0. */
+#define NXFONT_METRICS_118 {2, 10, 9, 0, 12, 0}
+#define NXFONT_BITMAP_118 {0xfb, 0xc0, 0x71, 0x80, 0x79, 0x0, 0x3b, 0x0, 0x3b, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0xc, 0x0, 0xc, 0x0}
+
+/* w (119) -- NOTE: Xoffset should be -1, not 0. */
+#define NXFONT_METRICS_119 {2, 14, 9, 0, 12, 0}
+#define NXFONT_BITMAP_119 {0xf7, 0x9c, 0x77, 0x18, 0x73, 0x90, 0x3b, 0xb0, 0x39, 0xa0, 0x1d, 0xe0, 0x1f, 0xe0, 0xc, 0xc0, 0xc, 0xc0}
+
+/* x (120) */
+#define NXFONT_METRICS_120 {2, 9, 9, 0, 12, 0}
+#define NXFONT_BITMAP_120 {0xf3, 0x80, 0x73, 0x0, 0x7a, 0x0, 0x3c, 0x0, 0x1c, 0x0, 0x1e, 0x0, 0x37, 0x0, 0x67, 0x80, 0xe3, 0x80}
+
+/* y (121) -- NOTE: Xoffset should be -1, not 0. */
+#define NXFONT_METRICS_121 {2, 10, 13, 0, 12, 0}
+#define NXFONT_BITMAP_121 {0xfb, 0xc0, 0x71, 0x80, 0x79, 0x0, 0x3b, 0x0, 0x3a, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0xc, 0x0, 0xc, 0x0, 0xc, 0x0, 0xc8, 0x0, 0xd8, 0x0, 0xf0, 0x0}
+
+/* z (122) */
+#define NXFONT_METRICS_122 {1, 7, 9, 0, 12, 0}
+#define NXFONT_BITMAP_122 {0xfe, 0xce, 0x8e, 0x1c, 0x38, 0x70, 0x72, 0xe6, 0xfe}
+
+/* braceleft (123) */
+#define NXFONT_METRICS_123 {1, 7, 17, 0, 8, 0}
+#define NXFONT_BITMAP_123 {0x1e, 0x38, 0x30, 0x30, 0x30, 0x30, 0x30, 0x60, 0xc0, 0x60, 0x30, 0x30, 0x30, 0x30, 0x30, 0x38, 0x1e}
+
+/* bar (124) */
+#define NXFONT_METRICS_124 {1, 2, 16, 1, 8, 0}
+#define NXFONT_BITMAP_124 {0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* braceright (125) */
+#define NXFONT_METRICS_125 {1, 7, 17, 1, 8, 0}
+#define NXFONT_BITMAP_125 {0xf0, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0xc, 0x6, 0xc, 0x18, 0x18, 0x18, 0x18, 0x18, 0x38, 0xf0}
+
+/* asciitilde (126) */
+#define NXFONT_METRICS_126 {1, 8, 4, 1, 14, 0}
+#define NXFONT_BITMAP_126 {0x70, 0xf9, 0x9f, 0xe}
+
+/* exclamdown (161) */
+#define NXFONT_METRICS_161 {1, 3, 13, 1, 12, 0}
+#define NXFONT_BITMAP_161 {0xe0, 0xe0, 0xe0, 0x0, 0x40, 0x40, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0x40}
+
+/* cent (162) */
+#define NXFONT_METRICS_162 {1, 8, 13, 0, 10, 0}
+#define NXFONT_BITMAP_162 {0x1, 0x3, 0x3e, 0x77, 0xef, 0xec, 0xd8, 0xd8, 0xf0, 0x73, 0x3e, 0x60, 0x40}
+
+/* sterling (163) */
+#define NXFONT_METRICS_163 {2, 14, 13, 0, 8, 0}
+#define NXFONT_BITMAP_163 {0x1f, 0x0, 0x3b, 0x0, 0x3b, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0xfe, 0x0, 0x38, 0x4, 0x38, 0x0, 0x30, 0x0, 0xf0, 0x80, 0xbf, 0x80, 0xef, 0x0}
+
+/* currency (164) */
+#define NXFONT_METRICS_164 {1, 8, 8, 0, 11, 0}
+#define NXFONT_BITMAP_164 {0xdb, 0xff, 0x66, 0xc3, 0xc3, 0x66, 0xff, 0xdb}
+
+/* yen (165) */
+#define NXFONT_METRICS_165 {2, 9, 13, 0, 8, 0}
+#define NXFONT_BITMAP_165 {0xfb, 0x80, 0x71, 0x0, 0x73, 0x0, 0x3a, 0x0, 0x3a, 0x0, 0x1c, 0x0, 0x7f, 0x0, 0x1c, 0x0, 0x7f, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x7f, 0x0}
+
+/* brokenbar (166) */
+#define NXFONT_METRICS_166 {1, 2, 16, 1, 8, 0}
+#define NXFONT_BITMAP_166 {0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* section (167) */
+#define NXFONT_METRICS_167 {1, 7, 16, 1, 8, 0}
+#define NXFONT_BITMAP_167 {0x3c, 0x66, 0x46, 0x60, 0x30, 0x78, 0xdc, 0xce, 0xe6, 0x76, 0x3c, 0x1c, 0xc, 0xc4, 0xcc, 0x78}
+
+/* dieresis (168) */
+#define NXFONT_METRICS_168 {1, 6, 2, 0, 9, 0}
+#define NXFONT_BITMAP_168 {0xcc, 0xcc}
+
+/* copyright (169) */
+#define NXFONT_METRICS_169 {2, 13, 13, 1, 8, 0}
+#define NXFONT_BITMAP_169 {0xf, 0x80, 0x38, 0xe0, 0x60, 0x30, 0x4f, 0xd0, 0xdc, 0xd8, 0x98, 0x48, 0x98, 0x8, 0x98, 0x8, 0xdc, 0xd8, 0x4f, 0x90, 0x60, 0x30, 0x38, 0xe0, 0xf, 0x80}
+
+/* ordfeminine (170) */
+#define NXFONT_METRICS_170 {1, 6, 8, 0, 8, 0}
+#define NXFONT_BITMAP_170 {0x70, 0xd8, 0x38, 0xd8, 0xd8, 0xec, 0x0, 0xfc}
+
+/* guillemotleft (171) */
+#define NXFONT_METRICS_171 {2, 9, 7, 1, 13, 0}
+#define NXFONT_BITMAP_171 {0x19, 0x80, 0x33, 0x0, 0x66, 0x0, 0xcc, 0x0, 0x66, 0x0, 0x33, 0x0, 0x19, 0x80}
+
+/* logicalnot (172) */
+#define NXFONT_METRICS_172 {2, 9, 6, 1, 14, 0}
+#define NXFONT_BITMAP_172 {0xff, 0x80, 0xff, 0x80, 0x1, 0x80, 0x1, 0x80, 0x1, 0x80, 0x1, 0x80}
+
+/* hyphen (173) */
+#define NXFONT_METRICS_173 {1, 5, 3, 0, 14, 0}
+#define NXFONT_BITMAP_173 {0xf8, 0xf8, 0xf8}
+
+/* registered (174) */
+#define NXFONT_METRICS_174 {2, 13, 13, 1, 8, 0}
+#define NXFONT_BITMAP_174 {0xf, 0x80, 0x38, 0xe0, 0x60, 0x30, 0x5f, 0x90, 0xcc, 0xd8, 0x8c, 0xc8, 0x8f, 0x88, 0x8d, 0x88, 0xcc, 0xd8, 0x5e, 0xf0, 0x60, 0x30, 0x38, 0xe0, 0xf, 0x80}
+
+/* macron (175) */
+#define NXFONT_METRICS_175 {1, 6, 1, 0, 9, 0}
+#define NXFONT_BITMAP_175 {0xfc}
+
+/* degree (176) */
+#define NXFONT_METRICS_176 {1, 6, 5, 0, 8, 0}
+#define NXFONT_BITMAP_176 {0x78, 0xcc, 0xcc, 0xcc, 0x78}
+
+/* plusminus (177) */
+#define NXFONT_METRICS_177 {1, 8, 11, 1, 10, 0}
+#define NXFONT_BITMAP_177 {0x18, 0x18, 0x18, 0xff, 0xff, 0x18, 0x18, 0x18, 0x0, 0xff, 0xff}
+
+/* twosuperior (178) */
+#define NXFONT_METRICS_178 {1, 5, 8, 0, 8, 0}
+#define NXFONT_BITMAP_178 {0x70, 0x98, 0x18, 0x30, 0x20, 0x40, 0xf8, 0xf0}
+
+/* threesuperior (179) */
+#define NXFONT_METRICS_179 {1, 5, 8, 0, 8, 0}
+#define NXFONT_BITMAP_179 {0x70, 0x98, 0x18, 0x70, 0x38, 0x18, 0x98, 0x70}
+
+/* acute (180) */
+#define NXFONT_METRICS_180 {1, 5, 3, 0, 8, 0}
+#define NXFONT_BITMAP_180 {0x38, 0x70, 0xc0}
+
+/* mu (181) */
+#define NXFONT_METRICS_181 {2, 10, 13, 0, 12, 0}
+#define NXFONT_BITMAP_181 {0xf7, 0x80, 0x73, 0x80, 0x73, 0x80, 0x73, 0x80, 0x73, 0x80, 0x73, 0x80, 0x73, 0x80, 0x7f, 0x80, 0x7d, 0xc0, 0x60, 0x0, 0xe0, 0x0, 0xf0, 0x0, 0x60, 0x0}
+
+/* paragraph (182) */
+#define NXFONT_METRICS_182 {2, 9, 17, 0, 8, 0}
+#define NXFONT_BITMAP_182 {0x3f, 0x80, 0x7f, 0x80, 0xfb, 0x0, 0xfb, 0x0, 0xfb, 0x0, 0xfb, 0x0, 0x7b, 0x0, 0x3b, 0x0, 0x1b, 0x0, 0x1b, 0x0, 0x1b, 0x0, 0x1b, 0x0, 0x1b, 0x0, 0x1b, 0x0, 0x1b, 0x0, 0x1b, 0x0, 0x1b, 0x0}
+
+/* periodcentered (183) */
+#define NXFONT_METRICS_183 {1, 3, 3, 1, 14, 0}
+#define NXFONT_BITMAP_183 {0xe0, 0xe0, 0xe0}
+
+/* cedilla (184) */
+#define NXFONT_METRICS_184 {1, 5, 4, 1, 21, 0}
+#define NXFONT_BITMAP_184 {0x20, 0x18, 0x98, 0x70}
+
+/* onesuperior (185) */
+#define NXFONT_METRICS_185 {1, 6, 8, 0, 8, 0}
+#define NXFONT_BITMAP_185 {0x30, 0xf0, 0x30, 0x30, 0x30, 0x30, 0x30, 0xfc}
+
+/* ordmasculine (186) */
+#define NXFONT_METRICS_186 {1, 6, 8, 0, 8, 0}
+#define NXFONT_BITMAP_186 {0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x0, 0xfc}
+
+/* guillemotright (187) */
+#define NXFONT_METRICS_187 {2, 9, 7, 1, 13, 0}
+#define NXFONT_BITMAP_187 {0xcc, 0x0, 0x66, 0x0, 0x33, 0x0, 0x19, 0x80, 0x33, 0x0, 0x66, 0x0, 0xcc, 0x0}
+
+/* onequarter (188) */
+#define NXFONT_METRICS_188 {2, 13, 13, 0, 8, 0}
+#define NXFONT_BITMAP_188 {0x30, 0x60, 0xf0, 0xc0, 0x30, 0xc0, 0x31, 0x80, 0x31, 0x80, 0x33, 0x10, 0x33, 0x30, 0xfe, 0x70, 0x6, 0xb0, 0xd, 0xb0, 0xd, 0xf8, 0x18, 0x30, 0x18, 0x30}
+
+/* onehalf (189) */
+#define NXFONT_METRICS_189 {2, 13, 13, 0, 8, 0}
+#define NXFONT_BITMAP_189 {0x30, 0x60, 0xf0, 0xc0, 0x30, 0xc0, 0x31, 0x80, 0x31, 0x80, 0x33, 0x70, 0x33, 0x98, 0xfe, 0x18, 0x6, 0x30, 0xc, 0x20, 0xc, 0x40, 0x18, 0xf8, 0x18, 0xf0}
+
+/* threequarters (190) */
+#define NXFONT_METRICS_190 {2, 13, 13, 0, 8, 0}
+#define NXFONT_BITMAP_190 {0x70, 0x60, 0x98, 0xc0, 0x18, 0xc0, 0x71, 0x80, 0x39, 0x80, 0x1b, 0x10, 0x9b, 0x30, 0x76, 0x70, 0x6, 0xb0, 0xd, 0xb0, 0xd, 0xf8, 0x18, 0x30, 0x18, 0x30}
+
+/* questiondown (191) */
+#define NXFONT_METRICS_191 {1, 7, 13, 1, 12, 0}
+#define NXFONT_BITMAP_191 {0x38, 0x38, 0x38, 0x0, 0x10, 0x10, 0x30, 0x60, 0xe4, 0xee, 0xee, 0xe6, 0x7c}
+
+/* Agrave (192) */
+#define NXFONT_METRICS_192 {2, 14, 17, 0, 4, 0}
+#define NXFONT_BITMAP_192 {0xe, 0x0, 0x7, 0x0, 0x1, 0x80, 0x0, 0x0, 0x3, 0x0, 0x3, 0x80, 0x7, 0x80, 0x5, 0xc0, 0xd, 0xc0, 0x8, 0xc0, 0x18, 0xe0, 0x10, 0x60, 0x1f, 0xf0, 0x30, 0x70, 0x20, 0x38, 0x60, 0x38, 0xf8, 0xfc}
+
+/* Aacute (193) */
+#define NXFONT_METRICS_193 {2, 14, 17, 0, 4, 0}
+#define NXFONT_BITMAP_193 {0x3, 0x80, 0x7, 0x0, 0xc, 0x0, 0x0, 0x0, 0x3, 0x0, 0x3, 0x80, 0x7, 0x80, 0x5, 0xc0, 0xd, 0xc0, 0x8, 0xc0, 0x18, 0xe0, 0x10, 0x60, 0x1f, 0xf0, 0x30, 0x70, 0x20, 0x38, 0x60, 0x38, 0xf8, 0xfc}
+
+/* Acircumflex (194) */
+#define NXFONT_METRICS_194 {2, 14, 17, 0, 4, 0}
+#define NXFONT_BITMAP_194 {0x3, 0x0, 0x7, 0x80, 0xc, 0xc0, 0x0, 0x0, 0x3, 0x0, 0x3, 0x80, 0x7, 0x80, 0x5, 0xc0, 0xd, 0xc0, 0x8, 0xc0, 0x18, 0xe0, 0x10, 0x60, 0x1f, 0xf0, 0x30, 0x70, 0x20, 0x38, 0x60, 0x38, 0xf8, 0xfc}
+
+/* Atilde (195) */
+#define NXFONT_METRICS_195 {2, 14, 17, 0, 4, 0}
+#define NXFONT_BITMAP_195 {0x6, 0x40, 0xf, 0xc0, 0x9, 0x80, 0x0, 0x0, 0x3, 0x0, 0x3, 0x80, 0x7, 0x80, 0x5, 0xc0, 0xd, 0xc0, 0x8, 0xc0, 0x18, 0xe0, 0x10, 0x60, 0x1f, 0xf0, 0x30, 0x70, 0x20, 0x38, 0x60, 0x38, 0xf8, 0xfc}
+
+/* Adieresis (196) */
+#define NXFONT_METRICS_196 {2, 14, 16, 0, 5, 0}
+#define NXFONT_BITMAP_196 {0xc, 0xc0, 0xc, 0xc0, 0x0, 0x0, 0x3, 0x0, 0x3, 0x80, 0x7, 0x80, 0x5, 0xc0, 0xd, 0xc0, 0x8, 0xc0, 0x18, 0xe0, 0x10, 0x60, 0x1f, 0xf0, 0x30, 0x70, 0x20, 0x38, 0x60, 0x38, 0xf8, 0xfc}
+
+/* Aring (197) */
+#define NXFONT_METRICS_197 {2, 14, 17, 0, 4, 0}
+#define NXFONT_BITMAP_197 {0x7, 0x0, 0xd, 0x80, 0xd, 0x80, 0x7, 0x0, 0x3, 0x0, 0x3, 0x80, 0x7, 0x80, 0x5, 0xc0, 0xd, 0xc0, 0x8, 0xc0, 0x18, 0xe0, 0x10, 0x60, 0x1f, 0xf0, 0x30, 0x70, 0x20, 0x38, 0x60, 0x38, 0xf8, 0xfc}
+
+/* AE (198) */
+#define NXFONT_METRICS_198 {3, 17, 13, 0, 8, 0}
+#define NXFONT_BITMAP_198 {0x7, 0xff, 0x80, 0x3, 0xe1, 0x80, 0x2, 0xe0, 0x80, 0x6, 0xe0, 0x0, 0x4, 0xe0, 0x0, 0xc, 0xe2, 0x0, 0x8, 0xfe, 0x0, 0x1f, 0xe2, 0x0, 0x10, 0xe0, 0x0, 0x30, 0xe0, 0x0, 0x20, 0xe0, 0x80, 0x60, 0xe1, 0x80, 0xf9, 0xff, 0x80}
+
+/* Ccedilla (199) */
+#define NXFONT_METRICS_199 {2, 12, 17, 1, 8, 0}
+#define NXFONT_BITMAP_199 {0xf, 0x90, 0x38, 0xf0, 0x70, 0x70, 0x70, 0x30, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0x70, 0x0, 0x70, 0x30, 0x3c, 0xe0, 0xf, 0x80, 0x4, 0x0, 0x3, 0x0, 0x13, 0x0, 0xe, 0x0}
+
+/* Egrave (200) */
+#define NXFONT_METRICS_200 {2, 10, 17, 2, 4, 0}
+#define NXFONT_BITMAP_200 {0x38, 0x0, 0x1c, 0x0, 0x6, 0x0, 0x0, 0x0, 0xff, 0xc0, 0x70, 0xc0, 0x70, 0x40, 0x70, 0x0, 0x70, 0x0, 0x71, 0x0, 0x7f, 0x0, 0x71, 0x0, 0x70, 0x0, 0x70, 0x0, 0x70, 0x40, 0x70, 0xc0, 0xff, 0xc0}
+
+/* Eacute (201) */
+#define NXFONT_METRICS_201 {2, 10, 17, 2, 4, 0}
+#define NXFONT_BITMAP_201 {0xe, 0x0, 0x1c, 0x0, 0x30, 0x0, 0x0, 0x0, 0xff, 0xc0, 0x70, 0xc0, 0x70, 0x40, 0x70, 0x0, 0x70, 0x0, 0x71, 0x0, 0x7f, 0x0, 0x71, 0x0, 0x70, 0x0, 0x70, 0x0, 0x70, 0x40, 0x70, 0xc0, 0xff, 0xc0}
+
+/* Ecircumflex (202) */
+#define NXFONT_METRICS_202 {2, 10, 17, 2, 4, 0}
+#define NXFONT_BITMAP_202 {0xc, 0x0, 0x1e, 0x0, 0x33, 0x0, 0x0, 0x0, 0xff, 0xc0, 0x70, 0xc0, 0x70, 0x40, 0x70, 0x0, 0x70, 0x0, 0x71, 0x0, 0x7f, 0x0, 0x71, 0x0, 0x70, 0x0, 0x70, 0x0, 0x70, 0x40, 0x70, 0xc0, 0xff, 0xc0}
+
+/* Edieresis (203) */
+#define NXFONT_METRICS_203 {2, 10, 16, 2, 5, 0}
+#define NXFONT_BITMAP_203 {0x33, 0x0, 0x33, 0x0, 0x0, 0x0, 0xff, 0xc0, 0x70, 0xc0, 0x70, 0x40, 0x70, 0x0, 0x70, 0x0, 0x71, 0x0, 0x7f, 0x0, 0x71, 0x0, 0x70, 0x0, 0x70, 0x0, 0x70, 0x40, 0x70, 0xc0, 0xff, 0xc0}
+
+/* Igrave (204) */
+#define NXFONT_METRICS_204 {1, 5, 17, 1, 4, 0}
+#define NXFONT_BITMAP_204 {0xe0, 0x70, 0x18, 0x0, 0xf8, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0xf8}
+
+/* Iacute (205) */
+#define NXFONT_METRICS_205 {1, 5, 17, 1, 4, 0}
+#define NXFONT_BITMAP_205 {0x38, 0x70, 0xc0, 0x0, 0xf8, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0xf8}
+
+/* Icircumflex (206) */
+#define NXFONT_METRICS_206 {1, 6, 17, 1, 4, 0}
+#define NXFONT_BITMAP_206 {0x30, 0x78, 0xcc, 0x0, 0xf8, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0xf8}
+
+/* Idieresis (207) */
+#define NXFONT_METRICS_207 {1, 6, 16, 1, 5, 0}
+#define NXFONT_BITMAP_207 {0xcc, 0xcc, 0x0, 0xf8, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0xf8}
+
+/* Eth (208) */
+#define NXFONT_METRICS_208 {2, 13, 13, 0, 8, 0}
+#define NXFONT_BITMAP_208 {0x7f, 0x80, 0x38, 0xe0, 0x38, 0x70, 0x38, 0x30, 0x38, 0x38, 0x38, 0x38, 0xfe, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x30, 0x38, 0x70, 0x38, 0xe0, 0x7f, 0x80}
+
+/* Ntilde (209) */
+#define NXFONT_METRICS_209 {2, 12, 17, 1, 4, 0}
+#define NXFONT_BITMAP_209 {0xc, 0x80, 0x1f, 0x80, 0x13, 0x0, 0x0, 0x0, 0xf0, 0x70, 0x78, 0x20, 0x78, 0x20, 0x7c, 0x20, 0x5e, 0x20, 0x4e, 0x20, 0x4f, 0x20, 0x47, 0xa0, 0x43, 0xa0, 0x43, 0xe0, 0x41, 0xe0, 0x40, 0xe0, 0xe0, 0xe0}
+
+/* Ograve (210) */
+#define NXFONT_METRICS_210 {2, 13, 17, 1, 4, 0}
+#define NXFONT_BITMAP_210 {0xe, 0x0, 0x7, 0x0, 0x1, 0x80, 0x0, 0x0, 0xf, 0x80, 0x38, 0xe0, 0x70, 0x70, 0x70, 0x70, 0xe0, 0x38, 0xe0, 0x38, 0xe0, 0x38, 0xe0, 0x38, 0xe0, 0x38, 0x70, 0x70, 0x70, 0x70, 0x38, 0xe0, 0xf, 0x80}
+
+/* Oacute (211) */
+#define NXFONT_METRICS_211 {2, 13, 17, 1, 4, 0}
+#define NXFONT_BITMAP_211 {0x3, 0x80, 0x7, 0x0, 0xc, 0x0, 0x0, 0x0, 0xf, 0x80, 0x38, 0xe0, 0x70, 0x70, 0x70, 0x70, 0xe0, 0x38, 0xe0, 0x38, 0xe0, 0x38, 0xe0, 0x38, 0xe0, 0x38, 0x70, 0x70, 0x70, 0x70, 0x38, 0xe0, 0xf, 0x80}
+
+/* Ocircumflex (212) */
+#define NXFONT_METRICS_212 {2, 13, 17, 1, 4, 0}
+#define NXFONT_BITMAP_212 {0x6, 0x0, 0xf, 0x0, 0x19, 0x80, 0x0, 0x0, 0xf, 0x80, 0x38, 0xe0, 0x70, 0x70, 0x70, 0x70, 0xe0, 0x38, 0xe0, 0x38, 0xe0, 0x38, 0xe0, 0x38, 0xe0, 0x38, 0x70, 0x70, 0x70, 0x70, 0x38, 0xe0, 0xf, 0x80}
+
+/* Otilde (213) */
+#define NXFONT_METRICS_213 {2, 13, 17, 1, 4, 0}
+#define NXFONT_BITMAP_213 {0xc, 0x80, 0x1f, 0x80, 0x13, 0x0, 0x0, 0x0, 0xf, 0x80, 0x38, 0xe0, 0x70, 0x70, 0x70, 0x70, 0xe0, 0x38, 0xe0, 0x38, 0xe0, 0x38, 0xe0, 0x38, 0xe0, 0x38, 0x70, 0x70, 0x70, 0x70, 0x38, 0xe0, 0xf, 0x80}
+
+/* Odieresis (214) */
+#define NXFONT_METRICS_214 {2, 13, 16, 1, 5, 0}
+#define NXFONT_BITMAP_214 {0x19, 0x80, 0x19, 0x80, 0x0, 0x0, 0xf, 0x80, 0x38, 0xe0, 0x70, 0x70, 0x70, 0x70, 0xe0, 0x38, 0xe0, 0x38, 0xe0, 0x38, 0xe0, 0x38, 0xe0, 0x38, 0x70, 0x70, 0x70, 0x70, 0x38, 0xe0, 0xf, 0x80}
+
+/* multiply (215) */
+#define NXFONT_METRICS_215 {2, 9, 8, 1, 12, 0}
+#define NXFONT_BITMAP_215 {0xc1, 0x80, 0x63, 0x0, 0x36, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x36, 0x0, 0x63, 0x0, 0xc1, 0x80}
+
+/* Oslash (216) */
+#define NXFONT_METRICS_216 {2, 13, 15, 1, 7, 0}
+#define NXFONT_BITMAP_216 {0x0, 0x60, 0xf, 0xc0, 0x38, 0xe0, 0x70, 0xb0, 0x71, 0xb0, 0xe1, 0x38, 0xe3, 0x38, 0xe2, 0x38, 0xe6, 0x38, 0xe4, 0x38, 0x6c, 0x70, 0x68, 0x70, 0x38, 0xe0, 0x1f, 0x80, 0x30, 0x0}
+
+/* Ugrave (217) */
+#define NXFONT_METRICS_217 {2, 12, 17, 1, 4, 0}
+#define NXFONT_BITMAP_217 {0x1c, 0x0, 0xe, 0x0, 0x3, 0x0, 0x0, 0x0, 0xf8, 0xf0, 0x70, 0x20, 0x70, 0x20, 0x70, 0x20, 0x70, 0x20, 0x70, 0x20, 0x70, 0x20, 0x70, 0x20, 0x70, 0x20, 0x70, 0x20, 0x70, 0x60, 0x38, 0xc0, 0x1f, 0x80}
+
+/* Uacute (218) */
+#define NXFONT_METRICS_218 {2, 12, 17, 1, 4, 0}
+#define NXFONT_BITMAP_218 {0x1, 0xc0, 0x3, 0x80, 0x6, 0x0, 0x0, 0x0, 0xf8, 0xf0, 0x70, 0x20, 0x70, 0x20, 0x70, 0x20, 0x70, 0x20, 0x70, 0x20, 0x70, 0x20, 0x70, 0x20, 0x70, 0x20, 0x70, 0x20, 0x70, 0x60, 0x38, 0xc0, 0x1f, 0x80}
+
+/* Ucircumflex (219) */
+#define NXFONT_METRICS_219 {2, 12, 17, 1, 4, 0}
+#define NXFONT_BITMAP_219 {0x6, 0x0, 0xf, 0x0, 0x19, 0x80, 0x0, 0x0, 0xf8, 0xf0, 0x70, 0x20, 0x70, 0x20, 0x70, 0x20, 0x70, 0x20, 0x70, 0x20, 0x70, 0x20, 0x70, 0x20, 0x70, 0x20, 0x70, 0x20, 0x70, 0x60, 0x38, 0xc0, 0x1f, 0x80}
+
+/* Udieresis (220) */
+#define NXFONT_METRICS_220 {2, 12, 16, 1, 5, 0}
+#define NXFONT_BITMAP_220 {0x19, 0x80, 0x19, 0x80, 0x0, 0x0, 0xf8, 0xf0, 0x70, 0x20, 0x70, 0x20, 0x70, 0x20, 0x70, 0x20, 0x70, 0x20, 0x70, 0x20, 0x70, 0x20, 0x70, 0x20, 0x70, 0x20, 0x70, 0x60, 0x38, 0xc0, 0x1f, 0x80}
+
+/* Yacute (221) */
+#define NXFONT_METRICS_221 {2, 13, 17, 1, 4, 0}
+#define NXFONT_BITMAP_221 {0x0, 0xe0, 0x1, 0xc0, 0x3, 0x0, 0x0, 0x0, 0xfc, 0x78, 0x78, 0x30, 0x38, 0x60, 0x3c, 0x40, 0x1e, 0xc0, 0xe, 0x80, 0xf, 0x80, 0x7, 0x0, 0x7, 0x0, 0x7, 0x0, 0x7, 0x0, 0x7, 0x0, 0x1f, 0xc0}
+
+/* Thorn (222) */
+#define NXFONT_METRICS_222 {2, 10, 13, 1, 8, 0}
+#define NXFONT_BITMAP_222 {0xf8, 0x0, 0x70, 0x0, 0x70, 0x0, 0x7f, 0x0, 0x73, 0x80, 0x71, 0xc0, 0x71, 0xc0, 0x71, 0xc0, 0x73, 0x80, 0x7f, 0x0, 0x70, 0x0, 0x70, 0x0, 0xf8, 0x0}
+
+/* germandbls (223) */
+#define NXFONT_METRICS_223 {2, 9, 13, 0, 8, 0}
+#define NXFONT_BITMAP_223 {0x1e, 0x0, 0x3b, 0x0, 0x73, 0x80, 0x73, 0x80, 0x73, 0x80, 0x77, 0x0, 0x72, 0x0, 0x73, 0x0, 0x73, 0x80, 0x73, 0x80, 0x73, 0x80, 0x73, 0x80, 0xf7, 0x0}
+
+/* agrave (224) */
+#define NXFONT_METRICS_224 {1, 8, 13, 0, 8, 0}
+#define NXFONT_BITMAP_224 {0x70, 0x38, 0xc, 0x0, 0x7c, 0xce, 0xce, 0x1e, 0x6e, 0xce, 0xce, 0xfe, 0x77}
+
+/* aacute (225) */
+#define NXFONT_METRICS_225 {1, 8, 13, 0, 8, 0}
+#define NXFONT_BITMAP_225 {0xe, 0x1c, 0x30, 0x0, 0x7c, 0xce, 0xce, 0x1e, 0x6e, 0xce, 0xce, 0xfe, 0x77}
+
+/* acircumflex (226) */
+#define NXFONT_METRICS_226 {1, 8, 13, 0, 8, 0}
+#define NXFONT_BITMAP_226 {0x18, 0x3c, 0x66, 0x0, 0x7c, 0xce, 0xce, 0x1e, 0x6e, 0xce, 0xce, 0xfe, 0x77}
+
+/* atilde (227) */
+#define NXFONT_METRICS_227 {1, 8, 13, 0, 8, 0}
+#define NXFONT_BITMAP_227 {0x32, 0x7e, 0x4c, 0x0, 0x7c, 0xce, 0xce, 0x1e, 0x6e, 0xce, 0xce, 0xfe, 0x77}
+
+/* adieresis (228) */
+#define NXFONT_METRICS_228 {1, 8, 12, 0, 9, 0}
+#define NXFONT_BITMAP_228 {0x66, 0x66, 0x0, 0x7c, 0xce, 0xce, 0x1e, 0x6e, 0xce, 0xce, 0xfe, 0x77}
+
+/* aring (229) */
+#define NXFONT_METRICS_229 {1, 8, 13, 0, 8, 0}
+#define NXFONT_BITMAP_229 {0x38, 0x6c, 0x6c, 0x38, 0x7c, 0xce, 0xce, 0x1e, 0x6e, 0xce, 0xce, 0xfe, 0x77}
+
+/* ae (230) */
+#define NXFONT_METRICS_230 {2, 12, 9, 0, 12, 0}
+#define NXFONT_BITMAP_230 {0x7d, 0xe0, 0xe7, 0xb0, 0xc7, 0x30, 0xf, 0xf0, 0x7f, 0x0, 0xe7, 0x0, 0xc7, 0x0, 0xef, 0xb0, 0x79, 0xe0}
+
+/* ccedilla (231) */
+#define NXFONT_METRICS_231 {1, 7, 13, 0, 12, 0}
+#define NXFONT_BITMAP_231 {0x3e, 0x76, 0xe6, 0xe0, 0xe0, 0xe0, 0xe0, 0x76, 0x3c, 0x10, 0xc, 0x4c, 0x38}
+
+/* egrave (232) */
+#define NXFONT_METRICS_232 {1, 7, 13, 0, 8, 0}
+#define NXFONT_BITMAP_232 {0x70, 0x38, 0xc, 0x0, 0x3c, 0x76, 0xe6, 0xfe, 0xe0, 0xe0, 0xe0, 0x76, 0x3c}
+
+/* eacute (233) */
+#define NXFONT_METRICS_233 {1, 8, 13, 0, 8, 0}
+#define NXFONT_BITMAP_233 {0x7, 0xe, 0x18, 0x0, 0x3c, 0x76, 0xe6, 0xfe, 0xe0, 0xe0, 0xe0, 0x76, 0x3c}
+
+/* ecircumflex (234) */
+#define NXFONT_METRICS_234 {1, 7, 13, 0, 8, 0}
+#define NXFONT_BITMAP_234 {0x18, 0x3c, 0x66, 0x0, 0x3c, 0x76, 0xe6, 0xfe, 0xe0, 0xe0, 0xe0, 0x76, 0x3c}
+
+/* edieresis (235) */
+#define NXFONT_METRICS_235 {1, 7, 12, 0, 9, 0}
+#define NXFONT_BITMAP_235 {0x66, 0x66, 0x0, 0x3c, 0x76, 0xe6, 0xfe, 0xe0, 0xe0, 0xe0, 0x76, 0x3c}
+
+/* igrave (236) */
+#define NXFONT_METRICS_236 {1, 5, 13, 0, 8, 0}
+#define NXFONT_BITMAP_236 {0xe0, 0x70, 0x18, 0x0, 0xf0, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0xf8}
+
+/* iacute (237) */
+#define NXFONT_METRICS_237 {1, 5, 13, 0, 8, 0}
+#define NXFONT_BITMAP_237 {0x38, 0x70, 0xc0, 0x0, 0xf0, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0xf8}
+
+/* icircumflex (238) */
+#define NXFONT_METRICS_238 {1, 6, 13, 0, 8, 0}
+#define NXFONT_BITMAP_238 {0x30, 0x78, 0xcc, 0x0, 0xf0, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0xf8}
+
+/* idieresis (239) */
+#define NXFONT_METRICS_239 {1, 6, 12, 0, 9, 0}
+#define NXFONT_BITMAP_239 {0xcc, 0xcc, 0x0, 0xf0, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0xf8}
+
+/* eth (240) */
+#define NXFONT_METRICS_240 {1, 8, 13, 0, 8, 0}
+#define NXFONT_BITMAP_240 {0x60, 0x36, 0x38, 0x4c, 0x3e, 0x66, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0x66, 0x3c}
+
+/* ntilde (241) */
+#define NXFONT_METRICS_241 {2, 10, 13, 0, 8, 0}
+#define NXFONT_BITMAP_241 {0x19, 0x0, 0x3f, 0x0, 0x26, 0x0, 0x0, 0x0, 0xe7, 0x0, 0x7f, 0x80, 0x73, 0x80, 0x73, 0x80, 0x73, 0x80, 0x73, 0x80, 0x73, 0x80, 0x73, 0x80, 0xfb, 0xc0}
+
+/* ograve (242) */
+#define NXFONT_METRICS_242 {1, 8, 13, 0, 8, 0}
+#define NXFONT_BITMAP_242 {0x70, 0x38, 0xc, 0x0, 0x3c, 0x66, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0x66, 0x3c}
+
+/* oacute (243) */
+#define NXFONT_METRICS_243 {1, 8, 13, 0, 8, 0}
+#define NXFONT_BITMAP_243 {0x7, 0xe, 0x18, 0x0, 0x3c, 0x66, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0x66, 0x3c}
+
+/* ocircumflex (244) */
+#define NXFONT_METRICS_244 {1, 8, 13, 0, 8, 0}
+#define NXFONT_BITMAP_244 {0x18, 0x3c, 0x66, 0x0, 0x3c, 0x66, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0x66, 0x3c}
+
+/* otilde (245) */
+#define NXFONT_METRICS_245 {1, 8, 13, 0, 8, 0}
+#define NXFONT_BITMAP_245 {0x32, 0x7e, 0x4c, 0x0, 0x3c, 0x66, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0x66, 0x3c}
+
+/* odieresis (246) */
+#define NXFONT_METRICS_246 {1, 8, 12, 0, 9, 0}
+#define NXFONT_BITMAP_246 {0x66, 0x66, 0x0, 0x3c, 0x66, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0x66, 0x3c}
+
+/* divide (247) */
+#define NXFONT_METRICS_247 {1, 8, 8, 1, 12, 0}
+#define NXFONT_BITMAP_247 {0x18, 0x18, 0x0, 0xff, 0xff, 0x0, 0x18, 0x18}
+
+/* oslash (248) -- NOTE: Xoffset should be -1, not 0. */
+#define NXFONT_METRICS_248 {2, 10, 11, 0, 11, 0}
+#define NXFONT_BITMAP_248 {0x0, 0x40, 0x1e, 0x80, 0x33, 0x0, 0x73, 0x80, 0x73, 0x80, 0x77, 0x80, 0x7b, 0x80, 0x71, 0x80, 0x33, 0x0, 0x5e, 0x0, 0x80, 0x0}
+
+/* ugrave (249) */
+#define NXFONT_METRICS_249 {2, 10, 13, 0, 8, 0}
+#define NXFONT_BITMAP_249 {0x38, 0x0, 0x1c, 0x0, 0x6, 0x0, 0x0, 0x0, 0xf7, 0x80, 0x73, 0x80, 0x73, 0x80, 0x73, 0x80, 0x73, 0x80, 0x73, 0x80, 0x73, 0x80, 0x7f, 0x80, 0x3d, 0xc0}
+
+/* uacute (250) */
+#define NXFONT_METRICS_250 {2, 10, 13, 0, 8, 0}
+#define NXFONT_BITMAP_250 {0xe, 0x0, 0x1c, 0x0, 0x30, 0x0, 0x0, 0x0, 0xf7, 0x80, 0x73, 0x80, 0x73, 0x80, 0x73, 0x80, 0x73, 0x80, 0x73, 0x80, 0x73, 0x80, 0x7f, 0x80, 0x3d, 0xc0}
+
+/* ucircumflex (251) */
+#define NXFONT_METRICS_251 {2, 10, 13, 0, 8, 0}
+#define NXFONT_BITMAP_251 {0xc, 0x0, 0x1e, 0x0, 0x33, 0x0, 0x0, 0x0, 0xf7, 0x80, 0x73, 0x80, 0x73, 0x80, 0x73, 0x80, 0x73, 0x80, 0x73, 0x80, 0x73, 0x80, 0x7f, 0x80, 0x3d, 0xc0}
+
+/* udieresis (252) */
+#define NXFONT_METRICS_252 {2, 10, 12, 0, 9, 0}
+#define NXFONT_BITMAP_252 {0x33, 0x0, 0x33, 0x0, 0x0, 0x0, 0xf7, 0x80, 0x73, 0x80, 0x73, 0x80, 0x73, 0x80, 0x73, 0x80, 0x73, 0x80, 0x73, 0x80, 0x7f, 0x80, 0x3d, 0xc0}
+
+/* yacute (253) -- NOTE: Xoffset should be -1, not 0. */
+#define NXFONT_METRICS_253 {2, 10, 17, 0, 8, 0}
+#define NXFONT_BITMAP_253 {0x3, 0x80, 0x7, 0x0, 0xc, 0x0, 0x0, 0x0, 0xfb, 0xc0, 0x71, 0x80, 0x79, 0x0, 0x3b, 0x0, 0x3a, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0xc, 0x0, 0xc, 0x0, 0xc, 0x0, 0x8, 0x0, 0xd8, 0x0, 0xf0, 0x0}
+
+/* thorn (254) */
+#define NXFONT_METRICS_254 {2, 9, 17, 0, 8, 0}
+#define NXFONT_BITMAP_254 {0xf0, 0x0, 0x70, 0x0, 0x70, 0x0, 0x70, 0x0, 0x76, 0x0, 0x7f, 0x0, 0x73, 0x80, 0x73, 0x80, 0x73, 0x80, 0x73, 0x80, 0x73, 0x80, 0x7b, 0x0, 0x76, 0x0, 0x70, 0x0, 0x70, 0x0, 0x70, 0x0, 0xf8, 0x0}
+
+/* ydieresis (255) -- NOTE: Xoffset should be -1, not 0. */
+#define NXFONT_METRICS_255 {2, 10, 16, 0, 9, 0}
+#define NXFONT_BITMAP_255 {0x33, 0x0, 0x33, 0x0, 0x0, 0x0, 0xfb, 0xc0, 0x71, 0x80, 0x79, 0x0, 0x3b, 0x0, 0x3a, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0xc, 0x0, 0xc, 0x0, 0xc, 0x0, 0x8, 0x0, 0xd8, 0x0, 0xf0, 0x0}
+
+/****************************************************************************
+ * Public Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+#define EXTERN extern "C"
+extern "C" {
+#else
+#define EXTERN extern
+#endif
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* __GRAPHICS_NXFONTS_NXFONTS_SERIF22X28B_H */
diff --git a/nuttx/graphics/nxfonts/nxfonts_serif22x29.h b/nuttx/graphics/nxfonts/nxfonts_serif22x29.h
new file mode 100644
index 000000000..35d61ebe8
--- /dev/null
+++ b/nuttx/graphics/nxfonts/nxfonts_serif22x29.h
@@ -0,0 +1,849 @@
+/****************************************************************************
+ * graphics/nxfonts/nxfonts_serif22x29.h
+ *
+ * Copyright (C) 2011-2012 NX Engineering, S.A., All rights reserved.
+ * Author: Jose Pablo Carballo Gomez <jcarballo@nx-engineering.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT}
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING}
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+#ifndef __GRAPHICS_NXFONTS_NXFONTS_SERIF22X29_H
+#define __GRAPHICS_NXFONTS_NXFONTS_SERIF22X29_H
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/* Font ID */
+
+#define NXFONT_ID FONTID_SERIF22X29
+
+/* Ranges of 7-bit and 8-bit fonts */
+
+#define NXFONT_MIN7BIT 33
+#define NXFONT_MAX7BIT 126
+
+#define NXFONT_MIN8BIT 161
+#define NXFONT_MAX8BIT 255
+
+/* Maximum height and width of any glyph in the set */
+
+#define NXFONT_MAXHEIGHT 29
+#define NXFONT_MAXWIDTH 22
+
+/* The width of a space */
+
+#define NXFONT_SPACEWIDTH 5
+
+/* exclam (33) */
+#define NXFONT_METRICS_33 {1, 2, 13, 1, 9, 0}
+#define NXFONT_BITMAP_33 {0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x40, 0x40, 0x40, 0x0, 0x0, 0xc0, 0xc0}
+
+/* quotedbl (34) */
+#define NXFONT_METRICS_34 {1, 6, 4, 1, 9, 0}
+#define NXFONT_BITMAP_34 {0xcc, 0xcc, 0xcc, 0x88}
+
+/* numbersign (35) -- NOTE: Xoffset should be -1, not 0. */
+#define NXFONT_METRICS_35 {2, 12, 11, 0, 10, 0}
+#define NXFONT_BITMAP_35 {0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0x7f, 0xf0, 0x19, 0x80, 0x19, 0x80, 0x19, 0x80, 0xff, 0xe0, 0x33, 0x0, 0x33, 0x0, 0x33, 0x0}
+
+/* dollar (36) */
+#define NXFONT_METRICS_36 {1, 7, 16, 1, 8, 0}
+#define NXFONT_BITMAP_36 {0x10, 0x7c, 0xd6, 0xd2, 0xd0, 0xf0, 0x78, 0x3c, 0x1c, 0x16, 0x16, 0x96, 0xd6, 0x7c, 0x10, 0x10}
+
+/* percent (37) */
+#define NXFONT_METRICS_37 {2, 13, 13, 1, 9, 0}
+#define NXFONT_BITMAP_37 {0x38, 0x30, 0x6f, 0xe0, 0xc4, 0x40, 0xc4, 0x80, 0xcd, 0x80, 0xfb, 0x0, 0x72, 0x70, 0x6, 0xd8, 0xd, 0x88, 0x9, 0x88, 0x19, 0x98, 0x31, 0xf0, 0x20, 0xe0}
+
+/* ampersand (38) */
+#define NXFONT_METRICS_38 {2, 12, 13, 1, 9, 0}
+#define NXFONT_BITMAP_38 {0x1c, 0x0, 0x32, 0x0, 0x32, 0x0, 0x32, 0x0, 0x34, 0x0, 0x19, 0xe0, 0x38, 0xc0, 0x6d, 0x80, 0xcf, 0x0, 0xc7, 0x0, 0xc7, 0x80, 0xed, 0xf0, 0x78, 0xe0}
+
+/* quotesingle (39) */
+#define NXFONT_METRICS_39 {1, 2, 4, 1, 9, 0}
+#define NXFONT_BITMAP_39 {0xc0, 0xc0, 0xc0, 0x80}
+
+/* parenleft (40) */
+#define NXFONT_METRICS_40 {1, 5, 17, 1, 9, 0}
+#define NXFONT_BITMAP_40 {0x18, 0x30, 0x60, 0x60, 0x40, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x40, 0x60, 0x60, 0x30, 0x18}
+
+/* parenright (41) */
+#define NXFONT_METRICS_41 {1, 5, 17, 1, 9, 0}
+#define NXFONT_BITMAP_41 {0xc0, 0x60, 0x30, 0x30, 0x10, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x10, 0x30, 0x30, 0x60, 0xc0}
+
+/* asterisk (42) */
+#define NXFONT_METRICS_42 {1, 7, 7, 1, 9, 0}
+#define NXFONT_BITMAP_42 {0x10, 0xd6, 0x54, 0x38, 0xd6, 0x92, 0x10}
+
+/* plus (43) */
+#define NXFONT_METRICS_43 {1, 8, 8, 1, 13, 0}
+#define NXFONT_BITMAP_43 {0x18, 0x18, 0x18, 0xff, 0xff, 0x18, 0x18, 0x18}
+
+/* comma (44) */
+#define NXFONT_METRICS_44 {1, 3, 5, 0, 20, 0}
+#define NXFONT_BITMAP_44 {0x60, 0x60, 0x20, 0x60, 0xc0}
+
+/* hyphen (45) */
+#define NXFONT_METRICS_45 {1, 5, 2, 0, 17, 0}
+#define NXFONT_BITMAP_45 {0xf8, 0xf8}
+
+/* period (46) */
+#define NXFONT_METRICS_46 {1, 2, 2, 1, 20, 0}
+#define NXFONT_BITMAP_46 {0xc0, 0xc0}
+
+/* slash (47) -- NOTE: Xoffset should be -1, not 0. */
+#define NXFONT_METRICS_47 {1, 7, 17, 0, 9, 0}
+#define NXFONT_BITMAP_47 {0x2, 0x2, 0x6, 0x4, 0xc, 0xc, 0x8, 0x18, 0x18, 0x10, 0x30, 0x30, 0x20, 0x60, 0x60, 0x40, 0xc0}
+
+/* zero (48) */
+#define NXFONT_METRICS_48 {1, 8, 13, 1, 9, 0}
+#define NXFONT_BITMAP_48 {0x3c, 0x66, 0x66, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x66, 0x66, 0x3c}
+
+/* one (49) */
+#define NXFONT_METRICS_49 {1, 6, 13, 2, 9, 0}
+#define NXFONT_BITMAP_49 {0x30, 0x70, 0xf0, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x78, 0xfc}
+
+/* two (50) */
+#define NXFONT_METRICS_50 {1, 7, 13, 1, 9, 0}
+#define NXFONT_BITMAP_50 {0x3c, 0x7e, 0xce, 0x86, 0x6, 0x6, 0xc, 0xc, 0x18, 0x30, 0x62, 0xfe, 0xfe}
+
+/* three (51) */
+#define NXFONT_METRICS_51 {1, 7, 13, 1, 9, 0}
+#define NXFONT_BITMAP_51 {0x7c, 0xce, 0x86, 0x6, 0xc, 0x38, 0x3c, 0xe, 0x6, 0x6, 0x6, 0xcc, 0xf8}
+
+/* four (52) */
+#define NXFONT_METRICS_52 {1, 8, 13, 0, 9, 0}
+#define NXFONT_BITMAP_52 {0x2, 0x6, 0xe, 0xe, 0x16, 0x26, 0x46, 0x46, 0xff, 0xff, 0x6, 0x6, 0x6}
+
+/* five (53) */
+#define NXFONT_METRICS_53 {1, 7, 13, 1, 9, 0}
+#define NXFONT_BITMAP_53 {0x7e, 0x7c, 0xc0, 0xc0, 0xf0, 0x3c, 0xc, 0xe, 0x6, 0x6, 0xc, 0xdc, 0xf0}
+
+/* six (54) */
+#define NXFONT_METRICS_54 {1, 8, 13, 1, 9, 0}
+#define NXFONT_BITMAP_54 {0x7, 0x1c, 0x30, 0x60, 0x60, 0xfc, 0xc6, 0xc3, 0xc3, 0xc3, 0xe3, 0x76, 0x3c}
+
+/* seven (55) */
+#define NXFONT_METRICS_55 {1, 8, 13, 1, 9, 0}
+#define NXFONT_BITMAP_55 {0x7f, 0xff, 0x82, 0x6, 0x4, 0xc, 0xc, 0x8, 0x18, 0x18, 0x10, 0x30, 0x30}
+
+/* eight (56) */
+#define NXFONT_METRICS_56 {1, 8, 13, 1, 9, 0}
+#define NXFONT_BITMAP_56 {0x3c, 0x66, 0xc2, 0xe6, 0x7c, 0x38, 0x3c, 0x6e, 0xc7, 0xc3, 0xc3, 0x66, 0x3c}
+
+/* nine (57) */
+#define NXFONT_METRICS_57 {1, 8, 13, 1, 9, 0}
+#define NXFONT_BITMAP_57 {0x3c, 0x6e, 0xc6, 0xc3, 0xc3, 0xc3, 0xe3, 0x7f, 0x36, 0x6, 0xc, 0x38, 0xe0}
+
+/* colon (58) */
+#define NXFONT_METRICS_58 {1, 2, 9, 1, 13, 0}
+#define NXFONT_BITMAP_58 {0xc0, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc0, 0xc0}
+
+/* semicolon (59) */
+#define NXFONT_METRICS_59 {1, 3, 12, 0, 13, 0}
+#define NXFONT_BITMAP_59 {0x60, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x60, 0x60, 0x20, 0x60, 0xc0}
+
+/* less (60) */
+#define NXFONT_METRICS_60 {2, 9, 9, 1, 13, 0}
+#define NXFONT_BITMAP_60 {0x1, 0x80, 0x7, 0x0, 0x1c, 0x0, 0x70, 0x0, 0xc0, 0x0, 0x70, 0x0, 0x1c, 0x0, 0x7, 0x0, 0x1, 0x80}
+
+/* equal (61) */
+#define NXFONT_METRICS_61 {2, 9, 5, 1, 15, 0}
+#define NXFONT_BITMAP_61 {0xff, 0x80, 0xff, 0x80, 0x0, 0x0, 0xff, 0x80, 0xff, 0x80}
+
+/* greater (62) */
+#define NXFONT_METRICS_62 {2, 9, 9, 1, 13, 0}
+#define NXFONT_BITMAP_62 {0xc0, 0x0, 0x70, 0x0, 0x1c, 0x0, 0x7, 0x0, 0x1, 0x80, 0x7, 0x0, 0x1c, 0x0, 0x70, 0x0, 0xc0, 0x0}
+
+/* question (63) */
+#define NXFONT_METRICS_63 {1, 6, 13, 1, 9, 0}
+#define NXFONT_BITMAP_63 {0x78, 0x8c, 0xc4, 0xcc, 0xc, 0x18, 0x18, 0x30, 0x20, 0x20, 0x0, 0x30, 0x30}
+
+/* at (64) */
+#define NXFONT_METRICS_64 {2, 14, 16, 1, 9, 0}
+#define NXFONT_BITMAP_64 {0x7, 0xe0, 0xe, 0x30, 0x38, 0x18, 0x30, 0x8, 0x63, 0xec, 0x67, 0xe4, 0xc6, 0x64, 0xcc, 0x64, 0xcc, 0xcc, 0xcc, 0xc8, 0xcd, 0xd8, 0x67, 0x70, 0x60, 0x0, 0x30, 0x0, 0x1c, 0x30, 0x7, 0xe0}
+
+/* A (65) */
+#define NXFONT_METRICS_65 {2, 13, 13, 1, 9, 0}
+#define NXFONT_BITMAP_65 {0x2, 0x0, 0x7, 0x0, 0x7, 0x0, 0x5, 0x0, 0xd, 0x80, 0x9, 0x80, 0x19, 0xc0, 0x10, 0xc0, 0x1f, 0xc0, 0x30, 0xe0, 0x20, 0x60, 0x60, 0x70, 0xf0, 0xf8}
+
+/* B (66) */
+#define NXFONT_METRICS_66 {2, 10, 13, 2, 9, 0}
+#define NXFONT_BITMAP_66 {0xff, 0x0, 0x63, 0x80, 0x61, 0x80, 0x61, 0x80, 0x61, 0x80, 0x63, 0x0, 0x7f, 0x80, 0x61, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x61, 0x80, 0xff, 0x0}
+
+/* C (67) */
+#define NXFONT_METRICS_67 {2, 11, 13, 1, 9, 0}
+#define NXFONT_BITMAP_67 {0xf, 0x20, 0x30, 0xe0, 0x60, 0x60, 0x60, 0x20, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0x60, 0x0, 0x60, 0x60, 0x38, 0xc0, 0xf, 0x0}
+
+/* D (68) */
+#define NXFONT_METRICS_68 {2, 11, 13, 2, 9, 0}
+#define NXFONT_BITMAP_68 {0xff, 0x0, 0x63, 0x80, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xc0, 0x60, 0xc0, 0x63, 0x80, 0xff, 0x0}
+
+/* E (69) */
+#define NXFONT_METRICS_69 {2, 9, 13, 1, 9, 0}
+#define NXFONT_BITMAP_69 {0xff, 0x80, 0x61, 0x80, 0x60, 0x80, 0x60, 0x0, 0x60, 0x0, 0x61, 0x0, 0x7f, 0x0, 0x61, 0x0, 0x60, 0x0, 0x60, 0x0, 0x60, 0x80, 0x61, 0x80, 0xff, 0x80}
+
+/* F (70) */
+#define NXFONT_METRICS_70 {2, 9, 13, 1, 9, 0}
+#define NXFONT_BITMAP_70 {0xff, 0x80, 0x61, 0x80, 0x60, 0x80, 0x60, 0x0, 0x60, 0x0, 0x61, 0x0, 0x7f, 0x0, 0x61, 0x0, 0x60, 0x0, 0x60, 0x0, 0x60, 0x0, 0x60, 0x0, 0xf0, 0x0}
+
+/* G (71) */
+#define NXFONT_METRICS_71 {2, 12, 13, 1, 9, 0}
+#define NXFONT_BITMAP_71 {0xf, 0x20, 0x30, 0xe0, 0x60, 0x60, 0x60, 0x20, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0xf0, 0xc0, 0x60, 0xc0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x39, 0xc0, 0xf, 0x0}
+
+/* H (72) */
+#define NXFONT_METRICS_72 {2, 12, 13, 1, 9, 0}
+#define NXFONT_BITMAP_72 {0xf0, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7f, 0xe0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xf0, 0xf0}
+
+/* I (73) */
+#define NXFONT_METRICS_73 {1, 4, 13, 1, 9, 0}
+#define NXFONT_BITMAP_73 {0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xf0}
+
+/* J (74) */
+#define NXFONT_METRICS_74 {1, 6, 13, 0, 9, 0}
+#define NXFONT_BITMAP_74 {0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xd8, 0xf0}
+
+/* K (75) */
+#define NXFONT_METRICS_75 {2, 12, 13, 1, 9, 0}
+#define NXFONT_BITMAP_75 {0xf3, 0xe0, 0x61, 0x80, 0x63, 0x0, 0x66, 0x0, 0x6c, 0x0, 0x78, 0x0, 0x78, 0x0, 0x7c, 0x0, 0x6e, 0x0, 0x67, 0x0, 0x63, 0x80, 0x61, 0xc0, 0xf0, 0xf0}
+
+/* L (76) */
+#define NXFONT_METRICS_76 {2, 10, 13, 1, 9, 0}
+#define NXFONT_BITMAP_76 {0xf0, 0x0, 0x60, 0x0, 0x60, 0x0, 0x60, 0x0, 0x60, 0x0, 0x60, 0x0, 0x60, 0x0, 0x60, 0x0, 0x60, 0x0, 0x60, 0x0, 0x60, 0x40, 0x60, 0xc0, 0xff, 0xc0}
+
+/* M (77) */
+#define NXFONT_METRICS_77 {2, 14, 13, 1, 9, 0}
+#define NXFONT_BITMAP_77 {0xe0, 0x1c, 0x70, 0x38, 0x70, 0x38, 0x78, 0x78, 0x58, 0x58, 0x58, 0xd8, 0x5c, 0xd8, 0x4c, 0x98, 0x4d, 0x98, 0x47, 0x18, 0x47, 0x18, 0x42, 0x18, 0xe2, 0x3c}
+
+/* N (78) */
+#define NXFONT_METRICS_78 {2, 12, 13, 1, 9, 0}
+#define NXFONT_BITMAP_78 {0xe0, 0x70, 0x60, 0x20, 0x70, 0x20, 0x78, 0x20, 0x5c, 0x20, 0x4c, 0x20, 0x4e, 0x20, 0x47, 0x20, 0x43, 0xa0, 0x41, 0xe0, 0x40, 0xe0, 0x40, 0x60, 0xe0, 0x20}
+
+/* O (79) */
+#define NXFONT_METRICS_79 {2, 12, 13, 1, 9, 0}
+#define NXFONT_BITMAP_79 {0xf, 0x0, 0x30, 0xc0, 0x60, 0x60, 0x60, 0x60, 0xc0, 0x30, 0xc0, 0x30, 0xc0, 0x30, 0xc0, 0x30, 0xc0, 0x30, 0x60, 0x60, 0x60, 0x60, 0x30, 0xc0, 0xf, 0x0}
+
+/* P (80) */
+#define NXFONT_METRICS_80 {2, 9, 13, 1, 9, 0}
+#define NXFONT_BITMAP_80 {0xff, 0x0, 0x63, 0x80, 0x61, 0x80, 0x61, 0x80, 0x61, 0x80, 0x63, 0x0, 0x7e, 0x0, 0x60, 0x0, 0x60, 0x0, 0x60, 0x0, 0x60, 0x0, 0x60, 0x0, 0xf0, 0x0}
+
+/* Q (81) */
+#define NXFONT_METRICS_81 {2, 12, 17, 1, 9, 0}
+#define NXFONT_BITMAP_81 {0xf, 0x0, 0x30, 0xc0, 0x60, 0x60, 0x60, 0x60, 0xc0, 0x30, 0xc0, 0x30, 0xc0, 0x30, 0xc0, 0x30, 0xc0, 0x30, 0x60, 0x60, 0x60, 0x60, 0x30, 0xc0, 0xf, 0x0, 0x6, 0x0, 0x3, 0x0, 0x1, 0xc0, 0x0, 0xf0}
+
+/* R (82) */
+#define NXFONT_METRICS_82 {2, 11, 13, 1, 9, 0}
+#define NXFONT_BITMAP_82 {0xff, 0x0, 0x63, 0x80, 0x61, 0x80, 0x61, 0x80, 0x61, 0x80, 0x63, 0x0, 0x7e, 0x0, 0x6e, 0x0, 0x66, 0x0, 0x63, 0x0, 0x61, 0x80, 0x60, 0xc0, 0xf0, 0xe0}
+
+/* S (83) */
+#define NXFONT_METRICS_83 {1, 8, 13, 2, 9, 0}
+#define NXFONT_BITMAP_83 {0x3a, 0x46, 0xc2, 0xc0, 0xe0, 0x78, 0x3c, 0xe, 0x7, 0x3, 0x83, 0xc6, 0xb8}
+
+/* T (84) */
+#define NXFONT_METRICS_84 {2, 10, 13, 1, 9, 0}
+#define NXFONT_BITMAP_84 {0xff, 0xc0, 0xcc, 0xc0, 0x8c, 0x40, 0xc, 0x0, 0xc, 0x0, 0xc, 0x0, 0xc, 0x0, 0xc, 0x0, 0xc, 0x0, 0xc, 0x0, 0xc, 0x0, 0xc, 0x0, 0x1e, 0x0}
+
+/* U (85) */
+#define NXFONT_METRICS_85 {2, 11, 13, 2, 9, 0}
+#define NXFONT_BITMAP_85 {0xf0, 0xe0, 0x60, 0x40, 0x60, 0x40, 0x60, 0x40, 0x60, 0x40, 0x60, 0x40, 0x60, 0x40, 0x60, 0x40, 0x60, 0x40, 0x60, 0x40, 0x70, 0xc0, 0x39, 0x80, 0x1f, 0x0}
+
+/* V (86) */
+#define NXFONT_METRICS_86 {2, 13, 13, 0, 9, 0}
+#define NXFONT_BITMAP_86 {0xf8, 0x78, 0x70, 0x30, 0x30, 0x20, 0x38, 0x20, 0x18, 0x60, 0x18, 0x40, 0x1c, 0x40, 0xc, 0xc0, 0xe, 0x80, 0x6, 0x80, 0x7, 0x80, 0x3, 0x0, 0x3, 0x0}
+
+/* W (87) */
+#define NXFONT_METRICS_87 {3, 18, 13, 0, 9, 0}
+#define NXFONT_BITMAP_87 {0xf9, 0xe3, 0xc0, 0x70, 0xc1, 0x80, 0x30, 0xc1, 0x0, 0x38, 0xe1, 0x0, 0x18, 0x63, 0x0, 0x18, 0xe2, 0x0, 0x18, 0xe2, 0x0, 0x1d, 0xa6, 0x0, 0xd, 0x34, 0x0, 0xf, 0x3c, 0x0, 0xe, 0x38, 0x0, 0x6, 0x18, 0x0, 0x6, 0x18, 0x0}
+
+/* X (88) */
+#define NXFONT_METRICS_88 {2, 12, 13, 1, 9, 0}
+#define NXFONT_BITMAP_88 {0xf0, 0x70, 0x70, 0x60, 0x38, 0xc0, 0x19, 0x80, 0xd, 0x0, 0xe, 0x0, 0x6, 0x0, 0xf, 0x0, 0x1b, 0x0, 0x11, 0x80, 0x31, 0xc0, 0x60, 0xe0, 0xf0, 0xf0}
+
+/* Y (89) */
+#define NXFONT_METRICS_89 {2, 12, 13, 1, 9, 0}
+#define NXFONT_BITMAP_89 {0xf0, 0xf0, 0x70, 0x60, 0x30, 0xc0, 0x18, 0x80, 0x19, 0x0, 0xf, 0x0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0xf, 0x0}
+
+/* Z (90) */
+#define NXFONT_METRICS_90 {2, 10, 13, 1, 9, 0}
+#define NXFONT_BITMAP_90 {0x7f, 0xc0, 0x61, 0xc0, 0x41, 0x80, 0x3, 0x80, 0x7, 0x0, 0x6, 0x0, 0xe, 0x0, 0x1c, 0x0, 0x38, 0x0, 0x30, 0x0, 0x70, 0x40, 0xe0, 0xc0, 0xff, 0xc0}
+
+/* bracketleft (91) */
+#define NXFONT_METRICS_91 {1, 4, 16, 2, 9, 0}
+#define NXFONT_BITMAP_91 {0xf0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf0}
+
+/* backslash (92) */
+#define NXFONT_METRICS_92 {1, 5, 13, 0, 9, 0}
+#define NXFONT_BITMAP_92 {0x80, 0x80, 0xc0, 0x40, 0x60, 0x60, 0x20, 0x30, 0x30, 0x10, 0x18, 0x8, 0x8}
+
+/* bracketright (93) */
+#define NXFONT_METRICS_93 {1, 4, 16, 0, 9, 0}
+#define NXFONT_BITMAP_93 {0xf0, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0xf0}
+
+/* asciicircum (94) */
+#define NXFONT_METRICS_94 {1, 7, 7, 1, 9, 0}
+#define NXFONT_BITMAP_94 {0x10, 0x38, 0x28, 0x6c, 0x44, 0xc6, 0x82}
+
+/* underscore (95) */
+#define NXFONT_METRICS_95 {2, 9, 2, 0, 24, 0}
+#define NXFONT_BITMAP_95 {0xff, 0x80, 0xff, 0x80}
+
+/* grave (96) */
+#define NXFONT_METRICS_96 {1, 4, 3, 0, 9, 0}
+#define NXFONT_BITMAP_96 {0xc0, 0x60, 0x10}
+
+/* a (97) */
+#define NXFONT_METRICS_97 {1, 7, 9, 1, 13, 0}
+#define NXFONT_BITMAP_97 {0x78, 0xc8, 0xcc, 0x1c, 0x6c, 0xcc, 0xcc, 0xfc, 0x66}
+
+/* b (98) */
+#define NXFONT_METRICS_98 {1, 8, 13, 0, 9, 0}
+#define NXFONT_BITMAP_98 {0x60, 0xe0, 0x60, 0x60, 0x6e, 0x77, 0x63, 0x63, 0x63, 0x63, 0x63, 0x66, 0x5c}
+
+/* c (99) */
+#define NXFONT_METRICS_99 {1, 7, 9, 0, 13, 0}
+#define NXFONT_BITMAP_99 {0x3c, 0x66, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x66, 0x3c}
+
+/* d (100) */
+#define NXFONT_METRICS_100 {1, 8, 13, 0, 9, 0}
+#define NXFONT_BITMAP_100 {0x6, 0xe, 0x6, 0x6, 0x3e, 0x66, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x66, 0x3f}
+
+/* e (101) */
+#define NXFONT_METRICS_101 {1, 7, 9, 0, 13, 0}
+#define NXFONT_BITMAP_101 {0x3c, 0x66, 0xc2, 0xfe, 0xc0, 0xc0, 0xc0, 0x66, 0x3c}
+
+/* f (102) */
+#define NXFONT_METRICS_102 {1, 6, 13, 0, 9, 0}
+#define NXFONT_BITMAP_102 {0x1c, 0x34, 0x20, 0x60, 0xf8, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xf0}
+
+/* g (103) */
+#define NXFONT_METRICS_103 {1, 8, 13, 0, 13, 0}
+#define NXFONT_BITMAP_103 {0x3e, 0xcc, 0xc4, 0xc4, 0xcc, 0x78, 0x40, 0x7c, 0x7f, 0x83, 0xc1, 0xe2, 0x7c}
+
+/* h (104) */
+#define NXFONT_METRICS_104 {2, 9, 13, 0, 9, 0}
+#define NXFONT_BITMAP_104 {0x60, 0x0, 0xe0, 0x0, 0x60, 0x0, 0x60, 0x0, 0x66, 0x0, 0x6f, 0x0, 0x73, 0x0, 0x63, 0x0, 0x63, 0x0, 0x63, 0x0, 0x63, 0x0, 0x63, 0x0, 0xf3, 0x80}
+
+/* i (105) */
+#define NXFONT_METRICS_105 {1, 4, 13, 0, 9, 0}
+#define NXFONT_BITMAP_105 {0x60, 0x60, 0x0, 0x0, 0x60, 0xe0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xf0}
+
+/* j (106) -- NOTE: Xoffset should be -1, not 0. */
+#define NXFONT_METRICS_106 {1, 4, 17, 0, 9, 0}
+#define NXFONT_BITMAP_106 {0x30, 0x30, 0x0, 0x0, 0x30, 0x70, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0xe0, 0xc0}
+
+/* k (107) */
+#define NXFONT_METRICS_107 {2, 10, 13, 0, 9, 0}
+#define NXFONT_BITMAP_107 {0x60, 0x0, 0xe0, 0x0, 0x60, 0x0, 0x60, 0x0, 0x67, 0x0, 0x62, 0x0, 0x64, 0x0, 0x68, 0x0, 0x78, 0x0, 0x6c, 0x0, 0x6e, 0x0, 0x67, 0x0, 0xe3, 0xc0}
+
+/* l (108) */
+#define NXFONT_METRICS_108 {1, 4, 13, 0, 9, 0}
+#define NXFONT_BITMAP_108 {0x60, 0xe0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xf0}
+
+/* m (109) */
+#define NXFONT_METRICS_109 {2, 14, 9, 0, 13, 0}
+#define NXFONT_BITMAP_109 {0x66, 0x30, 0xef, 0x78, 0x73, 0x98, 0x63, 0x18, 0x63, 0x18, 0x63, 0x18, 0x63, 0x18, 0x63, 0x18, 0xf7, 0xbc}
+
+/* n (110) */
+#define NXFONT_METRICS_110 {2, 9, 9, 0, 13, 0}
+#define NXFONT_BITMAP_110 {0x66, 0x0, 0xef, 0x0, 0x73, 0x0, 0x63, 0x0, 0x63, 0x0, 0x63, 0x0, 0x63, 0x0, 0x63, 0x0, 0xf3, 0x80}
+
+/* o (111) */
+#define NXFONT_METRICS_111 {1, 8, 9, 0, 13, 0}
+#define NXFONT_BITMAP_111 {0x3c, 0x66, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x66, 0x3c}
+
+/* p (112) */
+#define NXFONT_METRICS_112 {1, 8, 13, 0, 13, 0}
+#define NXFONT_BITMAP_112 {0x6e, 0xf7, 0x63, 0x63, 0x63, 0x63, 0x63, 0x76, 0x7c, 0x60, 0x60, 0x60, 0xf0}
+
+/* q (113) */
+#define NXFONT_METRICS_113 {1, 8, 13, 0, 13, 0}
+#define NXFONT_BITMAP_113 {0x3e, 0x66, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x66, 0x3e, 0x6, 0x6, 0x6, 0xf}
+
+/* r (114) */
+#define NXFONT_METRICS_114 {1, 6, 9, 0, 13, 0}
+#define NXFONT_BITMAP_114 {0x6c, 0xec, 0x70, 0x60, 0x60, 0x60, 0x60, 0x60, 0xf0}
+
+/* s (115) */
+#define NXFONT_METRICS_115 {1, 5, 9, 1, 13, 0}
+#define NXFONT_BITMAP_115 {0x68, 0x98, 0xc8, 0xe0, 0x70, 0x38, 0x98, 0xc8, 0xb0}
+
+/* t (116) */
+#define NXFONT_METRICS_116 {1, 6, 11, 0, 11, 0}
+#define NXFONT_BITMAP_116 {0x20, 0x60, 0xf8, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x74, 0x38}
+
+/* u (117) */
+#define NXFONT_METRICS_117 {2, 9, 9, 0, 13, 0}
+#define NXFONT_BITMAP_117 {0xe7, 0x0, 0x63, 0x0, 0x63, 0x0, 0x63, 0x0, 0x63, 0x0, 0x63, 0x0, 0x63, 0x0, 0x77, 0x0, 0x3b, 0x80}
+
+/* v (118) -- NOTE: Xoffset should be -1, not 0. */
+#define NXFONT_METRICS_118 {2, 9, 9, 0, 13, 0}
+#define NXFONT_BITMAP_118 {0xf3, 0x80, 0x63, 0x0, 0x62, 0x0, 0x32, 0x0, 0x36, 0x0, 0x14, 0x0, 0x1c, 0x0, 0x8, 0x0, 0x8, 0x0}
+
+/* w (119) */
+#define NXFONT_METRICS_119 {2, 13, 9, 0, 13, 0}
+#define NXFONT_BITMAP_119 {0xe7, 0x38, 0x66, 0x30, 0x62, 0x60, 0x36, 0x60, 0x37, 0x60, 0x1d, 0x40, 0x1d, 0xc0, 0x8, 0x80, 0x8, 0x80}
+
+/* x (120) */
+#define NXFONT_METRICS_120 {2, 9, 9, 0, 13, 0}
+#define NXFONT_BITMAP_120 {0xe1, 0x80, 0x63, 0x0, 0x36, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x36, 0x0, 0x63, 0x0, 0xc3, 0x80}
+
+/* y (121) */
+#define NXFONT_METRICS_121 {1, 8, 13, 0, 13, 0}
+#define NXFONT_BITMAP_121 {0xf3, 0x63, 0x72, 0x32, 0x36, 0x1c, 0x1c, 0xc, 0x8, 0x18, 0x10, 0xf0, 0xe0}
+
+/* z (122) */
+#define NXFONT_METRICS_122 {1, 7, 9, 0, 13, 0}
+#define NXFONT_BITMAP_122 {0xfe, 0xce, 0x8c, 0x18, 0x30, 0x30, 0x62, 0xe6, 0xfe}
+
+/* braceleft (123) */
+#define NXFONT_METRICS_123 {1, 7, 17, 1, 9, 0}
+#define NXFONT_BITMAP_123 {0xe, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x60, 0xc0, 0x60, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0xe}
+
+/* bar (124) */
+#define NXFONT_METRICS_124 {1, 1, 13, 1, 9, 0}
+#define NXFONT_BITMAP_124 {0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}
+
+/* braceright (125) */
+#define NXFONT_METRICS_125 {1, 7, 17, 1, 9, 0}
+#define NXFONT_BITMAP_125 {0xe0, 0x30, 0x18, 0x18, 0x18, 0x18, 0x18, 0xc, 0x6, 0xc, 0x18, 0x18, 0x18, 0x18, 0x18, 0x30, 0xe0}
+
+/* asciitilde (126) */
+#define NXFONT_METRICS_126 {2, 9, 4, 1, 15, 0}
+#define NXFONT_BITMAP_126 {0x30, 0x0, 0x79, 0x80, 0xcf, 0x0, 0x6, 0x0}
+
+/* exclamdown (161) */
+#define NXFONT_METRICS_161 {1, 2, 13, 1, 13, 0}
+#define NXFONT_BITMAP_161 {0xc0, 0xc0, 0x0, 0x0, 0x80, 0x80, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* cent (162) */
+#define NXFONT_METRICS_162 {1, 7, 14, 1, 11, 0}
+#define NXFONT_BITMAP_162 {0x6, 0x4, 0x3c, 0x6e, 0xc8, 0xd8, 0xd0, 0xd0, 0xf0, 0x72, 0x7c, 0x40, 0xc0, 0x80}
+
+/* sterling (163) */
+#define NXFONT_METRICS_163 {2, 10, 13, 0, 9, 0}
+#define NXFONT_BITMAP_163 {0xf, 0x0, 0x19, 0x80, 0x19, 0x80, 0x18, 0x0, 0x18, 0x0, 0x18, 0x0, 0x7e, 0x0, 0x18, 0x0, 0x18, 0x0, 0x10, 0x0, 0x78, 0x40, 0xbf, 0xc0, 0xe7, 0x80}
+
+/* currency (164) */
+#define NXFONT_METRICS_164 {2, 9, 7, 1, 12, 0}
+#define NXFONT_BITMAP_164 {0xdd, 0x80, 0xf7, 0x80, 0x63, 0x0, 0x41, 0x0, 0x63, 0x0, 0xf7, 0x80, 0xdd, 0x80}
+
+/* yen (165) */
+#define NXFONT_METRICS_165 {1, 8, 13, 0, 9, 0}
+#define NXFONT_BITMAP_165 {0xf7, 0x62, 0x62, 0x76, 0x34, 0x34, 0x7e, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x7e}
+
+/* brokenbar (166) */
+#define NXFONT_METRICS_166 {1, 1, 13, 1, 9, 0}
+#define NXFONT_BITMAP_166 {0x80, 0x80, 0x80, 0x80, 0x80, 0x0, 0x0, 0x0, 0x80, 0x80, 0x80, 0x80, 0x80}
+
+/* section (167) */
+#define NXFONT_METRICS_167 {1, 8, 16, 1, 9, 0}
+#define NXFONT_BITMAP_167 {0x3c, 0x66, 0x66, 0x70, 0x38, 0x7c, 0x8e, 0xc7, 0xe3, 0x71, 0x3e, 0x1c, 0xe, 0x66, 0x66, 0x3c}
+
+/* dieresis (168) */
+#define NXFONT_METRICS_168 {1, 5, 2, 0, 10, 0}
+#define NXFONT_BITMAP_168 {0xd8, 0xd8}
+
+/* copyright (169) */
+#define NXFONT_METRICS_169 {2, 13, 13, 1, 9, 0}
+#define NXFONT_BITMAP_169 {0xf, 0x80, 0x30, 0x60, 0x40, 0x10, 0x47, 0x90, 0x88, 0x88, 0x90, 0x8, 0x90, 0x8, 0x90, 0x8, 0x88, 0x88, 0x47, 0x10, 0x40, 0x10, 0x30, 0x60, 0xf, 0x80}
+
+/* ordfeminine (170) */
+#define NXFONT_METRICS_170 {1, 5, 8, 0, 9, 0}
+#define NXFONT_BITMAP_170 {0x60, 0x90, 0x10, 0x70, 0x90, 0xe8, 0x0, 0xf8}
+
+/* guillemotleft (171) */
+#define NXFONT_METRICS_171 {1, 8, 7, 1, 14, 0}
+#define NXFONT_BITMAP_171 {0x11, 0x33, 0x66, 0xcc, 0x66, 0x33, 0x11}
+
+/* logicalnot (172) */
+#define NXFONT_METRICS_172 {2, 9, 5, 1, 15, 0}
+#define NXFONT_BITMAP_172 {0xff, 0x80, 0xff, 0x80, 0x1, 0x80, 0x1, 0x80, 0x1, 0x80}
+
+/* hyphen (173) */
+#define NXFONT_METRICS_173 {1, 5, 2, 0, 17, 0}
+#define NXFONT_BITMAP_173 {0xf8, 0xf8}
+
+/* registered (174) */
+#define NXFONT_METRICS_174 {2, 13, 13, 1, 9, 0}
+#define NXFONT_BITMAP_174 {0xf, 0x80, 0x30, 0x60, 0x40, 0x10, 0x5f, 0x10, 0x88, 0x88, 0x88, 0x88, 0x8f, 0x8, 0x89, 0x8, 0x88, 0x88, 0x5c, 0xd0, 0x40, 0x10, 0x30, 0x60, 0xf, 0x80}
+
+/* macron (175) */
+#define NXFONT_METRICS_175 {1, 5, 2, 0, 10, 0}
+#define NXFONT_BITMAP_175 {0xf8, 0xf8}
+
+/* degree (176) */
+#define NXFONT_METRICS_176 {1, 5, 5, 1, 9, 0}
+#define NXFONT_BITMAP_176 {0x70, 0x88, 0x88, 0x88, 0x70}
+
+/* plusminus (177) */
+#define NXFONT_METRICS_177 {1, 8, 11, 1, 11, 0}
+#define NXFONT_BITMAP_177 {0x18, 0x18, 0x18, 0xff, 0xff, 0x18, 0x18, 0x18, 0x0, 0xff, 0xff}
+
+/* twosuperior (178) */
+#define NXFONT_METRICS_178 {1, 5, 8, 0, 9, 0}
+#define NXFONT_BITMAP_178 {0x70, 0x98, 0x18, 0x10, 0x20, 0x20, 0x40, 0xf8}
+
+/* threesuperior (179) */
+#define NXFONT_METRICS_179 {1, 5, 8, 0, 9, 0}
+#define NXFONT_BITMAP_179 {0x70, 0x88, 0x18, 0x70, 0x18, 0x8, 0x88, 0x70}
+
+/* acute (180) */
+#define NXFONT_METRICS_180 {1, 4, 3, 0, 9, 0}
+#define NXFONT_BITMAP_180 {0x30, 0x60, 0x80}
+
+/* mu (181) -- NOTE: Xoffset should be -1, not 0. */
+#define NXFONT_METRICS_181 {2, 9, 13, 0, 13, 0}
+#define NXFONT_BITMAP_181 {0xe7, 0x0, 0x63, 0x0, 0x63, 0x0, 0x63, 0x0, 0x63, 0x0, 0x63, 0x0, 0x63, 0x0, 0x77, 0x0, 0x7b, 0x80, 0x40, 0x0, 0x40, 0x0, 0x60, 0x0, 0x60, 0x0}
+
+/* paragraph (182) */
+#define NXFONT_METRICS_182 {1, 7, 17, 1, 9, 0}
+#define NXFONT_BITMAP_182 {0x3e, 0x74, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0x74, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14}
+
+/* periodcentered (183) */
+#define NXFONT_METRICS_183 {1, 2, 2, 1, 16, 0}
+#define NXFONT_BITMAP_183 {0xc0, 0xc0}
+
+/* cedilla (184) */
+#define NXFONT_METRICS_184 {1, 4, 5, 1, 21, 0}
+#define NXFONT_BITMAP_184 {0x20, 0x20, 0x10, 0xb0, 0x70}
+
+/* onesuperior (185) */
+#define NXFONT_METRICS_185 {1, 3, 8, 1, 9, 0}
+#define NXFONT_BITMAP_185 {0x40, 0xc0, 0x40, 0x40, 0x40, 0x40, 0x40, 0xe0}
+
+/* ordmasculine (186) */
+#define NXFONT_METRICS_186 {1, 5, 8, 0, 9, 0}
+#define NXFONT_BITMAP_186 {0x70, 0xd8, 0x88, 0x88, 0xd8, 0x70, 0x0, 0xf8}
+
+/* guillemotright (187) */
+#define NXFONT_METRICS_187 {1, 8, 7, 1, 14, 0}
+#define NXFONT_BITMAP_187 {0x88, 0xcc, 0x66, 0x33, 0x66, 0xcc, 0x88}
+
+/* onequarter (188) */
+#define NXFONT_METRICS_188 {2, 11, 13, 1, 9, 0}
+#define NXFONT_BITMAP_188 {0x40, 0x80, 0xc1, 0x80, 0x41, 0x0, 0x43, 0x0, 0x46, 0x0, 0x44, 0x40, 0x4c, 0xc0, 0xe9, 0x40, 0x1b, 0x40, 0x32, 0x40, 0x27, 0xe0, 0x60, 0x40, 0x40, 0x40}
+
+/* onehalf (189) */
+#define NXFONT_METRICS_189 {2, 11, 13, 1, 9, 0}
+#define NXFONT_BITMAP_189 {0x40, 0x80, 0xc1, 0x80, 0x41, 0x0, 0x43, 0x0, 0x46, 0x0, 0x45, 0xc0, 0x4e, 0x60, 0xe8, 0x60, 0x18, 0x40, 0x30, 0x80, 0x20, 0x80, 0x61, 0x0, 0x43, 0xe0}
+
+/* threequarters (190) -- NOTE: Xoffset should be -1, not 0. */
+#define NXFONT_METRICS_190 {2, 13, 13, 0, 9, 0}
+#define NXFONT_BITMAP_190 {0x70, 0x20, 0x88, 0x60, 0x18, 0x40, 0x70, 0xc0, 0x19, 0x80, 0x9, 0x10, 0x8b, 0x30, 0x72, 0x50, 0x6, 0xd0, 0xc, 0x90, 0x9, 0xf8, 0x18, 0x10, 0x10, 0x10}
+
+/* questiondown (191) */
+#define NXFONT_METRICS_191 {1, 6, 13, 1, 13, 0}
+#define NXFONT_BITMAP_191 {0x30, 0x30, 0x0, 0x10, 0x10, 0x30, 0x60, 0x60, 0xc0, 0xcc, 0x8c, 0xc4, 0x78}
+
+/* Agrave (192) */
+#define NXFONT_METRICS_192 {2, 13, 17, 1, 5, 0}
+#define NXFONT_BITMAP_192 {0x18, 0x0, 0xc, 0x0, 0x2, 0x0, 0x0, 0x0, 0x2, 0x0, 0x7, 0x0, 0x7, 0x0, 0x5, 0x0, 0xd, 0x80, 0x9, 0x80, 0x19, 0xc0, 0x10, 0xc0, 0x1f, 0xc0, 0x30, 0xe0, 0x20, 0x60, 0x60, 0x70, 0xf0, 0xf8}
+
+/* Aacute (193) */
+#define NXFONT_METRICS_193 {2, 13, 17, 1, 5, 0}
+#define NXFONT_BITMAP_193 {0x0, 0xc0, 0x1, 0x80, 0x2, 0x0, 0x0, 0x0, 0x2, 0x0, 0x7, 0x0, 0x7, 0x0, 0x5, 0x0, 0xd, 0x80, 0x9, 0x80, 0x19, 0xc0, 0x10, 0xc0, 0x1f, 0xc0, 0x30, 0xe0, 0x20, 0x60, 0x60, 0x70, 0xf0, 0xf8}
+
+/* Acircumflex (194) */
+#define NXFONT_METRICS_194 {2, 13, 17, 1, 5, 0}
+#define NXFONT_BITMAP_194 {0x2, 0x0, 0x7, 0x0, 0xd, 0x80, 0x0, 0x0, 0x2, 0x0, 0x7, 0x0, 0x7, 0x0, 0x5, 0x0, 0xd, 0x80, 0x9, 0x80, 0x19, 0xc0, 0x10, 0xc0, 0x1f, 0xc0, 0x30, 0xe0, 0x20, 0x60, 0x60, 0x70, 0xf0, 0xf8}
+
+/* Atilde (195) */
+#define NXFONT_METRICS_195 {2, 13, 17, 1, 5, 0}
+#define NXFONT_BITMAP_195 {0xc, 0x80, 0x1f, 0x80, 0x13, 0x0, 0x0, 0x0, 0x2, 0x0, 0x7, 0x0, 0x7, 0x0, 0x5, 0x0, 0xd, 0x80, 0x9, 0x80, 0x19, 0xc0, 0x10, 0xc0, 0x1f, 0xc0, 0x30, 0xe0, 0x20, 0x60, 0x60, 0x70, 0xf0, 0xf8}
+
+/* Adieresis (196) */
+#define NXFONT_METRICS_196 {2, 13, 16, 1, 6, 0}
+#define NXFONT_BITMAP_196 {0xd, 0x80, 0xd, 0x80, 0x0, 0x0, 0x2, 0x0, 0x7, 0x0, 0x7, 0x0, 0x5, 0x0, 0xd, 0x80, 0x9, 0x80, 0x19, 0xc0, 0x10, 0xc0, 0x1f, 0xc0, 0x30, 0xe0, 0x20, 0x60, 0x60, 0x70, 0xf0, 0xf8}
+
+/* Aring (197) */
+#define NXFONT_METRICS_197 {2, 13, 18, 1, 4, 0}
+#define NXFONT_BITMAP_197 {0x6, 0x0, 0x9, 0x0, 0x9, 0x0, 0x6, 0x0, 0x0, 0x0, 0x2, 0x0, 0x7, 0x0, 0x7, 0x0, 0x5, 0x0, 0xd, 0x80, 0x9, 0x80, 0x19, 0xc0, 0x10, 0xc0, 0x1f, 0xc0, 0x30, 0xe0, 0x20, 0x60, 0x60, 0x70, 0xf0, 0xf8}
+
+/* AE (198) */
+#define NXFONT_METRICS_198 {2, 15, 13, 1, 9, 0}
+#define NXFONT_BITMAP_198 {0xf, 0xfc, 0x7, 0x8c, 0x5, 0x84, 0x5, 0x80, 0xd, 0x80, 0x9, 0x88, 0x19, 0xf8, 0x1f, 0x88, 0x11, 0x80, 0x31, 0x80, 0x21, 0x82, 0x61, 0x86, 0xf7, 0xfe}
+
+/* Ccedilla (199) */
+#define NXFONT_METRICS_199 {2, 11, 17, 1, 9, 0}
+#define NXFONT_BITMAP_199 {0xf, 0x20, 0x30, 0xe0, 0x60, 0x60, 0x60, 0x20, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0x60, 0x0, 0x60, 0x60, 0x38, 0xc0, 0xf, 0x0, 0x4, 0x0, 0x2, 0x0, 0x16, 0x0, 0xe, 0x0}
+
+/* Egrave (200) */
+#define NXFONT_METRICS_200 {2, 9, 17, 1, 5, 0}
+#define NXFONT_BITMAP_200 {0x30, 0x0, 0x18, 0x0, 0x4, 0x0, 0x0, 0x0, 0xff, 0x80, 0x61, 0x80, 0x60, 0x80, 0x60, 0x0, 0x60, 0x0, 0x61, 0x0, 0x7f, 0x0, 0x61, 0x0, 0x60, 0x0, 0x60, 0x0, 0x60, 0x80, 0x61, 0x80, 0xff, 0x80}
+
+/* Eacute (201) */
+#define NXFONT_METRICS_201 {2, 9, 17, 1, 5, 0}
+#define NXFONT_BITMAP_201 {0x3, 0x0, 0x6, 0x0, 0x8, 0x0, 0x0, 0x0, 0xff, 0x80, 0x61, 0x80, 0x60, 0x80, 0x60, 0x0, 0x60, 0x0, 0x61, 0x0, 0x7f, 0x0, 0x61, 0x0, 0x60, 0x0, 0x60, 0x0, 0x60, 0x80, 0x61, 0x80, 0xff, 0x80}
+
+/* Ecircumflex (202) */
+#define NXFONT_METRICS_202 {2, 9, 17, 1, 5, 0}
+#define NXFONT_BITMAP_202 {0x8, 0x0, 0x1c, 0x0, 0x36, 0x0, 0x0, 0x0, 0xff, 0x80, 0x61, 0x80, 0x60, 0x80, 0x60, 0x0, 0x60, 0x0, 0x61, 0x0, 0x7f, 0x0, 0x61, 0x0, 0x60, 0x0, 0x60, 0x0, 0x60, 0x80, 0x61, 0x80, 0xff, 0x80}
+
+/* Edieresis (203) */
+#define NXFONT_METRICS_203 {2, 9, 16, 1, 6, 0}
+#define NXFONT_BITMAP_203 {0x36, 0x0, 0x36, 0x0, 0x0, 0x0, 0xff, 0x80, 0x61, 0x80, 0x60, 0x80, 0x60, 0x0, 0x60, 0x0, 0x61, 0x0, 0x7f, 0x0, 0x61, 0x0, 0x60, 0x0, 0x60, 0x0, 0x60, 0x80, 0x61, 0x80, 0xff, 0x80}
+
+/* Igrave (204) -- NOTE: Xoffset should be -1, not 0. */
+#define NXFONT_METRICS_204 {1, 6, 17, 0, 5, 0}
+#define NXFONT_BITMAP_204 {0xc0, 0x60, 0x10, 0x0, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c}
+
+/* Iacute (205) */
+#define NXFONT_METRICS_205 {1, 6, 17, 1, 5, 0}
+#define NXFONT_BITMAP_205 {0xc, 0x18, 0x20, 0x0, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xf0}
+
+/* Icircumflex (206) */
+#define NXFONT_METRICS_206 {1, 5, 17, 1, 5, 0}
+#define NXFONT_BITMAP_206 {0x20, 0x70, 0xd8, 0x0, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xf0}
+
+/* Idieresis (207) */
+#define NXFONT_METRICS_207 {1, 5, 16, 1, 6, 0}
+#define NXFONT_BITMAP_207 {0xd8, 0xd8, 0x0, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xf0}
+
+/* Eth (208) */
+#define NXFONT_METRICS_208 {2, 12, 13, 0, 9, 0}
+#define NXFONT_BITMAP_208 {0x7f, 0x80, 0x31, 0xc0, 0x30, 0x60, 0x30, 0x60, 0x30, 0x30, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x60, 0x30, 0x60, 0x31, 0xc0, 0x7f, 0x80}
+
+/* Ntilde (209) */
+#define NXFONT_METRICS_209 {2, 12, 17, 1, 5, 0}
+#define NXFONT_BITMAP_209 {0xc, 0x80, 0x1f, 0x80, 0x13, 0x0, 0x0, 0x0, 0xe0, 0x70, 0x60, 0x20, 0x70, 0x20, 0x78, 0x20, 0x5c, 0x20, 0x4c, 0x20, 0x4e, 0x20, 0x47, 0x20, 0x43, 0xa0, 0x41, 0xe0, 0x40, 0xe0, 0x40, 0x60, 0xe0, 0x20}
+
+/* Ograve (210) */
+#define NXFONT_METRICS_210 {2, 12, 17, 1, 5, 0}
+#define NXFONT_BITMAP_210 {0x30, 0x0, 0x18, 0x0, 0x4, 0x0, 0x0, 0x0, 0xf, 0x0, 0x30, 0xc0, 0x60, 0x60, 0x60, 0x60, 0xc0, 0x30, 0xc0, 0x30, 0xc0, 0x30, 0xc0, 0x30, 0xc0, 0x30, 0x60, 0x60, 0x60, 0x60, 0x30, 0xc0, 0xf, 0x0}
+
+/* Oacute (211) */
+#define NXFONT_METRICS_211 {2, 12, 17, 1, 5, 0}
+#define NXFONT_BITMAP_211 {0x0, 0xc0, 0x1, 0x80, 0x2, 0x0, 0x0, 0x0, 0xf, 0x0, 0x30, 0xc0, 0x60, 0x60, 0x60, 0x60, 0xc0, 0x30, 0xc0, 0x30, 0xc0, 0x30, 0xc0, 0x30, 0xc0, 0x30, 0x60, 0x60, 0x60, 0x60, 0x30, 0xc0, 0xf, 0x0}
+
+/* Ocircumflex (212) */
+#define NXFONT_METRICS_212 {2, 12, 17, 1, 5, 0}
+#define NXFONT_BITMAP_212 {0x4, 0x0, 0xe, 0x0, 0x1b, 0x0, 0x0, 0x0, 0xf, 0x0, 0x30, 0xc0, 0x60, 0x60, 0x60, 0x60, 0xc0, 0x30, 0xc0, 0x30, 0xc0, 0x30, 0xc0, 0x30, 0xc0, 0x30, 0x60, 0x60, 0x60, 0x60, 0x30, 0xc0, 0xf, 0x0}
+
+/* Otilde (213) */
+#define NXFONT_METRICS_213 {2, 12, 17, 1, 5, 0}
+#define NXFONT_BITMAP_213 {0xc, 0x80, 0x1f, 0x80, 0x13, 0x0, 0x0, 0x0, 0xf, 0x0, 0x30, 0xc0, 0x60, 0x60, 0x60, 0x60, 0xc0, 0x30, 0xc0, 0x30, 0xc0, 0x30, 0xc0, 0x30, 0xc0, 0x30, 0x60, 0x60, 0x60, 0x60, 0x30, 0xc0, 0xf, 0x0}
+
+/* Odieresis (214) */
+#define NXFONT_METRICS_214 {2, 12, 16, 1, 6, 0}
+#define NXFONT_BITMAP_214 {0x1b, 0x0, 0x1b, 0x0, 0x0, 0x0, 0xf, 0x0, 0x30, 0xc0, 0x60, 0x60, 0x60, 0x60, 0xc0, 0x30, 0xc0, 0x30, 0xc0, 0x30, 0xc0, 0x30, 0xc0, 0x30, 0x60, 0x60, 0x60, 0x60, 0x30, 0xc0, 0xf, 0x0}
+
+/* multiply (215) */
+#define NXFONT_METRICS_215 {1, 8, 7, 1, 14, 0}
+#define NXFONT_BITMAP_215 {0xc3, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0xc3}
+
+/* Oslash (216) */
+#define NXFONT_METRICS_216 {2, 12, 15, 1, 8, 0}
+#define NXFONT_BITMAP_216 {0x0, 0x30, 0xf, 0x60, 0x30, 0xc0, 0x60, 0xe0, 0x61, 0xa0, 0xc3, 0x30, 0xc3, 0x30, 0xc6, 0x30, 0xcc, 0x30, 0xcc, 0x30, 0x58, 0x60, 0x70, 0x60, 0x30, 0xc0, 0x6f, 0x0, 0xc0, 0x0}
+
+/* Ugrave (217) */
+#define NXFONT_METRICS_217 {2, 11, 17, 2, 5, 0}
+#define NXFONT_BITMAP_217 {0x30, 0x0, 0x18, 0x0, 0x4, 0x0, 0x0, 0x0, 0xf0, 0xe0, 0x60, 0x40, 0x60, 0x40, 0x60, 0x40, 0x60, 0x40, 0x60, 0x40, 0x60, 0x40, 0x60, 0x40, 0x60, 0x40, 0x60, 0x40, 0x70, 0xc0, 0x39, 0x80, 0x1f, 0x0}
+
+/* Uacute (218) */
+#define NXFONT_METRICS_218 {2, 11, 17, 2, 5, 0}
+#define NXFONT_BITMAP_218 {0x0, 0xc0, 0x1, 0x80, 0x2, 0x0, 0x0, 0x0, 0xf0, 0xe0, 0x60, 0x40, 0x60, 0x40, 0x60, 0x40, 0x60, 0x40, 0x60, 0x40, 0x60, 0x40, 0x60, 0x40, 0x60, 0x40, 0x60, 0x40, 0x70, 0xc0, 0x39, 0x80, 0x1f, 0x0}
+
+/* Ucircumflex (219) */
+#define NXFONT_METRICS_219 {2, 11, 17, 2, 5, 0}
+#define NXFONT_BITMAP_219 {0x4, 0x0, 0xe, 0x0, 0x1b, 0x0, 0x0, 0x0, 0xf0, 0xe0, 0x60, 0x40, 0x60, 0x40, 0x60, 0x40, 0x60, 0x40, 0x60, 0x40, 0x60, 0x40, 0x60, 0x40, 0x60, 0x40, 0x60, 0x40, 0x70, 0xc0, 0x39, 0x80, 0x1f, 0x0}
+
+/* Udieresis (220) */
+#define NXFONT_METRICS_220 {2, 11, 16, 2, 6, 0}
+#define NXFONT_BITMAP_220 {0x1b, 0x0, 0x1b, 0x0, 0x0, 0x0, 0xf0, 0xe0, 0x60, 0x40, 0x60, 0x40, 0x60, 0x40, 0x60, 0x40, 0x60, 0x40, 0x60, 0x40, 0x60, 0x40, 0x60, 0x40, 0x60, 0x40, 0x70, 0xc0, 0x39, 0x80, 0x1f, 0x0}
+
+/* Yacute (221) */
+#define NXFONT_METRICS_221 {2, 12, 17, 1, 5, 0}
+#define NXFONT_BITMAP_221 {0x0, 0xc0, 0x1, 0x80, 0x2, 0x0, 0x0, 0x0, 0xf0, 0xf0, 0x70, 0x60, 0x30, 0xc0, 0x18, 0x80, 0x19, 0x0, 0xf, 0x0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0xf, 0x0}
+
+/* Thorn (222) */
+#define NXFONT_METRICS_222 {2, 9, 13, 1, 9, 0}
+#define NXFONT_BITMAP_222 {0xf0, 0x0, 0x60, 0x0, 0x60, 0x0, 0x7f, 0x0, 0x63, 0x80, 0x61, 0x80, 0x61, 0x80, 0x61, 0x80, 0x63, 0x0, 0x7e, 0x0, 0x60, 0x0, 0x60, 0x0, 0xf0, 0x0}
+
+/* germandbls (223) */
+#define NXFONT_METRICS_223 {1, 8, 13, 0, 9, 0}
+#define NXFONT_BITMAP_223 {0x1c, 0x32, 0x63, 0x63, 0x66, 0x6e, 0x7c, 0x66, 0x63, 0x63, 0x6b, 0x6f, 0xee}
+
+/* agrave (224) */
+#define NXFONT_METRICS_224 {1, 7, 13, 1, 9, 0}
+#define NXFONT_BITMAP_224 {0xc0, 0x60, 0x10, 0x0, 0x78, 0xc8, 0xcc, 0x1c, 0x6c, 0xcc, 0xcc, 0xfc, 0x66}
+
+/* aacute (225) */
+#define NXFONT_METRICS_225 {1, 7, 13, 1, 9, 0}
+#define NXFONT_BITMAP_225 {0xc, 0x18, 0x20, 0x0, 0x78, 0xc8, 0xcc, 0x1c, 0x6c, 0xcc, 0xcc, 0xfc, 0x66}
+
+/* acircumflex (226) */
+#define NXFONT_METRICS_226 {1, 7, 13, 1, 9, 0}
+#define NXFONT_BITMAP_226 {0x10, 0x38, 0x6c, 0x0, 0x78, 0xc8, 0xcc, 0x1c, 0x6c, 0xcc, 0xcc, 0xfc, 0x66}
+
+/* atilde (227) */
+#define NXFONT_METRICS_227 {1, 7, 13, 1, 9, 0}
+#define NXFONT_BITMAP_227 {0x64, 0xfc, 0x98, 0x0, 0x78, 0xc8, 0xcc, 0x1c, 0x6c, 0xcc, 0xcc, 0xfc, 0x66}
+
+/* adieresis (228) */
+#define NXFONT_METRICS_228 {1, 7, 12, 1, 10, 0}
+#define NXFONT_BITMAP_228 {0x6c, 0x6c, 0x0, 0x78, 0xc8, 0xcc, 0x1c, 0x6c, 0xcc, 0xcc, 0xfc, 0x66}
+
+/* aring (229) */
+#define NXFONT_METRICS_229 {1, 7, 14, 1, 8, 0}
+#define NXFONT_BITMAP_229 {0x30, 0x48, 0x48, 0x30, 0x0, 0x78, 0xc8, 0xcc, 0x1c, 0x6c, 0xcc, 0xcc, 0xfc, 0x66}
+
+/* ae (230) */
+#define NXFONT_METRICS_230 {2, 11, 9, 0, 13, 0}
+#define NXFONT_BITMAP_230 {0x7b, 0xc0, 0xce, 0x60, 0xcc, 0x20, 0x1f, 0xe0, 0x6c, 0x0, 0xcc, 0x0, 0xcc, 0x0, 0xfe, 0x60, 0x63, 0xc0}
+
+/* ccedilla (231) */
+#define NXFONT_METRICS_231 {1, 7, 13, 0, 13, 0}
+#define NXFONT_BITMAP_231 {0x3c, 0x66, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x66, 0x3c, 0x10, 0x8, 0x58, 0x38}
+
+/* egrave (232) */
+#define NXFONT_METRICS_232 {1, 7, 13, 0, 9, 0}
+#define NXFONT_BITMAP_232 {0xc0, 0x60, 0x10, 0x0, 0x3c, 0x66, 0xc2, 0xfe, 0xc0, 0xc0, 0xc0, 0x66, 0x3c}
+
+/* eacute (233) */
+#define NXFONT_METRICS_233 {1, 7, 13, 0, 9, 0}
+#define NXFONT_BITMAP_233 {0x6, 0xc, 0x10, 0x0, 0x3c, 0x66, 0xc2, 0xfe, 0xc0, 0xc0, 0xc0, 0x66, 0x3c}
+
+/* ecircumflex (234) */
+#define NXFONT_METRICS_234 {1, 7, 13, 0, 9, 0}
+#define NXFONT_BITMAP_234 {0x10, 0x38, 0x6c, 0x0, 0x3c, 0x66, 0xc2, 0xfe, 0xc0, 0xc0, 0xc0, 0x66, 0x3c}
+
+/* edieresis (235) */
+#define NXFONT_METRICS_235 {1, 7, 12, 0, 10, 0}
+#define NXFONT_BITMAP_235 {0x6c, 0x6c, 0x0, 0x3c, 0x66, 0xc2, 0xfe, 0xc0, 0xc0, 0xc0, 0x66, 0x3c}
+
+/* igrave (236) -- NOTE: Xoffset should be -2, not 0. */
+#define NXFONT_METRICS_236 {1, 6, 13, 0, 9, 0}
+#define NXFONT_BITMAP_236 {0xc0, 0x60, 0x10, 0x0, 0x18, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c}
+
+/* iacute (237) */
+#define NXFONT_METRICS_237 {1, 6, 13, 0, 9, 0}
+#define NXFONT_BITMAP_237 {0xc, 0x18, 0x20, 0x0, 0x60, 0xe0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xf0}
+
+/* icircumflex (238) */
+#define NXFONT_METRICS_238 {1, 5, 13, 0, 9, 0}
+#define NXFONT_BITMAP_238 {0x20, 0x70, 0xd8, 0x0, 0x60, 0xe0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xf0}
+
+/* idieresis (239) */
+#define NXFONT_METRICS_239 {1, 5, 12, 0, 10, 0}
+#define NXFONT_BITMAP_239 {0xd8, 0xd8, 0x0, 0x60, 0xe0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xf0}
+
+/* eth (240) */
+#define NXFONT_METRICS_240 {1, 8, 13, 0, 9, 0}
+#define NXFONT_BITMAP_240 {0x60, 0x36, 0x38, 0x4c, 0x3e, 0x66, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x66, 0x3c}
+
+/* ntilde (241) */
+#define NXFONT_METRICS_241 {2, 9, 13, 0, 9, 0}
+#define NXFONT_BITMAP_241 {0x32, 0x0, 0x7e, 0x0, 0x4c, 0x0, 0x0, 0x0, 0x66, 0x0, 0xef, 0x0, 0x73, 0x0, 0x63, 0x0, 0x63, 0x0, 0x63, 0x0, 0x63, 0x0, 0x63, 0x0, 0xf3, 0x80}
+
+/* ograve (242) */
+#define NXFONT_METRICS_242 {1, 8, 13, 0, 9, 0}
+#define NXFONT_BITMAP_242 {0x30, 0x18, 0x4, 0x0, 0x3c, 0x66, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x66, 0x3c}
+
+/* oacute (243) */
+#define NXFONT_METRICS_243 {1, 8, 13, 0, 9, 0}
+#define NXFONT_BITMAP_243 {0x6, 0xc, 0x10, 0x0, 0x3c, 0x66, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x66, 0x3c}
+
+/* ocircumflex (244) */
+#define NXFONT_METRICS_244 {1, 8, 13, 0, 9, 0}
+#define NXFONT_BITMAP_244 {0x10, 0x38, 0x6c, 0x0, 0x3c, 0x66, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x66, 0x3c}
+
+/* otilde (245) */
+#define NXFONT_METRICS_245 {1, 8, 13, 0, 9, 0}
+#define NXFONT_BITMAP_245 {0x32, 0x7e, 0x4c, 0x0, 0x3c, 0x66, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x66, 0x3c}
+
+/* odieresis (246) */
+#define NXFONT_METRICS_246 {1, 8, 12, 0, 10, 0}
+#define NXFONT_BITMAP_246 {0x6c, 0x6c, 0x0, 0x3c, 0x66, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x66, 0x3c}
+
+/* divide (247) */
+#define NXFONT_METRICS_247 {1, 8, 8, 1, 13, 0}
+#define NXFONT_BITMAP_247 {0x18, 0x18, 0x0, 0xff, 0xff, 0x0, 0x18, 0x18}
+
+/* oslash (248) */
+#define NXFONT_METRICS_248 {1, 8, 11, 0, 12, 0}
+#define NXFONT_BITMAP_248 {0x1, 0x3f, 0x66, 0xcf, 0xcb, 0xdb, 0xd3, 0xf3, 0x66, 0x7c, 0xc0}
+
+/* ugrave (249) */
+#define NXFONT_METRICS_249 {2, 9, 13, 0, 9, 0}
+#define NXFONT_BITMAP_249 {0x60, 0x0, 0x30, 0x0, 0x8, 0x0, 0x0, 0x0, 0xe7, 0x0, 0x63, 0x0, 0x63, 0x0, 0x63, 0x0, 0x63, 0x0, 0x63, 0x0, 0x63, 0x0, 0x77, 0x0, 0x3b, 0x80}
+
+/* uacute (250) */
+#define NXFONT_METRICS_250 {2, 9, 13, 0, 9, 0}
+#define NXFONT_BITMAP_250 {0x6, 0x0, 0xc, 0x0, 0x10, 0x0, 0x0, 0x0, 0xe7, 0x0, 0x63, 0x0, 0x63, 0x0, 0x63, 0x0, 0x63, 0x0, 0x63, 0x0, 0x63, 0x0, 0x77, 0x0, 0x3b, 0x80}
+
+/* ucircumflex (251) */
+#define NXFONT_METRICS_251 {2, 9, 13, 0, 9, 0}
+#define NXFONT_BITMAP_251 {0x8, 0x0, 0x1c, 0x0, 0x36, 0x0, 0x0, 0x0, 0xe7, 0x0, 0x63, 0x0, 0x63, 0x0, 0x63, 0x0, 0x63, 0x0, 0x63, 0x0, 0x63, 0x0, 0x77, 0x0, 0x3b, 0x80}
+
+/* udieresis (252) */
+#define NXFONT_METRICS_252 {2, 9, 12, 0, 10, 0}
+#define NXFONT_BITMAP_252 {0x36, 0x0, 0x36, 0x0, 0x0, 0x0, 0xe7, 0x0, 0x63, 0x0, 0x63, 0x0, 0x63, 0x0, 0x63, 0x0, 0x63, 0x0, 0x63, 0x0, 0x77, 0x0, 0x3b, 0x80}
+
+/* yacute (253) -- NOTE: Xoffset should be -1, not 0. */
+#define NXFONT_METRICS_253 {1, 8, 17, 0, 9, 0}
+#define NXFONT_BITMAP_253 {0x3, 0x6, 0x8, 0x0, 0xf3, 0x63, 0x72, 0x32, 0x36, 0x1c, 0x1c, 0xc, 0x8, 0x18, 0x10, 0xf0, 0xe0}
+
+/* thorn (254) */
+#define NXFONT_METRICS_254 {1, 8, 17, 0, 9, 0}
+#define NXFONT_BITMAP_254 {0x60, 0xe0, 0x60, 0x60, 0x6e, 0x77, 0x63, 0x63, 0x63, 0x63, 0x63, 0x76, 0x7c, 0x60, 0x60, 0x60, 0xf0}
+
+/* ydieresis (255) */
+#define NXFONT_METRICS_255 {1, 8, 16, 0, 10, 0}
+#define NXFONT_BITMAP_255 {0x36, 0x36, 0x0, 0xf3, 0x63, 0x72, 0x32, 0x36, 0x1c, 0x1c, 0xc, 0x8, 0x18, 0x10, 0xf0, 0xe0}
+
+/****************************************************************************
+ * Public Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+#define EXTERN extern "C"
+extern "C" {
+#else
+#define EXTERN extern
+#endif
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* __GRAPHICS_NXFONTS_NXFONTS_SERIF22X29_H */
diff --git a/nuttx/graphics/nxfonts/nxfonts_serif27x38b.h b/nuttx/graphics/nxfonts/nxfonts_serif27x38b.h
new file mode 100755
index 000000000..e6ecf1969
--- /dev/null
+++ b/nuttx/graphics/nxfonts/nxfonts_serif27x38b.h
@@ -0,0 +1,849 @@
+/****************************************************************************
+ * graphics/nxfonts/nxfonts_serif27x38b.h
+ *
+ * Copyright (C) 2011-2012 NX Engineering, S.A., All rights reserved.
+ * Author: Jose Pablo Carballo Gomez <jcarballo@nx-engineering.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT}
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING}
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+#ifndef __GRAPHICS_NXFONTS_NXFONTS_SERIF27X38B_H
+#define __GRAPHICS_NXFONTS_NXFONTS_SERIF27X38B_H
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/* Font ID */
+
+#define NXFONT_ID FONTID_SERIF27X38B
+
+/* Ranges of 7-bit and 8-bit fonts */
+
+#define NXFONT_MIN7BIT 33
+#define NXFONT_MAX7BIT 126
+
+#define NXFONT_MIN8BIT 161
+#define NXFONT_MAX8BIT 255
+
+/* Maximum height and width of any glyph in the set */
+
+#define NXFONT_MAXHEIGHT 38
+#define NXFONT_MAXWIDTH 27
+
+/* The width of a space */
+
+#define NXFONT_SPACEWIDTH 6
+
+/* exclam (33) */
+#define NXFONT_METRICS_33 {1, 4, 17, 2, 11, 0}
+#define NXFONT_BITMAP_33 {0x60, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x0, 0x0, 0x60, 0xf0, 0xf0, 0x60}
+
+/* quotedbl (34) */
+#define NXFONT_METRICS_34 {1, 8, 8, 2, 11, 0}
+#define NXFONT_BITMAP_34 {0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0x42, 0x42}
+
+/* numbersign (35) */
+#define NXFONT_METRICS_35 {2, 12, 17, 0, 11, 0}
+#define NXFONT_BITMAP_35 {0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0xc, 0xc0, 0x7f, 0xf0, 0x7f, 0xf0, 0x19, 0x80, 0x19, 0x80, 0x19, 0x80, 0x19, 0x80, 0xff, 0xe0, 0xff, 0xe0, 0x33, 0x0, 0x33, 0x0, 0x33, 0x0, 0x33, 0x0, 0x33, 0x0}
+
+/* dollar (36) */
+#define NXFONT_METRICS_36 {2, 10, 20, 1, 10, 0}
+#define NXFONT_BITMAP_36 {0x8, 0x0, 0x8, 0x0, 0x3f, 0x0, 0x6b, 0x80, 0xe9, 0x80, 0xe9, 0x80, 0xf8, 0x80, 0x7c, 0x0, 0x7e, 0x0, 0x3f, 0x0, 0x1f, 0x80, 0xf, 0x80, 0xb, 0xc0, 0x89, 0xc0, 0xc9, 0xc0, 0xc9, 0x80, 0xeb, 0x80, 0x3e, 0x0, 0x8, 0x0, 0x8, 0x0}
+
+/* percent (37) */
+#define NXFONT_METRICS_37 {3, 17, 17, 1, 11, 0}
+#define NXFONT_BITMAP_37 {0x1e, 0xc, 0x0, 0x3b, 0xfc, 0x0, 0x71, 0x18, 0x0, 0xe1, 0x30, 0x0, 0xe2, 0x30, 0x0, 0xe2, 0x60, 0x0, 0xf4, 0x60, 0x0, 0x78, 0xc0, 0x0, 0x0, 0xc0, 0x0, 0x1, 0x8f, 0x0, 0x1, 0x9d, 0x80, 0x3, 0x38, 0x80, 0x3, 0x70, 0x80, 0x6, 0x71, 0x0, 0x6, 0x71, 0x0, 0xc, 0x7a, 0x0, 0xc, 0x3c, 0x0}
+
+/* ampersand (38) */
+#define NXFONT_METRICS_38 {3, 17, 17, 1, 11, 0}
+#define NXFONT_BITMAP_38 {0x3, 0xe0, 0x0, 0x6, 0x70, 0x0, 0xe, 0x30, 0x0, 0xe, 0x30, 0x0, 0xe, 0x70, 0x0, 0x7, 0xe0, 0x0, 0xf, 0xf, 0x80, 0x1f, 0x87, 0x0, 0x33, 0xc2, 0x0, 0x61, 0xe6, 0x0, 0xe1, 0xfc, 0x0, 0xe0, 0xf8, 0x0, 0xe0, 0x78, 0x0, 0xf0, 0x7c, 0x0, 0xf8, 0xff, 0x80, 0x7f, 0x9f, 0x0, 0x3f, 0xe, 0x0}
+
+/* quotesingle (39) */
+#define NXFONT_METRICS_39 {1, 3, 8, 2, 11, 0}
+#define NXFONT_BITMAP_39 {0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0x40, 0x40}
+
+/* parenleft (40) */
+#define NXFONT_METRICS_40 {1, 5, 21, 1, 11, 0}
+#define NXFONT_BITMAP_40 {0x8, 0x18, 0x30, 0x30, 0x70, 0x60, 0x60, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0x60, 0x60, 0x70, 0x30, 0x30, 0x18, 0x8}
+
+/* parenright (41) */
+#define NXFONT_METRICS_41 {1, 5, 21, 1, 11, 0}
+#define NXFONT_BITMAP_41 {0x80, 0xc0, 0x60, 0x60, 0x30, 0x30, 0x30, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x30, 0x30, 0x30, 0x60, 0x60, 0xc0, 0x80}
+
+/* asterisk (42) */
+#define NXFONT_METRICS_42 {2, 10, 11, 1, 11, 0}
+#define NXFONT_BITMAP_42 {0xc, 0x0, 0xc, 0x0, 0x4c, 0x80, 0xed, 0xc0, 0x7f, 0x80, 0x1e, 0x0, 0x7f, 0x80, 0xed, 0xc0, 0x4c, 0x80, 0xc, 0x0, 0xc, 0x0}
+
+/* plus (43) */
+#define NXFONT_METRICS_43 {2, 12, 12, 1, 16, 0}
+#define NXFONT_BITMAP_43 {0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0xff, 0xf0, 0xff, 0xf0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0}
+
+/* comma (44) */
+#define NXFONT_METRICS_44 {1, 4, 9, 1, 24, 0}
+#define NXFONT_BITMAP_44 {0x60, 0xf0, 0xf0, 0x70, 0x30, 0x60, 0x60, 0xc0, 0x80}
+
+/* hyphen (45) */
+#define NXFONT_METRICS_45 {1, 6, 3, 1, 20, 0}
+#define NXFONT_BITMAP_45 {0xfc, 0xfc, 0xfc}
+
+/* period (46) */
+#define NXFONT_METRICS_46 {1, 4, 4, 1, 24, 0}
+#define NXFONT_BITMAP_46 {0x60, 0xf0, 0xf0, 0x60}
+
+/* slash (47) */
+#define NXFONT_METRICS_47 {1, 7, 17, 0, 11, 0}
+#define NXFONT_BITMAP_47 {0x6, 0x6, 0x4, 0xc, 0xc, 0x8, 0x18, 0x18, 0x10, 0x30, 0x30, 0x20, 0x60, 0x60, 0x40, 0xc0, 0xc0}
+
+/* zero (48) */
+#define NXFONT_METRICS_48 {2, 11, 17, 0, 11, 0}
+#define NXFONT_BITMAP_48 {0xe, 0x0, 0x3b, 0x80, 0x31, 0x80, 0x71, 0xc0, 0x71, 0xc0, 0xf1, 0xe0, 0xf1, 0xe0, 0xf1, 0xe0, 0xf1, 0xe0, 0xf1, 0xe0, 0xf1, 0xe0, 0x71, 0xc0, 0x71, 0xc0, 0x71, 0xc0, 0x31, 0x80, 0x3b, 0x80, 0xe, 0x0}
+
+/* one (49) */
+#define NXFONT_METRICS_49 {2, 9, 17, 2, 11, 0}
+#define NXFONT_BITMAP_49 {0xc, 0x0, 0x3c, 0x0, 0xfc, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x3e, 0x0, 0xff, 0x80}
+
+/* two (50) */
+#define NXFONT_METRICS_50 {2, 10, 17, 1, 11, 0}
+#define NXFONT_BITMAP_50 {0x1e, 0x0, 0x3f, 0x0, 0x7f, 0x80, 0xc7, 0x80, 0x83, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x0, 0x7, 0x0, 0x6, 0x0, 0xc, 0x0, 0xc, 0x0, 0x18, 0x40, 0x30, 0x40, 0x7f, 0xc0, 0xff, 0xc0, 0xff, 0x80}
+
+/* three (51) */
+#define NXFONT_METRICS_51 {2, 11, 17, 0, 11, 0}
+#define NXFONT_BITMAP_51 {0xf, 0x0, 0x3f, 0x80, 0x63, 0xc0, 0x41, 0xc0, 0x1, 0xc0, 0x3, 0x80, 0x7, 0x0, 0x1f, 0x0, 0x7, 0xc0, 0x1, 0xe0, 0x1, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x60, 0xe0, 0xf1, 0xc0, 0xfb, 0x80, 0x7e, 0x0}
+
+/* four (52) */
+#define NXFONT_METRICS_52 {2, 11, 17, 0, 11, 0}
+#define NXFONT_BITMAP_52 {0x1, 0x80, 0x3, 0x80, 0x7, 0x80, 0x7, 0x80, 0xf, 0x80, 0x1b, 0x80, 0x33, 0x80, 0x33, 0x80, 0x63, 0x80, 0xc3, 0x80, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80}
+
+/* five (53) */
+#define NXFONT_METRICS_53 {2, 11, 17, 0, 11, 0}
+#define NXFONT_BITMAP_53 {0x1f, 0xe0, 0x1f, 0xc0, 0x3f, 0xc0, 0x30, 0x0, 0x20, 0x0, 0x70, 0x0, 0x7f, 0x0, 0x7f, 0x80, 0x7f, 0xc0, 0x7, 0xc0, 0x1, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x60, 0xc0, 0xf1, 0x80, 0xfb, 0x80, 0x7e, 0x0}
+
+/* six (54) */
+#define NXFONT_METRICS_54 {2, 11, 17, 1, 11, 0}
+#define NXFONT_BITMAP_54 {0x1, 0xe0, 0x7, 0x80, 0x1e, 0x0, 0x3c, 0x0, 0x38, 0x0, 0x78, 0x0, 0x77, 0x0, 0x7b, 0x80, 0xf1, 0xc0, 0xf1, 0xe0, 0xf1, 0xe0, 0xf1, 0xe0, 0xf1, 0xe0, 0x71, 0xc0, 0x71, 0xc0, 0x3b, 0x80, 0x1e, 0x0}
+
+/* seven (55) */
+#define NXFONT_METRICS_55 {2, 11, 17, 0, 11, 0}
+#define NXFONT_BITMAP_55 {0x3f, 0xe0, 0x7f, 0xe0, 0x7f, 0xc0, 0xc0, 0xc0, 0x81, 0x80, 0x1, 0x80, 0x3, 0x80, 0x3, 0x0, 0x3, 0x0, 0x7, 0x0, 0x6, 0x0, 0x6, 0x0, 0xe, 0x0, 0xe, 0x0, 0xc, 0x0, 0x1c, 0x0, 0x1c, 0x0}
+
+/* eight (56) */
+#define NXFONT_METRICS_56 {2, 11, 17, 0, 11, 0}
+#define NXFONT_BITMAP_56 {0x1f, 0x0, 0x3b, 0x80, 0x71, 0xc0, 0x71, 0xc0, 0x71, 0xc0, 0x79, 0x80, 0x3b, 0x0, 0x3f, 0x0, 0x1f, 0x80, 0x37, 0xc0, 0x63, 0xc0, 0xe1, 0xe0, 0xe1, 0xe0, 0xe1, 0xe0, 0xf1, 0xc0, 0x7b, 0x80, 0x3e, 0x0}
+
+/* nine (57) */
+#define NXFONT_METRICS_57 {2, 11, 17, 0, 11, 0}
+#define NXFONT_BITMAP_57 {0xe, 0x0, 0x3b, 0x80, 0x71, 0xc0, 0x71, 0xc0, 0xf1, 0xe0, 0xf1, 0xe0, 0xf1, 0xe0, 0xf1, 0xe0, 0x71, 0xe0, 0x3b, 0xc0, 0x1f, 0xc0, 0x3, 0xc0, 0x3, 0x80, 0x7, 0x80, 0xf, 0x0, 0x3c, 0x0, 0xf0, 0x0}
+
+/* colon (58) */
+#define NXFONT_METRICS_58 {1, 4, 12, 2, 16, 0}
+#define NXFONT_BITMAP_58 {0x60, 0xf0, 0xf0, 0x60, 0x0, 0x0, 0x0, 0x0, 0x60, 0xf0, 0xf0, 0x60}
+
+/* semicolon (59) */
+#define NXFONT_METRICS_59 {1, 4, 17, 2, 16, 0}
+#define NXFONT_BITMAP_59 {0x60, 0xf0, 0xf0, 0x60, 0x0, 0x0, 0x0, 0x0, 0x60, 0xf0, 0xf0, 0x70, 0x30, 0x60, 0x60, 0xc0, 0x80}
+
+/* less (60) */
+#define NXFONT_METRICS_60 {2, 11, 12, 1, 16, 0}
+#define NXFONT_BITMAP_60 {0x0, 0x60, 0x1, 0xe0, 0x7, 0xc0, 0x1f, 0x0, 0x3c, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0x3c, 0x0, 0x1f, 0x0, 0x7, 0xc0, 0x1, 0xe0, 0x0, 0x60}
+
+/* equal (61) */
+#define NXFONT_METRICS_61 {2, 11, 6, 1, 19, 0}
+#define NXFONT_BITMAP_61 {0xff, 0xe0, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xe0, 0xff, 0xe0}
+
+/* greater (62) */
+#define NXFONT_METRICS_62 {2, 11, 12, 1, 16, 0}
+#define NXFONT_BITMAP_62 {0xc0, 0x0, 0xf0, 0x0, 0x7c, 0x0, 0x1f, 0x0, 0x7, 0x80, 0x0, 0xe0, 0x0, 0xe0, 0x7, 0x80, 0x1f, 0x0, 0x7c, 0x0, 0xf0, 0x0, 0xc0, 0x0}
+
+/* question (63) */
+#define NXFONT_METRICS_63 {2, 9, 17, 1, 11, 0}
+#define NXFONT_BITMAP_63 {0x3e, 0x0, 0x6f, 0x0, 0xe7, 0x80, 0xe7, 0x80, 0x47, 0x80, 0x7, 0x80, 0xf, 0x0, 0xe, 0x0, 0x1c, 0x0, 0x18, 0x0, 0x18, 0x0, 0x0, 0x0, 0x0, 0x0, 0x18, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x18, 0x0}
+
+/* at (64) */
+#define NXFONT_METRICS_64 {3, 20, 21, 1, 11, 0}
+#define NXFONT_BITMAP_64 {0x0, 0x7c, 0x0, 0x3, 0xf7, 0x80, 0xf, 0x80, 0xc0, 0x1e, 0x0, 0x60, 0x3c, 0x0, 0x20, 0x38, 0x3b, 0x30, 0x70, 0xff, 0x10, 0x71, 0xe7, 0x10, 0xf1, 0xc7, 0x10, 0xe3, 0xc6, 0x10, 0xe3, 0x8e, 0x10, 0xe3, 0x8e, 0x30, 0xe3, 0x8e, 0x20, 0xf3, 0x9e, 0x60, 0xf1, 0xfe, 0xc0, 0x70, 0xf3, 0x80, 0x78, 0x0, 0x0, 0x38, 0x0, 0x0, 0x1e, 0x0, 0x0, 0x7, 0x83, 0x0, 0x1, 0xfc, 0x0}
+
+/* A (65) */
+#define NXFONT_METRICS_65 {3, 17, 17, 0, 11, 0}
+#define NXFONT_BITMAP_65 {0x1, 0x80, 0x0, 0x1, 0xc0, 0x0, 0x3, 0xc0, 0x0, 0x3, 0xe0, 0x0, 0x3, 0xe0, 0x0, 0x6, 0xe0, 0x0, 0x6, 0xf0, 0x0, 0x4, 0x70, 0x0, 0xc, 0x70, 0x0, 0x8, 0x78, 0x0, 0x8, 0x38, 0x0, 0x1f, 0xf8, 0x0, 0x10, 0x3c, 0x0, 0x30, 0x3c, 0x0, 0x30, 0x1e, 0x0, 0x70, 0x1e, 0x0, 0xf8, 0x7f, 0x80}
+
+/* B (66) */
+#define NXFONT_METRICS_66 {2, 14, 17, 0, 11, 0}
+#define NXFONT_BITMAP_66 {0xff, 0xc0, 0x3c, 0xf0, 0x3c, 0x78, 0x3c, 0x78, 0x3c, 0x78, 0x3c, 0x78, 0x3c, 0x70, 0x3c, 0xc0, 0x3f, 0xe0, 0x3c, 0x78, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x38, 0x3c, 0x78, 0xff, 0xe0}
+
+/* C (67) */
+#define NXFONT_METRICS_67 {2, 15, 17, 1, 11, 0}
+#define NXFONT_BITMAP_67 {0x3, 0xf2, 0x1e, 0x3e, 0x3c, 0xe, 0x78, 0x6, 0x78, 0x2, 0xf0, 0x2, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0x78, 0x0, 0x78, 0x2, 0x3c, 0xe, 0x1f, 0x3c, 0x7, 0xf0}
+
+/* D (68) */
+#define NXFONT_METRICS_68 {2, 16, 17, 1, 11, 0}
+#define NXFONT_BITMAP_68 {0xff, 0xe0, 0x3c, 0x78, 0x3c, 0x3c, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0xf, 0x3c, 0xf, 0x3c, 0xf, 0x3c, 0xf, 0x3c, 0xf, 0x3c, 0xf, 0x3c, 0xe, 0x3c, 0x1e, 0x3c, 0x1c, 0x3c, 0x3c, 0x3c, 0x78, 0xff, 0xe0}
+
+/* E (69) */
+#define NXFONT_METRICS_69 {2, 15, 17, 1, 11, 0}
+#define NXFONT_BITMAP_69 {0xff, 0xfc, 0x3c, 0x1c, 0x3c, 0xc, 0x3c, 0x4, 0x3c, 0x4, 0x3c, 0x20, 0x3c, 0x20, 0x3c, 0x60, 0x3f, 0xe0, 0x3c, 0x60, 0x3c, 0x20, 0x3c, 0x20, 0x3c, 0x2, 0x3c, 0x2, 0x3c, 0x6, 0x3c, 0xe, 0xff, 0xfe}
+
+/* F (70) */
+#define NXFONT_METRICS_70 {2, 14, 17, 0, 11, 0}
+#define NXFONT_BITMAP_70 {0xff, 0xfc, 0x3c, 0x1c, 0x3c, 0xc, 0x3c, 0x4, 0x3c, 0x4, 0x3c, 0x20, 0x3c, 0x20, 0x3c, 0x60, 0x3f, 0xe0, 0x3c, 0x60, 0x3c, 0x20, 0x3c, 0x20, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0xff, 0x0}
+
+/* G (71) */
+#define NXFONT_METRICS_71 {3, 17, 17, 1, 11, 0}
+#define NXFONT_BITMAP_71 {0x3, 0xf2, 0x0, 0x1e, 0x3e, 0x0, 0x3c, 0xe, 0x0, 0x78, 0x6, 0x0, 0x78, 0x2, 0x0, 0xf0, 0x2, 0x0, 0xf0, 0x0, 0x0, 0xf0, 0x0, 0x0, 0xf0, 0x0, 0x0, 0xf0, 0x7f, 0x80, 0xf0, 0x1e, 0x0, 0xf0, 0x1e, 0x0, 0x78, 0x1e, 0x0, 0x78, 0x1e, 0x0, 0x38, 0x1e, 0x0, 0x1e, 0x1e, 0x0, 0x7, 0xf8, 0x0}
+
+/* H (72) */
+#define NXFONT_METRICS_72 {3, 18, 17, 0, 11, 0}
+#define NXFONT_BITMAP_72 {0xff, 0x3f, 0xc0, 0x3c, 0xf, 0x0, 0x3c, 0xf, 0x0, 0x3c, 0xf, 0x0, 0x3c, 0xf, 0x0, 0x3c, 0xf, 0x0, 0x3c, 0xf, 0x0, 0x3c, 0xf, 0x0, 0x3f, 0xff, 0x0, 0x3c, 0xf, 0x0, 0x3c, 0xf, 0x0, 0x3c, 0xf, 0x0, 0x3c, 0xf, 0x0, 0x3c, 0xf, 0x0, 0x3c, 0xf, 0x0, 0x3c, 0xf, 0x0, 0xff, 0x3f, 0xc0}
+
+/* I (73) */
+#define NXFONT_METRICS_73 {1, 8, 17, 0, 11, 0}
+#define NXFONT_BITMAP_73 {0xff, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0xff}
+
+/* J (74) */
+#define NXFONT_METRICS_74 {2, 11, 19, 0, 11, 0}
+#define NXFONT_BITMAP_74 {0x1f, 0xe0, 0x7, 0x80, 0x7, 0x80, 0x7, 0x80, 0x7, 0x80, 0x7, 0x80, 0x7, 0x80, 0x7, 0x80, 0x7, 0x80, 0x7, 0x80, 0x7, 0x80, 0x7, 0x80, 0x7, 0x80, 0x7, 0x80, 0xe7, 0x80, 0xe7, 0x80, 0xe7, 0x0, 0xe7, 0x0, 0x3c, 0x0}
+
+/* K (75) */
+#define NXFONT_METRICS_75 {3, 18, 17, 0, 11, 0}
+#define NXFONT_BITMAP_75 {0xff, 0x3f, 0x80, 0x3c, 0x1e, 0x0, 0x3c, 0x18, 0x0, 0x3c, 0x30, 0x0, 0x3c, 0x60, 0x0, 0x3c, 0xc0, 0x0, 0x3d, 0x80, 0x0, 0x3f, 0xc0, 0x0, 0x3f, 0xc0, 0x0, 0x3d, 0xe0, 0x0, 0x3c, 0xf0, 0x0, 0x3c, 0xf8, 0x0, 0x3c, 0x7c, 0x0, 0x3c, 0x3e, 0x0, 0x3c, 0x1f, 0x0, 0x3c, 0xf, 0x80, 0xff, 0x1f, 0xc0}
+
+/* L (76) */
+#define NXFONT_METRICS_76 {2, 15, 17, 0, 11, 0}
+#define NXFONT_BITMAP_76 {0xff, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x2, 0x3c, 0x6, 0x3c, 0xc, 0x3c, 0x1c, 0xff, 0xfc}
+
+/* M (77) */
+#define NXFONT_METRICS_77 {3, 21, 17, 1, 11, 0}
+#define NXFONT_BITMAP_77 {0xfc, 0x1, 0xf8, 0x3c, 0x3, 0xe0, 0x3e, 0x3, 0xe0, 0x3e, 0x7, 0xe0, 0x2f, 0x5, 0xe0, 0x2f, 0xd, 0xe0, 0x27, 0x9, 0xe0, 0x27, 0x89, 0xe0, 0x27, 0x99, 0xe0, 0x23, 0x91, 0xe0, 0x23, 0xf1, 0xe0, 0x23, 0xf1, 0xe0, 0x21, 0xe1, 0xe0, 0x21, 0xe1, 0xe0, 0x20, 0xc1, 0xe0, 0x20, 0xc1, 0xe0, 0xf8, 0x7, 0xf8}
+
+/* N (78) */
+#define NXFONT_METRICS_78 {3, 17, 17, 0, 11, 0}
+#define NXFONT_BITMAP_78 {0xf8, 0xf, 0x80, 0x7c, 0x7, 0x0, 0x3e, 0x2, 0x0, 0x3f, 0x2, 0x0, 0x3f, 0x82, 0x0, 0x2f, 0xc2, 0x0, 0x27, 0xe2, 0x0, 0x23, 0xe2, 0x0, 0x21, 0xf2, 0x0, 0x20, 0xfa, 0x0, 0x20, 0x7e, 0x0, 0x20, 0x3e, 0x0, 0x20, 0x1e, 0x0, 0x20, 0x1e, 0x0, 0x20, 0xe, 0x0, 0x60, 0x6, 0x0, 0xf8, 0x2, 0x0}
+
+/* O (79) */
+#define NXFONT_METRICS_79 {2, 16, 17, 1, 11, 0}
+#define NXFONT_BITMAP_79 {0x7, 0xe0, 0x1c, 0x38, 0x38, 0x1c, 0x78, 0x1e, 0x70, 0xe, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0x70, 0xe, 0x78, 0x1e, 0x38, 0x1c, 0x1c, 0x38, 0x7, 0xe0}
+
+/* P (80) */
+#define NXFONT_METRICS_80 {2, 14, 17, 0, 11, 0}
+#define NXFONT_BITMAP_80 {0xff, 0xe0, 0x3c, 0x78, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x78, 0x3f, 0xe0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0xff, 0x0}
+
+/* Q (81) */
+#define NXFONT_METRICS_81 {3, 17, 22, 1, 11, 0}
+#define NXFONT_BITMAP_81 {0x7, 0xe0, 0x0, 0x1c, 0x38, 0x0, 0x38, 0x1c, 0x0, 0x78, 0x1e, 0x0, 0x70, 0xe, 0x0, 0xf0, 0xf, 0x0, 0xf0, 0xf, 0x0, 0xf0, 0xf, 0x0, 0xf0, 0xf, 0x0, 0xf0, 0xf, 0x0, 0xf0, 0xf, 0x0, 0xf0, 0xf, 0x0, 0xf0, 0xe, 0x0, 0x78, 0x1e, 0x0, 0x78, 0x1c, 0x0, 0x3c, 0x38, 0x0, 0x1f, 0xe0, 0x0, 0x7, 0xc0, 0x0, 0x1, 0xe0, 0x0, 0x1, 0xf0, 0x0, 0x0, 0xfc, 0x0, 0x0, 0x3f, 0x80}
+
+/* R (82) */
+#define NXFONT_METRICS_82 {2, 16, 17, 1, 11, 0}
+#define NXFONT_BITMAP_82 {0xff, 0xe0, 0x3c, 0x78, 0x3c, 0x38, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x38, 0x3c, 0x70, 0x3f, 0xc0, 0x3d, 0xe0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0x78, 0x3c, 0x7c, 0x3c, 0x3c, 0x3c, 0x1e, 0xff, 0x1f}
+
+/* S (83) */
+#define NXFONT_METRICS_83 {2, 12, 17, 1, 11, 0}
+#define NXFONT_BITMAP_83 {0x3f, 0xa0, 0x71, 0xe0, 0xe0, 0xe0, 0xe0, 0x60, 0xe0, 0x20, 0xf8, 0x0, 0x7e, 0x0, 0x7f, 0x80, 0x3f, 0xc0, 0xf, 0xe0, 0x7, 0xe0, 0x81, 0xf0, 0x80, 0xf0, 0xc0, 0xf0, 0xe0, 0xe0, 0xf9, 0xe0, 0xbf, 0x80}
+
+/* T (84) */
+#define NXFONT_METRICS_84 {2, 14, 17, 1, 11, 0}
+#define NXFONT_BITMAP_84 {0xff, 0xfc, 0xe7, 0x9c, 0xc7, 0x8c, 0x87, 0x84, 0x87, 0x84, 0x7, 0x80, 0x7, 0x80, 0x7, 0x80, 0x7, 0x80, 0x7, 0x80, 0x7, 0x80, 0x7, 0x80, 0x7, 0x80, 0x7, 0x80, 0x7, 0x80, 0x7, 0x80, 0x1f, 0xe0}
+
+/* U (85) */
+#define NXFONT_METRICS_85 {3, 17, 17, 0, 11, 0}
+#define NXFONT_BITMAP_85 {0xff, 0xf, 0x80, 0x7e, 0x7, 0x0, 0x3c, 0x2, 0x0, 0x3c, 0x2, 0x0, 0x3c, 0x2, 0x0, 0x3c, 0x2, 0x0, 0x3c, 0x2, 0x0, 0x3c, 0x2, 0x0, 0x3c, 0x2, 0x0, 0x3c, 0x2, 0x0, 0x3c, 0x2, 0x0, 0x3c, 0x2, 0x0, 0x3c, 0x2, 0x0, 0x3c, 0x6, 0x0, 0x1e, 0x4, 0x0, 0x1f, 0xc, 0x0, 0x7, 0xf8, 0x0}
+
+/* V (86) */
+#define NXFONT_METRICS_86 {3, 17, 17, 0, 11, 0}
+#define NXFONT_BITMAP_86 {0xff, 0x1f, 0x80, 0x3c, 0x6, 0x0, 0x3c, 0x4, 0x0, 0x1e, 0x4, 0x0, 0x1e, 0xc, 0x0, 0xf, 0x8, 0x0, 0xf, 0x18, 0x0, 0xf, 0x18, 0x0, 0x7, 0x90, 0x0, 0x7, 0xb0, 0x0, 0x3, 0xe0, 0x0, 0x3, 0xe0, 0x0, 0x3, 0xe0, 0x0, 0x1, 0xc0, 0x0, 0x1, 0xc0, 0x0, 0x0, 0x80, 0x0, 0x0, 0x80, 0x0}
+
+/* W (87) */
+#define NXFONT_METRICS_87 {3, 24, 17, 0, 11, 0}
+#define NXFONT_BITMAP_87 {0xff, 0x7f, 0x9f, 0x3c, 0x1e, 0x6, 0x3c, 0x1e, 0x4, 0x1e, 0xf, 0xc, 0x1e, 0x1f, 0x8, 0x1e, 0x1f, 0x18, 0xf, 0x17, 0x98, 0xf, 0x37, 0x90, 0xf, 0x27, 0xb0, 0x7, 0xe3, 0xb0, 0x7, 0xc3, 0xe0, 0x7, 0xc3, 0xe0, 0x3, 0xc1, 0xe0, 0x3, 0x81, 0xc0, 0x3, 0x81, 0xc0, 0x1, 0x0, 0x80, 0x1, 0x0, 0x80}
+
+/* X (88) */
+#define NXFONT_METRICS_88 {2, 16, 17, 1, 11, 0}
+#define NXFONT_BITMAP_88 {0xff, 0x3f, 0x3e, 0xc, 0x1e, 0x8, 0x1f, 0x18, 0xf, 0x30, 0xf, 0xa0, 0x7, 0xe0, 0x3, 0xc0, 0x3, 0xe0, 0x3, 0xe0, 0x3, 0xf0, 0x6, 0xf0, 0xc, 0x78, 0x8, 0x7c, 0x18, 0x3c, 0x38, 0x3e, 0xfc, 0xff}
+
+/* Y (89) */
+#define NXFONT_METRICS_89 {3, 18, 17, 0, 11, 0}
+#define NXFONT_BITMAP_89 {0xff, 0x8f, 0xc0, 0x3e, 0x3, 0x0, 0x1e, 0x2, 0x0, 0xf, 0x6, 0x0, 0xf, 0xc, 0x0, 0x7, 0x8c, 0x0, 0x7, 0x98, 0x0, 0x3, 0xd0, 0x0, 0x3, 0xf0, 0x0, 0x1, 0xe0, 0x0, 0x1, 0xe0, 0x0, 0x1, 0xe0, 0x0, 0x1, 0xe0, 0x0, 0x1, 0xe0, 0x0, 0x1, 0xe0, 0x0, 0x1, 0xe0, 0x0, 0x7, 0xf8, 0x0}
+
+/* Z (90) */
+#define NXFONT_METRICS_90 {2, 14, 17, 1, 11, 0}
+#define NXFONT_BITMAP_90 {0xff, 0xf8, 0xe0, 0xf8, 0xc1, 0xf0, 0xc1, 0xf0, 0x83, 0xe0, 0x3, 0xc0, 0x7, 0xc0, 0x7, 0x80, 0xf, 0x80, 0xf, 0x0, 0x1e, 0x0, 0x3e, 0x4, 0x3c, 0x4, 0x7c, 0xc, 0x78, 0x1c, 0xf8, 0x3c, 0xff, 0xf8}
+
+/* bracketleft (91) */
+#define NXFONT_METRICS_91 {1, 5, 21, 1, 11, 0}
+#define NXFONT_BITMAP_91 {0xf8, 0xe0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xe0, 0xf8}
+
+/* backslash (92) */
+#define NXFONT_METRICS_92 {1, 7, 17, 0, 11, 0}
+#define NXFONT_BITMAP_92 {0xc0, 0xc0, 0x40, 0x60, 0x60, 0x20, 0x30, 0x30, 0x10, 0x18, 0x18, 0x8, 0xc, 0xc, 0x4, 0x6, 0x6}
+
+/* bracketright (93) */
+#define NXFONT_METRICS_93 {1, 5, 21, 1, 11, 0}
+#define NXFONT_BITMAP_93 {0xf8, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x38, 0xf8}
+
+/* asciicircum (94) */
+#define NXFONT_METRICS_94 {1, 8, 10, 3, 11, 0}
+#define NXFONT_BITMAP_94 {0x18, 0x18, 0x3c, 0x24, 0x66, 0x66, 0x66, 0xc3, 0xc3, 0x81}
+
+/* underscore (95) */
+#define NXFONT_METRICS_95 {2, 12, 2, 0, 31, 0}
+#define NXFONT_BITMAP_95 {0xff, 0xf0, 0xff, 0xf0}
+
+/* grave (96) */
+#define NXFONT_METRICS_96 {1, 5, 4, 1, 11, 0}
+#define NXFONT_BITMAP_96 {0xe0, 0x70, 0x30, 0x18}
+
+/* a (97) */
+#define NXFONT_METRICS_97 {2, 10, 12, 1, 16, 0}
+#define NXFONT_BITMAP_97 {0x3e, 0x0, 0x77, 0x0, 0xe3, 0x80, 0xe3, 0x80, 0x43, 0x80, 0xf, 0x80, 0x73, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe7, 0x80, 0xff, 0xc0, 0x71, 0x80}
+
+/* b (98) */
+#define NXFONT_METRICS_98 {2, 11, 17, 1, 11, 0}
+#define NXFONT_BITMAP_98 {0xf0, 0x0, 0x70, 0x0, 0x70, 0x0, 0x70, 0x0, 0x70, 0x0, 0x77, 0x0, 0x7f, 0xc0, 0x71, 0xc0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x71, 0xc0, 0x7b, 0xc0, 0x67, 0x0}
+
+/* c (99) */
+#define NXFONT_METRICS_99 {2, 9, 12, 1, 16, 0}
+#define NXFONT_BITMAP_99 {0x1e, 0x0, 0x73, 0x0, 0x73, 0x80, 0xe3, 0x80, 0xe1, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xf0, 0x0, 0x78, 0x80, 0x7f, 0x0, 0x1e, 0x0}
+
+/* d (100) */
+#define NXFONT_METRICS_100 {2, 12, 17, 1, 11, 0}
+#define NXFONT_BITMAP_100 {0x1, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x1e, 0xe0, 0x7f, 0xe0, 0x71, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xf0, 0xe0, 0x71, 0xe0, 0x7e, 0xe0, 0x1c, 0x70}
+
+/* e (101) */
+#define NXFONT_METRICS_101 {2, 9, 12, 1, 16, 0}
+#define NXFONT_BITMAP_101 {0x1e, 0x0, 0x73, 0x0, 0x73, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xff, 0x80, 0xe0, 0x0, 0xe0, 0x0, 0xf0, 0x0, 0x78, 0x80, 0x7f, 0x0, 0x1e, 0x0}
+
+/* f (102) */
+#define NXFONT_METRICS_102 {1, 8, 17, 1, 11, 0}
+#define NXFONT_BITMAP_102 {0x1e, 0x33, 0x73, 0x70, 0x70, 0xfc, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0xf8}
+
+/* g (103) */
+#define NXFONT_METRICS_103 {2, 10, 17, 1, 16, 0}
+#define NXFONT_BITMAP_103 {0x3e, 0xc0, 0x77, 0xc0, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0x73, 0x0, 0x3e, 0x0, 0x60, 0x0, 0xe0, 0x0, 0xff, 0x80, 0xff, 0xc0, 0x7f, 0xc0, 0xc1, 0xc0, 0xc0, 0xc0, 0xe1, 0x80, 0x7f, 0x0}
+
+/* h (104) */
+#define NXFONT_METRICS_104 {2, 12, 17, 1, 11, 0}
+#define NXFONT_BITMAP_104 {0xf0, 0x0, 0x70, 0x0, 0x70, 0x0, 0x70, 0x0, 0x70, 0x0, 0x73, 0xc0, 0x7f, 0xe0, 0x78, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0xf9, 0xf0}
+
+/* i (105) */
+#define NXFONT_METRICS_105 {1, 5, 17, 1, 11, 0}
+#define NXFONT_BITMAP_105 {0x70, 0x70, 0x70, 0x0, 0x0, 0xf0, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0xf8}
+
+/* j (106) - NOTE: Xoffset should be -1, not 0. */
+#define NXFONT_METRICS_106 {1, 7, 22, 0, 11, 0}
+#define NXFONT_BITMAP_106 {0xe, 0xe, 0xe, 0x0, 0x0, 0x1e, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xce, 0xce, 0xcc, 0x78}
+
+/* k (107) */
+#define NXFONT_METRICS_107 {2, 13, 17, 1, 11, 0}
+#define NXFONT_BITMAP_107 {0xf0, 0x0, 0x70, 0x0, 0x70, 0x0, 0x70, 0x0, 0x70, 0x0, 0x73, 0xf0, 0x70, 0xc0, 0x71, 0x80, 0x73, 0x0, 0x76, 0x0, 0x7e, 0x0, 0x7f, 0x0, 0x77, 0x80, 0x73, 0xc0, 0x71, 0xe0, 0x70, 0xf0, 0xfb, 0xf8}
+
+/* l (108) */
+#define NXFONT_METRICS_108 {1, 5, 17, 1, 11, 0}
+#define NXFONT_BITMAP_108 {0xf0, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0xf8}
+
+/* m (109) */
+#define NXFONT_METRICS_109 {3, 19, 12, 1, 16, 0}
+#define NXFONT_BITMAP_109 {0xf3, 0xc7, 0x80, 0x77, 0xdf, 0xc0, 0x78, 0xf1, 0xc0, 0x70, 0xe1, 0xc0, 0x70, 0xe1, 0xc0, 0x70, 0xe1, 0xc0, 0x70, 0xe1, 0xc0, 0x70, 0xe1, 0xc0, 0x70, 0xe1, 0xc0, 0x70, 0xe1, 0xc0, 0x70, 0xe1, 0xc0, 0xf9, 0xf3, 0xe0}
+
+/* n (110) */
+#define NXFONT_METRICS_110 {2, 12, 12, 1, 16, 0}
+#define NXFONT_BITMAP_110 {0xf3, 0xc0, 0x77, 0xe0, 0x78, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0xf9, 0xf0}
+
+/* o (111) */
+#define NXFONT_METRICS_111 {2, 11, 12, 1, 16, 0}
+#define NXFONT_BITMAP_111 {0x1f, 0x0, 0x71, 0xc0, 0x71, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0x71, 0xc0, 0x71, 0xc0, 0x1f, 0x0}
+
+/* p (112) */
+#define NXFONT_METRICS_112 {2, 12, 17, 1, 16, 0}
+#define NXFONT_BITMAP_112 {0xe3, 0xc0, 0x77, 0xe0, 0x78, 0xe0, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x78, 0xe0, 0x77, 0xe0, 0x73, 0x80, 0x70, 0x0, 0x70, 0x0, 0x70, 0x0, 0x70, 0x0, 0xfc, 0x0}
+
+/* q (113) */
+#define NXFONT_METRICS_113 {2, 12, 17, 1, 16, 0}
+#define NXFONT_BITMAP_113 {0xe, 0x60, 0x3f, 0xe0, 0x71, 0xe0, 0x70, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0x71, 0xe0, 0x7e, 0xe0, 0x1c, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x1, 0xf0}
+
+/* r (114) */
+#define NXFONT_METRICS_114 {2, 9, 12, 1, 16, 0}
+#define NXFONT_BITMAP_114 {0xef, 0x0, 0x7f, 0x80, 0x73, 0x80, 0x70, 0x0, 0x70, 0x0, 0x70, 0x0, 0x70, 0x0, 0x70, 0x0, 0x70, 0x0, 0x70, 0x0, 0x70, 0x0, 0xf8, 0x0}
+
+/* s (115) */
+#define NXFONT_METRICS_115 {1, 8, 12, 1, 16, 0}
+#define NXFONT_BITMAP_115 {0x3e, 0x66, 0xe2, 0xe0, 0xf8, 0x7c, 0x3e, 0x1f, 0x87, 0x87, 0xc6, 0xfc}
+
+/* t (116) */
+#define NXFONT_METRICS_116 {1, 8, 16, 0, 12, 0}
+#define NXFONT_BITMAP_116 {0x8, 0x18, 0x38, 0x78, 0xff, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x39, 0x3e, 0x1c}
+
+/* u (117) */
+#define NXFONT_METRICS_117 {2, 12, 12, 1, 16, 0}
+#define NXFONT_BITMAP_117 {0xf1, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x71, 0xe0, 0x7e, 0xf0, 0x3c, 0xe0}
+
+/* v (118) */
+#define NXFONT_METRICS_118 {2, 12, 12, 0, 16, 0}
+#define NXFONT_BITMAP_118 {0xfc, 0xf0, 0x70, 0x60, 0x78, 0x40, 0x38, 0xc0, 0x38, 0x80, 0x1c, 0x80, 0x1d, 0x80, 0x1f, 0x0, 0xf, 0x0, 0xf, 0x0, 0x6, 0x0, 0x6, 0x0}
+
+/* w (119) */
+#define NXFONT_METRICS_119 {3, 17, 12, 0, 16, 0}
+#define NXFONT_BITMAP_119 {0xfd, 0xf7, 0x80, 0x78, 0xe3, 0x0, 0x38, 0xe3, 0x0, 0x38, 0xe2, 0x0, 0x3c, 0xe6, 0x0, 0x1d, 0x76, 0x0, 0x1d, 0x74, 0x0, 0x1f, 0x3c, 0x0, 0xe, 0x38, 0x0, 0xe, 0x38, 0x0, 0x4, 0x10, 0x0, 0x4, 0x10, 0x0}
+
+/* x (120) */
+#define NXFONT_METRICS_120 {2, 12, 12, 0, 16, 0}
+#define NXFONT_BITMAP_120 {0xfc, 0xf0, 0x78, 0x60, 0x3c, 0xc0, 0x1d, 0x80, 0x1f, 0x0, 0xf, 0x0, 0xf, 0x0, 0x1f, 0x80, 0x1b, 0xc0, 0x31, 0xc0, 0x61, 0xe0, 0xf3, 0xf0}
+
+/* y (121) */
+#define NXFONT_METRICS_121 {2, 12, 17, 0, 16, 0}
+#define NXFONT_BITMAP_121 {0xfd, 0xf0, 0x78, 0x60, 0x38, 0x40, 0x38, 0xc0, 0x3c, 0x80, 0x1c, 0x80, 0x1d, 0x80, 0x1f, 0x0, 0xf, 0x0, 0xf, 0x0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0x64, 0x0, 0xec, 0x0, 0xf8, 0x0, 0x70, 0x0}
+
+/* z (122) */
+#define NXFONT_METRICS_122 {2, 9, 12, 1, 16, 0}
+#define NXFONT_BITMAP_122 {0xff, 0x80, 0xc7, 0x0, 0x8f, 0x0, 0x8e, 0x0, 0x1e, 0x0, 0x1c, 0x0, 0x3c, 0x0, 0x38, 0x0, 0x78, 0x80, 0x71, 0x80, 0xf1, 0x80, 0xff, 0x80}
+
+/* braceleft (123) */
+#define NXFONT_METRICS_123 {1, 7, 21, 1, 11, 0}
+#define NXFONT_BITMAP_123 {0xe, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x60, 0xc0, 0x60, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0xe}
+
+/* bar (124) */
+#define NXFONT_METRICS_124 {1, 2, 22, 2, 11, 0}
+#define NXFONT_BITMAP_124 {0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* braceright (125) */
+#define NXFONT_METRICS_125 {1, 7, 21, 1, 11, 0}
+#define NXFONT_BITMAP_125 {0xe0, 0x30, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xc, 0x6, 0xc, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x30, 0xe0}
+
+/* asciitilde (126) */
+#define NXFONT_METRICS_126 {2, 12, 6, 0, 16, 0}
+#define NXFONT_BITMAP_126 {0x18, 0x0, 0x7e, 0x10, 0xff, 0x10, 0x8f, 0xf0, 0x87, 0xe0, 0x1, 0x80}
+
+/* exclamdown (161) */
+#define NXFONT_METRICS_161 {1, 4, 17, 2, 16, 0}
+#define NXFONT_BITMAP_161 {0x60, 0xf0, 0xf0, 0x60, 0x0, 0x0, 0x60, 0x60, 0x60, 0x60, 0x60, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0x60}
+
+/* cent (162) */
+#define NXFONT_METRICS_162 {2, 10, 18, 1, 13, 0}
+#define NXFONT_BITMAP_162 {0x0, 0x80, 0x1, 0x80, 0x1, 0x0, 0x1f, 0x80, 0x73, 0xc0, 0x73, 0xc0, 0xe6, 0x80, 0xe4, 0x0, 0xe4, 0x0, 0xec, 0x0, 0xe8, 0x0, 0xf8, 0x0, 0x78, 0x80, 0x7f, 0x80, 0x3e, 0x0, 0x30, 0x0, 0x60, 0x0, 0x60, 0x0}
+
+/* sterling (163) */
+#define NXFONT_METRICS_163 {2, 11, 17, 0, 11, 0}
+#define NXFONT_BITMAP_163 {0xf, 0xc0, 0x1e, 0x60, 0x3c, 0xe0, 0x3c, 0xe0, 0x3c, 0x40, 0x1c, 0x0, 0x1c, 0x0, 0xff, 0x80, 0xff, 0x80, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0xc, 0x20, 0x7c, 0x60, 0xcf, 0xe0, 0xff, 0xe0, 0x73, 0xc0}
+
+/* currency (164) */
+#define NXFONT_METRICS_164 {2, 11, 12, 0, 13, 0}
+#define NXFONT_BITMAP_164 {0xc0, 0x60, 0xee, 0xe0, 0x7f, 0xc0, 0x3b, 0x80, 0x71, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x71, 0xc0, 0x3b, 0x80, 0x7f, 0xc0, 0xee, 0xe0, 0xc0, 0x60}
+
+/* yen (165) */
+#define NXFONT_METRICS_165 {2, 14, 17, 0, 11, 0}
+#define NXFONT_BITMAP_165 {0xfe, 0x7c, 0x38, 0x30, 0x3c, 0x20, 0x1c, 0x60, 0x1e, 0x40, 0xe, 0xc0, 0xf, 0x80, 0x7, 0x80, 0x7, 0x0, 0x1f, 0xc0, 0x7, 0x0, 0x1f, 0xc0, 0x7, 0x0, 0x7, 0x0, 0x7, 0x0, 0x7, 0x0, 0x1f, 0xc0}
+
+/* brokenbar (166) */
+#define NXFONT_METRICS_166 {1, 2, 22, 2, 11, 0}
+#define NXFONT_BITMAP_166 {0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* section (167) */
+#define NXFONT_METRICS_167 {1, 7, 20, 2, 11, 0}
+#define NXFONT_BITMAP_167 {0x3c, 0x6e, 0xce, 0xc6, 0xe0, 0x70, 0x78, 0x5c, 0x8e, 0x86, 0xc2, 0xe2, 0x74, 0x3c, 0x1c, 0xe, 0xc6, 0xe6, 0xec, 0x78}
+
+/* dieresis (168) */
+#define NXFONT_METRICS_168 {1, 6, 2, 1, 12, 0}
+#define NXFONT_BITMAP_168 {0xcc, 0xcc}
+
+/* copyright (169) */
+#define NXFONT_METRICS_169 {3, 17, 17, 1, 11, 0}
+#define NXFONT_BITMAP_169 {0x3, 0xe0, 0x0, 0xf, 0xf8, 0x0, 0x3c, 0x1e, 0x0, 0x30, 0x6, 0x0, 0x61, 0xf3, 0x0, 0x63, 0x33, 0x0, 0xc6, 0x11, 0x80, 0xc6, 0x1, 0x80, 0xc6, 0x1, 0x80, 0xc6, 0x1, 0x80, 0xc6, 0x1, 0x80, 0x63, 0x33, 0x0, 0x61, 0xe3, 0x0, 0x30, 0x6, 0x0, 0x3c, 0x1e, 0x0, 0xf, 0xf8, 0x0, 0x3, 0xe0, 0x0}
+
+/* ordfeminine (170) */
+#define NXFONT_METRICS_170 {1, 7, 10, 0, 11, 0}
+#define NXFONT_BITMAP_170 {0x78, 0xdc, 0xc, 0x7c, 0xec, 0xcc, 0x7e, 0x0, 0xfe, 0xfe}
+
+/* guillemotleft (171) */
+#define NXFONT_METRICS_171 {2, 11, 10, 1, 17, 0}
+#define NXFONT_BITMAP_171 {0xc, 0x60, 0x18, 0xc0, 0x31, 0x80, 0x73, 0x80, 0xe7, 0x0, 0xe7, 0x0, 0x73, 0x80, 0x31, 0x80, 0x18, 0xc0, 0xc, 0x60}
+
+/* logicalnot (172) */
+#define NXFONT_METRICS_172 {2, 11, 7, 2, 19, 0}
+#define NXFONT_BITMAP_172 {0xff, 0xe0, 0xff, 0xe0, 0x0, 0x60, 0x0, 0x60, 0x0, 0x60, 0x0, 0x60, 0x0, 0x60}
+
+/* hyphen (173) */
+#define NXFONT_METRICS_173 {1, 6, 3, 1, 20, 0}
+#define NXFONT_BITMAP_173 {0xfc, 0xfc, 0xfc}
+
+/* registered (174) */
+#define NXFONT_METRICS_174 {3, 17, 17, 1, 11, 0}
+#define NXFONT_BITMAP_174 {0x3, 0xe0, 0x0, 0xf, 0xf8, 0x0, 0x3c, 0x1e, 0x0, 0x30, 0x6, 0x0, 0x67, 0xe3, 0x0, 0x63, 0x33, 0x0, 0xc3, 0x31, 0x80, 0xc3, 0x31, 0x80, 0xc3, 0xe1, 0x80, 0xc3, 0x61, 0x80, 0xc3, 0x31, 0x80, 0x63, 0x33, 0x0, 0x67, 0xbb, 0x0, 0x30, 0x6, 0x0, 0x3c, 0x1e, 0x0, 0xf, 0xf8, 0x0, 0x3, 0xe0, 0x0}
+
+/* macron (175) */
+#define NXFONT_METRICS_175 {1, 6, 1, 1, 13, 0}
+#define NXFONT_BITMAP_175 {0xfc}
+
+/* degree (176) */
+#define NXFONT_METRICS_176 {1, 8, 7, 0, 11, 0}
+#define NXFONT_BITMAP_176 {0x3c, 0x66, 0xc3, 0xc3, 0xc3, 0x66, 0x3c}
+
+/* plusminus (177) */
+#define NXFONT_METRICS_177 {2, 12, 13, 1, 15, 0}
+#define NXFONT_BITMAP_177 {0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0xff, 0xf0, 0xff, 0xf0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0x0, 0x0, 0xff, 0xf0, 0xff, 0xf0}
+
+/* twosuperior (178) */
+#define NXFONT_METRICS_178 {1, 6, 10, 0, 11, 0}
+#define NXFONT_BITMAP_178 {0x38, 0x7c, 0x8c, 0xc, 0x18, 0x10, 0x20, 0x40, 0xfc, 0xfc}
+
+/* threesuperior (179) */
+#define NXFONT_METRICS_179 {1, 6, 10, 0, 11, 0}
+#define NXFONT_BITMAP_179 {0x38, 0x7c, 0x8c, 0xc, 0x38, 0x1c, 0xc, 0x8c, 0xf8, 0x70}
+
+/* acute (180) */
+#define NXFONT_METRICS_180 {1, 5, 4, 2, 11, 0}
+#define NXFONT_BITMAP_180 {0x38, 0x70, 0x60, 0xc0}
+
+/* mu (181) */
+#define NXFONT_METRICS_181 {2, 12, 17, 1, 16, 0}
+#define NXFONT_BITMAP_181 {0xf1, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x71, 0xe0, 0x7e, 0xf0, 0x6c, 0xe0, 0x60, 0x0, 0x60, 0x0, 0xe0, 0x0, 0xf0, 0x0, 0x60, 0x0}
+
+/* paragraph (182) */
+#define NXFONT_METRICS_182 {2, 11, 22, 1, 11, 0}
+#define NXFONT_BITMAP_182 {0x1f, 0xe0, 0x7f, 0xe0, 0x7e, 0x40, 0xfe, 0x40, 0xfe, 0x40, 0xfe, 0x40, 0xfe, 0x40, 0xfe, 0x40, 0xfe, 0x40, 0x7e, 0x40, 0x7e, 0x40, 0x1e, 0x40, 0x2, 0x40, 0x2, 0x40, 0x2, 0x40, 0x2, 0x40, 0x2, 0x40, 0x2, 0x40, 0x2, 0x40, 0x2, 0x40, 0x2, 0x40, 0x2, 0x40}
+
+/* periodcentered (183) */
+#define NXFONT_METRICS_183 {1, 3, 3, 1, 19, 0}
+#define NXFONT_BITMAP_183 {0xe0, 0xe0, 0xe0}
+
+/* cedilla (184) */
+#define NXFONT_METRICS_184 {1, 6, 6, 1, 28, 0}
+#define NXFONT_BITMAP_184 {0x10, 0x30, 0x38, 0xc, 0x8c, 0x78}
+
+/* onesuperior (185) */
+#define NXFONT_METRICS_185 {1, 6, 10, 0, 11, 0}
+#define NXFONT_BITMAP_185 {0x30, 0xf0, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0xfc}
+
+/* ordmasculine (186) */
+#define NXFONT_METRICS_186 {1, 7, 10, 0, 11, 0}
+#define NXFONT_BITMAP_186 {0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x0, 0xfe, 0xfe}
+
+/* guillemotright (187) */
+#define NXFONT_METRICS_187 {2, 11, 10, 1, 17, 0}
+#define NXFONT_BITMAP_187 {0xc6, 0x0, 0x63, 0x0, 0x31, 0x80, 0x39, 0xc0, 0x1c, 0xe0, 0x1c, 0xe0, 0x39, 0xc0, 0x33, 0x80, 0x63, 0x0, 0xc6, 0x0}
+
+/* onequarter (188) */
+#define NXFONT_METRICS_188 {3, 17, 17, 0, 11, 0}
+#define NXFONT_BITMAP_188 {0x30, 0x4, 0x0, 0xf0, 0xc, 0x0, 0x30, 0x18, 0x0, 0x30, 0x18, 0x0, 0x30, 0x30, 0x0, 0x30, 0x20, 0x0, 0x30, 0x60, 0x0, 0x30, 0x42, 0x0, 0x30, 0xc6, 0x0, 0xfc, 0x8e, 0x0, 0x1, 0x8e, 0x0, 0x1, 0x16, 0x0, 0x3, 0x36, 0x0, 0x6, 0x26, 0x0, 0x6, 0x7f, 0x80, 0xc, 0x6, 0x0, 0x8, 0x6, 0x0}
+
+/* onehalf (189) */
+#define NXFONT_METRICS_189 {3, 17, 17, 0, 11, 0}
+#define NXFONT_BITMAP_189 {0x30, 0x4, 0x0, 0xf0, 0xc, 0x0, 0x30, 0x18, 0x0, 0x30, 0x18, 0x0, 0x30, 0x30, 0x0, 0x30, 0x20, 0x0, 0x30, 0x60, 0x0, 0x30, 0x47, 0x0, 0x30, 0xcf, 0x80, 0xfc, 0x91, 0x80, 0x1, 0x81, 0x80, 0x1, 0x3, 0x0, 0x3, 0x2, 0x0, 0x6, 0x4, 0x0, 0x6, 0x8, 0x0, 0xc, 0x1f, 0x80, 0x8, 0x1f, 0x80}
+
+/* threequarters (190) */
+#define NXFONT_METRICS_190 {3, 17, 17, 1, 11, 0}
+#define NXFONT_BITMAP_190 {0x38, 0x4, 0x0, 0x7c, 0xc, 0x0, 0x8c, 0x18, 0x0, 0xc, 0x18, 0x0, 0x38, 0x30, 0x0, 0x1c, 0x20, 0x0, 0xc, 0x60, 0x0, 0x8c, 0x42, 0x0, 0xf8, 0xc6, 0x0, 0x71, 0xe, 0x0, 0x3, 0xe, 0x0, 0x2, 0x16, 0x0, 0x6, 0x36, 0x0, 0xc, 0x26, 0x0, 0xc, 0x7f, 0x80, 0x18, 0x6, 0x0, 0x10, 0x6, 0x0}
+
+/* questiondown (191) */
+#define NXFONT_METRICS_191 {2, 9, 17, 1, 16, 0}
+#define NXFONT_BITMAP_191 {0xc, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0xc, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0x0, 0xc, 0x0, 0x1c, 0x0, 0x38, 0x0, 0x78, 0x0, 0xf0, 0x0, 0xf1, 0x0, 0xf3, 0x80, 0xf3, 0x80, 0x7b, 0x0, 0x3e, 0x0}
+
+/* Agrave (192) */
+#define NXFONT_METRICS_192 {3, 17, 22, 0, 6, 0}
+#define NXFONT_BITMAP_192 {0x3, 0x80, 0x0, 0x1, 0xc0, 0x0, 0x0, 0xc0, 0x0, 0x0, 0x60, 0x0, 0x0, 0x0, 0x0, 0x1, 0x80, 0x0, 0x1, 0xc0, 0x0, 0x3, 0xc0, 0x0, 0x3, 0xe0, 0x0, 0x3, 0xe0, 0x0, 0x6, 0xe0, 0x0, 0x6, 0xf0, 0x0, 0x4, 0x70, 0x0, 0xc, 0x70, 0x0, 0x8, 0x78, 0x0, 0x8, 0x38, 0x0, 0x1f, 0xf8, 0x0, 0x10, 0x3c, 0x0, 0x30, 0x3c, 0x0, 0x30, 0x1e, 0x0, 0x70, 0x1e, 0x0, 0xf8, 0x7f, 0x80}
+
+/* Aacute (193) */
+#define NXFONT_METRICS_193 {3, 17, 22, 0, 6, 0}
+#define NXFONT_BITMAP_193 {0x0, 0xe0, 0x0, 0x1, 0xc0, 0x0, 0x1, 0x80, 0x0, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x80, 0x0, 0x1, 0xc0, 0x0, 0x3, 0xc0, 0x0, 0x3, 0xe0, 0x0, 0x3, 0xe0, 0x0, 0x6, 0xe0, 0x0, 0x6, 0xf0, 0x0, 0x4, 0x70, 0x0, 0xc, 0x70, 0x0, 0x8, 0x78, 0x0, 0x8, 0x38, 0x0, 0x1f, 0xf8, 0x0, 0x10, 0x3c, 0x0, 0x30, 0x3c, 0x0, 0x30, 0x1e, 0x0, 0x70, 0x1e, 0x0, 0xf8, 0x7f, 0x80}
+
+/* Acircumflex (194) */
+#define NXFONT_METRICS_194 {3, 17, 22, 0, 6, 0}
+#define NXFONT_BITMAP_194 {0x1, 0x80, 0x0, 0x3, 0xc0, 0x0, 0x6, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x80, 0x0, 0x1, 0xc0, 0x0, 0x3, 0xc0, 0x0, 0x3, 0xe0, 0x0, 0x3, 0xe0, 0x0, 0x6, 0xe0, 0x0, 0x6, 0xf0, 0x0, 0x4, 0x70, 0x0, 0xc, 0x70, 0x0, 0x8, 0x78, 0x0, 0x8, 0x38, 0x0, 0x1f, 0xf8, 0x0, 0x10, 0x3c, 0x0, 0x30, 0x3c, 0x0, 0x30, 0x1e, 0x0, 0x70, 0x1e, 0x0, 0xf8, 0x7f, 0x80}
+
+/* Atilde (195) */
+#define NXFONT_METRICS_195 {3, 17, 21, 0, 7, 0}
+#define NXFONT_BITMAP_195 {0x3, 0x10, 0x0, 0x7, 0xe0, 0x0, 0x8, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x80, 0x0, 0x1, 0xc0, 0x0, 0x3, 0xc0, 0x0, 0x3, 0xe0, 0x0, 0x3, 0xe0, 0x0, 0x6, 0xe0, 0x0, 0x6, 0xf0, 0x0, 0x4, 0x70, 0x0, 0xc, 0x70, 0x0, 0x8, 0x78, 0x0, 0x8, 0x38, 0x0, 0x1f, 0xf8, 0x0, 0x10, 0x3c, 0x0, 0x30, 0x3c, 0x0, 0x30, 0x1e, 0x0, 0x70, 0x1e, 0x0, 0xf8, 0x7f, 0x80}
+
+/* Adieresis (196) */
+#define NXFONT_METRICS_196 {3, 17, 21, 0, 7, 0}
+#define NXFONT_BITMAP_196 {0x6, 0x60, 0x0, 0x6, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x80, 0x0, 0x1, 0xc0, 0x0, 0x3, 0xc0, 0x0, 0x3, 0xe0, 0x0, 0x3, 0xe0, 0x0, 0x6, 0xe0, 0x0, 0x6, 0xf0, 0x0, 0x4, 0x70, 0x0, 0xc, 0x70, 0x0, 0x8, 0x78, 0x0, 0x8, 0x38, 0x0, 0x1f, 0xf8, 0x0, 0x10, 0x3c, 0x0, 0x30, 0x3c, 0x0, 0x30, 0x1e, 0x0, 0x70, 0x1e, 0x0, 0xf8, 0x7f, 0x80}
+
+/* Aring (197) */
+#define NXFONT_METRICS_197 {3, 17, 23, 0, 5, 0}
+#define NXFONT_BITMAP_197 {0x1, 0x80, 0x0, 0x3, 0xc0, 0x0, 0x6, 0x60, 0x0, 0x6, 0x60, 0x0, 0x3, 0xc0, 0x0, 0x1, 0x80, 0x0, 0x1, 0x80, 0x0, 0x1, 0xc0, 0x0, 0x3, 0xc0, 0x0, 0x3, 0xe0, 0x0, 0x3, 0xe0, 0x0, 0x6, 0xe0, 0x0, 0x6, 0xf0, 0x0, 0x4, 0x70, 0x0, 0xc, 0x70, 0x0, 0x8, 0x78, 0x0, 0x8, 0x38, 0x0, 0x1f, 0xf8, 0x0, 0x10, 0x3c, 0x0, 0x30, 0x3c, 0x0, 0x30, 0x1e, 0x0, 0x70, 0x1e, 0x0, 0xf8, 0x7f, 0x80}
+
+/* AE (198) */
+#define NXFONT_METRICS_198 {3, 23, 17, 0, 11, 0}
+#define NXFONT_BITMAP_198 {0x1, 0xff, 0xfc, 0x0, 0x7c, 0x1c, 0x0, 0xfc, 0xc, 0x0, 0xbc, 0x4, 0x1, 0xbc, 0x4, 0x1, 0x3c, 0x20, 0x3, 0x3c, 0x20, 0x2, 0x3c, 0x60, 0x6, 0x3f, 0xe0, 0x7, 0xfc, 0x60, 0xc, 0x3c, 0x20, 0x8, 0x3c, 0x20, 0x18, 0x3c, 0x2, 0x10, 0x3c, 0x2, 0x30, 0x3c, 0x6, 0x70, 0x3c, 0xe, 0xf8, 0xff, 0xfe}
+
+/* Ccedilla (199) */
+#define NXFONT_METRICS_199 {2, 15, 23, 1, 11, 0}
+#define NXFONT_BITMAP_199 {0x3, 0xf2, 0x1e, 0x3e, 0x3c, 0xe, 0x78, 0x6, 0x78, 0x2, 0xf0, 0x2, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0x78, 0x0, 0x78, 0x2, 0x3c, 0xe, 0x1f, 0x3c, 0x7, 0xf0, 0x1, 0x0, 0x3, 0x0, 0x3, 0x80, 0x0, 0xc0, 0x8, 0xc0, 0x7, 0x80}
+
+/* Egrave (200) */
+#define NXFONT_METRICS_200 {2, 15, 22, 1, 6, 0}
+#define NXFONT_BITMAP_200 {0x7, 0x0, 0x3, 0x80, 0x1, 0x80, 0x0, 0xc0, 0x0, 0x0, 0xff, 0xfc, 0x3c, 0x1c, 0x3c, 0xc, 0x3c, 0x4, 0x3c, 0x4, 0x3c, 0x20, 0x3c, 0x20, 0x3c, 0x60, 0x3f, 0xe0, 0x3c, 0x60, 0x3c, 0x20, 0x3c, 0x20, 0x3c, 0x2, 0x3c, 0x2, 0x3c, 0x6, 0x3c, 0xe, 0xff, 0xfe}
+
+/* Eacute (201) */
+#define NXFONT_METRICS_201 {2, 15, 22, 1, 6, 0}
+#define NXFONT_BITMAP_201 {0x1, 0xc0, 0x3, 0x80, 0x3, 0x0, 0x6, 0x0, 0x0, 0x0, 0xff, 0xfc, 0x3c, 0x1c, 0x3c, 0xc, 0x3c, 0x4, 0x3c, 0x4, 0x3c, 0x20, 0x3c, 0x20, 0x3c, 0x60, 0x3f, 0xe0, 0x3c, 0x60, 0x3c, 0x20, 0x3c, 0x20, 0x3c, 0x2, 0x3c, 0x2, 0x3c, 0x6, 0x3c, 0xe, 0xff, 0xfe}
+
+/* Ecircumflex (202) */
+#define NXFONT_METRICS_202 {2, 15, 22, 1, 6, 0}
+#define NXFONT_BITMAP_202 {0x3, 0x0, 0x7, 0x80, 0xc, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xfc, 0x3c, 0x1c, 0x3c, 0xc, 0x3c, 0x4, 0x3c, 0x4, 0x3c, 0x20, 0x3c, 0x20, 0x3c, 0x60, 0x3f, 0xe0, 0x3c, 0x60, 0x3c, 0x20, 0x3c, 0x20, 0x3c, 0x2, 0x3c, 0x2, 0x3c, 0x6, 0x3c, 0xe, 0xff, 0xfe}
+
+/* Edieresis (203) */
+#define NXFONT_METRICS_203 {2, 15, 21, 1, 7, 0}
+#define NXFONT_BITMAP_203 {0xc, 0xc0, 0xc, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xfc, 0x3c, 0x1c, 0x3c, 0xc, 0x3c, 0x4, 0x3c, 0x4, 0x3c, 0x20, 0x3c, 0x20, 0x3c, 0x60, 0x3f, 0xe0, 0x3c, 0x60, 0x3c, 0x20, 0x3c, 0x20, 0x3c, 0x2, 0x3c, 0x2, 0x3c, 0x6, 0x3c, 0xe, 0xff, 0xfe}
+
+/* Igrave (204) */
+#define NXFONT_METRICS_204 {1, 8, 22, 0, 6, 0}
+#define NXFONT_BITMAP_204 {0x70, 0x38, 0x18, 0xc, 0x0, 0xff, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0xff}
+
+/* Iacute (205) */
+#define NXFONT_METRICS_205 {1, 8, 22, 0, 6, 0}
+#define NXFONT_BITMAP_205 {0xe, 0x1c, 0x18, 0x30, 0x0, 0xff, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0xff}
+
+/* Icircumflex (206) */
+#define NXFONT_METRICS_206 {1, 8, 22, 0, 6, 0}
+#define NXFONT_BITMAP_206 {0x18, 0x3c, 0x66, 0x0, 0x0, 0xff, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0xff}
+
+/* Idieresis (207) */
+#define NXFONT_METRICS_207 {1, 8, 21, 0, 7, 0}
+#define NXFONT_BITMAP_207 {0x66, 0x66, 0x0, 0x0, 0xff, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0xff}
+
+/* Eth (208) */
+#define NXFONT_METRICS_208 {2, 16, 17, 1, 11, 0}
+#define NXFONT_BITMAP_208 {0xff, 0xe0, 0x3c, 0x78, 0x3c, 0x3c, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0xf, 0x3c, 0xf, 0xff, 0x8f, 0xff, 0x8f, 0x3c, 0xf, 0x3c, 0xf, 0x3c, 0xe, 0x3c, 0x1e, 0x3c, 0x1c, 0x3c, 0x3c, 0x3c, 0x78, 0xff, 0xe0}
+
+/* Ntilde (209) */
+#define NXFONT_METRICS_209 {3, 17, 22, 0, 6, 0}
+#define NXFONT_BITMAP_209 {0x1, 0x88, 0x0, 0x3, 0xf0, 0x0, 0x4, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0xf, 0x80, 0x7c, 0x7, 0x0, 0x3e, 0x2, 0x0, 0x3f, 0x2, 0x0, 0x3f, 0x82, 0x0, 0x2f, 0xc2, 0x0, 0x27, 0xe2, 0x0, 0x23, 0xe2, 0x0, 0x21, 0xf2, 0x0, 0x20, 0xfa, 0x0, 0x20, 0x7e, 0x0, 0x20, 0x3e, 0x0, 0x20, 0x1e, 0x0, 0x20, 0xe, 0x0, 0x20, 0xe, 0x0, 0x60, 0x6, 0x0, 0xf8, 0x2, 0x0}
+
+/* Ograve (210) */
+#define NXFONT_METRICS_210 {2, 16, 22, 1, 6, 0}
+#define NXFONT_BITMAP_210 {0x7, 0x0, 0x3, 0x80, 0x1, 0x80, 0x0, 0xc0, 0x0, 0x0, 0x7, 0xe0, 0x1e, 0x78, 0x3c, 0x3c, 0x78, 0x1e, 0x78, 0x1e, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0x78, 0x1e, 0x78, 0x1e, 0x3c, 0x3c, 0x1e, 0x78, 0x7, 0xe0}
+
+/* Oacute (211) */
+#define NXFONT_METRICS_211 {2, 16, 22, 1, 6, 0}
+#define NXFONT_BITMAP_211 {0x0, 0x70, 0x0, 0xe0, 0x0, 0xc0, 0x1, 0x80, 0x0, 0x0, 0x7, 0xe0, 0x1e, 0x78, 0x3c, 0x3c, 0x78, 0x1e, 0x78, 0x1e, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0x78, 0x1e, 0x78, 0x1e, 0x3c, 0x3c, 0x1e, 0x78, 0x7, 0xe0}
+
+/* Ocircumflex (212) */
+#define NXFONT_METRICS_212 {2, 16, 22, 1, 6, 0}
+#define NXFONT_BITMAP_212 {0x1, 0x80, 0x3, 0xc0, 0x6, 0x60, 0x0, 0x0, 0x0, 0x0, 0x7, 0xe0, 0x1e, 0x78, 0x3c, 0x3c, 0x78, 0x1e, 0x78, 0x1e, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0x78, 0x1e, 0x78, 0x1e, 0x3c, 0x3c, 0x1e, 0x78, 0x7, 0xe0}
+
+/* Otilde (213) */
+#define NXFONT_METRICS_213 {2, 16, 22, 1, 6, 0}
+#define NXFONT_BITMAP_213 {0x3, 0x10, 0x7, 0xe0, 0x8, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xe0, 0x1e, 0x78, 0x3c, 0x3c, 0x78, 0x1e, 0x78, 0x1e, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0x78, 0x1e, 0x78, 0x1e, 0x3c, 0x3c, 0x1e, 0x78, 0x7, 0xe0}
+
+/* Odieresis (214) */
+#define NXFONT_METRICS_214 {2, 16, 21, 1, 7, 0}
+#define NXFONT_BITMAP_214 {0xc, 0x60, 0xc, 0x60, 0x0, 0x0, 0x0, 0x0, 0x7, 0xe0, 0x1e, 0x78, 0x3c, 0x3c, 0x78, 0x1e, 0x78, 0x1e, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0x78, 0x1e, 0x78, 0x1e, 0x3c, 0x3c, 0x1e, 0x78, 0x7, 0xe0}
+
+/* multiply (215) */
+#define NXFONT_METRICS_215 {2, 12, 12, 1, 16, 0}
+#define NXFONT_BITMAP_215 {0xc0, 0x30, 0xe0, 0x70, 0x70, 0xe0, 0x39, 0xc0, 0x1f, 0x80, 0xf, 0x0, 0xf, 0x0, 0x1f, 0x80, 0x39, 0xc0, 0x70, 0xe0, 0xe0, 0x70, 0xc0, 0x30}
+
+/* Oslash (216) */
+#define NXFONT_METRICS_216 {2, 16, 19, 1, 10, 0}
+#define NXFONT_BITMAP_216 {0x0, 0x4, 0x7, 0xec, 0x1e, 0x78, 0x38, 0x1c, 0x78, 0x3e, 0x78, 0x3e, 0xf0, 0x6f, 0xf0, 0xcf, 0xf0, 0xcf, 0xf1, 0x8f, 0xf3, 0xf, 0xf3, 0xf, 0xf6, 0xf, 0x7c, 0x1e, 0x7c, 0x1e, 0x38, 0x1c, 0x3e, 0x78, 0x37, 0xe0, 0x60, 0x0}
+
+/* Ugrave (217) */
+#define NXFONT_METRICS_217 {3, 17, 22, 0, 6, 0}
+#define NXFONT_BITMAP_217 {0x3, 0x80, 0x0, 0x1, 0xc0, 0x0, 0x0, 0xc0, 0x0, 0x0, 0x60, 0x0, 0x0, 0x0, 0x0, 0xff, 0xf, 0x80, 0x3e, 0x6, 0x0, 0x3c, 0x2, 0x0, 0x3c, 0x2, 0x0, 0x3c, 0x2, 0x0, 0x3c, 0x2, 0x0, 0x3c, 0x2, 0x0, 0x3c, 0x2, 0x0, 0x3c, 0x2, 0x0, 0x3c, 0x2, 0x0, 0x3c, 0x2, 0x0, 0x3c, 0x2, 0x0, 0x3c, 0x2, 0x0, 0x3c, 0x6, 0x0, 0x1e, 0x4, 0x0, 0x1f, 0x1c, 0x0, 0x7, 0xf8, 0x0}
+
+/* Uacute (218) */
+#define NXFONT_METRICS_218 {3, 17, 22, 0, 6, 0}
+#define NXFONT_BITMAP_218 {0x0, 0x38, 0x0, 0x0, 0x70, 0x0, 0x0, 0x60, 0x0, 0x0, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xf, 0x80, 0x3e, 0x6, 0x0, 0x3c, 0x2, 0x0, 0x3c, 0x2, 0x0, 0x3c, 0x2, 0x0, 0x3c, 0x2, 0x0, 0x3c, 0x2, 0x0, 0x3c, 0x2, 0x0, 0x3c, 0x2, 0x0, 0x3c, 0x2, 0x0, 0x3c, 0x2, 0x0, 0x3c, 0x2, 0x0, 0x3c, 0x2, 0x0, 0x3c, 0x6, 0x0, 0x1e, 0x4, 0x0, 0x1f, 0x1c, 0x0, 0x7, 0xf8, 0x0}
+
+/* Ucircumflex (219) */
+#define NXFONT_METRICS_219 {3, 17, 22, 0, 6, 0}
+#define NXFONT_BITMAP_219 {0x0, 0x60, 0x0, 0x0, 0xf0, 0x0, 0x1, 0x98, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xf, 0x80, 0x3e, 0x6, 0x0, 0x3c, 0x2, 0x0, 0x3c, 0x2, 0x0, 0x3c, 0x2, 0x0, 0x3c, 0x2, 0x0, 0x3c, 0x2, 0x0, 0x3c, 0x2, 0x0, 0x3c, 0x2, 0x0, 0x3c, 0x2, 0x0, 0x3c, 0x2, 0x0, 0x3c, 0x2, 0x0, 0x3c, 0x2, 0x0, 0x3c, 0x6, 0x0, 0x1e, 0x4, 0x0, 0x1f, 0x1c, 0x0, 0x7, 0xf8, 0x0}
+
+/* Udieresis (220) */
+#define NXFONT_METRICS_220 {3, 17, 21, 0, 7, 0}
+#define NXFONT_BITMAP_220 {0x3, 0x18, 0x0, 0x3, 0x18, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xf, 0x80, 0x3e, 0x6, 0x0, 0x3c, 0x2, 0x0, 0x3c, 0x2, 0x0, 0x3c, 0x2, 0x0, 0x3c, 0x2, 0x0, 0x3c, 0x2, 0x0, 0x3c, 0x2, 0x0, 0x3c, 0x2, 0x0, 0x3c, 0x2, 0x0, 0x3c, 0x2, 0x0, 0x3c, 0x2, 0x0, 0x3c, 0x2, 0x0, 0x3c, 0x6, 0x0, 0x1e, 0x4, 0x0, 0x1f, 0x1c, 0x0, 0x7, 0xf8, 0x0}
+
+/* Yacute (221) */
+#define NXFONT_METRICS_221 {3, 18, 23, 0, 5, 0}
+#define NXFONT_BITMAP_221 {0x0, 0xe, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x18, 0x0, 0x0, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x8f, 0xc0, 0x3e, 0x3, 0x0, 0x1e, 0x2, 0x0, 0xf, 0x6, 0x0, 0xf, 0xc, 0x0, 0x7, 0x8c, 0x0, 0x7, 0x98, 0x0, 0x3, 0xd0, 0x0, 0x3, 0xf0, 0x0, 0x1, 0xe0, 0x0, 0x1, 0xe0, 0x0, 0x1, 0xe0, 0x0, 0x1, 0xe0, 0x0, 0x1, 0xe0, 0x0, 0x1, 0xe0, 0x0, 0x1, 0xe0, 0x0, 0x7, 0xf8, 0x0}
+
+/* Thorn (222) */
+#define NXFONT_METRICS_222 {2, 14, 17, 0, 11, 0}
+#define NXFONT_BITMAP_222 {0xff, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3f, 0xe0, 0x3c, 0x78, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x78, 0x3f, 0xe0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0xff, 0x0}
+
+/* germandbls (223) */
+#define NXFONT_METRICS_223 {2, 11, 17, 1, 11, 0}
+#define NXFONT_BITMAP_223 {0x1f, 0x0, 0x39, 0x80, 0x71, 0xc0, 0x71, 0xc0, 0x71, 0xc0, 0x71, 0xc0, 0x73, 0x80, 0x77, 0x0, 0x73, 0x80, 0x71, 0xc0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xc0, 0xf3, 0x80}
+
+/* agrave (224) */
+#define NXFONT_METRICS_224 {2, 10, 17, 1, 11, 0}
+#define NXFONT_BITMAP_224 {0x38, 0x0, 0x1c, 0x0, 0xc, 0x0, 0x6, 0x0, 0x0, 0x0, 0x3e, 0x0, 0x77, 0x0, 0xe3, 0x80, 0xe3, 0x80, 0x43, 0x80, 0xf, 0x80, 0x73, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe7, 0x80, 0xff, 0xc0, 0x71, 0x80}
+
+/* aacute (225) */
+#define NXFONT_METRICS_225 {2, 10, 17, 1, 11, 0}
+#define NXFONT_BITMAP_225 {0xe, 0x0, 0x1c, 0x0, 0x18, 0x0, 0x30, 0x0, 0x0, 0x0, 0x3e, 0x0, 0x77, 0x0, 0xe3, 0x80, 0xe3, 0x80, 0x43, 0x80, 0xf, 0x80, 0x73, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe7, 0x80, 0xff, 0xc0, 0x71, 0x80}
+
+/* acircumflex (226) */
+#define NXFONT_METRICS_226 {2, 10, 17, 1, 11, 0}
+#define NXFONT_BITMAP_226 {0xc, 0x0, 0x1e, 0x0, 0x33, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e, 0x0, 0x77, 0x0, 0xe3, 0x80, 0xe3, 0x80, 0x43, 0x80, 0xf, 0x80, 0x73, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe7, 0x80, 0xff, 0xc0, 0x71, 0x80}
+
+/* atilde (227) */
+#define NXFONT_METRICS_227 {2, 10, 17, 1, 11, 0}
+#define NXFONT_BITMAP_227 {0x18, 0x80, 0x3f, 0x0, 0x46, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e, 0x0, 0x77, 0x0, 0xe3, 0x80, 0xe3, 0x80, 0x43, 0x80, 0xf, 0x80, 0x73, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe7, 0x80, 0xff, 0xc0, 0x71, 0x80}
+
+/* adieresis (228) */
+#define NXFONT_METRICS_228 {2, 10, 16, 1, 12, 0}
+#define NXFONT_BITMAP_228 {0x33, 0x0, 0x33, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e, 0x0, 0x77, 0x0, 0xe3, 0x80, 0xe3, 0x80, 0x43, 0x80, 0xf, 0x80, 0x73, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe7, 0x80, 0xff, 0xc0, 0x71, 0x80}
+
+/* aring (229) */
+#define NXFONT_METRICS_229 {2, 10, 18, 1, 10, 0}
+#define NXFONT_BITMAP_229 {0xc, 0x0, 0x1e, 0x0, 0x33, 0x0, 0x33, 0x0, 0x1e, 0x0, 0xc, 0x0, 0x3e, 0x0, 0x77, 0x0, 0xe3, 0x80, 0xe3, 0x80, 0x43, 0x80, 0xf, 0x80, 0x73, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe7, 0x80, 0xff, 0xc0, 0x71, 0x80}
+
+/* ae (230) */
+#define NXFONT_METRICS_230 {2, 15, 12, 1, 16, 0}
+#define NXFONT_BITMAP_230 {0x3e, 0x78, 0x77, 0xcc, 0xe3, 0xce, 0x63, 0x8e, 0x3, 0x8e, 0x1f, 0xfe, 0x73, 0x80, 0xe3, 0x80, 0xe3, 0xc0, 0xe7, 0xe2, 0xfe, 0xfc, 0x7c, 0x78}
+
+/* ccedilla (231) */
+#define NXFONT_METRICS_231 {2, 9, 18, 1, 16, 0}
+#define NXFONT_BITMAP_231 {0x1e, 0x0, 0x73, 0x0, 0x73, 0x80, 0xe3, 0x80, 0xe1, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xf0, 0x0, 0x78, 0x80, 0x7f, 0x0, 0x1e, 0x0, 0x8, 0x0, 0x18, 0x0, 0x1c, 0x0, 0x6, 0x0, 0x46, 0x0, 0x3c, 0x0}
+
+/* egrave (232) */
+#define NXFONT_METRICS_232 {2, 9, 17, 1, 11, 0}
+#define NXFONT_BITMAP_232 {0x38, 0x0, 0x1c, 0x0, 0xc, 0x0, 0x6, 0x0, 0x0, 0x0, 0x1e, 0x0, 0x73, 0x0, 0x73, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xff, 0x80, 0xe0, 0x0, 0xe0, 0x0, 0xf0, 0x0, 0x78, 0x80, 0x7f, 0x0, 0x1e, 0x0}
+
+/* eacute (233) */
+#define NXFONT_METRICS_233 {2, 9, 17, 1, 11, 0}
+#define NXFONT_BITMAP_233 {0xe, 0x0, 0x1c, 0x0, 0x18, 0x0, 0x30, 0x0, 0x0, 0x0, 0x1e, 0x0, 0x73, 0x0, 0x73, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xff, 0x80, 0xe0, 0x0, 0xe0, 0x0, 0xf0, 0x0, 0x78, 0x80, 0x7f, 0x0, 0x1e, 0x0}
+
+/* ecircumflex (234) */
+#define NXFONT_METRICS_234 {2, 9, 17, 1, 11, 0}
+#define NXFONT_BITMAP_234 {0x18, 0x0, 0x3c, 0x0, 0x66, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1e, 0x0, 0x73, 0x0, 0x73, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xff, 0x80, 0xe0, 0x0, 0xe0, 0x0, 0xf0, 0x0, 0x78, 0x80, 0x7f, 0x0, 0x1e, 0x0}
+
+/* edieresis (235) */
+#define NXFONT_METRICS_235 {2, 9, 16, 1, 12, 0}
+#define NXFONT_BITMAP_235 {0x33, 0x0, 0x33, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1e, 0x0, 0x73, 0x0, 0x73, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xff, 0x80, 0xe0, 0x0, 0xe0, 0x0, 0xf0, 0x0, 0x78, 0x80, 0x7f, 0x0, 0x1e, 0x0}
+
+/* igrave (236) */
+#define NXFONT_METRICS_236 {1, 5, 17, 1, 11, 0}
+#define NXFONT_BITMAP_236 {0xe0, 0x70, 0x30, 0x18, 0x0, 0xf0, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0xf8}
+
+/* iacute (237) */
+#define NXFONT_METRICS_237 {1, 6, 17, 1, 11, 0}
+#define NXFONT_BITMAP_237 {0x1c, 0x38, 0x30, 0x60, 0x0, 0xf0, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0xf8}
+
+/* icircumflex (238) */
+#define NXFONT_METRICS_238 {1, 6, 17, 1, 11, 0}
+#define NXFONT_BITMAP_238 {0x30, 0x78, 0xcc, 0x0, 0x0, 0xf0, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0xf8}
+
+/* idieresis (239) */
+#define NXFONT_METRICS_239 {1, 6, 16, 1, 12, 0}
+#define NXFONT_BITMAP_239 {0xcc, 0xcc, 0x0, 0x0, 0xf0, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0xf8}
+
+/* eth (240) */
+#define NXFONT_METRICS_240 {2, 11, 17, 1, 11, 0}
+#define NXFONT_BITMAP_240 {0x60, 0x0, 0x38, 0xc0, 0xf, 0x0, 0x1e, 0x0, 0x63, 0x0, 0x1f, 0x80, 0x7b, 0xc0, 0x71, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0x71, 0xc0, 0x7b, 0xc0, 0x1f, 0x0}
+
+/* ntilde (241) */
+#define NXFONT_METRICS_241 {2, 12, 17, 1, 11, 0}
+#define NXFONT_BITMAP_241 {0xc, 0x40, 0x1f, 0x80, 0x23, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf3, 0xc0, 0x77, 0xe0, 0x78, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0xf9, 0xf0}
+
+/* ograve (242) */
+#define NXFONT_METRICS_242 {2, 11, 17, 1, 11, 0}
+#define NXFONT_BITMAP_242 {0x1c, 0x0, 0xe, 0x0, 0x6, 0x0, 0x3, 0x0, 0x0, 0x0, 0x1f, 0x0, 0x7b, 0xc0, 0x71, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0x71, 0xc0, 0x7b, 0xc0, 0x1f, 0x0}
+
+/* oacute (243) */
+#define NXFONT_METRICS_243 {2, 11, 17, 1, 11, 0}
+#define NXFONT_BITMAP_243 {0x3, 0x80, 0x7, 0x0, 0x6, 0x0, 0xc, 0x0, 0x0, 0x0, 0x1f, 0x0, 0x7b, 0xc0, 0x71, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0x71, 0xc0, 0x7b, 0xc0, 0x1f, 0x0}
+
+/* ocircumflex (244) */
+#define NXFONT_METRICS_244 {2, 11, 17, 1, 11, 0}
+#define NXFONT_BITMAP_244 {0xc, 0x0, 0x1e, 0x0, 0x33, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x0, 0x7b, 0xc0, 0x71, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0x71, 0xc0, 0x7b, 0xc0, 0x1f, 0x0}
+
+/* otilde (245) */
+#define NXFONT_METRICS_245 {2, 11, 17, 1, 11, 0}
+#define NXFONT_BITMAP_245 {0x18, 0x80, 0x3f, 0x0, 0x46, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x0, 0x7b, 0xc0, 0x71, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0x71, 0xc0, 0x7b, 0xc0, 0x1f, 0x0}
+
+/* odieresis (246) */
+#define NXFONT_METRICS_246 {2, 11, 16, 1, 12, 0}
+#define NXFONT_BITMAP_246 {0x31, 0x80, 0x31, 0x80, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x0, 0x7b, 0xc0, 0x71, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0x71, 0xc0, 0x7b, 0xc0, 0x1f, 0x0}
+
+/* divide (247) */
+#define NXFONT_METRICS_247 {2, 12, 12, 1, 16, 0}
+#define NXFONT_BITMAP_247 {0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xf0, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0}
+
+/* oslash (248) */
+#define NXFONT_METRICS_248 {2, 11, 16, 1, 14, 0}
+#define NXFONT_BITMAP_248 {0x0, 0x40, 0x0, 0x40, 0x1e, 0x80, 0x79, 0xc0, 0x71, 0xc0, 0xe2, 0xe0, 0xe2, 0xe0, 0xe4, 0xe0, 0xe4, 0xe0, 0xe8, 0xe0, 0xe8, 0xe0, 0x71, 0xc0, 0x7b, 0xc0, 0x3f, 0x0, 0x40, 0x0, 0x40, 0x0}
+
+/* ugrave (249) */
+#define NXFONT_METRICS_249 {2, 12, 17, 1, 11, 0}
+#define NXFONT_BITMAP_249 {0x1c, 0x0, 0xe, 0x0, 0x6, 0x0, 0x3, 0x0, 0x0, 0x0, 0xf1, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x71, 0xe0, 0x7e, 0xf0, 0x3c, 0xe0}
+
+/* uacute (250) */
+#define NXFONT_METRICS_250 {2, 12, 17, 1, 11, 0}
+#define NXFONT_BITMAP_250 {0x7, 0x0, 0xe, 0x0, 0xc, 0x0, 0x18, 0x0, 0x0, 0x0, 0xf1, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x71, 0xe0, 0x7e, 0xf0, 0x3c, 0xe0}
+
+/* ucircumflex (251) */
+#define NXFONT_METRICS_251 {2, 12, 17, 1, 11, 0}
+#define NXFONT_BITMAP_251 {0x6, 0x0, 0xf, 0x0, 0x19, 0x80, 0x0, 0x0, 0x0, 0x0, 0xf1, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x71, 0xe0, 0x7e, 0xf0, 0x3c, 0xe0}
+
+/* udieresis (252) */
+#define NXFONT_METRICS_252 {2, 12, 16, 1, 12, 0}
+#define NXFONT_BITMAP_252 {0x19, 0x80, 0x19, 0x80, 0x0, 0x0, 0x0, 0x0, 0xf1, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x70, 0xe0, 0x71, 0xe0, 0x7e, 0xf0, 0x3c, 0xe0}
+
+/* yacute (253) */
+#define NXFONT_METRICS_253 {2, 12, 22, 0, 11, 0}
+#define NXFONT_BITMAP_253 {0x1, 0xc0, 0x3, 0x80, 0x3, 0x0, 0x6, 0x0, 0x0, 0x0, 0xfd, 0xf0, 0x78, 0x60, 0x38, 0x40, 0x38, 0xc0, 0x3c, 0x80, 0x1c, 0x80, 0x1d, 0x80, 0x1f, 0x0, 0xf, 0x0, 0xf, 0x0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0x64, 0x0, 0xec, 0x0, 0xf8, 0x0, 0x70, 0x0}
+
+/* thorn (254) */
+#define NXFONT_METRICS_254 {2, 12, 22, 1, 11, 0}
+#define NXFONT_BITMAP_254 {0xf0, 0x0, 0x70, 0x0, 0x70, 0x0, 0x70, 0x0, 0x70, 0x0, 0x73, 0x80, 0x77, 0xe0, 0x7c, 0xe0, 0x78, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x78, 0xe0, 0x77, 0xe0, 0x73, 0x80, 0x70, 0x0, 0x70, 0x0, 0x70, 0x0, 0x70, 0x0, 0xfc, 0x0}
+
+/* ydieresis (255) */
+#define NXFONT_METRICS_255 {2, 12, 21, 0, 12, 0}
+#define NXFONT_BITMAP_255 {0x19, 0x80, 0x19, 0x80, 0x0, 0x0, 0x0, 0x0, 0xfd, 0xf0, 0x78, 0x60, 0x38, 0x40, 0x38, 0xc0, 0x3c, 0x80, 0x1c, 0x80, 0x1d, 0x80, 0x1f, 0x0, 0xf, 0x0, 0xf, 0x0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0x64, 0x0, 0xec, 0x0, 0xf8, 0x0, 0x70, 0x0}
+
+/****************************************************************************
+ * Public Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+#define EXTERN extern "C"
+extern "C" {
+#else
+#define EXTERN extern
+#endif
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* __GRAPHICS_NXFONTS_NXFONTS_SERIF27X38B_H */
diff --git a/nuttx/graphics/nxfonts/nxfonts_serif29x37.h b/nuttx/graphics/nxfonts/nxfonts_serif29x37.h
new file mode 100755
index 000000000..11215e44e
--- /dev/null
+++ b/nuttx/graphics/nxfonts/nxfonts_serif29x37.h
@@ -0,0 +1,849 @@
+/****************************************************************************
+ * graphics/nxfonts/nxfonts_serif29x37.h
+ *
+ * Copyright (C) 2011-2012 NX Engineering, S.A., All rights reserved.
+ * Author: Jose Pablo Carballo Gomez <jcarballo@nx-engineering.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT}
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING}
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+#ifndef __GRAPHICS_NXFONTS_NXFONTS_SERIF29X37_H
+#define __GRAPHICS_NXFONTS_NXFONTS_SERIF29X37_H
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/* Font ID */
+
+#define NXFONT_ID FONTID_SERIF29X37
+
+/* Ranges of 7-bit and 8-bit fonts */
+
+#define NXFONT_MIN7BIT 33
+#define NXFONT_MAX7BIT 126
+
+#define NXFONT_MIN8BIT 161
+#define NXFONT_MAX8BIT 255
+
+/* Maximum height and width of any glyph in the set */
+
+#define NXFONT_MAXHEIGHT 37
+#define NXFONT_MAXWIDTH 29
+
+/* The width of a space */
+
+#define NXFONT_SPACEWIDTH 6
+
+/* exclam (33) */
+#define NXFONT_METRICS_33 {1, 3, 17, 3, 11, 0}
+#define NXFONT_BITMAP_33 {0x40, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0x40, 0x40, 0x40, 0x40, 0x0, 0x0, 0x0, 0xc0, 0xc0}
+
+/* quotedbl (34) */
+#define NXFONT_METRICS_34 {1, 6, 5, 1, 11, 0}
+#define NXFONT_BITMAP_34 {0xcc, 0xcc, 0xcc, 0xcc, 0x88}
+
+/* numbersign (35) */
+#define NXFONT_METRICS_35 {2, 11, 17, 1, 11, 0}
+#define NXFONT_BITMAP_35 {0x8, 0x80, 0x8, 0x80, 0x8, 0x80, 0x8, 0x80, 0x8, 0x80, 0x7f, 0xe0, 0x7f, 0xe0, 0x11, 0x0, 0x11, 0x0, 0x11, 0x0, 0xff, 0xc0, 0xff, 0xc0, 0x22, 0x0, 0x22, 0x0, 0x22, 0x0, 0x22, 0x0, 0x22, 0x0}
+
+/* dollar (36) */
+#define NXFONT_METRICS_36 {2, 11, 21, 0, 9, 0}
+#define NXFONT_BITMAP_36 {0x4, 0x0, 0x4, 0x0, 0x3f, 0x0, 0x65, 0xc0, 0xc4, 0xc0, 0xc4, 0x40, 0xc4, 0x40, 0xe4, 0x0, 0x7c, 0x0, 0x1e, 0x0, 0x7, 0x80, 0x5, 0xc0, 0x4, 0xe0, 0x4, 0x60, 0x84, 0x60, 0x84, 0x60, 0xc4, 0xc0, 0xe5, 0xc0, 0x3f, 0x0, 0x4, 0x0, 0x4, 0x0}
+
+/* percent (37) */
+#define NXFONT_METRICS_37 {3, 17, 16, 1, 12, 0}
+#define NXFONT_BITMAP_37 {0x1e, 0xc, 0x0, 0x33, 0xfc, 0x0, 0x61, 0x18, 0x0, 0xc1, 0x10, 0x0, 0xc1, 0x30, 0x0, 0xc2, 0x60, 0x0, 0xe4, 0x40, 0x0, 0x78, 0xc0, 0x0, 0x1, 0x8f, 0x0, 0x1, 0x19, 0x80, 0x3, 0x30, 0x80, 0x6, 0x60, 0x80, 0x4, 0x60, 0x80, 0xc, 0x61, 0x0, 0x18, 0x72, 0x0, 0x10, 0x3c, 0x0}
+
+/* ampersand (38) */
+#define NXFONT_METRICS_38 {3, 17, 17, 1, 11, 0}
+#define NXFONT_BITMAP_38 {0x7, 0xc0, 0x0, 0x8, 0x60, 0x0, 0x18, 0x20, 0x0, 0x18, 0x20, 0x0, 0x18, 0x60, 0x0, 0xc, 0xc0, 0x0, 0xf, 0x9e, 0x0, 0x7, 0xc, 0x0, 0xf, 0x8, 0x0, 0x33, 0x88, 0x0, 0x61, 0x90, 0x0, 0xc0, 0xd0, 0x0, 0xc0, 0xe0, 0x0, 0xc0, 0x60, 0x0, 0xe0, 0xf0, 0x80, 0x7f, 0xbf, 0x0, 0x3e, 0xe, 0x0}
+
+/* quotesingle (39) */
+#define NXFONT_METRICS_39 {1, 2, 5, 2, 11, 0}
+#define NXFONT_BITMAP_39 {0xc0, 0xc0, 0xc0, 0xc0, 0x80}
+
+/* parenleft (40) */
+#define NXFONT_METRICS_40 {1, 6, 22, 1, 11, 0}
+#define NXFONT_BITMAP_40 {0x4, 0x8, 0x10, 0x30, 0x20, 0x60, 0x60, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x60, 0x60, 0x20, 0x30, 0x10, 0x8, 0x4}
+
+/* parenright (41) */
+#define NXFONT_METRICS_41 {1, 6, 22, 1, 11, 0}
+#define NXFONT_BITMAP_41 {0x80, 0x40, 0x20, 0x30, 0x10, 0x18, 0x18, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0x18, 0x18, 0x10, 0x30, 0x20, 0x40, 0x80}
+
+/* asterisk (42) */
+#define NXFONT_METRICS_42 {2, 9, 9, 2, 11, 0}
+#define NXFONT_BITMAP_42 {0x1c, 0x0, 0x1c, 0x0, 0xc9, 0x80, 0xeb, 0x80, 0x1c, 0x0, 0xeb, 0x80, 0xc9, 0x80, 0x1c, 0x0, 0x1c, 0x0}
+
+/* plus (43) */
+#define NXFONT_METRICS_43 {2, 12, 12, 0, 16, 0}
+#define NXFONT_BITMAP_43 {0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0xff, 0xf0, 0xff, 0xf0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0}
+
+/* comma (44) */
+#define NXFONT_METRICS_44 {1, 3, 5, 2, 26, 0}
+#define NXFONT_BITMAP_44 {0xc0, 0xe0, 0x20, 0x60, 0xc0}
+
+/* hyphen (45) */
+#define NXFONT_METRICS_45 {1, 6, 2, 0, 21, 0}
+#define NXFONT_BITMAP_45 {0xfc, 0xfc}
+
+/* period (46) */
+#define NXFONT_METRICS_46 {1, 2, 2, 2, 26, 0}
+#define NXFONT_BITMAP_46 {0xc0, 0xc0}
+
+/* slash (47) */
+#define NXFONT_METRICS_47 {2, 9, 21, 0, 11, 0}
+#define NXFONT_BITMAP_47 {0x1, 0x80, 0x1, 0x80, 0x1, 0x0, 0x3, 0x0, 0x3, 0x0, 0x2, 0x0, 0x6, 0x0, 0x6, 0x0, 0x4, 0x0, 0xc, 0x0, 0xc, 0x0, 0x8, 0x0, 0x18, 0x0, 0x18, 0x0, 0x10, 0x0, 0x30, 0x0, 0x30, 0x0, 0x60, 0x0, 0x60, 0x0, 0x40, 0x0, 0xc0, 0x0}
+
+/* zero (48) */
+#define NXFONT_METRICS_48 {2, 10, 17, 1, 11, 0}
+#define NXFONT_BITMAP_48 {0x1e, 0x0, 0x33, 0x0, 0x61, 0x80, 0x61, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xe1, 0xc0, 0x61, 0x80, 0x61, 0x80, 0x33, 0x0, 0x1e, 0x0}
+
+/* one (49) */
+#define NXFONT_METRICS_49 {1, 8, 17, 2, 11, 0}
+#define NXFONT_BITMAP_49 {0x8, 0x18, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff}
+
+/* two (50) */
+#define NXFONT_METRICS_50 {2, 10, 17, 1, 11, 0}
+#define NXFONT_BITMAP_50 {0x1c, 0x0, 0x7f, 0x0, 0x43, 0x80, 0x81, 0x80, 0x81, 0x80, 0x1, 0x80, 0x1, 0x80, 0x3, 0x0, 0x3, 0x0, 0x6, 0x0, 0x4, 0x0, 0xc, 0x0, 0x18, 0x0, 0x30, 0x0, 0x60, 0x40, 0xff, 0xc0, 0xff, 0x80}
+
+/* three (51) */
+#define NXFONT_METRICS_51 {2, 9, 17, 1, 11, 0}
+#define NXFONT_BITMAP_51 {0x1c, 0x0, 0x7e, 0x0, 0x47, 0x0, 0x83, 0x0, 0x83, 0x0, 0x6, 0x0, 0xc, 0x0, 0x1e, 0x0, 0x7, 0x0, 0x3, 0x80, 0x1, 0x80, 0x1, 0x80, 0x1, 0x80, 0x1, 0x0, 0xc3, 0x0, 0xe6, 0x0, 0x78, 0x0}
+
+/* four (52) */
+#define NXFONT_METRICS_52 {2, 10, 17, 1, 11, 0}
+#define NXFONT_BITMAP_52 {0x3, 0x0, 0x7, 0x0, 0x7, 0x0, 0xb, 0x0, 0x1b, 0x0, 0x13, 0x0, 0x33, 0x0, 0x23, 0x0, 0x63, 0x0, 0x43, 0x0, 0xc3, 0x0, 0xff, 0xc0, 0xff, 0xc0, 0x3, 0x0, 0x3, 0x0, 0x3, 0x0, 0x3, 0x0}
+
+/* five (53) */
+#define NXFONT_METRICS_53 {2, 10, 17, 1, 11, 0}
+#define NXFONT_BITMAP_53 {0x1f, 0xc0, 0x1f, 0x80, 0x20, 0x0, 0x20, 0x0, 0x60, 0x0, 0x78, 0x0, 0x7e, 0x0, 0xf, 0x80, 0x3, 0x80, 0x1, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0xc1, 0x80, 0xe3, 0x80, 0x7e, 0x0}
+
+/* six (54) */
+#define NXFONT_METRICS_54 {2, 10, 17, 1, 11, 0}
+#define NXFONT_BITMAP_54 {0x3, 0xc0, 0xe, 0x0, 0x18, 0x0, 0x30, 0x0, 0x70, 0x0, 0x60, 0x0, 0xee, 0x0, 0xf3, 0x80, 0xc1, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xe0, 0xc0, 0x61, 0x80, 0x7b, 0x80, 0x1e, 0x0}
+
+/* seven (55) */
+#define NXFONT_METRICS_55 {2, 10, 17, 1, 11, 0}
+#define NXFONT_BITMAP_55 {0x7f, 0xc0, 0xff, 0xc0, 0xc0, 0xc0, 0x81, 0x80, 0x1, 0x80, 0x1, 0x0, 0x3, 0x0, 0x3, 0x0, 0x2, 0x0, 0x6, 0x0, 0x6, 0x0, 0x4, 0x0, 0xc, 0x0, 0xc, 0x0, 0xc, 0x0, 0x18, 0x0, 0x18, 0x0}
+
+/* eight (56) */
+#define NXFONT_METRICS_56 {2, 10, 17, 1, 11, 0}
+#define NXFONT_BITMAP_56 {0x1e, 0x0, 0x33, 0x0, 0x61, 0x80, 0x61, 0x80, 0x61, 0x80, 0x73, 0x0, 0x3e, 0x0, 0x1e, 0x0, 0x3f, 0x0, 0x63, 0x80, 0x41, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xe1, 0x80, 0x73, 0x80, 0x1e, 0x0}
+
+/* nine (57) */
+#define NXFONT_METRICS_57 {2, 10, 17, 1, 11, 0}
+#define NXFONT_BITMAP_57 {0x1e, 0x0, 0x77, 0x80, 0x61, 0x80, 0xc1, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x61, 0xc0, 0x73, 0xc0, 0x1d, 0x80, 0x1, 0x80, 0x3, 0x80, 0x3, 0x0, 0x6, 0x0, 0x1c, 0x0, 0xf0, 0x0}
+
+/* colon (58) */
+#define NXFONT_METRICS_58 {1, 2, 11, 2, 17, 0}
+#define NXFONT_BITMAP_58 {0xc0, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc0, 0xc0}
+
+/* semicolon (59) */
+#define NXFONT_METRICS_59 {1, 3, 14, 2, 17, 0}
+#define NXFONT_BITMAP_59 {0xc0, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc0, 0xe0, 0x20, 0x60, 0xc0}
+
+/* less (60) */
+#define NXFONT_METRICS_60 {2, 11, 11, 1, 17, 0}
+#define NXFONT_BITMAP_60 {0x0, 0x60, 0x1, 0xc0, 0x7, 0x0, 0x1c, 0x0, 0x70, 0x0, 0xc0, 0x0, 0x70, 0x0, 0x1c, 0x0, 0x7, 0x0, 0x1, 0xc0, 0x0, 0x60}
+
+/* equal (61) */
+#define NXFONT_METRICS_61 {2, 9, 5, 2, 20, 0}
+#define NXFONT_BITMAP_61 {0xff, 0x80, 0xff, 0x80, 0x0, 0x0, 0xff, 0x80, 0xff, 0x80}
+
+/* greater (62) */
+#define NXFONT_METRICS_62 {2, 11, 11, 1, 17, 0}
+#define NXFONT_BITMAP_62 {0xc0, 0x0, 0x70, 0x0, 0x1c, 0x0, 0x7, 0x0, 0x1, 0xc0, 0x0, 0x60, 0x1, 0xc0, 0x7, 0x0, 0x1c, 0x0, 0x70, 0x0, 0xc0, 0x0}
+
+/* question (63) */
+#define NXFONT_METRICS_63 {1, 8, 17, 2, 11, 0}
+#define NXFONT_BITMAP_63 {0x7c, 0xc6, 0x83, 0xc3, 0xc3, 0x7, 0xe, 0xc, 0x1c, 0x18, 0x18, 0x10, 0x10, 0x0, 0x0, 0x30, 0x30}
+
+/* at (64) */
+#define NXFONT_METRICS_64 {3, 18, 20, 2, 11, 0}
+#define NXFONT_BITMAP_64 {0x3, 0xf8, 0x0, 0xf, 0xe, 0x0, 0x1c, 0x3, 0x0, 0x38, 0x1, 0x80, 0x70, 0x0, 0x80, 0x60, 0xec, 0xc0, 0xe1, 0xfc, 0x40, 0xc3, 0x8c, 0x40, 0xc3, 0xc, 0x40, 0xc6, 0xc, 0x40, 0xc6, 0x18, 0x40, 0xc6, 0x18, 0xc0, 0xc6, 0x18, 0x80, 0xc6, 0x39, 0x80, 0x63, 0x7b, 0x0, 0x61, 0xde, 0x0, 0x30, 0x0, 0x0, 0x18, 0x0, 0x0, 0xe, 0xc, 0x0, 0x3, 0xf0, 0x0}
+
+/* A (65) */
+#define NXFONT_METRICS_65 {3, 17, 17, 0, 11, 0}
+#define NXFONT_BITMAP_65 {0x0, 0x80, 0x0, 0x1, 0xc0, 0x0, 0x1, 0xc0, 0x0, 0x1, 0x60, 0x0, 0x2, 0x60, 0x0, 0x2, 0x30, 0x0, 0x6, 0x30, 0x0, 0x4, 0x30, 0x0, 0x4, 0x18, 0x0, 0xc, 0x18, 0x0, 0xf, 0xf8, 0x0, 0x8, 0xc, 0x0, 0x18, 0xc, 0x0, 0x10, 0xc, 0x0, 0x10, 0x6, 0x0, 0x30, 0x6, 0x0, 0xfc, 0x1f, 0x80}
+
+/* B (66) */
+#define NXFONT_METRICS_66 {2, 14, 17, 1, 11, 0}
+#define NXFONT_BITMAP_66 {0xff, 0xc0, 0x30, 0x70, 0x30, 0x30, 0x30, 0x18, 0x30, 0x18, 0x30, 0x18, 0x30, 0x30, 0x30, 0x40, 0x3f, 0xe0, 0x30, 0x38, 0x30, 0x18, 0x30, 0xc, 0x30, 0xc, 0x30, 0xc, 0x30, 0x18, 0x30, 0x78, 0xff, 0xe0}
+
+/* C (67) */
+#define NXFONT_METRICS_67 {2, 14, 17, 1, 11, 0}
+#define NXFONT_BITMAP_67 {0x7, 0xe4, 0x1c, 0x3c, 0x38, 0xc, 0x60, 0x4, 0x60, 0x4, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0x60, 0x0, 0x60, 0x4, 0x38, 0x8, 0x1e, 0x38, 0x7, 0xe0}
+
+/* D (68) */
+#define NXFONT_METRICS_68 {2, 15, 17, 1, 11, 0}
+#define NXFONT_BITMAP_68 {0xff, 0xc0, 0x30, 0x70, 0x30, 0x38, 0x30, 0xc, 0x30, 0xc, 0x30, 0x6, 0x30, 0x6, 0x30, 0x6, 0x30, 0x6, 0x30, 0x6, 0x30, 0x6, 0x30, 0x6, 0x30, 0xc, 0x30, 0xc, 0x30, 0x38, 0x30, 0x70, 0xff, 0xc0}
+
+/* E (69) */
+#define NXFONT_METRICS_69 {2, 13, 17, 1, 11, 0}
+#define NXFONT_BITMAP_69 {0xff, 0xf0, 0x30, 0x30, 0x30, 0x10, 0x30, 0x10, 0x30, 0x0, 0x30, 0x0, 0x30, 0x40, 0x30, 0x40, 0x3f, 0xc0, 0x30, 0x40, 0x30, 0x40, 0x30, 0x0, 0x30, 0x0, 0x30, 0x8, 0x30, 0x8, 0x30, 0x18, 0xff, 0xf8}
+
+/* F (70) */
+#define NXFONT_METRICS_70 {2, 12, 17, 1, 11, 0}
+#define NXFONT_BITMAP_70 {0xff, 0xf0, 0x30, 0x30, 0x30, 0x10, 0x30, 0x10, 0x30, 0x0, 0x30, 0x0, 0x30, 0x20, 0x30, 0x20, 0x3f, 0xe0, 0x30, 0x20, 0x30, 0x20, 0x30, 0x0, 0x30, 0x0, 0x30, 0x0, 0x30, 0x0, 0x30, 0x0, 0xfc, 0x0}
+
+/* G (71) */
+#define NXFONT_METRICS_71 {2, 16, 17, 1, 11, 0}
+#define NXFONT_BITMAP_71 {0x7, 0xe4, 0x1c, 0x3c, 0x38, 0xc, 0x60, 0x4, 0x60, 0x4, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x3f, 0xc0, 0xc, 0xc0, 0xc, 0x60, 0xc, 0x60, 0xc, 0x38, 0x1c, 0x1e, 0x38, 0x7, 0xe0}
+
+/* H (72) */
+#define NXFONT_METRICS_72 {3, 17, 17, 1, 11, 0}
+#define NXFONT_BITMAP_72 {0xfc, 0x1f, 0x80, 0x30, 0x6, 0x0, 0x30, 0x6, 0x0, 0x30, 0x6, 0x0, 0x30, 0x6, 0x0, 0x30, 0x6, 0x0, 0x30, 0x6, 0x0, 0x30, 0x6, 0x0, 0x3f, 0xfe, 0x0, 0x30, 0x6, 0x0, 0x30, 0x6, 0x0, 0x30, 0x6, 0x0, 0x30, 0x6, 0x0, 0x30, 0x6, 0x0, 0x30, 0x6, 0x0, 0x30, 0x6, 0x0, 0xfc, 0x1f, 0x80}
+
+/* I (73) */
+#define NXFONT_METRICS_73 {1, 6, 17, 1, 11, 0}
+#define NXFONT_BITMAP_73 {0xfc, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0xfc}
+
+/* J (74) */
+#define NXFONT_METRICS_74 {2, 9, 17, 1, 11, 0}
+#define NXFONT_BITMAP_74 {0x1f, 0x80, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0xc6, 0x0, 0xcc, 0x0, 0x78, 0x0}
+
+/* K (75) */
+#define NXFONT_METRICS_75 {2, 16, 17, 1, 11, 0}
+#define NXFONT_BITMAP_75 {0xfc, 0x7e, 0x30, 0x18, 0x30, 0x30, 0x30, 0x60, 0x30, 0xc0, 0x31, 0x80, 0x33, 0x0, 0x3e, 0x0, 0x3f, 0x0, 0x33, 0x80, 0x31, 0xc0, 0x30, 0xe0, 0x30, 0x70, 0x30, 0x38, 0x30, 0x1c, 0x30, 0xe, 0xfc, 0x1f}
+
+/* L (76) */
+#define NXFONT_METRICS_76 {2, 13, 17, 1, 11, 0}
+#define NXFONT_BITMAP_76 {0xfc, 0x0, 0x30, 0x0, 0x30, 0x0, 0x30, 0x0, 0x30, 0x0, 0x30, 0x0, 0x30, 0x0, 0x30, 0x0, 0x30, 0x0, 0x30, 0x0, 0x30, 0x0, 0x30, 0x0, 0x30, 0x0, 0x30, 0x8, 0x30, 0x8, 0x30, 0x18, 0xff, 0xf8}
+
+/* M (77) */
+#define NXFONT_METRICS_77 {3, 21, 17, 1, 11, 0}
+#define NXFONT_BITMAP_77 {0xf0, 0x0, 0xf8, 0x30, 0x0, 0xe0, 0x38, 0x1, 0x60, 0x38, 0x1, 0x60, 0x2c, 0x2, 0x60, 0x2c, 0x2, 0x60, 0x26, 0x2, 0x60, 0x26, 0x4, 0x60, 0x23, 0x4, 0x60, 0x23, 0x8, 0x60, 0x21, 0x88, 0x60, 0x21, 0x88, 0x60, 0x20, 0xd0, 0x60, 0x20, 0xd0, 0x60, 0x20, 0x60, 0x60, 0x20, 0x60, 0x60, 0xf8, 0x61, 0xf8}
+
+/* N (78) */
+#define NXFONT_METRICS_78 {2, 16, 17, 1, 11, 0}
+#define NXFONT_BITMAP_78 {0xf0, 0x1f, 0x30, 0x4, 0x38, 0x4, 0x38, 0x4, 0x2c, 0x4, 0x26, 0x4, 0x26, 0x4, 0x23, 0x4, 0x21, 0x84, 0x21, 0x84, 0x20, 0xc4, 0x20, 0x64, 0x20, 0x64, 0x20, 0x34, 0x20, 0x1c, 0x20, 0x1c, 0xf8, 0xc}
+
+/* O (79) */
+#define NXFONT_METRICS_79 {2, 16, 17, 1, 11, 0}
+#define NXFONT_BITMAP_79 {0x7, 0xe0, 0x1c, 0x38, 0x38, 0x1c, 0x60, 0x6, 0x60, 0x6, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0x60, 0x6, 0x60, 0x6, 0x38, 0x1c, 0x1c, 0x38, 0x7, 0xe0}
+
+/* P (80) */
+#define NXFONT_METRICS_80 {2, 13, 17, 1, 11, 0}
+#define NXFONT_BITMAP_80 {0xff, 0xc0, 0x30, 0x70, 0x30, 0x30, 0x30, 0x18, 0x30, 0x18, 0x30, 0x18, 0x30, 0x30, 0x30, 0x70, 0x3f, 0xc0, 0x30, 0x0, 0x30, 0x0, 0x30, 0x0, 0x30, 0x0, 0x30, 0x0, 0x30, 0x0, 0x30, 0x0, 0xfc, 0x0}
+
+/* Q (81) */
+#define NXFONT_METRICS_81 {2, 16, 22, 1, 11, 0}
+#define NXFONT_BITMAP_81 {0x7, 0xe0, 0x1c, 0x38, 0x38, 0x1c, 0x60, 0x6, 0x60, 0x6, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0x60, 0x6, 0x60, 0x6, 0x38, 0x1c, 0x1c, 0x38, 0x7, 0xe0, 0x1, 0xc0, 0x0, 0xe0, 0x0, 0x70, 0x0, 0x38, 0x0, 0xf}
+
+/* R (82) */
+#define NXFONT_METRICS_82 {2, 15, 17, 1, 11, 0}
+#define NXFONT_BITMAP_82 {0xff, 0xc0, 0x30, 0x70, 0x30, 0x30, 0x30, 0x18, 0x30, 0x18, 0x30, 0x18, 0x30, 0x30, 0x30, 0x70, 0x3f, 0xc0, 0x33, 0x80, 0x31, 0x80, 0x30, 0xc0, 0x30, 0x60, 0x30, 0x70, 0x30, 0x38, 0x30, 0x1c, 0xfc, 0x1e}
+
+/* S (83) */
+#define NXFONT_METRICS_83 {2, 11, 17, 1, 11, 0}
+#define NXFONT_BITMAP_83 {0x1e, 0x40, 0x63, 0xc0, 0xc0, 0xc0, 0xc0, 0x40, 0xc0, 0x40, 0xe0, 0x0, 0x78, 0x0, 0x1e, 0x0, 0xf, 0x80, 0x3, 0xc0, 0x0, 0xe0, 0x0, 0x60, 0x80, 0x60, 0x80, 0x60, 0xc0, 0xc0, 0xf1, 0x80, 0x9e, 0x0}
+
+/* T (84) */
+#define NXFONT_METRICS_84 {2, 14, 17, 1, 11, 0}
+#define NXFONT_BITMAP_84 {0xff, 0xfc, 0xc3, 0xc, 0x83, 0x4, 0x83, 0x4, 0x3, 0x0, 0x3, 0x0, 0x3, 0x0, 0x3, 0x0, 0x3, 0x0, 0x3, 0x0, 0x3, 0x0, 0x3, 0x0, 0x3, 0x0, 0x3, 0x0, 0x3, 0x0, 0x3, 0x0, 0xf, 0xc0}
+
+/* U (85) */
+#define NXFONT_METRICS_85 {2, 16, 17, 1, 11, 0}
+#define NXFONT_BITMAP_85 {0xfc, 0x1f, 0x30, 0x4, 0x30, 0x4, 0x30, 0x4, 0x30, 0x4, 0x30, 0x4, 0x30, 0x4, 0x30, 0x4, 0x30, 0x4, 0x30, 0x4, 0x30, 0x4, 0x30, 0x4, 0x30, 0x4, 0x30, 0x8, 0x18, 0x8, 0x1c, 0x30, 0x7, 0xe0}
+
+/* V (86) */
+#define NXFONT_METRICS_86 {3, 17, 17, 0, 11, 0}
+#define NXFONT_BITMAP_86 {0xfc, 0x1f, 0x80, 0x30, 0x6, 0x0, 0x30, 0x4, 0x0, 0x18, 0xc, 0x0, 0x18, 0x8, 0x0, 0x18, 0x8, 0x0, 0xc, 0x18, 0x0, 0xc, 0x10, 0x0, 0x6, 0x30, 0x0, 0x6, 0x20, 0x0, 0x6, 0x20, 0x0, 0x3, 0x60, 0x0, 0x3, 0x40, 0x0, 0x3, 0xc0, 0x0, 0x1, 0x80, 0x0, 0x1, 0x80, 0x0, 0x1, 0x80, 0x0}
+
+/* W (87) */
+#define NXFONT_METRICS_87 {3, 23, 17, 0, 11, 0}
+#define NXFONT_BITMAP_87 {0xfc, 0x7e, 0x7e, 0x30, 0x18, 0x18, 0x30, 0x18, 0x10, 0x18, 0x18, 0x10, 0x18, 0x18, 0x30, 0x18, 0x2c, 0x20, 0xc, 0x2c, 0x20, 0xc, 0x2c, 0x60, 0x6, 0x4c, 0x60, 0x6, 0x4c, 0x40, 0x6, 0x46, 0x40, 0x3, 0x46, 0xc0, 0x3, 0x46, 0x80, 0x3, 0x87, 0x80, 0x1, 0x83, 0x80, 0x1, 0x83, 0x0, 0x1, 0x83, 0x0}
+
+/* X (88) */
+#define NXFONT_METRICS_88 {3, 18, 17, 0, 11, 0}
+#define NXFONT_BITMAP_88 {0x7e, 0xf, 0x80, 0x1c, 0x6, 0x0, 0xe, 0xc, 0x0, 0x6, 0x8, 0x0, 0x3, 0x10, 0x0, 0x1, 0xa0, 0x0, 0x1, 0xc0, 0x0, 0x0, 0xc0, 0x0, 0x0, 0xe0, 0x0, 0x1, 0x70, 0x0, 0x2, 0x38, 0x0, 0x6, 0x18, 0x0, 0x4, 0xc, 0x0, 0x8, 0xe, 0x0, 0x18, 0x7, 0x0, 0x30, 0x3, 0x80, 0xfc, 0xf, 0xc0}
+
+/* Y (89) */
+#define NXFONT_METRICS_89 {2, 16, 17, 1, 11, 0}
+#define NXFONT_BITMAP_89 {0xfc, 0x3f, 0x30, 0xc, 0x38, 0x8, 0x18, 0x18, 0x1c, 0x10, 0xc, 0x30, 0x6, 0x20, 0x6, 0x60, 0x3, 0x40, 0x3, 0xc0, 0x1, 0x80, 0x1, 0x80, 0x1, 0x80, 0x1, 0x80, 0x1, 0x80, 0x1, 0x80, 0x7, 0xe0}
+
+/* Z (90) */
+#define NXFONT_METRICS_90 {2, 13, 17, 1, 11, 0}
+#define NXFONT_BITMAP_90 {0xff, 0xf0, 0xc0, 0x70, 0x80, 0xe0, 0x80, 0xc0, 0x1, 0xc0, 0x3, 0x80, 0x3, 0x0, 0x7, 0x0, 0x6, 0x0, 0xe, 0x0, 0x1c, 0x0, 0x18, 0x0, 0x38, 0x0, 0x30, 0x8, 0x70, 0x8, 0xe0, 0x18, 0xff, 0xf8}
+
+/* bracketleft (91) */
+#define NXFONT_METRICS_91 {1, 5, 21, 2, 11, 0}
+#define NXFONT_BITMAP_91 {0xf8, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8}
+
+/* backslash (92) */
+#define NXFONT_METRICS_92 {1, 7, 17, 0, 11, 0}
+#define NXFONT_BITMAP_92 {0xc0, 0xc0, 0x40, 0x60, 0x60, 0x20, 0x30, 0x30, 0x10, 0x18, 0x18, 0x8, 0xc, 0xc, 0x4, 0x6, 0x6}
+
+/* bracketright (93) */
+#define NXFONT_METRICS_93 {1, 5, 21, 1, 11, 0}
+#define NXFONT_BITMAP_93 {0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8}
+
+/* asciicircum (94) */
+#define NXFONT_METRICS_94 {2, 9, 9, 1, 11, 0}
+#define NXFONT_BITMAP_94 {0x8, 0x0, 0x1c, 0x0, 0x14, 0x0, 0x36, 0x0, 0x22, 0x0, 0x63, 0x0, 0x41, 0x0, 0xc1, 0x80, 0x80, 0x80}
+
+/* underscore (95) */
+#define NXFONT_METRICS_95 {2, 12, 2, 0, 31, 0}
+#define NXFONT_BITMAP_95 {0xff, 0xf0, 0xff, 0xf0}
+
+/* grave (96) */
+#define NXFONT_METRICS_96 {1, 5, 4, 1, 11, 0}
+#define NXFONT_BITMAP_96 {0xc0, 0xe0, 0x70, 0x18}
+
+/* a (97) */
+#define NXFONT_METRICS_97 {2, 9, 12, 1, 16, 0}
+#define NXFONT_BITMAP_97 {0x3e, 0x0, 0x67, 0x0, 0x63, 0x0, 0x3, 0x0, 0xf, 0x0, 0x3b, 0x0, 0x63, 0x0, 0xc3, 0x0, 0xc3, 0x0, 0xc7, 0x0, 0xfb, 0x0, 0x71, 0x80}
+
+/* b (98) */
+#define NXFONT_METRICS_98 {2, 11, 17, 0, 11, 0}
+#define NXFONT_BITMAP_98 {0x30, 0x0, 0xf0, 0x0, 0x30, 0x0, 0x30, 0x0, 0x30, 0x0, 0x37, 0x0, 0x39, 0xc0, 0x30, 0xc0, 0x30, 0x60, 0x30, 0x60, 0x30, 0x60, 0x30, 0x60, 0x30, 0x60, 0x30, 0x60, 0x30, 0xc0, 0x39, 0xc0, 0x2f, 0x0}
+
+/* c (99) */
+#define NXFONT_METRICS_99 {2, 9, 12, 1, 16, 0}
+#define NXFONT_BITMAP_99 {0x1f, 0x0, 0x63, 0x80, 0x41, 0x80, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xe0, 0x0, 0x70, 0x80, 0x7f, 0x0, 0x1e, 0x0}
+
+/* d (100) */
+#define NXFONT_METRICS_100 {2, 10, 17, 1, 11, 0}
+#define NXFONT_BITMAP_100 {0x1, 0x80, 0x7, 0x80, 0x1, 0x80, 0x1, 0x80, 0x1, 0x80, 0x1d, 0x80, 0x73, 0x80, 0x61, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0x63, 0x80, 0x7f, 0x80, 0x19, 0xc0}
+
+/* e (101) */
+#define NXFONT_METRICS_101 {2, 9, 12, 1, 16, 0}
+#define NXFONT_BITMAP_101 {0x1e, 0x0, 0x63, 0x0, 0x41, 0x80, 0xc1, 0x80, 0xff, 0x80, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xe0, 0x0, 0x70, 0x80, 0x7f, 0x0, 0x1e, 0x0}
+
+/* f (102) */
+#define NXFONT_METRICS_102 {1, 7, 17, 0, 11, 0}
+#define NXFONT_BITMAP_102 {0xe, 0x16, 0x30, 0x30, 0x30, 0xfe, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x78}
+
+/* g (103) */
+#define NXFONT_METRICS_103 {2, 11, 18, 1, 16, 0}
+#define NXFONT_BITMAP_103 {0x1e, 0xc0, 0x23, 0xc0, 0x61, 0x0, 0x61, 0x80, 0x61, 0x80, 0x61, 0x80, 0x61, 0x80, 0x33, 0x0, 0x3c, 0x0, 0x40, 0x0, 0x60, 0x0, 0x7f, 0x80, 0x3f, 0xc0, 0x40, 0xe0, 0xc0, 0x60, 0xc0, 0x60, 0xe1, 0xc0, 0x7f, 0x0}
+
+/* h (104) */
+#define NXFONT_METRICS_104 {2, 12, 17, 0, 11, 0}
+#define NXFONT_BITMAP_104 {0x30, 0x0, 0xf0, 0x0, 0x30, 0x0, 0x30, 0x0, 0x30, 0x0, 0x33, 0x80, 0x37, 0xc0, 0x38, 0xe0, 0x30, 0x60, 0x30, 0x60, 0x30, 0x60, 0x30, 0x60, 0x30, 0x60, 0x30, 0x60, 0x30, 0x60, 0x30, 0x60, 0x78, 0xf0}
+
+/* i (105) */
+#define NXFONT_METRICS_105 {1, 4, 17, 1, 11, 0}
+#define NXFONT_BITMAP_105 {0x60, 0x60, 0x0, 0x0, 0x0, 0x60, 0xe0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xf0}
+
+/* j (106) - NOTE: Xoffset should be -2, not 0. */
+#define NXFONT_METRICS_106 {1, 6, 23, 0, 11, 0}
+#define NXFONT_BITMAP_106 {0xc, 0xc, 0x0, 0x0, 0x0, 0xc, 0x1c, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xcc, 0xc8, 0x70}
+
+/* k (107) */
+#define NXFONT_METRICS_107 {2, 12, 17, 0, 11, 0}
+#define NXFONT_BITMAP_107 {0x30, 0x0, 0xf0, 0x0, 0x30, 0x0, 0x30, 0x0, 0x30, 0x0, 0x33, 0xe0, 0x31, 0x80, 0x33, 0x0, 0x32, 0x0, 0x34, 0x0, 0x3c, 0x0, 0x36, 0x0, 0x37, 0x0, 0x33, 0x80, 0x31, 0xc0, 0x30, 0xe0, 0x79, 0xf0}
+
+/* l (108) */
+#define NXFONT_METRICS_108 {1, 5, 17, 0, 11, 0}
+#define NXFONT_BITMAP_108 {0x30, 0xf0, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x78}
+
+/* m (109) */
+#define NXFONT_METRICS_109 {3, 18, 12, 1, 16, 0}
+#define NXFONT_BITMAP_109 {0x67, 0xe, 0x0, 0xef, 0x9f, 0x0, 0x71, 0xe3, 0x80, 0x60, 0xc1, 0x80, 0x60, 0xc1, 0x80, 0x60, 0xc1, 0x80, 0x60, 0xc1, 0x80, 0x60, 0xc1, 0x80, 0x60, 0xc1, 0x80, 0x60, 0xc1, 0x80, 0x60, 0xc1, 0x80, 0xf1, 0xe3, 0xc0}
+
+/* n (110) */
+#define NXFONT_METRICS_110 {2, 11, 12, 1, 16, 0}
+#define NXFONT_BITMAP_110 {0x67, 0x0, 0xef, 0x80, 0x71, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0xf1, 0xe0}
+
+/* o (111) */
+#define NXFONT_METRICS_111 {2, 10, 12, 1, 16, 0}
+#define NXFONT_BITMAP_111 {0x1e, 0x0, 0x73, 0x80, 0x61, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x61, 0x80, 0x73, 0x80, 0x1e, 0x0}
+
+/* p (112) */
+#define NXFONT_METRICS_112 {2, 10, 18, 1, 16, 0}
+#define NXFONT_BITMAP_112 {0x6e, 0x0, 0xf3, 0x80, 0x61, 0x80, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x61, 0x80, 0x73, 0x80, 0x6e, 0x0, 0x60, 0x0, 0x60, 0x0, 0x60, 0x0, 0x60, 0x0, 0x60, 0x0, 0xf0, 0x0}
+
+/* q (113) */
+#define NXFONT_METRICS_113 {2, 10, 18, 1, 16, 0}
+#define NXFONT_BITMAP_113 {0x1d, 0x80, 0x73, 0x80, 0x61, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0x61, 0x80, 0x73, 0x80, 0x1d, 0x80, 0x1, 0x80, 0x1, 0x80, 0x1, 0x80, 0x1, 0x80, 0x1, 0x80, 0x3, 0xc0}
+
+/* r (114) */
+#define NXFONT_METRICS_114 {1, 6, 12, 1, 16, 0}
+#define NXFONT_BITMAP_114 {0x6c, 0xec, 0x70, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xf0}
+
+/* s (115) */
+#define NXFONT_METRICS_115 {1, 8, 12, 1, 16, 0}
+#define NXFONT_BITMAP_115 {0x3e, 0x46, 0xc2, 0xe0, 0x70, 0x7c, 0x1e, 0x7, 0x3, 0x83, 0xc6, 0xf8}
+
+/* t (116) */
+#define NXFONT_METRICS_116 {1, 7, 15, 0, 13, 0}
+#define NXFONT_BITMAP_116 {0x10, 0x30, 0x70, 0xfe, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x32, 0x1c}
+
+/* u (117) */
+#define NXFONT_METRICS_117 {2, 11, 12, 1, 16, 0}
+#define NXFONT_BITMAP_117 {0xe1, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x71, 0xc0, 0x3e, 0xc0, 0x1c, 0xe0}
+
+/* v (118) */
+#define NXFONT_METRICS_118 {2, 11, 12, 0, 16, 0}
+#define NXFONT_BITMAP_118 {0xf1, 0xe0, 0x60, 0xc0, 0x60, 0x80, 0x30, 0x80, 0x30, 0x80, 0x31, 0x0, 0x19, 0x0, 0x19, 0x0, 0x1a, 0x0, 0xe, 0x0, 0xe, 0x0, 0x4, 0x0}
+
+/* w (119) */
+#define NXFONT_METRICS_119 {3, 17, 12, 0, 16, 0}
+#define NXFONT_BITMAP_119 {0xf1, 0xe7, 0x80, 0x60, 0xc3, 0x0, 0x60, 0xc2, 0x0, 0x30, 0xc2, 0x0, 0x30, 0xc2, 0x0, 0x31, 0x64, 0x0, 0x19, 0x64, 0x0, 0x1a, 0x64, 0x0, 0x1a, 0x28, 0x0, 0xe, 0x38, 0x0, 0xe, 0x38, 0x0, 0x4, 0x10, 0x0}
+
+/* x (120) */
+#define NXFONT_METRICS_120 {2, 11, 12, 1, 16, 0}
+#define NXFONT_BITMAP_120 {0xf1, 0xe0, 0x60, 0xc0, 0x31, 0x80, 0x39, 0x0, 0x1a, 0x0, 0xc, 0x0, 0xe, 0x0, 0x1b, 0x0, 0x33, 0x80, 0x21, 0x80, 0x60, 0xc0, 0xf1, 0xe0}
+
+/* y (121) */
+#define NXFONT_METRICS_121 {2, 12, 18, 0, 16, 0}
+#define NXFONT_BITMAP_121 {0x78, 0xf0, 0x30, 0x60, 0x30, 0x40, 0x18, 0x40, 0x18, 0x40, 0x18, 0x80, 0xc, 0x80, 0xc, 0x80, 0xd, 0x0, 0x7, 0x0, 0x7, 0x0, 0x2, 0x0, 0x6, 0x0, 0x4, 0x0, 0xc, 0x0, 0xc8, 0x0, 0xf0, 0x0, 0x60, 0x0}
+
+/* z (122) */
+#define NXFONT_METRICS_122 {1, 8, 12, 1, 16, 0}
+#define NXFONT_BITMAP_122 {0xff, 0xc3, 0x86, 0xe, 0x1c, 0x18, 0x38, 0x30, 0x70, 0x61, 0xc3, 0xff}
+
+/* braceleft (123) */
+#define NXFONT_METRICS_123 {1, 8, 22, 1, 11, 0}
+#define NXFONT_BITMAP_123 {0x7, 0xc, 0x18, 0x18, 0x18, 0x18, 0x18, 0x10, 0x30, 0x20, 0xc0, 0x20, 0x30, 0x10, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xc, 0x7}
+
+/* bar (124) */
+#define NXFONT_METRICS_124 {1, 2, 17, 1, 11, 0}
+#define NXFONT_BITMAP_124 {0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* braceright (125) */
+#define NXFONT_METRICS_125 {1, 8, 22, 1, 11, 0}
+#define NXFONT_BITMAP_125 {0xe0, 0x30, 0x18, 0x18, 0x18, 0x18, 0x18, 0x8, 0xc, 0x4, 0x3, 0x4, 0xc, 0x8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x30, 0xe0}
+
+/* asciitilde (126) */
+#define NXFONT_METRICS_126 {2, 11, 4, 1, 20, 0}
+#define NXFONT_BITMAP_126 {0x38, 0x20, 0x7c, 0x60, 0xc7, 0xc0, 0x83, 0x80}
+
+/* exclamdown (161) */
+#define NXFONT_METRICS_161 {1, 3, 17, 3, 16, 0}
+#define NXFONT_BITMAP_161 {0x60, 0x60, 0x0, 0x0, 0x0, 0x40, 0x40, 0x40, 0x40, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0x40}
+
+/* cent (162) */
+#define NXFONT_METRICS_162 {2, 9, 16, 1, 14, 0}
+#define NXFONT_BITMAP_162 {0x2, 0x0, 0x2, 0x0, 0xf, 0x0, 0x33, 0x80, 0x65, 0x80, 0xc4, 0x0, 0xc4, 0x0, 0xc8, 0x0, 0xc8, 0x0, 0xc8, 0x0, 0xd0, 0x0, 0x70, 0x80, 0x71, 0x0, 0x3e, 0x0, 0x40, 0x0, 0x40, 0x0}
+
+/* sterling (163) */
+#define NXFONT_METRICS_163 {2, 10, 17, 1, 11, 0}
+#define NXFONT_BITMAP_163 {0xf, 0x0, 0x19, 0x80, 0x31, 0x80, 0x30, 0x0, 0x30, 0x0, 0x30, 0x0, 0x30, 0x0, 0xfc, 0x0, 0x30, 0x0, 0x30, 0x0, 0x30, 0x0, 0x30, 0x0, 0x30, 0x0, 0x30, 0x0, 0x78, 0x40, 0xbe, 0xc0, 0xe7, 0x80}
+
+/* currency (164) */
+#define NXFONT_METRICS_164 {2, 11, 12, 1, 13, 0}
+#define NXFONT_BITMAP_164 {0xc0, 0x60, 0xee, 0xe0, 0x7f, 0xc0, 0x31, 0x80, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x31, 0x80, 0x7f, 0xc0, 0xee, 0xe0, 0xc0, 0x60}
+
+/* yen (165) */
+#define NXFONT_METRICS_165 {2, 14, 17, 0, 11, 0}
+#define NXFONT_BITMAP_165 {0xf8, 0x7c, 0x70, 0x30, 0x30, 0x20, 0x18, 0x60, 0x18, 0x40, 0xc, 0xc0, 0xc, 0x80, 0x7, 0x80, 0x3, 0x0, 0x1f, 0xe0, 0x3, 0x0, 0x1f, 0xe0, 0x3, 0x0, 0x3, 0x0, 0x3, 0x0, 0x3, 0x0, 0xf, 0xc0}
+
+/* brokenbar (166) */
+#define NXFONT_METRICS_166 {1, 2, 17, 2, 11, 0}
+#define NXFONT_BITMAP_166 {0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x0, 0x0, 0x0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* section (167) */
+#define NXFONT_METRICS_167 {1, 8, 20, 2, 11, 0}
+#define NXFONT_BITMAP_167 {0x1c, 0x26, 0x46, 0x60, 0x70, 0x38, 0x3c, 0x4e, 0x87, 0x83, 0xc3, 0xe2, 0x74, 0x38, 0x1c, 0xe, 0x6, 0x62, 0x64, 0x38}
+
+/* dieresis (168) */
+#define NXFONT_METRICS_168 {1, 6, 2, 1, 12, 0}
+#define NXFONT_BITMAP_168 {0xcc, 0xcc}
+
+/* copyright (169) */
+#define NXFONT_METRICS_169 {3, 17, 17, 1, 11, 0}
+#define NXFONT_BITMAP_169 {0x7, 0xf0, 0x0, 0x1c, 0x1c, 0x0, 0x30, 0x6, 0x0, 0x61, 0xe3, 0x0, 0x47, 0x31, 0x0, 0xc4, 0x19, 0x80, 0x8c, 0x0, 0x80, 0x88, 0x0, 0x80, 0x88, 0x0, 0x80, 0x88, 0x0, 0x80, 0x8c, 0x0, 0x80, 0xc4, 0x19, 0x80, 0x47, 0x71, 0x0, 0x61, 0xc3, 0x0, 0x30, 0x6, 0x0, 0x1c, 0x1c, 0x0, 0x7, 0xf0, 0x0}
+
+/* ordfeminine (170) */
+#define NXFONT_METRICS_170 {1, 7, 9, 0, 11, 0}
+#define NXFONT_BITMAP_170 {0x78, 0xcc, 0xc, 0x7c, 0xcc, 0xcc, 0x76, 0x0, 0xfe}
+
+/* guillemotleft (171) */
+#define NXFONT_METRICS_171 {2, 9, 10, 1, 17, 0}
+#define NXFONT_BITMAP_171 {0x8, 0x80, 0x19, 0x80, 0x33, 0x0, 0x66, 0x0, 0xcc, 0x0, 0xcc, 0x0, 0x66, 0x0, 0x33, 0x0, 0x19, 0x80, 0x8, 0x80}
+
+/* logicalnot (172) */
+#define NXFONT_METRICS_172 {2, 11, 7, 2, 20, 0}
+#define NXFONT_BITMAP_172 {0xff, 0xe0, 0xff, 0xe0, 0x0, 0x60, 0x0, 0x60, 0x0, 0x60, 0x0, 0x60, 0x0, 0x60}
+
+/* hyphen (173) */
+#define NXFONT_METRICS_173 {1, 6, 2, 0, 21, 0}
+#define NXFONT_BITMAP_173 {0xfc, 0xfc}
+
+/* registered (174) */
+#define NXFONT_METRICS_174 {3, 17, 17, 1, 11, 0}
+#define NXFONT_BITMAP_174 {0x7, 0xf0, 0x0, 0x1c, 0x1c, 0x0, 0x30, 0x6, 0x0, 0x67, 0xe3, 0x0, 0x42, 0x31, 0x0, 0xc2, 0x11, 0x80, 0x82, 0x10, 0x80, 0x82, 0x30, 0x80, 0x83, 0xe0, 0x80, 0x82, 0x40, 0x80, 0x82, 0x20, 0x80, 0xc2, 0x31, 0x80, 0x47, 0x19, 0x0, 0x60, 0x3, 0x0, 0x30, 0x6, 0x0, 0x1c, 0x1c, 0x0, 0x7, 0xf0, 0x0}
+
+/* macron (175) */
+#define NXFONT_METRICS_175 {1, 7, 2, 1, 12, 0}
+#define NXFONT_BITMAP_175 {0xfe, 0xfe}
+
+/* degree (176) */
+#define NXFONT_METRICS_176 {1, 7, 7, 1, 11, 0}
+#define NXFONT_BITMAP_176 {0x38, 0x44, 0x82, 0x82, 0x82, 0x44, 0x38}
+
+/* plusminus (177) */
+#define NXFONT_METRICS_177 {2, 10, 11, 2, 17, 0}
+#define NXFONT_BITMAP_177 {0xc, 0x0, 0xc, 0x0, 0xc, 0x0, 0xff, 0xc0, 0xff, 0xc0, 0xc, 0x0, 0xc, 0x0, 0xc, 0x0, 0x0, 0x0, 0xff, 0xc0, 0xff, 0xc0}
+
+/* twosuperior (178) */
+#define NXFONT_METRICS_178 {1, 6, 10, 0, 11, 0}
+#define NXFONT_BITMAP_178 {0x38, 0x4c, 0x8c, 0xc, 0x8, 0x10, 0x30, 0x20, 0x44, 0xfc}
+
+/* threesuperior (179) */
+#define NXFONT_METRICS_179 {1, 6, 10, 0, 11, 0}
+#define NXFONT_BITMAP_179 {0x38, 0x4c, 0x8c, 0x8, 0x30, 0x8, 0xc, 0x8c, 0x88, 0x70}
+
+/* acute (180) */
+#define NXFONT_METRICS_180 {1, 5, 4, 2, 11, 0}
+#define NXFONT_BITMAP_180 {0x18, 0x38, 0x70, 0xc0}
+
+/* mu (181) */
+#define NXFONT_METRICS_181 {2, 11, 17, 1, 16, 0}
+#define NXFONT_BITMAP_181 {0xe1, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x71, 0xc0, 0x7e, 0xc0, 0x5c, 0xe0, 0x40, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xe0, 0x0, 0x40, 0x0}
+
+/* paragraph (182) */
+#define NXFONT_METRICS_182 {2, 9, 21, 1, 11, 0}
+#define NXFONT_BITMAP_182 {0x1f, 0x80, 0x39, 0x0, 0x79, 0x0, 0x79, 0x0, 0xf9, 0x0, 0xf9, 0x0, 0xf9, 0x0, 0x79, 0x0, 0x79, 0x0, 0x39, 0x0, 0x19, 0x0, 0x9, 0x0, 0x9, 0x0, 0x9, 0x0, 0x9, 0x0, 0x9, 0x0, 0x9, 0x0, 0x9, 0x0, 0x9, 0x0, 0x9, 0x0, 0x9, 0x0}
+
+/* periodcentered (183) */
+#define NXFONT_METRICS_183 {1, 2, 3, 2, 20, 0}
+#define NXFONT_BITMAP_183 {0xc0, 0xc0, 0xc0}
+
+/* cedilla (184) */
+#define NXFONT_METRICS_184 {1, 6, 6, 1, 28, 0}
+#define NXFONT_BITMAP_184 {0x10, 0x30, 0x3c, 0xc, 0xcc, 0x78}
+
+/* onesuperior (185) */
+#define NXFONT_METRICS_185 {1, 5, 10, 1, 11, 0}
+#define NXFONT_BITMAP_185 {0x20, 0x60, 0xa0, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xf8}
+
+/* ordmasculine (186) */
+#define NXFONT_METRICS_186 {1, 7, 9, 0, 11, 0}
+#define NXFONT_BITMAP_186 {0x38, 0x44, 0xc6, 0xc6, 0xc6, 0x44, 0x38, 0x0, 0xfe}
+
+/* guillemotright (187) */
+#define NXFONT_METRICS_187 {2, 9, 10, 2, 17, 0}
+#define NXFONT_BITMAP_187 {0x88, 0x0, 0xcc, 0x0, 0x66, 0x0, 0x33, 0x0, 0x19, 0x80, 0x19, 0x80, 0x33, 0x0, 0x66, 0x0, 0xcc, 0x0, 0x88, 0x0}
+
+/* onequarter (188) */
+#define NXFONT_METRICS_188 {2, 16, 17, 1, 11, 0}
+#define NXFONT_BITMAP_188 {0x20, 0x18, 0x60, 0x18, 0xa0, 0x30, 0x20, 0x60, 0x20, 0x60, 0x20, 0xc0, 0x20, 0xc0, 0x21, 0x84, 0x23, 0xc, 0xfb, 0x1c, 0x6, 0x14, 0x6, 0x24, 0xc, 0x64, 0x18, 0x44, 0x18, 0xff, 0x30, 0x4, 0x30, 0x4}
+
+/* onehalf (189) */
+#define NXFONT_METRICS_189 {2, 15, 17, 1, 11, 0}
+#define NXFONT_BITMAP_189 {0x20, 0x18, 0x60, 0x18, 0xa0, 0x30, 0x20, 0x60, 0x20, 0x60, 0x20, 0xc0, 0x20, 0xc0, 0x21, 0x9c, 0x23, 0x26, 0xfb, 0x46, 0x6, 0x6, 0x6, 0x4, 0xc, 0x8, 0x18, 0x18, 0x18, 0x10, 0x30, 0x22, 0x30, 0x7e}
+
+/* threequarters (190) */
+#define NXFONT_METRICS_190 {3, 17, 17, 0, 11, 0}
+#define NXFONT_BITMAP_190 {0x38, 0xc, 0x0, 0x4c, 0xc, 0x0, 0x8c, 0x18, 0x0, 0x8, 0x30, 0x0, 0x30, 0x30, 0x0, 0x8, 0x60, 0x0, 0xc, 0x60, 0x0, 0x8c, 0xc2, 0x0, 0x89, 0x86, 0x0, 0x71, 0x8e, 0x0, 0x3, 0xa, 0x0, 0x3, 0x12, 0x0, 0x6, 0x32, 0x0, 0xc, 0x22, 0x0, 0xc, 0x7f, 0x80, 0x18, 0x2, 0x0, 0x18, 0x2, 0x0}
+
+/* questiondown (191) */
+#define NXFONT_METRICS_191 {1, 8, 17, 1, 16, 0}
+#define NXFONT_BITMAP_191 {0xc, 0xc, 0x0, 0x0, 0x8, 0x8, 0x18, 0x18, 0x38, 0x30, 0x70, 0xe0, 0xc3, 0xc3, 0xc1, 0x63, 0x3e}
+
+/* Agrave (192) */
+#define NXFONT_METRICS_192 {3, 17, 22, 0, 6, 0}
+#define NXFONT_BITMAP_192 {0xc, 0x0, 0x0, 0xe, 0x0, 0x0, 0x7, 0x0, 0x0, 0x1, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80, 0x0, 0x1, 0xc0, 0x0, 0x1, 0xc0, 0x0, 0x1, 0x60, 0x0, 0x2, 0x60, 0x0, 0x2, 0x30, 0x0, 0x6, 0x30, 0x0, 0x4, 0x30, 0x0, 0x4, 0x18, 0x0, 0xc, 0x18, 0x0, 0xf, 0xf8, 0x0, 0x8, 0xc, 0x0, 0x18, 0xc, 0x0, 0x10, 0xc, 0x0, 0x10, 0x6, 0x0, 0x30, 0x6, 0x0, 0xfc, 0x1f, 0x80}
+
+/* Aacute (193) */
+#define NXFONT_METRICS_193 {3, 17, 22, 0, 6, 0}
+#define NXFONT_BITMAP_193 {0x0, 0x18, 0x0, 0x0, 0x38, 0x0, 0x0, 0x70, 0x0, 0x0, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80, 0x0, 0x1, 0xc0, 0x0, 0x1, 0xc0, 0x0, 0x1, 0x60, 0x0, 0x2, 0x60, 0x0, 0x2, 0x30, 0x0, 0x6, 0x30, 0x0, 0x4, 0x30, 0x0, 0x4, 0x18, 0x0, 0xc, 0x18, 0x0, 0xf, 0xf8, 0x0, 0x8, 0xc, 0x0, 0x18, 0xc, 0x0, 0x10, 0xc, 0x0, 0x10, 0x6, 0x0, 0x30, 0x6, 0x0, 0xfc, 0x1f, 0x80}
+
+/* Acircumflex (194) */
+#define NXFONT_METRICS_194 {3, 17, 22, 0, 6, 0}
+#define NXFONT_BITMAP_194 {0x1, 0x80, 0x0, 0x3, 0xc0, 0x0, 0x6, 0x60, 0x0, 0x4, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80, 0x0, 0x1, 0xc0, 0x0, 0x1, 0xc0, 0x0, 0x1, 0x60, 0x0, 0x2, 0x60, 0x0, 0x2, 0x30, 0x0, 0x6, 0x30, 0x0, 0x4, 0x30, 0x0, 0x4, 0x18, 0x0, 0xc, 0x18, 0x0, 0xf, 0xf8, 0x0, 0x8, 0xc, 0x0, 0x18, 0xc, 0x0, 0x10, 0xc, 0x0, 0x10, 0x6, 0x0, 0x30, 0x6, 0x0, 0xfc, 0x1f, 0x80}
+
+/* Atilde (195) */
+#define NXFONT_METRICS_195 {3, 17, 21, 0, 7, 0}
+#define NXFONT_BITMAP_195 {0x3, 0x20, 0x0, 0x7, 0xe0, 0x0, 0x4, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80, 0x0, 0x1, 0xc0, 0x0, 0x1, 0xc0, 0x0, 0x1, 0x60, 0x0, 0x2, 0x60, 0x0, 0x2, 0x30, 0x0, 0x6, 0x30, 0x0, 0x4, 0x30, 0x0, 0x4, 0x18, 0x0, 0xc, 0x18, 0x0, 0xf, 0xf8, 0x0, 0x8, 0xc, 0x0, 0x18, 0xc, 0x0, 0x10, 0xc, 0x0, 0x10, 0x6, 0x0, 0x30, 0x6, 0x0, 0xfc, 0x1f, 0x80}
+
+/* Adieresis (196) */
+#define NXFONT_METRICS_196 {3, 17, 21, 0, 7, 0}
+#define NXFONT_BITMAP_196 {0x6, 0x60, 0x0, 0x6, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80, 0x0, 0x1, 0xc0, 0x0, 0x1, 0xc0, 0x0, 0x1, 0x60, 0x0, 0x2, 0x60, 0x0, 0x2, 0x30, 0x0, 0x6, 0x30, 0x0, 0x4, 0x30, 0x0, 0x4, 0x18, 0x0, 0xc, 0x18, 0x0, 0xf, 0xf8, 0x0, 0x8, 0xc, 0x0, 0x18, 0xc, 0x0, 0x10, 0xc, 0x0, 0x10, 0x6, 0x0, 0x30, 0x6, 0x0, 0xfc, 0x1f, 0x80}
+
+/* Aring (197) */
+#define NXFONT_METRICS_197 {3, 17, 23, 0, 5, 0}
+#define NXFONT_BITMAP_197 {0x1, 0xc0, 0x0, 0x2, 0x20, 0x0, 0x2, 0x20, 0x0, 0x2, 0x20, 0x0, 0x1, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80, 0x0, 0x1, 0xc0, 0x0, 0x1, 0xc0, 0x0, 0x1, 0x60, 0x0, 0x2, 0x60, 0x0, 0x2, 0x30, 0x0, 0x6, 0x30, 0x0, 0x4, 0x30, 0x0, 0x4, 0x18, 0x0, 0xc, 0x18, 0x0, 0xf, 0xf8, 0x0, 0x8, 0xc, 0x0, 0x18, 0xc, 0x0, 0x10, 0xc, 0x0, 0x10, 0x6, 0x0, 0x30, 0x6, 0x0, 0xfc, 0x1f, 0x80}
+
+/* AE (198) */
+#define NXFONT_METRICS_198 {3, 21, 17, 0, 11, 0}
+#define NXFONT_BITMAP_198 {0x3, 0xff, 0xf0, 0x0, 0xf0, 0x30, 0x1, 0xb0, 0x10, 0x1, 0x30, 0x10, 0x3, 0x30, 0x0, 0x2, 0x30, 0x0, 0x6, 0x30, 0x40, 0x4, 0x30, 0x40, 0x4, 0x3f, 0xc0, 0xc, 0x30, 0x40, 0xf, 0xf0, 0x40, 0x8, 0x30, 0x0, 0x18, 0x30, 0x0, 0x10, 0x30, 0x8, 0x30, 0x30, 0x8, 0x20, 0x30, 0x18, 0xf8, 0xff, 0xf8}
+
+/* Ccedilla (199) */
+#define NXFONT_METRICS_199 {2, 14, 23, 1, 11, 0}
+#define NXFONT_BITMAP_199 {0x7, 0xe4, 0x1c, 0x3c, 0x38, 0xc, 0x60, 0x4, 0x60, 0x4, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0x60, 0x0, 0x60, 0x4, 0x38, 0x8, 0x1e, 0x38, 0x7, 0xe0, 0x1, 0x0, 0x3, 0x0, 0x3, 0xc0, 0x0, 0xc0, 0xc, 0xc0, 0x7, 0x80}
+
+/* Egrave (200) */
+#define NXFONT_METRICS_200 {2, 13, 22, 1, 6, 0}
+#define NXFONT_BITMAP_200 {0x18, 0x0, 0x1c, 0x0, 0xe, 0x0, 0x3, 0x0, 0x0, 0x0, 0xff, 0xf0, 0x30, 0x30, 0x30, 0x10, 0x30, 0x10, 0x30, 0x0, 0x30, 0x0, 0x30, 0x40, 0x30, 0x40, 0x3f, 0xc0, 0x30, 0x40, 0x30, 0x40, 0x30, 0x0, 0x30, 0x0, 0x30, 0x8, 0x30, 0x8, 0x30, 0x18, 0xff, 0xf8}
+
+/* Eacute (201) */
+#define NXFONT_METRICS_201 {2, 13, 22, 1, 6, 0}
+#define NXFONT_BITMAP_201 {0x0, 0x60, 0x0, 0xe0, 0x1, 0xc0, 0x3, 0x0, 0x0, 0x0, 0xff, 0xf0, 0x30, 0x30, 0x30, 0x10, 0x30, 0x10, 0x30, 0x0, 0x30, 0x0, 0x30, 0x40, 0x30, 0x40, 0x3f, 0xc0, 0x30, 0x40, 0x30, 0x40, 0x30, 0x0, 0x30, 0x0, 0x30, 0x8, 0x30, 0x8, 0x30, 0x18, 0xff, 0xf8}
+
+/* Ecircumflex (202) */
+#define NXFONT_METRICS_202 {2, 13, 22, 1, 6, 0}
+#define NXFONT_BITMAP_202 {0x6, 0x0, 0xf, 0x0, 0x19, 0x80, 0x10, 0x80, 0x0, 0x0, 0xff, 0xf0, 0x30, 0x30, 0x30, 0x10, 0x30, 0x10, 0x30, 0x0, 0x30, 0x0, 0x30, 0x40, 0x30, 0x40, 0x3f, 0xc0, 0x30, 0x40, 0x30, 0x40, 0x30, 0x0, 0x30, 0x0, 0x30, 0x8, 0x30, 0x8, 0x30, 0x18, 0xff, 0xf8}
+
+/* Edieresis (203) */
+#define NXFONT_METRICS_203 {2, 13, 21, 1, 7, 0}
+#define NXFONT_BITMAP_203 {0x19, 0x80, 0x19, 0x80, 0x0, 0x0, 0x0, 0x0, 0xff, 0xf0, 0x30, 0x30, 0x30, 0x10, 0x30, 0x10, 0x30, 0x0, 0x30, 0x0, 0x30, 0x40, 0x30, 0x40, 0x3f, 0xc0, 0x30, 0x40, 0x30, 0x40, 0x30, 0x0, 0x30, 0x0, 0x30, 0x8, 0x30, 0x8, 0x30, 0x18, 0xff, 0xf8}
+
+/* Igrave (204) */
+#define NXFONT_METRICS_204 {1, 7, 22, 0, 6, 0}
+#define NXFONT_BITMAP_204 {0xc0, 0xe0, 0x70, 0x18, 0x0, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e}
+
+/* Iacute (205) */
+#define NXFONT_METRICS_205 {1, 7, 22, 1, 6, 0}
+#define NXFONT_BITMAP_205 {0x6, 0xe, 0x1c, 0x30, 0x0, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0xfc}
+
+/* Icircumflex (206) */
+#define NXFONT_METRICS_206 {1, 6, 22, 1, 6, 0}
+#define NXFONT_BITMAP_206 {0x30, 0x78, 0xcc, 0x84, 0x0, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0xfc}
+
+/* Idieresis (207) */
+#define NXFONT_METRICS_207 {1, 6, 21, 1, 7, 0}
+#define NXFONT_BITMAP_207 {0xcc, 0xcc, 0x0, 0x0, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0xfc}
+
+/* Eth (208) */
+#define NXFONT_METRICS_208 {2, 16, 17, 0, 11, 0}
+#define NXFONT_BITMAP_208 {0x7f, 0xe0, 0x18, 0x38, 0x18, 0x1c, 0x18, 0x6, 0x18, 0x6, 0x18, 0x3, 0x18, 0x3, 0xff, 0x3, 0xff, 0x3, 0x18, 0x3, 0x18, 0x3, 0x18, 0x3, 0x18, 0x6, 0x18, 0x6, 0x18, 0x1c, 0x18, 0x38, 0x7f, 0xe0}
+
+/* Ntilde (209) */
+#define NXFONT_METRICS_209 {2, 16, 21, 1, 7, 0}
+#define NXFONT_BITMAP_209 {0x3, 0x20, 0x7, 0xe0, 0x4, 0xc0, 0x0, 0x0, 0xf0, 0x1f, 0x30, 0x4, 0x38, 0x4, 0x38, 0x4, 0x2c, 0x4, 0x26, 0x4, 0x26, 0x4, 0x23, 0x4, 0x21, 0x84, 0x21, 0x84, 0x20, 0xc4, 0x20, 0x64, 0x20, 0x64, 0x20, 0x34, 0x20, 0x1c, 0x20, 0x1c, 0xf8, 0xc}
+
+/* Ograve (210) */
+#define NXFONT_METRICS_210 {2, 16, 22, 1, 6, 0}
+#define NXFONT_BITMAP_210 {0xc, 0x0, 0xe, 0x0, 0x7, 0x0, 0x1, 0x80, 0x0, 0x0, 0x7, 0xe0, 0x1c, 0x38, 0x38, 0x1c, 0x60, 0x6, 0x60, 0x6, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0x60, 0x6, 0x60, 0x6, 0x38, 0x1c, 0x1c, 0x38, 0x7, 0xe0}
+
+/* Oacute (211) */
+#define NXFONT_METRICS_211 {2, 16, 22, 1, 6, 0}
+#define NXFONT_BITMAP_211 {0x0, 0x30, 0x0, 0x70, 0x0, 0xe0, 0x1, 0x80, 0x0, 0x0, 0x7, 0xe0, 0x1c, 0x38, 0x38, 0x1c, 0x60, 0x6, 0x60, 0x6, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0x60, 0x6, 0x60, 0x6, 0x38, 0x1c, 0x1c, 0x38, 0x7, 0xe0}
+
+/* Ocircumflex (212) */
+#define NXFONT_METRICS_212 {2, 16, 22, 1, 6, 0}
+#define NXFONT_BITMAP_212 {0x1, 0x80, 0x3, 0xc0, 0x6, 0x60, 0x4, 0x20, 0x0, 0x0, 0x7, 0xe0, 0x1c, 0x38, 0x38, 0x1c, 0x60, 0x6, 0x60, 0x6, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0x60, 0x6, 0x60, 0x6, 0x38, 0x1c, 0x1c, 0x38, 0x7, 0xe0}
+
+/* Otilde (213) */
+#define NXFONT_METRICS_213 {2, 16, 21, 1, 7, 0}
+#define NXFONT_BITMAP_213 {0x3, 0x20, 0x7, 0xe0, 0x4, 0xc0, 0x0, 0x0, 0x7, 0xe0, 0x1c, 0x38, 0x38, 0x1c, 0x60, 0x6, 0x60, 0x6, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0x60, 0x6, 0x60, 0x6, 0x38, 0x1c, 0x1c, 0x38, 0x7, 0xe0}
+
+/* Odieresis (214) */
+#define NXFONT_METRICS_214 {2, 16, 21, 1, 7, 0}
+#define NXFONT_BITMAP_214 {0x6, 0x60, 0x6, 0x60, 0x0, 0x0, 0x0, 0x0, 0x7, 0xe0, 0x1c, 0x38, 0x38, 0x1c, 0x60, 0x6, 0x60, 0x6, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0x60, 0x6, 0x60, 0x6, 0x38, 0x1c, 0x1c, 0x38, 0x7, 0xe0}
+
+/* multiply (215) */
+#define NXFONT_METRICS_215 {2, 10, 9, 1, 18, 0}
+#define NXFONT_BITMAP_215 {0xc0, 0xc0, 0x61, 0x80, 0x33, 0x0, 0x1e, 0x0, 0xc, 0x0, 0x1e, 0x0, 0x33, 0x0, 0x61, 0x80, 0xc0, 0xc0}
+
+/* Oslash (216) */
+#define NXFONT_METRICS_216 {2, 16, 19, 1, 10, 0}
+#define NXFONT_BITMAP_216 {0x0, 0x4, 0x7, 0xe4, 0x1c, 0x38, 0x38, 0x1c, 0x60, 0x26, 0x60, 0x46, 0xc0, 0x43, 0xc0, 0x83, 0xc0, 0x83, 0xc1, 0x3, 0xc1, 0x3, 0xc2, 0x3, 0xc2, 0x3, 0x64, 0x6, 0x68, 0x6, 0x38, 0x1c, 0x1c, 0x38, 0x27, 0xe0, 0x20, 0x0}
+
+/* Ugrave (217) */
+#define NXFONT_METRICS_217 {2, 16, 22, 1, 6, 0}
+#define NXFONT_BITMAP_217 {0x6, 0x0, 0x7, 0x0, 0x3, 0x80, 0x0, 0xc0, 0x0, 0x0, 0xfc, 0x1f, 0x30, 0x4, 0x30, 0x4, 0x30, 0x4, 0x30, 0x4, 0x30, 0x4, 0x30, 0x4, 0x30, 0x4, 0x30, 0x4, 0x30, 0x4, 0x30, 0x4, 0x30, 0x4, 0x30, 0x4, 0x30, 0x8, 0x18, 0x8, 0x1c, 0x30, 0x7, 0xe0}
+
+/* Uacute (218) */
+#define NXFONT_METRICS_218 {2, 16, 22, 1, 6, 0}
+#define NXFONT_BITMAP_218 {0x0, 0x30, 0x0, 0x70, 0x0, 0xe0, 0x1, 0x80, 0x0, 0x0, 0xfc, 0x1f, 0x30, 0x4, 0x30, 0x4, 0x30, 0x4, 0x30, 0x4, 0x30, 0x4, 0x30, 0x4, 0x30, 0x4, 0x30, 0x4, 0x30, 0x4, 0x30, 0x4, 0x30, 0x4, 0x30, 0x4, 0x30, 0x8, 0x18, 0x8, 0x1c, 0x30, 0x7, 0xe0}
+
+/* Ucircumflex (219) */
+#define NXFONT_METRICS_219 {2, 16, 22, 1, 6, 0}
+#define NXFONT_BITMAP_219 {0x1, 0x80, 0x3, 0xc0, 0x6, 0x60, 0x4, 0x20, 0x0, 0x0, 0xfc, 0x1f, 0x30, 0x4, 0x30, 0x4, 0x30, 0x4, 0x30, 0x4, 0x30, 0x4, 0x30, 0x4, 0x30, 0x4, 0x30, 0x4, 0x30, 0x4, 0x30, 0x4, 0x30, 0x4, 0x30, 0x4, 0x30, 0x8, 0x18, 0x8, 0x1c, 0x30, 0x7, 0xe0}
+
+/* Udieresis (220) */
+#define NXFONT_METRICS_220 {2, 16, 21, 1, 7, 0}
+#define NXFONT_BITMAP_220 {0x6, 0x60, 0x6, 0x60, 0x0, 0x0, 0x0, 0x0, 0xfc, 0x1f, 0x30, 0x4, 0x30, 0x4, 0x30, 0x4, 0x30, 0x4, 0x30, 0x4, 0x30, 0x4, 0x30, 0x4, 0x30, 0x4, 0x30, 0x4, 0x30, 0x4, 0x30, 0x4, 0x30, 0x4, 0x30, 0x8, 0x18, 0x8, 0x1c, 0x30, 0x7, 0xe0}
+
+/* Yacute (221) */
+#define NXFONT_METRICS_221 {2, 16, 22, 1, 6, 0}
+#define NXFONT_BITMAP_221 {0x0, 0x30, 0x0, 0x70, 0x0, 0xe0, 0x1, 0x80, 0x0, 0x0, 0xfc, 0x3f, 0x30, 0xc, 0x38, 0x8, 0x18, 0x18, 0x1c, 0x10, 0xc, 0x30, 0x6, 0x20, 0x6, 0x60, 0x3, 0x40, 0x3, 0xc0, 0x1, 0x80, 0x1, 0x80, 0x1, 0x80, 0x1, 0x80, 0x1, 0x80, 0x1, 0x80, 0x7, 0xe0}
+
+/* Thorn (222) */
+#define NXFONT_METRICS_222 {2, 13, 17, 1, 11, 0}
+#define NXFONT_BITMAP_222 {0xfc, 0x0, 0x30, 0x0, 0x30, 0x0, 0x30, 0x0, 0x3f, 0xc0, 0x30, 0x70, 0x30, 0x30, 0x30, 0x18, 0x30, 0x18, 0x30, 0x18, 0x30, 0x30, 0x30, 0x70, 0x3f, 0xc0, 0x30, 0x0, 0x30, 0x0, 0x30, 0x0, 0xfc, 0x0}
+
+/* germandbls (223) */
+#define NXFONT_METRICS_223 {2, 10, 17, 1, 11, 0}
+#define NXFONT_BITMAP_223 {0x1e, 0x0, 0x33, 0x0, 0x61, 0x80, 0x61, 0x80, 0x61, 0x80, 0x61, 0x80, 0x63, 0x0, 0x6c, 0x0, 0x67, 0x0, 0x63, 0x80, 0x61, 0x80, 0x61, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x6c, 0xc0, 0x6c, 0x80, 0xe7, 0x0}
+
+/* agrave (224) */
+#define NXFONT_METRICS_224 {2, 9, 17, 1, 11, 0}
+#define NXFONT_BITMAP_224 {0x60, 0x0, 0x70, 0x0, 0x38, 0x0, 0xc, 0x0, 0x0, 0x0, 0x3e, 0x0, 0x67, 0x0, 0x63, 0x0, 0x3, 0x0, 0xf, 0x0, 0x3b, 0x0, 0x63, 0x0, 0xc3, 0x0, 0xc3, 0x0, 0xc7, 0x0, 0xfb, 0x0, 0x71, 0x80}
+
+/* aacute (225) */
+#define NXFONT_METRICS_225 {2, 9, 17, 1, 11, 0}
+#define NXFONT_BITMAP_225 {0x3, 0x0, 0x7, 0x0, 0xe, 0x0, 0x18, 0x0, 0x0, 0x0, 0x3e, 0x0, 0x67, 0x0, 0x63, 0x0, 0x3, 0x0, 0xf, 0x0, 0x3b, 0x0, 0x63, 0x0, 0xc3, 0x0, 0xc3, 0x0, 0xc7, 0x0, 0xfb, 0x0, 0x71, 0x80}
+
+/* acircumflex (226) */
+#define NXFONT_METRICS_226 {2, 9, 17, 1, 11, 0}
+#define NXFONT_BITMAP_226 {0xc, 0x0, 0x1e, 0x0, 0x33, 0x0, 0x21, 0x0, 0x0, 0x0, 0x3e, 0x0, 0x67, 0x0, 0x63, 0x0, 0x3, 0x0, 0xf, 0x0, 0x3b, 0x0, 0x63, 0x0, 0xc3, 0x0, 0xc3, 0x0, 0xc7, 0x0, 0xfb, 0x0, 0x71, 0x80}
+
+/* atilde (227) */
+#define NXFONT_METRICS_227 {2, 9, 16, 1, 12, 0}
+#define NXFONT_BITMAP_227 {0x32, 0x0, 0x7e, 0x0, 0x4c, 0x0, 0x0, 0x0, 0x3e, 0x0, 0x67, 0x0, 0x63, 0x0, 0x3, 0x0, 0xf, 0x0, 0x3b, 0x0, 0x63, 0x0, 0xc3, 0x0, 0xc3, 0x0, 0xc7, 0x0, 0xfb, 0x0, 0x71, 0x80}
+
+/* adieresis (228) */
+#define NXFONT_METRICS_228 {2, 9, 16, 1, 12, 0}
+#define NXFONT_BITMAP_228 {0x66, 0x0, 0x66, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e, 0x0, 0x67, 0x0, 0x63, 0x0, 0x3, 0x0, 0xf, 0x0, 0x3b, 0x0, 0x63, 0x0, 0xc3, 0x0, 0xc3, 0x0, 0xc7, 0x0, 0xfb, 0x0, 0x71, 0x80}
+
+/* aring (229) */
+#define NXFONT_METRICS_229 {2, 9, 18, 1, 10, 0}
+#define NXFONT_BITMAP_229 {0x1c, 0x0, 0x22, 0x0, 0x22, 0x0, 0x22, 0x0, 0x1c, 0x0, 0x0, 0x0, 0x3e, 0x0, 0x67, 0x0, 0x63, 0x0, 0x3, 0x0, 0xf, 0x0, 0x3b, 0x0, 0x63, 0x0, 0xc3, 0x0, 0xc3, 0x0, 0xc7, 0x0, 0xfb, 0x0, 0x71, 0x80}
+
+/* ae (230) */
+#define NXFONT_METRICS_230 {2, 14, 12, 1, 16, 0}
+#define NXFONT_BITMAP_230 {0x3c, 0xf0, 0x67, 0x98, 0x63, 0xc, 0x3, 0xc, 0xf, 0xfc, 0x3b, 0x0, 0x63, 0x0, 0xc3, 0x0, 0xc3, 0x0, 0xc7, 0x84, 0xfb, 0xf8, 0x70, 0xf0}
+
+/* ccedilla (231) */
+#define NXFONT_METRICS_231 {2, 9, 18, 1, 16, 0}
+#define NXFONT_BITMAP_231 {0x1f, 0x0, 0x63, 0x80, 0x41, 0x80, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xe0, 0x0, 0x70, 0x80, 0x7f, 0x0, 0x1e, 0x0, 0x8, 0x0, 0x18, 0x0, 0x1e, 0x0, 0x6, 0x0, 0x66, 0x0, 0x3c, 0x0}
+
+/* egrave (232) */
+#define NXFONT_METRICS_232 {2, 9, 17, 1, 11, 0}
+#define NXFONT_BITMAP_232 {0x60, 0x0, 0x70, 0x0, 0x38, 0x0, 0xc, 0x0, 0x0, 0x0, 0x1e, 0x0, 0x63, 0x0, 0x41, 0x80, 0xc1, 0x80, 0xff, 0x80, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xe0, 0x0, 0x70, 0x80, 0x7f, 0x0, 0x1e, 0x0}
+
+/* eacute (233) */
+#define NXFONT_METRICS_233 {2, 9, 17, 1, 11, 0}
+#define NXFONT_BITMAP_233 {0x3, 0x0, 0x7, 0x0, 0xe, 0x0, 0x18, 0x0, 0x0, 0x0, 0x1e, 0x0, 0x63, 0x0, 0x41, 0x80, 0xc1, 0x80, 0xff, 0x80, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xe0, 0x0, 0x70, 0x80, 0x7f, 0x0, 0x1e, 0x0}
+
+/* ecircumflex (234) */
+#define NXFONT_METRICS_234 {2, 9, 17, 1, 11, 0}
+#define NXFONT_BITMAP_234 {0xc, 0x0, 0x1e, 0x0, 0x33, 0x0, 0x21, 0x0, 0x0, 0x0, 0x1e, 0x0, 0x63, 0x0, 0x41, 0x80, 0xc1, 0x80, 0xff, 0x80, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xe0, 0x0, 0x70, 0x80, 0x7f, 0x0, 0x1e, 0x0}
+
+/* edieresis (235) */
+#define NXFONT_METRICS_235 {2, 9, 16, 1, 12, 0}
+#define NXFONT_BITMAP_235 {0x33, 0x0, 0x33, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1e, 0x0, 0x63, 0x0, 0x41, 0x80, 0xc1, 0x80, 0xff, 0x80, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xe0, 0x0, 0x70, 0x80, 0x7f, 0x0, 0x1e, 0x0}
+
+/* igrave (236) */
+#define NXFONT_METRICS_236 {1, 6, 17, 0, 11, 0}
+#define NXFONT_BITMAP_236 {0xc0, 0xe0, 0x70, 0x18, 0x0, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c}
+
+/* iacute (237) */
+#define NXFONT_METRICS_237 {1, 5, 17, 1, 11, 0}
+#define NXFONT_BITMAP_237 {0x18, 0x38, 0x70, 0xc0, 0x0, 0x60, 0xe0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xf0}
+
+/* icircumflex (238) */
+#define NXFONT_METRICS_238 {1, 6, 17, 0, 11, 0}
+#define NXFONT_BITMAP_238 {0x30, 0x78, 0xcc, 0x84, 0x0, 0x30, 0x70, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x78}
+
+/* idieresis (239) */
+#define NXFONT_METRICS_239 {1, 6, 16, 0, 12, 0}
+#define NXFONT_BITMAP_239 {0xcc, 0xcc, 0x0, 0x0, 0x70, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x78}
+
+/* eth (240) */
+#define NXFONT_METRICS_240 {2, 10, 17, 1, 11, 0}
+#define NXFONT_BITMAP_240 {0xc0, 0x0, 0x71, 0x80, 0x1e, 0x0, 0x3c, 0x0, 0xc6, 0x0, 0x1f, 0x0, 0x73, 0x80, 0x61, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x61, 0x80, 0x73, 0x80, 0x1e, 0x0}
+
+/* ntilde (241) */
+#define NXFONT_METRICS_241 {2, 11, 16, 1, 12, 0}
+#define NXFONT_BITMAP_241 {0x19, 0x0, 0x3f, 0x0, 0x26, 0x0, 0x0, 0x0, 0x67, 0x0, 0xef, 0x80, 0x71, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0xf1, 0xe0}
+
+/* ograve (242) */
+#define NXFONT_METRICS_242 {2, 10, 17, 1, 11, 0}
+#define NXFONT_BITMAP_242 {0x60, 0x0, 0x70, 0x0, 0x38, 0x0, 0xc, 0x0, 0x0, 0x0, 0x1e, 0x0, 0x73, 0x80, 0x61, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x61, 0x80, 0x73, 0x80, 0x1e, 0x0}
+
+/* oacute (243) */
+#define NXFONT_METRICS_243 {2, 10, 17, 1, 11, 0}
+#define NXFONT_BITMAP_243 {0x3, 0x0, 0x7, 0x0, 0xe, 0x0, 0x18, 0x0, 0x0, 0x0, 0x1e, 0x0, 0x73, 0x80, 0x61, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x61, 0x80, 0x73, 0x80, 0x1e, 0x0}
+
+/* ocircumflex (244) */
+#define NXFONT_METRICS_244 {2, 10, 17, 1, 11, 0}
+#define NXFONT_BITMAP_244 {0xc, 0x0, 0x1e, 0x0, 0x33, 0x0, 0x21, 0x0, 0x0, 0x0, 0x1e, 0x0, 0x73, 0x80, 0x61, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x61, 0x80, 0x73, 0x80, 0x1e, 0x0}
+
+/* otilde (245) */
+#define NXFONT_METRICS_245 {2, 10, 16, 1, 12, 0}
+#define NXFONT_BITMAP_245 {0x19, 0x0, 0x3f, 0x0, 0x26, 0x0, 0x0, 0x0, 0x1e, 0x0, 0x73, 0x80, 0x61, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x61, 0x80, 0x73, 0x80, 0x1e, 0x0}
+
+/* odieresis (246) */
+#define NXFONT_METRICS_246 {2, 10, 16, 1, 12, 0}
+#define NXFONT_BITMAP_246 {0x33, 0x0, 0x33, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1e, 0x0, 0x73, 0x80, 0x61, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x61, 0x80, 0x73, 0x80, 0x1e, 0x0}
+
+/* divide (247) */
+#define NXFONT_METRICS_247 {2, 10, 10, 1, 17, 0}
+#define NXFONT_BITMAP_247 {0xc, 0x0, 0xc, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xc0, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xc, 0x0, 0xc, 0x0}
+
+/* oslash (248) */
+#define NXFONT_METRICS_248 {2, 10, 14, 1, 15, 0}
+#define NXFONT_BITMAP_248 {0x0, 0xc0, 0x1e, 0xc0, 0x73, 0x80, 0x63, 0x80, 0xc6, 0xc0, 0xc4, 0xc0, 0xcc, 0xc0, 0xc8, 0xc0, 0xd8, 0xc0, 0xd0, 0xc0, 0x71, 0x80, 0x73, 0x80, 0xde, 0x0, 0xc0, 0x0}
+
+/* ugrave (249) */
+#define NXFONT_METRICS_249 {2, 11, 17, 1, 11, 0}
+#define NXFONT_BITMAP_249 {0x60, 0x0, 0x70, 0x0, 0x38, 0x0, 0xc, 0x0, 0x0, 0x0, 0xe1, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x71, 0xc0, 0x3e, 0xc0, 0x1c, 0xe0}
+
+/* uacute (250) */
+#define NXFONT_METRICS_250 {2, 11, 17, 1, 11, 0}
+#define NXFONT_BITMAP_250 {0x1, 0x80, 0x3, 0x80, 0x7, 0x0, 0xc, 0x0, 0x0, 0x0, 0xe1, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x71, 0xc0, 0x3e, 0xc0, 0x1c, 0xe0}
+
+/* ucircumflex (251) */
+#define NXFONT_METRICS_251 {2, 11, 17, 1, 11, 0}
+#define NXFONT_BITMAP_251 {0xc, 0x0, 0x1e, 0x0, 0x33, 0x0, 0x21, 0x0, 0x0, 0x0, 0xe1, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x71, 0xc0, 0x3e, 0xc0, 0x1c, 0xe0}
+
+/* udieresis (252) */
+#define NXFONT_METRICS_252 {2, 11, 16, 1, 12, 0}
+#define NXFONT_BITMAP_252 {0x33, 0x0, 0x33, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe1, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x71, 0xc0, 0x3e, 0xc0, 0x1c, 0xe0}
+
+/* yacute (253) */
+#define NXFONT_METRICS_253 {2, 11, 22, 0, 11, 0}
+#define NXFONT_BITMAP_253 {0x1, 0x80, 0x3, 0x80, 0x7, 0x0, 0xc, 0x0, 0x0, 0x0, 0xf1, 0xe0, 0x60, 0xc0, 0x60, 0x80, 0x30, 0x80, 0x30, 0x80, 0x31, 0x0, 0x19, 0x0, 0x19, 0x0, 0x1a, 0x0, 0xe, 0x0, 0xe, 0x0, 0x4, 0x0, 0xc, 0x0, 0x8, 0x0, 0x18, 0x0, 0xf0, 0x0, 0xe0, 0x0}
+
+/* thorn (254) */
+#define NXFONT_METRICS_254 {2, 10, 22, 1, 11, 0}
+#define NXFONT_BITMAP_254 {0x60, 0x0, 0xe0, 0x0, 0x60, 0x0, 0x60, 0x0, 0x60, 0x0, 0x6e, 0x0, 0x73, 0x80, 0x61, 0x80, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x61, 0x80, 0x73, 0x80, 0x6e, 0x0, 0x60, 0x0, 0x60, 0x0, 0x60, 0x0, 0x60, 0x0, 0xf0, 0x0}
+
+/* ydieresis (255) */
+#define NXFONT_METRICS_255 {2, 11, 21, 0, 12, 0}
+#define NXFONT_BITMAP_255 {0x33, 0x0, 0x33, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf1, 0xe0, 0x60, 0xc0, 0x60, 0x80, 0x30, 0x80, 0x30, 0x80, 0x31, 0x0, 0x19, 0x0, 0x19, 0x0, 0x1a, 0x0, 0xe, 0x0, 0xe, 0x0, 0x4, 0x0, 0xc, 0x0, 0x8, 0x0, 0x18, 0x0, 0xf0, 0x0, 0xe0, 0x0}
+
+/****************************************************************************
+ * Public Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+#define EXTERN extern "C"
+extern "C" {
+#else
+#define EXTERN extern
+#endif
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* __GRAPHICS_NXFONTS_NXFONTS_SERIF29X37_H */
diff --git a/nuttx/graphics/nxfonts/nxfonts_serif38x48.h b/nuttx/graphics/nxfonts/nxfonts_serif38x48.h
new file mode 100644
index 000000000..68a9d723e
--- /dev/null
+++ b/nuttx/graphics/nxfonts/nxfonts_serif38x48.h
@@ -0,0 +1,849 @@
+/****************************************************************************
+ * graphics/nxfonts/nxfonts_serif38x48.h
+ *
+ * Copyright (C) 2011-2012 NX Engineering, S.A., All rights reserved.
+ * Author: Jose Pablo Carballo Gomez <jcarballo@nx-engineering.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT}
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING}
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+#ifndef __GRAPHICS_NXFONTS_NXFONTS_SERIF38X48_H
+#define __GRAPHICS_NXFONTS_NXFONTS_SERIF38X48_H
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/* Font ID */
+
+#define NXFONT_ID FONTID_SERIF38X48
+
+/* Ranges of 7-bit and 8-bit fonts */
+
+#define NXFONT_MIN7BIT 33
+#define NXFONT_MAX7BIT 126
+
+#define NXFONT_MIN8BIT 161
+#define NXFONT_MAX8BIT 255
+
+/* Maximum height and width of any glyph in the set */
+
+#define NXFONT_MAXHEIGHT 48
+#define NXFONT_MAXWIDTH 38
+
+/* The width of a space */
+
+#define NXFONT_SPACEWIDTH 8
+
+/* exclam (33) */
+#define NXFONT_METRICS_33 {1, 4, 23, 3, 14, 0}
+#define NXFONT_BITMAP_33 {0x60, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x0, 0x0, 0x60, 0xf0, 0xf0, 0x60}
+
+/* quotedbl (34) */
+#define NXFONT_METRICS_34 {2, 9, 7, 2, 14, 0}
+#define NXFONT_BITMAP_34 {0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0x41, 0x0, 0x41, 0x0, 0x41, 0x0}
+
+/* numbersign (35) */
+#define NXFONT_METRICS_35 {2, 16, 23, 0, 14, 0}
+#define NXFONT_BITMAP_35 {0x6, 0x18, 0x6, 0x18, 0x6, 0x18, 0x6, 0x18, 0x6, 0x18, 0x6, 0x18, 0x6, 0x18, 0x6, 0x18, 0x7f, 0xff, 0x7f, 0xff, 0xc, 0x30, 0xc, 0x30, 0xc, 0x30, 0xc, 0x30, 0xff, 0xfe, 0xff, 0xfe, 0x18, 0x60, 0x18, 0x60, 0x18, 0x60, 0x18, 0x60, 0x18, 0x60, 0x18, 0x60, 0x18, 0x60}
+
+/* dollar (36) */
+#define NXFONT_METRICS_36 {2, 13, 28, 2, 12, 0}
+#define NXFONT_BITMAP_36 {0x2, 0x0, 0x2, 0x0, 0xf, 0xc0, 0x3a, 0x70, 0x32, 0x38, 0x62, 0x18, 0x62, 0x8, 0x62, 0x8, 0x72, 0x0, 0x7a, 0x0, 0x3e, 0x0, 0x3f, 0x0, 0x1f, 0x80, 0x7, 0xc0, 0x3, 0xe0, 0x2, 0xf0, 0x2, 0x70, 0x2, 0x38, 0x2, 0x38, 0x82, 0x18, 0x82, 0x18, 0xc2, 0x38, 0xe2, 0x30, 0x72, 0x60, 0x1f, 0xc0, 0x2, 0x0, 0x2, 0x0, 0x2, 0x0}
+
+/* percent (37) */
+#define NXFONT_METRICS_37 {3, 23, 23, 2, 14, 0}
+#define NXFONT_BITMAP_37 {0xf, 0x0, 0x40, 0x1d, 0x83, 0xc0, 0x38, 0xfc, 0x80, 0x70, 0x41, 0x80, 0x70, 0x43, 0x0, 0xe0, 0x42, 0x0, 0xe0, 0x46, 0x0, 0xe0, 0xc4, 0x0, 0xc0, 0x8c, 0x0, 0xc1, 0x88, 0x0, 0xc1, 0x18, 0x78, 0x66, 0x10, 0xec, 0x3c, 0x31, 0xc6, 0x0, 0x63, 0x82, 0x0, 0x43, 0x82, 0x0, 0xc7, 0x2, 0x0, 0x87, 0x2, 0x1, 0x87, 0x6, 0x1, 0x6, 0x4, 0x3, 0x6, 0xc, 0x2, 0x6, 0x8, 0x6, 0x3, 0x30, 0x4, 0x1, 0xe0}
+
+/* ampersand (38) */
+#define NXFONT_METRICS_38 {3, 23, 23, 2, 14, 0}
+#define NXFONT_BITMAP_38 {0x0, 0xf8, 0x0, 0x1, 0x8c, 0x0, 0x3, 0xe, 0x0, 0x3, 0x6, 0x0, 0x7, 0x6, 0x0, 0x7, 0x6, 0x0, 0x7, 0xc, 0x0, 0x7, 0x8c, 0x0, 0x3, 0x98, 0x0, 0x3, 0xf1, 0xfc, 0x3, 0xc0, 0x70, 0x7, 0xc0, 0x60, 0x1d, 0xe0, 0x40, 0x38, 0xf0, 0xc0, 0x70, 0x70, 0x80, 0x60, 0x79, 0x80, 0xe0, 0x3f, 0x0, 0xe0, 0x1e, 0x0, 0xe0, 0xf, 0x0, 0xf0, 0x1f, 0x82, 0x78, 0x33, 0xfc, 0x7f, 0xe1, 0xf8, 0x1f, 0x80, 0xf0}
+
+/* quotesingle (39) */
+#define NXFONT_METRICS_39 {1, 3, 8, 1, 14, 0}
+#define NXFONT_BITMAP_39 {0xe0, 0xe0, 0xe0, 0xe0, 0x40, 0x40, 0x40, 0x40}
+
+/* parenleft (40) */
+#define NXFONT_METRICS_40 {1, 8, 28, 2, 14, 0}
+#define NXFONT_BITMAP_40 {0x3, 0x6, 0xc, 0x18, 0x38, 0x30, 0x70, 0x70, 0x60, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0x60, 0x70, 0x70, 0x30, 0x38, 0x18, 0xc, 0x6, 0x3}
+
+/* parenright (41) */
+#define NXFONT_METRICS_41 {1, 8, 28, 1, 14, 0}
+#define NXFONT_BITMAP_41 {0xc0, 0x60, 0x30, 0x18, 0x1c, 0xc, 0xe, 0xe, 0x6, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x6, 0xe, 0xe, 0xc, 0x1c, 0x18, 0x30, 0x60, 0xc0}
+
+/* asterisk (42) */
+#define NXFONT_METRICS_42 {2, 12, 13, 2, 14, 0}
+#define NXFONT_BITMAP_42 {0x6, 0x0, 0xf, 0x0, 0x6, 0x0, 0xc6, 0x30, 0xf6, 0xf0, 0x76, 0xe0, 0xf, 0x0, 0x76, 0xe0, 0xf6, 0xf0, 0xc6, 0x30, 0x6, 0x0, 0xf, 0x0, 0x6, 0x0}
+
+/* plus (43) */
+#define NXFONT_METRICS_43 {2, 16, 16, 1, 20, 0}
+#define NXFONT_BITMAP_43 {0x1, 0x80, 0x1, 0x80, 0x1, 0x80, 0x1, 0x80, 0x1, 0x80, 0x1, 0x80, 0x1, 0x80, 0xff, 0xff, 0xff, 0xff, 0x1, 0x80, 0x1, 0x80, 0x1, 0x80, 0x1, 0x80, 0x1, 0x80, 0x1, 0x80, 0x1, 0x80}
+
+/* comma (44) */
+#define NXFONT_METRICS_44 {1, 4, 7, 2, 33, 0}
+#define NXFONT_BITMAP_44 {0x60, 0xf0, 0xf0, 0x70, 0x10, 0x20, 0x40}
+
+/* hyphen (45) */
+#define NXFONT_METRICS_45 {1, 8, 2, 1, 28, 0}
+#define NXFONT_BITMAP_45 {0xff, 0xff}
+
+/* period (46) */
+#define NXFONT_METRICS_46 {1, 4, 4, 2, 33, 0}
+#define NXFONT_BITMAP_46 {0x60, 0xf0, 0xf0, 0x60}
+
+/* slash (47) */
+#define NXFONT_METRICS_47 {2, 10, 26, 0, 14, 0}
+#define NXFONT_BITMAP_47 {0x0, 0xc0, 0x0, 0xc0, 0x1, 0x80, 0x1, 0x80, 0x3, 0x80, 0x3, 0x0, 0x3, 0x0, 0x3, 0x0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0xe, 0x0, 0xc, 0x0, 0xc, 0x0, 0x1c, 0x0, 0x18, 0x0, 0x18, 0x0, 0x18, 0x0, 0x30, 0x0, 0x30, 0x0, 0x30, 0x0, 0x70, 0x0, 0x60, 0x0, 0x60, 0x0, 0xc0, 0x0, 0xc0, 0x0}
+
+/* zero (48) */
+#define NXFONT_METRICS_48 {2, 14, 23, 1, 14, 0}
+#define NXFONT_BITMAP_48 {0x7, 0x80, 0x1c, 0xe0, 0x38, 0x70, 0x30, 0x30, 0x70, 0x38, 0x70, 0x38, 0x60, 0x18, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x18, 0x70, 0x38, 0x70, 0x38, 0x30, 0x30, 0x38, 0x70, 0x1c, 0xe0, 0x7, 0x80}
+
+/* one (49) */
+#define NXFONT_METRICS_49 {2, 9, 23, 4, 14, 0}
+#define NXFONT_BITMAP_49 {0xc, 0x0, 0x1c, 0x0, 0x7c, 0x0, 0xdc, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x3e, 0x0, 0xff, 0x80}
+
+/* two (50) */
+#define NXFONT_METRICS_50 {2, 15, 23, 0, 14, 0}
+#define NXFONT_BITMAP_50 {0x7, 0xe0, 0xf, 0xf0, 0x1c, 0xf8, 0x30, 0x3c, 0x20, 0x3c, 0x60, 0x1c, 0x40, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x18, 0x0, 0x38, 0x0, 0x30, 0x0, 0x60, 0x0, 0x60, 0x0, 0xc0, 0x1, 0x80, 0x3, 0x0, 0x6, 0x0, 0xc, 0x2, 0x18, 0x6, 0x3f, 0xfc, 0x7f, 0xf8, 0xff, 0xf8}
+
+/* three (51) */
+#define NXFONT_METRICS_51 {2, 12, 23, 2, 14, 0}
+#define NXFONT_BITMAP_51 {0xf, 0x80, 0x3f, 0xc0, 0x61, 0xe0, 0xc0, 0xe0, 0x80, 0xe0, 0x0, 0xe0, 0x0, 0xc0, 0x0, 0xc0, 0x1, 0x80, 0x3, 0x0, 0x7, 0xc0, 0x1f, 0xe0, 0x1, 0xf0, 0x0, 0x70, 0x0, 0x70, 0x0, 0x30, 0x0, 0x30, 0x0, 0x30, 0x0, 0x70, 0x0, 0x60, 0xe0, 0xc0, 0xf3, 0x80, 0x7f, 0x0}
+
+/* four (52) */
+#define NXFONT_METRICS_52 {2, 14, 23, 1, 14, 0}
+#define NXFONT_BITMAP_52 {0x0, 0x60, 0x0, 0xe0, 0x0, 0xe0, 0x1, 0xe0, 0x1, 0x60, 0x3, 0x60, 0x6, 0x60, 0x4, 0x60, 0xc, 0x60, 0x18, 0x60, 0x10, 0x60, 0x30, 0x60, 0x60, 0x60, 0x40, 0x60, 0xff, 0xfc, 0xff, 0xfc, 0xff, 0xfc, 0x0, 0x60, 0x0, 0x60, 0x0, 0x60, 0x0, 0x60, 0x0, 0x60, 0x0, 0x60}
+
+/* five (53) */
+#define NXFONT_METRICS_53 {2, 13, 23, 1, 14, 0}
+#define NXFONT_BITMAP_53 {0xf, 0xf8, 0x1f, 0xf0, 0x1f, 0xe0, 0x10, 0x0, 0x30, 0x0, 0x20, 0x0, 0x7e, 0x0, 0x7f, 0x80, 0x7f, 0xc0, 0x7, 0xe0, 0x1, 0xe0, 0x0, 0xf0, 0x0, 0x70, 0x0, 0x70, 0x0, 0x30, 0x0, 0x30, 0x0, 0x30, 0x0, 0x30, 0x0, 0x60, 0x0, 0x60, 0xe0, 0xc0, 0xf3, 0x80, 0x7e, 0x0}
+
+/* six (54) */
+#define NXFONT_METRICS_54 {2, 14, 23, 1, 14, 0}
+#define NXFONT_BITMAP_54 {0x0, 0x78, 0x1, 0xc0, 0x3, 0x80, 0xf, 0x0, 0x1e, 0x0, 0x1c, 0x0, 0x38, 0x0, 0x78, 0x0, 0x70, 0x0, 0x73, 0xc0, 0xf7, 0xf0, 0xf8, 0x78, 0xe0, 0x38, 0xe0, 0x3c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0x70, 0x1c, 0x70, 0x18, 0x38, 0x38, 0x1c, 0x60, 0x7, 0xc0}
+
+/* seven (55) */
+#define NXFONT_METRICS_55 {2, 14, 23, 1, 14, 0}
+#define NXFONT_BITMAP_55 {0x3f, 0xfc, 0x7f, 0xfc, 0x60, 0x18, 0xc0, 0x18, 0x80, 0x38, 0x0, 0x30, 0x0, 0x30, 0x0, 0x30, 0x0, 0x60, 0x0, 0x60, 0x0, 0x60, 0x0, 0xe0, 0x0, 0xc0, 0x0, 0xc0, 0x1, 0xc0, 0x1, 0x80, 0x1, 0x80, 0x1, 0x80, 0x3, 0x0, 0x3, 0x0, 0x3, 0x0, 0x7, 0x0, 0x6, 0x0}
+
+/* eight (56) */
+#define NXFONT_METRICS_56 {2, 13, 23, 2, 14, 0}
+#define NXFONT_BITMAP_56 {0x1f, 0x80, 0x38, 0xe0, 0x70, 0x70, 0xe0, 0x30, 0xe0, 0x30, 0xe0, 0x30, 0xe0, 0x70, 0xf0, 0x60, 0x7c, 0xc0, 0x3f, 0x0, 0x1f, 0x80, 0xf, 0xc0, 0x1b, 0xe0, 0x71, 0xf0, 0x60, 0xf0, 0xe0, 0x78, 0xc0, 0x78, 0xc0, 0x38, 0xc0, 0x38, 0xe0, 0x38, 0x60, 0x70, 0x70, 0xe0, 0x1f, 0xc0}
+
+/* nine (57) */
+#define NXFONT_METRICS_57 {2, 14, 23, 1, 14, 0}
+#define NXFONT_BITMAP_57 {0x7, 0x80, 0x18, 0xe0, 0x30, 0x70, 0x70, 0x38, 0x60, 0x38, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xf0, 0x1c, 0x70, 0x1c, 0x78, 0x3c, 0x3e, 0xfc, 0xf, 0xb8, 0x0, 0x38, 0x0, 0x70, 0x0, 0x70, 0x0, 0xe0, 0x1, 0xc0, 0x3, 0x80, 0xf, 0x0, 0x78, 0x0}
+
+/* colon (58) */
+#define NXFONT_METRICS_58 {1, 4, 15, 2, 22, 0}
+#define NXFONT_BITMAP_58 {0x60, 0xf0, 0xf0, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x60, 0xf0, 0xf0, 0x60}
+
+/* semicolon (59) */
+#define NXFONT_METRICS_59 {1, 4, 18, 2, 22, 0}
+#define NXFONT_BITMAP_59 {0x60, 0xf0, 0xf0, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x60, 0xf0, 0xf0, 0x70, 0x10, 0x20, 0x40}
+
+/* less (60) */
+#define NXFONT_METRICS_60 {2, 16, 18, 1, 19, 0}
+#define NXFONT_BITMAP_60 {0x0, 0x1, 0x0, 0x7, 0x0, 0x1f, 0x0, 0x7c, 0x1, 0xf0, 0x7, 0xc0, 0x1f, 0x0, 0x7c, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0x7c, 0x0, 0x1f, 0x0, 0x7, 0xc0, 0x1, 0xf0, 0x0, 0x7c, 0x0, 0x1f, 0x0, 0x7, 0x0, 0x1}
+
+/* equal (61) */
+#define NXFONT_METRICS_61 {2, 16, 9, 1, 24, 0}
+#define NXFONT_BITMAP_61 {0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff}
+
+/* greater (62) */
+#define NXFONT_METRICS_62 {2, 16, 18, 2, 19, 0}
+#define NXFONT_BITMAP_62 {0x80, 0x0, 0xe0, 0x0, 0xf8, 0x0, 0x3e, 0x0, 0xf, 0x80, 0x3, 0xe0, 0x0, 0xf8, 0x0, 0x3e, 0x0, 0xf, 0x0, 0xf, 0x0, 0x3e, 0x0, 0xf8, 0x3, 0xe0, 0xf, 0x80, 0x3e, 0x0, 0xf8, 0x0, 0xe0, 0x0, 0x80, 0x0}
+
+/* question (63) */
+#define NXFONT_METRICS_63 {2, 11, 23, 2, 14, 0}
+#define NXFONT_BITMAP_63 {0x1f, 0x0, 0x73, 0x80, 0xc1, 0xc0, 0xc1, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0x60, 0xe0, 0x1, 0xc0, 0x1, 0xc0, 0x1, 0x80, 0x3, 0x80, 0x3, 0x0, 0x6, 0x0, 0x4, 0x0, 0xc, 0x0, 0x8, 0x0, 0x8, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0xc, 0x0}
+
+/* at (64) */
+#define NXFONT_METRICS_64 {4, 27, 28, 2, 14, 0}
+#define NXFONT_BITMAP_64 {0x0, 0x1f, 0xf0, 0x0, 0x0, 0xf8, 0x3c, 0x0, 0x1, 0xe0, 0x6, 0x0, 0x7, 0x80, 0x3, 0x0, 0xe, 0x0, 0x1, 0x80, 0x1c, 0x0, 0x0, 0xc0, 0x1c, 0x0, 0x0, 0xc0, 0x38, 0x7, 0x8c, 0x60, 0x70, 0x1f, 0x5c, 0x60, 0x70, 0x1c, 0x7c, 0x20, 0x70, 0x38, 0x38, 0x20, 0xe0, 0x70, 0x38, 0x20, 0xe0, 0x70, 0x30, 0x20, 0xe0, 0x70, 0x70, 0x20, 0xe0, 0xe0, 0x70, 0x60, 0xe0, 0xe0, 0x70, 0x40, 0xe0, 0xe0, 0xe0, 0xc0, 0xe0, 0xe0, 0xe0, 0x80, 0x70, 0xe1, 0xe1, 0x80, 0x70, 0x77, 0x73, 0x0, 0x70, 0x3c, 0x3e, 0x0, 0x38, 0x0, 0x0, 0x0, 0x18, 0x0, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x0, 0xe, 0x0, 0x0, 0x0, 0x7, 0x80, 0x6, 0x0, 0x1, 0xf0, 0x3c, 0x0, 0x0, 0x7f, 0xf0, 0x0}
+
+/* A (65) */
+#define NXFONT_METRICS_65 {3, 22, 23, 1, 14, 0}
+#define NXFONT_BITMAP_65 {0x0, 0x30, 0x0, 0x0, 0x30, 0x0, 0x0, 0x70, 0x0, 0x0, 0x78, 0x0, 0x0, 0x78, 0x0, 0x0, 0xfc, 0x0, 0x0, 0xdc, 0x0, 0x0, 0x9c, 0x0, 0x1, 0x8e, 0x0, 0x1, 0xe, 0x0, 0x3, 0xf, 0x0, 0x3, 0x7, 0x0, 0x2, 0x7, 0x0, 0x6, 0x7, 0x80, 0x6, 0x3, 0x80, 0xf, 0xff, 0xc0, 0xc, 0x3, 0xc0, 0x18, 0x1, 0xc0, 0x18, 0x1, 0xe0, 0x30, 0x1, 0xe0, 0x30, 0x0, 0xf0, 0x70, 0x0, 0xf0, 0xfc, 0x3, 0xfc}
+
+/* B (66) */
+#define NXFONT_METRICS_66 {3, 20, 23, 1, 14, 0}
+#define NXFONT_BITMAP_66 {0xff, 0xfe, 0x0, 0x3e, 0xf, 0x80, 0x1c, 0x3, 0xc0, 0x1c, 0x1, 0xc0, 0x1c, 0x1, 0xe0, 0x1c, 0x0, 0xe0, 0x1c, 0x0, 0xe0, 0x1c, 0x1, 0xe0, 0x1c, 0x1, 0xc0, 0x1c, 0x3, 0xc0, 0x1c, 0xf, 0x80, 0x1f, 0xfe, 0x0, 0x1c, 0x7, 0x80, 0x1c, 0x1, 0xe0, 0x1c, 0x0, 0xe0, 0x1c, 0x0, 0xf0, 0x1c, 0x0, 0x70, 0x1c, 0x0, 0x70, 0x1c, 0x0, 0xf0, 0x1c, 0x0, 0xe0, 0x1c, 0x1, 0xe0, 0x3e, 0x7, 0xc0, 0xff, 0xff, 0x0}
+
+/* C (67) */
+#define NXFONT_METRICS_67 {3, 20, 23, 1, 14, 0}
+#define NXFONT_BITMAP_67 {0x1, 0xff, 0x10, 0x7, 0x83, 0xf0, 0xe, 0x0, 0xf0, 0x1c, 0x0, 0x70, 0x38, 0x0, 0x30, 0x38, 0x0, 0x30, 0x70, 0x0, 0x10, 0x70, 0x0, 0x10, 0xf0, 0x0, 0x0, 0xf0, 0x0, 0x0, 0xf0, 0x0, 0x0, 0xf0, 0x0, 0x0, 0xf0, 0x0, 0x0, 0xf0, 0x0, 0x0, 0xf0, 0x0, 0x0, 0x70, 0x0, 0x0, 0x70, 0x0, 0x0, 0x38, 0x0, 0x0, 0x38, 0x0, 0x10, 0x1c, 0x0, 0x30, 0xe, 0x0, 0x60, 0x7, 0x83, 0xc0, 0x1, 0xff, 0x0}
+
+/* D (68) */
+#define NXFONT_METRICS_68 {3, 22, 23, 1, 14, 0}
+#define NXFONT_BITMAP_68 {0xff, 0xfe, 0x0, 0x3e, 0x7, 0x80, 0x1c, 0x1, 0xc0, 0x1c, 0x0, 0xe0, 0x1c, 0x0, 0x70, 0x1c, 0x0, 0x70, 0x1c, 0x0, 0x38, 0x1c, 0x0, 0x38, 0x1c, 0x0, 0x3c, 0x1c, 0x0, 0x3c, 0x1c, 0x0, 0x3c, 0x1c, 0x0, 0x3c, 0x1c, 0x0, 0x3c, 0x1c, 0x0, 0x3c, 0x1c, 0x0, 0x3c, 0x1c, 0x0, 0x38, 0x1c, 0x0, 0x38, 0x1c, 0x0, 0x70, 0x1c, 0x0, 0x70, 0x1c, 0x0, 0xe0, 0x1c, 0x1, 0xc0, 0x3e, 0x7, 0x80, 0xff, 0xfe, 0x0}
+
+/* E (69) */
+#define NXFONT_METRICS_69 {3, 19, 23, 1, 14, 0}
+#define NXFONT_BITMAP_69 {0xff, 0xff, 0xc0, 0x3e, 0x3, 0xc0, 0x1c, 0x0, 0xc0, 0x1c, 0x0, 0x40, 0x1c, 0x0, 0x40, 0x1c, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x1c, 0x1, 0x0, 0x1c, 0x1, 0x0, 0x1c, 0x3, 0x0, 0x1f, 0xff, 0x0, 0x1c, 0x3, 0x0, 0x1c, 0x1, 0x0, 0x1c, 0x1, 0x0, 0x1c, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x60, 0x1c, 0x0, 0xc0, 0x3e, 0x3, 0xc0, 0xff, 0xff, 0xc0}
+
+/* F (70) */
+#define NXFONT_METRICS_70 {3, 17, 23, 1, 14, 0}
+#define NXFONT_BITMAP_70 {0xff, 0xff, 0x80, 0x3e, 0x7, 0x80, 0x1c, 0x1, 0x80, 0x1c, 0x0, 0x80, 0x1c, 0x0, 0x80, 0x1c, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x1c, 0x2, 0x0, 0x1c, 0x2, 0x0, 0x1c, 0x6, 0x0, 0x1f, 0xfe, 0x0, 0x1c, 0x6, 0x0, 0x1c, 0x2, 0x0, 0x1c, 0x2, 0x0, 0x1c, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x3e, 0x0, 0x0, 0xff, 0x80, 0x0}
+
+/* G (71) */
+#define NXFONT_METRICS_71 {3, 22, 23, 1, 14, 0}
+#define NXFONT_BITMAP_71 {0x1, 0xff, 0x30, 0x7, 0x87, 0xf0, 0xe, 0x0, 0xf0, 0x1c, 0x0, 0x70, 0x38, 0x0, 0x30, 0x38, 0x0, 0x30, 0x70, 0x0, 0x10, 0x70, 0x0, 0x0, 0xf0, 0x0, 0x0, 0xf0, 0x0, 0x0, 0xf0, 0x0, 0x0, 0xf0, 0x3, 0xfc, 0xf0, 0x0, 0xf8, 0xf0, 0x0, 0x70, 0xf0, 0x0, 0x70, 0x70, 0x0, 0x70, 0x70, 0x0, 0x70, 0x38, 0x0, 0x70, 0x38, 0x0, 0x70, 0x1c, 0x0, 0x70, 0xe, 0x0, 0x70, 0x7, 0x81, 0xe0, 0x1, 0xff, 0x80}
+
+/* H (72) */
+#define NXFONT_METRICS_72 {3, 22, 23, 1, 14, 0}
+#define NXFONT_BITMAP_72 {0xff, 0x87, 0xfc, 0x3e, 0x1, 0xf0, 0x1c, 0x0, 0xe0, 0x1c, 0x0, 0xe0, 0x1c, 0x0, 0xe0, 0x1c, 0x0, 0xe0, 0x1c, 0x0, 0xe0, 0x1c, 0x0, 0xe0, 0x1c, 0x0, 0xe0, 0x1c, 0x0, 0xe0, 0x1c, 0x0, 0xe0, 0x1f, 0xff, 0xe0, 0x1c, 0x0, 0xe0, 0x1c, 0x0, 0xe0, 0x1c, 0x0, 0xe0, 0x1c, 0x0, 0xe0, 0x1c, 0x0, 0xe0, 0x1c, 0x0, 0xe0, 0x1c, 0x0, 0xe0, 0x1c, 0x0, 0xe0, 0x1c, 0x0, 0xe0, 0x3e, 0x1, 0xf0, 0xff, 0x87, 0xfc}
+
+/* I (73) */
+#define NXFONT_METRICS_73 {2, 9, 23, 1, 14, 0}
+#define NXFONT_BITMAP_73 {0xff, 0x80, 0x3e, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x3e, 0x0, 0xff, 0x80}
+
+/* J (74) */
+#define NXFONT_METRICS_74 {2, 12, 23, 1, 14, 0}
+#define NXFONT_BITMAP_74 {0x1f, 0xf0, 0x7, 0xc0, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0xc3, 0x80, 0xe3, 0x0, 0xe7, 0x0, 0x7c, 0x0}
+
+/* K (75) */
+#define NXFONT_METRICS_75 {3, 23, 23, 1, 14, 0}
+#define NXFONT_BITMAP_75 {0xff, 0xc7, 0xf8, 0x3e, 0x1, 0xe0, 0x1c, 0x1, 0x80, 0x1c, 0x3, 0x0, 0x1c, 0x6, 0x0, 0x1c, 0xc, 0x0, 0x1c, 0x18, 0x0, 0x1c, 0x30, 0x0, 0x1c, 0x60, 0x0, 0x1c, 0xc0, 0x0, 0x1f, 0xc0, 0x0, 0x1f, 0xe0, 0x0, 0x1f, 0xf0, 0x0, 0x1e, 0x78, 0x0, 0x1c, 0x3c, 0x0, 0x1c, 0x1e, 0x0, 0x1c, 0xf, 0x0, 0x1c, 0x7, 0x80, 0x1c, 0x3, 0xc0, 0x1c, 0x1, 0xe0, 0x1c, 0x0, 0xf0, 0x3e, 0x0, 0xf8, 0xff, 0xc7, 0xfe}
+
+/* L (76) */
+#define NXFONT_METRICS_76 {3, 19, 23, 1, 14, 0}
+#define NXFONT_BITMAP_76 {0xff, 0x80, 0x0, 0x3e, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x60, 0x1c, 0x0, 0xc0, 0x3e, 0x3, 0xc0, 0xff, 0xff, 0xc0}
+
+/* M (77) */
+#define NXFONT_METRICS_77 {4, 28, 23, 1, 14, 0}
+#define NXFONT_BITMAP_77 {0xfc, 0x0, 0x7, 0xf0, 0x3e, 0x0, 0x7, 0xc0, 0x1e, 0x0, 0xf, 0x80, 0x1f, 0x0, 0xf, 0x80, 0x1f, 0x0, 0xb, 0x80, 0x17, 0x0, 0x1b, 0x80, 0x17, 0x80, 0x1b, 0x80, 0x13, 0x80, 0x33, 0x80, 0x13, 0xc0, 0x33, 0x80, 0x13, 0xc0, 0x23, 0x80, 0x11, 0xe0, 0x63, 0x80, 0x11, 0xe0, 0x63, 0x80, 0x10, 0xe0, 0xc3, 0x80, 0x10, 0xf0, 0xc3, 0x80, 0x10, 0x70, 0x83, 0x80, 0x10, 0x79, 0x83, 0x80, 0x10, 0x79, 0x3, 0x80, 0x10, 0x3d, 0x3, 0x80, 0x10, 0x3f, 0x3, 0x80, 0x10, 0x1e, 0x3, 0x80, 0x10, 0x1e, 0x3, 0x80, 0x38, 0xc, 0x7, 0xc0, 0xfe, 0xc, 0x1f, 0xf0}
+
+/* N (78) */
+#define NXFONT_METRICS_78 {3, 22, 23, 1, 14, 0}
+#define NXFONT_BITMAP_78 {0xf8, 0x1, 0xfc, 0x3c, 0x0, 0x70, 0x1e, 0x0, 0x20, 0x1f, 0x0, 0x20, 0x1f, 0x0, 0x20, 0x17, 0x80, 0x20, 0x13, 0xc0, 0x20, 0x13, 0xc0, 0x20, 0x11, 0xe0, 0x20, 0x10, 0xf0, 0x20, 0x10, 0xf8, 0x20, 0x10, 0x78, 0x20, 0x10, 0x3c, 0x20, 0x10, 0x1e, 0x20, 0x10, 0x1f, 0x20, 0x10, 0xf, 0x20, 0x10, 0x7, 0xa0, 0x10, 0x3, 0xe0, 0x10, 0x1, 0xe0, 0x10, 0x1, 0xe0, 0x10, 0x0, 0xe0, 0x38, 0x0, 0x60, 0xfe, 0x0, 0x20}
+
+/* O (79) */
+#define NXFONT_METRICS_79 {3, 22, 23, 1, 14, 0}
+#define NXFONT_BITMAP_79 {0x1, 0xfe, 0x0, 0x7, 0x87, 0x80, 0xe, 0x1, 0xc0, 0x1c, 0x0, 0xe0, 0x38, 0x0, 0x70, 0x38, 0x0, 0x70, 0x70, 0x0, 0x38, 0x70, 0x0, 0x38, 0xf0, 0x0, 0x3c, 0xf0, 0x0, 0x3c, 0xf0, 0x0, 0x3c, 0xf0, 0x0, 0x3c, 0xf0, 0x0, 0x3c, 0xf0, 0x0, 0x3c, 0xf0, 0x0, 0x3c, 0x70, 0x0, 0x38, 0x70, 0x0, 0x38, 0x38, 0x0, 0x70, 0x38, 0x0, 0x70, 0x1c, 0x0, 0xe0, 0xe, 0x1, 0xc0, 0x7, 0x87, 0x80, 0x1, 0xfe, 0x0}
+
+/* P (80) */
+#define NXFONT_METRICS_80 {3, 17, 23, 1, 14, 0}
+#define NXFONT_BITMAP_80 {0xff, 0xf8, 0x0, 0x3c, 0x3e, 0x0, 0x1c, 0xf, 0x0, 0x1c, 0x7, 0x0, 0x1c, 0x7, 0x80, 0x1c, 0x3, 0x80, 0x1c, 0x3, 0x80, 0x1c, 0x3, 0x80, 0x1c, 0x7, 0x80, 0x1c, 0x7, 0x0, 0x1c, 0xf, 0x0, 0x1c, 0x3e, 0x0, 0x1f, 0xf0, 0x0, 0x1c, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x3e, 0x0, 0x0, 0xff, 0x80, 0x0}
+
+/* Q (81) */
+#define NXFONT_METRICS_81 {3, 22, 29, 1, 14, 0}
+#define NXFONT_BITMAP_81 {0x1, 0xfe, 0x0, 0x7, 0x87, 0x80, 0xe, 0x1, 0xc0, 0x1c, 0x0, 0xe0, 0x38, 0x0, 0x70, 0x38, 0x0, 0x70, 0x70, 0x0, 0x38, 0x70, 0x0, 0x38, 0xf0, 0x0, 0x3c, 0xf0, 0x0, 0x3c, 0xf0, 0x0, 0x3c, 0xf0, 0x0, 0x3c, 0xf0, 0x0, 0x3c, 0xf0, 0x0, 0x3c, 0xf0, 0x0, 0x3c, 0x70, 0x0, 0x38, 0x70, 0x0, 0x38, 0x38, 0x0, 0x70, 0x38, 0x0, 0x70, 0x1c, 0x0, 0xe0, 0xe, 0x1, 0xc0, 0x7, 0x87, 0x80, 0x1, 0xfe, 0x0, 0x0, 0x7c, 0x0, 0x0, 0x3e, 0x0, 0x0, 0x1f, 0x0, 0x0, 0xf, 0x80, 0x0, 0x3, 0xe0, 0x0, 0x0, 0x7c}
+
+/* R (82) */
+#define NXFONT_METRICS_82 {3, 21, 23, 1, 14, 0}
+#define NXFONT_BITMAP_82 {0xff, 0xf8, 0x0, 0x3c, 0x3e, 0x0, 0x1c, 0xf, 0x0, 0x1c, 0x7, 0x80, 0x1c, 0x7, 0x80, 0x1c, 0x3, 0x80, 0x1c, 0x3, 0x80, 0x1c, 0x3, 0x80, 0x1c, 0x7, 0x80, 0x1c, 0x7, 0x0, 0x1c, 0x1e, 0x0, 0x1f, 0xf8, 0x0, 0x1c, 0xf0, 0x0, 0x1c, 0x78, 0x0, 0x1c, 0x3c, 0x0, 0x1c, 0x3c, 0x0, 0x1c, 0x1e, 0x0, 0x1c, 0xf, 0x0, 0x1c, 0xf, 0x80, 0x1c, 0x7, 0x80, 0x1c, 0x3, 0xc0, 0x3e, 0x1, 0xe0, 0xff, 0x81, 0xf8}
+
+/* S (83) */
+#define NXFONT_METRICS_83 {2, 15, 23, 1, 14, 0}
+#define NXFONT_BITMAP_83 {0x7, 0xe4, 0x1c, 0x3c, 0x38, 0x1c, 0x70, 0xc, 0x70, 0x4, 0x70, 0x6, 0x78, 0x0, 0x7c, 0x0, 0x3e, 0x0, 0x1f, 0x80, 0xf, 0xe0, 0x7, 0xf0, 0x1, 0xf8, 0x0, 0x7c, 0x0, 0x3e, 0x0, 0x1e, 0x80, 0xe, 0x80, 0xe, 0xc0, 0xe, 0xe0, 0xc, 0x70, 0x1c, 0x7c, 0x78, 0x67, 0xf0}
+
+/* T (84) */
+#define NXFONT_METRICS_84 {3, 19, 23, 1, 14, 0}
+#define NXFONT_BITMAP_84 {0xff, 0xff, 0xe0, 0xf0, 0xe1, 0xe0, 0xc0, 0xe0, 0x60, 0xc0, 0xe0, 0x60, 0x80, 0xe0, 0x20, 0x80, 0xe0, 0x20, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe0, 0x0, 0x1, 0xf0, 0x0, 0x7, 0xfc, 0x0}
+
+/* U (85) */
+#define NXFONT_METRICS_85 {3, 22, 23, 1, 14, 0}
+#define NXFONT_BITMAP_85 {0xff, 0x81, 0xfc, 0x3e, 0x0, 0x70, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1e, 0x0, 0x60, 0xe, 0x0, 0x40, 0xf, 0x0, 0xc0, 0x7, 0xc3, 0x80, 0x1, 0xfe, 0x0}
+
+/* V (86) */
+#define NXFONT_METRICS_86 {3, 22, 23, 1, 14, 0}
+#define NXFONT_BITMAP_86 {0xff, 0x1, 0xfc, 0x7c, 0x0, 0x70, 0x3c, 0x0, 0x60, 0x1e, 0x0, 0x40, 0x1e, 0x0, 0xc0, 0xe, 0x0, 0xc0, 0xf, 0x0, 0x80, 0xf, 0x1, 0x80, 0x7, 0x1, 0x80, 0x7, 0x81, 0x0, 0x3, 0x83, 0x0, 0x3, 0xc3, 0x0, 0x3, 0xc2, 0x0, 0x1, 0xc6, 0x0, 0x1, 0xe6, 0x0, 0x0, 0xe4, 0x0, 0x0, 0xec, 0x0, 0x0, 0x7c, 0x0, 0x0, 0x78, 0x0, 0x0, 0x78, 0x0, 0x0, 0x38, 0x0, 0x0, 0x30, 0x0, 0x0, 0x10, 0x0}
+
+/* W (87) */
+#define NXFONT_METRICS_87 {4, 31, 23, 1, 14, 0}
+#define NXFONT_BITMAP_87 {0xff, 0x3f, 0xe0, 0xfe, 0x7c, 0xf, 0x80, 0x78, 0x3c, 0x7, 0x0, 0x30, 0x1c, 0x7, 0x80, 0x30, 0x1e, 0x7, 0x80, 0x60, 0x1e, 0x3, 0x80, 0x60, 0xe, 0x3, 0xc0, 0x60, 0xf, 0x3, 0xc0, 0xc0, 0x7, 0x3, 0xe0, 0xc0, 0x7, 0x87, 0xe0, 0xc0, 0x7, 0x86, 0xe1, 0x80, 0x3, 0x84, 0xf1, 0x80, 0x3, 0xcc, 0xf1, 0x80, 0x3, 0xcc, 0x73, 0x0, 0x1, 0xd8, 0x7b, 0x0, 0x1, 0xd8, 0x3b, 0x0, 0x1, 0xf8, 0x3e, 0x0, 0x0, 0xf0, 0x3e, 0x0, 0x0, 0xf0, 0x1c, 0x0, 0x0, 0xe0, 0x1c, 0x0, 0x0, 0x60, 0x1c, 0x0, 0x0, 0x60, 0x8, 0x0, 0x0, 0x40, 0x8, 0x0}
+
+/* X (88) */
+#define NXFONT_METRICS_88 {3, 22, 23, 1, 14, 0}
+#define NXFONT_BITMAP_88 {0xff, 0xc3, 0xfc, 0x3f, 0x0, 0xf0, 0x1f, 0x0, 0xe0, 0xf, 0x0, 0xc0, 0x7, 0x81, 0x80, 0x7, 0x83, 0x0, 0x3, 0xc6, 0x0, 0x1, 0xe6, 0x0, 0x1, 0xec, 0x0, 0x0, 0xf8, 0x0, 0x0, 0x78, 0x0, 0x0, 0x78, 0x0, 0x0, 0x7c, 0x0, 0x0, 0xde, 0x0, 0x1, 0x9e, 0x0, 0x1, 0x8f, 0x0, 0x3, 0xf, 0x80, 0x6, 0x7, 0x80, 0xe, 0x3, 0xc0, 0xc, 0x3, 0xe0, 0x18, 0x1, 0xe0, 0x38, 0x1, 0xf0, 0xfe, 0x7, 0xfc}
+
+/* Y (89) */
+#define NXFONT_METRICS_89 {3, 22, 23, 1, 14, 0}
+#define NXFONT_BITMAP_89 {0xff, 0xc0, 0xfc, 0x3f, 0x0, 0x38, 0x1e, 0x0, 0x30, 0xf, 0x0, 0x60, 0xf, 0x80, 0xc0, 0x7, 0x80, 0x80, 0x3, 0xc1, 0x80, 0x3, 0xc3, 0x0, 0x1, 0xe3, 0x0, 0x0, 0xf6, 0x0, 0x0, 0xfc, 0x0, 0x0, 0x7c, 0x0, 0x0, 0x38, 0x0, 0x0, 0x38, 0x0, 0x0, 0x38, 0x0, 0x0, 0x38, 0x0, 0x0, 0x38, 0x0, 0x0, 0x38, 0x0, 0x0, 0x38, 0x0, 0x0, 0x38, 0x0, 0x0, 0x38, 0x0, 0x0, 0x7c, 0x0, 0x1, 0xff, 0x0}
+
+/* Z (90) */
+#define NXFONT_METRICS_90 {3, 19, 23, 1, 14, 0}
+#define NXFONT_BITMAP_90 {0x3f, 0xff, 0xe0, 0x38, 0x3, 0xc0, 0x60, 0x7, 0x80, 0x60, 0x7, 0x80, 0x40, 0xf, 0x0, 0x40, 0x1e, 0x0, 0x0, 0x1e, 0x0, 0x0, 0x3c, 0x0, 0x0, 0x78, 0x0, 0x0, 0x78, 0x0, 0x0, 0xf0, 0x0, 0x1, 0xe0, 0x0, 0x1, 0xe0, 0x0, 0x3, 0xc0, 0x0, 0x3, 0xc0, 0x0, 0x7, 0x80, 0x0, 0xf, 0x0, 0x0, 0xf, 0x0, 0x20, 0x1e, 0x0, 0x20, 0x3c, 0x0, 0x60, 0x3c, 0x0, 0x60, 0x78, 0x1, 0xc0, 0xff, 0xff, 0xc0}
+
+/* bracketleft (91) */
+#define NXFONT_METRICS_91 {1, 7, 28, 3, 14, 0}
+#define NXFONT_BITMAP_91 {0xfe, 0xf0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xf0, 0xfe}
+
+/* backslash (92) -- NOTE: Xoffset should be -2, not 0. */
+#define NXFONT_METRICS_92 {2, 13, 23, 0, 14, 0}
+#define NXFONT_BITMAP_92 {0xc0, 0x0, 0xe0, 0x0, 0x60, 0x0, 0x70, 0x0, 0x30, 0x0, 0x38, 0x0, 0x18, 0x0, 0x1c, 0x0, 0xc, 0x0, 0xe, 0x0, 0x6, 0x0, 0x7, 0x0, 0x3, 0x0, 0x3, 0x80, 0x1, 0x80, 0x1, 0xc0, 0x0, 0xc0, 0x0, 0xe0, 0x0, 0x60, 0x0, 0x70, 0x0, 0x30, 0x0, 0x38, 0x0, 0x18}
+
+/* bracketright (93) */
+#define NXFONT_METRICS_93 {1, 7, 28, 1, 14, 0}
+#define NXFONT_BITMAP_93 {0xfe, 0x1e, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0x1e, 0xfe}
+
+/* asciicircum (94) */
+#define NXFONT_METRICS_94 {2, 13, 13, 1, 14, 0}
+#define NXFONT_BITMAP_94 {0x7, 0x0, 0x7, 0x0, 0xf, 0x80, 0xd, 0x80, 0x18, 0xc0, 0x18, 0xc0, 0x30, 0x60, 0x30, 0x60, 0x70, 0x70, 0x60, 0x30, 0xe0, 0x38, 0xc0, 0x18, 0xc0, 0x18}
+
+/* underscore (95) */
+#define NXFONT_METRICS_95 {3, 17, 2, 0, 40, 0}
+#define NXFONT_BITMAP_95 {0xff, 0xff, 0x80, 0xff, 0xff, 0x80}
+
+/* grave (96) */
+#define NXFONT_METRICS_96 {1, 7, 6, 1, 14, 0}
+#define NXFONT_BITMAP_96 {0xc0, 0xe0, 0x70, 0x18, 0xc, 0x6}
+
+/* a (97) */
+#define NXFONT_METRICS_97 {2, 13, 15, 1, 22, 0}
+#define NXFONT_BITMAP_97 {0x1f, 0x80, 0x31, 0xc0, 0x70, 0xe0, 0x70, 0xe0, 0x60, 0xe0, 0x3, 0xe0, 0xe, 0xe0, 0x18, 0xe0, 0x30, 0xe0, 0x60, 0xe0, 0xe0, 0xe0, 0xe1, 0xe0, 0xf2, 0xe8, 0x7e, 0xf8, 0x3c, 0x70}
+
+/* b (98) */
+#define NXFONT_METRICS_98 {2, 15, 23, 0, 14, 0}
+#define NXFONT_BITMAP_98 {0x18, 0x0, 0xf8, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x39, 0xf0, 0x3b, 0xf8, 0x3c, 0x7c, 0x38, 0x1c, 0x38, 0x1e, 0x38, 0xe, 0x38, 0xe, 0x38, 0xe, 0x38, 0xe, 0x38, 0xe, 0x38, 0xc, 0x38, 0x1c, 0x38, 0x18, 0x3c, 0x70, 0xf, 0xe0}
+
+/* c (99) */
+#define NXFONT_METRICS_99 {2, 12, 15, 1, 22, 0}
+#define NXFONT_BITMAP_99 {0xf, 0x80, 0x38, 0xc0, 0x70, 0xe0, 0x60, 0xe0, 0xe0, 0x60, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xe0, 0x0, 0xe0, 0x10, 0x70, 0x30, 0x7c, 0x60, 0x3f, 0xc0, 0x1f, 0x0}
+
+/* d (100) */
+#define NXFONT_METRICS_100 {2, 15, 23, 1, 14, 0}
+#define NXFONT_BITMAP_100 {0x0, 0x18, 0x0, 0xf8, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0xf, 0xb8, 0x18, 0xf8, 0x30, 0x78, 0x70, 0x38, 0x60, 0x38, 0xe0, 0x38, 0xe0, 0x38, 0xe0, 0x38, 0xe0, 0x38, 0xe0, 0x38, 0xf0, 0x38, 0x70, 0x78, 0x78, 0xf8, 0x3f, 0xbe, 0xf, 0x30}
+
+/* e (101) */
+#define NXFONT_METRICS_101 {2, 12, 15, 1, 22, 0}
+#define NXFONT_BITMAP_101 {0xf, 0x80, 0x39, 0xc0, 0x60, 0xe0, 0x60, 0x70, 0xc0, 0x70, 0xff, 0xf0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xe0, 0x0, 0xe0, 0x10, 0x70, 0x30, 0x7c, 0x60, 0x3f, 0xc0, 0xf, 0x0}
+
+/* f (102) */
+#define NXFONT_METRICS_102 {2, 12, 23, 0, 14, 0}
+#define NXFONT_BITMAP_102 {0x3, 0xe0, 0x6, 0x70, 0xc, 0x70, 0xc, 0x30, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0xff, 0xc0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x3e, 0x0, 0xff, 0x80}
+
+/* g (103) */
+#define NXFONT_METRICS_103 {2, 14, 22, 1, 22, 0}
+#define NXFONT_BITMAP_103 {0xf, 0xc0, 0x18, 0xfc, 0x30, 0x7c, 0x70, 0x30, 0x70, 0x30, 0x70, 0x30, 0x70, 0x30, 0x38, 0x70, 0x1c, 0xe0, 0xf, 0x80, 0x18, 0x0, 0x30, 0x0, 0x78, 0x0, 0x7f, 0xe0, 0x3f, 0xf8, 0x1f, 0xfc, 0x60, 0xc, 0xc0, 0xc, 0xc0, 0x1c, 0xf0, 0x38, 0x7f, 0xe0, 0x1f, 0x80}
+
+/* h (104) */
+#define NXFONT_METRICS_104 {2, 16, 23, 0, 14, 0}
+#define NXFONT_BITMAP_104 {0x18, 0x0, 0xf8, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x39, 0xf0, 0x3b, 0xf8, 0x3e, 0x3c, 0x3c, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0xfe, 0x7f}
+
+/* i (105) */
+#define NXFONT_METRICS_105 {1, 7, 23, 1, 14, 0}
+#define NXFONT_BITMAP_105 {0x38, 0x38, 0x38, 0x0, 0x0, 0x0, 0x0, 0x0, 0x38, 0xf8, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0xfe}
+
+/* j (106) -- NOTE: Xoffset should be -1, not 0. */
+#define NXFONT_METRICS_106 {1, 8, 30, 0, 14, 0}
+#define NXFONT_BITMAP_106 {0x7, 0x7, 0x7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x1f, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x6, 0xc6, 0xec, 0x78}
+
+/* k (107) */
+#define NXFONT_METRICS_107 {2, 16, 23, 0, 14, 0}
+#define NXFONT_BITMAP_107 {0x18, 0x0, 0xf8, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0xfe, 0x38, 0x70, 0x38, 0x60, 0x38, 0xc0, 0x39, 0x80, 0x3f, 0x0, 0x3e, 0x0, 0x3f, 0x0, 0x3b, 0x80, 0x39, 0xc0, 0x38, 0xe0, 0x38, 0xf0, 0x38, 0x78, 0x38, 0x3c, 0xfe, 0x7f}
+
+/* l (108) */
+#define NXFONT_METRICS_108 {1, 7, 23, 1, 14, 0}
+#define NXFONT_BITMAP_108 {0x18, 0xf8, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0xfe}
+
+/* m (109) */
+#define NXFONT_METRICS_109 {4, 25, 15, 0, 22, 0}
+#define NXFONT_BITMAP_109 {0x18, 0xf0, 0x78, 0x0, 0xfb, 0xf9, 0xfc, 0x0, 0x3e, 0x3f, 0x1e, 0x0, 0x3c, 0x1e, 0xe, 0x0, 0x38, 0x1c, 0xe, 0x0, 0x38, 0x1c, 0xe, 0x0, 0x38, 0x1c, 0xe, 0x0, 0x38, 0x1c, 0xe, 0x0, 0x38, 0x1c, 0xe, 0x0, 0x38, 0x1c, 0xe, 0x0, 0x38, 0x1c, 0xe, 0x0, 0x38, 0x1c, 0xe, 0x0, 0x38, 0x1c, 0xe, 0x0, 0x38, 0x1c, 0xe, 0x0, 0xfe, 0x7f, 0x3f, 0x80}
+
+/* n (110) */
+#define NXFONT_METRICS_110 {2, 16, 15, 0, 22, 0}
+#define NXFONT_BITMAP_110 {0x18, 0xf0, 0xfb, 0xf8, 0x3c, 0x3c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0xfe, 0x7f}
+
+/* o (111) */
+#define NXFONT_METRICS_111 {2, 14, 15, 1, 22, 0}
+#define NXFONT_BITMAP_111 {0x7, 0x80, 0x18, 0xe0, 0x30, 0x70, 0x70, 0x38, 0x60, 0x38, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0x70, 0x18, 0x70, 0x38, 0x38, 0x30, 0x1c, 0x60, 0x7, 0x80}
+
+/* p (112) */
+#define NXFONT_METRICS_112 {2, 15, 22, 0, 22, 0}
+#define NXFONT_BITMAP_112 {0x19, 0xe0, 0xfb, 0xf8, 0x3c, 0x7c, 0x38, 0x1c, 0x38, 0x1e, 0x38, 0xe, 0x38, 0xe, 0x38, 0xe, 0x38, 0xe, 0x38, 0xe, 0x38, 0xc, 0x38, 0x1c, 0x3c, 0x18, 0x3e, 0x70, 0x3b, 0xc0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0xff, 0x0}
+
+/* q (113) */
+#define NXFONT_METRICS_113 {2, 15, 22, 1, 22, 0}
+#define NXFONT_BITMAP_113 {0xf, 0xc8, 0x1c, 0x78, 0x30, 0x38, 0x70, 0x38, 0x60, 0x38, 0xe0, 0x38, 0xe0, 0x38, 0xe0, 0x38, 0xe0, 0x38, 0xe0, 0x38, 0xf0, 0x38, 0x70, 0x78, 0x78, 0xf8, 0x3f, 0xb8, 0x1f, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x1, 0xfe}
+
+/* r (114) */
+#define NXFONT_METRICS_114 {2, 10, 15, 1, 22, 0}
+#define NXFONT_BITMAP_114 {0x19, 0x80, 0xfb, 0xc0, 0x3f, 0xc0, 0x3c, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0xfe, 0x0}
+
+/* s (115) */
+#define NXFONT_METRICS_115 {2, 10, 15, 1, 22, 0}
+#define NXFONT_BITMAP_115 {0x3e, 0x80, 0x63, 0x80, 0xc1, 0x80, 0xc0, 0x80, 0xe0, 0x80, 0xf0, 0x0, 0x7c, 0x0, 0x3f, 0x0, 0xf, 0x80, 0x3, 0xc0, 0x81, 0xc0, 0x80, 0xc0, 0xc0, 0xc0, 0xe1, 0x80, 0xbf, 0x0}
+
+/* t (116) */
+#define NXFONT_METRICS_116 {2, 9, 19, 0, 18, 0}
+#define NXFONT_BITMAP_116 {0x8, 0x0, 0x8, 0x0, 0x18, 0x0, 0x38, 0x0, 0xff, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x80, 0x3f, 0x0, 0x1c, 0x0}
+
+/* u (117) */
+#define NXFONT_METRICS_117 {2, 16, 15, 0, 22, 0}
+#define NXFONT_BITMAP_117 {0xf8, 0x7c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x3c, 0x3c, 0x5c, 0x1f, 0xdf, 0xf, 0x8c}
+
+/* v (118) */
+#define NXFONT_METRICS_118 {2, 15, 15, 1, 22, 0}
+#define NXFONT_BITMAP_118 {0xfe, 0x3e, 0x78, 0xc, 0x38, 0x8, 0x3c, 0x18, 0x1c, 0x18, 0x1c, 0x10, 0xe, 0x30, 0xe, 0x20, 0x7, 0x60, 0x7, 0x40, 0x7, 0xc0, 0x3, 0xc0, 0x3, 0x80, 0x1, 0x80, 0x1, 0x0}
+
+/* w (119) */
+#define NXFONT_METRICS_119 {3, 21, 15, 1, 22, 0}
+#define NXFONT_BITMAP_119 {0xfd, 0xfc, 0x78, 0x70, 0x70, 0x30, 0x70, 0x70, 0x30, 0x38, 0x30, 0x20, 0x38, 0x38, 0x60, 0x18, 0x38, 0x40, 0x1c, 0x78, 0x40, 0x1c, 0x5c, 0xc0, 0xc, 0xcc, 0x80, 0xe, 0x8f, 0x80, 0xf, 0x8f, 0x0, 0x7, 0x7, 0x0, 0x7, 0x7, 0x0, 0x3, 0x6, 0x0, 0x2, 0x2, 0x0}
+
+/* x (120) */
+#define NXFONT_METRICS_120 {2, 14, 15, 1, 22, 0}
+#define NXFONT_BITMAP_120 {0xfc, 0xf8, 0x38, 0x60, 0x3c, 0xc0, 0x1c, 0x80, 0x1e, 0x80, 0xf, 0x0, 0x7, 0x0, 0x7, 0x80, 0xf, 0x80, 0xb, 0xc0, 0x19, 0xe0, 0x10, 0xe0, 0x30, 0x70, 0x60, 0x78, 0xf0, 0xfc}
+
+/* y (121) */
+#define NXFONT_METRICS_121 {2, 15, 22, 1, 22, 0}
+#define NXFONT_BITMAP_121 {0xfe, 0x1e, 0x78, 0xc, 0x38, 0xc, 0x3c, 0x8, 0x1c, 0x18, 0x1e, 0x18, 0xe, 0x10, 0xe, 0x30, 0x7, 0x20, 0x7, 0x20, 0x3, 0xe0, 0x3, 0xc0, 0x1, 0xc0, 0x1, 0x80, 0x1, 0x80, 0x1, 0x0, 0x1, 0x0, 0x3, 0x0, 0x2, 0x0, 0x3e, 0x0, 0x7c, 0x0, 0x38, 0x0}
+
+/* z (122) */
+#define NXFONT_METRICS_122 {2, 13, 15, 1, 22, 0}
+#define NXFONT_BITMAP_122 {0x7f, 0xf0, 0x60, 0xf0, 0x40, 0xe0, 0x41, 0xe0, 0x3, 0xc0, 0x3, 0x80, 0x7, 0x80, 0x7, 0x0, 0xe, 0x0, 0x1e, 0x0, 0x1c, 0x8, 0x38, 0x8, 0x78, 0x8, 0x70, 0x18, 0xff, 0xf0}
+
+/* braceleft (123) */
+#define NXFONT_METRICS_123 {1, 8, 28, 4, 14, 0}
+#define NXFONT_BITMAP_123 {0xf, 0x1c, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x30, 0xe0, 0x30, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x18, 0x1c, 0xf}
+
+/* bar (124) */
+#define NXFONT_METRICS_124 {1, 2, 23, 2, 14, 0}
+#define NXFONT_BITMAP_124 {0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* braceright (125) */
+#define NXFONT_METRICS_125 {1, 8, 28, 4, 14, 0}
+#define NXFONT_BITMAP_125 {0xf0, 0x38, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0xc, 0x7, 0xc, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x18, 0x38, 0xf0}
+
+/* asciitilde (126) */
+#define NXFONT_METRICS_126 {2, 16, 4, 1, 26, 0}
+#define NXFONT_BITMAP_126 {0x3e, 0x3, 0x7f, 0x87, 0xe1, 0xfe, 0xc0, 0x7c}
+
+/* exclamdown (161) */
+#define NXFONT_METRICS_161 {1, 4, 22, 3, 22, 0}
+#define NXFONT_BITMAP_161 {0x60, 0xf0, 0xf0, 0x60, 0x0, 0x0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xf0, 0xf0, 0xf0, 0xf0, 0x60}
+
+/* cent (162) */
+#define NXFONT_METRICS_162 {2, 12, 23, 2, 18, 0}
+#define NXFONT_BITMAP_162 {0x0, 0x40, 0x0, 0x40, 0x0, 0x80, 0x0, 0x80, 0xf, 0x80, 0x38, 0xe0, 0x71, 0x70, 0x61, 0x70, 0xe1, 0x30, 0xc3, 0x0, 0xc2, 0x0, 0xc2, 0x0, 0xe6, 0x0, 0xe4, 0x0, 0x74, 0x10, 0x7c, 0x30, 0x3f, 0xe0, 0x1f, 0xc0, 0x1f, 0x0, 0x10, 0x0, 0x30, 0x0, 0x20, 0x0, 0x20, 0x0}
+
+/* sterling (163) */
+#define NXFONT_METRICS_163 {2, 15, 23, 1, 14, 0}
+#define NXFONT_BITMAP_163 {0x1, 0xf0, 0x3, 0x98, 0x6, 0x1c, 0x6, 0x1c, 0xe, 0x18, 0xe, 0x0, 0xe, 0x0, 0xe, 0x0, 0xe, 0x0, 0xe, 0x0, 0xff, 0xe0, 0xff, 0xe0, 0xf, 0x0, 0x7, 0x0, 0x7, 0x0, 0x7, 0x0, 0x7, 0x0, 0x6, 0x0, 0x6, 0x2, 0x7e, 0x6, 0xc7, 0xfc, 0xcf, 0xf8, 0x78, 0xf0}
+
+/* currency (164) */
+#define NXFONT_METRICS_164 {2, 16, 17, 0, 17, 0}
+#define NXFONT_BITMAP_164 {0xc7, 0xe3, 0xff, 0xff, 0x3e, 0x7c, 0x78, 0x1e, 0x70, 0xe, 0xe0, 0x7, 0xe0, 0x7, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xe0, 0x7, 0xe0, 0x7, 0x70, 0xe, 0x78, 0x1e, 0x3e, 0x7c, 0xff, 0xff, 0xc7, 0xe3}
+
+/* yen (165) */
+#define NXFONT_METRICS_165 {3, 17, 23, 0, 14, 0}
+#define NXFONT_BITMAP_165 {0xfe, 0x1f, 0x80, 0x78, 0x7, 0x0, 0x38, 0x6, 0x0, 0x3c, 0x4, 0x0, 0x1c, 0xc, 0x0, 0x1e, 0x8, 0x0, 0xe, 0x18, 0x0, 0xf, 0x10, 0x0, 0x7, 0x30, 0x0, 0x7, 0xa0, 0x0, 0x3, 0xe0, 0x0, 0x3, 0xc0, 0x0, 0x3f, 0xfe, 0x0, 0x1, 0xc0, 0x0, 0x1, 0xc0, 0x0, 0x1, 0xc0, 0x0, 0x3f, 0xfe, 0x0, 0x1, 0xc0, 0x0, 0x1, 0xc0, 0x0, 0x1, 0xc0, 0x0, 0x1, 0xc0, 0x0, 0x1, 0xc0, 0x0, 0x7, 0xf0, 0x0}
+
+/* brokenbar (166) */
+#define NXFONT_METRICS_166 {1, 2, 23, 2, 14, 0}
+#define NXFONT_BITMAP_166 {0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* section (167) */
+#define NXFONT_METRICS_167 {2, 12, 28, 2, 14, 0}
+#define NXFONT_BITMAP_167 {0x1f, 0x80, 0x31, 0xc0, 0x61, 0xc0, 0x61, 0xc0, 0x71, 0x80, 0x38, 0x0, 0x3c, 0x0, 0x1e, 0x0, 0xf, 0x0, 0x3f, 0x80, 0x63, 0xc0, 0xc1, 0xe0, 0xc0, 0xe0, 0xc0, 0x70, 0xe0, 0x30, 0x70, 0x30, 0x78, 0x30, 0x3c, 0x60, 0x1f, 0xc0, 0xf, 0x0, 0x7, 0x80, 0x3, 0xc0, 0x1, 0xc0, 0x18, 0xe0, 0x38, 0x60, 0x38, 0x60, 0x38, 0xc0, 0x1f, 0x80}
+
+/* dieresis (168) */
+#define NXFONT_METRICS_168 {2, 9, 3, 1, 16, 0}
+#define NXFONT_BITMAP_168 {0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80}
+
+/* copyright (169) */
+#define NXFONT_METRICS_169 {3, 22, 23, 1, 14, 0}
+#define NXFONT_BITMAP_169 {0x0, 0xfc, 0x0, 0x3, 0xff, 0x0, 0xe, 0x1, 0xc0, 0x18, 0x0, 0x60, 0x30, 0x0, 0x30, 0x60, 0x0, 0x18, 0x60, 0x7f, 0x18, 0xc1, 0xc7, 0xc, 0xc3, 0x83, 0xc, 0xc3, 0x1, 0xc, 0xc7, 0x0, 0xc, 0xc7, 0x0, 0xc, 0xc7, 0x0, 0xc, 0xc7, 0x0, 0xc, 0xc7, 0x80, 0xc, 0x43, 0x81, 0x18, 0x61, 0xe6, 0x18, 0x60, 0x7c, 0x30, 0x30, 0x0, 0x30, 0x18, 0x0, 0x60, 0xe, 0x1, 0xc0, 0x7, 0xff, 0x0, 0x1, 0xfc, 0x0}
+
+/* ordfeminine (170) */
+#define NXFONT_METRICS_170 {2, 9, 13, 0, 14, 0}
+#define NXFONT_BITMAP_170 {0x3c, 0x0, 0x4e, 0x0, 0xc6, 0x0, 0xc6, 0x0, 0x1e, 0x0, 0x66, 0x0, 0xc6, 0x0, 0xc6, 0x0, 0xef, 0x80, 0x7b, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0}
+
+/* guillemotleft (171) */
+#define NXFONT_METRICS_171 {2, 13, 13, 1, 23, 0}
+#define NXFONT_BITMAP_171 {0x2, 0x8, 0x6, 0x18, 0xc, 0x30, 0x18, 0x60, 0x38, 0xe0, 0x71, 0xc0, 0xe3, 0x80, 0x71, 0xc0, 0x38, 0xe0, 0x18, 0x60, 0xc, 0x30, 0x6, 0x18, 0x2, 0x8}
+
+/* logicalnot (172) */
+#define NXFONT_METRICS_172 {2, 16, 9, 1, 24, 0}
+#define NXFONT_BITMAP_172 {0xff, 0xff, 0xff, 0xff, 0x0, 0x3, 0x0, 0x3, 0x0, 0x3, 0x0, 0x3, 0x0, 0x3, 0x0, 0x3, 0x0, 0x3}
+
+/* hyphen (173) */
+#define NXFONT_METRICS_173 {1, 8, 2, 1, 28, 0}
+#define NXFONT_BITMAP_173 {0xff, 0xff}
+
+/* registered (174) */
+#define NXFONT_METRICS_174 {3, 22, 23, 1, 14, 0}
+#define NXFONT_BITMAP_174 {0x0, 0xfe, 0x0, 0x3, 0xff, 0x0, 0xe, 0x1, 0xc0, 0x18, 0x0, 0x60, 0x30, 0x0, 0x30, 0x23, 0xfc, 0x18, 0x60, 0xc7, 0x18, 0xc0, 0xc3, 0xc, 0xc0, 0xc3, 0xc, 0xc0, 0xc3, 0xc, 0xc0, 0xc6, 0xc, 0xc0, 0xf8, 0xc, 0xc0, 0xdc, 0xc, 0xc0, 0xcc, 0xc, 0xc0, 0xce, 0xc, 0x40, 0xc6, 0x8, 0x60, 0xc7, 0x18, 0x23, 0xe3, 0xd0, 0x30, 0x0, 0x30, 0x18, 0x0, 0x60, 0xe, 0x1, 0xc0, 0x3, 0xff, 0x0, 0x0, 0xfc, 0x0}
+
+/* macron (175) */
+#define NXFONT_METRICS_175 {2, 10, 2, 0, 17, 0}
+#define NXFONT_BITMAP_175 {0xff, 0xc0, 0xff, 0xc0}
+
+/* degree (176) */
+#define NXFONT_METRICS_176 {2, 10, 10, 1, 14, 0}
+#define NXFONT_BITMAP_176 {0x1e, 0x0, 0x3f, 0x0, 0x61, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x61, 0x80, 0x3f, 0x0, 0x1e, 0x0}
+
+/* plusminus (177) */
+#define NXFONT_METRICS_177 {2, 16, 20, 1, 17, 0}
+#define NXFONT_BITMAP_177 {0x1, 0x80, 0x1, 0x80, 0x1, 0x80, 0x1, 0x80, 0x1, 0x80, 0x1, 0x80, 0x1, 0x80, 0xff, 0xff, 0xff, 0xff, 0x1, 0x80, 0x1, 0x80, 0x1, 0x80, 0x1, 0x80, 0x1, 0x80, 0x1, 0x80, 0x1, 0x80, 0x1, 0x80, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff}
+
+/* twosuperior (178) */
+#define NXFONT_METRICS_178 {2, 9, 14, 0, 14, 0}
+#define NXFONT_BITMAP_178 {0x3c, 0x0, 0x4e, 0x0, 0x87, 0x0, 0x3, 0x0, 0x3, 0x0, 0x7, 0x0, 0x6, 0x0, 0xc, 0x0, 0x18, 0x0, 0x10, 0x0, 0x20, 0x0, 0x40, 0x80, 0xff, 0x0, 0xfe, 0x0}
+
+/* threesuperior (179) */
+#define NXFONT_METRICS_179 {2, 9, 14, 0, 14, 0}
+#define NXFONT_BITMAP_179 {0x3e, 0x0, 0x47, 0x0, 0x83, 0x0, 0x3, 0x0, 0x3, 0x0, 0x6, 0x0, 0x3c, 0x0, 0x7, 0x0, 0x3, 0x80, 0x1, 0x80, 0x1, 0x80, 0xc1, 0x80, 0xe3, 0x0, 0x7e, 0x0}
+
+/* acute (180) */
+#define NXFONT_METRICS_180 {1, 7, 6, 3, 14, 0}
+#define NXFONT_BITMAP_180 {0x6, 0xe, 0x1c, 0x30, 0x60, 0xc0}
+
+/* mu (181) */
+#define NXFONT_METRICS_181 {2, 16, 22, 0, 22, 0}
+#define NXFONT_BITMAP_181 {0xf8, 0x7c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x3c, 0x3c, 0x7c, 0x3f, 0xdf, 0x2f, 0x98, 0x20, 0x0, 0x70, 0x0, 0x70, 0x0, 0x70, 0x0, 0x70, 0x0, 0x70, 0x0, 0x20, 0x0}
+
+/* paragraph (182) */
+#define NXFONT_METRICS_182 {2, 13, 29, 1, 14, 0}
+#define NXFONT_BITMAP_182 {0x7, 0xf8, 0x1e, 0x20, 0x3e, 0x20, 0x7e, 0x20, 0x7e, 0x20, 0xfe, 0x20, 0xfe, 0x20, 0xfe, 0x20, 0xfe, 0x20, 0x7e, 0x20, 0x7e, 0x20, 0x3e, 0x20, 0x1e, 0x20, 0xe, 0x20, 0x2, 0x20, 0x2, 0x20, 0x2, 0x20, 0x2, 0x20, 0x2, 0x20, 0x2, 0x20, 0x2, 0x20, 0x2, 0x20, 0x2, 0x20, 0x2, 0x20, 0x2, 0x20, 0x2, 0x20, 0x2, 0x20, 0x2, 0x20, 0x2, 0x20}
+
+/* periodcentered (183) */
+#define NXFONT_METRICS_183 {1, 4, 4, 2, 26, 0}
+#define NXFONT_BITMAP_183 {0x60, 0xf0, 0xf0, 0x60}
+
+/* cedilla (184) */
+#define NXFONT_METRICS_184 {1, 6, 7, 2, 37, 0}
+#define NXFONT_BITMAP_184 {0x20, 0x60, 0x78, 0x1c, 0xc, 0x1c, 0xf8}
+
+/* onesuperior (185) */
+#define NXFONT_METRICS_185 {1, 6, 14, 2, 14, 0}
+#define NXFONT_BITMAP_185 {0x30, 0xf0, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0xfc}
+
+/* ordmasculine (186) */
+#define NXFONT_METRICS_186 {2, 9, 13, 0, 14, 0}
+#define NXFONT_BITMAP_186 {0x3e, 0x0, 0x63, 0x0, 0xc3, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xe1, 0x80, 0x63, 0x0, 0x3e, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x80}
+
+/* guillemotright (187) */
+#define NXFONT_METRICS_187 {2, 13, 13, 2, 23, 0}
+#define NXFONT_BITMAP_187 {0x82, 0x0, 0xc3, 0x0, 0x61, 0x80, 0x30, 0xc0, 0x38, 0xe0, 0x1c, 0x70, 0xe, 0x38, 0x1c, 0x70, 0x38, 0xe0, 0x30, 0xc0, 0x61, 0x80, 0xc3, 0x0, 0x82, 0x0}
+
+/* onequarter (188) */
+#define NXFONT_METRICS_188 {3, 22, 23, 2, 14, 0}
+#define NXFONT_BITMAP_188 {0x30, 0x0, 0x60, 0xf0, 0x0, 0x60, 0x30, 0x0, 0xc0, 0x30, 0x1, 0xc0, 0x30, 0x1, 0x80, 0x30, 0x3, 0x0, 0x30, 0x3, 0x0, 0x30, 0x6, 0x0, 0x30, 0xe, 0x0, 0x30, 0xc, 0x10, 0x30, 0x18, 0x30, 0x30, 0x18, 0x70, 0x30, 0x30, 0x70, 0xfc, 0x60, 0xf0, 0x0, 0x61, 0xb0, 0x0, 0xc1, 0x30, 0x1, 0xc2, 0x30, 0x1, 0x86, 0x30, 0x3, 0xc, 0x30, 0x3, 0x1f, 0xfc, 0x6, 0x0, 0x30, 0xc, 0x0, 0x30, 0xc, 0x0, 0x30}
+
+/* onehalf (189) */
+#define NXFONT_METRICS_189 {3, 23, 23, 1, 14, 0}
+#define NXFONT_BITMAP_189 {0x30, 0x0, 0xc0, 0xf0, 0x0, 0xc0, 0x30, 0x1, 0x80, 0x30, 0x3, 0x80, 0x30, 0x3, 0x0, 0x30, 0x6, 0x0, 0x30, 0x6, 0x0, 0x30, 0xc, 0x0, 0x30, 0x1c, 0x0, 0x30, 0x18, 0xf0, 0x30, 0x31, 0x38, 0x30, 0x32, 0x1c, 0x30, 0x60, 0xc, 0xfc, 0xe0, 0xc, 0x0, 0xc0, 0x1c, 0x1, 0x80, 0x18, 0x3, 0x80, 0x30, 0x3, 0x0, 0x60, 0x6, 0x0, 0x40, 0x6, 0x0, 0x80, 0xc, 0x1, 0x2, 0x18, 0x3, 0xfc, 0x18, 0x3, 0xf8}
+
+/* threequarters (190) */
+#define NXFONT_METRICS_190 {3, 24, 23, 0, 14, 0}
+#define NXFONT_BITMAP_190 {0x3e, 0x0, 0x18, 0x47, 0x0, 0x18, 0x83, 0x0, 0x30, 0x3, 0x0, 0x70, 0x3, 0x0, 0x60, 0x6, 0x0, 0xc0, 0x3c, 0x0, 0xc0, 0x7, 0x1, 0x80, 0x3, 0x83, 0x80, 0x1, 0x83, 0x4, 0x1, 0x86, 0xc, 0xc1, 0x86, 0x1c, 0xe3, 0xc, 0x1c, 0x7e, 0x18, 0x3c, 0x0, 0x18, 0x6c, 0x0, 0x30, 0x4c, 0x0, 0x70, 0x8c, 0x0, 0x61, 0x8c, 0x0, 0xc3, 0xc, 0x0, 0xc7, 0xff, 0x1, 0x80, 0xc, 0x3, 0x0, 0xc, 0x3, 0x0, 0xc}
+
+/* questiondown (191) */
+#define NXFONT_METRICS_191 {2, 11, 22, 1, 22, 0}
+#define NXFONT_BITMAP_191 {0x6, 0x0, 0xf, 0x0, 0xf, 0x0, 0x6, 0x0, 0x0, 0x0, 0x2, 0x0, 0x2, 0x0, 0x6, 0x0, 0x4, 0x0, 0xc, 0x0, 0x18, 0x0, 0x38, 0x0, 0x30, 0x0, 0x70, 0x0, 0x70, 0x0, 0xe0, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0x70, 0x60, 0x70, 0x60, 0x39, 0xc0, 0x1f, 0x0}
+
+/* Agrave (192) */
+#define NXFONT_METRICS_192 {3, 22, 30, 1, 7, 0}
+#define NXFONT_BITMAP_192 {0x6, 0x0, 0x0, 0x7, 0x0, 0x0, 0x3, 0x80, 0x0, 0x0, 0xc0, 0x0, 0x0, 0x60, 0x0, 0x0, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x30, 0x0, 0x0, 0x30, 0x0, 0x0, 0x70, 0x0, 0x0, 0x78, 0x0, 0x0, 0x78, 0x0, 0x0, 0xfc, 0x0, 0x0, 0xdc, 0x0, 0x0, 0x9c, 0x0, 0x1, 0x8e, 0x0, 0x1, 0xe, 0x0, 0x3, 0xf, 0x0, 0x3, 0x7, 0x0, 0x2, 0x7, 0x0, 0x6, 0x7, 0x80, 0x6, 0x3, 0x80, 0xf, 0xff, 0xc0, 0xc, 0x3, 0xc0, 0x18, 0x1, 0xc0, 0x18, 0x1, 0xe0, 0x30, 0x1, 0xe0, 0x30, 0x0, 0xf0, 0x70, 0x0, 0xf0, 0xfc, 0x3, 0xfc}
+
+/* Aacute (193) */
+#define NXFONT_METRICS_193 {3, 22, 30, 1, 7, 0}
+#define NXFONT_BITMAP_193 {0x0, 0x1, 0x80, 0x0, 0x3, 0x80, 0x0, 0x7, 0x0, 0x0, 0xc, 0x0, 0x0, 0x18, 0x0, 0x0, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x30, 0x0, 0x0, 0x30, 0x0, 0x0, 0x70, 0x0, 0x0, 0x78, 0x0, 0x0, 0x78, 0x0, 0x0, 0xfc, 0x0, 0x0, 0xdc, 0x0, 0x0, 0x9c, 0x0, 0x1, 0x8e, 0x0, 0x1, 0xe, 0x0, 0x3, 0xf, 0x0, 0x3, 0x7, 0x0, 0x2, 0x7, 0x0, 0x6, 0x7, 0x80, 0x6, 0x3, 0x80, 0xf, 0xff, 0xc0, 0xc, 0x3, 0xc0, 0x18, 0x1, 0xc0, 0x18, 0x1, 0xe0, 0x30, 0x1, 0xe0, 0x30, 0x0, 0xf0, 0x70, 0x0, 0xf0, 0xfc, 0x3, 0xfc}
+
+/* Acircumflex (194) */
+#define NXFONT_METRICS_194 {3, 22, 30, 1, 7, 0}
+#define NXFONT_BITMAP_194 {0x0, 0x30, 0x0, 0x0, 0x78, 0x0, 0x0, 0xfc, 0x0, 0x1, 0xce, 0x0, 0x3, 0x3, 0x0, 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x30, 0x0, 0x0, 0x30, 0x0, 0x0, 0x70, 0x0, 0x0, 0x78, 0x0, 0x0, 0x78, 0x0, 0x0, 0xfc, 0x0, 0x0, 0xdc, 0x0, 0x0, 0x9c, 0x0, 0x1, 0x8e, 0x0, 0x1, 0xe, 0x0, 0x3, 0xf, 0x0, 0x3, 0x7, 0x0, 0x2, 0x7, 0x0, 0x6, 0x7, 0x80, 0x6, 0x3, 0x80, 0xf, 0xff, 0xc0, 0xc, 0x3, 0xc0, 0x18, 0x1, 0xc0, 0x18, 0x1, 0xe0, 0x30, 0x1, 0xe0, 0x30, 0x0, 0xf0, 0x70, 0x0, 0xf0, 0xfc, 0x3, 0xfc}
+
+/* Atilde (195) */
+#define NXFONT_METRICS_195 {3, 22, 28, 1, 9, 0}
+#define NXFONT_BITMAP_195 {0x0, 0xe0, 0x80, 0x1, 0xf9, 0x80, 0x3, 0x3f, 0x0, 0x2, 0xe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x30, 0x0, 0x0, 0x30, 0x0, 0x0, 0x70, 0x0, 0x0, 0x78, 0x0, 0x0, 0x78, 0x0, 0x0, 0xfc, 0x0, 0x0, 0xdc, 0x0, 0x0, 0x9c, 0x0, 0x1, 0x8e, 0x0, 0x1, 0xe, 0x0, 0x3, 0xf, 0x0, 0x3, 0x7, 0x0, 0x2, 0x7, 0x0, 0x6, 0x7, 0x80, 0x6, 0x3, 0x80, 0xf, 0xff, 0xc0, 0xc, 0x3, 0xc0, 0x18, 0x1, 0xc0, 0x18, 0x1, 0xe0, 0x30, 0x1, 0xe0, 0x30, 0x0, 0xf0, 0x70, 0x0, 0xf0, 0xfc, 0x3, 0xfc}
+
+/* Adieresis (196) */
+#define NXFONT_METRICS_196 {3, 22, 28, 1, 9, 0}
+#define NXFONT_BITMAP_196 {0x1, 0xc7, 0x0, 0x1, 0xc7, 0x0, 0x1, 0xc7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x30, 0x0, 0x0, 0x30, 0x0, 0x0, 0x70, 0x0, 0x0, 0x78, 0x0, 0x0, 0x78, 0x0, 0x0, 0xfc, 0x0, 0x0, 0xdc, 0x0, 0x0, 0x9c, 0x0, 0x1, 0x8e, 0x0, 0x1, 0xe, 0x0, 0x3, 0xf, 0x0, 0x3, 0x7, 0x0, 0x2, 0x7, 0x0, 0x6, 0x7, 0x80, 0x6, 0x3, 0x80, 0xf, 0xff, 0xc0, 0xc, 0x3, 0xc0, 0x18, 0x1, 0xc0, 0x18, 0x1, 0xe0, 0x30, 0x1, 0xe0, 0x30, 0x0, 0xf0, 0x70, 0x0, 0xf0, 0xfc, 0x3, 0xfc}
+
+/* Aring (197) */
+#define NXFONT_METRICS_197 {3, 22, 30, 1, 7, 0}
+#define NXFONT_BITMAP_197 {0x0, 0x70, 0x0, 0x0, 0xf8, 0x0, 0x1, 0x8c, 0x0, 0x1, 0x4, 0x0, 0x1, 0x8c, 0x0, 0x0, 0xf8, 0x0, 0x0, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x30, 0x0, 0x0, 0x30, 0x0, 0x0, 0x78, 0x0, 0x0, 0x78, 0x0, 0x0, 0xfc, 0x0, 0x0, 0xdc, 0x0, 0x0, 0x9c, 0x0, 0x1, 0x8e, 0x0, 0x1, 0xe, 0x0, 0x3, 0xf, 0x0, 0x3, 0x7, 0x0, 0x2, 0x7, 0x0, 0x6, 0x7, 0x80, 0x6, 0x3, 0x80, 0xf, 0xff, 0xc0, 0xc, 0x3, 0xc0, 0x18, 0x1, 0xc0, 0x18, 0x1, 0xe0, 0x30, 0x1, 0xe0, 0x30, 0x0, 0xf0, 0x70, 0x0, 0xf0, 0xfc, 0x3, 0xfc}
+
+/* AE (198) */
+#define NXFONT_METRICS_198 {4, 28, 23, 1, 14, 0}
+#define NXFONT_BITMAP_198 {0x0, 0xff, 0xff, 0xe0, 0x0, 0x1f, 0x81, 0xe0, 0x0, 0x1f, 0x0, 0x60, 0x0, 0x37, 0x0, 0x20, 0x0, 0x37, 0x0, 0x20, 0x0, 0x67, 0x0, 0x0, 0x0, 0x67, 0x0, 0x0, 0x0, 0x47, 0x0, 0x80, 0x0, 0xc7, 0x0, 0x80, 0x0, 0xc7, 0x1, 0x80, 0x1, 0x87, 0x3, 0x80, 0x1, 0x87, 0xff, 0x80, 0x3, 0x7, 0x3, 0x80, 0x3, 0x7, 0x1, 0x80, 0x7, 0xff, 0x0, 0x80, 0x6, 0x7, 0x0, 0x80, 0xc, 0x7, 0x0, 0x0, 0xc, 0x7, 0x0, 0x10, 0x18, 0x7, 0x0, 0x10, 0x18, 0x7, 0x0, 0x30, 0x30, 0x7, 0x0, 0x60, 0x30, 0xf, 0x81, 0xe0, 0xfe, 0x3f, 0xff, 0xe0}
+
+/* Ccedilla (199) */
+#define NXFONT_METRICS_199 {3, 20, 30, 1, 14, 0}
+#define NXFONT_BITMAP_199 {0x1, 0xff, 0x10, 0x7, 0x83, 0xf0, 0xe, 0x0, 0xf0, 0x1c, 0x0, 0x70, 0x38, 0x0, 0x30, 0x38, 0x0, 0x30, 0x70, 0x0, 0x10, 0x70, 0x0, 0x10, 0xf0, 0x0, 0x0, 0xf0, 0x0, 0x0, 0xf0, 0x0, 0x0, 0xf0, 0x0, 0x0, 0xf0, 0x0, 0x0, 0xf0, 0x0, 0x0, 0xf0, 0x0, 0x0, 0x70, 0x0, 0x0, 0x70, 0x0, 0x0, 0x38, 0x0, 0x0, 0x38, 0x0, 0x10, 0x1c, 0x0, 0x30, 0xe, 0x0, 0x60, 0x7, 0x83, 0xc0, 0x1, 0xff, 0x0, 0x0, 0x40, 0x0, 0x0, 0xc0, 0x0, 0x0, 0xf0, 0x0, 0x0, 0x38, 0x0, 0x0, 0x18, 0x0, 0x0, 0x38, 0x0, 0x1, 0xf0, 0x0}
+
+/* Egrave (200) */
+#define NXFONT_METRICS_200 {3, 19, 30, 1, 7, 0}
+#define NXFONT_BITMAP_200 {0x3, 0x0, 0x0, 0x3, 0x80, 0x0, 0x1, 0xc0, 0x0, 0x0, 0x60, 0x0, 0x0, 0x30, 0x0, 0x0, 0x18, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xc0, 0x3e, 0x3, 0xc0, 0x1c, 0x0, 0xc0, 0x1c, 0x0, 0x40, 0x1c, 0x0, 0x40, 0x1c, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x1c, 0x1, 0x0, 0x1c, 0x1, 0x0, 0x1c, 0x3, 0x0, 0x1f, 0xff, 0x0, 0x1c, 0x3, 0x0, 0x1c, 0x1, 0x0, 0x1c, 0x1, 0x0, 0x1c, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x60, 0x1c, 0x0, 0xc0, 0x3e, 0x3, 0xc0, 0xff, 0xff, 0xc0}
+
+/* Eacute (201) */
+#define NXFONT_METRICS_201 {3, 19, 30, 1, 7, 0}
+#define NXFONT_BITMAP_201 {0x0, 0x6, 0x0, 0x0, 0xe, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x30, 0x0, 0x0, 0x60, 0x0, 0x0, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xc0, 0x3e, 0x3, 0xc0, 0x1c, 0x0, 0xc0, 0x1c, 0x0, 0x40, 0x1c, 0x0, 0x40, 0x1c, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x1c, 0x1, 0x0, 0x1c, 0x1, 0x0, 0x1c, 0x3, 0x0, 0x1f, 0xff, 0x0, 0x1c, 0x3, 0x0, 0x1c, 0x1, 0x0, 0x1c, 0x1, 0x0, 0x1c, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x60, 0x1c, 0x0, 0xc0, 0x3e, 0x3, 0xc0, 0xff, 0xff, 0xc0}
+
+/* Ecircumflex (202) */
+#define NXFONT_METRICS_202 {3, 19, 30, 1, 7, 0}
+#define NXFONT_BITMAP_202 {0x0, 0x30, 0x0, 0x0, 0x78, 0x0, 0x0, 0xfc, 0x0, 0x1, 0xce, 0x0, 0x3, 0x3, 0x0, 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xc0, 0x3e, 0x3, 0xc0, 0x1c, 0x0, 0xc0, 0x1c, 0x0, 0x40, 0x1c, 0x0, 0x40, 0x1c, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x1c, 0x1, 0x0, 0x1c, 0x1, 0x0, 0x1c, 0x3, 0x0, 0x1f, 0xff, 0x0, 0x1c, 0x3, 0x0, 0x1c, 0x1, 0x0, 0x1c, 0x1, 0x0, 0x1c, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x60, 0x1c, 0x0, 0xc0, 0x3e, 0x3, 0xc0, 0xff, 0xff, 0xc0}
+
+/* Edieresis (203) */
+#define NXFONT_METRICS_203 {3, 19, 28, 1, 9, 0}
+#define NXFONT_BITMAP_203 {0x3, 0x8e, 0x0, 0x3, 0x8e, 0x0, 0x3, 0x8e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xc0, 0x3e, 0x3, 0xc0, 0x1c, 0x0, 0xc0, 0x1c, 0x0, 0x40, 0x1c, 0x0, 0x40, 0x1c, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x1c, 0x1, 0x0, 0x1c, 0x1, 0x0, 0x1c, 0x3, 0x0, 0x1f, 0xff, 0x0, 0x1c, 0x3, 0x0, 0x1c, 0x1, 0x0, 0x1c, 0x1, 0x0, 0x1c, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x60, 0x1c, 0x0, 0xc0, 0x3e, 0x3, 0xc0, 0xff, 0xff, 0xc0}
+
+/* Igrave (204) */
+#define NXFONT_METRICS_204 {2, 9, 30, 1, 7, 0}
+#define NXFONT_BITMAP_204 {0x60, 0x0, 0x70, 0x0, 0x38, 0x0, 0xc, 0x0, 0x6, 0x0, 0x3, 0x0, 0x0, 0x0, 0xff, 0x80, 0x3e, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x3e, 0x0, 0xff, 0x80}
+
+/* Iacute (205) */
+#define NXFONT_METRICS_205 {2, 9, 30, 1, 7, 0}
+#define NXFONT_BITMAP_205 {0x1, 0x80, 0x3, 0x80, 0x7, 0x0, 0xc, 0x0, 0x18, 0x0, 0x30, 0x0, 0x0, 0x0, 0xff, 0x80, 0x3e, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x3e, 0x0, 0xff, 0x80}
+
+/* Icircumflex (206) */
+#define NXFONT_METRICS_206 {2, 10, 30, 1, 7, 0}
+#define NXFONT_BITMAP_206 {0xc, 0x0, 0x1e, 0x0, 0x3f, 0x0, 0x73, 0x80, 0xc0, 0xc0, 0x80, 0x40, 0x0, 0x0, 0xff, 0x80, 0x3e, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x3e, 0x0, 0xff, 0x80}
+
+/* Idieresis (207) */
+#define NXFONT_METRICS_207 {2, 9, 28, 1, 9, 0}
+#define NXFONT_BITMAP_207 {0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0x0, 0x0, 0x0, 0x0, 0xff, 0x80, 0x3e, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x3e, 0x0, 0xff, 0x80}
+
+/* Eth (208) */
+#define NXFONT_METRICS_208 {3, 22, 23, 1, 14, 0}
+#define NXFONT_BITMAP_208 {0xff, 0xfe, 0x0, 0x3e, 0x7, 0x80, 0x1c, 0x1, 0xc0, 0x1c, 0x0, 0xe0, 0x1c, 0x0, 0x70, 0x1c, 0x0, 0x70, 0x1c, 0x0, 0x38, 0x1c, 0x0, 0x38, 0x1c, 0x0, 0x3c, 0x1c, 0x0, 0x3c, 0x1c, 0x0, 0x3c, 0xff, 0xc0, 0x3c, 0xff, 0xc0, 0x3c, 0x1c, 0x0, 0x3c, 0x1c, 0x0, 0x3c, 0x1c, 0x0, 0x38, 0x1c, 0x0, 0x38, 0x1c, 0x0, 0x70, 0x1c, 0x0, 0x70, 0x1c, 0x0, 0xe0, 0x1c, 0x1, 0xc0, 0x3e, 0x7, 0x80, 0xff, 0xfe, 0x0}
+
+/* Ntilde (209) */
+#define NXFONT_METRICS_209 {3, 22, 29, 1, 8, 0}
+#define NXFONT_BITMAP_209 {0x0, 0xe0, 0x80, 0x1, 0xf9, 0x80, 0x3, 0x3f, 0x0, 0x2, 0xe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x1, 0xfc, 0x3c, 0x0, 0x70, 0x1e, 0x0, 0x20, 0x1f, 0x0, 0x20, 0x1f, 0x0, 0x20, 0x17, 0x80, 0x20, 0x13, 0xc0, 0x20, 0x13, 0xc0, 0x20, 0x11, 0xe0, 0x20, 0x10, 0xf0, 0x20, 0x10, 0xf8, 0x20, 0x10, 0x78, 0x20, 0x10, 0x3c, 0x20, 0x10, 0x1e, 0x20, 0x10, 0x1f, 0x20, 0x10, 0xf, 0x20, 0x10, 0x7, 0xa0, 0x10, 0x3, 0xe0, 0x10, 0x1, 0xe0, 0x10, 0x1, 0xe0, 0x10, 0x0, 0xe0, 0x38, 0x0, 0x60, 0xfe, 0x0, 0x20}
+
+/* Ograve (210) */
+#define NXFONT_METRICS_210 {3, 22, 30, 1, 7, 0}
+#define NXFONT_BITMAP_210 {0x3, 0x0, 0x0, 0x3, 0x80, 0x0, 0x1, 0xc0, 0x0, 0x0, 0x60, 0x0, 0x0, 0x30, 0x0, 0x0, 0x18, 0x0, 0x0, 0x0, 0x0, 0x1, 0xfe, 0x0, 0x7, 0x87, 0x80, 0xe, 0x1, 0xc0, 0x1c, 0x0, 0xe0, 0x38, 0x0, 0x70, 0x38, 0x0, 0x70, 0x70, 0x0, 0x38, 0x70, 0x0, 0x38, 0xf0, 0x0, 0x3c, 0xf0, 0x0, 0x3c, 0xf0, 0x0, 0x3c, 0xf0, 0x0, 0x3c, 0xf0, 0x0, 0x3c, 0xf0, 0x0, 0x3c, 0xf0, 0x0, 0x3c, 0x70, 0x0, 0x38, 0x70, 0x0, 0x38, 0x38, 0x0, 0x70, 0x38, 0x0, 0x70, 0x1c, 0x0, 0xe0, 0xe, 0x1, 0xc0, 0x7, 0x87, 0x80, 0x1, 0xfe, 0x0}
+
+/* Oacute (211) */
+#define NXFONT_METRICS_211 {3, 22, 30, 1, 7, 0}
+#define NXFONT_BITMAP_211 {0x0, 0x1, 0x80, 0x0, 0x3, 0x80, 0x0, 0x7, 0x0, 0x0, 0xc, 0x0, 0x0, 0x18, 0x0, 0x0, 0x30, 0x0, 0x0, 0x0, 0x0, 0x1, 0xfe, 0x0, 0x7, 0x87, 0x80, 0xe, 0x1, 0xc0, 0x1c, 0x0, 0xe0, 0x38, 0x0, 0x70, 0x38, 0x0, 0x70, 0x70, 0x0, 0x38, 0x70, 0x0, 0x38, 0xf0, 0x0, 0x3c, 0xf0, 0x0, 0x3c, 0xf0, 0x0, 0x3c, 0xf0, 0x0, 0x3c, 0xf0, 0x0, 0x3c, 0xf0, 0x0, 0x3c, 0xf0, 0x0, 0x3c, 0x70, 0x0, 0x38, 0x70, 0x0, 0x38, 0x38, 0x0, 0x70, 0x38, 0x0, 0x70, 0x1c, 0x0, 0xe0, 0xe, 0x1, 0xc0, 0x7, 0x87, 0x80, 0x1, 0xfe, 0x0}
+
+/* Ocircumflex (212) */
+#define NXFONT_METRICS_212 {3, 22, 30, 1, 7, 0}
+#define NXFONT_BITMAP_212 {0x0, 0x30, 0x0, 0x0, 0x78, 0x0, 0x0, 0xfc, 0x0, 0x1, 0xce, 0x0, 0x3, 0x3, 0x0, 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0x1, 0xfe, 0x0, 0x7, 0x87, 0x80, 0xe, 0x1, 0xc0, 0x1c, 0x0, 0xe0, 0x38, 0x0, 0x70, 0x38, 0x0, 0x70, 0x70, 0x0, 0x38, 0x70, 0x0, 0x38, 0xf0, 0x0, 0x3c, 0xf0, 0x0, 0x3c, 0xf0, 0x0, 0x3c, 0xf0, 0x0, 0x3c, 0xf0, 0x0, 0x3c, 0xf0, 0x0, 0x3c, 0xf0, 0x0, 0x3c, 0x70, 0x0, 0x38, 0x70, 0x0, 0x38, 0x38, 0x0, 0x70, 0x38, 0x0, 0x70, 0x1c, 0x0, 0xe0, 0xe, 0x1, 0xc0, 0x7, 0x87, 0x80, 0x1, 0xfe, 0x0}
+
+/* Otilde (213) */
+#define NXFONT_METRICS_213 {3, 22, 28, 1, 9, 0}
+#define NXFONT_BITMAP_213 {0x0, 0xe0, 0x80, 0x1, 0xf9, 0x80, 0x3, 0x3f, 0x0, 0x2, 0xe, 0x0, 0x0, 0x0, 0x0, 0x1, 0xfe, 0x0, 0x7, 0x87, 0x80, 0xe, 0x1, 0xc0, 0x1c, 0x0, 0xe0, 0x38, 0x0, 0x70, 0x38, 0x0, 0x70, 0x70, 0x0, 0x38, 0x70, 0x0, 0x38, 0xf0, 0x0, 0x3c, 0xf0, 0x0, 0x3c, 0xf0, 0x0, 0x3c, 0xf0, 0x0, 0x3c, 0xf0, 0x0, 0x3c, 0xf0, 0x0, 0x3c, 0xf0, 0x0, 0x3c, 0x70, 0x0, 0x38, 0x70, 0x0, 0x38, 0x38, 0x0, 0x70, 0x38, 0x0, 0x70, 0x1c, 0x0, 0xe0, 0xe, 0x1, 0xc0, 0x7, 0x87, 0x80, 0x1, 0xfe, 0x0}
+
+/* Odieresis (214) */
+#define NXFONT_METRICS_214 {3, 22, 28, 1, 9, 0}
+#define NXFONT_BITMAP_214 {0x1, 0xc7, 0x0, 0x1, 0xc7, 0x0, 0x1, 0xc7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xfe, 0x0, 0x7, 0x87, 0x80, 0xe, 0x1, 0xc0, 0x1c, 0x0, 0xe0, 0x38, 0x0, 0x70, 0x38, 0x0, 0x70, 0x70, 0x0, 0x38, 0x70, 0x0, 0x38, 0xf0, 0x0, 0x3c, 0xf0, 0x0, 0x3c, 0xf0, 0x0, 0x3c, 0xf0, 0x0, 0x3c, 0xf0, 0x0, 0x3c, 0xf0, 0x0, 0x3c, 0xf0, 0x0, 0x3c, 0x70, 0x0, 0x38, 0x70, 0x0, 0x38, 0x38, 0x0, 0x70, 0x38, 0x0, 0x70, 0x1c, 0x0, 0xe0, 0xe, 0x1, 0xc0, 0x7, 0x87, 0x80, 0x1, 0xfe, 0x0}
+
+/* multiply (215) */
+#define NXFONT_METRICS_215 {2, 16, 16, 1, 21, 0}
+#define NXFONT_BITMAP_215 {0x40, 0x2, 0xe0, 0x7, 0x70, 0xe, 0x38, 0x1c, 0x1c, 0x38, 0xe, 0x70, 0x7, 0xe0, 0x3, 0xc0, 0x3, 0xc0, 0x7, 0xe0, 0xe, 0x70, 0x1c, 0x38, 0x38, 0x1c, 0x70, 0xe, 0xe0, 0x7, 0x40, 0x2}
+
+/* Oslash (216) */
+#define NXFONT_METRICS_216 {3, 22, 27, 1, 12, 0}
+#define NXFONT_BITMAP_216 {0x0, 0x0, 0x10, 0x0, 0x0, 0x30, 0x1, 0xfe, 0x60, 0x7, 0x87, 0xc0, 0xe, 0x1, 0xc0, 0x1c, 0x1, 0xe0, 0x38, 0x3, 0x70, 0x38, 0x2, 0x70, 0x70, 0x6, 0x38, 0x70, 0xc, 0x38, 0xf0, 0x8, 0x3c, 0xf0, 0x18, 0x3c, 0xf0, 0x30, 0x3c, 0xf0, 0x60, 0x3c, 0xf0, 0x40, 0x3c, 0xf0, 0xc0, 0x3c, 0xf0, 0x80, 0x3c, 0x71, 0x80, 0x38, 0x73, 0x0, 0x38, 0x3a, 0x0, 0x70, 0x3e, 0x0, 0x70, 0x1c, 0x0, 0xe0, 0x1e, 0x1, 0xc0, 0x37, 0x87, 0x80, 0x21, 0xfe, 0x0, 0x60, 0x0, 0x0, 0x40, 0x0, 0x0}
+
+/* Ugrave (217) */
+#define NXFONT_METRICS_217 {3, 22, 30, 1, 7, 0}
+#define NXFONT_BITMAP_217 {0x0, 0xc0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0x70, 0x0, 0x0, 0x18, 0x0, 0x0, 0xc, 0x0, 0x0, 0x6, 0x0, 0x0, 0x0, 0x0, 0xff, 0x81, 0xfc, 0x3e, 0x0, 0x70, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x60, 0x1e, 0x0, 0x60, 0xe, 0x0, 0x40, 0xf, 0x0, 0xc0, 0x7, 0xc3, 0x80, 0x1, 0xfe, 0x0}
+
+/* Uacute (218) */
+#define NXFONT_METRICS_218 {3, 22, 30, 1, 7, 0}
+#define NXFONT_BITMAP_218 {0x0, 0x1, 0x80, 0x0, 0x3, 0x80, 0x0, 0x7, 0x0, 0x0, 0xc, 0x0, 0x0, 0x18, 0x0, 0x0, 0x30, 0x0, 0x0, 0x0, 0x0, 0xff, 0x81, 0xfc, 0x3e, 0x0, 0x70, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x60, 0x1e, 0x0, 0x60, 0xe, 0x0, 0x40, 0xf, 0x0, 0xc0, 0x7, 0xc3, 0x80, 0x1, 0xfe, 0x0}
+
+/* Ucircumflex (219) */
+#define NXFONT_METRICS_219 {3, 22, 30, 1, 7, 0}
+#define NXFONT_BITMAP_219 {0x0, 0x18, 0x0, 0x0, 0x3c, 0x0, 0x0, 0x7e, 0x0, 0x0, 0xe7, 0x0, 0x1, 0x81, 0x80, 0x1, 0x0, 0x80, 0x0, 0x0, 0x0, 0xff, 0x81, 0xfc, 0x3e, 0x0, 0x70, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x60, 0x1e, 0x0, 0x60, 0xe, 0x0, 0x40, 0xf, 0x0, 0xc0, 0x7, 0xc3, 0x80, 0x1, 0xfe, 0x0}
+
+/* Udieresis (220) */
+#define NXFONT_METRICS_220 {3, 22, 28, 1, 9, 0}
+#define NXFONT_BITMAP_220 {0x1, 0xc7, 0x0, 0x1, 0xc7, 0x0, 0x1, 0xc7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x81, 0xfc, 0x3e, 0x0, 0x70, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x20, 0x1c, 0x0, 0x60, 0x1e, 0x0, 0x60, 0xe, 0x0, 0x40, 0xf, 0x0, 0xc0, 0x7, 0xc3, 0x80, 0x1, 0xfe, 0x0}
+
+/* Yacute (221) */
+#define NXFONT_METRICS_221 {3, 22, 30, 1, 7, 0}
+#define NXFONT_BITMAP_221 {0x0, 0x0, 0xc0, 0x0, 0x1, 0xc0, 0x0, 0x3, 0x80, 0x0, 0x6, 0x0, 0x0, 0xc, 0x0, 0x0, 0x18, 0x0, 0x0, 0x0, 0x0, 0xff, 0xc0, 0xfc, 0x3f, 0x0, 0x38, 0x1e, 0x0, 0x30, 0xf, 0x0, 0x60, 0xf, 0x80, 0xc0, 0x7, 0x80, 0x80, 0x3, 0xc1, 0x80, 0x3, 0xc3, 0x0, 0x1, 0xe3, 0x0, 0x0, 0xf6, 0x0, 0x0, 0xfc, 0x0, 0x0, 0x7c, 0x0, 0x0, 0x38, 0x0, 0x0, 0x38, 0x0, 0x0, 0x38, 0x0, 0x0, 0x38, 0x0, 0x0, 0x38, 0x0, 0x0, 0x38, 0x0, 0x0, 0x38, 0x0, 0x0, 0x38, 0x0, 0x0, 0x38, 0x0, 0x0, 0x7c, 0x0, 0x1, 0xff, 0x0}
+
+/* Thorn (222) */
+#define NXFONT_METRICS_222 {3, 18, 23, 1, 14, 0}
+#define NXFONT_BITMAP_222 {0xff, 0x80, 0x0, 0x3e, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x1f, 0xfc, 0x0, 0x1c, 0x1f, 0x0, 0x1c, 0x7, 0x80, 0x1c, 0x3, 0x80, 0x1c, 0x3, 0xc0, 0x1c, 0x1, 0xc0, 0x1c, 0x1, 0xc0, 0x1c, 0x1, 0xc0, 0x1c, 0x3, 0xc0, 0x1c, 0x3, 0x80, 0x1c, 0x7, 0x80, 0x1c, 0x1f, 0x0, 0x1f, 0xfc, 0x0, 0x1c, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x3e, 0x0, 0x0, 0xff, 0x80, 0x0}
+
+/* germandbls (223) */
+#define NXFONT_METRICS_223 {2, 15, 23, 1, 14, 0}
+#define NXFONT_BITMAP_223 {0x7, 0xc0, 0xc, 0x70, 0x18, 0x38, 0x18, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x30, 0x38, 0x60, 0x39, 0xc0, 0x38, 0x78, 0x38, 0x1c, 0x38, 0x1e, 0x38, 0xe, 0x38, 0xe, 0x38, 0xe, 0x38, 0xe, 0x38, 0xe, 0x3b, 0xc, 0x3b, 0x9c, 0x3b, 0x98, 0xf9, 0xf0}
+
+/* agrave (224) */
+#define NXFONT_METRICS_224 {2, 13, 23, 1, 14, 0}
+#define NXFONT_BITMAP_224 {0x18, 0x0, 0x1c, 0x0, 0xe, 0x0, 0x3, 0x0, 0x1, 0x80, 0x0, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x80, 0x31, 0xc0, 0x70, 0xe0, 0x70, 0xe0, 0x60, 0xe0, 0x3, 0xe0, 0xe, 0xe0, 0x18, 0xe0, 0x30, 0xe0, 0x60, 0xe0, 0xe0, 0xe0, 0xe1, 0xe0, 0xf2, 0xe8, 0x7e, 0xf8, 0x3c, 0x70}
+
+/* aacute (225) */
+#define NXFONT_METRICS_225 {2, 13, 23, 1, 14, 0}
+#define NXFONT_BITMAP_225 {0x0, 0xc0, 0x1, 0xc0, 0x3, 0x80, 0x6, 0x0, 0xc, 0x0, 0x18, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x80, 0x31, 0xc0, 0x70, 0xe0, 0x70, 0xe0, 0x60, 0xe0, 0x3, 0xe0, 0xe, 0xe0, 0x18, 0xe0, 0x30, 0xe0, 0x60, 0xe0, 0xe0, 0xe0, 0xe1, 0xe0, 0xf2, 0xe8, 0x7e, 0xf8, 0x3c, 0x70}
+
+/* acircumflex (226) */
+#define NXFONT_METRICS_226 {2, 13, 23, 1, 14, 0}
+#define NXFONT_BITMAP_226 {0x6, 0x0, 0xf, 0x0, 0x1f, 0x80, 0x39, 0xc0, 0x60, 0x60, 0x40, 0x20, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x80, 0x31, 0xc0, 0x70, 0xe0, 0x70, 0xe0, 0x60, 0xe0, 0x3, 0xe0, 0xe, 0xe0, 0x18, 0xe0, 0x30, 0xe0, 0x60, 0xe0, 0xe0, 0xe0, 0xe1, 0xe0, 0xf2, 0xe8, 0x7e, 0xf8, 0x3c, 0x70}
+
+/* atilde (227) */
+#define NXFONT_METRICS_227 {2, 13, 21, 1, 16, 0}
+#define NXFONT_BITMAP_227 {0x1c, 0x10, 0x3e, 0x30, 0x63, 0xe0, 0x41, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x80, 0x31, 0xc0, 0x70, 0xe0, 0x70, 0xe0, 0x60, 0xe0, 0x3, 0xe0, 0xe, 0xe0, 0x18, 0xe0, 0x30, 0xe0, 0x60, 0xe0, 0xe0, 0xe0, 0xe1, 0xe0, 0xf2, 0xe8, 0x7e, 0xf8, 0x3c, 0x70}
+
+/* adieresis (228) */
+#define NXFONT_METRICS_228 {2, 13, 21, 1, 16, 0}
+#define NXFONT_BITMAP_228 {0x38, 0xe0, 0x38, 0xe0, 0x38, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x80, 0x31, 0xc0, 0x70, 0xe0, 0x70, 0xe0, 0x60, 0xe0, 0x3, 0xe0, 0xe, 0xe0, 0x18, 0xe0, 0x30, 0xe0, 0x60, 0xe0, 0xe0, 0xe0, 0xe1, 0xe0, 0xf2, 0xe8, 0x7e, 0xf8, 0x3c, 0x70}
+
+/* aring (229) */
+#define NXFONT_METRICS_229 {2, 13, 23, 1, 14, 0}
+#define NXFONT_BITMAP_229 {0x7, 0x0, 0xf, 0x80, 0x18, 0xc0, 0x10, 0x40, 0x18, 0xc0, 0xf, 0x80, 0x7, 0x0, 0x0, 0x0, 0x1f, 0x80, 0x31, 0xc0, 0x70, 0xe0, 0x70, 0xe0, 0x60, 0xe0, 0x3, 0xe0, 0xe, 0xe0, 0x18, 0xe0, 0x30, 0xe0, 0x60, 0xe0, 0xe0, 0xe0, 0xe1, 0xe0, 0xf2, 0xe8, 0x7e, 0xf8, 0x3c, 0x70}
+
+/* ae (230) */
+#define NXFONT_METRICS_230 {3, 19, 15, 1, 22, 0}
+#define NXFONT_BITMAP_230 {0x1f, 0x9f, 0x0, 0x31, 0xf9, 0xc0, 0x70, 0xe0, 0xc0, 0x70, 0xe0, 0xe0, 0x60, 0xe0, 0xe0, 0x3, 0xff, 0xe0, 0xe, 0xe0, 0x0, 0x18, 0xe0, 0x0, 0x30, 0xe0, 0x0, 0x60, 0xe0, 0x0, 0xe0, 0xe0, 0x20, 0xe1, 0xf0, 0x60, 0xf3, 0x78, 0xc0, 0x7e, 0x3f, 0x80, 0x3c, 0x1f, 0x0}
+
+/* ccedilla (231) */
+#define NXFONT_METRICS_231 {2, 12, 22, 1, 22, 0}
+#define NXFONT_BITMAP_231 {0xf, 0x80, 0x38, 0xc0, 0x70, 0xe0, 0x60, 0xe0, 0xe0, 0x60, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xe0, 0x0, 0xe0, 0x10, 0x70, 0x30, 0x7c, 0x60, 0x3f, 0xc0, 0xf, 0x0, 0x4, 0x0, 0xc, 0x0, 0xf, 0x0, 0x3, 0x80, 0x1, 0x80, 0x3, 0x80, 0x1f, 0x0}
+
+/* egrave (232) */
+#define NXFONT_METRICS_232 {2, 12, 23, 1, 14, 0}
+#define NXFONT_BITMAP_232 {0x30, 0x0, 0x38, 0x0, 0x1c, 0x0, 0x6, 0x0, 0x3, 0x0, 0x1, 0x80, 0x0, 0x0, 0x0, 0x0, 0xf, 0x80, 0x39, 0xc0, 0x60, 0xe0, 0x60, 0x70, 0xc0, 0x70, 0xff, 0xf0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xe0, 0x0, 0xe0, 0x10, 0x70, 0x30, 0x7c, 0x60, 0x3f, 0xc0, 0xf, 0x0}
+
+/* eacute (233) */
+#define NXFONT_METRICS_233 {2, 12, 23, 1, 14, 0}
+#define NXFONT_BITMAP_233 {0x1, 0x80, 0x3, 0x80, 0x7, 0x0, 0xc, 0x0, 0x18, 0x0, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0x80, 0x39, 0xc0, 0x60, 0xe0, 0x60, 0x70, 0xc0, 0x70, 0xff, 0xf0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xe0, 0x0, 0xe0, 0x10, 0x70, 0x30, 0x7c, 0x60, 0x3f, 0xc0, 0xf, 0x0}
+
+/* ecircumflex (234) */
+#define NXFONT_METRICS_234 {2, 12, 23, 1, 14, 0}
+#define NXFONT_BITMAP_234 {0x6, 0x0, 0xf, 0x0, 0x1f, 0x80, 0x39, 0xc0, 0x60, 0x60, 0x40, 0x20, 0x0, 0x0, 0x0, 0x0, 0xf, 0x80, 0x39, 0xc0, 0x60, 0xe0, 0x60, 0x70, 0xc0, 0x70, 0xff, 0xf0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xe0, 0x0, 0xe0, 0x10, 0x70, 0x30, 0x7c, 0x60, 0x3f, 0xc0, 0xf, 0x0}
+
+/* edieresis (235) */
+#define NXFONT_METRICS_235 {2, 12, 21, 1, 16, 0}
+#define NXFONT_BITMAP_235 {0x38, 0xe0, 0x38, 0xe0, 0x38, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0x80, 0x39, 0xc0, 0x60, 0xe0, 0x60, 0x70, 0xc0, 0x70, 0xff, 0xf0, 0xc0, 0x0, 0xc0, 0x0, 0xc0, 0x0, 0xe0, 0x0, 0xe0, 0x10, 0x70, 0x30, 0x7c, 0x60, 0x3f, 0xc0, 0xf, 0x0}
+
+/* igrave (236) */
+#define NXFONT_METRICS_236 {1, 7, 23, 1, 14, 0}
+#define NXFONT_BITMAP_236 {0xc0, 0xe0, 0x70, 0x18, 0xc, 0x6, 0x0, 0x0, 0x18, 0xf8, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0xfe}
+
+/* iacute (237) */
+#define NXFONT_METRICS_237 {1, 7, 23, 1, 14, 0}
+#define NXFONT_BITMAP_237 {0x6, 0xe, 0x1c, 0x30, 0x60, 0xc0, 0x0, 0x0, 0x18, 0xf8, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0xfe}
+
+/* icircumflex (238) */
+#define NXFONT_METRICS_238 {2, 10, 23, 0, 14, 0}
+#define NXFONT_BITMAP_238 {0xc, 0x0, 0x1e, 0x0, 0x3f, 0x0, 0x73, 0x80, 0xc0, 0xc0, 0x80, 0x40, 0x0, 0x0, 0x0, 0x0, 0xc, 0x0, 0x7c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x7f, 0x0}
+
+/* idieresis (239) */
+#define NXFONT_METRICS_239 {2, 9, 21, 0, 16, 0}
+#define NXFONT_BITMAP_239 {0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0x0, 0x7c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x7f, 0x0}
+
+/* eth (240) */
+#define NXFONT_METRICS_240 {2, 14, 23, 1, 14, 0}
+#define NXFONT_BITMAP_240 {0x10, 0x0, 0x38, 0x0, 0x1c, 0x70, 0xf, 0xf0, 0xf, 0x0, 0x7f, 0x80, 0x31, 0xc0, 0x0, 0xe0, 0x7, 0xf0, 0x18, 0xf0, 0x30, 0x78, 0x70, 0x38, 0x60, 0x3c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0x70, 0x18, 0x70, 0x38, 0x38, 0x30, 0x1c, 0x60, 0x7, 0x80}
+
+/* ntilde (241) */
+#define NXFONT_METRICS_241 {2, 16, 21, 0, 16, 0}
+#define NXFONT_BITMAP_241 {0xe, 0x8, 0x1f, 0x18, 0x31, 0xf0, 0x20, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x18, 0xf0, 0xfb, 0xf8, 0x3e, 0x3c, 0x3c, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0xfe, 0x7f}
+
+/* ograve (242) */
+#define NXFONT_METRICS_242 {2, 14, 23, 1, 14, 0}
+#define NXFONT_BITMAP_242 {0x18, 0x0, 0x1c, 0x0, 0xe, 0x0, 0x3, 0x0, 0x1, 0x80, 0x0, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x7, 0x80, 0x18, 0xe0, 0x30, 0x70, 0x70, 0x38, 0x60, 0x38, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0x70, 0x18, 0x70, 0x38, 0x38, 0x30, 0x1c, 0x60, 0x7, 0x80}
+
+/* oacute (243) */
+#define NXFONT_METRICS_243 {2, 14, 23, 1, 14, 0}
+#define NXFONT_BITMAP_243 {0x0, 0xc0, 0x1, 0xc0, 0x3, 0x80, 0x6, 0x0, 0xc, 0x0, 0x18, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0x80, 0x18, 0xe0, 0x30, 0x70, 0x70, 0x38, 0x60, 0x38, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0x70, 0x18, 0x70, 0x38, 0x38, 0x30, 0x1c, 0x60, 0x7, 0x80}
+
+/* ocircumflex (244) */
+#define NXFONT_METRICS_244 {2, 14, 23, 1, 14, 0}
+#define NXFONT_BITMAP_244 {0x3, 0x0, 0x7, 0x80, 0xf, 0xc0, 0x1c, 0xe0, 0x30, 0x30, 0x20, 0x10, 0x0, 0x0, 0x0, 0x0, 0x7, 0x80, 0x18, 0xe0, 0x30, 0x70, 0x70, 0x38, 0x60, 0x38, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0x70, 0x18, 0x70, 0x38, 0x38, 0x30, 0x1c, 0x60, 0x7, 0x80}
+
+/* otilde (245) */
+#define NXFONT_METRICS_245 {2, 14, 21, 1, 16, 0}
+#define NXFONT_BITMAP_245 {0x1c, 0x10, 0x3e, 0x30, 0x63, 0xe0, 0x41, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x7, 0x80, 0x18, 0xe0, 0x30, 0x70, 0x70, 0x38, 0x60, 0x38, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0x70, 0x18, 0x70, 0x38, 0x38, 0x30, 0x1c, 0x60, 0x7, 0x80}
+
+/* odieresis (246) */
+#define NXFONT_METRICS_246 {2, 14, 21, 1, 16, 0}
+#define NXFONT_BITMAP_246 {0x38, 0xe0, 0x38, 0xe0, 0x38, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0x80, 0x18, 0xe0, 0x30, 0x70, 0x70, 0x38, 0x60, 0x38, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0x70, 0x18, 0x70, 0x38, 0x38, 0x30, 0x1c, 0x60, 0x7, 0x80}
+
+/* divide (247) */
+#define NXFONT_METRICS_247 {2, 16, 17, 1, 20, 0}
+#define NXFONT_BITMAP_247 {0x1, 0x80, 0x3, 0xc0, 0x3, 0xc0, 0x1, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x80, 0x3, 0xc0, 0x3, 0xc0, 0x1, 0x80}
+
+/* oslash (248) */
+#define NXFONT_METRICS_248 {2, 14, 21, 1, 19, 0}
+#define NXFONT_BITMAP_248 {0x0, 0x18, 0x0, 0x10, 0x0, 0x30, 0x7, 0xa0, 0x18, 0xe0, 0x30, 0xf0, 0x70, 0xb8, 0x61, 0xb8, 0xe1, 0x1c, 0xe1, 0x1c, 0xe3, 0x1c, 0xe2, 0x1c, 0xe6, 0x1c, 0x74, 0x18, 0x74, 0x38, 0x3c, 0x30, 0x1c, 0x60, 0x1f, 0x80, 0x30, 0x0, 0x20, 0x0, 0x60, 0x0}
+
+/* ugrave (249) */
+#define NXFONT_METRICS_249 {2, 16, 23, 0, 14, 0}
+#define NXFONT_BITMAP_249 {0xc, 0x0, 0xe, 0x0, 0x7, 0x0, 0x1, 0x80, 0x0, 0xc0, 0x0, 0x60, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x7c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x3c, 0x3c, 0x7c, 0x1f, 0xdf, 0xf, 0x98}
+
+/* uacute (250) */
+#define NXFONT_METRICS_250 {2, 16, 23, 0, 14, 0}
+#define NXFONT_BITMAP_250 {0x0, 0x60, 0x0, 0xe0, 0x1, 0xc0, 0x3, 0x0, 0x6, 0x0, 0xc, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x7c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x3c, 0x3c, 0x7c, 0x1f, 0xdf, 0xf, 0x98}
+
+/* ucircumflex (251) */
+#define NXFONT_METRICS_251 {2, 16, 23, 0, 14, 0}
+#define NXFONT_BITMAP_251 {0x1, 0x80, 0x3, 0xc0, 0x7, 0xe0, 0xe, 0x70, 0x18, 0x18, 0x10, 0x8, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x7c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x3c, 0x3c, 0x7c, 0x1f, 0xdf, 0xf, 0x98}
+
+/* udieresis (252) */
+#define NXFONT_METRICS_252 {2, 16, 21, 0, 16, 0}
+#define NXFONT_BITMAP_252 {0x1c, 0x70, 0x1c, 0x70, 0x1c, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x7c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x3c, 0x3c, 0x7c, 0x1f, 0xdf, 0xf, 0x98}
+
+/* yacute (253) */
+#define NXFONT_METRICS_253 {2, 15, 30, 0, 14, 0}
+#define NXFONT_BITMAP_253 {0x0, 0x18, 0x0, 0x38, 0x0, 0x70, 0x0, 0xc0, 0x1, 0x80, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe, 0x1e, 0x78, 0xc, 0x38, 0xc, 0x3c, 0x8, 0x1c, 0x18, 0x1e, 0x18, 0xe, 0x10, 0xe, 0x30, 0x7, 0x20, 0x7, 0x20, 0x3, 0xe0, 0x3, 0xc0, 0x1, 0xc0, 0x1, 0x80, 0x1, 0x80, 0x1, 0x80, 0x1, 0x0, 0x3, 0x0, 0x2, 0x0, 0x3e, 0x0, 0x7c, 0x0, 0x38, 0x0}
+
+/* thorn (254) */
+#define NXFONT_METRICS_254 {2, 15, 30, 0, 14, 0}
+#define NXFONT_BITMAP_254 {0x18, 0x0, 0xf8, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x39, 0xf0, 0x3b, 0xf8, 0x3e, 0x7c, 0x3c, 0x1c, 0x38, 0x1e, 0x38, 0xe, 0x38, 0xe, 0x38, 0xe, 0x38, 0xe, 0x38, 0xe, 0x38, 0xc, 0x38, 0x1c, 0x3c, 0x18, 0x3e, 0x30, 0x3b, 0xe0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x0, 0xff, 0x0}
+
+/* ydieresis (255) */
+#define NXFONT_METRICS_255 {2, 15, 28, 1, 16, 0}
+#define NXFONT_BITMAP_255 {0x1c, 0x70, 0x1c, 0x70, 0x1c, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe, 0x1e, 0x78, 0xc, 0x38, 0xc, 0x3c, 0x8, 0x1c, 0x18, 0x1e, 0x18, 0xe, 0x10, 0xe, 0x30, 0x7, 0x20, 0x7, 0x20, 0x3, 0xe0, 0x3, 0xc0, 0x1, 0xc0, 0x1, 0x80, 0x1, 0x80, 0x1, 0x0, 0x1, 0x0, 0x3, 0x0, 0x2, 0x0, 0x3e, 0x0, 0x7c, 0x0, 0x38, 0x0}
+
+/****************************************************************************
+ * Public Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+#define EXTERN extern "C"
+extern "C" {
+#else
+#define EXTERN extern
+#endif
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* __GRAPHICS_NXFONTS_NXFONTS_SERIF38X48_H */
diff --git a/nuttx/graphics/nxfonts/nxfonts_serif38x49b.h b/nuttx/graphics/nxfonts/nxfonts_serif38x49b.h
new file mode 100644
index 000000000..70291a045
--- /dev/null
+++ b/nuttx/graphics/nxfonts/nxfonts_serif38x49b.h
@@ -0,0 +1,849 @@
+/****************************************************************************
+ * graphics/nxfonts/nxfonts_serif38x49.h
+ *
+ * Copyright (C) 2011-2012 NX Engineering, S.A., All rights reserved.
+ * Author: Jose Pablo Carballo Gomez <jcarballo@nx-engineering.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT}
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING}
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+#ifndef __GRAPHICS_NXFONTS_NXFONTS_SERIF38X49B_H
+#define __GRAPHICS_NXFONTS_NXFONTS_SERIF38X49B_H
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/* Font ID */
+
+#define NXFONT_ID FONTID_SERIF38X49B
+
+/* Ranges of 7-bit and 8-bit fonts */
+
+#define NXFONT_MIN7BIT 33
+#define NXFONT_MAX7BIT 126
+
+#define NXFONT_MIN8BIT 161
+#define NXFONT_MAX8BIT 255
+
+/* Maximum height and width of any glyph in the set */
+
+#define NXFONT_MAXHEIGHT 49
+#define NXFONT_MAXWIDTH 38
+
+/* The width of a space */
+
+#define NXFONT_SPACEWIDTH 8
+
+/* exclam (33) */
+#define NXFONT_METRICS_33 {1, 5, 23, 3, 14, 0}
+#define NXFONT_BITMAP_33 {0x70, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0x70, 0x70, 0x70, 0x70, 0x20, 0x20, 0x20, 0x20, 0x0, 0x0, 0x0, 0x70, 0xf8, 0xf8, 0xf8, 0x70}
+
+/* quotedbl (34) */
+#define NXFONT_METRICS_34 {2, 11, 11, 2, 14, 0}
+#define NXFONT_BITMAP_34 {0x60, 0xc0, 0xf1, 0xe0, 0xf1, 0xe0, 0xf1, 0xe0, 0xf1, 0xe0, 0xf1, 0xe0, 0xf1, 0xe0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0, 0x60, 0xc0}
+
+/* numbersign (35) */
+#define NXFONT_METRICS_35 {2, 16, 23, 0, 14, 0}
+#define NXFONT_BITMAP_35 {0x3, 0xc, 0x3, 0xc, 0x7, 0x1c, 0x7, 0x1c, 0x6, 0x18, 0x6, 0x18, 0x7f, 0xff, 0x7f, 0xff, 0xe, 0x38, 0xc, 0x30, 0xc, 0x30, 0xc, 0x30, 0xc, 0x30, 0x1c, 0x70, 0xff, 0xfe, 0xff, 0xfe, 0x18, 0x60, 0x18, 0x60, 0x18, 0x60, 0x38, 0xe0, 0x38, 0xe0, 0x30, 0xc0, 0x30, 0xc0}
+
+/* dollar (36) */
+#define NXFONT_METRICS_36 {2, 15, 28, 1, 12, 0}
+#define NXFONT_BITMAP_36 {0x3, 0x0, 0x3, 0x0, 0xf, 0xe8, 0x3f, 0xf8, 0x73, 0x38, 0x63, 0x18, 0xe3, 0x8, 0xe3, 0x8, 0xf3, 0x0, 0xfb, 0x0, 0x7f, 0x0, 0x7f, 0x80, 0x3f, 0xe0, 0xf, 0xf0, 0x3, 0xf8, 0x3, 0xfc, 0x3, 0x7c, 0x83, 0x3e, 0x83, 0x1e, 0x83, 0x1e, 0xc3, 0x1c, 0xc3, 0x3c, 0xf3, 0x78, 0xff, 0xe0, 0x83, 0x0, 0x3, 0x0, 0x3, 0x0, 0x3, 0x0}
+
+/* percent (37) */
+#define NXFONT_METRICS_37 {3, 24, 23, 4, 14, 0}
+#define NXFONT_BITMAP_37 {0x7, 0x80, 0x20, 0xf, 0xc0, 0xe0, 0x1e, 0x7f, 0xc0, 0x3c, 0x20, 0xc0, 0x7c, 0x21, 0x80, 0x78, 0x21, 0x80, 0xf8, 0x63, 0x0, 0xf0, 0x47, 0x0, 0xf0, 0xc6, 0x0, 0xf0, 0xce, 0x0, 0xf1, 0x8c, 0x3c, 0x7f, 0x18, 0x7e, 0x3c, 0x19, 0xf3, 0x0, 0x31, 0xe1, 0x0, 0x33, 0xc1, 0x0, 0x63, 0xc1, 0x0, 0xe7, 0xc3, 0x0, 0xc7, 0x82, 0x1, 0xc7, 0x86, 0x1, 0x87, 0x86, 0x3, 0x3, 0x8c, 0x3, 0x3, 0xf8, 0x6, 0x1, 0xe0}
+
+/* ampersand (38) */
+#define NXFONT_METRICS_38 {3, 22, 23, 2, 14, 0}
+#define NXFONT_BITMAP_38 {0x1, 0xf0, 0x0, 0x3, 0xbc, 0x0, 0x7, 0x1e, 0x0, 0x7, 0xe, 0x0, 0xf, 0xe, 0x0, 0xf, 0xe, 0x0, 0xf, 0x8c, 0x0, 0x7, 0xd8, 0x0, 0x7, 0xf0, 0x0, 0x3, 0xe0, 0xfc, 0x7, 0xf0, 0x70, 0x1d, 0xf0, 0x30, 0x39, 0xf8, 0x60, 0x70, 0xfc, 0x40, 0xf0, 0xfc, 0xc0, 0xf0, 0x7f, 0x80, 0xf8, 0x3f, 0x0, 0xf8, 0x1f, 0x80, 0xfc, 0x1f, 0xc0, 0xfe, 0x3f, 0xe4, 0x7f, 0xf3, 0xfc, 0x7f, 0xc1, 0xfc, 0x1f, 0x0, 0x78}
+
+/* quotesingle (39) */
+#define NXFONT_METRICS_39 {1, 4, 11, 2, 14, 0}
+#define NXFONT_BITMAP_39 {0x60, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0x60, 0x60, 0x60, 0x60}
+
+/* parenleft (40) */
+#define NXFONT_METRICS_40 {1, 8, 29, 2, 14, 0}
+#define NXFONT_BITMAP_40 {0x3, 0x6, 0xc, 0x18, 0x18, 0x30, 0x30, 0x70, 0x60, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0x60, 0x70, 0x30, 0x30, 0x18, 0x18, 0xc, 0x6, 0x3}
+
+/* parenright (41) */
+#define NXFONT_METRICS_41 {1, 8, 29, 0, 14, 0}
+#define NXFONT_BITMAP_41 {0xc0, 0x60, 0x30, 0x18, 0x18, 0xc, 0xc, 0xe, 0x6, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x6, 0xe, 0xc, 0xc, 0x18, 0x18, 0x30, 0x60, 0xc0}
+
+/* asterisk (42) */
+#define NXFONT_METRICS_42 {2, 13, 14, 1, 14, 0}
+#define NXFONT_BITMAP_42 {0x3, 0x0, 0x7, 0x0, 0x7, 0x0, 0xe7, 0x38, 0xf2, 0x78, 0x7a, 0xf0, 0xf, 0x80, 0xf, 0x80, 0x7a, 0xf0, 0xf2, 0x78, 0xe7, 0x38, 0x7, 0x0, 0x7, 0x0, 0x6, 0x0}
+
+/* plus (43) */
+#define NXFONT_METRICS_43 {2, 15, 15, 2, 22, 0}
+#define NXFONT_BITMAP_43 {0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80}
+
+/* comma (44) */
+#define NXFONT_METRICS_44 {1, 6, 11, 1, 32, 0}
+#define NXFONT_BITMAP_44 {0x38, 0x7c, 0x7c, 0x7c, 0x3c, 0xc, 0x8, 0x18, 0x30, 0x60, 0xc0}
+
+/* hyphen (45) */
+#define NXFONT_METRICS_45 {1, 8, 4, 1, 27, 0}
+#define NXFONT_BITMAP_45 {0xff, 0xff, 0xff, 0xff}
+
+/* period (46) */
+#define NXFONT_METRICS_46 {1, 5, 5, 1, 32, 0}
+#define NXFONT_BITMAP_46 {0x70, 0xf8, 0xf8, 0xf8, 0x70}
+
+/* slash (47) */
+#define NXFONT_METRICS_47 {2, 9, 25, 0, 12, 0}
+#define NXFONT_BITMAP_47 {0x1, 0x80, 0x1, 0x80, 0x1, 0x0, 0x3, 0x0, 0x3, 0x0, 0x3, 0x0, 0x6, 0x0, 0x6, 0x0, 0x6, 0x0, 0x4, 0x0, 0xc, 0x0, 0xc, 0x0, 0xc, 0x0, 0x18, 0x0, 0x18, 0x0, 0x18, 0x0, 0x30, 0x0, 0x30, 0x0, 0x30, 0x0, 0x30, 0x0, 0x60, 0x0, 0x60, 0x0, 0x60, 0x0, 0xc0, 0x0, 0xc0, 0x0}
+
+/* zero (48) */
+#define NXFONT_METRICS_48 {2, 14, 23, 1, 14, 0}
+#define NXFONT_BITMAP_48 {0x7, 0x80, 0x1f, 0xe0, 0x1c, 0xe0, 0x38, 0x70, 0x78, 0x70, 0x78, 0x78, 0x78, 0x78, 0xf8, 0x7c, 0xf8, 0x7c, 0xf8, 0x7c, 0xf8, 0x7c, 0xf8, 0x7c, 0xf8, 0x7c, 0xf8, 0x7c, 0xf8, 0x7c, 0xf8, 0x7c, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x38, 0x70, 0x1c, 0xe0, 0xf, 0xc0, 0x7, 0x80}
+
+/* one (49) */
+#define NXFONT_METRICS_49 {2, 13, 23, 2, 14, 0}
+#define NXFONT_BITMAP_49 {0x1, 0x80, 0x7, 0x80, 0x1f, 0x80, 0xff, 0x80, 0xf, 0x80, 0xf, 0x80, 0xf, 0x80, 0xf, 0x80, 0xf, 0x80, 0xf, 0x80, 0xf, 0x80, 0xf, 0x80, 0xf, 0x80, 0xf, 0x80, 0xf, 0x80, 0xf, 0x80, 0xf, 0x80, 0xf, 0x80, 0xf, 0x80, 0xf, 0x80, 0xf, 0x80, 0x1f, 0xc0, 0xff, 0xf8}
+
+/* two (50) */
+#define NXFONT_METRICS_50 {2, 16, 23, 0, 14, 0}
+#define NXFONT_BITMAP_50 {0x3, 0xc0, 0xf, 0xf0, 0x1f, 0xf8, 0x3f, 0xf8, 0x30, 0xfc, 0x60, 0x7c, 0x40, 0x7c, 0x0, 0x7c, 0x0, 0x78, 0x0, 0x78, 0x0, 0x78, 0x0, 0xf0, 0x0, 0xe0, 0x1, 0xc0, 0x1, 0x80, 0x3, 0x0, 0x7, 0x1, 0xe, 0x3, 0x1c, 0x6, 0x3f, 0xfe, 0x7f, 0xfe, 0xff, 0xfc, 0xff, 0xfc}
+
+/* three (51) */
+#define NXFONT_METRICS_51 {2, 14, 23, 1, 14, 0}
+#define NXFONT_BITMAP_51 {0x7, 0xc0, 0x1f, 0xf0, 0x3f, 0xf0, 0x30, 0xf8, 0x60, 0x78, 0x40, 0x78, 0x0, 0x78, 0x0, 0x70, 0x0, 0xc0, 0x3, 0xe0, 0xf, 0xf0, 0xf, 0xf8, 0x3, 0xf8, 0x0, 0xfc, 0x0, 0x7c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x60, 0x38, 0xf0, 0x38, 0xf8, 0x70, 0x7f, 0xc0, 0x1f, 0x0}
+
+/* four (52) */
+#define NXFONT_METRICS_52 {2, 14, 23, 1, 14, 0}
+#define NXFONT_BITMAP_52 {0x0, 0x70, 0x0, 0xf0, 0x0, 0xf0, 0x1, 0xf0, 0x3, 0xf0, 0x6, 0xf0, 0x6, 0xf0, 0xc, 0xf0, 0x18, 0xf0, 0x18, 0xf0, 0x30, 0xf0, 0x60, 0xf0, 0x60, 0xf0, 0xc0, 0xf0, 0xff, 0xfc, 0xff, 0xfc, 0xff, 0xfc, 0xff, 0xfc, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf0}
+
+/* five (53) */
+#define NXFONT_METRICS_53 {2, 13, 23, 1, 14, 0}
+#define NXFONT_BITMAP_53 {0x1f, 0xf8, 0x1f, 0xf8, 0x1f, 0xf8, 0x1f, 0xf8, 0x30, 0x0, 0x30, 0x0, 0x20, 0x0, 0x3e, 0x0, 0x7f, 0x80, 0x7f, 0xe0, 0x7f, 0xf0, 0x7f, 0xf0, 0x3, 0xf8, 0x0, 0xf8, 0x0, 0x78, 0x0, 0x38, 0x0, 0x38, 0x0, 0x38, 0x60, 0x30, 0xf0, 0x30, 0xf8, 0x60, 0x7f, 0xc0, 0x1f, 0x0}
+
+/* six (54) */
+#define NXFONT_METRICS_54 {2, 14, 23, 1, 14, 0}
+#define NXFONT_BITMAP_54 {0x0, 0x1c, 0x0, 0xf0, 0x3, 0xc0, 0x7, 0x80, 0xf, 0x0, 0x1e, 0x0, 0x3e, 0x0, 0x3c, 0x0, 0x7c, 0x0, 0x7f, 0xe0, 0xfd, 0xf0, 0xf8, 0xf8, 0xf8, 0x78, 0xf8, 0x7c, 0xf8, 0x7c, 0xf8, 0x7c, 0xf8, 0x7c, 0x78, 0x7c, 0x78, 0x78, 0x78, 0x78, 0x38, 0x70, 0x1c, 0xe0, 0xf, 0xc0}
+
+/* seven (55) */
+#define NXFONT_METRICS_55 {2, 13, 23, 2, 14, 0}
+#define NXFONT_BITMAP_55 {0x7f, 0xf8, 0x7f, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xc0, 0x30, 0x80, 0x70, 0x80, 0x70, 0x0, 0x60, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xc0, 0x1, 0xc0, 0x1, 0xc0, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x7, 0x0, 0x7, 0x0, 0x7, 0x0, 0xe, 0x0, 0xe, 0x0, 0xe, 0x0, 0x1c, 0x0}
+
+/* eight (56) */
+#define NXFONT_METRICS_56 {2, 14, 23, 1, 14, 0}
+#define NXFONT_BITMAP_56 {0xf, 0xe0, 0x3e, 0xf0, 0x3c, 0x78, 0x78, 0x78, 0x78, 0x38, 0x78, 0x38, 0x7c, 0x38, 0x7e, 0x70, 0x3f, 0xe0, 0x3f, 0x80, 0x1f, 0xc0, 0xf, 0xe0, 0x3f, 0xf0, 0x71, 0xf8, 0x70, 0xfc, 0xe0, 0x7c, 0xe0, 0x3c, 0xe0, 0x3c, 0xe0, 0x3c, 0xf0, 0x38, 0x78, 0x78, 0x7f, 0xf0, 0x1f, 0xc0}
+
+/* nine (57) */
+#define NXFONT_METRICS_57 {2, 14, 23, 1, 14, 0}
+#define NXFONT_BITMAP_57 {0xf, 0xc0, 0x1c, 0xe0, 0x38, 0x70, 0x78, 0x78, 0x78, 0x78, 0xf8, 0x78, 0xf8, 0x7c, 0xf8, 0x7c, 0xf8, 0x7c, 0xf8, 0x7c, 0x78, 0x7c, 0x7c, 0x7c, 0x3e, 0xfc, 0x1f, 0xf8, 0x0, 0xf8, 0x0, 0xf0, 0x1, 0xf0, 0x1, 0xe0, 0x3, 0xc0, 0x7, 0x80, 0xf, 0x0, 0x3c, 0x0, 0xe0, 0x0}
+
+/* colon (58) */
+#define NXFONT_METRICS_58 {1, 5, 16, 3, 21, 0}
+#define NXFONT_BITMAP_58 {0x70, 0xf8, 0xf8, 0xf8, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x70, 0xf8, 0xf8, 0xf8, 0x70}
+
+/* semicolon (59) */
+#define NXFONT_METRICS_59 {1, 6, 22, 2, 21, 0}
+#define NXFONT_BITMAP_59 {0x38, 0x7c, 0x7c, 0x7c, 0x38, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x38, 0x7c, 0x7c, 0x7c, 0x3c, 0xc, 0x8, 0x18, 0x30, 0x60, 0xc0}
+
+/* less (60) */
+#define NXFONT_METRICS_60 {2, 16, 15, 1, 22, 0}
+#define NXFONT_BITMAP_60 {0x0, 0x3, 0x0, 0xf, 0x0, 0x7f, 0x1, 0xfc, 0xf, 0xe0, 0x3f, 0x80, 0xfc, 0x0, 0xf0, 0x0, 0xfc, 0x0, 0x3f, 0x80, 0xf, 0xe0, 0x1, 0xfc, 0x0, 0x7f, 0x0, 0xf, 0x0, 0x3}
+
+/* equal (61) */
+#define NXFONT_METRICS_61 {2, 15, 10, 2, 24, 0}
+#define NXFONT_BITMAP_61 {0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe}
+
+/* greater (62) */
+#define NXFONT_METRICS_62 {2, 16, 15, 2, 22, 0}
+#define NXFONT_BITMAP_62 {0xc0, 0x0, 0xf0, 0x0, 0xfe, 0x0, 0x3f, 0x80, 0x7, 0xf0, 0x1, 0xfc, 0x0, 0x3f, 0x0, 0xf, 0x0, 0x3f, 0x1, 0xfc, 0x7, 0xf0, 0x3f, 0x80, 0xfe, 0x0, 0xf0, 0x0, 0xc0, 0x0}
+
+/* question (63) */
+#define NXFONT_METRICS_63 {2, 12, 23, 2, 14, 0}
+#define NXFONT_BITMAP_63 {0x3f, 0x0, 0x73, 0xc0, 0xe1, 0xe0, 0xe1, 0xf0, 0xf1, 0xf0, 0xf1, 0xf0, 0x61, 0xf0, 0x1, 0xe0, 0x1, 0xe0, 0x3, 0xc0, 0x3, 0x80, 0x3, 0x0, 0x6, 0x0, 0x4, 0x0, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0xe, 0x0}
+
+/* at (64) */
+#define NXFONT_METRICS_64 {4, 26, 27, 2, 15, 0}
+#define NXFONT_BITMAP_64 {0x0, 0x1f, 0xe0, 0x0, 0x0, 0xfc, 0x3c, 0x0, 0x3, 0xe0, 0xe, 0x0, 0x7, 0x80, 0x3, 0x0, 0xf, 0x0, 0x1, 0x0, 0x1e, 0x0, 0x1, 0x80, 0x3e, 0xf, 0x38, 0x80, 0x3c, 0x1f, 0xf8, 0xc0, 0x7c, 0x7c, 0xf8, 0x40, 0x78, 0x78, 0x78, 0x40, 0xf8, 0xf8, 0xf0, 0x40, 0xf8, 0xf0, 0xf0, 0x40, 0xf1, 0xf0, 0xf0, 0x40, 0xf1, 0xf0, 0xf0, 0x40, 0xf1, 0xe0, 0xf0, 0xc0, 0xf1, 0xe1, 0xe0, 0x80, 0xf1, 0xe1, 0xe1, 0x80, 0xf1, 0xe3, 0xe3, 0x0, 0x71, 0xf3, 0xe3, 0x0, 0x78, 0xfe, 0xfe, 0x0, 0x78, 0x78, 0x78, 0x0, 0x3c, 0x0, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x0, 0xe, 0x0, 0x1, 0x80, 0x7, 0x80, 0x7, 0x0, 0x1, 0xe0, 0x3c, 0x0, 0x0, 0x3f, 0xe0, 0x0}
+
+/* A (65) */
+#define NXFONT_METRICS_65 {3, 21, 23, 1, 14, 0}
+#define NXFONT_BITMAP_65 {0x0, 0x20, 0x0, 0x0, 0x60, 0x0, 0x0, 0x70, 0x0, 0x0, 0xf0, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x1, 0xf8, 0x0, 0x1, 0x7c, 0x0, 0x1, 0x7c, 0x0, 0x3, 0x3e, 0x0, 0x2, 0x3e, 0x0, 0x6, 0x3e, 0x0, 0x6, 0x1f, 0x0, 0x4, 0x1f, 0x0, 0xc, 0xf, 0x0, 0xf, 0xff, 0x80, 0x18, 0xf, 0x80, 0x18, 0x7, 0xc0, 0x10, 0x7, 0xc0, 0x30, 0x3, 0xe0, 0x30, 0x3, 0xe0, 0x70, 0x7, 0xf0, 0xfc, 0x1f, 0xf8}
+
+/* B (66) */
+#define NXFONT_METRICS_66 {3, 19, 23, 1, 14, 0}
+#define NXFONT_BITMAP_66 {0xff, 0xfc, 0x0, 0x3f, 0x1f, 0x0, 0x1f, 0xf, 0x80, 0x1f, 0x7, 0xc0, 0x1f, 0x7, 0xc0, 0x1f, 0x7, 0xc0, 0x1f, 0x7, 0xc0, 0x1f, 0x7, 0xc0, 0x1f, 0x7, 0x80, 0x1f, 0xf, 0x80, 0x1f, 0x3e, 0x0, 0x1f, 0xfc, 0x0, 0x1f, 0xf, 0x80, 0x1f, 0x7, 0xc0, 0x1f, 0x7, 0xe0, 0x1f, 0x3, 0xe0, 0x1f, 0x3, 0xe0, 0x1f, 0x3, 0xe0, 0x1f, 0x3, 0xe0, 0x1f, 0x3, 0xc0, 0x1f, 0x7, 0xc0, 0x3f, 0xf, 0x0, 0xff, 0xfc, 0x0}
+
+/* C (67) */
+#define NXFONT_METRICS_67 {3, 19, 23, 2, 14, 0}
+#define NXFONT_BITMAP_67 {0x1, 0xfc, 0x20, 0x7, 0xff, 0x60, 0xf, 0x7, 0xe0, 0x1e, 0x1, 0xe0, 0x3c, 0x0, 0xe0, 0x7c, 0x0, 0x60, 0x7c, 0x0, 0x60, 0xf8, 0x0, 0x20, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0x7c, 0x0, 0x0, 0x7c, 0x0, 0x0, 0x3c, 0x0, 0x20, 0x1e, 0x0, 0x60, 0xf, 0x81, 0xc0, 0x3, 0xff, 0x80, 0x0, 0xfe, 0x0}
+
+/* D (68) */
+#define NXFONT_METRICS_68 {3, 22, 23, 0, 14, 0}
+#define NXFONT_BITMAP_68 {0xff, 0xfc, 0x0, 0x3f, 0xff, 0x80, 0x1f, 0x7, 0xe0, 0x1f, 0x1, 0xf0, 0x1f, 0x1, 0xf0, 0x1f, 0x0, 0xf8, 0x1f, 0x0, 0xf8, 0x1f, 0x0, 0xfc, 0x1f, 0x0, 0x7c, 0x1f, 0x0, 0x7c, 0x1f, 0x0, 0x7c, 0x1f, 0x0, 0x7c, 0x1f, 0x0, 0x7c, 0x1f, 0x0, 0x7c, 0x1f, 0x0, 0x7c, 0x1f, 0x0, 0xf8, 0x1f, 0x0, 0xf8, 0x1f, 0x0, 0xf8, 0x1f, 0x1, 0xf0, 0x1f, 0x1, 0xe0, 0x1f, 0x7, 0xc0, 0x3f, 0xff, 0x0, 0xff, 0xfc, 0x0}
+
+/* E (69) */
+#define NXFONT_METRICS_69 {3, 21, 23, 0, 14, 0}
+#define NXFONT_BITMAP_69 {0xff, 0xff, 0xe0, 0x3f, 0xff, 0xe0, 0x1f, 0x0, 0xe0, 0x1f, 0x0, 0x60, 0x1f, 0x0, 0x60, 0x1f, 0x0, 0x20, 0x1f, 0x0, 0x20, 0x1f, 0x4, 0x0, 0x1f, 0x4, 0x0, 0x1f, 0xc, 0x0, 0x1f, 0x1c, 0x0, 0x1f, 0xfc, 0x0, 0x1f, 0x1c, 0x0, 0x1f, 0xc, 0x0, 0x1f, 0x4, 0x0, 0x1f, 0x4, 0x0, 0x1f, 0x0, 0x8, 0x1f, 0x0, 0x18, 0x1f, 0x0, 0x30, 0x1f, 0x0, 0x70, 0x1f, 0x1, 0xf0, 0x3f, 0xff, 0xe0, 0xff, 0xff, 0xe0}
+
+/* F (70) */
+#define NXFONT_METRICS_70 {3, 19, 23, 0, 14, 0}
+#define NXFONT_BITMAP_70 {0xff, 0xff, 0xe0, 0x3f, 0xff, 0xe0, 0x1f, 0x0, 0xe0, 0x1f, 0x0, 0x60, 0x1f, 0x0, 0x60, 0x1f, 0x0, 0x20, 0x1f, 0x0, 0x20, 0x1f, 0x4, 0x0, 0x1f, 0x4, 0x0, 0x1f, 0xc, 0x0, 0x1f, 0x1c, 0x0, 0x1f, 0xfc, 0x0, 0x1f, 0x1c, 0x0, 0x1f, 0xc, 0x0, 0x1f, 0x4, 0x0, 0x1f, 0x4, 0x0, 0x1f, 0x0, 0x0, 0x1f, 0x0, 0x0, 0x1f, 0x0, 0x0, 0x1f, 0x0, 0x0, 0x1f, 0x0, 0x0, 0x3f, 0x80, 0x0, 0xff, 0xe0, 0x0}
+
+/* G (71) */
+#define NXFONT_METRICS_71 {3, 22, 23, 2, 14, 0}
+#define NXFONT_BITMAP_71 {0x1, 0xfc, 0x20, 0x7, 0xff, 0x60, 0xf, 0x7, 0xe0, 0x1e, 0x1, 0xe0, 0x3c, 0x0, 0xe0, 0x7c, 0x0, 0x60, 0x7c, 0x0, 0x60, 0xf8, 0x0, 0x20, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x1f, 0xfc, 0xf8, 0x7, 0xf0, 0xf8, 0x3, 0xe0, 0x7c, 0x3, 0xe0, 0x7c, 0x3, 0xe0, 0x3c, 0x3, 0xe0, 0x3e, 0x3, 0xe0, 0x1e, 0x7, 0xe0, 0xf, 0x8f, 0xe0, 0x3, 0xff, 0x0}
+
+/* H (72) */
+#define NXFONT_METRICS_72 {3, 24, 23, 0, 14, 0}
+#define NXFONT_BITMAP_72 {0xff, 0xe7, 0xff, 0x3f, 0x81, 0xfc, 0x1f, 0x0, 0xf8, 0x1f, 0x0, 0xf8, 0x1f, 0x0, 0xf8, 0x1f, 0x0, 0xf8, 0x1f, 0x0, 0xf8, 0x1f, 0x0, 0xf8, 0x1f, 0x0, 0xf8, 0x1f, 0x0, 0xf8, 0x1f, 0xff, 0xf8, 0x1f, 0xff, 0xf8, 0x1f, 0x0, 0xf8, 0x1f, 0x0, 0xf8, 0x1f, 0x0, 0xf8, 0x1f, 0x0, 0xf8, 0x1f, 0x0, 0xf8, 0x1f, 0x0, 0xf8, 0x1f, 0x0, 0xf8, 0x1f, 0x0, 0xf8, 0x1f, 0x0, 0xf8, 0x3f, 0x81, 0xfc, 0xff, 0xe7, 0xff}
+
+/* I (73) */
+#define NXFONT_METRICS_73 {2, 11, 23, 1, 14, 0}
+#define NXFONT_BITMAP_73 {0xff, 0xe0, 0x3f, 0x80, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x3f, 0x80, 0xff, 0xe0}
+
+/* J (74) */
+#define NXFONT_METRICS_74 {2, 15, 26, 0, 14, 0}
+#define NXFONT_BITMAP_74 {0xf, 0xfe, 0x3, 0xf8, 0x1, 0xf0, 0x1, 0xf0, 0x1, 0xf0, 0x1, 0xf0, 0x1, 0xf0, 0x1, 0xf0, 0x1, 0xf0, 0x1, 0xf0, 0x1, 0xf0, 0x1, 0xf0, 0x1, 0xf0, 0x1, 0xf0, 0x1, 0xf0, 0x1, 0xf0, 0x1, 0xf0, 0x1, 0xf0, 0x1, 0xf0, 0x61, 0xf0, 0xf1, 0xf0, 0xf1, 0xf0, 0xf3, 0xe0, 0xe3, 0xe0, 0x7f, 0xc0, 0x1f, 0x0}
+
+/* K (75) */
+#define NXFONT_METRICS_75 {3, 24, 23, 1, 14, 0}
+#define NXFONT_BITMAP_75 {0xff, 0xcf, 0xfc, 0x7f, 0x3, 0xe0, 0x3e, 0x1, 0xc0, 0x3e, 0x3, 0x80, 0x3e, 0x7, 0x0, 0x3e, 0xe, 0x0, 0x3e, 0x1c, 0x0, 0x3e, 0x38, 0x0, 0x3e, 0x70, 0x0, 0x3e, 0xe0, 0x0, 0x3f, 0xf0, 0x0, 0x3f, 0xf8, 0x0, 0x3f, 0xfc, 0x0, 0x3e, 0xfe, 0x0, 0x3e, 0x7f, 0x0, 0x3e, 0x3f, 0x80, 0x3e, 0x1f, 0xc0, 0x3e, 0xf, 0xe0, 0x3e, 0x7, 0xf0, 0x3e, 0x3, 0xf8, 0x3e, 0x1, 0xfc, 0x7f, 0x0, 0xfe, 0xff, 0xc3, 0xff}
+
+/* L (76) */
+#define NXFONT_METRICS_76 {3, 20, 23, 1, 14, 0}
+#define NXFONT_BITMAP_76 {0xff, 0xe0, 0x0, 0x3f, 0x80, 0x0, 0x1f, 0x0, 0x0, 0x1f, 0x0, 0x0, 0x1f, 0x0, 0x0, 0x1f, 0x0, 0x0, 0x1f, 0x0, 0x0, 0x1f, 0x0, 0x0, 0x1f, 0x0, 0x0, 0x1f, 0x0, 0x0, 0x1f, 0x0, 0x0, 0x1f, 0x0, 0x0, 0x1f, 0x0, 0x0, 0x1f, 0x0, 0x0, 0x1f, 0x0, 0x0, 0x1f, 0x0, 0x0, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x30, 0x1f, 0x0, 0x60, 0x1f, 0x0, 0xe0, 0x1f, 0x81, 0xe0, 0x3f, 0xff, 0xc0, 0xff, 0xff, 0xc0}
+
+/* M (77) */
+#define NXFONT_METRICS_77 {4, 28, 23, 1, 14, 0}
+#define NXFONT_BITMAP_77 {0xff, 0x0, 0xf, 0xf0, 0x3f, 0x0, 0x1f, 0xc0, 0x1f, 0x80, 0x1f, 0x80, 0x1f, 0x80, 0x3f, 0x80, 0x17, 0xc0, 0x3f, 0x80, 0x17, 0xc0, 0x2f, 0x80, 0x17, 0xc0, 0x6f, 0x80, 0x13, 0xe0, 0x4f, 0x80, 0x13, 0xe0, 0xcf, 0x80, 0x13, 0xe0, 0xcf, 0x80, 0x11, 0xf0, 0x8f, 0x80, 0x11, 0xf1, 0x8f, 0x80, 0x10, 0xf9, 0xf, 0x80, 0x10, 0xfb, 0xf, 0x80, 0x10, 0xfb, 0xf, 0x80, 0x10, 0x7e, 0xf, 0x80, 0x10, 0x7e, 0xf, 0x80, 0x10, 0x7c, 0xf, 0x80, 0x10, 0x3c, 0xf, 0x80, 0x10, 0x3c, 0xf, 0x80, 0x10, 0x18, 0xf, 0x80, 0x38, 0x18, 0x1f, 0xc0, 0xfe, 0x18, 0x3f, 0xf0}
+
+/* N (78) */
+#define NXFONT_METRICS_78 {3, 22, 23, 1, 14, 0}
+#define NXFONT_BITMAP_78 {0xfe, 0x1, 0xfc, 0x7f, 0x0, 0x70, 0x3f, 0x80, 0x20, 0x1f, 0x80, 0x20, 0x1f, 0xc0, 0x20, 0x1f, 0xe0, 0x20, 0x17, 0xf0, 0x20, 0x13, 0xf8, 0x20, 0x11, 0xf8, 0x20, 0x11, 0xfc, 0x20, 0x10, 0xfe, 0x20, 0x10, 0x7f, 0x20, 0x10, 0x3f, 0x20, 0x10, 0x1f, 0xa0, 0x10, 0x1f, 0xe0, 0x10, 0xf, 0xe0, 0x10, 0x7, 0xe0, 0x10, 0x3, 0xe0, 0x10, 0x3, 0xe0, 0x10, 0x1, 0xe0, 0x10, 0x0, 0xe0, 0x38, 0x0, 0x60, 0xfe, 0x0, 0x20}
+
+/* O (79) */
+#define NXFONT_METRICS_79 {3, 21, 23, 2, 14, 0}
+#define NXFONT_BITMAP_79 {0x1, 0xfc, 0x0, 0x7, 0xff, 0x0, 0xf, 0x8f, 0x80, 0x1e, 0x3, 0xc0, 0x3c, 0x1, 0xe0, 0x7c, 0x1, 0xf0, 0x78, 0x0, 0xf0, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0x78, 0x0, 0xf0, 0x7c, 0x1, 0xf0, 0x3c, 0x1, 0xe0, 0x1e, 0x3, 0xc0, 0xf, 0x8f, 0x80, 0x7, 0xff, 0x0, 0x1, 0xfc, 0x0}
+
+/* P (80) */
+#define NXFONT_METRICS_80 {3, 19, 23, 0, 14, 0}
+#define NXFONT_BITMAP_80 {0xff, 0xfc, 0x0, 0x3f, 0x1f, 0x80, 0x1f, 0xf, 0xc0, 0x1f, 0x7, 0xc0, 0x1f, 0x7, 0xe0, 0x1f, 0x3, 0xe0, 0x1f, 0x3, 0xe0, 0x1f, 0x3, 0xe0, 0x1f, 0x3, 0xe0, 0x1f, 0x7, 0xc0, 0x1f, 0x7, 0xc0, 0x1f, 0x1f, 0x80, 0x1f, 0xfe, 0x0, 0x1f, 0x0, 0x0, 0x1f, 0x0, 0x0, 0x1f, 0x0, 0x0, 0x1f, 0x0, 0x0, 0x1f, 0x0, 0x0, 0x1f, 0x0, 0x0, 0x1f, 0x0, 0x0, 0x1f, 0x0, 0x0, 0x3f, 0x80, 0x0, 0xff, 0xe0, 0x0}
+
+/* Q (81) */
+#define NXFONT_METRICS_81 {3, 22, 27, 2, 14, 0}
+#define NXFONT_BITMAP_81 {0x1, 0xfc, 0x0, 0x7, 0xff, 0x0, 0xf, 0x8f, 0x80, 0x1e, 0x3, 0xc0, 0x3c, 0x1, 0xe0, 0x7c, 0x1, 0xf0, 0x78, 0x0, 0xf0, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0x7c, 0x1, 0xf0, 0x7c, 0x1, 0xf0, 0x3e, 0x3, 0xe0, 0x1f, 0x7, 0xc0, 0x7, 0xff, 0x0, 0x1, 0xfc, 0x0, 0x0, 0xfe, 0x0, 0x0, 0x7f, 0x84, 0x0, 0x1f, 0xf8, 0x0, 0x7, 0xe0}
+
+/* R (82) */
+#define NXFONT_METRICS_82 {3, 22, 23, 1, 14, 0}
+#define NXFONT_BITMAP_82 {0xff, 0xfc, 0x0, 0x3f, 0x1f, 0x80, 0x1f, 0x7, 0xc0, 0x1f, 0x7, 0xe0, 0x1f, 0x3, 0xe0, 0x1f, 0x3, 0xe0, 0x1f, 0x3, 0xe0, 0x1f, 0x3, 0xe0, 0x1f, 0x7, 0xe0, 0x1f, 0x7, 0xc0, 0x1f, 0x1f, 0x80, 0x1f, 0xfc, 0x0, 0x1f, 0x7e, 0x0, 0x1f, 0x3e, 0x0, 0x1f, 0x3f, 0x0, 0x1f, 0x1f, 0x80, 0x1f, 0x1f, 0x80, 0x1f, 0xf, 0xc0, 0x1f, 0x7, 0xe0, 0x1f, 0x7, 0xe0, 0x1f, 0x3, 0xf0, 0x3f, 0x81, 0xf8, 0xff, 0xe1, 0xfc}
+
+/* S (83) */
+#define NXFONT_METRICS_83 {2, 15, 23, 1, 14, 0}
+#define NXFONT_BITMAP_83 {0xf, 0xc4, 0x38, 0x7c, 0x70, 0x3c, 0x70, 0x1c, 0xf0, 0xc, 0xf0, 0xc, 0xf8, 0x4, 0xfc, 0x0, 0xff, 0x0, 0x7f, 0xc0, 0x3f, 0xf0, 0x1f, 0xf8, 0xf, 0xfc, 0x3, 0xfc, 0x1, 0xfe, 0x80, 0x7e, 0x80, 0x3e, 0xc0, 0x1e, 0xc0, 0x1e, 0xe0, 0x1c, 0xf0, 0x1c, 0xf8, 0x38, 0x8f, 0xe0}
+
+/* T (84) */
+#define NXFONT_METRICS_84 {3, 19, 23, 1, 14, 0}
+#define NXFONT_BITMAP_84 {0xff, 0xff, 0xe0, 0xf9, 0xf3, 0xe0, 0xe1, 0xf0, 0xe0, 0xc1, 0xf0, 0x60, 0x81, 0xf0, 0x20, 0x81, 0xf0, 0x20, 0x81, 0xf0, 0x20, 0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0, 0x3, 0xf8, 0x0, 0xf, 0xfe, 0x0}
+
+/* U (85) */
+#define NXFONT_METRICS_85 {3, 23, 23, 0, 14, 0}
+#define NXFONT_BITMAP_85 {0xff, 0xe0, 0xfe, 0x3f, 0x80, 0x38, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0xf, 0x80, 0x30, 0xf, 0x80, 0x60, 0x7, 0xc0, 0xc0, 0x3, 0xff, 0x80, 0x0, 0xfe, 0x0}
+
+/* V (86) */
+#define NXFONT_METRICS_86 {3, 22, 23, 1, 14, 0}
+#define NXFONT_BITMAP_86 {0xff, 0xc3, 0xfc, 0x7f, 0x0, 0xf0, 0x3e, 0x0, 0x60, 0x3f, 0x0, 0x40, 0x1f, 0x0, 0xc0, 0x1f, 0x80, 0xc0, 0xf, 0x80, 0x80, 0xf, 0x81, 0x80, 0xf, 0xc1, 0x0, 0x7, 0xc1, 0x0, 0x7, 0xc3, 0x0, 0x3, 0xe2, 0x0, 0x3, 0xe6, 0x0, 0x3, 0xf6, 0x0, 0x1, 0xf4, 0x0, 0x1, 0xfc, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0x70, 0x0, 0x0, 0x70, 0x0, 0x0, 0x20, 0x0, 0x0, 0x20, 0x0}
+
+/* W (87) */
+#define NXFONT_METRICS_87 {4, 32, 23, 0, 14, 0}
+#define NXFONT_BITMAP_87 {0xff, 0xef, 0xff, 0x3f, 0x7f, 0x3, 0xf8, 0xe, 0x3f, 0x1, 0xf8, 0xc, 0x1f, 0x1, 0xf8, 0xc, 0x1f, 0x1, 0xf8, 0x8, 0x1f, 0x81, 0xfc, 0x18, 0xf, 0x81, 0xfc, 0x18, 0xf, 0x81, 0x7c, 0x10, 0xf, 0xc3, 0x7c, 0x30, 0x7, 0xc2, 0x7e, 0x30, 0x7, 0xc6, 0x3e, 0x20, 0x7, 0xe6, 0x3e, 0x60, 0x3, 0xe4, 0x3e, 0x60, 0x3, 0xec, 0x1f, 0x40, 0x3, 0xf8, 0x1f, 0xc0, 0x1, 0xf8, 0x1f, 0xc0, 0x1, 0xf8, 0xf, 0x80, 0x1, 0xf0, 0xf, 0x80, 0x0, 0xf0, 0xf, 0x80, 0x0, 0xe0, 0x7, 0x0, 0x0, 0xe0, 0x7, 0x0, 0x0, 0xe0, 0x7, 0x0, 0x0, 0x40, 0x2, 0x0}
+
+/* X (88) */
+#define NXFONT_METRICS_88 {3, 21, 23, 1, 14, 0}
+#define NXFONT_BITMAP_88 {0xff, 0xcf, 0xe0, 0x7f, 0x3, 0x0, 0x3f, 0x2, 0x0, 0x1f, 0x86, 0x0, 0x1f, 0x84, 0x0, 0xf, 0xcc, 0x0, 0xf, 0xc8, 0x0, 0x7, 0xf8, 0x0, 0x3, 0xf0, 0x0, 0x3, 0xf0, 0x0, 0x1, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x1, 0xfc, 0x0, 0x1, 0x7c, 0x0, 0x3, 0x3e, 0x0, 0x2, 0x3f, 0x0, 0x6, 0x1f, 0x0, 0x4, 0x1f, 0x80, 0xc, 0xf, 0xc0, 0x8, 0xf, 0xc0, 0x18, 0x7, 0xe0, 0x38, 0x7, 0xf0, 0xfe, 0x3f, 0xf8}
+
+/* Y (89) */
+#define NXFONT_METRICS_89 {3, 22, 23, 1, 14, 0}
+#define NXFONT_BITMAP_89 {0xff, 0xc3, 0xfc, 0x7f, 0x0, 0xf0, 0x3f, 0x0, 0x60, 0x3f, 0x0, 0x60, 0x1f, 0x80, 0xc0, 0x1f, 0x80, 0x80, 0xf, 0xc1, 0x80, 0xf, 0xc3, 0x0, 0x7, 0xe3, 0x0, 0x3, 0xe6, 0x0, 0x3, 0xf4, 0x0, 0x1, 0xfc, 0x0, 0x1, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x1, 0xfc, 0x0, 0x7, 0xff, 0x0}
+
+/* Z (90) */
+#define NXFONT_METRICS_90 {3, 19, 23, 1, 14, 0}
+#define NXFONT_BITMAP_90 {0x3f, 0xff, 0xc0, 0x7e, 0xf, 0x80, 0x78, 0x1f, 0x80, 0x70, 0x1f, 0x0, 0x60, 0x3f, 0x0, 0x40, 0x7e, 0x0, 0x0, 0x7e, 0x0, 0x0, 0xfc, 0x0, 0x0, 0xfc, 0x0, 0x1, 0xf8, 0x0, 0x1, 0xf0, 0x0, 0x3, 0xf0, 0x0, 0x3, 0xe0, 0x0, 0x7, 0xe0, 0x0, 0x7, 0xc0, 0x0, 0xf, 0xc0, 0x20, 0x1f, 0x80, 0x20, 0x1f, 0x80, 0x60, 0x3f, 0x0, 0x60, 0x3f, 0x0, 0xe0, 0x7e, 0x1, 0xe0, 0x7e, 0x7, 0xc0, 0xff, 0xff, 0xc0}
+
+/* bracketleft (91) */
+#define NXFONT_METRICS_91 {1, 7, 28, 2, 14, 0}
+#define NXFONT_BITMAP_91 {0xfe, 0xf0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xf0, 0xfe}
+
+/* backslash (92) */
+#define NXFONT_METRICS_92 {1, 8, 26, 0, 11, 0}
+#define NXFONT_BITMAP_92 {0x80, 0xc0, 0xc0, 0xc0, 0x60, 0x60, 0x60, 0x60, 0x30, 0x30, 0x30, 0x18, 0x18, 0x18, 0x18, 0xc, 0xc, 0xc, 0x4, 0x6, 0x6, 0x6, 0x3, 0x3, 0x3, 0x3}
+
+/* bracketright (93) */
+#define NXFONT_METRICS_93 {1, 7, 28, 1, 14, 0}
+#define NXFONT_BITMAP_93 {0xfe, 0x1e, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0x1e, 0xfe}
+
+/* asciicircum (94) */
+#define NXFONT_METRICS_94 {2, 11, 13, 4, 14, 0}
+#define NXFONT_BITMAP_94 {0xe, 0x0, 0xe, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1b, 0x0, 0x3b, 0x80, 0x3b, 0x80, 0x71, 0xc0, 0x71, 0xc0, 0x61, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xc0, 0x60}
+
+/* underscore (95) */
+#define NXFONT_METRICS_95 {2, 16, 3, 0, 39, 0}
+#define NXFONT_BITMAP_95 {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}
+
+/* grave (96) */
+#define NXFONT_METRICS_96 {1, 7, 6, 1, 14, 0}
+#define NXFONT_BITMAP_96 {0xc0, 0xe0, 0x70, 0x38, 0xc, 0x2}
+
+/* a (97) */
+#define NXFONT_METRICS_97 {2, 14, 16, 1, 21, 0}
+#define NXFONT_BITMAP_97 {0x1f, 0x80, 0x31, 0xe0, 0x70, 0xf0, 0x78, 0xf0, 0x78, 0xf0, 0x30, 0xf0, 0x1, 0xf0, 0x7, 0xf0, 0x1c, 0xf0, 0x38, 0xf0, 0x78, 0xf0, 0xf0, 0xf0, 0xf9, 0xf0, 0xff, 0xf4, 0x7e, 0xfc, 0x3c, 0x78}
+
+/* b (98) */
+#define NXFONT_METRICS_98 {3, 17, 22, 0, 15, 0}
+#define NXFONT_BITMAP_98 {0xfc, 0x0, 0x0, 0x7c, 0x0, 0x0, 0x3c, 0x0, 0x0, 0x3c, 0x0, 0x0, 0x3c, 0x0, 0x0, 0x3c, 0x0, 0x0, 0x3c, 0x78, 0x0, 0x3d, 0xfe, 0x0, 0x3f, 0xfe, 0x0, 0x3e, 0x1f, 0x0, 0x3c, 0x1f, 0x0, 0x3c, 0xf, 0x80, 0x3c, 0xf, 0x80, 0x3c, 0xf, 0x80, 0x3c, 0xf, 0x80, 0x3c, 0xf, 0x80, 0x3c, 0xf, 0x80, 0x3c, 0xf, 0x0, 0x3c, 0x1f, 0x0, 0x3e, 0x3e, 0x0, 0x37, 0xfc, 0x0, 0x21, 0xf0, 0x0}
+
+/* c (99) */
+#define NXFONT_METRICS_99 {2, 14, 16, 1, 21, 0}
+#define NXFONT_BITMAP_99 {0x7, 0xf0, 0x1e, 0x78, 0x3c, 0x3c, 0x7c, 0x3c, 0x78, 0x18, 0xf8, 0x0, 0xf8, 0x0, 0xf8, 0x0, 0xf8, 0x0, 0xf8, 0x0, 0xf8, 0x0, 0xf8, 0x0, 0x7c, 0x0, 0x3e, 0x18, 0x1f, 0xf0, 0xf, 0xe0}
+
+/* d (100) */
+#define NXFONT_METRICS_100 {2, 16, 22, 1, 15, 0}
+#define NXFONT_BITMAP_100 {0x0, 0xfc, 0x0, 0x7c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0xf, 0xbc, 0x3f, 0xfc, 0x7c, 0x3c, 0x78, 0x3c, 0xf8, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0x78, 0x3c, 0x7c, 0x7e, 0x3f, 0xff, 0xf, 0xb8}
+
+/* e (101) */
+#define NXFONT_METRICS_101 {2, 14, 16, 0, 21, 0}
+#define NXFONT_BITMAP_101 {0x7, 0xc0, 0x1e, 0xf0, 0x3c, 0x70, 0x78, 0x38, 0x78, 0x3c, 0xf8, 0x3c, 0xf8, 0x3c, 0xff, 0xfc, 0xf8, 0x0, 0xf8, 0x0, 0xf8, 0x0, 0x78, 0x0, 0x7c, 0x0, 0x3e, 0x18, 0x1f, 0xf0, 0x7, 0xe0}
+
+/* f (102) */
+#define NXFONT_METRICS_102 {2, 12, 23, 0, 14, 0}
+#define NXFONT_BITMAP_102 {0x7, 0xe0, 0x1e, 0x70, 0x1c, 0xf0, 0x3c, 0xf0, 0x3c, 0x60, 0x3c, 0x0, 0x3c, 0x0, 0xff, 0x80, 0xff, 0x80, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x7e, 0x0, 0xff, 0x0}
+
+/* g (103) */
+#define NXFONT_METRICS_103 {2, 14, 23, 1, 21, 0}
+#define NXFONT_BITMAP_103 {0xf, 0xc0, 0x3d, 0xfc, 0x70, 0xfc, 0xf0, 0xf0, 0xf0, 0x78, 0xf0, 0x78, 0xf0, 0x78, 0xf0, 0x78, 0x78, 0xf8, 0x3f, 0xf0, 0x1f, 0xc0, 0x3c, 0x0, 0x60, 0x0, 0xe0, 0x0, 0xff, 0xe0, 0xff, 0xf8, 0x7f, 0xfc, 0x30, 0x3c, 0x60, 0x1c, 0xc0, 0xc, 0xe0, 0x1c, 0x7f, 0xf8, 0x1f, 0xe0}
+
+/* h (104) */
+#define NXFONT_METRICS_104 {3, 17, 22, 0, 15, 0}
+#define NXFONT_BITMAP_104 {0xfc, 0x0, 0x0, 0x7c, 0x0, 0x0, 0x3c, 0x0, 0x0, 0x3c, 0x0, 0x0, 0x3c, 0x0, 0x0, 0x3c, 0x0, 0x0, 0x3c, 0x78, 0x0, 0x3d, 0xfc, 0x0, 0x3f, 0xfe, 0x0, 0x3e, 0x3e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x7e, 0x3f, 0x0, 0xff, 0x7f, 0x80}
+
+/* i (105) */
+#define NXFONT_METRICS_105 {1, 8, 23, 0, 14, 0}
+#define NXFONT_BITMAP_105 {0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x0, 0x0, 0xfc, 0x7c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x7e, 0xff}
+
+/* j (106) -- NOTE: Xoffset should be -2, not 0. */
+#define NXFONT_METRICS_106 {2, 10, 30, 0, 14, 0}
+#define NXFONT_BITMAP_106 {0x1, 0x80, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x1, 0x80, 0x0, 0x0, 0x0, 0x0, 0xf, 0xc0, 0x7, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x63, 0xc0, 0xf3, 0xc0, 0xf3, 0x80, 0x77, 0x80, 0x3e, 0x0}
+
+/* k (107) */
+#define NXFONT_METRICS_107 {3, 18, 22, 0, 15, 0}
+#define NXFONT_BITMAP_107 {0xfc, 0x0, 0x0, 0x7c, 0x0, 0x0, 0x3c, 0x0, 0x0, 0x3c, 0x0, 0x0, 0x3c, 0x0, 0x0, 0x3c, 0x0, 0x0, 0x3c, 0x1f, 0x0, 0x3c, 0xe, 0x0, 0x3c, 0xc, 0x0, 0x3c, 0x18, 0x0, 0x3c, 0x30, 0x0, 0x3c, 0x60, 0x0, 0x3c, 0xc0, 0x0, 0x3d, 0xc0, 0x0, 0x3f, 0xe0, 0x0, 0x3d, 0xf0, 0x0, 0x3c, 0xf8, 0x0, 0x3c, 0x7c, 0x0, 0x3c, 0x3e, 0x0, 0x3c, 0x1f, 0x0, 0x7e, 0xf, 0x80, 0xff, 0x1f, 0xc0}
+
+/* l (108) */
+#define NXFONT_METRICS_108 {1, 8, 22, 0, 15, 0}
+#define NXFONT_BITMAP_108 {0xfc, 0x7c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x7e, 0xff}
+
+/* m (109) */
+#define NXFONT_METRICS_109 {4, 26, 16, 0, 21, 0}
+#define NXFONT_BITMAP_109 {0xfc, 0x78, 0x3c, 0x0, 0x7d, 0xfe, 0xfe, 0x0, 0x3f, 0x3f, 0x9f, 0x0, 0x3e, 0x3f, 0x1f, 0x0, 0x3e, 0x1e, 0xf, 0x0, 0x3c, 0x1e, 0xf, 0x0, 0x3c, 0x1e, 0xf, 0x0, 0x3c, 0x1e, 0xf, 0x0, 0x3c, 0x1e, 0xf, 0x0, 0x3c, 0x1e, 0xf, 0x0, 0x3c, 0x1e, 0xf, 0x0, 0x3c, 0x1e, 0xf, 0x0, 0x3c, 0x1e, 0xf, 0x0, 0x3c, 0x1e, 0xf, 0x0, 0x7e, 0x3f, 0x1f, 0x80, 0xff, 0x7f, 0xbf, 0xc0}
+
+/* n (110) */
+#define NXFONT_METRICS_110 {3, 17, 16, 0, 21, 0}
+#define NXFONT_BITMAP_110 {0xfc, 0x78, 0x0, 0x7d, 0xfc, 0x0, 0x3f, 0x3e, 0x0, 0x3e, 0x1e, 0x0, 0x3e, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x7e, 0x3f, 0x0, 0xff, 0x7f, 0x80}
+
+/* o (111) */
+#define NXFONT_METRICS_111 {2, 14, 16, 1, 21, 0}
+#define NXFONT_BITMAP_111 {0xf, 0xc0, 0x3c, 0xf0, 0x78, 0x78, 0x78, 0x78, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0x78, 0x78, 0x78, 0x78, 0x3c, 0xf0, 0xf, 0xc0}
+
+/* p (112) */
+#define NXFONT_METRICS_112 {3, 17, 23, 0, 21, 0}
+#define NXFONT_BITMAP_112 {0xfc, 0xf8, 0x0, 0x7d, 0xfe, 0x0, 0x3f, 0x1f, 0x0, 0x3e, 0xf, 0x0, 0x3c, 0xf, 0x80, 0x3c, 0x7, 0x80, 0x3c, 0x7, 0x80, 0x3c, 0x7, 0x80, 0x3c, 0x7, 0x80, 0x3c, 0x7, 0x80, 0x3c, 0x7, 0x80, 0x3c, 0x7, 0x80, 0x3e, 0xf, 0x0, 0x3f, 0xf, 0x0, 0x3f, 0xfe, 0x0, 0x3c, 0xf8, 0x0, 0x3c, 0x0, 0x0, 0x3c, 0x0, 0x0, 0x3c, 0x0, 0x0, 0x3c, 0x0, 0x0, 0x3c, 0x0, 0x0, 0x7e, 0x0, 0x0, 0xff, 0x0, 0x0}
+
+/* q (113) */
+#define NXFONT_METRICS_113 {2, 16, 23, 1, 21, 0}
+#define NXFONT_BITMAP_113 {0xf, 0xc4, 0x3e, 0xec, 0x7c, 0x3c, 0x78, 0x3c, 0xf8, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0x78, 0x3c, 0x78, 0x7c, 0x3f, 0xfc, 0xf, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x7e, 0x0, 0xff}
+
+/* r (114) */
+#define NXFONT_METRICS_114 {2, 13, 16, 1, 21, 0}
+#define NXFONT_BITMAP_114 {0xfc, 0x70, 0x7c, 0xf8, 0x3f, 0xf8, 0x3f, 0x78, 0x3e, 0x30, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x7e, 0x0, 0xff, 0x0}
+
+/* s (115) */
+#define NXFONT_METRICS_115 {2, 10, 16, 1, 21, 0}
+#define NXFONT_BITMAP_115 {0x1f, 0x40, 0x71, 0xc0, 0x60, 0xc0, 0xe0, 0xc0, 0xf0, 0x40, 0xfc, 0x0, 0x7f, 0x0, 0x7f, 0x80, 0x3f, 0x80, 0xf, 0xc0, 0x3, 0xc0, 0x81, 0xc0, 0xc1, 0xc0, 0xc1, 0xc0, 0xe3, 0x80, 0xbf, 0x0}
+
+/* t (116) */
+#define NXFONT_METRICS_116 {2, 10, 21, 0, 16, 0}
+#define NXFONT_BITMAP_116 {0x4, 0x0, 0xc, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x3c, 0x0, 0x7f, 0x80, 0xff, 0x80, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x40, 0x3e, 0xc0, 0x3f, 0x80, 0x1e, 0x0}
+
+/* u (117) */
+#define NXFONT_METRICS_117 {3, 17, 16, 0, 21, 0}
+#define NXFONT_BITMAP_117 {0xfc, 0x7e, 0x0, 0x7c, 0x3e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x3e, 0x0, 0x3e, 0x5f, 0x0, 0x1f, 0xdf, 0x80, 0x7, 0x8c, 0x0}
+
+/* v (118) */
+#define NXFONT_METRICS_118 {2, 15, 16, 0, 21, 0}
+#define NXFONT_BITMAP_118 {0xff, 0x3e, 0x7c, 0xc, 0x3c, 0x8, 0x3e, 0x18, 0x1e, 0x10, 0x1f, 0x10, 0x1f, 0x30, 0xf, 0x20, 0xf, 0x20, 0x7, 0xe0, 0x7, 0xc0, 0x7, 0xc0, 0x3, 0x80, 0x3, 0x80, 0x1, 0x0, 0x1, 0x0}
+
+/* w (119) */
+#define NXFONT_METRICS_119 {3, 23, 16, 0, 21, 0}
+#define NXFONT_BITMAP_119 {0xff, 0x7f, 0xbe, 0x7e, 0x3e, 0x1c, 0x3c, 0x1e, 0x8, 0x3e, 0x1e, 0x18, 0x1e, 0x1f, 0x10, 0x1f, 0x1f, 0x30, 0x1f, 0x3f, 0x30, 0xf, 0x2f, 0xa0, 0xf, 0xe7, 0xe0, 0x7, 0xe7, 0xc0, 0x7, 0xc7, 0xc0, 0x7, 0xc3, 0xc0, 0x3, 0x83, 0x80, 0x3, 0x83, 0x80, 0x1, 0x1, 0x0, 0x1, 0x1, 0x0}
+
+/* x (120) */
+#define NXFONT_METRICS_120 {2, 16, 16, 0, 21, 0}
+#define NXFONT_BITMAP_120 {0xff, 0x3e, 0x7e, 0x18, 0x3e, 0x18, 0x1f, 0x30, 0x1f, 0x60, 0xf, 0xc0, 0xf, 0xc0, 0x7, 0xc0, 0x3, 0xe0, 0x3, 0xe0, 0x7, 0xf0, 0xd, 0xf8, 0x18, 0xf8, 0x18, 0x7c, 0x30, 0x7c, 0xfc, 0xff}
+
+/* y (121) */
+#define NXFONT_METRICS_121 {2, 15, 23, 0, 21, 0}
+#define NXFONT_BITMAP_121 {0xff, 0xbe, 0x7e, 0xc, 0x3e, 0x8, 0x3e, 0x8, 0x1f, 0x18, 0x1f, 0x10, 0xf, 0x10, 0xf, 0xb0, 0xf, 0xa0, 0x7, 0xa0, 0x7, 0xe0, 0x7, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x1, 0x80, 0x1, 0x80, 0x1, 0x80, 0x1, 0x0, 0x73, 0x0, 0xf3, 0x0, 0xf6, 0x0, 0xfe, 0x0, 0x78, 0x0}
+
+/* z (122) */
+#define NXFONT_METRICS_122 {2, 12, 16, 1, 21, 0}
+#define NXFONT_BITMAP_122 {0xff, 0xf0, 0xe3, 0xf0, 0xc3, 0xe0, 0x87, 0xe0, 0x87, 0xc0, 0xf, 0x80, 0xf, 0x80, 0x1f, 0x0, 0x1f, 0x0, 0x3e, 0x0, 0x3e, 0x10, 0x7c, 0x10, 0x7c, 0x30, 0xf8, 0x30, 0xf8, 0xf0, 0xff, 0xf0}
+
+/* braceleft (123) */
+#define NXFONT_METRICS_123 {2, 10, 27, 1, 14, 0}
+#define NXFONT_BITMAP_123 {0x7, 0xc0, 0xe, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x38, 0x0, 0x70, 0x0, 0xe0, 0x0, 0x70, 0x0, 0x38, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0xe, 0x0, 0x7, 0xc0}
+
+/* bar (124) */
+#define NXFONT_METRICS_124 {1, 2, 30, 3, 14, 0}
+#define NXFONT_BITMAP_124 {0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* braceright (125) */
+#define NXFONT_METRICS_125 {2, 10, 27, 1, 14, 0}
+#define NXFONT_BITMAP_125 {0xf8, 0x0, 0x1c, 0x0, 0xe, 0x0, 0xe, 0x0, 0xe, 0x0, 0xe, 0x0, 0xe, 0x0, 0xe, 0x0, 0xe, 0x0, 0xe, 0x0, 0xe, 0x0, 0x7, 0x0, 0x3, 0x80, 0x1, 0xc0, 0x3, 0x80, 0x7, 0x0, 0xe, 0x0, 0xe, 0x0, 0xe, 0x0, 0xe, 0x0, 0xe, 0x0, 0xe, 0x0, 0xe, 0x0, 0xe, 0x0, 0xe, 0x0, 0x1c, 0x0, 0xf8, 0x0}
+
+/* asciitilde (126) */
+#define NXFONT_METRICS_126 {2, 15, 8, 1, 21, 0}
+#define NXFONT_BITMAP_126 {0x1c, 0x0, 0x3f, 0x0, 0x7f, 0x82, 0xff, 0xc6, 0x8f, 0xfe, 0x83, 0xfc, 0x1, 0xf8, 0x0, 0x70}
+
+/* exclamdown (161) */
+#define NXFONT_METRICS_161 {1, 5, 23, 3, 21, 0}
+#define NXFONT_BITMAP_161 {0x70, 0xf8, 0xf8, 0xf8, 0x70, 0x0, 0x0, 0x0, 0x20, 0x20, 0x20, 0x20, 0x70, 0x70, 0x70, 0x70, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0x70}
+
+/* cent (162) */
+#define NXFONT_METRICS_162 {2, 13, 25, 1, 17, 0}
+#define NXFONT_BITMAP_162 {0x0, 0x8, 0x0, 0x8, 0x0, 0x18, 0x0, 0x10, 0x7, 0xf0, 0x1c, 0xe0, 0x38, 0xf0, 0x78, 0xf0, 0xf0, 0xf0, 0xf0, 0xe0, 0xf0, 0x80, 0xf1, 0x80, 0xf1, 0x0, 0xf3, 0x0, 0xf2, 0x0, 0xfa, 0x10, 0x7e, 0x30, 0x7f, 0xe0, 0x3f, 0xc0, 0xf, 0x0, 0x8, 0x0, 0x10, 0x0, 0x10, 0x0, 0x20, 0x0, 0x20, 0x0}
+
+/* sterling (163) */
+#define NXFONT_METRICS_163 {2, 16, 23, 1, 14, 0}
+#define NXFONT_BITMAP_163 {0x0, 0xf0, 0x3, 0xfc, 0x7, 0x1e, 0xe, 0x1e, 0xe, 0x1e, 0x1e, 0xc, 0x1e, 0x0, 0x1e, 0x0, 0x1f, 0x0, 0xf, 0x0, 0xf, 0x0, 0x7f, 0xf0, 0x7f, 0xf0, 0x7, 0x80, 0x7, 0x80, 0x7, 0x80, 0x37, 0x80, 0x7f, 0x1, 0xef, 0x3, 0xc7, 0x87, 0xc7, 0xff, 0xee, 0xfe, 0x7c, 0x7c}
+
+/* currency (164) */
+#define NXFONT_METRICS_164 {2, 14, 15, 1, 18, 0}
+#define NXFONT_BITMAP_164 {0x60, 0x18, 0xf7, 0xbc, 0xff, 0xfc, 0x7f, 0xf8, 0x3c, 0xf0, 0x78, 0x78, 0x70, 0x38, 0x70, 0x38, 0x70, 0x38, 0x78, 0x78, 0x3c, 0xf0, 0x7f, 0xf8, 0xff, 0xfc, 0xf7, 0xbc, 0x60, 0x18}
+
+/* yen (165) */
+#define NXFONT_METRICS_165 {3, 18, 23, 1, 14, 0}
+#define NXFONT_BITMAP_165 {0xff, 0x87, 0xc0, 0x3e, 0x3, 0x80, 0x3e, 0x3, 0x0, 0x1f, 0x3, 0x0, 0x1f, 0x6, 0x0, 0x1f, 0x86, 0x0, 0xf, 0x84, 0x0, 0xf, 0x8c, 0x0, 0x7, 0xc8, 0x0, 0x7, 0xd8, 0x0, 0x7, 0xd0, 0x0, 0x3, 0xf0, 0x0, 0x1f, 0xfc, 0x0, 0x1f, 0xfc, 0x0, 0x3, 0xe0, 0x0, 0x1f, 0xfc, 0x0, 0x1f, 0xfc, 0x0, 0x1, 0xe0, 0x0, 0x1, 0xe0, 0x0, 0x1, 0xe0, 0x0, 0x1, 0xe0, 0x0, 0x3, 0xf0, 0x0, 0xf, 0xfc, 0x0}
+
+/* brokenbar (166) */
+#define NXFONT_METRICS_166 {1, 2, 30, 3, 14, 0}
+#define NXFONT_BITMAP_166 {0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}
+
+/* section (167) */
+#define NXFONT_METRICS_167 {2, 12, 28, 2, 14, 0}
+#define NXFONT_BITMAP_167 {0xf, 0x80, 0x18, 0xc0, 0x30, 0xe0, 0x71, 0xe0, 0x71, 0xe0, 0x78, 0xc0, 0x3c, 0x0, 0x3e, 0x0, 0x1f, 0x0, 0xf, 0x80, 0x3f, 0xc0, 0x63, 0xe0, 0xc1, 0xe0, 0xc0, 0xf0, 0xe0, 0x70, 0xf0, 0x30, 0x78, 0x30, 0x7c, 0x60, 0x3f, 0xc0, 0x1f, 0x80, 0x7, 0x80, 0x3, 0xc0, 0x31, 0xe0, 0x78, 0xe0, 0x78, 0xe0, 0x70, 0xc0, 0x31, 0x80, 0x1f, 0x0}
+
+/* dieresis (168) */
+#define NXFONT_METRICS_168 {1, 8, 4, 2, 15, 0}
+#define NXFONT_BITMAP_168 {0x42, 0xe7, 0xe7, 0x42}
+
+/* copyright (169) */
+#define NXFONT_METRICS_169 {3, 22, 23, 1, 14, 0}
+#define NXFONT_BITMAP_169 {0x1, 0xfe, 0x0, 0x7, 0xff, 0x80, 0xf, 0x3, 0xc0, 0x1c, 0x0, 0xe0, 0x38, 0x0, 0x70, 0x30, 0xfe, 0x30, 0x71, 0xc7, 0x38, 0x63, 0x83, 0x18, 0xe7, 0x83, 0x1c, 0xc7, 0x0, 0xc, 0xc7, 0x0, 0xc, 0xc7, 0x0, 0xc, 0xc7, 0x0, 0xc, 0xc7, 0x80, 0xc, 0xc3, 0xc3, 0xc, 0xe3, 0xe6, 0x1c, 0x60, 0xfc, 0x18, 0x70, 0x0, 0x38, 0x38, 0x0, 0x70, 0x1c, 0x0, 0xe0, 0xf, 0x3, 0xc0, 0x7, 0xff, 0x80, 0x1, 0xfe, 0x0}
+
+/* ordfeminine (170) */
+#define NXFONT_METRICS_170 {2, 9, 14, 0, 14, 0}
+#define NXFONT_BITMAP_170 {0x3c, 0x0, 0x66, 0x0, 0x67, 0x0, 0x67, 0x0, 0x1f, 0x0, 0x67, 0x0, 0xc7, 0x0, 0xc7, 0x0, 0xef, 0x80, 0x73, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x80, 0xff, 0x80}
+
+/* guillemotleft (171) */
+#define NXFONT_METRICS_171 {2, 14, 14, 2, 22, 0}
+#define NXFONT_BITMAP_171 {0x2, 0x4, 0x6, 0xc, 0xe, 0x1c, 0x1c, 0x38, 0x38, 0x70, 0x70, 0xe0, 0xe1, 0xc0, 0xe1, 0xc0, 0x70, 0xe0, 0x38, 0x70, 0x1c, 0x38, 0xe, 0x1c, 0x6, 0xc, 0x2, 0x4}
+
+/* logicalnot (172) */
+#define NXFONT_METRICS_172 {2, 16, 9, 1, 25, 0}
+#define NXFONT_BITMAP_172 {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x7, 0x0, 0x7, 0x0, 0x7, 0x0, 0x7, 0x0, 0x7, 0x0, 0x7}
+
+/* hyphen (173) */
+#define NXFONT_METRICS_173 {1, 8, 4, 1, 27, 0}
+#define NXFONT_BITMAP_173 {0xff, 0xff, 0xff, 0xff}
+
+/* registered (174) */
+#define NXFONT_METRICS_174 {3, 22, 23, 2, 14, 0}
+#define NXFONT_BITMAP_174 {0x1, 0xfe, 0x0, 0x7, 0xff, 0x80, 0xf, 0x3, 0xc0, 0x1c, 0x0, 0xe0, 0x38, 0x0, 0x70, 0x33, 0xfc, 0x30, 0x71, 0xce, 0x38, 0x60, 0xc7, 0x18, 0xe0, 0xc7, 0x1c, 0xc0, 0xc7, 0xc, 0xc0, 0xce, 0xc, 0xc0, 0xf8, 0xc, 0xc0, 0xdc, 0xc, 0xc0, 0xce, 0xc, 0xc0, 0xc6, 0xc, 0xe0, 0xc7, 0x1c, 0x61, 0xc3, 0x98, 0x73, 0xe3, 0xf8, 0x38, 0x0, 0x70, 0x1c, 0x0, 0xe0, 0xf, 0x3, 0xc0, 0x7, 0xff, 0x80, 0x1, 0xfe, 0x0}
+
+/* macron (175) */
+#define NXFONT_METRICS_175 {2, 9, 2, 1, 17, 0}
+#define NXFONT_BITMAP_175 {0xff, 0x80, 0xff, 0x80}
+
+/* degree (176) */
+#define NXFONT_METRICS_176 {2, 9, 10, 2, 14, 0}
+#define NXFONT_BITMAP_176 {0x1c, 0x0, 0x7f, 0x0, 0x63, 0x0, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0xc1, 0x80, 0x63, 0x0, 0x7f, 0x0, 0x3c, 0x0}
+
+/* plusminus (177) */
+#define NXFONT_METRICS_177 {2, 15, 19, 2, 18, 0}
+#define NXFONT_BITMAP_177 {0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0x0, 0x0, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe}
+
+/* twosuperior (178) */
+#define NXFONT_METRICS_178 {2, 10, 14, 1, 14, 0}
+#define NXFONT_BITMAP_178 {0x3e, 0x0, 0x7f, 0x0, 0xc7, 0x80, 0x83, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x0, 0x6, 0x0, 0xc, 0x0, 0x18, 0x0, 0x30, 0x40, 0x7f, 0xc0, 0xff, 0x80, 0xff, 0x80}
+
+/* threesuperior (179) */
+#define NXFONT_METRICS_179 {2, 9, 14, 1, 14, 0}
+#define NXFONT_BITMAP_179 {0x1e, 0x0, 0x3f, 0x0, 0x67, 0x80, 0x43, 0x80, 0x3, 0x0, 0x6, 0x0, 0x1f, 0x0, 0x7, 0x80, 0x3, 0x80, 0x3, 0x80, 0x3, 0x80, 0xc3, 0x80, 0xe7, 0x0, 0x7e, 0x0}
+
+/* acute (180) */
+#define NXFONT_METRICS_180 {1, 7, 6, 3, 14, 0}
+#define NXFONT_BITMAP_180 {0x6, 0xe, 0x1c, 0x38, 0x60, 0x80}
+
+/* mu (181) */
+#define NXFONT_METRICS_181 {2, 16, 22, 2, 21, 0}
+#define NXFONT_BITMAP_181 {0xf8, 0xfc, 0x78, 0x7c, 0x78, 0x3c, 0x78, 0x3c, 0x78, 0x3c, 0x78, 0x3c, 0x78, 0x3c, 0x78, 0x3c, 0x78, 0x3c, 0x78, 0x3c, 0x78, 0x3c, 0x78, 0x3c, 0x78, 0x7c, 0x7c, 0xfc, 0x7f, 0xbf, 0x5f, 0x38, 0x40, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0}
+
+/* paragraph (182) */
+#define NXFONT_METRICS_182 {2, 16, 29, 1, 14, 0}
+#define NXFONT_BITMAP_182 {0xf, 0xff, 0x3f, 0xff, 0x3f, 0x8c, 0x7f, 0x8c, 0xff, 0x8c, 0xff, 0x8c, 0xff, 0x8c, 0xff, 0x8c, 0xff, 0x8c, 0xff, 0x8c, 0xff, 0x8c, 0x7f, 0x8c, 0x3f, 0x8c, 0x3f, 0x8c, 0xf, 0x8c, 0x1, 0x8c, 0x1, 0x8c, 0x1, 0x8c, 0x1, 0x8c, 0x1, 0x8c, 0x1, 0x8c, 0x1, 0x8c, 0x1, 0x8c, 0x1, 0x8c, 0x1, 0x8c, 0x1, 0x8c, 0x1, 0x8c, 0x1, 0x8c, 0x1, 0x8c}
+
+/* periodcentered (183) */
+#define NXFONT_METRICS_183 {1, 4, 4, 2, 24, 0}
+#define NXFONT_BITMAP_183 {0x60, 0xf0, 0xf0, 0x60}
+
+/* cedilla (184) */
+#define NXFONT_METRICS_184 {1, 7, 7, 1, 37, 0}
+#define NXFONT_BITMAP_184 {0x6, 0xc, 0x1c, 0xe, 0xc6, 0xee, 0x7c}
+
+/* onesuperior (185) */
+#define NXFONT_METRICS_185 {2, 9, 14, 0, 14, 0}
+#define NXFONT_BITMAP_185 {0xc, 0x0, 0x7c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0xff, 0x80}
+
+/* ordmasculine (186) */
+#define NXFONT_METRICS_186 {2, 9, 14, 1, 14, 0}
+#define NXFONT_BITMAP_186 {0x1c, 0x0, 0x77, 0x0, 0x63, 0x0, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0xe3, 0x80, 0x63, 0x0, 0x77, 0x0, 0x1c, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x80, 0xff, 0x80}
+
+/* guillemotright (187) */
+#define NXFONT_METRICS_187 {2, 14, 14, 1, 22, 0}
+#define NXFONT_BITMAP_187 {0x81, 0x0, 0xc1, 0x80, 0xe1, 0xc0, 0x70, 0xe0, 0x38, 0x70, 0x1c, 0x38, 0xe, 0x1c, 0xe, 0x1c, 0x1c, 0x38, 0x38, 0x70, 0x70, 0xe0, 0xe1, 0xc0, 0xc1, 0x80, 0x81, 0x0}
+
+/* onequarter (188) */
+#define NXFONT_METRICS_188 {3, 23, 23, 0, 14, 0}
+#define NXFONT_BITMAP_188 {0xc, 0x0, 0x8, 0x7c, 0x0, 0x18, 0x1c, 0x0, 0x30, 0x1c, 0x0, 0x30, 0x1c, 0x0, 0x60, 0x1c, 0x0, 0x60, 0x1c, 0x0, 0xc0, 0x1c, 0x1, 0x80, 0x1c, 0x1, 0x80, 0x1c, 0x3, 0xc, 0x1c, 0x6, 0x1c, 0x1c, 0x6, 0x3c, 0x1c, 0xc, 0x7c, 0xff, 0x98, 0xfc, 0x0, 0x18, 0xdc, 0x0, 0x31, 0x9c, 0x0, 0x63, 0x9c, 0x0, 0x63, 0x1c, 0x0, 0xc7, 0xfe, 0x1, 0xc7, 0xfe, 0x1, 0x80, 0x1c, 0x3, 0x0, 0x1c, 0x3, 0x0, 0x1c}
+
+/* onehalf (189) */
+#define NXFONT_METRICS_189 {3, 23, 23, 0, 14, 0}
+#define NXFONT_BITMAP_189 {0xc, 0x0, 0x30, 0x7c, 0x0, 0x60, 0x1c, 0x0, 0x60, 0x1c, 0x0, 0xc0, 0x1c, 0x0, 0x80, 0x1c, 0x1, 0x80, 0x1c, 0x3, 0x0, 0x1c, 0x2, 0x0, 0x1c, 0x6, 0x0, 0x1c, 0xc, 0xf0, 0x1c, 0x19, 0xf8, 0x1c, 0x1b, 0x3c, 0x1c, 0x32, 0x1c, 0xff, 0xb0, 0x1c, 0x0, 0x60, 0x1c, 0x0, 0x60, 0x18, 0x0, 0xc0, 0x30, 0x1, 0x80, 0x60, 0x1, 0x80, 0xc0, 0x3, 0x1, 0x82, 0x6, 0x3, 0xfe, 0x6, 0x7, 0xfc, 0xc, 0xf, 0xfc}
+
+/* threequarters (190) */
+#define NXFONT_METRICS_190 {3, 22, 23, 1, 14, 0}
+#define NXFONT_BITMAP_190 {0x1e, 0x0, 0x10, 0x3f, 0x0, 0x30, 0x67, 0x80, 0x60, 0x43, 0x80, 0x60, 0x3, 0x0, 0xc0, 0x6, 0x0, 0xc0, 0x1f, 0x1, 0x80, 0x7, 0x83, 0x0, 0x3, 0x83, 0x0, 0x3, 0x86, 0x18, 0x3, 0x8c, 0x38, 0xc3, 0x8c, 0x78, 0xe7, 0x18, 0xf8, 0x7e, 0x31, 0xf8, 0x0, 0x31, 0xb8, 0x0, 0x63, 0x38, 0x0, 0xc7, 0x38, 0x0, 0xc6, 0x38, 0x1, 0x8f, 0xfc, 0x3, 0x8f, 0xfc, 0x3, 0x0, 0x38, 0x6, 0x0, 0x38, 0x6, 0x0, 0x38}
+
+/* questiondown (191) */
+#define NXFONT_METRICS_191 {2, 12, 23, 2, 21, 0}
+#define NXFONT_BITMAP_191 {0x7, 0x0, 0xf, 0x80, 0xf, 0x80, 0xf, 0x80, 0x7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x2, 0x0, 0x6, 0x0, 0xc, 0x0, 0x1c, 0x0, 0x3c, 0x0, 0x78, 0x0, 0x78, 0x0, 0xf8, 0x60, 0xf8, 0xf0, 0xf8, 0xf0, 0xf8, 0x70, 0x78, 0x70, 0x3c, 0xe0, 0x1f, 0xc0}
+
+/* Agrave (192) */
+#define NXFONT_METRICS_192 {3, 21, 30, 1, 7, 0}
+#define NXFONT_BITMAP_192 {0x6, 0x0, 0x0, 0x7, 0x0, 0x0, 0x3, 0x80, 0x0, 0x1, 0xc0, 0x0, 0x0, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x20, 0x0, 0x0, 0x60, 0x0, 0x0, 0x70, 0x0, 0x0, 0xf0, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x1, 0xf8, 0x0, 0x1, 0x7c, 0x0, 0x1, 0x7c, 0x0, 0x3, 0x3e, 0x0, 0x2, 0x3e, 0x0, 0x6, 0x3e, 0x0, 0x6, 0x1f, 0x0, 0x4, 0x1f, 0x0, 0xc, 0xf, 0x0, 0xf, 0xff, 0x80, 0x18, 0xf, 0x80, 0x18, 0x7, 0xc0, 0x10, 0x7, 0xc0, 0x30, 0x3, 0xe0, 0x30, 0x3, 0xe0, 0x70, 0x7, 0xf0, 0xfc, 0x1f, 0xf8}
+
+/* Aacute (193) */
+#define NXFONT_METRICS_193 {3, 21, 30, 1, 7, 0}
+#define NXFONT_BITMAP_193 {0x0, 0x3, 0x0, 0x0, 0x7, 0x0, 0x0, 0xe, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x30, 0x0, 0x0, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x60, 0x0, 0x0, 0x70, 0x0, 0x0, 0xf0, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x1, 0xf8, 0x0, 0x1, 0x7c, 0x0, 0x1, 0x7c, 0x0, 0x3, 0x3e, 0x0, 0x2, 0x3e, 0x0, 0x6, 0x3e, 0x0, 0x6, 0x1f, 0x0, 0x4, 0x1f, 0x0, 0xc, 0xf, 0x0, 0xf, 0xff, 0x80, 0x18, 0xf, 0x80, 0x18, 0x7, 0xc0, 0x10, 0x7, 0xc0, 0x30, 0x3, 0xe0, 0x30, 0x3, 0xe0, 0x70, 0x7, 0xf0, 0xfc, 0x1f, 0xf8}
+
+/* Acircumflex (194) */
+#define NXFONT_METRICS_194 {3, 21, 30, 1, 7, 0}
+#define NXFONT_BITMAP_194 {0x0, 0x60, 0x0, 0x0, 0xf0, 0x0, 0x1, 0xf8, 0x0, 0x1, 0x98, 0x0, 0x3, 0xc, 0x0, 0x2, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x60, 0x0, 0x0, 0x70, 0x0, 0x0, 0xf0, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x1, 0xf8, 0x0, 0x1, 0x7c, 0x0, 0x1, 0x7c, 0x0, 0x3, 0x3e, 0x0, 0x2, 0x3e, 0x0, 0x6, 0x3e, 0x0, 0x6, 0x1f, 0x0, 0x4, 0x1f, 0x0, 0xc, 0xf, 0x0, 0xf, 0xff, 0x80, 0x18, 0xf, 0x80, 0x18, 0x7, 0xc0, 0x10, 0x7, 0xc0, 0x30, 0x3, 0xe0, 0x30, 0x3, 0xe0, 0x70, 0x7, 0xf0, 0xfc, 0x1f, 0xf8}
+
+/* Atilde (195) */
+#define NXFONT_METRICS_195 {3, 21, 29, 1, 8, 0}
+#define NXFONT_BITMAP_195 {0x0, 0xc2, 0x0, 0x1, 0xf6, 0x0, 0x3, 0x7c, 0x0, 0x2, 0x18, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x60, 0x0, 0x0, 0x70, 0x0, 0x0, 0xf0, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x1, 0xf8, 0x0, 0x1, 0x7c, 0x0, 0x1, 0x7c, 0x0, 0x3, 0x3e, 0x0, 0x2, 0x3e, 0x0, 0x6, 0x3e, 0x0, 0x6, 0x1f, 0x0, 0x4, 0x1f, 0x0, 0xc, 0xf, 0x0, 0xf, 0xff, 0x80, 0x18, 0xf, 0x80, 0x18, 0x7, 0xc0, 0x10, 0x7, 0xc0, 0x30, 0x3, 0xe0, 0x30, 0x3, 0xe0, 0x70, 0x7, 0xf0, 0xfc, 0x1f, 0xf8}
+
+/* Adieresis (196) */
+#define NXFONT_METRICS_196 {3, 21, 29, 1, 8, 0}
+#define NXFONT_BITMAP_196 {0x1, 0x8, 0x0, 0x3, 0x9c, 0x0, 0x3, 0x9c, 0x0, 0x1, 0x8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x60, 0x0, 0x0, 0x70, 0x0, 0x0, 0xf0, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x1, 0xf8, 0x0, 0x1, 0x7c, 0x0, 0x1, 0x7c, 0x0, 0x3, 0x3e, 0x0, 0x2, 0x3e, 0x0, 0x6, 0x3e, 0x0, 0x6, 0x1f, 0x0, 0x4, 0x1f, 0x0, 0xc, 0xf, 0x0, 0xf, 0xff, 0x80, 0x18, 0xf, 0x80, 0x18, 0x7, 0xc0, 0x10, 0x7, 0xc0, 0x30, 0x3, 0xe0, 0x30, 0x3, 0xe0, 0x70, 0x7, 0xf0, 0xfc, 0x1f, 0xf8}
+
+/* Aring (197) */
+#define NXFONT_METRICS_197 {3, 21, 30, 1, 7, 0}
+#define NXFONT_BITMAP_197 {0x0, 0xe0, 0x0, 0x1, 0xb0, 0x0, 0x3, 0x18, 0x0, 0x2, 0x8, 0x0, 0x3, 0x18, 0x0, 0x1, 0xb0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x60, 0x0, 0x0, 0x70, 0x0, 0x0, 0xf0, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x1, 0xf8, 0x0, 0x1, 0x7c, 0x0, 0x1, 0x7c, 0x0, 0x3, 0x3e, 0x0, 0x2, 0x3e, 0x0, 0x6, 0x3e, 0x0, 0x6, 0x1f, 0x0, 0x4, 0x1f, 0x0, 0xc, 0xf, 0x0, 0xf, 0xff, 0x80, 0x18, 0xf, 0x80, 0x18, 0x7, 0xc0, 0x10, 0x7, 0xc0, 0x30, 0x3, 0xe0, 0x30, 0x3, 0xe0, 0x70, 0x7, 0xf0, 0xfc, 0x1f, 0xf8}
+
+/* AE (198) */
+#define NXFONT_METRICS_198 {4, 32, 23, 0, 14, 0}
+#define NXFONT_BITMAP_198 {0x3, 0xff, 0xff, 0xfc, 0x0, 0xff, 0xff, 0xfc, 0x0, 0x63, 0xe0, 0x1c, 0x0, 0x63, 0xe0, 0xc, 0x0, 0xc3, 0xe0, 0xc, 0x0, 0xc3, 0xe0, 0x4, 0x1, 0x83, 0xe0, 0x4, 0x1, 0x83, 0xe0, 0x80, 0x3, 0x3, 0xe0, 0x80, 0x3, 0x3, 0xe1, 0x80, 0x2, 0x3, 0xe3, 0x80, 0x7, 0xff, 0xff, 0x80, 0x7, 0xff, 0xe3, 0x80, 0xc, 0x3, 0xe1, 0x80, 0xc, 0x3, 0xe0, 0x80, 0x18, 0x3, 0xe0, 0x80, 0x18, 0x3, 0xe0, 0x1, 0x38, 0x3, 0xe0, 0x3, 0x30, 0x3, 0xe0, 0x6, 0x70, 0x3, 0xe0, 0xe, 0x70, 0x3, 0xe0, 0x3e, 0xf8, 0x7, 0xff, 0xfc, 0xfe, 0x1f, 0xff, 0xfc}
+
+/* Ccedilla (199) */
+#define NXFONT_METRICS_199 {3, 19, 30, 2, 14, 0}
+#define NXFONT_BITMAP_199 {0x1, 0xfc, 0x20, 0x7, 0xff, 0x60, 0xf, 0x7, 0xe0, 0x1e, 0x1, 0xe0, 0x3c, 0x0, 0xe0, 0x7c, 0x0, 0x60, 0x7c, 0x0, 0x60, 0xf8, 0x0, 0x20, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0x7c, 0x0, 0x0, 0x7c, 0x0, 0x0, 0x3c, 0x0, 0x20, 0x1e, 0x0, 0x60, 0xf, 0x81, 0xc0, 0x3, 0xff, 0x80, 0x0, 0xfe, 0x0, 0x0, 0x18, 0x0, 0x0, 0x30, 0x0, 0x0, 0x70, 0x0, 0x0, 0x38, 0x0, 0x3, 0x18, 0x0, 0x3, 0xb8, 0x0, 0x1, 0xf0, 0x0}
+
+/* Egrave (200) */
+#define NXFONT_METRICS_200 {3, 21, 30, 0, 7, 0}
+#define NXFONT_BITMAP_200 {0x6, 0x0, 0x0, 0x7, 0x0, 0x0, 0x3, 0x80, 0x0, 0x1, 0xc0, 0x0, 0x0, 0x60, 0x0, 0x0, 0x30, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xe0, 0x3f, 0xff, 0xe0, 0x1f, 0x0, 0xe0, 0x1f, 0x0, 0x60, 0x1f, 0x0, 0x60, 0x1f, 0x0, 0x20, 0x1f, 0x0, 0x20, 0x1f, 0x4, 0x0, 0x1f, 0x4, 0x0, 0x1f, 0xc, 0x0, 0x1f, 0x1c, 0x0, 0x1f, 0xfc, 0x0, 0x1f, 0x1c, 0x0, 0x1f, 0xc, 0x0, 0x1f, 0x4, 0x0, 0x1f, 0x4, 0x0, 0x1f, 0x0, 0x8, 0x1f, 0x0, 0x18, 0x1f, 0x0, 0x30, 0x1f, 0x0, 0x70, 0x1f, 0x1, 0xf0, 0x3f, 0xff, 0xe0, 0xff, 0xff, 0xe0}
+
+/* Eacute (201) */
+#define NXFONT_METRICS_201 {3, 21, 30, 0, 7, 0}
+#define NXFONT_BITMAP_201 {0x0, 0x1, 0x80, 0x0, 0x3, 0x80, 0x0, 0x7, 0x0, 0x0, 0xe, 0x0, 0x0, 0x18, 0x0, 0x0, 0x30, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xe0, 0x3f, 0xff, 0xe0, 0x1f, 0x0, 0xe0, 0x1f, 0x0, 0x60, 0x1f, 0x0, 0x60, 0x1f, 0x0, 0x20, 0x1f, 0x0, 0x20, 0x1f, 0x4, 0x0, 0x1f, 0x4, 0x0, 0x1f, 0xc, 0x0, 0x1f, 0x1c, 0x0, 0x1f, 0xfc, 0x0, 0x1f, 0x1c, 0x0, 0x1f, 0xc, 0x0, 0x1f, 0x4, 0x0, 0x1f, 0x4, 0x0, 0x1f, 0x0, 0x8, 0x1f, 0x0, 0x18, 0x1f, 0x0, 0x30, 0x1f, 0x0, 0x70, 0x1f, 0x1, 0xf0, 0x3f, 0xff, 0xe0, 0xff, 0xff, 0xe0}
+
+/* Ecircumflex (202) */
+#define NXFONT_METRICS_202 {3, 21, 30, 0, 7, 0}
+#define NXFONT_BITMAP_202 {0x0, 0x30, 0x0, 0x0, 0x78, 0x0, 0x0, 0xfc, 0x0, 0x0, 0xcc, 0x0, 0x1, 0x86, 0x0, 0x1, 0x2, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xe0, 0x3f, 0xff, 0xe0, 0x1f, 0x0, 0xe0, 0x1f, 0x0, 0x60, 0x1f, 0x0, 0x60, 0x1f, 0x0, 0x20, 0x1f, 0x0, 0x20, 0x1f, 0x4, 0x0, 0x1f, 0x4, 0x0, 0x1f, 0xc, 0x0, 0x1f, 0x1c, 0x0, 0x1f, 0xfc, 0x0, 0x1f, 0x1c, 0x0, 0x1f, 0xc, 0x0, 0x1f, 0x4, 0x0, 0x1f, 0x4, 0x0, 0x1f, 0x0, 0x8, 0x1f, 0x0, 0x18, 0x1f, 0x0, 0x30, 0x1f, 0x0, 0x70, 0x1f, 0x1, 0xf0, 0x3f, 0xff, 0xe0, 0xff, 0xff, 0xe0}
+
+/* Edieresis (203) */
+#define NXFONT_METRICS_203 {3, 21, 29, 0, 8, 0}
+#define NXFONT_BITMAP_203 {0x0, 0x84, 0x0, 0x1, 0xce, 0x0, 0x1, 0xce, 0x0, 0x0, 0x84, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xe0, 0x3f, 0xff, 0xe0, 0x1f, 0x0, 0xe0, 0x1f, 0x0, 0x60, 0x1f, 0x0, 0x60, 0x1f, 0x0, 0x20, 0x1f, 0x0, 0x20, 0x1f, 0x4, 0x0, 0x1f, 0x4, 0x0, 0x1f, 0xc, 0x0, 0x1f, 0x1c, 0x0, 0x1f, 0xfc, 0x0, 0x1f, 0x1c, 0x0, 0x1f, 0xc, 0x0, 0x1f, 0x4, 0x0, 0x1f, 0x4, 0x0, 0x1f, 0x0, 0x8, 0x1f, 0x0, 0x18, 0x1f, 0x0, 0x30, 0x1f, 0x0, 0x70, 0x1f, 0x1, 0xf0, 0x3f, 0xff, 0xe0, 0xff, 0xff, 0xe0}
+
+/* Igrave (204) */
+#define NXFONT_METRICS_204 {2, 11, 30, 1, 7, 0}
+#define NXFONT_BITMAP_204 {0xc0, 0x0, 0xe0, 0x0, 0x70, 0x0, 0x38, 0x0, 0xc, 0x0, 0x6, 0x0, 0x0, 0x0, 0xff, 0xe0, 0x3f, 0x80, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x3f, 0x80, 0xff, 0xe0}
+
+/* Iacute (205) */
+#define NXFONT_METRICS_205 {2, 12, 30, 1, 7, 0}
+#define NXFONT_BITMAP_205 {0x0, 0x30, 0x0, 0x70, 0x0, 0xe0, 0x1, 0xc0, 0x3, 0x0, 0x6, 0x0, 0x0, 0x0, 0xff, 0xe0, 0x3f, 0x80, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x3f, 0x80, 0xff, 0xe0}
+
+/* Icircumflex (206) */
+#define NXFONT_METRICS_206 {2, 11, 30, 1, 7, 0}
+#define NXFONT_BITMAP_206 {0x6, 0x0, 0xf, 0x0, 0x1f, 0x80, 0x19, 0x80, 0x30, 0xc0, 0x20, 0x40, 0x0, 0x0, 0xff, 0xe0, 0x3f, 0x80, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x3f, 0x80, 0xff, 0xe0}
+
+/* Idieresis (207) */
+#define NXFONT_METRICS_207 {2, 11, 29, 1, 8, 0}
+#define NXFONT_BITMAP_207 {0x10, 0x80, 0x39, 0xc0, 0x39, 0xc0, 0x10, 0x80, 0x0, 0x0, 0x0, 0x0, 0xff, 0xe0, 0x3f, 0x80, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x1f, 0x0, 0x3f, 0x80, 0xff, 0xe0}
+
+/* Eth (208) */
+#define NXFONT_METRICS_208 {3, 22, 23, 0, 14, 0}
+#define NXFONT_BITMAP_208 {0xff, 0xfe, 0x0, 0x3f, 0xf, 0x80, 0x1f, 0x3, 0xe0, 0x1f, 0x1, 0xf0, 0x1f, 0x1, 0xf0, 0x1f, 0x0, 0xf8, 0x1f, 0x0, 0xf8, 0x1f, 0x0, 0xfc, 0x1f, 0x0, 0xfc, 0x1f, 0x0, 0xfc, 0xff, 0xf0, 0x7c, 0xff, 0xf0, 0x7c, 0xff, 0xf0, 0x7c, 0x1f, 0x0, 0x7c, 0x1f, 0x0, 0xfc, 0x1f, 0x0, 0xf8, 0x1f, 0x0, 0xf8, 0x1f, 0x0, 0xf8, 0x1f, 0x1, 0xf0, 0x1f, 0x1, 0xe0, 0x1f, 0x3, 0xc0, 0x3f, 0xf, 0x80, 0x7f, 0xfe, 0x0}
+
+/* Ntilde (209) */
+#define NXFONT_METRICS_209 {3, 22, 29, 1, 8, 0}
+#define NXFONT_BITMAP_209 {0x0, 0x61, 0x0, 0x0, 0xfb, 0x0, 0x1, 0xbe, 0x0, 0x1, 0xc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe, 0x1, 0xfc, 0x7f, 0x0, 0x70, 0x3f, 0x80, 0x20, 0x1f, 0x80, 0x20, 0x1f, 0xc0, 0x20, 0x1f, 0xe0, 0x20, 0x17, 0xf0, 0x20, 0x13, 0xf8, 0x20, 0x11, 0xf8, 0x20, 0x11, 0xfc, 0x20, 0x10, 0xfe, 0x20, 0x10, 0x7f, 0x20, 0x10, 0x3f, 0x20, 0x10, 0x1f, 0xa0, 0x10, 0x1f, 0xe0, 0x10, 0xf, 0xe0, 0x10, 0x7, 0xe0, 0x10, 0x3, 0xe0, 0x10, 0x3, 0xe0, 0x10, 0x1, 0xe0, 0x10, 0x0, 0xe0, 0x38, 0x0, 0x60, 0xfe, 0x0, 0x20}
+
+/* Ograve (210) */
+#define NXFONT_METRICS_210 {3, 21, 30, 2, 7, 0}
+#define NXFONT_BITMAP_210 {0x6, 0x0, 0x0, 0x7, 0x0, 0x0, 0x3, 0x80, 0x0, 0x1, 0xc0, 0x0, 0x0, 0x60, 0x0, 0x0, 0x30, 0x0, 0x0, 0x0, 0x0, 0x1, 0xfc, 0x0, 0x7, 0xff, 0x0, 0xf, 0x8f, 0x80, 0x1e, 0x3, 0xc0, 0x3c, 0x1, 0xe0, 0x7c, 0x1, 0xf0, 0x78, 0x0, 0xf0, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0x78, 0x0, 0xf0, 0x7c, 0x1, 0xf0, 0x3c, 0x1, 0xe0, 0x1e, 0x3, 0xc0, 0xf, 0x8f, 0x80, 0x7, 0xff, 0x0, 0x1, 0xfc, 0x0}
+
+/* Oacute (211) */
+#define NXFONT_METRICS_211 {3, 21, 30, 2, 7, 0}
+#define NXFONT_BITMAP_211 {0x0, 0x3, 0x80, 0x0, 0x7, 0x0, 0x0, 0xe, 0x0, 0x0, 0x18, 0x0, 0x0, 0x30, 0x0, 0x0, 0x60, 0x0, 0x0, 0x0, 0x0, 0x1, 0xfc, 0x0, 0x7, 0xff, 0x0, 0xf, 0x8f, 0x80, 0x1e, 0x3, 0xc0, 0x3c, 0x1, 0xe0, 0x7c, 0x1, 0xf0, 0x78, 0x0, 0xf0, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0x78, 0x0, 0xf0, 0x7c, 0x1, 0xf0, 0x3c, 0x1, 0xe0, 0x1e, 0x3, 0xc0, 0xf, 0x8f, 0x80, 0x7, 0xff, 0x0, 0x1, 0xfc, 0x0}
+
+/* Ocircumflex (212) */
+#define NXFONT_METRICS_212 {3, 21, 30, 2, 7, 0}
+#define NXFONT_BITMAP_212 {0x0, 0x30, 0x0, 0x0, 0x78, 0x0, 0x0, 0xfc, 0x0, 0x0, 0xcc, 0x0, 0x1, 0x86, 0x0, 0x1, 0x2, 0x0, 0x0, 0x0, 0x0, 0x1, 0xfc, 0x0, 0x7, 0xff, 0x0, 0xf, 0x8f, 0x80, 0x1e, 0x3, 0xc0, 0x3c, 0x1, 0xe0, 0x7c, 0x1, 0xf0, 0x78, 0x0, 0xf0, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0x78, 0x0, 0xf0, 0x7c, 0x1, 0xf0, 0x3c, 0x1, 0xe0, 0x1e, 0x3, 0xc0, 0xf, 0x8f, 0x80, 0x7, 0xff, 0x0, 0x1, 0xfc, 0x0}
+
+/* Otilde (213) */
+#define NXFONT_METRICS_213 {3, 21, 29, 2, 8, 0}
+#define NXFONT_BITMAP_213 {0x0, 0xc2, 0x0, 0x1, 0xf6, 0x0, 0x3, 0x7c, 0x0, 0x2, 0x18, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xfc, 0x0, 0x7, 0xff, 0x0, 0xf, 0x8f, 0x80, 0x1e, 0x3, 0xc0, 0x3c, 0x1, 0xe0, 0x7c, 0x1, 0xf0, 0x78, 0x0, 0xf0, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0x78, 0x0, 0xf0, 0x7c, 0x1, 0xf0, 0x3c, 0x1, 0xe0, 0x1e, 0x3, 0xc0, 0xf, 0x8f, 0x80, 0x7, 0xff, 0x0, 0x1, 0xfc, 0x0}
+
+/* Odieresis (214) */
+#define NXFONT_METRICS_214 {3, 21, 29, 2, 8, 0}
+#define NXFONT_BITMAP_214 {0x0, 0x84, 0x0, 0x1, 0xce, 0x0, 0x1, 0xce, 0x0, 0x0, 0x84, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xfc, 0x0, 0x7, 0xff, 0x0, 0xf, 0x8f, 0x80, 0x1e, 0x3, 0xc0, 0x3c, 0x1, 0xe0, 0x7c, 0x1, 0xf0, 0x78, 0x0, 0xf0, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0xf8, 0x0, 0xf8, 0x78, 0x0, 0xf0, 0x7c, 0x1, 0xf0, 0x3c, 0x1, 0xe0, 0x1e, 0x3, 0xc0, 0xf, 0x8f, 0x80, 0x7, 0xff, 0x0, 0x1, 0xfc, 0x0}
+
+/* multiply (215) */
+#define NXFONT_METRICS_215 {2, 15, 16, 2, 21, 0}
+#define NXFONT_BITMAP_215 {0x40, 0x4, 0xe0, 0xe, 0xf0, 0x1e, 0x78, 0x3c, 0x3c, 0x78, 0x1e, 0xf0, 0xf, 0xe0, 0x7, 0xc0, 0x7, 0xc0, 0xf, 0xe0, 0x1e, 0xf0, 0x3c, 0x78, 0x78, 0x3c, 0xf0, 0x1e, 0xe0, 0xe, 0x40, 0x4}
+
+/* Oslash (216) */
+#define NXFONT_METRICS_216 {3, 21, 27, 2, 12, 0}
+#define NXFONT_BITMAP_216 {0x0, 0x0, 0x30, 0x0, 0x0, 0x60, 0x1, 0xfc, 0x40, 0x7, 0x8f, 0xc0, 0xe, 0x3, 0x80, 0x1e, 0x1, 0xc0, 0x3c, 0x3, 0xe0, 0x7c, 0x6, 0xf0, 0x78, 0x4, 0xf0, 0xf8, 0xc, 0xf8, 0xf8, 0x18, 0xf8, 0xf8, 0x18, 0xf8, 0xf8, 0x30, 0xf8, 0xf8, 0x20, 0xf8, 0xf8, 0x60, 0xf8, 0xf8, 0xc0, 0xf8, 0xf8, 0x80, 0xf8, 0xf9, 0x80, 0xf8, 0x7b, 0x0, 0xf0, 0x7e, 0x1, 0xf0, 0x3e, 0x1, 0xe0, 0x1c, 0x3, 0xc0, 0xe, 0x7, 0x80, 0x1f, 0xfe, 0x0, 0x11, 0xf8, 0x0, 0x30, 0x0, 0x0, 0x60, 0x0, 0x0}
+
+/* Ugrave (217) */
+#define NXFONT_METRICS_217 {3, 23, 30, 0, 7, 0}
+#define NXFONT_BITMAP_217 {0x0, 0xc0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0x70, 0x0, 0x0, 0x38, 0x0, 0x0, 0xc, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0xff, 0xe0, 0xfe, 0x3f, 0x80, 0x38, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x30, 0xf, 0x80, 0x30, 0xf, 0x80, 0x60, 0x7, 0xc0, 0xc0, 0x3, 0xff, 0x80, 0x0, 0xfe, 0x0}
+
+/* Uacute (218) */
+#define NXFONT_METRICS_218 {3, 23, 30, 0, 7, 0}
+#define NXFONT_BITMAP_218 {0x0, 0x0, 0xc0, 0x0, 0x1, 0xc0, 0x0, 0x3, 0x80, 0x0, 0x7, 0x0, 0x0, 0xc, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x0, 0xff, 0xe0, 0xfe, 0x3f, 0x80, 0x38, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x30, 0xf, 0x80, 0x30, 0xf, 0x80, 0x60, 0x7, 0xc0, 0xc0, 0x3, 0xff, 0x80, 0x0, 0xfe, 0x0}
+
+/* Ucircumflex (219) */
+#define NXFONT_METRICS_219 {3, 23, 30, 0, 7, 0}
+#define NXFONT_BITMAP_219 {0x0, 0xc, 0x0, 0x0, 0x1e, 0x0, 0x0, 0x3f, 0x0, 0x0, 0x33, 0x0, 0x0, 0x61, 0x80, 0x0, 0x40, 0x80, 0x0, 0x0, 0x0, 0xff, 0xe0, 0xfe, 0x3f, 0x80, 0x38, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x30, 0xf, 0x80, 0x30, 0xf, 0x80, 0x60, 0x7, 0xc0, 0xc0, 0x3, 0xff, 0x80, 0x0, 0xfe, 0x0}
+
+/* Udieresis (220) */
+#define NXFONT_METRICS_220 {3, 23, 29, 0, 8, 0}
+#define NXFONT_BITMAP_220 {0x0, 0x21, 0x0, 0x0, 0x73, 0x80, 0x0, 0x73, 0x80, 0x0, 0x21, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xe0, 0xfe, 0x3f, 0x80, 0x38, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x10, 0x1f, 0x0, 0x30, 0xf, 0x80, 0x30, 0xf, 0x80, 0x60, 0x7, 0xc0, 0xc0, 0x3, 0xff, 0x80, 0x0, 0xfe, 0x0}
+
+/* Yacute (221) */
+#define NXFONT_METRICS_221 {3, 22, 30, 1, 7, 0}
+#define NXFONT_BITMAP_221 {0x0, 0x0, 0xc0, 0x0, 0x1, 0xc0, 0x0, 0x3, 0x80, 0x0, 0x7, 0x0, 0x0, 0xc, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x0, 0xff, 0xc3, 0xfc, 0x7f, 0x0, 0xf0, 0x3f, 0x0, 0x60, 0x3f, 0x0, 0x60, 0x1f, 0x80, 0xc0, 0x1f, 0x80, 0x80, 0xf, 0xc1, 0x80, 0xf, 0xc3, 0x0, 0x7, 0xe3, 0x0, 0x3, 0xe6, 0x0, 0x3, 0xf4, 0x0, 0x1, 0xfc, 0x0, 0x1, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x1, 0xfc, 0x0, 0x7, 0xff, 0x0}
+
+/* Thorn (222) */
+#define NXFONT_METRICS_222 {3, 19, 23, 0, 14, 0}
+#define NXFONT_BITMAP_222 {0xff, 0xe0, 0x0, 0x3f, 0x80, 0x0, 0x1f, 0x0, 0x0, 0x1f, 0x0, 0x0, 0x1f, 0xfe, 0x0, 0x1f, 0xf, 0x80, 0x1f, 0x7, 0xc0, 0x1f, 0x7, 0xe0, 0x1f, 0x3, 0xe0, 0x1f, 0x3, 0xe0, 0x1f, 0x3, 0xe0, 0x1f, 0x3, 0xe0, 0x1f, 0x7, 0xe0, 0x1f, 0x7, 0xc0, 0x1f, 0x1f, 0x80, 0x1f, 0xfe, 0x0, 0x1f, 0x0, 0x0, 0x1f, 0x0, 0x0, 0x1f, 0x0, 0x0, 0x1f, 0x0, 0x0, 0x1f, 0x0, 0x0, 0x3f, 0x80, 0x0, 0xff, 0xe0, 0x0}
+
+/* germandbls (223) */
+#define NXFONT_METRICS_223 {3, 17, 23, 0, 14, 0}
+#define NXFONT_BITMAP_223 {0x3, 0xf0, 0x0, 0xe, 0x3c, 0x0, 0x1e, 0x3e, 0x0, 0x1c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1c, 0x0, 0x3c, 0x38, 0x0, 0x3c, 0xe0, 0x0, 0x3c, 0x3c, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0xf, 0x0, 0x3c, 0xf, 0x0, 0x3c, 0xf, 0x80, 0x3c, 0xf, 0x80, 0x3c, 0xf, 0x80, 0x3c, 0xf, 0x80, 0x3c, 0xf, 0x0, 0x3c, 0xf, 0x0, 0x3c, 0x1e, 0x0, 0xfc, 0x7c, 0x0}
+
+/* agrave (224) */
+#define NXFONT_METRICS_224 {2, 14, 23, 1, 14, 0}
+#define NXFONT_BITMAP_224 {0x30, 0x0, 0x38, 0x0, 0x1c, 0x0, 0xe, 0x0, 0x3, 0x0, 0x0, 0x80, 0x0, 0x0, 0x1f, 0x80, 0x31, 0xe0, 0x70, 0xf0, 0x78, 0xf0, 0x78, 0xf0, 0x30, 0xf0, 0x1, 0xf0, 0x7, 0xf0, 0x1c, 0xf0, 0x38, 0xf0, 0x78, 0xf0, 0xf0, 0xf0, 0xf9, 0xf0, 0xff, 0xf4, 0x7e, 0xfc, 0x3c, 0x78}
+
+/* aacute (225) */
+#define NXFONT_METRICS_225 {2, 14, 23, 1, 14, 0}
+#define NXFONT_BITMAP_225 {0x0, 0x30, 0x0, 0x70, 0x0, 0xe0, 0x1, 0xc0, 0x3, 0x0, 0x4, 0x0, 0x0, 0x0, 0x1f, 0x80, 0x31, 0xe0, 0x70, 0xf0, 0x78, 0xf0, 0x78, 0xf0, 0x30, 0xf0, 0x1, 0xf0, 0x7, 0xf0, 0x1c, 0xf0, 0x38, 0xf0, 0x78, 0xf0, 0xf0, 0xf0, 0xf9, 0xf0, 0xff, 0xf4, 0x7e, 0xfc, 0x3c, 0x78}
+
+/* acircumflex (226) */
+#define NXFONT_METRICS_226 {2, 14, 23, 1, 14, 0}
+#define NXFONT_BITMAP_226 {0x3, 0x0, 0x7, 0x80, 0xf, 0xc0, 0xc, 0xc0, 0x18, 0x60, 0x10, 0x20, 0x0, 0x0, 0x1f, 0x80, 0x31, 0xe0, 0x70, 0xf0, 0x78, 0xf0, 0x78, 0xf0, 0x30, 0xf0, 0x1, 0xf0, 0x7, 0xf0, 0x1c, 0xf0, 0x38, 0xf0, 0x78, 0xf0, 0xf0, 0xf0, 0xf9, 0xf0, 0xff, 0xf4, 0x7e, 0xfc, 0x3c, 0x78}
+
+/* atilde (227) */
+#define NXFONT_METRICS_227 {2, 14, 22, 1, 15, 0}
+#define NXFONT_BITMAP_227 {0xc, 0x20, 0x1f, 0x60, 0x37, 0xc0, 0x21, 0x80, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x80, 0x31, 0xe0, 0x70, 0xf0, 0x78, 0xf0, 0x78, 0xf0, 0x30, 0xf0, 0x1, 0xf0, 0x7, 0xf0, 0x1c, 0xf0, 0x38, 0xf0, 0x78, 0xf0, 0xf0, 0xf0, 0xf9, 0xf0, 0xff, 0xf4, 0x7e, 0xfc, 0x3c, 0x78}
+
+/* adieresis (228) */
+#define NXFONT_METRICS_228 {2, 14, 22, 1, 15, 0}
+#define NXFONT_BITMAP_228 {0x8, 0x40, 0x1c, 0xe0, 0x1c, 0xe0, 0x8, 0x40, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x80, 0x31, 0xe0, 0x70, 0xf0, 0x78, 0xf0, 0x78, 0xf0, 0x30, 0xf0, 0x1, 0xf0, 0x7, 0xf0, 0x1c, 0xf0, 0x38, 0xf0, 0x78, 0xf0, 0xf0, 0xf0, 0xf9, 0xf0, 0xff, 0xf4, 0x7e, 0xfc, 0x3c, 0x78}
+
+/* aring (229) */
+#define NXFONT_METRICS_229 {2, 14, 25, 1, 12, 0}
+#define NXFONT_BITMAP_229 {0x7, 0x0, 0xd, 0x80, 0x18, 0xc0, 0x10, 0x40, 0x18, 0xc0, 0xd, 0x80, 0x7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x80, 0x31, 0xe0, 0x70, 0xf0, 0x78, 0xf0, 0x78, 0xf0, 0x30, 0xf0, 0x1, 0xf0, 0x7, 0xf0, 0x1c, 0xf0, 0x38, 0xf0, 0x78, 0xf0, 0xf0, 0xf0, 0xf9, 0xf0, 0xff, 0xf4, 0x7e, 0xfc, 0x3c, 0x78}
+
+/* ae (230) */
+#define NXFONT_METRICS_230 {3, 21, 16, 1, 21, 0}
+#define NXFONT_BITMAP_230 {0x1f, 0x87, 0xc0, 0x31, 0xee, 0xe0, 0x70, 0xfc, 0x70, 0x78, 0xf8, 0x70, 0x78, 0xf8, 0x38, 0x30, 0xf8, 0x38, 0x1, 0xf8, 0x38, 0x7, 0xff, 0xf8, 0x1c, 0xf8, 0x0, 0x38, 0xf8, 0x0, 0x78, 0xfc, 0x0, 0xf8, 0xfc, 0x8, 0xf8, 0xfe, 0x18, 0xff, 0xff, 0xf0, 0x7e, 0x3f, 0xe0, 0x3c, 0xf, 0xc0}
+
+/* ccedilla (231) */
+#define NXFONT_METRICS_231 {2, 13, 23, 1, 21, 0}
+#define NXFONT_BITMAP_231 {0x7, 0xe0, 0x1e, 0xf0, 0x3c, 0x78, 0x78, 0x78, 0x78, 0x30, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf8, 0x0, 0x78, 0x0, 0x78, 0x0, 0x3c, 0x30, 0x1f, 0xe0, 0xf, 0xc0, 0x3, 0x0, 0x6, 0x0, 0x6, 0x0, 0x3, 0x80, 0x31, 0x80, 0x3b, 0x80, 0x1f, 0x0}
+
+/* egrave (232) */
+#define NXFONT_METRICS_232 {2, 14, 23, 0, 14, 0}
+#define NXFONT_BITMAP_232 {0x30, 0x0, 0x38, 0x0, 0x1c, 0x0, 0xe, 0x0, 0x3, 0x0, 0x0, 0x80, 0x0, 0x0, 0x7, 0xc0, 0x1e, 0xf0, 0x3c, 0x70, 0x78, 0x38, 0x78, 0x3c, 0xf8, 0x3c, 0xf8, 0x3c, 0xff, 0xfc, 0xf8, 0x0, 0xf8, 0x0, 0xf8, 0x0, 0x78, 0x0, 0x7c, 0x0, 0x3e, 0x18, 0x1f, 0xf0, 0x7, 0xe0}
+
+/* eacute (233) */
+#define NXFONT_METRICS_233 {2, 14, 23, 0, 14, 0}
+#define NXFONT_BITMAP_233 {0x0, 0x18, 0x0, 0x38, 0x0, 0x70, 0x0, 0xe0, 0x1, 0x80, 0x2, 0x0, 0x0, 0x0, 0x7, 0xc0, 0x1e, 0xf0, 0x3c, 0x70, 0x78, 0x38, 0x78, 0x3c, 0xf8, 0x3c, 0xf8, 0x3c, 0xff, 0xfc, 0xf8, 0x0, 0xf8, 0x0, 0xf8, 0x0, 0x78, 0x0, 0x7c, 0x0, 0x3e, 0x18, 0x1f, 0xf0, 0x7, 0xe0}
+
+/* ecircumflex (234) */
+#define NXFONT_METRICS_234 {2, 14, 23, 0, 14, 0}
+#define NXFONT_BITMAP_234 {0x3, 0x0, 0x7, 0x80, 0xf, 0xc0, 0xc, 0xc0, 0x18, 0x60, 0x10, 0x20, 0x0, 0x0, 0x7, 0xc0, 0x1e, 0xf0, 0x3c, 0x70, 0x78, 0x38, 0x78, 0x3c, 0xf8, 0x3c, 0xf8, 0x3c, 0xff, 0xfc, 0xf8, 0x0, 0xf8, 0x0, 0xf8, 0x0, 0x78, 0x0, 0x7c, 0x0, 0x3e, 0x18, 0x1f, 0xf0, 0x7, 0xe0}
+
+/* edieresis (235) */
+#define NXFONT_METRICS_235 {2, 14, 22, 0, 15, 0}
+#define NXFONT_BITMAP_235 {0x4, 0x20, 0xe, 0x70, 0xe, 0x70, 0x4, 0x20, 0x0, 0x0, 0x0, 0x0, 0x7, 0xc0, 0x1e, 0xf0, 0x3c, 0x70, 0x78, 0x38, 0x78, 0x3c, 0xf8, 0x3c, 0xf8, 0x3c, 0xff, 0xfc, 0xf8, 0x0, 0xf8, 0x0, 0xf8, 0x0, 0x78, 0x0, 0x7c, 0x0, 0x3e, 0x18, 0x1f, 0xf0, 0x7, 0xe0}
+
+/* igrave (236) */
+#define NXFONT_METRICS_236 {1, 8, 23, 0, 14, 0}
+#define NXFONT_BITMAP_236 {0xc0, 0xe0, 0x70, 0x38, 0xc, 0x2, 0x0, 0xfc, 0x7c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x7e, 0xff}
+
+/* iacute (237) */
+#define NXFONT_METRICS_237 {1, 8, 23, 0, 14, 0}
+#define NXFONT_BITMAP_237 {0x3, 0x7, 0xe, 0x1c, 0x30, 0x40, 0x0, 0xfc, 0x7c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x7e, 0xff}
+
+/* icircumflex (238) */
+#define NXFONT_METRICS_238 {1, 8, 23, 0, 14, 0}
+#define NXFONT_BITMAP_238 {0x18, 0x3c, 0x7e, 0x66, 0xc3, 0x81, 0x0, 0xfc, 0x7c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x7e, 0xff}
+
+/* idieresis (239) */
+#define NXFONT_METRICS_239 {1, 8, 22, 0, 15, 0}
+#define NXFONT_BITMAP_239 {0x42, 0xe7, 0xe7, 0x42, 0x0, 0x0, 0xfc, 0x7c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x7e, 0xff}
+
+/* eth (240) */
+#define NXFONT_METRICS_240 {2, 14, 22, 1, 15, 0}
+#define NXFONT_BITMAP_240 {0x38, 0x30, 0x3e, 0xf8, 0xf, 0xf8, 0xff, 0x80, 0xfb, 0xc0, 0x61, 0xe0, 0xf, 0xf0, 0x3c, 0xf8, 0x78, 0x78, 0x78, 0x78, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0x78, 0x78, 0x78, 0x78, 0x3c, 0xf0, 0xf, 0xc0}
+
+/* ntilde (241) */
+#define NXFONT_METRICS_241 {3, 17, 22, 0, 15, 0}
+#define NXFONT_BITMAP_241 {0x3, 0x8, 0x0, 0x7, 0xd8, 0x0, 0xd, 0xf0, 0x0, 0x8, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfc, 0x78, 0x0, 0x7d, 0xfc, 0x0, 0x3f, 0x3e, 0x0, 0x3e, 0x1e, 0x0, 0x3e, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x7e, 0x3f, 0x0, 0xff, 0x7f, 0x80}
+
+/* ograve (242) */
+#define NXFONT_METRICS_242 {2, 14, 23, 1, 14, 0}
+#define NXFONT_BITMAP_242 {0x30, 0x0, 0x38, 0x0, 0x1c, 0x0, 0xe, 0x0, 0x3, 0x0, 0x0, 0x80, 0x0, 0x0, 0xf, 0xc0, 0x3c, 0xf0, 0x78, 0x78, 0x78, 0x78, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0x78, 0x78, 0x78, 0x78, 0x3c, 0xf0, 0xf, 0xc0}
+
+/* oacute (243) */
+#define NXFONT_METRICS_243 {2, 14, 23, 1, 14, 0}
+#define NXFONT_BITMAP_243 {0x0, 0x18, 0x0, 0x38, 0x0, 0x70, 0x0, 0xe0, 0x1, 0x80, 0x2, 0x0, 0x0, 0x0, 0xf, 0xc0, 0x3c, 0xf0, 0x78, 0x78, 0x78, 0x78, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0x78, 0x78, 0x78, 0x78, 0x3c, 0xf0, 0xf, 0xc0}
+
+/* ocircumflex (244) */
+#define NXFONT_METRICS_244 {2, 14, 23, 1, 14, 0}
+#define NXFONT_BITMAP_244 {0x3, 0x0, 0x7, 0x80, 0xf, 0xc0, 0xc, 0xc0, 0x18, 0x60, 0x10, 0x20, 0x0, 0x0, 0xf, 0xc0, 0x3c, 0xf0, 0x78, 0x78, 0x78, 0x78, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0x78, 0x78, 0x78, 0x78, 0x3c, 0xf0, 0xf, 0xc0}
+
+/* otilde (245) */
+#define NXFONT_METRICS_245 {2, 14, 22, 1, 15, 0}
+#define NXFONT_BITMAP_245 {0xc, 0x20, 0x1f, 0x60, 0x37, 0xc0, 0x21, 0x80, 0x0, 0x0, 0x0, 0x0, 0xf, 0xc0, 0x3c, 0xf0, 0x78, 0x78, 0x78, 0x78, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0x78, 0x78, 0x78, 0x78, 0x3c, 0xf0, 0xf, 0xc0}
+
+/* odieresis (246) */
+#define NXFONT_METRICS_246 {2, 14, 22, 1, 15, 0}
+#define NXFONT_BITMAP_246 {0x8, 0x40, 0x1c, 0xe0, 0x1c, 0xe0, 0x8, 0x40, 0x0, 0x0, 0x0, 0x0, 0xf, 0xc0, 0x3c, 0xf0, 0x78, 0x78, 0x78, 0x78, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0x78, 0x78, 0x78, 0x78, 0x3c, 0xf0, 0xf, 0xc0}
+
+/* divide (247) */
+#define NXFONT_METRICS_247 {2, 14, 15, 2, 21, 0}
+#define NXFONT_BITMAP_247 {0x3, 0x0, 0x7, 0x80, 0x7, 0x80, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xfc, 0xff, 0xfc, 0xff, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x3, 0x0, 0x7, 0x80, 0x7, 0x80, 0x3, 0x0}
+
+/* oslash (248) */
+#define NXFONT_METRICS_248 {2, 14, 22, 1, 18, 0}
+#define NXFONT_BITMAP_248 {0x0, 0x8, 0x0, 0x18, 0x0, 0x18, 0xf, 0xf0, 0x3c, 0xf0, 0x78, 0x78, 0x78, 0x78, 0xf0, 0xfc, 0xf1, 0xbc, 0xf1, 0x3c, 0xf3, 0x3c, 0xf2, 0x3c, 0xf6, 0x3c, 0xfc, 0x3c, 0xf8, 0x3c, 0x78, 0x78, 0x78, 0x78, 0x3c, 0xf0, 0x6f, 0xc0, 0x60, 0x0, 0xc0, 0x0, 0x80, 0x0}
+
+/* ugrave (249) */
+#define NXFONT_METRICS_249 {3, 17, 23, 0, 14, 0}
+#define NXFONT_BITMAP_249 {0x18, 0x0, 0x0, 0x1c, 0x0, 0x0, 0xe, 0x0, 0x0, 0x7, 0x0, 0x0, 0x1, 0x80, 0x0, 0x0, 0x40, 0x0, 0x0, 0x0, 0x0, 0xfc, 0x7e, 0x0, 0x7c, 0x3e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x3e, 0x0, 0x3e, 0x7f, 0x0, 0x1f, 0xdf, 0x80, 0x7, 0x8c, 0x0}
+
+/* uacute (250) */
+#define NXFONT_METRICS_250 {3, 17, 23, 0, 14, 0}
+#define NXFONT_BITMAP_250 {0x0, 0xc, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x38, 0x0, 0x0, 0x70, 0x0, 0x0, 0xc0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfc, 0x7e, 0x0, 0x7c, 0x3e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x3e, 0x0, 0x3e, 0x7f, 0x0, 0x1f, 0xdf, 0x80, 0x7, 0x8c, 0x0}
+
+/* ucircumflex (251) */
+#define NXFONT_METRICS_251 {3, 17, 23, 0, 14, 0}
+#define NXFONT_BITMAP_251 {0x1, 0x80, 0x0, 0x3, 0xc0, 0x0, 0x7, 0xe0, 0x0, 0x6, 0x60, 0x0, 0xc, 0x30, 0x0, 0x8, 0x10, 0x0, 0x0, 0x0, 0x0, 0xfc, 0x7e, 0x0, 0x7c, 0x3e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x3e, 0x0, 0x3e, 0x7f, 0x0, 0x1f, 0xdf, 0x80, 0x7, 0x8c, 0x0}
+
+/* udieresis (252) */
+#define NXFONT_METRICS_252 {3, 17, 22, 0, 15, 0}
+#define NXFONT_BITMAP_252 {0x4, 0x20, 0x0, 0xe, 0x70, 0x0, 0xe, 0x70, 0x0, 0x4, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfc, 0x7e, 0x0, 0x7c, 0x3e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x1e, 0x0, 0x3c, 0x3e, 0x0, 0x3e, 0x7f, 0x0, 0x1f, 0xdf, 0x80, 0x7, 0x8c, 0x0}
+
+/* yacute (253) */
+#define NXFONT_METRICS_253 {2, 15, 30, 0, 14, 0}
+#define NXFONT_BITMAP_253 {0x0, 0xc, 0x0, 0x1c, 0x0, 0x38, 0x0, 0x70, 0x0, 0xc0, 0x1, 0x0, 0x0, 0x0, 0xff, 0xbe, 0x7e, 0xc, 0x3e, 0x8, 0x3e, 0x8, 0x1f, 0x18, 0x1f, 0x10, 0xf, 0x10, 0xf, 0xb0, 0xf, 0xa0, 0x7, 0xa0, 0x7, 0xe0, 0x7, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x1, 0x80, 0x1, 0x80, 0x1, 0x80, 0x1, 0x0, 0x73, 0x0, 0xf3, 0x0, 0xf6, 0x0, 0xfe, 0x0, 0x78, 0x0}
+
+/* thorn (254) */
+#define NXFONT_METRICS_254 {2, 15, 29, 1, 15, 0}
+#define NXFONT_BITMAP_254 {0xfc, 0x0, 0x7c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0xe0, 0x3f, 0xf8, 0x3e, 0x7c, 0x3c, 0x3c, 0x3c, 0x3e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x3c, 0x3e, 0x3c, 0x3f, 0xf8, 0x3c, 0xe0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x7e, 0x0, 0xff, 0x0}
+
+/* ydieresis (255) */
+#define NXFONT_METRICS_255 {2, 15, 29, 0, 15, 0}
+#define NXFONT_BITMAP_255 {0x4, 0x20, 0xe, 0x70, 0xe, 0x70, 0x4, 0x20, 0x0, 0x0, 0x0, 0x0, 0xff, 0xbe, 0x7e, 0xc, 0x3e, 0x8, 0x3e, 0x8, 0x1f, 0x18, 0x1f, 0x10, 0xf, 0x10, 0xf, 0xb0, 0xf, 0xa0, 0x7, 0xa0, 0x7, 0xe0, 0x7, 0xc0, 0x3, 0xc0, 0x3, 0xc0, 0x1, 0x80, 0x1, 0x80, 0x1, 0x80, 0x1, 0x0, 0x73, 0x0, 0xf3, 0x0, 0xf6, 0x0, 0xfe, 0x0, 0x78, 0x0}
+
+/****************************************************************************
+ * Public Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+#define EXTERN extern "C"
+extern "C" {
+#else
+#define EXTERN extern
+#endif
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* __GRAPHICS_NXFONTS_NXFONTS_SERIF38X49B_H */
diff --git a/nuttx/graphics/nxglib/Make.defs b/nuttx/graphics/nxglib/Make.defs
new file mode 100644
index 000000000..240cdbd7c
--- /dev/null
+++ b/nuttx/graphics/nxglib/Make.defs
@@ -0,0 +1,93 @@
+############################################################################
+# graphics/nxglib/Make.defs
+#
+# Copyright (C) 2008, 2010-2011 Gregory Nutt. All rights reserved.
+# Author: Gregory Nutt <gnutt@nuttx.org>
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in
+# the documentation and/or other materials provided with the
+# distribution.
+# 3. Neither the name NuttX nor the names of its contributors may be
+# used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+############################################################################
+
+NXGLIB_ASRCS =
+
+SETP1_CSRCS = nxglib_setpixel_1bpp.c nxglib_setpixel_2bpp.c \
+ nxglib_setpixel_4bpp.c
+
+SETP2_CSRCS = nxglib_setpixel_8bpp.c nxglib_setpixel_16bpp.c \
+ nxglib_setpixel_24bpp.c nxglib_setpixel_32bpp.c
+
+RFILL1_CSRCS = nxglib_fillrectangle_1bpp.c nxglib_fillrectangle_2bpp.c \
+ nxglib_fillrectangle_4bpp.c
+
+RFILL2_CSRCS = nxglib_fillrectangle_8bpp.c nxglib_fillrectangle_16bpp.c \
+ nxglib_fillrectangle_24bpp.c nxglib_fillrectangle_32bpp.c
+
+RGET1_CSRCS = nxglib_getrectangle_1bpp.c nxglib_getrectangle_2bpp.c \
+ nxglib_getrectangle_4bpp.c
+
+RGET2_CSRCS = nxglib_getrectangle_8bpp.c nxglib_getrectangle_16bpp.c \
+ nxglib_getrectangle_24bpp.c nxglib_getrectangle_32bpp.c
+
+TFILL1_CSRCS = nxglib_filltrapezoid_1bpp.c nxglib_filltrapezoid_2bpp.c \
+ nxglib_filltrapezoid_4bpp.c
+
+TFILL2_CSRCS = nxglib_filltrapezoid_8bpp.c nxglib_filltrapezoid_16bpp.c \
+ nxglib_filltrapezoid_24bpp.c nxglib_filltrapezoid_32bpp.c
+
+RMOVE1_CSRCS = nxglib_moverectangle_1bpp.c nxglib_moverectangle_2bpp.c \
+ nxglib_moverectangle_4bpp.c
+
+RMOVE2_CSRCS = nxglib_moverectangle_8bpp.c nxglib_moverectangle_16bpp.c \
+ nxglib_moverectangle_24bpp.c nxglib_moverectangle_32bpp.c
+
+RCOPY1_CSRCS = nxglib_copyrectangle_1bpp.c nxglib_copyrectangle_2bpp.c \
+ nxglib_copyrectangle_4bpp.c
+
+RCOPY2_CSRCS = nxglib_copyrectangle_8bpp.c nxglib_copyrectangle_16bpp.c \
+ nxglib_copyrectangle_24bpp.c nxglib_copyrectangle_32bpp.c
+
+RECT_CSRCS = nxglib_rectcopy.c nxglib_rectoffset.c nxglib_vectoradd.c \
+ nxglib_vectsubtract.c nxglib_rectadd.c nxglib_rectintersect.c \
+ nxglib_intersecting.c nxglib_nonintersecting.c nxglib_rectunion.c \
+ nxglib_rectinside.c nxglib_rectoverlap.c nxglib_rectsize.c nxglib_nullrect.c
+
+TRAP_CSRCS = nxglib_runoffset.c nxglib_runcopy.c \
+ nxglib_trapoffset.c nxglib_trapcopy.c
+
+COLOR_CSRCS = nxglib_colorcopy.c nxglib_rgb2yuv.c nxglib_yuv2rgb.c
+
+DRAW_CSRCS = nxglib_splitline.c nxglib_circlepts.c nxglib_circletraps.c
+
+LCD_CSRCS =
+
+NXGLIB_CSRCS = \
+ $(SETP1_CSRCS) $(SETP2_CSRCS) $(RFILL1_CSRCS) $(RFILL2_CSRCS) \
+ $(RGET1_CSRCS) $(RGET2_CSRCS) $(TFILL1_CSRCS) $(TFILL2_CSRCS) \
+ $(RMOVE1_CSRCS) $(RMOVE2_CSRCS) $(RCOPY1_CSRCS) $(RCOPY2_CSRCS) \
+ $(RECT_CSRCS) $(TRAP_CSRCS) $(COLOR_CSRCS) $(DRAW_CSRCS) $(LCD_CSRCS)
+
diff --git a/nuttx/graphics/nxglib/Makefile.sources b/nuttx/graphics/nxglib/Makefile.sources
new file mode 100644
index 000000000..67f8defc3
--- /dev/null
+++ b/nuttx/graphics/nxglib/Makefile.sources
@@ -0,0 +1,175 @@
+############################################################################
+# graphics/nxglib/Makefile.sources
+#
+# Copyright (C) 2008, 2010-2011 Gregory Nutt. All rights reserved.
+# Author: Gregory Nutt <gnutt@nuttx.org>
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in
+# the documentation and/or other materials provided with the
+# distribution.
+# 3. Neither the name NuttX nor the names of its contributors may be
+# used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+############################################################################
+
+-include $(TOPDIR)/.config
+-include $(TOPDIR)/Make.defs
+
+ifeq ($(NXGLIB_BITSPERPIXEL),1)
+NXGLIB_SUFFIX := _1bpp
+SETP_CSRC := nxglib_setpixel_1bpp.c
+RFILL_CSRC := nxglib_fillrectangle_1bpp.c
+RGET_CSRC := nxglib_getrectangle_1bpp.c
+TFILL_CSRC := nxglib_filltrapezoid_1bpp.c
+RMOVE_CSRC := nxglib_moverectangle_1bpp.c
+RCOPY_CSRC := nxglib_copyrectangle_1bpp.c
+endif
+ifeq ($(NXGLIB_BITSPERPIXEL),2)
+NXGLIB_SUFFIX := _2bpp
+SETP_CSRC := nxglib_setpixel_2bpp.c
+RFILL_CSRC := nxglib_fillrectangle_2bpp.c
+RGET_CSRC := nxglib_getrectangle_2bpp.c
+TFILL_CSRC := nxglib_filltrapezoid_2bpp.c
+RMOVE_CSRC := nxglib_moverectangle_2bpp.c
+RCOPY_CSRC := nxglib_copyrectangle_2bpp.c
+endif
+ifeq ($(NXGLIB_BITSPERPIXEL),4)
+NXGLIB_SUFFIX := _4bpp
+SETP_CSRC := nxglib_setpixel_4bpp.c
+RFILL_CSRC := nxglib_fillrectangle_4bpp.c
+RGET_CSRC := nxglib_getrectangle_4bpp.c
+TFILL_CSRC := nxglib_filltrapezoid_4bpp.c
+RMOVE_CSRC := nxglib_moverectangle_4bpp.c
+RCOPY_CSRC := nxglib_copyrectangle_4bpp.c
+endif
+ifeq ($(NXGLIB_BITSPERPIXEL),8)
+NXGLIB_SUFFIX := _8bpp
+SETP_CSRC := nxglib_setpixel_8bpp.c
+RFILL_CSRC := nxglib_fillrectangle_8bpp.c
+RGET_CSRC := nxglib_getrectangle_8bpp.c
+TFILL_CSRC := nxglib_filltrapezoid_8bpp.c
+RMOVE_CSRC := nxglib_moverectangle_8bpp.c
+RCOPY_CSRC := nxglib_copyrectangle_8bpp.c
+endif
+ifeq ($(NXGLIB_BITSPERPIXEL),16)
+NXGLIB_SUFFIX := _16bpp
+SETP_CSRC := nxglib_setpixel_16bpp.c
+RFILL_CSRC := nxglib_fillrectangle_16bpp.c
+RGET_CSRC := nxglib_getrectangle_16bpp.c
+TFILL_CSRC := nxglib_filltrapezoid_16bpp.c
+RMOVE_CSRC := nxglib_moverectangle_16bpp.c
+RCOPY_CSRC := nxglib_copyrectangle_16bpp.c
+endif
+ifeq ($(NXGLIB_BITSPERPIXEL),24)
+NXGLIB_SUFFIX := _24bpp
+SETP_CSRC := nxglib_setpixel_24bpp.c
+RFILL_CSRC := nxglib_fillrectangle_24bpp.c
+RGET_CSRC := nxglib_getrectangle_24bpp.c
+TFILL_CSRC := nxglib_filltrapezoid_24bpp.c
+RMOVE_CSRC := nxglib_moverectangle_24bpp.c
+RCOPY_CSRC := nxglib_copyrectangle_24bpp.c
+endif
+ifeq ($(NXGLIB_BITSPERPIXEL),32)
+NXGLIB_SUFFIX := _32bpp
+SETP_CSRC := nxglib_setpixel_32bpp.c
+RFILL_CSRC := nxglib_fillrectangle_32bpp.c
+RGET_CSRC := nxglib_getrectangle_32bpp.c
+TFILL_CSRC := nxglib_filltrapezoid_32bpp.c
+RMOVE_CSRC := nxglib_moverectangle_32bpp.c
+RCOPY_CSRC := nxglib_copyrectangle_32bpp.c
+endif
+
+CPPFLAGS += -DNXGLIB_BITSPERPIXEL=$(NXGLIB_BITSPERPIXEL)
+CPPFLAGS += -DNXGLIB_SUFFIX=$(NXGLIB_SUFFIX)
+
+SETP_TMP = $(SETP_CSRC:.c=.i)
+RFILL_TMP = $(RFILL_CSRC:.c=.i)
+RGET_TMP = $(RGET_CSRC:.c=.i)
+TFILL_TMP = $(TFILL_CSRC:.c=.i)
+RMOVE_TMP = $(RMOVE_CSRC:.c=.i)
+RCOPY_TMP = $(RCOPY_CSRC:.c=.i)
+
+GEN_CSRCS = $(SETP_CSRC) $(RFILL_CSRC) $(RGET_CSRC) $(TFILL_CSRC) $(RMOVE_CSRC) $(RCOPY_CSRC)
+
+ifeq ($(CONFIG_NX_LCDDRIVER),y)
+BLITDIR = lcd
+else
+BLITDIR = fb
+endif
+
+all: $(GEN_CSRCS)
+.PHONY : clean distclean
+
+$(SETP_CSRC) : $(BLITDIR)/nxglib_setpixel.c nxglib_bitblit.h
+ifneq ($(NXGLIB_BITSPERPIXEL),)
+ @$(call PREPROCESS, $(BLITDIR)/nxglib_setpixel.c, $(SETP_TMP))
+ @cat $(SETP_TMP) | sed -e "/^#/d" >$@
+ @rm -f $(SETP_TMP)
+endif
+
+$(RFILL_CSRC) : $(BLITDIR)/nxglib_fillrectangle.c nxglib_bitblit.h
+ifneq ($(NXGLIB_BITSPERPIXEL),)
+ @$(call PREPROCESS, $(BLITDIR)/nxglib_fillrectangle.c, $(RFILL_TMP))
+ @cat $(RFILL_TMP) | sed -e "/^#/d" >$@
+ @rm -f $(RFILL_TMP)
+endif
+
+$(RGET_CSRC) : $(BLITDIR)/nxglib_getrectangle.c nxglib_bitblit.h
+ifneq ($(NXGLIB_BITSPERPIXEL),)
+ @$(call PREPROCESS, $(BLITDIR)/nxglib_getrectangle.c, $(RGET_TMP))
+ @cat $(RGET_TMP) | sed -e "/^#/d" >$@
+ @rm -f $(RGET_TMP)
+endif
+
+$(TFILL_CSRC) : $(BLITDIR)/nxglib_filltrapezoid.c nxglib_bitblit.h
+ifneq ($(NXGLIB_BITSPERPIXEL),)
+ @$(call PREPROCESS, $(BLITDIR)/nxglib_filltrapezoid.c, $(TFILL_TMP))
+ @cat $(TFILL_TMP) | sed -e "/^#/d" >$@
+ @rm -f $(TFILL_TMP)
+endif
+
+$(RMOVE_CSRC) : $(BLITDIR)/nxglib_moverectangle.c nxglib_bitblit.h
+ifneq ($(NXGLIB_BITSPERPIXEL),)
+ @$(call PREPROCESS, $(BLITDIR)/nxglib_moverectangle.c, $(RMOVE_TMP))
+ @cat $(RMOVE_TMP) | sed -e "/^#/d" >$@
+ @rm -f $(RMOVE_TMP)
+endif
+
+$(RCOPY_CSRC) : $(BLITDIR)/nxglib_copyrectangle.c nxglib_bitblit.h
+ifneq ($(NXGLIB_BITSPERPIXEL),)
+ @$(call PREPROCESS, $(BLITDIR)/nxglib_copyrectangle.c, $(RCOPY_TMP))
+ @cat $(RCOPY_TMP) | sed -e "/^#/d" >$@
+ @rm -f $(RCOPY_TMP)
+endif
+
+clean:
+ @rm -f *~ .*.swp *.i
+
+distclean: clean
+ @rm -f nxglib_setpixel_*bpp.c
+ @rm -f nxglib_fillrectangle_*bpp.c
+ @rm -f nxglib_getrectangle_*bpp.c
+ @rm -f nxglib_filltrapezoid_*bpp.c
+ @rm -f nxglib_moverectangle_*bpp.c
+ @rm -f nxglib_copyrectangle_*bpp.c
diff --git a/nuttx/graphics/nxglib/fb/nxglib_copyrectangle.c b/nuttx/graphics/nxglib/fb/nxglib_copyrectangle.c
new file mode 100644
index 000000000..4ad792a4c
--- /dev/null
+++ b/nuttx/graphics/nxglib/fb/nxglib_copyrectangle.c
@@ -0,0 +1,179 @@
+/****************************************************************************
+ * graphics/nxglib/fb/nxsglib_copyrectangle.c
+ *
+ * Copyright (C) 2008-2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdint.h>
+
+#include <nuttx/fb.h>
+#include <nuttx/nx/nxglib.h>
+
+#include "nxglib_bitblit.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxgl_copyrectangle_*bpp
+ *
+ * Descripton:
+ * Copy a rectangular bitmap image into the specific position in the
+ * framebuffer memory.
+ *
+ ****************************************************************************/
+
+void NXGL_FUNCNAME(nxgl_copyrectangle,NXGLIB_SUFFIX)
+(FAR struct fb_planeinfo_s *pinfo, FAR const struct nxgl_rect_s *dest,
+ FAR const void *src, FAR const struct nxgl_point_s *origin,
+ unsigned int srcstride)
+{
+ FAR const uint8_t *sline;
+ FAR uint8_t *dline;
+ unsigned int width;
+ unsigned int deststride;
+ unsigned int rows;
+
+#if NXGLIB_BITSPERPIXEL < 8
+ FAR const uint8_t *sptr;
+ FAR uint8_t *dptr;
+ uint8_t leadmask;
+ uint8_t tailmask;
+ uint8_t mask;
+ int lnlen;
+#endif
+
+ /* Get the width of the framebuffer in bytes */
+
+ deststride = pinfo->stride;
+
+ /* Get the dimensions of the rectange to fill: width in pixels,
+ * height in rows
+ */
+
+ width = dest->pt2.x - dest->pt1.x + 1;
+ rows = dest->pt2.y - dest->pt1.y + 1;
+
+#if NXGLIB_BITSPERPIXEL < 8
+# ifdef CONFIG_NX_PACKEDMSFIRST
+
+ /* Get the mask for pixels that are ordered so that they pack from the
+ * MS byte down.
+ */
+
+ leadmask = (uint8_t)(0xff >> (8 - NXGL_REMAINDERX(dest->pt1.x)));
+ tailmask = (uint8_t)(0xff << (8 - NXGL_REMAINDERX(dest->pt2.x-1)));
+# else
+ /* Get the mask for pixels that are ordered so that they pack from the
+ * LS byte up.
+ */
+
+ leadmask = (uint8_t)(0xff << (8 - NXGL_REMAINDERX(dest->pt1.x)));
+ tailmask = (uint8_t)(0xff >> (8 - NXGL_REMAINDERX(dest->pt1.x-1)));
+# endif
+#endif
+
+ /* Then copy the image */
+
+ sline = (const uint8_t*)src + NXGL_SCALEX(dest->pt1.x - origin->x) + (dest->pt1.y - origin->y) * srcstride;
+ dline = pinfo->fbmem + dest->pt1.y * deststride + NXGL_SCALEX(dest->pt1.x);
+
+ while (rows--)
+ {
+#if NXGLIB_BITSPERPIXEL < 8
+ /* Handle masking of the fractional initial byte */
+
+ mask = leadmask;
+ sptr = sline;
+ dptr = dline;
+ lnlen = width;
+
+ if (lnlen > 1 && mask)
+ {
+ dptr[0] = (dptr[0] & ~mask) | (sptr[0] & mask);
+ mask = 0xff;
+ dptr++;
+ sptr++;
+ lnlen--;
+ }
+
+ /* Handle masking of the fractional final byte */
+
+ mask &= tailmask;
+ if (lnlen > 0 && mask)
+ {
+ dptr[lnlen-1] = (dptr[lnlen-1] & ~mask) | (sptr[lnlen-1] & mask);
+ lnlen--;
+ }
+
+ /* Handle all of the unmasked bytes in-between */
+
+ if (lnlen > 0)
+ {
+ NXGL_MEMCPY(dptr, sptr, lnlen);
+ }
+#else
+ /* Copy the whole line */
+
+ NXGL_MEMCPY((NXGL_PIXEL_T*)dline, (NXGL_PIXEL_T*)sline, width);
+#endif
+ dline += deststride;
+ sline += srcstride;
+ }
+}
diff --git a/nuttx/graphics/nxglib/fb/nxglib_fillrectangle.c b/nuttx/graphics/nxglib/fb/nxglib_fillrectangle.c
new file mode 100644
index 000000000..cb9483c98
--- /dev/null
+++ b/nuttx/graphics/nxglib/fb/nxglib_fillrectangle.c
@@ -0,0 +1,177 @@
+/****************************************************************************
+ * graphics/nxglib/fb/nxglib_fillrectangle.c
+ *
+ * Copyright (C) 2008-2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdint.h>
+
+#include <nuttx/fb.h>
+#include <nuttx/nx/nxglib.h>
+
+#include "nxglib_bitblit.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+#ifndef NXGLIB_SUFFIX
+# error "NXGLIB_SUFFIX must be defined before including this header file"
+#endif
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxgl_fillrectangle_*bpp
+ *
+ * Descripton:
+ * Fill a rectangle region in the framebuffer memory with a fixed color
+ *
+ ****************************************************************************/
+
+void NXGL_FUNCNAME(nxgl_fillrectangle,NXGLIB_SUFFIX)
+ (FAR struct fb_planeinfo_s *pinfo,
+ FAR const struct nxgl_rect_s *rect,
+ NXGL_PIXEL_T color)
+{
+ FAR uint8_t *line;
+ unsigned int width;
+ unsigned int stride;
+ int rows;
+
+#if NXGLIB_BITSPERPIXEL < 8
+ FAR uint8_t *dest;
+ uint8_t mpixel = NXGL_MULTIPIXEL(color);
+ uint8_t leadmask;
+ uint8_t tailmask;
+ uint8_t mask;
+ int lnlen;
+#endif
+
+ /* Get the width of the framebuffer in bytes */
+
+ stride = pinfo->stride;
+
+ /* Get the dimensions of the rectange to fill in pixels */
+
+ width = rect->pt2.x - rect->pt1.x + 1;
+ rows = rect->pt2.y - rect->pt1.y + 1;
+
+ /* Get the address of the first byte in the first line to write */
+
+ line = pinfo->fbmem + rect->pt1.y * stride + NXGL_SCALEX(rect->pt1.x);
+
+#if NXGLIB_BITSPERPIXEL < 8
+# ifdef CONFIG_NX_PACKEDMSFIRST
+
+ /* Get the mask for pixels that are ordered so that they pack from the
+ * MS byte down.
+ */
+
+ leadmask = (uint8_t)(0xff >> (8 - NXGL_REMAINDERX(rect->pt1.x)));
+ tailmask = (uint8_t)(0xff << (8 - NXGL_REMAINDERX(rect->pt2.x-1)));
+# else
+ /* Get the mask for pixels that are ordered so that they pack from the
+ * LS byte up.
+ */
+
+ leadmask = (uint8_t)(0xff << (8 - NXGL_REMAINDERX(rect->pt1.x)));
+ tailmask = (uint8_t)(0xff >> (8 - NXGL_REMAINDERX(rect->pt1.x-1)));
+# endif
+#endif
+
+ /* Then fill the rectangle line-by-line */
+
+ while (rows-- > 0)
+ {
+#if NXGLIB_BITSPERPIXEL < 8
+ /* Handle masking of the fractional initial byte */
+
+ mask = leadmask;
+ dest = line;
+ lnlen = width;
+
+ if (lnlen > 1 && mask)
+ {
+ dest[0] = (dest[0] & ~mask) | (mpixel & mask);
+ mask = 0xff;
+ dest++;
+ lnlen--;
+ }
+
+ /* Handle masking of the fractional final byte */
+
+ mask &= tailmask;
+ if (lnlen > 0 && mask)
+ {
+ dest[lnlen-1] = (dest[lnlen-1] & ~mask) | (mpixel & mask);
+ lnlen--;
+ }
+
+ /* Handle all of the unmasked bytes in-between */
+
+ if (lnlen > 0)
+ {
+ NXGL_MEMSET(dest, (NXGL_PIXEL_T)color, lnlen);
+ }
+#else
+ /* Draw the entire raster line */
+
+ NXGL_MEMSET(line, (NXGL_PIXEL_T)color, width);
+#endif
+ line += stride;
+ }
+}
diff --git a/nuttx/graphics/nxglib/fb/nxglib_filltrapezoid.c b/nuttx/graphics/nxglib/fb/nxglib_filltrapezoid.c
new file mode 100644
index 000000000..7623bf84f
--- /dev/null
+++ b/nuttx/graphics/nxglib/fb/nxglib_filltrapezoid.c
@@ -0,0 +1,285 @@
+/****************************************************************************
+ * graphics/nxglib/fb/nxglib_filltrapezoid.c
+ *
+ * Copyright (C) 2008-2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdint.h>
+#include <fixedmath.h>
+
+#include <nuttx/fb.h>
+#include <nuttx/nx/nxglib.h>
+
+#include "nxglib_bitblit.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+#ifndef NXGLIB_SUFFIX
+# error "NXGLIB_SUFFIX must be defined before including this header file"
+#endif
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxglib_filltrapezoid_*bpp
+ *
+ * Descripton:
+ * Fill a trapezoidal region in the framebuffer memory with a fixed color.
+ * Clip the trapezoid to lie within a boundng box. This is useful for
+ * drawing complex shapes that can be broken into a set of trapezoids.
+ *
+ ****************************************************************************/
+
+void NXGL_FUNCNAME(nxgl_filltrapezoid,NXGLIB_SUFFIX)(
+ FAR struct fb_planeinfo_s *pinfo,
+ FAR const struct nxgl_trapezoid_s *trap,
+ FAR const struct nxgl_rect_s *bounds,
+ NXGL_PIXEL_T color)
+{
+ unsigned int stride;
+ unsigned int width;
+ FAR uint8_t *dest;
+ FAR uint8_t *line;
+ int nrows;
+ b16_t x1;
+ b16_t x2;
+ nxgl_coord_t y1;
+ nxgl_coord_t y2;
+ b16_t dx1dy;
+ b16_t dx2dy;
+
+#if NXGLIB_BITSPERPIXEL < 8
+ uint8_t mpixel = NXGL_MULTIPIXEL(color);
+ uint8_t mask;
+ int lnlen;
+#endif
+
+ /* Get the width of the framebuffer in bytes */
+
+ stride = pinfo->stride;
+
+ /* Get the top run position and the number of rows to draw */
+
+ x1 = trap->top.x1;
+ x2 = trap->top.x2;
+
+ /* Calculate the number of rows to render */
+
+ y1 = trap->top.y;
+ y2 = trap->bot.y;
+ nrows = y2 - y1 + 1;
+
+ /* Calculate the slope of the left and right side of the trapezoid */
+
+ if (nrows > 1)
+ {
+ dx1dy = b16divi((trap->bot.x1 - x1), nrows - 1);
+ dx2dy = b16divi((trap->bot.x2 - x2), nrows - 1);
+ }
+ else
+ {
+ /* The trapezoid is a run! Use the average width. */
+
+ x1 = (x1 + trap->bot.x1) >> 1;
+ x2 = (x2 + trap->bot.x2) >> 1;
+ dx1dy = 0;
+ dx2dy = 0;
+ }
+
+ /* Perform vertical clipping */
+
+ if (y1 < bounds->pt1.y)
+ {
+ /* Is the entire trapezoid "above" the clipping window? */
+
+ if (y2 < bounds->pt1.y)
+ {
+ /* Yes.. then do nothing */
+
+ return;
+ }
+
+ /* Calculate the x values for the new top run */
+
+ int dy = bounds->pt1.y - y1;
+ x1 += dy * dx1dy;
+ x2 += dy * dx2dy;
+
+ /* Clip and re-calculate the number of rows to render */
+
+ y1 = bounds->pt1.y;
+ nrows = y2 - y1 + 1;
+ }
+
+ if (y2 > bounds->pt2.y)
+ {
+ /* Is the entire trapezoid "below" the clipping window? */
+
+ if (y1 > bounds->pt2.y)
+ {
+ /* Yes.. then do nothing */
+
+ return;
+ }
+
+ /* Clip and re-calculate the number of rows to render */
+
+ y2 = bounds->pt2.y;
+ nrows = y2 - y1 + 1;
+ }
+
+ /* Get the address of the first byte on the first line */
+
+ line = pinfo->fbmem + y1 * stride ;
+
+ /* Then fill the trapezoid line-by-line */
+
+ while (nrows--)
+ {
+ int ix1;
+ int ix2;
+
+ /* Handle the special case where the sides cross (as in an hourglass) */
+
+ if (x1 > x2)
+ {
+ b16_t tmp;
+ ngl_swap(x1, x2, tmp);
+ ngl_swap(dx1dy, dx2dy, tmp);
+ }
+
+ /* Convert the positions to integer */
+
+ ix1 = b16toi(x1);
+ ix2 = b16toi(x2);
+
+ /* Handle some corner cases where we draw nothing. Otherwise, we will
+ * always draw at least one pixel.
+ */
+
+ if (x1 <= x2 && ix2 >= bounds->pt1.x && ix1 <= bounds->pt2.x)
+ {
+ /* Get a clipped copies of the starting and ending X positions. This
+ * clipped truncates "down" and gives the quantized pixel holding the
+ * fractional X position
+ */
+
+ ix1 = ngl_clipl(ix1, bounds->pt1.x);
+ ix2 = ngl_clipr(ix2, bounds->pt2.x);
+
+ /* Get the run length for the clipped row */
+
+ width = ix2 - ix1 + 1;
+
+#if NXGLIB_BITSPERPIXEL < 8
+ /* Handle masking of the fractional initial byte */
+
+#ifdef CONFIG_NX_PACKEDMSFIRST
+ mask = (uint8_t)(0xff >> (8 - NXGL_REMAINDERX(ix1));
+#else
+ mask = (uint8_t)(0xff << (8 - NXGL_REMAINDERX(ix1)));
+#endif
+ dest = line;
+ lnlen = width;
+
+ if (lnlen > 1 && mask)
+ {
+ dest[0] = (dest[0] & ~mask) | (mpixel & mask);
+ mask = 0xff;
+ dest++;
+ lnlen--;
+ }
+
+ /* Handle masking of the fractional final byte */
+
+#ifdef CONFIG_NX_PACKEDMSFIRST
+ mask &= (uint8_t)(0xff << (8 - NXGL_REMAINDERX(ix2)));
+#else
+ mask &= (uint8_t)(0xff >> (8 - NXGL_REMAINDERX(ix2)));
+#endif
+ if (lnlen > 0 && mask)
+ {
+ dest[lnlen-1] = (dest[lnlen-1] & ~mask) | (mpixel & mask);
+ lnlen--;
+ }
+
+ /* Handle all of the unmasked bytes in-between */
+
+ if (lnlen > 0)
+ {
+ NXGL_MEMSET(dest, (NXGL_PIXEL_T)color, lnlen);
+ }
+
+#else
+ /* Then draw the run from (line + ix1) to (line + ix2) */
+
+ dest = line + NXGL_SCALEX(ix1);
+ NXGL_MEMSET(dest, (NXGL_PIXEL_T)color, width);
+#endif
+ }
+
+ /* Move to the start of the next line */
+
+ line += stride;
+
+ /* Add the dx/dy value to get the run positions on the next row */
+
+ x1 += dx1dy;
+ x2 += dx2dy;
+ }
+}
diff --git a/nuttx/graphics/nxglib/fb/nxglib_getrectangle.c b/nuttx/graphics/nxglib/fb/nxglib_getrectangle.c
new file mode 100644
index 000000000..82e541ec5
--- /dev/null
+++ b/nuttx/graphics/nxglib/fb/nxglib_getrectangle.c
@@ -0,0 +1,201 @@
+/****************************************************************************
+ * graphics/nxglib/fb/nxglib_getrectangle.c
+ *
+ * Copyright (C) 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdint.h>
+
+#include <nuttx/fb.h>
+#include <nuttx/nx/nxglib.h>
+
+#include "nxglib_bitblit.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxgl_lowresmemcpy
+ ****************************************************************************/
+
+#if NXGLIB_BITSPERPIXEL < 8
+static inline void nxgl_lowresmemcpy(FAR uint8_t *dline, FAR const uint8_t *sline,
+ unsigned int width,
+ uint8_t leadmask, uint8_t tailmask)
+{
+ FAR const uint8_t *sptr;
+ FAR uint8_t *dptr;
+ uint8_t mask;
+ int lnlen;
+
+ /* Handle masking of the fractional initial byte */
+
+ mask = leadmask;
+ sptr = sline;
+ dptr = dline;
+ lnlen = width;
+
+ if (lnlen > 1 && mask)
+ {
+ dptr[0] = (dptr[0] & ~mask) | (sptr[0] & mask);
+ mask = 0xff;
+ dptr++;
+ sptr++;
+ lnlen--;
+ }
+
+ /* Handle masking of the fractional final byte */
+
+ mask &= tailmask;
+ if (lnlen > 0 && mask)
+ {
+ dptr[lnlen-1] = (dptr[lnlen-1] & ~mask) | (sptr[lnlen-1] & mask);
+ lnlen--;
+ }
+
+ /* Handle all of the unmasked bytes in-between */
+
+ if (lnlen > 0)
+ {
+ NXGL_MEMCPY(dptr, sptr, lnlen);
+ }
+}
+#endif
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxgl_getrectangle_*bpp
+ *
+ * Descripton:
+ * Fetch a rectangular region from framebuffer memory. The source is
+ * expressed as a rectangle.
+ *
+ ****************************************************************************/
+
+void NXGL_FUNCNAME(nxgl_getrectangle,NXGLIB_SUFFIX)
+(FAR struct fb_planeinfo_s *pinfo, FAR const struct nxgl_rect_s *rect,
+ FAR void *dest, unsigned int deststride)
+{
+ FAR const uint8_t *sline;
+ FAR uint8_t *dline;
+ unsigned int width;
+ unsigned int fbstride;
+ unsigned int rows;
+
+#if NXGLIB_BITSPERPIXEL < 8
+ uint8_t leadmask;
+ uint8_t tailmask;
+#endif
+
+ /* Get the width of the framebuffer in bytes */
+
+ fbstride = pinfo->stride;
+
+ /* Get the dimensions of the rectange to copy: width in pixels, height
+ * in rows
+ */
+
+ width = rect->pt2.x - rect->pt1.x + 1;
+ rows = rect->pt2.y - rect->pt1.y + 1;
+
+#if NXGLIB_BITSPERPIXEL < 8
+# ifdef CONFIG_NX_PACKEDMSFIRST
+
+ /* Get the mask for pixels that are ordered so that they pack from the
+ * MS byte down.
+ */
+
+ leadmask = (uint8_t)(0xff >> (8 - NXGL_REMAINDERX(rect->pt1.x)));
+ tailmask = (uint8_t)(0xff << (8 - NXGL_REMAINDERX(rect->pt2.x-1)));
+# else
+ /* Get the mask for pixels that are ordered so that they pack from the
+ * LS byte up.
+ */
+
+ leadmask = (uint8_t)(0xff << (8 - NXGL_REMAINDERX(rect->pt1.x)));
+ tailmask = (uint8_t)(0xff >> (8 - NXGL_REMAINDERX(rect->pt1.x-1)));
+# endif
+#endif
+
+ /* sline = address of the first pixel in the top row of the source in
+ * framebuffer memory
+ */
+
+ sline = pinfo->fbmem + rect->pt1.y * fbstride + NXGL_SCALEX(rect->pt1.x);
+
+ /* dline = address of the first row pixel */
+
+ dline = (FAR uint8_t *)dest;
+
+ /* Yes.. Copy the rectangle */
+
+ while (rows--)
+ {
+ /* Copy the row */
+
+#if NXGLIB_BITSPERPIXEL < 8
+ nxgl_lowresmemcpy(dline, sline, width, leadmask, tailmask);
+#else
+ NXGL_MEMCPY(dline, sline, width);
+#endif
+ /* Point to the next source/dest row below the current one */
+
+ dline += deststride;
+ sline += fbstride;
+ }
+}
diff --git a/nuttx/graphics/nxglib/fb/nxglib_moverectangle.c b/nuttx/graphics/nxglib/fb/nxglib_moverectangle.c
new file mode 100644
index 000000000..d8e52250c
--- /dev/null
+++ b/nuttx/graphics/nxglib/fb/nxglib_moverectangle.c
@@ -0,0 +1,252 @@
+/****************************************************************************
+ * graphics/nxglib/fb/nxglib_moverectangle.c
+ *
+ * Copyright (C) 2008-2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdint.h>
+
+#include <nuttx/fb.h>
+#include <nuttx/nx/nxglib.h>
+
+#include "nxglib_bitblit.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxgl_lowresmemcpy
+ ****************************************************************************/
+
+#if NXGLIB_BITSPERPIXEL < 8
+static inline void nxgl_lowresmemcpy(FAR uint8_t *dline, FAR const uint8_t *sline,
+ unsigned int width,
+ uint8_t leadmask, uint8_t tailmask)
+{
+ FAR const uint8_t *sptr;
+ FAR uint8_t *dptr;
+ uint8_t mask;
+ int lnlen;
+
+ /* Handle masking of the fractional initial byte */
+
+ mask = leadmask;
+ sptr = sline;
+ dptr = dline;
+ lnlen = width;
+
+ if (lnlen > 1 && mask)
+ {
+ dptr[0] = (dptr[0] & ~mask) | (sptr[0] & mask);
+ mask = 0xff;
+ dptr++;
+ sptr++;
+ lnlen--;
+ }
+
+ /* Handle masking of the fractional final byte */
+
+ mask &= tailmask;
+ if (lnlen > 0 && mask)
+ {
+ dptr[lnlen-1] = (dptr[lnlen-1] & ~mask) | (sptr[lnlen-1] & mask);
+ lnlen--;
+ }
+
+ /* Handle all of the unmasked bytes in-between */
+
+ if (lnlen > 0)
+ {
+ NXGL_MEMCPY(dptr, sptr, lnlen);
+ }
+}
+#endif
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxgl_moverectangle_*bpp
+ *
+ * Descripton:
+ * Move a rectangular region from location to another in the
+ * framebuffer memory. The source is expressed as a rectangle; the
+ * destination position is expressed as a point corresponding to the
+ * translation of the upper, left-hand corner.
+ *
+ ****************************************************************************/
+
+void NXGL_FUNCNAME(nxgl_moverectangle,NXGLIB_SUFFIX)
+(FAR struct fb_planeinfo_s *pinfo, FAR const struct nxgl_rect_s *rect,
+ FAR struct nxgl_point_s *offset)
+{
+ FAR const uint8_t *sline;
+ FAR uint8_t *dline;
+ unsigned int width;
+ unsigned int stride;
+ unsigned int rows;
+
+#if NXGLIB_BITSPERPIXEL < 8
+ uint8_t leadmask;
+ uint8_t tailmask;
+#endif
+
+ /* Get the width of the framebuffer in bytes */
+
+ stride = pinfo->stride;
+
+ /* Get the dimensions of the rectange to fill: width in pixels, height
+ * in rows
+ */
+
+ width = rect->pt2.x - rect->pt1.x + 1;
+ rows = rect->pt2.y - rect->pt1.y + 1;
+
+#if NXGLIB_BITSPERPIXEL < 8
+# ifdef CONFIG_NX_PACKEDMSFIRST
+
+ /* Get the mask for pixels that are ordered so that they pack from the
+ * MS byte down.
+ */
+
+ leadmask = (uint8_t)(0xff >> (8 - NXGL_REMAINDERX(rect->pt1.x)));
+ tailmask = (uint8_t)(0xff << (8 - NXGL_REMAINDERX(rect->pt2.x-1)));
+# else
+ /* Get the mask for pixels that are ordered so that they pack from the
+ * LS byte up.
+ */
+
+ leadmask = (uint8_t)(0xff << (8 - NXGL_REMAINDERX(rect->pt1.x)));
+ tailmask = (uint8_t)(0xff >> (8 - NXGL_REMAINDERX(rect->pt1.x-1)));
+# endif
+#endif
+
+ /* sline = address of the first pixel in the top row of the source in
+ * framebuffer memory
+ */
+
+ sline = pinfo->fbmem + rect->pt1.y * stride + NXGL_SCALEX(rect->pt1.x);
+
+ /* dline = address of the first pixel in the top row of the destination
+ * in framebuffer memory. We get dline by subtract the offset from the
+ * source position.
+ */
+
+ dline = pinfo->fbmem + offset->y * stride + NXGL_SCALEX(offset->x);
+
+ /* Case 1: Is the destination position above the displayed position?
+ * If the destination position is less then then the src address, then the
+ * destination is offset to a postion below (and or to the left) of the
+ * source in framebuffer memory.
+ */
+
+ if (offset->y < rect->pt1.y ||
+ (offset->y < rect->pt1.y && offset->x <= rect->pt1.x))
+ {
+ /* Yes.. Copy the rectangle from top down (i.e., adding the stride
+ * to move to the next, lower row) */
+
+ while (rows--)
+ {
+ /* Copy the row */
+
+#if NXGLIB_BITSPERPIXEL < 8
+ nxgl_lowresmemcpy(dline, sline, width, leadmask, tailmask);
+#else
+ NXGL_MEMCPY(dline, sline, width);
+#endif
+ /* Point to the next source/dest row below the current one */
+
+ dline += stride;
+ sline += stride;
+ }
+ }
+
+ /* Case 2: No.. the destination position is above (or to the left of)
+ * the displayed source position
+ */
+
+ else
+ {
+ /* Adjust sline and dline to point to the bottom row (+1) of the
+ * source and destination rectangles in framebuffer memory.
+ */
+
+ unsigned int hoffset = rows * stride;
+ sline += hoffset;
+ dline += hoffset;
+
+ /* Copy the rectangle from the bottom up (i.e., subtracting stride
+ * to re-position to the previous, higher row)
+ */
+
+ while (rows--)
+ {
+ /* Point to the next source/dest row above the current one */
+
+ dline -= stride;
+ sline -= stride;
+
+ /* Copy the row */
+
+#if NXGLIB_BITSPERPIXEL < 8
+ nxgl_lowresmemcpy(dline, sline, width, leadmask, tailmask);
+#else
+ NXGL_MEMCPY(dline, sline, width);
+#endif
+ }
+ }
+}
diff --git a/nuttx/graphics/nxglib/fb/nxglib_setpixel.c b/nuttx/graphics/nxglib/fb/nxglib_setpixel.c
new file mode 100644
index 000000000..7079b7e57
--- /dev/null
+++ b/nuttx/graphics/nxglib/fb/nxglib_setpixel.c
@@ -0,0 +1,156 @@
+/****************************************************************************
+ * graphics/nxglib/fb/nxglib_setpixel.c
+ *
+ * Copyright (C) 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdint.h>
+
+#include <nuttx/fb.h>
+#include <nuttx/nx/nxglib.h>
+
+#include "nxglib_bitblit.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+#ifndef NXGLIB_SUFFIX
+# error "NXGLIB_SUFFIX must be defined before including this header file"
+#endif
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxgl_setpixel_*bpp
+ *
+ * Descripton:
+ * Draw a single pixel in frambuffer memory at the given position and with
+ * the given color. This is equivalent to nxgl_fillrectangle_*bpp() with
+ * a 1x1 rectangle but is more efficient.
+ *
+ ****************************************************************************/
+
+void NXGL_FUNCNAME(nxgl_setpixel,NXGLIB_SUFFIX)
+ (FAR struct fb_planeinfo_s *pinfo,
+ FAR const struct nxgl_point_s *pos,
+ NXGL_PIXEL_T color)
+{
+ FAR uint8_t *dest;
+
+#if NXGLIB_BITSPERPIXEL < 8
+ uint8_t shift;
+ uint8_t mask;
+#else
+ FAR NXGL_PIXEL_T *pixel;
+#endif
+
+ /* Get the address of the first byte of the pixel to write */
+
+ dest = pinfo->fbmem + pos->y * pinfo->stride + NXGL_SCALEX(pos->x);
+
+#if NXGLIB_BITSPERPIXEL < 8
+
+ /* Shift the color into the proper position */
+
+# ifdef CONFIG_NX_PACKEDMSFIRST
+
+#if NXGLIB_BITSPERPIXEL == 1
+ shift = (7 - (pos->x & 7)); /* Shift is 0, 1, ... 7 */
+ mask = (1 << shift); /* Mask is 0x01, 0x02, .. 0x80 */
+ color <<= shift; /* Color is positioned under the mask */
+#elif NXGLIB_BITSPERPIXEL == 2
+ shift = (6 - ((pos->x & 3) << 1)); /* Shift is 0, 2, 4, or 6 */
+ mask = (3 << shift); /* Mask is 0x03, 0x0c, 0x30, or 0xc0 */
+ color <<= shift; /* Color is positioned under the mask */
+#elif NXGLIB_BITSPERPIXEL == 4
+ shift = (4 - ((pos->x & 1) << 2)); /* Shift is 0 or 4 */
+ mask = (15 << shift); /* Mask is 0x0f or 0xf0 */
+ color <<= shift; /* Color is positioned under the mask */
+#else
+# error "Unsupport pixel depth"
+#endif
+
+# else /* CONFIG_NX_PACKEDMSFIRST */
+
+#if NXGLIB_BITSPERPIXEL == 1
+ shift = (pos->x & 7); /* Shift is 0, 1, ... 7 */
+ mask = (1 << shift); /* Mask is 0x01, 0x02, .. 0x80 */
+ color <<= shift; /* Color is positioned under the mask */
+#elif NXGLIB_BITSPERPIXEL == 2
+ shift = (pos->x & 3) << 1; /* Shift is 0, 2, 4, or 6 */
+ mask = (3 << shift); /* Mask is 0x03, 0x0c, 0x30, or 0xc0 */
+ color <<= shift; /* Color is positioned under the mask */
+#elif NXGLIB_BITSPERPIXEL == 4
+ shift = (pos->x & 1) << 2; /* Shift is 0 or 4 */
+ mask = (15 << shift); /* Mask is 0x0f or 0xf0 */
+ color <<= shift; /* Color is positioned under the mask */
+#else
+# error "Unsupport pixel depth"
+#endif
+#endif /* CONFIG_NX_PACKEDMSFIRST */
+
+ /* Handle masking of the fractional byte */
+
+ *dest = (*dest & ~mask) | (color & mask);
+#else
+
+ /* Write the pixel (proper alignment assumed) */
+
+ pixel = (FAR NXGL_PIXEL_T *)dest;
+ *pixel = color;
+#endif
+}
diff --git a/nuttx/graphics/nxglib/lcd/nxglib_copyrectangle.c b/nuttx/graphics/nxglib/lcd/nxglib_copyrectangle.c
new file mode 100644
index 000000000..988b6cb94
--- /dev/null
+++ b/nuttx/graphics/nxglib/lcd/nxglib_copyrectangle.c
@@ -0,0 +1,141 @@
+/****************************************************************************
+ * graphics/nxglib/lcd/nxsglib_copyrectangle.c
+ *
+ * Copyright (C) 2010-2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdint.h>
+#include <assert.h>
+
+#include <nuttx/lcd/lcd.h>
+#include <nuttx/nx/nxglib.h>
+
+#include "nxglib_bitblit.h"
+#include "nxglib_copyrun.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxgl_copyrectangle_*bpp
+ *
+ * Descripton:
+ * Copy a rectangular bitmap image into the specific position in the
+ * framebuffer memory.
+ *
+ ****************************************************************************/
+
+void NXGL_FUNCNAME(nxgl_copyrectangle,NXGLIB_SUFFIX)
+(FAR struct lcd_planeinfo_s *pinfo, FAR const struct nxgl_rect_s *dest,
+ FAR const void *src, FAR const struct nxgl_point_s *origin,
+ unsigned int srcstride)
+{
+ FAR const uint8_t *sline;
+ unsigned int ncols;
+ unsigned int row;
+ unsigned int xoffset;
+#if NXGLIB_BITSPERPIXEL < 8
+ unsigned int remainder;
+#endif
+
+ /* Get the dimensions of the rectange to fill: width in pixels,
+ * height in rows
+ */
+
+ ncols = dest->pt2.x - dest->pt1.x + 1;
+
+ /* Set up to copy the image */
+
+ xoffset = dest->pt1.x - origin->x;
+ sline = (const uint8_t*)src + NXGL_SCALEX(xoffset) + (dest->pt1.y - origin->y) * srcstride;
+#if NXGLIB_BITSPERPIXEL < 8
+ remainder = NXGL_REMAINDERX(xoffset);
+#endif
+
+ /* Copy the image, one row at a time */
+
+ for (row = dest->pt1.y; row <= dest->pt2.y; row++)
+ {
+#if NXGLIB_BITSPERPIXEL < 8
+ /* if the source pixel is not aligned with a byte boundary, then we will
+ * need to copy the image data to the run buffer first.
+ */
+
+ if (remainder != 0)
+ {
+ NXGL_FUNCNAME(nxgl_copyrun,NXGLIB_SUFFIX)(sline, pinfo->buffer, remainder, ncols);
+ (void)pinfo->putrun(row, dest->pt1.x, pinfo->buffer, ncols);
+ }
+ else
+#endif
+ {
+ /* The pixel data is byte aligned. Copy the image data directly from
+ * the image memory.
+ */
+
+ (void)pinfo->putrun(row, dest->pt1.x, sline, ncols);
+ }
+
+ /* Then adjust the source pointer to refer to the next line in the source
+ * image.
+ */
+
+ sline += srcstride;
+ }
+}
diff --git a/nuttx/graphics/nxglib/lcd/nxglib_fillrectangle.c b/nuttx/graphics/nxglib/lcd/nxglib_fillrectangle.c
new file mode 100644
index 000000000..c1a30d66f
--- /dev/null
+++ b/nuttx/graphics/nxglib/lcd/nxglib_fillrectangle.c
@@ -0,0 +1,111 @@
+/****************************************************************************
+ * graphics/nxglib/lcd/nxglib_fillrectangle.c
+ *
+ * Copyright (C) 2010-2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <sys/types.h>
+#include <stdint.h>
+
+#include <nuttx/lcd/lcd.h>
+#include <nuttx/nx/nxglib.h>
+
+#include "nxglib_bitblit.h"
+#include "nxglib_fillrun.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+#ifndef NXGLIB_SUFFIX
+# error "NXGLIB_SUFFIX must be defined before including this header file"
+#endif
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxgl_fillrectangle_*bpp
+ *
+ * Descripton:
+ * Fill a rectangle region in the LCD memory with a fixed color
+ *
+ ****************************************************************************/
+
+void NXGL_FUNCNAME(nxgl_fillrectangle,NXGLIB_SUFFIX)
+ (FAR struct lcd_planeinfo_s *pinfo,
+ FAR const struct nxgl_rect_s *rect,
+ NXGL_PIXEL_T color)
+{
+ unsigned int ncols;
+ unsigned int row;
+
+ /* Get the dimensions of the rectange to fill in pixels */
+
+ ncols = rect->pt2.x - rect->pt1.x + 1;
+
+ /* Fill the run buffer with the selected color */
+
+ NXGL_FUNCNAME(nxgl_fillrun,NXGLIB_SUFFIX)((NXGLIB_RUNTYPE*)pinfo->buffer, color, ncols);
+
+ /* Then fill the rectangle line-by-line */
+
+ for (row = rect->pt1.y; row <= rect->pt2.y; row++)
+ {
+ /* Draw the raster line at this row */
+
+ (void)pinfo->putrun(row, rect->pt1.x, pinfo->buffer, ncols);
+ }
+}
diff --git a/nuttx/graphics/nxglib/lcd/nxglib_filltrapezoid.c b/nuttx/graphics/nxglib/lcd/nxglib_filltrapezoid.c
new file mode 100644
index 000000000..3ba44b34a
--- /dev/null
+++ b/nuttx/graphics/nxglib/lcd/nxglib_filltrapezoid.c
@@ -0,0 +1,259 @@
+/****************************************************************************
+ * graphics/nxglib/lcd/nxglib_filltrapezoid.c
+ *
+ * Copyright (C) 2010-2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdint.h>
+#include <fixedmath.h>
+
+#include <nuttx/lcd/lcd.h>
+#include <nuttx/nx/nxglib.h>
+
+#include "nxglib_bitblit.h"
+#include "nxglib_fillrun.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+#ifndef NXGLIB_SUFFIX
+# error "NXGLIB_SUFFIX must be defined before including this header file"
+#endif
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxglib_filltrapezoid_*bpp
+ *
+ * Descripton:
+ * Fill a trapezoidal region in the LCD memory with a fixed color.
+ * Clip the trapezoid to lie within a boundng box. This is useful for
+ * drawing complex shapes that can be broken into a set of trapezoids.
+ *
+ ****************************************************************************/
+
+void NXGL_FUNCNAME(nxgl_filltrapezoid,NXGLIB_SUFFIX)
+ (FAR struct lcd_planeinfo_s *pinfo,
+ FAR const struct nxgl_trapezoid_s *trap,
+ FAR const struct nxgl_rect_s *bounds,
+ NXGL_PIXEL_T color)
+{
+ unsigned int ncols;
+ unsigned int topy;
+ unsigned int boty;
+ unsigned int row;
+ unsigned int botw;
+ b16_t topx1;
+ b16_t topx2;
+ b16_t botx1;
+ b16_t botx2;
+ b16_t dx1dy;
+ b16_t dx2dy;
+ int dy;
+ int ix1;
+ int ix2;
+
+ /* Get the top run endpoints */
+
+ topx1 = trap->top.x1;
+ topx2 = trap->top.x2;
+
+ /* Calculate the number of rows to render */
+
+ topy = trap->top.y;
+ boty = trap->bot.y;
+
+ /* Get the bottom run endpoints */
+
+ botx1 = trap->bot.x1;
+ botx2 = trap->bot.x2;
+
+ /* Calculate the slope of the left and right side of the trapezoid */
+
+ dy = boty - topy;
+ if (dy > 0)
+ {
+ dx1dy = b16divi((botx1 - topx1), dy);
+ dx2dy = b16divi((botx2 - topx2), dy);
+ }
+ else
+ {
+ /* The trapezoid is a run! Use the average width. */
+
+ topx1 = (topx1 + botx1) >> 1;
+ topx2 = (topx2 + botx2) >> 1;
+ botx1 = topx1;
+ botx2 = topx2;
+ dx1dy = 0;
+ dx2dy = 0;
+ }
+
+ /* Perform vertical clipping */
+
+ if (topy < bounds->pt1.y)
+ {
+ /* Is the entire trapezoid "above" the clipping window? */
+
+ if (boty < bounds->pt1.y)
+ {
+ /* Yes.. then do nothing */
+
+ return;
+ }
+
+ /* Calculate the x values for the new top run */
+
+ dy = bounds->pt1.y - topy;
+ topx1 += dy * dx1dy;
+ topx2 += dy * dx2dy;
+
+ /* Clip the top row to render */
+
+ topy = bounds->pt1.y;
+ }
+
+ if (boty > bounds->pt2.y)
+ {
+ /* Is the entire trapezoid "below" the clipping window? */
+
+ if (topy > bounds->pt2.y)
+ {
+ /* Yes.. then do nothing */
+
+ return;
+ }
+
+ /* Calculate the x values for the new bottom run */
+
+ dy = boty - bounds->pt2.y;
+ botx1 -= dy * dx1dy;
+ botx2 -= dy * dx2dy;
+
+ /* Clip the bottom row to render */
+
+ boty = bounds->pt2.y;
+ }
+
+ /* Handle the special case where the sides cross (as in an hourglass) */
+
+ if (botx1 > botx2)
+ {
+ b16_t tmp;
+ ngl_swap(botx1, botx2, tmp);
+ }
+
+ /* Fill the run buffer for the maximum run that we will need */
+
+ ix1 = b16toi(topx1);
+ ix1 = ngl_clipl(ix1, bounds->pt1.x);
+ ix2 = b16toi(topx2);
+ ix2 = ngl_clipr(ix2, bounds->pt2.x);
+ ncols = ix2 - ix1 + 1;
+
+ ix1 = b16toi(botx1);
+ ix1 = ngl_clipl(ix1, bounds->pt1.x);
+ ix2 = b16toi(botx2);
+ ix2 = ngl_clipr(ix2, bounds->pt2.x);
+ botw = ix2 - ix1 + 1;
+
+ if (ncols < botw)
+ {
+ ncols = botw;
+ }
+
+ NXGL_FUNCNAME(nxgl_fillrun,NXGLIB_SUFFIX)((NXGLIB_RUNTYPE*)pinfo->buffer, color, ncols);
+
+ /* Then fill the trapezoid row-by-row */
+
+ for (row = topy; row <= boty; row++)
+ {
+ /* Handle the special case where the sides cross (as in an hourglass) */
+
+ if (topx1 > topx2)
+ {
+ b16_t tmp;
+ ngl_swap(topx1, topx2, tmp);
+ ngl_swap(dx1dy, dx2dy, tmp);
+ }
+
+ /* Convert the positions to integer and get the run width, clipping to
+ * fit within the bounding box.
+ */
+
+ ix1 = b16toi(topx1);
+ ix1 = ngl_clipl(ix1, bounds->pt1.x);
+ ix2 = b16toi(topx2);
+ ix2 = ngl_clipr(ix2, bounds->pt2.x);
+
+ /* Handle some corner cases where we draw nothing. Otherwise, we will
+ * always draw at least one pixel.
+ */
+
+ if (ix1 <= ix2)
+ {
+ /* Then draw the run from ix1 to ix2 at row */
+
+ ncols = ix2 - ix1 + 1;
+ (void)pinfo->putrun(row, ix1, pinfo->buffer, ncols);
+ }
+
+ /* Add the dx/dy value to get the run positions on the next row */
+
+ topx1 += dx1dy;
+ topx2 += dx2dy;
+ }
+}
diff --git a/nuttx/graphics/nxglib/lcd/nxglib_getrectangle.c b/nuttx/graphics/nxglib/lcd/nxglib_getrectangle.c
new file mode 100644
index 000000000..9318426ba
--- /dev/null
+++ b/nuttx/graphics/nxglib/lcd/nxglib_getrectangle.c
@@ -0,0 +1,105 @@
+/****************************************************************************
+ * graphics/nxglib/lcd/nxglib_getrectangle.c
+ *
+ * Copyright (C) 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdint.h>
+
+#include <nuttx/lcd/lcd.h>
+#include <nuttx/nx/nxglib.h>
+
+#include "nxglib_bitblit.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxgl_moverectangle_*bpp
+ *
+ * Descripton:
+ * Fetch a rectangular region from LCD GRAM memory. The source is
+ * expressed as a rectangle.
+ *
+ ****************************************************************************/
+
+void NXGL_FUNCNAME(nxgl_getrectangle,NXGLIB_SUFFIX)
+(FAR struct lcd_planeinfo_s *pinfo, FAR const struct nxgl_rect_s *rect,
+ FAR void *dest, unsigned int deststride)
+{
+ FAR uint8_t *dline;
+ unsigned int ncols;
+ unsigned int srcrow;
+
+ /* Get the width of the rectange to move in pixels. */
+
+ ncols = rect->pt2.x - rect->pt1.x + 1;
+
+ /* dline = address of the first row pixel */
+
+ dline = (FAR uint8_t *)dest;
+
+ /* Copy the rectangle */
+
+ for (srcrow = rect->pt1.y; srcrow <= rect->pt2.y; srcrow++)
+ {
+ (void)pinfo->getrun(srcrow, rect->pt1.x, dline, ncols);
+ dline += deststride;
+ }
+}
diff --git a/nuttx/graphics/nxglib/lcd/nxglib_moverectangle.c b/nuttx/graphics/nxglib/lcd/nxglib_moverectangle.c
new file mode 100644
index 000000000..f82187ae3
--- /dev/null
+++ b/nuttx/graphics/nxglib/lcd/nxglib_moverectangle.c
@@ -0,0 +1,131 @@
+/****************************************************************************
+ * graphics/nxglib/lcd/nxglib_moverectangle.c
+ *
+ * Copyright (C) 2010-2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdint.h>
+
+#include <nuttx/lcd/lcd.h>
+#include <nuttx/nx/nxglib.h>
+
+#include "nxglib_bitblit.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxgl_moverectangle_*bpp
+ *
+ * Descripton:
+ * Move a rectangular region from location to another in the
+ * LCD memory. The source is expressed as a rectangle; the
+ * destination position is expressed as a point corresponding to the
+ * translation of the upper, left-hand corner.
+ *
+ ****************************************************************************/
+
+void NXGL_FUNCNAME(nxgl_moverectangle,NXGLIB_SUFFIX)
+(FAR struct lcd_planeinfo_s *pinfo, FAR const struct nxgl_rect_s *rect,
+ FAR struct nxgl_point_s *offset)
+{
+ unsigned int ncols;
+ unsigned int srcrow;
+ unsigned int destrow;
+
+ /* Get the width of the rectange to move in pixels. */
+
+ ncols = rect->pt2.x - rect->pt1.x + 1;
+
+ /* Case 1: The destination position (offset) is above the displayed
+ * position (rect)
+ */
+
+ if (offset->y < rect->pt1.y)
+ {
+ /* Copy the rectangle from top down */
+
+ for (srcrow = rect->pt1.y, destrow = offset->y;
+ srcrow <= rect->pt2.y;
+ srcrow++, destrow++)
+ {
+ (void)pinfo->getrun(srcrow, rect->pt1.x, pinfo->buffer, ncols);
+ (void)pinfo->putrun(destrow, offset->x, pinfo->buffer, ncols);
+ }
+ }
+
+ /* Case 2: The destination position (offset) is below the displayed
+ * position (rect)
+ */
+
+ else
+ {
+ unsigned int dy = rect->pt2.y - rect->pt1.y;
+
+ /* Copy the rectangle from the bottom up */
+
+ for (srcrow = rect->pt2.y, destrow = offset->y + dy;
+ srcrow >= rect->pt1.y;
+ srcrow--, destrow--)
+ {
+ (void)pinfo->getrun(srcrow, rect->pt1.x, pinfo->buffer, ncols);
+ (void)pinfo->putrun(destrow, offset->x, pinfo->buffer, ncols);
+ }
+ }
+}
diff --git a/nuttx/graphics/nxglib/lcd/nxglib_setpixel.c b/nuttx/graphics/nxglib/lcd/nxglib_setpixel.c
new file mode 100644
index 000000000..c5cff99a7
--- /dev/null
+++ b/nuttx/graphics/nxglib/lcd/nxglib_setpixel.c
@@ -0,0 +1,153 @@
+/****************************************************************************
+ * graphics/nxglib/lcd/nxglib_setpixel.c
+ *
+ * Copyright (C) 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <sys/types.h>
+#include <stdint.h>
+
+#include <nuttx/lcd/lcd.h>
+#include <nuttx/nx/nxglib.h>
+
+#include "nxglib_bitblit.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+#ifndef NXGLIB_SUFFIX
+# error "NXGLIB_SUFFIX must be defined before including this header file"
+#endif
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxgl_setpixel_*bpp
+ *
+ * Descripton:
+ * Draw a single pixel in LCD memory at the given position and with the
+ * given color. This is equivalent to nxgl_fillrectangle_*bpp() with a 1x1
+ * rectangle but is more efficient.
+ *
+ ****************************************************************************/
+
+void NXGL_FUNCNAME(nxgl_setpixel,NXGLIB_SUFFIX)
+ (FAR struct lcd_planeinfo_s *pinfo,
+ FAR const struct nxgl_point_s *pos,
+ NXGL_PIXEL_T color)
+{
+#if NXGLIB_BITSPERPIXEL < 8
+ uint8_t shift;
+ uint8_t mask;
+ uint8_t pixel;
+
+ /* Read the byte that contains the pixel to be changed */
+
+ (void)pinfo->getrun(pos->y, pos->x, &pixel, 8 / NXGLIB_BITSPERPIXEL);
+
+ /* Shift the color into the proper position */
+
+# ifdef CONFIG_NX_PACKEDMSFIRST
+
+#if NXGLIB_BITSPERPIXEL == 1
+ shift = (7 - (pos->x & 7)); /* Shift is 0, 1, ... 7 */
+ mask = (1 << shift); /* Mask is 0x01, 0x02, .. 0x80 */
+ color <<= shift; /* Color is positioned under the mask */
+#elif NXGLIB_BITSPERPIXEL == 2
+ shift = (6 - ((pos->x & 3) << 1)); /* Shift is 0, 2, 4, or 6 */
+ mask = (3 << shift); /* Mask is 0x03, 0x0c, 0x30, or 0xc0 */
+ color <<= shift; /* Color is positioned under the mask */
+#elif NXGLIB_BITSPERPIXEL == 4
+ shift = (4 - ((pos->x & 1) << 2)); /* Shift is 0 or 4 */
+ mask = (15 << shift); /* Mask is 0x0f or 0xf0 */
+ color <<= shift; /* Color is positioned under the mask */
+#else
+# error "Unsupport pixel depth"
+#endif
+
+# else /* CONFIG_NX_PACKEDMSFIRST */
+
+#if NXGLIB_BITSPERPIXEL == 1
+ shift = (pos->x & 7); /* Shift is 0, 1, ... 7 */
+ mask = (1 << shift); /* Mask is 0x01, 0x02, .. 0x80 */
+ color <<= shift; /* Color is positioned under the mask */
+#elif NXGLIB_BITSPERPIXEL == 2
+ shift = (pos->x & 3) << 1; /* Shift is 0, 2, 4, or 6 */
+ mask = (3 << shift); /* Mask is 0x03, 0x0c, 0x30, or 0xc0 */
+ color <<= shift; /* Color is positioned under the mask */
+#elif NXGLIB_BITSPERPIXEL == 4
+ shift = (pos->x & 1) << 2; /* Shift is 0 or 4 */
+ mask = (15 << shift); /* Mask is 0x0f or 0xf0 */
+ color <<= shift; /* Color is positioned under the mask */
+#else
+# error "Unsupport pixel depth"
+#endif
+#endif /* CONFIG_NX_PACKEDMSFIRST */
+
+ /* Handle masking of the fractional byte */
+
+ pixel = (pixel & ~mask) | (color & mask);
+
+ /* Write the modified byte back to graphics memory */
+
+ (void)pinfo->putrun(pos->y, pos->x, (FAR uint8_t *)&pixel, 8 / NXGLIB_BITSPERPIXEL);
+#else
+ /* Draw a single pixel at this position raster line at this row */
+
+ (void)pinfo->putrun(pos->y, pos->x, (FAR uint8_t *)&color, 1);
+#endif
+}
diff --git a/nuttx/graphics/nxglib/nxglib_bitblit.h b/nuttx/graphics/nxglib/nxglib_bitblit.h
new file mode 100644
index 000000000..a737a0647
--- /dev/null
+++ b/nuttx/graphics/nxglib/nxglib_bitblit.h
@@ -0,0 +1,208 @@
+/****************************************************************************
+ * graphics/nxglib/nxglib_bitblit.h
+ *
+ * Copyright (C) 2008-2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+#ifndef __GRAPHICS_NXGLIB_NXGLIB_BITBLIT_H
+#define __GRAPHICS_NXGLIB_NXGLIB_BITBLIT_H
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdint.h>
+
+#include <nuttx/nx/nxglib.h>
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/* Make sure the bits-per-pixel value has been set by the includer of
+ * this header file.
+ */
+
+#ifndef NXGLIB_BITSPERPIXEL
+# error "NXGLIB_BITSPERPIXEL must be defined before including this header file"
+#endif
+
+/* Set up bit blit macros for this BPP */
+
+#if NXGLIB_BITSPERPIXEL == 1
+
+# define NXGL_PIXELSHIFT 3
+# define NXGL_PIXELMASK 7
+# define NXGL_MULTIPIXEL(p) ((p) ? 0xff : 0x00)
+# define NXGL_PIXEL_T uint8_t
+
+#elif NXGLIB_BITSPERPIXEL == 2
+
+# define NXGL_PIXELSHIFT 2
+# define NXGL_PIXELMASK 3
+# define NXGL_MULTIPIXEL(p) ((uint8_t)(p) << 6 | (uint8_t)(p) << 4 | (uint8_t)(p) << 2 | (p))
+# define NXGL_PIXEL_T uint8_t
+
+#elif NXGLIB_BITSPERPIXEL == 4
+
+# define NXGL_PIXELSHIFT 1
+# define NXGL_PIXELMASK 1
+# define NXGL_MULTIPIXEL(p) ((uint8_t)(p) << 4 | (p))
+# define NXGL_PIXEL_T uint8_t
+
+#elif NXGLIB_BITSPERPIXEL == 8
+
+# define NXGL_SCALEX(x) (x)
+# define NXGL_PIXEL_T uint8_t
+
+#elif NXGLIB_BITSPERPIXEL == 16
+
+# define NXGL_SCALEX(x) ((x) << 1)
+# define NXGL_PIXEL_T uint16_t
+
+#elif NXGLIB_BITSPERPIXEL == 24
+
+# define NXGL_SCALEX(x) (((x) << 1) + (x))
+# define NXGL_PIXEL_T uint32_t
+
+#elif NXGLIB_BITSPERPIXEL == 32
+
+# define NXGL_SCALEX(x) ((x) << 2)
+# define NXGL_PIXEL_T uint32_t
+
+#endif
+
+#if NXGLIB_BITSPERPIXEL < 8
+# define NXGL_SCALEX(x) ((x) >> NXGL_PIXELSHIFT)
+# define NXGL_REMAINDERX(x) ((x) & NXGL_PIXELMASK)
+# define NXGL_ALIGNDOWN(x) ((x) & ~NXGL_PIXELMASK)
+# define NXGL_ALIGNUP(x) (((x) + NXGL_PIXELMASK) & ~NXGL_PIXELMASK)
+
+# define NXGL_MEMSET(dest,value,width) \
+ { \
+ FAR uint8_t *_ptr = (FAR uint8_t*)(dest); \
+ int _nby = NXGL_SCALEX(width); \
+ while (_nby--) \
+ { \
+ *_ptr++ = (value); \
+ } \
+ }
+# define NXGL_MEMCPY(dest,src,width) \
+ { \
+ FAR uint8_t *_dptr = (FAR uint8_t*)(dest); \
+ FAR uint8_t *_sptr = (FAR uint8_t*)(src); \
+ int _nby = NXGL_SCALEX(width); \
+ while (_nby--) \
+ { \
+ *_dptr++ = *_sptr++; \
+ } \
+ }
+
+#elif NXGLIB_BITSPERPIXEL == 24
+# define NXGL_MEMSET(dest,value,width) \
+ { \
+ FAR uint8_t *_ptr = (FAR uint8_t*)(dest); \
+ nxgl_coord_t _npix = (width); \
+ while (_npix--) \
+ { \
+ *_ptr++ = (value); \
+ *_ptr++ = (value) >> 8; \
+ *_ptr++ = (value) >> 16; \
+ } \
+ }
+# define NXGL_MEMCPY(dest,src,width) \
+ { \
+ FAR uint8_t *_dptr = (FAR uint8_t*)(dest); \
+ FAR uint8_t *_sptr = (FAR uint8_t*)(src); \
+ nxgl_coord_t _npix = (width); \
+ while (_npix--) \
+ { \
+ *_dptr++ = *_sptr++; \
+ *_dptr++ = *_sptr++; \
+ *_dptr++ = *_sptr++; \
+ } \
+ }
+#else
+# define NXGL_MEMSET(dest,value,width) \
+ { \
+ FAR NXGL_PIXEL_T *_ptr = (FAR NXGL_PIXEL_T*)(dest); \
+ nxgl_coord_t _npix = (width); \
+ while (_npix--) \
+ { \
+ *_ptr++ = (value); \
+ } \
+ }
+# define NXGL_MEMCPY(dest,src,width) \
+ { \
+ FAR NXGL_PIXEL_T *_dptr = (FAR NXGL_PIXEL_T*)(dest); \
+ FAR NXGL_PIXEL_T *_sptr = (FAR NXGL_PIXEL_T*)(src); \
+ nxgl_coord_t _npix = (width); \
+ while (_npix--) \
+ { \
+ *_dptr++ = *_sptr++; \
+ } \
+ }
+#endif
+
+/* Form a function name by concatenating two strings */
+
+#define _NXGL_FUNCNAME(a,b) a ## b
+#define NXGL_FUNCNAME(a,b) _NXGL_FUNCNAME(a,b)
+
+/****************************************************************************
+ * Public Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+#define EXTERN extern "C"
+extern "C" {
+#else
+#define EXTERN extern
+#endif
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* __GRAPHICS_NXGLIB_NXGLIB_BITBLIT_H */
diff --git a/nuttx/graphics/nxglib/nxglib_circlepts.c b/nuttx/graphics/nxglib/nxglib_circlepts.c
new file mode 100644
index 000000000..a6d59280d
--- /dev/null
+++ b/nuttx/graphics/nxglib/nxglib_circlepts.c
@@ -0,0 +1,171 @@
+/****************************************************************************
+ * graphics/nxglib/nxglib_circlepts.c
+ *
+ * Copyright (C) 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <string.h>
+#include <errno.h>
+#include <fixedmath.h>
+
+#include <nuttx/nx/nxglib.h>
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+/* Trigonometry */
+
+#define SIN_0p0 0 /* sin(0) = 0 */
+#define COS_0p0 1 /* cos(0) = 1 */
+#define SIN_22p5 25080 /* sin(22.5) = 25080 / 65536 */
+#define COS_22p5 60547 /* cos(22.5) = 60547 / 65536 */
+#define SIN_45p0 46341 /* sin(45) = 46341 / 65536 */
+#define COS_45p0 SIN_45p0 /* cos(45) = sin(45) */
+
+/* Named indices into the 16 circle points generated by nxgl_circlepts */
+
+#define POINT_0p0 0
+#define POINT_22p5 1
+#define POINT_45p0 2
+#define POINT_67p5 3
+#define POINT_90p0 4
+#define POINT_112p5 5
+#define POINT_135p0 6
+#define POINT_157p5 7
+#define POINT_180p0 8
+#define POINT_202p5 9
+#define POINT_225p0 10
+#define POINT_247p5 11
+#define POINT_270p0 12
+#define POINT_292p5 13
+#define POINT_315p0 14
+#define POINT_337p5 15
+#define NCIRCLE_POINTS 16
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxgl_circlepts
+ *
+ * Description:
+ * Given a description of a circle, return a set of 16 points on the
+ * circumference of the circle. These points may then be used by
+ * nx_drawcircle() or related APIs to draw a circle outline.
+ *
+ * Input parameters:
+ * center - A pointer to the point that is the center of the circle
+ * radius - The radius of the circle in pixels.
+ * circle - A pointer the first entry in an array of 16 points where the
+ * circle points will be returned.
+ *
+ * Returned value:
+ * None
+ *
+ ****************************************************************************/
+
+void nxgl_circlepts(FAR const struct nxgl_point_s *center, nxgl_coord_t radius,
+ FAR struct nxgl_point_s *circle)
+{
+ nxgl_coord_t xoffs;
+ nxgl_coord_t yoffs;
+
+ /* 0, 90, 180, and 270 degrees are the easiest */
+
+ circle[POINT_0p0].x = center->x + radius;
+ circle[POINT_0p0].y = center->y;
+ circle[POINT_90p0].x = center->x;
+ circle[POINT_90p0].y = center->y + radius;
+ circle[POINT_180p0].x = center->x - radius;
+ circle[POINT_180p0].y = center->y;
+ circle[POINT_270p0].x = center->x;
+ circle[POINT_270p0].y = center->y - radius;
+
+ /* Now 22.5, 67.5, 112.5, 157.5, 202.5, 247.5, 292.5, and 337.5 */
+
+ xoffs = b16toi(b16muli(COS_22p5, radius) + b16HALF);
+ yoffs = b16toi(b16muli(SIN_22p5, radius) + b16HALF);
+
+ circle[POINT_22p5].x = center->x + xoffs;
+ circle[POINT_22p5].y = center->y + yoffs;
+ circle[POINT_157p5].x = center->x - xoffs;
+ circle[POINT_157p5].y = center->y + yoffs;
+ circle[POINT_202p5].x = center->x - xoffs;
+ circle[POINT_202p5].y = center->y - yoffs;
+ circle[POINT_337p5].x = center->x + xoffs;
+ circle[POINT_337p5].y = center->y - yoffs;
+
+ circle[POINT_67p5].x = center->x + yoffs;
+ circle[POINT_67p5].y = center->y + xoffs;
+ circle[POINT_112p5].x = center->x - yoffs;
+ circle[POINT_112p5].y = center->y + xoffs;
+ circle[POINT_247p5].x = center->x - yoffs;
+ circle[POINT_247p5].y = center->y - xoffs;
+ circle[POINT_292p5].x = center->x + yoffs;
+ circle[POINT_292p5].y = center->y - xoffs;
+
+ /* Finally, 45.0, 135.0, 225.0, 315.0 */
+
+ xoffs = b16toi(b16muli(COS_45p0, radius) + b16HALF);
+
+ circle[POINT_45p0].x = center->x + xoffs;
+ circle[POINT_45p0].y = center->y + xoffs;
+ circle[POINT_135p0].x = center->x - xoffs;
+ circle[POINT_135p0].y = center->y + xoffs;
+ circle[POINT_225p0].x = center->x - xoffs;
+ circle[POINT_225p0].y = center->y - xoffs;
+ circle[POINT_315p0].x = center->x + xoffs;
+ circle[POINT_315p0].y = center->y - xoffs;
+}
diff --git a/nuttx/graphics/nxglib/nxglib_circletraps.c b/nuttx/graphics/nxglib/nxglib_circletraps.c
new file mode 100644
index 000000000..7c2cd1d7b
--- /dev/null
+++ b/nuttx/graphics/nxglib/nxglib_circletraps.c
@@ -0,0 +1,176 @@
+/****************************************************************************
+ * graphics/nxglib/nxglib_circletraps.c
+ *
+ * Copyright (C) 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <string.h>
+#include <errno.h>
+#include <fixedmath.h>
+
+#include <nuttx/nx/nxglib.h>
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+/* Trigonometry */
+
+#define SIN_0p0 0 /* sin(0) = 0 */
+#define COS_0p0 1 /* cos(0) = 1 */
+#define SIN_22p5 25080 /* sin(22.5) = 25080 / 65536 */
+#define COS_22p5 60547 /* cos(22.5) = 60547 / 65536 */
+#define SIN_45p0 46341 /* sin(45) = 46341 / 65536 */
+#define COS_45p0 SIN_45p0 /* cos(45) = sin(45) */
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxgl_circletraps
+ *
+ * Description:
+ * Given a description of a a circle, return 8 trapezoids that can be
+ * used to fill the circle by nx_fillcircle() and other interfaces.
+ *
+ * Input parameters:
+ * center - A pointer to the point that is the center of the circle
+ * radius - The radius of the circle in pixels.
+ * circle - A pointer the first entry in an array of 8 trapezoids where
+ * the circle description will be returned.
+ *
+ * Returned value:
+ * None
+ *
+ ****************************************************************************/
+
+void nxgl_circletraps(FAR const struct nxgl_point_s *center, nxgl_coord_t radius,
+ FAR struct nxgl_trapezoid_s *circle)
+{
+ nxgl_coord_t xoffs;
+ nxgl_coord_t yoffs;
+
+ circle[0].top.x1 = itob16(center->x);
+ circle[0].top.x2 = circle[0].top.x1;
+ circle[0].top.y = center->y - radius;
+
+ circle[7].bot.x1 = circle[0].top.x1;
+ circle[7].bot.x2 = circle[0].top.x1;
+ circle[7].bot.y = center->y + radius;
+
+ circle[3].bot.x1 = itob16(center->x - radius);
+ circle[3].bot.x2 = itob16(center->x + radius);
+ circle[3].bot.y = center->y;
+
+ circle[4].top.x1 = circle[3].bot.x1;
+ circle[4].top.x2 = circle[3].bot.x2;
+ circle[4].top.y = circle[3].bot.y;
+
+ /* Now 22.5, 67.5, 112.5, 157.5, 202.5, 247.5, 292.5, and 337.5 */
+
+ xoffs = b16toi(b16muli(COS_22p5, radius) + b16HALF);
+ yoffs = b16toi(b16muli(SIN_22p5, radius) + b16HALF);
+
+ circle[2].bot.x1 = itob16(center->x - xoffs);
+ circle[2].bot.x2 = itob16(center->x + xoffs);
+ circle[2].bot.y = center->y - yoffs;
+
+ circle[3].top.x1 = circle[2].bot.x1;
+ circle[3].top.x2 = circle[2].bot.x2;
+ circle[3].top.y = circle[2].bot.y;
+
+ circle[4].bot.x1 = circle[2].bot.x1;
+ circle[4].bot.x2 = circle[2].bot.x2;
+ circle[4].bot.y = center->y + yoffs;
+
+ circle[5].top.x1 = circle[4].bot.x1;
+ circle[5].top.x2 = circle[4].bot.x2;
+ circle[5].top.y = circle[4].bot.y;
+
+ circle[0].bot.x1 = itob16(center->x - yoffs);
+ circle[0].bot.x2 = itob16(center->x + yoffs);
+ circle[0].bot.y = center->y - xoffs;
+
+ circle[1].top.x1 = circle[0].bot.x1;
+ circle[1].top.x2 = circle[0].bot.x2;
+ circle[1].top.y = circle[0].bot.y;
+
+ circle[6].bot.x1 = circle[1].top.x1;
+ circle[6].bot.x2 = circle[1].top.x2;
+ circle[6].bot.y = center->y + xoffs;
+
+ circle[7].top.x1 = circle[6].bot.x1;
+ circle[7].top.x2 = circle[6].bot.x2;
+ circle[7].top.y = circle[6].bot.y;
+
+ /* Finally, 45.0, 135.0, 225.0, 315.0 */
+
+ xoffs = b16toi(b16muli(COS_45p0, radius) + b16HALF);
+
+ circle[1].bot.x1 = itob16(center->x - xoffs);
+ circle[1].bot.x2 = itob16(center->x + xoffs);
+ circle[1].bot.y = center->y - xoffs;
+
+ circle[2].top.x1 = circle[1].bot.x1;
+ circle[2].top.x2 = circle[1].bot.x2;
+ circle[2].top.y = circle[1].bot.y;
+
+ circle[5].bot.x1 = circle[1].bot.x1;
+ circle[5].bot.x2 = circle[1].bot.x2;
+ circle[5].bot.y = center->y + xoffs;
+
+ circle[6].top.x1 = circle[5].bot.x1;
+ circle[6].top.x2 = circle[5].bot.x2;
+ circle[6].top.y = circle[5].bot.y;
+}
diff --git a/nuttx/graphics/nxglib/nxglib_colorcopy.c b/nuttx/graphics/nxglib/nxglib_colorcopy.c
new file mode 100644
index 000000000..f99b99505
--- /dev/null
+++ b/nuttx/graphics/nxglib/nxglib_colorcopy.c
@@ -0,0 +1,87 @@
+/****************************************************************************
+ * graphics/nxglib/nxsglib_colorcopy.c
+ *
+ * Copyright (C) 2008-2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <nuttx/nx/nxglib.h>
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxgl_colorcopy
+ *
+ * Description:
+ * This is essentially memcpy for colors. This does very little for us
+ * other than hide all of the conditional compilation for planar colors
+ * in one place.
+ *
+ ****************************************************************************/
+
+void nxgl_colorcopy(nxgl_mxpixel_t dest[CONFIG_NX_NPLANES],
+ const nxgl_mxpixel_t src[CONFIG_NX_NPLANES])
+{
+ int i;
+
+ for (i = 0; i < CONFIG_NX_NPLANES; i++)
+ {
+ dest[i] = src[i];
+ }
+}
diff --git a/nuttx/graphics/nxglib/nxglib_copyrun.h b/nuttx/graphics/nxglib/nxglib_copyrun.h
new file mode 100644
index 000000000..b97372bf7
--- /dev/null
+++ b/nuttx/graphics/nxglib/nxglib_copyrun.h
@@ -0,0 +1,346 @@
+/****************************************************************************
+ * graphics/nxglib/nxsglib_copyrun.h
+ *
+ * Copyright (C) 2010 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+#ifndef __GRAPHICS_NXGLIB_NXGLIB_COPYRUN_H
+#define __GRAPHICS_NXGLIB_NXGLIB_COPYRUN_H
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+#include <stdint.h>
+#include <string.h>
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxgl_copyrun_*bpp
+ *
+ * Description:
+ * Copy a row from an image into run.
+ *
+ ****************************************************************************/
+
+#if NXGLIB_BITSPERPIXEL == 1
+static inline void
+nxgl_copyrun_1bpp(FAR const uint8_t *src, FAR uint8_t *dest,
+ unsigned int remainder, size_t npixels)
+{
+ uint8_t indata;
+ uint8_t outdata;
+ uint8_t nextdata;
+ unsigned int outpixels = 0;
+
+ DEBUGASSERT(remainder > 0 && remainder < 8);
+
+ /* Take only the first 8-remainder pixels from the first byte.
+ * remainder is number between 1 and 7 (not zero!) that represents
+ * the alignment of the pixel bits in the source.
+ */
+
+ indata = *src++;
+
+#ifdef CONFIG_NX_PACKEDMSFIRST
+ /* If CONFIG_NX_PACKEDMSFIRST is defined, then bits 0-(remainder-1)
+ * are carried over to the first pass through the loop. For
+ * example if remainder == 2:
+ *
+ * indata: xxAA AAAA maps to nextdata: AAAA AAxx
+ */
+
+ nextdata = (indata << remainder);
+
+#else
+ /* If CONFIG_NX_PACKEDMSFIRST is NOT defined, then bits (7-remainder)-7
+ * are carried over to the first pass through the loop. For example
+ * if remainder == 2:
+ *
+ * indata: AAAA AAxx maps to nextdata: xxAA AAAA
+ */
+
+ nextdata = (indata >> remainder);
+
+#endif
+
+ /* Loop until all pixels have been packed into the destination. Note:
+ * a outpixels increments by 8 so a few extra pixels will be packed on
+ * the output. This should not be an issue.
+ */
+
+ while (outpixels < npixels)
+ {
+ /* Get the next byte from the source */
+
+ indata = *src++;
+ outdata = nextdata;
+
+ /* remainder is number between 1 and 7 (not zero!) that represents
+ * the alignment of the pixel bits in the source.
+ */
+
+#ifdef CONFIG_NX_PACKEDMSFIRST
+ /* If CONFIG_NX_PACKEDMSFIRST is defined, then bits (7-remainder)-7
+ * are carried over from that last pass through the loop. For
+ * example if remainder == 2:
+ *
+ * nextdata = AAAA AAxx - dest = AAAA AABB
+ * src = BBCC CCCC - nextdata = CCCC CCxx
+ */
+
+ outdata |= (indata >> (8 - remainder));
+ nextdata = (indata << remainder);
+#else
+ /* If CONFIG_NX_PACKEDMSFIRST is NOT defined, then bits 0-(remainder-1)
+ * are carried over from that last pass through the loop . For
+ * example if remainder == 2:
+ *
+ * nextdata = xxAA AAAA - dest = BBAA AAAA
+ * src = CCCC CCBB - nextdata = xxCC CCCC
+ */
+
+ outdata |= (indata << (8 - remainder));
+ nextdata = (indata >> remainder);
+#endif
+
+ /* Transfer the byte to the run buffer */
+
+ *dest++ = outdata;
+ outpixels += 8;
+ }
+}
+
+#elif NXGLIB_BITSPERPIXEL == 2
+static inline void
+nxgl_copyrun_2bpp(FAR const uint8_t *src, FAR uint8_t *dest,
+ unsigned int remainder, size_t npixels)
+{
+ uint8_t indata;
+ uint8_t outdata;
+ uint8_t nextdata;
+ unsigned int outpixels = 0;
+ unsigned int shift;
+
+ DEBUGASSERT(remainder > 0 && remainder < 4);
+
+ /* Take only the first 8-(2*remainder) pixels from the first byte.
+ * remainder is number between 1 and 3 (not zero!) that represents
+ * the alignment of the pixel bits in the source.
+ */
+
+ indata = *src++;
+ shift = (remainder << 1);
+
+#ifdef CONFIG_NX_PACKEDMSFIRST
+ /* If CONFIG_NX_PACKEDMSFIRST is defined, then bits 0-(2*remainder-1)
+ * are carried over to the first pass through the loop. For
+ * example if remainder == 1:
+ *
+ * indata: xxAA AAAA maps to nextdata: AAAA AAxx
+ */
+
+ nextdata = (indata << shift);
+
+#else
+ /* If CONFIG_NX_PACKEDMSFIRST is NOT defined, then bits (7-2*remainder)-7
+ * are carried over to the first pass through the loop. For example
+ * if remainder == 1:
+ *
+ * indata: AAAA AAxx maps to nextdata: xxAA AAAA
+ */
+
+ nextdata = (indata >> shift);
+
+#endif
+
+ /* Loop until all pixels have been packed into the destination. Note:
+ * a outpixels increments by 8 so a few extra pixels will be packed on
+ * the output. This should not be an issue.
+ */
+
+ while (outpixels < npixels)
+ {
+ /* Get the next byte from the source */
+
+ indata = *src++;
+ outdata = nextdata;
+
+ /* remainder is number between 1 and 3 (not zero!) that represents
+ * the alignment of the pixel bits in the source.
+ */
+
+#ifdef CONFIG_NX_PACKEDMSFIRST
+ /* If CONFIG_NX_PACKEDMSFIRST is defined, then bits (7-2*remainder)-7
+ * are carried over from that last pass through the loop. For example
+ * if remainder == 1:
+ *
+ * nextdata = AAAA AAxx - dest = AAAA AABB
+ * src = BBCC CCCC - nextdata = CCCC CCxx
+ */
+
+ outdata |= (indata >> (8 - shift));
+ nextdata = (indata << shift);
+#else
+ /* If CONFIG_NX_PACKEDMSFIRST is NOT defined, then bits 0-(2*remainder-1)
+ * are carried over from that last pass through the loop. For example
+ * if remainder == 1:
+ *
+ * nextdata = xxAA AAAA - dest = BBAA AAAA
+ * src = CCCC CCBB - nextdata = xxCC CCCC
+ */
+
+ outdata |= (indata << (8 - shift));
+ nextdata = (indata >> shift);
+#endif
+
+ /* Transfer the byte to the run buffer */
+
+ *dest++ = outdata;
+ outpixels += 4;
+ }
+}
+
+#elif NXGLIB_BITSPERPIXEL == 4
+static inline void
+nxgl_copyrun_4bpp(FAR const uint8_t *src, FAR uint8_t *dest,
+ unsigned int remainder, size_t npixels)
+{
+ uint8_t indata;
+ uint8_t outdata;
+ uint8_t nextdata;
+ unsigned int outpixels = 0;
+
+ DEBUGASSERT(remainder == 1);
+
+ /* Take only the first 8-remainder pixels from the first byte.
+ * remainder is number between 1 and 3 (not zero!) that represents
+ * the alignment of the pixel bits in the source.
+ */
+
+ indata = *src++;
+
+#ifdef CONFIG_NX_PACKEDMSFIRST
+ /* If CONFIG_NX_PACKEDMSFIRST is defined, then bits 0-3
+ * are carried over to the first pass through the loop. For
+ * example:
+ *
+ * indata: xxxx AAAA maps to nextdata: AAAA xxxx
+ */
+
+ nextdata = (indata << 4);
+
+#else
+ /* If CONFIG_NX_PACKEDMSFIRST is NOT defined, then bits 4-7
+ * are carried over to the first pass through the loop. For example:
+ *
+ * indata: AAAA xxxx maps to nextdata: xxxx AAAA
+ */
+
+ nextdata = (indata >> 4);
+
+#endif
+
+ /* Loop until all pixels have been packed into the destination. Note:
+ * a outpixels increments by 8 so a few extra pixels will be packed on
+ * the output. This should not be an issue.
+ */
+
+ while (outpixels < npixels)
+ {
+ /* Get the next byte from the source */
+
+ indata = *src++;
+ outdata = nextdata;
+
+ /* remainder is number between 1 and 3 (not zero!) that represents
+ * the alignment of the pixel bits in the source.
+ */
+
+#ifdef CONFIG_NX_PACKEDMSFIRST
+ /* If CONFIG_NX_PACKEDMSFIRST is defined, then bits 4-7
+ * are carried over from that last pass through the loop (or are
+ * ignored initially. For example if remainder == 1:
+ *
+ * nextdata = AAAA xxxx - dest = AAAA BBBB
+ * src = BBBB CCCC - nextdata = CCCC xxxx
+ */
+
+ outdata |= (indata >> 4);
+ nextdata = (indata << 4);
+#else
+ /* If CONFIG_NX_PACKEDMSFIRST is NOT defined, then bits 0-(remainder-1)
+ * are carried over from that last pass through the loop (or are
+ * ignored initially). For example if remainder == 2:
+ *
+ * nextdata = xxAA AAAA - dest = BBAA AAAA
+ * src = CCCC CCBB - nextdata = xxCC CCCC
+ */
+
+ outdata |= (indata << 4);
+ nextdata = (indata >> 4);
+#endif
+
+ /* Transfer the byte to the run buffer */
+
+ *dest++ = outdata;
+ outpixels += 2;
+ }
+}
+#endif
+#endif /* __GRAPHICS_NXGLIB_NXGLIB_COPYRUN_H */
+
+
diff --git a/nuttx/graphics/nxglib/nxglib_fillrun.h b/nuttx/graphics/nxglib/nxglib_fillrun.h
new file mode 100644
index 000000000..b1d8a3a7f
--- /dev/null
+++ b/nuttx/graphics/nxglib/nxglib_fillrun.h
@@ -0,0 +1,196 @@
+/****************************************************************************
+ * graphics/nxglib/nxsglib_fullrun.h
+ *
+ * Copyright (C) 2010 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+#ifndef __GRAPHICS_NXGLIB_NXGLIB_FILLRUN_H
+#define __GRAPHICS_NXGLIB_NXGLIB_FILLRUN_H
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+#include <stdint.h>
+#include <string.h>
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+#if NXGLIB_BITSPERPIXEL < 16
+# define NXGLIB_RUNTYPE uint8_t
+#elif NXGLIB_BITSPERPIXEL == 16
+# define NXGLIB_RUNTYPE uint16_t
+#else
+# define NXGLIB_RUNTYPE uint32_t
+#endif
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+#if NXGLIB_BITSPERPIXEL == 2
+static uint8_t g_wide_2bpp[4] = { 0x00, 0x55, 0xaa, 0xff };
+#endif
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxgl_fillrun_*bpp
+ *
+ * Description:
+ * fill a run with the specified color.
+ *
+ ****************************************************************************/
+
+#if NXGLIB_BITSPERPIXEL == 1
+static inline void nxgl_fillrun_1bpp(FAR uint8_t *run, nxgl_mxpixel_t color,
+ size_t npixels)
+{
+ /* Get the number of bytes to fill */
+
+ unsigned int nbytes = (npixels + 7) >> 3;
+
+ /* Get the value of the byte to fill */
+
+ uint8_t wide = (color & 1) != 0 ? 0xff : 0x00;
+
+ /* Fill the run with the color (it is okay to run a fractional byte over
+ * the end)
+ */
+
+ memset(run, wide, nbytes);
+}
+
+#elif NXGLIB_BITSPERPIXEL == 2
+static inline void nxgl_fillrun_2bpp(FAR uint8_t *run, nxgl_mxpixel_t color,
+ size_t npixels)
+{
+ /* Get the number of bytes to fill */
+
+ unsigned int nbytes = (npixels + 3) >> 2;
+
+ /* Get the value of the byte to fill */
+
+ uint8_t wide = g_wide_2bpp[color & 3];
+
+ /* Fill the run with the color (it is okay to run a fractional byte over
+ * the end)
+ */
+
+ memset(run, wide, nbytes);
+}
+
+#elif NXGLIB_BITSPERPIXEL == 4
+static inline void nxgl_fillrun_4bpp(FAR uint8_t *run, nxgl_mxpixel_t color,
+ size_t npixels)
+{
+ /* Get the number of bytes to fill */
+
+ unsigned int nbytes = (npixels + 1) >> 1;
+
+ /* Get the value of the byte to fill */
+
+ uint8_t narrow = (uint8_t)color & 0x0f;
+ uint8_t wide = narrow | (narrow << 4);
+
+ /* Fill the run with the color (it is okay to run a fractional byte over
+ * the end)
+ */
+
+ memset(run, wide, nbytes);
+}
+
+#elif NXGLIB_BITSPERPIXEL == 8
+static inline void nxgl_fillrun_8bpp(FAR uint8_t *run, nxgl_mxpixel_t color,
+ size_t npixels)
+{
+ /* Fill the run with the color (it is okay to run a fractional byte overy the end */
+
+ memset(run, color, npixels);
+}
+
+#elif NXGLIB_BITSPERPIXEL == 16
+static inline void nxgl_fillrun_16bpp(FAR uint16_t *run, nxgl_mxpixel_t color,
+ size_t npixels)
+{
+ /* Fill the run with the color (it is okay to run a fractional byte overy the end */
+
+ while (npixels-- > 0)
+ {
+ *run++ = (uint16_t)color;
+ }
+}
+
+#elif NXGLIB_BITSPERPIXEL == 24
+static inline void nxgl_fillrun_24bpp(FAR uint32_t *run, nxgl_mxpixel_t color, size_t npixels)
+{
+ /* Fill the run with the color (it is okay to run a fractional byte overy the end */
+#warning "Assuming 24-bit color is not packed"
+ while (npixels-- > 0)
+ {
+ *run++ = (uint32_t)color;
+ }
+}
+
+#elif NXGLIB_BITSPERPIXEL == 32
+static inline void nxgl_fillrun_32bpp(FAR uint32_t *run, nxgl_mxpixel_t color, size_t npixels)
+{
+ /* Fill the run with the color (it is okay to run a fractional byte overy the end */
+
+ while (npixels-- > 0)
+ {
+ *run++ = (uint32_t)color;
+ }
+}
+#else
+# error "Unsupported value of NXGLIB_BITSPERPIXEL"
+#endif
+#endif /* __GRAPHICS_NXGLIB_NXGLIB_FILLRUN_H */
+
+
diff --git a/nuttx/graphics/nxglib/nxglib_intersecting.c b/nuttx/graphics/nxglib/nxglib_intersecting.c
new file mode 100644
index 000000000..c495a9e3d
--- /dev/null
+++ b/nuttx/graphics/nxglib/nxglib_intersecting.c
@@ -0,0 +1,83 @@
+/****************************************************************************
+ * graphics/nxglib/nxsglib_intersecting.c
+ *
+ * Copyright (C) 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdbool.h>
+
+#include <nuttx/nx/nxglib.h>
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxgl_intersecting
+ *
+ * Description:
+ * Return true if the rectangles intersect.
+ *
+ ****************************************************************************/
+
+bool nxgl_intersecting(FAR const struct nxgl_rect_s *rect1,
+ FAR const struct nxgl_rect_s *rect2)
+{
+ return ((rect1->pt2.x > rect2->pt1.x) && (rect1->pt2.y > rect2->pt1.y) &&
+ (rect1->pt1.x < rect2->pt2.x) && (rect1->pt1.y < rect2->pt1.y));
+}
diff --git a/nuttx/graphics/nxglib/nxglib_nonintersecting.c b/nuttx/graphics/nxglib/nxglib_nonintersecting.c
new file mode 100644
index 000000000..9cb2ec29c
--- /dev/null
+++ b/nuttx/graphics/nxglib/nxglib_nonintersecting.c
@@ -0,0 +1,151 @@
+/****************************************************************************
+ * graphics/nxglib/nxsglib_rectnonintersecting.c
+ *
+ * Copyright (C) 2008-2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <nuttx/nx/nxglib.h>
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxgl_nonintersecting
+ *
+ * Description:
+ * Return the regions of rectangle rect 1 that do not intersect with
+ * rect2. This may be up to founr rectangles some of which may be
+ * degenerate (and can be picked off with nxgl_nullrect)
+ *
+ ****************************************************************************/
+
+void nxgl_nonintersecting(FAR struct nxgl_rect_s result[4],
+ FAR const struct nxgl_rect_s *rect1,
+ FAR const struct nxgl_rect_s *rect2)
+{
+ struct nxgl_rect_s intersection;
+
+ /* Get the intersection of the two rectangles */
+
+ nxgl_rectintersect(&intersection, rect1, rect2);
+
+ /* Then return the four rectangles representing the regions NON included
+ * in the intersection. Some of these rectangles may be invalid (zero
+ * area), but those can be picked off using nxgl_nullrect()
+ *
+ * rect1.pt1
+ * +-------------------------+
+ * | rect2.pt1 |
+ * | int.pt1 |
+ * | +-------------------------+
+ * | | | |
+ * | | | |
+ * +-------------------------+ |
+ * | rect1.pt2 |
+ * | int.pt2 |
+ * +-------------------------+
+ * rect2.pt2
+ * rect1.pt1
+ * +-------------------------+
+ * rect2.pt1 |int.pt1 |
+ * +---------+---------------+ |
+ * | | | |
+ * | | | |
+ * | | |int.pt2 |
+ * | +---------------+---------+
+ * | | rect1.pt2
+ * +-------------------------+
+ * rect2.pt2
+ * rect2.pt1
+ * +-------------------------+
+ * | rect1.pt1 |
+ * | int.pt1 |
+ * | +-------------------------+
+ * | | | |
+ * | | | |
+ * | | | |
+ * +---------+---------------+ |
+ * | rect2.pt2 |
+ * | int.pt2 |
+ * +-------------------------+
+ * rect1.pt2
+ */
+
+ result[NX_TOP_NDX].pt1.x = rect1->pt1.x;
+ result[NX_TOP_NDX].pt1.y = rect1->pt1.y;
+ result[NX_TOP_NDX].pt2.x = rect1->pt2.x;
+ result[NX_TOP_NDX].pt2.y = intersection.pt1.y - 1;
+
+ result[NX_BOTTOM_NDX].pt1.x = rect1->pt1.x;
+ result[NX_BOTTOM_NDX].pt1.y = intersection.pt2.y + 1;
+ result[NX_BOTTOM_NDX].pt2.x = rect1->pt2.x;
+ result[NX_BOTTOM_NDX].pt2.y = rect1->pt2.y;
+
+ result[NX_LEFT_NDX].pt1.x = rect1->pt1.x;
+ result[NX_LEFT_NDX].pt1.y = intersection.pt1.y;
+ result[NX_LEFT_NDX].pt2.x = intersection.pt1.x - 1;
+ result[NX_LEFT_NDX].pt2.y = intersection.pt2.y;
+
+ result[NX_RIGHT_NDX].pt1.x = intersection.pt2.x + 1;
+ result[NX_RIGHT_NDX].pt1.y = intersection.pt1.y;
+ result[NX_RIGHT_NDX].pt2.x = rect1->pt2.x;
+ result[NX_RIGHT_NDX].pt2.y = intersection.pt2.y;
+}
+
+
diff --git a/nuttx/graphics/nxglib/nxglib_nullrect.c b/nuttx/graphics/nxglib/nxglib_nullrect.c
new file mode 100644
index 000000000..26fc9e8d7
--- /dev/null
+++ b/nuttx/graphics/nxglib/nxglib_nullrect.c
@@ -0,0 +1,82 @@
+/****************************************************************************
+ * graphics/nxglib/nxsglib_nullrect.c
+ *
+ * Copyright (C) 2008-2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdbool.h>
+
+#include <nuttx/nx/nxglib.h>
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxgl_nullrect
+ *
+ * Description:
+ * Return true if the area of the retangle is <= 0.
+ *
+ ****************************************************************************/
+
+bool nxgl_nullrect(FAR const struct nxgl_rect_s *rect)
+{
+ return (rect->pt1.x > rect->pt2.x || rect->pt1.y > rect->pt2.y);
+}
+
diff --git a/nuttx/graphics/nxglib/nxglib_rectadd.c b/nuttx/graphics/nxglib/nxglib_rectadd.c
new file mode 100644
index 000000000..b53e6b04c
--- /dev/null
+++ b/nuttx/graphics/nxglib/nxglib_rectadd.c
@@ -0,0 +1,84 @@
+/****************************************************************************
+ * graphics/nxglib/nxsglib_rectadd.c
+ *
+ * Copyright (C) 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <nuttx/nx/nxglib.h>
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxgl_rectadd
+ *
+ * Description:
+ * Return the rectangle that contains exactly two other rectanges.
+ *
+ ****************************************************************************/
+
+void nxgl_rectadd(FAR struct nxgl_rect_s *dest,
+ FAR const struct nxgl_rect_s *src1,
+ FAR const struct nxgl_rect_s *src2)
+{
+ dest->pt1.x = ngl_min(src1->pt1.x, src2->pt1.x);
+ dest->pt1.y = ngl_min(src1->pt1.y, src2->pt1.y);
+ dest->pt2.x = ngl_max(src1->pt2.x, src2->pt2.x);
+ dest->pt2.y = ngl_max(src1->pt2.y, src2->pt2.y);
+}
diff --git a/nuttx/graphics/nxglib/nxglib_rectcopy.c b/nuttx/graphics/nxglib/nxglib_rectcopy.c
new file mode 100644
index 000000000..998f5b716
--- /dev/null
+++ b/nuttx/graphics/nxglib/nxglib_rectcopy.c
@@ -0,0 +1,84 @@
+/****************************************************************************
+ * graphics/nxglib/nxsglib_rectcopy.c
+ *
+ * Copyright (C) 2008-2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <nuttx/nx/nxglib.h>
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxgl_rectcopy
+ *
+ * Description:
+ * This is essentially memcpy for rectangles. We don't do structure
+ * assignements because some compilers are not good at that.
+ *
+ ****************************************************************************/
+
+void nxgl_rectcopy(FAR struct nxgl_rect_s *dest,
+ FAR const struct nxgl_rect_s *src)
+{
+ dest->pt1.x = src->pt1.x;
+ dest->pt1.y = src->pt1.y;
+ dest->pt2.x = src->pt2.x;
+ dest->pt2.y = src->pt2.y;
+}
diff --git a/nuttx/graphics/nxglib/nxglib_rectinside.c b/nuttx/graphics/nxglib/nxglib_rectinside.c
new file mode 100644
index 000000000..1c1f17a2e
--- /dev/null
+++ b/nuttx/graphics/nxglib/nxglib_rectinside.c
@@ -0,0 +1,83 @@
+/****************************************************************************
+ * graphics/nxglib/nxsglib_rectinside.c
+ *
+ * Copyright (C) 2008-2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdbool.h>
+
+#include <nuttx/nx/nxglib.h>
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxgl_rectinside
+ *
+ * Description:
+ * Return true if the point pt lies within rect.
+ *
+ ****************************************************************************/
+
+bool nxgl_rectinside(FAR const struct nxgl_rect_s *rect,
+ FAR const struct nxgl_point_s *pt)
+{
+ return (pt->x >= rect->pt1.x && pt->x <= rect->pt2.x &&
+ pt->y >= rect->pt1.y && pt->y <= rect->pt2.y);
+}
diff --git a/nuttx/graphics/nxglib/nxglib_rectintersect.c b/nuttx/graphics/nxglib/nxglib_rectintersect.c
new file mode 100644
index 000000000..961635710
--- /dev/null
+++ b/nuttx/graphics/nxglib/nxglib_rectintersect.c
@@ -0,0 +1,84 @@
+/****************************************************************************
+ * graphics/nxglib/nxsglib_rectintersect.c
+ *
+ * Copyright (C) 2008-2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <nuttx/nx/nxglib.h>
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxgl_rectintersect
+ *
+ * Description:
+ * Return the rectangle representing the intersection of the two rectangles.
+ *
+ ****************************************************************************/
+
+void nxgl_rectintersect(FAR struct nxgl_rect_s *dest,
+ FAR const struct nxgl_rect_s *src1,
+ FAR const struct nxgl_rect_s *src2)
+{
+ dest->pt1.x = ngl_max(src1->pt1.x, src2->pt1.x);
+ dest->pt1.y = ngl_max(src1->pt1.y, src2->pt1.y);
+ dest->pt2.x = ngl_min(src1->pt2.x, src2->pt2.x);
+ dest->pt2.y = ngl_min(src1->pt2.y, src2->pt2.y);
+}
diff --git a/nuttx/graphics/nxglib/nxglib_rectoffset.c b/nuttx/graphics/nxglib/nxglib_rectoffset.c
new file mode 100644
index 000000000..93481b0de
--- /dev/null
+++ b/nuttx/graphics/nxglib/nxglib_rectoffset.c
@@ -0,0 +1,87 @@
+/****************************************************************************
+ * graphics/nxglib/nxsglib_rectoffset.c
+ *
+ * Copyright (C) 2008-2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <nuttx/nx/nxglib.h>
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxgl_rectoffset
+ *
+ * Description:
+ * Offset the rectangle position by the specified dx, dy values.
+ *
+ ****************************************************************************/
+
+void nxgl_rectoffset(FAR struct nxgl_rect_s *dest,
+ FAR const struct nxgl_rect_s *src,
+ nxgl_coord_t dx, nxgl_coord_t dy)
+{
+ dest->pt1.x = src->pt1.x + dx;
+ dest->pt1.y = src->pt1.y + dy;
+ dest->pt2.x = src->pt2.x + dx;
+ dest->pt2.y = src->pt2.y + dy;
+}
+
+
+
diff --git a/nuttx/graphics/nxglib/nxglib_rectoverlap.c b/nuttx/graphics/nxglib/nxglib_rectoverlap.c
new file mode 100644
index 000000000..75d7a4641
--- /dev/null
+++ b/nuttx/graphics/nxglib/nxglib_rectoverlap.c
@@ -0,0 +1,90 @@
+/****************************************************************************
+ * graphics/nxglib/nxsglib_nulloverlap.c
+ *
+ * Copyright (C) 2008-2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdbool.h>
+
+#include <nuttx/nx/nxglib.h>
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxgl_rectoverlap
+ *
+ * Description:
+ * Return true if the two rectangles overlap
+ *
+ ****************************************************************************/
+
+bool nxgl_rectoverlap(FAR struct nxgl_rect_s *rect1,
+ FAR struct nxgl_rect_s *rect2)
+{
+ /* The neither is wholly above, below, right, or left of the other, then
+ * the two rectangles overlap in some fashion.
+ */
+
+ return (rect1->pt1.x <= rect2->pt2.x) && /* false: rect1 is wholly to the right */
+ (rect2->pt1.x <= rect1->pt2.x) && /* false: rect2 is wholly to the right */
+ (rect1->pt1.y <= rect2->pt2.y) && /* false: rect1 is wholly below rect2 */
+ (rect2->pt1.y <= rect1->pt2.y); /* false: rect2 is wholly below rect1 */
+}
+
diff --git a/nuttx/graphics/nxglib/nxglib_rectsize.c b/nuttx/graphics/nxglib/nxglib_rectsize.c
new file mode 100644
index 000000000..17a6c9214
--- /dev/null
+++ b/nuttx/graphics/nxglib/nxglib_rectsize.c
@@ -0,0 +1,81 @@
+/****************************************************************************
+ * graphics/nxglib/nxglib_rectsize.c
+ *
+ * Copyright (C) 2008-2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <nuttx/nx/nxglib.h>
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxgl_rectsize
+ *
+ * Description:
+ * Return the size of the specified rectangle.
+ *
+ ****************************************************************************/
+
+void nxgl_rectsize(FAR struct nxgl_size_s *size,
+ FAR const struct nxgl_rect_s *rect)
+{
+ size->w = rect->pt2.x - rect->pt1.x + 1;
+ size->h = rect->pt2.y - rect->pt1.y + 1;
+}
diff --git a/nuttx/graphics/nxglib/nxglib_rectunion.c b/nuttx/graphics/nxglib/nxglib_rectunion.c
new file mode 100644
index 000000000..8500c919c
--- /dev/null
+++ b/nuttx/graphics/nxglib/nxglib_rectunion.c
@@ -0,0 +1,85 @@
+/****************************************************************************
+ * graphics/nxglib/nxsglib_rectunion.c
+ *
+ * Copyright (C) 2008-2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <nuttx/nx/nxglib.h>
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxgl_rectunion
+ *
+ * Description:
+ * Given two rectanges, src1 and src2, return the larger rectangle that
+ * contains both, dest.
+ *
+ ****************************************************************************/
+
+void nxgl_rectunion(FAR struct nxgl_rect_s *dest,
+ FAR const struct nxgl_rect_s *src1,
+ FAR const struct nxgl_rect_s *src2)
+{
+ dest->pt1.x = ngl_min(src1->pt1.x, src2->pt1.x);
+ dest->pt1.y = ngl_min(src1->pt1.y, src2->pt1.y);
+ dest->pt2.x = ngl_max(src1->pt2.x, src2->pt2.x);
+ dest->pt2.y = ngl_max(src1->pt2.y, src2->pt2.y);
+}
diff --git a/nuttx/graphics/nxglib/nxglib_rgb2yuv.c b/nuttx/graphics/nxglib/nxglib_rgb2yuv.c
new file mode 100644
index 000000000..c439c4fe0
--- /dev/null
+++ b/nuttx/graphics/nxglib/nxglib_rgb2yuv.c
@@ -0,0 +1,103 @@
+/****************************************************************************
+ * graphics/color/nxglib_rgb2yuv.c
+ *
+ * Copyright (C) 2008, 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdint.h>
+#include <debug.h>
+#include <fixedmath.h>
+
+#include <nuttx/nx/nxglib.h>
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+#define b16_P0813 0x000014d0 /* 0.0813 */
+#define b16_P1140 0x00001d2f /* 0.1140 */
+#define b16_P1687 0x00002b30 /* 0.1687 */
+#define b16_P2990 0x00004c8b /* 0.2990 */
+#define b16_P3313 0x000054d0 /* 0.3313 */
+#define b16_P4187 0x00006b30 /* 0.4187 */
+#define b16_P5000 0x00008000 /* 0.5000 */
+#define b16_P5870 0x00009646 /* 0.5870 */
+#define b16_128P0 0x00800000 /* 128.0 */
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Function Prototypes
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxgl_rgb2yuv
+ *
+ * Description:
+ * Convert 8-bit RGB triplet to 8-bit YUV triplet
+ *
+ ****************************************************************************/
+
+void nxgl_rgb2yuv(uint8_t r, uint8_t g, uint8_t b,
+ uint8_t *y, uint8_t *u, uint8_t *v)
+{
+ /* Per the JFIF specification:
+ *
+ * Y = (0.2990 * R) + (0.5870 * G) + (0.1140 * B)
+ * U = 128 - (0.1687 * R) - (0.3313 * G) + (0.5000 * B)
+ * V = 128 + (0.5000 * R) - (0.4187 * G) - (0.0813 * B);
+ */
+
+ *y = (uint8_t)b16toi(b16muli(b16_P2990, r) + b16muli(b16_P5870, g) + b16muli(b16_P1140, b));
+ *u = (uint8_t)b16toi(b16_128P0 - b16muli(b16_P1687, r) - b16muli(b16_P3313, g) + b16muli(b16_P5000, b));
+ *v = (uint8_t)b16toi(b16_128P0 + b16muli(b16_P5000, r) - b16muli(b16_P4187, g) - b16muli(b16_P0813, b));
+}
diff --git a/nuttx/graphics/nxglib/nxglib_runcopy.c b/nuttx/graphics/nxglib/nxglib_runcopy.c
new file mode 100644
index 000000000..4b5372f14
--- /dev/null
+++ b/nuttx/graphics/nxglib/nxglib_runcopy.c
@@ -0,0 +1,82 @@
+/****************************************************************************
+ * graphics/nxglib/nxsglib_runcopy.c
+ *
+ * Copyright (C) 2008-2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <nuttx/nx/nxglib.h>
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxgl_runcopy
+ *
+ * Description:
+ * This is essentially memcpy for runs. We don't do structure assignments
+ * because some compilers are not good at that.
+ *
+ ****************************************************************************/
+
+void nxgl_runcopy(FAR struct nxgl_run_s *dest, FAR const struct nxgl_run_s *src)
+{
+ dest->x1 = src->x1;
+ dest->x2 = src->x2;
+ dest->y = src->y;
+}
diff --git a/nuttx/graphics/nxglib/nxglib_runoffset.c b/nuttx/graphics/nxglib/nxglib_runoffset.c
new file mode 100644
index 000000000..f66d73674
--- /dev/null
+++ b/nuttx/graphics/nxglib/nxglib_runoffset.c
@@ -0,0 +1,85 @@
+/****************************************************************************
+ * graphics/nxglib/nxsglib_runoffset.c
+ *
+ * Copyright (C) 2008-2009, 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <fixedmath.h>
+#include <nuttx/nx/nxglib.h>
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxgl_runoffset
+ *
+ * Description:
+ * Offset the run position by the specified (integer) dx, dy values.
+ *
+ ****************************************************************************/
+
+void nxgl_runoffset(FAR struct nxgl_run_s *dest,
+ FAR const struct nxgl_run_s *src,
+ nxgl_coord_t dx, nxgl_coord_t dy)
+{
+ b16_t b16dx = itob16(dx);
+ dest->x1 = src->x1 + b16dx;
+ dest->x2 = src->x2 + b16dx;
+ dest->y = src->y + dy;
+}
diff --git a/nuttx/graphics/nxglib/nxglib_splitline.c b/nuttx/graphics/nxglib/nxglib_splitline.c
new file mode 100644
index 000000000..eff516db3
--- /dev/null
+++ b/nuttx/graphics/nxglib/nxglib_splitline.c
@@ -0,0 +1,337 @@
+/****************************************************************************
+ * graphics/nxglib/nxglib_splitline.c
+ *
+ * Copyright (C) 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <string.h>
+#include <errno.h>
+
+#include <nuttx/nx/nxglib.h>
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+#define SMALL_SIN 1966 /* 1966/65536 = 0.03 */
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxgl_splitline
+ *
+ * Description:
+ * In the general case, a line with width can be represented as a
+ * parallelogram with a triangle at the top and bottom. Triangles and
+ * parallelograms are both degenerate versions of a trapeziod. This
+ * function breaks a wide line into triangles and trapezoids. This
+ * function also detects other degenerate cases:
+ *
+ * 1. If y1 == y2 then the line is horizontal and is better represented
+ * as a rectangle.
+ * 2. If x1 == x2 then the line is vertical and also better represented
+ * as a rectangle.
+ * 3. If the width of the line is 1, then there are no triangles at the
+ * top and bottome (this may also be the case if the width is narrow
+ * and the line is near vertical).
+ * 4. If the line is oriented is certain angles, it may consist only of
+ * the upper and lower triangles with no trapezoid in between. In
+ * this case, 3 trapezoids will be returned, but traps[1] will be
+ * degenerate.
+ *
+ * Input parameters:
+ * vector - A pointer to the vector described the line to be drawn.
+ * traps - A pointer to a array of trapezoids (size 3).
+ * rect - A pointer to a rectangle.
+ *
+ * Returned value:
+ * 0: Line successfully broken up into three trapezoids. Values in
+ * traps[0], traps[1], and traps[2] are valid.
+ * 1: Line successfully represented by one trapezoid. Value in traps[1]
+ * is valid.
+ * 2: Line successfully represented by one rectangle. Value in rect is
+ * valid
+ * <0: On errors, a negated errno value is returned.
+ *
+ ****************************************************************************/
+
+int nxgl_splitline(FAR struct nxgl_vector_s *vector,
+ FAR struct nxgl_trapezoid_s *traps,
+ FAR struct nxgl_rect_s *rect,
+ nxgl_coord_t linewidth)
+{
+ struct nxgl_vector_s line;
+ nxgl_coord_t iheight;
+ nxgl_coord_t iwidth;
+ nxgl_coord_t iy;
+ nxgl_coord_t triheight;
+ nxgl_coord_t halfheight;
+ b16_t adjwidth;
+ b16_t xoffset;
+ b16_t halfoffset;
+ b16_t angle;
+ b16_t sinangle;
+ b16_t b16x;
+
+ /* First, check the linewidth */
+
+ if (linewidth < 1)
+ {
+ return -EINVAL;
+ }
+
+ /* Then make sure that the start position of the line is above the end
+ * position of the line... in raster order.
+ */
+
+ if (vector->pt1.y < vector->pt2.y)
+ {
+ /* Vector is already in raster order */
+
+ memcpy(&line, vector, sizeof(struct nxgl_vector_s));
+ }
+ else if (vector->pt1.y > vector->pt2.y)
+ {
+ /* Swap the top and bottom */
+
+ line.pt1.x = vector->pt2.x;
+ line.pt1.y = vector->pt2.y;
+ line.pt2.x = vector->pt1.x;
+ line.pt2.y = vector->pt1.y;
+ }
+ else
+ {
+ /* First degenerate case: The line is horizontal. */
+
+ if (vector->pt1.x < vector->pt2.x)
+ {
+ rect->pt1.x = vector->pt1.x;
+ rect->pt2.x = vector->pt2.x;
+ }
+ else
+ {
+ rect->pt1.x = vector->pt2.x;
+ rect->pt2.x = vector->pt1.x;
+ }
+
+ /* The height of the rectangle is the width of the line, half above
+ * and half below.
+ */
+
+ rect->pt1.y = vector->pt1.y - (linewidth >> 1);
+ rect->pt2.y = rect->pt1.y + linewidth - 1;
+ return 2;
+ }
+
+ /* Check if the line is vertical */
+
+ if (line.pt1.x == line.pt2.x)
+ {
+ /* Second degenerate case: The line is vertical. */
+
+ rect->pt1.y = line.pt1.y;
+ rect->pt2.y = line.pt2.y;
+
+ rect->pt1.x = line.pt1.x - (linewidth >> 1);
+ rect->pt2.x = rect->pt1.x + linewidth - 1;
+ return 2;
+ }
+
+ /* The final degenerate case */
+
+ if (linewidth == 1)
+ {
+ /* A line of width 1 is basically a single parallelogram of width 1 */
+
+ traps[1].top.x1 = itob16(line.pt1.x);
+ traps[1].top.x2 = traps[1].top.x1;
+ traps[1].top.y = line.pt1.y;
+
+ traps[1].bot.x1 = itob16(line.pt2.x);
+ traps[1].bot.x2 = traps[1].bot.x1;
+ traps[1].bot.y = line.pt2.y;
+ return 1;
+ }
+
+ /* Okay, then what remains is interesting.
+ *
+ * iheight = |y2 - y1|
+ * iwidth = |x2 - x1|
+ */
+
+ iheight = line.pt2.y - line.pt1.y + 1;
+ if (line.pt1.x < line.pt2.x)
+ {
+ iwidth = line.pt2.x - line.pt1.x + 1;
+ }
+ else
+ {
+ iwidth = line.pt1.x - line.pt2.x + 1;
+ }
+
+ /* Triangle height: linewidth * cosA
+ * Adjusted width: triheight / sinA
+ * X offset : linewidth * linewidth / adjusted line width
+ */
+
+ angle = b16atan2(itob16(iheight), itob16(iwidth));
+ triheight = b16toi(linewidth * b16cos(angle) + b16HALF);
+ halfheight = (triheight >> 1);
+
+ /* If the sine of the angle is tiny (i.e., the line is nearly horizontal),
+ * then we cannot compute the adjusted width. In this case, just use
+ * the width of the line bounding box.
+ */
+
+ sinangle = b16sin(angle);
+ if (sinangle < SMALL_SIN)
+ {
+ adjwidth = itob16(iwidth);
+ xoffset = 0;
+ }
+ else
+ {
+ adjwidth = b16divb16(itob16(linewidth), sinangle);
+ xoffset = itob16(linewidth * linewidth);
+ xoffset = b16divb16(xoffset, adjwidth);
+ }
+
+ halfoffset = (xoffset >> 1);
+
+ /* Return the top triangle (if there is one). NOTE that the horizontal
+ * (z) positions are represented with 16 bits of fraction. The vertical
+ * (y) positions, on the other hand, are integer.
+ */
+
+ if (triheight > 0)
+ {
+ if (line.pt1.x < line.pt2.x)
+ {
+ /* Line is going "south east" */
+
+ b16x = itob16(line.pt1.x) - halfoffset;
+ iy = line.pt1.y + halfheight;
+
+ traps[0].top.x1 = b16x + xoffset;
+ traps[0].top.x2 = traps[0].top.x1;
+ traps[0].top.y = iy - triheight + 1;
+ traps[0].bot.x1 = b16x;
+ traps[0].bot.x2 = b16x + adjwidth - b16ONE;
+ traps[0].bot.y = iy;
+
+ b16x = itob16(line.pt2.x) + halfoffset;
+ iy = line.pt2.y - halfheight;
+
+ traps[2].top.x1 = b16x - adjwidth + b16ONE;
+ traps[2].top.x2 = b16x;
+ traps[2].top.y = iy;
+ traps[2].bot.x1 = b16x - xoffset;
+ traps[2].bot.x2 = traps[2].bot.x1;
+ traps[2].bot.y = iy + triheight - 1;
+ }
+ else
+ {
+ /* Line is going "south west" */
+
+ b16x = itob16(line.pt1.x) + halfoffset;
+ iy = line.pt1.y + halfheight;
+
+ traps[0].top.x1 = b16x - xoffset;
+ traps[0].top.x2 = traps[0].top.x1;
+ traps[0].top.y = iy - triheight + 1;
+ traps[0].bot.x1 = b16x - adjwidth + b16ONE;
+ traps[0].bot.x2 = b16x;
+ traps[0].bot.y = iy;
+
+ b16x = itob16(line.pt2.x) - halfoffset;
+ iy = line.pt2.y - halfheight;
+
+ traps[2].top.x1 = b16x;
+ traps[2].top.x2 = b16x + adjwidth - b16ONE;
+ traps[2].top.y = iy;
+ traps[2].bot.x1 = b16x + xoffset;
+ traps[2].bot.x2 = traps[2].bot.x1;
+ traps[2].bot.y = iy + triheight - 1;
+ }
+
+ /* The center parallelogram is the horizontal edge of each triangle.
+ * Note the minor inefficency: that horizontal edges are drawn twice.
+ */
+
+ traps[1].top.x1 = traps[0].bot.x1;
+ traps[1].top.x2 = traps[0].bot.x2;
+ traps[1].top.y = traps[0].bot.y;
+
+ traps[1].bot.x1 = traps[2].top.x1;
+ traps[1].bot.x2 = traps[2].top.x2;
+ traps[1].bot.y = traps[2].top.y;
+
+ return 0;
+ }
+
+ /* The line is too vertical to have any significant triangular top or
+ * bottom. Just return the center parallelogram.
+ */
+
+ traps[1].top.x1 = itob16(line.pt1.x) - halfoffset;
+ traps[1].top.x2 = traps[1].top.x1 + adjwidth - 1;
+ traps[1].top.y = line.pt1.y;
+
+ traps[1].bot.x1 = itob16(line.pt2.x) - halfoffset;
+ traps[1].bot.x2 = traps[1].bot.x1 + adjwidth - 1;
+ traps[1].bot.y = line.pt2.y;
+ return 1;
+}
diff --git a/nuttx/graphics/nxglib/nxglib_trapcopy.c b/nuttx/graphics/nxglib/nxglib_trapcopy.c
new file mode 100644
index 000000000..63bc0ecd8
--- /dev/null
+++ b/nuttx/graphics/nxglib/nxglib_trapcopy.c
@@ -0,0 +1,82 @@
+/****************************************************************************
+ * graphics/nxglib/nxsglib_trapcopy.c
+ *
+ * Copyright (C) 2008-2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <nuttx/nx/nxglib.h>
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxgl_trapcopy
+ *
+ * Description:
+ * This is essentially memcpy for trapezoids. We don't do structure
+ * assignments because some compilers are not good at that.
+ *
+ ****************************************************************************/
+
+void nxgl_trapcopy(FAR struct nxgl_trapezoid_s *dest,
+ FAR const struct nxgl_trapezoid_s *src)
+{
+ nxgl_runcopy(&dest->top, &src->top);
+ nxgl_runcopy(&dest->bot, &src->bot);
+}
diff --git a/nuttx/graphics/nxglib/nxglib_trapoffset.c b/nuttx/graphics/nxglib/nxglib_trapoffset.c
new file mode 100644
index 000000000..872a31072
--- /dev/null
+++ b/nuttx/graphics/nxglib/nxglib_trapoffset.c
@@ -0,0 +1,82 @@
+/****************************************************************************
+ * graphics/nxglib/nxsglib_trapoffset.c
+ *
+ * Copyright (C) 2008-2009, 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <nuttx/nx/nxglib.h>
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxgl_trapoffset
+ *
+ * Description:
+ * Offset the trapezoid position by the specified dx, dy values.
+ *
+ ****************************************************************************/
+
+void nxgl_trapoffset(FAR struct nxgl_trapezoid_s *dest,
+ FAR const struct nxgl_trapezoid_s *src,
+ nxgl_coord_t dx, nxgl_coord_t dy)
+{
+ nxgl_runoffset(&dest->top, &src->top, dx, dy);
+ nxgl_runoffset(&dest->bot, &src->bot, dx, dy);
+}
diff --git a/nuttx/graphics/nxglib/nxglib_vectoradd.c b/nuttx/graphics/nxglib/nxglib_vectoradd.c
new file mode 100644
index 000000000..b206effa6
--- /dev/null
+++ b/nuttx/graphics/nxglib/nxglib_vectoradd.c
@@ -0,0 +1,84 @@
+/****************************************************************************
+ * graphics/nxglib/nxsglib_vectoradd.c
+ *
+ * Copyright (C) 2008-2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <nuttx/nx/nxglib.h>
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxgl_vectoradd
+ *
+ * Description:
+ * Add two 2x1 vectors and save the result to a third.
+ *
+ ****************************************************************************/
+
+void nxgl_vectoradd(FAR struct nxgl_point_s *dest,
+ FAR const struct nxgl_point_s *v1,
+ FAR const struct nxgl_point_s *v2)
+{
+ dest->x = v1->x + v2->x;
+ dest->y = v1->y + v2->y;
+}
+
+
diff --git a/nuttx/graphics/nxglib/nxglib_vectsubtract.c b/nuttx/graphics/nxglib/nxglib_vectsubtract.c
new file mode 100644
index 000000000..81ffc86fb
--- /dev/null
+++ b/nuttx/graphics/nxglib/nxglib_vectsubtract.c
@@ -0,0 +1,84 @@
+/****************************************************************************
+ * graphics/nxglib/nxsglib_vectorsubtract.c
+ *
+ * Copyright (C) 2008-2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <nuttx/nx/nxglib.h>
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxgl_vectsubtract
+ *
+ * Description:
+ * Add subtract vector v2 from vector v1 and return the result in vector dest
+ *
+ ****************************************************************************/
+
+void nxgl_vectsubtract(FAR struct nxgl_point_s *dest,
+ FAR const struct nxgl_point_s *v1,
+ FAR const struct nxgl_point_s *v2)
+{
+ dest->x = v1->x - v2->x;
+ dest->y = v1->y - v2->y;
+}
+
+
diff --git a/nuttx/graphics/nxglib/nxglib_yuv2rgb.c b/nuttx/graphics/nxglib/nxglib_yuv2rgb.c
new file mode 100644
index 000000000..9a3cb1f22
--- /dev/null
+++ b/nuttx/graphics/nxglib/nxglib_yuv2rgb.c
@@ -0,0 +1,102 @@
+/****************************************************************************
+ * graphics/color/nxglib_yuv2rgb.c
+ *
+ * Copyright (C) 2008-2009, 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdint.h>
+#include <debug.h>
+#include <fixedmath.h>
+
+#include <nuttx/nx/nxglib.h>
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+#define b16_P3441 0x0000581a /* 0.344147 */
+#define b16_P7141 0x0000b6d2 /* 0.714142 */
+#define b16_1P402 0x000166ea /* 1.402008 */
+#define b16_1P772 0x0001c5a2 /* 1.722003 */
+#define b16_128P0 0x00800000 /* 128.000000 */
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Function Prototypes
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxgl_yuv2rgb
+ *
+ * Description:
+ * Convert 8-bit RGB triplet to 8-bit YUV triplet
+ *
+ ****************************************************************************/
+
+void nxgl_yuv2rgb(uint8_t y, uint8_t u, uint8_t v,
+ uint8_t *r, uint8_t *g, uint8_t *b)
+{
+ b16_t vm128 = itob16(v) - b16_128P0;
+ b16_t um128 = itob16(u) - b16_128P0;
+
+ /* Per the JFIF specification:
+ *
+ * R = Y + 1.40200 * (V - 128.0)
+ * G = Y - 0.34414 * (U - 128.0) - 0.71414 * (V - 128.0)
+ * B = Y + 1.77200 * (U - 128.0)
+ */
+
+ *r = (uint8_t)b16toi(itob16(y) + b16muli(b16_1P402, vm128));
+ *g = (uint8_t)b16toi(itob16(y) - b16muli(b16_P3441, um128) - b16muli(b16_P7141, vm128));
+ *b = (uint8_t)b16toi(itob16(y) + b16muli(b16_1P772, um128));
+}
diff --git a/nuttx/graphics/nxmu/Make.defs b/nuttx/graphics/nxmu/Make.defs
new file mode 100644
index 000000000..23bf8995b
--- /dev/null
+++ b/nuttx/graphics/nxmu/Make.defs
@@ -0,0 +1,48 @@
+############################################################################
+# graphics/nxmu/Make.defs
+#
+# Copyright (C) 2008, 2011-2012 Gregory Nutt. All rights reserved.
+# Author: Gregory Nutt <gnutt@nuttx.org>
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in
+# the documentation and/or other materials provided with the
+# distribution.
+# 3. Neither the name NuttX nor the names of its contributors may be
+# used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+############################################################################
+
+NX_ASRCS =
+NXAPI_CSRCS = nx_bitmap.c nx_closewindow.c nx_connect.c nx_disconnect.c \
+ nx_eventhandler.c nx_eventnotify.c nx_fill.c nx_filltrapezoid.c \
+ nx_getposition.c nx_getrectangle.c nx_kbdchin.c nx_kbdin.c nx_lower.c \
+ nx_mousein.c nx_move.c nx_openwindow.c nx_raise.c \
+ nx_releasebkgd.c nx_requestbkgd.c nx_setpixel.c nx_setsize.c \
+ nx_setbgcolor.c nx_setposition.c nx_drawcircle.c nx_drawline.c \
+ nx_fillcircle.c nx_block.c
+NXMU_CSRCS = nxmu_constructwindow.c nxmu_kbdin.c nxmu_mouse.c \
+ nxmu_openwindow.c nxmu_redrawreq.c nxmu_releasebkgd.c \
+ nxmu_requestbkgd.c nxmu_reportposition.c nxmu_sendclient.c \
+ nxmu_sendserver.c nxmu_sendwindow.c nxmu_semtake.c nxmu_server.c
+NX_CSRCS = $(NXAPI_CSRCS) $(NXMU_CSRCS)
diff --git a/nuttx/graphics/nxmu/nx_bitmap.c b/nuttx/graphics/nxmu/nx_bitmap.c
new file mode 100644
index 000000000..a86eda96a
--- /dev/null
+++ b/nuttx/graphics/nxmu/nx_bitmap.c
@@ -0,0 +1,130 @@
+/****************************************************************************
+ * graphics/nxmu/nx_bitmap.c
+ *
+ * Copyright (C) 2008-2009, 2011-2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+
+#include "nxbe.h"
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nx_bitmap
+ *
+ * Description:
+ * Copy a rectangular region of a larger image into the rectangle in the
+ * specified window.
+ *
+ * Input Parameters:
+ * hwnd - The window that will receive the bitmap image
+ * dest - Describes the rectangular region on the display that will receive the
+ * the bit map.
+ * src - The start of the source image.
+ * origin - The origin of the upper, left-most corner of the full bitmap.
+ * Both dest and origin are in window coordinates, however, origin
+ * may lie outside of the display.
+ * stride - The width of the full source image in pixels.
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nx_bitmap(NXWINDOW hwnd, FAR const struct nxgl_rect_s *dest,
+ FAR const void *src[CONFIG_NX_NPLANES],
+ FAR const struct nxgl_point_s *origin, unsigned int stride)
+{
+ FAR struct nxbe_window_s *wnd = (FAR struct nxbe_window_s *)hwnd;
+ struct nxsvrmsg_bitmap_s outmsg;
+ int i;
+
+#ifdef CONFIG_DEBUG
+ if (!wnd || !dest || !src || !origin)
+ {
+ errno = EINVAL;
+ return ERROR;
+ }
+#endif
+
+ /* Format the bitmap command */
+
+ outmsg.msgid = NX_SVRMSG_BITMAP;
+ outmsg.wnd = wnd;
+ outmsg.stride = stride;
+
+ for (i = 0; i < CONFIG_NX_NPLANES; i++)
+ {
+ outmsg.src[i] = src[i];
+ }
+
+ outmsg.origin.x = origin->x;
+ outmsg.origin.y = origin->y;
+ nxgl_rectcopy(&outmsg.dest, dest);
+
+ /* Forward the fill command to the server */
+
+ return nxmu_sendwindow(wnd, &outmsg, sizeof(struct nxsvrmsg_bitmap_s));
+}
diff --git a/nuttx/graphics/nxmu/nx_block.c b/nuttx/graphics/nxmu/nx_block.c
new file mode 100644
index 000000000..2f069f096
--- /dev/null
+++ b/nuttx/graphics/nxmu/nx_block.c
@@ -0,0 +1,148 @@
+/****************************************************************************
+ * graphics/nxmu/nx_block.c
+ *
+ * Copyright (C) 2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+
+#include "nxbe.h"
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nx_block
+ *
+ * Description:
+ * This is callback will do to things: (1) any queue a 'blocked' callback
+ * to the window and then (2) block any further window messaging.
+ *
+ * The 'blocked' callback is the response from nx_block (or nxtk_block).
+ * Those blocking interfaces are used to assure that no further messages are
+ * are directed to the window. Receipt of the blocked callback signifies
+ * that (1) there are no further pending callbacks and (2) that the
+ * window is now 'defunct' and will receive no further callbacks.
+ *
+ * This callback supports coordinated destruction of a window in multi-
+ * user mode. In multi-use mode, the client window logic must stay
+ * intact until all of the queued callbacks are processed. Then the
+ * window may be safely closed. Closing the window prior with pending
+ * callbacks can lead to bad behavior when the callback is executed.
+ *
+ * Multiple user mode only!
+ *
+ * Input Parameters:
+ * wnd - The window to be blocked
+ * arg - An argument that will accompany the block messages (This is arg2
+ * in the blocked callback).
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nx_block(NXWINDOW hwnd, FAR void *arg)
+{
+ FAR struct nxbe_window_s *wnd = (FAR struct nxbe_window_s *)hwnd;
+ struct nxsvrmsg_blocked_s outmsg;
+ int ret = OK;
+
+#ifdef CONFIG_DEBUG
+ if (!hwnd)
+ {
+ errno = EINVAL;
+ return NULL;
+ }
+#endif
+
+ /* Ignore additional attempts to block messages (no errors reported) */
+
+ if (!NXBE_ISBLOCKED(wnd))
+ {
+ /* Mark the window as blocked. This will stop all messages to the window
+ * (EXCEPT the NX_SVRMSG_BLOCKED). Blocking the messages before sending the
+ * blocked message is awkward but assures that no other messages sneak into
+ * the message queue before we can set the blocked state.
+ */
+
+ NXBE_SETBLOCKED(wnd);
+
+ /* Send the message inicating that the window is blocked (and because of
+ * queue also that there are no additional queue messages for the window)
+ */
+
+ outmsg.msgid = NX_SVRMSG_BLOCKED;
+ outmsg.wnd = wnd;
+ outmsg.arg = arg;
+
+ /* Send the window message via nxmu_sendserver (vs. nxmu_sendwindow) so
+ * that it will not be blocked.
+ */
+
+ ret = nxmu_sendserver(wnd->conn, &outmsg, sizeof(struct nxbe_window_s));
+ }
+
+ return ret;
+}
+
diff --git a/nuttx/graphics/nxmu/nx_closewindow.c b/nuttx/graphics/nxmu/nx_closewindow.c
new file mode 100644
index 000000000..f9722fcd2
--- /dev/null
+++ b/nuttx/graphics/nxmu/nx_closewindow.c
@@ -0,0 +1,100 @@
+/****************************************************************************
+ * graphics/nxmu/nx_closewindow.c
+ *
+ * Copyright (C) 2008-2009, 2011-2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdlib.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+
+/****************************************************************************
+ * Name: nx_closewindow
+ *
+ * Description:
+ * Destroy a window created by nx_openwindow.
+ *
+ * Input Parameters:
+ * wnd - The window to be destroyed
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nx_closewindow(NXWINDOW hwnd)
+{
+ FAR struct nxbe_window_s *wnd = (FAR struct nxbe_window_s *)hwnd;
+ struct nxsvrmsg_closewindow_s outmsg;
+
+ /* Request destruction of the window by the server */
+
+ outmsg.msgid = NX_SVRMSG_CLOSEWINDOW;
+ outmsg.wnd = wnd;
+
+ return nxmu_sendserver(wnd->conn, &outmsg, sizeof(struct nxsvrmsg_closewindow_s));
+}
+
diff --git a/nuttx/graphics/nxmu/nx_connect.c b/nuttx/graphics/nxmu/nx_connect.c
new file mode 100644
index 000000000..4d91b54d5
--- /dev/null
+++ b/nuttx/graphics/nxmu/nx_connect.c
@@ -0,0 +1,220 @@
+/****************************************************************************
+ * graphics/nxmu/nx_connect.c
+ *
+ * Copyright (C) 2008-2009, 2011-2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <mqueue.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/* Each client is assigned a unique ID using the g_nxcid counter. That
+ * counter increments as each new counter is created and is* protected for
+ * thread safefy with g_nxlibsem. Note that these are the only global values
+ * in the NX implementation. This is because the client ID must be unique
+ * even across all server instances.
+ *
+ * NOTE: that client ID 0 is reserved for the server(s) themselves
+ */
+
+static sem_t g_nxlibsem = { 1 };
+static uint32_t g_nxcid = 1;
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nx_connectinstance
+ *
+ * Description:
+ * Open a connection from a client to the NX server. One one client
+ * connection is normally needed per thread as each connection can host
+ * multiple windows.
+ *
+ * NOTES:
+ * - This function returns before the connection is fully instantiated.
+ * it is necessary to wait for the connection event before using the
+ * returned handle.
+ * - Multiple instances of the NX server may run at the same time,
+ * each with different message queue names.
+ *
+ * Input Parameters:
+ * svrmqname - The name for the server incoming message queue
+ *
+ * Return:
+ * Success: A non-NULL handle used with subsequent NX accesses
+ * Failure: NULL is returned and errno is set appropriately
+ *
+ ****************************************************************************/
+
+NXHANDLE nx_connectinstance(FAR const char *svrmqname)
+{
+ FAR struct nxfe_conn_s *conn;
+ struct nxsvrmsg_s outmsg;
+ char climqname[NX_CLIENT_MXNAMELEN];
+ struct mq_attr attr;
+ int ret;
+
+ /* Sanity checking */
+
+#ifdef CONFIG_DEBUG
+ if (!svrmqname)
+ {
+ errno = EINVAL;
+ return NULL;
+ }
+#endif
+
+ /* Allocate the NX client structure */
+
+ conn = (FAR struct nxfe_conn_s *)zalloc(sizeof(struct nxfe_conn_s));
+ if (!conn)
+ {
+ errno = ENOMEM;
+ goto errout;
+ }
+
+ /* Create the client MQ name */
+
+ nxmu_semtake(&g_nxlibsem);
+ conn->cid = g_nxcid++;
+ nxmu_semgive(&g_nxlibsem);
+
+ sprintf(climqname, NX_CLIENT_MQNAMEFMT, conn->cid);
+
+ /* Open the client MQ for reading */
+
+ attr.mq_maxmsg = CONFIG_NX_MXCLIENTMSGS;
+ attr.mq_msgsize = NX_MXCLIMSGLEN;
+ attr.mq_flags = 0;
+
+#ifdef CONFIG_NX_BLOCKING
+ conn->crdmq = mq_open(climqname, O_RDONLY|O_CREAT, 0666, &attr);
+#else
+ conn->crdmq = mq_open(climqname, O_RDONLY|O_CREAT|O_NONBLOCK, 0666, &attr);
+#endif
+ if (conn->crdmq == (mqd_t)-1)
+ {
+ gdbg("mq_open(%s) failed: %d\n", climqname, errno);
+ goto errout_with_conn;
+ }
+
+ /* Open the server MQ for writing */
+
+ attr.mq_maxmsg = CONFIG_NX_MXSERVERMSGS;
+ attr.mq_msgsize = NX_MXSVRMSGLEN;
+ attr.mq_flags = 0;
+
+ conn->cwrmq = mq_open(svrmqname, O_WRONLY|O_CREAT, 0666, &attr);
+ if (conn->cwrmq == (mqd_t)-1)
+ {
+ gdbg("mq_open(%s) failed: %d\n", svrmqname, errno);
+ goto errout_with_rmq;
+ }
+
+ /* Inform the server that this client exists */
+
+ outmsg.msgid = NX_SVRMSG_CONNECT;
+ outmsg.conn = conn;
+
+ ret = nxmu_sendserver(conn, &outmsg, sizeof(struct nxsvrmsg_s));
+ if (ret < 0)
+ {
+ gdbg("nxmu_sendserver failed: %d\n", errno);
+ goto errout_with_wmq;
+ }
+
+#if 0
+ /* Now read until we get a response to this message. The server will
+ * respond with either (1) NX_CLIMSG_CONNECTED, in which case the state
+ * will change to NX_CLISTATE_CONNECTED, or (2) NX_CLIMSG_DISCONNECTED
+ * in which case, nx_message will fail with errno = EHOSTDOWN.
+ */
+
+ do
+ {
+ ret = nx_eventhandler((NXHANDLE)conn);
+ if (ret < 0)
+ {
+ gdbg("nx_message failed: %d\n", errno);
+ goto errout_with_wmq;
+ }
+ usleep(300000);
+ }
+ while (conn->state != NX_CLISTATE_CONNECTED);
+#endif
+ return (NXHANDLE)conn;
+
+errout_with_wmq:
+ mq_close(conn->cwrmq);
+errout_with_rmq:
+ mq_close(conn->crdmq);
+errout_with_conn:
+ free(conn);
+errout:
+ return NULL;
+}
+
diff --git a/nuttx/graphics/nxmu/nx_disconnect.c b/nuttx/graphics/nxmu/nx_disconnect.c
new file mode 100644
index 000000000..48e1e9cc0
--- /dev/null
+++ b/nuttx/graphics/nxmu/nx_disconnect.c
@@ -0,0 +1,108 @@
+/****************************************************************************
+ * graphics/nxmu/nx_disconnect.c
+ *
+ * Copyright (C) 2008-2009, 2011-2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <mqueue.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nx_disconnect
+ *
+ * Description:
+ * Disconnect a client from the NX server and/or free resources reserved
+ * by nx_connect/nx_connectinstance.
+ *
+ * Input Parameters:
+ * handle - the handle returned by nx_connect
+ *
+ * Return:
+ * OK on success; ERROR on failure with the errno set appropriately.
+ * NOTE that handle will no long be valid upon return.
+ *
+ ****************************************************************************/
+
+void nx_disconnect(NXHANDLE handle)
+{
+ FAR struct nxfe_conn_s *conn = (FAR struct nxfe_conn_s *)handle;
+ struct nxsvrmsg_s outmsg;
+ int ret;
+
+ /* Inform the server that this client no longer exists */
+
+ outmsg.msgid = NX_SVRMSG_DISCONNECT;
+ outmsg.conn = conn;
+
+ /* We will finish the teardown upon receipt of the DISCONNECTED message */
+
+ ret = nxmu_sendserver(conn, &outmsg, sizeof(struct nxsvrmsg_s));
+ if (ret < 0)
+ {
+ gdbg("ERROR: nxmu_sendserver() returned %d\n", ret);
+ }
+}
+
diff --git a/nuttx/graphics/nxmu/nx_drawcircle.c b/nuttx/graphics/nxmu/nx_drawcircle.c
new file mode 100644
index 000000000..5a0780e1a
--- /dev/null
+++ b/nuttx/graphics/nxmu/nx_drawcircle.c
@@ -0,0 +1,145 @@
+/****************************************************************************
+ * graphics/nxmu/nx_drawcircle.c
+ *
+ * Copyright (C) 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <sys/types.h>
+#include <debug.h>
+#include <errno.h>
+
+#include <nuttx/nx/nxglib.h>
+#include <nuttx/nx/nx.h>
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+/* Named indices into the 16 circle points generated by nxgl_circlepts */
+
+#define POINT_0p0 0
+#define POINT_22p5 1
+#define POINT_45p0 2
+#define POINT_67p5 3
+#define POINT_90p0 4
+#define POINT_112p5 5
+#define POINT_135p0 6
+#define POINT_157p5 7
+#define POINT_180p0 8
+#define POINT_202p5 9
+#define POINT_225p0 10
+#define POINT_247p5 11
+#define POINT_270p0 12
+#define POINT_292p5 13
+#define POINT_315p0 14
+#define POINT_337p5 15
+#define NCIRCLE_POINTS 16
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nx_drawcircle
+ *
+ * Description:
+ * Draw a circular outline using the specified line thickness and color.
+ *
+ * Input Parameters:
+ * hwnd - The window handle
+ * center - A pointer to the point that is the center of the circle
+ * radius - The radius of the circle in pixels.
+ * width - The width of the line
+ * color - The color to use to fill the line
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nx_drawcircle(NXWINDOW hwnd, FAR const struct nxgl_point_s *center,
+ nxgl_coord_t radius, nxgl_coord_t width,
+ nxgl_mxpixel_t color[CONFIG_NX_NPLANES])
+{
+ struct nxgl_point_s pts[NCIRCLE_POINTS];
+ FAR struct nxgl_vector_s vector;
+ int i;
+ int ret;
+
+ /* Convert the circle to a set of 16 points */
+
+ nxgl_circlepts(center, radius, pts);
+
+ /* Draw each pair of points as a vector */
+
+ for (i = POINT_0p0; i < POINT_337p5; i++)
+ {
+ vector.pt1.x = pts[i].x;
+ vector.pt1.y = pts[i].y;
+ vector.pt2.x = pts[i+1].x;
+ vector.pt2.y = pts[i+1].y;
+ ret = nx_drawline(hwnd, &vector, width, color);
+ if (ret != OK)
+ {
+ return ret;
+ }
+ }
+
+ /* The final, closing vector is a special case */
+
+ vector.pt1.x = pts[POINT_337p5].x;
+ vector.pt1.y = pts[POINT_337p5].y;
+ vector.pt2.x = pts[POINT_0p0].x;
+ vector.pt2.y = pts[POINT_0p0].y;
+ return nx_drawline(hwnd, &vector, width, color);
+}
diff --git a/nuttx/graphics/nxmu/nx_drawline.c b/nuttx/graphics/nxmu/nx_drawline.c
new file mode 100644
index 000000000..0267d8058
--- /dev/null
+++ b/nuttx/graphics/nxmu/nx_drawline.c
@@ -0,0 +1,136 @@
+/****************************************************************************
+ * graphics/nxmu/nx_drawline.c
+ *
+ * Copyright (C) 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <sys/types.h>
+#include <debug.h>
+#include <errno.h>
+
+#include <nuttx/nx/nxglib.h>
+#include <nuttx/nx/nx.h>
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nx_drawline
+ *
+ * Description:
+ * Fill the specified line in the window with the specified color. This
+ * is simply a wrapper that uses nxgl_splitline() to break the line into
+ * trapezoids and then calls nx_filltrapezoid() to render the line.
+ *
+ * Input Parameters:
+ * hwnd - The window handle
+ * vector - Describes the line to be drawn
+ * width - The width of the line
+ * color - The color to use to fill the line
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nx_drawline(NXWINDOW hwnd, FAR struct nxgl_vector_s *vector,
+ nxgl_coord_t width, nxgl_mxpixel_t color[CONFIG_NX_NPLANES])
+{
+ struct nxgl_trapezoid_s trap[3];
+ struct nxgl_rect_s rect;
+ int ret;
+
+#ifdef CONFIG_DEBUG
+ if (!hwnd || !vector || width < 1 || !color)
+ {
+ set_errno(EINVAL);
+ return ERROR;
+ }
+#endif
+
+ ret = nxgl_splitline(vector, trap, &rect, width);
+ switch (ret)
+ {
+ case 0:
+ ret = nx_filltrapezoid(hwnd, NULL, &trap[0], color);
+ if (ret == OK)
+ {
+ ret = nx_filltrapezoid(hwnd, NULL, &trap[1], color);
+ if (ret == OK)
+ {
+ ret = nx_filltrapezoid(hwnd, NULL, &trap[2], color);
+ }
+ }
+ break;
+
+ case 1:
+ ret = nx_filltrapezoid(hwnd, NULL, &trap[1], color);
+ break;
+
+ case 2:
+ ret = nx_fill(hwnd, &rect, color);
+ break;
+
+ default:
+ set_errno(-ret);
+ return ERROR;
+ }
+
+ return ret;
+}
diff --git a/nuttx/graphics/nxmu/nx_eventhandler.c b/nuttx/graphics/nxmu/nx_eventhandler.c
new file mode 100644
index 000000000..944bb12d1
--- /dev/null
+++ b/nuttx/graphics/nxmu/nx_eventhandler.c
@@ -0,0 +1,260 @@
+/****************************************************************************
+ * graphics/nxmu/nx_eventhandler.c
+ *
+ * Copyright (C) 2008-2009, 2011-2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdint.h>
+#include <stdlib.h>
+#include <mqueue.h>
+#include <assert.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nx_connected
+ *
+ * Description:
+ * The server has completed the connection and is ready.
+ *
+ ****************************************************************************/
+
+static inline void nx_connected(FAR struct nxfe_conn_s *conn)
+{
+ DEBUGASSERT(conn->state == NX_CLISTATE_NOTCONNECTED);
+ conn->state = NX_CLISTATE_CONNECTED;
+}
+
+/****************************************************************************
+ * Name: nx_disconnected
+ ****************************************************************************/
+
+static inline void nx_disconnected(FAR struct nxfe_conn_s *conn)
+{
+ /* Close the server and client MQs */
+
+ (void)mq_close(conn->cwrmq);
+ (void)mq_close(conn->crdmq);
+
+ /* And free the client structure */
+
+ free(conn);
+}
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nx_eventhandler
+ *
+ * Description:
+ * The client code must call this function periodically to process
+ * incoming messages from the server. If CONFIG_NX_BLOCKING is defined,
+ * then this function not return until a server message is received.
+ *
+ * When CONFIG_NX_BLOCKING is not defined, the client must exercise
+ * caution in the looping to assure that it does not eat up all of
+ * the CPU bandwidth calling nx_eventhandler repeatedly. nx_eventnotify
+ * may be called to get a signal event whenever a new incoming server
+ * event is avaiable.
+ *
+ * Input Parameters:
+ * handle - the handle returned by nx_connect
+ *
+ * Return:
+ * OK: No errors occurred. If CONFIG_NX_BLOCKING is defined, then
+ * one or more server message was processed.
+ * ERROR: An error occurred and errno has been set appropriately. Of
+ * particular interest, it will return errno == EHOSTDOWN when the
+ * server is disconnected. After that event, the handle can no
+ * longer be used.
+ *
+ ****************************************************************************/
+
+int nx_eventhandler(NXHANDLE handle)
+{
+ FAR struct nxfe_conn_s *conn = (FAR struct nxfe_conn_s *)handle;
+ struct nxsvrmsg_s *msg;
+ struct nxbe_window_s *wnd;
+ uint8_t buffer[NX_MXCLIMSGLEN];
+ int nbytes;
+
+ /* Get the next message from our incoming message queue */
+
+ do
+ {
+ nbytes = mq_receive(conn->crdmq, buffer, NX_MXCLIMSGLEN, 0);
+ if (nbytes < 0)
+ {
+ /* EINTR is not an error. The wait was interrupted by a signal and
+ * we just need to try reading again.
+ */
+
+ if (errno != EINTR)
+ {
+ if (errno == EAGAIN)
+ {
+ /* EAGAIN is not an error. It occurs because the MQ is opened with
+ * O_NONBLOCK and there is no message available now.
+ */
+
+ return OK;
+ }
+ else
+ {
+ gdbg("mq_receive failed: %d\n", errno);
+ return ERROR;
+ }
+ }
+ }
+ }
+ while (nbytes < 0);
+
+ DEBUGASSERT(nbytes >= sizeof(struct nxclimsg_s));
+
+ /* Dispatch the message appropriately */
+
+ msg = (struct nxsvrmsg_s *)buffer;
+ gvdbg("Received msgid=%d\n", msg->msgid);
+ switch (msg->msgid)
+ {
+ case NX_CLIMSG_CONNECTED:
+ nx_connected(conn);
+ break;
+
+ case NX_CLIMSG_DISCONNECTED:
+ nx_disconnected(conn);
+ errno = EHOSTDOWN;
+ return ERROR;
+
+ case NX_CLIMSG_REDRAW:
+ {
+ FAR struct nxclimsg_redraw_s *redraw = (FAR struct nxclimsg_redraw_s *)buffer;
+ wnd = redraw->wnd;
+ DEBUGASSERT(wnd);
+ if (wnd->cb->redraw)
+ {
+ wnd->cb->redraw((NXWINDOW)wnd, &redraw->rect, redraw->more, wnd->arg);
+ }
+ }
+ break;
+
+ case NX_CLIMSG_NEWPOSITION:
+ {
+ FAR struct nxclimsg_newposition_s *postn = (FAR struct nxclimsg_newposition_s *)buffer;
+ wnd = postn->wnd;
+ DEBUGASSERT(wnd);
+ if (wnd->cb->position)
+ {
+ wnd->cb->position((NXWINDOW)wnd, &postn->size, &postn->pos, &postn->bounds, wnd->arg);
+ }
+ }
+ break;
+
+#ifdef CONFIG_NX_MOUSE
+ case NX_CLIMSG_MOUSEIN:
+ {
+ FAR struct nxclimsg_mousein_s *mouse = (FAR struct nxclimsg_mousein_s *)buffer;
+ wnd = mouse->wnd;
+ DEBUGASSERT(wnd);
+ if (wnd->cb->mousein)
+ {
+ wnd->cb->mousein((NXWINDOW)wnd, &mouse->pos, mouse->buttons, wnd->arg);
+ }
+ }
+ break;
+#endif
+
+#ifdef CONFIG_NX_KBD
+ case NX_CLIMSG_KBDIN:
+ {
+ FAR struct nxclimsg_kbdin_s *kbd = (FAR struct nxclimsg_kbdin_s *)buffer;
+ wnd = kbd->wnd;
+ DEBUGASSERT(wnd);
+ if (wnd->cb->kbdin)
+ {
+ wnd->cb->kbdin((NXWINDOW)wnd, kbd->nch, kbd->ch, wnd->arg);
+ }
+ }
+ break;
+#endif
+
+ case NX_CLIMSG_BLOCKED:
+ {
+ FAR struct nxclimsg_blocked_s *blocked = (FAR struct nxclimsg_blocked_s *)buffer;
+ wnd = blocked->wnd;
+ DEBUGASSERT(wnd);
+ if (wnd->cb->blocked)
+ {
+ wnd->cb->blocked((NXWINDOW)wnd, wnd->arg, blocked->arg);
+ }
+ }
+ break;
+
+ default:
+ gdbg("Unrecognized message opcode: %d\n", ((FAR struct nxsvrmsg_s *)buffer)->msgid);
+ break;
+ }
+
+ return OK;
+}
+
diff --git a/nuttx/graphics/nxmu/nx_eventnotify.c b/nuttx/graphics/nxmu/nx_eventnotify.c
new file mode 100644
index 000000000..189241361
--- /dev/null
+++ b/nuttx/graphics/nxmu/nx_eventnotify.c
@@ -0,0 +1,111 @@
+/****************************************************************************
+ * graphics/nxmu/nx_eventnotify.c
+ *
+ * Copyright (C) 2008-2009, 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdlib.h>
+#include <mqueue.h>
+#include <assert.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include "nxfe.h"
+
+#ifndef CONFIG_DISABLE_SIGNALS
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nx_eventnotify
+ *
+ * Description:
+ * Rather than calling nx_eventhandler periodically, the client may
+ * register to receive a signal when a server event is available. The
+ * client can then call nv_eventhandler() only when incoming events are
+ * available.
+ *
+ * Only one such event is issued. Upon receipt of the signal, if the client
+ * wishes further notifications, it must call nx_eventnotify again.
+ *
+ * Input Parameters:
+ * handle - the handle returned by nx_connect
+ *
+ * Return:
+ * OK: No errors occurred. If CONFIG_NX_BLOCKING is defined, then
+ * one or more server message was processed.
+ * ERROR: An error occurred and errno has been set appropriately
+ *
+ ****************************************************************************/
+
+int nx_eventnotify(NXHANDLE handle, int signo)
+{
+ FAR struct nxfe_conn_s *conn = (FAR struct nxfe_conn_s *)handle;
+ struct sigevent se;
+
+ se.sigev_notify = SIGEV_SIGNAL;
+ se.sigev_signo = signo;
+ se.sigev_value.sival_ptr = (FAR void *)handle;
+
+ return mq_notify(conn->crdmq, &se);
+}
+
+#endif /* CONFIG_DISABLE_SIGNALS */
diff --git a/nuttx/graphics/nxmu/nx_fill.c b/nuttx/graphics/nxmu/nx_fill.c
new file mode 100644
index 000000000..969acdace
--- /dev/null
+++ b/nuttx/graphics/nxmu/nx_fill.c
@@ -0,0 +1,116 @@
+/****************************************************************************
+ * graphics/nxmu/nx_fill.c
+ *
+ * Copyright (C) 2008-2009, 2011-2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <mqueue.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nxglib.h>
+#include <nuttx/nx/nx.h>
+
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nx_fill
+ *
+ * Description:
+ * Fill the specified rectangle in the window with the specified color
+ *
+ * Input Parameters:
+ * hwnd - The window handle
+ * rect - The location to be filled
+ * color - The color to use in the fill
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nx_fill(NXWINDOW hwnd, FAR const struct nxgl_rect_s *rect,
+ nxgl_mxpixel_t color[CONFIG_NX_NPLANES])
+{
+ FAR struct nxbe_window_s *wnd = (FAR struct nxbe_window_s *)hwnd;
+ struct nxsvrmsg_fill_s outmsg;
+
+#ifdef CONFIG_DEBUG
+ if (!wnd || !rect || !color)
+ {
+ errno = EINVAL;
+ return ERROR;
+ }
+#endif
+
+ /* Format the fill command */
+
+ outmsg.msgid = NX_SVRMSG_FILL;
+ outmsg.wnd = wnd;
+
+ nxgl_rectcopy(&outmsg.rect, rect);
+ nxgl_colorcopy(outmsg.color, color);
+
+ /* Forward the fill command to the server */
+
+ return nxmu_sendwindow(wnd, &outmsg, sizeof(struct nxsvrmsg_fill_s));
+}
diff --git a/nuttx/graphics/nxmu/nx_fillcircle.c b/nuttx/graphics/nxmu/nx_fillcircle.c
new file mode 100644
index 000000000..bfc1dc9e3
--- /dev/null
+++ b/nuttx/graphics/nxmu/nx_fillcircle.c
@@ -0,0 +1,114 @@
+/****************************************************************************
+ * graphics/nxsu/nx_fillcircle.c
+ *
+ * Copyright (C) 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <sys/types.h>
+#include <debug.h>
+#include <errno.h>
+
+#include <nuttx/nx/nxglib.h>
+#include <nuttx/nx/nx.h>
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+#define NCIRCLE_TRAPS 8
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nx_fillcircle
+ *
+ * Description:
+ * Fill a circular region using the specified color.
+ *
+ * Input Parameters:
+ * hwnd - The window handle
+ * center - A pointer to the point that is the center of the circle
+ * radius - The radius of the circle in pixels.
+ * color - The color to use to fill the circle.
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nx_fillcircle(NXWINDOW hwnd, FAR const struct nxgl_point_s *center,
+ nxgl_coord_t radius, nxgl_mxpixel_t color[CONFIG_NX_NPLANES])
+{
+ FAR struct nxgl_trapezoid_s traps[NCIRCLE_TRAPS];
+ int i;
+ int ret;
+
+ /* Describe the circular region as a sequence of 8 trapezoids */
+
+ nxgl_circletraps(center, radius, traps);
+
+ /* Then rend those trapezoids */
+
+ for (i = 0; i < NCIRCLE_TRAPS; i++)
+ {
+ ret = nx_filltrapezoid(hwnd, NULL, &traps[i], color);
+ if (ret != OK)
+ {
+ return ret;
+ }
+ }
+ return OK;
+}
diff --git a/nuttx/graphics/nxmu/nx_filltrapezoid.c b/nuttx/graphics/nxmu/nx_filltrapezoid.c
new file mode 100644
index 000000000..bf289179e
--- /dev/null
+++ b/nuttx/graphics/nxmu/nx_filltrapezoid.c
@@ -0,0 +1,142 @@
+/****************************************************************************
+ * graphics/nxmu/nx_filltrapezoid.c
+ *
+ * Copyright (C) 2008-2009, 2011-2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <string.h>
+#include <mqueue.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nx_filltrapezoid
+ *
+ * Description:
+ * Fill the specified trapezoidal region in the window with the specified color
+ *
+ * Input Parameters:
+ * hwnd - The window handle
+ * clip - Clipping region (may be null)
+ * trap - The trapezoidal region to be filled
+ * color - The color to use in the fill
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nx_filltrapezoid(NXWINDOW hwnd, FAR const struct nxgl_rect_s *clip,
+ FAR const struct nxgl_trapezoid_s *trap,
+ nxgl_mxpixel_t color[CONFIG_NX_NPLANES])
+{
+ FAR struct nxbe_window_s *wnd = (FAR struct nxbe_window_s *)hwnd;
+ struct nxsvrmsg_filltrapezoid_s outmsg;
+ int i;
+
+ /* Some debug-only sanity checks */
+
+#ifdef CONFIG_DEBUG
+ if (!wnd || !trap || !color)
+ {
+ errno = EINVAL;
+ return ERROR;
+ }
+#endif
+
+ /* Format the fill command */
+
+ outmsg.msgid = NX_SVRMSG_FILLTRAP;
+ outmsg.wnd = wnd;
+
+ /* If no clipping window was provided, then use the size of the entire window */
+
+ if (clip)
+ {
+ nxgl_rectcopy(&outmsg.clip, clip);
+ }
+ else
+ {
+ nxgl_rectcopy(&outmsg.clip, &wnd->bounds);
+ }
+
+ /* Copy the trapezod and the color into the message */
+
+ nxgl_trapcopy(&outmsg.trap, trap);
+
+#if CONFIG_NX_NPLANES > 1
+ for (i = 0; i < CONFIG_NX_NPLANES; i++)
+#else
+ i = 0;
+#endif
+ {
+ outmsg.color[i] = color[i];
+ }
+
+ /* Forward the trapezoid fill command to the server */
+
+ return nxmu_sendwindow(wnd, &outmsg, sizeof(struct nxsvrmsg_filltrapezoid_s));
+}
diff --git a/nuttx/graphics/nxmu/nx_getposition.c b/nuttx/graphics/nxmu/nx_getposition.c
new file mode 100644
index 000000000..06ad2c6aa
--- /dev/null
+++ b/nuttx/graphics/nxmu/nx_getposition.c
@@ -0,0 +1,114 @@
+/****************************************************************************
+ * graphics/nxmu/nx_getposition.c
+ *
+ * Copyright (C) 2008-2009, 2011-2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nx_getposition
+ *
+ * Description:
+ * Request the position and size information for the selected window. The
+ * values will be return asynchronously through the client callback function
+ * pointer.
+ *
+ * Input Parameters:
+ * hwnd - The window handle
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nx_getposition(NXWINDOW hwnd)
+{
+ FAR struct nxbe_window_s *wnd = (FAR struct nxbe_window_s *)hwnd;
+ struct nxsvrmsg_getposition_s outmsg;
+
+#ifdef CONFIG_DEBUG
+ if (!wnd)
+ {
+ errno = EINVAL;
+ return ERROR;
+ }
+#endif
+
+ /* Request the size/position info.
+ *
+ * It is tempting to just take the positional information from the window
+ * structure that we have in our hands now. However, we need to run this through
+ * the server to keep things serialized. There might, for example, be a pending
+ * size/position change and, in that case, this function would return the
+ * wrong info.
+ */
+
+ outmsg.msgid = NX_SVRMSG_GETPOSITION;
+ outmsg.wnd = wnd;
+
+ return nxmu_sendwindow(wnd, &outmsg, sizeof(struct nxsvrmsg_getposition_s));
+}
diff --git a/nuttx/graphics/nxmu/nx_getrectangle.c b/nuttx/graphics/nxmu/nx_getrectangle.c
new file mode 100644
index 000000000..f32065129
--- /dev/null
+++ b/nuttx/graphics/nxmu/nx_getrectangle.c
@@ -0,0 +1,124 @@
+/****************************************************************************
+ * graphics/nxmu/nx_getrectangle.c
+ *
+ * Copyright (C) 2011-2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <mqueue.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nx_getrectangle
+ *
+ * Description:
+ * Get the raw contents of graphic memory within a rectangular region. NOTE:
+ * Since raw graphic memory is returned, the returned memory content may be
+ * the memory of windows above this one and may not necessarily belong to
+ * this window unless you assure that this is the top window.
+ *
+ * Input Parameters:
+ * wnd - The window structure reference
+ * rect - The location to be copied
+ * plane - Specifies the color plane to get from.
+ * dest - The location to copy the memory region
+ * deststride - The width, in bytes, the the dest memory
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nx_getrectangle(NXWINDOW hwnd, FAR const struct nxgl_rect_s *rect,
+ unsigned int plane, FAR uint8_t *dest,
+ unsigned int deststride)
+{
+ FAR struct nxbe_window_s *wnd = (FAR struct nxbe_window_s *)hwnd;
+ struct nxsvrmsg_getrectangle_s outmsg;
+
+#ifdef CONFIG_DEBUG
+ if (!hwnd || !rect || !dest)
+ {
+ gvdbg("Invalid parameters\n");
+ set_errno(EINVAL);
+ return ERROR;
+ }
+#endif
+
+ /* Format the fill command */
+
+ outmsg.msgid = NX_SVRMSG_GETRECTANGLE;
+ outmsg.wnd = wnd;
+ outmsg.plane = plane;
+ outmsg.dest = dest;
+ outmsg.deststride = deststride;
+
+ nxgl_rectcopy(&outmsg.rect, rect);
+
+ /* Forward the fill command to the server */
+
+ return nxmu_sendwindow(wnd, &outmsg, sizeof(struct nxsvrmsg_getrectangle_s));
+}
diff --git a/nuttx/graphics/nxmu/nx_kbdchin.c b/nuttx/graphics/nxmu/nx_kbdchin.c
new file mode 100644
index 000000000..6c7019f51
--- /dev/null
+++ b/nuttx/graphics/nxmu/nx_kbdchin.c
@@ -0,0 +1,99 @@
+/****************************************************************************
+ * graphics/nxmu/nx_kbdchin.c
+ *
+ * Copyright (C) 2008-2009, 2011-2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdint.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include "nxfe.h"
+
+#ifdef CONFIG_NX_KBD
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nx_kbdchin
+ *
+ * Description:
+ * Used by a thread or interrupt handler that manages some kind of keypad
+ * hardware to report text information to the NX server. That text
+ * data will be routed by the NX server to the appropriate window client.
+ *
+ ****************************************************************************/
+
+int nx_kbdchin(NXHANDLE handle, uint8_t ch)
+{
+ FAR struct nxfe_conn_s *conn = (FAR struct nxfe_conn_s *)handle;
+ struct nxsvrmsg_kbdin_s outmsg;
+
+ /* Inform the server of the new keypad data */
+
+ outmsg.msgid = NX_SVRMSG_KBDIN;
+ outmsg.nch = 1;
+ outmsg.ch[0] = ch;
+
+ return nxmu_sendserver(conn, &outmsg, sizeof(struct nxsvrmsg_kbdin_s));
+}
+
+#endif /* CONFIG_NX_KBD */
diff --git a/nuttx/graphics/nxmu/nx_kbdin.c b/nuttx/graphics/nxmu/nx_kbdin.c
new file mode 100644
index 000000000..b4b91298b
--- /dev/null
+++ b/nuttx/graphics/nxmu/nx_kbdin.c
@@ -0,0 +1,122 @@
+/****************************************************************************
+ * graphics/nxmu/nx_kbdin.c
+ *
+ * Copyright (C) 2008-2009, 2011-2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdint.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include "nxfe.h"
+
+#ifdef CONFIG_NX_KBD
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nx_kbdin
+ *
+ * Description:
+ * Used by a thread or interrupt handler that manages some kind of keypad
+ * hardware to report text information to the NX server. That text
+ * data will be routed by the NX server to the appropriate window client.
+ *
+ ****************************************************************************/
+
+int nx_kbdin(NXHANDLE handle, uint8_t nch, FAR const uint8_t *ch)
+{
+ FAR struct nxfe_conn_s *conn = (FAR struct nxfe_conn_s *)handle;
+ FAR struct nxsvrmsg_kbdin_s *outmsg;
+ int size;
+ int ret;
+ int i;
+
+ /* Allocate a bigger message to account for the variable amount of character
+ * data.
+ */
+
+ size = sizeof(struct nxsvrmsg_kbdin_s) + nch - 1;
+ outmsg = (FAR struct nxsvrmsg_kbdin_s *)malloc(size);
+ if (!outmsg)
+ {
+ errno = ENOMEM;
+ return ERROR;
+ }
+
+ /* Inform the server of the new keypad data */
+
+ outmsg->msgid = NX_SVRMSG_KBDIN;
+ outmsg->nch = nch;
+
+ for (i = 0; i < nch; i++)
+ {
+ outmsg->ch[i] = ch[i];
+ }
+
+ ret = nxmu_sendserver(conn, outmsg, size);
+
+ free(outmsg);
+ return ret;
+}
+
+#endif /* CONFIG_NX_KBD */
diff --git a/nuttx/graphics/nxmu/nx_lower.c b/nuttx/graphics/nxmu/nx_lower.c
new file mode 100644
index 000000000..c9505ca49
--- /dev/null
+++ b/nuttx/graphics/nxmu/nx_lower.c
@@ -0,0 +1,98 @@
+/****************************************************************************
+ * graphics/nxmu/nx_lower.c
+ *
+ * Copyright (C) 2008-2009, 2011-2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nx_raise
+ *
+ * Description:
+ * Lower the specified window to the bottom of the display.
+ *
+ * Input parameters:
+ * hwnd - the window to be lowered
+ *
+ * Returned value:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nx_lower(NXWINDOW hwnd)
+{
+ FAR struct nxbe_window_s *wnd = (FAR struct nxbe_window_s *)hwnd;
+ struct nxsvrmsg_lower_s outmsg;
+
+ /* Send the RAISE message */
+
+ outmsg.msgid = NX_SVRMSG_LOWER;
+ outmsg.wnd = wnd;
+
+ return nxmu_sendwindow(wnd, &outmsg, sizeof(struct nxsvrmsg_lower_s));
+}
+
diff --git a/nuttx/graphics/nxmu/nx_mousein.c b/nuttx/graphics/nxmu/nx_mousein.c
new file mode 100644
index 000000000..e84278539
--- /dev/null
+++ b/nuttx/graphics/nxmu/nx_mousein.c
@@ -0,0 +1,100 @@
+/****************************************************************************
+ * graphics/nxmu/nx_mousein.c
+ *
+ * Copyright (C) 2008-2009, 2011-2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdint.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include "nxfe.h"
+
+#ifdef CONFIG_NX_MOUSE
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nx_mousein
+ *
+ * Description:
+ * Used by a thread or interrupt handler that manages some kind of pointing
+ * hardware to report new positional data to the NX server. That positional
+ * data will be routed by the NX server to the appropriate window client.
+ *
+ ****************************************************************************/
+
+int nx_mousein(NXHANDLE handle, nxgl_coord_t x, nxgl_coord_t y, uint8_t buttons)
+{
+ FAR struct nxfe_conn_s *conn = (FAR struct nxfe_conn_s *)handle;
+ struct nxsvrmsg_mousein_s outmsg;
+
+ /* Inform the server that this client no longer exists */
+
+ outmsg.msgid = NX_SVRMSG_MOUSEIN;
+ outmsg.pt.x = x;
+ outmsg.pt.y = y;
+ outmsg.buttons = buttons;
+
+ return nxmu_sendserver(conn, &outmsg, sizeof(struct nxsvrmsg_mousein_s));
+}
+
+#endif /* CONFIG_NX_MOUSE */
diff --git a/nuttx/graphics/nxmu/nx_move.c b/nuttx/graphics/nxmu/nx_move.c
new file mode 100644
index 000000000..c8d4d3dfd
--- /dev/null
+++ b/nuttx/graphics/nxmu/nx_move.c
@@ -0,0 +1,114 @@
+/****************************************************************************
+ * graphics/nxmu/nx_move.c
+ *
+ * Copyright (C) 2008-2009, 2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nx_move
+ *
+ * Description:
+ * Move a rectangular region within the window
+ *
+ * Input Parameters:
+ * hwnd - The window within which the move is to be done
+ * rect - Describes the rectangular region to move
+ * offset - The offset to move the region
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nx_move(NXWINDOW hwnd, FAR const struct nxgl_rect_s *rect,
+ FAR const struct nxgl_point_s *offset)
+{
+ FAR struct nxbe_window_s *wnd = (FAR struct nxbe_window_s *)hwnd;
+ struct nxsvrmsg_move_s outmsg;
+
+#ifdef CONFIG_DEBUG
+ if (!wnd)
+ {
+ errno = EINVAL;
+ return ERROR;
+ }
+#endif
+
+ /* Format the fill command */
+
+ outmsg.msgid = NX_SVRMSG_MOVE;
+ outmsg.wnd = wnd;
+ outmsg.offset.x = offset->x;
+ outmsg.offset.y = offset->y;
+
+ nxgl_rectcopy(&outmsg.rect, rect);
+
+ /* Forward the fill command to the server */
+
+ return nxmu_sendwindow(wnd, &outmsg, sizeof(struct nxsvrmsg_move_s));
+}
diff --git a/nuttx/graphics/nxmu/nx_openwindow.c b/nuttx/graphics/nxmu/nx_openwindow.c
new file mode 100644
index 000000000..2975e365a
--- /dev/null
+++ b/nuttx/graphics/nxmu/nx_openwindow.c
@@ -0,0 +1,131 @@
+/****************************************************************************
+ * graphics/nxmu/nx_openwindow.c
+ *
+ * Copyright (C) 2008-2009, 2011-2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include <nuttx/kmalloc.h>
+
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nx_openwindow
+ *
+ * Description:
+ * Create a new window.
+ *
+ * Input Parameters:
+ * handle - The handle returned by nx_connect
+ * cb - Callbacks used to process windo events
+ * arg - User provided value that will be returned with NX callbacks.
+ *
+ * Return:
+ * Success: A non-NULL handle used with subsequent NX accesses
+ * Failure: NULL is returned and errno is set appropriately
+ *
+ ****************************************************************************/
+
+NXWINDOW nx_openwindow(NXHANDLE handle, FAR const struct nx_callback_s *cb,
+ FAR void *arg)
+{
+ FAR struct nxbe_window_s *wnd;
+ int ret;
+
+#ifdef CONFIG_DEBUG
+ if (!handle || !cb)
+ {
+ errno = EINVAL;
+ return NULL;
+ }
+#endif
+
+ /* Pre-allocate the window structure */
+
+ wnd = (FAR struct nxbe_window_s *)kzalloc(sizeof(struct nxbe_window_s));
+ if (!wnd)
+ {
+ errno = ENOMEM;
+ return NULL;
+ }
+
+ /* Then let nxfe_constructwindow do the rest */
+
+ ret = nxfe_constructwindow(handle, wnd, cb, arg);
+ if (ret < 0)
+ {
+ /* An error occurred, the window has been freed */
+
+ return NULL;
+ }
+
+ /* Return the uninitialized window reference. Since the server
+ * serializes all operations, we can be assured that the window will
+ * be initialized before the first operation on the window.
+ */
+
+ return (NXWINDOW)wnd;
+}
+
diff --git a/nuttx/graphics/nxmu/nx_raise.c b/nuttx/graphics/nxmu/nx_raise.c
new file mode 100644
index 000000000..4f51810f1
--- /dev/null
+++ b/nuttx/graphics/nxmu/nx_raise.c
@@ -0,0 +1,98 @@
+/****************************************************************************
+ * graphics/nxmu/nx_raise.c
+ *
+ * Copyright (C) 2008-2009, 2011-2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nx_raise
+ *
+ * Description:
+ * Bring the specified window to the top of the display.
+ *
+ * Input parameters:
+ * hwnd - the window to be raised
+ *
+ * Returned value:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nx_raise(NXWINDOW hwnd)
+{
+ FAR struct nxbe_window_s *wnd = (FAR struct nxbe_window_s *)hwnd;
+ struct nxsvrmsg_raise_s outmsg;
+
+ /* Send the RAISE message */
+
+ outmsg.msgid = NX_SVRMSG_RAISE;
+ outmsg.wnd = wnd;
+
+ return nxmu_sendwindow(wnd, &outmsg, sizeof(struct nxsvrmsg_raise_s));
+}
+
diff --git a/nuttx/graphics/nxmu/nx_releasebkgd.c b/nuttx/graphics/nxmu/nx_releasebkgd.c
new file mode 100644
index 000000000..972585663
--- /dev/null
+++ b/nuttx/graphics/nxmu/nx_releasebkgd.c
@@ -0,0 +1,105 @@
+/****************************************************************************
+ * graphics/nxmu/nx_releasebkgd.c
+ *
+ * Copyright (C) 2008-2009, 2011-2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nx_releasebkgd
+ *
+ * Description:
+ * Release the background window previously acquired using nx_openbgwindow
+ * and return control of the background to NX.
+ *
+ * Input Parameters:
+ * hwnd - The handle returned (indirectly) by nx_requestbkgd
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nx_releasebkgd(NXWINDOW hwnd)
+{
+ FAR struct nxbe_window_s *wnd = (FAR struct nxbe_window_s *)hwnd;
+ struct nxsvrmsg_releasebkgd_s outmsg;
+
+#ifdef CONFIG_DEBUG
+ if (!wnd)
+ {
+ errno = EINVAL;
+ return ERROR;
+ }
+#endif
+
+ /* Request access to the background window from the server */
+
+ outmsg.msgid = NX_SVRMSG_RELEASEBKGD;
+ return nxmu_sendserver(wnd->conn, &outmsg, sizeof(struct nxsvrmsg_releasebkgd_s));
+}
+
diff --git a/nuttx/graphics/nxmu/nx_requestbkgd.c b/nuttx/graphics/nxmu/nx_requestbkgd.c
new file mode 100644
index 000000000..c8f71ab2a
--- /dev/null
+++ b/nuttx/graphics/nxmu/nx_requestbkgd.c
@@ -0,0 +1,136 @@
+/****************************************************************************
+ * graphics/nxmu/nx_requestbkgd.c
+ *
+ * Copyright (C) 2008-2009, 2011-2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nx_requestbkgd
+ *
+ * Description:
+ * NX normally controls a separate window called the background window.
+ * It repaints the window as necessary using only a solid color fill. The
+ * background window always represents the entire screen and is always
+ * below other windows. It is useful for an application to control the
+ * background window in the following conditions:
+ *
+ * - If you want to implement a windowless solution. The single screen
+ * can be used to creat a truly simple graphic environment. In this
+ * case, you should probably also de-select CONFIG_NX_MULTIUSER as well.
+ * - When you want more on the background than a solid color. For
+ * example, if you want an image in the background, or animations in the
+ * background, or live video, etc.
+ *
+ * This API only requests the handle of the background window. That
+ * handle will be returned asynchronously in a subsequent position and
+ * redraw callbacks.
+ *
+ *
+ * Cautions:
+ * - The following should never be called using the background window.
+ * They are guaranteed to cause severe crashes:
+ *
+ * nx_setposition, nx_setsize, nx_raise, nx_lower.
+ *
+ * - Neither nx_opengbwindow or nx_closebgwindow should be called more than
+ * once. Multiple instances of the background window are not supported.
+ *
+ * Input Parameters:
+ * handle - The handle returned by nx_connect
+ * cb - Callbacks to use for processing background window events
+ * arg - User provided argument (see nx_openwindow, nx_constructwindow)
+ *
+ * Return:
+ * OK: Success; ERROR of failure with errno set appropriately.
+ *
+ ****************************************************************************/
+
+int nx_requestbkgd(NXHANDLE handle, FAR const struct nx_callback_s *cb,
+ FAR void *arg)
+{
+ FAR struct nxfe_conn_s *conn = (FAR struct nxfe_conn_s *)handle;
+ struct nxsvrmsg_requestbkgd_s outmsg;
+
+#ifdef CONFIG_DEBUG
+ if (!conn || !cb)
+ {
+ errno = EINVAL;
+ return ERROR;
+ }
+#endif
+
+ /* Request access to the background window from the server */
+
+ outmsg.msgid = NX_SVRMSG_REQUESTBKGD;
+ outmsg.conn = conn;
+ outmsg.cb = cb;
+ outmsg.arg = arg;
+
+ return nxmu_sendserver(conn, &outmsg, sizeof(struct nxsvrmsg_requestbkgd_s));
+}
+
diff --git a/nuttx/graphics/nxmu/nx_setbgcolor.c b/nuttx/graphics/nxmu/nx_setbgcolor.c
new file mode 100644
index 000000000..63fca5f55
--- /dev/null
+++ b/nuttx/graphics/nxmu/nx_setbgcolor.c
@@ -0,0 +1,109 @@
+/****************************************************************************
+ * graphics/nxmu/nx_setbgcolor.c
+ *
+ * Copyright (C) 2008-2009, 2011-2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nx_setbgcolor
+ *
+ * Description:
+ * Set the color of the background
+ *
+ * Input Parameters:
+ * handle - The connection handle
+ * color - The color to use in the background
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nx_setbgcolor(NXHANDLE handle,
+ nxgl_mxpixel_t color[CONFIG_NX_NPLANES])
+{
+ FAR struct nxfe_conn_s *conn = (FAR struct nxfe_conn_s *)handle;
+ struct nxsvrmsg_setbgcolor_s outmsg;
+
+#ifdef CONFIG_DEBUG
+ if (!conn)
+ {
+ errno = EINVAL;
+ return ERROR;
+ }
+#endif
+
+ /* Format the fill command */
+
+ outmsg.msgid = NX_SVRMSG_SETBGCOLOR;
+ nxgl_colorcopy(outmsg.color, color);
+
+ /* Forward the fill command to the server */
+
+ return nxmu_sendserver(conn, &outmsg, sizeof(struct nxsvrmsg_setbgcolor_s));
+}
diff --git a/nuttx/graphics/nxmu/nx_setpixel.c b/nuttx/graphics/nxmu/nx_setpixel.c
new file mode 100644
index 000000000..57fc12cc6
--- /dev/null
+++ b/nuttx/graphics/nxmu/nx_setpixel.c
@@ -0,0 +1,118 @@
+/****************************************************************************
+ * graphics/nxmu/nx_setpixel.c
+ *
+ * Copyright (C) 2011-2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <mqueue.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nxglib.h>
+#include <nuttx/nx/nx.h>
+
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nx_setpixel
+ *
+ * Description:
+ * Set a single pixel in the window to the specified color. This is simply
+ * a degenerate case of nx_fill(), but may be optimized in some architectures.
+ *
+ * Input Parameters:
+ * wnd - The window structure reference
+ * pos - The pixel location to be set
+ * col - The color to use in the set
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nx_setpixel(NXWINDOW hwnd, FAR const struct nxgl_point_s *pos,
+ nxgl_mxpixel_t color[CONFIG_NX_NPLANES])
+{
+ FAR struct nxbe_window_s *wnd = (FAR struct nxbe_window_s *)hwnd;
+ struct nxsvrmsg_setpixel_s outmsg;
+
+#ifdef CONFIG_DEBUG
+ if (!wnd || !pos || !color)
+ {
+ set_errno(EINVAL);
+ return ERROR;
+ }
+#endif
+
+ /* Format the fill command */
+
+ outmsg.msgid = NX_SVRMSG_SETPIXEL;
+ outmsg.wnd = wnd;
+ outmsg.pos.x = pos->x;
+ outmsg.pos.y = pos->y;
+
+ nxgl_colorcopy(outmsg.color, color);
+
+ /* Forward the fill command to the server */
+
+ return nxmu_sendwindow(wnd, &outmsg, sizeof(struct nxsvrmsg_setpixel_s));
+}
diff --git a/nuttx/graphics/nxmu/nx_setposition.c b/nuttx/graphics/nxmu/nx_setposition.c
new file mode 100644
index 000000000..75b33757a
--- /dev/null
+++ b/nuttx/graphics/nxmu/nx_setposition.c
@@ -0,0 +1,108 @@
+/****************************************************************************
+ * graphics/nxmu/nx_setposition.c
+ *
+ * Copyright (C) 2008-2009, 2011-2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nx_setposition
+ *
+ * Description:
+ * Set the position and size for the selected window
+ *
+ * Input Parameters:
+ * hwnd - The window handle
+ * pos - The new position of the window
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nx_setposition(NXWINDOW hwnd, FAR const struct nxgl_point_s *pos)
+{
+ FAR struct nxbe_window_s *wnd = (FAR struct nxbe_window_s *)hwnd;
+ struct nxsvrmsg_setposition_s outmsg;
+
+#ifdef CONFIG_DEBUG
+ if (!wnd || !pos)
+ {
+ errno = EINVAL;
+ return ERROR;
+ }
+#endif
+
+ /* Inform the server of the changed position */
+
+ outmsg.msgid = NX_SVRMSG_SETPOSITION;
+ outmsg.wnd = wnd;
+ outmsg.pos.x = pos->x;
+ outmsg.pos.y = pos->y;
+
+ return nxmu_sendwindow(wnd, &outmsg, sizeof(struct nxsvrmsg_setposition_s));
+}
diff --git a/nuttx/graphics/nxmu/nx_setsize.c b/nuttx/graphics/nxmu/nx_setsize.c
new file mode 100644
index 000000000..5f538bccc
--- /dev/null
+++ b/nuttx/graphics/nxmu/nx_setsize.c
@@ -0,0 +1,108 @@
+/****************************************************************************
+ * graphics/nxmu/nx_setsize.c
+ *
+ * Copyright (C) 2008-2009, 2011-2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nx_setsize
+ *
+ * Description:
+ * Set the size of the selected window
+ *
+ * Input Parameters:
+ * hwnd - The window handle
+ * size - The new size of the window.
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nx_setsize(NXWINDOW hwnd, FAR const struct nxgl_size_s *size)
+{
+ FAR struct nxbe_window_s *wnd = (FAR struct nxbe_window_s *)hwnd;
+ struct nxsvrmsg_setsize_s outmsg;
+
+#ifdef CONFIG_DEBUG
+ if (!wnd || !size)
+ {
+ errno = EINVAL;
+ return ERROR;
+ }
+#endif
+
+ /* Then inform the server of the changed position */
+
+ outmsg.msgid = NX_SVRMSG_SETSIZE;
+ outmsg.wnd = wnd;
+ outmsg.size.w = size->w;
+ outmsg.size.h = size->h;
+
+ return nxmu_sendwindow(wnd, &outmsg, sizeof(struct nxsvrmsg_setsize_s));
+}
diff --git a/nuttx/graphics/nxmu/nxfe.h b/nuttx/graphics/nxmu/nxfe.h
new file mode 100644
index 000000000..8b6a21ef4
--- /dev/null
+++ b/nuttx/graphics/nxmu/nxfe.h
@@ -0,0 +1,733 @@
+/****************************************************************************
+ * graphics/nxmu/nxfe.h
+ *
+ * Copyright (C) 2008-2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+#ifndef __GRAPHICS_NXMU_NXFE_H
+#define __GRAPHICS_NXMU_NXFE_H
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdint.h>
+#include <stdbool.h>
+#include <mqueue.h>
+#include <semaphore.h>
+
+#include <nuttx/nx/nx.h>
+
+#include "nxbe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/* Configuration ************************************************************/
+
+#ifdef CONFIG_DISABLE_MQUEUE
+# error "Message queues are disabled(CONFIG_DISABLE_MQUEUE)"
+#endif
+
+#ifndef CONFIG_NX_MXSERVERMSGS
+# define CONFIG_NX_MXSERVERMSGS 32 /* Number of pending messages in server MQ */
+#endif
+
+#ifndef CONFIG_NX_MXCLIENTMSGS
+# define CONFIG_NX_MXCLIENTMSGS 16 /* Number of pending messages in each client MQ */
+#endif
+
+/* Used to create unique client MQ name */
+
+#define NX_CLIENT_MQNAMEFMT "/dev/nxc%d"
+#define NX_CLIENT_MXNAMELEN (16)
+
+#define NX_MXSVRMSGLEN (64) /* Maximum size of a client->server command */
+#define NX_MXEVENTLEN (64) /* Maximum size of an event */
+#define NX_MXCLIMSGLEN (64) /* Maximum size of a server->client message */
+
+/* Handy macros */
+
+#define nxmu_semgive(sem) sem_post(sem) /* To match nxmu_semtake() */
+
+/****************************************************************************
+ * Public Types
+ ****************************************************************************/
+
+/* Client/Connection structures *********************************************/
+
+/* Client state */
+
+enum nx_clistate_e
+{
+ NX_CLISTATE_NOTCONNECTED = 0, /* Waiting for server to acknowledge connection */
+ NX_CLISTATE_CONNECTED, /* Connection established (normal state) */
+ NX_CLISTATE_DISCONNECT_PENDING, /* Waiting for server to acknowledge disconnect */
+};
+
+/* This structure represents a connection between the client and the server */
+
+struct nxfe_conn_s
+{
+ /* This number uniquely identifies the client */
+
+ int cid; /* Client ID (CID) */
+ uint8_t state; /* See enum nx_clistate_e */
+
+ /* These are only usable on the client side of the connection */
+
+ mqd_t crdmq; /* MQ to read from the server (may be non-blocking) */
+ mqd_t cwrmq; /* MQ to write to the server (blocking) */
+
+ /* These are only usable on the server side of the connection */
+
+ mqd_t swrmq; /* MQ to write to the client */
+};
+
+/* Server state structure ***************************************************/
+
+/* This the server 'front-end' state structure */
+
+struct nxfe_state_s
+{
+ /* The 'back-end' window status. Must be first so that instances of
+ * struct nxbe_state_s can be simply cast to an instance of struct
+ * nxfe_state_s
+ */
+
+ struct nxbe_state_s be;
+
+ /* This is the server's connection to iself */
+
+ struct nxfe_conn_s conn;
+};
+
+/* Message IDs **************************************************************/
+
+enum nxmsg_e
+{
+ /* Server-to-Client Messages **********************************************/
+
+ NX_CLIMSG_CONNECTED = 1, /* The server has completed the connection and is ready */
+ NX_CLIMSG_DISCONNECTED, /* The server has disconnected */
+ NX_CLIMSG_REDRAW, /* Re-draw the specified window */
+ NX_CLIMSG_NEWPOSITION, /* New window size/position */
+ NX_CLIMSG_MOUSEIN, /* New mouse positional data available for window */
+ NX_CLIMSG_KBDIN, /* New keypad input available for window */
+ NX_CLIMSG_BLOCKED, /* The window is blocked */
+
+ /* Client-to-Server Messages **********************************************/
+
+ NX_SVRMSG_CONNECT, /* Establish connection with new NX server client */
+ NX_SVRMSG_DISCONNECT, /* Tear down connection with terminating client */
+ NX_SVRMSG_OPENWINDOW, /* Create a new window */
+ NX_SVRMSG_CLOSEWINDOW, /* Close an existing window */
+ NX_SVRMSG_BLOCKED, /* The window is blocked */
+ NX_SVRMSG_REQUESTBKGD, /* Open the background window */
+ NX_SVRMSG_RELEASEBKGD, /* Release the background window */
+ NX_SVRMSG_SETPOSITION, /* Window position has changed */
+ NX_SVRMSG_SETSIZE, /* Window size has changed */
+ NX_SVRMSG_GETPOSITION, /* Get the current window position and size */
+ NX_SVRMSG_RAISE, /* Move the window to the top */
+ NX_SVRMSG_LOWER, /* Move the window to the bottom */
+ NX_SVRMSG_SETPIXEL, /* Set a single pixel in the window with a color */
+ NX_SVRMSG_FILL, /* Fill a rectangle in the window with a color */
+ NX_SVRMSG_GETRECTANGLE, /* Get a rectangular region in the window */
+ NX_SVRMSG_FILLTRAP, /* Fill a trapezoidal region in the window with a color */
+ NX_SVRMSG_MOVE, /* Move a rectangular region within the window */
+ NX_SVRMSG_BITMAP, /* Copy a rectangular bitmap into the window */
+ NX_SVRMSG_SETBGCOLOR, /* Set the color of the background */
+ NX_SVRMSG_MOUSEIN, /* New mouse report from mouse client */
+ NX_SVRMSG_KBDIN, /* New keyboard report from keyboard client */
+};
+
+/* Message priorities -- they must all be at the same priority to assure
+ * FIFO execution.
+ */
+
+#define NX_CLIMSG_PRIO 42
+#define NX_SVRMSG_PRIO 42
+
+/* Server-to-Client Message Structures **************************************/
+
+/* The generic message structure. All messages begin with this form. */
+
+struct nxclimsg_s
+{
+ uint32_t msgid; /* Any of nxclimsg_e */
+};
+
+/* The server is now connected */
+
+struct nxclimsg_connected_s
+{
+ uint32_t msgid; /* NX_CLIMSG_REDRAW_CONNECTED */
+};
+
+/* The server is now disconnected */
+
+struct nxclimsg_disconnected_s
+{
+ uint32_t msgid; /* NX_CLIMSG_REDRAW_DISCONNECTED */
+};
+
+/* This message is received when a requested window has been opened. If wnd is NULL
+ * then errorcode is the errno value that provides the explanation of the error.
+ */
+
+struct nxclimsg_redraw_s
+{
+ uint32_t msgid; /* NX_CLIMSG_REDRAW */
+ FAR struct nxbe_window_s *wnd; /* The handle to the window to redraw in */
+ FAR struct nxgl_rect_s rect; /* The rectangle to be redrawn */
+ bool more; /* true: more redraw messages follow */
+};
+
+/* This message informs the client of the new size or position of the window */
+
+struct nxclimsg_newposition_s
+{
+ uint32_t msgid; /* NX_CLIMSG_NEWPOSITION */
+ FAR struct nxbe_window_s *wnd; /* The window whose position/size has changed */
+ FAR struct nxgl_size_s size; /* The current window size */
+ FAR struct nxgl_point_s pos; /* The current window position */
+ FAR struct nxgl_rect_s bounds; /* Size of screen */
+};
+
+/* This message reports a new mouse event to a particular window */
+
+#ifdef CONFIG_NX_MOUSE
+struct nxclimsg_mousein_s
+{
+ uint32_t msgid; /* NX_SVRMSG_MOUSEIN */
+ FAR struct nxbe_window_s *wnd; /* The handle of window receiving mouse input */
+ struct nxgl_point_s pos; /* Mouse X/Y position */
+ uint8_t buttons; /* Mouse button set */
+};
+#endif
+
+/* This message reports a new keypad event to a particular window */
+
+#ifdef CONFIG_NX_KBD
+struct nxclimsg_kbdin_s
+{
+ uint32_t msgid; /* NX_CLIMSG_KBDIN */
+ FAR struct nxbe_window_s *wnd; /* The handle of window receiving keypad input */
+ uint8_t nch; /* Number of characters received */
+ uint8_t ch[1]; /* Array of received characters */
+};
+#endif
+
+/* This messsage confirms that that all queued window messages have been
+ * flushed and that the all further window messages are blocked.
+ */
+
+struct nxclimsg_blocked_s
+{
+ uint32_t msgid; /* NX_CLIMSG_BLOCKED */
+ FAR struct nxbe_window_s *wnd; /* The window that is blocked */
+ FAR void *arg; /* User argument */
+};
+
+/* Client-to-Server Message Structures **************************************/
+
+/* The generic message structure. All server messages begin with this form. Also
+ * messages that have no additional data fields use this structure. This includes:
+ * NX_SVRMSG_CONNECT and NX_SVRMSG_DISCONNECT.
+ */
+
+struct nxsvrmsg_s /* Generic server message */
+{
+ uint32_t msgid; /* One of enum nxsvrmsg_e */
+ FAR struct nxfe_conn_s *conn; /* The specific connection sending the message */
+};
+
+/* This message requests the server to create a new window */
+
+struct nxsvrmsg_openwindow_s
+{
+ uint32_t msgid; /* NX_SVRMSG_OPENWINDOW */
+ FAR struct nxbe_window_s *wnd; /* The pre-allocated window structure */
+};
+
+/* This message informs the server that client wishes to close a window */
+
+struct nxsvrmsg_closewindow_s
+{
+ uint32_t msgid; /* NX_SVRMSG_CLOSEWINDOW */
+ FAR struct nxbe_window_s *wnd; /* The window to be closed */
+};
+
+/* This messsage is just a marker that is queued and forwarded by the server
+ * (NX_CLIMSG_BLOCKED). Messages to the window were blocked just after this
+ * message was sent. Receipt of this message indicates both that the window
+ * blocked and that there are no further queued messages for the window.
+ */
+
+struct nxsvrmsg_blocked_s
+{
+ uint32_t msgid; /* NX_SVRMSG_BLOCKED */
+ FAR struct nxbe_window_s *wnd; /* The window that is blocked */
+ FAR void *arg; /* User argument */
+};
+
+/* This message requests the server to create a new window */
+
+struct nxsvrmsg_requestbkgd_s
+{
+ uint32_t msgid; /* NX_SVRMSG_REQUESTBKGD */
+ FAR struct nxfe_conn_s *conn; /* The specific connection sending the message */
+ FAR const struct nx_callback_s *cb; /* Event handling callbacks */
+ FAR void *arg; /* Client argument used with callbacks */
+};
+
+/* This message informs the server that client wishes to close a window */
+
+struct nxsvrmsg_releasebkgd_s
+{
+ uint32_t msgid; /* NX_SVRMSG_RELEASEBKGD */
+};
+
+/* This message informs the server that the size or position of the window has changed */
+
+struct nxsvrmsg_setposition_s
+{
+ uint32_t msgid; /* NX_SVRMSG_SETPOSITION */
+ FAR struct nxbe_window_s *wnd; /* The window whose position/size has changed */
+ FAR struct nxgl_point_s pos; /* The new window position */
+};
+
+/* This message informs the server that the size or position of the window has changed */
+
+struct nxsvrmsg_setsize_s
+{
+ uint32_t msgid; /* NX_SVRMSG_SETSIZE */
+ FAR struct nxbe_window_s *wnd; /* The window whose position/size has changed */
+ FAR struct nxgl_size_s size; /* The new window size */
+};
+
+/* This message informs the server that the size or position of the window has changed */
+
+struct nxsvrmsg_getposition_s
+{
+ uint32_t msgid; /* NX_SVRMSG_FETPOSITION */
+ FAR struct nxbe_window_s *wnd; /* The window whose position/size has changed */
+};
+
+/* This message informs the server to raise this window to the top of the display */
+
+struct nxsvrmsg_raise_s
+{
+ uint32_t msgid; /* NX_SVRMSG_RAISE */
+ FAR struct nxbe_window_s *wnd; /* The window to be raised */
+};
+
+/* This message informs the server to lower this window to the bottom of the display */
+
+struct nxsvrmsg_lower_s
+{
+ uint32_t msgid; /* NX_SVRMSG_LOWER */
+ FAR struct nxbe_window_s *wnd; /* The window to be lowered */
+};
+
+/* Set a single pixel in the window with a color */
+
+struct nxsvrmsg_setpixel_s
+{
+ uint32_t msgid; /* NX_SVRMSG_SETPIXEL */
+ FAR struct nxbe_window_s *wnd; /* The window to fill */
+ struct nxgl_point_s pos; /* The position of the pixel in the window */
+ nxgl_mxpixel_t color[CONFIG_NX_NPLANES]; /* Color to use in the fill */
+};
+
+/* Fill a rectangle in the window with a color */
+
+struct nxsvrmsg_fill_s
+{
+ uint32_t msgid; /* NX_SVRMSG_FILL */
+ FAR struct nxbe_window_s *wnd; /* The window to fill */
+ struct nxgl_rect_s rect; /* The rectangle in the window to fill */
+ nxgl_mxpixel_t color[CONFIG_NX_NPLANES]; /* Color to use in the fill */
+};
+
+/* Get a rectangular region from the the window */
+
+struct nxsvrmsg_getrectangle_s
+{
+ uint32_t msgid; /* NX_SVRMSG_GETRECTANGLE */
+ FAR struct nxbe_window_s *wnd; /* The window to get from */
+ struct nxgl_rect_s rect; /* The rectangle in the window to get from */
+ unsigned int plane; /* The plane number to read */
+ FAR uint8_t *dest; /* Memory location in which to store the graphics data */
+ unsigned int deststride; /* Width of the destination memory in bytes */
+};
+
+/* Fill a trapezoidal region in the window with a color */
+
+struct nxsvrmsg_filltrapezoid_s
+{
+ uint32_t msgid; /* NX_SVRMSG_FILLTRAP */
+ FAR struct nxbe_window_s *wnd; /* The window to fill */
+ FAR struct nxgl_rect_s clip; /* The clipping window */
+ struct nxgl_trapezoid_s trap; /* The trapezoidal region in the window to fill */
+ nxgl_mxpixel_t color[CONFIG_NX_NPLANES]; /* Color to use in the fill */
+};
+
+/* Move a rectangular region within the window */
+
+struct nxsvrmsg_move_s
+{
+ uint32_t msgid; /* NX_SVRMSG_MOVE */
+ FAR struct nxbe_window_s *wnd; /* The window within which the move is done */
+ struct nxgl_rect_s rect; /* Describes the rectangular region to move */
+ struct nxgl_point_s offset; /* The offset to move the region */
+};
+
+/* Copy a rectangular bitmap into the window */
+
+struct nxsvrmsg_bitmap_s
+{
+ uint32_t msgid; /* NX_SVRMSG_BITMAP */
+ FAR struct nxbe_window_s *wnd; /* The window with will receive the bitmap image */
+ struct nxgl_rect_s dest; /* Destination location of the bitmap in the window */
+ FAR const void *src[CONFIG_NX_NPLANES]; /* The start of the source image. */
+ struct nxgl_point_s origin; /* Offset into the source image data */
+ unsigned int stride; /* The width of the full source image in pixels. */
+};
+
+/* Set the color of the background */
+
+struct nxsvrmsg_setbgcolor_s
+{
+ uint32_t msgid; /* NX_SVRMSG_SETBGCOLOR */
+ nxgl_mxpixel_t color[CONFIG_NX_NPLANES]; /* Color to use in the background */
+};
+
+/* This message reports a new mouse event from a hardware controller attached to
+ * the server as a regular client (this message may have even been sent from an
+ * interrupt handler).
+ */
+
+#ifdef CONFIG_NX_MOUSE
+struct nxsvrmsg_mousein_s
+{
+ uint32_t msgid; /* NX_SVRMSG_MOUSEIN */
+ struct nxgl_point_s pt; /* Mouse X/Y position */
+ uint8_t buttons; /* Mouse button set */
+};
+#endif
+
+/* This message reports a new keyboard event from a hardware controller attached to
+ * some kind of keypad (this message may have even been sent from an
+ * interrupt handler).
+ */
+
+#ifdef CONFIG_NX_KBD
+struct nxsvrmsg_kbdin_s
+{
+ uint32_t msgid; /* NX_SVRMSG_KBDIN */
+ uint8_t nch ; /* Number of characters received */
+ uint8_t ch[1]; /* Array of received characters */
+};
+#endif
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+#define EXTERN extern "C"
+extern "C" {
+#else
+#define EXTERN extern
+#endif
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxfe_constructwindow
+ *
+ * Description:
+ * This function is the same a nx_openwindow EXCEPT that the client provides
+ * the window structure instance. nx_constructwindow will initialize the
+ * the pre-allocated window structure for use by NX. This function is
+ * provided in addition to nx_open window in order to support a kind of
+ * inheritance: The caller's window structure may include extensions that
+ * are not visible to NX.
+ *
+ * NOTE: wnd must have been allocated using malloc() (or related allocators)
+ * Once provided to nxfe_constructwindow() that memory is owned and managed
+ * by NX. On certain error conditions or when the window is closed, NX will
+ * free() the window.
+ *
+ * Input Parameters:
+ * handle - The handle returned by nx_connect
+ * wnd - The pre-allocated window structure.
+ * cb - Callbacks used to process window events
+ * arg - User provided value that will be returned with NX callbacks.
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately. In the
+ * case of ERROR, NX will have dealloated the pre-allocated window.
+ *
+ ****************************************************************************/
+
+EXTERN int nxfe_constructwindow(NXHANDLE handle,
+ FAR struct nxbe_window_s *wnd,
+ FAR const struct nx_callback_s *cb,
+ FAR void *arg);
+
+/****************************************************************************
+ * Name: nxmu_semtake
+ *
+ * Description:
+ * Take the semaphore, handling EINTR wakeups. See the nxmu_semgive macro.
+ *
+ * Input Parameters:
+ * sem - the semaphore to be taken.
+ *
+ * Return:
+ * None
+ *
+ ****************************************************************************/
+
+EXTERN void nxmu_semtake(sem_t *sem);
+
+/****************************************************************************
+ * Name: nxmu_sendserver
+ *
+ * Description:
+ * Send a message to the server at NX_SVRMSG_PRIO priority
+ *
+ * Input Parameters:
+ * conn - A pointer to the server connection structure
+ * msg - A pointer to the message to send
+ * msglen - The length of the message in bytes.
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+EXTERN int nxmu_sendserver(FAR struct nxfe_conn_s *conn,
+ FAR const void *msg, size_t msglen);
+
+/****************************************************************************
+ * Name: nxmu_sendwindow
+ *
+ * Description:
+ * Send a message to the server detined for a specific window at
+ * NX_SVRMSG_PRIO priority
+ *
+ * Input Parameters:
+ * wnd - A pointer to the back-end window structure
+ * msg - A pointer to the message to send
+ * msglen - The length of the message in bytes.
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+EXTERN int nxmu_sendwindow(FAR struct nxbe_window_s *wnd, FAR const void *msg,
+ size_t msglen);
+
+/****************************************************************************
+ * Name: nxmu_sendclient
+ *
+ * Description:
+ * Send a message to the client at NX_CLIMSG_PRIO priority
+ *
+ * Input Parameters:
+ * conn - A pointer to the server connection structure
+ * msg - A pointer to the message to send
+ * msglen - The length of the message in bytes.
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+EXTERN int nxmu_sendclient(FAR struct nxfe_conn_s *conn,
+ FAR const void *msg, size_t msglen);
+
+/****************************************************************************
+ * Name: nxmu_openwindow
+ *
+ * Description:
+ * Create a new window.
+ *
+ * Input Parameters:
+ * be - The back-end status structure
+ * wnd - The pre-allocated window structure to be initialized [IN/OUT]
+ *
+ * Return:
+ * None
+ *
+ ****************************************************************************/
+
+EXTERN void nxmu_openwindow(FAR struct nxbe_state_s *be,
+ FAR struct nxbe_window_s *wnd);
+
+/****************************************************************************
+ * Name: nxmu_requestbkgd
+ *
+ * Description:
+ * Perform the server-side operation for the nx_requestbkgd operation:
+ * Give the client control of the background window connection and receipt
+ * of all background window callbacks.
+ *
+ * conn - The client containing connection information [IN]
+ * be - The server state structure [IN]
+ * cb - Callbacks used to process window events
+ * arg - User provided argument (see nx_openwindow, nx_constructwindow)
+ *
+ * Return:
+ * None
+ *
+ ****************************************************************************/
+
+EXTERN void nxmu_requestbkgd(FAR struct nxfe_conn_s *conn,
+ FAR struct nxbe_state_s *be,
+ FAR const struct nx_callback_s *cb,
+ FAR void *arg);
+
+/****************************************************************************
+ * Name: nxmu_releasebkgd
+ *
+ * Description:
+ * Release the background window previously acquired using nxmu_openbgwindow
+ * and return control of the background to NX.
+ *
+ * Input Parameters:
+ * fe - The front-end state structure
+ *
+ * Return:
+ * None
+ *
+ ****************************************************************************/
+
+EXTERN void nxmu_releasebkgd(FAR struct nxfe_state_s *fe);
+
+/****************************************************************************
+ * Name: nxfe_reportposition
+ *
+ * Descripton:
+ * Report the new size/position of the window.
+ *
+ ****************************************************************************/
+
+EXTERN void nxfe_reportposition(FAR struct nxbe_window_s *wnd);
+
+/****************************************************************************
+ * Name: nxfe_redrawreq
+ *
+ * Descripton:
+ * Request the client that has this window to redraw the rectangular region.
+ *
+ ****************************************************************************/
+
+EXTERN void nxfe_redrawreq(FAR struct nxbe_window_s *wnd,
+ FAR const struct nxgl_rect_s *rect);
+
+/****************************************************************************
+ * Name: nxmu_mouseinit
+ *
+ * Description:
+ * Initialize with the mouse in the center of the display
+ *
+ ****************************************************************************/
+
+#ifdef CONFIG_NX_MOUSE
+EXTERN void nxmu_mouseinit(int x, int y);
+#endif
+
+/****************************************************************************
+ * Name: nxmu_mousereport
+ *
+ * Description:
+ * Report mouse position info to the specified window
+ *
+ * Input Parameters:
+ * wnd - The window to receive the mouse report
+ *
+ * Returned Value:
+ * 0: Mouse report sent; >0: Mouse report not sent; <0: An error occurred
+ *
+ ****************************************************************************/
+
+#ifdef CONFIG_NX_MOUSE
+EXTERN int nxmu_mousereport(struct nxbe_window_s *wnd);
+#endif
+
+/****************************************************************************
+ * Name: nxmu_mousein
+ *
+ * Description:
+ * New positional data has been received from the thread or interrupt
+ * handler that manages some kind of pointing hardware. Route that
+ * positional data to the appropriate window client.
+ *
+ ****************************************************************************/
+
+#ifdef CONFIG_NX_MOUSE
+EXTERN int nxmu_mousein(FAR struct nxfe_state_s *fe,
+ FAR const struct nxgl_point_s *pos, int button);
+#endif
+
+/****************************************************************************
+ * Name: nxmu_kbdin
+ *
+ * Descripton:
+ * New keyboard data has been received from the thread or interrupt
+ * handler that manages some kind of keyboard/keypad hardware. Route that
+ * positional data to the appropriate window client.
+ *
+ ****************************************************************************/
+
+#ifdef CONFIG_NX_KBD
+EXTERN void nxmu_kbdin(FAR struct nxfe_state_s *fe, uint8_t nch, FAR uint8_t *ch);
+#endif
+
+#undef EXTERN
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* __GRAPHICS_NXMU_NXFE_H */
+
diff --git a/nuttx/graphics/nxmu/nxmu_constructwindow.c b/nuttx/graphics/nxmu/nxmu_constructwindow.c
new file mode 100644
index 000000000..e5f6dcc9a
--- /dev/null
+++ b/nuttx/graphics/nxmu/nxmu_constructwindow.c
@@ -0,0 +1,137 @@
+/****************************************************************************
+ * graphics/nxmu/nx_openwindow.c
+ *
+ * Copyright (C) 2008, 2011-2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdlib.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxfe_constructwindow
+ *
+ * Description:
+ * This function is the same a nx_openwindow EXCEPT that the client provides
+ * the window structure instance. nx_constructwindow will initialize the
+ * the pre-allocated window structure for use by NX. This function is
+ * provided in addition to nx_open window in order to support a kind of
+ * inheritance: The caller's window structure may include extensions that
+ * are not visible to NX.
+ *
+ * NOTE: wnd must have been allocated using malloc() (or related allocators)
+ * Once provided to nxfe_constructwindow() that memory is owned and managed
+ * by NX. On certain error conditions or when the window is closed, NX will
+ * free() the window.
+ *
+ * Input Parameters:
+ * handle - The handle returned by nx_connect
+ * wnd - The pre-allocated window structure.
+ * cb - Callbacks used to process window events
+ * arg - User provided value that will be returned with NX callbacks.
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately. In the
+ * case of ERROR, NX will have dealloated the pre-allocated window.
+ *
+ ****************************************************************************/
+
+int nxfe_constructwindow(NXHANDLE handle, FAR struct nxbe_window_s *wnd,
+ FAR const struct nx_callback_s *cb, FAR void *arg)
+{
+ FAR struct nxfe_conn_s *conn = (FAR struct nxfe_conn_s *)handle;
+ struct nxsvrmsg_openwindow_s outmsg;
+
+#ifdef CONFIG_DEBUG
+ if (!wnd)
+ {
+ errno = EINVAL;
+ return ERROR;
+ }
+
+ if (!conn || !cb)
+ {
+ free(wnd);
+ errno = EINVAL;
+ return ERROR;
+ }
+#endif
+
+ /* Setup only the connection structure, callbacks and client private data
+ * reference. The server will set everything else up.
+ */
+
+ wnd->conn = conn;
+ wnd->cb = cb;
+ wnd->arg = arg;
+
+ /* Request initialization the new window from the server */
+
+ outmsg.msgid = NX_SVRMSG_OPENWINDOW;
+ outmsg.wnd = wnd;
+
+ return nxmu_sendserver(conn, &outmsg, sizeof(struct nxsvrmsg_openwindow_s));
+}
+
diff --git a/nuttx/graphics/nxmu/nxmu_kbdin.c b/nuttx/graphics/nxmu/nxmu_kbdin.c
new file mode 100644
index 000000000..2c658009b
--- /dev/null
+++ b/nuttx/graphics/nxmu/nxmu_kbdin.c
@@ -0,0 +1,117 @@
+/****************************************************************************
+ * graphics/nxmu/nxmu_kbdin.c
+ *
+ * Copyright (C) 2008-2009, 2011-2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdint.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include "nxfe.h"
+
+#ifdef CONFIG_NX_KBD
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxmu_kbdin
+ *
+ * Descripton:
+ * New keyboard data has been received from the thread or interrupt
+ * handler that manages some kind of keyboard/keypad hardware. Route that
+ * positional data to the appropriate window client.
+ *
+ ****************************************************************************/
+
+void nxmu_kbdin(FAR struct nxfe_state_s *fe, uint8_t nch, FAR uint8_t *ch)
+{
+ FAR struct nxclimsg_kbdin_s *outmsg;
+ int size;
+ int i;
+
+ /* Allocate a bigger message to account for the variable amount of
+ * character data.
+ */
+
+ size = sizeof(struct nxclimsg_kbdin_s) + nch - 1;
+ outmsg = (FAR struct nxclimsg_kbdin_s *)malloc(size);
+ if (outmsg)
+ {
+ /* Give the keypad input only to the top child */
+
+ outmsg->msgid = NX_CLIMSG_KBDIN;
+ outmsg->wnd = fe->be.topwnd;
+ outmsg->nch = nch;
+
+ for (i = 0; i < nch; i++)
+ {
+ outmsg->ch[i] = ch[i];
+ }
+
+ (void)nxmu_sendclient(fe->be.topwnd->conn, outmsg, size);
+ free(outmsg);
+ }
+}
+
+#endif /* CONFIG_NX_KBD */
+
diff --git a/nuttx/graphics/nxmu/nxmu_mouse.c b/nuttx/graphics/nxmu/nxmu_mouse.c
new file mode 100644
index 000000000..3ebe062d2
--- /dev/null
+++ b/nuttx/graphics/nxmu/nxmu_mouse.c
@@ -0,0 +1,215 @@
+/****************************************************************************
+ * graphics/nxmu/nxmu__mouse.c
+ *
+ * Copyright (C) 2008-2009, 2011-2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdint.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nxglib.h>
+#include <nuttx/nx/nx.h>
+#include "nxfe.h"
+
+#ifdef CONFIG_NX_MOUSE
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+static struct nxgl_point_s g_mpos;
+static struct nxgl_point_s g_mrange;
+static uint8_t g_mbutton;
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxmu_mouseinit
+ *
+ * Description:
+ * Initialize with the mouse in the center of the display
+ *
+ ****************************************************************************/
+
+void nxmu_mouseinit(int x, int y)
+{
+ g_mrange.x = x;
+ g_mrange.y = y;
+ g_mpos.x = x / 2;
+ g_mpos.y = y / 2;
+ g_mbutton = 0;
+}
+
+/****************************************************************************
+ * Name: nxmu_mousereport
+ *
+ * Description:
+ * Report mouse position info to the specified window
+ *
+ * Input Parameters:
+ * wnd - The window to receive the mouse report
+ *
+ * Returned Value:
+ * 0: Mouse report sent; >0: Mouse report not sent; <0: An error occurred
+ *
+ ****************************************************************************/
+
+int nxmu_mousereport(struct nxbe_window_s *wnd)
+{
+ struct nxclimsg_mousein_s outmsg;
+
+ /* Does this window support mouse callbacks? */
+
+ if (wnd->cb->mousein)
+ {
+ /* Yes.. Is the mouse position visible in this window? */
+
+ if (nxbe_visible(wnd, &g_mpos))
+ {
+ /* Yes... Convert the mouse position to window relative
+ * coordinates and send it to the client
+ */
+
+ outmsg.msgid = NX_CLIMSG_MOUSEIN;
+ outmsg.wnd = wnd;
+ outmsg.buttons = g_mbutton;
+ nxgl_vectsubtract(&outmsg.pos, &g_mpos, &wnd->bounds.pt1);
+
+ return nxmu_sendclient(wnd->conn, &outmsg, sizeof(struct nxclimsg_mousein_s));
+ }
+ }
+
+ /* No error occurred, but the mouse report was not sent */
+
+ return 1;
+}
+
+/****************************************************************************
+ * Name: nxmu_mousein
+ *
+ * Description:
+ * New positional data has been received from the thread or interrupt
+ * handler that manages some kind of pointing hardware. Route that
+ * positional data to the appropriate window client.
+ *
+ ****************************************************************************/
+
+int nxmu_mousein(FAR struct nxfe_state_s *fe,
+ FAR const struct nxgl_point_s *pos, int buttons)
+{
+ struct nxbe_window_s *wnd;
+ nxgl_coord_t x = pos->x;
+ nxgl_coord_t y = pos->y;
+ int ret;
+
+ /* Clip x and y to within the bounding rectangle */
+
+ if (x < 0)
+ {
+ x = 0;
+ }
+ else if (x >= g_mrange.x)
+ {
+ x = g_mrange.x - 1;
+ }
+
+ if (y < 0)
+ {
+ y = 0;
+ }
+ else if (y >= g_mrange.y)
+ {
+ y = g_mrange.y - 1;
+ }
+
+ /* Look any change in values */
+
+ if (x != g_mpos.x || y != g_mpos.y || buttons != g_mbutton)
+ {
+ /* Update the mouse value */
+
+ g_mpos.x = x;
+ g_mpos.y = y;
+ g_mbutton = buttons;
+
+ /* Pick the window to receive the mouse event. Start with
+ * the top window and go down. Stop with the first window
+ * that gets the mouse report
+ */
+
+ for (wnd = fe->be.topwnd; wnd; wnd = wnd->below)
+ {
+ /* The background window normally has no callback structure
+ * (unless a client has taken control of the background via
+ * nx_requestbkgd()).
+ */
+
+ if (wnd->cb)
+ {
+ ret = nxmu_mousereport(wnd);
+ if (ret == 0)
+ {
+ break;
+ }
+ }
+ }
+ }
+
+ return OK;
+}
+
+#endif /* CONFIG_NX_MOUSE */
diff --git a/nuttx/graphics/nxmu/nxmu_openwindow.c b/nuttx/graphics/nxmu/nxmu_openwindow.c
new file mode 100644
index 000000000..4cd6e661c
--- /dev/null
+++ b/nuttx/graphics/nxmu/nxmu_openwindow.c
@@ -0,0 +1,113 @@
+/****************************************************************************
+ * graphics/nxmu/nxmu_openwindow.c
+ *
+ * Copyright (C) 2008-2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <nuttx/nx/nx.h>
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxmu_openwindow
+ *
+ * Description:
+ * Create a new window.
+ *
+ * Input Parameters:
+ * be - The back-end status structure
+ * wnd - The pre-allocated window structure to be initialized [IN/OUT]
+ *
+ * Return:
+ * None
+ *
+ ****************************************************************************/
+
+void nxmu_openwindow(FAR struct nxbe_state_s *be, FAR struct nxbe_window_s *wnd)
+{
+ /* The window structure was allocated in nx_openwindow and all fields have
+ * been set to zero cb and conn which were initialized on the client side.
+ * On the server side, we need only initialize a few more the non zero fields
+ * and insert the new window at the top of the display.
+ */
+
+ wnd->be = be;
+
+ /* Now, insert the new window at the top on the display. topwind is
+ * never NULL (it may point only at the background window, however)
+ */
+
+ wnd->above = NULL;
+ wnd->below = be->topwnd;
+
+ be->topwnd->above = wnd;
+ be->topwnd = wnd;
+
+ /* Report the initial size/position of the window to the client */
+
+ nxfe_reportposition(wnd);
+
+ /* Provide the initial mouse settings to the client */
+
+#ifdef CONFIG_NX_MOUSE
+ nxmu_mousereport(wnd);
+#endif
+}
diff --git a/nuttx/graphics/nxmu/nxmu_redrawreq.c b/nuttx/graphics/nxmu/nxmu_redrawreq.c
new file mode 100644
index 000000000..32ca477a2
--- /dev/null
+++ b/nuttx/graphics/nxmu/nxmu_redrawreq.c
@@ -0,0 +1,93 @@
+/****************************************************************************
+ * graphics/nxmu/nxmu_redrawreq.c
+ *
+ * Copyright (C) 2008-2009, 2011-2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdbool.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxfe_redrawreq
+ *
+ * Descripton:
+ * Request the client that has this window to redraw the rectangular region.
+ *
+ ****************************************************************************/
+
+void nxfe_redrawreq(FAR struct nxbe_window_s *wnd, FAR const struct nxgl_rect_s *rect)
+{
+ struct nxclimsg_redraw_s outmsg;
+
+ outmsg.msgid = NX_CLIMSG_REDRAW;
+ outmsg.wnd = wnd;
+ outmsg.more = false;
+ nxgl_rectoffset(&outmsg.rect, rect, -wnd->bounds.pt1.x, -wnd->bounds.pt1.y);
+
+ (void)nxmu_sendclient(wnd->conn, &outmsg, sizeof(struct nxclimsg_redraw_s));
+}
+
+
diff --git a/nuttx/graphics/nxmu/nxmu_releasebkgd.c b/nuttx/graphics/nxmu/nxmu_releasebkgd.c
new file mode 100644
index 000000000..3d1f24b79
--- /dev/null
+++ b/nuttx/graphics/nxmu/nxmu_releasebkgd.c
@@ -0,0 +1,110 @@
+/****************************************************************************
+ * graphics/nxmu/nxmu_releasebkgd.c
+ *
+ * Copyright (C) 2008-2009, 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxmu_releasebkgd
+ *
+ * Description:
+ * Release the background window previously acquired using nxmu_openbgwindow
+ * and return control of the background to NX.
+ *
+ * Input Parameters:
+ * fe - The front-end state structure
+ *
+ * Return:
+ * None
+ *
+ ****************************************************************************/
+
+void nxmu_releasebkgd(FAR struct nxfe_state_s *fe)
+{
+ FAR struct nxbe_state_s *be = &fe->be;
+
+#ifdef CONFIG_DEBUG
+ if (!fe)
+ {
+ return;
+ }
+#endif
+
+ /* Destroy the client window callbacks* and restore the server
+ * connection.
+ */
+
+ be->bkgd.cb = NULL;
+ be->bkgd.arg = NULL;
+ be->bkgd.conn = &fe->conn;
+
+ /* Redraw the background window */
+
+ nxfe_redrawreq(&be->bkgd, &be->bkgd.bounds);
+}
+
diff --git a/nuttx/graphics/nxmu/nxmu_reportposition.c b/nuttx/graphics/nxmu/nxmu_reportposition.c
new file mode 100644
index 000000000..f9b5f9daf
--- /dev/null
+++ b/nuttx/graphics/nxmu/nxmu_reportposition.c
@@ -0,0 +1,108 @@
+/****************************************************************************
+ * graphics/nxmu/nxmu_reportposition.c
+ *
+ * Copyright (C) 2008-2009, 2011-2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nxglib.h>
+#include <nuttx/nx/nx.h>
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxfe_reportposition
+ *
+ * Descripton:
+ * Report the new size/position of the window.
+ *
+ ****************************************************************************/
+
+void nxfe_reportposition(FAR struct nxbe_window_s *wnd)
+{
+ FAR struct nxclimsg_newposition_s outmsg;
+ int ret;
+
+ /* Send the size/position info */
+
+ outmsg.msgid = NX_CLIMSG_NEWPOSITION;
+ outmsg.wnd = wnd;
+ outmsg.pos.x = wnd->bounds.pt1.x;
+ outmsg.pos.y = wnd->bounds.pt1.y;
+
+ nxgl_rectsize(&outmsg.size, &wnd->bounds);
+
+ /* Provide the background window bounding box which is the screen limits
+ * It must always have (0,0) as its origin
+ */
+
+ nxgl_rectcopy(&outmsg.bounds, &wnd->be->bkgd.bounds);
+
+ /* And provide this to the client */
+
+ ret = nxmu_sendclient(wnd->conn, &outmsg, sizeof(struct nxclimsg_newposition_s));
+ if (ret < 0)
+ {
+ gdbg("nxmu_sendclient failed: %d\n", errno);
+ }
+}
diff --git a/nuttx/graphics/nxmu/nxmu_requestbkgd.c b/nuttx/graphics/nxmu/nxmu_requestbkgd.c
new file mode 100644
index 000000000..0e69351e6
--- /dev/null
+++ b/nuttx/graphics/nxmu/nxmu_requestbkgd.c
@@ -0,0 +1,124 @@
+/****************************************************************************
+ * graphics/nxmu/nxmu_requestbkgd.c
+ *
+ * Copyright (C) 2008-2009, 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxmu_requestbkgd
+ *
+ * Description:
+ * Perform the server-side operation for the nx_requestbkgd operation:
+ * Give the client control of the background window connection and receipt
+ * of all background window callbacks.
+ *
+ * conn - The client containing connection information [IN]
+ * be - The server state structure [IN]
+ * cb - Callbacks used to process window events
+ * arg - User provided argument (see nx_openwindow, nx_constructwindow)
+ *
+ * Return:
+ * None
+ *
+ ****************************************************************************/
+
+void nxmu_requestbkgd(FAR struct nxfe_conn_s *conn,
+ FAR struct nxbe_state_s *be,
+ FAR const struct nx_callback_s *cb,
+ FAR void *arg)
+{
+#ifdef CONFIG_DEBUG
+ if (!conn || !be || !cb)
+ {
+ errno = EINVAL;
+ }
+#endif
+
+ /* Set the client's callback vtable and and replace the server
+ * connection with the clients connection.
+ */
+
+ be->bkgd.cb = cb;
+ be->bkgd.arg = arg;
+ be->bkgd.conn = conn;
+
+ /* Report the size/position of the background window to the client */
+
+ nxfe_reportposition((NXWINDOW)&be->bkgd);
+
+ /* Redraw the background window */
+
+ nxfe_redrawreq(&be->bkgd, &be->bkgd.bounds);
+
+ /* Provide the mouse settings */
+
+#ifdef CONFIG_NX_MOUSE
+ nxmu_mousereport(&be->bkgd);
+#endif
+}
+
diff --git a/nuttx/graphics/nxmu/nxmu_semtake.c b/nuttx/graphics/nxmu/nxmu_semtake.c
new file mode 100644
index 000000000..10fd5bd4a
--- /dev/null
+++ b/nuttx/graphics/nxmu/nxmu_semtake.c
@@ -0,0 +1,87 @@
+/****************************************************************************
+ * graphics/nxmu/nxmu_semtake.c
+ *
+ * Copyright (C) 2008-2009, 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <errno.h>
+#include <assert.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxmu_semtake
+ ****************************************************************************/
+
+void nxmu_semtake(sem_t *sem)
+{
+ while (sem_wait(sem) != 0)
+ {
+ /* The only case that an error should occur here is if the wait was
+ * awakened by a signal.
+ */
+
+ ASSERT(errno == EINTR);
+ }
+}
diff --git a/nuttx/graphics/nxmu/nxmu_sendclient.c b/nuttx/graphics/nxmu/nxmu_sendclient.c
new file mode 100644
index 000000000..8b7f12104
--- /dev/null
+++ b/nuttx/graphics/nxmu/nxmu_sendclient.c
@@ -0,0 +1,112 @@
+/****************************************************************************
+ * graphics/nxmu/nxmu_sendclient.c
+ *
+ * Copyright (C) 2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <mqueue.h>
+#include <errno.h>
+#include <debug.h>
+
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxmu_sendclient
+ *
+ * Description:
+ * Send a message to the client at NX_CLIMSG_PRIO priority
+ *
+ * Input Parameters:
+ * conn - A pointer to the server connection structure
+ * msg - A pointer to the message to send
+ * msglen - The length of the message in bytes.
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxmu_sendclient(FAR struct nxfe_conn_s *conn, FAR const void *msg,
+ size_t msglen)
+{
+ int ret;
+
+ /* Sanity checking */
+
+#ifdef CONFIG_DEBUG
+ if (!conn || conn->swrmq)
+ {
+ errno = EINVAL;
+ return ERROR;
+ }
+#endif
+
+ /* Send the message to the client */
+
+ ret = mq_send(conn->swrmq, msg, msglen, NX_CLIMSG_PRIO);
+ if (ret < 0)
+ {
+ gdbg("mq_send failed: %d\n", errno);
+ }
+
+ return ret;
+}
diff --git a/nuttx/graphics/nxmu/nxmu_sendserver.c b/nuttx/graphics/nxmu/nxmu_sendserver.c
new file mode 100644
index 000000000..7007b81da
--- /dev/null
+++ b/nuttx/graphics/nxmu/nxmu_sendserver.c
@@ -0,0 +1,112 @@
+/****************************************************************************
+ * graphics/nxmu/nxmu_sendserver.c
+ *
+ * Copyright (C) 2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <mqueue.h>
+#include <errno.h>
+#include <debug.h>
+
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxmu_sendserver
+ *
+ * Description:
+ * Send a message to the server at NX_SVRMSG_PRIO priority
+ *
+ * Input Parameters:
+ * conn - A pointer to the server connection structure
+ * msg - A pointer to the message to send
+ * msglen - The length of the message in bytes.
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxmu_sendserver(FAR struct nxfe_conn_s *conn, FAR const void *msg,
+ size_t msglen)
+{
+ int ret;
+
+ /* Sanity checking */
+
+#ifdef CONFIG_DEBUG
+ if (!conn || conn->cwrmq)
+ {
+ errno = EINVAL;
+ return ERROR;
+ }
+#endif
+
+ /* Send the message to the server */
+
+ ret = mq_send(conn->cwrmq, msg, msglen, NX_SVRMSG_PRIO);
+ if (ret < 0)
+ {
+ gdbg("mq_send failed: %d\n", errno);
+ }
+
+ return ret;
+}
diff --git a/nuttx/graphics/nxmu/nxmu_sendwindow.c b/nuttx/graphics/nxmu/nxmu_sendwindow.c
new file mode 100644
index 000000000..6f64ffff2
--- /dev/null
+++ b/nuttx/graphics/nxmu/nxmu_sendwindow.c
@@ -0,0 +1,114 @@
+/****************************************************************************
+ * graphics/nxmu/nxmu_sendserver.c
+ *
+ * Copyright (C) 2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <mqueue.h>
+#include <errno.h>
+#include <debug.h>
+
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxmu_sendwindow
+ *
+ * Description:
+ * Send a message to the server detined for a specific window at
+ * NX_SVRMSG_PRIO priority
+ *
+ * Input Parameters:
+ * wnd - A pointer to the back-end window structure
+ * msg - A pointer to the message to send
+ * msglen - The length of the message in bytes.
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxmu_sendwindow(FAR struct nxbe_window_s *wnd, FAR const void *msg,
+ size_t msglen)
+{
+ int ret = OK;
+
+ /* Sanity checking */
+
+#ifdef CONFIG_DEBUG
+ if (!wnd || !wnd->conn)
+ {
+ errno = EINVAL;
+ return ERROR;
+ }
+#endif
+
+ /* Ignore messages destined to a blocked window (no errors reported) */
+
+ if (!NXBE_ISBLOCKED(wnd))
+ {
+ /* Send the message to the server */
+
+ ret = nxmu_sendserver(wnd->conn, msg, msglen);
+ }
+
+ return ret;
+}
diff --git a/nuttx/graphics/nxmu/nxmu_server.c b/nuttx/graphics/nxmu/nxmu_server.c
new file mode 100644
index 000000000..2730e0ea2
--- /dev/null
+++ b/nuttx/graphics/nxmu/nxmu_server.c
@@ -0,0 +1,530 @@
+/****************************************************************************
+ * graphics/nxmu/nxmu_server.c
+ *
+ * Copyright (C) 2008-2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdint.h>
+#include <stdio.h>
+#include <string.h>
+#include <semaphore.h>
+#include <mqueue.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxmu_disconnect
+ ****************************************************************************/
+
+static inline void nxmu_disconnect(FAR struct nxfe_conn_s *conn)
+{
+ struct nxclimsg_disconnected_s outmsg;
+ int ret;
+
+ /* Send the handshake message back to the client */
+
+ outmsg.msgid = NX_CLIMSG_DISCONNECTED;
+
+ ret = nxmu_sendclient(conn, &outmsg, sizeof(struct nxclimsg_disconnected_s));
+ if (ret < 0)
+ {
+ gdbg("nxmu_sendclient failed: %d\n", errno);
+ }
+
+ /* Close the outgoing client message queue */
+
+ (void)mq_close(conn->swrmq);
+}
+
+/****************************************************************************
+ * Name: nxmu_connect
+ ****************************************************************************/
+
+static inline void nxmu_connect(FAR struct nxfe_conn_s *conn)
+{
+ char mqname[NX_CLIENT_MXNAMELEN];
+ struct nxclimsg_connected_s outmsg;
+ int ret;
+
+ /* Create the client MQ name */
+
+ sprintf(mqname, NX_CLIENT_MQNAMEFMT, conn->cid);
+
+ /* Open the client MQ -- this should have already been created by the client */
+
+ conn->swrmq = mq_open(mqname, O_WRONLY);
+ if (conn->swrmq == (mqd_t)-1)
+ {
+ gdbg("mq_open(%s) failed: %d\n", mqname, errno);
+ outmsg.msgid = NX_CLIMSG_DISCONNECTED;
+ }
+
+ /* Send the handshake message back to the client */
+
+ outmsg.msgid = NX_CLIMSG_CONNECTED;
+ ret = nxmu_sendclient(conn, &outmsg, sizeof(struct nxclimsg_connected_s));
+ if (ret < 0)
+ {
+ gdbg("nxmu_sendclient failed: %d\n", errno);
+ }
+}
+
+/****************************************************************************
+ * Name: nxmu_shutdown
+ ****************************************************************************/
+
+static inline void nxmu_shutdown(FAR struct nxfe_state_s *fe)
+{
+ FAR struct nxbe_window_s *wnd;
+
+ /* Inform all of the clients in the window list that the server is
+ * exit-ting. Notes: (1) that the following loop will probably attempt to
+ * disconnect clients multiple times because one client may have multiple
+ * windows: The first disconnect will fail; subsequent will return errors
+ * that are ignored. (2) The final window to be disconnected will be the
+ * background window, thus close all of the servers message queues.
+ */
+
+ for (wnd = fe->be.topwnd; wnd; wnd = wnd->below)
+ {
+ (void)nxmu_disconnect(wnd->conn);
+ }
+}
+
+/****************************************************************************
+ * Name: nxmu_blocked
+ ****************************************************************************/
+
+static inline void nxmu_blocked(FAR struct nxbe_window_s *wnd, FAR void *arg)
+{
+ struct nxclimsg_blocked_s outmsg;
+ int ret;
+
+ outmsg.msgid = NX_CLIMSG_BLOCKED;
+ outmsg.wnd = wnd;
+ outmsg.arg = arg;
+
+ ret = nxmu_sendclient(wnd->conn, &outmsg, sizeof(struct nxclimsg_blocked_s));
+ if (ret < 0)
+ {
+ gdbg("nxmu_sendclient failed: %d\n", errno);
+ }
+}
+
+/****************************************************************************
+ * Name: nxmu_setup
+ ****************************************************************************/
+
+static inline int nxmu_setup(FAR const char *mqname, FAR NX_DRIVERTYPE *dev,
+ FAR struct nxfe_state_s *fe)
+{
+ struct mq_attr attr;
+ int ret;
+
+ memset(fe, 0, sizeof(struct nxfe_state_s));
+
+ /* Configure the framebuffer/LCD device */
+
+ ret = nxbe_configure(dev, &fe->be);
+ if (ret < 0)
+ {
+ gdbg("nxbe_configure failed: %d\n", -ret);
+ errno = -ret;
+ return ERROR;
+ }
+
+#if CONFIG_FB_CMAP
+ ret = nxbe_colormap(dev);
+ if (ret < 0)
+ {
+ gdbg("nxbe_colormap failed: %d\n", -ret);
+ errno = -ret;
+ return ERROR;
+ }
+#endif /* CONFIG_FB_CMAP */
+
+ /* Initialize the non-NULL elements of the server connection structure.
+ * Oddly, this strcture represents the connection between the server and
+ * itself.
+ *
+ * Open the incoming server MQ. The server receives messages on the
+ * background window's incoming message queue.
+ */
+
+ attr.mq_maxmsg = CONFIG_NX_MXSERVERMSGS;
+ attr.mq_msgsize = NX_MXSVRMSGLEN;
+ attr.mq_flags = 0;
+
+ fe->conn.crdmq = mq_open(mqname, O_RDONLY|O_CREAT, 0666, &attr);
+ if (fe->conn.crdmq == (mqd_t)-1)
+ {
+ gdbg("mq_open(%s) failed: %d\n", mqname, errno);
+ return ERROR; /* mq_open sets errno */
+ }
+
+ /* NOTE that the outgoing client MQ (cwrmq) is not initialized. The
+ * background window never initiates messages.
+ */
+
+ /* Open the outgoing server MQ. This is used to send messages to the
+ * background window which will, of course, be received and handled by
+ * the server message loop.
+ */
+
+ fe->conn.swrmq = mq_open(mqname, O_WRONLY);
+ if (fe->conn.swrmq == (mqd_t)-1)
+ {
+ gdbg("mq_open(%s) failed: %d\n", mqname, errno);
+ mq_close(fe->conn.crdmq);
+ return ERROR; /* mq_open sets errno */
+ }
+
+ /* The server is now "connected" to itself via the background window */
+
+ fe->conn.state = NX_CLISTATE_CONNECTED;
+
+ /* Initialize the non-NULL elements of the background window */
+
+ fe->be.bkgd.conn = &fe->conn;
+ fe->be.bkgd.be = (FAR struct nxbe_state_s*)fe;
+
+ fe->be.bkgd.bounds.pt2.x = fe->be.vinfo.xres - 1;
+ fe->be.bkgd.bounds.pt2.y = fe->be.vinfo.yres - 1;
+
+ /* Complete initialization of the server state structure. The
+ * window list contains only one element: The background window
+ * with nothing else above or below it
+ */
+
+ fe->be.topwnd = &fe->be.bkgd;
+
+ /* Initialize the mouse position */
+
+#ifdef CONFIG_NX_MOUSE
+ nxmu_mouseinit(fe->be.vinfo.xres, fe->be.vinfo.yres);
+#endif
+ return OK;
+}
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nx_runinstance
+ *
+ * Description:
+ * This is the server entry point. It does not return; the calling thread
+ * is dedicated to supporting NX server.
+ *
+ * NOTE that multiple instances of the NX server may run at the same time,
+ * each with different callback and message queue names.
+ *
+ * Input Parameters:
+ * mqname - The name for the server incoming message queue
+ * dev - Vtable "object" of the framebuffer/LCD "driver" to use
+ *
+ * Return:
+ * This function usually does not return. If it does return, it will
+ * return ERROR and errno will be set appropriately.
+ *
+ ****************************************************************************/
+
+int nx_runinstance(FAR const char *mqname, FAR NX_DRIVERTYPE *dev)
+{
+ struct nxfe_state_s fe;
+ FAR struct nxsvrmsg_s *msg;
+ uint8_t buffer[NX_MXSVRMSGLEN];
+ int nbytes;
+ int ret;
+
+ /* Initialization *********************************************************/
+
+ /* Sanity checking */
+
+#ifdef CONFIG_DEBUG
+ if (!mqname || !dev)
+ {
+ errno = EINVAL;
+ return ERROR;
+ }
+#endif
+
+ /* Initialize and configure the server */
+
+ ret = nxmu_setup(mqname, dev, &fe);
+ if (ret < 0)
+ {
+ return ret; /* nxmu_setup sets errno */
+ }
+
+ /* Produce the initial, background display */
+
+ nxbe_redraw(&fe.be, &fe.be.bkgd, &fe.be.bkgd.bounds);
+
+ /* Message Loop ***********************************************************/
+
+ /* Then loop forever processing incoming messages */
+
+ for (;;)
+ {
+ /* Receive the next server message */
+
+ nbytes = mq_receive(fe.conn.crdmq, buffer, NX_MXSVRMSGLEN, 0);
+ if (nbytes < 0)
+ {
+ if (errno != EINTR)
+ {
+ gdbg("mq_receive failed: %d\n", errno);
+ goto errout; /* mq_receive sets errno */
+ }
+ continue;
+ }
+
+ /* Dispatch the message appropriately */
+
+ DEBUGASSERT(nbytes >= sizeof(struct nxsvrmsg_s));
+ msg = (FAR struct nxsvrmsg_s *)buffer;
+
+ gvdbg("Received opcode=%d nbytes=%d\n", msg->msgid, nbytes);
+ switch (msg->msgid)
+ {
+ /* Messages sent from clients to the NX server *********************/
+
+ case NX_SVRMSG_CONNECT: /* Establish connection with new NX server client */
+ {
+ FAR struct nxsvrmsg_s *connmsg = (FAR struct nxsvrmsg_s *)buffer;
+ nxmu_connect(connmsg->conn);
+ }
+ break;
+
+ case NX_SVRMSG_DISCONNECT: /* Tear down connection with terminating client */
+ {
+ FAR struct nxsvrmsg_s *disconnmsg = (FAR struct nxsvrmsg_s *)buffer;
+ nxmu_disconnect(disconnmsg->conn);
+ }
+ break;
+
+ case NX_SVRMSG_OPENWINDOW: /* Create a new window */
+ {
+ FAR struct nxsvrmsg_openwindow_s *openmsg = (FAR struct nxsvrmsg_openwindow_s *)buffer;
+ nxmu_openwindow(&fe.be, openmsg->wnd);
+ }
+ break;
+
+ case NX_SVRMSG_CLOSEWINDOW: /* Close an existing window */
+ {
+ FAR struct nxsvrmsg_closewindow_s *closemsg = (FAR struct nxsvrmsg_closewindow_s *)buffer;
+ nxbe_closewindow(closemsg->wnd);
+ }
+ break;
+
+ case NX_SVRMSG_BLOCKED: /* Block messsages to a window */
+ {
+ FAR struct nxsvrmsg_blocked_s *blocked = (FAR struct nxsvrmsg_blocked_s *)buffer;
+ nxmu_blocked(blocked->wnd, blocked->arg);
+ }
+ break;
+
+ case NX_SVRMSG_REQUESTBKGD: /* Give access to the background window */
+ {
+ FAR struct nxsvrmsg_requestbkgd_s *rqbgmsg = (FAR struct nxsvrmsg_requestbkgd_s *)buffer;
+ nxmu_requestbkgd(rqbgmsg->conn, &fe.be, rqbgmsg->cb, rqbgmsg->arg);
+ }
+ break;
+
+ case NX_SVRMSG_RELEASEBKGD: /* End access to the background window */
+ {
+ nxmu_releasebkgd(&fe);
+ }
+ break;
+
+ case NX_SVRMSG_SETPOSITION: /* Change window position */
+ {
+ FAR struct nxsvrmsg_setposition_s *setposmsg = (FAR struct nxsvrmsg_setposition_s *)buffer;
+ nxbe_setposition(setposmsg->wnd, &setposmsg->pos);
+ }
+ break;
+
+ case NX_SVRMSG_SETSIZE: /* Change window size */
+ {
+ FAR struct nxsvrmsg_setsize_s *setsizemsg = (FAR struct nxsvrmsg_setsize_s *)buffer;
+ nxbe_setsize(setsizemsg->wnd, &setsizemsg->size);
+ }
+ break;
+
+ case NX_SVRMSG_GETPOSITION: /* Get the window size/position */
+ {
+ FAR struct nxsvrmsg_getposition_s *getposmsg = (FAR struct nxsvrmsg_getposition_s *)buffer;
+ nxfe_reportposition(getposmsg->wnd);
+ }
+ break;
+
+ case NX_SVRMSG_RAISE: /* Move the window to the top of the display */
+ {
+ FAR struct nxsvrmsg_raise_s *raisemsg = (FAR struct nxsvrmsg_raise_s *)buffer;
+ nxbe_raise(raisemsg->wnd);
+ }
+ break;
+
+ case NX_SVRMSG_LOWER: /* Lower the window to the bottom of the display */
+ {
+ FAR struct nxsvrmsg_lower_s *lowermsg = (FAR struct nxsvrmsg_lower_s *)buffer;
+ nxbe_lower(lowermsg->wnd);
+ }
+ break;
+
+ case NX_SVRMSG_SETPIXEL: /* Set a single pixel in the window with a color */
+ {
+ FAR struct nxsvrmsg_setpixel_s *setmsg = (FAR struct nxsvrmsg_setpixel_s *)buffer;
+ nxbe_setpixel(setmsg->wnd, &setmsg->pos, setmsg->color);
+ }
+ break;
+
+ case NX_SVRMSG_FILL: /* Fill a rectangular region in the window with a color */
+ {
+ FAR struct nxsvrmsg_fill_s *fillmsg = (FAR struct nxsvrmsg_fill_s *)buffer;
+ nxbe_fill(fillmsg->wnd, &fillmsg->rect, fillmsg->color);
+ }
+ break;
+
+ case NX_SVRMSG_GETRECTANGLE: /* Get a rectangular region from the window */
+ {
+ FAR struct nxsvrmsg_getrectangle_s *getmsg = (FAR struct nxsvrmsg_getrectangle_s *)buffer;
+ nxbe_getrectangle(getmsg->wnd, &getmsg->rect, getmsg->plane, getmsg->dest, getmsg->deststride);
+ }
+ break;
+
+ case NX_SVRMSG_FILLTRAP: /* Fill a trapezoidal region in the window with a color */
+ {
+ FAR struct nxsvrmsg_filltrapezoid_s *trapmsg = (FAR struct nxsvrmsg_filltrapezoid_s *)buffer;
+ nxbe_filltrapezoid(trapmsg->wnd, &trapmsg->clip, &trapmsg->trap, trapmsg->color);
+ }
+ break;
+ case NX_SVRMSG_MOVE: /* Move a rectangular region within the window */
+ {
+ FAR struct nxsvrmsg_move_s *movemsg = (FAR struct nxsvrmsg_move_s *)buffer;
+ nxbe_move(movemsg->wnd, &movemsg->rect, &movemsg->offset);
+ }
+ break;
+
+ case NX_SVRMSG_BITMAP: /* Copy a rectangular bitmap into the window */
+ {
+ FAR struct nxsvrmsg_bitmap_s *bmpmsg = (FAR struct nxsvrmsg_bitmap_s *)buffer;
+ nxbe_bitmap(bmpmsg->wnd, &bmpmsg->dest, bmpmsg->src, &bmpmsg->origin, bmpmsg->stride);
+ }
+ break;
+
+ case NX_SVRMSG_SETBGCOLOR: /* Set the color of the background */
+ {
+ FAR struct nxsvrmsg_setbgcolor_s *bgcolormsg = (FAR struct nxsvrmsg_setbgcolor_s *)buffer;
+ nxgl_colorcopy(fe.be.bgcolor, bgcolormsg->color);
+ nxbe_fill(&fe.be.bkgd, &fe.be.bkgd.bounds, bgcolormsg->color);
+ }
+ break;
+
+#ifdef CONFIG_NX_MOUSE
+ case NX_SVRMSG_MOUSEIN: /* New mouse report from mouse client */
+ {
+ FAR struct nxsvrmsg_mousein_s *mousemsg = (FAR struct nxsvrmsg_mousein_s *)buffer;
+ nxmu_mousein(&fe, &mousemsg->pt, mousemsg->buttons);
+ }
+ break;
+#endif
+#ifdef CONFIG_NX_KBD
+ case NX_SVRMSG_KBDIN: /* New keyboard report from keyboard client */
+ {
+ FAR struct nxsvrmsg_kbdin_s *kbdmsg = (FAR struct nxsvrmsg_kbdin_s *)buffer;
+ nxmu_kbdin(&fe, kbdmsg->nch, kbdmsg->ch);
+ }
+ break;
+#endif
+
+ /* Messages sent to the backgound window ***************************/
+
+ case NX_CLIMSG_REDRAW: /* Re-draw the background window */
+ {
+ FAR struct nxclimsg_redraw_s *redraw = (FAR struct nxclimsg_redraw_s *)buffer;
+ DEBUGASSERT(redraw->wnd == &fe.be.bkgd);
+ gvdbg("Re-draw background rect={(%d,%d),(%d,%d)}\n",
+ redraw->rect.pt1.x, redraw->rect.pt1.y,
+ redraw->rect.pt2.x, redraw->rect.pt2.y);
+ nxbe_fill(&fe.be.bkgd, &redraw->rect, fe.be.bgcolor);
+ }
+ break;
+
+ case NX_CLIMSG_MOUSEIN: /* Ignored */
+ case NX_CLIMSG_KBDIN:
+ break;
+
+ case NX_CLIMSG_CONNECTED: /* Shouldn't happen */
+ case NX_CLIMSG_DISCONNECTED:
+ default:
+ gdbg("Unrecognized command: %d\n", msg->msgid);
+ break;
+ }
+ }
+
+errout:
+ nxmu_shutdown(&fe);
+ return OK;
+}
diff --git a/nuttx/graphics/nxsu/Make.defs b/nuttx/graphics/nxsu/Make.defs
new file mode 100644
index 000000000..d16fe549c
--- /dev/null
+++ b/nuttx/graphics/nxsu/Make.defs
@@ -0,0 +1,44 @@
+############################################################################
+# graphics/nxsu/Make.defs
+#
+# Copyright (C) 2008, 2011 Gregory Nutt. All rights reserved.
+# Author: Gregory Nutt <gnutt@nuttx.org>
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in
+# the documentation and/or other materials provided with the
+# distribution.
+# 3. Neither the name NuttX nor the names of its contributors may be
+# used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+############################################################################
+
+NX_ASRCS =
+NXAPI_CSRCS = nx_bitmap.c nx_close.c nx_closewindow.c nx_fill.c \
+ nx_filltrapezoid.c nx_getposition.c nx_getrectangle.c nx_kbdchin.c \
+ nx_kbdin.c nx_lower.c nx_mousein.c nx_move.c nx_open.c \
+ nx_openwindow.c nx_raise.c nx_releasebkgd.c nx_requestbkgd.c \
+ nx_setpixel.c nx_setsize.c nx_setbgcolor.c nx_setposition.c \
+ nx_drawcircle.c nx_drawline.c nx_fillcircle.c
+NXSU_CSRCS = nxsu_constructwindow.c nxsu_redrawreq.c nxsu_reportposition.c
+NX_CSRCS = $(NXAPI_CSRCS) $(NXSU_CSRCS)
diff --git a/nuttx/graphics/nxsu/nx_bitmap.c b/nuttx/graphics/nxsu/nx_bitmap.c
new file mode 100644
index 000000000..696b94afe
--- /dev/null
+++ b/nuttx/graphics/nxsu/nx_bitmap.c
@@ -0,0 +1,110 @@
+/****************************************************************************
+ * graphics/nxsu/nx_bitmap.c
+ *
+ * Copyright (C) 2008-2009 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+
+#include "nxbe.h"
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nx_bitmap
+ *
+ * Description:
+ * Copy a rectangular region of a larger image into the rectangle in the
+ * specified window.
+ *
+ * Input Parameters:
+ * hwnd - The window that will receive the bitmap image
+ * dest - Describes the rectangular region on the display that will receive the
+ * the bit map.
+ * src - The start of the source image.
+ * origin - The origin of the upper, left-most corner of the full bitmap.
+ * Both dest and origin are in window coordinates, however, origin
+ * may lie outside of the display.
+ * stride - The width of the full source image in pixels.
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nx_bitmap(NXWINDOW hwnd, FAR const struct nxgl_rect_s *dest,
+ FAR const void *src[CONFIG_NX_NPLANES],
+ FAR const struct nxgl_point_s *origin, unsigned int stride)
+{
+#ifdef CONFIG_DEBUG
+ if (!hwnd || !dest || !src || !origin)
+ {
+ errno = EINVAL;
+ return ERROR;
+ }
+#endif
+
+ nxbe_bitmap((FAR struct nxbe_window_s *)hwnd, dest, src, origin, stride);
+ return OK;
+}
diff --git a/nuttx/graphics/nxsu/nx_close.c b/nuttx/graphics/nxsu/nx_close.c
new file mode 100644
index 000000000..a3fa9b74d
--- /dev/null
+++ b/nuttx/graphics/nxsu/nx_close.c
@@ -0,0 +1,91 @@
+/****************************************************************************
+ * graphics/nxsu/nx_close.c
+ *
+ * Copyright (C) 2008-2009 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdlib.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nx_close
+ *
+ * Description:
+ * Close the single user NX interface. nx_close is single-user equivalent
+ * of nx_disconnect.
+ *
+ * Input Parameters:
+ * handle - the handle returned by nx_open
+ *
+ * Return:
+ * None
+ *
+ ****************************************************************************/
+
+void nx_close(NXHANDLE handle)
+{
+ free(handle);
+}
+
diff --git a/nuttx/graphics/nxsu/nx_closewindow.c b/nuttx/graphics/nxsu/nx_closewindow.c
new file mode 100644
index 000000000..c5a2799ea
--- /dev/null
+++ b/nuttx/graphics/nxsu/nx_closewindow.c
@@ -0,0 +1,100 @@
+/****************************************************************************
+ * graphics/nxsu/nx_closewindow.c
+ *
+ * Copyright (C) 2008-2009 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdlib.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nx_closewindow
+ *
+ * Description:
+ * Destroy a window created by nx_openwindow.
+ *
+ * Input Parameters:
+ * wnd - The window to be destroyed
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nx_closewindow(NXWINDOW hwnd)
+{
+#ifdef CONFIG_DEBUG
+ if (!hwnd)
+ {
+ errno = EINVAL;
+ return ERROR;
+ }
+#endif
+
+ nxbe_closewindow((FAR struct nxbe_window_s *)hwnd);
+ return OK;
+}
+
diff --git a/nuttx/graphics/nxsu/nx_drawcircle.c b/nuttx/graphics/nxsu/nx_drawcircle.c
new file mode 100644
index 000000000..8d5c12454
--- /dev/null
+++ b/nuttx/graphics/nxsu/nx_drawcircle.c
@@ -0,0 +1,145 @@
+/****************************************************************************
+ * graphics/nxsu/nx_drawcircle.c
+ *
+ * Copyright (C) 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <sys/types.h>
+#include <debug.h>
+#include <errno.h>
+
+#include <nuttx/nx/nxglib.h>
+#include <nuttx/nx/nx.h>
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+/* Named indices into the 16 circle points generated by nxgl_circlepts */
+
+#define POINT_0p0 0
+#define POINT_22p5 1
+#define POINT_45p0 2
+#define POINT_67p5 3
+#define POINT_90p0 4
+#define POINT_112p5 5
+#define POINT_135p0 6
+#define POINT_157p5 7
+#define POINT_180p0 8
+#define POINT_202p5 9
+#define POINT_225p0 10
+#define POINT_247p5 11
+#define POINT_270p0 12
+#define POINT_292p5 13
+#define POINT_315p0 14
+#define POINT_337p5 15
+#define NCIRCLE_POINTS 16
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nx_drawcircle
+ *
+ * Description:
+ * Draw a circular outline using the specified line thickness and color.
+ *
+ * Input Parameters:
+ * hwnd - The window handle
+ * center - A pointer to the point that is the center of the circle
+ * radius - The radius of the circle in pixels.
+ * width - The width of the line
+ * color - The color to use to fill the line
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nx_drawcircle(NXWINDOW hwnd, FAR const struct nxgl_point_s *center,
+ nxgl_coord_t radius, nxgl_coord_t width,
+ nxgl_mxpixel_t color[CONFIG_NX_NPLANES])
+{
+ struct nxgl_point_s pts[NCIRCLE_POINTS];
+ FAR struct nxgl_vector_s vector;
+ int i;
+ int ret;
+
+ /* Convert the circle to a set of 16 points */
+
+ nxgl_circlepts(center, radius, pts);
+
+ /* Draw each pair of points as a vector */
+
+ for (i = POINT_0p0; i < POINT_337p5; i++)
+ {
+ vector.pt1.x = pts[i].x;
+ vector.pt1.y = pts[i].y;
+ vector.pt2.x = pts[i+1].x;
+ vector.pt2.y = pts[i+1].y;
+ ret = nx_drawline(hwnd, &vector, width, color);
+ if (ret != OK)
+ {
+ return ret;
+ }
+ }
+
+ /* The final, closing vector is a special case */
+
+ vector.pt1.x = pts[POINT_337p5].x;
+ vector.pt1.y = pts[POINT_337p5].y;
+ vector.pt2.x = pts[POINT_0p0].x;
+ vector.pt2.y = pts[POINT_0p0].y;
+ return nx_drawline(hwnd, &vector, width, color);
+}
diff --git a/nuttx/graphics/nxsu/nx_drawline.c b/nuttx/graphics/nxsu/nx_drawline.c
new file mode 100644
index 000000000..ca4ddaf18
--- /dev/null
+++ b/nuttx/graphics/nxsu/nx_drawline.c
@@ -0,0 +1,136 @@
+/****************************************************************************
+ * graphics/nxsu/nx_drawline.c
+ *
+ * Copyright (C) 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <sys/types.h>
+#include <debug.h>
+#include <errno.h>
+
+#include <nuttx/nx/nxglib.h>
+#include <nuttx/nx/nx.h>
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nx_drawline
+ *
+ * Description:
+ * Fill the specified line in the window with the specified color. This
+ * is simply a wrapper that uses nxgl_splitline() to break the line into
+ * trapezoids and then calls nx_filltrapezoid() to render the line.
+ *
+ * Input Parameters:
+ * hwnd - The window handle
+ * vector - Describes the line to be drawn
+ * width - The width of the line
+ * color - The color to use to fill the line
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nx_drawline(NXWINDOW hwnd, FAR struct nxgl_vector_s *vector,
+ nxgl_coord_t width, nxgl_mxpixel_t color[CONFIG_NX_NPLANES])
+{
+ struct nxgl_trapezoid_s trap[3];
+ struct nxgl_rect_s rect;
+ int ret;
+
+#ifdef CONFIG_DEBUG
+ if (!hwnd || !vector || width < 1 || !color)
+ {
+ set_errno(EINVAL);
+ return ERROR;
+ }
+#endif
+
+ ret = nxgl_splitline(vector, trap, &rect, width);
+ switch (ret)
+ {
+ case 0:
+ ret = nx_filltrapezoid(hwnd, NULL, &trap[0], color);
+ if (ret == OK)
+ {
+ ret = nx_filltrapezoid(hwnd, NULL, &trap[1], color);
+ if (ret == OK)
+ {
+ ret = nx_filltrapezoid(hwnd, NULL, &trap[2], color);
+ }
+ }
+ break;
+
+ case 1:
+ ret = nx_filltrapezoid(hwnd, NULL, &trap[1], color);
+ break;
+
+ case 2:
+ ret = nx_fill(hwnd, &rect, color);
+ break;
+
+ default:
+ set_errno(-ret);
+ return ERROR;
+ }
+
+ return ret;
+}
diff --git a/nuttx/graphics/nxsu/nx_fill.c b/nuttx/graphics/nxsu/nx_fill.c
new file mode 100644
index 000000000..9075f82c0
--- /dev/null
+++ b/nuttx/graphics/nxsu/nx_fill.c
@@ -0,0 +1,103 @@
+/****************************************************************************
+ * graphics/nxsu/nx_fill.c
+ *
+ * Copyright (C) 2008-2009 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <mqueue.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nx_fill
+ *
+ * Description:
+ * Fill the specified rectangle in the window with the specified color
+ *
+ * Input Parameters:
+ * hwnd - The window handle
+ * rect - The location to be filled
+ * color - The color to use in the fill
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nx_fill(NXWINDOW hwnd, FAR const struct nxgl_rect_s *rect,
+ nxgl_mxpixel_t color[CONFIG_NX_NPLANES])
+{
+#ifdef CONFIG_DEBUG
+ if (!hwnd || !rect || !color)
+ {
+ errno = EINVAL;
+ return ERROR;
+ }
+#endif
+
+ nxbe_fill((FAR struct nxbe_window_s *)hwnd, rect, color);
+ return 0;
+}
diff --git a/nuttx/graphics/nxsu/nx_fillcircle.c b/nuttx/graphics/nxsu/nx_fillcircle.c
new file mode 100644
index 000000000..12c47f80a
--- /dev/null
+++ b/nuttx/graphics/nxsu/nx_fillcircle.c
@@ -0,0 +1,114 @@
+/****************************************************************************
+ * graphics/nxmu/nx_fillcircle.c
+ *
+ * Copyright (C) 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <sys/types.h>
+#include <debug.h>
+#include <errno.h>
+
+#include <nuttx/nx/nxglib.h>
+#include <nuttx/nx/nx.h>
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+#define NCIRCLE_TRAPS 8
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nx_fillcircle
+ *
+ * Description:
+ * Fill a circular region using the specified color.
+ *
+ * Input Parameters:
+ * hwnd - The window handle
+ * center - A pointer to the point that is the center of the circle
+ * radius - The radius of the circle in pixels.
+ * color - The color to use to fill the circle.
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nx_fillcircle(NXWINDOW hwnd, FAR const struct nxgl_point_s *center,
+ nxgl_coord_t radius, nxgl_mxpixel_t color[CONFIG_NX_NPLANES])
+{
+ FAR struct nxgl_trapezoid_s traps[NCIRCLE_TRAPS];
+ int i;
+ int ret;
+
+ /* Describe the circular region as a sequence of 8 trapezoids */
+
+ nxgl_circletraps(center, radius, traps);
+
+ /* Then rend those trapezoids */
+
+ for (i = 0; i < NCIRCLE_TRAPS; i++)
+ {
+ ret = nx_filltrapezoid(hwnd, NULL, &traps[i], color);
+ if (ret != OK)
+ {
+ return ret;
+ }
+ }
+ return OK;
+}
diff --git a/nuttx/graphics/nxsu/nx_filltrapezoid.c b/nuttx/graphics/nxsu/nx_filltrapezoid.c
new file mode 100644
index 000000000..869ce3e1a
--- /dev/null
+++ b/nuttx/graphics/nxsu/nx_filltrapezoid.c
@@ -0,0 +1,105 @@
+/****************************************************************************
+ * graphics/nxsu/nx_filltrapezoid.c
+ *
+ * Copyright (C) 2008-2009 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <mqueue.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nx_filltrapezoid
+ *
+ * Description:
+ * Fill the specified trapezoidal region in the window with the specified color
+ *
+ * Input Parameters:
+ * hwnd - The window handle
+ * clip - Clipping region (may be null)
+ * trap - The trapezoidal region to be filled
+ * color - The color to use in the fill
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nx_filltrapezoid(NXWINDOW hwnd, FAR const struct nxgl_rect_s *clip,
+ FAR const struct nxgl_trapezoid_s *trap,
+ nxgl_mxpixel_t color[CONFIG_NX_NPLANES])
+{
+#ifdef CONFIG_DEBUG
+ if (!hwnd || !trap || !color)
+ {
+ errno = EINVAL;
+ return ERROR;
+ }
+#endif
+
+ nxbe_filltrapezoid((FAR struct nxbe_window_s *)hwnd, clip, trap, color);
+ return OK;
+}
diff --git a/nuttx/graphics/nxsu/nx_getposition.c b/nuttx/graphics/nxsu/nx_getposition.c
new file mode 100644
index 000000000..8760d84c1
--- /dev/null
+++ b/nuttx/graphics/nxsu/nx_getposition.c
@@ -0,0 +1,106 @@
+/****************************************************************************
+ * graphics/nxsu/nx_getposition.c
+ *
+ * Copyright (C) 2008-2009 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nx_getposition
+ *
+ * Description:
+ * Request the position and size information for the selected window. The
+ * values will be return asynchronously through the client callback function
+ * pointer.
+ *
+ * Input Parameters:
+ * hwnd - The window handle
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nx_getposition(NXWINDOW hwnd)
+{
+#ifdef CONFIG_DEBUG
+ if (!hwnd)
+ {
+ errno = EINVAL;
+ return ERROR;
+ }
+#endif
+
+ /* This is very awkward since the requested values are available
+ * immediately in the window structure. However, this round about way of
+ * doing things makes the single user interface bug-for-bug compatible with
+ * the multi-user interface.
+ */
+
+ nxfe_reportposition((FAR struct nxbe_window_s *)hwnd);
+ return OK;
+}
diff --git a/nuttx/graphics/nxsu/nx_getrectangle.c b/nuttx/graphics/nxsu/nx_getrectangle.c
new file mode 100644
index 000000000..472ff4c6c
--- /dev/null
+++ b/nuttx/graphics/nxsu/nx_getrectangle.c
@@ -0,0 +1,110 @@
+/****************************************************************************
+ * graphics/nxsu/nx_getrectangle.c
+ *
+ * Copyright (C) 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <mqueue.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nx_getrectangle
+ *
+ * Description:
+ * Get the raw contents of graphic memory within a rectangular region. NOTE:
+ * Since raw graphic memory is returned, the returned memory content may be
+ * the memory of windows above this one and may not necessarily belong to
+ * this window unless you assure that this is the top window.
+ *
+ * Input Parameters:
+ * wnd - The window structure reference
+ * rect - The location to be copied
+ * plane - Specifies the color plane to get from.
+ * dest - The location to copy the memory region
+ * deststride - The width, in bytes, the the dest memory
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nx_getrectangle(NXWINDOW hwnd, FAR const struct nxgl_rect_s *rect,
+ unsigned int plane, FAR uint8_t *dest,
+ unsigned int deststride)
+{
+#ifdef CONFIG_DEBUG
+ if (!hwnd || !rect || !dest)
+ {
+ set_errno(EINVAL);
+ return ERROR;
+ }
+#endif
+
+ nxbe_getrectangle((FAR struct nxbe_window_s *)hwnd, rect, plane,
+ dest, deststride);
+ return OK;
+}
diff --git a/nuttx/graphics/nxsu/nx_kbdchin.c b/nuttx/graphics/nxsu/nx_kbdchin.c
new file mode 100644
index 000000000..7ecea5db9
--- /dev/null
+++ b/nuttx/graphics/nxsu/nx_kbdchin.c
@@ -0,0 +1,101 @@
+/****************************************************************************
+ * graphics/nxsu/nx_kbdchin.c
+ *
+ * Copyright (C) 2008-2009 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdint.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include "nxfe.h"
+
+#ifdef CONFIG_NX_KBD
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nx_kbdchin
+ *
+ * Description:
+ * Used by a thread or interrupt handler that manages some kind of keypad
+ * hardware to report text information to the NX server. That text
+ * data will be routed by the NX server to the appropriate window client.
+ *
+ ****************************************************************************/
+
+int nx_kbdchin(NXHANDLE handle, uint8_t ch)
+{
+ FAR struct nxfe_state_s *fe = (FAR struct nxfe_state_s *)handle;
+ FAR struct nxbe_window_s *wnd = fe->be.topwnd;
+
+ /* Give the keypad event only to the top window (unless the top window
+ * is the background window).
+ */
+
+ if (wnd->cb->kbdin)
+ {
+ wnd->cb->kbdin(wnd, 1, &ch, wnd->arg);
+ }
+ return OK;
+}
+
+#endif /* CONFIG_NX_KBD */
diff --git a/nuttx/graphics/nxsu/nx_kbdin.c b/nuttx/graphics/nxsu/nx_kbdin.c
new file mode 100644
index 000000000..9fc8460bd
--- /dev/null
+++ b/nuttx/graphics/nxsu/nx_kbdin.c
@@ -0,0 +1,100 @@
+/****************************************************************************
+ * graphics/nxsu/nx_kbdin.c
+ *
+ * Copyright (C) 2008-2009 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdint.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include "nxfe.h"
+
+#ifdef CONFIG_NX_KBD
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nx_kbdin
+ *
+ * Description:
+ * Used by a thread or interrupt handler that manages some kind of keypad
+ * hardware to report text information to the NX server.
+ *
+ ****************************************************************************/
+
+int nx_kbdin(NXHANDLE handle, uint8_t nch, FAR const uint8_t *ch)
+{
+ FAR struct nxfe_state_s *fe = (FAR struct nxfe_state_s *)handle;
+ FAR struct nxbe_window_s *wnd = fe->be.topwnd;
+
+ /* Give the keypad event only to the top window (unless the top child
+ * is the background window).
+ */
+
+ if (wnd->cb->kbdin)
+ {
+ wnd->cb->kbdin(wnd, nch, ch, wnd->arg);
+ }
+ return OK;
+}
+
+#endif /* CONFIG_NX_KBD */
diff --git a/nuttx/graphics/nxsu/nx_lower.c b/nuttx/graphics/nxsu/nx_lower.c
new file mode 100644
index 000000000..dbfd278c4
--- /dev/null
+++ b/nuttx/graphics/nxsu/nx_lower.c
@@ -0,0 +1,99 @@
+/****************************************************************************
+ * graphics/nxsu/nx_lower.c
+ *
+ * Copyright (C) 2008-2009 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nx_raise
+ *
+ * Description:
+ * Lower the specified window to the bottom of the display.
+ *
+ * Input parameters:
+ * hwnd - the window to be lowered
+ *
+ * Returned value:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nx_lower(NXWINDOW hwnd)
+{
+#ifdef CONFIG_DEBUG
+ if (!hwnd)
+ {
+ errno = EINVAL;
+ return ERROR;
+ }
+#endif
+
+ nxbe_lower((FAR struct nxbe_window_s *)hwnd);
+ return OK;
+}
+
diff --git a/nuttx/graphics/nxsu/nx_mousein.c b/nuttx/graphics/nxsu/nx_mousein.c
new file mode 100644
index 000000000..bee4a2265
--- /dev/null
+++ b/nuttx/graphics/nxsu/nx_mousein.c
@@ -0,0 +1,200 @@
+/****************************************************************************
+ * graphics/nxsu/nx_mousein.c
+ *
+ * Copyright (C) 2008-2009, 2011-2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdint.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nxglib.h>
+#include <nuttx/nx/nx.h>
+
+#include "nxfe.h"
+
+#ifdef CONFIG_NX_MOUSE
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+static struct nxgl_point_s g_mpos;
+static struct nxgl_point_s g_mrange;
+static uint8_t g_mbutton;
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxsu_mouseinit
+ *
+ * Description:
+ * Initialize with the mouse in the center of the display
+ *
+ ****************************************************************************/
+
+void nxsu_mouseinit(int x, int y)
+{
+ g_mrange.x = x;
+ g_mrange.y = y;
+ g_mpos.x = x / 2;
+ g_mpos.y = y / 2;
+ g_mbutton = 0;
+}
+
+/****************************************************************************
+ * Name: nxsu_mousereport
+ *
+ * Description:
+ * Report mouse position info to the specified window
+ *
+ * Input Parameters:
+ * wnd - The window to receive the mouse report
+ *
+ * Returned Value:
+ * 0: Mouse report sent; >0: Mouse report not sent; <0: An error occurred
+ *
+ ****************************************************************************/
+
+int nxsu_mousereport(struct nxbe_window_s *wnd)
+{
+ struct nxgl_point_s relpos;
+
+ /* Does this window support mouse callbacks? */
+
+ if (wnd->cb->mousein)
+ {
+ /* Yes.. Is the mouse position visible in this window? */
+
+ if (nxbe_visible(wnd, &g_mpos))
+ {
+ /* Yes... Convert the mouse position to window relative coordinates */
+
+ nxgl_vectsubtract(&relpos, &g_mpos, &wnd->bounds.pt1);
+ wnd->cb->mousein((NXWINDOW)wnd, &relpos, g_mbutton, wnd->arg);
+ return OK;
+ }
+ }
+
+ /* No error occurred, but the mouse report was not sent */
+
+ return 1;
+}
+
+/****************************************************************************
+ * Name: nx_mousein
+ *
+ * Description:
+ * Used by a thread or interrupt handler that manages some kind of pointing
+ * hardware to report new positional data to the NX server. That positional
+ * data will be routed by the NX server to the appropriate window client.
+ *
+ ****************************************************************************/
+
+int nx_mousein(NXHANDLE handle, nxgl_coord_t x, nxgl_coord_t y, uint8_t buttons)
+{
+ FAR struct nxfe_state_s *fe = (FAR struct nxfe_state_s *)handle;
+ struct nxbe_window_s *wnd;
+ int ret;
+
+ /* Clip x and y to within the bounding rectangle */
+
+ if (x < 0)
+ {
+ x = 0;
+ }
+ else if (x >= g_mrange.x)
+ {
+ x = g_mrange.x - 1;
+ }
+
+ if (y < 0)
+ {
+ y = 0;
+ }
+ else if (y >= g_mrange.y)
+ {
+ y = g_mrange.y - 1;
+ }
+
+ /* Look any change in values */
+
+ if (x != g_mpos.x || y != g_mpos.y || buttons != g_mbutton)
+ {
+ /* Update the mouse value */
+
+ g_mpos.x = x;
+ g_mpos.y = y;
+ g_mbutton = buttons;
+
+ /* Pick the window to receive the mouse event. Start with
+ * the top window and go down. Step with the first window
+ * that gets the mouse report
+ */
+
+ for (wnd = fe->be.topwnd; wnd; wnd = wnd->below)
+ {
+ ret = nxsu_mousereport(wnd);
+ if (ret == 0)
+ {
+ break;
+ }
+ }
+ }
+ return OK;
+}
+
+#endif /* CONFIG_NX_MOUSE */
diff --git a/nuttx/graphics/nxsu/nx_move.c b/nuttx/graphics/nxsu/nx_move.c
new file mode 100644
index 000000000..b16cf3525
--- /dev/null
+++ b/nuttx/graphics/nxsu/nx_move.c
@@ -0,0 +1,101 @@
+/****************************************************************************
+ * graphics/nxsu/nx_move.c
+ *
+ * Copyright (C) 2008-2009 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nx_move
+ *
+ * Description:
+ * Move a rectangular region within the window
+ *
+ * Input Parameters:
+ * hwnd - The window within which the move is to be done
+ * rect - Describes the rectangular region to move
+ * offset - The offset to move the region
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nx_move(NXWINDOW hwnd, FAR const struct nxgl_rect_s *rect,
+ FAR const struct nxgl_point_s *offset)
+{
+#ifdef CONFIG_DEBUG
+ if (!hwnd)
+ {
+ errno = EINVAL;
+ return ERROR;
+ }
+#endif
+
+ nxbe_move((FAR struct nxbe_window_s *)hwnd, rect, offset);
+ return OK;
+}
diff --git a/nuttx/graphics/nxsu/nx_open.c b/nuttx/graphics/nxsu/nx_open.c
new file mode 100644
index 000000000..f5e07dc5e
--- /dev/null
+++ b/nuttx/graphics/nxsu/nx_open.c
@@ -0,0 +1,218 @@
+/****************************************************************************
+ * graphics/nxsu/nx_open.c
+ *
+ * Copyright (C) 2008-2010 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Function Prototypes
+ ****************************************************************************/
+
+static void nxsu_bkgdredraw(NXWINDOW hwnd,
+ FAR const struct nxgl_rect_s *rect,
+ bool more, FAR void *arg);
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+const struct nx_callback_s g_bkgdcb =
+{
+ nxsu_bkgdredraw, /* redraw */
+ NULL /* position */
+#ifdef CONFIG_NX_MOUSE
+ , NULL /* mousein */
+#endif
+#ifdef CONFIG_NX_KBD
+ , NULL /* my kbdin */
+#endif
+};
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxsu_bkgdredraw
+ ****************************************************************************/
+
+static void nxsu_bkgdredraw(NXWINDOW hwnd,
+ FAR const struct nxgl_rect_s *rect,
+ bool more, FAR void *arg)
+{
+ FAR struct nxbe_window_s *wnd = (FAR struct nxbe_window_s *)hwnd;
+ FAR struct nxbe_state_s *be = wnd->be;
+
+ gvdbg("BG redraw rect={(%d,%d),(%d,%d)}\n",
+ rect->pt1.x, rect->pt1.y, rect->pt2.x, rect->pt2.y);
+ nxbe_fill(wnd, &wnd->bounds, be->bgcolor);
+}
+
+/****************************************************************************
+ * Name: nxsu_setup
+ ****************************************************************************/
+
+static inline int nxsu_setup(FAR NX_DRIVERTYPE *dev,
+ FAR struct nxfe_state_s *fe)
+{
+ int ret;
+
+ /* Configure the framebuffer device */
+
+ ret = nxbe_configure(dev, &fe->be);
+ if (ret < 0)
+ {
+ gdbg("nxbe_configure failed: %d\n", -ret);
+ errno = -ret;
+ return ERROR;
+ }
+
+#if CONFIG_FB_CMAP
+ ret = nxbe_colormap(dev);
+ if (ret < 0)
+ {
+ gdbg("nxbe_colormap failed: %d\n", -ret);
+ errno = -ret;
+ return ERROR;
+ }
+#endif
+
+ /* Initialize the non-NULL elements of the back-end structure window */
+ /* Initialize the background window */
+
+ fe->be.bkgd.be = &fe->be;
+ fe->be.bkgd.cb = &g_bkgdcb;
+
+ fe->be.bkgd.bounds.pt2.x = fe->be.vinfo.xres - 1;
+ fe->be.bkgd.bounds.pt2.y = fe->be.vinfo.yres - 1;
+
+ /* Complete initialization of the server state structure. The
+ * window list contains only one element: The background window
+ * with nothing else above or below it
+ */
+
+ fe->be.topwnd = &fe->be.bkgd;
+
+ /* Initialize the mouse position */
+
+#ifdef CONFIG_NX_MOUSE
+ nxsu_mouseinit(fe->be.vinfo.xres, fe->be.vinfo.yres);
+#endif
+ return OK;
+}
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nx_open
+ *
+ * Description:
+ * Create, initialize and return an NX handle for use in subsequent
+ * NX API calls. nx_open is the single user equivalent of nx_connect
+ * plus nx_run.
+ *
+ * Input Parameters:
+ * dev - Vtable "object" of the framebuffer/LCD "driver" to use
+ *
+ * Return:
+ * Success: A non-NULL handle used with subsequent NX accesses
+ * Failure: NULL is returned and errno is set appropriately
+ *
+ ****************************************************************************/
+
+NXHANDLE nx_open(FAR NX_DRIVERTYPE *dev)
+{
+ FAR struct nxfe_state_s *fe;
+ int ret;
+
+ /* Sanity checking */
+
+#ifdef CONFIG_DEBUG
+ if (!dev)
+ {
+ errno = EINVAL;
+ return NULL;
+ }
+#endif
+
+ /* Allocate the NX state structure */
+
+ fe = (FAR struct nxfe_state_s *)zalloc(sizeof(struct nxfe_state_s));
+ if (!fe)
+ {
+ errno = ENOMEM;
+ return NULL;
+ }
+
+ /* Initialize and configure the server */
+
+ ret = nxsu_setup(dev, fe);
+ if (ret < 0)
+ {
+ return NULL; /* nxsu_setup sets errno */
+ }
+
+ /* Fill the initial background window */
+
+ nxbe_fill(&fe->be.bkgd, &fe->be.bkgd.bounds, fe->be.bgcolor);
+ return (NXHANDLE)fe;
+}
+
diff --git a/nuttx/graphics/nxsu/nx_openwindow.c b/nuttx/graphics/nxsu/nx_openwindow.c
new file mode 100644
index 000000000..64f4ed76d
--- /dev/null
+++ b/nuttx/graphics/nxsu/nx_openwindow.c
@@ -0,0 +1,127 @@
+/****************************************************************************
+ * graphics/nxsu/nx_openwindow.c
+ *
+ * Copyright (C) 2008-2009, 2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdlib.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nx_openwindow
+ *
+ * Description:
+ * Create a new window.
+ *
+ * Input Parameters:
+ * handle - The handle returned by nx_connect
+ * cb - Callbacks used to process windo events
+ * arg - User provided value that will be returned with NX callbacks.
+ *
+ * Return:
+ * Success: A non-NULL handle used with subsequent NX accesses
+ * Failure: NULL is returned and errno is set appropriately
+ *
+ ****************************************************************************/
+
+NXWINDOW nx_openwindow(NXHANDLE handle, FAR const struct nx_callback_s *cb,
+ FAR void *arg)
+{
+ FAR struct nxbe_window_s *wnd;
+ int ret;
+
+#ifdef CONFIG_DEBUG
+ if (!handle || !cb)
+ {
+ errno = EINVAL;
+ return NULL;
+ }
+#endif
+
+ /* Pre-allocate the window structure */
+
+ wnd = (FAR struct nxbe_window_s *)zalloc(sizeof(struct nxbe_window_s));
+ if (!wnd)
+ {
+ errno = ENOMEM;
+ return NULL;
+ }
+
+ /* Then let nxfe_constructwindow do the rest */
+
+ ret = nxfe_constructwindow(handle, wnd, cb, arg);
+ if (ret < 0)
+ {
+ /* An error occurred, the window has been freed */
+
+ return NULL;
+ }
+
+ /* Return the initialized window reference */
+
+ return (NXWINDOW)wnd;
+}
+
diff --git a/nuttx/graphics/nxsu/nx_raise.c b/nuttx/graphics/nxsu/nx_raise.c
new file mode 100644
index 000000000..cf4e38b64
--- /dev/null
+++ b/nuttx/graphics/nxsu/nx_raise.c
@@ -0,0 +1,99 @@
+/****************************************************************************
+ * graphics/nxsu/nx_raise.c
+ *
+ * Copyright (C) 2008-2009 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nx_raise
+ *
+ * Description:
+ * Bring the specified window to the top of the display.
+ *
+ * Input parameters:
+ * hwnd - the window to be raised
+ *
+ * Returned value:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nx_raise(NXWINDOW hwnd)
+{
+#ifdef CONFIG_DEBUG
+ if (!hwnd)
+ {
+ errno = EINVAL;
+ return ERROR;
+ }
+#endif
+
+ nxbe_raise((FAR struct nxbe_window_s *)hwnd);
+ return OK;
+}
+
diff --git a/nuttx/graphics/nxsu/nx_releasebkgd.c b/nuttx/graphics/nxsu/nx_releasebkgd.c
new file mode 100644
index 000000000..b0cbbf5c1
--- /dev/null
+++ b/nuttx/graphics/nxsu/nx_releasebkgd.c
@@ -0,0 +1,109 @@
+/****************************************************************************
+ * graphics/nxsu/nx_releasebkgd.c
+ *
+ * Copyright (C) 2008-2009 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nx_releasebkgd
+ *
+ * Description:
+ * Release the background window previously acquired using nx_openbgwindow
+ * and return control of the background to NX.
+ *
+ * Input Parameters:
+ * hwnd - The handle returned (indirectly) by nx_requestbkgd
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nx_releasebkgd(NXWINDOW hwnd)
+{
+ FAR struct nxbe_window_s *bkgd = (FAR struct nxbe_window_s *)hwnd;
+
+#ifdef CONFIG_DEBUG
+ if (!bkgd)
+ {
+ errno = EINVAL;
+ return ERROR;
+ }
+#endif
+
+ /* Restore the NX background window callbacks */
+
+ bkgd->cb = &g_bkgdcb;
+ bkgd->arg = NULL;
+
+ /* Redraw the background window */
+
+ nxfe_redrawreq(bkgd, &bkgd->bounds);
+ return OK;
+}
+
diff --git a/nuttx/graphics/nxsu/nx_requestbkgd.c b/nuttx/graphics/nxsu/nx_requestbkgd.c
new file mode 100644
index 000000000..5bd4554bc
--- /dev/null
+++ b/nuttx/graphics/nxsu/nx_requestbkgd.c
@@ -0,0 +1,155 @@
+/****************************************************************************
+ * graphics/nxsu/nx_requestbkgd.c
+ *
+ * Copyright (C) 2008-2009 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nx_requestbkgd
+ *
+ * Description:
+ * NX normally controls a separate window called the background window.
+ * It repaints the window as necessary using only a solid color fill. The
+ * background window always represents the entire screen and is always
+ * below other windows. It is useful for an application to control the
+ * background window in the following conditions:
+ *
+ * - If you want to implement a windowless solution. The single screen
+ * can be used to creat a truly simple graphic environment. In this
+ * case, you should probably also de-select CONFIG_NX_MULTIUSER as well.
+ * - When you want more on the background than a solid color. For
+ * example, if you want an image in the background, or animations in the
+ * background, or live video, etc.
+ *
+ * This API only requests the handle of the background window. That
+ * handle will be returned asynchronously in a subsequent position and
+ * redraw callbacks.
+ *
+ * Cautions:
+ * - The following should never be called using the background window.
+ * They are guaranteed to cause severe crashes:
+ *
+ * nx_setposition, nx_setsize, nx_raise, nx_lower.
+ *
+ * - Neither nx_opengbwindow or nx_closebgwindow should be called more than
+ * once. Multiple instances of the background window are not supported.
+ *
+ * Input Parameters:
+ * handle - The handle returned by nx_connect
+ * cb - Callbacks to use for processing background window events
+ * arg - User provided argument (see nx_openwindow, nx_constructwindow)
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nx_requestbkgd(NXHANDLE handle, FAR const struct nx_callback_s *cb,
+ FAR void *arg)
+{
+ FAR struct nxfe_state_s *fe = (FAR struct nxfe_state_s *)handle;
+ FAR struct nxbe_state_s *be = &fe->be;
+
+#ifdef CONFIG_DEBUG
+ if (!fe || !cb)
+ {
+ errno = EINVAL;
+ return ERROR;
+ }
+#endif
+
+ /* Replace the NX background windo callbacks with the client's callbacks */
+
+ be->bkgd.cb = cb;
+ be->bkgd.arg = arg;
+
+ /* Report the size/position of the background window to the client */
+
+ nxfe_reportposition((NXWINDOW)&be->bkgd);
+
+ /* Redraw the background window */
+
+ nxfe_redrawreq(&be->bkgd, &be->bkgd.bounds);
+
+ /* Provide the mouse settings to the client */
+
+#ifdef CONFIG_NX_MOUSE
+ nxsu_mousereport(&be->bkgd);
+#endif
+
+ /* In this single-user mode, we could return the background window
+ * handle here. However, we cannot do that in the multi-user case
+ * because that handle is known only to the server. Instead, the
+ * background window handle is returned to the client via a redraw
+ * callback. So we will do the same in the single-user case for
+ * compatibility.
+ */
+
+ return OK;
+}
+
diff --git a/nuttx/graphics/nxsu/nx_setbgcolor.c b/nuttx/graphics/nxsu/nx_setbgcolor.c
new file mode 100644
index 000000000..d8c2159ef
--- /dev/null
+++ b/nuttx/graphics/nxsu/nx_setbgcolor.c
@@ -0,0 +1,103 @@
+/****************************************************************************
+ * graphics/nxsu/nx_setbgcolor.c
+ *
+ * Copyright (C) 2008-2009 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nx_setbgcolor
+ *
+ * Description:
+ * Set the color of the background
+ *
+ * Input Parameters:
+ * handle - The connection handle
+ * color - The color to use in the background
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nx_setbgcolor(NXHANDLE handle,
+ nxgl_mxpixel_t color[CONFIG_NX_NPLANES])
+{
+ FAR struct nxfe_state_s *fe = (FAR struct nxfe_state_s *)handle;
+
+#ifdef CONFIG_DEBUG
+ if (!fe)
+ {
+ errno = EINVAL;
+ return ERROR;
+ }
+#endif
+
+ nxgl_colorcopy(fe->be.bgcolor, color);
+ nxbe_fill(&fe->be.bkgd, &fe->be.bkgd.bounds, color);
+ return OK;
+}
diff --git a/nuttx/graphics/nxsu/nx_setpixel.c b/nuttx/graphics/nxsu/nx_setpixel.c
new file mode 100644
index 000000000..533e3b623
--- /dev/null
+++ b/nuttx/graphics/nxsu/nx_setpixel.c
@@ -0,0 +1,104 @@
+/****************************************************************************
+ * graphics/nxsu/nx_setpixel.c
+ *
+ * Copyright (C) 2008-2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <mqueue.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nx_setpixel
+ *
+ * Description:
+ * Set a single pixel in the window to the specified color. This is simply
+ * a degenerate case of nx_fill(), but may be optimized in some architectures.
+ *
+ * Input Parameters:
+ * wnd - The window structure reference
+ * pos - The pixel location to be set
+ * col - The color to use in the set
+ *
+ * Return:
+ * None
+ *
+ ****************************************************************************/
+
+int nx_setpixel(NXWINDOW hwnd, FAR const struct nxgl_point_s *pos,
+ nxgl_mxpixel_t color[CONFIG_NX_NPLANES])
+{
+#ifdef CONFIG_DEBUG
+ if (!hwnd || !pos || !color)
+ {
+ errno = EINVAL;
+ return ERROR;
+ }
+#endif
+
+ nxbe_setpixel((FAR struct nxbe_window_s *)hwnd, pos, color);
+ return 0;
+}
diff --git a/nuttx/graphics/nxsu/nx_setposition.c b/nuttx/graphics/nxsu/nx_setposition.c
new file mode 100644
index 000000000..ed0e5e3f4
--- /dev/null
+++ b/nuttx/graphics/nxsu/nx_setposition.c
@@ -0,0 +1,99 @@
+/****************************************************************************
+ * graphics/nxsu/nx_setposition.c
+ *
+ * Copyright (C) 2008-2009, 2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nx_setposition
+ *
+ * Description:
+ * Set the position and size for the selected window
+ *
+ * Input Parameters:
+ * hwnd - The window handle
+ * pos - The new position of the window
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nx_setposition(NXWINDOW hwnd, FAR const struct nxgl_point_s *pos)
+{
+#ifdef CONFIG_DEBUG
+ if (!hwnd || !pos)
+ {
+ errno = EINVAL;
+ return ERROR;
+ }
+#endif
+
+ nxbe_setposition((FAR struct nxbe_window_s *)hwnd, pos);
+ return OK;
+}
diff --git a/nuttx/graphics/nxsu/nx_setsize.c b/nuttx/graphics/nxsu/nx_setsize.c
new file mode 100644
index 000000000..171e26fae
--- /dev/null
+++ b/nuttx/graphics/nxsu/nx_setsize.c
@@ -0,0 +1,99 @@
+/****************************************************************************
+ * graphics/nxsu/nx_setsize.c
+ *
+ * Copyright (C) 2008-2009 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nx_setsize
+ *
+ * Description:
+ * Set the size of the selected window
+ *
+ * Input Parameters:
+ * hwnd - The window handle
+ * size - The new size of the window.
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nx_setsize(NXWINDOW hwnd, FAR const struct nxgl_size_s *size)
+{
+#ifdef CONFIG_DEBUG
+ if (!hwnd || !size)
+ {
+ errno = EINVAL;
+ return ERROR;
+ }
+#endif
+
+ nxbe_setsize((FAR struct nxbe_window_s *)hwnd, size);
+ return OK;
+}
diff --git a/nuttx/graphics/nxsu/nxfe.h b/nuttx/graphics/nxsu/nxfe.h
new file mode 100644
index 000000000..59f5b7e61
--- /dev/null
+++ b/nuttx/graphics/nxsu/nxfe.h
@@ -0,0 +1,185 @@
+/****************************************************************************
+ * graphics/nxsu/nxfe.h
+ *
+ * Copyright (C) 2008-2010 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+#ifndef __GRAPHICS_NXSU_NXFE_H
+#define __GRAPHICS_NXSU_NXFE_H
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <mqueue.h>
+#include <semaphore.h>
+
+#include <nuttx/nx/nx.h>
+
+#include "nxbe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Types
+ ****************************************************************************/
+
+/* Server state structure ***************************************************/
+
+/* This the server 'front-end' state structure. It is really the same
+ * as the back-end state, but we wrap the back-end state so that we can add
+ * things to the structure in the future
+ */
+
+struct nxfe_state_s
+{
+ /* The 'back-end' window status. Must be first so that instances of
+ * struct nxbe_state_s can be simply cast to an instance of struct
+ * nxfe_state_s
+ */
+
+ struct nxbe_state_s be;
+};
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+#define EXTERN extern "C"
+extern "C" {
+#else
+#define EXTERN extern
+#endif
+
+EXTERN const struct nx_callback_s g_bkgdcb;
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxfe_constructwindow
+ *
+ * Description:
+ * This function is the same a nx_openwindow EXCEPT that the client provides
+ * the window structure instance. nx_constructwindow will initialize the
+ * the pre-allocated window structure for use by NX. This function is
+ * provided in addition to nx_open window in order to support a kind of
+ * inheritance: The caller's window structure may include extensions that
+ * are not visible to NX.
+ *
+ * NOTE: wnd must have been allocated using malloc() (or related allocators)
+ * Once provided to nxfe_constructwindow() that memory is owned and managed
+ * by NX. On certain error conditions or when the window is closed, NX will
+ * free() the window.
+ *
+ * Input Parameters:
+ * handle - The handle returned by nx_connect
+ * wnd - The pre-allocated window structure.
+ * cb - Callbacks used to process window events
+ * arg - User provided value that will be returned with NX callbacks.
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately. In the
+ * case of ERROR, NX will have dealloated the pre-allocated window.
+ *
+ ****************************************************************************/
+
+EXTERN int nxfe_constructwindow(NXHANDLE handle,
+ FAR struct nxbe_window_s *wnd,
+ FAR const struct nx_callback_s *cb,
+ FAR void *arg);
+
+/****************************************************************************
+ * Name: nxfe_redrawreq
+ *
+ * Descripton:
+ * Request the client that has this window to redraw the rectangular region.
+ *
+ ****************************************************************************/
+
+EXTERN void nxfe_redrawreq(FAR struct nxbe_window_s *wnd,
+ FAR const struct nxgl_rect_s *rect);
+
+/****************************************************************************
+ * Name: nxfe_reportposition
+ *
+ * Descripton:
+ * Report the new size/position of the window.
+ *
+ ****************************************************************************/
+
+EXTERN void nxfe_reportposition(FAR struct nxbe_window_s *wnd);
+
+/****************************************************************************
+ * Name: nxmu_mouseinit
+ *
+ * Description:
+ * Initialize with the mouse in the center of the display
+ *
+ ****************************************************************************/
+
+#ifdef CONFIG_NX_MOUSE
+EXTERN void nxsu_mouseinit(int x, int y);
+#endif
+
+/****************************************************************************
+ * Name: nxmu_mousereport
+ *
+ * Description:
+ * Report mouse position info to the specified window
+ *
+ * Input Parameters:
+ * wnd - The window to receive the mouse report
+ *
+ * Returned Value:
+ * 0: Mouse report sent; >0: Mouse report not sent; <0: An error occurred
+ *
+ ****************************************************************************/
+
+#ifdef CONFIG_NX_MOUSE
+EXTERN int nxsu_mousereport(struct nxbe_window_s *wnd);
+#endif
+
+#undef EXTERN
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* __GRAPHICS_NXSU_NXFE_H */
+
diff --git a/nuttx/graphics/nxsu/nxsu_constructwindow.c b/nuttx/graphics/nxsu/nxsu_constructwindow.c
new file mode 100644
index 000000000..f812b3f83
--- /dev/null
+++ b/nuttx/graphics/nxsu/nxsu_constructwindow.c
@@ -0,0 +1,150 @@
+/****************************************************************************
+ * graphics/nxsu/nx_openwindow.c
+ *
+ * Copyright (C) 2008-2009, 2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdlib.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxfe_constructwindow
+ *
+ * Description:
+ * This function is the same a nx_openwindow EXCEPT that the client provides
+ * the window structure instance. nx_constructwindow will initialize the
+ * the pre-allocated window structure for use by NX. This function is
+ * provided in addition to nx_open window in order to support a kind of
+ * inheritance: The caller's window structure may include extensions that
+ * are not visible to NX.
+ *
+ * NOTE: wnd must have been allocated using malloc() (or related allocators)
+ * Once provided to nxfe_constructwindow() that memory is owned and managed
+ * by NX. On certain error conditions or when the window is closed, NX will
+ * free() the window.
+ *
+ * Input Parameters:
+ * handle - The handle returned by nx_connect
+ * wnd - The pre-allocated window structure.
+ * cb - Callbacks used to process window events
+ * arg - User provided value that will be returned with NX callbacks.
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately. In the
+ * case of ERROR, NX will have dealloated the pre-allocated window.
+ *
+ ****************************************************************************/
+
+int nxfe_constructwindow(NXHANDLE handle, FAR struct nxbe_window_s *wnd,
+ FAR const struct nx_callback_s *cb, FAR void *arg)
+{
+ FAR struct nxfe_state_s *fe = (FAR struct nxfe_state_s *)handle;
+ FAR struct nxbe_state_s *be = &fe->be;
+
+#ifdef CONFIG_DEBUG
+ if (!wnd)
+ {
+ errno = EINVAL;
+ return ERROR;
+ }
+
+ if (!fe || !cb)
+ {
+ free(wnd);
+ errno = EINVAL;
+ return ERROR;
+ }
+#endif
+
+ /* Initialize the window structure */
+
+ wnd->be = be;
+ wnd->cb = cb;
+ wnd->arg = arg;
+
+ /* Insert the new window at the top on the display. topwnd is
+ * never NULL (it may point only at the background window, however)
+ */
+
+ wnd->above = NULL;
+ wnd->below = be->topwnd;
+
+ be->topwnd->above = wnd;
+ be->topwnd = wnd;
+
+ /* Report the initialize size/position of the window */
+
+ nxfe_reportposition((NXWINDOW)wnd);
+
+ /* Provide the initial mouse settings */
+
+#ifdef CONFIG_NX_MOUSE
+ nxsu_mousereport(wnd);
+#endif
+
+ return OK;
+}
+
diff --git a/nuttx/graphics/nxsu/nxsu_redrawreq.c b/nuttx/graphics/nxsu/nxsu_redrawreq.c
new file mode 100644
index 000000000..9efa828a5
--- /dev/null
+++ b/nuttx/graphics/nxsu/nxsu_redrawreq.c
@@ -0,0 +1,104 @@
+/****************************************************************************
+ * graphics/nxsu/nxsu_redrawreq.c
+ *
+ * Copyright (C) 2008-2009 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdbool.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxfe_redrawreq
+ *
+ * Descripton:
+ * Request the client that has this window to redraw the rectangular region.
+ *
+ ****************************************************************************/
+
+void nxfe_redrawreq(FAR struct nxbe_window_s *wnd, FAR const struct nxgl_rect_s *rect)
+{
+ struct nxgl_rect_s relrect;
+
+#ifdef CONFIG_DEBUG
+ if (!wnd)
+ {
+ return;
+ }
+#endif
+
+ if (wnd->cb->redraw)
+ {
+ /* Convert the frame rectangle to a window-relative rectangle */
+
+ nxgl_rectoffset(&relrect, rect, -wnd->bounds.pt1.x, -wnd->bounds.pt1.y);
+
+ /* And request the redraw */
+
+ wnd->cb->redraw((NXWINDOW)wnd, &relrect, false, wnd->arg);
+ }
+}
+
+
diff --git a/nuttx/graphics/nxsu/nxsu_reportposition.c b/nuttx/graphics/nxsu/nxsu_reportposition.c
new file mode 100644
index 000000000..d87dac0f6
--- /dev/null
+++ b/nuttx/graphics/nxsu/nxsu_reportposition.c
@@ -0,0 +1,107 @@
+/****************************************************************************
+ * graphics/nxsu/nxsu_reportposition.c
+ *
+ * Copyright (C) 2008-2009,2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxfe_reportposition
+ *
+ * Descripton:
+ * Report the new size/position of the window.
+ *
+ ****************************************************************************/
+
+void nxfe_reportposition(FAR struct nxbe_window_s *wnd)
+{
+ FAR struct nxbe_state_s *be;
+ struct nxgl_size_s size;
+
+#ifdef CONFIG_DEBUG
+ if (!wnd)
+ {
+ return;
+ }
+#endif
+ be = wnd->be;
+
+ /* This is very awkward in single user mode, but at least it is compatible.
+ * with the way things are done in multiple user mode.
+ */
+
+ if (wnd->cb->position)
+ {
+ /* Get the size of the bounding rectangle */
+
+ nxgl_rectsize(&size, &wnd->bounds);
+
+ /* And provide this to the client */
+
+ wnd->cb->position(wnd, &size, &wnd->bounds.pt1, &be->bkgd.bounds, wnd->arg);
+ }
+}
diff --git a/nuttx/graphics/nxtk/Make.defs b/nuttx/graphics/nxtk/Make.defs
new file mode 100644
index 000000000..cc744309f
--- /dev/null
+++ b/nuttx/graphics/nxtk/Make.defs
@@ -0,0 +1,48 @@
+############################################################################
+# graphics/nxtk/Make.defs
+#
+# Copyright (C) 2008, 2011 Gregory Nutt. All rights reserved.
+# Author: Gregory Nutt <gnutt@nuttx.org>
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in
+# the documentation and/or other materials provided with the
+# distribution.
+# 3. Neither the name NuttX nor the names of its contributors may be
+# used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+############################################################################
+
+NXTK_ASRCS =
+NXTKWIN_CSRCS = nxtk_openwindow.c nxtk_closewindow.c nxtk_getposition.c \
+ nxtk_setposition.c nxtk_setsize.c nxtk_raise.c nxtk_lower.c \
+ nxtk_fillwindow.c nxtk_getwindow.c nxtk_filltrapwindow.c \
+ nxtk_movewindow.c nxtk_bitmapwindow.c nxtk_events.c \
+ nxtk_setsubwindows.c nxtk_drawcirclewindow.c nxtk_drawlinewindow.c \
+ nxtk_fillcirclewindow.c nxtk_block.c
+NXTKTB_CSRCS = nxtk_opentoolbar.c nxtk_closetoolbar.c nxtk_filltoolbar.c \
+ nxtk_gettoolbar.c nxtk_filltraptoolbar.c nxtk_movetoolbar.c \
+ nxtk_bitmaptoolbar.c nxtk_drawcircletoolbar.c nxtk_drawlinetoolbar.c \
+ nxtk_fillcircletoolbar.c nxtk_toolbarbounds.c
+NXTK_CSRCS = $(NXTKWIN_CSRCS) $(NXTKTB_CSRCS) nxtk_subwindowclip.c \
+ nxtk_containerclip.c nxtk_subwindowmove.c nxtk_drawframe.c
diff --git a/nuttx/graphics/nxtk/nxtk_bitmaptoolbar.c b/nuttx/graphics/nxtk/nxtk_bitmaptoolbar.c
new file mode 100644
index 000000000..50bd5aff4
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_bitmaptoolbar.c
@@ -0,0 +1,137 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_bitmaptoolbar.c
+ *
+ * Copyright (C) 2008-2009, 2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxtk.h>
+
+#include "nxtk_internal.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_bitmaptoolbar
+ *
+ * Description:
+ * Copy a rectangular region of a larger image into the rectangle in the
+ * specified toolbar sub-window.
+ *
+ * Input Parameters:
+ * hfwnd - The sub-window twhose toolbar will receive the bitmap image
+ * dest - Describes the rectangular region on in the toolbar sub-window
+ * will receive the bit map.
+ * src - The start of the source image.
+ * origin - The origin of the upper, left-most corner of the full bitmap.
+ * Both dest and origin are in sub-window coordinates, however, the
+ * origin may lie outside of the sub-window display.
+ * stride - The width of the full source image in pixels.
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxtk_bitmaptoolbar(NXTKWINDOW hfwnd, FAR const struct nxgl_rect_s *dest,
+ FAR const void *src[CONFIG_NX_NPLANES],
+ FAR const struct nxgl_point_s *origin, unsigned int stride)
+{
+ FAR struct nxtk_framedwindow_s *fwnd = (FAR struct nxtk_framedwindow_s *)hfwnd;
+ struct nxgl_point_s wndorigin;
+ struct nxgl_rect_s clipdest;
+
+#ifdef CONFIG_DEBUG
+ if (!hfwnd || !dest || !src || !origin)
+ {
+ errno = EINVAL;
+ return ERROR;
+ }
+#endif
+
+ /* Clip the rectangle so that it lies within the sub-window bounds
+ * then move the rectangle to that it is relative to the containing
+ * window.
+ */
+
+ nxtk_subwindowclip(fwnd, &clipdest, dest, &fwnd->tbrect);
+
+ /* Now, move the bitmap origin so that it is relative to the containing
+ * window, not the sub-window.
+ *
+ * Temporarily, position the origin in absolute screen coordinates
+ */
+
+ nxgl_vectoradd(&wndorigin, origin, &fwnd->tbrect.pt1);
+
+ /* Then move the origin so that is relative to the containing window, not the
+ * client subwindow
+ */
+
+ nxgl_vectsubtract(&wndorigin, &wndorigin, &fwnd->wnd.bounds.pt1);
+
+ /* Then copy the bitmap */
+
+ nx_bitmap((NXWINDOW)hfwnd, &clipdest, src, &wndorigin, stride);
+ return OK;
+}
diff --git a/nuttx/graphics/nxtk/nxtk_bitmapwindow.c b/nuttx/graphics/nxtk/nxtk_bitmapwindow.c
new file mode 100644
index 000000000..a439f5f79
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_bitmapwindow.c
@@ -0,0 +1,137 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_bitmapwindow.c
+ *
+ * Copyright (C) 2008-2009, 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nxtk.h>
+#include <nuttx/nx/nx.h>
+
+#include "nxtk_internal.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_bitmapwindow
+ *
+ * Description:
+ * Copy a rectangular region of a larger image into the rectangle in the
+ * specified client sub-window.
+ *
+ * Input Parameters:
+ * hfwnd The client sub0window that will receive the bitmap image
+ * dest - Describes the rectangular region on in the client sub-window
+ * will receive the bit map.
+ * src - The start of the source image.
+ * origin - The origin of the upper, left-most corner of the full bitmap.
+ * Both dest and origin are in sub-window coordinates, however, the
+ * origin may lie outside of the sub-window display.
+ * stride - The width of the full source image in pixels.
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxtk_bitmapwindow(NXTKWINDOW hfwnd, FAR const struct nxgl_rect_s *dest,
+ FAR const void **src,
+ FAR const struct nxgl_point_s *origin, unsigned int stride)
+{
+ FAR struct nxtk_framedwindow_s *fwnd = (FAR struct nxtk_framedwindow_s *)hfwnd;
+ struct nxgl_point_s wndorigin;
+ struct nxgl_rect_s clipdest;
+
+#ifdef CONFIG_DEBUG
+ if (!hfwnd || !dest || !src || !origin)
+ {
+ errno = EINVAL;
+ return ERROR;
+ }
+#endif
+
+ /* Clip the rectangle so that it lies within the sub-window bounds
+ * then move the rectangle to that it is relative to the containing
+ * window.
+ */
+
+ nxtk_subwindowclip(fwnd, &clipdest, dest, &fwnd->fwrect);
+
+ /* Now, move the bitmap origin so that it is relative to the containing
+ * window, not the sub-window.
+ *
+ * Temporarily, position the origin in absolute screen coordinates
+ */
+
+ nxgl_vectoradd(&wndorigin, origin, &fwnd->fwrect.pt1);
+
+ /* Then move the origin so that is relative to the containing window, not the
+ * client subwindow
+ */
+
+ nxgl_vectsubtract(&wndorigin, &wndorigin, &fwnd->wnd.bounds.pt1);
+
+ /* Then copy the bitmap */
+
+ nx_bitmap((NXWINDOW)hfwnd, &clipdest, src, &wndorigin, stride);
+ return OK;
+}
diff --git a/nuttx/graphics/nxtk/nxtk_block.c b/nuttx/graphics/nxtk/nxtk_block.c
new file mode 100644
index 000000000..11baf7f4f
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_block.c
@@ -0,0 +1,109 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_block.c
+ *
+ * Copyright (C) 2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxtk.h>
+
+#include "nxfe.h"
+
+#ifdef CONFIG_NX_MULTIUSER
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_block
+ *
+ * Description:
+ * This is callback will do to things: (1) any queue a 'blocked' callback
+ * to the window and then (2) block any further window messaging.
+ *
+ * The 'blocked' callback is the response from nx_block (or nxtk_block).
+ * Those blocking interfaces are used to assure that no further messages are
+ * are directed to the window. Receipt of the blocked callback signifies
+ * that (1) there are no further pending callbacks and (2) that the
+ * window is now 'defunct' and will receive no further callbacks.
+ *
+ * This callback supports coordinated destruction of a window in multi-
+ * user mode. In multi-use mode, the client window logic must stay
+ * intact until all of the queued callbacks are processed. Then the
+ * window may be safely closed. Closing the window prior with pending
+ * callbacks can lead to bad behavior when the callback is executed.
+ *
+ * Multiple user mode only!
+ *
+ * Input Parameters:
+ * hfwnd - The window to be blocked
+ * arg - An argument that will accompany the block messages (This is arg2
+ * in the blocked callback).
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxtk_block(NXTKWINDOW hfwnd, FAR void *arg)
+{
+ return nx_block((NXWINDOW)hfwnd, arg);
+}
+
+#endif /* CONFIG_NX_MULTIUSER */
diff --git a/nuttx/graphics/nxtk/nxtk_closetoolbar.c b/nuttx/graphics/nxtk/nxtk_closetoolbar.c
new file mode 100644
index 000000000..dff621a44
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_closetoolbar.c
@@ -0,0 +1,111 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_closetoolbar.c
+ *
+ * Copyright (C) 2008-2009 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdlib.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxtk.h>
+
+#include "nxfe.h"
+#include "nxtk_internal.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_closetoolbar
+ *
+ * Description:
+ * Create a tool bar at the top of the specified framed window
+ *
+ * Input Parameters:
+ * hfwnd - The handle returned by nxtk_openwindow
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxtk_closetoolbar(NXTKWINDOW hfwnd)
+{
+ FAR struct nxtk_framedwindow_s *fwnd = (FAR struct nxtk_framedwindow_s *)hfwnd;
+
+ /* Un-initialize the toolbar info */
+
+ fwnd->tbheight = 0;
+ fwnd->tbcb = NULL;
+ fwnd->tbarg = NULL;
+
+ /* Calculate the new dimensions of the client window */
+
+ nxtk_setsubwindows(fwnd);
+
+ /* Then redraw the entire window, even the client window must be
+ * redraw because it has changed its vertical position and size.
+ */
+
+ nxfe_redrawreq(&fwnd->wnd, &fwnd->wnd.bounds);
+ return OK;
+}
+
diff --git a/nuttx/graphics/nxtk/nxtk_closewindow.c b/nuttx/graphics/nxtk/nxtk_closewindow.c
new file mode 100644
index 000000000..e921f669e
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_closewindow.c
@@ -0,0 +1,95 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_closewindow.c
+ *
+ * Copyright (C) 2008 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <sys/types.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxtk.h>
+
+#include "nxfe.h"
+#include "nxtk_internal.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_closewindow
+ *
+ * Description:
+ * Close the window opened by nxtk_openwindow
+ *
+ * Input Parameters:
+ * hfwnd - The handle returned by nxtk_openwindow
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxtk_closewindow(NXTKWINDOW hfwnd)
+{
+ return nx_closewindow((NXWINDOW)hfwnd);
+}
+
diff --git a/nuttx/graphics/nxtk/nxtk_containerclip.c b/nuttx/graphics/nxtk/nxtk_containerclip.c
new file mode 100644
index 000000000..3671851f1
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_containerclip.c
@@ -0,0 +1,122 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_containerclip.c
+ *
+ * Copyright (C) 2008-2009 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdlib.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxtk.h>
+
+#include "nxfe.h"
+#include "nxtk_internal.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_containerclip
+ *
+ * Description:
+ * We are given a 'src' rectangle in containing window, relative coordinates
+ * (i.e., (0,0) is the top left corner of the outer, containing window).
+ * This function will (1) clip that src rectangle so that it lies within
+ * the sub-window bounds, and then (2) move the rectangle to that it is
+ * relative to the sub-window (i.e., (0,0) is the top left corner of the
+ * sub-window).
+ *
+ * Input parameters:
+ * fwnd - The framed window to be used
+ * dest - The locaton to put the result
+ * src - The src rectangle in relative container-window coordinates
+ * bounds - The subwindow bounds in absolute screen coordinates.
+ *
+ * Returned value:
+ * None
+ *
+ ****************************************************************************/
+
+void nxtk_containerclip(FAR struct nxtk_framedwindow_s *fwnd,
+ FAR struct nxgl_rect_s *dest,
+ FAR const struct nxgl_rect_s *src,
+ FAR const struct nxgl_rect_s *bounds)
+{
+ struct nxgl_rect_s relbounds;
+
+ /* The 'src' rectangle is relative to the containing window. Convert
+ * the sub-window to the same origin.
+ */
+
+ nxgl_rectoffset(&relbounds, bounds, -fwnd->wnd.bounds.pt1.x,
+ -fwnd->wnd.bounds.pt1.y);
+
+ /* The interection then leaves the portion of the containing window that
+ * needs to be updated window that needs to be updated.
+ */
+
+ nxgl_rectintersect(dest, src, &relbounds);
+
+ /* Offset this so that is relative to client subwindow origin */
+
+ nxgl_rectoffset(dest, dest, fwnd->wnd.bounds.pt1.x - bounds->pt1.x,
+ fwnd->wnd.bounds.pt1.y - bounds->pt1.y);
+}
diff --git a/nuttx/graphics/nxtk/nxtk_drawcircletoolbar.c b/nuttx/graphics/nxtk/nxtk_drawcircletoolbar.c
new file mode 100644
index 000000000..e9d9ca8ff
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_drawcircletoolbar.c
@@ -0,0 +1,145 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_drawcircletoolbar.c
+ *
+ * Copyright (C) 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <sys/types.h>
+#include <debug.h>
+#include <errno.h>
+
+#include <nuttx/nx/nxglib.h>
+#include <nuttx/nx/nxtk.h>
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+/* Named indices into the 16 circle points generated by nxgl_circlepts */
+
+#define POINT_0p0 0
+#define POINT_22p5 1
+#define POINT_45p0 2
+#define POINT_67p5 3
+#define POINT_90p0 4
+#define POINT_112p5 5
+#define POINT_135p0 6
+#define POINT_157p5 7
+#define POINT_180p0 8
+#define POINT_202p5 9
+#define POINT_225p0 10
+#define POINT_247p5 11
+#define POINT_270p0 12
+#define POINT_292p5 13
+#define POINT_315p0 14
+#define POINT_337p5 15
+#define NCIRCLE_POINTS 16
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_drawcircletoolbar
+ *
+ * Description:
+ * Draw a circular outline using the specified line thickness and color.
+ *
+ * Input Parameters:
+ * hfwnd - The window handle returned by nxtk_openwindow()
+ * center - A pointer to the point that is the center of the circle
+ * radius - The radius of the circle in pixels.
+ * width - The width of the line
+ * color - The color to use to fill the line
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxtk_drawcircletoolbar(NXTKWINDOW hfwnd, FAR const struct nxgl_point_s *center,
+ nxgl_coord_t radius, nxgl_coord_t width,
+ nxgl_mxpixel_t color[CONFIG_NX_NPLANES])
+{
+ struct nxgl_point_s pts[NCIRCLE_POINTS];
+ FAR struct nxgl_vector_s vector;
+ int i;
+ int ret;
+
+ /* Convert the circle to a set of 16 points */
+
+ nxgl_circlepts(center, radius, pts);
+
+ /* Draw each pair of points as a vector */
+
+ for (i = POINT_0p0; i < POINT_337p5; i++)
+ {
+ vector.pt1.x = pts[i].x;
+ vector.pt1.y = pts[i].y;
+ vector.pt2.x = pts[i+1].x;
+ vector.pt2.y = pts[i+1].y;
+ ret = nxtk_drawlinetoolbar(hfwnd, &vector, width, color);
+ if (ret != OK)
+ {
+ return ret;
+ }
+ }
+
+ /* The final, closing vector is a special case */
+
+ vector.pt1.x = pts[POINT_337p5].x;
+ vector.pt1.y = pts[POINT_337p5].y;
+ vector.pt2.x = pts[POINT_0p0].x;
+ vector.pt2.y = pts[POINT_0p0].y;
+ return nxtk_drawlinetoolbar(hfwnd, &vector, width, color);
+}
diff --git a/nuttx/graphics/nxtk/nxtk_drawcirclewindow.c b/nuttx/graphics/nxtk/nxtk_drawcirclewindow.c
new file mode 100644
index 000000000..f70c1c351
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_drawcirclewindow.c
@@ -0,0 +1,145 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_drawcirclewindow.c
+ *
+ * Copyright (C) 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <sys/types.h>
+#include <debug.h>
+#include <errno.h>
+
+#include <nuttx/nx/nxglib.h>
+#include <nuttx/nx/nxtk.h>
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+/* Named indices into the 16 circle points generated by nxgl_circlepts */
+
+#define POINT_0p0 0
+#define POINT_22p5 1
+#define POINT_45p0 2
+#define POINT_67p5 3
+#define POINT_90p0 4
+#define POINT_112p5 5
+#define POINT_135p0 6
+#define POINT_157p5 7
+#define POINT_180p0 8
+#define POINT_202p5 9
+#define POINT_225p0 10
+#define POINT_247p5 11
+#define POINT_270p0 12
+#define POINT_292p5 13
+#define POINT_315p0 14
+#define POINT_337p5 15
+#define NCIRCLE_POINTS 16
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_drawcirclewindow
+ *
+ * Description:
+ * Draw a circular outline using the specified line thickness and color.
+ *
+ * Input Parameters:
+ * hfwnd - The window handle returned by nxtk_openwindow()
+ * center - A pointer to the point that is the center of the circle
+ * radius - The radius of the circle in pixels.
+ * width - The width of the line
+ * color - The color to use to fill the line
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxtk_drawcirclewindow(NXTKWINDOW hfwnd, FAR const struct nxgl_point_s *center,
+ nxgl_coord_t radius, nxgl_coord_t width,
+ nxgl_mxpixel_t color[CONFIG_NX_NPLANES])
+{
+ struct nxgl_point_s pts[NCIRCLE_POINTS];
+ FAR struct nxgl_vector_s vector;
+ int i;
+ int ret;
+
+ /* Convert the circle to a set of 16 points */
+
+ nxgl_circlepts(center, radius, pts);
+
+ /* Draw each pair of points as a vector */
+
+ for (i = POINT_0p0; i < POINT_337p5; i++)
+ {
+ vector.pt1.x = pts[i].x;
+ vector.pt1.y = pts[i].y;
+ vector.pt2.x = pts[i+1].x;
+ vector.pt2.y = pts[i+1].y;
+ ret = nxtk_drawlinewindow(hfwnd, &vector, width, color);
+ if (ret != OK)
+ {
+ return ret;
+ }
+ }
+
+ /* The final, closing vector is a special case */
+
+ vector.pt1.x = pts[POINT_337p5].x;
+ vector.pt1.y = pts[POINT_337p5].y;
+ vector.pt2.x = pts[POINT_0p0].x;
+ vector.pt2.y = pts[POINT_0p0].y;
+ return nxtk_drawlinewindow(hfwnd, &vector, width, color);
+}
diff --git a/nuttx/graphics/nxtk/nxtk_drawframe.c b/nuttx/graphics/nxtk/nxtk_drawframe.c
new file mode 100644
index 000000000..91745b323
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_drawframe.c
@@ -0,0 +1,310 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_drawframe.c
+ *
+ * Copyright (C) 2008-2009, 2011-2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdlib.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nxglib.h>
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxtk.h>
+
+#include "nxfe.h"
+#include "nxtk_internal.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_drawframeside
+ ****************************************************************************/
+
+static void nxtk_drawframeside(FAR struct nxtk_framedwindow_s *fwnd,
+ FAR const struct nxgl_rect_s *side,
+ FAR const struct nxgl_rect_s *bounds,
+ nxgl_mxpixel_t color[CONFIG_NX_NPLANES])
+{
+ struct nxgl_rect_s intersection;
+ nxgl_rectintersect(&intersection, side, bounds);
+ if (!nxgl_nullrect(&intersection))
+ {
+ nx_fill((NXWINDOW)fwnd, &intersection, color);
+ }
+}
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_drawframe
+ *
+ * Description:
+ * Redraw the window frame.
+ *
+ * Input parameters:
+ * fwnd - the framed window whose frame needs to be re-drawn. This must
+ * have been previously created by nxtk_openwindow().
+ * bounds - Only draw the ports of the frame within this bounding box.
+ * (window relative coordinates).
+ *
+ * Returned value:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxtk_drawframe(FAR struct nxtk_framedwindow_s *fwnd,
+ FAR const struct nxgl_rect_s *bounds)
+{
+ struct nxgl_rect_s frame;
+ struct nxgl_size_s wndsize;
+ struct nxgl_size_s tbsize;
+ nxgl_coord_t thickness;
+
+ /* Shiny edge:
+ * Thickness: 1
+ * Color: CONFIG_NXTK_BORDERCOLOR3;
+ * Condition: CONFIG_NXTK_BORDERWIDTH > 2
+ * Central part:
+ * Thickness: Varies with CONFIG_NXTK_BORDERWIDTH
+ * Color: CONFIG_NXTK_BORDERCOLOR1;
+ * Condition: CONFIG_NXTK_BORDERWIDTH > 0
+ * Shadow part:
+ * Thickness: 1;
+ * Color: CONFIG_NXTK_BORDERCOLOR2;
+ * Condition: CONFIG_NXTK_BORDERWIDTH > 1
+ */
+
+#if CONFIG_NXTK_BORDERWIDTH > 2
+ thickness = CONFIG_NXTK_BORDERWIDTH - 2;
+#elif CONFIG_NXTK_BORDERWIDTH > 1
+ thickness = CONFIG_NXTK_BORDERWIDTH - 1;
+#else
+ thickness = CONFIG_NXTK_BORDERWIDTH;
+#endif
+
+ /* Get the size of the rectangle */
+
+ nxgl_rectsize(&wndsize, &fwnd->wnd.bounds);
+ nxgl_rectsize(&tbsize, &fwnd->tbrect);
+
+ /* Draw the top ***********************************************************/
+
+#if CONFIG_NXTK_BORDERWIDTH > 0
+ frame.pt1.x = 0;
+ frame.pt2.x = wndsize.w - 1;
+ frame.pt1.y = 0;
+
+ /* Draw the shiny edge */
+
+#if CONFIG_NXTK_BORDERWIDTH > 2
+ frame.pt2.y = 0;
+ nxtk_drawframeside(fwnd, &frame, bounds, g_bordercolor3);
+ frame.pt1.y = 1;
+#endif
+
+ /* Draw the central part */
+
+ frame.pt2.y = frame.pt1.y + thickness - 1;
+ nxtk_drawframeside(fwnd, &frame, bounds, g_bordercolor1);
+
+ /* Draw a single line under the toolbar, color CONFIG_NXTK_BORDERCOLOR2 */
+
+#if CONFIG_NXTK_BORDERWIDTH > 1
+ frame.pt1.y += tbsize.h + thickness;
+ frame.pt2.y = frame.pt1.y;
+ nxtk_drawframeside(fwnd, &frame, bounds, g_bordercolor2);
+#endif
+
+ /* Draw the bottom ********************************************************/
+
+#if CONFIG_NXTK_BORDERWIDTH > 0
+ frame.pt1.y = wndsize.h - CONFIG_NXTK_BORDERWIDTH;
+
+ /* Draw the shiny edge */
+
+#if CONFIG_NXTK_BORDERWIDTH > 2
+ frame.pt2.y = frame.pt1.y;
+ nxtk_drawframeside(fwnd, &frame, bounds, g_bordercolor3);
+ frame.pt1.y ++;
+#endif
+
+ /* Draw the central part */
+
+ frame.pt2.y = frame.pt1.y + thickness - 1;
+ nxtk_drawframeside(fwnd, &frame, bounds, g_bordercolor1);
+
+ /* Then a single line at the very bottom, Color: CONFIG_NXTK_BORDERCOLOR2 */
+
+#if CONFIG_NXTK_BORDERWIDTH > 1
+ frame.pt1.y = wndsize.h - 1;
+ frame.pt2.y = frame.pt1.y;
+ nxtk_drawframeside(fwnd, &frame, bounds, g_bordercolor2);
+#endif
+#endif
+
+ /* Draw left and right outer edges *****************************************/
+
+ /* Draw the shiny left out edge */
+
+#if CONFIG_NXTK_BORDERWIDTH > 1
+ frame.pt1.x = 0;
+ frame.pt1.y = 1;
+#if CONFIG_NXTK_BORDERWIDTH > 2
+ frame.pt2.x = frame.pt1.x;
+ frame.pt2.y = wndsize.h - 2;
+ nxtk_drawframeside(fwnd, &frame, bounds, g_bordercolor3);
+#endif
+
+ /* Draw the shadowed right outer edge */
+
+ frame.pt1.x = wndsize.w - 1;
+ frame.pt2.x = frame.pt1.x;
+ nxtk_drawframeside(fwnd, &frame, bounds, g_bordercolor2);
+#endif
+
+ /* Draw left and right central regions *************************************/
+
+#if CONFIG_NXTK_BORDERWIDTH > 2
+ frame.pt1.x = 1;
+ frame.pt1.y = 1;
+ frame.pt2.x = frame.pt1.x + thickness - 1;
+ frame.pt2.y = wndsize.h - 2;
+#else
+ frame.pt1.x = 0;
+ frame.pt1.y = 0;
+ frame.pt2.x = frame.pt1.x + thickness - 1;
+ frame.pt2.y = wndsize.h - 1;
+#endif
+ nxtk_drawframeside(fwnd, &frame, bounds, g_bordercolor1);
+
+#if CONFIG_NXTK_BORDERWIDTH > 2
+ frame.pt1.x = wndsize.w - thickness - 1;
+ frame.pt2.x = wndsize.w - 2;
+#else
+ frame.pt1.x = wndsize.w - thickness;
+ frame.pt2.x = wndsize.w - 1;
+#endif
+ nxtk_drawframeside(fwnd, &frame, bounds, g_bordercolor1);
+#endif
+
+ /* Draw left and right inner sides *****************************************/
+ /* This segment stops at the bottom of the toolbar. If there is a
+ * tool bar, then we have to continue this to the top of the display
+ * using g_bordercolor1 (see below)
+ */
+
+ /* Draw the shadowed left inner edge */
+
+#if CONFIG_NXTK_BORDERWIDTH > 1
+#if CONFIG_NXTK_BORDERWIDTH > 2
+ frame.pt1.x = thickness + 1;
+ frame.pt1.y = tbsize.h + thickness + 1;
+ frame.pt2.x = frame.pt1.x;
+ frame.pt2.y = wndsize.h - thickness - 2;
+#else
+ frame.pt1.x = thickness;
+ frame.pt1.y = tbsize.h + thickness;
+ frame.pt2.x = frame.pt1.x;
+ frame.pt2.y = wndsize.h - thickness - 1;
+#endif
+ nxtk_drawframeside(fwnd, &frame, bounds, g_bordercolor2);
+
+ /* Draw the shiny right inner edge */
+
+#if CONFIG_NXTK_BORDERWIDTH > 2
+ frame.pt1.x = wndsize.w - thickness - 2;
+ frame.pt2.x = frame.pt1.x;
+ nxtk_drawframeside(fwnd, &frame, bounds, g_bordercolor3);
+#endif
+#endif
+
+ /* Fix up the little line-seqments at the top inner edges that need to match
+ * the color of the toolbar.
+ */
+
+#if CONFIG_NXTK_BORDERWIDTH > 1
+ if (tbsize.h > 0)
+ {
+ /* Draw the right side */
+
+#if CONFIG_NXTK_BORDERWIDTH > 2
+ frame.pt1.x = thickness + 1;
+ frame.pt1.y = 1;
+ frame.pt2.x = frame.pt1.x;
+ frame.pt2.y = tbsize.h + thickness;
+#else
+ frame.pt1.x = thickness;
+ frame.pt1.y = 0;
+ frame.pt2.x = frame.pt1.x;
+ frame.pt2.y = tbsize.h + thickness - 1;
+#endif
+ nxtk_drawframeside(fwnd, &frame, bounds, g_bordercolor1);
+
+ /* Draw the left size */
+
+#if CONFIG_NXTK_BORDERWIDTH > 2
+ frame.pt1.x = wndsize.w - thickness - 2;
+ frame.pt2.x = frame.pt1.x;
+ nxtk_drawframeside(fwnd, &frame, bounds, g_bordercolor1);
+#endif
+ }
+#endif
+
+ return OK;
+}
diff --git a/nuttx/graphics/nxtk/nxtk_drawlinetoolbar.c b/nuttx/graphics/nxtk/nxtk_drawlinetoolbar.c
new file mode 100644
index 000000000..4af8b3732
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_drawlinetoolbar.c
@@ -0,0 +1,139 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_drawlinetoolbar.c
+ *
+ * Copyright (C) 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <sys/types.h>
+#include <debug.h>
+#include <errno.h>
+
+#include <nuttx/nx/nxglib.h>
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxtk.h>
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_drawlinetoolbar
+ *
+ * Description:
+ * Fill the specified line in the toolbar sub-window with the specified
+ * color. This is simply a wrapper that uses nxgl_splitline() to break the
+ * line into trapezoids and then calls nxtk_filltrapwindow() to render the
+ * line.
+ *
+ * Input Parameters:
+ * hfwnd - The window handle returned by nxtk_openwindow
+ * vector - Describes the line to be drawn
+ * width - The width of the line
+ * color - The color to use to fill the line
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxtk_drawlinetoolbar(NXTKWINDOW hfwnd, FAR struct nxgl_vector_s *vector,
+ nxgl_coord_t width, nxgl_mxpixel_t color[CONFIG_NX_NPLANES])
+
+{
+ struct nxgl_trapezoid_s trap[3];
+ struct nxgl_rect_s rect;
+ int ret;
+
+#ifdef CONFIG_DEBUG
+ if (!hfwnd || !vector || width < 1 || !color)
+ {
+ set_errno(EINVAL);
+ return ERROR;
+ }
+#endif
+
+ ret = nxgl_splitline(vector, trap, &rect, width);
+ switch (ret)
+ {
+ case 0:
+ ret = nxtk_filltraptoolbar(hfwnd, &trap[0], color);
+ if (ret == OK)
+ {
+ ret = nxtk_filltraptoolbar(hfwnd, &trap[1], color);
+ if (ret == OK)
+ {
+ ret = nxtk_filltraptoolbar(hfwnd, &trap[2], color);
+ }
+ }
+ break;
+
+ case 1:
+ ret = nxtk_filltraptoolbar(hfwnd, &trap[1], color);
+ break;
+
+ case 2:
+ ret = nxtk_filltoolbar(hfwnd, &rect, color);
+ break;
+
+ default:
+ set_errno(EINVAL);
+ return ERROR;
+ }
+
+ return ret;
+}
diff --git a/nuttx/graphics/nxtk/nxtk_drawlinewindow.c b/nuttx/graphics/nxtk/nxtk_drawlinewindow.c
new file mode 100644
index 000000000..2dfd7e845
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_drawlinewindow.c
@@ -0,0 +1,138 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_drawlinewindow.c
+ *
+ * Copyright (C) 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <sys/types.h>
+#include <debug.h>
+#include <errno.h>
+
+#include <nuttx/nx/nxglib.h>
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxtk.h>
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_drawlinewindow
+ *
+ * Description:
+ * Fill the specified line in the window with the specified color. This
+ * is simply a wrapper that uses nxgl_splitline() to break the line into
+ * trapezoids and call calls nxtk_filltrapwindow() to render the line.
+ *
+ * Input Parameters:
+ * hfwnd - The window handle returned by nxtk_openwindow
+ * vector - Describes the line to be drawn
+ * width - The width of the line
+ * color - The color to use to fill the line
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxtk_drawlinewindow(NXTKWINDOW hfwnd, FAR struct nxgl_vector_s *vector,
+ nxgl_coord_t width, nxgl_mxpixel_t color[CONFIG_NX_NPLANES])
+
+{
+ struct nxgl_trapezoid_s trap[3];
+ struct nxgl_rect_s rect;
+ int ret;
+
+#ifdef CONFIG_DEBUG
+ if (!hfwnd || !vector || width < 1 || !color)
+ {
+ set_errno(EINVAL);
+ return ERROR;
+ }
+#endif
+
+ ret = nxgl_splitline(vector, trap, &rect, width);
+ switch (ret)
+ {
+ case 0:
+ ret = nxtk_filltrapwindow(hfwnd, &trap[0], color);
+ if (ret == OK)
+ {
+ ret = nxtk_filltrapwindow(hfwnd, &trap[1], color);
+ if (ret == OK)
+ {
+ ret = nxtk_filltrapwindow(hfwnd, &trap[2], color);
+ }
+ }
+ break;
+
+ case 1:
+ ret = nxtk_filltrapwindow(hfwnd, &trap[1], color);
+ break;
+
+ case 2:
+ ret = nxtk_fillwindow(hfwnd, &rect, color);
+ break;
+
+ default:
+ set_errno(EINVAL);
+ return ERROR;
+ }
+
+ return ret;
+}
diff --git a/nuttx/graphics/nxtk/nxtk_events.c b/nuttx/graphics/nxtk/nxtk_events.c
new file mode 100644
index 000000000..33c50b7f9
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_events.c
@@ -0,0 +1,297 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_events.c
+ *
+ * Copyright (C) 2008-2009, 2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdint.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include <semaphore.h>
+#include <debug.h>
+#include <errno.h>
+#include <assert.h>
+
+#include <nuttx/nx/nx.h>
+#include "nxtk_internal.h"
+
+/****************************************************************************
+ * Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Function Prototypes
+ ****************************************************************************/
+
+static void nxtk_redraw(NXWINDOW hwnd, FAR const struct nxgl_rect_s *rect,
+ bool morem, FAR void *arg);
+static void nxtk_position(NXWINDOW hwnd, FAR const struct nxgl_size_s *size,
+ FAR const struct nxgl_point_s *pos,
+ FAR const struct nxgl_rect_s *bounds,
+ FAR void *arg);
+#ifdef CONFIG_NX_MOUSE
+static void nxtk_mousein(NXWINDOW hwnd, FAR const struct nxgl_point_s *pos,
+ uint8_t buttons, FAR void *arg);
+#endif
+#ifdef CONFIG_NX_KBD
+static void nxtk_kbdin(NXWINDOW hwnd, uint8_t nch, const uint8_t *ch,
+ FAR void *arg);
+#endif
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+const struct nx_callback_s g_nxtkcb =
+{
+ nxtk_redraw, /* redraw */
+ nxtk_position /* position */
+#ifdef CONFIG_NX_MOUSE
+ , nxtk_mousein /* mousein */
+#endif
+#ifdef CONFIG_NX_KBD
+ , nxtk_kbdin /* kbdin */
+#endif
+};
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_redraw
+ ****************************************************************************/
+
+static void nxtk_redraw(NXWINDOW hwnd, FAR const struct nxgl_rect_s *rect,
+ bool more, FAR void *arg)
+{
+ FAR struct nxtk_framedwindow_s *fwnd = (FAR struct nxtk_framedwindow_s *)hwnd;
+ struct nxgl_rect_s intersection;
+
+ DEBUGASSERT(hwnd && rect && fwnd->fwcb);
+
+ gvdbg("hwnd=%p rect={(%d,%d),(%d,%d)} more=%d\n",
+ hwnd, rect->pt1.x, rect->pt1.y, rect->pt2.x, rect->pt2.y, more);
+
+ /* The incoming rectangle (rect) is relative to the containing window
+ * (i.e., (0,0) is the top left corner of the outer, containing window).
+ * If any part of the rectangle overlaps the client sub-window region, then
+ * forward the redraw callback.
+ */
+
+ if (fwnd->fwcb->redraw)
+ {
+ /* Clip the redraw rectangle so that it lies within the client sub-window
+ * bounds and move the rectangle to that it is relative to the client
+ * sub-window (i.e., (0,0) is the top left corner of the client sub-window).
+ */
+
+ nxtk_containerclip(fwnd, &intersection, rect, &fwnd->fwrect);
+
+ gvdbg("fwrect intersection={(%d,%d),(%d,%d)}\n",
+ intersection.pt1.x, intersection.pt1.y,
+ intersection.pt2.x, intersection.pt2.y);
+
+ if (!nxgl_nullrect(&intersection))
+ {
+ fwnd->fwcb->redraw((NXTKWINDOW)fwnd, &intersection, false, fwnd->fwarg);
+ }
+ }
+
+ /* If any part of the rectangle overlaps the client toolbar region, then
+ * forward the redraw callback.
+ */
+
+ if (fwnd->tbcb && fwnd->tbcb->redraw)
+ {
+ /* Clip the redraw rectangle so that it lies within the toolbar sub-window
+ * bounds and move the rectangle to that it is relative to the toolbar
+ * sub-window (i.e., (0,0) is the top left corner of the client sub-window).
+ */
+
+ nxtk_containerclip(fwnd, &intersection, rect, &fwnd->tbrect);
+
+ gvdbg("tbrect intersection={(%d,%d),(%d,%d)}\n",
+ intersection.pt1.x, intersection.pt1.y,
+ intersection.pt2.x, intersection.pt2.y);
+
+ if (!nxgl_nullrect(&intersection))
+ {
+ fwnd->tbcb->redraw((NXTKWINDOW)fwnd, &intersection, false, fwnd->tbarg);
+ }
+ }
+
+ /* Then draw the frame */
+
+ nxtk_drawframe(fwnd, rect);
+}
+
+/****************************************************************************
+ * Name: nxtk_position
+ ****************************************************************************/
+
+static void nxtk_position(NXWINDOW hwnd, FAR const struct nxgl_size_s *size,
+ FAR const struct nxgl_point_s *pos,
+ FAR const struct nxgl_rect_s *bounds,
+ FAR void *arg)
+{
+ FAR struct nxtk_framedwindow_s *fwnd = (FAR struct nxtk_framedwindow_s *)hwnd;
+ struct nxgl_size_s subwindowsize;
+
+ gvdbg("hwnd=%p size=(%d,%d) pos=(%d,%d) bounds={(%d,%d),(%d,%d)}\n",
+ hwnd, size->w, size->h, pos->x, pos->y,
+ bounds->pt1.x, bounds->pt1.y, bounds->pt2.x, bounds->pt2.y);
+
+ /* Recalculate the dimensions of the toolbar and client windows */
+
+ nxtk_setsubwindows(fwnd);
+
+ /* Report the size / position of the client sub-window */
+
+ if (fwnd->fwcb->position)
+ {
+ nxgl_rectsize(&subwindowsize, &fwnd->fwrect);
+ fwnd->fwcb->position((NXTKWINDOW)fwnd, &subwindowsize,
+ &fwnd->fwrect.pt1, bounds, fwnd->fwarg);
+ }
+
+ /* Report the size / position of the toolbar sub-window */
+
+ if (fwnd->tbcb && fwnd->tbcb->position)
+ {
+ nxgl_rectsize(&subwindowsize, &fwnd->tbrect);
+ fwnd->tbcb->position((NXTKWINDOW)fwnd, &subwindowsize,
+ &fwnd->tbrect.pt1, bounds, fwnd->tbarg);
+ }
+}
+
+/****************************************************************************
+ * Name: nxtk_mousein
+ ****************************************************************************/
+
+#ifdef CONFIG_NX_MOUSE
+static void nxtk_mousein(NXWINDOW hwnd, FAR const struct nxgl_point_s *pos,
+ uint8_t buttons, FAR void *arg)
+{
+ FAR struct nxtk_framedwindow_s *fwnd = (FAR struct nxtk_framedwindow_s *)hwnd;
+ struct nxgl_point_s abspos;
+ struct nxgl_point_s relpos;
+
+ /* Raise the window to the top if any mouse button was pressed or if auto-raise
+ * is configured. Do this before reporting the mouse event (because processing
+ * of the mouse event could change the ordering again).
+ */
+
+ /* REVISIT: This does not work correctly. In a scenario where (1) there are
+ * multiple queued touchscreen events and (2) the result of the first input
+ * was to switch windows, then this autoraise implementation will cause the
+ * window to revert to the previous window. Not good behavior.
+ */
+
+#ifndef CONFIG_NX_MULTIUSER /* Queuing only happens in multi-user mode */
+#ifdef CONFIG_NXTK_AUTORAISE
+ if (fwnd->wnd.above != NULL)
+#else
+ if (buttons != 0 && fwnd->wnd.above != NULL)
+#endif
+ {
+ nx_raise((NXWINDOW)&fwnd->wnd);
+ }
+#endif
+
+ /* When we get here, the mouse position that we receive has already been
+ * offset by the window origin. Here we need to detect mouse events in
+ * the various regions of the windows: The toolbar, the client window,
+ * or the frame. And then offset the position accordingly.
+ */
+
+ /* The fwrect and tbrect boxes are both in absolute display coordinates. So
+ * the easiest thing to do is to restore the mouse position to absolute
+ * display coordiantes before making the comparisons and adjustments.
+ */
+
+ nxgl_vectoradd(&abspos, pos, &fwnd->wnd.bounds.pt1);
+
+ /* Is the mouse position inside of the client window region? */
+
+ if (fwnd->fwcb->mousein && nxgl_rectinside(&fwnd->fwrect, &abspos))
+ {
+ nxgl_vectsubtract(&relpos, &abspos, &fwnd->fwrect.pt1);
+ fwnd->fwcb->mousein((NXTKWINDOW)fwnd, &relpos, buttons, fwnd->fwarg);
+ }
+
+ /* If the mouse position inside the toobar region? */
+
+ else if (fwnd->tbcb->mousein && nxgl_rectinside(&fwnd->tbrect, &abspos))
+ {
+ nxgl_vectsubtract(&relpos, &abspos, &fwnd->tbrect.pt1);
+ fwnd->tbcb->mousein((NXTKWINDOW)fwnd, &relpos, buttons, fwnd->tbarg);
+ }
+}
+#endif
+
+/****************************************************************************
+ * Name: nxtk_kbdin
+ ****************************************************************************/
+
+#ifdef CONFIG_NX_KBD
+static void nxtk_kbdin(NXWINDOW hwnd, uint8_t nch, const uint8_t *ch,
+ FAR void *arg)
+{
+ FAR struct nxtk_framedwindow_s *fwnd = (FAR struct nxtk_framedwindow_s *)hwnd;
+
+ /* Only the client window gets keyboard input */
+
+ if (fwnd->fwcb->kbdin)
+ {
+ fwnd->fwcb->kbdin((NXTKWINDOW)fwnd, nch, ch, fwnd->fwarg);
+ }
+}
+#endif
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
diff --git a/nuttx/graphics/nxtk/nxtk_fillcircletoolbar.c b/nuttx/graphics/nxtk/nxtk_fillcircletoolbar.c
new file mode 100644
index 000000000..d0bb09edd
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_fillcircletoolbar.c
@@ -0,0 +1,115 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_fillcircletoolbar.c
+ *
+ * Copyright (C) 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <sys/types.h>
+#include <debug.h>
+#include <errno.h>
+
+#include <nuttx/nx/nxglib.h>
+#include <nuttx/nx/nxtk.h>
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+#define NCIRCLE_TRAPS 8
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_fillcircletoolbar
+ *
+ * Description:
+ * Fill a circular region using the specified color.
+ *
+ * Input Parameters:
+ * hfwnd - The window handle returned by nxtk_openwindow()
+ * center - A pointer to the point that is the center of the circle
+ * radius - The radius of the circle in pixels.
+ * color - The color to use to fill the circle.
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxtk_fillcircletoolbar(NXWINDOW hfwnd, FAR const struct nxgl_point_s *center,
+ nxgl_coord_t radius,
+ nxgl_mxpixel_t color[CONFIG_NX_NPLANES])
+{
+ FAR struct nxgl_trapezoid_s traps[NCIRCLE_TRAPS];
+ int i;
+ int ret;
+
+ /* Describe the circular region as a sequence of 8 trapezoids */
+
+ nxgl_circletraps(center, radius, traps);
+
+ /* Then rend those trapezoids */
+
+ for (i = 0; i < NCIRCLE_TRAPS; i++)
+ {
+ ret = nxtk_filltraptoolbar(hfwnd, &traps[i], color);
+ if (ret != OK)
+ {
+ return ret;
+ }
+ }
+ return OK;
+}
diff --git a/nuttx/graphics/nxtk/nxtk_fillcirclewindow.c b/nuttx/graphics/nxtk/nxtk_fillcirclewindow.c
new file mode 100644
index 000000000..34c945865
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_fillcirclewindow.c
@@ -0,0 +1,115 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_fillcirclewindow.c
+ *
+ * Copyright (C) 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <sys/types.h>
+#include <debug.h>
+#include <errno.h>
+
+#include <nuttx/nx/nxglib.h>
+#include <nuttx/nx/nxtk.h>
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+#define NCIRCLE_TRAPS 8
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_fillcirclewindow
+ *
+ * Description:
+ * Fill a circular region using the specified color.
+ *
+ * Input Parameters:
+ * hfwnd - The window handle returned by nxtk_openwindow()
+ * center - A pointer to the point that is the center of the circle
+ * radius - The radius of the circle in pixels.
+ * color - The color to use to fill the circle.
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxtk_fillcirclewindow(NXWINDOW hfwnd, FAR const struct nxgl_point_s *center,
+ nxgl_coord_t radius,
+ nxgl_mxpixel_t color[CONFIG_NX_NPLANES])
+{
+ FAR struct nxgl_trapezoid_s traps[NCIRCLE_TRAPS];
+ int i;
+ int ret;
+
+ /* Describe the circular region as a sequence of 8 trapezoids */
+
+ nxgl_circletraps(center, radius, traps);
+
+ /* Then rend those trapezoids */
+
+ for (i = 0; i < NCIRCLE_TRAPS; i++)
+ {
+ ret = nxtk_filltrapwindow(hfwnd, &traps[i], color);
+ if (ret != OK)
+ {
+ return ret;
+ }
+ }
+ return OK;
+}
diff --git a/nuttx/graphics/nxtk/nxtk_filltoolbar.c b/nuttx/graphics/nxtk/nxtk_filltoolbar.c
new file mode 100644
index 000000000..c39199e6a
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_filltoolbar.c
@@ -0,0 +1,116 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_filltoolbar.c
+ *
+ * Copyright (C) 2008-2009 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdlib.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxtk.h>
+
+#include "nxfe.h"
+#include "nxtk_internal.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_filltoolbar
+ *
+ * Description:
+ * Fill the specified rectangle in the client window with the specified color
+ *
+ * Input Parameters:
+ * hfwnd - The handle returned by nxtk_openwindow
+ * rect - The location within the toolbar window to be filled
+ * color - The color to use in the fill
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxtk_filltoolbar(NXTKWINDOW hfwnd, FAR const struct nxgl_rect_s *rect,
+ nxgl_mxpixel_t color[CONFIG_NX_NPLANES])
+{
+ FAR struct nxtk_framedwindow_s *fwnd = (FAR struct nxtk_framedwindow_s *)hfwnd;
+ struct nxgl_rect_s fillrect;
+
+#ifdef CONFIG_DEBUG
+ if (!hfwnd || !rect || !color)
+ {
+ errno = EINVAL;
+ return ERROR;
+ }
+#endif
+
+ /* Clip the rectangle so that it lies within the sub-window bounds
+ * then move the rectangle to that it is relative to the containing
+ * window.
+ */
+
+ nxtk_subwindowclip(fwnd, &fillrect, rect, &fwnd->tbrect);
+
+ /* Then fill it */
+
+ return nx_fill((NXWINDOW)hfwnd, &fillrect, color);
+}
diff --git a/nuttx/graphics/nxtk/nxtk_filltraptoolbar.c b/nuttx/graphics/nxtk/nxtk_filltraptoolbar.c
new file mode 100644
index 000000000..1f04e9b43
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_filltraptoolbar.c
@@ -0,0 +1,110 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_filltraptoolbar.c
+ *
+ * Copyright (C) 2008-2009 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdlib.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxtk.h>
+
+#include "nxfe.h"
+#include "nxtk_internal.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_filltraptoolbar
+ *
+ * Description:
+ * Fill the specified rectangle in the toolbar with the specified color
+ *
+ * Input Parameters:
+ * hfwnd - The handle returned by nxtk_openwindow
+ * trap - The trapezoidal region to be filled
+ * color - The color to use in the fill
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxtk_filltraptoolbar(NXTKWINDOW hfwnd, FAR const struct nxgl_trapezoid_s *trap,
+ nxgl_mxpixel_t color[CONFIG_NX_NPLANES])
+{
+ FAR struct nxtk_framedwindow_s *fwnd = (FAR struct nxtk_framedwindow_s *)hfwnd;
+ struct nxgl_rect_s relclip;
+
+#ifdef CONFIG_DEBUG
+ if (!hfwnd || !trap || !color)
+ {
+ errno = EINVAL;
+ return ERROR;
+ }
+#endif
+
+ /* Perform the fill, clipping to the client window */
+
+ nxgl_rectoffset(&relclip, &fwnd->tbrect, -fwnd->wnd.bounds.pt1.x, -fwnd->wnd.bounds.pt1.y);
+ return nx_filltrapezoid((NXWINDOW)hfwnd, &relclip, trap, color);
+}
diff --git a/nuttx/graphics/nxtk/nxtk_filltrapwindow.c b/nuttx/graphics/nxtk/nxtk_filltrapwindow.c
new file mode 100644
index 000000000..c84c055f8
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_filltrapwindow.c
@@ -0,0 +1,110 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_filltrapwindow.c
+ *
+ * Copyright (C) 2008-2009 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdlib.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxtk.h>
+
+#include "nxfe.h"
+#include "nxtk_internal.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_filltrapwindow
+ *
+ * Description:
+ * Fill the specified rectangle in the client window with the specified color
+ *
+ * Input Parameters:
+ * hfwnd - The window handle returned by nxtk_openwindow
+ * trap - The trapezoidal region to be filled
+ * color - The color to use in the fill
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxtk_filltrapwindow(NXTKWINDOW hfwnd, FAR const struct nxgl_trapezoid_s *trap,
+ nxgl_mxpixel_t color[CONFIG_NX_NPLANES])
+{
+ FAR struct nxtk_framedwindow_s *fwnd = (FAR struct nxtk_framedwindow_s *)hfwnd;
+ struct nxgl_rect_s relclip;
+
+#ifdef CONFIG_DEBUG
+ if (!hfwnd || !trap || !color)
+ {
+ errno = EINVAL;
+ return ERROR;
+ }
+#endif
+
+ /* Perform the fill, clipping to the client window */
+
+ nxgl_rectoffset(&relclip, &fwnd->fwrect, -fwnd->wnd.bounds.pt1.x, -fwnd->wnd.bounds.pt1.y);
+ return nx_filltrapezoid((NXWINDOW)hfwnd, &relclip, trap, color);
+}
diff --git a/nuttx/graphics/nxtk/nxtk_fillwindow.c b/nuttx/graphics/nxtk/nxtk_fillwindow.c
new file mode 100644
index 000000000..e971ce06b
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_fillwindow.c
@@ -0,0 +1,116 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_fillwindow.c
+ *
+ * Copyright (C) 2008-2009 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdlib.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxtk.h>
+
+#include "nxfe.h"
+#include "nxtk_internal.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_fillwindow
+ *
+ * Description:
+ * Fill the specified rectangle in the client window with the specified color
+ *
+ * Input Parameters:
+ * hfwnd - The window handle returned by nxtk_openwindow
+ * rect - The location within the client window to be filled
+ * color - The color to use in the fill
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxtk_fillwindow(NXTKWINDOW hfwnd, FAR const struct nxgl_rect_s *rect,
+ nxgl_mxpixel_t color[CONFIG_NX_NPLANES])
+{
+ FAR struct nxtk_framedwindow_s *fwnd = (FAR struct nxtk_framedwindow_s *)hfwnd;
+ struct nxgl_rect_s fillrect;
+
+#ifdef CONFIG_DEBUG
+ if (!hfwnd || !rect || !color)
+ {
+ errno = EINVAL;
+ return ERROR;
+ }
+#endif
+
+ /* Clip the rectangle so that it lies within the sub-window bounds
+ * then move the rectangle to that it is relative to the containing
+ * window.
+ */
+
+ nxtk_subwindowclip(fwnd, &fillrect, rect, &fwnd->fwrect);
+
+ /* Then fill it */
+
+ return nx_fill((NXWINDOW)hfwnd, &fillrect, color);
+}
diff --git a/nuttx/graphics/nxtk/nxtk_getposition.c b/nuttx/graphics/nxtk/nxtk_getposition.c
new file mode 100644
index 000000000..e6cce6026
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_getposition.c
@@ -0,0 +1,95 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_getposition.c
+ *
+ * Copyright (C) 2008-2009 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdlib.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxtk.h>
+
+#include "nxfe.h"
+#include "nxtk_internal.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_getposition
+ *
+ * Description:
+ * Request the position and size information for the selected framed window.
+ * The size/position for the client window and toolbar will be return
+ * asynchronously through the client callback function pointer.
+ *
+ * Input Parameters:
+ * hfwnd - The window handle returned by nxtk_openwindow.
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxtk_getposition(NXTKWINDOW hfwnd)
+{
+ return nx_getposition((NXWINDOW)hfwnd);
+}
diff --git a/nuttx/graphics/nxtk/nxtk_gettoolbar.c b/nuttx/graphics/nxtk/nxtk_gettoolbar.c
new file mode 100644
index 000000000..70adb0cce
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_gettoolbar.c
@@ -0,0 +1,123 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_gettoolbar.c
+ *
+ * Copyright (C) 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdlib.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxtk.h>
+
+#include "nxfe.h"
+#include "nxtk_internal.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_gettoolbar
+ *
+ * Description:
+ * Get the raw contents of graphic memory within a rectangular region. NOTE:
+ * Since raw graphic memory is returned, the returned memory content may be
+ * the memory of windows above this one and may not necessarily belong to
+ * this window unless you assure that this is the top window.
+ *
+ * Input Parameters:
+ * wnd - The window structure reference
+ * rect - The location to be copied
+ * plane - Specifies the color plane to get from.
+ * dest - The location to copy the memory region
+ * deststride - The width, in bytes, the the dest memory
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxtk_gettoolbar(NXTKWINDOW hfwnd, FAR const struct nxgl_rect_s *rect,
+ unsigned int plane, FAR uint8_t *dest,
+ unsigned int deststride)
+{
+ FAR struct nxtk_framedwindow_s *fwnd = (FAR struct nxtk_framedwindow_s *)hfwnd;
+ struct nxgl_rect_s getrect;
+
+#ifdef CONFIG_DEBUG
+ if (!hfwnd || !rect || !dest)
+ {
+ gvdbg("Invalid parameters\n");
+ set_errno(EINVAL);
+ return ERROR;
+ }
+#endif
+
+ /* Clip the rectangle so that it lies within the sub-window bounds
+ * then move the rectangle to that it is relative to the containing
+ * window.
+ */
+
+ nxtk_subwindowclip(fwnd, &getrect, rect, &fwnd->tbrect);
+
+ /* Then get it */
+
+ return nx_getrectangle((NXWINDOW)hfwnd, &getrect, plane, dest, deststride);
+}
diff --git a/nuttx/graphics/nxtk/nxtk_getwindow.c b/nuttx/graphics/nxtk/nxtk_getwindow.c
new file mode 100644
index 000000000..121c7702a
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_getwindow.c
@@ -0,0 +1,123 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_getwindow.c
+ *
+ * Copyright (C) 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdlib.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxtk.h>
+
+#include "nxfe.h"
+#include "nxtk_internal.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_getwindow
+ *
+ * Description:
+ * Get the raw contents of graphic memory within a rectangular region. NOTE:
+ * Since raw graphic memory is returned, the returned memory content may be
+ * the memory of windows above this one and may not necessarily belong to
+ * this window unless you assure that this is the top window.
+ *
+ * Input Parameters:
+ * wnd - The window structure reference
+ * rect - The location to be copied
+ * plane - Specifies the color plane to get from.
+ * dest - The location to copy the memory region
+ * deststride - The width, in bytes, the the dest memory
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxtk_getwindow(NXTKWINDOW hfwnd, FAR const struct nxgl_rect_s *rect,
+ unsigned int plane, FAR uint8_t *dest,
+ unsigned int deststride)
+{
+ FAR struct nxtk_framedwindow_s *fwnd = (FAR struct nxtk_framedwindow_s *)hfwnd;
+ struct nxgl_rect_s getrect;
+
+#ifdef CONFIG_DEBUG
+ if (!hfwnd || !rect || !dest)
+ {
+ gvdbg("Invalid parameters\n");
+ set_errno(EINVAL);
+ return ERROR;
+ }
+#endif
+
+ /* Clip the rectangle so that it lies within the sub-window bounds
+ * then move the rectangle to that it is relative to the containing
+ * window.
+ */
+
+ nxtk_subwindowclip(fwnd, &getrect, rect, &fwnd->fwrect);
+
+ /* Then get it */
+
+ return nx_getrectangle((NXWINDOW)hfwnd, &getrect, plane, dest, deststride);
+}
diff --git a/nuttx/graphics/nxtk/nxtk_internal.h b/nuttx/graphics/nxtk/nxtk_internal.h
new file mode 100644
index 000000000..87a098845
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_internal.h
@@ -0,0 +1,220 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_internal.h
+ *
+ * Copyright (C) 2008-2009, 2011-1021 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+#ifndef __GRAPHICS_NXTK_NXTK_INTERNAL_H
+#define __GRAPHICS_NXTK_NXTK_INTERNAL_H
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <nuttx/nx/nxtk.h>
+#include "nxbe.h"
+#include "nxfe.h"
+
+/****************************************************************************
+ * Pre-processor definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Types
+ ****************************************************************************/
+
+/* This is the internal representation of the framed window object */
+
+struct nxtk_framedwindow_s
+{
+ struct nxbe_window_s wnd; /* The raw NX window */
+
+ /* The toolbar region and callbacks */
+
+ nxgl_coord_t tbheight;
+ struct nxgl_rect_s tbrect;
+ FAR const struct nx_callback_s *tbcb;
+ FAR void *tbarg;
+
+ /* Window data region and callbacks */
+
+ struct nxgl_rect_s fwrect;
+ FAR const struct nx_callback_s *fwcb;
+ FAR void *fwarg;
+};
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+# define EXTERN extern "C"
+extern "C" {
+#else
+# define EXTERN extern
+#endif
+
+/* That is the callback for the framed window */
+
+extern FAR const struct nx_callback_s g_nxtkcb;
+
+/* Frame border colors */
+
+extern nxgl_mxpixel_t g_bordercolor1[CONFIG_NX_NPLANES];
+extern nxgl_mxpixel_t g_bordercolor2[CONFIG_NX_NPLANES];
+extern nxgl_mxpixel_t g_bordercolor3[CONFIG_NX_NPLANES];
+
+/****************************************************************************
+ * Public Function Prototypes
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_setsubwindows
+ *
+ * Description:
+ * Give the window dimensions, border width, and toolbar height,
+ * calculate the new dimensions of the toolbar region and client window
+ * region
+ *
+ ****************************************************************************/
+
+EXTERN void nxtk_setsubwindows(FAR struct nxtk_framedwindow_s *fwnd);
+
+/****************************************************************************
+ * Name: nxtk_subwindowclip
+ *
+ * Description:
+ * Clip the src rectangle so that it lies within the sub-window bounds
+ * then move the rectangle to that it is relative to the containing
+ * window.
+ *
+ * Input parameters:
+ * fwnd - The framed window to be used
+ * dest - The locaton to put the result
+ * src - The src rectangle in relative sub-window coordinates
+ * bounds - The subwindow bounds in absolute screen coordinates.
+ *
+ * Returned value:
+ * None
+ *
+ ****************************************************************************/
+
+EXTERN void nxtk_subwindowclip(FAR struct nxtk_framedwindow_s *fwnd,
+ FAR struct nxgl_rect_s *dest,
+ FAR const struct nxgl_rect_s *src,
+ FAR const struct nxgl_rect_s *bounds);
+
+/****************************************************************************
+ * Name: nxtk_containerclip
+ *
+ * Description:
+ * We are given a 'src' rectangle in containing window, relative coordinates
+ * (i.e., (0,0) is the top left corner of the outer, containing window).
+ * This function will (1) clip that src rectangle so that it lies within
+ * the sub-window bounds, and then (2) move the rectangle to that it is
+ * relative to the sub-window (i.e., (0,0) is the top left corner of the
+ * sub-window).
+ *
+ * Input parameters:
+ * fwnd - The framed window to be used
+ * dest - The locaton to put the result
+ * src - The src rectangle in relative container-window coordinates
+ * bounds - The subwindow bounds in absolute screen coordinates.
+ *
+ * Returned value:
+ * None
+ *
+ ****************************************************************************/
+
+EXTERN void nxtk_containerclip(FAR struct nxtk_framedwindow_s *fwnd,
+ FAR struct nxgl_rect_s *dest,
+ FAR const struct nxgl_rect_s *src,
+ FAR const struct nxgl_rect_s *bounds);
+
+/****************************************************************************
+ * Name: nxtk_subwindowmove
+ *
+ * Description:
+ * Perform common clipping operations in preparatons for calling nx_move()
+ *
+ * Input Parameters:
+ * fwnd - The framed window within which the move is to be done.
+ * This must have been previously created by nxtk_openwindow().
+ * destrect - The loccation to receive the clipped rectangle relative
+ * to containing window
+ * destoffset - The location to received the clipped offset.
+ * srcrect - Describes the rectangular region relative to the client
+ * sub-window to move relative to the sub-window
+ * srcoffset - The offset to move the region
+ * bounds - The subwindow bounds in absolute screen coordinates.
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+EXTERN void nxtk_subwindowmove(FAR struct nxtk_framedwindow_s *fwnd,
+ FAR struct nxgl_rect_s *destrect,
+ FAR struct nxgl_point_s *destoffset,
+ FAR const struct nxgl_rect_s *srcrect,
+ FAR const struct nxgl_point_s *srcoffset,
+ FAR const struct nxgl_rect_s *bounds);
+
+/****************************************************************************
+ * Name: nxtk_drawframe
+ *
+ * Description:
+ * Redraw the window frame.
+ *
+ * Input parameters:
+ * fwnd - the framed window whose frame needs to be re-drawn. This must
+ * have been previously created by nxtk_openwindow().
+ * bounds - Only draw the ports of the frame within this bounding box.
+ * (window relative coordinates).
+ *
+ * Returned value:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+EXTERN int nxtk_drawframe(FAR struct nxtk_framedwindow_s *fwnd,
+ FAR const struct nxgl_rect_s *bounds);
+
+#undef EXTERN
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* __GRAPHICS_NXTK_NXTK_INTERNAL_H */
diff --git a/nuttx/graphics/nxtk/nxtk_lower.c b/nuttx/graphics/nxtk/nxtk_lower.c
new file mode 100644
index 000000000..256ed27da
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_lower.c
@@ -0,0 +1,95 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_lower.c
+ *
+ * Copyright (C) 2008-2009 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdlib.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxtk.h>
+
+#include "nxfe.h"
+#include "nxtk_internal.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_lower
+ *
+ * Description:
+ * Lower the window containing the specified client sub-window to the
+ * bottom of the display.
+ *
+ * Input parameters:
+ * hfwnd - the window to be lowered. This must have been previously created
+ * by nxtk_openwindow().
+ *
+ * Returned value:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxtk_lower(NXTKWINDOW hfwnd)
+{
+ return nx_lower((NXWINDOW)hfwnd);
+}
diff --git a/nuttx/graphics/nxtk/nxtk_movetoolbar.c b/nuttx/graphics/nxtk/nxtk_movetoolbar.c
new file mode 100644
index 000000000..088611382
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_movetoolbar.c
@@ -0,0 +1,119 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_movetoolbar.c
+ *
+ * Copyright (C) 2008-2009 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdlib.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxtk.h>
+
+#include "nxfe.h"
+#include "nxtk_internal.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_movetoolbar
+ *
+ * Description:
+ * Move a rectangular region within the toolbar sub-window of a framed window
+ *
+ * Input Parameters:
+ * hfwnd - The sub-window containing the toolbar within which the move is
+ * to be done. This must have been previously created by
+ * nxtk_openwindow().
+ * rect - Describes the rectangular region relative to the toolbar
+ * sub-window to move
+ * offset - The offset to move the region
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxtk_movetoolbar(NXTKWINDOW hfwnd, FAR const struct nxgl_rect_s *rect,
+ FAR const struct nxgl_point_s *offset)
+{
+ FAR struct nxtk_framedwindow_s *fwnd = (FAR struct nxtk_framedwindow_s *)hfwnd;
+ struct nxgl_rect_s srcrect;
+ struct nxgl_point_s clipoffset;
+
+#ifdef CONFIG_DEBUG
+ if (!hfwnd || !rect || !offset)
+ {
+ errno = EINVAL;
+ return ERROR;
+ }
+#endif
+
+ /* Make sure that both the source and dest rectangle lie within the
+ * toolbar sub-window
+ */
+
+ nxtk_subwindowmove(fwnd, &srcrect, &clipoffset, rect, offset, &fwnd->tbrect);
+
+ /* Then move it within the toolbar window */
+
+ return nx_move((NXWINDOW)hfwnd, &srcrect, &clipoffset);
+}
diff --git a/nuttx/graphics/nxtk/nxtk_movewindow.c b/nuttx/graphics/nxtk/nxtk_movewindow.c
new file mode 100644
index 000000000..4c45c101c
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_movewindow.c
@@ -0,0 +1,118 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_movewindow.c
+ *
+ * Copyright (C) 2008-2009 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdlib.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxtk.h>
+
+#include "nxfe.h"
+#include "nxtk_internal.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_movewindow
+ *
+ * Description:
+ * Move a rectangular region within the client sub-window of a framed window
+ *
+ * Input Parameters:
+ * hfwnd - The client sub-window within which the move is to be done.
+ * This must have been previously created by nxtk_openwindow().
+ * rect - Describes the rectangular region relative to the client
+ * sub-window to move
+ * offset - The offset to move the region
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxtk_movewindow(NXTKWINDOW hfwnd, FAR const struct nxgl_rect_s *rect,
+ FAR const struct nxgl_point_s *offset)
+{
+ FAR struct nxtk_framedwindow_s *fwnd = (FAR struct nxtk_framedwindow_s *)hfwnd;
+ struct nxgl_rect_s srcrect;
+ struct nxgl_point_s clipoffset;
+
+#ifdef CONFIG_DEBUG
+ if (!hfwnd || !rect || !offset)
+ {
+ errno = EINVAL;
+ return ERROR;
+ }
+#endif
+
+ /* Make sure that both the source and dest rectangle lie within the
+ * client sub-window
+ */
+
+ nxtk_subwindowmove(fwnd, &srcrect, &clipoffset, rect, offset, &fwnd->fwrect);
+
+ /* Then move it within the client window */
+
+ return nx_move((NXWINDOW)hfwnd, &srcrect, &clipoffset);
+}
diff --git a/nuttx/graphics/nxtk/nxtk_opentoolbar.c b/nuttx/graphics/nxtk/nxtk_opentoolbar.c
new file mode 100644
index 000000000..56ca941b8
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_opentoolbar.c
@@ -0,0 +1,127 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_opentoolbar.c
+ *
+ * Copyright (C) 2008-2009 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdlib.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxtk.h>
+
+#include "nxfe.h"
+#include "nxtk_internal.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_opentoolbar
+ *
+ * Description:
+ * Create a tool bar at the top of the specified framed window
+ *
+ * Input Parameters:
+ * hfwnd - The handle returned by nxtk_openwindow
+ * height - The request height of the toolbar in pixels
+ * cb - Callbacks used to process toolbar events
+ * arg - User provided value that will be returned with toolbar callbacks.
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxtk_opentoolbar(NXTKWINDOW hfwnd, nxgl_coord_t height,
+ FAR const struct nx_callback_s *cb,
+ FAR void *arg)
+{
+ FAR struct nxtk_framedwindow_s *fwnd = (FAR struct nxtk_framedwindow_s *)hfwnd;
+
+#ifdef CONFIG_DEBUG
+ if (!hfwnd || !cb)
+ {
+ errno = EINVAL;
+ return ERROR;
+ }
+#endif
+
+ /* Initialize the toolbar info */
+
+ fwnd->tbheight = height;
+ fwnd->tbcb = cb;
+ fwnd->tbarg = arg;
+
+ /* Calculate the new dimensions of the toolbar and client windows */
+
+ nxtk_setsubwindows(fwnd);
+
+ /* Then redraw the entire window, even the client window must be
+ * redrawn because it has changed its vertical position and size.
+ */
+
+ nxfe_redrawreq(&fwnd->wnd, &fwnd->wnd.bounds);
+
+ /* Return the initialized toolbar reference */
+
+ return OK;
+}
+
diff --git a/nuttx/graphics/nxtk/nxtk_openwindow.c b/nuttx/graphics/nxtk/nxtk_openwindow.c
new file mode 100644
index 000000000..0c77a6877
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_openwindow.c
@@ -0,0 +1,160 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_openwindow.c
+ *
+ * Copyright (C) 2008-2009, 2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdlib.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include <nuttx/kmalloc.h>
+
+#include "nxfe.h"
+#include "nxtk_internal.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+nxgl_mxpixel_t g_bordercolor1[CONFIG_NX_NPLANES] =
+{
+ CONFIG_NXTK_BORDERCOLOR1
+#if CONFIG_NX_NPLANES > 1
+# error "Multiple plane border colors not defined"
+#endif
+};
+
+nxgl_mxpixel_t g_bordercolor2[CONFIG_NX_NPLANES] =
+{
+ CONFIG_NXTK_BORDERCOLOR2
+#if CONFIG_NX_NPLANES > 1
+# error "Multiple plane border colors not defined"
+#endif
+};
+
+nxgl_mxpixel_t g_bordercolor3[CONFIG_NX_NPLANES] =
+{
+ CONFIG_NXTK_BORDERCOLOR3
+#if CONFIG_NX_NPLANES > 1
+# error "Multiple plane border colors not defined"
+#endif
+};
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_openwindow
+ *
+ * Description:
+ * Create a new, framed window.
+ *
+ * Input Parameters:
+ * handle - The handle returned by nx_connect
+ * cb - Callbacks used to process window events
+ * arg - User provided value that will be returned with NXTK callbacks.
+ *
+ * Return:
+ * Success: A non-NULL handle used with subsequent NXTK window accesses
+ * Failure: NULL is returned and errno is set appropriately
+ *
+ ****************************************************************************/
+
+NXTKWINDOW nxtk_openwindow(NXHANDLE handle,
+ FAR const struct nx_callback_s *cb,
+ FAR void *arg)
+{
+ FAR struct nxtk_framedwindow_s *fwnd;
+ int ret;
+
+#ifdef CONFIG_DEBUG
+ if (!handle || !cb)
+ {
+ errno = EINVAL;
+ return NULL;
+ }
+#endif
+
+ /* Pre-allocate the window structure */
+
+ fwnd = (FAR struct nxtk_framedwindow_s *)kzalloc(sizeof(struct nxtk_framedwindow_s));
+ if (!fwnd)
+ {
+ errno = ENOMEM;
+ return NULL;
+ }
+
+ /* Initialize the window structure */
+
+ fwnd->fwcb = cb;
+ fwnd->fwarg = arg;
+
+ /* Then let nxfe_constructwindow do the rest */
+
+ ret = nxfe_constructwindow(handle, &fwnd->wnd, &g_nxtkcb, NULL);
+ if (ret < 0)
+ {
+ /* An error occurred, the window has been freed */
+
+ return NULL;
+ }
+
+ /* Return the initialized window reference */
+
+ return (NXTKWINDOW)fwnd;
+}
+
diff --git a/nuttx/graphics/nxtk/nxtk_raise.c b/nuttx/graphics/nxtk/nxtk_raise.c
new file mode 100644
index 000000000..1e35f3ab2
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_raise.c
@@ -0,0 +1,95 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_raise.c
+ *
+ * Copyright (C) 2008-2009 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdlib.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxtk.h>
+
+#include "nxfe.h"
+#include "nxtk_internal.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_raise
+ *
+ * Description:
+ * Bring the window containing the specified client sub-window to the top
+ * of the display.
+ *
+ * Input parameters:
+ * hfwnd - the window to be raised. This must have been previously created
+ * by nxtk_openwindow().
+ *
+ * Returned value:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxtk_raise(NXTKWINDOW hfwnd)
+{
+ return nx_raise((NXWINDOW)hfwnd);
+}
diff --git a/nuttx/graphics/nxtk/nxtk_setposition.c b/nuttx/graphics/nxtk/nxtk_setposition.c
new file mode 100644
index 000000000..2a2a60665
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_setposition.c
@@ -0,0 +1,107 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_setposition.c
+ *
+ * Copyright (C) 2008-2009, 2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdlib.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxtk.h>
+
+#include "nxfe.h"
+#include "nxtk_internal.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_setposition
+ *
+ * Description:
+ * Set the position for the selected client window. This position does not
+ * include the offsets for the borders nor for any toolbar. Those offsets
+ * will be added in to set the full window position.
+ *
+ * Input Parameters:
+ * hfwnd - The window handle returned by nxtk_openwindow
+ * pos - The new position of the client sub-window
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxtk_setposition(NXTKWINDOW hfwnd, FAR const struct nxgl_point_s *pos)
+{
+ FAR struct nxtk_framedwindow_s *fwnd = (FAR struct nxtk_framedwindow_s *)hfwnd;
+ struct nxgl_point_s offset;
+ struct nxgl_point_s newpos;
+
+ /* Calculate the offset that is requested and add that to the window origin. */
+
+ nxgl_vectsubtract(&offset, pos, &fwnd->fwrect.pt1);
+ nxgl_vectoradd(&newpos, &offset, &fwnd->wnd.bounds.pt1);
+
+ /* Then set that position */
+
+ return nx_setposition((NXWINDOW)hfwnd, &newpos);
+}
diff --git a/nuttx/graphics/nxtk/nxtk_setsize.c b/nuttx/graphics/nxtk/nxtk_setsize.c
new file mode 100644
index 000000000..aeeebf150
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_setsize.c
@@ -0,0 +1,114 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_setsize.c
+ *
+ * Copyright (C) 2008-2009 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdlib.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxtk.h>
+
+#include "nxfe.h"
+#include "nxtk_internal.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_setsize
+ *
+ * Description:
+ * Set the size for the selected client window. This size does not
+ * include the sizes of the borders nor for any toolbar. Those sizes
+ * will be added in to set the full window size.
+ *
+ * Input Parameters:
+ * hfwnd - The window handle returned by nxtk_openwindow
+ * size - The new size of the client sub-window.
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxtk_setsize(NXTKWINDOW hfwnd, FAR const struct nxgl_size_s *size)
+{
+ FAR struct nxtk_framedwindow_s *fwnd = (FAR struct nxtk_framedwindow_s *)hfwnd;
+ struct nxgl_size_s newsize;
+
+#ifdef CONFIG_DEBUG
+ if (!hfwnd || !size)
+ {
+ errno = EINVAL;
+ return ERROR;
+ }
+#endif
+
+ /* Add the sizes need for the toolbar and the borders */
+
+ newsize.w = size->w + 2 * CONFIG_NXTK_BORDERWIDTH;
+ newsize.h = size->h + fwnd->tbheight + 2 * CONFIG_NXTK_BORDERWIDTH;
+
+ /* Then set the window size */
+
+ return nx_setsize((NXWINDOW)hfwnd, &newsize);
+}
diff --git a/nuttx/graphics/nxtk/nxtk_setsubwindows.c b/nuttx/graphics/nxtk/nxtk_setsubwindows.c
new file mode 100644
index 000000000..251008361
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_setsubwindows.c
@@ -0,0 +1,165 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_setsubwindows.c
+ *
+ * Copyright (C) 2008-2009 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdlib.h>
+#include <semaphore.h>
+#include <debug.h>
+#include <errno.h>
+
+#include <nuttx/nx/nx.h>
+#include "nxtk_internal.h"
+
+/****************************************************************************
+ * Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Function Prototypes
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_setsubwindows
+ *
+ * Description:
+ * Give the window dimensions, border width, and toolbar height,
+ * calculate the new dimensions of the toolbar region and client window
+ * region
+ *
+ ****************************************************************************/
+
+void nxtk_setsubwindows(FAR struct nxtk_framedwindow_s *fwnd)
+{
+ nxgl_coord_t fullheight;
+ nxgl_coord_t bdrheight = 0;
+ nxgl_coord_t tbtop = fwnd->wnd.bounds.pt1.y;
+ nxgl_coord_t tbheight = 0;
+ nxgl_coord_t fwtop = fwnd->wnd.bounds.pt1.y;
+ nxgl_coord_t fwheight = 0;
+ nxgl_coord_t fullwidth;
+ nxgl_coord_t bdrwidth;
+ nxgl_coord_t fwwidth;
+ nxgl_coord_t fwleft;
+
+ /* Divide up the vertical dimension of the window */
+
+ fullheight = fwnd->wnd.bounds.pt2.y - fwnd->wnd.bounds.pt1.y + 1;
+
+ /* Is it tall enough for a border? */
+
+ if (fullheight > 0)
+ {
+ /* Get the border height */
+
+ bdrheight = ngl_min(2 * CONFIG_NXTK_BORDERWIDTH, fullheight);
+
+ /* Position the toolbar and client window just under the top border */
+
+#if CONFIG_NXTK_BORDERWIDTH > 1
+ tbtop += CONFIG_NXTK_BORDERWIDTH - 1;
+ fwtop = tbtop + 1;
+#else
+ tbtop += CONFIG_NXTK_BORDERWIDTH;
+ fwtop = tbtop;
+#endif
+
+ /* Is it big enough for any part of the toolbar? */
+
+ if (fullheight > 2 * CONFIG_NXTK_BORDERWIDTH)
+ {
+ /* Yes.. get the height of the toolbar */
+
+ tbheight = fwnd->tbheight;
+ if (tbheight >= fullheight - bdrheight)
+ {
+ tbheight = fullheight - bdrheight;
+ }
+ else
+ {
+ /* And the client window gets whatever is left */
+
+ fwheight = fullheight - bdrheight - tbheight;
+ }
+
+ /* Position the client window just under the toolbar */
+
+ fwtop += tbheight;
+ }
+ }
+
+ /* Divide up the horizontal dimensions of the window */
+
+ fullwidth = fwnd->wnd.bounds.pt2.x - fwnd->wnd.bounds.pt1.x + 1;
+ bdrwidth = ngl_min(2 * CONFIG_NXTK_BORDERWIDTH, fullwidth);
+ fwwidth = fullwidth - bdrwidth;
+ fwleft = fwnd->wnd.bounds.pt1.x + bdrwidth / 2;
+
+ /* Realize the positions/dimensions */
+
+ fwnd->tbrect.pt1.x = fwleft;
+ fwnd->tbrect.pt1.y = tbtop;
+ fwnd->tbrect.pt2.x = fwleft + fwwidth - 1;
+ fwnd->tbrect.pt2.y = tbtop + tbheight - 1;
+
+ fwnd->fwrect.pt1.x = fwleft;
+ fwnd->fwrect.pt1.y = fwtop;
+ fwnd->fwrect.pt2.x = fwleft + fwwidth - 1;
+ fwnd->fwrect.pt2.y = fwtop + fwheight - 1;
+}
diff --git a/nuttx/graphics/nxtk/nxtk_subwindowclip.c b/nuttx/graphics/nxtk/nxtk_subwindowclip.c
new file mode 100644
index 000000000..4d453eeca
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_subwindowclip.c
@@ -0,0 +1,118 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_subwindowclip.c
+ *
+ * Copyright (C) 2008-2009 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdlib.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxtk.h>
+
+#include "nxfe.h"
+#include "nxtk_internal.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_subwindowclip
+ *
+ * Description:
+ * We are given a 'src' rectangle in sub-window, relative coordinates
+ * (i.e., (0,0) is the top left corner of the sub-window). This function
+ * will (1) clip that src rectangle so that it lies within the sub-window
+ * bounds, and then (2) move the rectangle to that it is relative to the
+ * containing window (i.e., (0,0) is the top left corner of the containing
+ * window).
+ *
+ * Input parameters:
+ * fwnd - The framed window to be used
+ * dest - The locaton to put the result
+ * src - The src rectangle in relative sub-window coordinates
+ * bounds - The subwindow bounds in absolute screen coordinates.
+ *
+ * Returned value:
+ * None
+ *
+ ****************************************************************************/
+
+void nxtk_subwindowclip(FAR struct nxtk_framedwindow_s *fwnd,
+ FAR struct nxgl_rect_s *dest,
+ FAR const struct nxgl_rect_s *src,
+ FAR const struct nxgl_rect_s *bounds)
+{
+ struct nxgl_rect_s tmp;
+
+ /* Temporarily, position the src rectangle in absolute screen coordinates */
+
+ nxgl_rectoffset(&tmp, src, bounds->pt1.x, bounds->pt1.y);
+
+ /* Clip the src rectangle to lie within the client window region */
+
+ nxgl_rectintersect(&tmp, &tmp, bounds);
+
+ /* Then move the rectangle so that is relative to the containing window, not the
+ * client subwindow
+ */
+
+ nxgl_rectoffset(dest, &tmp, -fwnd->wnd.bounds.pt1.x, -fwnd->wnd.bounds.pt1.y);
+}
diff --git a/nuttx/graphics/nxtk/nxtk_subwindowmove.c b/nuttx/graphics/nxtk/nxtk_subwindowmove.c
new file mode 100644
index 000000000..ed6a264e7
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_subwindowmove.c
@@ -0,0 +1,151 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_subwindowmove.c
+ *
+ * Copyright (C) 2008-2009 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdlib.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxtk.h>
+
+#include "nxfe.h"
+#include "nxtk_internal.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_subwindowmove
+ *
+ * Description:
+ * Perform common clipping operations in preparatons for calling nx_move()
+ *
+ * Input Parameters:
+ * fwnd - The framed window within which the move is to be done.
+ * This must have been previously created by nxtk_openwindow().
+ * destrect - The loccation to receive the clipped rectangle relative
+ * to containing window
+ * destoffset - The location to received the clipped offset.
+ * srcrect - Describes the rectangular region relative to the client
+ * sub-window to move relative to the sub-window
+ * srcoffset - The offset to move the region
+ * bounds - The subwindow bounds in absolute screen coordinates.
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+void nxtk_subwindowmove(FAR struct nxtk_framedwindow_s *fwnd,
+ FAR struct nxgl_rect_s *destrect,
+ FAR struct nxgl_point_s *destoffset,
+ FAR const struct nxgl_rect_s *srcrect,
+ FAR const struct nxgl_point_s *srcoffset,
+ FAR const struct nxgl_rect_s *bounds)
+{
+ struct nxgl_rect_s abssrc;
+
+ /* Temporarily, position the src rectangle in absolute screen coordinates */
+
+ nxgl_rectoffset(&abssrc, srcrect, bounds->pt1.x, bounds->pt1.y);
+
+ /* Clip the src rectangle to lie within the client window region */
+
+ nxgl_rectintersect(&abssrc, &abssrc, &fwnd->fwrect);
+
+ /* Clip the offset so that the source rectangle does not move out of the
+ * the client sub-window.
+ */
+
+ destoffset->x = srcoffset->x;
+ if (destoffset->x < 0)
+ {
+ if (abssrc.pt1.x + destoffset->x < bounds->pt1.x)
+ {
+ destoffset->x = bounds->pt1.x - abssrc.pt1.x;
+ }
+ }
+ else if (abssrc.pt2.x + destoffset->x > bounds->pt2.x)
+ {
+ destoffset->x = bounds->pt2.x - abssrc.pt2.x;
+ }
+
+ destoffset->y = srcoffset->y;
+ if (destoffset->y < 0)
+ {
+ if (abssrc.pt1.y + destoffset->y < bounds->pt1.y)
+ {
+ destoffset->y = bounds->pt1.y - abssrc.pt1.y;
+ }
+ }
+ else if (abssrc.pt2.y + destoffset->y > bounds->pt2.y)
+ {
+ destoffset->y = bounds->pt2.y - abssrc.pt2.y;
+ }
+
+
+ /* Then move the rectangle so that is relative to the containing window, not the
+ * client subwindow
+ */
+
+ nxgl_rectoffset(destrect, &abssrc, -fwnd->wnd.bounds.pt1.x, -fwnd->wnd.bounds.pt1.y);
+}
diff --git a/nuttx/graphics/nxtk/nxtk_toolbarbounds.c b/nuttx/graphics/nxtk/nxtk_toolbarbounds.c
new file mode 100644
index 000000000..ee49cb504
--- /dev/null
+++ b/nuttx/graphics/nxtk/nxtk_toolbarbounds.c
@@ -0,0 +1,107 @@
+/****************************************************************************
+ * graphics/nxtk/nxtk_toolbarbounds.c
+ *
+ * Copyright (C) 2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <assert.h>
+
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxtk.h>
+
+#include "nxfe.h"
+#include "nxtk_internal.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtk_toolbarbounds
+ *
+ * Description:
+ * Return a bounding box that contains the toolbar in the coordinates of
+ * the containing, framed window. For example, the recturned origin
+ * (rect.pt1) is the offset toolbar in the framed window.
+ *
+ * NOTE: This function is unsafe in the case of the multi-user NX server
+ * where the width of the window may be being changed asynchronously! It
+ * may return the old size in this case.
+ *
+ * Input Parameters:
+ * hfwnd - The handle returned by nxtk_openwindow
+ * bounds - User provided location in which to return the bounding box.
+ *
+ * Return:
+ * OK on success; ERROR on failure with errno set appropriately
+ *
+ ****************************************************************************/
+
+int nxtk_toolbarbounds(NXTKWINDOW hfwnd, FAR struct nxgl_rect_s *bounds)
+{
+ FAR struct nxtk_framedwindow_s *fwnd = (FAR struct nxtk_framedwindow_s *)hfwnd;
+
+ DEBUGASSERT(hfwnd && bounds);
+
+ /* Offset the rectangle by subtracting the current position of the window. */
+
+ nxgl_rectoffset(bounds, &fwnd->tbrect,
+ -fwnd->wnd.bounds.pt1.x, -fwnd->wnd.bounds.pt1.y);
+ return OK;
+}
+