GLUT for OS/2 (Evgeny Kotsuba)
authorBrian Paul <brian.paul@tungstengraphics.com>
Fri, 13 Jun 2003 21:49:46 +0000 (21:49 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Fri, 13 Jun 2003 21:49:46 +0000 (21:49 +0000)
44 files changed:
src/glut/os2/Makefile [new file with mode: 0644]
src/glut/os2/WarpWin.cpp [new file with mode: 0644]
src/glut/os2/glutOverlay.cpp [new file with mode: 0644]
src/glut/os2/glut_8x13.cpp [new file with mode: 0644]
src/glut/os2/glut_9x15.cpp [new file with mode: 0644]
src/glut/os2/glut_bitmap.cpp [new file with mode: 0644]
src/glut/os2/glut_cindex.cpp [new file with mode: 0644]
src/glut/os2/glut_cmap.cpp [new file with mode: 0644]
src/glut/os2/glut_cursor.cpp [new file with mode: 0644]
src/glut/os2/glut_event.cpp [new file with mode: 0644]
src/glut/os2/glut_ext.cpp [new file with mode: 0644]
src/glut/os2/glut_fullscrn.cpp [new file with mode: 0644]
src/glut/os2/glut_gamemode.cpp [new file with mode: 0644]
src/glut/os2/glut_get.cpp [new file with mode: 0644]
src/glut/os2/glut_hel10.cpp [new file with mode: 0644]
src/glut/os2/glut_hel12.cpp [new file with mode: 0644]
src/glut/os2/glut_hel18.cpp [new file with mode: 0644]
src/glut/os2/glut_init.cpp [new file with mode: 0644]
src/glut/os2/glut_input.cpp [new file with mode: 0644]
src/glut/os2/glut_key.cpp [new file with mode: 0644]
src/glut/os2/glut_keyctrl.cpp [new file with mode: 0644]
src/glut/os2/glut_keyup.cpp [new file with mode: 0644]
src/glut/os2/glut_mesa.cpp [new file with mode: 0644]
src/glut/os2/glut_modifier.cpp [new file with mode: 0644]
src/glut/os2/glut_roman.cpp [new file with mode: 0644]
src/glut/os2/glut_shapes.cpp [new file with mode: 0644]
src/glut/os2/glut_stroke.cpp [new file with mode: 0644]
src/glut/os2/glut_swap.cpp [new file with mode: 0644]
src/glut/os2/glut_teapot.cpp [new file with mode: 0644]
src/glut/os2/glut_tr24.cpp [new file with mode: 0644]
src/glut/os2/glut_util.cpp [new file with mode: 0644]
src/glut/os2/glut_vidresize.cpp [new file with mode: 0644]
src/glut/os2/glut_warp.cpp [new file with mode: 0644]
src/glut/os2/glut_win.cpp [new file with mode: 0644]
src/glut/os2/glut_winmisc.cpp [new file with mode: 0644]
src/glut/os2/glutbitmap.h [new file with mode: 0644]
src/glut/os2/glutos2.h [new file with mode: 0644]
src/glut/os2/glutstroke.h [new file with mode: 0644]
src/glut/os2/layerutil.h [new file with mode: 0644]
src/glut/os2/libGlut.DEF [new file with mode: 0644]
src/glut/os2/os2_glx.cpp [new file with mode: 0644]
src/glut/os2/os2_menu.cpp [new file with mode: 0644]
src/glut/os2/os2_winproc.cpp [new file with mode: 0644]
src/glut/os2/src-glut_os2pm.zip [new file with mode: 0644]

diff --git a/src/glut/os2/Makefile b/src/glut/os2/Makefile
new file mode 100644 (file)
index 0000000..56ad4e4
--- /dev/null
@@ -0,0 +1,420 @@
+# Makefile\r
+# Created by IBM WorkFrame/2 MakeMake at 12:46:25 on 3 June 2003\r
+#\r
+# The actions included in this make file are:\r
+#  Compile::C++ Compiler\r
+#  Link::Linker\r
+#  Lib::Import Lib\r
+\r
+.SUFFIXES:\r
+\r
+.SUFFIXES: \\r
+    .LIB .cpp .dll .obj \r
+\r
+.cpp.obj:\r
+    @echo " Compile::C++ Compiler "\r
+    icc.exe /I..\ /I..\X86 /I..\GL /I..\swrast /I..\swrast_setup /Ss /Wcmpcndcnscnvcpydclenuextgeninilanobsordparporppcprorearettrdtruund /Tx /O /Gm /Ge- /G5 /Gf /Gi /Oi /C %s\r
+\r
+{G:\EVGEN\MESA5\src-glut.os2pm}.cpp.obj:\r
+    @echo " Compile::C++ Compiler "\r
+    icc.exe /I..\ /I..\X86 /I..\GL /I..\swrast /I..\swrast_setup /Ss /Wcmpcndcnscnvcpydclenuextgeninilanobsordparporppcprorearettrdtruund /Tx /O /Gm /Ge- /G5 /Gf /Gi /Oi /C %s\r
+\r
+.dll.LIB:\r
+    @echo " Lib::Import Lib "\r
+    implib.exe %|dpfF.LIB %s\r
+\r
+{G:\EVGEN\MESA5\src-glut.os2pm}.dll.LIB:\r
+    @echo " Lib::Import Lib "\r
+    implib.exe %|dpfF.LIB %s\r
+\r
+all: \\r
+    .\libGlut.LIB\r
+\r
+.\libGlut.dll: \\r
+    .\os2_winproc.obj \\r
+    .\WarpWin.obj \\r
+    .\glutOverlay.obj \\r
+    .\glut_8x13.obj \\r
+    .\glut_9x15.obj \\r
+    .\glut_bitmap.obj \\r
+    .\glut_cindex.obj \\r
+    .\glut_cmap.obj \\r
+    .\glut_cursor.obj \\r
+    .\glut_event.obj \\r
+    .\glut_ext.obj \\r
+    .\glut_fullscrn.obj \\r
+    .\glut_gamemode.obj \\r
+    .\glut_get.obj \\r
+    .\glut_hel10.obj \\r
+    .\glut_hel12.obj \\r
+    .\glut_hel18.obj \\r
+    .\glut_init.obj \\r
+    .\glut_input.obj \\r
+    .\glut_key.obj \\r
+    .\glut_keyctrl.obj \\r
+    .\glut_keyup.obj \\r
+    .\glut_mesa.obj \\r
+    .\glut_modifier.obj \\r
+    .\glut_roman.obj \\r
+    .\glut_shapes.obj \\r
+    .\glut_stroke.obj \\r
+    .\glut_swap.obj \\r
+    .\glut_teapot.obj \\r
+    .\glut_tr24.obj \\r
+    .\glut_util.obj \\r
+    .\glut_vidresize.obj \\r
+    .\glut_warp.obj \\r
+    .\glut_win.obj \\r
+    .\glut_winmisc.obj \\r
+    .\os2_glx.obj \\r
+    .\os2_menu.obj \\r
+    ..\si-glu\libGLU.lib \\r
+    ..\MesaDll\MesaGL2.lib \\r
+    ..\drv\DrvLoad\MesaDrvLoad.lib \\r
+    {$(LIB)}libGlut.DEF\r
+    @echo " Link::Linker "\r
+    icc.exe @<<\r
+     /B" /dbgpack /exepack:2 /st:200000 /packd /optfunc"\r
+     /FelibGlut.dll \r
+     ..\si-glu\libGLU.lib \r
+     ..\MesaDll\MesaGL2.lib \r
+     ..\drv\DrvLoad\MesaDrvLoad.lib \r
+     libGlut.DEF\r
+     .\os2_winproc.obj\r
+     .\WarpWin.obj\r
+     .\glutOverlay.obj\r
+     .\glut_8x13.obj\r
+     .\glut_9x15.obj\r
+     .\glut_bitmap.obj\r
+     .\glut_cindex.obj\r
+     .\glut_cmap.obj\r
+     .\glut_cursor.obj\r
+     .\glut_event.obj\r
+     .\glut_ext.obj\r
+     .\glut_fullscrn.obj\r
+     .\glut_gamemode.obj\r
+     .\glut_get.obj\r
+     .\glut_hel10.obj\r
+     .\glut_hel12.obj\r
+     .\glut_hel18.obj\r
+     .\glut_init.obj\r
+     .\glut_input.obj\r
+     .\glut_key.obj\r
+     .\glut_keyctrl.obj\r
+     .\glut_keyup.obj\r
+     .\glut_mesa.obj\r
+     .\glut_modifier.obj\r
+     .\glut_roman.obj\r
+     .\glut_shapes.obj\r
+     .\glut_stroke.obj\r
+     .\glut_swap.obj\r
+     .\glut_teapot.obj\r
+     .\glut_tr24.obj\r
+     .\glut_util.obj\r
+     .\glut_vidresize.obj\r
+     .\glut_warp.obj\r
+     .\glut_win.obj\r
+     .\glut_winmisc.obj\r
+     .\os2_glx.obj\r
+     .\os2_menu.obj\r
+<<\r
+\r
+.\os2_winproc.obj: \\r
+    G:\EVGEN\MESA5\src-glut.os2pm\os2_winproc.cpp \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h \\r
+    gl\os2mesa.h \\r
+    gl\gl.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}gl_mangle.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}GL/os2_x11.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}os2_config.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}os2mesadef.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}context.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glapi.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}mtypes.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glheader.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}config.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glapitable.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glthread.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}math/m_matrix.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}Trace/tr_context.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}dd.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}conf.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}GL/os2_config.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}GL/glext.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}Xthreads.h\r
+\r
+.\os2_menu.obj: \\r
+    G:\EVGEN\MESA5\src-glut.os2pm\os2_menu.cpp \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h\r
+\r
+.\os2_glx.obj: \\r
+    G:\EVGEN\MESA5\src-glut.os2pm\os2_glx.cpp \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \\r
+    gl\os2mesa.h \\r
+    gl\gl.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}gl_mangle.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}GL/os2_x11.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}os2_config.h\r
+\r
+.\glut_winmisc.obj: \\r
+    G:\EVGEN\MESA5\src-glut.os2pm\glut_winmisc.cpp \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h\r
+\r
+.\glut_win.obj: \\r
+    G:\EVGEN\MESA5\src-glut.os2pm\glut_win.cpp \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutos2.h \\r
+    gl\os2mesa.h \\r
+    gl\gl.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}gl_mangle.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}GL/os2_x11.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}os2_config.h\r
+\r
+.\glut_warp.obj: \\r
+    G:\EVGEN\MESA5\src-glut.os2pm\glut_warp.cpp \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h\r
+\r
+.\glut_vidresize.obj: \\r
+    G:\EVGEN\MESA5\src-glut.os2pm\glut_vidresize.cpp \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h\r
+\r
+.\glut_util.obj: \\r
+    G:\EVGEN\MESA5\src-glut.os2pm\glut_util.cpp \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h\r
+\r
+.\glut_tr24.obj: \\r
+    G:\EVGEN\MESA5\src-glut.os2pm\glut_tr24.cpp \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutbitmap.h\r
+\r
+.\glut_teapot.obj: \\r
+    G:\EVGEN\MESA5\src-glut.os2pm\glut_teapot.cpp \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h\r
+\r
+.\glut_swap.obj: \\r
+    G:\EVGEN\MESA5\src-glut.os2pm\glut_swap.cpp \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h\r
+\r
+.\glut_stroke.obj: \\r
+    G:\EVGEN\MESA5\src-glut.os2pm\glut_stroke.cpp \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutstroke.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h\r
+\r
+.\glut_shapes.obj: \\r
+    G:\EVGEN\MESA5\src-glut.os2pm\glut_shapes.cpp \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h\r
+\r
+.\glut_roman.obj: \\r
+    G:\EVGEN\MESA5\src-glut.os2pm\glut_roman.cpp \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutstroke.h\r
+\r
+.\glut_modifier.obj: \\r
+    G:\EVGEN\MESA5\src-glut.os2pm\glut_modifier.cpp \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h\r
+\r
+.\glut_mesa.obj: \\r
+    G:\EVGEN\MESA5\src-glut.os2pm\glut_mesa.cpp \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h\r
+\r
+.\glut_keyup.obj: \\r
+    G:\EVGEN\MESA5\src-glut.os2pm\glut_keyup.cpp \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h\r
+\r
+.\glut_keyctrl.obj: \\r
+    G:\EVGEN\MESA5\src-glut.os2pm\glut_keyctrl.cpp \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h\r
+\r
+.\glut_key.obj: \\r
+    G:\EVGEN\MESA5\src-glut.os2pm\glut_key.cpp \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h\r
+\r
+.\glut_input.obj: \\r
+    G:\EVGEN\MESA5\src-glut.os2pm\glut_input.cpp \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h\r
+\r
+.\glut_init.obj: \\r
+    G:\EVGEN\MESA5\src-glut.os2pm\glut_init.cpp \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h\r
+\r
+.\glut_hel18.obj: \\r
+    G:\EVGEN\MESA5\src-glut.os2pm\glut_hel18.cpp \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutbitmap.h\r
+\r
+.\glut_hel12.obj: \\r
+    G:\EVGEN\MESA5\src-glut.os2pm\glut_hel12.cpp \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutbitmap.h\r
+\r
+.\glut_hel10.obj: \\r
+    G:\EVGEN\MESA5\src-glut.os2pm\glut_hel10.cpp \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutbitmap.h\r
+\r
+.\glut_get.obj: \\r
+    G:\EVGEN\MESA5\src-glut.os2pm\glut_get.cpp \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h\r
+\r
+.\glut_gamemode.obj: \\r
+    G:\EVGEN\MESA5\src-glut.os2pm\glut_gamemode.cpp \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h\r
+\r
+.\glut_fullscrn.obj: \\r
+    G:\EVGEN\MESA5\src-glut.os2pm\glut_fullscrn.cpp \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h\r
+\r
+.\glut_ext.obj: \\r
+    G:\EVGEN\MESA5\src-glut.os2pm\glut_ext.cpp \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h\r
+\r
+.\glut_event.obj: \\r
+    G:\EVGEN\MESA5\src-glut.os2pm\glut_event.cpp \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h\r
+\r
+.\glut_cursor.obj: \\r
+    G:\EVGEN\MESA5\src-glut.os2pm\glut_cursor.cpp \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h\r
+\r
+.\glut_cmap.obj: \\r
+    G:\EVGEN\MESA5\src-glut.os2pm\glut_cmap.cpp \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}layerutil.h\r
+\r
+.\glut_cindex.obj: \\r
+    G:\EVGEN\MESA5\src-glut.os2pm\glut_cindex.cpp \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h\r
+\r
+.\glut_bitmap.obj: \\r
+    G:\EVGEN\MESA5\src-glut.os2pm\glut_bitmap.cpp \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutbitmap.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h\r
+\r
+.\glut_9x15.obj: \\r
+    G:\EVGEN\MESA5\src-glut.os2pm\glut_9x15.cpp \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutbitmap.h\r
+\r
+.\glut_8x13.obj: \\r
+    G:\EVGEN\MESA5\src-glut.os2pm\glut_8x13.cpp \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutbitmap.h\r
+\r
+.\glutOverlay.obj: \\r
+    G:\EVGEN\MESA5\src-glut.os2pm\glutOverlay.cpp \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutbitmap.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutstroke.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h\r
+\r
+.\WarpWin.obj: \\r
+    G:\EVGEN\MESA5\src-glut.os2pm\WarpWin.cpp \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpWin.h \\r
+    {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h\r
+\r
+.\libGlut.LIB: \\r
+    .\libGlut.dll\r
diff --git a/src/glut/os2/WarpWin.cpp b/src/glut/os2/WarpWin.cpp
new file mode 100644 (file)
index 0000000..ee746ec
--- /dev/null
@@ -0,0 +1,420 @@
+/* WarpWin.c     */\r
+/* glut for Warp */\r
+#include <stdio.h>\r
+#include <string.h>\r
+\r
+#include "WarpWin.h"\r
+#include "WarpGL.h"\r
+\r
+#define POKA 0\r
+\r
+/* global variables that must be set for some functions to operate\r
+   correctly. */\r
+HDC XHDC;\r
+HWND XHWND;\r
+\r
+\r
+void\r
+XStoreColor(Display* display, Colormap colormap, XColor* color)\r
+{\r
+  /* KLUDGE: set XHDC to 0 if the palette should NOT be realized after\r
+     setting the color.  set XHDC to the correct HDC if it should. */\r
+\r
+  LONG pe;\r
+  ULONG cclr;\r
+  int r,g,b;\r
+  /* X11 stores color from 0-65535, Win32 expects them to be 0-256, so\r
+     twiddle the bits ( / 256). */\r
+  r = color->red / 256;\r
+  g = color->green / 256;\r
+  b = color->blue / 256;\r
+  pe = LONGFromRGB(r,g,b);\r
+  /* make sure we use this flag, otherwise the colors might get mapped\r
+     to another place in the colormap, and when we glIndex() that\r
+     color, it may have moved (argh!!) */\r
+  pe |= (PC_NOCOLLAPSE<<24);\r
+/* This function changes the entries in a palette.  */\r
+#if POKA\r
+OS2:\r
+ rc = GpiSetPaletteEntries(colormap,LCOLF_CONSECRGB, color->pixel, 1, &pe);\r
+ GpiSelectPalette(hps,colormap);\r
+ WinRealizePalette(hwnd,hps,&cclr);\r
+source Win:\r
+  if (XHDC) {\r
+    UnrealizeObject(colormap);\r
+    SelectPalette(XHDC, colormap, FALSE);\r
+    RealizePalette(XHDC);\r
+\r
+   }\r
+#endif\r
+}\r
+\r
+void\r
+XSetWindowColormap(Display* display, Window window, Colormap colormap)\r
+{\r
+#if POKA\r
+  HDC hdc = GetDC(window);\r
+\r
+  /* if the third parameter is FALSE, the logical colormap is copied\r
+     into the device palette when the application is in the\r
+     foreground, if it is TRUE, the colors are mapped into the current\r
+     palette in the best possible way. */\r
+  SelectPalette(hdc, colormap, FALSE);\r
+  RealizePalette(hdc);\r
+\r
+  /* note that we don't have to release the DC, since our window class\r
+     uses the WC_OWNDC flag! */\r
+#endif\r
+}\r
+\r
+\r
+/* display, root and visual - don't used at all */\r
+Colormap\r
+XCreateColormap(Display* display, Window root, Visual* visual, int alloc)\r
+{\r
+  /* KLUDGE: this function needs XHDC to be set to the HDC currently\r
+     being operated on before it is invoked! */\r
+\r
+  HPAL    palette;\r
+  int n;\r
+#if POKA\r
+  PIXELFORMATDESCRIPTOR pfd;\r
+  LOGPALETTE *logical;\r
+\r
+  /* grab the pixel format */\r
+  memset(&pfd, 0, sizeof(PIXELFORMATDESCRIPTOR));\r
+  DescribePixelFormat(XHDC, GetPixelFormat(XHDC),\r
+                     sizeof(PIXELFORMATDESCRIPTOR), &pfd);\r
+\r
+  if (!(pfd.dwFlags & PFD_NEED_PALETTE ||\r
+      pfd.iPixelType == PFD_TYPE_COLORINDEX))\r
+  {\r
+    return 0;\r
+  }\r
+\r
+  n = 1 << pfd.cColorBits;\r
+\r
+  /* allocate a bunch of memory for the logical palette (assume 256\r
+     colors in a Win32 palette */\r
+  logical = (LOGPALETTE*)malloc(sizeof(LOGPALETTE) +\r
+                               sizeof(PALETTEENTRY) * n);\r
+  memset(logical, 0, sizeof(LOGPALETTE) + sizeof(PALETTEENTRY) * n);\r
+\r
+  /* set the entries in the logical palette */\r
+  logical->palVersion = 0x300;\r
+  logical->palNumEntries = n;\r
+\r
+  /* start with a copy of the current system palette */\r
+  GetSystemPaletteEntries(XHDC, 0, 256, &logical->palPalEntry[0]);\r
+\r
+  if (pfd.iPixelType == PFD_TYPE_RGBA) {\r
+    int redMask = (1 << pfd.cRedBits) - 1;\r
+    int greenMask = (1 << pfd.cGreenBits) - 1;\r
+    int blueMask = (1 << pfd.cBlueBits) - 1;\r
+    int i;\r
+\r
+    /* fill in an RGBA color palette */\r
+    for (i = 0; i < n; ++i) {\r
+      logical->palPalEntry[i].peRed =\r
+       (((i >> pfd.cRedShift)   & redMask)   * 255) / redMask;\r
+      logical->palPalEntry[i].peGreen =\r
+       (((i >> pfd.cGreenShift) & greenMask) * 255) / greenMask;\r
+       logical->palPalEntry[i].peBlue =\r
+       (((i >> pfd.cBlueShift)  & blueMask)  * 255) / blueMask;\r
+      logical->palPalEntry[i].peFlags = 0;\r
+    }\r
+  }\r
+\r
+  palette = CreatePalette(logical);\r
+  free(logical);\r
+\r
+  SelectPalette(XHDC, palette, FALSE);\r
+  RealizePalette(XHDC);\r
+#endif /* POKA */\r
+\r
+  return palette;\r
+}\r
+\r
+\r
+\r
+int  GetSystemMetrics( int mode)\r
+{  RECTL rect;\r
+\r
+   switch(mode)\r
+   {   case   SM_CXSCREEN:\r
+        WinQueryWindowRect(HWND_DESKTOP,&rect);\r
+        return (rect.xRight-rect.xLeft);\r
+      break;\r
+       case   SM_CYSCREEN:\r
+        WinQueryWindowRect(HWND_DESKTOP,&rect);\r
+        return (rect.yTop-rect.yBottom);\r
+      break;\r
+       default: ;\r
+   }\r
+   return 0;\r
+}\r
+/*\r
+ *    XParseGeometry parses strings of the form\r
+ *   "=<width>x<height>{+-}<xoffset>{+-}<yoffset>", where\r
+ *   width, height, xoffset, and yoffset are unsigned integers.\r
+ *   Example:  "=80x24+300-49"\r
+ *   The equal sign is optional.\r
+ *   It returns a bitmask that indicates which of the four values\r
+ *   were actually found in the string.  For each value found,\r
+ *   the corresponding argument is updated;  for each value\r
+ *   not found, the corresponding argument is left unchanged.\r
+ */\r
+\r
+static int\r
+ReadInteger(char *string, char **NextString)\r
+{\r
+    register int Result = 0;\r
+    int Sign = 1;\r
+\r
+    if (*string == '+')\r
+       string++;\r
+    else if (*string == '-')\r
+    {\r
+       string++;\r
+       Sign = -1;\r
+    }\r
+    for (; (*string >= '0') && (*string <= '9'); string++)\r
+    {\r
+       Result = (Result * 10) + (*string - '0');\r
+    }\r
+    *NextString = string;\r
+    if (Sign >= 0)\r
+       return (Result);\r
+    else\r
+       return (-Result);\r
+}\r
+\r
+int XParseGeometry(char *string, int *x, int *y, unsigned int *width, unsigned int *height)\r
+{\r
+       int mask = NoValue;\r
+       register char *strind;\r
+       unsigned int tempWidth, tempHeight;\r
+       int tempX, tempY;\r
+       char *nextCharacter;\r
+\r
+       if ( (string == NULL) || (*string == '\0')) return(mask);\r
+       if (*string == '=')\r
+               string++;  /* ignore possible '=' at beg of geometry spec */\r
+\r
+       strind = (char *)string;\r
+       if (*strind != '+' && *strind != '-' && *strind != 'x') {\r
+               tempWidth = ReadInteger(strind, &nextCharacter);\r
+               if (strind == nextCharacter)\r
+                   return (0);\r
+               strind = nextCharacter;\r
+               mask |= WidthValue;\r
+       }\r
+\r
+       if (*strind == 'x' || *strind == 'X') {\r
+               strind++;\r
+               tempHeight = ReadInteger(strind, &nextCharacter);\r
+               if (strind == nextCharacter)\r
+                   return (0);\r
+               strind = nextCharacter;\r
+               mask |= HeightValue;\r
+       }\r
+\r
+       if ((*strind == '+') || (*strind == '-')) {\r
+               if (*strind == '-') {\r
+                       strind++;\r
+                       tempX = -ReadInteger(strind, &nextCharacter);\r
+                       if (strind == nextCharacter)\r
+                           return (0);\r
+                       strind = nextCharacter;\r
+                       mask |= XNegative;\r
+\r
+               }\r
+               else\r
+               {       strind++;\r
+                       tempX = ReadInteger(strind, &nextCharacter);\r
+                       if (strind == nextCharacter)\r
+                           return(0);\r
+                       strind = nextCharacter;\r
+               }\r
+               mask |= XValue;\r
+               if ((*strind == '+') || (*strind == '-')) {\r
+                       if (*strind == '-') {\r
+                               strind++;\r
+                               tempY = -ReadInteger(strind, &nextCharacter);\r
+                               if (strind == nextCharacter)\r
+                                   return(0);\r
+                               strind = nextCharacter;\r
+                               mask |= YNegative;\r
+\r
+                       }\r
+                       else\r
+                       {\r
+                               strind++;\r
+                               tempY = ReadInteger(strind, &nextCharacter);\r
+                               if (strind == nextCharacter)\r
+                                   return(0);\r
+                               strind = nextCharacter;\r
+                       }\r
+                       mask |= YValue;\r
+               }\r
+       }\r
+\r
+       /* If strind isn't at the end of the string the it's an invalid\r
+               geometry specification. */\r
+\r
+       if (*strind != '\0') return (0);\r
+\r
+       if (mask & XValue)\r
+           *x = tempX;\r
+       if (mask & YValue)\r
+           *y = tempY;\r
+       if (mask & WidthValue)\r
+            *width = tempWidth;\r
+       if (mask & HeightValue)\r
+            *height = tempHeight;\r
+       return (mask);\r
+}\r
+\r
+int gettimeofday(struct timeval* tp, void* tzp)\r
+{\r
+ DATETIME    DateTime;\r
+ APIRET       ulrc;  /*  Return Code. */\r
+\r
+ ulrc = DosGetDateTime(&DateTime);\r
+ tp->tv_sec  = 60 * (60*DateTime.hours + DateTime.minutes) + DateTime.seconds;\r
+ tp->tv_usec = DateTime.hundredths * 10000;\r
+ return 0;\r
+}\r
+\r
+\r
+int\r
+XPending(Display* display)\r
+{\r
+  /* similar functionality...I don't think that it is exact, but this\r
+     will have to do. */\r
+  QMSG msg;\r
+  extern HAB   hab;      /* PM anchor block handle         */\r
+\r
+//?? WinPeekMsg(hab\r
+  return WinPeekMsg(hab, &msg, NULLHANDLE, 0, 0, PM_NOREMOVE);\r
+}\r
+\r
+void\r
+__glutAdjustCoords(Window parent, int* x, int* y, int* width, int* height)\r
+{\r
+  RECTL rect;\r
+\r
+  /* adjust the window rectangle because Win32 thinks that the x, y,\r
+     width & height are the WHOLE window (including decorations),\r
+     whereas GLUT treats the x, y, width & height as only the CLIENT\r
+     area of the window. */\r
+  rect.xLeft = *x; rect.yTop = *y;\r
+  rect.xRight = *x + *width; rect.yBottom = *y + *height;\r
+\r
+  /* must adjust the coordinates according to the correct style\r
+     because depending on the style, there may or may not be\r
+     borders. */\r
+//??  AdjustWindowRect(&rect, WS_CLIPSIBLINGS | WS_CLIPCHILDREN |\r
+//??              (parent ? WS_CHILD : WS_OVERLAPPEDWINDOW),\r
+//??              FALSE);\r
+  /* FALSE in the third parameter = window has no menu bar */\r
+\r
+  /* readjust if the x and y are offscreen */\r
+  if(rect.xLeft < 0) {\r
+    *x = 0;\r
+  } else {\r
+    *x = rect.xLeft;\r
+  }\r
+\r
+  if(rect.yTop < 0) {\r
+    *y = 0;\r
+  } else {\r
+    *y = rect.yTop;\r
+  }\r
+\r
+  *width = rect.xRight - rect.xLeft;     /* adjusted width */\r
+  *height = -(rect.yBottom - rect.yTop);    /* adjusted height */\r
+}\r
+\r
+\r
+int\r
+__glutGetTransparentPixel(Display * dpy, XVisualInfo * vinfo)\r
+{\r
+  /* the transparent pixel on Win32 is always index number 0.  So if\r
+     we put this routine in this file, we can avoid compiling the\r
+     whole of layerutil.c which is where this routine normally comes\r
+     from. */\r
+  return 0;\r
+}\r
+\r
+/* Translate point coordinates src_x and src_y from src to dst */\r
+\r
+Bool\r
+XTranslateCoordinates(Display *display, Window src, Window dst,\r
+                     int src_x, int src_y,\r
+                     int* dest_x_return, int* dest_y_return,\r
+                     Window* child_return)\r
+{\r
+  SWP swp_src,swp_dst;\r
+\r
+  WinQueryWindowPos(src,&swp_src);\r
+  WinQueryWindowPos(dst,&swp_dst);\r
+\r
+  *dest_x_return =  src_x + swp_src.x - swp_dst.x;\r
+  *dest_y_return =  src_y + swp_src.y - swp_dst.y;\r
+\r
+  /* just to make compilers happy...we don't use the return value. */\r
+  return True;\r
+}\r
+\r
+Status\r
+XGetGeometry(Display* display, Window window, Window* root_return,\r
+            int* x_return, int* y_return,\r
+            unsigned int* width_return, unsigned int* height_return,\r
+            unsigned int *border_width_return, unsigned int* depth_return)\r
+{\r
+  /* KLUDGE: doesn't return the border_width or depth or root, x & y\r
+     are in screen coordinates. */\r
+  SWP swp_src;\r
+  WinQueryWindowPos(window,&swp_src);\r
+\r
+  *x_return = swp_src.x;\r
+  *y_return = swp_src.y;\r
+  *width_return = swp_src.cx;\r
+  *height_return = swp_src.cy;\r
+\r
+  /* just to make compilers happy...we don't use the return value. */\r
+  return 1;\r
+}\r
+\r
+/* Get Display Width in millimeters */\r
+int\r
+DisplayWidthMM(Display* display, int screen)\r
+{\r
+  int width;\r
+  LONG *pVC_Caps;\r
+  pVC_Caps = GetVideoConfig(NULLHANDLE);\r
+  width = (int)( 0.001 * pVC_Caps[CAPS_WIDTH]  / pVC_Caps[CAPS_HORIZONTAL_RESOLUTION]);/* mm */\r
+  return width;\r
+}\r
+\r
+/* Get Display Height in millimeters */\r
+int\r
+DisplayHeightMM(Display* display, int screen)\r
+{\r
+  int height;\r
+  LONG *pVC_Caps;\r
+  pVC_Caps = GetVideoConfig(NULLHANDLE);\r
+  height = (int)( 0.001 * pVC_Caps[CAPS_HEIGHT] / pVC_Caps[CAPS_VERTICAL_RESOLUTION]); /* mm */\r
+  return height;\r
+}\r
+\r
+void ScreenToClient( HWND hwnd,   POINTL *point)\r
+{\r
+  SWP swp_src;\r
+  WinQueryWindowPos(hwnd,&swp_src);\r
+  point->x -= swp_src.x;\r
+  point->y -= swp_src.y;\r
+}\r
+\r
+\1a
\ No newline at end of file
diff --git a/src/glut/os2/glutOverlay.cpp b/src/glut/os2/glutOverlay.cpp
new file mode 100644 (file)
index 0000000..563708d
--- /dev/null
@@ -0,0 +1,133 @@
+/***********************************************************\r
+ *     Copyright (C) 1997, Be Inc.  All rights reserved.\r
+ *\r
+ *  FILE:      glutOverlay.cpp\r
+ *\r
+ *     DESCRIPTION:    we don't support overlays, so this code is\r
+ *             really simple\r
+ ***********************************************************/\r
+\r
+/***********************************************************\r
+ *     Headers\r
+ ***********************************************************/\r
+#include <GL/glut.h>\r
+#include "glutint.h"\r
+#include "glutbitmap.h"\r
+#include "glutstroke.h"\r
+\r
+GLUTAPI void GLUTAPIENTRY\r
+glutEstablishOverlay(void)\r
+{\r
+       __glutFatalError("OS2PM lacks overlay support.");\r
+}\r
+\r
+GLUTAPI void GLUTAPIENTRY\r
+glutUseLayer(GLenum layer) {\r
+       // ignore\r
+}\r
+\r
+GLUTAPI void GLUTAPIENTRY\r
+glutRemoveOverlay(void) {\r
+       // ignore\r
+}\r
+\r
+GLUTAPI void GLUTAPIENTRY\r
+glutPostOverlayRedisplay(void) {\r
+       // ignore\r
+}\r
+\r
+GLUTAPI void GLUTAPIENTRY\r
+glutShowOverlay(void) {\r
+       // ignore\r
+}\r
+\r
+GLUTAPI void GLUTAPIENTRY glutHideOverlay(void)\r
+{\r
+       // ignore\r
+}\r
+\r
+int GLUTAPIENTRY\r
+glutLayerGet(GLenum param)\r
+{\r
+       // ignore\r
+}\r
+\r
+/***********************************************************\r
+ *     Unsupported callbacks\r
+ ***********************************************************/\r
+GLUTAPI void GLUTAPIENTRY\r
+glutOverlayDisplayFunc(GLUTdisplayCB displayFunc)\r
+{\r
+}\r
+\r
+GLUTAPI void GLUTAPIENTRY\r
+glutSpaceballMotionFunc(GLUTspaceMotionCB spaceMotionFunc)\r
+{\r
+}\r
+\r
+GLUTAPI void GLUTAPIENTRY\r
+glutSpaceballRotateFunc(GLUTspaceRotateCB spaceRotateFunc)\r
+{\r
+}\r
+\r
+GLUTAPI void GLUTAPIENTRY\r
+glutSpaceballButtonFunc(GLUTspaceButtonCB spaceButtonFunc)\r
+{\r
+}\r
+\r
+GLUTAPI void GLUTAPIENTRY\r
+glutButtonBoxFunc(GLUTbuttonBoxCB buttonBoxFunc)\r
+{\r
+}\r
+\r
+GLUTAPI void GLUTAPIENTRY\r
+glutDialsFunc(GLUTdialsCB dialsFunc)\r
+{\r
+}\r
+\r
+GLUTAPI void GLUTAPIENTRY\r
+glutTabletMotionFunc(GLUTtabletMotionCB tabletMotionFunc)\r
+{\r
+}\r
+\r
+GLUTAPI void GLUTAPIENTRY\r
+glutTabletButtonFunc(GLUTtabletButtonCB tabletButtonFunc)\r
+{\r
+}\r
+GLUTAPI void GLUTAPIENTRY\r
+glutPostWindowOverlayRedisplay(int win)\r
+{ //\r
+}\r
+\r
+void GLUTAPIENTRY\r
+glutInitDisplayString(const char *string)\r
+{ //\r
+}\r
+void GLUTAPIENTRY\r
+glutJoystickFunc(GLUTjoystickCB joystickFunc, int pollInterval)\r
+{ //\r
+}\r
+\r
+void GLUTAPIENTRY\r
+glutForceJoystickFunc(void)\r
+{ //\r
+}\r
+\r
+\r
+int  GLUTAPIENTRY\r
+glutBitmapWidth(GLUTbitmapFont font, int c)\r
+{  return 0;\r
+}\r
+int  GLUTAPIENTRY\r
+glutBitmapLength(GLUTbitmapFont font, const unsigned char *string)\r
+{ //\r
+  return 0;\r
+}\r
+int GLUTAPIENTRY\r
+glutStrokeWidth(GLUTstrokeFont font, int c)\r
+{  return 0;\r
+}\r
+int GLUTAPIENTRY\r
+glutStrokeLength(GLUTstrokeFont font, const unsigned char *string)\r
+{ return 0;\r
+}\r
diff --git a/src/glut/os2/glut_8x13.cpp b/src/glut/os2/glut_8x13.cpp
new file mode 100644 (file)
index 0000000..e361e17
--- /dev/null
@@ -0,0 +1,2076 @@
+\r
+/* GENERATED FILE -- DO NOT MODIFY */\r
+\r
+#define glutBitmap8By13 XXX\r
+#include "glutbitmap.h"\r
+#undef glutBitmap8By13\r
+\r
+#ifdef _WIN32\r
+/* XXX Work around Microsoft OpenGL 1.1 bug where glBitmap with\r
+   a height or width of zero does not advance the raster position\r
+   as specified by OpenGL. (Cosmo OpenGL does not have this bug.) */\r
+static const GLubyte ch0data[] = { 0x0 };\r
+static const BitmapCharRec ch0 = {1,1,0,0,8,ch0data};\r
+#else\r
+static const BitmapCharRec ch0 = {0,0,0,0,8,0};\r
+#endif\r
+\r
+#ifdef _WIN32\r
+/* XXX Work around Microsoft OpenGL 1.1 bug where glBitmap with\r
+   a height or width of zero does not advance the raster position\r
+   as specified by OpenGL. (Cosmo OpenGL does not have this bug.) */\r
+static const GLubyte ch32data[] = { 0x0 };\r
+static const BitmapCharRec ch32 = {1,1,0,0,8,ch32data};\r
+#else\r
+static const BitmapCharRec ch32 = {0,0,0,0,8,0};\r
+#endif\r
+\r
+#ifdef _WIN32\r
+/* XXX Work around Microsoft OpenGL 1.1 bug where glBitmap with\r
+   a height or width of zero does not advance the raster position\r
+   as specified by OpenGL. (Cosmo OpenGL does not have this bug.) */\r
+static const GLubyte ch127data[] = { 0x0 };\r
+static const BitmapCharRec ch127 = {1,1,0,0,8,ch127data};\r
+#else\r
+static const BitmapCharRec ch127 = {0,0,0,0,8,0};\r
+#endif\r
+\r
+#ifdef _WIN32\r
+/* XXX Work around Microsoft OpenGL 1.1 bug where glBitmap with\r
+   a height or width of zero does not advance the raster position\r
+   as specified by OpenGL. (Cosmo OpenGL does not have this bug.) */\r
+static const GLubyte ch160data[] = { 0x0 };\r
+static const BitmapCharRec ch160 = {1,1,0,0,8,ch160data};\r
+#else\r
+static const BitmapCharRec ch160 = {0,0,0,0,8,0};\r
+#endif\r
+\r
+/* char: 0xff */\r
+\r
+static const GLubyte ch255data[] = {\r
+0x78,0x84,0x4,0x74,0x8c,0x84,0x84,0x84,0x0,0x0,0x48,0x48,\r
+};\r
+\r
+static const BitmapCharRec ch255 = {6,12,-1,2,8,ch255data};\r
+\r
+/* char: 0xfe */\r
+\r
+static const GLubyte ch254data[] = {\r
+0x80,0x80,0xb8,0xc4,0x84,0x84,0xc4,0xb8,0x80,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch254 = {6,10,-1,2,8,ch254data};\r
+\r
+/* char: 0xfd */\r
+\r
+static const GLubyte ch253data[] = {\r
+0x78,0x84,0x4,0x74,0x8c,0x84,0x84,0x84,0x0,0x0,0x20,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch253 = {6,12,-1,2,8,ch253data};\r
+\r
+/* char: 0xfc */\r
+\r
+static const GLubyte ch252data[] = {\r
+0x74,0x88,0x88,0x88,0x88,0x88,0x0,0x0,0x48,0x48,\r
+};\r
+\r
+static const BitmapCharRec ch252 = {6,10,-1,0,8,ch252data};\r
+\r
+/* char: 0xfb */\r
+\r
+static const GLubyte ch251data[] = {\r
+0x74,0x88,0x88,0x88,0x88,0x88,0x0,0x0,0x48,0x30,\r
+};\r
+\r
+static const BitmapCharRec ch251 = {6,10,-1,0,8,ch251data};\r
+\r
+/* char: 0xfa */\r
+\r
+static const GLubyte ch250data[] = {\r
+0x74,0x88,0x88,0x88,0x88,0x88,0x0,0x0,0x20,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch250 = {6,10,-1,0,8,ch250data};\r
+\r
+/* char: 0xf9 */\r
+\r
+static const GLubyte ch249data[] = {\r
+0x74,0x88,0x88,0x88,0x88,0x88,0x0,0x0,0x10,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch249 = {6,10,-1,0,8,ch249data};\r
+\r
+/* char: 0xf8 */\r
+\r
+static const GLubyte ch248data[] = {\r
+0x80,0x78,0xc4,0xa4,0x94,0x8c,0x78,0x4,\r
+};\r
+\r
+static const BitmapCharRec ch248 = {6,8,-1,1,8,ch248data};\r
+\r
+/* char: 0xf7 */\r
+\r
+static const GLubyte ch247data[] = {\r
+0x20,0x20,0x0,0xf8,0x0,0x20,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch247 = {5,7,-1,-1,8,ch247data};\r
+\r
+/* char: 0xf6 */\r
+\r
+static const GLubyte ch246data[] = {\r
+0x78,0x84,0x84,0x84,0x84,0x78,0x0,0x0,0x48,0x48,\r
+};\r
+\r
+static const BitmapCharRec ch246 = {6,10,-1,0,8,ch246data};\r
+\r
+/* char: 0xf5 */\r
+\r
+static const GLubyte ch245data[] = {\r
+0x78,0x84,0x84,0x84,0x84,0x78,0x0,0x0,0x50,0x28,\r
+};\r
+\r
+static const BitmapCharRec ch245 = {6,10,-1,0,8,ch245data};\r
+\r
+/* char: 0xf4 */\r
+\r
+static const GLubyte ch244data[] = {\r
+0x78,0x84,0x84,0x84,0x84,0x78,0x0,0x0,0x48,0x30,\r
+};\r
+\r
+static const BitmapCharRec ch244 = {6,10,-1,0,8,ch244data};\r
+\r
+/* char: 0xf3 */\r
+\r
+static const GLubyte ch243data[] = {\r
+0x78,0x84,0x84,0x84,0x84,0x78,0x0,0x0,0x20,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch243 = {6,10,-1,0,8,ch243data};\r
+\r
+/* char: 0xf2 */\r
+\r
+static const GLubyte ch242data[] = {\r
+0x78,0x84,0x84,0x84,0x84,0x78,0x0,0x0,0x10,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch242 = {6,10,-1,0,8,ch242data};\r
+\r
+/* char: 0xf1 */\r
+\r
+static const GLubyte ch241data[] = {\r
+0x84,0x84,0x84,0x84,0xc4,0xb8,0x0,0x0,0x50,0x28,\r
+};\r
+\r
+static const BitmapCharRec ch241 = {6,10,-1,0,8,ch241data};\r
+\r
+/* char: 0xf0 */\r
+\r
+static const GLubyte ch240data[] = {\r
+0x78,0x84,0x84,0x84,0x84,0x78,0x8,0x50,0x30,0x48,\r
+};\r
+\r
+static const BitmapCharRec ch240 = {6,10,-1,0,8,ch240data};\r
+\r
+/* char: 0xef */\r
+\r
+static const GLubyte ch239data[] = {\r
+0xf8,0x20,0x20,0x20,0x20,0x60,0x0,0x0,0x50,0x50,\r
+};\r
+\r
+static const BitmapCharRec ch239 = {5,10,-1,0,8,ch239data};\r
+\r
+/* char: 0xee */\r
+\r
+static const GLubyte ch238data[] = {\r
+0xf8,0x20,0x20,0x20,0x20,0x60,0x0,0x0,0x90,0x60,\r
+};\r
+\r
+static const BitmapCharRec ch238 = {5,10,-1,0,8,ch238data};\r
+\r
+/* char: 0xed */\r
+\r
+static const GLubyte ch237data[] = {\r
+0xf8,0x20,0x20,0x20,0x20,0x60,0x0,0x0,0x40,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch237 = {5,10,-1,0,8,ch237data};\r
+\r
+/* char: 0xec */\r
+\r
+static const GLubyte ch236data[] = {\r
+0xf8,0x20,0x20,0x20,0x20,0x60,0x0,0x0,0x20,0x40,\r
+};\r
+\r
+static const BitmapCharRec ch236 = {5,10,-1,0,8,ch236data};\r
+\r
+/* char: 0xeb */\r
+\r
+static const GLubyte ch235data[] = {\r
+0x78,0x84,0x80,0xfc,0x84,0x78,0x0,0x0,0x48,0x48,\r
+};\r
+\r
+static const BitmapCharRec ch235 = {6,10,-1,0,8,ch235data};\r
+\r
+/* char: 0xea */\r
+\r
+static const GLubyte ch234data[] = {\r
+0x78,0x84,0x80,0xfc,0x84,0x78,0x0,0x0,0x48,0x30,\r
+};\r
+\r
+static const BitmapCharRec ch234 = {6,10,-1,0,8,ch234data};\r
+\r
+/* char: 0xe9 */\r
+\r
+static const GLubyte ch233data[] = {\r
+0x78,0x84,0x80,0xfc,0x84,0x78,0x0,0x0,0x20,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch233 = {6,10,-1,0,8,ch233data};\r
+\r
+/* char: 0xe8 */\r
+\r
+static const GLubyte ch232data[] = {\r
+0x78,0x84,0x80,0xfc,0x84,0x78,0x0,0x0,0x10,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch232 = {6,10,-1,0,8,ch232data};\r
+\r
+/* char: 0xe7 */\r
+\r
+static const GLubyte ch231data[] = {\r
+0x20,0x10,0x78,0x84,0x80,0x80,0x84,0x78,\r
+};\r
+\r
+static const BitmapCharRec ch231 = {6,8,-1,2,8,ch231data};\r
+\r
+/* char: 0xe6 */\r
+\r
+static const GLubyte ch230data[] = {\r
+0x6c,0x92,0x90,0x7c,0x12,0x6c,\r
+};\r
+\r
+static const BitmapCharRec ch230 = {7,6,0,0,8,ch230data};\r
+\r
+/* char: 0xe5 */\r
+\r
+static const GLubyte ch229data[] = {\r
+0x74,0x8c,0x84,0x7c,0x4,0x78,0x0,0x30,0x48,0x30,\r
+};\r
+\r
+static const BitmapCharRec ch229 = {6,10,-1,0,8,ch229data};\r
+\r
+/* char: 0xe4 */\r
+\r
+static const GLubyte ch228data[] = {\r
+0x74,0x8c,0x84,0x7c,0x4,0x78,0x0,0x0,0x48,0x48,\r
+};\r
+\r
+static const BitmapCharRec ch228 = {6,10,-1,0,8,ch228data};\r
+\r
+/* char: 0xe3 */\r
+\r
+static const GLubyte ch227data[] = {\r
+0x74,0x8c,0x84,0x7c,0x4,0x78,0x0,0x0,0x50,0x28,\r
+};\r
+\r
+static const BitmapCharRec ch227 = {6,10,-1,0,8,ch227data};\r
+\r
+/* char: 0xe2 */\r
+\r
+static const GLubyte ch226data[] = {\r
+0x74,0x8c,0x84,0x7c,0x4,0x78,0x0,0x0,0x48,0x30,\r
+};\r
+\r
+static const BitmapCharRec ch226 = {6,10,-1,0,8,ch226data};\r
+\r
+/* char: 0xe1 */\r
+\r
+static const GLubyte ch225data[] = {\r
+0x74,0x8c,0x84,0x7c,0x4,0x78,0x0,0x0,0x20,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch225 = {6,10,-1,0,8,ch225data};\r
+\r
+/* char: 0xe0 */\r
+\r
+static const GLubyte ch224data[] = {\r
+0x74,0x8c,0x84,0x7c,0x4,0x78,0x0,0x0,0x10,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch224 = {6,10,-1,0,8,ch224data};\r
+\r
+/* char: 0xdf */\r
+\r
+static const GLubyte ch223data[] = {\r
+0x80,0xb8,0xc4,0x84,0x84,0xf8,0x84,0x84,0x78,\r
+};\r
+\r
+static const BitmapCharRec ch223 = {6,9,-1,1,8,ch223data};\r
+\r
+/* char: 0xde */\r
+\r
+static const GLubyte ch222data[] = {\r
+0x80,0x80,0x80,0xf8,0x84,0x84,0x84,0xf8,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch222 = {6,9,-1,0,8,ch222data};\r
+\r
+/* char: 0xdd */\r
+\r
+static const GLubyte ch221data[] = {\r
+0x20,0x20,0x20,0x20,0x50,0x88,0x88,0x0,0x20,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch221 = {5,10,-1,0,8,ch221data};\r
+\r
+/* char: 0xdc */\r
+\r
+static const GLubyte ch220data[] = {\r
+0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x0,0x48,0x48,\r
+};\r
+\r
+static const BitmapCharRec ch220 = {6,10,-1,0,8,ch220data};\r
+\r
+/* char: 0xdb */\r
+\r
+static const GLubyte ch219data[] = {\r
+0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x0,0x48,0x30,\r
+};\r
+\r
+static const BitmapCharRec ch219 = {6,10,-1,0,8,ch219data};\r
+\r
+/* char: 0xda */\r
+\r
+static const GLubyte ch218data[] = {\r
+0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x0,0x20,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch218 = {6,10,-1,0,8,ch218data};\r
+\r
+/* char: 0xd9 */\r
+\r
+static const GLubyte ch217data[] = {\r
+0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x0,0x10,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch217 = {6,10,-1,0,8,ch217data};\r
+\r
+/* char: 0xd8 */\r
+\r
+static const GLubyte ch216data[] = {\r
+0x80,0x78,0xc4,0xa4,0xa4,0xa4,0x94,0x94,0x8c,0x78,0x4,\r
+};\r
+\r
+static const BitmapCharRec ch216 = {6,11,-1,1,8,ch216data};\r
+\r
+/* char: 0xd7 */\r
+\r
+static const GLubyte ch215data[] = {\r
+0x84,0x48,0x30,0x30,0x48,0x84,\r
+};\r
+\r
+static const BitmapCharRec ch215 = {6,6,-1,-1,8,ch215data};\r
+\r
+/* char: 0xd6 */\r
+\r
+static const GLubyte ch214data[] = {\r
+0x7c,0x82,0x82,0x82,0x82,0x82,0x7c,0x0,0x28,0x28,\r
+};\r
+\r
+static const BitmapCharRec ch214 = {7,10,0,0,8,ch214data};\r
+\r
+/* char: 0xd5 */\r
+\r
+static const GLubyte ch213data[] = {\r
+0x7c,0x82,0x82,0x82,0x82,0x82,0x7c,0x0,0x28,0x14,\r
+};\r
+\r
+static const BitmapCharRec ch213 = {7,10,0,0,8,ch213data};\r
+\r
+/* char: 0xd4 */\r
+\r
+static const GLubyte ch212data[] = {\r
+0x7c,0x82,0x82,0x82,0x82,0x82,0x7c,0x0,0x24,0x18,\r
+};\r
+\r
+static const BitmapCharRec ch212 = {7,10,0,0,8,ch212data};\r
+\r
+/* char: 0xd3 */\r
+\r
+static const GLubyte ch211data[] = {\r
+0x7c,0x82,0x82,0x82,0x82,0x82,0x7c,0x0,0x10,0x8,\r
+};\r
+\r
+static const BitmapCharRec ch211 = {7,10,0,0,8,ch211data};\r
+\r
+/* char: 0xd2 */\r
+\r
+static const GLubyte ch210data[] = {\r
+0x7c,0x82,0x82,0x82,0x82,0x82,0x7c,0x0,0x8,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch210 = {7,10,0,0,8,ch210data};\r
+\r
+/* char: 0xd1 */\r
+\r
+static const GLubyte ch209data[] = {\r
+0x82,0x86,0x8a,0x92,0xa2,0xc2,0x82,0x0,0x28,0x14,\r
+};\r
+\r
+static const BitmapCharRec ch209 = {7,10,0,0,8,ch209data};\r
+\r
+/* char: 0xd0 */\r
+\r
+static const GLubyte ch208data[] = {\r
+0xfc,0x42,0x42,0x42,0xe2,0x42,0x42,0x42,0xfc,\r
+};\r
+\r
+static const BitmapCharRec ch208 = {7,9,0,0,8,ch208data};\r
+\r
+/* char: 0xcf */\r
+\r
+static const GLubyte ch207data[] = {\r
+0xf8,0x20,0x20,0x20,0x20,0x20,0xf8,0x0,0x50,0x50,\r
+};\r
+\r
+static const BitmapCharRec ch207 = {5,10,-1,0,8,ch207data};\r
+\r
+/* char: 0xce */\r
+\r
+static const GLubyte ch206data[] = {\r
+0xf8,0x20,0x20,0x20,0x20,0x20,0xf8,0x0,0x48,0x30,\r
+};\r
+\r
+static const BitmapCharRec ch206 = {5,10,-1,0,8,ch206data};\r
+\r
+/* char: 0xcd */\r
+\r
+static const GLubyte ch205data[] = {\r
+0xf8,0x20,0x20,0x20,0x20,0x20,0xf8,0x0,0x20,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch205 = {5,10,-1,0,8,ch205data};\r
+\r
+/* char: 0xcc */\r
+\r
+static const GLubyte ch204data[] = {\r
+0xf8,0x20,0x20,0x20,0x20,0x20,0xf8,0x0,0x10,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch204 = {5,10,-1,0,8,ch204data};\r
+\r
+/* char: 0xcb */\r
+\r
+static const GLubyte ch203data[] = {\r
+0xfc,0x80,0x80,0xf0,0x80,0x80,0xfc,0x0,0x48,0x48,\r
+};\r
+\r
+static const BitmapCharRec ch203 = {6,10,-1,0,8,ch203data};\r
+\r
+/* char: 0xca */\r
+\r
+static const GLubyte ch202data[] = {\r
+0xfc,0x80,0x80,0xf0,0x80,0x80,0xfc,0x0,0x48,0x30,\r
+};\r
+\r
+static const BitmapCharRec ch202 = {6,10,-1,0,8,ch202data};\r
+\r
+/* char: 0xc9 */\r
+\r
+static const GLubyte ch201data[] = {\r
+0xfc,0x80,0x80,0xf0,0x80,0x80,0xfc,0x0,0x20,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch201 = {6,10,-1,0,8,ch201data};\r
+\r
+/* char: 0xc8 */\r
+\r
+static const GLubyte ch200data[] = {\r
+0xfc,0x80,0x80,0xf0,0x80,0x80,0xfc,0x0,0x10,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch200 = {6,10,-1,0,8,ch200data};\r
+\r
+/* char: 0xc7 */\r
+\r
+static const GLubyte ch199data[] = {\r
+0x20,0x10,0x78,0x84,0x80,0x80,0x80,0x80,0x80,0x84,0x78,\r
+};\r
+\r
+static const BitmapCharRec ch199 = {6,11,-1,2,8,ch199data};\r
+\r
+/* char: 0xc6 */\r
+\r
+static const GLubyte ch198data[] = {\r
+0x9e,0x90,0x90,0xf0,0x9c,0x90,0x90,0x90,0x6e,\r
+};\r
+\r
+static const BitmapCharRec ch198 = {7,9,0,0,8,ch198data};\r
+\r
+/* char: 0xc5 */\r
+\r
+static const GLubyte ch197data[] = {\r
+0x84,0x84,0xfc,0x84,0x84,0x48,0x30,0x30,0x48,0x30,\r
+};\r
+\r
+static const BitmapCharRec ch197 = {6,10,-1,0,8,ch197data};\r
+\r
+/* char: 0xc4 */\r
+\r
+static const GLubyte ch196data[] = {\r
+0x84,0x84,0xfc,0x84,0x84,0x48,0x30,0x0,0x48,0x48,\r
+};\r
+\r
+static const BitmapCharRec ch196 = {6,10,-1,0,8,ch196data};\r
+\r
+/* char: 0xc3 */\r
+\r
+static const GLubyte ch195data[] = {\r
+0x84,0x84,0xfc,0x84,0x84,0x48,0x30,0x0,0x50,0x28,\r
+};\r
+\r
+static const BitmapCharRec ch195 = {6,10,-1,0,8,ch195data};\r
+\r
+/* char: 0xc2 */\r
+\r
+static const GLubyte ch194data[] = {\r
+0x84,0x84,0xfc,0x84,0x84,0x48,0x30,0x0,0x48,0x30,\r
+};\r
+\r
+static const BitmapCharRec ch194 = {6,10,-1,0,8,ch194data};\r
+\r
+/* char: 0xc1 */\r
+\r
+static const GLubyte ch193data[] = {\r
+0x84,0x84,0xfc,0x84,0x84,0x48,0x30,0x0,0x20,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch193 = {6,10,-1,0,8,ch193data};\r
+\r
+/* char: 0xc0 */\r
+\r
+static const GLubyte ch192data[] = {\r
+0x84,0x84,0xfc,0x84,0x84,0x48,0x30,0x0,0x10,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch192 = {6,10,-1,0,8,ch192data};\r
+\r
+/* char: 0xbf */\r
+\r
+static const GLubyte ch191data[] = {\r
+0x78,0x84,0x84,0x80,0x40,0x20,0x20,0x0,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch191 = {6,9,-1,0,8,ch191data};\r
+\r
+/* char: 0xbe */\r
+\r
+static const GLubyte ch190data[] = {\r
+0x6,0x1a,0x12,0xa,0x66,0x92,0x10,0x20,0x90,0x60,\r
+};\r
+\r
+static const BitmapCharRec ch190 = {7,10,0,0,8,ch190data};\r
+\r
+/* char: 0xbd */\r
+\r
+static const GLubyte ch189data[] = {\r
+0x1e,0x10,0xc,0x2,0xf2,0x4c,0x40,0x40,0xc0,0x40,\r
+};\r
+\r
+static const BitmapCharRec ch189 = {7,10,0,0,8,ch189data};\r
+\r
+/* char: 0xbc */\r
+\r
+static const GLubyte ch188data[] = {\r
+0x6,0x1a,0x12,0xa,0xe6,0x42,0x40,0x40,0xc0,0x40,\r
+};\r
+\r
+static const BitmapCharRec ch188 = {7,10,0,0,8,ch188data};\r
+\r
+/* char: 0xbb */\r
+\r
+static const GLubyte ch187data[] = {\r
+0x90,0x48,0x24,0x12,0x24,0x48,0x90,\r
+};\r
+\r
+static const BitmapCharRec ch187 = {7,7,0,-1,8,ch187data};\r
+\r
+/* char: 0xba */\r
+\r
+static const GLubyte ch186data[] = {\r
+0xf0,0x0,0x60,0x90,0x90,0x60,\r
+};\r
+\r
+static const BitmapCharRec ch186 = {4,6,-1,-3,8,ch186data};\r
+\r
+/* char: 0xb9 */\r
+\r
+static const GLubyte ch185data[] = {\r
+0xe0,0x40,0x40,0x40,0xc0,0x40,\r
+};\r
+\r
+static const BitmapCharRec ch185 = {3,6,-1,-4,8,ch185data};\r
+\r
+/* char: 0xb8 */\r
+\r
+static const GLubyte ch184data[] = {\r
+0xc0,0x40,\r
+};\r
+\r
+static const BitmapCharRec ch184 = {2,2,-3,2,8,ch184data};\r
+\r
+/* char: 0xb7 */\r
+\r
+static const GLubyte ch183data[] = {\r
+0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch183 = {2,1,-3,-4,8,ch183data};\r
+\r
+/* char: 0xb6 */\r
+\r
+static const GLubyte ch182data[] = {\r
+0x28,0x28,0x28,0x28,0x68,0xe8,0xe8,0xe8,0x7c,\r
+};\r
+\r
+static const BitmapCharRec ch182 = {6,9,-1,0,8,ch182data};\r
+\r
+/* char: 0xb5 */\r
+\r
+static const GLubyte ch181data[] = {\r
+0x80,0xb4,0xcc,0x84,0x84,0x84,0x84,\r
+};\r
+\r
+static const BitmapCharRec ch181 = {6,7,-1,1,8,ch181data};\r
+\r
+/* char: 0xb4 */\r
+\r
+static const GLubyte ch180data[] = {\r
+0x80,0x40,\r
+};\r
+\r
+static const BitmapCharRec ch180 = {2,2,-3,-8,8,ch180data};\r
+\r
+/* char: 0xb3 */\r
+\r
+static const GLubyte ch179data[] = {\r
+0x60,0x90,0x10,0x20,0x90,0x60,\r
+};\r
+\r
+static const BitmapCharRec ch179 = {4,6,-1,-4,8,ch179data};\r
+\r
+/* char: 0xb2 */\r
+\r
+static const GLubyte ch178data[] = {\r
+0xf0,0x80,0x60,0x10,0x90,0x60,\r
+};\r
+\r
+static const BitmapCharRec ch178 = {4,6,-1,-4,8,ch178data};\r
+\r
+/* char: 0xb1 */\r
+\r
+static const GLubyte ch177data[] = {\r
+0xf8,0x0,0x20,0x20,0xf8,0x20,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch177 = {5,7,-1,-1,8,ch177data};\r
+\r
+/* char: 0xb0 */\r
+\r
+static const GLubyte ch176data[] = {\r
+0x60,0x90,0x90,0x60,\r
+};\r
+\r
+static const BitmapCharRec ch176 = {4,4,-2,-5,8,ch176data};\r
+\r
+/* char: 0xaf */\r
+\r
+static const GLubyte ch175data[] = {\r
+0xfc,\r
+};\r
+\r
+static const BitmapCharRec ch175 = {6,1,-1,-8,8,ch175data};\r
+\r
+/* char: 0xae */\r
+\r
+static const GLubyte ch174data[] = {\r
+0x38,0x44,0xaa,0xb2,0xaa,0xaa,0x92,0x44,0x38,\r
+};\r
+\r
+static const BitmapCharRec ch174 = {7,9,0,-1,8,ch174data};\r
+\r
+/* char: 0xad */\r
+\r
+static const GLubyte ch173data[] = {\r
+0xfc,\r
+};\r
+\r
+static const BitmapCharRec ch173 = {6,1,-1,-4,8,ch173data};\r
+\r
+/* char: 0xac */\r
+\r
+static const GLubyte ch172data[] = {\r
+0x4,0x4,0x4,0xfc,\r
+};\r
+\r
+static const BitmapCharRec ch172 = {6,4,-1,-1,8,ch172data};\r
+\r
+/* char: 0xab */\r
+\r
+static const GLubyte ch171data[] = {\r
+0x12,0x24,0x48,0x90,0x48,0x24,0x12,\r
+};\r
+\r
+static const BitmapCharRec ch171 = {7,7,0,-1,8,ch171data};\r
+\r
+/* char: 0xaa */\r
+\r
+static const GLubyte ch170data[] = {\r
+0xf8,0x0,0x78,0x88,0x78,0x8,0x70,\r
+};\r
+\r
+static const BitmapCharRec ch170 = {5,7,-1,-2,8,ch170data};\r
+\r
+/* char: 0xa9 */\r
+\r
+static const GLubyte ch169data[] = {\r
+0x38,0x44,0x92,0xaa,0xa2,0xaa,0x92,0x44,0x38,\r
+};\r
+\r
+static const BitmapCharRec ch169 = {7,9,0,-1,8,ch169data};\r
+\r
+/* char: 0xa8 */\r
+\r
+static const GLubyte ch168data[] = {\r
+0xd8,\r
+};\r
+\r
+static const BitmapCharRec ch168 = {5,1,-1,-8,8,ch168data};\r
+\r
+/* char: 0xa7 */\r
+\r
+static const GLubyte ch167data[] = {\r
+0x60,0x90,0x10,0x60,0x90,0x90,0x60,0x80,0x90,0x60,\r
+};\r
+\r
+static const BitmapCharRec ch167 = {4,10,-2,0,8,ch167data};\r
+\r
+/* char: 0xa6 */\r
+\r
+static const GLubyte ch166data[] = {\r
+0x80,0x80,0x80,0x80,0x0,0x80,0x80,0x80,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch166 = {1,9,-3,0,8,ch166data};\r
+\r
+/* char: 0xa5 */\r
+\r
+static const GLubyte ch165data[] = {\r
+0x10,0x10,0x7c,0x10,0x7c,0x28,0x44,0x82,0x82,\r
+};\r
+\r
+static const BitmapCharRec ch165 = {7,9,0,0,8,ch165data};\r
+\r
+/* char: 0xa4 */\r
+\r
+static const GLubyte ch164data[] = {\r
+0x84,0x78,0x48,0x48,0x78,0x84,\r
+};\r
+\r
+static const BitmapCharRec ch164 = {6,6,-1,-1,8,ch164data};\r
+\r
+/* char: 0xa3 */\r
+\r
+static const GLubyte ch163data[] = {\r
+0xdc,0x62,0x20,0x20,0x20,0x70,0x20,0x22,0x1c,\r
+};\r
+\r
+static const BitmapCharRec ch163 = {7,9,0,0,8,ch163data};\r
+\r
+/* char: 0xa2 */\r
+\r
+static const GLubyte ch162data[] = {\r
+0x20,0x70,0xa8,0xa0,0xa0,0xa8,0x70,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch162 = {5,8,-1,-1,8,ch162data};\r
+\r
+/* char: 0xa1 */\r
+\r
+static const GLubyte ch161data[] = {\r
+0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch161 = {1,9,-3,0,8,ch161data};\r
+\r
+/* char: 0x7e '~' */\r
+\r
+static const GLubyte ch126data[] = {\r
+0x90,0xa8,0x48,\r
+};\r
+\r
+static const BitmapCharRec ch126 = {5,3,-1,-6,8,ch126data};\r
+\r
+/* char: 0x7d '}' */\r
+\r
+static const GLubyte ch125data[] = {\r
+0xe0,0x10,0x10,0x20,0x18,0x20,0x10,0x10,0xe0,\r
+};\r
+\r
+static const BitmapCharRec ch125 = {5,9,-1,0,8,ch125data};\r
+\r
+/* char: 0x7c '|' */\r
+\r
+static const GLubyte ch124data[] = {\r
+0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch124 = {1,9,-3,0,8,ch124data};\r
+\r
+/* char: 0x7b '{' */\r
+\r
+static const GLubyte ch123data[] = {\r
+0x38,0x40,0x40,0x20,0xc0,0x20,0x40,0x40,0x38,\r
+};\r
+\r
+static const BitmapCharRec ch123 = {5,9,-2,0,8,ch123data};\r
+\r
+/* char: 0x7a 'z' */\r
+\r
+static const GLubyte ch122data[] = {\r
+0xfc,0x40,0x20,0x10,0x8,0xfc,\r
+};\r
+\r
+static const BitmapCharRec ch122 = {6,6,-1,0,8,ch122data};\r
+\r
+/* char: 0x79 'y' */\r
+\r
+static const GLubyte ch121data[] = {\r
+0x78,0x84,0x4,0x74,0x8c,0x84,0x84,0x84,\r
+};\r
+\r
+static const BitmapCharRec ch121 = {6,8,-1,2,8,ch121data};\r
+\r
+/* char: 0x78 'x' */\r
+\r
+static const GLubyte ch120data[] = {\r
+0x84,0x48,0x30,0x30,0x48,0x84,\r
+};\r
+\r
+static const BitmapCharRec ch120 = {6,6,-1,0,8,ch120data};\r
+\r
+/* char: 0x77 'w' */\r
+\r
+static const GLubyte ch119data[] = {\r
+0x44,0xaa,0x92,0x92,0x82,0x82,\r
+};\r
+\r
+static const BitmapCharRec ch119 = {7,6,0,0,8,ch119data};\r
+\r
+/* char: 0x76 'v' */\r
+\r
+static const GLubyte ch118data[] = {\r
+0x20,0x50,0x50,0x88,0x88,0x88,\r
+};\r
+\r
+static const BitmapCharRec ch118 = {5,6,-1,0,8,ch118data};\r
+\r
+/* char: 0x75 'u' */\r
+\r
+static const GLubyte ch117data[] = {\r
+0x74,0x88,0x88,0x88,0x88,0x88,\r
+};\r
+\r
+static const BitmapCharRec ch117 = {6,6,-1,0,8,ch117data};\r
+\r
+/* char: 0x74 't' */\r
+\r
+static const GLubyte ch116data[] = {\r
+0x38,0x44,0x40,0x40,0x40,0xf8,0x40,0x40,\r
+};\r
+\r
+static const BitmapCharRec ch116 = {6,8,-1,0,8,ch116data};\r
+\r
+/* char: 0x73 's' */\r
+\r
+static const GLubyte ch115data[] = {\r
+0x78,0x84,0x18,0x60,0x84,0x78,\r
+};\r
+\r
+static const BitmapCharRec ch115 = {6,6,-1,0,8,ch115data};\r
+\r
+/* char: 0x72 'r' */\r
+\r
+static const GLubyte ch114data[] = {\r
+0x40,0x40,0x40,0x40,0x44,0xb8,\r
+};\r
+\r
+static const BitmapCharRec ch114 = {6,6,-1,0,8,ch114data};\r
+\r
+/* char: 0x71 'q' */\r
+\r
+static const GLubyte ch113data[] = {\r
+0x4,0x4,0x4,0x74,0x8c,0x84,0x8c,0x74,\r
+};\r
+\r
+static const BitmapCharRec ch113 = {6,8,-1,2,8,ch113data};\r
+\r
+/* char: 0x70 'p' */\r
+\r
+static const GLubyte ch112data[] = {\r
+0x80,0x80,0x80,0xb8,0xc4,0x84,0xc4,0xb8,\r
+};\r
+\r
+static const BitmapCharRec ch112 = {6,8,-1,2,8,ch112data};\r
+\r
+/* char: 0x6f 'o' */\r
+\r
+static const GLubyte ch111data[] = {\r
+0x78,0x84,0x84,0x84,0x84,0x78,\r
+};\r
+\r
+static const BitmapCharRec ch111 = {6,6,-1,0,8,ch111data};\r
+\r
+/* char: 0x6e 'n' */\r
+\r
+static const GLubyte ch110data[] = {\r
+0x84,0x84,0x84,0x84,0xc4,0xb8,\r
+};\r
+\r
+static const BitmapCharRec ch110 = {6,6,-1,0,8,ch110data};\r
+\r
+/* char: 0x6d 'm' */\r
+\r
+static const GLubyte ch109data[] = {\r
+0x82,0x92,0x92,0x92,0x92,0xec,\r
+};\r
+\r
+static const BitmapCharRec ch109 = {7,6,0,0,8,ch109data};\r
+\r
+/* char: 0x6c 'l' */\r
+\r
+static const GLubyte ch108data[] = {\r
+0xf8,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x60,\r
+};\r
+\r
+static const BitmapCharRec ch108 = {5,9,-1,0,8,ch108data};\r
+\r
+/* char: 0x6b 'k' */\r
+\r
+static const GLubyte ch107data[] = {\r
+0x84,0x88,0x90,0xe0,0x90,0x88,0x80,0x80,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch107 = {6,9,-1,0,8,ch107data};\r
+\r
+/* char: 0x6a 'j' */\r
+\r
+static const GLubyte ch106data[] = {\r
+0x70,0x88,0x88,0x8,0x8,0x8,0x8,0x18,0x0,0x8,\r
+};\r
+\r
+static const BitmapCharRec ch106 = {5,10,-1,2,8,ch106data};\r
+\r
+/* char: 0x69 'i' */\r
+\r
+static const GLubyte ch105data[] = {\r
+0xf8,0x20,0x20,0x20,0x20,0x60,0x0,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch105 = {5,8,-1,0,8,ch105data};\r
+\r
+/* char: 0x68 'h' */\r
+\r
+static const GLubyte ch104data[] = {\r
+0x84,0x84,0x84,0x84,0xc4,0xb8,0x80,0x80,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch104 = {6,9,-1,0,8,ch104data};\r
+\r
+/* char: 0x67 'g' */\r
+\r
+static const GLubyte ch103data[] = {\r
+0x78,0x84,0x78,0x80,0x70,0x88,0x88,0x74,\r
+};\r
+\r
+static const BitmapCharRec ch103 = {6,8,-1,2,8,ch103data};\r
+\r
+/* char: 0x66 'f' */\r
+\r
+static const GLubyte ch102data[] = {\r
+0x40,0x40,0x40,0x40,0xf8,0x40,0x40,0x44,0x38,\r
+};\r
+\r
+static const BitmapCharRec ch102 = {6,9,-1,0,8,ch102data};\r
+\r
+/* char: 0x65 'e' */\r
+\r
+static const GLubyte ch101data[] = {\r
+0x78,0x84,0x80,0xfc,0x84,0x78,\r
+};\r
+\r
+static const BitmapCharRec ch101 = {6,6,-1,0,8,ch101data};\r
+\r
+/* char: 0x64 'd' */\r
+\r
+static const GLubyte ch100data[] = {\r
+0x74,0x8c,0x84,0x84,0x8c,0x74,0x4,0x4,0x4,\r
+};\r
+\r
+static const BitmapCharRec ch100 = {6,9,-1,0,8,ch100data};\r
+\r
+/* char: 0x63 'c' */\r
+\r
+static const GLubyte ch99data[] = {\r
+0x78,0x84,0x80,0x80,0x84,0x78,\r
+};\r
+\r
+static const BitmapCharRec ch99 = {6,6,-1,0,8,ch99data};\r
+\r
+/* char: 0x62 'b' */\r
+\r
+static const GLubyte ch98data[] = {\r
+0xb8,0xc4,0x84,0x84,0xc4,0xb8,0x80,0x80,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch98 = {6,9,-1,0,8,ch98data};\r
+\r
+/* char: 0x61 'a' */\r
+\r
+static const GLubyte ch97data[] = {\r
+0x74,0x8c,0x84,0x7c,0x4,0x78,\r
+};\r
+\r
+static const BitmapCharRec ch97 = {6,6,-1,0,8,ch97data};\r
+\r
+/* char: 0x60 '`' */\r
+\r
+static const GLubyte ch96data[] = {\r
+0x10,0x60,0xe0,\r
+};\r
+\r
+static const BitmapCharRec ch96 = {4,3,-2,-6,8,ch96data};\r
+\r
+/* char: 0x5f '_' */\r
+\r
+static const GLubyte ch95data[] = {\r
+0xfe,\r
+};\r
+\r
+static const BitmapCharRec ch95 = {7,1,0,1,8,ch95data};\r
+\r
+/* char: 0x5e '^' */\r
+\r
+static const GLubyte ch94data[] = {\r
+0x88,0x50,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch94 = {5,3,-1,-6,8,ch94data};\r
+\r
+/* char: 0x5d ']' */\r
+\r
+static const GLubyte ch93data[] = {\r
+0xf0,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0xf0,\r
+};\r
+\r
+static const BitmapCharRec ch93 = {4,9,-1,0,8,ch93data};\r
+\r
+/* char: 0x5c '\' */\r
+\r
+static const GLubyte ch92data[] = {\r
+0x2,0x2,0x4,0x8,0x10,0x20,0x40,0x80,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch92 = {7,9,0,0,8,ch92data};\r
+\r
+/* char: 0x5b '[' */\r
+\r
+static const GLubyte ch91data[] = {\r
+0xf0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xf0,\r
+};\r
+\r
+static const BitmapCharRec ch91 = {4,9,-2,0,8,ch91data};\r
+\r
+/* char: 0x5a 'Z' */\r
+\r
+static const GLubyte ch90data[] = {\r
+0xfc,0x80,0x80,0x40,0x20,0x10,0x8,0x4,0xfc,\r
+};\r
+\r
+static const BitmapCharRec ch90 = {6,9,-1,0,8,ch90data};\r
+\r
+/* char: 0x59 'Y' */\r
+\r
+static const GLubyte ch89data[] = {\r
+0x10,0x10,0x10,0x10,0x10,0x28,0x44,0x82,0x82,\r
+};\r
+\r
+static const BitmapCharRec ch89 = {7,9,0,0,8,ch89data};\r
+\r
+/* char: 0x58 'X' */\r
+\r
+static const GLubyte ch88data[] = {\r
+0x82,0x82,0x44,0x28,0x10,0x28,0x44,0x82,0x82,\r
+};\r
+\r
+static const BitmapCharRec ch88 = {7,9,0,0,8,ch88data};\r
+\r
+/* char: 0x57 'W' */\r
+\r
+static const GLubyte ch87data[] = {\r
+0x44,0xaa,0x92,0x92,0x92,0x82,0x82,0x82,0x82,\r
+};\r
+\r
+static const BitmapCharRec ch87 = {7,9,0,0,8,ch87data};\r
+\r
+/* char: 0x56 'V' */\r
+\r
+static const GLubyte ch86data[] = {\r
+0x10,0x28,0x28,0x28,0x44,0x44,0x44,0x82,0x82,\r
+};\r
+\r
+static const BitmapCharRec ch86 = {7,9,0,0,8,ch86data};\r
+\r
+/* char: 0x55 'U' */\r
+\r
+static const GLubyte ch85data[] = {\r
+0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,\r
+};\r
+\r
+static const BitmapCharRec ch85 = {6,9,-1,0,8,ch85data};\r
+\r
+/* char: 0x54 'T' */\r
+\r
+static const GLubyte ch84data[] = {\r
+0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0xfe,\r
+};\r
+\r
+static const BitmapCharRec ch84 = {7,9,0,0,8,ch84data};\r
+\r
+/* char: 0x53 'S' */\r
+\r
+static const GLubyte ch83data[] = {\r
+0x78,0x84,0x4,0x4,0x78,0x80,0x80,0x84,0x78,\r
+};\r
+\r
+static const BitmapCharRec ch83 = {6,9,-1,0,8,ch83data};\r
+\r
+/* char: 0x52 'R' */\r
+\r
+static const GLubyte ch82data[] = {\r
+0x84,0x88,0x90,0xa0,0xf8,0x84,0x84,0x84,0xf8,\r
+};\r
+\r
+static const BitmapCharRec ch82 = {6,9,-1,0,8,ch82data};\r
+\r
+/* char: 0x51 'Q' */\r
+\r
+static const GLubyte ch81data[] = {\r
+0x4,0x78,0x94,0xa4,0x84,0x84,0x84,0x84,0x84,0x78,\r
+};\r
+\r
+static const BitmapCharRec ch81 = {6,10,-1,1,8,ch81data};\r
+\r
+/* char: 0x50 'P' */\r
+\r
+static const GLubyte ch80data[] = {\r
+0x80,0x80,0x80,0x80,0xf8,0x84,0x84,0x84,0xf8,\r
+};\r
+\r
+static const BitmapCharRec ch80 = {6,9,-1,0,8,ch80data};\r
+\r
+/* char: 0x4f 'O' */\r
+\r
+static const GLubyte ch79data[] = {\r
+0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x78,\r
+};\r
+\r
+static const BitmapCharRec ch79 = {6,9,-1,0,8,ch79data};\r
+\r
+/* char: 0x4e 'N' */\r
+\r
+static const GLubyte ch78data[] = {\r
+0x84,0x84,0x84,0x8c,0x94,0xa4,0xc4,0x84,0x84,\r
+};\r
+\r
+static const BitmapCharRec ch78 = {6,9,-1,0,8,ch78data};\r
+\r
+/* char: 0x4d 'M' */\r
+\r
+static const GLubyte ch77data[] = {\r
+0x82,0x82,0x82,0x92,0x92,0xaa,0xc6,0x82,0x82,\r
+};\r
+\r
+static const BitmapCharRec ch77 = {7,9,0,0,8,ch77data};\r
+\r
+/* char: 0x4c 'L' */\r
+\r
+static const GLubyte ch76data[] = {\r
+0xfc,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch76 = {6,9,-1,0,8,ch76data};\r
+\r
+/* char: 0x4b 'K' */\r
+\r
+static const GLubyte ch75data[] = {\r
+0x84,0x88,0x90,0xa0,0xc0,0xa0,0x90,0x88,0x84,\r
+};\r
+\r
+static const BitmapCharRec ch75 = {6,9,-1,0,8,ch75data};\r
+\r
+/* char: 0x4a 'J' */\r
+\r
+static const GLubyte ch74data[] = {\r
+0x70,0x88,0x8,0x8,0x8,0x8,0x8,0x8,0x3c,\r
+};\r
+\r
+static const BitmapCharRec ch74 = {6,9,-1,0,8,ch74data};\r
+\r
+/* char: 0x49 'I' */\r
+\r
+static const GLubyte ch73data[] = {\r
+0xf8,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xf8,\r
+};\r
+\r
+static const BitmapCharRec ch73 = {5,9,-1,0,8,ch73data};\r
+\r
+/* char: 0x48 'H' */\r
+\r
+static const GLubyte ch72data[] = {\r
+0x84,0x84,0x84,0x84,0xfc,0x84,0x84,0x84,0x84,\r
+};\r
+\r
+static const BitmapCharRec ch72 = {6,9,-1,0,8,ch72data};\r
+\r
+/* char: 0x47 'G' */\r
+\r
+static const GLubyte ch71data[] = {\r
+0x74,0x8c,0x84,0x9c,0x80,0x80,0x80,0x84,0x78,\r
+};\r
+\r
+static const BitmapCharRec ch71 = {6,9,-1,0,8,ch71data};\r
+\r
+/* char: 0x46 'F' */\r
+\r
+static const GLubyte ch70data[] = {\r
+0x80,0x80,0x80,0x80,0xf0,0x80,0x80,0x80,0xfc,\r
+};\r
+\r
+static const BitmapCharRec ch70 = {6,9,-1,0,8,ch70data};\r
+\r
+/* char: 0x45 'E' */\r
+\r
+static const GLubyte ch69data[] = {\r
+0xfc,0x80,0x80,0x80,0xf0,0x80,0x80,0x80,0xfc,\r
+};\r
+\r
+static const BitmapCharRec ch69 = {6,9,-1,0,8,ch69data};\r
+\r
+/* char: 0x44 'D' */\r
+\r
+static const GLubyte ch68data[] = {\r
+0xfc,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0xfc,\r
+};\r
+\r
+static const BitmapCharRec ch68 = {7,9,0,0,8,ch68data};\r
+\r
+/* char: 0x43 'C' */\r
+\r
+static const GLubyte ch67data[] = {\r
+0x78,0x84,0x80,0x80,0x80,0x80,0x80,0x84,0x78,\r
+};\r
+\r
+static const BitmapCharRec ch67 = {6,9,-1,0,8,ch67data};\r
+\r
+/* char: 0x42 'B' */\r
+\r
+static const GLubyte ch66data[] = {\r
+0xfc,0x42,0x42,0x42,0x7c,0x42,0x42,0x42,0xfc,\r
+};\r
+\r
+static const BitmapCharRec ch66 = {7,9,0,0,8,ch66data};\r
+\r
+/* char: 0x41 'A' */\r
+\r
+static const GLubyte ch65data[] = {\r
+0x84,0x84,0x84,0xfc,0x84,0x84,0x84,0x48,0x30,\r
+};\r
+\r
+static const BitmapCharRec ch65 = {6,9,-1,0,8,ch65data};\r
+\r
+/* char: 0x40 '@' */\r
+\r
+static const GLubyte ch64data[] = {\r
+0x78,0x80,0x94,0xac,0xa4,0x9c,0x84,0x84,0x78,\r
+};\r
+\r
+static const BitmapCharRec ch64 = {6,9,-1,0,8,ch64data};\r
+\r
+/* char: 0x3f '?' */\r
+\r
+static const GLubyte ch63data[] = {\r
+0x10,0x0,0x10,0x10,0x8,0x4,0x84,0x84,0x78,\r
+};\r
+\r
+static const BitmapCharRec ch63 = {6,9,-1,0,8,ch63data};\r
+\r
+/* char: 0x3e '>' */\r
+\r
+static const GLubyte ch62data[] = {\r
+0x80,0x40,0x20,0x10,0x8,0x10,0x20,0x40,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch62 = {5,9,-1,0,8,ch62data};\r
+\r
+/* char: 0x3d '=' */\r
+\r
+static const GLubyte ch61data[] = {\r
+0xfc,0x0,0x0,0xfc,\r
+};\r
+\r
+static const BitmapCharRec ch61 = {6,4,-1,-2,8,ch61data};\r
+\r
+/* char: 0x3c '<' */\r
+\r
+static const GLubyte ch60data[] = {\r
+0x8,0x10,0x20,0x40,0x80,0x40,0x20,0x10,0x8,\r
+};\r
+\r
+static const BitmapCharRec ch60 = {5,9,-2,0,8,ch60data};\r
+\r
+/* char: 0x3b ';' */\r
+\r
+static const GLubyte ch59data[] = {\r
+0x80,0x60,0x70,0x0,0x0,0x20,0x70,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch59 = {4,8,-1,1,8,ch59data};\r
+\r
+/* char: 0x3a ':' */\r
+\r
+static const GLubyte ch58data[] = {\r
+0x40,0xe0,0x40,0x0,0x0,0x40,0xe0,0x40,\r
+};\r
+\r
+static const BitmapCharRec ch58 = {3,8,-2,1,8,ch58data};\r
+\r
+/* char: 0x39 '9' */\r
+\r
+static const GLubyte ch57data[] = {\r
+0x70,0x8,0x4,0x4,0x74,0x8c,0x84,0x84,0x78,\r
+};\r
+\r
+static const BitmapCharRec ch57 = {6,9,-1,0,8,ch57data};\r
+\r
+/* char: 0x38 '8' */\r
+\r
+static const GLubyte ch56data[] = {\r
+0x78,0x84,0x84,0x84,0x78,0x84,0x84,0x84,0x78,\r
+};\r
+\r
+static const BitmapCharRec ch56 = {6,9,-1,0,8,ch56data};\r
+\r
+/* char: 0x37 '7' */\r
+\r
+static const GLubyte ch55data[] = {\r
+0x40,0x40,0x20,0x20,0x10,0x10,0x8,0x4,0xfc,\r
+};\r
+\r
+static const BitmapCharRec ch55 = {6,9,-1,0,8,ch55data};\r
+\r
+/* char: 0x36 '6' */\r
+\r
+static const GLubyte ch54data[] = {\r
+0x78,0x84,0x84,0xc4,0xb8,0x80,0x80,0x40,0x38,\r
+};\r
+\r
+static const BitmapCharRec ch54 = {6,9,-1,0,8,ch54data};\r
+\r
+/* char: 0x35 '5' */\r
+\r
+static const GLubyte ch53data[] = {\r
+0x78,0x84,0x4,0x4,0xc4,0xb8,0x80,0x80,0xfc,\r
+};\r
+\r
+static const BitmapCharRec ch53 = {6,9,-1,0,8,ch53data};\r
+\r
+/* char: 0x34 '4' */\r
+\r
+static const GLubyte ch52data[] = {\r
+0x8,0x8,0xfc,0x88,0x88,0x48,0x28,0x18,0x8,\r
+};\r
+\r
+static const BitmapCharRec ch52 = {6,9,-1,0,8,ch52data};\r
+\r
+/* char: 0x33 '3' */\r
+\r
+static const GLubyte ch51data[] = {\r
+0x78,0x84,0x4,0x4,0x38,0x10,0x8,0x4,0xfc,\r
+};\r
+\r
+static const BitmapCharRec ch51 = {6,9,-1,0,8,ch51data};\r
+\r
+/* char: 0x32 '2' */\r
+\r
+static const GLubyte ch50data[] = {\r
+0xfc,0x80,0x40,0x30,0x8,0x4,0x84,0x84,0x78,\r
+};\r
+\r
+static const BitmapCharRec ch50 = {6,9,-1,0,8,ch50data};\r
+\r
+/* char: 0x31 '1' */\r
+\r
+static const GLubyte ch49data[] = {\r
+0xf8,0x20,0x20,0x20,0x20,0x20,0xa0,0x60,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch49 = {5,9,-1,0,8,ch49data};\r
+\r
+/* char: 0x30 '0' */\r
+\r
+static const GLubyte ch48data[] = {\r
+0x30,0x48,0x84,0x84,0x84,0x84,0x84,0x48,0x30,\r
+};\r
+\r
+static const BitmapCharRec ch48 = {6,9,-1,0,8,ch48data};\r
+\r
+/* char: 0x2f '/' */\r
+\r
+static const GLubyte ch47data[] = {\r
+0x80,0x80,0x40,0x20,0x10,0x8,0x4,0x2,0x2,\r
+};\r
+\r
+static const BitmapCharRec ch47 = {7,9,0,0,8,ch47data};\r
+\r
+/* char: 0x2e '.' */\r
+\r
+static const GLubyte ch46data[] = {\r
+0x40,0xe0,0x40,\r
+};\r
+\r
+static const BitmapCharRec ch46 = {3,3,-2,1,8,ch46data};\r
+\r
+/* char: 0x2d '-' */\r
+\r
+static const GLubyte ch45data[] = {\r
+0xfc,\r
+};\r
+\r
+static const BitmapCharRec ch45 = {6,1,-1,-4,8,ch45data};\r
+\r
+/* char: 0x2c ',' */\r
+\r
+static const GLubyte ch44data[] = {\r
+0x80,0x60,0x70,\r
+};\r
+\r
+static const BitmapCharRec ch44 = {4,3,-1,1,8,ch44data};\r
+\r
+/* char: 0x2b '+' */\r
+\r
+static const GLubyte ch43data[] = {\r
+0x20,0x20,0xf8,0x20,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch43 = {5,5,-1,-2,8,ch43data};\r
+\r
+/* char: 0x2a '*' */\r
+\r
+static const GLubyte ch42data[] = {\r
+0x48,0x30,0xfc,0x30,0x48,\r
+};\r
+\r
+static const BitmapCharRec ch42 = {6,5,-1,-2,8,ch42data};\r
+\r
+/* char: 0x29 ')' */\r
+\r
+static const GLubyte ch41data[] = {\r
+0x80,0x40,0x40,0x20,0x20,0x20,0x40,0x40,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch41 = {3,9,-2,0,8,ch41data};\r
+\r
+/* char: 0x28 '(' */\r
+\r
+static const GLubyte ch40data[] = {\r
+0x20,0x40,0x40,0x80,0x80,0x80,0x40,0x40,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch40 = {3,9,-3,0,8,ch40data};\r
+\r
+/* char: 0x27 ''' */\r
+\r
+static const GLubyte ch39data[] = {\r
+0x80,0x60,0x70,\r
+};\r
+\r
+static const BitmapCharRec ch39 = {4,3,-1,-6,8,ch39data};\r
+\r
+/* char: 0x26 '&' */\r
+\r
+static const GLubyte ch38data[] = {\r
+0x74,0x88,0x94,0x60,0x90,0x90,0x60,\r
+};\r
+\r
+static const BitmapCharRec ch38 = {6,7,-1,0,8,ch38data};\r
+\r
+/* char: 0x25 '%' */\r
+\r
+static const GLubyte ch37data[] = {\r
+0x88,0x54,0x48,0x20,0x10,0x10,0x48,0xa4,0x44,\r
+};\r
+\r
+static const BitmapCharRec ch37 = {6,9,-1,0,8,ch37data};\r
+\r
+/* char: 0x24 '$' */\r
+\r
+static const GLubyte ch36data[] = {\r
+0x20,0xf0,0x28,0x70,0xa0,0x78,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch36 = {5,7,-1,-1,8,ch36data};\r
+\r
+/* char: 0x23 '#' */\r
+\r
+static const GLubyte ch35data[] = {\r
+0x48,0x48,0xfc,0x48,0xfc,0x48,0x48,\r
+};\r
+\r
+static const BitmapCharRec ch35 = {6,7,-1,-1,8,ch35data};\r
+\r
+/* char: 0x22 '"' */\r
+\r
+static const GLubyte ch34data[] = {\r
+0x90,0x90,0x90,\r
+};\r
+\r
+static const BitmapCharRec ch34 = {4,3,-2,-6,8,ch34data};\r
+\r
+/* char: 0x21 '!' */\r
+\r
+static const GLubyte ch33data[] = {\r
+0x80,0x0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch33 = {1,9,-3,0,8,ch33data};\r
+\r
+/* char: 0x1f */\r
+\r
+static const GLubyte ch31data[] = {\r
+0x80,\r
+};\r
+\r
+static const BitmapCharRec ch31 = {1,1,-3,-3,8,ch31data};\r
+\r
+/* char: 0x1e */\r
+\r
+static const GLubyte ch30data[] = {\r
+0xdc,0x62,0x20,0x20,0x20,0x70,0x20,0x22,0x1c,\r
+};\r
+\r
+static const BitmapCharRec ch30 = {7,9,0,0,8,ch30data};\r
+\r
+/* char: 0x1d */\r
+\r
+static const GLubyte ch29data[] = {\r
+0x80,0x40,0xfe,0x10,0xfe,0x4,0x2,\r
+};\r
+\r
+static const BitmapCharRec ch29 = {7,7,0,0,8,ch29data};\r
+\r
+/* char: 0x1c */\r
+\r
+static const GLubyte ch28data[] = {\r
+0x88,0x48,0x48,0x48,0x48,0xfc,\r
+};\r
+\r
+static const BitmapCharRec ch28 = {6,6,-1,0,8,ch28data};\r
+\r
+/* char: 0x1b */\r
+\r
+static const GLubyte ch27data[] = {\r
+0xfe,0x80,0x20,0x8,0x2,0x8,0x20,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch27 = {7,8,0,0,8,ch27data};\r
+\r
+/* char: 0x1a */\r
+\r
+static const GLubyte ch26data[] = {\r
+0xfe,0x2,0x8,0x20,0x80,0x20,0x8,0x2,\r
+};\r
+\r
+static const BitmapCharRec ch26 = {7,8,0,0,8,ch26data};\r
+\r
+/* char: 0x19 */\r
+\r
+static const GLubyte ch25data[] = {\r
+0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch25 = {1,13,-3,2,8,ch25data};\r
+\r
+/* char: 0x18 */\r
+\r
+static const GLubyte ch24data[] = {\r
+0x10,0x10,0x10,0x10,0x10,0xff,\r
+};\r
+\r
+static const BitmapCharRec ch24 = {8,6,0,2,8,ch24data};\r
+\r
+/* char: 0x17 */\r
+\r
+static const GLubyte ch23data[] = {\r
+0xff,0x10,0x10,0x10,0x10,0x10,0x10,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch23 = {8,8,0,-3,8,ch23data};\r
+\r
+/* char: 0x16 */\r
+\r
+static const GLubyte ch22data[] = {\r
+0x10,0x10,0x10,0x10,0x10,0xf0,0x10,0x10,0x10,0x10,0x10,0x10,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch22 = {4,13,0,2,8,ch22data};\r
+\r
+/* char: 0x15 */\r
+\r
+static const GLubyte ch21data[] = {\r
+0x80,0x80,0x80,0x80,0x80,0xf8,0x80,0x80,0x80,0x80,0x80,0x80,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch21 = {5,13,-3,2,8,ch21data};\r
+\r
+/* char: 0x14 */\r
+\r
+static const GLubyte ch20data[] = {\r
+0xff,\r
+};\r
+\r
+static const BitmapCharRec ch20 = {8,1,0,1,8,ch20data};\r
+\r
+/* char: 0x13 */\r
+\r
+static const GLubyte ch19data[] = {\r
+0xff,\r
+};\r
+\r
+static const BitmapCharRec ch19 = {8,1,0,-1,8,ch19data};\r
+\r
+/* char: 0x12 */\r
+\r
+static const GLubyte ch18data[] = {\r
+0xff,\r
+};\r
+\r
+static const BitmapCharRec ch18 = {8,1,0,-3,8,ch18data};\r
+\r
+/* char: 0x11 */\r
+\r
+static const GLubyte ch17data[] = {\r
+0xff,\r
+};\r
+\r
+static const BitmapCharRec ch17 = {8,1,0,-5,8,ch17data};\r
+\r
+/* char: 0x10 */\r
+\r
+static const GLubyte ch16data[] = {\r
+0xff,\r
+};\r
+\r
+static const BitmapCharRec ch16 = {8,1,0,-7,8,ch16data};\r
+\r
+/* char: 0xf */\r
+\r
+static const GLubyte ch15data[] = {\r
+0x10,0x10,0x10,0x10,0x10,0xff,0x10,0x10,0x10,0x10,0x10,0x10,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch15 = {8,13,0,2,8,ch15data};\r
+\r
+/* char: 0xe */\r
+\r
+static const GLubyte ch14data[] = {\r
+0xf8,0x80,0x80,0x80,0x80,0x80,0x80,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch14 = {5,8,-3,-3,8,ch14data};\r
+\r
+/* char: 0xd */\r
+\r
+static const GLubyte ch13data[] = {\r
+0x80,0x80,0x80,0x80,0x80,0xf8,\r
+};\r
+\r
+static const BitmapCharRec ch13 = {5,6,-3,2,8,ch13data};\r
+\r
+/* char: 0xc */\r
+\r
+static const GLubyte ch12data[] = {\r
+0x10,0x10,0x10,0x10,0x10,0xf0,\r
+};\r
+\r
+static const BitmapCharRec ch12 = {4,6,0,2,8,ch12data};\r
+\r
+/* char: 0xb */\r
+\r
+static const GLubyte ch11data[] = {\r
+0xf0,0x10,0x10,0x10,0x10,0x10,0x10,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch11 = {4,8,0,-3,8,ch11data};\r
+\r
+/* char: 0xa */\r
+\r
+static const GLubyte ch10data[] = {\r
+0x8,0x8,0x8,0x8,0x3e,0x20,0x50,0x88,0x88,\r
+};\r
+\r
+static const BitmapCharRec ch10 = {7,9,0,2,8,ch10data};\r
+\r
+/* char: 0x9 */\r
+\r
+static const GLubyte ch9data[] = {\r
+0x3e,0x20,0x20,0x20,0x88,0x98,0xa8,0xc8,0x88,\r
+};\r
+\r
+static const BitmapCharRec ch9 = {7,9,0,2,8,ch9data};\r
+\r
+/* char: 0x8 */\r
+\r
+static const GLubyte ch8data[] = {\r
+0xfe,0x10,0x10,0xfe,0x10,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch8 = {7,6,0,0,8,ch8data};\r
+\r
+/* char: 0x7 */\r
+\r
+static const GLubyte ch7data[] = {\r
+0x70,0x88,0x88,0x70,\r
+};\r
+\r
+static const BitmapCharRec ch7 = {5,4,-1,-5,8,ch7data};\r
+\r
+/* char: 0x6 */\r
+\r
+static const GLubyte ch6data[] = {\r
+0x20,0x20,0x3c,0x20,0x3e,0xf8,0x80,0x80,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch6 = {7,9,0,2,8,ch6data};\r
+\r
+/* char: 0x5 */\r
+\r
+static const GLubyte ch5data[] = {\r
+0x22,0x22,0x3c,0x22,0x3c,0x78,0x80,0x80,0x78,\r
+};\r
+\r
+static const BitmapCharRec ch5 = {7,9,0,2,8,ch5data};\r
+\r
+/* char: 0x4 */\r
+\r
+static const GLubyte ch4data[] = {\r
+0x10,0x10,0x1c,0x10,0x9e,0x80,0xe0,0x80,0xf0,\r
+};\r
+\r
+static const BitmapCharRec ch4 = {7,9,0,2,8,ch4data};\r
+\r
+/* char: 0x3 */\r
+\r
+static const GLubyte ch3data[] = {\r
+0x8,0x8,0x8,0x3e,0x88,0x88,0xf8,0x88,0x88,\r
+};\r
+\r
+static const BitmapCharRec ch3 = {7,9,0,2,8,ch3data};\r
+\r
+/* char: 0x2 */\r
+\r
+static const GLubyte ch2data[] = {\r
+0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,\r
+};\r
+\r
+static const BitmapCharRec ch2 = {8,12,0,2,8,ch2data};\r
+\r
+/* char: 0x1 */\r
+\r
+static const GLubyte ch1data[] = {\r
+0x10,0x38,0x7c,0xfe,0x7c,0x38,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch1 = {7,7,0,-1,8,ch1data};\r
+\r
+static const BitmapCharRec * const chars[] = {\r
+&ch0,\r
+&ch1,\r
+&ch2,\r
+&ch3,\r
+&ch4,\r
+&ch5,\r
+&ch6,\r
+&ch7,\r
+&ch8,\r
+&ch9,\r
+&ch10,\r
+&ch11,\r
+&ch12,\r
+&ch13,\r
+&ch14,\r
+&ch15,\r
+&ch16,\r
+&ch17,\r
+&ch18,\r
+&ch19,\r
+&ch20,\r
+&ch21,\r
+&ch22,\r
+&ch23,\r
+&ch24,\r
+&ch25,\r
+&ch26,\r
+&ch27,\r
+&ch28,\r
+&ch29,\r
+&ch30,\r
+&ch31,\r
+&ch32,\r
+&ch33,\r
+&ch34,\r
+&ch35,\r
+&ch36,\r
+&ch37,\r
+&ch38,\r
+&ch39,\r
+&ch40,\r
+&ch41,\r
+&ch42,\r
+&ch43,\r
+&ch44,\r
+&ch45,\r
+&ch46,\r
+&ch47,\r
+&ch48,\r
+&ch49,\r
+&ch50,\r
+&ch51,\r
+&ch52,\r
+&ch53,\r
+&ch54,\r
+&ch55,\r
+&ch56,\r
+&ch57,\r
+&ch58,\r
+&ch59,\r
+&ch60,\r
+&ch61,\r
+&ch62,\r
+&ch63,\r
+&ch64,\r
+&ch65,\r
+&ch66,\r
+&ch67,\r
+&ch68,\r
+&ch69,\r
+&ch70,\r
+&ch71,\r
+&ch72,\r
+&ch73,\r
+&ch74,\r
+&ch75,\r
+&ch76,\r
+&ch77,\r
+&ch78,\r
+&ch79,\r
+&ch80,\r
+&ch81,\r
+&ch82,\r
+&ch83,\r
+&ch84,\r
+&ch85,\r
+&ch86,\r
+&ch87,\r
+&ch88,\r
+&ch89,\r
+&ch90,\r
+&ch91,\r
+&ch92,\r
+&ch93,\r
+&ch94,\r
+&ch95,\r
+&ch96,\r
+&ch97,\r
+&ch98,\r
+&ch99,\r
+&ch100,\r
+&ch101,\r
+&ch102,\r
+&ch103,\r
+&ch104,\r
+&ch105,\r
+&ch106,\r
+&ch107,\r
+&ch108,\r
+&ch109,\r
+&ch110,\r
+&ch111,\r
+&ch112,\r
+&ch113,\r
+&ch114,\r
+&ch115,\r
+&ch116,\r
+&ch117,\r
+&ch118,\r
+&ch119,\r
+&ch120,\r
+&ch121,\r
+&ch122,\r
+&ch123,\r
+&ch124,\r
+&ch125,\r
+&ch126,\r
+&ch127,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+&ch160,\r
+&ch161,\r
+&ch162,\r
+&ch163,\r
+&ch164,\r
+&ch165,\r
+&ch166,\r
+&ch167,\r
+&ch168,\r
+&ch169,\r
+&ch170,\r
+&ch171,\r
+&ch172,\r
+&ch173,\r
+&ch174,\r
+&ch175,\r
+&ch176,\r
+&ch177,\r
+&ch178,\r
+&ch179,\r
+&ch180,\r
+&ch181,\r
+&ch182,\r
+&ch183,\r
+&ch184,\r
+&ch185,\r
+&ch186,\r
+&ch187,\r
+&ch188,\r
+&ch189,\r
+&ch190,\r
+&ch191,\r
+&ch192,\r
+&ch193,\r
+&ch194,\r
+&ch195,\r
+&ch196,\r
+&ch197,\r
+&ch198,\r
+&ch199,\r
+&ch200,\r
+&ch201,\r
+&ch202,\r
+&ch203,\r
+&ch204,\r
+&ch205,\r
+&ch206,\r
+&ch207,\r
+&ch208,\r
+&ch209,\r
+&ch210,\r
+&ch211,\r
+&ch212,\r
+&ch213,\r
+&ch214,\r
+&ch215,\r
+&ch216,\r
+&ch217,\r
+&ch218,\r
+&ch219,\r
+&ch220,\r
+&ch221,\r
+&ch222,\r
+&ch223,\r
+&ch224,\r
+&ch225,\r
+&ch226,\r
+&ch227,\r
+&ch228,\r
+&ch229,\r
+&ch230,\r
+&ch231,\r
+&ch232,\r
+&ch233,\r
+&ch234,\r
+&ch235,\r
+&ch236,\r
+&ch237,\r
+&ch238,\r
+&ch239,\r
+&ch240,\r
+&ch241,\r
+&ch242,\r
+&ch243,\r
+&ch244,\r
+&ch245,\r
+&ch246,\r
+&ch247,\r
+&ch248,\r
+&ch249,\r
+&ch250,\r
+&ch251,\r
+&ch252,\r
+&ch253,\r
+&ch254,\r
+&ch255,\r
+};\r
+\r
+#if !defined(__IBMCPP__)\r
+const \r
+#endif\r
+BitmapFontRec glutBitmap8By13 = {\r
+"-misc-fixed-medium-r-normal--13-120-75-75-C-80-iso8859-1",\r
+256,\r
+0,\r
+chars\r
+};\r
+\r
diff --git a/src/glut/os2/glut_9x15.cpp b/src/glut/os2/glut_9x15.cpp
new file mode 100644 (file)
index 0000000..a3a02a4
--- /dev/null
@@ -0,0 +1,2077 @@
+\r
+/* GENERATED FILE -- DO NOT MODIFY */\r
+\r
+#define glutBitmap9By15 XXX\r
+#include "glutbitmap.h"\r
+#undef glutBitmap9By15\r
+\r
+#ifdef _WIN32\r
+/* XXX Work around Microsoft OpenGL 1.1 bug where glBitmap with\r
+   a height or width of zero does not advance the raster position\r
+   as specified by OpenGL. (Cosmo OpenGL does not have this bug.) */\r
+static const GLubyte ch0data[] = { 0x0 };\r
+static const BitmapCharRec ch0 = {1,1,0,0,9,ch0data};\r
+#else\r
+static const BitmapCharRec ch0 = {0,0,0,0,9,0};\r
+#endif\r
+\r
+#ifdef _WIN32\r
+/* XXX Work around Microsoft OpenGL 1.1 bug where glBitmap with\r
+   a height or width of zero does not advance the raster position\r
+   as specified by OpenGL. (Cosmo OpenGL does not have this bug.) */\r
+static const GLubyte ch32data[] = { 0x0 };\r
+static const BitmapCharRec ch32 = {1,1,0,0,9,ch32data};\r
+#else\r
+static const BitmapCharRec ch32 = {0,0,0,0,9,0};\r
+#endif\r
+\r
+#ifdef _WIN32\r
+/* XXX Work around Microsoft OpenGL 1.1 bug where glBitmap with\r
+   a height or width of zero does not advance the raster position\r
+   as specified by OpenGL. (Cosmo OpenGL does not have this bug.) */\r
+static const GLubyte ch127data[] = { 0x0 };\r
+static const BitmapCharRec ch127 = {1,1,0,0,9,ch127data};\r
+#else\r
+static const BitmapCharRec ch127 = {0,0,0,0,9,0};\r
+#endif\r
+\r
+#ifdef _WIN32\r
+/* XXX Work around Microsoft OpenGL 1.1 bug where glBitmap with\r
+   a height or width of zero does not advance the raster position\r
+   as specified by OpenGL. (Cosmo OpenGL does not have this bug.) */\r
+static const GLubyte ch160data[] = { 0x0 };\r
+static const BitmapCharRec ch160 = {1,1,0,0,9,ch160data};\r
+#else\r
+static const BitmapCharRec ch160 = {0,0,0,0,9,0};\r
+#endif\r
+\r
+/* char: 0xff */\r
+\r
+static const GLubyte ch255data[] = {\r
+0x78,0x84,0x4,0x74,0x8c,0x84,0x84,0x84,0x84,0x84,0x0,0x0,0x28,0x28,\r
+};\r
+\r
+static const BitmapCharRec ch255 = {6,14,-1,3,9,ch255data};\r
+\r
+/* char: 0xfe */\r
+\r
+static const GLubyte ch254data[] = {\r
+0x80,0x80,0x80,0xbc,0xc2,0x82,0x82,0x82,0xc2,0xbc,0x80,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch254 = {7,12,-1,3,9,ch254data};\r
+\r
+/* char: 0xfd */\r
+\r
+static const GLubyte ch253data[] = {\r
+0x78,0x84,0x4,0x74,0x8c,0x84,0x84,0x84,0x84,0x84,0x0,0x0,0x30,0x8,\r
+};\r
+\r
+static const BitmapCharRec ch253 = {6,14,-1,3,9,ch253data};\r
+\r
+/* char: 0xfc */\r
+\r
+static const GLubyte ch252data[] = {\r
+0x7a,0x84,0x84,0x84,0x84,0x84,0x84,0x0,0x0,0x28,0x28,\r
+};\r
+\r
+static const BitmapCharRec ch252 = {7,11,-1,0,9,ch252data};\r
+\r
+/* char: 0xfb */\r
+\r
+static const GLubyte ch251data[] = {\r
+0x7a,0x84,0x84,0x84,0x84,0x84,0x84,0x0,0x0,0x44,0x38,\r
+};\r
+\r
+static const BitmapCharRec ch251 = {7,11,-1,0,9,ch251data};\r
+\r
+/* char: 0xfa */\r
+\r
+static const GLubyte ch250data[] = {\r
+0x7a,0x84,0x84,0x84,0x84,0x84,0x84,0x0,0x0,0x30,0x8,\r
+};\r
+\r
+static const BitmapCharRec ch250 = {7,11,-1,0,9,ch250data};\r
+\r
+/* char: 0xf9 */\r
+\r
+static const GLubyte ch249data[] = {\r
+0x7a,0x84,0x84,0x84,0x84,0x84,0x84,0x0,0x0,0x18,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch249 = {7,11,-1,0,9,ch249data};\r
+\r
+/* char: 0xf8 */\r
+\r
+static const GLubyte ch248data[] = {\r
+0x80,0x7c,0xa2,0xa2,0x92,0x8a,0x8a,0x7c,0x2,\r
+};\r
+\r
+static const BitmapCharRec ch248 = {7,9,-1,1,9,ch248data};\r
+\r
+/* char: 0xf7 */\r
+\r
+static const GLubyte ch247data[] = {\r
+0x10,0x38,0x10,0x0,0xfe,0x0,0x10,0x38,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch247 = {7,9,-1,0,9,ch247data};\r
+\r
+/* char: 0xf6 */\r
+\r
+static const GLubyte ch246data[] = {\r
+0x7c,0x82,0x82,0x82,0x82,0x82,0x7c,0x0,0x0,0x28,0x28,\r
+};\r
+\r
+static const BitmapCharRec ch246 = {7,11,-1,0,9,ch246data};\r
+\r
+/* char: 0xf5 */\r
+\r
+static const GLubyte ch245data[] = {\r
+0x7c,0x82,0x82,0x82,0x82,0x82,0x7c,0x0,0x0,0x50,0x28,\r
+};\r
+\r
+static const BitmapCharRec ch245 = {7,11,-1,0,9,ch245data};\r
+\r
+/* char: 0xf4 */\r
+\r
+static const GLubyte ch244data[] = {\r
+0x7c,0x82,0x82,0x82,0x82,0x82,0x7c,0x0,0x0,0x44,0x38,\r
+};\r
+\r
+static const BitmapCharRec ch244 = {7,11,-1,0,9,ch244data};\r
+\r
+/* char: 0xf3 */\r
+\r
+static const GLubyte ch243data[] = {\r
+0x7c,0x82,0x82,0x82,0x82,0x82,0x7c,0x0,0x0,0x30,0x8,\r
+};\r
+\r
+static const BitmapCharRec ch243 = {7,11,-1,0,9,ch243data};\r
+\r
+/* char: 0xf2 */\r
+\r
+static const GLubyte ch242data[] = {\r
+0x7c,0x82,0x82,0x82,0x82,0x82,0x7c,0x0,0x0,0x18,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch242 = {7,11,-1,0,9,ch242data};\r
+\r
+/* char: 0xf1 */\r
+\r
+static const GLubyte ch241data[] = {\r
+0x82,0x82,0x82,0x82,0x82,0xc2,0xbc,0x0,0x0,0x50,0x28,\r
+};\r
+\r
+static const BitmapCharRec ch241 = {7,11,-1,0,9,ch241data};\r
+\r
+/* char: 0xf0 */\r
+\r
+static const GLubyte ch240data[] = {\r
+0x7c,0x82,0x82,0x82,0x82,0x82,0x7c,0x8,0x50,0x30,0x48,\r
+};\r
+\r
+static const BitmapCharRec ch240 = {7,11,-1,0,9,ch240data};\r
+\r
+/* char: 0xef */\r
+\r
+static const GLubyte ch239data[] = {\r
+0xf8,0x20,0x20,0x20,0x20,0x20,0xe0,0x0,0x0,0x50,0x50,\r
+};\r
+\r
+static const BitmapCharRec ch239 = {5,11,-2,0,9,ch239data};\r
+\r
+/* char: 0xee */\r
+\r
+static const GLubyte ch238data[] = {\r
+0xf8,0x20,0x20,0x20,0x20,0x20,0xe0,0x0,0x0,0x90,0x60,\r
+};\r
+\r
+static const BitmapCharRec ch238 = {5,11,-2,0,9,ch238data};\r
+\r
+/* char: 0xed */\r
+\r
+static const GLubyte ch237data[] = {\r
+0xf8,0x20,0x20,0x20,0x20,0x20,0xe0,0x0,0x0,0x60,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch237 = {5,11,-2,0,9,ch237data};\r
+\r
+/* char: 0xec */\r
+\r
+static const GLubyte ch236data[] = {\r
+0xf8,0x20,0x20,0x20,0x20,0x20,0xe0,0x0,0x0,0x30,0x40,\r
+};\r
+\r
+static const BitmapCharRec ch236 = {5,11,-2,0,9,ch236data};\r
+\r
+/* char: 0xeb */\r
+\r
+static const GLubyte ch235data[] = {\r
+0x7c,0x80,0x80,0xfe,0x82,0x82,0x7c,0x0,0x0,0x28,0x28,\r
+};\r
+\r
+static const BitmapCharRec ch235 = {7,11,-1,0,9,ch235data};\r
+\r
+/* char: 0xea */\r
+\r
+static const GLubyte ch234data[] = {\r
+0x7c,0x80,0x80,0xfe,0x82,0x82,0x7c,0x0,0x0,0x44,0x38,\r
+};\r
+\r
+static const BitmapCharRec ch234 = {7,11,-1,0,9,ch234data};\r
+\r
+/* char: 0xe9 */\r
+\r
+static const GLubyte ch233data[] = {\r
+0x7c,0x80,0x80,0xfe,0x82,0x82,0x7c,0x0,0x0,0x30,0x8,\r
+};\r
+\r
+static const BitmapCharRec ch233 = {7,11,-1,0,9,ch233data};\r
+\r
+/* char: 0xe8 */\r
+\r
+static const GLubyte ch232data[] = {\r
+0x7c,0x80,0x80,0xfe,0x82,0x82,0x7c,0x0,0x0,0x18,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch232 = {7,11,-1,0,9,ch232data};\r
+\r
+/* char: 0xe7 */\r
+\r
+static const GLubyte ch231data[] = {\r
+0x30,0x48,0x18,0x7c,0x82,0x80,0x80,0x80,0x82,0x7c,\r
+};\r
+\r
+static const BitmapCharRec ch231 = {7,10,-1,3,9,ch231data};\r
+\r
+/* char: 0xe6 */\r
+\r
+static const GLubyte ch230data[] = {\r
+0x6e,0x92,0x90,0x7c,0x12,0x92,0x6c,\r
+};\r
+\r
+static const BitmapCharRec ch230 = {7,7,-1,0,9,ch230data};\r
+\r
+/* char: 0xe5 */\r
+\r
+static const GLubyte ch229data[] = {\r
+0x7a,0x86,0x82,0x7e,0x2,0x2,0x7c,0x0,0x18,0x24,0x18,\r
+};\r
+\r
+static const BitmapCharRec ch229 = {7,11,-1,0,9,ch229data};\r
+\r
+/* char: 0xe4 */\r
+\r
+static const GLubyte ch228data[] = {\r
+0x7a,0x86,0x82,0x7e,0x2,0x2,0x7c,0x0,0x0,0x28,0x28,\r
+};\r
+\r
+static const BitmapCharRec ch228 = {7,11,-1,0,9,ch228data};\r
+\r
+/* char: 0xe3 */\r
+\r
+static const GLubyte ch227data[] = {\r
+0x7a,0x86,0x82,0x7e,0x2,0x2,0x7c,0x0,0x0,0x50,0x28,\r
+};\r
+\r
+static const BitmapCharRec ch227 = {7,11,-1,0,9,ch227data};\r
+\r
+/* char: 0xe2 */\r
+\r
+static const GLubyte ch226data[] = {\r
+0x7a,0x86,0x82,0x7e,0x2,0x2,0x7c,0x0,0x0,0x44,0x38,\r
+};\r
+\r
+static const BitmapCharRec ch226 = {7,11,-1,0,9,ch226data};\r
+\r
+/* char: 0xe1 */\r
+\r
+static const GLubyte ch225data[] = {\r
+0x7a,0x86,0x82,0x7e,0x2,0x2,0x7c,0x0,0x0,0x30,0x8,\r
+};\r
+\r
+static const BitmapCharRec ch225 = {7,11,-1,0,9,ch225data};\r
+\r
+/* char: 0xe0 */\r
+\r
+static const GLubyte ch224data[] = {\r
+0x7a,0x86,0x82,0x7e,0x2,0x2,0x7c,0x0,0x0,0x18,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch224 = {7,11,-1,0,9,ch224data};\r
+\r
+/* char: 0xdf */\r
+\r
+static const GLubyte ch223data[] = {\r
+0x80,0xbc,0xc2,0x82,0x82,0xfc,0x82,0x82,0x7c,\r
+};\r
+\r
+static const BitmapCharRec ch223 = {7,9,-1,1,9,ch223data};\r
+\r
+/* char: 0xde */\r
+\r
+static const GLubyte ch222data[] = {\r
+0x80,0x80,0x80,0xfc,0x82,0x82,0x82,0xfc,0x80,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch222 = {7,10,-1,0,9,ch222data};\r
+\r
+/* char: 0xdd */\r
+\r
+static const GLubyte ch221data[] = {\r
+0x10,0x10,0x10,0x10,0x28,0x44,0x82,0x82,0x0,0x30,0x8,\r
+};\r
+\r
+static const BitmapCharRec ch221 = {7,11,-1,0,9,ch221data};\r
+\r
+/* char: 0xdc */\r
+\r
+static const GLubyte ch220data[] = {\r
+0x7c,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x0,0x28,0x28,\r
+};\r
+\r
+static const BitmapCharRec ch220 = {7,11,-1,0,9,ch220data};\r
+\r
+/* char: 0xdb */\r
+\r
+static const GLubyte ch219data[] = {\r
+0x7c,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x0,0x44,0x38,\r
+};\r
+\r
+static const BitmapCharRec ch219 = {7,11,-1,0,9,ch219data};\r
+\r
+/* char: 0xda */\r
+\r
+static const GLubyte ch218data[] = {\r
+0x7c,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x0,0x30,0x8,\r
+};\r
+\r
+static const BitmapCharRec ch218 = {7,11,-1,0,9,ch218data};\r
+\r
+/* char: 0xd9 */\r
+\r
+static const GLubyte ch217data[] = {\r
+0x7c,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x0,0x18,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch217 = {7,11,-1,0,9,ch217data};\r
+\r
+/* char: 0xd8 */\r
+\r
+static const GLubyte ch216data[] = {\r
+0x80,0x7c,0xc2,0xa2,0xa2,0x92,0x92,0x8a,0x8a,0x86,0x7c,0x2,\r
+};\r
+\r
+static const BitmapCharRec ch216 = {7,12,-1,1,9,ch216data};\r
+\r
+/* char: 0xd7 */\r
+\r
+static const GLubyte ch215data[] = {\r
+0x82,0x44,0x28,0x10,0x28,0x44,0x82,\r
+};\r
+\r
+static const BitmapCharRec ch215 = {7,7,-1,-1,9,ch215data};\r
+\r
+/* char: 0xd6 */\r
+\r
+static const GLubyte ch214data[] = {\r
+0x7c,0x82,0x82,0x82,0x82,0x82,0x82,0x7c,0x0,0x28,0x28,\r
+};\r
+\r
+static const BitmapCharRec ch214 = {7,11,-1,0,9,ch214data};\r
+\r
+/* char: 0xd5 */\r
+\r
+static const GLubyte ch213data[] = {\r
+0x7c,0x82,0x82,0x82,0x82,0x82,0x82,0x7c,0x0,0x50,0x28,\r
+};\r
+\r
+static const BitmapCharRec ch213 = {7,11,-1,0,9,ch213data};\r
+\r
+/* char: 0xd4 */\r
+\r
+static const GLubyte ch212data[] = {\r
+0x7c,0x82,0x82,0x82,0x82,0x82,0x82,0x7c,0x0,0x44,0x38,\r
+};\r
+\r
+static const BitmapCharRec ch212 = {7,11,-1,0,9,ch212data};\r
+\r
+/* char: 0xd3 */\r
+\r
+static const GLubyte ch211data[] = {\r
+0x7c,0x82,0x82,0x82,0x82,0x82,0x82,0x7c,0x0,0x30,0x8,\r
+};\r
+\r
+static const BitmapCharRec ch211 = {7,11,-1,0,9,ch211data};\r
+\r
+/* char: 0xd2 */\r
+\r
+static const GLubyte ch210data[] = {\r
+0x7c,0x82,0x82,0x82,0x82,0x82,0x82,0x7c,0x0,0x18,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch210 = {7,11,-1,0,9,ch210data};\r
+\r
+/* char: 0xd1 */\r
+\r
+static const GLubyte ch209data[] = {\r
+0x82,0x86,0x8a,0x92,0x92,0xa2,0xc2,0x82,0x0,0x50,0x28,\r
+};\r
+\r
+static const BitmapCharRec ch209 = {7,11,-1,0,9,ch209data};\r
+\r
+/* char: 0xd0 */\r
+\r
+static const GLubyte ch208data[] = {\r
+0xfc,0x42,0x42,0x42,0x42,0xf2,0x42,0x42,0x42,0xfc,\r
+};\r
+\r
+static const BitmapCharRec ch208 = {7,10,-1,0,9,ch208data};\r
+\r
+/* char: 0xcf */\r
+\r
+static const GLubyte ch207data[] = {\r
+0xf8,0x20,0x20,0x20,0x20,0x20,0x20,0xf8,0x0,0x50,0x50,\r
+};\r
+\r
+static const BitmapCharRec ch207 = {5,11,-2,0,9,ch207data};\r
+\r
+/* char: 0xce */\r
+\r
+static const GLubyte ch206data[] = {\r
+0xf8,0x20,0x20,0x20,0x20,0x20,0x20,0xf8,0x0,0x88,0x70,\r
+};\r
+\r
+static const BitmapCharRec ch206 = {5,11,-2,0,9,ch206data};\r
+\r
+/* char: 0xcd */\r
+\r
+static const GLubyte ch205data[] = {\r
+0xf8,0x20,0x20,0x20,0x20,0x20,0x20,0xf8,0x0,0x60,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch205 = {5,11,-2,0,9,ch205data};\r
+\r
+/* char: 0xcc */\r
+\r
+static const GLubyte ch204data[] = {\r
+0xf8,0x20,0x20,0x20,0x20,0x20,0x20,0xf8,0x0,0x30,0x40,\r
+};\r
+\r
+static const BitmapCharRec ch204 = {5,11,-2,0,9,ch204data};\r
+\r
+/* char: 0xcb */\r
+\r
+static const GLubyte ch203data[] = {\r
+0xfe,0x40,0x40,0x40,0x78,0x40,0x40,0xfe,0x0,0x28,0x28,\r
+};\r
+\r
+static const BitmapCharRec ch203 = {7,11,-1,0,9,ch203data};\r
+\r
+/* char: 0xca */\r
+\r
+static const GLubyte ch202data[] = {\r
+0xfe,0x40,0x40,0x40,0x78,0x40,0x40,0xfe,0x0,0x44,0x38,\r
+};\r
+\r
+static const BitmapCharRec ch202 = {7,11,-1,0,9,ch202data};\r
+\r
+/* char: 0xc9 */\r
+\r
+static const GLubyte ch201data[] = {\r
+0xfe,0x40,0x40,0x40,0x78,0x40,0x40,0xfe,0x0,0x30,0x8,\r
+};\r
+\r
+static const BitmapCharRec ch201 = {7,11,-1,0,9,ch201data};\r
+\r
+/* char: 0xc8 */\r
+\r
+static const GLubyte ch200data[] = {\r
+0xfe,0x40,0x40,0x40,0x78,0x40,0x40,0xfe,0x0,0x18,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch200 = {7,11,-1,0,9,ch200data};\r
+\r
+/* char: 0xc7 */\r
+\r
+static const GLubyte ch199data[] = {\r
+0x30,0x48,0x18,0x7c,0x82,0x80,0x80,0x80,0x80,0x80,0x80,0x82,0x7c,\r
+};\r
+\r
+static const BitmapCharRec ch199 = {7,13,-1,3,9,ch199data};\r
+\r
+/* char: 0xc6 */\r
+\r
+static const GLubyte ch198data[] = {\r
+0x9e,0x90,0x90,0x90,0xfc,0x90,0x90,0x90,0x90,0x6e,\r
+};\r
+\r
+static const BitmapCharRec ch198 = {7,10,-1,0,9,ch198data};\r
+\r
+/* char: 0xc5 */\r
+\r
+static const GLubyte ch197data[] = {\r
+0x82,0x82,0x82,0xfe,0x82,0x82,0x44,0x38,0x10,0x28,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch197 = {7,11,-1,0,9,ch197data};\r
+\r
+/* char: 0xc4 */\r
+\r
+static const GLubyte ch196data[] = {\r
+0x82,0x82,0x82,0xfe,0x82,0x82,0x44,0x38,0x0,0x28,0x28,\r
+};\r
+\r
+static const BitmapCharRec ch196 = {7,11,-1,0,9,ch196data};\r
+\r
+/* char: 0xc3 */\r
+\r
+static const GLubyte ch195data[] = {\r
+0x82,0x82,0x82,0xfe,0x82,0x82,0x44,0x38,0x0,0x50,0x28,\r
+};\r
+\r
+static const BitmapCharRec ch195 = {7,11,-1,0,9,ch195data};\r
+\r
+/* char: 0xc2 */\r
+\r
+static const GLubyte ch194data[] = {\r
+0x82,0x82,0x82,0xfe,0x82,0x82,0x44,0x38,0x0,0x44,0x38,\r
+};\r
+\r
+static const BitmapCharRec ch194 = {7,11,-1,0,9,ch194data};\r
+\r
+/* char: 0xc1 */\r
+\r
+static const GLubyte ch193data[] = {\r
+0x82,0x82,0x82,0xfe,0x82,0x82,0x44,0x38,0x0,0x30,0x8,\r
+};\r
+\r
+static const BitmapCharRec ch193 = {7,11,-1,0,9,ch193data};\r
+\r
+/* char: 0xc0 */\r
+\r
+static const GLubyte ch192data[] = {\r
+0x82,0x82,0x82,0xfe,0x82,0x82,0x44,0x38,0x0,0x18,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch192 = {7,11,-1,0,9,ch192data};\r
+\r
+/* char: 0xbf */\r
+\r
+static const GLubyte ch191data[] = {\r
+0x7c,0x82,0x82,0x80,0x40,0x20,0x10,0x10,0x0,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch191 = {7,10,-1,0,9,ch191data};\r
+\r
+/* char: 0xbe */\r
+\r
+static const GLubyte ch190data[] = {\r
+0x6,0x1a,0x12,0xa,0x66,0x92,0x10,0x20,0x90,0x60,\r
+};\r
+\r
+static const BitmapCharRec ch190 = {7,10,-1,0,9,ch190data};\r
+\r
+/* char: 0xbd */\r
+\r
+static const GLubyte ch189data[] = {\r
+0x1e,0x10,0xc,0x2,0xf2,0x4c,0x40,0x40,0xc0,0x40,\r
+};\r
+\r
+static const BitmapCharRec ch189 = {7,10,-1,0,9,ch189data};\r
+\r
+/* char: 0xbc */\r
+\r
+static const GLubyte ch188data[] = {\r
+0x6,0x1a,0x12,0xa,0xe6,0x42,0x40,0x40,0xc0,0x40,\r
+};\r
+\r
+static const BitmapCharRec ch188 = {7,10,-1,0,9,ch188data};\r
+\r
+/* char: 0xbb */\r
+\r
+static const GLubyte ch187data[] = {\r
+0x90,0x48,0x24,0x12,0x12,0x24,0x48,0x90,\r
+};\r
+\r
+static const BitmapCharRec ch187 = {7,8,-1,-1,9,ch187data};\r
+\r
+/* char: 0xba */\r
+\r
+static const GLubyte ch186data[] = {\r
+0xf8,0x0,0x70,0x88,0x88,0x70,\r
+};\r
+\r
+static const BitmapCharRec ch186 = {5,6,-1,-5,9,ch186data};\r
+\r
+/* char: 0xb9 */\r
+\r
+static const GLubyte ch185data[] = {\r
+0xe0,0x40,0x40,0x40,0xc0,0x40,\r
+};\r
+\r
+static const BitmapCharRec ch185 = {3,6,-1,-4,9,ch185data};\r
+\r
+/* char: 0xb8 */\r
+\r
+static const GLubyte ch184data[] = {\r
+0x60,0x90,0x30,\r
+};\r
+\r
+static const BitmapCharRec ch184 = {4,3,-2,3,9,ch184data};\r
+\r
+/* char: 0xb7 */\r
+\r
+static const GLubyte ch183data[] = {\r
+0xc0,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch183 = {2,2,-4,-4,9,ch183data};\r
+\r
+/* char: 0xb6 */\r
+\r
+static const GLubyte ch182data[] = {\r
+0xa,0xa,0xa,0xa,0xa,0x7a,0x8a,0x8a,0x8a,0x7e,\r
+};\r
+\r
+static const BitmapCharRec ch182 = {7,10,-1,0,9,ch182data};\r
+\r
+/* char: 0xb5 */\r
+\r
+static const GLubyte ch181data[] = {\r
+0x80,0x80,0xba,0xc6,0x82,0x82,0x82,0x82,0x82,\r
+};\r
+\r
+static const BitmapCharRec ch181 = {7,9,-1,2,9,ch181data};\r
+\r
+/* char: 0xb4 */\r
+\r
+static const GLubyte ch180data[] = {\r
+0xc0,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch180 = {3,2,-3,-9,9,ch180data};\r
+\r
+/* char: 0xb3 */\r
+\r
+static const GLubyte ch179data[] = {\r
+0x60,0x90,0x10,0x20,0x90,0x60,\r
+};\r
+\r
+static const BitmapCharRec ch179 = {4,6,-1,-4,9,ch179data};\r
+\r
+/* char: 0xb2 */\r
+\r
+static const GLubyte ch178data[] = {\r
+0xf0,0x80,0x60,0x10,0x90,0x60,\r
+};\r
+\r
+static const BitmapCharRec ch178 = {4,6,-1,-4,9,ch178data};\r
+\r
+/* char: 0xb1 */\r
+\r
+static const GLubyte ch177data[] = {\r
+0xfe,0x0,0x10,0x10,0x10,0xfe,0x10,0x10,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch177 = {7,9,-1,-1,9,ch177data};\r
+\r
+/* char: 0xb0 */\r
+\r
+static const GLubyte ch176data[] = {\r
+0x60,0x90,0x90,0x60,\r
+};\r
+\r
+static const BitmapCharRec ch176 = {4,4,-3,-6,9,ch176data};\r
+\r
+/* char: 0xaf */\r
+\r
+static const GLubyte ch175data[] = {\r
+0xfc,\r
+};\r
+\r
+static const BitmapCharRec ch175 = {6,1,-1,-9,9,ch175data};\r
+\r
+/* char: 0xae */\r
+\r
+static const GLubyte ch174data[] = {\r
+0x3c,0x42,0xa5,0xa9,0xbd,0xa5,0xb9,0x42,0x3c,\r
+};\r
+\r
+static const BitmapCharRec ch174 = {8,9,0,-1,9,ch174data};\r
+\r
+/* char: 0xad */\r
+\r
+static const GLubyte ch173data[] = {\r
+0xfc,\r
+};\r
+\r
+static const BitmapCharRec ch173 = {6,1,-1,-4,9,ch173data};\r
+\r
+/* char: 0xac */\r
+\r
+static const GLubyte ch172data[] = {\r
+0x4,0x4,0x4,0xfc,\r
+};\r
+\r
+static const BitmapCharRec ch172 = {6,4,-1,-2,9,ch172data};\r
+\r
+/* char: 0xab */\r
+\r
+static const GLubyte ch171data[] = {\r
+0x12,0x24,0x48,0x90,0x90,0x48,0x24,0x12,\r
+};\r
+\r
+static const BitmapCharRec ch171 = {7,8,-1,-1,9,ch171data};\r
+\r
+/* char: 0xaa */\r
+\r
+static const GLubyte ch170data[] = {\r
+0xf8,0x0,0x78,0x90,0x70,0x90,0x60,\r
+};\r
+\r
+static const BitmapCharRec ch170 = {5,7,-3,-3,9,ch170data};\r
+\r
+/* char: 0xa9 */\r
+\r
+static const GLubyte ch169data[] = {\r
+0x3c,0x42,0x99,0xa5,0xa1,0xa5,0x99,0x42,0x3c,\r
+};\r
+\r
+static const BitmapCharRec ch169 = {8,9,0,-1,9,ch169data};\r
+\r
+/* char: 0xa8 */\r
+\r
+static const GLubyte ch168data[] = {\r
+0xa0,0xa0,\r
+};\r
+\r
+static const BitmapCharRec ch168 = {3,2,-3,-9,9,ch168data};\r
+\r
+/* char: 0xa7 */\r
+\r
+static const GLubyte ch167data[] = {\r
+0x70,0x88,0x8,0x70,0x88,0x88,0x88,0x70,0x80,0x88,0x70,\r
+};\r
+\r
+static const BitmapCharRec ch167 = {5,11,-2,1,9,ch167data};\r
+\r
+/* char: 0xa6 */\r
+\r
+static const GLubyte ch166data[] = {\r
+0x80,0x80,0x80,0x80,0x80,0x0,0x80,0x80,0x80,0x80,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch166 = {1,11,-4,1,9,ch166data};\r
+\r
+/* char: 0xa5 */\r
+\r
+static const GLubyte ch165data[] = {\r
+0x10,0x10,0x10,0x7c,0x10,0x7c,0x28,0x44,0x82,0x82,\r
+};\r
+\r
+static const BitmapCharRec ch165 = {7,10,-1,0,9,ch165data};\r
+\r
+/* char: 0xa4 */\r
+\r
+static const GLubyte ch164data[] = {\r
+0x82,0x7c,0x44,0x44,0x7c,0x82,\r
+};\r
+\r
+static const BitmapCharRec ch164 = {7,6,-1,-3,9,ch164data};\r
+\r
+/* char: 0xa3 */\r
+\r
+static const GLubyte ch163data[] = {\r
+0x5c,0xa2,0x60,0x20,0x20,0xf8,0x20,0x20,0x22,0x1c,\r
+};\r
+\r
+static const BitmapCharRec ch163 = {7,10,-1,0,9,ch163data};\r
+\r
+/* char: 0xa2 */\r
+\r
+static const GLubyte ch162data[] = {\r
+0x40,0x78,0xa4,0xa0,0x90,0x94,0x78,0x8,\r
+};\r
+\r
+static const BitmapCharRec ch162 = {6,8,-1,0,9,ch162data};\r
+\r
+/* char: 0xa1 */\r
+\r
+static const GLubyte ch161data[] = {\r
+0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x0,0x80,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch161 = {1,11,-4,0,9,ch161data};\r
+\r
+/* char: 0x7e '~' */\r
+\r
+static const GLubyte ch126data[] = {\r
+0x8c,0x92,0x62,\r
+};\r
+\r
+static const BitmapCharRec ch126 = {7,3,-1,-7,9,ch126data};\r
+\r
+/* char: 0x7d '}' */\r
+\r
+static const GLubyte ch125data[] = {\r
+0xe0,0x10,0x10,0x10,0x20,0x18,0x18,0x20,0x10,0x10,0x10,0xe0,\r
+};\r
+\r
+static const BitmapCharRec ch125 = {5,12,-1,1,9,ch125data};\r
+\r
+/* char: 0x7c '|' */\r
+\r
+static const GLubyte ch124data[] = {\r
+0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch124 = {1,12,-4,1,9,ch124data};\r
+\r
+/* char: 0x7b '{' */\r
+\r
+static const GLubyte ch123data[] = {\r
+0x38,0x40,0x40,0x40,0x20,0xc0,0xc0,0x20,0x40,0x40,0x40,0x38,\r
+};\r
+\r
+static const BitmapCharRec ch123 = {5,12,-3,1,9,ch123data};\r
+\r
+/* char: 0x7a 'z' */\r
+\r
+static const GLubyte ch122data[] = {\r
+0xfe,0x40,0x20,0x10,0x8,0x4,0xfe,\r
+};\r
+\r
+static const BitmapCharRec ch122 = {7,7,-1,0,9,ch122data};\r
+\r
+/* char: 0x79 'y' */\r
+\r
+static const GLubyte ch121data[] = {\r
+0x78,0x84,0x4,0x74,0x8c,0x84,0x84,0x84,0x84,0x84,\r
+};\r
+\r
+static const BitmapCharRec ch121 = {6,10,-1,3,9,ch121data};\r
+\r
+/* char: 0x78 'x' */\r
+\r
+static const GLubyte ch120data[] = {\r
+0x82,0x44,0x28,0x10,0x28,0x44,0x82,\r
+};\r
+\r
+static const BitmapCharRec ch120 = {7,7,-1,0,9,ch120data};\r
+\r
+/* char: 0x77 'w' */\r
+\r
+static const GLubyte ch119data[] = {\r
+0x44,0xaa,0x92,0x92,0x92,0x82,0x82,\r
+};\r
+\r
+static const BitmapCharRec ch119 = {7,7,-1,0,9,ch119data};\r
+\r
+/* char: 0x76 'v' */\r
+\r
+static const GLubyte ch118data[] = {\r
+0x10,0x28,0x28,0x44,0x44,0x82,0x82,\r
+};\r
+\r
+static const BitmapCharRec ch118 = {7,7,-1,0,9,ch118data};\r
+\r
+/* char: 0x75 'u' */\r
+\r
+static const GLubyte ch117data[] = {\r
+0x7a,0x84,0x84,0x84,0x84,0x84,0x84,\r
+};\r
+\r
+static const BitmapCharRec ch117 = {7,7,-1,0,9,ch117data};\r
+\r
+/* char: 0x74 't' */\r
+\r
+static const GLubyte ch116data[] = {\r
+0x1c,0x22,0x20,0x20,0x20,0x20,0xfc,0x20,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch116 = {7,9,-1,0,9,ch116data};\r
+\r
+/* char: 0x73 's' */\r
+\r
+static const GLubyte ch115data[] = {\r
+0x7c,0x82,0x2,0x7c,0x80,0x82,0x7c,\r
+};\r
+\r
+static const BitmapCharRec ch115 = {7,7,-1,0,9,ch115data};\r
+\r
+/* char: 0x72 'r' */\r
+\r
+static const GLubyte ch114data[] = {\r
+0x40,0x40,0x40,0x40,0x42,0x62,0x9c,\r
+};\r
+\r
+static const BitmapCharRec ch114 = {7,7,-1,0,9,ch114data};\r
+\r
+/* char: 0x71 'q' */\r
+\r
+static const GLubyte ch113data[] = {\r
+0x2,0x2,0x2,0x7a,0x86,0x82,0x82,0x82,0x86,0x7a,\r
+};\r
+\r
+static const BitmapCharRec ch113 = {7,10,-1,3,9,ch113data};\r
+\r
+/* char: 0x70 'p' */\r
+\r
+static const GLubyte ch112data[] = {\r
+0x80,0x80,0x80,0xbc,0xc2,0x82,0x82,0x82,0xc2,0xbc,\r
+};\r
+\r
+static const BitmapCharRec ch112 = {7,10,-1,3,9,ch112data};\r
+\r
+/* char: 0x6f 'o' */\r
+\r
+static const GLubyte ch111data[] = {\r
+0x7c,0x82,0x82,0x82,0x82,0x82,0x7c,\r
+};\r
+\r
+static const BitmapCharRec ch111 = {7,7,-1,0,9,ch111data};\r
+\r
+/* char: 0x6e 'n' */\r
+\r
+static const GLubyte ch110data[] = {\r
+0x82,0x82,0x82,0x82,0x82,0xc2,0xbc,\r
+};\r
+\r
+static const BitmapCharRec ch110 = {7,7,-1,0,9,ch110data};\r
+\r
+/* char: 0x6d 'm' */\r
+\r
+static const GLubyte ch109data[] = {\r
+0x82,0x92,0x92,0x92,0x92,0x92,0xec,\r
+};\r
+\r
+static const BitmapCharRec ch109 = {7,7,-1,0,9,ch109data};\r
+\r
+/* char: 0x6c 'l' */\r
+\r
+static const GLubyte ch108data[] = {\r
+0xf8,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xe0,\r
+};\r
+\r
+static const BitmapCharRec ch108 = {5,10,-2,0,9,ch108data};\r
+\r
+/* char: 0x6b 'k' */\r
+\r
+static const GLubyte ch107data[] = {\r
+0x82,0x8c,0xb0,0xc0,0xb0,0x8c,0x82,0x80,0x80,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch107 = {7,10,-1,0,9,ch107data};\r
+\r
+/* char: 0x6a 'j' */\r
+\r
+static const GLubyte ch106data[] = {\r
+0x78,0x84,0x84,0x84,0x4,0x4,0x4,0x4,0x4,0x1c,0x0,0x0,0xc,\r
+};\r
+\r
+static const BitmapCharRec ch106 = {6,13,-1,3,9,ch106data};\r
+\r
+/* char: 0x69 'i' */\r
+\r
+static const GLubyte ch105data[] = {\r
+0xf8,0x20,0x20,0x20,0x20,0x20,0xe0,0x0,0x0,0x60,\r
+};\r
+\r
+static const BitmapCharRec ch105 = {5,10,-2,0,9,ch105data};\r
+\r
+/* char: 0x68 'h' */\r
+\r
+static const GLubyte ch104data[] = {\r
+0x82,0x82,0x82,0x82,0x82,0xc2,0xbc,0x80,0x80,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch104 = {7,10,-1,0,9,ch104data};\r
+\r
+/* char: 0x67 'g' */\r
+\r
+static const GLubyte ch103data[] = {\r
+0x7c,0x82,0x82,0x7c,0x80,0x78,0x84,0x84,0x84,0x7a,\r
+};\r
+\r
+static const BitmapCharRec ch103 = {7,10,-1,3,9,ch103data};\r
+\r
+/* char: 0x66 'f' */\r
+\r
+static const GLubyte ch102data[] = {\r
+0x20,0x20,0x20,0x20,0xf8,0x20,0x20,0x22,0x22,0x1c,\r
+};\r
+\r
+static const BitmapCharRec ch102 = {7,10,-1,0,9,ch102data};\r
+\r
+/* char: 0x65 'e' */\r
+\r
+static const GLubyte ch101data[] = {\r
+0x7c,0x80,0x80,0xfe,0x82,0x82,0x7c,\r
+};\r
+\r
+static const BitmapCharRec ch101 = {7,7,-1,0,9,ch101data};\r
+\r
+/* char: 0x64 'd' */\r
+\r
+static const GLubyte ch100data[] = {\r
+0x7a,0x86,0x82,0x82,0x82,0x86,0x7a,0x2,0x2,0x2,\r
+};\r
+\r
+static const BitmapCharRec ch100 = {7,10,-1,0,9,ch100data};\r
+\r
+/* char: 0x63 'c' */\r
+\r
+static const GLubyte ch99data[] = {\r
+0x7c,0x82,0x80,0x80,0x80,0x82,0x7c,\r
+};\r
+\r
+static const BitmapCharRec ch99 = {7,7,-1,0,9,ch99data};\r
+\r
+/* char: 0x62 'b' */\r
+\r
+static const GLubyte ch98data[] = {\r
+0xbc,0xc2,0x82,0x82,0x82,0xc2,0xbc,0x80,0x80,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch98 = {7,10,-1,0,9,ch98data};\r
+\r
+/* char: 0x61 'a' */\r
+\r
+static const GLubyte ch97data[] = {\r
+0x7a,0x86,0x82,0x7e,0x2,0x2,0x7c,\r
+};\r
+\r
+static const BitmapCharRec ch97 = {7,7,-1,0,9,ch97data};\r
+\r
+/* char: 0x60 '`' */\r
+\r
+static const GLubyte ch96data[] = {\r
+0x10,0x20,0x40,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch96 = {4,4,-3,-6,9,ch96data};\r
+\r
+/* char: 0x5f '_' */\r
+\r
+static const GLubyte ch95data[] = {\r
+0xff,\r
+};\r
+\r
+static const BitmapCharRec ch95 = {8,1,0,1,9,ch95data};\r
+\r
+/* char: 0x5e '^' */\r
+\r
+static const GLubyte ch94data[] = {\r
+0x82,0x44,0x28,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch94 = {7,4,-1,-6,9,ch94data};\r
+\r
+/* char: 0x5d ']' */\r
+\r
+static const GLubyte ch93data[] = {\r
+0xf0,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0xf0,\r
+};\r
+\r
+static const BitmapCharRec ch93 = {4,12,-2,1,9,ch93data};\r
+\r
+/* char: 0x5c '\' */\r
+\r
+static const GLubyte ch92data[] = {\r
+0x2,0x4,0x4,0x8,0x10,0x10,0x20,0x40,0x40,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch92 = {7,10,-1,0,9,ch92data};\r
+\r
+/* char: 0x5b '[' */\r
+\r
+static const GLubyte ch91data[] = {\r
+0xf0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xf0,\r
+};\r
+\r
+static const BitmapCharRec ch91 = {4,12,-3,1,9,ch91data};\r
+\r
+/* char: 0x5a 'Z' */\r
+\r
+static const GLubyte ch90data[] = {\r
+0xfe,0x80,0x80,0x40,0x20,0x10,0x8,0x4,0x2,0xfe,\r
+};\r
+\r
+static const BitmapCharRec ch90 = {7,10,-1,0,9,ch90data};\r
+\r
+/* char: 0x59 'Y' */\r
+\r
+static const GLubyte ch89data[] = {\r
+0x10,0x10,0x10,0x10,0x10,0x10,0x28,0x44,0x82,0x82,\r
+};\r
+\r
+static const BitmapCharRec ch89 = {7,10,-1,0,9,ch89data};\r
+\r
+/* char: 0x58 'X' */\r
+\r
+static const GLubyte ch88data[] = {\r
+0x82,0x82,0x44,0x28,0x10,0x10,0x28,0x44,0x82,0x82,\r
+};\r
+\r
+static const BitmapCharRec ch88 = {7,10,-1,0,9,ch88data};\r
+\r
+/* char: 0x57 'W' */\r
+\r
+static const GLubyte ch87data[] = {\r
+0x44,0xaa,0x92,0x92,0x92,0x92,0x82,0x82,0x82,0x82,\r
+};\r
+\r
+static const BitmapCharRec ch87 = {7,10,-1,0,9,ch87data};\r
+\r
+/* char: 0x56 'V' */\r
+\r
+static const GLubyte ch86data[] = {\r
+0x10,0x28,0x28,0x28,0x44,0x44,0x44,0x82,0x82,0x82,\r
+};\r
+\r
+static const BitmapCharRec ch86 = {7,10,-1,0,9,ch86data};\r
+\r
+/* char: 0x55 'U' */\r
+\r
+static const GLubyte ch85data[] = {\r
+0x7c,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,\r
+};\r
+\r
+static const BitmapCharRec ch85 = {7,10,-1,0,9,ch85data};\r
+\r
+/* char: 0x54 'T' */\r
+\r
+static const GLubyte ch84data[] = {\r
+0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0xfe,\r
+};\r
+\r
+static const BitmapCharRec ch84 = {7,10,-1,0,9,ch84data};\r
+\r
+/* char: 0x53 'S' */\r
+\r
+static const GLubyte ch83data[] = {\r
+0x7c,0x82,0x82,0x2,0xc,0x70,0x80,0x82,0x82,0x7c,\r
+};\r
+\r
+static const BitmapCharRec ch83 = {7,10,-1,0,9,ch83data};\r
+\r
+/* char: 0x52 'R' */\r
+\r
+static const GLubyte ch82data[] = {\r
+0x82,0x82,0x84,0x88,0x90,0xfc,0x82,0x82,0x82,0xfc,\r
+};\r
+\r
+static const BitmapCharRec ch82 = {7,10,-1,0,9,ch82data};\r
+\r
+/* char: 0x51 'Q' */\r
+\r
+static const GLubyte ch81data[] = {\r
+0x6,0x8,0x7c,0x92,0xa2,0x82,0x82,0x82,0x82,0x82,0x82,0x7c,\r
+};\r
+\r
+static const BitmapCharRec ch81 = {7,12,-1,2,9,ch81data};\r
+\r
+/* char: 0x50 'P' */\r
+\r
+static const GLubyte ch80data[] = {\r
+0x80,0x80,0x80,0x80,0x80,0xfc,0x82,0x82,0x82,0xfc,\r
+};\r
+\r
+static const BitmapCharRec ch80 = {7,10,-1,0,9,ch80data};\r
+\r
+/* char: 0x4f 'O' */\r
+\r
+static const GLubyte ch79data[] = {\r
+0x7c,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x7c,\r
+};\r
+\r
+static const BitmapCharRec ch79 = {7,10,-1,0,9,ch79data};\r
+\r
+/* char: 0x4e 'N' */\r
+\r
+static const GLubyte ch78data[] = {\r
+0x82,0x82,0x82,0x86,0x8a,0x92,0xa2,0xc2,0x82,0x82,\r
+};\r
+\r
+static const BitmapCharRec ch78 = {7,10,-1,0,9,ch78data};\r
+\r
+/* char: 0x4d 'M' */\r
+\r
+static const GLubyte ch77data[] = {\r
+0x82,0x82,0x82,0x92,0x92,0xaa,0xaa,0xc6,0x82,0x82,\r
+};\r
+\r
+static const BitmapCharRec ch77 = {7,10,-1,0,9,ch77data};\r
+\r
+/* char: 0x4c 'L' */\r
+\r
+static const GLubyte ch76data[] = {\r
+0xfe,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch76 = {7,10,-1,0,9,ch76data};\r
+\r
+/* char: 0x4b 'K' */\r
+\r
+static const GLubyte ch75data[] = {\r
+0x82,0x84,0x88,0x90,0xa0,0xe0,0x90,0x88,0x84,0x82,\r
+};\r
+\r
+static const BitmapCharRec ch75 = {7,10,-1,0,9,ch75data};\r
+\r
+/* char: 0x4a 'J' */\r
+\r
+static const GLubyte ch74data[] = {\r
+0x78,0x84,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x1e,\r
+};\r
+\r
+static const BitmapCharRec ch74 = {7,10,-1,0,9,ch74data};\r
+\r
+/* char: 0x49 'I' */\r
+\r
+static const GLubyte ch73data[] = {\r
+0xf8,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xf8,\r
+};\r
+\r
+static const BitmapCharRec ch73 = {5,10,-2,0,9,ch73data};\r
+\r
+/* char: 0x48 'H' */\r
+\r
+static const GLubyte ch72data[] = {\r
+0x82,0x82,0x82,0x82,0x82,0xfe,0x82,0x82,0x82,0x82,\r
+};\r
+\r
+static const BitmapCharRec ch72 = {7,10,-1,0,9,ch72data};\r
+\r
+/* char: 0x47 'G' */\r
+\r
+static const GLubyte ch71data[] = {\r
+0x7c,0x82,0x82,0x82,0x8e,0x80,0x80,0x80,0x82,0x7c,\r
+};\r
+\r
+static const BitmapCharRec ch71 = {7,10,-1,0,9,ch71data};\r
+\r
+/* char: 0x46 'F' */\r
+\r
+static const GLubyte ch70data[] = {\r
+0x40,0x40,0x40,0x40,0x40,0x78,0x40,0x40,0x40,0xfe,\r
+};\r
+\r
+static const BitmapCharRec ch70 = {7,10,-1,0,9,ch70data};\r
+\r
+/* char: 0x45 'E' */\r
+\r
+static const GLubyte ch69data[] = {\r
+0xfe,0x40,0x40,0x40,0x40,0x78,0x40,0x40,0x40,0xfe,\r
+};\r
+\r
+static const BitmapCharRec ch69 = {7,10,-1,0,9,ch69data};\r
+\r
+/* char: 0x44 'D' */\r
+\r
+static const GLubyte ch68data[] = {\r
+0xfc,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0xfc,\r
+};\r
+\r
+static const BitmapCharRec ch68 = {7,10,-1,0,9,ch68data};\r
+\r
+/* char: 0x43 'C' */\r
+\r
+static const GLubyte ch67data[] = {\r
+0x7c,0x82,0x80,0x80,0x80,0x80,0x80,0x80,0x82,0x7c,\r
+};\r
+\r
+static const BitmapCharRec ch67 = {7,10,-1,0,9,ch67data};\r
+\r
+/* char: 0x42 'B' */\r
+\r
+static const GLubyte ch66data[] = {\r
+0xfc,0x42,0x42,0x42,0x42,0x7c,0x42,0x42,0x42,0xfc,\r
+};\r
+\r
+static const BitmapCharRec ch66 = {7,10,-1,0,9,ch66data};\r
+\r
+/* char: 0x41 'A' */\r
+\r
+static const GLubyte ch65data[] = {\r
+0x82,0x82,0x82,0xfe,0x82,0x82,0x82,0x44,0x28,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch65 = {7,10,-1,0,9,ch65data};\r
+\r
+/* char: 0x40 '@' */\r
+\r
+static const GLubyte ch64data[] = {\r
+0x7c,0x80,0x80,0x9a,0xa6,0xa2,0x9e,0x82,0x82,0x7c,\r
+};\r
+\r
+static const BitmapCharRec ch64 = {7,10,-1,0,9,ch64data};\r
+\r
+/* char: 0x3f '?' */\r
+\r
+static const GLubyte ch63data[] = {\r
+0x10,0x0,0x10,0x10,0x8,0x4,0x2,0x82,0x82,0x7c,\r
+};\r
+\r
+static const BitmapCharRec ch63 = {7,10,-1,0,9,ch63data};\r
+\r
+/* char: 0x3e '>' */\r
+\r
+static const GLubyte ch62data[] = {\r
+0x80,0x40,0x20,0x10,0x8,0x8,0x10,0x20,0x40,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch62 = {5,10,-2,0,9,ch62data};\r
+\r
+/* char: 0x3d '=' */\r
+\r
+static const GLubyte ch61data[] = {\r
+0xfe,0x0,0x0,0xfe,\r
+};\r
+\r
+static const BitmapCharRec ch61 = {7,4,-1,-2,9,ch61data};\r
+\r
+/* char: 0x3c '<' */\r
+\r
+static const GLubyte ch60data[] = {\r
+0x8,0x10,0x20,0x40,0x80,0x80,0x40,0x20,0x10,0x8,\r
+};\r
+\r
+static const BitmapCharRec ch60 = {5,10,-2,0,9,ch60data};\r
+\r
+/* char: 0x3b ';' */\r
+\r
+static const GLubyte ch59data[] = {\r
+0x80,0x40,0x40,0xc0,0xc0,0x0,0x0,0x0,0xc0,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch59 = {2,10,-4,3,9,ch59data};\r
+\r
+/* char: 0x3a ':' */\r
+\r
+static const GLubyte ch58data[] = {\r
+0xc0,0xc0,0x0,0x0,0x0,0xc0,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch58 = {2,7,-4,0,9,ch58data};\r
+\r
+/* char: 0x39 '9' */\r
+\r
+static const GLubyte ch57data[] = {\r
+0x78,0x4,0x2,0x2,0x7a,0x86,0x82,0x82,0x82,0x7c,\r
+};\r
+\r
+static const BitmapCharRec ch57 = {7,10,-1,0,9,ch57data};\r
+\r
+/* char: 0x38 '8' */\r
+\r
+static const GLubyte ch56data[] = {\r
+0x38,0x44,0x82,0x82,0x44,0x38,0x44,0x82,0x44,0x38,\r
+};\r
+\r
+static const BitmapCharRec ch56 = {7,10,-1,0,9,ch56data};\r
+\r
+/* char: 0x37 '7' */\r
+\r
+static const GLubyte ch55data[] = {\r
+0x40,0x40,0x20,0x20,0x10,0x8,0x4,0x2,0x2,0xfe,\r
+};\r
+\r
+static const BitmapCharRec ch55 = {7,10,-1,0,9,ch55data};\r
+\r
+/* char: 0x36 '6' */\r
+\r
+static const GLubyte ch54data[] = {\r
+0x7c,0x82,0x82,0x82,0xc2,0xbc,0x80,0x80,0x40,0x3c,\r
+};\r
+\r
+static const BitmapCharRec ch54 = {7,10,-1,0,9,ch54data};\r
+\r
+/* char: 0x35 '5' */\r
+\r
+static const GLubyte ch53data[] = {\r
+0x7c,0x82,0x2,0x2,0x2,0xc2,0xbc,0x80,0x80,0xfe,\r
+};\r
+\r
+static const BitmapCharRec ch53 = {7,10,-1,0,9,ch53data};\r
+\r
+/* char: 0x34 '4' */\r
+\r
+static const GLubyte ch52data[] = {\r
+0x4,0x4,0x4,0xfe,0x84,0x44,0x24,0x14,0xc,0x4,\r
+};\r
+\r
+static const BitmapCharRec ch52 = {7,10,-1,0,9,ch52data};\r
+\r
+/* char: 0x33 '3' */\r
+\r
+static const GLubyte ch51data[] = {\r
+0x7c,0x82,0x2,0x2,0x2,0x1c,0x8,0x4,0x2,0xfe,\r
+};\r
+\r
+static const BitmapCharRec ch51 = {7,10,-1,0,9,ch51data};\r
+\r
+/* char: 0x32 '2' */\r
+\r
+static const GLubyte ch50data[] = {\r
+0xfe,0x80,0x40,0x30,0x8,0x4,0x2,0x82,0x82,0x7c,\r
+};\r
+\r
+static const BitmapCharRec ch50 = {7,10,-1,0,9,ch50data};\r
+\r
+/* char: 0x31 '1' */\r
+\r
+static const GLubyte ch49data[] = {\r
+0xfe,0x10,0x10,0x10,0x10,0x10,0x90,0x50,0x30,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch49 = {7,10,-1,0,9,ch49data};\r
+\r
+/* char: 0x30 '0' */\r
+\r
+static const GLubyte ch48data[] = {\r
+0x38,0x44,0x82,0x82,0x82,0x82,0x82,0x82,0x44,0x38,\r
+};\r
+\r
+static const BitmapCharRec ch48 = {7,10,-1,0,9,ch48data};\r
+\r
+/* char: 0x2f '/' */\r
+\r
+static const GLubyte ch47data[] = {\r
+0x80,0x40,0x40,0x20,0x10,0x10,0x8,0x4,0x4,0x2,\r
+};\r
+\r
+static const BitmapCharRec ch47 = {7,10,-1,0,9,ch47data};\r
+\r
+/* char: 0x2e '.' */\r
+\r
+static const GLubyte ch46data[] = {\r
+0xc0,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch46 = {2,2,-4,0,9,ch46data};\r
+\r
+/* char: 0x2d '-' */\r
+\r
+static const GLubyte ch45data[] = {\r
+0xfe,\r
+};\r
+\r
+static const BitmapCharRec ch45 = {7,1,-1,-4,9,ch45data};\r
+\r
+/* char: 0x2c ',' */\r
+\r
+static const GLubyte ch44data[] = {\r
+0x80,0x40,0x40,0xc0,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch44 = {2,5,-4,3,9,ch44data};\r
+\r
+/* char: 0x2b '+' */\r
+\r
+static const GLubyte ch43data[] = {\r
+0x10,0x10,0x10,0xfe,0x10,0x10,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch43 = {7,7,-1,-1,9,ch43data};\r
+\r
+/* char: 0x2a '*' */\r
+\r
+static const GLubyte ch42data[] = {\r
+0x10,0x92,0x54,0x38,0x54,0x92,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch42 = {7,7,-1,-1,9,ch42data};\r
+\r
+/* char: 0x29 ')' */\r
+\r
+static const GLubyte ch41data[] = {\r
+0x80,0x40,0x40,0x20,0x20,0x20,0x20,0x20,0x20,0x40,0x40,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch41 = {3,12,-3,1,9,ch41data};\r
+\r
+/* char: 0x28 '(' */\r
+\r
+static const GLubyte ch40data[] = {\r
+0x20,0x40,0x40,0x80,0x80,0x80,0x80,0x80,0x80,0x40,0x40,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch40 = {3,12,-3,1,9,ch40data};\r
+\r
+/* char: 0x27 ''' */\r
+\r
+static const GLubyte ch39data[] = {\r
+0x80,0x40,0x20,0x30,\r
+};\r
+\r
+static const BitmapCharRec ch39 = {4,4,-3,-6,9,ch39data};\r
+\r
+/* char: 0x26 '&' */\r
+\r
+static const GLubyte ch38data[] = {\r
+0x62,0x94,0x88,0x94,0x62,0x60,0x90,0x90,0x90,0x60,\r
+};\r
+\r
+static const BitmapCharRec ch38 = {7,10,-1,0,9,ch38data};\r
+\r
+/* char: 0x25 '%' */\r
+\r
+static const GLubyte ch37data[] = {\r
+0x84,0x4a,0x4a,0x24,0x10,0x10,0x48,0xa4,0xa4,0x42,\r
+};\r
+\r
+static const BitmapCharRec ch37 = {7,10,-1,0,9,ch37data};\r
+\r
+/* char: 0x24 '$' */\r
+\r
+static const GLubyte ch36data[] = {\r
+0x10,0x7c,0x92,0x12,0x12,0x14,0x38,0x50,0x90,0x92,0x7c,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch36 = {7,12,-1,1,9,ch36data};\r
+\r
+/* char: 0x23 '#' */\r
+\r
+static const GLubyte ch35data[] = {\r
+0x48,0x48,0xfc,0x48,0x48,0xfc,0x48,0x48,\r
+};\r
+\r
+static const BitmapCharRec ch35 = {6,8,-1,-1,9,ch35data};\r
+\r
+/* char: 0x22 '"' */\r
+\r
+static const GLubyte ch34data[] = {\r
+0x90,0x90,0x90,\r
+};\r
+\r
+static const BitmapCharRec ch34 = {4,3,-3,-7,9,ch34data};\r
+\r
+/* char: 0x21 '!' */\r
+\r
+static const GLubyte ch33data[] = {\r
+0x80,0x80,0x0,0x0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch33 = {1,11,-4,0,9,ch33data};\r
+\r
+/* char: 0x1f */\r
+\r
+static const GLubyte ch31data[] = {\r
+0xc0,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch31 = {2,2,-4,-2,9,ch31data};\r
+\r
+/* char: 0x1e */\r
+\r
+static const GLubyte ch30data[] = {\r
+0x5c,0xa2,0x60,0x20,0x20,0xf8,0x20,0x20,0x22,0x1c,\r
+};\r
+\r
+static const BitmapCharRec ch30 = {7,10,-1,0,9,ch30data};\r
+\r
+/* char: 0x1d */\r
+\r
+static const GLubyte ch29data[] = {\r
+0x80,0x40,0xfe,0x10,0xfe,0x4,0x2,\r
+};\r
+\r
+static const BitmapCharRec ch29 = {7,7,-1,0,9,ch29data};\r
+\r
+/* char: 0x1c */\r
+\r
+static const GLubyte ch28data[] = {\r
+0x44,0x24,0x24,0x24,0x24,0x24,0xfe,\r
+};\r
+\r
+static const BitmapCharRec ch28 = {7,7,-1,0,9,ch28data};\r
+\r
+/* char: 0x1b */\r
+\r
+static const GLubyte ch27data[] = {\r
+0xfe,0x0,0x80,0x40,0x20,0x10,0x8,0x8,0x10,0x20,0x40,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch27 = {7,12,-1,2,9,ch27data};\r
+\r
+/* char: 0x1a */\r
+\r
+static const GLubyte ch26data[] = {\r
+0xfc,0x0,0x4,0x8,0x10,0x20,0x40,0x40,0x20,0x10,0x8,0x4,\r
+};\r
+\r
+static const BitmapCharRec ch26 = {6,12,-2,2,9,ch26data};\r
+\r
+/* char: 0x19 */\r
+\r
+static const GLubyte ch25data[] = {\r
+0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch25 = {1,15,-4,3,9,ch25data};\r
+\r
+/* char: 0x18 */\r
+\r
+static const GLubyte ch24data[] = {\r
+0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0xff,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch24 = {9,7,0,3,9,ch24data};\r
+\r
+/* char: 0x17 */\r
+\r
+static const GLubyte ch23data[] = {\r
+0xff,0x80,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,\r
+0x8,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch23 = {9,9,0,-3,9,ch23data};\r
+\r
+/* char: 0x16 */\r
+\r
+static const GLubyte ch22data[] = {\r
+0x8,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,\r
+};\r
+\r
+static const BitmapCharRec ch22 = {5,15,0,3,9,ch22data};\r
+\r
+/* char: 0x15 */\r
+\r
+static const GLubyte ch21data[] = {\r
+0x80,0x80,0x80,0x80,0x80,0x80,0xf8,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch21 = {5,15,-4,3,9,ch21data};\r
+\r
+/* char: 0x14 */\r
+\r
+static const GLubyte ch20data[] = {\r
+0xff,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch20 = {9,1,0,1,9,ch20data};\r
+\r
+/* char: 0x13 */\r
+\r
+static const GLubyte ch19data[] = {\r
+0xff,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch19 = {9,1,0,-1,9,ch19data};\r
+\r
+/* char: 0x12 */\r
+\r
+static const GLubyte ch18data[] = {\r
+0xff,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch18 = {9,1,0,-3,9,ch18data};\r
+\r
+/* char: 0x11 */\r
+\r
+static const GLubyte ch17data[] = {\r
+0xff,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch17 = {9,1,0,-5,9,ch17data};\r
+\r
+/* char: 0x10 */\r
+\r
+static const GLubyte ch16data[] = {\r
+0xff,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch16 = {9,1,0,-7,9,ch16data};\r
+\r
+/* char: 0xf */\r
+\r
+static const GLubyte ch15data[] = {\r
+0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0xff,0x80,0x8,0x0,\r
+0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch15 = {9,15,0,3,9,ch15data};\r
+\r
+/* char: 0xe */\r
+\r
+static const GLubyte ch14data[] = {\r
+0xf8,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch14 = {5,9,-4,-3,9,ch14data};\r
+\r
+/* char: 0xd */\r
+\r
+static const GLubyte ch13data[] = {\r
+0x80,0x80,0x80,0x80,0x80,0x80,0xf8,\r
+};\r
+\r
+static const BitmapCharRec ch13 = {5,7,-4,3,9,ch13data};\r
+\r
+/* char: 0xc */\r
+\r
+static const GLubyte ch12data[] = {\r
+0x8,0x8,0x8,0x8,0x8,0x8,0xf8,\r
+};\r
+\r
+static const BitmapCharRec ch12 = {5,7,0,3,9,ch12data};\r
+\r
+/* char: 0xb */\r
+\r
+static const GLubyte ch11data[] = {\r
+0xf8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,\r
+};\r
+\r
+static const BitmapCharRec ch11 = {5,9,0,-3,9,ch11data};\r
+\r
+/* char: 0xa */\r
+\r
+static const GLubyte ch10data[] = {\r
+0x8,0x8,0x8,0x8,0x3e,0x0,0x20,0x50,0x88,0x88,\r
+};\r
+\r
+static const BitmapCharRec ch10 = {7,10,-1,2,9,ch10data};\r
+\r
+/* char: 0x9 */\r
+\r
+static const GLubyte ch9data[] = {\r
+0x3e,0x20,0x20,0x20,0x20,0x88,0x98,0xa8,0xc8,0x88,\r
+};\r
+\r
+static const BitmapCharRec ch9 = {7,10,-1,2,9,ch9data};\r
+\r
+/* char: 0x8 */\r
+\r
+static const GLubyte ch8data[] = {\r
+0xfe,0x10,0x10,0xfe,0x10,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch8 = {7,6,-1,0,9,ch8data};\r
+\r
+/* char: 0x7 */\r
+\r
+static const GLubyte ch7data[] = {\r
+0x70,0x88,0x88,0x70,\r
+};\r
+\r
+static const BitmapCharRec ch7 = {5,4,-2,-6,9,ch7data};\r
+\r
+/* char: 0x6 */\r
+\r
+static const GLubyte ch6data[] = {\r
+0x20,0x20,0x3c,0x20,0x3e,0x0,0xf8,0x80,0x80,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch6 = {7,10,-1,2,9,ch6data};\r
+\r
+/* char: 0x5 */\r
+\r
+static const GLubyte ch5data[] = {\r
+0x22,0x22,0x3c,0x22,0x3c,0x0,0x78,0x80,0x80,0x78,\r
+};\r
+\r
+static const BitmapCharRec ch5 = {7,10,-1,2,9,ch5data};\r
+\r
+/* char: 0x4 */\r
+\r
+static const GLubyte ch4data[] = {\r
+0x10,0x10,0x1c,0x10,0x1e,0x80,0x80,0xe0,0x80,0xf0,\r
+};\r
+\r
+static const BitmapCharRec ch4 = {7,10,-1,2,9,ch4data};\r
+\r
+/* char: 0x3 */\r
+\r
+static const GLubyte ch3data[] = {\r
+0x8,0x8,0x8,0x3e,0x0,0x88,0x88,0xf8,0x88,0x88,\r
+};\r
+\r
+static const BitmapCharRec ch3 = {7,10,-1,2,9,ch3data};\r
+\r
+/* char: 0x2 */\r
+\r
+static const GLubyte ch2data[] = {\r
+0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,\r
+};\r
+\r
+static const BitmapCharRec ch2 = {8,14,0,3,9,ch2data};\r
+\r
+/* char: 0x1 */\r
+\r
+static const GLubyte ch1data[] = {\r
+0x10,0x38,0x7c,0xfe,0x7c,0x38,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch1 = {7,7,-1,0,9,ch1data};\r
+\r
+static const BitmapCharRec * const chars[] = {\r
+&ch0,\r
+&ch1,\r
+&ch2,\r
+&ch3,\r
+&ch4,\r
+&ch5,\r
+&ch6,\r
+&ch7,\r
+&ch8,\r
+&ch9,\r
+&ch10,\r
+&ch11,\r
+&ch12,\r
+&ch13,\r
+&ch14,\r
+&ch15,\r
+&ch16,\r
+&ch17,\r
+&ch18,\r
+&ch19,\r
+&ch20,\r
+&ch21,\r
+&ch22,\r
+&ch23,\r
+&ch24,\r
+&ch25,\r
+&ch26,\r
+&ch27,\r
+&ch28,\r
+&ch29,\r
+&ch30,\r
+&ch31,\r
+&ch32,\r
+&ch33,\r
+&ch34,\r
+&ch35,\r
+&ch36,\r
+&ch37,\r
+&ch38,\r
+&ch39,\r
+&ch40,\r
+&ch41,\r
+&ch42,\r
+&ch43,\r
+&ch44,\r
+&ch45,\r
+&ch46,\r
+&ch47,\r
+&ch48,\r
+&ch49,\r
+&ch50,\r
+&ch51,\r
+&ch52,\r
+&ch53,\r
+&ch54,\r
+&ch55,\r
+&ch56,\r
+&ch57,\r
+&ch58,\r
+&ch59,\r
+&ch60,\r
+&ch61,\r
+&ch62,\r
+&ch63,\r
+&ch64,\r
+&ch65,\r
+&ch66,\r
+&ch67,\r
+&ch68,\r
+&ch69,\r
+&ch70,\r
+&ch71,\r
+&ch72,\r
+&ch73,\r
+&ch74,\r
+&ch75,\r
+&ch76,\r
+&ch77,\r
+&ch78,\r
+&ch79,\r
+&ch80,\r
+&ch81,\r
+&ch82,\r
+&ch83,\r
+&ch84,\r
+&ch85,\r
+&ch86,\r
+&ch87,\r
+&ch88,\r
+&ch89,\r
+&ch90,\r
+&ch91,\r
+&ch92,\r
+&ch93,\r
+&ch94,\r
+&ch95,\r
+&ch96,\r
+&ch97,\r
+&ch98,\r
+&ch99,\r
+&ch100,\r
+&ch101,\r
+&ch102,\r
+&ch103,\r
+&ch104,\r
+&ch105,\r
+&ch106,\r
+&ch107,\r
+&ch108,\r
+&ch109,\r
+&ch110,\r
+&ch111,\r
+&ch112,\r
+&ch113,\r
+&ch114,\r
+&ch115,\r
+&ch116,\r
+&ch117,\r
+&ch118,\r
+&ch119,\r
+&ch120,\r
+&ch121,\r
+&ch122,\r
+&ch123,\r
+&ch124,\r
+&ch125,\r
+&ch126,\r
+&ch127,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+&ch160,\r
+&ch161,\r
+&ch162,\r
+&ch163,\r
+&ch164,\r
+&ch165,\r
+&ch166,\r
+&ch167,\r
+&ch168,\r
+&ch169,\r
+&ch170,\r
+&ch171,\r
+&ch172,\r
+&ch173,\r
+&ch174,\r
+&ch175,\r
+&ch176,\r
+&ch177,\r
+&ch178,\r
+&ch179,\r
+&ch180,\r
+&ch181,\r
+&ch182,\r
+&ch183,\r
+&ch184,\r
+&ch185,\r
+&ch186,\r
+&ch187,\r
+&ch188,\r
+&ch189,\r
+&ch190,\r
+&ch191,\r
+&ch192,\r
+&ch193,\r
+&ch194,\r
+&ch195,\r
+&ch196,\r
+&ch197,\r
+&ch198,\r
+&ch199,\r
+&ch200,\r
+&ch201,\r
+&ch202,\r
+&ch203,\r
+&ch204,\r
+&ch205,\r
+&ch206,\r
+&ch207,\r
+&ch208,\r
+&ch209,\r
+&ch210,\r
+&ch211,\r
+&ch212,\r
+&ch213,\r
+&ch214,\r
+&ch215,\r
+&ch216,\r
+&ch217,\r
+&ch218,\r
+&ch219,\r
+&ch220,\r
+&ch221,\r
+&ch222,\r
+&ch223,\r
+&ch224,\r
+&ch225,\r
+&ch226,\r
+&ch227,\r
+&ch228,\r
+&ch229,\r
+&ch230,\r
+&ch231,\r
+&ch232,\r
+&ch233,\r
+&ch234,\r
+&ch235,\r
+&ch236,\r
+&ch237,\r
+&ch238,\r
+&ch239,\r
+&ch240,\r
+&ch241,\r
+&ch242,\r
+&ch243,\r
+&ch244,\r
+&ch245,\r
+&ch246,\r
+&ch247,\r
+&ch248,\r
+&ch249,\r
+&ch250,\r
+&ch251,\r
+&ch252,\r
+&ch253,\r
+&ch254,\r
+&ch255,\r
+};\r
+#if !defined(__IBMCPP__)\r
+const \r
+#endif\r
+ BitmapFontRec glutBitmap9By15 = {\r
+"-misc-fixed-medium-r-normal--15-140-75-75-C-90-iso8859-1",\r
+256,\r
+0,\r
+chars\r
+};\r
+\r
diff --git a/src/glut/os2/glut_bitmap.cpp b/src/glut/os2/glut_bitmap.cpp
new file mode 100644 (file)
index 0000000..789a89a
--- /dev/null
@@ -0,0 +1,57 @@
+\r
+/* Copyright (c) Mark J. Kilgard, 1994. */\r
+\r
+/* This program is freely distributable without licensing fees\r
+   and is provided without guarantee or warrantee expressed or\r
+   implied. This program is -not- in the public domain. */\r
+\r
+#include "glutint.h"\r
+#include "glutbitmap.h"\r
+\r
+void GLUTAPIENTRY\r
+glutBitmapCharacter(GLUTbitmapFont font, int c)\r
+{\r
+  const BitmapCharRec *ch;\r
+  BitmapFontPtr fontinfo;\r
+  GLint swapbytes, lsbfirst, rowlength;\r
+  GLint skiprows, skippixels, alignment;\r
+\r
+#if defined(_WIN32)\r
+  fontinfo = (BitmapFontPtr) __glutFont(font);\r
+#else\r
+  fontinfo = (BitmapFontPtr) font;\r
+#endif\r
+\r
+  if (c < fontinfo->first ||\r
+    c >= fontinfo->first + fontinfo->num_chars)\r
+    return;\r
+  ch = fontinfo->ch[c - fontinfo->first];\r
+  if (ch) {\r
+    /* Save current modes. */\r
+    glGetIntegerv(GL_UNPACK_SWAP_BYTES, &swapbytes);\r
+    glGetIntegerv(GL_UNPACK_LSB_FIRST, &lsbfirst);\r
+    glGetIntegerv(GL_UNPACK_ROW_LENGTH, &rowlength);\r
+    glGetIntegerv(GL_UNPACK_SKIP_ROWS, &skiprows);\r
+    glGetIntegerv(GL_UNPACK_SKIP_PIXELS, &skippixels);\r
+    glGetIntegerv(GL_UNPACK_ALIGNMENT, &alignment);\r
+    /* Little endian machines (DEC Alpha for example) could\r
+       benefit from setting GL_UNPACK_LSB_FIRST to GL_TRUE\r
+       instead of GL_FALSE, but this would require changing the\r
+       generated bitmaps too. */\r
+    glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_FALSE);\r
+    glPixelStorei(GL_UNPACK_LSB_FIRST, GL_FALSE);\r
+    glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);\r
+    glPixelStorei(GL_UNPACK_SKIP_ROWS, 0);\r
+    glPixelStorei(GL_UNPACK_SKIP_PIXELS, 0);\r
+    glPixelStorei(GL_UNPACK_ALIGNMENT, 1);\r
+    glBitmap(ch->width, ch->height, ch->xorig, ch->yorig,\r
+      ch->advance, 0, ch->bitmap);\r
+    /* Restore saved modes. */\r
+    glPixelStorei(GL_UNPACK_SWAP_BYTES, swapbytes);\r
+    glPixelStorei(GL_UNPACK_LSB_FIRST, lsbfirst);\r
+    glPixelStorei(GL_UNPACK_ROW_LENGTH, rowlength);\r
+    glPixelStorei(GL_UNPACK_SKIP_ROWS, skiprows);\r
+    glPixelStorei(GL_UNPACK_SKIP_PIXELS, skippixels);\r
+    glPixelStorei(GL_UNPACK_ALIGNMENT, alignment);\r
+  }\r
+}\r
diff --git a/src/glut/os2/glut_cindex.cpp b/src/glut/os2/glut_cindex.cpp
new file mode 100644 (file)
index 0000000..0897a3c
--- /dev/null
@@ -0,0 +1,259 @@
+\r
+/* Copyright (c) Mark J. Kilgard, 1994, 1996, 1997. */\r
+\r
+/* This program is freely distributable without licensing fees\r
+   and is provided without guarantee or warrantee expressed or\r
+   implied. This program is -not- in the public domain. */\r
+\r
+#include <stdlib.h>\r
+#include "glutint.h"\r
+\r
+#if defined(__OS2PM__)\r
+   #define IsWindowVisible WinIsWindowVisible\r
+#endif\r
+\r
+#define CLAMP(i) ((i) > 1.0 ? 1.0 : ((i) < 0.0 ? 0.0 : (i)))\r
+\r
+/* CENTRY */\r
+void GLUTAPIENTRY\r
+glutSetColor(int ndx, GLfloat red, GLfloat green, GLfloat blue)\r
+{\r
+  GLUTcolormap *cmap, *newcmap;\r
+  XVisualInfo *vis;\r
+  XColor color;\r
+  int i;\r
+\r
+  if (__glutCurrentWindow->renderWin == __glutCurrentWindow->win) {\r
+    cmap = __glutCurrentWindow->colormap;\r
+    vis = __glutCurrentWindow->vis;\r
+  } else {\r
+    cmap = __glutCurrentWindow->overlay->colormap;\r
+    vis = __glutCurrentWindow->overlay->vis;\r
+    if (ndx == __glutCurrentWindow->overlay->transparentPixel) {\r
+      __glutWarning(\r
+        "glutSetColor: cannot set color of overlay transparent index %d\n",\r
+        ndx);\r
+      return;\r
+    }\r
+  }\r
+\r
+  if (!cmap) {\r
+    __glutWarning("glutSetColor: current window is RGBA");\r
+    return;\r
+  }\r
+#if defined(_WIN32) || defined(__OS2PM__)\r
+  if (ndx >= 256 ||     /* always assume 256 colors on Win32 */\r
+#else\r
+  if (ndx >= vis->visual->map_entries ||\r
+#endif\r
+    ndx < 0) {\r
+    __glutWarning("glutSetColor: index %d out of range", ndx);\r
+    return;\r
+  }\r
+  if (cmap->refcnt > 1) {\r
+    newcmap = __glutAssociateNewColormap(vis);\r
+    cmap->refcnt--;\r
+    /* Wouldn't it be nice if XCopyColormapAndFree could be\r
+       told not to free the old colormap's entries! */\r
+    for (i = cmap->size - 1; i >= 0; i--) {\r
+      if (i == ndx) {\r
+        /* We are going to set this cell shortly! */\r
+        continue;\r
+      }\r
+      if (cmap->cells[i].component[GLUT_RED] >= 0.0) {\r
+        color.pixel = i;\r
+        newcmap->cells[i].component[GLUT_RED] =\r
+          cmap->cells[i].component[GLUT_RED];\r
+        color.red = (GLfloat) 0xffff *\r
+          cmap->cells[i].component[GLUT_RED];\r
+        newcmap->cells[i].component[GLUT_GREEN] =\r
+          cmap->cells[i].component[GLUT_GREEN];\r
+        color.green = (GLfloat) 0xffff *\r
+          cmap->cells[i].component[GLUT_GREEN];\r
+        newcmap->cells[i].component[GLUT_BLUE] =\r
+          cmap->cells[i].component[GLUT_BLUE];\r
+        color.blue = (GLfloat) 0xffff *\r
+          cmap->cells[i].component[GLUT_BLUE];\r
+        color.flags = DoRed | DoGreen | DoBlue;\r
+#if defined(_WIN32) || defined(__OS2PM__)\r
+        if (IsWindowVisible(__glutCurrentWindow->win)) {\r
+          XHDC = __glutCurrentWindow->hdc;\r
+        } else {\r
+          XHDC = 0;\r
+        }\r
+#endif\r
+        XStoreColor(__glutDisplay, newcmap->cmap, &color);\r
+      } else {\r
+        /* Leave unallocated entries unallocated. */\r
+      }\r
+    }\r
+    cmap = newcmap;\r
+    if (__glutCurrentWindow->renderWin == __glutCurrentWindow->win) {\r
+      __glutCurrentWindow->colormap = cmap;\r
+      __glutCurrentWindow->cmap = cmap->cmap;\r
+    } else {\r
+      __glutCurrentWindow->overlay->colormap = cmap;\r
+      __glutCurrentWindow->overlay->cmap = cmap->cmap;\r
+    }\r
+    XSetWindowColormap(__glutDisplay,\r
+      __glutCurrentWindow->renderWin, cmap->cmap);\r
+\r
+#if !defined(_WIN32) && !defined(__OS2PM__)\r
+    {\r
+      GLUTwindow *toplevel;\r
+\r
+      toplevel = __glutToplevelOf(__glutCurrentWindow);\r
+      if (toplevel->cmap != cmap->cmap) {\r
+        __glutPutOnWorkList(toplevel, GLUT_COLORMAP_WORK);\r
+      }\r
+    }\r
+#endif\r
+  }\r
+  color.pixel = ndx;\r
+  red = CLAMP(red);\r
+  cmap->cells[ndx].component[GLUT_RED] = red;\r
+  color.red = (GLfloat) 0xffff *red;\r
+  green = CLAMP(green);\r
+  cmap->cells[ndx].component[GLUT_GREEN] = green;\r
+  color.green = (GLfloat) 0xffff *green;\r
+  blue = CLAMP(blue);\r
+  cmap->cells[ndx].component[GLUT_BLUE] = blue;\r
+  color.blue = (GLfloat) 0xffff *blue;\r
+  color.flags = DoRed | DoGreen | DoBlue;\r
+#if defined(_WIN32) || defined(__OS2PM__)\r
+  if (IsWindowVisible(__glutCurrentWindow->win)) {\r
+    XHDC = __glutCurrentWindow->hdc;\r
+  } else {\r
+    XHDC = 0;\r
+  }\r
+#endif\r
+  XStoreColor(__glutDisplay, cmap->cmap, &color);\r
+}\r
+\r
+GLfloat GLUTAPIENTRY\r
+glutGetColor(int ndx, int comp)\r
+{\r
+  GLUTcolormap *colormap;\r
+  XVisualInfo *vis;\r
+\r
+  if (__glutCurrentWindow->renderWin == __glutCurrentWindow->win) {\r
+    colormap = __glutCurrentWindow->colormap;\r
+    vis = __glutCurrentWindow->vis;\r
+  } else {\r
+    colormap = __glutCurrentWindow->overlay->colormap;\r
+    vis = __glutCurrentWindow->overlay->vis;\r
+    if (ndx == __glutCurrentWindow->overlay->transparentPixel) {\r
+      __glutWarning("glutGetColor: requesting overlay transparent index %d\n",\r
+        ndx);\r
+      return -1.0;\r
+    }\r
+  }\r
+\r
+  if (!colormap) {\r
+    __glutWarning("glutGetColor: current window is RGBA");\r
+    return -1.0;\r
+  }\r
+#if defined(_WIN32) || defined(__OS2PM__)\r
+#define OUT_OF_RANGE_NDX(ndx) (ndx >= 256 || ndx < 0)\r
+#else\r
+#define OUT_OF_RANGE_NDX(ndx) (ndx >= vis->visual->map_entries || ndx < 0)\r
+#endif\r
+  if (OUT_OF_RANGE_NDX(ndx)) {\r
+    __glutWarning("glutGetColor: index %d out of range", ndx);\r
+    return -1.0;\r
+  }\r
+  return colormap->cells[ndx].component[comp];\r
+}\r
+\r
+void GLUTAPIENTRY\r
+glutCopyColormap(int winnum)\r
+{\r
+  GLUTwindow *window = __glutWindowList[winnum - 1];\r
+  GLUTcolormap *oldcmap, *newcmap;\r
+  XVisualInfo *dstvis;\r
+\r
+  if (__glutCurrentWindow->renderWin == __glutCurrentWindow->win) {\r
+    oldcmap = __glutCurrentWindow->colormap;\r
+    dstvis = __glutCurrentWindow->vis;\r
+    newcmap = window->colormap;\r
+  } else {\r
+    oldcmap = __glutCurrentWindow->overlay->colormap;\r
+    dstvis = __glutCurrentWindow->overlay->vis;\r
+    if (!window->overlay) {\r
+      __glutWarning("glutCopyColormap: window %d has no overlay", winnum);\r
+      return;\r
+    }\r
+    newcmap = window->overlay->colormap;\r
+  }\r
+\r
+  if (!oldcmap) {\r
+    __glutWarning("glutCopyColormap: destination colormap must be color index");\r
+    return;\r
+  }\r
+  if (!newcmap) {\r
+    __glutWarning(\r
+      "glutCopyColormap: source colormap of window %d must be color index",\r
+      winnum);\r
+    return;\r
+  }\r
+  if (newcmap == oldcmap) {\r
+    /* Source and destination are the same; now copy needed. */\r
+    return;\r
+  }\r
+#if !defined(_WIN32) && !defined(__OS2PM__)\r
+  /* Play safe: compare visual IDs, not Visual*'s. */\r
+  if (newcmap->visual->visualid == oldcmap->visual->visualid) {\r
+#endif\r
+    /* Visuals match!  "Copy" by reference...  */\r
+    __glutFreeColormap(oldcmap);\r
+    newcmap->refcnt++;\r
+    if (__glutCurrentWindow->renderWin == __glutCurrentWindow->win) {\r
+      __glutCurrentWindow->colormap = newcmap;\r
+      __glutCurrentWindow->cmap = newcmap->cmap;\r
+    } else {\r
+      __glutCurrentWindow->overlay->colormap = newcmap;\r
+      __glutCurrentWindow->overlay->cmap = newcmap->cmap;\r
+    }\r
+    XSetWindowColormap(__glutDisplay, __glutCurrentWindow->renderWin,\r
+      newcmap->cmap);\r
+#if !defined(_WIN32) && !defined(__OS2PM__)\r
+    __glutPutOnWorkList(__glutToplevelOf(window), GLUT_COLORMAP_WORK);\r
+bla bla bla\r
+\r
+  } else {\r
+    GLUTcolormap *copycmap;\r
+    XColor color;\r
+    int i, last;\r
+\r
+    /* Visuals different - need a distinct X colormap! */\r
+    copycmap = __glutAssociateNewColormap(dstvis);\r
+    /* Wouldn't it be nice if XCopyColormapAndFree could be\r
+       told not to free the old colormap's entries! */\r
+    last = newcmap->size;\r
+    if (last > copycmap->size) {\r
+      last = copycmap->size;\r
+    }\r
+    for (i = last - 1; i >= 0; i--) {\r
+      if (newcmap->cells[i].component[GLUT_RED] >= 0.0) {\r
+        color.pixel = i;\r
+        copycmap->cells[i].component[GLUT_RED] =\r
+          newcmap->cells[i].component[GLUT_RED];\r
+        color.red = (GLfloat) 0xffff *\r
+          newcmap->cells[i].component[GLUT_RED];\r
+        copycmap->cells[i].component[GLUT_GREEN] =\r
+          newcmap->cells[i].component[GLUT_GREEN];\r
+        color.green = (GLfloat) 0xffff *\r
+          newcmap->cells[i].component[GLUT_GREEN];\r
+        copycmap->cells[i].component[GLUT_BLUE] =\r
+          newcmap->cells[i].component[GLUT_BLUE];\r
+        color.blue = (GLfloat) 0xffff *\r
+          newcmap->cells[i].component[GLUT_BLUE];\r
+        color.flags = DoRed | DoGreen | DoBlue;\r
+        XStoreColor(__glutDisplay, copycmap->cmap, &color);\r
+      }\r
+    }\r
+  }\r
+#endif\r
+}\r
+/* ENDCENTRY */\r
+\1a
\ No newline at end of file
diff --git a/src/glut/os2/glut_cmap.cpp b/src/glut/os2/glut_cmap.cpp
new file mode 100644 (file)
index 0000000..d5b8d43
--- /dev/null
@@ -0,0 +1,399 @@
+\r
+/* Copyright (c) Mark J. Kilgard, 1994, 1996, 1997.  */\r
+\r
+/* This program is freely distributable without licensing fees\r
+   and is provided without guarantee or warrantee expressed or\r
+   implied. This program is -not- in the public domain. */\r
+\r
+#ifdef __VMS\r
+//EK#include <GL/vms_x_fix.h>\r
+#endif\r
+\r
+#include <stdlib.h>\r
+#include <string.h>\r
+#include <stdio.h>  /* SunOS multithreaded assert() needs <stdio.h>.  Lame. */\r
+#include <assert.h>\r
+#if !defined(_WIN32) && !defined(__OS2__)\r
+ #include <X11/Xlib.h>\r
+ #include <X11/Xutil.h>\r
+ #include <X11/Xatom.h>  /* for XA_RGB_DEFAULT_MAP atom */\r
+ #if defined(__vms)\r
+   #include <Xmu/StdCmap.h>  /* for XmuLookupStandardColormap */\r
+ #else\r
+   #include <X11/Xmu/StdCmap.h>  /* for XmuLookupStandardColormap */\r
+ #endif\r
+#endif\r
+\r
+/* SGI optimization introduced in IRIX 6.3 to avoid X server\r
+   round trips for interning common X atoms. */\r
+#if defined(_SGI_EXTRA_PREDEFINES) && !defined(NO_FAST_ATOMS)\r
+#include <X11/SGIFastAtom.h>\r
+#else\r
+#define XSGIFastInternAtom(dpy,string,fast_name,how) XInternAtom(dpy,string,how)\r
+#endif\r
+\r
+#include "glutint.h"\r
+#include "layerutil.h"\r
+\r
+GLUTcolormap *__glutColormapList = NULL;\r
+\r
+GLUTcolormap *\r
+__glutAssociateNewColormap(XVisualInfo * vis)\r
+{\r
+  GLUTcolormap *cmap;\r
+  int transparentPixel, i;\r
+  unsigned long pixels[255];\r
+\r
+  cmap = (GLUTcolormap *) malloc(sizeof(GLUTcolormap));\r
+  if (!cmap)\r
+    __glutFatalError("out of memory.");\r
+#if defined(_WIN32)  || defined(__OS2__)\r
+  pixels[0] = 0;        /* avoid compilation warnings on win32 */\r
+  cmap->visual = 0;\r
+  cmap->size = 256;     /* always assume 256 on Win32 */\r
+#else\r
+  cmap->visual = vis->visual;\r
+  cmap->size = vis->visual->map_entries;\r
+#endif\r
+  cmap->refcnt = 1;\r
+  cmap->cells = (GLUTcolorcell *)\r
+    malloc(sizeof(GLUTcolorcell) * cmap->size);\r
+  if (!cmap->cells)\r
+    __glutFatalError("out of memory.");\r
+  /* make all color cell entries be invalid */\r
+  for (i = cmap->size - 1; i >= 0; i--) {\r
+    cmap->cells[i].component[GLUT_RED] = -1.0;\r
+    cmap->cells[i].component[GLUT_GREEN] = -1.0;\r
+    cmap->cells[i].component[GLUT_BLUE] = -1.0;\r
+  }\r
+  transparentPixel = __glutGetTransparentPixel(__glutDisplay, vis);\r
+  if (transparentPixel == -1 || transparentPixel >= cmap->size) {\r
+\r
+    /* If there is no transparent pixel or if the transparent\r
+       pixel is outside the range of valid colormap cells (HP\r
+       can implement their overlays this smart way since their\r
+       transparent pixel is 255), we can AllocAll the colormap.\r
+       See note below.  */\r
+\r
+    cmap->cmap = XCreateColormap(__glutDisplay,\r
+      __glutRoot, cmap->visual, AllocAll);\r
+  } else {\r
+\r
+    /* On machines where zero (or some other value in the range\r
+       of 0 through map_entries-1), BadAlloc may be generated\r
+       when an AllocAll overlay colormap is allocated since the\r
+       transparent pixel precludes all the cells in the colormap\r
+       being allocated (the transparent pixel is pre-allocated).\r
+       So in this case, use XAllocColorCells to allocate\r
+       map_entries-1 pixels (that is, all but the transparent\r
+       pixel.  */\r
+\r
+#if defined(_WIN32)  || defined(__OS2__)\r
+    cmap->cmap = XCreateColormap(__glutDisplay,\r
+      __glutRoot, 0, AllocNone);\r
+#else\r
+    cmap->cmap = XCreateColormap(__glutDisplay,\r
+      __glutRoot, vis->visual, AllocNone);\r
+    XAllocColorCells(__glutDisplay, cmap->cmap, False, 0, 0,\r
+      pixels, cmap->size - 1);\r
+#endif\r
+  }\r
+  cmap->next = __glutColormapList;\r
+  __glutColormapList = cmap;\r
+  return cmap;\r
+}\r
+\r
+static GLUTcolormap *\r
+associateColormap(XVisualInfo * vis)\r
+{\r
+#if !defined(_WIN32)  && !defined(__OS2__)\r
+  GLUTcolormap *cmap = __glutColormapList;\r
+\r
+  while (cmap != NULL) {\r
+    /* Play safe: compare visual IDs, not Visual*'s. */\r
+    if (cmap->visual->visualid == vis->visual->visualid) {\r
+      /* Already have created colormap for the visual. */\r
+      cmap->refcnt++;\r
+      return cmap;\r
+    }\r
+    cmap = cmap->next;\r
+  }\r
+#endif\r
+  return __glutAssociateNewColormap(vis);\r
+}\r
+\r
+void\r
+__glutSetupColormap(XVisualInfo * vi, GLUTcolormap ** colormap, Colormap * cmap)\r
+{\r
+#if defined(_WIN32)  || defined(__OS2__)\r
+  if (vi->dwFlags & PFD_NEED_PALETTE || vi->iPixelType == PFD_TYPE_COLORINDEX) {\r
+    *colormap = associateColormap(vi);\r
+    *cmap = (*colormap)->cmap;\r
+  } else {\r
+    *colormap = NULL;\r
+    *cmap = 0;\r
+  }\r
+#else\r
+  Status status;\r
+  XStandardColormap *standardCmaps;\r
+  int i, numCmaps;\r
+  static Atom hpColorRecoveryAtom = -1;\r
+  int isRGB, visualClass, rc;\r
+\r
+#if defined(__cplusplus) || defined(c_plusplus)\r
+  visualClass = vi->c_class;\r
+#else\r
+  visualClass = vi->class;\r
+#endif\r
+  switch (visualClass) {\r
+  case PseudoColor:\r
+    /* Mesa might return a PseudoColor visual for RGB mode. */\r
+    rc = glXGetConfig(__glutDisplay, vi, GLX_RGBA, &isRGB);\r
+    if (rc == 0 && isRGB) {\r
+      /* Must be Mesa. */\r
+      *colormap = NULL;\r
+      if (MaxCmapsOfScreen(DefaultScreenOfDisplay(__glutDisplay)) == 1\r
+        && vi->visual == DefaultVisual(__glutDisplay, __glutScreen)) {\r
+        char *privateCmap = getenv("MESA_PRIVATE_CMAP");\r
+\r
+        if (privateCmap) {\r
+          /* User doesn't want to share colormaps. */\r
+          *cmap = XCreateColormap(__glutDisplay, __glutRoot,\r
+            vi->visual, AllocNone);\r
+        } else {\r
+          /* Share the root colormap. */\r
+          *cmap = DefaultColormap(__glutDisplay, __glutScreen);\r
+        }\r
+      } else {\r
+        /* Get our own PseudoColor colormap. */\r
+        *cmap = XCreateColormap(__glutDisplay, __glutRoot,\r
+          vi->visual, AllocNone);\r
+      }\r
+    } else {\r
+      /* CI mode, real GLX never returns a PseudoColor visual\r
+         for RGB mode. */\r
+      *colormap = associateColormap(vi);\r
+      *cmap = (*colormap)->cmap;\r
+    }\r
+    break;\r
+  case TrueColor:\r
+  case DirectColor:\r
+    *colormap = NULL;   /* NULL if RGBA */\r
+\r
+    /* Hewlett-Packard supports a feature called "HP Color\r
+       Recovery". Mesa has code to use HP Color Recovery.  For\r
+       Mesa to use this feature, the atom\r
+       _HP_RGB_SMOOTH_MAP_LIST must be defined on the root\r
+       window AND the colormap obtainable by XGetRGBColormaps\r
+       for that atom must be set on the window.  If that\r
+       colormap is not set, the output will look stripy. */\r
+\r
+    if (hpColorRecoveryAtom == -1) {\r
+      char *xvendor;\r
+\r
+#define VENDOR_HP "Hewlett-Packard"\r
+\r
+      /* Only makes sense to make XInternAtom round-trip if we\r
+         know that we are connected to an HP X server. */\r
+      xvendor = ServerVendor(__glutDisplay);\r
+      if (!strncmp(xvendor, VENDOR_HP, sizeof(VENDOR_HP) - 1)) {\r
+        hpColorRecoveryAtom = XInternAtom(__glutDisplay, "_HP_RGB_SMOOTH_MAP_LIST", True);\r
+      } else {\r
+        hpColorRecoveryAtom = None;\r
+      }\r
+    }\r
+    if (hpColorRecoveryAtom != None) {\r
+      status = XGetRGBColormaps(__glutDisplay, __glutRoot,\r
+        &standardCmaps, &numCmaps, hpColorRecoveryAtom);\r
+      if (status == 1) {\r
+        for (i = 0; i < numCmaps; i++) {\r
+          if (standardCmaps[i].visualid == vi->visualid) {\r
+            *cmap = standardCmaps[i].colormap;\r
+            XFree(standardCmaps);\r
+            return;\r
+          }\r
+        }\r
+        XFree(standardCmaps);\r
+      }\r
+    }\r
+#ifndef SOLARIS_2_4_BUG\r
+    /* Solaris 2.4 and 2.5 have a bug in their\r
+       XmuLookupStandardColormap implementations.  Please\r
+       compile your Solaris 2.4 or 2.5 version of GLUT with\r
+       -DSOLARIS_2_4_BUG to work around this bug. The symptom\r
+       of the bug is that programs will get a BadMatch error\r
+       from X_CreateWindow when creating a GLUT window because\r
+       Solaris 2.4 and 2.5 create a  corrupted RGB_DEFAULT_MAP\r
+       property.  Note that this workaround prevents Colormap\r
+       sharing between applications, perhaps leading\r
+       unnecessary colormap installations or colormap flashing.\r
+       Sun fixed this bug in Solaris 2.6. */\r
+    status = XmuLookupStandardColormap(__glutDisplay,\r
+      vi->screen, vi->visualid, vi->depth, XA_RGB_DEFAULT_MAP,\r
+      /* replace */ False, /* retain */ True);\r
+    if (status == 1) {\r
+      status = XGetRGBColormaps(__glutDisplay, __glutRoot,\r
+        &standardCmaps, &numCmaps, XA_RGB_DEFAULT_MAP);\r
+      if (status == 1) {\r
+        for (i = 0; i < numCmaps; i++) {\r
+          if (standardCmaps[i].visualid == vi->visualid) {\r
+            *cmap = standardCmaps[i].colormap;\r
+            XFree(standardCmaps);\r
+            return;\r
+          }\r
+        }\r
+        XFree(standardCmaps);\r
+      }\r
+    }\r
+#endif\r
+    /* If no standard colormap but TrueColor, just make a\r
+       private one. */\r
+    /* XXX Should do a better job of internal sharing for\r
+       privately allocated TrueColor colormaps. */\r
+    /* XXX DirectColor probably needs ramps hand initialized! */\r
+    *cmap = XCreateColormap(__glutDisplay, __glutRoot,\r
+      vi->visual, AllocNone);\r
+    break;\r
+  case StaticColor:\r
+  case StaticGray:\r
+  case GrayScale:\r
+    /* Mesa supports these visuals */\r
+    *colormap = NULL;\r
+    *cmap = XCreateColormap(__glutDisplay, __glutRoot,\r
+      vi->visual, AllocNone);\r
+    break;\r
+  default:\r
+    __glutFatalError(\r
+      "could not allocate colormap for visual type: %d.",\r
+      visualClass);\r
+  }\r
+  return;\r
+#endif\r
+}\r
+\r
+#if !defined(_WIN32)  && !defined(__OS2__)\r
+static int\r
+findColormaps(GLUTwindow * window,\r
+  Window * winlist, Colormap * cmaplist, int num, int max)\r
+{\r
+  GLUTwindow *child;\r
+  int i;\r
+\r
+  /* Do not allow more entries that maximum number of\r
+     colormaps! */\r
+  if (num >= max)\r
+    return num;\r
+  /* Is cmap for this window already on the list? */\r
+  for (i = 0; i < num; i++) {\r
+    if (cmaplist[i] == window->cmap)\r
+      goto normalColormapAlreadyListed;\r
+  }\r
+  /* Not found on the list; add colormap and window. */\r
+  winlist[num] = window->win;\r
+  cmaplist[num] = window->cmap;\r
+  num++;\r
+\r
+normalColormapAlreadyListed:\r
+\r
+  /* Repeat above but for the overlay colormap if there one. */\r
+  if (window->overlay) {\r
+    if (num >= max)\r
+      return num;\r
+    for (i = 0; i < num; i++) {\r
+      if (cmaplist[i] == window->overlay->cmap)\r
+        goto overlayColormapAlreadyListed;\r
+    }\r
+    winlist[num] = window->overlay->win;\r
+    cmaplist[num] = window->overlay->cmap;\r
+    num++;\r
+  }\r
+overlayColormapAlreadyListed:\r
+\r
+  /* Recursively search children. */\r
+  child = window->children;\r
+  while (child) {\r
+    num = findColormaps(child, winlist, cmaplist, num, max);\r
+    child = child->siblings;\r
+  }\r
+  return num;\r
+}\r
+\r
+void\r
+__glutEstablishColormapsProperty(GLUTwindow * window)\r
+{\r
+  /* this routine is strictly X.  Win32 doesn't need to do\r
+     anything of this sort (but has to do other wacky stuff\r
+     later). */\r
+  static Atom wmColormapWindows = None;\r
+  Window *winlist;\r
+  Colormap *cmaplist;\r
+  Status status;\r
+  int maxcmaps, num;\r
+\r
+  assert(!window->parent);\r
+  maxcmaps = MaxCmapsOfScreen(ScreenOfDisplay(__glutDisplay,\r
+      __glutScreen));\r
+  /* For portability reasons we don't use alloca for winlist\r
+     and cmaplist, but we could. */\r
+  winlist = (Window *) malloc(maxcmaps * sizeof(Window));\r
+  cmaplist = (Colormap *) malloc(maxcmaps * sizeof(Colormap));\r
+  num = findColormaps(window, winlist, cmaplist, 0, maxcmaps);\r
+  if (num < 2) {\r
+    /* Property no longer needed; remove it. */\r
+    wmColormapWindows = XSGIFastInternAtom(__glutDisplay,\r
+      "WM_COLORMAP_WINDOWS", SGI_XA_WM_COLORMAP_WINDOWS, False);\r
+    if (wmColormapWindows == None) {\r
+      __glutWarning("Could not intern X atom for WM_COLORMAP_WINDOWS.");\r
+      return;\r
+    }\r
+    XDeleteProperty(__glutDisplay, window->win, wmColormapWindows);\r
+  } else {\r
+    status = XSetWMColormapWindows(__glutDisplay, window->win,\r
+      winlist, num);\r
+    /* XSetWMColormapWindows should always work unless the\r
+       WM_COLORMAP_WINDOWS property cannot be intern'ed.  We\r
+       check to be safe. */\r
+    if (status == False)\r
+      __glutFatalError("XSetWMColormapWindows returned False.");\r
+  }\r
+  /* For portability reasons we don't use alloca for winlist\r
+     and cmaplist, but we could. */\r
+  free(winlist);\r
+  free(cmaplist);\r
+}\r
+\r
+GLUTwindow *\r
+__glutToplevelOf(GLUTwindow * window)\r
+{\r
+  while (window->parent) {\r
+    window = window->parent;\r
+  }\r
+  return window;\r
+}\r
+#endif\r
+\r
+void\r
+__glutFreeColormap(GLUTcolormap * cmap)\r
+{\r
+  GLUTcolormap *cur, **prev;\r
+\r
+  cmap->refcnt--;\r
+  if (cmap->refcnt == 0) {\r
+    /* remove from colormap list */\r
+    cur = __glutColormapList;\r
+    prev = &__glutColormapList;\r
+    while (cur) {\r
+      if (cur == cmap) {\r
+        *prev = cmap->next;\r
+        break;\r
+      }\r
+      prev = &(cur->next);\r
+      cur = cur->next;\r
+    }\r
+    /* actually free colormap */\r
+    XFreeColormap(__glutDisplay, cmap->cmap);\r
+    free(cmap->cells);\r
+    free(cmap);\r
+  }\r
+}\r
+\r
diff --git a/src/glut/os2/glut_cursor.cpp b/src/glut/os2/glut_cursor.cpp
new file mode 100644 (file)
index 0000000..9784e9b
--- /dev/null
@@ -0,0 +1,210 @@
+\r
+/* Copyright (c) Mark J. Kilgard, 1995, 1998. */\r
+\r
+/* This program is freely distributable without licensing fees\r
+   and is provided without guarantee or warrantee expressed or\r
+   implied. This program is -not- in the public domain. */\r
+\r
+#include "glutint.h"\r
+\r
+#if !defined(_WIN32) && !defined(__OS2PM__)\r
+#include <X11/Xatom.h>  /* For XA_CURSOR */\r
+#include <X11/cursorfont.h>\r
+#endif\r
+\r
+typedef struct _CursorTable {\r
+#if defined(_WIN32)\r
+  char* glyph;\r
+#else\r
+  int glyph;\r
+#endif\r
+  Cursor cursor;\r
+} CursorTable;\r
+/* *INDENT-OFF* */\r
+\r
+static CursorTable cursorTable[] = {\r
+  {XC_arrow, None},              /* GLUT_CURSOR_RIGHT_ARROW */\r
+  {XC_top_left_arrow, None},     /* GLUT_CURSOR_LEFT_ARROW */\r
+  {XC_hand1, None},              /* GLUT_CURSOR_INFO */\r
+  {XC_pirate, None},             /* GLUT_CURSOR_DESTROY */\r
+  {XC_question_arrow, None},     /* GLUT_CURSOR_HELP */\r
+  {XC_exchange, None},           /* GLUT_CURSOR_CYCLE */\r
+  {XC_spraycan, None},           /* GLUT_CURSOR_SPRAY */\r
+  {XC_watch, None},              /* GLUT_CURSOR_WAIT */\r
+  {XC_xterm, None},              /* GLUT_CURSOR_TEXT */\r
+  {XC_crosshair, None},                  /* GLUT_CURSOR_CROSSHAIR */\r
+  {XC_sb_v_double_arrow, None},          /* GLUT_CURSOR_UP_DOWN */\r
+  {XC_sb_h_double_arrow, None},          /* GLUT_CURSOR_LEFT_RIGHT */\r
+  {XC_top_side, None},           /* GLUT_CURSOR_TOP_SIDE */\r
+  {XC_bottom_side, None},        /* GLUT_CURSOR_BOTTOM_SIDE */\r
+  {XC_left_side, None},                  /* GLUT_CURSOR_LEFT_SIDE */\r
+  {XC_right_side, None},         /* GLUT_CURSOR_RIGHT_SIDE */\r
+  {XC_top_left_corner, None},    /* GLUT_CURSOR_TOP_LEFT_CORNER */\r
+  {XC_top_right_corner, None},   /* GLUT_CURSOR_TOP_RIGHT_CORNER */\r
+  {XC_bottom_right_corner, None}, /* GLUT_CURSOR_BOTTOM_RIGHT_CORNER */\r
+  {XC_bottom_left_corner, None},  /* GLUT_CURSOR_BOTTOM_LEFT_CORNER */\r
+};\r
+/* *INDENT-ON* */\r
+\r
+#if !defined(_WIN32) && !defined(__OS2PM__)\r
+static Cursor blankCursor = None;\r
+static Cursor fullCrosshairCusor = None;\r
+\r
+/* SGI X server's support a special property called the\r
+   _SGI_CROSSHAIR_CURSOR that when installed as a window's\r
+   cursor, becomes a full screen crosshair cursor.  SGI\r
+   has special cursor generation hardware for this case. */\r
+static Cursor\r
+getFullCrosshairCursor(void)\r
+{\r
+  Cursor cursor;\r
+  Atom crosshairAtom, actualType;\r
+  int rc, actualFormat;\r
+  unsigned long n, left;\r
+  unsigned long *value;\r
+\r
+  if (fullCrosshairCusor == None) {\r
+    crosshairAtom = XInternAtom(__glutDisplay,\r
+      "_SGI_CROSSHAIR_CURSOR", True);\r
+    if (crosshairAtom != None) {\r
+      value = 0;        /* Make compiler happy. */\r
+      rc = XGetWindowProperty(__glutDisplay, __glutRoot,\r
+        crosshairAtom, 0, 1, False, XA_CURSOR, &actualType,\r
+        &actualFormat, &n, &left, (unsigned char **) &value);\r
+      if (rc == Success && actualFormat == 32 && n >= 1) {\r
+        cursor = value[0];\r
+        XFree(value);\r
+        return cursor;\r
+      }\r
+    }\r
+  }\r
+  return XCreateFontCursor(__glutDisplay, XC_crosshair);\r
+}\r
+\r
+/* X11 forces you to create a blank cursor if you want\r
+   to disable the cursor. */\r
+static Cursor\r
+makeBlankCursor(void)\r
+{\r
+  static char data[1] =\r
+  {0};\r
+  Cursor cursor;\r
+  Pixmap blank;\r
+  XColor dummy;\r
+\r
+  blank = XCreateBitmapFromData(__glutDisplay, __glutRoot,\r
+    data, 1, 1);\r
+  if (blank == None)\r
+    __glutFatalError("out of memory.");\r
+  cursor = XCreatePixmapCursor(__glutDisplay, blank, blank,\r
+    &dummy, &dummy, 0, 0);\r
+  XFreePixmap(__glutDisplay, blank);\r
+\r
+  return cursor;\r
+}\r
+#endif /* !_WIN32 && !__OS2PM__*/\r
+\r
+/* Win32 and X11 use this same function to accomplish\r
+   fairly different tasks.  X11 lets you just define the\r
+   cursor for a window and the window system takes care\r
+   of making sure that the window's cursor is installed\r
+   when the mouse is in the window.  Win32 requires the\r
+   application to handle a WM_SETCURSOR message to install\r
+   the right cursor when windows are entered.  Think of\r
+   the Win32 __glutSetCursor (called from __glutWindowProc)\r
+   as "install cursor".  Think of the X11 __glutSetCursor\r
+   (called from glutSetCursor) as "define cursor". */\r
+void\r
+__glutSetCursor(GLUTwindow *window)\r
+{\r
+  int cursor = window->cursor;\r
+  Cursor xcursor = 0;\r
+\r
+  if (cursor >= 0 &&\r
+    cursor < sizeof(cursorTable) / sizeof(cursorTable[0])) {\r
+    if (cursorTable[cursor].cursor == None) {\r
+      cursorTable[cursor].cursor = XCreateFontCursor(__glutDisplay,\r
+        cursorTable[cursor].glyph);\r
+    }\r
+    xcursor = cursorTable[cursor].cursor;\r
+  } else {\r
+    /* Special cases. */\r
+    switch (cursor) {\r
+    case GLUT_CURSOR_INHERIT:\r
+#if defined(_WIN32)\r
+      while (window->parent) {\r
+        window = window->parent;\r
+        if (window->cursor != GLUT_CURSOR_INHERIT) {\r
+          __glutSetCursor(window);\r
+          return;\r
+        }\r
+      }\r
+      /* XXX Default to an arrow cursor.  Is this\r
+         right or should we be letting the default\r
+         window proc be installing some system cursor? */\r
+      xcursor = cursorTable[0].cursor;\r
+      if (xcursor == NULL) {\r
+        xcursor =\r
+          cursorTable[0].cursor =\r
+          LoadCursor(NULL, cursorTable[0].glyph);\r
+      }\r
+\r
+#elif defined(__OS2PM__)\r
+//todo\r
+      xcursor = None;\r
+\r
+#else\r
+      xcursor = None;\r
+#endif\r
+      break;\r
+    case GLUT_CURSOR_NONE:\r
+#if defined(_WIN32) || defined(__OS2PM__)\r
+      xcursor = NULL;\r
+#else\r
+      if (blankCursor == None) {\r
+        blankCursor = makeBlankCursor();\r
+      }\r
+      xcursor = blankCursor;\r
+#endif\r
+      break;\r
+    case GLUT_CURSOR_FULL_CROSSHAIR:\r
+#if defined(_WIN32)\r
+      xcursor = (HICON) IDC_CROSS;\r
+#elif defined(__OS2PM__)\r
+//todo\r
+#else\r
+      if (fullCrosshairCusor == None) {\r
+        fullCrosshairCusor = getFullCrosshairCursor();\r
+      }\r
+      xcursor = fullCrosshairCusor;\r
+#endif\r
+      break;\r
+    }\r
+  }\r
+  XDefineCursor(__glutDisplay,\r
+    window->win, xcursor);\r
+  XFlush(__glutDisplay);\r
+}\r
+\r
+/* CENTRY */\r
+void GLUTAPIENTRY\r
+glutSetCursor(int cursor)\r
+{\r
+#ifdef _WIN32\r
+  POINT point;\r
+\r
+  __glutCurrentWindow->cursor = cursor;\r
+  /* Are we in the window right now?  If so,\r
+     install the cursor. */\r
+  GetCursorPos(&point);\r
+  if (__glutCurrentWindow->win == WindowFromPoint(point)) {\r
+    __glutSetCursor(__glutCurrentWindow);\r
+  }\r
+#elif defined(__OS2PM__)\r
+//todo\r
+#else\r
+  __glutCurrentWindow->cursor = cursor;\r
+  __glutSetCursor(__glutCurrentWindow);\r
+#endif\r
+}\r
+/* ENDCENTRY */\r
diff --git a/src/glut/os2/glut_event.cpp b/src/glut/os2/glut_event.cpp
new file mode 100644 (file)
index 0000000..c556ef2
--- /dev/null
@@ -0,0 +1,1399 @@
+/* glut_event.c */\r
+/* Copyright (c) Mark J. Kilgard, 1994, 1995, 1996, 1997, 1998. */\r
+\r
+/* This program is freely distributable without licensing fees\r
+   and is provided without guarantee or warrantee expressed or\r
+   implied. This program is -not- in the public domain. */\r
+\r
+#ifdef __VMS\r
+#include <GL/vms_x_fix.h>\r
+#endif\r
+\r
+#include <stdlib.h>\r
+#include <stdio.h>\r
+#include <errno.h>\r
+#include <assert.h>\r
+#include <string.h>  /* Some FD_ZERO macros use memset without\r
+                        prototyping memset. */\r
+\r
+/* Much of the following #ifdef logic to include the proper\r
+   prototypes for the select system call is based on logic\r
+   from the X11R6.3 version of <X11/Xpoll.h>. */\r
+\r
+#if !defined(_WIN32)\r
+# ifdef __sgi\r
+#  include <bstring.h>    /* prototype for bzero used by FD_ZERO */\r
+# endif\r
+# if (defined(SVR4) || defined(CRAY) || defined(AIXV3)) && !defined(FD_SETSIZE)\r
+#  include <sys/select.h> /* select system call interface */\r
+#  ifdef luna\r
+#   include <sysent.h>\r
+#  endif\r
+# endif\r
+  /* AIX 4.2 fubar-ed <sys/select.h>, so go to heroic measures to get it */\r
+# if defined(AIXV4) && !defined(NFDBITS)\r
+#  include <sys/select.h>\r
+# endif\r
+#endif /* !_WIN32 */\r
+\r
+#include <sys/types.h>\r
+\r
+#if defined(__OS2__)\r
+//??? Â­Â Ã¤Â¨Â£Â  ??     #   include <sys/time.h>\r
+#elif !defined(_WIN32)\r
+# if defined(__vms) && ( __VMS_VER < 70000000 )\r
+#  include <sys/time.h>\r
+# else\r
+#  ifndef __vms\r
+#   include <sys/time.h>\r
+#  endif\r
+# endif\r
+# include <unistd.h>\r
+# include <X11/Xlib.h>\r
+# include <X11/keysym.h>\r
+#else\r
+# ifdef __CYGWIN32__\r
+#  include <sys/time.h>\r
+# else\r
+#  include <sys/timeb.h>\r
+# endif\r
+# ifdef __hpux\r
+   /* XXX Bert Gijsbers <bert@mc.bio.uva.nl> reports that HP-UX\r
+      needs different keysyms for the End, Insert, and Delete keys\r
+      to work on an HP 715.  It would be better if HP generated\r
+      standard keysyms for standard keys. */\r
+#  include <X11/HPkeysym.h>\r
+# endif\r
+#endif /* !_WIN32 */\r
+\r
+#include "glutint.h"\r
+\r
+#if defined(__vms) && ( __VMS_VER < 70000000 )\r
+#include <ssdef.h>\r
+#include <psldef.h>\r
+extern int SYS$CLREF(int efn);\r
+extern int SYS$SETIMR(unsigned int efn, struct timeval6 *timeout, void *ast,\r
+  unsigned int request_id, unsigned int flags);\r
+extern int SYS$WFLOR(unsigned int efn, unsigned int mask);\r
+extern int SYS$CANTIM(unsigned int request_id, unsigned int mode);\r
+#endif /* __vms, VMs 6.2 or earlier */\r
+\r
+static GLUTtimer *freeTimerList = NULL;\r
+\r
+GLUTidleCB __glutIdleFunc = NULL;\r
+GLUTtimer *__glutTimerList = NULL;\r
+#ifdef SUPPORT_FORTRAN\r
+GLUTtimer *__glutNewTimer;\r
+#endif\r
+GLUTwindow *__glutWindowWorkList = NULL;\r
+GLUTmenu *__glutMappedMenu;\r
+GLUTmenu *__glutCurrentMenu = NULL;\r
+\r
+void (*__glutUpdateInputDeviceMaskFunc) (GLUTwindow *);\r
+#if !defined(_WIN32) && !defined(__OS2__)\r
+void (*__glutMenuItemEnterOrLeave)(GLUTmenuItem * item, int num, int type) = NULL;\r
+void (*__glutFinishMenu)(Window win, int x, int y);\r
+void (*__glutPaintMenu)(GLUTmenu * menu);\r
+void (*__glutStartMenu)(GLUTmenu * menu, GLUTwindow * window, int x, int y, int x_win, int y_win);\r
+GLUTmenu * (*__glutGetMenuByNum)(int menunum);\r
+GLUTmenuItem * (*__glutGetMenuItem)(GLUTmenu * menu, Window win, int *which);\r
+GLUTmenu * (*__glutGetMenu)(Window win);\r
+#endif\r
+\r
+Atom __glutMotifHints = None;\r
+/* Modifier mask of ~0 implies not in core input callback. */\r
+unsigned int __glutModifierMask = (unsigned int) ~0;\r
+int __glutWindowDamaged = 0;\r
+\r
+void GLUTAPIENTRY\r
+glutIdleFunc(GLUTidleCB idleFunc)\r
+{\r
+  __glutIdleFunc = idleFunc;\r
+}\r
+\r
+void GLUTAPIENTRY\r
+glutTimerFunc(unsigned int interval, GLUTtimerCB timerFunc, int value)\r
+{\r
+  GLUTtimer *timer, *other;\r
+  GLUTtimer **prevptr;\r
+#ifdef OLD_VMS\r
+   struct timeval6 now;\r
+#else\r
+   struct timeval now;\r
+#endif\r
+\r
+  if (!timerFunc)\r
+    return;\r
+\r
+  if (freeTimerList) {\r
+    timer = freeTimerList;\r
+    freeTimerList = timer->next;\r
+  } else {\r
+    timer = (GLUTtimer *) malloc(sizeof(GLUTtimer));\r
+    if (!timer)\r
+      __glutFatalError("out of memory.");\r
+  }\r
+\r
+  timer->func = timerFunc;\r
+#if defined(__vms) && ( __VMS_VER < 70000000 )\r
+  /* VMS time is expressed in units of 100 ns */\r
+  timer->timeout.val = interval * TICKS_PER_MILLISECOND;\r
+#else\r
+  timer->timeout.tv_sec = (int) interval / 1000;\r
+  timer->timeout.tv_usec = (int) (interval % 1000) * 1000;\r
+#endif\r
+  timer->value = value;\r
+  timer->next = NULL;\r
+  GETTIMEOFDAY(&now);\r
+  ADD_TIME(timer->timeout, timer->timeout, now);\r
+  prevptr = &__glutTimerList;\r
+  other = *prevptr;\r
+  while (other && IS_AFTER(other->timeout, timer->timeout)) {\r
+    prevptr = &other->next;\r
+    other = *prevptr;\r
+  }\r
+  timer->next = other;\r
+#ifdef SUPPORT_FORTRAN\r
+  __glutNewTimer = timer;  /* for Fortran binding! */\r
+#endif\r
+  *prevptr = timer;\r
+}\r
+\r
+void\r
+handleTimeouts(void)\r
+{\r
+#ifdef OLD_VMS\r
+   struct timeval6 now;\r
+#else\r
+   struct timeval now;\r
+#endif\r
+   GLUTtimer *timer;\r
+\r
+  /* Assumption is that __glutTimerList is already determined\r
+     to be non-NULL. */\r
+  GETTIMEOFDAY(&now);\r
+  while (IS_AT_OR_AFTER(__glutTimerList->timeout, now)) {\r
+    timer = __glutTimerList;\r
+    timer->func(timer->value);\r
+    __glutTimerList = timer->next;\r
+    timer->next = freeTimerList;\r
+    freeTimerList = timer;\r
+    if (!__glutTimerList)\r
+      break;\r
+  }\r
+}\r
+\r
+void\r
+__glutPutOnWorkList(GLUTwindow * window, int workMask)\r
+{\r
+  if (window->workMask) {\r
+    /* Already on list; just OR in new workMask. */\r
+    window->workMask |= workMask;\r
+  } else {\r
+    /* Update work mask and add to window work list. */\r
+    window->workMask = workMask;\r
+    /* Assert that if the window does not have a\r
+       workMask already, the window should definitely\r
+       not be the head of the work list. */\r
+    assert(window != __glutWindowWorkList);\r
+    window->prevWorkWin = __glutWindowWorkList;\r
+    __glutWindowWorkList = window;\r
+  }\r
+}\r
+\r
+void\r
+__glutPostRedisplay(GLUTwindow * window, int layerMask)\r
+{\r
+  int shown = (layerMask & (GLUT_REDISPLAY_WORK | GLUT_REPAIR_WORK)) ?\r
+    window->shownState : window->overlay->shownState;\r
+\r
+  /* Post a redisplay if the window is visible (or the\r
+     visibility of the window is unknown, ie. window->visState\r
+     == -1) _and_ the layer is known to be shown. */\r
+  if (window->visState != GLUT_HIDDEN\r
+    && window->visState != GLUT_FULLY_COVERED && shown) {\r
+    __glutPutOnWorkList(window, layerMask);\r
+  }\r
+}\r
+\r
+/* CENTRY */\r
+void GLUTAPIENTRY\r
+glutPostRedisplay(void)\r
+{\r
+  __glutPostRedisplay(__glutCurrentWindow, GLUT_REDISPLAY_WORK);\r
+}\r
+\r
+/* The advantage of this routine is that it saves the cost of a\r
+   glutSetWindow call (entailing an expensive OpenGL context switch),\r
+   particularly useful when multiple windows need redisplays posted at\r
+   the same times.  See also glutPostWindowOverlayRedisplay. */\r
+void GLUTAPIENTRY\r
+glutPostWindowRedisplay(int win)\r
+{\r
+  __glutPostRedisplay(__glutWindowList[win - 1], GLUT_REDISPLAY_WORK);\r
+}\r
+\r
+/* ENDCENTRY */\r
+static GLUTeventParser *eventParserList = NULL;\r
+\r
+/* __glutRegisterEventParser allows another module to register\r
+   to intercept X events types not otherwise acted on by the\r
+   GLUT processEventsAndTimeouts routine.  The X Input\r
+   extension support code uses an event parser for handling X\r
+   Input extension events.  */\r
+\r
+void\r
+__glutRegisterEventParser(GLUTeventParser * parser)\r
+{\r
+  parser->next = eventParserList;\r
+  eventParserList = parser;\r
+}\r
+\r
+static void\r
+markWindowHidden(GLUTwindow * window)\r
+{\r
+  if (GLUT_HIDDEN != window->visState) {\r
+    GLUTwindow *child;\r
+\r
+    if (window->windowStatus) {\r
+      window->visState = GLUT_HIDDEN;\r
+      __glutSetWindow(window);\r
+      window->windowStatus(GLUT_HIDDEN);\r
+    }\r
+    /* An unmap is only reported on a single window; its\r
+       descendents need to know they are no longer visible. */\r
+    child = window->children;\r
+    while (child) {\r
+      markWindowHidden(child);\r
+      child = child->siblings;\r
+    }\r
+  }\r
+}\r
+\r
+#if !defined(_WIN32) && !defined(__OS2__)\r
+\r
+static void\r
+purgeStaleWindow(Window win)\r
+{\r
+  GLUTstale **pEntry = &__glutStaleWindowList;\r
+  GLUTstale *entry = __glutStaleWindowList;\r
+\r
+  /* Tranverse singly-linked stale window list look for the\r
+     window ID. */\r
+  while (entry) {\r
+    if (entry->win == win) {\r
+      /* Found it; delete it. */\r
+      *pEntry = entry->next;\r
+      free(entry);\r
+      return;\r
+    } else {\r
+      pEntry = &entry->next;\r
+      entry = *pEntry;\r
+    }\r
+  }\r
+}\r
+\r
+/* Unlike XNextEvent, if a signal arrives,\r
+   interruptibleXNextEvent will return (with a zero return\r
+   value).  This helps GLUT drop out of XNextEvent if a signal\r
+   is delivered.  The intent is so that a GLUT program can call\r
+   glutIdleFunc in a signal handler to register an idle func\r
+   and then immediately get dropped into the idle func (after\r
+   returning from the signal handler).  The idea is to make\r
+   GLUT's main loop reliably interruptible by signals. */\r
+static int\r
+interruptibleXNextEvent(Display * dpy, XEvent * event)\r
+{\r
+  fd_set fds;\r
+  int rc;\r
+\r
+  /* Flush X protocol since XPending does not do this\r
+     implicitly. */\r
+  XFlush(__glutDisplay);\r
+  for (;;) {\r
+    if (XPending(__glutDisplay)) {\r
+      XNextEvent(dpy, event);\r
+      return 1;\r
+    }\r
+#ifndef VMS\r
+    /* the combination ConectionNumber-select is buggy on VMS. Sometimes it\r
+     * fails. This part of the code hangs the program on VMS7.2. But even\r
+     * without it the program seems to run correctly.\r
+     * Note that this is a bug in the VMS/DECWindows run-time-libraries.\r
+     * Compaq engeneering does not want or is not able to make a fix.\r
+     * (last sentence is a quotation from Compaq when I reported the\r
+     * problem January 2000) */\r
+    FD_ZERO(&fds);\r
+    FD_SET(__glutConnectionFD, &fds);\r
+    rc = select(__glutConnectionFD + 1, &fds, NULL, NULL, NULL);\r
+    if (rc < 0) {\r
+      if (errno == EINTR) {\r
+        return 0;\r
+      } else {\r
+        __glutFatalError("select error.");\r
+      }\r
+    }\r
+#endif\r
+  }\r
+}\r
+\r
+#endif\r
+\r
+static void\r
+processEventsAndTimeouts(void)\r
+{\r
+  do {\r
+#if defined(__OS2__)\r
+   QMSG  qmsg;   /* message from message queue     */\r
+   extern HAB   hab;      /* PM anchor block handle         */\r
+\r
+   if(! WinGetMsg( hab, &qmsg, 0UL, 0UL, 0UL ) )\r
+                 exit(0);\r
+    WinDispatchMsg( hab,     /* PM anchor block handle  */\r
+                    &qmsg ); /* pointer to message      */\r
+\r
+#elif defined(_WIN32)\r
+    MSG event;\r
+\r
+    if(!GetMessage(&event, NULL, 0, 0))        /* bail if no more messages */\r
+      exit(0);\r
+    TranslateMessage(&event);          /* translate virtual-key messages */\r
+    DispatchMessage(&event);           /* call the window proc */\r
+    /* see win32_event.c for event (message) processing procedures */\r
+#else\r
+    static int mappedMenuButton;\r
+    GLUTeventParser *parser;\r
+    XEvent event, ahead;\r
+    GLUTwindow *window;\r
+    GLUTkeyboardCB keyboard;\r
+    GLUTspecialCB special;\r
+    int gotEvent, width, height;\r
+\r
+    gotEvent = interruptibleXNextEvent(__glutDisplay, &event);\r
+    if (gotEvent) {\r
+      switch (event.type) {\r
+      case MappingNotify:\r
+        XRefreshKeyboardMapping((XMappingEvent *) & event);\r
+        break;\r
+      case ConfigureNotify:\r
+        window = __glutGetWindow(event.xconfigure.window);\r
+        if (window) {\r
+          if (window->win != event.xconfigure.window) {\r
+            /* Ignore ConfigureNotify sent to the overlay\r
+               planes. GLUT could get here because overlays\r
+               select for StructureNotify events to receive\r
+               DestroyNotify. */\r
+            break;\r
+          }\r
+          width = event.xconfigure.width;\r
+          height = event.xconfigure.height;\r
+          if (width != window->width || height != window->height) {\r
+            if (window->overlay) {\r
+              XResizeWindow(__glutDisplay, window->overlay->win, width, height);\r
+            }\r
+            window->width = width;\r
+            window->height = height;\r
+            __glutSetWindow(window);\r
+            /* Do not execute OpenGL out of sequence with\r
+               respect to the XResizeWindow request! */\r
+            glXWaitX();\r
+            window->reshape(width, height);\r
+            window->forceReshape = False;\r
+            /* A reshape should be considered like posting a\r
+               repair; this is necessary for the "Mesa\r
+               glXSwapBuffers to repair damage" hack to operate\r
+               correctly.  Without it, there's not an initial\r
+               back buffer render from which to blit from when\r
+               damage happens to the window. */\r
+            __glutPostRedisplay(window, GLUT_REPAIR_WORK);\r
+          }\r
+        }\r
+        break;\r
+      case Expose:\r
+        /* compress expose events */\r
+        while (XEventsQueued(__glutDisplay, QueuedAfterReading)\r
+          > 0) {\r
+          XPeekEvent(__glutDisplay, &ahead);\r
+          if (ahead.type != Expose ||\r
+            ahead.xexpose.window != event.xexpose.window) {\r
+            break;\r
+          }\r
+          XNextEvent(__glutDisplay, &event);\r
+        }\r
+        if (event.xexpose.count == 0) {\r
+          GLUTmenu *menu;\r
+\r
+          if (__glutMappedMenu &&\r
+            (menu = __glutGetMenu(event.xexpose.window))) {\r
+            __glutPaintMenu(menu);\r
+          } else {\r
+            window = __glutGetWindow(event.xexpose.window);\r
+            if (window) {\r
+              if (window->win == event.xexpose.window) {\r
+                __glutPostRedisplay(window, GLUT_REPAIR_WORK);\r
+              } else if (window->overlay && window->overlay->win == event.xexpose.window) {\r
+                __glutPostRedisplay(window, GLUT_OVERLAY_REPAIR_WORK);\r
+              }\r
+            }\r
+          }\r
+        } else {\r
+          /* there are more exposes to read; wait to redisplay */\r
+        }\r
+        break;\r
+      case ButtonPress:\r
+      case ButtonRelease:\r
+        if (__glutMappedMenu && event.type == ButtonRelease\r
+          && mappedMenuButton == event.xbutton.button) {\r
+          /* Menu is currently popped up and its button is\r
+             released. */\r
+          __glutFinishMenu(event.xbutton.window, event.xbutton.x, event.xbutton.y);\r
+        } else {\r
+          window = __glutGetWindow(event.xbutton.window);\r
+          if (window) {\r
+            GLUTmenu *menu;\r
+           int menuNum;\r
+\r
+            menuNum = window->menu[event.xbutton.button - 1];\r
+            /* Make sure that __glutGetMenuByNum is only called if there\r
+              really is a menu present. */\r
+            if ((menuNum > 0) && (menu = __glutGetMenuByNum(menuNum))) {\r
+              if (event.type == ButtonPress && !__glutMappedMenu) {\r
+                __glutStartMenu(menu, window,\r
+                  event.xbutton.x_root, event.xbutton.y_root,\r
+                  event.xbutton.x, event.xbutton.y);\r
+                mappedMenuButton = event.xbutton.button;\r
+              } else {\r
+                /* Ignore a release of a button with a menu\r
+                   attatched to it when no menu is popped up,\r
+                   or ignore a press when another menu is\r
+                   already popped up. */\r
+              }\r
+            } else if (window->mouse) {\r
+              __glutSetWindow(window);\r
+              __glutModifierMask = event.xbutton.state;\r
+              window->mouse(event.xbutton.button - 1,\r
+                event.type == ButtonRelease ?\r
+                GLUT_UP : GLUT_DOWN,\r
+                event.xbutton.x, event.xbutton.y);\r
+              __glutModifierMask = ~0;\r
+            } else {\r
+              /* Stray mouse events.  Ignore. */\r
+            }\r
+          } else {\r
+            /* Window might have been destroyed and all the\r
+               events for the window may not yet be received. */\r
+          }\r
+        }\r
+        break;\r
+      case MotionNotify:\r
+        if (!__glutMappedMenu) {\r
+          window = __glutGetWindow(event.xmotion.window);\r
+          if (window) {\r
+            /* If motion function registered _and_ buttons held\r
+               * down, call motion function...  */\r
+            if (window->motion && event.xmotion.state &\r
+              (Button1Mask | Button2Mask | Button3Mask)) {\r
+              __glutSetWindow(window);\r
+              window->motion(event.xmotion.x, event.xmotion.y);\r
+            }\r
+            /* If passive motion function registered _and_\r
+               buttons not held down, call passive motion\r
+               function...  */\r
+            else if (window->passive &&\r
+                ((event.xmotion.state &\r
+                    (Button1Mask | Button2Mask | Button3Mask)) ==\r
+                0)) {\r
+              __glutSetWindow(window);\r
+              window->passive(event.xmotion.x,\r
+                event.xmotion.y);\r
+            }\r
+          }\r
+        } else {\r
+          /* Motion events are thrown away when a pop up menu\r
+             is active. */\r
+        }\r
+        break;\r
+      case KeyPress:\r
+      case KeyRelease:\r
+        window = __glutGetWindow(event.xkey.window);\r
+        if (!window) {\r
+          break;\r
+        }\r
+       if (event.type == KeyPress) {\r
+         keyboard = window->keyboard;\r
+       } else {\r
+\r
+         /* If we are ignoring auto repeated keys for this window,\r
+            check if the next event in the X event queue is a KeyPress\r
+            for the exact same key (and at the exact same time) as the\r
+            key being released.  The X11 protocol will send auto\r
+            repeated keys as such KeyRelease/KeyPress pairs. */\r
+\r
+         if (window->ignoreKeyRepeat) {\r
+           if (XEventsQueued(__glutDisplay, QueuedAfterReading)) {\r
+             XPeekEvent(__glutDisplay, &ahead);\r
+             if (ahead.type == KeyPress\r
+               && ahead.xkey.window == event.xkey.window\r
+               && ahead.xkey.keycode == event.xkey.keycode\r
+               && ahead.xkey.time == event.xkey.time) {\r
+               /* Pop off the repeated KeyPress and ignore\r
+                  the auto repeated KeyRelease/KeyPress pair. */\r
+               XNextEvent(__glutDisplay, &event);\r
+               break;\r
+             }\r
+           }\r
+         }\r
+         keyboard = window->keyboardUp;\r
+       }\r
+        if (keyboard) {\r
+          char tmp[1];\r
+          int rc;\r
+\r
+          rc = XLookupString(&event.xkey, tmp, sizeof(tmp),\r
+            NULL, NULL);\r
+          if (rc) {\r
+            __glutSetWindow(window);\r
+            __glutModifierMask = event.xkey.state;\r
+            keyboard(tmp[0],\r
+              event.xkey.x, event.xkey.y);\r
+            __glutModifierMask = ~0;\r
+            break;\r
+          }\r
+        }\r
+       if (event.type == KeyPress) {\r
+         special = window->special;\r
+        } else {\r
+         special = window->specialUp;\r
+       }\r
+        if (special) {\r
+          KeySym ks;\r
+          int key;\r
+\r
+/* Introduced in X11R6:  (Partial list of) Keypad Functions.  Define\r
+   in place in case compiling against an older pre-X11R6\r
+   X11/keysymdef.h file. */\r
+#ifndef XK_KP_Home\r
+#define XK_KP_Home              0xFF95\r
+#endif\r
+#ifndef XK_KP_Left\r
+#define XK_KP_Left              0xFF96\r
+#endif\r
+#ifndef XK_KP_Up\r
+#define XK_KP_Up                0xFF97\r
+#endif\r
+#ifndef XK_KP_Right\r
+#define XK_KP_Right             0xFF98\r
+#endif\r
+#ifndef XK_KP_Down\r
+#define XK_KP_Down              0xFF99\r
+#endif\r
+#ifndef XK_KP_Prior\r
+#define XK_KP_Prior             0xFF9A\r
+#endif\r
+#ifndef XK_KP_Next\r
+#define XK_KP_Next              0xFF9B\r
+#endif\r
+#ifndef XK_KP_End\r
+#define XK_KP_End               0xFF9C\r
+#endif\r
+#ifndef XK_KP_Insert\r
+#define XK_KP_Insert            0xFF9E\r
+#endif\r
+#ifndef XK_KP_Delete\r
+#define XK_KP_Delete            0xFF9F\r
+#endif\r
+\r
+          ks = XLookupKeysym((XKeyEvent *) & event, 0);\r
+          /* XXX Verbose, but makes no assumptions about keysym\r
+             layout. */\r
+          switch (ks) {\r
+/* *INDENT-OFF* */\r
+          /* function keys */\r
+          case XK_F1:    key = GLUT_KEY_F1; break;\r
+          case XK_F2:    key = GLUT_KEY_F2; break;\r
+          case XK_F3:    key = GLUT_KEY_F3; break;\r
+          case XK_F4:    key = GLUT_KEY_F4; break;\r
+          case XK_F5:    key = GLUT_KEY_F5; break;\r
+          case XK_F6:    key = GLUT_KEY_F6; break;\r
+          case XK_F7:    key = GLUT_KEY_F7; break;\r
+          case XK_F8:    key = GLUT_KEY_F8; break;\r
+          case XK_F9:    key = GLUT_KEY_F9; break;\r
+          case XK_F10:   key = GLUT_KEY_F10; break;\r
+          case XK_F11:   key = GLUT_KEY_F11; break;\r
+          case XK_F12:   key = GLUT_KEY_F12; break;\r
+          /* directional keys */\r
+         case XK_KP_Left:\r
+          case XK_Left:  key = GLUT_KEY_LEFT; break;\r
+         case XK_KP_Up: /* Introduced in X11R6. */\r
+          case XK_Up:    key = GLUT_KEY_UP; break;\r
+         case XK_KP_Right: /* Introduced in X11R6. */\r
+          case XK_Right: key = GLUT_KEY_RIGHT; break;\r
+         case XK_KP_Down: /* Introduced in X11R6. */\r
+          case XK_Down:  key = GLUT_KEY_DOWN; break;\r
+/* *INDENT-ON* */\r
+\r
+         case XK_KP_Prior: /* Introduced in X11R6. */\r
+          case XK_Prior:\r
+            /* XK_Prior same as X11R6's XK_Page_Up */\r
+            key = GLUT_KEY_PAGE_UP;\r
+            break;\r
+         case XK_KP_Next: /* Introduced in X11R6. */\r
+          case XK_Next:\r
+            /* XK_Next same as X11R6's XK_Page_Down */\r
+            key = GLUT_KEY_PAGE_DOWN;\r
+            break;\r
+         case XK_KP_Home: /* Introduced in X11R6. */\r
+          case XK_Home:\r
+            key = GLUT_KEY_HOME;\r
+            break;\r
+#ifdef __hpux\r
+          case XK_Select:\r
+#endif\r
+         case XK_KP_End: /* Introduced in X11R6. */\r
+          case XK_End:\r
+            key = GLUT_KEY_END;\r
+            break;\r
+#ifdef __hpux\r
+          case XK_InsertChar:\r
+#endif\r
+         case XK_KP_Insert: /* Introduced in X11R6. */\r
+          case XK_Insert:\r
+            key = GLUT_KEY_INSERT;\r
+            break;\r
+#ifdef __hpux\r
+          case XK_DeleteChar:\r
+#endif\r
+         case XK_KP_Delete: /* Introduced in X11R6. */\r
+            /* The Delete character is really an ASCII key. */\r
+            __glutSetWindow(window);\r
+            keyboard(127,  /* ASCII Delete character. */\r
+              event.xkey.x, event.xkey.y);\r
+            goto skip;\r
+          default:\r
+            goto skip;\r
+          }\r
+          __glutSetWindow(window);\r
+          __glutModifierMask = event.xkey.state;\r
+          special(key, event.xkey.x, event.xkey.y);\r
+          __glutModifierMask = ~0;\r
+        skip:;\r
+        }\r
+        break;\r
+      case EnterNotify:\r
+      case LeaveNotify:\r
+        if (event.xcrossing.mode != NotifyNormal ||\r
+          event.xcrossing.detail == NotifyNonlinearVirtual ||\r
+          event.xcrossing.detail == NotifyVirtual) {\r
+\r
+          /* Careful to ignore Enter/LeaveNotify events that\r
+             come from the pop-up menu pointer grab and ungrab.\r
+             Also, ignore "virtual" Enter/LeaveNotify events\r
+             since they represent the pointer passing through\r
+             the window hierarchy without actually entering or\r
+             leaving the actual real estate of a window.  */\r
+\r
+          break;\r
+        }\r
+        if (__glutMappedMenu) {\r
+          GLUTmenuItem *item;\r
+          int num;\r
+\r
+          item = __glutGetMenuItem(__glutMappedMenu,\r
+            event.xcrossing.window, &num);\r
+          if (item) {\r
+            __glutMenuItemEnterOrLeave(item, num, event.type);\r
+            break;\r
+          }\r
+        }\r
+        window = __glutGetWindow(event.xcrossing.window);\r
+        if (window) {\r
+          if (window->entry) {\r
+            if (event.type == EnterNotify) {\r
+\r
+              /* With overlays established, X can report two\r
+                 enter events for both the overlay and normal\r
+                 plane window. Do not generate a second enter\r
+                 callback if we reported one without an\r
+                 intervening leave. */\r
+\r
+              if (window->entryState != EnterNotify) {\r
+                int num = window->num;\r
+                Window xid = window->win;\r
+\r
+                window->entryState = EnterNotify;\r
+                __glutSetWindow(window);\r
+                window->entry(GLUT_ENTERED);\r
+\r
+                if (__glutMappedMenu) {\r
+\r
+                  /* Do not generate any passive motion events\r
+                     when menus are in use. */\r
+\r
+                } else {\r
+\r
+                  /* An EnterNotify event can result in a\r
+                     "compound" callback if a passive motion\r
+                     callback is also registered. In this case,\r
+                     be a little paranoid about the possibility\r
+                     the window could have been destroyed in the\r
+                     entry callback. */\r
+\r
+                  window = __glutWindowList[num];\r
+                  if (window && window->passive && window->win == xid) {\r
+                    __glutSetWindow(window);\r
+                    window->passive(event.xcrossing.x, event.xcrossing.y);\r
+                  }\r
+                }\r
+              }\r
+            } else {\r
+              if (window->entryState != LeaveNotify) {\r
+\r
+                /* When an overlay is established for a window\r
+                   already mapped and with the pointer in it,\r
+                   the X server will generate a leave/enter\r
+                   event pair as the pointer leaves (without\r
+                   moving) from the normal plane X window to\r
+                   the newly mapped overlay  X window (or vice\r
+                   versa). This enter/leave pair should not be\r
+                   reported to the GLUT program since the pair\r
+                   is a consequence of creating (or destroying)\r
+                   the overlay, not an actual leave from the\r
+                   GLUT window. */\r
+\r
+                if (XEventsQueued(__glutDisplay, QueuedAfterReading)) {\r
+                  XPeekEvent(__glutDisplay, &ahead);\r
+                  if (ahead.type == EnterNotify &&\r
+                    __glutGetWindow(ahead.xcrossing.window) == window) {\r
+                    XNextEvent(__glutDisplay, &event);\r
+                    break;\r
+                  }\r
+                }\r
+                window->entryState = LeaveNotify;\r
+                __glutSetWindow(window);\r
+                window->entry(GLUT_LEFT);\r
+              }\r
+            }\r
+          } else if (window->passive) {\r
+            __glutSetWindow(window);\r
+            window->passive(event.xcrossing.x, event.xcrossing.y);\r
+          }\r
+        }\r
+        break;\r
+      case UnmapNotify:\r
+        /* MapNotify events are not needed to maintain\r
+           visibility state since VisibilityNotify events will\r
+           be delivered when a window becomes visible from\r
+           mapping.  However, VisibilityNotify events are not\r
+           delivered when a window is unmapped (for the window\r
+           or its children). */\r
+        window = __glutGetWindow(event.xunmap.window);\r
+        if (window) {\r
+          if (window->win != event.xconfigure.window) {\r
+            /* Ignore UnmapNotify sent to the overlay planes.\r
+               GLUT could get here because overlays select for\r
+               StructureNotify events to receive DestroyNotify.\r
+             */\r
+            break;\r
+          }\r
+          markWindowHidden(window);\r
+        }\r
+        break;\r
+      case VisibilityNotify:\r
+        window = __glutGetWindow(event.xvisibility.window);\r
+        if (window) {\r
+          /* VisibilityUnobscured+1 = GLUT_FULLY_RETAINED,\r
+             VisibilityPartiallyObscured+1 =\r
+             GLUT_PARTIALLY_RETAINED, VisibilityFullyObscured+1\r
+             =  GLUT_FULLY_COVERED. */\r
+          int visState = event.xvisibility.state + 1;\r
+\r
+          if (visState != window->visState) {\r
+            if (window->windowStatus) {\r
+              window->visState = visState;\r
+              __glutSetWindow(window);\r
+              window->windowStatus(visState);\r
+            }\r
+          }\r
+        }\r
+        break;\r
+      case ClientMessage:\r
+        if (event.xclient.data.l[0] == __glutWMDeleteWindow)\r
+          exit(0);\r
+        break;\r
+      case DestroyNotify:\r
+        purgeStaleWindow(event.xdestroywindow.window);\r
+        break;\r
+      case CirculateNotify:\r
+      case CreateNotify:\r
+      case GravityNotify:\r
+      case ReparentNotify:\r
+        /* Uninteresting to GLUT (but possible for GLUT to\r
+           receive). */\r
+        break;\r
+      default:\r
+        /* Pass events not directly handled by the GLUT main\r
+           event loop to any event parsers that have been\r
+           registered.  In this way, X Input extension events\r
+           are passed to the correct handler without forcing\r
+           all GLUT programs to support X Input event handling.\r
+         */\r
+        parser = eventParserList;\r
+        while (parser) {\r
+          if (parser->func(&event))\r
+            break;\r
+          parser = parser->next;\r
+        }\r
+        break;\r
+      }\r
+    }\r
+#endif /* _WIN32 */\r
+    if (__glutTimerList) {\r
+      handleTimeouts();\r
+    }\r
+  }\r
+  while (XPending(__glutDisplay));\r
+}\r
+\r
+static void\r
+waitForSomething(void)\r
+{\r
+#if defined(__vms) && ( __VMS_VER < 70000000 )\r
+  static struct timeval6 zerotime =\r
+  {0};\r
+  unsigned int timer_efn;\r
+#define timer_id 'glut' /* random :-) number */\r
+  unsigned int wait_mask;\r
+#else\r
+  static struct timeval zerotime =\r
+  {0, 0};\r
+#if defined(__OS2__)\r
+\r
+#elif !defined(_WIN32)\r
+  fd_set fds;\r
+#endif\r
+#endif\r
+#ifdef OLD_VMS\r
+   struct timeval6 now, timeout, waittime;\r
+#else\r
+   struct timeval now, timeout, waittime;\r
+#endif\r
+#if !defined(_WIN32)\r
+  int rc;\r
+#endif\r
+\r
+  /* Flush X protocol since XPending does not do this\r
+     implicitly. */\r
+  XFlush(__glutDisplay);\r
+  if (XPending(__glutDisplay)) {\r
+    /* It is possible (but quite rare) that XFlush may have\r
+       needed to wait for a writable X connection file\r
+       descriptor, and in the process, may have had to read off\r
+       X protocol from the file descriptor. If XPending is true,\r
+       this case occured and we should avoid waiting in select\r
+       since X protocol buffered within Xlib is due to be\r
+       processed and potentially no more X protocol is on the\r
+       file descriptor, so we would risk waiting improperly in\r
+       select. */\r
+    goto immediatelyHandleXinput;\r
+  }\r
+#if defined(__vms) && ( __VMS_VER < 70000000 )\r
+  timeout = __glutTimerList->timeout;\r
+  GETTIMEOFDAY(&now);\r
+  wait_mask = 1 << (__glutConnectionFD & 31);\r
+  if (IS_AFTER(now, timeout)) {\r
+    /* We need an event flag for the timer. */\r
+    /* XXX The `right' way to do this is to use LIB$GET_EF, but\r
+       since it needs to be in the same cluster as the EFN for\r
+       the display, we will have hack it. */\r
+    timer_efn = __glutConnectionFD - 1;\r
+    if ((timer_efn / 32) != (__glutConnectionFD / 32)) {\r
+      timer_efn = __glutConnectionFD + 1;\r
+    }\r
+    rc = SYS$CLREF(timer_efn);\r
+    rc = SYS$SETIMR(timer_efn, &timeout, NULL, timer_id, 0);\r
+    wait_mask |= 1 << (timer_efn & 31);\r
+  } else {\r
+    timer_efn = 0;\r
+  }\r
+  rc = SYS$WFLOR(__glutConnectionFD, wait_mask);\r
+  if (timer_efn != 0 && SYS$CLREF(timer_efn) == SS$_WASCLR) {\r
+    rc = SYS$CANTIM(timer_id, PSL$C_USER);\r
+  }\r
+  /* XXX There does not seem to be checking of "rc" in the code\r
+     above.  Can any of the SYS$ routines above fail? */\r
+#else /* not vms6.2 or lower */\r
+#if defined(__OS2__)\r
+\r
+#elif !defined(_WIN32)\r
+  FD_ZERO(&fds);\r
+  FD_SET(__glutConnectionFD, &fds);\r
+#endif\r
+  timeout = __glutTimerList->timeout;\r
+  GETTIMEOFDAY(&now);\r
+  if (IS_AFTER(now, timeout)) {\r
+    TIMEDELTA(waittime, timeout, now);\r
+  } else {\r
+    waittime = zerotime;\r
+  }\r
+\r
+#if defined(__OS2__)\r
+  DosSleep(0);\r
+#elif !defined(_WIN32)\r
+  rc = select(__glutConnectionFD + 1, &fds,\r
+    NULL, NULL, &waittime);\r
+  if (rc < 0 && errno != EINTR)\r
+    __glutFatalError("select error.");\r
+#else\r
+\r
+  MsgWaitForMultipleObjects(0, NULL, FALSE,\r
+    waittime.tv_sec*1000 + waittime.tv_usec/1000, QS_ALLINPUT);\r
+\r
+#endif\r
+#endif /* not vms6.2 or lower */\r
+  /* Without considering the cause of select unblocking, check\r
+     for pending X events and handle any timeouts (by calling\r
+     processEventsAndTimeouts).  We always look for X events\r
+     even if select returned with 0 (indicating a timeout);\r
+     otherwise we risk starving X event processing by continous\r
+     timeouts. */\r
+  if (XPending(__glutDisplay)) {\r
+  immediatelyHandleXinput:\r
+    processEventsAndTimeouts();\r
+  } else {\r
+    if (__glutTimerList)\r
+      handleTimeouts();\r
+  }\r
+}\r
+\r
+static void\r
+idleWait(void)\r
+{\r
+  if (XPending(__glutDisplay)) {\r
+    processEventsAndTimeouts();\r
+  } else {\r
+    if (__glutTimerList) {\r
+      handleTimeouts();\r
+    }\r
+  }\r
+  /* Make sure idle func still exists! */\r
+  if (__glutIdleFunc) {\r
+    __glutIdleFunc();\r
+  }\r
+}\r
+\r
+static GLUTwindow **beforeEnd;\r
+\r
+static GLUTwindow *\r
+processWindowWorkList(GLUTwindow * window)\r
+{\r
+  int workMask;\r
+\r
+  if (window->prevWorkWin) {\r
+    window->prevWorkWin = processWindowWorkList(window->prevWorkWin);\r
+  } else {\r
+    beforeEnd = &window->prevWorkWin;\r
+  }\r
+\r
+  /* Capture work mask for work that needs to be done to this\r
+     window, then clear the window's work mask (excepting the\r
+     dummy work bit, see below).  Then, process the captured\r
+     work mask.  This allows callbacks in the processing the\r
+     captured work mask to set the window's work mask for\r
+     subsequent processing. */\r
+\r
+  workMask = window->workMask;\r
+  assert((workMask & GLUT_DUMMY_WORK) == 0);\r
+\r
+  /* Set the dummy work bit, clearing all other bits, to\r
+     indicate that the window is currently on the window work\r
+     list _and_ that the window's work mask is currently being\r
+     processed.  This convinces __glutPutOnWorkList that this\r
+     window is on the work list still. */\r
+  window->workMask = GLUT_DUMMY_WORK;\r
+\r
+  /* Optimization: most of the time, the work to do is a\r
+     redisplay and not these other types of work.  Check for\r
+     the following cases as a group to before checking each one\r
+     individually one by one. This saves about 25 MIPS\r
+     instructions in the common redisplay only case. */\r
+  if (workMask & (GLUT_EVENT_MASK_WORK | GLUT_DEVICE_MASK_WORK |\r
+      GLUT_CONFIGURE_WORK | GLUT_COLORMAP_WORK | GLUT_MAP_WORK)) {\r
+\r
+#if !defined(_WIN32) && !defined(__OS2__)\r
+    /* Be sure to set event mask BEFORE map window is done. */\r
+    if (workMask & GLUT_EVENT_MASK_WORK) {\r
+      long eventMask;\r
+\r
+      /* Make sure children are not propogating events this\r
+         window is selecting for.  Be sure to do this before\r
+         enabling events on the children's parent. */\r
+      if (window->children) {\r
+        GLUTwindow *child = window->children;\r
+        unsigned long attribMask = CWDontPropagate;\r
+        XSetWindowAttributes wa;\r
+\r
+        wa.do_not_propagate_mask = window->eventMask & GLUT_DONT_PROPAGATE_FILTER_MASK;\r
+        if (window->eventMask & GLUT_HACK_STOP_PROPAGATE_MASK) {\r
+          wa.event_mask = child->eventMask | (window->eventMask & GLUT_HACK_STOP_PROPAGATE_MASK);\r
+          attribMask |= CWEventMask;\r
+        }\r
+        do {\r
+          XChangeWindowAttributes(__glutDisplay, child->win,\r
+            attribMask, &wa);\r
+          child = child->siblings;\r
+        } while (child);\r
+      }\r
+      eventMask = window->eventMask;\r
+      if (window->parent && window->parent->eventMask & GLUT_HACK_STOP_PROPAGATE_MASK)\r
+        eventMask |= (window->parent->eventMask & GLUT_HACK_STOP_PROPAGATE_MASK);\r
+      XSelectInput(__glutDisplay, window->win, eventMask);\r
+      if (window->overlay)\r
+        XSelectInput(__glutDisplay, window->overlay->win,\r
+          window->eventMask & GLUT_OVERLAY_EVENT_FILTER_MASK);\r
+    }\r
+#endif /* !_WIN32 */\r
+    /* Be sure to set device mask BEFORE map window is done. */\r
+    if (workMask & GLUT_DEVICE_MASK_WORK) {\r
+      __glutUpdateInputDeviceMaskFunc(window);\r
+    }\r
+    /* Be sure to configure window BEFORE map window is done. */\r
+    if (workMask & GLUT_CONFIGURE_WORK) {\r
+#if defined(__OS2__)\r
+      RECTL changes;\r
+\r
+#elif defined(_WIN32)\r
+      RECT changes;\r
+      POINT point;\r
+      UINT flags = SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOOWNERZORDER\r
+       | SWP_NOSENDCHANGING | SWP_NOSIZE | SWP_NOZORDER;\r
+\r
+      GetClientRect(window->win, &changes);\r
+\r
+      /* If this window is a toplevel window, translate the 0,0 client\r
+         coordinate into a screen coordinate for proper placement. */\r
+      if (!window->parent) {\r
+        point.x = 0;\r
+        point.y = 0;\r
+        ClientToScreen(window->win, &point);\r
+        changes.left = point.x;\r
+        changes.top = point.y;\r
+      }\r
+      if (window->desiredConfMask & (CWX | CWY)) {\r
+        changes.left = window->desiredX;\r
+        changes.top = window->desiredY;\r
+       flags &= ~SWP_NOMOVE;\r
+      }\r
+      if (window->desiredConfMask & (CWWidth | CWHeight)) {\r
+        changes.right = changes.left + window->desiredWidth;\r
+        changes.bottom = changes.top + window->desiredHeight;\r
+       flags &= ~SWP_NOSIZE;\r
+       /* XXX If overlay exists, resize the overlay here, ie.\r
+          if (window->overlay) ... */\r
+      }\r
+      if (window->desiredConfMask & CWStackMode) {\r
+       flags &= ~SWP_NOZORDER;\r
+       /* XXX Overlay support might require something special here. */\r
+      }\r
+\r
+      /* Adjust the window rectangle because Win32 thinks that the x, y,\r
+         width & height are the WHOLE window (including decorations),\r
+         whereas GLUT treats the x, y, width & height as only the CLIENT\r
+         area of the window.  Only do this to top level windows\r
+         that are not in game mode (since game mode windows do\r
+         not have any decorations). */\r
+      if (!window->parent && window != __glutGameModeWindow) {\r
+        AdjustWindowRect(&changes,\r
+          WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS | WS_CLIPCHILDREN,\r
+          FALSE);\r
+      }\r
+\r
+      /* Do the repositioning, moving, and push/pop. */\r
+      SetWindowPos(window->win,\r
+        window->desiredStack == Above ? HWND_TOP : HWND_NOTOPMOST,\r
+        changes.left, changes.top,\r
+        changes.right - changes.left, changes.bottom - changes.top,\r
+        flags);\r
+\r
+      /* Zero out the mask. */\r
+      window->desiredConfMask = 0;\r
+\r
+      /* This hack causes the window to go back to the right position\r
+         when it is taken out of fullscreen mode. */\r
+      if (workMask & GLUT_FULL_SCREEN_WORK) {\r
+        window->desiredConfMask |= CWX | CWY;\r
+        window->desiredX = point.x;\r
+        window->desiredY = point.y;\r
+      }\r
+#else /* !_WIN32 */\r
+      XWindowChanges changes;\r
+\r
+      changes.x = window->desiredX;\r
+      changes.y = window->desiredY;\r
+      if (window->desiredConfMask & (CWWidth | CWHeight)) {\r
+        changes.width = window->desiredWidth;\r
+        changes.height = window->desiredHeight;\r
+        if (window->overlay)\r
+          XResizeWindow(__glutDisplay, window->overlay->win,\r
+            window->desiredWidth, window->desiredHeight);\r
+        if (__glutMotifHints != None) {\r
+          if (workMask & GLUT_FULL_SCREEN_WORK) {\r
+            MotifWmHints hints;\r
+\r
+            hints.flags = MWM_HINTS_DECORATIONS;\r
+            hints.decorations = 0;  /* Absolutely no\r
+                                       decorations. */\r
+            XChangeProperty(__glutDisplay, window->win,\r
+              __glutMotifHints, __glutMotifHints, 32,\r
+              PropModeReplace, (unsigned char *) &hints, 4);\r
+            if (workMask & GLUT_MAP_WORK) {\r
+              /* Handle case where glutFullScreen is called\r
+                 before the first time that the window is\r
+                 mapped. Some window managers will randomly or\r
+                 interactively position the window the first\r
+                 time it is mapped if the window's\r
+                 WM_NORMAL_HINTS property does not request an\r
+                 explicit position. We don't want any such\r
+                 window manager interaction when going\r
+                 fullscreen.  Overwrite the WM_NORMAL_HINTS\r
+                 property installed by glutCreateWindow's\r
+                 XSetWMProperties property with one explicitly\r
+                 requesting a fullscreen window. */\r
+              XSizeHints hints;\r
+\r
+              hints.flags = USPosition | USSize;\r
+              hints.x = 0;\r
+              hints.y = 0;\r
+              hints.width = window->desiredWidth;\r
+              hints.height = window->desiredHeight;\r
+              XSetWMNormalHints(__glutDisplay, window->win, &hints);\r
+            }\r
+          } else {\r
+            XDeleteProperty(__glutDisplay, window->win, __glutMotifHints);\r
+          }\r
+        }\r
+      }\r
+      if (window->desiredConfMask & CWStackMode) {\r
+        changes.stack_mode = window->desiredStack;\r
+        /* Do not let glutPushWindow push window beneath the\r
+           underlay. */\r
+        if (window->parent && window->parent->overlay\r
+          && window->desiredStack == Below) {\r
+          changes.stack_mode = Above;\r
+          changes.sibling = window->parent->overlay->win;\r
+          window->desiredConfMask |= CWSibling;\r
+        }\r
+      }\r
+      XConfigureWindow(__glutDisplay, window->win,\r
+        window->desiredConfMask, &changes);\r
+      window->desiredConfMask = 0;\r
+#endif\r
+    }\r
+#if !defined(_WIN32) && !defined(__OS2__)\r
+    /* Be sure to establish the colormaps BEFORE map window is\r
+       done. */\r
+    if (workMask & GLUT_COLORMAP_WORK) {\r
+      __glutEstablishColormapsProperty(window);\r
+    }\r
+#endif\r
+    if (workMask & GLUT_MAP_WORK) {\r
+      switch (window->desiredMapState) {\r
+      case WithdrawnState:\r
+        if (window->parent) {\r
+          XUnmapWindow(__glutDisplay, window->win);\r
+        } else {\r
+          XWithdrawWindow(__glutDisplay, window->win,\r
+            __glutScreen);\r
+        }\r
+        window->shownState = 0;\r
+        break;\r
+      case NormalState:\r
+        XMapWindow(__glutDisplay, window->win);\r
+        window->shownState = 1;\r
+        break;\r
+#ifdef _WIN32\r
+      case GameModeState:  /* Not an Xlib value. */\r
+        ShowWindow(window->win, SW_SHOW);\r
+        window->shownState = 1;\r
+        break;\r
+#endif\r
+      case IconicState:\r
+        XIconifyWindow(__glutDisplay, window->win, __glutScreen);\r
+        window->shownState = 0;\r
+        break;\r
+      }\r
+    }\r
+  }\r
+  if (workMask & (GLUT_REDISPLAY_WORK | GLUT_OVERLAY_REDISPLAY_WORK | GLUT_REPAIR_WORK | GLUT_OVERLAY_REPAIR_WORK)) {\r
+    if (window->forceReshape) {\r
+      /* Guarantee that before a display callback is generated\r
+         for a window, a reshape callback must be generated. */\r
+      __glutSetWindow(window);\r
+      window->reshape(window->width, window->height);\r
+      window->forceReshape = False;\r
+\r
+      /* Setting the redisplay bit on the first reshape is\r
+         necessary to make the "Mesa glXSwapBuffers to repair\r
+         damage" hack operate correctly.  Without indicating a\r
+         redisplay is necessary, there's not an initial back\r
+         buffer render from which to blit from when damage\r
+         happens to the window. */\r
+      workMask |= GLUT_REDISPLAY_WORK;\r
+    }\r
+    /* The code below is more involved than otherwise necessary\r
+       because it is paranoid about the overlay or entire window\r
+       being removed or destroyed in the course of the callbacks.\r
+       Notice how the global __glutWindowDamaged is used to record\r
+       the layers' damage status.  See the code in glutLayerGet for\r
+       how __glutWindowDamaged is used. The  point is to not have to\r
+       update the "damaged" field after  the callback since the\r
+       window (or overlay) may be destroyed (or removed) when the\r
+       callback returns. */\r
+\r
+    if (window->overlay && window->overlay->display) {\r
+      int num = window->num;\r
+      Window xid = window->overlay ? window->overlay->win : None;\r
+\r
+      /* If an overlay display callback is registered, we\r
+         differentiate between a redisplay needed for the\r
+         overlay and/or normal plane.  If there is no overlay\r
+         display callback registered, we simply use the\r
+         standard display callback. */\r
+\r
+      if (workMask & (GLUT_REDISPLAY_WORK | GLUT_REPAIR_WORK)) {\r
+        if (__glutMesaSwapHackSupport) {\r
+          if (window->usedSwapBuffers) {\r
+            if ((workMask & (GLUT_REPAIR_WORK | GLUT_REDISPLAY_WORK)) == GLUT_REPAIR_WORK) {\r
+             SWAP_BUFFERS_WINDOW(window);\r
+              goto skippedDisplayCallback1;\r
+            }\r
+          }\r
+        }\r
+        /* Render to normal plane. */\r
+#ifdef _WIN32\r
+        window->renderDc = window->hdc;\r
+#endif\r
+        window->renderWin = window->win;\r
+        window->renderCtx = window->ctx;\r
+        __glutWindowDamaged = (workMask & GLUT_REPAIR_WORK);\r
+        __glutSetWindow(window);\r
+        window->usedSwapBuffers = 0;\r
+        window->display();\r
+        __glutWindowDamaged = 0;\r
+\r
+      skippedDisplayCallback1:;\r
+      }\r
+      if (workMask & (GLUT_OVERLAY_REDISPLAY_WORK | GLUT_OVERLAY_REPAIR_WORK)) {\r
+        window = __glutWindowList[num];\r
+        if (window && window->overlay &&\r
+          window->overlay->win == xid && window->overlay->display) {\r
+\r
+          /* Render to overlay. */\r
+#ifdef _WIN32\r
+          window->renderDc = window->overlay->hdc;\r
+#endif\r
+          window->renderWin = window->overlay->win;\r
+          window->renderCtx = window->overlay->ctx;\r
+          __glutWindowDamaged = (workMask & GLUT_OVERLAY_REPAIR_WORK);\r
+          __glutSetWindow(window);\r
+          window->overlay->display();\r
+          __glutWindowDamaged = 0;\r
+        } else {\r
+          /* Overlay may have since been destroyed or the\r
+             overlay callback may have been disabled during\r
+             normal display callback. */\r
+        }\r
+      }\r
+    } else {\r
+      if (__glutMesaSwapHackSupport) {\r
+        if (!window->overlay && window->usedSwapBuffers) {\r
+          if ((workMask & (GLUT_REPAIR_WORK | GLUT_REDISPLAY_WORK)) == GLUT_REPAIR_WORK) {\r
+           SWAP_BUFFERS_WINDOW(window);\r
+            goto skippedDisplayCallback2;\r
+          }\r
+        }\r
+      }\r
+      /* Render to normal plane (and possibly overlay). */\r
+      __glutWindowDamaged = (workMask & (GLUT_OVERLAY_REPAIR_WORK | GLUT_REPAIR_WORK));\r
+      __glutSetWindow(window);\r
+      window->usedSwapBuffers = 0;\r
+      window->display();\r
+      __glutWindowDamaged = 0;\r
+\r
+    skippedDisplayCallback2:;\r
+    }\r
+  }\r
+  /* Combine workMask with window->workMask to determine what\r
+     finish and debug work there is. */\r
+  workMask |= window->workMask;\r
+\r
+  if (workMask & GLUT_FINISH_WORK) {\r
+    /* Finish work makes sure a glFinish gets done to indirect\r
+       rendering contexts.  Indirect contexts tend to have much\r
+       longer latency because lots of OpenGL extension requests\r
+       can queue up in the X protocol stream. __glutSetWindow\r
+       is where the finish works gets queued for indirect\r
+       contexts. */\r
+    __glutSetWindow(window);\r
+    glFinish();\r
+  }\r
+  if (workMask & GLUT_DEBUG_WORK) {\r
+    __glutSetWindow(window);\r
+    glutReportErrors();\r
+  }\r
+  /* Strip out dummy, finish, and debug work bits. */\r
+  window->workMask &= ~(GLUT_DUMMY_WORK | GLUT_FINISH_WORK | GLUT_DEBUG_WORK);\r
+  if (window->workMask) {\r
+    /* Leave on work list. */\r
+    return window;\r
+  } else {\r
+    /* Remove current window from work list. */\r
+    return window->prevWorkWin;\r
+  }\r
+}\r
+\r
+#ifndef _WIN32\r
+static  /* X11 implementations do not need this global. */\r
+#endif\r
+void\r
+__glutProcessWindowWorkLists(void)\r
+{\r
+  if (__glutWindowWorkList) {\r
+    GLUTwindow *remainder, *work;\r
+\r
+    work = __glutWindowWorkList;\r
+    __glutWindowWorkList = NULL;\r
+    if (work) {\r
+      remainder = processWindowWorkList(work);\r
+      if (remainder) {\r
+        *beforeEnd = __glutWindowWorkList;\r
+        __glutWindowWorkList = remainder;\r
+      }\r
+    }\r
+  }\r
+}\r
+\r
+/* CENTRY */\r
+void GLUTAPIENTRY\r
+glutMainLoop(void)\r
+{\r
+#if !defined(_WIN32)\r
+  if (!__glutDisplay)\r
+    __glutFatalUsage("main loop entered with out proper initialization.");\r
+#endif\r
+  if (!__glutWindowListSize)\r
+    __glutFatalUsage(\r
+      "main loop entered with no windows created.");\r
+  for (;;) {\r
+    __glutProcessWindowWorkLists();\r
+    if (__glutIdleFunc || __glutWindowWorkList) {\r
+      idleWait();\r
+    } else {\r
+      if (__glutTimerList) {\r
+        waitForSomething();\r
+      } else {\r
+        processEventsAndTimeouts();\r
+      }\r
+    }\r
+  }\r
+}\r
+/* ENDCENTRY */\r
diff --git a/src/glut/os2/glut_ext.cpp b/src/glut/os2/glut_ext.cpp
new file mode 100644 (file)
index 0000000..feb6fbf
--- /dev/null
@@ -0,0 +1,204 @@
+\r
+/* Copyright (c) Mark J. Kilgard, 1994, 1997. */\r
+\r
+/* This program is freely distributable without licensing fees\r
+   and is provided without guarantee or warrantee expressed or\r
+   implied. This program is -not- in the public domain. */\r
+\r
+#include <stdlib.h>\r
+#include <string.h>\r
+\r
+#include "glutint.h"\r
+\r
+/* CENTRY */\r
+int GLUTAPIENTRY\r
+glutExtensionSupported(const char *extension)\r
+{\r
+  static const GLubyte *extensions = NULL;\r
+  const GLubyte *start;\r
+  GLubyte *where, *terminator;\r
+\r
+  /* Extension names should not have spaces. */\r
+  where = (GLubyte *) strchr(extension, ' ');\r
+  if (where || *extension == '\0')\r
+    return 0;\r
+\r
+  if (!extensions) {\r
+    extensions = glGetString(GL_EXTENSIONS);\r
+  }\r
+  /* It takes a bit of care to be fool-proof about parsing the\r
+     OpenGL extensions string.  Don't be fooled by sub-strings,\r
+     etc. */\r
+  start = extensions;\r
+  for (;;) {\r
+    /* If your application crashes in the strstr routine below,\r
+       you are probably calling glutExtensionSupported without\r
+       having a current window.  Calling glGetString without\r
+       a current OpenGL context has unpredictable results.\r
+       Please fix your program. */\r
+    where = (GLubyte *) strstr((const char *) start, extension);\r
+    if (!where)\r
+      break;\r
+    terminator = where + strlen(extension);\r
+    if (where == start || *(where - 1) == ' ') {\r
+      if (*terminator == ' ' || *terminator == '\0') {\r
+        return 1;\r
+      }\r
+    }\r
+    start = terminator;\r
+  }\r
+  return 0;\r
+}\r
+\r
+\r
+struct name_address_pair {\r
+   const char *name;\r
+   const void *address;\r
+};\r
+\r
+static struct name_address_pair glut_functions[] = {\r
+   { "glutInit", (const void *) glutInit },\r
+   { "glutInitDisplayMode", (const void *) glutInitDisplayMode },\r
+   { "glutInitDisplayString", (const void *) glutInitDisplayString },\r
+   { "glutInitWindowPosition", (const void *) glutInitWindowPosition },\r
+   { "glutInitWindowSize", (const void *) glutInitWindowSize },\r
+   { "glutMainLoop", (const void *) glutMainLoop },\r
+   { "glutCreateWindow", (const void *) glutCreateWindow },\r
+   { "glutCreateSubWindow", (const void *) glutCreateSubWindow },\r
+   { "glutDestroyWindow", (const void *) glutDestroyWindow },\r
+   { "glutPostRedisplay", (const void *) glutPostRedisplay },\r
+   { "glutPostWindowRedisplay", (const void *) glutPostWindowRedisplay },\r
+   { "glutSwapBuffers", (const void *) glutSwapBuffers },\r
+   { "glutGetWindow", (const void *) glutGetWindow },\r
+   { "glutSetWindow", (const void *) glutSetWindow },\r
+   { "glutSetWindowTitle", (const void *) glutSetWindowTitle },\r
+   { "glutSetIconTitle", (const void *) glutSetIconTitle },\r
+   { "glutPositionWindow", (const void *) glutPositionWindow },\r
+   { "glutReshapeWindow", (const void *) glutReshapeWindow },\r
+   { "glutPopWindow", (const void *) glutPopWindow },\r
+   { "glutPushWindow", (const void *) glutPushWindow },\r
+   { "glutIconifyWindow", (const void *) glutIconifyWindow },\r
+   { "glutShowWindow", (const void *) glutShowWindow },\r
+   { "glutHideWindow", (const void *) glutHideWindow },\r
+   { "glutFullScreen", (const void *) glutFullScreen },\r
+   { "glutSetCursor", (const void *) glutSetCursor },\r
+   { "glutWarpPointer", (const void *) glutWarpPointer },\r
+   { "glutEstablishOverlay", (const void *) glutEstablishOverlay },\r
+   { "glutRemoveOverlay", (const void *) glutRemoveOverlay },\r
+   { "glutUseLayer", (const void *) glutUseLayer },\r
+   { "glutPostOverlayRedisplay", (const void *) glutPostOverlayRedisplay },\r
+   { "glutPostWindowOverlayRedisplay", (const void *) glutPostWindowOverlayRedisplay },\r
+   { "glutShowOverlay", (const void *) glutShowOverlay },\r
+   { "glutHideOverlay", (const void *) glutHideOverlay },\r
+   { "glutCreateMenu", (const void *) glutCreateMenu },\r
+   { "glutDestroyMenu", (const void *) glutDestroyMenu },\r
+   { "glutGetMenu", (const void *) glutGetMenu },\r
+   { "glutSetMenu", (const void *) glutSetMenu },\r
+   { "glutAddMenuEntry", (const void *) glutAddMenuEntry },\r
+   { "glutAddSubMenu", (const void *) glutAddSubMenu },\r
+   { "glutChangeToMenuEntry", (const void *) glutChangeToMenuEntry },\r
+   { "glutChangeToSubMenu", (const void *) glutChangeToSubMenu },\r
+   { "glutRemoveMenuItem", (const void *) glutRemoveMenuItem },\r
+   { "glutAttachMenu", (const void *) glutAttachMenu },\r
+   { "glutDetachMenu", (const void *) glutDetachMenu },\r
+   { "glutDisplayFunc", (const void *) glutDisplayFunc },\r
+   { "glutReshapeFunc", (const void *) glutReshapeFunc },\r
+   { "glutKeyboardFunc", (const void *) glutKeyboardFunc },\r
+   { "glutMouseFunc", (const void *) glutMouseFunc },\r
+   { "glutMotionFunc", (const void *) glutMotionFunc },\r
+   { "glutPassiveMotionFunc", (const void *) glutPassiveMotionFunc },\r
+   { "glutEntryFunc", (const void *) glutEntryFunc },\r
+   { "glutVisibilityFunc", (const void *) glutVisibilityFunc },\r
+   { "glutIdleFunc", (const void *) glutIdleFunc },\r
+   { "glutTimerFunc", (const void *) glutTimerFunc },\r
+   { "glutMenuStateFunc", (const void *) glutMenuStateFunc },\r
+   { "glutSpecialFunc", (const void *) glutSpecialFunc },\r
+   { "glutSpaceballMotionFunc", (const void *) glutSpaceballMotionFunc },\r
+   { "glutSpaceballRotateFunc", (const void *) glutSpaceballRotateFunc },\r
+   { "glutSpaceballButtonFunc", (const void *) glutSpaceballButtonFunc },\r
+   { "glutButtonBoxFunc", (const void *) glutButtonBoxFunc },\r
+   { "glutDialsFunc", (const void *) glutDialsFunc },\r
+   { "glutTabletMotionFunc", (const void *) glutTabletMotionFunc },\r
+   { "glutTabletButtonFunc", (const void *) glutTabletButtonFunc },\r
+   { "glutMenuStatusFunc", (const void *) glutMenuStatusFunc },\r
+   { "glutOverlayDisplayFunc", (const void *) glutOverlayDisplayFunc },\r
+   { "glutWindowStatusFunc", (const void *) glutWindowStatusFunc },\r
+   { "glutKeyboardUpFunc", (const void *) glutKeyboardUpFunc },\r
+   { "glutSpecialUpFunc", (const void *) glutSpecialUpFunc },\r
+   { "glutJoystickFunc", (const void *) glutJoystickFunc },\r
+   { "glutSetColor", (const void *) glutSetColor },\r
+   { "glutGetColor", (const void *) glutGetColor },\r
+   { "glutCopyColormap", (const void *) glutCopyColormap },\r
+   { "glutGet", (const void *) glutGet },\r
+   { "glutDeviceGet", (const void *) glutDeviceGet },\r
+   { "glutExtensionSupported", (const void *) glutExtensionSupported },\r
+   { "glutGetModifiers", (const void *) glutGetModifiers },\r
+   { "glutLayerGet", (const void *) glutLayerGet },\r
+   { "glutGetProcAddress", (const void *) glutGetProcAddress },\r
+   { "glutBitmapCharacter", (const void *) glutBitmapCharacter },\r
+   { "glutBitmapWidth", (const void *) glutBitmapWidth },\r
+   { "glutStrokeCharacter", (const void *) glutStrokeCharacter },\r
+   { "glutStrokeWidth", (const void *) glutStrokeWidth },\r
+   { "glutBitmapLength", (const void *) glutBitmapLength },\r
+   { "glutStrokeLength", (const void *) glutStrokeLength },\r
+   { "glutWireSphere", (const void *) glutWireSphere },\r
+   { "glutSolidSphere", (const void *) glutSolidSphere },\r
+   { "glutWireCone", (const void *) glutWireCone },\r
+   { "glutSolidCone", (const void *) glutSolidCone },\r
+   { "glutWireCube", (const void *) glutWireCube },\r
+   { "glutSolidCube", (const void *) glutSolidCube },\r
+   { "glutWireTorus", (const void *) glutWireTorus },\r
+   { "glutSolidTorus", (const void *) glutSolidTorus },\r
+   { "glutWireDodecahedron", (const void *) glutWireDodecahedron },\r
+   { "glutSolidDodecahedron", (const void *) glutSolidDodecahedron },\r
+   { "glutWireTeapot", (const void *) glutWireTeapot },\r
+   { "glutSolidTeapot", (const void *) glutSolidTeapot },\r
+   { "glutWireOctahedron", (const void *) glutWireOctahedron },\r
+   { "glutSolidOctahedron", (const void *) glutSolidOctahedron },\r
+   { "glutWireTetrahedron", (const void *) glutWireTetrahedron },\r
+   { "glutSolidTetrahedron", (const void *) glutSolidTetrahedron },\r
+   { "glutWireIcosahedron", (const void *) glutWireIcosahedron },\r
+   { "glutSolidIcosahedron", (const void *) glutSolidIcosahedron },\r
+   { "glutVideoResizeGet", (const void *) glutVideoResizeGet },\r
+   { "glutSetupVideoResizing", (const void *) glutSetupVideoResizing },\r
+   { "glutStopVideoResizing", (const void *) glutStopVideoResizing },\r
+   { "glutVideoResize", (const void *) glutVideoResize },\r
+   { "glutVideoPan", (const void *) glutVideoPan },\r
+   { "glutReportErrors", (const void *) glutReportErrors },\r
+   { "glutIgnoreKeyRepeat", (const void *) glutIgnoreKeyRepeat },\r
+   { "glutSetKeyRepeat", (const void *) glutSetKeyRepeat },\r
+   { "glutForceJoystickFunc", (const void *) glutForceJoystickFunc },\r
+   { "glutGameModeString", (const void *) glutGameModeString },\r
+   { "glutEnterGameMode", (const void *) glutEnterGameMode },\r
+   { "glutLeaveGameMode", (const void *) glutLeaveGameMode },\r
+   { "glutGameModeGet", (const void *) glutGameModeGet },\r
+   { NULL, NULL }\r
+};\r
+\r
+\r
+/* XXX This isn't an official GLUT function, yet */\r
+void * GLUTAPIENTRY\r
+glutGetProcAddress(const char *procName)\r
+{\r
+   /* Try GLUT functions first */\r
+   int i;\r
+   for (i = 0; glut_functions[i].name; i++) {\r
+      if (strcmp(glut_functions[i].name, procName) == 0)\r
+         return (void *) glut_functions[i].address;\r
+   }\r
+\r
+   /* Try core GL functions */\r
+#if defined(_WIN32)\r
+  return (void *) wglGetProcAddress((LPCSTR) procName);\r
+\r
+#elif  defined(__OS2PM__)\r
+  return (void *) wglGetProcAddress((char *) procName);\r
+#elif defined(GLX_ARB_get_proc_address)\r
+  return (void *) glXGetProcAddressARB((const GLubyte *) procName);\r
+#else\r
+  return NULL;\r
+#endif\r
+}\r
+\r
+\r
+/* ENDCENTRY */\r
diff --git a/src/glut/os2/glut_fullscrn.cpp b/src/glut/os2/glut_fullscrn.cpp
new file mode 100644 (file)
index 0000000..d6efb68
--- /dev/null
@@ -0,0 +1,38 @@
+\r
+/* Copyright (c) Mark J. Kilgard, 1995, 1998. */\r
+\r
+/* This program is freely distributable without licensing fees\r
+   and is provided without guarantee or warrantee expressed or\r
+   implied. This program is -not- in the public domain. */\r
+\r
+#include <assert.h>\r
+\r
+#include "glutint.h"\r
+\r
+/* CENTRY */\r
+void GLUTAPIENTRY\r
+glutFullScreen(void)\r
+{\r
+  assert(!__glutCurrentWindow->parent);\r
+  IGNORE_IN_GAME_MODE();\r
+#if !defined(_WIN32) && !defined(__OS2PM__)\r
+  if (__glutMotifHints == None) {\r
+    __glutMotifHints = XSGIFastInternAtom(__glutDisplay, "_MOTIF_WM_HINTS",\r
+      SGI_XA__MOTIF_WM_HINTS, 0);\r
+    if (__glutMotifHints == None) {\r
+      __glutWarning("Could not intern X atom for _MOTIF_WM_HINTS.");\r
+    }\r
+  }\r
+#endif\r
+\r
+  __glutCurrentWindow->desiredX = 0;\r
+  __glutCurrentWindow->desiredY = 0;\r
+  __glutCurrentWindow->desiredWidth = __glutScreenWidth;\r
+  __glutCurrentWindow->desiredHeight = __glutScreenHeight;\r
+  __glutCurrentWindow->desiredConfMask |= CWX | CWY | CWWidth | CWHeight;\r
+\r
+  __glutPutOnWorkList(__glutCurrentWindow,\r
+    GLUT_CONFIGURE_WORK | GLUT_FULL_SCREEN_WORK);\r
+}\r
+\r
+/* ENDCENTRY */\r
diff --git a/src/glut/os2/glut_gamemode.cpp b/src/glut/os2/glut_gamemode.cpp
new file mode 100644 (file)
index 0000000..50185d7
--- /dev/null
@@ -0,0 +1,680 @@
+\r
+/* Copyright (c) Mark J. Kilgard, 1998. */\r
+\r
+/* This program is freely distributable without licensing fees\r
+   and is provided without guarantee or warrantee expressed or\r
+   implied. This program is -not- in the public domain. */\r
+\r
+\r
+#include <assert.h>\r
+#include <stdio.h>\r
+#include <stdlib.h>\r
+#include <string.h>\r
+\r
+#include "glutint.h"\r
+\r
+#if !defined(_WIN32) && !defined(__OS2__)\r
+#include <X11/Xlib.h>\r
+#include <X11/Xatom.h>\r
+\r
+/* SGI optimization introduced in IRIX 6.3 to avoid X server\r
+   round trips for interning common X atoms. */\r
+#if defined(_SGI_EXTRA_PREDEFINES) && !defined(NO_FAST_ATOMS)\r
+#include <X11/SGIFastAtom.h>\r
+#else\r
+#define XSGIFastInternAtom(dpy,string,fast_name,how) XInternAtom(dpy,string,how)\r
+#endif\r
+#endif  /* not _WIN32 */\r
+\r
+int __glutDisplaySettingsChanged = 0;\r
+static DisplayMode *dmodes, *currentDm = NULL;\r
+static int ndmodes = -1;\r
+GLUTwindow *__glutGameModeWindow = NULL;\r
+\r
+#ifdef TEST\r
+static char *compstr[] =\r
+{\r
+  "none", "=", "!=", "<=", ">=", ">", "<", "~"\r
+};\r
+static char *capstr[] =\r
+{\r
+  "width", "height", "bpp", "hertz", "num"\r
+};\r
+#endif\r
+\r
+#if defined(__OS2__)\r
+void\r
+#else\r
+void __cdecl\r
+#endif\r
+__glutCloseDownGameMode(void)\r
+{\r
+  if (__glutDisplaySettingsChanged) {\r
+#ifdef _WIN32\r
+    /* Assumes that display settings have been changed, that\r
+       is __glutDisplaySettingsChanged is true. */\r
+    ChangeDisplaySettings(NULL, 0);\r
+#endif\r
+    __glutDisplaySettingsChanged = 0;\r
+  }\r
+  __glutGameModeWindow = NULL;\r
+}\r
+\r
+void GLUTAPIENTRY\r
+glutLeaveGameMode(void)\r
+{\r
+  if (__glutGameModeWindow == NULL) {\r
+    __glutWarning("not in game mode so cannot leave game mode");\r
+    return;\r
+  }\r
+  __glutDestroyWindow(__glutGameModeWindow,\r
+    __glutGameModeWindow);\r
+  XFlush(__glutDisplay);\r
+  __glutGameModeWindow = NULL;\r
+}\r
+\r
+#ifdef _WIN32\r
+\r
+/* Same values as from MSDN's SetDisp.c example. */\r
+#define MIN_WIDTH 400\r
+#define MIN_FREQUENCY 60\r
+\r
+static void\r
+initGameModeSupport(void)\r
+{\r
+  DEVMODE dm;\r
+  DWORD mode;\r
+  int i;\r
+\r
+  if (ndmodes >= 0) {\r
+    /* ndmodes is initially -1 to indicate no\r
+       dmodes allocated yet. */\r
+    return;\r
+  }\r
+\r
+  /* Determine how many display modes there are. */\r
+  ndmodes = 0;\r
+  mode = 0;\r
+  while (EnumDisplaySettings(NULL, mode, &dm)) {\r
+    if (dm.dmPelsWidth >= MIN_WIDTH &&\r
+      (dm.dmDisplayFrequency == 0 ||\r
+      dm.dmDisplayFrequency >= MIN_FREQUENCY)) {\r
+      ndmodes++;\r
+    }\r
+    mode++;\r
+  }\r
+\r
+  /* Allocate memory for a list of all the display modes. */\r
+  dmodes = (DisplayMode*)\r
+    malloc(ndmodes * sizeof(DisplayMode));\r
+\r
+  /* Now that we know how many display modes to expect,\r
+     enumerate them again and save the information in\r
+     the list we allocated above. */\r
+  i = 0;\r
+  mode = 0;\r
+  while (EnumDisplaySettings(NULL, mode, &dm)) {\r
+    /* Try to reject any display settings that seem unplausible. */\r
+    if (dm.dmPelsWidth >= MIN_WIDTH &&\r
+      (dm.dmDisplayFrequency == 0 ||\r
+      dm.dmDisplayFrequency >= MIN_FREQUENCY)) {\r
+      dmodes[i].devmode = dm;\r
+      dmodes[i].valid = 1;  /* XXX Not used for now. */\r
+      dmodes[i].cap[DM_WIDTH] = dm.dmPelsWidth;\r
+      dmodes[i].cap[DM_HEIGHT] = dm.dmPelsHeight;\r
+      dmodes[i].cap[DM_PIXEL_DEPTH] = dm.dmBitsPerPel;\r
+      if (dm.dmDisplayFrequency == 0) {\r
+       /* Guess a reasonable guess. */\r
+       /* Lame Windows 95 version of EnumDisplaySettings. */\r
+        dmodes[i].cap[DM_HERTZ] = 60;\r
+      } else {\r
+       dmodes[i].cap[DM_HERTZ] = dm.dmDisplayFrequency;\r
+      }\r
+      i++;\r
+    }\r
+    mode++;\r
+  }\r
+\r
+  assert(i == ndmodes);\r
+}\r
+\r
+#else\r
+\r
+/* X Windows version of initGameModeSupport. */\r
+static void\r
+initGameModeSupport(void)\r
+{\r
+  if (ndmodes >= 0) {\r
+    /* ndmodes is initially -1 to indicate no\r
+       dmodes allocated yet. */\r
+    return;\r
+  }\r
+\r
+  /* Determine how many display modes there are. */\r
+  ndmodes = 0;\r
+}\r
+\r
+#endif\r
+\r
+/* This routine is based on similiar code in glut_dstr.c */\r
+static DisplayMode *\r
+findMatch(DisplayMode * dmodes, int ndmodes,\r
+  Criterion * criteria, int ncriteria)\r
+{\r
+  DisplayMode *found;\r
+  int *bestScore, *thisScore;\r
+  int i, j, numok, result = 0, worse, better;\r
+\r
+  found = NULL;\r
+  numok = 1;            /* "num" capability is indexed from 1,\r
+                           not 0. */\r
+\r
+  /* XXX alloca canidate. */\r
+  bestScore = (int *) malloc(ncriteria * sizeof(int));\r
+  if (!bestScore) {\r
+    __glutFatalError("out of memory.");\r
+  }\r
+  for (j = 0; j < ncriteria; j++) {\r
+    /* Very negative number. */\r
+    bestScore[j] = -32768;\r
+  }\r
+\r
+  /* XXX alloca canidate. */\r
+  thisScore = (int *) malloc(ncriteria * sizeof(int));\r
+  if (!thisScore) {\r
+    __glutFatalError("out of memory.");\r
+  }\r
+\r
+  for (i = 0; i < ndmodes; i++) {\r
+    if (dmodes[i].valid) {\r
+      worse = 0;\r
+      better = 0;\r
+\r
+      for (j = 0; j < ncriteria; j++) {\r
+        int cap, cvalue, dvalue;\r
+\r
+        cap = criteria[j].capability;\r
+        cvalue = criteria[j].value;\r
+        if (cap == NUM) {\r
+          dvalue = numok;\r
+        } else {\r
+          dvalue = dmodes[i].cap[cap];\r
+        }\r
+#ifdef TEST\r
+        if (verbose)\r
+          printf("  %s %s %d to %d\n",\r
+            capstr[cap], compstr[criteria[j].comparison], cvalue, dvalue);\r
+#endif\r
+        switch (criteria[j].comparison) {\r
+        case EQ:\r
+          result = cvalue == dvalue;\r
+          thisScore[j] = 1;\r
+          break;\r
+        case NEQ:\r
+          result = cvalue != dvalue;\r
+          thisScore[j] = 1;\r
+          break;\r
+        case LT:\r
+          result = dvalue < cvalue;\r
+          thisScore[j] = dvalue - cvalue;\r
+          break;\r
+        case GT:\r
+          result = dvalue > cvalue;\r
+          thisScore[j] = dvalue - cvalue;\r
+          break;\r
+        case LTE:\r
+          result = dvalue <= cvalue;\r
+          thisScore[j] = dvalue - cvalue;\r
+          break;\r
+        case GTE:\r
+          result = (dvalue >= cvalue);\r
+          thisScore[j] = dvalue - cvalue;\r
+          break;\r
+        case MIN:\r
+          result = dvalue >= cvalue;\r
+          thisScore[j] = cvalue - dvalue;\r
+          break;\r
+        }\r
+\r
+#ifdef TEST\r
+        if (verbose)\r
+          printf("                result=%d   score=%d   bestScore=%d\n", result, thisScore[j], bestScore[j]);\r
+#endif\r
+\r
+        if (result) {\r
+          if (better || thisScore[j] > bestScore[j]) {\r
+            better = 1;\r
+          } else if (thisScore[j] == bestScore[j]) {\r
+            /* Keep looking. */\r
+          } else {\r
+            goto nextDM;\r
+          }\r
+        } else {\r
+          if (cap == NUM) {\r
+            worse = 1;\r
+          } else {\r
+            goto nextDM;\r
+          }\r
+        }\r
+\r
+      }\r
+\r
+      if (better && !worse) {\r
+        found = &dmodes[i];\r
+        for (j = 0; j < ncriteria; j++) {\r
+          bestScore[j] = thisScore[j];\r
+        }\r
+      }\r
+      numok++;\r
+\r
+    nextDM:;\r
+\r
+    }\r
+  }\r
+  free(bestScore);\r
+  free(thisScore);\r
+  return found;\r
+}\r
+\r
+/**\r
+ * Parses strings in the form of:\r
+ *  800x600\r
+ *  800x600:16\r
+ *  800x600@60\r
+ *  800x600:16@60\r
+ *  @60\r
+ *  :16\r
+ *  :16@60\r
+ * NOTE that @ before : is not parsed.\r
+ */\r
+static int\r
+specialCaseParse(char *word, Criterion * criterion, int mask)\r
+{\r
+  char *xstr, *response;\r
+  int got;\r
+  int width, height, bpp, hertz;\r
+\r
+  switch(word[0]) {\r
+  case '0':\r
+  case '1':\r
+  case '2':\r
+  case '3':\r
+  case '4':\r
+  case '5':\r
+  case '6':\r
+  case '7':\r
+  case '8':\r
+  case '9':\r
+    /* The WWWxHHH case. */\r
+    if (mask & (1 << DM_WIDTH)) {\r
+      return -1;\r
+    }\r
+    xstr = strpbrk(&word[1], "x");\r
+    if (xstr) {\r
+      width = (int) strtol(word, &response, 0);\r
+      if (response == word || response[0] != 'x') {\r
+        /* Not a valid number OR needs to be followed by 'x'. */\r
+       return -1;\r
+      }\r
+      height = (int) strtol(&xstr[1], &response, 0);\r
+      if (response == &xstr[1]) {\r
+        /* Not a valid number. */\r
+       return -1;\r
+      }\r
+      criterion[0].capability = DM_WIDTH;\r
+      criterion[0].comparison = EQ;\r
+      criterion[0].value = width;\r
+      criterion[1].capability = DM_HEIGHT;\r
+      criterion[1].comparison = EQ;\r
+      criterion[1].value = height;\r
+      got = specialCaseParse(response,\r
+        &criterion[2], 1 << DM_WIDTH);\r
+      if (got >= 0) {\r
+        return got + 2;\r
+      } else {\r
+        return -1;\r
+      }\r
+    }\r
+    return -1;\r
+  case ':':\r
+    /* The :BPP case. */\r
+    if (mask & (1 << DM_PIXEL_DEPTH)) {\r
+      return -1;\r
+    }\r
+    bpp = (int) strtol(&word[1], &response, 0);\r
+    if (response == &word[1]) {\r
+      /* Not a valid number. */\r
+      return -1;\r
+    }\r
+    criterion[0].capability = DM_PIXEL_DEPTH;\r
+    criterion[0].comparison = EQ;\r
+    criterion[0].value = bpp;\r
+    got = specialCaseParse(response,\r
+      &criterion[1], (1 << DM_WIDTH) | (1 << DM_PIXEL_DEPTH));\r
+    if (got >= 0) {\r
+      return got + 1;\r
+    } else {\r
+      return -1;\r
+    }\r
+  case '@':\r
+    /* The @HZ case. */\r
+    if (mask & (1 << DM_HERTZ)) {\r
+      return -1;\r
+    }\r
+    hertz = (int) strtol(&word[1], &response, 0);\r
+    if (response == &word[1]) {\r
+      /* Not a valid number. */\r
+      return -1;\r
+    }\r
+    criterion[0].capability = DM_HERTZ;\r
+    criterion[0].comparison = EQ;\r
+    criterion[0].value = hertz;\r
+    got = specialCaseParse(response,\r
+      &criterion[1], ~DM_HERTZ);\r
+    if (got >= 0) {\r
+      return got + 1;\r
+    } else {\r
+      return -1;\r
+    }\r
+  case '\0':\r
+    return 0;\r
+  }\r
+  return -1;\r
+}\r
+\r
+/* This routine is based on similiar code in glut_dstr.c */\r
+static int\r
+parseCriteria(char *word, Criterion * criterion)\r
+{\r
+  char *cstr, *vstr, *response;\r
+  int comparator, value = 0;\r
+\r
+  cstr = strpbrk(word, "=><!~");\r
+  if (cstr) {\r
+    switch (cstr[0]) {\r
+    case '=':\r
+      comparator = EQ;\r
+      vstr = &cstr[1];\r
+      break;\r
+    case '~':\r
+      comparator = MIN;\r
+      vstr = &cstr[1];\r
+      break;\r
+    case '>':\r
+      if (cstr[1] == '=') {\r
+        comparator = GTE;\r
+        vstr = &cstr[2];\r
+      } else {\r
+        comparator = GT;\r
+        vstr = &cstr[1];\r
+      }\r
+      break;\r
+    case '<':\r
+      if (cstr[1] == '=') {\r
+        comparator = LTE;\r
+        vstr = &cstr[2];\r
+      } else {\r
+        comparator = LT;\r
+        vstr = &cstr[1];\r
+      }\r
+      break;\r
+    case '!':\r
+      if (cstr[1] == '=') {\r
+        comparator = NEQ;\r
+        vstr = &cstr[2];\r
+      } else {\r
+        return -1;\r
+      }\r
+      break;\r
+    default:\r
+      return -1;\r
+    }\r
+    value = (int) strtol(vstr, &response, 0);\r
+    if (response == vstr) {\r
+      /* Not a valid number. */\r
+      return -1;\r
+    }\r
+    *cstr = '\0';\r
+  } else {\r
+    comparator = NONE;\r
+  }\r
+  switch (word[0]) {\r
+  case 'b':\r
+    if (!strcmp(word, "bpp")) {\r
+      criterion[0].capability = DM_PIXEL_DEPTH;\r
+      if (comparator == NONE) {\r
+        return -1;\r
+      } else {\r
+        criterion[0].comparison = comparator;\r
+        criterion[0].value = value;\r
+        return 1;\r
+      }\r
+    }\r
+    return -1;\r
+  case 'h':\r
+    if (!strcmp(word, "height")) {\r
+      criterion[0].capability = DM_HEIGHT;\r
+      if (comparator == NONE) {\r
+        return -1;\r
+      } else {\r
+        criterion[0].comparison = comparator;\r
+        criterion[0].value = value;\r
+        return 1;\r
+      }\r
+    }\r
+    if (!strcmp(word, "hertz")) {\r
+      criterion[0].capability = DM_HERTZ;\r
+      if (comparator == NONE) {\r
+        return -1;\r
+      } else {\r
+        criterion[0].comparison = comparator;\r
+        criterion[0].value = value;\r
+        return 1;\r
+      }\r
+    }\r
+    return -1;\r
+  case 'n':\r
+    if (!strcmp(word, "num")) {\r
+      criterion[0].capability = DM_NUM;\r
+      if (comparator == NONE) {\r
+        return -1;\r
+      } else {\r
+        criterion[0].comparison = comparator;\r
+        criterion[0].value = value;\r
+        return 1;\r
+      }\r
+    }\r
+    return -1;\r
+  case 'w':\r
+    if (!strcmp(word, "width")) {\r
+      criterion[0].capability = DM_WIDTH;\r
+      if (comparator == NONE) {\r
+        return -1;\r
+      } else {\r
+        criterion[0].comparison = comparator;\r
+        criterion[0].value = value;\r
+        return 1;\r
+      }\r
+    }\r
+    return -1;\r
+  }\r
+  if (comparator == NONE) {\r
+    return specialCaseParse(word, criterion, 0);\r
+  }\r
+  return -1;\r
+}\r
+\r
+/* This routine is based on similiar code in glut_dstr.c */\r
+static Criterion *\r
+parseDisplayString(const char *display, int *ncriteria)\r
+{\r
+  Criterion *criteria = NULL;\r
+  int n, parsed;\r
+  char *copy, *word;\r
+\r
+  copy = __glutStrdup(display);\r
+  /* Attempt to estimate how many criteria entries should be\r
+     needed. */\r
+  n = 0;\r
+  word = strtok(copy, " \t");\r
+  while (word) {\r
+    n++;\r
+    word = strtok(NULL, " \t");\r
+  }\r
+  /* Allocate number of words of criteria.  A word\r
+     could contain as many as four criteria in the\r
+     worst case.  Example: 800x600:16@60 */\r
+  criteria = (Criterion *) malloc(4 * n * sizeof(Criterion));\r
+  if (!criteria) {\r
+    __glutFatalError("out of memory.");\r
+  }\r
+\r
+  /* Re-copy the copy of the display string. */\r
+  strcpy(copy, display);\r
+\r
+  n = 0;\r
+  word = strtok(copy, " \t");\r
+  while (word) {\r
+    parsed = parseCriteria(word, &criteria[n]);\r
+    if (parsed >= 0) {\r
+      n += parsed;\r
+    } else {\r
+      __glutWarning("Unrecognized game mode string word: %s (ignoring)\n", word);\r
+    }\r
+    word = strtok(NULL, " \t");\r
+  }\r
+\r
+  free(copy);\r
+  *ncriteria = n;\r
+  return criteria;\r
+}\r
+\r
+void GLUTAPIENTRY\r
+glutGameModeString(const char *string)\r
+{\r
+  Criterion *criteria;\r
+  int ncriteria;\r
+\r
+  initGameModeSupport();\r
+  criteria = parseDisplayString(string, &ncriteria);\r
+  currentDm = findMatch(dmodes, ndmodes, criteria, ncriteria);\r
+  free(criteria);\r
+}\r
+\r
+int GLUTAPIENTRY\r
+glutEnterGameMode(void)\r
+{\r
+  GLUTwindow *window;\r
+  int width, height;\r
+  Window win;\r
+\r
+  if (__glutMappedMenu) {\r
+    __glutFatalUsage("entering game mode not allowed while menus in use");\r
+  }\r
+  if (__glutGameModeWindow) {\r
+    /* Already in game mode, so blow away game mode\r
+       window so apps can change resolutions. */\r
+    window = __glutGameModeWindow;\r
+    /* Setting the game mode window to NULL tricks\r
+       the window destroy code into not undoing the\r
+       screen display change since we plan on immediately\r
+       doing another mode change. */\r
+    __glutGameModeWindow = NULL;\r
+    __glutDestroyWindow(window, window);\r
+  }\r
+\r
+  /* Assume default screen size until we find out if we\r
+     can actually change the display settings. */\r
+  width = __glutScreenWidth;\r
+  height = __glutScreenHeight;\r
+\r
+  if (currentDm) {\r
+#ifdef _WIN32\r
+    LONG status;\r
+    static int registered = 0;\r
+\r
+    status = ChangeDisplaySettings(&currentDm->devmode,\r
+      CDS_FULLSCREEN);\r
+    if (status == DISP_CHANGE_SUCCESSFUL) {\r
+      __glutDisplaySettingsChanged = 1;\r
+      width = currentDm->cap[DM_WIDTH];\r
+      height = currentDm->cap[DM_HEIGHT];\r
+      if (!registered) {\r
+        atexit(__glutCloseDownGameMode);\r
+        registered = 1;\r
+      }\r
+    } else {\r
+      /* Switch back to default resolution. */\r
+      ChangeDisplaySettings(NULL, 0);\r
+    }\r
+#endif\r
+  }\r
+\r
+  window = __glutCreateWindow(NULL, 0, 0,\r
+    width, height, /* game mode */ 1);\r
+  win = window->win;\r
+\r
+#if !defined(_WIN32) && !defined(__OS2__)\r
+  if (__glutMotifHints == None) {\r
+    __glutMotifHints = XSGIFastInternAtom(__glutDisplay, "_MOTIF_WM_HINTS",\r
+      SGI_XA__MOTIF_WM_HINTS, 0);\r
+    if (__glutMotifHints == None) {\r
+      __glutWarning("Could not intern X atom for _MOTIF_WM_HINTS.");\r
+    }\r
+  }\r
+\r
+  /* Game mode window is a toplevel window. */\r
+  XSetWMProtocols(__glutDisplay, win, &__glutWMDeleteWindow, 1);\r
+#endif\r
+\r
+  /* Schedule the fullscreen property to be added and to\r
+     make sure the window is configured right.  Win32\r
+     doesn't need this. */\r
+  window->desiredX = 0;\r
+  window->desiredY = 0;\r
+  window->desiredWidth = width;\r
+  window->desiredHeight = height;\r
+  window->desiredConfMask |= CWX | CWY | CWWidth | CWHeight;\r
+#ifdef _WIN32\r
+  /* Win32 does not want to use GLUT_FULL_SCREEN_WORK\r
+     for game mode because we need to be maximizing\r
+     the window in game mode, not just sizing it to\r
+     take up the full screen.  The Win32-ness of game\r
+     mode happens when you pass 1 in the gameMode parameter\r
+     to __glutCreateWindow above.  A gameMode of creates\r
+     a WS_POPUP window, not a standard WS_OVERLAPPEDWINDOW\r
+     window.  WS_POPUP ensures the taskbar is hidden. */\r
+  __glutPutOnWorkList(window,\r
+    GLUT_CONFIGURE_WORK);\r
+#else\r
+  __glutPutOnWorkList(window,\r
+    GLUT_CONFIGURE_WORK | GLUT_FULL_SCREEN_WORK);\r
+#endif\r
+\r
+  __glutGameModeWindow = window;\r
+  return window->num + 1;\r
+}\r
+\r
+int GLUTAPIENTRY\r
+glutGameModeGet(GLenum mode)\r
+{\r
+  switch (mode) {\r
+  case GLUT_GAME_MODE_ACTIVE:\r
+    return __glutGameModeWindow != NULL;\r
+  case GLUT_GAME_MODE_POSSIBLE:\r
+    return currentDm != NULL;\r
+  case GLUT_GAME_MODE_WIDTH:\r
+    return currentDm ? currentDm->cap[DM_WIDTH] : -1;\r
+  case GLUT_GAME_MODE_HEIGHT:\r
+    return currentDm ? currentDm->cap[DM_HEIGHT] : -1;\r
+  case GLUT_GAME_MODE_PIXEL_DEPTH:\r
+    return currentDm ? currentDm->cap[DM_PIXEL_DEPTH] : -1;\r
+  case GLUT_GAME_MODE_REFRESH_RATE:\r
+    return currentDm ? currentDm->cap[DM_HERTZ] : -1;\r
+  case GLUT_GAME_MODE_DISPLAY_CHANGED:\r
+    return __glutDisplaySettingsChanged;\r
+  default:\r
+    return -1;\r
+  }\r
+}\r
+\1a
\ No newline at end of file
diff --git a/src/glut/os2/glut_get.cpp b/src/glut/os2/glut_get.cpp
new file mode 100644 (file)
index 0000000..c846f48
--- /dev/null
@@ -0,0 +1,232 @@
+\r
+/* Copyright (c) Mark J. Kilgard, 1994, 1997, 1998. */\r
+\r
+/* This program is freely distributable without licensing fees\r
+   and is provided without guarantee or warrantee expressed or\r
+   implied. This program is -not- in the public domain. */\r
+\r
+#include <assert.h>\r
+#include <stdlib.h>  /* SunOS 4 needs NULL defined for GETTIMEOFDAY macro. */\r
+#include "glutint.h"\r
+\r
+/* CENTRY */\r
+int GLUTAPIENTRY\r
+glutGet(GLenum param)\r
+{\r
+  Window win, root;\r
+  int x, y, value;\r
+  unsigned int width, height, border, depth;\r
+\r
+  switch (param) {\r
+  case GLUT_INIT_WINDOW_X:\r
+    return __glutInitX;\r
+  case GLUT_INIT_WINDOW_Y:\r
+    return __glutInitY;\r
+  case GLUT_INIT_WINDOW_WIDTH:\r
+    return __glutInitWidth;\r
+  case GLUT_INIT_WINDOW_HEIGHT:\r
+    return __glutInitHeight;\r
+  case GLUT_INIT_DISPLAY_MODE:\r
+    return __glutDisplayMode;\r
+  case GLUT_WINDOW_X:\r
+    XTranslateCoordinates(__glutDisplay, __glutCurrentWindow->win,\r
+      __glutRoot, 0, 0, &x, &y, &win);\r
+    return x;\r
+  case GLUT_WINDOW_Y:\r
+    XTranslateCoordinates(__glutDisplay, __glutCurrentWindow->win,\r
+      __glutRoot, 0, 0, &x, &y, &win);\r
+    return y;\r
+  case GLUT_WINDOW_WIDTH:\r
+    if (!__glutCurrentWindow->reshape) {\r
+      XGetGeometry(__glutDisplay, __glutCurrentWindow->win,\r
+        &root, &x, &y,\r
+        &width, &height, &border, &depth);\r
+      return width;\r
+    }\r
+    return __glutCurrentWindow->width;\r
+  case GLUT_WINDOW_HEIGHT:\r
+    if (!__glutCurrentWindow->reshape) {\r
+      XGetGeometry(__glutDisplay, __glutCurrentWindow->win,\r
+        &root, &x, &y,\r
+        &width, &height, &border, &depth);\r
+      return height;\r
+    }\r
+    return __glutCurrentWindow->height;\r
+#ifdef __OS2__\r
+ #define GET_CONFIG(attrib) \\r
+  { if (__glutCurrentWindow->renderWin == __glutCurrentWindow->win)  \\r
+       glXGetConfig( __glutCurrentWindow->vis, attrib, &value); \\r
+    else  \\r
+    glXGetConfig(__glutCurrentWindow->overlay->vis, attrib, &value); \\r
+  } \\r
+\r
+#else\r
+\r
+#define GET_CONFIG(attrib) { \\r
+  if (__glutCurrentWindow->renderWin == __glutCurrentWindow->win) { \\r
+    glXGetConfig(__glutDisplay, __glutCurrentWindow->vis, \\r
+      attrib, &value); \\r
+  } else { \\r
+    glXGetConfig(__glutDisplay, __glutCurrentWindow->overlay->vis, \\r
+      attrib, &value); \\r
+  } \\r
+}\r
+#endif\r
+\r
+  case GLUT_WINDOW_BUFFER_SIZE:\r
+    GET_CONFIG(GLX_BUFFER_SIZE);\r
+    return value;\r
+  case GLUT_WINDOW_STENCIL_SIZE:\r
+    GET_CONFIG(GLX_STENCIL_SIZE);\r
+    return value;\r
+  case GLUT_WINDOW_DEPTH_SIZE:\r
+    GET_CONFIG(GLX_DEPTH_SIZE);\r
+    return value;\r
+  case GLUT_WINDOW_RED_SIZE:\r
+    GET_CONFIG(GLX_RED_SIZE);\r
+    return value;\r
+  case GLUT_WINDOW_GREEN_SIZE:\r
+    GET_CONFIG(GLX_GREEN_SIZE);\r
+    return value;\r
+  case GLUT_WINDOW_BLUE_SIZE:\r
+    GET_CONFIG(GLX_BLUE_SIZE);\r
+    return value;\r
+  case GLUT_WINDOW_ALPHA_SIZE:\r
+    GET_CONFIG(GLX_ALPHA_SIZE);\r
+    return value;\r
+  case GLUT_WINDOW_ACCUM_RED_SIZE:\r
+    GET_CONFIG(GLX_ACCUM_RED_SIZE);\r
+    return value;\r
+  case GLUT_WINDOW_ACCUM_GREEN_SIZE:\r
+    GET_CONFIG(GLX_ACCUM_GREEN_SIZE);\r
+    return value;\r
+  case GLUT_WINDOW_ACCUM_BLUE_SIZE:\r
+    GET_CONFIG(GLX_ACCUM_BLUE_SIZE);\r
+    return value;\r
+  case GLUT_WINDOW_ACCUM_ALPHA_SIZE:\r
+    GET_CONFIG(GLX_ACCUM_ALPHA_SIZE);\r
+    return value;\r
+  case GLUT_WINDOW_DOUBLEBUFFER:\r
+    GET_CONFIG(GLX_DOUBLEBUFFER);\r
+    return value;\r
+  case GLUT_WINDOW_RGBA:\r
+    GET_CONFIG(GLX_RGBA);\r
+    return value;\r
+  case GLUT_WINDOW_COLORMAP_SIZE:\r
+    GET_CONFIG(GLX_RGBA);\r
+    if (value) {\r
+      return 0;\r
+    } else {\r
+#if defined(_WIN32) || defined(__OS2__)\r
+      /* KLUDGE: we always assume 256 colors in CI mode on\r
+         Win32 */\r
+      return 256;\r
+#else\r
+      if (__glutCurrentWindow->renderWin == __glutCurrentWindow->win) {\r
+        return __glutCurrentWindow->vis->visual->map_entries;\r
+      } else {\r
+        return __glutCurrentWindow->overlay->vis->visual->map_entries;\r
+      }\r
+#endif /* _WIN32 */\r
+    }\r
+  case GLUT_WINDOW_PARENT:\r
+    return __glutCurrentWindow->parent ?\r
+      __glutCurrentWindow->parent->num + 1 : 0;\r
+  case GLUT_WINDOW_NUM_CHILDREN:\r
+    {\r
+      int num = 0;\r
+      GLUTwindow *children = __glutCurrentWindow->children;\r
+\r
+      while (children) {\r
+        num++;\r
+        children = children->siblings;\r
+      }\r
+      return num;\r
+    }\r
+  case GLUT_WINDOW_NUM_SAMPLES:\r
+#if defined(GLX_VERSION_1_1) && defined(GLX_SGIS_multisample)\r
+    if (__glutIsSupportedByGLX("GLX_SGIS_multisample")) {\r
+      GET_CONFIG(GLX_SAMPLES_SGIS);\r
+      return value;\r
+    } else {\r
+      return 0;\r
+    }\r
+#else\r
+    /* Independent of GLX server support, multisampling not\r
+       supported by GLX client-side. */\r
+    return 0;\r
+#endif\r
+  case GLUT_WINDOW_STEREO:\r
+    GET_CONFIG(GLX_STEREO);\r
+    return value;\r
+  case GLUT_WINDOW_CURSOR:\r
+    return __glutCurrentWindow->cursor;\r
+  case GLUT_SCREEN_WIDTH:\r
+    return DisplayWidth(__glutDisplay, __glutScreen);\r
+  case GLUT_SCREEN_HEIGHT:\r
+    return DisplayHeight(__glutDisplay, __glutScreen);\r
+  case GLUT_SCREEN_WIDTH_MM:\r
+    return DisplayWidthMM(__glutDisplay, __glutScreen);\r
+  case GLUT_SCREEN_HEIGHT_MM:\r
+    return DisplayHeightMM(__glutDisplay, __glutScreen);\r
+  case GLUT_MENU_NUM_ITEMS:\r
+    return __glutCurrentMenu->num;\r
+  case GLUT_DISPLAY_MODE_POSSIBLE:\r
+    {\r
+      XVisualInfo *vi;\r
+      Bool dummy, visAlloced;\r
+      void *fbc;\r
+\r
+#if defined(_WIN32)\r
+      /* Our fake glXChooseVisual (which is called by\r
+         __glutDetermineVisual) needs an HDC to work with, so grab one\r
+         from the "root" window. */\r
+      XHDC = GetDC(GetDesktopWindow());\r
+#endif\r
+      vi = __glutDetermineWindowVisual(&dummy, &visAlloced, &fbc);\r
+#if defined(_WIN32)\r
+      ReleaseDC(GetDesktopWindow(), XHDC);\r
+#endif\r
+      if (vi) {\r
+        if (visAlloced)\r
+          XFree(vi);\r
+        return 1;\r
+      }\r
+      return 0;\r
+    }\r
+  case GLUT_ELAPSED_TIME:\r
+    {\r
+#ifdef OLD_VMS\r
+       struct timeval6 elapsed, beginning, now;\r
+#else\r
+       struct timeval elapsed, beginning, now;\r
+#endif\r
+\r
+       __glutInitTime(&beginning);\r
+      GETTIMEOFDAY(&now);\r
+      TIMEDELTA(elapsed, now, beginning);\r
+      /* Return elapsed milliseconds. */\r
+#if defined(__vms) && ( __VMS_VER < 70000000 )\r
+      return (int) (elapsed.val / TICKS_PER_MILLISECOND);\r
+#else\r
+      return (int) ((elapsed.tv_sec * 1000) + (elapsed.tv_usec / 1000));\r
+#endif\r
+    }\r
+  case GLUT_WINDOW_FORMAT_ID:\r
+#if defined(__OS2__)\r
+    return wglGetPixelFormat(__glutCurrentWindow->hdc);\r
+#elif defined(_WIN32)\r
+    return GetPixelFormat(__glutCurrentWindow->hdc);\r
+#else\r
+    if (__glutCurrentWindow->renderWin == __glutCurrentWindow->win) {\r
+      return (int) __glutCurrentWindow->vis->visualid;\r
+    } else {\r
+      return (int) __glutCurrentWindow->overlay->vis->visualid;\r
+    }\r
+#endif\r
+  default:\r
+    __glutWarning("invalid glutGet parameter: %d", param);\r
+    return -1;\r
+  }\r
+}\r
+/* ENDCENTRY */\r
diff --git a/src/glut/os2/glut_hel10.cpp b/src/glut/os2/glut_hel10.cpp
new file mode 100644 (file)
index 0000000..6409f61
--- /dev/null
@@ -0,0 +1,1781 @@
+\r
+/* GENERATED FILE -- DO NOT MODIFY */\r
+\r
+#define glutBitmapHelvetica10 XXX\r
+#include "glutbitmap.h"\r
+#undef glutBitmapHelvetica10\r
+\r
+/* char: 0xff */\r
+\r
+static const GLubyte ch255data[] = {\r
+0x80,0x40,0x40,0x60,0xa0,0xa0,0x90,0x90,0x0,0x50,\r
+};\r
+\r
+static const BitmapCharRec ch255 = {4,10,0,2,5,ch255data};\r
+\r
+/* char: 0xfe */\r
+\r
+static const GLubyte ch254data[] = {\r
+0x80,0x80,0xb0,0xc8,0x88,0x88,0xc8,0xb0,0x80,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch254 = {5,10,0,2,6,ch254data};\r
+\r
+/* char: 0xfd */\r
+\r
+static const GLubyte ch253data[] = {\r
+0x80,0x40,0x40,0x60,0xa0,0xa0,0x90,0x90,0x0,0x20,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch253 = {4,11,0,2,5,ch253data};\r
+\r
+/* char: 0xfc */\r
+\r
+static const GLubyte ch252data[] = {\r
+0x70,0x90,0x90,0x90,0x90,0x90,0x0,0x50,\r
+};\r
+\r
+static const BitmapCharRec ch252 = {4,8,0,0,5,ch252data};\r
+\r
+/* char: 0xfb */\r
+\r
+static const GLubyte ch251data[] = {\r
+0x70,0x90,0x90,0x90,0x90,0x90,0x0,0x50,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch251 = {4,9,0,0,5,ch251data};\r
+\r
+/* char: 0xfa */\r
+\r
+static const GLubyte ch250data[] = {\r
+0x70,0x90,0x90,0x90,0x90,0x90,0x0,0x40,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch250 = {4,9,0,0,5,ch250data};\r
+\r
+/* char: 0xf9 */\r
+\r
+static const GLubyte ch249data[] = {\r
+0x70,0x90,0x90,0x90,0x90,0x90,0x0,0x20,0x40,\r
+};\r
+\r
+static const BitmapCharRec ch249 = {4,9,0,0,5,ch249data};\r
+\r
+/* char: 0xf8 */\r
+\r
+static const GLubyte ch248data[] = {\r
+0x70,0x88,0xc8,0xa8,0x98,0x74,\r
+};\r
+\r
+static const BitmapCharRec ch248 = {6,6,0,0,6,ch248data};\r
+\r
+/* char: 0xf7 */\r
+\r
+static const GLubyte ch247data[] = {\r
+0x20,0x0,0xf8,0x0,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch247 = {5,5,0,-1,6,ch247data};\r
+\r
+/* char: 0xf6 */\r
+\r
+static const GLubyte ch246data[] = {\r
+0x70,0x88,0x88,0x88,0x88,0x70,0x0,0x50,\r
+};\r
+\r
+static const BitmapCharRec ch246 = {5,8,0,0,6,ch246data};\r
+\r
+/* char: 0xf5 */\r
+\r
+static const GLubyte ch245data[] = {\r
+0x70,0x88,0x88,0x88,0x88,0x70,0x0,0x50,0x28,\r
+};\r
+\r
+static const BitmapCharRec ch245 = {5,9,0,0,6,ch245data};\r
+\r
+/* char: 0xf4 */\r
+\r
+static const GLubyte ch244data[] = {\r
+0x70,0x88,0x88,0x88,0x88,0x70,0x0,0x50,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch244 = {5,9,0,0,6,ch244data};\r
+\r
+/* char: 0xf3 */\r
+\r
+static const GLubyte ch243data[] = {\r
+0x70,0x88,0x88,0x88,0x88,0x70,0x0,0x20,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch243 = {5,9,0,0,6,ch243data};\r
+\r
+/* char: 0xf2 */\r
+\r
+static const GLubyte ch242data[] = {\r
+0x70,0x88,0x88,0x88,0x88,0x70,0x0,0x20,0x40,\r
+};\r
+\r
+static const BitmapCharRec ch242 = {5,9,0,0,6,ch242data};\r
+\r
+/* char: 0xf1 */\r
+\r
+static const GLubyte ch241data[] = {\r
+0x90,0x90,0x90,0x90,0x90,0xe0,0x0,0xa0,0x50,\r
+};\r
+\r
+static const BitmapCharRec ch241 = {4,9,0,0,5,ch241data};\r
+\r
+/* char: 0xf0 */\r
+\r
+static const GLubyte ch240data[] = {\r
+0x70,0x88,0x88,0x88,0x88,0x78,0x90,0x60,0x50,\r
+};\r
+\r
+static const BitmapCharRec ch240 = {5,9,0,0,6,ch240data};\r
+\r
+/* char: 0xef */\r
+\r
+static const GLubyte ch239data[] = {\r
+0x40,0x40,0x40,0x40,0x40,0x40,0x0,0xa0,\r
+};\r
+\r
+static const BitmapCharRec ch239 = {3,8,0,0,2,ch239data};\r
+\r
+/* char: 0xee */\r
+\r
+static const GLubyte ch238data[] = {\r
+0x40,0x40,0x40,0x40,0x40,0x40,0x0,0xa0,0x40,\r
+};\r
+\r
+static const BitmapCharRec ch238 = {3,9,1,0,2,ch238data};\r
+\r
+/* char: 0xed */\r
+\r
+static const GLubyte ch237data[] = {\r
+0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x80,0x40,\r
+};\r
+\r
+static const BitmapCharRec ch237 = {2,9,0,0,2,ch237data};\r
+\r
+/* char: 0xec */\r
+\r
+static const GLubyte ch236data[] = {\r
+0x40,0x40,0x40,0x40,0x40,0x40,0x0,0x40,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch236 = {2,9,1,0,2,ch236data};\r
+\r
+/* char: 0xeb */\r
+\r
+static const GLubyte ch235data[] = {\r
+0x60,0x90,0x80,0xf0,0x90,0x60,0x0,0x50,\r
+};\r
+\r
+static const BitmapCharRec ch235 = {4,8,0,0,5,ch235data};\r
+\r
+/* char: 0xea */\r
+\r
+static const GLubyte ch234data[] = {\r
+0x60,0x90,0x80,0xf0,0x90,0x60,0x0,0x50,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch234 = {4,9,0,0,5,ch234data};\r
+\r
+/* char: 0xe9 */\r
+\r
+static const GLubyte ch233data[] = {\r
+0x60,0x90,0x80,0xf0,0x90,0x60,0x0,0x40,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch233 = {4,9,0,0,5,ch233data};\r
+\r
+/* char: 0xe8 */\r
+\r
+static const GLubyte ch232data[] = {\r
+0x60,0x90,0x80,0xf0,0x90,0x60,0x0,0x20,0x40,\r
+};\r
+\r
+static const BitmapCharRec ch232 = {4,9,0,0,5,ch232data};\r
+\r
+/* char: 0xe7 */\r
+\r
+static const GLubyte ch231data[] = {\r
+0x60,0x20,0x60,0x90,0x80,0x80,0x90,0x60,\r
+};\r
+\r
+static const BitmapCharRec ch231 = {4,8,0,2,5,ch231data};\r
+\r
+/* char: 0xe6 */\r
+\r
+static const GLubyte ch230data[] = {\r
+0x6c,0x92,0x90,0x7e,0x12,0xec,\r
+};\r
+\r
+static const BitmapCharRec ch230 = {7,6,0,0,8,ch230data};\r
+\r
+/* char: 0xe5 */\r
+\r
+static const GLubyte ch229data[] = {\r
+0x68,0x90,0x90,0x70,0x10,0xe0,0x20,0x50,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch229 = {5,9,0,0,5,ch229data};\r
+\r
+/* char: 0xe4 */\r
+\r
+static const GLubyte ch228data[] = {\r
+0x68,0x90,0x90,0x70,0x10,0xe0,0x0,0x50,\r
+};\r
+\r
+static const BitmapCharRec ch228 = {5,8,0,0,5,ch228data};\r
+\r
+/* char: 0xe3 */\r
+\r
+static const GLubyte ch227data[] = {\r
+0x68,0x90,0x90,0x70,0x10,0xe0,0x0,0xa0,0x50,\r
+};\r
+\r
+static const BitmapCharRec ch227 = {5,9,0,0,5,ch227data};\r
+\r
+/* char: 0xe2 */\r
+\r
+static const GLubyte ch226data[] = {\r
+0x68,0x90,0x90,0x70,0x10,0xe0,0x0,0x50,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch226 = {5,9,0,0,5,ch226data};\r
+\r
+/* char: 0xe1 */\r
+\r
+static const GLubyte ch225data[] = {\r
+0x68,0x90,0x90,0x70,0x10,0xe0,0x0,0x20,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch225 = {5,9,0,0,5,ch225data};\r
+\r
+/* char: 0xe0 */\r
+\r
+static const GLubyte ch224data[] = {\r
+0x68,0x90,0x90,0x70,0x10,0xe0,0x0,0x20,0x40,\r
+};\r
+\r
+static const BitmapCharRec ch224 = {5,9,0,0,5,ch224data};\r
+\r
+/* char: 0xdf */\r
+\r
+static const GLubyte ch223data[] = {\r
+0xa0,0x90,0x90,0x90,0xa0,0x90,0x90,0x60,\r
+};\r
+\r
+static const BitmapCharRec ch223 = {4,8,0,0,5,ch223data};\r
+\r
+/* char: 0xde */\r
+\r
+static const GLubyte ch222data[] = {\r
+0x80,0x80,0xf0,0x88,0x88,0xf0,0x80,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch222 = {5,8,-1,0,7,ch222data};\r
+\r
+/* char: 0xdd */\r
+\r
+static const GLubyte ch221data[] = {\r
+0x10,0x10,0x10,0x28,0x28,0x44,0x44,0x82,0x0,0x10,0x8,\r
+};\r
+\r
+static const BitmapCharRec ch221 = {7,11,0,0,7,ch221data};\r
+\r
+/* char: 0xdc */\r
+\r
+static const GLubyte ch220data[] = {\r
+0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x0,0x48,\r
+};\r
+\r
+static const BitmapCharRec ch220 = {6,10,-1,0,8,ch220data};\r
+\r
+/* char: 0xdb */\r
+\r
+static const GLubyte ch219data[] = {\r
+0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x0,0x28,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch219 = {6,11,-1,0,8,ch219data};\r
+\r
+/* char: 0xda */\r
+\r
+static const GLubyte ch218data[] = {\r
+0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x0,0x20,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch218 = {6,11,-1,0,8,ch218data};\r
+\r
+/* char: 0xd9 */\r
+\r
+static const GLubyte ch217data[] = {\r
+0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x0,0x10,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch217 = {6,11,-1,0,8,ch217data};\r
+\r
+/* char: 0xd8 */\r
+\r
+static const GLubyte ch216data[] = {\r
+0x80,0x78,0xc4,0xa4,0xa4,0x94,0x94,0x8c,0x78,0x4,\r
+};\r
+\r
+static const BitmapCharRec ch216 = {6,10,-1,1,8,ch216data};\r
+\r
+/* char: 0xd7 */\r
+\r
+static const GLubyte ch215data[] = {\r
+0x88,0x50,0x20,0x50,0x88,\r
+};\r
+\r
+static const BitmapCharRec ch215 = {5,5,0,-1,6,ch215data};\r
+\r
+/* char: 0xd6 */\r
+\r
+static const GLubyte ch214data[] = {\r
+0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x78,0x0,0x48,\r
+};\r
+\r
+static const BitmapCharRec ch214 = {6,10,-1,0,8,ch214data};\r
+\r
+/* char: 0xd5 */\r
+\r
+static const GLubyte ch213data[] = {\r
+0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x78,0x0,0x50,0x28,\r
+};\r
+\r
+static const BitmapCharRec ch213 = {6,11,-1,0,8,ch213data};\r
+\r
+/* char: 0xd4 */\r
+\r
+static const GLubyte ch212data[] = {\r
+0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x78,0x0,0x28,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch212 = {6,11,-1,0,8,ch212data};\r
+\r
+/* char: 0xd3 */\r
+\r
+static const GLubyte ch211data[] = {\r
+0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x78,0x0,0x10,0x8,\r
+};\r
+\r
+static const BitmapCharRec ch211 = {6,11,-1,0,8,ch211data};\r
+\r
+/* char: 0xd2 */\r
+\r
+static const GLubyte ch210data[] = {\r
+0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x78,0x0,0x10,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch210 = {6,11,-1,0,8,ch210data};\r
+\r
+/* char: 0xd1 */\r
+\r
+static const GLubyte ch209data[] = {\r
+0x8c,0x8c,0x94,0x94,0xa4,0xa4,0xc4,0xc4,0x0,0x50,0x28,\r
+};\r
+\r
+static const BitmapCharRec ch209 = {6,11,-1,0,8,ch209data};\r
+\r
+/* char: 0xd0 */\r
+\r
+static const GLubyte ch208data[] = {\r
+0x78,0x44,0x42,0x42,0xf2,0x42,0x44,0x78,\r
+};\r
+\r
+static const BitmapCharRec ch208 = {7,8,0,0,8,ch208data};\r
+\r
+/* char: 0xcf */\r
+\r
+static const GLubyte ch207data[] = {\r
+0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x0,0xa0,\r
+};\r
+\r
+static const BitmapCharRec ch207 = {3,10,0,0,3,ch207data};\r
+\r
+/* char: 0xce */\r
+\r
+static const GLubyte ch206data[] = {\r
+0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x0,0xa0,0x40,\r
+};\r
+\r
+static const BitmapCharRec ch206 = {3,11,0,0,3,ch206data};\r
+\r
+/* char: 0xcd */\r
+\r
+static const GLubyte ch205data[] = {\r
+0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x80,0x40,\r
+};\r
+\r
+static const BitmapCharRec ch205 = {2,11,-1,0,3,ch205data};\r
+\r
+/* char: 0xcc */\r
+\r
+static const GLubyte ch204data[] = {\r
+0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x0,0x40,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch204 = {2,11,0,0,3,ch204data};\r
+\r
+/* char: 0xcb */\r
+\r
+static const GLubyte ch203data[] = {\r
+0xf8,0x80,0x80,0x80,0xf8,0x80,0x80,0xf8,0x0,0x50,\r
+};\r
+\r
+static const BitmapCharRec ch203 = {5,10,-1,0,7,ch203data};\r
+\r
+/* char: 0xca */\r
+\r
+static const GLubyte ch202data[] = {\r
+0xf8,0x80,0x80,0xf8,0x80,0x80,0x80,0xf8,0x0,0x50,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch202 = {5,11,-1,0,7,ch202data};\r
+\r
+/* char: 0xc9 */\r
+\r
+static const GLubyte ch201data[] = {\r
+0xf8,0x80,0x80,0x80,0xf8,0x80,0x80,0xf8,0x0,0x20,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch201 = {5,11,-1,0,7,ch201data};\r
+\r
+/* char: 0xc8 */\r
+\r
+static const GLubyte ch200data[] = {\r
+0xf8,0x80,0x80,0x80,0xf8,0x80,0x80,0xf8,0x0,0x20,0x40,\r
+};\r
+\r
+static const BitmapCharRec ch200 = {5,11,-1,0,7,ch200data};\r
+\r
+/* char: 0xc7 */\r
+\r
+static const GLubyte ch199data[] = {\r
+0x30,0x10,0x78,0x84,0x80,0x80,0x80,0x80,0x84,0x78,\r
+};\r
+\r
+static const BitmapCharRec ch199 = {6,10,-1,2,8,ch199data};\r
+\r
+/* char: 0xc6 */\r
+\r
+static const GLubyte ch198data[] = {\r
+0x8f,0x80,0x88,0x0,0x78,0x0,0x48,0x0,0x2f,0x80,0x28,0x0,0x18,0x0,0x1f,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch198 = {9,8,0,0,10,ch198data};\r
+\r
+/* char: 0xc5 */\r
+\r
+static const GLubyte ch197data[] = {\r
+0x82,0x82,0x7c,0x44,0x28,0x28,0x10,0x10,0x10,0x28,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch197 = {7,11,0,0,7,ch197data};\r
+\r
+/* char: 0xc4 */\r
+\r
+static const GLubyte ch196data[] = {\r
+0x82,0x82,0x7c,0x44,0x28,0x28,0x10,0x10,0x0,0x28,\r
+};\r
+\r
+static const BitmapCharRec ch196 = {7,10,0,0,7,ch196data};\r
+\r
+/* char: 0xc3 */\r
+\r
+static const GLubyte ch195data[] = {\r
+0x82,0x82,0x7c,0x44,0x28,0x28,0x10,0x10,0x0,0x28,0x14,\r
+};\r
+\r
+static const BitmapCharRec ch195 = {7,11,0,0,7,ch195data};\r
+\r
+/* char: 0xc2 */\r
+\r
+static const GLubyte ch194data[] = {\r
+0x82,0x82,0x7c,0x44,0x28,0x28,0x10,0x10,0x0,0x28,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch194 = {7,11,0,0,7,ch194data};\r
+\r
+/* char: 0xc1 */\r
+\r
+static const GLubyte ch193data[] = {\r
+0x82,0x82,0x7c,0x44,0x28,0x28,0x10,0x10,0x0,0x10,0x8,\r
+};\r
+\r
+static const BitmapCharRec ch193 = {7,11,0,0,7,ch193data};\r
+\r
+/* char: 0xc0 */\r
+\r
+static const GLubyte ch192data[] = {\r
+0x82,0x82,0x7c,0x44,0x28,0x28,0x10,0x10,0x0,0x10,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch192 = {7,11,0,0,7,ch192data};\r
+\r
+/* char: 0xbf */\r
+\r
+static const GLubyte ch191data[] = {\r
+0x60,0x90,0x80,0x40,0x20,0x20,0x0,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch191 = {4,8,-1,2,6,ch191data};\r
+\r
+/* char: 0xbe */\r
+\r
+static const GLubyte ch190data[] = {\r
+0x21,0x0,0x17,0x80,0x13,0x0,0x9,0x0,0xc8,0x0,0x24,0x0,0x44,0x0,0xe2,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch190 = {9,8,0,0,9,ch190data};\r
+\r
+/* char: 0xbd */\r
+\r
+static const GLubyte ch189data[] = {\r
+0x27,0x12,0x15,0xb,0x48,0x44,0xc4,0x42,\r
+};\r
+\r
+static const BitmapCharRec ch189 = {8,8,0,0,9,ch189data};\r
+\r
+/* char: 0xbc */\r
+\r
+static const GLubyte ch188data[] = {\r
+0x21,0x0,0x17,0x80,0x13,0x0,0x9,0x0,0x48,0x0,0x44,0x0,0xc4,0x0,0x42,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch188 = {9,8,0,0,9,ch188data};\r
+\r
+/* char: 0xbb */\r
+\r
+static const GLubyte ch187data[] = {\r
+0xa0,0x50,0x28,0x50,0xa0,\r
+};\r
+\r
+static const BitmapCharRec ch187 = {5,5,0,0,6,ch187data};\r
+\r
+/* char: 0xba */\r
+\r
+static const GLubyte ch186data[] = {\r
+0xe0,0x0,0xe0,0xa0,0xe0,\r
+};\r
+\r
+static const BitmapCharRec ch186 = {3,5,0,-3,4,ch186data};\r
+\r
+/* char: 0xb9 */\r
+\r
+static const GLubyte ch185data[] = {\r
+0x40,0x40,0xc0,0x40,\r
+};\r
+\r
+static const BitmapCharRec ch185 = {2,4,0,-3,3,ch185data};\r
+\r
+/* char: 0xb8 */\r
+\r
+static const GLubyte ch184data[] = {\r
+0xc0,0x40,\r
+};\r
+\r
+static const BitmapCharRec ch184 = {2,2,0,2,3,ch184data};\r
+\r
+/* char: 0xb7 */\r
+\r
+static const GLubyte ch183data[] = {\r
+0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch183 = {2,1,0,-3,3,ch183data};\r
+\r
+/* char: 0xb6 */\r
+\r
+static const GLubyte ch182data[] = {\r
+0x28,0x28,0x28,0x28,0x28,0x68,0xe8,0xe8,0xe8,0x7c,\r
+};\r
+\r
+static const BitmapCharRec ch182 = {6,10,0,2,6,ch182data};\r
+\r
+/* char: 0xb5 */\r
+\r
+static const GLubyte ch181data[] = {\r
+0x80,0x80,0xf0,0x90,0x90,0x90,0x90,0x90,\r
+};\r
+\r
+static const BitmapCharRec ch181 = {4,8,0,2,5,ch181data};\r
+\r
+/* char: 0xb4 */\r
+\r
+static const GLubyte ch180data[] = {\r
+0x80,0x40,\r
+};\r
+\r
+static const BitmapCharRec ch180 = {2,2,0,-6,3,ch180data};\r
+\r
+/* char: 0xb3 */\r
+\r
+static const GLubyte ch179data[] = {\r
+0xc0,0x20,0x40,0xe0,\r
+};\r
+\r
+static const BitmapCharRec ch179 = {3,4,0,-3,3,ch179data};\r
+\r
+/* char: 0xb2 */\r
+\r
+static const GLubyte ch178data[] = {\r
+0xe0,0x40,0xa0,0x60,\r
+};\r
+\r
+static const BitmapCharRec ch178 = {3,4,0,-3,3,ch178data};\r
+\r
+/* char: 0xb1 */\r
+\r
+static const GLubyte ch177data[] = {\r
+0xf8,0x0,0x20,0x20,0xf8,0x20,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch177 = {5,7,0,0,6,ch177data};\r
+\r
+/* char: 0xb0 */\r
+\r
+static const GLubyte ch176data[] = {\r
+0x60,0x90,0x90,0x60,\r
+};\r
+\r
+static const BitmapCharRec ch176 = {4,4,0,-3,4,ch176data};\r
+\r
+/* char: 0xaf */\r
+\r
+static const GLubyte ch175data[] = {\r
+0xe0,\r
+};\r
+\r
+static const BitmapCharRec ch175 = {3,1,0,-7,3,ch175data};\r
+\r
+/* char: 0xae */\r
+\r
+static const GLubyte ch174data[] = {\r
+0x38,0x44,0xaa,0xb2,0xba,0x44,0x38,\r
+};\r
+\r
+static const BitmapCharRec ch174 = {7,7,-1,0,9,ch174data};\r
+\r
+/* char: 0xad */\r
+\r
+static const GLubyte ch173data[] = {\r
+0xe0,\r
+};\r
+\r
+static const BitmapCharRec ch173 = {3,1,0,-3,4,ch173data};\r
+\r
+/* char: 0xac */\r
+\r
+static const GLubyte ch172data[] = {\r
+0x8,0x8,0xf8,\r
+};\r
+\r
+static const BitmapCharRec ch172 = {5,3,-1,-2,7,ch172data};\r
+\r
+/* char: 0xab */\r
+\r
+static const GLubyte ch171data[] = {\r
+0x28,0x50,0xa0,0x50,0x28,\r
+};\r
+\r
+static const BitmapCharRec ch171 = {5,5,0,0,6,ch171data};\r
+\r
+/* char: 0xaa */\r
+\r
+static const GLubyte ch170data[] = {\r
+0xe0,0x0,0xa0,0x20,0xe0,\r
+};\r
+\r
+static const BitmapCharRec ch170 = {3,5,0,-3,4,ch170data};\r
+\r
+/* char: 0xa9 */\r
+\r
+static const GLubyte ch169data[] = {\r
+0x38,0x44,0x9a,0xa2,0x9a,0x44,0x38,\r
+};\r
+\r
+static const BitmapCharRec ch169 = {7,7,-1,0,9,ch169data};\r
+\r
+/* char: 0xa8 */\r
+\r
+static const GLubyte ch168data[] = {\r
+0xa0,\r
+};\r
+\r
+static const BitmapCharRec ch168 = {3,1,0,-7,3,ch168data};\r
+\r
+/* char: 0xa7 */\r
+\r
+static const GLubyte ch167data[] = {\r
+0x70,0x88,0x18,0x70,0xc8,0x98,0x70,0xc0,0x88,0x70,\r
+};\r
+\r
+static const BitmapCharRec ch167 = {5,10,0,2,6,ch167data};\r
+\r
+/* char: 0xa6 */\r
+\r
+static const GLubyte ch166data[] = {\r
+0x80,0x80,0x80,0x80,0x0,0x0,0x80,0x80,0x80,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch166 = {1,10,-1,2,3,ch166data};\r
+\r
+/* char: 0xa5 */\r
+\r
+static const GLubyte ch165data[] = {\r
+0x20,0xf8,0x20,0xf8,0x50,0x50,0x88,0x88,\r
+};\r
+\r
+static const BitmapCharRec ch165 = {5,8,0,0,6,ch165data};\r
+\r
+/* char: 0xa4 */\r
+\r
+static const GLubyte ch164data[] = {\r
+0x90,0x60,0x90,0x90,0x60,0x90,\r
+};\r
+\r
+static const BitmapCharRec ch164 = {4,6,0,-1,5,ch164data};\r
+\r
+/* char: 0xa3 */\r
+\r
+static const GLubyte ch163data[] = {\r
+0xb0,0x48,0x40,0x40,0xe0,0x40,0x48,0x30,\r
+};\r
+\r
+static const BitmapCharRec ch163 = {5,8,0,0,6,ch163data};\r
+\r
+/* char: 0xa2 */\r
+\r
+static const GLubyte ch162data[] = {\r
+0x40,0x70,0xa8,0xa0,0xa0,0xa8,0x70,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch162 = {5,8,0,1,6,ch162data};\r
+\r
+/* char: 0xa1 */\r
+\r
+static const GLubyte ch161data[] = {\r
+0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch161 = {1,8,-1,2,3,ch161data};\r
+\r
+/* char: 0xa0 */\r
+\r
+#ifdef _WIN32\r
+/* XXX Work around Microsoft OpenGL 1.1 bug where glBitmap with\r
+   a height or width of zero does not advance the raster position\r
+   as specified by OpenGL. (Cosmo OpenGL does not have this bug.) */\r
+static const GLubyte ch160data[] = { 0x0 };\r
+static const BitmapCharRec ch160 = {1,1,0,0,3,ch160data};\r
+#else\r
+static const BitmapCharRec ch160 = {0,0,0,0,3,0};\r
+#endif\r
+\r
+/* char: 0x7e '~' */\r
+\r
+static const GLubyte ch126data[] = {\r
+0x98,0x64,\r
+};\r
+\r
+static const BitmapCharRec ch126 = {6,2,0,-3,7,ch126data};\r
+\r
+/* char: 0x7d '}' */\r
+\r
+static const GLubyte ch125data[] = {\r
+0x80,0x40,0x40,0x40,0x40,0x20,0x40,0x40,0x40,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch125 = {3,10,0,2,3,ch125data};\r
+\r
+/* char: 0x7c '|' */\r
+\r
+static const GLubyte ch124data[] = {\r
+0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch124 = {1,10,-1,2,3,ch124data};\r
+\r
+/* char: 0x7b '{' */\r
+\r
+static const GLubyte ch123data[] = {\r
+0x20,0x40,0x40,0x40,0x40,0x80,0x40,0x40,0x40,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch123 = {3,10,0,2,3,ch123data};\r
+\r
+/* char: 0x7a 'z' */\r
+\r
+static const GLubyte ch122data[] = {\r
+0xf0,0x80,0x40,0x20,0x10,0xf0,\r
+};\r
+\r
+static const BitmapCharRec ch122 = {4,6,0,0,5,ch122data};\r
+\r
+/* char: 0x79 'y' */\r
+\r
+static const GLubyte ch121data[] = {\r
+0x80,0x40,0x40,0x60,0xa0,0xa0,0x90,0x90,\r
+};\r
+\r
+static const BitmapCharRec ch121 = {4,8,0,2,5,ch121data};\r
+\r
+/* char: 0x78 'x' */\r
+\r
+static const GLubyte ch120data[] = {\r
+0x88,0x88,0x50,0x20,0x50,0x88,\r
+};\r
+\r
+static const BitmapCharRec ch120 = {5,6,0,0,6,ch120data};\r
+\r
+/* char: 0x77 'w' */\r
+\r
+static const GLubyte ch119data[] = {\r
+0x28,0x28,0x54,0x54,0x92,0x92,\r
+};\r
+\r
+static const BitmapCharRec ch119 = {7,6,0,0,8,ch119data};\r
+\r
+/* char: 0x76 'v' */\r
+\r
+static const GLubyte ch118data[] = {\r
+0x20,0x20,0x50,0x50,0x88,0x88,\r
+};\r
+\r
+static const BitmapCharRec ch118 = {5,6,0,0,6,ch118data};\r
+\r
+/* char: 0x75 'u' */\r
+\r
+static const GLubyte ch117data[] = {\r
+0x70,0x90,0x90,0x90,0x90,0x90,\r
+};\r
+\r
+static const BitmapCharRec ch117 = {4,6,0,0,5,ch117data};\r
+\r
+/* char: 0x74 't' */\r
+\r
+static const GLubyte ch116data[] = {\r
+0x60,0x40,0x40,0x40,0x40,0xe0,0x40,0x40,\r
+};\r
+\r
+static const BitmapCharRec ch116 = {3,8,0,0,4,ch116data};\r
+\r
+/* char: 0x73 's' */\r
+\r
+static const GLubyte ch115data[] = {\r
+0x60,0x90,0x10,0x60,0x90,0x60,\r
+};\r
+\r
+static const BitmapCharRec ch115 = {4,6,0,0,5,ch115data};\r
+\r
+/* char: 0x72 'r' */\r
+\r
+static const GLubyte ch114data[] = {\r
+0x80,0x80,0x80,0x80,0xc0,0xa0,\r
+};\r
+\r
+static const BitmapCharRec ch114 = {3,6,0,0,4,ch114data};\r
+\r
+/* char: 0x71 'q' */\r
+\r
+static const GLubyte ch113data[] = {\r
+0x8,0x8,0x68,0x98,0x88,0x88,0x98,0x68,\r
+};\r
+\r
+static const BitmapCharRec ch113 = {5,8,0,2,6,ch113data};\r
+\r
+/* char: 0x70 'p' */\r
+\r
+static const GLubyte ch112data[] = {\r
+0x80,0x80,0xb0,0xc8,0x88,0x88,0xc8,0xb0,\r
+};\r
+\r
+static const BitmapCharRec ch112 = {5,8,0,2,6,ch112data};\r
+\r
+/* char: 0x6f 'o' */\r
+\r
+static const GLubyte ch111data[] = {\r
+0x70,0x88,0x88,0x88,0x88,0x70,\r
+};\r
+\r
+static const BitmapCharRec ch111 = {5,6,0,0,6,ch111data};\r
+\r
+/* char: 0x6e 'n' */\r
+\r
+static const GLubyte ch110data[] = {\r
+0x88,0x88,0x88,0x88,0xc8,0xb0,\r
+};\r
+\r
+static const BitmapCharRec ch110 = {5,6,0,0,6,ch110data};\r
+\r
+/* char: 0x6d 'm' */\r
+\r
+static const GLubyte ch109data[] = {\r
+0x92,0x92,0x92,0x92,0x92,0xec,\r
+};\r
+\r
+static const BitmapCharRec ch109 = {7,6,0,0,8,ch109data};\r
+\r
+/* char: 0x6c 'l' */\r
+\r
+static const GLubyte ch108data[] = {\r
+0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch108 = {1,8,0,0,2,ch108data};\r
+\r
+/* char: 0x6b 'k' */\r
+\r
+static const GLubyte ch107data[] = {\r
+0x90,0x90,0xa0,0xc0,0xa0,0x90,0x80,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch107 = {4,8,0,0,5,ch107data};\r
+\r
+/* char: 0x6a 'j' */\r
+\r
+static const GLubyte ch106data[] = {\r
+0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch106 = {1,9,0,1,2,ch106data};\r
+\r
+/* char: 0x69 'i' */\r
+\r
+static const GLubyte ch105data[] = {\r
+0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch105 = {1,8,0,0,2,ch105data};\r
+\r
+/* char: 0x68 'h' */\r
+\r
+static const GLubyte ch104data[] = {\r
+0x88,0x88,0x88,0x88,0xc8,0xb0,0x80,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch104 = {5,8,0,0,6,ch104data};\r
+\r
+/* char: 0x67 'g' */\r
+\r
+static const GLubyte ch103data[] = {\r
+0x70,0x8,0x68,0x98,0x88,0x88,0x98,0x68,\r
+};\r
+\r
+static const BitmapCharRec ch103 = {5,8,0,2,6,ch103data};\r
+\r
+/* char: 0x66 'f' */\r
+\r
+static const GLubyte ch102data[] = {\r
+0x40,0x40,0x40,0x40,0x40,0xe0,0x40,0x30,\r
+};\r
+\r
+static const BitmapCharRec ch102 = {4,8,0,0,4,ch102data};\r
+\r
+/* char: 0x65 'e' */\r
+\r
+static const GLubyte ch101data[] = {\r
+0x60,0x90,0x80,0xf0,0x90,0x60,\r
+};\r
+\r
+static const BitmapCharRec ch101 = {4,6,0,0,5,ch101data};\r
+\r
+/* char: 0x64 'd' */\r
+\r
+static const GLubyte ch100data[] = {\r
+0x68,0x98,0x88,0x88,0x98,0x68,0x8,0x8,\r
+};\r
+\r
+static const BitmapCharRec ch100 = {5,8,0,0,6,ch100data};\r
+\r
+/* char: 0x63 'c' */\r
+\r
+static const GLubyte ch99data[] = {\r
+0x60,0x90,0x80,0x80,0x90,0x60,\r
+};\r
+\r
+static const BitmapCharRec ch99 = {4,6,0,0,5,ch99data};\r
+\r
+/* char: 0x62 'b' */\r
+\r
+static const GLubyte ch98data[] = {\r
+0xb0,0xc8,0x88,0x88,0xc8,0xb0,0x80,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch98 = {5,8,0,0,6,ch98data};\r
+\r
+/* char: 0x61 'a' */\r
+\r
+static const GLubyte ch97data[] = {\r
+0x68,0x90,0x90,0x70,0x10,0xe0,\r
+};\r
+\r
+static const BitmapCharRec ch97 = {5,6,0,0,5,ch97data};\r
+\r
+/* char: 0x60 '`' */\r
+\r
+static const GLubyte ch96data[] = {\r
+0x80,0x80,0x40,\r
+};\r
+\r
+static const BitmapCharRec ch96 = {2,3,0,-5,3,ch96data};\r
+\r
+/* char: 0x5f '_' */\r
+\r
+static const GLubyte ch95data[] = {\r
+0xfc,\r
+};\r
+\r
+static const BitmapCharRec ch95 = {6,1,0,2,6,ch95data};\r
+\r
+/* char: 0x5e '^' */\r
+\r
+static const GLubyte ch94data[] = {\r
+0x88,0x50,0x50,0x20,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch94 = {5,5,0,-3,6,ch94data};\r
+\r
+/* char: 0x5d ']' */\r
+\r
+static const GLubyte ch93data[] = {\r
+0xc0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch93 = {2,10,0,2,3,ch93data};\r
+\r
+/* char: 0x5c '\' */\r
+\r
+static const GLubyte ch92data[] = {\r
+0x20,0x20,0x40,0x40,0x40,0x40,0x80,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch92 = {3,8,0,0,3,ch92data};\r
+\r
+/* char: 0x5b '[' */\r
+\r
+static const GLubyte ch91data[] = {\r
+0xc0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch91 = {2,10,-1,2,3,ch91data};\r
+\r
+/* char: 0x5a 'Z' */\r
+\r
+static const GLubyte ch90data[] = {\r
+0xf8,0x80,0x40,0x20,0x20,0x10,0x8,0xf8,\r
+};\r
+\r
+static const BitmapCharRec ch90 = {5,8,-1,0,7,ch90data};\r
+\r
+/* char: 0x59 'Y' */\r
+\r
+static const GLubyte ch89data[] = {\r
+0x10,0x10,0x10,0x28,0x28,0x44,0x44,0x82,\r
+};\r
+\r
+static const BitmapCharRec ch89 = {7,8,0,0,7,ch89data};\r
+\r
+/* char: 0x58 'X' */\r
+\r
+static const GLubyte ch88data[] = {\r
+0x88,0x88,0x50,0x50,0x20,0x50,0x88,0x88,\r
+};\r
+\r
+static const BitmapCharRec ch88 = {5,8,-1,0,7,ch88data};\r
+\r
+/* char: 0x57 'W' */\r
+\r
+static const GLubyte ch87data[] = {\r
+0x22,0x0,0x22,0x0,0x22,0x0,0x55,0x0,0x49,0x0,0x49,0x0,0x88,0x80,0x88,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch87 = {9,8,0,0,9,ch87data};\r
+\r
+/* char: 0x56 'V' */\r
+\r
+static const GLubyte ch86data[] = {\r
+0x10,0x28,0x28,0x44,0x44,0x44,0x82,0x82,\r
+};\r
+\r
+static const BitmapCharRec ch86 = {7,8,0,0,7,ch86data};\r
+\r
+/* char: 0x55 'U' */\r
+\r
+static const GLubyte ch85data[] = {\r
+0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x84,\r
+};\r
+\r
+static const BitmapCharRec ch85 = {6,8,-1,0,8,ch85data};\r
+\r
+/* char: 0x54 'T' */\r
+\r
+static const GLubyte ch84data[] = {\r
+0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xf8,\r
+};\r
+\r
+static const BitmapCharRec ch84 = {5,8,0,0,5,ch84data};\r
+\r
+/* char: 0x53 'S' */\r
+\r
+static const GLubyte ch83data[] = {\r
+0x70,0x88,0x88,0x8,0x70,0x80,0x88,0x70,\r
+};\r
+\r
+static const BitmapCharRec ch83 = {5,8,-1,0,7,ch83data};\r
+\r
+/* char: 0x52 'R' */\r
+\r
+static const GLubyte ch82data[] = {\r
+0x88,0x88,0x88,0x88,0xf0,0x88,0x88,0xf0,\r
+};\r
+\r
+static const BitmapCharRec ch82 = {5,8,-1,0,7,ch82data};\r
+\r
+/* char: 0x51 'Q' */\r
+\r
+static const GLubyte ch81data[] = {\r
+0x2,0x7c,0x8c,0x94,0x84,0x84,0x84,0x84,0x78,\r
+};\r
+\r
+static const BitmapCharRec ch81 = {7,9,-1,1,8,ch81data};\r
+\r
+/* char: 0x50 'P' */\r
+\r
+static const GLubyte ch80data[] = {\r
+0x80,0x80,0x80,0x80,0xf0,0x88,0x88,0xf0,\r
+};\r
+\r
+static const BitmapCharRec ch80 = {5,8,-1,0,7,ch80data};\r
+\r
+/* char: 0x4f 'O' */\r
+\r
+static const GLubyte ch79data[] = {\r
+0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x78,\r
+};\r
+\r
+static const BitmapCharRec ch79 = {6,8,-1,0,8,ch79data};\r
+\r
+/* char: 0x4e 'N' */\r
+\r
+static const GLubyte ch78data[] = {\r
+0x8c,0x8c,0x94,0x94,0xa4,0xa4,0xc4,0xc4,\r
+};\r
+\r
+static const BitmapCharRec ch78 = {6,8,-1,0,8,ch78data};\r
+\r
+/* char: 0x4d 'M' */\r
+\r
+static const GLubyte ch77data[] = {\r
+0x92,0x92,0x92,0xaa,0xaa,0xc6,0xc6,0x82,\r
+};\r
+\r
+static const BitmapCharRec ch77 = {7,8,-1,0,9,ch77data};\r
+\r
+/* char: 0x4c 'L' */\r
+\r
+static const GLubyte ch76data[] = {\r
+0xf0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch76 = {4,8,-1,0,6,ch76data};\r
+\r
+/* char: 0x4b 'K' */\r
+\r
+static const GLubyte ch75data[] = {\r
+0x88,0x88,0x90,0x90,0xe0,0xa0,0x90,0x88,\r
+};\r
+\r
+static const BitmapCharRec ch75 = {5,8,-1,0,7,ch75data};\r
+\r
+/* char: 0x4a 'J' */\r
+\r
+static const GLubyte ch74data[] = {\r
+0x60,0x90,0x10,0x10,0x10,0x10,0x10,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch74 = {4,8,0,0,5,ch74data};\r
+\r
+/* char: 0x49 'I' */\r
+\r
+static const GLubyte ch73data[] = {\r
+0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch73 = {1,8,-1,0,3,ch73data};\r
+\r
+/* char: 0x48 'H' */\r
+\r
+static const GLubyte ch72data[] = {\r
+0x84,0x84,0x84,0x84,0xfc,0x84,0x84,0x84,\r
+};\r
+\r
+static const BitmapCharRec ch72 = {6,8,-1,0,8,ch72data};\r
+\r
+/* char: 0x47 'G' */\r
+\r
+static const GLubyte ch71data[] = {\r
+0x74,0x8c,0x84,0x8c,0x80,0x80,0x84,0x78,\r
+};\r
+\r
+static const BitmapCharRec ch71 = {6,8,-1,0,8,ch71data};\r
+\r
+/* char: 0x46 'F' */\r
+\r
+static const GLubyte ch70data[] = {\r
+0x80,0x80,0x80,0x80,0xf0,0x80,0x80,0xf8,\r
+};\r
+\r
+static const BitmapCharRec ch70 = {5,8,-1,0,6,ch70data};\r
+\r
+/* char: 0x45 'E' */\r
+\r
+static const GLubyte ch69data[] = {\r
+0xf8,0x80,0x80,0x80,0xf8,0x80,0x80,0xf8,\r
+};\r
+\r
+static const BitmapCharRec ch69 = {5,8,-1,0,7,ch69data};\r
+\r
+/* char: 0x44 'D' */\r
+\r
+static const GLubyte ch68data[] = {\r
+0xf0,0x88,0x84,0x84,0x84,0x84,0x88,0xf0,\r
+};\r
+\r
+static const BitmapCharRec ch68 = {6,8,-1,0,8,ch68data};\r
+\r
+/* char: 0x43 'C' */\r
+\r
+static const GLubyte ch67data[] = {\r
+0x78,0x84,0x80,0x80,0x80,0x80,0x84,0x78,\r
+};\r
+\r
+static const BitmapCharRec ch67 = {6,8,-1,0,8,ch67data};\r
+\r
+/* char: 0x42 'B' */\r
+\r
+static const GLubyte ch66data[] = {\r
+0xf0,0x88,0x88,0x88,0xf0,0x88,0x88,0xf0,\r
+};\r
+\r
+static const BitmapCharRec ch66 = {5,8,-1,0,7,ch66data};\r
+\r
+/* char: 0x41 'A' */\r
+\r
+static const GLubyte ch65data[] = {\r
+0x82,0x82,0x7c,0x44,0x28,0x28,0x10,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch65 = {7,8,0,0,7,ch65data};\r
+\r
+/* char: 0x40 '@' */\r
+\r
+static const GLubyte ch64data[] = {\r
+0x3e,0x0,0x40,0x0,0x9b,0x0,0xa4,0x80,0xa4,0x80,0xa2,0x40,0x92,0x40,0x4d,0x40,\r
+0x20,0x80,0x1f,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch64 = {10,10,0,2,11,ch64data};\r
+\r
+/* char: 0x3f '?' */\r
+\r
+static const GLubyte ch63data[] = {\r
+0x40,0x0,0x40,0x40,0x20,0x10,0x90,0x60,\r
+};\r
+\r
+static const BitmapCharRec ch63 = {4,8,-1,0,6,ch63data};\r
+\r
+/* char: 0x3e '>' */\r
+\r
+static const GLubyte ch62data[] = {\r
+0x80,0x40,0x20,0x40,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch62 = {3,5,-1,-1,6,ch62data};\r
+\r
+/* char: 0x3d '=' */\r
+\r
+static const GLubyte ch61data[] = {\r
+0xf0,0x0,0xf0,\r
+};\r
+\r
+static const BitmapCharRec ch61 = {4,3,0,-2,5,ch61data};\r
+\r
+/* char: 0x3c '<' */\r
+\r
+static const GLubyte ch60data[] = {\r
+0x20,0x40,0x80,0x40,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch60 = {3,5,-1,-1,6,ch60data};\r
+\r
+/* char: 0x3b ';' */\r
+\r
+static const GLubyte ch59data[] = {\r
+0x80,0x40,0x40,0x0,0x0,0x0,0x0,0x40,\r
+};\r
+\r
+static const BitmapCharRec ch59 = {2,8,0,2,3,ch59data};\r
+\r
+/* char: 0x3a ':' */\r
+\r
+static const GLubyte ch58data[] = {\r
+0x80,0x0,0x0,0x0,0x0,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch58 = {1,6,-1,0,3,ch58data};\r
+\r
+/* char: 0x39 '9' */\r
+\r
+static const GLubyte ch57data[] = {\r
+0x70,0x88,0x8,0x68,0x98,0x88,0x88,0x70,\r
+};\r
+\r
+static const BitmapCharRec ch57 = {5,8,0,0,6,ch57data};\r
+\r
+/* char: 0x38 '8' */\r
+\r
+static const GLubyte ch56data[] = {\r
+0x70,0x88,0x88,0x88,0x70,0x88,0x88,0x70,\r
+};\r
+\r
+static const BitmapCharRec ch56 = {5,8,0,0,6,ch56data};\r
+\r
+/* char: 0x37 '7' */\r
+\r
+static const GLubyte ch55data[] = {\r
+0x40,0x40,0x20,0x20,0x10,0x10,0x8,0xf8,\r
+};\r
+\r
+static const BitmapCharRec ch55 = {5,8,0,0,6,ch55data};\r
+\r
+/* char: 0x36 '6' */\r
+\r
+static const GLubyte ch54data[] = {\r
+0x70,0x88,0x88,0xc8,0xb0,0x80,0x88,0x70,\r
+};\r
+\r
+static const BitmapCharRec ch54 = {5,8,0,0,6,ch54data};\r
+\r
+/* char: 0x35 '5' */\r
+\r
+static const GLubyte ch53data[] = {\r
+0x70,0x88,0x8,0x8,0xf0,0x80,0x80,0xf8,\r
+};\r
+\r
+static const BitmapCharRec ch53 = {5,8,0,0,6,ch53data};\r
+\r
+/* char: 0x34 '4' */\r
+\r
+static const GLubyte ch52data[] = {\r
+0x10,0x10,0xf8,0x90,0x50,0x50,0x30,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch52 = {5,8,0,0,6,ch52data};\r
+\r
+/* char: 0x33 '3' */\r
+\r
+static const GLubyte ch51data[] = {\r
+0x70,0x88,0x8,0x8,0x30,0x8,0x88,0x70,\r
+};\r
+\r
+static const BitmapCharRec ch51 = {5,8,0,0,6,ch51data};\r
+\r
+/* char: 0x32 '2' */\r
+\r
+static const GLubyte ch50data[] = {\r
+0xf8,0x80,0x40,0x30,0x8,0x8,0x88,0x70,\r
+};\r
+\r
+static const BitmapCharRec ch50 = {5,8,0,0,6,ch50data};\r
+\r
+/* char: 0x31 '1' */\r
+\r
+static const GLubyte ch49data[] = {\r
+0x40,0x40,0x40,0x40,0x40,0x40,0xc0,0x40,\r
+};\r
+\r
+static const BitmapCharRec ch49 = {2,8,-1,0,6,ch49data};\r
+\r
+/* char: 0x30 '0' */\r
+\r
+static const GLubyte ch48data[] = {\r
+0x70,0x88,0x88,0x88,0x88,0x88,0x88,0x70,\r
+};\r
+\r
+static const BitmapCharRec ch48 = {5,8,0,0,6,ch48data};\r
+\r
+/* char: 0x2f '/' */\r
+\r
+static const GLubyte ch47data[] = {\r
+0x80,0x80,0x40,0x40,0x40,0x40,0x20,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch47 = {3,8,0,0,3,ch47data};\r
+\r
+/* char: 0x2e '.' */\r
+\r
+static const GLubyte ch46data[] = {\r
+0x80,\r
+};\r
+\r
+static const BitmapCharRec ch46 = {1,1,-1,0,3,ch46data};\r
+\r
+/* char: 0x2d '-' */\r
+\r
+static const GLubyte ch45data[] = {\r
+0xf8,\r
+};\r
+\r
+static const BitmapCharRec ch45 = {5,1,-1,-3,7,ch45data};\r
+\r
+/* char: 0x2c ',' */\r
+\r
+static const GLubyte ch44data[] = {\r
+0x80,0x40,0x40,\r
+};\r
+\r
+static const BitmapCharRec ch44 = {2,3,0,2,3,ch44data};\r
+\r
+/* char: 0x2b '+' */\r
+\r
+static const GLubyte ch43data[] = {\r
+0x20,0x20,0xf8,0x20,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch43 = {5,5,0,-1,6,ch43data};\r
+\r
+/* char: 0x2a '*' */\r
+\r
+static const GLubyte ch42data[] = {\r
+0xa0,0x40,0xa0,\r
+};\r
+\r
+static const BitmapCharRec ch42 = {3,3,0,-5,4,ch42data};\r
+\r
+/* char: 0x29 ')' */\r
+\r
+static const GLubyte ch41data[] = {\r
+0x80,0x40,0x40,0x20,0x20,0x20,0x20,0x40,0x40,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch41 = {3,10,-1,2,4,ch41data};\r
+\r
+/* char: 0x28 '(' */\r
+\r
+static const GLubyte ch40data[] = {\r
+0x20,0x40,0x40,0x80,0x80,0x80,0x80,0x40,0x40,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch40 = {3,10,0,2,4,ch40data};\r
+\r
+/* char: 0x27 ''' */\r
+\r
+static const GLubyte ch39data[] = {\r
+0x80,0x40,0x40,\r
+};\r
+\r
+static const BitmapCharRec ch39 = {2,3,-1,-5,3,ch39data};\r
+\r
+/* char: 0x26 '&' */\r
+\r
+static const GLubyte ch38data[] = {\r
+0x64,0x98,0x98,0xa4,0x60,0x50,0x50,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch38 = {6,8,-1,0,8,ch38data};\r
+\r
+/* char: 0x25 '%' */\r
+\r
+static const GLubyte ch37data[] = {\r
+0x26,0x29,0x16,0x10,0x8,0x68,0x94,0x64,\r
+};\r
+\r
+static const BitmapCharRec ch37 = {8,8,0,0,9,ch37data};\r
+\r
+/* char: 0x24 '$' */\r
+\r
+static const GLubyte ch36data[] = {\r
+0x20,0x70,0xa8,0x28,0x70,0xa0,0xa8,0x70,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch36 = {5,9,0,1,6,ch36data};\r
+\r
+/* char: 0x23 '#' */\r
+\r
+static const GLubyte ch35data[] = {\r
+0x50,0x50,0xf8,0x28,0x7c,0x28,0x28,\r
+};\r
+\r
+static const BitmapCharRec ch35 = {6,7,0,0,6,ch35data};\r
+\r
+/* char: 0x22 '"' */\r
+\r
+static const GLubyte ch34data[] = {\r
+0xa0,0xa0,\r
+};\r
+\r
+static const BitmapCharRec ch34 = {3,2,-1,-6,4,ch34data};\r
+\r
+/* char: 0x21 '!' */\r
+\r
+static const GLubyte ch33data[] = {\r
+0x80,0x0,0x80,0x80,0x80,0x80,0x80,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch33 = {1,8,-1,0,3,ch33data};\r
+\r
+/* char: 0x20 ' ' */\r
+\r
+#ifdef _WIN32\r
+/* XXX Work around Microsoft OpenGL 1.1 bug where glBitmap with\r
+   a height or width of zero does not advance the raster position\r
+   as specified by OpenGL. (Cosmo OpenGL does not have this bug.) */\r
+static const GLubyte ch32data[] = { 0x0 };\r
+static const BitmapCharRec ch32 = {0,0,0,0,3,ch32data};\r
+#else\r
+static const BitmapCharRec ch32 = {0,0,0,0,3,0};\r
+#endif\r
+\r
+static const BitmapCharRec * const chars[] = {\r
+&ch32,\r
+&ch33,\r
+&ch34,\r
+&ch35,\r
+&ch36,\r
+&ch37,\r
+&ch38,\r
+&ch39,\r
+&ch40,\r
+&ch41,\r
+&ch42,\r
+&ch43,\r
+&ch44,\r
+&ch45,\r
+&ch46,\r
+&ch47,\r
+&ch48,\r
+&ch49,\r
+&ch50,\r
+&ch51,\r
+&ch52,\r
+&ch53,\r
+&ch54,\r
+&ch55,\r
+&ch56,\r
+&ch57,\r
+&ch58,\r
+&ch59,\r
+&ch60,\r
+&ch61,\r
+&ch62,\r
+&ch63,\r
+&ch64,\r
+&ch65,\r
+&ch66,\r
+&ch67,\r
+&ch68,\r
+&ch69,\r
+&ch70,\r
+&ch71,\r
+&ch72,\r
+&ch73,\r
+&ch74,\r
+&ch75,\r
+&ch76,\r
+&ch77,\r
+&ch78,\r
+&ch79,\r
+&ch80,\r
+&ch81,\r
+&ch82,\r
+&ch83,\r
+&ch84,\r
+&ch85,\r
+&ch86,\r
+&ch87,\r
+&ch88,\r
+&ch89,\r
+&ch90,\r
+&ch91,\r
+&ch92,\r
+&ch93,\r
+&ch94,\r
+&ch95,\r
+&ch96,\r
+&ch97,\r
+&ch98,\r
+&ch99,\r
+&ch100,\r
+&ch101,\r
+&ch102,\r
+&ch103,\r
+&ch104,\r
+&ch105,\r
+&ch106,\r
+&ch107,\r
+&ch108,\r
+&ch109,\r
+&ch110,\r
+&ch111,\r
+&ch112,\r
+&ch113,\r
+&ch114,\r
+&ch115,\r
+&ch116,\r
+&ch117,\r
+&ch118,\r
+&ch119,\r
+&ch120,\r
+&ch121,\r
+&ch122,\r
+&ch123,\r
+&ch124,\r
+&ch125,\r
+&ch126,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+&ch160,\r
+&ch161,\r
+&ch162,\r
+&ch163,\r
+&ch164,\r
+&ch165,\r
+&ch166,\r
+&ch167,\r
+&ch168,\r
+&ch169,\r
+&ch170,\r
+&ch171,\r
+&ch172,\r
+&ch173,\r
+&ch174,\r
+&ch175,\r
+&ch176,\r
+&ch177,\r
+&ch178,\r
+&ch179,\r
+&ch180,\r
+&ch181,\r
+&ch182,\r
+&ch183,\r
+&ch184,\r
+&ch185,\r
+&ch186,\r
+&ch187,\r
+&ch188,\r
+&ch189,\r
+&ch190,\r
+&ch191,\r
+&ch192,\r
+&ch193,\r
+&ch194,\r
+&ch195,\r
+&ch196,\r
+&ch197,\r
+&ch198,\r
+&ch199,\r
+&ch200,\r
+&ch201,\r
+&ch202,\r
+&ch203,\r
+&ch204,\r
+&ch205,\r
+&ch206,\r
+&ch207,\r
+&ch208,\r
+&ch209,\r
+&ch210,\r
+&ch211,\r
+&ch212,\r
+&ch213,\r
+&ch214,\r
+&ch215,\r
+&ch216,\r
+&ch217,\r
+&ch218,\r
+&ch219,\r
+&ch220,\r
+&ch221,\r
+&ch222,\r
+&ch223,\r
+&ch224,\r
+&ch225,\r
+&ch226,\r
+&ch227,\r
+&ch228,\r
+&ch229,\r
+&ch230,\r
+&ch231,\r
+&ch232,\r
+&ch233,\r
+&ch234,\r
+&ch235,\r
+&ch236,\r
+&ch237,\r
+&ch238,\r
+&ch239,\r
+&ch240,\r
+&ch241,\r
+&ch242,\r
+&ch243,\r
+&ch244,\r
+&ch245,\r
+&ch246,\r
+&ch247,\r
+&ch248,\r
+&ch249,\r
+&ch250,\r
+&ch251,\r
+&ch252,\r
+&ch253,\r
+&ch254,\r
+&ch255,\r
+};\r
+\r
+#if !defined(__IBMCPP__)\r
+const \r
+#endif\r
+BitmapFontRec glutBitmapHelvetica10 = {\r
+"-adobe-helvetica-medium-r-normal--10-100-75-75-p-56-iso8859-1",\r
+224,\r
+32,\r
+chars\r
+};\r
+\r
diff --git a/src/glut/os2/glut_hel12.cpp b/src/glut/os2/glut_hel12.cpp
new file mode 100644 (file)
index 0000000..cbd0548
--- /dev/null
@@ -0,0 +1,1791 @@
+\r
+/* GENERATED FILE -- DO NOT MODIFY */\r
+\r
+#define glutBitmapHelvetica12 XXX\r
+#include "glutbitmap.h"\r
+#undef glutBitmapHelvetica12\r
+\r
+/* char: 0xff */\r
+\r
+static const GLubyte ch255data[] = {\r
+0xc0,0x20,0x20,0x20,0x30,0x50,0x50,0x48,0x88,0x88,0x0,0x50,\r
+};\r
+\r
+static const BitmapCharRec ch255 = {5,12,-1,3,7,ch255data};\r
+\r
+/* char: 0xfe */\r
+\r
+static const GLubyte ch254data[] = {\r
+0x80,0x80,0x80,0xb0,0xc8,0x88,0x88,0x88,0xc8,0xb0,0x80,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch254 = {5,12,-1,3,7,ch254data};\r
+\r
+/* char: 0xfd */\r
+\r
+static const GLubyte ch253data[] = {\r
+0x80,0x40,0x20,0x20,0x50,0x50,0x90,0x88,0x88,0x88,0x0,0x20,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch253 = {5,13,-1,3,7,ch253data};\r
+\r
+/* char: 0xfc */\r
+\r
+static const GLubyte ch252data[] = {\r
+0x68,0x98,0x88,0x88,0x88,0x88,0x88,0x0,0x50,\r
+};\r
+\r
+static const BitmapCharRec ch252 = {5,9,-1,0,7,ch252data};\r
+\r
+/* char: 0xfb */\r
+\r
+static const GLubyte ch251data[] = {\r
+0x68,0x98,0x88,0x88,0x88,0x88,0x88,0x0,0x50,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch251 = {5,10,-1,0,7,ch251data};\r
+\r
+/* char: 0xfa */\r
+\r
+static const GLubyte ch250data[] = {\r
+0x68,0x98,0x88,0x88,0x88,0x88,0x88,0x0,0x20,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch250 = {5,10,-1,0,7,ch250data};\r
+\r
+/* char: 0xf9 */\r
+\r
+static const GLubyte ch249data[] = {\r
+0x68,0x98,0x88,0x88,0x88,0x88,0x88,0x0,0x20,0x40,\r
+};\r
+\r
+static const BitmapCharRec ch249 = {5,10,-1,0,7,ch249data};\r
+\r
+/* char: 0xf8 */\r
+\r
+static const GLubyte ch248data[] = {\r
+0xb8,0x44,0x64,0x54,0x4c,0x44,0x3a,\r
+};\r
+\r
+static const BitmapCharRec ch248 = {7,7,0,0,7,ch248data};\r
+\r
+/* char: 0xf7 */\r
+\r
+static const GLubyte ch247data[] = {\r
+0x20,0x0,0xf8,0x0,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch247 = {5,5,-1,-1,7,ch247data};\r
+\r
+/* char: 0xf6 */\r
+\r
+static const GLubyte ch246data[] = {\r
+0x70,0x88,0x88,0x88,0x88,0x88,0x70,0x0,0x50,\r
+};\r
+\r
+static const BitmapCharRec ch246 = {5,9,-1,0,7,ch246data};\r
+\r
+/* char: 0xf5 */\r
+\r
+static const GLubyte ch245data[] = {\r
+0x70,0x88,0x88,0x88,0x88,0x88,0x70,0x0,0x50,0x28,\r
+};\r
+\r
+static const BitmapCharRec ch245 = {5,10,-1,0,7,ch245data};\r
+\r
+/* char: 0xf4 */\r
+\r
+static const GLubyte ch244data[] = {\r
+0x70,0x88,0x88,0x88,0x88,0x88,0x70,0x0,0x50,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch244 = {5,10,-1,0,7,ch244data};\r
+\r
+/* char: 0xf3 */\r
+\r
+static const GLubyte ch243data[] = {\r
+0x70,0x88,0x88,0x88,0x88,0x88,0x70,0x0,0x20,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch243 = {5,10,-1,0,7,ch243data};\r
+\r
+/* char: 0xf2 */\r
+\r
+static const GLubyte ch242data[] = {\r
+0x70,0x88,0x88,0x88,0x88,0x88,0x70,0x0,0x20,0x40,\r
+};\r
+\r
+static const BitmapCharRec ch242 = {5,10,-1,0,7,ch242data};\r
+\r
+/* char: 0xf1 */\r
+\r
+static const GLubyte ch241data[] = {\r
+0x88,0x88,0x88,0x88,0x88,0xc8,0xb0,0x0,0x50,0x28,\r
+};\r
+\r
+static const BitmapCharRec ch241 = {5,10,-1,0,7,ch241data};\r
+\r
+/* char: 0xf0 */\r
+\r
+static const GLubyte ch240data[] = {\r
+0x70,0x88,0x88,0x88,0x88,0x78,0x8,0x50,0x30,0x68,\r
+};\r
+\r
+static const BitmapCharRec ch240 = {5,10,-1,0,7,ch240data};\r
+\r
+/* char: 0xef */\r
+\r
+static const GLubyte ch239data[] = {\r
+0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x0,0xa0,\r
+};\r
+\r
+static const BitmapCharRec ch239 = {3,9,0,0,3,ch239data};\r
+\r
+/* char: 0xee */\r
+\r
+static const GLubyte ch238data[] = {\r
+0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x0,0xa0,0x40,\r
+};\r
+\r
+static const BitmapCharRec ch238 = {3,10,0,0,3,ch238data};\r
+\r
+/* char: 0xed */\r
+\r
+static const GLubyte ch237data[] = {\r
+0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x80,0x40,\r
+};\r
+\r
+static const BitmapCharRec ch237 = {2,10,-1,0,3,ch237data};\r
+\r
+/* char: 0xec */\r
+\r
+static const GLubyte ch236data[] = {\r
+0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x0,0x40,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch236 = {2,10,0,0,3,ch236data};\r
+\r
+/* char: 0xeb */\r
+\r
+static const GLubyte ch235data[] = {\r
+0x70,0x88,0x80,0xf8,0x88,0x88,0x70,0x0,0x50,\r
+};\r
+\r
+static const BitmapCharRec ch235 = {5,9,-1,0,7,ch235data};\r
+\r
+/* char: 0xea */\r
+\r
+static const GLubyte ch234data[] = {\r
+0x70,0x88,0x80,0xf8,0x88,0x88,0x70,0x0,0x50,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch234 = {5,10,-1,0,7,ch234data};\r
+\r
+/* char: 0xe9 */\r
+\r
+static const GLubyte ch233data[] = {\r
+0x70,0x88,0x80,0xf8,0x88,0x88,0x70,0x0,0x20,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch233 = {5,10,-1,0,7,ch233data};\r
+\r
+/* char: 0xe8 */\r
+\r
+static const GLubyte ch232data[] = {\r
+0x70,0x88,0x80,0xf8,0x88,0x88,0x70,0x0,0x20,0x40,\r
+};\r
+\r
+static const BitmapCharRec ch232 = {5,10,-1,0,7,ch232data};\r
+\r
+/* char: 0xe7 */\r
+\r
+static const GLubyte ch231data[] = {\r
+0x60,0x10,0x20,0x70,0x88,0x80,0x80,0x80,0x88,0x70,\r
+};\r
+\r
+static const BitmapCharRec ch231 = {5,10,-1,3,7,ch231data};\r
+\r
+/* char: 0xe6 */\r
+\r
+static const GLubyte ch230data[] = {\r
+0x77,0x0,0x88,0x80,0x88,0x0,0x7f,0x80,0x8,0x80,0x88,0x80,0x77,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch230 = {9,7,-1,0,11,ch230data};\r
+\r
+/* char: 0xe5 */\r
+\r
+static const GLubyte ch229data[] = {\r
+0x74,0x88,0x88,0x78,0x8,0x88,0x70,0x30,0x48,0x30,\r
+};\r
+\r
+static const BitmapCharRec ch229 = {6,10,-1,0,7,ch229data};\r
+\r
+/* char: 0xe4 */\r
+\r
+static const GLubyte ch228data[] = {\r
+0x74,0x88,0x88,0x78,0x8,0x88,0x70,0x0,0x50,\r
+};\r
+\r
+static const BitmapCharRec ch228 = {6,9,-1,0,7,ch228data};\r
+\r
+/* char: 0xe3 */\r
+\r
+static const GLubyte ch227data[] = {\r
+0x74,0x88,0x88,0x78,0x8,0x88,0x70,0x0,0x50,0x28,\r
+};\r
+\r
+static const BitmapCharRec ch227 = {6,10,-1,0,7,ch227data};\r
+\r
+/* char: 0xe2 */\r
+\r
+static const GLubyte ch226data[] = {\r
+0x74,0x88,0x88,0x78,0x8,0x88,0x70,0x0,0x50,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch226 = {6,10,-1,0,7,ch226data};\r
+\r
+/* char: 0xe1 */\r
+\r
+static const GLubyte ch225data[] = {\r
+0x74,0x88,0x88,0x78,0x8,0x88,0x70,0x0,0x20,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch225 = {6,10,-1,0,7,ch225data};\r
+\r
+/* char: 0xe0 */\r
+\r
+static const GLubyte ch224data[] = {\r
+0x74,0x88,0x88,0x78,0x8,0x88,0x70,0x0,0x10,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch224 = {6,10,-1,0,7,ch224data};\r
+\r
+/* char: 0xdf */\r
+\r
+static const GLubyte ch223data[] = {\r
+0xb0,0x88,0x88,0x88,0xb0,0x88,0x88,0x88,0x70,\r
+};\r
+\r
+static const BitmapCharRec ch223 = {5,9,-1,0,7,ch223data};\r
+\r
+/* char: 0xde */\r
+\r
+static const GLubyte ch222data[] = {\r
+0x80,0x80,0xf8,0x84,0x84,0x84,0xf8,0x80,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch222 = {6,9,-1,0,8,ch222data};\r
+\r
+/* char: 0xdd */\r
+\r
+static const GLubyte ch221data[] = {\r
+0x10,0x10,0x10,0x10,0x28,0x44,0x44,0x82,0x82,0x0,0x10,0x8,\r
+};\r
+\r
+static const BitmapCharRec ch221 = {7,12,-1,0,9,ch221data};\r
+\r
+/* char: 0xdc */\r
+\r
+static const GLubyte ch220data[] = {\r
+0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x0,0x48,\r
+};\r
+\r
+static const BitmapCharRec ch220 = {6,11,-1,0,8,ch220data};\r
+\r
+/* char: 0xdb */\r
+\r
+static const GLubyte ch219data[] = {\r
+0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x0,0x28,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch219 = {6,12,-1,0,8,ch219data};\r
+\r
+/* char: 0xda */\r
+\r
+static const GLubyte ch218data[] = {\r
+0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x0,0x10,0x8,\r
+};\r
+\r
+static const BitmapCharRec ch218 = {6,12,-1,0,8,ch218data};\r
+\r
+/* char: 0xd9 */\r
+\r
+static const GLubyte ch217data[] = {\r
+0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x0,0x10,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch217 = {6,12,-1,0,8,ch217data};\r
+\r
+/* char: 0xd8 */\r
+\r
+static const GLubyte ch216data[] = {\r
+0x80,0x0,0x5e,0x0,0x21,0x0,0x50,0x80,0x48,0x80,0x44,0x80,0x44,0x80,0x42,0x80,\r
+0x21,0x0,0x1e,0x80,0x0,0x40,\r
+};\r
+\r
+static const BitmapCharRec ch216 = {10,11,0,1,10,ch216data};\r
+\r
+/* char: 0xd7 */\r
+\r
+static const GLubyte ch215data[] = {\r
+0x88,0x50,0x20,0x50,0x88,\r
+};\r
+\r
+static const BitmapCharRec ch215 = {5,5,-1,-1,7,ch215data};\r
+\r
+/* char: 0xd6 */\r
+\r
+static const GLubyte ch214data[] = {\r
+0x3c,0x42,0x81,0x81,0x81,0x81,0x81,0x42,0x3c,0x0,0x24,\r
+};\r
+\r
+static const BitmapCharRec ch214 = {8,11,-1,0,10,ch214data};\r
+\r
+/* char: 0xd5 */\r
+\r
+static const GLubyte ch213data[] = {\r
+0x3c,0x42,0x81,0x81,0x81,0x81,0x81,0x42,0x3c,0x0,0x28,0x14,\r
+};\r
+\r
+static const BitmapCharRec ch213 = {8,12,-1,0,10,ch213data};\r
+\r
+/* char: 0xd4 */\r
+\r
+static const GLubyte ch212data[] = {\r
+0x3c,0x42,0x81,0x81,0x81,0x81,0x81,0x42,0x3c,0x0,0x14,0x8,\r
+};\r
+\r
+static const BitmapCharRec ch212 = {8,12,-1,0,10,ch212data};\r
+\r
+/* char: 0xd3 */\r
+\r
+static const GLubyte ch211data[] = {\r
+0x3c,0x42,0x81,0x81,0x81,0x81,0x81,0x42,0x3c,0x0,0x8,0x4,\r
+};\r
+\r
+static const BitmapCharRec ch211 = {8,12,-1,0,10,ch211data};\r
+\r
+/* char: 0xd2 */\r
+\r
+static const GLubyte ch210data[] = {\r
+0x3c,0x42,0x81,0x81,0x81,0x81,0x81,0x42,0x3c,0x0,0x8,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch210 = {8,12,-1,0,10,ch210data};\r
+\r
+/* char: 0xd1 */\r
+\r
+static const GLubyte ch209data[] = {\r
+0x82,0x86,0x8a,0x8a,0x92,0xa2,0xa2,0xc2,0x82,0x0,0x28,0x14,\r
+};\r
+\r
+static const BitmapCharRec ch209 = {7,12,-1,0,9,ch209data};\r
+\r
+/* char: 0xd0 */\r
+\r
+static const GLubyte ch208data[] = {\r
+0x7c,0x42,0x41,0x41,0xf1,0x41,0x41,0x42,0x7c,\r
+};\r
+\r
+static const BitmapCharRec ch208 = {8,9,0,0,9,ch208data};\r
+\r
+/* char: 0xcf */\r
+\r
+static const GLubyte ch207data[] = {\r
+0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x0,0xa0,\r
+};\r
+\r
+static const BitmapCharRec ch207 = {3,11,0,0,3,ch207data};\r
+\r
+/* char: 0xce */\r
+\r
+static const GLubyte ch206data[] = {\r
+0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x0,0xa0,0x40,\r
+};\r
+\r
+static const BitmapCharRec ch206 = {3,12,0,0,3,ch206data};\r
+\r
+/* char: 0xcd */\r
+\r
+static const GLubyte ch205data[] = {\r
+0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x80,0x40,\r
+};\r
+\r
+static const BitmapCharRec ch205 = {2,12,-1,0,3,ch205data};\r
+\r
+/* char: 0xcc */\r
+\r
+static const GLubyte ch204data[] = {\r
+0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x0,0x40,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch204 = {2,12,0,0,3,ch204data};\r
+\r
+/* char: 0xcb */\r
+\r
+static const GLubyte ch203data[] = {\r
+0xfc,0x80,0x80,0x80,0xfc,0x80,0x80,0x80,0xfc,0x0,0x28,\r
+};\r
+\r
+static const BitmapCharRec ch203 = {6,11,-1,0,8,ch203data};\r
+\r
+/* char: 0xca */\r
+\r
+static const GLubyte ch202data[] = {\r
+0xfc,0x80,0x80,0x80,0xfc,0x80,0x80,0x80,0xfc,0x0,0x28,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch202 = {6,12,-1,0,8,ch202data};\r
+\r
+/* char: 0xc9 */\r
+\r
+static const GLubyte ch201data[] = {\r
+0xfc,0x80,0x80,0x80,0xfc,0x80,0x80,0x80,0xfc,0x0,0x10,0x8,\r
+};\r
+\r
+static const BitmapCharRec ch201 = {6,12,-1,0,8,ch201data};\r
+\r
+/* char: 0xc8 */\r
+\r
+static const GLubyte ch200data[] = {\r
+0xfc,0x80,0x80,0x80,0xfc,0x80,0x80,0x80,0xfc,0x0,0x10,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch200 = {6,12,-1,0,8,ch200data};\r
+\r
+/* char: 0xc7 */\r
+\r
+static const GLubyte ch199data[] = {\r
+0x30,0x8,0x8,0x3c,0x42,0x80,0x80,0x80,0x80,0x80,0x42,0x3c,\r
+};\r
+\r
+static const BitmapCharRec ch199 = {7,12,-1,3,9,ch199data};\r
+\r
+/* char: 0xc6 */\r
+\r
+static const GLubyte ch198data[] = {\r
+0x8f,0x80,0x88,0x0,0x88,0x0,0x78,0x0,0x4f,0x80,0x48,0x0,0x28,0x0,0x28,0x0,\r
+0x1f,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch198 = {9,9,-1,0,11,ch198data};\r
+\r
+/* char: 0xc5 */\r
+\r
+static const GLubyte ch197data[] = {\r
+0x82,0x82,0x82,0x7c,0x44,0x44,0x28,0x10,0x10,0x10,0x28,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch197 = {7,12,-1,0,9,ch197data};\r
+\r
+/* char: 0xc4 */\r
+\r
+static const GLubyte ch196data[] = {\r
+0x82,0x82,0x82,0x7c,0x44,0x44,0x28,0x10,0x10,0x0,0x28,\r
+};\r
+\r
+static const BitmapCharRec ch196 = {7,11,-1,0,9,ch196data};\r
+\r
+/* char: 0xc3 */\r
+\r
+static const GLubyte ch195data[] = {\r
+0x82,0x82,0x82,0x7c,0x44,0x44,0x28,0x10,0x10,0x0,0x28,0x14,\r
+};\r
+\r
+static const BitmapCharRec ch195 = {7,12,-1,0,9,ch195data};\r
+\r
+/* char: 0xc2 */\r
+\r
+static const GLubyte ch194data[] = {\r
+0x82,0x82,0x82,0x7c,0x44,0x44,0x28,0x10,0x10,0x0,0x28,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch194 = {7,12,-1,0,9,ch194data};\r
+\r
+/* char: 0xc1 */\r
+\r
+static const GLubyte ch193data[] = {\r
+0x82,0x82,0x82,0x7c,0x44,0x44,0x28,0x10,0x10,0x0,0x10,0x8,\r
+};\r
+\r
+static const BitmapCharRec ch193 = {7,12,-1,0,9,ch193data};\r
+\r
+/* char: 0xc0 */\r
+\r
+static const GLubyte ch192data[] = {\r
+0x82,0x82,0x82,0x7c,0x44,0x44,0x28,0x10,0x10,0x0,0x10,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch192 = {7,12,-1,0,9,ch192data};\r
+\r
+/* char: 0xbf */\r
+\r
+static const GLubyte ch191data[] = {\r
+0x70,0x88,0x88,0x40,0x40,0x20,0x20,0x0,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch191 = {5,9,-1,3,7,ch191data};\r
+\r
+/* char: 0xbe */\r
+\r
+static const GLubyte ch190data[] = {\r
+0x21,0x0,0x17,0x80,0x15,0x0,0xb,0x0,0xc9,0x0,0x24,0x0,0x44,0x0,0x22,0x0,\r
+0xe1,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch190 = {9,9,0,0,10,ch190data};\r
+\r
+/* char: 0xbd */\r
+\r
+static const GLubyte ch189data[] = {\r
+0x47,0x80,0x22,0x0,0x11,0x0,0x14,0x80,0x4b,0x0,0x48,0x0,0x44,0x0,0xc2,0x0,\r
+0x41,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch189 = {9,9,0,0,10,ch189data};\r
+\r
+/* char: 0xbc */\r
+\r
+static const GLubyte ch188data[] = {\r
+0x41,0x0,0x27,0x80,0x15,0x0,0x13,0x0,0x49,0x0,0x44,0x0,0x44,0x0,0xc2,0x0,\r
+0x41,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch188 = {9,9,0,0,10,ch188data};\r
+\r
+/* char: 0xbb */\r
+\r
+static const GLubyte ch187data[] = {\r
+0xa0,0x50,0x28,0x50,0xa0,\r
+};\r
+\r
+static const BitmapCharRec ch187 = {5,5,-1,-1,7,ch187data};\r
+\r
+/* char: 0xba */\r
+\r
+static const GLubyte ch186data[] = {\r
+0xe0,0x0,0xe0,0xa0,0xe0,\r
+};\r
+\r
+static const BitmapCharRec ch186 = {3,5,-1,-4,5,ch186data};\r
+\r
+/* char: 0xb9 */\r
+\r
+static const GLubyte ch185data[] = {\r
+0x40,0x40,0x40,0xc0,0x40,\r
+};\r
+\r
+static const BitmapCharRec ch185 = {2,5,-1,-3,4,ch185data};\r
+\r
+/* char: 0xb8 */\r
+\r
+static const GLubyte ch184data[] = {\r
+0xc0,0x20,0x20,0x40,\r
+};\r
+\r
+static const BitmapCharRec ch184 = {3,4,0,3,3,ch184data};\r
+\r
+/* char: 0xb7 */\r
+\r
+static const GLubyte ch183data[] = {\r
+0x80,\r
+};\r
+\r
+static const BitmapCharRec ch183 = {1,1,-1,-3,3,ch183data};\r
+\r
+/* char: 0xb6 */\r
+\r
+static const GLubyte ch182data[] = {\r
+0x28,0x28,0x28,0x28,0x28,0x28,0x68,0xe8,0xe8,0xe8,0x68,0x3c,\r
+};\r
+\r
+static const BitmapCharRec ch182 = {6,12,0,3,7,ch182data};\r
+\r
+/* char: 0xb5 */\r
+\r
+static const GLubyte ch181data[] = {\r
+0x80,0x80,0x80,0xe8,0x98,0x88,0x88,0x88,0x88,0x88,\r
+};\r
+\r
+static const BitmapCharRec ch181 = {5,10,-1,3,7,ch181data};\r
+\r
+/* char: 0xb4 */\r
+\r
+static const GLubyte ch180data[] = {\r
+0x80,0x40,\r
+};\r
+\r
+static const BitmapCharRec ch180 = {2,2,0,-8,2,ch180data};\r
+\r
+/* char: 0xb3 */\r
+\r
+static const GLubyte ch179data[] = {\r
+0xc0,0x20,0x40,0x20,0xe0,\r
+};\r
+\r
+static const BitmapCharRec ch179 = {3,5,0,-3,4,ch179data};\r
+\r
+/* char: 0xb2 */\r
+\r
+static const GLubyte ch178data[] = {\r
+0xf0,0x40,0x20,0x90,0x60,\r
+};\r
+\r
+static const BitmapCharRec ch178 = {4,5,0,-3,4,ch178data};\r
+\r
+/* char: 0xb1 */\r
+\r
+static const GLubyte ch177data[] = {\r
+0xf8,0x0,0x20,0x20,0xf8,0x20,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch177 = {5,7,-1,0,7,ch177data};\r
+\r
+/* char: 0xb0 */\r
+\r
+static const GLubyte ch176data[] = {\r
+0x60,0x90,0x90,0x60,\r
+};\r
+\r
+static const BitmapCharRec ch176 = {4,4,0,-4,5,ch176data};\r
+\r
+/* char: 0xaf */\r
+\r
+static const GLubyte ch175data[] = {\r
+0xf0,\r
+};\r
+\r
+static const BitmapCharRec ch175 = {4,1,0,-8,4,ch175data};\r
+\r
+/* char: 0xae */\r
+\r
+static const GLubyte ch174data[] = {\r
+0x3e,0x0,0x41,0x0,0x94,0x80,0x94,0x80,0x98,0x80,0x94,0x80,0x9c,0x80,0x41,0x0,\r
+0x3e,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch174 = {9,9,-1,0,11,ch174data};\r
+\r
+/* char: 0xad */\r
+\r
+static const GLubyte ch173data[] = {\r
+0xf0,\r
+};\r
+\r
+static const BitmapCharRec ch173 = {4,1,0,-3,5,ch173data};\r
+\r
+/* char: 0xac */\r
+\r
+static const GLubyte ch172data[] = {\r
+0x4,0x4,0x4,0xfc,\r
+};\r
+\r
+static const BitmapCharRec ch172 = {6,4,-1,-2,8,ch172data};\r
+\r
+/* char: 0xab */\r
+\r
+static const GLubyte ch171data[] = {\r
+0x28,0x50,0xa0,0x50,0x28,\r
+};\r
+\r
+static const BitmapCharRec ch171 = {5,5,-1,-1,7,ch171data};\r
+\r
+/* char: 0xaa */\r
+\r
+static const GLubyte ch170data[] = {\r
+0xe0,0x0,0xa0,0x20,0xe0,\r
+};\r
+\r
+static const BitmapCharRec ch170 = {3,5,-1,-4,5,ch170data};\r
+\r
+/* char: 0xa9 */\r
+\r
+static const GLubyte ch169data[] = {\r
+0x3e,0x0,0x41,0x0,0x9c,0x80,0xa2,0x80,0xa0,0x80,0xa2,0x80,0x9c,0x80,0x41,0x0,\r
+0x3e,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch169 = {9,9,-1,0,11,ch169data};\r
+\r
+/* char: 0xa8 */\r
+\r
+static const GLubyte ch168data[] = {\r
+0xa0,\r
+};\r
+\r
+static const BitmapCharRec ch168 = {3,1,0,-8,3,ch168data};\r
+\r
+/* char: 0xa7 */\r
+\r
+static const GLubyte ch167data[] = {\r
+0x70,0x88,0x8,0x30,0x48,0x88,0x88,0x90,0x60,0x80,0x88,0x70,\r
+};\r
+\r
+static const BitmapCharRec ch167 = {5,12,0,3,6,ch167data};\r
+\r
+/* char: 0xa6 */\r
+\r
+static const GLubyte ch166data[] = {\r
+0x80,0x80,0x80,0x80,0x0,0x0,0x0,0x80,0x80,0x80,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch166 = {1,11,-1,2,3,ch166data};\r
+\r
+/* char: 0xa5 */\r
+\r
+static const GLubyte ch165data[] = {\r
+0x20,0x20,0xf8,0x20,0xf8,0x20,0x50,0x88,0x88,\r
+};\r
+\r
+static const BitmapCharRec ch165 = {5,9,-1,0,7,ch165data};\r
+\r
+/* char: 0xa4 */\r
+\r
+static const GLubyte ch164data[] = {\r
+0x84,0x78,0x48,0x48,0x78,0x84,\r
+};\r
+\r
+static const BitmapCharRec ch164 = {6,6,0,-1,7,ch164data};\r
+\r
+/* char: 0xa3 */\r
+\r
+static const GLubyte ch163data[] = {\r
+0xb0,0x48,0x20,0x20,0xf0,0x40,0x40,0x48,0x30,\r
+};\r
+\r
+static const BitmapCharRec ch163 = {5,9,-1,0,7,ch163data};\r
+\r
+/* char: 0xa2 */\r
+\r
+static const GLubyte ch162data[] = {\r
+0x40,0x70,0xc8,0xa0,0xa0,0xa0,0xa8,0x70,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch162 = {5,9,-1,1,7,ch162data};\r
+\r
+/* char: 0xa1 */\r
+\r
+static const GLubyte ch161data[] = {\r
+0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch161 = {1,10,-1,3,3,ch161data};\r
+\r
+/* char: 0xa0 */\r
+\r
+#ifdef _WIN32\r
+/* XXX Work around Microsoft OpenGL 1.1 bug where glBitmap with\r
+   a height or width of zero does not advance the raster position\r
+   as specified by OpenGL. (Cosmo OpenGL does not have this bug.) */\r
+static const GLubyte ch160data[] = { 0x0 };\r
+static const BitmapCharRec ch160 = {1,1,0,0,4,ch160data};\r
+#else\r
+static const BitmapCharRec ch160 = {0,0,0,0,4,0};\r
+#endif\r
+\r
+/* char: 0x7e '~' */\r
+\r
+static const GLubyte ch126data[] = {\r
+0x98,0x64,\r
+};\r
+\r
+static const BitmapCharRec ch126 = {6,2,0,-3,7,ch126data};\r
+\r
+/* char: 0x7d '}' */\r
+\r
+static const GLubyte ch125data[] = {\r
+0xc0,0x20,0x20,0x20,0x20,0x20,0x10,0x20,0x20,0x20,0x20,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch125 = {4,12,0,3,4,ch125data};\r
+\r
+/* char: 0x7c '|' */\r
+\r
+static const GLubyte ch124data[] = {\r
+0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch124 = {1,12,-1,3,3,ch124data};\r
+\r
+/* char: 0x7b '{' */\r
+\r
+static const GLubyte ch123data[] = {\r
+0x30,0x40,0x40,0x40,0x40,0x40,0x80,0x40,0x40,0x40,0x40,0x30,\r
+};\r
+\r
+static const BitmapCharRec ch123 = {4,12,0,3,4,ch123data};\r
+\r
+/* char: 0x7a 'z' */\r
+\r
+static const GLubyte ch122data[] = {\r
+0xf0,0x80,0x40,0x40,0x20,0x10,0xf0,\r
+};\r
+\r
+static const BitmapCharRec ch122 = {4,7,-1,0,6,ch122data};\r
+\r
+/* char: 0x79 'y' */\r
+\r
+static const GLubyte ch121data[] = {\r
+0x80,0x40,0x20,0x20,0x50,0x50,0x90,0x88,0x88,0x88,\r
+};\r
+\r
+static const BitmapCharRec ch121 = {5,10,-1,3,7,ch121data};\r
+\r
+/* char: 0x78 'x' */\r
+\r
+static const GLubyte ch120data[] = {\r
+0x84,0x84,0x48,0x30,0x30,0x48,0x84,\r
+};\r
+\r
+static const BitmapCharRec ch120 = {6,7,0,0,6,ch120data};\r
+\r
+/* char: 0x77 'w' */\r
+\r
+static const GLubyte ch119data[] = {\r
+0x22,0x0,0x22,0x0,0x55,0x0,0x49,0x0,0x49,0x0,0x88,0x80,0x88,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch119 = {9,7,0,0,9,ch119data};\r
+\r
+/* char: 0x76 'v' */\r
+\r
+static const GLubyte ch118data[] = {\r
+0x20,0x20,0x50,0x50,0x88,0x88,0x88,\r
+};\r
+\r
+static const BitmapCharRec ch118 = {5,7,-1,0,7,ch118data};\r
+\r
+/* char: 0x75 'u' */\r
+\r
+static const GLubyte ch117data[] = {\r
+0x68,0x98,0x88,0x88,0x88,0x88,0x88,\r
+};\r
+\r
+static const BitmapCharRec ch117 = {5,7,-1,0,7,ch117data};\r
+\r
+/* char: 0x74 't' */\r
+\r
+static const GLubyte ch116data[] = {\r
+0x60,0x40,0x40,0x40,0x40,0x40,0xe0,0x40,0x40,\r
+};\r
+\r
+static const BitmapCharRec ch116 = {3,9,0,0,3,ch116data};\r
+\r
+/* char: 0x73 's' */\r
+\r
+static const GLubyte ch115data[] = {\r
+0x60,0x90,0x10,0x60,0x80,0x90,0x60,\r
+};\r
+\r
+static const BitmapCharRec ch115 = {4,7,-1,0,6,ch115data};\r
+\r
+/* char: 0x72 'r' */\r
+\r
+static const GLubyte ch114data[] = {\r
+0x80,0x80,0x80,0x80,0x80,0xc0,0xa0,\r
+};\r
+\r
+static const BitmapCharRec ch114 = {3,7,-1,0,4,ch114data};\r
+\r
+/* char: 0x71 'q' */\r
+\r
+static const GLubyte ch113data[] = {\r
+0x8,0x8,0x8,0x68,0x98,0x88,0x88,0x88,0x98,0x68,\r
+};\r
+\r
+static const BitmapCharRec ch113 = {5,10,-1,3,7,ch113data};\r
+\r
+/* char: 0x70 'p' */\r
+\r
+static const GLubyte ch112data[] = {\r
+0x80,0x80,0x80,0xb0,0xc8,0x88,0x88,0x88,0xc8,0xb0,\r
+};\r
+\r
+static const BitmapCharRec ch112 = {5,10,-1,3,7,ch112data};\r
+\r
+/* char: 0x6f 'o' */\r
+\r
+static const GLubyte ch111data[] = {\r
+0x70,0x88,0x88,0x88,0x88,0x88,0x70,\r
+};\r
+\r
+static const BitmapCharRec ch111 = {5,7,-1,0,7,ch111data};\r
+\r
+/* char: 0x6e 'n' */\r
+\r
+static const GLubyte ch110data[] = {\r
+0x88,0x88,0x88,0x88,0x88,0xc8,0xb0,\r
+};\r
+\r
+static const BitmapCharRec ch110 = {5,7,-1,0,7,ch110data};\r
+\r
+/* char: 0x6d 'm' */\r
+\r
+static const GLubyte ch109data[] = {\r
+0x92,0x92,0x92,0x92,0x92,0xda,0xa4,\r
+};\r
+\r
+static const BitmapCharRec ch109 = {7,7,-1,0,9,ch109data};\r
+\r
+/* char: 0x6c 'l' */\r
+\r
+static const GLubyte ch108data[] = {\r
+0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch108 = {1,9,-1,0,3,ch108data};\r
+\r
+/* char: 0x6b 'k' */\r
+\r
+static const GLubyte ch107data[] = {\r
+0x88,0x90,0xa0,0xc0,0xc0,0xa0,0x90,0x80,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch107 = {5,9,-1,0,6,ch107data};\r
+\r
+/* char: 0x6a 'j' */\r
+\r
+static const GLubyte ch106data[] = {\r
+0x80,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x0,0x40,\r
+};\r
+\r
+static const BitmapCharRec ch106 = {2,12,0,3,3,ch106data};\r
+\r
+/* char: 0x69 'i' */\r
+\r
+static const GLubyte ch105data[] = {\r
+0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch105 = {1,9,-1,0,3,ch105data};\r
+\r
+/* char: 0x68 'h' */\r
+\r
+static const GLubyte ch104data[] = {\r
+0x88,0x88,0x88,0x88,0x88,0xc8,0xb0,0x80,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch104 = {5,9,-1,0,7,ch104data};\r
+\r
+/* char: 0x67 'g' */\r
+\r
+static const GLubyte ch103data[] = {\r
+0x70,0x88,0x8,0x68,0x98,0x88,0x88,0x88,0x98,0x68,\r
+};\r
+\r
+static const BitmapCharRec ch103 = {5,10,-1,3,7,ch103data};\r
+\r
+/* char: 0x66 'f' */\r
+\r
+static const GLubyte ch102data[] = {\r
+0x40,0x40,0x40,0x40,0x40,0x40,0xe0,0x40,0x30,\r
+};\r
+\r
+static const BitmapCharRec ch102 = {4,9,0,0,3,ch102data};\r
+\r
+/* char: 0x65 'e' */\r
+\r
+static const GLubyte ch101data[] = {\r
+0x70,0x88,0x80,0xf8,0x88,0x88,0x70,\r
+};\r
+\r
+static const BitmapCharRec ch101 = {5,7,-1,0,7,ch101data};\r
+\r
+/* char: 0x64 'd' */\r
+\r
+static const GLubyte ch100data[] = {\r
+0x68,0x98,0x88,0x88,0x88,0x98,0x68,0x8,0x8,\r
+};\r
+\r
+static const BitmapCharRec ch100 = {5,9,-1,0,7,ch100data};\r
+\r
+/* char: 0x63 'c' */\r
+\r
+static const GLubyte ch99data[] = {\r
+0x70,0x88,0x80,0x80,0x80,0x88,0x70,\r
+};\r
+\r
+static const BitmapCharRec ch99 = {5,7,-1,0,7,ch99data};\r
+\r
+/* char: 0x62 'b' */\r
+\r
+static const GLubyte ch98data[] = {\r
+0xb0,0xc8,0x88,0x88,0x88,0xc8,0xb0,0x80,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch98 = {5,9,-1,0,7,ch98data};\r
+\r
+/* char: 0x61 'a' */\r
+\r
+static const GLubyte ch97data[] = {\r
+0x74,0x88,0x88,0x78,0x8,0x88,0x70,\r
+};\r
+\r
+static const BitmapCharRec ch97 = {6,7,-1,0,7,ch97data};\r
+\r
+/* char: 0x60 '`' */\r
+\r
+static const GLubyte ch96data[] = {\r
+0xc0,0x80,0x40,\r
+};\r
+\r
+static const BitmapCharRec ch96 = {2,3,0,-6,3,ch96data};\r
+\r
+/* char: 0x5f '_' */\r
+\r
+static const GLubyte ch95data[] = {\r
+0xfe,\r
+};\r
+\r
+static const BitmapCharRec ch95 = {7,1,0,2,7,ch95data};\r
+\r
+/* char: 0x5e '^' */\r
+\r
+static const GLubyte ch94data[] = {\r
+0x88,0x50,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch94 = {5,3,0,-5,6,ch94data};\r
+\r
+/* char: 0x5d ']' */\r
+\r
+static const GLubyte ch93data[] = {\r
+0xc0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch93 = {2,12,0,3,3,ch93data};\r
+\r
+/* char: 0x5c '\' */\r
+\r
+static const GLubyte ch92data[] = {\r
+0x10,0x10,0x20,0x20,0x20,0x40,0x40,0x80,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch92 = {4,9,0,0,4,ch92data};\r
+\r
+/* char: 0x5b '[' */\r
+\r
+static const GLubyte ch91data[] = {\r
+0xc0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch91 = {2,12,-1,3,3,ch91data};\r
+\r
+/* char: 0x5a 'Z' */\r
+\r
+static const GLubyte ch90data[] = {\r
+0xfe,0x80,0x40,0x20,0x10,0x8,0x4,0x2,0xfe,\r
+};\r
+\r
+static const BitmapCharRec ch90 = {7,9,-1,0,9,ch90data};\r
+\r
+/* char: 0x59 'Y' */\r
+\r
+static const GLubyte ch89data[] = {\r
+0x10,0x10,0x10,0x10,0x28,0x44,0x44,0x82,0x82,\r
+};\r
+\r
+static const BitmapCharRec ch89 = {7,9,-1,0,9,ch89data};\r
+\r
+/* char: 0x58 'X' */\r
+\r
+static const GLubyte ch88data[] = {\r
+0x82,0x44,0x44,0x28,0x10,0x28,0x44,0x44,0x82,\r
+};\r
+\r
+static const BitmapCharRec ch88 = {7,9,-1,0,9,ch88data};\r
+\r
+/* char: 0x57 'W' */\r
+\r
+static const GLubyte ch87data[] = {\r
+0x22,0x0,0x22,0x0,0x22,0x0,0x55,0x0,0x55,0x0,0x49,0x0,0x88,0x80,0x88,0x80,\r
+0x88,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch87 = {9,9,-1,0,11,ch87data};\r
+\r
+/* char: 0x56 'V' */\r
+\r
+static const GLubyte ch86data[] = {\r
+0x10,0x10,0x28,0x28,0x44,0x44,0x44,0x82,0x82,\r
+};\r
+\r
+static const BitmapCharRec ch86 = {7,9,-1,0,9,ch86data};\r
+\r
+/* char: 0x55 'U' */\r
+\r
+static const GLubyte ch85data[] = {\r
+0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,\r
+};\r
+\r
+static const BitmapCharRec ch85 = {6,9,-1,0,8,ch85data};\r
+\r
+/* char: 0x54 'T' */\r
+\r
+static const GLubyte ch84data[] = {\r
+0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0xfe,\r
+};\r
+\r
+static const BitmapCharRec ch84 = {7,9,0,0,7,ch84data};\r
+\r
+/* char: 0x53 'S' */\r
+\r
+static const GLubyte ch83data[] = {\r
+0x78,0x84,0x84,0x4,0x18,0x60,0x80,0x84,0x78,\r
+};\r
+\r
+static const BitmapCharRec ch83 = {6,9,-1,0,8,ch83data};\r
+\r
+/* char: 0x52 'R' */\r
+\r
+static const GLubyte ch82data[] = {\r
+0x84,0x84,0x84,0x88,0xf8,0x84,0x84,0x84,0xf8,\r
+};\r
+\r
+static const BitmapCharRec ch82 = {6,9,-1,0,8,ch82data};\r
+\r
+/* char: 0x51 'Q' */\r
+\r
+static const GLubyte ch81data[] = {\r
+0x3d,0x42,0x85,0x89,0x81,0x81,0x81,0x42,0x3c,\r
+};\r
+\r
+static const BitmapCharRec ch81 = {8,9,-1,0,10,ch81data};\r
+\r
+/* char: 0x50 'P' */\r
+\r
+static const GLubyte ch80data[] = {\r
+0x80,0x80,0x80,0x80,0xf8,0x84,0x84,0x84,0xf8,\r
+};\r
+\r
+static const BitmapCharRec ch80 = {6,9,-1,0,8,ch80data};\r
+\r
+/* char: 0x4f 'O' */\r
+\r
+static const GLubyte ch79data[] = {\r
+0x3c,0x42,0x81,0x81,0x81,0x81,0x81,0x42,0x3c,\r
+};\r
+\r
+static const BitmapCharRec ch79 = {8,9,-1,0,10,ch79data};\r
+\r
+/* char: 0x4e 'N' */\r
+\r
+static const GLubyte ch78data[] = {\r
+0x82,0x86,0x8a,0x8a,0x92,0xa2,0xa2,0xc2,0x82,\r
+};\r
+\r
+static const BitmapCharRec ch78 = {7,9,-1,0,9,ch78data};\r
+\r
+/* char: 0x4d 'M' */\r
+\r
+static const GLubyte ch77data[] = {\r
+0x88,0x80,0x88,0x80,0x94,0x80,0x94,0x80,0xa2,0x80,0xa2,0x80,0xc1,0x80,0xc1,0x80,\r
+0x80,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch77 = {9,9,-1,0,11,ch77data};\r
+\r
+/* char: 0x4c 'L' */\r
+\r
+static const GLubyte ch76data[] = {\r
+0xf8,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch76 = {5,9,-1,0,7,ch76data};\r
+\r
+/* char: 0x4b 'K' */\r
+\r
+static const GLubyte ch75data[] = {\r
+0x82,0x84,0x88,0x90,0xe0,0xa0,0x90,0x88,0x84,\r
+};\r
+\r
+static const BitmapCharRec ch75 = {7,9,-1,0,8,ch75data};\r
+\r
+/* char: 0x4a 'J' */\r
+\r
+static const GLubyte ch74data[] = {\r
+0x70,0x88,0x88,0x8,0x8,0x8,0x8,0x8,0x8,\r
+};\r
+\r
+static const BitmapCharRec ch74 = {5,9,-1,0,7,ch74data};\r
+\r
+/* char: 0x49 'I' */\r
+\r
+static const GLubyte ch73data[] = {\r
+0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch73 = {1,9,-1,0,3,ch73data};\r
+\r
+/* char: 0x48 'H' */\r
+\r
+static const GLubyte ch72data[] = {\r
+0x82,0x82,0x82,0x82,0xfe,0x82,0x82,0x82,0x82,\r
+};\r
+\r
+static const BitmapCharRec ch72 = {7,9,-1,0,9,ch72data};\r
+\r
+/* char: 0x47 'G' */\r
+\r
+static const GLubyte ch71data[] = {\r
+0x3a,0x46,0x82,0x82,0x8e,0x80,0x80,0x42,0x3c,\r
+};\r
+\r
+static const BitmapCharRec ch71 = {7,9,-1,0,9,ch71data};\r
+\r
+/* char: 0x46 'F' */\r
+\r
+static const GLubyte ch70data[] = {\r
+0x80,0x80,0x80,0x80,0xf8,0x80,0x80,0x80,0xfc,\r
+};\r
+\r
+static const BitmapCharRec ch70 = {6,9,-1,0,8,ch70data};\r
+\r
+/* char: 0x45 'E' */\r
+\r
+static const GLubyte ch69data[] = {\r
+0xfc,0x80,0x80,0x80,0xfc,0x80,0x80,0x80,0xfc,\r
+};\r
+\r
+static const BitmapCharRec ch69 = {6,9,-1,0,8,ch69data};\r
+\r
+/* char: 0x44 'D' */\r
+\r
+static const GLubyte ch68data[] = {\r
+0xf8,0x84,0x82,0x82,0x82,0x82,0x82,0x84,0xf8,\r
+};\r
+\r
+static const BitmapCharRec ch68 = {7,9,-1,0,9,ch68data};\r
+\r
+/* char: 0x43 'C' */\r
+\r
+static const GLubyte ch67data[] = {\r
+0x3c,0x42,0x80,0x80,0x80,0x80,0x80,0x42,0x3c,\r
+};\r
+\r
+static const BitmapCharRec ch67 = {7,9,-1,0,9,ch67data};\r
+\r
+/* char: 0x42 'B' */\r
+\r
+static const GLubyte ch66data[] = {\r
+0xf8,0x84,0x84,0x84,0xf8,0x84,0x84,0x84,0xf8,\r
+};\r
+\r
+static const BitmapCharRec ch66 = {6,9,-1,0,8,ch66data};\r
+\r
+/* char: 0x41 'A' */\r
+\r
+static const GLubyte ch65data[] = {\r
+0x82,0x82,0x82,0x7c,0x44,0x44,0x28,0x28,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch65 = {7,9,-1,0,9,ch65data};\r
+\r
+/* char: 0x40 '@' */\r
+\r
+static const GLubyte ch64data[] = {\r
+0x3e,0x0,0x40,0x0,0x9b,0x0,0xa6,0x80,0xa2,0x40,0xa2,0x40,0x92,0x40,0x4d,0x40,\r
+0x60,0x80,0x1f,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch64 = {10,10,-1,1,12,ch64data};\r
+\r
+/* char: 0x3f '?' */\r
+\r
+static const GLubyte ch63data[] = {\r
+0x20,0x0,0x20,0x20,0x10,0x10,0x88,0x88,0x70,\r
+};\r
+\r
+static const BitmapCharRec ch63 = {5,9,-1,0,7,ch63data};\r
+\r
+/* char: 0x3e '>' */\r
+\r
+static const GLubyte ch62data[] = {\r
+0xc0,0x30,0xc,0x30,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch62 = {6,5,-1,-1,7,ch62data};\r
+\r
+/* char: 0x3d '=' */\r
+\r
+static const GLubyte ch61data[] = {\r
+0xf8,0x0,0xf8,\r
+};\r
+\r
+static const BitmapCharRec ch61 = {5,3,-1,-2,7,ch61data};\r
+\r
+/* char: 0x3c '<' */\r
+\r
+static const GLubyte ch60data[] = {\r
+0xc,0x30,0xc0,0x30,0xc,\r
+};\r
+\r
+static const BitmapCharRec ch60 = {6,5,0,-1,7,ch60data};\r
+\r
+/* char: 0x3b ';' */\r
+\r
+static const GLubyte ch59data[] = {\r
+0x80,0x40,0x40,0x0,0x0,0x0,0x0,0x40,\r
+};\r
+\r
+static const BitmapCharRec ch59 = {2,8,0,2,3,ch59data};\r
+\r
+/* char: 0x3a ':' */\r
+\r
+static const GLubyte ch58data[] = {\r
+0x80,0x0,0x0,0x0,0x0,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch58 = {1,6,-1,0,3,ch58data};\r
+\r
+/* char: 0x39 '9' */\r
+\r
+static const GLubyte ch57data[] = {\r
+0x70,0x88,0x8,0x8,0x78,0x88,0x88,0x88,0x70,\r
+};\r
+\r
+static const BitmapCharRec ch57 = {5,9,-1,0,7,ch57data};\r
+\r
+/* char: 0x38 '8' */\r
+\r
+static const GLubyte ch56data[] = {\r
+0x70,0x88,0x88,0x88,0x88,0x70,0x88,0x88,0x70,\r
+};\r
+\r
+static const BitmapCharRec ch56 = {5,9,-1,0,7,ch56data};\r
+\r
+/* char: 0x37 '7' */\r
+\r
+static const GLubyte ch55data[] = {\r
+0x40,0x40,0x20,0x20,0x20,0x10,0x10,0x8,0xf8,\r
+};\r
+\r
+static const BitmapCharRec ch55 = {5,9,-1,0,7,ch55data};\r
+\r
+/* char: 0x36 '6' */\r
+\r
+static const GLubyte ch54data[] = {\r
+0x70,0x88,0x88,0x88,0xc8,0xb0,0x80,0x88,0x70,\r
+};\r
+\r
+static const BitmapCharRec ch54 = {5,9,-1,0,7,ch54data};\r
+\r
+/* char: 0x35 '5' */\r
+\r
+static const GLubyte ch53data[] = {\r
+0x70,0x88,0x88,0x8,0x8,0xf0,0x80,0x80,0xf8,\r
+};\r
+\r
+static const BitmapCharRec ch53 = {5,9,-1,0,7,ch53data};\r
+\r
+/* char: 0x34 '4' */\r
+\r
+static const GLubyte ch52data[] = {\r
+0x8,0x8,0xfc,0x88,0x48,0x28,0x28,0x18,0x8,\r
+};\r
+\r
+static const BitmapCharRec ch52 = {6,9,0,0,7,ch52data};\r
+\r
+/* char: 0x33 '3' */\r
+\r
+static const GLubyte ch51data[] = {\r
+0x70,0x88,0x88,0x8,0x8,0x30,0x8,0x88,0x70,\r
+};\r
+\r
+static const BitmapCharRec ch51 = {5,9,-1,0,7,ch51data};\r
+\r
+/* char: 0x32 '2' */\r
+\r
+static const GLubyte ch50data[] = {\r
+0xf8,0x80,0x80,0x40,0x20,0x10,0x8,0x88,0x70,\r
+};\r
+\r
+static const BitmapCharRec ch50 = {5,9,-1,0,7,ch50data};\r
+\r
+/* char: 0x31 '1' */\r
+\r
+static const GLubyte ch49data[] = {\r
+0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xe0,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch49 = {3,9,-1,0,7,ch49data};\r
+\r
+/* char: 0x30 '0' */\r
+\r
+static const GLubyte ch48data[] = {\r
+0x70,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x70,\r
+};\r
+\r
+static const BitmapCharRec ch48 = {5,9,-1,0,7,ch48data};\r
+\r
+/* char: 0x2f '/' */\r
+\r
+static const GLubyte ch47data[] = {\r
+0x80,0x80,0x40,0x40,0x40,0x20,0x20,0x10,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch47 = {4,9,0,0,4,ch47data};\r
+\r
+/* char: 0x2e '.' */\r
+\r
+static const GLubyte ch46data[] = {\r
+0x80,\r
+};\r
+\r
+static const BitmapCharRec ch46 = {1,1,-1,0,3,ch46data};\r
+\r
+/* char: 0x2d '-' */\r
+\r
+static const GLubyte ch45data[] = {\r
+0xf8,\r
+};\r
+\r
+static const BitmapCharRec ch45 = {5,1,-1,-3,8,ch45data};\r
+\r
+/* char: 0x2c ',' */\r
+\r
+static const GLubyte ch44data[] = {\r
+0x80,0x40,0x40,\r
+};\r
+\r
+static const BitmapCharRec ch44 = {2,3,-1,2,4,ch44data};\r
+\r
+/* char: 0x2b '+' */\r
+\r
+static const GLubyte ch43data[] = {\r
+0x20,0x20,0xf8,0x20,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch43 = {5,5,-1,-1,7,ch43data};\r
+\r
+/* char: 0x2a '*' */\r
+\r
+static const GLubyte ch42data[] = {\r
+0xa0,0x40,0xa0,\r
+};\r
+\r
+static const BitmapCharRec ch42 = {3,3,-1,-6,5,ch42data};\r
+\r
+/* char: 0x29 ')' */\r
+\r
+static const GLubyte ch41data[] = {\r
+0x80,0x40,0x40,0x20,0x20,0x20,0x20,0x20,0x20,0x40,0x40,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch41 = {3,12,0,3,4,ch41data};\r
+\r
+/* char: 0x28 '(' */\r
+\r
+static const GLubyte ch40data[] = {\r
+0x20,0x40,0x40,0x80,0x80,0x80,0x80,0x80,0x80,0x40,0x40,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch40 = {3,12,-1,3,4,ch40data};\r
+\r
+/* char: 0x27 ''' */\r
+\r
+static const GLubyte ch39data[] = {\r
+0x80,0x40,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch39 = {2,3,-1,-6,3,ch39data};\r
+\r
+/* char: 0x26 '&' */\r
+\r
+static const GLubyte ch38data[] = {\r
+0x72,0x8c,0x84,0x8a,0x50,0x30,0x48,0x48,0x30,\r
+};\r
+\r
+static const BitmapCharRec ch38 = {7,9,-1,0,9,ch38data};\r
+\r
+/* char: 0x25 '%' */\r
+\r
+static const GLubyte ch37data[] = {\r
+0x23,0x0,0x14,0x80,0x14,0x80,0x13,0x0,0x8,0x0,0x68,0x0,0x94,0x0,0x94,0x0,\r
+0x62,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch37 = {9,9,-1,0,11,ch37data};\r
+\r
+/* char: 0x24 '$' */\r
+\r
+static const GLubyte ch36data[] = {\r
+0x20,0x70,0xa8,0xa8,0x28,0x70,0xa0,0xa8,0x70,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch36 = {5,10,-1,1,7,ch36data};\r
+\r
+/* char: 0x23 '#' */\r
+\r
+static const GLubyte ch35data[] = {\r
+0x50,0x50,0x50,0xfc,0x28,0xfc,0x28,0x28,\r
+};\r
+\r
+static const BitmapCharRec ch35 = {6,8,0,0,7,ch35data};\r
+\r
+/* char: 0x22 '"' */\r
+\r
+static const GLubyte ch34data[] = {\r
+0xa0,0xa0,0xa0,\r
+};\r
+\r
+static const BitmapCharRec ch34 = {3,3,-1,-6,5,ch34data};\r
+\r
+/* char: 0x21 '!' */\r
+\r
+static const GLubyte ch33data[] = {\r
+0x80,0x0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch33 = {1,9,-1,0,3,ch33data};\r
+\r
+/* char: 0x20 ' ' */\r
+\r
+#ifdef _WIN32\r
+/* XXX Work around Microsoft OpenGL 1.1 bug where glBitmap with\r
+   a height or width of zero does not advance the raster position\r
+   as specified by OpenGL. (Cosmo OpenGL does not have this bug.) */\r
+static const GLubyte ch32data[] = { 0x0 };\r
+static const BitmapCharRec ch32 = {1,1,0,0,4,ch32data};\r
+#else\r
+static const BitmapCharRec ch32 = {0,0,0,0,4,0};\r
+#endif\r
+\r
+static const BitmapCharRec * const chars[] = {\r
+&ch32,\r
+&ch33,\r
+&ch34,\r
+&ch35,\r
+&ch36,\r
+&ch37,\r
+&ch38,\r
+&ch39,\r
+&ch40,\r
+&ch41,\r
+&ch42,\r
+&ch43,\r
+&ch44,\r
+&ch45,\r
+&ch46,\r
+&ch47,\r
+&ch48,\r
+&ch49,\r
+&ch50,\r
+&ch51,\r
+&ch52,\r
+&ch53,\r
+&ch54,\r
+&ch55,\r
+&ch56,\r
+&ch57,\r
+&ch58,\r
+&ch59,\r
+&ch60,\r
+&ch61,\r
+&ch62,\r
+&ch63,\r
+&ch64,\r
+&ch65,\r
+&ch66,\r
+&ch67,\r
+&ch68,\r
+&ch69,\r
+&ch70,\r
+&ch71,\r
+&ch72,\r
+&ch73,\r
+&ch74,\r
+&ch75,\r
+&ch76,\r
+&ch77,\r
+&ch78,\r
+&ch79,\r
+&ch80,\r
+&ch81,\r
+&ch82,\r
+&ch83,\r
+&ch84,\r
+&ch85,\r
+&ch86,\r
+&ch87,\r
+&ch88,\r
+&ch89,\r
+&ch90,\r
+&ch91,\r
+&ch92,\r
+&ch93,\r
+&ch94,\r
+&ch95,\r
+&ch96,\r
+&ch97,\r
+&ch98,\r
+&ch99,\r
+&ch100,\r
+&ch101,\r
+&ch102,\r
+&ch103,\r
+&ch104,\r
+&ch105,\r
+&ch106,\r
+&ch107,\r
+&ch108,\r
+&ch109,\r
+&ch110,\r
+&ch111,\r
+&ch112,\r
+&ch113,\r
+&ch114,\r
+&ch115,\r
+&ch116,\r
+&ch117,\r
+&ch118,\r
+&ch119,\r
+&ch120,\r
+&ch121,\r
+&ch122,\r
+&ch123,\r
+&ch124,\r
+&ch125,\r
+&ch126,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+&ch160,\r
+&ch161,\r
+&ch162,\r
+&ch163,\r
+&ch164,\r
+&ch165,\r
+&ch166,\r
+&ch167,\r
+&ch168,\r
+&ch169,\r
+&ch170,\r
+&ch171,\r
+&ch172,\r
+&ch173,\r
+&ch174,\r
+&ch175,\r
+&ch176,\r
+&ch177,\r
+&ch178,\r
+&ch179,\r
+&ch180,\r
+&ch181,\r
+&ch182,\r
+&ch183,\r
+&ch184,\r
+&ch185,\r
+&ch186,\r
+&ch187,\r
+&ch188,\r
+&ch189,\r
+&ch190,\r
+&ch191,\r
+&ch192,\r
+&ch193,\r
+&ch194,\r
+&ch195,\r
+&ch196,\r
+&ch197,\r
+&ch198,\r
+&ch199,\r
+&ch200,\r
+&ch201,\r
+&ch202,\r
+&ch203,\r
+&ch204,\r
+&ch205,\r
+&ch206,\r
+&ch207,\r
+&ch208,\r
+&ch209,\r
+&ch210,\r
+&ch211,\r
+&ch212,\r
+&ch213,\r
+&ch214,\r
+&ch215,\r
+&ch216,\r
+&ch217,\r
+&ch218,\r
+&ch219,\r
+&ch220,\r
+&ch221,\r
+&ch222,\r
+&ch223,\r
+&ch224,\r
+&ch225,\r
+&ch226,\r
+&ch227,\r
+&ch228,\r
+&ch229,\r
+&ch230,\r
+&ch231,\r
+&ch232,\r
+&ch233,\r
+&ch234,\r
+&ch235,\r
+&ch236,\r
+&ch237,\r
+&ch238,\r
+&ch239,\r
+&ch240,\r
+&ch241,\r
+&ch242,\r
+&ch243,\r
+&ch244,\r
+&ch245,\r
+&ch246,\r
+&ch247,\r
+&ch248,\r
+&ch249,\r
+&ch250,\r
+&ch251,\r
+&ch252,\r
+&ch253,\r
+&ch254,\r
+&ch255,\r
+};\r
+\r
+#if !defined(__IBMCPP__)\r
+const \r
+#endif\r
+BitmapFontRec glutBitmapHelvetica12 = {\r
+"-adobe-helvetica-medium-r-normal--12-120-75-75-p-67-iso8859-1",\r
+224,\r
+32,\r
+chars\r
+};\r
+\r
diff --git a/src/glut/os2/glut_hel18.cpp b/src/glut/os2/glut_hel18.cpp
new file mode 100644 (file)
index 0000000..26f88ec
--- /dev/null
@@ -0,0 +1,1900 @@
+\r
+/* GENERATED FILE -- DO NOT MODIFY */\r
+\r
+#define glutBitmapHelvetica18 XXX\r
+#include "glutbitmap.h"\r
+#undef glutBitmapHelvetica18\r
+\r
+/* char: 0xff */\r
+\r
+static const GLubyte ch255data[] = {\r
+0x70,0x70,0x18,0x18,0x18,0x18,0x3c,0x24,0x66,0x66,0x66,0xc3,0xc3,0xc3,0x0,0x66,\r
+0x66,\r
+};\r
+\r
+static const BitmapCharRec ch255 = {8,17,-1,4,10,ch255data};\r
+\r
+/* char: 0xfe */\r
+\r
+static const GLubyte ch254data[] = {\r
+0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xde,0x0,0xff,0x0,0xe3,0x0,0xc1,0x80,\r
+0xc1,0x80,0xc1,0x80,0xc1,0x80,0xe3,0x0,0xff,0x0,0xde,0x0,0xc0,0x0,0xc0,0x0,\r
+0xc0,0x0,0xc0,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch254 = {9,18,-1,4,11,ch254data};\r
+\r
+/* char: 0xfd */\r
+\r
+static const GLubyte ch253data[] = {\r
+0x70,0x70,0x18,0x18,0x18,0x18,0x3c,0x24,0x66,0x66,0x66,0xc3,0xc3,0xc3,0x0,0x18,\r
+0xc,0x6,\r
+};\r
+\r
+static const BitmapCharRec ch253 = {8,18,-1,4,10,ch253data};\r
+\r
+/* char: 0xfc */\r
+\r
+static const GLubyte ch252data[] = {\r
+0x73,0xfb,0xc7,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0x0,0x66,0x66,\r
+};\r
+\r
+static const BitmapCharRec ch252 = {8,13,-1,0,10,ch252data};\r
+\r
+/* char: 0xfb */\r
+\r
+static const GLubyte ch251data[] = {\r
+0x73,0xfb,0xc7,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0x0,0x66,0x3c,0x18,\r
+};\r
+\r
+static const BitmapCharRec ch251 = {8,14,-1,0,10,ch251data};\r
+\r
+/* char: 0xfa */\r
+\r
+static const GLubyte ch250data[] = {\r
+0x73,0xfb,0xc7,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0x0,0x18,0xc,0x6,\r
+};\r
+\r
+static const BitmapCharRec ch250 = {8,14,-1,0,10,ch250data};\r
+\r
+/* char: 0xf9 */\r
+\r
+static const GLubyte ch249data[] = {\r
+0x73,0xfb,0xc7,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0x0,0xc,0x18,0x30,\r
+};\r
+\r
+static const BitmapCharRec ch249 = {8,14,-1,0,10,ch249data};\r
+\r
+/* char: 0xf8 */\r
+\r
+static const GLubyte ch248data[] = {\r
+0xce,0x0,0x7f,0x80,0x31,0x80,0x78,0xc0,0x6c,0xc0,0x66,0xc0,0x63,0xc0,0x31,0x80,\r
+0x3f,0xc0,0xe,0x60,\r
+};\r
+\r
+static const BitmapCharRec ch248 = {11,10,0,0,11,ch248data};\r
+\r
+/* char: 0xf7 */\r
+\r
+static const GLubyte ch247data[] = {\r
+0x18,0x18,0x0,0xff,0xff,0x0,0x18,0x18,\r
+};\r
+\r
+static const BitmapCharRec ch247 = {8,8,-1,-1,10,ch247data};\r
+\r
+/* char: 0xf6 */\r
+\r
+static const GLubyte ch246data[] = {\r
+0x3e,0x0,0x7f,0x0,0x63,0x0,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0x63,0x0,\r
+0x7f,0x0,0x3e,0x0,0x0,0x0,0x36,0x0,0x36,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch246 = {9,13,-1,0,11,ch246data};\r
+\r
+/* char: 0xf5 */\r
+\r
+static const GLubyte ch245data[] = {\r
+0x3e,0x0,0x7f,0x0,0x63,0x0,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0x63,0x0,\r
+0x7f,0x0,0x3e,0x0,0x0,0x0,0x26,0x0,0x2d,0x0,0x19,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch245 = {9,14,-1,0,11,ch245data};\r
+\r
+/* char: 0xf4 */\r
+\r
+static const GLubyte ch244data[] = {\r
+0x3e,0x0,0x7f,0x0,0x63,0x0,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0x63,0x0,\r
+0x7f,0x0,0x3e,0x0,0x0,0x0,0x33,0x0,0x1e,0x0,0xc,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch244 = {9,14,-1,0,11,ch244data};\r
+\r
+/* char: 0xf3 */\r
+\r
+static const GLubyte ch243data[] = {\r
+0x3e,0x0,0x7f,0x0,0x63,0x0,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0x63,0x0,\r
+0x7f,0x0,0x3e,0x0,0x0,0x0,0x18,0x0,0xc,0x0,0x6,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch243 = {9,14,-1,0,11,ch243data};\r
+\r
+/* char: 0xf2 */\r
+\r
+static const GLubyte ch242data[] = {\r
+0x3e,0x0,0x7f,0x0,0x63,0x0,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0x63,0x0,\r
+0x7f,0x0,0x3e,0x0,0x0,0x0,0xc,0x0,0x18,0x0,0x30,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch242 = {9,14,-1,0,11,ch242data};\r
+\r
+/* char: 0xf1 */\r
+\r
+static const GLubyte ch241data[] = {\r
+0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xe3,0xdf,0xce,0x0,0x4c,0x5a,0x32,\r
+};\r
+\r
+static const BitmapCharRec ch241 = {8,14,-1,0,10,ch241data};\r
+\r
+/* char: 0xf0 */\r
+\r
+static const GLubyte ch240data[] = {\r
+0x3e,0x0,0x7f,0x0,0x63,0x0,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0x63,0x0,\r
+0x7f,0x0,0x3e,0x0,0x4c,0x0,0x38,0x0,0x36,0x0,0x60,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch240 = {9,14,-1,0,11,ch240data};\r
+\r
+/* char: 0xef */\r
+\r
+static const GLubyte ch239data[] = {\r
+0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x0,0xd8,0xd8,\r
+};\r
+\r
+static const BitmapCharRec ch239 = {5,13,0,0,4,ch239data};\r
+\r
+/* char: 0xee */\r
+\r
+static const GLubyte ch238data[] = {\r
+0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x0,0xcc,0x78,0x30,\r
+};\r
+\r
+static const BitmapCharRec ch238 = {6,14,1,0,4,ch238data};\r
+\r
+/* char: 0xed */\r
+\r
+static const GLubyte ch237data[] = {\r
+0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x0,0xc0,0x60,0x30,\r
+};\r
+\r
+static const BitmapCharRec ch237 = {4,14,0,0,4,ch237data};\r
+\r
+/* char: 0xec */\r
+\r
+static const GLubyte ch236data[] = {\r
+0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x0,0x30,0x60,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch236 = {4,14,0,0,4,ch236data};\r
+\r
+/* char: 0xeb */\r
+\r
+static const GLubyte ch235data[] = {\r
+0x3c,0x7f,0xe3,0xc0,0xc0,0xff,0xc3,0xc3,0x7e,0x3c,0x0,0x36,0x36,\r
+};\r
+\r
+static const BitmapCharRec ch235 = {8,13,-1,0,10,ch235data};\r
+\r
+/* char: 0xea */\r
+\r
+static const GLubyte ch234data[] = {\r
+0x3c,0x7f,0xe3,0xc0,0xc0,0xff,0xc3,0xc3,0x7e,0x3c,0x0,0x66,0x3c,0x18,\r
+};\r
+\r
+static const BitmapCharRec ch234 = {8,14,-1,0,10,ch234data};\r
+\r
+/* char: 0xe9 */\r
+\r
+static const GLubyte ch233data[] = {\r
+0x3c,0x7f,0xe3,0xc0,0xc0,0xff,0xc3,0xc3,0x7e,0x3c,0x0,0x18,0xc,0x6,\r
+};\r
+\r
+static const BitmapCharRec ch233 = {8,14,-1,0,10,ch233data};\r
+\r
+/* char: 0xe8 */\r
+\r
+static const GLubyte ch232data[] = {\r
+0x3c,0x7f,0xe3,0xc0,0xc0,0xff,0xc3,0xc3,0x7e,0x3c,0x0,0x18,0x30,0x60,\r
+};\r
+\r
+static const BitmapCharRec ch232 = {8,14,-1,0,10,ch232data};\r
+\r
+/* char: 0xe7 */\r
+\r
+static const GLubyte ch231data[] = {\r
+0x78,0x6c,0xc,0x38,0x3e,0x7f,0x63,0xc0,0xc0,0xc0,0xc0,0x63,0x7f,0x3e,\r
+};\r
+\r
+static const BitmapCharRec ch231 = {8,14,-1,4,10,ch231data};\r
+\r
+/* char: 0xe6 */\r
+\r
+static const GLubyte ch230data[] = {\r
+0x75,0xe0,0xef,0xf8,0xc7,0x18,0xc6,0x0,0xe6,0x0,0x7f,0xf8,0xe,0x18,0xc6,0x18,\r
+0xef,0xf0,0x7d,0xe0,\r
+};\r
+\r
+static const BitmapCharRec ch230 = {13,10,-1,0,15,ch230data};\r
+\r
+/* char: 0xe5 */\r
+\r
+static const GLubyte ch229data[] = {\r
+0x76,0xee,0xc6,0xc6,0xe6,0x7e,0xe,0xc6,0xee,0x7c,0x38,0x6c,0x6c,0x38,\r
+};\r
+\r
+static const BitmapCharRec ch229 = {7,14,-1,0,9,ch229data};\r
+\r
+/* char: 0xe4 */\r
+\r
+static const GLubyte ch228data[] = {\r
+0x76,0xee,0xc6,0xc6,0xe6,0x7e,0xe,0xc6,0xee,0x7c,0x0,0x6c,0x6c,\r
+};\r
+\r
+static const BitmapCharRec ch228 = {7,13,-1,0,9,ch228data};\r
+\r
+/* char: 0xe3 */\r
+\r
+static const GLubyte ch227data[] = {\r
+0x76,0xee,0xc6,0xc6,0xe6,0x7e,0xe,0xc6,0xee,0x7c,0x0,0x4c,0x5a,0x32,\r
+};\r
+\r
+static const BitmapCharRec ch227 = {7,14,-1,0,9,ch227data};\r
+\r
+/* char: 0xe2 */\r
+\r
+static const GLubyte ch226data[] = {\r
+0x76,0xee,0xc6,0xc6,0xe6,0x7e,0xe,0xc6,0xee,0x7c,0x0,0x66,0x3c,0x18,\r
+};\r
+\r
+static const BitmapCharRec ch226 = {7,14,-1,0,9,ch226data};\r
+\r
+/* char: 0xe1 */\r
+\r
+static const GLubyte ch225data[] = {\r
+0x76,0xee,0xc6,0xc6,0xe6,0x7e,0xe,0xc6,0xee,0x7c,0x0,0x30,0x18,0xc,\r
+};\r
+\r
+static const BitmapCharRec ch225 = {7,14,-1,0,9,ch225data};\r
+\r
+/* char: 0xe0 */\r
+\r
+static const GLubyte ch224data[] = {\r
+0x76,0xee,0xc6,0xc6,0xe6,0x7e,0xe,0xc6,0xee,0x7c,0x0,0x18,0x30,0x60,\r
+};\r
+\r
+static const BitmapCharRec ch224 = {7,14,-1,0,9,ch224data};\r
+\r
+/* char: 0xdf */\r
+\r
+static const GLubyte ch223data[] = {\r
+0xdc,0xde,0xc6,0xc6,0xc6,0xc6,0xdc,0xdc,0xc6,0xc6,0xc6,0xc6,0x7c,0x38,\r
+};\r
+\r
+static const BitmapCharRec ch223 = {7,14,-1,0,9,ch223data};\r
+\r
+/* char: 0xde */\r
+\r
+static const GLubyte ch222data[] = {\r
+0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x0,0xff,0x80,0xc1,0xc0,0xc0,0xc0,0xc0,0xc0,\r
+0xc1,0xc0,0xff,0x80,0xff,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch222 = {10,14,-1,0,12,ch222data};\r
+\r
+/* char: 0xdd */\r
+\r
+static const GLubyte ch221data[] = {\r
+0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0xf,0x0,0x19,0x80,\r
+0x30,0xc0,0x30,0xc0,0x60,0x60,0x60,0x60,0xc0,0x30,0xc0,0x30,0x0,0x0,0x6,0x0,\r
+0x3,0x0,0x1,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch221 = {12,18,-1,0,14,ch221data};\r
+\r
+/* char: 0xdc */\r
+\r
+static const GLubyte ch220data[] = {\r
+0x1f,0x0,0x7f,0xc0,0x60,0xc0,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,\r
+0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0x0,0x0,0x19,0x80,\r
+0x19,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch220 = {11,17,-1,0,13,ch220data};\r
+\r
+/* char: 0xdb */\r
+\r
+static const GLubyte ch219data[] = {\r
+0x1f,0x0,0x7f,0xc0,0x60,0xc0,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,\r
+0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0x0,0x0,0x19,0x80,\r
+0xf,0x0,0x6,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch219 = {11,18,-1,0,13,ch219data};\r
+\r
+/* char: 0xda */\r
+\r
+static const GLubyte ch218data[] = {\r
+0x1f,0x0,0x7f,0xc0,0x60,0xc0,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,\r
+0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0x0,0x0,0xc,0x0,\r
+0x6,0x0,0x3,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch218 = {11,18,-1,0,13,ch218data};\r
+\r
+/* char: 0xd9 */\r
+\r
+static const GLubyte ch217data[] = {\r
+0x1f,0x0,0x7f,0xc0,0x60,0xc0,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,\r
+0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0x0,0x0,0x6,0x0,\r
+0xc,0x0,0x18,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch217 = {11,18,-1,0,13,ch217data};\r
+\r
+/* char: 0xd8 */\r
+\r
+static const GLubyte ch216data[] = {\r
+0xc7,0xc0,0xff,0xf0,0x78,0x38,0x38,0x18,0x6c,0x1c,0x6e,0xc,0x67,0xc,0x63,0x8c,\r
+0x61,0xcc,0x70,0xdc,0x30,0x78,0x38,0x38,0x1f,0xfc,0x7,0xcc,\r
+};\r
+\r
+static const BitmapCharRec ch216 = {14,14,0,0,15,ch216data};\r
+\r
+/* char: 0xd7 */\r
+\r
+static const GLubyte ch215data[] = {\r
+0xc0,0xc0,0x61,0x80,0x33,0x0,0x1e,0x0,0xc,0x0,0x1e,0x0,0x33,0x0,0x61,0x80,\r
+0xc0,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch215 = {10,9,0,0,10,ch215data};\r
+\r
+/* char: 0xd6 */\r
+\r
+static const GLubyte ch214data[] = {\r
+0xf,0x80,0x3f,0xe0,0x70,0x70,0x60,0x30,0xe0,0x38,0xc0,0x18,0xc0,0x18,0xc0,0x18,\r
+0xc0,0x18,0xe0,0x38,0x60,0x30,0x70,0x70,0x3f,0xe0,0xf,0x80,0x0,0x0,0xd,0x80,\r
+0xd,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch214 = {13,17,-1,0,15,ch214data};\r
+\r
+/* char: 0xd5 */\r
+\r
+static const GLubyte ch213data[] = {\r
+0xf,0x80,0x3f,0xe0,0x70,0x70,0x60,0x30,0xe0,0x38,0xc0,0x18,0xc0,0x18,0xc0,0x18,\r
+0xc0,0x18,0xe0,0x38,0x60,0x30,0x70,0x70,0x3f,0xe0,0xf,0x80,0x0,0x0,0x9,0x80,\r
+0xb,0x40,0x6,0x40,\r
+};\r
+\r
+static const BitmapCharRec ch213 = {13,18,-1,0,15,ch213data};\r
+\r
+/* char: 0xd4 */\r
+\r
+static const GLubyte ch212data[] = {\r
+0xf,0x80,0x3f,0xe0,0x70,0x70,0x60,0x30,0xe0,0x38,0xc0,0x18,0xc0,0x18,0xc0,0x18,\r
+0xc0,0x18,0xe0,0x38,0x60,0x30,0x70,0x70,0x3f,0xe0,0xf,0x80,0x0,0x0,0xc,0xc0,\r
+0x7,0x80,0x3,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch212 = {13,18,-1,0,15,ch212data};\r
+\r
+/* char: 0xd3 */\r
+\r
+static const GLubyte ch211data[] = {\r
+0xf,0x80,0x3f,0xe0,0x70,0x70,0x60,0x30,0xe0,0x38,0xc0,0x18,0xc0,0x18,0xc0,0x18,\r
+0xc0,0x18,0xe0,0x38,0x60,0x30,0x70,0x70,0x3f,0xe0,0xf,0x80,0x0,0x0,0x3,0x0,\r
+0x1,0x80,0x0,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch211 = {13,18,-1,0,15,ch211data};\r
+\r
+/* char: 0xd2 */\r
+\r
+static const GLubyte ch210data[] = {\r
+0xf,0x80,0x3f,0xe0,0x70,0x70,0x60,0x30,0xe0,0x38,0xc0,0x18,0xc0,0x18,0xc0,0x18,\r
+0xc0,0x18,0xe0,0x38,0x60,0x30,0x70,0x70,0x3f,0xe0,0xf,0x80,0x0,0x0,0x3,0x0,\r
+0x6,0x0,0xc,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch210 = {13,18,-1,0,15,ch210data};\r
+\r
+/* char: 0xd1 */\r
+\r
+static const GLubyte ch209data[] = {\r
+0xc0,0x60,0xc0,0xe0,0xc1,0xe0,0xc1,0xe0,0xc3,0x60,0xc6,0x60,0xc6,0x60,0xcc,0x60,\r
+0xcc,0x60,0xd8,0x60,0xd8,0x60,0xf0,0x60,0xe0,0x60,0xe0,0x60,0x0,0x0,0x13,0x0,\r
+0x16,0x80,0xc,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch209 = {11,18,-1,0,13,ch209data};\r
+\r
+/* char: 0xd0 */\r
+\r
+static const GLubyte ch208data[] = {\r
+0x7f,0x80,0x7f,0xc0,0x60,0xe0,0x60,0x60,0x60,0x30,0x60,0x30,0xfc,0x30,0xfc,0x30,\r
+0x60,0x30,0x60,0x30,0x60,0x60,0x60,0xe0,0x7f,0xc0,0x7f,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch208 = {12,14,0,0,13,ch208data};\r
+\r
+/* char: 0xcf */\r
+\r
+static const GLubyte ch207data[] = {\r
+0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x0,0xcc,\r
+0xcc,\r
+};\r
+\r
+static const BitmapCharRec ch207 = {6,17,0,0,6,ch207data};\r
+\r
+/* char: 0xce */\r
+\r
+static const GLubyte ch206data[] = {\r
+0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x0,0xcc,\r
+0x78,0x30,\r
+};\r
+\r
+static const BitmapCharRec ch206 = {6,18,0,0,6,ch206data};\r
+\r
+/* char: 0xcd */\r
+\r
+static const GLubyte ch205data[] = {\r
+0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x0,0xc0,\r
+0x60,0x30,\r
+};\r
+\r
+static const BitmapCharRec ch205 = {4,18,-2,0,6,ch205data};\r
+\r
+/* char: 0xcc */\r
+\r
+static const GLubyte ch204data[] = {\r
+0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x0,0x30,\r
+0x60,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch204 = {4,18,0,0,6,ch204data};\r
+\r
+/* char: 0xcb */\r
+\r
+static const GLubyte ch203data[] = {\r
+0xff,0x80,0xff,0x80,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x0,0xff,0x0,\r
+0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x80,0xff,0x80,0x0,0x0,0x33,0x0,\r
+0x33,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch203 = {9,17,-1,0,11,ch203data};\r
+\r
+/* char: 0xca */\r
+\r
+static const GLubyte ch202data[] = {\r
+0xff,0x80,0xff,0x80,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x0,0xff,0x0,\r
+0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x80,0xff,0x80,0x0,0x0,0x33,0x0,\r
+0x1e,0x0,0xc,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch202 = {9,18,-1,0,11,ch202data};\r
+\r
+/* char: 0xc9 */\r
+\r
+static const GLubyte ch201data[] = {\r
+0xff,0x80,0xff,0x80,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x0,0xff,0x0,\r
+0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x80,0xff,0x80,0x0,0x0,0xc,0x0,\r
+0x6,0x0,0x3,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch201 = {9,18,-1,0,11,ch201data};\r
+\r
+/* char: 0xc8 */\r
+\r
+static const GLubyte ch200data[] = {\r
+0xff,0x80,0xff,0x80,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x0,0xff,0x0,\r
+0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x80,0xff,0x80,0x0,0x0,0xc,0x0,\r
+0x18,0x0,0x30,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch200 = {9,18,-1,0,11,ch200data};\r
+\r
+/* char: 0xc7 */\r
+\r
+static const GLubyte ch199data[] = {\r
+0x1e,0x0,0x1b,0x0,0x3,0x0,0xe,0x0,0xf,0x80,0x3f,0xe0,0x70,0x70,0x60,0x30,\r
+0xe0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xe0,0x0,0x60,0x30,0x70,0x70,\r
+0x3f,0xe0,0xf,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch199 = {12,18,-1,4,14,ch199data};\r
+\r
+/* char: 0xc6 */\r
+\r
+static const GLubyte ch198data[] = {\r
+0xc1,0xff,0xc1,0xff,0x61,0x80,0x61,0x80,0x7f,0x80,0x3f,0x80,0x31,0xfe,0x31,0xfe,\r
+0x19,0x80,0x19,0x80,0xd,0x80,0xd,0x80,0x7,0xff,0x7,0xff,\r
+};\r
+\r
+static const BitmapCharRec ch198 = {16,14,-1,0,18,ch198data};\r
+\r
+/* char: 0xc5 */\r
+\r
+static const GLubyte ch197data[] = {\r
+0xc0,0x30,0xc0,0x30,0x60,0x60,0x60,0x60,0x7f,0xe0,0x3f,0xc0,0x30,0xc0,0x30,0xc0,\r
+0x19,0x80,0x19,0x80,0xf,0x0,0xf,0x0,0x6,0x0,0x6,0x0,0xf,0x0,0x19,0x80,\r
+0x19,0x80,0xf,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch197 = {12,18,0,0,12,ch197data};\r
+\r
+/* char: 0xc4 */\r
+\r
+static const GLubyte ch196data[] = {\r
+0xc0,0x30,0xc0,0x30,0x60,0x60,0x60,0x60,0x7f,0xe0,0x3f,0xc0,0x30,0xc0,0x30,0xc0,\r
+0x19,0x80,0x19,0x80,0xf,0x0,0xf,0x0,0x6,0x0,0x6,0x0,0x0,0x0,0x19,0x80,\r
+0x19,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch196 = {12,17,0,0,12,ch196data};\r
+\r
+/* char: 0xc3 */\r
+\r
+static const GLubyte ch195data[] = {\r
+0xc0,0x30,0xc0,0x30,0x60,0x60,0x60,0x60,0x7f,0xe0,0x3f,0xc0,0x30,0xc0,0x30,0xc0,\r
+0x19,0x80,0x19,0x80,0xf,0x0,0xf,0x0,0x6,0x0,0x6,0x0,0x0,0x0,0x13,0x0,\r
+0x16,0x80,0xc,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch195 = {12,18,0,0,12,ch195data};\r
+\r
+/* char: 0xc2 */\r
+\r
+static const GLubyte ch194data[] = {\r
+0xc0,0x30,0xc0,0x30,0x60,0x60,0x60,0x60,0x7f,0xe0,0x3f,0xc0,0x30,0xc0,0x30,0xc0,\r
+0x19,0x80,0x19,0x80,0xf,0x0,0xf,0x0,0x6,0x0,0x6,0x0,0x0,0x0,0x19,0x80,\r
+0xf,0x0,0x6,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch194 = {12,18,0,0,12,ch194data};\r
+\r
+/* char: 0xc1 */\r
+\r
+static const GLubyte ch193data[] = {\r
+0xc0,0x30,0xc0,0x30,0x60,0x60,0x60,0x60,0x7f,0xe0,0x3f,0xc0,0x30,0xc0,0x30,0xc0,\r
+0x19,0x80,0x19,0x80,0xf,0x0,0xf,0x0,0x6,0x0,0x6,0x0,0x0,0x0,0x6,0x0,\r
+0x3,0x0,0x1,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch193 = {12,18,0,0,12,ch193data};\r
+\r
+/* char: 0xc0 */\r
+\r
+static const GLubyte ch192data[] = {\r
+0xc0,0x30,0xc0,0x30,0x60,0x60,0x60,0x60,0x7f,0xe0,0x3f,0xc0,0x30,0xc0,0x30,0xc0,\r
+0x19,0x80,0x19,0x80,0xf,0x0,0xf,0x0,0x6,0x0,0x6,0x0,0x0,0x0,0x6,0x0,\r
+0xc,0x0,0x18,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch192 = {12,18,0,0,12,ch192data};\r
+\r
+/* char: 0xbf */\r
+\r
+static const GLubyte ch191data[] = {\r
+0x7c,0xfe,0xc6,0xc6,0xe0,0x70,0x38,0x18,0x18,0x18,0x0,0x0,0x18,0x18,\r
+};\r
+\r
+static const BitmapCharRec ch191 = {7,14,-1,4,10,ch191data};\r
+\r
+/* char: 0xbe */\r
+\r
+static const GLubyte ch190data[] = {\r
+0x18,0x18,0x18,0x18,0xc,0xfc,0x6,0xd8,0x6,0x78,0x73,0x38,0xf9,0x18,0x99,0x88,\r
+0x30,0xc0,0x30,0xc0,0x98,0x60,0xf8,0x30,0x70,0x30,\r
+};\r
+\r
+static const BitmapCharRec ch190 = {14,13,0,0,15,ch190data};\r
+\r
+/* char: 0xbd */\r
+\r
+static const GLubyte ch189data[] = {\r
+0x30,0xf8,0x30,0xf8,0x18,0x60,0xc,0x30,0xc,0x18,0x66,0x98,0x62,0xf8,0x63,0x70,\r
+0x61,0x80,0x61,0x80,0xe0,0xc0,0xe0,0x60,0x60,0x60,\r
+};\r
+\r
+static const BitmapCharRec ch189 = {13,13,-1,0,15,ch189data};\r
+\r
+/* char: 0xbc */\r
+\r
+static const GLubyte ch188data[] = {\r
+0x30,0x30,0x30,0x30,0x19,0xf8,0xd,0xb0,0xc,0xf0,0x66,0x70,0x62,0x30,0x63,0x10,\r
+0x61,0x80,0x61,0x80,0xe0,0xc0,0xe0,0x60,0x60,0x60,\r
+};\r
+\r
+static const BitmapCharRec ch188 = {13,13,-1,0,15,ch188data};\r
+\r
+/* char: 0xbb */\r
+\r
+static const GLubyte ch187data[] = {\r
+0x90,0xd8,0x6c,0x36,0x36,0x6c,0xd8,0x90,\r
+};\r
+\r
+static const BitmapCharRec ch187 = {7,8,-1,-1,9,ch187data};\r
+\r
+/* char: 0xba */\r
+\r
+static const GLubyte ch186data[] = {\r
+0xf8,0x0,0x70,0xd8,0x88,0x88,0xd8,0x70,\r
+};\r
+\r
+static const BitmapCharRec ch186 = {5,8,-1,-6,7,ch186data};\r
+\r
+/* char: 0xb9 */\r
+\r
+static const GLubyte ch185data[] = {\r
+0x60,0x60,0x60,0x60,0x60,0xe0,0xe0,0x60,\r
+};\r
+\r
+static const BitmapCharRec ch185 = {3,8,-1,-5,6,ch185data};\r
+\r
+/* char: 0xb8 */\r
+\r
+static const GLubyte ch184data[] = {\r
+0xf0,0xd8,0x18,0x70,0x60,\r
+};\r
+\r
+static const BitmapCharRec ch184 = {5,5,0,4,5,ch184data};\r
+\r
+/* char: 0xb7 */\r
+\r
+static const GLubyte ch183data[] = {\r
+0xc0,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch183 = {2,2,-1,-4,4,ch183data};\r
+\r
+/* char: 0xb6 */\r
+\r
+static const GLubyte ch182data[] = {\r
+0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x32,0x72,0xf2,0xf2,0xf2,0xf2,\r
+0x72,0x3f,\r
+};\r
+\r
+static const BitmapCharRec ch182 = {8,18,-1,4,10,ch182data};\r
+\r
+/* char: 0xb5 */\r
+\r
+static const GLubyte ch181data[] = {\r
+0xc0,0xc0,0xc0,0xc0,0xdb,0xff,0xe7,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,\r
+};\r
+\r
+static const BitmapCharRec ch181 = {8,14,-1,4,10,ch181data};\r
+\r
+/* char: 0xb4 */\r
+\r
+static const GLubyte ch180data[] = {\r
+0xc0,0x60,0x30,\r
+};\r
+\r
+static const BitmapCharRec ch180 = {4,3,0,-11,4,ch180data};\r
+\r
+/* char: 0xb3 */\r
+\r
+static const GLubyte ch179data[] = {\r
+0x70,0xf8,0x98,0x30,0x30,0x98,0xf8,0x70,\r
+};\r
+\r
+static const BitmapCharRec ch179 = {5,8,0,-5,6,ch179data};\r
+\r
+/* char: 0xb2 */\r
+\r
+static const GLubyte ch178data[] = {\r
+0xf8,0xf8,0x60,0x30,0x18,0x98,0xf8,0x70,\r
+};\r
+\r
+static const BitmapCharRec ch178 = {5,8,0,-5,6,ch178data};\r
+\r
+/* char: 0xb1 */\r
+\r
+static const GLubyte ch177data[] = {\r
+0xff,0xff,0x0,0x18,0x18,0x18,0xff,0xff,0x18,0x18,0x18,\r
+};\r
+\r
+static const BitmapCharRec ch177 = {8,11,-1,0,10,ch177data};\r
+\r
+/* char: 0xb0 */\r
+\r
+static const GLubyte ch176data[] = {\r
+0x70,0xd8,0x88,0xd8,0x70,\r
+};\r
+\r
+static const BitmapCharRec ch176 = {5,5,-1,-8,7,ch176data};\r
+\r
+/* char: 0xaf */\r
+\r
+static const GLubyte ch175data[] = {\r
+0xf8,\r
+};\r
+\r
+static const BitmapCharRec ch175 = {5,1,0,-12,5,ch175data};\r
+\r
+/* char: 0xae */\r
+\r
+static const GLubyte ch174data[] = {\r
+0xf,0x80,0x30,0x60,0x40,0x10,0x48,0x50,0x88,0x88,0x89,0x8,0x8f,0x88,0x88,0x48,\r
+0x88,0x48,0x4f,0x90,0x40,0x10,0x30,0x60,0xf,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch174 = {13,13,-1,0,14,ch174data};\r
+\r
+/* char: 0xad */\r
+\r
+static const GLubyte ch173data[] = {\r
+0xf8,0xf8,\r
+};\r
+\r
+static const BitmapCharRec ch173 = {5,2,-1,-4,7,ch173data};\r
+\r
+/* char: 0xac */\r
+\r
+static const GLubyte ch172data[] = {\r
+0x1,0x80,0x1,0x80,0x1,0x80,0xff,0x80,0xff,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch172 = {9,5,-1,-3,11,ch172data};\r
+\r
+/* char: 0xab */\r
+\r
+static const GLubyte ch171data[] = {\r
+0x12,0x36,0x6c,0xd8,0xd8,0x6c,0x36,0x12,\r
+};\r
+\r
+static const BitmapCharRec ch171 = {7,8,-1,-1,9,ch171data};\r
+\r
+/* char: 0xaa */\r
+\r
+static const GLubyte ch170data[] = {\r
+0xf8,0x0,0x68,0xd8,0x48,0x38,0xc8,0x70,\r
+};\r
+\r
+static const BitmapCharRec ch170 = {5,8,-1,-6,7,ch170data};\r
+\r
+/* char: 0xa9 */\r
+\r
+static const GLubyte ch169data[] = {\r
+0xf,0x80,0x30,0x60,0x40,0x10,0x47,0x10,0x88,0x88,0x90,0x8,0x90,0x8,0x90,0x8,\r
+0x88,0x88,0x47,0x10,0x40,0x10,0x30,0x60,0xf,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch169 = {13,13,-1,0,15,ch169data};\r
+\r
+/* char: 0xa8 */\r
+\r
+static const GLubyte ch168data[] = {\r
+0xd8,0xd8,\r
+};\r
+\r
+static const BitmapCharRec ch168 = {5,2,0,-11,6,ch168data};\r
+\r
+/* char: 0xa7 */\r
+\r
+static const GLubyte ch167data[] = {\r
+0x3c,0x7e,0xc3,0xc3,0x7,0xe,0x3e,0x73,0xe3,0xc3,0xc7,0x6e,0x7c,0xf0,0xc3,0xc3,\r
+0x7e,0x3c,\r
+};\r
+\r
+static const BitmapCharRec ch167 = {8,18,-1,4,10,ch167data};\r
+\r
+/* char: 0xa6 */\r
+\r
+static const GLubyte ch166data[] = {\r
+0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x0,0x0,0x0,0x0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,\r
+0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch166 = {2,17,-1,3,4,ch166data};\r
+\r
+/* char: 0xa5 */\r
+\r
+static const GLubyte ch165data[] = {\r
+0x18,0x18,0x18,0x18,0xff,0x18,0xff,0x3c,0x66,0x66,0x66,0xc3,0xc3,\r
+};\r
+\r
+static const BitmapCharRec ch165 = {8,13,-1,0,10,ch165data};\r
+\r
+/* char: 0xa4 */\r
+\r
+static const GLubyte ch164data[] = {\r
+0xc3,0xff,0x66,0x66,0x66,0xff,0xc3,\r
+};\r
+\r
+static const BitmapCharRec ch164 = {8,7,-1,-3,10,ch164data};\r
+\r
+/* char: 0xa3 */\r
+\r
+static const GLubyte ch163data[] = {\r
+0xdf,0x0,0xff,0x80,0x60,0x80,0x30,0x0,0x18,0x0,0x18,0x0,0x7e,0x0,0x30,0x0,\r
+0x60,0x0,0x61,0x80,0x61,0x80,0x3f,0x0,0x1e,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch163 = {9,13,0,0,10,ch163data};\r
+\r
+/* char: 0xa2 */\r
+\r
+static const GLubyte ch162data[] = {\r
+0x10,0x10,0x3e,0x7f,0x6b,0xc8,0xc8,0xc8,0xc8,0x6b,0x7f,0x3e,0x4,0x4,\r
+};\r
+\r
+static const BitmapCharRec ch162 = {8,14,-1,2,10,ch162data};\r
+\r
+/* char: 0xa1 */\r
+\r
+static const GLubyte ch161data[] = {\r
+0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x40,0x40,0x0,0x0,0xc0,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch161 = {2,14,-2,4,6,ch161data};\r
+\r
+/* char: 0xa0 */\r
+\r
+#ifdef _WIN32\r
+/* XXX Work around Microsoft OpenGL 1.1 bug where glBitmap with\r
+   a height or width of zero does not advance the raster position\r
+   as specified by OpenGL. (Cosmo OpenGL does not have this bug.) */\r
+static const GLubyte ch160data[] = { 0x0 };\r
+static const BitmapCharRec ch160 = {1,1,0,0,5,ch160data};\r
+#else\r
+static const BitmapCharRec ch160 = {0,0,0,0,5,0};\r
+#endif\r
+\r
+/* char: 0x7e '~' */\r
+\r
+static const GLubyte ch126data[] = {\r
+0xcc,0x7e,0x33,\r
+};\r
+\r
+static const BitmapCharRec ch126 = {8,3,-1,-4,10,ch126data};\r
+\r
+/* char: 0x7d '}' */\r
+\r
+static const GLubyte ch125data[] = {\r
+0xc0,0x60,0x30,0x30,0x30,0x30,0x30,0x30,0x18,0xc,0x18,0x30,0x30,0x30,0x30,0x30,\r
+0x60,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch125 = {6,18,0,4,6,ch125data};\r
+\r
+/* char: 0x7c '|' */\r
+\r
+static const GLubyte ch124data[] = {\r
+0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,\r
+0xc0,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch124 = {2,18,-1,4,4,ch124data};\r
+\r
+/* char: 0x7b '{' */\r
+\r
+static const GLubyte ch123data[] = {\r
+0xc,0x18,0x30,0x30,0x30,0x30,0x30,0x30,0x60,0xc0,0x60,0x30,0x30,0x30,0x30,0x30,\r
+0x18,0xc,\r
+};\r
+\r
+static const BitmapCharRec ch123 = {6,18,0,4,6,ch123data};\r
+\r
+/* char: 0x7a 'z' */\r
+\r
+static const GLubyte ch122data[] = {\r
+0xfe,0xfe,0xc0,0x60,0x30,0x18,0xc,0x6,0xfe,0xfe,\r
+};\r
+\r
+static const BitmapCharRec ch122 = {7,10,-1,0,9,ch122data};\r
+\r
+/* char: 0x79 'y' */\r
+\r
+static const GLubyte ch121data[] = {\r
+0x70,0x70,0x18,0x18,0x18,0x18,0x3c,0x24,0x66,0x66,0x66,0xc3,0xc3,0xc3,\r
+};\r
+\r
+static const BitmapCharRec ch121 = {8,14,-1,4,10,ch121data};\r
+\r
+/* char: 0x78 'x' */\r
+\r
+static const GLubyte ch120data[] = {\r
+0xc3,0xe7,0x66,0x3c,0x18,0x18,0x3c,0x66,0xe7,0xc3,\r
+};\r
+\r
+static const BitmapCharRec ch120 = {8,10,-1,0,10,ch120data};\r
+\r
+/* char: 0x77 'w' */\r
+\r
+static const GLubyte ch119data[] = {\r
+0x19,0x80,0x19,0x80,0x39,0xc0,0x29,0x40,0x69,0x60,0x66,0x60,0x66,0x60,0xc6,0x30,\r
+0xc6,0x30,0xc6,0x30,\r
+};\r
+\r
+static const BitmapCharRec ch119 = {12,10,-1,0,14,ch119data};\r
+\r
+/* char: 0x76 'v' */\r
+\r
+static const GLubyte ch118data[] = {\r
+0x18,0x18,0x3c,0x24,0x66,0x66,0x66,0xc3,0xc3,0xc3,\r
+};\r
+\r
+static const BitmapCharRec ch118 = {8,10,-1,0,10,ch118data};\r
+\r
+/* char: 0x75 'u' */\r
+\r
+static const GLubyte ch117data[] = {\r
+0x73,0xfb,0xc7,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,\r
+};\r
+\r
+static const BitmapCharRec ch117 = {8,10,-1,0,10,ch117data};\r
+\r
+/* char: 0x74 't' */\r
+\r
+static const GLubyte ch116data[] = {\r
+0x18,0x38,0x30,0x30,0x30,0x30,0x30,0x30,0xfc,0xfc,0x30,0x30,0x30,\r
+};\r
+\r
+static const BitmapCharRec ch116 = {6,13,0,0,6,ch116data};\r
+\r
+/* char: 0x73 's' */\r
+\r
+static const GLubyte ch115data[] = {\r
+0x78,0xfc,0xc6,0x6,0x3e,0xfc,0xc0,0xc6,0x7e,0x3c,\r
+};\r
+\r
+static const BitmapCharRec ch115 = {7,10,-1,0,9,ch115data};\r
+\r
+/* char: 0x72 'r' */\r
+\r
+static const GLubyte ch114data[] = {\r
+0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xe0,0xd8,0xd8,\r
+};\r
+\r
+static const BitmapCharRec ch114 = {5,10,-1,0,6,ch114data};\r
+\r
+/* char: 0x71 'q' */\r
+\r
+static const GLubyte ch113data[] = {\r
+0x1,0x80,0x1,0x80,0x1,0x80,0x1,0x80,0x3d,0x80,0x7f,0x80,0x63,0x80,0xc1,0x80,\r
+0xc1,0x80,0xc1,0x80,0xc1,0x80,0x63,0x80,0x7f,0x80,0x3d,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch113 = {9,14,-1,4,11,ch113data};\r
+\r
+/* char: 0x70 'p' */\r
+\r
+static const GLubyte ch112data[] = {\r
+0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xde,0x0,0xff,0x0,0xe3,0x0,0xc1,0x80,\r
+0xc1,0x80,0xc1,0x80,0xc1,0x80,0xe3,0x0,0xff,0x0,0xde,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch112 = {9,14,-1,4,11,ch112data};\r
+\r
+/* char: 0x6f 'o' */\r
+\r
+static const GLubyte ch111data[] = {\r
+0x3e,0x0,0x7f,0x0,0x63,0x0,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0x63,0x0,\r
+0x7f,0x0,0x3e,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch111 = {9,10,-1,0,11,ch111data};\r
+\r
+/* char: 0x6e 'n' */\r
+\r
+static const GLubyte ch110data[] = {\r
+0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xe3,0xdf,0xce,\r
+};\r
+\r
+static const BitmapCharRec ch110 = {8,10,-1,0,10,ch110data};\r
+\r
+/* char: 0x6d 'm' */\r
+\r
+static const GLubyte ch109data[] = {\r
+0xc6,0x30,0xc6,0x30,0xc6,0x30,0xc6,0x30,0xc6,0x30,0xc6,0x30,0xc6,0x30,0xe7,0x30,\r
+0xde,0xf0,0xcc,0x60,\r
+};\r
+\r
+static const BitmapCharRec ch109 = {12,10,-1,0,14,ch109data};\r
+\r
+/* char: 0x6c 'l' */\r
+\r
+static const GLubyte ch108data[] = {\r
+0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch108 = {2,14,-1,0,4,ch108data};\r
+\r
+/* char: 0x6b 'k' */\r
+\r
+static const GLubyte ch107data[] = {\r
+0xc7,0xc6,0xce,0xcc,0xd8,0xf8,0xf0,0xd8,0xcc,0xc6,0xc0,0xc0,0xc0,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch107 = {8,14,-1,0,9,ch107data};\r
+\r
+/* char: 0x6a 'j' */\r
+\r
+static const GLubyte ch106data[] = {\r
+0xe0,0xf0,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x0,0x0,\r
+0x30,0x30,\r
+};\r
+\r
+static const BitmapCharRec ch106 = {4,18,1,4,4,ch106data};\r
+\r
+/* char: 0x69 'i' */\r
+\r
+static const GLubyte ch105data[] = {\r
+0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x0,0x0,0xc0,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch105 = {2,14,-1,0,4,ch105data};\r
+\r
+/* char: 0x68 'h' */\r
+\r
+static const GLubyte ch104data[] = {\r
+0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xe3,0xdf,0xce,0xc0,0xc0,0xc0,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch104 = {8,14,-1,0,10,ch104data};\r
+\r
+/* char: 0x67 'g' */\r
+\r
+static const GLubyte ch103data[] = {\r
+0x1c,0x0,0x7f,0x0,0x63,0x0,0x1,0x80,0x3d,0x80,0x7f,0x80,0x63,0x80,0xc1,0x80,\r
+0xc1,0x80,0xc1,0x80,0xc1,0x80,0x61,0x80,0x7f,0x80,0x3d,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch103 = {9,14,-1,4,11,ch103data};\r
+\r
+/* char: 0x66 'f' */\r
+\r
+static const GLubyte ch102data[] = {\r
+0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0xfc,0xfc,0x30,0x30,0x3c,0x1c,\r
+};\r
+\r
+static const BitmapCharRec ch102 = {6,14,0,0,6,ch102data};\r
+\r
+/* char: 0x65 'e' */\r
+\r
+static const GLubyte ch101data[] = {\r
+0x3c,0x7f,0xe3,0xc0,0xc0,0xff,0xc3,0xc3,0x7e,0x3c,\r
+};\r
+\r
+static const BitmapCharRec ch101 = {8,10,-1,0,10,ch101data};\r
+\r
+/* char: 0x64 'd' */\r
+\r
+static const GLubyte ch100data[] = {\r
+0x3d,0x80,0x7f,0x80,0x63,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0x63,0x80,\r
+0x7f,0x80,0x3d,0x80,0x1,0x80,0x1,0x80,0x1,0x80,0x1,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch100 = {9,14,-1,0,11,ch100data};\r
+\r
+/* char: 0x63 'c' */\r
+\r
+static const GLubyte ch99data[] = {\r
+0x3e,0x7f,0x63,0xc0,0xc0,0xc0,0xc0,0x63,0x7f,0x3e,\r
+};\r
+\r
+static const BitmapCharRec ch99 = {8,10,-1,0,10,ch99data};\r
+\r
+/* char: 0x62 'b' */\r
+\r
+static const GLubyte ch98data[] = {\r
+0xde,0x0,0xff,0x0,0xe3,0x0,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xe3,0x0,\r
+0xff,0x0,0xde,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch98 = {9,14,-1,0,11,ch98data};\r
+\r
+/* char: 0x61 'a' */\r
+\r
+static const GLubyte ch97data[] = {\r
+0x76,0xee,0xc6,0xc6,0xe6,0x7e,0xe,0xc6,0xee,0x7c,\r
+};\r
+\r
+static const BitmapCharRec ch97 = {7,10,-1,0,9,ch97data};\r
+\r
+/* char: 0x60 '`' */\r
+\r
+static const GLubyte ch96data[] = {\r
+0xc0,0xc0,0x80,0x80,0x40,\r
+};\r
+\r
+static const BitmapCharRec ch96 = {2,5,-1,-9,4,ch96data};\r
+\r
+/* char: 0x5f '_' */\r
+\r
+static const GLubyte ch95data[] = {\r
+0xff,0xc0,0xff,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch95 = {10,2,0,4,10,ch95data};\r
+\r
+/* char: 0x5e '^' */\r
+\r
+static const GLubyte ch94data[] = {\r
+0x82,0xc6,0x6c,0x38,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch94 = {7,5,-1,-8,9,ch94data};\r
+\r
+/* char: 0x5d ']' */\r
+\r
+static const GLubyte ch93data[] = {\r
+0xf0,0xf0,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,\r
+0xf0,0xf0,\r
+};\r
+\r
+static const BitmapCharRec ch93 = {4,18,0,4,5,ch93data};\r
+\r
+/* char: 0x5c '\' */\r
+\r
+static const GLubyte ch92data[] = {\r
+0x18,0x18,0x10,0x10,0x30,0x30,0x20,0x20,0x60,0x60,0x40,0x40,0xc0,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch92 = {5,14,0,0,5,ch92data};\r
+\r
+/* char: 0x5b '[' */\r
+\r
+static const GLubyte ch91data[] = {\r
+0xf0,0xf0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,\r
+0xf0,0xf0,\r
+};\r
+\r
+static const BitmapCharRec ch91 = {4,18,-1,4,5,ch91data};\r
+\r
+/* char: 0x5a 'Z' */\r
+\r
+static const GLubyte ch90data[] = {\r
+0xff,0xc0,0xff,0xc0,0xc0,0x0,0x60,0x0,0x30,0x0,0x18,0x0,0x1c,0x0,0xc,0x0,\r
+0x6,0x0,0x3,0x0,0x1,0x80,0x0,0xc0,0xff,0xc0,0xff,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch90 = {10,14,-1,0,12,ch90data};\r
+\r
+/* char: 0x59 'Y' */\r
+\r
+static const GLubyte ch89data[] = {\r
+0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0xf,0x0,0x19,0x80,\r
+0x30,0xc0,0x30,0xc0,0x60,0x60,0x60,0x60,0xc0,0x30,0xc0,0x30,\r
+};\r
+\r
+static const BitmapCharRec ch89 = {12,14,-1,0,14,ch89data};\r
+\r
+/* char: 0x58 'X' */\r
+\r
+static const GLubyte ch88data[] = {\r
+0xc0,0x60,0xe0,0xe0,0x60,0xc0,0x71,0xc0,0x31,0x80,0x1b,0x0,0xe,0x0,0xe,0x0,\r
+0x1b,0x0,0x31,0x80,0x71,0xc0,0x60,0xc0,0xe0,0xe0,0xc0,0x60,\r
+};\r
+\r
+static const BitmapCharRec ch88 = {11,14,-1,0,13,ch88data};\r
+\r
+/* char: 0x57 'W' */\r
+\r
+static const GLubyte ch87data[] = {\r
+0x18,0x18,0x18,0x18,0x1c,0x38,0x34,0x2c,0x36,0x6c,0x36,0x6c,0x66,0x66,0x66,0x66,\r
+0x62,0x46,0x63,0xc6,0xc3,0xc3,0xc1,0x83,0xc1,0x83,0xc1,0x83,\r
+};\r
+\r
+static const BitmapCharRec ch87 = {16,14,-1,0,18,ch87data};\r
+\r
+/* char: 0x56 'V' */\r
+\r
+static const GLubyte ch86data[] = {\r
+0x6,0x0,0xf,0x0,0xf,0x0,0x19,0x80,0x19,0x80,0x19,0x80,0x30,0xc0,0x30,0xc0,\r
+0x30,0xc0,0x60,0x60,0x60,0x60,0x60,0x60,0xc0,0x30,0xc0,0x30,\r
+};\r
+\r
+static const BitmapCharRec ch86 = {12,14,-1,0,14,ch86data};\r
+\r
+/* char: 0x55 'U' */\r
+\r
+static const GLubyte ch85data[] = {\r
+0x1f,0x0,0x7f,0xc0,0x60,0xc0,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,\r
+0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,\r
+};\r
+\r
+static const BitmapCharRec ch85 = {11,14,-1,0,13,ch85data};\r
+\r
+/* char: 0x54 'T' */\r
+\r
+static const GLubyte ch84data[] = {\r
+0xc,0x0,0xc,0x0,0xc,0x0,0xc,0x0,0xc,0x0,0xc,0x0,0xc,0x0,0xc,0x0,\r
+0xc,0x0,0xc,0x0,0xc,0x0,0xc,0x0,0xff,0xc0,0xff,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch84 = {10,14,-1,0,12,ch84data};\r
+\r
+/* char: 0x53 'S' */\r
+\r
+static const GLubyte ch83data[] = {\r
+0x3f,0x0,0x7f,0xc0,0xe0,0xe0,0xc0,0x60,0x0,0x60,0x0,0xe0,0x3,0xc0,0x1f,0x0,\r
+0x7c,0x0,0xe0,0x0,0xc0,0x60,0xe0,0xe0,0x7f,0xc0,0x1f,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch83 = {11,14,-1,0,13,ch83data};\r
+\r
+/* char: 0x52 'R' */\r
+\r
+static const GLubyte ch82data[] = {\r
+0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc1,0x80,0xc1,0x80,0xff,0x0,0xff,0x80,\r
+0xc1,0xc0,0xc0,0xc0,0xc0,0xc0,0xc1,0xc0,0xff,0x80,0xff,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch82 = {10,14,-1,0,12,ch82data};\r
+\r
+/* char: 0x51 'Q' */\r
+\r
+static const GLubyte ch81data[] = {\r
+0x0,0x30,0xf,0xb0,0x3f,0xe0,0x70,0xf0,0x61,0xb0,0xe1,0xb8,0xc0,0x18,0xc0,0x18,\r
+0xc0,0x18,0xc0,0x18,0xe0,0x38,0x60,0x30,0x70,0x70,0x3f,0xe0,0xf,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch81 = {13,15,-1,1,15,ch81data};\r
+\r
+/* char: 0x50 'P' */\r
+\r
+static const GLubyte ch80data[] = {\r
+0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x0,0xff,0x80,\r
+0xc1,0xc0,0xc0,0xc0,0xc0,0xc0,0xc1,0xc0,0xff,0x80,0xff,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch80 = {10,14,-1,0,12,ch80data};\r
+\r
+/* char: 0x4f 'O' */\r
+\r
+static const GLubyte ch79data[] = {\r
+0xf,0x80,0x3f,0xe0,0x70,0x70,0x60,0x30,0xe0,0x38,0xc0,0x18,0xc0,0x18,0xc0,0x18,\r
+0xc0,0x18,0xe0,0x38,0x60,0x30,0x70,0x70,0x3f,0xe0,0xf,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch79 = {13,14,-1,0,15,ch79data};\r
+\r
+/* char: 0x4e 'N' */\r
+\r
+static const GLubyte ch78data[] = {\r
+0xc0,0x60,0xc0,0xe0,0xc1,0xe0,0xc1,0xe0,0xc3,0x60,0xc6,0x60,0xc6,0x60,0xcc,0x60,\r
+0xcc,0x60,0xd8,0x60,0xf0,0x60,0xf0,0x60,0xe0,0x60,0xc0,0x60,\r
+};\r
+\r
+static const BitmapCharRec ch78 = {11,14,-1,0,13,ch78data};\r
+\r
+/* char: 0x4d 'M' */\r
+\r
+static const GLubyte ch77data[] = {\r
+0xc3,0xc,0xc3,0xc,0xc7,0x8c,0xc4,0x8c,0xcc,0xcc,0xcc,0xcc,0xd8,0x6c,0xd8,0x6c,\r
+0xf0,0x3c,0xf0,0x3c,0xe0,0x1c,0xe0,0x1c,0xc0,0xc,0xc0,0xc,\r
+};\r
+\r
+static const BitmapCharRec ch77 = {14,14,-1,0,16,ch77data};\r
+\r
+/* char: 0x4c 'L' */\r
+\r
+static const GLubyte ch76data[] = {\r
+0xff,0xff,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch76 = {8,14,-1,0,10,ch76data};\r
+\r
+/* char: 0x4b 'K' */\r
+\r
+static const GLubyte ch75data[] = {\r
+0xc0,0x70,0xc0,0xe0,0xc1,0xc0,0xc3,0x80,0xc7,0x0,0xce,0x0,0xfc,0x0,0xf8,0x0,\r
+0xdc,0x0,0xce,0x0,0xc7,0x0,0xc3,0x80,0xc1,0xc0,0xc0,0xe0,\r
+};\r
+\r
+static const BitmapCharRec ch75 = {12,14,-1,0,13,ch75data};\r
+\r
+/* char: 0x4a 'J' */\r
+\r
+static const GLubyte ch74data[] = {\r
+0x3c,0x7e,0xe7,0xc3,0xc3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,\r
+};\r
+\r
+static const BitmapCharRec ch74 = {8,14,-1,0,10,ch74data};\r
+\r
+/* char: 0x49 'I' */\r
+\r
+static const GLubyte ch73data[] = {\r
+0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch73 = {2,14,-2,0,6,ch73data};\r
+\r
+/* char: 0x48 'H' */\r
+\r
+static const GLubyte ch72data[] = {\r
+0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xff,0xe0,0xff,0xe0,\r
+0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,\r
+};\r
+\r
+static const BitmapCharRec ch72 = {11,14,-1,0,13,ch72data};\r
+\r
+/* char: 0x47 'G' */\r
+\r
+static const GLubyte ch71data[] = {\r
+0xf,0xb0,0x3f,0xf0,0x70,0x70,0x60,0x30,0xe0,0x30,0xc1,0xf0,0xc1,0xf0,0xc0,0x0,\r
+0xc0,0x0,0xe0,0x30,0x60,0x30,0x70,0x70,0x3f,0xe0,0xf,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch71 = {12,14,-1,0,14,ch71data};\r
+\r
+/* char: 0x46 'F' */\r
+\r
+static const GLubyte ch70data[] = {\r
+0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x0,0xff,0x0,\r
+0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x80,0xff,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch70 = {9,14,-1,0,11,ch70data};\r
+\r
+/* char: 0x45 'E' */\r
+\r
+static const GLubyte ch69data[] = {\r
+0xff,0x80,0xff,0x80,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x0,0xff,0x0,\r
+0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x80,0xff,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch69 = {9,14,-1,0,11,ch69data};\r
+\r
+/* char: 0x44 'D' */\r
+\r
+static const GLubyte ch68data[] = {\r
+0xff,0x0,0xff,0x80,0xc1,0xc0,0xc0,0xc0,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,\r
+0xc0,0x60,0xc0,0x60,0xc0,0xc0,0xc1,0xc0,0xff,0x80,0xff,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch68 = {11,14,-1,0,13,ch68data};\r
+\r
+/* char: 0x43 'C' */\r
+\r
+static const GLubyte ch67data[] = {\r
+0xf,0x80,0x3f,0xe0,0x70,0x70,0x60,0x30,0xe0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,\r
+0xc0,0x0,0xe0,0x0,0x60,0x30,0x70,0x70,0x3f,0xe0,0xf,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch67 = {12,14,-1,0,14,ch67data};\r
+\r
+/* char: 0x42 'B' */\r
+\r
+static const GLubyte ch66data[] = {\r
+0xff,0x80,0xff,0xc0,0xc0,0xe0,0xc0,0x60,0xc0,0x60,0xc0,0xe0,0xff,0xc0,0xff,0x80,\r
+0xc1,0x80,0xc0,0xc0,0xc0,0xc0,0xc1,0xc0,0xff,0x80,0xff,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch66 = {11,14,-1,0,13,ch66data};\r
+\r
+/* char: 0x41 'A' */\r
+\r
+static const GLubyte ch65data[] = {\r
+0xc0,0x30,0xc0,0x30,0x60,0x60,0x60,0x60,0x7f,0xe0,0x3f,0xc0,0x30,0xc0,0x30,0xc0,\r
+0x19,0x80,0x19,0x80,0xf,0x0,0xf,0x0,0x6,0x0,0x6,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch65 = {12,14,0,0,12,ch65data};\r
+\r
+/* char: 0x40 '@' */\r
+\r
+static const GLubyte ch64data[] = {\r
+0x7,0xe0,0x1f,0xf0,0x38,0x0,0x70,0x0,0x67,0x70,0xcf,0xf8,0xcc,0xcc,0xcc,0x66,\r
+0xcc,0x66,0xcc,0x63,0xc6,0x33,0x67,0x73,0x63,0xb3,0x30,0x6,0x1c,0xe,0xf,0xfc,\r
+0x3,0xf0,\r
+};\r
+\r
+static const BitmapCharRec ch64 = {16,17,-1,3,18,ch64data};\r
+\r
+/* char: 0x3f '?' */\r
+\r
+static const GLubyte ch63data[] = {\r
+0x30,0x30,0x0,0x0,0x30,0x30,0x30,0x38,0x1c,0xe,0xc6,0xc6,0xfe,0x7c,\r
+};\r
+\r
+static const BitmapCharRec ch63 = {7,14,-1,0,10,ch63data};\r
+\r
+/* char: 0x3e '>' */\r
+\r
+static const GLubyte ch62data[] = {\r
+0xc0,0xf0,0x3c,0xe,0x3,0xe,0x3c,0xf0,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch62 = {8,9,-1,0,10,ch62data};\r
+\r
+/* char: 0x3d '=' */\r
+\r
+static const GLubyte ch61data[] = {\r
+0xfe,0xfe,0x0,0x0,0xfe,0xfe,\r
+};\r
+\r
+static const BitmapCharRec ch61 = {7,6,-2,-2,11,ch61data};\r
+\r
+/* char: 0x3c '<' */\r
+\r
+static const GLubyte ch60data[] = {\r
+0x3,0xf,0x3c,0x70,0xc0,0x70,0x3c,0xf,0x3,\r
+};\r
+\r
+static const BitmapCharRec ch60 = {8,9,-1,0,10,ch60data};\r
+\r
+/* char: 0x3b ';' */\r
+\r
+static const GLubyte ch59data[] = {\r
+0x80,0x40,0x40,0xc0,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch59 = {2,13,-1,3,5,ch59data};\r
+\r
+/* char: 0x3a ':' */\r
+\r
+static const GLubyte ch58data[] = {\r
+0xc0,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch58 = {2,10,-1,0,5,ch58data};\r
+\r
+/* char: 0x39 '9' */\r
+\r
+static const GLubyte ch57data[] = {\r
+0x7c,0xfe,0xc6,0x3,0x3,0x3b,0x7f,0xc3,0xc3,0xc3,0xc7,0x7e,0x3c,\r
+};\r
+\r
+static const BitmapCharRec ch57 = {8,13,-1,0,10,ch57data};\r
+\r
+/* char: 0x38 '8' */\r
+\r
+static const GLubyte ch56data[] = {\r
+0x3c,0x7e,0xe7,0xc3,0xc3,0x66,0x7e,0x66,0xc3,0xc3,0xe7,0x7e,0x3c,\r
+};\r
+\r
+static const BitmapCharRec ch56 = {8,13,-1,0,10,ch56data};\r
+\r
+/* char: 0x37 '7' */\r
+\r
+static const GLubyte ch55data[] = {\r
+0x60,0x60,0x30,0x30,0x30,0x18,0x18,0xc,0xc,0x6,0x3,0xff,0xff,\r
+};\r
+\r
+static const BitmapCharRec ch55 = {8,13,-1,0,10,ch55data};\r
+\r
+/* char: 0x36 '6' */\r
+\r
+static const GLubyte ch54data[] = {\r
+0x3c,0x7e,0xe3,0xc3,0xc3,0xc3,0xfe,0xdc,0xc0,0xc0,0x63,0x7f,0x3c,\r
+};\r
+\r
+static const BitmapCharRec ch54 = {8,13,-1,0,10,ch54data};\r
+\r
+/* char: 0x35 '5' */\r
+\r
+static const GLubyte ch53data[] = {\r
+0x7c,0xfe,0xc7,0xc3,0x3,0x3,0xc7,0xfe,0xfc,0xc0,0xc0,0xfe,0xfe,\r
+};\r
+\r
+static const BitmapCharRec ch53 = {8,13,-1,0,10,ch53data};\r
+\r
+/* char: 0x34 '4' */\r
+\r
+static const GLubyte ch52data[] = {\r
+0x3,0x0,0x3,0x0,0x3,0x0,0xff,0x80,0xff,0x80,0xc3,0x0,0x63,0x0,0x33,0x0,\r
+0x33,0x0,0x1b,0x0,0xf,0x0,0x7,0x0,0x3,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch52 = {9,13,-1,0,10,ch52data};\r
+\r
+/* char: 0x33 '3' */\r
+\r
+static const GLubyte ch51data[] = {\r
+0x3c,0x7e,0xc7,0xc3,0x3,0x7,0x1e,0x1c,0x6,0xc3,0xc3,0x7e,0x3c,\r
+};\r
+\r
+static const BitmapCharRec ch51 = {8,13,-1,0,10,ch51data};\r
+\r
+/* char: 0x32 '2' */\r
+\r
+static const GLubyte ch50data[] = {\r
+0xff,0xff,0xc0,0xe0,0x70,0x38,0x1c,0xe,0x7,0x3,0xc3,0xfe,0x3c,\r
+};\r
+\r
+static const BitmapCharRec ch50 = {8,13,-1,0,10,ch50data};\r
+\r
+/* char: 0x31 '1' */\r
+\r
+static const GLubyte ch49data[] = {\r
+0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xf8,0xf8,0x18,\r
+};\r
+\r
+static const BitmapCharRec ch49 = {5,13,-2,0,10,ch49data};\r
+\r
+/* char: 0x30 '0' */\r
+\r
+static const GLubyte ch48data[] = {\r
+0x3c,0x7e,0x66,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0x66,0x7e,0x3c,\r
+};\r
+\r
+static const BitmapCharRec ch48 = {8,13,-1,0,10,ch48data};\r
+\r
+/* char: 0x2f '/' */\r
+\r
+static const GLubyte ch47data[] = {\r
+0xc0,0xc0,0x40,0x40,0x60,0x60,0x20,0x20,0x30,0x30,0x10,0x10,0x18,0x18,\r
+};\r
+\r
+static const BitmapCharRec ch47 = {5,14,0,0,5,ch47data};\r
+\r
+/* char: 0x2e '.' */\r
+\r
+static const GLubyte ch46data[] = {\r
+0xc0,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch46 = {2,2,-1,0,5,ch46data};\r
+\r
+/* char: 0x2d '-' */\r
+\r
+static const GLubyte ch45data[] = {\r
+0xff,0xff,\r
+};\r
+\r
+static const BitmapCharRec ch45 = {8,2,-1,-4,11,ch45data};\r
+\r
+/* char: 0x2c ',' */\r
+\r
+static const GLubyte ch44data[] = {\r
+0x80,0x40,0x40,0xc0,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch44 = {2,5,-1,3,5,ch44data};\r
+\r
+/* char: 0x2b '+' */\r
+\r
+static const GLubyte ch43data[] = {\r
+0x18,0x18,0x18,0x18,0xff,0xff,0x18,0x18,0x18,0x18,\r
+};\r
+\r
+static const BitmapCharRec ch43 = {8,10,-1,0,10,ch43data};\r
+\r
+/* char: 0x2a '*' */\r
+\r
+static const GLubyte ch42data[] = {\r
+0x88,0x70,0x70,0xf8,0x20,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch42 = {5,6,-1,-8,7,ch42data};\r
+\r
+/* char: 0x29 ')' */\r
+\r
+static const GLubyte ch41data[] = {\r
+0x80,0xc0,0x60,0x60,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x60,0x60,\r
+0xc0,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch41 = {4,18,-1,4,6,ch41data};\r
+\r
+/* char: 0x28 '(' */\r
+\r
+static const GLubyte ch40data[] = {\r
+0x10,0x30,0x60,0x60,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x60,0x60,\r
+0x30,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch40 = {4,18,-1,4,6,ch40data};\r
+\r
+/* char: 0x27 ''' */\r
+\r
+static const GLubyte ch39data[] = {\r
+0x80,0x40,0x40,0xc0,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch39 = {2,5,-1,-9,4,ch39data};\r
+\r
+/* char: 0x26 '&' */\r
+\r
+static const GLubyte ch38data[] = {\r
+0x3c,0x70,0x7e,0xe0,0xe7,0xc0,0xc3,0x80,0xc3,0xc0,0xc6,0xc0,0xee,0xc0,0x7c,0x0,\r
+0x3c,0x0,0x66,0x0,0x66,0x0,0x7e,0x0,0x3c,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch38 = {12,13,-1,0,13,ch38data};\r
+\r
+/* char: 0x25 '%' */\r
+\r
+static const GLubyte ch37data[] = {\r
+0x18,0x78,0x18,0xfc,0xc,0xcc,0xc,0xcc,0x6,0xfc,0x6,0x78,0x3,0x0,0x7b,0x0,\r
+0xfd,0x80,0xcd,0x80,0xcc,0xc0,0xfc,0xc0,0x78,0x60,\r
+};\r
+\r
+static const BitmapCharRec ch37 = {14,13,-1,0,16,ch37data};\r
+\r
+/* char: 0x24 '$' */\r
+\r
+static const GLubyte ch36data[] = {\r
+0x8,0x0,0x8,0x0,0x3e,0x0,0x7f,0x0,0xeb,0x80,0xc9,0x80,0x9,0x80,0xf,0x0,\r
+0x3e,0x0,0x78,0x0,0xe8,0x0,0xc8,0x0,0xcb,0x0,0x7f,0x0,0x3e,0x0,0x8,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch36 = {9,16,-1,2,10,ch36data};\r
+\r
+/* char: 0x23 '#' */\r
+\r
+static const GLubyte ch35data[] = {\r
+0x24,0x0,0x24,0x0,0x24,0x0,0xff,0x80,0xff,0x80,0x12,0x0,0x12,0x0,0x12,0x0,\r
+0x7f,0xc0,0x7f,0xc0,0x9,0x0,0x9,0x0,0x9,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch35 = {10,13,0,0,10,ch35data};\r
+\r
+/* char: 0x22 '"' */\r
+\r
+static const GLubyte ch34data[] = {\r
+0x90,0x90,0xd8,0xd8,0xd8,\r
+};\r
+\r
+static const BitmapCharRec ch34 = {5,5,0,-9,5,ch34data};\r
+\r
+/* char: 0x21 '!' */\r
+\r
+static const GLubyte ch33data[] = {\r
+0xc0,0xc0,0x0,0x0,0x80,0x80,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch33 = {2,14,-2,0,6,ch33data};\r
+\r
+/* char: 0x20 ' ' */\r
+\r
+#ifdef _WIN32\r
+/* XXX Work around Microsoft OpenGL 1.1 bug where glBitmap with\r
+   a height or width of zero does not advance the raster position\r
+   as specified by OpenGL. (Cosmo OpenGL does not have this bug.) */\r
+static const GLubyte ch32data[] = { 0x0 };\r
+static const BitmapCharRec ch32 = {1,1,0,0,5,ch32data};\r
+#else\r
+static const BitmapCharRec ch32 = {0,0,0,0,5,0};\r
+#endif\r
+\r
+static const BitmapCharRec * const chars[] = {\r
+&ch32,\r
+&ch33,\r
+&ch34,\r
+&ch35,\r
+&ch36,\r
+&ch37,\r
+&ch38,\r
+&ch39,\r
+&ch40,\r
+&ch41,\r
+&ch42,\r
+&ch43,\r
+&ch44,\r
+&ch45,\r
+&ch46,\r
+&ch47,\r
+&ch48,\r
+&ch49,\r
+&ch50,\r
+&ch51,\r
+&ch52,\r
+&ch53,\r
+&ch54,\r
+&ch55,\r
+&ch56,\r
+&ch57,\r
+&ch58,\r
+&ch59,\r
+&ch60,\r
+&ch61,\r
+&ch62,\r
+&ch63,\r
+&ch64,\r
+&ch65,\r
+&ch66,\r
+&ch67,\r
+&ch68,\r
+&ch69,\r
+&ch70,\r
+&ch71,\r
+&ch72,\r
+&ch73,\r
+&ch74,\r
+&ch75,\r
+&ch76,\r
+&ch77,\r
+&ch78,\r
+&ch79,\r
+&ch80,\r
+&ch81,\r
+&ch82,\r
+&ch83,\r
+&ch84,\r
+&ch85,\r
+&ch86,\r
+&ch87,\r
+&ch88,\r
+&ch89,\r
+&ch90,\r
+&ch91,\r
+&ch92,\r
+&ch93,\r
+&ch94,\r
+&ch95,\r
+&ch96,\r
+&ch97,\r
+&ch98,\r
+&ch99,\r
+&ch100,\r
+&ch101,\r
+&ch102,\r
+&ch103,\r
+&ch104,\r
+&ch105,\r
+&ch106,\r
+&ch107,\r
+&ch108,\r
+&ch109,\r
+&ch110,\r
+&ch111,\r
+&ch112,\r
+&ch113,\r
+&ch114,\r
+&ch115,\r
+&ch116,\r
+&ch117,\r
+&ch118,\r
+&ch119,\r
+&ch120,\r
+&ch121,\r
+&ch122,\r
+&ch123,\r
+&ch124,\r
+&ch125,\r
+&ch126,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+&ch160,\r
+&ch161,\r
+&ch162,\r
+&ch163,\r
+&ch164,\r
+&ch165,\r
+&ch166,\r
+&ch167,\r
+&ch168,\r
+&ch169,\r
+&ch170,\r
+&ch171,\r
+&ch172,\r
+&ch173,\r
+&ch174,\r
+&ch175,\r
+&ch176,\r
+&ch177,\r
+&ch178,\r
+&ch179,\r
+&ch180,\r
+&ch181,\r
+&ch182,\r
+&ch183,\r
+&ch184,\r
+&ch185,\r
+&ch186,\r
+&ch187,\r
+&ch188,\r
+&ch189,\r
+&ch190,\r
+&ch191,\r
+&ch192,\r
+&ch193,\r
+&ch194,\r
+&ch195,\r
+&ch196,\r
+&ch197,\r
+&ch198,\r
+&ch199,\r
+&ch200,\r
+&ch201,\r
+&ch202,\r
+&ch203,\r
+&ch204,\r
+&ch205,\r
+&ch206,\r
+&ch207,\r
+&ch208,\r
+&ch209,\r
+&ch210,\r
+&ch211,\r
+&ch212,\r
+&ch213,\r
+&ch214,\r
+&ch215,\r
+&ch216,\r
+&ch217,\r
+&ch218,\r
+&ch219,\r
+&ch220,\r
+&ch221,\r
+&ch222,\r
+&ch223,\r
+&ch224,\r
+&ch225,\r
+&ch226,\r
+&ch227,\r
+&ch228,\r
+&ch229,\r
+&ch230,\r
+&ch231,\r
+&ch232,\r
+&ch233,\r
+&ch234,\r
+&ch235,\r
+&ch236,\r
+&ch237,\r
+&ch238,\r
+&ch239,\r
+&ch240,\r
+&ch241,\r
+&ch242,\r
+&ch243,\r
+&ch244,\r
+&ch245,\r
+&ch246,\r
+&ch247,\r
+&ch248,\r
+&ch249,\r
+&ch250,\r
+&ch251,\r
+&ch252,\r
+&ch253,\r
+&ch254,\r
+&ch255,\r
+};\r
+\r
+#if !defined(__IBMCPP__)\r
+const \r
+#endif\r
+BitmapFontRec glutBitmapHelvetica18 = {\r
+"-adobe-helvetica-medium-r-normal--18-180-75-75-p-98-iso8859-1",\r
+224,\r
+32,\r
+chars\r
+};\r
+\r
diff --git a/src/glut/os2/glut_init.cpp b/src/glut/os2/glut_init.cpp
new file mode 100644 (file)
index 0000000..da5d073
--- /dev/null
@@ -0,0 +1,451 @@
+\r
+/* Copyright (c) Mark J. Kilgard, 1994, 1997. */\r
+\r
+/* This program is freely distributable without licensing fees\r
+   and is provided without guarantee or warrantee expressed or\r
+   implied. This program is -not- in the public domain. */\r
+\r
+#ifdef __VMS\r
+#include <GL/vms_x_fix.h>\r
+#endif\r
+\r
+#include <stdlib.h>\r
+#include <string.h>\r
+#include <stdio.h>\r
+\r
+#if !defined(_WIN32) && !defined(__OS2__)\r
+   #include <X11/Xlib.h>\r
+   #include <X11/Xatom.h>\r
+#endif\r
+\r
+/* SGI optimization introduced in IRIX 6.3 to avoid X server\r
+   round trips for interning common X atoms. */\r
+#if defined(_SGI_EXTRA_PREDEFINES) && !defined(NO_FAST_ATOMS)\r
+#include <X11/SGIFastAtom.h>\r
+#else\r
+#define XSGIFastInternAtom(dpy,string,fast_name,how) XInternAtom(dpy,string,how)\r
+#endif\r
+\r
+#include "glutint.h"\r
+\r
+/* GLUT inter-file variables */\r
+/* *INDENT-OFF* */\r
+char *__glutProgramName = NULL;\r
+int __glutArgc = 0;\r
+char **__glutArgv = NULL;\r
+char *__glutGeometry = NULL;\r
+Display *__glutDisplay = NULL;\r
+int __glutScreen;\r
+Window __glutRoot;\r
+int __glutScreenHeight;\r
+int __glutScreenWidth;\r
+GLboolean __glutIconic = GL_FALSE;\r
+GLboolean __glutDebug = GL_FALSE;\r
+unsigned int __glutDisplayMode =\r
+  GLUT_RGB | GLUT_SINGLE | GLUT_DEPTH;\r
+char *__glutDisplayString = NULL;\r
+int __glutConnectionFD;\r
+XSizeHints __glutSizeHints = {0};\r
+int __glutInitWidth = 300, __glutInitHeight = 300;\r
+int __glutInitX = -1, __glutInitY = -1;\r
+GLboolean __glutForceDirect = GL_FALSE,\r
+  __glutTryDirect = GL_TRUE;\r
+Atom __glutWMDeleteWindow;\r
+/* *INDENT-ON* */\r
+\r
+#ifdef _WIN32\r
+void (__cdecl *__glutExitFunc)(int retval) = NULL;\r
+#endif\r
+\r
+static Bool synchronize = False;\r
+\r
+#if defined(__OS2__)\r
+\r
+MRESULT EXPENTRY GlutWindowProc( HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2 );\r
+MRESULT EXPENTRY GlutWindowChildProc( HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2 );\r
+\r
+\r
+void __glutOpenOS2Connection(char* display)\r
+{\r
+  static char *classname=NULL;\r
+extern HAB   hab;      /* PM anchor block handle         */\r
+ERRORID  erridErrorCode;/* last error id code */\r
+int ii;\r
+\r
+  /* Make sure we register the window only once. */\r
+  if(classname)\r
+    return;\r
+\r
+  classname = "GLUT";\r
+\r
+    if ( !WinRegisterClass( hab, /* PM anchor block handle     */\r
+             classname,/* window class name          */\r
+             GlutWindowProc,/* address of window procedure*/\r
+             CS_SIZEREDRAW, /* |CS_SYNCPAINT size changes cause redrawing */\r
+             0UL ) )        /* window data                  */\r
+    {   erridErrorCode = WinGetLastError(hab);\r
+        ii = erridErrorCode;\r
+          return;\r
+    }\r
+\r
+  classname = "GLUTCHILD";\r
+\r
+    if ( !WinRegisterClass( hab, /* PM anchor block handle     */\r
+             classname,/* window class name          */\r
+             GlutWindowChildProc,/* address of window procedure*/\r
+             CS_SIZEREDRAW, /* size changes cause redrawing */\r
+             0UL ) )        /* window data                  */\r
+    {   erridErrorCode = WinGetLastError(hab);\r
+        ii = erridErrorCode;\r
+          return;\r
+    }\r
+\r
+  __glutScreenWidth     = GetSystemMetrics(SM_CXSCREEN);\r
+  __glutScreenHeight    = GetSystemMetrics(SM_CYSCREEN);\r
+\r
+  /* Set the root window to NULL because windows creates a top-level\r
+     window when the parent is NULL.  X creates a top-level window\r
+     when the parent is the root window. */\r
+  __glutRoot            = NULLHANDLE;\r
+\r
+  /* Set the display to 1 -- we shouldn't be using this anywhere\r
+     (except as an argument to X calls). */\r
+  __glutDisplay         = (Display*)1;\r
+\r
+  /* There isn't any concept of multiple screens in Win32, therefore,\r
+     we don't need to keep track of the screen we're on... it's always\r
+     the same one. */\r
+  __glutScreen          = 0;\r
+}\r
+\r
+#elif defined(_WIN32)\r
+\r
+#ifdef __BORLANDC__\r
+#include <float.h>  /* For masking floating point exceptions. */\r
+#endif\r
+\r
+void\r
+__glutOpenWin32Connection(char* display)\r
+{\r
+  static char *classname;\r
+  WNDCLASS  wc;\r
+  HINSTANCE hInstance = GetModuleHandle(NULL);\r
+\r
+  /* Make sure we register the window only once. */\r
+  if(classname)\r
+    return;\r
+\r
+#ifdef __BORLANDC__\r
+  /* Under certain conditions (e.g. while rendering solid surfaces with\r
+     lighting enabled) Microsoft OpenGL libraries cause some illegal\r
+     operations like floating point overflow or division by zero. The\r
+     default behaviour of Microsoft compilers is to mask (ignore)\r
+     floating point exceptions, while Borland compilers do not.  The\r
+     following function of Borland RTL allows to mask exceptions.\r
+     Advice from Pier Giorgio Esposito (mc2172@mclink.it). */\r
+  _control87(MCW_EM,MCW_EM);\r
+#endif\r
+\r
+  classname = "GLUT";\r
+\r
+  /* Clear (important!) and then fill in the window class structure. */\r
+  memset(&wc, 0, sizeof(WNDCLASS));\r
+  wc.style         = CS_OWNDC;\r
+  wc.lpfnWndProc   = (WNDPROC)__glutWindowProc;\r
+  wc.hInstance     = hInstance;\r
+  wc.hIcon         = LoadIcon(hInstance, "GLUT_ICON");\r
+  wc.hCursor       = LoadCursor(hInstance, IDC_ARROW);\r
+  wc.hbrBackground = NULL;\r
+  wc.lpszMenuName  = NULL;\r
+  wc.lpszClassName = classname;\r
+\r
+  /* Fill in a default icon if one isn't specified as a resource. */\r
+  if(!wc.hIcon)\r
+    wc.hIcon = LoadIcon(NULL, IDI_WINLOGO);\r
+\r
+  if(!RegisterClass(&wc)) {\r
+    __glutFatalError("RegisterClass() failed:"\r
+                    "Cannot register GLUT window class.");\r
+  }\r
+\r
+  __glutScreenWidth     = GetSystemMetrics(SM_CXSCREEN);\r
+  __glutScreenHeight    = GetSystemMetrics(SM_CYSCREEN);\r
+\r
+  /* Set the root window to NULL because windows creates a top-level\r
+     window when the parent is NULL.  X creates a top-level window\r
+     when the parent is the root window. */\r
+  __glutRoot            = NULL;\r
+\r
+  /* Set the display to 1 -- we shouldn't be using this anywhere\r
+     (except as an argument to X calls). */\r
+  __glutDisplay         = (Display*)1;\r
+\r
+  /* There isn't any concept of multiple screens in Win32, therefore,\r
+     we don't need to keep track of the screen we're on... it's always\r
+     the same one. */\r
+  __glutScreen          = 0;\r
+}\r
+#else /* !_WIN32 */\r
+void\r
+__glutOpenXConnection(char *display)\r
+{\r
+  int errorBase, eventBase;\r
+\r
+  __glutDisplay = XOpenDisplay(display);\r
+  if (!__glutDisplay)\r
+    __glutFatalError("could not open display: %s",\r
+      XDisplayName(display));\r
+  if (synchronize)\r
+    XSynchronize(__glutDisplay, True);\r
+  if (!glXQueryExtension(__glutDisplay, &errorBase, &eventBase))\r
+    __glutFatalError(\r
+      "OpenGL GLX extension not supported by display: %s",\r
+      XDisplayName(display));\r
+  __glutScreen = DefaultScreen(__glutDisplay);\r
+  __glutRoot = RootWindow(__glutDisplay, __glutScreen);\r
+  __glutScreenWidth = DisplayWidth(__glutDisplay, __glutScreen);\r
+  __glutScreenHeight = DisplayHeight(__glutDisplay,\r
+    __glutScreen);\r
+  __glutConnectionFD = ConnectionNumber(__glutDisplay);\r
+  __glutWMDeleteWindow = XSGIFastInternAtom(__glutDisplay,\r
+    "WM_DELETE_WINDOW", SGI_XA_WM_DELETE_WINDOW, False);\r
+}\r
+#endif /* _WIN32 */\r
+\r
+void\r
+#ifdef OLD_VMS\r
+  __glutInitTime(struct timeval6 *beginning)\r
+#else\r
+  __glutInitTime(struct timeval *beginning)\r
+#endif\r
+{\r
+  static int beenhere = 0;\r
+#ifdef OLD_VMS\r
+   static struct timeval6 genesis;\r
+#else\r
+   static struct timeval genesis;\r
+#endif\r
+\r
+  if (!beenhere) {\r
+    GETTIMEOFDAY(&genesis);\r
+    beenhere = 1;\r
+  }\r
+  *beginning = genesis;\r
+}\r
+\r
+static void\r
+removeArgs(int *argcp, char **argv, int numToRemove)\r
+{\r
+  int i, j;\r
+\r
+  for (i = 0, j = numToRemove; argv[j]; i++, j++) {\r
+    argv[i] = argv[j];\r
+  }\r
+  argv[i] = NULL;\r
+  *argcp -= numToRemove;\r
+}\r
+\r
+void GLUTAPIENTRY\r
+glutInit(int *argcp, char **argv)\r
+{\r
+  char *display = NULL;\r
+  char *str, *geometry = NULL;\r
+#ifdef OLD_VMS\r
+   struct timeval6 unused;\r
+#else\r
+   struct timeval unused;\r
+#endif\r
+  int i;\r
+\r
+  if (__glutDisplay) {\r
+    __glutWarning("glutInit being called a second time.");\r
+    return;\r
+  }\r
+  /* Determine temporary program name. */\r
+  str = strrchr(argv[0], '/');\r
+  if (str == NULL) {\r
+    __glutProgramName = argv[0];\r
+  } else {\r
+    __glutProgramName = str + 1;\r
+  }\r
+\r
+  /* Make private copy of command line arguments. */\r
+  __glutArgc = *argcp;\r
+  __glutArgv = (char **) malloc(__glutArgc * sizeof(char *));\r
+  if (!__glutArgv)\r
+    __glutFatalError("out of memory.");\r
+  for (i = 0; i < __glutArgc; i++) {\r
+    __glutArgv[i] = __glutStrdup(argv[i]);\r
+    if (!__glutArgv[i])\r
+      __glutFatalError("out of memory.");\r
+  }\r
+\r
+  /* determine permanent program name */\r
+  str = strrchr(__glutArgv[0], '/');\r
+  if (str == NULL) {\r
+    __glutProgramName = __glutArgv[0];\r
+  } else {\r
+    __glutProgramName = str + 1;\r
+  }\r
+\r
+  /* parse arguments for standard options */\r
+  for (i = 1; i < __glutArgc; i++) {\r
+    if (!strcmp(__glutArgv[i], "-display")) {\r
+#if defined(_WIN32)\r
+      __glutWarning("-display option not supported by Win32 GLUT.");\r
+#endif\r
+      if (++i >= __glutArgc) {\r
+        __glutFatalError(\r
+          "follow -display option with X display name.");\r
+      }\r
+      display = __glutArgv[i];\r
+      removeArgs(argcp, &argv[1], 2);\r
+    } else if (!strcmp(__glutArgv[i], "-geometry")) {\r
+      if (++i >= __glutArgc) {\r
+        __glutFatalError(\r
+          "follow -geometry option with geometry parameter.");\r
+      }\r
+      geometry = __glutArgv[i];\r
+      removeArgs(argcp, &argv[1], 2);\r
+    } else if (!strcmp(__glutArgv[i], "-direct")) {\r
+#if defined(_WIN32)\r
+      __glutWarning("-direct option not supported by Win32 GLUT.");\r
+#endif\r
+      if (!__glutTryDirect)\r
+        __glutFatalError(\r
+          "cannot force both direct and indirect rendering.");\r
+      __glutForceDirect = GL_TRUE;\r
+      removeArgs(argcp, &argv[1], 1);\r
+    } else if (!strcmp(__glutArgv[i], "-indirect")) {\r
+#if defined(_WIN32)\r
+      __glutWarning("-indirect option not supported by Win32 GLUT.");\r
+#endif\r
+      if (__glutForceDirect)\r
+        __glutFatalError(\r
+          "cannot force both direct and indirect rendering.");\r
+      __glutTryDirect = GL_FALSE;\r
+      removeArgs(argcp, &argv[1], 1);\r
+    } else if (!strcmp(__glutArgv[i], "-iconic")) {\r
+      __glutIconic = GL_TRUE;\r
+      removeArgs(argcp, &argv[1], 1);\r
+    } else if (!strcmp(__glutArgv[i], "-gldebug")) {\r
+      __glutDebug = GL_TRUE;\r
+      removeArgs(argcp, &argv[1], 1);\r
+    } else if (!strcmp(__glutArgv[i], "-sync")) {\r
+#if defined(_WIN32)\r
+      __glutWarning("-sync option not supported by Win32 GLUT.");\r
+#endif\r
+      synchronize = GL_TRUE;\r
+      removeArgs(argcp, &argv[1], 1);\r
+    } else {\r
+      /* Once unknown option encountered, stop command line\r
+         processing. */\r
+      break;\r
+    }\r
+  }\r
+#if defined(__OS2__)\r
+  __glutOpenOS2Connection(display);\r
+#elif defined(_WIN32)\r
+  __glutOpenWin32Connection(display);\r
+#else\r
+  __glutOpenXConnection(display);\r
+#endif\r
+  if (geometry) {\r
+    int flags, x, y, width, height;\r
+\r
+    /* Fix bogus "{width|height} may be used before set"\r
+       warning */\r
+    width = 0;\r
+    height = 0;\r
+\r
+    flags = XParseGeometry(geometry, &x, &y,\r
+      (unsigned int *) &width, (unsigned int *) &height);\r
+    if (WidthValue & flags) {\r
+      /* Careful because X does not allow zero or negative\r
+         width windows */\r
+      if (width > 0)\r
+        __glutInitWidth = width;\r
+    }\r
+    if (HeightValue & flags) {\r
+      /* Careful because X does not allow zero or negative\r
+         height windows */\r
+      if (height > 0)\r
+        __glutInitHeight = height;\r
+    }\r
+    glutInitWindowSize(__glutInitWidth, __glutInitHeight);\r
+    if (XValue & flags) {\r
+      if (XNegative & flags)\r
+        x = DisplayWidth(__glutDisplay, __glutScreen) +\r
+          x - __glutSizeHints.width;\r
+      /* Play safe: reject negative X locations */\r
+      if (x >= 0)\r
+        __glutInitX = x;\r
+    }\r
+    if (YValue & flags) {\r
+      if (YNegative & flags)\r
+        y = DisplayHeight(__glutDisplay, __glutScreen) +\r
+          y - __glutSizeHints.height;\r
+      /* Play safe: reject negative Y locations */\r
+      if (y >= 0)\r
+        __glutInitY = y;\r
+    }\r
+    glutInitWindowPosition(__glutInitX, __glutInitY);\r
+  }\r
+  __glutInitTime(&unused);\r
+\r
+  /* check if GLUT_FPS env var is set */\r
+  {\r
+     const char *fps = getenv("GLUT_FPS");\r
+     if (fps) {\r
+        sscanf(fps, "%d", &__glutFPS);\r
+        if (__glutFPS <= 0)\r
+           __glutFPS = 5000;  /* 5000 milliseconds */\r
+     }\r
+  }\r
+}\r
+\r
+#ifdef _WIN32\r
+void APIENTRY\r
+__glutInitWithExit(int *argcp, char **argv, void (__cdecl *exitfunc)(int))\r
+{\r
+  __glutExitFunc = exitfunc;\r
+  glutInit(argcp, argv);\r
+}\r
+#endif\r
+\r
+/* CENTRY */\r
+void GLUTAPIENTRY\r
+glutInitWindowPosition(int x, int y)\r
+{\r
+  __glutInitX = x;\r
+  __glutInitY = y;\r
+  if (x >= 0 && y >= 0) {\r
+    __glutSizeHints.x = x;\r
+    __glutSizeHints.y = y;\r
+    __glutSizeHints.flags |= USPosition;\r
+  } else {\r
+    __glutSizeHints.flags &= ~USPosition;\r
+  }\r
+}\r
+\r
+void GLUTAPIENTRY\r
+glutInitWindowSize(int width, int height)\r
+{\r
+  __glutInitWidth = width;\r
+  __glutInitHeight = height;\r
+  if (width > 0 && height > 0) {\r
+    __glutSizeHints.width = width;\r
+    __glutSizeHints.height = height;\r
+    __glutSizeHints.flags |= USSize;\r
+  } else {\r
+    __glutSizeHints.flags &= ~USSize;\r
+  }\r
+}\r
+\r
+void GLUTAPIENTRY\r
+glutInitDisplayMode(unsigned int mask)\r
+{\r
+  __glutDisplayMode = mask;\r
+}\r
+\r
+/* ENDCENTRY */\r
diff --git a/src/glut/os2/glut_input.cpp b/src/glut/os2/glut_input.cpp
new file mode 100644 (file)
index 0000000..c517fe1
--- /dev/null
@@ -0,0 +1,628 @@
+\r
+/* Copyright (c) Mark J. Kilgard, 1994, 1997, 1998. */\r
+\r
+/* This program is freely distributable without licensing fees\r
+   and is provided without guarantee or warrantee expressed or\r
+   implied. This program is -not- in the public domain. */\r
+\r
+#include <assert.h>\r
+#include <stdio.h>\r
+#include <stdlib.h>\r
+#include <string.h>\r
+\r
+#include "glutint.h"\r
+#define POFIG 0\r
+#if POFIG\r
+\r
+int __glutNumDials = 0;\r
+int __glutNumSpaceballButtons = 0;\r
+int __glutNumButtonBoxButtons = 0;\r
+int __glutNumTabletButtons = 0;\r
+int __glutNumMouseButtons = 3;  /* Good guess. */\r
+XDevice *__glutTablet = NULL;\r
+XDevice *__glutDials = NULL;\r
+XDevice *__glutSpaceball = NULL;\r
+\r
+int __glutHasJoystick = 0;\r
+int __glutNumJoystickButtons = 0;\r
+int __glutNumJoystickAxes = 0;\r
+\r
+#if !defined(_WIN32)\r
+typedef struct _Range {\r
+  int min;\r
+  int range;\r
+} Range;\r
+\r
+#define NUM_SPACEBALL_AXIS     6\r
+#define NUM_TABLET_AXIS                2\r
+#define NUM_DIALS_AXIS         8\r
+\r
+Range __glutSpaceballRange[NUM_SPACEBALL_AXIS];\r
+Range __glutTabletRange[NUM_TABLET_AXIS];\r
+int *__glutDialsResolution;\r
+\r
+/* Safely assumes 0 is an illegal event type for X Input\r
+   extension events. */\r
+int __glutDeviceMotionNotify = 0;\r
+int __glutDeviceButtonPress = 0;\r
+int __glutDeviceButtonPressGrab = 0;\r
+int __glutDeviceButtonRelease = 0;\r
+int __glutDeviceStateNotify = 0;\r
+\r
+static int\r
+normalizeTabletPos(int axis, int rawValue)\r
+{\r
+  assert(rawValue >= __glutTabletRange[axis].min);\r
+  assert(rawValue <= __glutTabletRange[axis].min\r
+    + __glutTabletRange[axis].range);\r
+  /* Normalize rawValue to between 0 and 4000. */\r
+  return ((rawValue - __glutTabletRange[axis].min) * 4000) /\r
+    __glutTabletRange[axis].range;\r
+}\r
+\r
+static int\r
+normalizeDialAngle(int axis, int rawValue)\r
+{\r
+  /* XXX Assumption made that the resolution of the device is\r
+     number of clicks for one complete dial revolution.  This\r
+     is true for SGI's dial & button box. */\r
+  return (rawValue * 360.0) / __glutDialsResolution[axis];\r
+}\r
+\r
+static int\r
+normalizeSpaceballAngle(int axis, int rawValue)\r
+{\r
+  assert(rawValue >= __glutSpaceballRange[axis].min);\r
+  assert(rawValue <= __glutSpaceballRange[axis].min +\r
+    __glutSpaceballRange[axis].range);\r
+  /* Normalize rawValue to between -1800 and 1800. */\r
+  return ((rawValue - __glutSpaceballRange[axis].min) * 3600) /\r
+    __glutSpaceballRange[axis].range - 1800;\r
+}\r
+\r
+static int\r
+normalizeSpaceballDelta(int axis, int rawValue)\r
+{\r
+  assert(rawValue >= __glutSpaceballRange[axis].min);\r
+  assert(rawValue <= __glutSpaceballRange[axis].min +\r
+    __glutSpaceballRange[axis].range);\r
+  /* Normalize rawValue to between -1000 and 1000. */\r
+  return ((rawValue - __glutSpaceballRange[axis].min) * 2000) /\r
+    __glutSpaceballRange[axis].range - 1000;\r
+}\r
+\r
+static void\r
+queryTabletPos(GLUTwindow * window)\r
+{\r
+  XDeviceState *state;\r
+  XInputClass *any;\r
+  XValuatorState *v;\r
+  int i;\r
+\r
+  state = XQueryDeviceState(__glutDisplay, __glutTablet);\r
+  any = state->data;\r
+  for (i = 0; i < state->num_classes; i++) {\r
+#if defined(__cplusplus) || defined(c_plusplus)\r
+    switch (any->c_class) {\r
+#else\r
+    switch (any->class) {\r
+#endif\r
+    case ValuatorClass:\r
+      v = (XValuatorState *) any;\r
+      if (v->num_valuators < 2)\r
+        goto end;\r
+      if (window->tabletPos[0] == -1)\r
+        window->tabletPos[0] = normalizeTabletPos(0, v->valuators[0]);\r
+      if (window->tabletPos[1] == -1)\r
+        window->tabletPos[1] = normalizeTabletPos(1, v->valuators[1]);\r
+    }\r
+    any = (XInputClass *) ((char *) any + any->length);\r
+  }\r
+end:\r
+  XFreeDeviceState(state);\r
+}\r
+\r
+static void\r
+tabletPosChange(GLUTwindow * window, int first, int count, int *data)\r
+{\r
+  int i, value, genEvent = 0;\r
+\r
+  for (i = first; i < first + count; i++) {\r
+    switch (i) {\r
+    case 0:            /* X axis */\r
+    case 1:            /* Y axis */\r
+      value = normalizeTabletPos(i, data[i - first]);\r
+      if (value != window->tabletPos[i]) {\r
+        window->tabletPos[i] = value;\r
+        genEvent = 1;\r
+      }\r
+      break;\r
+    }\r
+  }\r
+  if (window->tabletPos[0] == -1 || window->tabletPos[1] == -1)\r
+    queryTabletPos(window);\r
+  if (genEvent)\r
+    window->tabletMotion(window->tabletPos[0], window->tabletPos[1]);\r
+}\r
+#endif /* !_WIN32 */\r
+\r
+static int\r
+__glutProcessDeviceEvents(XEvent * event)\r
+{\r
+#if !defined(_WIN32)\r
+  GLUTwindow *window;\r
+\r
+  /* XXX Ugly code fan out. */\r
+\r
+  /* Can't use switch/case since X Input event types are\r
+     dynamic. */\r
+\r
+  if (__glutDeviceMotionNotify && event->type == __glutDeviceMotionNotify) {\r
+    XDeviceMotionEvent *devmot = (XDeviceMotionEvent *) event;\r
+\r
+    window = __glutGetWindow(devmot->window);\r
+    if (window) {\r
+      if (__glutTablet\r
+        && devmot->deviceid == __glutTablet->device_id\r
+        && window->tabletMotion) {\r
+        tabletPosChange(window, devmot->first_axis, devmot->axes_count,\r
+          devmot->axis_data);\r
+      } else if (__glutDials\r
+          && devmot->deviceid == __glutDials->device_id\r
+        && window->dials) {\r
+        int i, first = devmot->first_axis, count = devmot->axes_count;\r
+\r
+        for (i = first; i < first + count; i++)\r
+          window->dials(i + 1,\r
+            normalizeDialAngle(i, devmot->axis_data[i - first]));\r
+      } else if (__glutSpaceball\r
+        && devmot->deviceid == __glutSpaceball->device_id) {\r
+        /* XXX Assume that space ball motion events come in as\r
+           all the first 6 axes.  Assume first 3 axes are XYZ\r
+           translations; second 3 axes are XYZ rotations. */\r
+        if (devmot->first_axis == 0 && devmot->axes_count == 6) {\r
+          if (window->spaceMotion)\r
+            window->spaceMotion(\r
+              normalizeSpaceballDelta(0, devmot->axis_data[0]),\r
+              normalizeSpaceballDelta(1, devmot->axis_data[1]),\r
+              normalizeSpaceballDelta(2, devmot->axis_data[2]));\r
+          if (window->spaceRotate)\r
+            window->spaceRotate(\r
+              normalizeSpaceballAngle(3, devmot->axis_data[3]),\r
+              normalizeSpaceballAngle(4, devmot->axis_data[4]),\r
+              normalizeSpaceballAngle(5, devmot->axis_data[5]));\r
+        }\r
+      }\r
+      return 1;\r
+    }\r
+  } else if (__glutDeviceButtonPress\r
+    && event->type == __glutDeviceButtonPress) {\r
+    XDeviceButtonEvent *devbtn = (XDeviceButtonEvent *) event;\r
+\r
+    window = __glutGetWindow(devbtn->window);\r
+    if (window) {\r
+      if (__glutTablet\r
+        && devbtn->deviceid == __glutTablet->device_id\r
+        && window->tabletButton\r
+        && devbtn->first_axis == 0\r
+        && devbtn->axes_count == 2) {\r
+        tabletPosChange(window, devbtn->first_axis, devbtn->axes_count,\r
+          devbtn->axis_data);\r
+        window->tabletButton(devbtn->button, GLUT_DOWN,\r
+          window->tabletPos[0], window->tabletPos[1]);\r
+      } else if (__glutDials\r
+          && devbtn->deviceid == __glutDials->device_id\r
+        && window->buttonBox) {\r
+        window->buttonBox(devbtn->button, GLUT_DOWN);\r
+      } else if (__glutSpaceball\r
+          && devbtn->deviceid == __glutSpaceball->device_id\r
+        && window->spaceButton) {\r
+        window->spaceButton(devbtn->button, GLUT_DOWN);\r
+      }\r
+      return 1;\r
+    }\r
+  } else if (__glutDeviceButtonRelease\r
+    && event->type == __glutDeviceButtonRelease) {\r
+    XDeviceButtonEvent *devbtn = (XDeviceButtonEvent *) event;\r
+\r
+    window = __glutGetWindow(devbtn->window);\r
+    if (window) {\r
+      if (__glutTablet\r
+        && devbtn->deviceid == __glutTablet->device_id\r
+        && window->tabletButton\r
+        && devbtn->first_axis == 0\r
+        && devbtn->axes_count == 2) {\r
+        tabletPosChange(window, devbtn->first_axis, devbtn->axes_count,\r
+          devbtn->axis_data);\r
+        window->tabletButton(devbtn->button, GLUT_UP,\r
+          window->tabletPos[0], window->tabletPos[1]);\r
+      } else if (__glutDials\r
+          && devbtn->deviceid == __glutDials->device_id\r
+        && window->buttonBox) {\r
+        window->buttonBox(devbtn->button, GLUT_UP);\r
+      } else if (__glutSpaceball\r
+          && devbtn->deviceid == __glutSpaceball->device_id\r
+        && window->spaceButton) {\r
+        window->spaceButton(devbtn->button, GLUT_UP);\r
+      }\r
+      return 1;\r
+    }\r
+  }\r
+#else\r
+  {\r
+    JOYINFOEX info;\r
+    JOYCAPS joyCaps;\r
+\r
+    memset(&info, 0, sizeof(JOYINFOEX)); \r
+    info.dwSize = sizeof(JOYINFOEX); \r
+    info.dwFlags = JOY_RETURNALL;\r
+\r
+    if (joyGetPosEx(JOYSTICKID1,&info) != JOYERR_NOERROR) {\r
+      __glutHasJoystick = 1;\r
+      joyGetDevCaps(JOYSTICKID1, &joyCaps, sizeof(joyCaps));\r
+      __glutNumJoystickButtons = joyCaps.wNumButtons;\r
+      __glutNumJoystickAxes = joyCaps.wNumAxes;\r
+    } else {\r
+      __glutHasJoystick = 0;\r
+      __glutNumJoystickButtons = 0;\r
+      __glutNumJoystickAxes = 0;\r
+    }\r
+  }\r
+#endif /* !_WIN32 */\r
+  return 0;\r
+}\r
+\r
+static GLUTeventParser eventParser =\r
+{__glutProcessDeviceEvents, NULL};\r
+\r
+static void\r
+addDeviceEventParser(void)\r
+{\r
+  static Bool been_here = False;\r
+\r
+  if (been_here)\r
+    return;\r
+  been_here = True;\r
+  __glutRegisterEventParser(&eventParser);\r
+}\r
+\r
+static int\r
+probeDevices(void)\r
+{\r
+  static Bool been_here = False;\r
+  static int support;\r
+#if !defined(_WIN32)\r
+  XExtensionVersion *version;\r
+  XDeviceInfoPtr device_info, device;\r
+  XAnyClassPtr any;\r
+  XButtonInfoPtr b;\r
+  XValuatorInfoPtr v;\r
+  XAxisInfoPtr a;\r
+  int num_dev = 0, btns = 0, dials = 0;\r
+  int i, j, k;\r
+#endif /* !_WIN32 */\r
+\r
+  if (been_here) {\r
+    return support;\r
+  }\r
+  been_here = True;\r
+\r
+#if !defined(_WIN32)\r
+  version = XGetExtensionVersion(__glutDisplay, "XInputExtension");\r
+  /* Ugh.  XInput extension API forces annoying cast of a pointer\r
+     to a long so it can be compared with the NoSuchExtension\r
+     value (#defined to 1). */\r
+  if (version == NULL || ((long) version) == NoSuchExtension) {\r
+    support = 0;\r
+    return support;\r
+  }\r
+  XFree(version);\r
+  device_info = XListInputDevices(__glutDisplay, &num_dev);\r
+  if (device_info) {\r
+    for (i = 0; i < num_dev; i++) {\r
+      /* XXX These are SGI names for these devices;\r
+         unfortunately, no good standard exists for standard\r
+         types of X input extension devices. */\r
+\r
+      device = &device_info[i];\r
+      any = (XAnyClassPtr) device->inputclassinfo;\r
+\r
+      if (!__glutSpaceball && !strcmp(device->name, "spaceball")) {\r
+        v = NULL;\r
+        b = NULL;\r
+        for (j = 0; j < device->num_classes; j++) {\r
+#if defined(__cplusplus) || defined(c_plusplus)\r
+          switch (any->c_class) {\r
+#else\r
+          switch (any->class) {\r
+#endif\r
+          case ButtonClass:\r
+            b = (XButtonInfoPtr) any;\r
+            btns = b->num_buttons;\r
+            break;\r
+          case ValuatorClass:\r
+            v = (XValuatorInfoPtr) any;\r
+            /* Sanity check: at least 6 valuators? */\r
+            if (v->num_axes < NUM_SPACEBALL_AXIS)\r
+              goto skip_device;\r
+            a = (XAxisInfoPtr) ((char *) v + sizeof(XValuatorInfo));\r
+            for (k = 0; k < NUM_SPACEBALL_AXIS; k++, a++) {\r
+              __glutSpaceballRange[k].min = a->min_value;\r
+              __glutSpaceballRange[k].range = a->max_value - a->min_value;\r
+            }\r
+            break;\r
+          }\r
+          any = (XAnyClassPtr) ((char *) any + any->length);\r
+        }\r
+        if (v) {\r
+          __glutSpaceball = XOpenDevice(__glutDisplay, device->id);\r
+          if (__glutSpaceball) {\r
+            __glutNumSpaceballButtons = btns;\r
+            addDeviceEventParser();\r
+          }\r
+        }\r
+      } else if (!__glutDials && !strcmp(device->name, "dial+buttons")) {\r
+        v = NULL;\r
+        b = NULL;\r
+        for (j = 0; j < device->num_classes; j++) {\r
+#if defined(__cplusplus) || defined(c_plusplus)\r
+          switch (any->c_class) {\r
+#else\r
+          switch (any->class) {\r
+#endif\r
+          case ButtonClass:\r
+            b = (XButtonInfoPtr) any;\r
+            btns = b->num_buttons;\r
+            break;\r
+          case ValuatorClass:\r
+            v = (XValuatorInfoPtr) any;\r
+            /* Sanity check: at least 8 valuators? */\r
+            if (v->num_axes < NUM_DIALS_AXIS)\r
+              goto skip_device;\r
+            dials = v->num_axes;\r
+            __glutDialsResolution = (int *) malloc(sizeof(int) * dials);\r
+            a = (XAxisInfoPtr) ((char *) v + sizeof(XValuatorInfo));\r
+            for (k = 0; k < dials; k++, a++) {\r
+              __glutDialsResolution[k] = a->resolution;\r
+            }\r
+            break;\r
+          }\r
+          any = (XAnyClassPtr) ((char *) any + any->length);\r
+        }\r
+        if (v) {\r
+          __glutDials = XOpenDevice(__glutDisplay, device->id);\r
+          if (__glutDials) {\r
+            __glutNumButtonBoxButtons = btns;\r
+            __glutNumDials = dials;\r
+            addDeviceEventParser();\r
+          }\r
+        }\r
+      } else if (!__glutTablet && !strcmp(device->name, "tablet")) {\r
+        v = NULL;\r
+        b = NULL;\r
+        for (j = 0; j < device->num_classes; j++) {\r
+#if defined(__cplusplus) || defined(c_plusplus)\r
+          switch (any->c_class) {\r
+#else\r
+          switch (any->class) {\r
+#endif\r
+          case ButtonClass:\r
+            b = (XButtonInfoPtr) any;\r
+            btns = b->num_buttons;\r
+            break;\r
+          case ValuatorClass:\r
+            v = (XValuatorInfoPtr) any;\r
+            /* Sanity check: exactly 2 valuators? */\r
+            if (v->num_axes != NUM_TABLET_AXIS)\r
+              goto skip_device;\r
+            a = (XAxisInfoPtr) ((char *) v + sizeof(XValuatorInfo));\r
+            for (k = 0; k < NUM_TABLET_AXIS; k++, a++) {\r
+              __glutTabletRange[k].min = a->min_value;\r
+              __glutTabletRange[k].range = a->max_value - a->min_value;\r
+            }\r
+            break;\r
+          }\r
+          any = (XAnyClassPtr) ((char *) any + any->length);\r
+        }\r
+        if (v) {\r
+          __glutTablet = XOpenDevice(__glutDisplay, device->id);\r
+          if (__glutTablet) {\r
+            __glutNumTabletButtons = btns;\r
+            addDeviceEventParser();\r
+          }\r
+        }\r
+      } else if (!strcmp(device->name, "mouse")) {\r
+        for (j = 0; j < device->num_classes; j++) {\r
+#if defined(__cplusplus) || defined(c_plusplus)\r
+          if (any->c_class == ButtonClass) {\r
+#else\r
+          if (any->class == ButtonClass) {\r
+#endif\r
+            b = (XButtonInfoPtr) any;\r
+            __glutNumMouseButtons = b->num_buttons;\r
+          }\r
+          any = (XAnyClassPtr) ((char *) any + any->length);\r
+        }\r
+      }\r
+    skip_device:;\r
+    }\r
+    XFreeDeviceList(device_info);\r
+  }\r
+#else /* _WIN32 */\r
+  __glutNumMouseButtons = GetSystemMetrics(SM_CMOUSEBUTTONS);\r
+#endif /* !_WIN32 */\r
+  /* X Input extension might be supported, but only if there is\r
+     a tablet, dials, or spaceball do we claim devices are\r
+     supported. */\r
+  support = __glutTablet || __glutDials || __glutSpaceball;\r
+  return support;\r
+}\r
+\r
+void\r
+__glutUpdateInputDeviceMask(GLUTwindow * window)\r
+{\r
+#if !defined(_WIN32)\r
+  /* 5 (dial and buttons) + 5 (tablet locator and buttons) + 5\r
+     (Spaceball buttons and axis) = 15 */\r
+  XEventClass eventList[15];\r
+  int rc, numEvents;\r
+\r
+  rc = probeDevices();\r
+  if (rc) {\r
+    numEvents = 0;\r
+    if (__glutTablet) {\r
+      if (window->tabletMotion) {\r
+        DeviceMotionNotify(__glutTablet, __glutDeviceMotionNotify,\r
+          eventList[numEvents]);\r
+        numEvents++;\r
+      }\r
+      if (window->tabletButton) {\r
+        DeviceButtonPress(__glutTablet, __glutDeviceButtonPress,\r
+          eventList[numEvents]);\r
+        numEvents++;\r
+        DeviceButtonPressGrab(__glutTablet, __glutDeviceButtonPressGrab,\r
+          eventList[numEvents]);\r
+        numEvents++;\r
+        DeviceButtonRelease(__glutTablet, __glutDeviceButtonRelease,\r
+          eventList[numEvents]);\r
+        numEvents++;\r
+      }\r
+      if (window->tabletMotion || window->tabletButton) {\r
+        DeviceStateNotify(__glutTablet, __glutDeviceStateNotify,\r
+          eventList[numEvents]);\r
+        numEvents++;\r
+      }\r
+    }\r
+    if (__glutDials) {\r
+      if (window->dials) {\r
+        DeviceMotionNotify(__glutDials, __glutDeviceMotionNotify,\r
+          eventList[numEvents]);\r
+        numEvents++;\r
+      }\r
+      if (window->buttonBox) {\r
+        DeviceButtonPress(__glutDials, __glutDeviceButtonPress,\r
+          eventList[numEvents]);\r
+        numEvents++;\r
+        DeviceButtonPressGrab(__glutDials, __glutDeviceButtonPressGrab,\r
+          eventList[numEvents]);\r
+        numEvents++;\r
+        DeviceButtonRelease(__glutDials, __glutDeviceButtonRelease,\r
+          eventList[numEvents]);\r
+        numEvents++;\r
+      }\r
+      if (window->dials || window->buttonBox) {\r
+        DeviceStateNotify(__glutDials, __glutDeviceStateNotify,\r
+          eventList[numEvents]);\r
+        numEvents++;\r
+      }\r
+    }\r
+    if (__glutSpaceball) {\r
+      if (window->spaceMotion || window->spaceRotate) {\r
+        DeviceMotionNotify(__glutSpaceball, __glutDeviceMotionNotify,\r
+          eventList[numEvents]);\r
+        numEvents++;\r
+      }\r
+      if (window->spaceButton) {\r
+        DeviceButtonPress(__glutSpaceball, __glutDeviceButtonPress,\r
+          eventList[numEvents]);\r
+        numEvents++;\r
+        DeviceButtonPressGrab(__glutSpaceball, __glutDeviceButtonPressGrab,\r
+          eventList[numEvents]);\r
+        numEvents++;\r
+        DeviceButtonRelease(__glutSpaceball, __glutDeviceButtonRelease,\r
+          eventList[numEvents]);\r
+        numEvents++;\r
+      }\r
+      if (window->spaceMotion || window->spaceRotate || window->spaceButton) {\r
+        DeviceStateNotify(__glutSpaceball, __glutDeviceStateNotify,\r
+          eventList[numEvents]);\r
+        numEvents++;\r
+      }\r
+    }\r
+#if 0\r
+    if (window->children) {\r
+      GLUTwindow *child = window->children;\r
+\r
+      do {\r
+        XChangeDeviceDontPropagateList(__glutDisplay, child->win,\r
+          numEvents, eventList, AddToList);\r
+        child = child->siblings;\r
+      } while (child);\r
+    }\r
+#endif\r
+    XSelectExtensionEvent(__glutDisplay, window->win,\r
+      eventList, numEvents);\r
+    if (window->overlay) {\r
+      XSelectExtensionEvent(__glutDisplay, window->overlay->win,\r
+        eventList, numEvents);\r
+    }\r
+  } else {\r
+    /* X Input extension not supported; no chance for exotic\r
+       input devices. */\r
+  }\r
+#endif /* !_WIN32 */\r
+}\r
+\r
+#endif //POFIG\r
+\r
+/* CENTRY */\r
+int GLUTAPIENTRY\r
+glutDeviceGet(GLenum param)\r
+{\r
+#if POFIG\r
+  probeDevices();\r
+#endif\r
+  switch (param) {\r
+  case GLUT_HAS_KEYBOARD:\r
+  case GLUT_HAS_MOUSE:\r
+    /* Assume window system always has mouse and keyboard. */\r
+    return 1;\r
+#if POFIG\r
+  case GLUT_HAS_SPACEBALL:\r
+    return __glutSpaceball != NULL;\r
+  case GLUT_HAS_DIAL_AND_BUTTON_BOX:\r
+    return __glutDials != NULL;\r
+  case GLUT_HAS_TABLET:\r
+    return __glutTablet != NULL;\r
+  case GLUT_NUM_MOUSE_BUTTONS:\r
+    return __glutNumMouseButtons;\r
+  case GLUT_NUM_SPACEBALL_BUTTONS:\r
+    return __glutNumSpaceballButtons;\r
+  case GLUT_NUM_BUTTON_BOX_BUTTONS:\r
+    return __glutNumButtonBoxButtons;\r
+  case GLUT_NUM_DIALS:\r
+    return __glutNumDials;\r
+  case GLUT_NUM_TABLET_BUTTONS:\r
+    return __glutNumTabletButtons;\r
+  case GLUT_DEVICE_IGNORE_KEY_REPEAT:\r
+    return __glutCurrentWindow->ignoreKeyRepeat;\r
+#ifndef _WIN32\r
+  case GLUT_DEVICE_KEY_REPEAT:\r
+    {\r
+      XKeyboardState state;\r
+\r
+      XGetKeyboardControl(__glutDisplay, &state);\r
+      return state.global_auto_repeat;\r
+    }\r
+  case GLUT_JOYSTICK_POLL_RATE:\r
+    return 0;\r
+#else\r
+  case GLUT_DEVICE_KEY_REPEAT:\r
+    /* Win32 cannot globally disable key repeat. */\r
+    return GLUT_KEY_REPEAT_ON;\r
+  case GLUT_JOYSTICK_POLL_RATE:\r
+    return __glutCurrentWindow->joyPollInterval;\r
+#endif\r
+  case GLUT_HAS_JOYSTICK:\r
+    return __glutHasJoystick;\r
+  case GLUT_JOYSTICK_BUTTONS:\r
+    return __glutNumJoystickButtons;\r
+  case GLUT_JOYSTICK_AXES:\r
+    return __glutNumJoystickAxes;\r
+#endif //POFIG\r
+  default:\r
+    __glutWarning("invalid glutDeviceGet parameter: %d", param);\r
+    return -1;\r
+  }\r
+}\r
+/* ENDCENTRY */\r
diff --git a/src/glut/os2/glut_key.cpp b/src/glut/os2/glut_key.cpp
new file mode 100644 (file)
index 0000000..a1b9919
--- /dev/null
@@ -0,0 +1,29 @@
+\r
+/* Copyright (c) Mark J. Kilgard, 1997. */\r
+\r
+/* This program is freely distributable without licensing fees\r
+   and is provided without guarantee or warrantee expressed or\r
+   implied. This program is -not- in the public domain. */\r
+\r
+#include <stdlib.h>\r
+\r
+#include "glutint.h"\r
+\r
+/* CENTRY */\r
+void GLUTAPIENTRY\r
+glutKeyboardFunc(GLUTkeyboardCB keyboardFunc)\r
+{\r
+  __glutChangeWindowEventMask(KeyPressMask,\r
+    keyboardFunc != NULL || __glutCurrentWindow->special != NULL);\r
+  __glutCurrentWindow->keyboard = keyboardFunc;\r
+}\r
+\r
+void GLUTAPIENTRY\r
+glutSpecialFunc(GLUTspecialCB specialFunc)\r
+{\r
+  __glutChangeWindowEventMask(KeyPressMask,\r
+    specialFunc != NULL || __glutCurrentWindow->keyboard != NULL);\r
+  __glutCurrentWindow->special = specialFunc;\r
+}\r
+\r
+/* ENDCENTRY */\r
diff --git a/src/glut/os2/glut_keyctrl.cpp b/src/glut/os2/glut_keyctrl.cpp
new file mode 100644 (file)
index 0000000..b0f3a28
--- /dev/null
@@ -0,0 +1,29 @@
+\r
+/* Copyright (c) Mark J. Kilgard, 1996, 1997. */\r
+\r
+/* This program is freely distributable without licensing fees\r
+   and is provided without guarantee or warrantee expressed or\r
+   implied. This program is -not- in the public domain. */\r
+\r
+#include "glutint.h"\r
+\r
+/* CENTRY */\r
+void GLUTAPIENTRY\r
+glutIgnoreKeyRepeat(int ignore)\r
+{\r
+  __glutCurrentWindow->ignoreKeyRepeat = ignore;\r
+}\r
+\r
+void GLUTAPIENTRY\r
+glutSetKeyRepeat(int repeatMode)\r
+{\r
+#if !defined(_WIN32) && !defined(__OS2PM__)\r
+  XKeyboardControl values;\r
+\r
+  /* GLUT's repeatMode #define's match the Xlib API values. */\r
+  values.auto_repeat_mode = repeatMode;\r
+  XChangeKeyboardControl(__glutDisplay, KBAutoRepeatMode, &values);\r
+#endif\r
+}\r
+\r
+/* ENDCENTRY */\r
diff --git a/src/glut/os2/glut_keyup.cpp b/src/glut/os2/glut_keyup.cpp
new file mode 100644 (file)
index 0000000..ada758e
--- /dev/null
@@ -0,0 +1,29 @@
+\r
+/* Copyright (c) Mark J. Kilgard, 1997. */\r
+\r
+/* This program is freely distributable without licensing fees\r
+   and is provided without guarantee or warrantee expressed or\r
+   implied. This program is -not- in the public domain. */\r
+\r
+#include <stdlib.h>\r
+\r
+#include "glutint.h"\r
+\r
+/* CENTRY */\r
+void GLUTAPIENTRY\r
+glutKeyboardUpFunc(GLUTkeyboardCB keyboardUpFunc)\r
+{\r
+  __glutChangeWindowEventMask(KeyReleaseMask,\r
+    keyboardUpFunc != NULL || __glutCurrentWindow->specialUp != NULL);\r
+  __glutCurrentWindow->keyboardUp = keyboardUpFunc;\r
+}\r
+\r
+void  GLUTAPIENTRY\r
+glutSpecialUpFunc(GLUTspecialCB specialUpFunc)\r
+{\r
+  __glutChangeWindowEventMask(KeyReleaseMask,\r
+    specialUpFunc != NULL || __glutCurrentWindow->keyboardUp != NULL);\r
+  __glutCurrentWindow->specialUp = specialUpFunc;\r
+}\r
+\r
+/* ENDCENTRY */\r
diff --git a/src/glut/os2/glut_mesa.cpp b/src/glut/os2/glut_mesa.cpp
new file mode 100644 (file)
index 0000000..73682a5
--- /dev/null
@@ -0,0 +1,57 @@
+\r
+/* Copyright (c) Mark J. Kilgard, 1996. */\r
+\r
+/* This program is freely distributable without licensing fees \r
+   and is provided without guarantee or warrantee expressed or \r
+   implied. This program is -not- in the public domain. */\r
+\r
+#include <stdlib.h>\r
+#include <string.h>\r
+#include "glutint.h"\r
+\r
+int __glutMesaSwapHackSupport = 0;  /* Not supported until\r
+                                       proven otherwise. */\r
+\r
+/* Use the "Mesa swap hack" if reasonable if and only if\r
+   MESA_SWAP_HACK is set to something whose first character is\r
+   not "N" or "n" AND "Brian Paul" is the vendor string AND\r
+   "Mesa X11"* (or "Mesa" for backward compatibility)  is the\r
+   renderer string.\r
+\r
+   Anyone who modifies Mesa so that glXSwapBuffers does not\r
+   simply blit the previously rendered back buffer should\r
+   change either their vendor or renderer string to avoid\r
+   confusing GLUT. */\r
+\r
+void\r
+__glutDetermineMesaSwapHackSupport(void)\r
+{\r
+  static int doneAlready = 0;\r
+  char *env, *vendor, *renderer;\r
+\r
+  if (doneAlready)\r
+    return;\r
+  env = getenv("MESA_SWAP_HACK");\r
+  if (env) {\r
+    if ((env[0] != 'n') && (env[0] != 'N')) {\r
+      vendor = (char *) glGetString(GL_VENDOR);\r
+      renderer = (char *) glGetString(GL_RENDERER);\r
+\r
+      /* Old versions of X11 Mesa uses the renderer string\r
+         "Mesa"; Brian plans to start using "Mesa X11" to\r
+         distinguish the X version of Mesa from other flavor\r
+         such as Windows or 3Dfx. */\r
+\r
+#define MESA_X11 "Mesa X11"\r
+\r
+      /* XXX At some point in the future, eliminate the\r
+         backward compatibility for the old "Mesa" renderer\r
+         string. */\r
+\r
+      if (!strcmp(vendor, "Brian Paul") && (!strcmp(renderer, "Mesa") ||\r
+          !strncmp(renderer, MESA_X11, sizeof(MESA_X11) - 1)))\r
+        __glutMesaSwapHackSupport = 1;\r
+    }\r
+  }\r
+  doneAlready = 1;\r
+}\r
diff --git a/src/glut/os2/glut_modifier.cpp b/src/glut/os2/glut_modifier.cpp
new file mode 100644 (file)
index 0000000..0ffa5a6
--- /dev/null
@@ -0,0 +1,31 @@
+\r
+/* Copyright (c) Mark J. Kilgard, 1994. */\r
+\r
+/* This program is freely distributable without licensing fees\r
+   and is provided without guarantee or warrantee expressed or\r
+   implied. This program is -not- in the public domain. */\r
+\r
+#include "glutint.h"\r
+\r
+/* CENTRY */\r
+int GLUTAPIENTRY\r
+glutGetModifiers(void)\r
+{\r
+  int modifiers;\r
+\r
+  if(__glutModifierMask == (unsigned int) ~0) {\r
+    __glutWarning(\r
+      "glutCurrentModifiers: do not call outside core input callback.");\r
+    return 0;\r
+  }\r
+  modifiers = 0;\r
+  if(__glutModifierMask & (ShiftMask|LockMask))\r
+    modifiers |= GLUT_ACTIVE_SHIFT;\r
+  if(__glutModifierMask & ControlMask)\r
+    modifiers |= GLUT_ACTIVE_CTRL;\r
+  if(__glutModifierMask & Mod1Mask)\r
+    modifiers |= GLUT_ACTIVE_ALT;\r
+  return modifiers;\r
+}\r
+\r
+/* ENDCENTRY */\r
diff --git a/src/glut/os2/glut_roman.cpp b/src/glut/os2/glut_roman.cpp
new file mode 100644 (file)
index 0000000..8e25de8
--- /dev/null
@@ -0,0 +1,2451 @@
+\r
+/* GENERATED FILE -- DO NOT MODIFY */\r
+\r
+#include "glutstroke.h"\r
+\r
+/* char: 33 '!' */\r
+\r
+static const CoordRec char33_stroke0[] = {\r
+    { 13.3819, 100 },\r
+    { 13.3819, 33.3333 },\r
+};\r
+\r
+static const CoordRec char33_stroke1[] = {\r
+    { 13.3819, 9.5238 },\r
+    { 8.62, 4.7619 },\r
+    { 13.3819, 0 },\r
+    { 18.1438, 4.7619 },\r
+    { 13.3819, 9.5238 },\r
+};\r
+\r
+static const StrokeRec char33[] = {\r
+   { 2, char33_stroke0 },\r
+   { 5, char33_stroke1 },\r
+};\r
+\r
+/* char: 34 '"' */\r
+\r
+static const CoordRec char34_stroke0[] = {\r
+    { 4.02, 100 },\r
+    { 4.02, 66.6667 },\r
+};\r
+\r
+static const CoordRec char34_stroke1[] = {\r
+    { 42.1152, 100 },\r
+    { 42.1152, 66.6667 },\r
+};\r
+\r
+static const StrokeRec char34[] = {\r
+   { 2, char34_stroke0 },\r
+   { 2, char34_stroke1 },\r
+};\r
+\r
+/* char: 35 '#' */\r
+\r
+static const CoordRec char35_stroke0[] = {\r
+    { 41.2952, 119.048 },\r
+    { 7.9619, -33.3333 },\r
+};\r
+\r
+static const CoordRec char35_stroke1[] = {\r
+    { 69.8667, 119.048 },\r
+    { 36.5333, -33.3333 },\r
+};\r
+\r
+static const CoordRec char35_stroke2[] = {\r
+    { 7.9619, 57.1429 },\r
+    { 74.6286, 57.1429 },\r
+};\r
+\r
+static const CoordRec char35_stroke3[] = {\r
+    { 3.2, 28.5714 },\r
+    { 69.8667, 28.5714 },\r
+};\r
+\r
+static const StrokeRec char35[] = {\r
+   { 2, char35_stroke0 },\r
+   { 2, char35_stroke1 },\r
+   { 2, char35_stroke2 },\r
+   { 2, char35_stroke3 },\r
+};\r
+\r
+/* char: 36 '$' */\r
+\r
+static const CoordRec char36_stroke0[] = {\r
+    { 28.6295, 119.048 },\r
+    { 28.6295, -19.0476 },\r
+};\r
+\r
+static const CoordRec char36_stroke1[] = {\r
+    { 47.6771, 119.048 },\r
+    { 47.6771, -19.0476 },\r
+};\r
+\r
+static const CoordRec char36_stroke2[] = {\r
+    { 71.4867, 85.7143 },\r
+    { 61.9629, 95.2381 },\r
+    { 47.6771, 100 },\r
+    { 28.6295, 100 },\r
+    { 14.3438, 95.2381 },\r
+    { 4.82, 85.7143 },\r
+    { 4.82, 76.1905 },\r
+    { 9.5819, 66.6667 },\r
+    { 14.3438, 61.9048 },\r
+    { 23.8676, 57.1429 },\r
+    { 52.439, 47.619 },\r
+    { 61.9629, 42.8571 },\r
+    { 66.7248, 38.0952 },\r
+    { 71.4867, 28.5714 },\r
+    { 71.4867, 14.2857 },\r
+    { 61.9629, 4.7619 },\r
+    { 47.6771, 0 },\r
+    { 28.6295, 0 },\r
+    { 14.3438, 4.7619 },\r
+    { 4.82, 14.2857 },\r
+};\r
+\r
+static const StrokeRec char36[] = {\r
+   { 2, char36_stroke0 },\r
+   { 2, char36_stroke1 },\r
+   { 20, char36_stroke2 },\r
+};\r
+\r
+/* char: 37 '%' */\r
+\r
+static const CoordRec char37_stroke0[] = {\r
+    { 92.0743, 100 },\r
+    { 6.36, 0 },\r
+};\r
+\r
+static const CoordRec char37_stroke1[] = {\r
+    { 30.1695, 100 },\r
+    { 39.6933, 90.4762 },\r
+    { 39.6933, 80.9524 },\r
+    { 34.9314, 71.4286 },\r
+    { 25.4076, 66.6667 },\r
+    { 15.8838, 66.6667 },\r
+    { 6.36, 76.1905 },\r
+    { 6.36, 85.7143 },\r
+    { 11.1219, 95.2381 },\r
+    { 20.6457, 100 },\r
+    { 30.1695, 100 },\r
+    { 39.6933, 95.2381 },\r
+    { 53.979, 90.4762 },\r
+    { 68.2648, 90.4762 },\r
+    { 82.5505, 95.2381 },\r
+    { 92.0743, 100 },\r
+};\r
+\r
+static const CoordRec char37_stroke2[] = {\r
+    { 73.0267, 33.3333 },\r
+    { 63.5029, 28.5714 },\r
+    { 58.741, 19.0476 },\r
+    { 58.741, 9.5238 },\r
+    { 68.2648, 0 },\r
+    { 77.7886, 0 },\r
+    { 87.3124, 4.7619 },\r
+    { 92.0743, 14.2857 },\r
+    { 92.0743, 23.8095 },\r
+    { 82.5505, 33.3333 },\r
+    { 73.0267, 33.3333 },\r
+};\r
+\r
+static const StrokeRec char37[] = {\r
+   { 2, char37_stroke0 },\r
+   { 16, char37_stroke1 },\r
+   { 11, char37_stroke2 },\r
+};\r
+\r
+/* char: 38 '&' */\r
+\r
+static const CoordRec char38_stroke0[] = {\r
+    { 101.218, 57.1429 },\r
+    { 101.218, 61.9048 },\r
+    { 96.4562, 66.6667 },\r
+    { 91.6943, 66.6667 },\r
+    { 86.9324, 61.9048 },\r
+    { 82.1705, 52.381 },\r
+    { 72.6467, 28.5714 },\r
+    { 63.1229, 14.2857 },\r
+    { 53.599, 4.7619 },\r
+    { 44.0752, 0 },\r
+    { 25.0276, 0 },\r
+    { 15.5038, 4.7619 },\r
+    { 10.7419, 9.5238 },\r
+    { 5.98, 19.0476 },\r
+    { 5.98, 28.5714 },\r
+    { 10.7419, 38.0952 },\r
+    { 15.5038, 42.8571 },\r
+    { 48.8371, 61.9048 },\r
+    { 53.599, 66.6667 },\r
+    { 58.361, 76.1905 },\r
+    { 58.361, 85.7143 },\r
+    { 53.599, 95.2381 },\r
+    { 44.0752, 100 },\r
+    { 34.5514, 95.2381 },\r
+    { 29.7895, 85.7143 },\r
+    { 29.7895, 76.1905 },\r
+    { 34.5514, 61.9048 },\r
+    { 44.0752, 47.619 },\r
+    { 67.8848, 14.2857 },\r
+    { 77.4086, 4.7619 },\r
+    { 86.9324, 0 },\r
+    { 96.4562, 0 },\r
+    { 101.218, 4.7619 },\r
+    { 101.218, 9.5238 },\r
+};\r
+\r
+static const StrokeRec char38[] = {\r
+   { 34, char38_stroke0 },\r
+};\r
+\r
+/* char: 39 ''' */\r
+\r
+static const CoordRec char39_stroke0[] = {\r
+    { 4.44, 100 },\r
+    { 4.44, 66.6667 },\r
+};\r
+\r
+static const StrokeRec char39[] = {\r
+   { 2, char39_stroke0 },\r
+};\r
+\r
+/* char: 40 '(' */\r
+\r
+static const CoordRec char40_stroke0[] = {\r
+    { 40.9133, 119.048 },\r
+    { 31.3895, 109.524 },\r
+    { 21.8657, 95.2381 },\r
+    { 12.3419, 76.1905 },\r
+    { 7.58, 52.381 },\r
+    { 7.58, 33.3333 },\r
+    { 12.3419, 9.5238 },\r
+    { 21.8657, -9.5238 },\r
+    { 31.3895, -23.8095 },\r
+    { 40.9133, -33.3333 },\r
+};\r
+\r
+static const StrokeRec char40[] = {\r
+   { 10, char40_stroke0 },\r
+};\r
+\r
+/* char: 41 ')' */\r
+\r
+static const CoordRec char41_stroke0[] = {\r
+    { 5.28, 119.048 },\r
+    { 14.8038, 109.524 },\r
+    { 24.3276, 95.2381 },\r
+    { 33.8514, 76.1905 },\r
+    { 38.6133, 52.381 },\r
+    { 38.6133, 33.3333 },\r
+    { 33.8514, 9.5238 },\r
+    { 24.3276, -9.5238 },\r
+    { 14.8038, -23.8095 },\r
+    { 5.28, -33.3333 },\r
+};\r
+\r
+static const StrokeRec char41[] = {\r
+   { 10, char41_stroke0 },\r
+};\r
+\r
+/* char: 42 '*' */\r
+\r
+static const CoordRec char42_stroke0[] = {\r
+    { 30.7695, 71.4286 },\r
+    { 30.7695, 14.2857 },\r
+};\r
+\r
+static const CoordRec char42_stroke1[] = {\r
+    { 6.96, 57.1429 },\r
+    { 54.579, 28.5714 },\r
+};\r
+\r
+static const CoordRec char42_stroke2[] = {\r
+    { 54.579, 57.1429 },\r
+    { 6.96, 28.5714 },\r
+};\r
+\r
+static const StrokeRec char42[] = {\r
+   { 2, char42_stroke0 },\r
+   { 2, char42_stroke1 },\r
+   { 2, char42_stroke2 },\r
+};\r
+\r
+/* char: 43 '+' */\r
+\r
+static const CoordRec char43_stroke0[] = {\r
+    { 48.8371, 85.7143 },\r
+    { 48.8371, 0 },\r
+};\r
+\r
+static const CoordRec char43_stroke1[] = {\r
+    { 5.98, 42.8571 },\r
+    { 91.6943, 42.8571 },\r
+};\r
+\r
+static const StrokeRec char43[] = {\r
+   { 2, char43_stroke0 },\r
+   { 2, char43_stroke1 },\r
+};\r
+\r
+/* char: 44 ',' */\r
+\r
+static const CoordRec char44_stroke0[] = {\r
+    { 18.2838, 4.7619 },\r
+    { 13.5219, 0 },\r
+    { 8.76, 4.7619 },\r
+    { 13.5219, 9.5238 },\r
+    { 18.2838, 4.7619 },\r
+    { 18.2838, -4.7619 },\r
+    { 13.5219, -14.2857 },\r
+    { 8.76, -19.0476 },\r
+};\r
+\r
+static const StrokeRec char44[] = {\r
+   { 8, char44_stroke0 },\r
+};\r
+\r
+/* char: 45 '-' */\r
+\r
+static const CoordRec char45_stroke0[] = {\r
+    { 7.38, 42.8571 },\r
+    { 93.0943, 42.8571 },\r
+};\r
+\r
+static const StrokeRec char45[] = {\r
+   { 2, char45_stroke0 },\r
+};\r
+\r
+/* char: 46 '.' */\r
+\r
+static const CoordRec char46_stroke0[] = {\r
+    { 13.1019, 9.5238 },\r
+    { 8.34, 4.7619 },\r
+    { 13.1019, 0 },\r
+    { 17.8638, 4.7619 },\r
+    { 13.1019, 9.5238 },\r
+};\r
+\r
+static const StrokeRec char46[] = {\r
+   { 5, char46_stroke0 },\r
+};\r
+\r
+/* char: 47 '/' */\r
+\r
+static const CoordRec char47_stroke0[] = {\r
+    { 7.24, -14.2857 },\r
+    { 73.9067, 100 },\r
+};\r
+\r
+static const StrokeRec char47[] = {\r
+   { 2, char47_stroke0 },\r
+};\r
+\r
+/* char: 48 '0' */\r
+\r
+static const CoordRec char48_stroke0[] = {\r
+    { 33.5514, 100 },\r
+    { 19.2657, 95.2381 },\r
+    { 9.7419, 80.9524 },\r
+    { 4.98, 57.1429 },\r
+    { 4.98, 42.8571 },\r
+    { 9.7419, 19.0476 },\r
+    { 19.2657, 4.7619 },\r
+    { 33.5514, 0 },\r
+    { 43.0752, 0 },\r
+    { 57.361, 4.7619 },\r
+    { 66.8848, 19.0476 },\r
+    { 71.6467, 42.8571 },\r
+    { 71.6467, 57.1429 },\r
+    { 66.8848, 80.9524 },\r
+    { 57.361, 95.2381 },\r
+    { 43.0752, 100 },\r
+    { 33.5514, 100 },\r
+};\r
+\r
+static const StrokeRec char48[] = {\r
+   { 17, char48_stroke0 },\r
+};\r
+\r
+/* char: 49 '1' */\r
+\r
+static const CoordRec char49_stroke0[] = {\r
+    { 11.82, 80.9524 },\r
+    { 21.3438, 85.7143 },\r
+    { 35.6295, 100 },\r
+    { 35.6295, 0 },\r
+};\r
+\r
+static const StrokeRec char49[] = {\r
+   { 4, char49_stroke0 },\r
+};\r
+\r
+/* char: 50 '2' */\r
+\r
+static const CoordRec char50_stroke0[] = {\r
+    { 10.1819, 76.1905 },\r
+    { 10.1819, 80.9524 },\r
+    { 14.9438, 90.4762 },\r
+    { 19.7057, 95.2381 },\r
+    { 29.2295, 100 },\r
+    { 48.2771, 100 },\r
+    { 57.801, 95.2381 },\r
+    { 62.5629, 90.4762 },\r
+    { 67.3248, 80.9524 },\r
+    { 67.3248, 71.4286 },\r
+    { 62.5629, 61.9048 },\r
+    { 53.039, 47.619 },\r
+    { 5.42, 0 },\r
+    { 72.0867, 0 },\r
+};\r
+\r
+static const StrokeRec char50[] = {\r
+   { 14, char50_stroke0 },\r
+};\r
+\r
+/* char: 51 '3' */\r
+\r
+static const CoordRec char51_stroke0[] = {\r
+    { 14.5238, 100 },\r
+    { 66.9048, 100 },\r
+    { 38.3333, 61.9048 },\r
+    { 52.619, 61.9048 },\r
+    { 62.1429, 57.1429 },\r
+    { 66.9048, 52.381 },\r
+    { 71.6667, 38.0952 },\r
+    { 71.6667, 28.5714 },\r
+    { 66.9048, 14.2857 },\r
+    { 57.381, 4.7619 },\r
+    { 43.0952, 0 },\r
+    { 28.8095, 0 },\r
+    { 14.5238, 4.7619 },\r
+    { 9.7619, 9.5238 },\r
+    { 5, 19.0476 },\r
+};\r
+\r
+static const StrokeRec char51[] = {\r
+   { 15, char51_stroke0 },\r
+};\r
+\r
+/* char: 52 '4' */\r
+\r
+static const CoordRec char52_stroke0[] = {\r
+    { 51.499, 100 },\r
+    { 3.88, 33.3333 },\r
+    { 75.3086, 33.3333 },\r
+};\r
+\r
+static const CoordRec char52_stroke1[] = {\r
+    { 51.499, 100 },\r
+    { 51.499, 0 },\r
+};\r
+\r
+static const StrokeRec char52[] = {\r
+   { 3, char52_stroke0 },\r
+   { 2, char52_stroke1 },\r
+};\r
+\r
+/* char: 53 '5' */\r
+\r
+static const CoordRec char53_stroke0[] = {\r
+    { 62.0029, 100 },\r
+    { 14.3838, 100 },\r
+    { 9.6219, 57.1429 },\r
+    { 14.3838, 61.9048 },\r
+    { 28.6695, 66.6667 },\r
+    { 42.9552, 66.6667 },\r
+    { 57.241, 61.9048 },\r
+    { 66.7648, 52.381 },\r
+    { 71.5267, 38.0952 },\r
+    { 71.5267, 28.5714 },\r
+    { 66.7648, 14.2857 },\r
+    { 57.241, 4.7619 },\r
+    { 42.9552, 0 },\r
+    { 28.6695, 0 },\r
+    { 14.3838, 4.7619 },\r
+    { 9.6219, 9.5238 },\r
+    { 4.86, 19.0476 },\r
+};\r
+\r
+static const StrokeRec char53[] = {\r
+   { 17, char53_stroke0 },\r
+};\r
+\r
+/* char: 54 '6' */\r
+\r
+static const CoordRec char54_stroke0[] = {\r
+    { 62.7229, 85.7143 },\r
+    { 57.961, 95.2381 },\r
+    { 43.6752, 100 },\r
+    { 34.1514, 100 },\r
+    { 19.8657, 95.2381 },\r
+    { 10.3419, 80.9524 },\r
+    { 5.58, 57.1429 },\r
+    { 5.58, 33.3333 },\r
+    { 10.3419, 14.2857 },\r
+    { 19.8657, 4.7619 },\r
+    { 34.1514, 0 },\r
+    { 38.9133, 0 },\r
+    { 53.199, 4.7619 },\r
+    { 62.7229, 14.2857 },\r
+    { 67.4848, 28.5714 },\r
+    { 67.4848, 33.3333 },\r
+    { 62.7229, 47.619 },\r
+    { 53.199, 57.1429 },\r
+    { 38.9133, 61.9048 },\r
+    { 34.1514, 61.9048 },\r
+    { 19.8657, 57.1429 },\r
+    { 10.3419, 47.619 },\r
+    { 5.58, 33.3333 },\r
+};\r
+\r
+static const StrokeRec char54[] = {\r
+   { 23, char54_stroke0 },\r
+};\r
+\r
+/* char: 55 '7' */\r
+\r
+static const CoordRec char55_stroke0[] = {\r
+    { 72.2267, 100 },\r
+    { 24.6076, 0 },\r
+};\r
+\r
+static const CoordRec char55_stroke1[] = {\r
+    { 5.56, 100 },\r
+    { 72.2267, 100 },\r
+};\r
+\r
+static const StrokeRec char55[] = {\r
+   { 2, char55_stroke0 },\r
+   { 2, char55_stroke1 },\r
+};\r
+\r
+/* char: 56 '8' */\r
+\r
+static const CoordRec char56_stroke0[] = {\r
+    { 29.4095, 100 },\r
+    { 15.1238, 95.2381 },\r
+    { 10.3619, 85.7143 },\r
+    { 10.3619, 76.1905 },\r
+    { 15.1238, 66.6667 },\r
+    { 24.6476, 61.9048 },\r
+    { 43.6952, 57.1429 },\r
+    { 57.981, 52.381 },\r
+    { 67.5048, 42.8571 },\r
+    { 72.2667, 33.3333 },\r
+    { 72.2667, 19.0476 },\r
+    { 67.5048, 9.5238 },\r
+    { 62.7429, 4.7619 },\r
+    { 48.4571, 0 },\r
+    { 29.4095, 0 },\r
+    { 15.1238, 4.7619 },\r
+    { 10.3619, 9.5238 },\r
+    { 5.6, 19.0476 },\r
+    { 5.6, 33.3333 },\r
+    { 10.3619, 42.8571 },\r
+    { 19.8857, 52.381 },\r
+    { 34.1714, 57.1429 },\r
+    { 53.219, 61.9048 },\r
+    { 62.7429, 66.6667 },\r
+    { 67.5048, 76.1905 },\r
+    { 67.5048, 85.7143 },\r
+    { 62.7429, 95.2381 },\r
+    { 48.4571, 100 },\r
+    { 29.4095, 100 },\r
+};\r
+\r
+static const StrokeRec char56[] = {\r
+   { 29, char56_stroke0 },\r
+};\r
+\r
+/* char: 57 '9' */\r
+\r
+static const CoordRec char57_stroke0[] = {\r
+    { 68.5048, 66.6667 },\r
+    { 63.7429, 52.381 },\r
+    { 54.219, 42.8571 },\r
+    { 39.9333, 38.0952 },\r
+    { 35.1714, 38.0952 },\r
+    { 20.8857, 42.8571 },\r
+    { 11.3619, 52.381 },\r
+    { 6.6, 66.6667 },\r
+    { 6.6, 71.4286 },\r
+    { 11.3619, 85.7143 },\r
+    { 20.8857, 95.2381 },\r
+    { 35.1714, 100 },\r
+    { 39.9333, 100 },\r
+    { 54.219, 95.2381 },\r
+    { 63.7429, 85.7143 },\r
+    { 68.5048, 66.6667 },\r
+    { 68.5048, 42.8571 },\r
+    { 63.7429, 19.0476 },\r
+    { 54.219, 4.7619 },\r
+    { 39.9333, 0 },\r
+    { 30.4095, 0 },\r
+    { 16.1238, 4.7619 },\r
+    { 11.3619, 14.2857 },\r
+};\r
+\r
+static const StrokeRec char57[] = {\r
+   { 23, char57_stroke0 },\r
+};\r
+\r
+/* char: 58 ':' */\r
+\r
+static const CoordRec char58_stroke0[] = {\r
+    { 14.0819, 66.6667 },\r
+    { 9.32, 61.9048 },\r
+    { 14.0819, 57.1429 },\r
+    { 18.8438, 61.9048 },\r
+    { 14.0819, 66.6667 },\r
+};\r
+\r
+static const CoordRec char58_stroke1[] = {\r
+    { 14.0819, 9.5238 },\r
+    { 9.32, 4.7619 },\r
+    { 14.0819, 0 },\r
+    { 18.8438, 4.7619 },\r
+    { 14.0819, 9.5238 },\r
+};\r
+\r
+static const StrokeRec char58[] = {\r
+   { 5, char58_stroke0 },\r
+   { 5, char58_stroke1 },\r
+};\r
+\r
+/* char: 59 ';' */\r
+\r
+static const CoordRec char59_stroke0[] = {\r
+    { 12.9619, 66.6667 },\r
+    { 8.2, 61.9048 },\r
+    { 12.9619, 57.1429 },\r
+    { 17.7238, 61.9048 },\r
+    { 12.9619, 66.6667 },\r
+};\r
+\r
+static const CoordRec char59_stroke1[] = {\r
+    { 17.7238, 4.7619 },\r
+    { 12.9619, 0 },\r
+    { 8.2, 4.7619 },\r
+    { 12.9619, 9.5238 },\r
+    { 17.7238, 4.7619 },\r
+    { 17.7238, -4.7619 },\r
+    { 12.9619, -14.2857 },\r
+    { 8.2, -19.0476 },\r
+};\r
+\r
+static const StrokeRec char59[] = {\r
+   { 5, char59_stroke0 },\r
+   { 8, char59_stroke1 },\r
+};\r
+\r
+/* char: 60 '<' */\r
+\r
+static const CoordRec char60_stroke0[] = {\r
+    { 79.2505, 85.7143 },\r
+    { 3.06, 42.8571 },\r
+    { 79.2505, 0 },\r
+};\r
+\r
+static const StrokeRec char60[] = {\r
+   { 3, char60_stroke0 },\r
+};\r
+\r
+/* char: 61 '=' */\r
+\r
+static const CoordRec char61_stroke0[] = {\r
+    { 5.7, 57.1429 },\r
+    { 91.4143, 57.1429 },\r
+};\r
+\r
+static const CoordRec char61_stroke1[] = {\r
+    { 5.7, 28.5714 },\r
+    { 91.4143, 28.5714 },\r
+};\r
+\r
+static const StrokeRec char61[] = {\r
+   { 2, char61_stroke0 },\r
+   { 2, char61_stroke1 },\r
+};\r
+\r
+/* char: 62 '>' */\r
+\r
+static const CoordRec char62_stroke0[] = {\r
+    { 2.78, 85.7143 },\r
+    { 78.9705, 42.8571 },\r
+    { 2.78, 0 },\r
+};\r
+\r
+static const StrokeRec char62[] = {\r
+   { 3, char62_stroke0 },\r
+};\r
+\r
+/* char: 63 '?' */\r
+\r
+static const CoordRec char63_stroke0[] = {\r
+    { 8.42, 76.1905 },\r
+    { 8.42, 80.9524 },\r
+    { 13.1819, 90.4762 },\r
+    { 17.9438, 95.2381 },\r
+    { 27.4676, 100 },\r
+    { 46.5152, 100 },\r
+    { 56.039, 95.2381 },\r
+    { 60.801, 90.4762 },\r
+    { 65.5629, 80.9524 },\r
+    { 65.5629, 71.4286 },\r
+    { 60.801, 61.9048 },\r
+    { 56.039, 57.1429 },\r
+    { 36.9914, 47.619 },\r
+    { 36.9914, 33.3333 },\r
+};\r
+\r
+static const CoordRec char63_stroke1[] = {\r
+    { 36.9914, 9.5238 },\r
+    { 32.2295, 4.7619 },\r
+    { 36.9914, 0 },\r
+    { 41.7533, 4.7619 },\r
+    { 36.9914, 9.5238 },\r
+};\r
+\r
+static const StrokeRec char63[] = {\r
+   { 14, char63_stroke0 },\r
+   { 5, char63_stroke1 },\r
+};\r
+\r
+/* char: 64 '@' */\r
+\r
+static const CoordRec char64_stroke0[] = {\r
+    { 49.2171, 52.381 },\r
+    { 39.6933, 57.1429 },\r
+    { 30.1695, 57.1429 },\r
+    { 25.4076, 47.619 },\r
+    { 25.4076, 42.8571 },\r
+    { 30.1695, 33.3333 },\r
+    { 39.6933, 33.3333 },\r
+    { 49.2171, 38.0952 },\r
+};\r
+\r
+static const CoordRec char64_stroke1[] = {\r
+    { 49.2171, 57.1429 },\r
+    { 49.2171, 38.0952 },\r
+    { 53.979, 33.3333 },\r
+    { 63.5029, 33.3333 },\r
+    { 68.2648, 42.8571 },\r
+    { 68.2648, 47.619 },\r
+    { 63.5029, 61.9048 },\r
+    { 53.979, 71.4286 },\r
+    { 39.6933, 76.1905 },\r
+    { 34.9314, 76.1905 },\r
+    { 20.6457, 71.4286 },\r
+    { 11.1219, 61.9048 },\r
+    { 6.36, 47.619 },\r
+    { 6.36, 42.8571 },\r
+    { 11.1219, 28.5714 },\r
+    { 20.6457, 19.0476 },\r
+    { 34.9314, 14.2857 },\r
+    { 39.6933, 14.2857 },\r
+    { 53.979, 19.0476 },\r
+};\r
+\r
+static const StrokeRec char64[] = {\r
+   { 8, char64_stroke0 },\r
+   { 19, char64_stroke1 },\r
+};\r
+\r
+/* char: 65 'A' */\r
+\r
+static const CoordRec char65_stroke0[] = {\r
+    { 40.5952, 100 },\r
+    { 2.5, 0 },\r
+};\r
+\r
+static const CoordRec char65_stroke1[] = {\r
+    { 40.5952, 100 },\r
+    { 78.6905, 0 },\r
+};\r
+\r
+static const CoordRec char65_stroke2[] = {\r
+    { 16.7857, 33.3333 },\r
+    { 64.4048, 33.3333 },\r
+};\r
+\r
+static const StrokeRec char65[] = {\r
+   { 2, char65_stroke0 },\r
+   { 2, char65_stroke1 },\r
+   { 2, char65_stroke2 },\r
+};\r
+\r
+/* char: 66 'B' */\r
+\r
+static const CoordRec char66_stroke0[] = {\r
+    { 11.42, 100 },\r
+    { 11.42, 0 },\r
+};\r
+\r
+static const CoordRec char66_stroke1[] = {\r
+    { 11.42, 100 },\r
+    { 54.2771, 100 },\r
+    { 68.5629, 95.2381 },\r
+    { 73.3248, 90.4762 },\r
+    { 78.0867, 80.9524 },\r
+    { 78.0867, 71.4286 },\r
+    { 73.3248, 61.9048 },\r
+    { 68.5629, 57.1429 },\r
+    { 54.2771, 52.381 },\r
+};\r
+\r
+static const CoordRec char66_stroke2[] = {\r
+    { 11.42, 52.381 },\r
+    { 54.2771, 52.381 },\r
+    { 68.5629, 47.619 },\r
+    { 73.3248, 42.8571 },\r
+    { 78.0867, 33.3333 },\r
+    { 78.0867, 19.0476 },\r
+    { 73.3248, 9.5238 },\r
+    { 68.5629, 4.7619 },\r
+    { 54.2771, 0 },\r
+    { 11.42, 0 },\r
+};\r
+\r
+static const StrokeRec char66[] = {\r
+   { 2, char66_stroke0 },\r
+   { 9, char66_stroke1 },\r
+   { 10, char66_stroke2 },\r
+};\r
+\r
+/* char: 67 'C' */\r
+\r
+static const CoordRec char67_stroke0[] = {\r
+    { 78.0886, 76.1905 },\r
+    { 73.3267, 85.7143 },\r
+    { 63.8029, 95.2381 },\r
+    { 54.279, 100 },\r
+    { 35.2314, 100 },\r
+    { 25.7076, 95.2381 },\r
+    { 16.1838, 85.7143 },\r
+    { 11.4219, 76.1905 },\r
+    { 6.66, 61.9048 },\r
+    { 6.66, 38.0952 },\r
+    { 11.4219, 23.8095 },\r
+    { 16.1838, 14.2857 },\r
+    { 25.7076, 4.7619 },\r
+    { 35.2314, 0 },\r
+    { 54.279, 0 },\r
+    { 63.8029, 4.7619 },\r
+    { 73.3267, 14.2857 },\r
+    { 78.0886, 23.8095 },\r
+};\r
+\r
+static const StrokeRec char67[] = {\r
+   { 18, char67_stroke0 },\r
+};\r
+\r
+/* char: 68 'D' */\r
+\r
+static const CoordRec char68_stroke0[] = {\r
+    { 11.96, 100 },\r
+    { 11.96, 0 },\r
+};\r
+\r
+static const CoordRec char68_stroke1[] = {\r
+    { 11.96, 100 },\r
+    { 45.2933, 100 },\r
+    { 59.579, 95.2381 },\r
+    { 69.1029, 85.7143 },\r
+    { 73.8648, 76.1905 },\r
+    { 78.6267, 61.9048 },\r
+    { 78.6267, 38.0952 },\r
+    { 73.8648, 23.8095 },\r
+    { 69.1029, 14.2857 },\r
+    { 59.579, 4.7619 },\r
+    { 45.2933, 0 },\r
+    { 11.96, 0 },\r
+};\r
+\r
+static const StrokeRec char68[] = {\r
+   { 2, char68_stroke0 },\r
+   { 12, char68_stroke1 },\r
+};\r
+\r
+/* char: 69 'E' */\r
+\r
+static const CoordRec char69_stroke0[] = {\r
+    { 11.42, 100 },\r
+    { 11.42, 0 },\r
+};\r
+\r
+static const CoordRec char69_stroke1[] = {\r
+    { 11.42, 100 },\r
+    { 73.3248, 100 },\r
+};\r
+\r
+static const CoordRec char69_stroke2[] = {\r
+    { 11.42, 52.381 },\r
+    { 49.5152, 52.381 },\r
+};\r
+\r
+static const CoordRec char69_stroke3[] = {\r
+    { 11.42, 0 },\r
+    { 73.3248, 0 },\r
+};\r
+\r
+static const StrokeRec char69[] = {\r
+   { 2, char69_stroke0 },\r
+   { 2, char69_stroke1 },\r
+   { 2, char69_stroke2 },\r
+   { 2, char69_stroke3 },\r
+};\r
+\r
+/* char: 70 'F' */\r
+\r
+static const CoordRec char70_stroke0[] = {\r
+    { 11.42, 100 },\r
+    { 11.42, 0 },\r
+};\r
+\r
+static const CoordRec char70_stroke1[] = {\r
+    { 11.42, 100 },\r
+    { 73.3248, 100 },\r
+};\r
+\r
+static const CoordRec char70_stroke2[] = {\r
+    { 11.42, 52.381 },\r
+    { 49.5152, 52.381 },\r
+};\r
+\r
+static const StrokeRec char70[] = {\r
+   { 2, char70_stroke0 },\r
+   { 2, char70_stroke1 },\r
+   { 2, char70_stroke2 },\r
+};\r
+\r
+/* char: 71 'G' */\r
+\r
+static const CoordRec char71_stroke0[] = {\r
+    { 78.4886, 76.1905 },\r
+    { 73.7267, 85.7143 },\r
+    { 64.2029, 95.2381 },\r
+    { 54.679, 100 },\r
+    { 35.6314, 100 },\r
+    { 26.1076, 95.2381 },\r
+    { 16.5838, 85.7143 },\r
+    { 11.8219, 76.1905 },\r
+    { 7.06, 61.9048 },\r
+    { 7.06, 38.0952 },\r
+    { 11.8219, 23.8095 },\r
+    { 16.5838, 14.2857 },\r
+    { 26.1076, 4.7619 },\r
+    { 35.6314, 0 },\r
+    { 54.679, 0 },\r
+    { 64.2029, 4.7619 },\r
+    { 73.7267, 14.2857 },\r
+    { 78.4886, 23.8095 },\r
+    { 78.4886, 38.0952 },\r
+};\r
+\r
+static const CoordRec char71_stroke1[] = {\r
+    { 54.679, 38.0952 },\r
+    { 78.4886, 38.0952 },\r
+};\r
+\r
+static const StrokeRec char71[] = {\r
+   { 19, char71_stroke0 },\r
+   { 2, char71_stroke1 },\r
+};\r
+\r
+/* char: 72 'H' */\r
+\r
+static const CoordRec char72_stroke0[] = {\r
+    { 11.42, 100 },\r
+    { 11.42, 0 },\r
+};\r
+\r
+static const CoordRec char72_stroke1[] = {\r
+    { 78.0867, 100 },\r
+    { 78.0867, 0 },\r
+};\r
+\r
+static const CoordRec char72_stroke2[] = {\r
+    { 11.42, 52.381 },\r
+    { 78.0867, 52.381 },\r
+};\r
+\r
+static const StrokeRec char72[] = {\r
+   { 2, char72_stroke0 },\r
+   { 2, char72_stroke1 },\r
+   { 2, char72_stroke2 },\r
+};\r
+\r
+/* char: 73 'I' */\r
+\r
+static const CoordRec char73_stroke0[] = {\r
+    { 10.86, 100 },\r
+    { 10.86, 0 },\r
+};\r
+\r
+static const StrokeRec char73[] = {\r
+   { 2, char73_stroke0 },\r
+};\r
+\r
+/* char: 74 'J' */\r
+\r
+static const CoordRec char74_stroke0[] = {\r
+    { 50.119, 100 },\r
+    { 50.119, 23.8095 },\r
+    { 45.3571, 9.5238 },\r
+    { 40.5952, 4.7619 },\r
+    { 31.0714, 0 },\r
+    { 21.5476, 0 },\r
+    { 12.0238, 4.7619 },\r
+    { 7.2619, 9.5238 },\r
+    { 2.5, 23.8095 },\r
+    { 2.5, 33.3333 },\r
+};\r
+\r
+static const StrokeRec char74[] = {\r
+   { 10, char74_stroke0 },\r
+};\r
+\r
+/* char: 75 'K' */\r
+\r
+static const CoordRec char75_stroke0[] = {\r
+    { 11.28, 100 },\r
+    { 11.28, 0 },\r
+};\r
+\r
+static const CoordRec char75_stroke1[] = {\r
+    { 77.9467, 100 },\r
+    { 11.28, 33.3333 },\r
+};\r
+\r
+static const CoordRec char75_stroke2[] = {\r
+    { 35.0895, 57.1429 },\r
+    { 77.9467, 0 },\r
+};\r
+\r
+static const StrokeRec char75[] = {\r
+   { 2, char75_stroke0 },\r
+   { 2, char75_stroke1 },\r
+   { 2, char75_stroke2 },\r
+};\r
+\r
+/* char: 76 'L' */\r
+\r
+static const CoordRec char76_stroke0[] = {\r
+    { 11.68, 100 },\r
+    { 11.68, 0 },\r
+};\r
+\r
+static const CoordRec char76_stroke1[] = {\r
+    { 11.68, 0 },\r
+    { 68.8229, 0 },\r
+};\r
+\r
+static const StrokeRec char76[] = {\r
+   { 2, char76_stroke0 },\r
+   { 2, char76_stroke1 },\r
+};\r
+\r
+/* char: 77 'M' */\r
+\r
+static const CoordRec char77_stroke0[] = {\r
+    { 10.86, 100 },\r
+    { 10.86, 0 },\r
+};\r
+\r
+static const CoordRec char77_stroke1[] = {\r
+    { 10.86, 100 },\r
+    { 48.9552, 0 },\r
+};\r
+\r
+static const CoordRec char77_stroke2[] = {\r
+    { 87.0505, 100 },\r
+    { 48.9552, 0 },\r
+};\r
+\r
+static const CoordRec char77_stroke3[] = {\r
+    { 87.0505, 100 },\r
+    { 87.0505, 0 },\r
+};\r
+\r
+static const StrokeRec char77[] = {\r
+   { 2, char77_stroke0 },\r
+   { 2, char77_stroke1 },\r
+   { 2, char77_stroke2 },\r
+   { 2, char77_stroke3 },\r
+};\r
+\r
+/* char: 78 'N' */\r
+\r
+static const CoordRec char78_stroke0[] = {\r
+    { 11.14, 100 },\r
+    { 11.14, 0 },\r
+};\r
+\r
+static const CoordRec char78_stroke1[] = {\r
+    { 11.14, 100 },\r
+    { 77.8067, 0 },\r
+};\r
+\r
+static const CoordRec char78_stroke2[] = {\r
+    { 77.8067, 100 },\r
+    { 77.8067, 0 },\r
+};\r
+\r
+static const StrokeRec char78[] = {\r
+   { 2, char78_stroke0 },\r
+   { 2, char78_stroke1 },\r
+   { 2, char78_stroke2 },\r
+};\r
+\r
+/* char: 79 'O' */\r
+\r
+static const CoordRec char79_stroke0[] = {\r
+    { 34.8114, 100 },\r
+    { 25.2876, 95.2381 },\r
+    { 15.7638, 85.7143 },\r
+    { 11.0019, 76.1905 },\r
+    { 6.24, 61.9048 },\r
+    { 6.24, 38.0952 },\r
+    { 11.0019, 23.8095 },\r
+    { 15.7638, 14.2857 },\r
+    { 25.2876, 4.7619 },\r
+    { 34.8114, 0 },\r
+    { 53.859, 0 },\r
+    { 63.3829, 4.7619 },\r
+    { 72.9067, 14.2857 },\r
+    { 77.6686, 23.8095 },\r
+    { 82.4305, 38.0952 },\r
+    { 82.4305, 61.9048 },\r
+    { 77.6686, 76.1905 },\r
+    { 72.9067, 85.7143 },\r
+    { 63.3829, 95.2381 },\r
+    { 53.859, 100 },\r
+    { 34.8114, 100 },\r
+};\r
+\r
+static const StrokeRec char79[] = {\r
+   { 21, char79_stroke0 },\r
+};\r
+\r
+/* char: 80 'P' */\r
+\r
+static const CoordRec char80_stroke0[] = {\r
+    { 12.1, 100 },\r
+    { 12.1, 0 },\r
+};\r
+\r
+static const CoordRec char80_stroke1[] = {\r
+    { 12.1, 100 },\r
+    { 54.9571, 100 },\r
+    { 69.2429, 95.2381 },\r
+    { 74.0048, 90.4762 },\r
+    { 78.7667, 80.9524 },\r
+    { 78.7667, 66.6667 },\r
+    { 74.0048, 57.1429 },\r
+    { 69.2429, 52.381 },\r
+    { 54.9571, 47.619 },\r
+    { 12.1, 47.619 },\r
+};\r
+\r
+static const StrokeRec char80[] = {\r
+   { 2, char80_stroke0 },\r
+   { 10, char80_stroke1 },\r
+};\r
+\r
+/* char: 81 'Q' */\r
+\r
+static const CoordRec char81_stroke0[] = {\r
+    { 33.8714, 100 },\r
+    { 24.3476, 95.2381 },\r
+    { 14.8238, 85.7143 },\r
+    { 10.0619, 76.1905 },\r
+    { 5.3, 61.9048 },\r
+    { 5.3, 38.0952 },\r
+    { 10.0619, 23.8095 },\r
+    { 14.8238, 14.2857 },\r
+    { 24.3476, 4.7619 },\r
+    { 33.8714, 0 },\r
+    { 52.919, 0 },\r
+    { 62.4429, 4.7619 },\r
+    { 71.9667, 14.2857 },\r
+    { 76.7286, 23.8095 },\r
+    { 81.4905, 38.0952 },\r
+    { 81.4905, 61.9048 },\r
+    { 76.7286, 76.1905 },\r
+    { 71.9667, 85.7143 },\r
+    { 62.4429, 95.2381 },\r
+    { 52.919, 100 },\r
+    { 33.8714, 100 },\r
+};\r
+\r
+static const CoordRec char81_stroke1[] = {\r
+    { 48.1571, 19.0476 },\r
+    { 76.7286, -9.5238 },\r
+};\r
+\r
+static const StrokeRec char81[] = {\r
+   { 21, char81_stroke0 },\r
+   { 2, char81_stroke1 },\r
+};\r
+\r
+/* char: 82 'R' */\r
+\r
+static const CoordRec char82_stroke0[] = {\r
+    { 11.68, 100 },\r
+    { 11.68, 0 },\r
+};\r
+\r
+static const CoordRec char82_stroke1[] = {\r
+    { 11.68, 100 },\r
+    { 54.5371, 100 },\r
+    { 68.8229, 95.2381 },\r
+    { 73.5848, 90.4762 },\r
+    { 78.3467, 80.9524 },\r
+    { 78.3467, 71.4286 },\r
+    { 73.5848, 61.9048 },\r
+    { 68.8229, 57.1429 },\r
+    { 54.5371, 52.381 },\r
+    { 11.68, 52.381 },\r
+};\r
+\r
+static const CoordRec char82_stroke2[] = {\r
+    { 45.0133, 52.381 },\r
+    { 78.3467, 0 },\r
+};\r
+\r
+static const StrokeRec char82[] = {\r
+   { 2, char82_stroke0 },\r
+   { 10, char82_stroke1 },\r
+   { 2, char82_stroke2 },\r
+};\r
+\r
+/* char: 83 'S' */\r
+\r
+static const CoordRec char83_stroke0[] = {\r
+    { 74.6667, 85.7143 },\r
+    { 65.1429, 95.2381 },\r
+    { 50.8571, 100 },\r
+    { 31.8095, 100 },\r
+    { 17.5238, 95.2381 },\r
+    { 8, 85.7143 },\r
+    { 8, 76.1905 },\r
+    { 12.7619, 66.6667 },\r
+    { 17.5238, 61.9048 },\r
+    { 27.0476, 57.1429 },\r
+    { 55.619, 47.619 },\r
+    { 65.1429, 42.8571 },\r
+    { 69.9048, 38.0952 },\r
+    { 74.6667, 28.5714 },\r
+    { 74.6667, 14.2857 },\r
+    { 65.1429, 4.7619 },\r
+    { 50.8571, 0 },\r
+    { 31.8095, 0 },\r
+    { 17.5238, 4.7619 },\r
+    { 8, 14.2857 },\r
+};\r
+\r
+static const StrokeRec char83[] = {\r
+   { 20, char83_stroke0 },\r
+};\r
+\r
+/* char: 84 'T' */\r
+\r
+static const CoordRec char84_stroke0[] = {\r
+    { 35.6933, 100 },\r
+    { 35.6933, 0 },\r
+};\r
+\r
+static const CoordRec char84_stroke1[] = {\r
+    { 2.36, 100 },\r
+    { 69.0267, 100 },\r
+};\r
+\r
+static const StrokeRec char84[] = {\r
+   { 2, char84_stroke0 },\r
+   { 2, char84_stroke1 },\r
+};\r
+\r
+/* char: 85 'U' */\r
+\r
+static const CoordRec char85_stroke0[] = {\r
+    { 11.54, 100 },\r
+    { 11.54, 28.5714 },\r
+    { 16.3019, 14.2857 },\r
+    { 25.8257, 4.7619 },\r
+    { 40.1114, 0 },\r
+    { 49.6352, 0 },\r
+    { 63.921, 4.7619 },\r
+    { 73.4448, 14.2857 },\r
+    { 78.2067, 28.5714 },\r
+    { 78.2067, 100 },\r
+};\r
+\r
+static const StrokeRec char85[] = {\r
+   { 10, char85_stroke0 },\r
+};\r
+\r
+/* char: 86 'V' */\r
+\r
+static const CoordRec char86_stroke0[] = {\r
+    { 2.36, 100 },\r
+    { 40.4552, 0 },\r
+};\r
+\r
+static const CoordRec char86_stroke1[] = {\r
+    { 78.5505, 100 },\r
+    { 40.4552, 0 },\r
+};\r
+\r
+static const StrokeRec char86[] = {\r
+   { 2, char86_stroke0 },\r
+   { 2, char86_stroke1 },\r
+};\r
+\r
+/* char: 87 'W' */\r
+\r
+static const CoordRec char87_stroke0[] = {\r
+    { 2.22, 100 },\r
+    { 26.0295, 0 },\r
+};\r
+\r
+static const CoordRec char87_stroke1[] = {\r
+    { 49.839, 100 },\r
+    { 26.0295, 0 },\r
+};\r
+\r
+static const CoordRec char87_stroke2[] = {\r
+    { 49.839, 100 },\r
+    { 73.6486, 0 },\r
+};\r
+\r
+static const CoordRec char87_stroke3[] = {\r
+    { 97.4581, 100 },\r
+    { 73.6486, 0 },\r
+};\r
+\r
+static const StrokeRec char87[] = {\r
+   { 2, char87_stroke0 },\r
+   { 2, char87_stroke1 },\r
+   { 2, char87_stroke2 },\r
+   { 2, char87_stroke3 },\r
+};\r
+\r
+/* char: 88 'X' */\r
+\r
+static const CoordRec char88_stroke0[] = {\r
+    { 2.5, 100 },\r
+    { 69.1667, 0 },\r
+};\r
+\r
+static const CoordRec char88_stroke1[] = {\r
+    { 69.1667, 100 },\r
+    { 2.5, 0 },\r
+};\r
+\r
+static const StrokeRec char88[] = {\r
+   { 2, char88_stroke0 },\r
+   { 2, char88_stroke1 },\r
+};\r
+\r
+/* char: 89 'Y' */\r
+\r
+static const CoordRec char89_stroke0[] = {\r
+    { 1.52, 100 },\r
+    { 39.6152, 52.381 },\r
+    { 39.6152, 0 },\r
+};\r
+\r
+static const CoordRec char89_stroke1[] = {\r
+    { 77.7105, 100 },\r
+    { 39.6152, 52.381 },\r
+};\r
+\r
+static const StrokeRec char89[] = {\r
+   { 3, char89_stroke0 },\r
+   { 2, char89_stroke1 },\r
+};\r
+\r
+/* char: 90 'Z' */\r
+\r
+static const CoordRec char90_stroke0[] = {\r
+    { 69.1667, 100 },\r
+    { 2.5, 0 },\r
+};\r
+\r
+static const CoordRec char90_stroke1[] = {\r
+    { 2.5, 100 },\r
+    { 69.1667, 100 },\r
+};\r
+\r
+static const CoordRec char90_stroke2[] = {\r
+    { 2.5, 0 },\r
+    { 69.1667, 0 },\r
+};\r
+\r
+static const StrokeRec char90[] = {\r
+   { 2, char90_stroke0 },\r
+   { 2, char90_stroke1 },\r
+   { 2, char90_stroke2 },\r
+};\r
+\r
+/* char: 91 '[' */\r
+\r
+static const CoordRec char91_stroke0[] = {\r
+    { 7.78, 119.048 },\r
+    { 7.78, -33.3333 },\r
+};\r
+\r
+static const CoordRec char91_stroke1[] = {\r
+    { 12.5419, 119.048 },\r
+    { 12.5419, -33.3333 },\r
+};\r
+\r
+static const CoordRec char91_stroke2[] = {\r
+    { 7.78, 119.048 },\r
+    { 41.1133, 119.048 },\r
+};\r
+\r
+static const CoordRec char91_stroke3[] = {\r
+    { 7.78, -33.3333 },\r
+    { 41.1133, -33.3333 },\r
+};\r
+\r
+static const StrokeRec char91[] = {\r
+   { 2, char91_stroke0 },\r
+   { 2, char91_stroke1 },\r
+   { 2, char91_stroke2 },\r
+   { 2, char91_stroke3 },\r
+};\r
+\r
+/* char: 92 '\' */\r
+\r
+static const CoordRec char92_stroke0[] = {\r
+    { 5.84, 100 },\r
+    { 72.5067, -14.2857 },\r
+};\r
+\r
+static const StrokeRec char92[] = {\r
+   { 2, char92_stroke0 },\r
+};\r
+\r
+/* char: 93 ']' */\r
+\r
+static const CoordRec char93_stroke0[] = {\r
+    { 33.0114, 119.048 },\r
+    { 33.0114, -33.3333 },\r
+};\r
+\r
+static const CoordRec char93_stroke1[] = {\r
+    { 37.7733, 119.048 },\r
+    { 37.7733, -33.3333 },\r
+};\r
+\r
+static const CoordRec char93_stroke2[] = {\r
+    { 4.44, 119.048 },\r
+    { 37.7733, 119.048 },\r
+};\r
+\r
+static const CoordRec char93_stroke3[] = {\r
+    { 4.44, -33.3333 },\r
+    { 37.7733, -33.3333 },\r
+};\r
+\r
+static const StrokeRec char93[] = {\r
+   { 2, char93_stroke0 },\r
+   { 2, char93_stroke1 },\r
+   { 2, char93_stroke2 },\r
+   { 2, char93_stroke3 },\r
+};\r
+\r
+/* char: 94 '^' */\r
+\r
+static const CoordRec char94_stroke0[] = {\r
+    { 44.0752, 109.524 },\r
+    { 5.98, 42.8571 },\r
+};\r
+\r
+static const CoordRec char94_stroke1[] = {\r
+    { 44.0752, 109.524 },\r
+    { 82.1705, 42.8571 },\r
+};\r
+\r
+static const StrokeRec char94[] = {\r
+   { 2, char94_stroke0 },\r
+   { 2, char94_stroke1 },\r
+};\r
+\r
+/* char: 95 '_' */\r
+\r
+static const CoordRec char95_stroke0[] = {\r
+    { -1.1, -33.3333 },\r
+    { 103.662, -33.3333 },\r
+    { 103.662, -28.5714 },\r
+    { -1.1, -28.5714 },\r
+    { -1.1, -33.3333 },\r
+};\r
+\r
+static const StrokeRec char95[] = {\r
+   { 5, char95_stroke0 },\r
+};\r
+\r
+/* char: 96 '`' */\r
+\r
+static const CoordRec char96_stroke0[] = {\r
+    { 33.0219, 100 },\r
+    { 56.8314, 71.4286 },\r
+};\r
+\r
+static const CoordRec char96_stroke1[] = {\r
+    { 33.0219, 100 },\r
+    { 28.26, 95.2381 },\r
+    { 56.8314, 71.4286 },\r
+};\r
+\r
+static const StrokeRec char96[] = {\r
+   { 2, char96_stroke0 },\r
+   { 3, char96_stroke1 },\r
+};\r
+\r
+/* char: 97 'a' */\r
+\r
+static const CoordRec char97_stroke0[] = {\r
+    { 63.8229, 66.6667 },\r
+    { 63.8229, 0 },\r
+};\r
+\r
+static const CoordRec char97_stroke1[] = {\r
+    { 63.8229, 52.381 },\r
+    { 54.299, 61.9048 },\r
+    { 44.7752, 66.6667 },\r
+    { 30.4895, 66.6667 },\r
+    { 20.9657, 61.9048 },\r
+    { 11.4419, 52.381 },\r
+    { 6.68, 38.0952 },\r
+    { 6.68, 28.5714 },\r
+    { 11.4419, 14.2857 },\r
+    { 20.9657, 4.7619 },\r
+    { 30.4895, 0 },\r
+    { 44.7752, 0 },\r
+    { 54.299, 4.7619 },\r
+    { 63.8229, 14.2857 },\r
+};\r
+\r
+static const StrokeRec char97[] = {\r
+   { 2, char97_stroke0 },\r
+   { 14, char97_stroke1 },\r
+};\r
+\r
+/* char: 98 'b' */\r
+\r
+static const CoordRec char98_stroke0[] = {\r
+    { 8.76, 100 },\r
+    { 8.76, 0 },\r
+};\r
+\r
+static const CoordRec char98_stroke1[] = {\r
+    { 8.76, 52.381 },\r
+    { 18.2838, 61.9048 },\r
+    { 27.8076, 66.6667 },\r
+    { 42.0933, 66.6667 },\r
+    { 51.6171, 61.9048 },\r
+    { 61.141, 52.381 },\r
+    { 65.9029, 38.0952 },\r
+    { 65.9029, 28.5714 },\r
+    { 61.141, 14.2857 },\r
+    { 51.6171, 4.7619 },\r
+    { 42.0933, 0 },\r
+    { 27.8076, 0 },\r
+    { 18.2838, 4.7619 },\r
+    { 8.76, 14.2857 },\r
+};\r
+\r
+static const StrokeRec char98[] = {\r
+   { 2, char98_stroke0 },\r
+   { 14, char98_stroke1 },\r
+};\r
+\r
+/* char: 99 'c' */\r
+\r
+static const CoordRec char99_stroke0[] = {\r
+    { 62.6629, 52.381 },\r
+    { 53.139, 61.9048 },\r
+    { 43.6152, 66.6667 },\r
+    { 29.3295, 66.6667 },\r
+    { 19.8057, 61.9048 },\r
+    { 10.2819, 52.381 },\r
+    { 5.52, 38.0952 },\r
+    { 5.52, 28.5714 },\r
+    { 10.2819, 14.2857 },\r
+    { 19.8057, 4.7619 },\r
+    { 29.3295, 0 },\r
+    { 43.6152, 0 },\r
+    { 53.139, 4.7619 },\r
+    { 62.6629, 14.2857 },\r
+};\r
+\r
+static const StrokeRec char99[] = {\r
+   { 14, char99_stroke0 },\r
+};\r
+\r
+/* char: 100 'd' */\r
+\r
+static const CoordRec char100_stroke0[] = {\r
+    { 61.7829, 100 },\r
+    { 61.7829, 0 },\r
+};\r
+\r
+static const CoordRec char100_stroke1[] = {\r
+    { 61.7829, 52.381 },\r
+    { 52.259, 61.9048 },\r
+    { 42.7352, 66.6667 },\r
+    { 28.4495, 66.6667 },\r
+    { 18.9257, 61.9048 },\r
+    { 9.4019, 52.381 },\r
+    { 4.64, 38.0952 },\r
+    { 4.64, 28.5714 },\r
+    { 9.4019, 14.2857 },\r
+    { 18.9257, 4.7619 },\r
+    { 28.4495, 0 },\r
+    { 42.7352, 0 },\r
+    { 52.259, 4.7619 },\r
+    { 61.7829, 14.2857 },\r
+};\r
+\r
+static const StrokeRec char100[] = {\r
+   { 2, char100_stroke0 },\r
+   { 14, char100_stroke1 },\r
+};\r
+\r
+/* char: 101 'e' */\r
+\r
+static const CoordRec char101_stroke0[] = {\r
+    { 5.72, 38.0952 },\r
+    { 62.8629, 38.0952 },\r
+    { 62.8629, 47.619 },\r
+    { 58.101, 57.1429 },\r
+    { 53.339, 61.9048 },\r
+    { 43.8152, 66.6667 },\r
+    { 29.5295, 66.6667 },\r
+    { 20.0057, 61.9048 },\r
+    { 10.4819, 52.381 },\r
+    { 5.72, 38.0952 },\r
+    { 5.72, 28.5714 },\r
+    { 10.4819, 14.2857 },\r
+    { 20.0057, 4.7619 },\r
+    { 29.5295, 0 },\r
+    { 43.8152, 0 },\r
+    { 53.339, 4.7619 },\r
+    { 62.8629, 14.2857 },\r
+};\r
+\r
+static const StrokeRec char101[] = {\r
+   { 17, char101_stroke0 },\r
+};\r
+\r
+/* char: 102 'f' */\r
+\r
+static const CoordRec char102_stroke0[] = {\r
+    { 38.7752, 100 },\r
+    { 29.2514, 100 },\r
+    { 19.7276, 95.2381 },\r
+    { 14.9657, 80.9524 },\r
+    { 14.9657, 0 },\r
+};\r
+\r
+static const CoordRec char102_stroke1[] = {\r
+    { 0.68, 66.6667 },\r
+    { 34.0133, 66.6667 },\r
+};\r
+\r
+static const StrokeRec char102[] = {\r
+   { 5, char102_stroke0 },\r
+   { 2, char102_stroke1 },\r
+};\r
+\r
+/* char: 103 'g' */\r
+\r
+static const CoordRec char103_stroke0[] = {\r
+    { 62.5029, 66.6667 },\r
+    { 62.5029, -9.5238 },\r
+    { 57.741, -23.8095 },\r
+    { 52.979, -28.5714 },\r
+    { 43.4552, -33.3333 },\r
+    { 29.1695, -33.3333 },\r
+    { 19.6457, -28.5714 },\r
+};\r
+\r
+static const CoordRec char103_stroke1[] = {\r
+    { 62.5029, 52.381 },\r
+    { 52.979, 61.9048 },\r
+    { 43.4552, 66.6667 },\r
+    { 29.1695, 66.6667 },\r
+    { 19.6457, 61.9048 },\r
+    { 10.1219, 52.381 },\r
+    { 5.36, 38.0952 },\r
+    { 5.36, 28.5714 },\r
+    { 10.1219, 14.2857 },\r
+    { 19.6457, 4.7619 },\r
+    { 29.1695, 0 },\r
+    { 43.4552, 0 },\r
+    { 52.979, 4.7619 },\r
+    { 62.5029, 14.2857 },\r
+};\r
+\r
+static const StrokeRec char103[] = {\r
+   { 7, char103_stroke0 },\r
+   { 14, char103_stroke1 },\r
+};\r
+\r
+/* char: 104 'h' */\r
+\r
+static const CoordRec char104_stroke0[] = {\r
+    { 9.6, 100 },\r
+    { 9.6, 0 },\r
+};\r
+\r
+static const CoordRec char104_stroke1[] = {\r
+    { 9.6, 47.619 },\r
+    { 23.8857, 61.9048 },\r
+    { 33.4095, 66.6667 },\r
+    { 47.6952, 66.6667 },\r
+    { 57.219, 61.9048 },\r
+    { 61.981, 47.619 },\r
+    { 61.981, 0 },\r
+};\r
+\r
+static const StrokeRec char104[] = {\r
+   { 2, char104_stroke0 },\r
+   { 7, char104_stroke1 },\r
+};\r
+\r
+/* char: 105 'i' */\r
+\r
+static const CoordRec char105_stroke0[] = {\r
+    { 10.02, 100 },\r
+    { 14.7819, 95.2381 },\r
+    { 19.5438, 100 },\r
+    { 14.7819, 104.762 },\r
+    { 10.02, 100 },\r
+};\r
+\r
+static const CoordRec char105_stroke1[] = {\r
+    { 14.7819, 66.6667 },\r
+    { 14.7819, 0 },\r
+};\r
+\r
+static const StrokeRec char105[] = {\r
+   { 5, char105_stroke0 },\r
+   { 2, char105_stroke1 },\r
+};\r
+\r
+/* char: 106 'j' */\r
+\r
+static const CoordRec char106_stroke0[] = {\r
+    { 17.3876, 100 },\r
+    { 22.1495, 95.2381 },\r
+    { 26.9114, 100 },\r
+    { 22.1495, 104.762 },\r
+    { 17.3876, 100 },\r
+};\r
+\r
+static const CoordRec char106_stroke1[] = {\r
+    { 22.1495, 66.6667 },\r
+    { 22.1495, -14.2857 },\r
+    { 17.3876, -28.5714 },\r
+    { 7.8638, -33.3333 },\r
+    { -1.66, -33.3333 },\r
+};\r
+\r
+static const StrokeRec char106[] = {\r
+   { 5, char106_stroke0 },\r
+   { 5, char106_stroke1 },\r
+};\r
+\r
+/* char: 107 'k' */\r
+\r
+static const CoordRec char107_stroke0[] = {\r
+    { 9.6, 100 },\r
+    { 9.6, 0 },\r
+};\r
+\r
+static const CoordRec char107_stroke1[] = {\r
+    { 57.219, 66.6667 },\r
+    { 9.6, 19.0476 },\r
+};\r
+\r
+static const CoordRec char107_stroke2[] = {\r
+    { 28.6476, 38.0952 },\r
+    { 61.981, 0 },\r
+};\r
+\r
+static const StrokeRec char107[] = {\r
+   { 2, char107_stroke0 },\r
+   { 2, char107_stroke1 },\r
+   { 2, char107_stroke2 },\r
+};\r
+\r
+/* char: 108 'l' */\r
+\r
+static const CoordRec char108_stroke0[] = {\r
+    { 10.02, 100 },\r
+    { 10.02, 0 },\r
+};\r
+\r
+static const StrokeRec char108[] = {\r
+   { 2, char108_stroke0 },\r
+};\r
+\r
+/* char: 109 'm' */\r
+\r
+static const CoordRec char109_stroke0[] = {\r
+    { 9.6, 66.6667 },\r
+    { 9.6, 0 },\r
+};\r
+\r
+static const CoordRec char109_stroke1[] = {\r
+    { 9.6, 47.619 },\r
+    { 23.8857, 61.9048 },\r
+    { 33.4095, 66.6667 },\r
+    { 47.6952, 66.6667 },\r
+    { 57.219, 61.9048 },\r
+    { 61.981, 47.619 },\r
+    { 61.981, 0 },\r
+};\r
+\r
+static const CoordRec char109_stroke2[] = {\r
+    { 61.981, 47.619 },\r
+    { 76.2667, 61.9048 },\r
+    { 85.7905, 66.6667 },\r
+    { 100.076, 66.6667 },\r
+    { 109.6, 61.9048 },\r
+    { 114.362, 47.619 },\r
+    { 114.362, 0 },\r
+};\r
+\r
+static const StrokeRec char109[] = {\r
+   { 2, char109_stroke0 },\r
+   { 7, char109_stroke1 },\r
+   { 7, char109_stroke2 },\r
+};\r
+\r
+/* char: 110 'n' */\r
+\r
+static const CoordRec char110_stroke0[] = {\r
+    { 9.18, 66.6667 },\r
+    { 9.18, 0 },\r
+};\r
+\r
+static const CoordRec char110_stroke1[] = {\r
+    { 9.18, 47.619 },\r
+    { 23.4657, 61.9048 },\r
+    { 32.9895, 66.6667 },\r
+    { 47.2752, 66.6667 },\r
+    { 56.799, 61.9048 },\r
+    { 61.561, 47.619 },\r
+    { 61.561, 0 },\r
+};\r
+\r
+static const StrokeRec char110[] = {\r
+   { 2, char110_stroke0 },\r
+   { 7, char110_stroke1 },\r
+};\r
+\r
+/* char: 111 'o' */\r
+\r
+static const CoordRec char111_stroke0[] = {\r
+    { 28.7895, 66.6667 },\r
+    { 19.2657, 61.9048 },\r
+    { 9.7419, 52.381 },\r
+    { 4.98, 38.0952 },\r
+    { 4.98, 28.5714 },\r
+    { 9.7419, 14.2857 },\r
+    { 19.2657, 4.7619 },\r
+    { 28.7895, 0 },\r
+    { 43.0752, 0 },\r
+    { 52.599, 4.7619 },\r
+    { 62.1229, 14.2857 },\r
+    { 66.8848, 28.5714 },\r
+    { 66.8848, 38.0952 },\r
+    { 62.1229, 52.381 },\r
+    { 52.599, 61.9048 },\r
+    { 43.0752, 66.6667 },\r
+    { 28.7895, 66.6667 },\r
+};\r
+\r
+static const StrokeRec char111[] = {\r
+   { 17, char111_stroke0 },\r
+};\r
+\r
+/* char: 112 'p' */\r
+\r
+static const CoordRec char112_stroke0[] = {\r
+    { 9.46, 66.6667 },\r
+    { 9.46, -33.3333 },\r
+};\r
+\r
+static const CoordRec char112_stroke1[] = {\r
+    { 9.46, 52.381 },\r
+    { 18.9838, 61.9048 },\r
+    { 28.5076, 66.6667 },\r
+    { 42.7933, 66.6667 },\r
+    { 52.3171, 61.9048 },\r
+    { 61.841, 52.381 },\r
+    { 66.6029, 38.0952 },\r
+    { 66.6029, 28.5714 },\r
+    { 61.841, 14.2857 },\r
+    { 52.3171, 4.7619 },\r
+    { 42.7933, 0 },\r
+    { 28.5076, 0 },\r
+    { 18.9838, 4.7619 },\r
+    { 9.46, 14.2857 },\r
+};\r
+\r
+static const StrokeRec char112[] = {\r
+   { 2, char112_stroke0 },\r
+   { 14, char112_stroke1 },\r
+};\r
+\r
+/* char: 113 'q' */\r
+\r
+static const CoordRec char113_stroke0[] = {\r
+    { 61.9829, 66.6667 },\r
+    { 61.9829, -33.3333 },\r
+};\r
+\r
+static const CoordRec char113_stroke1[] = {\r
+    { 61.9829, 52.381 },\r
+    { 52.459, 61.9048 },\r
+    { 42.9352, 66.6667 },\r
+    { 28.6495, 66.6667 },\r
+    { 19.1257, 61.9048 },\r
+    { 9.6019, 52.381 },\r
+    { 4.84, 38.0952 },\r
+    { 4.84, 28.5714 },\r
+    { 9.6019, 14.2857 },\r
+    { 19.1257, 4.7619 },\r
+    { 28.6495, 0 },\r
+    { 42.9352, 0 },\r
+    { 52.459, 4.7619 },\r
+    { 61.9829, 14.2857 },\r
+};\r
+\r
+static const StrokeRec char113[] = {\r
+   { 2, char113_stroke0 },\r
+   { 14, char113_stroke1 },\r
+};\r
+\r
+/* char: 114 'r' */\r
+\r
+static const CoordRec char114_stroke0[] = {\r
+    { 9.46, 66.6667 },\r
+    { 9.46, 0 },\r
+};\r
+\r
+static const CoordRec char114_stroke1[] = {\r
+    { 9.46, 38.0952 },\r
+    { 14.2219, 52.381 },\r
+    { 23.7457, 61.9048 },\r
+    { 33.2695, 66.6667 },\r
+    { 47.5552, 66.6667 },\r
+};\r
+\r
+static const StrokeRec char114[] = {\r
+   { 2, char114_stroke0 },\r
+   { 5, char114_stroke1 },\r
+};\r
+\r
+/* char: 115 's' */\r
+\r
+static const CoordRec char115_stroke0[] = {\r
+    { 57.081, 52.381 },\r
+    { 52.319, 61.9048 },\r
+    { 38.0333, 66.6667 },\r
+    { 23.7476, 66.6667 },\r
+    { 9.4619, 61.9048 },\r
+    { 4.7, 52.381 },\r
+    { 9.4619, 42.8571 },\r
+    { 18.9857, 38.0952 },\r
+    { 42.7952, 33.3333 },\r
+    { 52.319, 28.5714 },\r
+    { 57.081, 19.0476 },\r
+    { 57.081, 14.2857 },\r
+    { 52.319, 4.7619 },\r
+    { 38.0333, 0 },\r
+    { 23.7476, 0 },\r
+    { 9.4619, 4.7619 },\r
+    { 4.7, 14.2857 },\r
+};\r
+\r
+static const StrokeRec char115[] = {\r
+   { 17, char115_stroke0 },\r
+};\r
+\r
+/* char: 116 't' */\r
+\r
+static const CoordRec char116_stroke0[] = {\r
+    { 14.8257, 100 },\r
+    { 14.8257, 19.0476 },\r
+    { 19.5876, 4.7619 },\r
+    { 29.1114, 0 },\r
+    { 38.6352, 0 },\r
+};\r
+\r
+static const CoordRec char116_stroke1[] = {\r
+    { 0.54, 66.6667 },\r
+    { 33.8733, 66.6667 },\r
+};\r
+\r
+static const StrokeRec char116[] = {\r
+   { 5, char116_stroke0 },\r
+   { 2, char116_stroke1 },\r
+};\r
+\r
+/* char: 117 'u' */\r
+\r
+static const CoordRec char117_stroke0[] = {\r
+    { 9.46, 66.6667 },\r
+    { 9.46, 19.0476 },\r
+    { 14.2219, 4.7619 },\r
+    { 23.7457, 0 },\r
+    { 38.0314, 0 },\r
+    { 47.5552, 4.7619 },\r
+    { 61.841, 19.0476 },\r
+};\r
+\r
+static const CoordRec char117_stroke1[] = {\r
+    { 61.841, 66.6667 },\r
+    { 61.841, 0 },\r
+};\r
+\r
+static const StrokeRec char117[] = {\r
+   { 7, char117_stroke0 },\r
+   { 2, char117_stroke1 },\r
+};\r
+\r
+/* char: 118 'v' */\r
+\r
+static const CoordRec char118_stroke0[] = {\r
+    { 1.8, 66.6667 },\r
+    { 30.3714, 0 },\r
+};\r
+\r
+static const CoordRec char118_stroke1[] = {\r
+    { 58.9429, 66.6667 },\r
+    { 30.3714, 0 },\r
+};\r
+\r
+static const StrokeRec char118[] = {\r
+   { 2, char118_stroke0 },\r
+   { 2, char118_stroke1 },\r
+};\r
+\r
+/* char: 119 'w' */\r
+\r
+static const CoordRec char119_stroke0[] = {\r
+    { 2.5, 66.6667 },\r
+    { 21.5476, 0 },\r
+};\r
+\r
+static const CoordRec char119_stroke1[] = {\r
+    { 40.5952, 66.6667 },\r
+    { 21.5476, 0 },\r
+};\r
+\r
+static const CoordRec char119_stroke2[] = {\r
+    { 40.5952, 66.6667 },\r
+    { 59.6429, 0 },\r
+};\r
+\r
+static const CoordRec char119_stroke3[] = {\r
+    { 78.6905, 66.6667 },\r
+    { 59.6429, 0 },\r
+};\r
+\r
+static const StrokeRec char119[] = {\r
+   { 2, char119_stroke0 },\r
+   { 2, char119_stroke1 },\r
+   { 2, char119_stroke2 },\r
+   { 2, char119_stroke3 },\r
+};\r
+\r
+/* char: 120 'x' */\r
+\r
+static const CoordRec char120_stroke0[] = {\r
+    { 1.66, 66.6667 },\r
+    { 54.041, 0 },\r
+};\r
+\r
+static const CoordRec char120_stroke1[] = {\r
+    { 54.041, 66.6667 },\r
+    { 1.66, 0 },\r
+};\r
+\r
+static const StrokeRec char120[] = {\r
+   { 2, char120_stroke0 },\r
+   { 2, char120_stroke1 },\r
+};\r
+\r
+/* char: 121 'y' */\r
+\r
+static const CoordRec char121_stroke0[] = {\r
+    { 6.5619, 66.6667 },\r
+    { 35.1333, 0 },\r
+};\r
+\r
+static const CoordRec char121_stroke1[] = {\r
+    { 63.7048, 66.6667 },\r
+    { 35.1333, 0 },\r
+    { 25.6095, -19.0476 },\r
+    { 16.0857, -28.5714 },\r
+    { 6.5619, -33.3333 },\r
+    { 1.8, -33.3333 },\r
+};\r
+\r
+static const StrokeRec char121[] = {\r
+   { 2, char121_stroke0 },\r
+   { 6, char121_stroke1 },\r
+};\r
+\r
+/* char: 122 'z' */\r
+\r
+static const CoordRec char122_stroke0[] = {\r
+    { 56.821, 66.6667 },\r
+    { 4.44, 0 },\r
+};\r
+\r
+static const CoordRec char122_stroke1[] = {\r
+    { 4.44, 66.6667 },\r
+    { 56.821, 66.6667 },\r
+};\r
+\r
+static const CoordRec char122_stroke2[] = {\r
+    { 4.44, 0 },\r
+    { 56.821, 0 },\r
+};\r
+\r
+static const StrokeRec char122[] = {\r
+   { 2, char122_stroke0 },\r
+   { 2, char122_stroke1 },\r
+   { 2, char122_stroke2 },\r
+};\r
+\r
+/* char: 123 '{' */\r
+\r
+static const CoordRec char123_stroke0[] = {\r
+    { 31.1895, 119.048 },\r
+    { 21.6657, 114.286 },\r
+    { 16.9038, 109.524 },\r
+    { 12.1419, 100 },\r
+    { 12.1419, 90.4762 },\r
+    { 16.9038, 80.9524 },\r
+    { 21.6657, 76.1905 },\r
+    { 26.4276, 66.6667 },\r
+    { 26.4276, 57.1429 },\r
+    { 16.9038, 47.619 },\r
+};\r
+\r
+static const CoordRec char123_stroke1[] = {\r
+    { 21.6657, 114.286 },\r
+    { 16.9038, 104.762 },\r
+    { 16.9038, 95.2381 },\r
+    { 21.6657, 85.7143 },\r
+    { 26.4276, 80.9524 },\r
+    { 31.1895, 71.4286 },\r
+    { 31.1895, 61.9048 },\r
+    { 26.4276, 52.381 },\r
+    { 7.38, 42.8571 },\r
+    { 26.4276, 33.3333 },\r
+    { 31.1895, 23.8095 },\r
+    { 31.1895, 14.2857 },\r
+    { 26.4276, 4.7619 },\r
+    { 21.6657, 0 },\r
+    { 16.9038, -9.5238 },\r
+    { 16.9038, -19.0476 },\r
+    { 21.6657, -28.5714 },\r
+};\r
+\r
+static const CoordRec char123_stroke2[] = {\r
+    { 16.9038, 38.0952 },\r
+    { 26.4276, 28.5714 },\r
+    { 26.4276, 19.0476 },\r
+    { 21.6657, 9.5238 },\r
+    { 16.9038, 4.7619 },\r
+    { 12.1419, -4.7619 },\r
+    { 12.1419, -14.2857 },\r
+    { 16.9038, -23.8095 },\r
+    { 21.6657, -28.5714 },\r
+    { 31.1895, -33.3333 },\r
+};\r
+\r
+static const StrokeRec char123[] = {\r
+   { 10, char123_stroke0 },\r
+   { 17, char123_stroke1 },\r
+   { 10, char123_stroke2 },\r
+};\r
+\r
+/* char: 124 '|' */\r
+\r
+static const CoordRec char124_stroke0[] = {\r
+    { 11.54, 119.048 },\r
+    { 11.54, -33.3333 },\r
+};\r
+\r
+static const StrokeRec char124[] = {\r
+   { 2, char124_stroke0 },\r
+};\r
+\r
+/* char: 125 '}' */\r
+\r
+static const CoordRec char125_stroke0[] = {\r
+    { 9.18, 119.048 },\r
+    { 18.7038, 114.286 },\r
+    { 23.4657, 109.524 },\r
+    { 28.2276, 100 },\r
+    { 28.2276, 90.4762 },\r
+    { 23.4657, 80.9524 },\r
+    { 18.7038, 76.1905 },\r
+    { 13.9419, 66.6667 },\r
+    { 13.9419, 57.1429 },\r
+    { 23.4657, 47.619 },\r
+};\r
+\r
+static const CoordRec char125_stroke1[] = {\r
+    { 18.7038, 114.286 },\r
+    { 23.4657, 104.762 },\r
+    { 23.4657, 95.2381 },\r
+    { 18.7038, 85.7143 },\r
+    { 13.9419, 80.9524 },\r
+    { 9.18, 71.4286 },\r
+    { 9.18, 61.9048 },\r
+    { 13.9419, 52.381 },\r
+    { 32.9895, 42.8571 },\r
+    { 13.9419, 33.3333 },\r
+    { 9.18, 23.8095 },\r
+    { 9.18, 14.2857 },\r
+    { 13.9419, 4.7619 },\r
+    { 18.7038, 0 },\r
+    { 23.4657, -9.5238 },\r
+    { 23.4657, -19.0476 },\r
+    { 18.7038, -28.5714 },\r
+};\r
+\r
+static const CoordRec char125_stroke2[] = {\r
+    { 23.4657, 38.0952 },\r
+    { 13.9419, 28.5714 },\r
+    { 13.9419, 19.0476 },\r
+    { 18.7038, 9.5238 },\r
+    { 23.4657, 4.7619 },\r
+    { 28.2276, -4.7619 },\r
+    { 28.2276, -14.2857 },\r
+    { 23.4657, -23.8095 },\r
+    { 18.7038, -28.5714 },\r
+    { 9.18, -33.3333 },\r
+};\r
+\r
+static const StrokeRec char125[] = {\r
+   { 10, char125_stroke0 },\r
+   { 17, char125_stroke1 },\r
+   { 10, char125_stroke2 },\r
+};\r
+\r
+/* char: 126 '~' */\r
+\r
+static const CoordRec char126_stroke0[] = {\r
+    { 2.92, 28.5714 },\r
+    { 2.92, 38.0952 },\r
+    { 7.6819, 52.381 },\r
+    { 17.2057, 57.1429 },\r
+    { 26.7295, 57.1429 },\r
+    { 36.2533, 52.381 },\r
+    { 55.301, 38.0952 },\r
+    { 64.8248, 33.3333 },\r
+    { 74.3486, 33.3333 },\r
+    { 83.8724, 38.0952 },\r
+    { 88.6343, 47.619 },\r
+};\r
+\r
+static const CoordRec char126_stroke1[] = {\r
+    { 2.92, 38.0952 },\r
+    { 7.6819, 47.619 },\r
+    { 17.2057, 52.381 },\r
+    { 26.7295, 52.381 },\r
+    { 36.2533, 47.619 },\r
+    { 55.301, 33.3333 },\r
+    { 64.8248, 28.5714 },\r
+    { 74.3486, 28.5714 },\r
+    { 83.8724, 33.3333 },\r
+    { 88.6343, 47.619 },\r
+    { 88.6343, 57.1429 },\r
+};\r
+\r
+static const StrokeRec char126[] = {\r
+   { 11, char126_stroke0 },\r
+   { 11, char126_stroke1 },\r
+};\r
+\r
+/* char: 127 */\r
+\r
+static const CoordRec char127_stroke0[] = {\r
+    { 52.381, 100 },\r
+    { 14.2857, -33.3333 },\r
+};\r
+\r
+static const CoordRec char127_stroke1[] = {\r
+    { 28.5714, 66.6667 },\r
+    { 14.2857, 61.9048 },\r
+    { 4.7619, 52.381 },\r
+    { 0, 38.0952 },\r
+    { 0, 23.8095 },\r
+    { 4.7619, 14.2857 },\r
+    { 14.2857, 4.7619 },\r
+    { 28.5714, 0 },\r
+    { 38.0952, 0 },\r
+    { 52.381, 4.7619 },\r
+    { 61.9048, 14.2857 },\r
+    { 66.6667, 28.5714 },\r
+    { 66.6667, 42.8571 },\r
+    { 61.9048, 52.381 },\r
+    { 52.381, 61.9048 },\r
+    { 38.0952, 66.6667 },\r
+    { 28.5714, 66.6667 },\r
+};\r
+\r
+static const StrokeRec char127[] = {\r
+   { 2, char127_stroke0 },\r
+   { 17, char127_stroke1 },\r
+};\r
+\r
+static const StrokeCharRec chars[] = {\r
+    { 0, /* char0 */ 0, 0, 0 },\r
+    { 0, /* char1 */ 0, 0, 0 },\r
+    { 0, /* char2 */ 0, 0, 0 },\r
+    { 0, /* char3 */ 0, 0, 0 },\r
+    { 0, /* char4 */ 0, 0, 0 },\r
+    { 0, /* char5 */ 0, 0, 0 },\r
+    { 0, /* char6 */ 0, 0, 0 },\r
+    { 0, /* char7 */ 0, 0, 0 },\r
+    { 0, /* char8 */ 0, 0, 0 },\r
+    { 0, /* char9 */ 0, 0, 0 },\r
+    { 0, /* char10 */ 0, 0, 0 },\r
+    { 0, /* char11 */ 0, 0, 0 },\r
+    { 0, /* char12 */ 0, 0, 0 },\r
+    { 0, /* char13 */ 0, 0, 0 },\r
+    { 0, /* char14 */ 0, 0, 0 },\r
+    { 0, /* char15 */ 0, 0, 0 },\r
+    { 0, /* char16 */ 0, 0, 0 },\r
+    { 0, /* char17 */ 0, 0, 0 },\r
+    { 0, /* char18 */ 0, 0, 0 },\r
+    { 0, /* char19 */ 0, 0, 0 },\r
+    { 0, /* char20 */ 0, 0, 0 },\r
+    { 0, /* char21 */ 0, 0, 0 },\r
+    { 0, /* char22 */ 0, 0, 0 },\r
+    { 0, /* char23 */ 0, 0, 0 },\r
+    { 0, /* char24 */ 0, 0, 0 },\r
+    { 0, /* char25 */ 0, 0, 0 },\r
+    { 0, /* char26 */ 0, 0, 0 },\r
+    { 0, /* char27 */ 0, 0, 0 },\r
+    { 0, /* char28 */ 0, 0, 0 },\r
+    { 0, /* char29 */ 0, 0, 0 },\r
+    { 0, /* char30 */ 0, 0, 0 },\r
+    { 0, /* char31 */ 0, 0, 0 },\r
+    { 0, /* char32 */ 0, 52.381, 104.762 },\r
+    { 2, char33, 13.3819, 26.6238 },\r
+    { 2, char34, 23.0676, 51.4352 },\r
+    { 4, char35, 36.5333, 79.4886 },\r
+    { 3, char36, 38.1533, 76.2067 },\r
+    { 3, char37, 49.2171, 96.5743 },\r
+    { 1, char38, 53.599, 101.758 },\r
+    { 1, char39, 4.44, 13.62 },\r
+    { 1, char40, 21.8657, 47.1733 },\r
+    { 1, char41, 24.3276, 47.5333 },\r
+    { 3, char42, 30.7695, 59.439 },\r
+    { 2, char43, 48.8371, 97.2543 },\r
+    { 1, char44, 13.5219, 26.0638 },\r
+    { 1, char45, 50.2371, 100.754 },\r
+    { 1, char46, 13.1019, 26.4838 },\r
+    { 1, char47, 40.5733, 82.1067 },\r
+    { 1, char48, 38.3133, 77.0667 },\r
+    { 1, char49, 30.8676, 66.5295 },\r
+    { 1, char50, 38.7533, 77.6467 },\r
+    { 1, char51, 38.3333, 77.0467 },\r
+    { 2, char52, 37.2133, 80.1686 },\r
+    { 1, char53, 38.1933, 77.6867 },\r
+    { 1, char54, 34.1514, 73.8048 },\r
+    { 2, char55, 38.8933, 77.2267 },\r
+    { 1, char56, 38.9333, 77.6667 },\r
+    { 1, char57, 39.9333, 74.0648 },\r
+    { 2, char58, 14.0819, 26.2238 },\r
+    { 2, char59, 12.9619, 26.3038 },\r
+    { 1, char60, 41.1552, 81.6105 },\r
+    { 2, char61, 48.5571, 97.2543 },\r
+    { 1, char62, 40.8752, 81.6105 },\r
+    { 2, char63, 36.9914, 73.9029 },\r
+    { 2, char64, 34.9314, 74.3648 },\r
+    { 3, char65, 40.5952, 80.4905 },\r
+    { 3, char66, 44.7533, 83.6267 },\r
+    { 1, char67, 39.9933, 84.4886 },\r
+    { 2, char68, 45.2933, 85.2867 },\r
+    { 4, char69, 39.9914, 78.1848 },\r
+    { 3, char70, 39.9914, 78.7448 },\r
+    { 2, char71, 40.3933, 89.7686 },\r
+    { 3, char72, 44.7533, 89.0867 },\r
+    { 1, char73, 10.86, 21.3 },\r
+    { 1, char74, 31.0714, 59.999 },\r
+    { 3, char75, 44.6133, 79.3267 },\r
+    { 2, char76, 40.2514, 71.3229 },\r
+    { 4, char77, 48.9552, 97.2105 },\r
+    { 3, char78, 44.4733, 88.8067 },\r
+    { 1, char79, 44.3352, 88.8305 },\r
+    { 2, char80, 45.4333, 85.6667 },\r
+    { 2, char81, 43.3952, 88.0905 },\r
+    { 3, char82, 45.0133, 82.3667 },\r
+    { 1, char83, 41.3333, 80.8267 },\r
+    { 2, char84, 35.6933, 71.9467 },\r
+    { 1, char85, 44.8733, 89.4867 },\r
+    { 2, char86, 40.4552, 81.6105 },\r
+    { 4, char87, 49.839, 100.518 },\r
+    { 2, char88, 35.8333, 72.3667 },\r
+    { 2, char89, 39.6152, 79.6505 },\r
+    { 3, char90, 35.8333, 73.7467 },\r
+    { 4, char91, 22.0657, 46.1133 },\r
+    { 1, char92, 39.1733, 78.2067 },\r
+    { 4, char93, 23.4876, 46.3933 },\r
+    { 2, char94, 44.0752, 90.2305 },\r
+    { 1, char95, 51.281, 104.062 },\r
+    { 2, char96, 42.5457, 83.5714 },\r
+    { 2, char97, 35.2514, 66.6029 },\r
+    { 2, char98, 37.3314, 70.4629 },\r
+    { 1, char99, 34.0914, 68.9229 },\r
+    { 2, char100, 33.2114, 70.2629 },\r
+    { 1, char101, 34.2914, 68.5229 },\r
+    { 2, char102, 14.9657, 38.6552 },\r
+    { 2, char103, 33.9314, 70.9829 },\r
+    { 2, char104, 33.4095, 71.021 },\r
+    { 2, char105, 14.7819, 28.8638 },\r
+    { 2, char106, 17.3876, 36.2314 },\r
+    { 3, char107, 33.4095, 62.521 },\r
+    { 1, char108, 10.02, 19.34 },\r
+    { 3, char109, 61.981, 123.962 },\r
+    { 2, char110, 32.9895, 70.881 },\r
+    { 1, char111, 33.5514, 71.7448 },\r
+    { 2, char112, 38.0314, 70.8029 },\r
+    { 2, char113, 33.4114, 70.7429 },\r
+    { 2, char114, 23.7457, 49.4952 },\r
+    { 1, char115, 28.5095, 62.321 },\r
+    { 2, char116, 14.8257, 39.3152 },\r
+    { 2, char117, 33.2695, 71.161 },\r
+    { 2, char118, 30.3714, 60.6029 },\r
+    { 4, char119, 40.5952, 80.4905 },\r
+    { 2, char120, 25.4695, 56.401 },\r
+    { 2, char121, 35.1333, 66.0648 },\r
+    { 3, char122, 28.2495, 61.821 },\r
+    { 3, char123, 21.6657, 41.6295 },\r
+    { 1, char124, 11.54, 23.78 },\r
+    { 3, char125, 18.7038, 41.4695 },\r
+    { 2, char126, 45.7771, 91.2743 },\r
+    { 2, char127, 33.3333, 66.6667 },\r
+};\r
+\r
+StrokeFontRec glutStrokeRoman = { "Roman", 128, chars, 119.048, -33.3333 };\r
+\r
diff --git a/src/glut/os2/glut_shapes.cpp b/src/glut/os2/glut_shapes.cpp
new file mode 100644 (file)
index 0000000..76b0809
--- /dev/null
@@ -0,0 +1,595 @@
+\r
+/* Copyright (c) Mark J. Kilgard, 1994, 1997. */\r
+\r
+/**\r
+(c) Copyright 1993, Silicon Graphics, Inc.\r
+\r
+ALL RIGHTS RESERVED\r
+\r
+Permission to use, copy, modify, and distribute this software\r
+for any purpose and without fee is hereby granted, provided\r
+that the above copyright notice appear in all copies and that\r
+both the copyright notice and this permission notice appear in\r
+supporting documentation, and that the name of Silicon\r
+Graphics, Inc. not be used in advertising or publicity\r
+pertaining to distribution of the software without specific,\r
+written prior permission.\r
+\r
+THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU\r
+"AS-IS" AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR\r
+OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF\r
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  IN NO\r
+EVENT SHALL SILICON GRAPHICS, INC.  BE LIABLE TO YOU OR ANYONE\r
+ELSE FOR ANY DIRECT, SPECIAL, INCIDENTAL, INDIRECT OR\r
+CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER,\r
+INCLUDING WITHOUT LIMITATION, LOSS OF PROFIT, LOSS OF USE,\r
+SAVINGS OR REVENUE, OR THE CLAIMS OF THIRD PARTIES, WHETHER OR\r
+NOT SILICON GRAPHICS, INC.  HAS BEEN ADVISED OF THE POSSIBILITY\r
+OF SUCH LOSS, HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r
+ARISING OUT OF OR IN CONNECTION WITH THE POSSESSION, USE OR\r
+PERFORMANCE OF THIS SOFTWARE.\r
+\r
+US Government Users Restricted Rights\r
+\r
+Use, duplication, or disclosure by the Government is subject to\r
+restrictions set forth in FAR 52.227.19(c)(2) or subparagraph\r
+(c)(1)(ii) of the Rights in Technical Data and Computer\r
+Software clause at DFARS 252.227-7013 and/or in similar or\r
+successor clauses in the FAR or the DOD or NASA FAR\r
+Supplement.  Unpublished-- rights reserved under the copyright\r
+laws of the United States.  Contractor/manufacturer is Silicon\r
+Graphics, Inc., 2011 N.  Shoreline Blvd., Mountain View, CA\r
+94039-7311.\r
+\r
+OpenGL(TM) is a trademark of Silicon Graphics, Inc.\r
+*/\r
+\r
+#include <math.h>\r
+#include "glutint.h"\r
+\r
+/* Some <math.h> files do not define M_PI... */\r
+#ifndef M_PI\r
+#define M_PI 3.14159265358979323846\r
+#endif\r
+\r
+static GLUquadricObj *quadObj;\r
+\r
+#define QUAD_OBJ_INIT() { if(!quadObj) initQuadObj(); }\r
+\r
+static void\r
+initQuadObj(void)\r
+{\r
+  quadObj = gluNewQuadric();\r
+  if (!quadObj)\r
+    __glutFatalError("out of memory.");\r
+}\r
+\r
+/* CENTRY */\r
+void GLUTAPIENTRY\r
+glutWireSphere(GLdouble radius, GLint slices, GLint stacks)\r
+{\r
+  QUAD_OBJ_INIT();\r
+  gluQuadricDrawStyle(quadObj, GLU_LINE);\r
+  gluQuadricNormals(quadObj, GLU_SMOOTH);\r
+  /* If we ever changed/used the texture or orientation state\r
+     of quadObj, we'd need to change it to the defaults here\r
+     with gluQuadricTexture and/or gluQuadricOrientation. */\r
+  gluSphere(quadObj, radius, slices, stacks);\r
+}\r
+\r
+void GLUTAPIENTRY\r
+glutSolidSphere(GLdouble radius, GLint slices, GLint stacks)\r
+{\r
+  QUAD_OBJ_INIT();\r
+  gluQuadricDrawStyle(quadObj, GLU_FILL);\r
+  gluQuadricNormals(quadObj, GLU_SMOOTH);\r
+  /* If we ever changed/used the texture or orientation state\r
+     of quadObj, we'd need to change it to the defaults here\r
+     with gluQuadricTexture and/or gluQuadricOrientation. */\r
+  gluSphere(quadObj, radius, slices, stacks);\r
+}\r
+\r
+void GLUTAPIENTRY\r
+glutWireCone(GLdouble base, GLdouble height,\r
+  GLint slices, GLint stacks)\r
+{\r
+  QUAD_OBJ_INIT();\r
+  gluQuadricDrawStyle(quadObj, GLU_LINE);\r
+  gluQuadricNormals(quadObj, GLU_SMOOTH);\r
+  /* If we ever changed/used the texture or orientation state\r
+     of quadObj, we'd need to change it to the defaults here\r
+     with gluQuadricTexture and/or gluQuadricOrientation. */\r
+  gluCylinder(quadObj, base, 0.0, height, slices, stacks);\r
+}\r
+\r
+void GLUTAPIENTRY\r
+glutSolidCone(GLdouble base, GLdouble height,\r
+  GLint slices, GLint stacks)\r
+{\r
+  QUAD_OBJ_INIT();\r
+  gluQuadricDrawStyle(quadObj, GLU_FILL);\r
+  gluQuadricNormals(quadObj, GLU_SMOOTH);\r
+  /* If we ever changed/used the texture or orientation state\r
+     of quadObj, we'd need to change it to the defaults here\r
+     with gluQuadricTexture and/or gluQuadricOrientation. */\r
+  gluCylinder(quadObj, base, 0.0, height, slices, stacks);\r
+}\r
+\r
+/* ENDCENTRY */\r
+\r
+static void\r
+drawBox(GLfloat size, GLenum type)\r
+{\r
+  static GLfloat n[6][3] =\r
+  {\r
+    {-1.0, 0.0, 0.0},\r
+    {0.0, 1.0, 0.0},\r
+    {1.0, 0.0, 0.0},\r
+    {0.0, -1.0, 0.0},\r
+    {0.0, 0.0, 1.0},\r
+    {0.0, 0.0, -1.0}\r
+  };\r
+  static GLint faces[6][4] =\r
+  {\r
+    {0, 1, 2, 3},\r
+    {3, 2, 6, 7},\r
+    {7, 6, 5, 4},\r
+    {4, 5, 1, 0},\r
+    {5, 6, 2, 1},\r
+    {7, 4, 0, 3}\r
+  };\r
+  GLfloat v[8][3];\r
+  GLint i;\r
+\r
+  v[0][0] = v[1][0] = v[2][0] = v[3][0] = -size / 2;\r
+  v[4][0] = v[5][0] = v[6][0] = v[7][0] = size / 2;\r
+  v[0][1] = v[1][1] = v[4][1] = v[5][1] = -size / 2;\r
+  v[2][1] = v[3][1] = v[6][1] = v[7][1] = size / 2;\r
+  v[0][2] = v[3][2] = v[4][2] = v[7][2] = -size / 2;\r
+  v[1][2] = v[2][2] = v[5][2] = v[6][2] = size / 2;\r
+\r
+  for (i = 5; i >= 0; i--) {\r
+    glBegin(type);\r
+    glNormal3fv(&n[i][0]);\r
+    glVertex3fv(&v[faces[i][0]][0]);\r
+    glVertex3fv(&v[faces[i][1]][0]);\r
+    glVertex3fv(&v[faces[i][2]][0]);\r
+    glVertex3fv(&v[faces[i][3]][0]);\r
+    glEnd();\r
+  }\r
+}\r
+\r
+/* CENTRY */\r
+void GLUTAPIENTRY\r
+glutWireCube(GLdouble size)\r
+{\r
+  drawBox(size, GL_LINE_LOOP);\r
+}\r
+\r
+void GLUTAPIENTRY\r
+glutSolidCube(GLdouble size)\r
+{\r
+  drawBox(size, GL_QUADS);\r
+}\r
+\r
+/* ENDCENTRY */\r
+\r
+static void\r
+doughnut(GLfloat r, GLfloat R, GLint nsides, GLint rings)\r
+{\r
+  int i, j;\r
+  GLfloat theta, phi, theta1;\r
+  GLfloat cosTheta, sinTheta;\r
+  GLfloat cosTheta1, sinTheta1;\r
+  GLfloat ringDelta, sideDelta;\r
+\r
+  ringDelta = 2.0 * M_PI / rings;\r
+  sideDelta = 2.0 * M_PI / nsides;\r
+\r
+  theta = 0.0;\r
+  cosTheta = 1.0;\r
+  sinTheta = 0.0;\r
+  for (i = rings - 1; i >= 0; i--) {\r
+    theta1 = theta + ringDelta;\r
+    cosTheta1 = cos(theta1);\r
+    sinTheta1 = sin(theta1);\r
+    glBegin(GL_QUAD_STRIP);\r
+    phi = 0.0;\r
+    for (j = nsides; j >= 0; j--) {\r
+      GLfloat cosPhi, sinPhi, dist;\r
+\r
+      phi += sideDelta;\r
+      cosPhi = cos(phi);\r
+      sinPhi = sin(phi);\r
+      dist = R + r * cosPhi;\r
+\r
+      glNormal3f(cosTheta1 * cosPhi, -sinTheta1 * cosPhi, sinPhi);\r
+      glVertex3f(cosTheta1 * dist, -sinTheta1 * dist, r * sinPhi);\r
+      glNormal3f(cosTheta * cosPhi, -sinTheta * cosPhi, sinPhi);\r
+      glVertex3f(cosTheta * dist, -sinTheta * dist,  r * sinPhi);\r
+    }\r
+    glEnd();\r
+    theta = theta1;\r
+    cosTheta = cosTheta1;\r
+    sinTheta = sinTheta1;\r
+  }\r
+}\r
+\r
+/* CENTRY */\r
+void GLUTAPIENTRY\r
+glutWireTorus(GLdouble innerRadius, GLdouble outerRadius,\r
+  GLint nsides, GLint rings)\r
+{\r
+  glPushAttrib(GL_POLYGON_BIT);\r
+  glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);\r
+  doughnut(innerRadius, outerRadius, nsides, rings);\r
+  glPopAttrib();\r
+}\r
+\r
+void GLUTAPIENTRY\r
+glutSolidTorus(GLdouble innerRadius, GLdouble outerRadius,\r
+  GLint nsides, GLint rings)\r
+{\r
+  doughnut(innerRadius, outerRadius, nsides, rings);\r
+}\r
+\r
+/* ENDCENTRY */\r
+\r
+static GLfloat dodec[20][3];\r
+\r
+static void\r
+initDodecahedron(void)\r
+{\r
+  GLfloat alpha, beta;\r
+\r
+  alpha = sqrt(2.0 / (3.0 + sqrt(5.0)));\r
+  beta = 1.0 + sqrt(6.0 / (3.0 + sqrt(5.0)) -\r
+    2.0 + 2.0 * sqrt(2.0 / (3.0 + sqrt(5.0))));\r
+  /* *INDENT-OFF* */\r
+  dodec[0][0] = -alpha; dodec[0][1] = 0; dodec[0][2] = beta;\r
+  dodec[1][0] = alpha; dodec[1][1] = 0; dodec[1][2] = beta;\r
+  dodec[2][0] = -1; dodec[2][1] = -1; dodec[2][2] = -1;\r
+  dodec[3][0] = -1; dodec[3][1] = -1; dodec[3][2] = 1;\r
+  dodec[4][0] = -1; dodec[4][1] = 1; dodec[4][2] = -1;\r
+  dodec[5][0] = -1; dodec[5][1] = 1; dodec[5][2] = 1;\r
+  dodec[6][0] = 1; dodec[6][1] = -1; dodec[6][2] = -1;\r
+  dodec[7][0] = 1; dodec[7][1] = -1; dodec[7][2] = 1;\r
+  dodec[8][0] = 1; dodec[8][1] = 1; dodec[8][2] = -1;\r
+  dodec[9][0] = 1; dodec[9][1] = 1; dodec[9][2] = 1;\r
+  dodec[10][0] = beta; dodec[10][1] = alpha; dodec[10][2] = 0;\r
+  dodec[11][0] = beta; dodec[11][1] = -alpha; dodec[11][2] = 0;\r
+  dodec[12][0] = -beta; dodec[12][1] = alpha; dodec[12][2] = 0;\r
+  dodec[13][0] = -beta; dodec[13][1] = -alpha; dodec[13][2] = 0;\r
+  dodec[14][0] = -alpha; dodec[14][1] = 0; dodec[14][2] = -beta;\r
+  dodec[15][0] = alpha; dodec[15][1] = 0; dodec[15][2] = -beta;\r
+  dodec[16][0] = 0; dodec[16][1] = beta; dodec[16][2] = alpha;\r
+  dodec[17][0] = 0; dodec[17][1] = beta; dodec[17][2] = -alpha;\r
+  dodec[18][0] = 0; dodec[18][1] = -beta; dodec[18][2] = alpha;\r
+  dodec[19][0] = 0; dodec[19][1] = -beta; dodec[19][2] = -alpha;\r
+  /* *INDENT-ON* */\r
+\r
+}\r
+\r
+#define DIFF3(_a,_b,_c) { \\r
+    (_c)[0] = (_a)[0] - (_b)[0]; \\r
+    (_c)[1] = (_a)[1] - (_b)[1]; \\r
+    (_c)[2] = (_a)[2] - (_b)[2]; \\r
+}\r
+\r
+static void\r
+crossprod(GLfloat v1[3], GLfloat v2[3], GLfloat prod[3])\r
+{\r
+  GLfloat p[3];         /* in case prod == v1 or v2 */\r
+\r
+  p[0] = v1[1] * v2[2] - v2[1] * v1[2];\r
+  p[1] = v1[2] * v2[0] - v2[2] * v1[0];\r
+  p[2] = v1[0] * v2[1] - v2[0] * v1[1];\r
+  prod[0] = p[0];\r
+  prod[1] = p[1];\r
+  prod[2] = p[2];\r
+}\r
+\r
+static void\r
+normalize(GLfloat v[3])\r
+{\r
+  GLfloat d;\r
+\r
+  d = sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]);\r
+  if (d == 0.0) {\r
+    __glutWarning("normalize: zero length vector");\r
+    v[0] = d = 1.0;\r
+  }\r
+  d = 1 / d;\r
+  v[0] *= d;\r
+  v[1] *= d;\r
+  v[2] *= d;\r
+}\r
+\r
+static void\r
+pentagon(int a, int b, int c, int d, int e, GLenum shadeType)\r
+{\r
+  GLfloat n0[3], d1[3], d2[3];\r
+\r
+  DIFF3(dodec[a], dodec[b], d1);\r
+  DIFF3(dodec[b], dodec[c], d2);\r
+  crossprod(d1, d2, n0);\r
+  normalize(n0);\r
+\r
+  glBegin(shadeType);\r
+  glNormal3fv(n0);\r
+  glVertex3fv(&dodec[a][0]);\r
+  glVertex3fv(&dodec[b][0]);\r
+  glVertex3fv(&dodec[c][0]);\r
+  glVertex3fv(&dodec[d][0]);\r
+  glVertex3fv(&dodec[e][0]);\r
+  glEnd();\r
+}\r
+\r
+static void\r
+dodecahedron(GLenum type)\r
+{\r
+  static int inited = 0;\r
+\r
+  if (inited == 0) {\r
+    inited = 1;\r
+    initDodecahedron();\r
+  }\r
+  pentagon(0, 1, 9, 16, 5, type);\r
+  pentagon(1, 0, 3, 18, 7, type);\r
+  pentagon(1, 7, 11, 10, 9, type);\r
+  pentagon(11, 7, 18, 19, 6, type);\r
+  pentagon(8, 17, 16, 9, 10, type);\r
+  pentagon(2, 14, 15, 6, 19, type);\r
+  pentagon(2, 13, 12, 4, 14, type);\r
+  pentagon(2, 19, 18, 3, 13, type);\r
+  pentagon(3, 0, 5, 12, 13, type);\r
+  pentagon(6, 15, 8, 10, 11, type);\r
+  pentagon(4, 17, 8, 15, 14, type);\r
+  pentagon(4, 12, 5, 16, 17, type);\r
+}\r
+\r
+/* CENTRY */\r
+void GLUTAPIENTRY glutWireDodecahedron(void)\r
+{\r
+  dodecahedron(GL_LINE_LOOP);\r
+}\r
+\r
+void GLUTAPIENTRY\r
+glutSolidDodecahedron(void)\r
+{\r
+  dodecahedron(GL_TRIANGLE_FAN);\r
+}\r
+\r
+/* ENDCENTRY */\r
+\r
+static void\r
+recorditem(GLfloat * n1, GLfloat * n2, GLfloat * n3,\r
+  GLenum shadeType)\r
+{\r
+  GLfloat q0[3], q1[3];\r
+\r
+  DIFF3(n1, n2, q0);\r
+  DIFF3(n2, n3, q1);\r
+  crossprod(q0, q1, q1);\r
+  normalize(q1);\r
+\r
+  glBegin(shadeType);\r
+  glNormal3fv(q1);\r
+  glVertex3fv(n1);\r
+  glVertex3fv(n2);\r
+  glVertex3fv(n3);\r
+  glEnd();\r
+}\r
+\r
+static void\r
+subdivide(GLfloat * v0, GLfloat * v1, GLfloat * v2,\r
+  GLenum shadeType)\r
+{\r
+  int depth;\r
+  GLfloat w0[3], w1[3], w2[3];\r
+  GLfloat l;\r
+  int i, j, k, n;\r
+\r
+  depth = 1;\r
+  for (i = 0; i < depth; i++) {\r
+    for (j = 0; i + j < depth; j++) {\r
+      k = depth - i - j;\r
+      for (n = 0; n < 3; n++) {\r
+        w0[n] = (i * v0[n] + j * v1[n] + k * v2[n]) / depth;\r
+        w1[n] = ((i + 1) * v0[n] + j * v1[n] + (k - 1) * v2[n])\r
+          / depth;\r
+        w2[n] = (i * v0[n] + (j + 1) * v1[n] + (k - 1) * v2[n])\r
+          / depth;\r
+      }\r
+      l = sqrt(w0[0] * w0[0] + w0[1] * w0[1] + w0[2] * w0[2]);\r
+      w0[0] /= l;\r
+      w0[1] /= l;\r
+      w0[2] /= l;\r
+      l = sqrt(w1[0] * w1[0] + w1[1] * w1[1] + w1[2] * w1[2]);\r
+      w1[0] /= l;\r
+      w1[1] /= l;\r
+      w1[2] /= l;\r
+      l = sqrt(w2[0] * w2[0] + w2[1] * w2[1] + w2[2] * w2[2]);\r
+      w2[0] /= l;\r
+      w2[1] /= l;\r
+      w2[2] /= l;\r
+      recorditem(w1, w0, w2, shadeType);\r
+    }\r
+  }\r
+}\r
+\r
+static void\r
+drawtriangle(int i, GLfloat data[][3], int ndx[][3],\r
+  GLenum shadeType)\r
+{\r
+  GLfloat *x0, *x1, *x2;\r
+\r
+  x0 = data[ndx[i][0]];\r
+  x1 = data[ndx[i][1]];\r
+  x2 = data[ndx[i][2]];\r
+  subdivide(x0, x1, x2, shadeType);\r
+}\r
+\r
+/* octahedron data: The octahedron produced is centered at the\r
+   origin and has radius 1.0 */\r
+static GLfloat odata[6][3] =\r
+{\r
+  {1.0, 0.0, 0.0},\r
+  {-1.0, 0.0, 0.0},\r
+  {0.0, 1.0, 0.0},\r
+  {0.0, -1.0, 0.0},\r
+  {0.0, 0.0, 1.0},\r
+  {0.0, 0.0, -1.0}\r
+};\r
+\r
+static int ondex[8][3] =\r
+{\r
+  {0, 4, 2},\r
+  {1, 2, 4},\r
+  {0, 3, 4},\r
+  {1, 4, 3},\r
+  {0, 2, 5},\r
+  {1, 5, 2},\r
+  {0, 5, 3},\r
+  {1, 3, 5}\r
+};\r
+\r
+static void\r
+octahedron(GLenum shadeType)\r
+{\r
+  int i;\r
+\r
+  for (i = 7; i >= 0; i--) {\r
+    drawtriangle(i, odata, ondex, shadeType);\r
+  }\r
+}\r
+\r
+/* CENTRY */\r
+void GLUTAPIENTRY\r
+glutWireOctahedron(void)\r
+{\r
+  octahedron(GL_LINE_LOOP);\r
+}\r
+\r
+void GLUTAPIENTRY\r
+glutSolidOctahedron(void)\r
+{\r
+  octahedron(GL_TRIANGLES);\r
+}\r
+\r
+/* ENDCENTRY */\r
+\r
+/* icosahedron data: These numbers are rigged to make an\r
+   icosahedron of radius 1.0 */\r
+\r
+#define X .525731112119133606\r
+#define Z .850650808352039932\r
+\r
+static GLfloat idata[12][3] =\r
+{\r
+  {-X, 0, Z},\r
+  {X, 0, Z},\r
+  {-X, 0, -Z},\r
+  {X, 0, -Z},\r
+  {0, Z, X},\r
+  {0, Z, -X},\r
+  {0, -Z, X},\r
+  {0, -Z, -X},\r
+  {Z, X, 0},\r
+  {-Z, X, 0},\r
+  {Z, -X, 0},\r
+  {-Z, -X, 0}\r
+};\r
+\r
+static int index[20][3] =\r
+{\r
+  {0, 4, 1},\r
+  {0, 9, 4},\r
+  {9, 5, 4},\r
+  {4, 5, 8},\r
+  {4, 8, 1},\r
+  {8, 10, 1},\r
+  {8, 3, 10},\r
+  {5, 3, 8},\r
+  {5, 2, 3},\r
+  {2, 7, 3},\r
+  {7, 10, 3},\r
+  {7, 6, 10},\r
+  {7, 11, 6},\r
+  {11, 0, 6},\r
+  {0, 1, 6},\r
+  {6, 1, 10},\r
+  {9, 0, 11},\r
+  {9, 11, 2},\r
+  {9, 2, 5},\r
+  {7, 2, 11},\r
+};\r
+\r
+static void\r
+icosahedron(GLenum shadeType)\r
+{\r
+  int i;\r
+\r
+  for (i = 19; i >= 0; i--) {\r
+    drawtriangle(i, idata, index, shadeType);\r
+  }\r
+}\r
+\r
+/* CENTRY */\r
+void GLUTAPIENTRY\r
+glutWireIcosahedron(void)\r
+{\r
+  icosahedron(GL_LINE_LOOP);\r
+}\r
+\r
+void GLUTAPIENTRY\r
+glutSolidIcosahedron(void)\r
+{\r
+  icosahedron(GL_TRIANGLES);\r
+}\r
+\r
+/* ENDCENTRY */\r
+\r
+/* tetrahedron data: */\r
+\r
+#define T       1.73205080756887729\r
+\r
+static GLfloat tdata[4][3] =\r
+{\r
+  {T, T, T},\r
+  {T, -T, -T},\r
+  {-T, T, -T},\r
+  {-T, -T, T}\r
+};\r
+\r
+static int tndex[4][3] =\r
+{\r
+  {0, 1, 3},\r
+  {2, 1, 0},\r
+  {3, 2, 0},\r
+  {1, 2, 3}\r
+};\r
+\r
+static void\r
+tetrahedron(GLenum shadeType)\r
+{\r
+  int i;\r
+\r
+  for (i = 3; i >= 0; i--)\r
+    drawtriangle(i, tdata, tndex, shadeType);\r
+}\r
+\r
+/* CENTRY */\r
+void GLUTAPIENTRY\r
+glutWireTetrahedron(void)\r
+{\r
+  tetrahedron(GL_LINE_LOOP);\r
+}\r
+\r
+void GLUTAPIENTRY\r
+glutSolidTetrahedron(void)\r
+{\r
+  tetrahedron(GL_TRIANGLES);\r
+}\r
+\r
+/* ENDCENTRY */\r
diff --git a/src/glut/os2/glut_stroke.cpp b/src/glut/os2/glut_stroke.cpp
new file mode 100644 (file)
index 0000000..4823283
--- /dev/null
@@ -0,0 +1,42 @@
+\r
+/* Copyright (c) Mark J. Kilgard, 1994. */\r
+\r
+/* This program is freely distributable without licensing fees\r
+   and is provided without guarantee or warrantee expressed or\r
+   implied. This program is -not- in the public domain. */\r
+\r
+#include "glutint.h"\r
+#include "glutstroke.h"\r
+\r
+void GLUTAPIENTRY\r
+glutStrokeCharacter(GLUTstrokeFont font, int c)\r
+{\r
+  const StrokeCharRec *ch;\r
+  const StrokeRec *stroke;\r
+  const CoordRec *coord;\r
+  StrokeFontPtr fontinfo;\r
+  int i, j;\r
+\r
+\r
+#if defined(_WIN32)\r
+  fontinfo = (StrokeFontPtr) __glutFont(font);\r
+#else\r
+  fontinfo = (StrokeFontPtr) font;\r
+#endif\r
+\r
+  if (c < 0 || c >= fontinfo->num_chars)\r
+    return;\r
+  ch = &(fontinfo->ch[c]);\r
+  if (ch) {\r
+    for (i = ch->num_strokes, stroke = ch->stroke;\r
+      i > 0; i--, stroke++) {\r
+      glBegin(GL_LINE_STRIP);\r
+      for (j = stroke->num_coords, coord = stroke->coord;\r
+        j > 0; j--, coord++) {\r
+        glVertex2f(coord->x, coord->y);\r
+      }\r
+      glEnd();\r
+    }\r
+    glTranslatef(ch->right, 0.0, 0.0);\r
+  }\r
+}\r
diff --git a/src/glut/os2/glut_swap.cpp b/src/glut/os2/glut_swap.cpp
new file mode 100644 (file)
index 0000000..210a7fc
--- /dev/null
@@ -0,0 +1,67 @@
+\r
+/* Copyright (c) Mark J. Kilgard, 1994, 1997.  */\r
+\r
+/* This program is freely distributable without licensing fees\r
+   and is provided without guarantee or warrantee expressed or\r
+   implied. This program is -not- in the public domain. */\r
+\r
+#include <stdio.h>\r
+#include "glutint.h"\r
+\r
+GLint __glutFPS = 0;\r
+GLint __glutSwapCount = 0;\r
+GLint __glutSwapTime = 0;\r
+\r
+/* CENTRY */\r
+void GLUTAPIENTRY\r
+glutSwapBuffers(void)\r
+{\r
+  GLUTwindow *window = __glutCurrentWindow;\r
+\r
+  if (window->renderWin == window->win) {\r
+    if (__glutCurrentWindow->treatAsSingle) {\r
+      /* Pretend the double buffered window is single buffered,\r
+         so treat glutSwapBuffers as a no-op. */\r
+      return;\r
+    }\r
+  } else {\r
+    if (__glutCurrentWindow->overlay->treatAsSingle) {\r
+      /* Pretend the double buffered overlay is single\r
+         buffered, so treat glutSwapBuffers as a no-op. */\r
+      return;\r
+    }\r
+  }\r
+\r
+  /* For the MESA_SWAP_HACK. */\r
+  window->usedSwapBuffers = 1;\r
+\r
+  SWAP_BUFFERS_LAYER(__glutCurrentWindow);\r
+\r
+  /* I considered putting the window being swapped on the\r
+     GLUT_FINISH_WORK work list because you could call\r
+     glutSwapBuffers from an idle callback which doesn't call\r
+     __glutSetWindow which normally adds indirect rendering\r
+     windows to the GLUT_FINISH_WORK work list.  Not being put\r
+     on the list could lead to the buffering up of multiple\r
+     redisplays and buffer swaps and hamper interactivity.  I\r
+     consider this an application bug due to not using\r
+     glutPostRedisplay to trigger redraws.  If\r
+     glutPostRedisplay were used, __glutSetWindow would be\r
+     called and a glFinish to throttle buffering would occur. */\r
+\r
+  if (__glutFPS) {\r
+     GLint t = glutGet(GLUT_ELAPSED_TIME);\r
+     __glutSwapCount++;\r
+     if (__glutSwapTime == 0)\r
+        __glutSwapTime = t;\r
+     else if (t - __glutSwapTime > __glutFPS) {\r
+        float time = 0.001 * (t - __glutSwapTime);\r
+        float fps = (float) __glutSwapCount / time;\r
+        fprintf(stderr, "GLUT: %d frames in %.2f seconds = %.2f FPS\n",\r
+                __glutSwapCount, time, fps);\r
+        __glutSwapTime = t;\r
+        __glutSwapCount = 0;\r
+     }\r
+  }\r
+}\r
+/* ENDCENTRY */\r
diff --git a/src/glut/os2/glut_teapot.cpp b/src/glut/os2/glut_teapot.cpp
new file mode 100644 (file)
index 0000000..e2fcb53
--- /dev/null
@@ -0,0 +1,210 @@
+\r
+/* Copyright (c) Mark J. Kilgard, 1994. */\r
+\r
+/**\r
+(c) Copyright 1993, Silicon Graphics, Inc.\r
+\r
+ALL RIGHTS RESERVED\r
+\r
+Permission to use, copy, modify, and distribute this software\r
+for any purpose and without fee is hereby granted, provided\r
+that the above copyright notice appear in all copies and that\r
+both the copyright notice and this permission notice appear in\r
+supporting documentation, and that the name of Silicon\r
+Graphics, Inc. not be used in advertising or publicity\r
+pertaining to distribution of the software without specific,\r
+written prior permission.\r
+\r
+THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU\r
+"AS-IS" AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR\r
+OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF\r
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  IN NO\r
+EVENT SHALL SILICON GRAPHICS, INC.  BE LIABLE TO YOU OR ANYONE\r
+ELSE FOR ANY DIRECT, SPECIAL, INCIDENTAL, INDIRECT OR\r
+CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER,\r
+INCLUDING WITHOUT LIMITATION, LOSS OF PROFIT, LOSS OF USE,\r
+SAVINGS OR REVENUE, OR THE CLAIMS OF THIRD PARTIES, WHETHER OR\r
+NOT SILICON GRAPHICS, INC.  HAS BEEN ADVISED OF THE POSSIBILITY\r
+OF SUCH LOSS, HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r
+ARISING OUT OF OR IN CONNECTION WITH THE POSSESSION, USE OR\r
+PERFORMANCE OF THIS SOFTWARE.\r
+\r
+US Government Users Restricted Rights\r
+\r
+Use, duplication, or disclosure by the Government is subject to\r
+restrictions set forth in FAR 52.227.19(c)(2) or subparagraph\r
+(c)(1)(ii) of the Rights in Technical Data and Computer\r
+Software clause at DFARS 252.227-7013 and/or in similar or\r
+successor clauses in the FAR or the DOD or NASA FAR\r
+Supplement.  Unpublished-- rights reserved under the copyright\r
+laws of the United States.  Contractor/manufacturer is Silicon\r
+Graphics, Inc., 2011 N.  Shoreline Blvd., Mountain View, CA\r
+94039-7311.\r
+\r
+OpenGL(TM) is a trademark of Silicon Graphics, Inc.\r
+*/\r
+\r
+#include "glutint.h"\r
+\r
+/* Rim, body, lid, and bottom data must be reflected in x and\r
+   y; handle and spout data across the y axis only.  */\r
+\r
+static int patchdata[][16] =\r
+{\r
+    /* rim */\r
+  {102, 103, 104, 105, 4, 5, 6, 7, 8, 9, 10, 11,\r
+    12, 13, 14, 15},\r
+    /* body */\r
+  {12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,\r
+    24, 25, 26, 27},\r
+  {24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36,\r
+    37, 38, 39, 40},\r
+    /* lid */\r
+  {96, 96, 96, 96, 97, 98, 99, 100, 101, 101, 101,\r
+    101, 0, 1, 2, 3,},\r
+  {0, 1, 2, 3, 106, 107, 108, 109, 110, 111, 112,\r
+    113, 114, 115, 116, 117},\r
+    /* bottom */\r
+  {118, 118, 118, 118, 124, 122, 119, 121, 123, 126,\r
+    125, 120, 40, 39, 38, 37},\r
+    /* handle */\r
+  {41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,\r
+    53, 54, 55, 56},\r
+  {53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,\r
+    28, 65, 66, 67},\r
+    /* spout */\r
+  {68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,\r
+    80, 81, 82, 83},\r
+  {80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,\r
+    92, 93, 94, 95}\r
+};\r
+/* *INDENT-OFF* */\r
+\r
+static float cpdata[][3] =\r
+{\r
+    {0.2, 0, 2.7}, {0.2, -0.112, 2.7}, {0.112, -0.2, 2.7}, {0,\r
+    -0.2, 2.7}, {1.3375, 0, 2.53125}, {1.3375, -0.749, 2.53125},\r
+    {0.749, -1.3375, 2.53125}, {0, -1.3375, 2.53125}, {1.4375,\r
+    0, 2.53125}, {1.4375, -0.805, 2.53125}, {0.805, -1.4375,\r
+    2.53125}, {0, -1.4375, 2.53125}, {1.5, 0, 2.4}, {1.5, -0.84,\r
+    2.4}, {0.84, -1.5, 2.4}, {0, -1.5, 2.4}, {1.75, 0, 1.875},\r
+    {1.75, -0.98, 1.875}, {0.98, -1.75, 1.875}, {0, -1.75,\r
+    1.875}, {2, 0, 1.35}, {2, -1.12, 1.35}, {1.12, -2, 1.35},\r
+    {0, -2, 1.35}, {2, 0, 0.9}, {2, -1.12, 0.9}, {1.12, -2,\r
+    0.9}, {0, -2, 0.9}, {-2, 0, 0.9}, {2, 0, 0.45}, {2, -1.12,\r
+    0.45}, {1.12, -2, 0.45}, {0, -2, 0.45}, {1.5, 0, 0.225},\r
+    {1.5, -0.84, 0.225}, {0.84, -1.5, 0.225}, {0, -1.5, 0.225},\r
+    {1.5, 0, 0.15}, {1.5, -0.84, 0.15}, {0.84, -1.5, 0.15}, {0,\r
+    -1.5, 0.15}, {-1.6, 0, 2.025}, {-1.6, -0.3, 2.025}, {-1.5,\r
+    -0.3, 2.25}, {-1.5, 0, 2.25}, {-2.3, 0, 2.025}, {-2.3, -0.3,\r
+    2.025}, {-2.5, -0.3, 2.25}, {-2.5, 0, 2.25}, {-2.7, 0,\r
+    2.025}, {-2.7, -0.3, 2.025}, {-3, -0.3, 2.25}, {-3, 0,\r
+    2.25}, {-2.7, 0, 1.8}, {-2.7, -0.3, 1.8}, {-3, -0.3, 1.8},\r
+    {-3, 0, 1.8}, {-2.7, 0, 1.575}, {-2.7, -0.3, 1.575}, {-3,\r
+    -0.3, 1.35}, {-3, 0, 1.35}, {-2.5, 0, 1.125}, {-2.5, -0.3,\r
+    1.125}, {-2.65, -0.3, 0.9375}, {-2.65, 0, 0.9375}, {-2,\r
+    -0.3, 0.9}, {-1.9, -0.3, 0.6}, {-1.9, 0, 0.6}, {1.7, 0,\r
+    1.425}, {1.7, -0.66, 1.425}, {1.7, -0.66, 0.6}, {1.7, 0,\r
+    0.6}, {2.6, 0, 1.425}, {2.6, -0.66, 1.425}, {3.1, -0.66,\r
+    0.825}, {3.1, 0, 0.825}, {2.3, 0, 2.1}, {2.3, -0.25, 2.1},\r
+    {2.4, -0.25, 2.025}, {2.4, 0, 2.025}, {2.7, 0, 2.4}, {2.7,\r
+    -0.25, 2.4}, {3.3, -0.25, 2.4}, {3.3, 0, 2.4}, {2.8, 0,\r
+    2.475}, {2.8, -0.25, 2.475}, {3.525, -0.25, 2.49375},\r
+    {3.525, 0, 2.49375}, {2.9, 0, 2.475}, {2.9, -0.15, 2.475},\r
+    {3.45, -0.15, 2.5125}, {3.45, 0, 2.5125}, {2.8, 0, 2.4},\r
+    {2.8, -0.15, 2.4}, {3.2, -0.15, 2.4}, {3.2, 0, 2.4}, {0, 0,\r
+    3.15}, {0.8, 0, 3.15}, {0.8, -0.45, 3.15}, {0.45, -0.8,\r
+    3.15}, {0, -0.8, 3.15}, {0, 0, 2.85}, {1.4, 0, 2.4}, {1.4,\r
+    -0.784, 2.4}, {0.784, -1.4, 2.4}, {0, -1.4, 2.4}, {0.4, 0,\r
+    2.55}, {0.4, -0.224, 2.55}, {0.224, -0.4, 2.55}, {0, -0.4,\r
+    2.55}, {1.3, 0, 2.55}, {1.3, -0.728, 2.55}, {0.728, -1.3,\r
+    2.55}, {0, -1.3, 2.55}, {1.3, 0, 2.4}, {1.3, -0.728, 2.4},\r
+    {0.728, -1.3, 2.4}, {0, -1.3, 2.4}, {0, 0, 0}, {1.425,\r
+    -0.798, 0}, {1.5, 0, 0.075}, {1.425, 0, 0}, {0.798, -1.425,\r
+    0}, {0, -1.5, 0.075}, {0, -1.425, 0}, {1.5, -0.84, 0.075},\r
+    {0.84, -1.5, 0.075}\r
+};\r
+\r
+static float tex[2][2][2] =\r
+{\r
+  { {0, 0},\r
+    {1, 0}},\r
+  { {0, 1},\r
+    {1, 1}}\r
+};\r
+\r
+/* *INDENT-ON* */\r
+\r
+static void\r
+teapot(GLint grid, GLdouble scale, GLenum type)\r
+{\r
+  float p[4][4][3], q[4][4][3], r[4][4][3], s[4][4][3];\r
+  long i, j, k, l;\r
+\r
+  glPushAttrib(GL_ENABLE_BIT | GL_EVAL_BIT);\r
+  glEnable(GL_AUTO_NORMAL);\r
+  glEnable(GL_NORMALIZE);\r
+  glEnable(GL_MAP2_VERTEX_3);\r
+  glEnable(GL_MAP2_TEXTURE_COORD_2);\r
+  glPushMatrix();\r
+  glRotatef(270.0, 1.0, 0.0, 0.0);\r
+  glScalef(0.5 * scale, 0.5 * scale, 0.5 * scale);\r
+  glTranslatef(0.0, 0.0, -1.5);\r
+  for (i = 0; i < 10; i++) {\r
+    for (j = 0; j < 4; j++) {\r
+      for (k = 0; k < 4; k++) {\r
+        for (l = 0; l < 3; l++) {\r
+          p[j][k][l] = cpdata[patchdata[i][j * 4 + k]][l];\r
+          q[j][k][l] = cpdata[patchdata[i][j * 4 + (3 - k)]][l];\r
+          if (l == 1)\r
+            q[j][k][l] *= -1.0;\r
+          if (i < 6) {\r
+            r[j][k][l] =\r
+              cpdata[patchdata[i][j * 4 + (3 - k)]][l];\r
+            if (l == 0)\r
+              r[j][k][l] *= -1.0;\r
+            s[j][k][l] = cpdata[patchdata[i][j * 4 + k]][l];\r
+            if (l == 0)\r
+              s[j][k][l] *= -1.0;\r
+            if (l == 1)\r
+              s[j][k][l] *= -1.0;\r
+          }\r
+        }\r
+      }\r
+    }\r
+    glMap2f(GL_MAP2_TEXTURE_COORD_2, 0, 1, 2, 2, 0, 1, 4, 2,\r
+      &tex[0][0][0]);\r
+    glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4,\r
+      &p[0][0][0]);\r
+    glMapGrid2f(grid, 0.0, 1.0, grid, 0.0, 1.0);\r
+    glEvalMesh2(type, 0, grid, 0, grid);\r
+    glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4,\r
+      &q[0][0][0]);\r
+    glEvalMesh2(type, 0, grid, 0, grid);\r
+    if (i < 6) {\r
+      glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4,\r
+        &r[0][0][0]);\r
+      glEvalMesh2(type, 0, grid, 0, grid);\r
+      glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4,\r
+        &s[0][0][0]);\r
+      glEvalMesh2(type, 0, grid, 0, grid);\r
+    }\r
+  }\r
+  glPopMatrix();\r
+  glPopAttrib();\r
+}\r
+\r
+/* CENTRY */\r
+void GLUTAPIENTRY\r
+glutSolidTeapot(GLdouble scale)\r
+{\r
+  teapot(7, scale, GL_FILL);\r
+}\r
+\r
+void GLUTAPIENTRY\r
+glutWireTeapot(GLdouble scale)\r
+{\r
+  teapot(10, scale, GL_LINE);\r
+}\r
+\r
+/* ENDCENTRY */\r
diff --git a/src/glut/os2/glut_tr24.cpp b/src/glut/os2/glut_tr24.cpp
new file mode 100644 (file)
index 0000000..9e12346
--- /dev/null
@@ -0,0 +1,2063 @@
+\r
+/* GENERATED FILE -- DO NOT MODIFY */\r
+\r
+#define glutBitmapTimesRoman24 XXX\r
+#include "glutbitmap.h"\r
+#undef glutBitmapTimesRoman24\r
+\r
+/* char: 0xff */\r
+\r
+static const GLubyte ch255data[] = {\r
+0xe0,0x0,0xf0,0x0,0x18,0x0,0x8,0x0,0xc,0x0,0x4,0x0,0xe,0x0,0xe,0x0,\r
+0x1a,0x0,0x19,0x0,0x19,0x0,0x31,0x0,0x30,0x80,0x30,0x80,0x60,0x80,0x60,0xc0,\r
+0xf1,0xe0,0x0,0x0,0x0,0x0,0x33,0x0,0x33,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch255 = {11,21,0,5,11,ch255data};\r
+\r
+/* char: 0xfe */\r
+\r
+static const GLubyte ch254data[] = {\r
+0xf0,0x0,0x60,0x0,0x60,0x0,0x60,0x0,0x60,0x0,0x6e,0x0,0x73,0x80,0x61,0x80,\r
+0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x61,0x80,0x73,0x80,\r
+0x6e,0x0,0x60,0x0,0x60,0x0,0x60,0x0,0x60,0x0,0xe0,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch254 = {10,22,-1,5,12,ch254data};\r
+\r
+/* char: 0xfd */\r
+\r
+static const GLubyte ch253data[] = {\r
+0xe0,0x0,0xf0,0x0,0x18,0x0,0x8,0x0,0xc,0x0,0x4,0x0,0xe,0x0,0xe,0x0,\r
+0x1a,0x0,0x19,0x0,0x19,0x0,0x31,0x0,0x30,0x80,0x30,0x80,0x60,0x80,0x60,0xc0,\r
+0xf1,0xe0,0x0,0x0,0x8,0x0,0x6,0x0,0x3,0x80,0x1,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch253 = {11,22,0,5,11,ch253data};\r
+\r
+/* char: 0xfc */\r
+\r
+static const GLubyte ch252data[] = {\r
+0x1c,0xe0,0x3e,0xc0,0x71,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,\r
+0x60,0xc0,0x60,0xc0,0x60,0xc0,0xe1,0xc0,0x0,0x0,0x0,0x0,0x33,0x0,0x33,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch252 = {11,16,-1,0,13,ch252data};\r
+\r
+/* char: 0xfb */\r
+\r
+static const GLubyte ch251data[] = {\r
+0x1c,0xe0,0x3e,0xc0,0x71,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,\r
+0x60,0xc0,0x60,0xc0,0x60,0xc0,0xe1,0xc0,0x0,0x0,0x21,0x0,0x12,0x0,0x1e,0x0,\r
+0xc,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch251 = {11,17,-1,0,13,ch251data};\r
+\r
+/* char: 0xfa */\r
+\r
+static const GLubyte ch250data[] = {\r
+0x1c,0xe0,0x3e,0xc0,0x71,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,\r
+0x60,0xc0,0x60,0xc0,0x60,0xc0,0xe1,0xc0,0x0,0x0,0x8,0x0,0x6,0x0,0x3,0x80,\r
+0x1,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch250 = {11,17,-1,0,13,ch250data};\r
+\r
+/* char: 0xf9 */\r
+\r
+static const GLubyte ch249data[] = {\r
+0x1c,0xe0,0x3e,0xc0,0x71,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,\r
+0x60,0xc0,0x60,0xc0,0x60,0xc0,0xe1,0xc0,0x0,0x0,0x2,0x0,0xc,0x0,0x38,0x0,\r
+0x30,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch249 = {11,17,-1,0,13,ch249data};\r
+\r
+/* char: 0xf8 */\r
+\r
+static const GLubyte ch248data[] = {\r
+0xc0,0x0,0xde,0x0,0x73,0x80,0x71,0x80,0xd0,0xc0,0xd8,0xc0,0xc8,0xc0,0xcc,0xc0,\r
+0xc4,0xc0,0xc6,0xc0,0x63,0x80,0x73,0x80,0x1e,0xc0,0x0,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch248 = {10,14,-1,1,12,ch248data};\r
+\r
+/* char: 0xf7 */\r
+\r
+static const GLubyte ch247data[] = {\r
+0x6,0x0,0x6,0x0,0x0,0x0,0x0,0x0,0xff,0xf0,0xff,0xf0,0x0,0x0,0x0,0x0,\r
+0x6,0x0,0x6,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch247 = {12,10,-1,-2,14,ch247data};\r
+\r
+/* char: 0xf6 */\r
+\r
+static const GLubyte ch246data[] = {\r
+0x1e,0x0,0x73,0x80,0x61,0x80,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,\r
+0xc0,0xc0,0x61,0x80,0x73,0x80,0x1e,0x0,0x0,0x0,0x0,0x0,0x33,0x0,0x33,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch246 = {10,16,-1,0,12,ch246data};\r
+\r
+/* char: 0xf5 */\r
+\r
+static const GLubyte ch245data[] = {\r
+0x1e,0x0,0x73,0x80,0x61,0x80,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,\r
+0xc0,0xc0,0x61,0x80,0x73,0x80,0x1e,0x0,0x0,0x0,0x0,0x0,0x27,0x0,0x1c,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch245 = {10,16,-1,0,12,ch245data};\r
+\r
+/* char: 0xf4 */\r
+\r
+static const GLubyte ch244data[] = {\r
+0x1e,0x0,0x73,0x80,0x61,0x80,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,\r
+0xc0,0xc0,0x61,0x80,0x73,0x80,0x1e,0x0,0x0,0x0,0x21,0x0,0x12,0x0,0x1e,0x0,\r
+0xc,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch244 = {10,17,-1,0,12,ch244data};\r
+\r
+/* char: 0xf3 */\r
+\r
+static const GLubyte ch243data[] = {\r
+0x1e,0x0,0x73,0x80,0x61,0x80,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,\r
+0xc0,0xc0,0x61,0x80,0x73,0x80,0x1e,0x0,0x0,0x0,0x8,0x0,0x6,0x0,0x3,0x80,\r
+0x1,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch243 = {10,17,-1,0,12,ch243data};\r
+\r
+/* char: 0xf2 */\r
+\r
+static const GLubyte ch242data[] = {\r
+0x1e,0x0,0x73,0x80,0x61,0x80,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,\r
+0xc0,0xc0,0x61,0x80,0x73,0x80,0x1e,0x0,0x0,0x0,0x2,0x0,0xc,0x0,0x38,0x0,\r
+0x30,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch242 = {10,17,-1,0,12,ch242data};\r
+\r
+/* char: 0xf1 */\r
+\r
+static const GLubyte ch241data[] = {\r
+0xf1,0xe0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,\r
+0x60,0xc0,0x71,0xc0,0x6f,0x80,0xe7,0x0,0x0,0x0,0x0,0x0,0x27,0x0,0x1c,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch241 = {11,16,-1,0,13,ch241data};\r
+\r
+/* char: 0xf0 */\r
+\r
+static const GLubyte ch240data[] = {\r
+0x1e,0x0,0x73,0x80,0x61,0x80,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,\r
+0xc0,0xc0,0x61,0x80,0x73,0x80,0x1f,0x0,0xc6,0x0,0x3c,0x0,0x1e,0x0,0x71,0x80,\r
+0xc0,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch240 = {10,17,-1,0,12,ch240data};\r
+\r
+/* char: 0xef */\r
+\r
+static const GLubyte ch239data[] = {\r
+0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x70,0x0,0x0,0xcc,0xcc,\r
+};\r
+\r
+static const BitmapCharRec ch239 = {6,16,0,0,6,ch239data};\r
+\r
+/* char: 0xee */\r
+\r
+static const GLubyte ch238data[] = {\r
+0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x70,0x0,0x84,0x48,0x78,\r
+0x30,\r
+};\r
+\r
+static const BitmapCharRec ch238 = {6,17,0,0,6,ch238data};\r
+\r
+/* char: 0xed */\r
+\r
+static const GLubyte ch237data[] = {\r
+0xf0,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0xe0,0x0,0x80,0x60,0x38,\r
+0x18,\r
+};\r
+\r
+static const BitmapCharRec ch237 = {5,17,-1,0,6,ch237data};\r
+\r
+/* char: 0xec */\r
+\r
+static const GLubyte ch236data[] = {\r
+0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x70,0x0,0x8,0x30,0xe0,\r
+0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch236 = {5,17,0,0,6,ch236data};\r
+\r
+/* char: 0xeb */\r
+\r
+static const GLubyte ch235data[] = {\r
+0x1e,0x0,0x7f,0x0,0x70,0x80,0xe0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x80,\r
+0xc1,0x80,0x41,0x80,0x63,0x0,0x1e,0x0,0x0,0x0,0x0,0x0,0x33,0x0,0x33,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch235 = {9,16,-1,0,11,ch235data};\r
+\r
+/* char: 0xea */\r
+\r
+static const GLubyte ch234data[] = {\r
+0x1e,0x0,0x7f,0x0,0x70,0x80,0xe0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x80,\r
+0xc1,0x80,0x41,0x80,0x63,0x0,0x1e,0x0,0x0,0x0,0x21,0x0,0x12,0x0,0x1e,0x0,\r
+0xc,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch234 = {9,17,-1,0,11,ch234data};\r
+\r
+/* char: 0xe9 */\r
+\r
+static const GLubyte ch233data[] = {\r
+0x1e,0x0,0x7f,0x0,0x70,0x80,0xe0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x80,\r
+0xc1,0x80,0x41,0x80,0x63,0x0,0x1e,0x0,0x0,0x0,0x10,0x0,0xc,0x0,0x7,0x0,\r
+0x3,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch233 = {9,17,-1,0,11,ch233data};\r
+\r
+/* char: 0xe8 */\r
+\r
+static const GLubyte ch232data[] = {\r
+0x1e,0x0,0x7f,0x0,0x70,0x80,0xe0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x80,\r
+0xc1,0x80,0x41,0x80,0x63,0x0,0x1e,0x0,0x0,0x0,0x4,0x0,0x18,0x0,0x70,0x0,\r
+0x60,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch232 = {9,17,-1,0,11,ch232data};\r
+\r
+/* char: 0xe7 */\r
+\r
+static const GLubyte ch231data[] = {\r
+0x3c,0x0,0x66,0x0,0x6,0x0,0x1e,0x0,0x18,0x0,0x8,0x0,0x1e,0x0,0x7f,0x0,\r
+0x70,0x80,0xe0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0x41,0x80,\r
+0x63,0x80,0x1f,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch231 = {9,18,-1,6,11,ch231data};\r
+\r
+/* char: 0xe6 */\r
+\r
+static const GLubyte ch230data[] = {\r
+0x70,0xf0,0xfb,0xf8,0xc7,0x84,0xc3,0x0,0xc3,0x0,0x63,0x0,0x3b,0x0,0xf,0xfc,\r
+0x3,0xc,0x63,0xc,0x67,0x98,0x3c,0xf0,\r
+};\r
+\r
+static const BitmapCharRec ch230 = {14,12,-1,0,16,ch230data};\r
+\r
+/* char: 0xe5 */\r
+\r
+static const GLubyte ch229data[] = {\r
+0x71,0x80,0xfb,0x0,0xc7,0x0,0xc3,0x0,0xc3,0x0,0x63,0x0,0x3b,0x0,0xf,0x0,\r
+0x3,0x0,0x63,0x0,0x67,0x0,0x3e,0x0,0x0,0x0,0x1c,0x0,0x22,0x0,0x22,0x0,\r
+0x1c,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch229 = {9,17,-1,0,11,ch229data};\r
+\r
+/* char: 0xe4 */\r
+\r
+static const GLubyte ch228data[] = {\r
+0x71,0x80,0xfb,0x0,0xc7,0x0,0xc3,0x0,0xc3,0x0,0x63,0x0,0x3b,0x0,0xf,0x0,\r
+0x3,0x0,0x63,0x0,0x67,0x0,0x3e,0x0,0x0,0x0,0x0,0x0,0x66,0x0,0x66,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch228 = {9,16,-1,0,11,ch228data};\r
+\r
+/* char: 0xe3 */\r
+\r
+static const GLubyte ch227data[] = {\r
+0x71,0x80,0xfb,0x0,0xc7,0x0,0xc3,0x0,0xc3,0x0,0x63,0x0,0x3b,0x0,0xf,0x0,\r
+0x3,0x0,0x63,0x0,0x67,0x0,0x3e,0x0,0x0,0x0,0x0,0x0,0x5c,0x0,0x3a,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch227 = {9,16,-1,0,11,ch227data};\r
+\r
+/* char: 0xe2 */\r
+\r
+static const GLubyte ch226data[] = {\r
+0x71,0x80,0xfb,0x0,0xc7,0x0,0xc3,0x0,0xc3,0x0,0x63,0x0,0x3b,0x0,0xf,0x0,\r
+0x3,0x0,0x63,0x0,0x67,0x0,0x3e,0x0,0x0,0x0,0x42,0x0,0x24,0x0,0x3c,0x0,\r
+0x18,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch226 = {9,17,-1,0,11,ch226data};\r
+\r
+/* char: 0xe1 */\r
+\r
+static const GLubyte ch225data[] = {\r
+0x71,0x80,0xfb,0x0,0xc7,0x0,0xc3,0x0,0xc3,0x0,0x63,0x0,0x3b,0x0,0xf,0x0,\r
+0x3,0x0,0x63,0x0,0x67,0x0,0x3e,0x0,0x0,0x0,0x10,0x0,0xc,0x0,0x7,0x0,\r
+0x3,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch225 = {9,17,-1,0,11,ch225data};\r
+\r
+/* char: 0xe0 */\r
+\r
+static const GLubyte ch224data[] = {\r
+0x71,0x80,0xfb,0x0,0xc7,0x0,0xc3,0x0,0xc3,0x0,0x63,0x0,0x3b,0x0,0xf,0x0,\r
+0x3,0x0,0x63,0x0,0x67,0x0,0x3e,0x0,0x0,0x0,0x4,0x0,0x18,0x0,0x70,0x0,\r
+0x60,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch224 = {9,17,-1,0,11,ch224data};\r
+\r
+/* char: 0xdf */\r
+\r
+static const GLubyte ch223data[] = {\r
+0xe7,0x0,0x6c,0x80,0x6c,0xc0,0x60,0xc0,0x60,0xc0,0x61,0xc0,0x61,0x80,0x63,0x80,\r
+0x67,0x0,0x6c,0x0,0x63,0x0,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x33,0x0,\r
+0x1e,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch223 = {10,17,-1,0,12,ch223data};\r
+\r
+/* char: 0xde */\r
+\r
+static const GLubyte ch222data[] = {\r
+0xfc,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x3f,0xc0,0x30,0x70,0x30,0x30,0x30,0x18,\r
+0x30,0x18,0x30,0x18,0x30,0x30,0x30,0x70,0x3f,0xc0,0x30,0x0,0x30,0x0,0x30,0x0,\r
+0xfc,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch222 = {13,17,-1,0,15,ch222data};\r
+\r
+/* char: 0xdd */\r
+\r
+static const GLubyte ch221data[] = {\r
+0x7,0xe0,0x1,0x80,0x1,0x80,0x1,0x80,0x1,0x80,0x1,0x80,0x1,0x80,0x3,0xc0,\r
+0x3,0x40,0x6,0x60,0x6,0x20,0xc,0x30,0x1c,0x10,0x18,0x18,0x38,0x8,0x30,0xc,\r
+0xfc,0x3f,0x0,0x0,0x1,0x0,0x0,0xc0,0x0,0x70,0x0,0x30,\r
+};\r
+\r
+static const BitmapCharRec ch221 = {16,22,0,0,16,ch221data};\r
+\r
+/* char: 0xdc */\r
+\r
+static const GLubyte ch220data[] = {\r
+0x7,0xe0,0x1c,0x30,0x18,0x8,0x30,0x8,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,\r
+0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,\r
+0xfc,0x1f,0x0,0x0,0x0,0x0,0x6,0x30,0x6,0x30,\r
+};\r
+\r
+static const BitmapCharRec ch220 = {16,21,-1,0,18,ch220data};\r
+\r
+/* char: 0xdb */\r
+\r
+static const GLubyte ch219data[] = {\r
+0x7,0xe0,0x1c,0x30,0x18,0x8,0x30,0x8,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,\r
+0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,\r
+0xfc,0x1f,0x0,0x0,0x8,0x10,0x6,0x60,0x3,0xc0,0x1,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch219 = {16,22,-1,0,18,ch219data};\r
+\r
+/* char: 0xda */\r
+\r
+static const GLubyte ch218data[] = {\r
+0x7,0xe0,0x1c,0x30,0x18,0x8,0x30,0x8,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,\r
+0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,\r
+0xfc,0x1f,0x0,0x0,0x1,0x0,0x0,0xc0,0x0,0x70,0x0,0x30,\r
+};\r
+\r
+static const BitmapCharRec ch218 = {16,22,-1,0,18,ch218data};\r
+\r
+/* char: 0xd9 */\r
+\r
+static const GLubyte ch217data[] = {\r
+0x7,0xe0,0x1c,0x30,0x18,0x8,0x30,0x8,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,\r
+0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,\r
+0xfc,0x1f,0x0,0x0,0x0,0x40,0x1,0x80,0x7,0x0,0x6,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch217 = {16,22,-1,0,18,ch217data};\r
+\r
+/* char: 0xd8 */\r
+\r
+static const GLubyte ch216data[] = {\r
+0x20,0x0,0x27,0xe0,0x1c,0x38,0x38,0x1c,0x68,0x6,0x64,0x6,0xc2,0x3,0xc2,0x3,\r
+0xc1,0x3,0xc1,0x3,0xc0,0x83,0xc0,0x83,0xc0,0x43,0x60,0x46,0x60,0x26,0x38,0x1c,\r
+0x1c,0x38,0x7,0xe4,0x0,0x4,\r
+};\r
+\r
+static const BitmapCharRec ch216 = {16,19,-1,1,18,ch216data};\r
+\r
+/* char: 0xd7 */\r
+\r
+static const GLubyte ch215data[] = {\r
+0x80,0x40,0xc0,0xc0,0x61,0x80,0x33,0x0,0x1e,0x0,0xc,0x0,0x1e,0x0,0x33,0x0,\r
+0x61,0x80,0xc0,0xc0,0x80,0x40,\r
+};\r
+\r
+static const BitmapCharRec ch215 = {10,11,-2,-1,14,ch215data};\r
+\r
+/* char: 0xd6 */\r
+\r
+static const GLubyte ch214data[] = {\r
+0x7,0xe0,0x1c,0x38,0x38,0x1c,0x60,0x6,0x60,0x6,0xc0,0x3,0xc0,0x3,0xc0,0x3,\r
+0xc0,0x3,0xc0,0x3,0xc0,0x3,0xc0,0x3,0x60,0x6,0x60,0x6,0x38,0x1c,0x1c,0x38,\r
+0x7,0xe0,0x0,0x0,0x0,0x0,0x6,0x60,0x6,0x60,\r
+};\r
+\r
+static const BitmapCharRec ch214 = {16,21,-1,0,18,ch214data};\r
+\r
+/* char: 0xd5 */\r
+\r
+static const GLubyte ch213data[] = {\r
+0x7,0xe0,0x1c,0x38,0x38,0x1c,0x60,0x6,0x60,0x6,0xc0,0x3,0xc0,0x3,0xc0,0x3,\r
+0xc0,0x3,0xc0,0x3,0xc0,0x3,0xc0,0x3,0x60,0x6,0x60,0x6,0x38,0x1c,0x1c,0x38,\r
+0x7,0xe0,0x0,0x0,0x0,0x0,0x4,0xe0,0x3,0x90,\r
+};\r
+\r
+static const BitmapCharRec ch213 = {16,21,-1,0,18,ch213data};\r
+\r
+/* char: 0xd4 */\r
+\r
+static const GLubyte ch212data[] = {\r
+0x7,0xe0,0x1c,0x38,0x38,0x1c,0x60,0x6,0x60,0x6,0xc0,0x3,0xc0,0x3,0xc0,0x3,\r
+0xc0,0x3,0xc0,0x3,0xc0,0x3,0xc0,0x3,0x60,0x6,0x60,0x6,0x38,0x1c,0x1c,0x38,\r
+0x7,0xe0,0x0,0x0,0x8,0x10,0x6,0x60,0x3,0xc0,0x1,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch212 = {16,22,-1,0,18,ch212data};\r
+\r
+/* char: 0xd3 */\r
+\r
+static const GLubyte ch211data[] = {\r
+0x7,0xe0,0x1c,0x38,0x38,0x1c,0x60,0x6,0x60,0x6,0xc0,0x3,0xc0,0x3,0xc0,0x3,\r
+0xc0,0x3,0xc0,0x3,0xc0,0x3,0xc0,0x3,0x60,0x6,0x60,0x6,0x38,0x1c,0x1c,0x38,\r
+0x7,0xe0,0x0,0x0,0x1,0x0,0x0,0xc0,0x0,0x70,0x0,0x30,\r
+};\r
+\r
+static const BitmapCharRec ch211 = {16,22,-1,0,18,ch211data};\r
+\r
+/* char: 0xd2 */\r
+\r
+static const GLubyte ch210data[] = {\r
+0x7,0xe0,0x1c,0x38,0x38,0x1c,0x60,0x6,0x60,0x6,0xc0,0x3,0xc0,0x3,0xc0,0x3,\r
+0xc0,0x3,0xc0,0x3,0xc0,0x3,0xc0,0x3,0x60,0x6,0x60,0x6,0x38,0x1c,0x1c,0x38,\r
+0x7,0xe0,0x0,0x0,0x0,0x40,0x1,0x80,0x7,0x0,0x6,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch210 = {16,22,-1,0,18,ch210data};\r
+\r
+/* char: 0xd1 */\r
+\r
+static const GLubyte ch209data[] = {\r
+0xf8,0xc,0x20,0x1c,0x20,0x1c,0x20,0x34,0x20,0x64,0x20,0x64,0x20,0xc4,0x21,0x84,\r
+0x21,0x84,0x23,0x4,0x26,0x4,0x26,0x4,0x2c,0x4,0x38,0x4,0x38,0x4,0x30,0x4,\r
+0xf0,0x1f,0x0,0x0,0x0,0x0,0x4,0xe0,0x3,0x90,\r
+};\r
+\r
+static const BitmapCharRec ch209 = {16,21,-1,0,18,ch209data};\r
+\r
+/* char: 0xd0 */\r
+\r
+static const GLubyte ch208data[] = {\r
+0x7f,0xe0,0x18,0x38,0x18,0x1c,0x18,0x6,0x18,0x6,0x18,0x3,0x18,0x3,0x18,0x3,\r
+0xff,0x3,0x18,0x3,0x18,0x3,0x18,0x3,0x18,0x6,0x18,0x6,0x18,0x1c,0x18,0x38,\r
+0x7f,0xe0,\r
+};\r
+\r
+static const BitmapCharRec ch208 = {16,17,0,0,17,ch208data};\r
+\r
+/* char: 0xcf */\r
+\r
+static const GLubyte ch207data[] = {\r
+0xfc,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,\r
+0xfc,0x0,0x0,0xcc,0xcc,\r
+};\r
+\r
+static const BitmapCharRec ch207 = {6,21,-1,0,8,ch207data};\r
+\r
+/* char: 0xce */\r
+\r
+static const GLubyte ch206data[] = {\r
+0x7e,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,\r
+0x7e,0x0,0x81,0x66,0x3c,0x18,\r
+};\r
+\r
+static const BitmapCharRec ch206 = {8,22,-1,0,8,ch206data};\r
+\r
+/* char: 0xcd */\r
+\r
+static const GLubyte ch205data[] = {\r
+0xfc,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,\r
+0xfc,0x0,0x40,0x30,0x1c,0xc,\r
+};\r
+\r
+static const BitmapCharRec ch205 = {6,22,-1,0,8,ch205data};\r
+\r
+/* char: 0xcc */\r
+\r
+static const GLubyte ch204data[] = {\r
+0xfc,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,\r
+0xfc,0x0,0x8,0x30,0xe0,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch204 = {6,22,-1,0,8,ch204data};\r
+\r
+/* char: 0xcb */\r
+\r
+static const GLubyte ch203data[] = {\r
+0xff,0xf8,0x30,0x18,0x30,0x8,0x30,0x8,0x30,0x0,0x30,0x0,0x30,0x40,0x30,0x40,\r
+0x3f,0xc0,0x30,0x40,0x30,0x40,0x30,0x0,0x30,0x0,0x30,0x10,0x30,0x10,0x30,0x30,\r
+0xff,0xf0,0x0,0x0,0x0,0x0,0x19,0x80,0x19,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch203 = {13,21,-1,0,15,ch203data};\r
+\r
+/* char: 0xca */\r
+\r
+static const GLubyte ch202data[] = {\r
+0xff,0xf8,0x30,0x18,0x30,0x8,0x30,0x8,0x30,0x0,0x30,0x0,0x30,0x40,0x30,0x40,\r
+0x3f,0xc0,0x30,0x40,0x30,0x40,0x30,0x0,0x30,0x0,0x30,0x10,0x30,0x10,0x30,0x30,\r
+0xff,0xf0,0x0,0x0,0x10,0x20,0xc,0xc0,0x7,0x80,0x3,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch202 = {13,22,-1,0,15,ch202data};\r
+\r
+/* char: 0xc9 */\r
+\r
+static const GLubyte ch201data[] = {\r
+0xff,0xf8,0x30,0x18,0x30,0x8,0x30,0x8,0x30,0x0,0x30,0x0,0x30,0x40,0x30,0x40,\r
+0x3f,0xc0,0x30,0x40,0x30,0x40,0x30,0x0,0x30,0x0,0x30,0x10,0x30,0x10,0x30,0x30,\r
+0xff,0xf0,0x0,0x0,0x4,0x0,0x3,0x0,0x1,0xc0,0x0,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch201 = {13,22,-1,0,15,ch201data};\r
+\r
+/* char: 0xc8 */\r
+\r
+static const GLubyte ch200data[] = {\r
+0xff,0xf8,0x30,0x18,0x30,0x8,0x30,0x8,0x30,0x0,0x30,0x0,0x30,0x40,0x30,0x40,\r
+0x3f,0xc0,0x30,0x40,0x30,0x40,0x30,0x0,0x30,0x0,0x30,0x10,0x30,0x10,0x30,0x30,\r
+0xff,0xf0,0x0,0x0,0x1,0x0,0x6,0x0,0x1c,0x0,0x18,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch200 = {13,22,-1,0,15,ch200data};\r
+\r
+/* char: 0xc7 */\r
+\r
+static const GLubyte ch199data[] = {\r
+0x7,0x80,0xc,0xc0,0x0,0xc0,0x3,0xc0,0x3,0x0,0x1,0x0,0x7,0xe0,0x1e,0x38,\r
+0x38,0x8,0x60,0x4,0x60,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,\r
+0xc0,0x0,0xc0,0x0,0x60,0x4,0x60,0x4,0x38,0xc,0x1c,0x3c,0x7,0xe4,\r
+};\r
+\r
+static const BitmapCharRec ch199 = {14,23,-1,6,16,ch199data};\r
+\r
+/* char: 0xc6 */\r
+\r
+static const GLubyte ch198data[] = {\r
+0xf9,0xff,0xf0,0x30,0x60,0x30,0x10,0x60,0x10,0x10,0x60,0x10,0x18,0x60,0x0,0x8,\r
+0x60,0x0,0xf,0xe0,0x80,0xc,0x60,0x80,0x4,0x7f,0x80,0x4,0x60,0x80,0x6,0x60,\r
+0x80,0x2,0x60,0x0,0x2,0x60,0x0,0x1,0x60,0x20,0x1,0x60,0x20,0x1,0xe0,0x60,\r
+0x3,0xff,0xe0,\r
+};\r
+\r
+static const BitmapCharRec ch198 = {20,17,0,0,21,ch198data};\r
+\r
+/* char: 0xc5 */\r
+\r
+static const GLubyte ch197data[] = {\r
+0xfc,0x1f,0x80,0x30,0x6,0x0,0x10,0x6,0x0,0x10,0xc,0x0,0x18,0xc,0x0,0x8,\r
+0xc,0x0,0xf,0xf8,0x0,0xc,0x18,0x0,0x4,0x18,0x0,0x4,0x30,0x0,0x6,0x30,\r
+0x0,0x2,0x30,0x0,0x2,0x60,0x0,0x1,0x60,0x0,0x1,0xc0,0x0,0x1,0xc0,0x0,\r
+0x0,0x80,0x0,0x1,0xc0,0x0,0x2,0x20,0x0,0x2,0x20,0x0,0x1,0xc0,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch197 = {17,21,0,0,17,ch197data};\r
+\r
+/* char: 0xc4 */\r
+\r
+static const GLubyte ch196data[] = {\r
+0xfc,0x1f,0x80,0x30,0x6,0x0,0x10,0x6,0x0,0x10,0xc,0x0,0x18,0xc,0x0,0x8,\r
+0xc,0x0,0xf,0xf8,0x0,0xc,0x18,0x0,0x4,0x18,0x0,0x4,0x30,0x0,0x6,0x30,\r
+0x0,0x2,0x30,0x0,0x2,0x60,0x0,0x1,0x60,0x0,0x1,0xc0,0x0,0x1,0xc0,0x0,\r
+0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6,0x30,0x0,0x6,0x30,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch196 = {17,21,0,0,17,ch196data};\r
+\r
+/* char: 0xc3 */\r
+\r
+static const GLubyte ch195data[] = {\r
+0xfc,0x1f,0x80,0x30,0x7,0x0,0x10,0x6,0x0,0x10,0xc,0x0,0x18,0xc,0x0,0x8,\r
+0xc,0x0,0xf,0xf8,0x0,0xc,0x18,0x0,0x4,0x18,0x0,0x4,0x30,0x0,0x6,0x30,\r
+0x0,0x2,0x30,0x0,0x2,0x60,0x0,0x1,0x60,0x0,0x1,0xc0,0x0,0x1,0xc0,0x0,\r
+0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0xe0,0x0,0x3,0x90,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch195 = {17,21,0,0,17,ch195data};\r
+\r
+/* char: 0xc2 */\r
+\r
+static const GLubyte ch194data[] = {\r
+0xfc,0x1f,0x80,0x30,0x6,0x0,0x10,0x6,0x0,0x10,0xc,0x0,0x18,0xc,0x0,0x8,\r
+0xc,0x0,0xf,0xf8,0x0,0xc,0x18,0x0,0x4,0x18,0x0,0x4,0x30,0x0,0x6,0x30,\r
+0x0,0x2,0x30,0x0,0x2,0x60,0x0,0x1,0x60,0x0,0x1,0xc0,0x0,0x1,0xc0,0x0,\r
+0x0,0x80,0x0,0x0,0x0,0x0,0x8,0x10,0x0,0x6,0x60,0x0,0x3,0xc0,0x0,0x1,\r
+0x80,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch194 = {17,22,0,0,17,ch194data};\r
+\r
+/* char: 0xc1 */\r
+\r
+static const GLubyte ch193data[] = {\r
+0xfc,0x1f,0x80,0x30,0x6,0x0,0x10,0x6,0x0,0x10,0xc,0x0,0x18,0xc,0x0,0x8,\r
+0xc,0x0,0xf,0xf8,0x0,0xc,0x18,0x0,0x4,0x18,0x0,0x4,0x30,0x0,0x6,0x30,\r
+0x0,0x2,0x30,0x0,0x2,0x60,0x0,0x1,0x60,0x0,0x1,0xc0,0x0,0x1,0xc0,0x0,\r
+0x0,0x80,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0xc0,0x0,0x0,0x70,0x0,0x0,\r
+0x30,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch193 = {17,22,0,0,17,ch193data};\r
+\r
+/* char: 0xc0 */\r
+\r
+static const GLubyte ch192data[] = {\r
+0xfc,0x1f,0x80,0x30,0x6,0x0,0x10,0x6,0x0,0x10,0xc,0x0,0x18,0xc,0x0,0x8,\r
+0xc,0x0,0xf,0xf8,0x0,0xc,0x18,0x0,0x4,0x18,0x0,0x4,0x30,0x0,0x6,0x30,\r
+0x0,0x2,0x30,0x0,0x2,0x60,0x0,0x1,0x60,0x0,0x1,0xc0,0x0,0x1,0xc0,0x0,\r
+0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x20,0x0,0x0,0xc0,0x0,0x3,0x80,0x0,0x3,\r
+0x0,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch192 = {17,22,0,0,17,ch192data};\r
+\r
+/* char: 0xbf */\r
+\r
+static const GLubyte ch191data[] = {\r
+0x3e,0x63,0xc1,0xc3,0xc3,0xe0,0x70,0x30,0x38,0x18,0x18,0x8,0x8,0x0,0x0,0xc,\r
+0xc,\r
+};\r
+\r
+static const BitmapCharRec ch191 = {8,17,-1,5,11,ch191data};\r
+\r
+/* char: 0xbe */\r
+\r
+static const GLubyte ch190data[] = {\r
+0x18,0x2,0x0,0x8,0x2,0x0,0xc,0x7f,0x80,0x4,0x22,0x0,0x6,0x32,0x0,0x3,\r
+0x12,0x0,0x1,0xa,0x0,0x71,0x8e,0x0,0x88,0x86,0x0,0x8c,0xc2,0x0,0xc,0x60,\r
+0x0,0x8,0x20,0x0,0x30,0x30,0x0,0x8,0x10,0x0,0x8c,0x18,0x0,0x4c,0xc,0x0,\r
+0x38,0x4,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch190 = {17,17,0,0,18,ch190data};\r
+\r
+/* char: 0xbd */\r
+\r
+static const GLubyte ch189data[] = {\r
+0x30,0x7e,0x10,0x22,0x18,0x10,0x8,0x18,0xc,0x8,0x6,0x4,0x2,0x6,0xfb,0x46,\r
+0x21,0x26,0x21,0x9c,0x20,0xc0,0x20,0x40,0x20,0x60,0x20,0x20,0xa0,0x30,0x60,0x18,\r
+0x20,0x8,\r
+};\r
+\r
+static const BitmapCharRec ch189 = {15,17,-1,0,18,ch189data};\r
+\r
+/* char: 0xbc */\r
+\r
+static const GLubyte ch188data[] = {\r
+0x30,0x4,0x10,0x4,0x18,0xff,0x8,0x44,0xc,0x64,0x6,0x24,0x2,0x14,0xfb,0x1c,\r
+0x21,0xc,0x21,0x84,0x20,0xc0,0x20,0x40,0x20,0x60,0x20,0x20,0xa0,0x30,0x60,0x18,\r
+0x20,0x8,\r
+};\r
+\r
+static const BitmapCharRec ch188 = {16,17,-1,0,18,ch188data};\r
+\r
+/* char: 0xbb */\r
+\r
+static const GLubyte ch187data[] = {\r
+0x88,0x0,0xcc,0x0,0x66,0x0,0x33,0x0,0x19,0x80,0x19,0x80,0x33,0x0,0x66,0x0,\r
+0xcc,0x0,0x88,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch187 = {9,10,-2,-1,12,ch187data};\r
+\r
+/* char: 0xba */\r
+\r
+static const GLubyte ch186data[] = {\r
+0xfc,0x0,0x78,0xcc,0xcc,0xcc,0xcc,0xcc,0x78,\r
+};\r
+\r
+static const BitmapCharRec ch186 = {6,9,-1,-8,8,ch186data};\r
+\r
+/* char: 0xb9 */\r
+\r
+static const GLubyte ch185data[] = {\r
+0xf8,0x20,0x20,0x20,0x20,0x20,0x20,0xa0,0x60,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch185 = {5,10,-1,-7,7,ch185data};\r
+\r
+/* char: 0xb8 */\r
+\r
+static const GLubyte ch184data[] = {\r
+0x78,0xcc,0xc,0x3c,0x30,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch184 = {6,6,-1,6,8,ch184data};\r
+\r
+/* char: 0xb7 */\r
+\r
+static const GLubyte ch183data[] = {\r
+0xc0,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch183 = {2,2,-2,-6,6,ch183data};\r
+\r
+/* char: 0xb6 */\r
+\r
+static const GLubyte ch182data[] = {\r
+0x9,0x0,0x9,0x0,0x9,0x0,0x9,0x0,0x9,0x0,0x9,0x0,0x9,0x0,0x9,0x0,\r
+0x9,0x0,0x9,0x0,0x9,0x0,0x19,0x0,0x39,0x0,0x79,0x0,0x79,0x0,0xf9,0x0,\r
+0xf9,0x0,0xf9,0x0,0x79,0x0,0x79,0x0,0x39,0x0,0x1f,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch182 = {9,22,-1,5,11,ch182data};\r
+\r
+/* char: 0xb5 */\r
+\r
+static const GLubyte ch181data[] = {\r
+0x40,0x0,0xe0,0x0,0xc0,0x0,0x40,0x0,0x40,0x0,0x5c,0xe0,0x7e,0xc0,0x71,0xc0,\r
+0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,\r
+0xe1,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch181 = {11,17,-1,5,13,ch181data};\r
+\r
+/* char: 0xb4 */\r
+\r
+static const GLubyte ch180data[] = {\r
+0x80,0x60,0x38,0x18,\r
+};\r
+\r
+static const BitmapCharRec ch180 = {5,4,-2,-13,8,ch180data};\r
+\r
+/* char: 0xb3 */\r
+\r
+static const GLubyte ch179data[] = {\r
+0x70,0x88,0x8c,0xc,0x8,0x30,0x8,0x8c,0x4c,0x38,\r
+};\r
+\r
+static const BitmapCharRec ch179 = {6,10,0,-7,7,ch179data};\r
+\r
+/* char: 0xb2 */\r
+\r
+static const GLubyte ch178data[] = {\r
+0xfc,0x44,0x20,0x30,0x10,0x8,0xc,0x8c,0x4c,0x38,\r
+};\r
+\r
+static const BitmapCharRec ch178 = {6,10,0,-7,7,ch178data};\r
+\r
+/* char: 0xb1 */\r
+\r
+static const GLubyte ch177data[] = {\r
+0xff,0xf0,0xff,0xf0,0x0,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,\r
+0xff,0xf0,0xff,0xf0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch177 = {12,15,-1,0,14,ch177data};\r
+\r
+/* char: 0xb0 */\r
+\r
+static const GLubyte ch176data[] = {\r
+0x38,0x44,0x82,0x82,0x82,0x44,0x38,\r
+};\r
+\r
+static const BitmapCharRec ch176 = {7,7,-1,-10,9,ch176data};\r
+\r
+/* char: 0xaf */\r
+\r
+static const GLubyte ch175data[] = {\r
+0xfc,0xfc,\r
+};\r
+\r
+static const BitmapCharRec ch175 = {6,2,-1,-14,8,ch175data};\r
+\r
+/* char: 0xae */\r
+\r
+static const GLubyte ch174data[] = {\r
+0x7,0xf0,0x0,0x1c,0x1c,0x0,0x30,0x6,0x0,0x60,0x3,0x0,0x47,0x19,0x0,0xc2,\r
+0x31,0x80,0x82,0x20,0x80,0x82,0x40,0x80,0x83,0xe0,0x80,0x82,0x30,0x80,0x82,0x10,\r
+0x80,0xc2,0x11,0x80,0x42,0x31,0x0,0x67,0xe3,0x0,0x30,0x6,0x0,0x1c,0x1c,0x0,\r
+0x7,0xf0,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch174 = {17,17,-1,0,19,ch174data};\r
+\r
+/* char: 0xad */\r
+\r
+static const GLubyte ch173data[] = {\r
+0xfe,0xfe,\r
+};\r
+\r
+static const BitmapCharRec ch173 = {7,2,-1,-5,9,ch173data};\r
+\r
+/* char: 0xac */\r
+\r
+static const GLubyte ch172data[] = {\r
+0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0xff,0xf0,0xff,0xf0,\r
+};\r
+\r
+static const BitmapCharRec ch172 = {12,7,-1,-3,14,ch172data};\r
+\r
+/* char: 0xab */\r
+\r
+static const GLubyte ch171data[] = {\r
+0x8,0x80,0x19,0x80,0x33,0x0,0x66,0x0,0xcc,0x0,0xcc,0x0,0x66,0x0,0x33,0x0,\r
+0x19,0x80,0x8,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch171 = {9,10,-2,-1,13,ch171data};\r
+\r
+/* char: 0xaa */\r
+\r
+static const GLubyte ch170data[] = {\r
+0x7e,0x0,0x76,0xcc,0xcc,0x7c,0xc,0xcc,0x78,\r
+};\r
+\r
+static const BitmapCharRec ch170 = {7,9,0,-8,8,ch170data};\r
+\r
+/* char: 0xa9 */\r
+\r
+static const GLubyte ch169data[] = {\r
+0x7,0xf0,0x0,0x1c,0x1c,0x0,0x30,0x6,0x0,0x61,0xc3,0x0,0x47,0x71,0x0,0xc4,\r
+0x19,0x80,0x8c,0x0,0x80,0x88,0x0,0x80,0x88,0x0,0x80,0x88,0x0,0x80,0x8c,0x0,\r
+0x80,0xc4,0x19,0x80,0x47,0x31,0x0,0x61,0xe3,0x0,0x30,0x6,0x0,0x1c,0x1c,0x0,\r
+0x7,0xf0,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch169 = {17,17,-1,0,19,ch169data};\r
+\r
+/* char: 0xa8 */\r
+\r
+static const GLubyte ch168data[] = {\r
+0xcc,0xcc,\r
+};\r
+\r
+static const BitmapCharRec ch168 = {6,2,-1,-14,8,ch168data};\r
+\r
+/* char: 0xa7 */\r
+\r
+static const GLubyte ch167data[] = {\r
+0x38,0x64,0x62,0x6,0xe,0x1c,0x38,0x74,0xe2,0xc3,0x83,0x87,0x4e,0x3c,0x38,0x70,\r
+0x60,0x46,0x26,0x1c,\r
+};\r
+\r
+static const BitmapCharRec ch167 = {8,20,-2,2,12,ch167data};\r
+\r
+/* char: 0xa6 */\r
+\r
+static const GLubyte ch166data[] = {\r
+0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x0,0x0,0x0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,\r
+0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch166 = {2,17,-2,0,6,ch166data};\r
+\r
+/* char: 0xa5 */\r
+\r
+static const GLubyte ch165data[] = {\r
+0xf,0xc0,0x3,0x0,0x3,0x0,0x3,0x0,0x3,0x0,0x1f,0xe0,0x3,0x0,0x1f,0xe0,\r
+0x3,0x0,0x7,0x80,0xc,0x80,0xc,0xc0,0x18,0x40,0x18,0x60,0x30,0x20,0x70,0x30,\r
+0xf8,0x7c,\r
+};\r
+\r
+static const BitmapCharRec ch165 = {14,17,0,0,14,ch165data};\r
+\r
+/* char: 0xa4 */\r
+\r
+static const GLubyte ch164data[] = {\r
+0xc0,0x60,0xee,0xe0,0x7f,0xc0,0x31,0x80,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,\r
+0x31,0x80,0x7f,0xc0,0xee,0xe0,0xc0,0x60,\r
+};\r
+\r
+static const BitmapCharRec ch164 = {11,12,-1,-3,13,ch164data};\r
+\r
+/* char: 0xa3 */\r
+\r
+static const GLubyte ch163data[] = {\r
+0xe7,0x80,0xbe,0xc0,0x78,0x40,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,\r
+0x30,0x0,0xfc,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x31,0x80,0x19,0x80,\r
+0xf,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch163 = {10,17,-1,0,12,ch163data};\r
+\r
+/* char: 0xa2 */\r
+\r
+static const GLubyte ch162data[] = {\r
+0x40,0x0,0x40,0x0,0x3e,0x0,0x7f,0x0,0x70,0x80,0xd0,0x0,0xc8,0x0,0xc8,0x0,\r
+0xc8,0x0,0xc4,0x0,0xc4,0x0,0x43,0x80,0x63,0x80,0x1f,0x0,0x1,0x0,0x1,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch162 = {9,16,-1,2,12,ch162data};\r
+\r
+/* char: 0xa1 */\r
+\r
+static const GLubyte ch161data[] = {\r
+0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x0,0x0,0x0,0xc0,\r
+0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch161 = {2,17,-4,5,8,ch161data};\r
+\r
+/* char: 0xa0 */\r
+\r
+#ifdef _WIN32\r
+/* XXX Work around Microsoft OpenGL 1.1 bug where glBitmap with\r
+   a height or width of zero does not advance the raster position\r
+   as specified by OpenGL. (Cosmo OpenGL does not have this bug.) */\r
+static const GLubyte ch160data[] = { 0x0 };\r
+static const BitmapCharRec ch160 = {1,1,0,0,6,ch160data};\r
+#else\r
+static const BitmapCharRec ch160 = {0,0,0,0,6,0};\r
+#endif\r
+\r
+/* char: 0x7e '~' */\r
+\r
+static const GLubyte ch126data[] = {\r
+0x83,0x80,0xc7,0xc0,0x7c,0x60,0x38,0x20,\r
+};\r
+\r
+static const BitmapCharRec ch126 = {11,4,-1,-5,13,ch126data};\r
+\r
+/* char: 0x7d '}' */\r
+\r
+static const GLubyte ch125data[] = {\r
+0xe0,0x30,0x18,0x18,0x18,0x18,0x18,0x18,0x8,0xc,0x4,0x3,0x4,0xc,0x8,0x18,\r
+0x18,0x18,0x18,0x18,0x30,0xe0,\r
+};\r
+\r
+static const BitmapCharRec ch125 = {8,22,-1,5,10,ch125data};\r
+\r
+/* char: 0x7c '|' */\r
+\r
+static const GLubyte ch124data[] = {\r
+0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,\r
+0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch124 = {2,17,-2,0,6,ch124data};\r
+\r
+/* char: 0x7b '{' */\r
+\r
+static const GLubyte ch123data[] = {\r
+0x7,0xc,0x18,0x18,0x18,0x18,0x18,0x18,0x10,0x30,0x20,0xc0,0x20,0x30,0x10,0x18,\r
+0x18,0x18,0x18,0x18,0xc,0x7,\r
+};\r
+\r
+static const BitmapCharRec ch123 = {8,22,-1,5,10,ch123data};\r
+\r
+/* char: 0x7a 'z' */\r
+\r
+static const GLubyte ch122data[] = {\r
+0xff,0xc3,0x61,0x70,0x30,0x38,0x18,0x1c,0xe,0x86,0xc3,0xff,\r
+};\r
+\r
+static const BitmapCharRec ch122 = {8,12,-1,0,10,ch122data};\r
+\r
+/* char: 0x79 'y' */\r
+\r
+static const GLubyte ch121data[] = {\r
+0xe0,0x0,0xf0,0x0,0x18,0x0,0x8,0x0,0xc,0x0,0x4,0x0,0xe,0x0,0xe,0x0,\r
+0x1a,0x0,0x19,0x0,0x19,0x0,0x31,0x0,0x30,0x80,0x30,0x80,0x60,0x80,0x60,0xc0,\r
+0xf1,0xe0,\r
+};\r
+\r
+static const BitmapCharRec ch121 = {11,17,0,5,11,ch121data};\r
+\r
+/* char: 0x78 'x' */\r
+\r
+static const GLubyte ch120data[] = {\r
+0xf1,0xe0,0x60,0xc0,0x21,0x80,0x33,0x80,0x1b,0x0,0xe,0x0,0xc,0x0,0x1a,0x0,\r
+0x39,0x0,0x31,0x80,0x60,0xc0,0xf1,0xe0,\r
+};\r
+\r
+static const BitmapCharRec ch120 = {11,12,-1,0,13,ch120data};\r
+\r
+/* char: 0x77 'w' */\r
+\r
+static const GLubyte ch119data[] = {\r
+0x4,0x10,0x0,0xe,0x38,0x0,0xe,0x38,0x0,0x1a,0x28,0x0,0x1a,0x64,0x0,0x19,\r
+0x64,0x0,0x31,0x64,0x0,0x30,0xc2,0x0,0x30,0xc2,0x0,0x60,0xc2,0x0,0x60,0xc3,\r
+0x0,0xf1,0xe7,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch119 = {17,12,0,0,17,ch119data};\r
+\r
+/* char: 0x76 'v' */\r
+\r
+static const GLubyte ch118data[] = {\r
+0x4,0x0,0xe,0x0,0xe,0x0,0x1a,0x0,0x19,0x0,0x19,0x0,0x31,0x0,0x30,0x80,\r
+0x30,0x80,0x60,0x80,0x60,0xc0,0xf1,0xe0,\r
+};\r
+\r
+static const BitmapCharRec ch118 = {11,12,0,0,11,ch118data};\r
+\r
+/* char: 0x75 'u' */\r
+\r
+static const GLubyte ch117data[] = {\r
+0x1c,0xe0,0x3e,0xc0,0x71,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,\r
+0x60,0xc0,0x60,0xc0,0x60,0xc0,0xe1,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch117 = {11,12,-1,0,13,ch117data};\r
+\r
+/* char: 0x74 't' */\r
+\r
+static const GLubyte ch116data[] = {\r
+0x1c,0x32,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0xfe,0x70,0x30,0x10,\r
+};\r
+\r
+static const BitmapCharRec ch116 = {7,15,0,0,7,ch116data};\r
+\r
+/* char: 0x73 's' */\r
+\r
+static const GLubyte ch115data[] = {\r
+0xf8,0xc6,0x83,0x3,0x7,0x1e,0x7c,0x70,0xe0,0xc2,0x66,0x3e,\r
+};\r
+\r
+static const BitmapCharRec ch115 = {8,12,-1,0,10,ch115data};\r
+\r
+/* char: 0x72 'r' */\r
+\r
+static const GLubyte ch114data[] = {\r
+0xf0,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x76,0x6e,0xe6,\r
+};\r
+\r
+static const BitmapCharRec ch114 = {7,12,-1,0,8,ch114data};\r
+\r
+/* char: 0x71 'q' */\r
+\r
+static const GLubyte ch113data[] = {\r
+0x3,0xc0,0x1,0x80,0x1,0x80,0x1,0x80,0x1,0x80,0x1d,0x80,0x73,0x80,0x61,0x80,\r
+0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0x61,0x80,0x73,0x80,\r
+0x1d,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch113 = {10,17,-1,5,12,ch113data};\r
+\r
+/* char: 0x70 'p' */\r
+\r
+static const GLubyte ch112data[] = {\r
+0xf0,0x0,0x60,0x0,0x60,0x0,0x60,0x0,0x60,0x0,0x6e,0x0,0x73,0x80,0x61,0x80,\r
+0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x61,0x80,0x73,0x80,\r
+0xee,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch112 = {10,17,-1,5,12,ch112data};\r
+\r
+/* char: 0x6f 'o' */\r
+\r
+static const GLubyte ch111data[] = {\r
+0x1e,0x0,0x73,0x80,0x61,0x80,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,\r
+0xc0,0xc0,0x61,0x80,0x73,0x80,0x1e,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch111 = {10,12,-1,0,12,ch111data};\r
+\r
+/* char: 0x6e 'n' */\r
+\r
+static const GLubyte ch110data[] = {\r
+0xf1,0xe0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,\r
+0x60,0xc0,0x71,0xc0,0x6f,0x80,0xe7,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch110 = {11,12,-1,0,13,ch110data};\r
+\r
+/* char: 0x6d 'm' */\r
+\r
+static const GLubyte ch109data[] = {\r
+0xf1,0xe3,0xc0,0x60,0xc1,0x80,0x60,0xc1,0x80,0x60,0xc1,0x80,0x60,0xc1,0x80,0x60,\r
+0xc1,0x80,0x60,0xc1,0x80,0x60,0xc1,0x80,0x60,0xc1,0x80,0x71,0xe3,0x80,0x6f,0x9f,\r
+0x0,0xe7,0xe,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch109 = {18,12,-1,0,20,ch109data};\r
+\r
+/* char: 0x6c 'l' */\r
+\r
+static const GLubyte ch108data[] = {\r
+0xf0,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,\r
+0xe0,\r
+};\r
+\r
+static const BitmapCharRec ch108 = {4,17,-1,0,6,ch108data};\r
+\r
+/* char: 0x6b 'k' */\r
+\r
+static const GLubyte ch107data[] = {\r
+0xf3,0xe0,0x61,0xc0,0x63,0x80,0x67,0x0,0x6e,0x0,0x6c,0x0,0x78,0x0,0x68,0x0,\r
+0x64,0x0,0x66,0x0,0x63,0x0,0x67,0xc0,0x60,0x0,0x60,0x0,0x60,0x0,0x60,0x0,\r
+0xe0,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch107 = {11,17,-1,0,12,ch107data};\r
+\r
+/* char: 0x6a 'j' */\r
+\r
+static const GLubyte ch106data[] = {\r
+0xc0,0xe0,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,\r
+0x70,0x0,0x0,0x0,0x30,0x30,\r
+};\r
+\r
+static const BitmapCharRec ch106 = {4,22,0,5,6,ch106data};\r
+\r
+/* char: 0x69 'i' */\r
+\r
+static const GLubyte ch105data[] = {\r
+0xf0,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0xe0,0x0,0x0,0x0,0x60,\r
+0x60,\r
+};\r
+\r
+static const BitmapCharRec ch105 = {4,17,-1,0,6,ch105data};\r
+\r
+/* char: 0x68 'h' */\r
+\r
+static const GLubyte ch104data[] = {\r
+0xf1,0xe0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,\r
+0x60,0xc0,0x71,0xc0,0x6f,0x80,0x67,0x0,0x60,0x0,0x60,0x0,0x60,0x0,0x60,0x0,\r
+0xe0,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch104 = {11,17,-1,0,13,ch104data};\r
+\r
+/* char: 0x67 'g' */\r
+\r
+static const GLubyte ch103data[] = {\r
+0x3f,0x0,0xf1,0xc0,0xc0,0x60,0xc0,0x20,0x60,0x60,0x3f,0xc0,0x7f,0x0,0x60,0x0,\r
+0x30,0x0,0x3e,0x0,0x33,0x0,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x33,0x0,\r
+0x1f,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch103 = {11,17,-1,5,12,ch103data};\r
+\r
+/* char: 0x66 'f' */\r
+\r
+static const GLubyte ch102data[] = {\r
+0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0xfe,0x30,0x30,0x30,0x16,\r
+0xe,\r
+};\r
+\r
+static const BitmapCharRec ch102 = {7,17,0,0,7,ch102data};\r
+\r
+/* char: 0x65 'e' */\r
+\r
+static const GLubyte ch101data[] = {\r
+0x1e,0x0,0x7f,0x0,0x70,0x80,0xe0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x80,\r
+0xc1,0x80,0x41,0x80,0x63,0x0,0x1e,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch101 = {9,12,-1,0,11,ch101data};\r
+\r
+/* char: 0x64 'd' */\r
+\r
+static const GLubyte ch100data[] = {\r
+0x1e,0xc0,0x73,0x80,0x61,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,\r
+0xc1,0x80,0x61,0x80,0x73,0x80,0x1d,0x80,0x1,0x80,0x1,0x80,0x1,0x80,0x1,0x80,\r
+0x3,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch100 = {10,17,-1,0,12,ch100data};\r
+\r
+/* char: 0x63 'c' */\r
+\r
+static const GLubyte ch99data[] = {\r
+0x1e,0x0,0x7f,0x0,0x70,0x80,0xe0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,\r
+0xc0,0x0,0x41,0x80,0x63,0x80,0x1f,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch99 = {9,12,-1,0,11,ch99data};\r
+\r
+/* char: 0x62 'b' */\r
+\r
+static const GLubyte ch98data[] = {\r
+0x5e,0x0,0x73,0x80,0x61,0x80,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,\r
+0x60,0xc0,0x61,0x80,0x73,0x80,0x6e,0x0,0x60,0x0,0x60,0x0,0x60,0x0,0x60,0x0,\r
+0xe0,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch98 = {10,17,-1,0,12,ch98data};\r
+\r
+/* char: 0x61 'a' */\r
+\r
+static const GLubyte ch97data[] = {\r
+0x71,0x80,0xfb,0x0,0xc7,0x0,0xc3,0x0,0xc3,0x0,0x63,0x0,0x3b,0x0,0xf,0x0,\r
+0x3,0x0,0x63,0x0,0x67,0x0,0x3e,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch97 = {9,12,-1,0,11,ch97data};\r
+\r
+/* char: 0x60 '`' */\r
+\r
+static const GLubyte ch96data[] = {\r
+0x60,0xe0,0x80,0xc0,0x60,\r
+};\r
+\r
+static const BitmapCharRec ch96 = {3,5,-2,-12,7,ch96data};\r
+\r
+/* char: 0x5f '_' */\r
+\r
+static const GLubyte ch95data[] = {\r
+0xff,0xf8,0xff,0xf8,\r
+};\r
+\r
+static const BitmapCharRec ch95 = {13,2,0,5,13,ch95data};\r
+\r
+/* char: 0x5e '^' */\r
+\r
+static const GLubyte ch94data[] = {\r
+0x80,0x80,0xc1,0x80,0x41,0x0,0x63,0x0,0x22,0x0,0x36,0x0,0x14,0x0,0x1c,0x0,\r
+0x8,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch94 = {9,9,-1,-8,11,ch94data};\r
+\r
+/* char: 0x5d ']' */\r
+\r
+static const GLubyte ch93data[] = {\r
+0xf8,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,\r
+0x18,0x18,0x18,0x18,0xf8,\r
+};\r
+\r
+static const BitmapCharRec ch93 = {5,21,-1,4,8,ch93data};\r
+\r
+/* char: 0x5c '\' */\r
+\r
+static const GLubyte ch92data[] = {\r
+0x6,0x6,0x4,0xc,0xc,0x8,0x18,0x18,0x10,0x30,0x30,0x20,0x60,0x60,0x40,0xc0,\r
+0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch92 = {7,17,0,0,7,ch92data};\r
+\r
+/* char: 0x5b '[' */\r
+\r
+static const GLubyte ch91data[] = {\r
+0xf8,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,\r
+0xc0,0xc0,0xc0,0xc0,0xf8,\r
+};\r
+\r
+static const BitmapCharRec ch91 = {5,21,-2,4,8,ch91data};\r
+\r
+/* char: 0x5a 'Z' */\r
+\r
+static const GLubyte ch90data[] = {\r
+0xff,0xf8,0xe0,0x18,0x70,0x8,0x30,0x8,0x38,0x0,0x18,0x0,0x1c,0x0,0xe,0x0,\r
+0x6,0x0,0x7,0x0,0x3,0x0,0x3,0x80,0x1,0xc0,0x80,0xc0,0x80,0xe0,0xc0,0x70,\r
+0xff,0xf0,\r
+};\r
+\r
+static const BitmapCharRec ch90 = {13,17,-1,0,15,ch90data};\r
+\r
+/* char: 0x59 'Y' */\r
+\r
+static const GLubyte ch89data[] = {\r
+0x7,0xe0,0x1,0x80,0x1,0x80,0x1,0x80,0x1,0x80,0x1,0x80,0x1,0x80,0x3,0xc0,\r
+0x3,0x40,0x6,0x60,0x6,0x20,0xc,0x30,0x1c,0x10,0x18,0x18,0x38,0x8,0x30,0xc,\r
+0xfc,0x3f,\r
+};\r
+\r
+static const BitmapCharRec ch89 = {16,17,0,0,16,ch89data};\r
+\r
+/* char: 0x58 'X' */\r
+\r
+static const GLubyte ch88data[] = {\r
+0xfc,0xf,0xc0,0x30,0x3,0x80,0x18,0x7,0x0,0x8,0xe,0x0,0x4,0xc,0x0,0x6,\r
+0x18,0x0,0x2,0x38,0x0,0x1,0x70,0x0,0x0,0xe0,0x0,0x0,0xc0,0x0,0x1,0xc0,\r
+0x0,0x3,0xa0,0x0,0x3,0x10,0x0,0x6,0x8,0x0,0xe,0xc,0x0,0x1c,0x6,0x0,\r
+0x7e,0xf,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch88 = {18,17,0,0,18,ch88data};\r
+\r
+/* char: 0x57 'W' */\r
+\r
+static const GLubyte ch87data[] = {\r
+0x1,0x83,0x0,0x1,0x83,0x0,0x1,0x83,0x80,0x3,0x87,0x80,0x3,0x46,0x80,0x3,\r
+0x46,0xc0,0x6,0x46,0x40,0x6,0x4c,0x40,0x6,0x4c,0x60,0xc,0x2c,0x60,0xc,0x2c,\r
+0x20,0x18,0x2c,0x20,0x18,0x18,0x30,0x18,0x18,0x10,0x30,0x18,0x10,0x30,0x18,0x18,\r
+0xfc,0x7e,0x7e,\r
+};\r
+\r
+static const BitmapCharRec ch87 = {23,17,0,0,23,ch87data};\r
+\r
+/* char: 0x56 'V' */\r
+\r
+static const GLubyte ch86data[] = {\r
+0x1,0x80,0x0,0x1,0x80,0x0,0x1,0x80,0x0,0x3,0xc0,0x0,0x3,0x40,0x0,0x3,\r
+0x60,0x0,0x6,0x20,0x0,0x6,0x20,0x0,0x6,0x30,0x0,0xc,0x10,0x0,0xc,0x18,\r
+0x0,0x18,0x8,0x0,0x18,0x8,0x0,0x18,0xc,0x0,0x30,0x4,0x0,0x30,0x6,0x0,\r
+0xfc,0x1f,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch86 = {17,17,0,0,17,ch86data};\r
+\r
+/* char: 0x55 'U' */\r
+\r
+static const GLubyte ch85data[] = {\r
+0x7,0xe0,0x1c,0x30,0x18,0x8,0x30,0x8,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,\r
+0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,\r
+0xfc,0x1f,\r
+};\r
+\r
+static const BitmapCharRec ch85 = {16,17,-1,0,18,ch85data};\r
+\r
+/* char: 0x54 'T' */\r
+\r
+static const GLubyte ch84data[] = {\r
+0xf,0xc0,0x3,0x0,0x3,0x0,0x3,0x0,0x3,0x0,0x3,0x0,0x3,0x0,0x3,0x0,\r
+0x3,0x0,0x3,0x0,0x3,0x0,0x3,0x0,0x3,0x0,0x83,0x4,0x83,0x4,0xc3,0xc,\r
+0xff,0xfc,\r
+};\r
+\r
+static const BitmapCharRec ch84 = {14,17,-1,0,16,ch84data};\r
+\r
+/* char: 0x53 'S' */\r
+\r
+static const GLubyte ch83data[] = {\r
+0x9e,0x0,0xf1,0x80,0xc0,0xc0,0x80,0x60,0x80,0x60,0x0,0x60,0x0,0xe0,0x3,0xc0,\r
+0xf,0x80,0x1e,0x0,0x78,0x0,0xe0,0x0,0xc0,0x40,0xc0,0x40,0xc0,0xc0,0x63,0xc0,\r
+0x1e,0x40,\r
+};\r
+\r
+static const BitmapCharRec ch83 = {11,17,-1,0,13,ch83data};\r
+\r
+/* char: 0x52 'R' */\r
+\r
+static const GLubyte ch82data[] = {\r
+0xfc,0x1e,0x30,0x1c,0x30,0x38,0x30,0x70,0x30,0x60,0x30,0xc0,0x31,0xc0,0x33,0x80,\r
+0x3f,0xc0,0x30,0x70,0x30,0x30,0x30,0x38,0x30,0x18,0x30,0x38,0x30,0x30,0x30,0x70,\r
+0xff,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch82 = {15,17,-1,0,16,ch82data};\r
+\r
+/* char: 0x51 'Q' */\r
+\r
+static const GLubyte ch81data[] = {\r
+0x0,0xf,0x0,0x38,0x0,0x70,0x0,0xe0,0x1,0xc0,0x7,0xe0,0x1c,0x38,0x38,0x1c,\r
+0x60,0x6,0x60,0x6,0xc0,0x3,0xc0,0x3,0xc0,0x3,0xc0,0x3,0xc0,0x3,0xc0,0x3,\r
+0xc0,0x3,0x60,0x6,0x60,0x6,0x38,0x1c,0x1c,0x38,0x7,0xe0,\r
+};\r
+\r
+static const BitmapCharRec ch81 = {16,22,-1,5,18,ch81data};\r
+\r
+/* char: 0x50 'P' */\r
+\r
+static const GLubyte ch80data[] = {\r
+0xfc,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,\r
+0x3f,0xc0,0x30,0x70,0x30,0x30,0x30,0x18,0x30,0x18,0x30,0x18,0x30,0x30,0x30,0x70,\r
+0xff,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch80 = {13,17,-1,0,15,ch80data};\r
+\r
+/* char: 0x4f 'O' */\r
+\r
+static const GLubyte ch79data[] = {\r
+0x7,0xe0,0x1c,0x38,0x38,0x1c,0x60,0x6,0x60,0x6,0xc0,0x3,0xc0,0x3,0xc0,0x3,\r
+0xc0,0x3,0xc0,0x3,0xc0,0x3,0xc0,0x3,0x60,0x6,0x60,0x6,0x38,0x1c,0x1c,0x38,\r
+0x7,0xe0,\r
+};\r
+\r
+static const BitmapCharRec ch79 = {16,17,-1,0,18,ch79data};\r
+\r
+/* char: 0x4e 'N' */\r
+\r
+static const GLubyte ch78data[] = {\r
+0xf8,0xc,0x20,0x1c,0x20,0x1c,0x20,0x34,0x20,0x64,0x20,0x64,0x20,0xc4,0x21,0x84,\r
+0x21,0x84,0x23,0x4,0x26,0x4,0x26,0x4,0x2c,0x4,0x38,0x4,0x38,0x4,0x30,0x4,\r
+0xf0,0x1f,\r
+};\r
+\r
+static const BitmapCharRec ch78 = {16,17,-1,0,18,ch78data};\r
+\r
+/* char: 0x4d 'M' */\r
+\r
+static const GLubyte ch77data[] = {\r
+0xf8,0x21,0xf8,0x20,0x60,0x60,0x20,0x60,0x60,0x20,0xd0,0x60,0x20,0xd0,0x60,0x21,\r
+0x88,0x60,0x21,0x88,0x60,0x23,0x8,0x60,0x23,0x4,0x60,0x26,0x4,0x60,0x26,0x2,\r
+0x60,0x2c,0x2,0x60,0x2c,0x2,0x60,0x38,0x1,0x60,0x38,0x1,0x60,0x30,0x0,0xe0,\r
+0xf0,0x0,0xf8,\r
+};\r
+\r
+static const BitmapCharRec ch77 = {21,17,-1,0,22,ch77data};\r
+\r
+/* char: 0x4c 'L' */\r
+\r
+static const GLubyte ch76data[] = {\r
+0xff,0xf8,0x30,0x18,0x30,0x8,0x30,0x8,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,\r
+0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,\r
+0xfc,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch76 = {13,17,-1,0,14,ch76data};\r
+\r
+/* char: 0x4b 'K' */\r
+\r
+static const GLubyte ch75data[] = {\r
+0xfc,0x1f,0x30,0xe,0x30,0x1c,0x30,0x38,0x30,0x70,0x30,0xe0,0x31,0xc0,0x33,0x80,\r
+0x3f,0x0,0x3e,0x0,0x33,0x0,0x31,0x80,0x30,0xc0,0x30,0x60,0x30,0x30,0x30,0x18,\r
+0xfc,0x7e,\r
+};\r
+\r
+static const BitmapCharRec ch75 = {16,17,-1,0,17,ch75data};\r
+\r
+/* char: 0x4a 'J' */\r
+\r
+static const GLubyte ch74data[] = {\r
+0x78,0x0,0xcc,0x0,0xc6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,\r
+0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,\r
+0x1f,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch74 = {9,17,-1,0,11,ch74data};\r
+\r
+/* char: 0x49 'I' */\r
+\r
+static const GLubyte ch73data[] = {\r
+0xfc,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,\r
+0xfc,\r
+};\r
+\r
+static const BitmapCharRec ch73 = {6,17,-1,0,8,ch73data};\r
+\r
+/* char: 0x48 'H' */\r
+\r
+static const GLubyte ch72data[] = {\r
+0xfc,0x1f,0x80,0x30,0x6,0x0,0x30,0x6,0x0,0x30,0x6,0x0,0x30,0x6,0x0,0x30,\r
+0x6,0x0,0x30,0x6,0x0,0x30,0x6,0x0,0x3f,0xfe,0x0,0x30,0x6,0x0,0x30,0x6,\r
+0x0,0x30,0x6,0x0,0x30,0x6,0x0,0x30,0x6,0x0,0x30,0x6,0x0,0x30,0x6,0x0,\r
+0xfc,0x1f,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch72 = {17,17,-1,0,19,ch72data};\r
+\r
+/* char: 0x47 'G' */\r
+\r
+static const GLubyte ch71data[] = {\r
+0x7,0xe0,0x1e,0x38,0x38,0x1c,0x60,0xc,0x60,0xc,0xc0,0xc,0xc0,0xc,0xc0,0x3f,\r
+0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0x60,0x4,0x60,0x4,0x38,0xc,0x1c,0x3c,\r
+0x7,0xe4,\r
+};\r
+\r
+static const BitmapCharRec ch71 = {16,17,-1,0,18,ch71data};\r
+\r
+/* char: 0x46 'F' */\r
+\r
+static const GLubyte ch70data[] = {\r
+0xfc,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x20,0x30,0x20,\r
+0x3f,0xe0,0x30,0x20,0x30,0x20,0x30,0x0,0x30,0x0,0x30,0x10,0x30,0x10,0x30,0x30,\r
+0xff,0xf0,\r
+};\r
+\r
+static const BitmapCharRec ch70 = {12,17,-1,0,14,ch70data};\r
+\r
+/* char: 0x45 'E' */\r
+\r
+static const GLubyte ch69data[] = {\r
+0xff,0xf8,0x30,0x18,0x30,0x8,0x30,0x8,0x30,0x0,0x30,0x0,0x30,0x40,0x30,0x40,\r
+0x3f,0xc0,0x30,0x40,0x30,0x40,0x30,0x0,0x30,0x0,0x30,0x10,0x30,0x10,0x30,0x30,\r
+0xff,0xf0,\r
+};\r
+\r
+static const BitmapCharRec ch69 = {13,17,-1,0,15,ch69data};\r
+\r
+/* char: 0x44 'D' */\r
+\r
+static const GLubyte ch68data[] = {\r
+0xff,0xc0,0x30,0x70,0x30,0x38,0x30,0xc,0x30,0xc,0x30,0x6,0x30,0x6,0x30,0x6,\r
+0x30,0x6,0x30,0x6,0x30,0x6,0x30,0x6,0x30,0xc,0x30,0xc,0x30,0x38,0x30,0x70,\r
+0xff,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch68 = {15,17,-1,0,17,ch68data};\r
+\r
+/* char: 0x43 'C' */\r
+\r
+static const GLubyte ch67data[] = {\r
+0x7,0xe0,0x1e,0x38,0x38,0x8,0x60,0x4,0x60,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,\r
+0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0x60,0x4,0x60,0x4,0x38,0xc,0x1c,0x3c,\r
+0x7,0xe4,\r
+};\r
+\r
+static const BitmapCharRec ch67 = {14,17,-1,0,16,ch67data};\r
+\r
+/* char: 0x42 'B' */\r
+\r
+static const GLubyte ch66data[] = {\r
+0xff,0xe0,0x30,0x78,0x30,0x18,0x30,0xc,0x30,0xc,0x30,0xc,0x30,0x18,0x30,0x38,\r
+0x3f,0xe0,0x30,0x40,0x30,0x30,0x30,0x18,0x30,0x18,0x30,0x18,0x30,0x30,0x30,0x70,\r
+0xff,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch66 = {14,17,-1,0,16,ch66data};\r
+\r
+/* char: 0x41 'A' */\r
+\r
+static const GLubyte ch65data[] = {\r
+0xfc,0x1f,0x80,0x30,0x6,0x0,0x10,0x6,0x0,0x10,0xc,0x0,0x18,0xc,0x0,0x8,\r
+0xc,0x0,0xf,0xf8,0x0,0xc,0x18,0x0,0x4,0x18,0x0,0x4,0x30,0x0,0x6,0x30,\r
+0x0,0x2,0x30,0x0,0x2,0x60,0x0,0x1,0x60,0x0,0x1,0xc0,0x0,0x1,0xc0,0x0,\r
+0x0,0x80,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch65 = {17,17,0,0,17,ch65data};\r
+\r
+/* char: 0x40 '@' */\r
+\r
+static const GLubyte ch64data[] = {\r
+0x3,0xf0,0x0,0xe,0xc,0x0,0x18,0x0,0x0,0x30,0x0,0x0,0x61,0xde,0x0,0x63,\r
+0x7b,0x0,0xc6,0x39,0x80,0xc6,0x18,0x80,0xc6,0x18,0xc0,0xc6,0x18,0x40,0xc6,0xc,\r
+0x40,0xc3,0xc,0x40,0xc3,0x8c,0x40,0xe1,0xfc,0x40,0x60,0xec,0xc0,0x70,0x0,0x80,\r
+0x38,0x1,0x80,0x1c,0x3,0x0,0xf,0xe,0x0,0x3,0xf8,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch64 = {18,20,-2,3,22,ch64data};\r
+\r
+/* char: 0x3f '?' */\r
+\r
+static const GLubyte ch63data[] = {\r
+0x30,0x30,0x0,0x0,0x10,0x10,0x10,0x18,0x18,0xc,0xe,0x7,0xc3,0xc3,0x83,0xc6,\r
+0x7c,\r
+};\r
+\r
+static const BitmapCharRec ch63 = {8,17,-2,0,11,ch63data};\r
+\r
+/* char: 0x3e '>' */\r
+\r
+static const GLubyte ch62data[] = {\r
+0xc0,0x0,0x70,0x0,0x1c,0x0,0x7,0x0,0x1,0xc0,0x0,0x60,0x1,0xc0,0x7,0x0,\r
+0x1c,0x0,0x70,0x0,0xc0,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch62 = {11,11,-1,-1,13,ch62data};\r
+\r
+/* char: 0x3d '=' */\r
+\r
+static const GLubyte ch61data[] = {\r
+0xff,0xf0,0xff,0xf0,0x0,0x0,0x0,0x0,0xff,0xf0,0xff,0xf0,\r
+};\r
+\r
+static const BitmapCharRec ch61 = {12,6,-1,-4,14,ch61data};\r
+\r
+/* char: 0x3c '<' */\r
+\r
+static const GLubyte ch60data[] = {\r
+0x0,0x60,0x1,0xc0,0x7,0x0,0x1c,0x0,0x70,0x0,0xc0,0x0,0x70,0x0,0x1c,0x0,\r
+0x7,0x0,0x1,0xc0,0x0,0x60,\r
+};\r
+\r
+static const BitmapCharRec ch60 = {11,11,-1,-1,13,ch60data};\r
+\r
+/* char: 0x3b ';' */\r
+\r
+static const GLubyte ch59data[] = {\r
+0xc0,0x60,0x20,0xe0,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch59 = {3,14,-2,3,7,ch59data};\r
+\r
+/* char: 0x3a ':' */\r
+\r
+static const GLubyte ch58data[] = {\r
+0xc0,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch58 = {2,11,-2,0,6,ch58data};\r
+\r
+/* char: 0x39 '9' */\r
+\r
+static const GLubyte ch57data[] = {\r
+0xf0,0x0,0x1c,0x0,0x6,0x0,0x3,0x0,0x3,0x80,0x1,0x80,0x1d,0x80,0x73,0xc0,\r
+0x61,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc1,0xc0,0x61,0x80,0x77,0x80,\r
+0x1e,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch57 = {10,17,-1,0,12,ch57data};\r
+\r
+/* char: 0x38 '8' */\r
+\r
+static const GLubyte ch56data[] = {\r
+0x1e,0x0,0x73,0x80,0xe1,0x80,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x41,0xc0,0x61,0x80,\r
+0x37,0x0,0x1e,0x0,0x1e,0x0,0x33,0x0,0x61,0x80,0x61,0x80,0x61,0x80,0x33,0x0,\r
+0x1e,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch56 = {10,17,-1,0,12,ch56data};\r
+\r
+/* char: 0x37 '7' */\r
+\r
+static const GLubyte ch55data[] = {\r
+0x18,0x0,0x18,0x0,0xc,0x0,0xc,0x0,0xc,0x0,0x4,0x0,0x6,0x0,0x6,0x0,\r
+0x2,0x0,0x3,0x0,0x3,0x0,0x1,0x0,0x1,0x80,0x81,0x80,0xc0,0xc0,0xff,0xc0,\r
+0x7f,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch55 = {10,17,-1,0,12,ch55data};\r
+\r
+/* char: 0x36 '6' */\r
+\r
+static const GLubyte ch54data[] = {\r
+0x1e,0x0,0x7b,0x80,0x61,0x80,0xe0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,\r
+0xc1,0x80,0xf3,0x80,0xee,0x0,0x60,0x0,0x70,0x0,0x30,0x0,0x18,0x0,0xe,0x0,\r
+0x3,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch54 = {10,17,-1,0,12,ch54data};\r
+\r
+/* char: 0x35 '5' */\r
+\r
+static const GLubyte ch53data[] = {\r
+0x7e,0x0,0xe3,0x80,0xc1,0x80,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x1,0xc0,\r
+0x3,0x80,0xf,0x80,0x7e,0x0,0x78,0x0,0x60,0x0,0x20,0x0,0x20,0x0,0x1f,0x80,\r
+0x1f,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch53 = {10,17,-1,0,12,ch53data};\r
+\r
+/* char: 0x34 '4' */\r
+\r
+static const GLubyte ch52data[] = {\r
+0x3,0x0,0x3,0x0,0x3,0x0,0x3,0x0,0xff,0xc0,0xff,0xc0,0xc3,0x0,0x43,0x0,\r
+0x63,0x0,0x23,0x0,0x33,0x0,0x13,0x0,0x1b,0x0,0xb,0x0,0x7,0x0,0x7,0x0,\r
+0x3,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch52 = {10,17,-1,0,12,ch52data};\r
+\r
+/* char: 0x33 '3' */\r
+\r
+static const GLubyte ch51data[] = {\r
+0x78,0x0,0xe6,0x0,0xc3,0x0,0x1,0x0,0x1,0x80,0x1,0x80,0x1,0x80,0x3,0x80,\r
+0x7,0x0,0x1e,0x0,0xc,0x0,0x6,0x0,0x83,0x0,0x83,0x0,0x47,0x0,0x7e,0x0,\r
+0x1c,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch51 = {9,17,-1,0,12,ch51data};\r
+\r
+/* char: 0x32 '2' */\r
+\r
+static const GLubyte ch50data[] = {\r
+0xff,0x80,0xff,0xc0,0x60,0x40,0x30,0x0,0x18,0x0,0xc,0x0,0x4,0x0,0x6,0x0,\r
+0x3,0x0,0x3,0x0,0x1,0x80,0x1,0x80,0x81,0x80,0x81,0x80,0x43,0x80,0x7f,0x0,\r
+0x1c,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch50 = {10,17,-1,0,12,ch50data};\r
+\r
+/* char: 0x31 '1' */\r
+\r
+static const GLubyte ch49data[] = {\r
+0xff,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x78,0x18,\r
+0x8,\r
+};\r
+\r
+static const BitmapCharRec ch49 = {8,17,-2,0,12,ch49data};\r
+\r
+/* char: 0x30 '0' */\r
+\r
+static const GLubyte ch48data[] = {\r
+0x1e,0x0,0x33,0x0,0x61,0x80,0x61,0x80,0xe1,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,\r
+0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x61,0x80,0x61,0x80,0x33,0x0,\r
+0x1e,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch48 = {10,17,-1,0,12,ch48data};\r
+\r
+/* char: 0x2f '/' */\r
+\r
+static const GLubyte ch47data[] = {\r
+0xc0,0xc0,0xc0,0x60,0x60,0x20,0x30,0x30,0x10,0x18,0x18,0x8,0xc,0xc,0x4,0x6,\r
+0x6,0x3,0x3,0x3,\r
+};\r
+\r
+static const BitmapCharRec ch47 = {8,20,1,3,7,ch47data};\r
+\r
+/* char: 0x2e '.' */\r
+\r
+static const GLubyte ch46data[] = {\r
+0xc0,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch46 = {2,2,-2,0,6,ch46data};\r
+\r
+/* char: 0x2d '-' */\r
+\r
+static const GLubyte ch45data[] = {\r
+0xff,0xf0,0xff,0xf0,\r
+};\r
+\r
+static const BitmapCharRec ch45 = {12,2,-1,-6,14,ch45data};\r
+\r
+/* char: 0x2c ',' */\r
+\r
+static const GLubyte ch44data[] = {\r
+0xc0,0x60,0x20,0xe0,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch44 = {3,5,-2,3,7,ch44data};\r
+\r
+/* char: 0x2b '+' */\r
+\r
+static const GLubyte ch43data[] = {\r
+0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0xff,0xf0,0xff,0xf0,0x6,0x0,\r
+0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch43 = {12,12,-1,-1,14,ch43data};\r
+\r
+/* char: 0x2a '*' */\r
+\r
+static const GLubyte ch42data[] = {\r
+0x8,0x0,0x1c,0x0,0xc9,0x80,0xeb,0x80,0x1c,0x0,0xeb,0x80,0xc9,0x80,0x1c,0x0,\r
+0x8,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch42 = {9,9,-2,-8,12,ch42data};\r
+\r
+/* char: 0x29 ')' */\r
+\r
+static const GLubyte ch41data[] = {\r
+0x80,0x40,0x20,0x30,0x10,0x18,0x18,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0x18,\r
+0x18,0x10,0x30,0x20,0x40,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch41 = {6,22,-1,5,8,ch41data};\r
+\r
+/* char: 0x28 '(' */\r
+\r
+static const GLubyte ch40data[] = {\r
+0x4,0x8,0x10,0x30,0x20,0x60,0x60,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x60,\r
+0x60,0x20,0x30,0x10,0x8,0x4,\r
+};\r
+\r
+static const BitmapCharRec ch40 = {6,22,-1,5,8,ch40data};\r
+\r
+/* char: 0x27 ''' */\r
+\r
+static const GLubyte ch39data[] = {\r
+0xc0,0x60,0x20,0xe0,0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch39 = {3,5,-3,-12,8,ch39data};\r
+\r
+/* char: 0x26 '&' */\r
+\r
+static const GLubyte ch38data[] = {\r
+0x3c,0x3c,0x7f,0x7e,0xe1,0xe1,0xc0,0xc0,0xc1,0xc0,0xc1,0xa0,0x63,0x20,0x37,0x10,\r
+0x1e,0x18,0xe,0x3e,0xf,0x0,0x1d,0x80,0x18,0xc0,0x18,0x40,0x18,0x40,0xc,0xc0,\r
+0x7,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch38 = {16,17,-1,0,18,ch38data};\r
+\r
+/* char: 0x25 '%' */\r
+\r
+static const GLubyte ch37data[] = {\r
+0x30,0x3c,0x0,0x18,0x72,0x0,0xc,0x61,0x0,0x4,0x60,0x80,0x6,0x60,0x80,0x3,\r
+0x30,0x80,0x1,0x19,0x80,0x1,0x8f,0x0,0x78,0xc0,0x0,0xe4,0x40,0x0,0xc2,0x60,\r
+0x0,0xc1,0x30,0x0,0xc1,0x10,0x0,0x61,0x18,0x0,0x33,0xfc,0x0,0x1e,0xc,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch37 = {17,16,-1,0,19,ch37data};\r
+\r
+/* char: 0x24 '$' */\r
+\r
+static const GLubyte ch36data[] = {\r
+0x4,0x0,0x4,0x0,0x3f,0x0,0xe5,0xc0,0xc4,0xc0,0x84,0x60,0x84,0x60,0x4,0x60,\r
+0x4,0xe0,0x7,0xc0,0x7,0x80,0x1e,0x0,0x3c,0x0,0x74,0x0,0x64,0x0,0x64,0x20,\r
+0x64,0x60,0x34,0xe0,0x1f,0x80,0x4,0x0,0x4,0x0,\r
+};\r
+\r
+static const BitmapCharRec ch36 = {11,21,0,2,12,ch36data};\r
+\r
+/* char: 0x23 '#' */\r
+\r
+static const GLubyte ch35data[] = {\r
+0x22,0x0,0x22,0x0,0x22,0x0,0x22,0x0,0x22,0x0,0xff,0xc0,0xff,0xc0,0x11,0x0,\r
+0x11,0x0,0x11,0x0,0x7f,0xe0,0x7f,0xe0,0x8,0x80,0x8,0x80,0x8,0x80,0x8,0x80,\r
+0x8,0x80,\r
+};\r
+\r
+static const BitmapCharRec ch35 = {11,17,-1,0,13,ch35data};\r
+\r
+/* char: 0x22 '"' */\r
+\r
+static const GLubyte ch34data[] = {\r
+0x88,0xcc,0xcc,0xcc,0xcc,\r
+};\r
+\r
+static const BitmapCharRec ch34 = {6,5,-1,-12,10,ch34data};\r
+\r
+/* char: 0x21 '!' */\r
+\r
+static const GLubyte ch33data[] = {\r
+0xc0,0xc0,0x0,0x0,0x0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,\r
+0xc0,\r
+};\r
+\r
+static const BitmapCharRec ch33 = {2,17,-3,0,8,ch33data};\r
+\r
+/* char: 0x20 ' ' */\r
+\r
+#ifdef _WIN32\r
+/* XXX Work around Microsoft OpenGL 1.1 bug where glBitmap with\r
+   a height or width of zero does not advance the raster position\r
+   as specified by OpenGL. (Cosmo OpenGL does not have this bug.) */\r
+static const GLubyte ch32data[] = { 0x0 };\r
+static const BitmapCharRec ch32 = {1,1,0,0,6,ch32data};\r
+#else\r
+static const BitmapCharRec ch32 = {0,0,0,0,6,0};\r
+#endif\r
+\r
+static const BitmapCharRec * const chars[] = {\r
+&ch32,\r
+&ch33,\r
+&ch34,\r
+&ch35,\r
+&ch36,\r
+&ch37,\r
+&ch38,\r
+&ch39,\r
+&ch40,\r
+&ch41,\r
+&ch42,\r
+&ch43,\r
+&ch44,\r
+&ch45,\r
+&ch46,\r
+&ch47,\r
+&ch48,\r
+&ch49,\r
+&ch50,\r
+&ch51,\r
+&ch52,\r
+&ch53,\r
+&ch54,\r
+&ch55,\r
+&ch56,\r
+&ch57,\r
+&ch58,\r
+&ch59,\r
+&ch60,\r
+&ch61,\r
+&ch62,\r
+&ch63,\r
+&ch64,\r
+&ch65,\r
+&ch66,\r
+&ch67,\r
+&ch68,\r
+&ch69,\r
+&ch70,\r
+&ch71,\r
+&ch72,\r
+&ch73,\r
+&ch74,\r
+&ch75,\r
+&ch76,\r
+&ch77,\r
+&ch78,\r
+&ch79,\r
+&ch80,\r
+&ch81,\r
+&ch82,\r
+&ch83,\r
+&ch84,\r
+&ch85,\r
+&ch86,\r
+&ch87,\r
+&ch88,\r
+&ch89,\r
+&ch90,\r
+&ch91,\r
+&ch92,\r
+&ch93,\r
+&ch94,\r
+&ch95,\r
+&ch96,\r
+&ch97,\r
+&ch98,\r
+&ch99,\r
+&ch100,\r
+&ch101,\r
+&ch102,\r
+&ch103,\r
+&ch104,\r
+&ch105,\r
+&ch106,\r
+&ch107,\r
+&ch108,\r
+&ch109,\r
+&ch110,\r
+&ch111,\r
+&ch112,\r
+&ch113,\r
+&ch114,\r
+&ch115,\r
+&ch116,\r
+&ch117,\r
+&ch118,\r
+&ch119,\r
+&ch120,\r
+&ch121,\r
+&ch122,\r
+&ch123,\r
+&ch124,\r
+&ch125,\r
+&ch126,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+0,\r
+&ch160,\r
+&ch161,\r
+&ch162,\r
+&ch163,\r
+&ch164,\r
+&ch165,\r
+&ch166,\r
+&ch167,\r
+&ch168,\r
+&ch169,\r
+&ch170,\r
+&ch171,\r
+&ch172,\r
+&ch173,\r
+&ch174,\r
+&ch175,\r
+&ch176,\r
+&ch177,\r
+&ch178,\r
+&ch179,\r
+&ch180,\r
+&ch181,\r
+&ch182,\r
+&ch183,\r
+&ch184,\r
+&ch185,\r
+&ch186,\r
+&ch187,\r
+&ch188,\r
+&ch189,\r
+&ch190,\r
+&ch191,\r
+&ch192,\r
+&ch193,\r
+&ch194,\r
+&ch195,\r
+&ch196,\r
+&ch197,\r
+&ch198,\r
+&ch199,\r
+&ch200,\r
+&ch201,\r
+&ch202,\r
+&ch203,\r
+&ch204,\r
+&ch205,\r
+&ch206,\r
+&ch207,\r
+&ch208,\r
+&ch209,\r
+&ch210,\r
+&ch211,\r
+&ch212,\r
+&ch213,\r
+&ch214,\r
+&ch215,\r
+&ch216,\r
+&ch217,\r
+&ch218,\r
+&ch219,\r
+&ch220,\r
+&ch221,\r
+&ch222,\r
+&ch223,\r
+&ch224,\r
+&ch225,\r
+&ch226,\r
+&ch227,\r
+&ch228,\r
+&ch229,\r
+&ch230,\r
+&ch231,\r
+&ch232,\r
+&ch233,\r
+&ch234,\r
+&ch235,\r
+&ch236,\r
+&ch237,\r
+&ch238,\r
+&ch239,\r
+&ch240,\r
+&ch241,\r
+&ch242,\r
+&ch243,\r
+&ch244,\r
+&ch245,\r
+&ch246,\r
+&ch247,\r
+&ch248,\r
+&ch249,\r
+&ch250,\r
+&ch251,\r
+&ch252,\r
+&ch253,\r
+&ch254,\r
+&ch255,\r
+};\r
+\r
+#if !defined(__IBMCPP__)\r
+const \r
+#endif\r
+BitmapFontRec glutBitmapTimesRoman24 = {\r
+"-adobe-times-medium-r-normal--24-240-75-75-p-124-iso8859-1",\r
+224,\r
+32,\r
+chars\r
+};\r
+\r
diff --git a/src/glut/os2/glut_util.cpp b/src/glut/os2/glut_util.cpp
new file mode 100644 (file)
index 0000000..76f2502
--- /dev/null
@@ -0,0 +1,90 @@
+\r
+/* Copyright (c) Mark J. Kilgard, 1994. */\r
+\r
+/* This program is freely distributable without licensing fees\r
+   and is provided without guarantee or warrantee expressed or\r
+   implied. This program is -not- in the public domain. */\r
+\r
+#include <stdlib.h>\r
+#include <stdarg.h>\r
+#include <string.h>\r
+#include <stdio.h>\r
+\r
+#include "glutint.h"\r
+\r
+#if !defined(__OS2__)\r
+\r
+/* strdup is actually not a standard ANSI C or POSIX routine\r
+   so implement a private one for GLUT.  OpenVMS does not have a\r
+   strdup; Linux's standard libc doesn't declare strdup by default\r
+   (unless BSD or SVID interfaces are requested). */\r
+char *\r
+__glutStrdup(const char *string)\r
+{\r
+  char *copy;\r
+\r
+  copy = (char*) malloc(strlen(string) + 1);\r
+  if (copy == NULL)\r
+    return NULL;\r
+  strcpy(copy, string);\r
+  return copy;\r
+}\r
+#endif\r
+\r
+void\r
+__glutWarning(char *format,...)\r
+{\r
+  va_list args;\r
+\r
+  va_start(args, format);\r
+  fprintf(stderr, "GLUT: Warning in %s: ",\r
+    __glutProgramName ? __glutProgramName : "(unamed)");\r
+  vfprintf(stderr, format, args);\r
+  va_end(args);\r
+  putc('\n', stderr);\r
+}\r
+\r
+/* CENTRY */\r
+void GLUTAPIENTRY\r
+glutReportErrors(void)\r
+{\r
+  GLenum error;\r
+\r
+  while ((error = glGetError()) != GL_NO_ERROR)\r
+    __glutWarning("GL error: %s", gluErrorString(error));\r
+}\r
+/* ENDCENTRY */\r
+\r
+void\r
+__glutFatalError(char *format,...)\r
+{\r
+  va_list args;\r
+\r
+  va_start(args, format);\r
+  fprintf(stderr, "GLUT: Fatal Error in %s: ",\r
+    __glutProgramName ? __glutProgramName : "(unamed)");\r
+  vfprintf(stderr, format, args);\r
+  va_end(args);\r
+  putc('\n', stderr);\r
+/*                   || defined(__OS2__) */\r
+#if defined(_WIN32)\r
+  if (__glutExitFunc) {\r
+    __glutExitFunc(1);\r
+  }\r
+#endif\r
+  exit(1);\r
+}\r
+\r
+void\r
+__glutFatalUsage(char *format,...)\r
+{\r
+  va_list args;\r
+\r
+  va_start(args, format);\r
+  fprintf(stderr, "GLUT: Fatal API Usage in %s: ",\r
+    __glutProgramName ? __glutProgramName : "(unamed)");\r
+  vfprintf(stderr, format, args);\r
+  va_end(args);\r
+  putc('\n', stderr);\r
+  abort();\r
+}\r
diff --git a/src/glut/os2/glut_vidresize.cpp b/src/glut/os2/glut_vidresize.cpp
new file mode 100644 (file)
index 0000000..f9d345d
--- /dev/null
@@ -0,0 +1,232 @@
+\r
+/* Copyright (c) Mark J. Kilgard, 1996. */\r
+\r
+/* This program is freely distributable without licensing fees\r
+   and is provided without guarantee or warrantee expressed or\r
+   implied. This program is -not- in the public domain. */\r
+\r
+#include <stdlib.h>\r
+\r
+#ifdef __sgi\r
+#include <dlfcn.h>\r
+#endif\r
+\r
+#include "glutint.h"\r
+\r
+/* Grumble.  The IRIX 6.3 and early IRIX 6.4 OpenGL headers\r
+   support the video resize extension, but failed to define\r
+   GLX_SGIX_video_resize. */\r
+#if 0\r
+#ifdef GLX_SYNC_FRAME_SGIX\r
+#define GLX_SGIX_video_resize 1\r
+#endif\r
+#endif\r
+\r
+#if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_video_resize)\r
+static int canVideoResize = -1;\r
+static int videoResizeChannel;\r
+#else\r
+static int canVideoResize = 0;\r
+#endif\r
+static int videoResizeInUse = 0;\r
+static int dx = -1, dy = -1, dw = -1, dh = -1;\r
+\r
+/* XXX Note that IRIX 6.2, 6.3, and some 6.4 versions have a\r
+   bug where programs seg-fault when they attempt video\r
+   resizing from an indirect OpenGL context (either local or\r
+   over a network). */\r
+\r
+#if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_video_resize)\r
+\r
+static volatile int errorCaught;\r
+\r
+/* ARGSUSED */\r
+static int\r
+catchXSGIvcErrors(Display * dpy, XErrorEvent * event)\r
+{\r
+  errorCaught = 1;\r
+  return 0;\r
+}\r
+#endif\r
+\r
+/* CENTRY */\r
+\r
+int GLUTAPIENTRY\r
+glutVideoResizeGet(GLenum param)\r
+{\r
+#if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_video_resize)\r
+  if (canVideoResize < 0) {\r
+    canVideoResize = __glutIsSupportedByGLX("GLX_SGIX_video_resize");\r
+    if (canVideoResize) {\r
+#if defined(__sgi) && __sgi\r
+      /* This is a hack because IRIX 6.2, 6.3, and some 6.4\r
+         versions were released with GLX_SGIX_video_resize\r
+         being advertised by the X server though the video\r
+         resize extension is not actually supported.  We try to\r
+         determine if the libGL.so we are using actually has a\r
+         video resize entrypoint before we try to use the\r
+         feature. */\r
+      void (*func) (void);\r
+      void *glxDso = dlopen("libGL.so", RTLD_LAZY);\r
+\r
+      func = (void (*)(void)) dlsym(glxDso, "glXQueryChannelDeltasSGIX");\r
+      if (!func) {\r
+        canVideoResize = 0;\r
+      } else\r
+#endif\r
+      {\r
+        char *channelString;\r
+        int (*handler) (Display *, XErrorEvent *);\r
+\r
+        channelString = getenv("GLUT_VIDEO_RESIZE_CHANNEL");\r
+        videoResizeChannel = channelString ? atoi(channelString) : 0;\r
+\r
+        /* Work around another annoying problem with SGI's\r
+           GLX_SGIX_video_resize implementation.  Early IRIX\r
+           6.4 OpenGL's advertise the extension and have the\r
+           video resize API, but an XSGIvc X protocol errors\r
+           result trying to use the API.  Set up an error\r
+           handler to intercept what would otherwise be a fatal\r
+           error.  If an error was recieved, do not report that\r
+           video resize is possible. */\r
+        handler = XSetErrorHandler(catchXSGIvcErrors);\r
+\r
+        errorCaught = 0;\r
+\r
+#if defined(GLX_GLXEXT_PROTOTYPES)\r
+#endif\r
+\r
+        __glut_glXQueryChannelDeltasSGIX(__glutDisplay, __glutScreen,\r
+          videoResizeChannel, &dx, &dy, &dw, &dh);\r
+\r
+        /* glXQueryChannelDeltasSGIX is an inherent X server\r
+           round-trip so we know we will have gotten either the\r
+           correct reply or and error by this time. */\r
+        XSetErrorHandler(handler);\r
+\r
+        /* Still yet another work around.  In IRIX 6.4 betas,\r
+           glXQueryChannelDeltasSGIX will return as if it\r
+           succeeded, but the values are filled with junk.\r
+           Watch to make sure the delta variables really make\r
+           sense. */\r
+        if (errorCaught ||\r
+          dx < 0 || dy < 0 || dw < 0 || dh < 0 ||\r
+          dx > 2048 || dy > 2048 || dw > 2048 || dh > 2048) {\r
+          canVideoResize = 0;\r
+        }\r
+      }\r
+    }\r
+  }\r
+#endif /* GLX_SGIX_video_resize */\r
+\r
+  switch (param) {\r
+  case GLUT_VIDEO_RESIZE_POSSIBLE:\r
+    return canVideoResize;\r
+  case GLUT_VIDEO_RESIZE_IN_USE:\r
+    return videoResizeInUse;\r
+  case GLUT_VIDEO_RESIZE_X_DELTA:\r
+    return dx;\r
+  case GLUT_VIDEO_RESIZE_Y_DELTA:\r
+    return dy;\r
+  case GLUT_VIDEO_RESIZE_WIDTH_DELTA:\r
+    return dw;\r
+  case GLUT_VIDEO_RESIZE_HEIGHT_DELTA:\r
+    return dh;\r
+  case GLUT_VIDEO_RESIZE_X:\r
+  case GLUT_VIDEO_RESIZE_Y:\r
+  case GLUT_VIDEO_RESIZE_WIDTH:\r
+  case GLUT_VIDEO_RESIZE_HEIGHT:\r
+#if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_video_resize)\r
+    if (videoResizeInUse) {\r
+      int x, y, width, height;\r
+\r
+      __glut_glXQueryChannelRectSGIX(__glutDisplay, __glutScreen,\r
+        videoResizeChannel, &x, &y, &width, &height);\r
+      switch (param) {\r
+      case GLUT_VIDEO_RESIZE_X:\r
+        return x;\r
+      case GLUT_VIDEO_RESIZE_Y:\r
+        return y;\r
+      case GLUT_VIDEO_RESIZE_WIDTH:\r
+        return width;\r
+      case GLUT_VIDEO_RESIZE_HEIGHT:\r
+        return height;\r
+      }\r
+    }\r
+#endif\r
+    return -1;\r
+  default:\r
+    __glutWarning("invalid glutVideoResizeGet parameter: %d", param);\r
+    return -1;\r
+  }\r
+}\r
+\r
+void GLUTAPIENTRY\r
+glutSetupVideoResizing(void)\r
+{\r
+#if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_video_resize)\r
+  if (glutVideoResizeGet(GLUT_VIDEO_RESIZE_POSSIBLE)) {\r
+    __glut_glXBindChannelToWindowSGIX(__glutDisplay, __glutScreen,\r
+      videoResizeChannel, __glutCurrentWindow->win);\r
+    videoResizeInUse = 1;\r
+  } else\r
+#endif\r
+    __glutFatalError("glutEstablishVideoResizing: video resizing not possible.\n");\r
+}\r
+\r
+void GLUTAPIENTRY\r
+glutStopVideoResizing(void)\r
+{\r
+#if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_video_resize)\r
+  if (glutVideoResizeGet(GLUT_VIDEO_RESIZE_POSSIBLE)) {\r
+    if (videoResizeInUse) {\r
+      __glut_glXBindChannelToWindowSGIX(__glutDisplay, __glutScreen,\r
+        videoResizeChannel, None);\r
+      videoResizeInUse = 0;\r
+    }\r
+  }\r
+#endif\r
+}\r
+\r
+/* ARGSUSED */\r
+void GLUTAPIENTRY\r
+glutVideoResize(int x, int y, int width, int height)\r
+{\r
+#if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_video_resize)\r
+  if (videoResizeInUse) {\r
+#ifdef GLX_SYNC_SWAP_SGIX\r
+    /* glXChannelRectSyncSGIX introduced in a patch to IRIX\r
+       6.2; the original unpatched IRIX 6.2 behavior is always\r
+       GLX_SYNC_SWAP_SGIX. */\r
+    __glut_glXChannelRectSyncSGIX(__glutDisplay, __glutScreen,\r
+      videoResizeChannel, GLX_SYNC_SWAP_SGIX);\r
+#endif\r
+    __glut_glXChannelRectSGIX(__glutDisplay, __glutScreen,\r
+      videoResizeChannel, x, y, width, height);\r
+  }\r
+#endif\r
+}\r
+\r
+/* ARGSUSED */\r
+void GLUTAPIENTRY\r
+glutVideoPan(int x, int y, int width, int height)\r
+{\r
+#if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_video_resize)\r
+  if (videoResizeInUse) {\r
+#ifdef GLX_SYNC_FRAME_SGIX\r
+    /* glXChannelRectSyncSGIX introduced in a patch to IRIX\r
+       6.2; the original unpatched IRIX 6.2 behavior is always\r
+       GLX_SYNC_SWAP_SGIX.  We just ignore that we cannot\r
+       accomplish GLX_SYNC_FRAME_SGIX on IRIX unpatched 6.2;\r
+       this means you'd need a glutSwapBuffers to actually\r
+       realize the video resize. */\r
+    __glut_glXChannelRectSyncSGIX(__glutDisplay, __glutScreen,\r
+      videoResizeChannel, GLX_SYNC_FRAME_SGIX);\r
+#endif\r
+    __glut_glXChannelRectSGIX(__glutDisplay, __glutScreen,\r
+      videoResizeChannel, x, y, width, height);\r
+  }\r
+#endif\r
+}\r
+\r
+/* ENDCENTRY */\r
diff --git a/src/glut/os2/glut_warp.cpp b/src/glut/os2/glut_warp.cpp
new file mode 100644 (file)
index 0000000..885e169
--- /dev/null
@@ -0,0 +1,29 @@
+\r
+/* Copyright (c) Mark J. Kilgard, 1996, 1997. */\r
+\r
+/* This program is freely distributable without licensing fees\r
+   and is provided without guarantee or warrantee expressed or\r
+   implied. This program is -not- in the public domain. */\r
+\r
+#include <stdlib.h>\r
+#include <stdarg.h>\r
+#include <stdio.h>\r
+\r
+#include "glutint.h"\r
+\r
+/* CENTRY */\r
+void GLUTAPIENTRY\r
+glutWarpPointer(int x, int y)\r
+{\r
+//  XWarpPointer(__glutDisplay, None, __glutCurrentWindow->win,\r
+//    0, 0, 0, 0, x, y);\r
+  POINTL point;\r
+  point.x = x;\r
+  point.y = y;\r
+  WinMapWindowPoints(__glutCurrentWindow->win,HWND_DESKTOP,&point,1);\r
+  WinSetPointerPos(HWND_DESKTOP, point.x, point.y);\r
+\r
+  XFlush(__glutDisplay);\r
+}\r
+\r
+/* ENDCENTRY */\r
diff --git a/src/glut/os2/glut_win.cpp b/src/glut/os2/glut_win.cpp
new file mode 100644 (file)
index 0000000..82abba8
--- /dev/null
@@ -0,0 +1,1221 @@
+\r
+/* Copyright (c) Mark J. Kilgard, 1994, 1997.  */\r
+\r
+/* This program is freely distributable without licensing fees\r
+   and is provided without guarantee or warrantee expressed or\r
+   implied. This program is -not- in the public domain. */\r
+\r
+#ifdef __VMS\r
+#include <GL/vms_x_fix.h>\r
+#endif\r
+\r
+#include <stdlib.h>\r
+#include <stdio.h>\r
+#include <string.h>\r
+#include <assert.h>\r
+#if defined(__OS2__)\r
+#define POKA 0\r
+  #include "WarpGL.h"\r
+  #include "glutos2.h"\r
+  #include "glutint.h"\r
+\r
+  #include "gl\os2mesa.h"\r
+\r
+//\r
+//define for resource id for main GLUT window, in samples it is  defined in GL_TEST.h\r
+   #define ID_WINDOW            256\r
+\r
+   int evglSetPixelFormat(int iPixelFormat);\r
+   HPS   hpsCurrent;\r
+\r
+#elif !defined(_WIN32)\r
+\r
+#include <X11/Xlib.h>\r
+#include <X11/Xatom.h>\r
+#endif\r
+\r
+#include "glutint.h"\r
+\r
+GLUTwindow *__glutCurrentWindow = NULL;\r
+GLUTwindow **__glutWindowList = NULL;\r
+int __glutWindowListSize = 0;\r
+#if !defined(_WIN32) && !defined(__OS2__)\r
+GLUTstale *__glutStaleWindowList = NULL;\r
+#endif\r
+GLUTwindow *__glutMenuWindow = NULL;\r
+\r
+void (*__glutFreeOverlayFunc) (GLUToverlay *);\r
+XVisualInfo *(*__glutDetermineVisualFromString) (char *string, Bool * treatAsSingle,\r
+  Criterion * requiredCriteria, int nRequired, int requiredMask, void** fbc) = NULL;\r
+\r
+static Criterion requiredWindowCriteria[] =\r
+{\r
+  {LEVEL, EQ, 0},\r
+  {TRANSPARENT, EQ, 0}\r
+};\r
+static int numRequiredWindowCriteria = sizeof(requiredWindowCriteria) / sizeof(Criterion);\r
+static int requiredWindowCriteriaMask = (1 << LEVEL) | (1 << TRANSPARENT);\r
+\r
+static void\r
+cleanWindowWorkList(GLUTwindow * window)\r
+{\r
+  GLUTwindow **pEntry = &__glutWindowWorkList;\r
+  GLUTwindow *entry = __glutWindowWorkList;\r
+\r
+  /* Tranverse singly-linked window work list look for the\r
+     window. */\r
+  while (entry) {\r
+    if (entry == window) {\r
+      /* Found it; delete it. */\r
+      *pEntry = entry->prevWorkWin;\r
+      return;\r
+    } else {\r
+      pEntry = &entry->prevWorkWin;\r
+      entry = *pEntry;\r
+    }\r
+  }\r
+}\r
+\r
+#if !defined(_WIN32)  && !defined(__OS2PM__)\r
+\r
+static void\r
+cleanStaleWindowList(GLUTwindow * window)\r
+{\r
+  GLUTstale **pEntry = &__glutStaleWindowList;\r
+  GLUTstale *entry = __glutStaleWindowList;\r
+\r
+  /* Tranverse singly-linked stale window list look for the\r
+     window ID. */\r
+  while (entry) {\r
+    if (entry->window == window) {\r
+      /* Found it; delete it. */\r
+      *pEntry = entry->next;\r
+      free(entry);\r
+      return;\r
+    } else {\r
+      pEntry = &entry->next;\r
+      entry = *pEntry;\r
+    }\r
+  }\r
+}\r
+\r
+#endif\r
+\r
+static GLUTwindow *__glutWindowCache = NULL;\r
+\r
+GLUTwindow *\r
+__glutGetWindow(Window win)\r
+{\r
+  int i;\r
+\r
+  /* Does win belong to the last window ID looked up? */\r
+  if (__glutWindowCache && (win == __glutWindowCache->win ||\r
+      (__glutWindowCache->overlay && win ==\r
+        __glutWindowCache->overlay->win))) {\r
+    return\r
+      __glutWindowCache;\r
+  }\r
+  /* Otherwise scan the window list looking for the window ID. */\r
+  for (i = 0; i < __glutWindowListSize; i++) {\r
+    if (__glutWindowList[i]) {\r
+      if (win == __glutWindowList[i]->win) {\r
+        __glutWindowCache = __glutWindowList[i];\r
+        return __glutWindowCache;\r
+      }\r
+      if (__glutWindowList[i]->overlay) {\r
+        if (win == __glutWindowList[i]->overlay->win) {\r
+          __glutWindowCache = __glutWindowList[i];\r
+          return __glutWindowCache;\r
+        }\r
+      }\r
+    }\r
+  }\r
+#if !defined(_WIN32)  && !defined(__OS2PM__)\r
+  {\r
+    GLUTstale *entry;\r
+\r
+    /* Scan through destroyed overlay window IDs for which no\r
+       DestroyNotify has yet been received. */\r
+    for (entry = __glutStaleWindowList; entry; entry = entry->next) {\r
+      if (entry->win == win)\r
+        return entry->window;\r
+    }\r
+  }\r
+#endif\r
+  return NULL;\r
+}\r
+\r
+/* CENTRY */\r
+int GLUTAPIENTRY\r
+glutGetWindow(void)\r
+{\r
+  if (__glutCurrentWindow) {\r
+    return __glutCurrentWindow->num + 1;\r
+  } else {\r
+    return 0;\r
+  }\r
+}\r
+/* ENDCENTRY */\r
+\r
+void\r
+__glutSetWindow(GLUTwindow * window)\r
+{\r
+  /* It is tempting to try to short-circuit the call to\r
+     glXMakeCurrent if we "know" we are going to make current\r
+     to a window we are already current to.  In fact, this\r
+     assumption breaks when GLUT is expected to integrated with\r
+     other OpenGL windowing APIs that also make current to\r
+     OpenGL contexts.  Since glXMakeCurrent short-circuits the\r
+     "already bound" case, GLUT avoids the temptation to do so\r
+     too. */\r
+  __glutCurrentWindow = window;\r
+\r
+  MAKE_CURRENT_LAYER(__glutCurrentWindow);\r
+\r
+#if !defined(_WIN32)  && !defined(__OS2__)\r
+  /* We should be careful to force a finish between each\r
+     iteration through the GLUT main loop if indirect OpenGL\r
+     contexts are in use; indirect contexts tend to have  much\r
+     longer latency because lots of OpenGL extension requests\r
+     can queue up in the X protocol stream.  We accomplish this\r
+     by posting GLUT_FINISH_WORK to be done. */\r
+  if (!__glutCurrentWindow->isDirect)\r
+    __glutPutOnWorkList(__glutCurrentWindow, GLUT_FINISH_WORK);\r
+#endif\r
+\r
+  /* If debugging is enabled, we'll want to check this window\r
+     for any OpenGL errors every iteration through the GLUT\r
+     main loop.  To accomplish this, we post the\r
+     GLUT_DEBUG_WORK to be done on this window. */\r
+  if (__glutDebug) {\r
+    __glutPutOnWorkList(__glutCurrentWindow, GLUT_DEBUG_WORK);\r
+  }\r
+}\r
+\r
+/* CENTRY */\r
+void GLUTAPIENTRY\r
+glutSetWindow(int win)\r
+{\r
+  GLUTwindow *window;\r
+\r
+  if (win < 1 || win > __glutWindowListSize) {\r
+    __glutWarning("glutSetWindow attempted on bogus window.");\r
+    return;\r
+  }\r
+  window = __glutWindowList[win - 1];\r
+  if (!window) {\r
+    __glutWarning("glutSetWindow attempted on bogus window.");\r
+    return;\r
+  }\r
+  __glutSetWindow(window);\r
+}\r
+/* ENDCENTRY */\r
+\r
+static int\r
+getUnusedWindowSlot(void)\r
+{\r
+  int i;\r
+\r
+  /* Look for allocated, unused slot. */\r
+  for (i = 0; i < __glutWindowListSize; i++) {\r
+    if (!__glutWindowList[i]) {\r
+      return i;\r
+    }\r
+  }\r
+  /* Allocate a new slot. */\r
+  __glutWindowListSize++;\r
+  if (__glutWindowList) {\r
+    __glutWindowList = (GLUTwindow **)\r
+      realloc(__glutWindowList,\r
+      __glutWindowListSize * sizeof(GLUTwindow *));\r
+  } else {\r
+    /* XXX Some realloc's do not correctly perform a malloc\r
+       when asked to perform a realloc on a NULL pointer,\r
+       though the ANSI C library spec requires this. */\r
+    __glutWindowList = (GLUTwindow **)\r
+      malloc(sizeof(GLUTwindow *));\r
+  }\r
+  if (!__glutWindowList)\r
+    __glutFatalError("out of memory.");\r
+  __glutWindowList[__glutWindowListSize - 1] = NULL;\r
+  return __glutWindowListSize - 1;\r
+}\r
+\r
+static XVisualInfo *\r
+getVisualInfoCI(unsigned int mode)\r
+{\r
+#if POKA\r
+  static int bufSizeList[] =\r
+  {16, 12, 8, 4, 2, 1, 0};\r
+  XVisualInfo *vi;\r
+  int list[32];\r
+  int i, n = 0;\r
+\r
+  /* Should not be looking at display mode mask if\r
+     __glutDisplayString is non-NULL. */\r
+  assert(!__glutDisplayString);\r
+\r
+  list[n++] = GLX_BUFFER_SIZE;\r
+  list[n++] = 1;\r
+  if (GLUT_WIND_IS_DOUBLE(mode)) {\r
+    list[n++] = GLX_DOUBLEBUFFER;\r
+  }\r
+  if (GLUT_WIND_IS_STEREO(mode)) {\r
+    list[n++] = GLX_STEREO;\r
+  }\r
+  if (GLUT_WIND_HAS_DEPTH(mode)) {\r
+    list[n++] = GLX_DEPTH_SIZE;\r
+    list[n++] = 1;\r
+  }\r
+  if (GLUT_WIND_HAS_STENCIL(mode)) {\r
+    list[n++] = GLX_STENCIL_SIZE;\r
+    list[n++] = 1;\r
+  }\r
+  list[n] = (int) None; /* terminate list */\r
+\r
+  /* glXChooseVisual specify GLX_BUFFER_SIZE prefers the\r
+     "smallest index buffer of at least the specified size".\r
+     This would be reasonable if GLUT allowed the user to\r
+     specify the required buffe size, but GLUT's display mode\r
+     is too simplistic (easy to use?). GLUT should try to find\r
+     the "largest".  So start with a large buffer size and\r
+     shrink until we find a matching one that exists. */\r
+\r
+  for (i = 0; bufSizeList[i]; i++) {\r
+    /* XXX Assumes list[1] is where GLX_BUFFER_SIZE parameter\r
+       is. */\r
+    list[1] = bufSizeList[i];\r
+    vi = glXChooseVisual(__glutDisplay,\r
+      __glutScreen, list);\r
+    if (vi)\r
+      return vi;\r
+  }\r
+  return NULL;\r
+#else\r
+    return\r
+         glXChooseVisual(mode);\r
+\r
+#endif\r
+}\r
+\r
+static XVisualInfo *\r
+getVisualInfoRGB(unsigned int mode)\r
+{\r
+#if POKA\r
+  int list[32];\r
+  int n = 0;\r
+\r
+  /* Should not be looking at display mode mask if\r
+     __glutDisplayString is non-NULL. */\r
+  assert(!__glutDisplayString);\r
+\r
+  /* XXX Would a caching mechanism to minize the calls to\r
+     glXChooseVisual? You'd have to reference count\r
+     XVisualInfo* pointers.  Would also have to properly\r
+     interact with glutInitDisplayString. */\r
+\r
+  list[n++] = GLX_RGBA;\r
+  list[n++] = GLX_RED_SIZE;\r
+  list[n++] = 1;\r
+  list[n++] = GLX_GREEN_SIZE;\r
+  list[n++] = 1;\r
+  list[n++] = GLX_BLUE_SIZE;\r
+  list[n++] = 1;\r
+  if (GLUT_WIND_HAS_ALPHA(mode)) {\r
+    list[n++] = GLX_ALPHA_SIZE;\r
+    list[n++] = 1;\r
+  }\r
+  if (GLUT_WIND_IS_DOUBLE(mode)) {\r
+    list[n++] = GLX_DOUBLEBUFFER;\r
+  }\r
+  if (GLUT_WIND_IS_STEREO(mode)) {\r
+    list[n++] = GLX_STEREO;\r
+  }\r
+  if (GLUT_WIND_HAS_DEPTH(mode)) {\r
+    list[n++] = GLX_DEPTH_SIZE;\r
+    list[n++] = 1;\r
+  }\r
+  if (GLUT_WIND_HAS_STENCIL(mode)) {\r
+    list[n++] = GLX_STENCIL_SIZE;\r
+    list[n++] = 1;\r
+  }\r
+  if (GLUT_WIND_HAS_ACCUM(mode)) {\r
+    list[n++] = GLX_ACCUM_RED_SIZE;\r
+    list[n++] = 1;\r
+    list[n++] = GLX_ACCUM_GREEN_SIZE;\r
+    list[n++] = 1;\r
+    list[n++] = GLX_ACCUM_BLUE_SIZE;\r
+    list[n++] = 1;\r
+    if (GLUT_WIND_HAS_ALPHA(mode)) {\r
+      list[n++] = GLX_ACCUM_ALPHA_SIZE;\r
+      list[n++] = 1;\r
+    }\r
+  }\r
+#if defined(GLX_VERSION_1_1) && (defined(GLX_SGIS_multisample) || defined(GLX_ARB_multisample))\r
+  if (GLUT_WIND_IS_MULTISAMPLE(mode)) {\r
+    if (!__glutIsSupportedByGLX("GLX_SGIS_multisample") &&\r
+        !__glutIsSupportedByGLX("GLX_ARB_multisample"))\r
+      return NULL;\r
+#if defined(GLX_ARB_multisample)\r
+    list[n++] = GLX_SAMPLES_ARB;\r
+#elif defined(GLX_SGIS_multisample)\r
+    list[n++] = GLX_SAMPLES_SGIS;\r
+#endif\r
+    /* XXX Is 4 a reasonable minimum acceptable number of\r
+       samples? */\r
+    list[n++] = 4;\r
+  }\r
+#endif\r
+  list[n] = (int) None; /* terminate list */\r
+\r
+  return glXChooseVisual(__glutDisplay,\r
+    __glutScreen, list);\r
+#else  /* POKA */\r
+\r
+    return\r
+         glXChooseVisual(mode);\r
+\r
+#endif\r
+}\r
+\r
+XVisualInfo *\r
+__glutGetVisualInfo(unsigned int mode)\r
+{\r
+  /* XXX GLUT_LUMINANCE not implemented for GLUT 3.0. */\r
+  if (GLUT_WIND_IS_LUMINANCE(mode))\r
+    return NULL;\r
+\r
+  if (GLUT_WIND_IS_RGB(mode))\r
+    return getVisualInfoRGB(mode);\r
+  else\r
+    return getVisualInfoCI(mode);\r
+}\r
+\r
+XVisualInfo *\r
+__glutDetermineVisual(\r
+  unsigned int displayMode,\r
+  Bool * treatAsSingle,\r
+  XVisualInfo * (getVisualInfo) (unsigned int))\r
+{\r
+  XVisualInfo *vis;\r
+\r
+  /* Should not be looking at display mode mask if\r
+     __glutDisplayString is non-NULL. */\r
+  assert(!__glutDisplayString);\r
+\r
+  *treatAsSingle = GLUT_WIND_IS_SINGLE(displayMode);\r
+  vis = getVisualInfo(displayMode);\r
+  if (!vis) {\r
+    /* Fallback cases when can't get exactly what was asked\r
+       for... */\r
+    if (GLUT_WIND_IS_SINGLE(displayMode)) {\r
+      /* If we can't find a single buffered visual, try looking\r
+         for a double buffered visual.  We can treat a double\r
+         buffered visual as a single buffer visual by changing\r
+         the draw buffer to GL_FRONT and treating any swap\r
+         buffers as no-ops. */\r
+      displayMode |= GLUT_DOUBLE;\r
+      vis = getVisualInfo(displayMode);\r
+      *treatAsSingle = True;\r
+    }\r
+    if (!vis && GLUT_WIND_IS_MULTISAMPLE(displayMode)) {\r
+      /* If we can't seem to get multisampling (ie, not Reality\r
+         Engine class graphics!), go without multisampling.  It\r
+         is up to the application to query how many multisamples\r
+         were allocated (0 equals no multisampling) if the\r
+         application is going to use multisampling for more than\r
+         just antialiasing. */\r
+      displayMode &= ~GLUT_MULTISAMPLE;\r
+      vis = getVisualInfo(displayMode);\r
+    }\r
+  }\r
+  return vis;\r
+}\r
+\r
+static void GLUTCALLBACK\r
+__glutDefaultDisplay(void)\r
+{\r
+  /* XXX Remove the warning after GLUT 3.0. */\r
+  __glutWarning("The following is a new check for GLUT 3.0; update your code.");\r
+  __glutFatalError(\r
+    "redisplay needed for window %d, but no display callback.",\r
+    __glutCurrentWindow->num + 1);\r
+}\r
+\r
+void GLUTCALLBACK\r
+__glutDefaultReshape(int width, int height)\r
+{\r
+  GLUToverlay *overlay;\r
+\r
+  /* Adjust the viewport of the window (and overlay if one\r
+     exists). */\r
+  MAKE_CURRENT_WINDOW(__glutCurrentWindow);\r
+  glViewport(0, 0, (GLsizei) width, (GLsizei) height);\r
+  overlay = __glutCurrentWindow->overlay;\r
+  if (overlay) {\r
+    MAKE_CURRENT_OVERLAY(overlay);\r
+    glViewport(0, 0, (GLsizei) width, (GLsizei) height);\r
+  }\r
+  /* Make sure we are current to the current layer (application\r
+     should be able to count on the current layer not changing\r
+     unless the application explicitly calls glutUseLayer). */\r
+  MAKE_CURRENT_LAYER(__glutCurrentWindow);\r
+}\r
+\r
+XVisualInfo *\r
+__glutDetermineWindowVisual(Bool * treatAsSingle, Bool * visAlloced, void **fbc)\r
+{\r
+  if (__glutDisplayString) {\r
+\r
+    /* __glutDisplayString should be NULL except if\r
+       glutInitDisplayString has been called to register a\r
+       different display string.  Calling glutInitDisplayString\r
+       means using a string instead of an integer mask determine\r
+       the visual to use. Using the function pointer variable\r
+       __glutDetermineVisualFromString below avoids linking in\r
+       the code for implementing glutInitDisplayString (ie,\r
+       glut_dstr.o) unless glutInitDisplayString gets called by\r
+       the application. */\r
+\r
+    assert(__glutDetermineVisualFromString);\r
+    *visAlloced = False;\r
+    *fbc = NULL;\r
+    return __glutDetermineVisualFromString(__glutDisplayString, treatAsSingle,\r
+      requiredWindowCriteria, numRequiredWindowCriteria, requiredWindowCriteriaMask, fbc);\r
+  } else {\r
+    *visAlloced = True;\r
+    *fbc = NULL;\r
+    return __glutDetermineVisual(__glutDisplayMode,\r
+      treatAsSingle, __glutGetVisualInfo);\r
+  }\r
+}\r
+\r
+/* ARGSUSED5 */  /* Only Win32 uses gameMode parameter. */\r
+GLUTwindow *\r
+__glutCreateWindow(GLUTwindow * parent,\r
+  int x, int y, int width, int height, int gameMode)\r
+{\r
+  GLUTwindow *window;\r
+  XSetWindowAttributes wa;\r
+  unsigned long attribMask;\r
+  int winnum;\r
+  int i;\r
+#if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_fbconfig)\r
+  GLXFBConfigSGIX fbc;\r
+#else\r
+  void *fbc;\r
+#endif\r
+\r
+#if defined(__OS2PM__)\r
+ {\r
+    extern HAB   hab;      /* PM anchor block handle         */\r
+    CLASSINFO classinfo;\r
+\r
+    if(!WinQueryClassInfo(hab,"GLUT", &classinfo) )\r
+                               __glutOpenOS2Connection(NULL);\r
+  }\r
+#elif defined(_WIN32)\r
+  WNDCLASS wc;\r
+  int style;\r
+\r
+  if (!GetClassInfo(GetModuleHandle(NULL), "GLUT", &wc)) {\r
+    __glutOpenWin32Connection(NULL);\r
+  }\r
+#else\r
+  if (!__glutDisplay) {\r
+    __glutOpenXConnection(NULL);\r
+  }\r
+#endif\r
+\r
+#ifndef __OS2PM__\r
+  if (__glutGameModeWindow) {\r
+    __glutFatalError("cannot create windows in game mode.");\r
+  }\r
+#endif\r
+\r
+  winnum = getUnusedWindowSlot();\r
+  window = (GLUTwindow *) malloc(sizeof(GLUTwindow));\r
+  if (!window) {\r
+    __glutFatalError("out of memory.");\r
+  }\r
+  window->num = winnum;\r
+\r
+#if defined(__OS2PM__)\r
+  /* Add this new window to the window list. */\r
+  __glutWindowList[winnum] = window;\r
+  window->shownState = -1;\r
+#endif\r
+\r
+#if !defined(_WIN32)  && !defined(__OS2PM__)\r
+  window->vis = __glutDetermineWindowVisual(&window->treatAsSingle,\r
+    &window->visAlloced, (void**) &fbc);\r
+  if (!window->vis) {\r
+    __glutFatalError(\r
+      "visual with necessary capabilities not found.");\r
+  }\r
+  __glutSetupColormap(window->vis, &window->colormap, &window->cmap);\r
+#endif\r
+  window->eventMask = StructureNotifyMask | ExposureMask;\r
+\r
+  attribMask = CWBackPixmap | CWBorderPixel | CWColormap | CWEventMask;\r
+  wa.background_pixmap = None;\r
+  wa.border_pixel = 0;\r
+  wa.colormap = window->cmap;\r
+  wa.event_mask = window->eventMask;\r
+  if (parent) {\r
+    if (parent->eventMask & GLUT_HACK_STOP_PROPAGATE_MASK)\r
+      wa.event_mask |= GLUT_HACK_STOP_PROPAGATE_MASK;\r
+    attribMask |= CWDontPropagate;\r
+    wa.do_not_propagate_mask = parent->eventMask & GLUT_DONT_PROPAGATE_FILTER_MASK;\r
+  } else {\r
+    wa.do_not_propagate_mask = 0;\r
+  }\r
+\r
+  /* Stash width and height before Win32's __glutAdjustCoords\r
+     possibly overwrites the values. */\r
+  window->width = width;\r
+  window->height = height;\r
+  window->forceReshape = True;\r
+  window->ignoreKeyRepeat = False;\r
+\r
+#if defined(__OS2PM__)\r
+\r
+ {  ULONG flStyle=0;\r
+    int ii;\r
+    ERRORID  erridErrorCode;/* last error id code */\r
+    extern HAB   hab;      /* PM anchor block handle         */\r
+\r
+  if (parent) {\r
+    flStyle = WS_CLIPCHILDREN|WS_VISIBLE;\r
+  } else {\r
+    if (gameMode) {\r
+      /* Game mode window should be a WS_POPUP window to\r
+         ensure that the taskbar is hidden by it.  A standard\r
+         WS_OVERLAPPEDWINDOW does not hide the task bar. */\r
+      flStyle = FCF_STANDARD |  WS_MAXIMIZED;\r
+    } else {\r
+      /* A standard toplevel window with borders and such. */\r
+      flStyle = FCF_STANDARD | WS_CLIPCHILDREN;\r
+//      flStyle = WS_OVERLAPPEDWINDOW;\r
+    }\r
+  }\r
+{\r
+ HWND  hwnd;                           /* Window     */\r
+ ULONG ListBoxId;                      /* Window id  */\r
+                                       /* (supplied by application) */\r
+\r
+\r
+ HWND hwndClient;        /* handle to the client                 */\r
+ HWND hwndFrame;         /* handle to the frame                  */\r
+ PFNWP GenericWndProc;\r
+ FRAMECDATA  fcd;\r
+ RECTL  rect;     /* Boundary rectangle                   */\r
+\r
+\r
+\r
+/************************************************/\r
+// flCreate = (FCF_STANDARD) & ~FCF_TASKLIST;\r
+/**********************************/\r
+  if (parent)\r
+  {   window->frame = NULL;\r
+\r
+ hwnd = WinCreateWindow(parent->win,  /* Parent window             */\r
+                        "GLUTCHILD",        /* Class name                */\r
+                        "",    /* Window text               */\r
+                        flStyle,       /* Window style              */\r
+                        x, y,          /* Position (x,y)            */\r
+                        width, height,      /* Size (width,height)       */\r
+                        parent->win,    /* Owner window              */\r
+                        HWND_TOP,      /* Sibling window            */\r
+                        0,             /* Window id                 */\r
+                        NULL,          /* Control data              */\r
+                        NULL);         /* Pres parameters           */\r
+\r
+ erridErrorCode = WinGetLastError(hab);\r
+    window->win = hwnd;\r
+\r
+  window->hdc = WinOpenWindowDC(window->win);\r
+  window->hpsBuffer = hpsCurrent;\r
+\r
+\r
+ rect.xLeft = x;\r
+ rect.xRight = x+width;\r
+ rect.yBottom = y;\r
+ rect.yTop = y + height;\r
+\r
+/***** else parent *****************************/\r
+  } else {\r
+        hwnd = WinCreateStdWindow(HWND_DESKTOP,\r
+           0,       /* WS_VISIBLE frame-window style        */\r
+           &flStyle,        /* window style                 */\r
+           "GLUT",          /* class name                   */\r
+           "GLUT",/* window title                  */\r
+            0L,                  /* default client style          */\r
+            NULLHANDLE,          /* resource in executable file   */\r
+            ID_WINDOW,           /* resource id                   */\r
+            &hwndClient);        /* receives client window handle */\r
+\r
+ erridErrorCode = WinGetLastError(hab);\r
+       window->win = hwndClient;\r
+       window->frame = hwnd;\r
+  window->hdc = WinOpenWindowDC(window->win);\r
+\r
+  window->hpsBuffer = hpsCurrent;\r
+\r
+\r
+/* converts a client window's boundaries into  an equivalent frame rectangle */\r
+ rect.xLeft = x;\r
+ rect.xRight = x+width;\r
+ rect.yBottom = y;\r
+ rect.yTop = y + height;\r
+\r
+ /* calculate equivalent frame boundary from boundary data */\r
+  WinCalcFrameRect(window->frame, &rect, FALSE);\r
+ }\r
+/***** endof if(parent) *****************************/\r
+\r
+  /* Must set the XHDC for fake glXChooseVisual & fake\r
+     glXCreateContext & fake XAllocColorCells. */\r
+  XHDC = window->hdc;\r
+  XHWND = window->win;\r
+  window->vis = __glutDetermineWindowVisual(&window->treatAsSingle,\r
+    &window->visAlloced, &fbc);\r
+    if (!window->vis)\r
+    {   __glutFatalError(\r
+        "pixel format with necessary capabilities not found.");\r
+    }\r
+    { int rc;\r
+      rc = wglChoosePixelFormat(window->hdc, window->vis),\r
+\r
+//     evglSetPixelFormat(2); /* int iPixelFormat 1 - doublebuffer/2 - single buffer ??*/\r
+      wglSetPixelFormat(window->hdc,rc,window->vis);\r
+    }\r
+   __glutSetupColormap(window->vis, &window->colormap, &window->cmap);\r
+\r
+  window->ctx = glXCreateContext(window->hpsBuffer, window->vis,\r
+    None, __glutTryDirect);\r
+\r
+  WinSetWindowPos(hwnd,\r
+                  HWND_TOP,rect.xLeft,rect.yBottom,\r
+                  rect.xRight-rect.xLeft, rect.yTop-rect.yBottom,\r
+      SWP_ACTIVATE | SWP_MOVE | SWP_SIZE | SWP_SHOW|SWP_ZORDER); /* flags*/\r
+\r
+  /* Make sure subwindows get a windowStatus callback. */\r
+  if (parent)\r
+       WinPostMsg(parent->win, WM_ACTIVATE, 0, 0);\r
+\r
+  }\r
+}\r
+\r
+#elif defined(_WIN32)\r
+\r
+  __glutAdjustCoords(parent ? parent->win : NULL,\r
+    &x, &y, &width, &height);\r
+  if (parent) {\r
+    style = WS_CHILD;\r
+  } else {\r
+    if (gameMode) {\r
+      /* Game mode window should be a WS_POPUP window to\r
+         ensure that the taskbar is hidden by it.  A standard\r
+         WS_OVERLAPPEDWINDOW does not hide the task bar. */\r
+      style = WS_POPUP | WS_MAXIMIZE;\r
+    } else {\r
+      /* A standard toplevel window with borders and such. */\r
+      style = WS_OVERLAPPEDWINDOW;\r
+    }\r
+  }\r
+  window->win = CreateWindow("GLUT", "GLUT",\r
+    WS_CLIPSIBLINGS | WS_CLIPCHILDREN | style,\r
+    x, y, width, height, parent ? parent->win : __glutRoot,\r
+    NULL, GetModuleHandle(NULL), 0);\r
+  window->hdc = GetDC(window->win);\r
+  /* Must set the XHDC for fake glXChooseVisual & fake\r
+     glXCreateContext & fake XAllocColorCells. */\r
+  XHDC = window->hdc;\r
+  window->vis = __glutDetermineWindowVisual(&window->treatAsSingle,\r
+    &window->visAlloced, &fbc);\r
+  if (!window->vis) {\r
+    __glutFatalError(\r
+      "pixel format with necessary capabilities not found.");\r
+  }\r
+  if (!SetPixelFormat(window->hdc,\r
+      ChoosePixelFormat(window->hdc, window->vis),\r
+      window->vis)) {\r
+    __glutFatalError("SetPixelFormat failed during window create.");\r
+  }\r
+  __glutSetupColormap(window->vis, &window->colormap, &window->cmap);\r
+  /* Make sure subwindows get a windowStatus callback. */\r
+  if (parent) {\r
+    PostMessage(parent->win, WM_ACTIVATE, 0, 0);\r
+  }\r
+  window->renderDc = window->hdc;\r
+#else\r
+  window->win = XCreateWindow(__glutDisplay,\r
+    parent == NULL ? __glutRoot : parent->win,\r
+    x, y, width, height, 0,\r
+    window->vis->depth, InputOutput, window->vis->visual,\r
+    attribMask, &wa);\r
+#endif\r
+  window->renderWin = window->win;\r
+#if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_fbconfig)\r
+  if (fbc) {\r
+    window->ctx = __glut_glXCreateContextWithConfigSGIX(__glutDisplay, fbc,\r
+      GLX_RGBA_TYPE_SGIX, None, __glutTryDirect);\r
+  } else\r
+#endif\r
+#if defined(__OS2PM__)\r
+//    window->ctx = glXCreateContext(window->hpsBuffer, window->vis,\r
+//      None, __glutTryDirect);\r
+#else\r
+    window->ctx = glXCreateContext(__glutDisplay, window->vis,\r
+      None, __glutTryDirect);\r
+#endif\r
+  if (!window->ctx) {\r
+    __glutFatalError(\r
+      "failed to create OpenGL rendering context.");\r
+  }\r
+  window->renderCtx = window->ctx;\r
+#if !defined(_WIN32) && !defined(__OS2PM__)\r
+  window->isDirect = glXIsDirect(__glutDisplay, window->ctx);\r
+  if (__glutForceDirect) {\r
+    if (!window->isDirect)\r
+      __glutFatalError("direct rendering not possible.");\r
+  }\r
+#endif\r
+\r
+  window->parent = parent;\r
+  if (parent) {\r
+    window->siblings = parent->children;\r
+    parent->children = window;\r
+  } else {\r
+    window->siblings = NULL;\r
+  }\r
+  window->overlay = NULL;\r
+  window->children = NULL;\r
+  window->display = __glutDefaultDisplay;\r
+  window->reshape = __glutDefaultReshape;\r
+  window->mouse = NULL;\r
+  window->motion = NULL;\r
+  window->passive = NULL;\r
+  window->entry = NULL;\r
+  window->keyboard = NULL;\r
+  window->keyboardUp = NULL;\r
+  window->windowStatus = NULL;\r
+  window->visibility = NULL;\r
+  window->special = NULL;\r
+  window->specialUp = NULL;\r
+  window->buttonBox = NULL;\r
+  window->dials = NULL;\r
+  window->spaceMotion = NULL;\r
+  window->spaceRotate = NULL;\r
+  window->spaceButton = NULL;\r
+  window->tabletMotion = NULL;\r
+  window->tabletButton = NULL;\r
+#ifdef _WIN32\r
+  window->joystick = NULL;\r
+  window->joyPollInterval = 0;\r
+#endif\r
+\r
+#if defined(__OS2PM__)\r
+  window->wm_command = NULL;\r
+#endif\r
+\r
+  window->tabletPos[0] = -1;\r
+  window->tabletPos[1] = -1;\r
+#if defined(__OS2PM__)\r
+  if(window->shownState == -1)\r
+           window->shownState = 0;\r
+   window->visState =  window->shownState;\r
+#else\r
+  window->shownState = 0;\r
+  window->visState = -1;  /* not VisibilityUnobscured,\r
+                             VisibilityPartiallyObscured, or\r
+                             VisibilityFullyObscured */\r
+#endif\r
+  window->entryState = -1;  /* not EnterNotify or LeaveNotify */\r
+\r
+  window->desiredConfMask = 0;\r
+  window->buttonUses = 0;\r
+  window->cursor = GLUT_CURSOR_INHERIT;\r
+\r
+  /* Setup window to be mapped when glutMainLoop starts. */\r
+  window->workMask = GLUT_MAP_WORK;\r
+#ifdef _WIN32\r
+  if (gameMode) {\r
+    /* When mapping a game mode window, just show\r
+       the window.  We have already created the game\r
+       mode window with a maximize flag at creation\r
+       time.  Doing a ShowWindow(window->win, SW_SHOWNORMAL)\r
+       would be wrong for a game mode window since it\r
+       would unmaximize the window. */\r
+    window->desiredMapState = GameModeState;\r
+  } else {\r
+    window->desiredMapState = NormalState;\r
+  }\r
+#else\r
+  window->desiredMapState = NormalState;\r
+#endif\r
+  window->prevWorkWin = __glutWindowWorkList;\r
+  __glutWindowWorkList = window;\r
+\r
+  /* Initially, no menus attached. */\r
+  for (i = 0; i < GLUT_MAX_MENUS; i++) {\r
+    window->menu[i] = 0;\r
+  }\r
+\r
+  /* Add this new window to the window list. */\r
+  __glutWindowList[winnum] = window;\r
+\r
+  /* Make the new window the current window. */\r
+  __glutSetWindow(window);\r
+\r
+  __glutDetermineMesaSwapHackSupport();\r
+\r
+  if (window->treatAsSingle) {\r
+    /* We do this because either the window really is single\r
+       buffered (in which case this is redundant, but harmless,\r
+       because this is the initial single-buffered context\r
+       state); or we are treating a double buffered window as a\r
+       single-buffered window because the system does not appear\r
+       to export any suitable single- buffered visuals (in which\r
+       the following are necessary). */\r
+    glDrawBuffer(GL_FRONT);\r
+    glReadBuffer(GL_FRONT);\r
+  }\r
+  return window;\r
+}\r
+\r
+/* CENTRY */\r
+int GLUTAPIENTRY\r
+glutCreateWindow(const char *title)\r
+{\r
+  static int firstWindow = 1;\r
+  GLUTwindow *window;\r
+#if !defined(_WIN32) && !defined(__OS2__)\r
+  XWMHints *wmHints;\r
+#endif\r
+  Window win;\r
+  XTextProperty textprop;\r
+\r
+  if (__glutGameModeWindow) {\r
+    __glutFatalError("cannot create windows in game mode.");\r
+  }\r
+  window = __glutCreateWindow(NULL,\r
+    __glutSizeHints.x, __glutSizeHints.y,\r
+    __glutInitWidth, __glutInitHeight,\r
+    /* not game mode */ 0);\r
+  win = window->win;\r
+  /* Setup ICCCM properties. */\r
+  textprop.value = (unsigned char *) title;\r
+  textprop.encoding = XA_STRING;\r
+  textprop.format = 8;\r
+  textprop.nitems = strlen(title);\r
+#if defined(__OS2__)\r
+  WinSetWindowText(window->frame, (PCSZ)title);\r
+  if (__glutIconic) {\r
+    window->desiredMapState = IconicState;\r
+  }\r
+#elif defined(_WIN32)\r
+  SetWindowText(win, title);\r
+  if (__glutIconic) {\r
+    window->desiredMapState = IconicState;\r
+  }\r
+#else\r
+  wmHints = XAllocWMHints();\r
+  wmHints->initial_state =\r
+    __glutIconic ? IconicState : NormalState;\r
+  wmHints->flags = StateHint;\r
+  XSetWMProperties(__glutDisplay, win, &textprop, &textprop,\r
+  /* Only put WM_COMMAND property on first window. */\r
+    firstWindow ? __glutArgv : NULL,\r
+    firstWindow ? __glutArgc : 0,\r
+    &__glutSizeHints, wmHints, NULL);\r
+  XFree(wmHints);\r
+  XSetWMProtocols(__glutDisplay, win, &__glutWMDeleteWindow, 1);\r
+#endif\r
+  firstWindow = 0;\r
+  return window->num + 1;\r
+}\r
+\r
+#ifdef _WIN32\r
+int GLUTAPIENTRY\r
+__glutCreateWindowWithExit(const char *title, void (__cdecl *exitfunc)(int))\r
+{\r
+  __glutExitFunc = exitfunc;\r
+  return glutCreateWindow(title);\r
+}\r
+#endif\r
+\r
+int GLUTAPIENTRY\r
+glutCreateSubWindow(int win, int x, int y, int width, int height)\r
+{\r
+  GLUTwindow *window;\r
+\r
+  window = __glutCreateWindow(__glutWindowList[win - 1],\r
+    x, y, width, height, /* not game mode */ 0);\r
+#if !defined(_WIN32) && !defined(__OS2__)\r
+  {\r
+    GLUTwindow *toplevel;\r
+\r
+    toplevel = __glutToplevelOf(window);\r
+    if (toplevel->cmap != window->cmap) {\r
+      __glutPutOnWorkList(toplevel, GLUT_COLORMAP_WORK);\r
+    }\r
+  }\r
+#endif\r
+  return window->num + 1;\r
+}\r
+/* ENDCENTRY */\r
+\r
+void\r
+__glutDestroyWindow(GLUTwindow * window,\r
+  GLUTwindow * initialWindow)\r
+{\r
+  GLUTwindow **prev, *cur, *parent, *siblings;\r
+\r
+  /* Recursively destroy any children. */\r
+  cur = window->children;\r
+  while (cur) {\r
+    siblings = cur->siblings;\r
+    __glutDestroyWindow(cur, initialWindow);\r
+    cur = siblings;\r
+  }\r
+  /* Remove from parent's children list (only necessary for\r
+     non-initial windows and subwindows!). */\r
+  parent = window->parent;\r
+  if (parent && parent == initialWindow->parent) {\r
+    prev = &parent->children;\r
+    cur = parent->children;\r
+    while (cur) {\r
+      if (cur == window) {\r
+        *prev = cur->siblings;\r
+        break;\r
+      }\r
+      prev = &(cur->siblings);\r
+      cur = cur->siblings;\r
+    }\r
+  }\r
+  /* Unbind if bound to this window. */\r
+  if (window == __glutCurrentWindow) {\r
+    UNMAKE_CURRENT();\r
+    __glutCurrentWindow = NULL;\r
+  }\r
+  /* Begin tearing down window itself. */\r
+  if (window->overlay) {\r
+    __glutFreeOverlayFunc(window->overlay);\r
+  }\r
+  XDestroyWindow(__glutDisplay, window->win);\r
+  glXDestroyContext(__glutDisplay, window->ctx);\r
+  if (window->colormap) {\r
+    /* Only color index windows have colormap data structure. */\r
+    __glutFreeColormap(window->colormap);\r
+  }\r
+  /* NULLing the __glutWindowList helps detect is a window\r
+     instance has been destroyed, given a window number. */\r
+  __glutWindowList[window->num] = NULL;\r
+\r
+  /* Cleanup data structures that might contain window. */\r
+  cleanWindowWorkList(window);\r
+#if !defined(_WIN32) && !defined(__OS2__)\r
+  cleanStaleWindowList(window);\r
+#endif\r
+  /* Remove window from the "get window cache" if it is there. */\r
+  if (__glutWindowCache == window)\r
+    __glutWindowCache = NULL;\r
+\r
+  if (window->visAlloced) {\r
+    /* Only free XVisualInfo* gotten from glXChooseVisual. */\r
+    XFree(window->vis);\r
+  }\r
+\r
+  if (window == __glutGameModeWindow) {\r
+    /* Destroying the game mode window should implicitly\r
+       have GLUT leave game mode. */\r
+    __glutCloseDownGameMode();\r
+  }\r
+\r
+  free(window);\r
+}\r
+\r
+/* CENTRY */\r
+void GLUTAPIENTRY\r
+glutDestroyWindow(int win)\r
+{\r
+  GLUTwindow *window = __glutWindowList[win - 1];\r
+\r
+  if (__glutMappedMenu && __glutMenuWindow == window) {\r
+    __glutFatalUsage("destroying menu window not allowed while menus in use");\r
+  }\r
+#if !defined(_WIN32) && !defined(__OS2__)\r
+  /* If not a toplevel window... */\r
+  if (window->parent) {\r
+    /* Destroying subwindows may change colormap requirements;\r
+       recalculate toplevel window's WM_COLORMAP_WINDOWS\r
+       property. */\r
+    __glutPutOnWorkList(__glutToplevelOf(window->parent),\r
+      GLUT_COLORMAP_WORK);\r
+  }\r
+#endif\r
+  __glutDestroyWindow(window, window);\r
+  XFlush(__glutDisplay);\r
+}\r
+/* ENDCENTRY */\r
+\r
+void\r
+__glutChangeWindowEventMask(long eventMask, Bool add)\r
+{\r
+  if (add) {\r
+    /* Add eventMask to window's event mask. */\r
+    if ((__glutCurrentWindow->eventMask & eventMask) !=\r
+      eventMask) {\r
+      __glutCurrentWindow->eventMask |= eventMask;\r
+      __glutPutOnWorkList(__glutCurrentWindow,\r
+        GLUT_EVENT_MASK_WORK);\r
+    }\r
+  } else {\r
+    /* Remove eventMask from window's event mask. */\r
+    if (__glutCurrentWindow->eventMask & eventMask) {\r
+      __glutCurrentWindow->eventMask &= ~eventMask;\r
+      __glutPutOnWorkList(__glutCurrentWindow,\r
+        GLUT_EVENT_MASK_WORK);\r
+    }\r
+  }\r
+}\r
+\r
+void GLUTAPIENTRY\r
+glutDisplayFunc(GLUTdisplayCB displayFunc)\r
+{\r
+  /* XXX Remove the warning after GLUT 3.0. */\r
+  if (!displayFunc)\r
+    __glutFatalError("NULL display callback not allowed in GLUT 3.0; update your code.");\r
+  __glutCurrentWindow->display = displayFunc;\r
+}\r
+\r
+void GLUTAPIENTRY\r
+glutMouseFunc(GLUTmouseCB mouseFunc)\r
+{\r
+  if (__glutCurrentWindow->mouse) {\r
+    if (!mouseFunc) {\r
+      /* Previous mouseFunc being disabled. */\r
+      __glutCurrentWindow->buttonUses--;\r
+      __glutChangeWindowEventMask(\r
+        ButtonPressMask | ButtonReleaseMask,\r
+        __glutCurrentWindow->buttonUses > 0);\r
+    }\r
+  } else {\r
+    if (mouseFunc) {\r
+      /* Previously no mouseFunc, new one being installed. */\r
+      __glutCurrentWindow->buttonUses++;\r
+      __glutChangeWindowEventMask(\r
+        ButtonPressMask | ButtonReleaseMask, True);\r
+    }\r
+  }\r
+  __glutCurrentWindow->mouse = mouseFunc;\r
+}\r
+\r
+void GLUTAPIENTRY\r
+glutMotionFunc(GLUTmotionCB motionFunc)\r
+{\r
+  /* Hack.  Some window managers (4Dwm by default) will mask\r
+     motion events if the client is not selecting for button\r
+     press and release events. So we select for press and\r
+     release events too (being careful to use reference\r
+     counting).  */\r
+  if (__glutCurrentWindow->motion) {\r
+    if (!motionFunc) {\r
+      /* previous mouseFunc being disabled */\r
+      __glutCurrentWindow->buttonUses--;\r
+      __glutChangeWindowEventMask(\r
+        ButtonPressMask | ButtonReleaseMask,\r
+        __glutCurrentWindow->buttonUses > 0);\r
+    }\r
+  } else {\r
+    if (motionFunc) {\r
+      /* Previously no mouseFunc, new one being installed. */\r
+      __glutCurrentWindow->buttonUses++;\r
+      __glutChangeWindowEventMask(\r
+        ButtonPressMask | ButtonReleaseMask, True);\r
+    }\r
+  }\r
+  /* Real work of selecting for passive mouse motion.  */\r
+  __glutChangeWindowEventMask(\r
+    Button1MotionMask | Button2MotionMask | Button3MotionMask,\r
+    motionFunc != NULL);\r
+  __glutCurrentWindow->motion = motionFunc;\r
+}\r
+\r
+void GLUTAPIENTRY\r
+glutPassiveMotionFunc(GLUTpassiveCB passiveMotionFunc)\r
+{\r
+  __glutChangeWindowEventMask(PointerMotionMask,\r
+    passiveMotionFunc != NULL);\r
+\r
+  /* Passive motion also requires watching enters and leaves so\r
+     that a fake passive motion event can be generated on an\r
+     enter. */\r
+  __glutChangeWindowEventMask(EnterWindowMask | LeaveWindowMask,\r
+    __glutCurrentWindow->entry != NULL || passiveMotionFunc != NULL);\r
+\r
+  __glutCurrentWindow->passive = passiveMotionFunc;\r
+}\r
+\r
+void GLUTAPIENTRY\r
+glutEntryFunc(GLUTentryCB entryFunc)\r
+{\r
+  __glutChangeWindowEventMask(EnterWindowMask | LeaveWindowMask,\r
+    entryFunc != NULL || __glutCurrentWindow->passive);\r
+  __glutCurrentWindow->entry = entryFunc;\r
+  if (!entryFunc) {\r
+    __glutCurrentWindow->entryState = -1;\r
+  }\r
+}\r
+\r
+void GLUTAPIENTRY\r
+glutWindowStatusFunc(GLUTwindowStatusCB windowStatusFunc)\r
+{\r
+  __glutChangeWindowEventMask(VisibilityChangeMask,\r
+    windowStatusFunc != NULL);\r
+  __glutCurrentWindow->windowStatus = windowStatusFunc;\r
+  if (!windowStatusFunc) {\r
+    /* Make state invalid. */\r
+    __glutCurrentWindow->visState = -1;\r
+  }\r
+}\r
+\r
+static void GLUTCALLBACK\r
+visibilityHelper(int status)\r
+{\r
+  if (status == GLUT_HIDDEN || status == GLUT_FULLY_COVERED)\r
+    __glutCurrentWindow->visibility(GLUT_NOT_VISIBLE);\r
+  else\r
+    __glutCurrentWindow->visibility(GLUT_VISIBLE);\r
+}\r
+\r
+\r
+void GLUTAPIENTRY\r
+glutVisibilityFunc(GLUTvisibilityCB visibilityFunc)\r
+{\r
+  __glutCurrentWindow->visibility = visibilityFunc;\r
+\r
+  if (visibilityFunc)\r
+  {    glutWindowStatusFunc(visibilityHelper);\r
+#if defined(__OS2PM__)\r
+       if(__glutCurrentWindow->shownState >= 0)\r
+       {  visibilityHelper(__glutCurrentWindow->shownState);\r
+       }\r
+#endif\r
+  }\r
+  else\r
+    glutWindowStatusFunc(NULL);\r
+}\r
+\r
+void GLUTAPIENTRY\r
+glutReshapeFunc(GLUTreshapeCB reshapeFunc)\r
+{\r
+  if (reshapeFunc) {\r
+    __glutCurrentWindow->reshape = reshapeFunc;\r
+  } else {\r
+    __glutCurrentWindow->reshape = __glutDefaultReshape;\r
+  }\r
+}\r
+\1a
\ No newline at end of file
diff --git a/src/glut/os2/glut_winmisc.cpp b/src/glut/os2/glut_winmisc.cpp
new file mode 100644 (file)
index 0000000..ffa31c0
--- /dev/null
@@ -0,0 +1,127 @@
+\r
+/* Copyright (c) Mark J. Kilgard, 1994.  */\r
+\r
+/* This program is freely distributable without licensing fees\r
+   and is provided without guarantee or warrantee expressed or\r
+   implied. This program is -not- in the public domain. */\r
+\r
+\r
+#include <stdlib.h>\r
+#include <stdio.h>\r
+#include <string.h>\r
+#include <assert.h>\r
+\r
+\r
+#include "glutint.h"\r
+\r
+/* CENTRY */\r
+void GLUTAPIENTRY\r
+glutSetWindowTitle(const char *title)\r
+{\r
+#if defined(__OS2PM__)\r
+   __glutSetWindowText(__glutCurrentWindow->win, (char *)title);\r
+\r
+#else\r
+  XTextProperty textprop;\r
+\r
+  assert(!__glutCurrentWindow->parent);\r
+  IGNORE_IN_GAME_MODE();\r
+  textprop.value = (unsigned char *) title;\r
+  textprop.encoding = XA_STRING;\r
+  textprop.format = 8;\r
+  textprop.nitems = strlen(title);\r
+  XSetWMName(__glutDisplay,\r
+    __glutCurrentWindow->win, &textprop);\r
+  XFlush(__glutDisplay);\r
+#endif\r
+}\r
+\r
+void GLUTAPIENTRY\r
+glutSetIconTitle(const char *title)\r
+{\r
+#if defined(__OS2PM__)\r
+//todo ?\r
+#else\r
+\r
+  XTextProperty textprop;\r
+\r
+  assert(!__glutCurrentWindow->parent);\r
+  IGNORE_IN_GAME_MODE();\r
+  textprop.value = (unsigned char *) title;\r
+  textprop.encoding = XA_STRING;\r
+  textprop.format = 8;\r
+  textprop.nitems = strlen(title);\r
+  XSetWMIconName(__glutDisplay,\r
+    __glutCurrentWindow->win, &textprop);\r
+  XFlush(__glutDisplay);\r
+#endif\r
+}\r
+\r
+void GLUTAPIENTRY\r
+glutPositionWindow(int x, int y)\r
+{\r
+  IGNORE_IN_GAME_MODE();\r
+  __glutCurrentWindow->desiredX = x;\r
+  __glutCurrentWindow->desiredY = y;\r
+  __glutCurrentWindow->desiredConfMask |= CWX | CWY;\r
+  __glutPutOnWorkList(__glutCurrentWindow, GLUT_CONFIGURE_WORK);\r
+}\r
+\r
+void GLUTAPIENTRY\r
+glutReshapeWindow(int w, int h)\r
+{\r
+  IGNORE_IN_GAME_MODE();\r
+  if (w <= 0 || h <= 0)\r
+    __glutWarning("glutReshapeWindow: non-positive width or height not allowed");\r
+\r
+  __glutCurrentWindow->desiredWidth = w;\r
+  __glutCurrentWindow->desiredHeight = h;\r
+  __glutCurrentWindow->desiredConfMask |= CWWidth | CWHeight;\r
+  __glutPutOnWorkList(__glutCurrentWindow, GLUT_CONFIGURE_WORK);\r
+}\r
+\r
+void GLUTAPIENTRY\r
+glutPopWindow(void)\r
+{\r
+  IGNORE_IN_GAME_MODE();\r
+  __glutCurrentWindow->desiredStack = Above;\r
+  __glutCurrentWindow->desiredConfMask |= CWStackMode;\r
+  __glutPutOnWorkList(__glutCurrentWindow, GLUT_CONFIGURE_WORK);\r
+}\r
+\r
+void GLUTAPIENTRY\r
+glutPushWindow(void)\r
+{\r
+  IGNORE_IN_GAME_MODE();\r
+  __glutCurrentWindow->desiredStack = Below;\r
+  __glutCurrentWindow->desiredConfMask |= CWStackMode;\r
+  __glutPutOnWorkList(__glutCurrentWindow, GLUT_CONFIGURE_WORK);\r
+}\r
+\r
+void GLUTAPIENTRY\r
+glutIconifyWindow(void)\r
+{\r
+  IGNORE_IN_GAME_MODE();\r
+  assert(!__glutCurrentWindow->parent);\r
+  __glutCurrentWindow->desiredMapState = IconicState;\r
+  __glutPutOnWorkList(__glutCurrentWindow, GLUT_MAP_WORK);\r
+}\r
+\r
+void GLUTAPIENTRY\r
+glutShowWindow(void)\r
+{\r
+  IGNORE_IN_GAME_MODE();\r
+  __glutCurrentWindow->desiredMapState = NormalState;\r
+  __glutPutOnWorkList(__glutCurrentWindow, GLUT_MAP_WORK);\r
+}\r
+\r
+void GLUTAPIENTRY\r
+glutHideWindow(void)\r
+{\r
+  IGNORE_IN_GAME_MODE();\r
+  __glutCurrentWindow->desiredMapState = WithdrawnState;\r
+  __glutPutOnWorkList(__glutCurrentWindow, GLUT_MAP_WORK);\r
+}\r
+\r
+/* ENDCENTRY */\r
+\1a
\ No newline at end of file
diff --git a/src/glut/os2/glutbitmap.h b/src/glut/os2/glutbitmap.h
new file mode 100644 (file)
index 0000000..dc1b61a
--- /dev/null
@@ -0,0 +1,32 @@
+#ifndef __glutbitmap_h__\r
+#define __glutbitmap_h__\r
+\r
+/* Copyright (c) Mark J. Kilgard, 1994, 1998. */\r
+\r
+/* This program is freely distributable without licensing fees \r
+   and is provided without guarantee or warrantee expressed or \r
+   implied. This program is -not- in the public domain. */\r
+\r
+#define GLUT_NO_LIB_PRAGMA  /* Avoid auto library linking when building\r
+                               the GLUT library itself. */\r
+#include <GL/glut.h>\r
+\r
+typedef struct {\r
+  const GLsizei width;\r
+  const GLsizei height;\r
+  const GLfloat xorig;\r
+  const GLfloat yorig;\r
+  const GLfloat advance;\r
+  const GLubyte *bitmap;\r
+} BitmapCharRec, *BitmapCharPtr;\r
+\r
+typedef struct {\r
+  const char *name;\r
+  const int num_chars;\r
+  const int first;\r
+  const BitmapCharRec * const *ch;\r
+} BitmapFontRec, *BitmapFontPtr;\r
+\r
+typedef void *GLUTbitmapFont;\r
+\r
+#endif /* __glutbitmap_h__ */\r
diff --git a/src/glut/os2/glutos2.h b/src/glut/os2/glutos2.h
new file mode 100644 (file)
index 0000000..533a780
--- /dev/null
@@ -0,0 +1,36 @@
+#ifndef __glutos2_h__
+#define __glutos2_h__
+
+
+/* Win32 "equivalent" cursors - eventually, the X glyphs should be
+   converted to Win32 cursors -- then they will look the same */
+#define XC_arrow               IDC_ARROW
+#define XC_top_left_arrow      IDC_ARROW
+#define XC_hand1               IDC_SIZEALL
+#define XC_pirate              IDC_NO
+#define XC_question_arrow      IDC_HELP
+#define XC_exchange            IDC_NO
+#define XC_spraycan            IDC_SIZEALL
+#define XC_watch               IDC_WAIT
+#define XC_xterm               IDC_IBEAM
+#define XC_crosshair           IDC_CROSS
+#define XC_sb_v_double_arrow   IDC_SIZENS
+#define XC_sb_h_double_arrow   IDC_SIZEWE
+#define XC_top_side            IDC_UPARROW
+#define XC_bottom_side         IDC_SIZENS
+#define XC_left_side           IDC_SIZEWE
+#define XC_right_side          IDC_SIZEWE
+#define XC_top_left_corner     IDC_SIZENWSE
+#define XC_top_right_corner    IDC_SIZENESW
+#define XC_bottom_right_corner IDC_SIZENWSE
+#define XC_bottom_left_corner  IDC_SIZENESW
+
+#define XA_STRING 0
+
+/* Private routines from win32_util.c */
+extern int gettimeofday(struct timeval* tp, void* tzp);
+//extern void *__glutFont(void *font);
+extern int __glutGetTransparentPixel(Display *dpy, XVisualInfo *vinfo);
+extern void __glutAdjustCoords(Window parent, int *x, int *y, int *width, int *height);
+
+#endif /* __glutos2_h__ */
diff --git a/src/glut/os2/glutstroke.h b/src/glut/os2/glutstroke.h
new file mode 100644 (file)
index 0000000..fbbc70d
--- /dev/null
@@ -0,0 +1,42 @@
+#ifndef __glutstroke_h__\r
+#define __glutstroke_h__\r
+\r
+/* Copyright (c) Mark J. Kilgard, 1994. */\r
+\r
+/* This program is freely distributable without licensing fees \r
+   and is provided without guarantee or warrantee expressed or \r
+   implied. This program is -not- in the public domain. */\r
+\r
+#if defined(_WIN32)\r
+#pragma warning (disable:4244)  /* disable bogus conversion warnings */\r
+#pragma warning (disable:4305)  /* VC++ 5.0 version of above warning. */\r
+#endif\r
+\r
+typedef struct {\r
+  float x;\r
+  float y;\r
+} CoordRec, *CoordPtr;\r
+\r
+typedef struct {\r
+  int num_coords;\r
+  const CoordRec *coord;\r
+} StrokeRec, *StrokePtr;\r
+\r
+typedef struct {\r
+  int num_strokes;\r
+  const StrokeRec *stroke;\r
+  float center;\r
+  float right;\r
+} StrokeCharRec, *StrokeCharPtr;\r
+\r
+typedef struct {\r
+  const char *name;\r
+  int num_chars;\r
+  const StrokeCharRec *ch;\r
+  float top;\r
+  float bottom;\r
+} StrokeFontRec, *StrokeFontPtr;\r
+\r
+typedef void *GLUTstrokeFont;\r
+\r
+#endif /* __glutstroke_h__ */\r
diff --git a/src/glut/os2/layerutil.h b/src/glut/os2/layerutil.h
new file mode 100644 (file)
index 0000000..3786c4d
--- /dev/null
@@ -0,0 +1,59 @@
+#ifndef __layerutil_h__\r
+#define __layerutil_h__\r
+\r
+/* Copyright (c) Mark J. Kilgard, 1993, 1994. */\r
+\r
+/* This program is freely distributable without licensing fees \r
+   and is provided without guarantee or warrantee expressed or \r
+   implied. This program is -not- in the public domain. */\r
+\r
+/* Based on XLayerUtil.h: Revision: 1.3 */\r
+\r
+#ifdef __VMS\r
+#include <GL/vms_x_fix.h>\r
+#endif\r
+\r
+#if !defined(_WIN32) && !defined(__OS2__)\r
+#include <X11/Xlib.h>\r
+#include <X11/Xutil.h>\r
+#include <X11/Xmd.h>\r
+#endif /* !_WIN32 */\r
+\r
+/* Transparent type values */\r
+/* None                       0 */\r
+#define TransparentPixel      1\r
+#define TransparentMask       2\r
+\r
+/* layered visual info template flags */\r
+#define VisualLayerMask                0x200\r
+#define VisualTransparentType  0x400\r
+#define VisualTransparentValue 0x800\r
+#define VisualAllLayerMask     0xFFF\r
+\r
+/* layered visual info structure */\r
+typedef struct _XLayerVisualInfo {\r
+  XVisualInfo vinfo;\r
+  long layer;\r
+  long type;\r
+  unsigned long value;\r
+} XLayerVisualInfo;\r
+\r
+/* SERVER_OVERLAY_VISUALS property element */\r
+typedef struct _OverlayInfo {\r
+  /* Avoid 64-bit portability problems by being careful to use\r
+     longs due to the way XGetWindowProperty is specified. Note\r
+     that these parameters are passed as CARD32s over X\r
+     protocol. */\r
+  long overlay_visual;\r
+  long transparent_type;\r
+  long value;\r
+  long layer;\r
+} OverlayInfo;\r
+\r
+extern int __glutGetTransparentPixel(Display *, XVisualInfo *);\r
+extern XLayerVisualInfo *__glutXGetLayerVisualInfo(Display *,\r
+  long, XLayerVisualInfo *, int *);\r
+extern Status __glutXMatchLayerVisualInfo(Display *,\r
+  int, int, int, int, XLayerVisualInfo *);\r
+\r
+#endif /* __layerutil_h__ */\r
diff --git a/src/glut/os2/libGlut.DEF b/src/glut/os2/libGlut.DEF
new file mode 100644 (file)
index 0000000..fb92544
--- /dev/null
@@ -0,0 +1,94 @@
+\r
+;-----------------------------------------------------\r
+; def Module definition file for the DLL\r
+;-----------------------------------------------------\r
+\r
+LIBRARY libGlut INITINSTANCE TERMINSTANCE\r
+PROTMODE\r
+DATA MULTIPLE NONSHARED READWRITE LOADONCALL\r
+CODE LOADONCALL\r
+EXPORTS          ; Names of exported functions and data\r
+\r
+;*********************************\r
+;MesaGLUT\r
+        glutCommandFunc                @3001\r
+       glutCreateWindow        @3002\r
+       glutCreateSubWindow     @3003\r
+       glutDestroyWindow       @3004\r
+       glutDisplayFunc         @3005\r
+       glutEntryFunc           @3006\r
+       glutExtensionSupported  @3007\r
+       glutIdleFunc            @3008\r
+        glutInit               @3009\r
+       glutInitDisplayMode     @3010\r
+       glutInitWindowPosition  @3011\r
+       glutInitWindowSize      @3012\r
+       glutMainLoop            @3013\r
+       glutGet                 @3014\r
+       glutGetColor            @3015\r
+       glutGetWindow           @3016\r
+       glutKeyboardFunc        @3017\r
+       glutMouseFunc           @3018\r
+       glutSpecialFunc         @3019\r
+       glutStrokeCharacter     @3020\r
+       glutSetColor            @3021\r
+       glutSetIconTitle        @3022\r
+       glutSetWindow           @3023\r
+       glutSetWindowTitle      @3024\r
+\r
+       glutReshapeFunc         @3025\r
+       glutReshapeWindow       @3026\r
+\r
+\r
+       glutSwapBuffers         @3027\r
+       glutPostRedisplay       @3028\r
+       glutPositionWindow      @3029\r
+       glutVisibilityFunc      @3030\r
+       glutTimerFunc           @3031\r
+       glutMotionFunc          @3032\r
+\r
+       glutCreateMenu          @3033\r
+       glutAttachMenu          @3034\r
+       glutDestroyMenu         @3035\r
+       glutAddMenuEntry        @3036\r
+       glutPassiveMotionFunc   @3037\r
+\r
+        glutSolidCone          @3038\r
+       glutSolidCube           @3039\r
+       glutSolidDodecahedron   @3040\r
+       glutSolidOctahedron     @3041\r
+       glutSolidIcosahedron    @3042\r
+       glutSolidSphere         @3043\r
+       glutSolidTeapot         @3044\r
+       glutSolidTetrahedron    @3045\r
+       glutSolidTorus          @3046\r
+\r
+       glutWireCone            @3047\r
+        glutWireCube           @3048\r
+        glutWireDodecahedron   @3049\r
+       glutWireIcosahedron     @3050\r
+       glutWireOctahedron      @3051\r
+       glutWireSphere          @3052\r
+        glutWireTetrahedron    @3053\r
+        glutWireTorus          @3054\r
+       glutWireTeapot          @3055\r
+\r
+;GL_GLEXT_PROTOTYPES   \r
+       glutBitmapCharacter     @3101\r
+        glutBitmap9By15                @3102\r
+        glutBitmapHelvetica10  @3103\r
+        glutBitmapHelvetica12  @3104\r
+        glutBitmapHelvetica18  @3105\r
+        glutBitmapTimesRoman24 @3106\r
+       glutStrokeRoman         @3107\r
+       glutBitmap8By13         @3108\r
+       \r
+;Global constants\r
+;         hab                  @12001\r
+;      /* PM anchor block handle         */\r
+;         hpsCurrent           @12002\r
+         XHDC                  @12004\r
+         XHWND                 @12005\r
+\r
+\r
+\r
diff --git a/src/glut/os2/os2_glx.cpp b/src/glut/os2/os2_glx.cpp
new file mode 100644 (file)
index 0000000..ca345ea
--- /dev/null
@@ -0,0 +1,146 @@
+/* os2_glx.c */\r
+\r
+#include <stdio.h>\r
+#include <string.h>\r
+#include <malloc.h>\r
+#include "gl/gl.h"\r
+#include "WarpGL.h"\r
+#include "GL/os2mesa.h"\r
+\r
+#define POKA 0\r
+/* global current HDC */\r
+\r
+XVisualInfo *wglDescribePixelFormat(int iPixelFormat);\r
+\r
+extern HDC XHDC;\r
+extern HWND XHWND;\r
+//extern HPS hpsCurrent;\r
+extern HAB   hab;      /* PM anchor block handle */\r
+\r
+GLXContext\r
+glXCreateContext(HPS hps, XVisualInfo * visinfo,\r
+  GLXContext share, Bool direct)\r
+{\r
+  /* KLUDGE: GLX really expects a display pointer to be passed\r
+     in as the first parameter, but Win32 needs an HDC instead,\r
+     so BE SURE that the global XHDC is set before calling this\r
+     routine. */\r
+  HGLRC context;\r
+\r
+  context = wglCreateContext(XHDC,hps,hab);\r
+\r
+\r
+  /* Since direct rendering is implicit, the direct flag is\r
+     ignored. */\r
+\r
+  return context;\r
+}\r
+\r
+\r
+int\r
+glXGetConfig(XVisualInfo * visual, int attrib, int *value)\r
+{\r
+  if (!visual)\r
+    return GLX_BAD_VISUAL;\r
+\r
+  switch (attrib) {\r
+  case GLX_USE_GL:\r
+    if (visual->dwFlags & (PFD_SUPPORT_OPENGL | PFD_DRAW_TO_WINDOW)) {\r
+      /* XXX Brad's Matrix Millenium II has problems creating\r
+         color index windows in 24-bit mode (lead to GDI crash)\r
+         and 32-bit mode (lead to black window).  The cColorBits\r
+         filed of the PIXELFORMATDESCRIPTOR returned claims to\r
+         have 24 and 32 bits respectively of color indices. 2^24\r
+         and 2^32 are ridiculously huge writable colormaps.\r
+         Assume that if we get back a color index\r
+         PIXELFORMATDESCRIPTOR with 24 or more bits, the\r
+         PIXELFORMATDESCRIPTOR doesn't really work and skip it.\r
+         -mjk */\r
+      if (visual->iPixelType == PFD_TYPE_COLORINDEX\r
+        && visual->cColorBits >= 24) {\r
+        *value = 0;\r
+      } else {\r
+       *value = 1;\r
+      }\r
+    } else {\r
+      *value = 0;\r
+    }\r
+    break;\r
+  case GLX_BUFFER_SIZE:\r
+    /* KLUDGE: if we're RGBA, return the number of bits/pixel,\r
+       otherwise, return 8 (we guessed at 256 colors in CI\r
+       mode). */\r
+    if (visual->iPixelType == PFD_TYPE_RGBA)\r
+      *value = visual->cColorBits;\r
+    else\r
+      *value = 8;\r
+    break;\r
+  case GLX_LEVEL:\r
+    /* The bReserved flag of the pfd contains the\r
+       overlay/underlay info. */\r
+    *value = visual->bReserved;\r
+    break;\r
+  case GLX_RGBA:\r
+    *value = visual->iPixelType == PFD_TYPE_RGBA;\r
+    break;\r
+  case GLX_DOUBLEBUFFER:\r
+    *value = visual->dwFlags & PFD_DOUBLEBUFFER;\r
+    break;\r
+  case GLX_STEREO:\r
+    *value = visual->dwFlags & PFD_STEREO;\r
+    break;\r
+  case GLX_AUX_BUFFERS:\r
+    *value = visual->cAuxBuffers;\r
+    break;\r
+  case GLX_RED_SIZE:\r
+    *value = visual->cRedBits;\r
+    break;\r
+  case GLX_GREEN_SIZE:\r
+    *value = visual->cGreenBits;\r
+    break;\r
+  case GLX_BLUE_SIZE:\r
+    *value = visual->cBlueBits;\r
+    break;\r
+  case GLX_ALPHA_SIZE:\r
+    *value = visual->cAlphaBits;\r
+    break;\r
+  case GLX_DEPTH_SIZE:\r
+    *value = visual->cDepthBits;\r
+    break;\r
+  case GLX_STENCIL_SIZE:\r
+    *value = visual->cStencilBits;\r
+    break;\r
+  case GLX_ACCUM_RED_SIZE:\r
+    *value = visual->cAccumRedBits;\r
+    break;\r
+  case GLX_ACCUM_GREEN_SIZE:\r
+    *value = visual->cAccumGreenBits;\r
+    break;\r
+  case GLX_ACCUM_BLUE_SIZE:\r
+    *value = visual->cAccumBlueBits;\r
+    break;\r
+  case GLX_ACCUM_ALPHA_SIZE:\r
+    *value = visual->cAccumAlphaBits;\r
+    break;\r
+#if POKA == 100\r
+#endif /*  POKA == 100 */\r
+  default:\r
+    return GLX_BAD_ATTRIB;\r
+  }\r
+  return 0;\r
+}\r
+\r
+\r
+XVisualInfo * glXChooseVisual(int mode)\r
+{  int imode = 2;\r
+   if(mode & GLUT_DOUBLE)\r
+            imode = 1;\r
+   return\r
+         wglDescribePixelFormat(imode);\r
+}\r
+\r
+\r
+#if POKA\r
+#endif /* POKA */\r
+\r
+\1a
\ No newline at end of file
diff --git a/src/glut/os2/os2_menu.cpp b/src/glut/os2/os2_menu.cpp
new file mode 100644 (file)
index 0000000..4eef308
--- /dev/null
@@ -0,0 +1,533 @@
+\r
+/* Copyright (c) Mark J. Kilgard, 1994, 1997, 1998. */\r
+/* Copyright (c) Nate Robins, 1997. */\r
+\r
+/* This program is freely distributable without licensing fees\r
+   and is provided without guarantee or warrantee expressed or\r
+   implied. This program is -not- in the public domain. */\r
+\r
+/* This file completely re-implements glut_menu.c and glut_menu2.c\r
+   for Win32.  Note that neither glut_menu.c nor glut_menu2.c are\r
+   compiled into Win32 GLUT. */\r
+\r
+#include <stdlib.h>\r
+#include <string.h>\r
+#include <stdio.h>\r
+#include <errno.h>\r
+#include <assert.h>\r
+\r
+#include "glutint.h"\r
+\r
+void (GLUTCALLBACK *__glutMenuStatusFunc) (int, int, int);\r
+//GLUTmenu *__glutMappedMenu;\r
+//GLUTwindow *__glutMenuWindow;\r
+GLUTmenuItem *__glutItemSelected;\r
+unsigned __glutMenuButton;\r
+\r
+static GLUTmenu **menuList = NULL;\r
+static int menuListSize = 0;\r
+static UINT uniqueMenuHandler = 1;\r
+\r
+/* DEPRICATED, use glutMenuStatusFunc instead. */\r
+void GLUTAPIENTRY\r
+glutMenuStateFunc(GLUTmenuStateCB menuStateFunc)\r
+{\r
+  __glutMenuStatusFunc = (GLUTmenuStatusCB) menuStateFunc;\r
+}\r
+\r
+void GLUTAPIENTRY\r
+glutMenuStatusFunc(GLUTmenuStatusCB menuStatusFunc)\r
+{\r
+  __glutMenuStatusFunc = menuStatusFunc;\r
+}\r
+\r
+void\r
+__glutSetMenu(GLUTmenu * menu)\r
+{\r
+  __glutCurrentMenu = menu;\r
+}\r
+\r
+static void\r
+unmapMenu(GLUTmenu * menu)\r
+{\r
+  if (menu->cascade) {\r
+    unmapMenu(menu->cascade);\r
+    menu->cascade = NULL;\r
+  }\r
+  menu->anchor = NULL;\r
+  menu->highlighted = NULL;\r
+}\r
+\r
+void\r
+__glutFinishMenu(Window win, int x, int y)\r
+{\r
+\r
+  unmapMenu(__glutMappedMenu);\r
+\r
+  /* XXX Put in a GdiFlush just in case.  Probably unnecessary. -mjk  */\r
+//  GdiFlush();\r
+\r
+  if (__glutMenuStatusFunc) {\r
+    __glutSetWindow(__glutMenuWindow);\r
+    __glutSetMenu(__glutMappedMenu);\r
+\r
+    /* Setting __glutMappedMenu to NULL permits operations that\r
+       change menus or destroy the menu window again. */\r
+    __glutMappedMenu = NULL;\r
+\r
+    __glutMenuStatusFunc(GLUT_MENU_NOT_IN_USE, x, y);\r
+  }\r
+  /* Setting __glutMappedMenu to NULL permits operations that\r
+     change menus or destroy the menu window again. */\r
+  __glutMappedMenu = NULL;\r
+\r
+  /* If an item is selected and it is not a submenu trigger,\r
+     generate menu callback. */\r
+  if (__glutItemSelected && !__glutItemSelected->isTrigger) {\r
+    __glutSetWindow(__glutMenuWindow);\r
+    /* When menu callback is triggered, current menu should be\r
+       set to the callback menu. */\r
+    __glutSetMenu(__glutItemSelected->menu);\r
+    __glutItemSelected->menu->select(__glutItemSelected->value);\r
+  }\r
+  __glutMenuWindow = NULL;\r
+}\r
+\r
+static void\r
+mapMenu(GLUTmenu * menu, int x, int y)\r
+{\r
+//todo\r
+//  TrackPopupMenu((HMENU) menu->win, TPM_LEFTALIGN |\r
+//    (__glutMenuButton == TPM_RIGHTBUTTON) ? TPM_RIGHTBUTTON : TPM_LEFTBUTTON,\r
+//    x, y, 0, __glutCurrentWindow->win, NULL);\r
+}\r
+\r
+void\r
+__glutStartMenu(GLUTmenu * menu, GLUTwindow * window,\r
+               int x, int y, int x_win, int y_win)\r
+{\r
+  assert(__glutMappedMenu == NULL);\r
+  __glutMappedMenu = menu;\r
+  __glutMenuWindow = window;\r
+  __glutItemSelected = NULL;\r
+  if (__glutMenuStatusFunc) {\r
+    __glutSetMenu(menu);\r
+    __glutSetWindow(window);\r
+    __glutMenuStatusFunc(GLUT_MENU_IN_USE, x_win, y_win);\r
+  }\r
+  mapMenu(menu, x, y);\r
+}\r
+\r
+GLUTmenuItem *\r
+__glutGetUniqueMenuItem(GLUTmenu * menu, UINT unique)\r
+{\r
+  GLUTmenuItem *item;\r
+  int i;\r
+\r
+  i = menu->num;\r
+  item = menu->list;\r
+  while (item) {\r
+    if (item->unique == unique) {\r
+      return item;\r
+    }\r
+    if (item->isTrigger) {\r
+      GLUTmenuItem *subitem;\r
+      subitem = __glutGetUniqueMenuItem(menuList[item->value], unique);\r
+      if (subitem) {\r
+        return subitem;\r
+      }\r
+    }\r
+    i--;\r
+    item = item->next;\r
+  }\r
+  return NULL;\r
+}\r
+\r
+GLUTmenuItem *\r
+__glutGetMenuItem(GLUTmenu * menu, Window win, int *which)\r
+{\r
+  GLUTmenuItem *item;\r
+  int i;\r
+\r
+  i = menu->num;\r
+  item = menu->list;\r
+  while (item) {\r
+    if (item->win == win) {\r
+      *which = i;\r
+      return item;\r
+    }\r
+    if (item->isTrigger) {\r
+      GLUTmenuItem *subitem;\r
+\r
+      subitem = __glutGetMenuItem(menuList[item->value],\r
+        win, which);\r
+      if (subitem) {\r
+        return subitem;\r
+      }\r
+    }\r
+    i--;\r
+    item = item->next;\r
+  }\r
+  return NULL;\r
+}\r
+\r
+GLUTmenu *\r
+__glutGetMenu(Window win)\r
+{\r
+  GLUTmenu *menu;\r
+\r
+  menu = __glutMappedMenu;\r
+  while (menu) {\r
+    if (win == menu->win) {\r
+      return menu;\r
+    }\r
+    menu = menu->cascade;\r
+  }\r
+  return NULL;\r
+}\r
+\r
+GLUTmenu *\r
+__glutGetMenuByNum(int menunum)\r
+{\r
+  if (menunum < 1 || menunum > menuListSize) {\r
+    return NULL;\r
+  }\r
+  return menuList[menunum - 1];\r
+}\r
+\r
+static int\r
+getUnusedMenuSlot(void)\r
+{\r
+  int i;\r
+\r
+  /* Look for allocated, unused slot. */\r
+  for (i = 0; i < menuListSize; i++) {\r
+    if (!menuList[i]) {\r
+      return i;\r
+    }\r
+  }\r
+  /* Allocate a new slot. */\r
+  menuListSize++;\r
+  if (menuList) {\r
+    menuList = (GLUTmenu **)\r
+      realloc(menuList, menuListSize * sizeof(GLUTmenu *));\r
+  } else {\r
+    /* XXX Some realloc's do not correctly perform a malloc\r
+       when asked to perform a realloc on a NULL pointer,\r
+       though the ANSI C library spec requires this. */\r
+    menuList = (GLUTmenu **) malloc(sizeof(GLUTmenu *));\r
+  }\r
+  if (!menuList) {\r
+    __glutFatalError("out of memory.");\r
+  }\r
+  menuList[menuListSize - 1] = NULL;\r
+  return menuListSize - 1;\r
+}\r
+\r
+static void\r
+menuModificationError(void)\r
+{\r
+  /* XXX Remove the warning after GLUT 3.0. */\r
+  __glutWarning("The following is a new check for GLUT 3.0; update your code.");\r
+  __glutFatalError("menu manipulation not allowed while menus in use.");\r
+}\r
+\r
+int GLUTAPIENTRY\r
+glutCreateMenu(GLUTselectCB selectFunc)\r
+{\r
+  GLUTmenu *menu;\r
+  int menuid;\r
+\r
+  if (__glutMappedMenu) {\r
+    menuModificationError();\r
+  }\r
+  menuid = getUnusedMenuSlot();\r
+  menu = (GLUTmenu *) malloc(sizeof(GLUTmenu));\r
+  if (!menu) {\r
+    __glutFatalError("out of memory.");\r
+  }\r
+  menu->id = menuid;\r
+  menu->num = 0;\r
+  menu->submenus = 0;\r
+  menu->select = selectFunc;\r
+  menu->list = NULL;\r
+  menu->cascade = NULL;\r
+  menu->highlighted = NULL;\r
+  menu->anchor = NULL;\r
+//todo\r
+//  menu->win = (HWND) CreatePopupMenu();\r
+  menuList[menuid] = menu;\r
+  __glutSetMenu(menu);\r
+  return menuid + 1;\r
+}\r
+\r
+\r
+void GLUTAPIENTRY\r
+glutDestroyMenu(int menunum)\r
+{\r
+  GLUTmenu *menu = __glutGetMenuByNum(menunum);\r
+  GLUTmenuItem *item, *next;\r
+\r
+  if (__glutMappedMenu) {\r
+    menuModificationError();\r
+  }\r
+  assert(menu->id == menunum - 1);\r
+//todo  DestroyMenu( (HMENU) menu->win);\r
+  menuList[menunum - 1] = NULL;\r
+  /* free all menu entries */\r
+  item = menu->list;\r
+  while (item) {\r
+    assert(item->menu == menu);\r
+    next = item->next;\r
+    free(item->label);\r
+    free(item);\r
+    item = next;\r
+  }\r
+  if (__glutCurrentMenu == menu) {\r
+    __glutCurrentMenu = NULL;\r
+  }\r
+  free(menu);\r
+}\r
+\r
+int GLUTAPIENTRY\r
+glutGetMenu(void)\r
+{\r
+  if (__glutCurrentMenu) {\r
+    return __glutCurrentMenu->id + 1;\r
+  } else {\r
+    return 0;\r
+  }\r
+}\r
+\r
+void GLUTAPIENTRY\r
+glutSetMenu(int menuid)\r
+{\r
+  GLUTmenu *menu;\r
+\r
+  if (menuid < 1 || menuid > menuListSize) {\r
+    __glutWarning("glutSetMenu attempted on bogus menu.");\r
+    return;\r
+  }\r
+  menu = menuList[menuid - 1];\r
+  if (!menu) {\r
+    __glutWarning("glutSetMenu attempted on bogus menu.");\r
+    return;\r
+  }\r
+  __glutSetMenu(menu);\r
+}\r
+\r
+static void\r
+setMenuItem(GLUTmenuItem * item, const char *label,\r
+           int value, Bool isTrigger)\r
+{\r
+  GLUTmenu *menu;\r
+\r
+  menu = item->menu;\r
+  item->label = __glutStrdup(label);\r
+  if (!item->label) {\r
+    __glutFatalError("out of memory.");\r
+  }\r
+  item->isTrigger = isTrigger;\r
+  item->len = (int) strlen(label);\r
+  item->value = value;\r
+  item->unique = uniqueMenuHandler++;\r
+//todo\r
+//  if (isTrigger) {\r
+//    AppendMenu((HMENU) menu->win, MF_POPUP, (UINT)item->win, label);\r
+//  } else {\r
+//    AppendMenu((HMENU) menu->win, MF_STRING, item->unique, label);\r
+//  }\r
+}\r
+\r
+void GLUTAPIENTRY\r
+glutAddMenuEntry(const char *label, int value)\r
+{\r
+  GLUTmenuItem *entry;\r
+\r
+  if (__glutMappedMenu) {\r
+    menuModificationError();\r
+  }\r
+  entry = (GLUTmenuItem *) malloc(sizeof(GLUTmenuItem));\r
+  if (!entry) {\r
+    __glutFatalError("out of memory.");\r
+  }\r
+  entry->menu = __glutCurrentMenu;\r
+  setMenuItem(entry, label, value, FALSE);\r
+  __glutCurrentMenu->num++;\r
+  entry->next = __glutCurrentMenu->list;\r
+  __glutCurrentMenu->list = entry;\r
+}\r
+\r
+void GLUTAPIENTRY\r
+glutAddSubMenu(const char *label, int menu)\r
+{\r
+  GLUTmenuItem *submenu;\r
+  GLUTmenu     *popupmenu;\r
+\r
+  if (__glutMappedMenu) {\r
+    menuModificationError();\r
+  }\r
+  submenu = (GLUTmenuItem *) malloc(sizeof(GLUTmenuItem));\r
+  if (!submenu) {\r
+    __glutFatalError("out of memory.");\r
+  }\r
+  __glutCurrentMenu->submenus++;\r
+  submenu->menu = __glutCurrentMenu;\r
+  popupmenu = __glutGetMenuByNum(menu);\r
+  if (popupmenu) {\r
+    submenu->win = popupmenu->win;\r
+  }\r
+  setMenuItem(submenu, label, /* base 0 */ menu - 1, TRUE);\r
+  __glutCurrentMenu->num++;\r
+  submenu->next = __glutCurrentMenu->list;\r
+  __glutCurrentMenu->list = submenu;\r
+}\r
+\r
+void GLUTAPIENTRY\r
+glutChangeToMenuEntry(int num, const char *label, int value)\r
+{\r
+  GLUTmenuItem *item;\r
+  int i;\r
+\r
+  if (__glutMappedMenu) {\r
+    menuModificationError();\r
+  }\r
+  i = __glutCurrentMenu->num;\r
+  item = __glutCurrentMenu->list;\r
+  while (item) {\r
+    if (i == num) {\r
+      if (item->isTrigger) {\r
+        /* If changing a submenu trigger to a menu entry, we\r
+           need to account for submenus.  */\r
+        item->menu->submenus--;\r
+       /* Nuke the Win32 menu. */\r
+//todo\r
+//       DestroyMenu((HMENU) item->win);\r
+      }\r
+      free(item->label);\r
+\r
+      item->label = strdup(label);\r
+      if (!item->label)\r
+       __glutFatalError("out of memory");\r
+      item->isTrigger = FALSE;\r
+      item->len = (int) strlen(label);\r
+      item->value = value;\r
+      item->unique = uniqueMenuHandler++;\r
+//todo\r
+//      ModifyMenu((HMENU) __glutCurrentMenu->win, (UINT) i - 1,\r
+//        MF_BYPOSITION | MFT_STRING, item->unique, label);\r
+\r
+      return;\r
+    }\r
+    i--;\r
+    item = item->next;\r
+  }\r
+  __glutWarning("Current menu has no %d item.", num);\r
+}\r
+\r
+void GLUTAPIENTRY\r
+glutChangeToSubMenu(int num, const char *label, int menu)\r
+{\r
+  GLUTmenu *popupmenu;\r
+  GLUTmenuItem *item;\r
+  int i;\r
+\r
+  if (__glutMappedMenu) {\r
+    menuModificationError();\r
+  }\r
+  i = __glutCurrentMenu->num;\r
+  item = __glutCurrentMenu->list;\r
+  while (item) {\r
+    if (i == num) {\r
+      if (!item->isTrigger) {\r
+        /* If changing a menu entry to as submenu trigger, we\r
+           need to account for submenus.  */\r
+        item->menu->submenus++;\r
+//todo\r
+//       item->win = (HWND) CreatePopupMenu();\r
+      }\r
+      free(item->label);\r
+\r
+      item->label = strdup(label);\r
+      if (!item->label)\r
+       __glutFatalError("out of memory");\r
+      item->isTrigger = TRUE;\r
+      item->len = (int) strlen(label);\r
+      item->value = menu - 1;\r
+      item->unique = uniqueMenuHandler++;\r
+      popupmenu = __glutGetMenuByNum(menu);\r
+      if (popupmenu)\r
+       item->win = popupmenu->win;\r
+//todo\r
+//      ModifyMenu((HMENU) __glutCurrentMenu->win, (UINT) i - 1,\r
+//        MF_BYPOSITION | MF_POPUP, (UINT) item->win, label);\r
+      return;\r
+    }\r
+    i--;\r
+    item = item->next;\r
+  }\r
+  __glutWarning("Current menu has no %d item.", num);\r
+}\r
+\r
+void GLUTAPIENTRY\r
+glutRemoveMenuItem(int num)\r
+{\r
+  GLUTmenuItem *item, **prev;\r
+  int i;\r
+\r
+  if (__glutMappedMenu) {\r
+    menuModificationError();\r
+  }\r
+  i = __glutCurrentMenu->num;\r
+  prev = &__glutCurrentMenu->list;\r
+  item = __glutCurrentMenu->list;\r
+  while (item) {\r
+    if (i == num) {\r
+      /* Found the menu item in list to remove. */\r
+      __glutCurrentMenu->num--;\r
+\r
+      /* Patch up menu's item list. */\r
+      *prev = item->next;\r
+//todo\r
+//      RemoveMenu((HMENU) __glutCurrentMenu->win, (UINT) i - 1, MF_BYPOSITION);\r
+\r
+      free(item->label);\r
+      free(item);\r
+      return;\r
+    }\r
+    i--;\r
+    prev = &item->next;\r
+    item = item->next;\r
+  }\r
+  __glutWarning("Current menu has no %d item.", num);\r
+}\r
+\r
+void GLUTAPIENTRY\r
+glutAttachMenu(int button)\r
+{\r
+  if (__glutCurrentWindow == __glutGameModeWindow) {\r
+    __glutWarning("cannot attach menus in game mode.");\r
+    return;\r
+  }\r
+  if (__glutMappedMenu) {\r
+    menuModificationError();\r
+  }\r
+  if (__glutCurrentWindow->menu[button] < 1) {\r
+    __glutCurrentWindow->buttonUses++;\r
+  }\r
+  __glutCurrentWindow->menu[button] = __glutCurrentMenu->id + 1;\r
+}\r
+\r
+void GLUTAPIENTRY\r
+glutDetachMenu(int button)\r
+{\r
+  if (__glutMappedMenu) {\r
+    menuModificationError();\r
+  }\r
+  if (__glutCurrentWindow->menu[button] > 0) {\r
+    __glutCurrentWindow->buttonUses--;\r
+    __glutCurrentWindow->menu[button] = 0;\r
+  }\r
+}\r
+\r
+\1a
\ No newline at end of file
diff --git a/src/glut/os2/os2_winproc.cpp b/src/glut/os2/os2_winproc.cpp
new file mode 100644 (file)
index 0000000..e2d4ba9
--- /dev/null
@@ -0,0 +1,1297 @@
+/* os2_winproc.c */\r
+\r
+\r
+#define INCL_DEV\r
+#include "WarpGL.h"\r
+#include "GL/os2mesa.h"\r
+\r
+\r
+#define  _MEERROR_H_\r
+#include <mmioos2.h>                   /* It is from MMPM toolkit           */\r
+#include <dive.h>\r
+#include <fourcc.h>\r
+\r
+\r
+#include "os2mesadef.h"\r
+#include "glutint.h"\r
+\r
+\r
+#define POKA 0\r
+\r
+#if POKA\r
+\r
+extern unsigned __glutMenuButton;\r
+extern GLUTidleCB __glutIdleFunc;\r
+extern GLUTtimer *__glutTimerList;\r
+extern void handleTimeouts(void);\r
+extern GLUTmenuItem *__glutGetUniqueMenuItem(GLUTmenu * menu, int unique);\r
+static HMENU __glutHMenu;\r
+\r
+#endif\r
+\r
+extern void _mesa_ResizeBuffersMESA( void );\r
+\r
+\r
+MRESULT EXPENTRY GlutWindowProc( HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2 );\r
+MRESULT EXPENTRY GlutWindowChildProc( HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2 );\r
+void updateWindowState(GLUTwindow *window, int visState);\r
+\r
+volatile extern HAB   hab;      /* PM anchor block handle         */\r
+volatile extern HPS   hpsCurrent;\r
+\r
+RECTL     rCtls[52];\r
+ULONG     ulNumRcls;\r
+\r
+MRESULT EXPENTRY GlutWindowChildProc( HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2 )\r
+{   MRESULT rc;\r
+    rc = GlutWindowProc(hwnd, msg, mp1, mp2 );\r
+    return rc;\r
+}\r
+\r
+MRESULT EXPENTRY GlutWindowProc( HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2 )\r
+{\r
+  HPS   hps = NULLHANDLE; /* presentation space handle */\r
+  GLUTwindow*   window;   /* GLUT window associated with message. */\r
+  GLUTmenu*     menu;     /* GLUT menu associated with message. */\r
+  RECTL rclClient;\r
+  POINTL point;\r
+  int button = -1,rc,key;\r
+\r
+\r
+/* Process the message. */\r
+\r
+   switch( msg )\r
+   {\r
+      case WM_CREATE:\r
+     {\r
+      SIZEL sizl = { 0L, 0L };\r
+      LONG  *alCaps;\r
+      HDC hdc;\r
+\r
+      /*+-----------------------------------------------------------------+*/\r
+      /*| The client window is being created.  Create the semaphore to    |*/\r
+      /*| control access to the presentation space.  Then create the      |*/\r
+      /*| thread that will draw the lines.                                |*/\r
+      /*+-----------------------------------------------------------------+*/\r
+ //    DosCreateMutexSem( (PSZ)NULL, &hmtxPS, 0UL, FALSE );\r
+\r
+      hdc = WinOpenWindowDC(hwnd);\r
+\r
+      /*+-----------------------------------------------------------------+*/\r
+      /*| Create a non-cached presentation space.  We will not release    |*/\r
+      /*| this PS, as we will be Selecting a Palette to this PS and then  |*/\r
+      /*| animating the palette.  Upon releasing a PS the palette is no   |*/\r
+      /*| longer selected for obvious reasons.                            |*/\r
+      /*+-----------------------------------------------------------------+*/\r
+      hpsCurrent = GpiCreatePS( hab,\r
+                  hdc,\r
+                  &sizl,\r
+                  PU_PELS | GPIF_DEFAULT |\r
+                  GPIT_MICRO | GPIA_ASSOC );\r
+//      DevQueryCaps( hdc, lStart, lCount, alCaps );\r
+//      fPaletteCaps = alCaps[CAPS_ADDITIONAL_GRAPHICS] & CAPS_PALETTE_MANAGER;\r
+//      PaletteInit(3);\r
+       /* Â¯Â¥p¥¢®¤ hpsBuffer Â¢ p¥¦¨¬ RGB color table  */\r
+\r
+        GpiCreateLogColorTable(hpsCurrent,0 ,LCOLF_RGB,0,0,NULL);\r
+        GpiSetPattern(hpsCurrent,PATSYM_SOLID);\r
+        GpiSetPatternSet(hpsCurrent,LCID_DEFAULT);\r
+\r
+     }\r
+    break;\r
+\r
+         return 0;\r
+      case WM_CLOSE:\r
+        WinPostMsg( hwnd, WM_QUIT, NULL, NULL );\r
+\r
+        return 0;\r
+\r
+      case WM_PAINT:\r
+    window = __glutGetWindow(hwnd);\r
+    if (window)\r
+    {\r
+       PWMC ctx;\r
+//   hps = WinBeginPaint(hwnd,NULLHANDLE,&rclClient);\r
+    hps = WinBeginPaint(hwnd,NULLHANDLE,&rclClient);\r
+       // blit Dive buffer to screen.\r
+\r
+     {\r
+         SWP    swp;            // Window position\r
+         POINTL pointl;         // Point to offset from Desktop\r
+\r
+             // Convert the point to offset from desktop lower left.\r
+             pointl.x = 0;\r
+             pointl.y = 0;\r
+             WinMapWindowPoints ( hwnd, HWND_DESKTOP, &pointl, 1 );\r
+\r
+\r
+//            ctx = window->ctx;\r
+//            ctx->xDiveScr = pointl.x;\r
+//            ctx->yDiveScr = pointl.y;\r
+      }\r
+//      rc = DiveBlitImage (ctx->hDive,\r
+//                          ctx->ulDiveBufferNumber,\r
+//                      DIVE_BUFFER_SCREEN );\r
+//\r
+\r
+        if (window->win == hwnd) {\r
+          __glutPostRedisplay(window, GLUT_REPAIR_WORK);\r
+        } else if (window->overlay && window->overlay->win == hwnd) {\r
+         __glutPostRedisplay(window, GLUT_OVERLAY_REPAIR_WORK);\r
+        }\r
+        WinEndPaint(hps);\r
+    } else {\r
+\r
+        hps = WinBeginPaint(hwnd,NULLHANDLE,&rclClient);\r
+        WinFillRect(hps, &rclClient, CLR_WHITE);\r
+        WinEndPaint(hps);\r
+    }\r
+        break;\r
+\r
+    case WM_VRNDISABLED:\r
+\r
+//           pwinData->fDataInProcess = TRUE;\r
+//           DiveSetupBlitter ( pwinData->hDive, 0 );\r
+//           pwinData->fVrnDisabled = TRUE;\r
+        break;\r
+\r
+    case WM_VRNENABLED:\r
+      {    HRGN      hrgn;      /* Region handle  */\r
+           RGNRECT   rgnCtl;    /* Processing control structure  */\r
+//           RECTL     rCtls[52];\r
+//           ULONG     ulNumRcls;\r
+\r
+//            pwinData->fDataInProcess = TRUE;\r
+            hps = WinGetPS ( hwnd );\r
+            if ( !hps )\r
+                  break;\r
+            hrgn = GpiCreateRegion ( hps, 0L, NULL );\r
+            if ( hrgn )\r
+            {  /* NOTE: If mp1 is zero, then this was just a move message.\r
+               ** Illustrate the visible region on a WM_VRNENABLE.\r
+               */\r
+               WinQueryVisibleRegion ( hwnd, hrgn );\r
+               rgnCtl.ircStart     = 0;\r
+               rgnCtl.crc          = 50;\r
+               rgnCtl.ulDirection  = 1;\r
+\r
+               /* Get the all ORed rectangles */\r
+               if ( GpiQueryRegionRects ( hps, hrgn, NULL,\r
+                                          &rgnCtl, rCtls) )\r
+               {\r
+                  ulNumRcls = rgnCtl.crcReturned;\r
+\r
+                  /* Now find the window position and size, relative to parent.\r
+                  */\r
+//                  WinQueryWindowPos ( pwinData->hwndClient, &pwinData->swp );\r
+\r
+//                  rcl.xLeft   = 0;\r
+//                  rcl.yBottom = 0;\r
+\r
+                  /* Convert the point to offset from desktop lower left.\r
+                  */\r
+//                  pointl.x = pwinData->swp.x;\r
+//                  pointl.y = pwinData->swp.y;\r
+\r
+//                  WinMapWindowPoints ( pwinData->hwndFrame,\r
+//                                       HWND_DESKTOP, &pointl, 1 );\r
+\r
+//                  pwinData->cxWindowPos = pointl.x;\r
+//                  pwinData->cyWindowPos = pointl.y;\r
+\r
+               }\r
+               GpiDestroyRegion( hps, hrgn );\r
+            }\r
+            WinReleasePS( hps );\r
+\r
+      }\r
+        break;\r
+\r
+  case WM_SIZE:\r
+    window = __glutGetWindow(hwnd);\r
+    if (window)\r
+    {  int width,height;\r
+       width = SHORT1FROMMP(mp2);\r
+      height = SHORT2FROMMP(mp2);\r
+      if (width != window->width || height != window->height) {\r
+#if 0  /* Win32 GLUT does not support overlays for now. */\r
+       if (window->overlay) {\r
+         XResizeWindow(__glutDisplay, window->overlay->win, width, height);\r
+       }\r
+#endif\r
+       window->width = width;\r
+       window->height = height;\r
+       __glutSetWindow(window);\r
+       if(width <= 0 || height <= 0)\r
+                            break;\r
+       _mesa_ResizeBuffersMESA();\r
+\r
+       /* Do not execute OpenGL out of sequence with respect\r
+          to the SetWindowPos request! */\r
+       window->reshape(width, height);\r
+       window->forceReshape = FALSE;\r
+       /* A reshape should be considered like posting a\r
+          repair request. */\r
+       __glutPostRedisplay(window, GLUT_REPAIR_WORK);\r
+      }\r
+    }\r
+    return 0;\r
+  case WM_SHOW:\r
+    window = __glutGetWindow(hwnd);\r
+    if (window) {\r
+       int visState;\r
+       visState = SHORT1FROMMP( mp1 );\r
+       updateWindowState(window, visState);\r
+    }\r
+    return 0;\r
+\r
+  case WM_ACTIVATE:\r
+    window = __glutGetWindow(hwnd);\r
+//    /* Make sure we re-select the correct palette if needed. */\r
+//    if (LOWORD(wParam)) {\r
+//      PostMessage(hwnd, WM_PALETTECHANGED, 0, 0);\r
+//    }\r
+    if (window) {\r
+       int visState;\r
+       visState = SHORT1FROMMP( mp1 );\r
+       updateWindowState(window, visState);\r
+    }\r
+    return 0;\r
+\r
+  case WM_CHAR:\r
+  { USHORT fsflags;\r
+    window = __glutGetWindow(hwnd);\r
+    if (!window) {\r
+      break;\r
+    }\r
+    fsflags = SHORT1FROMMP(mp1);\r
+/* ?? */\r
+    if((fsflags & KC_KEYUP) )  /* Â¨Â£Â­Â®p¨p㥬 Â®Ã¢Â¦Â Ã¢Â¨Â¥ ÂªÂ­Â®Â¯ÂªÂ¨, p¥ £¨p㥬 Ã¢Â®Â«Ã¬ÂªÂ® Â­Â  Â­Â Â¦Â Ã¢Â¨Â¥  */\r
+            break;\r
+///////////////////////////////////////////////////\r
+   if(!(fsflags & KC_CHAR) )\r
+   {\r
+        if (!(fsflags & KC_VIRTUALKEY))\r
+                             break;\r
+        key = 0;\r
+         /* Get the virtual key from mp2.       */\r
+         switch (SHORT2FROMMP(mp2))\r
+         {\r
+/* directional keys */\r
+          case VK_LEFT:  key = GLUT_KEY_LEFT;  break;\r
+          case VK_UP:    key = GLUT_KEY_UP;    break;\r
+          case VK_RIGHT: key = GLUT_KEY_RIGHT; break;\r
+          case VK_DOWN:  key = GLUT_KEY_DOWN;  break;\r
+\r
+          case VK_PAGEUP:  key = GLUT_KEY_PAGE_UP;    break;\r
+          case VK_PAGEDOWN:key = GLUT_KEY_PAGE_DOWN;  break;\r
+          case VK_HOME:    key = GLUT_KEY_HOME;break;\r
+          case VK_END:     key = GLUT_KEY_END; break;\r
+          case VK_INSERT:  key = GLUT_KEY_INSERT;     break;\r
+\r
+/* function keys */\r
+          case VK_F1 : key = GLUT_KEY_F1;  break;\r
+          case VK_F2 : key = GLUT_KEY_F2; break;\r
+          case VK_F3 : key = GLUT_KEY_F3; break;\r
+          case VK_F4 : key = GLUT_KEY_F4; break;\r
+          case VK_F5 : key = GLUT_KEY_F5; break;\r
+          case VK_F6 : key = GLUT_KEY_F6; break;\r
+          case VK_F7 : key = GLUT_KEY_F7; break;\r
+          case VK_F8 : key = GLUT_KEY_F8; break;\r
+          case VK_F9 : key = GLUT_KEY_F9; break;\r
+          case VK_F10: key = GLUT_KEY_F10;break;\r
+          case VK_F11: key = GLUT_KEY_F11; break;\r
+          case VK_F12: key = GLUT_KEY_F12; break;\r
+          case VK_ESC:   key = -1; break;  /* Character codes */\r
+          case VK_SPACE: key = -1; break;\r
+          case VK_TAB:   key = -1; break;\r
+         }\r
+         if(!key)\r
+         {     break; /* Key Not implemented  */\r
+         }\r
+         if(key > 0)\r
+         {   if (!window->special)  /* Â­Â¥ Ã£Ã¡Ã¢Â Â­Â®Â¢Â«Â¥Â­Â® Â®Â¡Ã Â Â¡Â®Ã¢Ã§Â¨ÂªÂ  */\r
+                             break;\r
+\r
+               WinQueryPointerPos(HWND_DESKTOP,&point);\r
+               ScreenToClient(window->win, &point);\r
+               __glutSetWindow(window);\r
+               __glutModifierMask = 0;\r
+               if(WinGetKeyState(HWND_DESKTOP,VK_SHIFT) & 0x8000)   /*  high order bit is on */\r
+                          __glutModifierMask |= ShiftMask;\r
+               if(WinGetKeyState(HWND_DESKTOP,VK_CTRL) & 0x8000)\r
+                          __glutModifierMask |= ControlMask;\r
+               if(WinGetKeyState(HWND_DESKTOP,VK_MENU) & 0x8000)\r
+                          __glutModifierMask |= Mod1Mask;\r
+               window->special(key, point.x, point.y);\r
+               __glutModifierMask = (unsigned int) ~0;\r
+               return 0;\r
+         }\r
+\r
+   }\r
+/////////////////////////////////////////////////////\r
+    /* If  we are ignoring auto repeated key strokes for the window, bail. */\r
+    if (window->ignoreKeyRepeat && (CHAR3FROMMP(mp1)) )\r
+                                                   break;\r
+     if(!((unsigned char)SHORT1FROMMP(mp2))  )  /* Â¨Â£Â­Â®p¨p㥬 Â­Â¥Ã¡Â¨Â¬Â¢Â®Â«Ã¬Â­Ã«Â¥ ÂªÂ®Â¤Ã« */\r
+                                            break;\r
+    if (window->keyboard) {\r
+       WinQueryPointerPos(HWND_DESKTOP,&point);\r
+\r
+      ScreenToClient(window->win, &point);\r
+      __glutSetWindow(window);\r
+      __glutModifierMask = 0;\r
+      if(WinGetKeyState(HWND_DESKTOP,VK_SHIFT) & 0x8000)   /*  high order bit is on */\r
+           __glutModifierMask |= ShiftMask;\r
+      if(WinGetKeyState(HWND_DESKTOP,VK_CTRL) & 0x8000)\r
+           __glutModifierMask |= ControlMask;\r
+      if(WinGetKeyState(HWND_DESKTOP,VK_MENU) & 0x8000)\r
+           __glutModifierMask |= Mod1Mask;\r
+      window->keyboard((unsigned char)SHORT1FROMMP(mp2), point.x, point.y);\r
+      __glutModifierMask = (unsigned int) ~0;\r
+    }\r
+    return 0;\r
+  } /* endof case WM_CHAR: */\r
+////////////////////////////////////////////////\r
+  case WM_BUTTON1DOWN:\r
+    button = GLUT_LEFT_BUTTON;\r
+  case WM_BUTTON3DOWN:\r
+    if (button < 0)\r
+      button = GLUT_MIDDLE_BUTTON;\r
+  case WM_BUTTON2DOWN:\r
+    if (button < 0)\r
+      button = GLUT_RIGHT_BUTTON;\r
+    {  POINTS psh;\r
+       psh = *((POINTS *)&mp1);\r
+       point.x = psh.x;\r
+       point.y = psh.y;\r
+    }\r
+    /* finish the menu if we get a button down message (user must have\r
+       cancelled the menu). */\r
+    if (__glutMappedMenu) {\r
+      /* TODO: take this out once the menu on middle mouse stuff works\r
+        properly. */\r
+      if (button == GLUT_MIDDLE_BUTTON)\r
+       return 0;\r
+ /* get current mouse pointer position */\r
+//      WinQueryPointerPos(HWND_DESKTOP,&point);\r
+ /* map from desktop to client window */\r
+//      WinMapWindowPoints(HWND_DESKTOP, hwnd, &point, 1);\r
+      __glutItemSelected = NULL;\r
+      __glutFinishMenu(hwnd, point.x, point.y);\r
+      return 0;\r
+    }\r
+    window = __glutGetWindow(hwnd);\r
+    if (window) {\r
+      window->buttonDownState = button+1;\r
+      menu = __glutGetMenuByNum(window->menu[button]);\r
+      if (menu) {\r
+//todo\r
+//   __glutMenuButton = button == GLUT_RIGHT_BUTTON ? TPM_RIGHTBUTTON :\r
+//                           button == GLUT_LEFT_BUTTON  ? TPM_LEFTBUTTON :\r
+//                           0x0001;\r
+//   __glutStartMenu(menu, window, point.x, point.y, x, y);\r
+      } else if (window->mouse) {\r
+\r
+       __glutSetWindow(window);\r
+       __glutModifierMask = 0;\r
+       if (WinGetKeyState(HWND_DESKTOP,VK_SHIFT) & 0x8000)  /* < 0 = high order bit is on. */\r
+            __glutModifierMask |= ShiftMask;\r
+       if (WinGetKeyState(HWND_DESKTOP,VK_CTRL) & 0x8000)\r
+            __glutModifierMask |= ControlMask;\r
+       if (WinGetKeyState(HWND_DESKTOP,VK_MENU) & 0x8000)\r
+            __glutModifierMask |= Mod1Mask;\r
+      window->mouse(button, GLUT_DOWN, point.x, point.y);\r
+      __glutModifierMask = (unsigned int)~0;\r
+      } else {\r
+   /* Stray mouse events.  Ignore. */\r
+      }\r
+    }\r
+    return 0;\r
+\r
+    break;\r
+/********************************************/\r
+  case WM_BUTTON1UP:\r
+    button = GLUT_LEFT_BUTTON;\r
+  case WM_BUTTON3UP:\r
+    if (button < 0)\r
+      button = GLUT_MIDDLE_BUTTON;\r
+  case WM_BUTTON2UP:\r
+    if (button < 0)\r
+      button = GLUT_RIGHT_BUTTON;\r
+    {  POINTS psh;\r
+       psh = *((POINTS *)&mp1);\r
+       point.x = psh.x;\r
+       point.y = psh.y;\r
+    }\r
+    /* Bail out if we're processing a menu. */\r
+    /* Bail out = Â¢Ã«Â¡Ã Â®Ã¡Â¨Ã¢Ã¬Ã¡Ã¯ Ã¡ Â¯Â Ã Â Ã¨Ã£Ã¢Â®Â¬   */\r
+    if (__glutMappedMenu) {\r
+      WinQueryPointerPos(HWND_DESKTOP,&point);\r
+      WinMapWindowPoints(HWND_DESKTOP, hwnd, &point, 1);\r
+      /* if we're getting the middle button up signal, then something\r
+        on the menu was selected. */\r
+      if (button == GLUT_MIDDLE_BUTTON) {\r
+       return 0;\r
+       /* For some reason, the code below always returns -1 even\r
+          though the point IS IN THE ITEM!  Therefore, just bail out if\r
+          we get a middle mouse up.  The user must select using the\r
+          left mouse button.  Stupid Win32. */\r
+#if 0\r
+       int item = MenuItemFromPoint(hwnd, __glutHMenu, point);\r
+       if (item != -1)\r
+         __glutItemSelected = (GLUTmenuItem*)GetMenuItemID(__glutHMenu, item);\r
+       else\r
+         __glutItemSelected = NULL;\r
+       __glutFinishMenu(hwnd, point.x, point.y);\r
+#endif\r
+      } else {\r
+       __glutItemSelected = NULL;\r
+       __glutFinishMenu(hwnd, point.x, point.y);\r
+      }\r
+      return 0;\r
+    }\r
+\r
+    window = __glutGetWindow(hwnd);\r
+    if(window)\r
+           window->buttonDownState = 0;\r
+\r
+    if (window && window->mouse) {\r
+      __glutSetWindow(window);\r
+      __glutModifierMask = 0;\r
+      if (WinGetKeyState(HWND_DESKTOP,VK_SHIFT) & 0x8000)   /* < 0 = high order bit is on */\r
+                          __glutModifierMask |= ShiftMask;\r
+      if (WinGetKeyState(HWND_DESKTOP,VK_CTRL) & 0x8000)\r
+   __glutModifierMask |= ControlMask;\r
+      if (WinGetKeyState(HWND_DESKTOP,VK_MENU) & 0x8000)\r
+   __glutModifierMask |= Mod1Mask;\r
+      window->mouse(button, GLUT_UP, point.x, point.y);\r
+\r
+      __glutModifierMask = (unsigned int)~0;\r
+    } else {\r
+      /* Window might have been destroyed and all the\r
+    events for the window may not yet be received. */\r
+    }\r
+    return 0;\r
+\r
+\r
+    break;\r
+//////////////////////////////////////////////////\r
+  case WM_COMMAND:\r
+    window = __glutGetWindow(hwnd);\r
+    if (window)\r
+    {   if (window->wm_command)\r
+            window->wm_command(hwnd,mp1,mp2);\r
+    }\r
+    break;\r
+\r
+  case WM_MOUSEMOVE:\r
+    if (!__glutMappedMenu) {\r
+      window = __glutGetWindow(hwnd);\r
+      if (window) {\r
+          /* If motion function registered _and_ buttons held *\r
+             down, call motion function...  */\r
+          {  POINTS psh;\r
+             psh = *((POINTS *)&mp1);\r
+             point.x = psh.x;\r
+             point.y = psh.y;\r
+          }\r
+\r
+         if (window->motion && window->buttonDownState) {\r
+           __glutSetWindow(window);\r
+           window->motion(point.x, point.y);\r
+         }\r
+   /* If passive motion function registered _and_\r
+      buttons not held down, call passive motion\r
+      function...  */\r
+         else if (window->passive && !window->buttonDownState) {\r
+           __glutSetWindow(window);\r
+           window->passive(point.x, point.y);\r
+         }\r
+      }\r
+    } else {\r
+      /* Motion events are thrown away when a pop up menu is\r
+    active. */\r
+    }\r
+    return 0;\r
+\r
+\r
+      default:\r
+ /* For all other messages, let the default window procedure process them. */\r
+       return ( WinDefWindowProc( hwnd, msg, mp1, mp2 ) );\r
+\r
+   } //endof switch( msg )\r
+   return ( WinDefWindowProc( hwnd, msg, mp1, mp2 ) );\r
+//   return NULL;\r
+}\r
+\r
+void APIENTRY glutCommandFunc(GLUTcommandCB Func)\r
+{\r
+extern GLUTwindow *__glutCurrentWindow;\r
+    __glutCurrentWindow->wm_command = Func;\r
+}\r
+\r
+\r
+\r
+\r
+void\r
+updateWindowState(GLUTwindow *window, int visState)\r
+{\r
+  GLUTwindow* child;\r
+\r
+  /* XXX shownState and visState are the same in Win32. */\r
+  window->shownState = visState;\r
+  if (visState != window->visState) {\r
+    if (window->windowStatus) {\r
+      window->visState = visState;\r
+      __glutSetWindow(window);\r
+      window->windowStatus(visState);\r
+    }\r
+  }\r
+  /* Since Win32 only sends an activate for the toplevel window,\r
+     update the visibility for all the child windows. */\r
+  child = window->children;\r
+  while (child) {\r
+    updateWindowState(child, visState);\r
+    child = child->siblings;\r
+  }\r
+}\r
+\r
+#if POKA\r
+\r
+LONG WINAPI\r
+__glutWindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)\r
+{\r
+  POINT         point;                 /* Point structure. */\r
+  PAINTSTRUCT   ps;                    /* Paint structure. */\r
+  LPMINMAXINFO  minmax;                        /* Minimum/maximum info structure. */\r
+  GLUTwindow*   window;                        /* GLUT window associated with message. */\r
+  GLUTmenu*     menu;                  /* GLUT menu associated with message. */\r
+  int x, y, width, height, key;\r
+  int button = -1;\r
+\r
+  switch(msg) {\r
+  case WM_CREATE:\r
+    return 0;\r
+  case WM_CLOSE:\r
+    PostQuitMessage(0);\r
+    return 0;\r
+#if 0\r
+  case WM_DESTROY:\r
+    /* XXX NVidia's NT OpenGL can have problems closing down\r
+       its OpenGL internal data structures if we just allow\r
+       the process to terminate without unbinding and deleting\r
+       the windows context.  Apparently, DirectDraw unloads\r
+       before OPENGL32.DLL in the close down sequence, but\r
+       NVidia's NT OpenGL needs DirectDraw to close down its\r
+       data structures. */\r
+    window = __glutGetWindow(hwnd);\r
+    if (window) {\r
+      if (window->ctx) {\r
+        wglMakeCurrent(NULL, NULL);\r
+        wglDeleteContext(window->ctx);\r
+      }\r
+    }\r
+    return 0;\r
+#endif\r
+\r
+  case WM_SYSKEYUP:\r
+  case WM_KEYUP:\r
+    window = __glutGetWindow(hwnd);\r
+    if (!window) {\r
+      break;\r
+    }\r
+    /* Win32 is dumb and sends these messages only to the parent\r
+       window.  Therefore, find out if we're in a child window and\r
+       call the child windows keyboard callback if we are. */\r
+    if (window->parent) {\r
+      GetCursorPos(&point);\r
+      ScreenToClient(hwnd, &point);\r
+      hwnd = ChildWindowFromPoint(hwnd, point);\r
+      window = __glutGetWindow(hwnd);\r
+    }\r
+    if (window->specialUp || window->keyboardUp) {\r
+      GetCursorPos(&point);\r
+      ScreenToClient(window->win, &point);\r
+      __glutSetWindow(window);\r
+      __glutModifierMask = 0;\r
+      if (GetKeyState(VK_SHIFT) < 0)  /* < 0 = high order bit is on */\r
+       __glutModifierMask |= ShiftMask;\r
+      if (GetKeyState(VK_SHIFT) < 0)  /* < 0 = high order bit is on */\r
+       __glutModifierMask |= ControlMask;\r
+      if (GetKeyState(VK_MENU) < 0)\r
+       __glutModifierMask |= Mod1Mask;\r
+      switch (wParam) {\r
+      /* *INDENT-OFF* */\r
+      case VK_F1:     key = GLUT_KEY_F1; break;\r
+      case VK_F2:     key = GLUT_KEY_F2; break;\r
+      case VK_F3:     key = GLUT_KEY_F3; break;\r
+      case VK_F4:     key = GLUT_KEY_F4; break;\r
+      case VK_F5:     key = GLUT_KEY_F5; break;\r
+      case VK_F6:     key = GLUT_KEY_F6; break;\r
+      case VK_F7:     key = GLUT_KEY_F7; break;\r
+      case VK_F8:     key = GLUT_KEY_F8; break;\r
+      case VK_F9:     key = GLUT_KEY_F9; break;\r
+      case VK_F10:    key = GLUT_KEY_F10; break;\r
+      case VK_F11:    key = GLUT_KEY_F11; break;\r
+      case VK_F12:    key = GLUT_KEY_F12; break;\r
+      case VK_LEFT:   key = GLUT_KEY_LEFT; break;\r
+      case VK_UP:     key = GLUT_KEY_UP; break;\r
+      case VK_RIGHT:  key = GLUT_KEY_RIGHT; break;\r
+      case VK_DOWN:   key = GLUT_KEY_DOWN; break;\r
+      case VK_PRIOR:  key = GLUT_KEY_PAGE_UP; break;\r
+      case VK_NEXT:   key = GLUT_KEY_PAGE_DOWN; break;\r
+      case VK_HOME:   key = GLUT_KEY_HOME; break;\r
+      case VK_END:    key = GLUT_KEY_END; break;\r
+      case VK_INSERT: key = GLUT_KEY_INSERT; break;\r
+      case VK_DELETE:\r
+        /* Delete is an ASCII character. */\r
+       if (window->keyboardUp) {\r
+         window->keyboardUp((unsigned char) 127, point.x, point.y);\r
+       }\r
+       return 0;\r
+      /* *INDENT-ON* */\r
+      default:\r
+       if (window->keyboardUp) {\r
+         key = MapVirtualKey(wParam, 2);  /* Map to ASCII. */\r
+         if (isascii(key) && (key != 0)) {\r
+\r
+           /* XXX Attempt to determine modified ASCII character\r
+              is quite incomplete.  Digits, symbols, CapsLock,\r
+              Ctrl, and numeric keypad are all ignored.  Fix this. */\r
+\r
+           if (!(__glutModifierMask & ShiftMask))\r
+             key = tolower(key);\r
+           window->keyboardUp((unsigned char) key, point.x, point.y);\r
+          }\r
+        }\r
+       __glutModifierMask = (unsigned int) ~0;\r
+       return 0;\r
+      }\r
+      if (window->specialUp) {\r
+        window->specialUp(key, point.x, point.y);\r
+      }\r
+      __glutModifierMask = (unsigned int) ~0;\r
+    }\r
+    return 0;\r
+\r
+  case WM_SYSCHAR:\r
+  case WM_CHAR:\r
+    window = __glutGetWindow(hwnd);\r
+    if (!window) {\r
+      break;\r
+    }\r
+\r
+    /* Bit 30 of lParam is set if key already held down.  If\r
+       we are ignoring auto repeated key strokes for the window, bail. */\r
+    if (window->ignoreKeyRepeat && (lParam & (1 << 30)) ) {\r
+      break;\r
+    }\r
+\r
+    /* Win32 is dumb and sends these messages only to the parent\r
+       window.  Therefore, find out if we're in a child window and\r
+       call the child windows keyboard callback if we are. */\r
+    if (window->parent) {\r
+       GetCursorPos(&point);\r
+       ScreenToClient(hwnd, &point);\r
+       hwnd = ChildWindowFromPoint(hwnd, point);\r
+       window = __glutGetWindow(hwnd);\r
+    }\r
+    if (window->keyboard) {\r
+      GetCursorPos(&point);\r
+      ScreenToClient(window->win, &point);\r
+      __glutSetWindow(window);\r
+      __glutModifierMask = 0;\r
+      if (GetKeyState(VK_SHIFT) < 0)   /* < 0 = high order bit is on */\r
+       __glutModifierMask |= ShiftMask;\r
+      if (GetKeyState(VK_CONTROL) < 0)\r
+       __glutModifierMask |= ControlMask;\r
+      if (GetKeyState(VK_MENU) < 0)\r
+       __glutModifierMask |= Mod1Mask;\r
+      window->keyboard((unsigned char)wParam, point.x, point.y);\r
+      __glutModifierMask = (unsigned int) ~0;\r
+    }\r
+    return 0;\r
+\r
+  case WM_SYSKEYDOWN:\r
+  case WM_KEYDOWN:\r
+    window = __glutGetWindow(hwnd);\r
+    if (!window) {\r
+      break;\r
+    }\r
+\r
+    /* Bit 30 of lParam is set if key already held down.  If\r
+       we are ignoring auto repeated key strokes for the window, bail. */\r
+    if (window->ignoreKeyRepeat && (lParam & (1 << 30)) ) {\r
+      break;\r
+    }\r
+\r
+    /* Win32 is dumb and sends these messages only to the parent\r
+       window.  Therefore, find out if we're in a child window and\r
+       call the child windows keyboard callback if we are. */\r
+    if (window->parent) {\r
+       GetCursorPos(&point);\r
+       ScreenToClient(hwnd, &point);\r
+       hwnd = ChildWindowFromPoint(hwnd, point);\r
+       window = __glutGetWindow(hwnd);\r
+    }\r
+    if (window->special) {\r
+      switch (wParam) {\r
+       /* *INDENT-OFF* */\r
+       /* function keys */\r
+       case VK_F1:     key = GLUT_KEY_F1; break;\r
+       case VK_F2:     key = GLUT_KEY_F2; break;\r
+       case VK_F3:     key = GLUT_KEY_F3; break;\r
+       case VK_F4:     key = GLUT_KEY_F4; break;\r
+       case VK_F5:     key = GLUT_KEY_F5; break;\r
+       case VK_F6:     key = GLUT_KEY_F6; break;\r
+       case VK_F7:     key = GLUT_KEY_F7; break;\r
+       case VK_F8:     key = GLUT_KEY_F8; break;\r
+       case VK_F9:     key = GLUT_KEY_F9; break;\r
+       case VK_F10:    key = GLUT_KEY_F10; break;\r
+       case VK_F11:    key = GLUT_KEY_F11; break;\r
+       case VK_F12:    key = GLUT_KEY_F12; break;\r
+       /* directional keys */\r
+       case VK_LEFT:   key = GLUT_KEY_LEFT; break;\r
+       case VK_UP:     key = GLUT_KEY_UP; break;\r
+       case VK_RIGHT:  key = GLUT_KEY_RIGHT; break;\r
+       case VK_DOWN:   key = GLUT_KEY_DOWN; break;\r
+       /* *INDENT-ON* */\r
+\r
+       case VK_PRIOR:\r
+         /* VK_PRIOR is Win32's Page Up */\r
+         key = GLUT_KEY_PAGE_UP;\r
+         break;\r
+       case VK_NEXT:\r
+         /* VK_NEXT is Win32's Page Down */\r
+         key = GLUT_KEY_PAGE_DOWN;\r
+         break;\r
+       case VK_HOME:\r
+         key = GLUT_KEY_HOME;\r
+         break;\r
+       case VK_END:\r
+         key = GLUT_KEY_END;\r
+         break;\r
+       case VK_INSERT:\r
+         key = GLUT_KEY_INSERT;\r
+         break;\r
+        case VK_DELETE:\r
+         goto handleDelete;\r
+       default:\r
+         goto defproc;\r
+      }\r
+      GetCursorPos(&point);\r
+      ScreenToClient(window->win, &point);\r
+      __glutSetWindow(window);\r
+      __glutModifierMask = 0;\r
+      if (GetKeyState(VK_SHIFT) < 0)   /* < 0 = high order bit is on */\r
+       __glutModifierMask |= ShiftMask;\r
+      if (GetKeyState(VK_CONTROL) < 0)\r
+       __glutModifierMask |= ControlMask;\r
+      if (GetKeyState(VK_MENU) < 0)\r
+       __glutModifierMask |= Mod1Mask;\r
+      window->special(key, point.x, point.y);\r
+      __glutModifierMask = (unsigned int) ~0;\r
+    } else if (window->keyboard) {\r
+      /* Specially handle any keys that match ASCII values but\r
+         do not generate Windows WM_SYSCHAR or WM_CHAR messages. */\r
+      switch (wParam) {\r
+      case VK_DELETE:\r
+      handleDelete:\r
+        /* Delete is an ASCII character. */\r
+        GetCursorPos(&point);\r
+        ScreenToClient(window->win, &point);\r
+        __glutSetWindow(window);\r
+        __glutModifierMask = 0;\r
+        if (GetKeyState(VK_SHIFT) < 0) /* < 0 = high order bit is on */\r
+          __glutModifierMask |= ShiftMask;\r
+        if (GetKeyState(VK_CONTROL) < 0)\r
+          __glutModifierMask |= ControlMask;\r
+        if (GetKeyState(VK_MENU) < 0)\r
+          __glutModifierMask |= Mod1Mask;\r
+       window->keyboard((unsigned char) 127, point.x, point.y);\r
+        __glutModifierMask = (unsigned int) ~0;\r
+       return 0;\r
+      default:\r
+        /* Let the following WM_SYSCHAR or WM_CHAR message generate\r
+          the keyboard callback. */\r
+        break;\r
+      }\r
+    }\r
+    return 0;\r
+\r
+  case WM_LBUTTONDOWN:\r
+    button = GLUT_LEFT_BUTTON;\r
+  case WM_MBUTTONDOWN:\r
+    if (button < 0)\r
+      button = GLUT_MIDDLE_BUTTON;\r
+  case WM_RBUTTONDOWN:\r
+    if (button < 0)\r
+      button = GLUT_RIGHT_BUTTON;\r
+\r
+    /* finish the menu if we get a button down message (user must have\r
+       cancelled the menu). */\r
+    if (__glutMappedMenu) {\r
+      /* TODO: take this out once the menu on middle mouse stuff works\r
+        properly. */\r
+      if (button == GLUT_MIDDLE_BUTTON)\r
+       return 0;\r
+      GetCursorPos(&point);\r
+      ScreenToClient(hwnd, &point);\r
+      __glutItemSelected = NULL;\r
+      __glutFinishMenu(hwnd, point.x, point.y);\r
+      return 0;\r
+    }\r
+\r
+    /* set the capture so we can get mouse events outside the window */\r
+    SetCapture(hwnd);\r
+\r
+    /* Win32 doesn't return the same numbers as X does when the mouse\r
+       goes beyond the upper or left side of the window.  roll the\r
+       Win32's 0..2^16 pointer co-ord range to 0 +/- 2^15. */\r
+    x = LOWORD(lParam);\r
+    y = HIWORD(lParam);\r
+    if(x & 1 << 15) x -= (1 << 16);\r
+    if(y & 1 << 15) y -= (1 << 16);\r
+\r
+    window = __glutGetWindow(hwnd);\r
+    if (window) {\r
+      menu = __glutGetMenuByNum(window->menu[button]);\r
+      if (menu) {\r
+       point.x = LOWORD(lParam); point.y = HIWORD(lParam);\r
+       ClientToScreen(window->win, &point);\r
+       __glutMenuButton = button == GLUT_RIGHT_BUTTON ? TPM_RIGHTBUTTON :\r
+                           button == GLUT_LEFT_BUTTON  ? TPM_LEFTBUTTON :\r
+                           0x0001;\r
+       __glutStartMenu(menu, window, point.x, point.y, x, y);\r
+      } else if (window->mouse) {\r
+\r
+        __glutSetWindow(window);\r
+       __glutModifierMask = 0;\r
+       if (GetKeyState(VK_SHIFT) < 0)  /* < 0 = high order bit is on. */\r
+         __glutModifierMask |= ShiftMask;\r
+       if (GetKeyState(VK_CONTROL) < 0)\r
+         __glutModifierMask |= ControlMask;\r
+       if (GetKeyState(VK_MENU) < 0)\r
+         __glutModifierMask |= Mod1Mask;\r
+       window->mouse(button, GLUT_DOWN, x, y);\r
+       __glutModifierMask = (unsigned int)~0;\r
+      } else {\r
+       /* Stray mouse events.  Ignore. */\r
+      }\r
+    }\r
+    return 0;\r
+\r
+  case WM_LBUTTONUP:\r
+    button = GLUT_LEFT_BUTTON;\r
+  case WM_MBUTTONUP:\r
+    if (button < 0)\r
+      button = GLUT_MIDDLE_BUTTON;\r
+  case WM_RBUTTONUP:\r
+    if (button < 0)\r
+      button = GLUT_RIGHT_BUTTON;\r
+\r
+    /* Bail out if we're processing a menu. */\r
+    if (__glutMappedMenu) {\r
+      GetCursorPos(&point);\r
+      ScreenToClient(hwnd, &point);\r
+      /* if we're getting the middle button up signal, then something\r
+        on the menu was selected. */\r
+      if (button == GLUT_MIDDLE_BUTTON) {\r
+       return 0;\r
+       /* For some reason, the code below always returns -1 even\r
+          though the point IS IN THE ITEM!  Therefore, just bail out if\r
+          we get a middle mouse up.  The user must select using the\r
+          left mouse button.  Stupid Win32. */\r
+#if 0\r
+       int item = MenuItemFromPoint(hwnd, __glutHMenu, point);\r
+       if (item != -1)\r
+         __glutItemSelected = (GLUTmenuItem*)GetMenuItemID(__glutHMenu, item);\r
+       else\r
+         __glutItemSelected = NULL;\r
+       __glutFinishMenu(hwnd, point.x, point.y);\r
+#endif\r
+      } else {\r
+       __glutItemSelected = NULL;\r
+       __glutFinishMenu(hwnd, point.x, point.y);\r
+      }\r
+      return 0;\r
+    }\r
+\r
+    /* Release the mouse capture. */\r
+    ReleaseCapture();\r
+\r
+    window = __glutGetWindow(hwnd);\r
+    if (window && window->mouse) {\r
+      /* Win32 doesn't return the same numbers as X does when the\r
+        mouse goes beyond the upper or left side of the window.  roll\r
+        the Win32's 0..2^16 pointer co-ord range to 0 +/- 2^15. */\r
+      x = LOWORD(lParam);\r
+      y = HIWORD(lParam);\r
+      if(x & 1 << 15) x -= (1 << 16);\r
+      if(y & 1 << 15) y -= (1 << 16);\r
+\r
+      __glutSetWindow(window);\r
+      __glutModifierMask = 0;\r
+      if (GetKeyState(VK_SHIFT) < 0)   /* < 0 = high order bit is on */\r
+       __glutModifierMask |= ShiftMask;\r
+      if (GetKeyState(VK_CONTROL) < 0)\r
+       __glutModifierMask |= ControlMask;\r
+      if (GetKeyState(VK_MENU) < 0)\r
+       __glutModifierMask |= Mod1Mask;\r
+      window->mouse(button, GLUT_UP, x, y);\r
+      __glutModifierMask = (unsigned int)~0;\r
+    } else {\r
+      /* Window might have been destroyed and all the\r
+        events for the window may not yet be received. */\r
+    }\r
+    return 0;\r
+\r
+  case WM_ENTERMENULOOP:\r
+    /* KLUDGE: create a timer that fires every 100 ms when we start a\r
+       menu so that we can still process the idle & timer events (that\r
+       way, the timers will fire during a menu pick and so will the\r
+       idle func. */\r
+    SetTimer(hwnd, 1, 1, NULL);\r
+    return 0;\r
+\r
+  case WM_TIMER:\r
+#if 0\r
+    /* If the timer id is 2, then this is the timer that is set up in\r
+       the main glut message processing loop, and we don't want to do\r
+       anything but acknowledge that we got it.  It is used to prevent\r
+       CPU spiking when an idle function is installed. */\r
+    if (wParam == 2)\r
+      return 0;\r
+#endif\r
+\r
+    /* only worry about the idle function and the timeouts, since\r
+       these are the only events we expect to process during\r
+       processing of a menu. */\r
+    /* we no longer process the idle functions (as outlined in the\r
+       README), since drawing can't be done until the menu has\r
+       finished...it's pretty lame when the animation goes on, but\r
+       doesn't update, so you get this weird jerkiness. */\r
+#if 0\r
+     if (__glutIdleFunc)\r
+       __glutIdleFunc();\r
+#endif\r
+    if (__glutTimerList)\r
+      handleTimeouts();\r
+    return 0;\r
+\r
+  case WM_EXITMENULOOP:\r
+    /* nuke the above created timer...we don't need it anymore, since\r
+       the menu is gone now. */\r
+    KillTimer(hwnd, 1);\r
+    return 0;\r
+\r
+  case WM_MENUSELECT:\r
+    if (lParam != 0)\r
+      __glutHMenu = (HMENU)lParam;\r
+    return 0;\r
+\r
+  case WM_COMMAND:\r
+    if (__glutMappedMenu) {\r
+      if (GetSubMenu(__glutHMenu, LOWORD(wParam)))\r
+       __glutItemSelected = NULL;\r
+      else\r
+       __glutItemSelected =\r
+         __glutGetUniqueMenuItem(__glutMappedMenu, LOWORD(wParam));\r
+      GetCursorPos(&point);\r
+      ScreenToClient(hwnd, &point);\r
+      __glutFinishMenu(hwnd, point.x, point.y);\r
+    }\r
+    return 0;\r
+\r
+  case WM_MOUSEMOVE:\r
+    if (!__glutMappedMenu) {\r
+      window = __glutGetWindow(hwnd);\r
+      if (window) {\r
+          /* If motion function registered _and_ buttons held *\r
+             down, call motion function...  */\r
+       x = LOWORD(lParam);\r
+       y = HIWORD(lParam);\r
+\r
+       /* Win32 doesn't return the same numbers as X does when the\r
+          mouse goes beyond the upper or left side of the window.\r
+          roll the Win32's 0..2^16 pointer co-ord range to 0..+/-2^15. */\r
+       if(x & 1 << 15) x -= (1 << 16);\r
+       if(y & 1 << 15) y -= (1 << 16);\r
+\r
+       if (window->motion && wParam &\r
+            (MK_LBUTTON | MK_MBUTTON | MK_RBUTTON)) {\r
+         __glutSetWindow(window);\r
+         window->motion(x, y);\r
+       }\r
+       /* If passive motion function registered _and_\r
+          buttons not held down, call passive motion\r
+          function...  */\r
+       else if (window->passive &&\r
+                ((wParam &\r
+                  (MK_LBUTTON | MK_MBUTTON | MK_RBUTTON)) ==\r
+                 0)) {\r
+         __glutSetWindow(window);\r
+         window->passive(x, y);\r
+       }\r
+      }\r
+    } else {\r
+      /* Motion events are thrown away when a pop up menu is\r
+        active. */\r
+    }\r
+    return 0;\r
+\r
+  case WM_GETMINMAXINFO:\r
+    /* this voodoo is brought to you by Win32 (again).  It allows the\r
+       window to be bigger than the screen, and smaller than 100x100\r
+       (although it doesn't seem to help the y minimum). */\r
+    minmax = (LPMINMAXINFO)lParam;\r
+    minmax->ptMaxSize.x = __glutScreenWidth;\r
+    minmax->ptMaxSize.y = __glutScreenHeight;\r
+    minmax->ptMinTrackSize.x = 0;\r
+    minmax->ptMinTrackSize.y = 0;\r
+    minmax->ptMaxTrackSize.x = __glutScreenWidth +\r
+      GetSystemMetrics(SM_CXSIZE) * 2;\r
+    minmax->ptMaxTrackSize.y = __glutScreenHeight +\r
+      GetSystemMetrics(SM_CXSIZE) * 2 + GetSystemMetrics(SM_CYCAPTION);\r
+    return 0;\r
+\r
+  case WM_SIZE:\r
+    window = __glutGetWindow(hwnd);\r
+    if (window) {\r
+      width = LOWORD(lParam);\r
+      height = HIWORD(lParam);\r
+      if (width != window->width || height != window->height) {\r
+#if 0  /* Win32 GLUT does not support overlays for now. */\r
+       if (window->overlay) {\r
+         XResizeWindow(__glutDisplay, window->overlay->win, width, height);\r
+       }\r
+#endif\r
+       window->width = width;\r
+       window->height = height;\r
+       __glutSetWindow(window);\r
+       /* Do not execute OpenGL out of sequence with respect\r
+          to the SetWindowPos request! */\r
+       GdiFlush();\r
+       window->reshape(width, height);\r
+       window->forceReshape = FALSE;\r
+       /* A reshape should be considered like posting a\r
+          repair request. */\r
+       __glutPostRedisplay(window, GLUT_REPAIR_WORK);\r
+      }\r
+    }\r
+    return 0;\r
+\r
+  case WM_SETCURSOR:\r
+    /* If the cursor is not in the client area, then we want to send\r
+       this message to the default window procedure ('cause its\r
+       probably in the border or title, and we don't handle that\r
+       cursor.  otherwise, set our cursor.  Win32 makes us set the\r
+       cursor every time the mouse moves (DUMB!). */\r
+    if(LOWORD(lParam) != HTCLIENT) {\r
+      goto defproc;\r
+    }\r
+    window = __glutGetWindow(hwnd);\r
+    if (window) {\r
+      __glutSetCursor(window);\r
+    }\r
+    /* TODO: check out the info in DevStudio on WM_SETCURSOR in the\r
+       DefaultAction section. */\r
+    return 1;\r
+\r
+  case WM_SETFOCUS:\r
+    window = __glutGetWindow(hwnd);\r
+    if (window) {\r
+      window->entryState = WM_SETFOCUS;\r
+      if (window->entry) {\r
+       __glutSetWindow(window);\r
+       window->entry(GLUT_ENTERED);\r
+       /* XXX Generation of fake passive notify?  See how much\r
+          work the X11 code does to support fake passive notify\r
+          callbacks. */\r
+      }\r
+      if (window->joystick && __glutCurrentWindow) {\r
+        if (__glutCurrentWindow->joyPollInterval > 0) {\r
+         MMRESULT result;\r
+\r
+         /* Because Win32 will only let one window capture the\r
+            joystick at a time, we must capture it when we get the\r
+            focus and release it when we lose the focus. */\r
+         result = joySetCapture(__glutCurrentWindow->win,\r
+           JOYSTICKID1, 0, TRUE);\r
+         if (result != JOYERR_NOERROR) {\r
+           return 0;\r
+          }\r
+         (void) joySetThreshold(JOYSTICKID1,\r
+            __glutCurrentWindow->joyPollInterval);\r
+        }\r
+      }\r
+    }\r
+    return 0;\r
+\r
+  case WM_KILLFOCUS:\r
+    window = __glutGetWindow(hwnd);\r
+    if (window) {\r
+      window->entryState = WM_KILLFOCUS;\r
+      if (window->entry) {\r
+       __glutSetWindow(window);\r
+       window->entry(GLUT_LEFT);\r
+      }\r
+      if (window->joystick && __glutCurrentWindow) {\r
+       if (__glutCurrentWindow->joyPollInterval > 0) {\r
+         /* Because Win32 will only let one window capture the\r
+            joystick at a time, we must capture it when we get the\r
+            focus and release it when we lose the focus. */\r
+           (void) joyReleaseCapture(JOYSTICKID1);\r
+        }\r
+      }\r
+    }\r
+    return 0;\r
+  case WM_ACTIVATE:\r
+    window = __glutGetWindow(hwnd);\r
+    /* Make sure we re-select the correct palette if needed. */\r
+    if (LOWORD(wParam)) {\r
+      PostMessage(hwnd, WM_PALETTECHANGED, 0, 0);\r
+    }\r
+    if (window) {\r
+      int visState;\r
+\r
+      /* HIWORD(wParam) is the minimized flag. */\r
+      visState = !HIWORD(wParam);\r
+      updateWindowState(window, visState);\r
+    }\r
+    return 0;\r
+\r
+  /* Colour Palette Management */\r
+  case WM_PALETTECHANGED:\r
+    if (hwnd == (HWND)wParam) {\r
+      /* Don't respond to the message that we sent! */\r
+      break;\r
+    }\r
+    /* fall through to WM_QUERYNEWPALETTE */\r
+\r
+  case WM_QUERYNEWPALETTE:\r
+    window = __glutGetWindow(hwnd);\r
+    if (window && window->colormap) {\r
+      UnrealizeObject(window->colormap->cmap);\r
+      SelectPalette(window->hdc, window->colormap->cmap, FALSE);\r
+      RealizePalette(window->hdc);\r
+      return TRUE;\r
+    }\r
+    return FALSE;\r
+\r
+  case MM_JOY1MOVE:\r
+  case MM_JOY1ZMOVE:\r
+    window = __glutGetWindow(hwnd);\r
+    if (window->joystick) {\r
+      JOYINFOEX jix;\r
+      int x, y, z;\r
+\r
+      /* Because WIN32 only supports messages for X, Y, and Z\r
+         translations, we must poll for the rest */\r
+      jix.dwSize = sizeof(jix);\r
+      jix.dwFlags = JOY_RETURNALL;\r
+      joyGetPosEx(JOYSTICKID1,&jix);\r
+\r
+#define SCALE(v)  ((int) ((v - 32767)/32.768))\r
+\r
+      /* Convert to integer for scaling. */\r
+      x = jix.dwXpos;\r
+      y = jix.dwYpos;\r
+      z = jix.dwZpos;\r
+      window->joystick(jix.dwButtons, SCALE(x), SCALE(y), SCALE(z));\r
+\r
+      return TRUE;\r
+    }\r
+    return FALSE;\r
+  case MM_JOY1BUTTONDOWN:\r
+  case MM_JOY1BUTTONUP:\r
+    window = __glutGetWindow(hwnd);\r
+    if (window->joystick) {\r
+      JOYINFOEX jix;\r
+\r
+      /* Because WIN32 only supports messages for X, Y, and Z\r
+         translations, we must poll for the rest */\r
+      jix.dwSize = sizeof(jix);\r
+      jix.dwFlags = JOY_RETURNALL;\r
+      joyGetPosEx(JOYSTICKID1,&jix);\r
+\r
+      return TRUE;\r
+    }\r
+    return FALSE;\r
+\r
+#if 0\r
+  /* Miscellaneous messages (don't really need to enumerate them,\r
+     but it's good to know what you're not getting sometimes). */\r
+  case WM_DISPLAYCHANGE:\r
+    break;\r
+  case WM_NCHITTEST:\r
+    /* This event is generated by every mouse move event. */\r
+    goto defproc;\r
+  case WM_NCMOUSEMOVE:\r
+    goto defproc;\r
+  case WM_NCACTIVATE:\r
+    goto defproc;\r
+  case WM_NCPAINT:\r
+    goto defproc;\r
+  case WM_NCCALCSIZE:\r
+    goto defproc;\r
+  case WM_NCCREATE:\r
+    goto defproc;\r
+  case WM_NCDESTROY:\r
+    goto defproc;\r
+  case WM_NCLBUTTONDOWN:\r
+    goto defproc;\r
+  case WM_SETTEXT:\r
+    goto defproc;\r
+  case WM_GETTEXT:\r
+    goto defproc;\r
+  case WM_ACTIVATEAPP:\r
+    goto defproc;\r
+  case WM_GETICON:\r
+    goto defproc;\r
+  case WM_ERASEBKGND:\r
+    goto defproc;\r
+  case WM_WINDOWPOSCHANGING:\r
+    goto defproc;\r
+  case WM_WINDOWPOSCHANGED:\r
+    goto defproc;\r
+  case WM_MOUSEACTIVATE:\r
+    goto defproc;\r
+  case WM_SHOWWINDOW:\r
+    goto defproc;\r
+  case WM_MOVING:\r
+    goto defproc;\r
+  case WM_MOVE:\r
+    goto defproc;\r
+  case WM_KEYUP:\r
+    goto defproc;\r
+  case WM_CAPTURECHANGED:\r
+    goto defproc;\r
+  case WM_SYSCOMMAND:\r
+    goto defproc;\r
+  case WM_ENTERSIZEMOVE:\r
+    goto defproc;\r
+  case WM_ENTERIDLE:\r
+    goto defproc;\r
+#endif\r
+\r
+  default:\r
+    goto defproc;\r
+  }\r
+\r
+defproc:\r
+  return DefWindowProc(hwnd, msg, wParam, lParam);\r
+}\r
+\r
+#endif\r
+\r
+#if defined(__OS2PM__)\r
+Bool __glutSetWindowText(Window window, char *text)\r
+{\r
+  return WinSetWindowText(window, (PCSZ)text);\r
+\r
+}\r
+\r
+#endif\r
+\1a
\ No newline at end of file
diff --git a/src/glut/os2/src-glut_os2pm.zip b/src/glut/os2/src-glut_os2pm.zip
new file mode 100644 (file)
index 0000000..8c8a8c7
Binary files /dev/null and b/src/glut/os2/src-glut_os2pm.zip differ