Moving the source code files from 'src' to 'src/Common' as a first step towards separ...
authorJohn F. Fay <johnffay@nettally.com>
Tue, 10 Jan 2012 03:49:12 +0000 (03:49 +0000)
committerJohn F. Fay <johnffay@nettally.com>
Tue, 10 Jan 2012 03:49:12 +0000 (03:49 +0000)
git-svn-id: svn+ssh://svn.code.sf.net/p/freeglut/code/trunk/freeglut/freeglut@976 7f0cb862-5218-0410-a997-914c9d46530a

75 files changed:
CMakeLists.txt
ChangeLog
LISEZMOI.cygwin_mingw
Makefile.am
Makefile.wat
README.cygwin_mingw
VisualStudio/2008/freeglut.vcproj
VisualStudio/2010/freeglut.vcxproj
VisualStudio/2010/freeglut.vcxproj.filters
freeglut.dep
freeglut.dsp
freeglut.kdevelop
freeglut.kdevprj
freeglut.mak
freeglut_evc4.vcp
freeglut_static.dep
freeglut_static.dsp
freeglut_static.mak
src/Common/freeglut_callbacks.c [new file with mode: 0644]
src/Common/freeglut_cursor.c [new file with mode: 0644]
src/Common/freeglut_display.c [new file with mode: 0644]
src/Common/freeglut_ext.c [new file with mode: 0644]
src/Common/freeglut_font.c [new file with mode: 0644]
src/Common/freeglut_font_data.c [new file with mode: 0644]
src/Common/freeglut_gamemode.c [new file with mode: 0644]
src/Common/freeglut_geometry.c [new file with mode: 0644]
src/Common/freeglut_glutfont_definitions.c [new file with mode: 0644]
src/Common/freeglut_init.c [new file with mode: 0644]
src/Common/freeglut_input_devices.c [new file with mode: 0644]
src/Common/freeglut_internal.h [new file with mode: 0644]
src/Common/freeglut_joystick.c [new file with mode: 0644]
src/Common/freeglut_main.c [new file with mode: 0644]
src/Common/freeglut_menu.c [new file with mode: 0644]
src/Common/freeglut_misc.c [new file with mode: 0644]
src/Common/freeglut_overlay.c [new file with mode: 0644]
src/Common/freeglut_spaceball.c [new file with mode: 0644]
src/Common/freeglut_state.c [new file with mode: 0644]
src/Common/freeglut_stroke_mono_roman.c [new file with mode: 0644]
src/Common/freeglut_stroke_roman.c [new file with mode: 0644]
src/Common/freeglut_structure.c [new file with mode: 0644]
src/Common/freeglut_teapot.c [new file with mode: 0644]
src/Common/freeglut_teapot_data.h [new file with mode: 0644]
src/Common/freeglut_videoresize.c [new file with mode: 0644]
src/Common/freeglut_window.c [new file with mode: 0644]
src/Common/freeglut_xinput.c [new file with mode: 0644]
src/Common/freeglutdll.def [new file with mode: 0644]
src/Makefile.am
src/freeglut_callbacks.c [deleted file]
src/freeglut_cursor.c [deleted file]
src/freeglut_display.c [deleted file]
src/freeglut_ext.c [deleted file]
src/freeglut_font.c [deleted file]
src/freeglut_font_data.c [deleted file]
src/freeglut_gamemode.c [deleted file]
src/freeglut_geometry.c [deleted file]
src/freeglut_glutfont_definitions.c [deleted file]
src/freeglut_init.c [deleted file]
src/freeglut_input_devices.c [deleted file]
src/freeglut_internal.h [deleted file]
src/freeglut_joystick.c [deleted file]
src/freeglut_main.c [deleted file]
src/freeglut_menu.c [deleted file]
src/freeglut_misc.c [deleted file]
src/freeglut_overlay.c [deleted file]
src/freeglut_spaceball.c [deleted file]
src/freeglut_state.c [deleted file]
src/freeglut_stroke_mono_roman.c [deleted file]
src/freeglut_stroke_roman.c [deleted file]
src/freeglut_structure.c [deleted file]
src/freeglut_teapot.c [deleted file]
src/freeglut_teapot_data.h [deleted file]
src/freeglut_videoresize.c [deleted file]
src/freeglut_window.c [deleted file]
src/freeglut_xinput.c [deleted file]
src/freeglutdll.def [deleted file]

index 60f5d5d..9e15d91 100644 (file)
@@ -9,37 +9,37 @@ SET(FREEGLUT_HEADERS
 )\r
 SET(FREEGLUT_SRCS\r
        ${FREEGLUT_HEADERS}\r
-       src/freeglut_callbacks.c\r
-       src/freeglut_cursor.c\r
-       src/freeglut_display.c\r
-       src/freeglut_ext.c\r
-       src/freeglut_font.c\r
-       src/freeglut_font_data.c\r
-       src/freeglut_gamemode.c\r
-       src/freeglut_geometry.c\r
-       src/freeglut_glutfont_definitions.c\r
-       src/freeglut_init.c\r
-       src/freeglut_input_devices.c\r
-       src/freeglut_joystick.c\r
-       src/freeglut_main.c\r
-       src/freeglut_menu.c\r
-       src/freeglut_misc.c\r
-       src/freeglut_overlay.c\r
-       src/freeglut_spaceball.c\r
-       src/freeglut_state.c\r
-       src/freeglut_stroke_mono_roman.c\r
-       src/freeglut_stroke_roman.c\r
-       src/freeglut_structure.c\r
-       src/freeglut_teapot.c\r
-       src/freeglut_videoresize.c\r
-       src/freeglut_window.c\r
-       src/freeglut_xinput.c\r
+       src/Common/freeglut_callbacks.c\r
+       src/Common/freeglut_cursor.c\r
+       src/Common/freeglut_display.c\r
+       src/Common/freeglut_ext.c\r
+       src/Common/freeglut_font.c\r
+       src/Common/freeglut_font_data.c\r
+       src/Common/freeglut_gamemode.c\r
+       src/Common/freeglut_geometry.c\r
+       src/Common/freeglut_glutfont_definitions.c\r
+       src/Common/freeglut_init.c\r
+       src/Common/freeglut_input_devices.c\r
+       src/Common/freeglut_joystick.c\r
+       src/Common/freeglut_main.c\r
+       src/Common/freeglut_menu.c\r
+       src/Common/freeglut_misc.c\r
+       src/Common/freeglut_overlay.c\r
+       src/Common/freeglut_spaceball.c\r
+       src/Common/freeglut_state.c\r
+       src/Common/freeglut_stroke_mono_roman.c\r
+       src/Common/freeglut_stroke_roman.c\r
+       src/Common/freeglut_structure.c\r
+       src/Common/freeglut_teapot.c\r
+       src/Common/freeglut_videoresize.c\r
+       src/Common/freeglut_window.c\r
+       src/Common/freeglut_xinput.c\r
 )\r
 \r
 #IF(WIN32)\r
-#      LIST(APPEND FREEGLUT_SRCS src/freeglut_windows.c)\r
+#      LIST(APPEND FREEGLUT_SRCS src/Windows/freeglut_cursor_windows.c)\r
 #ELSE()\r
-#      LIST(APPEND FREEGLUT_SRCS src/freeglut_x11.c)\r
+#      LIST(APPEND FREEGLUT_SRCS src/X11/freeglut_cursor_x11.c)\r
 #ENDIF()\r
 \r
 # Neatly organize all of the output files in the build directory\r
@@ -82,7 +82,7 @@ ADD_DEFINITIONS(-DHAVE_CONFIG_H)
 \r
 IF(BUILD_SHARED_LIBS)\r
        IF(WIN32)\r
-               LIST(APPEND FREEGLUT_SRCS src/freeglutdll.def freeglut.rc)\r
+               LIST(APPEND FREEGLUT_SRCS src/Common/freeglutdll.def freeglut.rc)\r
        ENDIF()\r
        ADD_DEFINITIONS(-DFREEGLUT_EXPORTS)\r
 ELSE()\r
index 66a49c4..2e0d8f7 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2012-01-09  John F. Fay <johnffay@cybertron.com>
+       * Released freeglut 2.8.0 a few days ago and am restarting the ChangeLog
+       * Added 'cmake' support
+       * Moved source files from 'src' directory to 'src/Common' directory with
+       an eye to moving platform-specific code to separate files in separate
+       directories
 2009-08-10  Sven Panne  <sven.panne@aedion.de>
 
        * include/GL/freeglut_ext.h,include/GL/freeglut_std.h,src/freeglut_ext.c,
index 6a2f27f..957f7bb 100644 (file)
@@ -69,7 +69,7 @@ Compilation
     * Voici un Makefile qui fera l'affaire:\r
 \r
 #Makefile pour Freeglut 2.6.0-rc et Cygwin\r
-#A placer dans le répertoire "src"\r
+#A placer dans le répertoire "src/Common"\r
 \r
 sources=$(wildcard *.c)\r
 objs=$(sources:.c=.o)\r
index 39c5628..07194ae 100644 (file)
@@ -1,6 +1,6 @@
 ## Process this file with automake to produce Makefile.in
 
-SUBDIRS = src include progs doc
+SUBDIRS = src Common include progs doc
 AUTOMAKE_OPTIONS = gnu
 
 EXTRA_DIST = \
index a500b27..77dc447 100644 (file)
@@ -22,7 +22,7 @@ DEBUG_STATIC_DIR = debug-static
 DEBUG_DYNAMIC_DIR = debug-dynamic\r
 \r
 INCLUDE_DIR = ..\include\r
-SRC_DIR = ..\src\r
+SRC_DIR = ..\src\Common\r
 COMPILER = wcc386\r
 COMPILE_COMMON_OPTIONS = -i$(INCLUDE_DIR);$(%WATCOM)\h;$(%WATCOM)\h\nt -fp6 -w4 -e25 -wcd202 -bt=nt -mf -zq\r
 COMPILE_DEBUG_OPTIONS = -d3 -od -DDEBUG -D_DEBUG\r
index aac9648..f91a73c 100644 (file)
@@ -67,7 +67,7 @@ Compilation
     * Here Makefile which will make the deal:\r
 \r
 #Makefile for Freeglut 2.6.0-rc and Cygwin\r
-#To place in the directory \93src\94\r
+#To place in the directory \93src/Common\94\r
 \r
 sources=$ (wildcard *.c)\r
 objs=$ (sources: .c=.o)\r
index 733bcdd..7701f32 100644 (file)
@@ -69,7 +69,7 @@
                                Name="VCLinkerTool"\r
                                OutputFile="$(OutDir)\$(ProjectName).dll"\r
                                LinkIncremental="2"\r
-                               ModuleDefinitionFile="..\..\src\freeglutdll.def"\r
+                               ModuleDefinitionFile="..\..\src\Common\freeglutdll.def"\r
                                GenerateDebugInformation="true"\r
                                RandomizedBaseAddress="1"\r
                                ImportLibrary="$(OutDir)\$(ProjectName).lib"\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                OutputFile="$(OutDir)\$(ProjectName).dll"\r
-                               ModuleDefinitionFile="..\..\src\freeglutdll.def"\r
+                               ModuleDefinitionFile="..\..\src\Common\freeglutdll.def"\r
                                RandomizedBaseAddress="1"\r
                                ImportLibrary="$(OutDir)\$(ProjectName).lib"\r
                                TargetMachine="1"\r
                        Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"\r
                        >\r
                        <File\r
-                               RelativePath="..\..\src\freeglut_callbacks.c"\r
+                               RelativePath="..\..\src\Common\freeglut_callbacks.c"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\src\freeglut_cursor.c"\r
+                               RelativePath="..\..\src\Common\freeglut_cursor.c"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\src\freeglut_display.c"\r
+                               RelativePath="..\..\src\Common\freeglut_display.c"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\src\freeglut_ext.c"\r
+                               RelativePath="..\..\src\Common\freeglut_ext.c"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\src\freeglut_font.c"\r
+                               RelativePath="..\..\src\Common\freeglut_font.c"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\src\freeglut_font_data.c"\r
+                               RelativePath="..\..\src\Common\freeglut_font_data.c"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\src\freeglut_gamemode.c"\r
+                               RelativePath="..\..\src\Common\freeglut_gamemode.c"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\src\freeglut_geometry.c"\r
+                               RelativePath="..\..\src\Common\freeglut_geometry.c"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\src\freeglut_glutfont_definitions.c"\r
+                               RelativePath="..\..\src\Common\freeglut_glutfont_definitions.c"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\src\freeglut_init.c"\r
+                               RelativePath="..\..\src\Common\freeglut_init.c"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\src\freeglut_input_devices.c"\r
+                               RelativePath="..\..\src\Common\freeglut_input_devices.c"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\src\freeglut_joystick.c"\r
+                               RelativePath="..\..\src\Common\freeglut_joystick.c"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\src\freeglut_main.c"\r
+                               RelativePath="..\..\src\Common\freeglut_main.c"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\src\freeglut_menu.c"\r
+                               RelativePath="..\..\src\Common\freeglut_menu.c"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\src\freeglut_misc.c"\r
+                               RelativePath="..\..\src\Common\freeglut_misc.c"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\src\freeglut_overlay.c"\r
+                               RelativePath="..\..\src\Common\freeglut_overlay.c"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\src\freeglut_spaceball.c"\r
+                               RelativePath="..\..\src\Common\freeglut_spaceball.c"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\src\freeglut_state.c"\r
+                               RelativePath="..\..\src\Common\freeglut_state.c"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\src\freeglut_stroke_mono_roman.c"\r
+                               RelativePath="..\..\src\Common\freeglut_stroke_mono_roman.c"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\src\freeglut_stroke_roman.c"\r
+                               RelativePath="..\..\src\Common\freeglut_stroke_roman.c"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\src\freeglut_structure.c"\r
+                               RelativePath="..\..\src\Common\freeglut_structure.c"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\src\freeglut_teapot.c"\r
+                               RelativePath="..\..\src\Common\freeglut_teapot.c"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\src\freeglut_videoresize.c"\r
+                               RelativePath="..\..\src\Common\freeglut_videoresize.c"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\src\freeglut_window.c"\r
+                               RelativePath="..\..\src\Common\freeglut_window.c"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\src\freeglutdll.def"\r
+                               RelativePath="..\..\src\Common\freeglutdll.def"\r
                                >\r
                        </File>\r
                </Filter>\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\src\freeglut_internal.h"\r
+                               RelativePath="..\..\src\Common\freeglut_internal.h"\r
                                >\r
                        </File>\r
                        <File\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\src\freeglut_teapot_data.h"\r
+                               RelativePath="..\..\src\Common\freeglut_teapot_data.h"\r
                                >\r
                        </File>\r
                        <File\r
index 3684b1c..09c4c27 100644 (file)
       <DataExecutionPrevention>\r
       </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
-      <ModuleDefinitionFile>..\..\src\freeglutdll.def</ModuleDefinitionFile>\r
+      <ModuleDefinitionFile>..\..\src\Common\freeglutdll.def</ModuleDefinitionFile>\r
     </Link>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
       <DataExecutionPrevention>\r
       </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
-      <ModuleDefinitionFile>..\..\src\freeglutdll.def</ModuleDefinitionFile>\r
+      <ModuleDefinitionFile>..\..\src\Common\freeglutdll.def</ModuleDefinitionFile>\r
     </Link>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
     </Lib>\r
   </ItemDefinitionGroup>\r
   <ItemGroup>\r
-    <ClCompile Include="..\..\src\freeglut_callbacks.c" />\r
-    <ClCompile Include="..\..\src\freeglut_cursor.c" />\r
-    <ClCompile Include="..\..\src\freeglut_display.c" />\r
-    <ClCompile Include="..\..\src\freeglut_ext.c" />\r
-    <ClCompile Include="..\..\src\freeglut_font.c" />\r
-    <ClCompile Include="..\..\src\freeglut_font_data.c" />\r
-    <ClCompile Include="..\..\src\freeglut_gamemode.c" />\r
-    <ClCompile Include="..\..\src\freeglut_geometry.c" />\r
-    <ClCompile Include="..\..\src\freeglut_glutfont_definitions.c" />\r
-    <ClCompile Include="..\..\src\freeglut_init.c" />\r
-    <ClCompile Include="..\..\src\freeglut_input_devices.c" />\r
-    <ClCompile Include="..\..\src\freeglut_joystick.c" />\r
-    <ClCompile Include="..\..\src\freeglut_main.c" />\r
-    <ClCompile Include="..\..\src\freeglut_menu.c" />\r
-    <ClCompile Include="..\..\src\freeglut_misc.c" />\r
-    <ClCompile Include="..\..\src\freeglut_overlay.c" />\r
-    <ClCompile Include="..\..\src\freeglut_spaceball.c" />\r
-    <ClCompile Include="..\..\src\freeglut_state.c" />\r
-    <ClCompile Include="..\..\src\freeglut_stroke_mono_roman.c" />\r
-    <ClCompile Include="..\..\src\freeglut_stroke_roman.c" />\r
-    <ClCompile Include="..\..\src\freeglut_structure.c" />\r
-    <ClCompile Include="..\..\src\freeglut_teapot.c" />\r
-    <ClCompile Include="..\..\src\freeglut_videoresize.c" />\r
-    <ClCompile Include="..\..\src\freeglut_window.c" />\r
+    <ClCompile Include="..\..\src\Common\freeglut_callbacks.c" />\r
+    <ClCompile Include="..\..\src\Common\freeglut_cursor.c" />\r
+    <ClCompile Include="..\..\src\Common\freeglut_display.c" />\r
+    <ClCompile Include="..\..\src\Common\freeglut_ext.c" />\r
+    <ClCompile Include="..\..\src\Common\freeglut_font.c" />\r
+    <ClCompile Include="..\..\src\Common\freeglut_font_data.c" />\r
+    <ClCompile Include="..\..\src\Common\freeglut_gamemode.c" />\r
+    <ClCompile Include="..\..\src\Common\freeglut_geometry.c" />\r
+    <ClCompile Include="..\..\src\Common\freeglut_glutfont_definitions.c" />\r
+    <ClCompile Include="..\..\src\Common\freeglut_init.c" />\r
+    <ClCompile Include="..\..\src\Common\freeglut_input_devices.c" />\r
+    <ClCompile Include="..\..\src\Common\freeglut_joystick.c" />\r
+    <ClCompile Include="..\..\src\Common\freeglut_main.c" />\r
+    <ClCompile Include="..\..\src\Common\freeglut_menu.c" />\r
+    <ClCompile Include="..\..\src\Common\freeglut_misc.c" />\r
+    <ClCompile Include="..\..\src\Common\freeglut_overlay.c" />\r
+    <ClCompile Include="..\..\src\Common\freeglut_spaceball.c" />\r
+    <ClCompile Include="..\..\src\Common\freeglut_state.c" />\r
+    <ClCompile Include="..\..\src\Common\freeglut_stroke_mono_roman.c" />\r
+    <ClCompile Include="..\..\src\Common\freeglut_stroke_roman.c" />\r
+    <ClCompile Include="..\..\src\Common\freeglut_structure.c" />\r
+    <ClCompile Include="..\..\src\Common\freeglut_teapot.c" />\r
+    <ClCompile Include="..\..\src\Common\freeglut_videoresize.c" />\r
+    <ClCompile Include="..\..\src\Common\freeglut_window.c" />\r
   </ItemGroup>\r
   <ItemGroup>\r
-    <None Include="..\..\src\freeglutdll.def" />\r
+    <None Include="..\..\src\Common\freeglutdll.def" />\r
   </ItemGroup>\r
   <ItemGroup>\r
     <ClInclude Include="..\..\include\GL\freeglut.h" />\r
     <ClInclude Include="..\..\include\GL\freeglut_ext.h" />\r
-    <ClInclude Include="..\..\src\freeglut_internal.h" />\r
+    <ClInclude Include="..\..\src\Common\freeglut_internal.h" />\r
     <ClInclude Include="..\..\include\GL\freeglut_std.h" />\r
-    <ClInclude Include="..\..\src\freeglut_teapot_data.h" />\r
+    <ClInclude Include="..\..\src\Common\freeglut_teapot_data.h" />\r
     <ClInclude Include="..\..\include\GL\glut.h" />\r
   </ItemGroup>\r
   <ItemGroup>\r
index 2b28b86..0c64c96 100644 (file)
     </Filter>\r
   </ItemGroup>\r
   <ItemGroup>\r
-    <ClCompile Include="..\..\src\freeglut_callbacks.c">\r
+    <ClCompile Include="..\..\src\Common\freeglut_callbacks.c">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
-    <ClCompile Include="..\..\src\freeglut_cursor.c">\r
+    <ClCompile Include="..\..\src\Common\freeglut_cursor.c">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
-    <ClCompile Include="..\..\src\freeglut_display.c">\r
+    <ClCompile Include="..\..\src\Common\freeglut_display.c">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
-    <ClCompile Include="..\..\src\freeglut_ext.c">\r
+    <ClCompile Include="..\..\src\Common\freeglut_ext.c">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
-    <ClCompile Include="..\..\src\freeglut_font.c">\r
+    <ClCompile Include="..\..\src\Common\freeglut_font.c">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
-    <ClCompile Include="..\..\src\freeglut_font_data.c">\r
+    <ClCompile Include="..\..\src\Common\freeglut_font_data.c">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
-    <ClCompile Include="..\..\src\freeglut_gamemode.c">\r
+    <ClCompile Include="..\..\src\Common\freeglut_gamemode.c">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
-    <ClCompile Include="..\..\src\freeglut_geometry.c">\r
+    <ClCompile Include="..\..\src\Common\freeglut_geometry.c">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
-    <ClCompile Include="..\..\src\freeglut_glutfont_definitions.c">\r
+    <ClCompile Include="..\..\src\Common\freeglut_glutfont_definitions.c">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
-    <ClCompile Include="..\..\src\freeglut_init.c">\r
+    <ClCompile Include="..\..\src\Common\freeglut_init.c">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
-    <ClCompile Include="..\..\src\freeglut_input_devices.c">\r
+    <ClCompile Include="..\..\src\Common\freeglut_input_devices.c">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
-    <ClCompile Include="..\..\src\freeglut_joystick.c">\r
+    <ClCompile Include="..\..\src\Common\freeglut_joystick.c">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
-    <ClCompile Include="..\..\src\freeglut_main.c">\r
+    <ClCompile Include="..\..\src\Common\freeglut_main.c">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
-    <ClCompile Include="..\..\src\freeglut_menu.c">\r
+    <ClCompile Include="..\..\src\Common\freeglut_menu.c">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
-    <ClCompile Include="..\..\src\freeglut_misc.c">\r
+    <ClCompile Include="..\..\src\Common\freeglut_misc.c">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
-    <ClCompile Include="..\..\src\freeglut_overlay.c">\r
+    <ClCompile Include="..\..\src\Common\freeglut_overlay.c">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
-    <ClCompile Include="..\..\src\freeglut_spaceball.c">\r
+    <ClCompile Include="..\..\src\Common\freeglut_spaceball.c">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
-    <ClCompile Include="..\..\src\freeglut_state.c">\r
+    <ClCompile Include="..\..\src\Common\freeglut_state.c">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
-    <ClCompile Include="..\..\src\freeglut_stroke_mono_roman.c">\r
+    <ClCompile Include="..\..\src\Common\freeglut_stroke_mono_roman.c">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
-    <ClCompile Include="..\..\src\freeglut_stroke_roman.c">\r
+    <ClCompile Include="..\..\src\Common\freeglut_stroke_roman.c">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
-    <ClCompile Include="..\..\src\freeglut_structure.c">\r
+    <ClCompile Include="..\..\src\Common\freeglut_structure.c">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
-    <ClCompile Include="..\..\src\freeglut_teapot.c">\r
+    <ClCompile Include="..\..\src\Common\freeglut_teapot.c">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
-    <ClCompile Include="..\..\src\freeglut_videoresize.c">\r
+    <ClCompile Include="..\..\src\Common\freeglut_videoresize.c">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
-    <ClCompile Include="..\..\src\freeglut_window.c">\r
+    <ClCompile Include="..\..\src\Common\freeglut_window.c">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
   </ItemGroup>\r
   <ItemGroup>\r
-    <None Include="..\..\src\freeglutdll.def">\r
+    <None Include="..\..\src\Common\freeglutdll.def">\r
       <Filter>Source Files</Filter>\r
     </None>\r
   </ItemGroup>\r
     <ClInclude Include="..\..\include\GL\freeglut_ext.h">\r
       <Filter>Header Files</Filter>\r
     </ClInclude>\r
-    <ClInclude Include="..\..\src\freeglut_internal.h">\r
+    <ClInclude Include="..\..\src\Common\freeglut_internal.h">\r
       <Filter>Header Files</Filter>\r
     </ClInclude>\r
     <ClInclude Include="..\..\include\GL\freeglut_std.h">\r
       <Filter>Header Files</Filter>\r
     </ClInclude>\r
-    <ClInclude Include="..\..\src\freeglut_teapot_data.h">\r
+    <ClInclude Include="..\..\src\Common\freeglut_teapot_data.h">\r
       <Filter>Header Files</Filter>\r
     </ClInclude>\r
     <ClInclude Include="..\..\include\GL\glut.h">\r
index 9968bbb..9bdc750 100644 (file)
 # Microsoft Developer Studio Generated Dependency File, included by freeglut.mak\r
 \r
-.\src\freeglut_callbacks.c : \\r
+.\src\Common\freeglut_callbacks.c : \\r
        "..\..\..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\\r
        ".\include\GL\freeglut.h"\\r
        ".\include\GL\freeglut_ext.h"\\r
        ".\include\GL\freeglut_std.h"\\r
-       ".\src\freeglut_internal.h"\\r
+       ".\src\Common\freeglut_internal.h"\\r
        \r
 \r
-.\src\freeglut_cursor.c : \\r
+.\src\Common\freeglut_cursor.c : \\r
        "..\..\..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\\r
        ".\include\GL\freeglut.h"\\r
        ".\include\GL\freeglut_ext.h"\\r
        ".\include\GL\freeglut_std.h"\\r
-       ".\src\freeglut_internal.h"\\r
+       ".\src\Common\freeglut_internal.h"\\r
        \r
 \r
-.\src\freeglut_display.c : \\r
+.\src\Common\freeglut_display.c : \\r
        "..\..\..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\\r
        ".\include\GL\freeglut.h"\\r
        ".\include\GL\freeglut_ext.h"\\r
        ".\include\GL\freeglut_std.h"\\r
-       ".\src\freeglut_internal.h"\\r
+       ".\src\Common\freeglut_internal.h"\\r
        \r
 \r
-.\src\freeglut_ext.c : \\r
+.\src\Common\freeglut_ext.c : \\r
        "..\..\..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\\r
        ".\include\GL\freeglut.h"\\r
        ".\include\GL\freeglut_ext.h"\\r
        ".\include\GL\freeglut_std.h"\\r
-       ".\src\freeglut_internal.h"\\r
+       ".\src\Common\freeglut_internal.h"\\r
        \r
 \r
-.\src\freeglut_font.c : \\r
+.\src\Common\freeglut_font.c : \\r
        "..\..\..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\\r
        ".\include\GL\freeglut.h"\\r
        ".\include\GL\freeglut_ext.h"\\r
        ".\include\GL\freeglut_std.h"\\r
-       ".\src\freeglut_internal.h"\\r
+       ".\src\Common\freeglut_internal.h"\\r
        \r
 \r
-.\src\freeglut_font_data.c : \\r
+.\src\Common\freeglut_font_data.c : \\r
        "..\..\..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\\r
        ".\include\GL\freeglut.h"\\r
        ".\include\GL\freeglut_ext.h"\\r
        ".\include\GL\freeglut_std.h"\\r
-       ".\src\freeglut_internal.h"\\r
+       ".\src\Common\freeglut_internal.h"\\r
        \r
 \r
-.\src\freeglut_gamemode.c : \\r
+.\src\Common\freeglut_gamemode.c : \\r
        "..\..\..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\\r
        ".\include\GL\freeglut.h"\\r
        ".\include\GL\freeglut_ext.h"\\r
        ".\include\GL\freeglut_std.h"\\r
-       ".\src\freeglut_internal.h"\\r
+       ".\src\Common\freeglut_internal.h"\\r
        \r
 \r
-.\src\freeglut_geometry.c : \\r
+.\src\Common\freeglut_geometry.c : \\r
        "..\..\..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\\r
        ".\include\GL\freeglut.h"\\r
        ".\include\GL\freeglut_ext.h"\\r
        ".\include\GL\freeglut_std.h"\\r
-       ".\src\freeglut_internal.h"\\r
+       ".\src\Common\freeglut_internal.h"\\r
        \r
 \r
-.\src\freeglut_glutfont_definitions.c : \\r
+.\src\Common\freeglut_glutfont_definitions.c : \\r
        "..\..\..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\\r
-       ".\src\freeglut_internal.h"\\r
+       ".\src\Common\freeglut_internal.h"\\r
        \r
 \r
-.\src\freeglut_init.c : \\r
+.\src\Common\freeglut_init.c : \\r
        "..\..\..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\\r
        ".\include\GL\freeglut.h"\\r
        ".\include\GL\freeglut_ext.h"\\r
        ".\include\GL\freeglut_std.h"\\r
-       ".\src\freeglut_internal.h"\\r
+       ".\src\Common\freeglut_internal.h"\\r
        \r
 \r
-.\src\freeglut_input_devices.c : \\r
+.\src\Common\freeglut_input_devices.c : \\r
        "..\..\..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\\r
        ".\include\GL\freeglut.h"\\r
        ".\include\GL\freeglut_ext.h"\\r
        ".\include\GL\freeglut_std.h"\\r
-       ".\src\freeglut_internal.h"\\r
+       ".\src\Common\freeglut_internal.h"\\r
        \r
 \r
-.\src\freeglut_joystick.c : \\r
+.\src\Common\freeglut_joystick.c : \\r
        "..\..\..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\\r
        ".\include\GL\freeglut.h"\\r
        ".\include\GL\freeglut_ext.h"\\r
        ".\include\GL\freeglut_std.h"\\r
-       ".\src\freeglut_internal.h"\\r
+       ".\src\Common\freeglut_internal.h"\\r
        \r
 \r
-.\src\freeglut_main.c : \\r
+.\src\Common\freeglut_main.c : \\r
        "..\..\..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\\r
        ".\include\GL\freeglut.h"\\r
        ".\include\GL\freeglut_ext.h"\\r
        ".\include\GL\freeglut_std.h"\\r
-       ".\src\freeglut_internal.h"\\r
+       ".\src\Common\freeglut_internal.h"\\r
        \r
 \r
-.\src\freeglut_menu.c : \\r
+.\src\Common\freeglut_menu.c : \\r
        "..\..\..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\\r
        ".\include\GL\freeglut.h"\\r
        ".\include\GL\freeglut_ext.h"\\r
        ".\include\GL\freeglut_std.h"\\r
-       ".\src\freeglut_internal.h"\\r
+       ".\src\Common\freeglut_internal.h"\\r
        \r
 \r
-.\src\freeglut_misc.c : \\r
+.\src\Common\freeglut_misc.c : \\r
        "..\..\..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\\r
        ".\include\GL\freeglut.h"\\r
        ".\include\GL\freeglut_ext.h"\\r
        ".\include\GL\freeglut_std.h"\\r
-       ".\src\freeglut_internal.h"\\r
+       ".\src\Common\freeglut_internal.h"\\r
        \r
 \r
-.\src\freeglut_overlay.c : \\r
+.\src\Common\freeglut_overlay.c : \\r
        "..\..\..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\\r
        ".\include\GL\freeglut.h"\\r
        ".\include\GL\freeglut_ext.h"\\r
        ".\include\GL\freeglut_std.h"\\r
-       ".\src\freeglut_internal.h"\\r
+       ".\src\Common\freeglut_internal.h"\\r
        \r
 \r
-.\src\freeglut_state.c : \\r
+.\src\Common\freeglut_state.c : \\r
        "..\..\..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\\r
        ".\include\GL\freeglut.h"\\r
        ".\include\GL\freeglut_ext.h"\\r
        ".\include\GL\freeglut_std.h"\\r
-       ".\src\freeglut_internal.h"\\r
+       ".\src\Common\freeglut_internal.h"\\r
        \r
 \r
-.\src\freeglut_stroke_mono_roman.c : \\r
+.\src\Common\freeglut_stroke_mono_roman.c : \\r
        "..\..\..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\\r
-       ".\src\freeglut_internal.h"\\r
+       ".\src\Common\freeglut_internal.h"\\r
        \r
 \r
-.\src\freeglut_stroke_roman.c : \\r
+.\src\Common\freeglut_stroke_roman.c : \\r
        "..\..\..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\\r
-       ".\src\freeglut_internal.h"\\r
+       ".\src\Common\freeglut_internal.h"\\r
        \r
 \r
-.\src\freeglut_structure.c : \\r
+.\src\Common\freeglut_structure.c : \\r
        "..\..\..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\\r
        ".\include\GL\freeglut.h"\\r
        ".\include\GL\freeglut_ext.h"\\r
        ".\include\GL\freeglut_std.h"\\r
-       ".\src\freeglut_internal.h"\\r
+       ".\src\Common\freeglut_internal.h"\\r
        \r
 \r
-.\src\freeglut_teapot.c : \\r
+.\src\Common\freeglut_teapot.c : \\r
        "..\..\..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\\r
        ".\include\GL\freeglut.h"\\r
        ".\include\GL\freeglut_ext.h"\\r
        ".\include\GL\freeglut_std.h"\\r
-       ".\src\freeglut_internal.h"\\r
-       ".\src\freeglut_teapot_data.h"\\r
+       ".\src\Common\freeglut_internal.h"\\r
+       ".\src\Common\freeglut_teapot_data.h"\\r
        \r
 \r
-.\src\freeglut_videoresize.c : \\r
+.\src\Common\freeglut_videoresize.c : \\r
        "..\..\..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\\r
        ".\include\GL\freeglut.h"\\r
        ".\include\GL\freeglut_ext.h"\\r
        ".\include\GL\freeglut_std.h"\\r
-       ".\src\freeglut_internal.h"\\r
+       ".\src\Common\freeglut_internal.h"\\r
        \r
 \r
-.\src\freeglut_window.c : \\r
+.\src\Common\freeglut_window.c : \\r
        "..\..\..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\\r
        ".\include\GL\freeglut.h"\\r
        ".\include\GL\freeglut_ext.h"\\r
        ".\include\GL\freeglut_std.h"\\r
-       ".\src\freeglut_internal.h"\\r
+       ".\src\Common\freeglut_internal.h"\\r
        \r
index 17836a0..d4488e1 100644 (file)
@@ -91,99 +91,99 @@ LINK32=link.exe
 # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
 # Begin Source File
 
-SOURCE=.\src\freeglut_callbacks.c
+SOURCE=.\src\Common\freeglut_callbacks.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_cursor.c
+SOURCE=.\src\Common\freeglut_cursor.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_display.c
+SOURCE=.\src\Common\freeglut_display.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_ext.c
+SOURCE=.\src\Common\freeglut_ext.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_font.c
+SOURCE=.\src\Common\freeglut_font.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_font_data.c
+SOURCE=.\src\Common\freeglut_font_data.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_gamemode.c
+SOURCE=.\src\Common\freeglut_gamemode.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_geometry.c
+SOURCE=.\src\Common\freeglut_geometry.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_glutfont_definitions.c
+SOURCE=.\src\Common\freeglut_glutfont_definitions.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_init.c
+SOURCE=.\src\Common\freeglut_init.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_input_devices.c
+SOURCE=.\src\Common\freeglut_input_devices.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_joystick.c
+SOURCE=.\src\Common\freeglut_joystick.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_main.c
+SOURCE=.\src\Common\freeglut_main.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_menu.c
+SOURCE=.\src\Common\freeglut_menu.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_misc.c
+SOURCE=.\src\Common\freeglut_misc.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_overlay.c
+SOURCE=.\src\Common\freeglut_overlay.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_spaceball.c
+SOURCE=.\src\Common\freeglut_spaceball.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_state.c
+SOURCE=.\src\Common\freeglut_state.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_stroke_mono_roman.c
+SOURCE=.\src\Common\freeglut_stroke_mono_roman.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_stroke_roman.c
+SOURCE=.\src\Common\freeglut_stroke_roman.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_structure.c
+SOURCE=.\src\Common\freeglut_structure.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_teapot.c
+SOURCE=.\src\Common\freeglut_teapot.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_videoresize.c
+SOURCE=.\src\Common\freeglut_videoresize.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_window.c
+SOURCE=.\src\Common\freeglut_window.c
 # End Source File
 # End Group
 # Begin Group "Header Files"
@@ -199,7 +199,7 @@ SOURCE=.\include\GL\freeglut_ext.h
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_internal.h
+SOURCE=.\src\Common\freeglut_internal.h
 # End Source File
 # Begin Source File
 
@@ -207,7 +207,7 @@ SOURCE=.\include\GL\freeglut_std.h
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_teapot_data.h
+SOURCE=.\src\Common\freeglut_teapot_data.h
 # End Source File
 # Begin Source File
 
index 7fd94a6..5c81216 100644 (file)
   </general>
   <kdevautoproject>
     <general>
-      <activetarget>src/freeglut</activetarget>
+      <activetarget>src/Common/freeglut</activetarget>
     </general>
     <run>
-      <mainprogram>src/freeglut</mainprogram>
+      <mainprogram>src/Common/freeglut</mainprogram>
     </run>
     <make>
       <envvars>
index b4d4cf7..69c14fc 100644 (file)
@@ -9,18 +9,18 @@ files=include/GL/freeglut.h,include/GL/freeglut_internal.h,
 sub_dirs=
 type=normal
 [Workspace_1]
-openfiles=Nienazwany.h,Nienazwany.cpp,/home/olszta/freeglut/include/GL/freeglut_internal.h,/home/olszta/freeglut/src/freeglut_callbacks.c,/home/olszta/freeglut/src/freeglut_gamemode.c,/home/olszta/freeglut/src/freeglut_init.c,/home/olszta/freeglut/src/freeglut_main.c,/home/olszta/freeglut/src/freeglut_window.c,/home/olszta/freeglut/src/freeglut_misc.c,/home/olszta/freeglut/include/GL/freeglut.h,/home/olszta/freeglut/src/freeglut_cursor.c,/home/olszta/freeglut/src/freeglut_geometry.c,/home/olszta/freeglut/src/freeglut_font_data.c,/home/olszta/freeglut/src/freeglut_videoresize.c,/home/olszta/freeglut/src/freeglut_teapot.c,/home/olszta/freeglut/src/freeglut_structure.c,/home/olszta/freeglut/src/freeglut_state.c,
+openfiles=Nienazwany.h,Nienazwany.cpp,/home/olszta/freeglut/include/GL/freeglut_internal.h,/home/olszta/freeglut/src/Common/freeglut_callbacks.c,/home/olszta/freeglut/src/Common/freeglut_gamemode.c,/home/olszta/freeglut/src/Common/freeglut_init.c,/home/olszta/freeglut/src/Common/freeglut_main.c,/home/olszta/freeglut/src/Common/freeglut_window.c,/home/olszta/freeglut/src/Common/freeglut_misc.c,/home/olszta/freeglut/include/GL/freeglut.h,/home/olszta/freeglut/src/Common/freeglut_cursor.c,/home/olszta/freeglut/src/Common/freeglut_geometry.c,/home/olszta/freeglut/src/Common/freeglut_font_data.c,/home/olszta/freeglut/src/Common/freeglut_videoresize.c,/home/olszta/freeglut/src/Common/freeglut_teapot.c,/home/olszta/freeglut/src/Common/freeglut_structure.c,/home/olszta/freeglut/src/Common/freeglut_state.c,
 show_outputview=true
 show_treeview=true
 header_file=/home/olszta/freeglut/include/GL/freeglut.h
-cpp_file=/home/olszta/freeglut/src/freeglut_state.c
+cpp_file=/home/olszta/freeglut/src/Common/freeglut_state.c
 browser_file=file:/usr/doc/kde/HTML/default/kdevelop/welcome/index.html
 [COPYING]
 install_location=
 dist=true
 install=false
 type=DATA
-[src/freeglut_videoresize.c]
+[src/Common/freeglut_videoresize.c]
 install_location=
 dist=true
 install=false
@@ -36,7 +36,7 @@ cxxflags=-O0 -g3 -Wall
 type=po
 sub_dirs=
 [src/Makefile.am]
-files=src/freeglut_callbacks.c,src/freeglut_cursor.c,src/freeglut_display.c,src/freeglut_font.c,src/freeglut_font_data.c,src/freeglut_gamemode.c,src/freeglut_geometry.c,src/freeglut_init.c,src/freeglut_joystick.c,src/freeglut_main.c,src/freeglut_menu.c,src/freeglut_misc.c,src/freeglut_overlay.c,src/freeglut_state.c,src/freeglut_structure.c,src/freeglut_teapot.c,src/freeglut_videoresize.c,src/freeglut_window.c,
+files=src/Common/freeglut_callbacks.c,src/Common/freeglut_cursor.c,src/Common/freeglut_display.c,src/Common/freeglut_font.c,src/Common/freeglut_font_data.c,src/Common/freeglut_gamemode.c,src/Common/freeglut_geometry.c,src/Common/freeglut_init.c,src/Common/freeglut_joystick.c,src/Common/freeglut_main.c,src/Common/freeglut_menu.c,src/Common/freeglut_misc.c,src/Common/freeglut_overlay.c,src/Common/freeglut_state.c,src/Common/freeglut_structure.c,src/Common/freeglut_teapot.c,src/Common/freeglut_videoresize.c,src/Common/freeglut_window.c,
 type=prog_main
 sub_dirs=
 [freeglut.kdevprj]
@@ -49,12 +49,12 @@ install_location=
 dist=true
 install=false
 type=DATA
-[src/freeglut_gamemode.c]
+[src/Common/freeglut_gamemode.c]
 install_location=
 dist=true
 install=false
 type=SOURCE
-[src/freeglut_menu.c]
+[src/Common/freeglut_menu.c]
 install_location=
 dist=true
 install=false
@@ -68,27 +68,27 @@ Headers=*.h,*.hxx,*.hpp,*.H,
 [src/docs/en/Makefile.am]
 type=normal
 sub_dirs=
-[src/freeglut_font.c]
+[src/Common/freeglut_font.c]
 install_location=
 dist=true
 install=false
 type=SOURCE
-[src/freeglut_window.c]
+[src/Common/freeglut_window.c]
 install_location=
 dist=true
 install=false
 type=SOURCE
-[src/freeglut_main.c]
+[src/Common/freeglut_main.c]
 install_location=
 dist=true
 install=false
 type=SOURCE
-[src/freeglut_state.c]
+[src/Common/freeglut_state.c]
 install_location=
 dist=true
 install=false
 type=SOURCE
-[src/freeglut_callbacks.c]
+[src/Common/freeglut_callbacks.c]
 install_location=
 dist=true
 install=false
@@ -98,7 +98,7 @@ install_location=
 dist=true
 install=false
 type=HEADER
-[src/freeglut_structure.c]
+[src/Common/freeglut_structure.c]
 install_location=
 dist=true
 install=false
@@ -108,7 +108,7 @@ install_location=
 dist=true
 install=false
 type=DATA
-[src/freeglut_geometry.c]
+[src/Common/freeglut_geometry.c]
 install_location=
 dist=true
 install=false
@@ -135,17 +135,17 @@ install_location=
 dist=true
 install=false
 type=DATA
-[src/freeglut_init.c]
+[src/Common/freeglut_init.c]
 install_location=
 dist=true
 install=false
 type=SOURCE
-[src/freeglut_display.c]
+[src/Common/freeglut_display.c]
 install_location=
 dist=true
 install=false
 type=SOURCE
-[src/freeglut_overlay.c]
+[src/Common/freeglut_overlay.c]
 install_location=
 dist=true
 install=false
@@ -155,7 +155,7 @@ install_location=
 dist=true
 install=false
 type=DATA
-[src/freeglut_misc.c]
+[src/Common/freeglut_misc.c]
 install_location=
 dist=true
 install=false
@@ -164,7 +164,7 @@ type=SOURCE
 files=freeglut.kdevprj,AUTHORS,COPYING,ChangeLog,INSTALL,README,TODO,freeglut.lsm,
 type=normal
 sub_dirs=src,include,
-[src/freeglut_cursor.c]
+[src/Common/freeglut_cursor.c]
 install_location=
 dist=true
 install=false
index dd03686..0573131 100644 (file)
@@ -323,7 +323,7 @@ LINK32_OBJS= \
 \r
 \r
 !IF "$(CFG)" == "freeglut - Win32 Release" || "$(CFG)" == "freeglut - Win32 Debug"\r
-SOURCE=.\src\freeglut_callbacks.c\r
+SOURCE=.\src\Common\freeglut_callbacks.c\r
 \r
 !IF  "$(CFG)" == "freeglut - Win32 Release"\r
 \r
@@ -341,7 +341,7 @@ SOURCE=.\src\freeglut_callbacks.c
 \r
 !ENDIF \r
 \r
-SOURCE=.\src\freeglut_cursor.c\r
+SOURCE=.\src\Common\freeglut_cursor.c\r
 \r
 !IF  "$(CFG)" == "freeglut - Win32 Release"\r
 \r
@@ -359,7 +359,7 @@ SOURCE=.\src\freeglut_cursor.c
 \r
 !ENDIF \r
 \r
-SOURCE=.\src\freeglut_display.c\r
+SOURCE=.\src\Common\freeglut_display.c\r
 \r
 !IF  "$(CFG)" == "freeglut - Win32 Release"\r
 \r
@@ -377,7 +377,7 @@ SOURCE=.\src\freeglut_display.c
 \r
 !ENDIF \r
 \r
-SOURCE=.\src\freeglut_ext.c\r
+SOURCE=.\src\Common\freeglut_ext.c\r
 \r
 !IF  "$(CFG)" == "freeglut - Win32 Release"\r
 \r
@@ -395,7 +395,7 @@ SOURCE=.\src\freeglut_ext.c
 \r
 !ENDIF \r
 \r
-SOURCE=.\src\freeglut_font.c\r
+SOURCE=.\src\Common\freeglut_font.c\r
 \r
 !IF  "$(CFG)" == "freeglut - Win32 Release"\r
 \r
@@ -413,7 +413,7 @@ SOURCE=.\src\freeglut_font.c
 \r
 !ENDIF \r
 \r
-SOURCE=.\src\freeglut_font_data.c\r
+SOURCE=.\src\Common\freeglut_font_data.c\r
 \r
 !IF  "$(CFG)" == "freeglut - Win32 Release"\r
 \r
@@ -431,7 +431,7 @@ SOURCE=.\src\freeglut_font_data.c
 \r
 !ENDIF \r
 \r
-SOURCE=.\src\freeglut_gamemode.c\r
+SOURCE=.\src\Common\freeglut_gamemode.c\r
 \r
 !IF  "$(CFG)" == "freeglut - Win32 Release"\r
 \r
@@ -449,7 +449,7 @@ SOURCE=.\src\freeglut_gamemode.c
 \r
 !ENDIF \r
 \r
-SOURCE=.\src\freeglut_geometry.c\r
+SOURCE=.\src\Common\freeglut_geometry.c\r
 \r
 !IF  "$(CFG)" == "freeglut - Win32 Release"\r
 \r
@@ -467,7 +467,7 @@ SOURCE=.\src\freeglut_geometry.c
 \r
 !ENDIF \r
 \r
-SOURCE=.\src\freeglut_glutfont_definitions.c\r
+SOURCE=.\src\Common\freeglut_glutfont_definitions.c\r
 \r
 !IF  "$(CFG)" == "freeglut - Win32 Release"\r
 \r
@@ -485,7 +485,7 @@ SOURCE=.\src\freeglut_glutfont_definitions.c
 \r
 !ENDIF \r
 \r
-SOURCE=.\src\freeglut_init.c\r
+SOURCE=.\src\Common\freeglut_init.c\r
 \r
 !IF  "$(CFG)" == "freeglut - Win32 Release"\r
 \r
@@ -503,7 +503,7 @@ SOURCE=.\src\freeglut_init.c
 \r
 !ENDIF \r
 \r
-SOURCE=.\src\freeglut_input_devices.c\r
+SOURCE=.\src\Common\freeglut_input_devices.c\r
 \r
 !IF  "$(CFG)" == "freeglut - Win32 Release"\r
 \r
@@ -521,7 +521,7 @@ SOURCE=.\src\freeglut_input_devices.c
 \r
 !ENDIF \r
 \r
-SOURCE=.\src\freeglut_joystick.c\r
+SOURCE=.\src\Common\freeglut_joystick.c\r
 \r
 !IF  "$(CFG)" == "freeglut - Win32 Release"\r
 \r
@@ -539,7 +539,7 @@ SOURCE=.\src\freeglut_joystick.c
 \r
 !ENDIF \r
 \r
-SOURCE=.\src\freeglut_main.c\r
+SOURCE=.\src\Common\freeglut_main.c\r
 \r
 !IF  "$(CFG)" == "freeglut - Win32 Release"\r
 \r
@@ -557,7 +557,7 @@ SOURCE=.\src\freeglut_main.c
 \r
 !ENDIF \r
 \r
-SOURCE=.\src\freeglut_menu.c\r
+SOURCE=.\src\Common\freeglut_menu.c\r
 \r
 !IF  "$(CFG)" == "freeglut - Win32 Release"\r
 \r
@@ -575,7 +575,7 @@ SOURCE=.\src\freeglut_menu.c
 \r
 !ENDIF \r
 \r
-SOURCE=.\src\freeglut_misc.c\r
+SOURCE=.\src\Common\freeglut_misc.c\r
 \r
 !IF  "$(CFG)" == "freeglut - Win32 Release"\r
 \r
@@ -593,7 +593,7 @@ SOURCE=.\src\freeglut_misc.c
 \r
 !ENDIF \r
 \r
-SOURCE=.\src\freeglut_overlay.c\r
+SOURCE=.\src\Common\freeglut_overlay.c\r
 \r
 !IF  "$(CFG)" == "freeglut - Win32 Release"\r
 \r
@@ -611,7 +611,7 @@ SOURCE=.\src\freeglut_overlay.c
 \r
 !ENDIF \r
 \r
-SOURCE=.\src\freeglut_state.c\r
+SOURCE=.\src\Common\freeglut_state.c\r
 \r
 !IF  "$(CFG)" == "freeglut - Win32 Release"\r
 \r
@@ -629,7 +629,7 @@ SOURCE=.\src\freeglut_state.c
 \r
 !ENDIF \r
 \r
-SOURCE=.\src\freeglut_stroke_mono_roman.c\r
+SOURCE=.\src\Common\freeglut_stroke_mono_roman.c\r
 \r
 !IF  "$(CFG)" == "freeglut - Win32 Release"\r
 \r
@@ -647,7 +647,7 @@ SOURCE=.\src\freeglut_stroke_mono_roman.c
 \r
 !ENDIF \r
 \r
-SOURCE=.\src\freeglut_stroke_roman.c\r
+SOURCE=.\src\Common\freeglut_stroke_roman.c\r
 \r
 !IF  "$(CFG)" == "freeglut - Win32 Release"\r
 \r
@@ -665,7 +665,7 @@ SOURCE=.\src\freeglut_stroke_roman.c
 \r
 !ENDIF \r
 \r
-SOURCE=.\src\freeglut_structure.c\r
+SOURCE=.\src\Common\freeglut_structure.c\r
 \r
 !IF  "$(CFG)" == "freeglut - Win32 Release"\r
 \r
@@ -683,7 +683,7 @@ SOURCE=.\src\freeglut_structure.c
 \r
 !ENDIF \r
 \r
-SOURCE=.\src\freeglut_teapot.c\r
+SOURCE=.\src\Common\freeglut_teapot.c\r
 \r
 !IF  "$(CFG)" == "freeglut - Win32 Release"\r
 \r
@@ -701,7 +701,7 @@ SOURCE=.\src\freeglut_teapot.c
 \r
 !ENDIF \r
 \r
-SOURCE=.\src\freeglut_videoresize.c\r
+SOURCE=.\src\Common\freeglut_videoresize.c\r
 \r
 !IF  "$(CFG)" == "freeglut - Win32 Release"\r
 \r
@@ -719,7 +719,7 @@ SOURCE=.\src\freeglut_videoresize.c
 \r
 !ENDIF \r
 \r
-SOURCE=.\src\freeglut_window.c\r
+SOURCE=.\src\Common\freeglut_window.c\r
 \r
 !IF  "$(CFG)" == "freeglut - Win32 Release"\r
 \r
index 1bc8044..03b6614 100644 (file)
@@ -105,254 +105,254 @@ LINK32="C:\Program Files\Microsoft eMbedded C++ 4.0\EVC\WCE420\bin\xilinke42"
 # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
 # Begin Source File
 
-SOURCE=.\src\freeglut_callbacks.c
+SOURCE=.\src\Common\freeglut_callbacks.c
 DEP_CPP_FREEG=\
-       ".\src\freeglut_internal.h"\
+       ".\src\Common\freeglut_internal.h"\
        {$(INCLUDE)}"GL\freeglut.h"\
        {$(INCLUDE)}"GL\freeglut_ext.h"\
        {$(INCLUDE)}"GL\freeglut_std.h"\
        
 NODEP_CPP_FREEG=\
-       ".\src\config.h"\
+       ".\src\Common\config.h"\
        
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_cursor.c
+SOURCE=.\src\Common\freeglut_cursor.c
 DEP_CPP_FREEGL=\
-       ".\src\freeglut_internal.h"\
+       ".\src\Common\freeglut_internal.h"\
        {$(INCLUDE)}"GL\freeglut.h"\
        {$(INCLUDE)}"GL\freeglut_ext.h"\
        {$(INCLUDE)}"GL\freeglut_std.h"\
        
 NODEP_CPP_FREEGL=\
-       ".\src\config.h"\
+       ".\src\Common\config.h"\
        
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_display.c
+SOURCE=.\src\Common\freeglut_display.c
 DEP_CPP_FREEGLU=\
-       ".\src\freeglut_internal.h"\
+       ".\src\Common\freeglut_internal.h"\
        {$(INCLUDE)}"GL\freeglut.h"\
        {$(INCLUDE)}"GL\freeglut_ext.h"\
        {$(INCLUDE)}"GL\freeglut_std.h"\
        
 NODEP_CPP_FREEGLU=\
-       ".\src\config.h"\
+       ".\src\Common\config.h"\
        
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_ext.c
+SOURCE=.\src\Common\freeglut_ext.c
 DEP_CPP_FREEGLUT=\
-       ".\src\freeglut_internal.h"\
+       ".\src\Common\freeglut_internal.h"\
        {$(INCLUDE)}"GL\freeglut.h"\
        {$(INCLUDE)}"GL\freeglut_ext.h"\
        {$(INCLUDE)}"GL\freeglut_std.h"\
        
 NODEP_CPP_FREEGLUT=\
-       ".\src\config.h"\
+       ".\src\Common\config.h"\
        
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_font.c
+SOURCE=.\src\Common\freeglut_font.c
 DEP_CPP_FREEGLUT_=\
-       ".\src\freeglut_internal.h"\
+       ".\src\Common\freeglut_internal.h"\
        {$(INCLUDE)}"GL\freeglut.h"\
        {$(INCLUDE)}"GL\freeglut_ext.h"\
        {$(INCLUDE)}"GL\freeglut_std.h"\
        
 NODEP_CPP_FREEGLUT_=\
-       ".\src\config.h"\
+       ".\src\Common\config.h"\
        
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_font_data.c
+SOURCE=.\src\Common\freeglut_font_data.c
 DEP_CPP_FREEGLUT_F=\
-       ".\src\freeglut_internal.h"\
+       ".\src\Common\freeglut_internal.h"\
        {$(INCLUDE)}"GL\freeglut.h"\
        {$(INCLUDE)}"GL\freeglut_ext.h"\
        {$(INCLUDE)}"GL\freeglut_std.h"\
        
 NODEP_CPP_FREEGLUT_F=\
-       ".\src\config.h"\
+       ".\src\Common\config.h"\
        
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_gamemode.c
+SOURCE=.\src\Common\freeglut_gamemode.c
 # PROP Exclude_From_Build 1
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_geometry.c
+SOURCE=.\src\Common\freeglut_geometry.c
 DEP_CPP_FREEGLUT_G=\
-       ".\src\freeglut_internal.h"\
+       ".\src\Common\freeglut_internal.h"\
        {$(INCLUDE)}"GL\freeglut.h"\
        {$(INCLUDE)}"GL\freeglut_ext.h"\
        {$(INCLUDE)}"GL\freeglut_std.h"\
        
 NODEP_CPP_FREEGLUT_G=\
-       ".\src\config.h"\
+       ".\src\Common\config.h"\
        
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_glutfont_definitions.c
+SOURCE=.\src\Common\freeglut_glutfont_definitions.c
 DEP_CPP_FREEGLUT_GL=\
-       ".\src\freeglut_internal.h"\
+       ".\src\Common\freeglut_internal.h"\
        
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_init.c
+SOURCE=.\src\Common\freeglut_init.c
 DEP_CPP_FREEGLUT_I=\
-       ".\src\freeglut_internal.h"\
+       ".\src\Common\freeglut_internal.h"\
        {$(INCLUDE)}"GL\freeglut.h"\
        {$(INCLUDE)}"GL\freeglut_ext.h"\
        {$(INCLUDE)}"GL\freeglut_std.h"\
        
 NODEP_CPP_FREEGLUT_I=\
-       ".\src\config.h"\
+       ".\src\Common\config.h"\
        
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_internal.h
+SOURCE=.\src\Common\freeglut_internal.h
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_joystick.c
+SOURCE=.\src\Common\freeglut_joystick.c
 # PROP Exclude_From_Build 1
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_main.c
+SOURCE=.\src\Common\freeglut_main.c
 DEP_CPP_FREEGLUT_M=\
-       ".\src\freeglut_internal.h"\
-       ".\src\my_gx.h"\
+       ".\src\Common\freeglut_internal.h"\
+       ".\src\Common\my_gx.h"\
        {$(INCLUDE)}"GL\freeglut.h"\
        {$(INCLUDE)}"GL\freeglut_ext.h"\
        {$(INCLUDE)}"GL\freeglut_std.h"\
        {$(INCLUDE)}"gx.h"\
        
 NODEP_CPP_FREEGLUT_M=\
-       ".\src\config.h"\
+       ".\src\Common\config.h"\
        
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_menu.c
+SOURCE=.\src\Common\freeglut_menu.c
 DEP_CPP_FREEGLUT_ME=\
-       ".\src\freeglut_internal.h"\
+       ".\src\Common\freeglut_internal.h"\
        {$(INCLUDE)}"GL\freeglut.h"\
        {$(INCLUDE)}"GL\freeglut_ext.h"\
        {$(INCLUDE)}"GL\freeglut_std.h"\
        
 NODEP_CPP_FREEGLUT_ME=\
-       ".\src\config.h"\
+       ".\src\Common\config.h"\
        
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_misc.c
+SOURCE=.\src\Common\freeglut_misc.c
 DEP_CPP_FREEGLUT_MI=\
-       ".\src\freeglut_internal.h"\
+       ".\src\Common\freeglut_internal.h"\
        {$(INCLUDE)}"GL\freeglut.h"\
        {$(INCLUDE)}"GL\freeglut_ext.h"\
        {$(INCLUDE)}"GL\freeglut_std.h"\
        
 NODEP_CPP_FREEGLUT_MI=\
-       ".\src\config.h"\
+       ".\src\Common\config.h"\
        
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_overlay.c
+SOURCE=.\src\Common\freeglut_overlay.c
 DEP_CPP_FREEGLUT_O=\
-       ".\src\freeglut_internal.h"\
+       ".\src\Common\freeglut_internal.h"\
        {$(INCLUDE)}"GL\freeglut.h"\
        {$(INCLUDE)}"GL\freeglut_ext.h"\
        {$(INCLUDE)}"GL\freeglut_std.h"\
        
 NODEP_CPP_FREEGLUT_O=\
-       ".\src\config.h"\
+       ".\src\Common\config.h"\
        
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_state.c
+SOURCE=.\src\Common\freeglut_state.c
 DEP_CPP_FREEGLUT_S=\
-       ".\src\freeglut_internal.h"\
+       ".\src\Common\freeglut_internal.h"\
        {$(INCLUDE)}"GL\freeglut.h"\
        {$(INCLUDE)}"GL\freeglut_ext.h"\
        {$(INCLUDE)}"GL\freeglut_std.h"\
        
 NODEP_CPP_FREEGLUT_S=\
-       ".\src\config.h"\
+       ".\src\Common\config.h"\
        
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_stroke_mono_roman.c
+SOURCE=.\src\Common\freeglut_stroke_mono_roman.c
 DEP_CPP_FREEGLUT_ST=\
-       ".\src\freeglut_internal.h"\
+       ".\src\Common\freeglut_internal.h"\
        
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_stroke_roman.c
+SOURCE=.\src\Common\freeglut_stroke_roman.c
 DEP_CPP_FREEGLUT_STR=\
-       ".\src\freeglut_internal.h"\
+       ".\src\Common\freeglut_internal.h"\
        
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_structure.c
+SOURCE=.\src\Common\freeglut_structure.c
 DEP_CPP_FREEGLUT_STRU=\
-       ".\src\freeglut_internal.h"\
+       ".\src\Common\freeglut_internal.h"\
        {$(INCLUDE)}"GL\freeglut.h"\
        {$(INCLUDE)}"GL\freeglut_ext.h"\
        {$(INCLUDE)}"GL\freeglut_std.h"\
        
 NODEP_CPP_FREEGLUT_STRU=\
-       ".\src\config.h"\
+       ".\src\Common\config.h"\
        
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_teapot.c
+SOURCE=.\src\Common\freeglut_teapot.c
 DEP_CPP_FREEGLUT_T=\
-       ".\src\freeglut_internal.h"\
+       ".\src\Common\freeglut_internal.h"\
        {$(INCLUDE)}"GL\freeglut.h"\
        {$(INCLUDE)}"GL\freeglut_ext.h"\
        {$(INCLUDE)}"GL\freeglut_std.h"\
        
 NODEP_CPP_FREEGLUT_T=\
-       ".\src\config.h"\
+       ".\src\Common\config.h"\
        
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_videoresize.c
+SOURCE=.\src\Common\freeglut_videoresize.c
 DEP_CPP_FREEGLUT_V=\
-       ".\src\freeglut_internal.h"\
+       ".\src\Common\freeglut_internal.h"\
        {$(INCLUDE)}"GL\freeglut.h"\
        {$(INCLUDE)}"GL\freeglut_ext.h"\
        {$(INCLUDE)}"GL\freeglut_std.h"\
        
 NODEP_CPP_FREEGLUT_V=\
-       ".\src\config.h"\
+       ".\src\Common\config.h"\
        
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_window.c
+SOURCE=.\src\Common\freeglut_window.c
 DEP_CPP_FREEGLUT_W=\
-       ".\src\freeglut_internal.h"\
+       ".\src\Common\freeglut_internal.h"\
        {$(INCLUDE)}"aygshell.h"\
        {$(INCLUDE)}"GL\freeglut.h"\
        {$(INCLUDE)}"GL\freeglut_ext.h"\
@@ -362,7 +362,7 @@ DEP_CPP_FREEGLUT_W=\
        
 NODEP_CPP_FREEGLUT_W=\
        "..\..\..\..\..\Program Files\Windows CE Tools\wce420\POCKET PC 2003\Include\ARMV4\vibrate.h"\
-       ".\src\config.h"\
+       ".\src\Common\config.h"\
        
 # End Source File
 # End Group
index 865f4f7..1b377ec 100644 (file)
 # Microsoft Developer Studio Generated Dependency File, included by freeglut_static.mak\r
 \r
-.\src\freeglut_callbacks.c : \\r
+.\src\Common\freeglut_callbacks.c : \\r
        "..\..\..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\\r
        ".\include\GL\freeglut.h"\\r
        ".\include\GL\freeglut_ext.h"\\r
        ".\include\GL\freeglut_std.h"\\r
-       ".\src\freeglut_internal.h"\\r
+       ".\src\Common\freeglut_internal.h"\\r
        \r
 \r
-.\src\freeglut_cursor.c : \\r
+.\src\Common\freeglut_cursor.c : \\r
        "..\..\..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\\r
        ".\include\GL\freeglut.h"\\r
        ".\include\GL\freeglut_ext.h"\\r
        ".\include\GL\freeglut_std.h"\\r
-       ".\src\freeglut_internal.h"\\r
+       ".\src\Common\freeglut_internal.h"\\r
        \r
 \r
-.\src\freeglut_display.c : \\r
+.\src\Common\freeglut_display.c : \\r
        "..\..\..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\\r
        ".\include\GL\freeglut.h"\\r
        ".\include\GL\freeglut_ext.h"\\r
        ".\include\GL\freeglut_std.h"\\r
-       ".\src\freeglut_internal.h"\\r
+       ".\src\Common\freeglut_internal.h"\\r
        \r
 \r
-.\src\freeglut_ext.c : \\r
+.\src\Common\freeglut_ext.c : \\r
        "..\..\..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\\r
        ".\include\GL\freeglut.h"\\r
        ".\include\GL\freeglut_ext.h"\\r
        ".\include\GL\freeglut_std.h"\\r
-       ".\src\freeglut_internal.h"\\r
+       ".\src\Common\freeglut_internal.h"\\r
        \r
 \r
-.\src\freeglut_font.c : \\r
+.\src\Common\freeglut_font.c : \\r
        "..\..\..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\\r
        ".\include\GL\freeglut.h"\\r
        ".\include\GL\freeglut_ext.h"\\r
        ".\include\GL\freeglut_std.h"\\r
-       ".\src\freeglut_internal.h"\\r
+       ".\src\Common\freeglut_internal.h"\\r
        \r
 \r
-.\src\freeglut_font_data.c : \\r
+.\src\Common\freeglut_font_data.c : \\r
        "..\..\..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\\r
        ".\include\GL\freeglut.h"\\r
        ".\include\GL\freeglut_ext.h"\\r
        ".\include\GL\freeglut_std.h"\\r
-       ".\src\freeglut_internal.h"\\r
+       ".\src\Common\freeglut_internal.h"\\r
        \r
 \r
-.\src\freeglut_gamemode.c : \\r
+.\src\Common\freeglut_gamemode.c : \\r
        "..\..\..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\\r
        ".\include\GL\freeglut.h"\\r
        ".\include\GL\freeglut_ext.h"\\r
        ".\include\GL\freeglut_std.h"\\r
-       ".\src\freeglut_internal.h"\\r
+       ".\src\Common\freeglut_internal.h"\\r
        \r
 \r
-.\src\freeglut_geometry.c : \\r
+.\src\Common\freeglut_geometry.c : \\r
        "..\..\..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\\r
        ".\include\GL\freeglut.h"\\r
        ".\include\GL\freeglut_ext.h"\\r
        ".\include\GL\freeglut_std.h"\\r
-       ".\src\freeglut_internal.h"\\r
+       ".\src\Common\freeglut_internal.h"\\r
        \r
 \r
-.\src\freeglut_glutfont_definitions.c : \\r
+.\src\Common\freeglut_glutfont_definitions.c : \\r
        "..\..\..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\\r
-       ".\src\freeglut_internal.h"\\r
+       ".\src\Common\freeglut_internal.h"\\r
        \r
 \r
-.\src\freeglut_init.c : \\r
+.\src\Common\freeglut_init.c : \\r
        "..\..\..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\\r
        ".\include\GL\freeglut.h"\\r
        ".\include\GL\freeglut_ext.h"\\r
        ".\include\GL\freeglut_std.h"\\r
-       ".\src\freeglut_internal.h"\\r
+       ".\src\Common\freeglut_internal.h"\\r
        \r
 \r
-.\src\freeglut_input_devices.c : \\r
+.\src\Common\freeglut_input_devices.c : \\r
        "..\..\..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\\r
        ".\include\GL\freeglut.h"\\r
        ".\include\GL\freeglut_ext.h"\\r
        ".\include\GL\freeglut_std.h"\\r
-       ".\src\freeglut_internal.h"\\r
+       ".\src\Common\freeglut_internal.h"\\r
        \r
 \r
-.\src\freeglut_joystick.c : \\r
+.\src\Common\freeglut_joystick.c : \\r
        "..\..\..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\\r
        ".\include\GL\freeglut.h"\\r
        ".\include\GL\freeglut_ext.h"\\r
        ".\include\GL\freeglut_std.h"\\r
-       ".\src\freeglut_internal.h"\\r
+       ".\src\Common\freeglut_internal.h"\\r
        \r
 \r
-.\src\freeglut_main.c : \\r
+.\src\Common\freeglut_main.c : \\r
        "..\..\..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\\r
        ".\include\GL\freeglut.h"\\r
        ".\include\GL\freeglut_ext.h"\\r
        ".\include\GL\freeglut_std.h"\\r
-       ".\src\freeglut_internal.h"\\r
+       ".\src\Common\freeglut_internal.h"\\r
        \r
 \r
-.\src\freeglut_menu.c : \\r
+.\src\Common\freeglut_menu.c : \\r
        "..\..\..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\\r
        ".\include\GL\freeglut.h"\\r
        ".\include\GL\freeglut_ext.h"\\r
        ".\include\GL\freeglut_std.h"\\r
-       ".\src\freeglut_internal.h"\\r
+       ".\src\Common\freeglut_internal.h"\\r
        \r
 \r
-.\src\freeglut_misc.c : \\r
+.\src\Common\freeglut_misc.c : \\r
        "..\..\..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\\r
        ".\include\GL\freeglut.h"\\r
        ".\include\GL\freeglut_ext.h"\\r
        ".\include\GL\freeglut_std.h"\\r
-       ".\src\freeglut_internal.h"\\r
+       ".\src\Common\freeglut_internal.h"\\r
        \r
 \r
-.\src\freeglut_overlay.c : \\r
+.\src\Common\freeglut_overlay.c : \\r
        "..\..\..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\\r
        ".\include\GL\freeglut.h"\\r
        ".\include\GL\freeglut_ext.h"\\r
        ".\include\GL\freeglut_std.h"\\r
-       ".\src\freeglut_internal.h"\\r
+       ".\src\Common\freeglut_internal.h"\\r
        \r
 \r
-.\src\freeglut_state.c : \\r
+.\src\Common\freeglut_state.c : \\r
        "..\..\..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\\r
        ".\include\GL\freeglut.h"\\r
        ".\include\GL\freeglut_ext.h"\\r
        ".\include\GL\freeglut_std.h"\\r
-       ".\src\freeglut_internal.h"\\r
+       ".\src\Common\freeglut_internal.h"\\r
        \r
 \r
-.\src\freeglut_stroke_mono_roman.c : \\r
+.\src\Common\freeglut_stroke_mono_roman.c : \\r
        "..\..\..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\\r
-       ".\src\freeglut_internal.h"\\r
+       ".\src\Common\freeglut_internal.h"\\r
        \r
 \r
-.\src\freeglut_stroke_roman.c : \\r
+.\src\Common\freeglut_stroke_roman.c : \\r
        "..\..\..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\\r
-       ".\src\freeglut_internal.h"\\r
+       ".\src\Common\freeglut_internal.h"\\r
        \r
 \r
-.\src\freeglut_structure.c : \\r
+.\src\Common\freeglut_structure.c : \\r
        "..\..\..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\\r
        ".\include\GL\freeglut.h"\\r
        ".\include\GL\freeglut_ext.h"\\r
        ".\include\GL\freeglut_std.h"\\r
-       ".\src\freeglut_internal.h"\\r
+       ".\src\Common\freeglut_internal.h"\\r
        \r
 \r
-.\src\freeglut_teapot.c : \\r
+.\src\Common\freeglut_teapot.c : \\r
        "..\..\..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\\r
        ".\include\GL\freeglut.h"\\r
        ".\include\GL\freeglut_ext.h"\\r
        ".\include\GL\freeglut_std.h"\\r
-       ".\src\freeglut_internal.h"\\r
-       ".\src\freeglut_teapot_data.h"\\r
+       ".\src\Common\freeglut_internal.h"\\r
+       ".\src\Common\freeglut_teapot_data.h"\\r
        \r
 \r
-.\src\freeglut_videoresize.c : \\r
+.\src\Common\freeglut_videoresize.c : \\r
        "..\..\..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\\r
        ".\include\GL\freeglut.h"\\r
        ".\include\GL\freeglut_ext.h"\\r
        ".\include\GL\freeglut_std.h"\\r
-       ".\src\freeglut_internal.h"\\r
+       ".\src\Common\freeglut_internal.h"\\r
        \r
 \r
-.\src\freeglut_window.c : \\r
+.\src\Common\freeglut_window.c : \\r
        "..\..\..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\\r
        ".\include\GL\freeglut.h"\\r
        ".\include\GL\freeglut_ext.h"\\r
        ".\include\GL\freeglut_std.h"\\r
-       ".\src\freeglut_internal.h"\\r
+       ".\src\Common\freeglut_internal.h"\\r
        \r
index e7443d1..d15246e 100644 (file)
@@ -85,99 +85,99 @@ LIB32=link.exe -lib
 # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
 # Begin Source File
 
-SOURCE=.\src\freeglut_callbacks.c
+SOURCE=.\src\Common\freeglut_callbacks.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_cursor.c
+SOURCE=.\src\Common\freeglut_cursor.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_display.c
+SOURCE=.\src\Common\freeglut_display.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_ext.c
+SOURCE=.\src\Common\freeglut_ext.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_font.c
+SOURCE=.\src\Common\freeglut_font.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_font_data.c
+SOURCE=.\src\Common\freeglut_font_data.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_gamemode.c
+SOURCE=.\src\Common\freeglut_gamemode.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_geometry.c
+SOURCE=.\src\Common\freeglut_geometry.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_glutfont_definitions.c
+SOURCE=.\src\Common\freeglut_glutfont_definitions.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_init.c
+SOURCE=.\src\Common\freeglut_init.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_input_devices.c
+SOURCE=.\src\Common\freeglut_input_devices.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_joystick.c
+SOURCE=.\src\Common\freeglut_joystick.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_main.c
+SOURCE=.\src\Common\freeglut_main.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_menu.c
+SOURCE=.\src\Common\freeglut_menu.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_misc.c
+SOURCE=.\src\Common\freeglut_misc.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_overlay.c
+SOURCE=.\src\Common\freeglut_overlay.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_spaceball.c
+SOURCE=.\src\Common\freeglut_spaceball.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_state.c
+SOURCE=.\src\Common\freeglut_state.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_stroke_mono_roman.c
+SOURCE=.\src\Common\freeglut_stroke_mono_roman.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_stroke_roman.c
+SOURCE=.\src\Common\freeglut_stroke_roman.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_structure.c
+SOURCE=.\src\Common\freeglut_structure.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_teapot.c
+SOURCE=.\src\Common\freeglut_teapot.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_videoresize.c
+SOURCE=.\src\Common\freeglut_videoresize.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_window.c
+SOURCE=.\src\Common\freeglut_window.c
 # End Source File
 # End Group
 # Begin Group "Header Files"
@@ -193,7 +193,7 @@ SOURCE=.\include\GL\freeglut_ext.h
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_internal.h
+SOURCE=.\src\Common\freeglut_internal.h
 # End Source File
 # Begin Source File
 
@@ -201,7 +201,7 @@ SOURCE=.\include\GL\freeglut_std.h
 # End Source File
 # Begin Source File
 
-SOURCE=.\src\freeglut_teapot_data.h
+SOURCE=.\src\Common\freeglut_teapot_data.h
 # End Source File
 # Begin Source File
 
index 5cd58aa..a0dc06a 100644 (file)
@@ -313,7 +313,7 @@ LIB32_OBJS= \
 \r
 \r
 !IF "$(CFG)" == "freeglut_static - Win32 Release" || "$(CFG)" == "freeglut_static - Win32 Debug"\r
-SOURCE=.\src\freeglut_callbacks.c\r
+SOURCE=.\src\Common\freeglut_callbacks.c\r
 \r
 !IF  "$(CFG)" == "freeglut_static - Win32 Release"\r
 \r
@@ -331,7 +331,7 @@ SOURCE=.\src\freeglut_callbacks.c
 \r
 !ENDIF \r
 \r
-SOURCE=.\src\freeglut_cursor.c\r
+SOURCE=.\src\Common\freeglut_cursor.c\r
 \r
 !IF  "$(CFG)" == "freeglut_static - Win32 Release"\r
 \r
@@ -349,7 +349,7 @@ SOURCE=.\src\freeglut_cursor.c
 \r
 !ENDIF \r
 \r
-SOURCE=.\src\freeglut_display.c\r
+SOURCE=.\src\Common\freeglut_display.c\r
 \r
 !IF  "$(CFG)" == "freeglut_static - Win32 Release"\r
 \r
@@ -367,7 +367,7 @@ SOURCE=.\src\freeglut_display.c
 \r
 !ENDIF \r
 \r
-SOURCE=.\src\freeglut_ext.c\r
+SOURCE=.\src\Common\freeglut_ext.c\r
 \r
 !IF  "$(CFG)" == "freeglut_static - Win32 Release"\r
 \r
@@ -385,7 +385,7 @@ SOURCE=.\src\freeglut_ext.c
 \r
 !ENDIF \r
 \r
-SOURCE=.\src\freeglut_font.c\r
+SOURCE=.\src\Common\freeglut_font.c\r
 \r
 !IF  "$(CFG)" == "freeglut_static - Win32 Release"\r
 \r
@@ -403,7 +403,7 @@ SOURCE=.\src\freeglut_font.c
 \r
 !ENDIF \r
 \r
-SOURCE=.\src\freeglut_font_data.c\r
+SOURCE=.\src\Common\freeglut_font_data.c\r
 \r
 !IF  "$(CFG)" == "freeglut_static - Win32 Release"\r
 \r
@@ -421,7 +421,7 @@ SOURCE=.\src\freeglut_font_data.c
 \r
 !ENDIF \r
 \r
-SOURCE=.\src\freeglut_gamemode.c\r
+SOURCE=.\src\Common\freeglut_gamemode.c\r
 \r
 !IF  "$(CFG)" == "freeglut_static - Win32 Release"\r
 \r
@@ -439,7 +439,7 @@ SOURCE=.\src\freeglut_gamemode.c
 \r
 !ENDIF \r
 \r
-SOURCE=.\src\freeglut_geometry.c\r
+SOURCE=.\src\Common\freeglut_geometry.c\r
 \r
 !IF  "$(CFG)" == "freeglut_static - Win32 Release"\r
 \r
@@ -457,7 +457,7 @@ SOURCE=.\src\freeglut_geometry.c
 \r
 !ENDIF \r
 \r
-SOURCE=.\src\freeglut_glutfont_definitions.c\r
+SOURCE=.\src\Common\freeglut_glutfont_definitions.c\r
 \r
 !IF  "$(CFG)" == "freeglut_static - Win32 Release"\r
 \r
@@ -475,7 +475,7 @@ SOURCE=.\src\freeglut_glutfont_definitions.c
 \r
 !ENDIF \r
 \r
-SOURCE=.\src\freeglut_init.c\r
+SOURCE=.\src\Common\freeglut_init.c\r
 \r
 !IF  "$(CFG)" == "freeglut_static - Win32 Release"\r
 \r
@@ -493,7 +493,7 @@ SOURCE=.\src\freeglut_init.c
 \r
 !ENDIF \r
 \r
-SOURCE=.\src\freeglut_input_devices.c\r
+SOURCE=.\src\Common\freeglut_input_devices.c\r
 \r
 !IF  "$(CFG)" == "freeglut_static - Win32 Release"\r
 \r
@@ -511,7 +511,7 @@ SOURCE=.\src\freeglut_input_devices.c
 \r
 !ENDIF \r
 \r
-SOURCE=.\src\freeglut_joystick.c\r
+SOURCE=.\src\Common\freeglut_joystick.c\r
 \r
 !IF  "$(CFG)" == "freeglut_static - Win32 Release"\r
 \r
@@ -529,7 +529,7 @@ SOURCE=.\src\freeglut_joystick.c
 \r
 !ENDIF \r
 \r
-SOURCE=.\src\freeglut_main.c\r
+SOURCE=.\src\Common\freeglut_main.c\r
 \r
 !IF  "$(CFG)" == "freeglut_static - Win32 Release"\r
 \r
@@ -547,7 +547,7 @@ SOURCE=.\src\freeglut_main.c
 \r
 !ENDIF \r
 \r
-SOURCE=.\src\freeglut_menu.c\r
+SOURCE=.\src\Common\freeglut_menu.c\r
 \r
 !IF  "$(CFG)" == "freeglut_static - Win32 Release"\r
 \r
@@ -565,7 +565,7 @@ SOURCE=.\src\freeglut_menu.c
 \r
 !ENDIF \r
 \r
-SOURCE=.\src\freeglut_misc.c\r
+SOURCE=.\src\Common\freeglut_misc.c\r
 \r
 !IF  "$(CFG)" == "freeglut_static - Win32 Release"\r
 \r
@@ -583,7 +583,7 @@ SOURCE=.\src\freeglut_misc.c
 \r
 !ENDIF \r
 \r
-SOURCE=.\src\freeglut_overlay.c\r
+SOURCE=.\src\Common\freeglut_overlay.c\r
 \r
 !IF  "$(CFG)" == "freeglut_static - Win32 Release"\r
 \r
@@ -601,7 +601,7 @@ SOURCE=.\src\freeglut_overlay.c
 \r
 !ENDIF \r
 \r
-SOURCE=.\src\freeglut_state.c\r
+SOURCE=.\src\Common\freeglut_state.c\r
 \r
 !IF  "$(CFG)" == "freeglut_static - Win32 Release"\r
 \r
@@ -619,7 +619,7 @@ SOURCE=.\src\freeglut_state.c
 \r
 !ENDIF \r
 \r
-SOURCE=.\src\freeglut_stroke_mono_roman.c\r
+SOURCE=.\src\Common\freeglut_stroke_mono_roman.c\r
 \r
 !IF  "$(CFG)" == "freeglut_static - Win32 Release"\r
 \r
@@ -637,7 +637,7 @@ SOURCE=.\src\freeglut_stroke_mono_roman.c
 \r
 !ENDIF \r
 \r
-SOURCE=.\src\freeglut_stroke_roman.c\r
+SOURCE=.\src\Common\freeglut_stroke_roman.c\r
 \r
 !IF  "$(CFG)" == "freeglut_static - Win32 Release"\r
 \r
@@ -655,7 +655,7 @@ SOURCE=.\src\freeglut_stroke_roman.c
 \r
 !ENDIF \r
 \r
-SOURCE=.\src\freeglut_structure.c\r
+SOURCE=.\src\Common\freeglut_structure.c\r
 \r
 !IF  "$(CFG)" == "freeglut_static - Win32 Release"\r
 \r
@@ -673,7 +673,7 @@ SOURCE=.\src\freeglut_structure.c
 \r
 !ENDIF \r
 \r
-SOURCE=.\src\freeglut_teapot.c\r
+SOURCE=.\src\Common\freeglut_teapot.c\r
 \r
 !IF  "$(CFG)" == "freeglut_static - Win32 Release"\r
 \r
@@ -691,7 +691,7 @@ SOURCE=.\src\freeglut_teapot.c
 \r
 !ENDIF \r
 \r
-SOURCE=.\src\freeglut_videoresize.c\r
+SOURCE=.\src\Common\freeglut_videoresize.c\r
 \r
 !IF  "$(CFG)" == "freeglut_static - Win32 Release"\r
 \r
@@ -709,7 +709,7 @@ SOURCE=.\src\freeglut_videoresize.c
 \r
 !ENDIF \r
 \r
-SOURCE=.\src\freeglut_window.c\r
+SOURCE=.\src\Common\freeglut_window.c\r
 \r
 !IF  "$(CFG)" == "freeglut_static - Win32 Release"\r
 \r
diff --git a/src/Common/freeglut_callbacks.c b/src/Common/freeglut_callbacks.c
new file mode 100644 (file)
index 0000000..d536326
--- /dev/null
@@ -0,0 +1,412 @@
+/*\r
+ * freeglut_callbacks.c\r
+ *\r
+ * The callbacks setting methods.\r
+ *\r
+ * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.\r
+ * Written by Pawel W. Olszta, <olszta@sourceforge.net>\r
+ * Creation date: Fri Dec 3 1999\r
+ *\r
+ * Permission is hereby granted, free of charge, to any person obtaining a\r
+ * copy of this software and associated documentation files (the "Software"),\r
+ * to deal in the Software without restriction, including without limitation\r
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
+ * and/or sell copies of the Software, and to permit persons to whom the\r
+ * Software is furnished to do so, subject to the following conditions:\r
+ *\r
+ * The above copyright notice and this permission notice shall be included\r
+ * in all copies or substantial portions of the Software.\r
+ *\r
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL\r
+ * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
+ */\r
+\r
+#include <GL/freeglut.h>\r
+#include "freeglut_internal.h"\r
+\r
+/* -- INTERFACE FUNCTIONS -------------------------------------------------- */\r
+\r
+/*\r
+ * All of the callbacks setting methods can be generalized to this:\r
+ */\r
+#define SET_CALLBACK(a)                                         \\r
+do                                                              \\r
+{                                                               \\r
+    if( fgStructure.CurrentWindow == NULL )                     \\r
+        return;                                                 \\r
+    SET_WCB( ( *( fgStructure.CurrentWindow ) ), a, callback ); \\r
+} while( 0 )\r
+\r
+/*\r
+ * Sets the Display callback for the current window\r
+ */\r
+void FGAPIENTRY glutDisplayFunc( void (* callback)( void ) )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutDisplayFunc" );\r
+    if( !callback )\r
+        fgError( "Fatal error in program.  NULL display callback not "\r
+                 "permitted in GLUT 3.0+ or freeglut 2.0.1+" );\r
+    SET_CALLBACK( Display );\r
+}\r
+\r
+/*\r
+ * Sets the Reshape callback for the current window\r
+ */\r
+void FGAPIENTRY glutReshapeFunc( void (* callback)( int, int ) )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutReshapeFunc" );\r
+    SET_CALLBACK( Reshape );\r
+}\r
+\r
+/*\r
+ * Sets the Keyboard callback for the current window\r
+ */\r
+void FGAPIENTRY glutKeyboardFunc( void (* callback)\r
+                                  ( unsigned char, int, int ) )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutKeyboardFunc" );\r
+    SET_CALLBACK( Keyboard );\r
+}\r
+\r
+/*\r
+ * Sets the Special callback for the current window\r
+ */\r
+void FGAPIENTRY glutSpecialFunc( void (* callback)( int, int, int ) )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSpecialFunc" );\r
+    SET_CALLBACK( Special );\r
+}\r
+\r
+/*\r
+ * Sets the global idle callback\r
+ */\r
+void FGAPIENTRY glutIdleFunc( void (* callback)( void ) )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutIdleFunc" );\r
+    fgState.IdleCallback = callback;\r
+}\r
+\r
+/*\r
+ * Sets the Timer callback for the current window\r
+ */\r
+void FGAPIENTRY glutTimerFunc( unsigned int timeOut, void (* callback)( int ),\r
+                               int timerID )\r
+{\r
+    SFG_Timer *timer, *node;\r
+\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutTimerFunc" );\r
+\r
+    if( (timer = fgState.FreeTimers.Last) )\r
+    {\r
+        fgListRemove( &fgState.FreeTimers, &timer->Node );\r
+    }\r
+    else\r
+    {\r
+        if( ! (timer = malloc(sizeof(SFG_Timer))) )\r
+            fgError( "Fatal error: "\r
+                     "Memory allocation failure in glutTimerFunc()" );\r
+    }\r
+\r
+    timer->Callback  = callback;\r
+    timer->ID        = timerID;\r
+    timer->TriggerTime = fgElapsedTime() + timeOut;\r
+\r
+    for( node = fgState.Timers.First; node; node = node->Node.Next )\r
+    {\r
+        if( node->TriggerTime > timer->TriggerTime )\r
+            break;\r
+    }\r
+\r
+    fgListInsert( &fgState.Timers, &node->Node, &timer->Node );\r
+}\r
+\r
+/*\r
+ * Sets the Visibility callback for the current window.\r
+ */\r
+static void fghVisibility( int status )\r
+{\r
+    int glut_status = GLUT_VISIBLE;\r
+\r
+    FREEGLUT_INTERNAL_ERROR_EXIT_IF_NOT_INITIALISED ( "Visibility Callback" );\r
+    freeglut_return_if_fail( fgStructure.CurrentWindow );\r
+\r
+    if( ( GLUT_HIDDEN == status )  || ( GLUT_FULLY_COVERED == status ) )\r
+        glut_status = GLUT_NOT_VISIBLE;\r
+    INVOKE_WCB( *( fgStructure.CurrentWindow ), Visibility, ( glut_status ) );\r
+}\r
+\r
+void FGAPIENTRY glutVisibilityFunc( void (* callback)( int ) )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutVisibilityFunc" );\r
+    SET_CALLBACK( Visibility );\r
+\r
+    if( callback )\r
+        glutWindowStatusFunc( fghVisibility );\r
+    else\r
+        glutWindowStatusFunc( NULL );\r
+}\r
+\r
+/*\r
+ * Sets the keyboard key release callback for the current window\r
+ */\r
+void FGAPIENTRY glutKeyboardUpFunc( void (* callback)\r
+                                    ( unsigned char, int, int ) )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutKeyboardUpFunc" );\r
+    SET_CALLBACK( KeyboardUp );\r
+}\r
+\r
+/*\r
+ * Sets the special key release callback for the current window\r
+ */\r
+void FGAPIENTRY glutSpecialUpFunc( void (* callback)( int, int, int ) )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSpecialUpFunc" );\r
+    SET_CALLBACK( SpecialUp );\r
+}\r
+\r
+/*\r
+ * Sets the joystick callback and polling rate for the current window\r
+ */\r
+void FGAPIENTRY glutJoystickFunc( void (* callback)\r
+                                  ( unsigned int, int, int, int ),\r
+                                  int pollInterval )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutJoystickFunc" );\r
+    fgInitialiseJoysticks ();\r
+\r
+    if ( ( ( fgStructure.CurrentWindow->State.JoystickPollRate < 0 ) ||\r
+           !FETCH_WCB(*fgStructure.CurrentWindow,Joystick) ) &&  /* Joystick callback was disabled */\r
+         ( callback && ( pollInterval >= 0 ) ) )               /* but is now enabled */\r
+        ++fgState.NumActiveJoysticks;\r
+    else if ( ( ( fgStructure.CurrentWindow->State.JoystickPollRate >= 0 ) &&\r
+                FETCH_WCB(*fgStructure.CurrentWindow,Joystick) ) &&  /* Joystick callback was enabled */\r
+              ( !callback || ( pollInterval < 0 ) ) )              /* but is now disabled */\r
+        --fgState.NumActiveJoysticks;\r
+\r
+    SET_CALLBACK( Joystick );\r
+    fgStructure.CurrentWindow->State.JoystickPollRate = pollInterval;\r
+\r
+    fgStructure.CurrentWindow->State.JoystickLastPoll =\r
+        fgElapsedTime() - fgStructure.CurrentWindow->State.JoystickPollRate;\r
+\r
+    if( fgStructure.CurrentWindow->State.JoystickLastPoll < 0 )\r
+        fgStructure.CurrentWindow->State.JoystickLastPoll = 0;\r
+}\r
+\r
+/*\r
+ * Sets the mouse callback for the current window\r
+ */\r
+void FGAPIENTRY glutMouseFunc( void (* callback)( int, int, int, int ) )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutMouseFunc" );\r
+    SET_CALLBACK( Mouse );\r
+}\r
+\r
+/*\r
+ * Sets the mouse wheel callback for the current window\r
+ */\r
+void FGAPIENTRY glutMouseWheelFunc( void (* callback)( int, int, int, int ) )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutMouseWheelFunc" );\r
+    SET_CALLBACK( MouseWheel );\r
+}\r
+\r
+/*\r
+ * Sets the mouse motion callback for the current window (one or more buttons\r
+ * are pressed)\r
+ */\r
+void FGAPIENTRY glutMotionFunc( void (* callback)( int, int ) )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutMotionFunc" );\r
+    SET_CALLBACK( Motion );\r
+}\r
+\r
+/*\r
+ * Sets the passive mouse motion callback for the current window (no mouse\r
+ * buttons are pressed)\r
+ */\r
+void FGAPIENTRY glutPassiveMotionFunc( void (* callback)( int, int ) )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutPassiveMotionFunc" );\r
+    SET_CALLBACK( Passive );\r
+}\r
+\r
+/*\r
+ * Window mouse entry/leave callback\r
+ */\r
+void FGAPIENTRY glutEntryFunc( void (* callback)( int ) )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutEntryFunc" );\r
+    SET_CALLBACK( Entry );\r
+}\r
+\r
+/*\r
+ * Window destruction callbacks\r
+ */\r
+void FGAPIENTRY glutCloseFunc( void (* callback)( void ) )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutCloseFunc" );\r
+    SET_CALLBACK( Destroy );\r
+}\r
+\r
+void FGAPIENTRY glutWMCloseFunc( void (* callback)( void ) )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutWMCloseFunc" );\r
+    glutCloseFunc( callback );\r
+}\r
+\r
+/* A. Donev: Destruction callback for menus */\r
+void FGAPIENTRY glutMenuDestroyFunc( void (* callback)( void ) )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutMenuDestroyFunc" );\r
+    if( fgStructure.CurrentMenu )\r
+        fgStructure.CurrentMenu->Destroy = callback;\r
+}\r
+\r
+/*\r
+ * Deprecated version of glutMenuStatusFunc callback setting method\r
+ */\r
+void FGAPIENTRY glutMenuStateFunc( void (* callback)( int ) )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutMenuStateFunc" );\r
+    fgState.MenuStateCallback = callback;\r
+}\r
+\r
+/*\r
+ * Sets the global menu status callback for the current window\r
+ */\r
+void FGAPIENTRY glutMenuStatusFunc( void (* callback)( int, int, int ) )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutMenuStatusFunc" );\r
+    fgState.MenuStatusCallback = callback;\r
+}\r
+\r
+/*\r
+ * Sets the overlay display callback for the current window\r
+ */\r
+void FGAPIENTRY glutOverlayDisplayFunc( void (* callback)( void ) )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutOverlayDisplayFunc" );\r
+    SET_CALLBACK( OverlayDisplay );\r
+}\r
+\r
+/*\r
+ * Sets the window status callback for the current window\r
+ */\r
+void FGAPIENTRY glutWindowStatusFunc( void (* callback)( int ) )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutWindowStatusFunc" );\r
+    SET_CALLBACK( WindowStatus );\r
+}\r
+\r
+/*\r
+ * Sets the spaceball motion callback for the current window\r
+ */\r
+void FGAPIENTRY glutSpaceballMotionFunc( void (* callback)( int, int, int ) )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSpaceballMotionFunc" );\r
+    fgInitialiseSpaceball();\r
+\r
+    SET_CALLBACK( SpaceMotion );\r
+}\r
+\r
+/*\r
+ * Sets the spaceball rotate callback for the current window\r
+ */\r
+void FGAPIENTRY glutSpaceballRotateFunc( void (* callback)( int, int, int ) )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSpaceballRotateFunc" );\r
+    fgInitialiseSpaceball();\r
+\r
+    SET_CALLBACK( SpaceRotation );\r
+}\r
+\r
+/*\r
+ * Sets the spaceball button callback for the current window\r
+ */\r
+void FGAPIENTRY glutSpaceballButtonFunc( void (* callback)( int, int ) )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSpaceballButtonFunc" );\r
+    fgInitialiseSpaceball();\r
+\r
+    SET_CALLBACK( SpaceButton );\r
+}\r
+\r
+/*\r
+ * Sets the button box callback for the current window\r
+ */\r
+void FGAPIENTRY glutButtonBoxFunc( void (* callback)( int, int ) )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutButtonBoxFunc" );\r
+    SET_CALLBACK( ButtonBox );\r
+}\r
+\r
+/*\r
+ * Sets the dials box callback for the current window\r
+ */\r
+void FGAPIENTRY glutDialsFunc( void (* callback)( int, int ) )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutDialsFunc" );\r
+    SET_CALLBACK( Dials );\r
+}\r
+\r
+/*\r
+ * Sets the tablet motion callback for the current window\r
+ */\r
+void FGAPIENTRY glutTabletMotionFunc( void (* callback)( int, int ) )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutTabletMotionFunc" );\r
+    SET_CALLBACK( TabletMotion );\r
+}\r
+\r
+/*\r
+ * Sets the tablet buttons callback for the current window\r
+ */\r
+void FGAPIENTRY glutTabletButtonFunc( void (* callback)( int, int, int, int ) )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutTabletButtonFunc" );\r
+    SET_CALLBACK( TabletButton );\r
+}\r
+\r
+/*\r
+ * Sets the multi-pointer entry callback for the current window\r
+ */\r
+void FGAPIENTRY glutMultiEntryFunc( void (* callback)(int, int ) )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutMultiEntryFunc" );\r
+    SET_CALLBACK( MultiEntry );\r
+}\r
+\r
+/*\r
+ * Sets the multi-pointer button callback for the current window\r
+ */\r
+void FGAPIENTRY glutMultiButtonFunc( void (* callback)(int, int, int, int, int ) )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutMultiButtonFunc" );\r
+    SET_CALLBACK( MultiButton );\r
+}\r
+\r
+/*\r
+ * Sets the multi-pointer motion callback for the current window\r
+ */\r
+void FGAPIENTRY glutMultiMotionFunc( void (* callback)(int, int, int ) )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutMultiMotionFunc" );\r
+    SET_CALLBACK( MultiMotion );\r
+}\r
+\r
+/*\r
+ * Sets the multi-pointer passive motion callback for the current window\r
+ */\r
+void FGAPIENTRY glutMultiPassiveFunc( void (* callback)(int, int, int ) )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutMultiPassiveFunc" );\r
+    SET_CALLBACK( MultiPassive );\r
+}\r
+\r
+/*** END OF FILE ***/\r
diff --git a/src/Common/freeglut_cursor.c b/src/Common/freeglut_cursor.c
new file mode 100644 (file)
index 0000000..e467353
--- /dev/null
@@ -0,0 +1,282 @@
+/*\r
+ * freeglut_cursor.c\r
+ *\r
+ * The mouse cursor related stuff.\r
+ *\r
+ * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.\r
+ * Written by Pawel W. Olszta, <olszta@sourceforge.net>\r
+ * Creation date: Thu Dec 16 1999\r
+ *\r
+ * Permission is hereby granted, free of charge, to any person obtaining a\r
+ * copy of this software and associated documentation files (the "Software"),\r
+ * to deal in the Software without restriction, including without limitation\r
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
+ * and/or sell copies of the Software, and to permit persons to whom the\r
+ * Software is furnished to do so, subject to the following conditions:\r
+ *\r
+ * The above copyright notice and this permission notice shall be included\r
+ * in all copies or substantial portions of the Software.\r
+ *\r
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL\r
+ * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
+ */\r
+\r
+#include <GL/freeglut.h>\r
+#include "freeglut_internal.h"\r
+\r
+/*\r
+ * TODO BEFORE THE STABLE RELEASE:\r
+ *  glutSetCursor()     -- Win32 mappings are incomplete.\r
+ *\r
+ * It would be good to use custom mouse cursor shapes, and introduce\r
+ * an option to display them using glBitmap() and/or texture mapping,\r
+ * apart from the windowing system version.\r
+ */\r
+\r
+/* -- PRIVATE FUNCTIONS --------------------------------------------------- */\r
+\r
+#if TARGET_HOST_POSIX_X11 || TARGET_HOST_MAC_OSX || TARGET_HOST_SOLARIS\r
+  #include <X11/cursorfont.h>\r
+\r
+/*\r
+ * A factory method for an empty cursor\r
+ */\r
+static Cursor getEmptyCursor( void )\r
+{\r
+    static Cursor cursorNone = None;\r
+    if( cursorNone == None ) {\r
+        char cursorNoneBits[ 32 ];\r
+        XColor dontCare;\r
+        Pixmap cursorNonePixmap;\r
+        memset( cursorNoneBits, 0, sizeof( cursorNoneBits ) );\r
+        memset( &dontCare, 0, sizeof( dontCare ) );\r
+        cursorNonePixmap = XCreateBitmapFromData ( fgDisplay.Display,\r
+                                                   fgDisplay.RootWindow,\r
+                                                   cursorNoneBits, 16, 16 );\r
+        if( cursorNonePixmap != None ) {\r
+            cursorNone = XCreatePixmapCursor( fgDisplay.Display,\r
+                                              cursorNonePixmap, cursorNonePixmap,\r
+                                              &dontCare, &dontCare, 0, 0 );\r
+            XFreePixmap( fgDisplay.Display, cursorNonePixmap );\r
+        }\r
+    }\r
+    return cursorNone;\r
+}\r
+\r
+typedef struct tag_cursorCacheEntry cursorCacheEntry;\r
+struct tag_cursorCacheEntry {\r
+    unsigned int cursorShape;    /* an XC_foo value */\r
+    Cursor cachedCursor;         /* None if the corresponding cursor has\r
+                                    not been created yet */\r
+};\r
+\r
+/*\r
+ * Note: The arrangement of the table below depends on the fact that\r
+ * the "normal" GLUT_CURSOR_* values start a 0 and are consecutive.\r
+ */ \r
+static cursorCacheEntry cursorCache[] = {\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
+\r
+static void fghSetCursor ( SFG_Window *window, int cursorID )\r
+{\r
+    Cursor cursor;\r
+    /*\r
+     * XXX FULL_CROSSHAIR demotes to plain CROSSHAIR. Old GLUT allows\r
+     * for this, but if there is a system that easily supports a full-\r
+     * window (or full-screen) crosshair, we might consider it.\r
+     */\r
+    int cursorIDToUse =\r
+        ( cursorID == GLUT_CURSOR_FULL_CROSSHAIR ) ? GLUT_CURSOR_CROSSHAIR : cursorID;\r
+\r
+    if( ( cursorIDToUse >= 0 ) &&\r
+        ( cursorIDToUse < sizeof( cursorCache ) / sizeof( cursorCache[0] ) ) ) {\r
+        cursorCacheEntry *entry = &cursorCache[ cursorIDToUse ];\r
+        if( entry->cachedCursor == None ) {\r
+            entry->cachedCursor =\r
+                XCreateFontCursor( fgDisplay.Display, entry->cursorShape );\r
+        }\r
+        cursor = entry->cachedCursor;\r
+    } else {\r
+        switch( cursorIDToUse )\r
+        {\r
+        case GLUT_CURSOR_NONE:\r
+            cursor = getEmptyCursor( );\r
+            break;\r
+\r
+        case GLUT_CURSOR_INHERIT:\r
+            cursor = None;\r
+            break;\r
+\r
+        default:\r
+            fgError( "Unknown cursor type: %d", cursorIDToUse );\r
+            return;\r
+        }\r
+    }\r
+\r
+    if ( cursorIDToUse == GLUT_CURSOR_INHERIT ) {\r
+        XUndefineCursor( fgDisplay.Display, window->Window.Handle );\r
+    } else if ( cursor != None ) {\r
+        XDefineCursor( fgDisplay.Display, window->Window.Handle, cursor );\r
+    } else if ( cursorIDToUse != GLUT_CURSOR_NONE ) {\r
+        fgError( "Failed to create cursor" );\r
+    }\r
+}\r
+\r
+\r
+static void fghWarpPointer ( int x, int y )\r
+{\r
+    XWarpPointer(\r
+        fgDisplay.Display,\r
+        None,\r
+        fgStructure.CurrentWindow->Window.Handle,\r
+        0, 0, 0, 0,\r
+        x, y\r
+    );\r
+    /* Make the warp visible immediately. */\r
+    XFlush( fgDisplay.Display );\r
+}\r
+#endif\r
+\r
+\r
+#if TARGET_HOST_MS_WINDOWS\r
+static void fghSetCursor ( SFG_Window *window, int cursorID )\r
+{\r
+    /*\r
+     * Joe Krahn is re-writing the following code.\r
+     */\r
+    /* Set the cursor AND change it for this window class. */\r
+#if !defined(__MINGW64__) && _MSC_VER <= 1200\r
+#       define MAP_CURSOR(a,b)                                   \\r
+        case a:                                                  \\r
+            SetCursor( LoadCursor( NULL, b ) );                  \\r
+            SetClassLong( window->Window.Handle,                 \\r
+                          GCL_HCURSOR,                           \\r
+                          ( LONG )LoadCursor( NULL, b ) );       \\r
+        break;\r
+    /* Nuke the cursor AND change it for this window class. */\r
+#       define ZAP_CURSOR(a,b)                                   \\r
+        case a:                                                  \\r
+            SetCursor( NULL );                                   \\r
+            SetClassLong( window->Window.Handle,                 \\r
+                          GCL_HCURSOR, ( LONG )NULL );           \\r
+        break;\r
+#else\r
+#       define MAP_CURSOR(a,b)                                   \\r
+        case a:                                                  \\r
+            SetCursor( LoadCursor( NULL, b ) );                  \\r
+            SetClassLongPtr( window->Window.Handle,              \\r
+                          GCLP_HCURSOR,                          \\r
+                          ( LONG )( LONG_PTR )LoadCursor( NULL, b ) );       \\r
+        break;\r
+    /* Nuke the cursor AND change it for this window class. */\r
+#       define ZAP_CURSOR(a,b)                                   \\r
+        case a:                                                  \\r
+            SetCursor( NULL );                                   \\r
+            SetClassLongPtr( window->Window.Handle,              \\r
+                          GCLP_HCURSOR, ( LONG )( LONG_PTR )NULL );          \\r
+        break;\r
+#endif\r
+\r
+    switch( cursorID )\r
+    {\r
+        MAP_CURSOR( GLUT_CURSOR_RIGHT_ARROW,         IDC_ARROW     );\r
+        MAP_CURSOR( GLUT_CURSOR_LEFT_ARROW,          IDC_ARROW     );\r
+        MAP_CURSOR( GLUT_CURSOR_INFO,                IDC_HELP      );\r
+        MAP_CURSOR( GLUT_CURSOR_DESTROY,             IDC_CROSS     );\r
+        MAP_CURSOR( GLUT_CURSOR_HELP,                IDC_HELP      );\r
+        MAP_CURSOR( GLUT_CURSOR_CYCLE,               IDC_SIZEALL   );\r
+        MAP_CURSOR( GLUT_CURSOR_SPRAY,               IDC_CROSS     );\r
+        MAP_CURSOR( GLUT_CURSOR_WAIT,                IDC_WAIT      );\r
+        MAP_CURSOR( GLUT_CURSOR_TEXT,                IDC_IBEAM     );\r
+        MAP_CURSOR( GLUT_CURSOR_CROSSHAIR,           IDC_CROSS     );\r
+        MAP_CURSOR( GLUT_CURSOR_UP_DOWN,             IDC_SIZENS    );\r
+        MAP_CURSOR( GLUT_CURSOR_LEFT_RIGHT,          IDC_SIZEWE    );\r
+        MAP_CURSOR( GLUT_CURSOR_TOP_SIDE,            IDC_ARROW     ); /* XXX ToDo */\r
+        MAP_CURSOR( GLUT_CURSOR_BOTTOM_SIDE,         IDC_ARROW     ); /* XXX ToDo */\r
+        MAP_CURSOR( GLUT_CURSOR_LEFT_SIDE,           IDC_ARROW     ); /* XXX ToDo */\r
+        MAP_CURSOR( GLUT_CURSOR_RIGHT_SIDE,          IDC_ARROW     ); /* XXX ToDo */\r
+        MAP_CURSOR( GLUT_CURSOR_TOP_LEFT_CORNER,     IDC_SIZENWSE  );\r
+        MAP_CURSOR( GLUT_CURSOR_TOP_RIGHT_CORNER,    IDC_SIZENESW  );\r
+        MAP_CURSOR( GLUT_CURSOR_BOTTOM_RIGHT_CORNER, IDC_SIZENWSE  );\r
+        MAP_CURSOR( GLUT_CURSOR_BOTTOM_LEFT_CORNER,  IDC_SIZENESW  );\r
+        MAP_CURSOR( GLUT_CURSOR_INHERIT,             IDC_ARROW     ); /* XXX ToDo */\r
+        ZAP_CURSOR( GLUT_CURSOR_NONE,                NULL          );\r
+        MAP_CURSOR( GLUT_CURSOR_FULL_CROSSHAIR,      IDC_CROSS     ); /* XXX ToDo */\r
+\r
+    default:\r
+        fgError( "Unknown cursor type: %d", cursorID );\r
+        break;\r
+    }\r
+}\r
+\r
+\r
+static void fghWarpPointer ( int x, int y )\r
+{\r
+    POINT coords;\r
+    coords.x = x;\r
+    coords.y = y;\r
+\r
+    /* ClientToScreen() translates {coords} for us. */\r
+    ClientToScreen( fgStructure.CurrentWindow->Window.Handle, &coords );\r
+    SetCursorPos( coords.x, coords.y );\r
+}\r
+#endif\r
+\r
+\r
+/* -- INTERNAL FUNCTIONS ---------------------------------------------------- */\r
+void fgSetCursor ( SFG_Window *window, int cursorID )\r
+{\r
+    fghSetCursor ( window, cursorID );\r
+}\r
+\r
+\r
+/* -- INTERFACE FUNCTIONS -------------------------------------------------- */\r
+\r
+/*\r
+ * Set the cursor image to be used for the current window\r
+ */\r
+void FGAPIENTRY glutSetCursor( int cursorID )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSetCursor" );\r
+    FREEGLUT_EXIT_IF_NO_WINDOW ( "glutSetCursor" );\r
+\r
+    fghSetCursor ( fgStructure.CurrentWindow, cursorID );\r
+    fgStructure.CurrentWindow->State.Cursor = cursorID;\r
+}\r
+\r
+/*\r
+ * Moves the mouse pointer to given window coordinates\r
+ */\r
+void FGAPIENTRY glutWarpPointer( int x, int y )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutWarpPointer" );\r
+    FREEGLUT_EXIT_IF_NO_WINDOW ( "glutWarpPointer" );\r
+\r
+    fghWarpPointer ( x, y );\r
+}\r
+\r
+/*** END OF FILE ***/\r
diff --git a/src/Common/freeglut_display.c b/src/Common/freeglut_display.c
new file mode 100644 (file)
index 0000000..fadd3b3
--- /dev/null
@@ -0,0 +1,103 @@
+/*\r
+ * freeglut_display.c\r
+ *\r
+ * Display message posting, context buffer swapping.\r
+ *\r
+ * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.\r
+ * Written by Pawel W. Olszta, <olszta@sourceforge.net>\r
+ * Creation date: Fri Dec 3 1999\r
+ *\r
+ * Permission is hereby granted, free of charge, to any person obtaining a\r
+ * copy of this software and associated documentation files (the "Software"),\r
+ * to deal in the Software without restriction, including without limitation\r
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
+ * and/or sell copies of the Software, and to permit persons to whom the\r
+ * Software is furnished to do so, subject to the following conditions:\r
+ *\r
+ * The above copyright notice and this permission notice shall be included\r
+ * in all copies or substantial portions of the Software.\r
+ *\r
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL\r
+ * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
+ */\r
+\r
+#include <GL/freeglut.h>\r
+#include "freeglut_internal.h"\r
+\r
+/* -- INTERFACE FUNCTIONS -------------------------------------------------- */\r
+\r
+/*\r
+ * Marks the current window to have the redisplay performed when possible...\r
+ */\r
+void FGAPIENTRY glutPostRedisplay( void )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutPostRedisplay" );\r
+    if ( ! fgStructure.CurrentWindow )\r
+       {\r
+      fgError ( " ERROR:  Function <%s> called"\r
+                " with no current window defined.", "glutPostRedisplay" ) ;\r
+       }\r
+\r
+    fgStructure.CurrentWindow->State.Redisplay = GL_TRUE;\r
+}\r
+\r
+/*\r
+ * Swaps the buffers for the current window (if any)\r
+ */\r
+void FGAPIENTRY glutSwapBuffers( void )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSwapBuffers" );\r
+    FREEGLUT_EXIT_IF_NO_WINDOW ( "glutSwapBuffers" );\r
+\r
+    /*\r
+     * "glXSwapBuffers" already performs an implicit call to "glFlush". What\r
+     * about "SwapBuffers"?\r
+     */\r
+    glFlush( );\r
+    if( ! fgStructure.CurrentWindow->Window.DoubleBuffered )\r
+        return;\r
+\r
+#if TARGET_HOST_POSIX_X11\r
+    glXSwapBuffers( fgDisplay.Display, fgStructure.CurrentWindow->Window.Handle );\r
+#elif TARGET_HOST_MS_WINDOWS\r
+    SwapBuffers( fgStructure.CurrentWindow->Window.Device );\r
+#endif\r
+\r
+    /* GLUT_FPS env var support */\r
+    if( fgState.FPSInterval )\r
+    {\r
+        GLint t = glutGet( GLUT_ELAPSED_TIME );\r
+        fgState.SwapCount++;\r
+        if( fgState.SwapTime == 0 )\r
+            fgState.SwapTime = t;\r
+        else if( t - fgState.SwapTime > fgState.FPSInterval )\r
+        {\r
+            float time = 0.001f * ( t - fgState.SwapTime );\r
+            float fps = ( float )fgState.SwapCount / time;\r
+            fprintf( stderr,\r
+                     "freeglut: %d frames in %.2f seconds = %.2f FPS\n",\r
+                     fgState.SwapCount, time, fps );\r
+            fgState.SwapTime = t;\r
+            fgState.SwapCount = 0;\r
+        }\r
+    }\r
+}\r
+\r
+/*\r
+ * Mark appropriate window to be displayed\r
+ */\r
+void FGAPIENTRY glutPostWindowRedisplay( int windowID )\r
+{\r
+    SFG_Window* window;\r
+\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutPostWindowRedisplay" );\r
+    window = fgWindowByID( windowID );\r
+    freeglut_return_if_fail( window );\r
+    window->State.Redisplay = GL_TRUE;\r
+}\r
+\r
+/*** END OF FILE ***/\r
diff --git a/src/Common/freeglut_ext.c b/src/Common/freeglut_ext.c
new file mode 100644 (file)
index 0000000..8dd1c13
--- /dev/null
@@ -0,0 +1,233 @@
+/*\r
+ * freeglut_ext.c\r
+ *\r
+ * Functions related to OpenGL extensions.\r
+ *\r
+ * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.\r
+ * Written by Pawel W. Olszta, <olszta@sourceforge.net>\r
+ * Creation date: Thu Dec 9 1999\r
+ *\r
+ * Permission is hereby granted, free of charge, to any person obtaining a\r
+ * copy of this software and associated documentation files (the "Software"),\r
+ * to deal in the Software without restriction, including without limitation\r
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
+ * and/or sell copies of the Software, and to permit persons to whom the\r
+ * Software is furnished to do so, subject to the following conditions:\r
+ *\r
+ * The above copyright notice and this permission notice shall be included\r
+ * in all copies or substantial portions of the Software.\r
+ *\r
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL\r
+ * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
+ */\r
+\r
+#define GLX_GLXEXT_PROTOTYPES\r
+#include <GL/freeglut.h>\r
+#include "freeglut_internal.h"\r
+\r
+static GLUTproc fghGetGLUTProcAddress( const char* procName )\r
+{\r
+    /* optimization: quick initial check */\r
+    if( strncmp( procName, "glut", 4 ) != 0 )\r
+        return NULL;\r
+\r
+#define CHECK_NAME(x) if( strcmp( procName, #x ) == 0) return (GLUTproc)x;\r
+    CHECK_NAME(glutInit);\r
+    CHECK_NAME(glutInitDisplayMode);\r
+    CHECK_NAME(glutInitDisplayString);\r
+    CHECK_NAME(glutInitWindowPosition);\r
+    CHECK_NAME(glutInitWindowSize);\r
+    CHECK_NAME(glutMainLoop);\r
+    CHECK_NAME(glutExit);\r
+    CHECK_NAME(glutCreateWindow);\r
+    CHECK_NAME(glutCreateSubWindow);\r
+    CHECK_NAME(glutDestroyWindow);\r
+    CHECK_NAME(glutPostRedisplay);\r
+    CHECK_NAME(glutPostWindowRedisplay);\r
+    CHECK_NAME(glutSwapBuffers);\r
+    CHECK_NAME(glutGetWindow);\r
+    CHECK_NAME(glutSetWindow);\r
+    CHECK_NAME(glutSetWindowTitle);\r
+    CHECK_NAME(glutSetIconTitle);\r
+    CHECK_NAME(glutPositionWindow);\r
+    CHECK_NAME(glutReshapeWindow);\r
+    CHECK_NAME(glutPopWindow);\r
+    CHECK_NAME(glutPushWindow);\r
+    CHECK_NAME(glutIconifyWindow);\r
+    CHECK_NAME(glutShowWindow);\r
+    CHECK_NAME(glutHideWindow);\r
+    CHECK_NAME(glutFullScreen);\r
+    CHECK_NAME(glutSetCursor);\r
+    CHECK_NAME(glutWarpPointer);\r
+    CHECK_NAME(glutEstablishOverlay);\r
+    CHECK_NAME(glutRemoveOverlay);\r
+    CHECK_NAME(glutUseLayer);\r
+    CHECK_NAME(glutPostOverlayRedisplay);\r
+    CHECK_NAME(glutPostWindowOverlayRedisplay);\r
+    CHECK_NAME(glutShowOverlay);\r
+    CHECK_NAME(glutHideOverlay);\r
+    CHECK_NAME(glutCreateMenu);\r
+    CHECK_NAME(glutDestroyMenu);\r
+    CHECK_NAME(glutGetMenu);\r
+    CHECK_NAME(glutSetMenu);\r
+    CHECK_NAME(glutAddMenuEntry);\r
+    CHECK_NAME(glutAddSubMenu);\r
+    CHECK_NAME(glutChangeToMenuEntry);\r
+    CHECK_NAME(glutChangeToSubMenu);\r
+    CHECK_NAME(glutRemoveMenuItem);\r
+    CHECK_NAME(glutAttachMenu);\r
+    CHECK_NAME(glutDetachMenu);\r
+    CHECK_NAME(glutDisplayFunc);\r
+    CHECK_NAME(glutReshapeFunc);\r
+    CHECK_NAME(glutKeyboardFunc);\r
+    CHECK_NAME(glutMouseFunc);\r
+    CHECK_NAME(glutMultiEntryFunc);\r
+    CHECK_NAME(glutMultiMotionFunc);\r
+    CHECK_NAME(glutMultiButtonFunc);\r
+    CHECK_NAME(glutMultiPassiveFunc);\r
+    CHECK_NAME(glutMotionFunc);\r
+    CHECK_NAME(glutPassiveMotionFunc);\r
+    CHECK_NAME(glutEntryFunc);\r
+    CHECK_NAME(glutVisibilityFunc);\r
+    CHECK_NAME(glutIdleFunc);\r
+    CHECK_NAME(glutTimerFunc);\r
+    CHECK_NAME(glutMenuStateFunc);\r
+    CHECK_NAME(glutSpecialFunc);\r
+    CHECK_NAME(glutSpaceballMotionFunc);\r
+    CHECK_NAME(glutSpaceballRotateFunc);\r
+    CHECK_NAME(glutSpaceballButtonFunc);\r
+    CHECK_NAME(glutButtonBoxFunc);\r
+    CHECK_NAME(glutDialsFunc);\r
+    CHECK_NAME(glutTabletMotionFunc);\r
+    CHECK_NAME(glutTabletButtonFunc);\r
+    CHECK_NAME(glutMenuStatusFunc);\r
+    CHECK_NAME(glutOverlayDisplayFunc);\r
+    CHECK_NAME(glutWindowStatusFunc);\r
+    CHECK_NAME(glutKeyboardUpFunc);\r
+    CHECK_NAME(glutSpecialUpFunc);\r
+#if !defined(_WIN32_WCE)\r
+    CHECK_NAME(glutJoystickFunc);\r
+#endif /* !defined(_WIN32_WCE) */\r
+    CHECK_NAME(glutSetColor);\r
+    CHECK_NAME(glutGetColor);\r
+    CHECK_NAME(glutCopyColormap);\r
+    CHECK_NAME(glutGet);\r
+    CHECK_NAME(glutDeviceGet);\r
+    CHECK_NAME(glutExtensionSupported);\r
+    CHECK_NAME(glutGetModifiers);\r
+    CHECK_NAME(glutLayerGet);\r
+    CHECK_NAME(glutBitmapCharacter);\r
+    CHECK_NAME(glutBitmapWidth);\r
+    CHECK_NAME(glutStrokeCharacter);\r
+    CHECK_NAME(glutStrokeWidth);\r
+    CHECK_NAME(glutBitmapLength);\r
+    CHECK_NAME(glutStrokeLength);\r
+    CHECK_NAME(glutWireSphere);\r
+    CHECK_NAME(glutSolidSphere);\r
+    CHECK_NAME(glutWireCone);\r
+    CHECK_NAME(glutSolidCone);\r
+    CHECK_NAME(glutWireCube);\r
+    CHECK_NAME(glutSolidCube);\r
+    CHECK_NAME(glutWireTorus);\r
+    CHECK_NAME(glutSolidTorus);\r
+    CHECK_NAME(glutWireDodecahedron);\r
+    CHECK_NAME(glutSolidDodecahedron);\r
+    CHECK_NAME(glutWireTeapot);\r
+    CHECK_NAME(glutSolidTeapot);\r
+    CHECK_NAME(glutWireOctahedron);\r
+    CHECK_NAME(glutSolidOctahedron);\r
+    CHECK_NAME(glutWireTetrahedron);\r
+    CHECK_NAME(glutSolidTetrahedron);\r
+    CHECK_NAME(glutWireIcosahedron);\r
+    CHECK_NAME(glutSolidIcosahedron);\r
+    CHECK_NAME(glutVideoResizeGet);\r
+    CHECK_NAME(glutSetupVideoResizing);\r
+    CHECK_NAME(glutStopVideoResizing);\r
+    CHECK_NAME(glutVideoResize);\r
+    CHECK_NAME(glutVideoPan);\r
+    CHECK_NAME(glutReportErrors);\r
+    CHECK_NAME(glutIgnoreKeyRepeat);\r
+    CHECK_NAME(glutSetKeyRepeat);\r
+#if !defined(_WIN32_WCE)\r
+    CHECK_NAME(glutForceJoystickFunc);\r
+    CHECK_NAME(glutGameModeString);\r
+    CHECK_NAME(glutEnterGameMode);\r
+    CHECK_NAME(glutLeaveGameMode);\r
+    CHECK_NAME(glutGameModeGet);\r
+#endif /* !defined(_WIN32_WCE) */\r
+    /* freeglut extensions */\r
+    CHECK_NAME(glutMainLoopEvent);\r
+    CHECK_NAME(glutLeaveMainLoop);\r
+    CHECK_NAME(glutCloseFunc);\r
+    CHECK_NAME(glutWMCloseFunc);\r
+    CHECK_NAME(glutMenuDestroyFunc);\r
+    CHECK_NAME(glutFullScreenToggle);\r
+    CHECK_NAME(glutLeaveFullScreen);\r
+    CHECK_NAME(glutSetOption);\r
+    CHECK_NAME(glutGetModeValues);\r
+    CHECK_NAME(glutSetWindowData);\r
+    CHECK_NAME(glutGetWindowData);\r
+    CHECK_NAME(glutSetMenuData);\r
+    CHECK_NAME(glutGetMenuData);\r
+    CHECK_NAME(glutBitmapHeight);\r
+    CHECK_NAME(glutStrokeHeight);\r
+    CHECK_NAME(glutBitmapString);\r
+    CHECK_NAME(glutStrokeString);\r
+    CHECK_NAME(glutWireRhombicDodecahedron);\r
+    CHECK_NAME(glutSolidRhombicDodecahedron);\r
+    CHECK_NAME(glutWireSierpinskiSponge);\r
+    CHECK_NAME(glutSolidSierpinskiSponge);\r
+    CHECK_NAME(glutWireCylinder);\r
+    CHECK_NAME(glutSolidCylinder);\r
+    CHECK_NAME(glutGetProcAddress);\r
+    CHECK_NAME(glutMouseWheelFunc);\r
+    CHECK_NAME(glutJoystickGetNumAxes);\r
+    CHECK_NAME(glutJoystickGetNumButtons);\r
+    CHECK_NAME(glutJoystickNotWorking);\r
+    CHECK_NAME(glutJoystickGetDeadBand);\r
+    CHECK_NAME(glutJoystickSetDeadBand);\r
+    CHECK_NAME(glutJoystickGetSaturation);\r
+    CHECK_NAME(glutJoystickSetSaturation);\r
+    CHECK_NAME(glutJoystickSetMinRange);\r
+    CHECK_NAME(glutJoystickSetMaxRange);\r
+    CHECK_NAME(glutJoystickSetCenter);\r
+    CHECK_NAME(glutJoystickGetMinRange);\r
+    CHECK_NAME(glutJoystickGetMaxRange);\r
+    CHECK_NAME(glutJoystickGetCenter);\r
+    CHECK_NAME(glutInitContextVersion);\r
+    CHECK_NAME(glutInitContextFlags);\r
+    CHECK_NAME(glutInitContextProfile);\r
+    CHECK_NAME(glutInitErrorFunc);\r
+    CHECK_NAME(glutInitWarningFunc);\r
+#undef CHECK_NAME\r
+\r
+    return NULL;\r
+}\r
+\r
+\r
+SFG_Proc fghGetProcAddress( const char *procName )\r
+{\r
+#if TARGET_HOST_MS_WINDOWS\r
+    return (SFG_Proc)wglGetProcAddress( ( LPCSTR )procName );\r
+#elif TARGET_HOST_POSIX_X11 && defined( GLX_ARB_get_proc_address )\r
+    return (SFG_Proc)glXGetProcAddressARB( ( const GLubyte * )procName );\r
+#else\r
+    return NULL;\r
+#endif\r
+}\r
+\r
+\r
+GLUTproc FGAPIENTRY\r
+glutGetProcAddress( const char *procName )\r
+{\r
+    GLUTproc p;\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutGetProcAddress" );\r
+\r
+    /* Try GLUT functions first, then core GL functions */\r
+    p = fghGetGLUTProcAddress( procName );\r
+    return ( p != NULL ) ? p : fghGetProcAddress( procName );\r
+}\r
diff --git a/src/Common/freeglut_font.c b/src/Common/freeglut_font.c
new file mode 100644 (file)
index 0000000..576a724
--- /dev/null
@@ -0,0 +1,384 @@
+/*\r
+ * freeglut_font.c\r
+ *\r
+ * Bitmap and stroke fonts displaying.\r
+ *\r
+ * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.\r
+ * Written by Pawel W. Olszta, <olszta@sourceforge.net>\r
+ * Creation date: Thu Dec 16 1999\r
+ *\r
+ * Permission is hereby granted, free of charge, to any person obtaining a\r
+ * copy of this software and associated documentation files (the "Software"),\r
+ * to deal in the Software without restriction, including without limitation\r
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
+ * and/or sell copies of the Software, and to permit persons to whom the\r
+ * Software is furnished to do so, subject to the following conditions:\r
+ *\r
+ * The above copyright notice and this permission notice shall be included\r
+ * in all copies or substantial portions of the Software.\r
+ *\r
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL\r
+ * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
+ */\r
+\r
+#include <GL/freeglut.h>\r
+#include "freeglut_internal.h"\r
+\r
+/*\r
+ * TODO BEFORE THE STABLE RELEASE:\r
+ *\r
+ *  Test things out ...\r
+ */\r
+\r
+/* -- IMPORT DECLARATIONS -------------------------------------------------- */\r
+\r
+/*\r
+ * These are the font faces defined in freeglut_font_data.c file:\r
+ */\r
+extern SFG_Font fgFontFixed8x13;\r
+extern SFG_Font fgFontFixed9x15;\r
+extern SFG_Font fgFontHelvetica10;\r
+extern SFG_Font fgFontHelvetica12;\r
+extern SFG_Font fgFontHelvetica18;\r
+extern SFG_Font fgFontTimesRoman10;\r
+extern SFG_Font fgFontTimesRoman24;\r
+extern SFG_StrokeFont fgStrokeRoman;\r
+extern SFG_StrokeFont fgStrokeMonoRoman;\r
+\r
+\r
+/* -- PRIVATE FUNCTIONS ---------------------------------------------------- */\r
+\r
+/*\r
+ * Matches a font ID with a SFG_Font structure pointer.\r
+ * This was changed to match the GLUT header style.\r
+ */\r
+static SFG_Font* fghFontByID( void* font )\r
+{\r
+    if( font == GLUT_BITMAP_8_BY_13        )\r
+        return &fgFontFixed8x13;\r
+    if( font == GLUT_BITMAP_9_BY_15        )\r
+        return &fgFontFixed9x15;\r
+    if( font == GLUT_BITMAP_HELVETICA_10   )\r
+        return &fgFontHelvetica10;\r
+    if( font == GLUT_BITMAP_HELVETICA_12   )\r
+        return &fgFontHelvetica12;\r
+    if( font == GLUT_BITMAP_HELVETICA_18   )\r
+        return &fgFontHelvetica18;\r
+    if( font == GLUT_BITMAP_TIMES_ROMAN_10 )\r
+        return &fgFontTimesRoman10;\r
+    if( font == GLUT_BITMAP_TIMES_ROMAN_24 )\r
+        return &fgFontTimesRoman24;\r
+\r
+    fgWarning( "font 0x%08x not found", font );\r
+    return 0;\r
+}\r
+\r
+/*\r
+ * Matches a font ID with a SFG_StrokeFont structure pointer.\r
+ * This was changed to match the GLUT header style.\r
+ */\r
+static SFG_StrokeFont* fghStrokeByID( void* font )\r
+{\r
+    if( font == GLUT_STROKE_ROMAN      )\r
+        return &fgStrokeRoman;\r
+    if( font == GLUT_STROKE_MONO_ROMAN )\r
+        return &fgStrokeMonoRoman;\r
+\r
+    fgWarning( "stroke font 0x%08x not found", font );\r
+    return 0;\r
+}\r
+\r
+\r
+/* -- INTERFACE FUNCTIONS -------------------------------------------------- */\r
+\r
+/*\r
+ * Draw a bitmap character\r
+ */\r
+void FGAPIENTRY glutBitmapCharacter( void* fontID, int character )\r
+{\r
+    const GLubyte* face;\r
+    SFG_Font* font;\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutBitmapCharacter" );\r
+    font = fghFontByID( fontID );\r
+    freeglut_return_if_fail( ( character >= 1 )&&( character < 256 ) );\r
+    freeglut_return_if_fail( font );\r
+\r
+    /*\r
+     * Find the character we want to draw (???)\r
+     */\r
+    face = font->Characters[ character ];\r
+\r
+    glPushClientAttrib( GL_CLIENT_PIXEL_STORE_BIT );\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(\r
+        face[ 0 ], font->Height,      /* The bitmap's width and height  */\r
+        font->xorig, font->yorig,     /* The origin in the font glyph   */\r
+        ( float )( face[ 0 ] ), 0.0,  /* The raster advance -- inc. x,y */\r
+        ( face + 1 )                  /* The packed bitmap data...      */\r
+    );\r
+    glPopClientAttrib( );\r
+}\r
+\r
+void FGAPIENTRY glutBitmapString( void* fontID, const unsigned char *string )\r
+{\r
+    unsigned char c;\r
+    float x = 0.0f ;\r
+    SFG_Font* font;\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutBitmapString" );\r
+    font = fghFontByID( fontID );\r
+    freeglut_return_if_fail( font );\r
+    if ( !string || ! *string )\r
+        return;\r
+\r
+    glPushClientAttrib( GL_CLIENT_PIXEL_STORE_BIT );\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
+\r
+    /*\r
+     * Step through the string, drawing each character.\r
+     * A newline will simply translate the next character's insertion\r
+     * point back to the start of the line and down one line.\r
+     */\r
+    while( ( c = *string++) )\r
+        if( c == '\n' )\r
+        {\r
+            glBitmap ( 0, 0, 0, 0, -x, (float) -font->Height, NULL );\r
+            x = 0.0f;\r
+        }\r
+        else  /* Not an EOL, draw the bitmap character */\r
+        {\r
+            const GLubyte* face = font->Characters[ c ];\r
+\r
+            glBitmap(\r
+                face[ 0 ], font->Height,     /* Bitmap's width and height    */\r
+                font->xorig, font->yorig,    /* The origin in the font glyph */\r
+                ( float )( face[ 0 ] ), 0.0, /* The raster advance; inc. x,y */\r
+                ( face + 1 )                 /* The packed bitmap data...    */\r
+            );\r
+\r
+            x += ( float )( face[ 0 ] );\r
+        }\r
+\r
+    glPopClientAttrib( );\r
+}\r
+\r
+/*\r
+ * Returns the width in pixels of a font's character\r
+ */\r
+int FGAPIENTRY glutBitmapWidth( void* fontID, int character )\r
+{\r
+    SFG_Font* font;\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutBitmapWidth" );\r
+    font = fghFontByID( fontID );\r
+    freeglut_return_val_if_fail( character > 0 && character < 256, 0 );\r
+    freeglut_return_val_if_fail( font, 0 );\r
+    return *( font->Characters[ character ] );\r
+}\r
+\r
+/*\r
+ * Return the width of a string drawn using a bitmap font\r
+ */\r
+int FGAPIENTRY glutBitmapLength( void* fontID, const unsigned char* string )\r
+{\r
+    unsigned char c;\r
+    int length = 0, this_line_length = 0;\r
+    SFG_Font* font;\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutBitmapLength" );\r
+    font = fghFontByID( fontID );\r
+    freeglut_return_val_if_fail( font, 0 );\r
+    if ( !string || ! *string )\r
+        return 0;\r
+\r
+    while( ( c = *string++) )\r
+    {\r
+        if( c != '\n' )/* Not an EOL, increment length of line */\r
+            this_line_length += *( font->Characters[ c ]);\r
+        else  /* EOL; reset the length of this line */\r
+        {\r
+            if( length < this_line_length )\r
+                length = this_line_length;\r
+            this_line_length = 0;\r
+        }\r
+    }\r
+    if ( length < this_line_length )\r
+        length = this_line_length;\r
+\r
+    return length;\r
+}\r
+\r
+/*\r
+ * Returns the height of a bitmap font\r
+ */\r
+int FGAPIENTRY glutBitmapHeight( void* fontID )\r
+{\r
+    SFG_Font* font;\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutBitmapHeight" );\r
+    font = fghFontByID( fontID );\r
+    freeglut_return_val_if_fail( font, 0 );\r
+    return font->Height;\r
+}\r
+\r
+/*\r
+ * Draw a stroke character\r
+ */\r
+void FGAPIENTRY glutStrokeCharacter( void* fontID, int character )\r
+{\r
+    const SFG_StrokeChar *schar;\r
+    const SFG_StrokeStrip *strip;\r
+    int i, j;\r
+    SFG_StrokeFont* font;\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutStrokeCharacter" );\r
+    font = fghStrokeByID( fontID );\r
+    freeglut_return_if_fail( character >= 0 );\r
+    freeglut_return_if_fail( character < font->Quantity );\r
+    freeglut_return_if_fail( font );\r
+\r
+    schar = font->Characters[ character ];\r
+    freeglut_return_if_fail( schar );\r
+    strip = schar->Strips;\r
+\r
+    for( i = 0; i < schar->Number; i++, strip++ )\r
+    {\r
+        glBegin( GL_LINE_STRIP );\r
+        for( j = 0; j < strip->Number; j++ )\r
+            glVertex2f( strip->Vertices[ j ].X, strip->Vertices[ j ].Y );\r
+        glEnd( );\r
+                               glBegin( GL_POINTS );\r
+        for( j = 0; j < strip->Number; j++ )\r
+            glVertex2f( strip->Vertices[ j ].X, strip->Vertices[ j ].Y );\r
+                               glEnd( );\r
+    }\r
+    glTranslatef( schar->Right, 0.0, 0.0 );\r
+}\r
+\r
+void FGAPIENTRY glutStrokeString( void* fontID, const unsigned char *string )\r
+{\r
+    unsigned char c;\r
+    int i, j;\r
+    float length = 0.0;\r
+    SFG_StrokeFont* font;\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutStrokeString" );\r
+    font = fghStrokeByID( fontID );\r
+    freeglut_return_if_fail( font );\r
+    if ( !string || ! *string )\r
+        return;\r
+\r
+    /*\r
+     * Step through the string, drawing each character.\r
+     * A newline will simply translate the next character's insertion\r
+     * point back to the start of the line and down one line.\r
+     */\r
+    while( ( c = *string++) )\r
+        if( c < font->Quantity )\r
+        {\r
+            if( c == '\n' )\r
+            {\r
+                glTranslatef ( -length, -( float )( font->Height ), 0.0 );\r
+                length = 0.0;\r
+            }\r
+            else  /* Not an EOL, draw the bitmap character */\r
+            {\r
+                const SFG_StrokeChar *schar = font->Characters[ c ];\r
+                if( schar )\r
+                {\r
+                    const SFG_StrokeStrip *strip = schar->Strips;\r
+\r
+                    for( i = 0; i < schar->Number; i++, strip++ )\r
+                    {\r
+                        glBegin( GL_LINE_STRIP );\r
+                        for( j = 0; j < strip->Number; j++ )\r
+                            glVertex2f( strip->Vertices[ j ].X,\r
+                                        strip->Vertices[ j ].Y);\r
+\r
+                        glEnd( );\r
+                    }\r
+\r
+                    length += schar->Right;\r
+                    glTranslatef( schar->Right, 0.0, 0.0 );\r
+                }\r
+            }\r
+        }\r
+}\r
+\r
+/*\r
+ * Return the width in pixels of a stroke character\r
+ */\r
+int FGAPIENTRY glutStrokeWidth( void* fontID, int character )\r
+{\r
+    const SFG_StrokeChar *schar;\r
+    SFG_StrokeFont* font;\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutStrokeWidth" );\r
+    font = fghStrokeByID( fontID );\r
+    freeglut_return_val_if_fail( ( character >= 0 ) &&\r
+                                 ( character < font->Quantity ),\r
+                                 0\r
+    );\r
+    freeglut_return_val_if_fail( font, 0 );\r
+    schar = font->Characters[ character ];\r
+    freeglut_return_val_if_fail( schar, 0 );\r
+\r
+    return ( int )( schar->Right + 0.5 );\r
+}\r
+\r
+/*\r
+ * Return the width of a string drawn using a stroke font\r
+ */\r
+int FGAPIENTRY glutStrokeLength( void* fontID, const unsigned char* string )\r
+{\r
+    unsigned char c;\r
+    float length = 0.0;\r
+    float this_line_length = 0.0;\r
+    SFG_StrokeFont* font;\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutStrokeLength" );\r
+    font = fghStrokeByID( fontID );\r
+    freeglut_return_val_if_fail( font, 0 );\r
+    if ( !string || ! *string )\r
+        return 0;\r
+\r
+    while( ( c = *string++) )\r
+        if( c < font->Quantity )\r
+        {\r
+            if( c == '\n' ) /* EOL; reset the length of this line */\r
+            {\r
+                if( length < this_line_length )\r
+                    length = this_line_length;\r
+                this_line_length = 0.0;\r
+            }\r
+            else  /* Not an EOL, increment the length of this line */\r
+            {\r
+                const SFG_StrokeChar *schar = font->Characters[ c ];\r
+                if( schar )\r
+                    this_line_length += schar->Right;\r
+            }\r
+        }\r
+    if( length < this_line_length )\r
+        length = this_line_length;\r
+    return( int )( length + 0.5 );\r
+}\r
+\r
+/*\r
+ * Returns the height of a stroke font\r
+ */\r
+GLfloat FGAPIENTRY glutStrokeHeight( void* fontID )\r
+{\r
+    SFG_StrokeFont* font;\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutStrokeHeight" );\r
+    font = fghStrokeByID( fontID );\r
+    freeglut_return_val_if_fail( font, 0.0 );\r
+    return font->Height;\r
+}\r
+\r
+/*** END OF FILE ***/\r
diff --git a/src/Common/freeglut_font_data.c b/src/Common/freeglut_font_data.c
new file mode 100644 (file)
index 0000000..ad9455e
--- /dev/null
@@ -0,0 +1,2020 @@
+/*\r
+    \file  og_font_data.c\r
+    \brief Bitmapped font data for OpenGLUT fonts.\r
+*/\r
+\r
+/*\r
+ * This file has been automatically generated by the \r
+ * genfonts utility.\r
+ *\r
+ * The legal status of this file is a bit vague.  The font glyphs\r
+ * themselves come from XFree86 v4.3.0 (as of this writing), and as\r
+ * part of the X server may be subject to the XFree86 copyrights.\r
+ * The original freeglut fonts were extracted by a utility written\r
+ * by Pawel W. Olszta (see below) and the generated fonts contained\r
+ * his copyright exclusively.  Steve Baker asserts that Pawel\r
+ * assigned intellectual property rights to Steve Baker.  Steve\r
+ * Baker also asserts that fonts cannot be copyrighted.  He has\r
+ * neither stripped the copyright from the freeglut fonts nor\r
+ * formally retitled anything in his name.  Since that time, the\r
+ * OpenGLUT project has branched from freeglut, and has made\r
+ * necessary modifications to Pawel's ``genfonts'' utility.\r
+ * To that extent, OpenGLUT may have some title to this file.\r
+ * What is fairly clear is that the font data is licensed under\r
+ * the XFree86 license (which is variously termed ``XFree'' and\r
+ * ``MIT'' by the freeglut project).  It is believed that all\r
+ * title holders wish this file to be as useful as possible, and\r
+ * that either the ``XFree'' or ``MIT'' license works.\r
+ *\r
+ * Portions copyright (c) 2004, the OpenGLUT project contributors.\r
+ * OpenGLUT branched from freeglut in February, 2004.\r
+ *\r
+ * Copyright (c) 1999-2000 by Pawel W. Olszta\r
+ * Written by Pawel W. Olszta, <olszta@sourceforge.net>\r
+ * \r
+ * Permission is hereby granted, free of charge, to any person obtaining a\r
+ * copy of this software and associated documentation files (the "Software"),\r
+ * to deal in the Software without restriction, including without limitation\r
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
+ * and/or sell copies of the Software, and to permit persons to whom the\r
+ * Software is furnished to do so, subject to the following conditions:\r
+ *\r
+ * The above copyright notice and this permission notice shall be included\r
+ * in all copies or substantial portions of the Sotware.\r
+ *\r
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\r
+ * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
+ */\r
+\r
+#include <GL/freeglut.h>\r
+#include "freeglut_internal.h"\r
+\r
+/*\r
+ * The following bitmapped fonts are defined in this file:\r
+ * \r
+ * 1. fgFontFixed8x13\r
+ *       -misc-fixed-medium-r-normal--13-120-75-75-C-80-iso8859-1\r
+ * 2. fgFontFixed9x15\r
+ *       -misc-fixed-medium-r-normal--15-140-75-75-C-90-iso8859-1\r
+ * 3. fgFontHelvetica10\r
+ *       -adobe-helvetica-medium-r-normal--10-100-75-75-p-56-iso8859-1\r
+ * 4. fgFontHelvetica12\r
+ *       -adobe-helvetica-medium-r-normal--12-120-75-75-p-67-iso8859-1\r
+ * 5. fgFontHelvetica18\r
+ *       -adobe-helvetica-medium-r-normal--18-180-75-75-p-98-iso8859-1\r
+ * 6. fgFontTimesRoman10\r
+ *       -adobe-times-medium-r-normal--10-100-75-75-p-54-iso8859-1\r
+ * 7. fgFontTimesRoman24\r
+ *       -adobe-times-medium-r-normal--24-240-75-75-p-124-iso8859-1\r
+ */\r
+\r
+static const GLubyte Fixed8x13_Character_000[] = {  8,  0,  0,  0,170,  0,130,  0,130,  0,130,  0,170,  0,  0};\r
+static const GLubyte Fixed8x13_Character_001[] = {  8,  0,  0,  0,  0, 16, 56,124,254,124, 56, 16,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_002[] = {  8,  0,170, 85,170, 85,170, 85,170, 85,170, 85,170, 85,170};\r
+static const GLubyte Fixed8x13_Character_003[] = {  8,  0,  0,  0,  4,  4,  4,  4,174,160,224,160,160,  0,  0};\r
+static const GLubyte Fixed8x13_Character_004[] = {  8,  0,  0,  0,  8,  8, 12,  8,142,128,192,128,224,  0,  0};\r
+static const GLubyte Fixed8x13_Character_005[] = {  8,  0,  0,  0, 10, 10, 12, 10,108,128,128,128, 96,  0,  0};\r
+static const GLubyte Fixed8x13_Character_006[] = {  8,  0,  0,  0,  8,  8, 12,  8,238,128,128,128,128,  0,  0};\r
+static const GLubyte Fixed8x13_Character_007[] = {  8,  0,  0,  0,  0,  0,  0,  0,  0, 24, 36, 36, 24,  0,  0};\r
+static const GLubyte Fixed8x13_Character_008[] = {  8,  0,  0,  0,  0,124,  0, 16, 16,124, 16, 16,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_009[] = {  8,  0,  0,  0, 14,  8,  8,  8,168,160,160,160,192,  0,  0};\r
+static const GLubyte Fixed8x13_Character_010[] = {  8,  0,  0,  0,  4,  4,  4,  4, 46, 80, 80,136,136,  0,  0};\r
+static const GLubyte Fixed8x13_Character_011[] = {  8,  0,  0,  0,  0,  0,  0,  0,240, 16, 16, 16, 16, 16, 16};\r
+static const GLubyte Fixed8x13_Character_012[] = {  8,  0, 16, 16, 16, 16, 16, 16,240,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_013[] = {  8,  0, 16, 16, 16, 16, 16, 16, 31,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_014[] = {  8,  0,  0,  0,  0,  0,  0,  0, 31, 16, 16, 16, 16, 16, 16};\r
+static const GLubyte Fixed8x13_Character_015[] = {  8,  0, 16, 16, 16, 16, 16, 16,255, 16, 16, 16, 16, 16, 16};\r
+static const GLubyte Fixed8x13_Character_016[] = {  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,255};\r
+static const GLubyte Fixed8x13_Character_017[] = {  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,255,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_018[] = {  8,  0,  0,  0,  0,  0,  0,  0,255,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_019[] = {  8,  0,  0,  0,  0,255,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_020[] = {  8,  0,255,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_021[] = {  8,  0, 16, 16, 16, 16, 16, 16, 31, 16, 16, 16, 16, 16, 16};\r
+static const GLubyte Fixed8x13_Character_022[] = {  8,  0, 16, 16, 16, 16, 16, 16,240, 16, 16, 16, 16, 16, 16};\r
+static const GLubyte Fixed8x13_Character_023[] = {  8,  0,  0,  0,  0,  0,  0,  0,255, 16, 16, 16, 16, 16, 16};\r
+static const GLubyte Fixed8x13_Character_024[] = {  8,  0, 16, 16, 16, 16, 16, 16,255,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_025[] = {  8,  0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16};\r
+static const GLubyte Fixed8x13_Character_026[] = {  8,  0,  0,  0,254,  0, 14, 48,192, 48, 14,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_027[] = {  8,  0,  0,  0,254,  0,224, 24,  6, 24,224,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_028[] = {  8,  0,  0,  0, 68, 68, 68, 68, 68,254,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_029[] = {  8,  0,  0,  0, 32, 32,126, 16,  8,126,  4,  4,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_030[] = {  8,  0,  0,  0,220, 98, 32, 32, 32,112, 32, 34, 28,  0,  0};\r
+static const GLubyte Fixed8x13_Character_031[] = {  8,  0,  0,  0,  0,  0,  0,  0, 24,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_032[] = {  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_033[] = {  8,  0,  0,  0, 16,  0, 16, 16, 16, 16, 16, 16, 16,  0,  0};\r
+static const GLubyte Fixed8x13_Character_034[] = {  8,  0,  0,  0,  0,  0,  0,  0,  0,  0, 36, 36, 36,  0,  0};\r
+static const GLubyte Fixed8x13_Character_035[] = {  8,  0,  0,  0,  0, 36, 36,126, 36,126, 36, 36,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_036[] = {  8,  0,  0,  0, 16,120, 20, 20, 56, 80, 80, 60, 16,  0,  0};\r
+static const GLubyte Fixed8x13_Character_037[] = {  8,  0,  0,  0, 68, 42, 36, 16,  8,  8, 36, 82, 34,  0,  0};\r
+static const GLubyte Fixed8x13_Character_038[] = {  8,  0,  0,  0, 58, 68, 74, 48, 72, 72, 48,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_039[] = {  8,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64, 48, 56,  0,  0};\r
+static const GLubyte Fixed8x13_Character_040[] = {  8,  0,  0,  0,  4,  8,  8, 16, 16, 16,  8,  8,  4,  0,  0};\r
+static const GLubyte Fixed8x13_Character_041[] = {  8,  0,  0,  0, 32, 16, 16,  8,  8,  8, 16, 16, 32,  0,  0};\r
+static const GLubyte Fixed8x13_Character_042[] = {  8,  0,  0,  0,  0,  0, 36, 24,126, 24, 36,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_043[] = {  8,  0,  0,  0,  0,  0, 16, 16,124, 16, 16,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_044[] = {  8,  0,  0, 64, 48, 56,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_045[] = {  8,  0,  0,  0,  0,  0,  0,  0,126,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_046[] = {  8,  0,  0, 16, 56, 16,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_047[] = {  8,  0,  0,  0,128,128, 64, 32, 16,  8,  4,  2,  2,  0,  0};\r
+static const GLubyte Fixed8x13_Character_048[] = {  8,  0,  0,  0, 24, 36, 66, 66, 66, 66, 66, 36, 24,  0,  0};\r
+static const GLubyte Fixed8x13_Character_049[] = {  8,  0,  0,  0,124, 16, 16, 16, 16, 16, 80, 48, 16,  0,  0};\r
+static const GLubyte Fixed8x13_Character_050[] = {  8,  0,  0,  0,126, 64, 32, 24,  4,  2, 66, 66, 60,  0,  0};\r
+static const GLubyte Fixed8x13_Character_051[] = {  8,  0,  0,  0, 60, 66,  2,  2, 28,  8,  4,  2,126,  0,  0};\r
+static const GLubyte Fixed8x13_Character_052[] = {  8,  0,  0,  0,  4,  4,126, 68, 68, 36, 20, 12,  4,  0,  0};\r
+static const GLubyte Fixed8x13_Character_053[] = {  8,  0,  0,  0, 60, 66,  2,  2, 98, 92, 64, 64,126,  0,  0};\r
+static const GLubyte Fixed8x13_Character_054[] = {  8,  0,  0,  0, 60, 66, 66, 98, 92, 64, 64, 32, 28,  0,  0};\r
+static const GLubyte Fixed8x13_Character_055[] = {  8,  0,  0,  0, 32, 32, 16, 16,  8,  8,  4,  2,126,  0,  0};\r
+static const GLubyte Fixed8x13_Character_056[] = {  8,  0,  0,  0, 60, 66, 66, 66, 60, 66, 66, 66, 60,  0,  0};\r
+static const GLubyte Fixed8x13_Character_057[] = {  8,  0,  0,  0, 56,  4,  2,  2, 58, 70, 66, 66, 60,  0,  0};\r
+static const GLubyte Fixed8x13_Character_058[] = {  8,  0,  0, 16, 56, 16,  0,  0, 16, 56, 16,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_059[] = {  8,  0,  0, 64, 48, 56,  0,  0, 16, 56, 16,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_060[] = {  8,  0,  0,  0,  2,  4,  8, 16, 32, 16,  8,  4,  2,  0,  0};\r
+static const GLubyte Fixed8x13_Character_061[] = {  8,  0,  0,  0,  0,  0,126,  0,  0,126,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_062[] = {  8,  0,  0,  0, 64, 32, 16,  8,  4,  8, 16, 32, 64,  0,  0};\r
+static const GLubyte Fixed8x13_Character_063[] = {  8,  0,  0,  0,  8,  0,  8,  8,  4,  2, 66, 66, 60,  0,  0};\r
+static const GLubyte Fixed8x13_Character_064[] = {  8,  0,  0,  0, 60, 64, 74, 86, 82, 78, 66, 66, 60,  0,  0};\r
+static const GLubyte Fixed8x13_Character_065[] = {  8,  0,  0,  0, 66, 66, 66,126, 66, 66, 66, 36, 24,  0,  0};\r
+static const GLubyte Fixed8x13_Character_066[] = {  8,  0,  0,  0,252, 66, 66, 66,124, 66, 66, 66,252,  0,  0};\r
+static const GLubyte Fixed8x13_Character_067[] = {  8,  0,  0,  0, 60, 66, 64, 64, 64, 64, 64, 66, 60,  0,  0};\r
+static const GLubyte Fixed8x13_Character_068[] = {  8,  0,  0,  0,252, 66, 66, 66, 66, 66, 66, 66,252,  0,  0};\r
+static const GLubyte Fixed8x13_Character_069[] = {  8,  0,  0,  0,126, 64, 64, 64,120, 64, 64, 64,126,  0,  0};\r
+static const GLubyte Fixed8x13_Character_070[] = {  8,  0,  0,  0, 64, 64, 64, 64,120, 64, 64, 64,126,  0,  0};\r
+static const GLubyte Fixed8x13_Character_071[] = {  8,  0,  0,  0, 58, 70, 66, 78, 64, 64, 64, 66, 60,  0,  0};\r
+static const GLubyte Fixed8x13_Character_072[] = {  8,  0,  0,  0, 66, 66, 66, 66,126, 66, 66, 66, 66,  0,  0};\r
+static const GLubyte Fixed8x13_Character_073[] = {  8,  0,  0,  0,124, 16, 16, 16, 16, 16, 16, 16,124,  0,  0};\r
+static const GLubyte Fixed8x13_Character_074[] = {  8,  0,  0,  0, 56, 68,  4,  4,  4,  4,  4,  4, 31,  0,  0};\r
+static const GLubyte Fixed8x13_Character_075[] = {  8,  0,  0,  0, 66, 68, 72, 80, 96, 80, 72, 68, 66,  0,  0};\r
+static const GLubyte Fixed8x13_Character_076[] = {  8,  0,  0,  0,126, 64, 64, 64, 64, 64, 64, 64, 64,  0,  0};\r
+static const GLubyte Fixed8x13_Character_077[] = {  8,  0,  0,  0,130,130,130,146,146,170,198,130,130,  0,  0};\r
+static const GLubyte Fixed8x13_Character_078[] = {  8,  0,  0,  0, 66, 66, 66, 70, 74, 82, 98, 66, 66,  0,  0};\r
+static const GLubyte Fixed8x13_Character_079[] = {  8,  0,  0,  0, 60, 66, 66, 66, 66, 66, 66, 66, 60,  0,  0};\r
+static const GLubyte Fixed8x13_Character_080[] = {  8,  0,  0,  0, 64, 64, 64, 64,124, 66, 66, 66,124,  0,  0};\r
+static const GLubyte Fixed8x13_Character_081[] = {  8,  0,  0,  2, 60, 74, 82, 66, 66, 66, 66, 66, 60,  0,  0};\r
+static const GLubyte Fixed8x13_Character_082[] = {  8,  0,  0,  0, 66, 68, 72, 80,124, 66, 66, 66,124,  0,  0};\r
+static const GLubyte Fixed8x13_Character_083[] = {  8,  0,  0,  0, 60, 66,  2,  2, 60, 64, 64, 66, 60,  0,  0};\r
+static const GLubyte Fixed8x13_Character_084[] = {  8,  0,  0,  0, 16, 16, 16, 16, 16, 16, 16, 16,254,  0,  0};\r
+static const GLubyte Fixed8x13_Character_085[] = {  8,  0,  0,  0, 60, 66, 66, 66, 66, 66, 66, 66, 66,  0,  0};\r
+static const GLubyte Fixed8x13_Character_086[] = {  8,  0,  0,  0, 16, 40, 40, 40, 68, 68, 68,130,130,  0,  0};\r
+static const GLubyte Fixed8x13_Character_087[] = {  8,  0,  0,  0, 68,170,146,146,146,130,130,130,130,  0,  0};\r
+static const GLubyte Fixed8x13_Character_088[] = {  8,  0,  0,  0,130,130, 68, 40, 16, 40, 68,130,130,  0,  0};\r
+static const GLubyte Fixed8x13_Character_089[] = {  8,  0,  0,  0, 16, 16, 16, 16, 16, 40, 68,130,130,  0,  0};\r
+static const GLubyte Fixed8x13_Character_090[] = {  8,  0,  0,  0,126, 64, 64, 32, 16,  8,  4,  2,126,  0,  0};\r
+static const GLubyte Fixed8x13_Character_091[] = {  8,  0,  0,  0, 60, 32, 32, 32, 32, 32, 32, 32, 60,  0,  0};\r
+static const GLubyte Fixed8x13_Character_092[] = {  8,  0,  0,  0,  2,  2,  4,  8, 16, 32, 64,128,128,  0,  0};\r
+static const GLubyte Fixed8x13_Character_093[] = {  8,  0,  0,  0,120,  8,  8,  8,  8,  8,  8,  8,120,  0,  0};\r
+static const GLubyte Fixed8x13_Character_094[] = {  8,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 40, 16,  0,  0};\r
+static const GLubyte Fixed8x13_Character_095[] = {  8,  0,  0,254,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_096[] = {  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4, 24, 56,  0,  0};\r
+static const GLubyte Fixed8x13_Character_097[] = {  8,  0,  0,  0, 58, 70, 66, 62,  2, 60,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_098[] = {  8,  0,  0,  0, 92, 98, 66, 66, 98, 92, 64, 64, 64,  0,  0};\r
+static const GLubyte Fixed8x13_Character_099[] = {  8,  0,  0,  0, 60, 66, 64, 64, 66, 60,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_100[] = {  8,  0,  0,  0, 58, 70, 66, 66, 70, 58,  2,  2,  2,  0,  0};\r
+static const GLubyte Fixed8x13_Character_101[] = {  8,  0,  0,  0, 60, 66, 64,126, 66, 60,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_102[] = {  8,  0,  0,  0, 32, 32, 32, 32,124, 32, 32, 34, 28,  0,  0};\r
+static const GLubyte Fixed8x13_Character_103[] = {  8,  0, 60, 66, 60, 64, 56, 68, 68, 58,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_104[] = {  8,  0,  0,  0, 66, 66, 66, 66, 98, 92, 64, 64, 64,  0,  0};\r
+static const GLubyte Fixed8x13_Character_105[] = {  8,  0,  0,  0,124, 16, 16, 16, 16, 48,  0, 16,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_106[] = {  8,  0, 56, 68, 68,  4,  4,  4,  4, 12,  0,  4,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_107[] = {  8,  0,  0,  0, 66, 68, 72,112, 72, 68, 64, 64, 64,  0,  0};\r
+static const GLubyte Fixed8x13_Character_108[] = {  8,  0,  0,  0,124, 16, 16, 16, 16, 16, 16, 16, 48,  0,  0};\r
+static const GLubyte Fixed8x13_Character_109[] = {  8,  0,  0,  0,130,146,146,146,146,236,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_110[] = {  8,  0,  0,  0, 66, 66, 66, 66, 98, 92,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_111[] = {  8,  0,  0,  0, 60, 66, 66, 66, 66, 60,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_112[] = {  8,  0, 64, 64, 64, 92, 98, 66, 98, 92,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_113[] = {  8,  0,  2,  2,  2, 58, 70, 66, 70, 58,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_114[] = {  8,  0,  0,  0, 32, 32, 32, 32, 34, 92,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_115[] = {  8,  0,  0,  0, 60, 66, 12, 48, 66, 60,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_116[] = {  8,  0,  0,  0, 28, 34, 32, 32, 32,124, 32, 32,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_117[] = {  8,  0,  0,  0, 58, 68, 68, 68, 68, 68,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_118[] = {  8,  0,  0,  0, 16, 40, 40, 68, 68, 68,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_119[] = {  8,  0,  0,  0, 68,170,146,146,130,130,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_120[] = {  8,  0,  0,  0, 66, 36, 24, 24, 36, 66,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_121[] = {  8,  0, 60, 66,  2, 58, 70, 66, 66, 66,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_122[] = {  8,  0,  0,  0,126, 32, 16,  8,  4,126,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_123[] = {  8,  0,  0,  0, 14, 16, 16,  8, 48,  8, 16, 16, 14,  0,  0};\r
+static const GLubyte Fixed8x13_Character_124[] = {  8,  0,  0,  0, 16, 16, 16, 16, 16, 16, 16, 16, 16,  0,  0};\r
+static const GLubyte Fixed8x13_Character_125[] = {  8,  0,  0,  0,112,  8,  8, 16, 12, 16,  8,  8,112,  0,  0};\r
+static const GLubyte Fixed8x13_Character_126[] = {  8,  0,  0,  0,  0,  0,  0,  0,  0,  0, 72, 84, 36,  0,  0};\r
+static const GLubyte Fixed8x13_Character_127[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_128[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_129[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_130[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_131[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_132[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_133[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_134[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_135[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_136[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_137[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_138[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_139[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_140[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_141[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_142[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_143[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_144[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_145[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_146[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_147[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_148[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_149[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_150[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_151[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_152[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_153[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_154[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_155[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_156[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_157[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_158[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_159[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_160[] = {  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_161[] = {  8,  0,  0,  0, 16, 16, 16, 16, 16, 16, 16,  0, 16,  0,  0};\r
+static const GLubyte Fixed8x13_Character_162[] = {  8,  0,  0,  0,  0, 16, 56, 84, 80, 80, 84, 56, 16,  0,  0};\r
+static const GLubyte Fixed8x13_Character_163[] = {  8,  0,  0,  0,220, 98, 32, 32, 32,112, 32, 34, 28,  0,  0};\r
+static const GLubyte Fixed8x13_Character_164[] = {  8,  0,  0,  0,  0, 66, 60, 36, 36, 60, 66,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_165[] = {  8,  0,  0,  0, 16, 16,124, 16,124, 40, 68,130,130,  0,  0};\r
+static const GLubyte Fixed8x13_Character_166[] = {  8,  0,  0,  0, 16, 16, 16, 16,  0, 16, 16, 16, 16,  0,  0};\r
+static const GLubyte Fixed8x13_Character_167[] = {  8,  0,  0,  0, 24, 36,  4, 24, 36, 36, 24, 32, 36, 24,  0};\r
+static const GLubyte Fixed8x13_Character_168[] = {  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,108,  0,  0};\r
+static const GLubyte Fixed8x13_Character_169[] = {  8,  0,  0,  0,  0, 56, 68,146,170,162,170,146, 68, 56,  0};\r
+static const GLubyte Fixed8x13_Character_170[] = {  8,  0,  0,  0,  0,  0,124,  0, 60, 68, 60,  4, 56,  0,  0};\r
+static const GLubyte Fixed8x13_Character_171[] = {  8,  0,  0,  0,  0, 18, 36, 72,144, 72, 36, 18,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_172[] = {  8,  0,  0,  0,  0,  2,  2,  2,126,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_173[] = {  8,  0,  0,  0,  0,  0,  0,  0, 60,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_174[] = {  8,  0,  0,  0,  0, 56, 68,170,178,170,170,146, 68, 56,  0};\r
+static const GLubyte Fixed8x13_Character_175[] = {  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,126,  0,  0};\r
+static const GLubyte Fixed8x13_Character_176[] = {  8,  0,  0,  0,  0,  0,  0,  0,  0, 24, 36, 36, 24,  0,  0};\r
+static const GLubyte Fixed8x13_Character_177[] = {  8,  0,  0,  0,  0,124,  0, 16, 16,124, 16, 16,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_178[] = {  8,  0,  0,  0,  0,  0,  0,  0,120, 64, 48,  8, 72, 48,  0};\r
+static const GLubyte Fixed8x13_Character_179[] = {  8,  0,  0,  0,  0,  0,  0,  0, 48, 72,  8, 16, 72, 48,  0};\r
+static const GLubyte Fixed8x13_Character_180[] = {  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  8,  0};\r
+static const GLubyte Fixed8x13_Character_181[] = {  8,  0,  0, 64, 90,102, 66, 66, 66, 66,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_182[] = {  8,  0,  0,  0, 20, 20, 20, 20, 52,116,116,116, 62,  0,  0};\r
+static const GLubyte Fixed8x13_Character_183[] = {  8,  0,  0,  0,  0,  0,  0,  0, 24,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_184[] = {  8,  0, 24,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_185[] = {  8,  0,  0,  0,  0,  0,  0,  0,112, 32, 32, 32, 96, 32,  0};\r
+static const GLubyte Fixed8x13_Character_186[] = {  8,  0,  0,  0,  0,  0,  0,120,  0, 48, 72, 72, 48,  0,  0};\r
+static const GLubyte Fixed8x13_Character_187[] = {  8,  0,  0,  0,  0,144, 72, 36, 18, 36, 72,144,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_188[] = {  8,  0,  0,  0,  6, 26, 18, 10,230, 66, 64, 64,192, 64,  0};\r
+static const GLubyte Fixed8x13_Character_189[] = {  8,  0,  0,  0, 30, 16, 12,  2,242, 76, 64, 64,192, 64,  0};\r
+static const GLubyte Fixed8x13_Character_190[] = {  8,  0,  0,  0,  6, 26, 18, 10,102,146, 16, 32,144, 96,  0};\r
+static const GLubyte Fixed8x13_Character_191[] = {  8,  0,  0,  0, 60, 66, 66, 64, 32, 16, 16,  0, 16,  0,  0};\r
+static const GLubyte Fixed8x13_Character_192[] = {  8,  0,  0,  0, 66, 66,126, 66, 66, 36, 24,  0,  8, 16,  0};\r
+static const GLubyte Fixed8x13_Character_193[] = {  8,  0,  0,  0, 66, 66,126, 66, 66, 36, 24,  0, 16,  8,  0};\r
+static const GLubyte Fixed8x13_Character_194[] = {  8,  0,  0,  0, 66, 66,126, 66, 66, 36, 24,  0, 36, 24,  0};\r
+static const GLubyte Fixed8x13_Character_195[] = {  8,  0,  0,  0, 66, 66,126, 66, 66, 36, 24,  0, 76, 50,  0};\r
+static const GLubyte Fixed8x13_Character_196[] = {  8,  0,  0,  0, 66, 66,126, 66, 66, 36, 24,  0, 36, 36,  0};\r
+static const GLubyte Fixed8x13_Character_197[] = {  8,  0,  0,  0, 66, 66,126, 66, 66, 36, 24, 24, 36, 24,  0};\r
+static const GLubyte Fixed8x13_Character_198[] = {  8,  0,  0,  0,158,144,144,240,156,144,144,144,110,  0,  0};\r
+static const GLubyte Fixed8x13_Character_199[] = {  8,  0, 16,  8, 60, 66, 64, 64, 64, 64, 64, 66, 60,  0,  0};\r
+static const GLubyte Fixed8x13_Character_200[] = {  8,  0,  0,  0,126, 64, 64,120, 64, 64,126,  0,  8, 16,  0};\r
+static const GLubyte Fixed8x13_Character_201[] = {  8,  0,  0,  0,126, 64, 64,120, 64, 64,126,  0, 16,  8,  0};\r
+static const GLubyte Fixed8x13_Character_202[] = {  8,  0,  0,  0,126, 64, 64,120, 64, 64,126,  0, 36, 24,  0};\r
+static const GLubyte Fixed8x13_Character_203[] = {  8,  0,  0,  0,126, 64, 64,120, 64, 64,126,  0, 36, 36,  0};\r
+static const GLubyte Fixed8x13_Character_204[] = {  8,  0,  0,  0,124, 16, 16, 16, 16, 16,124,  0, 16, 32,  0};\r
+static const GLubyte Fixed8x13_Character_205[] = {  8,  0,  0,  0,124, 16, 16, 16, 16, 16,124,  0, 16,  8,  0};\r
+static const GLubyte Fixed8x13_Character_206[] = {  8,  0,  0,  0,124, 16, 16, 16, 16, 16,124,  0, 36, 24,  0};\r
+static const GLubyte Fixed8x13_Character_207[] = {  8,  0,  0,  0,124, 16, 16, 16, 16, 16,124,  0, 40, 40,  0};\r
+static const GLubyte Fixed8x13_Character_208[] = {  8,  0,  0,  0,120, 68, 66, 66,226, 66, 66, 68,120,  0,  0};\r
+static const GLubyte Fixed8x13_Character_209[] = {  8,  0,  0,  0,130,134,138,146,162,194,130,  0,152,100,  0};\r
+static const GLubyte Fixed8x13_Character_210[] = {  8,  0,  0,  0,124,130,130,130,130,130,124,  0, 16, 32,  0};\r
+static const GLubyte Fixed8x13_Character_211[] = {  8,  0,  0,  0,124,130,130,130,130,130,124,  0, 16,  8,  0};\r
+static const GLubyte Fixed8x13_Character_212[] = {  8,  0,  0,  0,124,130,130,130,130,130,124,  0, 36, 24,  0};\r
+static const GLubyte Fixed8x13_Character_213[] = {  8,  0,  0,  0,124,130,130,130,130,130,124,  0,152,100,  0};\r
+static const GLubyte Fixed8x13_Character_214[] = {  8,  0,  0,  0,124,130,130,130,130,130,124,  0, 40, 40,  0};\r
+static const GLubyte Fixed8x13_Character_215[] = {  8,  0,  0,  0,  0, 66, 36, 24, 24, 36, 66,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_216[] = {  8,  0,  0, 64, 60, 98, 82, 82, 82, 74, 74, 70, 60,  2,  0};\r
+static const GLubyte Fixed8x13_Character_217[] = {  8,  0,  0,  0, 60, 66, 66, 66, 66, 66, 66,  0,  8, 16,  0};\r
+static const GLubyte Fixed8x13_Character_218[] = {  8,  0,  0,  0, 60, 66, 66, 66, 66, 66, 66,  0, 16,  8,  0};\r
+static const GLubyte Fixed8x13_Character_219[] = {  8,  0,  0,  0, 60, 66, 66, 66, 66, 66, 66,  0, 36, 24,  0};\r
+static const GLubyte Fixed8x13_Character_220[] = {  8,  0,  0,  0, 60, 66, 66, 66, 66, 66, 66,  0, 36, 36,  0};\r
+static const GLubyte Fixed8x13_Character_221[] = {  8,  0,  0,  0, 16, 16, 16, 16, 40, 68, 68,  0, 16,  8,  0};\r
+static const GLubyte Fixed8x13_Character_222[] = {  8,  0,  0,  0, 64, 64, 64,124, 66, 66, 66,124, 64,  0,  0};\r
+static const GLubyte Fixed8x13_Character_223[] = {  8,  0,  0,  0, 92, 66, 66, 76, 80, 72, 68, 68, 56,  0,  0};\r
+static const GLubyte Fixed8x13_Character_224[] = {  8,  0,  0,  0, 58, 70, 66, 62,  2, 60,  0,  0,  8, 16,  0};\r
+static const GLubyte Fixed8x13_Character_225[] = {  8,  0,  0,  0, 58, 70, 66, 62,  2, 60,  0,  0,  8,  4,  0};\r
+static const GLubyte Fixed8x13_Character_226[] = {  8,  0,  0,  0, 58, 70, 66, 62,  2, 60,  0,  0, 36, 24,  0};\r
+static const GLubyte Fixed8x13_Character_227[] = {  8,  0,  0,  0, 58, 70, 66, 62,  2, 60,  0,  0, 76, 50,  0};\r
+static const GLubyte Fixed8x13_Character_228[] = {  8,  0,  0,  0, 58, 70, 66, 62,  2, 60,  0,  0, 36, 36,  0};\r
+static const GLubyte Fixed8x13_Character_229[] = {  8,  0,  0,  0, 58, 70, 66, 62,  2, 60,  0, 24, 36, 24,  0};\r
+static const GLubyte Fixed8x13_Character_230[] = {  8,  0,  0,  0,108,146,144,124, 18,108,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_231[] = {  8,  0, 16,  8, 60, 66, 64, 64, 66, 60,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_232[] = {  8,  0,  0,  0, 60, 66, 64,126, 66, 60,  0,  0,  8, 16,  0};\r
+static const GLubyte Fixed8x13_Character_233[] = {  8,  0,  0,  0, 60, 66, 64,126, 66, 60,  0,  0, 16,  8,  0};\r
+static const GLubyte Fixed8x13_Character_234[] = {  8,  0,  0,  0, 60, 66, 64,126, 66, 60,  0,  0, 36, 24,  0};\r
+static const GLubyte Fixed8x13_Character_235[] = {  8,  0,  0,  0, 60, 66, 64,126, 66, 60,  0,  0, 36, 36,  0};\r
+static const GLubyte Fixed8x13_Character_236[] = {  8,  0,  0,  0,124, 16, 16, 16, 16, 48,  0,  0, 16, 32,  0};\r
+static const GLubyte Fixed8x13_Character_237[] = {  8,  0,  0,  0,124, 16, 16, 16, 16, 48,  0,  0, 32, 16,  0};\r
+static const GLubyte Fixed8x13_Character_238[] = {  8,  0,  0,  0,124, 16, 16, 16, 16, 48,  0,  0, 72, 48,  0};\r
+static const GLubyte Fixed8x13_Character_239[] = {  8,  0,  0,  0,124, 16, 16, 16, 16, 48,  0,  0, 40, 40,  0};\r
+static const GLubyte Fixed8x13_Character_240[] = {  8,  0,  0,  0, 60, 66, 66, 66, 66, 60,  4, 40, 24, 36,  0};\r
+static const GLubyte Fixed8x13_Character_241[] = {  8,  0,  0,  0, 66, 66, 66, 66, 98, 92,  0,  0, 76, 50,  0};\r
+static const GLubyte Fixed8x13_Character_242[] = {  8,  0,  0,  0, 60, 66, 66, 66, 66, 60,  0,  0, 16, 32,  0};\r
+static const GLubyte Fixed8x13_Character_243[] = {  8,  0,  0,  0, 60, 66, 66, 66, 66, 60,  0,  0, 16,  8,  0};\r
+static const GLubyte Fixed8x13_Character_244[] = {  8,  0,  0,  0, 60, 66, 66, 66, 66, 60,  0,  0, 36, 24,  0};\r
+static const GLubyte Fixed8x13_Character_245[] = {  8,  0,  0,  0, 60, 66, 66, 66, 66, 60,  0,  0, 76, 50,  0};\r
+static const GLubyte Fixed8x13_Character_246[] = {  8,  0,  0,  0, 60, 66, 66, 66, 66, 60,  0,  0, 36, 36,  0};\r
+static const GLubyte Fixed8x13_Character_247[] = {  8,  0,  0,  0,  0, 16, 16,  0,124,  0, 16, 16,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_248[] = {  8,  0,  0, 64, 60, 98, 82, 74, 70, 60,  2,  0,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_249[] = {  8,  0,  0,  0, 58, 68, 68, 68, 68, 68,  0,  0, 16, 32,  0};\r
+static const GLubyte Fixed8x13_Character_250[] = {  8,  0,  0,  0, 58, 68, 68, 68, 68, 68,  0,  0, 16,  8,  0};\r
+static const GLubyte Fixed8x13_Character_251[] = {  8,  0,  0,  0, 58, 68, 68, 68, 68, 68,  0,  0, 36, 24,  0};\r
+static const GLubyte Fixed8x13_Character_252[] = {  8,  0,  0,  0, 58, 68, 68, 68, 68, 68,  0,  0, 40, 40,  0};\r
+static const GLubyte Fixed8x13_Character_253[] = {  8,  0, 60, 66,  2, 58, 70, 66, 66, 66,  0,  0, 16,  8,  0};\r
+static const GLubyte Fixed8x13_Character_254[] = {  8,  0, 64, 64, 92, 98, 66, 66, 98, 92, 64, 64,  0,  0,  0};\r
+static const GLubyte Fixed8x13_Character_255[] = {  8,  0, 60, 66,  2, 58, 70, 66, 66, 66,  0,  0, 36, 36,  0};\r
+\r
+/* The font characters mapping: */\r
+static const GLubyte* Fixed8x13_Character_Map[] = {Fixed8x13_Character_000,Fixed8x13_Character_001,Fixed8x13_Character_002,Fixed8x13_Character_003,Fixed8x13_Character_004,Fixed8x13_Character_005,Fixed8x13_Character_006,Fixed8x13_Character_007,Fixed8x13_Character_008,Fixed8x13_Character_009,Fixed8x13_Character_010,Fixed8x13_Character_011,Fixed8x13_Character_012,Fixed8x13_Character_013,Fixed8x13_Character_014,Fixed8x13_Character_015,\r
+                                                   Fixed8x13_Character_016,Fixed8x13_Character_017,Fixed8x13_Character_018,Fixed8x13_Character_019,Fixed8x13_Character_020,Fixed8x13_Character_021,Fixed8x13_Character_022,Fixed8x13_Character_023,Fixed8x13_Character_024,Fixed8x13_Character_025,Fixed8x13_Character_026,Fixed8x13_Character_027,Fixed8x13_Character_028,Fixed8x13_Character_029,Fixed8x13_Character_030,Fixed8x13_Character_031,\r
+                                                   Fixed8x13_Character_032,Fixed8x13_Character_033,Fixed8x13_Character_034,Fixed8x13_Character_035,Fixed8x13_Character_036,Fixed8x13_Character_037,Fixed8x13_Character_038,Fixed8x13_Character_039,Fixed8x13_Character_040,Fixed8x13_Character_041,Fixed8x13_Character_042,Fixed8x13_Character_043,Fixed8x13_Character_044,Fixed8x13_Character_045,Fixed8x13_Character_046,Fixed8x13_Character_047,\r
+                                                   Fixed8x13_Character_048,Fixed8x13_Character_049,Fixed8x13_Character_050,Fixed8x13_Character_051,Fixed8x13_Character_052,Fixed8x13_Character_053,Fixed8x13_Character_054,Fixed8x13_Character_055,Fixed8x13_Character_056,Fixed8x13_Character_057,Fixed8x13_Character_058,Fixed8x13_Character_059,Fixed8x13_Character_060,Fixed8x13_Character_061,Fixed8x13_Character_062,Fixed8x13_Character_063,\r
+                                                   Fixed8x13_Character_064,Fixed8x13_Character_065,Fixed8x13_Character_066,Fixed8x13_Character_067,Fixed8x13_Character_068,Fixed8x13_Character_069,Fixed8x13_Character_070,Fixed8x13_Character_071,Fixed8x13_Character_072,Fixed8x13_Character_073,Fixed8x13_Character_074,Fixed8x13_Character_075,Fixed8x13_Character_076,Fixed8x13_Character_077,Fixed8x13_Character_078,Fixed8x13_Character_079,\r
+                                                   Fixed8x13_Character_080,Fixed8x13_Character_081,Fixed8x13_Character_082,Fixed8x13_Character_083,Fixed8x13_Character_084,Fixed8x13_Character_085,Fixed8x13_Character_086,Fixed8x13_Character_087,Fixed8x13_Character_088,Fixed8x13_Character_089,Fixed8x13_Character_090,Fixed8x13_Character_091,Fixed8x13_Character_092,Fixed8x13_Character_093,Fixed8x13_Character_094,Fixed8x13_Character_095,\r
+                                                   Fixed8x13_Character_096,Fixed8x13_Character_097,Fixed8x13_Character_098,Fixed8x13_Character_099,Fixed8x13_Character_100,Fixed8x13_Character_101,Fixed8x13_Character_102,Fixed8x13_Character_103,Fixed8x13_Character_104,Fixed8x13_Character_105,Fixed8x13_Character_106,Fixed8x13_Character_107,Fixed8x13_Character_108,Fixed8x13_Character_109,Fixed8x13_Character_110,Fixed8x13_Character_111,\r
+                                                   Fixed8x13_Character_112,Fixed8x13_Character_113,Fixed8x13_Character_114,Fixed8x13_Character_115,Fixed8x13_Character_116,Fixed8x13_Character_117,Fixed8x13_Character_118,Fixed8x13_Character_119,Fixed8x13_Character_120,Fixed8x13_Character_121,Fixed8x13_Character_122,Fixed8x13_Character_123,Fixed8x13_Character_124,Fixed8x13_Character_125,Fixed8x13_Character_126,Fixed8x13_Character_032,\r
+                                                   Fixed8x13_Character_032,Fixed8x13_Character_032,Fixed8x13_Character_032,Fixed8x13_Character_032,Fixed8x13_Character_032,Fixed8x13_Character_032,Fixed8x13_Character_032,Fixed8x13_Character_032,Fixed8x13_Character_032,Fixed8x13_Character_032,Fixed8x13_Character_032,Fixed8x13_Character_032,Fixed8x13_Character_032,Fixed8x13_Character_032,Fixed8x13_Character_032,Fixed8x13_Character_032,\r
+                                                   Fixed8x13_Character_032,Fixed8x13_Character_032,Fixed8x13_Character_032,Fixed8x13_Character_032,Fixed8x13_Character_032,Fixed8x13_Character_032,Fixed8x13_Character_032,Fixed8x13_Character_032,Fixed8x13_Character_032,Fixed8x13_Character_032,Fixed8x13_Character_032,Fixed8x13_Character_032,Fixed8x13_Character_032,Fixed8x13_Character_032,Fixed8x13_Character_032,Fixed8x13_Character_032,\r
+                                                   Fixed8x13_Character_160,Fixed8x13_Character_161,Fixed8x13_Character_162,Fixed8x13_Character_163,Fixed8x13_Character_164,Fixed8x13_Character_165,Fixed8x13_Character_166,Fixed8x13_Character_167,Fixed8x13_Character_168,Fixed8x13_Character_169,Fixed8x13_Character_170,Fixed8x13_Character_171,Fixed8x13_Character_172,Fixed8x13_Character_173,Fixed8x13_Character_174,Fixed8x13_Character_175,\r
+                                                   Fixed8x13_Character_176,Fixed8x13_Character_177,Fixed8x13_Character_178,Fixed8x13_Character_179,Fixed8x13_Character_180,Fixed8x13_Character_181,Fixed8x13_Character_182,Fixed8x13_Character_183,Fixed8x13_Character_184,Fixed8x13_Character_185,Fixed8x13_Character_186,Fixed8x13_Character_187,Fixed8x13_Character_188,Fixed8x13_Character_189,Fixed8x13_Character_190,Fixed8x13_Character_191,\r
+                                                   Fixed8x13_Character_192,Fixed8x13_Character_193,Fixed8x13_Character_194,Fixed8x13_Character_195,Fixed8x13_Character_196,Fixed8x13_Character_197,Fixed8x13_Character_198,Fixed8x13_Character_199,Fixed8x13_Character_200,Fixed8x13_Character_201,Fixed8x13_Character_202,Fixed8x13_Character_203,Fixed8x13_Character_204,Fixed8x13_Character_205,Fixed8x13_Character_206,Fixed8x13_Character_207,\r
+                                                   Fixed8x13_Character_208,Fixed8x13_Character_209,Fixed8x13_Character_210,Fixed8x13_Character_211,Fixed8x13_Character_212,Fixed8x13_Character_213,Fixed8x13_Character_214,Fixed8x13_Character_215,Fixed8x13_Character_216,Fixed8x13_Character_217,Fixed8x13_Character_218,Fixed8x13_Character_219,Fixed8x13_Character_220,Fixed8x13_Character_221,Fixed8x13_Character_222,Fixed8x13_Character_223,\r
+                                                   Fixed8x13_Character_224,Fixed8x13_Character_225,Fixed8x13_Character_226,Fixed8x13_Character_227,Fixed8x13_Character_228,Fixed8x13_Character_229,Fixed8x13_Character_230,Fixed8x13_Character_231,Fixed8x13_Character_232,Fixed8x13_Character_233,Fixed8x13_Character_234,Fixed8x13_Character_235,Fixed8x13_Character_236,Fixed8x13_Character_237,Fixed8x13_Character_238,Fixed8x13_Character_239,\r
+                                                   Fixed8x13_Character_240,Fixed8x13_Character_241,Fixed8x13_Character_242,Fixed8x13_Character_243,Fixed8x13_Character_244,Fixed8x13_Character_245,Fixed8x13_Character_246,Fixed8x13_Character_247,Fixed8x13_Character_248,Fixed8x13_Character_249,Fixed8x13_Character_250,Fixed8x13_Character_251,Fixed8x13_Character_252,Fixed8x13_Character_253,Fixed8x13_Character_254,Fixed8x13_Character_255,NULL};\r
+\r
+/* The font structure: */\r
+const SFG_Font fgFontFixed8x13 = { "-misc-fixed-medium-r-normal--13-120-75-75-C-80-iso8859-1", 256, 14, Fixed8x13_Character_Map, 0, 3 };\r
+\r
+static const GLubyte Fixed9x15_Character_000[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_001[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0, 28,  0, 62,  0,127,  0,255,128,127,  0, 62,  0, 28,  0,  8,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_002[] = {  9,  0,  0,170,128, 85,  0,170,128, 85,  0,170,128, 85,  0,170,128, 85,  0,170,128, 85,  0,170,128, 85,  0,170,128, 85,  0,170,128};\r
+static const GLubyte Fixed9x15_Character_003[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  4,  0,  4,  0,  4,  0, 31,  0,  0,  0, 72,  0, 72,  0,120,  0, 72,  0, 72,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_004[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  8,  0,  8,  0, 14,  0, 72,  0, 79,  0, 64,  0,112,  0, 64,  0,120,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_005[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  9,  0,  9,  0, 14,  0,  9,  0, 14,  0,  0,  0, 56,  0, 64,  0, 64,  0, 64,  0, 56,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_006[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  8,  0, 14,  0,  8,  0, 15,  0,  0,  0,120,  0, 64,  0, 64,  0, 64,  0, 64,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_007[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 12,  0, 18,  0, 18,  0, 12,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_008[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,  0,  0,  0,  8,  0,  8,  0,  8,  0,127,  0,  8,  0,  8,  0,  8,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_009[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 15,  0,  8,  0,  8,  0,  8,  0,  8,  0,  0,  0, 68,  0, 76,  0, 84,  0,100,  0, 68,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_010[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  4,  0,  4,  0,  4,  0, 31,  0,  0,  0, 16,  0, 40,  0, 40,  0, 68,  0, 68,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_011[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,248,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0};\r
+static const GLubyte Fixed9x15_Character_012[] = {  9,  0,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,248,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_013[] = {  9,  0,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0, 15,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_014[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15,128,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0};\r
+static const GLubyte Fixed9x15_Character_015[] = {  9,  0,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,255,128,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0};\r
+static const GLubyte Fixed9x15_Character_016[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,255,128};\r
+static const GLubyte Fixed9x15_Character_017[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,255,128,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_018[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,255,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_019[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,255,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_020[] = {  9,  0,  0,255,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_021[] = {  9,  0,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0, 15,128,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0};\r
+static const GLubyte Fixed9x15_Character_022[] = {  9,  0,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,248,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0};\r
+static const GLubyte Fixed9x15_Character_023[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,255,128,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0};\r
+static const GLubyte Fixed9x15_Character_024[] = {  9,  0,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,255,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_025[] = {  9,  0,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0};\r
+static const GLubyte Fixed9x15_Character_026[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,  0,  0,  0,  3,  0, 28,  0, 96,  0, 28,  0,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_027[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,  0,  0,  0, 96,  0, 28,  0,  3,  0, 28,  0, 96,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_028[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 34,  0, 34,  0, 34,  0, 34,  0, 34,  0, 34,  0,127,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_029[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0, 16,  0,127,  0,  8,  0,127,  0,  4,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_030[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 46,  0, 81,  0, 48,  0, 16,  0, 16,  0,124,  0, 16,  0, 16,  0, 17,  0, 14,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_031[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 12,  0, 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_032[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_033[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  8,  0,  0,  0,  0,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_034[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 18,  0, 18,  0, 18,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_035[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 36,  0, 36,  0,126,  0, 36,  0, 36,  0,126,  0, 36,  0, 36,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_036[] = {  9,  0,  0,  0,  0,  0,  0,  8,  0, 62,  0, 73,  0,  9,  0,  9,  0, 10,  0, 28,  0, 40,  0, 72,  0, 73,  0, 62,  0,  8,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_037[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 66,  0, 37,  0, 37,  0, 18,  0,  8,  0,  8,  0, 36,  0, 82,  0, 82,  0, 33,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_038[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 49,  0, 74,  0, 68,  0, 74,  0, 49,  0, 48,  0, 72,  0, 72,  0, 72,  0, 48,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_039[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  8,  0,  4,  0,  6,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_040[] = {  9,  0,  0,  0,  0,  0,  0,  4,  0,  8,  0,  8,  0, 16,  0, 16,  0, 16,  0, 16,  0, 16,  0, 16,  0,  8,  0,  8,  0,  4,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_041[] = {  9,  0,  0,  0,  0,  0,  0, 16,  0,  8,  0,  8,  0,  4,  0,  4,  0,  4,  0,  4,  0,  4,  0,  4,  0,  8,  0,  8,  0, 16,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_042[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0, 73,  0, 42,  0, 28,  0, 42,  0, 73,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_043[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  8,  0,  8,  0,127,  0,  8,  0,  8,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_044[] = {  9,  0,  0,  8,  0,  4,  0,  4,  0, 12,  0, 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_045[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_046[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 12,  0, 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_047[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0, 32,  0, 32,  0, 16,  0,  8,  0,  8,  0,  4,  0,  2,  0,  2,  0,  1,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_048[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 28,  0, 34,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 34,  0, 28,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_049[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,127,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0, 72,  0, 40,  0, 24,  0,  8,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_050[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,127,  0, 64,  0, 32,  0, 16,  0,  8,  0,  4,  0,  2,  0, 65,  0, 65,  0, 62,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_051[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 65,  0,  1,  0,  1,  0,  1,  0, 14,  0,  4,  0,  2,  0,  1,  0,127,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_052[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  2,  0,  2,  0,127,  0, 66,  0, 34,  0, 18,  0, 10,  0,  6,  0,  2,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_053[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 65,  0,  1,  0,  1,  0,  1,  0, 97,  0, 94,  0, 64,  0, 64,  0,127,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_054[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 65,  0, 65,  0, 65,  0, 97,  0, 94,  0, 64,  0, 64,  0, 32,  0, 30,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_055[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0, 32,  0, 16,  0, 16,  0,  8,  0,  4,  0,  2,  0,  1,  0,  1,  0,127,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_056[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 28,  0, 34,  0, 65,  0, 65,  0, 34,  0, 28,  0, 34,  0, 65,  0, 34,  0, 28,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_057[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 60,  0,  2,  0,  1,  0,  1,  0, 61,  0, 67,  0, 65,  0, 65,  0, 65,  0, 62,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_058[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 12,  0, 12,  0,  0,  0,  0,  0,  0,  0, 12,  0, 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_059[] = {  9,  0,  0,  8,  0,  4,  0,  4,  0, 12,  0, 12,  0,  0,  0,  0,  0,  0,  0, 12,  0, 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_060[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  4,  0,  8,  0, 16,  0, 32,  0, 32,  0, 16,  0,  8,  0,  4,  0,  2,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_061[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,  0,  0,  0,  0,  0,127,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_062[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0, 16,  0,  8,  0,  4,  0,  2,  0,  2,  0,  4,  0,  8,  0, 16,  0, 32,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_063[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  8,  0,  8,  0,  4,  0,  2,  0,  1,  0, 65,  0, 65,  0, 62,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_064[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 64,  0, 64,  0, 77,  0, 83,  0, 81,  0, 79,  0, 65,  0, 65,  0, 62,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_065[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 65,  0, 65,  0,127,  0, 65,  0, 65,  0, 65,  0, 34,  0, 20,  0,  8,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_066[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,126,  0, 33,  0, 33,  0, 33,  0, 33,  0,126,  0, 33,  0, 33,  0, 33,  0,126,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_067[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 65,  0, 64,  0, 64,  0, 64,  0, 64,  0, 64,  0, 64,  0, 65,  0, 62,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_068[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,126,  0, 33,  0, 33,  0, 33,  0, 33,  0, 33,  0, 33,  0, 33,  0, 33,  0,126,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_069[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,127,  0, 32,  0, 32,  0, 32,  0, 32,  0, 60,  0, 32,  0, 32,  0, 32,  0,127,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_070[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0, 32,  0, 32,  0, 32,  0, 32,  0, 60,  0, 32,  0, 32,  0, 32,  0,127,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_071[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 65,  0, 65,  0, 65,  0, 71,  0, 64,  0, 64,  0, 64,  0, 65,  0, 62,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_072[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0,127,  0, 65,  0, 65,  0, 65,  0, 65,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_073[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0, 62,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_074[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 60,  0, 66,  0,  2,  0,  2,  0,  2,  0,  2,  0,  2,  0,  2,  0,  2,  0, 15,128,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_075[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 66,  0, 68,  0, 72,  0, 80,  0,112,  0, 72,  0, 68,  0, 66,  0, 65,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_076[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,127,  0, 64,  0, 64,  0, 64,  0, 64,  0, 64,  0, 64,  0, 64,  0, 64,  0, 64,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_077[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 65,  0, 65,  0, 73,  0, 73,  0, 85,  0, 85,  0, 99,  0, 65,  0, 65,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_078[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 65,  0, 65,  0, 67,  0, 69,  0, 73,  0, 81,  0, 97,  0, 65,  0, 65,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_079[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 62,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_080[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0, 64,  0, 64,  0, 64,  0, 64,  0,126,  0, 65,  0, 65,  0, 65,  0,126,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_081[] = {  9,  0,  0,  0,  0,  3,  0,  4,  0, 62,  0, 73,  0, 81,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 62,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_082[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 65,  0, 66,  0, 68,  0, 72,  0,126,  0, 65,  0, 65,  0, 65,  0,126,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_083[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 65,  0, 65,  0,  1,  0,  6,  0, 56,  0, 64,  0, 65,  0, 65,  0, 62,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_084[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,127,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_085[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_086[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0, 20,  0, 20,  0, 20,  0, 34,  0, 34,  0, 34,  0, 65,  0, 65,  0, 65,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_087[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 34,  0, 85,  0, 73,  0, 73,  0, 73,  0, 73,  0, 65,  0, 65,  0, 65,  0, 65,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_088[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 65,  0, 34,  0, 20,  0,  8,  0,  8,  0, 20,  0, 34,  0, 65,  0, 65,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_089[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0, 20,  0, 34,  0, 65,  0, 65,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_090[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,127,  0, 64,  0, 64,  0, 32,  0, 16,  0,  8,  0,  4,  0,  2,  0,  1,  0,127,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_091[] = {  9,  0,  0,  0,  0,  0,  0, 30,  0, 16,  0, 16,  0, 16,  0, 16,  0, 16,  0, 16,  0, 16,  0, 16,  0, 16,  0, 16,  0, 30,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_092[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  2,  0,  2,  0,  4,  0,  8,  0,  8,  0, 16,  0, 32,  0, 32,  0, 64,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_093[] = {  9,  0,  0,  0,  0,  0,  0, 60,  0,  4,  0,  4,  0,  4,  0,  4,  0,  4,  0,  4,  0,  4,  0,  4,  0,  4,  0,  4,  0, 60,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_094[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 34,  0, 20,  0,  8,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_095[] = {  9,  0,  0,  0,  0,  0,  0,255,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_096[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  8,  0, 16,  0, 48,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_097[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 61,  0, 67,  0, 65,  0, 63,  0,  1,  0,  1,  0, 62,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_098[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 94,  0, 97,  0, 65,  0, 65,  0, 65,  0, 97,  0, 94,  0, 64,  0, 64,  0, 64,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_099[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 65,  0, 64,  0, 64,  0, 64,  0, 65,  0, 62,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_100[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 61,  0, 67,  0, 65,  0, 65,  0, 65,  0, 67,  0, 61,  0,  1,  0,  1,  0,  1,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_101[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 64,  0, 64,  0,127,  0, 65,  0, 65,  0, 62,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_102[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0, 16,  0, 16,  0, 16,  0,124,  0, 16,  0, 16,  0, 17,  0, 17,  0, 14,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_103[] = {  9,  0,  0, 62,  0, 65,  0, 65,  0, 62,  0, 64,  0, 60,  0, 66,  0, 66,  0, 66,  0, 61,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_104[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 97,  0, 94,  0, 64,  0, 64,  0, 64,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_105[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0, 56,  0,  0,  0,  0,  0, 24,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_106[] = {  9,  0,  0, 60,  0, 66,  0, 66,  0, 66,  0,  2,  0,  2,  0,  2,  0,  2,  0,  2,  0, 14,  0,  0,  0,  0,  0,  6,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_107[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 70,  0, 88,  0, 96,  0, 88,  0, 70,  0, 65,  0, 64,  0, 64,  0, 64,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_108[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0, 56,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_109[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 73,  0, 73,  0, 73,  0, 73,  0, 73,  0,118,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_110[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 97,  0, 94,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_111[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 62,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_112[] = {  9,  0,  0, 64,  0, 64,  0, 64,  0, 94,  0, 97,  0, 65,  0, 65,  0, 65,  0, 97,  0, 94,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_113[] = {  9,  0,  0,  1,  0,  1,  0,  1,  0, 61,  0, 67,  0, 65,  0, 65,  0, 65,  0, 67,  0, 61,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_114[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0, 32,  0, 32,  0, 32,  0, 33,  0, 49,  0, 78,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_115[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 65,  0,  1,  0, 62,  0, 64,  0, 65,  0, 62,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_116[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 14,  0, 17,  0, 16,  0, 16,  0, 16,  0, 16,  0,126,  0, 16,  0, 16,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_117[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 61,  0, 66,  0, 66,  0, 66,  0, 66,  0, 66,  0, 66,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_118[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0, 20,  0, 20,  0, 34,  0, 34,  0, 65,  0, 65,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_119[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 34,  0, 85,  0, 73,  0, 73,  0, 73,  0, 65,  0, 65,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_120[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 34,  0, 20,  0,  8,  0, 20,  0, 34,  0, 65,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_121[] = {  9,  0,  0, 60,  0, 66,  0,  2,  0, 58,  0, 70,  0, 66,  0, 66,  0, 66,  0, 66,  0, 66,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_122[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,127,  0, 32,  0, 16,  0,  8,  0,  4,  0,  2,  0,127,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_123[] = {  9,  0,  0,  0,  0,  0,  0,  7,  0,  8,  0,  8,  0,  8,  0,  4,  0, 24,  0, 24,  0,  4,  0,  8,  0,  8,  0,  8,  0,  7,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_124[] = {  9,  0,  0,  0,  0,  0,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_125[] = {  9,  0,  0,  0,  0,  0,  0,112,  0,  8,  0,  8,  0,  8,  0, 16,  0, 12,  0, 12,  0, 16,  0,  8,  0,  8,  0,  8,  0,112,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_126[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 70,  0, 73,  0, 49,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_127[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_128[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_129[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_130[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_131[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_132[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_133[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_134[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_135[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_136[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_137[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_138[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_139[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_140[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_141[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_142[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_143[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_144[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_145[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_146[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_147[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_148[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_149[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_150[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_151[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_152[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_153[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_154[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_155[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_156[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_157[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_158[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_159[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_160[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_161[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  0,  0,  0,  0,  8,  0,  8,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_162[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0, 60,  0, 82,  0, 80,  0, 72,  0, 74,  0, 60,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_163[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 46,  0, 81,  0, 48,  0, 16,  0, 16,  0,124,  0, 16,  0, 16,  0, 17,  0, 14,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_164[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 62,  0, 34,  0, 34,  0, 62,  0, 65,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_165[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  8,  0,  8,  0, 62,  0,  8,  0, 62,  0, 20,  0, 34,  0, 65,  0, 65,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_166[] = {  9,  0,  0,  0,  0,  0,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  0,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_167[] = {  9,  0,  0,  0,  0,  0,  0, 24,  0, 36,  0,  4,  0, 24,  0, 36,  0, 36,  0, 36,  0, 24,  0, 32,  0, 36,  0, 24,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_168[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 34,  0, 34,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_169[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,  0, 66,  0,153,  0,165,  0,161,  0,165,  0,153,  0, 66,  0, 60,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_170[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,124,  0,  0,  0, 60,  0, 72,  0, 56,  0, 72,  0, 48,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_171[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  9,  0, 18,  0, 36,  0, 72,  0, 72,  0, 36,  0, 18,  0,  9,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_172[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  2,  0,  2,  0,126,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_173[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_174[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,  0, 66,  0,165,  0,169,  0,185,  0,165,  0,185,  0, 66,  0, 60,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_175[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,126,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_176[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 12,  0, 18,  0, 18,  0, 12,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_177[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,  0,  0,  0,  8,  0,  8,  0,  8,  0,127,  0,  8,  0,  8,  0,  8,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_178[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,120,  0, 64,  0, 48,  0,  8,  0, 72,  0, 48,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_179[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 48,  0, 72,  0,  8,  0, 16,  0, 72,  0, 48,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_180[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  8,  0,  4,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_181[] = {  9,  0,  0,  0,  0, 64,  0, 64,  0, 93,  0, 99,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_182[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  5,  0,  5,  0,  5,  0,  5,  0,  5,  0, 61,  0, 69,  0, 69,  0, 69,  0, 63,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_183[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 12,  0, 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_184[] = {  9,  0,  0, 24,  0, 36,  0, 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_185[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,112,  0, 32,  0, 32,  0, 32,  0, 96,  0, 32,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_186[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,124,  0,  0,  0, 56,  0, 68,  0, 68,  0, 56,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_187[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 72,  0, 36,  0, 18,  0,  9,  0,  9,  0, 18,  0, 36,  0, 72,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_188[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  3,  0, 13,  0,  9,  0,  5,  0,115,  0, 33,  0, 32,  0, 32,  0, 96,  0, 32,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_189[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 15,  0,  8,  0,  6,  0,  1,  0,121,  0, 38,  0, 32,  0, 32,  0, 96,  0, 32,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_190[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  3,  0, 13,  0,  9,  0,  5,  0, 51,  0, 73,  0,  8,  0, 16,  0, 72,  0, 48,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_191[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 65,  0, 65,  0, 64,  0, 32,  0, 16,  0,  8,  0,  8,  0,  0,  0,  8,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_192[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 65,  0, 65,  0,127,  0, 65,  0, 65,  0, 34,  0, 28,  0,  0,  0,  8,  0, 16,  0, 32,  0};\r
+static const GLubyte Fixed9x15_Character_193[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 65,  0, 65,  0,127,  0, 65,  0, 65,  0, 34,  0, 28,  0,  0,  0,  8,  0,  4,  0,  2,  0};\r
+static const GLubyte Fixed9x15_Character_194[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 65,  0, 65,  0,127,  0, 65,  0, 65,  0, 34,  0, 28,  0,  0,  0, 34,  0, 20,  0,  8,  0};\r
+static const GLubyte Fixed9x15_Character_195[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 65,  0, 65,  0,127,  0, 65,  0, 65,  0, 34,  0, 28,  0,  0,  0, 78,  0, 49,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_196[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 65,  0, 65,  0,127,  0, 65,  0, 65,  0, 34,  0, 28,  0,  0,  0, 34,  0, 34,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_197[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 65,  0, 65,  0,127,  0, 65,  0, 65,  0, 34,  0, 20,  0, 28,  0, 34,  0, 28,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_198[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 79,  0, 72,  0, 72,  0, 72,  0,126,  0, 72,  0, 72,  0, 72,  0, 72,  0, 55,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_199[] = {  9,  0,  0, 24,  0, 36,  0, 12,  0, 62,  0, 65,  0, 64,  0, 64,  0, 64,  0, 64,  0, 64,  0, 64,  0, 65,  0, 62,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_200[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,127,  0, 32,  0, 32,  0, 32,  0, 60,  0, 32,  0, 32,  0,127,  0,  0,  0,  8,  0, 16,  0, 32,  0};\r
+static const GLubyte Fixed9x15_Character_201[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,127,  0, 32,  0, 32,  0, 32,  0, 60,  0, 32,  0, 32,  0,127,  0,  0,  0,  8,  0,  4,  0,  2,  0};\r
+static const GLubyte Fixed9x15_Character_202[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,127,  0, 32,  0, 32,  0, 32,  0, 60,  0, 32,  0, 32,  0,127,  0,  0,  0, 34,  0, 20,  0,  8,  0};\r
+static const GLubyte Fixed9x15_Character_203[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,127,  0, 32,  0, 32,  0, 32,  0, 60,  0, 32,  0, 32,  0,127,  0,  0,  0, 34,  0, 34,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_204[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0, 62,  0,  0,  0,  8,  0, 16,  0, 32,  0};\r
+static const GLubyte Fixed9x15_Character_205[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0, 62,  0,  0,  0,  8,  0,  4,  0,  2,  0};\r
+static const GLubyte Fixed9x15_Character_206[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0, 62,  0,  0,  0, 34,  0, 20,  0,  8,  0};\r
+static const GLubyte Fixed9x15_Character_207[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0, 62,  0,  0,  0, 34,  0, 34,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_208[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,124,  0, 33,  0, 33,  0, 33,  0, 33,  0,225,  0, 33,  0, 33,  0, 33,  0,124,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_209[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 67,  0, 69,  0, 73,  0, 73,  0, 81,  0, 97,  0, 65,  0,  0,  0, 78,  0, 49,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_210[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 62,  0,  0,  0,  8,  0, 16,  0, 32,  0};\r
+static const GLubyte Fixed9x15_Character_211[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 62,  0,  0,  0,  8,  0,  4,  0,  2,  0};\r
+static const GLubyte Fixed9x15_Character_212[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 62,  0,  0,  0, 34,  0, 20,  0,  8,  0};\r
+static const GLubyte Fixed9x15_Character_213[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 62,  0,  0,  0, 78,  0, 49,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_214[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 62,  0,  0,  0, 34,  0, 34,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_215[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 34,  0, 20,  0,  8,  0, 20,  0, 34,  0, 65,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_216[] = {  9,  0,  0,  0,  0,  0,  0, 64,  0, 62,  0, 97,  0, 81,  0, 81,  0, 73,  0, 73,  0, 69,  0, 69,  0, 67,  0, 62,  0,  1,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_217[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0,  0,  0,  8,  0, 16,  0, 32,  0};\r
+static const GLubyte Fixed9x15_Character_218[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0,  0,  0,  8,  0,  4,  0,  2,  0};\r
+static const GLubyte Fixed9x15_Character_219[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0,  0,  0, 34,  0, 20,  0,  8,  0};\r
+static const GLubyte Fixed9x15_Character_220[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0,  0,  0, 34,  0, 34,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_221[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  8,  0,  8,  0,  8,  0, 20,  0, 34,  0, 65,  0, 65,  0,  0,  0,  8,  0,  4,  0,  2,  0};\r
+static const GLubyte Fixed9x15_Character_222[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0, 64,  0, 64,  0,126,  0, 65,  0, 65,  0, 65,  0,126,  0, 64,  0, 64,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_223[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 44,  0, 34,  0, 34,  0, 34,  0, 36,  0,104,  0, 36,  0, 34,  0, 34,  0, 28,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_224[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 61,  0, 67,  0, 65,  0, 63,  0,  1,  0,  1,  0, 62,  0,  0,  0,  4,  0,  8,  0, 16,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_225[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 61,  0, 67,  0, 65,  0, 63,  0,  1,  0,  1,  0, 62,  0,  0,  0,  8,  0,  4,  0,  2,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_226[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 61,  0, 67,  0, 65,  0, 63,  0,  1,  0,  1,  0, 62,  0,  0,  0, 34,  0, 20,  0,  8,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_227[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 61,  0, 67,  0, 65,  0, 63,  0,  1,  0,  1,  0, 62,  0,  0,  0, 38,  0, 25,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_228[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 61,  0, 67,  0, 65,  0, 63,  0,  1,  0,  1,  0, 62,  0,  0,  0, 34,  0, 34,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_229[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 61,  0, 67,  0, 65,  0, 63,  0,  1,  0,  1,  0, 62,  0,  0,  0, 12,  0, 18,  0, 12,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_230[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 55,  0, 73,  0, 72,  0, 62,  0,  9,  0, 73,  0, 54,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_231[] = {  9,  0,  0, 24,  0, 36,  0, 12,  0, 62,  0, 65,  0, 64,  0, 64,  0, 64,  0, 65,  0, 62,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_232[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 64,  0, 64,  0,127,  0, 65,  0, 65,  0, 62,  0,  0,  0,  8,  0, 16,  0, 32,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_233[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 64,  0, 64,  0,127,  0, 65,  0, 65,  0, 62,  0,  0,  0,  8,  0,  4,  0,  2,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_234[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 64,  0, 64,  0,127,  0, 65,  0, 65,  0, 62,  0,  0,  0, 34,  0, 20,  0,  8,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_235[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 64,  0, 64,  0,127,  0, 65,  0, 65,  0, 62,  0,  0,  0, 34,  0, 34,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_236[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0, 56,  0,  0,  0,  8,  0, 16,  0, 32,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_237[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0, 56,  0,  0,  0, 16,  0,  8,  0,  4,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_238[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0, 56,  0,  0,  0, 68,  0, 40,  0, 16,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_239[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0, 56,  0,  0,  0, 36,  0, 36,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_240[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 62,  0,  4,  0, 40,  0, 24,  0, 36,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_241[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 97,  0, 94,  0,  0,  0, 78,  0, 49,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_242[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 62,  0,  0,  0,  8,  0, 16,  0, 32,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_243[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 62,  0,  0,  0,  8,  0,  4,  0,  2,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_244[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 62,  0,  0,  0, 34,  0, 20,  0,  8,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_245[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 62,  0,  0,  0, 78,  0, 49,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_246[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 62,  0,  0,  0, 34,  0, 34,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_247[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0, 28,  0,  8,  0,  0,  0,127,  0,  0,  0,  8,  0, 28,  0,  8,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_248[] = {  9,  0,  0,  0,  0,  0,  0, 64,  0, 62,  0, 81,  0, 81,  0, 73,  0, 69,  0, 69,  0, 62,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_249[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 61,  0, 66,  0, 66,  0, 66,  0, 66,  0, 66,  0, 66,  0,  0,  0,  8,  0, 16,  0, 32,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_250[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 61,  0, 66,  0, 66,  0, 66,  0, 66,  0, 66,  0, 66,  0,  0,  0,  8,  0,  4,  0,  2,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_251[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 61,  0, 66,  0, 66,  0, 66,  0, 66,  0, 66,  0, 66,  0,  0,  0, 34,  0, 20,  0,  8,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_252[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 61,  0, 66,  0, 66,  0, 66,  0, 66,  0, 66,  0, 66,  0,  0,  0, 36,  0, 36,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_253[] = {  9,  0,  0, 60,  0, 66,  0,  2,  0, 58,  0, 70,  0, 66,  0, 66,  0, 66,  0, 66,  0, 66,  0,  0,  0, 16,  0,  8,  0,  4,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_254[] = {  9,  0,  0, 64,  0, 64,  0, 64,  0, 94,  0, 97,  0, 65,  0, 65,  0, 97,  0, 94,  0, 64,  0, 64,  0, 64,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Fixed9x15_Character_255[] = {  9,  0,  0, 60,  0, 66,  0,  2,  0, 58,  0, 70,  0, 66,  0, 66,  0, 66,  0, 66,  0, 66,  0,  0,  0, 36,  0, 36,  0,  0,  0,  0,  0};\r
+\r
+/* The font characters mapping: */\r
+static const GLubyte* Fixed9x15_Character_Map[] = {Fixed9x15_Character_000,Fixed9x15_Character_001,Fixed9x15_Character_002,Fixed9x15_Character_003,Fixed9x15_Character_004,Fixed9x15_Character_005,Fixed9x15_Character_006,Fixed9x15_Character_007,Fixed9x15_Character_008,Fixed9x15_Character_009,Fixed9x15_Character_010,Fixed9x15_Character_011,Fixed9x15_Character_012,Fixed9x15_Character_013,Fixed9x15_Character_014,Fixed9x15_Character_015,\r
+                                                   Fixed9x15_Character_016,Fixed9x15_Character_017,Fixed9x15_Character_018,Fixed9x15_Character_019,Fixed9x15_Character_020,Fixed9x15_Character_021,Fixed9x15_Character_022,Fixed9x15_Character_023,Fixed9x15_Character_024,Fixed9x15_Character_025,Fixed9x15_Character_026,Fixed9x15_Character_027,Fixed9x15_Character_028,Fixed9x15_Character_029,Fixed9x15_Character_030,Fixed9x15_Character_031,\r
+                                                   Fixed9x15_Character_032,Fixed9x15_Character_033,Fixed9x15_Character_034,Fixed9x15_Character_035,Fixed9x15_Character_036,Fixed9x15_Character_037,Fixed9x15_Character_038,Fixed9x15_Character_039,Fixed9x15_Character_040,Fixed9x15_Character_041,Fixed9x15_Character_042,Fixed9x15_Character_043,Fixed9x15_Character_044,Fixed9x15_Character_045,Fixed9x15_Character_046,Fixed9x15_Character_047,\r
+                                                   Fixed9x15_Character_048,Fixed9x15_Character_049,Fixed9x15_Character_050,Fixed9x15_Character_051,Fixed9x15_Character_052,Fixed9x15_Character_053,Fixed9x15_Character_054,Fixed9x15_Character_055,Fixed9x15_Character_056,Fixed9x15_Character_057,Fixed9x15_Character_058,Fixed9x15_Character_059,Fixed9x15_Character_060,Fixed9x15_Character_061,Fixed9x15_Character_062,Fixed9x15_Character_063,\r
+                                                   Fixed9x15_Character_064,Fixed9x15_Character_065,Fixed9x15_Character_066,Fixed9x15_Character_067,Fixed9x15_Character_068,Fixed9x15_Character_069,Fixed9x15_Character_070,Fixed9x15_Character_071,Fixed9x15_Character_072,Fixed9x15_Character_073,Fixed9x15_Character_074,Fixed9x15_Character_075,Fixed9x15_Character_076,Fixed9x15_Character_077,Fixed9x15_Character_078,Fixed9x15_Character_079,\r
+                                                   Fixed9x15_Character_080,Fixed9x15_Character_081,Fixed9x15_Character_082,Fixed9x15_Character_083,Fixed9x15_Character_084,Fixed9x15_Character_085,Fixed9x15_Character_086,Fixed9x15_Character_087,Fixed9x15_Character_088,Fixed9x15_Character_089,Fixed9x15_Character_090,Fixed9x15_Character_091,Fixed9x15_Character_092,Fixed9x15_Character_093,Fixed9x15_Character_094,Fixed9x15_Character_095,\r
+                                                   Fixed9x15_Character_096,Fixed9x15_Character_097,Fixed9x15_Character_098,Fixed9x15_Character_099,Fixed9x15_Character_100,Fixed9x15_Character_101,Fixed9x15_Character_102,Fixed9x15_Character_103,Fixed9x15_Character_104,Fixed9x15_Character_105,Fixed9x15_Character_106,Fixed9x15_Character_107,Fixed9x15_Character_108,Fixed9x15_Character_109,Fixed9x15_Character_110,Fixed9x15_Character_111,\r
+                                                   Fixed9x15_Character_112,Fixed9x15_Character_113,Fixed9x15_Character_114,Fixed9x15_Character_115,Fixed9x15_Character_116,Fixed9x15_Character_117,Fixed9x15_Character_118,Fixed9x15_Character_119,Fixed9x15_Character_120,Fixed9x15_Character_121,Fixed9x15_Character_122,Fixed9x15_Character_123,Fixed9x15_Character_124,Fixed9x15_Character_125,Fixed9x15_Character_126,Fixed9x15_Character_032,\r
+                                                   Fixed9x15_Character_032,Fixed9x15_Character_032,Fixed9x15_Character_032,Fixed9x15_Character_032,Fixed9x15_Character_032,Fixed9x15_Character_032,Fixed9x15_Character_032,Fixed9x15_Character_032,Fixed9x15_Character_032,Fixed9x15_Character_032,Fixed9x15_Character_032,Fixed9x15_Character_032,Fixed9x15_Character_032,Fixed9x15_Character_032,Fixed9x15_Character_032,Fixed9x15_Character_032,\r
+                                                   Fixed9x15_Character_032,Fixed9x15_Character_032,Fixed9x15_Character_032,Fixed9x15_Character_032,Fixed9x15_Character_032,Fixed9x15_Character_032,Fixed9x15_Character_032,Fixed9x15_Character_032,Fixed9x15_Character_032,Fixed9x15_Character_032,Fixed9x15_Character_032,Fixed9x15_Character_032,Fixed9x15_Character_032,Fixed9x15_Character_032,Fixed9x15_Character_032,Fixed9x15_Character_032,\r
+                                                   Fixed9x15_Character_160,Fixed9x15_Character_161,Fixed9x15_Character_162,Fixed9x15_Character_163,Fixed9x15_Character_164,Fixed9x15_Character_165,Fixed9x15_Character_166,Fixed9x15_Character_167,Fixed9x15_Character_168,Fixed9x15_Character_169,Fixed9x15_Character_170,Fixed9x15_Character_171,Fixed9x15_Character_172,Fixed9x15_Character_173,Fixed9x15_Character_174,Fixed9x15_Character_175,\r
+                                                   Fixed9x15_Character_176,Fixed9x15_Character_177,Fixed9x15_Character_178,Fixed9x15_Character_179,Fixed9x15_Character_180,Fixed9x15_Character_181,Fixed9x15_Character_182,Fixed9x15_Character_183,Fixed9x15_Character_184,Fixed9x15_Character_185,Fixed9x15_Character_186,Fixed9x15_Character_187,Fixed9x15_Character_188,Fixed9x15_Character_189,Fixed9x15_Character_190,Fixed9x15_Character_191,\r
+                                                   Fixed9x15_Character_192,Fixed9x15_Character_193,Fixed9x15_Character_194,Fixed9x15_Character_195,Fixed9x15_Character_196,Fixed9x15_Character_197,Fixed9x15_Character_198,Fixed9x15_Character_199,Fixed9x15_Character_200,Fixed9x15_Character_201,Fixed9x15_Character_202,Fixed9x15_Character_203,Fixed9x15_Character_204,Fixed9x15_Character_205,Fixed9x15_Character_206,Fixed9x15_Character_207,\r
+                                                   Fixed9x15_Character_208,Fixed9x15_Character_209,Fixed9x15_Character_210,Fixed9x15_Character_211,Fixed9x15_Character_212,Fixed9x15_Character_213,Fixed9x15_Character_214,Fixed9x15_Character_215,Fixed9x15_Character_216,Fixed9x15_Character_217,Fixed9x15_Character_218,Fixed9x15_Character_219,Fixed9x15_Character_220,Fixed9x15_Character_221,Fixed9x15_Character_222,Fixed9x15_Character_223,\r
+                                                   Fixed9x15_Character_224,Fixed9x15_Character_225,Fixed9x15_Character_226,Fixed9x15_Character_227,Fixed9x15_Character_228,Fixed9x15_Character_229,Fixed9x15_Character_230,Fixed9x15_Character_231,Fixed9x15_Character_232,Fixed9x15_Character_233,Fixed9x15_Character_234,Fixed9x15_Character_235,Fixed9x15_Character_236,Fixed9x15_Character_237,Fixed9x15_Character_238,Fixed9x15_Character_239,\r
+                                                   Fixed9x15_Character_240,Fixed9x15_Character_241,Fixed9x15_Character_242,Fixed9x15_Character_243,Fixed9x15_Character_244,Fixed9x15_Character_245,Fixed9x15_Character_246,Fixed9x15_Character_247,Fixed9x15_Character_248,Fixed9x15_Character_249,Fixed9x15_Character_250,Fixed9x15_Character_251,Fixed9x15_Character_252,Fixed9x15_Character_253,Fixed9x15_Character_254,Fixed9x15_Character_255,NULL};\r
+\r
+/* The font structure: */\r
+const SFG_Font fgFontFixed9x15 = { "-misc-fixed-medium-r-normal--15-140-75-75-C-90-iso8859-1", 256, 16, Fixed9x15_Character_Map, 0, 4 };\r
+\r
+static const GLubyte Helvetica10_Character_000[] = {  8,  0,  0,  0, 84,  0, 68,  0, 68,  0, 84,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_001[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_002[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_003[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_004[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_005[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_006[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_007[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_008[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_009[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_010[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_011[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_012[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_013[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_014[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_015[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_016[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_017[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_018[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_019[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_020[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_021[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_022[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_023[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_024[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_025[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_026[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_027[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_028[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_029[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_030[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_031[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_032[] = {  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_033[] = {  3,  0,  0,  0, 64,  0, 64, 64, 64, 64, 64, 64,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_034[] = {  4,  0,  0,  0,  0,  0,  0,  0,  0,  0, 80, 80,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_035[] = {  6,  0,  0,  0, 80, 80,248, 40,124, 40, 40,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_036[] = {  6,  0,  0, 32,112,168, 40,112,160,168,112, 32,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_037[] = {  9,  0,  0,  0,  0,  0,  0, 38,  0, 41,  0, 22,  0, 16,  0,  8,  0,104,  0,148,  0,100,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_038[] = {  8,  0,  0,  0, 50, 76, 76, 82, 48, 40, 40, 16,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_039[] = {  3,  0,  0,  0,  0,  0,  0,  0,  0, 64, 32, 32,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_040[] = {  4,  0, 32, 64, 64,128,128,128,128, 64, 64, 32,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_041[] = {  4,  0, 64, 32, 32, 16, 16, 16, 16, 32, 32, 64,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_042[] = {  4,  0,  0,  0,  0,  0,  0,  0,  0,160, 64,160,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_043[] = {  6,  0,  0,  0,  0, 32, 32,248, 32, 32,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_044[] = {  3,  0,128, 64, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_045[] = {  7,  0,  0,  0,  0,  0,  0,124,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_046[] = {  3,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_047[] = {  3,  0,  0,  0,128,128, 64, 64, 64, 64, 32, 32,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_048[] = {  6,  0,  0,  0,112,136,136,136,136,136,136,112,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_049[] = {  6,  0,  0,  0, 32, 32, 32, 32, 32, 32, 96, 32,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_050[] = {  6,  0,  0,  0,248,128, 64, 48,  8,  8,136,112,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_051[] = {  6,  0,  0,  0,112,136,  8,  8, 48,  8,136,112,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_052[] = {  6,  0,  0,  0, 16, 16,248,144, 80, 80, 48, 16,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_053[] = {  6,  0,  0,  0,112,136,  8,  8,240,128,128,248,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_054[] = {  6,  0,  0,  0,112,136,136,200,176,128,136,112,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_055[] = {  6,  0,  0,  0, 64, 64, 32, 32, 16, 16,  8,248,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_056[] = {  6,  0,  0,  0,112,136,136,136,112,136,136,112,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_057[] = {  6,  0,  0,  0,112,136,  8,104,152,136,136,112,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_058[] = {  3,  0,  0,  0, 64,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_059[] = {  3,  0,128, 64, 64,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_060[] = {  6,  0,  0,  0,  0, 16, 32, 64, 32, 16,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_061[] = {  5,  0,  0,  0,  0,  0,240,  0,240,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_062[] = {  6,  0,  0,  0,  0, 64, 32, 16, 32, 64,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_063[] = {  6,  0,  0,  0, 32,  0, 32, 32, 16,  8, 72, 48,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_064[] = { 11,  0,  0, 62,  0, 64,  0,155,  0,164,128,164,128,162, 64,146, 64, 77, 64, 32,128, 31,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_065[] = {  7,  0,  0,  0,130,130,124, 68, 40, 40, 16, 16,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_066[] = {  7,  0,  0,  0,120, 68, 68, 68,120, 68, 68,120,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_067[] = {  8,  0,  0,  0, 60, 66, 64, 64, 64, 64, 66, 60,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_068[] = {  8,  0,  0,  0,120, 68, 66, 66, 66, 66, 68,120,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_069[] = {  7,  0,  0,  0,124, 64, 64, 64,124, 64, 64,124,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_070[] = {  6,  0,  0,  0, 64, 64, 64, 64,120, 64, 64,124,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_071[] = {  8,  0,  0,  0, 58, 70, 66, 70, 64, 64, 66, 60,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_072[] = {  8,  0,  0,  0, 66, 66, 66, 66,126, 66, 66, 66,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_073[] = {  3,  0,  0,  0, 64, 64, 64, 64, 64, 64, 64, 64,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_074[] = {  5,  0,  0,  0, 96,144, 16, 16, 16, 16, 16, 16,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_075[] = {  7,  0,  0,  0, 68, 68, 72, 72,112, 80, 72, 68,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_076[] = {  6,  0,  0,  0,120, 64, 64, 64, 64, 64, 64, 64,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_077[] = {  9,  0,  0,  0,  0,  0,  0, 73,  0, 73,  0, 73,  0, 85,  0, 85,  0, 99,  0, 99,  0, 65,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_078[] = {  8,  0,  0,  0, 70, 70, 74, 74, 82, 82, 98, 98,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_079[] = {  8,  0,  0,  0, 60, 66, 66, 66, 66, 66, 66, 60,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_080[] = {  7,  0,  0,  0, 64, 64, 64, 64,120, 68, 68,120,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_081[] = {  8,  0,  0,  1, 62, 70, 74, 66, 66, 66, 66, 60,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_082[] = {  7,  0,  0,  0, 68, 68, 68, 68,120, 68, 68,120,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_083[] = {  7,  0,  0,  0, 56, 68, 68,  4, 56, 64, 68, 56,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_084[] = {  5,  0,  0,  0, 32, 32, 32, 32, 32, 32, 32,248,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_085[] = {  8,  0,  0,  0, 60, 66, 66, 66, 66, 66, 66, 66,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_086[] = {  7,  0,  0,  0, 16, 40, 40, 68, 68, 68,130,130,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_087[] = {  9,  0,  0,  0,  0,  0,  0, 34,  0, 34,  0, 34,  0, 85,  0, 73,  0, 73,  0,136,128,136,128,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_088[] = {  7,  0,  0,  0, 68, 68, 40, 40, 16, 40, 68, 68,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_089[] = {  7,  0,  0,  0, 16, 16, 16, 40, 40, 68, 68,130,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_090[] = {  7,  0,  0,  0,124, 64, 32, 16, 16,  8,  4,124,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_091[] = {  3,  0, 96, 64, 64, 64, 64, 64, 64, 64, 64, 96,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_092[] = {  3,  0,  0,  0, 32, 32, 64, 64, 64, 64,128,128,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_093[] = {  3,  0,192, 64, 64, 64, 64, 64, 64, 64, 64,192,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_094[] = {  6,  0,  0,  0,  0,  0,  0,136, 80, 80, 32, 32,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_095[] = {  6,  0,252,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_096[] = {  3,  0,  0,  0,  0,  0,  0,  0,  0, 63, 64, 32,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_097[] = {  5,  0,  0,  0,104,144,144,112, 16,224,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_098[] = {  6,  0,  0,  0,176,200,136,136,200,176,128,128,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_099[] = {  5,  0,  0,  0, 96,144,128,128,144, 96,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_100[] = {  6,  0,  0,  0,104,152,136,136,152,104,  8,  8,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_101[] = {  5,  0,  0,  0, 96,144,128,240,144, 96,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_102[] = {  4,  0,  0,  0, 64, 64, 64, 64, 64,224, 64, 48,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_103[] = {  6,  0,112,  8,104,152,136,136,152,104,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_104[] = {  6,  0,  0,  0,136,136,136,136,200,176,128,128,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_105[] = {  2,  0,  0,  0,128,128,128,128,128,128,  0,128,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_106[] = {  2,  0,  0,128,128,128,128,128,128,128,  0,128,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_107[] = {  5,  0,  0,  0,144,144,160,192,160,144,128,128,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_108[] = {  2,  0,  0,  0,128,128,128,128,128,128,128,128,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_109[] = {  8,  0,  0,  0,146,146,146,146,146,236,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_110[] = {  6,  0,  0,  0,136,136,136,136,200,176,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_111[] = {  6,  0,  0,  0,112,136,136,136,136,112,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_112[] = {  6,  0,128,128,176,200,136,136,200,176,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_113[] = {  6,  0,  8,  8,104,152,136,136,152,104,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_114[] = {  4,  0,  0,  0,128,128,128,128,192,160,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_115[] = {  5,  0,  0,  0, 96,144, 16, 96,144, 96,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_116[] = {  4,  0,  0,  0, 96, 64, 64, 64, 64,224, 64, 64,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_117[] = {  5,  0,  0,  0,112,144,144,144,144,144,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_118[] = {  6,  0,  0,  0, 32, 32, 80, 80,136,136,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_119[] = {  8,  0,  0,  0, 40, 40, 84, 84,146,146,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_120[] = {  6,  0,  0,  0,136,136, 80, 32, 80,136,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_121[] = {  5,  0,128, 64, 64, 96,160,160,144,144,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_122[] = {  5,  0,  0,  0,240,128, 64, 32, 16,240,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_123[] = {  3,  0, 32, 64, 64, 64, 64,128, 64, 64, 64, 32,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_124[] = {  3,  0, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_125[] = {  3,  0,128, 64, 64, 64, 64, 32, 64, 64, 64,128,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_126[] = {  7,  0,  0,  0,  0,  0,  0,152,100,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_127[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_128[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_129[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_130[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_131[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_132[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_133[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_134[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_135[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_136[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_137[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_138[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_139[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_140[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_141[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_142[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_143[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_144[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_145[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_146[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_147[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_148[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_149[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_150[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_151[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_152[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_153[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_154[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_155[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_156[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_157[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_158[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_159[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_160[] = {  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_161[] = {  3,  0, 64, 64, 64, 64, 64, 64,  0, 64,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_162[] = {  6,  0,  0, 64,112,168,160,160,168,112, 16,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_163[] = {  6,  0,  0,  0,176, 72, 64, 64,224, 64, 72, 48,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_164[] = {  5,  0,  0,  0,  0,144, 96,144,144, 96,144,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_165[] = {  6,  0,  0,  0, 32,248, 32,248, 80, 80,136,136,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_166[] = {  3,  0, 64, 64, 64, 64,  0,  0, 64, 64, 64, 64,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_167[] = {  6,  0,112,136, 24,112,200,152,112,192,136,112,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_168[] = {  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,160,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_169[] = {  9,  0,  0,  0,  0,  0,  0, 28,  0, 34,  0, 77,  0, 81,  0, 77,  0, 34,  0, 28,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_170[] = {  4,  0,  0,  0,  0,  0,  0,224,  0,160, 32,224,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_171[] = {  6,  0,  0,  0, 40, 80,160, 80, 40,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_172[] = {  7,  0,  0,  0,  0,  0,  4,  4,124,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_173[] = {  4,  0,  0,  0,  0,  0,  0,224,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_174[] = {  9,  0,  0,  0,  0,  0,  0, 28,  0, 34,  0, 85,  0, 89,  0, 93,  0, 34,  0, 28,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_175[] = {  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,224,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_176[] = {  4,  0,  0,  0,  0,  0,  0, 96,144,144, 96,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_177[] = {  6,  0,  0,  0,248,  0, 32, 32,248, 32, 32,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_178[] = {  3,  0,  0,  0,  0,  0,  0,224, 64,160, 96,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_179[] = {  3,  0,  0,  0,  0,  0,  0,192, 32, 64,224,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_180[] = {  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,128, 64,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_181[] = {  5,  0,128,128,240,144,144,144,144,144,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_182[] = {  6,  0, 40, 40, 40, 40, 40,104,232,232,232,124,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_183[] = {  3,  0,  0,  0,  0,  0,  0,192,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_184[] = {  3,  0,192, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_185[] = {  3,  0,  0,  0,  0,  0,  0, 64, 64,192, 64,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_186[] = {  4,  0,  0,  0,  0,  0,  0,224,  0,224,160,224,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_187[] = {  6,  0,  0,  0,160, 80, 40, 80,160,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_188[] = {  9,  0,  0,  0,  0,  0,  0, 33,  0, 23,128, 19,  0,  9,  0, 72,  0, 68,  0,196,  0, 66,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_189[] = {  9,  0,  0,  0,  0,  0,  0, 39,  0, 18,  0, 21,  0, 11,  0, 72,  0, 68,  0,196,  0, 66,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_190[] = {  9,  0,  0,  0,  0,  0,  0, 33,  0, 23,128, 19,  0,  9,  0,200,  0, 36,  0, 68,  0,226,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_191[] = {  6,  0, 48, 72, 64, 32, 16, 16,  0, 16,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_192[] = {  7,  0,  0,  0,130,130,124, 68, 40, 40, 16, 16,  0, 16, 32};\r
+static const GLubyte Helvetica10_Character_193[] = {  7,  0,  0,  0,130,130,124, 68, 40, 40, 16, 16,  0, 16,  8};\r
+static const GLubyte Helvetica10_Character_194[] = {  7,  0,  0,  0,130,130,124, 68, 40, 40, 16, 16,  0, 40, 16};\r
+static const GLubyte Helvetica10_Character_195[] = {  7,  0,  0,  0,130,130,124, 68, 40, 40, 16, 16,  0, 40, 20};\r
+static const GLubyte Helvetica10_Character_196[] = {  7,  0,  0,  0,130,130,124, 68, 40, 40, 16, 16,  0, 40,  0};\r
+static const GLubyte Helvetica10_Character_197[] = {  7,  0,  0,  0,130,130,124, 68, 40, 40, 16, 16, 16, 40, 16};\r
+static const GLubyte Helvetica10_Character_198[] = { 10,  0,  0,  0,  0,  0,  0,143,128,136,  0,120,  0, 72,  0, 47,128, 40,  0, 24,  0, 31,128,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_199[] = {  8,  0, 24,  8, 60, 66, 64, 64, 64, 64, 66, 60,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_200[] = {  7,  0,  0,  0,124, 64, 64, 64,124, 64, 64,124,  0, 16, 32};\r
+static const GLubyte Helvetica10_Character_201[] = {  7,  0,  0,  0,124, 64, 64, 64,124, 64, 64,124,  0, 16,  8};\r
+static const GLubyte Helvetica10_Character_202[] = {  7,  0,  0,  0,124, 64, 64,124, 64, 64, 64,124,  0, 40, 16};\r
+static const GLubyte Helvetica10_Character_203[] = {  7,  0,  0,  0,124, 64, 64, 64,124, 64, 64,124,  0, 40,  0};\r
+static const GLubyte Helvetica10_Character_204[] = {  3,  0,  0,  0, 64, 64, 64, 64, 64, 64, 64, 64,  0, 64,128};\r
+static const GLubyte Helvetica10_Character_205[] = {  3,  0,  0,  0, 64, 64, 64, 64, 64, 64, 64, 64,  0, 64, 32};\r
+static const GLubyte Helvetica10_Character_206[] = {  3,  0,  0,  0, 64, 64, 64, 64, 64, 64, 64, 64,  0,160, 64};\r
+static const GLubyte Helvetica10_Character_207[] = {  3,  0,  0,  0, 64, 64, 64, 64, 64, 64, 64, 64,  0,160,  0};\r
+static const GLubyte Helvetica10_Character_208[] = {  8,  0,  0,  0,120, 68, 66, 66,242, 66, 68,120,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_209[] = {  8,  0,  0,  0, 70, 70, 74, 74, 82, 82, 98, 98,  0, 40, 20};\r
+static const GLubyte Helvetica10_Character_210[] = {  8,  0,  0,  0, 60, 66, 66, 66, 66, 66, 66, 60,  0,  8, 16};\r
+static const GLubyte Helvetica10_Character_211[] = {  8,  0,  0,  0, 60, 66, 66, 66, 66, 66, 66, 60,  0,  8,  4};\r
+static const GLubyte Helvetica10_Character_212[] = {  8,  0,  0,  0, 60, 66, 66, 66, 66, 66, 66, 60,  0, 20,  8};\r
+static const GLubyte Helvetica10_Character_213[] = {  8,  0,  0,  0, 60, 66, 66, 66, 66, 66, 66, 60,  0, 40, 20};\r
+static const GLubyte Helvetica10_Character_214[] = {  8,  0,  0,  0, 60, 66, 66, 66, 66, 66, 66, 60,  0, 36,  0};\r
+static const GLubyte Helvetica10_Character_215[] = {  6,  0,  0,  0,  0,136, 80, 32, 80,136,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_216[] = {  8,  0,  0, 64, 60, 98, 82, 82, 74, 74, 70, 60,  2,  0,  0};\r
+static const GLubyte Helvetica10_Character_217[] = {  8,  0,  0,  0, 60, 66, 66, 66, 66, 66, 66, 66,  0,  8, 16};\r
+static const GLubyte Helvetica10_Character_218[] = {  8,  0,  0,  0, 60, 66, 66, 66, 66, 66, 66, 66,  0, 16,  8};\r
+static const GLubyte Helvetica10_Character_219[] = {  8,  0,  0,  0, 60, 66, 66, 66, 66, 66, 66, 66,  0, 20,  8};\r
+static const GLubyte Helvetica10_Character_220[] = {  8,  0,  0,  0, 60, 66, 66, 66, 66, 66, 66, 66,  0, 36,  0};\r
+static const GLubyte Helvetica10_Character_221[] = {  7,  0,  0,  0, 16, 16, 16, 40, 40, 68, 68,130,  0, 16,  8};\r
+static const GLubyte Helvetica10_Character_222[] = {  7,  0,  0,  0, 64, 64,120, 68, 68,120, 64, 64,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_223[] = {  5,  0,  0,  0,160,144,144,144,160,144,144, 96,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_224[] = {  5,  0,  0,  0,104,144,144,112, 16,224,  0, 32, 64,  0,  0};\r
+static const GLubyte Helvetica10_Character_225[] = {  5,  0,  0,  0,104,144,144,112, 16,224,  0, 32, 16,  0,  0};\r
+static const GLubyte Helvetica10_Character_226[] = {  5,  0,  0,  0,104,144,144,112, 16,224,  0, 80, 32,  0,  0};\r
+static const GLubyte Helvetica10_Character_227[] = {  5,  0,  0,  0,104,144,144,112, 16,224,  0,160, 80,  0,  0};\r
+static const GLubyte Helvetica10_Character_228[] = {  5,  0,  0,  0,104,144,144,112, 16,224,  0, 80,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_229[] = {  5,  0,  0,  0,104,144,144,112, 16,224, 32, 80, 32,  0,  0};\r
+static const GLubyte Helvetica10_Character_230[] = {  8,  0,  0,  0,108,146,144,126, 18,236,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_231[] = {  5,  0, 96, 32, 96,144,128,128,144, 96,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_232[] = {  5,  0,  0,  0, 96,144,128,240,144, 96,  0, 32, 64,  0,  0};\r
+static const GLubyte Helvetica10_Character_233[] = {  5,  0,  0,  0, 96,144,128,240,144, 96,  0, 64, 32,  0,  0};\r
+static const GLubyte Helvetica10_Character_234[] = {  5,  0,  0,  0, 96,144,128,240,144, 96,  0, 80, 32,  0,  0};\r
+static const GLubyte Helvetica10_Character_235[] = {  5,  0,  0,  0, 96,144,128,240,144, 96,  0, 80,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_236[] = {  2,  0,  0,  0,128,128,128,128,128,128,  0,128,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_237[] = {  2,  0,  0,  0,128,128,128,128,128,128,  0,128, 64,  0,  0};\r
+static const GLubyte Helvetica10_Character_238[] = {  2,  0,  0,  0,128,128,128,128,128,128,  0, 64,128,  0,  0};\r
+static const GLubyte Helvetica10_Character_239[] = {  2,  0,  0,  0, 64, 64, 64, 64, 64, 64,  0,160,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_240[] = {  6,  0,  0,  0,112,136,136,136,136,120,144, 96, 80,  0,  0};\r
+static const GLubyte Helvetica10_Character_241[] = {  5,  0,  0,  0,144,144,144,144,144,224,  0,160, 80,  0,  0};\r
+static const GLubyte Helvetica10_Character_242[] = {  6,  0,  0,  0,112,136,136,136,136,112,  0, 32, 64,  0,  0};\r
+static const GLubyte Helvetica10_Character_243[] = {  6,  0,  0,  0,112,136,136,136,136,112,  0, 32, 16,  0,  0};\r
+static const GLubyte Helvetica10_Character_244[] = {  6,  0,  0,  0,112,136,136,136,136,112,  0, 80, 32,  0,  0};\r
+static const GLubyte Helvetica10_Character_245[] = {  6,  0,  0,  0,112,136,136,136,136,112,  0, 80, 40,  0,  0};\r
+static const GLubyte Helvetica10_Character_246[] = {  6,  0,  0,  0,112,136,136,136,136,112,  0, 80,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_247[] = {  6,  0,  0,  0,  0, 32,  0,248,  0, 32,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_248[] = {  6,  0,  0,  0,112,136,200,168,152,116,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_249[] = {  5,  0,  0,  0,112,144,144,144,144,144,  0, 32, 64,  0,  0};\r
+static const GLubyte Helvetica10_Character_250[] = {  5,  0,  0,  0,112,144,144,144,144,144,  0, 64, 32,  0,  0};\r
+static const GLubyte Helvetica10_Character_251[] = {  5,  0,  0,  0,112,144,144,144,144,144,  0, 80, 32,  0,  0};\r
+static const GLubyte Helvetica10_Character_252[] = {  5,  0,  0,  0,112,144,144,144,144,144,  0, 80,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_253[] = {  5,  0,128, 64, 64, 96,160,160,144,144,  0, 32, 16,  0,  0};\r
+static const GLubyte Helvetica10_Character_254[] = {  6,  0,128,128,176,200,136,136,200,176,128,128,  0,  0,  0};\r
+static const GLubyte Helvetica10_Character_255[] = {  5,  0,128, 64, 64, 96,160,160,144,144,  0, 80,  0,  0,  0};\r
+\r
+/* The font characters mapping: */\r
+static const GLubyte* Helvetica10_Character_Map[] = {Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,\r
+                                                     Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,\r
+                                                     Helvetica10_Character_032,Helvetica10_Character_033,Helvetica10_Character_034,Helvetica10_Character_035,Helvetica10_Character_036,Helvetica10_Character_037,Helvetica10_Character_038,Helvetica10_Character_039,Helvetica10_Character_040,Helvetica10_Character_041,Helvetica10_Character_042,Helvetica10_Character_043,Helvetica10_Character_044,Helvetica10_Character_045,Helvetica10_Character_046,Helvetica10_Character_047,\r
+                                                     Helvetica10_Character_048,Helvetica10_Character_049,Helvetica10_Character_050,Helvetica10_Character_051,Helvetica10_Character_052,Helvetica10_Character_053,Helvetica10_Character_054,Helvetica10_Character_055,Helvetica10_Character_056,Helvetica10_Character_057,Helvetica10_Character_058,Helvetica10_Character_059,Helvetica10_Character_060,Helvetica10_Character_061,Helvetica10_Character_062,Helvetica10_Character_063,\r
+                                                     Helvetica10_Character_064,Helvetica10_Character_065,Helvetica10_Character_066,Helvetica10_Character_067,Helvetica10_Character_068,Helvetica10_Character_069,Helvetica10_Character_070,Helvetica10_Character_071,Helvetica10_Character_072,Helvetica10_Character_073,Helvetica10_Character_074,Helvetica10_Character_075,Helvetica10_Character_076,Helvetica10_Character_077,Helvetica10_Character_078,Helvetica10_Character_079,\r
+                                                     Helvetica10_Character_080,Helvetica10_Character_081,Helvetica10_Character_082,Helvetica10_Character_083,Helvetica10_Character_084,Helvetica10_Character_085,Helvetica10_Character_086,Helvetica10_Character_087,Helvetica10_Character_088,Helvetica10_Character_089,Helvetica10_Character_090,Helvetica10_Character_091,Helvetica10_Character_092,Helvetica10_Character_093,Helvetica10_Character_094,Helvetica10_Character_095,\r
+                                                     Helvetica10_Character_096,Helvetica10_Character_097,Helvetica10_Character_098,Helvetica10_Character_099,Helvetica10_Character_100,Helvetica10_Character_101,Helvetica10_Character_102,Helvetica10_Character_103,Helvetica10_Character_104,Helvetica10_Character_105,Helvetica10_Character_106,Helvetica10_Character_107,Helvetica10_Character_108,Helvetica10_Character_109,Helvetica10_Character_110,Helvetica10_Character_111,\r
+                                                     Helvetica10_Character_112,Helvetica10_Character_113,Helvetica10_Character_114,Helvetica10_Character_115,Helvetica10_Character_116,Helvetica10_Character_117,Helvetica10_Character_118,Helvetica10_Character_119,Helvetica10_Character_120,Helvetica10_Character_121,Helvetica10_Character_122,Helvetica10_Character_123,Helvetica10_Character_124,Helvetica10_Character_125,Helvetica10_Character_126,Helvetica10_Character_032,\r
+                                                     Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,\r
+                                                     Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,\r
+                                                     Helvetica10_Character_160,Helvetica10_Character_161,Helvetica10_Character_162,Helvetica10_Character_163,Helvetica10_Character_164,Helvetica10_Character_165,Helvetica10_Character_166,Helvetica10_Character_167,Helvetica10_Character_168,Helvetica10_Character_169,Helvetica10_Character_170,Helvetica10_Character_171,Helvetica10_Character_172,Helvetica10_Character_173,Helvetica10_Character_174,Helvetica10_Character_175,\r
+                                                     Helvetica10_Character_176,Helvetica10_Character_177,Helvetica10_Character_178,Helvetica10_Character_179,Helvetica10_Character_180,Helvetica10_Character_181,Helvetica10_Character_182,Helvetica10_Character_183,Helvetica10_Character_184,Helvetica10_Character_185,Helvetica10_Character_186,Helvetica10_Character_187,Helvetica10_Character_188,Helvetica10_Character_189,Helvetica10_Character_190,Helvetica10_Character_191,\r
+                                                     Helvetica10_Character_192,Helvetica10_Character_193,Helvetica10_Character_194,Helvetica10_Character_195,Helvetica10_Character_196,Helvetica10_Character_197,Helvetica10_Character_198,Helvetica10_Character_199,Helvetica10_Character_200,Helvetica10_Character_201,Helvetica10_Character_202,Helvetica10_Character_203,Helvetica10_Character_204,Helvetica10_Character_205,Helvetica10_Character_206,Helvetica10_Character_207,\r
+                                                     Helvetica10_Character_208,Helvetica10_Character_209,Helvetica10_Character_210,Helvetica10_Character_211,Helvetica10_Character_212,Helvetica10_Character_213,Helvetica10_Character_214,Helvetica10_Character_215,Helvetica10_Character_216,Helvetica10_Character_217,Helvetica10_Character_218,Helvetica10_Character_219,Helvetica10_Character_220,Helvetica10_Character_221,Helvetica10_Character_222,Helvetica10_Character_223,\r
+                                                     Helvetica10_Character_224,Helvetica10_Character_225,Helvetica10_Character_226,Helvetica10_Character_227,Helvetica10_Character_228,Helvetica10_Character_229,Helvetica10_Character_230,Helvetica10_Character_231,Helvetica10_Character_232,Helvetica10_Character_233,Helvetica10_Character_234,Helvetica10_Character_235,Helvetica10_Character_236,Helvetica10_Character_237,Helvetica10_Character_238,Helvetica10_Character_239,\r
+                                                     Helvetica10_Character_240,Helvetica10_Character_241,Helvetica10_Character_242,Helvetica10_Character_243,Helvetica10_Character_244,Helvetica10_Character_245,Helvetica10_Character_246,Helvetica10_Character_247,Helvetica10_Character_248,Helvetica10_Character_249,Helvetica10_Character_250,Helvetica10_Character_251,Helvetica10_Character_252,Helvetica10_Character_253,Helvetica10_Character_254,Helvetica10_Character_255,NULL};\r
+\r
+/* The font structure: */\r
+const SFG_Font fgFontHelvetica10 = { "-adobe-helvetica-medium-r-normal--10-100-75-75-p-56-iso8859-1", 256, 14, Helvetica10_Character_Map, 0, 3 };\r
+\r
+static const GLubyte Helvetica12_Character_000[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_001[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_002[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_003[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_004[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_005[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_006[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_007[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_008[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_009[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_010[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_011[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_012[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_013[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_014[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_015[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_016[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_017[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_018[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_019[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_020[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_021[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_022[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_023[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_024[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_025[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_026[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_027[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_028[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_029[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_030[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_031[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_032[] = {  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_033[] = {  3,  0,  0,  0,  0, 64,  0, 64, 64, 64, 64, 64, 64, 64,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_034[] = {  5,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 80, 80, 80,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_035[] = {  7,  0,  0,  0,  0, 80, 80, 80,252, 40,252, 40, 40,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_036[] = {  7,  0,  0,  0, 16, 56, 84, 84, 20, 56, 80, 84, 56, 16,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_037[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0, 17,128, 10, 64, 10, 64,  9,128,  4,  0, 52,  0, 74,  0, 74,  0, 49,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_038[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 57,  0, 70,  0, 66,  0, 69,  0, 40,  0, 24,  0, 36,  0, 36,  0, 24,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_039[] = {  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64, 32, 96,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_040[] = {  4,  0, 16, 32, 32, 64, 64, 64, 64, 64, 64, 32, 32, 16,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_041[] = {  4,  0,128, 64, 64, 32, 32, 32, 32, 32, 32, 64, 64,128,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_042[] = {  5,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 80, 32, 80,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_043[] = {  7,  0,  0,  0,  0,  0, 16, 16,124, 16, 16,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_044[] = {  4,  0,  0, 64, 32, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_045[] = {  8,  0,  0,  0,  0,  0,  0,  0,124,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_046[] = {  3,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_047[] = {  4,  0,  0,  0,  0,128,128, 64, 64, 64, 32, 32, 16, 16,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_048[] = {  7,  0,  0,  0,  0, 56, 68, 68, 68, 68, 68, 68, 68, 56,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_049[] = {  7,  0,  0,  0,  0, 16, 16, 16, 16, 16, 16, 16,112, 16,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_050[] = {  7,  0,  0,  0,  0,124, 64, 64, 32, 16,  8,  4, 68, 56,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_051[] = {  7,  0,  0,  0,  0, 56, 68, 68,  4,  4, 24,  4, 68, 56,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_052[] = {  7,  0,  0,  0,  0,  8,  8,252,136, 72, 40, 40, 24,  8,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_053[] = {  7,  0,  0,  0,  0, 56, 68, 68,  4,  4,120, 64, 64,124,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_054[] = {  7,  0,  0,  0,  0, 56, 68, 68, 68,100, 88, 64, 68, 56,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_055[] = {  7,  0,  0,  0,  0, 32, 32, 16, 16, 16,  8,  8,  4,124,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_056[] = {  7,  0,  0,  0,  0, 56, 68, 68, 68, 68, 56, 68, 68, 56,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_057[] = {  7,  0,  0,  0,  0, 56, 68,  4,  4, 60, 68, 68, 68, 56,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_058[] = {  3,  0,  0,  0,  0, 64,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_059[] = {  3,  0,  0,128, 64, 64,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_060[] = {  7,  0,  0,  0,  0,  0, 12, 48,192, 48, 12,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_061[] = {  7,  0,  0,  0,  0,  0,  0,124,  0,124,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_062[] = {  7,  0,  0,  0,  0,  0, 96, 24,  6, 24, 96,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_063[] = {  7,  0,  0,  0,  0, 16,  0, 16, 16,  8,  8, 68, 68, 56,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_064[] = { 12,  0,  0,  0,  0,  0,  0, 31,  0, 32,  0, 77,128, 83, 64, 81, 32, 81, 32, 73, 32, 38,160, 48, 64, 15,128,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_065[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 65,  0, 65,  0, 62,  0, 34,  0, 34,  0, 20,  0, 20,  0,  8,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_066[] = {  8,  0,  0,  0,  0,124, 66, 66, 66,124, 66, 66, 66,124,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_067[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 30,  0, 33,  0, 64,  0, 64,  0, 64,  0, 64,  0, 64,  0, 33,  0, 30,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_068[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,124,  0, 66,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 66,  0,124,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_069[] = {  8,  0,  0,  0,  0,126, 64, 64, 64,126, 64, 64, 64,126,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_070[] = {  8,  0,  0,  0,  0, 64, 64, 64, 64,124, 64, 64, 64,126,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_071[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 29,  0, 35,  0, 65,  0, 65,  0, 71,  0, 64,  0, 64,  0, 33,  0, 30,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_072[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 65,  0, 65,  0, 65,  0,127,  0, 65,  0, 65,  0, 65,  0, 65,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_073[] = {  3,  0,  0,  0,  0, 64, 64, 64, 64, 64, 64, 64, 64, 64,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_074[] = {  7,  0,  0,  0,  0, 56, 68, 68,  4,  4,  4,  4,  4,  4,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_075[] = {  8,  0,  0,  0,  0, 65, 66, 68, 72,112, 80, 72, 68, 66,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_076[] = {  7,  0,  0,  0,  0,124, 64, 64, 64, 64, 64, 64, 64, 64,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_077[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0, 68, 64, 68, 64, 74, 64, 74, 64, 81, 64, 81, 64, 96,192, 96,192, 64, 64,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_078[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 67,  0, 69,  0, 69,  0, 73,  0, 81,  0, 81,  0, 97,  0, 65,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_079[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 30,  0, 33,  0, 64,128, 64,128, 64,128, 64,128, 64,128, 33,  0, 30,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_080[] = {  8,  0,  0,  0,  0, 64, 64, 64, 64,124, 66, 66, 66,124,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_081[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 30,128, 33,  0, 66,128, 68,128, 64,128, 64,128, 64,128, 33,  0, 30,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_082[] = {  8,  0,  0,  0,  0, 66, 66, 66, 68,124, 66, 66, 66,124,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_083[] = {  8,  0,  0,  0,  0, 60, 66, 66,  2, 12, 48, 64, 66, 60,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_084[] = {  7,  0,  0,  0,  0, 16, 16, 16, 16, 16, 16, 16, 16,254,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_085[] = {  8,  0,  0,  0,  0, 60, 66, 66, 66, 66, 66, 66, 66, 66,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_086[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  8,  0, 20,  0, 20,  0, 34,  0, 34,  0, 34,  0, 65,  0, 65,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_087[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0, 17,  0, 17,  0, 17,  0, 42,128, 42,128, 36,128, 68, 64, 68, 64, 68, 64,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_088[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 34,  0, 34,  0, 20,  0,  8,  0, 20,  0, 34,  0, 34,  0, 65,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_089[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  8,  0,  8,  0,  8,  0, 20,  0, 34,  0, 34,  0, 65,  0, 65,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_090[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,127,  0, 64,  0, 32,  0, 16,  0,  8,  0,  4,  0,  2,  0,  1,  0,127,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_091[] = {  3,  0, 96, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 96,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_092[] = {  4,  0,  0,  0,  0, 16, 16, 32, 32, 32, 64, 64,128,128,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_093[] = {  3,  0,192, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,192,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_094[] = {  6,  0,  0,  0,  0,  0,  0,  0,  0,  0,136, 80, 32,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_095[] = {  7,  0,  0,254,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_096[] = {  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,192,128, 64,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_097[] = {  7,  0,  0,  0,  0, 58, 68, 68, 60,  4, 68, 56,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_098[] = {  7,  0,  0,  0,  0, 88,100, 68, 68, 68,100, 88, 64, 64,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_099[] = {  7,  0,  0,  0,  0, 56, 68, 64, 64, 64, 68, 56,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_100[] = {  7,  0,  0,  0,  0, 52, 76, 68, 68, 68, 76, 52,  4,  4,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_101[] = {  7,  0,  0,  0,  0, 56, 68, 64,124, 68, 68, 56,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_102[] = {  3,  0,  0,  0,  0, 64, 64, 64, 64, 64, 64,224, 64, 48,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_103[] = {  7,  0, 56, 68,  4, 52, 76, 68, 68, 68, 76, 52,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_104[] = {  7,  0,  0,  0,  0, 68, 68, 68, 68, 68,100, 88, 64, 64,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_105[] = {  3,  0,  0,  0,  0, 64, 64, 64, 64, 64, 64, 64,  0, 64,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_106[] = {  3,  0,128, 64, 64, 64, 64, 64, 64, 64, 64, 64,  0, 64,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_107[] = {  6,  0,  0,  0,  0, 68, 72, 80, 96, 96, 80, 72, 64, 64,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_108[] = {  3,  0,  0,  0,  0, 64, 64, 64, 64, 64, 64, 64, 64, 64,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_109[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 73,  0, 73,  0, 73,  0, 73,  0, 73,  0,109,  0, 82,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_110[] = {  7,  0,  0,  0,  0, 68, 68, 68, 68, 68,100, 88,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_111[] = {  7,  0,  0,  0,  0, 56, 68, 68, 68, 68, 68, 56,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_112[] = {  7,  0, 64, 64, 64, 88,100, 68, 68, 68,100, 88,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_113[] = {  7,  0,  4,  4,  4, 52, 76, 68, 68, 68, 76, 52,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_114[] = {  4,  0,  0,  0,  0, 64, 64, 64, 64, 64, 96, 80,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_115[] = {  6,  0,  0,  0,  0, 48, 72,  8, 48, 64, 72, 48,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_116[] = {  3,  0,  0,  0,  0, 96, 64, 64, 64, 64, 64,224, 64, 64,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_117[] = {  7,  0,  0,  0,  0, 52, 76, 68, 68, 68, 68, 68,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_118[] = {  7,  0,  0,  0,  0, 16, 16, 40, 40, 68, 68, 68,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_119[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 34,  0, 34,  0, 85,  0, 73,  0, 73,  0,136,128,136,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_120[] = {  6,  0,  0,  0,  0,132,132, 72, 48, 48, 72,132,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_121[] = {  7,  0, 64, 32, 16, 16, 40, 40, 72, 68, 68, 68,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_122[] = {  6,  0,  0,  0,  0,120, 64, 32, 32, 16,  8,120,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_123[] = {  4,  0, 48, 64, 64, 64, 64, 64,128, 64, 64, 64, 64, 48,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_124[] = {  3,  0, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_125[] = {  4,  0,192, 32, 32, 32, 32, 32, 16, 32, 32, 32, 32,192,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_126[] = {  7,  0,  0,  0,  0,  0,  0,  0,152,100,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_127[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_128[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_129[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_130[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_131[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_132[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_133[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_134[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_135[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_136[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_137[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_138[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_139[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_140[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_141[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_142[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_143[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_144[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_145[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_146[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_147[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_148[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_149[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_150[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_151[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_152[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_153[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_154[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_155[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_156[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_157[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_158[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_159[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_160[] = {  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_161[] = {  3,  0, 64, 64, 64, 64, 64, 64, 64, 64,  0, 64,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_162[] = {  7,  0,  0,  0, 32, 56,100, 80, 80, 80, 84, 56,  8,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_163[] = {  7,  0,  0,  0,  0, 88, 36, 16, 16,120, 32, 32, 36, 24,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_164[] = {  7,  0,  0,  0,  0,  0,132,120, 72, 72,120,132,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_165[] = {  7,  0,  0,  0,  0, 16, 16,124, 16,124, 16, 40, 68, 68,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_166[] = {  3,  0,  0, 64, 64, 64, 64,  0,  0,  0, 64, 64, 64, 64,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_167[] = {  6,  0,112,136,  8, 48, 72,136,136,144, 96,128,136,112,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_168[] = {  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,160,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_169[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0, 31,  0, 32,128, 78, 64, 81, 64, 80, 64, 81, 64, 78, 64, 32,128, 31,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_170[] = {  5,  0,  0,  0,  0,  0,  0,  0,  0,112,  0, 80, 16,112,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_171[] = {  7,  0,  0,  0,  0,  0, 20, 40, 80, 40, 20,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_172[] = {  8,  0,  0,  0,  0,  0,  0,  2,  2,  2,126,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_173[] = {  5,  0,  0,  0,  0,  0,  0,  0,240,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_174[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0, 31,  0, 32,128, 74, 64, 74, 64, 76, 64, 74, 64, 78, 64, 32,128, 31,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_175[] = {  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,240,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_176[] = {  5,  0,  0,  0,  0,  0,  0,  0,  0, 96,144,144, 96,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_177[] = {  7,  0,  0,  0,  0,124,  0, 16, 16,124, 16, 16,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_178[] = {  4,  0,  0,  0,  0,  0,  0,  0,240, 64, 32,144, 96,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_179[] = {  4,  0,  0,  0,  0,  0,  0,  0,192, 32, 64, 32,224,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_180[] = {  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128, 64,  0,  0};\r
+static const GLubyte Helvetica12_Character_181[] = {  7,  0, 64, 64, 64,116, 76, 68, 68, 68, 68, 68,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_182[] = {  7,  0, 40, 40, 40, 40, 40, 40,104,232,232,232,104, 60,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_183[] = {  3,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_184[] = {  3,  0,192, 32, 32, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_185[] = {  4,  0,  0,  0,  0,  0,  0,  0, 32, 32, 32, 96, 32,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_186[] = {  5,  0,  0,  0,  0,  0,  0,  0,  0,112,  0,112, 80,112,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_187[] = {  7,  0,  0,  0,  0,  0, 80, 40, 20, 40, 80,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_188[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 39,128, 21,  0, 19,  0, 73,  0, 68,  0, 68,  0,194,  0, 65,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_189[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 71,128, 34,  0, 17,  0, 20,128, 75,  0, 72,  0, 68,  0,194,  0, 65,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_190[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 33,  0, 23,128, 21,  0, 11,  0,201,  0, 36,  0, 68,  0, 34,  0,225,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_191[] = {  7,  0, 56, 68, 68, 32, 32, 16, 16,  0, 16,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_192[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 65,  0, 65,  0, 62,  0, 34,  0, 34,  0, 20,  0,  8,  0,  8,  0,  0,  0,  8,  0, 16,  0};\r
+static const GLubyte Helvetica12_Character_193[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 65,  0, 65,  0, 62,  0, 34,  0, 34,  0, 20,  0,  8,  0,  8,  0,  0,  0,  8,  0,  4,  0};\r
+static const GLubyte Helvetica12_Character_194[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 65,  0, 65,  0, 62,  0, 34,  0, 34,  0, 20,  0,  8,  0,  8,  0,  0,  0, 20,  0,  8,  0};\r
+static const GLubyte Helvetica12_Character_195[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 65,  0, 65,  0, 62,  0, 34,  0, 34,  0, 20,  0,  8,  0,  8,  0,  0,  0, 20,  0, 10,  0};\r
+static const GLubyte Helvetica12_Character_196[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 65,  0, 65,  0, 62,  0, 34,  0, 34,  0, 20,  0,  8,  0,  8,  0,  0,  0, 20,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_197[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 65,  0, 65,  0, 62,  0, 34,  0, 34,  0, 20,  0,  8,  0,  8,  0,  8,  0, 20,  0,  8,  0};\r
+static const GLubyte Helvetica12_Character_198[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0, 71,192, 68,  0, 68,  0, 60,  0, 39,192, 36,  0, 20,  0, 20,  0, 15,192,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_199[] = {  9,  0,  0, 24,  0,  4,  0,  4,  0, 30,  0, 33,  0, 64,  0, 64,  0, 64,  0, 64,  0, 64,  0, 33,  0, 30,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_200[] = {  8,  0,  0,  0,  0,126, 64, 64, 64,126, 64, 64, 64,126,  0,  8, 16};\r
+static const GLubyte Helvetica12_Character_201[] = {  8,  0,  0,  0,  0,126, 64, 64, 64,126, 64, 64, 64,126,  0,  8,  4};\r
+static const GLubyte Helvetica12_Character_202[] = {  8,  0,  0,  0,  0,126, 64, 64, 64,126, 64, 64, 64,126,  0, 20,  8};\r
+static const GLubyte Helvetica12_Character_203[] = {  8,  0,  0,  0,  0,126, 64, 64, 64,126, 64, 64, 64,126,  0, 20,  0};\r
+static const GLubyte Helvetica12_Character_204[] = {  3,  0,  0,  0,  0, 64, 64, 64, 64, 64, 64, 64, 64, 64,  0, 64,128};\r
+static const GLubyte Helvetica12_Character_205[] = {  3,  0,  0,  0,  0, 64, 64, 64, 64, 64, 64, 64, 64, 64,  0, 64, 32};\r
+static const GLubyte Helvetica12_Character_206[] = {  3,  0,  0,  0,  0, 64, 64, 64, 64, 64, 64, 64, 64, 64,  0,160, 64};\r
+static const GLubyte Helvetica12_Character_207[] = {  3,  0,  0,  0,  0, 64, 64, 64, 64, 64, 64, 64, 64, 64,  0,160,  0};\r
+static const GLubyte Helvetica12_Character_208[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,124,  0, 66,  0, 65,  0, 65,  0,241,  0, 65,  0, 65,  0, 66,  0,124,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_209[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 67,  0, 69,  0, 69,  0, 73,  0, 81,  0, 81,  0, 97,  0, 65,  0,  0,  0, 20,  0, 10,  0};\r
+static const GLubyte Helvetica12_Character_210[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 30,  0, 33,  0, 64,128, 64,128, 64,128, 64,128, 64,128, 33,  0, 30,  0,  0,  0,  4,  0,  8,  0};\r
+static const GLubyte Helvetica12_Character_211[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 30,  0, 33,  0, 64,128, 64,128, 64,128, 64,128, 64,128, 33,  0, 30,  0,  0,  0,  4,  0,  2,  0};\r
+static const GLubyte Helvetica12_Character_212[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 30,  0, 33,  0, 64,128, 64,128, 64,128, 64,128, 64,128, 33,  0, 30,  0,  0,  0, 10,  0,  4,  0};\r
+static const GLubyte Helvetica12_Character_213[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 30,  0, 33,  0, 64,128, 64,128, 64,128, 64,128, 64,128, 33,  0, 30,  0,  0,  0, 20,  0, 10,  0};\r
+static const GLubyte Helvetica12_Character_214[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 30,  0, 33,  0, 64,128, 64,128, 64,128, 64,128, 64,128, 33,  0, 30,  0,  0,  0, 18,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_215[] = {  7,  0,  0,  0,  0,  0, 68, 40, 16, 40, 68,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_216[] = { 10,  0,  0,  0,  0,  0,  0,128,  0, 94,  0, 33,  0, 80,128, 72,128, 68,128, 68,128, 66,128, 33,  0, 30,128,  0, 64,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_217[] = {  8,  0,  0,  0,  0, 60, 66, 66, 66, 66, 66, 66, 66, 66,  0,  8, 16};\r
+static const GLubyte Helvetica12_Character_218[] = {  8,  0,  0,  0,  0, 60, 66, 66, 66, 66, 66, 66, 66, 66,  0,  8,  4};\r
+static const GLubyte Helvetica12_Character_219[] = {  8,  0,  0,  0,  0, 60, 66, 66, 66, 66, 66, 66, 66, 66,  0, 20,  8};\r
+static const GLubyte Helvetica12_Character_220[] = {  8,  0,  0,  0,  0, 60, 66, 66, 66, 66, 66, 66, 66, 66,  0, 36,  0};\r
+static const GLubyte Helvetica12_Character_221[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  8,  0,  8,  0,  8,  0, 20,  0, 34,  0, 34,  0, 65,  0, 65,  0,  0,  0,  8,  0,  4,  0};\r
+static const GLubyte Helvetica12_Character_222[] = {  8,  0,  0,  0,  0, 64, 64,124, 66, 66, 66,124, 64, 64,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_223[] = {  7,  0,  0,  0,  0, 88, 68, 68, 68, 88, 68, 68, 68, 56,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_224[] = {  7,  0,  0,  0,  0, 58, 68, 68, 60,  4, 68, 56,  0,  8, 16,  0,  0};\r
+static const GLubyte Helvetica12_Character_225[] = {  7,  0,  0,  0,  0, 58, 68, 68, 60,  4, 68, 56,  0, 16,  8,  0,  0};\r
+static const GLubyte Helvetica12_Character_226[] = {  7,  0,  0,  0,  0, 58, 68, 68, 60,  4, 68, 56,  0, 40, 16,  0,  0};\r
+static const GLubyte Helvetica12_Character_227[] = {  7,  0,  0,  0,  0, 58, 68, 68, 60,  4, 68, 56,  0, 40, 20,  0,  0};\r
+static const GLubyte Helvetica12_Character_228[] = {  7,  0,  0,  0,  0, 58, 68, 68, 60,  4, 68, 56,  0, 40,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_229[] = {  7,  0,  0,  0,  0, 58, 68, 68, 60,  4, 68, 56, 24, 36, 24,  0,  0};\r
+static const GLubyte Helvetica12_Character_230[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0, 59,128, 68, 64, 68,  0, 63,192,  4, 64, 68, 64, 59,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_231[] = {  7,  0, 48,  8, 16, 56, 68, 64, 64, 64, 68, 56,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_232[] = {  7,  0,  0,  0,  0, 56, 68, 64,124, 68, 68, 56,  0, 16, 32,  0,  0};\r
+static const GLubyte Helvetica12_Character_233[] = {  7,  0,  0,  0,  0, 56, 68, 64,124, 68, 68, 56,  0, 16,  8,  0,  0};\r
+static const GLubyte Helvetica12_Character_234[] = {  7,  0,  0,  0,  0, 56, 68, 64,124, 68, 68, 56,  0, 40, 16,  0,  0};\r
+static const GLubyte Helvetica12_Character_235[] = {  7,  0,  0,  0,  0, 56, 68, 64,124, 68, 68, 56,  0, 40,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_236[] = {  3,  0,  0,  0,  0, 64, 64, 64, 64, 64, 64, 64,  0, 64,128,  0,  0};\r
+static const GLubyte Helvetica12_Character_237[] = {  3,  0,  0,  0,  0, 64, 64, 64, 64, 64, 64, 64,  0, 64, 32,  0,  0};\r
+static const GLubyte Helvetica12_Character_238[] = {  3,  0,  0,  0,  0, 64, 64, 64, 64, 64, 64, 64,  0,160, 64,  0,  0};\r
+static const GLubyte Helvetica12_Character_239[] = {  3,  0,  0,  0,  0, 64, 64, 64, 64, 64, 64, 64,  0,160,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_240[] = {  7,  0,  0,  0,  0, 56, 68, 68, 68, 68, 60,  4, 40, 24, 52,  0,  0};\r
+static const GLubyte Helvetica12_Character_241[] = {  7,  0,  0,  0,  0, 68, 68, 68, 68, 68,100, 88,  0, 40, 20,  0,  0};\r
+static const GLubyte Helvetica12_Character_242[] = {  7,  0,  0,  0,  0, 56, 68, 68, 68, 68, 68, 56,  0, 16, 32,  0,  0};\r
+static const GLubyte Helvetica12_Character_243[] = {  7,  0,  0,  0,  0, 56, 68, 68, 68, 68, 68, 56,  0, 16,  8,  0,  0};\r
+static const GLubyte Helvetica12_Character_244[] = {  7,  0,  0,  0,  0, 56, 68, 68, 68, 68, 68, 56,  0, 40, 16,  0,  0};\r
+static const GLubyte Helvetica12_Character_245[] = {  7,  0,  0,  0,  0, 56, 68, 68, 68, 68, 68, 56,  0, 40, 20,  0,  0};\r
+static const GLubyte Helvetica12_Character_246[] = {  7,  0,  0,  0,  0, 56, 68, 68, 68, 68, 68, 56,  0, 40,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_247[] = {  7,  0,  0,  0,  0,  0, 16,  0,124,  0, 16,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_248[] = {  7,  0,  0,  0,  0,184, 68,100, 84, 76, 68, 58,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_249[] = {  7,  0,  0,  0,  0, 52, 76, 68, 68, 68, 68, 68,  0, 16, 32,  0,  0};\r
+static const GLubyte Helvetica12_Character_250[] = {  7,  0,  0,  0,  0, 52, 76, 68, 68, 68, 68, 68,  0, 16,  8,  0,  0};\r
+static const GLubyte Helvetica12_Character_251[] = {  7,  0,  0,  0,  0, 52, 76, 68, 68, 68, 68, 68,  0, 40, 16,  0,  0};\r
+static const GLubyte Helvetica12_Character_252[] = {  7,  0,  0,  0,  0, 52, 76, 68, 68, 68, 68, 68,  0, 40,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_253[] = {  7,  0, 64, 32, 16, 16, 40, 40, 72, 68, 68, 68,  0, 16,  8,  0,  0};\r
+static const GLubyte Helvetica12_Character_254[] = {  7,  0, 64, 64, 64, 88,100, 68, 68, 68,100, 88, 64, 64,  0,  0,  0};\r
+static const GLubyte Helvetica12_Character_255[] = {  7,  0, 96, 16, 16, 16, 24, 40, 40, 36, 68, 68,  0, 40,  0,  0,  0};\r
+\r
+/* The font characters mapping: */\r
+static const GLubyte* Helvetica12_Character_Map[] = {Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,\r
+                                                     Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,\r
+                                                     Helvetica12_Character_032,Helvetica12_Character_033,Helvetica12_Character_034,Helvetica12_Character_035,Helvetica12_Character_036,Helvetica12_Character_037,Helvetica12_Character_038,Helvetica12_Character_039,Helvetica12_Character_040,Helvetica12_Character_041,Helvetica12_Character_042,Helvetica12_Character_043,Helvetica12_Character_044,Helvetica12_Character_045,Helvetica12_Character_046,Helvetica12_Character_047,\r
+                                                     Helvetica12_Character_048,Helvetica12_Character_049,Helvetica12_Character_050,Helvetica12_Character_051,Helvetica12_Character_052,Helvetica12_Character_053,Helvetica12_Character_054,Helvetica12_Character_055,Helvetica12_Character_056,Helvetica12_Character_057,Helvetica12_Character_058,Helvetica12_Character_059,Helvetica12_Character_060,Helvetica12_Character_061,Helvetica12_Character_062,Helvetica12_Character_063,\r
+                                                     Helvetica12_Character_064,Helvetica12_Character_065,Helvetica12_Character_066,Helvetica12_Character_067,Helvetica12_Character_068,Helvetica12_Character_069,Helvetica12_Character_070,Helvetica12_Character_071,Helvetica12_Character_072,Helvetica12_Character_073,Helvetica12_Character_074,Helvetica12_Character_075,Helvetica12_Character_076,Helvetica12_Character_077,Helvetica12_Character_078,Helvetica12_Character_079,\r
+                                                     Helvetica12_Character_080,Helvetica12_Character_081,Helvetica12_Character_082,Helvetica12_Character_083,Helvetica12_Character_084,Helvetica12_Character_085,Helvetica12_Character_086,Helvetica12_Character_087,Helvetica12_Character_088,Helvetica12_Character_089,Helvetica12_Character_090,Helvetica12_Character_091,Helvetica12_Character_092,Helvetica12_Character_093,Helvetica12_Character_094,Helvetica12_Character_095,\r
+                                                     Helvetica12_Character_096,Helvetica12_Character_097,Helvetica12_Character_098,Helvetica12_Character_099,Helvetica12_Character_100,Helvetica12_Character_101,Helvetica12_Character_102,Helvetica12_Character_103,Helvetica12_Character_104,Helvetica12_Character_105,Helvetica12_Character_106,Helvetica12_Character_107,Helvetica12_Character_108,Helvetica12_Character_109,Helvetica12_Character_110,Helvetica12_Character_111,\r
+                                                     Helvetica12_Character_112,Helvetica12_Character_113,Helvetica12_Character_114,Helvetica12_Character_115,Helvetica12_Character_116,Helvetica12_Character_117,Helvetica12_Character_118,Helvetica12_Character_119,Helvetica12_Character_120,Helvetica12_Character_121,Helvetica12_Character_122,Helvetica12_Character_123,Helvetica12_Character_124,Helvetica12_Character_125,Helvetica12_Character_126,Helvetica12_Character_032,\r
+                                                     Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,\r
+                                                     Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,\r
+                                                     Helvetica12_Character_160,Helvetica12_Character_161,Helvetica12_Character_162,Helvetica12_Character_163,Helvetica12_Character_164,Helvetica12_Character_165,Helvetica12_Character_166,Helvetica12_Character_167,Helvetica12_Character_168,Helvetica12_Character_169,Helvetica12_Character_170,Helvetica12_Character_171,Helvetica12_Character_172,Helvetica12_Character_173,Helvetica12_Character_174,Helvetica12_Character_175,\r
+                                                     Helvetica12_Character_176,Helvetica12_Character_177,Helvetica12_Character_178,Helvetica12_Character_179,Helvetica12_Character_180,Helvetica12_Character_181,Helvetica12_Character_182,Helvetica12_Character_183,Helvetica12_Character_184,Helvetica12_Character_185,Helvetica12_Character_186,Helvetica12_Character_187,Helvetica12_Character_188,Helvetica12_Character_189,Helvetica12_Character_190,Helvetica12_Character_191,\r
+                                                     Helvetica12_Character_192,Helvetica12_Character_193,Helvetica12_Character_194,Helvetica12_Character_195,Helvetica12_Character_196,Helvetica12_Character_197,Helvetica12_Character_198,Helvetica12_Character_199,Helvetica12_Character_200,Helvetica12_Character_201,Helvetica12_Character_202,Helvetica12_Character_203,Helvetica12_Character_204,Helvetica12_Character_205,Helvetica12_Character_206,Helvetica12_Character_207,\r
+                                                     Helvetica12_Character_208,Helvetica12_Character_209,Helvetica12_Character_210,Helvetica12_Character_211,Helvetica12_Character_212,Helvetica12_Character_213,Helvetica12_Character_214,Helvetica12_Character_215,Helvetica12_Character_216,Helvetica12_Character_217,Helvetica12_Character_218,Helvetica12_Character_219,Helvetica12_Character_220,Helvetica12_Character_221,Helvetica12_Character_222,Helvetica12_Character_223,\r
+                                                     Helvetica12_Character_224,Helvetica12_Character_225,Helvetica12_Character_226,Helvetica12_Character_227,Helvetica12_Character_228,Helvetica12_Character_229,Helvetica12_Character_230,Helvetica12_Character_231,Helvetica12_Character_232,Helvetica12_Character_233,Helvetica12_Character_234,Helvetica12_Character_235,Helvetica12_Character_236,Helvetica12_Character_237,Helvetica12_Character_238,Helvetica12_Character_239,\r
+                                                     Helvetica12_Character_240,Helvetica12_Character_241,Helvetica12_Character_242,Helvetica12_Character_243,Helvetica12_Character_244,Helvetica12_Character_245,Helvetica12_Character_246,Helvetica12_Character_247,Helvetica12_Character_248,Helvetica12_Character_249,Helvetica12_Character_250,Helvetica12_Character_251,Helvetica12_Character_252,Helvetica12_Character_253,Helvetica12_Character_254,Helvetica12_Character_255,NULL};\r
+\r
+/* The font structure: */\r
+const SFG_Font fgFontHelvetica12 = { "-adobe-helvetica-medium-r-normal--12-120-75-75-p-67-iso8859-1", 256, 16, Helvetica12_Character_Map, 0, 4 };\r
+\r
+static const GLubyte Helvetica18_Character_000[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0, 64, 16,  0,  0, 64, 16,  0,  0, 64, 16,  0,  0, 64, 16,  0,  0, 64, 16,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_001[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_002[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_003[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_004[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_005[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_006[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_007[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_008[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_009[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_010[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_011[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_012[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_013[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_014[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_015[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_016[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_017[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_018[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_019[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_020[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_021[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_022[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_023[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_024[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_025[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_026[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_027[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_028[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_029[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_030[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_031[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_032[] = {  5,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_033[] = {  6,  0,  0,  0,  0,  0, 48, 48,  0,  0, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_034[] = {  5,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,144,144,216,216,216,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_035[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 36,  0, 36,  0, 36,  0,255,128,255,128, 18,  0, 18,  0, 18,  0,127,192,127,192,  9,  0,  9,  0,  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_036[] = { 10,  0,  0,  0,  0,  0,  0,  4,  0,  4,  0, 31,  0, 63,128,117,192,100,192,  4,192,  7,128, 31,  0, 60,  0,116,  0,100,  0,101,128, 63,128, 31,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_037[] = { 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 12, 60, 12,126,  6,102,  6,102,  3,126,  3, 60,  1,128, 61,128,126,192,102,192,102, 96,126, 96, 60, 48,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_038[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 30, 56, 63,112,115,224, 97,192, 97,224, 99, 96,119, 96, 62,  0, 30,  0, 51,  0, 51,  0, 63,  0, 30,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_039[] = {  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64, 32, 32, 96, 96,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_040[] = {  6,  0,  8, 24, 48, 48, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 48, 48, 24,  8,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_041[] = {  6,  0, 64, 96, 48, 48, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 48, 48, 96, 64,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_042[] = {  7,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 56, 56,124, 16, 16,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_043[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 12,  0, 12,  0, 12,  0, 12,  0,127,128,127,128, 12,  0, 12,  0, 12,  0, 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_044[] = {  5,  0,  0, 64, 32, 32, 96, 96,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_045[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,128,127,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_046[] = {  5,  0,  0,  0,  0,  0, 96, 96,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_047[] = {  5,  0,  0,  0,  0,  0,192,192, 64, 64, 96, 96, 32, 32, 48, 48, 16, 16, 24, 24,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_048[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 30,  0, 63,  0, 51,  0, 97,128, 97,128, 97,128, 97,128, 97,128, 97,128, 97,128, 51,  0, 63,  0, 30,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_049[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  6,  0,  6,  0,  6,  0,  6,  0,  6,  0,  6,  0,  6,  0,  6,  0,  6,  0,  6,  0, 62,  0, 62,  0,  6,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_050[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,128,127,128, 96,  0,112,  0, 56,  0, 28,  0, 14,  0,  7,  0,  3,128,  1,128, 97,128,127,  0, 30,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_051[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 30,  0, 63,  0, 99,128, 97,128,  1,128,  3,128, 15,  0, 14,  0,  3,  0, 97,128, 97,128, 63,  0, 30,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_052[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,128,  1,128,  1,128,127,192,127,192, 97,128, 49,128, 25,128, 25,128, 13,128,  7,128,  3,128,  1,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_053[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0,127,  0, 99,128, 97,128,  1,128,  1,128, 99,128,127,  0,126,  0, 96,  0, 96,  0,127,  0,127,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_054[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 30,  0, 63,  0,113,128, 97,128, 97,128, 97,128,127,  0,110,  0, 96,  0, 96,  0, 49,128, 63,128, 30,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_055[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 48,  0, 48,  0, 24,  0, 24,  0, 24,  0, 12,  0, 12,  0,  6,  0,  6,  0,  3,  0,  1,128,127,128,127,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_056[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 30,  0, 63,  0,115,128, 97,128, 97,128, 51,  0, 63,  0, 51,  0, 97,128, 97,128,115,128, 63,  0, 30,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_057[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0,127,  0, 99,  0,  1,128,  1,128, 29,128, 63,128, 97,128, 97,128, 97,128, 99,128, 63,  0, 30,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_058[] = {  5,  0,  0,  0,  0,  0, 96, 96,  0,  0,  0,  0,  0,  0, 96, 96,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_059[] = {  5,  0,  0, 64, 32, 32, 96, 96,  0,  0,  0,  0,  0,  0, 96, 96,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_060[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,128,  7,128, 30,  0, 56,  0, 96,  0, 56,  0, 30,  0,  7,128,  1,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_061[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 63,128, 63,128,  0,  0,  0,  0, 63,128, 63,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_062[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 96,  0,120,  0, 30,  0,  7,  0,  1,128,  7,  0, 30,  0,120,  0, 96,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_063[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 24,  0, 24,  0,  0,  0,  0,  0, 24,  0, 24,  0, 24,  0, 28,  0, 14,  0,  7,  0, 99,  0, 99,  0,127,  0, 62,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_064[] = { 18,  0,  0,  0,  0,  0,  0,  3,240,  0, 15,248,  0, 28,  0,  0, 56,  0,  0, 51,184,  0,103,252,  0,102,102,  0,102, 51,  0,102, 51,  0,102, 49,128, 99, 25,128, 51,185,128, 49,217,128, 24,  3,  0, 14,  7,  0,  7,254,  0,  1,248,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_065[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,192, 48,192, 48, 96, 96, 96, 96,127,224, 63,192, 48,192, 48,192, 25,128, 25,128, 15,  0, 15,  0,  6,  0,  6,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_066[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,192,127,224, 96,112, 96, 48, 96, 48, 96,112,127,224,127,192, 96,192, 96, 96, 96, 96, 96,224,127,192,127,128,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_067[] = { 14,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  7,192, 31,240, 56, 56, 48, 24,112,  0, 96,  0, 96,  0, 96,  0, 96,  0,112,  0, 48, 24, 56, 56, 31,240,  7,192,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_068[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,128,127,192, 96,224, 96, 96, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 96, 96,224,127,192,127,128,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_069[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,192,127,192, 96,  0, 96,  0, 96,  0, 96,  0,127,128,127,128, 96,  0, 96,  0, 96,  0, 96,  0,127,192,127,192,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_070[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 96,  0, 96,  0, 96,  0, 96,  0, 96,  0, 96,  0,127,128,127,128, 96,  0, 96,  0, 96,  0, 96,  0,127,192,127,192,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_071[] = { 14,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  7,216, 31,248, 56, 56, 48, 24,112, 24, 96,248, 96,248, 96,  0, 96,  0,112, 24, 48, 24, 56, 56, 31,240,  7,192,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_072[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48,127,240,127,240, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_073[] = {  6,  0,  0,  0,  0,  0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_074[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 30,  0, 63,  0,115,128, 97,128, 97,128,  1,128,  1,128,  1,128,  1,128,  1,128,  1,128,  1,128,  1,128,  1,128,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_075[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 96, 56, 96,112, 96,224, 97,192, 99,128,103,  0,126,  0,124,  0,110,  0,103,  0, 99,128, 97,192, 96,224, 96,112,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_076[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,128,127,128, 96,  0, 96,  0, 96,  0, 96,  0, 96,  0, 96,  0, 96,  0, 96,  0, 96,  0, 96,  0, 96,  0, 96,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_077[] = { 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 97,134, 97,134, 99,198, 98, 70,102,102,102,102,108, 54,108, 54,120, 30,120, 30,112, 14,112, 14, 96,  6, 96,  6,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_078[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 96, 48, 96,112, 96,240, 96,240, 97,176, 99, 48, 99, 48,102, 48,102, 48,108, 48,120, 48,120, 48,112, 48, 96, 48,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_079[] = { 15,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  7,192, 31,240, 56, 56, 48, 24,112, 28, 96, 12, 96, 12, 96, 12, 96, 12,112, 28, 48, 24, 56, 56, 31,240,  7,192,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_080[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 96,  0, 96,  0, 96,  0, 96,  0, 96,  0, 96,  0,127,128,127,192, 96,224, 96, 96, 96, 96, 96,224,127,192,127,128,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_081[] = { 15,  0,  0,  0,  0,  0,  0,  0,  0,  0, 24,  7,216, 31,240, 56,120, 48,216,112,220, 96, 12, 96, 12, 96, 12, 96, 12,112, 28, 48, 24, 56, 56, 31,240,  7,192,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_082[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 96, 96, 96, 96, 96, 96, 96, 96, 96,192, 96,192,127,128,127,192, 96,224, 96, 96, 96, 96, 96,224,127,192,127,128,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_083[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 31,128, 63,224,112,112, 96, 48,  0, 48,  0,112,  1,224, 15,128, 62,  0,112,  0, 96, 48,112,112, 63,224, 15,128,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_084[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  6,  0,  6,  0,  6,  0,  6,  0,  6,  0,  6,  0,  6,  0,  6,  0,  6,  0,  6,  0,  6,  0,  6,  0,127,224,127,224,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_085[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15,128, 63,224, 48, 96, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_086[] = { 14,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,  0,  7,128,  7,128, 12,192, 12,192, 12,192, 24, 96, 24, 96, 24, 96, 48, 48, 48, 48, 48, 48, 96, 24, 96, 24,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_087[] = { 18,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 12, 12,  0, 12, 12,  0, 14, 28,  0, 26, 22,  0, 27, 54,  0, 27, 54,  0, 51, 51,  0, 51, 51,  0, 49, 35,  0, 49,227,  0, 97,225,128, 96,193,128, 96,193,128, 96,193,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_088[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 96, 48,112,112, 48, 96, 56,224, 24,192, 13,128,  7,  0,  7,  0, 13,128, 24,192, 56,224, 48, 96,112,112, 96, 48,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_089[] = { 14,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,  0,  3,  0,  3,  0,  3,  0,  3,  0,  3,  0,  7,128, 12,192, 24, 96, 24, 96, 48, 48, 48, 48, 96, 24, 96, 24,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_090[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,224,127,224, 96,  0, 48,  0, 24,  0, 12,  0, 14,  0,  6,  0,  3,  0,  1,128,  0,192,  0, 96,127,224,127,224,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_091[] = {  5,  0,120,120, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,120,120,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_092[] = {  5,  0,  0,  0,  0,  0, 24, 24, 16, 16, 48, 48, 32, 32, 96, 96, 64, 64,192,192,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_093[] = {  5,  0,240,240, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,240,240,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_094[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 99,  0, 54,  0, 28,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_095[] = { 10,  0,  0,255,192,255,192,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_096[] = {  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 96, 96, 64, 64, 32,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_097[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 59,  0,119,  0, 99,  0, 99,  0,115,  0, 63,  0,  7,  0, 99,  0,119,  0, 62,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_098[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,111,  0,127,128,113,128, 96,192, 96,192, 96,192, 96,192,113,128,127,128,111,  0, 96,  0, 96,  0, 96,  0, 96,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_099[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 31,  0, 63,128, 49,128, 96,  0, 96,  0, 96,  0, 96,  0, 49,128, 63,128, 31,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_100[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 30,192, 63,192, 49,192, 96,192, 96,192, 96,192, 96,192, 49,192, 63,192, 30,192,  0,192,  0,192,  0,192,  0,192,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_101[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 30,  0, 63,128,113,128, 96,  0, 96,  0,127,128, 97,128, 97,128, 63,  0, 30,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_102[] = {  6,  0,  0,  0,  0,  0, 48, 48, 48, 48, 48, 48, 48, 48,252,252, 48, 48, 60, 28,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_103[] = { 11,  0,  0, 14,  0, 63,128, 49,128,  0,192, 30,192, 63,192, 49,192, 96,192, 96,192, 96,192, 96,192, 48,192, 63,192, 30,192,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_104[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 97,128, 97,128, 97,128, 97,128, 97,128, 97,128, 97,128,113,128,111,128,103,  0, 96,  0, 96,  0, 96,  0, 96,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_105[] = {  4,  0,  0,  0,  0,  0, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,  0,  0, 96, 96,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_106[] = {  4,  0,192,224, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,  0,  0, 96, 96,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_107[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 99,128, 99,  0,103,  0,102,  0,108,  0,124,  0,120,  0,108,  0,102,  0, 99,  0, 96,  0, 96,  0, 96,  0, 96,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_108[] = {  4,  0,  0,  0,  0,  0, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_109[] = { 14,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 99, 24, 99, 24, 99, 24, 99, 24, 99, 24, 99, 24, 99, 24,115,152,111,120,102, 48,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_110[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 97,128, 97,128, 97,128, 97,128, 97,128, 97,128, 97,128,113,128,111,128,103,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_111[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 31,  0, 63,128, 49,128, 96,192, 96,192, 96,192, 96,192, 49,128, 63,128, 31,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_112[] = { 11,  0,  0, 96,  0, 96,  0, 96,  0, 96,  0,111,  0,127,128,113,128, 96,192, 96,192, 96,192, 96,192,113,128,127,128,111,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_113[] = { 11,  0,  0,  0,192,  0,192,  0,192,  0,192, 30,192, 63,192, 49,192, 96,192, 96,192, 96,192, 96,192, 49,192, 63,192, 30,192,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_114[] = {  6,  0,  0,  0,  0,  0, 96, 96, 96, 96, 96, 96, 96,112,108,108,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_115[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,  0,126,  0, 99,  0,  3,  0, 31,  0,126,  0, 96,  0, 99,  0, 63,  0, 30,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_116[] = {  6,  0,  0,  0,  0,  0, 24, 56, 48, 48, 48, 48, 48, 48,252,252, 48, 48, 48,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_117[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 57,128,125,128, 99,128, 97,128, 97,128, 97,128, 97,128, 97,128, 97,128, 97,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_118[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 12,  0, 12,  0, 30,  0, 18,  0, 51,  0, 51,  0, 51,  0, 97,128, 97,128, 97,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_119[] = { 14,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 12,192, 12,192, 28,224, 20,160, 52,176, 51, 48, 51, 48, 99, 24, 99, 24, 99, 24,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_120[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 97,128,115,128, 51,  0, 30,  0, 12,  0, 12,  0, 30,  0, 51,  0,115,128, 97,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_121[] = { 10,  0,  0, 56,  0, 56,  0, 12,  0, 12,  0, 12,  0, 12,  0, 30,  0, 18,  0, 51,  0, 51,  0, 51,  0, 97,128, 97,128, 97,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_122[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,  0,127,  0, 96,  0, 48,  0, 24,  0, 12,  0,  6,  0,  3,  0,127,  0,127,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_123[] = {  6,  0, 12, 24, 48, 48, 48, 48, 48, 48, 96,192, 96, 48, 48, 48, 48, 48, 24, 12,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_124[] = {  4,  0, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_125[] = {  6,  0,192, 96, 48, 48, 48, 48, 48, 48, 24, 12, 24, 48, 48, 48, 48, 48, 96,192,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_126[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,102,  0, 63,  0, 25,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_127[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_128[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_129[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_130[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_131[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_132[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_133[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_134[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_135[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_136[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_137[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_138[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_139[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_140[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_141[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_142[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_143[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_144[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_145[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_146[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_147[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_148[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_149[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_150[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_151[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_152[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_153[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_154[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_155[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_156[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_157[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_158[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_159[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_160[] = {  5,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_161[] = {  6,  0, 48, 48, 48, 48, 48, 48, 48, 48, 16, 16,  0,  0, 48, 48,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_162[] = { 10,  0,  0,  0,  0,  0,  0,  8,  0,  8,  0, 31,  0, 63,128, 53,128,100,  0,100,  0,100,  0,100,  0, 53,128, 63,128, 31,  0,  2,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_163[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,223,  0,255,128, 96,128, 48,  0, 24,  0, 24,  0,126,  0, 48,  0, 96,  0, 97,128, 97,128, 63,  0, 30,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_164[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 97,128,127,128, 51,  0, 51,  0, 51,  0,127,128, 97,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_165[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 12,  0, 12,  0, 12,  0, 12,  0,127,128, 12,  0,127,128, 30,  0, 51,  0, 51,  0, 51,  0, 97,128, 97,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_166[] = {  4,  0,  0, 96, 96, 96, 96, 96, 96,  0,  0,  0,  0, 96, 96, 96, 96, 96, 96, 96,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_167[] = { 10,  0,  0, 30,  0, 63,  0, 97,128, 97,128,  3,128,  7,  0, 31,  0, 57,128,113,128, 97,128, 99,128, 55,  0, 62,  0,120,  0, 97,128, 97,128, 63,  0, 30,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_168[] = {  6,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,216,216,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_169[] = { 15,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  7,192, 24, 48, 32,  8, 35,136, 68, 68, 72,  4, 72,  4, 72,  4, 68, 68, 35,136, 32,  8, 24, 48,  7,192,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_170[] = {  7,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,124,  0, 52,108, 36, 28,100, 56,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_171[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  9,  0, 27,  0, 54,  0,108,  0,108,  0, 54,  0, 27,  0,  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_172[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,192,  0,192,  0,192,127,192,127,192,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_173[] = {  7,  0,  0,  0,  0,  0,  0,  0,  0,  0,124,124,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_174[] = { 14,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  7,192, 24, 48, 32,  8, 36, 40, 68, 68, 68,132, 71,196, 68, 36, 68, 36, 39,200, 32,  8, 24, 48,  7,192,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_175[] = {  5,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,248,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_176[] = {  7,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 56,108, 68,108, 56,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_177[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,128,127,128,  0,  0, 12,  0, 12,  0, 12,  0,127,128,127,128, 12,  0, 12,  0, 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_178[] = {  6,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,248,248, 96, 48, 24,152,248,112,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_179[] = {  6,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,112,248,152, 48, 48,152,248,112,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_180[] = {  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,192, 96, 48,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_181[] = { 10,  0,  0, 96,  0, 96,  0, 96,  0, 96,  0,109,128,127,128,115,128, 97,128, 97,128, 97,128, 97,128, 97,128, 97,128, 97,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_182[] = { 10,  0,  0,  9,  0,  9,  0,  9,  0,  9,  0,  9,  0,  9,  0,  9,  0,  9,  0,  9,  0,  9,  0, 25,  0, 57,  0,121,  0,121,  0,121,  0,121,  0, 57,  0, 31,128,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_183[] = {  4,  0,  0,  0,  0,  0,  0,  0,  0,  0, 96, 96,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_184[] = {  5,  0,240,216, 24,112, 96,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_185[] = {  6,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 48, 48, 48, 48, 48,112,112, 48,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_186[] = {  7,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,124,  0, 56,108, 68, 68,108, 56,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_187[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 72,  0,108,  0, 54,  0, 27,  0, 27,  0, 54,  0,108,  0, 72,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_188[] = { 15,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 24, 24, 24, 24, 12,252,  6,216,  6,120, 51, 56, 49, 24, 49,136, 48,192, 48,192,112, 96,112, 48, 48, 48,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_189[] = { 15,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 24,124, 24,124, 12, 48,  6, 24,  6, 12, 51, 76, 49,124, 49,184, 48,192, 48,192,112, 96,112, 48, 48, 48,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_190[] = { 15,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 24, 24, 24, 24, 12,252,  6,216,  6,120,115, 56,249, 24,153,136, 48,192, 48,192,152, 96,248, 48,112, 48,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_191[] = { 10,  0,  0, 62,  0,127,  0, 99,  0, 99,  0,112,  0, 56,  0, 28,  0, 12,  0, 12,  0, 12,  0,  0,  0,  0,  0, 12,  0, 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_192[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,192, 48,192, 48, 96, 96, 96, 96,127,224, 63,192, 48,192, 48,192, 25,128, 25,128, 15,  0, 15,  0,  6,  0,  6,  0,  0,  0,  6,  0, 12,  0, 24,  0};\r
+static const GLubyte Helvetica18_Character_193[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,192, 48,192, 48, 96, 96, 96, 96,127,224, 63,192, 48,192, 48,192, 25,128, 25,128, 15,  0, 15,  0,  6,  0,  6,  0,  0,  0,  6,  0,  3,  0,  1,128};\r
+static const GLubyte Helvetica18_Character_194[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,192, 48,192, 48, 96, 96, 96, 96,127,224, 63,192, 48,192, 48,192, 25,128, 25,128, 15,  0, 15,  0,  6,  0,  6,  0,  0,  0, 25,128, 15,  0,  6,  0};\r
+static const GLubyte Helvetica18_Character_195[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,192, 48,192, 48, 96, 96, 96, 96,127,224, 63,192, 48,192, 48,192, 25,128, 25,128, 15,  0, 15,  0,  6,  0,  6,  0,  0,  0, 19,  0, 22,128, 12,128};\r
+static const GLubyte Helvetica18_Character_196[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,192, 48,192, 48, 96, 96, 96, 96,127,224, 63,192, 48,192, 48,192, 25,128, 25,128, 15,  0, 15,  0,  6,  0,  6,  0,  0,  0, 25,128, 25,128,  0,  0};\r
+static const GLubyte Helvetica18_Character_197[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,192, 48,192, 48, 96, 96, 96, 96,127,224, 63,192, 48,192, 48,192, 25,128, 25,128, 15,  0, 15,  0,  6,  0,  6,  0, 15,  0, 25,128, 25,128, 15,  0};\r
+static const GLubyte Helvetica18_Character_198[] = { 18,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 96,255,128, 96,255,128, 48,192,  0, 48,192,  0, 63,192,  0, 31,192,  0, 24,255,  0, 24,255,  0, 12,192,  0, 12,192,  0,  6,192,  0,  6,192,  0,  3,255,128,  3,255,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_199[] = { 14,  0,  0, 15,  0, 13,128,  1,128,  7,  0,  7,192, 31,240, 56, 56, 48, 24,112,  0, 96,  0, 96,  0, 96,  0, 96,  0,112,  0, 48, 24, 56, 56, 31,240,  7,192,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_200[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,192,127,192, 96,  0, 96,  0, 96,  0, 96,  0,127,128,127,128, 96,  0, 96,  0, 96,  0, 96,  0,127,192,127,192,  0,  0,  6,  0, 12,  0, 24,  0};\r
+static const GLubyte Helvetica18_Character_201[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,192,127,192, 96,  0, 96,  0, 96,  0, 96,  0,127,128,127,128, 96,  0, 96,  0, 96,  0, 96,  0,127,192,127,192,  0,  0,  6,  0,  3,  0,  1,128};\r
+static const GLubyte Helvetica18_Character_202[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,192,127,192, 96,  0, 96,  0, 96,  0, 96,  0,127,128,127,128, 96,  0, 96,  0, 96,  0, 96,  0,127,192,127,192,  0,  0, 25,128, 15,  0,  6,  0};\r
+static const GLubyte Helvetica18_Character_203[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,192,127,192, 96,  0, 96,  0, 96,  0, 96,  0,127,128,127,128, 96,  0, 96,  0, 96,  0, 96,  0,127,192,127,192,  0,  0, 25,128, 25,128,  0,  0};\r
+static const GLubyte Helvetica18_Character_204[] = {  6,  0,  0,  0,  0,  0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,  0, 48, 96,192};\r
+static const GLubyte Helvetica18_Character_205[] = {  6,  0,  0,  0,  0,  0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,  0, 48, 24, 12};\r
+static const GLubyte Helvetica18_Character_206[] = {  6,  0,  0,  0,  0,  0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,  0,204,120, 48};\r
+static const GLubyte Helvetica18_Character_207[] = {  6,  0,  0,  0,  0,  0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,  0,204,204,  0};\r
+static const GLubyte Helvetica18_Character_208[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,128,127,192, 96,224, 96, 96, 96, 48, 96, 48,252, 48,252, 48, 96, 48, 96, 48, 96, 96, 96,224,127,192,127,128,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_209[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 96, 48, 96,112, 96,240, 96,240, 97,176, 99, 48, 99, 48,102, 48,102, 48,108, 48,108, 48,120, 48,112, 48,112, 48,  0,  0,  9,128, 11, 64,  6, 64};\r
+static const GLubyte Helvetica18_Character_210[] = { 15,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  7,192, 31,240, 56, 56, 48, 24,112, 28, 96, 12, 96, 12, 96, 12, 96, 12,112, 28, 48, 24, 56, 56, 31,240,  7,192,  0,  0,  1,128,  3,  0,  6,  0};\r
+static const GLubyte Helvetica18_Character_211[] = { 15,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  7,192, 31,240, 56, 56, 48, 24,112, 28, 96, 12, 96, 12, 96, 12, 96, 12,112, 28, 48, 24, 56, 56, 31,240,  7,192,  0,  0,  1,128,  0,192,  0, 96};\r
+static const GLubyte Helvetica18_Character_212[] = { 15,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  7,192, 31,240, 56, 56, 48, 24,112, 28, 96, 12, 96, 12, 96, 12, 96, 12,112, 28, 48, 24, 56, 56, 31,240,  7,192,  0,  0,  6, 96,  3,192,  1,128};\r
+static const GLubyte Helvetica18_Character_213[] = { 15,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  7,192, 31,240, 56, 56, 48, 24,112, 28, 96, 12, 96, 12, 96, 12, 96, 12,112, 28, 48, 24, 56, 56, 31,240,  7,192,  0,  0,  4,192,  5,160,  3, 32};\r
+static const GLubyte Helvetica18_Character_214[] = { 15,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  7,192, 31,240, 56, 56, 48, 24,112, 28, 96, 12, 96, 12, 96, 12, 96, 12,112, 28, 48, 24, 56, 56, 31,240,  7,192,  0,  0,  6,192,  6,192,  0,  0};\r
+static const GLubyte Helvetica18_Character_215[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,192,192, 97,128, 51,  0, 30,  0, 12,  0, 30,  0, 51,  0, 97,128,192,192,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_216[] = { 15,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,199,192,255,240,120, 56, 56, 24,108, 28,110, 12,103, 12, 99,140, 97,204,112,220, 48,120, 56, 56, 31,252,  7,204,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_217[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15,128, 63,224, 48, 96, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48,  0,  0,  3,  0,  6,  0, 12,  0};\r
+static const GLubyte Helvetica18_Character_218[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15,128, 63,224, 48, 96, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48,  0,  0,  6,  0,  3,  0,  1,128};\r
+static const GLubyte Helvetica18_Character_219[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15,128, 63,224, 48, 96, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48,  0,  0, 12,192,  7,128,  3,  0};\r
+static const GLubyte Helvetica18_Character_220[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15,128, 63,224, 48, 96, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48,  0,  0, 12,192, 12,192,  0,  0};\r
+static const GLubyte Helvetica18_Character_221[] = { 14,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,  0,  3,  0,  3,  0,  3,  0,  3,  0,  3,  0,  7,128, 12,192, 24, 96, 24, 96, 48, 48, 48, 48, 96, 24, 96, 24,  0,  0,  3,  0,  1,128,  0,192};\r
+static const GLubyte Helvetica18_Character_222[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 96,  0, 96,  0, 96,  0,127,128,127,192, 96,224, 96, 96, 96, 96, 96,224,127,192,127,128, 96,  0, 96,  0, 96,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_223[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,110,  0,111,  0, 99,  0, 99,  0, 99,  0, 99,  0,110,  0,110,  0, 99,  0, 99,  0, 99,  0, 99,  0, 62,  0, 28,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_224[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 59,  0,119,  0, 99,  0, 99,  0,115,  0, 63,  0,  7,  0, 99,  0,119,  0, 62,  0,  0,  0, 12,  0, 24,  0, 48,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_225[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 59,  0,119,  0, 99,  0, 99,  0,115,  0, 63,  0,  7,  0, 99,  0,119,  0, 62,  0,  0,  0, 24,  0, 12,  0,  6,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_226[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 59,  0,119,  0, 99,  0, 99,  0,115,  0, 63,  0,  7,  0, 99,  0,119,  0, 62,  0,  0,  0, 51,  0, 30,  0, 12,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_227[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 59,  0,119,  0, 99,  0, 99,  0,115,  0, 63,  0,  7,  0, 99,  0,119,  0, 62,  0,  0,  0, 38,  0, 45,  0, 25,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_228[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 59,  0,119,  0, 99,  0, 99,  0,115,  0, 63,  0,  7,  0, 99,  0,119,  0, 62,  0,  0,  0, 54,  0, 54,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_229[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 59,  0,119,  0, 99,  0, 99,  0,115,  0, 63,  0,  7,  0, 99,  0,119,  0, 62,  0, 28,  0, 54,  0, 54,  0, 28,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_230[] = { 15,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 58,240,119,252, 99,140, 99,  0,115,  0, 63,252,  7, 12, 99, 12,119,248, 62,240,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_231[] = { 10,  0,  0, 60,  0, 54,  0,  6,  0, 28,  0, 31,  0, 63,128, 49,128, 96,  0, 96,  0, 96,  0, 96,  0, 49,128, 63,128, 31,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_232[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 30,  0, 63,128,113,128, 96,  0, 96,  0,127,128, 97,128, 97,128, 63,  0, 30,  0,  0,  0, 12,  0, 24,  0, 48,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_233[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 30,  0, 63,128,113,128, 96,  0, 96,  0,127,128, 97,128, 97,128, 63,  0, 30,  0,  0,  0, 12,  0,  6,  0,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_234[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 30,  0, 63,128,113,128, 96,  0, 96,  0,127,128, 97,128, 97,128, 63,  0, 30,  0,  0,  0, 51,  0, 30,  0, 12,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_235[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 30,  0, 63,128,113,128, 96,  0, 96,  0,127,128, 97,128, 97,128, 63,  0, 30,  0,  0,  0, 27,  0, 27,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_236[] = {  4,  0,  0,  0,  0,  0, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,  0, 48, 96,192,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_237[] = {  4,  0,  0,  0,  0,  0, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,  0,192, 96, 48,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_238[] = {  4,  0,  0,  0,  0,  0, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,  0,144,240, 96,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_239[] = {  4,  0,  0,  0,  0,  0, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,  0,216,216,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_240[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 31,  0, 63,128, 49,128, 96,192, 96,192, 96,192, 96,192, 49,128, 63,128, 31,  0, 38,  0, 28,  0, 27,  0, 48,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_241[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 97,128, 97,128, 97,128, 97,128, 97,128, 97,128, 97,128,113,128,111,128,103,  0,  0,  0, 38,  0, 45,  0, 25,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_242[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 31,  0, 63,128, 49,128, 96,192, 96,192, 96,192, 96,192, 49,128, 63,128, 31,  0,  0,  0,  6,  0, 12,  0, 24,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_243[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 31,  0, 63,128, 49,128, 96,192, 96,192, 96,192, 96,192, 49,128, 63,128, 31,  0,  0,  0, 12,  0,  6,  0,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_244[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 31,  0, 63,128, 49,128, 96,192, 96,192, 96,192, 96,192, 49,128, 63,128, 31,  0,  0,  0, 25,128, 15,  0,  6,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_245[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 31,  0, 63,128, 49,128, 96,192, 96,192, 96,192, 96,192, 49,128, 63,128, 31,  0,  0,  0, 19,  0, 22,128, 12,128,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_246[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 31,  0, 63,128, 49,128, 96,192, 96,192, 96,192, 96,192, 49,128, 63,128, 31,  0,  0,  0, 27,  0, 27,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_247[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 12,  0, 12,  0,  0,  0,127,128,127,128,  0,  0, 12,  0, 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_248[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,206,  0,127,128, 49,128,120,192,108,192,102,192, 99,192, 49,128, 63,192, 14, 96,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_249[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 57,128,125,128, 99,128, 97,128, 97,128, 97,128, 97,128, 97,128, 97,128, 97,128,  0,  0,  6,  0, 12,  0, 24,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_250[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 57,128,125,128, 99,128, 97,128, 97,128, 97,128, 97,128, 97,128, 97,128, 97,128,  0,  0, 12,  0,  6,  0,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_251[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 57,128,125,128, 99,128, 97,128, 97,128, 97,128, 97,128, 97,128, 97,128, 97,128,  0,  0, 51,  0, 30,  0, 12,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_252[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 57,128,125,128, 99,128, 97,128, 97,128, 97,128, 97,128, 97,128, 97,128, 97,128,  0,  0, 51,  0, 51,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_253[] = { 10,  0,  0, 56,  0, 56,  0, 12,  0, 12,  0, 12,  0, 12,  0, 30,  0, 18,  0, 51,  0, 51,  0, 51,  0, 97,128, 97,128, 97,128,  0,  0, 12,  0,  6,  0,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_254[] = { 11,  0,  0, 96,  0, 96,  0, 96,  0, 96,  0,111,  0,127,128,113,128, 96,192, 96,192, 96,192, 96,192,113,128,127,128,111,  0, 96,  0, 96,  0, 96,  0, 96,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte Helvetica18_Character_255[] = { 10,  0,  0, 56,  0, 56,  0, 12,  0, 12,  0, 12,  0, 12,  0, 30,  0, 18,  0, 51,  0, 51,  0, 51,  0, 97,128, 97,128, 97,128,  0,  0, 51,  0, 51,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+\r
+/* The font characters mapping: */\r
+static const GLubyte* Helvetica18_Character_Map[] = {Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,\r
+                                                     Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,\r
+                                                     Helvetica18_Character_032,Helvetica18_Character_033,Helvetica18_Character_034,Helvetica18_Character_035,Helvetica18_Character_036,Helvetica18_Character_037,Helvetica18_Character_038,Helvetica18_Character_039,Helvetica18_Character_040,Helvetica18_Character_041,Helvetica18_Character_042,Helvetica18_Character_043,Helvetica18_Character_044,Helvetica18_Character_045,Helvetica18_Character_046,Helvetica18_Character_047,\r
+                                                     Helvetica18_Character_048,Helvetica18_Character_049,Helvetica18_Character_050,Helvetica18_Character_051,Helvetica18_Character_052,Helvetica18_Character_053,Helvetica18_Character_054,Helvetica18_Character_055,Helvetica18_Character_056,Helvetica18_Character_057,Helvetica18_Character_058,Helvetica18_Character_059,Helvetica18_Character_060,Helvetica18_Character_061,Helvetica18_Character_062,Helvetica18_Character_063,\r
+                                                     Helvetica18_Character_064,Helvetica18_Character_065,Helvetica18_Character_066,Helvetica18_Character_067,Helvetica18_Character_068,Helvetica18_Character_069,Helvetica18_Character_070,Helvetica18_Character_071,Helvetica18_Character_072,Helvetica18_Character_073,Helvetica18_Character_074,Helvetica18_Character_075,Helvetica18_Character_076,Helvetica18_Character_077,Helvetica18_Character_078,Helvetica18_Character_079,\r
+                                                     Helvetica18_Character_080,Helvetica18_Character_081,Helvetica18_Character_082,Helvetica18_Character_083,Helvetica18_Character_084,Helvetica18_Character_085,Helvetica18_Character_086,Helvetica18_Character_087,Helvetica18_Character_088,Helvetica18_Character_089,Helvetica18_Character_090,Helvetica18_Character_091,Helvetica18_Character_092,Helvetica18_Character_093,Helvetica18_Character_094,Helvetica18_Character_095,\r
+                                                     Helvetica18_Character_096,Helvetica18_Character_097,Helvetica18_Character_098,Helvetica18_Character_099,Helvetica18_Character_100,Helvetica18_Character_101,Helvetica18_Character_102,Helvetica18_Character_103,Helvetica18_Character_104,Helvetica18_Character_105,Helvetica18_Character_106,Helvetica18_Character_107,Helvetica18_Character_108,Helvetica18_Character_109,Helvetica18_Character_110,Helvetica18_Character_111,\r
+                                                     Helvetica18_Character_112,Helvetica18_Character_113,Helvetica18_Character_114,Helvetica18_Character_115,Helvetica18_Character_116,Helvetica18_Character_117,Helvetica18_Character_118,Helvetica18_Character_119,Helvetica18_Character_120,Helvetica18_Character_121,Helvetica18_Character_122,Helvetica18_Character_123,Helvetica18_Character_124,Helvetica18_Character_125,Helvetica18_Character_126,Helvetica18_Character_032,\r
+                                                     Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,\r
+                                                     Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,\r
+                                                     Helvetica18_Character_160,Helvetica18_Character_161,Helvetica18_Character_162,Helvetica18_Character_163,Helvetica18_Character_164,Helvetica18_Character_165,Helvetica18_Character_166,Helvetica18_Character_167,Helvetica18_Character_168,Helvetica18_Character_169,Helvetica18_Character_170,Helvetica18_Character_171,Helvetica18_Character_172,Helvetica18_Character_173,Helvetica18_Character_174,Helvetica18_Character_175,\r
+                                                     Helvetica18_Character_176,Helvetica18_Character_177,Helvetica18_Character_178,Helvetica18_Character_179,Helvetica18_Character_180,Helvetica18_Character_181,Helvetica18_Character_182,Helvetica18_Character_183,Helvetica18_Character_184,Helvetica18_Character_185,Helvetica18_Character_186,Helvetica18_Character_187,Helvetica18_Character_188,Helvetica18_Character_189,Helvetica18_Character_190,Helvetica18_Character_191,\r
+                                                     Helvetica18_Character_192,Helvetica18_Character_193,Helvetica18_Character_194,Helvetica18_Character_195,Helvetica18_Character_196,Helvetica18_Character_197,Helvetica18_Character_198,Helvetica18_Character_199,Helvetica18_Character_200,Helvetica18_Character_201,Helvetica18_Character_202,Helvetica18_Character_203,Helvetica18_Character_204,Helvetica18_Character_205,Helvetica18_Character_206,Helvetica18_Character_207,\r
+                                                     Helvetica18_Character_208,Helvetica18_Character_209,Helvetica18_Character_210,Helvetica18_Character_211,Helvetica18_Character_212,Helvetica18_Character_213,Helvetica18_Character_214,Helvetica18_Character_215,Helvetica18_Character_216,Helvetica18_Character_217,Helvetica18_Character_218,Helvetica18_Character_219,Helvetica18_Character_220,Helvetica18_Character_221,Helvetica18_Character_222,Helvetica18_Character_223,\r
+                                                     Helvetica18_Character_224,Helvetica18_Character_225,Helvetica18_Character_226,Helvetica18_Character_227,Helvetica18_Character_228,Helvetica18_Character_229,Helvetica18_Character_230,Helvetica18_Character_231,Helvetica18_Character_232,Helvetica18_Character_233,Helvetica18_Character_234,Helvetica18_Character_235,Helvetica18_Character_236,Helvetica18_Character_237,Helvetica18_Character_238,Helvetica18_Character_239,\r
+                                                     Helvetica18_Character_240,Helvetica18_Character_241,Helvetica18_Character_242,Helvetica18_Character_243,Helvetica18_Character_244,Helvetica18_Character_245,Helvetica18_Character_246,Helvetica18_Character_247,Helvetica18_Character_248,Helvetica18_Character_249,Helvetica18_Character_250,Helvetica18_Character_251,Helvetica18_Character_252,Helvetica18_Character_253,Helvetica18_Character_254,Helvetica18_Character_255,NULL};\r
+\r
+/* The font structure: */\r
+const SFG_Font fgFontHelvetica18 = { "-adobe-helvetica-medium-r-normal--18-180-75-75-p-98-iso8859-1", 256, 23, Helvetica18_Character_Map, 0, 5 };\r
+\r
+static const GLubyte TimesRoman10_Character_000[] = {  8,  0,  0,  0,  0,170,  0,130,  0,130,  0,170,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_001[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_002[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_003[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_004[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_005[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_006[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_007[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_008[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_009[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_010[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_011[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_012[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_013[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_014[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_015[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_016[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_017[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_018[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_019[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_020[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_021[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_022[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_023[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_024[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_025[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_026[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_027[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_028[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_029[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_030[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_031[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_032[] = {  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_033[] = {  3,  0,  0,  0,  0, 64,  0, 64, 64, 64, 64, 64,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_034[] = {  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,160,160,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_035[] = {  5,  0,  0,  0,  0, 80, 80,248, 80,248, 80, 80,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_036[] = {  5,  0,  0,  0, 32,224,144, 16, 96,128,144,112, 32,  0,  0};\r
+static const GLubyte TimesRoman10_Character_037[] = {  8,  0,  0,  0,  0, 68, 42, 42, 86,168,164,126,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_038[] = {  8,  0,  0,  0,  0,118,141,152,116,110, 80, 48,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_039[] = {  3,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,192,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_040[] = {  4,  0,  0, 32, 64, 64,128,128,128, 64, 64, 32,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_041[] = {  4,  0,  0,128, 64, 64, 32, 32, 32, 64, 64,128,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_042[] = {  5,  0,  0,  0,  0,  0,  0,  0,  0,160, 64,160,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_043[] = {  6,  0,  0,  0,  0, 32, 32,248, 32, 32,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_044[] = {  3,  0,  0, 64, 64, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_045[] = {  7,  0,  0,  0,  0,  0,  0,120,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_046[] = {  3,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_047[] = {  3,  0,  0,  0,  0,128,128, 64, 64, 64, 32, 32,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_048[] = {  5,  0,  0,  0,  0, 96,144,144,144,144,144, 96,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_049[] = {  5,  0,  0,  0,  0,112, 32, 32, 32, 32, 96, 32,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_050[] = {  5,  0,  0,  0,  0,240, 64, 32, 32, 16,144, 96,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_051[] = {  5,  0,  0,  0,  0,224, 16, 16, 96, 16,144, 96,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_052[] = {  5,  0,  0,  0,  0, 16, 16,248,144, 80, 48, 16,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_053[] = {  5,  0,  0,  0,  0,224,144, 16, 16,224, 64,112,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_054[] = {  5,  0,  0,  0,  0, 96,144,144,144,224, 64, 48,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_055[] = {  5,  0,  0,  0,  0, 64, 64, 64, 32, 32,144,240,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_056[] = {  5,  0,  0,  0,  0, 96,144,144, 96,144,144, 96,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_057[] = {  5,  0,  0,  0,  0,192, 32,112,144,144,144, 96,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_058[] = {  3,  0,  0,  0,  0, 64,  0,  0,  0, 64,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_059[] = {  3,  0,  0, 64, 64, 64,  0,  0,  0, 64,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_060[] = {  5,  0,  0,  0,  0, 16, 32, 64, 32, 16,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_061[] = {  6,  0,  0,  0,  0,  0,248,  0,248,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_062[] = {  5,  0,  0,  0,  0,128, 64, 32, 64,128,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_063[] = {  4,  0,  0,  0,  0, 64,  0, 64, 64, 32,160,224,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_064[] = {  9,  0,  0,  0,  0, 62,  0, 64,  0,146,  0,173,  0,165,  0,165,  0,157,  0, 66,  0, 60,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_065[] = {  8,  0,  0,  0,  0,238, 68,124, 40, 40, 56, 16,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_066[] = {  6,  0,  0,  0,  0,240, 72, 72,112, 72, 72,240,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_067[] = {  7,  0,  0,  0,  0,120,196,128,128,128,196,124,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_068[] = {  7,  0,  0,  0,  0,248, 76, 68, 68, 68, 76,248,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_069[] = {  6,  0,  0,  0,  0,248, 72, 64,112, 64, 72,248,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_070[] = {  6,  0,  0,  0,  0,224, 64, 64,112, 64, 72,248,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_071[] = {  7,  0,  0,  0,  0,120,196,132,156,128,196,124,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_072[] = {  8,  0,  0,  0,  0,238, 68, 68,124, 68, 68,238,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_073[] = {  4,  0,  0,  0,  0,224, 64, 64, 64, 64, 64,224,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_074[] = {  4,  0,  0,  0,  0,192,160, 32, 32, 32, 32,112,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_075[] = {  7,  0,  0,  0,  0,236, 72, 80, 96, 80, 72,236,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_076[] = {  6,  0,  0,  0,  0,248, 72, 64, 64, 64, 64,224,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_077[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,235,128, 73,  0, 85,  0, 85,  0, 99,  0, 99,  0,227,128,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_078[] = {  8,  0,  0,  0,  0,228, 76, 76, 84, 84,100,238,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_079[] = {  7,  0,  0,  0,  0,120,204,132,132,132,204,120,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_080[] = {  6,  0,  0,  0,  0,224, 64, 64,112, 72, 72,240,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_081[] = {  7,  0,  0, 12, 24,112,204,132,132,132,204,120,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_082[] = {  7,  0,  0,  0,  0,236, 72, 80,112, 72, 72,240,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_083[] = {  5,  0,  0,  0,  0,224,144, 16, 96,192,144,112,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_084[] = {  6,  0,  0,  0,  0,112, 32, 32, 32, 32,168,248,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_085[] = {  8,  0,  0,  0,  0, 56,108, 68, 68, 68, 68,238,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_086[] = {  8,  0,  0,  0,  0, 16, 16, 40, 40,108, 68,238,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_087[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 34,  0, 34,  0, 85,  0, 85,  0,201,128,136,128,221,192,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_088[] = {  8,  0,  0,  0,  0,238, 68, 40, 16, 40, 68,238,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_089[] = {  8,  0,  0,  0,  0, 56, 16, 16, 40, 40, 68,238,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_090[] = {  6,  0,  0,  0,  0,248,136, 64, 32, 16,136,248,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_091[] = {  3,  0,  0,192,128,128,128,128,128,128,128,192,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_092[] = {  3,  0,  0,  0,  0, 32, 32, 64, 64, 64,128,128,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_093[] = {  3,  0,  0,192, 64, 64, 64, 64, 64, 64, 64,192,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_094[] = {  5,  0,  0,  0,  0,  0,  0,  0,  0, 80, 80, 32,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_095[] = {  5,  0,248,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_096[] = {  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,192,128,  0,  0};\r
+static const GLubyte TimesRoman10_Character_097[] = {  4,  0,  0,  0,  0,224,160, 96, 32,192,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_098[] = {  5,  0,  0,  0,  0,224,144,144,144,224,128,128,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_099[] = {  4,  0,  0,  0,  0, 96,128,128,128, 96,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_100[] = {  5,  0,  0,  0,  0,104,144,144,144,112, 16, 48,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_101[] = {  4,  0,  0,  0,  0, 96,128,192,160, 96,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_102[] = {  4,  0,  0,  0,  0,224, 64, 64, 64,224, 64, 48,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_103[] = {  5,  0,  0,224,144, 96, 64,160,160,112,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_104[] = {  5,  0,  0,  0,  0,216,144,144,144,224,128,128,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_105[] = {  3,  0,  0,  0,  0, 64, 64, 64, 64,192,  0, 64,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_106[] = {  3,  0,  0,128, 64, 64, 64, 64, 64,192,  0, 64,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_107[] = {  5,  0,  0,  0,  0,152,144,224,160,144,128,128,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_108[] = {  4,  0,  0,  0,  0,224, 64, 64, 64, 64, 64,192,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_109[] = {  8,  0,  0,  0,  0,219,146,146,146,236,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_110[] = {  5,  0,  0,  0,  0,216,144,144,144,224,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_111[] = {  5,  0,  0,  0,  0, 96,144,144,144, 96,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_112[] = {  5,  0,  0,192,128,224,144,144,144,224,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_113[] = {  5,  0,  0, 56, 16,112,144,144,144,112,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_114[] = {  4,  0,  0,  0,  0,224, 64, 64, 96,160,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_115[] = {  4,  0,  0,  0,  0,224, 32, 96,128,224,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_116[] = {  4,  0,  0,  0,  0, 48, 64, 64, 64,224, 64,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_117[] = {  5,  0,  0,  0,  0,104,144,144,144,144,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_118[] = {  5,  0,  0,  0,  0, 32, 96, 80,144,216,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_119[] = {  8,  0,  0,  0,  0, 40,108, 84,146,219,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_120[] = {  6,  0,  0,  0,  0,216, 80, 32, 80,216,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_121[] = {  5,  0,  0,128,128, 64, 96,160,144,184,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_122[] = {  5,  0,  0,  0,  0,240,144, 64, 32,240,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_123[] = {  4,  0,  0, 32, 64, 64, 64,128, 64, 64, 64, 32,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_124[] = {  2,  0,  0,128,128,128,128,128,128,128,128,128,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_125[] = {  4,  0,  0,128, 64, 64, 64, 32, 64, 64, 64,128,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_126[] = {  7,  0,  0,  0,  0,  0,  0,152,100,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_127[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_128[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_129[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_130[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_131[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_132[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_133[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_134[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_135[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_136[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_137[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_138[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_139[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_140[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_141[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_142[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_143[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_144[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_145[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_146[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_147[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_148[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_149[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_150[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_151[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_152[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_153[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_154[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_155[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_156[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_157[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_158[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_159[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_160[] = {  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_161[] = {  3,  0,  0, 64, 64, 64, 64, 64,  0, 64,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_162[] = {  5,  0,  0,  0,128,224,144,128,144,112, 16,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_163[] = {  5,  0,  0,  0,  0,240,200, 64,224, 64, 80, 48,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_164[] = {  5,  0,  0,  0,  0,  0,136,112, 80, 80,112,136,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_165[] = {  5,  0,  0,  0,  0,112, 32,248, 32,216, 80,136,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_166[] = {  2,  0,  0,  0,  0,128,128,128,  0,128,128,128,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_167[] = {  5,  0,  0,  0,224,144, 32, 80,144,160, 64,144,112,  0,  0};\r
+static const GLubyte TimesRoman10_Character_168[] = {  5,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 80,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_169[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 28,  0, 34,  0, 77,  0, 81,  0, 77,  0, 34,  0, 28,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_170[] = {  4,  0,  0,  0,  0,  0,  0,224,  0,160, 32,192,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_171[] = {  5,  0,  0,  0,  0,  0, 80,160,160, 80,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_172[] = {  7,  0,  0,  0,  0,  0,  4,  4,124,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_173[] = {  4,  0,  0,  0,  0,  0,  0,224,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_174[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 28,  0, 34,  0, 85,  0, 89,  0, 93,  0, 34,  0, 28,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_175[] = {  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,224,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_176[] = {  4,  0,  0,  0,  0,  0,  0,  0, 96,144,144, 96,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_177[] = {  6,  0,  0,  0,  0,248,  0, 32, 32,248, 32, 32,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_178[] = {  3,  0,  0,  0,  0,  0,  0,  0,224, 64,160, 96,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_179[] = {  3,  0,  0,  0,  0,  0,  0,  0,192, 32, 64,224,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_180[] = {  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,128, 64,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_181[] = {  5,  0,  0,128,128,232,144,144,144,144,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_182[] = {  6,  0,  0, 40, 40, 40, 40,104,232,232,232,124,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_183[] = {  2,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_184[] = {  4,  0,192, 32, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_185[] = {  3,  0,  0,  0,  0,  0,  0,  0,224, 64,192, 64,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_186[] = {  4,  0,  0,  0,  0,  0,  0,224,  0, 64,160, 64,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_187[] = {  5,  0,  0,  0,  0,  0,160, 80, 80,160,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_188[] = {  8,  0,  0,  0,  0, 68, 62, 44,244, 72,200, 68,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_189[] = {  8,  0,  0,  0,  0, 78, 36, 42,246, 72,200, 68,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_190[] = {  8,  0,  0,  0,  0, 68, 62, 44,212, 40, 72,228,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_191[] = {  4,  0,  0,224,160,128, 64, 64,  0, 64,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_192[] = {  8,  0,  0,  0,  0,238, 68,124, 40, 40, 56, 16,  0, 16, 32};\r
+static const GLubyte TimesRoman10_Character_193[] = {  8,  0,  0,  0,  0,238, 68,124, 40, 40, 56, 16,  0, 16,  8};\r
+static const GLubyte TimesRoman10_Character_194[] = {  8,  0,  0,  0,  0,238, 68,124, 40, 40, 56, 16,  0, 40, 16};\r
+static const GLubyte TimesRoman10_Character_195[] = {  8,  0,  0,  0,  0,238, 68,124, 40, 40, 56, 16,  0, 40, 20};\r
+static const GLubyte TimesRoman10_Character_196[] = {  8,  0,  0,  0,  0,238, 68,124, 40, 40, 56, 16,  0, 40,  0};\r
+static const GLubyte TimesRoman10_Character_197[] = {  8,  0,  0,  0,  0,238, 68,124, 40, 40, 56, 16, 16, 40, 16};\r
+static const GLubyte TimesRoman10_Character_198[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,239,  0, 73,  0,120,  0, 46,  0, 40,  0, 57,  0, 31,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_199[] = {  7,  0, 96, 16, 32,120,196,128,128,128,196,124,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_200[] = {  6,  0,  0,  0,  0,248, 72, 64,112, 64, 72,248,  0, 32, 64};\r
+static const GLubyte TimesRoman10_Character_201[] = {  6,  0,  0,  0,  0,248, 72, 64,112, 64, 72,248,  0, 32, 16};\r
+static const GLubyte TimesRoman10_Character_202[] = {  6,  0,  0,  0,  0,248, 72, 64,112, 64, 72,248,  0, 80, 32};\r
+static const GLubyte TimesRoman10_Character_203[] = {  6,  0,  0,  0,  0,248, 72, 64,112, 64, 72,248,  0, 80,  0};\r
+static const GLubyte TimesRoman10_Character_204[] = {  4,  0,  0,  0,  0,224, 64, 64, 64, 64, 64,224,  0, 64,128};\r
+static const GLubyte TimesRoman10_Character_205[] = {  4,  0,  0,  0,  0,224, 64, 64, 64, 64, 64,224,  0, 64, 32};\r
+static const GLubyte TimesRoman10_Character_206[] = {  4,  0,  0,  0,  0,224, 64, 64, 64, 64, 64,224,  0,160, 64};\r
+static const GLubyte TimesRoman10_Character_207[] = {  4,  0,  0,  0,  0,224, 64, 64, 64, 64, 64,224,  0,160,  0};\r
+static const GLubyte TimesRoman10_Character_208[] = {  7,  0,  0,  0,  0,248, 76, 68,228, 68, 76,248,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_209[] = {  8,  0,  0,  0,  0,228, 76, 76, 84, 84,100,238,  0, 80, 40};\r
+static const GLubyte TimesRoman10_Character_210[] = {  7,  0,  0,  0,  0,120,204,132,132,132,204,120,  0, 32, 64};\r
+static const GLubyte TimesRoman10_Character_211[] = {  7,  0,  0,  0,  0,120,204,132,132,132,204,120,  0, 16,  8};\r
+static const GLubyte TimesRoman10_Character_212[] = {  7,  0,  0,  0,  0,120,204,132,132,132,204,120,  0, 80, 32};\r
+static const GLubyte TimesRoman10_Character_213[] = {  7,  0,  0,  0,  0,120,204,132,132,132,204,120,  0, 80, 40};\r
+static const GLubyte TimesRoman10_Character_214[] = {  7,  0,  0,  0,  0,120,204,132,132,132,204,120,  0, 80,  0};\r
+static const GLubyte TimesRoman10_Character_215[] = {  6,  0,  0,  0,  0,136, 80, 32, 80,136,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_216[] = {  8,  0,  0,  0,128,124,102, 82, 82, 74,102, 62,  1,  0,  0};\r
+static const GLubyte TimesRoman10_Character_217[] = {  8,  0,  0,  0,  0, 56,108, 68, 68, 68, 68,238,  0, 16, 32};\r
+static const GLubyte TimesRoman10_Character_218[] = {  8,  0,  0,  0,  0, 56,108, 68, 68, 68, 68,238,  0, 16,  8};\r
+static const GLubyte TimesRoman10_Character_219[] = {  8,  0,  0,  0,  0, 56,108, 68, 68, 68, 68,238,  0, 40, 16};\r
+static const GLubyte TimesRoman10_Character_220[] = {  8,  0,  0,  0,  0, 56,108, 68, 68, 68, 68,238,  0, 40,  0};\r
+static const GLubyte TimesRoman10_Character_221[] = {  8,  0,  0,  0,  0, 56, 16, 16, 40, 40, 68,238,  0, 16,  8};\r
+static const GLubyte TimesRoman10_Character_222[] = {  6,  0,  0,  0,  0,224, 64,112, 72,112, 64,224,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_223[] = {  5,  0,  0,  0,  0,224, 80, 80, 96, 80, 80, 32,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_224[] = {  4,  0,  0,  0,  0,224,160, 96, 32,192,  0, 64,128,  0,  0};\r
+static const GLubyte TimesRoman10_Character_225[] = {  4,  0,  0,  0,  0,224,160, 96, 32,192,  0, 64, 32,  0,  0};\r
+static const GLubyte TimesRoman10_Character_226[] = {  4,  0,  0,  0,  0,224,160, 96, 32,192,  0,160, 64,  0,  0};\r
+static const GLubyte TimesRoman10_Character_227[] = {  4,  0,  0,  0,  0,224,160, 96, 32,192,  0,160, 80,  0,  0};\r
+static const GLubyte TimesRoman10_Character_228[] = {  4,  0,  0,  0,  0,224,160, 96, 32,192,  0,160,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_229[] = {  4,  0,  0,  0,  0,224,160, 96, 32,192, 64,160, 64,  0,  0};\r
+static const GLubyte TimesRoman10_Character_230[] = {  6,  0,  0,  0,  0,216,160,112, 40,216,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_231[] = {  4,  0,192, 32, 64, 96,128,128,128, 96,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_232[] = {  4,  0,  0,  0,  0, 96,128,192,160, 96,  0, 64,128,  0,  0};\r
+static const GLubyte TimesRoman10_Character_233[] = {  4,  0,  0,  0,  0, 96,128,192,160, 96,  0, 64, 32,  0,  0};\r
+static const GLubyte TimesRoman10_Character_234[] = {  4,  0,  0,  0,  0, 96,128,192,160, 96,  0,160, 64,  0,  0};\r
+static const GLubyte TimesRoman10_Character_235[] = {  4,  0,  0,  0,  0, 96,128,192,160, 96,  0,160,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_236[] = {  4,  0,  0,  0,  0,224, 64, 64, 64,192,  0, 64,128,  0,  0};\r
+static const GLubyte TimesRoman10_Character_237[] = {  4,  0,  0,  0,  0,224, 64, 64, 64,192,  0, 64, 32,  0,  0};\r
+static const GLubyte TimesRoman10_Character_238[] = {  4,  0,  0,  0,  0,224, 64, 64, 64,192,  0,160, 64,  0,  0};\r
+static const GLubyte TimesRoman10_Character_239[] = {  4,  0,  0,  0,  0,224, 64, 64, 64,192,  0,160,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_240[] = {  5,  0,  0,  0,  0, 96,144,144,144,112,160,112, 64,  0,  0};\r
+static const GLubyte TimesRoman10_Character_241[] = {  5,  0,  0,  0,  0,216,144,144,144,224,  0,160, 80,  0,  0};\r
+static const GLubyte TimesRoman10_Character_242[] = {  5,  0,  0,  0,  0, 96,144,144,144, 96,  0, 32, 64,  0,  0};\r
+static const GLubyte TimesRoman10_Character_243[] = {  5,  0,  0,  0,  0, 96,144,144,144, 96,  0, 64, 32,  0,  0};\r
+static const GLubyte TimesRoman10_Character_244[] = {  5,  0,  0,  0,  0, 96,144,144,144, 96,  0,160, 64,  0,  0};\r
+static const GLubyte TimesRoman10_Character_245[] = {  5,  0,  0,  0,  0, 96,144,144,144, 96,  0,160, 80,  0,  0};\r
+static const GLubyte TimesRoman10_Character_246[] = {  5,  0,  0,  0,  0, 96,144,144,144, 96,  0,160,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_247[] = {  6,  0,  0,  0,  0, 32,  0,248,  0, 32,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_248[] = {  5,  0,  0,  0,  0,224,144,144,144,112,  8,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_249[] = {  5,  0,  0,  0,  0,104,144,144,144,144,  0, 32, 64,  0,  0};\r
+static const GLubyte TimesRoman10_Character_250[] = {  5,  0,  0,  0,  0,104,144,144,144,144,  0, 64, 32,  0,  0};\r
+static const GLubyte TimesRoman10_Character_251[] = {  5,  0,  0,  0,  0,104,144,144,144,144,  0, 80, 32,  0,  0};\r
+static const GLubyte TimesRoman10_Character_252[] = {  5,  0,  0,  0,  0,104,144,144,144,144,  0, 80,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_253[] = {  5,  0,  0,128,192, 64, 96,160,144,184,  0, 32, 16,  0,  0};\r
+static const GLubyte TimesRoman10_Character_254[] = {  5,  0,  0,192,128,224,144,144,144,224,128,128,  0,  0,  0};\r
+static const GLubyte TimesRoman10_Character_255[] = {  5,  0,  0,128,192, 64, 96,160,144,184,  0,160,  0,  0,  0};\r
+\r
+/* The font characters mapping: */\r
+static const GLubyte* TimesRoman10_Character_Map[] = {TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,\r
+                                                      TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,\r
+                                                      TimesRoman10_Character_032,TimesRoman10_Character_033,TimesRoman10_Character_034,TimesRoman10_Character_035,TimesRoman10_Character_036,TimesRoman10_Character_037,TimesRoman10_Character_038,TimesRoman10_Character_039,TimesRoman10_Character_040,TimesRoman10_Character_041,TimesRoman10_Character_042,TimesRoman10_Character_043,TimesRoman10_Character_044,TimesRoman10_Character_045,TimesRoman10_Character_046,TimesRoman10_Character_047,\r
+                                                      TimesRoman10_Character_048,TimesRoman10_Character_049,TimesRoman10_Character_050,TimesRoman10_Character_051,TimesRoman10_Character_052,TimesRoman10_Character_053,TimesRoman10_Character_054,TimesRoman10_Character_055,TimesRoman10_Character_056,TimesRoman10_Character_057,TimesRoman10_Character_058,TimesRoman10_Character_059,TimesRoman10_Character_060,TimesRoman10_Character_061,TimesRoman10_Character_062,TimesRoman10_Character_063,\r
+                                                      TimesRoman10_Character_064,TimesRoman10_Character_065,TimesRoman10_Character_066,TimesRoman10_Character_067,TimesRoman10_Character_068,TimesRoman10_Character_069,TimesRoman10_Character_070,TimesRoman10_Character_071,TimesRoman10_Character_072,TimesRoman10_Character_073,TimesRoman10_Character_074,TimesRoman10_Character_075,TimesRoman10_Character_076,TimesRoman10_Character_077,TimesRoman10_Character_078,TimesRoman10_Character_079,\r
+                                                      TimesRoman10_Character_080,TimesRoman10_Character_081,TimesRoman10_Character_082,TimesRoman10_Character_083,TimesRoman10_Character_084,TimesRoman10_Character_085,TimesRoman10_Character_086,TimesRoman10_Character_087,TimesRoman10_Character_088,TimesRoman10_Character_089,TimesRoman10_Character_090,TimesRoman10_Character_091,TimesRoman10_Character_092,TimesRoman10_Character_093,TimesRoman10_Character_094,TimesRoman10_Character_095,\r
+                                                      TimesRoman10_Character_096,TimesRoman10_Character_097,TimesRoman10_Character_098,TimesRoman10_Character_099,TimesRoman10_Character_100,TimesRoman10_Character_101,TimesRoman10_Character_102,TimesRoman10_Character_103,TimesRoman10_Character_104,TimesRoman10_Character_105,TimesRoman10_Character_106,TimesRoman10_Character_107,TimesRoman10_Character_108,TimesRoman10_Character_109,TimesRoman10_Character_110,TimesRoman10_Character_111,\r
+                                                      TimesRoman10_Character_112,TimesRoman10_Character_113,TimesRoman10_Character_114,TimesRoman10_Character_115,TimesRoman10_Character_116,TimesRoman10_Character_117,TimesRoman10_Character_118,TimesRoman10_Character_119,TimesRoman10_Character_120,TimesRoman10_Character_121,TimesRoman10_Character_122,TimesRoman10_Character_123,TimesRoman10_Character_124,TimesRoman10_Character_125,TimesRoman10_Character_126,TimesRoman10_Character_032,\r
+                                                      TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,\r
+                                                      TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,\r
+                                                      TimesRoman10_Character_160,TimesRoman10_Character_161,TimesRoman10_Character_162,TimesRoman10_Character_163,TimesRoman10_Character_164,TimesRoman10_Character_165,TimesRoman10_Character_166,TimesRoman10_Character_167,TimesRoman10_Character_168,TimesRoman10_Character_169,TimesRoman10_Character_170,TimesRoman10_Character_171,TimesRoman10_Character_172,TimesRoman10_Character_173,TimesRoman10_Character_174,TimesRoman10_Character_175,\r
+                                                      TimesRoman10_Character_176,TimesRoman10_Character_177,TimesRoman10_Character_178,TimesRoman10_Character_179,TimesRoman10_Character_180,TimesRoman10_Character_181,TimesRoman10_Character_182,TimesRoman10_Character_183,TimesRoman10_Character_184,TimesRoman10_Character_185,TimesRoman10_Character_186,TimesRoman10_Character_187,TimesRoman10_Character_188,TimesRoman10_Character_189,TimesRoman10_Character_190,TimesRoman10_Character_191,\r
+                                                      TimesRoman10_Character_192,TimesRoman10_Character_193,TimesRoman10_Character_194,TimesRoman10_Character_195,TimesRoman10_Character_196,TimesRoman10_Character_197,TimesRoman10_Character_198,TimesRoman10_Character_199,TimesRoman10_Character_200,TimesRoman10_Character_201,TimesRoman10_Character_202,TimesRoman10_Character_203,TimesRoman10_Character_204,TimesRoman10_Character_205,TimesRoman10_Character_206,TimesRoman10_Character_207,\r
+                                                      TimesRoman10_Character_208,TimesRoman10_Character_209,TimesRoman10_Character_210,TimesRoman10_Character_211,TimesRoman10_Character_212,TimesRoman10_Character_213,TimesRoman10_Character_214,TimesRoman10_Character_215,TimesRoman10_Character_216,TimesRoman10_Character_217,TimesRoman10_Character_218,TimesRoman10_Character_219,TimesRoman10_Character_220,TimesRoman10_Character_221,TimesRoman10_Character_222,TimesRoman10_Character_223,\r
+                                                      TimesRoman10_Character_224,TimesRoman10_Character_225,TimesRoman10_Character_226,TimesRoman10_Character_227,TimesRoman10_Character_228,TimesRoman10_Character_229,TimesRoman10_Character_230,TimesRoman10_Character_231,TimesRoman10_Character_232,TimesRoman10_Character_233,TimesRoman10_Character_234,TimesRoman10_Character_235,TimesRoman10_Character_236,TimesRoman10_Character_237,TimesRoman10_Character_238,TimesRoman10_Character_239,\r
+                                                      TimesRoman10_Character_240,TimesRoman10_Character_241,TimesRoman10_Character_242,TimesRoman10_Character_243,TimesRoman10_Character_244,TimesRoman10_Character_245,TimesRoman10_Character_246,TimesRoman10_Character_247,TimesRoman10_Character_248,TimesRoman10_Character_249,TimesRoman10_Character_250,TimesRoman10_Character_251,TimesRoman10_Character_252,TimesRoman10_Character_253,TimesRoman10_Character_254,TimesRoman10_Character_255,NULL};\r
+\r
+/* The font structure: */\r
+const SFG_Font fgFontTimesRoman10 = { "-adobe-times-medium-r-normal--10-100-75-75-p-54-iso8859-1", 256, 14, TimesRoman10_Character_Map, 0, 4 };\r
+\r
+static const GLubyte TimesRoman24_Character_000[] = { 19,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0, 64,  0, 64,  0,  0,  0, 64,  0, 64,  0,  0,  0, 64,  0, 64,  0,  0,  0, 64,  0, 64,  0,  0,  0, 64,  0, 64,  0,  0,  0, 64,  0, 64,  0,  0,  0, 64,  0, 64,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_001[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_002[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_003[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_004[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_005[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_006[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_007[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_008[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_009[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_010[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_011[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_012[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_013[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_014[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_015[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_016[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_017[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_018[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_019[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_020[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_021[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_022[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_023[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_024[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_025[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_026[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_027[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_028[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_029[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_030[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_031[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_032[] = {  6,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_033[] = {  8,  0,  0,  0,  0,  0,  0,  0, 24, 24,  0,  0,  0, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_034[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68,  0,102,  0,102,  0,102,  0,102,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_035[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 17,  0, 17,  0, 17,  0, 17,  0, 17,  0,127,224,127,224,  8,128,  8,128,  8,128, 63,240, 63,240,  4, 64,  4, 64,  4, 64,  4, 64,  4, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_036[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  4,  0, 63,  0,229,192,196,192,132, 96,132, 96,  4, 96,  4,224,  7,192,  7,128, 30,  0, 60,  0,116,  0,100,  0,100, 32,100, 96, 52,224, 31,128,  4,  0,  4,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_037[] = { 19,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 24, 30,  0, 12, 57,  0,  6, 48,128,  2, 48, 64,  3, 48, 64,  1,152, 64,  0,140,192,  0,199,128, 60, 96,  0,114, 32,  0, 97, 48,  0, 96,152,  0, 96,136,  0, 48,140,  0, 25,254,  0, 15,  6,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_038[] = { 18,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 30, 30,  0, 63,191,  0,112,240,128, 96, 96,  0, 96,224,  0, 96,208,  0, 49,144,  0, 27,136,  0, 15, 12,  0,  7, 31,  0,  7,128,  0, 14,192,  0, 12, 96,  0, 12, 32,  0, 12, 32,  0,  6, 96,  0,  3,192,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_039[] = {  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 24, 12,  4, 28, 24,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_040[] = {  8,  0,  0,  2,  4,  8, 24, 16, 48, 48, 96, 96, 96, 96, 96, 96, 96, 96, 48, 48, 16, 24,  8,  4,  2,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_041[] = {  8,  0,  0, 64, 32, 16, 24,  8, 12, 12,  6,  6,  6,  6,  6,  6,  6,  6, 12, 12,  8, 24, 16, 32, 64,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_042[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  7,  0, 50, 96, 58,224,  7,  0, 58,224, 50, 96,  7,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_043[] = { 14,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,  0,  3,  0,  3,  0,  3,  0,  3,  0,127,248,127,248,  3,  0,  3,  0,  3,  0,  3,  0,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_044[] = {  7,  0,  0,  0,  0, 48, 24,  8, 56, 48,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_045[] = { 14,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,248,127,248,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_046[] = {  6,  0,  0,  0,  0,  0,  0,  0, 48, 48,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_047[] = {  7,  0,  0,  0,  0,192,192,192, 64, 96, 96, 32, 48, 48, 16, 24, 24,  8, 12, 12,  4,  6,  6,  6,  6,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_048[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15,  0, 25,128, 48,192, 48,192,112,224, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 48,192, 48,192, 25,128, 15,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_049[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 63,192,  6,  0,  6,  0,  6,  0,  6,  0,  6,  0,  6,  0,  6,  0,  6,  0,  6,  0,  6,  0,  6,  0,  6,  0,  6,  0, 30,  0,  6,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_050[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,192,127,224, 48, 32, 24,  0, 12,  0,  6,  0,  2,  0,  3,  0,  1,128,  1,128,  0,192,  0,192, 64,192, 64,192, 33,192, 63,128, 14,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_051[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,  0,115,  0, 97,128,  0,128,  0,192,  0,192,  0,192,  1,192,  3,128, 15,  0,  6,  0,  3,  0, 65,128, 65,128, 35,128, 63,  0, 14,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_052[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,128,  1,128,  1,128,  1,128,127,224,127,224, 97,128, 33,128, 49,128, 17,128, 25,128,  9,128, 13,128,  5,128,  3,128,  3,128,  1,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_053[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 63,  0,113,192, 96,192,  0, 96,  0, 96,  0, 96,  0, 96,  0,224,  1,192,  7,192, 63,  0, 60,  0, 48,  0, 16,  0, 16,  0, 15,192, 15,224,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_054[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15,  0, 61,192, 48,192,112, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,192,121,192,119,  0, 48,  0, 56,  0, 24,  0, 12,  0,  7,  0,  1,224,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_055[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 12,  0, 12,  0,  6,  0,  6,  0,  6,  0,  2,  0,  3,  0,  3,  0,  1,  0,  1,128,  1,128,  0,128,  0,192, 64,192, 96, 96,127,224, 63,224,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_056[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15,  0, 57,192,112,192, 96, 96, 96, 96, 96, 96, 32,224, 48,192, 27,128, 15,  0, 15,  0, 25,128, 48,192, 48,192, 48,192, 25,128, 15,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_057[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,120,  0, 14,  0,  3,  0,  1,128,  1,192,  0,192, 14,192, 57,224, 48,224, 96, 96, 96, 96, 96, 96, 96, 96, 96,224, 48,192, 59,192, 15,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_058[] = {  6,  0,  0,  0,  0,  0,  0,  0, 48, 48,  0,  0,  0,  0,  0,  0,  0, 48, 48,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_059[] = {  7,  0,  0,  0,  0, 48, 24,  8, 56, 48,  0,  0,  0,  0,  0,  0,  0, 48, 48,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_060[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 48,  0,224,  3,128, 14,  0, 56,  0, 96,  0, 56,  0, 14,  0,  3,128,  0,224,  0, 48,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_061[] = { 14,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,248,127,248,  0,  0,  0,  0,127,248,127,248,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_062[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 96,  0, 56,  0, 14,  0,  3,128,  0,224,  0, 48,  0,224,  3,128, 14,  0, 56,  0, 96,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_063[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 12,  0, 12,  0,  0,  0,  0,  0,  4,  0,  4,  0,  4,  0,  6,  0,  6,  0,  3,  0,  3,128,  1,192, 48,192, 48,192, 32,192, 49,128, 31,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_064[] = { 22,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,252,  0,  3,131,  0,  6,  0,  0, 12,  0,  0, 24,119,128, 24,222,192, 49,142, 96, 49,134, 32, 49,134, 48, 49,134, 16, 49,131, 16, 48,195, 16, 48,227, 16, 56,127, 16, 24, 59, 48, 28,  0, 32, 14,  0, 96,  7,  0,192,  3,195,128,  0,254,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_065[] = { 17,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,252, 31,128, 48,  6,  0, 16,  6,  0, 16, 12,  0, 24, 12,  0,  8, 12,  0, 15,248,  0, 12, 24,  0,  4, 24,  0,  4, 48,  0,  6, 48,  0,  2, 48,  0,  2, 96,  0,  1, 96,  0,  1,192,  0,  1,192,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_066[] = { 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,240, 24, 60, 24, 12, 24,  6, 24,  6, 24,  6, 24, 12, 24, 28, 31,240, 24, 32, 24, 24, 24, 12, 24, 12, 24, 12, 24, 24, 24, 56,127,224,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_067[] = { 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,240, 15, 28, 28,  4, 48,  2, 48,  0, 96,  0, 96,  0, 96,  0, 96,  0, 96,  0, 96,  0, 96,  0, 48,  2, 48,  2, 28,  6, 14, 30,  3,242,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_068[] = { 17,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,224,  0, 24, 56,  0, 24, 28,  0, 24,  6,  0, 24,  6,  0, 24,  3,  0, 24,  3,  0, 24,  3,  0, 24,  3,  0, 24,  3,  0, 24,  3,  0, 24,  3,  0, 24,  6,  0, 24,  6,  0, 24, 28,  0, 24, 56,  0,127,224,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_069[] = { 15,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,252, 24, 12, 24,  4, 24,  4, 24,  0, 24,  0, 24, 32, 24, 32, 31,224, 24, 32, 24, 32, 24,  0, 24,  0, 24,  8, 24,  8, 24, 24,127,248,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_070[] = { 14,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,126,  0, 24,  0, 24,  0, 24,  0, 24,  0, 24,  0, 24, 16, 24, 16, 31,240, 24, 16, 24, 16, 24,  0, 24,  0, 24,  8, 24,  8, 24, 24,127,248,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_071[] = { 18,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,240,  0, 15, 28,  0, 28, 14,  0, 48,  6,  0, 48,  6,  0, 96,  6,  0, 96,  6,  0, 96, 31,128, 96,  0,  0, 96,  0,  0, 96,  0,  0, 96,  0,  0, 48,  2,  0, 48,  2,  0, 28,  6,  0, 14, 30,  0,  3,242,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_072[] = { 19,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,126, 15,192, 24,  3,  0, 24,  3,  0, 24,  3,  0, 24,  3,  0, 24,  3,  0, 24,  3,  0, 24,  3,  0, 31,255,  0, 24,  3,  0, 24,  3,  0, 24,  3,  0, 24,  3,  0, 24,  3,  0, 24,  3,  0, 24,  3,  0,126, 15,192,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_073[] = {  8,  0,  0,  0,  0,  0,  0,  0,126, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,126,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_074[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,  0,102,  0, 99,  0,  3,  0,  3,  0,  3,  0,  3,  0,  3,  0,  3,  0,  3,  0,  3,  0,  3,  0,  3,  0,  3,  0,  3,  0,  3,  0, 15,192,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_075[] = { 17,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,126, 15,128, 24,  7,  0, 24, 14,  0, 24, 28,  0, 24, 56,  0, 24,112,  0, 24,224,  0, 25,192,  0, 31,128,  0, 31,  0,  0, 25,128,  0, 24,192,  0, 24, 96,  0, 24, 48,  0, 24, 24,  0, 24, 12,  0,126, 63,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_076[] = { 14,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,252, 24, 12, 24,  4, 24,  4, 24,  0, 24,  0, 24,  0, 24,  0, 24,  0, 24,  0, 24,  0, 24,  0, 24,  0, 24,  0, 24,  0, 24,  0,126,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_077[] = { 22,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,124, 16,252, 16, 48, 48, 16, 48, 48, 16,104, 48, 16,104, 48, 16,196, 48, 16,196, 48, 17,132, 48, 17,130, 48, 19,  2, 48, 19,  1, 48, 22,  1, 48, 22,  1, 48, 28,  0,176, 28,  0,176, 24,  0,112,120,  0,124,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_078[] = { 18,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,124,  6,  0, 16, 14,  0, 16, 14,  0, 16, 26,  0, 16, 50,  0, 16, 50,  0, 16, 98,  0, 16,194,  0, 16,194,  0, 17,130,  0, 19,  2,  0, 19,  2,  0, 22,  2,  0, 28,  2,  0, 28,  2,  0, 24,  2,  0,120, 15,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_079[] = { 18,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,240,  0, 14, 28,  0, 28, 14,  0, 48,  3,  0, 48,  3,  0, 96,  1,128, 96,  1,128, 96,  1,128, 96,  1,128, 96,  1,128, 96,  1,128, 96,  1,128, 48,  3,  0, 48,  3,  0, 28, 14,  0, 14, 28,  0,  3,240,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_080[] = { 15,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,126,  0, 24,  0, 24,  0, 24,  0, 24,  0, 24,  0, 24,  0, 24,  0, 31,224, 24, 56, 24, 24, 24, 12, 24, 12, 24, 12, 24, 24, 24, 56,127,224,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_081[] = { 18,  0,  0,  0,  0,  0,  0,  0,  7,128,  0, 28,  0,  0, 56,  0,  0,112,  0,  0,224,  0,  3,240,  0, 14, 28,  0, 28, 14,  0, 48,  3,  0, 48,  3,  0, 96,  1,128, 96,  1,128, 96,  1,128, 96,  1,128, 96,  1,128, 96,  1,128, 96,  1,128, 48,  3,  0, 48,  3,  0, 28, 14,  0, 14, 28,  0,  3,240,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_082[] = { 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,126, 15, 24, 14, 24, 28, 24, 56, 24, 48, 24, 96, 24,224, 25,192, 31,224, 24, 56, 24, 24, 24, 28, 24, 12, 24, 28, 24, 24, 24, 56,127,224,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_083[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 79,  0,120,192, 96, 96, 64, 48, 64, 48,  0, 48,  0,112,  1,224,  7,192, 15,  0, 60,  0,112,  0, 96, 32, 96, 32, 96, 96, 49,224, 15, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_084[] = { 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  7,224,  1,128,  1,128,  1,128,  1,128,  1,128,  1,128,  1,128,  1,128,  1,128,  1,128,  1,128,  1,128, 65,130, 65,130, 97,134,127,254,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_085[] = { 18,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,240,  0, 14, 24,  0, 12,  4,  0, 24,  4,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0,126, 15,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_086[] = { 17,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,128,  0,  1,128,  0,  1,128,  0,  3,192,  0,  3, 64,  0,  3, 96,  0,  6, 32,  0,  6, 32,  0,  6, 48,  0, 12, 16,  0, 12, 24,  0, 24,  8,  0, 24,  8,  0, 24, 12,  0, 48,  4,  0, 48,  6,  0,252, 31,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_087[] = { 23,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,131,  0,  1,131,  0,  1,131,128,  3,135,128,  3, 70,128,  3, 70,192,  6, 70, 64,  6, 76, 64,  6, 76, 96, 12, 44, 96, 12, 44, 32, 24, 44, 32, 24, 24, 48, 24, 24, 16, 48, 24, 16, 48, 24, 24,252,126,126,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_088[] = { 18,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,252, 15,192, 48,  3,128, 24,  7,  0,  8, 14,  0,  4, 12,  0,  6, 24,  0,  2, 56,  0,  1,112,  0,  0,224,  0,  0,192,  0,  1,192,  0,  3,160,  0,  3, 16,  0,  6,  8,  0, 14, 12,  0, 28,  6,  0,126, 15,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_089[] = { 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  7,224,  1,128,  1,128,  1,128,  1,128,  1,128,  1,128,  3,192,  3, 64,  6, 96,  6, 32, 12, 48, 28, 16, 24, 24, 56,  8, 48, 12,252, 63,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_090[] = { 15,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,252,112, 12, 56,  4, 24,  4, 28,  0, 12,  0, 14,  0,  7,  0,  3,  0,  3,128,  1,128,  1,192,  0,224, 64, 96, 64,112, 96, 56,127,248,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_091[] = {  8,  0,  0,  0, 62, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 62,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_092[] = {  7,  0,  0,  0,  0,  0,  0,  0,  6,  6,  4, 12, 12,  8, 24, 24, 16, 48, 48, 32, 96, 96, 64,192,192,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_093[] = {  8,  0,  0,  0,124, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,124,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_094[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64, 64, 96,192, 32,128, 49,128, 17,  0, 27,  0, 10,  0, 14,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_095[] = { 13,  0,  0,  0,  0,255,248,255,248,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_096[] = {  7,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 48,112, 64, 96, 48,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_097[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 56,192,125,128, 99,128, 97,128, 97,128, 49,128, 29,128,  7,128,  1,128, 49,128, 51,128, 31,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_098[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 47,  0, 57,192, 48,192, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48,192, 57,192, 55,  0, 48,  0, 48,  0, 48,  0, 48,  0,112,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_099[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15,  0, 63,128, 56, 64,112,  0, 96,  0, 96,  0, 96,  0, 96,  0, 96,  0, 32,192, 49,192, 15,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_100[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15, 96, 57,192, 48,192, 96,192, 96,192, 96,192, 96,192, 96,192, 96,192, 48,192, 57,192, 14,192,  0,192,  0,192,  0,192,  0,192,  1,192,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_101[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15,  0, 63,128, 56, 64,112,  0, 96,  0, 96,  0, 96,  0,127,192, 96,192, 32,192, 49,128, 15,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_102[] = {  7,  0,  0,  0,  0,  0,  0,  0,120, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,254, 48, 48, 48, 22, 14,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_103[] = { 12,  0,  0,  0,  0, 31,128,120,224, 96, 48, 96, 16, 48, 48, 31,224, 63,128, 48,  0, 24,  0, 31,  0, 25,128, 48,192, 48,192, 48,192, 48,192, 25,128, 15,224,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_104[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,120,240, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 56,224, 55,192, 51,128, 48,  0, 48,  0, 48,  0, 48,  0,112,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_105[] = {  6,  0,  0,  0,  0,  0,  0,  0,120, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,112,  0,  0,  0, 48, 48,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_106[] = {  6,  0,  0,192,224, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,112,  0,  0,  0, 48, 48,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_107[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,121,240, 48,224, 49,192, 51,128, 55,  0, 54,  0, 60,  0, 52,  0, 50,  0, 51,  0, 49,128, 51,224, 48,  0, 48,  0, 48,  0, 48,  0,112,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_108[] = {  6,  0,  0,  0,  0,  0,  0,  0,120, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,112,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_109[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,120,241,224, 48, 96,192, 48, 96,192, 48, 96,192, 48, 96,192, 48, 96,192, 48, 96,192, 48, 96,192, 48, 96,192, 56,241,192, 55,207,128,115,135,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_110[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,120,240, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 56,224, 55,192,115,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_111[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15,  0, 57,192, 48,192, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 48,192, 57,192, 15,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_112[] = { 12,  0,  0,  0,  0,120,  0, 48,  0, 48,  0, 48,  0, 48,  0, 55,  0, 57,192, 48,192, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48,192, 57,192,119,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_113[] = { 12,  0,  0,  0,  0,  1,224,  0,192,  0,192,  0,192,  0,192, 14,192, 57,192, 48,192, 96,192, 96,192, 96,192, 96,192, 96,192, 96,192, 48,192, 57,192, 14,192,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_114[] = {  8,  0,  0,  0,  0,  0,  0,  0,120, 48, 48, 48, 48, 48, 48, 48, 48, 59, 55,115,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_115[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,124,  0, 99,  0, 65,128,  1,128,  3,128, 15,  0, 62,  0, 56,  0,112,  0, 97,  0, 51,  0, 31,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_116[] = {  7,  0,  0,  0,  0,  0,  0,  0, 28, 50, 48, 48, 48, 48, 48, 48, 48, 48, 48,254,112, 48, 16,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_117[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 14,112, 31, 96, 56,224, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96,112,224,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_118[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0, 14,  0, 14,  0, 26,  0, 25,  0, 25,  0, 49,  0, 48,128, 48,128, 96,128, 96,192,241,224,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_119[] = { 17,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4, 16,  0, 14, 56,  0, 14, 56,  0, 26, 40,  0, 26,100,  0, 25,100,  0, 49,100,  0, 48,194,  0, 48,194,  0, 96,194,  0, 96,195,  0,241,231,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_120[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,120,240, 48, 96, 16,192, 25,192, 13,128,  7,  0,  6,  0, 13,  0, 28,128, 24,192, 48, 96,120,240,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_121[] = { 11,  0,  0,  0,  0,224,  0,240,  0, 24,  0,  8,  0, 12,  0,  4,  0, 14,  0, 14,  0, 26,  0, 25,  0, 25,  0, 49,  0, 48,128, 48,128, 96,128, 96,192,241,224,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_122[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,128, 97,128, 48,128, 56,  0, 24,  0, 28,  0, 12,  0, 14,  0,  7,  0, 67,  0, 97,128,127,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_123[] = { 10,  0,  0,  0,  0,  3,128,  6,  0, 12,  0, 12,  0, 12,  0, 12,  0, 12,  0, 12,  0,  8,  0, 24,  0, 16,  0, 96,  0, 16,  0, 24,  0,  8,  0, 12,  0, 12,  0, 12,  0, 12,  0, 12,  0,  6,  0,  3,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_124[] = {  6,  0,  0,  0,  0,  0,  0,  0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_125[] = { 10,  0,  0,  0,  0,112,  0, 24,  0, 12,  0, 12,  0, 12,  0, 12,  0, 12,  0, 12,  0,  4,  0,  6,  0,  2,  0,  1,128,  2,  0,  6,  0,  4,  0, 12,  0, 12,  0, 12,  0, 12,  0, 12,  0, 24,  0,112,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_126[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 65,192, 99,224, 62, 48, 28, 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_127[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_128[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_129[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_130[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_131[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_132[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_133[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_134[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_135[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_136[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_137[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_138[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_139[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_140[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_141[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_142[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_143[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_144[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_145[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_146[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_147[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_148[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_149[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_150[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_151[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_152[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_153[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_154[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_155[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_156[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_157[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_158[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_159[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_160[] = {  6,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_161[] = {  8,  0,  0, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,  0,  0,  0, 12, 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_162[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0, 32,  0, 31,  0, 63,128, 56, 64,104,  0,100,  0,100,  0,100,  0, 98,  0, 98,  0, 33,192, 49,192, 15,128,  0,128,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_163[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,115,192, 95, 96, 60, 32, 24,  0, 24,  0, 24,  0, 24,  0, 24,  0, 24,  0,126,  0, 24,  0, 24,  0, 24,  0, 24,  0, 24,192, 12,192,  7,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_164[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 96, 48,119,112, 63,224, 24,192, 48, 96, 48, 96, 48, 96, 48, 96, 24,192, 63,224,119,112, 96, 48,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_165[] = { 14,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15,192,  3,  0,  3,  0,  3,  0,  3,  0, 31,224,  3,  0, 31,224,  3,  0,  7,128, 12,128, 12,192, 24, 64, 24, 96, 48, 32,112, 48,248,124,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_166[] = {  6,  0,  0,  0,  0,  0,  0,  0, 48, 48, 48, 48, 48, 48, 48,  0,  0,  0, 48, 48, 48, 48, 48, 48, 48,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_167[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 14,  0, 25,  0, 24,128,  1,128,  3,128,  7,  0, 14,  0, 29,  0, 56,128, 48,192, 32,192, 33,192, 19,128, 15,  0, 14,  0, 28,  0, 24,  0, 17,128,  9,128,  7,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_168[] = {  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,102,102,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_169[] = { 19,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,248,  0, 14, 14,  0, 24,  3,  0, 48,225,128, 35,184,128, 98, 12,192, 70,  0, 64, 68,  0, 64, 68,  0, 64, 68,  0, 64, 70,  0, 64, 98, 12,192, 35,152,128, 48,241,128, 24,  3,  0, 14, 14,  0,  3,248,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_170[] = {  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,126,  0,118,204,204,124, 12,204,120,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_171[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2, 32,  6, 96, 12,192, 25,128, 51,  0, 51,  0, 25,128, 12,192,  6, 96,  2, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_172[] = { 14,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 24,  0, 24,  0, 24,  0, 24,  0, 24,127,248,127,248,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_173[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,  0,127,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_174[] = { 19,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,248,  0, 14, 14,  0, 24,  3,  0, 48,  1,128, 35,140,128, 97, 24,192, 65, 16, 64, 65, 32, 64, 65,240, 64, 65, 24, 64, 65,  8, 64, 97,  8,192, 33, 24,128, 51,241,128, 24,  3,  0, 14, 14,  0,  3,248,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_175[] = {  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,126,126,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_176[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 28,  0, 34,  0, 65,  0, 65,  0, 65,  0, 34,  0, 28,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_177[] = { 14,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,248,127,248,  0,  0,  3,  0,  3,  0,  3,  0,  3,  0,  3,  0,127,248,127,248,  3,  0,  3,  0,  3,  0,  3,  0,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_178[] = {  7,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,252, 68, 32, 48, 16,  8, 12,140, 76, 56,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_179[] = {  7,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,112,136,140, 12,  8, 48,  8,140, 76, 56,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_180[] = {  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32, 24, 14,  6,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_181[] = { 13,  0,  0,  0,  0, 32,  0,112,  0, 96,  0, 32,  0, 32,  0, 46,112, 63, 96, 56,224, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96,112,224,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_182[] = { 11,  0,  0,  0,  0,  4,128,  4,128,  4,128,  4,128,  4,128,  4,128,  4,128,  4,128,  4,128,  4,128,  4,128, 12,128, 28,128, 60,128, 60,128,124,128,124,128,124,128, 60,128, 60,128, 28,128, 15,192,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_183[] = {  6,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 48, 48,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_184[] = {  8,  0, 60,102,  6, 30, 24,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_185[] = {  7,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,124, 16, 16, 16, 16, 16, 16, 80, 48, 16,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_186[] = {  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,126,  0, 60,102,102,102,102,102, 60,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_187[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 34,  0, 51,  0, 25,128, 12,192,  6, 96,  6, 96, 12,192, 25,128, 51,  0, 34,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_188[] = { 18,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 24,  2,  0,  8,  2,  0, 12,127,128,  4, 34,  0,  6, 50,  0,  3, 18,  0,  1, 10,  0,125,142,  0, 16,134,  0, 16,194,  0, 16, 96,  0, 16, 32,  0, 16, 48,  0, 16, 16,  0, 80, 24,  0, 48, 12,  0, 16,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_189[] = { 18,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 24, 63,  0,  8, 17,  0, 12,  8,  0,  4, 12,  0,  6,  4,  0,  3,  2,  0,  1,  3,  0,125,163,  0, 16,147,  0, 16,206,  0, 16, 96,  0, 16, 32,  0, 16, 48,  0, 16, 16,  0, 80, 24,  0, 48, 12,  0, 16,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_190[] = { 18,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 24,  2,  0,  8,  2,  0, 12,127,128,  4, 34,  0,  6, 50,  0,  3, 18,  0,  1, 10,  0,113,142,  0,136,134,  0,140,194,  0, 12, 96,  0,  8, 32,  0, 48, 48,  0,  8, 16,  0,140, 24,  0, 76, 12,  0, 56,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_191[] = { 11,  0,  0,  0,  0, 31,  0, 49,128, 96,128, 97,128, 97,128,112,  0, 56,  0, 24,  0, 28,  0, 12,  0, 12,  0,  4,  0,  4,  0,  0,  0,  0,  0,  6,  0,  6,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_192[] = { 17,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,252, 31,128, 48,  6,  0, 16,  6,  0, 16, 12,  0, 24, 12,  0,  8, 12,  0, 15,248,  0, 12, 24,  0,  4, 24,  0,  4, 48,  0,  6, 48,  0,  2, 48,  0,  2, 96,  0,  1, 96,  0,  1,192,  0,  1,192,  0,  0,128,  0,  0,  0,  0,  0, 32,  0,  0,192,  0,  3,128,  0,  3,  0,  0};\r
+static const GLubyte TimesRoman24_Character_193[] = { 17,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,252, 31,128, 48,  6,  0, 16,  6,  0, 16, 12,  0, 24, 12,  0,  8, 12,  0, 15,248,  0, 12, 24,  0,  4, 24,  0,  4, 48,  0,  6, 48,  0,  2, 48,  0,  2, 96,  0,  1, 96,  0,  1,192,  0,  1,192,  0,  0,128,  0,  0,  0,  0,  1,  0,  0,  0,192,  0,  0,112,  0,  0, 48,  0};\r
+static const GLubyte TimesRoman24_Character_194[] = { 17,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,252, 31,128, 48,  6,  0, 16,  6,  0, 16, 12,  0, 24, 12,  0,  8, 12,  0, 15,248,  0, 12, 24,  0,  4, 24,  0,  4, 48,  0,  6, 48,  0,  2, 48,  0,  2, 96,  0,  1, 96,  0,  1,192,  0,  1,192,  0,  0,128,  0,  0,  0,  0,  8, 16,  0,  6, 96,  0,  3,192,  0,  1,128,  0};\r
+static const GLubyte TimesRoman24_Character_195[] = { 17,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,252, 31,128, 48,  7,  0, 16,  6,  0, 16, 12,  0, 24, 12,  0,  8, 12,  0, 15,248,  0, 12, 24,  0,  4, 24,  0,  4, 48,  0,  6, 48,  0,  2, 48,  0,  2, 96,  0,  1, 96,  0,  1,192,  0,  1,192,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  4,224,  0,  3,144,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_196[] = { 17,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,252, 31,128, 48,  6,  0, 16,  6,  0, 16, 12,  0, 24, 12,  0,  8, 12,  0, 15,248,  0, 12, 24,  0,  4, 24,  0,  4, 48,  0,  6, 48,  0,  2, 48,  0,  2, 96,  0,  1, 96,  0,  1,192,  0,  1,192,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  6, 48,  0,  6, 48,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_197[] = { 17,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,252, 31,128, 48,  6,  0, 16,  6,  0, 16, 12,  0, 24, 12,  0,  8, 12,  0, 15,248,  0, 12, 24,  0,  4, 24,  0,  4, 48,  0,  6, 48,  0,  2, 48,  0,  2, 96,  0,  1, 96,  0,  1,192,  0,  1,192,  0,  0,128,  0,  1,192,  0,  2, 32,  0,  2, 32,  0,  1,192,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_198[] = { 21,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,249,255,240, 48, 96, 48, 16, 96, 16, 16, 96, 16, 24, 96,  0,  8, 96,  0, 15,224,128, 12, 96,128,  4,127,128,  4, 96,128,  6, 96,128,  2, 96,  0,  2, 96,  0,  1, 96, 32,  1, 96, 32,  1,224, 96,  3,255,224,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_199[] = { 16,  0,  0,  3,192,  6, 96,  0, 96,  1,224,  1,128,  0,128,  3,240, 15, 28, 28,  4, 48,  2, 48,  0, 96,  0, 96,  0, 96,  0, 96,  0, 96,  0, 96,  0, 96,  0, 48,  2, 48,  2, 28,  6, 14, 30,  3,242,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_200[] = { 15,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,252, 24, 12, 24,  4, 24,  4, 24,  0, 24,  0, 24, 32, 24, 32, 31,224, 24, 32, 24, 32, 24,  0, 24,  0, 24,  8, 24,  8, 24, 24,127,248,  0,  0,  0,128,  3,  0, 14,  0, 12,  0};\r
+static const GLubyte TimesRoman24_Character_201[] = { 15,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,252, 24, 12, 24,  4, 24,  4, 24,  0, 24,  0, 24, 32, 24, 32, 31,224, 24, 32, 24, 32, 24,  0, 24,  0, 24,  8, 24,  8, 24, 24,127,248,  0,  0,  2,  0,  1,128,  0,224,  0, 96};\r
+static const GLubyte TimesRoman24_Character_202[] = { 15,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,252, 24, 12, 24,  4, 24,  4, 24,  0, 24,  0, 24, 32, 24, 32, 31,224, 24, 32, 24, 32, 24,  0, 24,  0, 24,  8, 24,  8, 24, 24,127,248,  0,  0,  8, 16,  6, 96,  3,192,  1,128};\r
+static const GLubyte TimesRoman24_Character_203[] = { 15,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,252, 24, 12, 24,  4, 24,  4, 24,  0, 24,  0, 24, 32, 24, 32, 31,224, 24, 32, 24, 32, 24,  0, 24,  0, 24,  8, 24,  8, 24, 24,127,248,  0,  0,  0,  0, 12,192, 12,192,  0,  0};\r
+static const GLubyte TimesRoman24_Character_204[] = {  8,  0,  0,  0,  0,  0,  0,  0,126, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,126,  0,  4, 24,112, 96};\r
+static const GLubyte TimesRoman24_Character_205[] = {  8,  0,  0,  0,  0,  0,  0,  0,126, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,126,  0, 32, 24, 14,  6};\r
+static const GLubyte TimesRoman24_Character_206[] = {  8,  0,  0,  0,  0,  0,  0,  0, 63, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 63,  0, 64, 51, 30, 12};\r
+static const GLubyte TimesRoman24_Character_207[] = {  8,  0,  0,  0,  0,  0,  0,  0,126, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,126,  0,  0,102,102,  0};\r
+static const GLubyte TimesRoman24_Character_208[] = { 17,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,224,  0, 24, 56,  0, 24, 28,  0, 24,  6,  0, 24,  6,  0, 24,  3,  0, 24,  3,  0, 24,  3,  0,255,  3,  0, 24,  3,  0, 24,  3,  0, 24,  3,  0, 24,  6,  0, 24,  6,  0, 24, 28,  0, 24, 56,  0,127,224,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_209[] = { 18,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,124,  6,  0, 16, 14,  0, 16, 14,  0, 16, 26,  0, 16, 50,  0, 16, 50,  0, 16, 98,  0, 16,194,  0, 16,194,  0, 17,130,  0, 19,  2,  0, 19,  2,  0, 22,  2,  0, 28,  2,  0, 28,  2,  0, 24,  2,  0,120, 15,128,  0,  0,  0,  0,  0,  0,  2,112,  0,  1,200,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_210[] = { 18,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,240,  0, 14, 28,  0, 28, 14,  0, 48,  3,  0, 48,  3,  0, 96,  1,128, 96,  1,128, 96,  1,128, 96,  1,128, 96,  1,128, 96,  1,128, 96,  1,128, 48,  3,  0, 48,  3,  0, 28, 14,  0, 14, 28,  0,  3,240,  0,  0,  0,  0,  0, 32,  0,  0,192,  0,  3,128,  0,  3,  0,  0};\r
+static const GLubyte TimesRoman24_Character_211[] = { 18,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,240,  0, 14, 28,  0, 28, 14,  0, 48,  3,  0, 48,  3,  0, 96,  1,128, 96,  1,128, 96,  1,128, 96,  1,128, 96,  1,128, 96,  1,128, 96,  1,128, 48,  3,  0, 48,  3,  0, 28, 14,  0, 14, 28,  0,  3,240,  0,  0,  0,  0,  0,128,  0,  0, 96,  0,  0, 56,  0,  0, 24,  0};\r
+static const GLubyte TimesRoman24_Character_212[] = { 18,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,240,  0, 14, 28,  0, 28, 14,  0, 48,  3,  0, 48,  3,  0, 96,  1,128, 96,  1,128, 96,  1,128, 96,  1,128, 96,  1,128, 96,  1,128, 96,  1,128, 48,  3,  0, 48,  3,  0, 28, 14,  0, 14, 28,  0,  3,240,  0,  0,  0,  0,  4,  8,  0,  3, 48,  0,  1,224,  0,  0,192,  0};\r
+static const GLubyte TimesRoman24_Character_213[] = { 18,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,240,  0, 14, 28,  0, 28, 14,  0, 48,  3,  0, 48,  3,  0, 96,  1,128, 96,  1,128, 96,  1,128, 96,  1,128, 96,  1,128, 96,  1,128, 96,  1,128, 48,  3,  0, 48,  3,  0, 28, 14,  0, 14, 28,  0,  3,240,  0,  0,  0,  0,  0,  0,  0,  2,112,  0,  1,200,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_214[] = { 18,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,240,  0, 14, 28,  0, 28, 14,  0, 48,  3,  0, 48,  3,  0, 96,  1,128, 96,  1,128, 96,  1,128, 96,  1,128, 96,  1,128, 96,  1,128, 96,  1,128, 48,  3,  0, 48,  3,  0, 28, 14,  0, 14, 28,  0,  3,240,  0,  0,  0,  0,  0,  0,  0,  3, 48,  0,  3, 48,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_215[] = { 14,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32, 16, 48, 48, 24, 96, 12,192,  7,128,  3,  0,  7,128, 12,192, 24, 96, 48, 48, 32, 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_216[] = { 18,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0, 19,240,  0, 14, 28,  0, 28, 14,  0, 52,  3,  0, 50,  3,  0, 97,  1,128, 97,  1,128, 96,129,128, 96,129,128, 96, 65,128, 96, 65,128, 96, 33,128, 48, 35,  0, 48, 19,  0, 28, 14,  0, 14, 28,  0,  3,242,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_217[] = { 18,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,240,  0, 14, 24,  0, 12,  4,  0, 24,  4,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0,126, 15,128,  0,  0,  0,  0, 32,  0,  0,192,  0,  3,128,  0,  3,  0,  0};\r
+static const GLubyte TimesRoman24_Character_218[] = { 18,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,240,  0, 14, 24,  0, 12,  4,  0, 24,  4,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0,126, 15,128,  0,  0,  0,  0,128,  0,  0, 96,  0,  0, 56,  0,  0, 24,  0};\r
+static const GLubyte TimesRoman24_Character_219[] = { 18,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,240,  0, 14, 24,  0, 12,  4,  0, 24,  4,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0,126, 15,128,  0,  0,  0,  4,  8,  0,  3, 48,  0,  1,224,  0,  0,192,  0};\r
+static const GLubyte TimesRoman24_Character_220[] = { 18,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,240,  0, 14, 24,  0, 12,  4,  0, 24,  4,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0,126, 15,128,  0,  0,  0,  0,  0,  0,  3, 24,  0,  3, 24,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_221[] = { 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  7,224,  1,128,  1,128,  1,128,  1,128,  1,128,  1,128,  3,192,  3, 64,  6, 96,  6, 32, 12, 48, 28, 16, 24, 24, 56,  8, 48, 12,252, 63,  0,  0,  1,  0,  0,192,  0,112,  0, 48};\r
+static const GLubyte TimesRoman24_Character_222[] = { 15,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,126,  0, 24,  0, 24,  0, 24,  0, 31,224, 24, 56, 24, 24, 24, 12, 24, 12, 24, 12, 24, 24, 24, 56, 31,224, 24,  0, 24,  0, 24,  0,126,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_223[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,115,128, 54, 64, 54, 96, 48, 96, 48, 96, 48,224, 48,192, 49,192, 51,128, 54,  0, 49,128, 48,192, 48,192, 48,192, 48,192, 25,128, 15,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_224[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 56,192,125,128, 99,128, 97,128, 97,128, 49,128, 29,128,  7,128,  1,128, 49,128, 51,128, 31,  0,  0,  0,  2,  0, 12,  0, 56,  0, 48,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_225[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 56,192,125,128, 99,128, 97,128, 97,128, 49,128, 29,128,  7,128,  1,128, 49,128, 51,128, 31,  0,  0,  0,  8,  0,  6,  0,  3,128,  1,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_226[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 56,192,125,128, 99,128, 97,128, 97,128, 49,128, 29,128,  7,128,  1,128, 49,128, 51,128, 31,  0,  0,  0, 33,  0, 18,  0, 30,  0, 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_227[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 56,192,125,128, 99,128, 97,128, 97,128, 49,128, 29,128,  7,128,  1,128, 49,128, 51,128, 31,  0,  0,  0,  0,  0, 46,  0, 29,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_228[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 56,192,125,128, 99,128, 97,128, 97,128, 49,128, 29,128,  7,128,  1,128, 49,128, 51,128, 31,  0,  0,  0,  0,  0, 51,  0, 51,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_229[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 56,192,125,128, 99,128, 97,128, 97,128, 49,128, 29,128,  7,128,  1,128, 49,128, 51,128, 31,  0,  0,  0, 14,  0, 17,  0, 17,  0, 14,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_230[] = { 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 56,120,125,252, 99,194, 97,128, 97,128, 49,128, 29,128,  7,254,  1,134, 49,134, 51,204, 30,120,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_231[] = { 11,  0,  0, 30,  0, 51,  0,  3,  0, 15,  0, 12,  0,  4,  0, 15,  0, 63,128, 56, 64,112,  0, 96,  0, 96,  0, 96,  0, 96,  0, 96,  0, 32,192, 49,192, 15,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_232[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15,  0, 63,128, 56, 64,112,  0, 96,  0, 96,  0, 96,  0,127,192, 96,192, 32,192, 49,128, 15,  0,  0,  0,  2,  0, 12,  0, 56,  0, 48,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_233[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15,  0, 63,128, 56, 64,112,  0, 96,  0, 96,  0, 96,  0,127,192, 96,192, 32,192, 49,128, 15,  0,  0,  0,  8,  0,  6,  0,  3,128,  1,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_234[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15,  0, 63,128, 56, 64,112,  0, 96,  0, 96,  0, 96,  0,127,192, 96,192, 32,192, 49,128, 15,  0,  0,  0, 16,128,  9,  0, 15,  0,  6,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_235[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15,  0, 63,128, 56, 64,112,  0, 96,  0, 96,  0, 96,  0,127,192, 96,192, 32,192, 49,128, 15,  0,  0,  0,  0,  0, 25,128, 25,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_236[] = {  6,  0,  0,  0,  0,  0,  0,  0,120, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,112,  0,  8, 48,224,192,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_237[] = {  6,  0,  0,  0,  0,  0,  0,  0,120, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,112,  0, 64, 48, 28, 12,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_238[] = {  6,  0,  0,  0,  0,  0,  0,  0,120, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,112,  0,132, 72,120, 48,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_239[] = {  6,  0,  0,  0,  0,  0,  0,  0,120, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,112,  0,  0,204,204,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_240[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15,  0, 57,192, 48,192, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 48,192, 57,192, 15,128, 99,  0, 30,  0, 15,  0, 56,192, 96,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_241[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,120,240, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 56,224, 55,192,115,128,  0,  0,  0,  0, 19,128, 14, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_242[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15,  0, 57,192, 48,192, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 48,192, 57,192, 15,  0,  0,  0,  1,  0,  6,  0, 28,  0, 24,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_243[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15,  0, 57,192, 48,192, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 48,192, 57,192, 15,  0,  0,  0,  4,  0,  3,  0,  1,192,  0,192,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_244[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15,  0, 57,192, 48,192, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 48,192, 57,192, 15,  0,  0,  0, 16,128,  9,  0, 15,  0,  6,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_245[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15,  0, 57,192, 48,192, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 48,192, 57,192, 15,  0,  0,  0,  0,  0, 19,128, 14, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_246[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15,  0, 57,192, 48,192, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 48,192, 57,192, 15,  0,  0,  0,  0,  0, 25,128, 25,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_247[] = { 14,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,  0,  3,  0,  0,  0,  0,  0,127,248,127,248,  0,  0,  0,  0,  3,  0,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_248[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 96,  0,111,  0, 57,192, 56,192,104, 96,108, 96,100, 96,102, 96, 98, 96, 99, 96, 49,192, 57,192, 15, 96,  0, 96,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_249[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 14,112, 31, 96, 56,224, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96,112,224,  0,  0,  1,  0,  6,  0, 28,  0, 24,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_250[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 14,112, 31, 96, 56,224, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96,112,224,  0,  0,  4,  0,  3,  0,  1,192,  0,192,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_251[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 14,112, 31, 96, 56,224, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96,112,224,  0,  0, 16,128,  9,  0, 15,  0,  6,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_252[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 14,112, 31, 96, 56,224, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96,112,224,  0,  0,  0,  0, 25,128, 25,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_253[] = { 11,  0,  0,  0,  0,224,  0,240,  0, 24,  0,  8,  0, 12,  0,  4,  0, 14,  0, 14,  0, 26,  0, 25,  0, 25,  0, 49,  0, 48,128, 48,128, 96,128, 96,192,241,224,  0,  0,  8,  0,  6,  0,  3,128,  1,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_254[] = { 12,  0,  0,  0,  0,120,  0, 48,  0, 48,  0, 48,  0, 48,  0, 55,  0, 57,192, 48,192, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48,192, 57,192, 55,  0, 48,  0, 48,  0, 48,  0, 48,  0,112,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+static const GLubyte TimesRoman24_Character_255[] = { 11,  0,  0,  0,  0,224,  0,240,  0, 24,  0,  8,  0, 12,  0,  4,  0, 14,  0, 14,  0, 26,  0, 25,  0, 25,  0, 49,  0, 48,128, 48,128, 96,128, 96,192,241,224,  0,  0,  0,  0, 51,  0, 51,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};\r
+\r
+/* The font characters mapping: */\r
+static const GLubyte* TimesRoman24_Character_Map[] = {TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,\r
+                                                      TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,\r
+                                                      TimesRoman24_Character_032,TimesRoman24_Character_033,TimesRoman24_Character_034,TimesRoman24_Character_035,TimesRoman24_Character_036,TimesRoman24_Character_037,TimesRoman24_Character_038,TimesRoman24_Character_039,TimesRoman24_Character_040,TimesRoman24_Character_041,TimesRoman24_Character_042,TimesRoman24_Character_043,TimesRoman24_Character_044,TimesRoman24_Character_045,TimesRoman24_Character_046,TimesRoman24_Character_047,\r
+                                                      TimesRoman24_Character_048,TimesRoman24_Character_049,TimesRoman24_Character_050,TimesRoman24_Character_051,TimesRoman24_Character_052,TimesRoman24_Character_053,TimesRoman24_Character_054,TimesRoman24_Character_055,TimesRoman24_Character_056,TimesRoman24_Character_057,TimesRoman24_Character_058,TimesRoman24_Character_059,TimesRoman24_Character_060,TimesRoman24_Character_061,TimesRoman24_Character_062,TimesRoman24_Character_063,\r
+                                                      TimesRoman24_Character_064,TimesRoman24_Character_065,TimesRoman24_Character_066,TimesRoman24_Character_067,TimesRoman24_Character_068,TimesRoman24_Character_069,TimesRoman24_Character_070,TimesRoman24_Character_071,TimesRoman24_Character_072,TimesRoman24_Character_073,TimesRoman24_Character_074,TimesRoman24_Character_075,TimesRoman24_Character_076,TimesRoman24_Character_077,TimesRoman24_Character_078,TimesRoman24_Character_079,\r
+                                                      TimesRoman24_Character_080,TimesRoman24_Character_081,TimesRoman24_Character_082,TimesRoman24_Character_083,TimesRoman24_Character_084,TimesRoman24_Character_085,TimesRoman24_Character_086,TimesRoman24_Character_087,TimesRoman24_Character_088,TimesRoman24_Character_089,TimesRoman24_Character_090,TimesRoman24_Character_091,TimesRoman24_Character_092,TimesRoman24_Character_093,TimesRoman24_Character_094,TimesRoman24_Character_095,\r
+                                                      TimesRoman24_Character_096,TimesRoman24_Character_097,TimesRoman24_Character_098,TimesRoman24_Character_099,TimesRoman24_Character_100,TimesRoman24_Character_101,TimesRoman24_Character_102,TimesRoman24_Character_103,TimesRoman24_Character_104,TimesRoman24_Character_105,TimesRoman24_Character_106,TimesRoman24_Character_107,TimesRoman24_Character_108,TimesRoman24_Character_109,TimesRoman24_Character_110,TimesRoman24_Character_111,\r
+                                                      TimesRoman24_Character_112,TimesRoman24_Character_113,TimesRoman24_Character_114,TimesRoman24_Character_115,TimesRoman24_Character_116,TimesRoman24_Character_117,TimesRoman24_Character_118,TimesRoman24_Character_119,TimesRoman24_Character_120,TimesRoman24_Character_121,TimesRoman24_Character_122,TimesRoman24_Character_123,TimesRoman24_Character_124,TimesRoman24_Character_125,TimesRoman24_Character_126,TimesRoman24_Character_032,\r
+                                                      TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,\r
+                                                      TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,\r
+                                                      TimesRoman24_Character_160,TimesRoman24_Character_161,TimesRoman24_Character_162,TimesRoman24_Character_163,TimesRoman24_Character_164,TimesRoman24_Character_165,TimesRoman24_Character_166,TimesRoman24_Character_167,TimesRoman24_Character_168,TimesRoman24_Character_169,TimesRoman24_Character_170,TimesRoman24_Character_171,TimesRoman24_Character_172,TimesRoman24_Character_173,TimesRoman24_Character_174,TimesRoman24_Character_175,\r
+                                                      TimesRoman24_Character_176,TimesRoman24_Character_177,TimesRoman24_Character_178,TimesRoman24_Character_179,TimesRoman24_Character_180,TimesRoman24_Character_181,TimesRoman24_Character_182,TimesRoman24_Character_183,TimesRoman24_Character_184,TimesRoman24_Character_185,TimesRoman24_Character_186,TimesRoman24_Character_187,TimesRoman24_Character_188,TimesRoman24_Character_189,TimesRoman24_Character_190,TimesRoman24_Character_191,\r
+                                                      TimesRoman24_Character_192,TimesRoman24_Character_193,TimesRoman24_Character_194,TimesRoman24_Character_195,TimesRoman24_Character_196,TimesRoman24_Character_197,TimesRoman24_Character_198,TimesRoman24_Character_199,TimesRoman24_Character_200,TimesRoman24_Character_201,TimesRoman24_Character_202,TimesRoman24_Character_203,TimesRoman24_Character_204,TimesRoman24_Character_205,TimesRoman24_Character_206,TimesRoman24_Character_207,\r
+                                                      TimesRoman24_Character_208,TimesRoman24_Character_209,TimesRoman24_Character_210,TimesRoman24_Character_211,TimesRoman24_Character_212,TimesRoman24_Character_213,TimesRoman24_Character_214,TimesRoman24_Character_215,TimesRoman24_Character_216,TimesRoman24_Character_217,TimesRoman24_Character_218,TimesRoman24_Character_219,TimesRoman24_Character_220,TimesRoman24_Character_221,TimesRoman24_Character_222,TimesRoman24_Character_223,\r
+                                                      TimesRoman24_Character_224,TimesRoman24_Character_225,TimesRoman24_Character_226,TimesRoman24_Character_227,TimesRoman24_Character_228,TimesRoman24_Character_229,TimesRoman24_Character_230,TimesRoman24_Character_231,TimesRoman24_Character_232,TimesRoman24_Character_233,TimesRoman24_Character_234,TimesRoman24_Character_235,TimesRoman24_Character_236,TimesRoman24_Character_237,TimesRoman24_Character_238,TimesRoman24_Character_239,\r
+                                                      TimesRoman24_Character_240,TimesRoman24_Character_241,TimesRoman24_Character_242,TimesRoman24_Character_243,TimesRoman24_Character_244,TimesRoman24_Character_245,TimesRoman24_Character_246,TimesRoman24_Character_247,TimesRoman24_Character_248,TimesRoman24_Character_249,TimesRoman24_Character_250,TimesRoman24_Character_251,TimesRoman24_Character_252,TimesRoman24_Character_253,TimesRoman24_Character_254,TimesRoman24_Character_255,NULL};\r
+\r
+/* The font structure: */\r
+const SFG_Font fgFontTimesRoman24 = { "-adobe-times-medium-r-normal--24-240-75-75-p-124-iso8859-1", 256, 29, TimesRoman24_Character_Map, 0, 7 };\r
+\r
diff --git a/src/Common/freeglut_gamemode.c b/src/Common/freeglut_gamemode.c
new file mode 100644 (file)
index 0000000..9f805ab
--- /dev/null
@@ -0,0 +1,819 @@
+/*\r
+ * freeglut_gamemode.c\r
+ *\r
+ * The game mode handling code.\r
+ *\r
+ * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.\r
+ * Written by Pawel W. Olszta, <olszta@sourceforge.net>\r
+ * Creation date: Thu Dec 16 1999\r
+ *\r
+ * Permission is hereby granted, free of charge, to any person obtaining a\r
+ * copy of this software and associated documentation files (the "Software"),\r
+ * to deal in the Software without restriction, including without limitation\r
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
+ * and/or sell copies of the Software, and to permit persons to whom the\r
+ * Software is furnished to do so, subject to the following conditions:\r
+ *\r
+ * The above copyright notice and this permission notice shall be included\r
+ * in all copies or substantial portions of the Software.\r
+ *\r
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL\r
+ * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
+ */\r
+\r
+#include <GL/freeglut.h>\r
+#include "freeglut_internal.h"\r
+\r
+/*\r
+ * TODO BEFORE THE STABLE RELEASE:\r
+ *\r
+ *  glutGameModeString()    -- missing\r
+ *  glutEnterGameMode()     -- X11 version\r
+ *  glutLeaveGameMode()     -- is that correct?\r
+ *  glutGameModeGet()       -- is that correct?\r
+ */\r
+\r
+\r
+/* -- PRIVATE FUNCTIONS ---------------------------------------------------- */\r
+\r
+#if TARGET_HOST_POSIX_X11\r
+static int xrandr_resize(int xsz, int ysz, int rate, int just_checking)\r
+{\r
+#ifdef HAVE_X11_EXTENSIONS_XRANDR_H\r
+    int event_base, error_base, ver_major, ver_minor, use_rate;\r
+    XRRScreenConfiguration *xrr_config = 0;\r
+    Status result = -1;\r
+\r
+    /* must check at runtime for the availability of the extension */\r
+    if(!XRRQueryExtension(fgDisplay.Display, &event_base, &error_base)) {\r
+        return -1;\r
+    }\r
+\r
+    XRRQueryVersion(fgDisplay.Display, &ver_major, &ver_minor);\r
+\r
+    /* we only heed the rate if we CAN actually use it (Xrandr >= 1.1) and\r
+     * the user actually cares about it (rate > 0)\r
+     */\r
+    use_rate = ( rate > 0 ) && ( ( ver_major >= 1 ) ||\r
+                                        ( ( ver_major == 1 ) && ( ver_minor >= 1 ) ) );\r
+\r
+    /* this loop is only so that the whole thing will be repeated if someone\r
+     * else changes video mode between our query of the current information and\r
+     * the attempt to change it.\r
+     */\r
+    do {\r
+        XRRScreenSize *ssizes;\r
+        short *rates;\r
+        Rotation rot;\r
+        int i, ssizes_count, rates_count, curr, res_idx = -1;\r
+        Time timestamp, cfg_timestamp;\r
+\r
+        if(xrr_config) {\r
+            XRRFreeScreenConfigInfo(xrr_config);\r
+        }\r
+\r
+        if(!(xrr_config = XRRGetScreenInfo(fgDisplay.Display, fgDisplay.RootWindow))) {\r
+            fgWarning("XRRGetScreenInfo failed");\r
+            break;\r
+        }\r
+        ssizes = XRRConfigSizes(xrr_config, &ssizes_count);\r
+        curr = XRRConfigCurrentConfiguration(xrr_config, &rot);\r
+        timestamp = XRRConfigTimes(xrr_config, &cfg_timestamp);\r
+\r
+        /* if either of xsz or ysz are unspecified, use the current values */\r
+        if(xsz <= 0)\r
+            xsz = fgState.GameModeSize.X = ssizes[curr].width;\r
+        if(ysz <= 0)\r
+            ysz = fgState.GameModeSize.Y = ssizes[curr].height;\r
+\r
+\r
+        if(xsz == ssizes[curr].width && ysz == ssizes[curr].height) {\r
+            /* no need to switch, we're already in the requested resolution */\r
+            res_idx = curr;\r
+        } else {\r
+            for(i=0; i<ssizes_count; i++) {\r
+                if(ssizes[i].width == xsz && ssizes[i].height == ysz) {\r
+                    res_idx = i;\r
+                    break;  /* found it */\r
+                }\r
+            }\r
+        }\r
+        if(res_idx == -1)\r
+            break;  /* no matching resolution */\r
+\r
+#if ( RANDR_MAJOR >= 1 ) || ( ( RANDR_MAJOR == 1 ) && ( RANDR_MINOR >= 1 ) )\r
+        if(use_rate) {\r
+            rate = fgState.GameModeRefresh;\r
+\r
+            /* for the selected resolution, let's find out if there is\r
+             * a matching refresh rate available.\r
+             */\r
+            rates = XRRConfigRates(xrr_config, res_idx, &rates_count);\r
+\r
+            for(i=0; i<rates_count; i++) {\r
+                if(rates[i] == rate) {\r
+                    break;\r
+                }\r
+            }\r
+            if(i == rates_count) {\r
+                break; /* no matching rate */\r
+            }\r
+        }\r
+#endif\r
+\r
+        if(just_checking) {\r
+            result = 0;\r
+            break;\r
+        }\r
+\r
+#if ( RANDR_MAJOR >= 1 ) || ( ( RANDR_MAJOR == 1 ) && ( RANDR_MINOR >= 1 ) )\r
+        if(use_rate)\r
+            result = XRRSetScreenConfigAndRate(fgDisplay.Display, xrr_config,\r
+                    fgDisplay.RootWindow, res_idx, rot, rate, timestamp);\r
+        else\r
+#endif\r
+            result = XRRSetScreenConfig(fgDisplay.Display, xrr_config,\r
+                    fgDisplay.RootWindow, res_idx, rot, timestamp);\r
+\r
+    } while(result == RRSetConfigInvalidTime);\r
+\r
+    if(xrr_config) {\r
+        XRRFreeScreenConfigInfo(xrr_config);\r
+    }\r
+\r
+    if(result == 0) {\r
+        return 0;\r
+    }\r
+\r
+#endif  /* HAVE_X11_EXTENSIONS_XRANDR_H */\r
+    return -1;\r
+}\r
+#endif  /* TARGET_HOST_POSIX_X11 */\r
+\r
+/*\r
+ * Remembers the current visual settings, so that\r
+ * we can change them and restore later...\r
+ */\r
+static void fghRememberState( void )\r
+{\r
+#if TARGET_HOST_POSIX_X11\r
+    int event_base, error_base;\r
+\r
+    /*\r
+     * Remember the current pointer location before going fullscreen\r
+     * for restoring it later:\r
+     */\r
+    Window junk_window;\r
+    unsigned int junk_mask;\r
+\r
+    XQueryPointer(fgDisplay.Display, fgDisplay.RootWindow,\r
+            &junk_window, &junk_window,\r
+            &fgDisplay.DisplayPointerX, &fgDisplay.DisplayPointerY,\r
+            &fgDisplay.DisplayPointerX, &fgDisplay.DisplayPointerY, &junk_mask);\r
+\r
+#   ifdef HAVE_X11_EXTENSIONS_XRANDR_H\r
+    if(XRRQueryExtension(fgDisplay.Display, &event_base, &error_base)) {\r
+        XRRScreenConfiguration *xrr_config;\r
+        XRRScreenSize *ssizes;\r
+        Rotation rot;\r
+        int ssize_count, curr;\r
+\r
+        if((xrr_config = XRRGetScreenInfo(fgDisplay.Display, fgDisplay.RootWindow))) {\r
+            ssizes = XRRConfigSizes(xrr_config, &ssize_count);\r
+            curr = XRRConfigCurrentConfiguration(xrr_config, &rot);\r
+\r
+            fgDisplay.prev_xsz = ssizes[curr].width;\r
+            fgDisplay.prev_ysz = ssizes[curr].height;\r
+            fgDisplay.prev_refresh = -1;\r
+\r
+#       if ( RANDR_MAJOR >= 1 ) || ( ( RANDR_MAJOR == 1 ) && ( RANDR_MINOR >= 1 ) )\r
+            if(fgState.GameModeRefresh != -1) {\r
+                fgDisplay.prev_refresh = XRRConfigCurrentRate(xrr_config);\r
+            }\r
+#       endif\r
+\r
+            fgDisplay.prev_size_valid = 1;\r
+\r
+            XRRFreeScreenConfigInfo(xrr_config);\r
+        }\r
+    }\r
+#   endif\r
+\r
+    /*\r
+     * This highly depends on the XFree86 extensions,\r
+     * not approved as X Consortium standards\r
+     */\r
+#   ifdef HAVE_X11_EXTENSIONS_XF86VMODE_H\r
+    if(!XF86VidModeQueryExtension(fgDisplay.Display, &event_base, &error_base)) {\r
+        return;\r
+    }\r
+\r
+    /*\r
+     * Remember the current ViewPort location of the screen to be able to\r
+     * restore the ViewPort on LeaveGameMode():\r
+     */\r
+    if( !XF86VidModeGetViewPort(\r
+             fgDisplay.Display,\r
+             fgDisplay.Screen,\r
+             &fgDisplay.DisplayViewPortX,\r
+             &fgDisplay.DisplayViewPortY ) )\r
+        fgWarning( "XF86VidModeGetViewPort failed" );\r
+\r
+\r
+    /* Query the current display settings: */\r
+    fgDisplay.DisplayModeValid =\r
+      XF86VidModeGetModeLine(\r
+        fgDisplay.Display,\r
+        fgDisplay.Screen,\r
+        &fgDisplay.DisplayModeClock,\r
+        &fgDisplay.DisplayMode\r
+    );\r
+\r
+    if( !fgDisplay.DisplayModeValid )\r
+        fgWarning( "XF86VidModeGetModeLine failed" );\r
+#   endif\r
+\r
+#elif TARGET_HOST_MS_WINDOWS\r
+\r
+/*    DEVMODE devMode; */\r
+\r
+    /* Grab the current desktop settings... */\r
+\r
+/* hack to get around my stupid cross-gcc headers */\r
+#define FREEGLUT_ENUM_CURRENT_SETTINGS -1\r
+\r
+    EnumDisplaySettings( fgDisplay.DisplayName, FREEGLUT_ENUM_CURRENT_SETTINGS,\r
+                         &fgDisplay.DisplayMode );\r
+\r
+    /* Make sure we will be restoring all settings needed */\r
+    fgDisplay.DisplayMode.dmFields |=\r
+        DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL | DM_DISPLAYFREQUENCY;\r
+\r
+#endif\r
+}\r
+\r
+/*\r
+ * Restores the previously remembered visual settings\r
+ */\r
+static void fghRestoreState( void )\r
+{\r
+#if TARGET_HOST_POSIX_X11\r
+    /* Restore the remembered pointer position: */\r
+    XWarpPointer(\r
+        fgDisplay.Display, None, fgDisplay.RootWindow, 0, 0, 0, 0,\r
+        fgDisplay.DisplayPointerX, fgDisplay.DisplayPointerY\r
+    );\r
+\r
+\r
+#   ifdef HAVE_X11_EXTENSIONS_XRANDR_H\r
+    if(fgDisplay.prev_size_valid) {\r
+        if(xrandr_resize(fgDisplay.prev_xsz, fgDisplay.prev_ysz, fgDisplay.prev_refresh, 0) != -1) {\r
+            fgDisplay.prev_size_valid = 0;\r
+#       ifdef HAVE_X11_EXTENSIONS_XF86VMODE_H\r
+            fgDisplay.DisplayModeValid = 0;\r
+#       endif\r
+            return;\r
+        }\r
+    }\r
+#   endif\r
+\r
+\r
+\r
+#   ifdef HAVE_X11_EXTENSIONS_XF86VMODE_H\r
+    /*\r
+     * This highly depends on the XFree86 extensions,\r
+     * not approved as X Consortium standards\r
+     */\r
+\r
+    if( fgDisplay.DisplayModeValid )\r
+    {\r
+        XF86VidModeModeInfo** displayModes;\r
+        int i, displayModesCount;\r
+\r
+        if( !XF86VidModeGetAllModeLines(\r
+                 fgDisplay.Display,\r
+                 fgDisplay.Screen,\r
+                 &displayModesCount,\r
+                 &displayModes ) )\r
+        {\r
+            fgWarning( "XF86VidModeGetAllModeLines failed" );\r
+            return;\r
+        }\r
+\r
+\r
+        /*\r
+         * Check every of the modes looking for one that matches our demands.\r
+         * If we find one, switch to it and restore the remembered viewport.\r
+         */\r
+        for( i = 0; i < displayModesCount; i++ )\r
+        {\r
+            if(displayModes[ i ]->hdisplay == fgDisplay.DisplayMode.hdisplay &&\r
+               displayModes[ i ]->vdisplay == fgDisplay.DisplayMode.vdisplay &&\r
+               displayModes[ i ]->dotclock == fgDisplay.DisplayModeClock )\r
+            {\r
+                if( !XF86VidModeSwitchToMode(\r
+                         fgDisplay.Display,\r
+                         fgDisplay.Screen,\r
+                         displayModes[ i ] ) )\r
+                {\r
+                    fgWarning( "XF86VidModeSwitchToMode failed" );\r
+                    break;\r
+                }\r
+\r
+                if( !XF86VidModeSetViewPort(\r
+                         fgDisplay.Display,\r
+                         fgDisplay.Screen,\r
+                         fgDisplay.DisplayViewPortX,\r
+                         fgDisplay.DisplayViewPortY ) )\r
+                    fgWarning( "XF86VidModeSetViewPort failed" );\r
+\r
+\r
+                /*\r
+                 * For the case this would be the last X11 call the application\r
+                 * calls exit() we've to flush the X11 output queue to have the\r
+                 * commands sent to the X server before the application exits.\r
+                 */\r
+                XFlush( fgDisplay.Display );\r
+\r
+                fgDisplay.DisplayModeValid = 0;\r
+#       ifdef HAVE_X11_EXTENSIONS_XRANDR_H\r
+                fgDisplay.prev_size_valid = 0;\r
+#       endif\r
+\r
+                break;\r
+            }\r
+        }\r
+        XFree( displayModes );\r
+    }\r
+\r
+#   endif\r
+\r
+#elif TARGET_HOST_MS_WINDOWS\r
+\r
+    /* Restore the previously remembered desktop display settings */\r
+    ChangeDisplaySettingsEx( fgDisplay.DisplayName,&fgDisplay.DisplayMode, 0,0,0 );\r
+\r
+#endif\r
+}\r
+\r
+#if TARGET_HOST_POSIX_X11\r
+#ifdef HAVE_X11_EXTENSIONS_XF86VMODE_H\r
+\r
+/*\r
+ * Checks a single display mode settings against user's preferences.\r
+ */\r
+static GLboolean fghCheckDisplayMode( int width, int height, int depth, int refresh )\r
+{\r
+    /* The desired values should be stored in fgState structure... */\r
+    return ( width == fgState.GameModeSize.X ) &&\r
+           ( height == fgState.GameModeSize.Y ) &&\r
+           ( depth == fgState.GameModeDepth ) &&\r
+           ( refresh == fgState.GameModeRefresh );\r
+}\r
+\r
+/*\r
+ * Checks all display modes settings against user's preferences.\r
+ * Returns the mode number found or -1 if none could be found.\r
+ */\r
+static int fghCheckDisplayModes( GLboolean exactMatch, int displayModesCount, XF86VidModeModeInfo** displayModes )\r
+{\r
+    int i;\r
+    for( i = 0; i < displayModesCount; i++ )\r
+    {\r
+        /* Compute the displays refresh rate, dotclock comes in kHz. */\r
+        int refresh = ( displayModes[ i ]->dotclock * 1000 ) /\r
+                      ( displayModes[ i ]->htotal * displayModes[ i ]->vtotal );\r
+\r
+        if( fghCheckDisplayMode( displayModes[ i ]->hdisplay,\r
+                                 displayModes[ i ]->vdisplay,\r
+                                 fgState.GameModeDepth,\r
+                                 ( exactMatch ? refresh : fgState.GameModeRefresh ) ) ) {\r
+            if (!exactMatch)\r
+            {\r
+                /* Update the chosen refresh rate, otherwise a\r
+                 * glutGameModeGet(GLUT_GAME_MODE_REFRESH_RATE) would not\r
+                 * return the right values\r
+                 */\r
+                fgState.GameModeRefresh = refresh;\r
+            }\r
+\r
+            return i;\r
+        }\r
+    }\r
+    return -1;\r
+}\r
+\r
+#endif\r
+#endif\r
+\r
+/*\r
+ * Changes the current display mode to match user's settings\r
+ */\r
+static GLboolean fghChangeDisplayMode( GLboolean haveToTest )\r
+{\r
+    GLboolean success = GL_FALSE;\r
+#if TARGET_HOST_POSIX_X11\r
+\r
+    /* first try to use XRandR, then fallback to XF86VidMode */\r
+#   ifdef HAVE_X11_EXTENSIONS_XRANDR_H\r
+    if(xrandr_resize(fgState.GameModeSize.X, fgState.GameModeSize.Y,\r
+                fgState.GameModeRefresh, haveToTest) != -1) {\r
+        return GL_TRUE;\r
+    }\r
+#   endif\r
+\r
+\r
+    /*\r
+     * This highly depends on the XFree86 extensions,\r
+     * not approved as X Consortium standards\r
+     */\r
+#   ifdef HAVE_X11_EXTENSIONS_XF86VMODE_H\r
+\r
+    /*\r
+     * This is also used by applications which check modes by calling\r
+     * glutGameModeGet(GLUT_GAME_MODE_POSSIBLE), so allow the check:\r
+     */\r
+    if( haveToTest || fgDisplay.DisplayModeValid )\r
+    {\r
+        XF86VidModeModeInfo** displayModes;\r
+        int i, displayModesCount;\r
+\r
+        /* If we don't have a valid modeline in the display structure, which\r
+         * can happen if this is called from glutGameModeGet instead of\r
+         * glutEnterGameMode, then we need to query the current mode, to make\r
+         * unspecified settings to default to their current values.\r
+         */\r
+        if(!fgDisplay.DisplayModeValid) {\r
+            if(!XF86VidModeGetModeLine(fgDisplay.Display, fgDisplay.Screen,\r
+                    &fgDisplay.DisplayModeClock, &fgDisplay.DisplayMode)) {\r
+                return success;\r
+            }\r
+        }\r
+\r
+        if (fgState.GameModeSize.X == -1)\r
+        {\r
+            fgState.GameModeSize.X = fgDisplay.DisplayMode.hdisplay;\r
+        }\r
+        if (fgState.GameModeSize.Y == -1)\r
+        {\r
+            fgState.GameModeSize.Y = fgDisplay.DisplayMode.vdisplay;\r
+        }\r
+        if (fgState.GameModeDepth == -1)\r
+        {\r
+            /* can't get color depth from this, nor can we change it, do nothing\r
+             * TODO: get with XGetVisualInfo()? but then how to set?\r
+             */\r
+        }\r
+        if (fgState.GameModeRefresh == -1)\r
+        {\r
+            /* Compute the displays refresh rate, dotclock comes in kHz. */\r
+            int refresh = ( fgDisplay.DisplayModeClock * 1000 ) /\r
+                ( fgDisplay.DisplayMode.htotal * fgDisplay.DisplayMode.vtotal );\r
+\r
+            fgState.GameModeRefresh = refresh;\r
+        }\r
+\r
+        /* query all possible display modes */\r
+        if( !XF86VidModeGetAllModeLines(\r
+                 fgDisplay.Display,\r
+                 fgDisplay.Screen,\r
+                 &displayModesCount,\r
+                 &displayModes ) )\r
+        {\r
+            fgWarning( "XF86VidModeGetAllModeLines failed" );\r
+            return success;\r
+        }\r
+\r
+\r
+        /*\r
+         * Check every of the modes looking for one that matches our demands,\r
+         * ignoring the refresh rate if no exact match could be found.\r
+         */\r
+        i = fghCheckDisplayModes( GL_TRUE, displayModesCount, displayModes );\r
+        if( i < 0 ) {\r
+            i = fghCheckDisplayModes( GL_FALSE, displayModesCount, displayModes );\r
+        }\r
+        success = ( i < 0 ) ? GL_FALSE : GL_TRUE;\r
+\r
+        if( !haveToTest && success ) {\r
+            if( !XF86VidModeSwitchToMode(\r
+                     fgDisplay.Display,\r
+                     fgDisplay.Screen,\r
+                     displayModes[ i ] ) )\r
+                fgWarning( "XF86VidModeSwitchToMode failed" );\r
+        }\r
+\r
+        XFree( displayModes );\r
+    }\r
+\r
+#   endif\r
+\r
+\r
+#elif TARGET_HOST_MS_WINDOWS\r
+\r
+    DEVMODE  devMode;\r
+    char *fggmstr = NULL;\r
+    char displayMode[300];\r
+\r
+    success = GL_FALSE;\r
+\r
+    EnumDisplaySettings( fgDisplay.DisplayName, -1, &devMode ); \r
+    devMode.dmFields = 0;\r
+\r
+    if (fgState.GameModeSize.X!=-1)\r
+    {\r
+        devMode.dmPelsWidth  = fgState.GameModeSize.X;\r
+        devMode.dmFields |= DM_PELSWIDTH;\r
+    }\r
+    if (fgState.GameModeSize.Y!=-1)\r
+    {\r
+        devMode.dmPelsHeight  = fgState.GameModeSize.Y;\r
+        devMode.dmFields |= DM_PELSHEIGHT;\r
+    }\r
+    if (fgState.GameModeDepth!=-1)\r
+    {\r
+        devMode.dmBitsPerPel  = fgState.GameModeDepth;\r
+        devMode.dmFields |= DM_BITSPERPEL;\r
+    }\r
+    if (fgState.GameModeRefresh!=-1)\r
+    {\r
+        devMode.dmDisplayFrequency  = fgState.GameModeRefresh;\r
+        devMode.dmFields |= DM_DISPLAYFREQUENCY;\r
+    }\r
+\r
+    switch ( ChangeDisplaySettingsEx(fgDisplay.DisplayName, &devMode, NULL, haveToTest ? CDS_TEST : CDS_FULLSCREEN , NULL) )\r
+    {\r
+    case DISP_CHANGE_SUCCESSFUL:\r
+        success = GL_TRUE;\r
+\r
+        if (!haveToTest)\r
+        {\r
+            /* update vars in case if windows switched to proper mode */\r
+            EnumDisplaySettings( fgDisplay.DisplayName, FREEGLUT_ENUM_CURRENT_SETTINGS, &devMode );\r
+            fgState.GameModeSize.X  = devMode.dmPelsWidth;        \r
+            fgState.GameModeSize.Y  = devMode.dmPelsHeight;\r
+            fgState.GameModeDepth   = devMode.dmBitsPerPel;\r
+            fgState.GameModeRefresh = devMode.dmDisplayFrequency;\r
+        }\r
+               break;\r
+    case DISP_CHANGE_RESTART:\r
+        fggmstr = "The computer must be restarted for the graphics mode to work.";\r
+        break;\r
+    case DISP_CHANGE_BADFLAGS:\r
+        fggmstr = "An invalid set of flags was passed in.";\r
+        break;\r
+    case DISP_CHANGE_BADPARAM:\r
+        fggmstr = "An invalid parameter was passed in. This can include an invalid flag or combination of flags.";\r
+        break;\r
+    case DISP_CHANGE_FAILED:\r
+        fggmstr = "The display driver failed the specified graphics mode.";\r
+        break;\r
+    case DISP_CHANGE_BADMODE:\r
+        fggmstr = "The graphics mode is not supported.";\r
+        break;\r
+    default:\r
+        fggmstr = "Unknown error in graphics mode???"; /* dunno if it is possible,MSDN does not mention any other error */\r
+        break;\r
+    }\r
+\r
+    if ( !success )\r
+    {\r
+        /* I'd rather get info whats going on in my program than wonder about */\r
+        /* magic happenings behind my back, its lib for devels at last ;) */\r
+        \r
+        /* append display mode to error to make things more informative */\r
+        sprintf(displayMode,"%s Problem with requested mode: %ix%i:%i@%i", fggmstr, devMode.dmPelsWidth, devMode.dmPelsHeight, devMode.dmBitsPerPel, devMode.dmDisplayFrequency);\r
+        fgWarning(displayMode);\r
+    }\r
+#endif\r
+\r
+    return success;\r
+}\r
+\r
+\r
+/* -- INTERFACE FUNCTIONS -------------------------------------------------- */\r
+\r
+/*\r
+ * Sets the game mode display string\r
+ */\r
+void FGAPIENTRY glutGameModeString( const char* string )\r
+{\r
+    int width = -1, height = -1, depth = -1, refresh = -1;\r
+\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutGameModeString" );\r
+\r
+    /*\r
+     * This one seems a bit easier than glutInitDisplayString. The bad thing\r
+     * about it that I was unable to find the game mode string definition, so\r
+     * that I assumed it is: "[width]x[height]:[depth]@[refresh rate]", which\r
+     * appears in all GLUT game mode programs I have seen to date.\r
+     */\r
+    if( sscanf( string, "%ix%i:%i@%i", &width, &height, &depth, &refresh ) !=\r
+        4 )\r
+        if( sscanf( string, "%ix%i:%i", &width, &height, &depth ) != 3 )\r
+            if( sscanf( string, "%ix%i@%i", &width, &height, &refresh ) != 3 )\r
+                if( sscanf( string, "%ix%i", &width, &height ) != 2 )\r
+                    if( sscanf( string, ":%i@%i", &depth, &refresh ) != 2 )\r
+                        if( sscanf( string, ":%i", &depth ) != 1 )\r
+                            if( sscanf( string, "@%i", &refresh ) != 1 )\r
+                                fgWarning(\r
+                                    "unable to parse game mode string `%s'",\r
+                                    string\r
+                                );\r
+\r
+    /* All values not specified are now set to -1, which means those\r
+     * aspects of the current display mode are not changed in\r
+     * fghChangeDisplayMode() above.\r
+     */\r
+    fgState.GameModeSize.X  = width;\r
+    fgState.GameModeSize.Y  = height;\r
+    fgState.GameModeDepth   = depth;\r
+    fgState.GameModeRefresh = refresh;\r
+}\r
+\r
+\r
+\r
+/*\r
+ * Enters the game mode\r
+ */\r
+int FGAPIENTRY glutEnterGameMode( void )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutEnterGameMode" );\r
+\r
+    if( fgStructure.GameModeWindow )\r
+        fgAddToWindowDestroyList( fgStructure.GameModeWindow );\r
+    else\r
+        fghRememberState( );\r
+\r
+    if( ! fghChangeDisplayMode( GL_FALSE ) )\r
+    {\r
+        fgWarning( "failed to change screen settings" );\r
+        return 0;\r
+    }\r
+\r
+    fgStructure.GameModeWindow = fgCreateWindow(\r
+        NULL, "FREEGLUT", GL_TRUE, 0, 0,\r
+        GL_TRUE, fgState.GameModeSize.X, fgState.GameModeSize.Y,\r
+        GL_TRUE, GL_FALSE\r
+    );\r
+\r
+    fgStructure.GameModeWindow->State.Width  = fgState.GameModeSize.X;\r
+    fgStructure.GameModeWindow->State.Height = fgState.GameModeSize.Y;\r
+    fgStructure.GameModeWindow->State.NeedToResize = GL_TRUE;\r
+\r
+#if TARGET_HOST_POSIX_X11\r
+\r
+    /*\r
+     * Sync needed to avoid a real race, the Xserver must have really created\r
+     * the window before we can grab the pointer into it:\r
+     */\r
+    XSync( fgDisplay.Display, False );\r
+    /*\r
+     * Grab the pointer to confine it into the window after the calls to\r
+     * XWrapPointer() which ensure that the pointer really enters the window.\r
+     *\r
+     * We also need to wait here until XGrabPointer() returns GrabSuccess,\r
+     * otherwise the new window is not viewable yet and if the next function\r
+     * (XSetInputFocus) is called with a not yet viewable window, it will exit\r
+     * the application which we have to aviod, so wait until it's viewable:\r
+     */\r
+    while( GrabSuccess != XGrabPointer(\r
+               fgDisplay.Display, fgStructure.GameModeWindow->Window.Handle,\r
+               TRUE,\r
+               ButtonPressMask | ButtonReleaseMask | ButtonMotionMask\r
+               | PointerMotionMask,\r
+               GrabModeAsync, GrabModeAsync,\r
+               fgStructure.GameModeWindow->Window.Handle, None, CurrentTime) )\r
+        usleep( 100 );\r
+    /*\r
+     * Change input focus to the new window. This will exit the application\r
+     * if the new window is not viewable yet, see the XGrabPointer loop above.\r
+     */\r
+    XSetInputFocus(\r
+        fgDisplay.Display,\r
+        fgStructure.GameModeWindow->Window.Handle,\r
+        RevertToNone,\r
+        CurrentTime\r
+    );\r
+\r
+    /* Move the Pointer to the middle of the fullscreen window */\r
+    XWarpPointer(\r
+        fgDisplay.Display,\r
+        None,\r
+        fgDisplay.RootWindow,\r
+        0, 0, 0, 0,\r
+        fgState.GameModeSize.X/2, fgState.GameModeSize.Y/2\r
+    );\r
+\r
+#   ifdef HAVE_X11_EXTENSIONS_XF86VMODE_H\r
+\r
+    if( fgDisplay.DisplayModeValid )\r
+    {\r
+        int x, y;\r
+        Window child;\r
+\r
+        /* Change to viewport to the window topleft edge: */\r
+        if( !XF86VidModeSetViewPort( fgDisplay.Display, fgDisplay.Screen, 0, 0 ) )\r
+            fgWarning( "XF86VidModeSetViewPort failed" );\r
+\r
+        /*\r
+         * Final window repositioning: It could be avoided using an undecorated\r
+         * window using override_redirect, but this * would possily require\r
+         * more changes and investigation.\r
+         */\r
+\r
+        /* Get the current postion of the drawable area on screen */\r
+        XTranslateCoordinates(\r
+            fgDisplay.Display,\r
+            fgStructure.CurrentWindow->Window.Handle,\r
+            fgDisplay.RootWindow,\r
+            0, 0, &x, &y,\r
+            &child\r
+        );\r
+\r
+        /* Move the decorataions out of the topleft corner of the display */\r
+        XMoveWindow( fgDisplay.Display, fgStructure.CurrentWindow->Window.Handle,\r
+                     -x, -y);\r
+    }\r
+\r
+#endif\r
+\r
+    /* Grab the keyboard, too */\r
+    XGrabKeyboard(\r
+        fgDisplay.Display,\r
+        fgStructure.GameModeWindow->Window.Handle,\r
+        FALSE,\r
+        GrabModeAsync, GrabModeAsync,\r
+        CurrentTime\r
+    );\r
+\r
+#endif\r
+\r
+    return fgStructure.GameModeWindow->ID;\r
+}\r
+\r
+/*\r
+ * Leaves the game mode\r
+ */\r
+void FGAPIENTRY glutLeaveGameMode( void )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutLeaveGameMode" );\r
+\r
+    freeglut_return_if_fail( fgStructure.GameModeWindow );\r
+\r
+    fgAddToWindowDestroyList( fgStructure.GameModeWindow );\r
+    fgStructure.GameModeWindow = NULL;\r
+\r
+#if TARGET_HOST_POSIX_X11\r
+\r
+    XUngrabPointer( fgDisplay.Display, CurrentTime );\r
+    XUngrabKeyboard( fgDisplay.Display, CurrentTime );\r
+\r
+#endif\r
+\r
+    fghRestoreState();\r
+}\r
+\r
+/*\r
+ * Returns information concerning the freeglut game mode\r
+ */\r
+int FGAPIENTRY glutGameModeGet( GLenum eWhat )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutGameModeGet" );\r
+\r
+    switch( eWhat )\r
+    {\r
+    case GLUT_GAME_MODE_ACTIVE:\r
+        return !!fgStructure.GameModeWindow;\r
+\r
+    case GLUT_GAME_MODE_POSSIBLE:\r
+        return fghChangeDisplayMode( GL_TRUE );\r
+\r
+    case GLUT_GAME_MODE_WIDTH:\r
+        return fgState.GameModeSize.X;\r
+\r
+    case GLUT_GAME_MODE_HEIGHT:\r
+        return fgState.GameModeSize.Y;\r
+\r
+    case GLUT_GAME_MODE_PIXEL_DEPTH:\r
+        return fgState.GameModeDepth;\r
+\r
+    case GLUT_GAME_MODE_REFRESH_RATE:\r
+        return fgState.GameModeRefresh;\r
+\r
+    case GLUT_GAME_MODE_DISPLAY_CHANGED:\r
+        /*\r
+         * This is true if the game mode has been activated successfully..\r
+         */\r
+        return !!fgStructure.GameModeWindow;\r
+    }\r
+\r
+    fgWarning( "Unknown gamemode get: %d", eWhat );\r
+    return -1;\r
+}\r
+\r
+/*** END OF FILE ***/\r
diff --git a/src/Common/freeglut_geometry.c b/src/Common/freeglut_geometry.c
new file mode 100644 (file)
index 0000000..e102cba
--- /dev/null
@@ -0,0 +1,1215 @@
+/*\r
+ * freeglut_geometry.c\r
+ *\r
+ * Freeglut geometry rendering methods.\r
+ *\r
+ * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.\r
+ * Written by Pawel W. Olszta, <olszta@sourceforge.net>\r
+ * Creation date: Fri Dec 3 1999\r
+ *\r
+ * Permission is hereby granted, free of charge, to any person obtaining a\r
+ * copy of this software and associated documentation files (the "Software"),\r
+ * to deal in the Software without restriction, including without limitation\r
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
+ * and/or sell copies of the Software, and to permit persons to whom the\r
+ * Software is furnished to do so, subject to the following conditions:\r
+ *\r
+ * The above copyright notice and this permission notice shall be included\r
+ * in all copies or substantial portions of the Software.\r
+ *\r
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL\r
+ * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
+ */\r
+\r
+#include <GL/freeglut.h>\r
+#include "freeglut_internal.h"\r
+\r
+/*\r
+ * TODO BEFORE THE STABLE RELEASE:\r
+ *\r
+ * Following functions have been contributed by Andreas Umbach.\r
+ *\r
+ *      glutWireCube()          -- looks OK\r
+ *      glutSolidCube()         -- OK\r
+ *\r
+ * Those functions have been implemented by John Fay.\r
+ *\r
+ *      glutWireTorus()         -- looks OK\r
+ *      glutSolidTorus()        -- looks OK\r
+ *      glutWireDodecahedron()  -- looks OK\r
+ *      glutSolidDodecahedron() -- looks OK\r
+ *      glutWireOctahedron()    -- looks OK\r
+ *      glutSolidOctahedron()   -- looks OK\r
+ *      glutWireTetrahedron()   -- looks OK\r
+ *      glutSolidTetrahedron()  -- looks OK\r
+ *      glutWireIcosahedron()   -- looks OK\r
+ *      glutSolidIcosahedron()  -- looks OK\r
+ *\r
+ *  The Following functions have been updated by Nigel Stewart, based\r
+ *  on FreeGLUT 2.0.0 implementations:\r
+ *\r
+ *      glutWireSphere()        -- looks OK\r
+ *      glutSolidSphere()       -- looks OK\r
+ *      glutWireCone()          -- looks OK\r
+ *      glutSolidCone()         -- looks OK\r
+ */\r
+\r
+\r
+/* -- INTERFACE FUNCTIONS -------------------------------------------------- */\r
+\r
+/*\r
+ * Draws a wireframed cube. Code contributed by Andreas Umbach <marvin@dataway.ch>\r
+ */\r
+void FGAPIENTRY glutWireCube( GLdouble dSize )\r
+{\r
+    double size = dSize * 0.5;\r
+\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutWireCube" );\r
+\r
+#   define V(a,b,c) glVertex3d( a size, b size, c size );\r
+#   define N(a,b,c) glNormal3d( a, b, c );\r
+\r
+    /* PWO: I dared to convert the code to use macros... */\r
+    glBegin( GL_LINE_LOOP ); N( 1.0, 0.0, 0.0); V(+,-,+); V(+,-,-); V(+,+,-); V(+,+,+); glEnd();\r
+    glBegin( GL_LINE_LOOP ); N( 0.0, 1.0, 0.0); V(+,+,+); V(+,+,-); V(-,+,-); V(-,+,+); glEnd();\r
+    glBegin( GL_LINE_LOOP ); N( 0.0, 0.0, 1.0); V(+,+,+); V(-,+,+); V(-,-,+); V(+,-,+); glEnd();\r
+    glBegin( GL_LINE_LOOP ); N(-1.0, 0.0, 0.0); V(-,-,+); V(-,+,+); V(-,+,-); V(-,-,-); glEnd();\r
+    glBegin( GL_LINE_LOOP ); N( 0.0,-1.0, 0.0); V(-,-,+); V(-,-,-); V(+,-,-); V(+,-,+); glEnd();\r
+    glBegin( GL_LINE_LOOP ); N( 0.0, 0.0,-1.0); V(-,-,-); V(-,+,-); V(+,+,-); V(+,-,-); glEnd();\r
+\r
+#   undef V\r
+#   undef N\r
+}\r
+\r
+/*\r
+ * Draws a solid cube. Code contributed by Andreas Umbach <marvin@dataway.ch>\r
+ */\r
+void FGAPIENTRY glutSolidCube( GLdouble dSize )\r
+{\r
+    double size = dSize * 0.5;\r
+\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSolidCube" );\r
+\r
+#   define V(a,b,c) glVertex3d( a size, b size, c size );\r
+#   define N(a,b,c) glNormal3d( a, b, c );\r
+\r
+    /* PWO: Again, I dared to convert the code to use macros... */\r
+    glBegin( GL_QUADS );\r
+        N( 1.0, 0.0, 0.0); V(+,-,+); V(+,-,-); V(+,+,-); V(+,+,+);\r
+        N( 0.0, 1.0, 0.0); V(+,+,+); V(+,+,-); V(-,+,-); V(-,+,+);\r
+        N( 0.0, 0.0, 1.0); V(+,+,+); V(-,+,+); V(-,-,+); V(+,-,+);\r
+        N(-1.0, 0.0, 0.0); V(-,-,+); V(-,+,+); V(-,+,-); V(-,-,-);\r
+        N( 0.0,-1.0, 0.0); V(-,-,+); V(-,-,-); V(+,-,-); V(+,-,+);\r
+        N( 0.0, 0.0,-1.0); V(-,-,-); V(-,+,-); V(+,+,-); V(+,-,-);\r
+    glEnd();\r
+\r
+#   undef V\r
+#   undef N\r
+}\r
+\r
+/*\r
+ * Compute lookup table of cos and sin values forming a cirle\r
+ *\r
+ * Notes:\r
+ *    It is the responsibility of the caller to free these tables\r
+ *    The size of the table is (n+1) to form a connected loop\r
+ *    The last entry is exactly the same as the first\r
+ *    The sign of n can be flipped to get the reverse loop\r
+ */\r
+\r
+static void fghCircleTable(double **sint,double **cost,const int n)\r
+{\r
+    int i;\r
+\r
+    /* Table size, the sign of n flips the circle direction */\r
+\r
+    const int size = abs(n);\r
+\r
+    /* Determine the angle between samples */\r
+\r
+    const double angle = 2*M_PI/(double)( ( n == 0 ) ? 1 : n );\r
+\r
+    /* Allocate memory for n samples, plus duplicate of first entry at the end */\r
+\r
+    *sint = (double *) calloc(sizeof(double), size+1);\r
+    *cost = (double *) calloc(sizeof(double), size+1);\r
+\r
+    /* Bail out if memory allocation fails, fgError never returns */\r
+\r
+    if (!(*sint) || !(*cost))\r
+    {\r
+        free(*sint);\r
+        free(*cost);\r
+        fgError("Failed to allocate memory in fghCircleTable");\r
+    }\r
+\r
+    /* Compute cos and sin around the circle */\r
+\r
+    (*sint)[0] = 0.0;\r
+    (*cost)[0] = 1.0;\r
+\r
+    for (i=1; i<size; i++)\r
+    {\r
+        (*sint)[i] = sin(angle*i);\r
+        (*cost)[i] = cos(angle*i);\r
+    }\r
+\r
+    /* Last sample is duplicate of the first */\r
+\r
+    (*sint)[size] = (*sint)[0];\r
+    (*cost)[size] = (*cost)[0];\r
+}\r
+\r
+/*\r
+ * Draws a solid sphere\r
+ */\r
+void FGAPIENTRY glutSolidSphere(GLdouble radius, GLint slices, GLint stacks)\r
+{\r
+    int i,j;\r
+\r
+    /* Adjust z and radius as stacks are drawn. */\r
+\r
+    double z0,z1;\r
+    double r0,r1;\r
+\r
+    /* Pre-computed circle */\r
+\r
+    double *sint1,*cost1;\r
+    double *sint2,*cost2;\r
+\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSolidSphere" );\r
+\r
+    fghCircleTable(&sint1,&cost1,-slices);\r
+    fghCircleTable(&sint2,&cost2,stacks*2);\r
+\r
+    /* The top stack is covered with a triangle fan */\r
+\r
+    z0 = 1.0;\r
+    z1 = cost2[(stacks>0)?1:0];\r
+    r0 = 0.0;\r
+    r1 = sint2[(stacks>0)?1:0];\r
+\r
+    glBegin(GL_TRIANGLE_FAN);\r
+\r
+        glNormal3d(0,0,1);\r
+        glVertex3d(0,0,radius);\r
+\r
+        for (j=slices; j>=0; j--)\r
+        {\r
+            glNormal3d(cost1[j]*r1,        sint1[j]*r1,        z1       );\r
+            glVertex3d(cost1[j]*r1*radius, sint1[j]*r1*radius, z1*radius);\r
+        }\r
+\r
+    glEnd();\r
+\r
+    /* Cover each stack with a quad strip, except the top and bottom stacks */\r
+\r
+    for( i=1; i<stacks-1; i++ )\r
+    {\r
+        z0 = z1; z1 = cost2[i+1];\r
+        r0 = r1; r1 = sint2[i+1];\r
+\r
+        glBegin(GL_QUAD_STRIP);\r
+\r
+            for(j=0; j<=slices; j++)\r
+            {\r
+                glNormal3d(cost1[j]*r1,        sint1[j]*r1,        z1       );\r
+                glVertex3d(cost1[j]*r1*radius, sint1[j]*r1*radius, z1*radius);\r
+                glNormal3d(cost1[j]*r0,        sint1[j]*r0,        z0       );\r
+                glVertex3d(cost1[j]*r0*radius, sint1[j]*r0*radius, z0*radius);\r
+            }\r
+\r
+        glEnd();\r
+    }\r
+\r
+    /* The bottom stack is covered with a triangle fan */\r
+\r
+    z0 = z1;\r
+    r0 = r1;\r
+\r
+    glBegin(GL_TRIANGLE_FAN);\r
+\r
+        glNormal3d(0,0,-1);\r
+        glVertex3d(0,0,-radius);\r
+\r
+        for (j=0; j<=slices; j++)\r
+        {\r
+            glNormal3d(cost1[j]*r0,        sint1[j]*r0,        z0       );\r
+            glVertex3d(cost1[j]*r0*radius, sint1[j]*r0*radius, z0*radius);\r
+        }\r
+\r
+    glEnd();\r
+\r
+    /* Release sin and cos tables */\r
+\r
+    free(sint1);\r
+    free(cost1);\r
+    free(sint2);\r
+    free(cost2);\r
+}\r
+\r
+/*\r
+ * Draws a wire sphere\r
+ */\r
+void FGAPIENTRY glutWireSphere(GLdouble radius, GLint slices, GLint stacks)\r
+{\r
+    int i,j;\r
+\r
+    /* Adjust z and radius as stacks and slices are drawn. */\r
+\r
+    double r;\r
+    double x,y,z;\r
+\r
+    /* Pre-computed circle */\r
+\r
+    double *sint1,*cost1;\r
+    double *sint2,*cost2;\r
+\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutWireSphere" );\r
+\r
+    fghCircleTable(&sint1,&cost1,-slices  );\r
+    fghCircleTable(&sint2,&cost2, stacks*2);\r
+\r
+    /* Draw a line loop for each stack */\r
+\r
+    for (i=1; i<stacks; i++)\r
+    {\r
+        z = cost2[i];\r
+        r = sint2[i];\r
+\r
+        glBegin(GL_LINE_LOOP);\r
+\r
+            for(j=0; j<=slices; j++)\r
+            {\r
+                x = cost1[j];\r
+                y = sint1[j];\r
+\r
+                glNormal3d(x,y,z);\r
+                glVertex3d(x*r*radius,y*r*radius,z*radius);\r
+            }\r
+\r
+        glEnd();\r
+    }\r
+\r
+    /* Draw a line loop for each slice */\r
+\r
+    for (i=0; i<slices; i++)\r
+    {\r
+        glBegin(GL_LINE_STRIP);\r
+\r
+            for(j=0; j<=stacks; j++)\r
+            {\r
+                x = cost1[i]*sint2[j];\r
+                y = sint1[i]*sint2[j];\r
+                z = cost2[j];\r
+\r
+                glNormal3d(x,y,z);\r
+                glVertex3d(x*radius,y*radius,z*radius);\r
+            }\r
+\r
+        glEnd();\r
+    }\r
+\r
+    /* Release sin and cos tables */\r
+\r
+    free(sint1);\r
+    free(cost1);\r
+    free(sint2);\r
+    free(cost2);\r
+}\r
+\r
+/*\r
+ * Draws a solid cone\r
+ */\r
+void FGAPIENTRY glutSolidCone( GLdouble base, GLdouble height, GLint slices, GLint stacks )\r
+{\r
+    int i,j;\r
+\r
+    /* Step in z and radius as stacks are drawn. */\r
+\r
+    double z0,z1;\r
+    double r0,r1;\r
+\r
+    const double zStep = height / ( ( stacks > 0 ) ? stacks : 1 );\r
+    const double rStep = base / ( ( stacks > 0 ) ? stacks : 1 );\r
+\r
+    /* Scaling factors for vertex normals */\r
+\r
+    const double cosn = ( height / sqrt ( height * height + base * base ));\r
+    const double sinn = ( base   / sqrt ( height * height + base * base ));\r
+\r
+    /* Pre-computed circle */\r
+\r
+    double *sint,*cost;\r
+\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSolidCone" );\r
+\r
+    fghCircleTable(&sint,&cost,-slices);\r
+\r
+    /* Cover the circular base with a triangle fan... */\r
+\r
+    z0 = 0.0;\r
+    z1 = zStep;\r
+\r
+    r0 = base;\r
+    r1 = r0 - rStep;\r
+\r
+    glBegin(GL_TRIANGLE_FAN);\r
+\r
+        glNormal3d(0.0,0.0,-1.0);\r
+        glVertex3d(0.0,0.0, z0 );\r
+\r
+        for (j=0; j<=slices; j++)\r
+            glVertex3d(cost[j]*r0, sint[j]*r0, z0);\r
+\r
+    glEnd();\r
+\r
+    /* Cover each stack with a quad strip, except the top stack */\r
+\r
+    for( i=0; i<stacks-1; i++ )\r
+    {\r
+        glBegin(GL_QUAD_STRIP);\r
+\r
+            for(j=0; j<=slices; j++)\r
+            {\r
+                glNormal3d(cost[j]*cosn, sint[j]*cosn, sinn);\r
+                glVertex3d(cost[j]*r0,   sint[j]*r0,   z0  );\r
+                glVertex3d(cost[j]*r1,   sint[j]*r1,   z1  );\r
+            }\r
+\r
+            z0 = z1; z1 += zStep;\r
+            r0 = r1; r1 -= rStep;\r
+\r
+        glEnd();\r
+    }\r
+\r
+    /* The top stack is covered with individual triangles */\r
+\r
+    glBegin(GL_TRIANGLES);\r
+\r
+        glNormal3d(cost[0]*sinn, sint[0]*sinn, cosn);\r
+\r
+        for (j=0; j<slices; j++)\r
+        {\r
+            glVertex3d(cost[j+0]*r0,   sint[j+0]*r0,   z0    );\r
+            glVertex3d(0,              0,              height);\r
+            glNormal3d(cost[j+1]*sinn, sint[j+1]*sinn, cosn  );\r
+            glVertex3d(cost[j+1]*r0,   sint[j+1]*r0,   z0    );\r
+        }\r
+\r
+    glEnd();\r
+\r
+    /* Release sin and cos tables */\r
+\r
+    free(sint);\r
+    free(cost);\r
+}\r
+\r
+/*\r
+ * Draws a wire cone\r
+ */\r
+void FGAPIENTRY glutWireCone( GLdouble base, GLdouble height, GLint slices, GLint stacks)\r
+{\r
+    int i,j;\r
+\r
+    /* Step in z and radius as stacks are drawn. */\r
+\r
+    double z = 0.0;\r
+    double r = base;\r
+\r
+    const double zStep = height / ( ( stacks > 0 ) ? stacks : 1 );\r
+    const double rStep = base / ( ( stacks > 0 ) ? stacks : 1 );\r
+\r
+    /* Scaling factors for vertex normals */\r
+\r
+    const double cosn = ( height / sqrt ( height * height + base * base ));\r
+    const double sinn = ( base   / sqrt ( height * height + base * base ));\r
+\r
+    /* Pre-computed circle */\r
+\r
+    double *sint,*cost;\r
+\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutWireCone" );\r
+\r
+    fghCircleTable(&sint,&cost,-slices);\r
+\r
+    /* Draw the stacks... */\r
+\r
+    for (i=0; i<stacks; i++)\r
+    {\r
+        glBegin(GL_LINE_LOOP);\r
+\r
+            for( j=0; j<slices; j++ )\r
+            {\r
+                glNormal3d(cost[j]*sinn, sint[j]*sinn, cosn);\r
+                glVertex3d(cost[j]*r,    sint[j]*r,    z   );\r
+            }\r
+\r
+        glEnd();\r
+\r
+        z += zStep;\r
+        r -= rStep;\r
+    }\r
+\r
+    /* Draw the slices */\r
+\r
+    r = base;\r
+\r
+    glBegin(GL_LINES);\r
+\r
+        for (j=0; j<slices; j++)\r
+        {\r
+            glNormal3d(cost[j]*sinn, sint[j]*sinn, cosn  );\r
+            glVertex3d(cost[j]*r,    sint[j]*r,    0.0   );\r
+            glVertex3d(0.0,          0.0,          height);\r
+        }\r
+\r
+    glEnd();\r
+\r
+    /* Release sin and cos tables */\r
+\r
+    free(sint);\r
+    free(cost);\r
+}\r
+\r
+\r
+/*\r
+ * Draws a solid cylinder\r
+ */\r
+void FGAPIENTRY glutSolidCylinder(GLdouble radius, GLdouble height, GLint slices, GLint stacks)\r
+{\r
+    int i,j;\r
+\r
+    /* Step in z and radius as stacks are drawn. */\r
+\r
+    double z0,z1;\r
+    const double zStep = height / ( ( stacks > 0 ) ? stacks : 1 );\r
+\r
+    /* Pre-computed circle */\r
+\r
+    double *sint,*cost;\r
+\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSolidCylinder" );\r
+\r
+    fghCircleTable(&sint,&cost,-slices);\r
+\r
+    /* Cover the base and top */\r
+\r
+    glBegin(GL_TRIANGLE_FAN);\r
+        glNormal3d(0.0, 0.0, -1.0 );\r
+        glVertex3d(0.0, 0.0,  0.0 );\r
+        for (j=0; j<=slices; j++)\r
+          glVertex3d(cost[j]*radius, sint[j]*radius, 0.0);\r
+    glEnd();\r
+\r
+    glBegin(GL_TRIANGLE_FAN);\r
+        glNormal3d(0.0, 0.0, 1.0   );\r
+        glVertex3d(0.0, 0.0, height);\r
+        for (j=slices; j>=0; j--)\r
+          glVertex3d(cost[j]*radius, sint[j]*radius, height);\r
+    glEnd();\r
+\r
+    /* Do the stacks */\r
+\r
+    z0 = 0.0;\r
+    z1 = zStep;\r
+\r
+    for (i=1; i<=stacks; i++)\r
+    {\r
+        if (i==stacks)\r
+            z1 = height;\r
+\r
+        glBegin(GL_QUAD_STRIP);\r
+            for (j=0; j<=slices; j++ )\r
+            {\r
+                glNormal3d(cost[j],        sint[j],        0.0 );\r
+                glVertex3d(cost[j]*radius, sint[j]*radius, z0  );\r
+                glVertex3d(cost[j]*radius, sint[j]*radius, z1  );\r
+            }\r
+        glEnd();\r
+\r
+        z0 = z1; z1 += zStep;\r
+    }\r
+\r
+    /* Release sin and cos tables */\r
+\r
+    free(sint);\r
+    free(cost);\r
+}\r
+\r
+/*\r
+ * Draws a wire cylinder\r
+ */\r
+void FGAPIENTRY glutWireCylinder(GLdouble radius, GLdouble height, GLint slices, GLint stacks)\r
+{\r
+    int i,j;\r
+\r
+    /* Step in z and radius as stacks are drawn. */\r
+\r
+          double z = 0.0;\r
+    const double zStep = height / ( ( stacks > 0 ) ? stacks : 1 );\r
+\r
+    /* Pre-computed circle */\r
+\r
+    double *sint,*cost;\r
+\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutWireCylinder" );\r
+\r
+    fghCircleTable(&sint,&cost,-slices);\r
+\r
+    /* Draw the stacks... */\r
+\r
+    for (i=0; i<=stacks; i++)\r
+    {\r
+        if (i==stacks)\r
+            z = height;\r
+\r
+        glBegin(GL_LINE_LOOP);\r
+\r
+            for( j=0; j<slices; j++ )\r
+            {\r
+                glNormal3d(cost[j],        sint[j],        0.0);\r
+                glVertex3d(cost[j]*radius, sint[j]*radius, z  );\r
+            }\r
+\r
+        glEnd();\r
+\r
+        z += zStep;\r
+    }\r
+\r
+    /* Draw the slices */\r
+\r
+    glBegin(GL_LINES);\r
+\r
+        for (j=0; j<slices; j++)\r
+        {\r
+            glNormal3d(cost[j],        sint[j],        0.0   );\r
+            glVertex3d(cost[j]*radius, sint[j]*radius, 0.0   );\r
+            glVertex3d(cost[j]*radius, sint[j]*radius, height);\r
+        }\r
+\r
+    glEnd();\r
+\r
+    /* Release sin and cos tables */\r
+\r
+    free(sint);\r
+    free(cost);\r
+}\r
+\r
+/*\r
+ * Draws a wire torus\r
+ */\r
+void FGAPIENTRY glutWireTorus( GLdouble dInnerRadius, GLdouble dOuterRadius, GLint nSides, GLint nRings )\r
+{\r
+  double  iradius = dInnerRadius, oradius = dOuterRadius, phi, psi, dpsi, dphi;\r
+  double *vertex, *normal;\r
+  int    i, j;\r
+  double spsi, cpsi, sphi, cphi ;\r
+\r
+  FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutWireTorus" );\r
+\r
+  if ( nSides < 1 ) nSides = 1;\r
+  if ( nRings < 1 ) nRings = 1;\r
+\r
+  /* Allocate the vertices array */\r
+  vertex = (double *)calloc( sizeof(double), 3 * nSides * nRings );\r
+  normal = (double *)calloc( sizeof(double), 3 * nSides * nRings );\r
+\r
+  glPushMatrix();\r
+\r
+  dpsi =  2.0 * M_PI / (double)nRings ;\r
+  dphi = -2.0 * M_PI / (double)nSides ;\r
+  psi  = 0.0;\r
+\r
+  for( j=0; j<nRings; j++ )\r
+  {\r
+    cpsi = cos ( psi ) ;\r
+    spsi = sin ( psi ) ;\r
+    phi = 0.0;\r
+\r
+    for( i=0; i<nSides; i++ )\r
+    {\r
+      int offset = 3 * ( j * nSides + i ) ;\r
+      cphi = cos ( phi ) ;\r
+      sphi = sin ( phi ) ;\r
+      *(vertex + offset + 0) = cpsi * ( oradius + cphi * iradius ) ;\r
+      *(vertex + offset + 1) = spsi * ( oradius + cphi * iradius ) ;\r
+      *(vertex + offset + 2) =                    sphi * iradius  ;\r
+      *(normal + offset + 0) = cpsi * cphi ;\r
+      *(normal + offset + 1) = spsi * cphi ;\r
+      *(normal + offset + 2) =        sphi ;\r
+      phi += dphi;\r
+    }\r
+\r
+    psi += dpsi;\r
+  }\r
+\r
+  for( i=0; i<nSides; i++ )\r
+  {\r
+    glBegin( GL_LINE_LOOP );\r
+\r
+    for( j=0; j<nRings; j++ )\r
+    {\r
+      int offset = 3 * ( j * nSides + i ) ;\r
+      glNormal3dv( normal + offset );\r
+      glVertex3dv( vertex + offset );\r
+    }\r
+\r
+    glEnd();\r
+  }\r
+\r
+  for( j=0; j<nRings; j++ )\r
+  {\r
+    glBegin(GL_LINE_LOOP);\r
+\r
+    for( i=0; i<nSides; i++ )\r
+    {\r
+      int offset = 3 * ( j * nSides + i ) ;\r
+      glNormal3dv( normal + offset );\r
+      glVertex3dv( vertex + offset );\r
+    }\r
+\r
+    glEnd();\r
+  }\r
+\r
+  free ( vertex ) ;\r
+  free ( normal ) ;\r
+  glPopMatrix();\r
+}\r
+\r
+/*\r
+ * Draws a solid torus\r
+ */\r
+void FGAPIENTRY glutSolidTorus( GLdouble dInnerRadius, GLdouble dOuterRadius, GLint nSides, GLint nRings )\r
+{\r
+  double  iradius = dInnerRadius, oradius = dOuterRadius, phi, psi, dpsi, dphi;\r
+  double *vertex, *normal;\r
+  int    i, j;\r
+  double spsi, cpsi, sphi, cphi ;\r
+\r
+  FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSolidTorus" );\r
+\r
+  if ( nSides < 1 ) nSides = 1;\r
+  if ( nRings < 1 ) nRings = 1;\r
+\r
+  /* Increment the number of sides and rings to allow for one more point than surface */\r
+  nSides ++ ;\r
+  nRings ++ ;\r
+\r
+  /* Allocate the vertices array */\r
+  vertex = (double *)calloc( sizeof(double), 3 * nSides * nRings );\r
+  normal = (double *)calloc( sizeof(double), 3 * nSides * nRings );\r
+\r
+  glPushMatrix();\r
+\r
+  dpsi =  2.0 * M_PI / (double)(nRings - 1) ;\r
+  dphi = -2.0 * M_PI / (double)(nSides - 1) ;\r
+  psi  = 0.0;\r
+\r
+  for( j=0; j<nRings; j++ )\r
+  {\r
+    cpsi = cos ( psi ) ;\r
+    spsi = sin ( psi ) ;\r
+    phi = 0.0;\r
+\r
+    for( i=0; i<nSides; i++ )\r
+    {\r
+      int offset = 3 * ( j * nSides + i ) ;\r
+      cphi = cos ( phi ) ;\r
+      sphi = sin ( phi ) ;\r
+      *(vertex + offset + 0) = cpsi * ( oradius + cphi * iradius ) ;\r
+      *(vertex + offset + 1) = spsi * ( oradius + cphi * iradius ) ;\r
+      *(vertex + offset + 2) =                    sphi * iradius  ;\r
+      *(normal + offset + 0) = cpsi * cphi ;\r
+      *(normal + offset + 1) = spsi * cphi ;\r
+      *(normal + offset + 2) =        sphi ;\r
+      phi += dphi;\r
+    }\r
+\r
+    psi += dpsi;\r
+  }\r
+\r
+    glBegin( GL_QUADS );\r
+  for( i=0; i<nSides-1; i++ )\r
+  {\r
+    for( j=0; j<nRings-1; j++ )\r
+    {\r
+      int offset = 3 * ( j * nSides + i ) ;\r
+      glNormal3dv( normal + offset );\r
+      glVertex3dv( vertex + offset );\r
+      glNormal3dv( normal + offset + 3 );\r
+      glVertex3dv( vertex + offset + 3 );\r
+      glNormal3dv( normal + offset + 3 * nSides + 3 );\r
+      glVertex3dv( vertex + offset + 3 * nSides + 3 );\r
+      glNormal3dv( normal + offset + 3 * nSides );\r
+      glVertex3dv( vertex + offset + 3 * nSides );\r
+    }\r
+  }\r
+\r
+  glEnd();\r
+\r
+  free ( vertex ) ;\r
+  free ( normal ) ;\r
+  glPopMatrix();\r
+}\r
+\r
+/*\r
+ *\r
+ */\r
+void FGAPIENTRY glutWireDodecahedron( void )\r
+{\r
+  FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutWireDodecahedron" );\r
+\r
+  /* Magic Numbers:  It is possible to create a dodecahedron by attaching two pentagons to each face of\r
+   * of a cube.  The coordinates of the points are:\r
+   *   (+-x,0, z); (+-1, 1, 1); (0, z, x )\r
+   * where x = (-1 + sqrt(5))/2, z = (1 + sqrt(5))/2  or\r
+   *       x = 0.61803398875 and z = 1.61803398875.\r
+   */\r
+  glBegin ( GL_LINE_LOOP ) ;\r
+  glNormal3d (  0.0,  0.525731112119,  0.850650808354 ) ; glVertex3d (  0.0,  1.61803398875,  0.61803398875 ) ; glVertex3d ( -1.0,  1.0,  1.0 ) ; glVertex3d ( -0.61803398875, 0.0,  1.61803398875 ) ; glVertex3d (  0.61803398875, 0.0,  1.61803398875 ) ; glVertex3d (  1.0,  1.0,  1.0 ) ;\r
+  glEnd () ;\r
+  glBegin ( GL_LINE_LOOP ) ;\r
+  glNormal3d (  0.0,  0.525731112119, -0.850650808354 ) ; glVertex3d (  0.0,  1.61803398875, -0.61803398875 ) ; glVertex3d (  1.0,  1.0, -1.0 ) ; glVertex3d (  0.61803398875, 0.0, -1.61803398875 ) ; glVertex3d ( -0.61803398875, 0.0, -1.61803398875 ) ; glVertex3d ( -1.0,  1.0, -1.0 ) ;\r
+  glEnd () ;\r
+  glBegin ( GL_LINE_LOOP ) ;\r
+  glNormal3d (  0.0, -0.525731112119,  0.850650808354 ) ; glVertex3d (  0.0, -1.61803398875,  0.61803398875 ) ; glVertex3d (  1.0, -1.0,  1.0 ) ; glVertex3d (  0.61803398875, 0.0,  1.61803398875 ) ; glVertex3d ( -0.61803398875, 0.0,  1.61803398875 ) ; glVertex3d ( -1.0, -1.0,  1.0 ) ;\r
+  glEnd () ;\r
+  glBegin ( GL_LINE_LOOP ) ;\r
+  glNormal3d (  0.0, -0.525731112119, -0.850650808354 ) ; glVertex3d (  0.0, -1.61803398875, -0.61803398875 ) ; glVertex3d ( -1.0, -1.0, -1.0 ) ; glVertex3d ( -0.61803398875, 0.0, -1.61803398875 ) ; glVertex3d (  0.61803398875, 0.0, -1.61803398875 ) ; glVertex3d (  1.0, -1.0, -1.0 ) ;\r
+  glEnd () ;\r
+\r
+  glBegin ( GL_LINE_LOOP ) ;\r
+  glNormal3d (  0.850650808354,  0.0,  0.525731112119 ) ; glVertex3d (  0.61803398875,  0.0,  1.61803398875 ) ; glVertex3d (  1.0, -1.0,  1.0 ) ; glVertex3d (  1.61803398875, -0.61803398875, 0.0 ) ; glVertex3d (  1.61803398875,  0.61803398875, 0.0 ) ; glVertex3d (  1.0,  1.0,  1.0 ) ;\r
+  glEnd () ;\r
+  glBegin ( GL_LINE_LOOP ) ;\r
+  glNormal3d ( -0.850650808354,  0.0,  0.525731112119 ) ; glVertex3d ( -0.61803398875,  0.0,  1.61803398875 ) ; glVertex3d ( -1.0,  1.0,  1.0 ) ; glVertex3d ( -1.61803398875,  0.61803398875, 0.0 ) ; glVertex3d ( -1.61803398875, -0.61803398875, 0.0 ) ; glVertex3d ( -1.0, -1.0,  1.0 ) ;\r
+  glEnd () ;\r
+  glBegin ( GL_LINE_LOOP ) ;\r
+  glNormal3d (  0.850650808354,  0.0, -0.525731112119 ) ; glVertex3d (  0.61803398875,  0.0, -1.61803398875 ) ; glVertex3d (  1.0,  1.0, -1.0 ) ; glVertex3d (  1.61803398875,  0.61803398875, 0.0 ) ; glVertex3d (  1.61803398875, -0.61803398875, 0.0 ) ; glVertex3d (  1.0, -1.0, -1.0 ) ;\r
+  glEnd () ;\r
+  glBegin ( GL_LINE_LOOP ) ;\r
+  glNormal3d ( -0.850650808354,  0.0, -0.525731112119 ) ; glVertex3d ( -0.61803398875,  0.0, -1.61803398875 ) ; glVertex3d ( -1.0, -1.0, -1.0 ) ; glVertex3d ( -1.61803398875, -0.61803398875, 0.0 ) ; glVertex3d ( -1.61803398875,  0.61803398875, 0.0 ) ; glVertex3d ( -1.0,  1.0, -1.0 ) ;\r
+  glEnd () ;\r
+\r
+  glBegin ( GL_LINE_LOOP ) ;\r
+  glNormal3d (  0.525731112119,  0.850650808354,  0.0 ) ; glVertex3d (  1.61803398875,  0.61803398875,  0.0 ) ; glVertex3d (  1.0,  1.0, -1.0 ) ; glVertex3d ( 0.0,  1.61803398875, -0.61803398875 ) ; glVertex3d ( 0.0,  1.61803398875,  0.61803398875 ) ; glVertex3d (  1.0,  1.0,  1.0 ) ;\r
+  glEnd () ;\r
+  glBegin ( GL_LINE_LOOP ) ;\r
+  glNormal3d (  0.525731112119, -0.850650808354,  0.0 ) ; glVertex3d (  1.61803398875, -0.61803398875,  0.0 ) ; glVertex3d (  1.0, -1.0,  1.0 ) ; glVertex3d ( 0.0, -1.61803398875,  0.61803398875 ) ; glVertex3d ( 0.0, -1.61803398875, -0.61803398875 ) ; glVertex3d (  1.0, -1.0, -1.0 ) ;\r
+  glEnd () ;\r
+  glBegin ( GL_LINE_LOOP ) ;\r
+  glNormal3d ( -0.525731112119,  0.850650808354,  0.0 ) ; glVertex3d ( -1.61803398875,  0.61803398875,  0.0 ) ; glVertex3d ( -1.0,  1.0,  1.0 ) ; glVertex3d ( 0.0,  1.61803398875,  0.61803398875 ) ; glVertex3d ( 0.0,  1.61803398875, -0.61803398875 ) ; glVertex3d ( -1.0,  1.0, -1.0 ) ;\r
+  glEnd () ;\r
+  glBegin ( GL_LINE_LOOP ) ;\r
+  glNormal3d ( -0.525731112119, -0.850650808354,  0.0 ) ; glVertex3d ( -1.61803398875, -0.61803398875,  0.0 ) ; glVertex3d ( -1.0, -1.0, -1.0 ) ; glVertex3d ( 0.0, -1.61803398875, -0.61803398875 ) ; glVertex3d ( 0.0, -1.61803398875,  0.61803398875 ) ; glVertex3d ( -1.0, -1.0,  1.0 ) ;\r
+  glEnd () ;\r
+}\r
+\r
+/*\r
+ *\r
+ */\r
+void FGAPIENTRY glutSolidDodecahedron( void )\r
+{\r
+  FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSolidDodecahedron" );\r
+\r
+  /* Magic Numbers:  It is possible to create a dodecahedron by attaching two pentagons to each face of\r
+   * of a cube.  The coordinates of the points are:\r
+   *   (+-x,0, z); (+-1, 1, 1); (0, z, x )\r
+   * where x = (-1 + sqrt(5))/2, z = (1 + sqrt(5))/2 or\r
+   *       x = 0.61803398875 and z = 1.61803398875.\r
+   */\r
+  glBegin ( GL_POLYGON ) ;\r
+  glNormal3d (  0.0,  0.525731112119,  0.850650808354 ) ; glVertex3d (  0.0,  1.61803398875,  0.61803398875 ) ; glVertex3d ( -1.0,  1.0,  1.0 ) ; glVertex3d ( -0.61803398875, 0.0,  1.61803398875 ) ; glVertex3d (  0.61803398875, 0.0,  1.61803398875 ) ; glVertex3d (  1.0,  1.0,  1.0 ) ;\r
+  glEnd () ;\r
+  glBegin ( GL_POLYGON ) ;\r
+  glNormal3d (  0.0,  0.525731112119, -0.850650808354 ) ; glVertex3d (  0.0,  1.61803398875, -0.61803398875 ) ; glVertex3d (  1.0,  1.0, -1.0 ) ; glVertex3d (  0.61803398875, 0.0, -1.61803398875 ) ; glVertex3d ( -0.61803398875, 0.0, -1.61803398875 ) ; glVertex3d ( -1.0,  1.0, -1.0 ) ;\r
+  glEnd () ;\r
+  glBegin ( GL_POLYGON ) ;\r
+  glNormal3d (  0.0, -0.525731112119,  0.850650808354 ) ; glVertex3d (  0.0, -1.61803398875,  0.61803398875 ) ; glVertex3d (  1.0, -1.0,  1.0 ) ; glVertex3d (  0.61803398875, 0.0,  1.61803398875 ) ; glVertex3d ( -0.61803398875, 0.0,  1.61803398875 ) ; glVertex3d ( -1.0, -1.0,  1.0 ) ;\r
+  glEnd () ;\r
+  glBegin ( GL_POLYGON ) ;\r
+  glNormal3d (  0.0, -0.525731112119, -0.850650808354 ) ; glVertex3d (  0.0, -1.61803398875, -0.61803398875 ) ; glVertex3d ( -1.0, -1.0, -1.0 ) ; glVertex3d ( -0.61803398875, 0.0, -1.61803398875 ) ; glVertex3d (  0.61803398875, 0.0, -1.61803398875 ) ; glVertex3d (  1.0, -1.0, -1.0 ) ;\r
+  glEnd () ;\r
+\r
+  glBegin ( GL_POLYGON ) ;\r
+  glNormal3d (  0.850650808354,  0.0,  0.525731112119 ) ; glVertex3d (  0.61803398875,  0.0,  1.61803398875 ) ; glVertex3d (  1.0, -1.0,  1.0 ) ; glVertex3d (  1.61803398875, -0.61803398875, 0.0 ) ; glVertex3d (  1.61803398875,  0.61803398875, 0.0 ) ; glVertex3d (  1.0,  1.0,  1.0 ) ;\r
+  glEnd () ;\r
+  glBegin ( GL_POLYGON ) ;\r
+  glNormal3d ( -0.850650808354,  0.0,  0.525731112119 ) ; glVertex3d ( -0.61803398875,  0.0,  1.61803398875 ) ; glVertex3d ( -1.0,  1.0,  1.0 ) ; glVertex3d ( -1.61803398875,  0.61803398875, 0.0 ) ; glVertex3d ( -1.61803398875, -0.61803398875, 0.0 ) ; glVertex3d ( -1.0, -1.0,  1.0 ) ;\r
+  glEnd () ;\r
+  glBegin ( GL_POLYGON ) ;\r
+  glNormal3d (  0.850650808354,  0.0, -0.525731112119 ) ; glVertex3d (  0.61803398875,  0.0, -1.61803398875 ) ; glVertex3d (  1.0,  1.0, -1.0 ) ; glVertex3d (  1.61803398875,  0.61803398875, 0.0 ) ; glVertex3d (  1.61803398875, -0.61803398875, 0.0 ) ; glVertex3d (  1.0, -1.0, -1.0 ) ;\r
+  glEnd () ;\r
+  glBegin ( GL_POLYGON ) ;\r
+  glNormal3d ( -0.850650808354,  0.0, -0.525731112119 ) ; glVertex3d ( -0.61803398875,  0.0, -1.61803398875 ) ; glVertex3d ( -1.0, -1.0, -1.0 ) ; glVertex3d ( -1.61803398875, -0.61803398875, 0.0 ) ; glVertex3d ( -1.61803398875,  0.61803398875, 0.0 ) ; glVertex3d ( -1.0,  1.0, -1.0 ) ;\r
+  glEnd () ;\r
+\r
+  glBegin ( GL_POLYGON ) ;\r
+  glNormal3d (  0.525731112119,  0.850650808354,  0.0 ) ; glVertex3d (  1.61803398875,  0.61803398875,  0.0 ) ; glVertex3d (  1.0,  1.0, -1.0 ) ; glVertex3d ( 0.0,  1.61803398875, -0.61803398875 ) ; glVertex3d ( 0.0,  1.61803398875,  0.61803398875 ) ; glVertex3d (  1.0,  1.0,  1.0 ) ;\r
+  glEnd () ;\r
+  glBegin ( GL_POLYGON ) ;\r
+  glNormal3d (  0.525731112119, -0.850650808354,  0.0 ) ; glVertex3d (  1.61803398875, -0.61803398875,  0.0 ) ; glVertex3d (  1.0, -1.0,  1.0 ) ; glVertex3d ( 0.0, -1.61803398875,  0.61803398875 ) ; glVertex3d ( 0.0, -1.61803398875, -0.61803398875 ) ; glVertex3d (  1.0, -1.0, -1.0 ) ;\r
+  glEnd () ;\r
+  glBegin ( GL_POLYGON ) ;\r
+  glNormal3d ( -0.525731112119,  0.850650808354,  0.0 ) ; glVertex3d ( -1.61803398875,  0.61803398875,  0.0 ) ; glVertex3d ( -1.0,  1.0,  1.0 ) ; glVertex3d ( 0.0,  1.61803398875,  0.61803398875 ) ; glVertex3d ( 0.0,  1.61803398875, -0.61803398875 ) ; glVertex3d ( -1.0,  1.0, -1.0 ) ;\r
+  glEnd () ;\r
+  glBegin ( GL_POLYGON ) ;\r
+  glNormal3d ( -0.525731112119, -0.850650808354,  0.0 ) ; glVertex3d ( -1.61803398875, -0.61803398875,  0.0 ) ; glVertex3d ( -1.0, -1.0, -1.0 ) ; glVertex3d ( 0.0, -1.61803398875, -0.61803398875 ) ; glVertex3d ( 0.0, -1.61803398875,  0.61803398875 ) ; glVertex3d ( -1.0, -1.0,  1.0 ) ;\r
+  glEnd () ;\r
+}\r
+\r
+/*\r
+ *\r
+ */\r
+void FGAPIENTRY glutWireOctahedron( void )\r
+{\r
+  FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutWireOctahedron" );\r
+\r
+#define RADIUS    1.0f\r
+  glBegin( GL_LINE_LOOP );\r
+    glNormal3d( 0.577350269189, 0.577350269189, 0.577350269189); glVertex3d( RADIUS, 0.0, 0.0 ); glVertex3d( 0.0, RADIUS, 0.0 ); glVertex3d( 0.0, 0.0, RADIUS );\r
+    glNormal3d( 0.577350269189, 0.577350269189,-0.577350269189); glVertex3d( RADIUS, 0.0, 0.0 ); glVertex3d( 0.0, 0.0,-RADIUS ); glVertex3d( 0.0, RADIUS, 0.0 );\r
+    glNormal3d( 0.577350269189,-0.577350269189, 0.577350269189); glVertex3d( RADIUS, 0.0, 0.0 ); glVertex3d( 0.0, 0.0, RADIUS ); glVertex3d( 0.0,-RADIUS, 0.0 );\r
+    glNormal3d( 0.577350269189,-0.577350269189,-0.577350269189); glVertex3d( RADIUS, 0.0, 0.0 ); glVertex3d( 0.0,-RADIUS, 0.0 ); glVertex3d( 0.0, 0.0,-RADIUS );\r
+    glNormal3d(-0.577350269189, 0.577350269189, 0.577350269189); glVertex3d(-RADIUS, 0.0, 0.0 ); glVertex3d( 0.0, 0.0, RADIUS ); glVertex3d( 0.0, RADIUS, 0.0 );\r
+    glNormal3d(-0.577350269189, 0.577350269189,-0.577350269189); glVertex3d(-RADIUS, 0.0, 0.0 ); glVertex3d( 0.0, RADIUS, 0.0 ); glVertex3d( 0.0, 0.0,-RADIUS );\r
+    glNormal3d(-0.577350269189,-0.577350269189, 0.577350269189); glVertex3d(-RADIUS, 0.0, 0.0 ); glVertex3d( 0.0,-RADIUS, 0.0 ); glVertex3d( 0.0, 0.0, RADIUS );\r
+    glNormal3d(-0.577350269189,-0.577350269189,-0.577350269189); glVertex3d(-RADIUS, 0.0, 0.0 ); glVertex3d( 0.0, 0.0,-RADIUS ); glVertex3d( 0.0,-RADIUS, 0.0 );\r
+  glEnd();\r
+#undef RADIUS\r
+}\r
+\r
+/*\r
+ *\r
+ */\r
+void FGAPIENTRY glutSolidOctahedron( void )\r
+{\r
+  FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSolidOctahedron" );\r
+\r
+#define RADIUS    1.0f\r
+  glBegin( GL_TRIANGLES );\r
+    glNormal3d( 0.577350269189, 0.577350269189, 0.577350269189); glVertex3d( RADIUS, 0.0, 0.0 ); glVertex3d( 0.0, RADIUS, 0.0 ); glVertex3d( 0.0, 0.0, RADIUS );\r
+    glNormal3d( 0.577350269189, 0.577350269189,-0.577350269189); glVertex3d( RADIUS, 0.0, 0.0 ); glVertex3d( 0.0, 0.0,-RADIUS ); glVertex3d( 0.0, RADIUS, 0.0 );\r
+    glNormal3d( 0.577350269189,-0.577350269189, 0.577350269189); glVertex3d( RADIUS, 0.0, 0.0 ); glVertex3d( 0.0, 0.0, RADIUS ); glVertex3d( 0.0,-RADIUS, 0.0 );\r
+    glNormal3d( 0.577350269189,-0.577350269189,-0.577350269189); glVertex3d( RADIUS, 0.0, 0.0 ); glVertex3d( 0.0,-RADIUS, 0.0 ); glVertex3d( 0.0, 0.0,-RADIUS );\r
+    glNormal3d(-0.577350269189, 0.577350269189, 0.577350269189); glVertex3d(-RADIUS, 0.0, 0.0 ); glVertex3d( 0.0, 0.0, RADIUS ); glVertex3d( 0.0, RADIUS, 0.0 );\r
+    glNormal3d(-0.577350269189, 0.577350269189,-0.577350269189); glVertex3d(-RADIUS, 0.0, 0.0 ); glVertex3d( 0.0, RADIUS, 0.0 ); glVertex3d( 0.0, 0.0,-RADIUS );\r
+    glNormal3d(-0.577350269189,-0.577350269189, 0.577350269189); glVertex3d(-RADIUS, 0.0, 0.0 ); glVertex3d( 0.0,-RADIUS, 0.0 ); glVertex3d( 0.0, 0.0, RADIUS );\r
+    glNormal3d(-0.577350269189,-0.577350269189,-0.577350269189); glVertex3d(-RADIUS, 0.0, 0.0 ); glVertex3d( 0.0, 0.0,-RADIUS ); glVertex3d( 0.0,-RADIUS, 0.0 );\r
+  glEnd();\r
+#undef RADIUS\r
+}\r
+\r
+/* Magic Numbers:  r0 = ( 1, 0, 0 )\r
+ *                 r1 = ( -1/3, 2 sqrt(2) / 3, 0 )\r
+ *                 r2 = ( -1/3, -sqrt(2) / 3, sqrt(6) / 3 )\r
+ *                 r3 = ( -1/3, -sqrt(2) / 3, -sqrt(6) / 3 )\r
+ * |r0| = |r1| = |r2| = |r3| = 1\r
+ * Distance between any two points is 2 sqrt(6) / 3\r
+ *\r
+ * Normals:  The unit normals are simply the negative of the coordinates of the point not on the surface.\r
+ */\r
+\r
+#define NUM_TETR_FACES     4\r
+\r
+static GLdouble tet_r[4][3] = { {             1.0,             0.0,             0.0 },\r
+                                { -0.333333333333,  0.942809041582,             0.0 },\r
+                                { -0.333333333333, -0.471404520791,  0.816496580928 },\r
+                                { -0.333333333333, -0.471404520791, -0.816496580928 } } ;\r
+\r
+static GLint tet_i[4][3] =  /* Vertex indices */\r
+{\r
+  { 1, 3, 2 }, { 0, 2, 3 }, { 0, 3, 1 }, { 0, 1, 2 }\r
+} ;\r
+\r
+/*\r
+ *\r
+ */\r
+void FGAPIENTRY glutWireTetrahedron( void )\r
+{\r
+  FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutWireTetrahedron" );\r
+\r
+  glBegin( GL_LINE_LOOP ) ;\r
+    glNormal3d ( -tet_r[0][0], -tet_r[0][1], -tet_r[0][2] ) ; glVertex3dv ( tet_r[1] ) ; glVertex3dv ( tet_r[3] ) ; glVertex3dv ( tet_r[2] ) ;\r
+    glNormal3d ( -tet_r[1][0], -tet_r[1][1], -tet_r[1][2] ) ; glVertex3dv ( tet_r[0] ) ; glVertex3dv ( tet_r[2] ) ; glVertex3dv ( tet_r[3] ) ;\r
+    glNormal3d ( -tet_r[2][0], -tet_r[2][1], -tet_r[2][2] ) ; glVertex3dv ( tet_r[0] ) ; glVertex3dv ( tet_r[3] ) ; glVertex3dv ( tet_r[1] ) ;\r
+    glNormal3d ( -tet_r[3][0], -tet_r[3][1], -tet_r[3][2] ) ; glVertex3dv ( tet_r[0] ) ; glVertex3dv ( tet_r[1] ) ; glVertex3dv ( tet_r[2] ) ;\r
+  glEnd() ;\r
+}\r
+\r
+/*\r
+ *\r
+ */\r
+void FGAPIENTRY glutSolidTetrahedron( void )\r
+{\r
+  FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSolidTetrahedron" );\r
+\r
+  glBegin( GL_TRIANGLES ) ;\r
+    glNormal3d ( -tet_r[0][0], -tet_r[0][1], -tet_r[0][2] ) ; glVertex3dv ( tet_r[1] ) ; glVertex3dv ( tet_r[3] ) ; glVertex3dv ( tet_r[2] ) ;\r
+    glNormal3d ( -tet_r[1][0], -tet_r[1][1], -tet_r[1][2] ) ; glVertex3dv ( tet_r[0] ) ; glVertex3dv ( tet_r[2] ) ; glVertex3dv ( tet_r[3] ) ;\r
+    glNormal3d ( -tet_r[2][0], -tet_r[2][1], -tet_r[2][2] ) ; glVertex3dv ( tet_r[0] ) ; glVertex3dv ( tet_r[3] ) ; glVertex3dv ( tet_r[1] ) ;\r
+    glNormal3d ( -tet_r[3][0], -tet_r[3][1], -tet_r[3][2] ) ; glVertex3dv ( tet_r[0] ) ; glVertex3dv ( tet_r[1] ) ; glVertex3dv ( tet_r[2] ) ;\r
+  glEnd() ;\r
+}\r
+\r
+/*\r
+ *\r
+ */\r
+static double icos_r[12][3] = {\r
+    {  1.0,             0.0,             0.0            },\r
+    {  0.447213595500,  0.894427191000,  0.0            },\r
+    {  0.447213595500,  0.276393202252,  0.850650808354 },\r
+    {  0.447213595500, -0.723606797748,  0.525731112119 },\r
+    {  0.447213595500, -0.723606797748, -0.525731112119 },\r
+    {  0.447213595500,  0.276393202252, -0.850650808354 },\r
+    { -0.447213595500, -0.894427191000,  0.0 },\r
+    { -0.447213595500, -0.276393202252,  0.850650808354 },\r
+    { -0.447213595500,  0.723606797748,  0.525731112119 },\r
+    { -0.447213595500,  0.723606797748, -0.525731112119 },\r
+    { -0.447213595500, -0.276393202252, -0.850650808354 },\r
+    { -1.0,             0.0,             0.0            }\r
+};\r
+\r
+static int icos_v [20][3] = {\r
+    {  0,  1,  2 },\r
+    {  0,  2,  3 },\r
+    {  0,  3,  4 },\r
+    {  0,  4,  5 },\r
+    {  0,  5,  1 },\r
+    {  1,  8,  2 },\r
+    {  2,  7,  3 },\r
+    {  3,  6,  4 },\r
+    {  4, 10,  5 },\r
+    {  5,  9,  1 },\r
+    {  1,  9,  8 },\r
+    {  2,  8,  7 },\r
+    {  3,  7,  6 },\r
+    {  4,  6, 10 },\r
+    {  5, 10,  9 },\r
+    { 11,  9, 10 },\r
+    { 11,  8,  9 },\r
+    { 11,  7,  8 },\r
+    { 11,  6,  7 },\r
+    { 11, 10,  6 }\r
+};\r
+\r
+void FGAPIENTRY glutWireIcosahedron( void )\r
+{\r
+  int i ;\r
+\r
+  FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutWireIcosahedron" );\r
+\r
+  for ( i = 0; i < 20; i++ )\r
+  {\r
+    double normal[3] ;\r
+    normal[0] = ( icos_r[icos_v[i][1]][1] - icos_r[icos_v[i][0]][1] ) * ( icos_r[icos_v[i][2]][2] - icos_r[icos_v[i][0]][2] ) - ( icos_r[icos_v[i][1]][2] - icos_r[icos_v[i][0]][2] ) * ( icos_r[icos_v[i][2]][1] - icos_r[icos_v[i][0]][1] ) ;\r
+    normal[1] = ( icos_r[icos_v[i][1]][2] - icos_r[icos_v[i][0]][2] ) * ( icos_r[icos_v[i][2]][0] - icos_r[icos_v[i][0]][0] ) - ( icos_r[icos_v[i][1]][0] - icos_r[icos_v[i][0]][0] ) * ( icos_r[icos_v[i][2]][2] - icos_r[icos_v[i][0]][2] ) ;\r
+    normal[2] = ( icos_r[icos_v[i][1]][0] - icos_r[icos_v[i][0]][0] ) * ( icos_r[icos_v[i][2]][1] - icos_r[icos_v[i][0]][1] ) - ( icos_r[icos_v[i][1]][1] - icos_r[icos_v[i][0]][1] ) * ( icos_r[icos_v[i][2]][0] - icos_r[icos_v[i][0]][0] ) ;\r
+    glBegin ( GL_LINE_LOOP ) ;\r
+      glNormal3dv ( normal ) ;\r
+      glVertex3dv ( icos_r[icos_v[i][0]] ) ;\r
+      glVertex3dv ( icos_r[icos_v[i][1]] ) ;\r
+      glVertex3dv ( icos_r[icos_v[i][2]] ) ;\r
+    glEnd () ;\r
+  }\r
+}\r
+\r
+/*\r
+ *\r
+ */\r
+void FGAPIENTRY glutSolidIcosahedron( void )\r
+{\r
+  int i ;\r
+\r
+  FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSolidIcosahedron" );\r
+\r
+  glBegin ( GL_TRIANGLES ) ;\r
+  for ( i = 0; i < 20; i++ )\r
+  {\r
+    double normal[3] ;\r
+    normal[0] = ( icos_r[icos_v[i][1]][1] - icos_r[icos_v[i][0]][1] ) * ( icos_r[icos_v[i][2]][2] - icos_r[icos_v[i][0]][2] ) - ( icos_r[icos_v[i][1]][2] - icos_r[icos_v[i][0]][2] ) * ( icos_r[icos_v[i][2]][1] - icos_r[icos_v[i][0]][1] ) ;\r
+    normal[1] = ( icos_r[icos_v[i][1]][2] - icos_r[icos_v[i][0]][2] ) * ( icos_r[icos_v[i][2]][0] - icos_r[icos_v[i][0]][0] ) - ( icos_r[icos_v[i][1]][0] - icos_r[icos_v[i][0]][0] ) * ( icos_r[icos_v[i][2]][2] - icos_r[icos_v[i][0]][2] ) ;\r
+    normal[2] = ( icos_r[icos_v[i][1]][0] - icos_r[icos_v[i][0]][0] ) * ( icos_r[icos_v[i][2]][1] - icos_r[icos_v[i][0]][1] ) - ( icos_r[icos_v[i][1]][1] - icos_r[icos_v[i][0]][1] ) * ( icos_r[icos_v[i][2]][0] - icos_r[icos_v[i][0]][0] ) ;\r
+      glNormal3dv ( normal ) ;\r
+      glVertex3dv ( icos_r[icos_v[i][0]] ) ;\r
+      glVertex3dv ( icos_r[icos_v[i][1]] ) ;\r
+      glVertex3dv ( icos_r[icos_v[i][2]] ) ;\r
+  }\r
+\r
+  glEnd () ;\r
+}\r
+\r
+/*\r
+ *\r
+ */\r
+static double rdod_r[14][3] = {\r
+    {  0.0,             0.0,             1.0 },\r
+    {  0.707106781187,  0.000000000000,  0.5 },\r
+    {  0.000000000000,  0.707106781187,  0.5 },\r
+    { -0.707106781187,  0.000000000000,  0.5 },\r
+    {  0.000000000000, -0.707106781187,  0.5 },\r
+    {  0.707106781187,  0.707106781187,  0.0 },\r
+    { -0.707106781187,  0.707106781187,  0.0 },\r
+    { -0.707106781187, -0.707106781187,  0.0 },\r
+    {  0.707106781187, -0.707106781187,  0.0 },\r
+    {  0.707106781187,  0.000000000000, -0.5 },\r
+    {  0.000000000000,  0.707106781187, -0.5 },\r
+    { -0.707106781187,  0.000000000000, -0.5 },\r
+    {  0.000000000000, -0.707106781187, -0.5 },\r
+    {  0.0,             0.0,            -1.0 }\r
+} ;\r
+\r
+static int rdod_v [12][4] = {\r
+    { 0,  1,  5,  2 },\r
+    { 0,  2,  6,  3 },\r
+    { 0,  3,  7,  4 },\r
+    { 0,  4,  8,  1 },\r
+    { 5, 10,  6,  2 },\r
+    { 6, 11,  7,  3 },\r
+    { 7, 12,  8,  4 },\r
+    { 8,  9,  5,  1 },\r
+    { 5,  9, 13, 10 },\r
+    { 6, 10, 13, 11 },\r
+    { 7, 11, 13, 12 },\r
+    { 8, 12, 13,  9 }\r
+};\r
+\r
+static double rdod_n[12][3] = {\r
+    {  0.353553390594,  0.353553390594,  0.5 },\r
+    { -0.353553390594,  0.353553390594,  0.5 },\r
+    { -0.353553390594, -0.353553390594,  0.5 },\r
+    {  0.353553390594, -0.353553390594,  0.5 },\r
+    {  0.000000000000,  1.000000000000,  0.0 },\r
+    { -1.000000000000,  0.000000000000,  0.0 },\r
+    {  0.000000000000, -1.000000000000,  0.0 },\r
+    {  1.000000000000,  0.000000000000,  0.0 },\r
+    {  0.353553390594,  0.353553390594, -0.5 },\r
+    { -0.353553390594,  0.353553390594, -0.5 },\r
+    { -0.353553390594, -0.353553390594, -0.5 },\r
+    {  0.353553390594, -0.353553390594, -0.5 }\r
+};\r
+\r
+void FGAPIENTRY glutWireRhombicDodecahedron( void )\r
+{\r
+  int i ;\r
+\r
+  FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutWireRhombicDodecahedron" );\r
+\r
+  for ( i = 0; i < 12; i++ )\r
+  {\r
+    glBegin ( GL_LINE_LOOP ) ;\r
+      glNormal3dv ( rdod_n[i] ) ;\r
+      glVertex3dv ( rdod_r[rdod_v[i][0]] ) ;\r
+      glVertex3dv ( rdod_r[rdod_v[i][1]] ) ;\r
+      glVertex3dv ( rdod_r[rdod_v[i][2]] ) ;\r
+      glVertex3dv ( rdod_r[rdod_v[i][3]] ) ;\r
+    glEnd () ;\r
+  }\r
+}\r
+\r
+/*\r
+ *\r
+ */\r
+void FGAPIENTRY glutSolidRhombicDodecahedron( void )\r
+{\r
+  int i ;\r
+\r
+  FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSolidRhombicDodecahedron" );\r
+\r
+  glBegin ( GL_QUADS ) ;\r
+  for ( i = 0; i < 12; i++ )\r
+  {\r
+      glNormal3dv ( rdod_n[i] ) ;\r
+      glVertex3dv ( rdod_r[rdod_v[i][0]] ) ;\r
+      glVertex3dv ( rdod_r[rdod_v[i][1]] ) ;\r
+      glVertex3dv ( rdod_r[rdod_v[i][2]] ) ;\r
+      glVertex3dv ( rdod_r[rdod_v[i][3]] ) ;\r
+  }\r
+\r
+  glEnd () ;\r
+}\r
+\r
+void FGAPIENTRY glutWireSierpinskiSponge ( int num_levels, GLdouble offset[3], GLdouble scale )\r
+{\r
+  int i, j ;\r
+\r
+  FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutWireSierpinskiSponge" );\r
+\r
+  if ( num_levels == 0 )\r
+  {\r
+\r
+    for ( i = 0 ; i < NUM_TETR_FACES ; i++ )\r
+    {\r
+      glBegin ( GL_LINE_LOOP ) ;\r
+      glNormal3d ( -tet_r[i][0], -tet_r[i][1], -tet_r[i][2] ) ;\r
+      for ( j = 0; j < 3; j++ )\r
+      {\r
+        double x = offset[0] + scale * tet_r[tet_i[i][j]][0] ;\r
+        double y = offset[1] + scale * tet_r[tet_i[i][j]][1] ;\r
+        double z = offset[2] + scale * tet_r[tet_i[i][j]][2] ;\r
+        glVertex3d ( x, y, z ) ;\r
+      }\r
+\r
+      glEnd () ;\r
+    }\r
+  }\r
+  else if ( num_levels > 0 )\r
+  {\r
+    GLdouble local_offset[3] ;  /* Use a local variable to avoid buildup of roundoff errors */\r
+    num_levels -- ;\r
+    scale /= 2.0 ;\r
+    for ( i = 0 ; i < NUM_TETR_FACES ; i++ )\r
+    {\r
+      local_offset[0] = offset[0] + scale * tet_r[i][0] ;\r
+      local_offset[1] = offset[1] + scale * tet_r[i][1] ;\r
+      local_offset[2] = offset[2] + scale * tet_r[i][2] ;\r
+      glutWireSierpinskiSponge ( num_levels, local_offset, scale ) ;\r
+    }\r
+  }\r
+}\r
+\r
+void FGAPIENTRY glutSolidSierpinskiSponge ( int num_levels, GLdouble offset[3], GLdouble scale )\r
+{\r
+  int i, j ;\r
+\r
+  FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSolidSierpinskiSponge" );\r
+\r
+  if ( num_levels == 0 )\r
+  {\r
+    glBegin ( GL_TRIANGLES ) ;\r
+\r
+    for ( i = 0 ; i < NUM_TETR_FACES ; i++ )\r
+    {\r
+      glNormal3d ( -tet_r[i][0], -tet_r[i][1], -tet_r[i][2] ) ;\r
+      for ( j = 0; j < 3; j++ )\r
+      {\r
+        double x = offset[0] + scale * tet_r[tet_i[i][j]][0] ;\r
+        double y = offset[1] + scale * tet_r[tet_i[i][j]][1] ;\r
+        double z = offset[2] + scale * tet_r[tet_i[i][j]][2] ;\r
+        glVertex3d ( x, y, z ) ;\r
+      }\r
+    }\r
+\r
+    glEnd () ;\r
+  }\r
+  else if ( num_levels > 0 )\r
+  {\r
+    GLdouble local_offset[3] ;  /* Use a local variable to avoid buildup of roundoff errors */\r
+    num_levels -- ;\r
+    scale /= 2.0 ;\r
+    for ( i = 0 ; i < NUM_TETR_FACES ; i++ )\r
+    {\r
+      local_offset[0] = offset[0] + scale * tet_r[i][0] ;\r
+      local_offset[1] = offset[1] + scale * tet_r[i][1] ;\r
+      local_offset[2] = offset[2] + scale * tet_r[i][2] ;\r
+      glutSolidSierpinskiSponge ( num_levels, local_offset, scale ) ;\r
+    }\r
+  }\r
+}\r
+\r
+/*** END OF FILE ***/\r
diff --git a/src/Common/freeglut_glutfont_definitions.c b/src/Common/freeglut_glutfont_definitions.c
new file mode 100644 (file)
index 0000000..a1237bf
--- /dev/null
@@ -0,0 +1,108 @@
+/*\r
+ * freeglut_glutfont_definitions.c\r
+ *\r
+ * Bitmap and stroke fonts displaying.\r
+ *\r
+ * Copyright (c) 2003 Stephen J. Baker (whether he wants it or not).\r
+ * All Rights Reserved.\r
+ * Written by John F. Fay <fayjf@sourceforge.net>, who releases the\r
+ * copyright over to the "freeglut" project lead.\r
+ * Creation date: Mon July 21 2003\r
+ *\r
+ * Permission is hereby granted, free of charge, to any person obtaining a\r
+ * copy of this software and associated documentation files (the "Software"),\r
+ * to deal in the Software without restriction, including without limitation\r
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
+ * and/or sell copies of the Software, and to permit persons to whom the\r
+ * Software is furnished to do so, subject to the following conditions:\r
+ *\r
+ * The above copyright notice and this permission notice shall be included\r
+ * in all copies or substantial portions of the Software.\r
+ *\r
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL\r
+ * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
+ */\r
+\r
+/*\r
+ * This file is necessary for the *nix version of "freeglut" because the\r
+ * original GLUT defined its font variables in rather an unusual way.\r
+ * Publicly, in "glut.h", they were defined as "void *".  Privately,\r
+ * in one of the source code files, they were defined as pointers to a\r
+ * structure.  Most compilers and linkers are satisfied with the "void *"\r
+ * and don't go any farther, but some of them balked.  In particular,\r
+ * when compiling with "freeglut" and then trying to run using the GLUT\r
+ * ".so" library, some of them would give an error.  So we are having to\r
+ * create this file to define the variables as pointers to an unusual\r
+ * structure to match GLUT.\r
+ */\r
+\r
+/*\r
+ * freeglut_internal.h uses some GL types, but including the GL header portably\r
+ * is a bit tricky, so we include freeglut_std.h here, which contains the\r
+ * necessary machinery. But this poses another problem, caused by the ugly\r
+ * original defintion of the font constants in "classic" GLUT: They are defined\r
+ * as void* externally, so we move them temporarily out of the way by AN EXTREME\r
+ * CPP HACK.\r
+ */\r
+\r
+#define glutStrokeRoman glutStrokeRomanIGNOREME\r
+#define glutStrokeMonoRoman glutStrokeMonoRomanIGNOREME\r
+#define glutBitmap9By15 glutBitmap9By15IGNOREME\r
+#define glutBitmap8By13 glutBitmap8By13IGNOREME\r
+#define glutBitmapTimesRoman10 glutBitmapTimesRoman10IGNOREME\r
+#define glutBitmapTimesRoman24 glutBitmapTimesRoman24IGNOREME\r
+#define glutBitmapHelvetica10 glutBitmapHelvetica10IGNOREME\r
+#define glutBitmapHelvetica12 glutBitmapHelvetica12IGNOREME\r
+#define glutBitmapHelvetica18 glutBitmapHelvetica18IGNOREME\r
+\r
+#include <GL/freeglut_std.h>\r
+\r
+#undef glutStrokeRoman\r
+#undef glutStrokeMonoRoman\r
+#undef glutBitmap9By15\r
+#undef glutBitmap8By13\r
+#undef glutBitmapTimesRoman10\r
+#undef glutBitmapTimesRoman24\r
+#undef glutBitmapHelvetica10\r
+#undef glutBitmapHelvetica12\r
+#undef glutBitmapHelvetica18\r
+\r
+#include "freeglut_internal.h"\r
+\r
+#if TARGET_HOST_POSIX_X11\r
+\r
+struct freeglutStrokeFont\r
+{\r
+  const char *name ;\r
+  int num_chars ;\r
+  void *ch ;\r
+  float top ;\r
+  float bottom ;\r
+};\r
+\r
+struct freeglutBitmapFont\r
+{\r
+  const char *name ;\r
+  const int num_chars ;\r
+  const int first ;\r
+  const void *ch ;\r
+};\r
+\r
+\r
+struct freeglutStrokeFont glutStrokeRoman ;\r
+struct freeglutStrokeFont glutStrokeMonoRoman ;\r
+\r
+struct freeglutBitmapFont glutBitmap9By15 ;\r
+struct freeglutBitmapFont glutBitmap8By13 ;\r
+struct freeglutBitmapFont glutBitmapTimesRoman10 ;\r
+struct freeglutBitmapFont glutBitmapTimesRoman24 ;\r
+struct freeglutBitmapFont glutBitmapHelvetica10 ;\r
+struct freeglutBitmapFont glutBitmapHelvetica12 ;\r
+struct freeglutBitmapFont glutBitmapHelvetica18 ;\r
+\r
+#endif\r
+\r
diff --git a/src/Common/freeglut_init.c b/src/Common/freeglut_init.c
new file mode 100644 (file)
index 0000000..e295a6a
--- /dev/null
@@ -0,0 +1,1183 @@
+/*\r
+ * freeglut_init.c\r
+ *\r
+ * Various freeglut initialization functions.\r
+ *\r
+ * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.\r
+ * Written by Pawel W. Olszta, <olszta@sourceforge.net>\r
+ * Creation date: Thu Dec 2 1999\r
+ *\r
+ * Permission is hereby granted, free of charge, to any person obtaining a\r
+ * copy of this software and associated documentation files (the "Software"),\r
+ * to deal in the Software without restriction, including without limitation\r
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
+ * and/or sell copies of the Software, and to permit persons to whom the\r
+ * Software is furnished to do so, subject to the following conditions:\r
+ *\r
+ * The above copyright notice and this permission notice shall be included\r
+ * in all copies or substantial portions of the Software.\r
+ *\r
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL\r
+ * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
+ */\r
+\r
+#define FREEGLUT_BUILDING_LIB\r
+#include <GL/freeglut.h>\r
+#include "freeglut_internal.h"\r
+\r
+#if TARGET_HOST_POSIX_X11\r
+#include <limits.h>  /* LONG_MAX */\r
+#endif\r
+\r
+/*\r
+ * TODO BEFORE THE STABLE RELEASE:\r
+ *\r
+ *  fgDeinitialize()        -- Win32's OK, X11 needs the OS-specific\r
+ *                             deinitialization done\r
+ *  glutInitDisplayString() -- display mode string parsing\r
+ *\r
+ * Wouldn't it be cool to use gettext() for error messages? I just love\r
+ * bash saying  "nie znaleziono pliku" instead of "file not found" :)\r
+ * Is gettext easily portable?\r
+ */\r
+\r
+/* -- GLOBAL VARIABLES ----------------------------------------------------- */\r
+\r
+/*\r
+ * A structure pointed by g_pDisplay holds all information\r
+ * regarding the display, screen, root window etc.\r
+ */\r
+SFG_Display fgDisplay;\r
+\r
+/*\r
+ * The settings for the current freeglut session\r
+ */\r
+SFG_State fgState = { { -1, -1, GL_FALSE },  /* Position */\r
+                      { 300, 300, GL_TRUE }, /* Size */\r
+                      GLUT_RGBA | GLUT_SINGLE | GLUT_DEPTH,  /* DisplayMode */\r
+                      GL_FALSE,              /* Initialised */\r
+                      GLUT_TRY_DIRECT_CONTEXT,  /* DirectContext */\r
+                      GL_FALSE,              /* ForceIconic */\r
+                      GL_FALSE,              /* UseCurrentContext */\r
+                      GL_FALSE,              /* GLDebugSwitch */\r
+                      GL_FALSE,              /* XSyncSwitch */\r
+                      GLUT_KEY_REPEAT_ON,    /* KeyRepeat */\r
+                      INVALID_MODIFIERS,     /* Modifiers */\r
+                      0,                     /* FPSInterval */\r
+                      0,                     /* SwapCount */\r
+                      0,                     /* SwapTime */\r
+                      0,                     /* Time */\r
+                      { NULL, NULL },         /* Timers */\r
+                      { NULL, NULL },         /* FreeTimers */\r
+                      NULL,                   /* IdleCallback */\r
+                      0,                      /* ActiveMenus */\r
+                      NULL,                   /* MenuStateCallback */\r
+                      NULL,                   /* MenuStatusCallback */\r
+                      { 640, 480, GL_TRUE },  /* GameModeSize */\r
+                      16,                     /* GameModeDepth */\r
+                      72,                     /* GameModeRefresh */\r
+                      GLUT_ACTION_EXIT,       /* ActionOnWindowClose */\r
+                      GLUT_EXEC_STATE_INIT,   /* ExecState */\r
+                      NULL,                   /* ProgramName */\r
+                      GL_FALSE,               /* JoysticksInitialised */\r
+                      0,                      /* NumActiveJoysticks */\r
+                      GL_FALSE,               /* InputDevsInitialised */\r
+                      0,                      /* MouseWheelTicks */\r
+                      1,                      /* AuxiliaryBufferNumber */\r
+                      4,                      /* SampleNumber */\r
+                      1,                      /* MajorVersion */\r
+                      0,                      /* MinorVersion */\r
+                      0,                      /* ContextFlags */\r
+                      0,                      /* ContextProfile */\r
+                      NULL,                   /* ErrorFunc */\r
+                      NULL                    /* WarningFunc */\r
+};\r
+\r
+\r
+/* -- PRIVATE FUNCTIONS ---------------------------------------------------- */\r
+\r
+#if TARGET_HOST_POSIX_X11\r
+\r
+/* Return the atom associated with "name". */\r
+static Atom fghGetAtom(const char * name)\r
+{\r
+  return XInternAtom(fgDisplay.Display, name, False);\r
+}\r
+\r
+/*\r
+ * Check if "property" is set on "window".  The property's values are returned\r
+ * through "data".  If the property is set and is of type "type", return the\r
+ * number of elements in "data".  Return zero otherwise.  In both cases, use\r
+ * "Xfree()" to free "data".\r
+ */\r
+static int fghGetWindowProperty(Window window,\r
+                               Atom property,\r
+                               Atom type,\r
+                               unsigned char ** data)\r
+{\r
+  /*\r
+   * Caller always has to use "Xfree()" to free "data", since\r
+   * "XGetWindowProperty() always allocates one extra byte in prop_return\r
+   * [i.e. "data"] (even if the property is zero length) [..]".\r
+   */\r
+\r
+  int status;  /*  Returned by "XGetWindowProperty". */\r
+\r
+  Atom          type_returned;\r
+  int           temp_format;             /*  Not used. */\r
+  unsigned long number_of_elements;\r
+  unsigned long temp_bytes_after;        /*  Not used. */\r
+\r
+\r
+  status = XGetWindowProperty(fgDisplay.Display,\r
+                             window,\r
+                             property,\r
+                             0,\r
+                             LONG_MAX,\r
+                             False,\r
+                             type,\r
+                             &type_returned,\r
+                             &temp_format,\r
+                             &number_of_elements,\r
+                             &temp_bytes_after,\r
+                             data);\r
+\r
+  FREEGLUT_INTERNAL_ERROR_EXIT(status == Success,\r
+                              "XGetWindowProperty failled",\r
+                              "fghGetWindowProperty");\r
+\r
+  if (type_returned != type)\r
+    {\r
+      number_of_elements = 0;\r
+    }\r
+\r
+  return number_of_elements;\r
+}\r
+\r
+/*  Check if the window manager is NET WM compliant. */\r
+static int fghNetWMSupported(void)\r
+{\r
+  Atom wm_check;\r
+  Window ** window_ptr_1;\r
+\r
+  int number_of_windows;\r
+  int net_wm_supported;\r
+\r
+\r
+  net_wm_supported = 0;\r
+\r
+  wm_check = fghGetAtom("_NET_SUPPORTING_WM_CHECK");\r
+  window_ptr_1 = malloc(sizeof(Window *));\r
+\r
+  /*\r
+   * Check that the window manager has set this property on the root window.\r
+   * The property must be the ID of a child window.\r
+   */\r
+  number_of_windows = fghGetWindowProperty(fgDisplay.RootWindow,\r
+                                           wm_check,\r
+                                           XA_WINDOW,\r
+                                           (unsigned char **) window_ptr_1);\r
+  if (number_of_windows == 1)\r
+    {\r
+      Window ** window_ptr_2;\r
+\r
+      window_ptr_2 = malloc(sizeof(Window *));\r
+\r
+      /* Check that the window has the same property set to the same value. */\r
+      number_of_windows = fghGetWindowProperty(**window_ptr_1,\r
+                                               wm_check,\r
+                                               XA_WINDOW,\r
+                                               (unsigned char **) window_ptr_2);\r
+      if ((number_of_windows == 1) && (**window_ptr_1 == **window_ptr_2))\r
+      {\r
+        /* NET WM compliant */\r
+        net_wm_supported = 1;\r
+      }\r
+\r
+      XFree(*window_ptr_2);\r
+      free(window_ptr_2);\r
+    }\r
+\r
+        XFree(*window_ptr_1);\r
+        free(window_ptr_1);\r
+\r
+        return net_wm_supported;\r
+}\r
+\r
+/*  Check if "hint" is present in "property" for "window". */\r
+int fgHintPresent(Window window, Atom property, Atom hint)\r
+{\r
+  Atom *atoms;\r
+  int number_of_atoms;\r
+  int supported;\r
+  int i;\r
+\r
+  supported = 0;\r
+\r
+  number_of_atoms = fghGetWindowProperty(window,\r
+                                        property,\r
+                                        XA_ATOM,\r
+                                        (unsigned char **) &atoms);\r
+  for (i = 0; i < number_of_atoms; i++)\r
+  {\r
+      if (atoms[i] == hint)\r
+      {\r
+          supported = 1;\r
+          break;\r
+      }\r
+  }\r
+\r
+  XFree(atoms);\r
+  return supported;\r
+}\r
+\r
+#endif /*  TARGET_HOST_POSIX_X11  */\r
+\r
+\r
+/*\r
+ * A call to this function should initialize all the display stuff...\r
+ */\r
+static void fghInitialize( const char* displayName )\r
+{\r
+#if TARGET_HOST_POSIX_X11\r
+    fgDisplay.Display = XOpenDisplay( displayName );\r
+\r
+    if( fgDisplay.Display == NULL )\r
+        fgError( "failed to open display '%s'", XDisplayName( displayName ) );\r
+\r
+    if( !glXQueryExtension( fgDisplay.Display, NULL, NULL ) )\r
+        fgError( "OpenGL GLX extension not supported by display '%s'",\r
+            XDisplayName( displayName ) );\r
+\r
+    fgDisplay.Screen = DefaultScreen( fgDisplay.Display );\r
+    fgDisplay.RootWindow = RootWindow(\r
+        fgDisplay.Display,\r
+        fgDisplay.Screen\r
+    );\r
+\r
+    fgDisplay.ScreenWidth  = DisplayWidth(\r
+        fgDisplay.Display,\r
+        fgDisplay.Screen\r
+    );\r
+    fgDisplay.ScreenHeight = DisplayHeight(\r
+        fgDisplay.Display,\r
+        fgDisplay.Screen\r
+    );\r
+\r
+    fgDisplay.ScreenWidthMM = DisplayWidthMM(\r
+        fgDisplay.Display,\r
+        fgDisplay.Screen\r
+    );\r
+    fgDisplay.ScreenHeightMM = DisplayHeightMM(\r
+        fgDisplay.Display,\r
+        fgDisplay.Screen\r
+    );\r
+\r
+    fgDisplay.Connection = ConnectionNumber( fgDisplay.Display );\r
+\r
+    /* Create the window deletion atom */\r
+    fgDisplay.DeleteWindow = fghGetAtom("WM_DELETE_WINDOW");\r
+\r
+    /* Create the state and full screen atoms */\r
+    fgDisplay.State           = None;\r
+    fgDisplay.StateFullScreen = None;\r
+\r
+    if (fghNetWMSupported())\r
+    {\r
+      const Atom supported = fghGetAtom("_NET_SUPPORTED");\r
+      const Atom state     = fghGetAtom("_NET_WM_STATE");\r
+      \r
+      /* Check if the state hint is supported. */\r
+      if (fgHintPresent(fgDisplay.RootWindow, supported, state))\r
+      {\r
+        const Atom full_screen = fghGetAtom("_NET_WM_STATE_FULLSCREEN");\r
+        \r
+        fgDisplay.State = state;\r
+        \r
+        /* Check if the window manager supports full screen. */\r
+        /**  Check "_NET_WM_ALLOWED_ACTIONS" on our window instead? **/\r
+        if (fgHintPresent(fgDisplay.RootWindow, supported, full_screen))\r
+        {\r
+          fgDisplay.StateFullScreen = full_screen;\r
+        }\r
+      }\r
+    }\r
+\r
+#elif TARGET_HOST_MS_WINDOWS\r
+\r
+    WNDCLASS wc;\r
+    ATOM atom;\r
+\r
+    /* What we need to do is to initialize the fgDisplay global structure here. */\r
+    fgDisplay.Instance = GetModuleHandle( NULL );\r
+    fgDisplay.DisplayName= displayName ? strdup(displayName) : 0 ;\r
+    atom = GetClassInfo( fgDisplay.Instance, _T("FREEGLUT"), &wc );\r
+\r
+    if( atom == 0 )\r
+    {\r
+        ZeroMemory( &wc, sizeof(WNDCLASS) );\r
+\r
+        /*\r
+         * Each of the windows should have its own device context, and we\r
+         * want redraw events during Vertical and Horizontal Resizes by\r
+         * the user.\r
+         *\r
+         * XXX Old code had "| CS_DBCLCKS" commented out.  Plans for the\r
+         * XXX future?  Dead-end idea?\r
+         */\r
+        wc.lpfnWndProc    = fgWindowProc;\r
+        wc.cbClsExtra     = 0;\r
+        wc.cbWndExtra     = 0;\r
+        wc.hInstance      = fgDisplay.Instance;\r
+        wc.hIcon          = LoadIcon( fgDisplay.Instance, _T("GLUT_ICON") );\r
+\r
+#if defined(_WIN32_WCE)\r
+        wc.style          = CS_HREDRAW | CS_VREDRAW;\r
+#else\r
+        wc.style          = CS_OWNDC | CS_HREDRAW | CS_VREDRAW;\r
+        if (!wc.hIcon)\r
+          wc.hIcon        = LoadIcon( NULL, IDI_WINLOGO );\r
+#endif\r
+\r
+        wc.hCursor        = LoadCursor( NULL, IDC_ARROW );\r
+        wc.hbrBackground  = NULL;\r
+        wc.lpszMenuName   = NULL;\r
+        wc.lpszClassName  = _T("FREEGLUT");\r
+\r
+        /* Register the window class */\r
+        atom = RegisterClass( &wc );\r
+        FREEGLUT_INTERNAL_ERROR_EXIT ( atom, "Window Class Not Registered", "fghInitialize" );\r
+    }\r
+\r
+    /* The screen dimensions can be obtained via GetSystemMetrics() calls */\r
+    fgDisplay.ScreenWidth  = GetSystemMetrics( SM_CXSCREEN );\r
+    fgDisplay.ScreenHeight = GetSystemMetrics( SM_CYSCREEN );\r
+\r
+    {\r
+        HWND desktop = GetDesktopWindow( );\r
+        HDC  context = GetDC( desktop );\r
+\r
+        fgDisplay.ScreenWidthMM  = GetDeviceCaps( context, HORZSIZE );\r
+        fgDisplay.ScreenHeightMM = GetDeviceCaps( context, VERTSIZE );\r
+\r
+        ReleaseDC( desktop, context );\r
+    }\r
+    /* If we have a DisplayName try to use it for metrics */\r
+    if( fgDisplay.DisplayName )\r
+    {\r
+        HDC context = CreateDC(fgDisplay.DisplayName,0,0,0);\r
+        if( context )\r
+        {\r
+           fgDisplay.ScreenWidth  = GetDeviceCaps( context, HORZRES );\r
+           fgDisplay.ScreenHeight = GetDeviceCaps( context, VERTRES );\r
+           fgDisplay.ScreenWidthMM  = GetDeviceCaps( context, HORZSIZE );\r
+           fgDisplay.ScreenHeightMM = GetDeviceCaps( context, VERTSIZE );\r
+           DeleteDC(context);\r
+        }\r
+        else\r
+           fgWarning("fghInitialize: "\r
+                     "CreateDC failed, Screen size info may be incorrect\n"\r
+          "This is quite likely caused by a bad '-display' parameter");\r
+      \r
+    }\r
+    /* Set the timer granularity to 1 ms */\r
+    timeBeginPeriod ( 1 );\r
+\r
+#endif\r
+\r
+    fgState.Initialised = GL_TRUE;\r
+\r
+    /* Avoid registering atexit callback on Win32 as it results in an access\r
+     * violation due to calling into a module which has been unloaded.\r
+     * Any cleanup isn't needed on Windows anyway, the OS takes care of it.c\r
+     * see: http://blogs.msdn.com/b/oldnewthing/archive/2012/01/05/10253268.aspx\r
+     */\r
+#if ( TARGET_HOST_MS_WINDOWS == 0 )\r
+    atexit(fgDeinitialize);\r
+#endif\r
+\r
+    /* InputDevice uses GlutTimerFunc(), so fgState.Initialised must be TRUE */\r
+    fgInitialiseInputDevices();\r
+}\r
+\r
+/*\r
+ * Perform the freeglut deinitialization...\r
+ */\r
+void fgDeinitialize( void )\r
+{\r
+    SFG_Timer *timer;\r
+\r
+    if( !fgState.Initialised )\r
+    {\r
+        return;\r
+    }\r
+\r
+       /* If we're in game mode, we want to leave game mode */\r
+    if( fgStructure.GameModeWindow ) {\r
+        glutLeaveGameMode();\r
+    }\r
+\r
+    /* If there was a menu created, destroy the rendering context */\r
+    if( fgStructure.MenuContext )\r
+    {\r
+#if TARGET_HOST_POSIX_X11\r
+        /* Note that the MVisualInfo is not owned by the MenuContext! */\r
+        glXDestroyContext( fgDisplay.Display, fgStructure.MenuContext->MContext );\r
+#endif\r
+        free( fgStructure.MenuContext );\r
+        fgStructure.MenuContext = NULL;\r
+    }\r
+\r
+    fgDestroyStructure( );\r
+\r
+    while( ( timer = fgState.Timers.First) )\r
+    {\r
+        fgListRemove( &fgState.Timers, &timer->Node );\r
+        free( timer );\r
+    }\r
+\r
+    while( ( timer = fgState.FreeTimers.First) )\r
+    {\r
+        fgListRemove( &fgState.FreeTimers, &timer->Node );\r
+        free( timer );\r
+    }\r
+\r
+#if !defined(_WIN32_WCE)\r
+    if ( fgState.JoysticksInitialised )\r
+        fgJoystickClose( );\r
+\r
+    if ( fgState.InputDevsInitialised )\r
+        fgInputDeviceClose( );\r
+#endif /* !defined(_WIN32_WCE) */\r
+    fgState.JoysticksInitialised = GL_FALSE;\r
+    fgState.InputDevsInitialised = GL_FALSE;\r
+\r
+       fgState.MouseWheelTicks = 0;\r
+\r
+    fgState.MajorVersion = 1;\r
+    fgState.MinorVersion = 0;\r
+    fgState.ContextFlags = 0;\r
+    fgState.ContextProfile = 0;\r
+\r
+    fgState.Initialised = GL_FALSE;\r
+\r
+    fgState.Position.X = -1;\r
+    fgState.Position.Y = -1;\r
+    fgState.Position.Use = GL_FALSE;\r
+\r
+    fgState.Size.X = 300;\r
+    fgState.Size.Y = 300;\r
+    fgState.Size.Use = GL_TRUE;\r
+\r
+    fgState.DisplayMode = GLUT_RGBA | GLUT_SINGLE | GLUT_DEPTH;\r
+\r
+    fgState.DirectContext  = GLUT_TRY_DIRECT_CONTEXT;\r
+    fgState.ForceIconic         = GL_FALSE;\r
+    fgState.UseCurrentContext   = GL_FALSE;\r
+    fgState.GLDebugSwitch       = GL_FALSE;\r
+    fgState.XSyncSwitch         = GL_FALSE;\r
+    fgState.ActionOnWindowClose = GLUT_ACTION_EXIT;\r
+    fgState.ExecState           = GLUT_EXEC_STATE_INIT;\r
+\r
+    fgState.KeyRepeat       = GLUT_KEY_REPEAT_ON;\r
+    fgState.Modifiers       = INVALID_MODIFIERS;\r
+\r
+    fgState.GameModeSize.X  = 640;\r
+    fgState.GameModeSize.Y  = 480;\r
+    fgState.GameModeDepth   =  16;\r
+    fgState.GameModeRefresh =  72;\r
+\r
+    fgListInit( &fgState.Timers );\r
+    fgListInit( &fgState.FreeTimers );\r
+\r
+    fgState.IdleCallback = NULL;\r
+    fgState.MenuStateCallback = ( FGCBMenuState )NULL;\r
+    fgState.MenuStatusCallback = ( FGCBMenuStatus )NULL;\r
+\r
+    fgState.SwapCount   = 0;\r
+    fgState.SwapTime    = 0;\r
+    fgState.FPSInterval = 0;\r
+\r
+    if( fgState.ProgramName )\r
+    {\r
+        free( fgState.ProgramName );\r
+        fgState.ProgramName = NULL;\r
+    }\r
+\r
+#if TARGET_HOST_POSIX_X11\r
+\r
+    /*\r
+     * Make sure all X-client data we have created will be destroyed on\r
+     * display closing\r
+     */\r
+    XSetCloseDownMode( fgDisplay.Display, DestroyAll );\r
+\r
+    /*\r
+     * Close the display connection, destroying all windows we have\r
+     * created so far\r
+     */\r
+    XCloseDisplay( fgDisplay.Display );\r
+\r
+#elif TARGET_HOST_MS_WINDOWS\r
+    if( fgDisplay.DisplayName )\r
+    {\r
+        free( fgDisplay.DisplayName );\r
+        fgDisplay.DisplayName = NULL;\r
+    }\r
+\r
+    /* Reset the timer granularity */\r
+    timeEndPeriod ( 1 );\r
+\r
+#endif\r
+\r
+    fgState.Initialised = GL_FALSE;\r
+}\r
+\r
+/*\r
+ * Everything inside the following #ifndef is copied from the X sources.\r
+ */\r
+\r
+#if TARGET_HOST_MS_WINDOWS\r
+\r
+/*\r
+\r
+Copyright 1985, 1986, 1987,1998  The Open Group\r
+\r
+Permission to use, copy, modify, distribute, and sell this software and its\r
+documentation for any purpose is hereby granted without fee, provided that\r
+the above copyright notice appear in all copies and that both that\r
+copyright notice and this permission notice appear in supporting\r
+documentation.\r
+\r
+The above copyright notice and this permission notice shall be included\r
+in all copies or substantial portions of the Software.\r
+\r
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\r
+IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR\r
+OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,\r
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\r
+OTHER DEALINGS IN THE SOFTWARE.\r
+\r
+Except as contained in this notice, the name of The Open Group shall\r
+not be used in advertising or otherwise to promote the sale, use or\r
+other dealings in this Software without prior written authorization\r
+from The Open Group.\r
+\r
+*/\r
+\r
+#define NoValue         0x0000\r
+#define XValue          0x0001\r
+#define YValue          0x0002\r
+#define WidthValue      0x0004\r
+#define HeightValue     0x0008\r
+#define AllValues       0x000F\r
+#define XNegative       0x0010\r
+#define YNegative       0x0020\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
+static int XParseGeometry (\r
+    const char *string,\r
+    int *x,\r
+    int *y,\r
+    unsigned int *width,    /* RETURN */\r
+    unsigned int *height)    /* RETURN */\r
+{\r
+    int mask = NoValue;\r
+    register char *strind;\r
+    unsigned int tempWidth = 0, tempHeight = 0;\r
+    int tempX = 0, tempY = 0;\r
+    char *nextCharacter;\r
+\r
+    if ( (string == NULL) || (*string == '\0'))\r
+      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
+        else\r
+        {\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
+            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
+#endif\r
+\r
+/* -- INTERFACE FUNCTIONS -------------------------------------------------- */\r
+\r
+/*\r
+ * Perform initialization. This usually happens on the program startup\r
+ * and restarting after glutMainLoop termination...\r
+ */\r
+void FGAPIENTRY glutInit( int* pargc, char** argv )\r
+{\r
+    char* displayName = NULL;\r
+    char* geometry = NULL;\r
+    int i, j, argc = *pargc;\r
+\r
+    if( fgState.Initialised )\r
+        fgError( "illegal glutInit() reinitialization attempt" );\r
+\r
+    if (pargc && *pargc && argv && *argv && **argv)\r
+    {\r
+        fgState.ProgramName = strdup (*argv);\r
+\r
+        if( !fgState.ProgramName )\r
+            fgError ("Could not allocate space for the program's name.");\r
+    }\r
+\r
+    fgCreateStructure( );\r
+\r
+    /* Get start time */\r
+    fgState.Time = fgSystemTime();\r
+\r
+    /* check if GLUT_FPS env var is set */\r
+#ifndef _WIN32_WCE\r
+    {\r
+        const char *fps = getenv( "GLUT_FPS" );\r
+\r
+        if( fps )\r
+        {\r
+            int interval;\r
+            sscanf( fps, "%d", &interval );\r
+\r
+            if( interval <= 0 )\r
+                fgState.FPSInterval = 5000;  /* 5000 millisecond default */\r
+            else\r
+                fgState.FPSInterval = interval;\r
+        }\r
+    }\r
+\r
+    displayName = getenv( "DISPLAY" );\r
+\r
+    for( i = 1; i < argc; i++ )\r
+    {\r
+        if( strcmp( argv[ i ], "-display" ) == 0 )\r
+        {\r
+            if( ++i >= argc )\r
+                fgError( "-display parameter must be followed by display name" );\r
+\r
+            displayName = argv[ i ];\r
+\r
+            argv[ i - 1 ] = NULL;\r
+            argv[ i     ] = NULL;\r
+            ( *pargc ) -= 2;\r
+        }\r
+        else if( strcmp( argv[ i ], "-geometry" ) == 0 )\r
+        {\r
+            if( ++i >= argc )\r
+                fgError( "-geometry parameter must be followed by window "\r
+                         "geometry settings" );\r
+\r
+            geometry = argv[ i ];\r
+\r
+            argv[ i - 1 ] = NULL;\r
+            argv[ i     ] = NULL;\r
+            ( *pargc ) -= 2;\r
+        }\r
+        else if( strcmp( argv[ i ], "-direct" ) == 0)\r
+        {\r
+            if( fgState.DirectContext == GLUT_FORCE_INDIRECT_CONTEXT )\r
+                fgError( "parameters ambiguity, -direct and -indirect "\r
+                    "cannot be both specified" );\r
+\r
+            fgState.DirectContext = GLUT_FORCE_DIRECT_CONTEXT;\r
+            argv[ i ] = NULL;\r
+            ( *pargc )--;\r
+        }\r
+        else if( strcmp( argv[ i ], "-indirect" ) == 0 )\r
+        {\r
+            if( fgState.DirectContext == GLUT_FORCE_DIRECT_CONTEXT )\r
+                fgError( "parameters ambiguity, -direct and -indirect "\r
+                    "cannot be both specified" );\r
+\r
+            fgState.DirectContext = GLUT_FORCE_INDIRECT_CONTEXT;\r
+            argv[ i ] = NULL;\r
+            (*pargc)--;\r
+        }\r
+        else if( strcmp( argv[ i ], "-iconic" ) == 0 )\r
+        {\r
+            fgState.ForceIconic = GL_TRUE;\r
+            argv[ i ] = NULL;\r
+            ( *pargc )--;\r
+        }\r
+        else if( strcmp( argv[ i ], "-gldebug" ) == 0 )\r
+        {\r
+            fgState.GLDebugSwitch = GL_TRUE;\r
+            argv[ i ] = NULL;\r
+            ( *pargc )--;\r
+        }\r
+        else if( strcmp( argv[ i ], "-sync" ) == 0 )\r
+        {\r
+            fgState.XSyncSwitch = GL_TRUE;\r
+            argv[ i ] = NULL;\r
+            ( *pargc )--;\r
+        }\r
+    }\r
+\r
+    /* Compact {argv}. */\r
+    for( i = j = 1; i < *pargc; i++, j++ )\r
+    {\r
+        /* Guaranteed to end because there are "*pargc" arguments left */\r
+        while ( argv[ j ] == NULL )\r
+            j++;\r
+        if ( i != j )\r
+            argv[ i ] = argv[ j ];\r
+    }\r
+\r
+#endif /* _WIN32_WCE */\r
+\r
+    /*\r
+     * Have the display created now. If there wasn't a "-display"\r
+     * in the program arguments, we will use the DISPLAY environment\r
+     * variable for opening the X display (see code above):\r
+     */\r
+    fghInitialize( displayName );\r
+\r
+    /*\r
+     * Geometry parsing deffered until here because we may need the screen\r
+     * size.\r
+     */\r
+\r
+    if (geometry )\r
+    {\r
+        unsigned int parsedWidth, parsedHeight;\r
+        int mask = XParseGeometry( geometry,\r
+                                   &fgState.Position.X, &fgState.Position.Y,\r
+                                   &parsedWidth, &parsedHeight );\r
+        /* TODO: Check for overflow? */\r
+        fgState.Size.X = parsedWidth;\r
+        fgState.Size.Y = parsedHeight;\r
+\r
+        if( (mask & (WidthValue|HeightValue)) == (WidthValue|HeightValue) )\r
+            fgState.Size.Use = GL_TRUE;\r
+\r
+        if( mask & XNegative )\r
+            fgState.Position.X += fgDisplay.ScreenWidth - fgState.Size.X;\r
+\r
+        if( mask & YNegative )\r
+            fgState.Position.Y += fgDisplay.ScreenHeight - fgState.Size.Y;\r
+\r
+        if( (mask & (XValue|YValue)) == (XValue|YValue) )\r
+            fgState.Position.Use = GL_TRUE;\r
+    }\r
+}\r
+\r
+#if TARGET_HOST_MS_WINDOWS\r
+void (__cdecl *__glutExitFunc)( int return_value ) = NULL;\r
+\r
+void FGAPIENTRY __glutInitWithExit( int *pargc, char **argv, void (__cdecl *exit_function)(int) )\r
+{\r
+  __glutExitFunc = exit_function;\r
+  glutInit(pargc, argv);\r
+}\r
+#endif\r
+\r
+/*\r
+ * Undoes all the "glutInit" stuff\r
+ */\r
+void FGAPIENTRY glutExit ( void )\r
+{\r
+  fgDeinitialize ();\r
+}\r
+\r
+/*\r
+ * Sets the default initial window position for new windows\r
+ */\r
+void FGAPIENTRY glutInitWindowPosition( int x, int y )\r
+{\r
+    fgState.Position.X = x;\r
+    fgState.Position.Y = y;\r
+\r
+    if( ( x >= 0 ) && ( y >= 0 ) )\r
+        fgState.Position.Use = GL_TRUE;\r
+    else\r
+        fgState.Position.Use = GL_FALSE;\r
+}\r
+\r
+/*\r
+ * Sets the default initial window size for new windows\r
+ */\r
+void FGAPIENTRY glutInitWindowSize( int width, int height )\r
+{\r
+    fgState.Size.X = width;\r
+    fgState.Size.Y = height;\r
+\r
+    if( ( width > 0 ) && ( height > 0 ) )\r
+        fgState.Size.Use = GL_TRUE;\r
+    else\r
+        fgState.Size.Use = GL_FALSE;\r
+}\r
+\r
+/*\r
+ * Sets the default display mode for all new windows\r
+ */\r
+void FGAPIENTRY glutInitDisplayMode( unsigned int displayMode )\r
+{\r
+    /* We will make use of this value when creating a new OpenGL context... */\r
+    fgState.DisplayMode = displayMode;\r
+}\r
+\r
+\r
+/* -- INIT DISPLAY STRING PARSING ------------------------------------------ */\r
+\r
+static char* Tokens[] =\r
+{\r
+    "alpha", "acca", "acc", "blue", "buffer", "conformant", "depth", "double",\r
+    "green", "index", "num", "red", "rgba", "rgb", "luminance", "stencil",\r
+    "single", "stereo", "samples", "slow", "win32pdf", "win32pfd", "xvisual",\r
+    "xstaticgray", "xgrayscale", "xstaticcolor", "xpseudocolor",\r
+    "xtruecolor", "xdirectcolor",\r
+    "xstaticgrey", "xgreyscale", "xstaticcolour", "xpseudocolour",\r
+    "xtruecolour", "xdirectcolour", "borderless", "aux"\r
+};\r
+#define NUM_TOKENS             (sizeof(Tokens) / sizeof(*Tokens))\r
+\r
+void FGAPIENTRY glutInitDisplayString( const char* displayMode )\r
+{\r
+    int glut_state_flag = 0 ;\r
+    /*\r
+     * Unpack a lot of options from a character string.  The options are\r
+     * delimited by blanks or tabs.\r
+     */\r
+    char *token ;\r
+    size_t len = strlen ( displayMode );\r
+    char *buffer = (char *)malloc ( (len+1) * sizeof(char) );\r
+    memcpy ( buffer, displayMode, len );\r
+    buffer[len] = '\0';\r
+\r
+    token = strtok ( buffer, " \t" );\r
+\r
+    while ( token )\r
+    {\r
+        /* Process this token */\r
+        int i ;\r
+\r
+        /* Temporary fix:  Ignore any length specifications and at least\r
+         * process the basic token\r
+         * TODO:  Fix this permanently\r
+         */\r
+        size_t cleanlength = strcspn ( token, "=<>~!" );\r
+\r
+        for ( i = 0; i < NUM_TOKENS; i++ )\r
+        {\r
+            if ( strncmp ( token, Tokens[i], cleanlength ) == 0 ) break ;\r
+        }\r
+\r
+        switch ( i )\r
+        {\r
+        case 0 :  /* "alpha":  Alpha color buffer precision in bits */\r
+            glut_state_flag |= GLUT_ALPHA ;  /* Somebody fix this for me! */\r
+            break ;\r
+\r
+        case 1 :  /* "acca":  Red, green, blue, and alpha accumulation buffer\r
+                     precision in bits */\r
+            break ;\r
+\r
+        case 2 :  /* "acc":  Red, green, and blue accumulation buffer precision\r
+                     in bits with zero bits alpha */\r
+            glut_state_flag |= GLUT_ACCUM ;  /* Somebody fix this for me! */\r
+            break ;\r
+\r
+        case 3 :  /* "blue":  Blue color buffer precision in bits */\r
+            break ;\r
+\r
+        case 4 :  /* "buffer":  Number of bits in the color index color buffer\r
+                   */\r
+            break ;\r
+\r
+        case 5 :  /* "conformant":  Boolean indicating if the frame buffer\r
+                     configuration is conformant or not */\r
+            break ;\r
+\r
+        case 6 : /* "depth":  Number of bits of precsion in the depth buffer */\r
+            glut_state_flag |= GLUT_DEPTH ;  /* Somebody fix this for me! */\r
+            break ;\r
+\r
+        case 7 :  /* "double":  Boolean indicating if the color buffer is\r
+                     double buffered */\r
+            glut_state_flag |= GLUT_DOUBLE ;\r
+            break ;\r
+\r
+        case 8 :  /* "green":  Green color buffer precision in bits */\r
+            break ;\r
+\r
+        case 9 :  /* "index":  Boolean if the color model is color index or not\r
+                   */\r
+            glut_state_flag |= GLUT_INDEX ;\r
+            break ;\r
+\r
+        case 10 :  /* "num":  A special capability  name indicating where the\r
+                      value represents the Nth frame buffer configuration\r
+                      matching the description string */\r
+            break ;\r
+\r
+        case 11 :  /* "red":  Red color buffer precision in bits */\r
+            break ;\r
+\r
+        case 12 :  /* "rgba":  Number of bits of red, green, blue, and alpha in\r
+                      the RGBA color buffer */\r
+            glut_state_flag |= GLUT_RGBA ;  /* Somebody fix this for me! */\r
+            break ;\r
+\r
+        case 13 :  /* "rgb":  Number of bits of red, green, and blue in the\r
+                      RGBA color buffer with zero bits alpha */\r
+            glut_state_flag |= GLUT_RGB ;  /* Somebody fix this for me! */\r
+            break ;\r
+\r
+        case 14 :  /* "luminance":  Number of bits of red in the RGBA and zero\r
+                      bits of green, blue (alpha not specified) of color buffer\r
+                      precision */\r
+            glut_state_flag |= GLUT_LUMINANCE ; /* Somebody fix this for me! */\r
+            break ;\r
+\r
+        case 15 :  /* "stencil":  Number of bits in the stencil buffer */\r
+            glut_state_flag |= GLUT_STENCIL;  /* Somebody fix this for me! */\r
+            break ;\r
+\r
+        case 16 :  /* "single":  Boolean indicate the color buffer is single\r
+                      buffered */\r
+            glut_state_flag |= GLUT_SINGLE ;\r
+            break ;\r
+\r
+        case 17 :  /* "stereo":  Boolean indicating the color buffer supports\r
+                      OpenGL-style stereo */\r
+            glut_state_flag |= GLUT_STEREO ;\r
+            break ;\r
+\r
+        case 18 :  /* "samples":  Indicates the number of multisamples to use\r
+                      based on GLX's SGIS_multisample extension (for\r
+                      antialiasing) */\r
+            glut_state_flag |= GLUT_MULTISAMPLE ; /*Somebody fix this for me!*/\r
+            break ;\r
+\r
+        case 19 :  /* "slow":  Boolean indicating if the frame buffer\r
+                      configuration is slow or not */\r
+            break ;\r
+\r
+        case 20 :  /* "win32pdf": (incorrect spelling but was there before */\r
+        case 21 :  /* "win32pfd":  matches the Win32 Pixel Format Descriptor by\r
+                      number */\r
+#if TARGET_HOST_MS_WINDOWS\r
+#endif\r
+            break ;\r
+\r
+        case 22 :  /* "xvisual":  matches the X visual ID by number */\r
+#if TARGET_HOST_POSIX_X11\r
+#endif\r
+            break ;\r
+\r
+        case 23 :  /* "xstaticgray": */\r
+        case 29 :  /* "xstaticgrey":  boolean indicating if the frame buffer\r
+                      configuration's X visual is of type StaticGray */\r
+#if TARGET_HOST_POSIX_X11\r
+#endif\r
+            break ;\r
+\r
+        case 24 :  /* "xgrayscale": */\r
+        case 30 :  /* "xgreyscale":  boolean indicating if the frame buffer\r
+                      configuration's X visual is of type GrayScale */\r
+#if TARGET_HOST_POSIX_X11\r
+#endif\r
+            break ;\r
+\r
+        case 25 :  /* "xstaticcolor": */\r
+        case 31 :  /* "xstaticcolour":  boolean indicating if the frame buffer\r
+                      configuration's X visual is of type StaticColor */\r
+#if TARGET_HOST_POSIX_X11\r
+#endif\r
+            break ;\r
+\r
+        case 26 :  /* "xpseudocolor": */\r
+        case 32 :  /* "xpseudocolour":  boolean indicating if the frame buffer\r
+                      configuration's X visual is of type PseudoColor */\r
+#if TARGET_HOST_POSIX_X11\r
+#endif\r
+            break ;\r
+\r
+        case 27 :  /* "xtruecolor": */\r
+        case 33 :  /* "xtruecolour":  boolean indicating if the frame buffer\r
+                      configuration's X visual is of type TrueColor */\r
+#if TARGET_HOST_POSIX_X11\r
+#endif\r
+            break ;\r
+\r
+        case 28 :  /* "xdirectcolor": */\r
+        case 34 :  /* "xdirectcolour":  boolean indicating if the frame buffer\r
+                      configuration's X visual is of type DirectColor */\r
+#if TARGET_HOST_POSIX_X11\r
+#endif\r
+            break ;\r
+\r
+        case 35 :  /* "borderless":  windows should not have borders */\r
+#if TARGET_HOST_POSIX_X11\r
+#endif\r
+            break ;\r
+\r
+        case 36 :  /* "aux":  some number of aux buffers */\r
+            glut_state_flag |= GLUT_AUX;\r
+            break ;\r
+\r
+        case 37 :  /* Unrecognized */\r
+            fgWarning ( "WARNING - Display string token not recognized:  %s",\r
+                        token );\r
+            break ;\r
+        }\r
+\r
+        token = strtok ( NULL, " \t" );\r
+    }\r
+\r
+    free ( buffer );\r
+\r
+    /* We will make use of this value when creating a new OpenGL context... */\r
+    fgState.DisplayMode = glut_state_flag;\r
+}\r
+\r
+/* -- SETTING OPENGL 3.0 CONTEXT CREATION PARAMETERS ---------------------- */\r
+\r
+void FGAPIENTRY glutInitContextVersion( int majorVersion, int minorVersion )\r
+{\r
+    /* We will make use of these valuse when creating a new OpenGL context... */\r
+    fgState.MajorVersion = majorVersion;\r
+    fgState.MinorVersion = minorVersion;\r
+}\r
+\r
+\r
+void FGAPIENTRY glutInitContextFlags( int flags )\r
+{\r
+    /* We will make use of this value when creating a new OpenGL context... */\r
+    fgState.ContextFlags = flags;\r
+}\r
+\r
+void FGAPIENTRY glutInitContextProfile( int profile )\r
+{\r
+    /* We will make use of this value when creating a new OpenGL context... */\r
+    fgState.ContextProfile = profile;\r
+}\r
+\r
+/* -------------- User Defined Error/Warning Handler Support -------------- */\r
+\r
+/*\r
+ * Sets the user error handler (note the use of va_list for the args to the fmt)\r
+ */\r
+void FGAPIENTRY glutInitErrorFunc( void (* vfgError) ( const char *fmt, va_list ap ) )\r
+{\r
+    /* This allows user programs to handle freeglut errors */\r
+    fgState.ErrorFunc = vfgError;\r
+}\r
+\r
+/*\r
+ * Sets the user warning handler (note the use of va_list for the args to the fmt)\r
+ */\r
+void FGAPIENTRY glutInitWarningFunc( void (* vfgWarning) ( const char *fmt, va_list ap ) )\r
+{\r
+    /* This allows user programs to handle freeglut warnings */\r
+    fgState.WarningFunc = vfgWarning;\r
+}\r
+\r
+/*** END OF FILE ***/\r
diff --git a/src/Common/freeglut_input_devices.c b/src/Common/freeglut_input_devices.c
new file mode 100644 (file)
index 0000000..50eeac7
--- /dev/null
@@ -0,0 +1,378 @@
+/*\r
+ * freeglut_input_devices.c\r
+ *\r
+ * Handles miscellaneous input devices via direct serial-port access.\r
+ * Proper X11 XInput device support is not yet supported.\r
+ * Also lacks Mac support.\r
+ *\r
+ * Written by Joe Krahn <krahn@niehs.nih.gov> 2005\r
+ *\r
+ * Copyright (c) 2005 Stephen J. Baker. All Rights Reserved.\r
+ *\r
+ * Permission is hereby granted, free of charge, to any person obtaining a\r
+ * copy of this software and associated documentation files (the "Software"),\r
+ * to deal in the Software without restriction, including without limitation\r
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
+ * and/or sell copies of the Software, and to permit persons to whom the\r
+ * Software is furnished to do so, subject to the following conditions:\r
+ *\r
+ * The above copyright notice and this permission notice shall be included\r
+ * in all copies or substantial portions of the Software.\r
+ *\r
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL\r
+ * PAWEL W. OLSZTA OR STEPHEN J. BAKER BE LIABLE FOR ANY CLAIM, DAMAGES OR\r
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,\r
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r
+ * DEALINGS IN THE SOFTWARE.\r
+ */\r
+\r
+#ifdef HAVE_CONFIG_H\r
+#    include "config.h"\r
+#endif\r
+\r
+#include <GL/freeglut.h>\r
+#include "freeglut_internal.h"\r
+\r
+#if TARGET_HOST_POSIX_X11\r
+#ifdef HAVE_ERRNO_H\r
+#include <errno.h>\r
+#endif\r
+#include <sys/ioctl.h>\r
+#include <stdio.h>\r
+#include <stdlib.h>\r
+#include <string.h>\r
+#include <termios.h>\r
+#include <fcntl.h>\r
+\r
+typedef struct {\r
+   int fd;\r
+   struct termios termio, termio_save;\r
+} SERIALPORT;\r
+\r
+#elif TARGET_HOST_MS_WINDOWS\r
+#include <sys/types.h>\r
+#include <winbase.h>\r
+typedef struct {\r
+   HANDLE fh;\r
+   COMMTIMEOUTS timeouts_save;\r
+   DCB dcb_save;\r
+} SERIALPORT;\r
+\r
+#endif\r
+\r
+/********************* Dialbox definitions ***********************/\r
+\r
+#define DIAL_NUM_VALUATORS 8\r
+\r
+/* dial parser state machine states */\r
+#define DIAL_NEW                (-1)\r
+#define DIAL_WHICH_DEVICE       0\r
+#define DIAL_VALUE_HIGH         1\r
+#define DIAL_VALUE_LOW          2\r
+\r
+/* dial/button box commands */\r
+#define DIAL_INITIALIZE                 0x20\r
+#define DIAL_SET_LEDS                   0x75\r
+#define DIAL_SET_TEXT                   0x61\r
+#define DIAL_SET_AUTO_DIALS             0x50\r
+#define DIAL_SET_AUTO_DELTA_DIALS       0x51\r
+#define DIAL_SET_FILTER                 0x53\r
+#define DIAL_SET_BUTTONS_MOM_TYPE       0x71\r
+#define DIAL_SET_AUTO_MOM_BUTTONS       0x73\r
+#define DIAL_SET_ALL_LEDS               0x4b\r
+#define DIAL_CLEAR_ALL_LEDS             0x4c\r
+\r
+/* dial/button box replies and events */\r
+#define DIAL_INITIALIZED        0x20\r
+#define DIAL_BASE               0x30\r
+#define DIAL_DELTA_BASE         0x40\r
+#define DIAL_PRESS_BASE         0xc0\r
+#define DIAL_RELEASE_BASE       0xe0\r
+\r
+/* macros to determine reply type */\r
+#define IS_DIAL_EVENT(ch)       (((ch)>=DIAL_BASE)&&((ch)<DIAL_BASE+DIAL_NUM_VALUATORS))\r
+#define IS_KEY_PRESS(ch)        (((ch)>=DIAL_PRESS_BASE)&&((ch)<DIAL_PRESS_BASE+DIAL_NUM_BUTTONS))\r
+#define IS_KEY_RELEASE(ch)      (((ch)>=DIAL_RELEASE_BASE)&&((ch)<DIAL_RELEASE_BASE+DIAL_NUM_BUTTONS))\r
+#define IS_INIT_EVENT(ch)       ((ch)==DIAL_INITIALIZED)\r
+\r
+/*****************************************************************/\r
+\r
+static SERIALPORT *serial_open ( const char *device );\r
+static void serial_close ( SERIALPORT *port );\r
+static int serial_getchar ( SERIALPORT *port );\r
+static int serial_putchar ( SERIALPORT *port, unsigned char ch );\r
+static void serial_flush ( SERIALPORT *port );\r
+\r
+static void send_dial_event(int dial, int value);\r
+static void poll_dials(int id);\r
+\r
+/* local variables */\r
+static SERIALPORT *dialbox_port=NULL;\r
+\r
+/*****************************************************************/\r
+\r
+/*\r
+ * Implementation for glutDeviceGet(GLUT_HAS_DIAL_AND_BUTTON_BOX)\r
+ */\r
+int fgInputDeviceDetect( void )\r
+{\r
+    fgInitialiseInputDevices ();\r
+\r
+    if ( !dialbox_port )\r
+        return 0;\r
+\r
+    if ( !fgState.InputDevsInitialised )\r
+        return 0;\r
+\r
+    return 1;\r
+}\r
+\r
+/*\r
+ * Try initializing the input device(s)\r
+ */\r
+void fgInitialiseInputDevices ( void )\r
+{\r
+    if( !fgState.InputDevsInitialised )\r
+    {\r
+        const char *dial_device=NULL;\r
+        dial_device = getenv ( "GLUT_DIALS_SERIAL" );\r
+#if TARGET_HOST_MS_WINDOWS\r
+        if (!dial_device){\r
+            static char devname[256];\r
+            DWORD size=sizeof(devname);\r
+            DWORD type = REG_SZ;\r
+            HKEY key;\r
+            if (RegOpenKeyA(HKEY_LOCAL_MACHINE,"SOFTWARE\\FreeGLUT",&key)==ERROR_SUCCESS) {\r
+                if (RegQueryValueExA(key,"DialboxSerialPort",NULL,&type,(LPBYTE)devname,&size)==ERROR_SUCCESS){\r
+                    dial_device=devname;\r
+                }\r
+                RegCloseKey(key);\r
+            }\r
+        }\r
+#endif\r
+        if ( !dial_device ) return;\r
+        if ( !( dialbox_port = serial_open ( dial_device ) ) ) return;\r
+        serial_putchar(dialbox_port,DIAL_INITIALIZE);\r
+        glutTimerFunc ( 10, poll_dials, 0 );\r
+        fgState.InputDevsInitialised = GL_TRUE;\r
+    }\r
+}\r
+\r
+/*\r
+ *\r
+ */\r
+void fgInputDeviceClose( void )\r
+{\r
+    if ( fgState.InputDevsInitialised )\r
+    {\r
+        serial_close ( dialbox_port );\r
+        dialbox_port = NULL;\r
+        fgState.InputDevsInitialised = GL_FALSE;\r
+    }\r
+}\r
+\r
+/********************************************************************/\r
+\r
+/* Check all windows for dialbox callbacks */\r
+static void fghcbEnumDialCallbacks ( SFG_Window *window, SFG_Enumerator *enumerator )\r
+{\r
+    /* Built-in to INVOKE_WCB():  if window->Callbacks[CB_Dials] */\r
+    INVOKE_WCB ( *window,Dials, ( ((int*)enumerator->data)[0], ((int*)enumerator->data)[1]) );\r
+    fgEnumSubWindows ( window, fghcbEnumDialCallbacks, enumerator );\r
+}\r
+\r
+static void send_dial_event ( int num, int value )\r
+{\r
+    SFG_Enumerator enumerator;\r
+    int data[2];\r
+    data[0] = num;\r
+    data[1] = value;\r
+    enumerator.found = GL_FALSE;\r
+    enumerator.data  =  data;\r
+    fgEnumWindows ( fghcbEnumDialCallbacks, &enumerator );\r
+}\r
+\r
+/********************************************************************/\r
+static void poll_dials ( int id )\r
+{\r
+    int data;\r
+    static int dial_state = DIAL_NEW;\r
+    static int dial_which;\r
+    static int dial_value;\r
+    static int dials[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };\r
+\r
+    if ( !dialbox_port ) return;\r
+\r
+    while ( (data=serial_getchar(dialbox_port)) != EOF )\r
+    {\r
+        if ( ( dial_state > DIAL_WHICH_DEVICE ) || IS_DIAL_EVENT ( data ) )\r
+        {\r
+            switch ( dial_state )\r
+            {\r
+            case DIAL_WHICH_DEVICE:\r
+                dial_which = data - DIAL_BASE;\r
+                dial_state++;\r
+                break;\r
+            case DIAL_VALUE_HIGH:\r
+                dial_value = ( data << 8 );\r
+                dial_state++;\r
+                break;\r
+            case DIAL_VALUE_LOW:\r
+                dial_value |= data;\r
+                if ( dial_value & 0x8000 ) dial_value -= 0x10000;\r
+                dials[dial_which] = dial_value;\r
+                send_dial_event ( dial_which + 1, dial_value * 360 / 256 );\r
+                dial_state = DIAL_WHICH_DEVICE;\r
+                break;\r
+            default:\r
+                /* error: Impossible state value! */\r
+                break;\r
+            }\r
+        }\r
+        else if ( data == DIAL_INITIALIZED )\r
+        {\r
+            fgState.InputDevsInitialised = GL_TRUE;\r
+            dial_state = DIAL_WHICH_DEVICE;\r
+            serial_putchar(dialbox_port,DIAL_SET_AUTO_DIALS);\r
+            serial_putchar(dialbox_port,0xff);\r
+            serial_putchar(dialbox_port,0xff);\r
+        }\r
+        else  /* Unknown data; try flushing. */\r
+            serial_flush(dialbox_port);\r
+    }\r
+\r
+    glutTimerFunc ( 2, poll_dials, 0 );\r
+}\r
+\r
+\r
+/******** OS Specific Serial I/O routines *******/\r
+#if TARGET_HOST_POSIX_X11 /* ==> Linux/BSD/UNIX POSIX serial I/O */\r
+static SERIALPORT *serial_open ( const char *device )\r
+{\r
+    int fd;\r
+    struct termios termio;\r
+    SERIALPORT *port;\r
+\r
+    fd = open(device, O_RDWR | O_NONBLOCK );\r
+    if (fd <0) {\r
+        perror(device);\r
+        return NULL;\r
+    }\r
+\r
+    port = malloc(sizeof(SERIALPORT));\r
+    memset(port, 0, sizeof(SERIALPORT));\r
+    port->fd = fd;\r
+\r
+    /* save current port settings */\r
+    tcgetattr(fd,&port->termio_save);\r
+\r
+    memset(&termio, 0, sizeof(termio));\r
+    termio.c_cflag = CS8 | CREAD | HUPCL ;\r
+    termio.c_iflag = IGNPAR | IGNBRK ;\r
+    termio.c_cc[VTIME]    = 0;   /* inter-character timer */\r
+    termio.c_cc[VMIN]     = 1;   /* block read until 1 chars received, when blocking I/O */\r
+\r
+    cfsetispeed(&termio, B9600);\r
+    cfsetospeed(&termio, B9600);\r
+    tcsetattr(fd,TCSANOW,&termio);\r
+\r
+    serial_flush(port);\r
+    return port;\r
+}\r
+\r
+static void serial_close(SERIALPORT *port)\r
+{\r
+    if (port)\r
+    {\r
+        /* restore old port settings */\r
+        tcsetattr(port->fd,TCSANOW,&port->termio_save);\r
+        close(port->fd);\r
+        free(port);\r
+    }\r
+}\r
+\r
+static int serial_getchar(SERIALPORT *port)\r
+{\r
+    unsigned char ch;\r
+    if (!port) return EOF;\r
+    if (read(port->fd,&ch,1)) return ch;\r
+    return EOF;\r
+}\r
+\r
+static int serial_putchar(SERIALPORT *port, unsigned char ch){\r
+    if (!port) return 0;\r
+    return write(port->fd,&ch,1);\r
+}\r
+\r
+static void serial_flush ( SERIALPORT *port )\r
+{\r
+    tcflush ( port->fd, TCIOFLUSH );\r
+}\r
+\r
+#elif TARGET_HOST_MS_WINDOWS\r
+\r
+static SERIALPORT *serial_open(const char *device){\r
+    HANDLE fh;\r
+    DCB dcb={sizeof(DCB)};\r
+    COMMTIMEOUTS timeouts;\r
+    SERIALPORT *port;\r
+\r
+    fh = CreateFile(device,GENERIC_READ|GENERIC_WRITE,0,NULL,\r
+      OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);\r
+    if (!fh) return NULL;\r
+\r
+    port = malloc(sizeof(SERIALPORT));\r
+    ZeroMemory(port, sizeof(SERIALPORT));\r
+    port->fh = fh;\r
+\r
+    /* save current port settings */\r
+    GetCommState(fh,&port->dcb_save);\r
+    GetCommTimeouts(fh,&port->timeouts_save);\r
+\r
+    dcb.DCBlength=sizeof(DCB);\r
+    BuildCommDCB("96,n,8,1",&dcb);\r
+    SetCommState(fh,&dcb);\r
+\r
+    ZeroMemory(&timeouts,sizeof(timeouts));\r
+    timeouts.ReadTotalTimeoutConstant=1;\r
+    timeouts.WriteTotalTimeoutConstant=1;\r
+    SetCommTimeouts(fh,&timeouts);\r
+\r
+    serial_flush(port);\r
+\r
+    return port;\r
+}\r
+\r
+static void serial_close(SERIALPORT *port){\r
+    if (port){\r
+        /* restore old port settings */\r
+        SetCommState(port->fh,&port->dcb_save);\r
+        SetCommTimeouts(port->fh,&port->timeouts_save);\r
+        CloseHandle(port->fh);\r
+        free(port);\r
+    }\r
+}\r
+\r
+static int serial_getchar(SERIALPORT *port){\r
+    DWORD n;\r
+    unsigned char ch;\r
+    if (!port) return EOF;\r
+    if (!ReadFile(port->fh,&ch,1,&n,NULL)) return EOF;\r
+    if (n==1) return ch;\r
+    return EOF;\r
+}\r
+\r
+static int serial_putchar(SERIALPORT *port, unsigned char ch){\r
+    DWORD n;\r
+    if (!port) return 0;\r
+    return WriteFile(port->fh,&ch,1,&n,NULL);\r
+}\r
+\r
+static void serial_flush ( SERIALPORT *port )\r
+{\r
+    FlushFileBuffers(port->fh);\r
+}\r
+\r
+#endif\r
diff --git a/src/Common/freeglut_internal.h b/src/Common/freeglut_internal.h
new file mode 100644 (file)
index 0000000..38c465b
--- /dev/null
@@ -0,0 +1,1023 @@
+/*\r
+ * freeglut_internal.h\r
+ *\r
+ * The freeglut library private include file.\r
+ *\r
+ * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.\r
+ * Written by Pawel W. Olszta, <olszta@sourceforge.net>\r
+ * Creation date: Thu Dec 2 1999\r
+ *\r
+ * Permission is hereby granted, free of charge, to any person obtaining a\r
+ * copy of this software and associated documentation files (the "Software"),\r
+ * to deal in the Software without restriction, including without limitation\r
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
+ * and/or sell copies of the Software, and to permit persons to whom the\r
+ * Software is furnished to do so, subject to the following conditions:\r
+ *\r
+ * The above copyright notice and this permission notice shall be included\r
+ * in all copies or substantial portions of the Software.\r
+ *\r
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL\r
+ * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
+ */\r
+\r
+#ifndef  FREEGLUT_INTERNAL_H\r
+#define  FREEGLUT_INTERNAL_H\r
+\r
+#ifdef HAVE_CONFIG_H\r
+#    include "config.h"\r
+#endif\r
+\r
+/* XXX Update these for each release! */\r
+#define  VERSION_MAJOR 2\r
+#define  VERSION_MINOR 7\r
+#define  VERSION_PATCH 0\r
+\r
+/* Freeglut is intended to function under all Unix/X11 and Win32 platforms. */\r
+/* XXX: Don't all MS-Windows compilers (except Cygwin) have _WIN32 defined?\r
+ * XXX: If so, remove the first set of defined()'s below.\r
+ */\r
+#if !defined(TARGET_HOST_POSIX_X11) && !defined(TARGET_HOST_MS_WINDOWS) && !defined(TARGET_HOST_MAC_OSX) && !defined(TARGET_HOST_SOLARIS)\r
+#if defined(_MSC_VER) || defined(__WATCOMC__) || defined(__MINGW32__) \\r
+    || defined(_WIN32) || defined(_WIN32_WCE) \\r
+    || ( defined(__CYGWIN__) && defined(X_DISPLAY_MISSING) )\r
+#   define  TARGET_HOST_MS_WINDOWS 1\r
+\r
+#elif defined(__posix__) || defined(__unix__) || defined(__linux__) || defined(__sun)\r
+#   define  TARGET_HOST_POSIX_X11  1\r
+\r
+#elif defined(__APPLE__)\r
+/* This is a placeholder until we get native OSX support ironed out -- JFF 11/18/09 */\r
+#   define  TARGET_HOST_POSIX_X11  1\r
+/* #   define  TARGET_HOST_MAC_OSX    1 */\r
+\r
+#else\r
+#   error "Unrecognized target host!"\r
+\r
+#endif\r
+#endif\r
+\r
+/* Detect both SunPro and gcc compilers on Sun Solaris */\r
+#if defined (__SVR4) && defined (__sun)\r
+#   define TARGET_HOST_SOLARIS 1\r
+#endif\r
+\r
+#ifndef TARGET_HOST_MS_WINDOWS\r
+#   define  TARGET_HOST_MS_WINDOWS 0\r
+#endif\r
+\r
+#ifndef  TARGET_HOST_POSIX_X11\r
+#   define  TARGET_HOST_POSIX_X11  0\r
+#endif\r
+\r
+#ifndef  TARGET_HOST_MAC_OSX\r
+#   define  TARGET_HOST_MAC_OSX    0\r
+#endif\r
+\r
+#ifndef  TARGET_HOST_SOLARIS\r
+#   define  TARGET_HOST_SOLARIS    0\r
+#endif\r
+\r
+/* -- FIXED CONFIGURATION LIMITS ------------------------------------------- */\r
+\r
+#define  FREEGLUT_MAX_MENUS         3\r
+\r
+/* -- PLATFORM-SPECIFIC INCLUDES ------------------------------------------- */\r
+\r
+/* All Win32 headers depend on the huge windows.h recursive include.\r
+ * Note: Lower-case header names are used, for best cross-platform\r
+ * compatibility.\r
+ */\r
+#if TARGET_HOST_MS_WINDOWS && !defined(_WIN32_WCE)\r
+#    include <windows.h>\r
+#    include <windowsx.h>\r
+#    include <mmsystem.h>\r
+/* CYGWIN does not have tchar.h, but has TEXT(x), defined in winnt.h. */\r
+#    ifndef __CYGWIN__\r
+#      include <tchar.h>\r
+#    else\r
+#      define _TEXT(x) TEXT(x)\r
+#      define _T(x)    TEXT(x)\r
+#    endif\r
+\r
+#elif TARGET_HOST_POSIX_X11\r
+#    include <GL/glx.h>\r
+#    include <X11/Xlib.h>\r
+#    include <X11/Xatom.h>\r
+#    include <X11/keysym.h>\r
+#    include <X11/extensions/XInput.h>\r
+#    ifdef HAVE_X11_EXTENSIONS_XF86VMODE_H\r
+#        include <X11/extensions/xf86vmode.h>\r
+#    endif\r
+#    ifdef HAVE_X11_EXTENSIONS_XRANDR_H\r
+#        include <X11/extensions/Xrandr.h>\r
+#    endif\r
+/* If GLX is too old, we will fail during runtime when multisampling\r
+   is requested, but at least freeglut compiles. */\r
+#    ifndef GLX_SAMPLE_BUFFERS\r
+#        define GLX_SAMPLE_BUFFERS 0x80A8\r
+#    endif\r
+#    ifndef GLX_SAMPLES\r
+#        define GLX_SAMPLES 0x80A9\r
+#    endif\r
+\r
+#endif\r
+\r
+/* These files should be available on every platform. */\r
+#include <stdio.h>\r
+#include <string.h>\r
+#include <math.h>\r
+#include <stdlib.h>\r
+#include <stdarg.h>\r
+\r
+/* These are included based on autoconf directives. */\r
+#ifdef HAVE_SYS_TYPES_H\r
+#    include <sys/types.h>\r
+#endif\r
+#ifdef HAVE_UNISTD_H\r
+#    include <unistd.h>\r
+#endif\r
+#ifdef TIME_WITH_SYS_TIME\r
+#    include <sys/time.h>\r
+#    include <time.h>\r
+#elif defined(HAVE_SYS_TIME_H)\r
+#    include <sys/time.h>\r
+#else\r
+#    include <time.h>\r
+#endif\r
+\r
+/* -- AUTOCONF HACKS --------------------------------------------------------*/\r
+\r
+/* XXX: Update autoconf to avoid these.\r
+ * XXX: Are non-POSIX platforms intended not to use autoconf?\r
+ * If so, perhaps there should be a config_guess.h for them. Alternatively,\r
+ * config guesses could be placed above, just after the config.h exclusion.\r
+ */\r
+#if defined(__FreeBSD__) || defined(__NetBSD__)\r
+#    define HAVE_USB_JS 1\r
+#    if defined(__NetBSD__) || ( defined(__FreeBSD__) && __FreeBSD_version >= 500000)\r
+#        define HAVE_USBHID_H 1\r
+#    endif\r
+#endif\r
+\r
+#if TARGET_HOST_MS_WINDOWS\r
+#    define  HAVE_VFPRINTF 1\r
+#endif\r
+\r
+/* MinGW may lack a prototype for ChangeDisplaySettingsEx() (depending on the version?) */\r
+#if TARGET_HOST_MS_WINDOWS && !defined(ChangeDisplaySettingsEx)\r
+LONG WINAPI ChangeDisplaySettingsExA(LPCSTR,LPDEVMODEA,HWND,DWORD,LPVOID);\r
+LONG WINAPI ChangeDisplaySettingsExW(LPCWSTR,LPDEVMODEW,HWND,DWORD,LPVOID);\r
+#    ifdef UNICODE\r
+#        define ChangeDisplaySettingsEx ChangeDisplaySettingsExW\r
+#    else\r
+#        define ChangeDisplaySettingsEx ChangeDisplaySettingsExA\r
+#    endif\r
+#endif\r
+\r
+#if defined(_MSC_VER) || defined(__WATCOMC__)\r
+/* strdup() is non-standard, for all but POSIX-2001 */\r
+#define strdup   _strdup\r
+#endif\r
+\r
+/* M_PI is non-standard (defined by BSD, not ISO-C) */\r
+#ifndef M_PI\r
+#    define  M_PI  3.14159265358979323846\r
+#endif\r
+\r
+#ifdef HAVE_STDBOOL_H\r
+#    include <stdbool.h>\r
+#    ifndef TRUE\r
+#        define TRUE true\r
+#    endif\r
+#    ifndef FALSE\r
+#        define FALSE false\r
+#    endif\r
+#else\r
+#    ifndef TRUE\r
+#        define  TRUE  1\r
+#    endif\r
+#    ifndef FALSE\r
+#        define  FALSE  0\r
+#    endif\r
+#endif\r
+\r
+/* General defines */\r
+\r
+#define INVALID_MODIFIERS 0xffffffff\r
+\r
+/* -- GLOBAL TYPE DEFINITIONS ---------------------------------------------- */\r
+\r
+/* Freeglut callbacks type definitions */\r
+typedef void (* FGCBDisplay       )( void );\r
+typedef void (* FGCBReshape       )( int, int );\r
+typedef void (* FGCBVisibility    )( int );\r
+typedef void (* FGCBKeyboard      )( unsigned char, int, int );\r
+typedef void (* FGCBSpecial       )( int, int, int );\r
+typedef void (* FGCBMouse         )( int, int, int, int );\r
+typedef void (* FGCBMouseWheel    )( int, int, int, int );\r
+typedef void (* FGCBMotion        )( int, int );\r
+typedef void (* FGCBPassive       )( int, int );\r
+typedef void (* FGCBEntry         )( int );\r
+typedef void (* FGCBWindowStatus  )( int );\r
+typedef void (* FGCBSelect        )( int, int, int );\r
+typedef void (* FGCBJoystick      )( unsigned int, int, int, int );\r
+typedef void (* FGCBKeyboardUp    )( unsigned char, int, int );\r
+typedef void (* FGCBSpecialUp     )( int, int, int );\r
+typedef void (* FGCBOverlayDisplay)( void );\r
+typedef void (* FGCBSpaceMotion   )( int, int, int );\r
+typedef void (* FGCBSpaceRotation )( int, int, int );\r
+typedef void (* FGCBSpaceButton   )( int, int );\r
+typedef void (* FGCBDials         )( int, int );\r
+typedef void (* FGCBButtonBox     )( int, int );\r
+typedef void (* FGCBTabletMotion  )( int, int );\r
+typedef void (* FGCBTabletButton  )( int, int, int, int );\r
+typedef void (* FGCBDestroy       )( void );\r
+\r
+typedef void (* FGCBMultiEntry   )( int, int );\r
+typedef void (* FGCBMultiButton  )( int, int, int, int, int );\r
+typedef void (* FGCBMultiMotion  )( int, int, int );\r
+typedef void (* FGCBMultiPassive )( int, int, int );\r
+\r
+/* The global callbacks type definitions */\r
+typedef void (* FGCBIdle          )( void );\r
+typedef void (* FGCBTimer         )( int );\r
+typedef void (* FGCBMenuState     )( int );\r
+typedef void (* FGCBMenuStatus    )( int, int, int );\r
+\r
+/* The callback used when creating/using menus */\r
+typedef void (* FGCBMenu          )( int );\r
+\r
+/* The FreeGLUT error/warning handler type definition */\r
+typedef void (* FGError           ) ( const char *fmt, va_list ap);\r
+typedef void (* FGWarning         ) ( const char *fmt, va_list ap);\r
+\r
+\r
+/* A list structure */\r
+typedef struct tagSFG_List SFG_List;\r
+struct tagSFG_List\r
+{\r
+    void *First;\r
+    void *Last;\r
+};\r
+\r
+/* A list node structure */\r
+typedef struct tagSFG_Node SFG_Node;\r
+struct tagSFG_Node\r
+{\r
+    void *Next;\r
+    void *Prev;\r
+};\r
+\r
+/* A helper structure holding two ints and a boolean */\r
+typedef struct tagSFG_XYUse SFG_XYUse;\r
+struct tagSFG_XYUse\r
+{\r
+    GLint           X, Y;               /* The two integers...               */\r
+    GLboolean       Use;                /* ...and a single boolean.          */\r
+};\r
+\r
+/*\r
+ * An enumeration containing the state of the GLUT execution:\r
+ * initializing, running, or stopping\r
+ */\r
+typedef enum\r
+{\r
+  GLUT_EXEC_STATE_INIT,\r
+  GLUT_EXEC_STATE_RUNNING,\r
+  GLUT_EXEC_STATE_STOP\r
+} fgExecutionState ;\r
+\r
+/* This structure holds different freeglut settings */\r
+typedef struct tagSFG_State SFG_State;\r
+struct tagSFG_State\r
+{\r
+    SFG_XYUse        Position;             /* The default windows' position  */\r
+    SFG_XYUse        Size;                 /* The default windows' size      */\r
+    unsigned int     DisplayMode;          /* Display mode for new windows   */\r
+\r
+    GLboolean        Initialised;          /* freeglut has been initialised  */\r
+\r
+    int              DirectContext;        /* Direct rendering state         */\r
+\r
+    GLboolean        ForceIconic;          /* New top windows are iconified  */\r
+    GLboolean        UseCurrentContext;    /* New windows share with current */\r
+\r
+    GLboolean        GLDebugSwitch;        /* OpenGL state debugging switch  */\r
+    GLboolean        XSyncSwitch;          /* X11 sync protocol switch       */\r
+\r
+    int              KeyRepeat;            /* Global key repeat mode.        */\r
+    int              Modifiers;            /* Current ALT/SHIFT/CTRL state   */\r
+\r
+    GLuint           FPSInterval;          /* Interval between FPS printfs   */\r
+    GLuint           SwapCount;            /* Count of glutSwapBuffer calls  */\r
+    GLuint           SwapTime;             /* Time of last SwapBuffers       */\r
+\r
+    unsigned long    Time;                 /* Time that glutInit was called  */\r
+    SFG_List         Timers;               /* The freeglut timer hooks       */\r
+    SFG_List         FreeTimers;           /* The unused timer hooks         */\r
+\r
+    FGCBIdle         IdleCallback;         /* The global idle callback       */\r
+\r
+    int              ActiveMenus;          /* Num. of currently active menus */\r
+    FGCBMenuState    MenuStateCallback;    /* Menu callbacks are global      */\r
+    FGCBMenuStatus   MenuStatusCallback;\r
+\r
+    SFG_XYUse        GameModeSize;         /* Game mode screen's dimensions  */\r
+    int              GameModeDepth;        /* The pixel depth for game mode  */\r
+    int              GameModeRefresh;      /* The refresh rate for game mode */\r
+\r
+    int              ActionOnWindowClose; /* Action when user closes window  */\r
+\r
+    fgExecutionState ExecState;           /* Used for GLUT termination       */\r
+    char            *ProgramName;         /* Name of the invoking program    */\r
+    GLboolean        JoysticksInitialised;  /* Only initialize if application calls for them */\r
+    int              NumActiveJoysticks;    /* Number of active joysticks -- if zero, don't poll joysticks */\r
+    GLboolean        InputDevsInitialised;  /* Only initialize if application calls for them */\r
+\r
+       int              MouseWheelTicks;      /* Number of ticks the mouse wheel has turned */\r
+\r
+    int              AuxiliaryBufferNumber;  /* Number of auxiliary buffers */\r
+    int              SampleNumber;         /*  Number of samples per pixel  */\r
+\r
+    int              MajorVersion;         /* Major OpenGL context version  */\r
+    int              MinorVersion;         /* Minor OpenGL context version  */\r
+    int              ContextFlags;         /* OpenGL context flags          */\r
+    int              ContextProfile;       /* OpenGL context profile        */\r
+    FGError          ErrorFunc;            /* User defined error handler    */\r
+    FGWarning        WarningFunc;          /* User defined warning handler  */\r
+};\r
+\r
+/* The structure used by display initialization in freeglut_init.c */\r
+typedef struct tagSFG_Display SFG_Display;\r
+struct tagSFG_Display\r
+{\r
+#if TARGET_HOST_POSIX_X11\r
+    Display*        Display;            /* The display we are being run in.  */\r
+    int             Screen;             /* The screen we are about to use.   */\r
+    Window          RootWindow;         /* The screen's root window.         */\r
+    int             Connection;         /* The display's connection number   */\r
+    Atom            DeleteWindow;       /* The window deletion atom          */\r
+    Atom            State;              /* The state atom                    */\r
+    Atom            StateFullScreen;    /* The full screen atom              */\r
+\r
+#ifdef HAVE_X11_EXTENSIONS_XRANDR_H\r
+    int prev_xsz, prev_ysz;\r
+    int prev_refresh;\r
+    int prev_size_valid;\r
+#endif /* HAVE_X11_EXTENSIONS_XRANDR_H */\r
+\r
+#ifdef HAVE_X11_EXTENSIONS_XF86VMODE_H\r
+    /*\r
+     * XF86VidMode may be compilable even if it fails at runtime.  Therefore,\r
+     * the validity of the VidMode has to be tracked\r
+     */\r
+    int             DisplayModeValid;   /* Flag that indicates runtime status*/\r
+    XF86VidModeModeLine DisplayMode;    /* Current screen's display settings */\r
+    int             DisplayModeClock;   /* The display mode's refresh rate   */\r
+    int             DisplayViewPortX;   /* saved X location of the viewport  */\r
+    int             DisplayViewPortY;   /* saved Y location of the viewport  */\r
+#endif /* HAVE_X11_EXTENSIONS_XF86VMODE_H */\r
+\r
+    int             DisplayPointerX;    /* saved X location of the pointer   */\r
+    int             DisplayPointerY;    /* saved Y location of the pointer   */\r
+\r
+#elif TARGET_HOST_MS_WINDOWS\r
+    HINSTANCE       Instance;           /* The application's instance        */\r
+    DEVMODE         DisplayMode;        /* Desktop's display settings        */\r
+    char           *DisplayName;        /* Display name for multi display support*/ \r
+\r
+#endif\r
+\r
+    int             ScreenWidth;        /* The screen's width in pixels      */\r
+    int             ScreenHeight;       /* The screen's height in pixels     */\r
+    int             ScreenWidthMM;      /* The screen's width in milimeters  */\r
+    int             ScreenHeightMM;     /* The screen's height in milimeters */\r
+};\r
+\r
+\r
+/* The user can create any number of timer hooks */\r
+typedef struct tagSFG_Timer SFG_Timer;\r
+struct tagSFG_Timer\r
+{\r
+    SFG_Node        Node;\r
+    int             ID;                 /* The timer ID integer              */\r
+    FGCBTimer       Callback;           /* The timer callback                */\r
+    long            TriggerTime;        /* The timer trigger time            */\r
+};\r
+\r
+/*\r
+ * Make "freeglut" window handle and context types so that we don't need so\r
+ * much conditionally-compiled code later in the library.\r
+ */\r
+#if TARGET_HOST_POSIX_X11\r
+\r
+typedef Window     SFG_WindowHandleType ;\r
+typedef GLXContext SFG_WindowContextType ;\r
+\r
+#elif TARGET_HOST_MS_WINDOWS\r
+\r
+typedef HWND    SFG_WindowHandleType ;\r
+typedef HGLRC   SFG_WindowContextType ;\r
+\r
+#endif\r
+\r
+/*\r
+ * A window and its OpenGL context. The contents of this structure\r
+ * are highly dependant on the target operating system we aim at...\r
+ */\r
+typedef struct tagSFG_Context SFG_Context;\r
+struct tagSFG_Context\r
+{\r
+    SFG_WindowHandleType  Handle;    /* The window's handle                 */\r
+    SFG_WindowContextType Context;   /* The window's OpenGL/WGL context     */\r
+\r
+#if TARGET_HOST_POSIX_X11\r
+    GLXFBConfig*    FBConfig;        /* The window's FBConfig               */\r
+#elif TARGET_HOST_MS_WINDOWS\r
+    HDC             Device;          /* The window's device context         */\r
+#endif\r
+\r
+    int             DoubleBuffered;  /* Treat the window as double-buffered */\r
+};\r
+\r
+/* Window's state description. This structure should be kept portable. */\r
+typedef struct tagSFG_WindowState SFG_WindowState;\r
+struct tagSFG_WindowState\r
+{\r
+    /* Note that on Windows, sizes always refer to the client area, thus without the window decorations */\r
+    int             Width;              /* Window's width in pixels          */\r
+    int             Height;             /* The same about the height         */\r
+#if TARGET_HOST_POSIX_X11\r
+    int             OldWidth;           /* Window width from before a resize */\r
+    int             OldHeight;          /*   "    height  "    "    "   "    */\r
+#elif TARGET_HOST_MS_WINDOWS\r
+    RECT            OldRect;            /* window rect - stored before the window is made fullscreen */\r
+    DWORD           OldStyle;           /* window style - stored before the window is made fullscreen */\r
+#endif\r
+\r
+    GLboolean       Redisplay;          /* Do we have to redisplay?          */\r
+    GLboolean       Visible;            /* Is the window visible now         */\r
+\r
+    int             Cursor;             /* The currently selected cursor     */\r
+\r
+    long            JoystickPollRate;   /* The joystick polling rate         */\r
+    long            JoystickLastPoll;   /* When the last poll happened       */\r
+\r
+    int             MouseX, MouseY;     /* The most recent mouse position    */\r
+\r
+    GLboolean       IgnoreKeyRepeat;    /* Whether to ignore key repeat.     */\r
+    GLboolean       KeyRepeating;       /* Currently in repeat mode          */\r
+\r
+    GLboolean       NeedToResize;       /* Do we need to resize the window?  */\r
+\r
+    GLboolean       IsFullscreen;       /* is the window fullscreen? */\r
+};\r
+\r
+\r
+/*\r
+ * A generic function pointer.  We should really use the GLUTproc type\r
+ * defined in freeglut_ext.h, but if we include that header in this file\r
+ * a bunch of other stuff (font-related) blows up!\r
+ */\r
+typedef void (*SFG_Proc)();\r
+\r
+\r
+/*\r
+ * SET_WCB() is used as:\r
+ *\r
+ *     SET_WCB( window, cbname, func );\r
+ *\r
+ * ...where {window} is the freeglut window to set the callback,\r
+ *          {cbname} is the window-specific callback to set,\r
+ *          {func} is a function-pointer.\r
+ *\r
+ * Originally, {FETCH_WCB( ... ) = func} was rather sloppily used,\r
+ * but this can cause warnings because the FETCH_WCB() macro type-\r
+ * casts its result, and a type-cast value shouldn't be an lvalue.\r
+ *\r
+ * The {if( FETCH_WCB( ... ) != func )} test is to do type-checking\r
+ * and for no other reason.  Since it's hidden in the macro, the\r
+ * ugliness is felt to be rather benign.\r
+ */\r
+#define SET_WCB(window,cbname,func)                            \\r
+do                                                             \\r
+{                                                              \\r
+    if( FETCH_WCB( window, cbname ) != (SFG_Proc)(func) )      \\r
+        (((window).CallBacks[CB_ ## cbname]) = (SFG_Proc)(func)); \\r
+} while( 0 )\r
+\r
+/*\r
+ * FETCH_WCB() is used as:\r
+ *\r
+ *     FETCH_WCB( window, cbname );\r
+ *\r
+ * ...where {window} is the freeglut window to fetch the callback from,\r
+ *          {cbname} is the window-specific callback to fetch.\r
+ *\r
+ * The result is correctly type-cast to the callback function pointer\r
+ * type.\r
+ */\r
+#define FETCH_WCB(window,cbname) \\r
+    ((window).CallBacks[CB_ ## cbname])\r
+\r
+/*\r
+ * INVOKE_WCB() is used as:\r
+ *\r
+ *     INVOKE_WCB( window, cbname, ( arg_list ) );\r
+ *\r
+ * ...where {window} is the freeglut window,\r
+ *          {cbname} is the window-specific callback to be invoked,\r
+ *          {(arg_list)} is the parameter list.\r
+ *\r
+ * The callback is invoked as:\r
+ *\r
+ *    callback( arg_list );\r
+ *\r
+ * ...so the parentheses are REQUIRED in the {arg_list}.\r
+ *\r
+ * NOTE that it does a sanity-check and also sets the\r
+ * current window.\r
+ *\r
+ */\r
+#if TARGET_HOST_MS_WINDOWS && !defined(_WIN32_WCE) /* FIXME: also WinCE? */\r
+#define INVOKE_WCB(window,cbname,arg_list)    \\r
+do                                            \\r
+{                                             \\r
+    if( FETCH_WCB( window, cbname ) )         \\r
+    {                                         \\r
+        FGCB ## cbname func = (FGCB ## cbname)(FETCH_WCB( window, cbname )); \\r
+        fgSetWindow( &window );               \\r
+        func arg_list;                        \\r
+    }                                         \\r
+} while( 0 )\r
+#else\r
+#define INVOKE_WCB(window,cbname,arg_list)    \\r
+do                                            \\r
+{                                             \\r
+    if( FETCH_WCB( window, cbname ) )         \\r
+    {                                         \\r
+        fgSetWindow( &window );               \\r
+        ((FGCB ## cbname)FETCH_WCB( window, cbname )) arg_list; \\r
+    }                                         \\r
+} while( 0 )\r
+#endif\r
+\r
+/*\r
+ * The window callbacks the user can supply us with. Should be kept portable.\r
+ *\r
+ * This enumeration provides the freeglut CallBack numbers.\r
+ * The symbolic constants are indices into a window's array of\r
+ * function callbacks.  The names are formed by splicing a common\r
+ * prefix onto the callback's base name.  (This was originally\r
+ * done so that an early stage of development could live side-by-\r
+ * side with the old callback code.  The old callback code used\r
+ * the bare callback's name as a structure member, so I used a\r
+ * prefix for the array index name.)\r
+ *\r
+ * XXX For consistancy, perhaps the prefix should match the\r
+ * XXX FETCH* and INVOKE* macro suffices.  I.e., WCB_, rather than\r
+ * XXX CB_.\r
+ */\r
+enum\r
+{\r
+    CB_Display,\r
+    CB_Reshape,\r
+    CB_Keyboard,\r
+    CB_KeyboardUp,\r
+    CB_Special,\r
+    CB_SpecialUp,\r
+    CB_Mouse,\r
+    CB_MouseWheel,\r
+    CB_Motion,\r
+    CB_Passive,\r
+    CB_Entry,\r
+    CB_Visibility,\r
+    CB_WindowStatus,\r
+    CB_Joystick,\r
+    CB_Destroy,\r
+\r
+    /* MPX-related */\r
+    CB_MultiEntry,\r
+    CB_MultiButton,\r
+    CB_MultiMotion,\r
+    CB_MultiPassive,\r
+\r
+    /* Presently ignored */\r
+    CB_Select,\r
+    CB_OverlayDisplay,\r
+    CB_SpaceMotion,     /* presently implemented only on UNIX/X11 */\r
+    CB_SpaceRotation,   /* presently implemented only on UNIX/X11 */\r
+    CB_SpaceButton,     /* presently implemented only on UNIX/X11 */\r
+    CB_Dials,\r
+    CB_ButtonBox,\r
+    CB_TabletMotion,\r
+    CB_TabletButton,\r
+\r
+    /* Always make this the LAST one */\r
+    TOTAL_CALLBACKS\r
+};\r
+\r
+\r
+/* This structure holds the OpenGL rendering context for all the menu windows */\r
+typedef struct tagSFG_MenuContext SFG_MenuContext;\r
+struct tagSFG_MenuContext\r
+{\r
+    SFG_WindowContextType MContext;       /* The menu window's WGL context   */\r
+};\r
+\r
+/* This structure describes a menu */\r
+typedef struct tagSFG_Window SFG_Window;\r
+typedef struct tagSFG_MenuEntry SFG_MenuEntry;\r
+typedef struct tagSFG_Menu SFG_Menu;\r
+struct tagSFG_Menu\r
+{\r
+    SFG_Node            Node;\r
+    void               *UserData;     /* User data passed back at callback   */\r
+    int                 ID;           /* The global menu ID                  */\r
+    SFG_List            Entries;      /* The menu entries list               */\r
+    FGCBMenu            Callback;     /* The menu callback                   */\r
+    FGCBDestroy         Destroy;      /* Destruction callback                */\r
+    GLboolean           IsActive;     /* Is the menu selected?               */\r
+    int                 Width;        /* Menu box width in pixels            */\r
+    int                 Height;       /* Menu box height in pixels           */\r
+    int                 X, Y;         /* Menu box raster position            */\r
+\r
+    SFG_MenuEntry      *ActiveEntry;  /* Currently active entry in the menu  */\r
+    SFG_Window         *Window;       /* Window for menu                     */\r
+    SFG_Window         *ParentWindow; /* Window in which the menu is invoked */\r
+};\r
+\r
+/* This is a menu entry */\r
+struct tagSFG_MenuEntry\r
+{\r
+    SFG_Node            Node;\r
+    int                 ID;                     /* The menu entry ID (local) */\r
+    int                 Ordinal;                /* The menu's ordinal number */\r
+    char*               Text;                   /* The text to be displayed  */\r
+    SFG_Menu*           SubMenu;                /* Optional sub-menu tree    */\r
+    GLboolean           IsActive;               /* Is the entry highlighted? */\r
+    int                 Width;                  /* Label's width in pixels   */\r
+};\r
+\r
+/*\r
+ * A window, making part of freeglut windows hierarchy.\r
+ * Should be kept portable.\r
+ *\r
+ * NOTE that ActiveMenu is set to menu itself if the window is a menu.\r
+ */\r
+struct tagSFG_Window\r
+{\r
+    SFG_Node            Node;\r
+    int                 ID;                     /* Window's ID number        */\r
+\r
+    SFG_Context         Window;                 /* Window and OpenGL context */\r
+    SFG_WindowState     State;                  /* The window state          */\r
+    SFG_Proc            CallBacks[ TOTAL_CALLBACKS ]; /* Array of window callbacks */\r
+    void               *UserData ;              /* For use by user           */\r
+\r
+    SFG_Menu*       Menu[ FREEGLUT_MAX_MENUS ]; /* Menus appended to window  */\r
+    SFG_Menu*       ActiveMenu;                 /* The window's active menu  */\r
+\r
+    SFG_Window*         Parent;                 /* The parent to this window */\r
+    SFG_List            Children;               /* The subwindows d.l. list  */\r
+\r
+    GLboolean           IsMenu;                 /* Set to 1 if we are a menu */\r
+};\r
+\r
+\r
+/* A linked list structure of windows */\r
+typedef struct tagSFG_WindowList SFG_WindowList ;\r
+struct tagSFG_WindowList\r
+{\r
+    SFG_Node node;\r
+    SFG_Window *window ;\r
+};\r
+\r
+/* This holds information about all the windows, menus etc. */\r
+typedef struct tagSFG_Structure SFG_Structure;\r
+struct tagSFG_Structure\r
+{\r
+    SFG_List        Windows;         /* The global windows list            */\r
+    SFG_List        Menus;           /* The global menus list              */\r
+    SFG_List        WindowsToDestroy;\r
+\r
+    SFG_Window*     CurrentWindow;   /* The currently set window          */\r
+    SFG_Menu*       CurrentMenu;     /* Same, but menu...                 */\r
+\r
+    SFG_MenuContext* MenuContext;    /* OpenGL rendering context for menus */\r
+\r
+    SFG_Window*      GameModeWindow; /* The game mode window               */\r
+\r
+    int              WindowID;       /* The new current window ID          */\r
+    int              MenuID;         /* The new current menu ID            */\r
+};\r
+\r
+/*\r
+ * This structure is used for the enumeration purposes.\r
+ * You can easily extend its functionalities by declaring\r
+ * a structure containing enumerator's contents and custom\r
+ * data, then casting its pointer to (SFG_Enumerator *).\r
+ */\r
+typedef struct tagSFG_Enumerator SFG_Enumerator;\r
+struct tagSFG_Enumerator\r
+{\r
+    GLboolean   found;                          /* Used to terminate search  */\r
+    void*       data;                           /* Custom data pointer       */\r
+};\r
+typedef void (* FGCBenumerator  )( SFG_Window *, SFG_Enumerator * );\r
+\r
+/* The bitmap font structure */\r
+typedef struct tagSFG_Font SFG_Font;\r
+struct tagSFG_Font\r
+{\r
+    char*           Name;         /* The source font name             */\r
+    int             Quantity;     /* Number of chars in font          */\r
+    int             Height;       /* Height of the characters         */\r
+    const GLubyte** Characters;   /* The characters mapping           */\r
+\r
+    float           xorig, yorig; /* Relative origin of the character */\r
+};\r
+\r
+/* The stroke font structures */\r
+\r
+typedef struct tagSFG_StrokeVertex SFG_StrokeVertex;\r
+struct tagSFG_StrokeVertex\r
+{\r
+    GLfloat         X, Y;\r
+};\r
+\r
+typedef struct tagSFG_StrokeStrip SFG_StrokeStrip;\r
+struct tagSFG_StrokeStrip\r
+{\r
+    int             Number;\r
+    const SFG_StrokeVertex* Vertices;\r
+};\r
+\r
+typedef struct tagSFG_StrokeChar SFG_StrokeChar;\r
+struct tagSFG_StrokeChar\r
+{\r
+    GLfloat         Right;\r
+    int             Number;\r
+    const SFG_StrokeStrip* Strips;\r
+};\r
+\r
+typedef struct tagSFG_StrokeFont SFG_StrokeFont;\r
+struct tagSFG_StrokeFont\r
+{\r
+    char*           Name;                       /* The source font name      */\r
+    int             Quantity;                   /* Number of chars in font   */\r
+    GLfloat         Height;                     /* Height of the characters  */\r
+    const SFG_StrokeChar** Characters;          /* The characters mapping    */\r
+};\r
+\r
+/* -- GLOBAL VARIABLES EXPORTS --------------------------------------------- */\r
+\r
+/* Freeglut display related stuff (initialized once per session) */\r
+extern SFG_Display fgDisplay;\r
+\r
+/* Freeglut internal structure */\r
+extern SFG_Structure fgStructure;\r
+\r
+/* The current freeglut settings */\r
+extern SFG_State fgState;\r
+\r
+\r
+/* -- PRIVATE FUNCTION DECLARATIONS ---------------------------------------- */\r
+\r
+/*\r
+ * A call to this function makes us sure that the Display and Structure\r
+ * subsystems have been properly initialized and are ready to be used\r
+ */\r
+#define  FREEGLUT_EXIT_IF_NOT_INITIALISED( string )               \\r
+  if ( ! fgState.Initialised )                                    \\r
+  {                                                               \\r
+    fgError ( " ERROR:  Function <%s> called"                     \\r
+              " without first calling 'glutInit'.", (string) ) ;  \\r
+  }\r
+\r
+#define  FREEGLUT_INTERNAL_ERROR_EXIT_IF_NOT_INITIALISED( string )  \\r
+  if ( ! fgState.Initialised )                                      \\r
+  {                                                                 \\r
+    fgError ( " ERROR:  Internal <%s> function called"              \\r
+              " without first calling 'glutInit'.", (string) ) ;    \\r
+  }\r
+\r
+#define  FREEGLUT_INTERNAL_ERROR_EXIT( cond, string, function )  \\r
+  if ( ! ( cond ) )                                              \\r
+  {                                                              \\r
+    fgError ( " ERROR:  Internal error <%s> in function %s",     \\r
+              (string), (function) ) ;                           \\r
+  }\r
+\r
+/*\r
+ * Following definitions are somewhat similiar to GLib's,\r
+ * but do not generate any log messages:\r
+ */\r
+#define  freeglut_return_if_fail( expr ) \\r
+    if( !(expr) )                        \\r
+        return;\r
+#define  freeglut_return_val_if_fail( expr, val ) \\r
+    if( !(expr) )                                 \\r
+        return val ;\r
+\r
+/*\r
+ * A call to those macros assures us that there is a current\r
+ * window set, respectively:\r
+ */\r
+#define  FREEGLUT_EXIT_IF_NO_WINDOW( string )                               \\r
+  if ( ! fgStructure.CurrentWindow &&                                       \\r
+       ( fgState.ActionOnWindowClose != GLUT_ACTION_CONTINUE_EXECUTION ) )  \\r
+  {                                                                         \\r
+    fgError ( " ERROR:  Function <%s> called"                               \\r
+              " with no current window defined.", (string) ) ;              \\r
+  }\r
+\r
+/*\r
+ * The deinitialize function gets called on glutMainLoop() end. It should clean up\r
+ * everything inside of the freeglut\r
+ */\r
+void fgDeinitialize( void );\r
+\r
+/*\r
+ * Those two functions are used to create/destroy the freeglut internal\r
+ * structures. This actually happens when calling glutInit() and when\r
+ * quitting the glutMainLoop() (which actually happens, when all windows\r
+ * have been closed).\r
+ */\r
+void fgCreateStructure( void );\r
+void fgDestroyStructure( void );\r
+\r
+/* A helper function to check if a display mode is possible to use */\r
+#if TARGET_HOST_POSIX_X11\r
+GLXFBConfig* fgChooseFBConfig( int* numcfgs );\r
+#endif\r
+\r
+/* The window procedure for Win32 events handling */\r
+#if TARGET_HOST_MS_WINDOWS\r
+LRESULT CALLBACK fgWindowProc( HWND hWnd, UINT uMsg,\r
+                               WPARAM wParam, LPARAM lParam );\r
+void fgNewWGLCreateContext( SFG_Window* window );\r
+GLboolean fgSetupPixelFormat( SFG_Window* window, GLboolean checkOnly,\r
+                              unsigned char layer_type );\r
+#endif\r
+\r
+/*\r
+ * Window creation, opening, closing and destruction.\r
+ * Also CallBack clearing/initialization.\r
+ * Defined in freeglut_structure.c, freeglut_window.c.\r
+ */\r
+SFG_Window* fgCreateWindow( SFG_Window* parent, const char* title,\r
+                            GLboolean positionUse, int x, int y,\r
+                            GLboolean sizeUse, int w, int h,\r
+                            GLboolean gameMode, GLboolean isMenu );\r
+void        fgSetWindow ( SFG_Window *window );\r
+void        fgOpenWindow( SFG_Window* window, const char* title,\r
+                          GLboolean positionUse, int x, int y,\r
+                          GLboolean sizeUse, int w, int h,\r
+                          GLboolean gameMode, GLboolean isSubWindow );\r
+void        fgCloseWindow( SFG_Window* window );\r
+void        fgAddToWindowDestroyList ( SFG_Window* window );\r
+void        fgCloseWindows ();\r
+void        fgDestroyWindow( SFG_Window* window );\r
+\r
+/* Menu creation and destruction. Defined in freeglut_structure.c */\r
+SFG_Menu*   fgCreateMenu( FGCBMenu menuCallback );\r
+void        fgDestroyMenu( SFG_Menu* menu );\r
+\r
+/* Joystick device management functions, defined in freeglut_joystick.c */\r
+int         fgJoystickDetect( void );\r
+void        fgInitialiseJoysticks( void );\r
+void        fgJoystickClose( void );\r
+void        fgJoystickPollWindow( SFG_Window* window );\r
+\r
+/* InputDevice Initialisation and Closure */\r
+int         fgInputDeviceDetect( void );\r
+void        fgInitialiseInputDevices( void );\r
+void        fgInputDeviceClose( void );\r
+\r
+/* spaceball device functions, defined in freeglut_spaceball.c */\r
+void        fgInitialiseSpaceball( void );\r
+void        fgSpaceballClose( void );\r
+void        fgSpaceballSetWindow( SFG_Window *window );\r
+\r
+int         fgHasSpaceball( void );\r
+int         fgSpaceballNumButtons( void );\r
+\r
+#if TARGET_HOST_POSIX_X11\r
+int         fgIsSpaceballXEvent( const XEvent *ev );\r
+void        fgSpaceballHandleXEvent( const XEvent *ev );\r
+#endif\r
+\r
+/* Setting the cursor for a given window */\r
+void fgSetCursor ( SFG_Window *window, int cursorID );\r
+\r
+/*\r
+ * Helper function to enumerate through all registered windows\r
+ * and one to enumerate all of a window's subwindows...\r
+ *\r
+ * The GFunc callback for those functions will be defined as:\r
+ *\r
+ *      void enumCallback( gpointer window, gpointer enumerator );\r
+ *\r
+ * where window is the enumerated (sub)window pointer (SFG_Window *),\r
+ * and userData is the a custom user-supplied pointer. Functions\r
+ * are defined and exported from freeglut_structure.c file.\r
+ */\r
+void fgEnumWindows( FGCBenumerator enumCallback, SFG_Enumerator* enumerator );\r
+void fgEnumSubWindows( SFG_Window* window, FGCBenumerator enumCallback,\r
+                       SFG_Enumerator* enumerator );\r
+\r
+#if TARGET_HOST_MS_WINDOWS\r
+/* \r
+ * Helper functions for getting client area from the window rect\r
+ * and the window rect from the client area given the style of the window\r
+ * (or a valid window pointer from which the style can be queried).\r
+ */\r
+void fghComputeWindowRectFromClientArea_UseStyle   ( const DWORD windowStyle , RECT *clientRect, BOOL posIsOutside );\r
+void fghComputeWindowRectFromClientArea_QueryWindow( const SFG_Window *window, RECT *clientRect, BOOL posIsOutside );\r
+void fghComputeClientAreaFromWindowRect            ( const SFG_Window *window, RECT *windowRect, BOOL wantPosOutside );\r
+RECT fghGetClientArea                              ( const SFG_Window *window,                   BOOL wantPosOutside );\r
+void fghGetBorderWidth(const DWORD windowStyle, int* xBorderWidth, int* yBorderWidth);\r
+#endif\r
+\r
+/*\r
+ * fgWindowByHandle returns a (SFG_Window *) value pointing to the\r
+ * first window in the queue matching the specified window handle.\r
+ * The function is defined in freeglut_structure.c file.\r
+ */\r
+SFG_Window* fgWindowByHandle( SFG_WindowHandleType hWindow );\r
+\r
+/*\r
+ * This function is similiar to the previous one, except it is\r
+ * looking for a specified (sub)window identifier. The function\r
+ * is defined in freeglut_structure.c file.\r
+ */\r
+SFG_Window* fgWindowByID( int windowID );\r
+\r
+/*\r
+ * Looks up a menu given its ID. This is easier than fgWindowByXXX\r
+ * as all menus are placed in a single doubly linked list...\r
+ */\r
+SFG_Menu* fgMenuByID( int menuID );\r
+\r
+/*\r
+ * The menu activation and deactivation the code. This is the meat\r
+ * of the menu user interface handling code...\r
+ */\r
+void fgUpdateMenuHighlight ( SFG_Menu *menu );\r
+GLboolean fgCheckActiveMenu ( SFG_Window *window, int button, GLboolean pressed,\r
+                              int mouse_x, int mouse_y );\r
+void fgDeactivateMenu( SFG_Window *window );\r
+\r
+/*\r
+ * This function gets called just before the buffers swap, so that\r
+ * freeglut can display the pull-down menus via OpenGL. The function\r
+ * is defined in freeglut_menu.c file.\r
+ */\r
+void fgDisplayMenu( void );\r
+\r
+/* Elapsed time as per glutGet(GLUT_ELAPSED_TIME). */\r
+long fgElapsedTime( void );\r
+\r
+/* System time in milliseconds */\r
+long unsigned fgSystemTime(void);\r
+\r
+/* List functions */\r
+void fgListInit(SFG_List *list);\r
+void fgListAppend(SFG_List *list, SFG_Node *node);\r
+void fgListRemove(SFG_List *list, SFG_Node *node);\r
+int fgListLength(SFG_List *list);\r
+void fgListInsert(SFG_List *list, SFG_Node *next, SFG_Node *node);\r
+\r
+/* Error Message functions */\r
+void fgError( const char *fmt, ... );\r
+void fgWarning( const char *fmt, ... );\r
+\r
+/*\r
+ * Check if "hint" is present in "property" for "window".  See freeglut_init.c\r
+ */\r
+#if TARGET_HOST_POSIX_X11\r
+int fgHintPresent(Window window, Atom property, Atom hint);\r
+\r
+/* Handler for X extension Events */\r
+#ifdef HAVE_X11_EXTENSIONS_XINPUT2_H\r
+  void fgHandleExtensionEvents( XEvent * ev );\r
+  void fgRegisterDevices( Display* dpy, Window* win );\r
+#endif\r
+\r
+#endif\r
+\r
+SFG_Proc fghGetProcAddress( const char *procName );\r
+\r
+#if TARGET_HOST_MS_WINDOWS\r
+extern void (__cdecl *__glutExitFunc)( int return_value );\r
+#endif\r
+\r
+#endif /* FREEGLUT_INTERNAL_H */\r
+\r
+/*** END OF FILE ***/\r
diff --git a/src/Common/freeglut_joystick.c b/src/Common/freeglut_joystick.c
new file mode 100644 (file)
index 0000000..17eeb00
--- /dev/null
@@ -0,0 +1,1800 @@
+/*\r
+ * freeglut_joystick.c\r
+ *\r
+ * Joystick handling code\r
+ *\r
+ * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.\r
+ * Written by Steve Baker, <sjbaker1@airmail.net>\r
+ *\r
+ * Permission is hereby granted, free of charge, to any person obtaining a\r
+ * copy of this software and associated documentation files (the "Software"),\r
+ * to deal in the Software without restriction, including without limitation\r
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
+ * and/or sell copies of the Software, and to permit persons to whom the\r
+ * Software is furnished to do so, subject to the following conditions:\r
+ *\r
+ * The above copyright notice and this permission notice shall be included\r
+ * in all copies or substantial portions of the Software.\r
+ *\r
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL\r
+ * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
+ */\r
+\r
+/*\r
+ * FreeBSD port by Stephen Montgomery-Smith <stephen@math.missouri.edu>\r
+ *\r
+ * Redone by John Fay 2/4/04 with another look from the PLIB "js" library.\r
+ *  Many thanks for Steve Baker for permission to pull from that library.\r
+ */\r
+\r
+#include <GL/freeglut.h>\r
+#include "freeglut_internal.h"\r
+#ifdef HAVE_SYS_PARAM_H\r
+#    include <sys/param.h>\r
+#endif\r
+\r
+/*\r
+ * Initial defines from "js.h" starting around line 33 with the existing "freeglut_joystick.c"\r
+ * interspersed\r
+ */\r
+\r
+/* XXX It might be better to poll the operating system for the numbers of buttons and\r
+ * XXX axes and then dynamically allocate the arrays.\r
+ */\r
+#define _JS_MAX_BUTTONS 32\r
+\r
+#if TARGET_HOST_MACINTOSH\r
+#    define _JS_MAX_AXES  9\r
+#    include <InputSprocket.h>\r
+#endif\r
+\r
+#if TARGET_HOST_MAC_OSX\r
+#    define _JS_MAX_AXES 16\r
+#    include <mach/mach.h>\r
+#    include <IOKit/IOkitLib.h>\r
+#    include <IOKit/hid/IOHIDLib.h>\r
+#endif\r
+\r
+#if TARGET_HOST_MS_WINDOWS && !defined(_WIN32_WCE)\r
+#    define _JS_MAX_AXES  8\r
+#    include <windows.h>\r
+#    include <mmsystem.h>\r
+#    include <regstr.h>\r
+\r
+#endif\r
+\r
+#if TARGET_HOST_POSIX_X11\r
+#    define _JS_MAX_AXES 16\r
+#    ifdef HAVE_SYS_IOCTL_H\r
+#        include <sys/ioctl.h>\r
+#    endif\r
+#    ifdef HAVE_FCNTL_H\r
+#        include <fcntl.h>\r
+#    endif\r
+#    ifdef HAVE_ERRNO_H\r
+#        include <errno.h>\r
+#        include <string.h>\r
+#    endif\r
+#    if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__)\r
+/* XXX The below hack is done until freeglut's autoconf is updated. */\r
+#        define HAVE_USB_JS    1\r
+\r
+#        if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)\r
+#            include <sys/joystick.h>\r
+#        else\r
+/*\r
+ * XXX NetBSD/amd64 systems may find that they have to steal the\r
+ * XXX /usr/include/machine/joystick.h from a NetBSD/i386 system.\r
+ * XXX I cannot comment whether that works for the interface, but\r
+ * XXX it lets you compile...(^&  I do not think that we can do away\r
+ * XXX with this header.\r
+ */\r
+#            include <machine/joystick.h>         /* For analog joysticks */\r
+#        endif\r
+#        define JS_DATA_TYPE joystick\r
+#        define JS_RETURN (sizeof(struct JS_DATA_TYPE))\r
+#    endif\r
+\r
+#    if defined(__linux__)\r
+#        include <linux/joystick.h>\r
+\r
+/* check the joystick driver version */\r
+#        if defined(JS_VERSION) && JS_VERSION >= 0x010000\r
+#            define JS_NEW\r
+#        endif\r
+#    else  /* Not BSD or Linux */\r
+#        ifndef JS_RETURN\r
+\r
+  /*\r
+   * We'll put these values in and that should\r
+   * allow the code to at least compile when there is\r
+   * no support. The JS open routine should error out\r
+   * and shut off all the code downstream anyway and if\r
+   * the application doesn't use a joystick we'll be fine.\r
+   */\r
+\r
+  struct JS_DATA_TYPE\r
+  {\r
+    int buttons;\r
+    int x;\r
+    int y;\r
+  };\r
+\r
+#            define JS_RETURN (sizeof(struct JS_DATA_TYPE))\r
+#        endif\r
+#    endif\r
+#endif\r
+\r
+#define JS_TRUE  1\r
+#define JS_FALSE 0\r
+\r
+/* BSD defines from "jsBSD.cxx" around lines 42-270 */\r
+\r
+#if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__)\r
+\r
+#    ifdef HAVE_USB_JS\r
+#        if defined(__NetBSD__)\r
+/* XXX The below hack is done until freeglut's autoconf is updated. */\r
+#            define HAVE_USBHID_H 1\r
+#            ifdef HAVE_USBHID_H\r
+#                include <usbhid.h>\r
+#            else\r
+#                include <usb.h>\r
+#            endif\r
+#        elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__)\r
+#            ifdef HAVE_USBHID_H\r
+#                include <usbhid.h>\r
+#            else\r
+#                include <libusbhid.h>\r
+#            endif\r
+#        endif\r
+#        include <legacy/dev/usb/usb.h>\r
+#        include <dev/usb/usbhid.h>\r
+\r
+/* Compatibility with older usb.h revisions */\r
+#        if !defined(USB_MAX_DEVNAMES) && defined(MAXDEVNAMES)\r
+#            define USB_MAX_DEVNAMES MAXDEVNAMES\r
+#        endif\r
+#    endif\r
+\r
+static int hatmap_x[9] = { 0, 0, 1, 1, 1, 0, -1, -1, -1 };\r
+static int hatmap_y[9] = { 0, 1, 1, 0, -1, -1, -1, 0, 1 };\r
+struct os_specific_s {\r
+  char             fname [128 ];\r
+  int              fd;\r
+  int              is_analog;\r
+  /* The following structure members are specific to analog joysticks */\r
+  struct joystick  ajs;\r
+#    ifdef HAVE_USB_JS\r
+  /* The following structure members are specific to USB joysticks */\r
+  struct hid_item *hids;\r
+  int              hid_dlen;\r
+  int              hid_offset;\r
+  char            *hid_data_buf;\r
+  int              axes_usage [ _JS_MAX_AXES ];\r
+#    endif\r
+  /* We keep button and axes state ourselves, as they might not be updated\r
+   * on every read of a USB device\r
+   */\r
+  int              cache_buttons;\r
+  float            cache_axes [ _JS_MAX_AXES ];\r
+};\r
+\r
+/* Idents lower than USB_IDENT_OFFSET are for analog joysticks. */\r
+#    define USB_IDENT_OFFSET    2\r
+\r
+#    define USBDEV "/dev/usb"\r
+#    define UHIDDEV "/dev/uhid"\r
+#    define AJSDEV "/dev/joy"\r
+\r
+#    ifdef HAVE_USB_JS\r
+/*\r
+ * fghJoystickFindUSBdev (and its helper, fghJoystickWalkUSBdev) try to locate\r
+ * the full name of a USB device. If /dev/usbN isn't readable, we punt and\r
+ * return the uhidN device name. We warn the user of this situation once.\r
+ */\r
+static char *fghJoystickWalkUSBdev(int f, char *dev, char *out, int outlen)\r
+{\r
+  struct usb_device_info di;\r
+  int i, a;\r
+  char *cp;\r
+\r
+  for (a = 1; a < USB_MAX_DEVICES; a++) {\r
+    di.udi_addr = a;\r
+    if (ioctl(f, USB_DEVICEINFO, &di) != 0)\r
+      return NULL;\r
+    for (i = 0; i < USB_MAX_DEVNAMES; i++)\r
+      if (di.udi_devnames[i][0] &&\r
+          strcmp(di.udi_devnames[i], dev) == 0) {\r
+        cp =  calloc( 1, strlen(di.udi_vendor) + strlen(di.udi_product) + 2);\r
+        strcpy(cp, di.udi_vendor);\r
+        strcat(cp, " ");\r
+        strcat(cp, di.udi_product);\r
+        strncpy(out, cp, outlen - 1);\r
+        out[outlen - 1] = 0;\r
+        free( cp );\r
+        return out;\r
+      }\r
+  }\r
+  return NULL;\r
+}\r
+\r
+static int fghJoystickFindUSBdev(char *name, char *out, int outlen)\r
+{\r
+  int i, f;\r
+  char buf[50];\r
+  char *cp;\r
+  static int protection_warned = 0;\r
+\r
+  for (i = 0; i < 16; i++) {\r
+    snprintf(buf, sizeof(buf), "%s%d", USBDEV, i);\r
+    f = open(buf, O_RDONLY);\r
+    if (f >= 0) {\r
+      cp = fghJoystickWalkUSBdev(f, name, out, outlen);\r
+      close(f);\r
+      if (cp)\r
+        return 1;\r
+    }\r
+#ifdef HAVE_ERRNO_H\r
+    else if (errno == EACCES) {\r
+      if (!protection_warned) {\r
+        fgWarning ( "Can't open %s for read!", buf );\r
+        protection_warned = 1;\r
+      }\r
+    }\r
+#endif\r
+  }\r
+  return 0;\r
+}\r
+\r
+static int fghJoystickInitializeHID(struct os_specific_s *os,\r
+       int *num_axes, int *num_buttons)\r
+{\r
+    int size, is_joystick;\r
+#   ifdef HAVE_USBHID_H\r
+        int report_id = 0;\r
+#   endif\r
+    struct hid_data *d;\r
+    struct hid_item h;\r
+    report_desc_t rd;\r
+\r
+    if ( ( rd = hid_get_report_desc( os->fd ) ) == 0 )\r
+    {\r
+#ifdef HAVE_ERRNO_H\r
+        fgWarning ( "error: %s: %s", os->fname, strerror( errno ) );\r
+#else\r
+        fgWarning ( "error: %s", os->fname );\r
+#endif\r
+        return FALSE;\r
+    }\r
+\r
+    os->hids = NULL;\r
+\r
+#   ifdef HAVE_USBHID_H\r
+        if( ioctl( os->fd, USB_GET_REPORT_ID, &report_id ) < 0)\r
+        {\r
+            /*** XXX {report_id} may not be the right variable? ***/\r
+#ifdef HAVE_ERRNO_H\r
+            fgWarning ( "error: %s%d: %s", UHIDDEV, report_id, strerror( errno ) );\r
+#else\r
+            fgWarning ( "error: %s%d", UHIDDEV, report_id );\r
+#endif\r
+            return FALSE;\r
+        }\r
+\r
+        size = hid_report_size( rd, hid_input, report_id );\r
+#   else\r
+        size = hid_report_size( rd, 0, hid_input );\r
+#   endif\r
+    os->hid_data_buf = calloc( 1, size );\r
+    os->hid_dlen = size;\r
+\r
+    is_joystick = 0;\r
+#   ifdef HAVE_USBHID_H\r
+        d = hid_start_parse( rd, 1 << hid_input, report_id );\r
+#   else\r
+        d = hid_start_parse( rd, 1 << hid_input );\r
+#   endif\r
+        while( hid_get_item( d, &h ) )\r
+        {\r
+            int usage, page, interesting_hid;\r
+\r
+            page = HID_PAGE( h.usage );\r
+            usage = HID_USAGE( h.usage );\r
+\r
+            /* This test is somewhat too simplistic, but this is how MicroSoft\r
+             * does, so I guess it works for all joysticks/game pads. */\r
+            is_joystick = is_joystick ||\r
+                ( h.kind == hid_collection &&\r
+                  page == HUP_GENERIC_DESKTOP &&\r
+                  ( usage == HUG_JOYSTICK || usage == HUG_GAME_PAD ) );\r
+\r
+            if( h.kind != hid_input )\r
+                continue;\r
+\r
+            if( !is_joystick )\r
+                continue;\r
+\r
+            interesting_hid = TRUE;\r
+            if( page == HUP_GENERIC_DESKTOP )\r
+            {\r
+                switch( usage )\r
+                {\r
+                case HUG_X:\r
+                case HUG_RX:\r
+                case HUG_Y:\r
+                case HUG_RY:\r
+                case HUG_Z:\r
+                case HUG_RZ:\r
+                case HUG_SLIDER:\r
+                    if( *num_axes < _JS_MAX_AXES )\r
+                    {\r
+                        os->axes_usage[ *num_axes ] = usage;\r
+                        ( *num_axes )++;\r
+                    }\r
+                    break;\r
+                case HUG_HAT_SWITCH:\r
+                    /* Allocate two axes for a hat */\r
+                    if( *num_axes + 1 < _JS_MAX_AXES )\r
+                    {\r
+                        os->axes_usage[ *num_axes ] = usage;\r
+                        (*num_axes)++;\r
+                        os->axes_usage[ *num_axes ] = usage;\r
+                        (*num_axes)++;\r
+                    }\r
+                    break;\r
+                default:\r
+                    interesting_hid = FALSE;\r
+                    break;\r
+                }\r
+            }\r
+            else if( page == HUP_BUTTON )\r
+            {\r
+                interesting_hid = ( usage > 0 ) &&\r
+                    ( usage <= _JS_MAX_BUTTONS );\r
+\r
+                if( interesting_hid && usage - 1 > *num_buttons )\r
+                    *num_buttons = usage - 1;\r
+            }\r
+\r
+            if( interesting_hid )\r
+            {\r
+                h.next = os->hids;\r
+                os->hids = calloc( 1, sizeof ( struct hid_item ) );\r
+                *os->hids = h;\r
+            }\r
+        }\r
+        hid_end_parse( d );\r
+\r
+        return os->hids != NULL;\r
+}\r
+#    endif\r
+#endif\r
+\r
+/*\r
+ * Definition of "SFG_Joystick" structure -- based on JS's "jsJoystick" object class.\r
+ * See "js.h" lines 80-178.\r
+ */\r
+typedef struct tagSFG_Joystick SFG_Joystick;\r
+struct tagSFG_Joystick\r
+{\r
+#if TARGET_HOST_MACINTOSH\r
+#define  ISP_NUM_AXIS    9\r
+#define  ISP_NUM_NEEDS  41\r
+    ISpElementReference isp_elem  [ ISP_NUM_NEEDS ];\r
+    ISpNeed             isp_needs [ ISP_NUM_NEEDS ];\r
+#endif\r
+\r
+#if TARGET_HOST_MAC_OSX\r
+    IOHIDDeviceInterface ** hidDev;\r
+    IOHIDElementCookie buttonCookies[41];\r
+    IOHIDElementCookie axisCookies[_JS_MAX_AXES];\r
+    long minReport[_JS_MAX_AXES],\r
+         maxReport[_JS_MAX_AXES];\r
+#endif\r
+\r
+#if TARGET_HOST_MS_WINDOWS && !defined(_WIN32_WCE)\r
+    JOYCAPS     jsCaps;\r
+    JOYINFOEX   js;\r
+    UINT        js_id;\r
+#endif\r
+\r
+\r
+#if TARGET_HOST_POSIX_X11\r
+#   if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__)\r
+       struct os_specific_s *os;\r
+#   endif\r
+\r
+#   ifdef JS_NEW\r
+       struct js_event     js;\r
+       int          tmp_buttons;\r
+       float        tmp_axes [ _JS_MAX_AXES ];\r
+#   else\r
+       struct JS_DATA_TYPE js;\r
+#   endif\r
+\r
+    char         fname [ 128 ];\r
+    int          fd;\r
+#endif\r
+\r
+    int          id;\r
+    GLboolean    error;\r
+    char         name [ 128 ];\r
+    int          num_axes;\r
+    int          num_buttons;\r
+\r
+    float dead_band[ _JS_MAX_AXES ];\r
+    float saturate [ _JS_MAX_AXES ];\r
+    float center   [ _JS_MAX_AXES ];\r
+    float max      [ _JS_MAX_AXES ];\r
+    float min      [ _JS_MAX_AXES ];\r
+};\r
+\r
+/*\r
+ * Functions associated with the "jsJoystick" class in PLIB\r
+ */\r
+#if TARGET_HOST_MAC_OSX\r
+#define K_NUM_DEVICES   32\r
+int numDevices;\r
+io_object_t ioDevices[K_NUM_DEVICES];\r
+\r
+static void fghJoystickFindDevices ( SFG_Joystick* joy, mach_port_t );\r
+static CFDictionaryRef fghJoystickGetCFProperties ( SFG_Joystick* joy, io_object_t );\r
+\r
+static void fghJoystickEnumerateElements ( SFG_Joystick* joy, CFTypeRef element );\r
+/* callback for CFArrayApply */\r
+static void fghJoystickElementEnumerator ( SFG_Joystick* joy, void *element, void* vjs );\r
+\r
+static void fghJoystickAddAxisElement ( SFG_Joystick* joy, CFDictionaryRef axis );\r
+static void fghJoystickAddButtonElement ( SFG_Joystick* joy, CFDictionaryRef button );\r
+static void fghJoystickAddHatElement ( SFG_Joystick* joy, CFDictionaryRef hat );\r
+#endif\r
+\r
+\r
+/*\r
+ * The static joystick structure pointer\r
+ */\r
+#define MAX_NUM_JOYSTICKS  2\r
+static SFG_Joystick *fgJoystick [ MAX_NUM_JOYSTICKS ];\r
+\r
+\r
+/*\r
+ * Read the raw joystick data\r
+ */\r
+static void fghJoystickRawRead( SFG_Joystick* joy, int* buttons, float* axes )\r
+{\r
+#if TARGET_HOST_MS_WINDOWS && !defined(_WIN32_WCE)\r
+    MMRESULT status;\r
+#else\r
+    int status;\r
+#endif\r
+\r
+#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__)\r
+    int len;\r
+#endif\r
+\r
+    int i;\r
+\r
+    /* Defaults */\r
+    if( buttons )\r
+        *buttons = 0;\r
+\r
+    if( axes )\r
+        for( i = 0; i < joy->num_axes; i++ )\r
+            axes[ i ] = 1500.0f;\r
+\r
+    if( joy->error )\r
+        return;\r
+\r
+#if TARGET_HOST_MACINTOSH\r
+    if ( buttons )\r
+    {\r
+        *buttons = 0;\r
+\r
+        for ( i = 0; i < joy->num_buttons; i++ )\r
+        {\r
+            UInt32 state;\r
+            int err = ISpElement_GetSimpleState ( isp_elem [ i + isp_num_axis ], &state);\r
+            ISP_CHECK_ERR(err)\r
+\r
+            *buttons |= state << i;\r
+        }\r
+    }\r
+\r
+    if ( axes )\r
+    {\r
+        for ( i = 0; i < joy->num_axes; i++ )\r
+        {\r
+            UInt32 state;\r
+            int err = ISpElement_GetSimpleState ( isp_elem [ i ], &state );\r
+            ISP_CHECK_ERR(err)\r
+\r
+            axes [i] = (float) state;\r
+        }\r
+    }\r
+#endif\r
+\r
+#if TARGET_HOST_MAC_OSX\r
+    if ( buttons != NULL )\r
+    {\r
+        *buttons = 0;\r
+\r
+        for ( i = 0; i < joy->num_buttons; i++ )\r
+        {\r
+            IOHIDEventStruct hidEvent;\r
+            (*(joy->hidDev))->getElementValue ( joy->hidDev, buttonCookies[i], &hidEvent );\r
+            if ( hidEvent.value )\r
+                *buttons |= 1 << i;\r
+        }\r
+    }\r
+\r
+    if ( axes != NULL )\r
+    {\r
+        for ( i = 0; i < joy->num_axes; i++ )\r
+        {\r
+            IOHIDEventStruct hidEvent;\r
+            (*(joy->hidDev))->getElementValue ( joy->hidDev, axisCookies[i], &hidEvent );\r
+            axes[i] = hidEvent.value;\r
+        }\r
+    }\r
+#endif\r
+\r
+#if TARGET_HOST_MS_WINDOWS && !defined(_WIN32_WCE)\r
+    status = joyGetPosEx( joy->js_id, &joy->js );\r
+\r
+    if ( status != JOYERR_NOERROR )\r
+    {\r
+        joy->error = GL_TRUE;\r
+        return;\r
+    }\r
+\r
+    if ( buttons )\r
+        *buttons = joy->js.dwButtons;\r
+\r
+    if ( axes )\r
+    {\r
+        /*\r
+         * WARNING - Fall through case clauses!!\r
+         */\r
+        switch ( joy->num_axes )\r
+        {\r
+        case 8:\r
+            /* Generate two POV axes from the POV hat angle.\r
+             * Low 16 bits of js.dwPOV gives heading (clockwise from ahead) in\r
+             *   hundredths of a degree, or 0xFFFF when idle.\r
+             */\r
+            if ( ( joy->js.dwPOV & 0xFFFF ) == 0xFFFF )\r
+            {\r
+              axes [ 6 ] = 0.0;\r
+              axes [ 7 ] = 0.0;\r
+            }\r
+            else\r
+            {\r
+              /* This is the contentious bit: how to convert angle to X/Y.\r
+               *    wk: I know of no define for PI that we could use here:\r
+               *    SG_PI would pull in sg, M_PI is undefined for MSVC\r
+               * But the accuracy of the value of PI is very unimportant at\r
+               * this point.\r
+               */\r
+              float s = (float) sin ( ( joy->js.dwPOV & 0xFFFF ) * ( 0.01 * 3.1415926535f / 180.0f ) );\r
+              float c = (float) cos ( ( joy->js.dwPOV & 0xFFFF ) * ( 0.01 * 3.1415926535f / 180.0f ) );\r
+\r
+              /* Convert to coordinates on a square so that North-East\r
+               * is (1,1) not (.7,.7), etc.\r
+               * s and c cannot both be zero so we won't divide by zero.\r
+               */\r
+              if ( fabs ( s ) < fabs ( c ) )\r
+              {\r
+                axes [ 6 ] = ( c < 0.0 ) ? -s/c  : s/c ;\r
+                axes [ 7 ] = ( c < 0.0 ) ? -1.0f : 1.0f;\r
+              }\r
+              else\r
+              {\r
+                axes [ 6 ] = ( s < 0.0 ) ? -1.0f : 1.0f;\r
+                axes [ 7 ] = ( s < 0.0 ) ? -c/s  : c/s ;\r
+              }\r
+            }\r
+\r
+        case 6: axes[5] = (float) joy->js.dwVpos;\r
+        case 5: axes[4] = (float) joy->js.dwUpos;\r
+        case 4: axes[3] = (float) joy->js.dwRpos;\r
+        case 3: axes[2] = (float) joy->js.dwZpos;\r
+        case 2: axes[1] = (float) joy->js.dwYpos;\r
+        case 1: axes[0] = (float) joy->js.dwXpos;\r
+        }\r
+    }\r
+#endif\r
+\r
+#if TARGET_HOST_POSIX_X11\r
+#    if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__)\r
+    if ( joy->os->is_analog )\r
+    {\r
+        int status = read ( joy->os->fd, &joy->os->ajs, sizeof(joy->os->ajs) );\r
+        if ( status != sizeof(joy->os->ajs) ) {\r
+            perror ( joy->os->fname );\r
+            joy->error = GL_TRUE;\r
+            return;\r
+        }\r
+        if ( buttons != NULL )\r
+            *buttons = ( joy->os->ajs.b1 ? 1 : 0 ) | ( joy->os->ajs.b2 ? 2 : 0 );\r
+\r
+        if ( axes != NULL )\r
+        {\r
+            axes[0] = (float) joy->os->ajs.x;\r
+            axes[1] = (float) joy->os->ajs.y;\r
+        }\r
+\r
+        return;\r
+    }\r
+\r
+#        ifdef HAVE_USB_JS\r
+    while ( ( len = read ( joy->os->fd, joy->os->hid_data_buf, joy->os->hid_dlen ) ) == joy->os->hid_dlen )\r
+    {\r
+        struct hid_item *h;\r
+\r
+        for  ( h = joy->os->hids; h; h = h->next )\r
+        {\r
+            int d = hid_get_data ( joy->os->hid_data_buf, h );\r
+\r
+            int page = HID_PAGE ( h->usage );\r
+            int usage = HID_USAGE ( h->usage );\r
+\r
+            if ( page == HUP_GENERIC_DESKTOP )\r
+            {\r
+                int i;\r
+                for ( i = 0; i < joy->num_axes; i++ )\r
+                    if (joy->os->axes_usage[i] == usage)\r
+                    {\r
+                        if (usage == HUG_HAT_SWITCH)\r
+                        {\r
+                            if (d < 0 || d > 8)\r
+                                d = 0;  /* safety */\r
+                            joy->os->cache_axes[i] = (float)hatmap_x[d];\r
+                            joy->os->cache_axes[i + 1] = (float)hatmap_y[d];\r
+                        }\r
+                        else\r
+                        {\r
+                            joy->os->cache_axes[i] = (float)d;\r
+                        }\r
+                        break;\r
+                    }\r
+            }\r
+            else if (page == HUP_BUTTON)\r
+            {\r
+               if (usage > 0 && usage < _JS_MAX_BUTTONS + 1)\r
+               {\r
+                   if (d)\r
+                       joy->os->cache_buttons |=  (1 << ( usage - 1 ));\r
+                   else\r
+                       joy->os->cache_buttons &= ~(1 << ( usage - 1 ));\r
+               }\r
+            }\r
+        }\r
+    }\r
+#ifdef HAVE_ERRNO_H\r
+    if ( len < 0 && errno != EAGAIN )\r
+#else\r
+    if ( len < 0 )\r
+#endif\r
+    {\r
+        perror( joy->os->fname );\r
+        joy->error = 1;\r
+    }\r
+    if ( buttons != NULL ) *buttons = joy->os->cache_buttons;\r
+    if ( axes    != NULL )\r
+        memcpy ( axes, joy->os->cache_axes, sizeof(float) * joy->num_axes );\r
+#        endif\r
+#    endif\r
+\r
+#    ifdef JS_NEW\r
+\r
+    while ( 1 )\r
+    {\r
+        status = read ( joy->fd, &joy->js, sizeof(struct js_event) );\r
+\r
+        if ( status != sizeof( struct js_event ) )\r
+        {\r
+#ifdef HAVE_ERRNO_H\r
+            if ( errno == EAGAIN )\r
+            {\r
+                /* Use the old values */\r
+                if ( buttons )\r
+                    *buttons = joy->tmp_buttons;\r
+                if ( axes )\r
+                    memcpy( axes, joy->tmp_axes,\r
+                            sizeof( float ) * joy->num_axes );\r
+                return;\r
+            }\r
+#endif\r
+\r
+            fgWarning ( "%s", joy->fname );\r
+            joy->error = GL_TRUE;\r
+            return;\r
+        }\r
+\r
+        switch ( joy->js.type & ~JS_EVENT_INIT )\r
+        {\r
+        case JS_EVENT_BUTTON:\r
+            if( joy->js.value == 0 ) /* clear the flag */\r
+                joy->tmp_buttons &= ~( 1 << joy->js.number );\r
+            else\r
+                joy->tmp_buttons |= ( 1 << joy->js.number );\r
+            break;\r
+\r
+        case JS_EVENT_AXIS:\r
+            if ( joy->js.number < joy->num_axes )\r
+            {\r
+                joy->tmp_axes[ joy->js.number ] = ( float )joy->js.value;\r
+\r
+                if( axes )\r
+                    memcpy( axes, joy->tmp_axes, sizeof(float) * joy->num_axes );\r
+            }\r
+            break;\r
+\r
+        default:\r
+            fgWarning ( "PLIB_JS: Unrecognised /dev/js return!?!" );\r
+\r
+            /* use the old values */\r
+\r
+            if ( buttons != NULL ) *buttons = joy->tmp_buttons;\r
+            if ( axes    != NULL )\r
+                memcpy ( axes, joy->tmp_axes, sizeof(float) * joy->num_axes );\r
+\r
+            return;\r
+        }\r
+\r
+        if( buttons )\r
+            *buttons = joy->tmp_buttons;\r
+    }\r
+#    else\r
+\r
+    status = read( joy->fd, &joy->js, JS_RETURN );\r
+\r
+    if ( status != JS_RETURN )\r
+    {\r
+        fgWarning( "%s", joy->fname );\r
+        joy->error = GL_TRUE;\r
+        return;\r
+    }\r
+\r
+    if ( buttons )\r
+#        if defined( __FreeBSD__ ) || defined(__FreeBSD_kernel__) || defined( __NetBSD__ )\r
+        *buttons = ( joy->js.b1 ? 1 : 0 ) | ( joy->js.b2 ? 2 : 0 );  /* XXX Should not be here -- BSD is handled earlier */\r
+#        else\r
+        *buttons = joy->js.buttons;\r
+#        endif\r
+\r
+    if ( axes )\r
+    {\r
+        axes[ 0 ] = (float) joy->js.x;\r
+        axes[ 1 ] = (float) joy->js.y;\r
+    }\r
+#    endif\r
+#endif\r
+}\r
+\r
+/*\r
+ * Correct the joystick axis data\r
+ */\r
+static float fghJoystickFudgeAxis( SFG_Joystick* joy, float value, int axis )\r
+{\r
+    if( value < joy->center[ axis ] )\r
+    {\r
+        float xx = ( value - joy->center[ axis ] ) / ( joy->center[ axis ] -\r
+                                                       joy->min[ axis ] );\r
+\r
+        if( xx < -joy->saturate[ axis ] )\r
+            return -1.0f;\r
+\r
+        if( xx > -joy->dead_band [ axis ] )\r
+            return 0.0f;\r
+\r
+        xx = ( xx + joy->dead_band[ axis ] ) / ( joy->saturate[ axis ] -\r
+                                                 joy->dead_band[ axis ] );\r
+\r
+        return ( xx < -1.0f ) ? -1.0f : xx;\r
+    }\r
+    else\r
+    {\r
+        float xx = ( value - joy->center [ axis ] ) / ( joy->max[ axis ] -\r
+                                                        joy->center[ axis ] );\r
+\r
+        if( xx > joy->saturate[ axis ] )\r
+            return 1.0f;\r
+\r
+        if( xx < joy->dead_band[ axis ] )\r
+            return 0.0f;\r
+\r
+        xx = ( xx - joy->dead_band[ axis ] ) / ( joy->saturate[ axis ] -\r
+                                                 joy->dead_band[ axis ] );\r
+\r
+        return ( xx > 1.0f ) ? 1.0f : xx;\r
+    }\r
+}\r
+\r
+/*\r
+ * Read the corrected joystick data\r
+ */\r
+static void fghJoystickRead( SFG_Joystick* joy, int* buttons, float* axes )\r
+{\r
+    float raw_axes[ _JS_MAX_AXES ];\r
+    int  i;\r
+\r
+    if( joy->error )\r
+    {\r
+        if( buttons )\r
+            *buttons = 0;\r
+\r
+        if( axes )\r
+            for ( i=0; i<joy->num_axes; i++ )\r
+                axes[ i ] = 0.0f;\r
+    }\r
+\r
+    fghJoystickRawRead( joy, buttons, raw_axes );\r
+\r
+    if( axes )\r
+        for( i=0; i<joy->num_axes; i++ )\r
+            axes[ i ] = fghJoystickFudgeAxis( joy, raw_axes[ i ], i );\r
+}\r
+\r
+/*\r
+ * Happy happy happy joy joy joy (happy new year toudi :D)\r
+ */\r
+\r
+\r
+#if TARGET_HOST_MAC_OSX\r
+/** open the IOKit connection, enumerate all the HID devices, add their\r
+interface references to the static array. We then use the array index\r
+as the device number when we come to open() the joystick. */\r
+static int fghJoystickFindDevices ( SFG_Joystick *joy, mach_port_t masterPort )\r
+{\r
+    CFMutableDictionaryRef hidMatch = NULL;\r
+    IOReturn rv = kIOReturnSuccess;\r
+\r
+    io_iterator_t hidIterator;\r
+    io_object_t ioDev;\r
+\r
+    /* build a dictionary matching HID devices */\r
+    hidMatch = IOServiceMatching(kIOHIDDeviceKey);\r
+\r
+    rv = IOServiceGetMatchingServices(masterPort, hidMatch, &hidIterator);\r
+    if (rv != kIOReturnSuccess || !hidIterator) {\r
+      fgWarning( "no joystick (HID) devices found" );\r
+      return;\r
+    }\r
+\r
+    /* iterate */\r
+    while ((ioDev = IOIteratorNext(hidIterator))) {\r
+        /* filter out keyboard and mouse devices */\r
+        CFDictionaryRef properties = getCFProperties(ioDev);\r
+        long usage, page;\r
+\r
+        CFTypeRef refPage = CFDictionaryGetValue (properties, CFSTR(kIOHIDPrimaryUsagePageKey));\r
+        CFTypeRef refUsage = CFDictionaryGetValue (properties, CFSTR(kIOHIDPrimaryUsageKey));\r
+        CFNumberGetValue((CFNumberRef) refUsage, kCFNumberLongType, &usage);\r
+        CFNumberGetValue((CFNumberRef) refPage, kCFNumberLongType, &page);\r
+\r
+        /* keep only joystick devices */\r
+        if ( ( page == kHIDPage_GenericDesktop ) && (\r
+                            (usage == kHIDUsage_GD_Joystick)\r
+                         || (usage == kHIDUsage_GD_GamePad)\r
+                         || (usage == kHIDUsage_GD_MultiAxisController)\r
+                         || (usage == kHIDUsage_GD_Hatswitch) /* last two necessary ? */\r
+            /* add it to the array */\r
+            ioDevices[numDevices++] = ioDev;\r
+    }\r
+\r
+    IOObjectRelease(hidIterator);\r
+}\r
+\r
+static CFDictionaryRef fghJoystickGetCFProperties ( SFG_Joystick *joy, io_object_t ioDev )\r
+{\r
+    IOReturn rv;\r
+    CFMutableDictionaryRef cfProperties;\r
+\r
+#if 0\r
+    /* comment copied from darwin/SDL_sysjoystick.c */\r
+    /* Mac OS X currently is not mirroring all USB properties to HID page so need to look at USB device page also\r
+     * get dictionary for usb properties: step up two levels and get CF dictionary for USB properties\r
+     */\r
+\r
+    io_registry_entry_t parent1, parent2;\r
+\r
+    rv = IORegistryEntryGetParentEntry (ioDev, kIOServicePlane, &parent1);\r
+    if (rv != kIOReturnSuccess) {\r
+        fgWarning ( "error getting device entry parent");\r
+        return NULL;\r
+    }\r
+\r
+    rv = IORegistryEntryGetParentEntry (parent1, kIOServicePlane, &parent2);\r
+    if (rv != kIOReturnSuccess) {\r
+        fgWarning ( "error getting device entry parent 2");\r
+        return NULL;\r
+    }\r
+#endif\r
+\r
+    rv = IORegistryEntryCreateCFProperties( ioDev /*parent2*/,\r
+        &cfProperties, kCFAllocatorDefault, kNilOptions);\r
+    if (rv != kIOReturnSuccess || !cfProperties) {\r
+        fgWarning ( "error getting device properties");\r
+        return NULL;\r
+    }\r
+\r
+    return cfProperties;\r
+}\r
+\r
+static void fghJoystickElementEnumerator ( SFG_Joystick *joy, void *element, void* vjs )\r
+{\r
+      if (CFGetTypeID((CFTypeRef) element) != CFDictionaryGetTypeID()) {\r
+            fgError ( "%s", "element enumerator passed non-dictionary value");\r
+            return;\r
+    }\r
+\r
+      static_cast<jsJoystick*>(vjs)->parseElement ( (CFDictionaryRef) element );\r
+}\r
+\r
+/** element enumerator function : pass NULL for top-level*/\r
+static void fghJoystickEnumerateElements ( SFG_Joystick *joy, CFTypeRef element )\r
+{\r
+      FREEGLUT_INTERNAL_ERROR_EXIT( (CFGetTypeID(element) == CFArrayGetTypeID(),\r
+                                    "Joystick element type mismatch",\r
+                                    "fghJoystickEnumerateElements" );\r
+\r
+      CFRange range = {0, CFArrayGetCount ((CFArrayRef)element)};\r
+      CFArrayApplyFunction((CFArrayRef) element, range,\r
+            &fghJoystickElementEnumerator, joy );\r
+}\r
+\r
+static void fghJoystickAddAxisElement ( SFG_Joystick *joy, CFDictionaryRef axis )\r
+{\r
+    long cookie, lmin, lmax;\r
+    int index = joy->num_axes++;\r
+\r
+    CFNumberGetValue ((CFNumberRef)\r
+        CFDictionaryGetValue ( axis, CFSTR(kIOHIDElementCookieKey) ),\r
+        kCFNumberLongType, &cookie);\r
+\r
+    axisCookies[index] = (IOHIDElementCookie) cookie;\r
+\r
+    CFNumberGetValue ((CFNumberRef)\r
+        CFDictionaryGetValue ( axis, CFSTR(kIOHIDElementMinKey) ),\r
+        kCFNumberLongType, &lmin);\r
+\r
+    CFNumberGetValue ((CFNumberRef)\r
+        CFDictionaryGetValue ( axis, CFSTR(kIOHIDElementMaxKey) ),\r
+        kCFNumberLongType, &lmax);\r
+\r
+    joy->min[index] = lmin;\r
+    joy->max[index] = lmax;\r
+    joy->dead_band[index] = 0.0;\r
+    joy->saturate[index] = 1.0;\r
+    joy->center[index] = (lmax + lmin) * 0.5;\r
+}\r
+\r
+static void fghJoystickAddButtonElement ( SFG_Joystick *joy, CFDictionaryRef button )\r
+{\r
+    long cookie;\r
+    CFNumberGetValue ((CFNumberRef)\r
+            CFDictionaryGetValue ( button, CFSTR(kIOHIDElementCookieKey) ),\r
+            kCFNumberLongType, &cookie);\r
+\r
+    joy->buttonCookies[num_buttons++] = (IOHIDElementCookie) cookie;\r
+    /* anything else for buttons? */\r
+}\r
+\r
+static void fghJoystickAddHatElement ( SFG_Joystick *joy, CFDictionaryRef button )\r
+{\r
+    /* hatCookies[num_hats++] = (IOHIDElementCookie) cookie; */\r
+    /* do we map hats to axes or buttons? */\r
+}\r
+#endif\r
+\r
+#if TARGET_HOST_MS_WINDOWS && !defined(_WIN32_WCE)\r
+/* Inspired by\r
+   http://msdn.microsoft.com/archive/en-us/dnargame/html/msdn_sidewind3d.asp\r
+ */\r
+#    if FREEGLUT_LIB_PRAGMAS\r
+#        pragma comment (lib, "advapi32.lib")\r
+#    endif\r
+\r
+static int fghJoystickGetOEMProductName ( SFG_Joystick* joy, char *buf, int buf_sz )\r
+{\r
+    char buffer [ 256 ];\r
+\r
+    char OEMKey [ 256 ];\r
+\r
+    HKEY  hKey;\r
+    DWORD dwcb;\r
+    LONG  lr;\r
+\r
+    if ( joy->error )\r
+        return 0;\r
+\r
+    /* Open .. MediaResources\CurrentJoystickSettings */\r
+    _snprintf ( buffer, sizeof(buffer), "%s\\%s\\%s",\r
+                REGSTR_PATH_JOYCONFIG, joy->jsCaps.szRegKey,\r
+                REGSTR_KEY_JOYCURR );\r
+\r
+    lr = RegOpenKeyEx ( HKEY_LOCAL_MACHINE, buffer, 0, KEY_QUERY_VALUE, &hKey);\r
+\r
+    if ( lr != ERROR_SUCCESS ) return 0;\r
+\r
+    /* Get OEM Key name */\r
+    dwcb = sizeof(OEMKey);\r
+\r
+    /* JOYSTICKID1-16 is zero-based; registry entries for VJOYD are 1-based. */\r
+    _snprintf ( buffer, sizeof(buffer), "Joystick%d%s", joy->js_id + 1, REGSTR_VAL_JOYOEMNAME );\r
+\r
+    lr = RegQueryValueEx ( hKey, buffer, 0, 0, (LPBYTE) OEMKey, &dwcb);\r
+    RegCloseKey ( hKey );\r
+\r
+    if ( lr != ERROR_SUCCESS ) return 0;\r
+\r
+    /* Open OEM Key from ...MediaProperties */\r
+    _snprintf ( buffer, sizeof(buffer), "%s\\%s", REGSTR_PATH_JOYOEM, OEMKey );\r
+\r
+    lr = RegOpenKeyEx ( HKEY_LOCAL_MACHINE, buffer, 0, KEY_QUERY_VALUE, &hKey );\r
+\r
+    if ( lr != ERROR_SUCCESS ) return 0;\r
+\r
+    /* Get OEM Name */\r
+    dwcb = buf_sz;\r
+\r
+    lr = RegQueryValueEx ( hKey, REGSTR_VAL_JOYOEMNAME, 0, 0, (LPBYTE) buf,\r
+                             &dwcb );\r
+    RegCloseKey ( hKey );\r
+\r
+    if ( lr != ERROR_SUCCESS ) return 0;\r
+\r
+    return 1;\r
+}\r
+#endif\r
+\r
+\r
+static void fghJoystickOpen( SFG_Joystick* joy )\r
+{\r
+    int i = 0;\r
+#if TARGET_HOST_MACINTOSH\r
+    OSStatus err;\r
+#endif\r
+#if TARGET_HOST_MAC_OSX\r
+        IOReturn rv;\r
+        SInt32 score;\r
+        IOCFPlugInInterface **plugin;\r
+\r
+        HRESULT pluginResult;\r
+\r
+        CFDictionaryRef props;\r
+    CFTypeRef topLevelElement;\r
+#endif\r
+#if TARGET_HOST_POSIX_X11\r
+#    if defined( __FreeBSD__ ) || defined(__FreeBSD_kernel__) || defined( __NetBSD__ )\r
+       char *cp;\r
+#    endif\r
+#    ifdef JS_NEW\r
+       unsigned char u;\r
+#    else\r
+#      if defined( __linux__ ) || TARGET_HOST_SOLARIS\r
+         int counter = 0;\r
+#      endif\r
+#    endif\r
+#endif\r
+\r
+    /* Silence gcc, the correct #ifdefs would be too fragile... */\r
+    (void)i;\r
+\r
+    /*\r
+     * Default values (for no joystick -- each conditional will reset the\r
+     * error flag)\r
+     */\r
+    joy->error = TRUE;\r
+    joy->num_axes = joy->num_buttons = 0;\r
+    joy->name[ 0 ] = '\0';\r
+\r
+#if TARGET_HOST_MACINTOSH\r
+    /* XXX FIXME: get joystick name in Mac */\r
+\r
+    err = ISpStartup( );\r
+\r
+    if( err == noErr )\r
+    {\r
+#define ISP_CHECK_ERR(x) if( x != noErr ) { joy->error = GL_TRUE; return; }\r
+\r
+        joy->error = GL_TRUE;\r
+\r
+        /* initialize the needs structure */\r
+        ISpNeed temp_isp_needs[ isp_num_needs ] =\r
+        {\r
+          { "\pX-Axis",  128, 0, 0, kISpElementKind_Axis,   kISpElementLabel_None, 0, 0, 0, 0 },\r
+          { "\pY-Axis",  128, 0, 0, kISpElementKind_Axis,   kISpElementLabel_None, 0, 0, 0, 0 },\r
+          { "\pZ-Axis",    128, 0, 0, kISpElementKind_Axis,   kISpElementLabel_None, 0, 0, 0, 0 },\r
+          { "\pR-Axis",    128, 0, 0, kISpElementKind_Axis,   kISpElementLabel_None, 0, 0, 0, 0 },\r
+          { "\pAxis   4",  128, 0, 0, kISpElementKind_Axis,   kISpElementLabel_None, 0, 0, 0, 0 },\r
+          { "\pAxis   5",  128, 0, 0, kISpElementKind_Axis,   kISpElementLabel_None, 0, 0, 0, 0 },\r
+          { "\pAxis   6",  128, 0, 0, kISpElementKind_Axis,   kISpElementLabel_None, 0, 0, 0, 0 },\r
+          { "\pAxis   7",  128, 0, 0, kISpElementKind_Axis,   kISpElementLabel_None, 0, 0, 0, 0 },\r
+          { "\pAxis   8",  128, 0, 0, kISpElementKind_Axis,   kISpElementLabel_None, 0, 0, 0, 0 },\r
+\r
+          { "\pButton 0",  128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },\r
+          { "\pButton 1",  128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },\r
+          { "\pButton 2",  128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },\r
+          { "\pButton 3",  128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },\r
+          { "\pButton 4",  128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },\r
+          { "\pButton 5",  128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },\r
+          { "\pButton 6",  128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },\r
+          { "\pButton 7",  128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },\r
+          { "\pButton 8",  128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },\r
+          { "\pButton 9",  128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },\r
+          { "\pButton 10", 128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },\r
+          { "\pButton 11", 128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },\r
+          { "\pButton 12", 128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },\r
+          { "\pButton 13", 128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },\r
+          { "\pButton 14", 128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },\r
+          { "\pButton 15", 128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },\r
+          { "\pButton 16", 128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },\r
+          { "\pButton 17", 128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },\r
+          { "\pButton 18", 128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },\r
+          { "\pButton 19", 128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },\r
+          { "\pButton 20", 128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },\r
+          { "\pButton 21", 128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },\r
+          { "\pButton 22", 128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },\r
+          { "\pButton 23", 128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },\r
+          { "\pButton 24", 128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },\r
+          { "\pButton 25", 128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },\r
+          { "\pButton 26", 128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },\r
+          { "\pButton 27", 128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },\r
+          { "\pButton 28", 128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },\r
+          { "\pButton 29", 128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },\r
+          { "\pButton 30", 128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },\r
+          { "\pButton 31", 128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },\r
+        };\r
+\r
+        memcpy( joy->isp_needs, temp_isp_needs, sizeof (temp_isp_needs ) );\r
+\r
+\r
+        /* next two calls allow keyboard and mouse to emulate other input\r
+         * devices (gamepads, joysticks, etc)\r
+         */\r
+        /*\r
+          err = ISpDevices_ActivateClass ( kISpDeviceClass_Keyboard );\r
+          ISP_CHECK_ERR(err)\r
+\r
+\r
+          err = ISpDevices_ActivateClass ( kISpDeviceClass_Mouse );\r
+          ISP_CHECK_ERR(err)\r
+        */\r
+\r
+        err = ISpElement_NewVirtualFromNeeds( joy->isp_num_needs,\r
+                                              joy->isp_needs, joy->isp_elem,\r
+                                              0 );\r
+        ISP_CHECK_ERR( err )\r
+\r
+        err = ISpInit( joy->isp_num_needs, joy->isp_needs, joy->isp_elem,\r
+                       'freeglut', nil, 0, 128, 0 );\r
+        ISP_CHECK_ERR( err )\r
+\r
+        joy->num_buttons = joy->isp_num_needs - joy->isp_num_axis;\r
+        joy->num_axes    = joy->isp_num_axis;\r
+\r
+        for( i = 0; i < joy->num_axes; i++ )\r
+        {\r
+            joy->dead_band[ i ] = 0;\r
+            joy->saturate [ i ] = 1;\r
+            joy->center   [ i ] = kISpAxisMiddle;\r
+            joy->max      [ i ] = kISpAxisMaximum;\r
+            joy->min      [ i ] = kISpAxisMinimum;\r
+        }\r
+\r
+        joy->error = GL_FALSE;\r
+    }\r
+    else\r
+        joy->num_buttons = joy->num_axes = 0;\r
+#endif\r
+\r
+#if TARGET_HOST_MAC_OSX\r
+    if( joy->id >= numDevices )\r
+    {\r
+        fgWarning( "device index out of range in fgJoystickOpen()" );\r
+        return;\r
+    }\r
+\r
+    /* create device interface */\r
+    rv = IOCreatePlugInInterfaceForService( ioDevices[ joy->id ],\r
+                                            kIOHIDDeviceUserClientTypeID,\r
+                                            kIOCFPlugInInterfaceID,\r
+                                            &plugin, &score );\r
+\r
+    if( rv != kIOReturnSuccess )\r
+    {\r
+        fgWarning( "error creating plugin for io device" );\r
+        return;\r
+    }\r
+\r
+    pluginResult = ( *plugin )->QueryInterface(\r
+        plugin,\r
+        CFUUIDGetUUIDBytes(kIOHIDDeviceInterfaceID),\r
+        &( LPVOID )joy->hidDev\r
+    );\r
+\r
+    if( pluginResult != S_OK )\r
+        fgWarning ( "QI-ing IO plugin to HID Device interface failed" );\r
+\r
+    ( *plugin )->Release( plugin ); /* don't leak a ref */\r
+    if( joy->hidDev == NULL )\r
+        return;\r
+\r
+    /* store the interface in this instance */\r
+    rv = ( *( joy->hidDev ) )->open( joy->hidDev, 0 );\r
+    if( rv != kIOReturnSuccess )\r
+    {\r
+        fgWarning( "error opening device interface");\r
+        return;\r
+    }\r
+\r
+    props = getCFProperties( ioDevices[ joy->id ] );\r
+\r
+    /* recursively enumerate all the bits */\r
+    CFTypeRef topLevelElement =\r
+        CFDictionaryGetValue( props, CFSTR( kIOHIDElementKey ) );\r
+    enumerateElements( topLevelElement );\r
+\r
+    CFRelease( props );\r
+#endif\r
+\r
+#if TARGET_HOST_MS_WINDOWS && !defined(_WIN32_WCE)\r
+    joy->js.dwFlags = JOY_RETURNALL;\r
+    joy->js.dwSize  = sizeof( joy->js );\r
+\r
+    memset( &joy->jsCaps, 0, sizeof( joy->jsCaps ) );\r
+\r
+    joy->error =\r
+        ( joyGetDevCaps( joy->js_id, &joy->jsCaps, sizeof( joy->jsCaps ) ) !=\r
+          JOYERR_NOERROR );\r
+\r
+    if( joy->jsCaps.wNumAxes == 0 )\r
+    {\r
+        joy->num_axes = 0;\r
+        joy->error = GL_TRUE;\r
+    }\r
+    else\r
+    {\r
+        /* Device name from jsCaps is often "Microsoft PC-joystick driver",\r
+         * at least for USB.  Try to get the real name from the registry.\r
+         */\r
+        if ( ! fghJoystickGetOEMProductName( joy, joy->name,\r
+                                             sizeof( joy->name ) ) )\r
+        {\r
+            fgWarning( "JS: Failed to read joystick name from registry" );\r
+            strncpy( joy->name, joy->jsCaps.szPname, sizeof( joy->name ) );\r
+        }\r
+\r
+        /* Windows joystick drivers may provide any combination of\r
+         * X,Y,Z,R,U,V,POV - not necessarily the first n of these.\r
+         */\r
+        if( joy->jsCaps.wCaps & JOYCAPS_HASPOV )\r
+        {\r
+            joy->num_axes = _JS_MAX_AXES;\r
+            joy->min[ 7 ] = -1.0; joy->max[ 7 ] = 1.0;  /* POV Y */\r
+            joy->min[ 6 ] = -1.0; joy->max[ 6 ] = 1.0;  /* POV X */\r
+        }\r
+        else\r
+            joy->num_axes = 6;\r
+\r
+        joy->min[ 5 ] = ( float )joy->jsCaps.wVmin;\r
+        joy->max[ 5 ] = ( float )joy->jsCaps.wVmax;\r
+        joy->min[ 4 ] = ( float )joy->jsCaps.wUmin;\r
+        joy->max[ 4 ] = ( float )joy->jsCaps.wUmax;\r
+        joy->min[ 3 ] = ( float )joy->jsCaps.wRmin;\r
+        joy->max[ 3 ] = ( float )joy->jsCaps.wRmax;\r
+        joy->min[ 2 ] = ( float )joy->jsCaps.wZmin;\r
+        joy->max[ 2 ] = ( float )joy->jsCaps.wZmax;\r
+        joy->min[ 1 ] = ( float )joy->jsCaps.wYmin;\r
+        joy->max[ 1 ] = ( float )joy->jsCaps.wYmax;\r
+        joy->min[ 0 ] = ( float )joy->jsCaps.wXmin;\r
+        joy->max[ 0 ] = ( float )joy->jsCaps.wXmax;\r
+    }\r
+\r
+    /* Guess all the rest judging on the axes extremals */\r
+    for( i = 0; i < joy->num_axes; i++ )\r
+    {\r
+        joy->center   [ i ] = ( joy->max[ i ] + joy->min[ i ] ) * 0.5f;\r
+        joy->dead_band[ i ] = 0.0f;\r
+        joy->saturate [ i ] = 1.0f;\r
+    }\r
+#endif\r
+\r
+#if TARGET_HOST_POSIX_X11\r
+#if defined( __FreeBSD__ ) || defined(__FreeBSD_kernel__) || defined( __NetBSD__ )\r
+    for( i = 0; i < _JS_MAX_AXES; i++ )\r
+        joy->os->cache_axes[ i ] = 0.0f;\r
+\r
+    joy->os->cache_buttons = 0;\r
+\r
+    joy->os->fd = open( joy->os->fname, O_RDONLY | O_NONBLOCK);\r
+\r
+#ifdef HAVE_ERRNO_H\r
+    if( joy->os->fd < 0 && errno == EACCES )\r
+        fgWarning ( "%s exists but is not readable by you", joy->os->fname );\r
+#endif\r
+\r
+    joy->error =( joy->os->fd < 0 );\r
+\r
+    if( joy->error )\r
+        return;\r
+\r
+    joy->num_axes = 0;\r
+    joy->num_buttons = 0;\r
+    if( joy->os->is_analog )\r
+    {\r
+        FILE *joyfile;\r
+        char joyfname[ 1024 ];\r
+        int noargs, in_no_axes;\r
+\r
+        float axes [ _JS_MAX_AXES ];\r
+        int buttons[ _JS_MAX_AXES ];\r
+\r
+        joy->num_axes    =  2;\r
+        joy->num_buttons = 32;\r
+\r
+        fghJoystickRawRead( joy, buttons, axes );\r
+        joy->error = axes[ 0 ] < -1000000000.0f;\r
+        if( joy->error )\r
+            return;\r
+\r
+        snprintf( joyfname, sizeof(joyfname), "%s/.joy%drc", getenv( "HOME" ), joy->id );\r
+\r
+        joyfile = fopen( joyfname, "r" );\r
+        joy->error =( joyfile == NULL );\r
+        if( joy->error )\r
+            return;\r
+\r
+        noargs = fscanf( joyfile, "%d%f%f%f%f%f%f", &in_no_axes,\r
+                         &joy->min[ 0 ], &joy->center[ 0 ], &joy->max[ 0 ],\r
+                         &joy->min[ 1 ], &joy->center[ 1 ], &joy->max[ 1 ] );\r
+        joy->error = noargs != 7 || in_no_axes != _JS_MAX_AXES;\r
+        fclose( joyfile );\r
+        if( joy->error )\r
+            return;\r
+\r
+        for( i = 0; i < _JS_MAX_AXES; i++ )\r
+        {\r
+            joy->dead_band[ i ] = 0.0f;\r
+            joy->saturate [ i ] = 1.0f;\r
+        }\r
+\r
+        return;    /* End of analog code */\r
+    }\r
+\r
+#    ifdef HAVE_USB_JS\r
+    if( ! fghJoystickInitializeHID( joy->os, &joy->num_axes,\r
+                                    &joy->num_buttons ) )\r
+    {\r
+        close( joy->os->fd );\r
+        joy->error = GL_TRUE;\r
+        return;\r
+    }\r
+\r
+    cp = strrchr( joy->os->fname, '/' );\r
+    if( cp )\r
+    {\r
+        if( fghJoystickFindUSBdev( &cp[1], joy->name, sizeof( joy->name ) ) ==\r
+            0 )\r
+            strcpy( joy->name, &cp[1] );\r
+    }\r
+\r
+    if( joy->num_axes > _JS_MAX_AXES )\r
+        joy->num_axes = _JS_MAX_AXES;\r
+\r
+    for( i = 0; i < _JS_MAX_AXES; i++ )\r
+    {\r
+        /* We really should get this from the HID, but that data seems\r
+         * to be quite unreliable for analog-to-USB converters. Punt for\r
+         * now.\r
+         */\r
+        if( joy->os->axes_usage[ i ] == HUG_HAT_SWITCH )\r
+        {\r
+            joy->max   [ i ] = 1.0f;\r
+            joy->center[ i ] = 0.0f;\r
+            joy->min   [ i ] = -1.0f;\r
+        }\r
+        else\r
+        {\r
+            joy->max   [ i ] = 255.0f;\r
+            joy->center[ i ] = 127.0f;\r
+            joy->min   [ i ] = 0.0f;\r
+        }\r
+\r
+        joy->dead_band[ i ] = 0.0f;\r
+        joy->saturate[ i ] = 1.0f;\r
+    }\r
+#    endif\r
+#endif\r
+\r
+#if defined( __linux__ ) || TARGET_HOST_SOLARIS\r
+    /* Default for older Linux systems. */\r
+    joy->num_axes    =  2;\r
+    joy->num_buttons = 32;\r
+\r
+#    ifdef JS_NEW\r
+    for( i = 0; i < _JS_MAX_AXES; i++ )\r
+        joy->tmp_axes[ i ] = 0.0f;\r
+\r
+    joy->tmp_buttons = 0;\r
+#    endif\r
+\r
+    joy->fd = open( joy->fname, O_RDONLY );\r
+\r
+    joy->error =( joy->fd < 0 );\r
+\r
+    if( joy->error )\r
+        return;\r
+\r
+    /* Set the correct number of axes for the linux driver */\r
+#    ifdef JS_NEW\r
+    /* Melchior Franz's fixes for big-endian Linuxes since writing\r
+     *  to the upper byte of an uninitialized word doesn't work.\r
+     *  9 April 2003\r
+     */\r
+    ioctl( joy->fd, JSIOCGAXES, &u );\r
+    joy->num_axes = u;\r
+    ioctl( joy->fd, JSIOCGBUTTONS, &u );\r
+    joy->num_buttons = u;\r
+    ioctl( joy->fd, JSIOCGNAME( sizeof( joy->name ) ), joy->name );\r
+    fcntl( joy->fd, F_SETFL, O_NONBLOCK );\r
+#    endif\r
+\r
+    /*\r
+     * The Linux driver seems to return 512 for all axes\r
+     * when no stick is present - but there is a chance\r
+     * that could happen by accident - so it's gotta happen\r
+     * on both axes for at least 100 attempts.\r
+     *\r
+     * PWO: shouldn't be that done somehow wiser on the kernel level?\r
+     */\r
+#    ifndef JS_NEW\r
+    counter = 0;\r
+\r
+    do\r
+    {\r
+        fghJoystickRawRead( joy, NULL, joy->center );\r
+        counter++;\r
+    } while( !joy->error &&\r
+             counter < 100 &&\r
+             joy->center[ 0 ] == 512.0f &&\r
+             joy->center[ 1 ] == 512.0f );\r
+\r
+    if ( counter >= 100 )\r
+        joy->error = GL_TRUE;\r
+#    endif\r
+\r
+    for( i = 0; i < _JS_MAX_AXES; i++ )\r
+    {\r
+#    ifdef JS_NEW\r
+        joy->max   [ i ] =  32767.0f;\r
+        joy->center[ i ] =      0.0f;\r
+        joy->min   [ i ] = -32767.0f;\r
+#    else\r
+        joy->max[ i ] = joy->center[ i ] * 2.0f;\r
+        joy->min[ i ] = 0.0f;\r
+#    endif\r
+        joy->dead_band[ i ] = 0.0f;\r
+        joy->saturate [ i ] = 1.0f;\r
+    }\r
+#endif\r
+#endif\r
+}\r
+\r
+/*\r
+ * This function replaces the constructor method in the JS library.\r
+ */\r
+static void fghJoystickInit( int ident )\r
+{\r
+    if( ident >= MAX_NUM_JOYSTICKS )\r
+      fgError( "Too large a joystick number: %d", ident );\r
+\r
+    if( fgJoystick[ ident ] )\r
+        fgError( "illegal attempt to initialize joystick device again" );\r
+\r
+    fgJoystick[ ident ] =\r
+        ( SFG_Joystick * )calloc( sizeof( SFG_Joystick ), 1 );\r
+\r
+    /* Set defaults */\r
+    fgJoystick[ ident ]->num_axes = fgJoystick[ ident ]->num_buttons = 0;\r
+    fgJoystick[ ident ]->error = GL_TRUE;\r
+\r
+#if TARGET_HOST_MACINTOSH\r
+    fgJoystick[ ident ]->id = ident;\r
+    snprintf( fgJoystick[ ident ]->fname, sizeof(fgJoystick[ ident ]->fname), "/dev/js%d", ident ); /* FIXME */\r
+    fgJoystick[ ident ]->error = GL_FALSE;\r
+#endif\r
+\r
+#if TARGET_HOST_MAC_OSX\r
+    fgJoystick[ ident ]->id = ident;\r
+    fgJoystick[ ident ]->error = GL_FALSE;\r
+    fgJoystick[ ident ]->num_axes = 0;\r
+    fgJoystick[ ident ]->num_buttons = 0;\r
+\r
+    if( numDevices < 0 )\r
+    {\r
+        /* do first-time init (since we can't over-ride jsInit, hmm */\r
+        numDevices = 0;\r
+\r
+        mach_port_t masterPort;\r
+        IOReturn rv = IOMasterPort( bootstrap_port, &masterPort );\r
+        if( rv != kIOReturnSuccess )\r
+        {\r
+            fgWarning( "error getting master Mach port" );\r
+            return;\r
+        }\r
+        fghJoystickFindDevices( masterPort );\r
+    }\r
+\r
+    if ( ident >= numDevices )\r
+    {\r
+        fgJoystick[ ident ]->error = GL_TRUE;\r
+        return;\r
+    }\r
+\r
+    /* get the name now too */\r
+    CFDictionaryRef properties = getCFProperties( ioDevices[ ident ] );\r
+    CFTypeRef ref = CFDictionaryGetValue( properties,\r
+                                          CFSTR( kIOHIDProductKey ) );\r
+    if (!ref)\r
+        ref = CFDictionaryGetValue(properties, CFSTR( "USB Product Name" ) );\r
+\r
+    if( !ref ||\r
+        !CFStringGetCString( ( CFStringRef )ref, name, 128,\r
+                             CFStringGetSystemEncoding( ) ) )\r
+    {\r
+        fgWarning( "error getting device name" );\r
+        name[ 0 ] = '\0';\r
+    }\r
+#endif\r
+\r
+#if TARGET_HOST_MS_WINDOWS && !defined(_WIN32_WCE)\r
+    switch( ident )\r
+    {\r
+    case 0:\r
+        fgJoystick[ ident ]->js_id = JOYSTICKID1;\r
+        fgJoystick[ ident ]->error = GL_FALSE;\r
+        break;\r
+    case 1:\r
+        fgJoystick[ ident ]->js_id = JOYSTICKID2;\r
+        fgJoystick[ ident ]->error = GL_FALSE;\r
+        break;\r
+    default:\r
+        fgJoystick[ ident ]->num_axes = 0;\r
+        fgJoystick[ ident ]->error = GL_TRUE;\r
+        return;\r
+    }\r
+#endif\r
+\r
+#if TARGET_HOST_POSIX_X11\r
+#    if defined( __FreeBSD__ ) || defined(__FreeBSD_kernel__) || defined( __NetBSD__ )\r
+    fgJoystick[ ident ]->id = ident;\r
+    fgJoystick[ ident ]->error = GL_FALSE;\r
+\r
+    fgJoystick[ ident ]->os = calloc( 1, sizeof( struct os_specific_s ) );\r
+    memset( fgJoystick[ ident ]->os, 0, sizeof( struct os_specific_s ) );\r
+    if( ident < USB_IDENT_OFFSET )\r
+        fgJoystick[ ident ]->os->is_analog = 1;\r
+    if( fgJoystick[ ident ]->os->is_analog )\r
+        snprintf( fgJoystick[ ident ]->os->fname, sizeof(fgJoystick[ ident ]->os->fname), "%s%d", AJSDEV, ident );\r
+    else\r
+        snprintf( fgJoystick[ ident ]->os->fname, sizeof(fgJoystick[ ident ]->os->fname), "%s%d", UHIDDEV,\r
+                 ident - USB_IDENT_OFFSET );\r
+#    elif defined( __linux__ )\r
+    fgJoystick[ ident ]->id = ident;\r
+    fgJoystick[ ident ]->error = GL_FALSE;\r
+\r
+    snprintf( fgJoystick[ident]->fname, sizeof(fgJoystick[ident]->fname), "/dev/input/js%d", ident );\r
+\r
+    if( access( fgJoystick[ ident ]->fname, F_OK ) != 0 )\r
+        snprintf( fgJoystick[ ident ]->fname, sizeof(fgJoystick[ ident ]->fname), "/dev/js%d", ident );\r
+#    endif\r
+#endif\r
+\r
+    fghJoystickOpen( fgJoystick[ ident  ] );\r
+}\r
+\r
+/*\r
+ * Try initializing all the joysticks (well, both of them)\r
+ */\r
+void fgInitialiseJoysticks ( void )\r
+{\r
+    if( !fgState.JoysticksInitialised )\r
+    {\r
+        int ident ;\r
+        for ( ident = 0; ident < MAX_NUM_JOYSTICKS; ident++ )\r
+            fghJoystickInit( ident );\r
+\r
+        fgState.JoysticksInitialised = GL_TRUE;\r
+    }\r
+}\r
+\r
+/*\r
+ *\r
+ */\r
+void fgJoystickClose( void )\r
+{\r
+    int ident ;\r
+    for( ident = 0; ident < MAX_NUM_JOYSTICKS; ident++ )\r
+    {\r
+        if( fgJoystick[ ident ] )\r
+        {\r
+\r
+#if TARGET_HOST_MACINTOSH\r
+            ISpSuspend( );\r
+            ISpStop( );\r
+            ISpShutdown( );\r
+#endif\r
+\r
+#if TARGET_HOST_MAC_OSX\r
+            ( *( fgJoystick[ ident ]->hidDev ) )->\r
+                close( fgJoystick[ ident ]->hidDev );\r
+#endif\r
+\r
+#if TARGET_HOST_MS_WINDOWS && !defined(_WIN32_WCE)\r
+            /* Do nothing special */\r
+#endif\r
+\r
+#if TARGET_HOST_POSIX_X11\r
+#if defined( __FreeBSD__ ) || defined(__FreeBSD_kernel__) || defined( __NetBSD__ )\r
+            if( fgJoystick[ident]->os )\r
+            {\r
+                if( ! fgJoystick[ ident ]->error )\r
+                    close( fgJoystick[ ident ]->os->fd );\r
+#ifdef HAVE_USB_JS\r
+                if( fgJoystick[ ident ]->os->hids )\r
+                    free (fgJoystick[ ident ]->os->hids);\r
+                if( fgJoystick[ ident ]->os->hid_data_buf )\r
+                    free( fgJoystick[ ident ]->os->hid_data_buf );\r
+#endif\r
+                free( fgJoystick[ident]->os );\r
+            }\r
+#endif\r
+\r
+            if( ! fgJoystick[ident]->error )\r
+                close( fgJoystick[ ident ]->fd );\r
+#endif\r
+\r
+            free( fgJoystick[ ident ] );\r
+            fgJoystick[ ident ] = NULL;\r
+            /* show joystick has been deinitialized */\r
+        }\r
+    }\r
+}\r
+\r
+/*\r
+ * Polls the joystick and executes the joystick callback hooked to the\r
+ * window specified in the function's parameter:\r
+ */\r
+void fgJoystickPollWindow( SFG_Window* window )\r
+{\r
+    float axes[ _JS_MAX_AXES ];\r
+    int buttons;\r
+    int ident;\r
+\r
+    freeglut_return_if_fail( window );\r
+    freeglut_return_if_fail( FETCH_WCB( *window, Joystick ) );\r
+\r
+    for( ident = 0; ident < MAX_NUM_JOYSTICKS; ident++ )\r
+    {\r
+        if( fgJoystick[ident] )\r
+        {\r
+            fghJoystickRead( fgJoystick[ident], &buttons, axes );\r
+\r
+            if( !fgJoystick[ident]->error )\r
+                INVOKE_WCB( *window, Joystick,\r
+                            ( buttons,\r
+                              (int) ( axes[ 0 ] * 1000.0f ),\r
+                              (int) ( axes[ 1 ] * 1000.0f ),\r
+                              (int) ( axes[ 2 ] * 1000.0f ) )\r
+                );\r
+        }\r
+    }\r
+}\r
+\r
+/*\r
+ * Implementation for glutDeviceGet(GLUT_HAS_JOYSTICK)\r
+ */\r
+int fgJoystickDetect( void )\r
+{\r
+    int ident;\r
+\r
+    fgInitialiseJoysticks ();\r
+\r
+    if ( !fgState.JoysticksInitialised )\r
+        return 0;\r
+\r
+    for( ident=0; ident<MAX_NUM_JOYSTICKS; ident++ )\r
+        if( fgJoystick[ident] && !fgJoystick[ident]->error )\r
+            return 1;\r
+\r
+    return 0;\r
+}\r
+\r
+/*\r
+ * Joystick information functions\r
+ */\r
+int  glutJoystickGetNumAxes( int ident )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutJoystickGetNumAxes" );\r
+    return fgJoystick[ ident ]->num_axes;\r
+}\r
+int  glutJoystickGetNumButtons( int ident )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutJoystickGetNumButtons" );\r
+    return fgJoystick[ ident ]->num_buttons;\r
+}\r
+int  glutJoystickNotWorking( int ident )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutJoystickNotWorking" );\r
+    return fgJoystick[ ident ]->error;\r
+}\r
+\r
+float glutJoystickGetDeadBand( int ident, int axis )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutJoystickGetDeadBand" );\r
+    return fgJoystick[ ident ]->dead_band [ axis ];\r
+}\r
+void  glutJoystickSetDeadBand( int ident, int axis, float db )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutJoystickSetDeadBand" );\r
+    fgJoystick[ ident ]->dead_band[ axis ] = db;\r
+}\r
+\r
+float glutJoystickGetSaturation( int ident, int axis )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutJoystickGetSaturation" );\r
+    return fgJoystick[ ident ]->saturate[ axis ];\r
+}\r
+void  glutJoystickSetSaturation( int ident, int axis, float st )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutJoystickSetSaturation" );\r
+    fgJoystick[ ident ]->saturate [ axis ] = st;\r
+}\r
+\r
+void glutJoystickSetMinRange( int ident, float *axes )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutJoystickSetMinRange" );\r
+    memcpy( fgJoystick[ ident ]->min, axes,\r
+            fgJoystick[ ident ]->num_axes * sizeof( float ) );\r
+}\r
+void glutJoystickSetMaxRange( int ident, float *axes )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutJoystickSetMaxRange" );\r
+    memcpy( fgJoystick[ ident ]->max, axes,\r
+            fgJoystick[ ident ]->num_axes * sizeof( float ) );\r
+}\r
+void glutJoystickSetCenter( int ident, float *axes )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutJoystickSetCenter" );\r
+    memcpy( fgJoystick[ ident ]->center, axes,\r
+            fgJoystick[ ident ]->num_axes * sizeof( float ) );\r
+}\r
+\r
+void glutJoystickGetMinRange( int ident, float *axes )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutJoystickGetMinRange" );\r
+    memcpy( axes, fgJoystick[ ident ]->min,\r
+            fgJoystick[ ident ]->num_axes * sizeof( float ) );\r
+}\r
+void glutJoystickGetMaxRange( int ident, float *axes )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutJoystickGetMaxRange" );\r
+    memcpy( axes, fgJoystick[ ident ]->max,\r
+            fgJoystick[ ident ]->num_axes * sizeof( float ) );\r
+}\r
+void glutJoystickGetCenter( int ident, float *axes )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutJoystickGetCenter" );\r
+    memcpy( axes, fgJoystick[ ident ]->center,\r
+            fgJoystick[ ident ]->num_axes * sizeof( float ) );\r
+}\r
+\r
+/*** END OF FILE ***/\r
diff --git a/src/Common/freeglut_main.c b/src/Common/freeglut_main.c
new file mode 100644 (file)
index 0000000..2eed2d4
--- /dev/null
@@ -0,0 +1,2511 @@
+/*\r
+ * freeglut_main.c\r
+ *\r
+ * The windows message processing methods.\r
+ *\r
+ * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.\r
+ * Written by Pawel W. Olszta, <olszta@sourceforge.net>\r
+ * Creation date: Fri Dec 3 1999\r
+ *\r
+ * Permission is hereby granted, free of charge, to any person obtaining a\r
+ * copy of this software and associated documentation files (the "Software"),\r
+ * to deal in the Software without restriction, including without limitation\r
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
+ * and/or sell copies of the Software, and to permit persons to whom the\r
+ * Software is furnished to do so, subject to the following conditions:\r
+ *\r
+ * The above copyright notice and this permission notice shall be included\r
+ * in all copies or substantial portions of the Software.\r
+ *\r
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL\r
+ * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
+ */\r
+\r
+#include <GL/freeglut.h>\r
+#include "freeglut_internal.h"\r
+#ifdef HAVE_ERRNO_H\r
+#    include <errno.h>\r
+#endif\r
+#include <stdarg.h>\r
+#ifdef  HAVE_VFPRINTF\r
+#    define VFPRINTF(s,f,a) vfprintf((s),(f),(a))\r
+#elif defined(HAVE__DOPRNT)\r
+#    define VFPRINTF(s,f,a) _doprnt((f),(a),(s))\r
+#else\r
+#    define VFPRINTF(s,f,a)\r
+#endif\r
+\r
+#ifdef _WIN32_WCE\r
+\r
+typedef struct GXDisplayProperties GXDisplayProperties;\r
+typedef struct GXKeyList GXKeyList;\r
+#include <gx.h>\r
+\r
+typedef struct GXKeyList (*GXGETDEFAULTKEYS)(int);\r
+typedef int (*GXOPENINPUT)();\r
+\r
+GXGETDEFAULTKEYS GXGetDefaultKeys_ = NULL;\r
+GXOPENINPUT GXOpenInput_ = NULL;\r
+\r
+struct GXKeyList gxKeyList;\r
+\r
+#endif /* _WIN32_WCE */\r
+\r
+/*\r
+ * Try to get the maximum value allowed for ints, falling back to the minimum\r
+ * guaranteed by ISO C99 if there is no suitable header.\r
+ */\r
+#ifdef HAVE_LIMITS_H\r
+#    include <limits.h>\r
+#endif\r
+#ifndef INT_MAX\r
+#    define INT_MAX 32767\r
+#endif\r
+\r
+#ifndef MIN\r
+#    define MIN(a,b) (((a)<(b)) ? (a) : (b))\r
+#endif\r
+\r
+#ifdef WM_TOUCH\r
+    typedef BOOL (WINAPI *pGetTouchInputInfo)(HTOUCHINPUT,UINT,PTOUCHINPUT,int);\r
+    typedef BOOL (WINAPI *pCloseTouchInputHandle)(HTOUCHINPUT);\r
+       static pGetTouchInputInfo fghGetTouchInputInfo = (pGetTouchInputInfo)0xDEADBEEF;\r
+       static pCloseTouchInputHandle fghCloseTouchInputHandle = (pCloseTouchInputHandle)0xDEADBEEF;\r
+#endif\r
+\r
+/*\r
+ * TODO BEFORE THE STABLE RELEASE:\r
+ *\r
+ * There are some issues concerning window redrawing under X11, and maybe\r
+ * some events are not handled. The Win32 version lacks some more features,\r
+ * but seems acceptable for not demanding purposes.\r
+ *\r
+ * Need to investigate why the X11 version breaks out with an error when\r
+ * closing a window (using the window manager, not glutDestroyWindow)...\r
+ */\r
+\r
+/* -- PRIVATE FUNCTIONS ---------------------------------------------------- */\r
+\r
+/*\r
+ * Handle a window configuration change. When no reshape\r
+ * callback is hooked, the viewport size is updated to\r
+ * match the new window size.\r
+ */\r
+static void fghReshapeWindow ( SFG_Window *window, int width, int height )\r
+{\r
+    SFG_Window *current_window = fgStructure.CurrentWindow;\r
+\r
+    freeglut_return_if_fail( window != NULL );\r
+\r
+#if TARGET_HOST_POSIX_X11\r
+\r
+    XResizeWindow( fgDisplay.Display, window->Window.Handle,\r
+                   width, height );\r
+    XFlush( fgDisplay.Display ); /* XXX Shouldn't need this */\r
+\r
+#elif TARGET_HOST_MS_WINDOWS && !defined(_WIN32_WCE)\r
+    {\r
+        RECT windowRect;\r
+\r
+        /*\r
+         * For windowed mode, get the current position of the\r
+         * window and resize taking the size of the frame\r
+         * decorations into account.\r
+         */\r
+\r
+        /* "GetWindowRect" returns the pixel coordinates of the outside of the window */\r
+        GetWindowRect( window->Window.Handle, &windowRect );\r
+\r
+        /* Create rect in FreeGLUT format, (X,Y) topleft outside window, WxH of client area */\r
+        windowRect.right    = windowRect.left+width;\r
+        windowRect.bottom   = windowRect.top+height;\r
+\r
+        if (window->Parent == NULL)\r
+            /* get the window rect from this to feed to SetWindowPos, correct for window decorations */\r
+            fghComputeWindowRectFromClientArea_QueryWindow(window,&windowRect,TRUE);\r
+        else\r
+        {\r
+            /* correct rect for position client area of parent window\r
+             * (SetWindowPos input for child windows is in coordinates\r
+             * relative to the parent's client area).\r
+             * Child windows don't have decoration, so no need to correct\r
+             * for them.\r
+             */\r
+            RECT parentRect;\r
+            parentRect = fghGetClientArea( window->Parent, FALSE );\r
+            windowRect.left   -= parentRect.left;\r
+            windowRect.right  -= parentRect.left;\r
+            windowRect.top    -= parentRect.top;\r
+            windowRect.bottom -= parentRect.top;\r
+        }\r
+        \r
+        /* Do the actual resizing */\r
+        SetWindowPos( window->Window.Handle,\r
+                      HWND_TOP,\r
+                      windowRect.left, windowRect.top,\r
+                      windowRect.right - windowRect.left,\r
+                      windowRect.bottom- windowRect.top,\r
+                      SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOSENDCHANGING |\r
+                      SWP_NOZORDER\r
+        );\r
+    }\r
+#endif\r
+\r
+    if( FETCH_WCB( *window, Reshape ) )\r
+        INVOKE_WCB( *window, Reshape, ( width, height ) );\r
+    else\r
+    {\r
+        fgSetWindow( window );\r
+        glViewport( 0, 0, width, height );\r
+    }\r
+\r
+    /*\r
+     * Force a window redraw.  In Windows at least this is only a partial\r
+     * solution:  if the window is increasing in size in either dimension,\r
+     * the already-drawn part does not get drawn again and things look funny.\r
+     * But without this we get this bad behaviour whenever we resize the\r
+     * window.\r
+     */\r
+    window->State.Redisplay = GL_TRUE;\r
+\r
+    if( window->IsMenu )\r
+        fgSetWindow( current_window );\r
+}\r
+\r
+/*\r
+ * Calls a window's redraw method. This is used when\r
+ * a redraw is forced by the incoming window messages.\r
+ */\r
+static void fghRedrawWindow ( SFG_Window *window )\r
+{\r
+    SFG_Window *current_window = fgStructure.CurrentWindow;\r
+\r
+    freeglut_return_if_fail( window );\r
+    freeglut_return_if_fail( FETCH_WCB ( *window, Display ) );\r
+\r
+    window->State.Redisplay = GL_FALSE;\r
+\r
+    freeglut_return_if_fail( window->State.Visible );\r
+\r
+    fgSetWindow( window );\r
+\r
+    if( window->State.NeedToResize )\r
+    {\r
+        fghReshapeWindow(\r
+            window,\r
+            window->State.Width,\r
+            window->State.Height\r
+        );\r
+\r
+        window->State.NeedToResize = GL_FALSE;\r
+    }\r
+\r
+    INVOKE_WCB( *window, Display, ( ) );\r
+\r
+    fgSetWindow( current_window );\r
+}\r
+\r
+/*\r
+ * A static helper function to execute display callback for a window\r
+ */\r
+static void fghcbDisplayWindow( SFG_Window *window,\r
+                                SFG_Enumerator *enumerator )\r
+{\r
+    if( window->State.Redisplay &&\r
+        window->State.Visible )\r
+    {\r
+        window->State.Redisplay = GL_FALSE;\r
+\r
+#if TARGET_HOST_POSIX_X11\r
+        fghRedrawWindow ( window ) ;\r
+#elif TARGET_HOST_MS_WINDOWS\r
+\r
+        RedrawWindow(\r
+            window->Window.Handle, NULL, NULL,\r
+            RDW_NOERASE | RDW_INTERNALPAINT | RDW_INVALIDATE | RDW_UPDATENOW\r
+        );\r
+#endif\r
+    }\r
+\r
+    fgEnumSubWindows( window, fghcbDisplayWindow, enumerator );\r
+}\r
+\r
+/*\r
+ * Make all windows perform a display call\r
+ */\r
+static void fghDisplayAll( void )\r
+{\r
+    SFG_Enumerator enumerator;\r
+\r
+    enumerator.found = GL_FALSE;\r
+    enumerator.data  =  NULL;\r
+\r
+    fgEnumWindows( fghcbDisplayWindow, &enumerator );\r
+}\r
+\r
+/*\r
+ * Window enumerator callback to check for the joystick polling code\r
+ */\r
+static void fghcbCheckJoystickPolls( SFG_Window *window,\r
+                                     SFG_Enumerator *enumerator )\r
+{\r
+    long int checkTime = fgElapsedTime( );\r
+\r
+    if( window->State.JoystickLastPoll + window->State.JoystickPollRate <=\r
+        checkTime )\r
+    {\r
+#if !defined(_WIN32_WCE)\r
+        fgJoystickPollWindow( window );\r
+#endif /* !defined(_WIN32_WCE) */\r
+        window->State.JoystickLastPoll = checkTime;\r
+    }\r
+\r
+    fgEnumSubWindows( window, fghcbCheckJoystickPolls, enumerator );\r
+}\r
+\r
+/*\r
+ * Check all windows for joystick polling\r
+ */\r
+static void fghCheckJoystickPolls( void )\r
+{\r
+    SFG_Enumerator enumerator;\r
+\r
+    enumerator.found = GL_FALSE;\r
+    enumerator.data  =  NULL;\r
+\r
+    fgEnumWindows( fghcbCheckJoystickPolls, &enumerator );\r
+}\r
+\r
+/*\r
+ * Check the global timers\r
+ */\r
+static void fghCheckTimers( void )\r
+{\r
+    long checkTime = fgElapsedTime( );\r
+\r
+    while( fgState.Timers.First )\r
+    {\r
+        SFG_Timer *timer = fgState.Timers.First;\r
+\r
+        if( timer->TriggerTime > checkTime )\r
+            break;\r
+\r
+        fgListRemove( &fgState.Timers, &timer->Node );\r
+        fgListAppend( &fgState.FreeTimers, &timer->Node );\r
+\r
+        timer->Callback( timer->ID );\r
+    }\r
+}\r
+\r
\r
+/* Platform-dependent time in milliseconds, as an unsigned 32-bit integer.\r
+ * This value wraps every 49.7 days, but integer overflows cancel\r
+ * when subtracting an initial start time, unless the total time exceeds\r
+ * 32-bit, where the GLUT API return value is also overflowed.\r
+ */  \r
+unsigned long fgSystemTime(void) {\r
+#if TARGET_HOST_SOLARIS || HAVE_GETTIMEOFDAY\r
+    struct timeval now;\r
+    gettimeofday( &now, NULL );\r
+    return now.tv_usec/1000 + now.tv_sec*1000;\r
+#elif TARGET_HOST_MS_WINDOWS\r
+#    if defined(_WIN32_WCE)\r
+    return GetTickCount();\r
+#    else\r
+    return timeGetTime();\r
+#    endif\r
+#endif\r
+}\r
+  \r
+/*\r
+ * Elapsed Time\r
+ */\r
+long fgElapsedTime( void )\r
+{\r
+    return (long) (fgSystemTime() - fgState.Time);\r
+}\r
+\r
+/*\r
+ * Error Messages.\r
+ */\r
+void fgError( const char *fmt, ... )\r
+{\r
+    va_list ap;\r
+\r
+    if (fgState.ErrorFunc) {\r
+\r
+        va_start( ap, fmt );\r
+\r
+        /* call user set error handler here */\r
+        fgState.ErrorFunc(fmt, ap);\r
+\r
+        va_end( ap );\r
+\r
+    } else {\r
+\r
+        va_start( ap, fmt );\r
+\r
+        fprintf( stderr, "freeglut ");\r
+        if( fgState.ProgramName )\r
+            fprintf( stderr, "(%s): ", fgState.ProgramName );\r
+        VFPRINTF( stderr, fmt, ap );\r
+        fprintf( stderr, "\n" );\r
+\r
+        va_end( ap );\r
+\r
+        if ( fgState.Initialised )\r
+            fgDeinitialize ();\r
+\r
+        exit( 1 );\r
+    }\r
+}\r
+\r
+void fgWarning( const char *fmt, ... )\r
+{\r
+    va_list ap;\r
+\r
+    if (fgState.WarningFunc) {\r
+\r
+        va_start( ap, fmt );\r
+\r
+        /* call user set warning handler here */\r
+        fgState.WarningFunc(fmt, ap);\r
+\r
+        va_end( ap );\r
+\r
+    } else {\r
+\r
+        va_start( ap, fmt );\r
+\r
+        fprintf( stderr, "freeglut ");\r
+        if( fgState.ProgramName )\r
+            fprintf( stderr, "(%s): ", fgState.ProgramName );\r
+        VFPRINTF( stderr, fmt, ap );\r
+        fprintf( stderr, "\n" );\r
+\r
+        va_end( ap );\r
+    }\r
+}\r
+\r
+\r
+/*\r
+ * Indicates whether Joystick events are being used by ANY window.\r
+ *\r
+ * The current mechanism is to walk all of the windows and ask if\r
+ * there is a joystick callback.  We have a short-circuit early\r
+ * return if we find any joystick handler registered.\r
+ *\r
+ * The real way to do this is to make use of the glutTimer() API\r
+ * to more cleanly re-implement the joystick API.  Then, this code\r
+ * and all other "joystick timer" code can be yanked.\r
+ *\r
+ */\r
+static void fghCheckJoystickCallback( SFG_Window* w, SFG_Enumerator* e)\r
+{\r
+    if( FETCH_WCB( *w, Joystick ) )\r
+    {\r
+        e->found = GL_TRUE;\r
+        e->data = w;\r
+    }\r
+    fgEnumSubWindows( w, fghCheckJoystickCallback, e );\r
+}\r
+static int fghHaveJoystick( void )\r
+{\r
+    SFG_Enumerator enumerator;\r
+\r
+    enumerator.found = GL_FALSE;\r
+    enumerator.data = NULL;\r
+    fgEnumWindows( fghCheckJoystickCallback, &enumerator );\r
+    return !!enumerator.data;\r
+}\r
+static void fghHavePendingRedisplaysCallback( SFG_Window* w, SFG_Enumerator* e)\r
+{\r
+    if( w->State.Redisplay && w->State.Visible )\r
+    {\r
+        e->found = GL_TRUE;\r
+        e->data = w;\r
+    }\r
+    fgEnumSubWindows( w, fghHavePendingRedisplaysCallback, e );\r
+}\r
+static int fghHavePendingRedisplays (void)\r
+{\r
+    SFG_Enumerator enumerator;\r
+\r
+    enumerator.found = GL_FALSE;\r
+    enumerator.data = NULL;\r
+    fgEnumWindows( fghHavePendingRedisplaysCallback, &enumerator );\r
+    return !!enumerator.data;\r
+}\r
+/*\r
+ * Returns the number of GLUT ticks (milliseconds) till the next timer event.\r
+ */\r
+static long fghNextTimer( void )\r
+{\r
+    long ret = INT_MAX;\r
+    SFG_Timer *timer = fgState.Timers.First;\r
+\r
+    if( timer )\r
+        ret = timer->TriggerTime - fgElapsedTime();\r
+    if( ret < 0 )\r
+        ret = 0;\r
+\r
+    return ret;\r
+}\r
+/*\r
+ * Does the magic required to relinquish the CPU until something interesting\r
+ * happens.\r
+ */\r
+static void fghSleepForEvents( void )\r
+{\r
+    long msec;\r
+\r
+    if( fgState.IdleCallback || fghHavePendingRedisplays( ) )\r
+        return;\r
+\r
+    msec = fghNextTimer( );\r
+    /* XXX Use GLUT timers for joysticks... */\r
+    /* XXX Dumb; forces granularity to .01sec */\r
+    if( fghHaveJoystick( ) && ( msec > 10 ) )     \r
+        msec = 10;\r
+\r
+#if TARGET_HOST_POSIX_X11\r
+    /*\r
+     * Possibly due to aggressive use of XFlush() and friends,\r
+     * it is possible to have our socket drained but still have\r
+     * unprocessed events.  (Or, this may just be normal with\r
+     * X, anyway?)  We do non-trivial processing of X events\r
+     * after the event-reading loop, in any case, so we\r
+     * need to allow that we may have an empty socket but non-\r
+     * empty event queue.\r
+     */\r
+    if( ! XPending( fgDisplay.Display ) )\r
+    {\r
+        fd_set fdset;\r
+        int err;\r
+        int socket;\r
+        struct timeval wait;\r
+\r
+        socket = ConnectionNumber( fgDisplay.Display );\r
+        FD_ZERO( &fdset );\r
+        FD_SET( socket, &fdset );\r
+        wait.tv_sec = msec / 1000;\r
+        wait.tv_usec = (msec % 1000) * 1000;\r
+        err = select( socket+1, &fdset, NULL, NULL, &wait );\r
+\r
+#ifdef HAVE_ERRNO_H\r
+        if( ( -1 == err ) && ( errno != EINTR ) )\r
+            fgWarning ( "freeglut select() error: %d", errno );\r
+#endif\r
+    }\r
+#elif TARGET_HOST_MS_WINDOWS\r
+    MsgWaitForMultipleObjects( 0, NULL, FALSE, msec, QS_ALLINPUT );\r
+#endif\r
+}\r
+\r
+#if TARGET_HOST_POSIX_X11\r
+/*\r
+ * Returns GLUT modifier mask for the state field of an X11 event.\r
+ */\r
+int fghGetXModifiers( int state )\r
+{\r
+    int ret = 0;\r
+\r
+    if( state & ( ShiftMask | LockMask ) )\r
+        ret |= GLUT_ACTIVE_SHIFT;\r
+    if( state & ControlMask )\r
+        ret |= GLUT_ACTIVE_CTRL;\r
+    if( state & Mod1Mask )\r
+        ret |= GLUT_ACTIVE_ALT;\r
+\r
+    return ret;\r
+}\r
+#endif\r
+\r
+\r
+#if TARGET_HOST_POSIX_X11 && _DEBUG\r
+\r
+static const char* fghTypeToString( int type )\r
+{\r
+    switch( type ) {\r
+    case KeyPress: return "KeyPress";\r
+    case KeyRelease: return "KeyRelease";\r
+    case ButtonPress: return "ButtonPress";\r
+    case ButtonRelease: return "ButtonRelease";\r
+    case MotionNotify: return "MotionNotify";\r
+    case EnterNotify: return "EnterNotify";\r
+    case LeaveNotify: return "LeaveNotify";\r
+    case FocusIn: return "FocusIn";\r
+    case FocusOut: return "FocusOut";\r
+    case KeymapNotify: return "KeymapNotify";\r
+    case Expose: return "Expose";\r
+    case GraphicsExpose: return "GraphicsExpose";\r
+    case NoExpose: return "NoExpose";\r
+    case VisibilityNotify: return "VisibilityNotify";\r
+    case CreateNotify: return "CreateNotify";\r
+    case DestroyNotify: return "DestroyNotify";\r
+    case UnmapNotify: return "UnmapNotify";\r
+    case MapNotify: return "MapNotify";\r
+    case MapRequest: return "MapRequest";\r
+    case ReparentNotify: return "ReparentNotify";\r
+    case ConfigureNotify: return "ConfigureNotify";\r
+    case ConfigureRequest: return "ConfigureRequest";\r
+    case GravityNotify: return "GravityNotify";\r
+    case ResizeRequest: return "ResizeRequest";\r
+    case CirculateNotify: return "CirculateNotify";\r
+    case CirculateRequest: return "CirculateRequest";\r
+    case PropertyNotify: return "PropertyNotify";\r
+    case SelectionClear: return "SelectionClear";\r
+    case SelectionRequest: return "SelectionRequest";\r
+    case SelectionNotify: return "SelectionNotify";\r
+    case ColormapNotify: return "ColormapNotify";\r
+    case ClientMessage: return "ClientMessage";\r
+    case MappingNotify: return "MappingNotify";\r
+    default: return "UNKNOWN";\r
+    }\r
+}\r
+\r
+static const char* fghBoolToString( Bool b )\r
+{\r
+    return b == False ? "False" : "True";\r
+}\r
+\r
+static const char* fghNotifyHintToString( char is_hint )\r
+{\r
+    switch( is_hint ) {\r
+    case NotifyNormal: return "NotifyNormal";\r
+    case NotifyHint: return "NotifyHint";\r
+    default: return "UNKNOWN";\r
+    }\r
+}\r
+\r
+static const char* fghNotifyModeToString( int mode )\r
+{\r
+    switch( mode ) {\r
+    case NotifyNormal: return "NotifyNormal";\r
+    case NotifyGrab: return "NotifyGrab";\r
+    case NotifyUngrab: return "NotifyUngrab";\r
+    case NotifyWhileGrabbed: return "NotifyWhileGrabbed";\r
+    default: return "UNKNOWN";\r
+    }\r
+}\r
+\r
+static const char* fghNotifyDetailToString( int detail )\r
+{\r
+    switch( detail ) {\r
+    case NotifyAncestor: return "NotifyAncestor";\r
+    case NotifyVirtual: return "NotifyVirtual";\r
+    case NotifyInferior: return "NotifyInferior";\r
+    case NotifyNonlinear: return "NotifyNonlinear";\r
+    case NotifyNonlinearVirtual: return "NotifyNonlinearVirtual";\r
+    case NotifyPointer: return "NotifyPointer";\r
+    case NotifyPointerRoot: return "NotifyPointerRoot";\r
+    case NotifyDetailNone: return "NotifyDetailNone";\r
+    default: return "UNKNOWN";\r
+    }\r
+}\r
+\r
+static const char* fghVisibilityToString( int state ) {\r
+    switch( state ) {\r
+    case VisibilityUnobscured: return "VisibilityUnobscured";\r
+    case VisibilityPartiallyObscured: return "VisibilityPartiallyObscured";\r
+    case VisibilityFullyObscured: return "VisibilityFullyObscured";\r
+    default: return "UNKNOWN";\r
+    }\r
+}\r
+\r
+static const char* fghConfigureDetailToString( int detail )\r
+{\r
+    switch( detail ) {\r
+    case Above: return "Above";\r
+    case Below: return "Below";\r
+    case TopIf: return "TopIf";\r
+    case BottomIf: return "BottomIf";\r
+    case Opposite: return "Opposite";\r
+    default: return "UNKNOWN";\r
+    }\r
+}\r
+\r
+static const char* fghPlaceToString( int place )\r
+{\r
+    switch( place ) {\r
+    case PlaceOnTop: return "PlaceOnTop";\r
+    case PlaceOnBottom: return "PlaceOnBottom";\r
+    default: return "UNKNOWN";\r
+    }\r
+}\r
+\r
+static const char* fghMappingRequestToString( int request )\r
+{\r
+    switch( request ) {\r
+    case MappingModifier: return "MappingModifier";\r
+    case MappingKeyboard: return "MappingKeyboard";\r
+    case MappingPointer: return "MappingPointer";\r
+    default: return "UNKNOWN";\r
+    }\r
+}\r
+\r
+static const char* fghPropertyStateToString( int state )\r
+{\r
+    switch( state ) {\r
+    case PropertyNewValue: return "PropertyNewValue";\r
+    case PropertyDelete: return "PropertyDelete";\r
+    default: return "UNKNOWN";\r
+    }\r
+}\r
+\r
+static const char* fghColormapStateToString( int state )\r
+{\r
+    switch( state ) {\r
+    case ColormapUninstalled: return "ColormapUninstalled";\r
+    case ColormapInstalled: return "ColormapInstalled";\r
+    default: return "UNKNOWN";\r
+    }\r
+}\r
+\r
+static void fghPrintEvent( XEvent *event )\r
+{\r
+    switch( event->type ) {\r
+\r
+    case KeyPress:\r
+    case KeyRelease: {\r
+        XKeyEvent *e = &event->xkey;\r
+        fgWarning( "%s: window=0x%x, root=0x%x, subwindow=0x%x, time=%lu, "\r
+                   "(x,y)=(%d,%d), (x_root,y_root)=(%d,%d), state=0x%x, "\r
+                   "keycode=%u, same_screen=%s", fghTypeToString( e->type ),\r
+                   e->window, e->root, e->subwindow, (unsigned long)e->time,\r
+                   e->x, e->y, e->x_root, e->y_root, e->state, e->keycode,\r
+                   fghBoolToString( e->same_screen ) );\r
+        break;\r
+    }\r
+\r
+    case ButtonPress:\r
+    case ButtonRelease: {\r
+        XButtonEvent *e = &event->xbutton;\r
+        fgWarning( "%s: window=0x%x, root=0x%x, subwindow=0x%x, time=%lu, "\r
+                   "(x,y)=(%d,%d), (x_root,y_root)=(%d,%d), state=0x%x, "\r
+                   "button=%u, same_screen=%d", fghTypeToString( e->type ),\r
+                   e->window, e->root, e->subwindow, (unsigned long)e->time,\r
+                   e->x, e->y, e->x_root, e->y_root, e->state, e->button,\r
+                   fghBoolToString( e->same_screen ) );\r
+        break;\r
+    }\r
+\r
+    case MotionNotify: {\r
+        XMotionEvent *e = &event->xmotion;\r
+        fgWarning( "%s: window=0x%x, root=0x%x, subwindow=0x%x, time=%lu, "\r
+                   "(x,y)=(%d,%d), (x_root,y_root)=(%d,%d), state=0x%x, "\r
+                   "is_hint=%s, same_screen=%d", fghTypeToString( e->type ),\r
+                   e->window, e->root, e->subwindow, (unsigned long)e->time,\r
+                   e->x, e->y, e->x_root, e->y_root, e->state,\r
+                   fghNotifyHintToString( e->is_hint ),\r
+                   fghBoolToString( e->same_screen ) );\r
+        break;\r
+    }\r
+\r
+    case EnterNotify:\r
+    case LeaveNotify: {\r
+        XCrossingEvent *e = &event->xcrossing;\r
+        fgWarning( "%s: window=0x%x, root=0x%x, subwindow=0x%x, time=%lu, "\r
+                   "(x,y)=(%d,%d), mode=%s, detail=%s, same_screen=%d, "\r
+                   "focus=%d, state=0x%x", fghTypeToString( e->type ),\r
+                   e->window, e->root, e->subwindow, (unsigned long)e->time,\r
+                   e->x, e->y, fghNotifyModeToString( e->mode ),\r
+                   fghNotifyDetailToString( e->detail ), (int)e->same_screen,\r
+                   (int)e->focus, e->state );\r
+        break;\r
+    }\r
+\r
+    case FocusIn:\r
+    case FocusOut: {\r
+        XFocusChangeEvent *e = &event->xfocus;\r
+        fgWarning( "%s: window=0x%x, mode=%s, detail=%s",\r
+                   fghTypeToString( e->type ), e->window,\r
+                   fghNotifyModeToString( e->mode ),\r
+                   fghNotifyDetailToString( e->detail ) );\r
+        break;\r
+    }\r
+\r
+    case KeymapNotify: {\r
+        XKeymapEvent *e = &event->xkeymap;\r
+        char buf[32 * 2 + 1];\r
+        int i;\r
+        for ( i = 0; i < 32; i++ ) {\r
+            snprintf( &buf[ i * 2 ], sizeof( buf ) - i * 2,\r
+                      "%02x", e->key_vector[ i ] );\r
+        }\r
+        buf[ i ] = '\0';\r
+        fgWarning( "%s: window=0x%x, %s", fghTypeToString( e->type ), e->window,\r
+                   buf );\r
+        break;\r
+    }\r
+\r
+    case Expose: {\r
+        XExposeEvent *e = &event->xexpose;\r
+        fgWarning( "%s: window=0x%x, (x,y)=(%d,%d), (width,height)=(%d,%d), "\r
+                   "count=%d", fghTypeToString( e->type ), e->window, e->x,\r
+                   e->y, e->width, e->height, e->count );\r
+        break;\r
+    }\r
+\r
+    case GraphicsExpose: {\r
+        XGraphicsExposeEvent *e = &event->xgraphicsexpose;\r
+        fgWarning( "%s: drawable=0x%x, (x,y)=(%d,%d), (width,height)=(%d,%d), "\r
+                   "count=%d, (major_code,minor_code)=(%d,%d)",\r
+                   fghTypeToString( e->type ), e->drawable, e->x, e->y,\r
+                   e->width, e->height, e->count, e->major_code,\r
+                   e->minor_code );\r
+        break;\r
+    }\r
+\r
+    case NoExpose: {\r
+        XNoExposeEvent *e = &event->xnoexpose;\r
+        fgWarning( "%s: drawable=0x%x, (major_code,minor_code)=(%d,%d)",\r
+                   fghTypeToString( e->type ), e->drawable, e->major_code,\r
+                   e->minor_code );\r
+        break;\r
+    }\r
+\r
+    case VisibilityNotify: {\r
+        XVisibilityEvent *e = &event->xvisibility;\r
+        fgWarning( "%s: window=0x%x, state=%s", fghTypeToString( e->type ),\r
+                   e->window, fghVisibilityToString( e->state) );\r
+        break;\r
+    }\r
+\r
+    case CreateNotify: {\r
+        XCreateWindowEvent *e = &event->xcreatewindow;\r
+        fgWarning( "%s: (x,y)=(%d,%d), (width,height)=(%d,%d), border_width=%d, "\r
+                   "window=0x%x, override_redirect=%s",\r
+                   fghTypeToString( e->type ), e->x, e->y, e->width, e->height,\r
+                   e->border_width, e->window,\r
+                   fghBoolToString( e->override_redirect ) );\r
+        break;\r
+    }\r
+\r
+    case DestroyNotify: {\r
+        XDestroyWindowEvent *e = &event->xdestroywindow;\r
+        fgWarning( "%s: event=0x%x, window=0x%x",\r
+                   fghTypeToString( e->type ), e->event, e->window );\r
+        break;\r
+    }\r
+\r
+    case UnmapNotify: {\r
+        XUnmapEvent *e = &event->xunmap;\r
+        fgWarning( "%s: event=0x%x, window=0x%x, from_configure=%s",\r
+                   fghTypeToString( e->type ), e->event, e->window,\r
+                   fghBoolToString( e->from_configure ) );\r
+        break;\r
+    }\r
+\r
+    case MapNotify: {\r
+        XMapEvent *e = &event->xmap;\r
+        fgWarning( "%s: event=0x%x, window=0x%x, override_redirect=%s",\r
+                   fghTypeToString( e->type ), e->event, e->window,\r
+                   fghBoolToString( e->override_redirect ) );\r
+        break;\r
+    }\r
+\r
+    case MapRequest: {\r
+        XMapRequestEvent *e = &event->xmaprequest;\r
+        fgWarning( "%s: parent=0x%x, window=0x%x",\r
+                   fghTypeToString( event->type ), e->parent, e->window );\r
+        break;\r
+    }\r
+\r
+    case ReparentNotify: {\r
+        XReparentEvent *e = &event->xreparent;\r
+        fgWarning( "%s: event=0x%x, window=0x%x, parent=0x%x, (x,y)=(%d,%d), "\r
+                   "override_redirect=%s", fghTypeToString( e->type ),\r
+                   e->event, e->window, e->parent, e->x, e->y,\r
+                   fghBoolToString( e->override_redirect ) );\r
+        break;\r
+    }\r
+\r
+    case ConfigureNotify: {\r
+        XConfigureEvent *e = &event->xconfigure;\r
+        fgWarning( "%s: event=0x%x, window=0x%x, (x,y)=(%d,%d), "\r
+                   "(width,height)=(%d,%d), border_width=%d, above=0x%x, "\r
+                   "override_redirect=%s", fghTypeToString( e->type ), e->event,\r
+                   e->window, e->x, e->y, e->width, e->height, e->border_width,\r
+                   e->above, fghBoolToString( e->override_redirect ) );\r
+        break;\r
+    }\r
+\r
+    case ConfigureRequest: {\r
+        XConfigureRequestEvent *e = &event->xconfigurerequest;\r
+        fgWarning( "%s: parent=0x%x, window=0x%x, (x,y)=(%d,%d), "\r
+                   "(width,height)=(%d,%d), border_width=%d, above=0x%x, "\r
+                   "detail=%s, value_mask=%lx", fghTypeToString( e->type ),\r
+                   e->parent, e->window, e->x, e->y, e->width, e->height,\r
+                   e->border_width, e->above,\r
+                   fghConfigureDetailToString( e->detail ), e->value_mask );\r
+        break;\r
+    }\r
+\r
+    case GravityNotify: {\r
+        XGravityEvent *e = &event->xgravity;\r
+        fgWarning( "%s: event=0x%x, window=0x%x, (x,y)=(%d,%d)",\r
+                   fghTypeToString( e->type ), e->event, e->window, e->x, e->y );\r
+        break;\r
+    }\r
+\r
+    case ResizeRequest: {\r
+        XResizeRequestEvent *e = &event->xresizerequest;\r
+        fgWarning( "%s: window=0x%x, (width,height)=(%d,%d)",\r
+                   fghTypeToString( e->type ), e->window, e->width, e->height );\r
+        break;\r
+    }\r
+\r
+    case CirculateNotify: {\r
+        XCirculateEvent *e = &event->xcirculate;\r
+        fgWarning( "%s: event=0x%x, window=0x%x, place=%s",\r
+                   fghTypeToString( e->type ), e->event, e->window,\r
+                   fghPlaceToString( e->place ) );\r
+        break;\r
+    }\r
+\r
+    case CirculateRequest: {\r
+        XCirculateRequestEvent *e = &event->xcirculaterequest;\r
+        fgWarning( "%s: parent=0x%x, window=0x%x, place=%s",\r
+                   fghTypeToString( e->type ), e->parent, e->window,\r
+                   fghPlaceToString( e->place ) );\r
+        break;\r
+    }\r
+\r
+    case PropertyNotify: {\r
+        XPropertyEvent *e = &event->xproperty;\r
+        fgWarning( "%s: window=0x%x, atom=%lu, time=%lu, state=%s",\r
+                   fghTypeToString( e->type ), e->window,\r
+                   (unsigned long)e->atom, (unsigned long)e->time,\r
+                   fghPropertyStateToString( e->state ) );\r
+        break;\r
+    }\r
+\r
+    case SelectionClear: {\r
+        XSelectionClearEvent *e = &event->xselectionclear;\r
+        fgWarning( "%s: window=0x%x, selection=%lu, time=%lu",\r
+                   fghTypeToString( e->type ), e->window,\r
+                   (unsigned long)e->selection, (unsigned long)e->time );\r
+        break;\r
+    }\r
+\r
+    case SelectionRequest: {\r
+        XSelectionRequestEvent *e = &event->xselectionrequest;\r
+        fgWarning( "%s: owner=0x%x, requestor=0x%x, selection=0x%x, "\r
+                   "target=0x%x, property=%lu, time=%lu",\r
+                   fghTypeToString( e->type ), e->owner, e->requestor,\r
+                   (unsigned long)e->selection, (unsigned long)e->target,\r
+                   (unsigned long)e->property, (unsigned long)e->time );\r
+        break;\r
+    }\r
+\r
+    case SelectionNotify: {\r
+        XSelectionEvent *e = &event->xselection;\r
+        fgWarning( "%s: requestor=0x%x, selection=0x%x, target=0x%x, "\r
+                   "property=%lu, time=%lu", fghTypeToString( e->type ),\r
+                   e->requestor, (unsigned long)e->selection,\r
+                   (unsigned long)e->target, (unsigned long)e->property,\r
+                   (unsigned long)e->time );\r
+        break;\r
+    }\r
+\r
+    case ColormapNotify: {\r
+        XColormapEvent *e = &event->xcolormap;\r
+        fgWarning( "%s: window=0x%x, colormap=%lu, new=%s, state=%s",\r
+                   fghTypeToString( e->type ), e->window,\r
+                   (unsigned long)e->colormap, fghBoolToString( e->new ),\r
+                   fghColormapStateToString( e->state ) );\r
+        break;\r
+    }\r
+\r
+    case ClientMessage: {\r
+        XClientMessageEvent *e = &event->xclient;\r
+        char buf[ 61 ];\r
+        char* p = buf;\r
+        char* end = buf + sizeof( buf );\r
+        int i;\r
+        switch( e->format ) {\r
+        case 8:\r
+          for ( i = 0; i < 20; i++, p += 3 ) {\r
+                snprintf( p, end - p, " %02x", e->data.b[ i ] );\r
+            }\r
+            break;\r
+        case 16:\r
+            for ( i = 0; i < 10; i++, p += 5 ) {\r
+                snprintf( p, end - p, " %04x", e->data.s[ i ] );\r
+            }\r
+            break;\r
+        case 32:\r
+            for ( i = 0; i < 5; i++, p += 9 ) {\r
+                snprintf( p, end - p, " %08lx", e->data.l[ i ] );\r
+            }\r
+            break;\r
+        }\r
+        *p = '\0';\r
+        fgWarning( "%s: window=0x%x, message_type=%lu, format=%d, data=(%s )",\r
+                   fghTypeToString( e->type ), e->window,\r
+                   (unsigned long)e->message_type, e->format, buf );\r
+        break;\r
+    }\r
+\r
+    case MappingNotify: {\r
+        XMappingEvent *e = &event->xmapping;\r
+        fgWarning( "%s: window=0x%x, request=%s, first_keycode=%d, count=%d",\r
+                   fghTypeToString( e->type ), e->window,\r
+                   fghMappingRequestToString( e->request ), e->first_keycode,\r
+                   e->count );\r
+        break;\r
+    }\r
+\r
+    default: {\r
+        fgWarning( "%s", fghTypeToString( event->type ) );\r
+        break;\r
+    }\r
+    }\r
+}\r
+\r
+#endif\r
+\r
+/* -- INTERFACE FUNCTIONS -------------------------------------------------- */\r
+\r
+/*\r
+ * Executes a single iteration in the freeglut processing loop.\r
+ */\r
+void FGAPIENTRY glutMainLoopEvent( void )\r
+{\r
+#if TARGET_HOST_POSIX_X11\r
+    SFG_Window* window;\r
+    XEvent event;\r
+\r
+    /* This code was repeated constantly, so here it goes into a definition: */\r
+#define GETWINDOW(a)                             \\r
+    window = fgWindowByHandle( event.a.window ); \\r
+    if( window == NULL )                         \\r
+        break;\r
+\r
+#define GETMOUSE(a)                              \\r
+    window->State.MouseX = event.a.x;            \\r
+    window->State.MouseY = event.a.y;\r
+\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutMainLoopEvent" );\r
+\r
+    while( XPending( fgDisplay.Display ) )\r
+    {\r
+        XNextEvent( fgDisplay.Display, &event );\r
+#if _DEBUG\r
+        fghPrintEvent( &event );\r
+#endif\r
+\r
+        switch( event.type )\r
+        {\r
+        case ClientMessage:\r
+            if(fgIsSpaceballXEvent(&event)) {\r
+                fgSpaceballHandleXEvent(&event);\r
+                break;\r
+            }\r
+            /* Destroy the window when the WM_DELETE_WINDOW message arrives */\r
+            if( (Atom) event.xclient.data.l[ 0 ] == fgDisplay.DeleteWindow )\r
+            {\r
+                GETWINDOW( xclient );\r
+\r
+                fgDestroyWindow ( window );\r
+\r
+                if( fgState.ActionOnWindowClose == GLUT_ACTION_EXIT )\r
+                {\r
+                    fgDeinitialize( );\r
+                    exit( 0 );\r
+                }\r
+                else if( fgState.ActionOnWindowClose == GLUT_ACTION_GLUTMAINLOOP_RETURNS )\r
+                    fgState.ExecState = GLUT_EXEC_STATE_STOP;\r
+\r
+                return;\r
+            }\r
+            break;\r
+\r
+            /*\r
+             * CreateNotify causes a configure-event so that sub-windows are\r
+             * handled compatibly with GLUT.  Otherwise, your sub-windows\r
+             * (in freeglut only) will not get an initial reshape event,\r
+             * which can break things.\r
+             *\r
+             * GLUT presumably does this because it generally tries to treat\r
+             * sub-windows the same as windows.\r
+             */\r
+        case CreateNotify:\r
+        case ConfigureNotify:\r
+            {\r
+                int width, height;\r
+                if( event.type == CreateNotify ) {\r
+                    GETWINDOW( xcreatewindow );\r
+                    width = event.xcreatewindow.width;\r
+                    height = event.xcreatewindow.height;\r
+                } else {\r
+                    GETWINDOW( xconfigure );\r
+                    width = event.xconfigure.width;\r
+                    height = event.xconfigure.height;\r
+                }\r
+\r
+                if( ( width != window->State.OldWidth ) ||\r
+                    ( height != window->State.OldHeight ) )\r
+                {\r
+                    SFG_Window *current_window = fgStructure.CurrentWindow;\r
+\r
+                    window->State.OldWidth = width;\r
+                    window->State.OldHeight = height;\r
+                    if( FETCH_WCB( *window, Reshape ) )\r
+                        INVOKE_WCB( *window, Reshape, ( width, height ) );\r
+                    else\r
+                    {\r
+                        fgSetWindow( window );\r
+                        glViewport( 0, 0, width, height );\r
+                    }\r
+                    glutPostRedisplay( );\r
+                    if( window->IsMenu )\r
+                        fgSetWindow( current_window );\r
+                }\r
+            }\r
+            break;\r
+\r
+        case DestroyNotify:\r
+            /*\r
+             * This is sent to confirm the XDestroyWindow call.\r
+             *\r
+             * XXX WHY is this commented out?  Should we re-enable it?\r
+             */\r
+            /* fgAddToWindowDestroyList ( window ); */\r
+            break;\r
+\r
+        case Expose:\r
+            /*\r
+             * We are too dumb to process partial exposes...\r
+             *\r
+             * XXX Well, we could do it.  However, it seems to only\r
+             * XXX be potentially useful for single-buffered (since\r
+             * XXX double-buffered does not respect viewport when we\r
+             * XXX do a buffer-swap).\r
+             *\r
+             */\r
+            if( event.xexpose.count == 0 )\r
+            {\r
+                GETWINDOW( xexpose );\r
+                window->State.Redisplay = GL_TRUE;\r
+            }\r
+            break;\r
+\r
+        case MapNotify:\r
+            break;\r
+\r
+        case UnmapNotify:\r
+            /* We get this when iconifying a window. */ \r
+            GETWINDOW( xunmap );\r
+            INVOKE_WCB( *window, WindowStatus, ( GLUT_HIDDEN ) );\r
+            window->State.Visible = GL_FALSE;\r
+            break;\r
+\r
+        case MappingNotify:\r
+            /*\r
+             * Have the client's keyboard knowledge updated (xlib.ps,\r
+             * page 206, says that's a good thing to do)\r
+             */\r
+            XRefreshKeyboardMapping( (XMappingEvent *) &event );\r
+            break;\r
+\r
+        case VisibilityNotify:\r
+        {\r
+            /*\r
+             * Sending this event, the X server can notify us that the window\r
+             * has just acquired one of the three possible visibility states:\r
+             * VisibilityUnobscured, VisibilityPartiallyObscured or\r
+             * VisibilityFullyObscured. Note that we DO NOT receive a\r
+             * VisibilityNotify event when iconifying a window, we only get an\r
+             * UnmapNotify then.\r
+             */\r
+            GETWINDOW( xvisibility );\r
+            switch( event.xvisibility.state )\r
+            {\r
+            case VisibilityUnobscured:\r
+                INVOKE_WCB( *window, WindowStatus, ( GLUT_FULLY_RETAINED ) );\r
+                window->State.Visible = GL_TRUE;\r
+                break;\r
+\r
+            case VisibilityPartiallyObscured:\r
+                INVOKE_WCB( *window, WindowStatus,\r
+                            ( GLUT_PARTIALLY_RETAINED ) );\r
+                window->State.Visible = GL_TRUE;\r
+                break;\r
+\r
+            case VisibilityFullyObscured:\r
+                INVOKE_WCB( *window, WindowStatus, ( GLUT_FULLY_COVERED ) );\r
+                window->State.Visible = GL_FALSE;\r
+                break;\r
+\r
+            default:\r
+                fgWarning( "Unknown X visibility state: %d",\r
+                           event.xvisibility.state );\r
+                break;\r
+            }\r
+        }\r
+        break;\r
+\r
+        case EnterNotify:\r
+        case LeaveNotify:\r
+            GETWINDOW( xcrossing );\r
+            GETMOUSE( xcrossing );\r
+            if( ( event.type == LeaveNotify ) && window->IsMenu &&\r
+                window->ActiveMenu && window->ActiveMenu->IsActive )\r
+                fgUpdateMenuHighlight( window->ActiveMenu );\r
+\r
+            INVOKE_WCB( *window, Entry, ( ( EnterNotify == event.type ) ?\r
+                                          GLUT_ENTERED :\r
+                                          GLUT_LEFT ) );\r
+            break;\r
+\r
+        case MotionNotify:\r
+        {\r
+            GETWINDOW( xmotion );\r
+            GETMOUSE( xmotion );\r
+\r
+            if( window->ActiveMenu )\r
+            {\r
+                if( window == window->ActiveMenu->ParentWindow )\r
+                {\r
+                    window->ActiveMenu->Window->State.MouseX =\r
+                        event.xmotion.x_root - window->ActiveMenu->X;\r
+                    window->ActiveMenu->Window->State.MouseY =\r
+                        event.xmotion.y_root - window->ActiveMenu->Y;\r
+                }\r
+\r
+                fgUpdateMenuHighlight( window->ActiveMenu );\r
+\r
+                break;\r
+            }\r
+\r
+            /*\r
+             * XXX For more than 5 buttons, just check {event.xmotion.state},\r
+             * XXX rather than a host of bit-masks?  Or maybe we need to\r
+             * XXX track ButtonPress/ButtonRelease events in our own\r
+             * XXX bit-mask?\r
+             */\r
+            fgState.Modifiers = fghGetXModifiers( event.xmotion.state );\r
+            if ( event.xmotion.state & ( Button1Mask | Button2Mask | Button3Mask | Button4Mask | Button5Mask ) ) {\r
+                INVOKE_WCB( *window, Motion, ( event.xmotion.x,\r
+                                               event.xmotion.y ) );\r
+            } else {\r
+                INVOKE_WCB( *window, Passive, ( event.xmotion.x,\r
+                                                event.xmotion.y ) );\r
+            }\r
+            fgState.Modifiers = INVALID_MODIFIERS;\r
+        }\r
+        break;\r
+\r
+        case ButtonRelease:\r
+        case ButtonPress:\r
+        {\r
+            GLboolean pressed = GL_TRUE;\r
+            int button;\r
+\r
+            if( event.type == ButtonRelease )\r
+                pressed = GL_FALSE ;\r
+\r
+            /*\r
+             * A mouse button has been pressed or released. Traditionally,\r
+             * break if the window was found within the freeglut structures.\r
+             */\r
+            GETWINDOW( xbutton );\r
+            GETMOUSE( xbutton );\r
+\r
+            /*\r
+             * An X button (at least in XFree86) is numbered from 1.\r
+             * A GLUT button is numbered from 0.\r
+             * Old GLUT passed through buttons other than just the first\r
+             * three, though it only gave symbolic names and official\r
+             * support to the first three.\r
+             */\r
+            button = event.xbutton.button - 1;\r
+\r
+            /*\r
+             * Do not execute the application's mouse callback if a menu\r
+             * is hooked to this button.  In that case an appropriate\r
+             * private call should be generated.\r
+             */\r
+            if( fgCheckActiveMenu( window, button, pressed,\r
+                                   event.xbutton.x_root, event.xbutton.y_root ) )\r
+                break;\r
+\r
+            /*\r
+             * Check if there is a mouse or mouse wheel callback hooked to the\r
+             * window\r
+             */\r
+            if( ! FETCH_WCB( *window, Mouse ) &&\r
+                ! FETCH_WCB( *window, MouseWheel ) )\r
+                break;\r
+\r
+            fgState.Modifiers = fghGetXModifiers( event.xbutton.state );\r
+\r
+            /* Finally execute the mouse or mouse wheel callback */\r
+            if( ( button < glutDeviceGet ( GLUT_NUM_MOUSE_BUTTONS ) ) || ( ! FETCH_WCB( *window, MouseWheel ) ) )\r
+                INVOKE_WCB( *window, Mouse, ( button,\r
+                                              pressed ? GLUT_DOWN : GLUT_UP,\r
+                                              event.xbutton.x,\r
+                                              event.xbutton.y )\r
+                );\r
+            else\r
+            {\r
+                /*\r
+                 * Map 4 and 5 to wheel zero; EVEN to +1, ODD to -1\r
+                 *  "  6 and 7 "    "   one; ...\r
+                 *\r
+                 * XXX This *should* be behind some variables/macros,\r
+                 * XXX since the order and numbering isn't certain\r
+                 * XXX See XFree86 configuration docs (even back in the\r
+                 * XXX 3.x days, and especially with 4.x).\r
+                 *\r
+                 * XXX Note that {button} has already been decremented\r
+                 * XXX in mapping from X button numbering to GLUT.\r
+                                *\r
+                                * XXX Should add support for partial wheel turns as Windows does -- 5/27/11\r
+                 */\r
+                int wheel_number = (button - glutDeviceGet ( GLUT_NUM_MOUSE_BUTTONS )) / 2;\r
+                int direction = -1;\r
+                if( button % 2 )\r
+                    direction = 1;\r
+\r
+                if( pressed )\r
+                    INVOKE_WCB( *window, MouseWheel, ( wheel_number,\r
+                                                       direction,\r
+                                                       event.xbutton.x,\r
+                                                       event.xbutton.y )\r
+                    );\r
+            }\r
+            fgState.Modifiers = INVALID_MODIFIERS;\r
+        }\r
+        break;\r
+\r
+        case KeyRelease:\r
+        case KeyPress:\r
+        {\r
+            FGCBKeyboard keyboard_cb;\r
+            FGCBSpecial special_cb;\r
+\r
+            GETWINDOW( xkey );\r
+            GETMOUSE( xkey );\r
+\r
+            /* Detect auto repeated keys, if configured globally or per-window */\r
+\r
+            if ( fgState.KeyRepeat==GLUT_KEY_REPEAT_OFF || window->State.IgnoreKeyRepeat==GL_TRUE )\r
+            {\r
+                if (event.type==KeyRelease)\r
+                {\r
+                    /*\r
+                     * Look at X11 keystate to detect repeat mode.\r
+                     * While X11 says the key is actually held down, we'll ignore KeyRelease/KeyPress pairs.\r
+                     */\r
+\r
+                    char keys[32];\r
+                    XQueryKeymap( fgDisplay.Display, keys ); /* Look at X11 keystate to detect repeat mode */\r
+\r
+                    if ( event.xkey.keycode<256 )            /* XQueryKeymap is limited to 256 keycodes    */\r
+                    {\r
+                        if ( keys[event.xkey.keycode>>3] & (1<<(event.xkey.keycode%8)) )\r
+                            window->State.KeyRepeating = GL_TRUE;\r
+                        else\r
+                            window->State.KeyRepeating = GL_FALSE;\r
+                    }\r
+                }\r
+            }\r
+            else\r
+                window->State.KeyRepeating = GL_FALSE;\r
+\r
+            /* Cease processing this event if it is auto repeated */\r
+\r
+            if (window->State.KeyRepeating)\r
+            {\r
+                if (event.type == KeyPress) window->State.KeyRepeating = GL_FALSE;\r
+                break;\r
+            }\r
+\r
+            if( event.type == KeyPress )\r
+            {\r
+                keyboard_cb = (FGCBKeyboard)( FETCH_WCB( *window, Keyboard ));\r
+                special_cb  = (FGCBSpecial) ( FETCH_WCB( *window, Special  ));\r
+            }\r
+            else\r
+            {\r
+                keyboard_cb = (FGCBKeyboard)( FETCH_WCB( *window, KeyboardUp ));\r
+                special_cb  = (FGCBSpecial) ( FETCH_WCB( *window, SpecialUp  ));\r
+            }\r
+\r
+            /* Is there a keyboard/special callback hooked for this window? */\r
+            if( keyboard_cb || special_cb )\r
+            {\r
+                XComposeStatus composeStatus;\r
+                char asciiCode[ 32 ];\r
+                KeySym keySym;\r
+                int len;\r
+\r
+                /* Check for the ASCII/KeySym codes associated with the event: */\r
+                len = XLookupString( &event.xkey, asciiCode, sizeof(asciiCode),\r
+                                     &keySym, &composeStatus\r
+                );\r
+\r
+                /* GLUT API tells us to have two separate callbacks... */\r
+                if( len > 0 )\r
+                {\r
+                    /* ...one for the ASCII translateable keypresses... */\r
+                    if( keyboard_cb )\r
+                    {\r
+                        fgSetWindow( window );\r
+                        fgState.Modifiers = fghGetXModifiers( event.xkey.state );\r
+                        keyboard_cb( asciiCode[ 0 ],\r
+                                     event.xkey.x, event.xkey.y\r
+                        );\r
+                        fgState.Modifiers = INVALID_MODIFIERS;\r
+                    }\r
+                }\r
+                else\r
+                {\r
+                    int special = -1;\r
+\r
+                    /*\r
+                     * ...and one for all the others, which need to be\r
+                     * translated to GLUT_KEY_Xs...\r
+                     */\r
+                    switch( keySym )\r
+                    {\r
+                    case XK_F1:     special = GLUT_KEY_F1;     break;\r
+                    case XK_F2:     special = GLUT_KEY_F2;     break;\r
+                    case XK_F3:     special = GLUT_KEY_F3;     break;\r
+                    case XK_F4:     special = GLUT_KEY_F4;     break;\r
+                    case XK_F5:     special = GLUT_KEY_F5;     break;\r
+                    case XK_F6:     special = GLUT_KEY_F6;     break;\r
+                    case XK_F7:     special = GLUT_KEY_F7;     break;\r
+                    case XK_F8:     special = GLUT_KEY_F8;     break;\r
+                    case XK_F9:     special = GLUT_KEY_F9;     break;\r
+                    case XK_F10:    special = GLUT_KEY_F10;    break;\r
+                    case XK_F11:    special = GLUT_KEY_F11;    break;\r
+                    case XK_F12:    special = GLUT_KEY_F12;    break;\r
+\r
+                    case XK_KP_Left:\r
+                    case XK_Left:   special = GLUT_KEY_LEFT;   break;\r
+                    case XK_KP_Right:\r
+                    case XK_Right:  special = GLUT_KEY_RIGHT;  break;\r
+                    case XK_KP_Up:\r
+                    case XK_Up:     special = GLUT_KEY_UP;     break;\r
+                    case XK_KP_Down:\r
+                    case XK_Down:   special = GLUT_KEY_DOWN;   break;\r
+\r
+                    case XK_KP_Prior:\r
+                    case XK_Prior:  special = GLUT_KEY_PAGE_UP; break;\r
+                    case XK_KP_Next:\r
+                    case XK_Next:   special = GLUT_KEY_PAGE_DOWN; break;\r
+                    case XK_KP_Home:\r
+                    case XK_Home:   special = GLUT_KEY_HOME;   break;\r
+                    case XK_KP_End:\r
+                    case XK_End:    special = GLUT_KEY_END;    break;\r
+                    case XK_KP_Insert:\r
+                    case XK_Insert: special = GLUT_KEY_INSERT; break;\r
+\r
+                    case XK_Num_Lock :  special = GLUT_KEY_NUM_LOCK;  break;\r
+                    case XK_KP_Begin :  special = GLUT_KEY_BEGIN;     break;\r
+                    case XK_KP_Delete:  special = GLUT_KEY_DELETE;    break;\r
+\r
+                    case XK_Shift_L:   special = GLUT_KEY_SHIFT_L;    break;\r
+                    case XK_Shift_R:   special = GLUT_KEY_SHIFT_R;    break;\r
+                    case XK_Control_L: special = GLUT_KEY_CTRL_L;     break;\r
+                    case XK_Control_R: special = GLUT_KEY_CTRL_R;     break;\r
+                    case XK_Alt_L:     special = GLUT_KEY_ALT_L;      break;\r
+                    case XK_Alt_R:     special = GLUT_KEY_ALT_R;      break;\r
+                    }\r
+\r
+                    /*\r
+                     * Execute the callback (if one has been specified),\r
+                     * given that the special code seems to be valid...\r
+                     */\r
+                    if( special_cb && (special != -1) )\r
+                    {\r
+                        fgSetWindow( window );\r
+                        fgState.Modifiers = fghGetXModifiers( event.xkey.state );\r
+                        special_cb( special, event.xkey.x, event.xkey.y );\r
+                        fgState.Modifiers = INVALID_MODIFIERS;\r
+                    }\r
+                }\r
+            }\r
+        }\r
+        break;\r
+\r
+        case ReparentNotify:\r
+            break; /* XXX Should disable this event */\r
+\r
+        /* Not handled */\r
+        case GravityNotify:\r
+            break;\r
+\r
+        default:\r
+            /* enter handling of Extension Events here */\r
+            #ifdef HAVE_X11_EXTENSIONS_XINPUT2_H\r
+                fgHandleExtensionEvents( &event );\r
+            #endif\r
+            break;\r
+        }\r
+    }\r
+\r
+#elif TARGET_HOST_MS_WINDOWS\r
+\r
+    MSG stMsg;\r
+\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutMainLoopEvent" );\r
+\r
+    while( PeekMessage( &stMsg, NULL, 0, 0, PM_NOREMOVE ) )\r
+    {\r
+        if( GetMessage( &stMsg, NULL, 0, 0 ) == 0 )\r
+        {\r
+            if( fgState.ActionOnWindowClose == GLUT_ACTION_EXIT )\r
+            {\r
+                fgDeinitialize( );\r
+                exit( 0 );\r
+            }\r
+            else if( fgState.ActionOnWindowClose == GLUT_ACTION_GLUTMAINLOOP_RETURNS )\r
+                fgState.ExecState = GLUT_EXEC_STATE_STOP;\r
+\r
+            return;\r
+        }\r
+\r
+        TranslateMessage( &stMsg );\r
+        DispatchMessage( &stMsg );\r
+    }\r
+#endif\r
+\r
+    if( fgState.Timers.First )\r
+        fghCheckTimers( );\r
+    fghCheckJoystickPolls( );\r
+    fghDisplayAll( );\r
+\r
+    fgCloseWindows( );\r
+}\r
+\r
+/*\r
+ * Enters the freeglut processing loop.\r
+ * Stays until the "ExecState" changes to "GLUT_EXEC_STATE_STOP".\r
+ */\r
+void FGAPIENTRY glutMainLoop( void )\r
+{\r
+    int action;\r
+\r
+#if TARGET_HOST_MS_WINDOWS\r
+    SFG_Window *window = (SFG_Window *)fgStructure.Windows.First ;\r
+#endif\r
+\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutMainLoop" );\r
+\r
+#if TARGET_HOST_MS_WINDOWS\r
+    /*\r
+     * Processing before the main loop:  If there is a window which is open and\r
+     * which has a visibility callback, call it.  I know this is an ugly hack,\r
+     * but I'm not sure what else to do about it.  Ideally we should leave\r
+     * something uninitialized in the create window code and initialize it in\r
+     * the main loop, and have that initialization create a "WM_ACTIVATE"\r
+     * message.  Then we would put the visibility callback code in the\r
+     * "case WM_ACTIVATE" block below.         - John Fay -- 10/24/02\r
+     */\r
+    while( window )\r
+    {\r
+        if ( FETCH_WCB( *window, Visibility ) )\r
+        {\r
+            SFG_Window *current_window = fgStructure.CurrentWindow ;\r
+\r
+            INVOKE_WCB( *window, Visibility, ( window->State.Visible ) );\r
+            fgSetWindow( current_window );\r
+        }\r
+\r
+        window = (SFG_Window *)window->Node.Next ;\r
+    }\r
+#endif\r
+\r
+    fgState.ExecState = GLUT_EXEC_STATE_RUNNING ;\r
+    while( fgState.ExecState == GLUT_EXEC_STATE_RUNNING )\r
+    {\r
+        SFG_Window *window;\r
+\r
+        glutMainLoopEvent( );\r
+        /*\r
+         * Step through the list of windows, seeing if there are any\r
+         * that are not menus\r
+         */\r
+        for( window = ( SFG_Window * )fgStructure.Windows.First;\r
+             window;\r
+             window = ( SFG_Window * )window->Node.Next )\r
+            if ( ! ( window->IsMenu ) )\r
+                break;\r
+\r
+        if( ! window )\r
+            fgState.ExecState = GLUT_EXEC_STATE_STOP;\r
+        else\r
+        {\r
+            if( fgState.IdleCallback )\r
+            {\r
+                if( fgStructure.CurrentWindow &&\r
+                    fgStructure.CurrentWindow->IsMenu )\r
+                    /* fail safe */\r
+                    fgSetWindow( window );\r
+                fgState.IdleCallback( );\r
+            }\r
+\r
+            fghSleepForEvents( );\r
+        }\r
+    }\r
+\r
+    /*\r
+     * When this loop terminates, destroy the display, state and structure\r
+     * of a freeglut session, so that another glutInit() call can happen\r
+     *\r
+     * Save the "ActionOnWindowClose" because "fgDeinitialize" resets it.\r
+     */\r
+    action = fgState.ActionOnWindowClose;\r
+    fgDeinitialize( );\r
+    if( action == GLUT_ACTION_EXIT )\r
+        exit( 0 );\r
+}\r
+\r
+/*\r
+ * Leaves the freeglut processing loop.\r
+ */\r
+void FGAPIENTRY glutLeaveMainLoop( void )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutLeaveMainLoop" );\r
+    fgState.ExecState = GLUT_EXEC_STATE_STOP ;\r
+}\r
+\r
+\r
+#if TARGET_HOST_MS_WINDOWS\r
+/*\r
+ * Determine a GLUT modifer mask based on MS-WINDOWS system info.\r
+ */\r
+static int fghGetWin32Modifiers (void)\r
+{\r
+    return\r
+        ( ( ( GetKeyState( VK_LSHIFT   ) < 0 ) ||\r
+            ( GetKeyState( VK_RSHIFT   ) < 0 )) ? GLUT_ACTIVE_SHIFT : 0 ) |\r
+        ( ( ( GetKeyState( VK_LCONTROL ) < 0 ) ||\r
+            ( GetKeyState( VK_RCONTROL ) < 0 )) ? GLUT_ACTIVE_CTRL  : 0 ) |\r
+        ( ( ( GetKeyState( VK_LMENU    ) < 0 ) ||\r
+            ( GetKeyState( VK_RMENU    ) < 0 )) ? GLUT_ACTIVE_ALT   : 0 );\r
+}\r
+\r
+/*\r
+ * The window procedure for handling Win32 events\r
+ */\r
+LRESULT CALLBACK fgWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam,\r
+                               LPARAM lParam )\r
+{\r
+    static unsigned char lControl = 0, rControl = 0, lShift = 0,\r
+                         rShift = 0, lAlt = 0, rAlt = 0;\r
+\r
+    SFG_Window* window;\r
+    PAINTSTRUCT ps;\r
+    LRESULT lRet = 1;\r
+\r
+    FREEGLUT_INTERNAL_ERROR_EXIT_IF_NOT_INITIALISED ( "Event Handler" ) ;\r
+\r
+    window = fgWindowByHandle( hWnd );\r
+\r
+    if ( ( window == NULL ) && ( uMsg != WM_CREATE ) )\r
+      return DefWindowProc( hWnd, uMsg, wParam, lParam );\r
+\r
+    /* printf ( "Window %3d message <%04x> %12d %12d\n", window?window->ID:0,\r
+             uMsg, wParam, lParam ); */\r
+\r
+    if ( window )\r
+    {\r
+      /* Checking for CTRL, ALT, and SHIFT key positions:  Key Down! */\r
+      if ( !lControl && GetAsyncKeyState ( VK_LCONTROL ) )\r
+      {\r
+          INVOKE_WCB   ( *window, Special,\r
+                        ( GLUT_KEY_CTRL_L, window->State.MouseX, window->State.MouseY )\r
+                      );\r
+\r
+          lControl = 1;\r
+      }\r
+\r
+      if ( !rControl && GetAsyncKeyState ( VK_RCONTROL ) )\r
+      {\r
+          INVOKE_WCB ( *window, Special,\r
+                       ( GLUT_KEY_CTRL_R, window->State.MouseX, window->State.MouseY )\r
+                     );\r
+\r
+          rControl = 1;\r
+      }\r
+\r
+      if ( !lShift && GetAsyncKeyState ( VK_LSHIFT ) )\r
+      {\r
+          INVOKE_WCB ( *window, Special,\r
+                       ( GLUT_KEY_SHIFT_L, window->State.MouseX, window->State.MouseY )\r
+                     );\r
+\r
+          lShift = 1;\r
+      }\r
+\r
+      if ( !rShift && GetAsyncKeyState ( VK_RSHIFT ) )\r
+      {\r
+          INVOKE_WCB ( *window, Special,\r
+                       ( GLUT_KEY_SHIFT_R, window->State.MouseX, window->State.MouseY )\r
+                     );\r
+\r
+          rShift = 1;\r
+      }\r
+\r
+      if ( !lAlt && GetAsyncKeyState ( VK_LMENU ) )\r
+      {\r
+          INVOKE_WCB ( *window, Special,\r
+                       ( GLUT_KEY_ALT_L, window->State.MouseX, window->State.MouseY )\r
+                     );\r
+\r
+          lAlt = 1;\r
+      }\r
+\r
+      if ( !rAlt && GetAsyncKeyState ( VK_RMENU ) )\r
+      {\r
+          INVOKE_WCB ( *window, Special,\r
+                       ( GLUT_KEY_ALT_R, window->State.MouseX, window->State.MouseY )\r
+                     );\r
+\r
+          rAlt = 1;\r
+      }\r
+\r
+      /* Checking for CTRL, ALT, and SHIFT key positions:  Key Up! */\r
+      if ( lControl && !GetAsyncKeyState ( VK_LCONTROL ) )\r
+      {\r
+          INVOKE_WCB ( *window, SpecialUp,\r
+                       ( GLUT_KEY_CTRL_L, window->State.MouseX, window->State.MouseY )\r
+                     );\r
+\r
+          lControl = 0;\r
+      }\r
+\r
+      if ( rControl && !GetAsyncKeyState ( VK_RCONTROL ) )\r
+      {\r
+          INVOKE_WCB ( *window, SpecialUp,\r
+                       ( GLUT_KEY_CTRL_R, window->State.MouseX, window->State.MouseY )\r
+                     );\r
+\r
+          rControl = 0;\r
+      }\r
+\r
+      if ( lShift && !GetAsyncKeyState ( VK_LSHIFT ) )\r
+      {\r
+          INVOKE_WCB ( *window, SpecialUp,\r
+                       ( GLUT_KEY_SHIFT_L, window->State.MouseX, window->State.MouseY )\r
+                     );\r
+\r
+          lShift = 0;\r
+      }\r
+\r
+      if ( rShift && !GetAsyncKeyState ( VK_RSHIFT ) )\r
+      {\r
+          INVOKE_WCB ( *window, SpecialUp,\r
+                       ( GLUT_KEY_SHIFT_R, window->State.MouseX, window->State.MouseY )\r
+                     );\r
+\r
+          rShift = 0;\r
+      }\r
+\r
+      if ( lAlt && !GetAsyncKeyState ( VK_LMENU ) )\r
+      {\r
+          INVOKE_WCB ( *window, SpecialUp,\r
+                       ( GLUT_KEY_ALT_L, window->State.MouseX, window->State.MouseY )\r
+                     );\r
+\r
+          lAlt = 0;\r
+      }\r
+\r
+      if ( rAlt && !GetAsyncKeyState ( VK_RMENU ) )\r
+      {\r
+          INVOKE_WCB ( *window, SpecialUp,\r
+                       ( GLUT_KEY_ALT_R, window->State.MouseX, window->State.MouseY )\r
+                     );\r
+\r
+          rAlt = 0;\r
+      }\r
+    }\r
+\r
+    switch( uMsg )\r
+    {\r
+    case WM_CREATE:\r
+        /* The window structure is passed as the creation structure parameter... */\r
+        window = (SFG_Window *) (((LPCREATESTRUCT) lParam)->lpCreateParams);\r
+        FREEGLUT_INTERNAL_ERROR_EXIT ( ( window != NULL ), "Cannot create window",\r
+                                       "fgWindowProc" );\r
+\r
+        window->Window.Handle = hWnd;\r
+        window->Window.Device = GetDC( hWnd );\r
+        if( window->IsMenu )\r
+        {\r
+            unsigned int current_DisplayMode = fgState.DisplayMode;\r
+            fgState.DisplayMode = GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH;\r
+#if !defined(_WIN32_WCE)\r
+            fgSetupPixelFormat( window, GL_FALSE, PFD_MAIN_PLANE );\r
+#endif\r
+            fgState.DisplayMode = current_DisplayMode;\r
+\r
+            if( fgStructure.MenuContext )\r
+                wglMakeCurrent( window->Window.Device,\r
+                                fgStructure.MenuContext->MContext\r
+                );\r
+            else\r
+            {\r
+                fgStructure.MenuContext =\r
+                    (SFG_MenuContext *)malloc( sizeof(SFG_MenuContext) );\r
+                fgStructure.MenuContext->MContext =\r
+                    wglCreateContext( window->Window.Device );\r
+            }\r
+\r
+            /* window->Window.Context = wglGetCurrentContext ();   */\r
+            window->Window.Context = wglCreateContext( window->Window.Device );\r
+        }\r
+        else\r
+        {\r
+#if !defined(_WIN32_WCE)\r
+            fgSetupPixelFormat( window, GL_FALSE, PFD_MAIN_PLANE );\r
+#endif\r
+\r
+            if( ! fgState.UseCurrentContext )\r
+                window->Window.Context =\r
+                    wglCreateContext( window->Window.Device );\r
+            else\r
+            {\r
+                window->Window.Context = wglGetCurrentContext( );\r
+                if( ! window->Window.Context )\r
+                    window->Window.Context =\r
+                        wglCreateContext( window->Window.Device );\r
+            }\r
+\r
+#if !defined(_WIN32_WCE)\r
+            fgNewWGLCreateContext( window );\r
+#endif\r
+        }\r
+\r
+        window->State.NeedToResize = GL_TRUE;\r
+        /* if we used CW_USEDEFAULT (thats a negative value) for the size\r
+         * of the window, query the window now for the size at which it\r
+         * was created.\r
+         */\r
+        if( ( window->State.Width < 0 ) || ( window->State.Height < 0 ) )\r
+        {\r
+            SFG_Window *current_window = fgStructure.CurrentWindow;\r
+\r
+            fgSetWindow( window );\r
+            window->State.Width = glutGet( GLUT_WINDOW_WIDTH );\r
+            window->State.Height = glutGet( GLUT_WINDOW_HEIGHT );\r
+            fgSetWindow( current_window );\r
+        }\r
+\r
+        ReleaseDC( window->Window.Handle, window->Window.Device );\r
+\r
+#if defined(_WIN32_WCE)\r
+        /* Take over button handling */\r
+        {\r
+            HINSTANCE dxDllLib=LoadLibrary(_T("gx.dll"));\r
+            if (dxDllLib)\r
+            {\r
+                GXGetDefaultKeys_=(GXGETDEFAULTKEYS)GetProcAddress(dxDllLib, _T("?GXGetDefaultKeys@@YA?AUGXKeyList@@H@Z"));\r
+                GXOpenInput_=(GXOPENINPUT)GetProcAddress(dxDllLib, _T("?GXOpenInput@@YAHXZ"));\r
+            }\r
+\r
+            if(GXOpenInput_)\r
+                (*GXOpenInput_)();\r
+            if(GXGetDefaultKeys_)\r
+                gxKeyList = (*GXGetDefaultKeys_)(GX_LANDSCAPEKEYS);\r
+        }\r
+\r
+#endif /* defined(_WIN32_WCE) */\r
+        break;\r
+\r
+    case WM_SIZE:\r
+        /*\r
+         * If the window is visible, then it is the user manually resizing it.\r
+         * If it is not, then it is the system sending us a dummy resize with\r
+         * zero dimensions on a "glutIconifyWindow" call.\r
+         */\r
+        if( window->State.Visible )\r
+        {\r
+            window->State.NeedToResize = GL_TRUE;\r
+#if defined(_WIN32_WCE)\r
+            window->State.Width  = HIWORD(lParam);\r
+            window->State.Height = LOWORD(lParam);\r
+#else\r
+            window->State.Width  = LOWORD(lParam);\r
+            window->State.Height = HIWORD(lParam);\r
+#endif /* defined(_WIN32_WCE) */\r
+        }\r
+\r
+        break;\r
+\r
+    case WM_SETFOCUS:\r
+/*        printf("WM_SETFOCUS: %p\n", window ); */\r
+        lRet = DefWindowProc( hWnd, uMsg, wParam, lParam );\r
+        INVOKE_WCB( *window, Entry, ( GLUT_ENTERED ) );\r
+        break;\r
+\r
+    case WM_KILLFOCUS:\r
+/*        printf("WM_KILLFOCUS: %p\n", window ); */\r
+        lRet = DefWindowProc( hWnd, uMsg, wParam, lParam );\r
+        INVOKE_WCB( *window, Entry, ( GLUT_LEFT ) );\r
+\r
+        if( window->IsMenu &&\r
+            window->ActiveMenu && window->ActiveMenu->IsActive )\r
+            fgUpdateMenuHighlight( window->ActiveMenu );\r
+\r
+        break;\r
+\r
+#if 0\r
+    case WM_ACTIVATE:\r
+        if (LOWORD(wParam) != WA_INACTIVE)\r
+        {\r
+/*            printf("WM_ACTIVATE: fgSetCursor( %p, %d)\n", window,\r
+                   window->State.Cursor ); */\r
+            fgSetCursor( window, window->State.Cursor );\r
+        }\r
+\r
+        lRet = DefWindowProc( hWnd, uMsg, wParam, lParam );\r
+        break;\r
+#endif\r
+\r
+    case WM_SETCURSOR:\r
+/*      printf ( "Cursor event %x %x %x %x\n", window, window->State.Cursor, lParam, wParam ) ; */\r
+        if( LOWORD( lParam ) == HTCLIENT )\r
+            fgSetCursor ( window, window->State.Cursor ) ;\r
+        else\r
+            lRet = DefWindowProc( hWnd, uMsg, wParam, lParam );\r
+        break;\r
+\r
+    case WM_SHOWWINDOW:\r
+        window->State.Visible = GL_TRUE;\r
+        window->State.Redisplay = GL_TRUE;\r
+        break;\r
+\r
+    case WM_PAINT:\r
+        /* Turn on the visibility in case it was turned off somehow */\r
+        window->State.Visible = GL_TRUE;\r
+        BeginPaint( hWnd, &ps );\r
+        fghRedrawWindow( window );\r
+        EndPaint( hWnd, &ps );\r
+        break;\r
+\r
+    case WM_CLOSE:\r
+        fgDestroyWindow ( window );\r
+        if ( fgState.ActionOnWindowClose != GLUT_ACTION_CONTINUE_EXECUTION )\r
+            PostQuitMessage(0);\r
+        break;\r
+\r
+    case WM_DESTROY:\r
+        /*\r
+         * The window already got destroyed, so don't bother with it.\r
+         */\r
+        return 0;\r
+\r
+    case WM_MOUSEMOVE:\r
+    {\r
+#if defined(_WIN32_WCE)\r
+        window->State.MouseX = 320-HIWORD( lParam );\r
+        window->State.MouseY = LOWORD( lParam );\r
+#else\r
+        window->State.MouseX = LOWORD( lParam );\r
+        window->State.MouseY = HIWORD( lParam );\r
+#endif /* defined(_WIN32_WCE) */\r
+        /* Restrict to [-32768, 32767] to match X11 behaviour       */\r
+        /* See comment in "freeglut_developer" mailing list 10/4/04 */\r
+        if ( window->State.MouseX > 32767 ) window->State.MouseX -= 65536;\r
+        if ( window->State.MouseY > 32767 ) window->State.MouseY -= 65536;\r
+\r
+        if ( window->ActiveMenu )\r
+        {\r
+            fgUpdateMenuHighlight( window->ActiveMenu );\r
+            break;\r
+        }\r
+        SetFocus(window->Window.Handle);\r
+\r
+        fgState.Modifiers = fghGetWin32Modifiers( );\r
+\r
+        if( ( wParam & MK_LBUTTON ) ||\r
+            ( wParam & MK_MBUTTON ) ||\r
+            ( wParam & MK_RBUTTON ) )\r
+            INVOKE_WCB( *window, Motion, ( window->State.MouseX,\r
+                                           window->State.MouseY ) );\r
+        else\r
+            INVOKE_WCB( *window, Passive, ( window->State.MouseX,\r
+                                            window->State.MouseY ) );\r
+\r
+        fgState.Modifiers = INVALID_MODIFIERS;\r
+    }\r
+    break;\r
+\r
+    case WM_LBUTTONDOWN:\r
+    case WM_MBUTTONDOWN:\r
+    case WM_RBUTTONDOWN:\r
+    case WM_LBUTTONUP:\r
+    case WM_MBUTTONUP:\r
+    case WM_RBUTTONUP:\r
+    {\r
+        GLboolean pressed = GL_TRUE;\r
+        int button;\r
+\r
+#if defined(_WIN32_WCE)\r
+        window->State.MouseX = 320-HIWORD( lParam );\r
+        window->State.MouseY = LOWORD( lParam );\r
+#else\r
+        window->State.MouseX = LOWORD( lParam );\r
+        window->State.MouseY = HIWORD( lParam );\r
+#endif /* defined(_WIN32_WCE) */\r
+\r
+        /* Restrict to [-32768, 32767] to match X11 behaviour       */\r
+        /* See comment in "freeglut_developer" mailing list 10/4/04 */\r
+        if ( window->State.MouseX > 32767 ) window->State.MouseX -= 65536;\r
+        if ( window->State.MouseY > 32767 ) window->State.MouseY -= 65536;\r
+\r
+        switch( uMsg )\r
+        {\r
+        case WM_LBUTTONDOWN:\r
+            pressed = GL_TRUE;\r
+            button = GLUT_LEFT_BUTTON;\r
+            break;\r
+        case WM_MBUTTONDOWN:\r
+            pressed = GL_TRUE;\r
+            button = GLUT_MIDDLE_BUTTON;\r
+            break;\r
+        case WM_RBUTTONDOWN:\r
+            pressed = GL_TRUE;\r
+            button = GLUT_RIGHT_BUTTON;\r
+            break;\r
+        case WM_LBUTTONUP:\r
+            pressed = GL_FALSE;\r
+            button = GLUT_LEFT_BUTTON;\r
+            break;\r
+        case WM_MBUTTONUP:\r
+            pressed = GL_FALSE;\r
+            button = GLUT_MIDDLE_BUTTON;\r
+            break;\r
+        case WM_RBUTTONUP:\r
+            pressed = GL_FALSE;\r
+            button = GLUT_RIGHT_BUTTON;\r
+            break;\r
+        default:\r
+            pressed = GL_FALSE;\r
+            button = -1;\r
+            break;\r
+        }\r
+\r
+#if !defined(_WIN32_WCE)\r
+        if( GetSystemMetrics( SM_SWAPBUTTON ) )\r
+        {\r
+            if( button == GLUT_LEFT_BUTTON )\r
+                button = GLUT_RIGHT_BUTTON;\r
+            else\r
+                if( button == GLUT_RIGHT_BUTTON )\r
+                    button = GLUT_LEFT_BUTTON;\r
+        }\r
+#endif /* !defined(_WIN32_WCE) */\r
+\r
+        if( button == -1 )\r
+            return DefWindowProc( hWnd, uMsg, lParam, wParam );\r
+\r
+        /*\r
+         * Do not execute the application's mouse callback if a menu\r
+         * is hooked to this button.  In that case an appropriate\r
+         * private call should be generated.\r
+         */\r
+        if( fgCheckActiveMenu( window, button, pressed,\r
+                               window->State.MouseX, window->State.MouseY ) )\r
+            break;\r
+\r
+        /* Set capture so that the window captures all the mouse messages */\r
+        /*\r
+         * XXX - Multiple button support:  Under X11, the mouse is not released\r
+         * XXX - from the window until all buttons have been released, even if the\r
+         * XXX - user presses a button in another window.  This will take more\r
+         * XXX - code changes than I am up to at the moment (10/5/04).  The present\r
+         * XXX - is a 90 percent solution.\r
+         */\r
+        if ( pressed == GL_TRUE )\r
+          SetCapture ( window->Window.Handle ) ;\r
+        else\r
+          ReleaseCapture () ;\r
+\r
+        if( ! FETCH_WCB( *window, Mouse ) )\r
+            break;\r
+\r
+        fgSetWindow( window );\r
+        fgState.Modifiers = fghGetWin32Modifiers( );\r
+\r
+        INVOKE_WCB(\r
+            *window, Mouse,\r
+            ( button,\r
+              pressed ? GLUT_DOWN : GLUT_UP,\r
+              window->State.MouseX,\r
+              window->State.MouseY\r
+            )\r
+        );\r
+\r
+        fgState.Modifiers = INVALID_MODIFIERS;\r
+    }\r
+    break;\r
+\r
+    case 0x020a:\r
+        /* Should be WM_MOUSEWHEEL but my compiler doesn't recognize it */\r
+    {\r
+        int wheel_number = LOWORD( wParam );\r
+        short ticks = ( short )HIWORD( wParam );\r
+               fgState.MouseWheelTicks += ticks;\r
+\r
+        /*\r
+         * XXX Should use WHEEL_DELTA instead of 120\r
+         */\r
+               if ( abs ( fgState.MouseWheelTicks ) > 120 )\r
+               {\r
+                       int direction = ( fgState.MouseWheelTicks > 0 ) ? 1 : -1;\r
+\r
+            if( ! FETCH_WCB( *window, MouseWheel ) &&\r
+                ! FETCH_WCB( *window, Mouse ) )\r
+                break;\r
+\r
+            fgSetWindow( window );\r
+            fgState.Modifiers = fghGetWin32Modifiers( );\r
+\r
+            /*\r
+             * XXX Should use WHEEL_DELTA instead of 120\r
+             */\r
+            while( abs ( fgState.MouseWheelTicks ) > 120 )\r
+                       {\r
+                if( FETCH_WCB( *window, MouseWheel ) )\r
+                    INVOKE_WCB( *window, MouseWheel,\r
+                                ( wheel_number,\r
+                                  direction,\r
+                                  window->State.MouseX,\r
+                                  window->State.MouseY\r
+                                )\r
+                    );\r
+                else  /* No mouse wheel, call the mouse button callback twice */\r
+                               {\r
+                    /*\r
+                     * Map wheel zero to button 3 and 4; +1 to 3, -1 to 4\r
+                     *  "    "   one                     +1 to 5, -1 to 6, ...\r
+                     *\r
+                     * XXX The below assumes that you have no more than 3 mouse\r
+                     * XXX buttons.  Sorry.\r
+                     */\r
+                    int button = wheel_number * 2 + 3;\r
+                    if( direction < 0 )\r
+                        ++button;\r
+                    INVOKE_WCB( *window, Mouse,\r
+                                ( button, GLUT_DOWN,\r
+                                  window->State.MouseX, window->State.MouseY )\r
+                    );\r
+                    INVOKE_WCB( *window, Mouse,\r
+                                ( button, GLUT_UP,\r
+                                  window->State.MouseX, window->State.MouseY )\r
+                    );\r
+                               }\r
+\r
+                /*\r
+                 * XXX Should use WHEEL_DELTA instead of 120\r
+                 */\r
+                               fgState.MouseWheelTicks -= 120 * direction;\r
+                       }\r
+\r
+            fgState.Modifiers = INVALID_MODIFIERS;\r
+               }\r
+    }\r
+    break ;\r
+\r
+    case WM_SYSKEYDOWN:\r
+    case WM_KEYDOWN:\r
+    {\r
+        int keypress = -1;\r
+        POINT mouse_pos ;\r
+\r
+        if( ( fgState.KeyRepeat==GLUT_KEY_REPEAT_OFF || window->State.IgnoreKeyRepeat==GL_TRUE ) && (HIWORD(lParam) & KF_REPEAT) )\r
+            break;\r
+\r
+        /*\r
+         * Remember the current modifiers state. This is done here in order\r
+         * to make sure the VK_DELETE keyboard callback is executed properly.\r
+         */\r
+        fgState.Modifiers = fghGetWin32Modifiers( );\r
+\r
+        GetCursorPos( &mouse_pos );\r
+        ScreenToClient( window->Window.Handle, &mouse_pos );\r
+\r
+        window->State.MouseX = mouse_pos.x;\r
+        window->State.MouseY = mouse_pos.y;\r
+\r
+        /* Convert the Win32 keystroke codes to GLUTtish way */\r
+#       define KEY(a,b) case a: keypress = b; break;\r
+\r
+        switch( wParam )\r
+        {\r
+            KEY( VK_F1,     GLUT_KEY_F1        );\r
+            KEY( VK_F2,     GLUT_KEY_F2        );\r
+            KEY( VK_F3,     GLUT_KEY_F3        );\r
+            KEY( VK_F4,     GLUT_KEY_F4        );\r
+            KEY( VK_F5,     GLUT_KEY_F5        );\r
+            KEY( VK_F6,     GLUT_KEY_F6        );\r
+            KEY( VK_F7,     GLUT_KEY_F7        );\r
+            KEY( VK_F8,     GLUT_KEY_F8        );\r
+            KEY( VK_F9,     GLUT_KEY_F9        );\r
+            KEY( VK_F10,    GLUT_KEY_F10       );\r
+            KEY( VK_F11,    GLUT_KEY_F11       );\r
+            KEY( VK_F12,    GLUT_KEY_F12       );\r
+            KEY( VK_PRIOR,  GLUT_KEY_PAGE_UP   );\r
+            KEY( VK_NEXT,   GLUT_KEY_PAGE_DOWN );\r
+            KEY( VK_HOME,   GLUT_KEY_HOME      );\r
+            KEY( VK_END,    GLUT_KEY_END       );\r
+            KEY( VK_LEFT,   GLUT_KEY_LEFT      );\r
+            KEY( VK_UP,     GLUT_KEY_UP        );\r
+            KEY( VK_RIGHT,  GLUT_KEY_RIGHT     );\r
+            KEY( VK_DOWN,   GLUT_KEY_DOWN      );\r
+            KEY( VK_INSERT, GLUT_KEY_INSERT    );\r
+            KEY( VK_LCONTROL, GLUT_KEY_CTRL_L  );\r
+            KEY( VK_RCONTROL, GLUT_KEY_CTRL_R  );\r
+            KEY( VK_LSHIFT, GLUT_KEY_SHIFT_L   );\r
+            KEY( VK_RSHIFT, GLUT_KEY_SHIFT_R   );\r
+            KEY( VK_LMENU,  GLUT_KEY_ALT_L     );\r
+            KEY( VK_RMENU,  GLUT_KEY_ALT_R     );\r
+\r
+        case VK_DELETE:\r
+            /* The delete key should be treated as an ASCII keypress: */\r
+            INVOKE_WCB( *window, Keyboard,\r
+                        ( 127, window->State.MouseX, window->State.MouseY )\r
+            );\r
+        }\r
+\r
+#if defined(_WIN32_WCE)\r
+        if(!(lParam & 0x40000000)) /* Prevent auto-repeat */\r
+        {\r
+            if(wParam==(unsigned)gxKeyList.vkRight)\r
+                keypress = GLUT_KEY_RIGHT;\r
+            else if(wParam==(unsigned)gxKeyList.vkLeft)\r
+                keypress = GLUT_KEY_LEFT;\r
+            else if(wParam==(unsigned)gxKeyList.vkUp)\r
+                keypress = GLUT_KEY_UP;\r
+            else if(wParam==(unsigned)gxKeyList.vkDown)\r
+                keypress = GLUT_KEY_DOWN;\r
+            else if(wParam==(unsigned)gxKeyList.vkA)\r
+                keypress = GLUT_KEY_F1;\r
+            else if(wParam==(unsigned)gxKeyList.vkB)\r
+                keypress = GLUT_KEY_F2;\r
+            else if(wParam==(unsigned)gxKeyList.vkC)\r
+                keypress = GLUT_KEY_F3;\r
+            else if(wParam==(unsigned)gxKeyList.vkStart)\r
+                keypress = GLUT_KEY_F4;\r
+        }\r
+#endif\r
+\r
+        if( keypress != -1 )\r
+            INVOKE_WCB( *window, Special,\r
+                        ( keypress,\r
+                          window->State.MouseX, window->State.MouseY )\r
+            );\r
+\r
+        fgState.Modifiers = INVALID_MODIFIERS;\r
+    }\r
+    break;\r
+\r
+    case WM_SYSKEYUP:\r
+    case WM_KEYUP:\r
+    {\r
+        int keypress = -1;\r
+        POINT mouse_pos;\r
+\r
+        /*\r
+         * Remember the current modifiers state. This is done here in order\r
+         * to make sure the VK_DELETE keyboard callback is executed properly.\r
+         */\r
+        fgState.Modifiers = fghGetWin32Modifiers( );\r
+\r
+        GetCursorPos( &mouse_pos );\r
+        ScreenToClient( window->Window.Handle, &mouse_pos );\r
+\r
+        window->State.MouseX = mouse_pos.x;\r
+        window->State.MouseY = mouse_pos.y;\r
+\r
+        /*\r
+         * Convert the Win32 keystroke codes to GLUTtish way.\r
+         * "KEY(a,b)" was defined under "WM_KEYDOWN"\r
+         */\r
+\r
+        switch( wParam )\r
+        {\r
+            KEY( VK_F1,     GLUT_KEY_F1        );\r
+            KEY( VK_F2,     GLUT_KEY_F2        );\r
+            KEY( VK_F3,     GLUT_KEY_F3        );\r
+            KEY( VK_F4,     GLUT_KEY_F4        );\r
+            KEY( VK_F5,     GLUT_KEY_F5        );\r
+            KEY( VK_F6,     GLUT_KEY_F6        );\r
+            KEY( VK_F7,     GLUT_KEY_F7        );\r
+            KEY( VK_F8,     GLUT_KEY_F8        );\r
+            KEY( VK_F9,     GLUT_KEY_F9        );\r
+            KEY( VK_F10,    GLUT_KEY_F10       );\r
+            KEY( VK_F11,    GLUT_KEY_F11       );\r
+            KEY( VK_F12,    GLUT_KEY_F12       );\r
+            KEY( VK_PRIOR,  GLUT_KEY_PAGE_UP   );\r
+            KEY( VK_NEXT,   GLUT_KEY_PAGE_DOWN );\r
+            KEY( VK_HOME,   GLUT_KEY_HOME      );\r
+            KEY( VK_END,    GLUT_KEY_END       );\r
+            KEY( VK_LEFT,   GLUT_KEY_LEFT      );\r
+            KEY( VK_UP,     GLUT_KEY_UP        );\r
+            KEY( VK_RIGHT,  GLUT_KEY_RIGHT     );\r
+            KEY( VK_DOWN,   GLUT_KEY_DOWN      );\r
+            KEY( VK_INSERT, GLUT_KEY_INSERT    );\r
+            KEY( VK_LCONTROL, GLUT_KEY_CTRL_L  );\r
+            KEY( VK_RCONTROL, GLUT_KEY_CTRL_R  );\r
+            KEY( VK_LSHIFT, GLUT_KEY_SHIFT_L   );\r
+            KEY( VK_RSHIFT, GLUT_KEY_SHIFT_R   );\r
+            KEY( VK_LMENU,  GLUT_KEY_ALT_L     );\r
+            KEY( VK_RMENU,  GLUT_KEY_ALT_R     );\r
+\r
+          case VK_DELETE:\r
+              /* The delete key should be treated as an ASCII keypress: */\r
+              INVOKE_WCB( *window, KeyboardUp,\r
+                          ( 127, window->State.MouseX, window->State.MouseY )\r
+              );\r
+              break;\r
+\r
+        default:\r
+        {\r
+#if !defined(_WIN32_WCE)\r
+            BYTE state[ 256 ];\r
+            WORD code[ 2 ];\r
+\r
+            GetKeyboardState( state );\r
+\r
+            if( ToAscii( (UINT)wParam, 0, state, code, 0 ) == 1 )\r
+                wParam=code[ 0 ];\r
+\r
+            INVOKE_WCB( *window, KeyboardUp,\r
+                        ( (char)wParam,\r
+                          window->State.MouseX, window->State.MouseY )\r
+            );\r
+#endif /* !defined(_WIN32_WCE) */\r
+        }\r
+        }\r
+\r
+        if( keypress != -1 )\r
+            INVOKE_WCB( *window, SpecialUp,\r
+                        ( keypress,\r
+                          window->State.MouseX, window->State.MouseY )\r
+            );\r
+\r
+        fgState.Modifiers = INVALID_MODIFIERS;\r
+    }\r
+    break;\r
+\r
+    case WM_SYSCHAR:\r
+    case WM_CHAR:\r
+    {\r
+      if( (fgState.KeyRepeat==GLUT_KEY_REPEAT_OFF || window->State.IgnoreKeyRepeat==GL_TRUE) && (HIWORD(lParam) & KF_REPEAT) )\r
+            break;\r
+\r
+        fgState.Modifiers = fghGetWin32Modifiers( );\r
+        INVOKE_WCB( *window, Keyboard,\r
+                    ( (char)wParam,\r
+                      window->State.MouseX, window->State.MouseY )\r
+        );\r
+        fgState.Modifiers = INVALID_MODIFIERS;\r
+    }\r
+    break;\r
+\r
+    case WM_CAPTURECHANGED:\r
+        /* User has finished resizing the window, force a redraw */\r
+        INVOKE_WCB( *window, Display, ( ) );\r
+\r
+        /*lRet = DefWindowProc( hWnd, uMsg, wParam, lParam ); */\r
+        break;\r
+\r
+        /* Other messages that I have seen and which are not handled already */\r
+    case WM_SETTEXT:  /* 0x000c */\r
+        lRet = DefWindowProc( hWnd, uMsg, wParam, lParam );\r
+        /* Pass it on to "DefWindowProc" to set the window text */\r
+        break;\r
+\r
+    case WM_GETTEXT:  /* 0x000d */\r
+        /* Ideally we would copy the title of the window into "lParam" */\r
+        /* strncpy ( (char *)lParam, "Window Title", wParam );\r
+           lRet = ( wParam > 12 ) ? 12 : wParam;  */\r
+        /* the number of characters copied */\r
+        lRet = DefWindowProc( hWnd, uMsg, wParam, lParam );\r
+        break;\r
+\r
+    case WM_GETTEXTLENGTH:  /* 0x000e */\r
+        /* Ideally we would get the length of the title of the window */\r
+        lRet = 12;\r
+        /* the number of characters in "Window Title\0" (see above) */\r
+        break;\r
+\r
+    case WM_ERASEBKGND:  /* 0x0014 */\r
+        lRet = DefWindowProc( hWnd, uMsg, wParam, lParam );\r
+        break;\r
+\r
+#if !defined(_WIN32_WCE)\r
+    case WM_SYNCPAINT:  /* 0x0088 */\r
+        /* Another window has moved, need to update this one */\r
+        window->State.Redisplay = GL_TRUE;\r
+        lRet = DefWindowProc( hWnd, uMsg, wParam, lParam );\r
+        /* Help screen says this message must be passed to "DefWindowProc" */\r
+        break;\r
+\r
+    case WM_NCPAINT:  /* 0x0085 */\r
+      /* Need to update the border of this window */\r
+        lRet = DefWindowProc( hWnd, uMsg, wParam, lParam );\r
+        /* Pass it on to "DefWindowProc" to repaint a standard border */\r
+        break;\r
+\r
+    case WM_SYSCOMMAND :  /* 0x0112 */\r
+        {\r
+          /*\r
+           * We have received a system command message.  Try to act on it.\r
+           * The commands are passed in through the "wParam" parameter:\r
+           * The least significant digit seems to be which edge of the window\r
+           * is being used for a resize event:\r
+           *     4  3  5\r
+           *     1     2\r
+           *     7  6  8\r
+           * Congratulations and thanks to Richard Rauch for figuring this out..\r
+           */\r
+            switch ( wParam & 0xfff0 )\r
+            {\r
+            case SC_SIZE       :\r
+                break ;\r
+\r
+            case SC_MOVE       :\r
+                break ;\r
+\r
+            case SC_MINIMIZE   :\r
+                /* User has clicked on the "-" to minimize the window */\r
+                /* Turn off the visibility */\r
+                window->State.Visible = GL_FALSE ;\r
+\r
+                break ;\r
+\r
+            case SC_MAXIMIZE   :\r
+                break ;\r
+\r
+            case SC_NEXTWINDOW :\r
+                break ;\r
+\r
+            case SC_PREVWINDOW :\r
+                break ;\r
+\r
+            case SC_CLOSE      :\r
+                /* Followed very closely by a WM_CLOSE message */\r
+                break ;\r
+\r
+            case SC_VSCROLL    :\r
+                break ;\r
+\r
+            case SC_HSCROLL    :\r
+                break ;\r
+\r
+            case SC_MOUSEMENU  :\r
+                break ;\r
+\r
+            case SC_KEYMENU    :\r
+                break ;\r
+\r
+            case SC_ARRANGE    :\r
+                break ;\r
+\r
+            case SC_RESTORE    :\r
+                break ;\r
+\r
+            case SC_TASKLIST   :\r
+                break ;\r
+\r
+            case SC_SCREENSAVE :\r
+                break ;\r
+\r
+            case SC_HOTKEY     :\r
+                break ;\r
+\r
+#if(WINVER >= 0x0400)\r
+            case SC_DEFAULT    :\r
+                break ;\r
+\r
+            case SC_MONITORPOWER    :\r
+                break ;\r
+\r
+            case SC_CONTEXTHELP    :\r
+                break ;\r
+#endif /* WINVER >= 0x0400 */\r
+\r
+            default:\r
+#if _DEBUG\r
+                fgWarning( "Unknown wParam type 0x%x", wParam );\r
+#endif\r
+                break;\r
+            }\r
+        }\r
+#endif /* !defined(_WIN32_WCE) */\r
+\r
+        /* We need to pass the message on to the operating system as well */\r
+        lRet = DefWindowProc( hWnd, uMsg, wParam, lParam );\r
+        break;\r
+\r
+#ifdef WM_TOUCH\r
+       /* handle multi-touch messages */\r
+       case WM_TOUCH:\r
+       {\r
+               unsigned int numInputs = (unsigned int)wParam;\r
+               unsigned int i = 0;\r
+               TOUCHINPUT* ti = (TOUCHINPUT*)malloc( sizeof(TOUCHINPUT)*numInputs);\r
+\r
+               if (fghGetTouchInputInfo == (pGetTouchInputInfo)0xDEADBEEF) {\r
+                   fghGetTouchInputInfo = (pGetTouchInputInfo)GetProcAddress(GetModuleHandle("user32"),"GetTouchInputInfo");\r
+                   fghCloseTouchInputHandle = (pCloseTouchInputHandle)GetProcAddress(GetModuleHandle("user32"),"CloseTouchInputHandle");\r
+               }\r
+\r
+               if (!fghGetTouchInputInfo) { \r
+                       free( (void*)ti );\r
+                       break;\r
+               }\r
+\r
+               if (fghGetTouchInputInfo( (HTOUCHINPUT)lParam, numInputs, ti, sizeof(TOUCHINPUT) )) {\r
+                       /* Handle each contact point */\r
+                       for (i = 0; i < numInputs; ++i ) {\r
+\r
+                               POINT tp;\r
+                               tp.x = TOUCH_COORD_TO_PIXEL(ti[i].x);\r
+                               tp.y = TOUCH_COORD_TO_PIXEL(ti[i].y);\r
+                               ScreenToClient( hWnd, &tp );\r
+\r
+                               ti[i].dwID = ti[i].dwID * 2;\r
+\r
+                               if (ti[i].dwFlags & TOUCHEVENTF_DOWN) {\r
+                                       INVOKE_WCB( *window, MultiEntry,  ( ti[i].dwID, GLUT_ENTERED ) );\r
+                                       INVOKE_WCB( *window, MultiButton, ( ti[i].dwID, tp.x, tp.y, 0, GLUT_DOWN ) );\r
+                               } else if (ti[i].dwFlags & TOUCHEVENTF_MOVE) {\r
+                                       INVOKE_WCB( *window, MultiMotion, ( ti[i].dwID, tp.x, tp.y ) );\r
+                               } else if (ti[i].dwFlags & TOUCHEVENTF_UP)   { \r
+                                       INVOKE_WCB( *window, MultiButton, ( ti[i].dwID, tp.x, tp.y, 0, GLUT_UP ) );\r
+                                       INVOKE_WCB( *window, MultiEntry,  ( ti[i].dwID, GLUT_LEFT ) );\r
+                               }\r
+                       }\r
+               }\r
+               fghCloseTouchInputHandle((HTOUCHINPUT)lParam);\r
+               free( (void*)ti );\r
+               lRet = 0; /*DefWindowProc( hWnd, uMsg, wParam, lParam );*/\r
+               break;\r
+       }\r
+#endif\r
+    default:\r
+        /* Handle unhandled messages */\r
+        lRet = DefWindowProc( hWnd, uMsg, wParam, lParam );\r
+        break;\r
+    }\r
+\r
+    return lRet;\r
+}\r
+#endif\r
+\r
+/*** END OF FILE ***/\r
diff --git a/src/Common/freeglut_menu.c b/src/Common/freeglut_menu.c
new file mode 100644 (file)
index 0000000..2a963e2
--- /dev/null
@@ -0,0 +1,1002 @@
+/*\r
+ * freeglut_menu.c\r
+ *\r
+ * Pull-down menu creation and handling.\r
+ *\r
+ * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.\r
+ * Written by Pawel W. Olszta, <olszta@sourceforge.net>\r
+ * Creation date: Thu Dec 16 1999\r
+ *\r
+ * Permission is hereby granted, free of charge, to any person obtaining a\r
+ * copy of this software and associated documentation files (the "Software"),\r
+ * to deal in the Software without restriction, including without limitation\r
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
+ * and/or sell copies of the Software, and to permit persons to whom the\r
+ * Software is furnished to do so, subject to the following conditions:\r
+ *\r
+ * The above copyright notice and this permission notice shall be included\r
+ * in all copies or substantial portions of the Software.\r
+ *\r
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL\r
+ * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
+ */\r
+\r
+#define FREEGLUT_BUILDING_LIB\r
+#include <GL/freeglut.h>\r
+#include "freeglut_internal.h"\r
+\r
+/* -- DEFINITIONS ---------------------------------------------------------- */\r
+\r
+/*\r
+ * FREEGLUT_MENU_FONT can be any freeglut bitmapped font.\r
+ * (Stroked fonts would not be out of the question, but we'd need to alter\r
+ *  code, since GLUT (hence freeglut) does not quite unify stroked and\r
+ *  bitmapped font handling.)\r
+ * Old UNIX/X11 GLUT (BSD, UNIX, IRIX, LINUX, HPUX, ...) used a system\r
+ * font best approximated by an 18-pixel HELVETICA, I think.  MS-WINDOWS\r
+ * GLUT used something closest to the 8x13 fixed-width font.  (Old\r
+ * GLUT apparently uses host-system menus rather than building its own.\r
+ * freeglut is building its own menus from scratch.)\r
+ *\r
+ * FREEGLUT_MENU_HEIGHT gives the height of ONE menu box.  This should be\r
+ * the distances between two adjacent menu entries.  It should scale\r
+ * automatically with the font choice, so you needn't alter it---unless you\r
+ * use a stroked font.\r
+ *\r
+ * FREEGLUT_MENU_BORDER says how many pixels to allow around the edge of a\r
+ * menu.  (It also seems to be the same as the number of pixels used as\r
+ * a border around *items* to separate them from neighbors.  John says\r
+ * that that wasn't the original intent...if not, perhaps we need another\r
+ * symbolic constant, FREEGLUT_MENU_ITEM_BORDER, or such.)\r
+ */\r
+#if TARGET_HOST_MS_WINDOWS\r
+#define  FREEGLUT_MENU_FONT    GLUT_BITMAP_8_BY_13\r
+#else\r
+#define  FREEGLUT_MENU_FONT    GLUT_BITMAP_HELVETICA_18\r
+#endif\r
+\r
+#define  FREEGLUT_MENU_HEIGHT  (glutBitmapHeight(FREEGLUT_MENU_FONT) + \\r
+                                FREEGLUT_MENU_BORDER)\r
+#define  FREEGLUT_MENU_BORDER   2\r
+\r
+\r
+/*\r
+ * These variables are for rendering the freeglut menu items.\r
+ *\r
+ * The choices are fore- and background, with and without h for Highlighting.\r
+ * Old GLUT appeared to be system-dependant for its colors (sigh) so we are\r
+ * too.  These variables should be stuffed into global state and initialized\r
+ * via the glutInit*() system.\r
+ */\r
+#if TARGET_HOST_MS_WINDOWS\r
+static float menu_pen_fore  [4] = {0.0f,  0.0f,  0.0f,  1.0f};\r
+static float menu_pen_back  [4] = {0.85f, 0.85f, 0.85f, 1.0f};\r
+static float menu_pen_hfore [4] = {1.0f,  1.0f,  1.0f,  1.0f};\r
+static float menu_pen_hback [4] = {0.15f, 0.15f, 0.45f, 1.0f};\r
+#else\r
+static float menu_pen_fore  [4] = {0.0f,  0.0f,  0.0f,  1.0f};\r
+static float menu_pen_back  [4] = {0.70f, 0.70f, 0.70f, 1.0f};\r
+static float menu_pen_hfore [4] = {0.0f,  0.0f,  0.0f,  1.0f};\r
+static float menu_pen_hback [4] = {1.0f,  1.0f,  1.0f,  1.0f};\r
+#endif\r
+\r
+/* -- PRIVATE FUNCTIONS ---------------------------------------------------- */\r
+\r
+/*\r
+ * Private function to find a menu entry by index\r
+ */\r
+static SFG_MenuEntry *fghFindMenuEntry( SFG_Menu* menu, int index )\r
+{\r
+    SFG_MenuEntry *entry;\r
+    int i = 1;\r
+\r
+    for( entry = (SFG_MenuEntry *)menu->Entries.First;\r
+         entry;\r
+         entry = (SFG_MenuEntry *)entry->Node.Next )\r
+    {\r
+        if( i == index )\r
+            break;\r
+        ++i;\r
+    }\r
+\r
+    return entry;\r
+}\r
+\r
+/*\r
+ * Deactivates a menu pointed by the function argument.\r
+ */\r
+static void fghDeactivateSubMenu( SFG_MenuEntry *menuEntry )\r
+{\r
+    SFG_MenuEntry *subMenuIter;\r
+    /* Hide the present menu's window */\r
+    fgSetWindow( menuEntry->SubMenu->Window );\r
+    glutHideWindow( );\r
+\r
+    /* Forget about having that menu active anymore, now: */\r
+    menuEntry->SubMenu->Window->ActiveMenu = NULL;\r
+    menuEntry->SubMenu->IsActive = GL_FALSE;\r
+    menuEntry->SubMenu->ActiveEntry = NULL;\r
+\r
+    /* Hide all submenu windows, and the root menu's window. */\r
+    for ( subMenuIter = (SFG_MenuEntry *)menuEntry->SubMenu->Entries.First;\r
+          subMenuIter;\r
+          subMenuIter = (SFG_MenuEntry *)subMenuIter->Node.Next )\r
+    {\r
+        subMenuIter->IsActive = GL_FALSE;\r
+\r
+        /* Is that an active submenu by any case? */\r
+        if( subMenuIter->SubMenu )\r
+            fghDeactivateSubMenu( subMenuIter );\r
+    }\r
+\r
+    fgSetWindow ( menuEntry->SubMenu->ParentWindow ) ;\r
+}\r
+\r
+/*\r
+ * Private function to get the virtual maximum screen extent\r
+ */\r
+static GLvoid fghGetVMaxExtent( SFG_Window* window, int* x, int* y )\r
+{\r
+    if( fgStructure.GameModeWindow )\r
+    {\r
+#if TARGET_HOST_POSIX_X11\r
+        int wx, wy;\r
+        Window w;\r
+\r
+        XTranslateCoordinates(\r
+            fgDisplay.Display,\r
+            window->Window.Handle,\r
+            fgDisplay.RootWindow,\r
+            0, 0, &wx, &wy, &w);\r
+\r
+        *x = fgState.GameModeSize.X + wx;\r
+        *y = fgState.GameModeSize.Y + wy;\r
+#else\r
+        *x = glutGet ( GLUT_SCREEN_WIDTH );\r
+        *y = glutGet ( GLUT_SCREEN_HEIGHT );\r
+#endif\r
+    }\r
+    else\r
+    {\r
+        *x = fgDisplay.ScreenWidth;\r
+        *y = fgDisplay.ScreenHeight;\r
+    }\r
+}\r
+\r
+/*\r
+ * Private function to check for the current menu/sub menu activity state\r
+ */\r
+static GLboolean fghCheckMenuStatus( SFG_Menu* menu )\r
+{\r
+    SFG_MenuEntry* menuEntry;\r
+    int x, y;\r
+\r
+    /* First of all check any of the active sub menus... */\r
+    for( menuEntry = (SFG_MenuEntry *)menu->Entries.First;\r
+         menuEntry;\r
+         menuEntry = (SFG_MenuEntry *)menuEntry->Node.Next )\r
+    {\r
+        if( menuEntry->SubMenu && menuEntry->IsActive )\r
+        {\r
+            /*\r
+             * OK, have the sub-menu checked, too. If it returns GL_TRUE, it\r
+             * will mean that it caught the mouse cursor and we do not need\r
+             * to regenerate the activity list, and so our parents do...\r
+             */\r
+            GLboolean return_status;\r
+\r
+            menuEntry->SubMenu->Window->State.MouseX =\r
+                menu->Window->State.MouseX + menu->X - menuEntry->SubMenu->X;\r
+            menuEntry->SubMenu->Window->State.MouseY =\r
+                menu->Window->State.MouseY + menu->Y - menuEntry->SubMenu->Y;\r
+            return_status = fghCheckMenuStatus( menuEntry->SubMenu );\r
+\r
+            if ( return_status )\r
+                return GL_TRUE;\r
+        }\r
+    }\r
+\r
+    /* That much about our sub menus, let's get to checking the current menu: */\r
+    x = menu->Window->State.MouseX;\r
+    y = menu->Window->State.MouseY;\r
+\r
+    /* Check if the mouse cursor is contained within the current menu box */\r
+    if( ( x >= FREEGLUT_MENU_BORDER ) &&\r
+        ( x < menu->Width  - FREEGLUT_MENU_BORDER ) &&\r
+        ( y >= FREEGLUT_MENU_BORDER ) &&\r
+        ( y < menu->Height - FREEGLUT_MENU_BORDER )  )\r
+    {\r
+        int menuID = ( y - FREEGLUT_MENU_BORDER ) / FREEGLUT_MENU_HEIGHT;\r
+\r
+        /* The mouse cursor is somewhere over our box, check it out. */\r
+        menuEntry = fghFindMenuEntry( menu, menuID + 1 );\r
+        FREEGLUT_INTERNAL_ERROR_EXIT( menuEntry, "Cannot find menu entry",\r
+                                      "fghCheckMenuStatus" );\r
+\r
+        menuEntry->IsActive = GL_TRUE;\r
+        menuEntry->Ordinal = menuID;\r
+\r
+        /*\r
+         * If this is not the same as the last active menu entry, deactivate\r
+         * the previous entry.  Specifically, if the previous active entry\r
+         * was a submenu then deactivate it.\r
+         */\r
+        if( menu->ActiveEntry && ( menuEntry != menu->ActiveEntry ) )\r
+            if( menu->ActiveEntry->SubMenu )\r
+                fghDeactivateSubMenu( menu->ActiveEntry );\r
+\r
+        if( menuEntry != menu->ActiveEntry )\r
+        {\r
+            menu->Window->State.Redisplay = GL_TRUE;\r
+            if( menu->ActiveEntry )\r
+                menu->ActiveEntry->IsActive = GL_FALSE;\r
+        }\r
+\r
+        menu->ActiveEntry = menuEntry;\r
+        menu->IsActive = GL_TRUE;  /* XXX Do we need this? */\r
+\r
+        /*\r
+         * OKi, we have marked that entry as active, but it would be also\r
+         * nice to have its contents updated, in case it's a sub menu.\r
+         * Also, ignore the return value of the check function:\r
+         */\r
+        if( menuEntry->SubMenu )\r
+        {\r
+            if ( ! menuEntry->SubMenu->IsActive )\r
+            {\r
+                int max_x, max_y;\r
+                SFG_Window *current_window = fgStructure.CurrentWindow;\r
+\r
+                /* Set up the initial menu position now... */\r
+                menuEntry->SubMenu->IsActive = GL_TRUE;\r
+\r
+                /* Set up the initial submenu position now: */\r
+                fghGetVMaxExtent(menu->ParentWindow, &max_x, &max_y);\r
+                menuEntry->SubMenu->X = menu->X + menu->Width;\r
+                menuEntry->SubMenu->Y = menu->Y +\r
+                    menuEntry->Ordinal * FREEGLUT_MENU_HEIGHT;\r
+\r
+                if( menuEntry->SubMenu->X + menuEntry->SubMenu->Width > max_x )\r
+                    menuEntry->SubMenu->X = menu->X - menuEntry->SubMenu->Width;\r
+\r
+                if( menuEntry->SubMenu->Y + menuEntry->SubMenu->Height > max_y )\r
+                {\r
+                    menuEntry->SubMenu->Y -= ( menuEntry->SubMenu->Height -\r
+                                               FREEGLUT_MENU_HEIGHT -\r
+                                               2 * FREEGLUT_MENU_BORDER );\r
+                    if( menuEntry->SubMenu->Y < 0 )\r
+                        menuEntry->SubMenu->Y = 0;\r
+                }\r
+\r
+                fgSetWindow( menuEntry->SubMenu->Window );\r
+                glutPositionWindow( menuEntry->SubMenu->X,\r
+                                    menuEntry->SubMenu->Y );\r
+                glutReshapeWindow( menuEntry->SubMenu->Width,\r
+                                   menuEntry->SubMenu->Height );\r
+                glutPopWindow( );\r
+                glutShowWindow( );\r
+                menuEntry->SubMenu->Window->ActiveMenu = menuEntry->SubMenu;\r
+                fgSetWindow( current_window );\r
+                menuEntry->SubMenu->Window->State.MouseX =\r
+                    x + menu->X - menuEntry->SubMenu->X;\r
+                menuEntry->SubMenu->Window->State.MouseY =\r
+                    y + menu->Y - menuEntry->SubMenu->Y;\r
+                fghCheckMenuStatus( menuEntry->SubMenu );\r
+            }\r
+\r
+            /* Activate it because its parent entry is active */\r
+            menuEntry->SubMenu->IsActive = GL_TRUE;  /* XXX Do we need this? */\r
+        }\r
+\r
+        /* Report back that we have caught the menu cursor */\r
+        return GL_TRUE;\r
+    }\r
+\r
+    /* Looks like the menu cursor is somewhere else... */\r
+    if( menu->ActiveEntry && menu->ActiveEntry->IsActive &&\r
+        ( !menu->ActiveEntry->SubMenu ||\r
+          !menu->ActiveEntry->SubMenu->IsActive ) )\r
+    {\r
+        menu->Window->State.Redisplay = GL_TRUE;\r
+        menu->ActiveEntry->IsActive = GL_FALSE;\r
+        menu->ActiveEntry = NULL;\r
+    }\r
+\r
+    return GL_FALSE;\r
+}\r
+\r
+/*\r
+ * Displays a menu box and all of its submenus (if they are active)\r
+ */\r
+static void fghDisplayMenuBox( SFG_Menu* menu )\r
+{\r
+    SFG_MenuEntry *menuEntry;\r
+    int i;\r
+    int border = FREEGLUT_MENU_BORDER;\r
+\r
+    /*\r
+     * Have the menu box drawn first. The +- values are\r
+     * here just to make it more nice-looking...\r
+     */\r
+    /* a non-black dark version of the below. */\r
+    glColor4f( 1.0f, 1.0f, 1.0f, 1.0f );\r
+    glBegin( GL_QUAD_STRIP );\r
+        glVertex2i( menu->Width         , 0                    );\r
+        glVertex2i( menu->Width - border,                border);\r
+        glVertex2i( 0                   , 0                    );\r
+        glVertex2i(               border,                border);\r
+        glVertex2i( 0                   , menu->Height         );\r
+        glVertex2i(               border, menu->Height - border);\r
+    glEnd( );\r
+\r
+    /* a non-black dark version of the below. */\r
+    glColor4f( 0.5f, 0.5f, 0.5f, 1.0f );\r
+    glBegin( GL_QUAD_STRIP );\r
+        glVertex2i( 0                   , menu->Height         );\r
+        glVertex2i(               border, menu->Height - border);\r
+        glVertex2i( menu->Width         , menu->Height         );\r
+        glVertex2i( menu->Width - border, menu->Height - border);\r
+        glVertex2i( menu->Width         , 0                    );\r
+        glVertex2i( menu->Width - border,                border);\r
+    glEnd( );\r
+\r
+    glColor4fv( menu_pen_back );\r
+    glBegin( GL_QUADS );\r
+        glVertex2i(               border,                border);\r
+        glVertex2i( menu->Width - border,                border);\r
+        glVertex2i( menu->Width - border, menu->Height - border);\r
+        glVertex2i(               border, menu->Height - border);\r
+    glEnd( );\r
+\r
+    /* Check if any of the submenus is currently active... */\r
+    for( menuEntry = (SFG_MenuEntry *)menu->Entries.First;\r
+         menuEntry;\r
+         menuEntry = (SFG_MenuEntry *)menuEntry->Node.Next )\r
+    {\r
+        /* Has the menu been marked as active, maybe? */\r
+        if( menuEntry->IsActive )\r
+        {\r
+            /*\r
+             * That's truly right, and we need to have it highlighted.\r
+             * There is an assumption that mouse cursor didn't move\r
+             * since the last check of menu activity state:\r
+             */\r
+            int menuID = menuEntry->Ordinal;\r
+\r
+            /* So have the highlight drawn... */\r
+            glColor4fv( menu_pen_hback );\r
+            glBegin( GL_QUADS );\r
+                glVertex2i( border,\r
+                            (menuID + 0)*FREEGLUT_MENU_HEIGHT + border );\r
+                glVertex2i( menu->Width - border,\r
+                            (menuID + 0)*FREEGLUT_MENU_HEIGHT + border );\r
+                glVertex2i( menu->Width - border,\r
+                            (menuID + 1)*FREEGLUT_MENU_HEIGHT + border );\r
+                glVertex2i( border,\r
+                            (menuID + 1)*FREEGLUT_MENU_HEIGHT + border );\r
+            glEnd( );\r
+        }\r
+    }\r
+\r
+    /* Print the menu entries now... */\r
+\r
+    glColor4fv( menu_pen_fore );\r
+\r
+    for( menuEntry = (SFG_MenuEntry *)menu->Entries.First, i = 0;\r
+         menuEntry;\r
+         menuEntry = (SFG_MenuEntry *)menuEntry->Node.Next, ++i )\r
+    {\r
+        /* If the menu entry is active, set the color to white */\r
+        if( menuEntry->IsActive )\r
+            glColor4fv( menu_pen_hfore );\r
+\r
+        /* Move the raster into position... */\r
+        /* Try to center the text - JCJ 31 July 2003*/\r
+        glRasterPos2i(\r
+            2 * border,\r
+            ( i + 1 )*FREEGLUT_MENU_HEIGHT -\r
+            ( int )( FREEGLUT_MENU_HEIGHT*0.3 - border )\r
+        );\r
+\r
+        /* Have the label drawn, character after character: */\r
+        glutBitmapString( FREEGLUT_MENU_FONT,\r
+                          (unsigned char *)menuEntry->Text);\r
+\r
+        /* If it's a submenu, draw a right arrow */\r
+        if( menuEntry->SubMenu )\r
+        {\r
+            int width = glutBitmapWidth( FREEGLUT_MENU_FONT, '_' );\r
+            int x_base = menu->Width - 2 - width;\r
+            int y_base = i*FREEGLUT_MENU_HEIGHT + border;\r
+            glBegin( GL_TRIANGLES );\r
+                glVertex2i( x_base, y_base + 2*border);\r
+                glVertex2i( menu->Width - 2, y_base +\r
+                            ( FREEGLUT_MENU_HEIGHT + border) / 2 );\r
+                glVertex2i( x_base, y_base + FREEGLUT_MENU_HEIGHT - border );\r
+            glEnd( );\r
+        }\r
+\r
+        /* If the menu entry is active, reset the color */\r
+        if( menuEntry->IsActive )\r
+            glColor4fv( menu_pen_fore );\r
+    }\r
+}\r
+\r
+/*\r
+ * Private static function to set the parent window of a submenu and all\r
+ * of its submenus\r
+ */\r
+static void fghSetMenuParentWindow( SFG_Window *window, SFG_Menu *menu )\r
+{\r
+    SFG_MenuEntry *menuEntry;\r
+\r
+    menu->ParentWindow = window;\r
+\r
+    for( menuEntry = ( SFG_MenuEntry * )menu->Entries.First;\r
+         menuEntry;\r
+         menuEntry = ( SFG_MenuEntry * )menuEntry->Node.Next )\r
+        if( menuEntry->SubMenu )\r
+            fghSetMenuParentWindow( window, menuEntry->SubMenu );\r
+}\r
+\r
+/*\r
+ * Function to check for menu entry selection on menu deactivation\r
+ */\r
+static void fghExecuteMenuCallback( SFG_Menu* menu )\r
+{\r
+    SFG_MenuEntry *menuEntry;\r
+\r
+    /* First of all check any of the active sub menus... */\r
+    for( menuEntry = (SFG_MenuEntry *)menu->Entries.First;\r
+         menuEntry;\r
+         menuEntry = (SFG_MenuEntry *)menuEntry->Node.Next)\r
+    {\r
+        if( menuEntry->IsActive )\r
+        {\r
+            if( menuEntry->SubMenu )\r
+                fghExecuteMenuCallback( menuEntry->SubMenu );\r
+            else\r
+                if( menu->Callback )\r
+                {\r
+                    SFG_Menu *save_menu = fgStructure.CurrentMenu;\r
+                    fgStructure.CurrentMenu = menu;\r
+                    menu->Callback( menuEntry->ID );\r
+                    fgStructure.CurrentMenu = save_menu;\r
+                }\r
+\r
+            return;\r
+        }\r
+    }\r
+}\r
+\r
+\r
+/*\r
+ * Displays the currently active menu for the current window\r
+ */\r
+void fgDisplayMenu( void )\r
+{\r
+    SFG_Window* window = fgStructure.CurrentWindow;\r
+    SFG_Menu* menu = NULL;\r
+\r
+    FREEGLUT_INTERNAL_ERROR_EXIT ( fgStructure.CurrentWindow, "Displaying menu in nonexistent window",\r
+                                   "fgDisplayMenu" );\r
+\r
+    /* Check if there is an active menu attached to this window... */\r
+    menu = window->ActiveMenu;\r
+    freeglut_return_if_fail( menu );\r
+\r
+    fgSetWindow( menu->Window );\r
+\r
+    glPushAttrib( GL_DEPTH_BUFFER_BIT | GL_TEXTURE_BIT | GL_LIGHTING_BIT |\r
+                  GL_POLYGON_BIT );\r
+\r
+    glDisable( GL_DEPTH_TEST );\r
+    glDisable( GL_TEXTURE_2D );\r
+    glDisable( GL_LIGHTING   );\r
+    glDisable( GL_CULL_FACE  );\r
+\r
+    glMatrixMode( GL_PROJECTION );\r
+    glPushMatrix( );\r
+    glLoadIdentity( );\r
+    glOrtho(\r
+         0, glutGet( GLUT_WINDOW_WIDTH  ),\r
+         glutGet( GLUT_WINDOW_HEIGHT ), 0,\r
+        -1, 1\r
+    );\r
+\r
+    glMatrixMode( GL_MODELVIEW );\r
+    glPushMatrix( );\r
+    glLoadIdentity( );\r
+\r
+    fghDisplayMenuBox( menu );\r
+\r
+    glPopAttrib( );\r
+\r
+    glMatrixMode( GL_PROJECTION );\r
+    glPopMatrix( );\r
+    glMatrixMode( GL_MODELVIEW );\r
+    glPopMatrix( );\r
+\r
+    glutSwapBuffers( );\r
+\r
+    fgSetWindow ( window );\r
+}\r
+\r
+/*\r
+ * Activates a menu pointed by the function argument\r
+ */\r
+static void fghActivateMenu( SFG_Window* window, int button )\r
+{\r
+    int max_x, max_y;\r
+\r
+    /* We'll be referencing this menu a lot, so remember its address: */\r
+    SFG_Menu* menu = window->Menu[ button ];\r
+    SFG_Window* current_window = fgStructure.CurrentWindow;\r
+\r
+    /* If the menu is already active in another window, deactivate it there */\r
+    if ( menu->ParentWindow )\r
+      menu->ParentWindow->ActiveMenu = NULL ;\r
+\r
+    /* Mark the menu as active, so that it gets displayed: */\r
+    window->ActiveMenu = menu;\r
+    menu->IsActive = GL_TRUE;\r
+    fghSetMenuParentWindow ( window, menu );\r
+    fgState.ActiveMenus++;\r
+\r
+    /* Set up the initial menu position now: */\r
+    fghGetVMaxExtent(menu->ParentWindow, &max_x, &max_y);\r
+    fgSetWindow( window );\r
+    menu->X = window->State.MouseX + glutGet( GLUT_WINDOW_X );\r
+    menu->Y = window->State.MouseY + glutGet( GLUT_WINDOW_Y );\r
+\r
+    if( menu->X + menu->Width > max_x )\r
+        menu->X -=menu->Width;\r
+\r
+    if( menu->Y + menu->Height > max_y )\r
+    {\r
+        menu->Y -=menu->Height;\r
+        if( menu->Y < 0 )\r
+            menu->Y = 0;\r
+    }\r
+\r
+    menu->Window->State.MouseX =\r
+        window->State.MouseX + glutGet( GLUT_WINDOW_X ) - menu->X;\r
+    menu->Window->State.MouseY =\r
+        window->State.MouseY + glutGet( GLUT_WINDOW_Y ) - menu->Y;\r
+\r
+    fgSetWindow( menu->Window );\r
+    glutPositionWindow( menu->X, menu->Y );\r
+    glutReshapeWindow( menu->Width, menu->Height );\r
+    glutPopWindow( );\r
+    glutShowWindow( );\r
+    menu->Window->ActiveMenu = menu;\r
+    fghCheckMenuStatus( menu );\r
+    fgSetWindow( current_window );\r
+}\r
+\r
+/*\r
+ * Update Highlight states of the menu\r
+ *\r
+ * Current mouse position is in menu->Window->State.MouseX/Y.\r
+ */\r
+void fgUpdateMenuHighlight ( SFG_Menu *menu )\r
+{\r
+    fghCheckMenuStatus( menu );\r
+}\r
+\r
+/*\r
+ * Check whether an active menu absorbs a mouse click\r
+ */\r
+GLboolean fgCheckActiveMenu ( SFG_Window *window, int button, GLboolean pressed,\r
+                              int mouse_x, int mouse_y )\r
+{\r
+    /*\r
+     * Near as I can tell, this is the menu behaviour:\r
+     *  - Down-click the menu button, menu not active:  activate\r
+     *    the menu with its upper left-hand corner at the mouse\r
+     *    location.\r
+     *  - Down-click any button outside the menu, menu active:\r
+     *    deactivate the menu\r
+     *  - Down-click any button inside the menu, menu active:\r
+     *    select the menu entry and deactivate the menu\r
+     *  - Up-click the menu button, menu not active:  nothing happens\r
+     *  - Up-click the menu button outside the menu, menu active:\r
+     *    nothing happens\r
+     *  - Up-click the menu button inside the menu, menu active:\r
+     *    select the menu entry and deactivate the menu\r
+     * Since menus can have submenus, we need to check this recursively.\r
+     */\r
+    if( window->ActiveMenu )\r
+    {\r
+        if( window == window->ActiveMenu->ParentWindow )\r
+        {\r
+            window->ActiveMenu->Window->State.MouseX =\r
+                                       mouse_x - window->ActiveMenu->X;\r
+            window->ActiveMenu->Window->State.MouseY =\r
+                                       mouse_y - window->ActiveMenu->Y;\r
+        }\r
+\r
+        /* In the menu, invoke the callback and deactivate the menu */\r
+        if( fghCheckMenuStatus( window->ActiveMenu ) )\r
+        {\r
+            /*\r
+             * Save the current window and menu and set the current\r
+             * window to the window whose menu this is\r
+             */\r
+            SFG_Window *save_window = fgStructure.CurrentWindow;\r
+            SFG_Menu *save_menu = fgStructure.CurrentMenu;\r
+            SFG_Window *parent_window = window->ActiveMenu->ParentWindow;\r
+            fgSetWindow( parent_window );\r
+            fgStructure.CurrentMenu = window->ActiveMenu;\r
+\r
+            /* Execute the menu callback */\r
+            fghExecuteMenuCallback( window->ActiveMenu );\r
+            fgDeactivateMenu( parent_window );\r
+\r
+            /* Restore the current window and menu */\r
+            fgSetWindow( save_window );\r
+            fgStructure.CurrentMenu = save_menu;\r
+        }\r
+        else if( pressed )\r
+            /*\r
+             * Outside the menu, deactivate if it's a downclick\r
+             *\r
+             * XXX This isn't enough.  A downclick outside of\r
+             * XXX the interior of our freeglut windows should also\r
+             * XXX deactivate the menu.  This is more complicated.\r
+             */\r
+            fgDeactivateMenu( window->ActiveMenu->ParentWindow );\r
+\r
+        /*\r
+         * XXX Why does an active menu require a redisplay at\r
+         * XXX this point?  If this can come out cleanly, then\r
+         * XXX it probably should do so; if not, a comment should\r
+         * XXX explain it.\r
+         */\r
+        if( ! window->IsMenu )\r
+            window->State.Redisplay = GL_TRUE;\r
+\r
+        return GL_TRUE;\r
+    }\r
+\r
+    /* No active menu, let's check whether we need to activate one. */\r
+    if( ( 0 <= button ) &&\r
+        ( FREEGLUT_MAX_MENUS > button ) &&\r
+        ( window->Menu[ button ] ) &&\r
+        pressed )\r
+    {\r
+        /* XXX Posting a requisite Redisplay seems bogus. */\r
+        window->State.Redisplay = GL_TRUE;\r
+        fghActivateMenu( window, button );\r
+        return GL_TRUE;\r
+    }\r
+\r
+    return GL_FALSE;\r
+}\r
+\r
+/*\r
+ * Deactivates a menu pointed by the function argument.\r
+ */\r
+void fgDeactivateMenu( SFG_Window *window )\r
+{\r
+    SFG_Window *parent_window = NULL;\r
+\r
+    /* Check if there is an active menu attached to this window... */\r
+    SFG_Menu* menu = window->ActiveMenu;\r
+    SFG_MenuEntry *menuEntry;\r
+\r
+    /* Did we find an active window? */\r
+    freeglut_return_if_fail( menu );\r
+\r
+    parent_window = menu->ParentWindow;\r
+\r
+    /* Hide the present menu's window */\r
+    fgSetWindow( menu->Window );\r
+    glutHideWindow( );\r
+\r
+    /* Forget about having that menu active anymore, now: */\r
+    menu->Window->ActiveMenu = NULL;\r
+    menu->ParentWindow->ActiveMenu = NULL;\r
+    fghSetMenuParentWindow ( NULL, menu );\r
+    menu->IsActive = GL_FALSE;\r
+    menu->ActiveEntry = NULL;\r
+\r
+    fgState.ActiveMenus--;\r
+\r
+    /* Hide all submenu windows, and the root menu's window. */\r
+    for ( menuEntry = ( SFG_MenuEntry * )menu->Entries.First;\r
+          menuEntry;\r
+          menuEntry = ( SFG_MenuEntry * )menuEntry->Node.Next )\r
+    {\r
+        menuEntry->IsActive = GL_FALSE;\r
+\r
+        /* Is that an active submenu by any case? */\r
+        if( menuEntry->SubMenu )\r
+            fghDeactivateSubMenu( menuEntry );\r
+    }\r
+\r
+    fgSetWindow ( parent_window ) ;\r
+}\r
+\r
+/*\r
+ * Recalculates current menu's box size\r
+ */\r
+void fghCalculateMenuBoxSize( void )\r
+{\r
+    SFG_MenuEntry* menuEntry;\r
+    int width = 0, height = 0;\r
+\r
+    /* Make sure there is a current menu set */\r
+    freeglut_return_if_fail( fgStructure.CurrentMenu );\r
+\r
+    /* The menu's box size depends on the menu entries: */\r
+    for( menuEntry = ( SFG_MenuEntry * )fgStructure.CurrentMenu->Entries.First;\r
+         menuEntry;\r
+         menuEntry = ( SFG_MenuEntry * )menuEntry->Node.Next )\r
+    {\r
+        /* Update the menu entry's width value */\r
+        menuEntry->Width = glutBitmapLength(\r
+            FREEGLUT_MENU_FONT,\r
+            (unsigned char *)menuEntry->Text\r
+        );\r
+\r
+        /*\r
+         * If the entry is a submenu, then it needs to be wider to\r
+         * accomodate the arrow. JCJ 31 July 2003\r
+         */\r
+        if (menuEntry->SubMenu )\r
+            menuEntry->Width += glutBitmapLength(\r
+                FREEGLUT_MENU_FONT,\r
+                (unsigned char *)"_"\r
+            );\r
+\r
+        /* Check if it's the biggest we've found */\r
+        if( menuEntry->Width > width )\r
+            width = menuEntry->Width;\r
+\r
+        height += FREEGLUT_MENU_HEIGHT;\r
+    }\r
+\r
+    /* Store the menu's box size now: */\r
+    fgStructure.CurrentMenu->Height = height + 2 * FREEGLUT_MENU_BORDER;\r
+    fgStructure.CurrentMenu->Width  = width  + 4 * FREEGLUT_MENU_BORDER;\r
+}\r
+\r
+\r
+/* -- INTERFACE FUNCTIONS -------------------------------------------------- */\r
+\r
+/*\r
+ * Creates a new menu object, adding it to the freeglut structure\r
+ */\r
+int FGAPIENTRY glutCreateMenu( void(* callback)( int ) )\r
+{\r
+    /* The menu object creation code resides in freeglut_structure.c */\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutCreateMenu" );\r
+    return fgCreateMenu( callback )->ID;\r
+}\r
+\r
+#if TARGET_HOST_MS_WINDOWS\r
+int FGAPIENTRY __glutCreateMenuWithExit( void(* callback)( int ), void (__cdecl *exit_function)(int) )\r
+{\r
+  __glutExitFunc = exit_function;\r
+  return glutCreateMenu( callback );\r
+}\r
+#endif\r
+\r
+/*\r
+ * Destroys a menu object, removing all references to it\r
+ */\r
+void FGAPIENTRY glutDestroyMenu( int menuID )\r
+{\r
+    SFG_Menu* menu;\r
+\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutDestroyMenu" );\r
+    menu = fgMenuByID( menuID );\r
+\r
+    freeglut_return_if_fail( menu );\r
+\r
+    /* The menu object destruction code resides in freeglut_structure.c */\r
+    fgDestroyMenu( menu );\r
+}\r
+\r
+/*\r
+ * Returns the ID number of the currently active menu\r
+ */\r
+int FGAPIENTRY glutGetMenu( void )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutGetMenu" );\r
+\r
+    if( fgStructure.CurrentMenu )\r
+        return fgStructure.CurrentMenu->ID;\r
+\r
+    return 0;\r
+}\r
+\r
+/*\r
+ * Sets the current menu given its menu ID\r
+ */\r
+void FGAPIENTRY glutSetMenu( int menuID )\r
+{\r
+    SFG_Menu* menu;\r
+\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSetMenu" );\r
+    menu = fgMenuByID( menuID );\r
+\r
+    freeglut_return_if_fail( menu );\r
+\r
+    fgStructure.CurrentMenu = menu;\r
+}\r
+\r
+/*\r
+ * Adds a menu entry to the bottom of the current menu\r
+ */\r
+void FGAPIENTRY glutAddMenuEntry( const char* label, int value )\r
+{\r
+    SFG_MenuEntry* menuEntry;\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutAddMenuEntry" );\r
+    menuEntry = (SFG_MenuEntry *)calloc( sizeof(SFG_MenuEntry), 1 );\r
+    freeglut_return_if_fail( fgStructure.CurrentMenu );\r
+\r
+    menuEntry->Text = strdup( label );\r
+    menuEntry->ID   = value;\r
+\r
+    /* Have the new menu entry attached to the current menu */\r
+    fgListAppend( &fgStructure.CurrentMenu->Entries, &menuEntry->Node );\r
+\r
+    fghCalculateMenuBoxSize( );\r
+}\r
+\r
+/*\r
+ * Add a sub menu to the bottom of the current menu\r
+ */\r
+void FGAPIENTRY glutAddSubMenu( const char *label, int subMenuID )\r
+{\r
+    SFG_MenuEntry *menuEntry;\r
+    SFG_Menu *subMenu;\r
+\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutAddSubMenu" );\r
+    menuEntry = ( SFG_MenuEntry * )calloc( sizeof( SFG_MenuEntry ), 1 );\r
+    subMenu = fgMenuByID( subMenuID );\r
+\r
+    freeglut_return_if_fail( fgStructure.CurrentMenu );\r
+    freeglut_return_if_fail( subMenu );\r
+\r
+    menuEntry->Text    = strdup( label );\r
+    menuEntry->SubMenu = subMenu;\r
+    menuEntry->ID      = -1;\r
+\r
+    fgListAppend( &fgStructure.CurrentMenu->Entries, &menuEntry->Node );\r
+    fghCalculateMenuBoxSize( );\r
+}\r
+\r
+/*\r
+ * Changes the specified menu item in the current menu into a menu entry\r
+ */\r
+void FGAPIENTRY glutChangeToMenuEntry( int item, const char* label, int value )\r
+{\r
+    SFG_MenuEntry* menuEntry = NULL;\r
+\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutChangeToMenuEntry" );\r
+    freeglut_return_if_fail( fgStructure.CurrentMenu );\r
+\r
+    /* Get n-th menu entry in the current menu, starting from one: */\r
+    menuEntry = fghFindMenuEntry( fgStructure.CurrentMenu, item );\r
+\r
+    freeglut_return_if_fail( menuEntry );\r
+\r
+    /* We want it to become a normal menu entry, so: */\r
+    if( menuEntry->Text )\r
+        free( menuEntry->Text );\r
+\r
+    menuEntry->Text    = strdup( label );\r
+    menuEntry->ID      = value;\r
+    menuEntry->SubMenu = NULL;\r
+    fghCalculateMenuBoxSize( );\r
+}\r
+\r
+/*\r
+ * Changes the specified menu item in the current menu into a sub-menu trigger.\r
+ */\r
+void FGAPIENTRY glutChangeToSubMenu( int item, const char* label,\r
+                                     int subMenuID )\r
+{\r
+    SFG_Menu*      subMenu;\r
+    SFG_MenuEntry* menuEntry;\r
+\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutChangeToSubMenu" );\r
+    subMenu = fgMenuByID( subMenuID );\r
+    menuEntry = NULL;\r
+\r
+    freeglut_return_if_fail( fgStructure.CurrentMenu );\r
+    freeglut_return_if_fail( subMenu );\r
+\r
+    /* Get n-th menu entry in the current menu, starting from one: */\r
+    menuEntry = fghFindMenuEntry( fgStructure.CurrentMenu, item );\r
+\r
+    freeglut_return_if_fail( menuEntry );\r
+\r
+    /* We want it to become a sub menu entry, so: */\r
+    if( menuEntry->Text )\r
+        free( menuEntry->Text );\r
+\r
+    menuEntry->Text    = strdup( label );\r
+    menuEntry->SubMenu = subMenu;\r
+    menuEntry->ID      = -1;\r
+    fghCalculateMenuBoxSize( );\r
+}\r
+\r
+/*\r
+ * Removes the specified menu item from the current menu\r
+ */\r
+void FGAPIENTRY glutRemoveMenuItem( int item )\r
+{\r
+    SFG_MenuEntry* menuEntry;\r
+\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutRemoveMenuItem" );\r
+    freeglut_return_if_fail( fgStructure.CurrentMenu );\r
+\r
+    /* Get n-th menu entry in the current menu, starting from one: */\r
+    menuEntry = fghFindMenuEntry( fgStructure.CurrentMenu, item );\r
+\r
+    freeglut_return_if_fail( menuEntry );\r
+\r
+    fgListRemove( &fgStructure.CurrentMenu->Entries, &menuEntry->Node );\r
+    if ( menuEntry->Text )\r
+      free( menuEntry->Text );\r
+\r
+    free( menuEntry );\r
+    fghCalculateMenuBoxSize( );\r
+}\r
+\r
+/*\r
+ * Attaches a menu to the current window\r
+ */\r
+void FGAPIENTRY glutAttachMenu( int button )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutAttachMenu" );\r
+\r
+    freeglut_return_if_fail( fgStructure.CurrentWindow );\r
+    freeglut_return_if_fail( fgStructure.CurrentMenu );\r
+\r
+    freeglut_return_if_fail( button >= 0 );\r
+    freeglut_return_if_fail( button < FREEGLUT_MAX_MENUS );\r
+\r
+    fgStructure.CurrentWindow->Menu[ button ] = fgStructure.CurrentMenu;\r
+}\r
+\r
+/*\r
+ * Detaches a menu from the current window\r
+ */\r
+void FGAPIENTRY glutDetachMenu( int button )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutDetachMenu" );\r
+\r
+    freeglut_return_if_fail( fgStructure.CurrentWindow );\r
+    freeglut_return_if_fail( fgStructure.CurrentMenu );\r
+\r
+    freeglut_return_if_fail( button >= 0 );\r
+    freeglut_return_if_fail( button < FREEGLUT_MAX_MENUS );\r
+\r
+    fgStructure.CurrentWindow->Menu[ button ] = NULL;\r
+}\r
+\r
+/*\r
+ * A.Donev: Set and retrieve the menu's user data\r
+ */\r
+void* FGAPIENTRY glutGetMenuData( void )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutGetMenuData" );\r
+    return fgStructure.CurrentMenu->UserData;\r
+}\r
+\r
+void FGAPIENTRY glutSetMenuData(void* data)\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSetMenuData" );\r
+    fgStructure.CurrentMenu->UserData=data;\r
+}\r
+\r
+/*** END OF FILE ***/\r
diff --git a/src/Common/freeglut_misc.c b/src/Common/freeglut_misc.c
new file mode 100644 (file)
index 0000000..823dcc1
--- /dev/null
@@ -0,0 +1,214 @@
+/*\r
+ * freeglut_misc.c\r
+ *\r
+ * Functions that didn't fit anywhere else...\r
+ *\r
+ * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.\r
+ * Written by Pawel W. Olszta, <olszta@sourceforge.net>\r
+ * Creation date: Thu Dec 9 1999\r
+ *\r
+ * Permission is hereby granted, free of charge, to any person obtaining a\r
+ * copy of this software and associated documentation files (the "Software"),\r
+ * to deal in the Software without restriction, including without limitation\r
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
+ * and/or sell copies of the Software, and to permit persons to whom the\r
+ * Software is furnished to do so, subject to the following conditions:\r
+ *\r
+ * The above copyright notice and this permission notice shall be included\r
+ * in all copies or substantial portions of the Software.\r
+ *\r
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL\r
+ * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
+ */\r
+\r
+#include <GL/freeglut.h>\r
+#include "freeglut_internal.h"\r
+\r
+/*\r
+ * TODO BEFORE THE STABLE RELEASE:\r
+ *\r
+ *  glutSetColor()     --\r
+ *  glutGetColor()     --\r
+ *  glutCopyColormap() --\r
+ *  glutSetKeyRepeat() -- this is evil and should be removed from API\r
+ */\r
+\r
+/* -- INTERFACE FUNCTIONS -------------------------------------------------- */\r
+\r
+/*\r
+ * This functions checks if an OpenGL extension is supported or not\r
+ *\r
+ * XXX Wouldn't this be simpler and clearer if we used strtok()?\r
+ */\r
+int FGAPIENTRY glutExtensionSupported( const char* extension )\r
+{\r
+  const char *extensions, *start;\r
+  const size_t len = strlen( extension );\r
+\r
+  /* Make sure there is a current window, and thus a current context available */\r
+  FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutExtensionSupported" );\r
+  freeglut_return_val_if_fail( fgStructure.CurrentWindow != NULL, 0 );\r
+\r
+  if (strchr(extension, ' '))\r
+    return 0;\r
+  start = extensions = (const char *) glGetString(GL_EXTENSIONS);\r
+\r
+  /* XXX consider printing a warning to stderr that there's no current\r
+   * rendering context.\r
+   */\r
+  freeglut_return_val_if_fail( extensions != NULL, 0 );\r
+\r
+  while (1) {\r
+     const char *p = strstr(extensions, extension);\r
+     if (!p)\r
+        return 0;  /* not found */\r
+     /* check that the match isn't a super string */\r
+     if ((p == start || p[-1] == ' ') && (p[len] == ' ' || p[len] == 0))\r
+        return 1;\r
+     /* skip the false match and continue */\r
+     extensions = p + len;\r
+  }\r
+\r
+  return 0 ;\r
+}\r
+\r
+#ifndef GL_INVALID_FRAMEBUFFER_OPERATION\r
+#ifdef GL_INVALID_FRAMEBUFFER_OPERATION_EXT\r
+#define GL_INVALID_FRAMEBUFFER_OPERATION GL_INVALID_FRAMEBUFFER_OPERATION_EXT\r
+#else\r
+#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506\r
+#endif\r
+#endif\r
+\r
+#ifndef GL_TABLE_TOO_LARGE\r
+#ifdef GL_TABLE_TOO_LARGE_EXT\r
+#define GL_TABLE_TOO_LARGE GL_TABLE_TOO_LARGE_EXT\r
+#else\r
+#define GL_TABLE_TOO_LARGE 0x8031\r
+#endif\r
+#endif\r
+\r
+#ifndef GL_TEXTURE_TOO_LARGE\r
+#ifdef GL_TEXTURE_TOO_LARGE_EXT\r
+#define GL_TEXTURE_TOO_LARGE GL_TEXTURE_TOO_LARGE_EXT\r
+#else\r
+#define GL_TEXTURE_TOO_LARGE 0x8065\r
+#endif\r
+#endif\r
+\r
+/*\r
+ * A cut-down local version of gluErrorString to avoid depending on GLU.\r
+ */\r
+static const char* fghErrorString( GLenum error )\r
+{\r
+  switch ( error ) {\r
+  case GL_INVALID_ENUM: return "invalid enumerant";\r
+  case GL_INVALID_VALUE: return "invalid value";\r
+  case GL_INVALID_OPERATION: return "invalid operation";\r
+  case GL_STACK_OVERFLOW: return "stack overflow";\r
+  case GL_STACK_UNDERFLOW: return "stack underflow";\r
+  case GL_OUT_OF_MEMORY: return "out of memory";\r
+  case GL_TABLE_TOO_LARGE: return "table too large";\r
+  case GL_INVALID_FRAMEBUFFER_OPERATION: return "invalid framebuffer operation";\r
+  case GL_TEXTURE_TOO_LARGE: return "texture too large";\r
+  default: return "unknown GL error";\r
+  }\r
+}\r
+\r
+/*\r
+ * This function reports all the OpenGL errors that happened till now\r
+ */\r
+void FGAPIENTRY glutReportErrors( void )\r
+{\r
+    GLenum error;\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutReportErrors" );\r
+    while( ( error = glGetError() ) != GL_NO_ERROR )\r
+        fgWarning( "GL error: %s", fghErrorString( error ) );\r
+}\r
+\r
+/*\r
+ * Control the auto-repeat of keystrokes to the current window\r
+ */\r
+void FGAPIENTRY glutIgnoreKeyRepeat( int ignore )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutIgnoreKeyRepeat" );\r
+    FREEGLUT_EXIT_IF_NO_WINDOW ( "glutIgnoreKeyRepeat" );\r
+\r
+    fgStructure.CurrentWindow->State.IgnoreKeyRepeat = ignore ? GL_TRUE : GL_FALSE;\r
+}\r
+\r
+/*\r
+ * Set global auto-repeat of keystrokes\r
+ *\r
+ * RepeatMode should be either:\r
+ *    GLUT_KEY_REPEAT_OFF\r
+ *    GLUT_KEY_REPEAT_ON\r
+ *    GLUT_KEY_REPEAT_DEFAULT\r
+ */\r
+void FGAPIENTRY glutSetKeyRepeat( int repeatMode )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSetKeyRepeat" );\r
+\r
+    switch( repeatMode )\r
+    {\r
+    case GLUT_KEY_REPEAT_OFF:\r
+    case GLUT_KEY_REPEAT_ON:\r
+     fgState.KeyRepeat = repeatMode;\r
+     break;\r
+\r
+    case GLUT_KEY_REPEAT_DEFAULT:\r
+     fgState.KeyRepeat = GLUT_KEY_REPEAT_ON;\r
+     break;\r
+\r
+    default:\r
+        fgError ("Invalid glutSetKeyRepeat mode: %d", repeatMode);\r
+        break;\r
+    }\r
+}\r
+\r
+/*\r
+ * Forces the joystick callback to be executed\r
+ */\r
+void FGAPIENTRY glutForceJoystickFunc( void )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutForceJoystickFunc" );\r
+#if !defined(_WIN32_WCE)\r
+    freeglut_return_if_fail( fgStructure.CurrentWindow != NULL );\r
+    freeglut_return_if_fail( FETCH_WCB( *( fgStructure.CurrentWindow ), Joystick ) );\r
+    fgJoystickPollWindow( fgStructure.CurrentWindow );\r
+#endif /* !defined(_WIN32_WCE) */\r
+}\r
+\r
+/*\r
+ *\r
+ */\r
+void FGAPIENTRY glutSetColor( int nColor, GLfloat red, GLfloat green, GLfloat blue )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSetColor" );\r
+    /* We really need to do something here. */\r
+}\r
+\r
+/*\r
+ *\r
+ */\r
+GLfloat FGAPIENTRY glutGetColor( int color, int component )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutGetColor" );\r
+    /* We really need to do something here. */\r
+    return( 0.0f );\r
+}\r
+\r
+/*\r
+ *\r
+ */\r
+void FGAPIENTRY glutCopyColormap( int window )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutCopyColormap" );\r
+    /* We really need to do something here. */\r
+}\r
+\r
+/*** END OF FILE ***/\r
diff --git a/src/Common/freeglut_overlay.c b/src/Common/freeglut_overlay.c
new file mode 100644 (file)
index 0000000..8b15245
--- /dev/null
@@ -0,0 +1,45 @@
+/*\r
+ * freeglut_overlay.c\r
+ *\r
+ * Overlay management functions (as defined by GLUT API)\r
+ *\r
+ * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.\r
+ * Written by Pawel W. Olszta, <olszta@sourceforge.net>\r
+ * Creation date: Thu Dec 16 1999\r
+ *\r
+ * Permission is hereby granted, free of charge, to any person obtaining a\r
+ * copy of this software and associated documentation files (the "Software"),\r
+ * to deal in the Software without restriction, including without limitation\r
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
+ * and/or sell copies of the Software, and to permit persons to whom the\r
+ * Software is furnished to do so, subject to the following conditions:\r
+ *\r
+ * The above copyright notice and this permission notice shall be included\r
+ * in all copies or substantial portions of the Software.\r
+ *\r
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL\r
+ * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
+ */\r
+\r
+#include <GL/freeglut.h>\r
+#include "freeglut_internal.h"\r
+\r
+/*\r
+ * NOTE: functions declared in this file probably will not be implemented.\r
+ */\r
+\r
+/* -- INTERFACE FUNCTIONS -------------------------------------------------- */\r
+\r
+void FGAPIENTRY glutEstablishOverlay( void )             { /* Not implemented */ }\r
+void FGAPIENTRY glutRemoveOverlay( void )                { /* Not implemented */ }\r
+void FGAPIENTRY glutUseLayer( GLenum layer )             { /* Not implemented */ }\r
+void FGAPIENTRY glutPostOverlayRedisplay( void )         { /* Not implemented */ }\r
+void FGAPIENTRY glutPostWindowOverlayRedisplay( int ID ) { /* Not implemented */ }\r
+void FGAPIENTRY glutShowOverlay( void )                  { /* Not implemented */ }\r
+void FGAPIENTRY glutHideOverlay( void )                  { /* Not implemented */ }\r
+\r
+/*** END OF FILE ***/\r
diff --git a/src/Common/freeglut_spaceball.c b/src/Common/freeglut_spaceball.c
new file mode 100644 (file)
index 0000000..89655f4
--- /dev/null
@@ -0,0 +1,471 @@
+/* Spaceball support for Linux.\r
+ * Written by John Tsiombikas <nuclear@member.fsf.org>\r
+ *\r
+ * This code supports 3Dconnexion's 6-dof space-whatever devices.\r
+ * It can communicate with either the proprietary 3Dconnexion daemon (3dxsrv)\r
+ * free spacenavd (http://spacenav.sourceforge.net), through the "standard"\r
+ * magellan X-based protocol.\r
+ */\r
+\r
+#include <GL/freeglut.h>\r
+#include "freeglut_internal.h"\r
+\r
+/* -- PRIVATE FUNCTIONS --------------------------------------------------- */\r
+\r
+#if TARGET_HOST_POSIX_X11\r
+#include <X11/Xlib.h>\r
+\r
+enum {\r
+    SPNAV_EVENT_ANY,  /* used by spnav_remove_events() */\r
+    SPNAV_EVENT_MOTION,\r
+    SPNAV_EVENT_BUTTON  /* includes both press and release */\r
+};\r
+\r
+struct spnav_event_motion {\r
+    int type;\r
+    int x, y, z;\r
+    int rx, ry, rz;\r
+    unsigned int period;\r
+    int *data;\r
+};\r
+\r
+struct spnav_event_button {\r
+    int type;\r
+    int press;\r
+    int bnum;\r
+};\r
+\r
+typedef union spnav_event {\r
+    int type;\r
+    struct spnav_event_motion motion;\r
+    struct spnav_event_button button;\r
+} spnav_event;\r
+\r
+\r
+static int spnav_x11_open(Display *dpy, Window win);\r
+static int spnav_x11_window(Window win);\r
+static int spnav_x11_event(const XEvent *xev, spnav_event *event);\r
+static int spnav_close(void);\r
+static int spnav_fd(void);\r
+static int spnav_remove_events(int type);\r
+\r
+static SFG_Window *spnav_win;\r
+#endif\r
+\r
+/* Flag telling whether we have a spaceball:\r
+ *   0 - haven't tried initializing\r
+ *   1 - have successfully initialized\r
+ *  -1 - have tried to initialize but not succeeded\r
+ */\r
+static int sball_initialized = 0;\r
+\r
+\r
+void fgInitialiseSpaceball(void)\r
+{\r
+    if(sball_initialized != 0) {\r
+        return;\r
+    }\r
+\r
+#if TARGET_HOST_POSIX_X11\r
+    {\r
+        Window w;\r
+\r
+        if(!fgStructure.CurrentWindow)\r
+               {\r
+                       sball_initialized = -1;\r
+            return;\r
+               }\r
+\r
+        w = fgStructure.CurrentWindow->Window.Handle;\r
+        if(spnav_x11_open(fgDisplay.Display, w) == -1)\r
+               {\r
+                       sball_initialized = -1;\r
+            return;\r
+        }\r
+    }\r
+#endif\r
+\r
+    sball_initialized = 1;\r
+}\r
+\r
+void fgSpaceballClose(void)\r
+{\r
+#if TARGET_HOST_POSIX_X11\r
+    spnav_close();\r
+#endif\r
+}\r
+\r
+int fgHasSpaceball(void)\r
+{\r
+    if(sball_initialized == 0) {\r
+        fgInitialiseSpaceball();\r
+        if(sball_initialized != 1) {\r
+            fgWarning("fgInitialiseSpaceball failed\n");\r
+            return 0;\r
+        }\r
+    }\r
+\r
+#if TARGET_HOST_POSIX_X11\r
+    /* XXX this function should somehow query the driver if there's a device\r
+     * plugged in, as opposed to just checking if there's a driver to talk to.\r
+     */\r
+    return spnav_fd() == -1 ? 0 : 1;\r
+#else\r
+    return 0;\r
+#endif\r
+}\r
+\r
+int fgSpaceballNumButtons(void)\r
+{\r
+    if(sball_initialized == 0) {\r
+        fgInitialiseSpaceball();\r
+        if(sball_initialized != 1) {\r
+            fgWarning("fgInitialiseSpaceball failed\n");\r
+            return 0;\r
+        }\r
+    }\r
+\r
+#if TARGET_HOST_POSIX_X11\r
+    return 2;  /* TODO implement this properly */\r
+#else\r
+    return 0;\r
+#endif\r
+}\r
+\r
+void fgSpaceballSetWindow(SFG_Window *window)\r
+{\r
+    if(sball_initialized == 0) {\r
+        fgInitialiseSpaceball();\r
+        if(sball_initialized != 1) {\r
+            return;\r
+        }\r
+    }\r
+\r
+#if TARGET_HOST_POSIX_X11\r
+    if(spnav_win != window) {\r
+        spnav_x11_window(window->Window.Handle);\r
+        spnav_win = window;\r
+    }\r
+#endif\r
+}\r
+\r
+\r
+#if TARGET_HOST_POSIX_X11\r
+int fgIsSpaceballXEvent(const XEvent *xev)\r
+{\r
+    spnav_event sev;\r
+\r
+    if(spnav_win != fgStructure.CurrentWindow) {\r
+        /* this will also initialize spaceball if needed (first call) */\r
+        fgSpaceballSetWindow(fgStructure.CurrentWindow);\r
+    }\r
+\r
+    if(sball_initialized != 1) {\r
+        return 0;\r
+    }\r
+\r
+    return spnav_x11_event(xev, &sev);\r
+}\r
+\r
+void fgSpaceballHandleXEvent(const XEvent *xev)\r
+{\r
+    spnav_event sev;\r
+\r
+    if(sball_initialized == 0) {\r
+        fgInitialiseSpaceball();\r
+        if(sball_initialized != 1) {\r
+            return;\r
+        }\r
+    }\r
+\r
+    if(spnav_x11_event(xev, &sev)) {\r
+        switch(sev.type) {\r
+        case SPNAV_EVENT_MOTION:\r
+            if(sev.motion.x | sev.motion.y | sev.motion.z) {\r
+                INVOKE_WCB(*spnav_win, SpaceMotion, (sev.motion.x, sev.motion.y, sev.motion.z));\r
+            }\r
+            if(sev.motion.rx | sev.motion.ry | sev.motion.rz) {\r
+                INVOKE_WCB(*spnav_win, SpaceRotation, (sev.motion.rx, sev.motion.ry, sev.motion.rz));\r
+            }\r
+            spnav_remove_events(SPNAV_EVENT_MOTION);\r
+            break;\r
+\r
+        case SPNAV_EVENT_BUTTON:\r
+            INVOKE_WCB(*spnav_win, SpaceButton, (sev.button.bnum, sev.button.press ? GLUT_DOWN : GLUT_UP));\r
+            break;\r
+\r
+        default:\r
+            break;\r
+        }\r
+    }\r
+}\r
+\r
+/*\r
+The following code is part of libspnav, part of the spacenav project (spacenav.sf.net)\r
+Copyright (C) 2007-2009 John Tsiombikas <nuclear@member.fsf.org>\r
+\r
+Redistribution and use in source and binary forms, with or without\r
+modification, are permitted provided that the following conditions are met:\r
+\r
+1. Redistributions of source code must retain the above copyright notice, this\r
+   list of conditions and the following disclaimer.\r
+2. Redistributions in binary form must reproduce the above copyright notice,\r
+   this list of conditions and the following disclaimer in the documentation\r
+   and/or other materials provided with the distribution.\r
+3. The name of the author may not be used to endorse or promote products\r
+   derived from this software without specific prior written permission.\r
+\r
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED\r
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO\r
+EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\r
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\r
+OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING\r
+IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r
+OF SUCH DAMAGE.\r
+*/\r
+#include <stdio.h>\r
+#include <stdlib.h>\r
+#include <string.h>\r
+\r
+#ifdef HAVE_ERRNO_H\r
+#include <errno.h>\r
+#endif\r
+\r
+#include <X11/Xlib.h>\r
+#include <X11/Xutil.h>\r
+\r
+static Window get_daemon_window(Display *dpy);\r
+static int catch_badwin(Display *dpy, XErrorEvent *err);\r
+\r
+static Display *dpy;\r
+static Window app_win;\r
+static Atom motion_event, button_press_event, button_release_event, command_event;\r
+\r
+enum {\r
+  CMD_APP_WINDOW = 27695,\r
+  CMD_APP_SENS\r
+};\r
+\r
+#define IS_OPEN    dpy\r
+\r
+struct event_node {\r
+  spnav_event event;\r
+  struct event_node *next;\r
+};\r
+\r
+static int spnav_x11_open(Display *display, Window win)\r
+{\r
+  if(IS_OPEN) {\r
+    return -1;\r
+  }\r
+\r
+  dpy = display;\r
+\r
+  motion_event = XInternAtom(dpy, "MotionEvent", True);\r
+  button_press_event = XInternAtom(dpy, "ButtonPressEvent", True);\r
+  button_release_event = XInternAtom(dpy, "ButtonReleaseEvent", True);\r
+  command_event = XInternAtom(dpy, "CommandEvent", True);\r
+\r
+  if(!motion_event || !button_press_event || !button_release_event || !command_event) {\r
+    dpy = 0;\r
+    return -1;  /* daemon not started */\r
+  }\r
+\r
+  if(spnav_x11_window(win) == -1) {\r
+    dpy = 0;\r
+    return -1;  /* daemon not started */\r
+  }\r
+\r
+  app_win = win;\r
+  return 0;\r
+}\r
+\r
+static int spnav_close(void)\r
+{\r
+  if(dpy) {\r
+    spnav_x11_window(DefaultRootWindow(dpy));\r
+    app_win = 0;\r
+    dpy = 0;\r
+    return 0;\r
+  }\r
+  return -1;\r
+}\r
+\r
+static int spnav_x11_window(Window win)\r
+{\r
+  int (*prev_xerr_handler)(Display*, XErrorEvent*);\r
+  XEvent xev;\r
+  Window daemon_win;\r
+\r
+  if(!IS_OPEN) {\r
+    return -1;\r
+  }\r
+\r
+  if(!(daemon_win = get_daemon_window(dpy))) {\r
+    return -1;\r
+  }\r
+\r
+  prev_xerr_handler = XSetErrorHandler(catch_badwin);\r
+\r
+  xev.type = ClientMessage;\r
+  xev.xclient.send_event = False;\r
+  xev.xclient.display = dpy;\r
+  xev.xclient.window = win;\r
+  xev.xclient.message_type = command_event;\r
+  xev.xclient.format = 16;\r
+  xev.xclient.data.s[0] = ((unsigned int)win & 0xffff0000) >> 16;\r
+  xev.xclient.data.s[1] = (unsigned int)win & 0xffff;\r
+  xev.xclient.data.s[2] = CMD_APP_WINDOW;\r
+\r
+  XSendEvent(dpy, daemon_win, False, 0, &xev);\r
+  XSync(dpy, False);\r
+\r
+  XSetErrorHandler(prev_xerr_handler);\r
+  return 0;\r
+}\r
+\r
+static int spnav_fd(void)\r
+{\r
+  if(dpy) {\r
+    return ConnectionNumber(dpy);\r
+  }\r
+  return -1;\r
+}\r
+\r
+/*static int spnav_wait_event(spnav_event *event)\r
+{\r
+  if(dpy) {\r
+    for(;;) {\r
+      XEvent xev;\r
+      XNextEvent(dpy, &xev);\r
+\r
+      if(spnav_x11_event(&xev, event) > 0) {\r
+        return event->type;\r
+      }\r
+    }\r
+  }\r
+  return 0;\r
+}\r
+\r
+static int spnav_poll_event(spnav_event *event)\r
+{\r
+  if(dpy) {\r
+    if(XPending(dpy)) {\r
+      XEvent xev;\r
+      XNextEvent(dpy, &xev);\r
+\r
+      return spnav_x11_event(&xev, event);\r
+    }\r
+  }\r
+  return 0;\r
+}*/\r
+\r
+static Bool match_events(Display *dpy, XEvent *xev, char *arg)\r
+{\r
+  int evtype = *(int*)arg;\r
+\r
+  if(xev->type != ClientMessage) {\r
+    return False;\r
+  }\r
+\r
+  if(xev->xclient.message_type == motion_event) {\r
+    return !evtype || evtype == SPNAV_EVENT_MOTION ? True : False;\r
+  }\r
+  if(xev->xclient.message_type == button_press_event ||\r
+      xev->xclient.message_type == button_release_event) {\r
+    return !evtype || evtype == SPNAV_EVENT_BUTTON ? True : False;\r
+  }\r
+  return False;\r
+}\r
+\r
+static int spnav_remove_events(int type)\r
+{\r
+  int rm_count = 0;\r
+\r
+  if(dpy) {\r
+    XEvent xev;\r
+\r
+    while(XCheckIfEvent(dpy, &xev, match_events, (char*)&type)) {\r
+      rm_count++;\r
+    }\r
+    return rm_count;\r
+  }\r
+  return 0;\r
+}\r
+\r
+static int spnav_x11_event(const XEvent *xev, spnav_event *event)\r
+{\r
+  int i;\r
+  int xmsg_type;\r
+\r
+  if(xev->type != ClientMessage) {\r
+    return 0;\r
+  }\r
+\r
+  xmsg_type = xev->xclient.message_type;\r
+\r
+  if(xmsg_type != motion_event && xmsg_type != button_press_event &&\r
+      xmsg_type != button_release_event) {\r
+    return 0;\r
+  }\r
+\r
+  if(xmsg_type == motion_event) {\r
+    event->type = SPNAV_EVENT_MOTION;\r
+    event->motion.data = &event->motion.x;\r
+\r
+    for(i=0; i<6; i++) {\r
+      event->motion.data[i] = xev->xclient.data.s[i + 2];\r
+    }\r
+    event->motion.period = xev->xclient.data.s[8];\r
+  } else {\r
+    event->type = SPNAV_EVENT_BUTTON;\r
+    event->button.press = xmsg_type == button_press_event ? 1 : 0;\r
+    event->button.bnum = xev->xclient.data.s[2];\r
+  }\r
+  return event->type;\r
+}\r
+\r
+\r
+static Window get_daemon_window(Display *dpy)\r
+{\r
+  Window win, root_win;\r
+  XTextProperty wname;\r
+  Atom type;\r
+  int fmt;\r
+  unsigned long nitems, bytes_after;\r
+  unsigned char *prop;\r
+\r
+  root_win = DefaultRootWindow(dpy);\r
+\r
+  XGetWindowProperty(dpy, root_win, command_event, 0, 1, False, AnyPropertyType, &type, &fmt, &nitems, &bytes_after, &prop);\r
+  if(!prop) {\r
+    return 0;\r
+  }\r
+\r
+  win = *(Window*)prop;\r
+  XFree(prop);\r
+\r
+  if(!XGetWMName(dpy, win, &wname) || strcmp("Magellan Window", (char*)wname.value) != 0) {\r
+    return 0;\r
+  }\r
+\r
+  return win;\r
+}\r
+\r
+static int catch_badwin(Display *dpy, XErrorEvent *err)\r
+{\r
+  char buf[256];\r
+\r
+  if(err->error_code == BadWindow) {\r
+    /* do nothing? */\r
+  } else {\r
+    XGetErrorText(dpy, err->error_code, buf, sizeof buf);\r
+    fprintf(stderr, "Caught unexpected X error: %s\n", buf);\r
+  }\r
+  return 0;\r
+}\r
+\r
+#endif  /* TARGET_HOST_POSIX_X11 */\r
diff --git a/src/Common/freeglut_state.c b/src/Common/freeglut_state.c
new file mode 100644 (file)
index 0000000..4f2ce42
--- /dev/null
@@ -0,0 +1,887 @@
+/*\r
+ * freeglut_state.c\r
+ *\r
+ * Freeglut state query methods.\r
+ *\r
+ * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.\r
+ * Written by Pawel W. Olszta, <olszta@sourceforge.net>\r
+ * Creation date: Thu Dec 16 1999\r
+ *\r
+ * Permission is hereby granted, free of charge, to any person obtaining a\r
+ * copy of this software and associated documentation files (the "Software"),\r
+ * to deal in the Software without restriction, including without limitation\r
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
+ * and/or sell copies of the Software, and to permit persons to whom the\r
+ * Software is furnished to do so, subject to the following conditions:\r
+ *\r
+ * The above copyright notice and this permission notice shall be included\r
+ * in all copies or substantial portions of the Software.\r
+ *\r
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL\r
+ * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
+ */\r
+\r
+#include <GL/freeglut.h>\r
+#include "freeglut_internal.h"\r
+\r
+/*\r
+ * TODO BEFORE THE STABLE RELEASE:\r
+ *\r
+ *  glutGet()               -- X11 tests passed, but check if all enums\r
+ *                             handled (what about Win32?)\r
+ *  glutDeviceGet()         -- X11 tests passed, but check if all enums\r
+ *                             handled (what about Win32?)\r
+ *  glutGetModifiers()      -- OK, but could also remove the limitation\r
+ *  glutLayerGet()          -- what about GLUT_NORMAL_DAMAGED?\r
+ *\r
+ * The fail-on-call policy will help adding the most needed things imho.\r
+ */\r
+\r
+/* -- LOCAL DEFINITIONS ---------------------------------------------------- */\r
+\r
+/* -- PRIVATE FUNCTIONS ---------------------------------------------------- */\r
+\r
+#if TARGET_HOST_POSIX_X11\r
+/*\r
+ * Queries the GL context about some attributes\r
+ */\r
+static int fghGetConfig( int attribute )\r
+{\r
+  int returnValue = 0;\r
+  int result;  /*  Not checked  */\r
+\r
+  if( fgStructure.CurrentWindow )\r
+      result = glXGetFBConfigAttrib( fgDisplay.Display,\r
+                                     *(fgStructure.CurrentWindow->Window.FBConfig),\r
+                                     attribute,\r
+                                     &returnValue );\r
+\r
+  return returnValue;\r
+}\r
+#endif\r
+\r
+/* -- INTERFACE FUNCTIONS -------------------------------------------------- */\r
+\r
+/*\r
+ * General settings assignment method\r
+ */\r
+void FGAPIENTRY glutSetOption( GLenum eWhat, int value )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSetOption" );\r
+\r
+    /*\r
+     * XXX In chronological code add order.  (WHY in that order?)\r
+     */\r
+    switch( eWhat )\r
+    {\r
+    case GLUT_INIT_WINDOW_X:\r
+        fgState.Position.X = (GLint)value;\r
+        break;\r
+\r
+    case GLUT_INIT_WINDOW_Y:\r
+        fgState.Position.Y = (GLint)value;\r
+        break;\r
+\r
+    case GLUT_INIT_WINDOW_WIDTH:\r
+        fgState.Size.X = (GLint)value;\r
+        break;\r
+\r
+    case GLUT_INIT_WINDOW_HEIGHT:\r
+        fgState.Size.Y = (GLint)value;\r
+        break;\r
+\r
+    case GLUT_INIT_DISPLAY_MODE:\r
+        fgState.DisplayMode = (unsigned int)value;\r
+        break;\r
+\r
+    case GLUT_ACTION_ON_WINDOW_CLOSE:\r
+        fgState.ActionOnWindowClose = value;\r
+        break;\r
+\r
+    case GLUT_RENDERING_CONTEXT:\r
+        fgState.UseCurrentContext =\r
+            ( value == GLUT_USE_CURRENT_CONTEXT ) ? GL_TRUE : GL_FALSE;\r
+        break;\r
+\r
+    case GLUT_DIRECT_RENDERING:\r
+        fgState.DirectContext = value;\r
+        break;\r
+\r
+    case GLUT_WINDOW_CURSOR:\r
+        if( fgStructure.CurrentWindow != NULL )\r
+            fgStructure.CurrentWindow->State.Cursor = value;\r
+        break;\r
+\r
+    case GLUT_AUX:\r
+      fgState.AuxiliaryBufferNumber = value;\r
+      break;\r
+\r
+    case GLUT_MULTISAMPLE:\r
+      fgState.SampleNumber = value;\r
+      break;\r
+\r
+    default:\r
+        fgWarning( "glutSetOption(): missing enum handle %d", eWhat );\r
+        break;\r
+    }\r
+}\r
+\r
+#if TARGET_HOST_MS_WINDOWS\r
+/* The following include file is available from SGI but is not standard:\r
+ *   #include <GL/wglext.h>\r
+ * So we copy the necessary parts out of it to support the multisampling query\r
+ */\r
+#define WGL_SAMPLES_ARB                0x2042\r
+#endif\r
+\r
+\r
+/*\r
+ * General settings query method\r
+ */\r
+int FGAPIENTRY glutGet( GLenum eWhat )\r
+{\r
+#if TARGET_HOST_MS_WINDOWS\r
+    int returnValue ;\r
+    GLboolean boolValue ;\r
+#endif\r
+\r
+    int nsamples = 0;\r
+\r
+    switch (eWhat)\r
+    {\r
+    case GLUT_INIT_STATE:\r
+        return fgState.Initialised;\r
+\r
+    case GLUT_ELAPSED_TIME:\r
+        return fgElapsedTime();\r
+    }\r
+\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutGet" );\r
+\r
+    /* XXX In chronological code add order.  (WHY in that order?) */\r
+    switch( eWhat )\r
+    {\r
+    /* Following values are stored in fgState and fgDisplay global structures */\r
+    case GLUT_SCREEN_WIDTH:         return fgDisplay.ScreenWidth   ;\r
+    case GLUT_SCREEN_HEIGHT:        return fgDisplay.ScreenHeight  ;\r
+    case GLUT_SCREEN_WIDTH_MM:      return fgDisplay.ScreenWidthMM ;\r
+    case GLUT_SCREEN_HEIGHT_MM:     return fgDisplay.ScreenHeightMM;\r
+    case GLUT_INIT_WINDOW_X:        return fgState.Position.Use ?\r
+                                           fgState.Position.X : -1 ;\r
+    case GLUT_INIT_WINDOW_Y:        return fgState.Position.Use ?\r
+                                           fgState.Position.Y : -1 ;\r
+    case GLUT_INIT_WINDOW_WIDTH:    return fgState.Size.Use ?\r
+                                           fgState.Size.X : -1     ;\r
+    case GLUT_INIT_WINDOW_HEIGHT:   return fgState.Size.Use ?\r
+                                           fgState.Size.Y : -1     ;\r
+    case GLUT_INIT_DISPLAY_MODE:    return fgState.DisplayMode     ;\r
+    case GLUT_INIT_MAJOR_VERSION:   return fgState.MajorVersion    ;\r
+    case GLUT_INIT_MINOR_VERSION:   return fgState.MinorVersion    ;\r
+    case GLUT_INIT_FLAGS:           return fgState.ContextFlags    ;\r
+    case GLUT_INIT_PROFILE:         return fgState.ContextProfile  ;\r
+\r
+#if TARGET_HOST_POSIX_X11\r
+    /*\r
+     * The window/context specific queries are handled mostly by\r
+     * fghGetConfig().\r
+     */\r
+    case GLUT_WINDOW_NUM_SAMPLES:\r
+#ifdef GLX_VERSION_1_3\r
+        glGetIntegerv(GL_SAMPLES, &nsamples);\r
+#endif\r
+        return nsamples;\r
+\r
+    /*\r
+     * The rest of GLX queries under X are general enough to use a macro to\r
+     * check them\r
+     */\r
+#   define GLX_QUERY(a,b) case a: return fghGetConfig( b );\r
+\r
+    GLX_QUERY( GLUT_WINDOW_RGBA,                GLX_RGBA                );\r
+    GLX_QUERY( GLUT_WINDOW_DOUBLEBUFFER,        GLX_DOUBLEBUFFER        );\r
+    GLX_QUERY( GLUT_WINDOW_BUFFER_SIZE,         GLX_BUFFER_SIZE         );\r
+    GLX_QUERY( GLUT_WINDOW_STENCIL_SIZE,        GLX_STENCIL_SIZE        );\r
+    GLX_QUERY( GLUT_WINDOW_DEPTH_SIZE,          GLX_DEPTH_SIZE          );\r
+    GLX_QUERY( GLUT_WINDOW_RED_SIZE,            GLX_RED_SIZE            );\r
+    GLX_QUERY( GLUT_WINDOW_GREEN_SIZE,          GLX_GREEN_SIZE          );\r
+    GLX_QUERY( GLUT_WINDOW_BLUE_SIZE,           GLX_BLUE_SIZE           );\r
+    GLX_QUERY( GLUT_WINDOW_ALPHA_SIZE,          GLX_ALPHA_SIZE          );\r
+    GLX_QUERY( GLUT_WINDOW_ACCUM_RED_SIZE,      GLX_ACCUM_RED_SIZE      );\r
+    GLX_QUERY( GLUT_WINDOW_ACCUM_GREEN_SIZE,    GLX_ACCUM_GREEN_SIZE    );\r
+    GLX_QUERY( GLUT_WINDOW_ACCUM_BLUE_SIZE,     GLX_ACCUM_BLUE_SIZE     );\r
+    GLX_QUERY( GLUT_WINDOW_ACCUM_ALPHA_SIZE,    GLX_ACCUM_ALPHA_SIZE    );\r
+    GLX_QUERY( GLUT_WINDOW_STEREO,              GLX_STEREO              );\r
+\r
+#   undef GLX_QUERY\r
+\r
+    /* Colormap size is handled in a bit different way than all the rest */\r
+    case GLUT_WINDOW_COLORMAP_SIZE:\r
+        if( (fghGetConfig( GLX_RGBA )) || (fgStructure.CurrentWindow == NULL) )\r
+        {\r
+            /*\r
+             * We've got a RGBA visual, so there is no colormap at all.\r
+             * The other possibility is that we have no current window set.\r
+             */\r
+            return 0;\r
+        }\r
+        else\r
+        {\r
+          const GLXFBConfig * fbconfig =\r
+                fgStructure.CurrentWindow->Window.FBConfig;\r
+\r
+          XVisualInfo * visualInfo =\r
+                glXGetVisualFromFBConfig( fgDisplay.Display, *fbconfig );\r
+\r
+          const int result = visualInfo->visual->map_entries;\r
+\r
+          XFree(visualInfo);\r
+\r
+          return result;\r
+        }\r
+\r
+    /*\r
+     * Those calls are somewhat similiar, as they use XGetWindowAttributes()\r
+     * function\r
+     */\r
+    case GLUT_WINDOW_X:\r
+    case GLUT_WINDOW_Y:\r
+    case GLUT_WINDOW_BORDER_WIDTH:\r
+    case GLUT_WINDOW_HEADER_HEIGHT:\r
+    {\r
+        int x, y;\r
+        Window w;\r
+\r
+        if( fgStructure.CurrentWindow == NULL )\r
+            return 0;\r
+\r
+        XTranslateCoordinates(\r
+            fgDisplay.Display,\r
+            fgStructure.CurrentWindow->Window.Handle,\r
+            fgDisplay.RootWindow,\r
+            0, 0, &x, &y, &w);\r
+\r
+        switch ( eWhat )\r
+        {\r
+        case GLUT_WINDOW_X: return x;\r
+        case GLUT_WINDOW_Y: return y;\r
+        }\r
+\r
+        if ( w == 0 )\r
+            return 0;\r
+        XTranslateCoordinates(\r
+            fgDisplay.Display,\r
+            fgStructure.CurrentWindow->Window.Handle,\r
+            w, 0, 0, &x, &y, &w);\r
+\r
+        switch ( eWhat )\r
+        {\r
+        case GLUT_WINDOW_BORDER_WIDTH:  return x;\r
+        case GLUT_WINDOW_HEADER_HEIGHT: return y;\r
+        }\r
+    }\r
+\r
+    case GLUT_WINDOW_WIDTH:\r
+    case GLUT_WINDOW_HEIGHT:\r
+    {\r
+        XWindowAttributes winAttributes;\r
+\r
+        if( fgStructure.CurrentWindow == NULL )\r
+            return 0;\r
+        XGetWindowAttributes(\r
+            fgDisplay.Display,\r
+            fgStructure.CurrentWindow->Window.Handle,\r
+            &winAttributes\r
+        );\r
+        switch ( eWhat )\r
+        {\r
+        case GLUT_WINDOW_WIDTH:            return winAttributes.width ;\r
+        case GLUT_WINDOW_HEIGHT:           return winAttributes.height ;\r
+        }\r
+    }\r
+\r
+    /* I do not know yet if there will be a fgChooseVisual() function for Win32 */\r
+    case GLUT_DISPLAY_MODE_POSSIBLE:\r
+    {\r
+        /*  We should not have to call fgChooseFBConfig again here.  */\r
+        GLXFBConfig * fbconfig;\r
+        int isPossible;\r
+\r
+        fbconfig = fgChooseFBConfig(NULL);\r
+\r
+        if (fbconfig == NULL)\r
+        {\r
+            isPossible = 0;\r
+        }\r
+        else\r
+        {\r
+            isPossible = 1;\r
+            XFree(fbconfig);\r
+        }\r
+\r
+        return isPossible;\r
+    }\r
+\r
+    /* This is system-dependant */\r
+    case GLUT_WINDOW_FORMAT_ID:\r
+        if( fgStructure.CurrentWindow == NULL )\r
+            return 0;\r
+\r
+        return fghGetConfig( GLX_VISUAL_ID );\r
+\r
+#elif TARGET_HOST_MS_WINDOWS\r
+\r
+    case GLUT_WINDOW_NUM_SAMPLES:\r
+      glGetIntegerv(WGL_SAMPLES_ARB, &nsamples);\r
+      return nsamples;\r
+\r
+    /* Handle the OpenGL inquiries */\r
+    case GLUT_WINDOW_RGBA:\r
+#if defined(_WIN32_WCE)\r
+      boolValue = (GLboolean)0;  /* WinCE doesn't support this feature */\r
+#else\r
+      glGetBooleanv ( GL_RGBA_MODE, &boolValue );\r
+      returnValue = boolValue ? 1 : 0;\r
+#endif\r
+      return returnValue;\r
+    case GLUT_WINDOW_DOUBLEBUFFER:\r
+#if defined(_WIN32_WCE)\r
+      boolValue = (GLboolean)0;  /* WinCE doesn't support this feature */\r
+#else\r
+      glGetBooleanv ( GL_DOUBLEBUFFER, &boolValue );\r
+      returnValue = boolValue ? 1 : 0;\r
+#endif\r
+      return returnValue;\r
+    case GLUT_WINDOW_STEREO:\r
+#if defined(_WIN32_WCE)\r
+      boolValue = (GLboolean)0;  /* WinCE doesn't support this feature */\r
+#else\r
+      glGetBooleanv ( GL_STEREO, &boolValue );\r
+      returnValue = boolValue ? 1 : 0;\r
+#endif\r
+      return returnValue;\r
+\r
+    case GLUT_WINDOW_RED_SIZE:\r
+      glGetIntegerv ( GL_RED_BITS, &returnValue );\r
+      return returnValue;\r
+    case GLUT_WINDOW_GREEN_SIZE:\r
+      glGetIntegerv ( GL_GREEN_BITS, &returnValue );\r
+      return returnValue;\r
+    case GLUT_WINDOW_BLUE_SIZE:\r
+      glGetIntegerv ( GL_BLUE_BITS, &returnValue );\r
+      return returnValue;\r
+    case GLUT_WINDOW_ALPHA_SIZE:\r
+      glGetIntegerv ( GL_ALPHA_BITS, &returnValue );\r
+      return returnValue;\r
+    case GLUT_WINDOW_ACCUM_RED_SIZE:\r
+#if defined(_WIN32_WCE)\r
+      returnValue = 0;  /* WinCE doesn't support this feature */\r
+#else\r
+      glGetIntegerv ( GL_ACCUM_RED_BITS, &returnValue );\r
+#endif\r
+      return returnValue;\r
+    case GLUT_WINDOW_ACCUM_GREEN_SIZE:\r
+#if defined(_WIN32_WCE)\r
+      returnValue = 0;  /* WinCE doesn't support this feature */\r
+#else\r
+      glGetIntegerv ( GL_ACCUM_GREEN_BITS, &returnValue );\r
+#endif\r
+      return returnValue;\r
+    case GLUT_WINDOW_ACCUM_BLUE_SIZE:\r
+#if defined(_WIN32_WCE)\r
+      returnValue = 0;  /* WinCE doesn't support this feature */\r
+#else\r
+      glGetIntegerv ( GL_ACCUM_BLUE_BITS, &returnValue );\r
+#endif\r
+      return returnValue;\r
+    case GLUT_WINDOW_ACCUM_ALPHA_SIZE:\r
+#if defined(_WIN32_WCE)\r
+      returnValue = 0;  /* WinCE doesn't support this feature */\r
+#else\r
+      glGetIntegerv ( GL_ACCUM_ALPHA_BITS, &returnValue );\r
+#endif\r
+      return returnValue;\r
+    case GLUT_WINDOW_DEPTH_SIZE:\r
+      glGetIntegerv ( GL_DEPTH_BITS, &returnValue );\r
+      return returnValue;\r
+\r
+    case GLUT_WINDOW_BUFFER_SIZE:\r
+      returnValue = 1 ;                                      /* ????? */\r
+      return returnValue;\r
+    case GLUT_WINDOW_STENCIL_SIZE:\r
+      returnValue = 0 ;                                      /* ????? */\r
+      return returnValue;\r
+\r
+    case GLUT_WINDOW_X:\r
+    case GLUT_WINDOW_Y:\r
+    case GLUT_WINDOW_WIDTH:\r
+    case GLUT_WINDOW_HEIGHT:\r
+    {\r
+        /*\r
+         *  There is considerable confusion about the "right thing to\r
+         *  do" concerning window  size and position.  GLUT itself is\r
+         *  not consistent between Windows and UNIX/X11; since\r
+         *  platform independence is a virtue for "freeglut", we\r
+         *  decided to break with GLUT's behaviour.\r
+         *\r
+         *  Under UNIX/X11, it is apparently not possible to get the\r
+         *  window border sizes in order to subtract them off the\r
+         *  window's initial position until some time after the window\r
+         *  has been created.  Therefore we decided on the following\r
+         *  behaviour, both under Windows and under UNIX/X11:\r
+         *  - When you create a window with position (x,y) and size\r
+         *    (w,h), the upper left hand corner of the outside of the\r
+         *    window is at (x,y) and the size of the drawable area  is\r
+         *    (w,h).\r
+         *  - When you query the size and position of the window--as\r
+         *    is happening here for Windows--"freeglut" will return\r
+         *    the size of the drawable area--the (w,h) that you\r
+         *    specified when you created the window--and the coordinates\r
+         *    of the upper left hand corner of the drawable\r
+         *    area--which is NOT the (x,y) you specified.\r
+         */\r
+\r
+        RECT winRect;\r
+\r
+        freeglut_return_val_if_fail( fgStructure.CurrentWindow != NULL, 0 );\r
+\r
+#if defined(_WIN32_WCE)\r
+        GetWindowRect( fgStructure.CurrentWindow->Window.Handle, &winRect );\r
+#else\r
+        winRect = fghGetClientArea(fgStructure.CurrentWindow, FALSE);\r
+#endif /* defined(_WIN32_WCE) */\r
+\r
+        switch( eWhat )\r
+        {\r
+        case GLUT_WINDOW_X:      return winRect.left                ;\r
+        case GLUT_WINDOW_Y:      return winRect.top                 ;\r
+        case GLUT_WINDOW_WIDTH:  return winRect.right - winRect.left;\r
+        case GLUT_WINDOW_HEIGHT: return winRect.bottom - winRect.top;\r
+        }\r
+    }\r
+    break;\r
+\r
+    case GLUT_WINDOW_BORDER_WIDTH :\r
+    case GLUT_WINDOW_HEADER_HEIGHT :\r
+#if defined(_WIN32_WCE)\r
+        return 0;\r
+#else\r
+        {\r
+            DWORD windowStyle;\r
+\r
+            if (fgStructure.CurrentWindow && fgStructure.CurrentWindow->Window.Handle)\r
+                windowStyle = GetWindowLong(fgStructure.CurrentWindow->Window.Handle, GWL_STYLE);\r
+            else\r
+                /* If no window, return sizes for a default window with title bar and border */\r
+                windowStyle = WS_OVERLAPPEDWINDOW;\r
+            \r
+            switch( eWhat )\r
+            {\r
+            case GLUT_WINDOW_BORDER_WIDTH:\r
+                {\r
+                    int xBorderWidth, yBorderWidth;\r
+                    fghGetBorderWidth(windowStyle, &xBorderWidth, &yBorderWidth);\r
+                    return xBorderWidth;\r
+                }\r
+            case GLUT_WINDOW_HEADER_HEIGHT:\r
+                /* Need to query for WS_MAXIMIZEBOX to see if we have a title bar, the WS_CAPTION query is also true for a WS_DLGFRAME only... */\r
+                return (windowStyle & WS_MAXIMIZEBOX)? GetSystemMetrics( SM_CYCAPTION ) : 0;\r
+            }\r
+        }\r
+#endif /* defined(_WIN32_WCE) */\r
+\r
+    case GLUT_DISPLAY_MODE_POSSIBLE:\r
+#if defined(_WIN32_WCE)\r
+        return 0;\r
+#else\r
+        return fgSetupPixelFormat( fgStructure.CurrentWindow, GL_TRUE,\r
+                                    PFD_MAIN_PLANE );\r
+#endif /* defined(_WIN32_WCE) */\r
+\r
+\r
+    case GLUT_WINDOW_FORMAT_ID:\r
+#if !defined(_WIN32_WCE)\r
+        if( fgStructure.CurrentWindow != NULL )\r
+            return GetPixelFormat( fgStructure.CurrentWindow->Window.Device );\r
+#endif /* defined(_WIN32_WCE) */\r
+        return 0;\r
+\r
+#endif\r
+\r
+    /* The window structure queries */\r
+    case GLUT_WINDOW_PARENT:\r
+        if( fgStructure.CurrentWindow         == NULL ) return 0;\r
+        if( fgStructure.CurrentWindow->Parent == NULL ) return 0;\r
+        return fgStructure.CurrentWindow->Parent->ID;\r
+\r
+    case GLUT_WINDOW_NUM_CHILDREN:\r
+        if( fgStructure.CurrentWindow == NULL )\r
+            return 0;\r
+        return fgListLength( &fgStructure.CurrentWindow->Children );\r
+\r
+    case GLUT_WINDOW_CURSOR:\r
+        if( fgStructure.CurrentWindow == NULL )\r
+            return 0;\r
+        return fgStructure.CurrentWindow->State.Cursor;\r
+\r
+    case GLUT_MENU_NUM_ITEMS:\r
+        if( fgStructure.CurrentMenu == NULL )\r
+            return 0;\r
+        return fgListLength( &fgStructure.CurrentMenu->Entries );\r
+\r
+    case GLUT_ACTION_ON_WINDOW_CLOSE:\r
+        return fgState.ActionOnWindowClose;\r
+\r
+    case GLUT_VERSION :\r
+        return VERSION_MAJOR * 10000 + VERSION_MINOR * 100 + VERSION_PATCH;\r
+\r
+    case GLUT_RENDERING_CONTEXT:\r
+        return fgState.UseCurrentContext ? GLUT_USE_CURRENT_CONTEXT\r
+                                         : GLUT_CREATE_NEW_CONTEXT;\r
+\r
+    case GLUT_DIRECT_RENDERING:\r
+        return fgState.DirectContext;\r
+\r
+    case GLUT_FULL_SCREEN:\r
+        return fgStructure.CurrentWindow->State.IsFullscreen;\r
+\r
+    case GLUT_AUX:\r
+      return fgState.AuxiliaryBufferNumber;\r
+\r
+    case GLUT_MULTISAMPLE:\r
+      return fgState.SampleNumber;\r
+\r
+    default:\r
+        fgWarning( "glutGet(): missing enum handle %d", eWhat );\r
+        break;\r
+    }\r
+    return -1;\r
+}\r
+\r
+/*\r
+ * Returns various device information.\r
+ */\r
+int FGAPIENTRY glutDeviceGet( GLenum eWhat )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutDeviceGet" );\r
+\r
+    /* XXX WARNING: we are mostly lying in this function. */\r
+    switch( eWhat )\r
+    {\r
+    case GLUT_HAS_KEYBOARD:\r
+        /*\r
+         * Win32 is assumed a keyboard, and this cannot be queried,\r
+         * except for WindowsCE.\r
+         *\r
+         * X11 has a core keyboard by definition, although it can\r
+         * be present as a virtual/dummy keyboard. For now, there\r
+         * is no reliable way to tell if a real keyboard is present.\r
+         */\r
+#if defined(_WIN32_CE)\r
+        return ( GetKeyboardStatus() & KBDI_KEYBOARD_PRESENT ) ? 1 : 0;\r
+#   if FREEGLUT_LIB_PRAGMAS\r
+#       pragma comment (lib,"Kbdui.lib")\r
+#   endif\r
+\r
+#else\r
+        return 1;\r
+#endif\r
+\r
+#if TARGET_HOST_POSIX_X11\r
+\r
+    /* X11 has a mouse by definition */\r
+    case GLUT_HAS_MOUSE:\r
+        return 1 ;\r
+\r
+    case GLUT_NUM_MOUSE_BUTTONS:\r
+        /* We should be able to pass NULL when the last argument is zero,\r
+         * but at least one X server has a bug where this causes a segfault.\r
+         *\r
+         * In XFree86/Xorg servers, a mouse wheel is seen as two buttons\r
+         * rather than an Axis; "freeglut_main.c" expects this when\r
+         * checking for a wheel event.\r
+         */\r
+        {\r
+            unsigned char map;\r
+            int nbuttons = XGetPointerMapping(fgDisplay.Display, &map,0);\r
+            return nbuttons;\r
+        }\r
+\r
+#elif TARGET_HOST_MS_WINDOWS\r
+\r
+    case GLUT_HAS_MOUSE:\r
+        /*\r
+         * MS Windows can be booted without a mouse.\r
+         */\r
+        return GetSystemMetrics( SM_MOUSEPRESENT );\r
+\r
+    case GLUT_NUM_MOUSE_BUTTONS:\r
+#  if defined(_WIN32_WCE)\r
+        return 1;\r
+#  else\r
+        return GetSystemMetrics( SM_CMOUSEBUTTONS );\r
+#  endif\r
+#endif\r
+\r
+    case GLUT_HAS_JOYSTICK:\r
+        return fgJoystickDetect ();\r
+\r
+    case GLUT_OWNS_JOYSTICK:\r
+        return fgState.JoysticksInitialised;\r
+\r
+    case GLUT_JOYSTICK_POLL_RATE:\r
+        return fgStructure.CurrentWindow ? fgStructure.CurrentWindow->State.JoystickPollRate : 0;\r
+\r
+    /* XXX The following two are only for Joystick 0 but this is an improvement */\r
+    case GLUT_JOYSTICK_BUTTONS:\r
+        return glutJoystickGetNumButtons ( 0 );\r
+\r
+    case GLUT_JOYSTICK_AXES:\r
+        return glutJoystickGetNumAxes ( 0 );\r
+\r
+    case GLUT_HAS_DIAL_AND_BUTTON_BOX:\r
+        return fgInputDeviceDetect ();\r
+\r
+    case GLUT_NUM_DIALS:\r
+        if ( fgState.InputDevsInitialised ) return 8;\r
+        return 0;\r
\r
+    case GLUT_NUM_BUTTON_BOX_BUTTONS:\r
+        return 0;\r
+\r
+    case GLUT_HAS_SPACEBALL:\r
+        return fgHasSpaceball();\r
+\r
+    case GLUT_HAS_TABLET:\r
+        return 0;\r
+\r
+    case GLUT_NUM_SPACEBALL_BUTTONS:\r
+        return fgSpaceballNumButtons();\r
+\r
+    case GLUT_NUM_TABLET_BUTTONS:\r
+        return 0;\r
+\r
+    case GLUT_DEVICE_IGNORE_KEY_REPEAT:\r
+        return fgStructure.CurrentWindow ? fgStructure.CurrentWindow->State.IgnoreKeyRepeat : 0;\r
+\r
+    case GLUT_DEVICE_KEY_REPEAT:\r
+        return fgState.KeyRepeat;\r
+\r
+    default:\r
+        fgWarning( "glutDeviceGet(): missing enum handle %d", eWhat );\r
+        break;\r
+    }\r
+\r
+    /* And now -- the failure. */\r
+    return -1;\r
+}\r
+\r
+/*\r
+ * This should return the current state of ALT, SHIFT and CTRL keys.\r
+ */\r
+int FGAPIENTRY glutGetModifiers( void )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutGetModifiers" );\r
+    if( fgState.Modifiers == INVALID_MODIFIERS )\r
+    {\r
+        fgWarning( "glutGetModifiers() called outside an input callback" );\r
+        return 0;\r
+    }\r
+\r
+    return fgState.Modifiers;\r
+}\r
+\r
+/*\r
+ * Return the state of the GLUT API overlay subsystem. A misery ;-)\r
+ */\r
+int FGAPIENTRY glutLayerGet( GLenum eWhat )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutLayerGet" );\r
+\r
+    /*\r
+     * This is easy as layers are not implemented ;-)\r
+     *\r
+     * XXX Can we merge the UNIX/X11 and WIN32 sections?  Or\r
+     * XXX is overlay support planned?\r
+     */\r
+    switch( eWhat )\r
+    {\r
+\r
+#if TARGET_HOST_POSIX_X11\r
+\r
+    case GLUT_OVERLAY_POSSIBLE:\r
+        return 0;\r
+\r
+    case GLUT_LAYER_IN_USE:\r
+        return GLUT_NORMAL;\r
+\r
+    case GLUT_HAS_OVERLAY:\r
+        return 0;\r
+\r
+    case GLUT_TRANSPARENT_INDEX:\r
+        /*\r
+         * Return just anything, which is always defined as zero\r
+         *\r
+         * XXX HUH?\r
+         */\r
+        return 0;\r
+\r
+    case GLUT_NORMAL_DAMAGED:\r
+        /* XXX Actually I do not know. Maybe. */\r
+        return 0;\r
+\r
+    case GLUT_OVERLAY_DAMAGED:\r
+        return -1;\r
+\r
+#elif TARGET_HOST_MS_WINDOWS\r
+\r
+    case GLUT_OVERLAY_POSSIBLE:\r
+/*      return fgSetupPixelFormat( fgStructure.CurrentWindow, GL_TRUE,\r
+                                   PFD_OVERLAY_PLANE ); */\r
+      return 0 ;\r
+\r
+    case GLUT_LAYER_IN_USE:\r
+        return GLUT_NORMAL;\r
+\r
+    case GLUT_HAS_OVERLAY:\r
+        return 0;\r
+\r
+    case GLUT_TRANSPARENT_INDEX:\r
+        /*\r
+         * Return just anything, which is always defined as zero\r
+         *\r
+         * XXX HUH?\r
+         */\r
+        return 0;\r
+\r
+    case GLUT_NORMAL_DAMAGED:\r
+        /* XXX Actually I do not know. Maybe. */\r
+        return 0;\r
+\r
+    case GLUT_OVERLAY_DAMAGED:\r
+        return -1;\r
+#endif\r
+\r
+    default:\r
+        fgWarning( "glutLayerGet(): missing enum handle %d", eWhat );\r
+        break;\r
+    }\r
+\r
+    /* And fail. That's good. Programs do love failing. */\r
+    return -1;\r
+}\r
+\r
+int * FGAPIENTRY glutGetModeValues(GLenum eWhat, int * size)\r
+{\r
+  int * array;\r
+\r
+#if TARGET_HOST_POSIX_X11\r
+  int attributes[9];\r
+  GLXFBConfig * fbconfigArray;  /*  Array of FBConfigs  */\r
+  int fbconfigArraySize;        /*  Number of FBConfigs in the array  */\r
+  int attribute_name = 0;\r
+#endif\r
+\r
+  FREEGLUT_EXIT_IF_NOT_INITIALISED("glutGetModeValues");\r
+\r
+  array = NULL;\r
+  *size = 0;\r
+\r
+  switch (eWhat)\r
+    {\r
+#if TARGET_HOST_POSIX_X11\r
+    case GLUT_AUX:\r
+    case GLUT_MULTISAMPLE:\r
+\r
+      attributes[0] = GLX_BUFFER_SIZE;\r
+      attributes[1] = GLX_DONT_CARE;\r
+\r
+      switch (eWhat)\r
+        {\r
+        case GLUT_AUX:\r
+          /*\r
+            FBConfigs are now sorted by increasing number of auxiliary\r
+            buffers.  We want at least one buffer.\r
+          */\r
+          attributes[2] = GLX_AUX_BUFFERS;\r
+          attributes[3] = 1;\r
+          attributes[4] = None;\r
+\r
+          attribute_name = GLX_AUX_BUFFERS;\r
+\r
+          break;\r
+\r
+\r
+        case GLUT_MULTISAMPLE:\r
+          attributes[2] = GLX_AUX_BUFFERS;\r
+          attributes[3] = GLX_DONT_CARE;\r
+          attributes[4] = GLX_SAMPLE_BUFFERS;\r
+          attributes[5] = 1;\r
+          /*\r
+            FBConfigs are now sorted by increasing number of samples per\r
+            pixel.  We want at least one sample.\r
+          */\r
+          attributes[6] = GLX_SAMPLES;\r
+          attributes[7] = 1;\r
+          attributes[8] = None;\r
+\r
+          attribute_name = GLX_SAMPLES;\r
+\r
+          break;\r
+        }\r
+\r
+      fbconfigArray = glXChooseFBConfig(fgDisplay.Display,\r
+                                        fgDisplay.Screen,\r
+                                        attributes,\r
+                                        &fbconfigArraySize);\r
+\r
+      if (fbconfigArray != NULL)\r
+        {\r
+          int * temp_array;\r
+          int result;   /*  Returned by glXGetFBConfigAttrib. Not checked.  */\r
+          int previous_value;\r
+          int i;\r
+\r
+          temp_array = malloc(sizeof(int) * fbconfigArraySize);\r
+          previous_value = 0;\r
+\r
+          for (i = 0; i < fbconfigArraySize; i++)\r
+            {\r
+              int value;\r
+\r
+              result = glXGetFBConfigAttrib(fgDisplay.Display,\r
+                                            fbconfigArray[i],\r
+                                            attribute_name,\r
+                                            &value);\r
+              if (value > previous_value)\r
+                {\r
+                  temp_array[*size] = value;\r
+                  previous_value = value;\r
+                  (*size)++;\r
+                }\r
+            }\r
+\r
+          array = malloc(sizeof(int) * (*size));\r
+          for (i = 0; i < *size; i++)\r
+            {\r
+              array[i] = temp_array[i];\r
+            }\r
+\r
+          free(temp_array);\r
+          XFree(fbconfigArray);\r
+        }\r
+\r
+      break;\r
+#endif      \r
+\r
+    default:\r
+      break;\r
+    }\r
+\r
+  return array;\r
+}\r
+\r
+/*** END OF FILE ***/\r
diff --git a/src/Common/freeglut_stroke_mono_roman.c b/src/Common/freeglut_stroke_mono_roman.c
new file mode 100644 (file)
index 0000000..f0bb6b1
--- /dev/null
@@ -0,0 +1,2849 @@
+/*\r
+ * freeglut_stroke_mono_roman.c\r
+ *\r
+ * freeglut Monospace Roman stroke font definition\r
+ *\r
+ * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.\r
+ * Written by Pawel W. Olszta, <olszta@sourceforge.net>\r
+ * Creation date: Thu Dec 16 1999\r
+ *\r
+ * Permission is hereby granted, free of charge, to any person obtaining a\r
+ * copy of this software and associated documentation files (the "Software"),\r
+ * to deal in the Software without restriction, including without limitation\r
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
+ * and/or sell copies of the Software, and to permit persons to whom the\r
+ * Software is furnished to do so, subject to the following conditions:\r
+ *\r
+ * The above copyright notice and this permission notice shall be included\r
+ * in all copies or substantial portions of the Software.\r
+ *\r
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL\r
+ * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
+ */\r
+\r
+\r
+/* This file has been automatically generated by the genstroke utility. */\r
+\r
+#include <GL/freeglut.h>\r
+#include "freeglut_internal.h"\r
+\r
+/* char: 0x20 */\r
+\r
+static const SFG_StrokeStrip ch32st[] =\r
+{\r
+  { 0, NULL }\r
+};\r
+\r
+static const SFG_StrokeChar ch32 = {104.762f,0,ch32st};\r
+\r
+/* char: 0x21 */\r
+\r
+static const SFG_StrokeVertex ch33st0[] =\r
+{\r
+ {52.381f,100.0f},\r
+ {52.381f,33.3333f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch33st1[] =\r
+{\r
+ {52.381f,9.5238f},\r
+ {47.6191f,4.7619f},\r
+ {52.381f,0.0f},\r
+ {57.1429f,4.7619f},\r
+ {52.381f,9.5238f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch33st[] =\r
+{\r
+ {2,ch33st0},\r
+ {5,ch33st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch33 = {104.762f,2,ch33st};\r
+\r
+/* char: 0x22 */\r
+\r
+static const SFG_StrokeVertex ch34st0[] =\r
+{\r
+ {33.3334f,100.0f},\r
+ {33.3334f,66.6667f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch34st1[] =\r
+{\r
+ {71.4286f,100.0f},\r
+ {71.4286f,66.6667f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch34st[] =\r
+{\r
+ {2,ch34st0},\r
+ {2,ch34st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch34 = {104.762f,2,ch34st};\r
+\r
+/* char: 0x23 */\r
+\r
+static const SFG_StrokeVertex ch35st0[] =\r
+{\r
+ {54.7619f,119.048f},\r
+ {21.4286f,-33.3333f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch35st1[] =\r
+{\r
+ {83.3334f,119.048f},\r
+ {50.0f,-33.3333f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch35st2[] =\r
+{\r
+ {21.4286f,57.1429f},\r
+ {88.0952f,57.1429f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch35st3[] =\r
+{\r
+ {16.6667f,28.5714f},\r
+ {83.3334f,28.5714f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch35st[] =\r
+{\r
+ {2,ch35st0},\r
+ {2,ch35st1},\r
+ {2,ch35st2},\r
+ {2,ch35st3}\r
+};\r
+\r
+static const SFG_StrokeChar ch35 = {104.762f,4,ch35st};\r
+\r
+/* char: 0x24 */\r
+\r
+static const SFG_StrokeVertex ch36st0[] =\r
+{\r
+ {42.8571f,119.048f},\r
+ {42.8571f,-19.0476f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch36st1[] =\r
+{\r
+ {61.9047f,119.048f},\r
+ {61.9047f,-19.0476f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch36st2[] =\r
+{\r
+ {85.7143f,85.7143f},\r
+ {76.1905f,95.2381f},\r
+ {61.9047f,100.0f},\r
+ {42.8571f,100.0f},\r
+ {28.5714f,95.2381f},\r
+ {19.0476f,85.7143f},\r
+ {19.0476f,76.1905f},\r
+ {23.8095f,66.6667f},\r
+ {28.5714f,61.9048f},\r
+ {38.0952f,57.1429f},\r
+ {66.6666f,47.619f},\r
+ {76.1905f,42.8571f},\r
+ {80.9524f,38.0952f},\r
+ {85.7143f,28.5714f},\r
+ {85.7143f,14.2857f},\r
+ {76.1905f,4.7619f},\r
+ {61.9047f,0.0f},\r
+ {42.8571f,0.0f},\r
+ {28.5714f,4.7619f},\r
+ {19.0476f,14.2857f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch36st[] =\r
+{\r
+ {2,ch36st0},\r
+ {2,ch36st1},\r
+ {20,ch36st2}\r
+};\r
+\r
+static const SFG_StrokeChar ch36 = {104.762f,3,ch36st};\r
+\r
+/* char: 0x25 */\r
+\r
+static const SFG_StrokeVertex ch37st0[] =\r
+{\r
+ {95.2381f,100.0f},\r
+ {9.5238f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch37st1[] =\r
+{\r
+ {33.3333f,100.0f},\r
+ {42.8571f,90.4762f},\r
+ {42.8571f,80.9524f},\r
+ {38.0952f,71.4286f},\r
+ {28.5714f,66.6667f},\r
+ {19.0476f,66.6667f},\r
+ {9.5238f,76.1905f},\r
+ {9.5238f,85.7143f},\r
+ {14.2857f,95.2381f},\r
+ {23.8095f,100.0f},\r
+ {33.3333f,100.0f},\r
+ {42.8571f,95.2381f},\r
+ {57.1428f,90.4762f},\r
+ {71.4286f,90.4762f},\r
+ {85.7143f,95.2381f},\r
+ {95.2381f,100.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch37st2[] =\r
+{\r
+ {76.1905f,33.3333f},\r
+ {66.6667f,28.5714f},\r
+ {61.9048f,19.0476f},\r
+ {61.9048f,9.5238f},\r
+ {71.4286f,0.0f},\r
+ {80.9524f,0.0f},\r
+ {90.4762f,4.7619f},\r
+ {95.2381f,14.2857f},\r
+ {95.2381f,23.8095f},\r
+ {85.7143f,33.3333f},\r
+ {76.1905f,33.3333f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch37st[] =\r
+{\r
+ {2,ch37st0},\r
+ {16,ch37st1},\r
+ {11,ch37st2}\r
+};\r
+\r
+static const SFG_StrokeChar ch37 = {104.762f,3,ch37st};\r
+\r
+/* char: 0x26 */\r
+\r
+static const SFG_StrokeVertex ch38st0[] =\r
+{\r
+ {100.0f,57.1429f},\r
+ {100.0f,61.9048f},\r
+ {95.2381f,66.6667f},\r
+ {90.4762f,66.6667f},\r
+ {85.7143f,61.9048f},\r
+ {80.9524f,52.381f},\r
+ {71.4286f,28.5714f},\r
+ {61.9048f,14.2857f},\r
+ {52.3809f,4.7619f},\r
+ {42.8571f,0.0f},\r
+ {23.8095f,0.0f},\r
+ {14.2857f,4.7619f},\r
+ {9.5238f,9.5238f},\r
+ {4.7619f,19.0476f},\r
+ {4.7619f,28.5714f},\r
+ {9.5238f,38.0952f},\r
+ {14.2857f,42.8571f},\r
+ {47.619f,61.9048f},\r
+ {52.3809f,66.6667f},\r
+ {57.1429f,76.1905f},\r
+ {57.1429f,85.7143f},\r
+ {52.3809f,95.2381f},\r
+ {42.8571f,100.0f},\r
+ {33.3333f,95.2381f},\r
+ {28.5714f,85.7143f},\r
+ {28.5714f,76.1905f},\r
+ {33.3333f,61.9048f},\r
+ {42.8571f,47.619f},\r
+ {66.6667f,14.2857f},\r
+ {76.1905f,4.7619f},\r
+ {85.7143f,0.0f},\r
+ {95.2381f,0.0f},\r
+ {100.0f,4.7619f},\r
+ {100.0f,9.5238f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch38st[] =\r
+{\r
+ {34,ch38st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch38 = {104.762f,1,ch38st};\r
+\r
+/* char: 0x27 */\r
+\r
+static const SFG_StrokeVertex ch39st0[] =\r
+{\r
+ {52.381f,100.0f},\r
+ {52.381f,66.6667f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch39st[] =\r
+{\r
+ {2,ch39st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch39 = {104.762f,1,ch39st};\r
+\r
+/* char: 0x28 */\r
+\r
+static const SFG_StrokeVertex ch40st0[] =\r
+{\r
+ {69.0476f,119.048f},\r
+ {59.5238f,109.524f},\r
+ {50.0f,95.2381f},\r
+ {40.4762f,76.1905f},\r
+ {35.7143f,52.381f},\r
+ {35.7143f,33.3333f},\r
+ {40.4762f,9.5238f},\r
+ {50.0f,-9.5238f},\r
+ {59.5238f,-23.8095f},\r
+ {69.0476f,-33.3333f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch40st[] =\r
+{\r
+ {10,ch40st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch40 = {104.762f,1,ch40st};\r
+\r
+/* char: 0x29 */\r
+\r
+static const SFG_StrokeVertex ch41st0[] =\r
+{\r
+ {35.7143f,119.048f},\r
+ {45.2381f,109.524f},\r
+ {54.7619f,95.2381f},\r
+ {64.2857f,76.1905f},\r
+ {69.0476f,52.381f},\r
+ {69.0476f,33.3333f},\r
+ {64.2857f,9.5238f},\r
+ {54.7619f,-9.5238f},\r
+ {45.2381f,-23.8095f},\r
+ {35.7143f,-33.3333f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch41st[] =\r
+{\r
+ {10,ch41st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch41 = {104.762f,1,ch41st};\r
+\r
+/* char: 0x2a */\r
+\r
+static const SFG_StrokeVertex ch42st0[] =\r
+{\r
+ {52.381f,71.4286f},\r
+ {52.381f,14.2857f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch42st1[] =\r
+{\r
+ {28.5715f,57.1429f},\r
+ {76.1905f,28.5714f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch42st2[] =\r
+{\r
+ {76.1905f,57.1429f},\r
+ {28.5715f,28.5714f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch42st[] =\r
+{\r
+ {2,ch42st0},\r
+ {2,ch42st1},\r
+ {2,ch42st2}\r
+};\r
+\r
+static const SFG_StrokeChar ch42 = {104.762f,3,ch42st};\r
+\r
+/* char: 0x2b */\r
+\r
+static const SFG_StrokeVertex ch43st0[] =\r
+{\r
+ {52.3809f,85.7143f},\r
+ {52.3809f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch43st1[] =\r
+{\r
+ {9.5238f,42.8571f},\r
+ {95.2381f,42.8571f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch43st[] =\r
+{\r
+ {2,ch43st0},\r
+ {2,ch43st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch43 = {104.762f,2,ch43st};\r
+\r
+/* char: 0x2c */\r
+\r
+static const SFG_StrokeVertex ch44st0[] =\r
+{\r
+ {57.1429f,4.7619f},\r
+ {52.381f,0.0f},\r
+ {47.6191f,4.7619f},\r
+ {52.381f,9.5238f},\r
+ {57.1429f,4.7619f},\r
+ {57.1429f,-4.7619f},\r
+ {52.381f,-14.2857f},\r
+ {47.6191f,-19.0476f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch44st[] =\r
+{\r
+ {8,ch44st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch44 = {104.762f,1,ch44st};\r
+\r
+/* char: 0x2d */\r
+\r
+static const SFG_StrokeVertex ch45st0[] =\r
+{\r
+ {9.5238f,42.8571f},\r
+ {95.2381f,42.8571f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch45st[] =\r
+{\r
+ {2,ch45st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch45 = {104.762f,1,ch45st};\r
+\r
+/* char: 0x2e */\r
+\r
+static const SFG_StrokeVertex ch46st0[] =\r
+{\r
+ {52.381f,9.5238f},\r
+ {47.6191f,4.7619f},\r
+ {52.381f,0.0f},\r
+ {57.1429f,4.7619f},\r
+ {52.381f,9.5238f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch46st[] =\r
+{\r
+ {5,ch46st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch46 = {104.762f,1,ch46st};\r
+\r
+/* char: 0x2f */\r
+\r
+static const SFG_StrokeVertex ch47st0[] =\r
+{\r
+ {19.0476f,-14.2857f},\r
+ {85.7143f,100.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch47st[] =\r
+{\r
+ {2,ch47st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch47 = {104.762f,1,ch47st};\r
+\r
+/* char: 0x30 */\r
+\r
+static const SFG_StrokeVertex ch48st0[] =\r
+{\r
+ {47.619f,100.0f},\r
+ {33.3333f,95.2381f},\r
+ {23.8095f,80.9524f},\r
+ {19.0476f,57.1429f},\r
+ {19.0476f,42.8571f},\r
+ {23.8095f,19.0476f},\r
+ {33.3333f,4.7619f},\r
+ {47.619f,0.0f},\r
+ {57.1428f,0.0f},\r
+ {71.4286f,4.7619f},\r
+ {80.9524f,19.0476f},\r
+ {85.7143f,42.8571f},\r
+ {85.7143f,57.1429f},\r
+ {80.9524f,80.9524f},\r
+ {71.4286f,95.2381f},\r
+ {57.1428f,100.0f},\r
+ {47.619f,100.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch48st[] =\r
+{\r
+ {17,ch48st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch48 = {104.762f,1,ch48st};\r
+\r
+/* char: 0x31 */\r
+\r
+static const SFG_StrokeVertex ch49st0[] =\r
+{\r
+ {40.4762f,80.9524f},\r
+ {50.0f,85.7143f},\r
+ {64.2857f,100.0f},\r
+ {64.2857f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch49st[] =\r
+{\r
+ {4,ch49st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch49 = {104.762f,1,ch49st};\r
+\r
+/* char: 0x32 */\r
+\r
+static const SFG_StrokeVertex ch50st0[] =\r
+{\r
+ {23.8095f,76.1905f},\r
+ {23.8095f,80.9524f},\r
+ {28.5714f,90.4762f},\r
+ {33.3333f,95.2381f},\r
+ {42.8571f,100.0f},\r
+ {61.9047f,100.0f},\r
+ {71.4286f,95.2381f},\r
+ {76.1905f,90.4762f},\r
+ {80.9524f,80.9524f},\r
+ {80.9524f,71.4286f},\r
+ {76.1905f,61.9048f},\r
+ {66.6666f,47.619f},\r
+ {19.0476f,0.0f},\r
+ {85.7143f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch50st[] =\r
+{\r
+ {14,ch50st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch50 = {104.762f,1,ch50st};\r
+\r
+/* char: 0x33 */\r
+\r
+static const SFG_StrokeVertex ch51st0[] =\r
+{\r
+ {28.5714f,100.0f},\r
+ {80.9524f,100.0f},\r
+ {52.3809f,61.9048f},\r
+ {66.6666f,61.9048f},\r
+ {76.1905f,57.1429f},\r
+ {80.9524f,52.381f},\r
+ {85.7143f,38.0952f},\r
+ {85.7143f,28.5714f},\r
+ {80.9524f,14.2857f},\r
+ {71.4286f,4.7619f},\r
+ {57.1428f,0.0f},\r
+ {42.8571f,0.0f},\r
+ {28.5714f,4.7619f},\r
+ {23.8095f,9.5238f},\r
+ {19.0476f,19.0476f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch51st[] =\r
+{\r
+ {15,ch51st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch51 = {104.762f,1,ch51st};\r
+\r
+/* char: 0x34 */\r
+\r
+static const SFG_StrokeVertex ch52st0[] =\r
+{\r
+ {64.2857f,100.0f},\r
+ {16.6667f,33.3333f},\r
+ {88.0952f,33.3333f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch52st1[] =\r
+{\r
+ {64.2857f,100.0f},\r
+ {64.2857f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch52st[] =\r
+{\r
+ {3,ch52st0},\r
+ {2,ch52st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch52 = {104.762f,2,ch52st};\r
+\r
+/* char: 0x35 */\r
+\r
+static const SFG_StrokeVertex ch53st0[] =\r
+{\r
+ {76.1905f,100.0f},\r
+ {28.5714f,100.0f},\r
+ {23.8095f,57.1429f},\r
+ {28.5714f,61.9048f},\r
+ {42.8571f,66.6667f},\r
+ {57.1428f,66.6667f},\r
+ {71.4286f,61.9048f},\r
+ {80.9524f,52.381f},\r
+ {85.7143f,38.0952f},\r
+ {85.7143f,28.5714f},\r
+ {80.9524f,14.2857f},\r
+ {71.4286f,4.7619f},\r
+ {57.1428f,0.0f},\r
+ {42.8571f,0.0f},\r
+ {28.5714f,4.7619f},\r
+ {23.8095f,9.5238f},\r
+ {19.0476f,19.0476f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch53st[] =\r
+{\r
+ {17,ch53st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch53 = {104.762f,1,ch53st};\r
+\r
+/* char: 0x36 */\r
+\r
+static const SFG_StrokeVertex ch54st0[] =\r
+{\r
+ {78.5714f,85.7143f},\r
+ {73.8096f,95.2381f},\r
+ {59.5238f,100.0f},\r
+ {50.0f,100.0f},\r
+ {35.7143f,95.2381f},\r
+ {26.1905f,80.9524f},\r
+ {21.4286f,57.1429f},\r
+ {21.4286f,33.3333f},\r
+ {26.1905f,14.2857f},\r
+ {35.7143f,4.7619f},\r
+ {50.0f,0.0f},\r
+ {54.7619f,0.0f},\r
+ {69.0476f,4.7619f},\r
+ {78.5714f,14.2857f},\r
+ {83.3334f,28.5714f},\r
+ {83.3334f,33.3333f},\r
+ {78.5714f,47.619f},\r
+ {69.0476f,57.1429f},\r
+ {54.7619f,61.9048f},\r
+ {50.0f,61.9048f},\r
+ {35.7143f,57.1429f},\r
+ {26.1905f,47.619f},\r
+ {21.4286f,33.3333f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch54st[] =\r
+{\r
+ {23,ch54st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch54 = {104.762f,1,ch54st};\r
+\r
+/* char: 0x37 */\r
+\r
+static const SFG_StrokeVertex ch55st0[] =\r
+{\r
+ {85.7143f,100.0f},\r
+ {38.0952f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch55st1[] =\r
+{\r
+ {19.0476f,100.0f},\r
+ {85.7143f,100.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch55st[] =\r
+{\r
+ {2,ch55st0},\r
+ {2,ch55st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch55 = {104.762f,2,ch55st};\r
+\r
+/* char: 0x38 */\r
+\r
+static const SFG_StrokeVertex ch56st0[] =\r
+{\r
+ {42.8571f,100.0f},\r
+ {28.5714f,95.2381f},\r
+ {23.8095f,85.7143f},\r
+ {23.8095f,76.1905f},\r
+ {28.5714f,66.6667f},\r
+ {38.0952f,61.9048f},\r
+ {57.1428f,57.1429f},\r
+ {71.4286f,52.381f},\r
+ {80.9524f,42.8571f},\r
+ {85.7143f,33.3333f},\r
+ {85.7143f,19.0476f},\r
+ {80.9524f,9.5238f},\r
+ {76.1905f,4.7619f},\r
+ {61.9047f,0.0f},\r
+ {42.8571f,0.0f},\r
+ {28.5714f,4.7619f},\r
+ {23.8095f,9.5238f},\r
+ {19.0476f,19.0476f},\r
+ {19.0476f,33.3333f},\r
+ {23.8095f,42.8571f},\r
+ {33.3333f,52.381f},\r
+ {47.619f,57.1429f},\r
+ {66.6666f,61.9048f},\r
+ {76.1905f,66.6667f},\r
+ {80.9524f,76.1905f},\r
+ {80.9524f,85.7143f},\r
+ {76.1905f,95.2381f},\r
+ {61.9047f,100.0f},\r
+ {42.8571f,100.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch56st[] =\r
+{\r
+ {29,ch56st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch56 = {104.762f,1,ch56st};\r
+\r
+/* char: 0x39 */\r
+\r
+static const SFG_StrokeVertex ch57st0[] =\r
+{\r
+ {83.3334f,66.6667f},\r
+ {78.5714f,52.381f},\r
+ {69.0476f,42.8571f},\r
+ {54.7619f,38.0952f},\r
+ {50.0f,38.0952f},\r
+ {35.7143f,42.8571f},\r
+ {26.1905f,52.381f},\r
+ {21.4286f,66.6667f},\r
+ {21.4286f,71.4286f},\r
+ {26.1905f,85.7143f},\r
+ {35.7143f,95.2381f},\r
+ {50.0f,100.0f},\r
+ {54.7619f,100.0f},\r
+ {69.0476f,95.2381f},\r
+ {78.5714f,85.7143f},\r
+ {83.3334f,66.6667f},\r
+ {83.3334f,42.8571f},\r
+ {78.5714f,19.0476f},\r
+ {69.0476f,4.7619f},\r
+ {54.7619f,0.0f},\r
+ {45.2381f,0.0f},\r
+ {30.9524f,4.7619f},\r
+ {26.1905f,14.2857f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch57st[] =\r
+{\r
+ {23,ch57st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch57 = {104.762f,1,ch57st};\r
+\r
+/* char: 0x3a */\r
+\r
+static const SFG_StrokeVertex ch58st0[] =\r
+{\r
+ {52.381f,66.6667f},\r
+ {47.6191f,61.9048f},\r
+ {52.381f,57.1429f},\r
+ {57.1429f,61.9048f},\r
+ {52.381f,66.6667f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch58st1[] =\r
+{\r
+ {52.381f,9.5238f},\r
+ {47.6191f,4.7619f},\r
+ {52.381f,0.0f},\r
+ {57.1429f,4.7619f},\r
+ {52.381f,9.5238f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch58st[] =\r
+{\r
+ {5,ch58st0},\r
+ {5,ch58st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch58 = {104.762f,2,ch58st};\r
+\r
+/* char: 0x3b */\r
+\r
+static const SFG_StrokeVertex ch59st0[] =\r
+{\r
+ {52.381f,66.6667f},\r
+ {47.6191f,61.9048f},\r
+ {52.381f,57.1429f},\r
+ {57.1429f,61.9048f},\r
+ {52.381f,66.6667f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch59st1[] =\r
+{\r
+ {57.1429f,4.7619f},\r
+ {52.381f,0.0f},\r
+ {47.6191f,4.7619f},\r
+ {52.381f,9.5238f},\r
+ {57.1429f,4.7619f},\r
+ {57.1429f,-4.7619f},\r
+ {52.381f,-14.2857f},\r
+ {47.6191f,-19.0476f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch59st[] =\r
+{\r
+ {5,ch59st0},\r
+ {8,ch59st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch59 = {104.762f,2,ch59st};\r
+\r
+/* char: 0x3c */\r
+\r
+static const SFG_StrokeVertex ch60st0[] =\r
+{\r
+ {90.4762f,85.7143f},\r
+ {14.2857f,42.8571f},\r
+ {90.4762f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch60st[] =\r
+{\r
+ {3,ch60st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch60 = {104.762f,1,ch60st};\r
+\r
+/* char: 0x3d */\r
+\r
+static const SFG_StrokeVertex ch61st0[] =\r
+{\r
+ {9.5238f,57.1429f},\r
+ {95.2381f,57.1429f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch61st1[] =\r
+{\r
+ {9.5238f,28.5714f},\r
+ {95.2381f,28.5714f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch61st[] =\r
+{\r
+ {2,ch61st0},\r
+ {2,ch61st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch61 = {104.762f,2,ch61st};\r
+\r
+/* char: 0x3e */\r
+\r
+static const SFG_StrokeVertex ch62st0[] =\r
+{\r
+ {14.2857f,85.7143f},\r
+ {90.4762f,42.8571f},\r
+ {14.2857f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch62st[] =\r
+{\r
+ {3,ch62st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch62 = {104.762f,1,ch62st};\r
+\r
+/* char: 0x3f */\r
+\r
+static const SFG_StrokeVertex ch63st0[] =\r
+{\r
+ {23.8095f,76.1905f},\r
+ {23.8095f,80.9524f},\r
+ {28.5714f,90.4762f},\r
+ {33.3333f,95.2381f},\r
+ {42.8571f,100.0f},\r
+ {61.9047f,100.0f},\r
+ {71.4285f,95.2381f},\r
+ {76.1905f,90.4762f},\r
+ {80.9524f,80.9524f},\r
+ {80.9524f,71.4286f},\r
+ {76.1905f,61.9048f},\r
+ {71.4285f,57.1429f},\r
+ {52.3809f,47.619f},\r
+ {52.3809f,33.3333f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch63st1[] =\r
+{\r
+ {52.3809f,9.5238f},\r
+ {47.619f,4.7619f},\r
+ {52.3809f,0.0f},\r
+ {57.1428f,4.7619f},\r
+ {52.3809f,9.5238f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch63st[] =\r
+{\r
+ {14,ch63st0},\r
+ {5,ch63st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch63 = {104.762f,2,ch63st};\r
+\r
+/* char: 0x40 */\r
+\r
+static const SFG_StrokeVertex ch64st0[] =\r
+{\r
+ {64.2857f,52.381f},\r
+ {54.7619f,57.1429f},\r
+ {45.2381f,57.1429f},\r
+ {40.4762f,47.619f},\r
+ {40.4762f,42.8571f},\r
+ {45.2381f,33.3333f},\r
+ {54.7619f,33.3333f},\r
+ {64.2857f,38.0952f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch64st1[] =\r
+{\r
+ {64.2857f,57.1429f},\r
+ {64.2857f,38.0952f},\r
+ {69.0476f,33.3333f},\r
+ {78.5714f,33.3333f},\r
+ {83.3334f,42.8571f},\r
+ {83.3334f,47.619f},\r
+ {78.5714f,61.9048f},\r
+ {69.0476f,71.4286f},\r
+ {54.7619f,76.1905f},\r
+ {50.0f,76.1905f},\r
+ {35.7143f,71.4286f},\r
+ {26.1905f,61.9048f},\r
+ {21.4286f,47.619f},\r
+ {21.4286f,42.8571f},\r
+ {26.1905f,28.5714f},\r
+ {35.7143f,19.0476f},\r
+ {50.0f,14.2857f},\r
+ {54.7619f,14.2857f},\r
+ {69.0476f,19.0476f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch64st[] =\r
+{\r
+ {8,ch64st0},\r
+ {19,ch64st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch64 = {104.762f,2,ch64st};\r
+\r
+/* char: 0x41 */\r
+\r
+static const SFG_StrokeVertex ch65st0[] =\r
+{\r
+ {52.3809f,100.0f},\r
+ {14.2857f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch65st1[] =\r
+{\r
+ {52.3809f,100.0f},\r
+ {90.4762f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch65st2[] =\r
+{\r
+ {28.5714f,33.3333f},\r
+ {76.1905f,33.3333f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch65st[] =\r
+{\r
+ {2,ch65st0},\r
+ {2,ch65st1},\r
+ {2,ch65st2}\r
+};\r
+\r
+static const SFG_StrokeChar ch65 = {104.762f,3,ch65st};\r
+\r
+/* char: 0x42 */\r
+\r
+static const SFG_StrokeVertex ch66st0[] =\r
+{\r
+ {19.0476f,100.0f},\r
+ {19.0476f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch66st1[] =\r
+{\r
+ {19.0476f,100.0f},\r
+ {61.9047f,100.0f},\r
+ {76.1905f,95.2381f},\r
+ {80.9524f,90.4762f},\r
+ {85.7143f,80.9524f},\r
+ {85.7143f,71.4286f},\r
+ {80.9524f,61.9048f},\r
+ {76.1905f,57.1429f},\r
+ {61.9047f,52.381f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch66st2[] =\r
+{\r
+ {19.0476f,52.381f},\r
+ {61.9047f,52.381f},\r
+ {76.1905f,47.619f},\r
+ {80.9524f,42.8571f},\r
+ {85.7143f,33.3333f},\r
+ {85.7143f,19.0476f},\r
+ {80.9524f,9.5238f},\r
+ {76.1905f,4.7619f},\r
+ {61.9047f,0.0f},\r
+ {19.0476f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch66st[] =\r
+{\r
+ {2,ch66st0},\r
+ {9,ch66st1},\r
+ {10,ch66st2}\r
+};\r
+\r
+static const SFG_StrokeChar ch66 = {104.762f,3,ch66st};\r
+\r
+/* char: 0x43 */\r
+\r
+static const SFG_StrokeVertex ch67st0[] =\r
+{\r
+ {88.0952f,76.1905f},\r
+ {83.3334f,85.7143f},\r
+ {73.8096f,95.2381f},\r
+ {64.2857f,100.0f},\r
+ {45.2381f,100.0f},\r
+ {35.7143f,95.2381f},\r
+ {26.1905f,85.7143f},\r
+ {21.4286f,76.1905f},\r
+ {16.6667f,61.9048f},\r
+ {16.6667f,38.0952f},\r
+ {21.4286f,23.8095f},\r
+ {26.1905f,14.2857f},\r
+ {35.7143f,4.7619f},\r
+ {45.2381f,0.0f},\r
+ {64.2857f,0.0f},\r
+ {73.8096f,4.7619f},\r
+ {83.3334f,14.2857f},\r
+ {88.0952f,23.8095f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch67st[] =\r
+{\r
+ {18,ch67st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch67 = {104.762f,1,ch67st};\r
+\r
+/* char: 0x44 */\r
+\r
+static const SFG_StrokeVertex ch68st0[] =\r
+{\r
+ {19.0476f,100.0f},\r
+ {19.0476f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch68st1[] =\r
+{\r
+ {19.0476f,100.0f},\r
+ {52.3809f,100.0f},\r
+ {66.6666f,95.2381f},\r
+ {76.1905f,85.7143f},\r
+ {80.9524f,76.1905f},\r
+ {85.7143f,61.9048f},\r
+ {85.7143f,38.0952f},\r
+ {80.9524f,23.8095f},\r
+ {76.1905f,14.2857f},\r
+ {66.6666f,4.7619f},\r
+ {52.3809f,0.0f},\r
+ {19.0476f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch68st[] =\r
+{\r
+ {2,ch68st0},\r
+ {12,ch68st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch68 = {104.762f,2,ch68st};\r
+\r
+/* char: 0x45 */\r
+\r
+static const SFG_StrokeVertex ch69st0[] =\r
+{\r
+ {21.4286f,100.0f},\r
+ {21.4286f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch69st1[] =\r
+{\r
+ {21.4286f,100.0f},\r
+ {83.3334f,100.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch69st2[] =\r
+{\r
+ {21.4286f,52.381f},\r
+ {59.5238f,52.381f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch69st3[] =\r
+{\r
+ {21.4286f,0.0f},\r
+ {83.3334f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch69st[] =\r
+{\r
+ {2,ch69st0},\r
+ {2,ch69st1},\r
+ {2,ch69st2},\r
+ {2,ch69st3}\r
+};\r
+\r
+static const SFG_StrokeChar ch69 = {104.762f,4,ch69st};\r
+\r
+/* char: 0x46 */\r
+\r
+static const SFG_StrokeVertex ch70st0[] =\r
+{\r
+ {21.4286f,100.0f},\r
+ {21.4286f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch70st1[] =\r
+{\r
+ {21.4286f,100.0f},\r
+ {83.3334f,100.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch70st2[] =\r
+{\r
+ {21.4286f,52.381f},\r
+ {59.5238f,52.381f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch70st[] =\r
+{\r
+ {2,ch70st0},\r
+ {2,ch70st1},\r
+ {2,ch70st2}\r
+};\r
+\r
+static const SFG_StrokeChar ch70 = {104.762f,3,ch70st};\r
+\r
+/* char: 0x47 */\r
+\r
+static const SFG_StrokeVertex ch71st0[] =\r
+{\r
+ {88.0952f,76.1905f},\r
+ {83.3334f,85.7143f},\r
+ {73.8096f,95.2381f},\r
+ {64.2857f,100.0f},\r
+ {45.2381f,100.0f},\r
+ {35.7143f,95.2381f},\r
+ {26.1905f,85.7143f},\r
+ {21.4286f,76.1905f},\r
+ {16.6667f,61.9048f},\r
+ {16.6667f,38.0952f},\r
+ {21.4286f,23.8095f},\r
+ {26.1905f,14.2857f},\r
+ {35.7143f,4.7619f},\r
+ {45.2381f,0.0f},\r
+ {64.2857f,0.0f},\r
+ {73.8096f,4.7619f},\r
+ {83.3334f,14.2857f},\r
+ {88.0952f,23.8095f},\r
+ {88.0952f,38.0952f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch71st1[] =\r
+{\r
+ {64.2857f,38.0952f},\r
+ {88.0952f,38.0952f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch71st[] =\r
+{\r
+ {19,ch71st0},\r
+ {2,ch71st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch71 = {104.762f,2,ch71st};\r
+\r
+/* char: 0x48 */\r
+\r
+static const SFG_StrokeVertex ch72st0[] =\r
+{\r
+ {19.0476f,100.0f},\r
+ {19.0476f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch72st1[] =\r
+{\r
+ {85.7143f,100.0f},\r
+ {85.7143f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch72st2[] =\r
+{\r
+ {19.0476f,52.381f},\r
+ {85.7143f,52.381f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch72st[] =\r
+{\r
+ {2,ch72st0},\r
+ {2,ch72st1},\r
+ {2,ch72st2}\r
+};\r
+\r
+static const SFG_StrokeChar ch72 = {104.762f,3,ch72st};\r
+\r
+/* char: 0x49 */\r
+\r
+static const SFG_StrokeVertex ch73st0[] =\r
+{\r
+ {52.381f,100.0f},\r
+ {52.381f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch73st[] =\r
+{\r
+ {2,ch73st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch73 = {104.762f,1,ch73st};\r
+\r
+/* char: 0x4a */\r
+\r
+static const SFG_StrokeVertex ch74st0[] =\r
+{\r
+ {76.1905f,100.0f},\r
+ {76.1905f,23.8095f},\r
+ {71.4286f,9.5238f},\r
+ {66.6667f,4.7619f},\r
+ {57.1429f,0.0f},\r
+ {47.6191f,0.0f},\r
+ {38.0953f,4.7619f},\r
+ {33.3334f,9.5238f},\r
+ {28.5715f,23.8095f},\r
+ {28.5715f,33.3333f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch74st[] =\r
+{\r
+ {10,ch74st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch74 = {104.762f,1,ch74st};\r
+\r
+/* char: 0x4b */\r
+\r
+static const SFG_StrokeVertex ch75st0[] =\r
+{\r
+ {19.0476f,100.0f},\r
+ {19.0476f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch75st1[] =\r
+{\r
+ {85.7143f,100.0f},\r
+ {19.0476f,33.3333f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch75st2[] =\r
+{\r
+ {42.8571f,57.1429f},\r
+ {85.7143f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch75st[] =\r
+{\r
+ {2,ch75st0},\r
+ {2,ch75st1},\r
+ {2,ch75st2}\r
+};\r
+\r
+static const SFG_StrokeChar ch75 = {104.762f,3,ch75st};\r
+\r
+/* char: 0x4c */\r
+\r
+static const SFG_StrokeVertex ch76st0[] =\r
+{\r
+ {23.8095f,100.0f},\r
+ {23.8095f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch76st1[] =\r
+{\r
+ {23.8095f,0.0f},\r
+ {80.9524f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch76st[] =\r
+{\r
+ {2,ch76st0},\r
+ {2,ch76st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch76 = {104.762f,2,ch76st};\r
+\r
+/* char: 0x4d */\r
+\r
+static const SFG_StrokeVertex ch77st0[] =\r
+{\r
+ {14.2857f,100.0f},\r
+ {14.2857f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch77st1[] =\r
+{\r
+ {14.2857f,100.0f},\r
+ {52.3809f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch77st2[] =\r
+{\r
+ {90.4762f,100.0f},\r
+ {52.3809f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch77st3[] =\r
+{\r
+ {90.4762f,100.0f},\r
+ {90.4762f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch77st[] =\r
+{\r
+ {2,ch77st0},\r
+ {2,ch77st1},\r
+ {2,ch77st2},\r
+ {2,ch77st3}\r
+};\r
+\r
+static const SFG_StrokeChar ch77 = {104.762f,4,ch77st};\r
+\r
+/* char: 0x4e */\r
+\r
+static const SFG_StrokeVertex ch78st0[] =\r
+{\r
+ {19.0476f,100.0f},\r
+ {19.0476f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch78st1[] =\r
+{\r
+ {19.0476f,100.0f},\r
+ {85.7143f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch78st2[] =\r
+{\r
+ {85.7143f,100.0f},\r
+ {85.7143f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch78st[] =\r
+{\r
+ {2,ch78st0},\r
+ {2,ch78st1},\r
+ {2,ch78st2}\r
+};\r
+\r
+static const SFG_StrokeChar ch78 = {104.762f,3,ch78st};\r
+\r
+/* char: 0x4f */\r
+\r
+static const SFG_StrokeVertex ch79st0[] =\r
+{\r
+ {42.8571f,100.0f},\r
+ {33.3333f,95.2381f},\r
+ {23.8095f,85.7143f},\r
+ {19.0476f,76.1905f},\r
+ {14.2857f,61.9048f},\r
+ {14.2857f,38.0952f},\r
+ {19.0476f,23.8095f},\r
+ {23.8095f,14.2857f},\r
+ {33.3333f,4.7619f},\r
+ {42.8571f,0.0f},\r
+ {61.9047f,0.0f},\r
+ {71.4286f,4.7619f},\r
+ {80.9524f,14.2857f},\r
+ {85.7143f,23.8095f},\r
+ {90.4762f,38.0952f},\r
+ {90.4762f,61.9048f},\r
+ {85.7143f,76.1905f},\r
+ {80.9524f,85.7143f},\r
+ {71.4286f,95.2381f},\r
+ {61.9047f,100.0f},\r
+ {42.8571f,100.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch79st[] =\r
+{\r
+ {21,ch79st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch79 = {104.762f,1,ch79st};\r
+\r
+/* char: 0x50 */\r
+\r
+static const SFG_StrokeVertex ch80st0[] =\r
+{\r
+ {19.0476f,100.0f},\r
+ {19.0476f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch80st1[] =\r
+{\r
+ {19.0476f,100.0f},\r
+ {61.9047f,100.0f},\r
+ {76.1905f,95.2381f},\r
+ {80.9524f,90.4762f},\r
+ {85.7143f,80.9524f},\r
+ {85.7143f,66.6667f},\r
+ {80.9524f,57.1429f},\r
+ {76.1905f,52.381f},\r
+ {61.9047f,47.619f},\r
+ {19.0476f,47.619f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch80st[] =\r
+{\r
+ {2,ch80st0},\r
+ {10,ch80st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch80 = {104.762f,2,ch80st};\r
+\r
+/* char: 0x51 */\r
+\r
+static const SFG_StrokeVertex ch81st0[] =\r
+{\r
+ {42.8571f,100.0f},\r
+ {33.3333f,95.2381f},\r
+ {23.8095f,85.7143f},\r
+ {19.0476f,76.1905f},\r
+ {14.2857f,61.9048f},\r
+ {14.2857f,38.0952f},\r
+ {19.0476f,23.8095f},\r
+ {23.8095f,14.2857f},\r
+ {33.3333f,4.7619f},\r
+ {42.8571f,0.0f},\r
+ {61.9047f,0.0f},\r
+ {71.4286f,4.7619f},\r
+ {80.9524f,14.2857f},\r
+ {85.7143f,23.8095f},\r
+ {90.4762f,38.0952f},\r
+ {90.4762f,61.9048f},\r
+ {85.7143f,76.1905f},\r
+ {80.9524f,85.7143f},\r
+ {71.4286f,95.2381f},\r
+ {61.9047f,100.0f},\r
+ {42.8571f,100.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch81st1[] =\r
+{\r
+ {57.1428f,19.0476f},\r
+ {85.7143f,-9.5238f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch81st[] =\r
+{\r
+ {21,ch81st0},\r
+ {2,ch81st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch81 = {104.762f,2,ch81st};\r
+\r
+/* char: 0x52 */\r
+\r
+static const SFG_StrokeVertex ch82st0[] =\r
+{\r
+ {19.0476f,100.0f},\r
+ {19.0476f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch82st1[] =\r
+{\r
+ {19.0476f,100.0f},\r
+ {61.9047f,100.0f},\r
+ {76.1905f,95.2381f},\r
+ {80.9524f,90.4762f},\r
+ {85.7143f,80.9524f},\r
+ {85.7143f,71.4286f},\r
+ {80.9524f,61.9048f},\r
+ {76.1905f,57.1429f},\r
+ {61.9047f,52.381f},\r
+ {19.0476f,52.381f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch82st2[] =\r
+{\r
+ {52.3809f,52.381f},\r
+ {85.7143f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch82st[] =\r
+{\r
+ {2,ch82st0},\r
+ {10,ch82st1},\r
+ {2,ch82st2}\r
+};\r
+\r
+static const SFG_StrokeChar ch82 = {104.762f,3,ch82st};\r
+\r
+/* char: 0x53 */\r
+\r
+static const SFG_StrokeVertex ch83st0[] =\r
+{\r
+ {85.7143f,85.7143f},\r
+ {76.1905f,95.2381f},\r
+ {61.9047f,100.0f},\r
+ {42.8571f,100.0f},\r
+ {28.5714f,95.2381f},\r
+ {19.0476f,85.7143f},\r
+ {19.0476f,76.1905f},\r
+ {23.8095f,66.6667f},\r
+ {28.5714f,61.9048f},\r
+ {38.0952f,57.1429f},\r
+ {66.6666f,47.619f},\r
+ {76.1905f,42.8571f},\r
+ {80.9524f,38.0952f},\r
+ {85.7143f,28.5714f},\r
+ {85.7143f,14.2857f},\r
+ {76.1905f,4.7619f},\r
+ {61.9047f,0.0f},\r
+ {42.8571f,0.0f},\r
+ {28.5714f,4.7619f},\r
+ {19.0476f,14.2857f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch83st[] =\r
+{\r
+ {20,ch83st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch83 = {104.762f,1,ch83st};\r
+\r
+/* char: 0x54 */\r
+\r
+static const SFG_StrokeVertex ch84st0[] =\r
+{\r
+ {52.3809f,100.0f},\r
+ {52.3809f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch84st1[] =\r
+{\r
+ {19.0476f,100.0f},\r
+ {85.7143f,100.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch84st[] =\r
+{\r
+ {2,ch84st0},\r
+ {2,ch84st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch84 = {104.762f,2,ch84st};\r
+\r
+/* char: 0x55 */\r
+\r
+static const SFG_StrokeVertex ch85st0[] =\r
+{\r
+ {19.0476f,100.0f},\r
+ {19.0476f,28.5714f},\r
+ {23.8095f,14.2857f},\r
+ {33.3333f,4.7619f},\r
+ {47.619f,0.0f},\r
+ {57.1428f,0.0f},\r
+ {71.4286f,4.7619f},\r
+ {80.9524f,14.2857f},\r
+ {85.7143f,28.5714f},\r
+ {85.7143f,100.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch85st[] =\r
+{\r
+ {10,ch85st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch85 = {104.762f,1,ch85st};\r
+\r
+/* char: 0x56 */\r
+\r
+static const SFG_StrokeVertex ch86st0[] =\r
+{\r
+ {14.2857f,100.0f},\r
+ {52.3809f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch86st1[] =\r
+{\r
+ {90.4762f,100.0f},\r
+ {52.3809f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch86st[] =\r
+{\r
+ {2,ch86st0},\r
+ {2,ch86st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch86 = {104.762f,2,ch86st};\r
+\r
+/* char: 0x57 */\r
+\r
+static const SFG_StrokeVertex ch87st0[] =\r
+{\r
+ {4.7619f,100.0f},\r
+ {28.5714f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch87st1[] =\r
+{\r
+ {52.3809f,100.0f},\r
+ {28.5714f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch87st2[] =\r
+{\r
+ {52.3809f,100.0f},\r
+ {76.1905f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch87st3[] =\r
+{\r
+ {100.0f,100.0f},\r
+ {76.1905f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch87st[] =\r
+{\r
+ {2,ch87st0},\r
+ {2,ch87st1},\r
+ {2,ch87st2},\r
+ {2,ch87st3}\r
+};\r
+\r
+static const SFG_StrokeChar ch87 = {104.762f,4,ch87st};\r
+\r
+/* char: 0x58 */\r
+\r
+static const SFG_StrokeVertex ch88st0[] =\r
+{\r
+ {19.0476f,100.0f},\r
+ {85.7143f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch88st1[] =\r
+{\r
+ {85.7143f,100.0f},\r
+ {19.0476f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch88st[] =\r
+{\r
+ {2,ch88st0},\r
+ {2,ch88st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch88 = {104.762f,2,ch88st};\r
+\r
+/* char: 0x59 */\r
+\r
+static const SFG_StrokeVertex ch89st0[] =\r
+{\r
+ {14.2857f,100.0f},\r
+ {52.3809f,52.381f},\r
+ {52.3809f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch89st1[] =\r
+{\r
+ {90.4762f,100.0f},\r
+ {52.3809f,52.381f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch89st[] =\r
+{\r
+ {3,ch89st0},\r
+ {2,ch89st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch89 = {104.762f,2,ch89st};\r
+\r
+/* char: 0x5a */\r
+\r
+static const SFG_StrokeVertex ch90st0[] =\r
+{\r
+ {85.7143f,100.0f},\r
+ {19.0476f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch90st1[] =\r
+{\r
+ {19.0476f,100.0f},\r
+ {85.7143f,100.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch90st2[] =\r
+{\r
+ {19.0476f,0.0f},\r
+ {85.7143f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch90st[] =\r
+{\r
+ {2,ch90st0},\r
+ {2,ch90st1},\r
+ {2,ch90st2}\r
+};\r
+\r
+static const SFG_StrokeChar ch90 = {104.762f,3,ch90st};\r
+\r
+/* char: 0x5b */\r
+\r
+static const SFG_StrokeVertex ch91st0[] =\r
+{\r
+ {35.7143f,119.048f},\r
+ {35.7143f,-33.3333f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch91st1[] =\r
+{\r
+ {40.4762f,119.048f},\r
+ {40.4762f,-33.3333f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch91st2[] =\r
+{\r
+ {35.7143f,119.048f},\r
+ {69.0476f,119.048f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch91st3[] =\r
+{\r
+ {35.7143f,-33.3333f},\r
+ {69.0476f,-33.3333f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch91st[] =\r
+{\r
+ {2,ch91st0},\r
+ {2,ch91st1},\r
+ {2,ch91st2},\r
+ {2,ch91st3}\r
+};\r
+\r
+static const SFG_StrokeChar ch91 = {104.762f,4,ch91st};\r
+\r
+/* char: 0x5c */\r
+\r
+static const SFG_StrokeVertex ch92st0[] =\r
+{\r
+ {19.0476f,100.0f},\r
+ {85.7143f,-14.2857f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch92st[] =\r
+{\r
+ {2,ch92st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch92 = {104.762f,1,ch92st};\r
+\r
+/* char: 0x5d */\r
+\r
+static const SFG_StrokeVertex ch93st0[] =\r
+{\r
+ {64.2857f,119.048f},\r
+ {64.2857f,-33.3333f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch93st1[] =\r
+{\r
+ {69.0476f,119.048f},\r
+ {69.0476f,-33.3333f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch93st2[] =\r
+{\r
+ {35.7143f,119.048f},\r
+ {69.0476f,119.048f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch93st3[] =\r
+{\r
+ {35.7143f,-33.3333f},\r
+ {69.0476f,-33.3333f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch93st[] =\r
+{\r
+ {2,ch93st0},\r
+ {2,ch93st1},\r
+ {2,ch93st2},\r
+ {2,ch93st3}\r
+};\r
+\r
+static const SFG_StrokeChar ch93 = {104.762f,4,ch93st};\r
+\r
+/* char: 0x5e */\r
+\r
+static const SFG_StrokeVertex ch94st0[] =\r
+{\r
+ {52.3809f,109.524f},\r
+ {14.2857f,42.8571f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch94st1[] =\r
+{\r
+ {52.3809f,109.524f},\r
+ {90.4762f,42.8571f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch94st[] =\r
+{\r
+ {2,ch94st0},\r
+ {2,ch94st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch94 = {104.762f,2,ch94st};\r
+\r
+/* char: 0x5f */\r
+\r
+static const SFG_StrokeVertex ch95st0[] =\r
+{\r
+ {0,-33.3333f},\r
+ {104.762f,-33.3333f},\r
+ {104.762f,-28.5714f},\r
+ {0,-28.5714f},\r
+ {0,-33.3333f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch95st[] =\r
+{\r
+ {5,ch95st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch95 = {104.762f,1,ch95st};\r
+\r
+/* char: 0x60 */\r
+\r
+static const SFG_StrokeVertex ch96st0[] =\r
+{\r
+ {42.8572f,100.0f},\r
+ {66.6667f,71.4286f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch96st1[] =\r
+{\r
+ {42.8572f,100.0f},\r
+ {38.0953f,95.2381f},\r
+ {66.6667f,71.4286f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch96st[] =\r
+{\r
+ {2,ch96st0},\r
+ {3,ch96st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch96 = {104.762f,2,ch96st};\r
+\r
+/* char: 0x61 */\r
+\r
+static const SFG_StrokeVertex ch97st0[] =\r
+{\r
+ {80.9524f,66.6667f},\r
+ {80.9524f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch97st1[] =\r
+{\r
+ {80.9524f,52.381f},\r
+ {71.4285f,61.9048f},\r
+ {61.9047f,66.6667f},\r
+ {47.619f,66.6667f},\r
+ {38.0952f,61.9048f},\r
+ {28.5714f,52.381f},\r
+ {23.8095f,38.0952f},\r
+ {23.8095f,28.5714f},\r
+ {28.5714f,14.2857f},\r
+ {38.0952f,4.7619f},\r
+ {47.619f,0.0f},\r
+ {61.9047f,0.0f},\r
+ {71.4285f,4.7619f},\r
+ {80.9524f,14.2857f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch97st[] =\r
+{\r
+ {2,ch97st0},\r
+ {14,ch97st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch97 = {104.762f,2,ch97st};\r
+\r
+/* char: 0x62 */\r
+\r
+static const SFG_StrokeVertex ch98st0[] =\r
+{\r
+ {23.8095f,100.0f},\r
+ {23.8095f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch98st1[] =\r
+{\r
+ {23.8095f,52.381f},\r
+ {33.3333f,61.9048f},\r
+ {42.8571f,66.6667f},\r
+ {57.1428f,66.6667f},\r
+ {66.6666f,61.9048f},\r
+ {76.1905f,52.381f},\r
+ {80.9524f,38.0952f},\r
+ {80.9524f,28.5714f},\r
+ {76.1905f,14.2857f},\r
+ {66.6666f,4.7619f},\r
+ {57.1428f,0.0f},\r
+ {42.8571f,0.0f},\r
+ {33.3333f,4.7619f},\r
+ {23.8095f,14.2857f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch98st[] =\r
+{\r
+ {2,ch98st0},\r
+ {14,ch98st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch98 = {104.762f,2,ch98st};\r
+\r
+/* char: 0x63 */\r
+\r
+static const SFG_StrokeVertex ch99st0[] =\r
+{\r
+ {80.9524f,52.381f},\r
+ {71.4285f,61.9048f},\r
+ {61.9047f,66.6667f},\r
+ {47.619f,66.6667f},\r
+ {38.0952f,61.9048f},\r
+ {28.5714f,52.381f},\r
+ {23.8095f,38.0952f},\r
+ {23.8095f,28.5714f},\r
+ {28.5714f,14.2857f},\r
+ {38.0952f,4.7619f},\r
+ {47.619f,0.0f},\r
+ {61.9047f,0.0f},\r
+ {71.4285f,4.7619f},\r
+ {80.9524f,14.2857f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch99st[] =\r
+{\r
+ {14,ch99st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch99 = {104.762f,1,ch99st};\r
+\r
+/* char: 0x64 */\r
+\r
+static const SFG_StrokeVertex ch100st0[] =\r
+{\r
+ {80.9524f,100.0f},\r
+ {80.9524f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch100st1[] =\r
+{\r
+ {80.9524f,52.381f},\r
+ {71.4285f,61.9048f},\r
+ {61.9047f,66.6667f},\r
+ {47.619f,66.6667f},\r
+ {38.0952f,61.9048f},\r
+ {28.5714f,52.381f},\r
+ {23.8095f,38.0952f},\r
+ {23.8095f,28.5714f},\r
+ {28.5714f,14.2857f},\r
+ {38.0952f,4.7619f},\r
+ {47.619f,0.0f},\r
+ {61.9047f,0.0f},\r
+ {71.4285f,4.7619f},\r
+ {80.9524f,14.2857f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch100st[] =\r
+{\r
+ {2,ch100st0},\r
+ {14,ch100st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch100 = {104.762f,2,ch100st};\r
+\r
+/* char: 0x65 */\r
+\r
+static const SFG_StrokeVertex ch101st0[] =\r
+{\r
+ {23.8095f,38.0952f},\r
+ {80.9524f,38.0952f},\r
+ {80.9524f,47.619f},\r
+ {76.1905f,57.1429f},\r
+ {71.4285f,61.9048f},\r
+ {61.9047f,66.6667f},\r
+ {47.619f,66.6667f},\r
+ {38.0952f,61.9048f},\r
+ {28.5714f,52.381f},\r
+ {23.8095f,38.0952f},\r
+ {23.8095f,28.5714f},\r
+ {28.5714f,14.2857f},\r
+ {38.0952f,4.7619f},\r
+ {47.619f,0.0f},\r
+ {61.9047f,0.0f},\r
+ {71.4285f,4.7619f},\r
+ {80.9524f,14.2857f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch101st[] =\r
+{\r
+ {17,ch101st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch101 = {104.762f,1,ch101st};\r
+\r
+/* char: 0x66 */\r
+\r
+static const SFG_StrokeVertex ch102st0[] =\r
+{\r
+ {71.4286f,100.0f},\r
+ {61.9048f,100.0f},\r
+ {52.381f,95.2381f},\r
+ {47.6191f,80.9524f},\r
+ {47.6191f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch102st1[] =\r
+{\r
+ {33.3334f,66.6667f},\r
+ {66.6667f,66.6667f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch102st[] =\r
+{\r
+ {5,ch102st0},\r
+ {2,ch102st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch102 = {104.762f,2,ch102st};\r
+\r
+/* char: 0x67 */\r
+\r
+static const SFG_StrokeVertex ch103st0[] =\r
+{\r
+ {80.9524f,66.6667f},\r
+ {80.9524f,-9.5238f},\r
+ {76.1905f,-23.8095f},\r
+ {71.4285f,-28.5714f},\r
+ {61.9047f,-33.3333f},\r
+ {47.619f,-33.3333f},\r
+ {38.0952f,-28.5714f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch103st1[] =\r
+{\r
+ {80.9524f,52.381f},\r
+ {71.4285f,61.9048f},\r
+ {61.9047f,66.6667f},\r
+ {47.619f,66.6667f},\r
+ {38.0952f,61.9048f},\r
+ {28.5714f,52.381f},\r
+ {23.8095f,38.0952f},\r
+ {23.8095f,28.5714f},\r
+ {28.5714f,14.2857f},\r
+ {38.0952f,4.7619f},\r
+ {47.619f,0.0f},\r
+ {61.9047f,0.0f},\r
+ {71.4285f,4.7619f},\r
+ {80.9524f,14.2857f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch103st[] =\r
+{\r
+ {7,ch103st0},\r
+ {14,ch103st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch103 = {104.762f,2,ch103st};\r
+\r
+/* char: 0x68 */\r
+\r
+static const SFG_StrokeVertex ch104st0[] =\r
+{\r
+ {26.1905f,100.0f},\r
+ {26.1905f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch104st1[] =\r
+{\r
+ {26.1905f,47.619f},\r
+ {40.4762f,61.9048f},\r
+ {50.0f,66.6667f},\r
+ {64.2857f,66.6667f},\r
+ {73.8095f,61.9048f},\r
+ {78.5715f,47.619f},\r
+ {78.5715f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch104st[] =\r
+{\r
+ {2,ch104st0},\r
+ {7,ch104st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch104 = {104.762f,2,ch104st};\r
+\r
+/* char: 0x69 */\r
+\r
+static const SFG_StrokeVertex ch105st0[] =\r
+{\r
+ {47.6191f,100.0f},\r
+ {52.381f,95.2381f},\r
+ {57.1429f,100.0f},\r
+ {52.381f,104.762f},\r
+ {47.6191f,100.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch105st1[] =\r
+{\r
+ {52.381f,66.6667f},\r
+ {52.381f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch105st[] =\r
+{\r
+ {5,ch105st0},\r
+ {2,ch105st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch105 = {104.762f,2,ch105st};\r
+\r
+/* char: 0x6a */\r
+\r
+static const SFG_StrokeVertex ch106st0[] =\r
+{\r
+ {57.1429f,100.0f},\r
+ {61.9048f,95.2381f},\r
+ {66.6667f,100.0f},\r
+ {61.9048f,104.762f},\r
+ {57.1429f,100.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch106st1[] =\r
+{\r
+ {61.9048f,66.6667f},\r
+ {61.9048f,-14.2857f},\r
+ {57.1429f,-28.5714f},\r
+ {47.6191f,-33.3333f},\r
+ {38.0953f,-33.3333f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch106st[] =\r
+{\r
+ {5,ch106st0},\r
+ {5,ch106st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch106 = {104.762f,2,ch106st};\r
+\r
+/* char: 0x6b */\r
+\r
+static const SFG_StrokeVertex ch107st0[] =\r
+{\r
+ {26.1905f,100.0f},\r
+ {26.1905f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch107st1[] =\r
+{\r
+ {73.8095f,66.6667f},\r
+ {26.1905f,19.0476f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch107st2[] =\r
+{\r
+ {45.2381f,38.0952f},\r
+ {78.5715f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch107st[] =\r
+{\r
+ {2,ch107st0},\r
+ {2,ch107st1},\r
+ {2,ch107st2}\r
+};\r
+\r
+static const SFG_StrokeChar ch107 = {104.762f,3,ch107st};\r
+\r
+/* char: 0x6c */\r
+\r
+static const SFG_StrokeVertex ch108st0[] =\r
+{\r
+ {52.381f,100.0f},\r
+ {52.381f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch108st[] =\r
+{\r
+ {2,ch108st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch108 = {104.762f,1,ch108st};\r
+\r
+/* char: 0x6d */\r
+\r
+static const SFG_StrokeVertex ch109st0[] =\r
+{\r
+ {0,66.6667f},\r
+ {0,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch109st1[] =\r
+{\r
+ {0,47.619f},\r
+ {14.2857f,61.9048f},\r
+ {23.8095f,66.6667f},\r
+ {38.0952f,66.6667f},\r
+ {47.619f,61.9048f},\r
+ {52.381f,47.619f},\r
+ {52.381f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch109st2[] =\r
+{\r
+ {52.381f,47.619f},\r
+ {66.6667f,61.9048f},\r
+ {76.1905f,66.6667f},\r
+ {90.4762f,66.6667f},\r
+ {100.0f,61.9048f},\r
+ {104.762f,47.619f},\r
+ {104.762f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch109st[] =\r
+{\r
+ {2,ch109st0},\r
+ {7,ch109st1},\r
+ {7,ch109st2}\r
+};\r
+\r
+static const SFG_StrokeChar ch109 = {104.762f,3,ch109st};\r
+\r
+/* char: 0x6e */\r
+\r
+static const SFG_StrokeVertex ch110st0[] =\r
+{\r
+ {26.1905f,66.6667f},\r
+ {26.1905f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch110st1[] =\r
+{\r
+ {26.1905f,47.619f},\r
+ {40.4762f,61.9048f},\r
+ {50.0f,66.6667f},\r
+ {64.2857f,66.6667f},\r
+ {73.8095f,61.9048f},\r
+ {78.5715f,47.619f},\r
+ {78.5715f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch110st[] =\r
+{\r
+ {2,ch110st0},\r
+ {7,ch110st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch110 = {104.762f,2,ch110st};\r
+\r
+/* char: 0x6f */\r
+\r
+static const SFG_StrokeVertex ch111st0[] =\r
+{\r
+ {45.2381f,66.6667f},\r
+ {35.7143f,61.9048f},\r
+ {26.1905f,52.381f},\r
+ {21.4286f,38.0952f},\r
+ {21.4286f,28.5714f},\r
+ {26.1905f,14.2857f},\r
+ {35.7143f,4.7619f},\r
+ {45.2381f,0.0f},\r
+ {59.5238f,0.0f},\r
+ {69.0476f,4.7619f},\r
+ {78.5714f,14.2857f},\r
+ {83.3334f,28.5714f},\r
+ {83.3334f,38.0952f},\r
+ {78.5714f,52.381f},\r
+ {69.0476f,61.9048f},\r
+ {59.5238f,66.6667f},\r
+ {45.2381f,66.6667f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch111st[] =\r
+{\r
+ {17,ch111st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch111 = {104.762f,1,ch111st};\r
+\r
+/* char: 0x70 */\r
+\r
+static const SFG_StrokeVertex ch112st0[] =\r
+{\r
+ {23.8095f,66.6667f},\r
+ {23.8095f,-33.3333f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch112st1[] =\r
+{\r
+ {23.8095f,52.381f},\r
+ {33.3333f,61.9048f},\r
+ {42.8571f,66.6667f},\r
+ {57.1428f,66.6667f},\r
+ {66.6666f,61.9048f},\r
+ {76.1905f,52.381f},\r
+ {80.9524f,38.0952f},\r
+ {80.9524f,28.5714f},\r
+ {76.1905f,14.2857f},\r
+ {66.6666f,4.7619f},\r
+ {57.1428f,0.0f},\r
+ {42.8571f,0.0f},\r
+ {33.3333f,4.7619f},\r
+ {23.8095f,14.2857f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch112st[] =\r
+{\r
+ {2,ch112st0},\r
+ {14,ch112st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch112 = {104.762f,2,ch112st};\r
+\r
+/* char: 0x71 */\r
+\r
+static const SFG_StrokeVertex ch113st0[] =\r
+{\r
+ {80.9524f,66.6667f},\r
+ {80.9524f,-33.3333f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch113st1[] =\r
+{\r
+ {80.9524f,52.381f},\r
+ {71.4285f,61.9048f},\r
+ {61.9047f,66.6667f},\r
+ {47.619f,66.6667f},\r
+ {38.0952f,61.9048f},\r
+ {28.5714f,52.381f},\r
+ {23.8095f,38.0952f},\r
+ {23.8095f,28.5714f},\r
+ {28.5714f,14.2857f},\r
+ {38.0952f,4.7619f},\r
+ {47.619f,0.0f},\r
+ {61.9047f,0.0f},\r
+ {71.4285f,4.7619f},\r
+ {80.9524f,14.2857f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch113st[] =\r
+{\r
+ {2,ch113st0},\r
+ {14,ch113st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch113 = {104.762f,2,ch113st};\r
+\r
+/* char: 0x72 */\r
+\r
+static const SFG_StrokeVertex ch114st0[] =\r
+{\r
+ {33.3334f,66.6667f},\r
+ {33.3334f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch114st1[] =\r
+{\r
+ {33.3334f,38.0952f},\r
+ {38.0953f,52.381f},\r
+ {47.6191f,61.9048f},\r
+ {57.1429f,66.6667f},\r
+ {71.4286f,66.6667f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch114st[] =\r
+{\r
+ {2,ch114st0},\r
+ {5,ch114st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch114 = {104.762f,2,ch114st};\r
+\r
+/* char: 0x73 */\r
+\r
+static const SFG_StrokeVertex ch115st0[] =\r
+{\r
+ {78.5715f,52.381f},\r
+ {73.8095f,61.9048f},\r
+ {59.5238f,66.6667f},\r
+ {45.2381f,66.6667f},\r
+ {30.9524f,61.9048f},\r
+ {26.1905f,52.381f},\r
+ {30.9524f,42.8571f},\r
+ {40.4762f,38.0952f},\r
+ {64.2857f,33.3333f},\r
+ {73.8095f,28.5714f},\r
+ {78.5715f,19.0476f},\r
+ {78.5715f,14.2857f},\r
+ {73.8095f,4.7619f},\r
+ {59.5238f,0.0f},\r
+ {45.2381f,0.0f},\r
+ {30.9524f,4.7619f},\r
+ {26.1905f,14.2857f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch115st[] =\r
+{\r
+ {17,ch115st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch115 = {104.762f,1,ch115st};\r
+\r
+/* char: 0x74 */\r
+\r
+static const SFG_StrokeVertex ch116st0[] =\r
+{\r
+ {47.6191f,100.0f},\r
+ {47.6191f,19.0476f},\r
+ {52.381f,4.7619f},\r
+ {61.9048f,0.0f},\r
+ {71.4286f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch116st1[] =\r
+{\r
+ {33.3334f,66.6667f},\r
+ {66.6667f,66.6667f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch116st[] =\r
+{\r
+ {5,ch116st0},\r
+ {2,ch116st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch116 = {104.762f,2,ch116st};\r
+\r
+/* char: 0x75 */\r
+\r
+static const SFG_StrokeVertex ch117st0[] =\r
+{\r
+ {26.1905f,66.6667f},\r
+ {26.1905f,19.0476f},\r
+ {30.9524f,4.7619f},\r
+ {40.4762f,0.0f},\r
+ {54.7619f,0.0f},\r
+ {64.2857f,4.7619f},\r
+ {78.5715f,19.0476f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch117st1[] =\r
+{\r
+ {78.5715f,66.6667f},\r
+ {78.5715f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch117st[] =\r
+{\r
+ {7,ch117st0},\r
+ {2,ch117st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch117 = {104.762f,2,ch117st};\r
+\r
+/* char: 0x76 */\r
+\r
+static const SFG_StrokeVertex ch118st0[] =\r
+{\r
+ {23.8095f,66.6667f},\r
+ {52.3809f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch118st1[] =\r
+{\r
+ {80.9524f,66.6667f},\r
+ {52.3809f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch118st[] =\r
+{\r
+ {2,ch118st0},\r
+ {2,ch118st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch118 = {104.762f,2,ch118st};\r
+\r
+/* char: 0x77 */\r
+\r
+static const SFG_StrokeVertex ch119st0[] =\r
+{\r
+ {14.2857f,66.6667f},\r
+ {33.3333f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch119st1[] =\r
+{\r
+ {52.3809f,66.6667f},\r
+ {33.3333f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch119st2[] =\r
+{\r
+ {52.3809f,66.6667f},\r
+ {71.4286f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch119st3[] =\r
+{\r
+ {90.4762f,66.6667f},\r
+ {71.4286f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch119st[] =\r
+{\r
+ {2,ch119st0},\r
+ {2,ch119st1},\r
+ {2,ch119st2},\r
+ {2,ch119st3}\r
+};\r
+\r
+static const SFG_StrokeChar ch119 = {104.762f,4,ch119st};\r
+\r
+/* char: 0x78 */\r
+\r
+static const SFG_StrokeVertex ch120st0[] =\r
+{\r
+ {26.1905f,66.6667f},\r
+ {78.5715f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch120st1[] =\r
+{\r
+ {78.5715f,66.6667f},\r
+ {26.1905f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch120st[] =\r
+{\r
+ {2,ch120st0},\r
+ {2,ch120st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch120 = {104.762f,2,ch120st};\r
+\r
+/* char: 0x79 */\r
+\r
+static const SFG_StrokeVertex ch121st0[] =\r
+{\r
+ {26.1905f,66.6667f},\r
+ {54.7619f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch121st1[] =\r
+{\r
+ {83.3334f,66.6667f},\r
+ {54.7619f,0.0f},\r
+ {45.2381f,-19.0476f},\r
+ {35.7143f,-28.5714f},\r
+ {26.1905f,-33.3333f},\r
+ {21.4286f,-33.3333f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch121st[] =\r
+{\r
+ {2,ch121st0},\r
+ {6,ch121st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch121 = {104.762f,2,ch121st};\r
+\r
+/* char: 0x7a */\r
+\r
+static const SFG_StrokeVertex ch122st0[] =\r
+{\r
+ {78.5715f,66.6667f},\r
+ {26.1905f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch122st1[] =\r
+{\r
+ {26.1905f,66.6667f},\r
+ {78.5715f,66.6667f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch122st2[] =\r
+{\r
+ {26.1905f,0.0f},\r
+ {78.5715f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch122st[] =\r
+{\r
+ {2,ch122st0},\r
+ {2,ch122st1},\r
+ {2,ch122st2}\r
+};\r
+\r
+static const SFG_StrokeChar ch122 = {104.762f,3,ch122st};\r
+\r
+/* char: 0x7b */\r
+\r
+static const SFG_StrokeVertex ch123st0[] =\r
+{\r
+ {64.2857f,119.048f},\r
+ {54.7619f,114.286f},\r
+ {50.0f,109.524f},\r
+ {45.2381f,100.0f},\r
+ {45.2381f,90.4762f},\r
+ {50.0f,80.9524f},\r
+ {54.7619f,76.1905f},\r
+ {59.5238f,66.6667f},\r
+ {59.5238f,57.1429f},\r
+ {50.0f,47.619f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch123st1[] =\r
+{\r
+ {54.7619f,114.286f},\r
+ {50.0f,104.762f},\r
+ {50.0f,95.2381f},\r
+ {54.7619f,85.7143f},\r
+ {59.5238f,80.9524f},\r
+ {64.2857f,71.4286f},\r
+ {64.2857f,61.9048f},\r
+ {59.5238f,52.381f},\r
+ {40.4762f,42.8571f},\r
+ {59.5238f,33.3333f},\r
+ {64.2857f,23.8095f},\r
+ {64.2857f,14.2857f},\r
+ {59.5238f,4.7619f},\r
+ {54.7619f,0.0f},\r
+ {50.0f,-9.5238f},\r
+ {50.0f,-19.0476f},\r
+ {54.7619f,-28.5714f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch123st2[] =\r
+{\r
+ {50.0f,38.0952f},\r
+ {59.5238f,28.5714f},\r
+ {59.5238f,19.0476f},\r
+ {54.7619f,9.5238f},\r
+ {50.0f,4.7619f},\r
+ {45.2381f,-4.7619f},\r
+ {45.2381f,-14.2857f},\r
+ {50.0f,-23.8095f},\r
+ {54.7619f,-28.5714f},\r
+ {64.2857f,-33.3333f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch123st[] =\r
+{\r
+ {10,ch123st0},\r
+ {17,ch123st1},\r
+ {10,ch123st2}\r
+};\r
+\r
+static const SFG_StrokeChar ch123 = {104.762f,3,ch123st};\r
+\r
+/* char: 0x7c */\r
+\r
+static const SFG_StrokeVertex ch124st0[] =\r
+{\r
+ {52.381f,119.048f},\r
+ {52.381f,-33.3333f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch124st[] =\r
+{\r
+ {2,ch124st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch124 = {104.762f,1,ch124st};\r
+\r
+/* char: 0x7d */\r
+\r
+static const SFG_StrokeVertex ch125st0[] =\r
+{\r
+ {40.4762f,119.048f},\r
+ {50.0f,114.286f},\r
+ {54.7619f,109.524f},\r
+ {59.5238f,100.0f},\r
+ {59.5238f,90.4762f},\r
+ {54.7619f,80.9524f},\r
+ {50.0f,76.1905f},\r
+ {45.2381f,66.6667f},\r
+ {45.2381f,57.1429f},\r
+ {54.7619f,47.619f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch125st1[] =\r
+{\r
+ {50.0f,114.286f},\r
+ {54.7619f,104.762f},\r
+ {54.7619f,95.2381f},\r
+ {50.0f,85.7143f},\r
+ {45.2381f,80.9524f},\r
+ {40.4762f,71.4286f},\r
+ {40.4762f,61.9048f},\r
+ {45.2381f,52.381f},\r
+ {64.2857f,42.8571f},\r
+ {45.2381f,33.3333f},\r
+ {40.4762f,23.8095f},\r
+ {40.4762f,14.2857f},\r
+ {45.2381f,4.7619f},\r
+ {50.0f,0.0f},\r
+ {54.7619f,-9.5238f},\r
+ {54.7619f,-19.0476f},\r
+ {50.0f,-28.5714f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch125st2[] =\r
+{\r
+ {54.7619f,38.0952f},\r
+ {45.2381f,28.5714f},\r
+ {45.2381f,19.0476f},\r
+ {50.0f,9.5238f},\r
+ {54.7619f,4.7619f},\r
+ {59.5238f,-4.7619f},\r
+ {59.5238f,-14.2857f},\r
+ {54.7619f,-23.8095f},\r
+ {50.0f,-28.5714f},\r
+ {40.4762f,-33.3333f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch125st[] =\r
+{\r
+ {10,ch125st0},\r
+ {17,ch125st1},\r
+ {10,ch125st2}\r
+};\r
+\r
+static const SFG_StrokeChar ch125 = {104.762f,3,ch125st};\r
+\r
+/* char: 0x7e */\r
+\r
+static const SFG_StrokeVertex ch126st0[] =\r
+{\r
+ {9.5238f,28.5714f},\r
+ {9.5238f,38.0952f},\r
+ {14.2857f,52.381f},\r
+ {23.8095f,57.1429f},\r
+ {33.3333f,57.1429f},\r
+ {42.8571f,52.381f},\r
+ {61.9048f,38.0952f},\r
+ {71.4286f,33.3333f},\r
+ {80.9524f,33.3333f},\r
+ {90.4762f,38.0952f},\r
+ {95.2381f,47.619f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch126st1[] =\r
+{\r
+ {9.5238f,38.0952f},\r
+ {14.2857f,47.619f},\r
+ {23.8095f,52.381f},\r
+ {33.3333f,52.381f},\r
+ {42.8571f,47.619f},\r
+ {61.9048f,33.3333f},\r
+ {71.4286f,28.5714f},\r
+ {80.9524f,28.5714f},\r
+ {90.4762f,33.3333f},\r
+ {95.2381f,47.619f},\r
+ {95.2381f,57.1429f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch126st[] =\r
+{\r
+ {11,ch126st0},\r
+ {11,ch126st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch126 = {104.762f,2,ch126st};\r
+\r
+/* char: 0x7f */\r
+\r
+static const SFG_StrokeVertex ch127st0[] =\r
+{\r
+ {71.4286f,100.0f},\r
+ {33.3333f,-33.3333f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch127st1[] =\r
+{\r
+ {47.619f,66.6667f},\r
+ {33.3333f,61.9048f},\r
+ {23.8095f,52.381f},\r
+ {19.0476f,38.0952f},\r
+ {19.0476f,23.8095f},\r
+ {23.8095f,14.2857f},\r
+ {33.3333f,4.7619f},\r
+ {47.619f,0.0f},\r
+ {57.1428f,0.0f},\r
+ {71.4286f,4.7619f},\r
+ {80.9524f,14.2857f},\r
+ {85.7143f,28.5714f},\r
+ {85.7143f,42.8571f},\r
+ {80.9524f,52.381f},\r
+ {71.4286f,61.9048f},\r
+ {57.1428f,66.6667f},\r
+ {47.619f,66.6667f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch127st[] =\r
+{\r
+ {2,ch127st0},\r
+ {17,ch127st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch127 = {104.762f,2,ch127st};\r
+\r
+static const SFG_StrokeChar *chars[] =\r
+{\r
+ 0, 0, 0, 0, 0, 0, 0, 0,\r
+ 0, 0, 0, 0, 0, 0, 0, 0,\r
+ 0, 0, 0, 0, 0, 0, 0, 0,\r
+ 0, 0, 0, 0, 0, 0, 0, 0,\r
+ &ch32, &ch33, &ch34, &ch35, &ch36, &ch37, &ch38, &ch39,\r
+ &ch40, &ch41, &ch42, &ch43, &ch44, &ch45, &ch46, &ch47,\r
+ &ch48, &ch49, &ch50, &ch51, &ch52, &ch53, &ch54, &ch55,\r
+ &ch56, &ch57, &ch58, &ch59, &ch60, &ch61, &ch62, &ch63,\r
+ &ch64, &ch65, &ch66, &ch67, &ch68, &ch69, &ch70, &ch71,\r
+ &ch72, &ch73, &ch74, &ch75, &ch76, &ch77, &ch78, &ch79,\r
+ &ch80, &ch81, &ch82, &ch83, &ch84, &ch85, &ch86, &ch87,\r
+ &ch88, &ch89, &ch90, &ch91, &ch92, &ch93, &ch94, &ch95,\r
+ &ch96, &ch97, &ch98, &ch99, &ch100, &ch101, &ch102, &ch103,\r
+ &ch104, &ch105, &ch106, &ch107, &ch108, &ch109, &ch110, &ch111,\r
+ &ch112, &ch113, &ch114, &ch115, &ch116, &ch117, &ch118, &ch119,\r
+ &ch120, &ch121, &ch122, &ch123, &ch124, &ch125, &ch126, &ch127\r
+};\r
+\r
+const SFG_StrokeFont fgStrokeMonoRoman = {"MonoRoman",128,152.381f,chars};\r
diff --git a/src/Common/freeglut_stroke_roman.c b/src/Common/freeglut_stroke_roman.c
new file mode 100644 (file)
index 0000000..948e369
--- /dev/null
@@ -0,0 +1,2849 @@
+/*\r
+ * freeglut_stroke_roman.c\r
+ *\r
+ * freeglut Roman stroke font definition\r
+ *\r
+ * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.\r
+ * Written by Pawel W. Olszta, <olszta@sourceforge.net>\r
+ * Creation date: Thu Dec 16 1999\r
+ *\r
+ * Permission is hereby granted, free of charge, to any person obtaining a\r
+ * copy of this software and associated documentation files (the "Software"),\r
+ * to deal in the Software without restriction, including without limitation\r
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
+ * and/or sell copies of the Software, and to permit persons to whom the\r
+ * Software is furnished to do so, subject to the following conditions:\r
+ *\r
+ * The above copyright notice and this permission notice shall be included\r
+ * in all copies or substantial portions of the Software.\r
+ *\r
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL\r
+ * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
+ */\r
+\r
+\r
+/* This file has been automatically generated by the genstroke utility. */\r
+\r
+#include <GL/freeglut.h>\r
+#include "freeglut_internal.h"\r
+\r
+/* char: 0x20 */\r
+\r
+static const SFG_StrokeStrip ch32st[] =\r
+{\r
+  { 0, NULL }\r
+};\r
+\r
+static const SFG_StrokeChar ch32 = {104.762f,0,ch32st};\r
+\r
+/* char: 0x21 */\r
+\r
+static const SFG_StrokeVertex ch33st0[] =\r
+{\r
+ {13.3819f,100.0f},\r
+ {13.3819f,33.3333f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch33st1[] =\r
+{\r
+ {13.3819f,9.5238f},\r
+ {8.62f,4.7619f},\r
+ {13.3819f,0.0f},\r
+ {18.1438f,4.7619f},\r
+ {13.3819f,9.5238f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch33st[] =\r
+{\r
+ {2,ch33st0},\r
+ {5,ch33st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch33 = {26.6238f,2,ch33st};\r
+\r
+/* char: 0x22 */\r
+\r
+static const SFG_StrokeVertex ch34st0[] =\r
+{\r
+ {4.02f,100.0f},\r
+ {4.02f,66.6667f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch34st1[] =\r
+{\r
+ {42.1152f,100.0f},\r
+ {42.1152f,66.6667f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch34st[] =\r
+{\r
+ {2,ch34st0},\r
+ {2,ch34st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch34 = {51.4352f,2,ch34st};\r
+\r
+/* char: 0x23 */\r
+\r
+static const SFG_StrokeVertex ch35st0[] =\r
+{\r
+ {41.2952f,119.048f},\r
+ {7.9619f,-33.3333f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch35st1[] =\r
+{\r
+ {69.8667f,119.048f},\r
+ {36.5333f,-33.3333f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch35st2[] =\r
+{\r
+ {7.9619f,57.1429f},\r
+ {74.6286f,57.1429f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch35st3[] =\r
+{\r
+ {3.2f,28.5714f},\r
+ {69.8667f,28.5714f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch35st[] =\r
+{\r
+ {2,ch35st0},\r
+ {2,ch35st1},\r
+ {2,ch35st2},\r
+ {2,ch35st3}\r
+};\r
+\r
+static const SFG_StrokeChar ch35 = {79.4886f,4,ch35st};\r
+\r
+/* char: 0x24 */\r
+\r
+static const SFG_StrokeVertex ch36st0[] =\r
+{\r
+ {28.6295f,119.048f},\r
+ {28.6295f,-19.0476f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch36st1[] =\r
+{\r
+ {47.6771f,119.048f},\r
+ {47.6771f,-19.0476f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch36st2[] =\r
+{\r
+ {71.4867f,85.7143f},\r
+ {61.9629f,95.2381f},\r
+ {47.6771f,100.0f},\r
+ {28.6295f,100.0f},\r
+ {14.3438f,95.2381f},\r
+ {4.82f,85.7143f},\r
+ {4.82f,76.1905f},\r
+ {9.5819f,66.6667f},\r
+ {14.3438f,61.9048f},\r
+ {23.8676f,57.1429f},\r
+ {52.439f,47.619f},\r
+ {61.9629f,42.8571f},\r
+ {66.7248f,38.0952f},\r
+ {71.4867f,28.5714f},\r
+ {71.4867f,14.2857f},\r
+ {61.9629f,4.7619f},\r
+ {47.6771f,0.0f},\r
+ {28.6295f,0.0f},\r
+ {14.3438f,4.7619f},\r
+ {4.82f,14.2857f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch36st[] =\r
+{\r
+ {2,ch36st0},\r
+ {2,ch36st1},\r
+ {20,ch36st2}\r
+};\r
+\r
+static const SFG_StrokeChar ch36 = {76.2067f,3,ch36st};\r
+\r
+/* char: 0x25 */\r
+\r
+static const SFG_StrokeVertex ch37st0[] =\r
+{\r
+ {92.0743f,100.0f},\r
+ {6.36f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch37st1[] =\r
+{\r
+ {30.1695f,100.0f},\r
+ {39.6933f,90.4762f},\r
+ {39.6933f,80.9524f},\r
+ {34.9314f,71.4286f},\r
+ {25.4076f,66.6667f},\r
+ {15.8838f,66.6667f},\r
+ {6.36f,76.1905f},\r
+ {6.36f,85.7143f},\r
+ {11.1219f,95.2381f},\r
+ {20.6457f,100.0f},\r
+ {30.1695f,100.0f},\r
+ {39.6933f,95.2381f},\r
+ {53.979f,90.4762f},\r
+ {68.2648f,90.4762f},\r
+ {82.5505f,95.2381f},\r
+ {92.0743f,100.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch37st2[] =\r
+{\r
+ {73.0267f,33.3333f},\r
+ {63.5029f,28.5714f},\r
+ {58.741f,19.0476f},\r
+ {58.741f,9.5238f},\r
+ {68.2648f,0.0f},\r
+ {77.7886f,0.0f},\r
+ {87.3124f,4.7619f},\r
+ {92.0743f,14.2857f},\r
+ {92.0743f,23.8095f},\r
+ {82.5505f,33.3333f},\r
+ {73.0267f,33.3333f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch37st[] =\r
+{\r
+ {2,ch37st0},\r
+ {16,ch37st1},\r
+ {11,ch37st2}\r
+};\r
+\r
+static const SFG_StrokeChar ch37 = {96.5743f,3,ch37st};\r
+\r
+/* char: 0x26 */\r
+\r
+static const SFG_StrokeVertex ch38st0[] =\r
+{\r
+ {101.218f,57.1429f},\r
+ {101.218f,61.9048f},\r
+ {96.4562f,66.6667f},\r
+ {91.6943f,66.6667f},\r
+ {86.9324f,61.9048f},\r
+ {82.1705f,52.381f},\r
+ {72.6467f,28.5714f},\r
+ {63.1229f,14.2857f},\r
+ {53.599f,4.7619f},\r
+ {44.0752f,0.0f},\r
+ {25.0276f,0.0f},\r
+ {15.5038f,4.7619f},\r
+ {10.7419f,9.5238f},\r
+ {5.98f,19.0476f},\r
+ {5.98f,28.5714f},\r
+ {10.7419f,38.0952f},\r
+ {15.5038f,42.8571f},\r
+ {48.8371f,61.9048f},\r
+ {53.599f,66.6667f},\r
+ {58.361f,76.1905f},\r
+ {58.361f,85.7143f},\r
+ {53.599f,95.2381f},\r
+ {44.0752f,100.0f},\r
+ {34.5514f,95.2381f},\r
+ {29.7895f,85.7143f},\r
+ {29.7895f,76.1905f},\r
+ {34.5514f,61.9048f},\r
+ {44.0752f,47.619f},\r
+ {67.8848f,14.2857f},\r
+ {77.4086f,4.7619f},\r
+ {86.9324f,0.0f},\r
+ {96.4562f,0.0f},\r
+ {101.218f,4.7619f},\r
+ {101.218f,9.5238f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch38st[] =\r
+{\r
+ {34,ch38st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch38 = {101.758f,1,ch38st};\r
+\r
+/* char: 0x27 */\r
+\r
+static const SFG_StrokeVertex ch39st0[] =\r
+{\r
+ {4.44f,100.0f},\r
+ {4.44f,66.6667f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch39st[] =\r
+{\r
+ {2,ch39st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch39 = {13.62f,1,ch39st};\r
+\r
+/* char: 0x28 */\r
+\r
+static const SFG_StrokeVertex ch40st0[] =\r
+{\r
+ {40.9133f,119.048f},\r
+ {31.3895f,109.524f},\r
+ {21.8657f,95.2381f},\r
+ {12.3419f,76.1905f},\r
+ {7.58f,52.381f},\r
+ {7.58f,33.3333f},\r
+ {12.3419f,9.5238f},\r
+ {21.8657f,-9.5238f},\r
+ {31.3895f,-23.8095f},\r
+ {40.9133f,-33.3333f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch40st[] =\r
+{\r
+ {10,ch40st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch40 = {47.1733f,1,ch40st};\r
+\r
+/* char: 0x29 */\r
+\r
+static const SFG_StrokeVertex ch41st0[] =\r
+{\r
+ {5.28f,119.048f},\r
+ {14.8038f,109.524f},\r
+ {24.3276f,95.2381f},\r
+ {33.8514f,76.1905f},\r
+ {38.6133f,52.381f},\r
+ {38.6133f,33.3333f},\r
+ {33.8514f,9.5238f},\r
+ {24.3276f,-9.5238f},\r
+ {14.8038f,-23.8095f},\r
+ {5.28f,-33.3333f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch41st[] =\r
+{\r
+ {10,ch41st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch41 = {47.5333f,1,ch41st};\r
+\r
+/* char: 0x2a */\r
+\r
+static const SFG_StrokeVertex ch42st0[] =\r
+{\r
+ {30.7695f,71.4286f},\r
+ {30.7695f,14.2857f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch42st1[] =\r
+{\r
+ {6.96f,57.1429f},\r
+ {54.579f,28.5714f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch42st2[] =\r
+{\r
+ {54.579f,57.1429f},\r
+ {6.96f,28.5714f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch42st[] =\r
+{\r
+ {2,ch42st0},\r
+ {2,ch42st1},\r
+ {2,ch42st2}\r
+};\r
+\r
+static const SFG_StrokeChar ch42 = {59.439f,3,ch42st};\r
+\r
+/* char: 0x2b */\r
+\r
+static const SFG_StrokeVertex ch43st0[] =\r
+{\r
+ {48.8371f,85.7143f},\r
+ {48.8371f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch43st1[] =\r
+{\r
+ {5.98f,42.8571f},\r
+ {91.6943f,42.8571f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch43st[] =\r
+{\r
+ {2,ch43st0},\r
+ {2,ch43st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch43 = {97.2543f,2,ch43st};\r
+\r
+/* char: 0x2c */\r
+\r
+static const SFG_StrokeVertex ch44st0[] =\r
+{\r
+ {18.2838f,4.7619f},\r
+ {13.5219f,0.0f},\r
+ {8.76f,4.7619f},\r
+ {13.5219f,9.5238f},\r
+ {18.2838f,4.7619f},\r
+ {18.2838f,-4.7619f},\r
+ {13.5219f,-14.2857f},\r
+ {8.76f,-19.0476f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch44st[] =\r
+{\r
+ {8,ch44st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch44 = {26.0638f,1,ch44st};\r
+\r
+/* char: 0x2d */\r
+\r
+static const SFG_StrokeVertex ch45st0[] =\r
+{\r
+ {7.38f,42.8571f},\r
+ {93.0943f,42.8571f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch45st[] =\r
+{\r
+ {2,ch45st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch45 = {100.754f,1,ch45st};\r
+\r
+/* char: 0x2e */\r
+\r
+static const SFG_StrokeVertex ch46st0[] =\r
+{\r
+ {13.1019f,9.5238f},\r
+ {8.34f,4.7619f},\r
+ {13.1019f,0.0f},\r
+ {17.8638f,4.7619f},\r
+ {13.1019f,9.5238f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch46st[] =\r
+{\r
+ {5,ch46st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch46 = {26.4838f,1,ch46st};\r
+\r
+/* char: 0x2f */\r
+\r
+static const SFG_StrokeVertex ch47st0[] =\r
+{\r
+ {7.24f,-14.2857f},\r
+ {73.9067f,100.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch47st[] =\r
+{\r
+ {2,ch47st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch47 = {82.1067f,1,ch47st};\r
+\r
+/* char: 0x30 */\r
+\r
+static const SFG_StrokeVertex ch48st0[] =\r
+{\r
+ {33.5514f,100.0f},\r
+ {19.2657f,95.2381f},\r
+ {9.7419f,80.9524f},\r
+ {4.98f,57.1429f},\r
+ {4.98f,42.8571f},\r
+ {9.7419f,19.0476f},\r
+ {19.2657f,4.7619f},\r
+ {33.5514f,0.0f},\r
+ {43.0752f,0.0f},\r
+ {57.361f,4.7619f},\r
+ {66.8848f,19.0476f},\r
+ {71.6467f,42.8571f},\r
+ {71.6467f,57.1429f},\r
+ {66.8848f,80.9524f},\r
+ {57.361f,95.2381f},\r
+ {43.0752f,100.0f},\r
+ {33.5514f,100.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch48st[] =\r
+{\r
+ {17,ch48st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch48 = {77.0667f,1,ch48st};\r
+\r
+/* char: 0x31 */\r
+\r
+static const SFG_StrokeVertex ch49st0[] =\r
+{\r
+ {11.82f,80.9524f},\r
+ {21.3438f,85.7143f},\r
+ {35.6295f,100.0f},\r
+ {35.6295f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch49st[] =\r
+{\r
+ {4,ch49st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch49 = {66.5295f,1,ch49st};\r
+\r
+/* char: 0x32 */\r
+\r
+static const SFG_StrokeVertex ch50st0[] =\r
+{\r
+ {10.1819f,76.1905f},\r
+ {10.1819f,80.9524f},\r
+ {14.9438f,90.4762f},\r
+ {19.7057f,95.2381f},\r
+ {29.2295f,100.0f},\r
+ {48.2771f,100.0f},\r
+ {57.801f,95.2381f},\r
+ {62.5629f,90.4762f},\r
+ {67.3248f,80.9524f},\r
+ {67.3248f,71.4286f},\r
+ {62.5629f,61.9048f},\r
+ {53.039f,47.619f},\r
+ {5.42f,0.0f},\r
+ {72.0867f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch50st[] =\r
+{\r
+ {14,ch50st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch50 = {77.6467f,1,ch50st};\r
+\r
+/* char: 0x33 */\r
+\r
+static const SFG_StrokeVertex ch51st0[] =\r
+{\r
+ {14.5238f,100.0f},\r
+ {66.9048f,100.0f},\r
+ {38.3333f,61.9048f},\r
+ {52.619f,61.9048f},\r
+ {62.1429f,57.1429f},\r
+ {66.9048f,52.381f},\r
+ {71.6667f,38.0952f},\r
+ {71.6667f,28.5714f},\r
+ {66.9048f,14.2857f},\r
+ {57.381f,4.7619f},\r
+ {43.0952f,0.0f},\r
+ {28.8095f,0.0f},\r
+ {14.5238f,4.7619f},\r
+ {9.7619f,9.5238f},\r
+ {5.0f,19.0476f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch51st[] =\r
+{\r
+ {15,ch51st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch51 = {77.0467f,1,ch51st};\r
+\r
+/* char: 0x34 */\r
+\r
+static const SFG_StrokeVertex ch52st0[] =\r
+{\r
+ {51.499f,100.0f},\r
+ {3.88f,33.3333f},\r
+ {75.3086f,33.3333f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch52st1[] =\r
+{\r
+ {51.499f,100.0f},\r
+ {51.499f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch52st[] =\r
+{\r
+ {3,ch52st0},\r
+ {2,ch52st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch52 = {80.1686f,2,ch52st};\r
+\r
+/* char: 0x35 */\r
+\r
+static const SFG_StrokeVertex ch53st0[] =\r
+{\r
+ {62.0029f,100.0f},\r
+ {14.3838f,100.0f},\r
+ {9.6219f,57.1429f},\r
+ {14.3838f,61.9048f},\r
+ {28.6695f,66.6667f},\r
+ {42.9552f,66.6667f},\r
+ {57.241f,61.9048f},\r
+ {66.7648f,52.381f},\r
+ {71.5267f,38.0952f},\r
+ {71.5267f,28.5714f},\r
+ {66.7648f,14.2857f},\r
+ {57.241f,4.7619f},\r
+ {42.9552f,0.0f},\r
+ {28.6695f,0.0f},\r
+ {14.3838f,4.7619f},\r
+ {9.6219f,9.5238f},\r
+ {4.86f,19.0476f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch53st[] =\r
+{\r
+ {17,ch53st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch53 = {77.6867f,1,ch53st};\r
+\r
+/* char: 0x36 */\r
+\r
+static const SFG_StrokeVertex ch54st0[] =\r
+{\r
+ {62.7229f,85.7143f},\r
+ {57.961f,95.2381f},\r
+ {43.6752f,100.0f},\r
+ {34.1514f,100.0f},\r
+ {19.8657f,95.2381f},\r
+ {10.3419f,80.9524f},\r
+ {5.58f,57.1429f},\r
+ {5.58f,33.3333f},\r
+ {10.3419f,14.2857f},\r
+ {19.8657f,4.7619f},\r
+ {34.1514f,0.0f},\r
+ {38.9133f,0.0f},\r
+ {53.199f,4.7619f},\r
+ {62.7229f,14.2857f},\r
+ {67.4848f,28.5714f},\r
+ {67.4848f,33.3333f},\r
+ {62.7229f,47.619f},\r
+ {53.199f,57.1429f},\r
+ {38.9133f,61.9048f},\r
+ {34.1514f,61.9048f},\r
+ {19.8657f,57.1429f},\r
+ {10.3419f,47.619f},\r
+ {5.58f,33.3333f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch54st[] =\r
+{\r
+ {23,ch54st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch54 = {73.8048f,1,ch54st};\r
+\r
+/* char: 0x37 */\r
+\r
+static const SFG_StrokeVertex ch55st0[] =\r
+{\r
+ {72.2267f,100.0f},\r
+ {24.6076f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch55st1[] =\r
+{\r
+ {5.56f,100.0f},\r
+ {72.2267f,100.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch55st[] =\r
+{\r
+ {2,ch55st0},\r
+ {2,ch55st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch55 = {77.2267f,2,ch55st};\r
+\r
+/* char: 0x38 */\r
+\r
+static const SFG_StrokeVertex ch56st0[] =\r
+{\r
+ {29.4095f,100.0f},\r
+ {15.1238f,95.2381f},\r
+ {10.3619f,85.7143f},\r
+ {10.3619f,76.1905f},\r
+ {15.1238f,66.6667f},\r
+ {24.6476f,61.9048f},\r
+ {43.6952f,57.1429f},\r
+ {57.981f,52.381f},\r
+ {67.5048f,42.8571f},\r
+ {72.2667f,33.3333f},\r
+ {72.2667f,19.0476f},\r
+ {67.5048f,9.5238f},\r
+ {62.7429f,4.7619f},\r
+ {48.4571f,0.0f},\r
+ {29.4095f,0.0f},\r
+ {15.1238f,4.7619f},\r
+ {10.3619f,9.5238f},\r
+ {5.6f,19.0476f},\r
+ {5.6f,33.3333f},\r
+ {10.3619f,42.8571f},\r
+ {19.8857f,52.381f},\r
+ {34.1714f,57.1429f},\r
+ {53.219f,61.9048f},\r
+ {62.7429f,66.6667f},\r
+ {67.5048f,76.1905f},\r
+ {67.5048f,85.7143f},\r
+ {62.7429f,95.2381f},\r
+ {48.4571f,100.0f},\r
+ {29.4095f,100.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch56st[] =\r
+{\r
+ {29,ch56st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch56 = {77.6667f,1,ch56st};\r
+\r
+/* char: 0x39 */\r
+\r
+static const SFG_StrokeVertex ch57st0[] =\r
+{\r
+ {68.5048f,66.6667f},\r
+ {63.7429f,52.381f},\r
+ {54.219f,42.8571f},\r
+ {39.9333f,38.0952f},\r
+ {35.1714f,38.0952f},\r
+ {20.8857f,42.8571f},\r
+ {11.3619f,52.381f},\r
+ {6.6f,66.6667f},\r
+ {6.6f,71.4286f},\r
+ {11.3619f,85.7143f},\r
+ {20.8857f,95.2381f},\r
+ {35.1714f,100.0f},\r
+ {39.9333f,100.0f},\r
+ {54.219f,95.2381f},\r
+ {63.7429f,85.7143f},\r
+ {68.5048f,66.6667f},\r
+ {68.5048f,42.8571f},\r
+ {63.7429f,19.0476f},\r
+ {54.219f,4.7619f},\r
+ {39.9333f,0.0f},\r
+ {30.4095f,0.0f},\r
+ {16.1238f,4.7619f},\r
+ {11.3619f,14.2857f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch57st[] =\r
+{\r
+ {23,ch57st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch57 = {74.0648f,1,ch57st};\r
+\r
+/* char: 0x3a */\r
+\r
+static const SFG_StrokeVertex ch58st0[] =\r
+{\r
+ {14.0819f,66.6667f},\r
+ {9.32f,61.9048f},\r
+ {14.0819f,57.1429f},\r
+ {18.8438f,61.9048f},\r
+ {14.0819f,66.6667f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch58st1[] =\r
+{\r
+ {14.0819f,9.5238f},\r
+ {9.32f,4.7619f},\r
+ {14.0819f,0.0f},\r
+ {18.8438f,4.7619f},\r
+ {14.0819f,9.5238f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch58st[] =\r
+{\r
+ {5,ch58st0},\r
+ {5,ch58st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch58 = {26.2238f,2,ch58st};\r
+\r
+/* char: 0x3b */\r
+\r
+static const SFG_StrokeVertex ch59st0[] =\r
+{\r
+ {12.9619f,66.6667f},\r
+ {8.2f,61.9048f},\r
+ {12.9619f,57.1429f},\r
+ {17.7238f,61.9048f},\r
+ {12.9619f,66.6667f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch59st1[] =\r
+{\r
+ {17.7238f,4.7619f},\r
+ {12.9619f,0.0f},\r
+ {8.2f,4.7619f},\r
+ {12.9619f,9.5238f},\r
+ {17.7238f,4.7619f},\r
+ {17.7238f,-4.7619f},\r
+ {12.9619f,-14.2857f},\r
+ {8.2f,-19.0476f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch59st[] =\r
+{\r
+ {5,ch59st0},\r
+ {8,ch59st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch59 = {26.3038f,2,ch59st};\r
+\r
+/* char: 0x3c */\r
+\r
+static const SFG_StrokeVertex ch60st0[] =\r
+{\r
+ {79.2505f,85.7143f},\r
+ {3.06f,42.8571f},\r
+ {79.2505f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch60st[] =\r
+{\r
+ {3,ch60st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch60 = {81.6105f,1,ch60st};\r
+\r
+/* char: 0x3d */\r
+\r
+static const SFG_StrokeVertex ch61st0[] =\r
+{\r
+ {5.7f,57.1429f},\r
+ {91.4143f,57.1429f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch61st1[] =\r
+{\r
+ {5.7f,28.5714f},\r
+ {91.4143f,28.5714f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch61st[] =\r
+{\r
+ {2,ch61st0},\r
+ {2,ch61st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch61 = {97.2543f,2,ch61st};\r
+\r
+/* char: 0x3e */\r
+\r
+static const SFG_StrokeVertex ch62st0[] =\r
+{\r
+ {2.78f,85.7143f},\r
+ {78.9705f,42.8571f},\r
+ {2.78f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch62st[] =\r
+{\r
+ {3,ch62st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch62 = {81.6105f,1,ch62st};\r
+\r
+/* char: 0x3f */\r
+\r
+static const SFG_StrokeVertex ch63st0[] =\r
+{\r
+ {8.42f,76.1905f},\r
+ {8.42f,80.9524f},\r
+ {13.1819f,90.4762f},\r
+ {17.9438f,95.2381f},\r
+ {27.4676f,100.0f},\r
+ {46.5152f,100.0f},\r
+ {56.039f,95.2381f},\r
+ {60.801f,90.4762f},\r
+ {65.5629f,80.9524f},\r
+ {65.5629f,71.4286f},\r
+ {60.801f,61.9048f},\r
+ {56.039f,57.1429f},\r
+ {36.9914f,47.619f},\r
+ {36.9914f,33.3333f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch63st1[] =\r
+{\r
+ {36.9914f,9.5238f},\r
+ {32.2295f,4.7619f},\r
+ {36.9914f,0.0f},\r
+ {41.7533f,4.7619f},\r
+ {36.9914f,9.5238f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch63st[] =\r
+{\r
+ {14,ch63st0},\r
+ {5,ch63st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch63 = {73.9029f,2,ch63st};\r
+\r
+/* char: 0x40 */\r
+\r
+static const SFG_StrokeVertex ch64st0[] =\r
+{\r
+ {49.2171f,52.381f},\r
+ {39.6933f,57.1429f},\r
+ {30.1695f,57.1429f},\r
+ {25.4076f,47.619f},\r
+ {25.4076f,42.8571f},\r
+ {30.1695f,33.3333f},\r
+ {39.6933f,33.3333f},\r
+ {49.2171f,38.0952f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch64st1[] =\r
+{\r
+ {49.2171f,57.1429f},\r
+ {49.2171f,38.0952f},\r
+ {53.979f,33.3333f},\r
+ {63.5029f,33.3333f},\r
+ {68.2648f,42.8571f},\r
+ {68.2648f,47.619f},\r
+ {63.5029f,61.9048f},\r
+ {53.979f,71.4286f},\r
+ {39.6933f,76.1905f},\r
+ {34.9314f,76.1905f},\r
+ {20.6457f,71.4286f},\r
+ {11.1219f,61.9048f},\r
+ {6.36f,47.619f},\r
+ {6.36f,42.8571f},\r
+ {11.1219f,28.5714f},\r
+ {20.6457f,19.0476f},\r
+ {34.9314f,14.2857f},\r
+ {39.6933f,14.2857f},\r
+ {53.979f,19.0476f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch64st[] =\r
+{\r
+ {8,ch64st0},\r
+ {19,ch64st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch64 = {74.3648f,2,ch64st};\r
+\r
+/* char: 0x41 */\r
+\r
+static const SFG_StrokeVertex ch65st0[] =\r
+{\r
+ {40.5952f,100.0f},\r
+ {2.5f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch65st1[] =\r
+{\r
+ {40.5952f,100.0f},\r
+ {78.6905f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch65st2[] =\r
+{\r
+ {16.7857f,33.3333f},\r
+ {64.4048f,33.3333f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch65st[] =\r
+{\r
+ {2,ch65st0},\r
+ {2,ch65st1},\r
+ {2,ch65st2}\r
+};\r
+\r
+static const SFG_StrokeChar ch65 = {80.4905f,3,ch65st};\r
+\r
+/* char: 0x42 */\r
+\r
+static const SFG_StrokeVertex ch66st0[] =\r
+{\r
+ {11.42f,100.0f},\r
+ {11.42f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch66st1[] =\r
+{\r
+ {11.42f,100.0f},\r
+ {54.2771f,100.0f},\r
+ {68.5629f,95.2381f},\r
+ {73.3248f,90.4762f},\r
+ {78.0867f,80.9524f},\r
+ {78.0867f,71.4286f},\r
+ {73.3248f,61.9048f},\r
+ {68.5629f,57.1429f},\r
+ {54.2771f,52.381f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch66st2[] =\r
+{\r
+ {11.42f,52.381f},\r
+ {54.2771f,52.381f},\r
+ {68.5629f,47.619f},\r
+ {73.3248f,42.8571f},\r
+ {78.0867f,33.3333f},\r
+ {78.0867f,19.0476f},\r
+ {73.3248f,9.5238f},\r
+ {68.5629f,4.7619f},\r
+ {54.2771f,0.0f},\r
+ {11.42f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch66st[] =\r
+{\r
+ {2,ch66st0},\r
+ {9,ch66st1},\r
+ {10,ch66st2}\r
+};\r
+\r
+static const SFG_StrokeChar ch66 = {83.6267f,3,ch66st};\r
+\r
+/* char: 0x43 */\r
+\r
+static const SFG_StrokeVertex ch67st0[] =\r
+{\r
+ {78.0886f,76.1905f},\r
+ {73.3267f,85.7143f},\r
+ {63.8029f,95.2381f},\r
+ {54.279f,100.0f},\r
+ {35.2314f,100.0f},\r
+ {25.7076f,95.2381f},\r
+ {16.1838f,85.7143f},\r
+ {11.4219f,76.1905f},\r
+ {6.66f,61.9048f},\r
+ {6.66f,38.0952f},\r
+ {11.4219f,23.8095f},\r
+ {16.1838f,14.2857f},\r
+ {25.7076f,4.7619f},\r
+ {35.2314f,0.0f},\r
+ {54.279f,0.0f},\r
+ {63.8029f,4.7619f},\r
+ {73.3267f,14.2857f},\r
+ {78.0886f,23.8095f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch67st[] =\r
+{\r
+ {18,ch67st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch67 = {84.4886f,1,ch67st};\r
+\r
+/* char: 0x44 */\r
+\r
+static const SFG_StrokeVertex ch68st0[] =\r
+{\r
+ {11.96f,100.0f},\r
+ {11.96f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch68st1[] =\r
+{\r
+ {11.96f,100.0f},\r
+ {45.2933f,100.0f},\r
+ {59.579f,95.2381f},\r
+ {69.1029f,85.7143f},\r
+ {73.8648f,76.1905f},\r
+ {78.6267f,61.9048f},\r
+ {78.6267f,38.0952f},\r
+ {73.8648f,23.8095f},\r
+ {69.1029f,14.2857f},\r
+ {59.579f,4.7619f},\r
+ {45.2933f,0.0f},\r
+ {11.96f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch68st[] =\r
+{\r
+ {2,ch68st0},\r
+ {12,ch68st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch68 = {85.2867f,2,ch68st};\r
+\r
+/* char: 0x45 */\r
+\r
+static const SFG_StrokeVertex ch69st0[] =\r
+{\r
+ {11.42f,100.0f},\r
+ {11.42f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch69st1[] =\r
+{\r
+ {11.42f,100.0f},\r
+ {73.3248f,100.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch69st2[] =\r
+{\r
+ {11.42f,52.381f},\r
+ {49.5152f,52.381f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch69st3[] =\r
+{\r
+ {11.42f,0.0f},\r
+ {73.3248f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch69st[] =\r
+{\r
+ {2,ch69st0},\r
+ {2,ch69st1},\r
+ {2,ch69st2},\r
+ {2,ch69st3}\r
+};\r
+\r
+static const SFG_StrokeChar ch69 = {78.1848f,4,ch69st};\r
+\r
+/* char: 0x46 */\r
+\r
+static const SFG_StrokeVertex ch70st0[] =\r
+{\r
+ {11.42f,100.0f},\r
+ {11.42f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch70st1[] =\r
+{\r
+ {11.42f,100.0f},\r
+ {73.3248f,100.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch70st2[] =\r
+{\r
+ {11.42f,52.381f},\r
+ {49.5152f,52.381f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch70st[] =\r
+{\r
+ {2,ch70st0},\r
+ {2,ch70st1},\r
+ {2,ch70st2}\r
+};\r
+\r
+static const SFG_StrokeChar ch70 = {78.7448f,3,ch70st};\r
+\r
+/* char: 0x47 */\r
+\r
+static const SFG_StrokeVertex ch71st0[] =\r
+{\r
+ {78.4886f,76.1905f},\r
+ {73.7267f,85.7143f},\r
+ {64.2029f,95.2381f},\r
+ {54.679f,100.0f},\r
+ {35.6314f,100.0f},\r
+ {26.1076f,95.2381f},\r
+ {16.5838f,85.7143f},\r
+ {11.8219f,76.1905f},\r
+ {7.06f,61.9048f},\r
+ {7.06f,38.0952f},\r
+ {11.8219f,23.8095f},\r
+ {16.5838f,14.2857f},\r
+ {26.1076f,4.7619f},\r
+ {35.6314f,0.0f},\r
+ {54.679f,0.0f},\r
+ {64.2029f,4.7619f},\r
+ {73.7267f,14.2857f},\r
+ {78.4886f,23.8095f},\r
+ {78.4886f,38.0952f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch71st1[] =\r
+{\r
+ {54.679f,38.0952f},\r
+ {78.4886f,38.0952f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch71st[] =\r
+{\r
+ {19,ch71st0},\r
+ {2,ch71st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch71 = {89.7686f,2,ch71st};\r
+\r
+/* char: 0x48 */\r
+\r
+static const SFG_StrokeVertex ch72st0[] =\r
+{\r
+ {11.42f,100.0f},\r
+ {11.42f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch72st1[] =\r
+{\r
+ {78.0867f,100.0f},\r
+ {78.0867f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch72st2[] =\r
+{\r
+ {11.42f,52.381f},\r
+ {78.0867f,52.381f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch72st[] =\r
+{\r
+ {2,ch72st0},\r
+ {2,ch72st1},\r
+ {2,ch72st2}\r
+};\r
+\r
+static const SFG_StrokeChar ch72 = {89.0867f,3,ch72st};\r
+\r
+/* char: 0x49 */\r
+\r
+static const SFG_StrokeVertex ch73st0[] =\r
+{\r
+ {10.86f,100.0f},\r
+ {10.86f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch73st[] =\r
+{\r
+ {2,ch73st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch73 = {21.3f,1,ch73st};\r
+\r
+/* char: 0x4a */\r
+\r
+static const SFG_StrokeVertex ch74st0[] =\r
+{\r
+ {50.119f,100.0f},\r
+ {50.119f,23.8095f},\r
+ {45.3571f,9.5238f},\r
+ {40.5952f,4.7619f},\r
+ {31.0714f,0.0f},\r
+ {21.5476f,0.0f},\r
+ {12.0238f,4.7619f},\r
+ {7.2619f,9.5238f},\r
+ {2.5f,23.8095f},\r
+ {2.5f,33.3333f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch74st[] =\r
+{\r
+ {10,ch74st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch74 = {59.999f,1,ch74st};\r
+\r
+/* char: 0x4b */\r
+\r
+static const SFG_StrokeVertex ch75st0[] =\r
+{\r
+ {11.28f,100.0f},\r
+ {11.28f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch75st1[] =\r
+{\r
+ {77.9467f,100.0f},\r
+ {11.28f,33.3333f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch75st2[] =\r
+{\r
+ {35.0895f,57.1429f},\r
+ {77.9467f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch75st[] =\r
+{\r
+ {2,ch75st0},\r
+ {2,ch75st1},\r
+ {2,ch75st2}\r
+};\r
+\r
+static const SFG_StrokeChar ch75 = {79.3267f,3,ch75st};\r
+\r
+/* char: 0x4c */\r
+\r
+static const SFG_StrokeVertex ch76st0[] =\r
+{\r
+ {11.68f,100.0f},\r
+ {11.68f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch76st1[] =\r
+{\r
+ {11.68f,0.0f},\r
+ {68.8229f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch76st[] =\r
+{\r
+ {2,ch76st0},\r
+ {2,ch76st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch76 = {71.3229f,2,ch76st};\r
+\r
+/* char: 0x4d */\r
+\r
+static const SFG_StrokeVertex ch77st0[] =\r
+{\r
+ {10.86f,100.0f},\r
+ {10.86f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch77st1[] =\r
+{\r
+ {10.86f,100.0f},\r
+ {48.9552f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch77st2[] =\r
+{\r
+ {87.0505f,100.0f},\r
+ {48.9552f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch77st3[] =\r
+{\r
+ {87.0505f,100.0f},\r
+ {87.0505f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch77st[] =\r
+{\r
+ {2,ch77st0},\r
+ {2,ch77st1},\r
+ {2,ch77st2},\r
+ {2,ch77st3}\r
+};\r
+\r
+static const SFG_StrokeChar ch77 = {97.2105f,4,ch77st};\r
+\r
+/* char: 0x4e */\r
+\r
+static const SFG_StrokeVertex ch78st0[] =\r
+{\r
+ {11.14f,100.0f},\r
+ {11.14f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch78st1[] =\r
+{\r
+ {11.14f,100.0f},\r
+ {77.8067f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch78st2[] =\r
+{\r
+ {77.8067f,100.0f},\r
+ {77.8067f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch78st[] =\r
+{\r
+ {2,ch78st0},\r
+ {2,ch78st1},\r
+ {2,ch78st2}\r
+};\r
+\r
+static const SFG_StrokeChar ch78 = {88.8067f,3,ch78st};\r
+\r
+/* char: 0x4f */\r
+\r
+static const SFG_StrokeVertex ch79st0[] =\r
+{\r
+ {34.8114f,100.0f},\r
+ {25.2876f,95.2381f},\r
+ {15.7638f,85.7143f},\r
+ {11.0019f,76.1905f},\r
+ {6.24f,61.9048f},\r
+ {6.24f,38.0952f},\r
+ {11.0019f,23.8095f},\r
+ {15.7638f,14.2857f},\r
+ {25.2876f,4.7619f},\r
+ {34.8114f,0.0f},\r
+ {53.859f,0.0f},\r
+ {63.3829f,4.7619f},\r
+ {72.9067f,14.2857f},\r
+ {77.6686f,23.8095f},\r
+ {82.4305f,38.0952f},\r
+ {82.4305f,61.9048f},\r
+ {77.6686f,76.1905f},\r
+ {72.9067f,85.7143f},\r
+ {63.3829f,95.2381f},\r
+ {53.859f,100.0f},\r
+ {34.8114f,100.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch79st[] =\r
+{\r
+ {21,ch79st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch79 = {88.8305f,1,ch79st};\r
+\r
+/* char: 0x50 */\r
+\r
+static const SFG_StrokeVertex ch80st0[] =\r
+{\r
+ {12.1f,100.0f},\r
+ {12.1f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch80st1[] =\r
+{\r
+ {12.1f,100.0f},\r
+ {54.9571f,100.0f},\r
+ {69.2429f,95.2381f},\r
+ {74.0048f,90.4762f},\r
+ {78.7667f,80.9524f},\r
+ {78.7667f,66.6667f},\r
+ {74.0048f,57.1429f},\r
+ {69.2429f,52.381f},\r
+ {54.9571f,47.619f},\r
+ {12.1f,47.619f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch80st[] =\r
+{\r
+ {2,ch80st0},\r
+ {10,ch80st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch80 = {85.6667f,2,ch80st};\r
+\r
+/* char: 0x51 */\r
+\r
+static const SFG_StrokeVertex ch81st0[] =\r
+{\r
+ {33.8714f,100.0f},\r
+ {24.3476f,95.2381f},\r
+ {14.8238f,85.7143f},\r
+ {10.0619f,76.1905f},\r
+ {5.3f,61.9048f},\r
+ {5.3f,38.0952f},\r
+ {10.0619f,23.8095f},\r
+ {14.8238f,14.2857f},\r
+ {24.3476f,4.7619f},\r
+ {33.8714f,0.0f},\r
+ {52.919f,0.0f},\r
+ {62.4429f,4.7619f},\r
+ {71.9667f,14.2857f},\r
+ {76.7286f,23.8095f},\r
+ {81.4905f,38.0952f},\r
+ {81.4905f,61.9048f},\r
+ {76.7286f,76.1905f},\r
+ {71.9667f,85.7143f},\r
+ {62.4429f,95.2381f},\r
+ {52.919f,100.0f},\r
+ {33.8714f,100.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch81st1[] =\r
+{\r
+ {48.1571f,19.0476f},\r
+ {76.7286f,-9.5238f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch81st[] =\r
+{\r
+ {21,ch81st0},\r
+ {2,ch81st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch81 = {88.0905f,2,ch81st};\r
+\r
+/* char: 0x52 */\r
+\r
+static const SFG_StrokeVertex ch82st0[] =\r
+{\r
+ {11.68f,100.0f},\r
+ {11.68f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch82st1[] =\r
+{\r
+ {11.68f,100.0f},\r
+ {54.5371f,100.0f},\r
+ {68.8229f,95.2381f},\r
+ {73.5848f,90.4762f},\r
+ {78.3467f,80.9524f},\r
+ {78.3467f,71.4286f},\r
+ {73.5848f,61.9048f},\r
+ {68.8229f,57.1429f},\r
+ {54.5371f,52.381f},\r
+ {11.68f,52.381f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch82st2[] =\r
+{\r
+ {45.0133f,52.381f},\r
+ {78.3467f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch82st[] =\r
+{\r
+ {2,ch82st0},\r
+ {10,ch82st1},\r
+ {2,ch82st2}\r
+};\r
+\r
+static const SFG_StrokeChar ch82 = {82.3667f,3,ch82st};\r
+\r
+/* char: 0x53 */\r
+\r
+static const SFG_StrokeVertex ch83st0[] =\r
+{\r
+ {74.6667f,85.7143f},\r
+ {65.1429f,95.2381f},\r
+ {50.8571f,100.0f},\r
+ {31.8095f,100.0f},\r
+ {17.5238f,95.2381f},\r
+ {8.0f,85.7143f},\r
+ {8.0f,76.1905f},\r
+ {12.7619f,66.6667f},\r
+ {17.5238f,61.9048f},\r
+ {27.0476f,57.1429f},\r
+ {55.619f,47.619f},\r
+ {65.1429f,42.8571f},\r
+ {69.9048f,38.0952f},\r
+ {74.6667f,28.5714f},\r
+ {74.6667f,14.2857f},\r
+ {65.1429f,4.7619f},\r
+ {50.8571f,0.0f},\r
+ {31.8095f,0.0f},\r
+ {17.5238f,4.7619f},\r
+ {8.0f,14.2857f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch83st[] =\r
+{\r
+ {20,ch83st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch83 = {80.8267f,1,ch83st};\r
+\r
+/* char: 0x54 */\r
+\r
+static const SFG_StrokeVertex ch84st0[] =\r
+{\r
+ {35.6933f,100.0f},\r
+ {35.6933f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch84st1[] =\r
+{\r
+ {2.36f,100.0f},\r
+ {69.0267f,100.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch84st[] =\r
+{\r
+ {2,ch84st0},\r
+ {2,ch84st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch84 = {71.9467f,2,ch84st};\r
+\r
+/* char: 0x55 */\r
+\r
+static const SFG_StrokeVertex ch85st0[] =\r
+{\r
+ {11.54f,100.0f},\r
+ {11.54f,28.5714f},\r
+ {16.3019f,14.2857f},\r
+ {25.8257f,4.7619f},\r
+ {40.1114f,0.0f},\r
+ {49.6352f,0.0f},\r
+ {63.921f,4.7619f},\r
+ {73.4448f,14.2857f},\r
+ {78.2067f,28.5714f},\r
+ {78.2067f,100.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch85st[] =\r
+{\r
+ {10,ch85st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch85 = {89.4867f,1,ch85st};\r
+\r
+/* char: 0x56 */\r
+\r
+static const SFG_StrokeVertex ch86st0[] =\r
+{\r
+ {2.36f,100.0f},\r
+ {40.4552f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch86st1[] =\r
+{\r
+ {78.5505f,100.0f},\r
+ {40.4552f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch86st[] =\r
+{\r
+ {2,ch86st0},\r
+ {2,ch86st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch86 = {81.6105f,2,ch86st};\r
+\r
+/* char: 0x57 */\r
+\r
+static const SFG_StrokeVertex ch87st0[] =\r
+{\r
+ {2.22f,100.0f},\r
+ {26.0295f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch87st1[] =\r
+{\r
+ {49.839f,100.0f},\r
+ {26.0295f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch87st2[] =\r
+{\r
+ {49.839f,100.0f},\r
+ {73.6486f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch87st3[] =\r
+{\r
+ {97.4581f,100.0f},\r
+ {73.6486f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch87st[] =\r
+{\r
+ {2,ch87st0},\r
+ {2,ch87st1},\r
+ {2,ch87st2},\r
+ {2,ch87st3}\r
+};\r
+\r
+static const SFG_StrokeChar ch87 = {100.518f,4,ch87st};\r
+\r
+/* char: 0x58 */\r
+\r
+static const SFG_StrokeVertex ch88st0[] =\r
+{\r
+ {2.5f,100.0f},\r
+ {69.1667f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch88st1[] =\r
+{\r
+ {69.1667f,100.0f},\r
+ {2.5f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch88st[] =\r
+{\r
+ {2,ch88st0},\r
+ {2,ch88st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch88 = {72.3667f,2,ch88st};\r
+\r
+/* char: 0x59 */\r
+\r
+static const SFG_StrokeVertex ch89st0[] =\r
+{\r
+ {1.52f,100.0f},\r
+ {39.6152f,52.381f},\r
+ {39.6152f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch89st1[] =\r
+{\r
+ {77.7105f,100.0f},\r
+ {39.6152f,52.381f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch89st[] =\r
+{\r
+ {3,ch89st0},\r
+ {2,ch89st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch89 = {79.6505f,2,ch89st};\r
+\r
+/* char: 0x5a */\r
+\r
+static const SFG_StrokeVertex ch90st0[] =\r
+{\r
+ {69.1667f,100.0f},\r
+ {2.5f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch90st1[] =\r
+{\r
+ {2.5f,100.0f},\r
+ {69.1667f,100.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch90st2[] =\r
+{\r
+ {2.5f,0.0f},\r
+ {69.1667f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch90st[] =\r
+{\r
+ {2,ch90st0},\r
+ {2,ch90st1},\r
+ {2,ch90st2}\r
+};\r
+\r
+static const SFG_StrokeChar ch90 = {73.7467f,3,ch90st};\r
+\r
+/* char: 0x5b */\r
+\r
+static const SFG_StrokeVertex ch91st0[] =\r
+{\r
+ {7.78f,119.048f},\r
+ {7.78f,-33.3333f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch91st1[] =\r
+{\r
+ {12.5419f,119.048f},\r
+ {12.5419f,-33.3333f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch91st2[] =\r
+{\r
+ {7.78f,119.048f},\r
+ {41.1133f,119.048f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch91st3[] =\r
+{\r
+ {7.78f,-33.3333f},\r
+ {41.1133f,-33.3333f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch91st[] =\r
+{\r
+ {2,ch91st0},\r
+ {2,ch91st1},\r
+ {2,ch91st2},\r
+ {2,ch91st3}\r
+};\r
+\r
+static const SFG_StrokeChar ch91 = {46.1133f,4,ch91st};\r
+\r
+/* char: 0x5c */\r
+\r
+static const SFG_StrokeVertex ch92st0[] =\r
+{\r
+ {5.84f,100.0f},\r
+ {72.5067f,-14.2857f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch92st[] =\r
+{\r
+ {2,ch92st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch92 = {78.2067f,1,ch92st};\r
+\r
+/* char: 0x5d */\r
+\r
+static const SFG_StrokeVertex ch93st0[] =\r
+{\r
+ {33.0114f,119.048f},\r
+ {33.0114f,-33.3333f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch93st1[] =\r
+{\r
+ {37.7733f,119.048f},\r
+ {37.7733f,-33.3333f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch93st2[] =\r
+{\r
+ {4.44f,119.048f},\r
+ {37.7733f,119.048f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch93st3[] =\r
+{\r
+ {4.44f,-33.3333f},\r
+ {37.7733f,-33.3333f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch93st[] =\r
+{\r
+ {2,ch93st0},\r
+ {2,ch93st1},\r
+ {2,ch93st2},\r
+ {2,ch93st3}\r
+};\r
+\r
+static const SFG_StrokeChar ch93 = {46.3933f,4,ch93st};\r
+\r
+/* char: 0x5e */\r
+\r
+static const SFG_StrokeVertex ch94st0[] =\r
+{\r
+ {44.0752f,109.524f},\r
+ {5.98f,42.8571f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch94st1[] =\r
+{\r
+ {44.0752f,109.524f},\r
+ {82.1705f,42.8571f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch94st[] =\r
+{\r
+ {2,ch94st0},\r
+ {2,ch94st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch94 = {90.2305f,2,ch94st};\r
+\r
+/* char: 0x5f */\r
+\r
+static const SFG_StrokeVertex ch95st0[] =\r
+{\r
+ {-1.1f,-33.3333f},\r
+ {103.662f,-33.3333f},\r
+ {103.662f,-28.5714f},\r
+ {-1.1f,-28.5714f},\r
+ {-1.1f,-33.3333f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch95st[] =\r
+{\r
+ {5,ch95st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch95 = {104.062f,1,ch95st};\r
+\r
+/* char: 0x60 */\r
+\r
+static const SFG_StrokeVertex ch96st0[] =\r
+{\r
+ {33.0219f,100.0f},\r
+ {56.8314f,71.4286f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch96st1[] =\r
+{\r
+ {33.0219f,100.0f},\r
+ {28.26f,95.2381f},\r
+ {56.8314f,71.4286f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch96st[] =\r
+{\r
+ {2,ch96st0},\r
+ {3,ch96st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch96 = {83.5714f,2,ch96st};\r
+\r
+/* char: 0x61 */\r
+\r
+static const SFG_StrokeVertex ch97st0[] =\r
+{\r
+ {63.8229f,66.6667f},\r
+ {63.8229f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch97st1[] =\r
+{\r
+ {63.8229f,52.381f},\r
+ {54.299f,61.9048f},\r
+ {44.7752f,66.6667f},\r
+ {30.4895f,66.6667f},\r
+ {20.9657f,61.9048f},\r
+ {11.4419f,52.381f},\r
+ {6.68f,38.0952f},\r
+ {6.68f,28.5714f},\r
+ {11.4419f,14.2857f},\r
+ {20.9657f,4.7619f},\r
+ {30.4895f,0.0f},\r
+ {44.7752f,0.0f},\r
+ {54.299f,4.7619f},\r
+ {63.8229f,14.2857f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch97st[] =\r
+{\r
+ {2,ch97st0},\r
+ {14,ch97st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch97 = {66.6029f,2,ch97st};\r
+\r
+/* char: 0x62 */\r
+\r
+static const SFG_StrokeVertex ch98st0[] =\r
+{\r
+ {8.76f,100.0f},\r
+ {8.76f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch98st1[] =\r
+{\r
+ {8.76f,52.381f},\r
+ {18.2838f,61.9048f},\r
+ {27.8076f,66.6667f},\r
+ {42.0933f,66.6667f},\r
+ {51.6171f,61.9048f},\r
+ {61.141f,52.381f},\r
+ {65.9029f,38.0952f},\r
+ {65.9029f,28.5714f},\r
+ {61.141f,14.2857f},\r
+ {51.6171f,4.7619f},\r
+ {42.0933f,0.0f},\r
+ {27.8076f,0.0f},\r
+ {18.2838f,4.7619f},\r
+ {8.76f,14.2857f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch98st[] =\r
+{\r
+ {2,ch98st0},\r
+ {14,ch98st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch98 = {70.4629f,2,ch98st};\r
+\r
+/* char: 0x63 */\r
+\r
+static const SFG_StrokeVertex ch99st0[] =\r
+{\r
+ {62.6629f,52.381f},\r
+ {53.139f,61.9048f},\r
+ {43.6152f,66.6667f},\r
+ {29.3295f,66.6667f},\r
+ {19.8057f,61.9048f},\r
+ {10.2819f,52.381f},\r
+ {5.52f,38.0952f},\r
+ {5.52f,28.5714f},\r
+ {10.2819f,14.2857f},\r
+ {19.8057f,4.7619f},\r
+ {29.3295f,0.0f},\r
+ {43.6152f,0.0f},\r
+ {53.139f,4.7619f},\r
+ {62.6629f,14.2857f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch99st[] =\r
+{\r
+ {14,ch99st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch99 = {68.9229f,1,ch99st};\r
+\r
+/* char: 0x64 */\r
+\r
+static const SFG_StrokeVertex ch100st0[] =\r
+{\r
+ {61.7829f,100.0f},\r
+ {61.7829f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch100st1[] =\r
+{\r
+ {61.7829f,52.381f},\r
+ {52.259f,61.9048f},\r
+ {42.7352f,66.6667f},\r
+ {28.4495f,66.6667f},\r
+ {18.9257f,61.9048f},\r
+ {9.4019f,52.381f},\r
+ {4.64f,38.0952f},\r
+ {4.64f,28.5714f},\r
+ {9.4019f,14.2857f},\r
+ {18.9257f,4.7619f},\r
+ {28.4495f,0.0f},\r
+ {42.7352f,0.0f},\r
+ {52.259f,4.7619f},\r
+ {61.7829f,14.2857f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch100st[] =\r
+{\r
+ {2,ch100st0},\r
+ {14,ch100st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch100 = {70.2629f,2,ch100st};\r
+\r
+/* char: 0x65 */\r
+\r
+static const SFG_StrokeVertex ch101st0[] =\r
+{\r
+ {5.72f,38.0952f},\r
+ {62.8629f,38.0952f},\r
+ {62.8629f,47.619f},\r
+ {58.101f,57.1429f},\r
+ {53.339f,61.9048f},\r
+ {43.8152f,66.6667f},\r
+ {29.5295f,66.6667f},\r
+ {20.0057f,61.9048f},\r
+ {10.4819f,52.381f},\r
+ {5.72f,38.0952f},\r
+ {5.72f,28.5714f},\r
+ {10.4819f,14.2857f},\r
+ {20.0057f,4.7619f},\r
+ {29.5295f,0.0f},\r
+ {43.8152f,0.0f},\r
+ {53.339f,4.7619f},\r
+ {62.8629f,14.2857f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch101st[] =\r
+{\r
+ {17,ch101st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch101 = {68.5229f,1,ch101st};\r
+\r
+/* char: 0x66 */\r
+\r
+static const SFG_StrokeVertex ch102st0[] =\r
+{\r
+ {38.7752f,100.0f},\r
+ {29.2514f,100.0f},\r
+ {19.7276f,95.2381f},\r
+ {14.9657f,80.9524f},\r
+ {14.9657f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch102st1[] =\r
+{\r
+ {0.68f,66.6667f},\r
+ {34.0133f,66.6667f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch102st[] =\r
+{\r
+ {5,ch102st0},\r
+ {2,ch102st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch102 = {38.6552f,2,ch102st};\r
+\r
+/* char: 0x67 */\r
+\r
+static const SFG_StrokeVertex ch103st0[] =\r
+{\r
+ {62.5029f,66.6667f},\r
+ {62.5029f,-9.5238f},\r
+ {57.741f,-23.8095f},\r
+ {52.979f,-28.5714f},\r
+ {43.4552f,-33.3333f},\r
+ {29.1695f,-33.3333f},\r
+ {19.6457f,-28.5714f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch103st1[] =\r
+{\r
+ {62.5029f,52.381f},\r
+ {52.979f,61.9048f},\r
+ {43.4552f,66.6667f},\r
+ {29.1695f,66.6667f},\r
+ {19.6457f,61.9048f},\r
+ {10.1219f,52.381f},\r
+ {5.36f,38.0952f},\r
+ {5.36f,28.5714f},\r
+ {10.1219f,14.2857f},\r
+ {19.6457f,4.7619f},\r
+ {29.1695f,0.0f},\r
+ {43.4552f,0.0f},\r
+ {52.979f,4.7619f},\r
+ {62.5029f,14.2857f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch103st[] =\r
+{\r
+ {7,ch103st0},\r
+ {14,ch103st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch103 = {70.9829f,2,ch103st};\r
+\r
+/* char: 0x68 */\r
+\r
+static const SFG_StrokeVertex ch104st0[] =\r
+{\r
+ {9.6f,100.0f},\r
+ {9.6f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch104st1[] =\r
+{\r
+ {9.6f,47.619f},\r
+ {23.8857f,61.9048f},\r
+ {33.4095f,66.6667f},\r
+ {47.6952f,66.6667f},\r
+ {57.219f,61.9048f},\r
+ {61.981f,47.619f},\r
+ {61.981f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch104st[] =\r
+{\r
+ {2,ch104st0},\r
+ {7,ch104st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch104 = {71.021f,2,ch104st};\r
+\r
+/* char: 0x69 */\r
+\r
+static const SFG_StrokeVertex ch105st0[] =\r
+{\r
+ {10.02f,100.0f},\r
+ {14.7819f,95.2381f},\r
+ {19.5438f,100.0f},\r
+ {14.7819f,104.762f},\r
+ {10.02f,100.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch105st1[] =\r
+{\r
+ {14.7819f,66.6667f},\r
+ {14.7819f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch105st[] =\r
+{\r
+ {5,ch105st0},\r
+ {2,ch105st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch105 = {28.8638f,2,ch105st};\r
+\r
+/* char: 0x6a */\r
+\r
+static const SFG_StrokeVertex ch106st0[] =\r
+{\r
+ {17.3876f,100.0f},\r
+ {22.1495f,95.2381f},\r
+ {26.9114f,100.0f},\r
+ {22.1495f,104.762f},\r
+ {17.3876f,100.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch106st1[] =\r
+{\r
+ {22.1495f,66.6667f},\r
+ {22.1495f,-14.2857f},\r
+ {17.3876f,-28.5714f},\r
+ {7.8638f,-33.3333f},\r
+ {-1.66f,-33.3333f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch106st[] =\r
+{\r
+ {5,ch106st0},\r
+ {5,ch106st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch106 = {36.2314f,2,ch106st};\r
+\r
+/* char: 0x6b */\r
+\r
+static const SFG_StrokeVertex ch107st0[] =\r
+{\r
+ {9.6f,100.0f},\r
+ {9.6f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch107st1[] =\r
+{\r
+ {57.219f,66.6667f},\r
+ {9.6f,19.0476f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch107st2[] =\r
+{\r
+ {28.6476f,38.0952f},\r
+ {61.981f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch107st[] =\r
+{\r
+ {2,ch107st0},\r
+ {2,ch107st1},\r
+ {2,ch107st2}\r
+};\r
+\r
+static const SFG_StrokeChar ch107 = {62.521f,3,ch107st};\r
+\r
+/* char: 0x6c */\r
+\r
+static const SFG_StrokeVertex ch108st0[] =\r
+{\r
+ {10.02f,100.0f},\r
+ {10.02f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch108st[] =\r
+{\r
+ {2,ch108st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch108 = {19.34f,1,ch108st};\r
+\r
+/* char: 0x6d */\r
+\r
+static const SFG_StrokeVertex ch109st0[] =\r
+{\r
+ {9.6f,66.6667f},\r
+ {9.6f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch109st1[] =\r
+{\r
+ {9.6f,47.619f},\r
+ {23.8857f,61.9048f},\r
+ {33.4095f,66.6667f},\r
+ {47.6952f,66.6667f},\r
+ {57.219f,61.9048f},\r
+ {61.981f,47.619f},\r
+ {61.981f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch109st2[] =\r
+{\r
+ {61.981f,47.619f},\r
+ {76.2667f,61.9048f},\r
+ {85.7905f,66.6667f},\r
+ {100.076f,66.6667f},\r
+ {109.6f,61.9048f},\r
+ {114.362f,47.619f},\r
+ {114.362f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch109st[] =\r
+{\r
+ {2,ch109st0},\r
+ {7,ch109st1},\r
+ {7,ch109st2}\r
+};\r
+\r
+static const SFG_StrokeChar ch109 = {123.962f,3,ch109st};\r
+\r
+/* char: 0x6e */\r
+\r
+static const SFG_StrokeVertex ch110st0[] =\r
+{\r
+ {9.18f,66.6667f},\r
+ {9.18f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch110st1[] =\r
+{\r
+ {9.18f,47.619f},\r
+ {23.4657f,61.9048f},\r
+ {32.9895f,66.6667f},\r
+ {47.2752f,66.6667f},\r
+ {56.799f,61.9048f},\r
+ {61.561f,47.619f},\r
+ {61.561f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch110st[] =\r
+{\r
+ {2,ch110st0},\r
+ {7,ch110st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch110 = {70.881f,2,ch110st};\r
+\r
+/* char: 0x6f */\r
+\r
+static const SFG_StrokeVertex ch111st0[] =\r
+{\r
+ {28.7895f,66.6667f},\r
+ {19.2657f,61.9048f},\r
+ {9.7419f,52.381f},\r
+ {4.98f,38.0952f},\r
+ {4.98f,28.5714f},\r
+ {9.7419f,14.2857f},\r
+ {19.2657f,4.7619f},\r
+ {28.7895f,0.0f},\r
+ {43.0752f,0.0f},\r
+ {52.599f,4.7619f},\r
+ {62.1229f,14.2857f},\r
+ {66.8848f,28.5714f},\r
+ {66.8848f,38.0952f},\r
+ {62.1229f,52.381f},\r
+ {52.599f,61.9048f},\r
+ {43.0752f,66.6667f},\r
+ {28.7895f,66.6667f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch111st[] =\r
+{\r
+ {17,ch111st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch111 = {71.7448f,1,ch111st};\r
+\r
+/* char: 0x70 */\r
+\r
+static const SFG_StrokeVertex ch112st0[] =\r
+{\r
+ {9.46f,66.6667f},\r
+ {9.46f,-33.3333f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch112st1[] =\r
+{\r
+ {9.46f,52.381f},\r
+ {18.9838f,61.9048f},\r
+ {28.5076f,66.6667f},\r
+ {42.7933f,66.6667f},\r
+ {52.3171f,61.9048f},\r
+ {61.841f,52.381f},\r
+ {66.6029f,38.0952f},\r
+ {66.6029f,28.5714f},\r
+ {61.841f,14.2857f},\r
+ {52.3171f,4.7619f},\r
+ {42.7933f,0.0f},\r
+ {28.5076f,0.0f},\r
+ {18.9838f,4.7619f},\r
+ {9.46f,14.2857f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch112st[] =\r
+{\r
+ {2,ch112st0},\r
+ {14,ch112st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch112 = {70.8029f,2,ch112st};\r
+\r
+/* char: 0x71 */\r
+\r
+static const SFG_StrokeVertex ch113st0[] =\r
+{\r
+ {61.9829f,66.6667f},\r
+ {61.9829f,-33.3333f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch113st1[] =\r
+{\r
+ {61.9829f,52.381f},\r
+ {52.459f,61.9048f},\r
+ {42.9352f,66.6667f},\r
+ {28.6495f,66.6667f},\r
+ {19.1257f,61.9048f},\r
+ {9.6019f,52.381f},\r
+ {4.84f,38.0952f},\r
+ {4.84f,28.5714f},\r
+ {9.6019f,14.2857f},\r
+ {19.1257f,4.7619f},\r
+ {28.6495f,0.0f},\r
+ {42.9352f,0.0f},\r
+ {52.459f,4.7619f},\r
+ {61.9829f,14.2857f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch113st[] =\r
+{\r
+ {2,ch113st0},\r
+ {14,ch113st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch113 = {70.7429f,2,ch113st};\r
+\r
+/* char: 0x72 */\r
+\r
+static const SFG_StrokeVertex ch114st0[] =\r
+{\r
+ {9.46f,66.6667f},\r
+ {9.46f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch114st1[] =\r
+{\r
+ {9.46f,38.0952f},\r
+ {14.2219f,52.381f},\r
+ {23.7457f,61.9048f},\r
+ {33.2695f,66.6667f},\r
+ {47.5552f,66.6667f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch114st[] =\r
+{\r
+ {2,ch114st0},\r
+ {5,ch114st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch114 = {49.4952f,2,ch114st};\r
+\r
+/* char: 0x73 */\r
+\r
+static const SFG_StrokeVertex ch115st0[] =\r
+{\r
+ {57.081f,52.381f},\r
+ {52.319f,61.9048f},\r
+ {38.0333f,66.6667f},\r
+ {23.7476f,66.6667f},\r
+ {9.4619f,61.9048f},\r
+ {4.7f,52.381f},\r
+ {9.4619f,42.8571f},\r
+ {18.9857f,38.0952f},\r
+ {42.7952f,33.3333f},\r
+ {52.319f,28.5714f},\r
+ {57.081f,19.0476f},\r
+ {57.081f,14.2857f},\r
+ {52.319f,4.7619f},\r
+ {38.0333f,0.0f},\r
+ {23.7476f,0.0f},\r
+ {9.4619f,4.7619f},\r
+ {4.7f,14.2857f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch115st[] =\r
+{\r
+ {17,ch115st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch115 = {62.321f,1,ch115st};\r
+\r
+/* char: 0x74 */\r
+\r
+static const SFG_StrokeVertex ch116st0[] =\r
+{\r
+ {14.8257f,100.0f},\r
+ {14.8257f,19.0476f},\r
+ {19.5876f,4.7619f},\r
+ {29.1114f,0.0f},\r
+ {38.6352f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch116st1[] =\r
+{\r
+ {0.54f,66.6667f},\r
+ {33.8733f,66.6667f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch116st[] =\r
+{\r
+ {5,ch116st0},\r
+ {2,ch116st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch116 = {39.3152f,2,ch116st};\r
+\r
+/* char: 0x75 */\r
+\r
+static const SFG_StrokeVertex ch117st0[] =\r
+{\r
+ {9.46f,66.6667f},\r
+ {9.46f,19.0476f},\r
+ {14.2219f,4.7619f},\r
+ {23.7457f,0.0f},\r
+ {38.0314f,0.0f},\r
+ {47.5552f,4.7619f},\r
+ {61.841f,19.0476f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch117st1[] =\r
+{\r
+ {61.841f,66.6667f},\r
+ {61.841f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch117st[] =\r
+{\r
+ {7,ch117st0},\r
+ {2,ch117st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch117 = {71.161f,2,ch117st};\r
+\r
+/* char: 0x76 */\r
+\r
+static const SFG_StrokeVertex ch118st0[] =\r
+{\r
+ {1.8f,66.6667f},\r
+ {30.3714f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch118st1[] =\r
+{\r
+ {58.9429f,66.6667f},\r
+ {30.3714f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch118st[] =\r
+{\r
+ {2,ch118st0},\r
+ {2,ch118st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch118 = {60.6029f,2,ch118st};\r
+\r
+/* char: 0x77 */\r
+\r
+static const SFG_StrokeVertex ch119st0[] =\r
+{\r
+ {2.5f,66.6667f},\r
+ {21.5476f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch119st1[] =\r
+{\r
+ {40.5952f,66.6667f},\r
+ {21.5476f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch119st2[] =\r
+{\r
+ {40.5952f,66.6667f},\r
+ {59.6429f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch119st3[] =\r
+{\r
+ {78.6905f,66.6667f},\r
+ {59.6429f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch119st[] =\r
+{\r
+ {2,ch119st0},\r
+ {2,ch119st1},\r
+ {2,ch119st2},\r
+ {2,ch119st3}\r
+};\r
+\r
+static const SFG_StrokeChar ch119 = {80.4905f,4,ch119st};\r
+\r
+/* char: 0x78 */\r
+\r
+static const SFG_StrokeVertex ch120st0[] =\r
+{\r
+ {1.66f,66.6667f},\r
+ {54.041f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch120st1[] =\r
+{\r
+ {54.041f,66.6667f},\r
+ {1.66f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch120st[] =\r
+{\r
+ {2,ch120st0},\r
+ {2,ch120st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch120 = {56.401f,2,ch120st};\r
+\r
+/* char: 0x79 */\r
+\r
+static const SFG_StrokeVertex ch121st0[] =\r
+{\r
+ {6.5619f,66.6667f},\r
+ {35.1333f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch121st1[] =\r
+{\r
+ {63.7048f,66.6667f},\r
+ {35.1333f,0.0f},\r
+ {25.6095f,-19.0476f},\r
+ {16.0857f,-28.5714f},\r
+ {6.5619f,-33.3333f},\r
+ {1.8f,-33.3333f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch121st[] =\r
+{\r
+ {2,ch121st0},\r
+ {6,ch121st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch121 = {66.0648f,2,ch121st};\r
+\r
+/* char: 0x7a */\r
+\r
+static const SFG_StrokeVertex ch122st0[] =\r
+{\r
+ {56.821f,66.6667f},\r
+ {4.44f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch122st1[] =\r
+{\r
+ {4.44f,66.6667f},\r
+ {56.821f,66.6667f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch122st2[] =\r
+{\r
+ {4.44f,0.0f},\r
+ {56.821f,0.0f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch122st[] =\r
+{\r
+ {2,ch122st0},\r
+ {2,ch122st1},\r
+ {2,ch122st2}\r
+};\r
+\r
+static const SFG_StrokeChar ch122 = {61.821f,3,ch122st};\r
+\r
+/* char: 0x7b */\r
+\r
+static const SFG_StrokeVertex ch123st0[] =\r
+{\r
+ {31.1895f,119.048f},\r
+ {21.6657f,114.286f},\r
+ {16.9038f,109.524f},\r
+ {12.1419f,100.0f},\r
+ {12.1419f,90.4762f},\r
+ {16.9038f,80.9524f},\r
+ {21.6657f,76.1905f},\r
+ {26.4276f,66.6667f},\r
+ {26.4276f,57.1429f},\r
+ {16.9038f,47.619f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch123st1[] =\r
+{\r
+ {21.6657f,114.286f},\r
+ {16.9038f,104.762f},\r
+ {16.9038f,95.2381f},\r
+ {21.6657f,85.7143f},\r
+ {26.4276f,80.9524f},\r
+ {31.1895f,71.4286f},\r
+ {31.1895f,61.9048f},\r
+ {26.4276f,52.381f},\r
+ {7.38f,42.8571f},\r
+ {26.4276f,33.3333f},\r
+ {31.1895f,23.8095f},\r
+ {31.1895f,14.2857f},\r
+ {26.4276f,4.7619f},\r
+ {21.6657f,0.0f},\r
+ {16.9038f,-9.5238f},\r
+ {16.9038f,-19.0476f},\r
+ {21.6657f,-28.5714f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch123st2[] =\r
+{\r
+ {16.9038f,38.0952f},\r
+ {26.4276f,28.5714f},\r
+ {26.4276f,19.0476f},\r
+ {21.6657f,9.5238f},\r
+ {16.9038f,4.7619f},\r
+ {12.1419f,-4.7619f},\r
+ {12.1419f,-14.2857f},\r
+ {16.9038f,-23.8095f},\r
+ {21.6657f,-28.5714f},\r
+ {31.1895f,-33.3333f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch123st[] =\r
+{\r
+ {10,ch123st0},\r
+ {17,ch123st1},\r
+ {10,ch123st2}\r
+};\r
+\r
+static const SFG_StrokeChar ch123 = {41.6295f,3,ch123st};\r
+\r
+/* char: 0x7c */\r
+\r
+static const SFG_StrokeVertex ch124st0[] =\r
+{\r
+ {11.54f,119.048f},\r
+ {11.54f,-33.3333f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch124st[] =\r
+{\r
+ {2,ch124st0}\r
+};\r
+\r
+static const SFG_StrokeChar ch124 = {23.78f,1,ch124st};\r
+\r
+/* char: 0x7d */\r
+\r
+static const SFG_StrokeVertex ch125st0[] =\r
+{\r
+ {9.18f,119.048f},\r
+ {18.7038f,114.286f},\r
+ {23.4657f,109.524f},\r
+ {28.2276f,100.0f},\r
+ {28.2276f,90.4762f},\r
+ {23.4657f,80.9524f},\r
+ {18.7038f,76.1905f},\r
+ {13.9419f,66.6667f},\r
+ {13.9419f,57.1429f},\r
+ {23.4657f,47.619f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch125st1[] =\r
+{\r
+ {18.7038f,114.286f},\r
+ {23.4657f,104.762f},\r
+ {23.4657f,95.2381f},\r
+ {18.7038f,85.7143f},\r
+ {13.9419f,80.9524f},\r
+ {9.18f,71.4286f},\r
+ {9.18f,61.9048f},\r
+ {13.9419f,52.381f},\r
+ {32.9895f,42.8571f},\r
+ {13.9419f,33.3333f},\r
+ {9.18f,23.8095f},\r
+ {9.18f,14.2857f},\r
+ {13.9419f,4.7619f},\r
+ {18.7038f,0.0f},\r
+ {23.4657f,-9.5238f},\r
+ {23.4657f,-19.0476f},\r
+ {18.7038f,-28.5714f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch125st2[] =\r
+{\r
+ {23.4657f,38.0952f},\r
+ {13.9419f,28.5714f},\r
+ {13.9419f,19.0476f},\r
+ {18.7038f,9.5238f},\r
+ {23.4657f,4.7619f},\r
+ {28.2276f,-4.7619f},\r
+ {28.2276f,-14.2857f},\r
+ {23.4657f,-23.8095f},\r
+ {18.7038f,-28.5714f},\r
+ {9.18f,-33.3333f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch125st[] =\r
+{\r
+ {10,ch125st0},\r
+ {17,ch125st1},\r
+ {10,ch125st2}\r
+};\r
+\r
+static const SFG_StrokeChar ch125 = {41.4695f,3,ch125st};\r
+\r
+/* char: 0x7e */\r
+\r
+static const SFG_StrokeVertex ch126st0[] =\r
+{\r
+ {2.92f,28.5714f},\r
+ {2.92f,38.0952f},\r
+ {7.6819f,52.381f},\r
+ {17.2057f,57.1429f},\r
+ {26.7295f,57.1429f},\r
+ {36.2533f,52.381f},\r
+ {55.301f,38.0952f},\r
+ {64.8248f,33.3333f},\r
+ {74.3486f,33.3333f},\r
+ {83.8724f,38.0952f},\r
+ {88.6343f,47.619f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch126st1[] =\r
+{\r
+ {2.92f,38.0952f},\r
+ {7.6819f,47.619f},\r
+ {17.2057f,52.381f},\r
+ {26.7295f,52.381f},\r
+ {36.2533f,47.619f},\r
+ {55.301f,33.3333f},\r
+ {64.8248f,28.5714f},\r
+ {74.3486f,28.5714f},\r
+ {83.8724f,33.3333f},\r
+ {88.6343f,47.619f},\r
+ {88.6343f,57.1429f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch126st[] =\r
+{\r
+ {11,ch126st0},\r
+ {11,ch126st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch126 = {91.2743f,2,ch126st};\r
+\r
+/* char: 0x7f */\r
+\r
+static const SFG_StrokeVertex ch127st0[] =\r
+{\r
+ {52.381f,100.0f},\r
+ {14.2857f,-33.3333f}\r
+};\r
+\r
+static const SFG_StrokeVertex ch127st1[] =\r
+{\r
+ {28.5714f,66.6667f},\r
+ {14.2857f,61.9048f},\r
+ {4.7619f,52.381f},\r
+ {0.0f,38.0952f},\r
+ {0.0f,23.8095f},\r
+ {4.7619f,14.2857f},\r
+ {14.2857f,4.7619f},\r
+ {28.5714f,0.0f},\r
+ {38.0952f,0.0f},\r
+ {52.381f,4.7619f},\r
+ {61.9048f,14.2857f},\r
+ {66.6667f,28.5714f},\r
+ {66.6667f,42.8571f},\r
+ {61.9048f,52.381f},\r
+ {52.381f,61.9048f},\r
+ {38.0952f,66.6667f},\r
+ {28.5714f,66.6667f}\r
+};\r
+\r
+static const SFG_StrokeStrip ch127st[] =\r
+{\r
+ {2,ch127st0},\r
+ {17,ch127st1}\r
+};\r
+\r
+static const SFG_StrokeChar ch127 = {66.6667f,2,ch127st};\r
+\r
+static const SFG_StrokeChar *chars[] =\r
+{\r
+ 0, 0, 0, 0, 0, 0, 0, 0,\r
+ 0, 0, 0, 0, 0, 0, 0, 0,\r
+ 0, 0, 0, 0, 0, 0, 0, 0,\r
+ 0, 0, 0, 0, 0, 0, 0, 0,\r
+ &ch32, &ch33, &ch34, &ch35, &ch36, &ch37, &ch38, &ch39,\r
+ &ch40, &ch41, &ch42, &ch43, &ch44, &ch45, &ch46, &ch47,\r
+ &ch48, &ch49, &ch50, &ch51, &ch52, &ch53, &ch54, &ch55,\r
+ &ch56, &ch57, &ch58, &ch59, &ch60, &ch61, &ch62, &ch63,\r
+ &ch64, &ch65, &ch66, &ch67, &ch68, &ch69, &ch70, &ch71,\r
+ &ch72, &ch73, &ch74, &ch75, &ch76, &ch77, &ch78, &ch79,\r
+ &ch80, &ch81, &ch82, &ch83, &ch84, &ch85, &ch86, &ch87,\r
+ &ch88, &ch89, &ch90, &ch91, &ch92, &ch93, &ch94, &ch95,\r
+ &ch96, &ch97, &ch98, &ch99, &ch100, &ch101, &ch102, &ch103,\r
+ &ch104, &ch105, &ch106, &ch107, &ch108, &ch109, &ch110, &ch111,\r
+ &ch112, &ch113, &ch114, &ch115, &ch116, &ch117, &ch118, &ch119,\r
+ &ch120, &ch121, &ch122, &ch123, &ch124, &ch125, &ch126, &ch127\r
+};\r
+\r
+const SFG_StrokeFont fgStrokeRoman = {"Roman",128,152.381f,chars};\r
diff --git a/src/Common/freeglut_structure.c b/src/Common/freeglut_structure.c
new file mode 100644 (file)
index 0000000..4ae0e1f
--- /dev/null
@@ -0,0 +1,598 @@
+/*\r
+ * freeglut_structure.c\r
+ *\r
+ * Windows and menus need tree structure\r
+ *\r
+ * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.\r
+ * Written by Pawel W. Olszta, <olszta@sourceforge.net>\r
+ * Creation date: Sat Dec 18 1999\r
+ *\r
+ * Permission is hereby granted, free of charge, to any person obtaining a\r
+ * copy of this software and associated documentation files (the "Software"),\r
+ * to deal in the Software without restriction, including without limitation\r
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
+ * and/or sell copies of the Software, and to permit persons to whom the\r
+ * Software is furnished to do so, subject to the following conditions:\r
+ *\r
+ * The above copyright notice and this permission notice shall be included\r
+ * in all copies or substantial portions of the Software.\r
+ *\r
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL\r
+ * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
+ */\r
+\r
+#include <GL/freeglut.h>\r
+#include "freeglut_internal.h"\r
+\r
+/* -- GLOBAL EXPORTS ------------------------------------------------------- */\r
+\r
+/*\r
+ * The SFG_Structure container holds information about windows and menus\r
+ * created between glutInit() and glutMainLoop() return.\r
+ */\r
+\r
+SFG_Structure fgStructure = { { NULL, NULL },  /* The list of windows       */\r
+                              { NULL, NULL },  /* The list of menus         */\r
+                              { NULL, NULL },  /* Windows to Destroy list   */\r
+                              NULL,            /* The current window        */\r
+                              NULL,            /* The current menu          */\r
+                              NULL,            /* The menu OpenGL context   */\r
+                              NULL,            /* The game mode window      */\r
+                              0,               /* The current new window ID */\r
+                              0 };             /* The current new menu ID   */\r
+\r
+\r
+/* -- PRIVATE FUNCTIONS ---------------------------------------------------- */\r
+\r
+static void fghClearCallBacks( SFG_Window *window )\r
+{\r
+    if( window )\r
+    {\r
+        int i;\r
+        for( i = 0; i < TOTAL_CALLBACKS; ++i )\r
+            window->CallBacks[ i ] = NULL;\r
+    }\r
+}\r
+\r
+/*\r
+ * This private function creates, opens and adds to the hierarchy\r
+ * a freeglut window complete with OpenGL context and stuff...\r
+ *\r
+ * If parent is set to NULL, the window created will be a topmost one.\r
+ */\r
+SFG_Window* fgCreateWindow( SFG_Window* parent, const char* title,\r
+                            GLboolean positionUse, int x, int y,\r
+                            GLboolean sizeUse, int w, int h,\r
+                            GLboolean gameMode, GLboolean isMenu )\r
+{\r
+    /* Have the window object created */\r
+    SFG_Window *window = (SFG_Window *)calloc( sizeof(SFG_Window), 1 );\r
+\r
+#if TARGET_HOST_UNIX_X11\r
+    window->Window.FBConfig = NULL;\r
+#endif\r
+    fghClearCallBacks( window );\r
+\r
+    /* Initialize the object properties */\r
+    window->ID = ++fgStructure.WindowID;\r
+#if TARGET_HOST_POSIX_X11\r
+    window->State.OldHeight = window->State.OldWidth = -1;\r
+#endif\r
+\r
+    fgListInit( &window->Children );\r
+    if( parent )\r
+    {\r
+        fgListAppend( &parent->Children, &window->Node );\r
+        window->Parent = parent;\r
+    }\r
+    else\r
+        fgListAppend( &fgStructure.Windows, &window->Node );\r
+\r
+    /* Set the default mouse cursor and reset the modifiers value */\r
+    window->State.Cursor    = GLUT_CURSOR_INHERIT;\r
+\r
+    window->IsMenu = isMenu;\r
+\r
+    window->State.IgnoreKeyRepeat = GL_FALSE;\r
+    window->State.KeyRepeating    = GL_FALSE;\r
+    window->State.IsFullscreen    = GL_FALSE;\r
+\r
+    /*\r
+     * Open the window now. The fgOpenWindow() function is system\r
+     * dependant, and resides in freeglut_window.c. Uses fgState.\r
+     */\r
+    fgOpenWindow( window, title, positionUse, x, y, sizeUse, w, h, gameMode,\r
+                  (GLboolean)(parent ? GL_TRUE : GL_FALSE) );\r
+\r
+    return window;\r
+}\r
+\r
+/*\r
+ * This private function creates a menu and adds it to the menus list\r
+ */\r
+SFG_Menu* fgCreateMenu( FGCBMenu menuCallback )\r
+{\r
+    int x = 100, y = 100, w = 1, h = 1;\r
+    SFG_Window *current_window = fgStructure.CurrentWindow;\r
+\r
+    /* Have the menu object created */\r
+    SFG_Menu* menu = (SFG_Menu *)calloc( sizeof(SFG_Menu), 1 );\r
+\r
+    menu->ParentWindow = NULL;\r
+\r
+    /* Create a window for the menu to reside in. */\r
+\r
+    fgCreateWindow( NULL, "freeglut menu", GL_TRUE, x, y, GL_TRUE, w, h,\r
+                    GL_FALSE, GL_TRUE );\r
+    menu->Window = fgStructure.CurrentWindow;\r
+    glutDisplayFunc( fgDisplayMenu );\r
+\r
+    glutHideWindow( );  /* Hide the window for now */\r
+    fgSetWindow( current_window );\r
+\r
+    /* Initialize the object properties: */\r
+    menu->ID       = ++fgStructure.MenuID;\r
+    menu->Callback = menuCallback;\r
+    menu->ActiveEntry = NULL;\r
+\r
+    fgListInit( &menu->Entries );\r
+    fgListAppend( &fgStructure.Menus, &menu->Node );\r
+\r
+    /* Newly created menus implicitly become current ones */\r
+    fgStructure.CurrentMenu = menu;\r
+\r
+    return menu;\r
+}\r
+\r
+/*\r
+ * Function to add a window to the linked list of windows to destroy.\r
+ * Subwindows are automatically added because they hang from the window\r
+ * structure.\r
+ */\r
+void fgAddToWindowDestroyList( SFG_Window* window )\r
+{\r
+    SFG_WindowList *new_list_entry =\r
+        ( SFG_WindowList* )malloc( sizeof(SFG_WindowList ) );\r
+    new_list_entry->window = window;\r
+    fgListAppend( &fgStructure.WindowsToDestroy, &new_list_entry->node );\r
+\r
+    /* Check if the window is the current one... */\r
+    if( fgStructure.CurrentWindow == window )\r
+        fgStructure.CurrentWindow = NULL;\r
+\r
+    /*\r
+     * Clear all window callbacks except Destroy, which will\r
+     * be invoked later.  Right now, we are potentially carrying\r
+     * out a freeglut operation at the behest of a client callback,\r
+     * so we are reluctant to re-enter the client with the Destroy\r
+     * callback, right now.  The others are all wiped out, however,\r
+     * to ensure that they are no longer called after this point.\r
+     */\r
+    {\r
+        FGCBDestroy destroy = (FGCBDestroy)FETCH_WCB( *window, Destroy );\r
+        fghClearCallBacks( window );\r
+        SET_WCB( *window, Destroy, destroy );\r
+    }\r
+}\r
+\r
+/*\r
+ * Function to close down all the windows in the "WindowsToDestroy" list\r
+ */\r
+void fgCloseWindows( )\r
+{\r
+    while( fgStructure.WindowsToDestroy.First )\r
+    {\r
+        SFG_WindowList *window_ptr = fgStructure.WindowsToDestroy.First;\r
+        fgDestroyWindow( window_ptr->window );\r
+        fgListRemove( &fgStructure.WindowsToDestroy, &window_ptr->node );\r
+        free( window_ptr );\r
+    }\r
+}\r
+\r
+/*\r
+ * This function destroys a window and all of its subwindows. Actually,\r
+ * another function, defined in freeglut_window.c is called, but this is\r
+ * a whole different story...\r
+ */\r
+void fgDestroyWindow( SFG_Window* window )\r
+{\r
+    FREEGLUT_INTERNAL_ERROR_EXIT ( window, "Window destroy function called with null window",\r
+                                   "fgDestroyWindow" );\r
+\r
+    while( window->Children.First )\r
+        fgDestroyWindow( ( SFG_Window * )window->Children.First );\r
+\r
+    {\r
+        SFG_Window *activeWindow = fgStructure.CurrentWindow;\r
+        INVOKE_WCB( *window, Destroy, ( ) );\r
+        fgSetWindow( activeWindow );\r
+    }\r
+\r
+    if( window->Parent )\r
+        fgListRemove( &window->Parent->Children, &window->Node );\r
+    else\r
+        fgListRemove( &fgStructure.Windows, &window->Node );\r
+\r
+    if( window->ActiveMenu )\r
+      fgDeactivateMenu( window );\r
+\r
+    fghClearCallBacks( window );\r
+    fgCloseWindow( window );\r
+    free( window );\r
+    if( fgStructure.CurrentWindow == window )\r
+        fgStructure.CurrentWindow = NULL;\r
+}\r
+\r
+/*\r
+ * This is a helper static function that removes a menu (given its pointer)\r
+ * from any windows that can be accessed from a given parent...\r
+ */\r
+static void fghRemoveMenuFromWindow( SFG_Window* window, SFG_Menu* menu )\r
+{\r
+    SFG_Window *subWindow;\r
+    int i;\r
+\r
+    /* Check whether this is the active menu in the window */\r
+    if ( menu == window->ActiveMenu )\r
+        window->ActiveMenu = NULL ;\r
+\r
+    /*\r
+     * Check if the menu is attached to the current window,\r
+     * if so, have it detached (by overwriting with a NULL):\r
+     */\r
+    for( i = 0; i < FREEGLUT_MAX_MENUS; i++ )\r
+        if( window->Menu[ i ] == menu )\r
+            window->Menu[ i ] = NULL;\r
+\r
+    /* Call this function for all of the window's children recursively: */\r
+    for( subWindow = (SFG_Window *)window->Children.First;\r
+         subWindow;\r
+         subWindow = (SFG_Window *)subWindow->Node.Next)\r
+        fghRemoveMenuFromWindow( subWindow, menu );\r
+}\r
+\r
+/*\r
+ * This is a static helper function that removes menu references\r
+ * from another menu, given two pointers to them...\r
+ */\r
+static void fghRemoveMenuFromMenu( SFG_Menu* from, SFG_Menu* menu )\r
+{\r
+    SFG_MenuEntry *entry;\r
+\r
+    for( entry = (SFG_MenuEntry *)from->Entries.First;\r
+         entry;\r
+         entry = ( SFG_MenuEntry * )entry->Node.Next )\r
+        if( entry->SubMenu == menu )\r
+            entry->SubMenu = NULL;\r
+}\r
+\r
+/*\r
+ * This function destroys a menu specified by the parameter. All menus\r
+ * and windows are updated to make sure no ill pointers hang around.\r
+ */\r
+void fgDestroyMenu( SFG_Menu* menu )\r
+{\r
+    SFG_Window *window;\r
+    SFG_Menu *from;\r
+\r
+    FREEGLUT_INTERNAL_ERROR_EXIT ( menu, "Menu destroy function called with null menu",\r
+                                   "fgDestroyMenu" );\r
+\r
+    /* First of all, have all references to this menu removed from all windows: */\r
+    for( window = (SFG_Window *)fgStructure.Windows.First;\r
+         window;\r
+         window = (SFG_Window *)window->Node.Next )\r
+        fghRemoveMenuFromWindow( window, menu );\r
+\r
+    /* Now proceed with removing menu entries that lead to this menu */\r
+    for( from = ( SFG_Menu * )fgStructure.Menus.First;\r
+         from;\r
+         from = ( SFG_Menu * )from->Node.Next )\r
+        fghRemoveMenuFromMenu( from, menu );\r
+\r
+    /*\r
+     * If the programmer defined a destroy callback, call it\r
+     * A. Donev: But first make this the active menu\r
+     */\r
+    if( menu->Destroy )\r
+    {\r
+        SFG_Menu *activeMenu=fgStructure.CurrentMenu;\r
+        fgStructure.CurrentMenu = menu;\r
+        menu->Destroy( );\r
+        fgStructure.CurrentMenu = activeMenu;\r
+    }\r
+\r
+    /*\r
+     * Now we are pretty sure the menu is not used anywhere\r
+     * and that we can remove all of its entries\r
+     */\r
+    while( menu->Entries.First )\r
+    {\r
+        SFG_MenuEntry *entry = ( SFG_MenuEntry * ) menu->Entries.First;\r
+\r
+        fgListRemove( &menu->Entries, &entry->Node );\r
+\r
+        if( entry->Text )\r
+            free( entry->Text );\r
+        entry->Text = NULL;\r
+\r
+        free( entry );\r
+    }\r
+\r
+    if( fgStructure.CurrentWindow == menu->Window )\r
+        fgSetWindow( NULL );\r
+    fgDestroyWindow( menu->Window );\r
+    fgListRemove( &fgStructure.Menus, &menu->Node );\r
+    if( fgStructure.CurrentMenu == menu )\r
+        fgStructure.CurrentMenu = NULL;\r
+\r
+    free( menu );\r
+}\r
+\r
+/*\r
+ * This function should be called on glutInit(). It will prepare the internal\r
+ * structure of freeglut to be used in the application. The structure will be\r
+ * destroyed using fgDestroyStructure() on glutMainLoop() return. In that\r
+ * case further use of freeglut should be preceeded with a glutInit() call.\r
+ */\r
+void fgCreateStructure( void )\r
+{\r
+    /*\r
+     * We will be needing two lists: the first containing windows,\r
+     * and the second containing the user-defined menus.\r
+     * Also, no current window/menu is set, as none has been created yet.\r
+     */\r
+\r
+    fgListInit(&fgStructure.Windows);\r
+    fgListInit(&fgStructure.Menus);\r
+    fgListInit(&fgStructure.WindowsToDestroy);\r
+\r
+    fgStructure.CurrentWindow = NULL;\r
+    fgStructure.CurrentMenu = NULL;\r
+    fgStructure.MenuContext = NULL;\r
+    fgStructure.GameModeWindow = NULL;\r
+    fgStructure.WindowID = 0;\r
+    fgStructure.MenuID = 0;\r
+}\r
+\r
+/*\r
+ * This function is automatically called on glutMainLoop() return.\r
+ * It should deallocate and destroy all remnants of previous\r
+ * glutInit()-enforced structure initialization...\r
+ */\r
+void fgDestroyStructure( void )\r
+{\r
+    /* Clean up the WindowsToDestroy list. */\r
+    fgCloseWindows( );\r
+\r
+    /* Make sure all windows and menus have been deallocated */\r
+    while( fgStructure.Menus.First )\r
+        fgDestroyMenu( ( SFG_Menu * )fgStructure.Menus.First );\r
+\r
+    while( fgStructure.Windows.First )\r
+        fgDestroyWindow( ( SFG_Window * )fgStructure.Windows.First );\r
+}\r
+\r
+/*\r
+ * Helper function to enumerate through all registered top-level windows\r
+ */\r
+void fgEnumWindows( FGCBenumerator enumCallback, SFG_Enumerator* enumerator )\r
+{\r
+    SFG_Window *window;\r
+\r
+    FREEGLUT_INTERNAL_ERROR_EXIT ( enumCallback && enumerator,\r
+                                   "Enumerator or callback missing from window enumerator call",\r
+                                   "fgEnumWindows" );\r
+\r
+    /* Check every of the top-level windows */\r
+    for( window = ( SFG_Window * )fgStructure.Windows.First;\r
+         window;\r
+         window = ( SFG_Window * )window->Node.Next )\r
+    {\r
+        enumCallback( window, enumerator );\r
+        if( enumerator->found )\r
+            return;\r
+    }\r
+}\r
+\r
+/*\r
+ * Helper function to enumerate through all a window's subwindows\r
+ * (single level descent)\r
+ */\r
+void fgEnumSubWindows( SFG_Window* window, FGCBenumerator enumCallback,\r
+                       SFG_Enumerator* enumerator )\r
+{\r
+    SFG_Window *child;\r
+\r
+    FREEGLUT_INTERNAL_ERROR_EXIT ( enumCallback && enumerator,\r
+                                   "Enumerator or callback missing from subwindow enumerator call",\r
+                                   "fgEnumSubWindows" );\r
+    FREEGLUT_INTERNAL_ERROR_EXIT_IF_NOT_INITIALISED ( "Window Enumeration" );\r
+\r
+    for( child = ( SFG_Window * )window->Children.First;\r
+         child;\r
+         child = ( SFG_Window * )child->Node.Next )\r
+    {\r
+        enumCallback( child, enumerator );\r
+        if( enumerator->found )\r
+            return;\r
+    }\r
+}\r
+\r
+/*\r
+ * A static helper function to look for a window given its handle\r
+ */\r
+static void fghcbWindowByHandle( SFG_Window *window,\r
+                                 SFG_Enumerator *enumerator )\r
+{\r
+    if ( enumerator->found )\r
+        return;\r
+\r
+    /* Check the window's handle. Hope this works. Looks ugly. That's for sure. */\r
+    if( window->Window.Handle == (SFG_WindowHandleType) (enumerator->data) )\r
+    {\r
+        enumerator->found = GL_TRUE;\r
+        enumerator->data = window;\r
+\r
+        return;\r
+    }\r
+\r
+    /* Otherwise, check this window's children */\r
+    fgEnumSubWindows( window, fghcbWindowByHandle, enumerator );\r
+}\r
+\r
+/*\r
+ * fgWindowByHandle returns a (SFG_Window *) value pointing to the\r
+ * first window in the queue matching the specified window handle.\r
+ * The function is defined in freeglut_structure.c file.\r
+ */\r
+SFG_Window* fgWindowByHandle ( SFG_WindowHandleType hWindow )\r
+{\r
+    SFG_Enumerator enumerator;\r
+\r
+    /* This is easy and makes use of the windows enumeration defined above */\r
+    enumerator.found = GL_FALSE;\r
+    enumerator.data = (void *)hWindow;\r
+    fgEnumWindows( fghcbWindowByHandle, &enumerator );\r
+\r
+    if( enumerator.found )\r
+        return( SFG_Window *) enumerator.data;\r
+    return NULL;\r
+}\r
+\r
+/*\r
+ * A static helper function to look for a window given its ID\r
+ */\r
+static void fghcbWindowByID( SFG_Window *window, SFG_Enumerator *enumerator )\r
+{\r
+    /* Make sure we do not overwrite our precious results... */\r
+    if( enumerator->found )\r
+        return;\r
+\r
+    /* Check the window's handle. Hope this works. Looks ugly. That's for sure. */\r
+    if( window->ID == *( int *)(enumerator->data) )\r
+    {\r
+        enumerator->found = GL_TRUE;\r
+        enumerator->data = window;\r
+\r
+        return;\r
+    }\r
+\r
+    /* Otherwise, check this window's children */\r
+    fgEnumSubWindows( window, fghcbWindowByID, enumerator );\r
+}\r
+\r
+/*\r
+ * This function is similiar to the previous one, except it is\r
+ * looking for a specified (sub)window identifier. The function\r
+ * is defined in freeglut_structure.c file.\r
+ */\r
+SFG_Window* fgWindowByID( int windowID )\r
+{\r
+    SFG_Enumerator enumerator;\r
+\r
+    /* Uses a method very similiar for fgWindowByHandle... */\r
+    enumerator.found = GL_FALSE;\r
+    enumerator.data = ( void * )&windowID;\r
+    fgEnumWindows( fghcbWindowByID, &enumerator );\r
+    if( enumerator.found )\r
+        return ( SFG_Window * )enumerator.data;\r
+    return NULL;\r
+}\r
+\r
+/*\r
+ * Looks up a menu given its ID. This is easier that fgWindowByXXX\r
+ * as all menus are placed in one doubly linked list...\r
+ */\r
+SFG_Menu* fgMenuByID( int menuID )\r
+{\r
+    SFG_Menu *menu = NULL;\r
+\r
+    /* It's enough to check all entries in fgStructure.Menus... */\r
+    for( menu = (SFG_Menu *)fgStructure.Menus.First;\r
+         menu;\r
+         menu = (SFG_Menu *)menu->Node.Next )\r
+        if( menu->ID == menuID )\r
+            return menu;\r
+    return NULL;\r
+}\r
+\r
+/*\r
+ * List functions...\r
+ */\r
+void fgListInit(SFG_List *list)\r
+{\r
+    list->First = NULL;\r
+    list->Last = NULL;\r
+}\r
+\r
+void fgListAppend(SFG_List *list, SFG_Node *node)\r
+{\r
+    if ( list->Last )\r
+    {\r
+        SFG_Node *ln = (SFG_Node *) list->Last;\r
+        ln->Next = node;\r
+        node->Prev = ln;\r
+    }\r
+    else\r
+    {\r
+        node->Prev = NULL;\r
+        list->First = node;\r
+    }\r
+\r
+    node->Next = NULL;\r
+    list->Last = node;\r
+}\r
+\r
+void fgListRemove(SFG_List *list, SFG_Node *node)\r
+{\r
+    if( node->Next )\r
+        ( ( SFG_Node * )node->Next )->Prev = node->Prev;\r
+    if( node->Prev )\r
+        ( ( SFG_Node * )node->Prev )->Next = node->Next;\r
+    if( ( ( SFG_Node * )list->First ) == node )\r
+        list->First = node->Next;\r
+    if( ( ( SFG_Node * )list->Last ) == node )\r
+        list->Last = node->Prev;\r
+}\r
+\r
+int fgListLength(SFG_List *list)\r
+{\r
+    SFG_Node *node;\r
+    int length = 0;\r
+\r
+    for( node =( SFG_Node * )list->First;\r
+         node;\r
+         node = ( SFG_Node * )node->Next )\r
+        ++length;\r
+\r
+    return length;\r
+}\r
+\r
+\r
+void fgListInsert(SFG_List *list, SFG_Node *next, SFG_Node *node)\r
+{\r
+    SFG_Node *prev;\r
+\r
+    if( (node->Next = next) )\r
+    {\r
+        prev = next->Prev;\r
+        next->Prev = node;\r
+    }\r
+    else\r
+    {\r
+        prev = list->Last;\r
+        list->Last = node;\r
+    }\r
+\r
+    if( (node->Prev = prev) )\r
+        prev->Next = node;\r
+    else\r
+        list->First = node;\r
+}\r
+\r
+/*** END OF FILE ***/\r
diff --git a/src/Common/freeglut_teapot.c b/src/Common/freeglut_teapot.c
new file mode 100644 (file)
index 0000000..0c7da12
--- /dev/null
@@ -0,0 +1,200 @@
+/*\r
+ * freeglut_teapot.c\r
+ *\r
+ * Teapot(tm) rendering code.\r
+ *\r
+ * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.\r
+ * Written by Pawel W. Olszta, <olszta@sourceforge.net>\r
+ * Creation date: Fri Dec 24 1999\r
+ *\r
+ * Permission is hereby granted, free of charge, to any person obtaining a\r
+ * copy of this software and associated documentation files (the "Software"),\r
+ * to deal in the Software without restriction, including without limitation\r
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
+ * and/or sell copies of the Software, and to permit persons to whom the\r
+ * Software is furnished to do so, subject to the following conditions:\r
+ *\r
+ * The above copyright notice and this permission notice shall be included\r
+ * in all copies or substantial portions of the Software.\r
+ *\r
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL\r
+ * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
+ */\r
+\r
+/*\r
+ * Original teapot code copyright follows:\r
+ */\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 <GL/freeglut.h>\r
+#include "freeglut_internal.h"\r
+#include "freeglut_teapot_data.h"\r
+\r
+/* -- PRIVATE FUNCTIONS ---------------------------------------------------- */\r
+\r
+\r
+static void fghTeapot( GLint grid, GLdouble scale, GLenum type )\r
+{\r
+#if defined(_WIN32_WCE)\r
+               int i, numV=sizeof(strip_vertices)/4, numI=sizeof(strip_normals)/4;\r
+#else\r
+    double p[4][4][3], q[4][4][3], r[4][4][3], s[4][4][3];\r
+    long i, j, k, l;\r
+#endif\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
+\r
+    glPushMatrix();\r
+    glRotated( 270.0, 1.0, 0.0, 0.0 );\r
+    glScaled( 0.5 * scale, 0.5 * scale, 0.5 * scale );\r
+    glTranslated( 0.0, 0.0, -1.5 );\r
+\r
+#if defined(_WIN32_WCE)\r
+    glRotated( 90.0, 1.0, 0.0, 0.0 );\r
+    glBegin( GL_TRIANGLE_STRIP );\r
+\r
+    for( i = 0; i < numV-1; i++ )\r
+    {\r
+        int vidx = strip_vertices[i],\r
+            nidx = strip_normals[i];\r
+\r
+        if( vidx != -1 )\r
+        {\r
+            glNormal3fv( normals[nidx]  );\r
+            glVertex3fv( vertices[vidx] );\r
+        }\r
+        else\r
+        {\r
+            glEnd();\r
+            glBegin( GL_TRIANGLE_STRIP );\r
+        }\r
+    }\r
+\r
+    glEnd();\r
+#else\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
+\r
+      glMap2d(GL_MAP2_TEXTURE_COORD_2, 0.0, 1.0, 2, 2, 0.0, 1.0, 4, 2,\r
+        &tex[0][0][0]);\r
+      glMap2d(GL_MAP2_VERTEX_3, 0.0, 1.0, 3, 4, 0.0, 1.0, 12, 4,\r
+        &p[0][0][0]);\r
+      glMapGrid2d(grid, 0.0, 1.0, grid, 0.0, 1.0);\r
+      glEvalMesh2(type, 0, grid, 0, grid);\r
+      glMap2d(GL_MAP2_VERTEX_3, 0.0, 1.0, 3, 4, 0.0, 1.0, 12, 4,\r
+        &q[0][0][0]);\r
+      glEvalMesh2(type, 0, grid, 0, grid);\r
+      if (i < 6) {\r
+        glMap2d(GL_MAP2_VERTEX_3, 0.0, 1.0, 3, 4, 0.0, 1.0, 12, 4,\r
+          &r[0][0][0]);\r
+        glEvalMesh2(type, 0, grid, 0, grid);\r
+        glMap2d(GL_MAP2_VERTEX_3, 0.0, 1.0, 3, 4, 0.0, 1.0, 12, 4,\r
+          &s[0][0][0]);\r
+        glEvalMesh2(type, 0, grid, 0, grid);\r
+      }\r
+    }\r
+#endif  /* defined(_WIN32_WCE) */\r
+\r
+    glPopMatrix();\r
+    glPopAttrib();\r
+}\r
+\r
+\r
+/* -- INTERFACE FUNCTIONS -------------------------------------------------- */\r
+\r
+/*\r
+ * Renders a beautiful wired teapot...\r
+ */\r
+void FGAPIENTRY glutWireTeapot( GLdouble size )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutWireTeapot" );\r
+    /* We will use the general teapot rendering code */\r
+    fghTeapot( 10, size, GL_LINE );\r
+}\r
+\r
+/*\r
+ * Renders a beautiful filled teapot...\r
+ */\r
+void FGAPIENTRY glutSolidTeapot( GLdouble size )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSolidTeapot" );\r
+    /* We will use the general teapot rendering code */\r
+    fghTeapot( 7, size, GL_FILL );\r
+}\r
+\r
+/*** END OF FILE ***/\r
+\r
+\r
+\r
+\r
+\r
diff --git a/src/Common/freeglut_teapot_data.h b/src/Common/freeglut_teapot_data.h
new file mode 100644 (file)
index 0000000..183951b
--- /dev/null
@@ -0,0 +1,2429 @@
+/*\r
+ * freeglut_teapot_data.h\r
+ *\r
+ * The freeglut library teapot data include file.\r
+ *\r
+ * Permission is hereby granted, free of charge, to any person obtaining a\r
+ * copy of this software and associated documentation files (the "Software"),\r
+ * to deal in the Software without restriction, including without limitation\r
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
+ * and/or sell copies of the Software, and to permit persons to whom the\r
+ * Software is furnished to do so, subject to the following conditions:\r
+ *\r
+ * The above copyright notice and this permission notice shall be included\r
+ * in all copies or substantial portions of the Software.\r
+ *\r
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL\r
+ * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
+ */\r
+\r
+#ifndef  FREEGLUT_TEAPOT_DATA_H\r
+#define  FREEGLUT_TEAPOT_DATA_H\r
+\r
+#if defined(_WIN32_WCE)\r
+/*\r
+ * Submitted through the kind offices of Daniel Wagner (daniel@ims.tuwien.ac.at)\r
+ */\r
+\r
+/* 530 vertices */\r
+\r
+const int numVertices = 530;\r
+const float vertices[530][3] =  {\r
+2.1f, 3.6f, 0.0f, \r
+2.071f, 3.711f, 0.0f, \r
+2.105f, 3.748f, 0.0f, \r
+2.174f, 3.711f, 0.0f, \r
+2.25f, 3.6f, 0.0f, \r
+1.937f, 3.6f, 0.8242f, \r
+1.91f, 3.711f, 0.8128f, \r
+1.942f, 3.748f, 0.8261f, \r
+2.005f, 3.711f, 0.8532f, \r
+2.076f, 3.6f, 0.8831f, \r
+1.491f, 3.6f, 1.491f, \r
+1.47f, 3.711f, 1.47f, \r
+1.494f, 3.748f, 1.494f, \r
+1.543f, 3.711f, 1.543f, \r
+1.597f, 3.6f, 1.597f, \r
+0.8242f, 3.6f, 1.937f, \r
+0.8128f, 3.711f, 1.91f, \r
+0.8261f, 3.748f, 1.942f, \r
+0.8532f, 3.711f, 2.005f, \r
+0.8831f, 3.6f, 2.076f, \r
+0.0f, 3.6f, 2.1f, \r
+0.0f, 3.711f, 2.071f, \r
+0.0f, 3.748f, 2.105f, \r
+0.0f, 3.711f, 2.174f, \r
+0.0f, 3.6f, 2.25f, \r
+-0.8812f, 3.6f, 1.937f, \r
+-0.8368f, 3.711f, 1.91f, \r
+-0.8332f, 3.748f, 1.942f, \r
+-0.8541f, 3.711f, 2.005f, \r
+-0.8831f, 3.6f, 2.076f, \r
+-1.542f, 3.6f, 1.491f, \r
+-1.492f, 3.711f, 1.47f, \r
+-1.501f, 3.748f, 1.494f, \r
+-1.544f, 3.711f, 1.543f, \r
+-1.597f, 3.6f, 1.597f, \r
+-1.956f, 3.6f, 0.8242f, \r
+-1.918f, 3.711f, 0.8128f, \r
+-1.944f, 3.748f, 0.8261f, \r
+-2.006f, 3.711f, 0.8532f, \r
+-2.076f, 3.6f, 0.8831f, \r
+-2.1f, 3.6f, 0.0f, \r
+-2.071f, 3.711f, 0.0f, \r
+-2.105f, 3.748f, 0.0f, \r
+-2.174f, 3.711f, 0.0f, \r
+-2.25f, 3.6f, 0.0f, \r
+-1.937f, 3.6f, -0.8242f, \r
+-1.91f, 3.711f, -0.8128f, \r
+-1.942f, 3.748f, -0.8261f, \r
+-2.005f, 3.711f, -0.8532f, \r
+-2.076f, 3.6f, -0.8831f, \r
+-1.491f, 3.6f, -1.491f, \r
+-1.47f, 3.711f, -1.47f, \r
+-1.494f, 3.748f, -1.494f, \r
+-1.543f, 3.711f, -1.543f, \r
+-1.597f, 3.6f, -1.597f, \r
+-0.8242f, 3.6f, -1.937f, \r
+-0.8128f, 3.711f, -1.91f, \r
+-0.8261f, 3.748f, -1.942f, \r
+-0.8532f, 3.711f, -2.005f, \r
+-0.8831f, 3.6f, -2.076f, \r
+0.0f, 3.6f, -2.1f, \r
+0.0f, 3.711f, -2.071f, \r
+0.0f, 3.748f, -2.105f, \r
+0.0f, 3.711f, -2.174f, \r
+0.0f, 3.6f, -2.25f, \r
+0.8242f, 3.6f, -1.937f, \r
+0.8128f, 3.711f, -1.91f, \r
+0.8261f, 3.748f, -1.942f, \r
+0.8532f, 3.711f, -2.005f, \r
+0.8831f, 3.6f, -2.076f, \r
+1.491f, 3.6f, -1.491f, \r
+1.47f, 3.711f, -1.47f, \r
+1.494f, 3.748f, -1.494f, \r
+1.543f, 3.711f, -1.543f, \r
+1.597f, 3.6f, -1.597f, \r
+1.937f, 3.6f, -0.8242f, \r
+1.91f, 3.711f, -0.8128f, \r
+1.942f, 3.748f, -0.8261f, \r
+2.005f, 3.711f, -0.8532f, \r
+2.076f, 3.6f, -0.8831f, \r
+2.525f, 3.011f, 0.0f, \r
+2.766f, 2.433f, 0.0f, \r
+2.936f, 1.876f, 0.0f, \r
+3.0f, 1.35f, 0.0f, \r
+2.33f, 3.011f, 0.9912f, \r
+2.551f, 2.433f, 1.086f, \r
+2.708f, 1.876f, 1.152f, \r
+2.767f, 1.35f, 1.178f, \r
+1.793f, 3.011f, 1.793f, \r
+1.964f, 2.433f, 1.964f, \r
+2.084f, 1.876f, 2.084f, \r
+2.13f, 1.35f, 2.13f, \r
+0.9912f, 3.011f, 2.33f, \r
+1.086f, 2.433f, 2.551f, \r
+1.152f, 1.876f, 2.708f, \r
+1.178f, 1.35f, 2.767f, \r
+0.0f, 3.011f, 2.525f, \r
+0.0f, 2.433f, 2.766f, \r
+0.0f, 1.876f, 2.936f, \r
+0.0f, 1.35f, 3.0f, \r
+-0.9912f, 3.011f, 2.33f, \r
+-1.086f, 2.433f, 2.551f, \r
+-1.152f, 1.876f, 2.708f, \r
+-1.178f, 1.35f, 2.767f, \r
+-1.793f, 3.011f, 1.793f, \r
+-1.964f, 2.433f, 1.964f, \r
+-2.084f, 1.876f, 2.084f, \r
+-2.13f, 1.35f, 2.13f, \r
+-2.33f, 3.011f, 0.9912f, \r
+-2.551f, 2.433f, 1.086f, \r
+-2.708f, 1.876f, 1.152f, \r
+-2.767f, 1.35f, 1.178f, \r
+-2.525f, 3.011f, 0.0f, \r
+-2.766f, 2.433f, 0.0f, \r
+-2.936f, 1.876f, 0.0f, \r
+-3.0f, 1.35f, 0.0f, \r
+-2.33f, 3.011f, -0.9912f, \r
+-2.551f, 2.433f, -1.086f, \r
+-2.708f, 1.876f, -1.152f, \r
+-2.767f, 1.35f, -1.178f, \r
+-1.793f, 3.011f, -1.793f, \r
+-1.964f, 2.433f, -1.964f, \r
+-2.084f, 1.876f, -2.084f, \r
+-2.13f, 1.35f, -2.13f, \r
+-0.9912f, 3.011f, -2.33f, \r
+-1.086f, 2.433f, -2.551f, \r
+-1.152f, 1.876f, -2.708f, \r
+-1.178f, 1.35f, -2.767f, \r
+0.0f, 3.011f, -2.525f, \r
+0.0f, 2.433f, -2.766f, \r
+0.0f, 1.876f, -2.936f, \r
+0.0f, 1.35f, -3.0f, \r
+0.9912f, 3.011f, -2.33f, \r
+1.086f, 2.433f, -2.551f, \r
+1.152f, 1.876f, -2.708f, \r
+1.178f, 1.35f, -2.767f, \r
+1.793f, 3.011f, -1.793f, \r
+1.964f, 2.433f, -1.964f, \r
+2.084f, 1.876f, -2.084f, \r
+2.13f, 1.35f, -2.13f, \r
+2.33f, 3.011f, -0.9912f, \r
+2.551f, 2.433f, -1.086f, \r
+2.708f, 1.876f, -1.152f, \r
+2.767f, 1.35f, -1.178f, \r
+2.883f, 0.9053f, 0.0f, \r
+2.625f, 0.5766f, 0.0f, \r
+2.367f, 0.3533f, 0.0f, \r
+2.25f, 0.225f, 0.0f, \r
+2.659f, 0.9053f, 1.132f, \r
+2.422f, 0.5766f, 1.03f, \r
+2.184f, 0.3533f, 0.9291f, \r
+2.076f, 0.225f, 0.8831f, \r
+2.047f, 0.9053f, 2.047f, \r
+1.864f, 0.5766f, 1.864f, \r
+1.681f, 0.3533f, 1.681f, \r
+1.597f, 0.225f, 1.597f, \r
+1.132f, 0.9053f, 2.659f, \r
+1.03f, 0.5766f, 2.422f, \r
+0.9291f, 0.3533f, 2.184f, \r
+0.8831f, 0.225f, 2.076f, \r
+0.0f, 0.9053f, 2.883f, \r
+0.0f, 0.5766f, 2.625f, \r
+0.0f, 0.3533f, 2.367f, \r
+0.0f, 0.225f, 2.25f, \r
+-1.132f, 0.9053f, 2.659f, \r
+-1.03f, 0.5766f, 2.422f, \r
+-0.9291f, 0.3533f, 2.184f, \r
+-0.8831f, 0.225f, 2.076f, \r
+-2.047f, 0.9053f, 2.047f, \r
+-1.864f, 0.5766f, 1.864f, \r
+-1.681f, 0.3533f, 1.681f, \r
+-1.597f, 0.225f, 1.597f, \r
+-2.659f, 0.9053f, 1.132f, \r
+-2.422f, 0.5766f, 1.03f, \r
+-2.184f, 0.3533f, 0.9291f, \r
+-2.076f, 0.225f, 0.8831f, \r
+-2.883f, 0.9053f, 0.0f, \r
+-2.625f, 0.5766f, 0.0f, \r
+-2.367f, 0.3533f, 0.0f, \r
+-2.25f, 0.225f, 0.0f, \r
+-2.659f, 0.9053f, -1.132f, \r
+-2.422f, 0.5766f, -1.03f, \r
+-2.184f, 0.3533f, -0.9291f, \r
+-2.076f, 0.225f, -0.8831f, \r
+-2.047f, 0.9053f, -2.047f, \r
+-1.864f, 0.5766f, -1.864f, \r
+-1.681f, 0.3533f, -1.681f, \r
+-1.597f, 0.225f, -1.597f, \r
+-1.132f, 0.9053f, -2.659f, \r
+-1.03f, 0.5766f, -2.422f, \r
+-0.9291f, 0.3533f, -2.184f, \r
+-0.8831f, 0.225f, -2.076f, \r
+0.0f, 0.9053f, -2.883f, \r
+0.0f, 0.5766f, -2.625f, \r
+0.0f, 0.3533f, -2.367f, \r
+0.0f, 0.225f, -2.25f, \r
+1.132f, 0.9053f, -2.659f, \r
+1.03f, 0.5766f, -2.422f, \r
+0.9291f, 0.3533f, -2.184f, \r
+0.8831f, 0.225f, -2.076f, \r
+2.047f, 0.9053f, -2.047f, \r
+1.864f, 0.5766f, -1.864f, \r
+1.681f, 0.3533f, -1.681f, \r
+1.597f, 0.225f, -1.597f, \r
+2.659f, 0.9053f, -1.132f, \r
+2.422f, 0.5766f, -1.03f, \r
+2.184f, 0.3533f, -0.9291f, \r
+2.076f, 0.225f, -0.8831f, \r
+2.199f, 0.1424f, 0.0f, \r
+1.927f, 0.07031f, 0.0f, \r
+1.253f, 0.01934f, 0.0f, \r
+0.0f, 0.0f, 0.0f, \r
+2.029f, 0.1424f, 0.8631f, \r
+1.777f, 0.07031f, 0.7562f, \r
+1.156f, 0.01934f, 0.4919f, \r
+1.561f, 0.1424f, 1.561f, \r
+1.368f, 0.07031f, 1.368f, \r
+0.8899f, 0.01934f, 0.8899f, \r
+0.8631f, 0.1424f, 2.029f, \r
+0.7562f, 0.07031f, 1.777f, \r
+0.4919f, 0.01934f, 1.156f, \r
+0.0f, 0.1424f, 2.199f, \r
+0.0f, 0.07031f, 1.927f, \r
+0.0f, 0.01934f, 1.253f, \r
+-0.8631f, 0.1424f, 2.029f, \r
+-0.7562f, 0.07031f, 1.777f, \r
+-0.4919f, 0.01934f, 1.156f, \r
+-1.561f, 0.1424f, 1.561f, \r
+-1.368f, 0.07031f, 1.368f, \r
+-0.8899f, 0.01934f, 0.8899f, \r
+-2.029f, 0.1424f, 0.8631f, \r
+-1.777f, 0.07031f, 0.7562f, \r
+-1.156f, 0.01934f, 0.4919f, \r
+-2.199f, 0.1424f, 0.0f, \r
+-1.927f, 0.07031f, 0.0f, \r
+-1.253f, 0.01934f, 0.0f, \r
+-2.029f, 0.1424f, -0.8631f, \r
+-1.777f, 0.07031f, -0.7562f, \r
+-1.156f, 0.01934f, -0.4919f, \r
+-1.561f, 0.1424f, -1.561f, \r
+-1.368f, 0.07031f, -1.368f, \r
+-0.8899f, 0.01934f, -0.8899f, \r
+-0.8631f, 0.1424f, -2.029f, \r
+-0.7562f, 0.07031f, -1.777f, \r
+-0.4919f, 0.01934f, -1.156f, \r
+0.0f, 0.1424f, -2.199f, \r
+0.0f, 0.07031f, -1.927f, \r
+0.0f, 0.01934f, -1.253f, \r
+0.8631f, 0.1424f, -2.029f, \r
+0.7562f, 0.07031f, -1.777f, \r
+0.4919f, 0.01934f, -1.156f, \r
+1.561f, 0.1424f, -1.561f, \r
+1.368f, 0.07031f, -1.368f, \r
+0.8899f, 0.01934f, -0.8899f, \r
+2.029f, 0.1424f, -0.8631f, \r
+1.777f, 0.07031f, -0.7562f, \r
+1.156f, 0.01934f, -0.4919f, \r
+-2.4f, 3.038f, 0.0f, \r
+-3.101f, 3.032f, 0.0f, \r
+-3.619f, 2.995f, 0.0f, \r
+-3.94f, 2.895f, 0.0f, \r
+-4.05f, 2.7f, 0.0f, \r
+-2.377f, 3.09f, 0.2531f, \r
+-3.122f, 3.084f, 0.2531f, \r
+-3.669f, 3.041f, 0.2531f, \r
+-4.005f, 2.926f, 0.2531f, \r
+-4.12f, 2.7f, 0.2531f, \r
+-2.325f, 3.206f, 0.3375f, \r
+-3.168f, 3.198f, 0.3375f, \r
+-3.778f, 3.143f, 0.3375f, \r
+-4.15f, 2.993f, 0.3375f, \r
+-4.275f, 2.7f, 0.3375f, \r
+-2.273f, 3.322f, 0.2531f, \r
+-3.214f, 3.313f, 0.2531f, \r
+-3.888f, 3.244f, 0.2531f, \r
+-4.294f, 3.06f, 0.2531f, \r
+-4.43f, 2.7f, 0.2531f, \r
+-2.25f, 3.375f, 0.0f, \r
+-3.234f, 3.364f, 0.0f, \r
+-3.938f, 3.291f, 0.0f, \r
+-4.359f, 3.09f, 0.0f, \r
+-4.5f, 2.7f, 0.0f, \r
+-2.273f, 3.322f, -0.2531f, \r
+-3.214f, 3.313f, -0.2531f, \r
+-3.888f, 3.244f, -0.2531f, \r
+-4.294f, 3.06f, -0.2531f, \r
+-4.43f, 2.7f, -0.2531f, \r
+-2.325f, 3.206f, -0.3375f, \r
+-3.168f, 3.198f, -0.3375f, \r
+-3.778f, 3.143f, -0.3375f, \r
+-4.15f, 2.993f, -0.3375f, \r
+-4.275f, 2.7f, -0.3375f, \r
+-2.377f, 3.09f, -0.2531f, \r
+-3.122f, 3.084f, -0.2531f, \r
+-3.669f, 3.041f, -0.2531f, \r
+-4.005f, 2.926f, -0.2531f, \r
+-4.12f, 2.7f, -0.2531f, \r
+-3.991f, 2.394f, 0.0f, \r
+-3.806f, 2.025f, 0.0f, \r
+-3.48f, 1.656f, 0.0f, \r
+-3.0f, 1.35f, 0.0f, \r
+-4.055f, 2.365f, 0.2531f, \r
+-3.852f, 1.98f, 0.2531f, \r
+-3.496f, 1.6f, 0.2531f, \r
+-2.977f, 1.28f, 0.2531f, \r
+-4.196f, 2.3f, 0.3375f, \r
+-3.952f, 1.881f, 0.3375f, \r
+-3.531f, 1.478f, 0.3375f, \r
+-2.925f, 1.125f, 0.3375f, \r
+-4.336f, 2.235f, 0.2531f, \r
+-4.051f, 1.782f, 0.2531f, \r
+-3.566f, 1.356f, 0.2531f, \r
+-2.873f, 0.9703f, 0.2531f, \r
+-4.4f, 2.205f, 0.0f, \r
+-4.097f, 1.737f, 0.0f, \r
+-3.582f, 1.3f, 0.0f, \r
+-2.85f, 0.9f, 0.0f, \r
+-4.336f, 2.235f, -0.2531f, \r
+-4.051f, 1.782f, -0.2531f, \r
+-3.566f, 1.356f, -0.2531f, \r
+-2.873f, 0.9703f, -0.2531f, \r
+-4.196f, 2.3f, -0.3375f, \r
+-3.952f, 1.881f, -0.3375f, \r
+-3.531f, 1.478f, -0.3375f, \r
+-2.925f, 1.125f, -0.3375f, \r
+-4.055f, 2.365f, -0.2531f, \r
+-3.852f, 1.98f, -0.2531f, \r
+-3.496f, 1.6f, -0.2531f, \r
+-2.977f, 1.28f, -0.2531f, \r
+2.55f, 2.137f, 0.0f, \r
+3.27f, 2.303f, 0.0f, \r
+3.581f, 2.7f, 0.0f, \r
+3.752f, 3.182f, 0.0f, \r
+4.05f, 3.6f, 0.0f, \r
+2.55f, 1.944f, 0.5569f, \r
+3.324f, 2.159f, 0.5028f, \r
+3.652f, 2.617f, 0.3839f, \r
+3.838f, 3.151f, 0.265f, \r
+4.191f, 3.6f, 0.2109f, \r
+2.55f, 1.519f, 0.7425f, \r
+3.445f, 1.844f, 0.6704f, \r
+3.806f, 2.433f, 0.5119f, \r
+4.027f, 3.085f, 0.3533f, \r
+4.5f, 3.6f, 0.2813f, \r
+2.55f, 1.093f, 0.5569f, \r
+3.566f, 1.529f, 0.5028f, \r
+3.961f, 2.249f, 0.3839f, \r
+4.215f, 3.018f, 0.265f, \r
+4.809f, 3.6f, 0.2109f, \r
+2.55f, 0.9f, 0.0f, \r
+3.621f, 1.385f, 0.0f, \r
+4.031f, 2.166f, 0.0f, \r
+4.301f, 2.988f, 0.0f, \r
+4.95f, 3.6f, 0.0f, \r
+2.55f, 1.093f, -0.5569f, \r
+3.566f, 1.529f, -0.5028f, \r
+3.961f, 2.249f, -0.3839f, \r
+4.215f, 3.018f, -0.265f, \r
+4.809f, 3.6f, -0.2109f, \r
+2.55f, 1.519f, -0.7425f, \r
+3.445f, 1.844f, -0.6704f, \r
+3.806f, 2.433f, -0.5119f, \r
+4.027f, 3.085f, -0.3533f, \r
+4.5f, 3.6f, -0.2813f, \r
+2.55f, 1.944f, -0.5569f, \r
+3.324f, 2.159f, -0.5028f, \r
+3.652f, 2.617f, -0.3839f, \r
+3.838f, 3.151f, -0.265f, \r
+4.191f, 3.6f, -0.2109f, \r
+4.158f, 3.663f, 0.0f, \r
+4.238f, 3.684f, 0.0f, \r
+4.261f, 3.663f, 0.0f, \r
+4.2f, 3.6f, 0.0f, \r
+4.308f, 3.666f, 0.1978f, \r
+4.379f, 3.689f, 0.1687f, \r
+4.381f, 3.668f, 0.1397f, \r
+4.294f, 3.6f, 0.1266f, \r
+4.64f, 3.673f, 0.2637f, \r
+4.69f, 3.7f, 0.225f, \r
+4.645f, 3.677f, 0.1863f, \r
+4.5f, 3.6f, 0.1688f, \r
+4.971f, 3.68f, 0.1978f, \r
+5.001f, 3.711f, 0.1687f, \r
+4.909f, 3.687f, 0.1397f, \r
+4.706f, 3.6f, 0.1266f, \r
+5.122f, 3.683f, 0.0f, \r
+5.142f, 3.716f, 0.0f, \r
+5.029f, 3.691f, 0.0f, \r
+4.8f, 3.6f, 0.0f, \r
+4.971f, 3.68f, -0.1978f, \r
+5.001f, 3.711f, -0.1687f, \r
+4.909f, 3.687f, -0.1397f, \r
+4.706f, 3.6f, -0.1266f, \r
+4.64f, 3.673f, -0.2637f, \r
+4.69f, 3.7f, -0.225f, \r
+4.645f, 3.677f, -0.1863f, \r
+4.5f, 3.6f, -0.1688f, \r
+4.308f, 3.666f, -0.1978f, \r
+4.379f, 3.689f, -0.1687f, \r
+4.381f, 3.668f, -0.1397f, \r
+4.294f, 3.6f, -0.1266f, \r
+0.0f, 4.725f, 0.0f, \r
+0.5109f, 4.651f, 0.0f, \r
+0.4875f, 4.472f, 0.0f, \r
+0.2953f, 4.25f, 0.0f, \r
+0.3f, 4.05f, 0.0f, \r
+0.4715f, 4.651f, 0.2011f, \r
+0.4499f, 4.472f, 0.1918f, \r
+0.2725f, 4.25f, 0.1161f, \r
+0.2768f, 4.05f, 0.1178f, \r
+0.3632f, 4.651f, 0.3632f, \r
+0.3465f, 4.472f, 0.3465f, \r
+0.2098f, 4.25f, 0.2098f, \r
+0.213f, 4.05f, 0.213f, \r
+0.2011f, 4.651f, 0.4715f, \r
+0.1918f, 4.472f, 0.4499f, \r
+0.1161f, 4.25f, 0.2725f, \r
+0.1178f, 4.05f, 0.2768f, \r
+0.0f, 4.651f, 0.5109f, \r
+0.0f, 4.472f, 0.4875f, \r
+0.0f, 4.25f, 0.2953f, \r
+0.0f, 4.05f, 0.3f, \r
+-0.2011f, 4.651f, 0.4715f, \r
+-0.1918f, 4.472f, 0.4499f, \r
+-0.1161f, 4.25f, 0.2725f, \r
+-0.1178f, 4.05f, 0.2768f, \r
+-0.3632f, 4.651f, 0.3632f, \r
+-0.3465f, 4.472f, 0.3465f, \r
+-0.2098f, 4.25f, 0.2098f, \r
+-0.213f, 4.05f, 0.213f, \r
+-0.4715f, 4.651f, 0.2011f, \r
+-0.4499f, 4.472f, 0.1918f, \r
+-0.2725f, 4.25f, 0.1161f, \r
+-0.2768f, 4.05f, 0.1178f, \r
+-0.5109f, 4.651f, 0.0f, \r
+-0.4875f, 4.472f, 0.0f, \r
+-0.2953f, 4.25f, 0.0f, \r
+-0.3f, 4.05f, 0.0f, \r
+-0.4715f, 4.651f, -0.2011f, \r
+-0.4499f, 4.472f, -0.1918f, \r
+-0.2725f, 4.25f, -0.1161f, \r
+-0.2768f, 4.05f, -0.1178f, \r
+-0.3632f, 4.651f, -0.3632f, \r
+-0.3465f, 4.472f, -0.3465f, \r
+-0.2098f, 4.25f, -0.2098f, \r
+-0.213f, 4.05f, -0.213f, \r
+-0.2011f, 4.651f, -0.4715f, \r
+-0.1918f, 4.472f, -0.4499f, \r
+-0.1161f, 4.25f, -0.2725f, \r
+-0.1178f, 4.05f, -0.2768f, \r
+0.0f, 4.651f, -0.5109f, \r
+0.0f, 4.472f, -0.4875f, \r
+0.0f, 4.25f, -0.2953f, \r
+0.0f, 4.05f, -0.3f, \r
+0.2011f, 4.651f, -0.4715f, \r
+0.1918f, 4.472f, -0.4499f, \r
+0.1161f, 4.25f, -0.2725f, \r
+0.1178f, 4.05f, -0.2768f, \r
+0.3632f, 4.651f, -0.3632f, \r
+0.3465f, 4.472f, -0.3465f, \r
+0.2098f, 4.25f, -0.2098f, \r
+0.213f, 4.05f, -0.213f, \r
+0.4715f, 4.651f, -0.2011f, \r
+0.4499f, 4.472f, -0.1918f, \r
+0.2725f, 4.25f, -0.1161f, \r
+0.2768f, 4.05f, -0.1178f, \r
+0.6844f, 3.916f, 0.0f, \r
+1.237f, 3.825f, 0.0f, \r
+1.734f, 3.734f, 0.0f, \r
+1.95f, 3.6f, 0.0f, \r
+0.6313f, 3.916f, 0.2686f, \r
+1.142f, 3.825f, 0.4857f, \r
+1.6f, 3.734f, 0.6807f, \r
+1.799f, 3.6f, 0.7654f, \r
+0.4859f, 3.916f, 0.4859f, \r
+0.8786f, 3.825f, 0.8786f, \r
+1.231f, 3.734f, 1.231f, \r
+1.385f, 3.6f, 1.385f, \r
+0.2686f, 3.916f, 0.6313f, \r
+0.4857f, 3.825f, 1.142f, \r
+0.6807f, 3.734f, 1.6f, \r
+0.7654f, 3.6f, 1.799f, \r
+0.0f, 3.916f, 0.6844f, \r
+0.0f, 3.825f, 1.237f, \r
+0.0f, 3.734f, 1.734f, \r
+0.0f, 3.6f, 1.95f, \r
+-0.2686f, 3.916f, 0.6313f, \r
+-0.4857f, 3.825f, 1.142f, \r
+-0.6807f, 3.734f, 1.6f, \r
+-0.7654f, 3.6f, 1.799f, \r
+-0.4859f, 3.916f, 0.4859f, \r
+-0.8786f, 3.825f, 0.8786f, \r
+-1.231f, 3.734f, 1.231f, \r
+-1.385f, 3.6f, 1.385f, \r
+-0.6313f, 3.916f, 0.2686f, \r
+-1.142f, 3.825f, 0.4857f, \r
+-1.6f, 3.734f, 0.6807f, \r
+-1.799f, 3.6f, 0.7654f, \r
+-0.6844f, 3.916f, 0.0f, \r
+-1.237f, 3.825f, 0.0f, \r
+-1.734f, 3.734f, 0.0f, \r
+-1.95f, 3.6f, 0.0f, \r
+-0.6313f, 3.916f, -0.2686f, \r
+-1.142f, 3.825f, -0.4857f, \r
+-1.6f, 3.734f, -0.6807f, \r
+-1.799f, 3.6f, -0.7654f, \r
+-0.4859f, 3.916f, -0.4859f, \r
+-0.8786f, 3.825f, -0.8786f, \r
+-1.231f, 3.734f, -1.231f, \r
+-1.385f, 3.6f, -1.385f, \r
+-0.2686f, 3.916f, -0.6313f, \r
+-0.4857f, 3.825f, -1.142f, \r
+-0.6807f, 3.734f, -1.6f, \r
+-0.7654f, 3.6f, -1.799f, \r
+0.0f, 3.916f, -0.6844f, \r
+0.0f, 3.825f, -1.237f, \r
+0.0f, 3.734f, -1.734f, \r
+0.0f, 3.6f, -1.95f, \r
+0.2686f, 3.916f, -0.6313f, \r
+0.4857f, 3.825f, -1.142f, \r
+0.6807f, 3.734f, -1.6f, \r
+0.7654f, 3.6f, -1.799f, \r
+0.4859f, 3.916f, -0.4859f, \r
+0.8786f, 3.825f, -0.8786f, \r
+1.231f, 3.734f, -1.231f, \r
+1.385f, 3.6f, -1.385f, \r
+0.6313f, 3.916f, -0.2686f, \r
+1.142f, 3.825f, -0.4857f, \r
+1.6f, 3.734f, -0.6807f, \r
+1.799f, 3.6f, -0.7654f\r
+};\r
+\r
+\r
+/* 530 normals */\r
+const int numNormals = 530;\r
+const float normals[530][3] = {\r
+0.0486f, -0.9986f, 0.0168f, \r
+0.9976f, -0.0678f, -0.0008f, \r
+-0.233f, 0.8502f, -0.4719f, \r
+-0.2299f, 0.9679f, 0.1004f, \r
+-0.1648f, 0.985f, 0.0501f, \r
+-0.0117f, 0.7461f, 0.6656f, \r
+-0.0888f, 0.9692f, 0.2294f, \r
+0.6449f, -0.7172f, -0.2637f, \r
+-0.066f, 0.9851f, 0.1583f, \r
+-0.6585f, -0.342f, -0.6703f, \r
+-0.293f, 0.9558f, 0.0209f, \r
+0.179f, 0.9825f, -0.0513f, \r
+-0.0094f, 0.903f, 0.4295f, \r
+-0.0059f, -0.986f, -0.1662f, \r
+-0.7355f, 0.6774f, -0.0026f, \r
+-0.997f, 0.0763f, 0.0019f, \r
+-0.1478f, 0.9333f, 0.3271f, \r
+-0.3014f, -0.6034f, -0.7382f, \r
+-0.7048f, -0.0681f, 0.706f, \r
+-0.3361f, 0.9332f, 0.1263f, \r
+0.3709f, 0.1524f, -0.916f, \r
+-0.3399f, -0.4121f, 0.8453f, \r
+0.1921f, 0.9724f, -0.1316f, \r
+-0.2671f, 0.7429f, 0.6137f, \r
+0.0888f, 0.9692f, -0.2294f, \r
+0.066f, 0.9851f, -0.1583f, \r
+0.9411f, 0.338f, 0.001f, \r
+0.8666f, -0.2559f, 0.4282f, \r
+-0.8029f, 0.4968f, 0.3293f, \r
+-0.0008f, -0.0678f, -0.9976f, \r
+-0.8453f, -0.4121f, -0.3399f, \r
+-0.4801f, -0.8741f, 0.0733f, \r
+0.6355f, -0.772f, 0.0006f, \r
+-0.9215f, -0.0678f, 0.3822f, \r
+-0.6698f, -0.6907f, -0.2723f, \r
+0.3734f, 0.876f, -0.3051f, \r
+0.3548f, -0.4118f, 0.8393f, \r
+-0.3629f, 0.2429f, 0.8995f, \r
+0.9033f, 0.2079f, 0.375f, \r
+-0.2824f, 0.5939f, 0.7532f, \r
+0.8938f, 0.4452f, 0.0532f, \r
+0.1478f, 0.9333f, -0.3271f, \r
+0.0085f, -0.0031f, -0.9999f, \r
+0.3595f, 0.933f, 0.0115f, \r
+0.8995f, 0.2429f, 0.3629f, \r
+0.7048f, -0.0681f, -0.706f, \r
+-0.6428f, -0.7172f, -0.2688f, \r
+0.6366f, -0.447f, 0.6283f, \r
+-0.1213f, -0.9861f, -0.1128f, \r
+0.8003f, 0.4978f, 0.334f, \r
+0.3361f, 0.9332f, -0.1263f, \r
+0.3399f, -0.4121f, -0.8453f, \r
+-0.3909f, 0.4452f, 0.8055f, \r
+0.0117f, 0.7462f, -0.6655f, \r
+0.9215f, -0.0678f, -0.3822f, \r
+0.3582f, -0.7656f, 0.5343f, \r
+-0.9782f, 0.2075f, -0.0011f, \r
+0.2824f, 0.5939f, -0.7532f, \r
+0.035f, -0.8413f, 0.5393f, \r
+-0.8044f, 0.5934f, 0.0262f, \r
+-0.1128f, -0.9861f, 0.1213f, \r
+0.13f, -0.1396f, 0.9816f, \r
+0.6644f, 0.3392f, 0.6659f, \r
+-0.0042f, -0.6898f, -0.7239f, \r
+-0.1587f, 0.9851f, 0.065f, \r
+-0.8719f, -0.3415f, 0.3508f, \r
+0.6486f, 0.4756f, -0.5941f, \r
+-0.4991f, 0.8499f, -0.1684f, \r
+-0.3969f, 0.6342f, -0.6634f, \r
+0.7041f, -0.3863f, -0.5956f, \r
+0.3909f, 0.4452f, -0.8055f, \r
+-0.0391f, -0.0113f, 0.9991f, \r
+-0.3321f, 0.5936f, -0.733f, \r
+0.8523f, -0.5219f, -0.0338f, \r
+0.329f, 0.4978f, 0.8023f, \r
+0.8044f, 0.5934f, -0.0262f, \r
+0.1128f, -0.9861f, -0.1213f, \r
+0.0178f, 0.9861f, -0.1651f, \r
+0.3491f, 0.4045f, 0.8452f, \r
+-0.2727f, 0.8505f, 0.4496f, \r
+0.065f, 0.9851f, 0.1587f, \r
+-0.0005f, 0.4037f, 0.9148f, \r
+-0.0077f, -0.4109f, -0.9116f, \r
+0.5609f, -0.604f, 0.5661f, \r
+0.8236f, 0.5668f, -0.0138f, \r
+0.1587f, 0.9851f, -0.065f, \r
+0.8719f, -0.3415f, -0.3508f, \r
+-0.7382f, -0.6034f, 0.3014f, \r
+0.0346f, 0.8495f, 0.5263f, \r
+-0.4373f, -0.7921f, -0.4257f, \r
+-0.0532f, 0.4452f, 0.8938f, \r
+0.0689f, -0.9861f, 0.1509f, \r
+-0.1509f, -0.9861f, 0.0689f, \r
+0.7706f, -0.2424f, -0.5893f, \r
+-0.7543f, -0.6564f, 0.0105f, \r
+0.0005f, 0.4037f, -0.9148f, \r
+-0.9116f, -0.4109f, 0.0077f, \r
+0.0058f, -0.0438f, 0.999f, \r
+0.1719f, 0.985f, 0.0005f, \r
+-0.1697f, 0.9693f, 0.1774f, \r
+0.5874f, -0.5124f, 0.6263f, \r
+0.7382f, -0.6034f, -0.3014f, \r
+-0.1518f, 0.985f, -0.081f, \r
+0.646f, 0.4051f, 0.6468f, \r
+0.334f, 0.4978f, -0.8003f, \r
+-0.7354f, -0.6034f, -0.3082f, \r
+-0.6919f, 0.2428f, -0.6798f, \r
+0.0532f, 0.4452f, -0.8938f, \r
+0.3547f, -0.3173f, 0.8794f, \r
+0.9879f, -0.1547f, -0.0033f, \r
+-0.0462f, -0.9986f, 0.0223f, \r
+-0.6088f, 0.4806f, 0.6311f, \r
+-0.109f, -0.1969f, -0.9743f, \r
+0.1509f, -0.9861f, -0.0689f, \r
+-0.0568f, 0.9983f, 0.0009f, \r
+0.9074f, -0.3096f, -0.2839f, \r
+0.8677f, 0.4969f, 0.0026f, \r
+-0.2723f, -0.6907f, 0.6698f, \r
+-0.4734f, -0.6798f, 0.5599f, \r
+0.9116f, -0.4109f, -0.0077f, \r
+0.1697f, 0.9693f, -0.1774f, \r
+0.5875f, 0.5937f, 0.5497f, \r
+-0.3232f, 0.6846f, 0.6533f, \r
+-0.5078f, -0.6913f, 0.5139f, \r
+-0.4612f, 0.7474f, -0.478f, \r
+-0.2071f, -0.8049f, 0.556f, \r
+-0.6976f, -0.7164f, -0.0027f, \r
+-0.8697f, 0.3388f, 0.3587f, \r
+0.0462f, -0.9986f, -0.0223f, \r
+0.2723f, -0.6907f, -0.6698f, \r
+-0.829f, -0.4466f, -0.3365f, \r
+0.9148f, 0.4037f, 0.0005f, \r
+-0.1583f, 0.9851f, -0.066f, \r
+0.148f, 0.9838f, 0.1002f, \r
+-0.1717f, 0.985f, -0.0162f, \r
+-0.4282f, -0.2559f, 0.8666f, \r
+0.3094f, -0.2556f, 0.9159f, \r
+0.2803f, -0.6907f, 0.6665f, \r
+-0.6154f, 0.497f, 0.6117f, \r
+-0.0262f, 0.5934f, -0.8044f, \r
+0.0286f, 0.1639f, -0.986f, \r
+-0.6924f, 0.2083f, 0.6907f, \r
+-0.0105f, 0.9975f, -0.0685f, \r
+0.5078f, -0.6913f, -0.5139f, \r
+0.2071f, -0.8049f, -0.556f, \r
+-0.4903f, -0.7178f, -0.4942f, \r
+-0.2637f, -0.7172f, -0.6449f, \r
+-0.3822f, -0.0678f, -0.9215f, \r
+0.8697f, 0.3388f, -0.3587f, \r
+0.2461f, -0.805f, 0.5397f, \r
+-0.2615f, 0.9334f, 0.2452f, \r
+0.6187f, 0.747f, -0.243f, \r
+0.0375f, -0.8401f, -0.5411f, \r
+0.0054f, 0.9691f, 0.2464f, \r
+0.3587f, 0.3388f, 0.8697f, \r
+0.3993f, 0.6582f, -0.6381f, \r
+-0.3476f, -0.4464f, -0.8245f, \r
+0.099f, 0.9692f, 0.2251f, \r
+-0.3666f, -0.3412f, 0.8655f, \r
+0.0396f, 0.153f, -0.9874f, \r
+0.0349f, 0.9969f, -0.0698f, \r
+0.1096f, 0.985f, 0.1324f, \r
+-0.0578f, -0.9861f, 0.1556f, \r
+0.4479f, -0.5145f, -0.7311f, \r
+0.6924f, 0.2083f, -0.6907f, \r
+0.6096f, 0.747f, 0.265f, \r
+-0.3508f, -0.3415f, -0.8719f, \r
+-0.6215f, 0.4454f, -0.6443f, \r
+-0.4942f, -0.7178f, 0.4903f, \r
+-0.9402f, -0.3403f, -0.0085f, \r
+0.0056f, -0.0358f, 0.9993f, \r
+0.2615f, 0.9334f, -0.2452f, \r
+-0.0024f, 0.0291f, -0.9995f, \r
+-0.2667f, 0.9637f, -0.001f, \r
+0.0569f, -0.2712f, -0.9608f, \r
+0.7463f, 0.254f, 0.615f, \r
+0.5153f, 0.6516f, -0.5564f, \r
+0.0223f, -0.9986f, 0.0462f, \r
+0.3666f, -0.3412f, -0.8655f, \r
+0.0578f, -0.9861f, -0.1556f, \r
+0.6111f, 0.4984f, 0.6148f, \r
+-0.243f, 0.747f, -0.6187f, \r
+-0.0092f, 0.2338f, -0.9722f, \r
+0.478f, 0.7474f, -0.4612f, \r
+-0.0058f, -0.4457f, -0.8951f, \r
+-0.4856f, -0.6774f, -0.5524f, \r
+0.54f, 0.6414f, 0.5448f, \r
+-0.3365f, -0.4466f, 0.829f, \r
+-0.2257f, 0.795f, 0.5629f, \r
+0.8055f, 0.4452f, 0.3909f, \r
+0.3729f, 0.208f, 0.9042f, \r
+-0.727f, -0.2562f, 0.6369f, \r
+-0.0514f, -0.9986f, 0.0029f, \r
+0.9159f, 0.1555f, -0.3699f, \r
+0.0019f, -0.2377f, -0.9713f, \r
+0.4942f, -0.7178f, -0.4903f, \r
+0.6497f, -0.4127f, 0.6383f, \r
+0.0089f, 0.0486f, -0.9987f, \r
+-0.0213f, 0.6301f, -0.7761f, \r
+-0.9269f, -0.3751f, 0.0038f, \r
+-0.1215f, 0.9852f, 0.1207f, \r
+-0.5856f, 0.5198f, 0.6218f, \r
+0.8655f, -0.3412f, 0.3666f, \r
+-0.2464f, 0.9691f, 0.0054f, \r
+0.0123f, 0.1386f, 0.9902f, \r
+0.0179f, -0.0369f, 0.9991f, \r
+-0.1207f, 0.9852f, -0.1215f, \r
+-0.0081f, 0.5671f, 0.8235f, \r
+-0.8689f, 0.3387f, -0.3607f, \r
+0.0062f, 0.0309f, -0.9995f, \r
+0.3365f, -0.4466f, -0.829f, \r
+-0.3787f, 0.2424f, -0.8931f, \r
+-0.2904f, 0.4454f, -0.8468f, \r
+-0.8707f, 0.4915f, 0.0133f, \r
+0.163f, -0.8182f, 0.5512f, \r
+0.4337f, -0.8052f, 0.4041f, \r
+0.0514f, -0.9986f, -0.0029f, \r
+-0.0084f, 0.1303f, 0.9914f, \r
+-0.706f, -0.0681f, -0.7048f, \r
+-0.556f, -0.8049f, -0.2071f, \r
+0.8448f, 0.4045f, 0.3501f, \r
+0.4259f, -0.5474f, 0.7203f, \r
+-0.6907f, 0.2083f, -0.6924f, \r
+0.1215f, 0.9852f, -0.1207f, \r
+-0.1263f, 0.9332f, -0.3361f, \r
+0.7711f, -0.0741f, -0.6323f, \r
+0.2464f, 0.9691f, -0.0054f, \r
+0.1774f, 0.9693f, 0.1697f, \r
+-0.9042f, 0.208f, 0.3729f, \r
+-0.8393f, -0.4118f, 0.3548f, \r
+0.6888f, -0.7219f, -0.0648f, \r
+0.1556f, -0.9861f, 0.0578f, \r
+0.3271f, 0.9333f, 0.1478f, \r
+-0.0024f, 0.2379f, 0.9712f, \r
+-0.0026f, 0.4969f, 0.8677f, \r
+0.0f, 1.0f, 0.0f, \r
+0.1912f, -0.9815f, -0.0025f, \r
+-0.3762f, -0.6681f, 0.6418f, \r
+-0.7759f, 0.0432f, 0.6292f, \r
+-0.0208f, -0.8044f, -0.5936f, \r
+-0.2274f, 0.8822f, -0.4122f, \r
+0.7532f, 0.5939f, 0.2824f, \r
+-0.9221f, -0.0681f, -0.3807f, \r
+-0.2198f, 0.8494f, 0.4796f, \r
+0.0065f, -0.7656f, 0.6431f, \r
+-0.5876f, 0.4472f, -0.6742f, \r
+0.7981f, -0.6024f, 0.0036f, \r
+-0.0383f, -0.9986f, -0.0341f, \r
+-0.6369f, -0.2562f, -0.727f, \r
+-0.5497f, 0.5937f, 0.5875f, \r
+0.1084f, 0.9431f, 0.314f, \r
+0.9042f, 0.208f, -0.3729f, \r
+-0.6659f, 0.3392f, 0.6644f, \r
+0.8393f, -0.4118f, -0.3548f, \r
+0.0029f, -0.9986f, 0.0514f, \r
+-0.9647f, -0.2552f, -0.0635f, \r
+-0.2294f, 0.9692f, -0.0888f, \r
+0.0026f, 0.4969f, -0.8677f, \r
+0.2452f, 0.9334f, 0.2615f, \r
+0.5171f, -0.4876f, -0.7033f, \r
+-0.8951f, -0.4457f, 0.0058f, \r
+-0.5936f, -0.8044f, 0.0208f, \r
+0.5642f, -0.5426f, -0.6222f, \r
+0.5938f, 0.4451f, 0.6702f, \r
+0.5497f, 0.5937f, -0.5875f, \r
+0.6657f, 0.4653f, 0.5832f, \r
+0.4857f, -0.6243f, 0.6117f, \r
+-0.0486f, -0.9986f, -0.0168f, \r
+-0.6468f, 0.4051f, 0.646f, \r
+0.6659f, 0.3392f, -0.6644f, \r
+0.1833f, 0.9735f, -0.1365f, \r
+0.3955f, 0.8505f, 0.3465f, \r
+0.5139f, -0.6913f, 0.5078f, \r
+0.8023f, 0.4978f, -0.329f, \r
+-0.001f, 0.338f, 0.9411f, \r
+-0.2496f, 0.8321f, -0.4951f, \r
+0.8951f, -0.4457f, -0.0058f, \r
+0.233f, 0.8502f, 0.4719f, \r
+-0.0168f, -0.9986f, 0.0486f, \r
+0.5936f, -0.8044f, -0.0208f, \r
+-0.05f, 0.3155f, 0.9475f, \r
+0.6585f, -0.342f, 0.6703f, \r
+0.4909f, -0.1864f, -0.8509f, \r
+-0.37f, 0.9238f, -0.0973f, \r
+0.6468f, 0.4051f, -0.646f, \r
+0.0059f, -0.986f, 0.1662f, \r
+-0.3724f, 0.9278f, -0.0202f, \r
+-0.3501f, 0.4045f, 0.8448f, \r
+-0.0425f, 0.8398f, -0.5411f, \r
+-0.1684f, 0.8499f, 0.4991f, \r
+-0.6665f, -0.6907f, 0.2803f, \r
+-0.2251f, 0.9692f, 0.099f, \r
+0.9241f, -0.3816f, -0.0169f, \r
+0.001f, 0.338f, -0.9411f, \r
+-0.9411f, 0.338f, -0.001f, \r
+-0.8666f, -0.2559f, -0.4282f, \r
+0.0262f, 0.5183f, -0.8547f, \r
+0.3014f, -0.6034f, 0.7382f, \r
+0.0168f, -0.9986f, -0.0486f, \r
+-0.3548f, -0.4118f, -0.8393f, \r
+-0.6023f, -0.5297f, 0.5971f, \r
+-0.9033f, 0.2079f, -0.375f, \r
+-0.8938f, 0.4452f, -0.0532f, \r
+0.6044f, 0.7397f, 0.2957f, \r
+0.0008f, -0.0678f, 0.9976f, \r
+0.7058f, 0.0906f, -0.7025f, \r
+0.8453f, -0.4121f, 0.3399f, \r
+-0.3595f, 0.933f, -0.0115f, \r
+0.6698f, -0.6907f, 0.2723f, \r
+-0.8995f, 0.2429f, -0.3629f, \r
+-0.6366f, -0.447f, -0.6283f, \r
+0.3501f, 0.4045f, -0.8448f, \r
+-0.01f, -0.0605f, 0.9981f, \r
+-0.8003f, 0.4978f, -0.334f, \r
+0.1684f, 0.8499f, -0.4991f, \r
+0.6665f, -0.6907f, -0.2803f, \r
+0.2251f, 0.9692f, -0.099f, \r
+-0.0036f, -0.6024f, 0.7981f, \r
+0.6637f, -0.2967f, -0.6865f, \r
+-0.081f, 0.985f, 0.1518f, \r
+0.0084f, 0.2423f, 0.9701f, \r
+0.0071f, -0.9029f, -0.4296f, \r
+-0.8679f, 0.4966f, -0.0026f, \r
+0.0123f, 0.5735f, 0.819f, \r
+-0.0005f, 0.985f, 0.1719f, \r
+0.6428f, -0.7172f, 0.2688f, \r
+0.6588f, -0.3366f, 0.6727f, \r
+0.1213f, -0.9861f, 0.1128f, \r
+-0.8931f, 0.2424f, 0.3787f, \r
+-0.1662f, -0.986f, 0.0059f, \r
+0.9994f, 0.0313f, 0.0095f, \r
+0.762f, -0.146f, 0.6308f, \r
+-0.7731f, 0.0861f, -0.6283f, \r
+-0.6644f, 0.3392f, -0.6659f, \r
+-0.0027f, -0.7164f, 0.6976f, \r
+0.0036f, -0.6024f, -0.7981f, \r
+0.9782f, 0.2075f, 0.0011f, \r
+0.0405f, -0.9991f, -0.0018f, \r
+0.6882f, -0.703f, 0.179f, \r
+-0.0115f, 0.933f, 0.3595f, \r
+0.0911f, 0.0518f, -0.9944f, \r
+0.0005f, 0.985f, -0.1719f, \r
+0.5337f, -0.5852f, -0.6104f, \r
+0.0042f, -0.6898f, 0.7239f, \r
+0.4863f, 0.2366f, 0.8411f, \r
+0.4991f, 0.8499f, 0.1684f, \r
+-0.6543f, 0.7561f, 0.0071f, \r
+0.265f, 0.747f, -0.6096f, \r
+-0.329f, 0.4978f, -0.8023f, \r
+0.1662f, -0.986f, -0.0059f, \r
+-0.3491f, 0.4045f, -0.8452f, \r
+0.3321f, 0.5936f, 0.733f, \r
+-0.065f, 0.9851f, -0.1587f, \r
+-0.6283f, -0.447f, 0.6366f, \r
+0.0027f, -0.7164f, -0.6976f, \r
+-0.1316f, 0.6339f, 0.762f, \r
+-0.5609f, -0.604f, -0.5661f, \r
+-0.8452f, 0.4045f, 0.3491f, \r
+-0.5263f, 0.8495f, 0.0346f, \r
+0.0115f, 0.933f, -0.3595f, \r
+-0.0346f, 0.8495f, -0.5263f, \r
+0.0077f, -0.4109f, 0.9116f, \r
+0.5758f, -0.8175f, -0.0017f, \r
+-0.0011f, 0.2075f, 0.9782f, \r
+-0.0689f, -0.9861f, -0.1509f, \r
+0.2934f, -0.5928f, -0.7499f, \r
+0.0724f, 0.1198f, -0.9901f, \r
+-0.7367f, -0.275f, -0.6176f, \r
+-0.3131f, 0.8154f, 0.4868f, \r
+-0.0114f, 0.0022f, 0.9999f, \r
+0.6283f, -0.447f, -0.6366f, \r
+0.8452f, 0.4045f, -0.3491f, \r
+0.5263f, 0.8495f, -0.0346f, \r
+-0.6383f, -0.4127f, 0.6497f, \r
+-0.1719f, 0.985f, -0.0005f, \r
+-0.6703f, -0.342f, 0.6585f, \r
+-0.0085f, -0.3403f, 0.9402f, \r
+-0.646f, 0.4051f, -0.6468f, \r
+0.0011f, 0.2075f, -0.9782f, \r
+-0.7216f, -0.3071f, 0.6204f, \r
+0.0282f, 0.0023f, -0.9995f, \r
+-0.2483f, 0.6806f, -0.6892f, \r
+0.1518f, 0.985f, 0.081f, \r
+0.047f, 0.0466f, -0.9978f, \r
+0.7354f, -0.6034f, 0.3082f, \r
+0.6919f, 0.2428f, 0.6798f, \r
+0.4086f, -0.3626f, -0.8375f, \r
+0.6383f, -0.4127f, -0.6497f, \r
+-0.5875f, 0.5937f, -0.5497f, \r
+0.6703f, -0.342f, -0.6585f, \r
+-0.8245f, -0.4464f, 0.3476f, \r
+0.0085f, -0.3403f, -0.9402f, \r
+-0.0591f, -0.0663f, 0.996f, \r
+0.0f, -1.0f, 0.0f, \r
+0.4612f, 0.7474f, 0.478f, \r
+0.6976f, -0.7164f, 0.0027f, \r
+-0.9148f, 0.4037f, -0.0005f, \r
+0.173f, -0.8158f, -0.5518f, \r
+-0.3607f, 0.3387f, 0.8689f, \r
+0.7836f, -0.2411f, 0.5724f, \r
+-0.1985f, 0.8026f, -0.5623f, \r
+-0.3094f, -0.2556f, -0.9159f, \r
+-0.2803f, -0.6907f, -0.6665f, \r
+0.8245f, -0.4464f, -0.3476f, \r
+0.829f, -0.4466f, 0.3365f, \r
+-0.4848f, 0.7385f, 0.4683f, \r
+0.1583f, 0.9851f, 0.066f, \r
+-0.0077f, 0.7656f, -0.6432f, \r
+-0.0162f, 0.985f, 0.1717f, \r
+0.1717f, 0.985f, 0.0162f, \r
+0.0244f, 0.9805f, -0.1949f, \r
+-0.2461f, -0.805f, -0.5397f, \r
+0.0262f, 0.5934f, 0.8044f, \r
+0.142f, 0.1881f, 0.9718f, \r
+0.1846f, 0.1002f, 0.9776f, \r
+0.4903f, -0.7178f, 0.4942f, \r
+0.2637f, -0.7172f, 0.6449f, \r
+0.3822f, -0.0678f, 0.9215f, \r
+-0.0054f, 0.9691f, -0.2464f, \r
+0.3607f, 0.3387f, -0.8689f, \r
+-0.3587f, 0.3388f, -0.8697f, \r
+-0.5694f, -0.8219f, 0.0081f, \r
+-0.1324f, 0.985f, 0.1096f, \r
+-0.099f, 0.9692f, -0.2251f, \r
+-0.6702f, 0.4451f, 0.5938f, \r
+0.0077f, -0.9976f, 0.0684f, \r
+-0.5661f, -0.604f, 0.5609f, \r
+-0.1096f, 0.985f, -0.1324f, \r
+-0.6096f, 0.747f, -0.265f, \r
+-0.0015f, 0.0295f, -0.9995f, \r
+0.3476f, -0.4464f, 0.8245f, \r
+-0.0635f, -0.2552f, 0.9647f, \r
+-0.8468f, 0.4454f, 0.2904f, \r
+-0.4719f, 0.8502f, 0.233f, \r
+-0.0502f, 0.8385f, 0.5425f, \r
+-0.6671f, 0.7448f, -0.0116f, \r
+0.3508f, -0.3415f, 0.8719f, \r
+-0.4119f, 0.6135f, -0.6736f, \r
+-0.2688f, -0.7172f, 0.6428f, \r
+-0.4041f, -0.8052f, 0.4337f, \r
+-0.375f, 0.2079f, 0.9033f, \r
+-0.0223f, -0.9986f, -0.0462f, \r
+0.6702f, 0.4451f, -0.5938f, \r
+0.9402f, -0.3403f, 0.0085f, \r
+0.5661f, -0.604f, -0.5609f, \r
+-0.6252f, 0.7406f, 0.246f, \r
+-0.0341f, -0.9986f, 0.0383f, \r
+-0.6111f, 0.4984f, -0.6148f, \r
+0.6655f, 0.7462f, 0.0117f, \r
+0.1233f, 0.199f, 0.9722f, \r
+0.8468f, 0.4454f, -0.2904f, \r
+0.7383f, 0.2702f, -0.6179f, \r
+-0.8055f, 0.4452f, -0.3909f, \r
+-0.3729f, 0.208f, -0.9042f, \r
+0.4719f, 0.8502f, -0.233f, \r
+0.243f, 0.747f, 0.6187f, \r
+-0.6497f, -0.4127f, -0.6383f, \r
+-0.5406f, 0.5651f, -0.623f, \r
+0.0058f, -0.4457f, 0.8951f, \r
+-0.3082f, -0.6034f, 0.7354f, \r
+-0.8655f, -0.3412f, -0.3666f, \r
+0.2688f, -0.7172f, -0.6428f, \r
+0.4041f, -0.8052f, -0.4337f, \r
+0.375f, 0.2079f, -0.9033f, \r
+0.0341f, -0.9986f, -0.0383f, \r
+-0.9701f, 0.2423f, 0.0084f, \r
+-0.3807f, -0.0681f, 0.9221f, \r
+0.9643f, -0.2551f, 0.0705f, \r
+-0.8758f, 0.4808f, 0.0415f, \r
+0.1207f, 0.9852f, 0.1215f, \r
+0.4821f, 0.7724f, 0.4133f, \r
+-0.0522f, 0.9982f, 0.0278f, \r
+-0.4337f, -0.8052f, -0.4041f, \r
+-0.6164f, 0.4198f, 0.6661f, \r
+-0.8448f, 0.4045f, -0.3501f, \r
+0.3082f, -0.6034f, -0.7354f, \r
+0.8689f, 0.3387f, 0.3607f, \r
+0.6894f, -0.7242f, 0.0091f, \r
+0.3787f, 0.2424f, 0.8931f, \r
+0.2904f, 0.4454f, 0.8468f, \r
+0.6148f, 0.4984f, -0.6111f, \r
+0.0501f, 0.985f, 0.1648f, \r
+-0.5397f, -0.805f, 0.2461f, \r
+-0.9159f, -0.2556f, 0.3094f, \r
+0.706f, -0.0681f, 0.7048f, \r
+-0.3341f, 0.4972f, 0.8006f, \r
+0.556f, -0.8049f, 0.2071f, \r
+-0.1774f, 0.9693f, -0.1697f, \r
+0.6907f, 0.2083f, 0.6924f, \r
+0.1263f, 0.9332f, 0.3361f, \r
+0.3807f, -0.0681f, -0.9221f, \r
+-0.1556f, -0.9861f, -0.0578f, \r
+-0.3271f, 0.9333f, -0.1478f, \r
+-0.3465f, 0.8505f, 0.3955f, \r
+0.5315f, 0.8438f, -0.0735f, \r
+0.9737f, 0.2276f, -0.0003f, \r
+0.6441f, 0.7648f, -0.0112f, \r
+-0.7239f, -0.6898f, 0.0042f, \r
+-0.7532f, 0.5939f, -0.2824f, \r
+0.1093f, 0.1415f, -0.9838f, \r
+0.5397f, -0.805f, -0.2461f, \r
+-0.7981f, -0.6024f, -0.0036f, \r
+0.9456f, 0.3251f, -0.0052f, \r
+0.1278f, 0.9696f, -0.2085f, \r
+0.0208f, -0.8044f, 0.5936f, \r
+0.1635f, 0.1348f, -0.9772f, \r
+-0.733f, 0.5936f, 0.3321f, \r
+-0.0505f, 0.9852f, -0.1635f, \r
+0.4089f, -0.9069f, -0.1015f, \r
+-0.0029f, -0.9986f, -0.0514f, \r
+-0.1796f, 0.814f, -0.5522f, \r
+0.9221f, -0.0681f, 0.3807f, \r
+0.0383f, -0.9986f, 0.0341f, \r
+0.6369f, -0.2562f, 0.727f, \r
+0.3465f, 0.8505f, -0.3955f, \r
+-0.2452f, 0.9334f, -0.2615f, \r
+0.4921f, -0.247f, 0.8346f, \r
+-0.9976f, -0.0678f, 0.0008f, \r
+-0.5396f, 0.8418f, -0.0094f, \r
+0.2294f, 0.9692f, 0.0888f, \r
+0.7239f, -0.6898f, -0.0042f, \r
+-0.4472f, 0.5952f, 0.6675f, \r
+-0.6449f, -0.7172f, 0.2637f, \r
+0.4543f, 0.2732f, -0.8478f, \r
+-0.6798f, 0.2428f, 0.6919f, \r
+-0.5938f, 0.4451f, -0.6702f, \r
+0.733f, 0.5936f, -0.3321f, \r
+-0.3955f, 0.8505f, -0.3465f, \r
+-0.5139f, -0.6913f, -0.5078f, \r
+-0.623f, -0.5156f, -0.5881f\r
+};\r
+\r
+/* 1 color   */\r
+/*255 255 0  */\r
+\r
+/* 1024 faces */\r
+/* numIdx fidx0 fidx1 fidx2 nidx0 nidx1 nidx2 coloridx */\r
+\r
+const int numFaces = 1024;\r
+const int faces[1024][8] = {\r
+3, 0, 5, 6, 255, 295, 309, 0,\r
+3, 6, 1, 0, 309, 465, 255, 0,\r
+3, 1, 6, 7, 465, 309, 134, 0,\r
+3, 7, 2, 1, 134, 4, 465, 0,\r
+3, 2, 7, 8, 4, 134, 165, 0,\r
+3, 8, 3, 2, 165, 448, 4, 0,\r
+3, 3, 8, 9, 448, 165, 49, 0,\r
+3, 9, 4, 3, 49, 116, 448, 0,\r
+3, 5, 10, 11, 295, 248, 106, 0,\r
+3, 11, 6, 5, 106, 309, 295, 0,\r
+3, 6, 11, 12, 309, 106, 102, 0,\r
+3, 12, 7, 6, 102, 134, 309, 0,\r
+3, 7, 12, 13, 134, 102, 394, 0,\r
+3, 13, 8, 7, 394, 165, 134, 0,\r
+3, 8, 13, 14, 165, 394, 180, 0,\r
+3, 14, 9, 8, 180, 49, 165, 0,\r
+3, 10, 15, 16, 248, 401, 211, 0,\r
+3, 16, 11, 10, 211, 106, 248, 0,\r
+3, 11, 16, 17, 106, 211, 427, 0,\r
+3, 17, 12, 11, 427, 102, 106, 0,\r
+3, 12, 17, 18, 102, 427, 455, 0,\r
+3, 18, 13, 12, 455, 394, 102, 0,\r
+3, 13, 18, 19, 394, 455, 74, 0,\r
+3, 19, 14, 13, 74, 180, 394, 0,\r
+3, 15, 20, 21, 401, 174, 182, 0,\r
+3, 21, 16, 15, 182, 211, 401, 0,\r
+3, 16, 21, 22, 211, 182, 507, 0,\r
+3, 22, 17, 16, 507, 427, 211, 0,\r
+3, 17, 22, 23, 427, 507, 5, 0,\r
+3, 23, 18, 17, 5, 455, 427, 0,\r
+3, 18, 23, 24, 455, 5, 234, 0,\r
+3, 24, 19, 18, 234, 74, 455, 0,\r
+3, 20, 25, 26, 174, 386, 20, 0,\r
+3, 26, 21, 20, 20, 182, 174, 0,\r
+3, 21, 26, 27, 182, 20, 410, 0,\r
+3, 27, 22, 21, 410, 507, 182, 0,\r
+3, 22, 27, 28, 507, 410, 23, 0,\r
+3, 28, 23, 22, 23, 5, 507, 0,\r
+3, 23, 28, 29, 5, 23, 485, 0,\r
+3, 29, 24, 23, 485, 234, 5, 0,\r
+3, 25, 30, 31, 386, 69, 305, 0,\r
+3, 31, 26, 25, 305, 20, 386, 0,\r
+3, 26, 31, 32, 20, 305, 503, 0,\r
+3, 32, 27, 26, 503, 410, 20, 0,\r
+3, 27, 32, 33, 410, 503, 405, 0,\r
+3, 33, 28, 27, 405, 23, 410, 0,\r
+3, 28, 33, 34, 23, 405, 138, 0,\r
+3, 34, 29, 28, 138, 485, 23, 0,\r
+3, 30, 35, 36, 69, 115, 193, 0,\r
+3, 36, 31, 30, 193, 305, 69, 0,\r
+3, 31, 36, 37, 305, 193, 270, 0,\r
+3, 37, 32, 31, 270, 503, 305, 0,\r
+3, 32, 37, 38, 503, 270, 445, 0,\r
+3, 38, 33, 32, 445, 405, 503, 0,\r
+3, 33, 38, 39, 405, 445, 28, 0,\r
+3, 39, 34, 33, 28, 138, 405, 0,\r
+3, 35, 40, 41, 115, 467, 495, 0,\r
+3, 41, 36, 35, 495, 193, 115, 0,\r
+3, 36, 41, 42, 193, 495, 11, 0,\r
+3, 42, 37, 36, 11, 270, 193, 0,\r
+3, 37, 42, 43, 270, 11, 435, 0,\r
+3, 43, 38, 37, 435, 445, 270, 0,\r
+3, 38, 43, 44, 445, 435, 322, 0,\r
+3, 44, 39, 38, 322, 28, 445, 0,\r
+3, 40, 45, 46, 467, 27, 44, 0,\r
+3, 46, 41, 40, 44, 495, 467, 0,\r
+3, 41, 46, 47, 495, 44, 409, 0,\r
+3, 47, 42, 41, 409, 11, 495, 0,\r
+3, 42, 47, 48, 11, 409, 428, 0,\r
+3, 48, 43, 42, 428, 435, 11, 0,\r
+3, 43, 48, 49, 435, 428, 313, 0,\r
+3, 49, 44, 43, 313, 322, 435, 0,\r
+3, 45, 50, 51, 27, 513, 385, 0,\r
+3, 51, 46, 45, 385, 44, 27, 0,\r
+3, 46, 51, 52, 44, 385, 382, 0,\r
+3, 52, 47, 46, 382, 409, 44, 0,\r
+3, 47, 52, 53, 409, 382, 124, 0,\r
+3, 53, 48, 47, 124, 428, 409, 0,\r
+3, 48, 53, 54, 428, 124, 447, 0,\r
+3, 54, 49, 48, 447, 313, 428, 0,\r
+3, 50, 55, 56, 513, 136, 478, 0,\r
+3, 56, 51, 50, 478, 385, 513, 0,\r
+3, 51, 56, 57, 385, 478, 161, 0,\r
+3, 57, 52, 51, 161, 382, 385, 0,\r
+3, 52, 57, 58, 382, 161, 181, 0,\r
+3, 58, 53, 52, 181, 124, 382, 0,\r
+3, 53, 58, 59, 124, 181, 348, 0,\r
+3, 59, 54, 53, 348, 447, 124, 0,\r
+3, 55, 60, 61, 136, 431, 320, 0,\r
+3, 61, 56, 55, 320, 478, 136, 0,\r
+3, 56, 61, 62, 478, 320, 481, 0,\r
+3, 62, 57, 56, 481, 161, 478, 0,\r
+3, 57, 62, 63, 161, 481, 53, 0,\r
+3, 63, 58, 57, 53, 181, 161, 0,\r
+3, 58, 63, 64, 181, 53, 257, 0,\r
+3, 64, 59, 58, 257, 348, 181, 0,\r
+3, 60, 65, 66, 431, 135, 37, 0,\r
+3, 66, 61, 60, 37, 320, 431, 0,\r
+3, 61, 66, 67, 320, 37, 408, 0,\r
+3, 67, 62, 61, 408, 481, 320, 0,\r
+3, 62, 67, 68, 481, 408, 347, 0,\r
+3, 68, 63, 62, 347, 53, 481, 0,\r
+3, 63, 68, 69, 53, 347, 104, 0,\r
+3, 69, 64, 63, 104, 257, 53, 0,\r
+3, 65, 70, 71, 135, 191, 524, 0,\r
+3, 71, 66, 65, 524, 37, 135, 0,\r
+3, 66, 71, 72, 37, 524, 319, 0,\r
+3, 72, 67, 66, 319, 408, 37, 0,\r
+3, 67, 72, 73, 408, 319, 183, 0,\r
+3, 73, 68, 67, 183, 347, 408, 0,\r
+3, 68, 73, 74, 347, 183, 480, 0,\r
+3, 74, 69, 68, 480, 104, 347, 0,\r
+3, 70, 75, 76, 191, 483, 328, 0,\r
+3, 76, 71, 70, 328, 524, 191, 0,\r
+3, 71, 76, 77, 524, 328, 422, 0,\r
+3, 77, 72, 71, 422, 319, 524, 0,\r
+3, 72, 77, 78, 319, 422, 151, 0,\r
+3, 78, 73, 72, 151, 183, 319, 0,\r
+3, 73, 78, 79, 183, 151, 273, 0,\r
+3, 79, 74, 73, 273, 480, 183, 0,\r
+3, 75, 0, 1, 483, 255, 465, 0,\r
+3, 1, 76, 75, 465, 328, 483, 0,\r
+3, 76, 1, 2, 328, 465, 4, 0,\r
+3, 2, 77, 76, 4, 422, 328, 0,\r
+3, 77, 2, 3, 422, 4, 448, 0,\r
+3, 3, 78, 77, 448, 151, 422, 0,\r
+3, 78, 3, 4, 151, 448, 116, 0,\r
+3, 4, 79, 78, 116, 273, 151, 0,\r
+3, 4, 9, 84, 116, 49, 220, 0,\r
+3, 84, 80, 4, 220, 131, 116, 0,\r
+3, 80, 84, 85, 131, 220, 476, 0,\r
+3, 85, 81, 80, 476, 26, 131, 0,\r
+3, 81, 85, 86, 26, 476, 38, 0,\r
+3, 86, 82, 81, 38, 336, 26, 0,\r
+3, 82, 86, 87, 336, 38, 511, 0,\r
+3, 87, 83, 82, 511, 1, 336, 0,\r
+3, 9, 14, 88, 49, 180, 103, 0,\r
+3, 88, 84, 9, 103, 220, 49, 0,\r
+3, 84, 88, 89, 220, 103, 62, 0,\r
+3, 89, 85, 84, 62, 476, 220, 0,\r
+3, 85, 89, 90, 476, 62, 488, 0,\r
+3, 90, 86, 85, 488, 38, 476, 0,\r
+3, 86, 90, 91, 38, 488, 484, 0,\r
+3, 91, 87, 86, 484, 511, 38, 0,\r
+3, 14, 19, 92, 180, 74, 78, 0,\r
+3, 92, 88, 14, 78, 103, 180, 0,\r
+3, 88, 92, 93, 103, 78, 154, 0,\r
+3, 93, 89, 88, 154, 62, 103, 0,\r
+3, 89, 93, 94, 62, 154, 190, 0,\r
+3, 94, 90, 89, 190, 488, 62, 0,\r
+3, 90, 94, 95, 488, 190, 417, 0,\r
+3, 95, 91, 90, 417, 484, 488, 0,\r
+3, 19, 24, 96, 74, 234, 81, 0,\r
+3, 96, 92, 19, 81, 78, 74, 0,\r
+3, 92, 96, 97, 78, 81, 274, 0,\r
+3, 97, 93, 92, 274, 154, 78, 0,\r
+3, 93, 97, 98, 154, 274, 363, 0,\r
+3, 98, 94, 93, 363, 190, 154, 0,\r
+3, 94, 98, 99, 190, 363, 304, 0,\r
+3, 99, 95, 94, 304, 417, 190, 0,\r
+3, 24, 29, 100, 234, 485, 287, 0,\r
+3, 100, 96, 24, 287, 81, 234, 0,\r
+3, 96, 100, 101, 81, 287, 398, 0,\r
+3, 101, 97, 96, 398, 274, 81, 0,\r
+3, 97, 101, 102, 274, 398, 440, 0,\r
+3, 102, 98, 97, 440, 363, 274, 0,\r
+3, 98, 102, 103, 363, 440, 466, 0,\r
+3, 103, 99, 98, 466, 304, 363, 0,\r
+3, 29, 34, 104, 485, 138, 268, 0,\r
+3, 104, 100, 29, 268, 287, 485, 0,\r
+3, 100, 104, 105, 287, 268, 252, 0,\r
+3, 105, 101, 100, 252, 398, 287, 0,\r
+3, 101, 105, 106, 398, 252, 141, 0,\r
+3, 106, 102, 101, 141, 440, 398, 0,\r
+3, 102, 106, 107, 440, 141, 18, 0,\r
+3, 107, 103, 102, 18, 466, 440, 0,\r
+3, 34, 39, 108, 138, 28, 357, 0,\r
+3, 108, 104, 34, 357, 268, 138, 0,\r
+3, 104, 108, 109, 268, 357, 127, 0,\r
+3, 109, 105, 104, 127, 252, 268, 0,\r
+3, 105, 109, 110, 252, 127, 228, 0,\r
+3, 110, 106, 105, 228, 141, 252, 0,\r
+3, 106, 110, 111, 141, 228, 33, 0,\r
+3, 111, 107, 106, 33, 18, 141, 0,\r
+3, 39, 44, 112, 28, 322, 396, 0,\r
+3, 112, 108, 39, 396, 357, 28, 0,\r
+3, 108, 112, 113, 357, 396, 294, 0,\r
+3, 113, 109, 108, 294, 127, 357, 0,\r
+3, 109, 113, 114, 127, 294, 56, 0,\r
+3, 114, 110, 109, 56, 228, 127, 0,\r
+3, 110, 114, 115, 228, 56, 517, 0,\r
+3, 115, 111, 110, 517, 33, 228, 0,\r
+3, 44, 49, 116, 322, 313, 474, 0,\r
+3, 116, 112, 44, 474, 396, 322, 0,\r
+3, 112, 116, 117, 396, 474, 208, 0,\r
+3, 117, 113, 112, 208, 294, 396, 0,\r
+3, 113, 117, 118, 294, 208, 301, 0,\r
+3, 118, 114, 113, 301, 56, 294, 0,\r
+3, 114, 118, 119, 56, 301, 242, 0,\r
+3, 119, 115, 114, 242, 517, 56, 0,\r
+3, 49, 54, 120, 313, 447, 377, 0,\r
+3, 120, 116, 49, 377, 474, 313, 0,\r
+3, 116, 120, 121, 474, 377, 333, 0,\r
+3, 121, 117, 116, 333, 208, 474, 0,\r
+3, 117, 121, 122, 208, 333, 222, 0,\r
+3, 122, 118, 117, 222, 301, 208, 0,\r
+3, 118, 122, 123, 301, 222, 218, 0,\r
+3, 123, 119, 118, 218, 242, 301, 0,\r
+3, 54, 59, 124, 447, 348, 350, 0,\r
+3, 124, 120, 54, 350, 377, 447, 0,\r
+3, 120, 124, 125, 377, 350, 420, 0,\r
+3, 125, 121, 120, 420, 333, 377, 0,\r
+3, 121, 125, 126, 333, 420, 453, 0,\r
+3, 126, 122, 121, 453, 222, 333, 0,\r
+3, 122, 126, 127, 222, 453, 147, 0,\r
+3, 127, 123, 122, 147, 218, 222, 0,\r
+3, 59, 64, 128, 348, 257, 95, 0,\r
+3, 128, 124, 59, 95, 350, 348, 0,\r
+3, 124, 128, 129, 350, 95, 293, 0,\r
+3, 129, 125, 124, 293, 420, 350, 0,\r
+3, 125, 129, 130, 420, 293, 378, 0,\r
+3, 130, 126, 125, 378, 453, 420, 0,\r
+3, 126, 130, 131, 453, 378, 29, 0,\r
+3, 131, 127, 126, 29, 147, 453, 0,\r
+3, 64, 69, 132, 257, 104, 311, 0,\r
+3, 132, 128, 64, 311, 95, 257, 0,\r
+3, 128, 132, 133, 95, 311, 419, 0,\r
+3, 133, 129, 128, 419, 293, 95, 0,\r
+3, 129, 133, 134, 293, 419, 463, 0,\r
+3, 134, 130, 129, 463, 378, 293, 0,\r
+3, 130, 134, 135, 378, 463, 490, 0,\r
+3, 135, 131, 130, 490, 29, 378, 0,\r
+3, 69, 74, 136, 104, 480, 284, 0,\r
+3, 136, 132, 69, 284, 311, 104, 0,\r
+3, 132, 136, 137, 311, 284, 269, 0,\r
+3, 137, 133, 132, 269, 419, 311, 0,\r
+3, 133, 137, 138, 419, 269, 164, 0,\r
+3, 138, 134, 133, 164, 463, 419, 0,\r
+3, 134, 138, 139, 463, 164, 45, 0,\r
+3, 139, 135, 134, 45, 490, 463, 0,\r
+3, 74, 79, 140, 480, 273, 371, 0,\r
+3, 140, 136, 74, 371, 284, 480, 0,\r
+3, 136, 140, 141, 284, 371, 148, 0,\r
+3, 141, 137, 136, 148, 269, 284, 0,\r
+3, 137, 141, 142, 269, 148, 251, 0,\r
+3, 142, 138, 137, 251, 164, 269, 0,\r
+3, 138, 142, 143, 164, 251, 54, 0,\r
+3, 143, 139, 138, 54, 45, 164, 0,\r
+3, 79, 4, 80, 273, 116, 131, 0,\r
+3, 80, 140, 79, 131, 371, 273, 0,\r
+3, 140, 80, 81, 371, 131, 26, 0,\r
+3, 81, 141, 140, 26, 148, 371, 0,\r
+3, 141, 81, 82, 148, 26, 336, 0,\r
+3, 82, 142, 141, 336, 251, 148, 0,\r
+3, 142, 82, 83, 251, 336, 1, 0,\r
+3, 83, 143, 142, 1, 54, 251, 0,\r
+3, 83, 87, 148, 1, 511, 404, 0,\r
+3, 148, 144, 83, 404, 276, 1, 0,\r
+3, 144, 148, 149, 276, 404, 308, 0,\r
+3, 149, 145, 144, 308, 520, 276, 0,\r
+3, 145, 149, 150, 520, 308, 325, 0,\r
+3, 150, 146, 145, 325, 395, 520, 0,\r
+3, 146, 150, 151, 395, 325, 384, 0,\r
+3, 151, 147, 146, 384, 246, 395, 0,\r
+3, 87, 91, 152, 511, 484, 47, 0,\r
+3, 152, 148, 87, 47, 404, 511, 0,\r
+3, 148, 152, 153, 404, 47, 272, 0,\r
+3, 153, 149, 148, 272, 308, 404, 0,\r
+3, 149, 153, 154, 308, 272, 415, 0,\r
+3, 154, 150, 149, 415, 325, 308, 0,\r
+3, 150, 154, 155, 325, 415, 83, 0,\r
+3, 155, 151, 150, 83, 384, 325, 0,\r
+3, 91, 95, 156, 484, 417, 430, 0,\r
+3, 156, 152, 91, 430, 47, 484, 0,\r
+3, 152, 156, 157, 47, 430, 137, 0,\r
+3, 157, 153, 152, 137, 272, 47, 0,\r
+3, 153, 157, 158, 272, 137, 416, 0,\r
+3, 158, 154, 153, 416, 415, 272, 0,\r
+3, 154, 158, 159, 415, 416, 297, 0,\r
+3, 159, 155, 154, 297, 83, 415, 0,\r
+3, 95, 99, 160, 417, 304, 458, 0,\r
+3, 160, 156, 95, 458, 430, 417, 0,\r
+3, 156, 160, 161, 430, 458, 343, 0,\r
+3, 161, 157, 156, 343, 137, 430, 0,\r
+3, 157, 161, 162, 137, 343, 334, 0,\r
+3, 162, 158, 157, 334, 416, 137, 0,\r
+3, 158, 162, 163, 416, 334, 317, 0,\r
+3, 163, 159, 158, 317, 297, 416, 0,\r
+3, 99, 103, 164, 304, 466, 187, 0,\r
+3, 164, 160, 99, 187, 458, 304, 0,\r
+3, 160, 164, 165, 458, 187, 117, 0,\r
+3, 165, 161, 160, 117, 343, 458, 0,\r
+3, 161, 165, 166, 343, 117, 438, 0,\r
+3, 166, 162, 161, 438, 334, 343, 0,\r
+3, 162, 166, 167, 334, 438, 459, 0,\r
+3, 167, 163, 162, 459, 317, 334, 0,\r
+3, 103, 107, 168, 466, 18, 353, 0,\r
+3, 168, 164, 103, 353, 187, 466, 0,\r
+3, 164, 168, 169, 187, 353, 123, 0,\r
+3, 169, 165, 164, 123, 117, 187, 0,\r
+3, 165, 169, 170, 117, 123, 168, 0,\r
+3, 170, 166, 165, 168, 438, 117, 0,\r
+3, 166, 170, 171, 438, 168, 426, 0,\r
+3, 171, 167, 166, 426, 459, 438, 0,\r
+3, 107, 111, 172, 18, 33, 390, 0,\r
+3, 172, 168, 107, 390, 353, 18, 0,\r
+3, 168, 172, 173, 353, 390, 290, 0,\r
+3, 173, 169, 168, 290, 123, 353, 0,\r
+3, 169, 173, 174, 123, 290, 522, 0,\r
+3, 174, 170, 169, 522, 168, 123, 0,\r
+3, 170, 174, 175, 168, 522, 87, 0,\r
+3, 175, 171, 170, 87, 426, 168, 0,\r
+3, 111, 115, 176, 33, 517, 260, 0,\r
+3, 176, 172, 111, 260, 390, 33, 0,\r
+3, 172, 176, 177, 390, 260, 497, 0,\r
+3, 177, 173, 172, 497, 290, 390, 0,\r
+3, 173, 177, 178, 290, 497, 126, 0,\r
+3, 178, 174, 173, 126, 522, 290, 0,\r
+3, 174, 178, 179, 522, 126, 501, 0,\r
+3, 179, 175, 174, 501, 87, 522, 0,\r
+3, 115, 119, 180, 517, 242, 130, 0,\r
+3, 180, 176, 115, 130, 260, 517, 0,\r
+3, 176, 180, 181, 260, 130, 34, 0,\r
+3, 181, 177, 176, 34, 497, 260, 0,\r
+3, 177, 181, 182, 497, 34, 46, 0,\r
+3, 182, 178, 177, 46, 126, 497, 0,\r
+3, 178, 182, 183, 126, 46, 105, 0,\r
+3, 183, 179, 178, 105, 501, 126, 0,\r
+3, 119, 123, 184, 242, 218, 310, 0,\r
+3, 184, 180, 119, 310, 130, 242, 0,\r
+3, 180, 184, 185, 130, 310, 528, 0,\r
+3, 185, 181, 180, 528, 34, 130, 0,\r
+3, 181, 185, 186, 34, 528, 145, 0,\r
+3, 186, 182, 181, 145, 46, 34, 0,\r
+3, 182, 186, 187, 46, 145, 356, 0,\r
+3, 187, 183, 182, 356, 105, 46, 0,\r
+3, 123, 127, 188, 218, 147, 156, 0,\r
+3, 188, 184, 123, 156, 310, 218, 0,\r
+3, 184, 188, 189, 310, 156, 402, 0,\r
+3, 189, 185, 184, 402, 528, 310, 0,\r
+3, 185, 189, 190, 528, 402, 146, 0,\r
+3, 190, 186, 185, 146, 145, 528, 0,\r
+3, 186, 190, 191, 145, 146, 17, 0,\r
+3, 191, 187, 186, 17, 356, 145, 0,\r
+3, 127, 131, 192, 147, 29, 184, 0,\r
+3, 192, 188, 127, 184, 156, 147, 0,\r
+3, 188, 192, 193, 156, 184, 63, 0,\r
+3, 193, 189, 188, 63, 402, 156, 0,\r
+3, 189, 193, 194, 402, 63, 354, 0,\r
+3, 194, 190, 189, 354, 146, 402, 0,\r
+3, 190, 194, 195, 146, 354, 335, 0,\r
+3, 195, 191, 190, 335, 17, 146, 0,\r
+3, 131, 135, 196, 29, 490, 210, 0,\r
+3, 196, 192, 131, 210, 184, 29, 0,\r
+3, 192, 196, 197, 184, 210, 129, 0,\r
+3, 197, 193, 192, 129, 63, 184, 0,\r
+3, 193, 197, 198, 63, 129, 461, 0,\r
+3, 198, 194, 193, 461, 354, 63, 0,\r
+3, 194, 198, 199, 354, 461, 475, 0,\r
+3, 199, 195, 194, 475, 335, 354, 0,\r
+3, 135, 139, 200, 490, 45, 370, 0,\r
+3, 200, 196, 135, 370, 210, 490, 0,\r
+3, 196, 200, 201, 210, 370, 143, 0,\r
+3, 201, 197, 196, 143, 129, 210, 0,\r
+3, 197, 201, 202, 129, 143, 195, 0,\r
+3, 202, 198, 197, 195, 461, 129, 0,\r
+3, 198, 202, 203, 461, 195, 444, 0,\r
+3, 203, 199, 198, 444, 475, 461, 0,\r
+3, 139, 143, 204, 45, 54, 403, 0,\r
+3, 204, 200, 139, 403, 370, 45, 0,\r
+3, 200, 204, 205, 370, 403, 315, 0,\r
+3, 205, 201, 200, 315, 143, 370, 0,\r
+3, 201, 205, 206, 143, 315, 7, 0,\r
+3, 206, 202, 201, 7, 195, 143, 0,\r
+3, 202, 206, 207, 195, 7, 101, 0,\r
+3, 207, 203, 202, 101, 444, 195, 0,\r
+3, 143, 83, 144, 54, 1, 276, 0,\r
+3, 144, 204, 143, 276, 403, 54, 0,\r
+3, 204, 144, 145, 403, 276, 520, 0,\r
+3, 145, 205, 204, 520, 315, 403, 0,\r
+3, 205, 145, 146, 315, 520, 395, 0,\r
+3, 146, 206, 205, 395, 7, 315, 0,\r
+3, 206, 146, 147, 7, 395, 246, 0,\r
+3, 147, 207, 206, 246, 101, 7, 0,\r
+3, 147, 151, 212, 246, 384, 486, 0,\r
+3, 212, 208, 147, 486, 279, 246, 0,\r
+3, 208, 212, 213, 279, 486, 231, 0,\r
+3, 213, 209, 208, 231, 349, 279, 0,\r
+3, 209, 213, 214, 349, 231, 0, 0,\r
+3, 214, 210, 209, 0, 216, 349, 0,\r
+3, 210, 214, 211, 216, 0, 393, 0,\r
+3, 211, 211, 210, 393, 393, 216, 0,\r
+3, 151, 155, 215, 384, 83, 215, 0,\r
+3, 215, 212, 151, 215, 486, 384, 0,\r
+3, 212, 215, 216, 486, 215, 327, 0,\r
+3, 216, 213, 212, 327, 231, 486, 0,\r
+3, 213, 216, 217, 231, 327, 512, 0,\r
+3, 217, 214, 213, 512, 0, 231, 0,\r
+3, 214, 217, 211, 0, 512, 393, 0,\r
+3, 211, 211, 214, 393, 393, 0, 0,\r
+3, 155, 159, 218, 83, 297, 149, 0,\r
+3, 218, 215, 155, 149, 215, 83, 0,\r
+3, 215, 218, 219, 215, 149, 91, 0,\r
+3, 219, 216, 215, 91, 327, 215, 0,\r
+3, 216, 219, 220, 327, 91, 177, 0,\r
+3, 220, 217, 216, 177, 512, 327, 0,\r
+3, 217, 220, 211, 512, 177, 393, 0,\r
+3, 211, 211, 217, 393, 393, 512, 0,\r
+3, 159, 163, 221, 297, 317, 504, 0,\r
+3, 221, 218, 159, 504, 149, 297, 0,\r
+3, 218, 221, 222, 149, 504, 285, 0,\r
+3, 222, 219, 218, 285, 91, 149, 0,\r
+3, 219, 222, 223, 91, 285, 254, 0,\r
+3, 223, 220, 219, 254, 177, 91, 0,\r
+3, 220, 223, 211, 177, 254, 393, 0,\r
+3, 211, 211, 220, 393, 393, 177, 0,\r
+3, 163, 167, 224, 317, 459, 125, 0,\r
+3, 224, 221, 163, 125, 504, 317, 0,\r
+3, 221, 224, 225, 504, 125, 162, 0,\r
+3, 225, 222, 221, 162, 285, 504, 0,\r
+3, 222, 225, 226, 285, 162, 278, 0,\r
+3, 226, 223, 222, 278, 254, 285, 0,\r
+3, 223, 226, 211, 254, 278, 393, 0,\r
+3, 211, 211, 223, 393, 393, 254, 0,\r
+3, 167, 171, 227, 459, 426, 439, 0,\r
+3, 227, 224, 167, 439, 125, 459, 0,\r
+3, 224, 227, 228, 125, 439, 60, 0,\r
+3, 228, 225, 224, 60, 162, 125, 0,\r
+3, 225, 228, 229, 162, 60, 446, 0,\r
+3, 229, 226, 225, 446, 278, 162, 0,\r
+3, 226, 229, 211, 278, 446, 393, 0,\r
+3, 211, 211, 226, 393, 393, 278, 0,\r
+3, 171, 175, 230, 426, 87, 482, 0,\r
+3, 230, 227, 171, 482, 439, 426, 0,\r
+3, 227, 230, 231, 439, 482, 92, 0,\r
+3, 231, 228, 227, 92, 60, 439, 0,\r
+3, 228, 231, 232, 60, 92, 110, 0,\r
+3, 232, 229, 228, 110, 446, 60, 0,\r
+3, 229, 232, 211, 446, 110, 393, 0,\r
+3, 211, 211, 229, 393, 393, 446, 0,\r
+3, 175, 179, 233, 87, 501, 261, 0,\r
+3, 233, 230, 175, 261, 482, 87, 0,\r
+3, 230, 233, 234, 482, 261, 329, 0,\r
+3, 234, 231, 230, 329, 92, 482, 0,\r
+3, 231, 234, 235, 92, 329, 192, 0,\r
+3, 235, 232, 231, 192, 110, 92, 0,\r
+3, 232, 235, 211, 110, 192, 393, 0,\r
+3, 211, 211, 232, 393, 393, 110, 0,\r
+3, 179, 183, 236, 501, 105, 219, 0,\r
+3, 236, 233, 179, 219, 261, 501, 0,\r
+3, 233, 236, 237, 261, 219, 491, 0,\r
+3, 237, 234, 233, 491, 329, 261, 0,\r
+3, 234, 237, 238, 329, 491, 267, 0,\r
+3, 238, 235, 234, 267, 192, 329, 0,\r
+3, 235, 238, 211, 192, 267, 393, 0,\r
+3, 211, 211, 235, 393, 393, 192, 0,\r
+3, 183, 187, 239, 105, 356, 472, 0,\r
+3, 239, 236, 183, 472, 219, 105, 0,\r
+3, 236, 239, 240, 219, 472, 48, 0,\r
+3, 240, 237, 236, 48, 491, 219, 0,\r
+3, 237, 240, 241, 491, 48, 247, 0,\r
+3, 241, 238, 237, 247, 267, 491, 0,\r
+3, 238, 241, 211, 267, 247, 393, 0,\r
+3, 211, 211, 238, 393, 393, 267, 0,\r
+3, 187, 191, 242, 356, 17, 411, 0,\r
+3, 242, 239, 187, 411, 472, 356, 0,\r
+3, 239, 242, 243, 472, 411, 364, 0,\r
+3, 243, 240, 239, 364, 48, 472, 0,\r
+3, 240, 243, 244, 48, 364, 441, 0,\r
+3, 244, 241, 240, 441, 247, 48, 0,\r
+3, 241, 244, 211, 247, 441, 393, 0,\r
+3, 211, 211, 241, 393, 393, 247, 0,\r
+3, 191, 195, 245, 17, 335, 239, 0,\r
+3, 245, 242, 191, 239, 411, 17, 0,\r
+3, 242, 245, 246, 411, 239, 13, 0,\r
+3, 246, 243, 242, 13, 364, 411, 0,\r
+3, 243, 246, 247, 364, 13, 509, 0,\r
+3, 247, 244, 243, 509, 441, 364, 0,\r
+3, 244, 247, 211, 441, 509, 393, 0,\r
+3, 211, 211, 244, 393, 393, 441, 0,\r
+3, 195, 199, 248, 335, 475, 144, 0,\r
+3, 248, 245, 195, 144, 239, 335, 0,\r
+3, 245, 248, 249, 239, 144, 179, 0,\r
+3, 249, 246, 245, 179, 13, 239, 0,\r
+3, 246, 249, 250, 13, 179, 298, 0,\r
+3, 250, 247, 246, 298, 509, 13, 0,\r
+3, 247, 250, 211, 509, 298, 393, 0,\r
+3, 211, 211, 247, 393, 393, 509, 0,\r
+3, 199, 203, 251, 475, 444, 462, 0,\r
+3, 251, 248, 199, 462, 144, 475, 0,\r
+3, 248, 251, 252, 144, 462, 76, 0,\r
+3, 252, 249, 248, 76, 179, 144, 0,\r
+3, 249, 252, 253, 179, 76, 464, 0,\r
+3, 253, 250, 249, 464, 298, 179, 0,\r
+3, 250, 253, 211, 298, 464, 393, 0,\r
+3, 211, 211, 250, 393, 393, 298, 0,\r
+3, 203, 207, 254, 444, 101, 500, 0,\r
+3, 254, 251, 203, 500, 462, 444, 0,\r
+3, 251, 254, 255, 462, 500, 113, 0,\r
+3, 255, 252, 251, 113, 76, 462, 0,\r
+3, 252, 255, 256, 76, 113, 128, 0,\r
+3, 256, 253, 252, 128, 464, 76, 0,\r
+3, 253, 256, 211, 464, 128, 393, 0,\r
+3, 211, 211, 253, 393, 393, 464, 0,\r
+3, 207, 147, 208, 101, 246, 279, 0,\r
+3, 208, 254, 207, 279, 500, 101, 0,\r
+3, 254, 208, 209, 500, 279, 349, 0,\r
+3, 209, 255, 254, 349, 113, 500, 0,\r
+3, 255, 209, 210, 113, 349, 216, 0,\r
+3, 210, 256, 255, 216, 128, 113, 0,\r
+3, 256, 210, 211, 128, 216, 393, 0,\r
+3, 211, 211, 256, 393, 393, 128, 0,\r
+3, 257, 262, 263, 425, 244, 58, 0,\r
+3, 263, 258, 257, 58, 337, 425, 0,\r
+3, 258, 263, 264, 337, 58, 214, 0,\r
+3, 264, 259, 258, 214, 236, 337, 0,\r
+3, 259, 264, 265, 236, 214, 266, 0,\r
+3, 265, 260, 259, 266, 32, 236, 0,\r
+3, 260, 265, 266, 32, 266, 331, 0,\r
+3, 266, 261, 260, 331, 109, 32, 0,\r
+3, 262, 267, 268, 244, 233, 369, 0,\r
+3, 268, 263, 262, 369, 58, 244, 0,\r
+3, 263, 268, 269, 58, 369, 71, 0,\r
+3, 269, 264, 263, 71, 214, 58, 0,\r
+3, 264, 269, 270, 214, 71, 392, 0,\r
+3, 270, 265, 264, 392, 266, 214, 0,\r
+3, 265, 270, 271, 266, 392, 312, 0,\r
+3, 271, 266, 265, 312, 331, 266, 0,\r
+3, 267, 272, 273, 233, 12, 434, 0,\r
+3, 273, 268, 267, 434, 369, 233, 0,\r
+3, 268, 273, 274, 369, 434, 188, 0,\r
+3, 274, 269, 268, 188, 71, 369, 0,\r
+3, 269, 274, 275, 71, 188, 201, 0,\r
+3, 275, 270, 269, 201, 392, 71, 0,\r
+3, 270, 275, 276, 392, 201, 238, 0,\r
+3, 276, 271, 270, 238, 312, 392, 0,\r
+3, 272, 277, 278, 12, 142, 114, 0,\r
+3, 278, 273, 272, 114, 434, 12, 0,\r
+3, 273, 278, 279, 434, 114, 173, 0,\r
+3, 279, 274, 273, 173, 188, 434, 0,\r
+3, 274, 279, 280, 188, 173, 14, 0,\r
+3, 280, 275, 274, 14, 201, 188, 0,\r
+3, 275, 280, 281, 201, 14, 15, 0,\r
+3, 281, 276, 275, 15, 238, 201, 0,\r
+3, 277, 282, 283, 142, 407, 288, 0,\r
+3, 283, 278, 277, 288, 114, 142, 0,\r
+3, 278, 283, 284, 114, 288, 400, 0,\r
+3, 284, 279, 278, 400, 173, 114, 0,\r
+3, 279, 284, 285, 173, 400, 457, 0,\r
+3, 285, 280, 279, 457, 14, 173, 0,\r
+3, 280, 285, 286, 14, 457, 332, 0,\r
+3, 286, 281, 280, 332, 15, 14, 0,\r
+3, 282, 287, 288, 407, 194, 42, 0,\r
+3, 288, 283, 282, 42, 288, 407, 0,\r
+3, 283, 288, 289, 288, 42, 380, 0,\r
+3, 289, 284, 283, 380, 400, 288, 0,\r
+3, 284, 289, 290, 400, 380, 383, 0,\r
+3, 290, 285, 284, 383, 457, 400, 0,\r
+3, 285, 290, 291, 457, 383, 197, 0,\r
+3, 291, 286, 285, 197, 332, 457, 0,\r
+3, 287, 292, 293, 194, 321, 152, 0,\r
+3, 293, 288, 287, 152, 42, 194, 0,\r
+3, 288, 293, 294, 42, 152, 397, 0,\r
+3, 294, 289, 288, 397, 380, 42, 0,\r
+3, 289, 294, 295, 380, 397, 342, 0,\r
+3, 295, 290, 289, 342, 383, 380, 0,\r
+3, 290, 295, 296, 383, 342, 225, 0,\r
+3, 296, 291, 290, 225, 197, 383, 0,\r
+3, 292, 257, 258, 321, 425, 337, 0,\r
+3, 258, 293, 292, 337, 152, 321, 0,\r
+3, 293, 258, 259, 152, 337, 236, 0,\r
+3, 259, 294, 293, 236, 397, 152, 0,\r
+3, 294, 259, 260, 397, 236, 32, 0,\r
+3, 260, 295, 294, 32, 342, 397, 0,\r
+3, 295, 260, 261, 342, 32, 109, 0,\r
+3, 261, 296, 295, 109, 225, 342, 0,\r
+3, 261, 266, 301, 109, 331, 175, 0,\r
+3, 301, 297, 261, 175, 502, 109, 0,\r
+3, 297, 301, 302, 502, 175, 265, 0,\r
+3, 302, 298, 297, 265, 84, 502, 0,\r
+3, 298, 302, 303, 84, 265, 186, 0,\r
+3, 303, 299, 298, 186, 496, 84, 0,\r
+3, 299, 303, 304, 496, 186, 470, 0,\r
+3, 304, 300, 299, 470, 494, 496, 0,\r
+3, 266, 271, 305, 331, 312, 170, 0,\r
+3, 305, 301, 266, 170, 175, 331, 0,\r
+3, 301, 305, 306, 175, 170, 97, 0,\r
+3, 306, 302, 301, 97, 265, 175, 0,\r
+3, 302, 306, 307, 265, 97, 205, 0,\r
+3, 307, 303, 302, 205, 186, 265, 0,\r
+3, 303, 307, 308, 186, 205, 449, 0,\r
+3, 308, 304, 303, 449, 470, 186, 0,\r
+3, 271, 276, 309, 312, 238, 379, 0,\r
+3, 309, 305, 271, 379, 170, 312, 0,\r
+3, 305, 309, 310, 170, 379, 300, 0,\r
+3, 310, 306, 305, 300, 97, 170, 0,\r
+3, 306, 310, 311, 97, 300, 118, 0,\r
+3, 311, 307, 306, 118, 205, 97, 0,\r
+3, 307, 311, 312, 205, 118, 237, 0,\r
+3, 312, 308, 307, 237, 449, 205, 0,\r
+3, 276, 281, 313, 238, 15, 199, 0,\r
+3, 313, 309, 276, 199, 379, 238, 0,\r
+3, 309, 313, 314, 379, 199, 94, 0,\r
+3, 314, 310, 309, 94, 300, 379, 0,\r
+3, 310, 314, 315, 300, 94, 421, 0,\r
+3, 315, 311, 310, 421, 118, 300, 0,\r
+3, 311, 315, 316, 118, 421, 31, 0,\r
+3, 316, 312, 311, 31, 237, 118, 0,\r
+3, 281, 286, 317, 15, 332, 367, 0,\r
+3, 317, 313, 281, 367, 199, 15, 0,\r
+3, 313, 317, 318, 199, 367, 529, 0,\r
+3, 318, 314, 313, 529, 94, 199, 0,\r
+3, 314, 318, 319, 94, 529, 185, 0,\r
+3, 319, 315, 314, 185, 421, 94, 0,\r
+3, 315, 319, 320, 421, 185, 89, 0,\r
+3, 320, 316, 315, 89, 31, 421, 0,\r
+3, 286, 291, 321, 332, 197, 172, 0,\r
+3, 321, 317, 286, 172, 367, 332, 0,\r
+3, 317, 321, 322, 367, 172, 209, 0,\r
+3, 322, 318, 317, 209, 529, 367, 0,\r
+3, 318, 322, 323, 529, 209, 429, 0,\r
+3, 323, 319, 318, 429, 185, 529, 0,\r
+3, 319, 323, 324, 185, 429, 112, 0,\r
+3, 324, 320, 319, 112, 89, 185, 0,\r
+3, 291, 296, 325, 197, 225, 451, 0,\r
+3, 325, 321, 291, 451, 172, 197, 0,\r
+3, 321, 325, 326, 172, 451, 66, 0,\r
+3, 326, 322, 321, 66, 209, 172, 0,\r
+3, 322, 326, 327, 209, 66, 176, 0,\r
+3, 327, 323, 322, 176, 429, 209, 0,\r
+3, 323, 327, 328, 429, 176, 155, 0,\r
+3, 328, 324, 323, 155, 112, 429, 0,\r
+3, 296, 261, 297, 225, 109, 502, 0,\r
+3, 297, 325, 296, 502, 451, 225, 0,\r
+3, 325, 297, 298, 451, 502, 84, 0,\r
+3, 298, 326, 325, 84, 66, 451, 0,\r
+3, 326, 298, 299, 66, 84, 496, 0,\r
+3, 299, 327, 326, 496, 176, 66, 0,\r
+3, 327, 299, 300, 176, 496, 494, 0,\r
+3, 300, 328, 327, 494, 155, 176, 0,\r
+3, 329, 334, 335, 3, 355, 122, 0,\r
+3, 335, 330, 329, 122, 518, 3, 0,\r
+3, 330, 335, 336, 518, 122, 111, 0,\r
+3, 336, 331, 330, 111, 213, 518, 0,\r
+3, 331, 336, 337, 213, 111, 473, 0,\r
+3, 337, 332, 331, 473, 468, 213, 0,\r
+3, 332, 337, 338, 468, 473, 521, 0,\r
+3, 338, 333, 332, 521, 346, 468, 0,\r
+3, 334, 339, 340, 355, 61, 414, 0,\r
+3, 340, 335, 334, 414, 122, 355, 0,\r
+3, 335, 340, 341, 122, 414, 413, 0,\r
+3, 341, 336, 335, 413, 111, 122, 0,\r
+3, 336, 341, 342, 111, 413, 204, 0,\r
+3, 342, 337, 336, 204, 473, 111, 0,\r
+3, 337, 342, 343, 473, 204, 217, 0,\r
+3, 343, 338, 337, 217, 521, 473, 0,\r
+3, 339, 344, 345, 61, 55, 100, 0,\r
+3, 345, 340, 339, 100, 414, 61, 0,\r
+3, 340, 345, 346, 414, 100, 399, 0,\r
+3, 346, 341, 340, 399, 413, 414, 0,\r
+3, 341, 346, 347, 413, 399, 326, 0,\r
+3, 347, 342, 341, 326, 204, 413, 0,\r
+3, 342, 347, 348, 204, 326, 221, 0,\r
+3, 348, 343, 342, 221, 217, 204, 0,\r
+3, 344, 349, 350, 55, 508, 477, 0,\r
+3, 350, 345, 344, 477, 100, 55, 0,\r
+3, 345, 350, 351, 100, 477, 292, 0,\r
+3, 351, 346, 345, 292, 399, 100, 0,\r
+3, 346, 351, 352, 399, 292, 73, 0,\r
+3, 352, 347, 346, 73, 326, 399, 0,\r
+3, 347, 352, 353, 326, 73, 362, 0,\r
+3, 353, 348, 347, 362, 221, 326, 0,\r
+3, 349, 354, 355, 508, 365, 262, 0,\r
+3, 355, 350, 349, 262, 477, 508, 0,\r
+3, 350, 355, 356, 477, 262, 93, 0,\r
+3, 356, 351, 350, 93, 292, 477, 0,\r
+3, 351, 356, 357, 292, 93, 318, 0,\r
+3, 357, 352, 351, 318, 73, 292, 0,\r
+3, 352, 357, 358, 73, 318, 163, 0,\r
+3, 358, 353, 352, 163, 362, 73, 0,\r
+3, 354, 359, 360, 365, 140, 340, 0,\r
+3, 360, 355, 354, 340, 262, 365, 0,\r
+3, 355, 360, 361, 262, 340, 505, 0,\r
+3, 361, 356, 355, 505, 93, 262, 0,\r
+3, 356, 361, 362, 93, 505, 499, 0,\r
+3, 362, 357, 356, 499, 318, 93, 0,\r
+3, 357, 362, 363, 318, 499, 159, 0,\r
+3, 363, 358, 357, 159, 163, 318, 0,\r
+3, 359, 364, 365, 140, 510, 68, 0,\r
+3, 365, 360, 359, 68, 340, 140, 0,\r
+3, 360, 365, 366, 340, 68, 167, 0,\r
+3, 366, 361, 360, 167, 505, 340, 0,\r
+3, 361, 366, 367, 505, 167, 245, 0,\r
+3, 367, 362, 361, 245, 499, 505, 0,\r
+3, 362, 367, 368, 499, 245, 437, 0,\r
+3, 368, 363, 362, 437, 159, 499, 0,\r
+3, 364, 329, 330, 510, 3, 518, 0,\r
+3, 330, 365, 364, 518, 68, 510, 0,\r
+3, 365, 330, 331, 68, 518, 213, 0,\r
+3, 331, 366, 365, 213, 167, 68, 0,\r
+3, 366, 331, 332, 167, 213, 468, 0,\r
+3, 332, 367, 366, 468, 245, 167, 0,\r
+3, 367, 332, 333, 245, 468, 346, 0,\r
+3, 333, 368, 367, 346, 437, 245, 0,\r
+3, 333, 338, 373, 346, 521, 79, 0,\r
+3, 373, 369, 333, 79, 286, 346, 0,\r
+3, 369, 373, 374, 286, 79, 77, 0,\r
+3, 374, 370, 369, 77, 22, 286, 0,\r
+3, 370, 374, 375, 22, 77, 523, 0,\r
+3, 375, 371, 370, 523, 330, 22, 0,\r
+3, 371, 375, 376, 330, 523, 259, 0,\r
+3, 376, 372, 371, 259, 338, 330, 0,\r
+3, 338, 343, 377, 521, 217, 207, 0,\r
+3, 377, 373, 338, 207, 79, 521, 0,\r
+3, 373, 377, 378, 79, 207, 471, 0,\r
+3, 378, 374, 373, 471, 77, 79, 0,\r
+3, 374, 378, 379, 77, 471, 198, 0,\r
+3, 379, 375, 374, 198, 523, 77, 0,\r
+3, 375, 379, 380, 523, 198, 366, 0,\r
+3, 380, 376, 375, 366, 259, 523, 0,\r
+3, 343, 348, 381, 217, 221, 516, 0,\r
+3, 381, 377, 343, 516, 207, 217, 0,\r
+3, 377, 381, 382, 207, 516, 250, 0,\r
+3, 382, 378, 377, 250, 471, 207, 0,\r
+3, 378, 382, 383, 471, 250, 240, 0,\r
+3, 383, 379, 378, 240, 198, 471, 0,\r
+3, 379, 383, 384, 198, 240, 381, 0,\r
+3, 384, 380, 379, 381, 366, 198, 0,\r
+3, 348, 353, 385, 221, 362, 230, 0,\r
+3, 385, 381, 348, 230, 516, 221, 0,\r
+3, 381, 385, 386, 516, 230, 303, 0,\r
+3, 386, 382, 381, 303, 250, 516, 0,\r
+3, 382, 386, 387, 250, 303, 10, 0,\r
+3, 387, 383, 382, 10, 240, 250, 0,\r
+3, 383, 387, 388, 240, 10, 283, 0,\r
+3, 388, 384, 383, 283, 381, 240, 0,\r
+3, 353, 358, 389, 362, 163, 282, 0,\r
+3, 389, 385, 353, 282, 230, 362, 0,\r
+3, 385, 389, 390, 230, 282, 35, 0,\r
+3, 390, 386, 385, 35, 303, 230, 0,\r
+3, 386, 390, 391, 303, 35, 243, 0,\r
+3, 391, 387, 386, 243, 10, 303, 0,\r
+3, 387, 391, 392, 10, 243, 368, 0,\r
+3, 392, 388, 387, 368, 283, 10, 0,\r
+3, 358, 363, 393, 163, 159, 296, 0,\r
+3, 393, 389, 358, 296, 282, 163, 0,\r
+3, 389, 393, 394, 282, 296, 160, 0,\r
+3, 394, 390, 389, 160, 35, 282, 0,\r
+3, 390, 394, 395, 35, 160, 323, 0,\r
+3, 395, 391, 390, 323, 243, 35, 0,\r
+3, 391, 395, 396, 243, 323, 280, 0,\r
+3, 396, 392, 391, 280, 368, 243, 0,\r
+3, 363, 368, 397, 159, 437, 275, 0,\r
+3, 397, 393, 363, 275, 296, 159, 0,\r
+3, 393, 397, 398, 296, 275, 133, 0,\r
+3, 398, 394, 393, 133, 160, 296, 0,\r
+3, 394, 398, 399, 160, 133, 344, 0,\r
+3, 399, 395, 394, 344, 323, 160, 0,\r
+3, 395, 399, 400, 323, 344, 108, 0,\r
+3, 400, 396, 395, 108, 280, 323, 0,\r
+3, 368, 333, 369, 437, 346, 286, 0,\r
+3, 369, 397, 368, 286, 275, 437, 0,\r
+3, 397, 369, 370, 275, 286, 22, 0,\r
+3, 370, 398, 397, 22, 133, 275, 0,\r
+3, 398, 370, 371, 133, 22, 330, 0,\r
+3, 371, 399, 398, 330, 344, 133, 0,\r
+3, 399, 371, 372, 344, 330, 338, 0,\r
+3, 372, 400, 399, 338, 108, 344, 0,\r
+3, 401, 401, 406, 235, 235, 189, 0,\r
+3, 406, 402, 401, 189, 40, 235, 0,\r
+3, 402, 406, 407, 40, 189, 306, 0,\r
+3, 407, 403, 402, 306, 119, 40, 0,\r
+3, 403, 407, 408, 119, 306, 202, 0,\r
+3, 408, 404, 403, 202, 443, 119, 0,\r
+3, 404, 408, 409, 443, 202, 241, 0,\r
+3, 409, 405, 404, 241, 75, 443, 0,\r
+3, 401, 401, 410, 235, 235, 263, 0,\r
+3, 410, 406, 401, 263, 189, 235, 0,\r
+3, 406, 410, 411, 189, 263, 196, 0,\r
+3, 411, 407, 406, 196, 306, 189, 0,\r
+3, 407, 411, 412, 306, 196, 281, 0,\r
+3, 412, 408, 407, 281, 202, 306, 0,\r
+3, 408, 412, 413, 202, 281, 121, 0,\r
+3, 413, 409, 408, 121, 241, 202, 0,\r
+3, 401, 401, 414, 235, 235, 479, 0,\r
+3, 414, 410, 401, 479, 263, 235, 0,\r
+3, 410, 414, 415, 263, 479, 36, 0,\r
+3, 415, 411, 410, 36, 196, 263, 0,\r
+3, 411, 415, 416, 196, 36, 436, 0,\r
+3, 416, 412, 411, 436, 281, 196, 0,\r
+3, 412, 416, 417, 281, 436, 351, 0,\r
+3, 417, 413, 412, 351, 121, 281, 0,\r
+3, 401, 401, 418, 235, 235, 90, 0,\r
+3, 418, 414, 401, 90, 479, 235, 0,\r
+3, 414, 418, 419, 479, 90, 361, 0,\r
+3, 419, 415, 414, 361, 36, 479, 0,\r
+3, 415, 419, 420, 36, 361, 376, 0,\r
+3, 420, 416, 415, 376, 436, 36, 0,\r
+3, 416, 420, 421, 436, 376, 412, 0,\r
+3, 421, 417, 416, 412, 351, 436, 0,\r
+3, 401, 401, 422, 235, 235, 52, 0,\r
+3, 422, 418, 401, 52, 90, 235, 0,\r
+3, 418, 422, 423, 90, 52, 21, 0,\r
+3, 423, 419, 418, 21, 361, 90, 0,\r
+3, 419, 423, 424, 361, 21, 158, 0,\r
+3, 424, 420, 419, 158, 376, 361, 0,\r
+3, 420, 424, 425, 376, 158, 39, 0,\r
+3, 425, 421, 420, 39, 412, 376, 0,\r
+3, 401, 401, 426, 235, 235, 424, 0,\r
+3, 426, 422, 401, 424, 52, 235, 0,\r
+3, 422, 426, 427, 52, 424, 373, 0,\r
+3, 427, 423, 422, 373, 21, 52, 0,\r
+3, 423, 427, 428, 21, 373, 375, 0,\r
+3, 428, 424, 423, 375, 158, 21, 0,\r
+3, 424, 428, 429, 158, 375, 249, 0,\r
+3, 429, 425, 424, 249, 39, 158, 0,\r
+3, 401, 401, 430, 235, 235, 432, 0,\r
+3, 430, 426, 401, 432, 424, 235, 0,\r
+3, 426, 430, 431, 424, 432, 229, 0,\r
+3, 431, 427, 426, 229, 373, 424, 0,\r
+3, 427, 431, 432, 373, 229, 65, 0,\r
+3, 432, 428, 427, 65, 375, 373, 0,\r
+3, 428, 432, 433, 375, 65, 506, 0,\r
+3, 433, 429, 428, 506, 249, 375, 0,\r
+3, 401, 401, 434, 235, 235, 302, 0,\r
+3, 434, 430, 401, 302, 432, 235, 0,\r
+3, 430, 434, 435, 432, 302, 96, 0,\r
+3, 435, 431, 430, 96, 229, 432, 0,\r
+3, 431, 435, 436, 229, 96, 169, 0,\r
+3, 436, 432, 431, 169, 65, 229, 0,\r
+3, 432, 436, 437, 65, 169, 59, 0,\r
+3, 437, 433, 432, 59, 506, 65, 0,\r
+3, 401, 401, 438, 235, 235, 452, 0,\r
+3, 438, 434, 401, 452, 302, 235, 0,\r
+3, 434, 438, 439, 302, 452, 30, 0,\r
+3, 439, 435, 434, 30, 96, 302, 0,\r
+3, 435, 439, 440, 96, 30, 460, 0,\r
+3, 440, 436, 435, 460, 169, 96, 0,\r
+3, 436, 440, 441, 169, 460, 498, 0,\r
+3, 441, 437, 436, 498, 59, 169, 0,\r
+3, 401, 401, 442, 235, 235, 525, 0,\r
+3, 442, 438, 401, 525, 452, 235, 0,\r
+3, 438, 442, 443, 452, 525, 456, 0,\r
+3, 443, 439, 438, 456, 30, 452, 0,\r
+3, 439, 443, 444, 30, 456, 9, 0,\r
+3, 444, 440, 439, 9, 460, 30, 0,\r
+3, 440, 444, 445, 460, 9, 388, 0,\r
+3, 445, 441, 440, 388, 498, 460, 0,\r
+3, 401, 401, 446, 235, 235, 212, 0,\r
+3, 446, 442, 401, 212, 525, 235, 0,\r
+3, 442, 446, 447, 525, 212, 299, 0,\r
+3, 447, 443, 442, 299, 456, 525, 0,\r
+3, 443, 447, 448, 456, 299, 166, 0,\r
+3, 448, 444, 443, 166, 9, 456, 0,\r
+3, 444, 448, 449, 9, 166, 72, 0,\r
+3, 449, 445, 444, 72, 388, 9, 0,\r
+3, 401, 401, 450, 235, 235, 107, 0,\r
+3, 450, 446, 401, 107, 212, 235, 0,\r
+3, 446, 450, 451, 212, 107, 82, 0,\r
+3, 451, 447, 446, 82, 299, 212, 0,\r
+3, 447, 451, 452, 299, 82, 391, 0,\r
+3, 452, 448, 447, 391, 166, 299, 0,\r
+3, 448, 452, 453, 166, 391, 139, 0,\r
+3, 453, 449, 448, 139, 72, 166, 0,\r
+3, 401, 401, 454, 235, 235, 70, 0,\r
+3, 454, 450, 401, 70, 107, 235, 0,\r
+3, 450, 454, 455, 107, 70, 51, 0,\r
+3, 455, 451, 450, 51, 82, 107, 0,\r
+3, 451, 455, 456, 82, 51, 178, 0,\r
+3, 456, 452, 451, 178, 391, 82, 0,\r
+3, 452, 456, 457, 391, 178, 57, 0,\r
+3, 457, 453, 452, 57, 139, 391, 0,\r
+3, 401, 401, 458, 235, 235, 442, 0,\r
+3, 458, 454, 401, 442, 70, 235, 0,\r
+3, 454, 458, 459, 70, 442, 387, 0,\r
+3, 459, 455, 454, 387, 51, 70, 0,\r
+3, 455, 459, 460, 51, 387, 389, 0,\r
+3, 460, 456, 455, 389, 178, 51, 0,\r
+3, 456, 460, 461, 178, 389, 264, 0,\r
+3, 461, 457, 456, 264, 57, 178, 0,\r
+3, 401, 401, 462, 235, 235, 450, 0,\r
+3, 462, 458, 401, 450, 442, 235, 0,\r
+3, 458, 462, 463, 442, 450, 253, 0,\r
+3, 463, 459, 458, 253, 387, 442, 0,\r
+3, 459, 463, 464, 387, 253, 86, 0,\r
+3, 464, 460, 459, 86, 389, 387, 0,\r
+3, 460, 464, 465, 389, 86, 526, 0,\r
+3, 465, 461, 460, 526, 264, 389, 0,\r
+3, 401, 401, 402, 235, 235, 40, 0,\r
+3, 402, 462, 401, 40, 450, 235, 0,\r
+3, 462, 402, 403, 450, 40, 119, 0,\r
+3, 403, 463, 462, 119, 253, 450, 0,\r
+3, 463, 403, 404, 253, 119, 443, 0,\r
+3, 404, 464, 463, 443, 86, 253, 0,\r
+3, 464, 404, 405, 86, 443, 75, 0,\r
+3, 405, 465, 464, 75, 526, 86, 0,\r
+3, 405, 409, 470, 75, 241, 519, 0,\r
+3, 470, 466, 405, 519, 226, 75, 0,\r
+3, 466, 470, 471, 226, 519, 406, 0,\r
+3, 471, 467, 466, 406, 98, 226, 0,\r
+3, 467, 471, 472, 98, 406, 232, 0,\r
+3, 472, 468, 467, 232, 43, 98, 0,\r
+3, 468, 472, 473, 43, 232, 345, 0,\r
+3, 473, 469, 468, 345, 372, 43, 0,\r
+3, 409, 413, 474, 241, 121, 227, 0,\r
+3, 474, 470, 409, 227, 519, 241, 0,\r
+3, 470, 474, 475, 519, 227, 469, 0,\r
+3, 475, 471, 470, 469, 406, 519, 0,\r
+3, 471, 475, 476, 406, 469, 258, 0,\r
+3, 476, 472, 471, 258, 232, 406, 0,\r
+3, 472, 476, 477, 232, 258, 271, 0,\r
+3, 477, 473, 472, 271, 345, 232, 0,\r
+3, 413, 417, 478, 121, 351, 157, 0,\r
+3, 478, 474, 413, 157, 227, 121, 0,\r
+3, 474, 478, 479, 227, 157, 80, 0,\r
+3, 479, 475, 474, 80, 469, 227, 0,\r
+3, 475, 479, 480, 469, 80, 489, 0,\r
+3, 480, 476, 475, 489, 258, 469, 0,\r
+3, 476, 480, 481, 258, 489, 277, 0,\r
+3, 481, 477, 476, 277, 271, 258, 0,\r
+3, 417, 421, 482, 351, 412, 153, 0,\r
+3, 482, 478, 417, 153, 157, 351, 0,\r
+3, 478, 482, 483, 157, 153, 324, 0,\r
+3, 483, 479, 478, 324, 80, 157, 0,\r
+3, 479, 483, 484, 80, 324, 339, 0,\r
+3, 484, 480, 479, 339, 489, 80, 0,\r
+3, 480, 484, 485, 489, 339, 88, 0,\r
+3, 485, 481, 480, 88, 277, 489, 0,\r
+3, 421, 425, 486, 412, 39, 6, 0,\r
+3, 486, 482, 421, 6, 153, 412, 0,\r
+3, 482, 486, 487, 153, 6, 8, 0,\r
+3, 487, 483, 482, 8, 324, 153, 0,\r
+3, 483, 487, 488, 324, 8, 16, 0,\r
+3, 488, 484, 483, 16, 339, 324, 0,\r
+3, 484, 488, 489, 339, 16, 289, 0,\r
+3, 489, 485, 484, 289, 88, 339, 0,\r
+3, 425, 429, 490, 39, 249, 99, 0,\r
+3, 490, 486, 425, 99, 6, 39, 0,\r
+3, 486, 490, 491, 6, 99, 200, 0,\r
+3, 491, 487, 486, 200, 8, 6, 0,\r
+3, 487, 491, 492, 8, 200, 150, 0,\r
+3, 492, 488, 487, 150, 16, 8, 0,\r
+3, 488, 492, 493, 16, 150, 493, 0,\r
+3, 493, 489, 488, 493, 289, 16, 0,\r
+3, 429, 433, 494, 249, 506, 291, 0,\r
+3, 494, 490, 429, 291, 99, 249, 0,\r
+3, 490, 494, 495, 99, 291, 64, 0,\r
+3, 495, 491, 490, 64, 200, 99, 0,\r
+3, 491, 495, 496, 200, 64, 19, 0,\r
+3, 496, 492, 491, 19, 150, 200, 0,\r
+3, 492, 496, 497, 150, 19, 433, 0,\r
+3, 497, 493, 492, 433, 493, 150, 0,\r
+3, 433, 437, 498, 506, 59, 203, 0,\r
+3, 498, 494, 433, 203, 291, 506, 0,\r
+3, 494, 498, 499, 291, 203, 374, 0,\r
+3, 499, 495, 494, 374, 64, 291, 0,\r
+3, 495, 499, 500, 64, 374, 307, 0,\r
+3, 500, 496, 495, 307, 19, 64, 0,\r
+3, 496, 500, 501, 19, 307, 358, 0,\r
+3, 501, 497, 496, 358, 433, 19, 0,\r
+3, 437, 441, 502, 59, 498, 256, 0,\r
+3, 502, 498, 437, 256, 203, 59, 0,\r
+3, 498, 502, 503, 203, 256, 132, 0,\r
+3, 503, 499, 498, 132, 374, 203, 0,\r
+3, 499, 503, 504, 374, 132, 492, 0,\r
+3, 504, 500, 499, 492, 307, 374, 0,\r
+3, 500, 504, 505, 307, 492, 67, 0,\r
+3, 505, 501, 500, 67, 358, 307, 0,\r
+3, 441, 445, 506, 498, 388, 487, 0,\r
+3, 506, 502, 441, 487, 256, 498, 0,\r
+3, 502, 506, 507, 256, 487, 206, 0,\r
+3, 507, 503, 502, 206, 132, 256, 0,\r
+3, 503, 507, 508, 132, 206, 515, 0,\r
+3, 508, 504, 503, 515, 492, 132, 0,\r
+3, 504, 508, 509, 492, 515, 527, 0,\r
+3, 509, 505, 504, 527, 67, 492, 0,\r
+3, 445, 449, 510, 388, 72, 423, 0,\r
+3, 510, 506, 445, 423, 487, 388, 0,\r
+3, 506, 510, 511, 487, 423, 352, 0,\r
+3, 511, 507, 506, 352, 206, 487, 0,\r
+3, 507, 511, 512, 206, 352, 224, 0,\r
+3, 512, 508, 507, 224, 515, 206, 0,\r
+3, 508, 512, 513, 515, 224, 2, 0,\r
+3, 513, 509, 508, 2, 527, 515, 0,\r
+3, 449, 453, 514, 72, 139, 418, 0,\r
+3, 514, 510, 449, 418, 423, 72, 0,\r
+3, 510, 514, 515, 423, 418, 341, 0,\r
+3, 515, 511, 510, 341, 352, 423, 0,\r
+3, 511, 515, 516, 352, 341, 359, 0,\r
+3, 516, 512, 511, 359, 224, 352, 0,\r
+3, 512, 516, 517, 224, 359, 360, 0,\r
+3, 517, 513, 512, 360, 2, 224, 0,\r
+3, 453, 457, 518, 139, 57, 24, 0,\r
+3, 518, 514, 453, 24, 418, 139, 0,\r
+3, 514, 518, 519, 418, 24, 25, 0,\r
+3, 519, 515, 514, 25, 341, 418, 0,\r
+3, 515, 519, 520, 341, 25, 41, 0,\r
+3, 520, 516, 515, 41, 359, 341, 0,\r
+3, 516, 520, 521, 359, 41, 314, 0,\r
+3, 521, 517, 516, 314, 360, 359, 0,\r
+3, 457, 461, 522, 57, 264, 120, 0,\r
+3, 522, 518, 457, 120, 24, 57, 0,\r
+3, 518, 522, 523, 24, 120, 223, 0,\r
+3, 523, 519, 518, 223, 25, 24, 0,\r
+3, 519, 523, 524, 25, 223, 171, 0,\r
+3, 524, 520, 519, 171, 41, 25, 0,\r
+3, 520, 524, 525, 41, 171, 514, 0,\r
+3, 525, 521, 520, 514, 314, 41, 0,\r
+3, 461, 465, 526, 264, 526, 316, 0,\r
+3, 526, 522, 461, 316, 120, 264, 0,\r
+3, 522, 526, 527, 120, 316, 85, 0,\r
+3, 527, 523, 522, 85, 223, 120, 0,\r
+3, 523, 527, 528, 223, 85, 50, 0,\r
+3, 528, 524, 523, 50, 171, 223, 0,\r
+3, 524, 528, 529, 171, 50, 454, 0,\r
+3, 529, 525, 524, 454, 514, 171, 0,\r
+3, 465, 405, 466, 526, 75, 226, 0,\r
+3, 466, 526, 465, 226, 316, 526, 0,\r
+3, 526, 466, 467, 316, 226, 98, 0,\r
+3, 467, 527, 526, 98, 85, 316, 0,\r
+3, 527, 467, 468, 85, 98, 43, 0,\r
+3, 468, 528, 527, 43, 50, 85, 0,\r
+3, 528, 468, 469, 50, 43, 372, 0,\r
+3, 469, 529, 528, 372, 454, 50, 0\r
+};\r
+\r
+\r
+const int strip_vertices[] = {\r
+508, 508, 504, 509, 504, 505, 500, 501, 496, 497, 492, 493, 488, 489, 484, 485, 480, 481, 476, 477, 472, 473, -1,\r
+476, 475, 480, 479, 484, 483, 488, 487, 492, 491, 496, 495, 500, 499, 504, 499, 503, 498, 502, 437, 441, -1,\r
+527, 526, 467, 466, 471, 470, 475, 474, 479, 478, 483, 482, 487, 486, 491, 490, 495, 494, 499, 494, 498, -1,\r
+490, 490, 425, 486, 421, 482, 417, 478, 413, 474, 409, 470, 405, 466, 465, 526, 465, 461, 460, 456, 455, 451, -1,\r
+405, 465, 464, 460, 459, 455, 454, 450, -1,\r
+455, 451, 450, 446, 450, 401, 454, 458, 459, 463, 464, 404, 405, 404, 409, 408, 413, 412, 417, 416, 421, 420, -1,\r
+421, 420, 425, 420, 424, 419, 423, 418, 422, 418, 401, 414, 410, 415, 411, 416, 411, 412, 407, 408, 403, 404, 403, 463, -1,\r
+418, 418, 414, 419, 415, 420, 416, -1,\r
+407, 403, 402, 462, -1,\r
+403, 463, 462, 458, 462, 401, 402, 406, 407, 406, 411, 406, 410, 401, -1,\r
+494, 494, 498, 433, 437, 432, 436, 431, 435, 430, 434, 430, 401, 426, 422, 427, 423, 428, 424, 429, 425, 490, -1,\r
+430, 430, 426, 431, 427, 432, 428, 433, 429, 494, 490, -1,\r
+437, 437, 441, 436, 440, 435, 439, 434, 438, 401, 442, 446, 447, 451, 452, 456, 457, 461, 522, 526, 527, -1,\r
+452, 448, 447, -1,\r
+510, 445, 449, 444, 448, 443, 447, 443, 442, 443, 438, 443, 439, 444, 440, 445, 441, 506, 502, 507, 503, -1,\r
+510, 506, 445, -1,\r
+507, 506, 511, 510, 515, 510, 514, 449, 453, 448, 453, 452, 457, -1,\r
+527, 523, 522, 518, 457, 518, 453, 518, 514, 519, 515, -1,\r
+523, 519, 518, -1,\r
+504, 503, 508, 507, 512, 511, 516, 515, 520, 519, 524, 523, 528, 527, 468, 467, 472, 471, 476, 475, -1,\r
+472, 473, 468, 469, 528, 529, 524, 525, 520, 521, 516, 517, 512, 513, 508, 509, -1,\r
+211, 211, 214, 210, 209, -1,\r
+212, 215, 216, 219, 220, 223, 220, 211, 217, 214, 213, 209, 213, 208, 212, 147, -1,\r
+220, 217, 216, 213, 212, -1,\r
+251, 251, 248, 252, 249, 253, 250, 253, 211, 256, 210, 255, 209, 254, 208, 207, 147, 206, 147, 146, 147, 151, 212, 215, -1,\r
+206, 206, 202, 207, 203, 254, 251, 255, 252, 256, 253, -1,\r
+223, 223, 222, 219, 218, 215, 155, 151, 150, 146, 145, 146, 205, 206, 201, 202, 197, 202, 198, 203, 199, 251, 248, -1,\r
+145, 149, 150, 154, 155, 159, 218, 221, 222, 225, 226, 229, -1,\r
+204, 204, 145, 144, 149, 148, 149, 153, 154, 158, 159, 163, 221, 224, 225, 228, 229, 232, 229, 211, 226, 223, 222, -1,\r
+224, 224, 167, 163, 162, 158, 157, 153, 152, 148, 87, 148, 83, 144, 143, 204, 139, 200, 135, 196, 131, 192, -1,\r
+82, 83, 142, 143, 138, 139, 134, 135, 130, 131, 126, 127, 122, 123, 118, 123, 119, 184, 180, 185, 181, -1,\r
+81, 82, 141, 142, 137, 138, 133, 134, 129, 130, 125, 126, 121, 122, 117, 118, 113, 114, 109, 110, -1,\r
+80, 81, 140, 141, 136, 137, 132, 133, 128, 129, 124, 125, 120, 121, 116, 117, 112, 113, 108, 109, -1,\r
+4, 80, 79, 140, 74, 136, 69, 132, 64, 128, 59, 124, 54, 120, 49, 116, 44, 112, 39, 108, -1,\r
+79, 79, 73, 74, 68, 69, 63, 64, 58, 59, 53, 54, 48, 49, 48, 43, 42, 37, 36, 31, 30, 31, 25, -1,\r
+42, 42, 48, 47, 53, 52, 58, 57, 63, 62, 68, 67, 73, 72, 78, 77, 3, 2, 8, 7, 13, -1,\r
+36, 36, 42, 41, 47, 46, 52, 51, 57, 56, 62, 61, 67, 66, 72, 71, 77, 76, 2, 1, 7, -1,\r
+66, 66, 60, 61, 55, 56, 50, 51, 45, 46, 40, 41, 35, 36, 30, -1,\r
+31, 31, 25, 26, 20, 21, 15, 16, 10, 11, 5, 6, 0, 1, 75, 76, 70, 71, 65, 66, 60, -1,\r
+1, 1, 7, 6, 12, 11, 17, 16, 22, 21, 27, 26, 32, 31, 32, 37, 38, 43, 44, 49, -1,\r
+7, 7, 13, 12, 18, 17, 23, 22, 28, 27, 33, 32, 33, 38, -1,\r
+44, 44, 38, 39, 33, 34, 28, 29, 23, 24, 18, 19, 13, 14, 8, 9, 3, 4, 78, 79, 73, -1,\r
+39, 108, 34, 104, 29, 100, 24, 96, 19, 92, 14, 88, 9, 84, 4, 84, 80, 85, 81, 86, 81, 82, -1,\r
+108, 109, 104, 105, 100, 101, 96, 97, 92, 93, 88, 89, 84, 85, -1,\r
+109, 110, 105, 106, 101, 102, 97, 98, 93, 94, 89, 90, 85, 86, -1,\r
+118, 119, 114, 115, 110, 111, 106, 107, 102, 103, 98, 99, 94, 95, 90, 91, 86, 87, 82, 83, -1,\r
+111, 115, 176, -1,\r
+107, 111, 172, 176, 177, -1,\r
+103, 107, 168, 172, 173, 177, 178, -1,\r
+99, 103, 164, 168, 169, 173, 174, 178, 179, -1,\r
+95, 99, 160, 164, 165, 169, 170, 174, 175, 179, 233, -1,\r
+91, 95, 156, 160, 161, 165, 166, 170, 171, 175, 230, 233, 234, -1,\r
+87, 91, 152, 156, 157, 161, 162, 166, 167, 171, 227, 230, 231, 234, 235, 234, 238, 234, 237, 233, 236, 179, -1,\r
+185, 185, 181, 186, 182, 187, 183, 239, 236, 240, 237, 241, 238, 211, 235, 232, 231, 228, 227, 224, 167, -1,\r
+236, 179, 183, 178, 182, 177, 181, 176, 180, 115, 119, -1,\r
+131, 192, 127, 188, 123, 188, 184, 189, 185, 190, 186, 191, 187, 242, 239, 243, 240, 244, 241, 244, 211, 247, -1,\r
+192, 192, 188, 193, 189, 194, 190, 195, 191, 245, 242, 246, 243, 247, 244, -1,\r
+211, 247, 250, 246, 249, 245, 248, 195, 199, 194, 198, 193, 197, 192, 197, 196, 201, 200, 205, 204, 145, -1,\r
+393, 393, 394, 398, 399, 371, -1,\r
+399, 395, 394, -1,\r
+363, 363, 393, 397, 398, 370, 371, 375, -1,\r
+379, 375, 374, 370, 369, 397, 368, 363, 362, -1,\r
+396, 395, 400, 399, 372, 371, 376, 375, 380, 379, 384, 383, 388, 387, 392, 391, 396, 391, 395, 390, 394, -1,\r
+374, 378, 379, 378, 383, 382, 387, 386, 391, 386, 390, 385, 389, 353, 358, 352, 357, 351, 356, 350, 355, -1,\r
+341, 341, 347, 346, 352, 346, 351, 345, 350, -1,\r
+335, 334, 340, 339, 345, 344, 350, 349, 355, 354, -1,\r
+390, 390, 394, 389, 393, 358, 363, 357, 362, 356, 361, 355, 360, 354, 360, 359, 365, 364, 330, 329, 335, 334, -1,\r
+345, 346, 340, 341, 335, 336, 330, 331, 365, 366, 360, 366, 361, 367, 362, 367, 368, 333, 369, 373, 374, 378, -1,\r
+353, 353, 348, 385, 381, 386, 381, 382, 377, 378, 377, 373, 338, 333, 332, 367, 332, 366, 332, 331, 337, 336, 342, 341, 347, -1,\r
+332, 337, 338, 343, 377, 343, 381, 343, 348, 342, 348, 347, 353, 352, -1,\r
+337, 342, 343, -1,\r
+314, 314, 319, 318, 323, 322, 323, 327, -1,\r
+309, 309, 314, 313, 318, 317, 322, 321, 322, 326, 327, 299, -1,\r
+271, 271, 309, 276, 313, 281, 317, 286, 321, 291, 321, 325, 326, 298, 299, 303, -1,\r
+265, 265, 271, 270, 276, 275, 281, 280, 286, 285, 291, 290, 291, 296, 325, 297, 298, 302, 303, 307, -1,\r
+259, 259, 265, 264, 270, 269, 275, 274, 280, 279, 285, 284, 290, 289, 290, 295, 296, 261, 297, 301, 302, 306, 307, 311, -1,\r
+293, 293, 259, 258, 264, 263, 269, 268, 274, 273, 279, 278, 284, 283, 289, 288, 289, 294, 295, 260, 261, 266, -1,\r
+309, 305, 271, 266, 265, 260, 259, 294, 293, 288, 287, 288, 282, 283, 277, 278, 272, 273, 267, 268, 262, -1,\r
+268, 268, 262, 263, 257, 258, 292, 293, 287, -1,\r
+261, 266, 301, 305, 306, 310, 311, 315, 316, 320, -1,\r
+316, 316, 311, 312, 307, 308, 303, 304, 299, 300, 327, 328, 323, 324, 319, 320, 319, 315, 314, 310, 309, 305, -1\r
+};\r
+\r
+\r
+const int strip_normals[] = {\r
+515, 515, 492, 527, 492, 67, 307, 358, 19, 433, 150, 493, 16, 289, 339, 88, 489, 277, 258, 271, 232, 345, -1,\r
+258, 469, 489, 80, 339, 324, 16, 8, 150, 200, 19, 64, 307, 374, 492, 374, 132, 203, 256, 59, 498, -1,\r
+85, 316, 98, 226, 406, 519, 469, 227, 80, 157, 324, 153, 8, 6, 200, 99, 64, 291, 374, 291, 203, -1,\r
+99, 99, 39, 6, 412, 153, 351, 157, 121, 227, 241, 519, 75, 226, 526, 316, 526, 264, 389, 178, 51, 82, -1,\r
+75, 526, 86, 389, 387, 51, 70, 107, -1,\r
+51, 82, 107, 212, 107, 235, 70, 442, 387, 253, 86, 443, 75, 443, 241, 202, 121, 281, 351, 436, 412, 376, -1,\r
+412, 376, 39, 376, 158, 361, 21, 90, 52, 90, 235, 479, 263, 36, 196, 436, 196, 281, 306, 202, 119, 443, 119, 253, -1,\r
+90, 90, 479, 361, 36, 376, 436, -1,\r
+306, 119, 40, 450, -1,\r
+119, 253, 450, 442, 450, 235, 40, 189, 306, 189, 196, 189, 263, 235, -1,\r
+291, 291, 203, 506, 59, 65, 169, 229, 96, 432, 302, 432, 235, 424, 52, 373, 21, 375, 158, 249, 39, 99, -1,\r
+432, 432, 424, 229, 373, 65, 375, 506, 249, 291, 99, -1,\r
+59, 59, 498, 169, 460, 96, 30, 302, 452, 235, 525, 212, 299, 82, 391, 178, 57, 264, 120, 316, 85, -1,\r
+391, 166, 299, -1,\r
+423, 388, 72, 9, 166, 456, 299, 456, 525, 456, 452, 456, 30, 9, 460, 388, 498, 487, 256, 206, 132, -1,\r
+423, 487, 388, -1,\r
+206, 487, 352, 423, 341, 423, 418, 72, 139, 166, 139, 391, 57, -1,\r
+85, 223, 120, 24, 57, 24, 139, 24, 418, 25, 341, -1,\r
+223, 25, 24, -1,\r
+492, 132, 515, 206, 224, 352, 359, 341, 41, 25, 171, 223, 50, 85, 43, 98, 232, 406, 258, 469, -1,\r
+232, 345, 43, 372, 50, 454, 171, 514, 41, 314, 359, 360, 224, 2, 515, 527, -1,\r
+393, 393, 0, 216, 349, -1,\r
+486, 215, 327, 91, 177, 254, 177, 393, 512, 0, 231, 349, 231, 279, 486, 246, -1,\r
+177, 512, 327, 231, 486, -1,\r
+462, 462, 144, 76, 179, 464, 298, 464, 393, 128, 216, 113, 349, 500, 279, 101, 246, 7, 246, 395, 246, 384, 486, 215, -1,\r
+7, 7, 195, 101, 444, 500, 462, 113, 76, 128, 464, -1,\r
+254, 254, 285, 91, 149, 215, 83, 384, 325, 395, 520, 395, 315, 7, 143, 195, 129, 195, 461, 444, 475, 462, 144, -1,\r
+520, 308, 325, 415, 83, 297, 149, 504, 285, 162, 278, 446, -1,\r
+403, 403, 520, 276, 308, 404, 308, 272, 415, 416, 297, 317, 504, 125, 162, 60, 446, 110, 446, 393, 278, 254, 285, -1,\r
+125, 125, 459, 317, 334, 416, 137, 272, 47, 404, 511, 404, 1, 276, 54, 403, 45, 370, 490, 210, 29, 184, -1,\r
+336, 1, 251, 54, 164, 45, 463, 490, 378, 29, 453, 147, 222, 218, 301, 218, 242, 310, 130, 528, 34, -1,\r
+26, 336, 148, 251, 269, 164, 419, 463, 293, 378, 420, 453, 333, 222, 208, 301, 294, 56, 127, 228, -1,\r
+131, 26, 371, 148, 284, 269, 311, 419, 95, 293, 350, 420, 377, 333, 474, 208, 396, 294, 357, 127, -1,\r
+116, 131, 273, 371, 480, 284, 104, 311, 257, 95, 348, 350, 447, 377, 313, 474, 322, 396, 28, 357, -1,\r
+273, 273, 183, 480, 347, 104, 53, 257, 181, 348, 124, 447, 428, 313, 428, 435, 11, 270, 193, 305, 69, 305, 386, -1,\r
+11, 11, 428, 409, 124, 382, 181, 161, 53, 481, 347, 408, 183, 319, 151, 422, 448, 4, 165, 134, 394, -1,\r
+193, 193, 11, 495, 409, 44, 382, 385, 161, 478, 481, 320, 408, 37, 319, 524, 422, 328, 4, 465, 134, -1,\r
+37, 37, 431, 320, 136, 478, 513, 385, 27, 44, 467, 495, 115, 193, 69, -1,\r
+305, 305, 386, 20, 174, 182, 401, 211, 248, 106, 295, 309, 255, 465, 483, 328, 191, 524, 135, 37, 431, -1,\r
+465, 465, 134, 309, 102, 106, 427, 211, 507, 182, 410, 20, 503, 305, 503, 270, 445, 435, 322, 313, -1,\r
+134, 134, 394, 102, 455, 427, 5, 507, 23, 410, 405, 503, 405, 445, -1,\r
+322, 322, 445, 28, 405, 138, 23, 485, 5, 234, 455, 74, 394, 180, 165, 49, 448, 116, 151, 273, 183, -1,\r
+28, 357, 138, 268, 485, 287, 234, 81, 74, 78, 180, 103, 49, 220, 116, 220, 131, 476, 26, 38, 26, 336, -1,\r
+357, 127, 268, 252, 287, 398, 81, 274, 78, 154, 103, 62, 220, 476, -1,\r
+127, 228, 252, 141, 398, 440, 274, 363, 154, 190, 62, 488, 476, 38, -1,\r
+301, 242, 56, 517, 228, 33, 141, 18, 440, 466, 363, 304, 190, 417, 488, 484, 38, 511, 336, 1, -1,\r
+33, 517, 260, -1,\r
+18, 33, 390, 260, 497, -1,\r
+466, 18, 353, 390, 290, 497, 126, -1,\r
+304, 466, 187, 353, 123, 290, 522, 126, 501, -1,\r
+417, 304, 458, 187, 117, 123, 168, 522, 87, 501, 261, -1,\r
+484, 417, 430, 458, 343, 117, 438, 168, 426, 87, 482, 261, 329, -1,\r
+511, 484, 47, 430, 137, 343, 334, 438, 459, 426, 439, 482, 92, 329, 192, 329, 267, 329, 491, 261, 219, 501, -1,\r
+528, 528, 34, 145, 46, 356, 105, 472, 219, 48, 491, 247, 267, 393, 192, 110, 92, 60, 439, 125, 459, -1,\r
+219, 501, 105, 126, 46, 497, 34, 260, 130, 517, 242, -1,\r
+29, 184, 147, 156, 218, 156, 310, 402, 528, 146, 145, 17, 356, 411, 472, 364, 48, 441, 247, 441, 393, 509, -1,\r
+184, 184, 156, 63, 402, 354, 146, 335, 17, 239, 411, 13, 364, 509, 441, -1,\r
+393, 509, 298, 13, 179, 239, 144, 335, 475, 354, 461, 63, 129, 184, 129, 210, 143, 370, 315, 403, 520, -1,\r
+296, 296, 160, 133, 344, 330, -1,\r
+344, 323, 160, -1,\r
+159, 159, 296, 275, 133, 22, 330, 523, -1,\r
+198, 523, 77, 22, 286, 275, 437, 159, 499, -1,\r
+280, 323, 108, 344, 338, 330, 259, 523, 366, 198, 381, 240, 283, 10, 368, 243, 280, 243, 323, 35, 160, -1,\r
+77, 471, 198, 471, 240, 250, 10, 303, 243, 303, 35, 230, 282, 362, 163, 73, 318, 292, 93, 477, 262, -1,\r
+413, 413, 326, 399, 73, 399, 292, 100, 477, -1,\r
+122, 355, 414, 61, 100, 55, 477, 508, 262, 365, -1,\r
+35, 35, 160, 282, 296, 163, 159, 318, 499, 93, 505, 262, 340, 365, 340, 140, 68, 510, 518, 3, 122, 355, -1,\r
+100, 399, 414, 413, 122, 111, 518, 213, 68, 167, 340, 167, 505, 245, 499, 245, 437, 346, 286, 79, 77, 471, -1,\r
+362, 362, 221, 230, 516, 303, 516, 250, 207, 471, 207, 79, 521, 346, 468, 245, 468, 167, 468, 213, 473, 111, 204, 413, 326, -1,\r
+468, 473, 521, 217, 207, 217, 516, 217, 221, 204, 221, 326, 362, 73, -1,\r
+473, 204, 217, -1,\r
+94, 94, 185, 529, 429, 209, 429, 176, -1,\r
+379, 379, 94, 199, 529, 367, 209, 172, 209, 66, 176, 496, -1,\r
+312, 312, 379, 238, 199, 15, 367, 332, 172, 197, 172, 451, 66, 84, 496, 186, -1,\r
+266, 266, 312, 392, 238, 201, 15, 14, 332, 457, 197, 383, 197, 225, 451, 502, 84, 265, 186, 205, -1,\r
+236, 236, 266, 214, 392, 71, 201, 188, 14, 173, 457, 400, 383, 380, 383, 342, 225, 109, 502, 175, 265, 97, 205, 118, -1,\r
+152, 152, 236, 337, 214, 58, 71, 369, 188, 434, 173, 114, 400, 288, 380, 42, 380, 397, 342, 32, 109, 331, -1,\r
+379, 170, 312, 331, 266, 32, 236, 397, 152, 42, 194, 42, 407, 288, 142, 114, 12, 434, 233, 369, 244, -1,\r
+369, 369, 244, 58, 425, 337, 321, 152, 194, -1,\r
+109, 331, 175, 170, 97, 300, 118, 421, 31, 89, -1,\r
+31, 31, 118, 237, 205, 449, 186, 470, 496, 494, 176, 155, 429, 112, 185, 89, 185, 421, 94, 300, 379, 170, -1\r
+};\r
+\r
+#else  /* defined(_WIN32_WCE) */\r
+\r
+/*\r
+ * Original teapot code copyright follows:\r
+ */\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
+/*\r
+ * Rim, body, lid, and bottom data must be reflected in x and y;\r
+ * handle and spout data across the y axis only.\r
+ */\r
+static int patchdata[][16] =\r
+{\r
+    { 102, 103, 104, 105,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,  15 }, /* rim    */\r
+    {  12,  13,  14,  15,  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27 }, /* body   */\r
+    {  24,  25,  26,  27,  29,  30,  31,  32,  33,  34,  35,  36,  37,  38,  39,  40 },\r
+    {  96,  96,  96,  96,  97,  98,  99, 100, 101, 101, 101, 101,   0,   1,   2,   3 }, /* lid    */\r
+    {   0,   1,   2,   3, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117 },\r
+    { 118, 118, 118, 118, 124, 122, 119, 121, 123, 126, 125, 120,  40,  39,  38,  37 }, /* bottom */\r
+    {  41,  42,  43,  44,  45,  46,  47,  48,  49,  50,  51,  52,  53,  54,  55,  56 }, /* handle */\r
+    {  53,  54,  55,  56,  57,  58,  59,  60,  61,  62,  63,  64,  28,  65,  66,  67 },\r
+    {  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,  80,  81,  82,  83 }, /* spout  */\r
+    {  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90,  91,  92,  93,  94,  95 }\r
+};\r
+\r
+static double 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 double tex[2][2][2] =\r
+{\r
+    { {0.0, 0.0}, {1.0, 0.0} },\r
+    { {0.0, 1.0}, {1.0, 1.0} }\r
+};\r
+#endif  /* defined(_WIN32_WCE) */\r
+\r
+\r
+#endif  /* FREEGLUT_TEAPOT_DATA_H */\r
+\r
diff --git a/src/Common/freeglut_videoresize.c b/src/Common/freeglut_videoresize.c
new file mode 100644 (file)
index 0000000..1570662
--- /dev/null
@@ -0,0 +1,50 @@
+/*\r
+ * freeglut_videoresize.c\r
+ *\r
+ * Video resize functions (as defined by GLUT API)\r
+ *\r
+ * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.\r
+ * Written by Pawel W. Olszta, <olszta@sourceforge.net>\r
+ * Creation date: Thu Dec 16 1999\r
+ *\r
+ * Permission is hereby granted, free of charge, to any person obtaining a\r
+ * copy of this software and associated documentation files (the "Software"),\r
+ * to deal in the Software without restriction, including without limitation\r
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
+ * and/or sell copies of the Software, and to permit persons to whom the\r
+ * Software is furnished to do so, subject to the following conditions:\r
+ *\r
+ * The above copyright notice and this permission notice shall be included\r
+ * in all copies or substantial portions of the Software.\r
+ *\r
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL\r
+ * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
+ */\r
+\r
+#include <GL/freeglut.h>\r
+#include "freeglut_internal.h"\r
+\r
+/*\r
+ * NOTE: functions declared in this file probably will not be implemented.\r
+ */\r
+\r
+/* -- INTERFACE FUNCTIONS -------------------------------------------------- */\r
+\r
+int  FGAPIENTRY glutVideoResizeGet( GLenum eWhat )            {    return( 0x00 );    }\r
+void FGAPIENTRY glutSetupVideoResizing( void )                { /* Not implemented */ }\r
+void FGAPIENTRY glutStopVideoResizing( void )                 { /* Not implemented */ }\r
+void FGAPIENTRY glutVideoResize( int x, int y, int w, int h ) { /* Not implemented */ }\r
+void FGAPIENTRY glutVideoPan( int x, int y, int w, int h )    { /* Not implemented */ }\r
+\r
+/*** END OF FILE ***/\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
diff --git a/src/Common/freeglut_window.c b/src/Common/freeglut_window.c
new file mode 100644 (file)
index 0000000..ac79b85
--- /dev/null
@@ -0,0 +1,2162 @@
+/*\r
+ * freeglut_window.c\r
+ *\r
+ * Window management methods.\r
+ *\r
+ * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.\r
+ * Written by Pawel W. Olszta, <olszta@sourceforge.net>\r
+ * Creation date: Fri Dec 3 1999\r
+ *\r
+ * Permission is hereby granted, free of charge, to any person obtaining a\r
+ * copy of this software and associated documentation files (the "Software"),\r
+ * to deal in the Software without restriction, including without limitation\r
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
+ * and/or sell copies of the Software, and to permit persons to whom the\r
+ * Software is furnished to do so, subject to the following conditions:\r
+ *\r
+ * The above copyright notice and this permission notice shall be included\r
+ * in all copies or substantial portions of the Software.\r
+ *\r
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL\r
+ * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
+ */\r
+\r
+#define FREEGLUT_BUILDING_LIB\r
+#include <GL/freeglut.h>\r
+#include "freeglut_internal.h"\r
+\r
+#if TARGET_HOST_POSIX_X11\r
+#include <limits.h>  /* LONG_MAX */\r
+#include <unistd.h>  /* usleep */\r
+#endif\r
+\r
+#if defined(_WIN32_WCE)\r
+#   include <Aygshell.h>\r
+#   ifdef FREEGLUT_LIB_PRAGMAS\r
+#       pragma comment( lib, "Aygshell.lib" )\r
+#   endif\r
+#endif /* defined(_WIN32_WCE) */\r
+\r
+\r
+#if TARGET_HOST_POSIX_X11\r
+#ifndef GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB\r
+#define GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB 0x20B2\r
+#endif\r
+\r
+#ifndef GLX_CONTEXT_MAJOR_VERSION_ARB\r
+#define GLX_CONTEXT_MAJOR_VERSION_ARB 0x2091\r
+#endif\r
+\r
+#ifndef GLX_CONTEXT_MINOR_VERSION_ARB\r
+#define GLX_CONTEXT_MINOR_VERSION_ARB 0x2092\r
+#endif\r
+\r
+#ifndef GLX_CONTEXT_FLAGS_ARB\r
+#define GLX_CONTEXT_FLAGS_ARB 0x2094\r
+#endif\r
+\r
+#ifndef GLX_CONTEXT_PROFILE_MASK_ARB\r
+#define GLX_CONTEXT_PROFILE_MASK_ARB 0x9126\r
+#endif\r
+\r
+#ifndef GLX_CONTEXT_DEBUG_BIT_ARB\r
+#define GLX_CONTEXT_DEBUG_BIT_ARB 0x0001\r
+#endif\r
+\r
+#ifndef GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB\r
+#define GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x0002\r
+#endif\r
+\r
+#ifndef GLX_CONTEXT_CORE_PROFILE_BIT_ARB\r
+#define GLX_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001\r
+#endif\r
+\r
+#ifndef GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB\r
+#define GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002\r
+#endif\r
+\r
+#ifndef GLX_RGBA_FLOAT_TYPE\r
+#define GLX_RGBA_FLOAT_TYPE 0x20B9\r
+#endif\r
+\r
+#ifndef GLX_RGBA_FLOAT_BIT\r
+#define GLX_RGBA_FLOAT_BIT 0x00000004\r
+#endif\r
+#endif  /* TARGET_HOST_POSIX_X11 */\r
+\r
+\r
+#if TARGET_HOST_MS_WINDOWS\r
+/* The following include file is available from SGI but is not standard:\r
+ *   #include <GL/wglext.h>\r
+ * So we copy the necessary parts out of it.\r
+ * XXX: should local definitions for extensions be put in a separate include file?\r
+ */\r
+typedef const char * (WINAPI * PFNWGLGETEXTENSIONSSTRINGARBPROC) (HDC hdc);\r
+\r
+typedef BOOL (WINAPI * PFNWGLCHOOSEPIXELFORMATARBPROC) (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats);\r
+\r
+#define WGL_DRAW_TO_WINDOW_ARB         0x2001\r
+#define WGL_ACCELERATION_ARB           0x2003\r
+#define WGL_SUPPORT_OPENGL_ARB         0x2010\r
+#define WGL_DOUBLE_BUFFER_ARB          0x2011\r
+#define WGL_COLOR_BITS_ARB             0x2014\r
+#define WGL_ALPHA_BITS_ARB             0x201B\r
+#define WGL_DEPTH_BITS_ARB             0x2022\r
+#define WGL_STENCIL_BITS_ARB           0x2023\r
+#define WGL_FULL_ACCELERATION_ARB      0x2027\r
+\r
+#define WGL_SAMPLE_BUFFERS_ARB         0x2041\r
+#define WGL_SAMPLES_ARB                0x2042\r
+\r
+#define WGL_TYPE_RGBA_FLOAT_ARB        0x21A0\r
+\r
+#define WGL_FRAMEBUFFER_SRGB_CAPABLE_ARB 0x20A9\r
+\r
+#ifndef WGL_ARB_create_context\r
+#define WGL_ARB_create_context 1\r
+#ifdef WGL_WGLEXT_PROTOTYPES\r
+extern HGLRC WINAPI wglCreateContextAttribsARB (HDC, HGLRC, const int *);\r
+#endif /* WGL_WGLEXT_PROTOTYPES */\r
+typedef HGLRC (WINAPI * PFNWGLCREATECONTEXTATTRIBSARBPROC) (HDC hDC, HGLRC hShareContext, const int *attribList);\r
+\r
+#define WGL_CONTEXT_MAJOR_VERSION_ARB  0x2091\r
+#define WGL_CONTEXT_MINOR_VERSION_ARB  0x2092\r
+#define WGL_CONTEXT_LAYER_PLANE_ARB    0x2093\r
+#define WGL_CONTEXT_FLAGS_ARB          0x2094\r
+#define WGL_CONTEXT_PROFILE_MASK_ARB   0x9126\r
+\r
+#define WGL_CONTEXT_DEBUG_BIT_ARB      0x0001\r
+#define WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x0002\r
+\r
+#define WGL_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001\r
+#define WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002\r
+\r
+#define ERROR_INVALID_VERSION_ARB      0x2095\r
+#define ERROR_INVALID_PROFILE_ARB      0x2096\r
+#endif\r
+\r
+#endif  /* TARGET_HOST_MS_WINDOWS */\r
+\r
+#ifdef WM_TOUCH\r
+       typedef BOOL (WINAPI *pRegisterTouchWindow)(HWND,ULONG);\r
+   static pRegisterTouchWindow fghRegisterTouchWindow = (pRegisterTouchWindow)0xDEADBEEF;\r
+#endif\r
+\r
+/* pushing attribute/value pairs into an array */\r
+#define ATTRIB(a) attributes[where++]=(a)\r
+#define ATTRIB_VAL(a,v) {ATTRIB(a); ATTRIB(v);}\r
+\r
+/*\r
+ * TODO BEFORE THE STABLE RELEASE:\r
+ *\r
+ *  fgChooseFBConfig()      -- OK, but what about glutInitDisplayString()?\r
+ *  fgSetupPixelFormat      -- ignores the display mode settings\r
+ *  fgOpenWindow()          -- check the Win32 version, -iconic handling!\r
+ *  fgCloseWindow()         -- check the Win32 version\r
+ *  glutCreateWindow()      -- Check when default position and size is {-1,-1}\r
+ *  glutCreateSubWindow()   -- Check when default position and size is {-1,-1}\r
+ *  glutDestroyWindow()     -- check the Win32 version\r
+ *  glutSetWindow()         -- check the Win32 version\r
+ *  glutGetWindow()         -- OK\r
+ *  glutSetWindowTitle()    -- check the Win32 version\r
+ *  glutSetIconTitle()      -- check the Win32 version\r
+ *  glutShowWindow()        -- check the Win32 version\r
+ *  glutHideWindow()        -- check the Win32 version\r
+ *  glutIconifyWindow()     -- check the Win32 version\r
+ *  glutReshapeWindow()     -- check the Win32 version\r
+ *  glutPositionWindow()    -- check the Win32 version\r
+ *  glutPushWindow()        -- check the Win32 version\r
+ *  glutPopWindow()         -- check the Win32 version\r
+ */\r
+\r
+/* -- PRIVATE FUNCTIONS ---------------------------------------------------- */\r
+\r
+static int fghIsLegacyContextVersionRequested( void )\r
+{\r
+  return fgState.MajorVersion < 2 || (fgState.MajorVersion == 2 && fgState.MinorVersion <= 1);\r
+}\r
+\r
+static int fghIsLegacyContextRequested( void )\r
+{\r
+  return fghIsLegacyContextVersionRequested() &&\r
+         fgState.ContextFlags == 0 &&\r
+         fgState.ContextProfile == 0;\r
+}\r
+\r
+static int fghNumberOfAuxBuffersRequested( void )\r
+{\r
+  if ( fgState.DisplayMode & GLUT_AUX4 ) {\r
+    return 4;\r
+  }\r
+  if ( fgState.DisplayMode & GLUT_AUX3 ) {\r
+    return 3;\r
+  }\r
+  if ( fgState.DisplayMode & GLUT_AUX2 ) {\r
+    return 2;\r
+  }\r
+  if ( fgState.DisplayMode & GLUT_AUX1 ) { /* NOTE: Same as GLUT_AUX! */\r
+    return fgState.AuxiliaryBufferNumber;\r
+  }\r
+  return 0;\r
+}\r
+\r
+static int fghMapBit( int mask, int from, int to )\r
+{\r
+  return ( mask & from ) ? to : 0;\r
+\r
+}\r
+\r
+static void fghContextCreationError( void )\r
+{\r
+    fgError( "Unable to create OpenGL %d.%d context (flags %x, profile %x)",\r
+             fgState.MajorVersion, fgState.MinorVersion, fgState.ContextFlags,\r
+             fgState.ContextProfile );\r
+}\r
+\r
+\r
+/* -- SYSTEM-DEPENDENT PRIVATE FUNCTIONS ------------------------------------ */\r
+\r
+#if TARGET_HOST_POSIX_X11\r
+/*\r
+ * Chooses a visual basing on the current display mode settings\r
+ */\r
+\r
+GLXFBConfig* fgChooseFBConfig( int *numcfgs )\r
+{\r
+  GLboolean wantIndexedMode = GL_FALSE;\r
+  int attributes[ 100 ];\r
+  int where = 0, numAuxBuffers;\r
+\r
+  /* First we have to process the display mode settings... */\r
+  if( fgState.DisplayMode & GLUT_INDEX ) {\r
+    ATTRIB_VAL( GLX_BUFFER_SIZE, 8 );\r
+    /*  Buffer size is selected later.  */\r
+\r
+    ATTRIB_VAL( GLX_RENDER_TYPE, GLX_COLOR_INDEX_BIT );\r
+    wantIndexedMode = GL_TRUE;\r
+  } else {\r
+    ATTRIB_VAL( GLX_RED_SIZE,   1 );\r
+    ATTRIB_VAL( GLX_GREEN_SIZE, 1 );\r
+    ATTRIB_VAL( GLX_BLUE_SIZE,  1 );\r
+    if( fgState.DisplayMode & GLUT_ALPHA ) {\r
+      ATTRIB_VAL( GLX_ALPHA_SIZE, 1 );\r
+    }\r
+  }\r
+\r
+  if( fgState.DisplayMode & GLUT_DOUBLE ) {\r
+    ATTRIB_VAL( GLX_DOUBLEBUFFER, True );\r
+  }\r
+\r
+  if( fgState.DisplayMode & GLUT_STEREO ) {\r
+    ATTRIB_VAL( GLX_STEREO, True );\r
+  }\r
+\r
+  if( fgState.DisplayMode & GLUT_DEPTH ) {\r
+    ATTRIB_VAL( GLX_DEPTH_SIZE, 1 );\r
+  }\r
+\r
+  if( fgState.DisplayMode & GLUT_STENCIL ) {\r
+    ATTRIB_VAL( GLX_STENCIL_SIZE, 1 );\r
+  }\r
+\r
+  if( fgState.DisplayMode & GLUT_ACCUM ) {\r
+    ATTRIB_VAL( GLX_ACCUM_RED_SIZE, 1 );\r
+    ATTRIB_VAL( GLX_ACCUM_GREEN_SIZE, 1 );\r
+    ATTRIB_VAL( GLX_ACCUM_BLUE_SIZE, 1 );\r
+    if( fgState.DisplayMode & GLUT_ALPHA ) {\r
+      ATTRIB_VAL( GLX_ACCUM_ALPHA_SIZE, 1 );\r
+    }\r
+  }\r
+\r
+  numAuxBuffers = fghNumberOfAuxBuffersRequested();\r
+  if ( numAuxBuffers > 0 ) {\r
+    ATTRIB_VAL( GLX_AUX_BUFFERS, numAuxBuffers );\r
+  }\r
+\r
+  if( fgState.DisplayMode & GLUT_SRGB ) {\r
+    ATTRIB_VAL( GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB, True );\r
+  }\r
+\r
+  if (fgState.DisplayMode & GLUT_MULTISAMPLE) {\r
+    ATTRIB_VAL(GLX_SAMPLE_BUFFERS, 1);\r
+    ATTRIB_VAL(GLX_SAMPLES, fgState.SampleNumber);\r
+  }\r
+\r
+  /* Push a terminator at the end of the list */\r
+  ATTRIB( None );\r
+\r
+    {\r
+        GLXFBConfig * fbconfigArray;  /*  Array of FBConfigs  */\r
+        GLXFBConfig * fbconfig;       /*  The FBConfig we want  */\r
+        int fbconfigArraySize;        /*  Number of FBConfigs in the array  */\r
+\r
+\r
+        /*  Get all FBConfigs that match "attributes".  */\r
+        fbconfigArray = glXChooseFBConfig( fgDisplay.Display,\r
+                                           fgDisplay.Screen,\r
+                                           attributes,\r
+                                           &fbconfigArraySize );\r
+\r
+        if (fbconfigArray != NULL)\r
+        {\r
+            int result;  /* Returned by glXGetFBConfigAttrib, not checked. */\r
+\r
+\r
+            if( wantIndexedMode )\r
+            {\r
+                /*\r
+                 * In index mode, we want the largest buffer size, i.e. visual\r
+                 * depth.  Here, FBConfigs are sorted by increasing buffer size\r
+                 * first, so FBConfigs with the largest size come last.\r
+                 */\r
+\r
+                int bufferSizeMin, bufferSizeMax;\r
+\r
+                /*  Get bufferSizeMin.  */\r
+                result =\r
+                  glXGetFBConfigAttrib( fgDisplay.Display,\r
+                                        fbconfigArray[0],\r
+                                        GLX_BUFFER_SIZE,\r
+                                        &bufferSizeMin );\r
+                /*  Get bufferSizeMax.  */\r
+                result =\r
+                  glXGetFBConfigAttrib( fgDisplay.Display,\r
+                                        fbconfigArray[fbconfigArraySize - 1],\r
+                                        GLX_BUFFER_SIZE,\r
+                                        &bufferSizeMax );\r
+\r
+                if (bufferSizeMax > bufferSizeMin)\r
+                {\r
+                    /* \r
+                     * Free and reallocate fbconfigArray, keeping only FBConfigs\r
+                     * with the largest buffer size.\r
+                     */\r
+                    XFree(fbconfigArray);\r
+\r
+                    /*  Add buffer size token at the end of the list.  */\r
+                    where--;\r
+                    ATTRIB_VAL( GLX_BUFFER_SIZE, bufferSizeMax );\r
+                    ATTRIB( None );\r
+\r
+                    fbconfigArray = glXChooseFBConfig( fgDisplay.Display,\r
+                                                       fgDisplay.Screen,\r
+                                                       attributes,\r
+                                                       &fbconfigArraySize );\r
+                }\r
+            }\r
+\r
+            /*\r
+             * We now have an array of FBConfigs, the first one being the "best"\r
+             * one.  So we should return only this FBConfig:\r
+             *\r
+             * int fbconfigXID;\r
+             *\r
+             *  - pick the XID of the FBConfig we want\r
+             * result = glXGetFBConfigAttrib( fgDisplay.Display,\r
+             *                                fbconfigArray[0],\r
+             *                                GLX_FBCONFIG_ID,\r
+             *                                &fbconfigXID );\r
+             *\r
+             * - free the array\r
+             * XFree(fbconfigArray);\r
+             *\r
+             * - reset "attributes" with the XID\r
+             * where = 0;\r
+             * ATTRIB_VAL( GLX_FBCONFIG_ID, fbconfigXID );\r
+             * ATTRIB( None );\r
+             *\r
+             * - get our FBConfig only\r
+             * fbconfig = glXChooseFBConfig( fgDisplay.Display,\r
+             *                               fgDisplay.Screen,\r
+             *                               attributes,\r
+             *                               &fbconfigArraySize );\r
+             *\r
+             * However, for some configurations (for instance multisampling with\r
+             * Mesa 6.5.2 and ATI drivers), this does not work:\r
+             * glXChooseFBConfig returns NULL, whereas fbconfigXID is a valid\r
+             * XID.  Further investigation is needed.\r
+             *\r
+             * So, for now, we return the whole array of FBConfigs.  This should\r
+             * not produce any side effects elsewhere.\r
+             */\r
+            fbconfig = fbconfigArray;\r
+        }\r
+        else\r
+        {\r
+           fbconfig = NULL;\r
+        }\r
+\r
+       if (numcfgs)\r
+               *numcfgs = fbconfigArraySize;\r
+\r
+        return fbconfig;\r
+    }\r
+}\r
+\r
+\r
+static void fghFillContextAttributes( int *attributes ) {\r
+  int where = 0, contextFlags, contextProfile;\r
+\r
+  if ( !fghIsLegacyContextVersionRequested() ) {\r
+    ATTRIB_VAL( GLX_CONTEXT_MAJOR_VERSION_ARB, fgState.MajorVersion );\r
+    ATTRIB_VAL( GLX_CONTEXT_MINOR_VERSION_ARB, fgState.MinorVersion );\r
+  }\r
+\r
+  contextFlags =\r
+    fghMapBit( fgState.ContextFlags, GLUT_DEBUG, GLX_CONTEXT_DEBUG_BIT_ARB ) |\r
+    fghMapBit( fgState.ContextFlags, GLUT_FORWARD_COMPATIBLE, GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB );\r
+  if ( contextFlags != 0 ) {\r
+    ATTRIB_VAL( GLX_CONTEXT_FLAGS_ARB, contextFlags );\r
+  }\r
+\r
+  contextProfile =\r
+    fghMapBit( fgState.ContextProfile, GLUT_CORE_PROFILE, GLX_CONTEXT_CORE_PROFILE_BIT_ARB ) |\r
+    fghMapBit( fgState.ContextProfile, GLUT_COMPATIBILITY_PROFILE, GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB );\r
+  if ( contextProfile != 0 ) {\r
+    ATTRIB_VAL( GLX_CONTEXT_PROFILE_MASK_ARB, contextProfile );\r
+  }\r
+\r
+  ATTRIB( 0 );\r
+}\r
+\r
+typedef GLXContext (*CreateContextAttribsProc)(Display *dpy, GLXFBConfig config,\r
+                                              GLXContext share_list, Bool direct,\r
+                                              const int *attrib_list);\r
+\r
+static GLXContext fghCreateNewContext( SFG_Window* window )\r
+{\r
+  /* for color model calculation */\r
+  int menu = ( window->IsMenu && !fgStructure.MenuContext );\r
+  int index_mode = ( fgState.DisplayMode & GLUT_INDEX );\r
+\r
+  /* "classic" context creation */\r
+  Display *dpy = fgDisplay.Display;\r
+  GLXFBConfig config = *(window->Window.FBConfig);\r
+  int render_type = ( !menu && index_mode ) ? GLX_COLOR_INDEX_TYPE : GLX_RGBA_TYPE;\r
+  GLXContext share_list = NULL;\r
+  Bool direct = ( fgState.DirectContext != GLUT_FORCE_INDIRECT_CONTEXT );\r
+  GLXContext context;\r
+\r
+  /* new context creation */\r
+  int attributes[9];\r
+  CreateContextAttribsProc createContextAttribs = (CreateContextAttribsProc) fghGetProcAddress( "glXCreateContextAttribsARB" );\r
\r
+  /* glXCreateContextAttribsARB not found, yet the user has requested the new context creation */\r
+  if ( !createContextAttribs && !fghIsLegacyContextRequested() ) {\r
+    fgWarning( "OpenGL >2.1 context requested but glXCreateContextAttribsARB is not available! Falling back to legacy context creation" );\r
+       fgState.MajorVersion = 2;\r
+       fgState.MinorVersion = 1;\r
+  }\r
+\r
+  /* If nothing fancy has been required, simply use the old context creation GLX API entry */\r
+  if ( fghIsLegacyContextRequested() || !createContextAttribs )\r
+  {\r
+    context = glXCreateNewContext( dpy, config, render_type, share_list, direct );\r
+    if ( context == NULL ) {\r
+      fghContextCreationError();\r
+    }\r
+    return context;\r
+  }\r
+\r
+  /* color index mode is not available anymore with OpenGL 3.0 */\r
+  if ( render_type == GLX_COLOR_INDEX_TYPE ) {\r
+    fgWarning( "color index mode is deprecated, using RGBA mode" );\r
+  }\r
+\r
+  fghFillContextAttributes( attributes );\r
+\r
+  context = createContextAttribs( dpy, config, share_list, direct, attributes );\r
+  if ( context == NULL ) {\r
+    fghContextCreationError();\r
+  }\r
+  return context;\r
+}\r
+\r
+\r
+#define _NET_WM_STATE_TOGGLE    2\r
+static int fghResizeFullscrToggle(void)\r
+{\r
+    XWindowAttributes attributes;\r
+\r
+    if(glutGet(GLUT_FULL_SCREEN)) {\r
+        /* restore original window size */\r
+        SFG_Window *win = fgStructure.CurrentWindow;\r
+        fgStructure.CurrentWindow->State.NeedToResize = GL_TRUE;\r
+        fgStructure.CurrentWindow->State.Width  = win->State.OldWidth;\r
+        fgStructure.CurrentWindow->State.Height = win->State.OldHeight;\r
+\r
+    } else {\r
+        /* resize the window to cover the entire screen */\r
+        XGetWindowAttributes(fgDisplay.Display,\r
+                fgStructure.CurrentWindow->Window.Handle,\r
+                &attributes);\r
+        \r
+        /*\r
+         * The "x" and "y" members of "attributes" are the window's coordinates\r
+         * relative to its parent, i.e. to the decoration window.\r
+         */\r
+        XMoveResizeWindow(fgDisplay.Display,\r
+                fgStructure.CurrentWindow->Window.Handle,\r
+                -attributes.x,\r
+                -attributes.y,\r
+                fgDisplay.ScreenWidth,\r
+                fgDisplay.ScreenHeight);\r
+    }\r
+    return 0;\r
+}\r
+\r
+static int fghEwmhFullscrToggle(void)\r
+{\r
+    XEvent xev;\r
+    long evmask = SubstructureRedirectMask | SubstructureNotifyMask;\r
+\r
+    if(!fgDisplay.State || !fgDisplay.StateFullScreen) {\r
+        return -1;\r
+    }\r
+\r
+    xev.type = ClientMessage;\r
+    xev.xclient.window = fgStructure.CurrentWindow->Window.Handle;\r
+    xev.xclient.message_type = fgDisplay.State;\r
+    xev.xclient.format = 32;\r
+    xev.xclient.data.l[0] = _NET_WM_STATE_TOGGLE;\r
+    xev.xclient.data.l[1] = fgDisplay.StateFullScreen;\r
+    xev.xclient.data.l[2] = 0; /* no second property to toggle */\r
+    xev.xclient.data.l[3] = 1; /* source indication: application */\r
+    xev.xclient.data.l[4] = 0; /* unused */\r
+\r
+    if(!XSendEvent(fgDisplay.Display, fgDisplay.RootWindow, 0, evmask, &xev)) {\r
+        return -1;\r
+    }\r
+    return 0;\r
+}\r
+\r
+static int fghToggleFullscreen(void)\r
+{\r
+    /* first try the EWMH (_NET_WM_STATE) method ... */\r
+    if(fghEwmhFullscrToggle() != -1) {\r
+        return 0;\r
+    }\r
+\r
+    /* fall back to resizing the window */\r
+    if(fghResizeFullscrToggle() != -1) {\r
+        return 0;\r
+    }\r
+    return -1;\r
+}\r
+\r
+\r
+#endif  /* TARGET_HOST_POSIX_X11 */\r
+\r
+\r
+#if TARGET_HOST_MS_WINDOWS\r
+/*\r
+ * Setup the pixel format for a Win32 window\r
+ */\r
+\r
+#if defined(_WIN32_WCE)\r
+static wchar_t* fghWstrFromStr(const char* str)\r
+{\r
+    int i,len=strlen(str);\r
+    wchar_t* wstr = (wchar_t*)malloc(2*len+2);\r
+    for(i=0; i<len; i++)\r
+        wstr[i] = str[i];\r
+    wstr[len] = 0;\r
+    return wstr;\r
+}\r
+#endif /* defined(_WIN32_WCE) */\r
+\r
+\r
+static void fghFillContextAttributes( int *attributes ) {\r
+  int where = 0, contextFlags, contextProfile;\r
+\r
+  if ( !fghIsLegacyContextVersionRequested() ) {\r
+    ATTRIB_VAL( WGL_CONTEXT_MAJOR_VERSION_ARB, fgState.MajorVersion );\r
+    ATTRIB_VAL( WGL_CONTEXT_MINOR_VERSION_ARB, fgState.MinorVersion );\r
+  }\r
+\r
+  contextFlags =\r
+    fghMapBit( fgState.ContextFlags, GLUT_DEBUG, WGL_CONTEXT_DEBUG_BIT_ARB ) |\r
+    fghMapBit( fgState.ContextFlags, GLUT_FORWARD_COMPATIBLE, WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB );\r
+  if ( contextFlags != 0 ) {\r
+    ATTRIB_VAL( WGL_CONTEXT_FLAGS_ARB, contextFlags );\r
+  }\r
+\r
+  contextProfile =\r
+    fghMapBit( fgState.ContextProfile, GLUT_CORE_PROFILE, WGL_CONTEXT_CORE_PROFILE_BIT_ARB ) |\r
+    fghMapBit( fgState.ContextProfile, GLUT_COMPATIBILITY_PROFILE, WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB );\r
+  if ( contextProfile != 0 ) {\r
+    ATTRIB_VAL( WGL_CONTEXT_PROFILE_MASK_ARB, contextProfile );\r
+  }\r
+\r
+  ATTRIB( 0 );\r
+}\r
+\r
+static int fghIsExtensionSupported( HDC hdc, const char *extension ) {\r
+    const char *pWglExtString;\r
+    PFNWGLGETEXTENSIONSSTRINGARBPROC wglGetEntensionsStringARB =\r
+      (PFNWGLGETEXTENSIONSSTRINGARBPROC) wglGetProcAddress("wglGetExtensionsStringARB");\r
+    if ( wglGetEntensionsStringARB == NULL )\r
+    {\r
+      return FALSE;\r
+    }\r
+    pWglExtString = wglGetEntensionsStringARB( hdc );\r
+    return ( pWglExtString != NULL ) && ( strstr(pWglExtString, extension) != NULL );\r
+}\r
+\r
+void fgNewWGLCreateContext( SFG_Window* window )\r
+{\r
+    HGLRC context;\r
+    int attributes[9];\r
+    PFNWGLCREATECONTEXTATTRIBSARBPROC wglCreateContextAttribsARB;\r
+\r
+    /* If nothing fancy has been required, leave the context as it is */\r
+    if ( fghIsLegacyContextRequested() )\r
+    {\r
+        return;\r
+    }\r
+\r
+    wglMakeCurrent( window->Window.Device, window->Window.Context );\r
+\r
+    if ( !fghIsExtensionSupported( window->Window.Device, "WGL_ARB_create_context" ) )\r
+    {\r
+        return;\r
+    }\r
+\r
+    /* new context creation */\r
+    fghFillContextAttributes( attributes );\r
+\r
+    wglCreateContextAttribsARB = (PFNWGLCREATECONTEXTATTRIBSARBPROC) wglGetProcAddress( "wglCreateContextAttribsARB" );\r
+    if ( wglCreateContextAttribsARB == NULL )\r
+    {\r
+        fgError( "wglCreateContextAttribsARB not found" );\r
+    }\r
+\r
+    context = wglCreateContextAttribsARB( window->Window.Device, 0, attributes );\r
+    if ( context == NULL )\r
+    {\r
+        fghContextCreationError();\r
+    }\r
+\r
+    wglMakeCurrent( NULL, NULL );\r
+    wglDeleteContext( window->Window.Context );\r
+    window->Window.Context = context;\r
+}\r
+\r
+#if !defined(_WIN32_WCE)\r
+\r
+static void fghFillPFD( PIXELFORMATDESCRIPTOR *ppfd, HDC hdc, unsigned char layer_type )\r
+{\r
+  int flags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL;\r
+  if ( fgState.DisplayMode & GLUT_DOUBLE ) {\r
+        flags |= PFD_DOUBLEBUFFER;\r
+  }\r
+  if ( fgState.DisplayMode & GLUT_STEREO ) {\r
+    flags |= PFD_STEREO;\r
+  }\r
+\r
+#if defined(_MSC_VER)\r
+#pragma message( "fgSetupPixelFormat(): there is still some work to do here!" )\r
+#endif\r
+\r
+  /* Specify which pixel format do we opt for... */\r
+  ppfd->nSize = sizeof(PIXELFORMATDESCRIPTOR);\r
+  ppfd->nVersion = 1;\r
+  ppfd->dwFlags = flags;\r
+\r
+  if( fgState.DisplayMode & GLUT_INDEX ) {\r
+    ppfd->iPixelType = PFD_TYPE_COLORINDEX;\r
+    ppfd->cRedBits = 0;\r
+    ppfd->cGreenBits = 0;\r
+    ppfd->cBlueBits = 0;\r
+    ppfd->cAlphaBits = 0;\r
+  } else {\r
+    ppfd->iPixelType = PFD_TYPE_RGBA;\r
+    ppfd->cRedBits = 8;\r
+    ppfd->cGreenBits = 8;\r
+    ppfd->cBlueBits = 8;\r
+    ppfd->cAlphaBits = ( fgState.DisplayMode & GLUT_ALPHA ) ? 8 : 0;\r
+  }\r
+\r
+  ppfd->cColorBits = 24;\r
+  ppfd->cRedShift = 0;\r
+  ppfd->cGreenShift = 0;\r
+  ppfd->cBlueShift = 0;\r
+  ppfd->cAlphaShift = 0;\r
+  ppfd->cAccumBits = ( fgState.DisplayMode & GLUT_ACCUM ) ? 1 : 0;\r
+  ppfd->cAccumRedBits = 0;\r
+  ppfd->cAccumGreenBits = 0;\r
+  ppfd->cAccumBlueBits = 0;\r
+  ppfd->cAccumAlphaBits = 0;\r
+\r
+  /* Hmmm, or 32/0 instead of 24/8? */\r
+  ppfd->cDepthBits = 24;\r
+  ppfd->cStencilBits = 8;\r
+\r
+  ppfd->cAuxBuffers = fghNumberOfAuxBuffersRequested();\r
+  ppfd->iLayerType = layer_type;\r
+  ppfd->bReserved = 0;\r
+  ppfd->dwLayerMask = 0;\r
+  ppfd->dwVisibleMask = 0;\r
+  ppfd->dwDamageMask = 0;\r
+  \r
+  ppfd->cColorBits = (BYTE) GetDeviceCaps( hdc, BITSPIXEL );\r
+}\r
+\r
+static void fghFillPixelFormatAttributes( int *attributes, const PIXELFORMATDESCRIPTOR *ppfd )\r
+{\r
+  int where = 0;\r
+\r
+  ATTRIB_VAL( WGL_DRAW_TO_WINDOW_ARB, GL_TRUE );\r
+  ATTRIB_VAL( WGL_SUPPORT_OPENGL_ARB, GL_TRUE );\r
+  ATTRIB_VAL( WGL_ACCELERATION_ARB, WGL_FULL_ACCELERATION_ARB );\r
+\r
+  ATTRIB_VAL( WGL_COLOR_BITS_ARB, ppfd->cColorBits );\r
+  ATTRIB_VAL( WGL_ALPHA_BITS_ARB, ppfd->cAlphaBits );\r
+  ATTRIB_VAL( WGL_DEPTH_BITS_ARB, ppfd->cDepthBits );\r
+  ATTRIB_VAL( WGL_STENCIL_BITS_ARB, ppfd->cStencilBits );\r
+\r
+  ATTRIB_VAL( WGL_DOUBLE_BUFFER_ARB, ( fgState.DisplayMode & GLUT_DOUBLE ) != 0 );\r
+\r
+  if ( fgState.DisplayMode & GLUT_SRGB ) {\r
+    ATTRIB_VAL( WGL_FRAMEBUFFER_SRGB_CAPABLE_ARB, TRUE );\r
+  }\r
+\r
+  ATTRIB_VAL( WGL_SAMPLE_BUFFERS_ARB, GL_TRUE );\r
+  ATTRIB_VAL( WGL_SAMPLES_ARB, fgState.SampleNumber );\r
+  ATTRIB( 0 );\r
+}\r
+#endif\r
+\r
+GLboolean fgSetupPixelFormat( SFG_Window* window, GLboolean checkOnly,\r
+                              unsigned char layer_type )\r
+{\r
+#if defined(_WIN32_WCE)\r
+    return GL_TRUE;\r
+#else\r
+    PIXELFORMATDESCRIPTOR pfd;\r
+    PIXELFORMATDESCRIPTOR* ppfd = &pfd;\r
+    int pixelformat;\r
+    HDC current_hDC;\r
+    GLboolean success;\r
+\r
+    if (checkOnly)\r
+      current_hDC = CreateDC(TEXT("DISPLAY"), NULL ,NULL ,NULL);\r
+    else\r
+      current_hDC = window->Window.Device;\r
+\r
+    fghFillPFD( ppfd, current_hDC, layer_type );\r
+    pixelformat = ChoosePixelFormat( current_hDC, ppfd );\r
+\r
+    /* windows hack for multismapling/sRGB */\r
+    if ( ( fgState.DisplayMode & GLUT_MULTISAMPLE ) ||\r
+         ( fgState.DisplayMode & GLUT_SRGB ) )\r
+    {        \r
+        HGLRC rc, rc_before=wglGetCurrentContext();\r
+        HWND hWnd;\r
+        HDC hDC, hDC_before=wglGetCurrentDC();\r
+        WNDCLASS wndCls;\r
+\r
+        /* create a dummy window */\r
+        ZeroMemory(&wndCls, sizeof(wndCls));\r
+        wndCls.lpfnWndProc = DefWindowProc;\r
+        wndCls.hInstance = fgDisplay.Instance;\r
+        wndCls.style = CS_OWNDC | CS_HREDRAW | CS_VREDRAW;\r
+        wndCls.lpszClassName = _T("FREEGLUT_dummy");\r
+        RegisterClass( &wndCls );\r
+\r
+        hWnd=CreateWindow(_T("FREEGLUT_dummy"), _T(""), WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_OVERLAPPEDWINDOW , 0,0,0,0, 0, 0, fgDisplay.Instance, 0 );\r
+        hDC=GetDC(hWnd);\r
+        SetPixelFormat( hDC, pixelformat, ppfd );\r
+\r
+        rc = wglCreateContext( hDC );\r
+        wglMakeCurrent(hDC, rc);\r
+\r
+        if ( fghIsExtensionSupported( hDC, "WGL_ARB_multisample" ) )\r
+        {\r
+            PFNWGLCHOOSEPIXELFORMATARBPROC wglChoosePixelFormatARBProc =\r
+              (PFNWGLCHOOSEPIXELFORMATARBPROC) wglGetProcAddress("wglChoosePixelFormatARB");\r
+            if ( wglChoosePixelFormatARBProc )\r
+            {\r
+                int attributes[100];\r
+                int iPixelFormat;\r
+                BOOL bValid;\r
+                float fAttributes[] = { 0, 0 };\r
+                UINT numFormats;\r
+                fghFillPixelFormatAttributes( attributes, ppfd );\r
+                bValid = wglChoosePixelFormatARBProc(hDC, attributes, fAttributes, 1, &iPixelFormat, &numFormats);\r
+\r
+                if ( bValid && numFormats > 0 )\r
+                {\r
+                    pixelformat = iPixelFormat;\r
+                }\r
+            }\r
+        }\r
+\r
+        wglMakeCurrent( hDC_before, rc_before);\r
+        wglDeleteContext(rc);\r
+        ReleaseDC(hWnd, hDC);\r
+        DestroyWindow(hWnd);\r
+        UnregisterClass(_T("FREEGLUT_dummy"), fgDisplay.Instance);\r
+    }\r
+\r
+    success = ( pixelformat != 0 ) && ( checkOnly || SetPixelFormat( current_hDC, pixelformat, ppfd ) );\r
+\r
+    if (checkOnly)\r
+        DeleteDC(current_hDC);\r
+\r
+    return success;\r
+#endif /* defined(_WIN32_WCE) */\r
+}\r
+\r
+#endif  /* TARGET_HOST_MS_WINDOWS */\r
+\r
+/*\r
+ * Sets the OpenGL context and the fgStructure "Current Window" pointer to\r
+ * the window structure passed in.\r
+ */\r
+void fgSetWindow ( SFG_Window *window )\r
+{\r
+#if TARGET_HOST_POSIX_X11\r
+    if ( window )\r
+    {\r
+        glXMakeContextCurrent(\r
+            fgDisplay.Display,\r
+            window->Window.Handle,\r
+            window->Window.Handle,\r
+            window->Window.Context\r
+        );\r
+    }\r
+#elif TARGET_HOST_MS_WINDOWS\r
+    if ( window != fgStructure.CurrentWindow )\r
+    {\r
+        if( fgStructure.CurrentWindow )\r
+            ReleaseDC( fgStructure.CurrentWindow->Window.Handle,\r
+                       fgStructure.CurrentWindow->Window.Device );\r
+\r
+        if ( window )\r
+        {\r
+            window->Window.Device = GetDC( window->Window.Handle );\r
+            wglMakeCurrent(\r
+                window->Window.Device,\r
+                window->Window.Context\r
+            );\r
+        }\r
+    }\r
+#endif\r
+    fgStructure.CurrentWindow = window;\r
+}\r
+\r
+#if TARGET_HOST_MS_WINDOWS\r
+\r
+/* Computes position of corners of window Rect (outer position including\r
+ * decorations) based on the provided client rect and based on the style\r
+ * of the window in question.\r
+ * If posIsOutside is set to true, the input client Rect is taken to follow\r
+ * freeGLUT's window specification convention in which the top-left corner\r
+ * is at the outside of the window, while the size\r
+ * (rect.right-rect.left,rect.bottom-rect.top) is the size of the drawable\r
+ * area.\r
+ */\r
+void fghComputeWindowRectFromClientArea_UseStyle( const DWORD windowStyle, RECT *clientRect, BOOL posIsOutside )\r
+{\r
+    int xBorderWidth = 0, yBorderWidth = 0;\r
+\r
+    /* If window has title bar, correct rect for it */\r
+    if (windowStyle & WS_MAXIMIZEBOX) /* Need to query for WS_MAXIMIZEBOX to see if we have a title bar, the WS_CAPTION query is also true for a WS_DLGFRAME only... */\r
+        if (posIsOutside)\r
+            clientRect->bottom += GetSystemMetrics( SM_CYCAPTION );\r
+        else\r
+            clientRect->top -= GetSystemMetrics( SM_CYCAPTION );\r
+\r
+    /* get width of window's borders (frame), correct rect for it.\r
+     * Note, borders can be of zero width if style does not specify borders\r
+     */\r
+    fghGetBorderWidth(windowStyle, &xBorderWidth, &yBorderWidth);\r
+    if (posIsOutside)\r
+    {\r
+        clientRect->right  += xBorderWidth * 2;\r
+        clientRect->bottom += yBorderWidth * 2;\r
+    }\r
+    else\r
+    {\r
+        clientRect->left   -= xBorderWidth;\r
+        clientRect->right  += xBorderWidth;\r
+        clientRect->top    -= yBorderWidth;\r
+        clientRect->bottom += yBorderWidth;\r
+    }\r
+}\r
+\r
+/* Computes position of corners of window Rect (outer position including\r
+ * decorations) based on the provided client rect and based on the style\r
+ * of the window in question. If the window pointer or the window handle\r
+ * is NULL, a fully decorated window (caption and border) is assumed.\r
+ * Furthermore, if posIsOutside is set to true, the input client Rect is\r
+ * taken to follow freeGLUT's window specification convention in which the\r
+ * top-left corner is at the outside of the window, while the size\r
+ * (rect.right-rect.left,rect.bottom-rect.top) is the size of the drawable\r
+ * area.\r
+*/\r
+void fghComputeWindowRectFromClientArea_QueryWindow( const SFG_Window *window, RECT *clientRect, BOOL posIsOutside )\r
+{\r
+    DWORD windowStyle = 0;\r
+\r
+    if (window && window->Window.Handle)\r
+        windowStyle = GetWindowLong(window->Window.Handle, GWL_STYLE);\r
+    else\r
+        windowStyle = WS_OVERLAPPEDWINDOW;\r
+\r
+    fghComputeWindowRectFromClientArea_UseStyle(windowStyle, clientRect, posIsOutside);\r
+}\r
+\r
+/* Computes position of corners of client area (drawable area) of a window\r
+ * based on the provided window Rect (outer position including decorations)\r
+ * and based on the style of the window in question. If the window pointer\r
+ * or the window handle is NULL, a fully decorated window (caption and\r
+ * border) is assumed.\r
+ * Furthermore, if wantPosOutside is set to true, the output client Rect\r
+ * will follow freeGLUT's window specification convention in which the\r
+ * top-left corner is at the outside of the window, the size\r
+ * (rect.right-rect.left,rect.bottom-rect.top) is the size of the drawable\r
+ * area.\r
+ */\r
+void fghComputeClientAreaFromWindowRect( const SFG_Window *window, RECT *windowRect, BOOL wantPosOutside )\r
+{\r
+    DWORD windowStyle = 0;\r
+    int xBorderWidth = 0, yBorderWidth = 0;\r
+\r
+    if (window && window->Window.Handle)\r
+        windowStyle = GetWindowLong(window->Window.Handle, GWL_STYLE);\r
+    else\r
+        windowStyle = WS_OVERLAPPEDWINDOW;\r
+\r
+    /* If window has title bar, correct rect for it */\r
+    if (windowStyle & WS_MAXIMIZEBOX) /* Need to query for WS_MAXIMIZEBOX to see if we have a title bar, the WS_CAPTION query is also true for a WS_DLGFRAME only... */\r
+        if (wantPosOutside)\r
+            windowRect->bottom -= GetSystemMetrics( SM_CYCAPTION );\r
+        else\r
+            windowRect->top    += GetSystemMetrics( SM_CYCAPTION );\r
+\r
+    /* get width of window's borders (frame), correct rect for it.\r
+     * Note, borders can be of zero width if style does not specify borders\r
+     */\r
+    fghGetBorderWidth(windowStyle, &xBorderWidth, &yBorderWidth);\r
+    if (wantPosOutside)\r
+    {\r
+        windowRect->right  -= xBorderWidth * 2;\r
+        windowRect->bottom -= yBorderWidth * 2;\r
+    }\r
+    else\r
+    {\r
+        windowRect->left   += xBorderWidth;\r
+        windowRect->right  -= xBorderWidth;\r
+        windowRect->top    += yBorderWidth;\r
+        windowRect->bottom -= yBorderWidth;\r
+    }\r
+}\r
+\r
+/* Gets the rect describing the client area (drawable area) of the\r
+ * specified window.\r
+ * Returns an empty rect if window pointer or window handle is NULL.\r
+ * If wantPosOutside is set to true, the output client Rect\r
+ * will follow freeGLUT's window specification convention in which the\r
+ * top-left corner is at the outside of the window, while the size\r
+ * (rect.right-rect.left,rect.bottom-rect.top) is the size of the drawable\r
+ * area.\r
+ */\r
+RECT fghGetClientArea( const SFG_Window *window, BOOL wantPosOutside )\r
+{\r
+    RECT windowRect = {0,0,0,0};\r
+\r
+    freeglut_return_val_if_fail((window && window->Window.Handle),windowRect);\r
+    \r
+    /*\r
+     * call GetWindowRect()\r
+     * (this returns the pixel coordinates of the outside of the window)\r
+     */\r
+    GetWindowRect( window->Window.Handle, &windowRect );\r
+\r
+    /* Then correct the results */\r
+    fghComputeClientAreaFromWindowRect(window, &windowRect, wantPosOutside);\r
+\r
+    return windowRect;\r
+}\r
+\r
+/* Returns the width of the window borders based on the window's style.\r
+ */\r
+void fghGetBorderWidth(const DWORD windowStyle, int* xBorderWidth, int* yBorderWidth)\r
+{\r
+    if (windowStyle & WS_THICKFRAME)\r
+    {\r
+        *xBorderWidth = GetSystemMetrics(SM_CXSIZEFRAME);\r
+        *yBorderWidth = GetSystemMetrics(SM_CYSIZEFRAME);\r
+    }\r
+    else if (windowStyle & WS_DLGFRAME)\r
+    {\r
+        *xBorderWidth = GetSystemMetrics(SM_CXFIXEDFRAME);\r
+        *yBorderWidth = GetSystemMetrics(SM_CYFIXEDFRAME);\r
+    }\r
+    else\r
+    {\r
+        *xBorderWidth = 0;\r
+        *yBorderWidth = 0;\r
+    }\r
+}\r
+\r
+#if(WINVER >= 0x500)\r
+typedef struct\r
+{\r
+      int *x;\r
+      int *y;\r
+      const char *name;\r
+} m_proc_t;\r
+\r
+static BOOL CALLBACK m_proc(HMONITOR mon,\r
+                           HDC hdc,\r
+                           LPRECT rect,\r
+                           LPARAM data)\r
+{\r
+      m_proc_t *dp=(m_proc_t *)data;\r
+      MONITORINFOEX info;\r
+      BOOL res;\r
+      info.cbSize=sizeof(info);\r
+      res=GetMonitorInfo(mon,(LPMONITORINFO)&info);\r
+      if( res )\r
+      {\r
+          if( strcmp(dp->name,info.szDevice)==0 )\r
+          {\r
+              *(dp->x)=info.rcMonitor.left;\r
+              *(dp->y)=info.rcMonitor.top;\r
+              return FALSE;\r
+          }\r
+      }\r
+      return TRUE;\r
+}\r
+\r
+/* \r
+ * this function returns the origin of the screen identified by\r
+ * fgDisplay.DisplayName, and 0 otherwise.\r
+ * This is used in fgOpenWindow to open the gamemode window on the screen\r
+ * identified by the -display command line argument. The function should\r
+ * not be called otherwise.\r
+ */\r
+\r
+static void get_display_origin(int *xp,int *yp)\r
+{\r
+    *xp = 0;\r
+    *yp = 0;\r
+\r
+    if( fgDisplay.DisplayName )\r
+    {\r
+        m_proc_t st;\r
+        st.x=xp;\r
+        st.y=yp;\r
+        st.name=fgDisplay.DisplayName;\r
+        EnumDisplayMonitors(0,0,m_proc,(LPARAM)&st);\r
+    }\r
+}\r
+#else\r
+#pragma message( "-display parameter only works if compiled with WINVER >= 0x0500")\r
+\r
+static void get_display_origin(int *xp,int *yp)\r
+{\r
+    *xp = 0;\r
+    *yp = 0;\r
+\r
+    if( fgDisplay.DisplayName )\r
+    {\r
+        fgWarning( "for working -display support FreeGLUT must be compiled with WINVER >= 0x0500");\r
+    }\r
+}\r
+#endif\r
+#endif\r
+\r
+\r
+#if TARGET_HOST_POSIX_X11\r
+static Bool fghWindowIsVisible( Display *display, XEvent *event, XPointer arg)\r
+{\r
+    Window window = (Window)arg;\r
+    return (event->type == MapNotify) && (event->xmap.window == window);\r
+}\r
+#endif\r
+\r
+\r
+/*\r
+ * Opens a window. Requires a SFG_Window object created and attached\r
+ * to the freeglut structure. OpenGL context is created here.\r
+ */\r
+void fgOpenWindow( SFG_Window* window, const char* title,\r
+                   GLboolean positionUse, int x, int y,\r
+                   GLboolean sizeUse, int w, int h,\r
+                   GLboolean gameMode, GLboolean isSubWindow )\r
+{\r
+#if TARGET_HOST_POSIX_X11\r
+    XVisualInfo * visualInfo = NULL;\r
+    XSetWindowAttributes winAttr;\r
+    XTextProperty textProperty;\r
+    XSizeHints sizeHints;\r
+    XWMHints wmHints;\r
+    XEvent eventReturnBuffer; /* return buffer required for a call */\r
+    unsigned long mask;\r
+    int num_FBConfigs, i;\r
+    unsigned int current_DisplayMode = fgState.DisplayMode ;\r
+\r
+    /* Save the display mode if we are creating a menu window */\r
+    if( window->IsMenu && ( ! fgStructure.MenuContext ) )\r
+        fgState.DisplayMode = GLUT_DOUBLE | GLUT_RGB ;\r
+\r
+    window->Window.FBConfig = fgChooseFBConfig( &num_FBConfigs );\r
+\r
+    if( window->IsMenu && ( ! fgStructure.MenuContext ) )\r
+        fgState.DisplayMode = current_DisplayMode ;\r
+\r
+    if( ! window->Window.FBConfig )\r
+    {\r
+        /*\r
+         * The "fgChooseFBConfig" returned a null meaning that the visual\r
+         * context is not available.\r
+         * Try a couple of variations to see if they will work.\r
+         */\r
+        if( !( fgState.DisplayMode & GLUT_DOUBLE ) )\r
+        {\r
+            fgState.DisplayMode |= GLUT_DOUBLE ;\r
+            window->Window.FBConfig = fgChooseFBConfig( &num_FBConfigs );\r
+            fgState.DisplayMode &= ~GLUT_DOUBLE;\r
+        }\r
+\r
+        if( fgState.DisplayMode & GLUT_MULTISAMPLE )\r
+        {\r
+            fgState.DisplayMode &= ~GLUT_MULTISAMPLE ;\r
+            window->Window.FBConfig = fgChooseFBConfig( &num_FBConfigs );\r
+            fgState.DisplayMode |= GLUT_MULTISAMPLE;\r
+        }\r
+    }\r
+\r
+    FREEGLUT_INTERNAL_ERROR_EXIT( window->Window.FBConfig != NULL,\r
+                                  "FBConfig with necessary capabilities not found", "fgOpenWindow" );\r
+\r
+    /*  Get the X visual.  */\r
+    for (i = 0; i < num_FBConfigs; i++) {\r
+           visualInfo = glXGetVisualFromFBConfig( fgDisplay.Display,\r
+                                                  window->Window.FBConfig[i] );\r
+           if (visualInfo)\r
+               break;\r
+    }\r
+\r
+    FREEGLUT_INTERNAL_ERROR_EXIT( visualInfo != NULL,\r
+                                  "visualInfo could not be retrieved from FBConfig", "fgOpenWindow" );\r
+\r
+    /*\r
+     * XXX HINT: the masks should be updated when adding/removing callbacks.\r
+     * XXX       This might speed up message processing. Is that true?\r
+     * XXX\r
+     * XXX A: Not appreciably, but it WILL make it easier to debug.\r
+     * XXX    Try tracing old GLUT and try tracing freeglut.  Old GLUT\r
+     * XXX    turns off events that it doesn't need and is a whole lot\r
+     * XXX    more pleasant to trace.  (Think mouse-motion!  Tons of\r
+     * XXX    ``bonus'' GUI events stream in.)\r
+     */\r
+    winAttr.event_mask        =\r
+        StructureNotifyMask | SubstructureNotifyMask | ExposureMask |\r
+        ButtonPressMask | ButtonReleaseMask | KeyPressMask | KeyReleaseMask |\r
+        VisibilityChangeMask | EnterWindowMask | LeaveWindowMask |\r
+        PointerMotionMask | ButtonMotionMask;\r
+    winAttr.background_pixmap = None;\r
+    winAttr.background_pixel  = 0;\r
+    winAttr.border_pixel      = 0;\r
+\r
+    winAttr.colormap = XCreateColormap(\r
+        fgDisplay.Display, fgDisplay.RootWindow,\r
+        visualInfo->visual, AllocNone\r
+    );\r
+\r
+    mask = CWBackPixmap | CWBorderPixel | CWColormap | CWEventMask;\r
+\r
+    if( window->IsMenu || ( gameMode == GL_TRUE ) )\r
+    {\r
+        winAttr.override_redirect = True;\r
+        mask |= CWOverrideRedirect;\r
+    }\r
+\r
+    if( ! positionUse )\r
+        x = y = -1; /* default window position */\r
+    if( ! sizeUse )\r
+        w = h = 300; /* default window size */\r
+\r
+    window->Window.Handle = XCreateWindow(\r
+        fgDisplay.Display,\r
+        window->Parent == NULL ? fgDisplay.RootWindow :\r
+        window->Parent->Window.Handle,\r
+        x, y, w, h, 0,\r
+        visualInfo->depth, InputOutput,\r
+        visualInfo->visual, mask,\r
+        &winAttr\r
+    );\r
+\r
+    /*\r
+     * The GLX context creation, possibly trying the direct context rendering\r
+     *  or else use the current context if the user has so specified\r
+     */\r
+\r
+    if( window->IsMenu )\r
+    {\r
+        /*\r
+         * If there isn't already an OpenGL rendering context for menu\r
+         * windows, make one\r
+         */\r
+        if( !fgStructure.MenuContext )\r
+        {\r
+            fgStructure.MenuContext =\r
+                (SFG_MenuContext *)malloc( sizeof(SFG_MenuContext) );\r
+            fgStructure.MenuContext->MContext = fghCreateNewContext( window );\r
+        }\r
+\r
+        /* window->Window.Context = fgStructure.MenuContext->MContext; */\r
+        window->Window.Context = fghCreateNewContext( window );\r
+    }\r
+    else if( fgState.UseCurrentContext )\r
+    {\r
+        window->Window.Context = glXGetCurrentContext( );\r
+\r
+        if( ! window->Window.Context )\r
+            window->Window.Context = fghCreateNewContext( window );\r
+    }\r
+    else\r
+        window->Window.Context = fghCreateNewContext( window );\r
+\r
+#if !defined( __FreeBSD__ ) && !defined( __NetBSD__ )\r
+    if(  !glXIsDirect( fgDisplay.Display, window->Window.Context ) )\r
+    {\r
+      if( fgState.DirectContext == GLUT_FORCE_DIRECT_CONTEXT )\r
+        fgError( "Unable to force direct context rendering for window '%s'",\r
+                 title );\r
+    }\r
+#endif\r
+\r
+    /*\r
+     * XXX Assume the new window is visible by default\r
+     * XXX Is this a  safe assumption?\r
+     */\r
+    window->State.Visible = GL_TRUE;\r
+\r
+    sizeHints.flags = 0;\r
+    if ( positionUse )\r
+        sizeHints.flags |= USPosition;\r
+    if ( sizeUse )\r
+        sizeHints.flags |= USSize;\r
+\r
+    /*\r
+     * Fill in the size hints values now (the x, y, width and height\r
+     * settings are obsolete, are there any more WMs that support them?)\r
+     * Unless the X servers actually stop supporting these, we should\r
+     * continue to fill them in.  It is *not* our place to tell the user\r
+     * that they should replace a window manager that they like, and which\r
+     * works, just because *we* think that it's not "modern" enough.\r
+     */\r
+    sizeHints.x      = x;\r
+    sizeHints.y      = y;\r
+    sizeHints.width  = w;\r
+    sizeHints.height = h;\r
+\r
+    wmHints.flags = StateHint;\r
+    wmHints.initial_state = fgState.ForceIconic ? IconicState : NormalState;\r
+    /* Prepare the window and iconified window names... */\r
+    XStringListToTextProperty( (char **) &title, 1, &textProperty );\r
+\r
+    XSetWMProperties(\r
+        fgDisplay.Display,\r
+        window->Window.Handle,\r
+        &textProperty,\r
+        &textProperty,\r
+        0,\r
+        0,\r
+        &sizeHints,\r
+        &wmHints,\r
+        NULL\r
+    );\r
+    XFree( textProperty.value );\r
+\r
+    XSetWMProtocols( fgDisplay.Display, window->Window.Handle,\r
+                     &fgDisplay.DeleteWindow, 1 );\r
+\r
+    glXMakeContextCurrent(\r
+        fgDisplay.Display,\r
+        window->Window.Handle,\r
+        window->Window.Handle,\r
+        window->Window.Context\r
+    );\r
+\r
+    /* register extension events _before_ window is mapped */\r
+    #ifdef HAVE_X11_EXTENSIONS_XINPUT2_H\r
+       fgRegisterDevices( fgDisplay.Display, &(window->Window.Handle) );\r
+    #endif\r
+\r
+    XMapWindow( fgDisplay.Display, window->Window.Handle );\r
+\r
+    XFree(visualInfo);\r
+\r
+    if( !isSubWindow)\r
+        XPeekIfEvent( fgDisplay.Display, &eventReturnBuffer, &fghWindowIsVisible, (XPointer)(window->Window.Handle) );\r
+\r
+#elif TARGET_HOST_MS_WINDOWS\r
+\r
+    WNDCLASS wc;\r
+    DWORD flags   = 0;\r
+    DWORD exFlags = 0;\r
+    ATOM atom;\r
+\r
+    /* Grab the window class we have registered on glutInit(): */\r
+    atom = GetClassInfo( fgDisplay.Instance, _T("FREEGLUT"), &wc );\r
+    FREEGLUT_INTERNAL_ERROR_EXIT ( atom, "Window Class Info Not Found",\r
+                                   "fgOpenWindow" );\r
+\r
+    /* Determine window style flags*/\r
+    if( gameMode )\r
+    {\r
+        FREEGLUT_INTERNAL_ERROR_EXIT ( window->Parent == NULL,\r
+                                       "Game mode being invoked on a subwindow",\r
+                                       "fgOpenWindow" );\r
+\r
+        /*\r
+         * Set the window creation flags appropriately to make the window\r
+         * entirely visible:\r
+         */\r
+        flags = WS_POPUP | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_VISIBLE;\r
+    }\r
+    else\r
+    {\r
+        flags = WS_CLIPSIBLINGS | WS_CLIPCHILDREN;\r
+\r
+        /*\r
+         * There's a small difference between creating the top, child and\r
+         * menu windows\r
+         */\r
+        if ( window->IsMenu )\r
+        {\r
+            flags |= WS_POPUP;\r
+            exFlags |= WS_EX_TOOLWINDOW;\r
+        }\r
+#if defined(_WIN32_WCE)\r
+        /* no decorations for windows CE */\r
+#else\r
+        /* if this is not a subwindow (child), set its style based on the requested display mode */\r
+        else if( window->Parent == NULL )\r
+            if ( fgState.DisplayMode & GLUT_BORDERLESS )\r
+            {\r
+                /* no window decorations needed */\r
+            }\r
+            else if ( fgState.DisplayMode & GLUT_CAPTIONLESS )\r
+                /* only window decoration is a border, no title bar or buttons */\r
+                flags |= WS_DLGFRAME;\r
+            else\r
+                /* window decoration are a border, title bar and buttons.\r
+                 * NB: we later query whether the window has a title bar or\r
+                 * not by testing for the maximize button, as the test for\r
+                 * WS_CAPTION can be true without the window having a title\r
+                 * bar. This style WS_OVERLAPPEDWINDOW gives you a maximize\r
+                 * button. */\r
+                flags |= WS_OVERLAPPEDWINDOW;\r
+#endif\r
+        else\r
+            /* subwindows always have no decoration, but are marked as a child window to the OS */\r
+            flags |= WS_CHILD;\r
+    }\r
+\r
+    /* determine window size and position */\r
+    if( gameMode )\r
+    {\r
+        /* if in gamemode, query the origin of specified by the -display\r
+         * command line parameter (if any) and offset the upper-left corner\r
+         * of the window so we create the window on that screen.\r
+         * The -display argument doesn't do anything if not trying to enter\r
+         * gamemode.\r
+         */\r
+        int xoff=0, yoff=0;\r
+        get_display_origin(&xoff,&yoff);\r
+        x += xoff;\r
+        y += yoff;\r
+    }\r
+    if( !positionUse )\r
+    {\r
+        x = CW_USEDEFAULT;\r
+        y = CW_USEDEFAULT;\r
+    }\r
+    if( !sizeUse )\r
+    {\r
+        if( ! window->IsMenu )\r
+        {\r
+            w = CW_USEDEFAULT;\r
+            h = CW_USEDEFAULT;\r
+        }\r
+        else /* fail safe - Windows can make a window of size (0, 0) */\r
+            w = h = 300; /* default window size */\r
+    }\r
+    /* store requested client area width and height */\r
+    window->State.Width = w;\r
+    window->State.Height = h;\r
+\r
+#if !defined(_WIN32_WCE)    /* no decorations for windows CE */\r
+    if( sizeUse )\r
+    {\r
+        RECT windowRect;\r
+        /*\r
+         * Update the window dimensions, taking the window decorations\r
+         * into account.  FreeGLUT is to create the window with the\r
+         * topleft outside corner at (x,y) and with client area\r
+         * dimensions (w,h).\r
+         * note: don't need to do this when w=h=CW_USEDEFAULT, so in the\r
+         * if( sizeUse ) here is convenient.\r
+         */\r
+        windowRect.left     = x;\r
+        windowRect.top      = y;\r
+        windowRect.right    = x+w;\r
+        windowRect.bottom   = y+h;\r
+\r
+        fghComputeWindowRectFromClientArea_UseStyle(flags,&windowRect,TRUE);\r
+\r
+        w = windowRect.right - windowRect.left;\r
+        h = windowRect.bottom- windowRect.top;\r
+    }\r
+#endif /* !defined(_WIN32_WCE) */\r
+\r
+#if defined(_WIN32_WCE)\r
+    {\r
+        wchar_t* wstr = fghWstrFromStr(title);\r
+\r
+        window->Window.Handle = CreateWindow(\r
+            _T("FREEGLUT"),\r
+            wstr,\r
+            WS_VISIBLE | WS_POPUP,\r
+            0,0, 240,320,\r
+            NULL,\r
+            NULL,\r
+            fgDisplay.Instance,\r
+            (LPVOID) window\r
+        );\r
+\r
+        free(wstr);\r
+\r
+        SHFullScreen(window->Window.Handle, SHFS_HIDESTARTICON);\r
+        SHFullScreen(window->Window.Handle, SHFS_HIDESIPBUTTON);\r
+        SHFullScreen(window->Window.Handle, SHFS_HIDETASKBAR);\r
+        MoveWindow(window->Window.Handle, 0, 0, 240, 320, TRUE);\r
+        ShowWindow(window->Window.Handle, SW_SHOW);\r
+        UpdateWindow(window->Window.Handle);\r
+    }\r
+#else\r
+    window->Window.Handle = CreateWindowEx(\r
+        exFlags,\r
+        _T("FREEGLUT"),\r
+        title,\r
+        flags,\r
+        x, y, w, h,\r
+        (HWND) window->Parent == NULL ? NULL : window->Parent->Window.Handle,\r
+        (HMENU) NULL,\r
+        fgDisplay.Instance,\r
+        (LPVOID) window\r
+    );\r
+#endif /* defined(_WIN32_WCE) */\r
+\r
+    if( !( window->Window.Handle ) )\r
+        fgError( "Failed to create a window (%s)!", title );\r
+\r
+#if !defined(_WIN32_WCE)\r
+    /* Need to set requested style again, apparently Windows doesn't listen when requesting windows without title bar or borders */\r
+    SetWindowLong(window->Window.Handle, GWL_STYLE, flags);\r
+    SetWindowPos(window->Window.Handle, HWND_TOP, 0,0,0,0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);\r
+#endif /* defined(_WIN32_WCE) */\r
+\r
+    /* Make a menu window always on top - fix Feature Request 947118 */\r
+    if( window->IsMenu || gameMode )\r
+        SetWindowPos(\r
+                        window->Window.Handle,\r
+                        HWND_TOPMOST,\r
+                        0, 0, 0, 0,\r
+                        SWP_NOMOVE | SWP_NOSIZE\r
+                    );\r
+\r
+    /* Enable multitouch: additional flag TWF_FINETOUCH, TWF_WANTPALM */\r
+    #ifdef WM_TOUCH\r
+        if (fghRegisterTouchWindow == (pRegisterTouchWindow)0xDEADBEEF) \r
+                       fghRegisterTouchWindow = (pRegisterTouchWindow)GetProcAddress(GetModuleHandle("user32"),"RegisterTouchWindow");\r
+               if (fghRegisterTouchWindow)\r
+             fghRegisterTouchWindow( window->Window.Handle, TWF_FINETOUCH | TWF_WANTPALM );\r
+    #endif\r
+\r
+#if defined(_WIN32_WCE)\r
+    ShowWindow( window->Window.Handle, SW_SHOW );\r
+#else\r
+    ShowWindow( window->Window.Handle,\r
+                fgState.ForceIconic ? SW_SHOWMINIMIZED : SW_SHOW );\r
+#endif /* defined(_WIN32_WCE) */\r
+\r
+    UpdateWindow( window->Window.Handle );\r
+    ShowCursor( TRUE );  /* XXX Old comments say "hide cursor"! */\r
+\r
+#endif\r
+\r
+    fgSetWindow( window );\r
+\r
+    window->Window.DoubleBuffered =\r
+        ( fgState.DisplayMode & GLUT_DOUBLE ) ? 1 : 0;\r
+\r
+    if ( ! window->Window.DoubleBuffered )\r
+    {\r
+        glDrawBuffer ( GL_FRONT );\r
+        glReadBuffer ( GL_FRONT );\r
+    }\r
+}\r
+\r
+/*\r
+ * Closes a window, destroying the frame and OpenGL context\r
+ */\r
+void fgCloseWindow( SFG_Window* window )\r
+{\r
+    /* if we're in gamemode and we're closing the gamemode window,\r
+     * call glutLeaveGameMode first to make sure the gamemode is\r
+     * properly closed before closing the window\r
+     */\r
+    if (fgStructure.GameModeWindow != NULL && fgStructure.GameModeWindow->ID==window->ID)\r
+        glutLeaveGameMode();\r
+\r
+#if TARGET_HOST_POSIX_X11\r
+\r
+    if( window->Window.Context )\r
+        glXDestroyContext( fgDisplay.Display, window->Window.Context );\r
+    XFree( window->Window.FBConfig );\r
+\r
+    if( window->Window.Handle ) {\r
+        XDestroyWindow( fgDisplay.Display, window->Window.Handle );\r
+    }\r
+    /* XFlush( fgDisplay.Display ); */ /* XXX Shouldn't need this */\r
+\r
+#elif TARGET_HOST_MS_WINDOWS\r
+\r
+    /* Make sure we don't close a window with current context active */\r
+    if( fgStructure.CurrentWindow == window )\r
+        wglMakeCurrent( NULL, NULL );\r
+\r
+    /*\r
+     * Step through the list of windows.  If the rendering context\r
+     * is not being used by another window, then we delete it.\r
+     */\r
+    {\r
+        int used = FALSE ;\r
+        SFG_Window *iter ;\r
+\r
+        for( iter = (SFG_Window *)fgStructure.Windows.First;\r
+             iter;\r
+             iter = (SFG_Window *)iter->Node.Next )\r
+        {\r
+            if( ( iter->Window.Context == window->Window.Context ) &&\r
+                ( iter != window ) )\r
+                used = TRUE;\r
+        }\r
+\r
+        if( ! used )\r
+            wglDeleteContext( window->Window.Context );\r
+    }\r
+\r
+    DestroyWindow( window->Window.Handle );\r
+#endif\r
+}\r
+\r
+\r
+/* -- INTERFACE FUNCTIONS -------------------------------------------------- */\r
+\r
+/*\r
+ * Creates a new top-level freeglut window\r
+ */\r
+int FGAPIENTRY glutCreateWindow( const char* title )\r
+{\r
+    /* XXX GLUT does not exit; it simply calls "glutInit" quietly if the\r
+     * XXX application has not already done so.  The "freeglut" community\r
+     * XXX decided not to go this route (freeglut-developer e-mail from\r
+     * XXX Steve Baker, 12/16/04, 4:22 PM CST, "Re: [Freeglut-developer]\r
+     * XXX Desired 'freeglut' behaviour when there is no current window"\r
+     */\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutCreateWindow" );\r
+\r
+    return fgCreateWindow( NULL, title, fgState.Position.Use,\r
+                           fgState.Position.X, fgState.Position.Y,\r
+                           fgState.Size.Use, fgState.Size.X, fgState.Size.Y,\r
+                           GL_FALSE, GL_FALSE )->ID;\r
+}\r
+\r
+#if TARGET_HOST_MS_WINDOWS\r
+int FGAPIENTRY __glutCreateWindowWithExit( const char *title, void (__cdecl *exit_function)(int) )\r
+{\r
+  __glutExitFunc = exit_function;\r
+  return glutCreateWindow( title );\r
+}\r
+#endif\r
+\r
+/*\r
+ * This function creates a sub window.\r
+ */\r
+int FGAPIENTRY glutCreateSubWindow( int parentID, int x, int y, int w, int h )\r
+{\r
+    int ret = 0;\r
+    SFG_Window* window = NULL;\r
+    SFG_Window* parent = NULL;\r
+\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutCreateSubWindow" );\r
+    parent = fgWindowByID( parentID );\r
+    freeglut_return_val_if_fail( parent != NULL, 0 );\r
+    if ( x < 0 )\r
+    {\r
+        x = parent->State.Width + x ;\r
+        if ( w >= 0 ) x -= w ;\r
+    }\r
+\r
+    if ( w < 0 ) w = parent->State.Width - x + w ;\r
+    if ( w < 0 )\r
+    {\r
+        x += w ;\r
+        w = -w ;\r
+    }\r
+\r
+    if ( y < 0 )\r
+    {\r
+        y = parent->State.Height + y ;\r
+        if ( h >= 0 ) y -= h ;\r
+    }\r
+\r
+    if ( h < 0 ) h = parent->State.Height - y + h ;\r
+    if ( h < 0 )\r
+    {\r
+        y += h ;\r
+        h = -h ;\r
+    }\r
+\r
+    window = fgCreateWindow( parent, "", GL_TRUE, x, y, GL_TRUE, w, h, GL_FALSE, GL_FALSE );\r
+    ret = window->ID;\r
+\r
+    return ret;\r
+}\r
+\r
+/*\r
+ * Destroys a window and all of its subwindows\r
+ */\r
+void FGAPIENTRY glutDestroyWindow( int windowID )\r
+{\r
+    SFG_Window* window;\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutDestroyWindow" );\r
+    window = fgWindowByID( windowID );\r
+    freeglut_return_if_fail( window != NULL );\r
+    {\r
+        fgExecutionState ExecState = fgState.ExecState;\r
+        fgAddToWindowDestroyList( window );\r
+        fgState.ExecState = ExecState;\r
+    }\r
+}\r
+\r
+/*\r
+ * This function selects the current window\r
+ */\r
+void FGAPIENTRY glutSetWindow( int ID )\r
+{\r
+    SFG_Window* window = NULL;\r
+\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSetWindow" );\r
+    if( fgStructure.CurrentWindow != NULL )\r
+        if( fgStructure.CurrentWindow->ID == ID )\r
+            return;\r
+\r
+    window = fgWindowByID( ID );\r
+    if( window == NULL )\r
+    {\r
+        fgWarning( "glutSetWindow(): window ID %d not found!", ID );\r
+        return;\r
+    }\r
+\r
+    fgSetWindow( window );\r
+}\r
+\r
+/*\r
+ * This function returns the ID number of the current window, 0 if none exists\r
+ */\r
+int FGAPIENTRY glutGetWindow( void )\r
+{\r
+    SFG_Window *win = fgStructure.CurrentWindow;\r
+    /*\r
+     * Since GLUT did not throw an error if this function was called without a prior call to\r
+     * "glutInit", this function shouldn't do so here.  Instead let us return a zero.\r
+     * See Feature Request "[ 1307049 ] glutInit check".\r
+     */\r
+    if ( ! fgState.Initialised )\r
+        return 0;\r
+\r
+    while ( win && win->IsMenu )\r
+        win = win->Parent;\r
+    return win ? win->ID : 0;\r
+}\r
+\r
+/*\r
+ * This function makes the current window visible\r
+ */\r
+void FGAPIENTRY glutShowWindow( void )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutShowWindow" );\r
+    FREEGLUT_EXIT_IF_NO_WINDOW ( "glutShowWindow" );\r
+\r
+#if TARGET_HOST_POSIX_X11\r
+\r
+    XMapWindow( fgDisplay.Display, fgStructure.CurrentWindow->Window.Handle );\r
+    XFlush( fgDisplay.Display ); /* XXX Shouldn't need this */\r
+\r
+#elif TARGET_HOST_MS_WINDOWS\r
+\r
+    ShowWindow( fgStructure.CurrentWindow->Window.Handle, SW_SHOW );\r
+\r
+#endif\r
+\r
+    fgStructure.CurrentWindow->State.Redisplay = GL_TRUE;\r
+}\r
+\r
+/*\r
+ * This function hides the current window\r
+ */\r
+void FGAPIENTRY glutHideWindow( void )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutHideWindow" );\r
+    FREEGLUT_EXIT_IF_NO_WINDOW ( "glutHideWindow" );\r
+\r
+#if TARGET_HOST_POSIX_X11\r
+\r
+    if( fgStructure.CurrentWindow->Parent == NULL )\r
+        XWithdrawWindow( fgDisplay.Display,\r
+                         fgStructure.CurrentWindow->Window.Handle,\r
+                         fgDisplay.Screen );\r
+    else\r
+        XUnmapWindow( fgDisplay.Display,\r
+                      fgStructure.CurrentWindow->Window.Handle );\r
+    XFlush( fgDisplay.Display ); /* XXX Shouldn't need this */\r
+\r
+#elif TARGET_HOST_MS_WINDOWS\r
+\r
+    ShowWindow( fgStructure.CurrentWindow->Window.Handle, SW_HIDE );\r
+\r
+#endif\r
+\r
+    fgStructure.CurrentWindow->State.Redisplay = GL_FALSE;\r
+}\r
+\r
+/*\r
+ * Iconify the current window (top-level windows only)\r
+ */\r
+void FGAPIENTRY glutIconifyWindow( void )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutIconifyWindow" );\r
+    FREEGLUT_EXIT_IF_NO_WINDOW ( "glutIconifyWindow" );\r
+\r
+    fgStructure.CurrentWindow->State.Visible   = GL_FALSE;\r
+#if TARGET_HOST_POSIX_X11\r
+\r
+    XIconifyWindow( fgDisplay.Display, fgStructure.CurrentWindow->Window.Handle,\r
+                    fgDisplay.Screen );\r
+    XFlush( fgDisplay.Display ); /* XXX Shouldn't need this */\r
+\r
+#elif TARGET_HOST_MS_WINDOWS\r
+\r
+    ShowWindow( fgStructure.CurrentWindow->Window.Handle, SW_MINIMIZE );\r
+\r
+#endif\r
+\r
+    fgStructure.CurrentWindow->State.Redisplay = GL_FALSE;\r
+}\r
+\r
+/*\r
+ * Set the current window's title\r
+ */\r
+void FGAPIENTRY glutSetWindowTitle( const char* title )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSetWindowTitle" );\r
+    FREEGLUT_EXIT_IF_NO_WINDOW ( "glutSetWindowTitle" );\r
+    if( ! fgStructure.CurrentWindow->Parent )\r
+    {\r
+#if TARGET_HOST_POSIX_X11\r
+\r
+        XTextProperty text;\r
+\r
+        text.value = (unsigned char *) title;\r
+        text.encoding = XA_STRING;\r
+        text.format = 8;\r
+        text.nitems = strlen( title );\r
+\r
+        XSetWMName(\r
+            fgDisplay.Display,\r
+            fgStructure.CurrentWindow->Window.Handle,\r
+            &text\r
+        );\r
+\r
+        XFlush( fgDisplay.Display ); /* XXX Shouldn't need this */\r
+\r
+#elif TARGET_HOST_MS_WINDOWS\r
+#    ifdef _WIN32_WCE\r
+        {\r
+            wchar_t* wstr = fghWstrFromStr(title);\r
+            SetWindowText( fgStructure.CurrentWindow->Window.Handle, wstr );\r
+            free(wstr);\r
+        }\r
+#    else\r
+        SetWindowText( fgStructure.CurrentWindow->Window.Handle, title );\r
+#    endif\r
+\r
+#endif\r
+    }\r
+}\r
+\r
+/*\r
+ * Set the current window's iconified title\r
+ */\r
+void FGAPIENTRY glutSetIconTitle( const char* title )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSetIconTitle" );\r
+    FREEGLUT_EXIT_IF_NO_WINDOW ( "glutSetIconTitle" );\r
+\r
+    if( ! fgStructure.CurrentWindow->Parent )\r
+    {\r
+#if TARGET_HOST_POSIX_X11\r
+\r
+        XTextProperty text;\r
+\r
+        text.value = (unsigned char *) title;\r
+        text.encoding = XA_STRING;\r
+        text.format = 8;\r
+        text.nitems = strlen( title );\r
+\r
+        XSetWMIconName(\r
+            fgDisplay.Display,\r
+            fgStructure.CurrentWindow->Window.Handle,\r
+            &text\r
+        );\r
+\r
+        XFlush( fgDisplay.Display ); /* XXX Shouldn't need this */\r
+\r
+#elif TARGET_HOST_MS_WINDOWS\r
+#    ifdef _WIN32_WCE\r
+        {\r
+            wchar_t* wstr = fghWstrFromStr(title);\r
+            SetWindowText( fgStructure.CurrentWindow->Window.Handle, wstr );\r
+            free(wstr);\r
+        }\r
+#    else\r
+        SetWindowText( fgStructure.CurrentWindow->Window.Handle, title );\r
+#    endif\r
+\r
+#endif\r
+    }\r
+}\r
+\r
+/*\r
+ * Change the current window's size\r
+ */\r
+void FGAPIENTRY glutReshapeWindow( int width, int height )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutReshapeWindow" );\r
+    FREEGLUT_EXIT_IF_NO_WINDOW ( "glutReshapeWindow" );\r
+\r
+    if (glutGet(GLUT_FULL_SCREEN))\r
+    {\r
+      /*  Leave full screen state before resizing. */\r
+      glutLeaveFullScreen();\r
+    }\r
+\r
+    fgStructure.CurrentWindow->State.NeedToResize = GL_TRUE;\r
+    fgStructure.CurrentWindow->State.Width  = width ;\r
+    fgStructure.CurrentWindow->State.Height = height;\r
+}\r
+\r
+/*\r
+ * Change the current window's position\r
+ */\r
+void FGAPIENTRY glutPositionWindow( int x, int y )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutPositionWindow" );\r
+    FREEGLUT_EXIT_IF_NO_WINDOW ( "glutPositionWindow" );\r
+\r
+    if (glutGet(GLUT_FULL_SCREEN))\r
+    {\r
+      /*  Leave full screen state before moving. */\r
+      glutLeaveFullScreen();\r
+    }\r
+\r
+#if TARGET_HOST_POSIX_X11\r
+\r
+    XMoveWindow( fgDisplay.Display, fgStructure.CurrentWindow->Window.Handle,\r
+                 x, y );\r
+    XFlush( fgDisplay.Display ); /* XXX Shouldn't need this */\r
+\r
+#elif TARGET_HOST_MS_WINDOWS\r
+\r
+    {\r
+        RECT winRect;\r
+\r
+        /* "GetWindowRect" returns the pixel coordinates of the outside of the window */\r
+        GetWindowRect( fgStructure.CurrentWindow->Window.Handle, &winRect );\r
+        MoveWindow(\r
+            fgStructure.CurrentWindow->Window.Handle,\r
+            x,\r
+            y,\r
+            winRect.right - winRect.left,\r
+            winRect.bottom - winRect.top,\r
+            TRUE\r
+        );\r
+    }\r
+\r
+#endif\r
+}\r
+\r
+/*\r
+ * Lowers the current window (by Z order change)\r
+ */\r
+void FGAPIENTRY glutPushWindow( void )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutPushWindow" );\r
+    FREEGLUT_EXIT_IF_NO_WINDOW ( "glutPushWindow" );\r
+\r
+#if TARGET_HOST_POSIX_X11\r
+\r
+    XLowerWindow( fgDisplay.Display, fgStructure.CurrentWindow->Window.Handle );\r
+\r
+#elif TARGET_HOST_MS_WINDOWS\r
+\r
+    SetWindowPos(\r
+        fgStructure.CurrentWindow->Window.Handle,\r
+        HWND_BOTTOM,\r
+        0, 0, 0, 0,\r
+        SWP_NOSIZE | SWP_NOMOVE\r
+    );\r
+\r
+#endif\r
+}\r
+\r
+/*\r
+ * Raises the current window (by Z order change)\r
+ */\r
+void FGAPIENTRY glutPopWindow( void )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutPopWindow" );\r
+    FREEGLUT_EXIT_IF_NO_WINDOW ( "glutPopWindow" );\r
+\r
+#if TARGET_HOST_POSIX_X11\r
+\r
+    XRaiseWindow( fgDisplay.Display, fgStructure.CurrentWindow->Window.Handle );\r
+\r
+#elif TARGET_HOST_MS_WINDOWS\r
+\r
+    SetWindowPos(\r
+        fgStructure.CurrentWindow->Window.Handle,\r
+        HWND_TOP,\r
+        0, 0, 0, 0,\r
+        SWP_NOSIZE | SWP_NOMOVE\r
+    );\r
+\r
+#endif\r
+}\r
+\r
+/*\r
+ * Resize the current window so that it fits the whole screen\r
+ */\r
+void FGAPIENTRY glutFullScreen( void )\r
+{\r
+    SFG_Window *win;\r
+\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutFullScreen" );\r
+    FREEGLUT_EXIT_IF_NO_WINDOW ( "glutFullScreen" );\r
+\r
+    win = fgStructure.CurrentWindow;\r
+\r
+    if (win->Parent)\r
+    {\r
+        /* Child windows cannot be made fullscreen, consistent with GLUT's behavior\r
+         * Also, what would it mean for a child window to be fullscreen, given that it\r
+         * is confined to its parent?\r
+         */\r
+        fgWarning("glutFullScreen called on a child window, ignoring...");\r
+        return;\r
+    }\r
+    else if (fgStructure.GameModeWindow != NULL && fgStructure.GameModeWindow->ID==win->ID)\r
+    {\r
+        /* Ignore fullscreen call on GameMode window, those are always fullscreen already */\r
+        return;\r
+    }\r
+\r
+#if TARGET_HOST_POSIX_X11\r
+    if(!glutGet(GLUT_FULL_SCREEN)) {\r
+        if(fghToggleFullscreen() != -1) {\r
+            win->State.IsFullscreen = GL_TRUE;\r
+        }\r
+    }\r
+\r
+#elif TARGET_HOST_MS_WINDOWS && !defined(_WIN32_WCE) /* FIXME: what about WinCE */\r
+\r
+    if (glutGet(GLUT_FULL_SCREEN))\r
+    {\r
+        /*  Leave full screen state before entering fullscreen again (resizing?) */\r
+        glutLeaveFullScreen();\r
+    }\r
+\r
+    {\r
+#if(WINVER >= 0x0500) /* Windows 2000 or later */\r
+        DWORD s;\r
+        RECT rect;\r
+        HMONITOR hMonitor;\r
+        MONITORINFO mi;\r
+\r
+        /* For fullscreen mode, first remove all window decoration\r
+         * and set style to popup so it will overlap the taskbar\r
+         * then force to maximize on the screen on which it has the most\r
+         * overlap.\r
+         */\r
+\r
+        \r
+        /* store current window rect */\r
+        GetWindowRect( win->Window.Handle, &win->State.OldRect );\r
+\r
+        /* store current window style */\r
+        win->State.OldStyle = s = GetWindowLong(win->Window.Handle, GWL_STYLE);\r
+\r
+        /* remove decorations from style and add popup style*/\r
+        s &= ~WS_OVERLAPPEDWINDOW;\r
+        s |= WS_POPUP;\r
+        SetWindowLong(win->Window.Handle, GWL_STYLE, s);\r
+        SetWindowPos(win->Window.Handle, HWND_TOP, 0,0,0,0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);\r
+\r
+        /* For fullscreen mode, find the monitor that is covered the most\r
+         * by the window and get its rect as the resize target.\r
+            */\r
+        hMonitor= MonitorFromRect(&win->State.OldRect, MONITOR_DEFAULTTONEAREST);\r
+        mi.cbSize = sizeof(mi);\r
+        GetMonitorInfo(hMonitor, &mi);\r
+        rect = mi.rcMonitor;\r
+#else   /* if (WINVER >= 0x0500) */\r
+        RECT rect;\r
+\r
+        /* For fullscreen mode, force the top-left corner to 0,0\r
+         * and adjust the window rectangle so that the client area\r
+         * covers the whole screen.\r
+         */\r
+\r
+        rect.left   = 0;\r
+        rect.top    = 0;\r
+        rect.right  = fgDisplay.ScreenWidth;\r
+        rect.bottom = fgDisplay.ScreenHeight;\r
+\r
+        AdjustWindowRect ( &rect, WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS |\r
+                                  WS_CLIPCHILDREN, FALSE );\r
+#endif  /* (WINVER >= 0x0500) */\r
+\r
+        /*\r
+         * then resize window\r
+         * SWP_NOACTIVATE     Do not activate the window\r
+         * SWP_NOOWNERZORDER  Do not change position in z-order\r
+         * SWP_NOSENDCHANGING Suppress WM_WINDOWPOSCHANGING message\r
+         * SWP_NOZORDER       Retains the current Z order (ignore 2nd param)\r
+         */\r
+        SetWindowPos( fgStructure.CurrentWindow->Window.Handle,\r
+                      HWND_TOP,\r
+                      rect.left,\r
+                      rect.top,\r
+                      rect.right  - rect.left,\r
+                      rect.bottom - rect.top,\r
+                      SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOSENDCHANGING |\r
+                      SWP_NOZORDER\r
+                    );\r
+\r
+        win->State.IsFullscreen = GL_TRUE;\r
+    }\r
+#endif\r
+}\r
+\r
+/*\r
+ * If we are fullscreen, resize the current window back to its original size\r
+ */\r
+void FGAPIENTRY glutLeaveFullScreen( void )\r
+{\r
+    SFG_Window *win;\r
+\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutFullScreen" );\r
+    FREEGLUT_EXIT_IF_NO_WINDOW ( "glutFullScreen" );\r
+\r
+    win = fgStructure.CurrentWindow;\r
+\r
+#if TARGET_HOST_POSIX_X11\r
+    if(glutGet(GLUT_FULL_SCREEN)) {\r
+        if(fghToggleFullscreen() != -1) {\r
+            win->State.IsFullscreen = GL_FALSE;\r
+        }\r
+    }\r
+\r
+#elif TARGET_HOST_MS_WINDOWS && !defined(_WIN32_WCE) /* FIXME: what about WinCE */\r
+    if (!glutGet(GLUT_FULL_SCREEN))\r
+    {\r
+        /* nothing to do */\r
+        return;\r
+    }\r
+\r
+    /* restore style of window before making it fullscreen */\r
+    SetWindowLong(win->Window.Handle, GWL_STYLE, win->State.OldStyle);\r
+    SetWindowPos(win->Window.Handle, HWND_TOP, 0,0,0,0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);\r
+\r
+    /* Then resize */\r
+    SetWindowPos(win->Window.Handle,\r
+        HWND_TOP,\r
+        win->State.OldRect.left,\r
+        win->State.OldRect.top,\r
+        win->State.OldRect.right  - win->State.OldRect.left,\r
+        win->State.OldRect.bottom - win->State.OldRect.top,\r
+        SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOSENDCHANGING |\r
+        SWP_NOZORDER\r
+        );\r
+\r
+    win->State.IsFullscreen = GL_FALSE;\r
+#endif\r
+}\r
+\r
+/*\r
+ * Toggle the window's full screen state.\r
+ */\r
+void FGAPIENTRY glutFullScreenToggle( void )\r
+{\r
+    SFG_Window *win;\r
+\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutFullScreenToggle" );\r
+    FREEGLUT_EXIT_IF_NO_WINDOW ( "glutFullScreenToggle" );\r
+\r
+    win = fgStructure.CurrentWindow;\r
+\r
+#if TARGET_HOST_POSIX_X11\r
+    if(fghToggleFullscreen() != -1) {\r
+        win->State.IsFullscreen = !win->State.IsFullscreen;\r
+    }\r
+#elif TARGET_HOST_MS_WINDOWS\r
+    if (!win->State.IsFullscreen)\r
+        glutFullScreen();\r
+    else\r
+        glutLeaveFullScreen();\r
+#endif\r
+}\r
+\r
+/*\r
+ * A.Donev: Set and retrieve the window's user data\r
+ */\r
+void* FGAPIENTRY glutGetWindowData( void )\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutGetWindowData" );\r
+    FREEGLUT_EXIT_IF_NO_WINDOW ( "glutGetWindowData" );\r
+    return fgStructure.CurrentWindow->UserData;\r
+}\r
+\r
+void FGAPIENTRY glutSetWindowData(void* data)\r
+{\r
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSetWindowData" );\r
+    FREEGLUT_EXIT_IF_NO_WINDOW ( "glutSetWindowData" );\r
+    fgStructure.CurrentWindow->UserData = data;\r
+}\r
+\r
+/*** END OF FILE ***/\r
diff --git a/src/Common/freeglut_xinput.c b/src/Common/freeglut_xinput.c
new file mode 100644 (file)
index 0000000..b0d8cc7
--- /dev/null
@@ -0,0 +1,219 @@
+/* Written for XI1 by Nikolas Doerfler <doerflen@in.tum.de> (c) 2008 *
+ * Rewritten for XI2 by Florian Echtler <echtler@in.tum.de> (c) 2009 */
+
+#include <GL/freeglut.h>
+
+#include "freeglut_internal.h"
+
+#if TARGET_HOST_POSIX_X11 && HAVE_X11_EXTENSIONS_XINPUT2_H
+
+#include <errno.h>
+#include <stdarg.h>
+
+#include <X11/Xlib.h>
+#include <X11/extensions/XInput2.h>
+
+/* import function from freeglut_main.c */
+int fghGetXModifiers( int state );
+
+/* extension opcode for XInput */
+int xi_opcode = -1;
+
+/**
+ * \brief Sets window up for XI2 events.
+ */
+void fgRegisterDevices( Display* dpy, Window* win ) {
+
+       XIEventMask mask;
+       unsigned char flags[2] = { 0, 0 };
+       int event, error;
+
+       /*Display* dpy = fgDisplay.Display;
+       Window* win = glutGetXWindow();*/
+
+       /* get XInput extension opcode */
+       if (!XQueryExtension( dpy, "XInputExtension", &xi_opcode, &event, &error )) { xi_opcode = -1; }
+
+       /* Select for motion events */
+       mask.deviceid = XIAllMasterDevices;
+       mask.mask_len = 2;
+       mask.mask = flags;
+
+       XISetMask(mask.mask, XI_Enter);
+       XISetMask(mask.mask, XI_Motion);
+       XISetMask(mask.mask, XI_ButtonPress);
+       XISetMask(mask.mask, XI_ButtonRelease);
+       XISetMask(mask.mask, XI_Leave);
+       /*XISetMask(mask.mask, XI_KeyPress);
+       XISetMask(mask.mask, XI_KeyRelease);
+       XISetMask(mask.mask, XI_DeviceChanged);
+       XISetMask(mask.mask, XI_RawEvent);
+       XISetMask(mask.mask, XI_FocusIn);
+       XISetMask(mask.mask, XI_FocusOut);
+       XISetMask(mask.mask, XI_HierarchyChanged);*/
+
+       XISelectEvents( dpy, *win, &mask, 1 );
+}
+
+
+void fgPrintXILeaveEvent(XILeaveEvent* event)
+{
+    char* mode = "";
+               char* detail = "";
+    int i;
+
+    printf("    windows: root 0x%lx event 0x%lx child 0x%ld\n",
+            event->root, event->event, event->child);
+    switch(event->mode)
+    {
+        case NotifyNormal:       mode = "NotifyNormal"; break;
+        case NotifyGrab:         mode = "NotifyGrab"; break;
+        case NotifyUngrab:       mode = "NotifyUngrab"; break;
+        case NotifyWhileGrabbed: mode = "NotifyWhileGrabbed"; break;
+    }
+    switch (event->detail)
+    {
+        case NotifyAncestor: detail = "NotifyAncestor"; break;
+        case NotifyVirtual: detail = "NotifyVirtual"; break;
+        case NotifyInferior: detail = "NotifyInferior"; break;
+        case NotifyNonlinear: detail = "NotifyNonlinear"; break;
+        case NotifyNonlinearVirtual: detail = "NotifyNonlinearVirtual"; break;
+        case NotifyPointer: detail = "NotifyPointer"; break;
+        case NotifyPointerRoot: detail = "NotifyPointerRoot"; break;
+        case NotifyDetailNone: detail = "NotifyDetailNone"; break;
+    }
+    printf("    mode: %s (detail %s)\n", mode, detail);
+    printf("    flags: %s %s\n", event->focus ? "[focus]" : "",
+                                 event->same_screen ? "[same screen]" : "");
+    printf("    buttons:");
+    for (i = 0; i < event->buttons.mask_len * 8; i++)
+        if (XIMaskIsSet(event->buttons.mask, i))
+            printf(" %d", i);
+    printf("\n");
+
+    printf("    modifiers: locked 0x%x latched 0x%x base 0x%x\n",
+            event->mods.locked, event->mods.latched,
+            event->mods.base);
+    printf("    group: locked 0x%x latched 0x%x base 0x%x\n",
+            event->group.locked, event->group.latched,
+            event->group.base);
+
+    printf("    root x/y:  %.2f / %.2f\n", event->root_x, event->root_y);
+    printf("    event x/y: %.2f / %.2f\n", event->event_x, event->event_y);
+
+}
+
+
+void fgPrintXIDeviceEvent(XIDeviceEvent* event)
+{
+    double *val;
+    int i;
+
+    printf("    device: %d (%d)\n", event->deviceid, event->sourceid);
+    printf("    detail: %d\n", event->detail);
+    printf("    buttons:");
+         for (i = 0; i < event->buttons.mask_len * 8; i++)
+           if (XIMaskIsSet(event->buttons.mask, i))
+             printf(" %d", i);
+    printf("\n");
+
+    printf("    modifiers: locked 0x%x latched 0x%x base 0x%x\n",
+            event->mods.locked, event->mods.latched,
+            event->mods.base);
+    printf("    group: locked 0x%x latched 0x%x base 0x%x\n",
+            event->group.locked, event->group.latched,
+            event->group.base);
+    printf("    valuators:");
+
+    val = event->valuators.values;
+    for (i = 0; i < event->valuators.mask_len * 8; i++)
+        if (XIMaskIsSet(event->valuators.mask, i))
+            printf(" %d: %.2f", i, *val++);
+    printf("\n");
+
+    printf("    windows: root 0x%lx event 0x%lx child 0x%ld\n",
+            event->root, event->event, event->child);
+    printf("    root x/y:  %.2f / %.2f\n", event->root_x, event->root_y);
+    printf("    event x/y: %.2f / %.2f\n", event->event_x, event->event_y);
+
+}
+
+
+/**
+ * \brief This function is called when an Extension Event is received
+ * and calls the corresponding callback functions for these events.
+ */
+void fgHandleExtensionEvents( XEvent* base_ev ) {
+
+       int i, button = 0;
+       XGenericEventCookie* cookie = (XGenericEventCookie*)&(base_ev->xcookie);
+
+       if ( XGetEventData( fgDisplay.Display, cookie ) && (cookie->type == GenericEvent) && (cookie->extension == xi_opcode) ) {
+
+               XIDeviceEvent* event = (XIDeviceEvent*)(cookie->data);
+               /*printf("XI2 event type: %d - %d\n", cookie->evtype, event->type );*/
+
+               SFG_Window* window = fgWindowByHandle( event->event );
+               if (!window) return;
+
+               switch (cookie->evtype) {
+
+                       case XI_Enter:
+                       case XI_Leave:
+                               fgState.Modifiers = fghGetXModifiers( ((XIEnterEvent*)event)->mods.base );
+                               INVOKE_WCB( *window, MultiEntry, (
+                                       event->deviceid, 
+                                       (event->evtype == XI_Enter ? GLUT_ENTERED : GLUT_LEFT)
+                               ));
+                               #if _DEBUG
+                                       fgPrintXILeaveEvent((XILeaveEvent*)event);
+                               #endif
+                               break;
+
+                       case XI_ButtonPress:
+                       case XI_ButtonRelease:
+                               fgState.Modifiers = fghGetXModifiers( event->mods.base );
+                               INVOKE_WCB( *window, MultiButton, (
+                                       event->deviceid, 
+                                       event->event_x,
+                                       event->event_y,
+                                       (event->detail)-1, 
+                                       (event->evtype == XI_ButtonPress ? GLUT_DOWN : GLUT_UP)
+                               ));
+                               INVOKE_WCB( *window, Mouse, (
+                                       (event->detail)-1, 
+                                       (event->evtype == XI_ButtonPress ? GLUT_DOWN : GLUT_UP),
+                                       event->event_x,
+                                       event->event_y
+                               ));
+                               break;
+
+                       case XI_Motion:
+                               fgState.Modifiers = fghGetXModifiers( event->mods.base );
+                               for (i = 0; i < event->buttons.mask_len; i++) if (event->buttons.mask[i]) button = 1;
+                               if (button) {
+                                       INVOKE_WCB( *window, MultiMotion,  ( event->deviceid, event->event_x, event->event_y ) );
+                                       INVOKE_WCB( *window,           Motion,  (                  event->event_x, event->event_y ) );
+                               } else {
+                                       INVOKE_WCB( *window, MultiPassive, ( event->deviceid, event->event_x, event->event_y ) );
+                                       INVOKE_WCB( *window,           Passive, (                  event->event_x, event->event_y ) );
+                               }
+                               #if _DEBUG
+                                       fgPrintXIDeviceEvent(event);
+                               #endif
+                               break;
+
+                       default:
+                               #if _DEBUG
+                                       fgWarning( "Unknown XI2 device event:" );
+                                       fgPrintXIDeviceEvent( event );
+                               #endif
+                               break;
+               }
+               fgState.Modifiers = INVALID_MODIFIERS;
+       }
+       XFreeEventData( fgDisplay.Display, cookie );
+}
+
+#endif
+
diff --git a/src/Common/freeglutdll.def b/src/Common/freeglutdll.def
new file mode 100644 (file)
index 0000000..306cfc6
--- /dev/null
@@ -0,0 +1,155 @@
+LIBRARY freeglut\r
+VERSION 2.6\r
+EXPORTS\r
+       glutInit\r
+       glutInitWindowPosition\r
+       glutInitWindowSize\r
+       glutInitDisplayMode\r
+       glutInitDisplayString\r
+       glutMainLoop\r
+       glutMainLoopEvent\r
+       glutLeaveMainLoop\r
+       glutCreateWindow\r
+       glutCreateSubWindow\r
+       glutDestroyWindow\r
+       glutSetWindow\r
+       glutGetWindow\r
+       glutSetWindowData\r
+       glutGetWindowData\r
+       glutSetWindowTitle\r
+       glutSetIconTitle\r
+       glutReshapeWindow\r
+       glutPositionWindow\r
+       glutShowWindow\r
+       glutHideWindow\r
+       glutIconifyWindow\r
+       glutPushWindow\r
+       glutPopWindow\r
+       glutFullScreen\r
+       glutPostWindowRedisplay\r
+       glutPostRedisplay\r
+       glutSwapBuffers\r
+       glutWarpPointer\r
+       glutSetCursor\r
+       glutEstablishOverlay\r
+       glutRemoveOverlay\r
+       glutUseLayer\r
+       glutPostOverlayRedisplay\r
+       glutPostWindowOverlayRedisplay\r
+       glutShowOverlay\r
+       glutHideOverlay\r
+       glutCreateMenu\r
+       glutDestroyMenu\r
+       glutGetMenu\r
+       glutSetMenu\r
+       glutGetMenuData\r
+       glutSetMenuData\r
+       glutAddMenuEntry\r
+       glutAddSubMenu\r
+       glutChangeToMenuEntry\r
+       glutChangeToSubMenu\r
+       glutRemoveMenuItem\r
+       glutAttachMenu\r
+       glutDetachMenu\r
+       glutTimerFunc\r
+       glutIdleFunc\r
+       glutKeyboardFunc\r
+       glutSpecialFunc\r
+       glutReshapeFunc\r
+       glutVisibilityFunc\r
+       glutDisplayFunc\r
+       glutMouseFunc\r
+       glutMouseWheelFunc\r
+       glutMotionFunc\r
+       glutPassiveMotionFunc\r
+       glutEntryFunc\r
+       glutCloseFunc\r
+       glutWMCloseFunc\r
+       glutKeyboardUpFunc\r
+       glutSpecialUpFunc\r
+       glutJoystickFunc\r
+       glutMenuStateFunc\r
+       glutMenuStatusFunc\r
+       glutMenuDestroyFunc\r
+       glutOverlayDisplayFunc\r
+       glutWindowStatusFunc\r
+       glutSpaceballMotionFunc\r
+       glutSpaceballRotateFunc\r
+       glutSpaceballButtonFunc\r
+       glutButtonBoxFunc\r
+       glutDialsFunc\r
+       glutTabletMotionFunc\r
+       glutTabletButtonFunc\r
+       glutSetOption\r
+       glutGet\r
+       glutDeviceGet\r
+       glutGetModifiers\r
+       glutLayerGet\r
+       glutBitmapCharacter\r
+       glutBitmapWidth\r
+       glutStrokeCharacter\r
+       glutStrokeWidth\r
+       glutBitmapLength\r
+       glutStrokeLength\r
+       glutBitmapHeight\r
+       glutStrokeHeight\r
+       glutBitmapString\r
+       glutStrokeString\r
+       glutWireCube\r
+       glutSolidCube\r
+       glutWireSphere\r
+       glutSolidSphere\r
+       glutWireCone\r
+       glutSolidCone\r
+       glutWireTorus\r
+       glutSolidTorus\r
+       glutWireDodecahedron\r
+       glutSolidDodecahedron\r
+       glutWireOctahedron\r
+       glutSolidOctahedron\r
+       glutWireTetrahedron\r
+       glutSolidTetrahedron\r
+       glutWireIcosahedron\r
+       glutSolidIcosahedron\r
+       glutWireRhombicDodecahedron\r
+       glutSolidRhombicDodecahedron\r
+       glutWireSierpinskiSponge\r
+       glutSolidSierpinskiSponge\r
+       glutWireTeapot\r
+       glutSolidTeapot\r
+       glutWireCylinder\r
+       glutSolidCylinder\r
+       glutGameModeString\r
+       glutEnterGameMode\r
+       glutLeaveGameMode\r
+       glutGameModeGet\r
+       glutVideoResizeGet\r
+       glutSetupVideoResizing\r
+       glutStopVideoResizing\r
+       glutVideoResize\r
+       glutVideoPan\r
+       glutSetColor\r
+       glutGetColor\r
+       glutCopyColormap\r
+       glutIgnoreKeyRepeat\r
+       glutSetKeyRepeat\r
+       glutForceJoystickFunc\r
+       glutExtensionSupported\r
+       glutReportErrors\r
+       glutGetProcAddress\r
+       glutExit\r
+       glutFullScreenToggle\r
+       glutLeaveFullScreen\r
+       glutGetModeValues\r
+       glutInitContextFlags\r
+       glutInitContextVersion\r
+       glutInitContextProfile\r
+        glutInitErrorFunc\r
+        glutInitWarningFunc\r
+       __glutInitWithExit\r
+       __glutCreateWindowWithExit\r
+       __glutCreateMenuWithExit\r
+       glutMultiButtonFunc\r
+       glutMultiEntryFunc\r
+       glutMultiMotionFunc\r
+       glutMultiPassiveFunc\r
index 2fadc83..c3c51a8 100644 (file)
@@ -15,31 +15,31 @@ EXTRA_DIST = freeglutdll.def
 #
 # Those source files build the freeglut library
 #
-lib@LIBRARY@_la_SOURCES = freeglut_callbacks.c \
-                        freeglut_cursor.c \
-                        freeglut_display.c \
-                        freeglut_ext.c \
-                        freeglut_font.c \
-                        freeglut_glutfont_definitions.c \
-                        freeglut_font_data.c \
-                        freeglut_stroke_roman.c \
-                        freeglut_stroke_mono_roman.c \
-                        freeglut_gamemode.c \
-                        freeglut_geometry.c \
-                        freeglut_init.c \
-                        freeglut_input_devices.c \
-                        freeglut_spaceball.c \
-                        freeglut_joystick.c \
-                        freeglut_main.c \
-                        freeglut_menu.c \
-                        freeglut_misc.c \
-                        freeglut_overlay.c \
-                        freeglut_state.c \
-                        freeglut_structure.c \
-                        freeglut_teapot.c \
-                        freeglut_videoresize.c \
-                        freeglut_window.c \
-                        freeglut_xinput.c
+lib@LIBRARY@_la_SOURCES = Common/freeglut_callbacks.c \
+                        Common/freeglut_cursor.c \
+                        Common/freeglut_display.c \
+                        Common/freeglut_ext.c \
+                        Common/freeglut_font.c \
+                        Common/freeglut_glutfont_definitions.c \
+                        Common/freeglut_font_data.c \
+                        Common/freeglut_stroke_roman.c \
+                        Common/freeglut_stroke_mono_roman.c \
+                        Common/freeglut_gamemode.c \
+                        Common/freeglut_geometry.c \
+                        Common/freeglut_init.c \
+                        Common/freeglut_input_devices.c \
+                        Common/freeglut_spaceball.c \
+                        Common/freeglut_joystick.c \
+                        Common/freeglut_main.c \
+                        Common/freeglut_menu.c \
+                        Common/freeglut_misc.c \
+                        Common/freeglut_overlay.c \
+                        Common/freeglut_state.c \
+                        Common/freeglut_structure.c \
+                        Common/freeglut_teapot.c \
+                        Common/freeglut_videoresize.c \
+                        Common/freeglut_window.c \
+                        Common/freeglut_xinput.c
 
 #
 # Additional linker flags
diff --git a/src/freeglut_callbacks.c b/src/freeglut_callbacks.c
deleted file mode 100644 (file)
index a40f7da..0000000
+++ /dev/null
@@ -1,412 +0,0 @@
-/*
- * freeglut_callbacks.c
- *
- * The callbacks setting methods.
- *
- * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.
- * Written by Pawel W. Olszta, <olszta@sourceforge.net>
- * Creation date: Fri Dec 3 1999
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-#include <GL/freeglut.h>
-#include "freeglut_internal.h"
-
-/* -- INTERFACE FUNCTIONS -------------------------------------------------- */
-
-/*
- * All of the callbacks setting methods can be generalized to this:
- */
-#define SET_CALLBACK(a)                                         \
-do                                                              \
-{                                                               \
-    if( fgStructure.CurrentWindow == NULL )                     \
-        return;                                                 \
-    SET_WCB( ( *( fgStructure.CurrentWindow ) ), a, callback ); \
-} while( 0 )
-
-/*
- * Sets the Display callback for the current window
- */
-void FGAPIENTRY glutDisplayFunc( void (* callback)( void ) )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutDisplayFunc" );
-    if( !callback )
-        fgError( "Fatal error in program.  NULL display callback not "
-                 "permitted in GLUT 3.0+ or freeglut 2.0.1+" );
-    SET_CALLBACK( Display );
-}
-
-/*
- * Sets the Reshape callback for the current window
- */
-void FGAPIENTRY glutReshapeFunc( void (* callback)( int, int ) )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutReshapeFunc" );
-    SET_CALLBACK( Reshape );
-}
-
-/*
- * Sets the Keyboard callback for the current window
- */
-void FGAPIENTRY glutKeyboardFunc( void (* callback)
-                                  ( unsigned char, int, int ) )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutKeyboardFunc" );
-    SET_CALLBACK( Keyboard );
-}
-
-/*
- * Sets the Special callback for the current window
- */
-void FGAPIENTRY glutSpecialFunc( void (* callback)( int, int, int ) )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSpecialFunc" );
-    SET_CALLBACK( Special );
-}
-
-/*
- * Sets the global idle callback
- */
-void FGAPIENTRY glutIdleFunc( void (* callback)( void ) )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutIdleFunc" );
-    fgState.IdleCallback = callback;
-}
-
-/*
- * Sets the Timer callback for the current window
- */
-void FGAPIENTRY glutTimerFunc( unsigned int timeOut, void (* callback)( int ),
-                               int timerID )
-{
-    SFG_Timer *timer, *node;
-
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutTimerFunc" );
-
-    if( (timer = fgState.FreeTimers.Last) )
-    {
-        fgListRemove( &fgState.FreeTimers, &timer->Node );
-    }
-    else
-    {
-        if( ! (timer = malloc(sizeof(SFG_Timer))) )
-            fgError( "Fatal error: "
-                     "Memory allocation failure in glutTimerFunc()" );
-    }
-
-    timer->Callback  = callback;
-    timer->ID        = timerID;
-    timer->TriggerTime = fgElapsedTime() + timeOut;
-
-    for( node = fgState.Timers.First; node; node = node->Node.Next )
-    {
-        if( node->TriggerTime > timer->TriggerTime )
-            break;
-    }
-
-    fgListInsert( &fgState.Timers, &node->Node, &timer->Node );
-}
-
-/*
- * Sets the Visibility callback for the current window.
- */
-static void fghVisibility( int status )
-{
-    int glut_status = GLUT_VISIBLE;
-
-    FREEGLUT_INTERNAL_ERROR_EXIT_IF_NOT_INITIALISED ( "Visibility Callback" );
-    freeglut_return_if_fail( fgStructure.CurrentWindow );
-
-    if( ( GLUT_HIDDEN == status )  || ( GLUT_FULLY_COVERED == status ) )
-        glut_status = GLUT_NOT_VISIBLE;
-    INVOKE_WCB( *( fgStructure.CurrentWindow ), Visibility, ( glut_status ) );
-}
-
-void FGAPIENTRY glutVisibilityFunc( void (* callback)( int ) )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutVisibilityFunc" );
-    SET_CALLBACK( Visibility );
-
-    if( callback )
-        glutWindowStatusFunc( fghVisibility );
-    else
-        glutWindowStatusFunc( NULL );
-}
-
-/*
- * Sets the keyboard key release callback for the current window
- */
-void FGAPIENTRY glutKeyboardUpFunc( void (* callback)
-                                    ( unsigned char, int, int ) )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutKeyboardUpFunc" );
-    SET_CALLBACK( KeyboardUp );
-}
-
-/*
- * Sets the special key release callback for the current window
- */
-void FGAPIENTRY glutSpecialUpFunc( void (* callback)( int, int, int ) )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSpecialUpFunc" );
-    SET_CALLBACK( SpecialUp );
-}
-
-/*
- * Sets the joystick callback and polling rate for the current window
- */
-void FGAPIENTRY glutJoystickFunc( void (* callback)
-                                  ( unsigned int, int, int, int ),
-                                  int pollInterval )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutJoystickFunc" );
-    fgInitialiseJoysticks ();
-
-    if ( ( ( fgStructure.CurrentWindow->State.JoystickPollRate < 0 ) ||
-           !FETCH_WCB(*fgStructure.CurrentWindow,Joystick) ) &&  /* Joystick callback was disabled */
-         ( callback && ( pollInterval >= 0 ) ) )               /* but is now enabled */
-        ++fgState.NumActiveJoysticks;
-    else if ( ( ( fgStructure.CurrentWindow->State.JoystickPollRate >= 0 ) &&
-                FETCH_WCB(*fgStructure.CurrentWindow,Joystick) ) &&  /* Joystick callback was enabled */
-              ( !callback || ( pollInterval < 0 ) ) )              /* but is now disabled */
-        --fgState.NumActiveJoysticks;
-
-    SET_CALLBACK( Joystick );
-    fgStructure.CurrentWindow->State.JoystickPollRate = pollInterval;
-
-    fgStructure.CurrentWindow->State.JoystickLastPoll =
-        fgElapsedTime() - fgStructure.CurrentWindow->State.JoystickPollRate;
-
-    if( fgStructure.CurrentWindow->State.JoystickLastPoll < 0 )
-        fgStructure.CurrentWindow->State.JoystickLastPoll = 0;
-}
-
-/*
- * Sets the mouse callback for the current window
- */
-void FGAPIENTRY glutMouseFunc( void (* callback)( int, int, int, int ) )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutMouseFunc" );
-    SET_CALLBACK( Mouse );
-}
-
-/*
- * Sets the mouse wheel callback for the current window
- */
-void FGAPIENTRY glutMouseWheelFunc( void (* callback)( int, int, int, int ) )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutMouseWheelFunc" );
-    SET_CALLBACK( MouseWheel );
-}
-
-/*
- * Sets the mouse motion callback for the current window (one or more buttons
- * are pressed)
- */
-void FGAPIENTRY glutMotionFunc( void (* callback)( int, int ) )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutMotionFunc" );
-    SET_CALLBACK( Motion );
-}
-
-/*
- * Sets the passive mouse motion callback for the current window (no mouse
- * buttons are pressed)
- */
-void FGAPIENTRY glutPassiveMotionFunc( void (* callback)( int, int ) )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutPassiveMotionFunc" );
-    SET_CALLBACK( Passive );
-}
-
-/*
- * Window mouse entry/leave callback
- */
-void FGAPIENTRY glutEntryFunc( void (* callback)( int ) )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutEntryFunc" );
-    SET_CALLBACK( Entry );
-}
-
-/*
- * Window destruction callbacks
- */
-void FGAPIENTRY glutCloseFunc( void (* callback)( void ) )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutCloseFunc" );
-    SET_CALLBACK( Destroy );
-}
-
-void FGAPIENTRY glutWMCloseFunc( void (* callback)( void ) )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutWMCloseFunc" );
-    glutCloseFunc( callback );
-}
-
-/* A. Donev: Destruction callback for menus */
-void FGAPIENTRY glutMenuDestroyFunc( void (* callback)( void ) )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutMenuDestroyFunc" );
-    if( fgStructure.CurrentMenu )
-        fgStructure.CurrentMenu->Destroy = callback;
-}
-
-/*
- * Deprecated version of glutMenuStatusFunc callback setting method
- */
-void FGAPIENTRY glutMenuStateFunc( void (* callback)( int ) )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutMenuStateFunc" );
-    fgState.MenuStateCallback = callback;
-}
-
-/*
- * Sets the global menu status callback for the current window
- */
-void FGAPIENTRY glutMenuStatusFunc( void (* callback)( int, int, int ) )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutMenuStatusFunc" );
-    fgState.MenuStatusCallback = callback;
-}
-
-/*
- * Sets the overlay display callback for the current window
- */
-void FGAPIENTRY glutOverlayDisplayFunc( void (* callback)( void ) )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutOverlayDisplayFunc" );
-    SET_CALLBACK( OverlayDisplay );
-}
-
-/*
- * Sets the window status callback for the current window
- */
-void FGAPIENTRY glutWindowStatusFunc( void (* callback)( int ) )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutWindowStatusFunc" );
-    SET_CALLBACK( WindowStatus );
-}
-
-/*
- * Sets the spaceball motion callback for the current window
- */
-void FGAPIENTRY glutSpaceballMotionFunc( void (* callback)( int, int, int ) )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSpaceballMotionFunc" );
-    fgInitialiseSpaceball();
-
-    SET_CALLBACK( SpaceMotion );
-}
-
-/*
- * Sets the spaceball rotate callback for the current window
- */
-void FGAPIENTRY glutSpaceballRotateFunc( void (* callback)( int, int, int ) )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSpaceballRotateFunc" );
-    fgInitialiseSpaceball();
-
-    SET_CALLBACK( SpaceRotation );
-}
-
-/*
- * Sets the spaceball button callback for the current window
- */
-void FGAPIENTRY glutSpaceballButtonFunc( void (* callback)( int, int ) )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSpaceballButtonFunc" );
-    fgInitialiseSpaceball();
-
-    SET_CALLBACK( SpaceButton );
-}
-
-/*
- * Sets the button box callback for the current window
- */
-void FGAPIENTRY glutButtonBoxFunc( void (* callback)( int, int ) )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutButtonBoxFunc" );
-    SET_CALLBACK( ButtonBox );
-}
-
-/*
- * Sets the dials box callback for the current window
- */
-void FGAPIENTRY glutDialsFunc( void (* callback)( int, int ) )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutDialsFunc" );
-    SET_CALLBACK( Dials );
-}
-
-/*
- * Sets the tablet motion callback for the current window
- */
-void FGAPIENTRY glutTabletMotionFunc( void (* callback)( int, int ) )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutTabletMotionFunc" );
-    SET_CALLBACK( TabletMotion );
-}
-
-/*
- * Sets the tablet buttons callback for the current window
- */
-void FGAPIENTRY glutTabletButtonFunc( void (* callback)( int, int, int, int ) )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutTabletButtonFunc" );
-    SET_CALLBACK( TabletButton );
-}
-
-/*
- * Sets the multi-pointer entry callback for the current window
- */
-void FGAPIENTRY glutMultiEntryFunc( void (* callback)(int, int ) )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutMultiEntryFunc" );
-    SET_CALLBACK( MultiEntry );
-}
-
-/*
- * Sets the multi-pointer button callback for the current window
- */
-void FGAPIENTRY glutMultiButtonFunc( void (* callback)(int, int, int, int, int ) )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutMultiButtonFunc" );
-    SET_CALLBACK( MultiButton );
-}
-
-/*
- * Sets the multi-pointer motion callback for the current window
- */
-void FGAPIENTRY glutMultiMotionFunc( void (* callback)(int, int, int ) )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutMultiMotionFunc" );
-    SET_CALLBACK( MultiMotion );
-}
-
-/*
- * Sets the multi-pointer passive motion callback for the current window
- */
-void FGAPIENTRY glutMultiPassiveFunc( void (* callback)(int, int, int ) )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutMultiPassiveFunc" );
-    SET_CALLBACK( MultiPassive );
-}
-
-/*** END OF FILE ***/
diff --git a/src/freeglut_cursor.c b/src/freeglut_cursor.c
deleted file mode 100644 (file)
index 3370831..0000000
+++ /dev/null
@@ -1,282 +0,0 @@
-/*
- * freeglut_cursor.c
- *
- * The mouse cursor related stuff.
- *
- * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.
- * Written by Pawel W. Olszta, <olszta@sourceforge.net>
- * Creation date: Thu Dec 16 1999
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-#include <GL/freeglut.h>
-#include "freeglut_internal.h"
-
-/*
- * TODO BEFORE THE STABLE RELEASE:
- *  glutSetCursor()     -- Win32 mappings are incomplete.
- *
- * It would be good to use custom mouse cursor shapes, and introduce
- * an option to display them using glBitmap() and/or texture mapping,
- * apart from the windowing system version.
- */
-
-/* -- PRIVATE FUNCTIONS --------------------------------------------------- */
-
-#if TARGET_HOST_POSIX_X11 || TARGET_HOST_MAC_OSX || TARGET_HOST_SOLARIS
-  #include <X11/cursorfont.h>
-
-/*
- * A factory method for an empty cursor
- */
-static Cursor getEmptyCursor( void )
-{
-    static Cursor cursorNone = None;
-    if( cursorNone == None ) {
-        char cursorNoneBits[ 32 ];
-        XColor dontCare;
-        Pixmap cursorNonePixmap;
-        memset( cursorNoneBits, 0, sizeof( cursorNoneBits ) );
-        memset( &dontCare, 0, sizeof( dontCare ) );
-        cursorNonePixmap = XCreateBitmapFromData ( fgDisplay.Display,
-                                                   fgDisplay.RootWindow,
-                                                   cursorNoneBits, 16, 16 );
-        if( cursorNonePixmap != None ) {
-            cursorNone = XCreatePixmapCursor( fgDisplay.Display,
-                                              cursorNonePixmap, cursorNonePixmap,
-                                              &dontCare, &dontCare, 0, 0 );
-            XFreePixmap( fgDisplay.Display, cursorNonePixmap );
-        }
-    }
-    return cursorNone;
-}
-
-typedef struct tag_cursorCacheEntry cursorCacheEntry;
-struct tag_cursorCacheEntry {
-    unsigned int cursorShape;    /* an XC_foo value */
-    Cursor cachedCursor;         /* None if the corresponding cursor has
-                                    not been created yet */
-};
-
-/*
- * Note: The arrangement of the table below depends on the fact that
- * the "normal" GLUT_CURSOR_* values start a 0 and are consecutive.
- */ 
-static cursorCacheEntry cursorCache[] = {
-    { XC_arrow,               None }, /* GLUT_CURSOR_RIGHT_ARROW */
-    { XC_top_left_arrow,      None }, /* GLUT_CURSOR_LEFT_ARROW */
-    { XC_hand1,               None }, /* GLUT_CURSOR_INFO */
-    { XC_pirate,              None }, /* GLUT_CURSOR_DESTROY */
-    { XC_question_arrow,      None }, /* GLUT_CURSOR_HELP */
-    { XC_exchange,            None }, /* GLUT_CURSOR_CYCLE */
-    { XC_spraycan,            None }, /* GLUT_CURSOR_SPRAY */
-    { XC_watch,               None }, /* GLUT_CURSOR_WAIT */
-    { XC_xterm,               None }, /* GLUT_CURSOR_TEXT */
-    { XC_crosshair,           None }, /* GLUT_CURSOR_CROSSHAIR */
-    { XC_sb_v_double_arrow,   None }, /* GLUT_CURSOR_UP_DOWN */
-    { XC_sb_h_double_arrow,   None }, /* GLUT_CURSOR_LEFT_RIGHT */
-    { XC_top_side,            None }, /* GLUT_CURSOR_TOP_SIDE */
-    { XC_bottom_side,         None }, /* GLUT_CURSOR_BOTTOM_SIDE */
-    { XC_left_side,           None }, /* GLUT_CURSOR_LEFT_SIDE */
-    { XC_right_side,          None }, /* GLUT_CURSOR_RIGHT_SIDE */
-    { XC_top_left_corner,     None }, /* GLUT_CURSOR_TOP_LEFT_CORNER */
-    { XC_top_right_corner,    None }, /* GLUT_CURSOR_TOP_RIGHT_CORNER */
-    { XC_bottom_right_corner, None }, /* GLUT_CURSOR_BOTTOM_RIGHT_CORNER */
-    { XC_bottom_left_corner,  None }  /* GLUT_CURSOR_BOTTOM_LEFT_CORNER */
-};
-
-static void fghSetCursor ( SFG_Window *window, int cursorID )
-{
-    Cursor cursor;
-    /*
-     * XXX FULL_CROSSHAIR demotes to plain CROSSHAIR. Old GLUT allows
-     * for this, but if there is a system that easily supports a full-
-     * window (or full-screen) crosshair, we might consider it.
-     */
-    int cursorIDToUse =
-        ( cursorID == GLUT_CURSOR_FULL_CROSSHAIR ) ? GLUT_CURSOR_CROSSHAIR : cursorID;
-
-    if( ( cursorIDToUse >= 0 ) &&
-        ( cursorIDToUse < sizeof( cursorCache ) / sizeof( cursorCache[0] ) ) ) {
-        cursorCacheEntry *entry = &cursorCache[ cursorIDToUse ];
-        if( entry->cachedCursor == None ) {
-            entry->cachedCursor =
-                XCreateFontCursor( fgDisplay.Display, entry->cursorShape );
-        }
-        cursor = entry->cachedCursor;
-    } else {
-        switch( cursorIDToUse )
-        {
-        case GLUT_CURSOR_NONE:
-            cursor = getEmptyCursor( );
-            break;
-
-        case GLUT_CURSOR_INHERIT:
-            cursor = None;
-            break;
-
-        default:
-            fgError( "Unknown cursor type: %d", cursorIDToUse );
-            return;
-        }
-    }
-
-    if ( cursorIDToUse == GLUT_CURSOR_INHERIT ) {
-        XUndefineCursor( fgDisplay.Display, window->Window.Handle );
-    } else if ( cursor != None ) {
-        XDefineCursor( fgDisplay.Display, window->Window.Handle, cursor );
-    } else if ( cursorIDToUse != GLUT_CURSOR_NONE ) {
-        fgError( "Failed to create cursor" );
-    }
-}
-
-
-static void fghWarpPointer ( int x, int y )
-{
-    XWarpPointer(
-        fgDisplay.Display,
-        None,
-        fgStructure.CurrentWindow->Window.Handle,
-        0, 0, 0, 0,
-        x, y
-    );
-    /* Make the warp visible immediately. */
-    XFlush( fgDisplay.Display );
-}
-#endif
-
-
-#if TARGET_HOST_MS_WINDOWS
-static void fghSetCursor ( SFG_Window *window, int cursorID )
-{
-    /*
-     * Joe Krahn is re-writing the following code.
-     */
-    /* Set the cursor AND change it for this window class. */
-#if !defined(__MINGW64__) && _MSC_VER <= 1200
-#       define MAP_CURSOR(a,b)                                   \
-        case a:                                                  \
-            SetCursor( LoadCursor( NULL, b ) );                  \
-            SetClassLong( window->Window.Handle,                 \
-                          GCL_HCURSOR,                           \
-                          ( LONG )LoadCursor( NULL, b ) );       \
-        break;
-    /* Nuke the cursor AND change it for this window class. */
-#       define ZAP_CURSOR(a,b)                                   \
-        case a:                                                  \
-            SetCursor( NULL );                                   \
-            SetClassLong( window->Window.Handle,                 \
-                          GCL_HCURSOR, ( LONG )NULL );           \
-        break;
-#else
-#       define MAP_CURSOR(a,b)                                   \
-        case a:                                                  \
-            SetCursor( LoadCursor( NULL, b ) );                  \
-            SetClassLongPtr( window->Window.Handle,              \
-                          GCLP_HCURSOR,                          \
-                          ( LONG )( LONG_PTR )LoadCursor( NULL, b ) );       \
-        break;
-    /* Nuke the cursor AND change it for this window class. */
-#       define ZAP_CURSOR(a,b)                                   \
-        case a:                                                  \
-            SetCursor( NULL );                                   \
-            SetClassLongPtr( window->Window.Handle,              \
-                          GCLP_HCURSOR, ( LONG )( LONG_PTR )NULL );          \
-        break;
-#endif
-
-    switch( cursorID )
-    {
-        MAP_CURSOR( GLUT_CURSOR_RIGHT_ARROW,         IDC_ARROW     );
-        MAP_CURSOR( GLUT_CURSOR_LEFT_ARROW,          IDC_ARROW     );
-        MAP_CURSOR( GLUT_CURSOR_INFO,                IDC_HELP      );
-        MAP_CURSOR( GLUT_CURSOR_DESTROY,             IDC_CROSS     );
-        MAP_CURSOR( GLUT_CURSOR_HELP,                IDC_HELP      );
-        MAP_CURSOR( GLUT_CURSOR_CYCLE,               IDC_SIZEALL   );
-        MAP_CURSOR( GLUT_CURSOR_SPRAY,               IDC_CROSS     );
-        MAP_CURSOR( GLUT_CURSOR_WAIT,                IDC_WAIT      );
-        MAP_CURSOR( GLUT_CURSOR_TEXT,                IDC_IBEAM     );
-        MAP_CURSOR( GLUT_CURSOR_CROSSHAIR,           IDC_CROSS     );
-        MAP_CURSOR( GLUT_CURSOR_UP_DOWN,             IDC_SIZENS    );
-        MAP_CURSOR( GLUT_CURSOR_LEFT_RIGHT,          IDC_SIZEWE    );
-        MAP_CURSOR( GLUT_CURSOR_TOP_SIDE,            IDC_ARROW     ); /* XXX ToDo */
-        MAP_CURSOR( GLUT_CURSOR_BOTTOM_SIDE,         IDC_ARROW     ); /* XXX ToDo */
-        MAP_CURSOR( GLUT_CURSOR_LEFT_SIDE,           IDC_ARROW     ); /* XXX ToDo */
-        MAP_CURSOR( GLUT_CURSOR_RIGHT_SIDE,          IDC_ARROW     ); /* XXX ToDo */
-        MAP_CURSOR( GLUT_CURSOR_TOP_LEFT_CORNER,     IDC_SIZENWSE  );
-        MAP_CURSOR( GLUT_CURSOR_TOP_RIGHT_CORNER,    IDC_SIZENESW  );
-        MAP_CURSOR( GLUT_CURSOR_BOTTOM_RIGHT_CORNER, IDC_SIZENWSE  );
-        MAP_CURSOR( GLUT_CURSOR_BOTTOM_LEFT_CORNER,  IDC_SIZENESW  );
-        MAP_CURSOR( GLUT_CURSOR_INHERIT,             IDC_ARROW     ); /* XXX ToDo */
-        ZAP_CURSOR( GLUT_CURSOR_NONE,                NULL          );
-        MAP_CURSOR( GLUT_CURSOR_FULL_CROSSHAIR,      IDC_CROSS     ); /* XXX ToDo */
-
-    default:
-        fgError( "Unknown cursor type: %d", cursorID );
-        break;
-    }
-}
-
-
-static void fghWarpPointer ( int x, int y )
-{
-    POINT coords;
-    coords.x = x;
-    coords.y = y;
-
-    /* ClientToScreen() translates {coords} for us. */
-    ClientToScreen( fgStructure.CurrentWindow->Window.Handle, &coords );
-    SetCursorPos( coords.x, coords.y );
-}
-#endif
-
-
-/* -- INTERNAL FUNCTIONS ---------------------------------------------------- */
-void fgSetCursor ( SFG_Window *window, int cursorID )
-{
-    fghSetCursor ( window, cursorID );
-}
-
-
-/* -- INTERFACE FUNCTIONS -------------------------------------------------- */
-
-/*
- * Set the cursor image to be used for the current window
- */
-void FGAPIENTRY glutSetCursor( int cursorID )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSetCursor" );
-    FREEGLUT_EXIT_IF_NO_WINDOW ( "glutSetCursor" );
-
-    fghSetCursor ( fgStructure.CurrentWindow, cursorID );
-    fgStructure.CurrentWindow->State.Cursor = cursorID;
-}
-
-/*
- * Moves the mouse pointer to given window coordinates
- */
-void FGAPIENTRY glutWarpPointer( int x, int y )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutWarpPointer" );
-    FREEGLUT_EXIT_IF_NO_WINDOW ( "glutWarpPointer" );
-
-    fghWarpPointer ( x, y );
-}
-
-/*** END OF FILE ***/
diff --git a/src/freeglut_display.c b/src/freeglut_display.c
deleted file mode 100644 (file)
index 2ba0ec5..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * freeglut_display.c
- *
- * Display message posting, context buffer swapping.
- *
- * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.
- * Written by Pawel W. Olszta, <olszta@sourceforge.net>
- * Creation date: Fri Dec 3 1999
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-#include <GL/freeglut.h>
-#include "freeglut_internal.h"
-
-/* -- INTERFACE FUNCTIONS -------------------------------------------------- */
-
-/*
- * Marks the current window to have the redisplay performed when possible...
- */
-void FGAPIENTRY glutPostRedisplay( void )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutPostRedisplay" );
-    if ( ! fgStructure.CurrentWindow )
-       {
-      fgError ( " ERROR:  Function <%s> called"
-                " with no current window defined.", "glutPostRedisplay" ) ;
-       }
-
-    fgStructure.CurrentWindow->State.Redisplay = GL_TRUE;
-}
-
-/*
- * Swaps the buffers for the current window (if any)
- */
-void FGAPIENTRY glutSwapBuffers( void )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSwapBuffers" );
-    FREEGLUT_EXIT_IF_NO_WINDOW ( "glutSwapBuffers" );
-
-    /*
-     * "glXSwapBuffers" already performs an implicit call to "glFlush". What
-     * about "SwapBuffers"?
-     */
-    glFlush( );
-    if( ! fgStructure.CurrentWindow->Window.DoubleBuffered )
-        return;
-
-#if TARGET_HOST_POSIX_X11
-    glXSwapBuffers( fgDisplay.Display, fgStructure.CurrentWindow->Window.Handle );
-#elif TARGET_HOST_MS_WINDOWS
-    SwapBuffers( fgStructure.CurrentWindow->Window.Device );
-#endif
-
-    /* GLUT_FPS env var support */
-    if( fgState.FPSInterval )
-    {
-        GLint t = glutGet( GLUT_ELAPSED_TIME );
-        fgState.SwapCount++;
-        if( fgState.SwapTime == 0 )
-            fgState.SwapTime = t;
-        else if( t - fgState.SwapTime > fgState.FPSInterval )
-        {
-            float time = 0.001f * ( t - fgState.SwapTime );
-            float fps = ( float )fgState.SwapCount / time;
-            fprintf( stderr,
-                     "freeglut: %d frames in %.2f seconds = %.2f FPS\n",
-                     fgState.SwapCount, time, fps );
-            fgState.SwapTime = t;
-            fgState.SwapCount = 0;
-        }
-    }
-}
-
-/*
- * Mark appropriate window to be displayed
- */
-void FGAPIENTRY glutPostWindowRedisplay( int windowID )
-{
-    SFG_Window* window;
-
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutPostWindowRedisplay" );
-    window = fgWindowByID( windowID );
-    freeglut_return_if_fail( window );
-    window->State.Redisplay = GL_TRUE;
-}
-
-/*** END OF FILE ***/
diff --git a/src/freeglut_ext.c b/src/freeglut_ext.c
deleted file mode 100644 (file)
index d8aca45..0000000
+++ /dev/null
@@ -1,233 +0,0 @@
-/*
- * freeglut_ext.c
- *
- * Functions related to OpenGL extensions.
- *
- * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.
- * Written by Pawel W. Olszta, <olszta@sourceforge.net>
- * Creation date: Thu Dec 9 1999
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-#define GLX_GLXEXT_PROTOTYPES
-#include <GL/freeglut.h>
-#include "freeglut_internal.h"
-
-static GLUTproc fghGetGLUTProcAddress( const char* procName )
-{
-    /* optimization: quick initial check */
-    if( strncmp( procName, "glut", 4 ) != 0 )
-        return NULL;
-
-#define CHECK_NAME(x) if( strcmp( procName, #x ) == 0) return (GLUTproc)x;
-    CHECK_NAME(glutInit);
-    CHECK_NAME(glutInitDisplayMode);
-    CHECK_NAME(glutInitDisplayString);
-    CHECK_NAME(glutInitWindowPosition);
-    CHECK_NAME(glutInitWindowSize);
-    CHECK_NAME(glutMainLoop);
-    CHECK_NAME(glutExit);
-    CHECK_NAME(glutCreateWindow);
-    CHECK_NAME(glutCreateSubWindow);
-    CHECK_NAME(glutDestroyWindow);
-    CHECK_NAME(glutPostRedisplay);
-    CHECK_NAME(glutPostWindowRedisplay);
-    CHECK_NAME(glutSwapBuffers);
-    CHECK_NAME(glutGetWindow);
-    CHECK_NAME(glutSetWindow);
-    CHECK_NAME(glutSetWindowTitle);
-    CHECK_NAME(glutSetIconTitle);
-    CHECK_NAME(glutPositionWindow);
-    CHECK_NAME(glutReshapeWindow);
-    CHECK_NAME(glutPopWindow);
-    CHECK_NAME(glutPushWindow);
-    CHECK_NAME(glutIconifyWindow);
-    CHECK_NAME(glutShowWindow);
-    CHECK_NAME(glutHideWindow);
-    CHECK_NAME(glutFullScreen);
-    CHECK_NAME(glutSetCursor);
-    CHECK_NAME(glutWarpPointer);
-    CHECK_NAME(glutEstablishOverlay);
-    CHECK_NAME(glutRemoveOverlay);
-    CHECK_NAME(glutUseLayer);
-    CHECK_NAME(glutPostOverlayRedisplay);
-    CHECK_NAME(glutPostWindowOverlayRedisplay);
-    CHECK_NAME(glutShowOverlay);
-    CHECK_NAME(glutHideOverlay);
-    CHECK_NAME(glutCreateMenu);
-    CHECK_NAME(glutDestroyMenu);
-    CHECK_NAME(glutGetMenu);
-    CHECK_NAME(glutSetMenu);
-    CHECK_NAME(glutAddMenuEntry);
-    CHECK_NAME(glutAddSubMenu);
-    CHECK_NAME(glutChangeToMenuEntry);
-    CHECK_NAME(glutChangeToSubMenu);
-    CHECK_NAME(glutRemoveMenuItem);
-    CHECK_NAME(glutAttachMenu);
-    CHECK_NAME(glutDetachMenu);
-    CHECK_NAME(glutDisplayFunc);
-    CHECK_NAME(glutReshapeFunc);
-    CHECK_NAME(glutKeyboardFunc);
-    CHECK_NAME(glutMouseFunc);
-    CHECK_NAME(glutMultiEntryFunc);
-    CHECK_NAME(glutMultiMotionFunc);
-    CHECK_NAME(glutMultiButtonFunc);
-    CHECK_NAME(glutMultiPassiveFunc);
-    CHECK_NAME(glutMotionFunc);
-    CHECK_NAME(glutPassiveMotionFunc);
-    CHECK_NAME(glutEntryFunc);
-    CHECK_NAME(glutVisibilityFunc);
-    CHECK_NAME(glutIdleFunc);
-    CHECK_NAME(glutTimerFunc);
-    CHECK_NAME(glutMenuStateFunc);
-    CHECK_NAME(glutSpecialFunc);
-    CHECK_NAME(glutSpaceballMotionFunc);
-    CHECK_NAME(glutSpaceballRotateFunc);
-    CHECK_NAME(glutSpaceballButtonFunc);
-    CHECK_NAME(glutButtonBoxFunc);
-    CHECK_NAME(glutDialsFunc);
-    CHECK_NAME(glutTabletMotionFunc);
-    CHECK_NAME(glutTabletButtonFunc);
-    CHECK_NAME(glutMenuStatusFunc);
-    CHECK_NAME(glutOverlayDisplayFunc);
-    CHECK_NAME(glutWindowStatusFunc);
-    CHECK_NAME(glutKeyboardUpFunc);
-    CHECK_NAME(glutSpecialUpFunc);
-#if !defined(_WIN32_WCE)
-    CHECK_NAME(glutJoystickFunc);
-#endif /* !defined(_WIN32_WCE) */
-    CHECK_NAME(glutSetColor);
-    CHECK_NAME(glutGetColor);
-    CHECK_NAME(glutCopyColormap);
-    CHECK_NAME(glutGet);
-    CHECK_NAME(glutDeviceGet);
-    CHECK_NAME(glutExtensionSupported);
-    CHECK_NAME(glutGetModifiers);
-    CHECK_NAME(glutLayerGet);
-    CHECK_NAME(glutBitmapCharacter);
-    CHECK_NAME(glutBitmapWidth);
-    CHECK_NAME(glutStrokeCharacter);
-    CHECK_NAME(glutStrokeWidth);
-    CHECK_NAME(glutBitmapLength);
-    CHECK_NAME(glutStrokeLength);
-    CHECK_NAME(glutWireSphere);
-    CHECK_NAME(glutSolidSphere);
-    CHECK_NAME(glutWireCone);
-    CHECK_NAME(glutSolidCone);
-    CHECK_NAME(glutWireCube);
-    CHECK_NAME(glutSolidCube);
-    CHECK_NAME(glutWireTorus);
-    CHECK_NAME(glutSolidTorus);
-    CHECK_NAME(glutWireDodecahedron);
-    CHECK_NAME(glutSolidDodecahedron);
-    CHECK_NAME(glutWireTeapot);
-    CHECK_NAME(glutSolidTeapot);
-    CHECK_NAME(glutWireOctahedron);
-    CHECK_NAME(glutSolidOctahedron);
-    CHECK_NAME(glutWireTetrahedron);
-    CHECK_NAME(glutSolidTetrahedron);
-    CHECK_NAME(glutWireIcosahedron);
-    CHECK_NAME(glutSolidIcosahedron);
-    CHECK_NAME(glutVideoResizeGet);
-    CHECK_NAME(glutSetupVideoResizing);
-    CHECK_NAME(glutStopVideoResizing);
-    CHECK_NAME(glutVideoResize);
-    CHECK_NAME(glutVideoPan);
-    CHECK_NAME(glutReportErrors);
-    CHECK_NAME(glutIgnoreKeyRepeat);
-    CHECK_NAME(glutSetKeyRepeat);
-#if !defined(_WIN32_WCE)
-    CHECK_NAME(glutForceJoystickFunc);
-    CHECK_NAME(glutGameModeString);
-    CHECK_NAME(glutEnterGameMode);
-    CHECK_NAME(glutLeaveGameMode);
-    CHECK_NAME(glutGameModeGet);
-#endif /* !defined(_WIN32_WCE) */
-    /* freeglut extensions */
-    CHECK_NAME(glutMainLoopEvent);
-    CHECK_NAME(glutLeaveMainLoop);
-    CHECK_NAME(glutCloseFunc);
-    CHECK_NAME(glutWMCloseFunc);
-    CHECK_NAME(glutMenuDestroyFunc);
-    CHECK_NAME(glutFullScreenToggle);
-    CHECK_NAME(glutLeaveFullScreen);
-    CHECK_NAME(glutSetOption);
-    CHECK_NAME(glutGetModeValues);
-    CHECK_NAME(glutSetWindowData);
-    CHECK_NAME(glutGetWindowData);
-    CHECK_NAME(glutSetMenuData);
-    CHECK_NAME(glutGetMenuData);
-    CHECK_NAME(glutBitmapHeight);
-    CHECK_NAME(glutStrokeHeight);
-    CHECK_NAME(glutBitmapString);
-    CHECK_NAME(glutStrokeString);
-    CHECK_NAME(glutWireRhombicDodecahedron);
-    CHECK_NAME(glutSolidRhombicDodecahedron);
-    CHECK_NAME(glutWireSierpinskiSponge);
-    CHECK_NAME(glutSolidSierpinskiSponge);
-    CHECK_NAME(glutWireCylinder);
-    CHECK_NAME(glutSolidCylinder);
-    CHECK_NAME(glutGetProcAddress);
-    CHECK_NAME(glutMouseWheelFunc);
-    CHECK_NAME(glutJoystickGetNumAxes);
-    CHECK_NAME(glutJoystickGetNumButtons);
-    CHECK_NAME(glutJoystickNotWorking);
-    CHECK_NAME(glutJoystickGetDeadBand);
-    CHECK_NAME(glutJoystickSetDeadBand);
-    CHECK_NAME(glutJoystickGetSaturation);
-    CHECK_NAME(glutJoystickSetSaturation);
-    CHECK_NAME(glutJoystickSetMinRange);
-    CHECK_NAME(glutJoystickSetMaxRange);
-    CHECK_NAME(glutJoystickSetCenter);
-    CHECK_NAME(glutJoystickGetMinRange);
-    CHECK_NAME(glutJoystickGetMaxRange);
-    CHECK_NAME(glutJoystickGetCenter);
-    CHECK_NAME(glutInitContextVersion);
-    CHECK_NAME(glutInitContextFlags);
-    CHECK_NAME(glutInitContextProfile);
-    CHECK_NAME(glutInitErrorFunc);
-    CHECK_NAME(glutInitWarningFunc);
-#undef CHECK_NAME
-
-    return NULL;
-}
-
-
-SFG_Proc fghGetProcAddress( const char *procName )
-{
-#if TARGET_HOST_MS_WINDOWS
-    return (SFG_Proc)wglGetProcAddress( ( LPCSTR )procName );
-#elif TARGET_HOST_POSIX_X11 && defined( GLX_ARB_get_proc_address )
-    return (SFG_Proc)glXGetProcAddressARB( ( const GLubyte * )procName );
-#else
-    return NULL;
-#endif
-}
-
-
-GLUTproc FGAPIENTRY
-glutGetProcAddress( const char *procName )
-{
-    GLUTproc p;
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutGetProcAddress" );
-
-    /* Try GLUT functions first, then core GL functions */
-    p = fghGetGLUTProcAddress( procName );
-    return ( p != NULL ) ? p : fghGetProcAddress( procName );
-}
diff --git a/src/freeglut_font.c b/src/freeglut_font.c
deleted file mode 100644 (file)
index e956d5b..0000000
+++ /dev/null
@@ -1,384 +0,0 @@
-/*
- * freeglut_font.c
- *
- * Bitmap and stroke fonts displaying.
- *
- * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.
- * Written by Pawel W. Olszta, <olszta@sourceforge.net>
- * Creation date: Thu Dec 16 1999
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-#include <GL/freeglut.h>
-#include "freeglut_internal.h"
-
-/*
- * TODO BEFORE THE STABLE RELEASE:
- *
- *  Test things out ...
- */
-
-/* -- IMPORT DECLARATIONS -------------------------------------------------- */
-
-/*
- * These are the font faces defined in freeglut_font_data.c file:
- */
-extern SFG_Font fgFontFixed8x13;
-extern SFG_Font fgFontFixed9x15;
-extern SFG_Font fgFontHelvetica10;
-extern SFG_Font fgFontHelvetica12;
-extern SFG_Font fgFontHelvetica18;
-extern SFG_Font fgFontTimesRoman10;
-extern SFG_Font fgFontTimesRoman24;
-extern SFG_StrokeFont fgStrokeRoman;
-extern SFG_StrokeFont fgStrokeMonoRoman;
-
-
-/* -- PRIVATE FUNCTIONS ---------------------------------------------------- */
-
-/*
- * Matches a font ID with a SFG_Font structure pointer.
- * This was changed to match the GLUT header style.
- */
-static SFG_Font* fghFontByID( void* font )
-{
-    if( font == GLUT_BITMAP_8_BY_13        )
-        return &fgFontFixed8x13;
-    if( font == GLUT_BITMAP_9_BY_15        )
-        return &fgFontFixed9x15;
-    if( font == GLUT_BITMAP_HELVETICA_10   )
-        return &fgFontHelvetica10;
-    if( font == GLUT_BITMAP_HELVETICA_12   )
-        return &fgFontHelvetica12;
-    if( font == GLUT_BITMAP_HELVETICA_18   )
-        return &fgFontHelvetica18;
-    if( font == GLUT_BITMAP_TIMES_ROMAN_10 )
-        return &fgFontTimesRoman10;
-    if( font == GLUT_BITMAP_TIMES_ROMAN_24 )
-        return &fgFontTimesRoman24;
-
-    fgWarning( "font 0x%08x not found", font );
-    return 0;
-}
-
-/*
- * Matches a font ID with a SFG_StrokeFont structure pointer.
- * This was changed to match the GLUT header style.
- */
-static SFG_StrokeFont* fghStrokeByID( void* font )
-{
-    if( font == GLUT_STROKE_ROMAN      )
-        return &fgStrokeRoman;
-    if( font == GLUT_STROKE_MONO_ROMAN )
-        return &fgStrokeMonoRoman;
-
-    fgWarning( "stroke font 0x%08x not found", font );
-    return 0;
-}
-
-
-/* -- INTERFACE FUNCTIONS -------------------------------------------------- */
-
-/*
- * Draw a bitmap character
- */
-void FGAPIENTRY glutBitmapCharacter( void* fontID, int character )
-{
-    const GLubyte* face;
-    SFG_Font* font;
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutBitmapCharacter" );
-    font = fghFontByID( fontID );
-    freeglut_return_if_fail( ( character >= 1 )&&( character < 256 ) );
-    freeglut_return_if_fail( font );
-
-    /*
-     * Find the character we want to draw (???)
-     */
-    face = font->Characters[ character ];
-
-    glPushClientAttrib( GL_CLIENT_PIXEL_STORE_BIT );
-    glPixelStorei( GL_UNPACK_SWAP_BYTES,  GL_FALSE );
-    glPixelStorei( GL_UNPACK_LSB_FIRST,   GL_FALSE );
-    glPixelStorei( GL_UNPACK_ROW_LENGTH,  0        );
-    glPixelStorei( GL_UNPACK_SKIP_ROWS,   0        );
-    glPixelStorei( GL_UNPACK_SKIP_PIXELS, 0        );
-    glPixelStorei( GL_UNPACK_ALIGNMENT,   1        );
-    glBitmap(
-        face[ 0 ], font->Height,      /* The bitmap's width and height  */
-        font->xorig, font->yorig,     /* The origin in the font glyph   */
-        ( float )( face[ 0 ] ), 0.0,  /* The raster advance -- inc. x,y */
-        ( face + 1 )                  /* The packed bitmap data...      */
-    );
-    glPopClientAttrib( );
-}
-
-void FGAPIENTRY glutBitmapString( void* fontID, const unsigned char *string )
-{
-    unsigned char c;
-    float x = 0.0f ;
-    SFG_Font* font;
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutBitmapString" );
-    font = fghFontByID( fontID );
-    freeglut_return_if_fail( font );
-    if ( !string || ! *string )
-        return;
-
-    glPushClientAttrib( GL_CLIENT_PIXEL_STORE_BIT );
-    glPixelStorei( GL_UNPACK_SWAP_BYTES,  GL_FALSE );
-    glPixelStorei( GL_UNPACK_LSB_FIRST,   GL_FALSE );
-    glPixelStorei( GL_UNPACK_ROW_LENGTH,  0        );
-    glPixelStorei( GL_UNPACK_SKIP_ROWS,   0        );
-    glPixelStorei( GL_UNPACK_SKIP_PIXELS, 0        );
-    glPixelStorei( GL_UNPACK_ALIGNMENT,   1        );
-
-    /*
-     * Step through the string, drawing each character.
-     * A newline will simply translate the next character's insertion
-     * point back to the start of the line and down one line.
-     */
-    while( ( c = *string++) )
-        if( c == '\n' )
-        {
-            glBitmap ( 0, 0, 0, 0, -x, (float) -font->Height, NULL );
-            x = 0.0f;
-        }
-        else  /* Not an EOL, draw the bitmap character */
-        {
-            const GLubyte* face = font->Characters[ c ];
-
-            glBitmap(
-                face[ 0 ], font->Height,     /* Bitmap's width and height    */
-                font->xorig, font->yorig,    /* The origin in the font glyph */
-                ( float )( face[ 0 ] ), 0.0, /* The raster advance; inc. x,y */
-                ( face + 1 )                 /* The packed bitmap data...    */
-            );
-
-            x += ( float )( face[ 0 ] );
-        }
-
-    glPopClientAttrib( );
-}
-
-/*
- * Returns the width in pixels of a font's character
- */
-int FGAPIENTRY glutBitmapWidth( void* fontID, int character )
-{
-    SFG_Font* font;
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutBitmapWidth" );
-    font = fghFontByID( fontID );
-    freeglut_return_val_if_fail( character > 0 && character < 256, 0 );
-    freeglut_return_val_if_fail( font, 0 );
-    return *( font->Characters[ character ] );
-}
-
-/*
- * Return the width of a string drawn using a bitmap font
- */
-int FGAPIENTRY glutBitmapLength( void* fontID, const unsigned char* string )
-{
-    unsigned char c;
-    int length = 0, this_line_length = 0;
-    SFG_Font* font;
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutBitmapLength" );
-    font = fghFontByID( fontID );
-    freeglut_return_val_if_fail( font, 0 );
-    if ( !string || ! *string )
-        return 0;
-
-    while( ( c = *string++) )
-    {
-        if( c != '\n' )/* Not an EOL, increment length of line */
-            this_line_length += *( font->Characters[ c ]);
-        else  /* EOL; reset the length of this line */
-        {
-            if( length < this_line_length )
-                length = this_line_length;
-            this_line_length = 0;
-        }
-    }
-    if ( length < this_line_length )
-        length = this_line_length;
-
-    return length;
-}
-
-/*
- * Returns the height of a bitmap font
- */
-int FGAPIENTRY glutBitmapHeight( void* fontID )
-{
-    SFG_Font* font;
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutBitmapHeight" );
-    font = fghFontByID( fontID );
-    freeglut_return_val_if_fail( font, 0 );
-    return font->Height;
-}
-
-/*
- * Draw a stroke character
- */
-void FGAPIENTRY glutStrokeCharacter( void* fontID, int character )
-{
-    const SFG_StrokeChar *schar;
-    const SFG_StrokeStrip *strip;
-    int i, j;
-    SFG_StrokeFont* font;
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutStrokeCharacter" );
-    font = fghStrokeByID( fontID );
-    freeglut_return_if_fail( character >= 0 );
-    freeglut_return_if_fail( character < font->Quantity );
-    freeglut_return_if_fail( font );
-
-    schar = font->Characters[ character ];
-    freeglut_return_if_fail( schar );
-    strip = schar->Strips;
-
-    for( i = 0; i < schar->Number; i++, strip++ )
-    {
-        glBegin( GL_LINE_STRIP );
-        for( j = 0; j < strip->Number; j++ )
-            glVertex2f( strip->Vertices[ j ].X, strip->Vertices[ j ].Y );
-        glEnd( );
-                               glBegin( GL_POINTS );
-        for( j = 0; j < strip->Number; j++ )
-            glVertex2f( strip->Vertices[ j ].X, strip->Vertices[ j ].Y );
-                               glEnd( );
-    }
-    glTranslatef( schar->Right, 0.0, 0.0 );
-}
-
-void FGAPIENTRY glutStrokeString( void* fontID, const unsigned char *string )
-{
-    unsigned char c;
-    int i, j;
-    float length = 0.0;
-    SFG_StrokeFont* font;
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutStrokeString" );
-    font = fghStrokeByID( fontID );
-    freeglut_return_if_fail( font );
-    if ( !string || ! *string )
-        return;
-
-    /*
-     * Step through the string, drawing each character.
-     * A newline will simply translate the next character's insertion
-     * point back to the start of the line and down one line.
-     */
-    while( ( c = *string++) )
-        if( c < font->Quantity )
-        {
-            if( c == '\n' )
-            {
-                glTranslatef ( -length, -( float )( font->Height ), 0.0 );
-                length = 0.0;
-            }
-            else  /* Not an EOL, draw the bitmap character */
-            {
-                const SFG_StrokeChar *schar = font->Characters[ c ];
-                if( schar )
-                {
-                    const SFG_StrokeStrip *strip = schar->Strips;
-
-                    for( i = 0; i < schar->Number; i++, strip++ )
-                    {
-                        glBegin( GL_LINE_STRIP );
-                        for( j = 0; j < strip->Number; j++ )
-                            glVertex2f( strip->Vertices[ j ].X,
-                                        strip->Vertices[ j ].Y);
-
-                        glEnd( );
-                    }
-
-                    length += schar->Right;
-                    glTranslatef( schar->Right, 0.0, 0.0 );
-                }
-            }
-        }
-}
-
-/*
- * Return the width in pixels of a stroke character
- */
-int FGAPIENTRY glutStrokeWidth( void* fontID, int character )
-{
-    const SFG_StrokeChar *schar;
-    SFG_StrokeFont* font;
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutStrokeWidth" );
-    font = fghStrokeByID( fontID );
-    freeglut_return_val_if_fail( ( character >= 0 ) &&
-                                 ( character < font->Quantity ),
-                                 0
-    );
-    freeglut_return_val_if_fail( font, 0 );
-    schar = font->Characters[ character ];
-    freeglut_return_val_if_fail( schar, 0 );
-
-    return ( int )( schar->Right + 0.5 );
-}
-
-/*
- * Return the width of a string drawn using a stroke font
- */
-int FGAPIENTRY glutStrokeLength( void* fontID, const unsigned char* string )
-{
-    unsigned char c;
-    float length = 0.0;
-    float this_line_length = 0.0;
-    SFG_StrokeFont* font;
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutStrokeLength" );
-    font = fghStrokeByID( fontID );
-    freeglut_return_val_if_fail( font, 0 );
-    if ( !string || ! *string )
-        return 0;
-
-    while( ( c = *string++) )
-        if( c < font->Quantity )
-        {
-            if( c == '\n' ) /* EOL; reset the length of this line */
-            {
-                if( length < this_line_length )
-                    length = this_line_length;
-                this_line_length = 0.0;
-            }
-            else  /* Not an EOL, increment the length of this line */
-            {
-                const SFG_StrokeChar *schar = font->Characters[ c ];
-                if( schar )
-                    this_line_length += schar->Right;
-            }
-        }
-    if( length < this_line_length )
-        length = this_line_length;
-    return( int )( length + 0.5 );
-}
-
-/*
- * Returns the height of a stroke font
- */
-GLfloat FGAPIENTRY glutStrokeHeight( void* fontID )
-{
-    SFG_StrokeFont* font;
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutStrokeHeight" );
-    font = fghStrokeByID( fontID );
-    freeglut_return_val_if_fail( font, 0.0 );
-    return font->Height;
-}
-
-/*** END OF FILE ***/
diff --git a/src/freeglut_font_data.c b/src/freeglut_font_data.c
deleted file mode 100644 (file)
index 35dfc79..0000000
+++ /dev/null
@@ -1,2020 +0,0 @@
-/*
-    \file  og_font_data.c
-    \brief Bitmapped font data for OpenGLUT fonts.
-*/
-
-/*
- * This file has been automatically generated by the 
- * genfonts utility.
- *
- * The legal status of this file is a bit vague.  The font glyphs
- * themselves come from XFree86 v4.3.0 (as of this writing), and as
- * part of the X server may be subject to the XFree86 copyrights.
- * The original freeglut fonts were extracted by a utility written
- * by Pawel W. Olszta (see below) and the generated fonts contained
- * his copyright exclusively.  Steve Baker asserts that Pawel
- * assigned intellectual property rights to Steve Baker.  Steve
- * Baker also asserts that fonts cannot be copyrighted.  He has
- * neither stripped the copyright from the freeglut fonts nor
- * formally retitled anything in his name.  Since that time, the
- * OpenGLUT project has branched from freeglut, and has made
- * necessary modifications to Pawel's ``genfonts'' utility.
- * To that extent, OpenGLUT may have some title to this file.
- * What is fairly clear is that the font data is licensed under
- * the XFree86 license (which is variously termed ``XFree'' and
- * ``MIT'' by the freeglut project).  It is believed that all
- * title holders wish this file to be as useful as possible, and
- * that either the ``XFree'' or ``MIT'' license works.
- *
- * Portions copyright (c) 2004, the OpenGLUT project contributors.
- * OpenGLUT branched from freeglut in February, 2004.
- *
- * Copyright (c) 1999-2000 by Pawel W. Olszta
- * Written by Pawel W. Olszta, <olszta@sourceforge.net>
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Sotware.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-#include <GL/freeglut.h>
-#include "freeglut_internal.h"
-
-/*
- * The following bitmapped fonts are defined in this file:
- * 
- * 1. fgFontFixed8x13
- *       -misc-fixed-medium-r-normal--13-120-75-75-C-80-iso8859-1
- * 2. fgFontFixed9x15
- *       -misc-fixed-medium-r-normal--15-140-75-75-C-90-iso8859-1
- * 3. fgFontHelvetica10
- *       -adobe-helvetica-medium-r-normal--10-100-75-75-p-56-iso8859-1
- * 4. fgFontHelvetica12
- *       -adobe-helvetica-medium-r-normal--12-120-75-75-p-67-iso8859-1
- * 5. fgFontHelvetica18
- *       -adobe-helvetica-medium-r-normal--18-180-75-75-p-98-iso8859-1
- * 6. fgFontTimesRoman10
- *       -adobe-times-medium-r-normal--10-100-75-75-p-54-iso8859-1
- * 7. fgFontTimesRoman24
- *       -adobe-times-medium-r-normal--24-240-75-75-p-124-iso8859-1
- */
-
-static const GLubyte Fixed8x13_Character_000[] = {  8,  0,  0,  0,170,  0,130,  0,130,  0,130,  0,170,  0,  0};
-static const GLubyte Fixed8x13_Character_001[] = {  8,  0,  0,  0,  0, 16, 56,124,254,124, 56, 16,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_002[] = {  8,  0,170, 85,170, 85,170, 85,170, 85,170, 85,170, 85,170};
-static const GLubyte Fixed8x13_Character_003[] = {  8,  0,  0,  0,  4,  4,  4,  4,174,160,224,160,160,  0,  0};
-static const GLubyte Fixed8x13_Character_004[] = {  8,  0,  0,  0,  8,  8, 12,  8,142,128,192,128,224,  0,  0};
-static const GLubyte Fixed8x13_Character_005[] = {  8,  0,  0,  0, 10, 10, 12, 10,108,128,128,128, 96,  0,  0};
-static const GLubyte Fixed8x13_Character_006[] = {  8,  0,  0,  0,  8,  8, 12,  8,238,128,128,128,128,  0,  0};
-static const GLubyte Fixed8x13_Character_007[] = {  8,  0,  0,  0,  0,  0,  0,  0,  0, 24, 36, 36, 24,  0,  0};
-static const GLubyte Fixed8x13_Character_008[] = {  8,  0,  0,  0,  0,124,  0, 16, 16,124, 16, 16,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_009[] = {  8,  0,  0,  0, 14,  8,  8,  8,168,160,160,160,192,  0,  0};
-static const GLubyte Fixed8x13_Character_010[] = {  8,  0,  0,  0,  4,  4,  4,  4, 46, 80, 80,136,136,  0,  0};
-static const GLubyte Fixed8x13_Character_011[] = {  8,  0,  0,  0,  0,  0,  0,  0,240, 16, 16, 16, 16, 16, 16};
-static const GLubyte Fixed8x13_Character_012[] = {  8,  0, 16, 16, 16, 16, 16, 16,240,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_013[] = {  8,  0, 16, 16, 16, 16, 16, 16, 31,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_014[] = {  8,  0,  0,  0,  0,  0,  0,  0, 31, 16, 16, 16, 16, 16, 16};
-static const GLubyte Fixed8x13_Character_015[] = {  8,  0, 16, 16, 16, 16, 16, 16,255, 16, 16, 16, 16, 16, 16};
-static const GLubyte Fixed8x13_Character_016[] = {  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,255};
-static const GLubyte Fixed8x13_Character_017[] = {  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,255,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_018[] = {  8,  0,  0,  0,  0,  0,  0,  0,255,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_019[] = {  8,  0,  0,  0,  0,255,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_020[] = {  8,  0,255,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_021[] = {  8,  0, 16, 16, 16, 16, 16, 16, 31, 16, 16, 16, 16, 16, 16};
-static const GLubyte Fixed8x13_Character_022[] = {  8,  0, 16, 16, 16, 16, 16, 16,240, 16, 16, 16, 16, 16, 16};
-static const GLubyte Fixed8x13_Character_023[] = {  8,  0,  0,  0,  0,  0,  0,  0,255, 16, 16, 16, 16, 16, 16};
-static const GLubyte Fixed8x13_Character_024[] = {  8,  0, 16, 16, 16, 16, 16, 16,255,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_025[] = {  8,  0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16};
-static const GLubyte Fixed8x13_Character_026[] = {  8,  0,  0,  0,254,  0, 14, 48,192, 48, 14,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_027[] = {  8,  0,  0,  0,254,  0,224, 24,  6, 24,224,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_028[] = {  8,  0,  0,  0, 68, 68, 68, 68, 68,254,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_029[] = {  8,  0,  0,  0, 32, 32,126, 16,  8,126,  4,  4,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_030[] = {  8,  0,  0,  0,220, 98, 32, 32, 32,112, 32, 34, 28,  0,  0};
-static const GLubyte Fixed8x13_Character_031[] = {  8,  0,  0,  0,  0,  0,  0,  0, 24,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_032[] = {  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_033[] = {  8,  0,  0,  0, 16,  0, 16, 16, 16, 16, 16, 16, 16,  0,  0};
-static const GLubyte Fixed8x13_Character_034[] = {  8,  0,  0,  0,  0,  0,  0,  0,  0,  0, 36, 36, 36,  0,  0};
-static const GLubyte Fixed8x13_Character_035[] = {  8,  0,  0,  0,  0, 36, 36,126, 36,126, 36, 36,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_036[] = {  8,  0,  0,  0, 16,120, 20, 20, 56, 80, 80, 60, 16,  0,  0};
-static const GLubyte Fixed8x13_Character_037[] = {  8,  0,  0,  0, 68, 42, 36, 16,  8,  8, 36, 82, 34,  0,  0};
-static const GLubyte Fixed8x13_Character_038[] = {  8,  0,  0,  0, 58, 68, 74, 48, 72, 72, 48,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_039[] = {  8,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64, 48, 56,  0,  0};
-static const GLubyte Fixed8x13_Character_040[] = {  8,  0,  0,  0,  4,  8,  8, 16, 16, 16,  8,  8,  4,  0,  0};
-static const GLubyte Fixed8x13_Character_041[] = {  8,  0,  0,  0, 32, 16, 16,  8,  8,  8, 16, 16, 32,  0,  0};
-static const GLubyte Fixed8x13_Character_042[] = {  8,  0,  0,  0,  0,  0, 36, 24,126, 24, 36,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_043[] = {  8,  0,  0,  0,  0,  0, 16, 16,124, 16, 16,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_044[] = {  8,  0,  0, 64, 48, 56,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_045[] = {  8,  0,  0,  0,  0,  0,  0,  0,126,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_046[] = {  8,  0,  0, 16, 56, 16,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_047[] = {  8,  0,  0,  0,128,128, 64, 32, 16,  8,  4,  2,  2,  0,  0};
-static const GLubyte Fixed8x13_Character_048[] = {  8,  0,  0,  0, 24, 36, 66, 66, 66, 66, 66, 36, 24,  0,  0};
-static const GLubyte Fixed8x13_Character_049[] = {  8,  0,  0,  0,124, 16, 16, 16, 16, 16, 80, 48, 16,  0,  0};
-static const GLubyte Fixed8x13_Character_050[] = {  8,  0,  0,  0,126, 64, 32, 24,  4,  2, 66, 66, 60,  0,  0};
-static const GLubyte Fixed8x13_Character_051[] = {  8,  0,  0,  0, 60, 66,  2,  2, 28,  8,  4,  2,126,  0,  0};
-static const GLubyte Fixed8x13_Character_052[] = {  8,  0,  0,  0,  4,  4,126, 68, 68, 36, 20, 12,  4,  0,  0};
-static const GLubyte Fixed8x13_Character_053[] = {  8,  0,  0,  0, 60, 66,  2,  2, 98, 92, 64, 64,126,  0,  0};
-static const GLubyte Fixed8x13_Character_054[] = {  8,  0,  0,  0, 60, 66, 66, 98, 92, 64, 64, 32, 28,  0,  0};
-static const GLubyte Fixed8x13_Character_055[] = {  8,  0,  0,  0, 32, 32, 16, 16,  8,  8,  4,  2,126,  0,  0};
-static const GLubyte Fixed8x13_Character_056[] = {  8,  0,  0,  0, 60, 66, 66, 66, 60, 66, 66, 66, 60,  0,  0};
-static const GLubyte Fixed8x13_Character_057[] = {  8,  0,  0,  0, 56,  4,  2,  2, 58, 70, 66, 66, 60,  0,  0};
-static const GLubyte Fixed8x13_Character_058[] = {  8,  0,  0, 16, 56, 16,  0,  0, 16, 56, 16,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_059[] = {  8,  0,  0, 64, 48, 56,  0,  0, 16, 56, 16,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_060[] = {  8,  0,  0,  0,  2,  4,  8, 16, 32, 16,  8,  4,  2,  0,  0};
-static const GLubyte Fixed8x13_Character_061[] = {  8,  0,  0,  0,  0,  0,126,  0,  0,126,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_062[] = {  8,  0,  0,  0, 64, 32, 16,  8,  4,  8, 16, 32, 64,  0,  0};
-static const GLubyte Fixed8x13_Character_063[] = {  8,  0,  0,  0,  8,  0,  8,  8,  4,  2, 66, 66, 60,  0,  0};
-static const GLubyte Fixed8x13_Character_064[] = {  8,  0,  0,  0, 60, 64, 74, 86, 82, 78, 66, 66, 60,  0,  0};
-static const GLubyte Fixed8x13_Character_065[] = {  8,  0,  0,  0, 66, 66, 66,126, 66, 66, 66, 36, 24,  0,  0};
-static const GLubyte Fixed8x13_Character_066[] = {  8,  0,  0,  0,252, 66, 66, 66,124, 66, 66, 66,252,  0,  0};
-static const GLubyte Fixed8x13_Character_067[] = {  8,  0,  0,  0, 60, 66, 64, 64, 64, 64, 64, 66, 60,  0,  0};
-static const GLubyte Fixed8x13_Character_068[] = {  8,  0,  0,  0,252, 66, 66, 66, 66, 66, 66, 66,252,  0,  0};
-static const GLubyte Fixed8x13_Character_069[] = {  8,  0,  0,  0,126, 64, 64, 64,120, 64, 64, 64,126,  0,  0};
-static const GLubyte Fixed8x13_Character_070[] = {  8,  0,  0,  0, 64, 64, 64, 64,120, 64, 64, 64,126,  0,  0};
-static const GLubyte Fixed8x13_Character_071[] = {  8,  0,  0,  0, 58, 70, 66, 78, 64, 64, 64, 66, 60,  0,  0};
-static const GLubyte Fixed8x13_Character_072[] = {  8,  0,  0,  0, 66, 66, 66, 66,126, 66, 66, 66, 66,  0,  0};
-static const GLubyte Fixed8x13_Character_073[] = {  8,  0,  0,  0,124, 16, 16, 16, 16, 16, 16, 16,124,  0,  0};
-static const GLubyte Fixed8x13_Character_074[] = {  8,  0,  0,  0, 56, 68,  4,  4,  4,  4,  4,  4, 31,  0,  0};
-static const GLubyte Fixed8x13_Character_075[] = {  8,  0,  0,  0, 66, 68, 72, 80, 96, 80, 72, 68, 66,  0,  0};
-static const GLubyte Fixed8x13_Character_076[] = {  8,  0,  0,  0,126, 64, 64, 64, 64, 64, 64, 64, 64,  0,  0};
-static const GLubyte Fixed8x13_Character_077[] = {  8,  0,  0,  0,130,130,130,146,146,170,198,130,130,  0,  0};
-static const GLubyte Fixed8x13_Character_078[] = {  8,  0,  0,  0, 66, 66, 66, 70, 74, 82, 98, 66, 66,  0,  0};
-static const GLubyte Fixed8x13_Character_079[] = {  8,  0,  0,  0, 60, 66, 66, 66, 66, 66, 66, 66, 60,  0,  0};
-static const GLubyte Fixed8x13_Character_080[] = {  8,  0,  0,  0, 64, 64, 64, 64,124, 66, 66, 66,124,  0,  0};
-static const GLubyte Fixed8x13_Character_081[] = {  8,  0,  0,  2, 60, 74, 82, 66, 66, 66, 66, 66, 60,  0,  0};
-static const GLubyte Fixed8x13_Character_082[] = {  8,  0,  0,  0, 66, 68, 72, 80,124, 66, 66, 66,124,  0,  0};
-static const GLubyte Fixed8x13_Character_083[] = {  8,  0,  0,  0, 60, 66,  2,  2, 60, 64, 64, 66, 60,  0,  0};
-static const GLubyte Fixed8x13_Character_084[] = {  8,  0,  0,  0, 16, 16, 16, 16, 16, 16, 16, 16,254,  0,  0};
-static const GLubyte Fixed8x13_Character_085[] = {  8,  0,  0,  0, 60, 66, 66, 66, 66, 66, 66, 66, 66,  0,  0};
-static const GLubyte Fixed8x13_Character_086[] = {  8,  0,  0,  0, 16, 40, 40, 40, 68, 68, 68,130,130,  0,  0};
-static const GLubyte Fixed8x13_Character_087[] = {  8,  0,  0,  0, 68,170,146,146,146,130,130,130,130,  0,  0};
-static const GLubyte Fixed8x13_Character_088[] = {  8,  0,  0,  0,130,130, 68, 40, 16, 40, 68,130,130,  0,  0};
-static const GLubyte Fixed8x13_Character_089[] = {  8,  0,  0,  0, 16, 16, 16, 16, 16, 40, 68,130,130,  0,  0};
-static const GLubyte Fixed8x13_Character_090[] = {  8,  0,  0,  0,126, 64, 64, 32, 16,  8,  4,  2,126,  0,  0};
-static const GLubyte Fixed8x13_Character_091[] = {  8,  0,  0,  0, 60, 32, 32, 32, 32, 32, 32, 32, 60,  0,  0};
-static const GLubyte Fixed8x13_Character_092[] = {  8,  0,  0,  0,  2,  2,  4,  8, 16, 32, 64,128,128,  0,  0};
-static const GLubyte Fixed8x13_Character_093[] = {  8,  0,  0,  0,120,  8,  8,  8,  8,  8,  8,  8,120,  0,  0};
-static const GLubyte Fixed8x13_Character_094[] = {  8,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 40, 16,  0,  0};
-static const GLubyte Fixed8x13_Character_095[] = {  8,  0,  0,254,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_096[] = {  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4, 24, 56,  0,  0};
-static const GLubyte Fixed8x13_Character_097[] = {  8,  0,  0,  0, 58, 70, 66, 62,  2, 60,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_098[] = {  8,  0,  0,  0, 92, 98, 66, 66, 98, 92, 64, 64, 64,  0,  0};
-static const GLubyte Fixed8x13_Character_099[] = {  8,  0,  0,  0, 60, 66, 64, 64, 66, 60,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_100[] = {  8,  0,  0,  0, 58, 70, 66, 66, 70, 58,  2,  2,  2,  0,  0};
-static const GLubyte Fixed8x13_Character_101[] = {  8,  0,  0,  0, 60, 66, 64,126, 66, 60,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_102[] = {  8,  0,  0,  0, 32, 32, 32, 32,124, 32, 32, 34, 28,  0,  0};
-static const GLubyte Fixed8x13_Character_103[] = {  8,  0, 60, 66, 60, 64, 56, 68, 68, 58,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_104[] = {  8,  0,  0,  0, 66, 66, 66, 66, 98, 92, 64, 64, 64,  0,  0};
-static const GLubyte Fixed8x13_Character_105[] = {  8,  0,  0,  0,124, 16, 16, 16, 16, 48,  0, 16,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_106[] = {  8,  0, 56, 68, 68,  4,  4,  4,  4, 12,  0,  4,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_107[] = {  8,  0,  0,  0, 66, 68, 72,112, 72, 68, 64, 64, 64,  0,  0};
-static const GLubyte Fixed8x13_Character_108[] = {  8,  0,  0,  0,124, 16, 16, 16, 16, 16, 16, 16, 48,  0,  0};
-static const GLubyte Fixed8x13_Character_109[] = {  8,  0,  0,  0,130,146,146,146,146,236,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_110[] = {  8,  0,  0,  0, 66, 66, 66, 66, 98, 92,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_111[] = {  8,  0,  0,  0, 60, 66, 66, 66, 66, 60,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_112[] = {  8,  0, 64, 64, 64, 92, 98, 66, 98, 92,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_113[] = {  8,  0,  2,  2,  2, 58, 70, 66, 70, 58,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_114[] = {  8,  0,  0,  0, 32, 32, 32, 32, 34, 92,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_115[] = {  8,  0,  0,  0, 60, 66, 12, 48, 66, 60,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_116[] = {  8,  0,  0,  0, 28, 34, 32, 32, 32,124, 32, 32,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_117[] = {  8,  0,  0,  0, 58, 68, 68, 68, 68, 68,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_118[] = {  8,  0,  0,  0, 16, 40, 40, 68, 68, 68,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_119[] = {  8,  0,  0,  0, 68,170,146,146,130,130,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_120[] = {  8,  0,  0,  0, 66, 36, 24, 24, 36, 66,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_121[] = {  8,  0, 60, 66,  2, 58, 70, 66, 66, 66,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_122[] = {  8,  0,  0,  0,126, 32, 16,  8,  4,126,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_123[] = {  8,  0,  0,  0, 14, 16, 16,  8, 48,  8, 16, 16, 14,  0,  0};
-static const GLubyte Fixed8x13_Character_124[] = {  8,  0,  0,  0, 16, 16, 16, 16, 16, 16, 16, 16, 16,  0,  0};
-static const GLubyte Fixed8x13_Character_125[] = {  8,  0,  0,  0,112,  8,  8, 16, 12, 16,  8,  8,112,  0,  0};
-static const GLubyte Fixed8x13_Character_126[] = {  8,  0,  0,  0,  0,  0,  0,  0,  0,  0, 72, 84, 36,  0,  0};
-static const GLubyte Fixed8x13_Character_127[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_128[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_129[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_130[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_131[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_132[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_133[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_134[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_135[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_136[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_137[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_138[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_139[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_140[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_141[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_142[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_143[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_144[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_145[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_146[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_147[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_148[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_149[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_150[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_151[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_152[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_153[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_154[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_155[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_156[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_157[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_158[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_159[] = {  9,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_160[] = {  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_161[] = {  8,  0,  0,  0, 16, 16, 16, 16, 16, 16, 16,  0, 16,  0,  0};
-static const GLubyte Fixed8x13_Character_162[] = {  8,  0,  0,  0,  0, 16, 56, 84, 80, 80, 84, 56, 16,  0,  0};
-static const GLubyte Fixed8x13_Character_163[] = {  8,  0,  0,  0,220, 98, 32, 32, 32,112, 32, 34, 28,  0,  0};
-static const GLubyte Fixed8x13_Character_164[] = {  8,  0,  0,  0,  0, 66, 60, 36, 36, 60, 66,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_165[] = {  8,  0,  0,  0, 16, 16,124, 16,124, 40, 68,130,130,  0,  0};
-static const GLubyte Fixed8x13_Character_166[] = {  8,  0,  0,  0, 16, 16, 16, 16,  0, 16, 16, 16, 16,  0,  0};
-static const GLubyte Fixed8x13_Character_167[] = {  8,  0,  0,  0, 24, 36,  4, 24, 36, 36, 24, 32, 36, 24,  0};
-static const GLubyte Fixed8x13_Character_168[] = {  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,108,  0,  0};
-static const GLubyte Fixed8x13_Character_169[] = {  8,  0,  0,  0,  0, 56, 68,146,170,162,170,146, 68, 56,  0};
-static const GLubyte Fixed8x13_Character_170[] = {  8,  0,  0,  0,  0,  0,124,  0, 60, 68, 60,  4, 56,  0,  0};
-static const GLubyte Fixed8x13_Character_171[] = {  8,  0,  0,  0,  0, 18, 36, 72,144, 72, 36, 18,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_172[] = {  8,  0,  0,  0,  0,  2,  2,  2,126,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_173[] = {  8,  0,  0,  0,  0,  0,  0,  0, 60,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_174[] = {  8,  0,  0,  0,  0, 56, 68,170,178,170,170,146, 68, 56,  0};
-static const GLubyte Fixed8x13_Character_175[] = {  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,126,  0,  0};
-static const GLubyte Fixed8x13_Character_176[] = {  8,  0,  0,  0,  0,  0,  0,  0,  0, 24, 36, 36, 24,  0,  0};
-static const GLubyte Fixed8x13_Character_177[] = {  8,  0,  0,  0,  0,124,  0, 16, 16,124, 16, 16,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_178[] = {  8,  0,  0,  0,  0,  0,  0,  0,120, 64, 48,  8, 72, 48,  0};
-static const GLubyte Fixed8x13_Character_179[] = {  8,  0,  0,  0,  0,  0,  0,  0, 48, 72,  8, 16, 72, 48,  0};
-static const GLubyte Fixed8x13_Character_180[] = {  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  8,  0};
-static const GLubyte Fixed8x13_Character_181[] = {  8,  0,  0, 64, 90,102, 66, 66, 66, 66,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_182[] = {  8,  0,  0,  0, 20, 20, 20, 20, 52,116,116,116, 62,  0,  0};
-static const GLubyte Fixed8x13_Character_183[] = {  8,  0,  0,  0,  0,  0,  0,  0, 24,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_184[] = {  8,  0, 24,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_185[] = {  8,  0,  0,  0,  0,  0,  0,  0,112, 32, 32, 32, 96, 32,  0};
-static const GLubyte Fixed8x13_Character_186[] = {  8,  0,  0,  0,  0,  0,  0,120,  0, 48, 72, 72, 48,  0,  0};
-static const GLubyte Fixed8x13_Character_187[] = {  8,  0,  0,  0,  0,144, 72, 36, 18, 36, 72,144,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_188[] = {  8,  0,  0,  0,  6, 26, 18, 10,230, 66, 64, 64,192, 64,  0};
-static const GLubyte Fixed8x13_Character_189[] = {  8,  0,  0,  0, 30, 16, 12,  2,242, 76, 64, 64,192, 64,  0};
-static const GLubyte Fixed8x13_Character_190[] = {  8,  0,  0,  0,  6, 26, 18, 10,102,146, 16, 32,144, 96,  0};
-static const GLubyte Fixed8x13_Character_191[] = {  8,  0,  0,  0, 60, 66, 66, 64, 32, 16, 16,  0, 16,  0,  0};
-static const GLubyte Fixed8x13_Character_192[] = {  8,  0,  0,  0, 66, 66,126, 66, 66, 36, 24,  0,  8, 16,  0};
-static const GLubyte Fixed8x13_Character_193[] = {  8,  0,  0,  0, 66, 66,126, 66, 66, 36, 24,  0, 16,  8,  0};
-static const GLubyte Fixed8x13_Character_194[] = {  8,  0,  0,  0, 66, 66,126, 66, 66, 36, 24,  0, 36, 24,  0};
-static const GLubyte Fixed8x13_Character_195[] = {  8,  0,  0,  0, 66, 66,126, 66, 66, 36, 24,  0, 76, 50,  0};
-static const GLubyte Fixed8x13_Character_196[] = {  8,  0,  0,  0, 66, 66,126, 66, 66, 36, 24,  0, 36, 36,  0};
-static const GLubyte Fixed8x13_Character_197[] = {  8,  0,  0,  0, 66, 66,126, 66, 66, 36, 24, 24, 36, 24,  0};
-static const GLubyte Fixed8x13_Character_198[] = {  8,  0,  0,  0,158,144,144,240,156,144,144,144,110,  0,  0};
-static const GLubyte Fixed8x13_Character_199[] = {  8,  0, 16,  8, 60, 66, 64, 64, 64, 64, 64, 66, 60,  0,  0};
-static const GLubyte Fixed8x13_Character_200[] = {  8,  0,  0,  0,126, 64, 64,120, 64, 64,126,  0,  8, 16,  0};
-static const GLubyte Fixed8x13_Character_201[] = {  8,  0,  0,  0,126, 64, 64,120, 64, 64,126,  0, 16,  8,  0};
-static const GLubyte Fixed8x13_Character_202[] = {  8,  0,  0,  0,126, 64, 64,120, 64, 64,126,  0, 36, 24,  0};
-static const GLubyte Fixed8x13_Character_203[] = {  8,  0,  0,  0,126, 64, 64,120, 64, 64,126,  0, 36, 36,  0};
-static const GLubyte Fixed8x13_Character_204[] = {  8,  0,  0,  0,124, 16, 16, 16, 16, 16,124,  0, 16, 32,  0};
-static const GLubyte Fixed8x13_Character_205[] = {  8,  0,  0,  0,124, 16, 16, 16, 16, 16,124,  0, 16,  8,  0};
-static const GLubyte Fixed8x13_Character_206[] = {  8,  0,  0,  0,124, 16, 16, 16, 16, 16,124,  0, 36, 24,  0};
-static const GLubyte Fixed8x13_Character_207[] = {  8,  0,  0,  0,124, 16, 16, 16, 16, 16,124,  0, 40, 40,  0};
-static const GLubyte Fixed8x13_Character_208[] = {  8,  0,  0,  0,120, 68, 66, 66,226, 66, 66, 68,120,  0,  0};
-static const GLubyte Fixed8x13_Character_209[] = {  8,  0,  0,  0,130,134,138,146,162,194,130,  0,152,100,  0};
-static const GLubyte Fixed8x13_Character_210[] = {  8,  0,  0,  0,124,130,130,130,130,130,124,  0, 16, 32,  0};
-static const GLubyte Fixed8x13_Character_211[] = {  8,  0,  0,  0,124,130,130,130,130,130,124,  0, 16,  8,  0};
-static const GLubyte Fixed8x13_Character_212[] = {  8,  0,  0,  0,124,130,130,130,130,130,124,  0, 36, 24,  0};
-static const GLubyte Fixed8x13_Character_213[] = {  8,  0,  0,  0,124,130,130,130,130,130,124,  0,152,100,  0};
-static const GLubyte Fixed8x13_Character_214[] = {  8,  0,  0,  0,124,130,130,130,130,130,124,  0, 40, 40,  0};
-static const GLubyte Fixed8x13_Character_215[] = {  8,  0,  0,  0,  0, 66, 36, 24, 24, 36, 66,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_216[] = {  8,  0,  0, 64, 60, 98, 82, 82, 82, 74, 74, 70, 60,  2,  0};
-static const GLubyte Fixed8x13_Character_217[] = {  8,  0,  0,  0, 60, 66, 66, 66, 66, 66, 66,  0,  8, 16,  0};
-static const GLubyte Fixed8x13_Character_218[] = {  8,  0,  0,  0, 60, 66, 66, 66, 66, 66, 66,  0, 16,  8,  0};
-static const GLubyte Fixed8x13_Character_219[] = {  8,  0,  0,  0, 60, 66, 66, 66, 66, 66, 66,  0, 36, 24,  0};
-static const GLubyte Fixed8x13_Character_220[] = {  8,  0,  0,  0, 60, 66, 66, 66, 66, 66, 66,  0, 36, 36,  0};
-static const GLubyte Fixed8x13_Character_221[] = {  8,  0,  0,  0, 16, 16, 16, 16, 40, 68, 68,  0, 16,  8,  0};
-static const GLubyte Fixed8x13_Character_222[] = {  8,  0,  0,  0, 64, 64, 64,124, 66, 66, 66,124, 64,  0,  0};
-static const GLubyte Fixed8x13_Character_223[] = {  8,  0,  0,  0, 92, 66, 66, 76, 80, 72, 68, 68, 56,  0,  0};
-static const GLubyte Fixed8x13_Character_224[] = {  8,  0,  0,  0, 58, 70, 66, 62,  2, 60,  0,  0,  8, 16,  0};
-static const GLubyte Fixed8x13_Character_225[] = {  8,  0,  0,  0, 58, 70, 66, 62,  2, 60,  0,  0,  8,  4,  0};
-static const GLubyte Fixed8x13_Character_226[] = {  8,  0,  0,  0, 58, 70, 66, 62,  2, 60,  0,  0, 36, 24,  0};
-static const GLubyte Fixed8x13_Character_227[] = {  8,  0,  0,  0, 58, 70, 66, 62,  2, 60,  0,  0, 76, 50,  0};
-static const GLubyte Fixed8x13_Character_228[] = {  8,  0,  0,  0, 58, 70, 66, 62,  2, 60,  0,  0, 36, 36,  0};
-static const GLubyte Fixed8x13_Character_229[] = {  8,  0,  0,  0, 58, 70, 66, 62,  2, 60,  0, 24, 36, 24,  0};
-static const GLubyte Fixed8x13_Character_230[] = {  8,  0,  0,  0,108,146,144,124, 18,108,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_231[] = {  8,  0, 16,  8, 60, 66, 64, 64, 66, 60,  0,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_232[] = {  8,  0,  0,  0, 60, 66, 64,126, 66, 60,  0,  0,  8, 16,  0};
-static const GLubyte Fixed8x13_Character_233[] = {  8,  0,  0,  0, 60, 66, 64,126, 66, 60,  0,  0, 16,  8,  0};
-static const GLubyte Fixed8x13_Character_234[] = {  8,  0,  0,  0, 60, 66, 64,126, 66, 60,  0,  0, 36, 24,  0};
-static const GLubyte Fixed8x13_Character_235[] = {  8,  0,  0,  0, 60, 66, 64,126, 66, 60,  0,  0, 36, 36,  0};
-static const GLubyte Fixed8x13_Character_236[] = {  8,  0,  0,  0,124, 16, 16, 16, 16, 48,  0,  0, 16, 32,  0};
-static const GLubyte Fixed8x13_Character_237[] = {  8,  0,  0,  0,124, 16, 16, 16, 16, 48,  0,  0, 32, 16,  0};
-static const GLubyte Fixed8x13_Character_238[] = {  8,  0,  0,  0,124, 16, 16, 16, 16, 48,  0,  0, 72, 48,  0};
-static const GLubyte Fixed8x13_Character_239[] = {  8,  0,  0,  0,124, 16, 16, 16, 16, 48,  0,  0, 40, 40,  0};
-static const GLubyte Fixed8x13_Character_240[] = {  8,  0,  0,  0, 60, 66, 66, 66, 66, 60,  4, 40, 24, 36,  0};
-static const GLubyte Fixed8x13_Character_241[] = {  8,  0,  0,  0, 66, 66, 66, 66, 98, 92,  0,  0, 76, 50,  0};
-static const GLubyte Fixed8x13_Character_242[] = {  8,  0,  0,  0, 60, 66, 66, 66, 66, 60,  0,  0, 16, 32,  0};
-static const GLubyte Fixed8x13_Character_243[] = {  8,  0,  0,  0, 60, 66, 66, 66, 66, 60,  0,  0, 16,  8,  0};
-static const GLubyte Fixed8x13_Character_244[] = {  8,  0,  0,  0, 60, 66, 66, 66, 66, 60,  0,  0, 36, 24,  0};
-static const GLubyte Fixed8x13_Character_245[] = {  8,  0,  0,  0, 60, 66, 66, 66, 66, 60,  0,  0, 76, 50,  0};
-static const GLubyte Fixed8x13_Character_246[] = {  8,  0,  0,  0, 60, 66, 66, 66, 66, 60,  0,  0, 36, 36,  0};
-static const GLubyte Fixed8x13_Character_247[] = {  8,  0,  0,  0,  0, 16, 16,  0,124,  0, 16, 16,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_248[] = {  8,  0,  0, 64, 60, 98, 82, 74, 70, 60,  2,  0,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_249[] = {  8,  0,  0,  0, 58, 68, 68, 68, 68, 68,  0,  0, 16, 32,  0};
-static const GLubyte Fixed8x13_Character_250[] = {  8,  0,  0,  0, 58, 68, 68, 68, 68, 68,  0,  0, 16,  8,  0};
-static const GLubyte Fixed8x13_Character_251[] = {  8,  0,  0,  0, 58, 68, 68, 68, 68, 68,  0,  0, 36, 24,  0};
-static const GLubyte Fixed8x13_Character_252[] = {  8,  0,  0,  0, 58, 68, 68, 68, 68, 68,  0,  0, 40, 40,  0};
-static const GLubyte Fixed8x13_Character_253[] = {  8,  0, 60, 66,  2, 58, 70, 66, 66, 66,  0,  0, 16,  8,  0};
-static const GLubyte Fixed8x13_Character_254[] = {  8,  0, 64, 64, 92, 98, 66, 66, 98, 92, 64, 64,  0,  0,  0};
-static const GLubyte Fixed8x13_Character_255[] = {  8,  0, 60, 66,  2, 58, 70, 66, 66, 66,  0,  0, 36, 36,  0};
-
-/* The font characters mapping: */
-static const GLubyte* Fixed8x13_Character_Map[] = {Fixed8x13_Character_000,Fixed8x13_Character_001,Fixed8x13_Character_002,Fixed8x13_Character_003,Fixed8x13_Character_004,Fixed8x13_Character_005,Fixed8x13_Character_006,Fixed8x13_Character_007,Fixed8x13_Character_008,Fixed8x13_Character_009,Fixed8x13_Character_010,Fixed8x13_Character_011,Fixed8x13_Character_012,Fixed8x13_Character_013,Fixed8x13_Character_014,Fixed8x13_Character_015,
-                                                   Fixed8x13_Character_016,Fixed8x13_Character_017,Fixed8x13_Character_018,Fixed8x13_Character_019,Fixed8x13_Character_020,Fixed8x13_Character_021,Fixed8x13_Character_022,Fixed8x13_Character_023,Fixed8x13_Character_024,Fixed8x13_Character_025,Fixed8x13_Character_026,Fixed8x13_Character_027,Fixed8x13_Character_028,Fixed8x13_Character_029,Fixed8x13_Character_030,Fixed8x13_Character_031,
-                                                   Fixed8x13_Character_032,Fixed8x13_Character_033,Fixed8x13_Character_034,Fixed8x13_Character_035,Fixed8x13_Character_036,Fixed8x13_Character_037,Fixed8x13_Character_038,Fixed8x13_Character_039,Fixed8x13_Character_040,Fixed8x13_Character_041,Fixed8x13_Character_042,Fixed8x13_Character_043,Fixed8x13_Character_044,Fixed8x13_Character_045,Fixed8x13_Character_046,Fixed8x13_Character_047,
-                                                   Fixed8x13_Character_048,Fixed8x13_Character_049,Fixed8x13_Character_050,Fixed8x13_Character_051,Fixed8x13_Character_052,Fixed8x13_Character_053,Fixed8x13_Character_054,Fixed8x13_Character_055,Fixed8x13_Character_056,Fixed8x13_Character_057,Fixed8x13_Character_058,Fixed8x13_Character_059,Fixed8x13_Character_060,Fixed8x13_Character_061,Fixed8x13_Character_062,Fixed8x13_Character_063,
-                                                   Fixed8x13_Character_064,Fixed8x13_Character_065,Fixed8x13_Character_066,Fixed8x13_Character_067,Fixed8x13_Character_068,Fixed8x13_Character_069,Fixed8x13_Character_070,Fixed8x13_Character_071,Fixed8x13_Character_072,Fixed8x13_Character_073,Fixed8x13_Character_074,Fixed8x13_Character_075,Fixed8x13_Character_076,Fixed8x13_Character_077,Fixed8x13_Character_078,Fixed8x13_Character_079,
-                                                   Fixed8x13_Character_080,Fixed8x13_Character_081,Fixed8x13_Character_082,Fixed8x13_Character_083,Fixed8x13_Character_084,Fixed8x13_Character_085,Fixed8x13_Character_086,Fixed8x13_Character_087,Fixed8x13_Character_088,Fixed8x13_Character_089,Fixed8x13_Character_090,Fixed8x13_Character_091,Fixed8x13_Character_092,Fixed8x13_Character_093,Fixed8x13_Character_094,Fixed8x13_Character_095,
-                                                   Fixed8x13_Character_096,Fixed8x13_Character_097,Fixed8x13_Character_098,Fixed8x13_Character_099,Fixed8x13_Character_100,Fixed8x13_Character_101,Fixed8x13_Character_102,Fixed8x13_Character_103,Fixed8x13_Character_104,Fixed8x13_Character_105,Fixed8x13_Character_106,Fixed8x13_Character_107,Fixed8x13_Character_108,Fixed8x13_Character_109,Fixed8x13_Character_110,Fixed8x13_Character_111,
-                                                   Fixed8x13_Character_112,Fixed8x13_Character_113,Fixed8x13_Character_114,Fixed8x13_Character_115,Fixed8x13_Character_116,Fixed8x13_Character_117,Fixed8x13_Character_118,Fixed8x13_Character_119,Fixed8x13_Character_120,Fixed8x13_Character_121,Fixed8x13_Character_122,Fixed8x13_Character_123,Fixed8x13_Character_124,Fixed8x13_Character_125,Fixed8x13_Character_126,Fixed8x13_Character_032,
-                                                   Fixed8x13_Character_032,Fixed8x13_Character_032,Fixed8x13_Character_032,Fixed8x13_Character_032,Fixed8x13_Character_032,Fixed8x13_Character_032,Fixed8x13_Character_032,Fixed8x13_Character_032,Fixed8x13_Character_032,Fixed8x13_Character_032,Fixed8x13_Character_032,Fixed8x13_Character_032,Fixed8x13_Character_032,Fixed8x13_Character_032,Fixed8x13_Character_032,Fixed8x13_Character_032,
-                                                   Fixed8x13_Character_032,Fixed8x13_Character_032,Fixed8x13_Character_032,Fixed8x13_Character_032,Fixed8x13_Character_032,Fixed8x13_Character_032,Fixed8x13_Character_032,Fixed8x13_Character_032,Fixed8x13_Character_032,Fixed8x13_Character_032,Fixed8x13_Character_032,Fixed8x13_Character_032,Fixed8x13_Character_032,Fixed8x13_Character_032,Fixed8x13_Character_032,Fixed8x13_Character_032,
-                                                   Fixed8x13_Character_160,Fixed8x13_Character_161,Fixed8x13_Character_162,Fixed8x13_Character_163,Fixed8x13_Character_164,Fixed8x13_Character_165,Fixed8x13_Character_166,Fixed8x13_Character_167,Fixed8x13_Character_168,Fixed8x13_Character_169,Fixed8x13_Character_170,Fixed8x13_Character_171,Fixed8x13_Character_172,Fixed8x13_Character_173,Fixed8x13_Character_174,Fixed8x13_Character_175,
-                                                   Fixed8x13_Character_176,Fixed8x13_Character_177,Fixed8x13_Character_178,Fixed8x13_Character_179,Fixed8x13_Character_180,Fixed8x13_Character_181,Fixed8x13_Character_182,Fixed8x13_Character_183,Fixed8x13_Character_184,Fixed8x13_Character_185,Fixed8x13_Character_186,Fixed8x13_Character_187,Fixed8x13_Character_188,Fixed8x13_Character_189,Fixed8x13_Character_190,Fixed8x13_Character_191,
-                                                   Fixed8x13_Character_192,Fixed8x13_Character_193,Fixed8x13_Character_194,Fixed8x13_Character_195,Fixed8x13_Character_196,Fixed8x13_Character_197,Fixed8x13_Character_198,Fixed8x13_Character_199,Fixed8x13_Character_200,Fixed8x13_Character_201,Fixed8x13_Character_202,Fixed8x13_Character_203,Fixed8x13_Character_204,Fixed8x13_Character_205,Fixed8x13_Character_206,Fixed8x13_Character_207,
-                                                   Fixed8x13_Character_208,Fixed8x13_Character_209,Fixed8x13_Character_210,Fixed8x13_Character_211,Fixed8x13_Character_212,Fixed8x13_Character_213,Fixed8x13_Character_214,Fixed8x13_Character_215,Fixed8x13_Character_216,Fixed8x13_Character_217,Fixed8x13_Character_218,Fixed8x13_Character_219,Fixed8x13_Character_220,Fixed8x13_Character_221,Fixed8x13_Character_222,Fixed8x13_Character_223,
-                                                   Fixed8x13_Character_224,Fixed8x13_Character_225,Fixed8x13_Character_226,Fixed8x13_Character_227,Fixed8x13_Character_228,Fixed8x13_Character_229,Fixed8x13_Character_230,Fixed8x13_Character_231,Fixed8x13_Character_232,Fixed8x13_Character_233,Fixed8x13_Character_234,Fixed8x13_Character_235,Fixed8x13_Character_236,Fixed8x13_Character_237,Fixed8x13_Character_238,Fixed8x13_Character_239,
-                                                   Fixed8x13_Character_240,Fixed8x13_Character_241,Fixed8x13_Character_242,Fixed8x13_Character_243,Fixed8x13_Character_244,Fixed8x13_Character_245,Fixed8x13_Character_246,Fixed8x13_Character_247,Fixed8x13_Character_248,Fixed8x13_Character_249,Fixed8x13_Character_250,Fixed8x13_Character_251,Fixed8x13_Character_252,Fixed8x13_Character_253,Fixed8x13_Character_254,Fixed8x13_Character_255,NULL};
-
-/* The font structure: */
-const SFG_Font fgFontFixed8x13 = { "-misc-fixed-medium-r-normal--13-120-75-75-C-80-iso8859-1", 256, 14, Fixed8x13_Character_Map, 0, 3 };
-
-static const GLubyte Fixed9x15_Character_000[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_001[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0, 28,  0, 62,  0,127,  0,255,128,127,  0, 62,  0, 28,  0,  8,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_002[] = {  9,  0,  0,170,128, 85,  0,170,128, 85,  0,170,128, 85,  0,170,128, 85,  0,170,128, 85,  0,170,128, 85,  0,170,128, 85,  0,170,128};
-static const GLubyte Fixed9x15_Character_003[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  4,  0,  4,  0,  4,  0, 31,  0,  0,  0, 72,  0, 72,  0,120,  0, 72,  0, 72,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_004[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  8,  0,  8,  0, 14,  0, 72,  0, 79,  0, 64,  0,112,  0, 64,  0,120,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_005[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  9,  0,  9,  0, 14,  0,  9,  0, 14,  0,  0,  0, 56,  0, 64,  0, 64,  0, 64,  0, 56,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_006[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  8,  0, 14,  0,  8,  0, 15,  0,  0,  0,120,  0, 64,  0, 64,  0, 64,  0, 64,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_007[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 12,  0, 18,  0, 18,  0, 12,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_008[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,  0,  0,  0,  8,  0,  8,  0,  8,  0,127,  0,  8,  0,  8,  0,  8,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_009[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 15,  0,  8,  0,  8,  0,  8,  0,  8,  0,  0,  0, 68,  0, 76,  0, 84,  0,100,  0, 68,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_010[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  4,  0,  4,  0,  4,  0, 31,  0,  0,  0, 16,  0, 40,  0, 40,  0, 68,  0, 68,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_011[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,248,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0};
-static const GLubyte Fixed9x15_Character_012[] = {  9,  0,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,248,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_013[] = {  9,  0,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0, 15,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_014[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15,128,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0};
-static const GLubyte Fixed9x15_Character_015[] = {  9,  0,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,255,128,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0};
-static const GLubyte Fixed9x15_Character_016[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,255,128};
-static const GLubyte Fixed9x15_Character_017[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,255,128,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_018[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,255,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_019[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,255,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_020[] = {  9,  0,  0,255,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_021[] = {  9,  0,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0, 15,128,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0};
-static const GLubyte Fixed9x15_Character_022[] = {  9,  0,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,248,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0};
-static const GLubyte Fixed9x15_Character_023[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,255,128,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0};
-static const GLubyte Fixed9x15_Character_024[] = {  9,  0,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,255,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_025[] = {  9,  0,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0};
-static const GLubyte Fixed9x15_Character_026[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,  0,  0,  0,  3,  0, 28,  0, 96,  0, 28,  0,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_027[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,  0,  0,  0, 96,  0, 28,  0,  3,  0, 28,  0, 96,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_028[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 34,  0, 34,  0, 34,  0, 34,  0, 34,  0, 34,  0,127,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_029[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0, 16,  0,127,  0,  8,  0,127,  0,  4,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_030[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 46,  0, 81,  0, 48,  0, 16,  0, 16,  0,124,  0, 16,  0, 16,  0, 17,  0, 14,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_031[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 12,  0, 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_032[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_033[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  8,  0,  0,  0,  0,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_034[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 18,  0, 18,  0, 18,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_035[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 36,  0, 36,  0,126,  0, 36,  0, 36,  0,126,  0, 36,  0, 36,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_036[] = {  9,  0,  0,  0,  0,  0,  0,  8,  0, 62,  0, 73,  0,  9,  0,  9,  0, 10,  0, 28,  0, 40,  0, 72,  0, 73,  0, 62,  0,  8,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_037[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 66,  0, 37,  0, 37,  0, 18,  0,  8,  0,  8,  0, 36,  0, 82,  0, 82,  0, 33,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_038[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 49,  0, 74,  0, 68,  0, 74,  0, 49,  0, 48,  0, 72,  0, 72,  0, 72,  0, 48,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_039[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  8,  0,  4,  0,  6,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_040[] = {  9,  0,  0,  0,  0,  0,  0,  4,  0,  8,  0,  8,  0, 16,  0, 16,  0, 16,  0, 16,  0, 16,  0, 16,  0,  8,  0,  8,  0,  4,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_041[] = {  9,  0,  0,  0,  0,  0,  0, 16,  0,  8,  0,  8,  0,  4,  0,  4,  0,  4,  0,  4,  0,  4,  0,  4,  0,  8,  0,  8,  0, 16,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_042[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0, 73,  0, 42,  0, 28,  0, 42,  0, 73,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_043[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  8,  0,  8,  0,127,  0,  8,  0,  8,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_044[] = {  9,  0,  0,  8,  0,  4,  0,  4,  0, 12,  0, 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_045[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_046[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 12,  0, 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_047[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0, 32,  0, 32,  0, 16,  0,  8,  0,  8,  0,  4,  0,  2,  0,  2,  0,  1,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_048[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 28,  0, 34,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 34,  0, 28,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_049[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,127,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0, 72,  0, 40,  0, 24,  0,  8,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_050[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,127,  0, 64,  0, 32,  0, 16,  0,  8,  0,  4,  0,  2,  0, 65,  0, 65,  0, 62,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_051[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 65,  0,  1,  0,  1,  0,  1,  0, 14,  0,  4,  0,  2,  0,  1,  0,127,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_052[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  2,  0,  2,  0,127,  0, 66,  0, 34,  0, 18,  0, 10,  0,  6,  0,  2,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_053[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 65,  0,  1,  0,  1,  0,  1,  0, 97,  0, 94,  0, 64,  0, 64,  0,127,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_054[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 65,  0, 65,  0, 65,  0, 97,  0, 94,  0, 64,  0, 64,  0, 32,  0, 30,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_055[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0, 32,  0, 16,  0, 16,  0,  8,  0,  4,  0,  2,  0,  1,  0,  1,  0,127,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_056[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 28,  0, 34,  0, 65,  0, 65,  0, 34,  0, 28,  0, 34,  0, 65,  0, 34,  0, 28,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_057[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 60,  0,  2,  0,  1,  0,  1,  0, 61,  0, 67,  0, 65,  0, 65,  0, 65,  0, 62,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_058[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 12,  0, 12,  0,  0,  0,  0,  0,  0,  0, 12,  0, 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_059[] = {  9,  0,  0,  8,  0,  4,  0,  4,  0, 12,  0, 12,  0,  0,  0,  0,  0,  0,  0, 12,  0, 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_060[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  4,  0,  8,  0, 16,  0, 32,  0, 32,  0, 16,  0,  8,  0,  4,  0,  2,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_061[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,  0,  0,  0,  0,  0,127,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_062[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0, 16,  0,  8,  0,  4,  0,  2,  0,  2,  0,  4,  0,  8,  0, 16,  0, 32,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_063[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  8,  0,  8,  0,  4,  0,  2,  0,  1,  0, 65,  0, 65,  0, 62,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_064[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 64,  0, 64,  0, 77,  0, 83,  0, 81,  0, 79,  0, 65,  0, 65,  0, 62,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_065[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 65,  0, 65,  0,127,  0, 65,  0, 65,  0, 65,  0, 34,  0, 20,  0,  8,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_066[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,126,  0, 33,  0, 33,  0, 33,  0, 33,  0,126,  0, 33,  0, 33,  0, 33,  0,126,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_067[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 65,  0, 64,  0, 64,  0, 64,  0, 64,  0, 64,  0, 64,  0, 65,  0, 62,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_068[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,126,  0, 33,  0, 33,  0, 33,  0, 33,  0, 33,  0, 33,  0, 33,  0, 33,  0,126,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_069[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,127,  0, 32,  0, 32,  0, 32,  0, 32,  0, 60,  0, 32,  0, 32,  0, 32,  0,127,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_070[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0, 32,  0, 32,  0, 32,  0, 32,  0, 60,  0, 32,  0, 32,  0, 32,  0,127,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_071[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 65,  0, 65,  0, 65,  0, 71,  0, 64,  0, 64,  0, 64,  0, 65,  0, 62,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_072[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0,127,  0, 65,  0, 65,  0, 65,  0, 65,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_073[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0, 62,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_074[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 60,  0, 66,  0,  2,  0,  2,  0,  2,  0,  2,  0,  2,  0,  2,  0,  2,  0, 15,128,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_075[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 66,  0, 68,  0, 72,  0, 80,  0,112,  0, 72,  0, 68,  0, 66,  0, 65,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_076[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,127,  0, 64,  0, 64,  0, 64,  0, 64,  0, 64,  0, 64,  0, 64,  0, 64,  0, 64,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_077[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 65,  0, 65,  0, 73,  0, 73,  0, 85,  0, 85,  0, 99,  0, 65,  0, 65,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_078[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 65,  0, 65,  0, 67,  0, 69,  0, 73,  0, 81,  0, 97,  0, 65,  0, 65,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_079[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 62,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_080[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0, 64,  0, 64,  0, 64,  0, 64,  0,126,  0, 65,  0, 65,  0, 65,  0,126,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_081[] = {  9,  0,  0,  0,  0,  3,  0,  4,  0, 62,  0, 73,  0, 81,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 62,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_082[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 65,  0, 66,  0, 68,  0, 72,  0,126,  0, 65,  0, 65,  0, 65,  0,126,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_083[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 65,  0, 65,  0,  1,  0,  6,  0, 56,  0, 64,  0, 65,  0, 65,  0, 62,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_084[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,127,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_085[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_086[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0, 20,  0, 20,  0, 20,  0, 34,  0, 34,  0, 34,  0, 65,  0, 65,  0, 65,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_087[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 34,  0, 85,  0, 73,  0, 73,  0, 73,  0, 73,  0, 65,  0, 65,  0, 65,  0, 65,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_088[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 65,  0, 34,  0, 20,  0,  8,  0,  8,  0, 20,  0, 34,  0, 65,  0, 65,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_089[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0, 20,  0, 34,  0, 65,  0, 65,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_090[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,127,  0, 64,  0, 64,  0, 32,  0, 16,  0,  8,  0,  4,  0,  2,  0,  1,  0,127,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_091[] = {  9,  0,  0,  0,  0,  0,  0, 30,  0, 16,  0, 16,  0, 16,  0, 16,  0, 16,  0, 16,  0, 16,  0, 16,  0, 16,  0, 16,  0, 30,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_092[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  2,  0,  2,  0,  4,  0,  8,  0,  8,  0, 16,  0, 32,  0, 32,  0, 64,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_093[] = {  9,  0,  0,  0,  0,  0,  0, 60,  0,  4,  0,  4,  0,  4,  0,  4,  0,  4,  0,  4,  0,  4,  0,  4,  0,  4,  0,  4,  0, 60,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_094[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 34,  0, 20,  0,  8,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_095[] = {  9,  0,  0,  0,  0,  0,  0,255,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_096[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  8,  0, 16,  0, 48,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_097[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 61,  0, 67,  0, 65,  0, 63,  0,  1,  0,  1,  0, 62,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_098[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 94,  0, 97,  0, 65,  0, 65,  0, 65,  0, 97,  0, 94,  0, 64,  0, 64,  0, 64,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_099[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 65,  0, 64,  0, 64,  0, 64,  0, 65,  0, 62,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_100[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 61,  0, 67,  0, 65,  0, 65,  0, 65,  0, 67,  0, 61,  0,  1,  0,  1,  0,  1,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_101[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 64,  0, 64,  0,127,  0, 65,  0, 65,  0, 62,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_102[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0, 16,  0, 16,  0, 16,  0,124,  0, 16,  0, 16,  0, 17,  0, 17,  0, 14,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_103[] = {  9,  0,  0, 62,  0, 65,  0, 65,  0, 62,  0, 64,  0, 60,  0, 66,  0, 66,  0, 66,  0, 61,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_104[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 97,  0, 94,  0, 64,  0, 64,  0, 64,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_105[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0, 56,  0,  0,  0,  0,  0, 24,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_106[] = {  9,  0,  0, 60,  0, 66,  0, 66,  0, 66,  0,  2,  0,  2,  0,  2,  0,  2,  0,  2,  0, 14,  0,  0,  0,  0,  0,  6,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_107[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 70,  0, 88,  0, 96,  0, 88,  0, 70,  0, 65,  0, 64,  0, 64,  0, 64,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_108[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0, 56,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_109[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 73,  0, 73,  0, 73,  0, 73,  0, 73,  0,118,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_110[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 97,  0, 94,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_111[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 62,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_112[] = {  9,  0,  0, 64,  0, 64,  0, 64,  0, 94,  0, 97,  0, 65,  0, 65,  0, 65,  0, 97,  0, 94,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_113[] = {  9,  0,  0,  1,  0,  1,  0,  1,  0, 61,  0, 67,  0, 65,  0, 65,  0, 65,  0, 67,  0, 61,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_114[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0, 32,  0, 32,  0, 32,  0, 33,  0, 49,  0, 78,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_115[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 65,  0,  1,  0, 62,  0, 64,  0, 65,  0, 62,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_116[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 14,  0, 17,  0, 16,  0, 16,  0, 16,  0, 16,  0,126,  0, 16,  0, 16,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_117[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 61,  0, 66,  0, 66,  0, 66,  0, 66,  0, 66,  0, 66,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_118[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0, 20,  0, 20,  0, 34,  0, 34,  0, 65,  0, 65,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_119[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 34,  0, 85,  0, 73,  0, 73,  0, 73,  0, 65,  0, 65,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_120[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 34,  0, 20,  0,  8,  0, 20,  0, 34,  0, 65,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_121[] = {  9,  0,  0, 60,  0, 66,  0,  2,  0, 58,  0, 70,  0, 66,  0, 66,  0, 66,  0, 66,  0, 66,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_122[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,127,  0, 32,  0, 16,  0,  8,  0,  4,  0,  2,  0,127,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_123[] = {  9,  0,  0,  0,  0,  0,  0,  7,  0,  8,  0,  8,  0,  8,  0,  4,  0, 24,  0, 24,  0,  4,  0,  8,  0,  8,  0,  8,  0,  7,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_124[] = {  9,  0,  0,  0,  0,  0,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_125[] = {  9,  0,  0,  0,  0,  0,  0,112,  0,  8,  0,  8,  0,  8,  0, 16,  0, 12,  0, 12,  0, 16,  0,  8,  0,  8,  0,  8,  0,112,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_126[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 70,  0, 73,  0, 49,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_127[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_128[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_129[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_130[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_131[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_132[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_133[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_134[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_135[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_136[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_137[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_138[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_139[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_140[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_141[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_142[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_143[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_144[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_145[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_146[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_147[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_148[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_149[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_150[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_151[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_152[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_153[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_154[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_155[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_156[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_157[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_158[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_159[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0, 65,  0, 64,  0,  1,  0,109,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_160[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_161[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  0,  0,  0,  0,  8,  0,  8,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_162[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0, 60,  0, 82,  0, 80,  0, 72,  0, 74,  0, 60,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_163[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 46,  0, 81,  0, 48,  0, 16,  0, 16,  0,124,  0, 16,  0, 16,  0, 17,  0, 14,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_164[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 62,  0, 34,  0, 34,  0, 62,  0, 65,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_165[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  8,  0,  8,  0, 62,  0,  8,  0, 62,  0, 20,  0, 34,  0, 65,  0, 65,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_166[] = {  9,  0,  0,  0,  0,  0,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  0,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_167[] = {  9,  0,  0,  0,  0,  0,  0, 24,  0, 36,  0,  4,  0, 24,  0, 36,  0, 36,  0, 36,  0, 24,  0, 32,  0, 36,  0, 24,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_168[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 34,  0, 34,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_169[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,  0, 66,  0,153,  0,165,  0,161,  0,165,  0,153,  0, 66,  0, 60,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_170[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,124,  0,  0,  0, 60,  0, 72,  0, 56,  0, 72,  0, 48,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_171[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  9,  0, 18,  0, 36,  0, 72,  0, 72,  0, 36,  0, 18,  0,  9,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_172[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  2,  0,  2,  0,126,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_173[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_174[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,  0, 66,  0,165,  0,169,  0,185,  0,165,  0,185,  0, 66,  0, 60,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_175[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,126,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_176[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 12,  0, 18,  0, 18,  0, 12,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_177[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,  0,  0,  0,  8,  0,  8,  0,  8,  0,127,  0,  8,  0,  8,  0,  8,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_178[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,120,  0, 64,  0, 48,  0,  8,  0, 72,  0, 48,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_179[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 48,  0, 72,  0,  8,  0, 16,  0, 72,  0, 48,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_180[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  8,  0,  4,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_181[] = {  9,  0,  0,  0,  0, 64,  0, 64,  0, 93,  0, 99,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_182[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  5,  0,  5,  0,  5,  0,  5,  0,  5,  0, 61,  0, 69,  0, 69,  0, 69,  0, 63,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_183[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 12,  0, 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_184[] = {  9,  0,  0, 24,  0, 36,  0, 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_185[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,112,  0, 32,  0, 32,  0, 32,  0, 96,  0, 32,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_186[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,124,  0,  0,  0, 56,  0, 68,  0, 68,  0, 56,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_187[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 72,  0, 36,  0, 18,  0,  9,  0,  9,  0, 18,  0, 36,  0, 72,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_188[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  3,  0, 13,  0,  9,  0,  5,  0,115,  0, 33,  0, 32,  0, 32,  0, 96,  0, 32,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_189[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 15,  0,  8,  0,  6,  0,  1,  0,121,  0, 38,  0, 32,  0, 32,  0, 96,  0, 32,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_190[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  3,  0, 13,  0,  9,  0,  5,  0, 51,  0, 73,  0,  8,  0, 16,  0, 72,  0, 48,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_191[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 65,  0, 65,  0, 64,  0, 32,  0, 16,  0,  8,  0,  8,  0,  0,  0,  8,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_192[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 65,  0, 65,  0,127,  0, 65,  0, 65,  0, 34,  0, 28,  0,  0,  0,  8,  0, 16,  0, 32,  0};
-static const GLubyte Fixed9x15_Character_193[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 65,  0, 65,  0,127,  0, 65,  0, 65,  0, 34,  0, 28,  0,  0,  0,  8,  0,  4,  0,  2,  0};
-static const GLubyte Fixed9x15_Character_194[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 65,  0, 65,  0,127,  0, 65,  0, 65,  0, 34,  0, 28,  0,  0,  0, 34,  0, 20,  0,  8,  0};
-static const GLubyte Fixed9x15_Character_195[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 65,  0, 65,  0,127,  0, 65,  0, 65,  0, 34,  0, 28,  0,  0,  0, 78,  0, 49,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_196[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 65,  0, 65,  0,127,  0, 65,  0, 65,  0, 34,  0, 28,  0,  0,  0, 34,  0, 34,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_197[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 65,  0, 65,  0,127,  0, 65,  0, 65,  0, 34,  0, 20,  0, 28,  0, 34,  0, 28,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_198[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 79,  0, 72,  0, 72,  0, 72,  0,126,  0, 72,  0, 72,  0, 72,  0, 72,  0, 55,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_199[] = {  9,  0,  0, 24,  0, 36,  0, 12,  0, 62,  0, 65,  0, 64,  0, 64,  0, 64,  0, 64,  0, 64,  0, 64,  0, 65,  0, 62,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_200[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,127,  0, 32,  0, 32,  0, 32,  0, 60,  0, 32,  0, 32,  0,127,  0,  0,  0,  8,  0, 16,  0, 32,  0};
-static const GLubyte Fixed9x15_Character_201[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,127,  0, 32,  0, 32,  0, 32,  0, 60,  0, 32,  0, 32,  0,127,  0,  0,  0,  8,  0,  4,  0,  2,  0};
-static const GLubyte Fixed9x15_Character_202[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,127,  0, 32,  0, 32,  0, 32,  0, 60,  0, 32,  0, 32,  0,127,  0,  0,  0, 34,  0, 20,  0,  8,  0};
-static const GLubyte Fixed9x15_Character_203[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,127,  0, 32,  0, 32,  0, 32,  0, 60,  0, 32,  0, 32,  0,127,  0,  0,  0, 34,  0, 34,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_204[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0, 62,  0,  0,  0,  8,  0, 16,  0, 32,  0};
-static const GLubyte Fixed9x15_Character_205[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0, 62,  0,  0,  0,  8,  0,  4,  0,  2,  0};
-static const GLubyte Fixed9x15_Character_206[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0, 62,  0,  0,  0, 34,  0, 20,  0,  8,  0};
-static const GLubyte Fixed9x15_Character_207[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0, 62,  0,  0,  0, 34,  0, 34,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_208[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,124,  0, 33,  0, 33,  0, 33,  0, 33,  0,225,  0, 33,  0, 33,  0, 33,  0,124,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_209[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 67,  0, 69,  0, 73,  0, 73,  0, 81,  0, 97,  0, 65,  0,  0,  0, 78,  0, 49,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_210[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 62,  0,  0,  0,  8,  0, 16,  0, 32,  0};
-static const GLubyte Fixed9x15_Character_211[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 62,  0,  0,  0,  8,  0,  4,  0,  2,  0};
-static const GLubyte Fixed9x15_Character_212[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 62,  0,  0,  0, 34,  0, 20,  0,  8,  0};
-static const GLubyte Fixed9x15_Character_213[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 62,  0,  0,  0, 78,  0, 49,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_214[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 62,  0,  0,  0, 34,  0, 34,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_215[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 34,  0, 20,  0,  8,  0, 20,  0, 34,  0, 65,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_216[] = {  9,  0,  0,  0,  0,  0,  0, 64,  0, 62,  0, 97,  0, 81,  0, 81,  0, 73,  0, 73,  0, 69,  0, 69,  0, 67,  0, 62,  0,  1,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_217[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0,  0,  0,  8,  0, 16,  0, 32,  0};
-static const GLubyte Fixed9x15_Character_218[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0,  0,  0,  8,  0,  4,  0,  2,  0};
-static const GLubyte Fixed9x15_Character_219[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0,  0,  0, 34,  0, 20,  0,  8,  0};
-static const GLubyte Fixed9x15_Character_220[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0,  0,  0, 34,  0, 34,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_221[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  8,  0,  8,  0,  8,  0, 20,  0, 34,  0, 65,  0, 65,  0,  0,  0,  8,  0,  4,  0,  2,  0};
-static const GLubyte Fixed9x15_Character_222[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0, 64,  0, 64,  0,126,  0, 65,  0, 65,  0, 65,  0,126,  0, 64,  0, 64,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_223[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 44,  0, 34,  0, 34,  0, 34,  0, 36,  0,104,  0, 36,  0, 34,  0, 34,  0, 28,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_224[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 61,  0, 67,  0, 65,  0, 63,  0,  1,  0,  1,  0, 62,  0,  0,  0,  4,  0,  8,  0, 16,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_225[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 61,  0, 67,  0, 65,  0, 63,  0,  1,  0,  1,  0, 62,  0,  0,  0,  8,  0,  4,  0,  2,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_226[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 61,  0, 67,  0, 65,  0, 63,  0,  1,  0,  1,  0, 62,  0,  0,  0, 34,  0, 20,  0,  8,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_227[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 61,  0, 67,  0, 65,  0, 63,  0,  1,  0,  1,  0, 62,  0,  0,  0, 38,  0, 25,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_228[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 61,  0, 67,  0, 65,  0, 63,  0,  1,  0,  1,  0, 62,  0,  0,  0, 34,  0, 34,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_229[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 61,  0, 67,  0, 65,  0, 63,  0,  1,  0,  1,  0, 62,  0,  0,  0, 12,  0, 18,  0, 12,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_230[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 55,  0, 73,  0, 72,  0, 62,  0,  9,  0, 73,  0, 54,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_231[] = {  9,  0,  0, 24,  0, 36,  0, 12,  0, 62,  0, 65,  0, 64,  0, 64,  0, 64,  0, 65,  0, 62,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_232[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 64,  0, 64,  0,127,  0, 65,  0, 65,  0, 62,  0,  0,  0,  8,  0, 16,  0, 32,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_233[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 64,  0, 64,  0,127,  0, 65,  0, 65,  0, 62,  0,  0,  0,  8,  0,  4,  0,  2,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_234[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 64,  0, 64,  0,127,  0, 65,  0, 65,  0, 62,  0,  0,  0, 34,  0, 20,  0,  8,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_235[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 64,  0, 64,  0,127,  0, 65,  0, 65,  0, 62,  0,  0,  0, 34,  0, 34,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_236[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0, 56,  0,  0,  0,  8,  0, 16,  0, 32,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_237[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0, 56,  0,  0,  0, 16,  0,  8,  0,  4,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_238[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0, 56,  0,  0,  0, 68,  0, 40,  0, 16,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_239[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0,  8,  0,  8,  0,  8,  0,  8,  0,  8,  0, 56,  0,  0,  0, 36,  0, 36,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_240[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 62,  0,  4,  0, 40,  0, 24,  0, 36,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_241[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 97,  0, 94,  0,  0,  0, 78,  0, 49,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_242[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 62,  0,  0,  0,  8,  0, 16,  0, 32,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_243[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 62,  0,  0,  0,  8,  0,  4,  0,  2,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_244[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 62,  0,  0,  0, 34,  0, 20,  0,  8,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_245[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 62,  0,  0,  0, 78,  0, 49,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_246[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 62,  0,  0,  0, 34,  0, 34,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_247[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0, 28,  0,  8,  0,  0,  0,127,  0,  0,  0,  8,  0, 28,  0,  8,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_248[] = {  9,  0,  0,  0,  0,  0,  0, 64,  0, 62,  0, 81,  0, 81,  0, 73,  0, 69,  0, 69,  0, 62,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_249[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 61,  0, 66,  0, 66,  0, 66,  0, 66,  0, 66,  0, 66,  0,  0,  0,  8,  0, 16,  0, 32,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_250[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 61,  0, 66,  0, 66,  0, 66,  0, 66,  0, 66,  0, 66,  0,  0,  0,  8,  0,  4,  0,  2,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_251[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 61,  0, 66,  0, 66,  0, 66,  0, 66,  0, 66,  0, 66,  0,  0,  0, 34,  0, 20,  0,  8,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_252[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 61,  0, 66,  0, 66,  0, 66,  0, 66,  0, 66,  0, 66,  0,  0,  0, 36,  0, 36,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_253[] = {  9,  0,  0, 60,  0, 66,  0,  2,  0, 58,  0, 70,  0, 66,  0, 66,  0, 66,  0, 66,  0, 66,  0,  0,  0, 16,  0,  8,  0,  4,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_254[] = {  9,  0,  0, 64,  0, 64,  0, 64,  0, 94,  0, 97,  0, 65,  0, 65,  0, 97,  0, 94,  0, 64,  0, 64,  0, 64,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Fixed9x15_Character_255[] = {  9,  0,  0, 60,  0, 66,  0,  2,  0, 58,  0, 70,  0, 66,  0, 66,  0, 66,  0, 66,  0, 66,  0,  0,  0, 36,  0, 36,  0,  0,  0,  0,  0};
-
-/* The font characters mapping: */
-static const GLubyte* Fixed9x15_Character_Map[] = {Fixed9x15_Character_000,Fixed9x15_Character_001,Fixed9x15_Character_002,Fixed9x15_Character_003,Fixed9x15_Character_004,Fixed9x15_Character_005,Fixed9x15_Character_006,Fixed9x15_Character_007,Fixed9x15_Character_008,Fixed9x15_Character_009,Fixed9x15_Character_010,Fixed9x15_Character_011,Fixed9x15_Character_012,Fixed9x15_Character_013,Fixed9x15_Character_014,Fixed9x15_Character_015,
-                                                   Fixed9x15_Character_016,Fixed9x15_Character_017,Fixed9x15_Character_018,Fixed9x15_Character_019,Fixed9x15_Character_020,Fixed9x15_Character_021,Fixed9x15_Character_022,Fixed9x15_Character_023,Fixed9x15_Character_024,Fixed9x15_Character_025,Fixed9x15_Character_026,Fixed9x15_Character_027,Fixed9x15_Character_028,Fixed9x15_Character_029,Fixed9x15_Character_030,Fixed9x15_Character_031,
-                                                   Fixed9x15_Character_032,Fixed9x15_Character_033,Fixed9x15_Character_034,Fixed9x15_Character_035,Fixed9x15_Character_036,Fixed9x15_Character_037,Fixed9x15_Character_038,Fixed9x15_Character_039,Fixed9x15_Character_040,Fixed9x15_Character_041,Fixed9x15_Character_042,Fixed9x15_Character_043,Fixed9x15_Character_044,Fixed9x15_Character_045,Fixed9x15_Character_046,Fixed9x15_Character_047,
-                                                   Fixed9x15_Character_048,Fixed9x15_Character_049,Fixed9x15_Character_050,Fixed9x15_Character_051,Fixed9x15_Character_052,Fixed9x15_Character_053,Fixed9x15_Character_054,Fixed9x15_Character_055,Fixed9x15_Character_056,Fixed9x15_Character_057,Fixed9x15_Character_058,Fixed9x15_Character_059,Fixed9x15_Character_060,Fixed9x15_Character_061,Fixed9x15_Character_062,Fixed9x15_Character_063,
-                                                   Fixed9x15_Character_064,Fixed9x15_Character_065,Fixed9x15_Character_066,Fixed9x15_Character_067,Fixed9x15_Character_068,Fixed9x15_Character_069,Fixed9x15_Character_070,Fixed9x15_Character_071,Fixed9x15_Character_072,Fixed9x15_Character_073,Fixed9x15_Character_074,Fixed9x15_Character_075,Fixed9x15_Character_076,Fixed9x15_Character_077,Fixed9x15_Character_078,Fixed9x15_Character_079,
-                                                   Fixed9x15_Character_080,Fixed9x15_Character_081,Fixed9x15_Character_082,Fixed9x15_Character_083,Fixed9x15_Character_084,Fixed9x15_Character_085,Fixed9x15_Character_086,Fixed9x15_Character_087,Fixed9x15_Character_088,Fixed9x15_Character_089,Fixed9x15_Character_090,Fixed9x15_Character_091,Fixed9x15_Character_092,Fixed9x15_Character_093,Fixed9x15_Character_094,Fixed9x15_Character_095,
-                                                   Fixed9x15_Character_096,Fixed9x15_Character_097,Fixed9x15_Character_098,Fixed9x15_Character_099,Fixed9x15_Character_100,Fixed9x15_Character_101,Fixed9x15_Character_102,Fixed9x15_Character_103,Fixed9x15_Character_104,Fixed9x15_Character_105,Fixed9x15_Character_106,Fixed9x15_Character_107,Fixed9x15_Character_108,Fixed9x15_Character_109,Fixed9x15_Character_110,Fixed9x15_Character_111,
-                                                   Fixed9x15_Character_112,Fixed9x15_Character_113,Fixed9x15_Character_114,Fixed9x15_Character_115,Fixed9x15_Character_116,Fixed9x15_Character_117,Fixed9x15_Character_118,Fixed9x15_Character_119,Fixed9x15_Character_120,Fixed9x15_Character_121,Fixed9x15_Character_122,Fixed9x15_Character_123,Fixed9x15_Character_124,Fixed9x15_Character_125,Fixed9x15_Character_126,Fixed9x15_Character_032,
-                                                   Fixed9x15_Character_032,Fixed9x15_Character_032,Fixed9x15_Character_032,Fixed9x15_Character_032,Fixed9x15_Character_032,Fixed9x15_Character_032,Fixed9x15_Character_032,Fixed9x15_Character_032,Fixed9x15_Character_032,Fixed9x15_Character_032,Fixed9x15_Character_032,Fixed9x15_Character_032,Fixed9x15_Character_032,Fixed9x15_Character_032,Fixed9x15_Character_032,Fixed9x15_Character_032,
-                                                   Fixed9x15_Character_032,Fixed9x15_Character_032,Fixed9x15_Character_032,Fixed9x15_Character_032,Fixed9x15_Character_032,Fixed9x15_Character_032,Fixed9x15_Character_032,Fixed9x15_Character_032,Fixed9x15_Character_032,Fixed9x15_Character_032,Fixed9x15_Character_032,Fixed9x15_Character_032,Fixed9x15_Character_032,Fixed9x15_Character_032,Fixed9x15_Character_032,Fixed9x15_Character_032,
-                                                   Fixed9x15_Character_160,Fixed9x15_Character_161,Fixed9x15_Character_162,Fixed9x15_Character_163,Fixed9x15_Character_164,Fixed9x15_Character_165,Fixed9x15_Character_166,Fixed9x15_Character_167,Fixed9x15_Character_168,Fixed9x15_Character_169,Fixed9x15_Character_170,Fixed9x15_Character_171,Fixed9x15_Character_172,Fixed9x15_Character_173,Fixed9x15_Character_174,Fixed9x15_Character_175,
-                                                   Fixed9x15_Character_176,Fixed9x15_Character_177,Fixed9x15_Character_178,Fixed9x15_Character_179,Fixed9x15_Character_180,Fixed9x15_Character_181,Fixed9x15_Character_182,Fixed9x15_Character_183,Fixed9x15_Character_184,Fixed9x15_Character_185,Fixed9x15_Character_186,Fixed9x15_Character_187,Fixed9x15_Character_188,Fixed9x15_Character_189,Fixed9x15_Character_190,Fixed9x15_Character_191,
-                                                   Fixed9x15_Character_192,Fixed9x15_Character_193,Fixed9x15_Character_194,Fixed9x15_Character_195,Fixed9x15_Character_196,Fixed9x15_Character_197,Fixed9x15_Character_198,Fixed9x15_Character_199,Fixed9x15_Character_200,Fixed9x15_Character_201,Fixed9x15_Character_202,Fixed9x15_Character_203,Fixed9x15_Character_204,Fixed9x15_Character_205,Fixed9x15_Character_206,Fixed9x15_Character_207,
-                                                   Fixed9x15_Character_208,Fixed9x15_Character_209,Fixed9x15_Character_210,Fixed9x15_Character_211,Fixed9x15_Character_212,Fixed9x15_Character_213,Fixed9x15_Character_214,Fixed9x15_Character_215,Fixed9x15_Character_216,Fixed9x15_Character_217,Fixed9x15_Character_218,Fixed9x15_Character_219,Fixed9x15_Character_220,Fixed9x15_Character_221,Fixed9x15_Character_222,Fixed9x15_Character_223,
-                                                   Fixed9x15_Character_224,Fixed9x15_Character_225,Fixed9x15_Character_226,Fixed9x15_Character_227,Fixed9x15_Character_228,Fixed9x15_Character_229,Fixed9x15_Character_230,Fixed9x15_Character_231,Fixed9x15_Character_232,Fixed9x15_Character_233,Fixed9x15_Character_234,Fixed9x15_Character_235,Fixed9x15_Character_236,Fixed9x15_Character_237,Fixed9x15_Character_238,Fixed9x15_Character_239,
-                                                   Fixed9x15_Character_240,Fixed9x15_Character_241,Fixed9x15_Character_242,Fixed9x15_Character_243,Fixed9x15_Character_244,Fixed9x15_Character_245,Fixed9x15_Character_246,Fixed9x15_Character_247,Fixed9x15_Character_248,Fixed9x15_Character_249,Fixed9x15_Character_250,Fixed9x15_Character_251,Fixed9x15_Character_252,Fixed9x15_Character_253,Fixed9x15_Character_254,Fixed9x15_Character_255,NULL};
-
-/* The font structure: */
-const SFG_Font fgFontFixed9x15 = { "-misc-fixed-medium-r-normal--15-140-75-75-C-90-iso8859-1", 256, 16, Fixed9x15_Character_Map, 0, 4 };
-
-static const GLubyte Helvetica10_Character_000[] = {  8,  0,  0,  0, 84,  0, 68,  0, 68,  0, 84,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_001[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_002[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_003[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_004[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_005[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_006[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_007[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_008[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_009[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_010[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_011[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_012[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_013[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_014[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_015[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_016[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_017[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_018[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_019[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_020[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_021[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_022[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_023[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_024[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_025[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_026[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_027[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_028[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_029[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_030[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_031[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_032[] = {  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_033[] = {  3,  0,  0,  0, 64,  0, 64, 64, 64, 64, 64, 64,  0,  0,  0};
-static const GLubyte Helvetica10_Character_034[] = {  4,  0,  0,  0,  0,  0,  0,  0,  0,  0, 80, 80,  0,  0,  0};
-static const GLubyte Helvetica10_Character_035[] = {  6,  0,  0,  0, 80, 80,248, 40,124, 40, 40,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_036[] = {  6,  0,  0, 32,112,168, 40,112,160,168,112, 32,  0,  0,  0};
-static const GLubyte Helvetica10_Character_037[] = {  9,  0,  0,  0,  0,  0,  0, 38,  0, 41,  0, 22,  0, 16,  0,  8,  0,104,  0,148,  0,100,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_038[] = {  8,  0,  0,  0, 50, 76, 76, 82, 48, 40, 40, 16,  0,  0,  0};
-static const GLubyte Helvetica10_Character_039[] = {  3,  0,  0,  0,  0,  0,  0,  0,  0, 64, 32, 32,  0,  0,  0};
-static const GLubyte Helvetica10_Character_040[] = {  4,  0, 32, 64, 64,128,128,128,128, 64, 64, 32,  0,  0,  0};
-static const GLubyte Helvetica10_Character_041[] = {  4,  0, 64, 32, 32, 16, 16, 16, 16, 32, 32, 64,  0,  0,  0};
-static const GLubyte Helvetica10_Character_042[] = {  4,  0,  0,  0,  0,  0,  0,  0,  0,160, 64,160,  0,  0,  0};
-static const GLubyte Helvetica10_Character_043[] = {  6,  0,  0,  0,  0, 32, 32,248, 32, 32,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_044[] = {  3,  0,128, 64, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_045[] = {  7,  0,  0,  0,  0,  0,  0,124,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_046[] = {  3,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_047[] = {  3,  0,  0,  0,128,128, 64, 64, 64, 64, 32, 32,  0,  0,  0};
-static const GLubyte Helvetica10_Character_048[] = {  6,  0,  0,  0,112,136,136,136,136,136,136,112,  0,  0,  0};
-static const GLubyte Helvetica10_Character_049[] = {  6,  0,  0,  0, 32, 32, 32, 32, 32, 32, 96, 32,  0,  0,  0};
-static const GLubyte Helvetica10_Character_050[] = {  6,  0,  0,  0,248,128, 64, 48,  8,  8,136,112,  0,  0,  0};
-static const GLubyte Helvetica10_Character_051[] = {  6,  0,  0,  0,112,136,  8,  8, 48,  8,136,112,  0,  0,  0};
-static const GLubyte Helvetica10_Character_052[] = {  6,  0,  0,  0, 16, 16,248,144, 80, 80, 48, 16,  0,  0,  0};
-static const GLubyte Helvetica10_Character_053[] = {  6,  0,  0,  0,112,136,  8,  8,240,128,128,248,  0,  0,  0};
-static const GLubyte Helvetica10_Character_054[] = {  6,  0,  0,  0,112,136,136,200,176,128,136,112,  0,  0,  0};
-static const GLubyte Helvetica10_Character_055[] = {  6,  0,  0,  0, 64, 64, 32, 32, 16, 16,  8,248,  0,  0,  0};
-static const GLubyte Helvetica10_Character_056[] = {  6,  0,  0,  0,112,136,136,136,112,136,136,112,  0,  0,  0};
-static const GLubyte Helvetica10_Character_057[] = {  6,  0,  0,  0,112,136,  8,104,152,136,136,112,  0,  0,  0};
-static const GLubyte Helvetica10_Character_058[] = {  3,  0,  0,  0, 64,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_059[] = {  3,  0,128, 64, 64,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_060[] = {  6,  0,  0,  0,  0, 16, 32, 64, 32, 16,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_061[] = {  5,  0,  0,  0,  0,  0,240,  0,240,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_062[] = {  6,  0,  0,  0,  0, 64, 32, 16, 32, 64,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_063[] = {  6,  0,  0,  0, 32,  0, 32, 32, 16,  8, 72, 48,  0,  0,  0};
-static const GLubyte Helvetica10_Character_064[] = { 11,  0,  0, 62,  0, 64,  0,155,  0,164,128,164,128,162, 64,146, 64, 77, 64, 32,128, 31,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_065[] = {  7,  0,  0,  0,130,130,124, 68, 40, 40, 16, 16,  0,  0,  0};
-static const GLubyte Helvetica10_Character_066[] = {  7,  0,  0,  0,120, 68, 68, 68,120, 68, 68,120,  0,  0,  0};
-static const GLubyte Helvetica10_Character_067[] = {  8,  0,  0,  0, 60, 66, 64, 64, 64, 64, 66, 60,  0,  0,  0};
-static const GLubyte Helvetica10_Character_068[] = {  8,  0,  0,  0,120, 68, 66, 66, 66, 66, 68,120,  0,  0,  0};
-static const GLubyte Helvetica10_Character_069[] = {  7,  0,  0,  0,124, 64, 64, 64,124, 64, 64,124,  0,  0,  0};
-static const GLubyte Helvetica10_Character_070[] = {  6,  0,  0,  0, 64, 64, 64, 64,120, 64, 64,124,  0,  0,  0};
-static const GLubyte Helvetica10_Character_071[] = {  8,  0,  0,  0, 58, 70, 66, 70, 64, 64, 66, 60,  0,  0,  0};
-static const GLubyte Helvetica10_Character_072[] = {  8,  0,  0,  0, 66, 66, 66, 66,126, 66, 66, 66,  0,  0,  0};
-static const GLubyte Helvetica10_Character_073[] = {  3,  0,  0,  0, 64, 64, 64, 64, 64, 64, 64, 64,  0,  0,  0};
-static const GLubyte Helvetica10_Character_074[] = {  5,  0,  0,  0, 96,144, 16, 16, 16, 16, 16, 16,  0,  0,  0};
-static const GLubyte Helvetica10_Character_075[] = {  7,  0,  0,  0, 68, 68, 72, 72,112, 80, 72, 68,  0,  0,  0};
-static const GLubyte Helvetica10_Character_076[] = {  6,  0,  0,  0,120, 64, 64, 64, 64, 64, 64, 64,  0,  0,  0};
-static const GLubyte Helvetica10_Character_077[] = {  9,  0,  0,  0,  0,  0,  0, 73,  0, 73,  0, 73,  0, 85,  0, 85,  0, 99,  0, 99,  0, 65,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_078[] = {  8,  0,  0,  0, 70, 70, 74, 74, 82, 82, 98, 98,  0,  0,  0};
-static const GLubyte Helvetica10_Character_079[] = {  8,  0,  0,  0, 60, 66, 66, 66, 66, 66, 66, 60,  0,  0,  0};
-static const GLubyte Helvetica10_Character_080[] = {  7,  0,  0,  0, 64, 64, 64, 64,120, 68, 68,120,  0,  0,  0};
-static const GLubyte Helvetica10_Character_081[] = {  8,  0,  0,  1, 62, 70, 74, 66, 66, 66, 66, 60,  0,  0,  0};
-static const GLubyte Helvetica10_Character_082[] = {  7,  0,  0,  0, 68, 68, 68, 68,120, 68, 68,120,  0,  0,  0};
-static const GLubyte Helvetica10_Character_083[] = {  7,  0,  0,  0, 56, 68, 68,  4, 56, 64, 68, 56,  0,  0,  0};
-static const GLubyte Helvetica10_Character_084[] = {  5,  0,  0,  0, 32, 32, 32, 32, 32, 32, 32,248,  0,  0,  0};
-static const GLubyte Helvetica10_Character_085[] = {  8,  0,  0,  0, 60, 66, 66, 66, 66, 66, 66, 66,  0,  0,  0};
-static const GLubyte Helvetica10_Character_086[] = {  7,  0,  0,  0, 16, 40, 40, 68, 68, 68,130,130,  0,  0,  0};
-static const GLubyte Helvetica10_Character_087[] = {  9,  0,  0,  0,  0,  0,  0, 34,  0, 34,  0, 34,  0, 85,  0, 73,  0, 73,  0,136,128,136,128,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_088[] = {  7,  0,  0,  0, 68, 68, 40, 40, 16, 40, 68, 68,  0,  0,  0};
-static const GLubyte Helvetica10_Character_089[] = {  7,  0,  0,  0, 16, 16, 16, 40, 40, 68, 68,130,  0,  0,  0};
-static const GLubyte Helvetica10_Character_090[] = {  7,  0,  0,  0,124, 64, 32, 16, 16,  8,  4,124,  0,  0,  0};
-static const GLubyte Helvetica10_Character_091[] = {  3,  0, 96, 64, 64, 64, 64, 64, 64, 64, 64, 96,  0,  0,  0};
-static const GLubyte Helvetica10_Character_092[] = {  3,  0,  0,  0, 32, 32, 64, 64, 64, 64,128,128,  0,  0,  0};
-static const GLubyte Helvetica10_Character_093[] = {  3,  0,192, 64, 64, 64, 64, 64, 64, 64, 64,192,  0,  0,  0};
-static const GLubyte Helvetica10_Character_094[] = {  6,  0,  0,  0,  0,  0,  0,136, 80, 80, 32, 32,  0,  0,  0};
-static const GLubyte Helvetica10_Character_095[] = {  6,  0,252,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_096[] = {  3,  0,  0,  0,  0,  0,  0,  0,  0, 63, 64, 32,  0,  0,  0};
-static const GLubyte Helvetica10_Character_097[] = {  5,  0,  0,  0,104,144,144,112, 16,224,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_098[] = {  6,  0,  0,  0,176,200,136,136,200,176,128,128,  0,  0,  0};
-static const GLubyte Helvetica10_Character_099[] = {  5,  0,  0,  0, 96,144,128,128,144, 96,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_100[] = {  6,  0,  0,  0,104,152,136,136,152,104,  8,  8,  0,  0,  0};
-static const GLubyte Helvetica10_Character_101[] = {  5,  0,  0,  0, 96,144,128,240,144, 96,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_102[] = {  4,  0,  0,  0, 64, 64, 64, 64, 64,224, 64, 48,  0,  0,  0};
-static const GLubyte Helvetica10_Character_103[] = {  6,  0,112,  8,104,152,136,136,152,104,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_104[] = {  6,  0,  0,  0,136,136,136,136,200,176,128,128,  0,  0,  0};
-static const GLubyte Helvetica10_Character_105[] = {  2,  0,  0,  0,128,128,128,128,128,128,  0,128,  0,  0,  0};
-static const GLubyte Helvetica10_Character_106[] = {  2,  0,  0,128,128,128,128,128,128,128,  0,128,  0,  0,  0};
-static const GLubyte Helvetica10_Character_107[] = {  5,  0,  0,  0,144,144,160,192,160,144,128,128,  0,  0,  0};
-static const GLubyte Helvetica10_Character_108[] = {  2,  0,  0,  0,128,128,128,128,128,128,128,128,  0,  0,  0};
-static const GLubyte Helvetica10_Character_109[] = {  8,  0,  0,  0,146,146,146,146,146,236,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_110[] = {  6,  0,  0,  0,136,136,136,136,200,176,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_111[] = {  6,  0,  0,  0,112,136,136,136,136,112,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_112[] = {  6,  0,128,128,176,200,136,136,200,176,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_113[] = {  6,  0,  8,  8,104,152,136,136,152,104,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_114[] = {  4,  0,  0,  0,128,128,128,128,192,160,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_115[] = {  5,  0,  0,  0, 96,144, 16, 96,144, 96,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_116[] = {  4,  0,  0,  0, 96, 64, 64, 64, 64,224, 64, 64,  0,  0,  0};
-static const GLubyte Helvetica10_Character_117[] = {  5,  0,  0,  0,112,144,144,144,144,144,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_118[] = {  6,  0,  0,  0, 32, 32, 80, 80,136,136,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_119[] = {  8,  0,  0,  0, 40, 40, 84, 84,146,146,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_120[] = {  6,  0,  0,  0,136,136, 80, 32, 80,136,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_121[] = {  5,  0,128, 64, 64, 96,160,160,144,144,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_122[] = {  5,  0,  0,  0,240,128, 64, 32, 16,240,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_123[] = {  3,  0, 32, 64, 64, 64, 64,128, 64, 64, 64, 32,  0,  0,  0};
-static const GLubyte Helvetica10_Character_124[] = {  3,  0, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,  0,  0,  0};
-static const GLubyte Helvetica10_Character_125[] = {  3,  0,128, 64, 64, 64, 64, 32, 64, 64, 64,128,  0,  0,  0};
-static const GLubyte Helvetica10_Character_126[] = {  7,  0,  0,  0,  0,  0,  0,152,100,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_127[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_128[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_129[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_130[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_131[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_132[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_133[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_134[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_135[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_136[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_137[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_138[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_139[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_140[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_141[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_142[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_143[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_144[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_145[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_146[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_147[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_148[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_149[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_150[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_151[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_152[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_153[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_154[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_155[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_156[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_157[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_158[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_159[] = { 13,  0,  0,  0,  0,  0,  0, 84,  0,  0,  0, 68,  0,  0,  0, 68,  0,  0,  0, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_160[] = {  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_161[] = {  3,  0, 64, 64, 64, 64, 64, 64,  0, 64,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_162[] = {  6,  0,  0, 64,112,168,160,160,168,112, 16,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_163[] = {  6,  0,  0,  0,176, 72, 64, 64,224, 64, 72, 48,  0,  0,  0};
-static const GLubyte Helvetica10_Character_164[] = {  5,  0,  0,  0,  0,144, 96,144,144, 96,144,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_165[] = {  6,  0,  0,  0, 32,248, 32,248, 80, 80,136,136,  0,  0,  0};
-static const GLubyte Helvetica10_Character_166[] = {  3,  0, 64, 64, 64, 64,  0,  0, 64, 64, 64, 64,  0,  0,  0};
-static const GLubyte Helvetica10_Character_167[] = {  6,  0,112,136, 24,112,200,152,112,192,136,112,  0,  0,  0};
-static const GLubyte Helvetica10_Character_168[] = {  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,160,  0,  0,  0};
-static const GLubyte Helvetica10_Character_169[] = {  9,  0,  0,  0,  0,  0,  0, 28,  0, 34,  0, 77,  0, 81,  0, 77,  0, 34,  0, 28,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_170[] = {  4,  0,  0,  0,  0,  0,  0,224,  0,160, 32,224,  0,  0,  0};
-static const GLubyte Helvetica10_Character_171[] = {  6,  0,  0,  0, 40, 80,160, 80, 40,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_172[] = {  7,  0,  0,  0,  0,  0,  4,  4,124,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_173[] = {  4,  0,  0,  0,  0,  0,  0,224,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_174[] = {  9,  0,  0,  0,  0,  0,  0, 28,  0, 34,  0, 85,  0, 89,  0, 93,  0, 34,  0, 28,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_175[] = {  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,224,  0,  0,  0};
-static const GLubyte Helvetica10_Character_176[] = {  4,  0,  0,  0,  0,  0,  0, 96,144,144, 96,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_177[] = {  6,  0,  0,  0,248,  0, 32, 32,248, 32, 32,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_178[] = {  3,  0,  0,  0,  0,  0,  0,224, 64,160, 96,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_179[] = {  3,  0,  0,  0,  0,  0,  0,192, 32, 64,224,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_180[] = {  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,128, 64,  0,  0,  0};
-static const GLubyte Helvetica10_Character_181[] = {  5,  0,128,128,240,144,144,144,144,144,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_182[] = {  6,  0, 40, 40, 40, 40, 40,104,232,232,232,124,  0,  0,  0};
-static const GLubyte Helvetica10_Character_183[] = {  3,  0,  0,  0,  0,  0,  0,192,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_184[] = {  3,  0,192, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_185[] = {  3,  0,  0,  0,  0,  0,  0, 64, 64,192, 64,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_186[] = {  4,  0,  0,  0,  0,  0,  0,224,  0,224,160,224,  0,  0,  0};
-static const GLubyte Helvetica10_Character_187[] = {  6,  0,  0,  0,160, 80, 40, 80,160,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_188[] = {  9,  0,  0,  0,  0,  0,  0, 33,  0, 23,128, 19,  0,  9,  0, 72,  0, 68,  0,196,  0, 66,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_189[] = {  9,  0,  0,  0,  0,  0,  0, 39,  0, 18,  0, 21,  0, 11,  0, 72,  0, 68,  0,196,  0, 66,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_190[] = {  9,  0,  0,  0,  0,  0,  0, 33,  0, 23,128, 19,  0,  9,  0,200,  0, 36,  0, 68,  0,226,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_191[] = {  6,  0, 48, 72, 64, 32, 16, 16,  0, 16,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_192[] = {  7,  0,  0,  0,130,130,124, 68, 40, 40, 16, 16,  0, 16, 32};
-static const GLubyte Helvetica10_Character_193[] = {  7,  0,  0,  0,130,130,124, 68, 40, 40, 16, 16,  0, 16,  8};
-static const GLubyte Helvetica10_Character_194[] = {  7,  0,  0,  0,130,130,124, 68, 40, 40, 16, 16,  0, 40, 16};
-static const GLubyte Helvetica10_Character_195[] = {  7,  0,  0,  0,130,130,124, 68, 40, 40, 16, 16,  0, 40, 20};
-static const GLubyte Helvetica10_Character_196[] = {  7,  0,  0,  0,130,130,124, 68, 40, 40, 16, 16,  0, 40,  0};
-static const GLubyte Helvetica10_Character_197[] = {  7,  0,  0,  0,130,130,124, 68, 40, 40, 16, 16, 16, 40, 16};
-static const GLubyte Helvetica10_Character_198[] = { 10,  0,  0,  0,  0,  0,  0,143,128,136,  0,120,  0, 72,  0, 47,128, 40,  0, 24,  0, 31,128,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_199[] = {  8,  0, 24,  8, 60, 66, 64, 64, 64, 64, 66, 60,  0,  0,  0};
-static const GLubyte Helvetica10_Character_200[] = {  7,  0,  0,  0,124, 64, 64, 64,124, 64, 64,124,  0, 16, 32};
-static const GLubyte Helvetica10_Character_201[] = {  7,  0,  0,  0,124, 64, 64, 64,124, 64, 64,124,  0, 16,  8};
-static const GLubyte Helvetica10_Character_202[] = {  7,  0,  0,  0,124, 64, 64,124, 64, 64, 64,124,  0, 40, 16};
-static const GLubyte Helvetica10_Character_203[] = {  7,  0,  0,  0,124, 64, 64, 64,124, 64, 64,124,  0, 40,  0};
-static const GLubyte Helvetica10_Character_204[] = {  3,  0,  0,  0, 64, 64, 64, 64, 64, 64, 64, 64,  0, 64,128};
-static const GLubyte Helvetica10_Character_205[] = {  3,  0,  0,  0, 64, 64, 64, 64, 64, 64, 64, 64,  0, 64, 32};
-static const GLubyte Helvetica10_Character_206[] = {  3,  0,  0,  0, 64, 64, 64, 64, 64, 64, 64, 64,  0,160, 64};
-static const GLubyte Helvetica10_Character_207[] = {  3,  0,  0,  0, 64, 64, 64, 64, 64, 64, 64, 64,  0,160,  0};
-static const GLubyte Helvetica10_Character_208[] = {  8,  0,  0,  0,120, 68, 66, 66,242, 66, 68,120,  0,  0,  0};
-static const GLubyte Helvetica10_Character_209[] = {  8,  0,  0,  0, 70, 70, 74, 74, 82, 82, 98, 98,  0, 40, 20};
-static const GLubyte Helvetica10_Character_210[] = {  8,  0,  0,  0, 60, 66, 66, 66, 66, 66, 66, 60,  0,  8, 16};
-static const GLubyte Helvetica10_Character_211[] = {  8,  0,  0,  0, 60, 66, 66, 66, 66, 66, 66, 60,  0,  8,  4};
-static const GLubyte Helvetica10_Character_212[] = {  8,  0,  0,  0, 60, 66, 66, 66, 66, 66, 66, 60,  0, 20,  8};
-static const GLubyte Helvetica10_Character_213[] = {  8,  0,  0,  0, 60, 66, 66, 66, 66, 66, 66, 60,  0, 40, 20};
-static const GLubyte Helvetica10_Character_214[] = {  8,  0,  0,  0, 60, 66, 66, 66, 66, 66, 66, 60,  0, 36,  0};
-static const GLubyte Helvetica10_Character_215[] = {  6,  0,  0,  0,  0,136, 80, 32, 80,136,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_216[] = {  8,  0,  0, 64, 60, 98, 82, 82, 74, 74, 70, 60,  2,  0,  0};
-static const GLubyte Helvetica10_Character_217[] = {  8,  0,  0,  0, 60, 66, 66, 66, 66, 66, 66, 66,  0,  8, 16};
-static const GLubyte Helvetica10_Character_218[] = {  8,  0,  0,  0, 60, 66, 66, 66, 66, 66, 66, 66,  0, 16,  8};
-static const GLubyte Helvetica10_Character_219[] = {  8,  0,  0,  0, 60, 66, 66, 66, 66, 66, 66, 66,  0, 20,  8};
-static const GLubyte Helvetica10_Character_220[] = {  8,  0,  0,  0, 60, 66, 66, 66, 66, 66, 66, 66,  0, 36,  0};
-static const GLubyte Helvetica10_Character_221[] = {  7,  0,  0,  0, 16, 16, 16, 40, 40, 68, 68,130,  0, 16,  8};
-static const GLubyte Helvetica10_Character_222[] = {  7,  0,  0,  0, 64, 64,120, 68, 68,120, 64, 64,  0,  0,  0};
-static const GLubyte Helvetica10_Character_223[] = {  5,  0,  0,  0,160,144,144,144,160,144,144, 96,  0,  0,  0};
-static const GLubyte Helvetica10_Character_224[] = {  5,  0,  0,  0,104,144,144,112, 16,224,  0, 32, 64,  0,  0};
-static const GLubyte Helvetica10_Character_225[] = {  5,  0,  0,  0,104,144,144,112, 16,224,  0, 32, 16,  0,  0};
-static const GLubyte Helvetica10_Character_226[] = {  5,  0,  0,  0,104,144,144,112, 16,224,  0, 80, 32,  0,  0};
-static const GLubyte Helvetica10_Character_227[] = {  5,  0,  0,  0,104,144,144,112, 16,224,  0,160, 80,  0,  0};
-static const GLubyte Helvetica10_Character_228[] = {  5,  0,  0,  0,104,144,144,112, 16,224,  0, 80,  0,  0,  0};
-static const GLubyte Helvetica10_Character_229[] = {  5,  0,  0,  0,104,144,144,112, 16,224, 32, 80, 32,  0,  0};
-static const GLubyte Helvetica10_Character_230[] = {  8,  0,  0,  0,108,146,144,126, 18,236,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_231[] = {  5,  0, 96, 32, 96,144,128,128,144, 96,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_232[] = {  5,  0,  0,  0, 96,144,128,240,144, 96,  0, 32, 64,  0,  0};
-static const GLubyte Helvetica10_Character_233[] = {  5,  0,  0,  0, 96,144,128,240,144, 96,  0, 64, 32,  0,  0};
-static const GLubyte Helvetica10_Character_234[] = {  5,  0,  0,  0, 96,144,128,240,144, 96,  0, 80, 32,  0,  0};
-static const GLubyte Helvetica10_Character_235[] = {  5,  0,  0,  0, 96,144,128,240,144, 96,  0, 80,  0,  0,  0};
-static const GLubyte Helvetica10_Character_236[] = {  2,  0,  0,  0,128,128,128,128,128,128,  0,128,  0,  0,  0};
-static const GLubyte Helvetica10_Character_237[] = {  2,  0,  0,  0,128,128,128,128,128,128,  0,128, 64,  0,  0};
-static const GLubyte Helvetica10_Character_238[] = {  2,  0,  0,  0,128,128,128,128,128,128,  0, 64,128,  0,  0};
-static const GLubyte Helvetica10_Character_239[] = {  2,  0,  0,  0, 64, 64, 64, 64, 64, 64,  0,160,  0,  0,  0};
-static const GLubyte Helvetica10_Character_240[] = {  6,  0,  0,  0,112,136,136,136,136,120,144, 96, 80,  0,  0};
-static const GLubyte Helvetica10_Character_241[] = {  5,  0,  0,  0,144,144,144,144,144,224,  0,160, 80,  0,  0};
-static const GLubyte Helvetica10_Character_242[] = {  6,  0,  0,  0,112,136,136,136,136,112,  0, 32, 64,  0,  0};
-static const GLubyte Helvetica10_Character_243[] = {  6,  0,  0,  0,112,136,136,136,136,112,  0, 32, 16,  0,  0};
-static const GLubyte Helvetica10_Character_244[] = {  6,  0,  0,  0,112,136,136,136,136,112,  0, 80, 32,  0,  0};
-static const GLubyte Helvetica10_Character_245[] = {  6,  0,  0,  0,112,136,136,136,136,112,  0, 80, 40,  0,  0};
-static const GLubyte Helvetica10_Character_246[] = {  6,  0,  0,  0,112,136,136,136,136,112,  0, 80,  0,  0,  0};
-static const GLubyte Helvetica10_Character_247[] = {  6,  0,  0,  0,  0, 32,  0,248,  0, 32,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_248[] = {  6,  0,  0,  0,112,136,200,168,152,116,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica10_Character_249[] = {  5,  0,  0,  0,112,144,144,144,144,144,  0, 32, 64,  0,  0};
-static const GLubyte Helvetica10_Character_250[] = {  5,  0,  0,  0,112,144,144,144,144,144,  0, 64, 32,  0,  0};
-static const GLubyte Helvetica10_Character_251[] = {  5,  0,  0,  0,112,144,144,144,144,144,  0, 80, 32,  0,  0};
-static const GLubyte Helvetica10_Character_252[] = {  5,  0,  0,  0,112,144,144,144,144,144,  0, 80,  0,  0,  0};
-static const GLubyte Helvetica10_Character_253[] = {  5,  0,128, 64, 64, 96,160,160,144,144,  0, 32, 16,  0,  0};
-static const GLubyte Helvetica10_Character_254[] = {  6,  0,128,128,176,200,136,136,200,176,128,128,  0,  0,  0};
-static const GLubyte Helvetica10_Character_255[] = {  5,  0,128, 64, 64, 96,160,160,144,144,  0, 80,  0,  0,  0};
-
-/* The font characters mapping: */
-static const GLubyte* Helvetica10_Character_Map[] = {Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,
-                                                     Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,
-                                                     Helvetica10_Character_032,Helvetica10_Character_033,Helvetica10_Character_034,Helvetica10_Character_035,Helvetica10_Character_036,Helvetica10_Character_037,Helvetica10_Character_038,Helvetica10_Character_039,Helvetica10_Character_040,Helvetica10_Character_041,Helvetica10_Character_042,Helvetica10_Character_043,Helvetica10_Character_044,Helvetica10_Character_045,Helvetica10_Character_046,Helvetica10_Character_047,
-                                                     Helvetica10_Character_048,Helvetica10_Character_049,Helvetica10_Character_050,Helvetica10_Character_051,Helvetica10_Character_052,Helvetica10_Character_053,Helvetica10_Character_054,Helvetica10_Character_055,Helvetica10_Character_056,Helvetica10_Character_057,Helvetica10_Character_058,Helvetica10_Character_059,Helvetica10_Character_060,Helvetica10_Character_061,Helvetica10_Character_062,Helvetica10_Character_063,
-                                                     Helvetica10_Character_064,Helvetica10_Character_065,Helvetica10_Character_066,Helvetica10_Character_067,Helvetica10_Character_068,Helvetica10_Character_069,Helvetica10_Character_070,Helvetica10_Character_071,Helvetica10_Character_072,Helvetica10_Character_073,Helvetica10_Character_074,Helvetica10_Character_075,Helvetica10_Character_076,Helvetica10_Character_077,Helvetica10_Character_078,Helvetica10_Character_079,
-                                                     Helvetica10_Character_080,Helvetica10_Character_081,Helvetica10_Character_082,Helvetica10_Character_083,Helvetica10_Character_084,Helvetica10_Character_085,Helvetica10_Character_086,Helvetica10_Character_087,Helvetica10_Character_088,Helvetica10_Character_089,Helvetica10_Character_090,Helvetica10_Character_091,Helvetica10_Character_092,Helvetica10_Character_093,Helvetica10_Character_094,Helvetica10_Character_095,
-                                                     Helvetica10_Character_096,Helvetica10_Character_097,Helvetica10_Character_098,Helvetica10_Character_099,Helvetica10_Character_100,Helvetica10_Character_101,Helvetica10_Character_102,Helvetica10_Character_103,Helvetica10_Character_104,Helvetica10_Character_105,Helvetica10_Character_106,Helvetica10_Character_107,Helvetica10_Character_108,Helvetica10_Character_109,Helvetica10_Character_110,Helvetica10_Character_111,
-                                                     Helvetica10_Character_112,Helvetica10_Character_113,Helvetica10_Character_114,Helvetica10_Character_115,Helvetica10_Character_116,Helvetica10_Character_117,Helvetica10_Character_118,Helvetica10_Character_119,Helvetica10_Character_120,Helvetica10_Character_121,Helvetica10_Character_122,Helvetica10_Character_123,Helvetica10_Character_124,Helvetica10_Character_125,Helvetica10_Character_126,Helvetica10_Character_032,
-                                                     Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,
-                                                     Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,Helvetica10_Character_032,
-                                                     Helvetica10_Character_160,Helvetica10_Character_161,Helvetica10_Character_162,Helvetica10_Character_163,Helvetica10_Character_164,Helvetica10_Character_165,Helvetica10_Character_166,Helvetica10_Character_167,Helvetica10_Character_168,Helvetica10_Character_169,Helvetica10_Character_170,Helvetica10_Character_171,Helvetica10_Character_172,Helvetica10_Character_173,Helvetica10_Character_174,Helvetica10_Character_175,
-                                                     Helvetica10_Character_176,Helvetica10_Character_177,Helvetica10_Character_178,Helvetica10_Character_179,Helvetica10_Character_180,Helvetica10_Character_181,Helvetica10_Character_182,Helvetica10_Character_183,Helvetica10_Character_184,Helvetica10_Character_185,Helvetica10_Character_186,Helvetica10_Character_187,Helvetica10_Character_188,Helvetica10_Character_189,Helvetica10_Character_190,Helvetica10_Character_191,
-                                                     Helvetica10_Character_192,Helvetica10_Character_193,Helvetica10_Character_194,Helvetica10_Character_195,Helvetica10_Character_196,Helvetica10_Character_197,Helvetica10_Character_198,Helvetica10_Character_199,Helvetica10_Character_200,Helvetica10_Character_201,Helvetica10_Character_202,Helvetica10_Character_203,Helvetica10_Character_204,Helvetica10_Character_205,Helvetica10_Character_206,Helvetica10_Character_207,
-                                                     Helvetica10_Character_208,Helvetica10_Character_209,Helvetica10_Character_210,Helvetica10_Character_211,Helvetica10_Character_212,Helvetica10_Character_213,Helvetica10_Character_214,Helvetica10_Character_215,Helvetica10_Character_216,Helvetica10_Character_217,Helvetica10_Character_218,Helvetica10_Character_219,Helvetica10_Character_220,Helvetica10_Character_221,Helvetica10_Character_222,Helvetica10_Character_223,
-                                                     Helvetica10_Character_224,Helvetica10_Character_225,Helvetica10_Character_226,Helvetica10_Character_227,Helvetica10_Character_228,Helvetica10_Character_229,Helvetica10_Character_230,Helvetica10_Character_231,Helvetica10_Character_232,Helvetica10_Character_233,Helvetica10_Character_234,Helvetica10_Character_235,Helvetica10_Character_236,Helvetica10_Character_237,Helvetica10_Character_238,Helvetica10_Character_239,
-                                                     Helvetica10_Character_240,Helvetica10_Character_241,Helvetica10_Character_242,Helvetica10_Character_243,Helvetica10_Character_244,Helvetica10_Character_245,Helvetica10_Character_246,Helvetica10_Character_247,Helvetica10_Character_248,Helvetica10_Character_249,Helvetica10_Character_250,Helvetica10_Character_251,Helvetica10_Character_252,Helvetica10_Character_253,Helvetica10_Character_254,Helvetica10_Character_255,NULL};
-
-/* The font structure: */
-const SFG_Font fgFontHelvetica10 = { "-adobe-helvetica-medium-r-normal--10-100-75-75-p-56-iso8859-1", 256, 14, Helvetica10_Character_Map, 0, 3 };
-
-static const GLubyte Helvetica12_Character_000[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_001[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_002[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_003[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_004[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_005[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_006[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_007[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_008[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_009[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_010[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_011[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_012[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_013[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_014[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_015[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_016[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_017[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_018[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_019[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_020[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_021[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_022[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_023[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_024[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_025[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_026[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_027[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_028[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_029[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_030[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_031[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_032[] = {  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_033[] = {  3,  0,  0,  0,  0, 64,  0, 64, 64, 64, 64, 64, 64, 64,  0,  0,  0};
-static const GLubyte Helvetica12_Character_034[] = {  5,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 80, 80, 80,  0,  0,  0};
-static const GLubyte Helvetica12_Character_035[] = {  7,  0,  0,  0,  0, 80, 80, 80,252, 40,252, 40, 40,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_036[] = {  7,  0,  0,  0, 16, 56, 84, 84, 20, 56, 80, 84, 56, 16,  0,  0,  0};
-static const GLubyte Helvetica12_Character_037[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0, 17,128, 10, 64, 10, 64,  9,128,  4,  0, 52,  0, 74,  0, 74,  0, 49,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_038[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 57,  0, 70,  0, 66,  0, 69,  0, 40,  0, 24,  0, 36,  0, 36,  0, 24,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_039[] = {  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64, 32, 96,  0,  0,  0};
-static const GLubyte Helvetica12_Character_040[] = {  4,  0, 16, 32, 32, 64, 64, 64, 64, 64, 64, 32, 32, 16,  0,  0,  0};
-static const GLubyte Helvetica12_Character_041[] = {  4,  0,128, 64, 64, 32, 32, 32, 32, 32, 32, 64, 64,128,  0,  0,  0};
-static const GLubyte Helvetica12_Character_042[] = {  5,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 80, 32, 80,  0,  0,  0};
-static const GLubyte Helvetica12_Character_043[] = {  7,  0,  0,  0,  0,  0, 16, 16,124, 16, 16,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_044[] = {  4,  0,  0, 64, 32, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_045[] = {  8,  0,  0,  0,  0,  0,  0,  0,124,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_046[] = {  3,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_047[] = {  4,  0,  0,  0,  0,128,128, 64, 64, 64, 32, 32, 16, 16,  0,  0,  0};
-static const GLubyte Helvetica12_Character_048[] = {  7,  0,  0,  0,  0, 56, 68, 68, 68, 68, 68, 68, 68, 56,  0,  0,  0};
-static const GLubyte Helvetica12_Character_049[] = {  7,  0,  0,  0,  0, 16, 16, 16, 16, 16, 16, 16,112, 16,  0,  0,  0};
-static const GLubyte Helvetica12_Character_050[] = {  7,  0,  0,  0,  0,124, 64, 64, 32, 16,  8,  4, 68, 56,  0,  0,  0};
-static const GLubyte Helvetica12_Character_051[] = {  7,  0,  0,  0,  0, 56, 68, 68,  4,  4, 24,  4, 68, 56,  0,  0,  0};
-static const GLubyte Helvetica12_Character_052[] = {  7,  0,  0,  0,  0,  8,  8,252,136, 72, 40, 40, 24,  8,  0,  0,  0};
-static const GLubyte Helvetica12_Character_053[] = {  7,  0,  0,  0,  0, 56, 68, 68,  4,  4,120, 64, 64,124,  0,  0,  0};
-static const GLubyte Helvetica12_Character_054[] = {  7,  0,  0,  0,  0, 56, 68, 68, 68,100, 88, 64, 68, 56,  0,  0,  0};
-static const GLubyte Helvetica12_Character_055[] = {  7,  0,  0,  0,  0, 32, 32, 16, 16, 16,  8,  8,  4,124,  0,  0,  0};
-static const GLubyte Helvetica12_Character_056[] = {  7,  0,  0,  0,  0, 56, 68, 68, 68, 68, 56, 68, 68, 56,  0,  0,  0};
-static const GLubyte Helvetica12_Character_057[] = {  7,  0,  0,  0,  0, 56, 68,  4,  4, 60, 68, 68, 68, 56,  0,  0,  0};
-static const GLubyte Helvetica12_Character_058[] = {  3,  0,  0,  0,  0, 64,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_059[] = {  3,  0,  0,128, 64, 64,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_060[] = {  7,  0,  0,  0,  0,  0, 12, 48,192, 48, 12,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_061[] = {  7,  0,  0,  0,  0,  0,  0,124,  0,124,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_062[] = {  7,  0,  0,  0,  0,  0, 96, 24,  6, 24, 96,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_063[] = {  7,  0,  0,  0,  0, 16,  0, 16, 16,  8,  8, 68, 68, 56,  0,  0,  0};
-static const GLubyte Helvetica12_Character_064[] = { 12,  0,  0,  0,  0,  0,  0, 31,  0, 32,  0, 77,128, 83, 64, 81, 32, 81, 32, 73, 32, 38,160, 48, 64, 15,128,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_065[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 65,  0, 65,  0, 62,  0, 34,  0, 34,  0, 20,  0, 20,  0,  8,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_066[] = {  8,  0,  0,  0,  0,124, 66, 66, 66,124, 66, 66, 66,124,  0,  0,  0};
-static const GLubyte Helvetica12_Character_067[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 30,  0, 33,  0, 64,  0, 64,  0, 64,  0, 64,  0, 64,  0, 33,  0, 30,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_068[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,124,  0, 66,  0, 65,  0, 65,  0, 65,  0, 65,  0, 65,  0, 66,  0,124,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_069[] = {  8,  0,  0,  0,  0,126, 64, 64, 64,126, 64, 64, 64,126,  0,  0,  0};
-static const GLubyte Helvetica12_Character_070[] = {  8,  0,  0,  0,  0, 64, 64, 64, 64,124, 64, 64, 64,126,  0,  0,  0};
-static const GLubyte Helvetica12_Character_071[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 29,  0, 35,  0, 65,  0, 65,  0, 71,  0, 64,  0, 64,  0, 33,  0, 30,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_072[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 65,  0, 65,  0, 65,  0,127,  0, 65,  0, 65,  0, 65,  0, 65,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_073[] = {  3,  0,  0,  0,  0, 64, 64, 64, 64, 64, 64, 64, 64, 64,  0,  0,  0};
-static const GLubyte Helvetica12_Character_074[] = {  7,  0,  0,  0,  0, 56, 68, 68,  4,  4,  4,  4,  4,  4,  0,  0,  0};
-static const GLubyte Helvetica12_Character_075[] = {  8,  0,  0,  0,  0, 65, 66, 68, 72,112, 80, 72, 68, 66,  0,  0,  0};
-static const GLubyte Helvetica12_Character_076[] = {  7,  0,  0,  0,  0,124, 64, 64, 64, 64, 64, 64, 64, 64,  0,  0,  0};
-static const GLubyte Helvetica12_Character_077[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0, 68, 64, 68, 64, 74, 64, 74, 64, 81, 64, 81, 64, 96,192, 96,192, 64, 64,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_078[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 67,  0, 69,  0, 69,  0, 73,  0, 81,  0, 81,  0, 97,  0, 65,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_079[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 30,  0, 33,  0, 64,128, 64,128, 64,128, 64,128, 64,128, 33,  0, 30,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_080[] = {  8,  0,  0,  0,  0, 64, 64, 64, 64,124, 66, 66, 66,124,  0,  0,  0};
-static const GLubyte Helvetica12_Character_081[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 30,128, 33,  0, 66,128, 68,128, 64,128, 64,128, 64,128, 33,  0, 30,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_082[] = {  8,  0,  0,  0,  0, 66, 66, 66, 68,124, 66, 66, 66,124,  0,  0,  0};
-static const GLubyte Helvetica12_Character_083[] = {  8,  0,  0,  0,  0, 60, 66, 66,  2, 12, 48, 64, 66, 60,  0,  0,  0};
-static const GLubyte Helvetica12_Character_084[] = {  7,  0,  0,  0,  0, 16, 16, 16, 16, 16, 16, 16, 16,254,  0,  0,  0};
-static const GLubyte Helvetica12_Character_085[] = {  8,  0,  0,  0,  0, 60, 66, 66, 66, 66, 66, 66, 66, 66,  0,  0,  0};
-static const GLubyte Helvetica12_Character_086[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  8,  0, 20,  0, 20,  0, 34,  0, 34,  0, 34,  0, 65,  0, 65,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_087[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0, 17,  0, 17,  0, 17,  0, 42,128, 42,128, 36,128, 68, 64, 68, 64, 68, 64,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_088[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 34,  0, 34,  0, 20,  0,  8,  0, 20,  0, 34,  0, 34,  0, 65,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_089[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  8,  0,  8,  0,  8,  0, 20,  0, 34,  0, 34,  0, 65,  0, 65,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_090[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,127,  0, 64,  0, 32,  0, 16,  0,  8,  0,  4,  0,  2,  0,  1,  0,127,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_091[] = {  3,  0, 96, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 96,  0,  0,  0};
-static const GLubyte Helvetica12_Character_092[] = {  4,  0,  0,  0,  0, 16, 16, 32, 32, 32, 64, 64,128,128,  0,  0,  0};
-static const GLubyte Helvetica12_Character_093[] = {  3,  0,192, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,192,  0,  0,  0};
-static const GLubyte Helvetica12_Character_094[] = {  6,  0,  0,  0,  0,  0,  0,  0,  0,  0,136, 80, 32,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_095[] = {  7,  0,  0,254,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_096[] = {  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,192,128, 64,  0,  0,  0};
-static const GLubyte Helvetica12_Character_097[] = {  7,  0,  0,  0,  0, 58, 68, 68, 60,  4, 68, 56,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_098[] = {  7,  0,  0,  0,  0, 88,100, 68, 68, 68,100, 88, 64, 64,  0,  0,  0};
-static const GLubyte Helvetica12_Character_099[] = {  7,  0,  0,  0,  0, 56, 68, 64, 64, 64, 68, 56,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_100[] = {  7,  0,  0,  0,  0, 52, 76, 68, 68, 68, 76, 52,  4,  4,  0,  0,  0};
-static const GLubyte Helvetica12_Character_101[] = {  7,  0,  0,  0,  0, 56, 68, 64,124, 68, 68, 56,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_102[] = {  3,  0,  0,  0,  0, 64, 64, 64, 64, 64, 64,224, 64, 48,  0,  0,  0};
-static const GLubyte Helvetica12_Character_103[] = {  7,  0, 56, 68,  4, 52, 76, 68, 68, 68, 76, 52,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_104[] = {  7,  0,  0,  0,  0, 68, 68, 68, 68, 68,100, 88, 64, 64,  0,  0,  0};
-static const GLubyte Helvetica12_Character_105[] = {  3,  0,  0,  0,  0, 64, 64, 64, 64, 64, 64, 64,  0, 64,  0,  0,  0};
-static const GLubyte Helvetica12_Character_106[] = {  3,  0,128, 64, 64, 64, 64, 64, 64, 64, 64, 64,  0, 64,  0,  0,  0};
-static const GLubyte Helvetica12_Character_107[] = {  6,  0,  0,  0,  0, 68, 72, 80, 96, 96, 80, 72, 64, 64,  0,  0,  0};
-static const GLubyte Helvetica12_Character_108[] = {  3,  0,  0,  0,  0, 64, 64, 64, 64, 64, 64, 64, 64, 64,  0,  0,  0};
-static const GLubyte Helvetica12_Character_109[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 73,  0, 73,  0, 73,  0, 73,  0, 73,  0,109,  0, 82,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_110[] = {  7,  0,  0,  0,  0, 68, 68, 68, 68, 68,100, 88,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_111[] = {  7,  0,  0,  0,  0, 56, 68, 68, 68, 68, 68, 56,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_112[] = {  7,  0, 64, 64, 64, 88,100, 68, 68, 68,100, 88,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_113[] = {  7,  0,  4,  4,  4, 52, 76, 68, 68, 68, 76, 52,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_114[] = {  4,  0,  0,  0,  0, 64, 64, 64, 64, 64, 96, 80,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_115[] = {  6,  0,  0,  0,  0, 48, 72,  8, 48, 64, 72, 48,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_116[] = {  3,  0,  0,  0,  0, 96, 64, 64, 64, 64, 64,224, 64, 64,  0,  0,  0};
-static const GLubyte Helvetica12_Character_117[] = {  7,  0,  0,  0,  0, 52, 76, 68, 68, 68, 68, 68,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_118[] = {  7,  0,  0,  0,  0, 16, 16, 40, 40, 68, 68, 68,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_119[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 34,  0, 34,  0, 85,  0, 73,  0, 73,  0,136,128,136,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_120[] = {  6,  0,  0,  0,  0,132,132, 72, 48, 48, 72,132,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_121[] = {  7,  0, 64, 32, 16, 16, 40, 40, 72, 68, 68, 68,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_122[] = {  6,  0,  0,  0,  0,120, 64, 32, 32, 16,  8,120,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_123[] = {  4,  0, 48, 64, 64, 64, 64, 64,128, 64, 64, 64, 64, 48,  0,  0,  0};
-static const GLubyte Helvetica12_Character_124[] = {  3,  0, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,  0,  0,  0};
-static const GLubyte Helvetica12_Character_125[] = {  4,  0,192, 32, 32, 32, 32, 32, 16, 32, 32, 32, 32,192,  0,  0,  0};
-static const GLubyte Helvetica12_Character_126[] = {  7,  0,  0,  0,  0,  0,  0,  0,152,100,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_127[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_128[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_129[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_130[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_131[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_132[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_133[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_134[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_135[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_136[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_137[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_138[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_139[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_140[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_141[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_142[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_143[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_144[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_145[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_146[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_147[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_148[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_149[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_150[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_151[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_152[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_153[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_154[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_155[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_156[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_157[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_158[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_159[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0, 85,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 65,  0,  0,  0, 85,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_160[] = {  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_161[] = {  3,  0, 64, 64, 64, 64, 64, 64, 64, 64,  0, 64,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_162[] = {  7,  0,  0,  0, 32, 56,100, 80, 80, 80, 84, 56,  8,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_163[] = {  7,  0,  0,  0,  0, 88, 36, 16, 16,120, 32, 32, 36, 24,  0,  0,  0};
-static const GLubyte Helvetica12_Character_164[] = {  7,  0,  0,  0,  0,  0,132,120, 72, 72,120,132,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_165[] = {  7,  0,  0,  0,  0, 16, 16,124, 16,124, 16, 40, 68, 68,  0,  0,  0};
-static const GLubyte Helvetica12_Character_166[] = {  3,  0,  0, 64, 64, 64, 64,  0,  0,  0, 64, 64, 64, 64,  0,  0,  0};
-static const GLubyte Helvetica12_Character_167[] = {  6,  0,112,136,  8, 48, 72,136,136,144, 96,128,136,112,  0,  0,  0};
-static const GLubyte Helvetica12_Character_168[] = {  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,160,  0,  0,  0};
-static const GLubyte Helvetica12_Character_169[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0, 31,  0, 32,128, 78, 64, 81, 64, 80, 64, 81, 64, 78, 64, 32,128, 31,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_170[] = {  5,  0,  0,  0,  0,  0,  0,  0,  0,112,  0, 80, 16,112,  0,  0,  0};
-static const GLubyte Helvetica12_Character_171[] = {  7,  0,  0,  0,  0,  0, 20, 40, 80, 40, 20,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_172[] = {  8,  0,  0,  0,  0,  0,  0,  2,  2,  2,126,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_173[] = {  5,  0,  0,  0,  0,  0,  0,  0,240,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_174[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0, 31,  0, 32,128, 74, 64, 74, 64, 76, 64, 74, 64, 78, 64, 32,128, 31,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_175[] = {  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,240,  0,  0,  0};
-static const GLubyte Helvetica12_Character_176[] = {  5,  0,  0,  0,  0,  0,  0,  0,  0, 96,144,144, 96,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_177[] = {  7,  0,  0,  0,  0,124,  0, 16, 16,124, 16, 16,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_178[] = {  4,  0,  0,  0,  0,  0,  0,  0,240, 64, 32,144, 96,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_179[] = {  4,  0,  0,  0,  0,  0,  0,  0,192, 32, 64, 32,224,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_180[] = {  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128, 64,  0,  0};
-static const GLubyte Helvetica12_Character_181[] = {  7,  0, 64, 64, 64,116, 76, 68, 68, 68, 68, 68,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_182[] = {  7,  0, 40, 40, 40, 40, 40, 40,104,232,232,232,104, 60,  0,  0,  0};
-static const GLubyte Helvetica12_Character_183[] = {  3,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_184[] = {  3,  0,192, 32, 32, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_185[] = {  4,  0,  0,  0,  0,  0,  0,  0, 32, 32, 32, 96, 32,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_186[] = {  5,  0,  0,  0,  0,  0,  0,  0,  0,112,  0,112, 80,112,  0,  0,  0};
-static const GLubyte Helvetica12_Character_187[] = {  7,  0,  0,  0,  0,  0, 80, 40, 20, 40, 80,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_188[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 39,128, 21,  0, 19,  0, 73,  0, 68,  0, 68,  0,194,  0, 65,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_189[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 71,128, 34,  0, 17,  0, 20,128, 75,  0, 72,  0, 68,  0,194,  0, 65,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_190[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 33,  0, 23,128, 21,  0, 11,  0,201,  0, 36,  0, 68,  0, 34,  0,225,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_191[] = {  7,  0, 56, 68, 68, 32, 32, 16, 16,  0, 16,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_192[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 65,  0, 65,  0, 62,  0, 34,  0, 34,  0, 20,  0,  8,  0,  8,  0,  0,  0,  8,  0, 16,  0};
-static const GLubyte Helvetica12_Character_193[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 65,  0, 65,  0, 62,  0, 34,  0, 34,  0, 20,  0,  8,  0,  8,  0,  0,  0,  8,  0,  4,  0};
-static const GLubyte Helvetica12_Character_194[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 65,  0, 65,  0, 62,  0, 34,  0, 34,  0, 20,  0,  8,  0,  8,  0,  0,  0, 20,  0,  8,  0};
-static const GLubyte Helvetica12_Character_195[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 65,  0, 65,  0, 62,  0, 34,  0, 34,  0, 20,  0,  8,  0,  8,  0,  0,  0, 20,  0, 10,  0};
-static const GLubyte Helvetica12_Character_196[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 65,  0, 65,  0, 62,  0, 34,  0, 34,  0, 20,  0,  8,  0,  8,  0,  0,  0, 20,  0,  0,  0};
-static const GLubyte Helvetica12_Character_197[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 65,  0, 65,  0, 62,  0, 34,  0, 34,  0, 20,  0,  8,  0,  8,  0,  8,  0, 20,  0,  8,  0};
-static const GLubyte Helvetica12_Character_198[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0, 71,192, 68,  0, 68,  0, 60,  0, 39,192, 36,  0, 20,  0, 20,  0, 15,192,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_199[] = {  9,  0,  0, 24,  0,  4,  0,  4,  0, 30,  0, 33,  0, 64,  0, 64,  0, 64,  0, 64,  0, 64,  0, 33,  0, 30,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_200[] = {  8,  0,  0,  0,  0,126, 64, 64, 64,126, 64, 64, 64,126,  0,  8, 16};
-static const GLubyte Helvetica12_Character_201[] = {  8,  0,  0,  0,  0,126, 64, 64, 64,126, 64, 64, 64,126,  0,  8,  4};
-static const GLubyte Helvetica12_Character_202[] = {  8,  0,  0,  0,  0,126, 64, 64, 64,126, 64, 64, 64,126,  0, 20,  8};
-static const GLubyte Helvetica12_Character_203[] = {  8,  0,  0,  0,  0,126, 64, 64, 64,126, 64, 64, 64,126,  0, 20,  0};
-static const GLubyte Helvetica12_Character_204[] = {  3,  0,  0,  0,  0, 64, 64, 64, 64, 64, 64, 64, 64, 64,  0, 64,128};
-static const GLubyte Helvetica12_Character_205[] = {  3,  0,  0,  0,  0, 64, 64, 64, 64, 64, 64, 64, 64, 64,  0, 64, 32};
-static const GLubyte Helvetica12_Character_206[] = {  3,  0,  0,  0,  0, 64, 64, 64, 64, 64, 64, 64, 64, 64,  0,160, 64};
-static const GLubyte Helvetica12_Character_207[] = {  3,  0,  0,  0,  0, 64, 64, 64, 64, 64, 64, 64, 64, 64,  0,160,  0};
-static const GLubyte Helvetica12_Character_208[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,124,  0, 66,  0, 65,  0, 65,  0,241,  0, 65,  0, 65,  0, 66,  0,124,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_209[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 67,  0, 69,  0, 69,  0, 73,  0, 81,  0, 81,  0, 97,  0, 65,  0,  0,  0, 20,  0, 10,  0};
-static const GLubyte Helvetica12_Character_210[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 30,  0, 33,  0, 64,128, 64,128, 64,128, 64,128, 64,128, 33,  0, 30,  0,  0,  0,  4,  0,  8,  0};
-static const GLubyte Helvetica12_Character_211[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 30,  0, 33,  0, 64,128, 64,128, 64,128, 64,128, 64,128, 33,  0, 30,  0,  0,  0,  4,  0,  2,  0};
-static const GLubyte Helvetica12_Character_212[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 30,  0, 33,  0, 64,128, 64,128, 64,128, 64,128, 64,128, 33,  0, 30,  0,  0,  0, 10,  0,  4,  0};
-static const GLubyte Helvetica12_Character_213[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 30,  0, 33,  0, 64,128, 64,128, 64,128, 64,128, 64,128, 33,  0, 30,  0,  0,  0, 20,  0, 10,  0};
-static const GLubyte Helvetica12_Character_214[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 30,  0, 33,  0, 64,128, 64,128, 64,128, 64,128, 64,128, 33,  0, 30,  0,  0,  0, 18,  0,  0,  0};
-static const GLubyte Helvetica12_Character_215[] = {  7,  0,  0,  0,  0,  0, 68, 40, 16, 40, 68,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_216[] = { 10,  0,  0,  0,  0,  0,  0,128,  0, 94,  0, 33,  0, 80,128, 72,128, 68,128, 68,128, 66,128, 33,  0, 30,128,  0, 64,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_217[] = {  8,  0,  0,  0,  0, 60, 66, 66, 66, 66, 66, 66, 66, 66,  0,  8, 16};
-static const GLubyte Helvetica12_Character_218[] = {  8,  0,  0,  0,  0, 60, 66, 66, 66, 66, 66, 66, 66, 66,  0,  8,  4};
-static const GLubyte Helvetica12_Character_219[] = {  8,  0,  0,  0,  0, 60, 66, 66, 66, 66, 66, 66, 66, 66,  0, 20,  8};
-static const GLubyte Helvetica12_Character_220[] = {  8,  0,  0,  0,  0, 60, 66, 66, 66, 66, 66, 66, 66, 66,  0, 36,  0};
-static const GLubyte Helvetica12_Character_221[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  8,  0,  8,  0,  8,  0, 20,  0, 34,  0, 34,  0, 65,  0, 65,  0,  0,  0,  8,  0,  4,  0};
-static const GLubyte Helvetica12_Character_222[] = {  8,  0,  0,  0,  0, 64, 64,124, 66, 66, 66,124, 64, 64,  0,  0,  0};
-static const GLubyte Helvetica12_Character_223[] = {  7,  0,  0,  0,  0, 88, 68, 68, 68, 88, 68, 68, 68, 56,  0,  0,  0};
-static const GLubyte Helvetica12_Character_224[] = {  7,  0,  0,  0,  0, 58, 68, 68, 60,  4, 68, 56,  0,  8, 16,  0,  0};
-static const GLubyte Helvetica12_Character_225[] = {  7,  0,  0,  0,  0, 58, 68, 68, 60,  4, 68, 56,  0, 16,  8,  0,  0};
-static const GLubyte Helvetica12_Character_226[] = {  7,  0,  0,  0,  0, 58, 68, 68, 60,  4, 68, 56,  0, 40, 16,  0,  0};
-static const GLubyte Helvetica12_Character_227[] = {  7,  0,  0,  0,  0, 58, 68, 68, 60,  4, 68, 56,  0, 40, 20,  0,  0};
-static const GLubyte Helvetica12_Character_228[] = {  7,  0,  0,  0,  0, 58, 68, 68, 60,  4, 68, 56,  0, 40,  0,  0,  0};
-static const GLubyte Helvetica12_Character_229[] = {  7,  0,  0,  0,  0, 58, 68, 68, 60,  4, 68, 56, 24, 36, 24,  0,  0};
-static const GLubyte Helvetica12_Character_230[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0, 59,128, 68, 64, 68,  0, 63,192,  4, 64, 68, 64, 59,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_231[] = {  7,  0, 48,  8, 16, 56, 68, 64, 64, 64, 68, 56,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_232[] = {  7,  0,  0,  0,  0, 56, 68, 64,124, 68, 68, 56,  0, 16, 32,  0,  0};
-static const GLubyte Helvetica12_Character_233[] = {  7,  0,  0,  0,  0, 56, 68, 64,124, 68, 68, 56,  0, 16,  8,  0,  0};
-static const GLubyte Helvetica12_Character_234[] = {  7,  0,  0,  0,  0, 56, 68, 64,124, 68, 68, 56,  0, 40, 16,  0,  0};
-static const GLubyte Helvetica12_Character_235[] = {  7,  0,  0,  0,  0, 56, 68, 64,124, 68, 68, 56,  0, 40,  0,  0,  0};
-static const GLubyte Helvetica12_Character_236[] = {  3,  0,  0,  0,  0, 64, 64, 64, 64, 64, 64, 64,  0, 64,128,  0,  0};
-static const GLubyte Helvetica12_Character_237[] = {  3,  0,  0,  0,  0, 64, 64, 64, 64, 64, 64, 64,  0, 64, 32,  0,  0};
-static const GLubyte Helvetica12_Character_238[] = {  3,  0,  0,  0,  0, 64, 64, 64, 64, 64, 64, 64,  0,160, 64,  0,  0};
-static const GLubyte Helvetica12_Character_239[] = {  3,  0,  0,  0,  0, 64, 64, 64, 64, 64, 64, 64,  0,160,  0,  0,  0};
-static const GLubyte Helvetica12_Character_240[] = {  7,  0,  0,  0,  0, 56, 68, 68, 68, 68, 60,  4, 40, 24, 52,  0,  0};
-static const GLubyte Helvetica12_Character_241[] = {  7,  0,  0,  0,  0, 68, 68, 68, 68, 68,100, 88,  0, 40, 20,  0,  0};
-static const GLubyte Helvetica12_Character_242[] = {  7,  0,  0,  0,  0, 56, 68, 68, 68, 68, 68, 56,  0, 16, 32,  0,  0};
-static const GLubyte Helvetica12_Character_243[] = {  7,  0,  0,  0,  0, 56, 68, 68, 68, 68, 68, 56,  0, 16,  8,  0,  0};
-static const GLubyte Helvetica12_Character_244[] = {  7,  0,  0,  0,  0, 56, 68, 68, 68, 68, 68, 56,  0, 40, 16,  0,  0};
-static const GLubyte Helvetica12_Character_245[] = {  7,  0,  0,  0,  0, 56, 68, 68, 68, 68, 68, 56,  0, 40, 20,  0,  0};
-static const GLubyte Helvetica12_Character_246[] = {  7,  0,  0,  0,  0, 56, 68, 68, 68, 68, 68, 56,  0, 40,  0,  0,  0};
-static const GLubyte Helvetica12_Character_247[] = {  7,  0,  0,  0,  0,  0, 16,  0,124,  0, 16,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_248[] = {  7,  0,  0,  0,  0,184, 68,100, 84, 76, 68, 58,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica12_Character_249[] = {  7,  0,  0,  0,  0, 52, 76, 68, 68, 68, 68, 68,  0, 16, 32,  0,  0};
-static const GLubyte Helvetica12_Character_250[] = {  7,  0,  0,  0,  0, 52, 76, 68, 68, 68, 68, 68,  0, 16,  8,  0,  0};
-static const GLubyte Helvetica12_Character_251[] = {  7,  0,  0,  0,  0, 52, 76, 68, 68, 68, 68, 68,  0, 40, 16,  0,  0};
-static const GLubyte Helvetica12_Character_252[] = {  7,  0,  0,  0,  0, 52, 76, 68, 68, 68, 68, 68,  0, 40,  0,  0,  0};
-static const GLubyte Helvetica12_Character_253[] = {  7,  0, 64, 32, 16, 16, 40, 40, 72, 68, 68, 68,  0, 16,  8,  0,  0};
-static const GLubyte Helvetica12_Character_254[] = {  7,  0, 64, 64, 64, 88,100, 68, 68, 68,100, 88, 64, 64,  0,  0,  0};
-static const GLubyte Helvetica12_Character_255[] = {  7,  0, 96, 16, 16, 16, 24, 40, 40, 36, 68, 68,  0, 40,  0,  0,  0};
-
-/* The font characters mapping: */
-static const GLubyte* Helvetica12_Character_Map[] = {Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,
-                                                     Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,
-                                                     Helvetica12_Character_032,Helvetica12_Character_033,Helvetica12_Character_034,Helvetica12_Character_035,Helvetica12_Character_036,Helvetica12_Character_037,Helvetica12_Character_038,Helvetica12_Character_039,Helvetica12_Character_040,Helvetica12_Character_041,Helvetica12_Character_042,Helvetica12_Character_043,Helvetica12_Character_044,Helvetica12_Character_045,Helvetica12_Character_046,Helvetica12_Character_047,
-                                                     Helvetica12_Character_048,Helvetica12_Character_049,Helvetica12_Character_050,Helvetica12_Character_051,Helvetica12_Character_052,Helvetica12_Character_053,Helvetica12_Character_054,Helvetica12_Character_055,Helvetica12_Character_056,Helvetica12_Character_057,Helvetica12_Character_058,Helvetica12_Character_059,Helvetica12_Character_060,Helvetica12_Character_061,Helvetica12_Character_062,Helvetica12_Character_063,
-                                                     Helvetica12_Character_064,Helvetica12_Character_065,Helvetica12_Character_066,Helvetica12_Character_067,Helvetica12_Character_068,Helvetica12_Character_069,Helvetica12_Character_070,Helvetica12_Character_071,Helvetica12_Character_072,Helvetica12_Character_073,Helvetica12_Character_074,Helvetica12_Character_075,Helvetica12_Character_076,Helvetica12_Character_077,Helvetica12_Character_078,Helvetica12_Character_079,
-                                                     Helvetica12_Character_080,Helvetica12_Character_081,Helvetica12_Character_082,Helvetica12_Character_083,Helvetica12_Character_084,Helvetica12_Character_085,Helvetica12_Character_086,Helvetica12_Character_087,Helvetica12_Character_088,Helvetica12_Character_089,Helvetica12_Character_090,Helvetica12_Character_091,Helvetica12_Character_092,Helvetica12_Character_093,Helvetica12_Character_094,Helvetica12_Character_095,
-                                                     Helvetica12_Character_096,Helvetica12_Character_097,Helvetica12_Character_098,Helvetica12_Character_099,Helvetica12_Character_100,Helvetica12_Character_101,Helvetica12_Character_102,Helvetica12_Character_103,Helvetica12_Character_104,Helvetica12_Character_105,Helvetica12_Character_106,Helvetica12_Character_107,Helvetica12_Character_108,Helvetica12_Character_109,Helvetica12_Character_110,Helvetica12_Character_111,
-                                                     Helvetica12_Character_112,Helvetica12_Character_113,Helvetica12_Character_114,Helvetica12_Character_115,Helvetica12_Character_116,Helvetica12_Character_117,Helvetica12_Character_118,Helvetica12_Character_119,Helvetica12_Character_120,Helvetica12_Character_121,Helvetica12_Character_122,Helvetica12_Character_123,Helvetica12_Character_124,Helvetica12_Character_125,Helvetica12_Character_126,Helvetica12_Character_032,
-                                                     Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,
-                                                     Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,Helvetica12_Character_032,
-                                                     Helvetica12_Character_160,Helvetica12_Character_161,Helvetica12_Character_162,Helvetica12_Character_163,Helvetica12_Character_164,Helvetica12_Character_165,Helvetica12_Character_166,Helvetica12_Character_167,Helvetica12_Character_168,Helvetica12_Character_169,Helvetica12_Character_170,Helvetica12_Character_171,Helvetica12_Character_172,Helvetica12_Character_173,Helvetica12_Character_174,Helvetica12_Character_175,
-                                                     Helvetica12_Character_176,Helvetica12_Character_177,Helvetica12_Character_178,Helvetica12_Character_179,Helvetica12_Character_180,Helvetica12_Character_181,Helvetica12_Character_182,Helvetica12_Character_183,Helvetica12_Character_184,Helvetica12_Character_185,Helvetica12_Character_186,Helvetica12_Character_187,Helvetica12_Character_188,Helvetica12_Character_189,Helvetica12_Character_190,Helvetica12_Character_191,
-                                                     Helvetica12_Character_192,Helvetica12_Character_193,Helvetica12_Character_194,Helvetica12_Character_195,Helvetica12_Character_196,Helvetica12_Character_197,Helvetica12_Character_198,Helvetica12_Character_199,Helvetica12_Character_200,Helvetica12_Character_201,Helvetica12_Character_202,Helvetica12_Character_203,Helvetica12_Character_204,Helvetica12_Character_205,Helvetica12_Character_206,Helvetica12_Character_207,
-                                                     Helvetica12_Character_208,Helvetica12_Character_209,Helvetica12_Character_210,Helvetica12_Character_211,Helvetica12_Character_212,Helvetica12_Character_213,Helvetica12_Character_214,Helvetica12_Character_215,Helvetica12_Character_216,Helvetica12_Character_217,Helvetica12_Character_218,Helvetica12_Character_219,Helvetica12_Character_220,Helvetica12_Character_221,Helvetica12_Character_222,Helvetica12_Character_223,
-                                                     Helvetica12_Character_224,Helvetica12_Character_225,Helvetica12_Character_226,Helvetica12_Character_227,Helvetica12_Character_228,Helvetica12_Character_229,Helvetica12_Character_230,Helvetica12_Character_231,Helvetica12_Character_232,Helvetica12_Character_233,Helvetica12_Character_234,Helvetica12_Character_235,Helvetica12_Character_236,Helvetica12_Character_237,Helvetica12_Character_238,Helvetica12_Character_239,
-                                                     Helvetica12_Character_240,Helvetica12_Character_241,Helvetica12_Character_242,Helvetica12_Character_243,Helvetica12_Character_244,Helvetica12_Character_245,Helvetica12_Character_246,Helvetica12_Character_247,Helvetica12_Character_248,Helvetica12_Character_249,Helvetica12_Character_250,Helvetica12_Character_251,Helvetica12_Character_252,Helvetica12_Character_253,Helvetica12_Character_254,Helvetica12_Character_255,NULL};
-
-/* The font structure: */
-const SFG_Font fgFontHelvetica12 = { "-adobe-helvetica-medium-r-normal--12-120-75-75-p-67-iso8859-1", 256, 16, Helvetica12_Character_Map, 0, 4 };
-
-static const GLubyte Helvetica18_Character_000[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0, 64, 16,  0,  0, 64, 16,  0,  0, 64, 16,  0,  0, 64, 16,  0,  0, 64, 16,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_001[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_002[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_003[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_004[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_005[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_006[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_007[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_008[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_009[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_010[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_011[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_012[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_013[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_014[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_015[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_016[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_017[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_018[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_019[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_020[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_021[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_022[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_023[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_024[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_025[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_026[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_027[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_028[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_029[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_030[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_031[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_032[] = {  5,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_033[] = {  6,  0,  0,  0,  0,  0, 48, 48,  0,  0, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_034[] = {  5,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,144,144,216,216,216,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_035[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 36,  0, 36,  0, 36,  0,255,128,255,128, 18,  0, 18,  0, 18,  0,127,192,127,192,  9,  0,  9,  0,  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_036[] = { 10,  0,  0,  0,  0,  0,  0,  4,  0,  4,  0, 31,  0, 63,128,117,192,100,192,  4,192,  7,128, 31,  0, 60,  0,116,  0,100,  0,101,128, 63,128, 31,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_037[] = { 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 12, 60, 12,126,  6,102,  6,102,  3,126,  3, 60,  1,128, 61,128,126,192,102,192,102, 96,126, 96, 60, 48,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_038[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 30, 56, 63,112,115,224, 97,192, 97,224, 99, 96,119, 96, 62,  0, 30,  0, 51,  0, 51,  0, 63,  0, 30,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_039[] = {  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64, 32, 32, 96, 96,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_040[] = {  6,  0,  8, 24, 48, 48, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 48, 48, 24,  8,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_041[] = {  6,  0, 64, 96, 48, 48, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 48, 48, 96, 64,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_042[] = {  7,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68, 56, 56,124, 16, 16,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_043[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 12,  0, 12,  0, 12,  0, 12,  0,127,128,127,128, 12,  0, 12,  0, 12,  0, 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_044[] = {  5,  0,  0, 64, 32, 32, 96, 96,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_045[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,128,127,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_046[] = {  5,  0,  0,  0,  0,  0, 96, 96,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_047[] = {  5,  0,  0,  0,  0,  0,192,192, 64, 64, 96, 96, 32, 32, 48, 48, 16, 16, 24, 24,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_048[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 30,  0, 63,  0, 51,  0, 97,128, 97,128, 97,128, 97,128, 97,128, 97,128, 97,128, 51,  0, 63,  0, 30,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_049[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  6,  0,  6,  0,  6,  0,  6,  0,  6,  0,  6,  0,  6,  0,  6,  0,  6,  0,  6,  0, 62,  0, 62,  0,  6,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_050[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,128,127,128, 96,  0,112,  0, 56,  0, 28,  0, 14,  0,  7,  0,  3,128,  1,128, 97,128,127,  0, 30,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_051[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 30,  0, 63,  0, 99,128, 97,128,  1,128,  3,128, 15,  0, 14,  0,  3,  0, 97,128, 97,128, 63,  0, 30,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_052[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,128,  1,128,  1,128,127,192,127,192, 97,128, 49,128, 25,128, 25,128, 13,128,  7,128,  3,128,  1,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_053[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0,127,  0, 99,128, 97,128,  1,128,  1,128, 99,128,127,  0,126,  0, 96,  0, 96,  0,127,  0,127,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_054[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 30,  0, 63,  0,113,128, 97,128, 97,128, 97,128,127,  0,110,  0, 96,  0, 96,  0, 49,128, 63,128, 30,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_055[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 48,  0, 48,  0, 24,  0, 24,  0, 24,  0, 12,  0, 12,  0,  6,  0,  6,  0,  3,  0,  1,128,127,128,127,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_056[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 30,  0, 63,  0,115,128, 97,128, 97,128, 51,  0, 63,  0, 51,  0, 97,128, 97,128,115,128, 63,  0, 30,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_057[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0,127,  0, 99,  0,  1,128,  1,128, 29,128, 63,128, 97,128, 97,128, 97,128, 99,128, 63,  0, 30,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_058[] = {  5,  0,  0,  0,  0,  0, 96, 96,  0,  0,  0,  0,  0,  0, 96, 96,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_059[] = {  5,  0,  0, 64, 32, 32, 96, 96,  0,  0,  0,  0,  0,  0, 96, 96,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_060[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,128,  7,128, 30,  0, 56,  0, 96,  0, 56,  0, 30,  0,  7,128,  1,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_061[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 63,128, 63,128,  0,  0,  0,  0, 63,128, 63,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_062[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 96,  0,120,  0, 30,  0,  7,  0,  1,128,  7,  0, 30,  0,120,  0, 96,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_063[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 24,  0, 24,  0,  0,  0,  0,  0, 24,  0, 24,  0, 24,  0, 28,  0, 14,  0,  7,  0, 99,  0, 99,  0,127,  0, 62,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_064[] = { 18,  0,  0,  0,  0,  0,  0,  3,240,  0, 15,248,  0, 28,  0,  0, 56,  0,  0, 51,184,  0,103,252,  0,102,102,  0,102, 51,  0,102, 51,  0,102, 49,128, 99, 25,128, 51,185,128, 49,217,128, 24,  3,  0, 14,  7,  0,  7,254,  0,  1,248,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_065[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,192, 48,192, 48, 96, 96, 96, 96,127,224, 63,192, 48,192, 48,192, 25,128, 25,128, 15,  0, 15,  0,  6,  0,  6,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_066[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,192,127,224, 96,112, 96, 48, 96, 48, 96,112,127,224,127,192, 96,192, 96, 96, 96, 96, 96,224,127,192,127,128,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_067[] = { 14,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  7,192, 31,240, 56, 56, 48, 24,112,  0, 96,  0, 96,  0, 96,  0, 96,  0,112,  0, 48, 24, 56, 56, 31,240,  7,192,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_068[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,128,127,192, 96,224, 96, 96, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 96, 96,224,127,192,127,128,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_069[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,192,127,192, 96,  0, 96,  0, 96,  0, 96,  0,127,128,127,128, 96,  0, 96,  0, 96,  0, 96,  0,127,192,127,192,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_070[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 96,  0, 96,  0, 96,  0, 96,  0, 96,  0, 96,  0,127,128,127,128, 96,  0, 96,  0, 96,  0, 96,  0,127,192,127,192,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_071[] = { 14,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  7,216, 31,248, 56, 56, 48, 24,112, 24, 96,248, 96,248, 96,  0, 96,  0,112, 24, 48, 24, 56, 56, 31,240,  7,192,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_072[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48,127,240,127,240, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_073[] = {  6,  0,  0,  0,  0,  0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_074[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 30,  0, 63,  0,115,128, 97,128, 97,128,  1,128,  1,128,  1,128,  1,128,  1,128,  1,128,  1,128,  1,128,  1,128,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_075[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 96, 56, 96,112, 96,224, 97,192, 99,128,103,  0,126,  0,124,  0,110,  0,103,  0, 99,128, 97,192, 96,224, 96,112,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_076[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,128,127,128, 96,  0, 96,  0, 96,  0, 96,  0, 96,  0, 96,  0, 96,  0, 96,  0, 96,  0, 96,  0, 96,  0, 96,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_077[] = { 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 97,134, 97,134, 99,198, 98, 70,102,102,102,102,108, 54,108, 54,120, 30,120, 30,112, 14,112, 14, 96,  6, 96,  6,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_078[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 96, 48, 96,112, 96,240, 96,240, 97,176, 99, 48, 99, 48,102, 48,102, 48,108, 48,120, 48,120, 48,112, 48, 96, 48,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_079[] = { 15,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  7,192, 31,240, 56, 56, 48, 24,112, 28, 96, 12, 96, 12, 96, 12, 96, 12,112, 28, 48, 24, 56, 56, 31,240,  7,192,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_080[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 96,  0, 96,  0, 96,  0, 96,  0, 96,  0, 96,  0,127,128,127,192, 96,224, 96, 96, 96, 96, 96,224,127,192,127,128,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_081[] = { 15,  0,  0,  0,  0,  0,  0,  0,  0,  0, 24,  7,216, 31,240, 56,120, 48,216,112,220, 96, 12, 96, 12, 96, 12, 96, 12,112, 28, 48, 24, 56, 56, 31,240,  7,192,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_082[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 96, 96, 96, 96, 96, 96, 96, 96, 96,192, 96,192,127,128,127,192, 96,224, 96, 96, 96, 96, 96,224,127,192,127,128,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_083[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 31,128, 63,224,112,112, 96, 48,  0, 48,  0,112,  1,224, 15,128, 62,  0,112,  0, 96, 48,112,112, 63,224, 15,128,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_084[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  6,  0,  6,  0,  6,  0,  6,  0,  6,  0,  6,  0,  6,  0,  6,  0,  6,  0,  6,  0,  6,  0,  6,  0,127,224,127,224,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_085[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15,128, 63,224, 48, 96, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_086[] = { 14,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,  0,  7,128,  7,128, 12,192, 12,192, 12,192, 24, 96, 24, 96, 24, 96, 48, 48, 48, 48, 48, 48, 96, 24, 96, 24,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_087[] = { 18,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 12, 12,  0, 12, 12,  0, 14, 28,  0, 26, 22,  0, 27, 54,  0, 27, 54,  0, 51, 51,  0, 51, 51,  0, 49, 35,  0, 49,227,  0, 97,225,128, 96,193,128, 96,193,128, 96,193,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_088[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 96, 48,112,112, 48, 96, 56,224, 24,192, 13,128,  7,  0,  7,  0, 13,128, 24,192, 56,224, 48, 96,112,112, 96, 48,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_089[] = { 14,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,  0,  3,  0,  3,  0,  3,  0,  3,  0,  3,  0,  7,128, 12,192, 24, 96, 24, 96, 48, 48, 48, 48, 96, 24, 96, 24,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_090[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,224,127,224, 96,  0, 48,  0, 24,  0, 12,  0, 14,  0,  6,  0,  3,  0,  1,128,  0,192,  0, 96,127,224,127,224,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_091[] = {  5,  0,120,120, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,120,120,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_092[] = {  5,  0,  0,  0,  0,  0, 24, 24, 16, 16, 48, 48, 32, 32, 96, 96, 64, 64,192,192,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_093[] = {  5,  0,240,240, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,240,240,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_094[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 99,  0, 54,  0, 28,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_095[] = { 10,  0,  0,255,192,255,192,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_096[] = {  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 96, 96, 64, 64, 32,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_097[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 59,  0,119,  0, 99,  0, 99,  0,115,  0, 63,  0,  7,  0, 99,  0,119,  0, 62,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_098[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,111,  0,127,128,113,128, 96,192, 96,192, 96,192, 96,192,113,128,127,128,111,  0, 96,  0, 96,  0, 96,  0, 96,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_099[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 31,  0, 63,128, 49,128, 96,  0, 96,  0, 96,  0, 96,  0, 49,128, 63,128, 31,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_100[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 30,192, 63,192, 49,192, 96,192, 96,192, 96,192, 96,192, 49,192, 63,192, 30,192,  0,192,  0,192,  0,192,  0,192,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_101[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 30,  0, 63,128,113,128, 96,  0, 96,  0,127,128, 97,128, 97,128, 63,  0, 30,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_102[] = {  6,  0,  0,  0,  0,  0, 48, 48, 48, 48, 48, 48, 48, 48,252,252, 48, 48, 60, 28,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_103[] = { 11,  0,  0, 14,  0, 63,128, 49,128,  0,192, 30,192, 63,192, 49,192, 96,192, 96,192, 96,192, 96,192, 48,192, 63,192, 30,192,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_104[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 97,128, 97,128, 97,128, 97,128, 97,128, 97,128, 97,128,113,128,111,128,103,  0, 96,  0, 96,  0, 96,  0, 96,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_105[] = {  4,  0,  0,  0,  0,  0, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,  0,  0, 96, 96,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_106[] = {  4,  0,192,224, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,  0,  0, 96, 96,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_107[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 99,128, 99,  0,103,  0,102,  0,108,  0,124,  0,120,  0,108,  0,102,  0, 99,  0, 96,  0, 96,  0, 96,  0, 96,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_108[] = {  4,  0,  0,  0,  0,  0, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_109[] = { 14,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 99, 24, 99, 24, 99, 24, 99, 24, 99, 24, 99, 24, 99, 24,115,152,111,120,102, 48,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_110[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 97,128, 97,128, 97,128, 97,128, 97,128, 97,128, 97,128,113,128,111,128,103,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_111[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 31,  0, 63,128, 49,128, 96,192, 96,192, 96,192, 96,192, 49,128, 63,128, 31,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_112[] = { 11,  0,  0, 96,  0, 96,  0, 96,  0, 96,  0,111,  0,127,128,113,128, 96,192, 96,192, 96,192, 96,192,113,128,127,128,111,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_113[] = { 11,  0,  0,  0,192,  0,192,  0,192,  0,192, 30,192, 63,192, 49,192, 96,192, 96,192, 96,192, 96,192, 49,192, 63,192, 30,192,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_114[] = {  6,  0,  0,  0,  0,  0, 96, 96, 96, 96, 96, 96, 96,112,108,108,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_115[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,  0,126,  0, 99,  0,  3,  0, 31,  0,126,  0, 96,  0, 99,  0, 63,  0, 30,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_116[] = {  6,  0,  0,  0,  0,  0, 24, 56, 48, 48, 48, 48, 48, 48,252,252, 48, 48, 48,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_117[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 57,128,125,128, 99,128, 97,128, 97,128, 97,128, 97,128, 97,128, 97,128, 97,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_118[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 12,  0, 12,  0, 30,  0, 18,  0, 51,  0, 51,  0, 51,  0, 97,128, 97,128, 97,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_119[] = { 14,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 12,192, 12,192, 28,224, 20,160, 52,176, 51, 48, 51, 48, 99, 24, 99, 24, 99, 24,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_120[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 97,128,115,128, 51,  0, 30,  0, 12,  0, 12,  0, 30,  0, 51,  0,115,128, 97,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_121[] = { 10,  0,  0, 56,  0, 56,  0, 12,  0, 12,  0, 12,  0, 12,  0, 30,  0, 18,  0, 51,  0, 51,  0, 51,  0, 97,128, 97,128, 97,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_122[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,  0,127,  0, 96,  0, 48,  0, 24,  0, 12,  0,  6,  0,  3,  0,127,  0,127,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_123[] = {  6,  0, 12, 24, 48, 48, 48, 48, 48, 48, 96,192, 96, 48, 48, 48, 48, 48, 24, 12,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_124[] = {  4,  0, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_125[] = {  6,  0,192, 96, 48, 48, 48, 48, 48, 48, 24, 12, 24, 48, 48, 48, 48, 48, 96,192,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_126[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,102,  0, 63,  0, 25,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_127[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_128[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_129[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_130[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_131[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_132[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_133[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_134[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_135[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_136[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_137[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_138[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_139[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_140[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_141[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_142[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_143[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_144[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_145[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_146[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_147[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_148[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_149[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_150[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_151[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_152[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_153[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_154[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_155[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_156[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_157[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_158[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_159[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0, 85, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_160[] = {  5,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_161[] = {  6,  0, 48, 48, 48, 48, 48, 48, 48, 48, 16, 16,  0,  0, 48, 48,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_162[] = { 10,  0,  0,  0,  0,  0,  0,  8,  0,  8,  0, 31,  0, 63,128, 53,128,100,  0,100,  0,100,  0,100,  0, 53,128, 63,128, 31,  0,  2,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_163[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,223,  0,255,128, 96,128, 48,  0, 24,  0, 24,  0,126,  0, 48,  0, 96,  0, 97,128, 97,128, 63,  0, 30,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_164[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 97,128,127,128, 51,  0, 51,  0, 51,  0,127,128, 97,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_165[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 12,  0, 12,  0, 12,  0, 12,  0,127,128, 12,  0,127,128, 30,  0, 51,  0, 51,  0, 51,  0, 97,128, 97,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_166[] = {  4,  0,  0, 96, 96, 96, 96, 96, 96,  0,  0,  0,  0, 96, 96, 96, 96, 96, 96, 96,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_167[] = { 10,  0,  0, 30,  0, 63,  0, 97,128, 97,128,  3,128,  7,  0, 31,  0, 57,128,113,128, 97,128, 99,128, 55,  0, 62,  0,120,  0, 97,128, 97,128, 63,  0, 30,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_168[] = {  6,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,216,216,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_169[] = { 15,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  7,192, 24, 48, 32,  8, 35,136, 68, 68, 72,  4, 72,  4, 72,  4, 68, 68, 35,136, 32,  8, 24, 48,  7,192,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_170[] = {  7,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,124,  0, 52,108, 36, 28,100, 56,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_171[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  9,  0, 27,  0, 54,  0,108,  0,108,  0, 54,  0, 27,  0,  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_172[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,192,  0,192,  0,192,127,192,127,192,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_173[] = {  7,  0,  0,  0,  0,  0,  0,  0,  0,  0,124,124,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_174[] = { 14,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  7,192, 24, 48, 32,  8, 36, 40, 68, 68, 68,132, 71,196, 68, 36, 68, 36, 39,200, 32,  8, 24, 48,  7,192,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_175[] = {  5,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,248,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_176[] = {  7,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 56,108, 68,108, 56,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_177[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,128,127,128,  0,  0, 12,  0, 12,  0, 12,  0,127,128,127,128, 12,  0, 12,  0, 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_178[] = {  6,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,248,248, 96, 48, 24,152,248,112,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_179[] = {  6,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,112,248,152, 48, 48,152,248,112,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_180[] = {  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,192, 96, 48,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_181[] = { 10,  0,  0, 96,  0, 96,  0, 96,  0, 96,  0,109,128,127,128,115,128, 97,128, 97,128, 97,128, 97,128, 97,128, 97,128, 97,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_182[] = { 10,  0,  0,  9,  0,  9,  0,  9,  0,  9,  0,  9,  0,  9,  0,  9,  0,  9,  0,  9,  0,  9,  0, 25,  0, 57,  0,121,  0,121,  0,121,  0,121,  0, 57,  0, 31,128,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_183[] = {  4,  0,  0,  0,  0,  0,  0,  0,  0,  0, 96, 96,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_184[] = {  5,  0,240,216, 24,112, 96,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_185[] = {  6,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 48, 48, 48, 48, 48,112,112, 48,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_186[] = {  7,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,124,  0, 56,108, 68, 68,108, 56,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_187[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 72,  0,108,  0, 54,  0, 27,  0, 27,  0, 54,  0,108,  0, 72,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_188[] = { 15,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 24, 24, 24, 24, 12,252,  6,216,  6,120, 51, 56, 49, 24, 49,136, 48,192, 48,192,112, 96,112, 48, 48, 48,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_189[] = { 15,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 24,124, 24,124, 12, 48,  6, 24,  6, 12, 51, 76, 49,124, 49,184, 48,192, 48,192,112, 96,112, 48, 48, 48,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_190[] = { 15,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 24, 24, 24, 24, 12,252,  6,216,  6,120,115, 56,249, 24,153,136, 48,192, 48,192,152, 96,248, 48,112, 48,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_191[] = { 10,  0,  0, 62,  0,127,  0, 99,  0, 99,  0,112,  0, 56,  0, 28,  0, 12,  0, 12,  0, 12,  0,  0,  0,  0,  0, 12,  0, 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_192[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,192, 48,192, 48, 96, 96, 96, 96,127,224, 63,192, 48,192, 48,192, 25,128, 25,128, 15,  0, 15,  0,  6,  0,  6,  0,  0,  0,  6,  0, 12,  0, 24,  0};
-static const GLubyte Helvetica18_Character_193[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,192, 48,192, 48, 96, 96, 96, 96,127,224, 63,192, 48,192, 48,192, 25,128, 25,128, 15,  0, 15,  0,  6,  0,  6,  0,  0,  0,  6,  0,  3,  0,  1,128};
-static const GLubyte Helvetica18_Character_194[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,192, 48,192, 48, 96, 96, 96, 96,127,224, 63,192, 48,192, 48,192, 25,128, 25,128, 15,  0, 15,  0,  6,  0,  6,  0,  0,  0, 25,128, 15,  0,  6,  0};
-static const GLubyte Helvetica18_Character_195[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,192, 48,192, 48, 96, 96, 96, 96,127,224, 63,192, 48,192, 48,192, 25,128, 25,128, 15,  0, 15,  0,  6,  0,  6,  0,  0,  0, 19,  0, 22,128, 12,128};
-static const GLubyte Helvetica18_Character_196[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,192, 48,192, 48, 96, 96, 96, 96,127,224, 63,192, 48,192, 48,192, 25,128, 25,128, 15,  0, 15,  0,  6,  0,  6,  0,  0,  0, 25,128, 25,128,  0,  0};
-static const GLubyte Helvetica18_Character_197[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,192, 48,192, 48, 96, 96, 96, 96,127,224, 63,192, 48,192, 48,192, 25,128, 25,128, 15,  0, 15,  0,  6,  0,  6,  0, 15,  0, 25,128, 25,128, 15,  0};
-static const GLubyte Helvetica18_Character_198[] = { 18,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 96,255,128, 96,255,128, 48,192,  0, 48,192,  0, 63,192,  0, 31,192,  0, 24,255,  0, 24,255,  0, 12,192,  0, 12,192,  0,  6,192,  0,  6,192,  0,  3,255,128,  3,255,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_199[] = { 14,  0,  0, 15,  0, 13,128,  1,128,  7,  0,  7,192, 31,240, 56, 56, 48, 24,112,  0, 96,  0, 96,  0, 96,  0, 96,  0,112,  0, 48, 24, 56, 56, 31,240,  7,192,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_200[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,192,127,192, 96,  0, 96,  0, 96,  0, 96,  0,127,128,127,128, 96,  0, 96,  0, 96,  0, 96,  0,127,192,127,192,  0,  0,  6,  0, 12,  0, 24,  0};
-static const GLubyte Helvetica18_Character_201[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,192,127,192, 96,  0, 96,  0, 96,  0, 96,  0,127,128,127,128, 96,  0, 96,  0, 96,  0, 96,  0,127,192,127,192,  0,  0,  6,  0,  3,  0,  1,128};
-static const GLubyte Helvetica18_Character_202[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,192,127,192, 96,  0, 96,  0, 96,  0, 96,  0,127,128,127,128, 96,  0, 96,  0, 96,  0, 96,  0,127,192,127,192,  0,  0, 25,128, 15,  0,  6,  0};
-static const GLubyte Helvetica18_Character_203[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,192,127,192, 96,  0, 96,  0, 96,  0, 96,  0,127,128,127,128, 96,  0, 96,  0, 96,  0, 96,  0,127,192,127,192,  0,  0, 25,128, 25,128,  0,  0};
-static const GLubyte Helvetica18_Character_204[] = {  6,  0,  0,  0,  0,  0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,  0, 48, 96,192};
-static const GLubyte Helvetica18_Character_205[] = {  6,  0,  0,  0,  0,  0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,  0, 48, 24, 12};
-static const GLubyte Helvetica18_Character_206[] = {  6,  0,  0,  0,  0,  0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,  0,204,120, 48};
-static const GLubyte Helvetica18_Character_207[] = {  6,  0,  0,  0,  0,  0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,  0,204,204,  0};
-static const GLubyte Helvetica18_Character_208[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,128,127,192, 96,224, 96, 96, 96, 48, 96, 48,252, 48,252, 48, 96, 48, 96, 48, 96, 96, 96,224,127,192,127,128,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_209[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 96, 48, 96,112, 96,240, 96,240, 97,176, 99, 48, 99, 48,102, 48,102, 48,108, 48,108, 48,120, 48,112, 48,112, 48,  0,  0,  9,128, 11, 64,  6, 64};
-static const GLubyte Helvetica18_Character_210[] = { 15,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  7,192, 31,240, 56, 56, 48, 24,112, 28, 96, 12, 96, 12, 96, 12, 96, 12,112, 28, 48, 24, 56, 56, 31,240,  7,192,  0,  0,  1,128,  3,  0,  6,  0};
-static const GLubyte Helvetica18_Character_211[] = { 15,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  7,192, 31,240, 56, 56, 48, 24,112, 28, 96, 12, 96, 12, 96, 12, 96, 12,112, 28, 48, 24, 56, 56, 31,240,  7,192,  0,  0,  1,128,  0,192,  0, 96};
-static const GLubyte Helvetica18_Character_212[] = { 15,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  7,192, 31,240, 56, 56, 48, 24,112, 28, 96, 12, 96, 12, 96, 12, 96, 12,112, 28, 48, 24, 56, 56, 31,240,  7,192,  0,  0,  6, 96,  3,192,  1,128};
-static const GLubyte Helvetica18_Character_213[] = { 15,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  7,192, 31,240, 56, 56, 48, 24,112, 28, 96, 12, 96, 12, 96, 12, 96, 12,112, 28, 48, 24, 56, 56, 31,240,  7,192,  0,  0,  4,192,  5,160,  3, 32};
-static const GLubyte Helvetica18_Character_214[] = { 15,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  7,192, 31,240, 56, 56, 48, 24,112, 28, 96, 12, 96, 12, 96, 12, 96, 12,112, 28, 48, 24, 56, 56, 31,240,  7,192,  0,  0,  6,192,  6,192,  0,  0};
-static const GLubyte Helvetica18_Character_215[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,192,192, 97,128, 51,  0, 30,  0, 12,  0, 30,  0, 51,  0, 97,128,192,192,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_216[] = { 15,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,199,192,255,240,120, 56, 56, 24,108, 28,110, 12,103, 12, 99,140, 97,204,112,220, 48,120, 56, 56, 31,252,  7,204,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_217[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15,128, 63,224, 48, 96, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48,  0,  0,  3,  0,  6,  0, 12,  0};
-static const GLubyte Helvetica18_Character_218[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15,128, 63,224, 48, 96, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48,  0,  0,  6,  0,  3,  0,  1,128};
-static const GLubyte Helvetica18_Character_219[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15,128, 63,224, 48, 96, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48,  0,  0, 12,192,  7,128,  3,  0};
-static const GLubyte Helvetica18_Character_220[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15,128, 63,224, 48, 96, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48,  0,  0, 12,192, 12,192,  0,  0};
-static const GLubyte Helvetica18_Character_221[] = { 14,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,  0,  3,  0,  3,  0,  3,  0,  3,  0,  3,  0,  7,128, 12,192, 24, 96, 24, 96, 48, 48, 48, 48, 96, 24, 96, 24,  0,  0,  3,  0,  1,128,  0,192};
-static const GLubyte Helvetica18_Character_222[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 96,  0, 96,  0, 96,  0,127,128,127,192, 96,224, 96, 96, 96, 96, 96,224,127,192,127,128, 96,  0, 96,  0, 96,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_223[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,110,  0,111,  0, 99,  0, 99,  0, 99,  0, 99,  0,110,  0,110,  0, 99,  0, 99,  0, 99,  0, 99,  0, 62,  0, 28,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_224[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 59,  0,119,  0, 99,  0, 99,  0,115,  0, 63,  0,  7,  0, 99,  0,119,  0, 62,  0,  0,  0, 12,  0, 24,  0, 48,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_225[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 59,  0,119,  0, 99,  0, 99,  0,115,  0, 63,  0,  7,  0, 99,  0,119,  0, 62,  0,  0,  0, 24,  0, 12,  0,  6,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_226[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 59,  0,119,  0, 99,  0, 99,  0,115,  0, 63,  0,  7,  0, 99,  0,119,  0, 62,  0,  0,  0, 51,  0, 30,  0, 12,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_227[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 59,  0,119,  0, 99,  0, 99,  0,115,  0, 63,  0,  7,  0, 99,  0,119,  0, 62,  0,  0,  0, 38,  0, 45,  0, 25,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_228[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 59,  0,119,  0, 99,  0, 99,  0,115,  0, 63,  0,  7,  0, 99,  0,119,  0, 62,  0,  0,  0, 54,  0, 54,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_229[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 59,  0,119,  0, 99,  0, 99,  0,115,  0, 63,  0,  7,  0, 99,  0,119,  0, 62,  0, 28,  0, 54,  0, 54,  0, 28,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_230[] = { 15,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 58,240,119,252, 99,140, 99,  0,115,  0, 63,252,  7, 12, 99, 12,119,248, 62,240,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_231[] = { 10,  0,  0, 60,  0, 54,  0,  6,  0, 28,  0, 31,  0, 63,128, 49,128, 96,  0, 96,  0, 96,  0, 96,  0, 49,128, 63,128, 31,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_232[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 30,  0, 63,128,113,128, 96,  0, 96,  0,127,128, 97,128, 97,128, 63,  0, 30,  0,  0,  0, 12,  0, 24,  0, 48,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_233[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 30,  0, 63,128,113,128, 96,  0, 96,  0,127,128, 97,128, 97,128, 63,  0, 30,  0,  0,  0, 12,  0,  6,  0,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_234[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 30,  0, 63,128,113,128, 96,  0, 96,  0,127,128, 97,128, 97,128, 63,  0, 30,  0,  0,  0, 51,  0, 30,  0, 12,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_235[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 30,  0, 63,128,113,128, 96,  0, 96,  0,127,128, 97,128, 97,128, 63,  0, 30,  0,  0,  0, 27,  0, 27,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_236[] = {  4,  0,  0,  0,  0,  0, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,  0, 48, 96,192,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_237[] = {  4,  0,  0,  0,  0,  0, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,  0,192, 96, 48,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_238[] = {  4,  0,  0,  0,  0,  0, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,  0,144,240, 96,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_239[] = {  4,  0,  0,  0,  0,  0, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,  0,216,216,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_240[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 31,  0, 63,128, 49,128, 96,192, 96,192, 96,192, 96,192, 49,128, 63,128, 31,  0, 38,  0, 28,  0, 27,  0, 48,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_241[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 97,128, 97,128, 97,128, 97,128, 97,128, 97,128, 97,128,113,128,111,128,103,  0,  0,  0, 38,  0, 45,  0, 25,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_242[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 31,  0, 63,128, 49,128, 96,192, 96,192, 96,192, 96,192, 49,128, 63,128, 31,  0,  0,  0,  6,  0, 12,  0, 24,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_243[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 31,  0, 63,128, 49,128, 96,192, 96,192, 96,192, 96,192, 49,128, 63,128, 31,  0,  0,  0, 12,  0,  6,  0,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_244[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 31,  0, 63,128, 49,128, 96,192, 96,192, 96,192, 96,192, 49,128, 63,128, 31,  0,  0,  0, 25,128, 15,  0,  6,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_245[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 31,  0, 63,128, 49,128, 96,192, 96,192, 96,192, 96,192, 49,128, 63,128, 31,  0,  0,  0, 19,  0, 22,128, 12,128,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_246[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 31,  0, 63,128, 49,128, 96,192, 96,192, 96,192, 96,192, 49,128, 63,128, 31,  0,  0,  0, 27,  0, 27,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_247[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 12,  0, 12,  0,  0,  0,127,128,127,128,  0,  0, 12,  0, 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_248[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,206,  0,127,128, 49,128,120,192,108,192,102,192, 99,192, 49,128, 63,192, 14, 96,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_249[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 57,128,125,128, 99,128, 97,128, 97,128, 97,128, 97,128, 97,128, 97,128, 97,128,  0,  0,  6,  0, 12,  0, 24,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_250[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 57,128,125,128, 99,128, 97,128, 97,128, 97,128, 97,128, 97,128, 97,128, 97,128,  0,  0, 12,  0,  6,  0,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_251[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 57,128,125,128, 99,128, 97,128, 97,128, 97,128, 97,128, 97,128, 97,128, 97,128,  0,  0, 51,  0, 30,  0, 12,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_252[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 57,128,125,128, 99,128, 97,128, 97,128, 97,128, 97,128, 97,128, 97,128, 97,128,  0,  0, 51,  0, 51,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_253[] = { 10,  0,  0, 56,  0, 56,  0, 12,  0, 12,  0, 12,  0, 12,  0, 30,  0, 18,  0, 51,  0, 51,  0, 51,  0, 97,128, 97,128, 97,128,  0,  0, 12,  0,  6,  0,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_254[] = { 11,  0,  0, 96,  0, 96,  0, 96,  0, 96,  0,111,  0,127,128,113,128, 96,192, 96,192, 96,192, 96,192,113,128,127,128,111,  0, 96,  0, 96,  0, 96,  0, 96,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte Helvetica18_Character_255[] = { 10,  0,  0, 56,  0, 56,  0, 12,  0, 12,  0, 12,  0, 12,  0, 30,  0, 18,  0, 51,  0, 51,  0, 51,  0, 97,128, 97,128, 97,128,  0,  0, 51,  0, 51,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-
-/* The font characters mapping: */
-static const GLubyte* Helvetica18_Character_Map[] = {Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,
-                                                     Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,
-                                                     Helvetica18_Character_032,Helvetica18_Character_033,Helvetica18_Character_034,Helvetica18_Character_035,Helvetica18_Character_036,Helvetica18_Character_037,Helvetica18_Character_038,Helvetica18_Character_039,Helvetica18_Character_040,Helvetica18_Character_041,Helvetica18_Character_042,Helvetica18_Character_043,Helvetica18_Character_044,Helvetica18_Character_045,Helvetica18_Character_046,Helvetica18_Character_047,
-                                                     Helvetica18_Character_048,Helvetica18_Character_049,Helvetica18_Character_050,Helvetica18_Character_051,Helvetica18_Character_052,Helvetica18_Character_053,Helvetica18_Character_054,Helvetica18_Character_055,Helvetica18_Character_056,Helvetica18_Character_057,Helvetica18_Character_058,Helvetica18_Character_059,Helvetica18_Character_060,Helvetica18_Character_061,Helvetica18_Character_062,Helvetica18_Character_063,
-                                                     Helvetica18_Character_064,Helvetica18_Character_065,Helvetica18_Character_066,Helvetica18_Character_067,Helvetica18_Character_068,Helvetica18_Character_069,Helvetica18_Character_070,Helvetica18_Character_071,Helvetica18_Character_072,Helvetica18_Character_073,Helvetica18_Character_074,Helvetica18_Character_075,Helvetica18_Character_076,Helvetica18_Character_077,Helvetica18_Character_078,Helvetica18_Character_079,
-                                                     Helvetica18_Character_080,Helvetica18_Character_081,Helvetica18_Character_082,Helvetica18_Character_083,Helvetica18_Character_084,Helvetica18_Character_085,Helvetica18_Character_086,Helvetica18_Character_087,Helvetica18_Character_088,Helvetica18_Character_089,Helvetica18_Character_090,Helvetica18_Character_091,Helvetica18_Character_092,Helvetica18_Character_093,Helvetica18_Character_094,Helvetica18_Character_095,
-                                                     Helvetica18_Character_096,Helvetica18_Character_097,Helvetica18_Character_098,Helvetica18_Character_099,Helvetica18_Character_100,Helvetica18_Character_101,Helvetica18_Character_102,Helvetica18_Character_103,Helvetica18_Character_104,Helvetica18_Character_105,Helvetica18_Character_106,Helvetica18_Character_107,Helvetica18_Character_108,Helvetica18_Character_109,Helvetica18_Character_110,Helvetica18_Character_111,
-                                                     Helvetica18_Character_112,Helvetica18_Character_113,Helvetica18_Character_114,Helvetica18_Character_115,Helvetica18_Character_116,Helvetica18_Character_117,Helvetica18_Character_118,Helvetica18_Character_119,Helvetica18_Character_120,Helvetica18_Character_121,Helvetica18_Character_122,Helvetica18_Character_123,Helvetica18_Character_124,Helvetica18_Character_125,Helvetica18_Character_126,Helvetica18_Character_032,
-                                                     Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,
-                                                     Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,Helvetica18_Character_032,
-                                                     Helvetica18_Character_160,Helvetica18_Character_161,Helvetica18_Character_162,Helvetica18_Character_163,Helvetica18_Character_164,Helvetica18_Character_165,Helvetica18_Character_166,Helvetica18_Character_167,Helvetica18_Character_168,Helvetica18_Character_169,Helvetica18_Character_170,Helvetica18_Character_171,Helvetica18_Character_172,Helvetica18_Character_173,Helvetica18_Character_174,Helvetica18_Character_175,
-                                                     Helvetica18_Character_176,Helvetica18_Character_177,Helvetica18_Character_178,Helvetica18_Character_179,Helvetica18_Character_180,Helvetica18_Character_181,Helvetica18_Character_182,Helvetica18_Character_183,Helvetica18_Character_184,Helvetica18_Character_185,Helvetica18_Character_186,Helvetica18_Character_187,Helvetica18_Character_188,Helvetica18_Character_189,Helvetica18_Character_190,Helvetica18_Character_191,
-                                                     Helvetica18_Character_192,Helvetica18_Character_193,Helvetica18_Character_194,Helvetica18_Character_195,Helvetica18_Character_196,Helvetica18_Character_197,Helvetica18_Character_198,Helvetica18_Character_199,Helvetica18_Character_200,Helvetica18_Character_201,Helvetica18_Character_202,Helvetica18_Character_203,Helvetica18_Character_204,Helvetica18_Character_205,Helvetica18_Character_206,Helvetica18_Character_207,
-                                                     Helvetica18_Character_208,Helvetica18_Character_209,Helvetica18_Character_210,Helvetica18_Character_211,Helvetica18_Character_212,Helvetica18_Character_213,Helvetica18_Character_214,Helvetica18_Character_215,Helvetica18_Character_216,Helvetica18_Character_217,Helvetica18_Character_218,Helvetica18_Character_219,Helvetica18_Character_220,Helvetica18_Character_221,Helvetica18_Character_222,Helvetica18_Character_223,
-                                                     Helvetica18_Character_224,Helvetica18_Character_225,Helvetica18_Character_226,Helvetica18_Character_227,Helvetica18_Character_228,Helvetica18_Character_229,Helvetica18_Character_230,Helvetica18_Character_231,Helvetica18_Character_232,Helvetica18_Character_233,Helvetica18_Character_234,Helvetica18_Character_235,Helvetica18_Character_236,Helvetica18_Character_237,Helvetica18_Character_238,Helvetica18_Character_239,
-                                                     Helvetica18_Character_240,Helvetica18_Character_241,Helvetica18_Character_242,Helvetica18_Character_243,Helvetica18_Character_244,Helvetica18_Character_245,Helvetica18_Character_246,Helvetica18_Character_247,Helvetica18_Character_248,Helvetica18_Character_249,Helvetica18_Character_250,Helvetica18_Character_251,Helvetica18_Character_252,Helvetica18_Character_253,Helvetica18_Character_254,Helvetica18_Character_255,NULL};
-
-/* The font structure: */
-const SFG_Font fgFontHelvetica18 = { "-adobe-helvetica-medium-r-normal--18-180-75-75-p-98-iso8859-1", 256, 23, Helvetica18_Character_Map, 0, 5 };
-
-static const GLubyte TimesRoman10_Character_000[] = {  8,  0,  0,  0,  0,170,  0,130,  0,130,  0,170,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_001[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_002[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_003[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_004[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_005[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_006[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_007[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_008[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_009[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_010[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_011[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_012[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_013[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_014[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_015[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_016[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_017[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_018[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_019[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_020[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_021[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_022[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_023[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_024[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_025[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_026[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_027[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_028[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_029[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_030[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_031[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_032[] = {  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_033[] = {  3,  0,  0,  0,  0, 64,  0, 64, 64, 64, 64, 64,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_034[] = {  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,160,160,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_035[] = {  5,  0,  0,  0,  0, 80, 80,248, 80,248, 80, 80,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_036[] = {  5,  0,  0,  0, 32,224,144, 16, 96,128,144,112, 32,  0,  0};
-static const GLubyte TimesRoman10_Character_037[] = {  8,  0,  0,  0,  0, 68, 42, 42, 86,168,164,126,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_038[] = {  8,  0,  0,  0,  0,118,141,152,116,110, 80, 48,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_039[] = {  3,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,192,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_040[] = {  4,  0,  0, 32, 64, 64,128,128,128, 64, 64, 32,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_041[] = {  4,  0,  0,128, 64, 64, 32, 32, 32, 64, 64,128,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_042[] = {  5,  0,  0,  0,  0,  0,  0,  0,  0,160, 64,160,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_043[] = {  6,  0,  0,  0,  0, 32, 32,248, 32, 32,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_044[] = {  3,  0,  0, 64, 64, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_045[] = {  7,  0,  0,  0,  0,  0,  0,120,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_046[] = {  3,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_047[] = {  3,  0,  0,  0,  0,128,128, 64, 64, 64, 32, 32,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_048[] = {  5,  0,  0,  0,  0, 96,144,144,144,144,144, 96,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_049[] = {  5,  0,  0,  0,  0,112, 32, 32, 32, 32, 96, 32,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_050[] = {  5,  0,  0,  0,  0,240, 64, 32, 32, 16,144, 96,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_051[] = {  5,  0,  0,  0,  0,224, 16, 16, 96, 16,144, 96,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_052[] = {  5,  0,  0,  0,  0, 16, 16,248,144, 80, 48, 16,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_053[] = {  5,  0,  0,  0,  0,224,144, 16, 16,224, 64,112,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_054[] = {  5,  0,  0,  0,  0, 96,144,144,144,224, 64, 48,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_055[] = {  5,  0,  0,  0,  0, 64, 64, 64, 32, 32,144,240,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_056[] = {  5,  0,  0,  0,  0, 96,144,144, 96,144,144, 96,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_057[] = {  5,  0,  0,  0,  0,192, 32,112,144,144,144, 96,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_058[] = {  3,  0,  0,  0,  0, 64,  0,  0,  0, 64,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_059[] = {  3,  0,  0, 64, 64, 64,  0,  0,  0, 64,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_060[] = {  5,  0,  0,  0,  0, 16, 32, 64, 32, 16,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_061[] = {  6,  0,  0,  0,  0,  0,248,  0,248,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_062[] = {  5,  0,  0,  0,  0,128, 64, 32, 64,128,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_063[] = {  4,  0,  0,  0,  0, 64,  0, 64, 64, 32,160,224,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_064[] = {  9,  0,  0,  0,  0, 62,  0, 64,  0,146,  0,173,  0,165,  0,165,  0,157,  0, 66,  0, 60,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_065[] = {  8,  0,  0,  0,  0,238, 68,124, 40, 40, 56, 16,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_066[] = {  6,  0,  0,  0,  0,240, 72, 72,112, 72, 72,240,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_067[] = {  7,  0,  0,  0,  0,120,196,128,128,128,196,124,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_068[] = {  7,  0,  0,  0,  0,248, 76, 68, 68, 68, 76,248,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_069[] = {  6,  0,  0,  0,  0,248, 72, 64,112, 64, 72,248,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_070[] = {  6,  0,  0,  0,  0,224, 64, 64,112, 64, 72,248,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_071[] = {  7,  0,  0,  0,  0,120,196,132,156,128,196,124,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_072[] = {  8,  0,  0,  0,  0,238, 68, 68,124, 68, 68,238,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_073[] = {  4,  0,  0,  0,  0,224, 64, 64, 64, 64, 64,224,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_074[] = {  4,  0,  0,  0,  0,192,160, 32, 32, 32, 32,112,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_075[] = {  7,  0,  0,  0,  0,236, 72, 80, 96, 80, 72,236,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_076[] = {  6,  0,  0,  0,  0,248, 72, 64, 64, 64, 64,224,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_077[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,235,128, 73,  0, 85,  0, 85,  0, 99,  0, 99,  0,227,128,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_078[] = {  8,  0,  0,  0,  0,228, 76, 76, 84, 84,100,238,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_079[] = {  7,  0,  0,  0,  0,120,204,132,132,132,204,120,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_080[] = {  6,  0,  0,  0,  0,224, 64, 64,112, 72, 72,240,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_081[] = {  7,  0,  0, 12, 24,112,204,132,132,132,204,120,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_082[] = {  7,  0,  0,  0,  0,236, 72, 80,112, 72, 72,240,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_083[] = {  5,  0,  0,  0,  0,224,144, 16, 96,192,144,112,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_084[] = {  6,  0,  0,  0,  0,112, 32, 32, 32, 32,168,248,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_085[] = {  8,  0,  0,  0,  0, 56,108, 68, 68, 68, 68,238,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_086[] = {  8,  0,  0,  0,  0, 16, 16, 40, 40,108, 68,238,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_087[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0, 34,  0, 34,  0, 85,  0, 85,  0,201,128,136,128,221,192,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_088[] = {  8,  0,  0,  0,  0,238, 68, 40, 16, 40, 68,238,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_089[] = {  8,  0,  0,  0,  0, 56, 16, 16, 40, 40, 68,238,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_090[] = {  6,  0,  0,  0,  0,248,136, 64, 32, 16,136,248,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_091[] = {  3,  0,  0,192,128,128,128,128,128,128,128,192,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_092[] = {  3,  0,  0,  0,  0, 32, 32, 64, 64, 64,128,128,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_093[] = {  3,  0,  0,192, 64, 64, 64, 64, 64, 64, 64,192,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_094[] = {  5,  0,  0,  0,  0,  0,  0,  0,  0, 80, 80, 32,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_095[] = {  5,  0,248,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_096[] = {  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,192,128,  0,  0};
-static const GLubyte TimesRoman10_Character_097[] = {  4,  0,  0,  0,  0,224,160, 96, 32,192,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_098[] = {  5,  0,  0,  0,  0,224,144,144,144,224,128,128,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_099[] = {  4,  0,  0,  0,  0, 96,128,128,128, 96,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_100[] = {  5,  0,  0,  0,  0,104,144,144,144,112, 16, 48,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_101[] = {  4,  0,  0,  0,  0, 96,128,192,160, 96,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_102[] = {  4,  0,  0,  0,  0,224, 64, 64, 64,224, 64, 48,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_103[] = {  5,  0,  0,224,144, 96, 64,160,160,112,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_104[] = {  5,  0,  0,  0,  0,216,144,144,144,224,128,128,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_105[] = {  3,  0,  0,  0,  0, 64, 64, 64, 64,192,  0, 64,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_106[] = {  3,  0,  0,128, 64, 64, 64, 64, 64,192,  0, 64,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_107[] = {  5,  0,  0,  0,  0,152,144,224,160,144,128,128,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_108[] = {  4,  0,  0,  0,  0,224, 64, 64, 64, 64, 64,192,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_109[] = {  8,  0,  0,  0,  0,219,146,146,146,236,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_110[] = {  5,  0,  0,  0,  0,216,144,144,144,224,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_111[] = {  5,  0,  0,  0,  0, 96,144,144,144, 96,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_112[] = {  5,  0,  0,192,128,224,144,144,144,224,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_113[] = {  5,  0,  0, 56, 16,112,144,144,144,112,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_114[] = {  4,  0,  0,  0,  0,224, 64, 64, 96,160,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_115[] = {  4,  0,  0,  0,  0,224, 32, 96,128,224,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_116[] = {  4,  0,  0,  0,  0, 48, 64, 64, 64,224, 64,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_117[] = {  5,  0,  0,  0,  0,104,144,144,144,144,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_118[] = {  5,  0,  0,  0,  0, 32, 96, 80,144,216,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_119[] = {  8,  0,  0,  0,  0, 40,108, 84,146,219,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_120[] = {  6,  0,  0,  0,  0,216, 80, 32, 80,216,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_121[] = {  5,  0,  0,128,128, 64, 96,160,144,184,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_122[] = {  5,  0,  0,  0,  0,240,144, 64, 32,240,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_123[] = {  4,  0,  0, 32, 64, 64, 64,128, 64, 64, 64, 32,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_124[] = {  2,  0,  0,128,128,128,128,128,128,128,128,128,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_125[] = {  4,  0,  0,128, 64, 64, 64, 32, 64, 64, 64,128,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_126[] = {  7,  0,  0,  0,  0,  0,  0,152,100,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_127[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_128[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_129[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_130[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_131[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_132[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_133[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_134[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_135[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_136[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_137[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_138[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_139[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_140[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_141[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_142[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_143[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_144[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_145[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_146[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_147[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_148[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_149[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_150[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_151[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_152[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_153[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_154[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_155[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_156[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_157[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_158[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_159[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,170,  0,  0,  0,130,  0,  0,  0,130,  0,  0,  0,170,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_160[] = {  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_161[] = {  3,  0,  0, 64, 64, 64, 64, 64,  0, 64,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_162[] = {  5,  0,  0,  0,128,224,144,128,144,112, 16,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_163[] = {  5,  0,  0,  0,  0,240,200, 64,224, 64, 80, 48,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_164[] = {  5,  0,  0,  0,  0,  0,136,112, 80, 80,112,136,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_165[] = {  5,  0,  0,  0,  0,112, 32,248, 32,216, 80,136,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_166[] = {  2,  0,  0,  0,  0,128,128,128,  0,128,128,128,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_167[] = {  5,  0,  0,  0,224,144, 32, 80,144,160, 64,144,112,  0,  0};
-static const GLubyte TimesRoman10_Character_168[] = {  5,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 80,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_169[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 28,  0, 34,  0, 77,  0, 81,  0, 77,  0, 34,  0, 28,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_170[] = {  4,  0,  0,  0,  0,  0,  0,224,  0,160, 32,192,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_171[] = {  5,  0,  0,  0,  0,  0, 80,160,160, 80,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_172[] = {  7,  0,  0,  0,  0,  0,  4,  4,124,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_173[] = {  4,  0,  0,  0,  0,  0,  0,224,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_174[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0, 28,  0, 34,  0, 85,  0, 89,  0, 93,  0, 34,  0, 28,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_175[] = {  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,224,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_176[] = {  4,  0,  0,  0,  0,  0,  0,  0, 96,144,144, 96,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_177[] = {  6,  0,  0,  0,  0,248,  0, 32, 32,248, 32, 32,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_178[] = {  3,  0,  0,  0,  0,  0,  0,  0,224, 64,160, 96,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_179[] = {  3,  0,  0,  0,  0,  0,  0,  0,192, 32, 64,224,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_180[] = {  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,128, 64,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_181[] = {  5,  0,  0,128,128,232,144,144,144,144,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_182[] = {  6,  0,  0, 40, 40, 40, 40,104,232,232,232,124,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_183[] = {  2,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_184[] = {  4,  0,192, 32, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_185[] = {  3,  0,  0,  0,  0,  0,  0,  0,224, 64,192, 64,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_186[] = {  4,  0,  0,  0,  0,  0,  0,224,  0, 64,160, 64,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_187[] = {  5,  0,  0,  0,  0,  0,160, 80, 80,160,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_188[] = {  8,  0,  0,  0,  0, 68, 62, 44,244, 72,200, 68,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_189[] = {  8,  0,  0,  0,  0, 78, 36, 42,246, 72,200, 68,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_190[] = {  8,  0,  0,  0,  0, 68, 62, 44,212, 40, 72,228,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_191[] = {  4,  0,  0,224,160,128, 64, 64,  0, 64,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_192[] = {  8,  0,  0,  0,  0,238, 68,124, 40, 40, 56, 16,  0, 16, 32};
-static const GLubyte TimesRoman10_Character_193[] = {  8,  0,  0,  0,  0,238, 68,124, 40, 40, 56, 16,  0, 16,  8};
-static const GLubyte TimesRoman10_Character_194[] = {  8,  0,  0,  0,  0,238, 68,124, 40, 40, 56, 16,  0, 40, 16};
-static const GLubyte TimesRoman10_Character_195[] = {  8,  0,  0,  0,  0,238, 68,124, 40, 40, 56, 16,  0, 40, 20};
-static const GLubyte TimesRoman10_Character_196[] = {  8,  0,  0,  0,  0,238, 68,124, 40, 40, 56, 16,  0, 40,  0};
-static const GLubyte TimesRoman10_Character_197[] = {  8,  0,  0,  0,  0,238, 68,124, 40, 40, 56, 16, 16, 40, 16};
-static const GLubyte TimesRoman10_Character_198[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,239,  0, 73,  0,120,  0, 46,  0, 40,  0, 57,  0, 31,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_199[] = {  7,  0, 96, 16, 32,120,196,128,128,128,196,124,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_200[] = {  6,  0,  0,  0,  0,248, 72, 64,112, 64, 72,248,  0, 32, 64};
-static const GLubyte TimesRoman10_Character_201[] = {  6,  0,  0,  0,  0,248, 72, 64,112, 64, 72,248,  0, 32, 16};
-static const GLubyte TimesRoman10_Character_202[] = {  6,  0,  0,  0,  0,248, 72, 64,112, 64, 72,248,  0, 80, 32};
-static const GLubyte TimesRoman10_Character_203[] = {  6,  0,  0,  0,  0,248, 72, 64,112, 64, 72,248,  0, 80,  0};
-static const GLubyte TimesRoman10_Character_204[] = {  4,  0,  0,  0,  0,224, 64, 64, 64, 64, 64,224,  0, 64,128};
-static const GLubyte TimesRoman10_Character_205[] = {  4,  0,  0,  0,  0,224, 64, 64, 64, 64, 64,224,  0, 64, 32};
-static const GLubyte TimesRoman10_Character_206[] = {  4,  0,  0,  0,  0,224, 64, 64, 64, 64, 64,224,  0,160, 64};
-static const GLubyte TimesRoman10_Character_207[] = {  4,  0,  0,  0,  0,224, 64, 64, 64, 64, 64,224,  0,160,  0};
-static const GLubyte TimesRoman10_Character_208[] = {  7,  0,  0,  0,  0,248, 76, 68,228, 68, 76,248,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_209[] = {  8,  0,  0,  0,  0,228, 76, 76, 84, 84,100,238,  0, 80, 40};
-static const GLubyte TimesRoman10_Character_210[] = {  7,  0,  0,  0,  0,120,204,132,132,132,204,120,  0, 32, 64};
-static const GLubyte TimesRoman10_Character_211[] = {  7,  0,  0,  0,  0,120,204,132,132,132,204,120,  0, 16,  8};
-static const GLubyte TimesRoman10_Character_212[] = {  7,  0,  0,  0,  0,120,204,132,132,132,204,120,  0, 80, 32};
-static const GLubyte TimesRoman10_Character_213[] = {  7,  0,  0,  0,  0,120,204,132,132,132,204,120,  0, 80, 40};
-static const GLubyte TimesRoman10_Character_214[] = {  7,  0,  0,  0,  0,120,204,132,132,132,204,120,  0, 80,  0};
-static const GLubyte TimesRoman10_Character_215[] = {  6,  0,  0,  0,  0,136, 80, 32, 80,136,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_216[] = {  8,  0,  0,  0,128,124,102, 82, 82, 74,102, 62,  1,  0,  0};
-static const GLubyte TimesRoman10_Character_217[] = {  8,  0,  0,  0,  0, 56,108, 68, 68, 68, 68,238,  0, 16, 32};
-static const GLubyte TimesRoman10_Character_218[] = {  8,  0,  0,  0,  0, 56,108, 68, 68, 68, 68,238,  0, 16,  8};
-static const GLubyte TimesRoman10_Character_219[] = {  8,  0,  0,  0,  0, 56,108, 68, 68, 68, 68,238,  0, 40, 16};
-static const GLubyte TimesRoman10_Character_220[] = {  8,  0,  0,  0,  0, 56,108, 68, 68, 68, 68,238,  0, 40,  0};
-static const GLubyte TimesRoman10_Character_221[] = {  8,  0,  0,  0,  0, 56, 16, 16, 40, 40, 68,238,  0, 16,  8};
-static const GLubyte TimesRoman10_Character_222[] = {  6,  0,  0,  0,  0,224, 64,112, 72,112, 64,224,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_223[] = {  5,  0,  0,  0,  0,224, 80, 80, 96, 80, 80, 32,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_224[] = {  4,  0,  0,  0,  0,224,160, 96, 32,192,  0, 64,128,  0,  0};
-static const GLubyte TimesRoman10_Character_225[] = {  4,  0,  0,  0,  0,224,160, 96, 32,192,  0, 64, 32,  0,  0};
-static const GLubyte TimesRoman10_Character_226[] = {  4,  0,  0,  0,  0,224,160, 96, 32,192,  0,160, 64,  0,  0};
-static const GLubyte TimesRoman10_Character_227[] = {  4,  0,  0,  0,  0,224,160, 96, 32,192,  0,160, 80,  0,  0};
-static const GLubyte TimesRoman10_Character_228[] = {  4,  0,  0,  0,  0,224,160, 96, 32,192,  0,160,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_229[] = {  4,  0,  0,  0,  0,224,160, 96, 32,192, 64,160, 64,  0,  0};
-static const GLubyte TimesRoman10_Character_230[] = {  6,  0,  0,  0,  0,216,160,112, 40,216,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_231[] = {  4,  0,192, 32, 64, 96,128,128,128, 96,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_232[] = {  4,  0,  0,  0,  0, 96,128,192,160, 96,  0, 64,128,  0,  0};
-static const GLubyte TimesRoman10_Character_233[] = {  4,  0,  0,  0,  0, 96,128,192,160, 96,  0, 64, 32,  0,  0};
-static const GLubyte TimesRoman10_Character_234[] = {  4,  0,  0,  0,  0, 96,128,192,160, 96,  0,160, 64,  0,  0};
-static const GLubyte TimesRoman10_Character_235[] = {  4,  0,  0,  0,  0, 96,128,192,160, 96,  0,160,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_236[] = {  4,  0,  0,  0,  0,224, 64, 64, 64,192,  0, 64,128,  0,  0};
-static const GLubyte TimesRoman10_Character_237[] = {  4,  0,  0,  0,  0,224, 64, 64, 64,192,  0, 64, 32,  0,  0};
-static const GLubyte TimesRoman10_Character_238[] = {  4,  0,  0,  0,  0,224, 64, 64, 64,192,  0,160, 64,  0,  0};
-static const GLubyte TimesRoman10_Character_239[] = {  4,  0,  0,  0,  0,224, 64, 64, 64,192,  0,160,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_240[] = {  5,  0,  0,  0,  0, 96,144,144,144,112,160,112, 64,  0,  0};
-static const GLubyte TimesRoman10_Character_241[] = {  5,  0,  0,  0,  0,216,144,144,144,224,  0,160, 80,  0,  0};
-static const GLubyte TimesRoman10_Character_242[] = {  5,  0,  0,  0,  0, 96,144,144,144, 96,  0, 32, 64,  0,  0};
-static const GLubyte TimesRoman10_Character_243[] = {  5,  0,  0,  0,  0, 96,144,144,144, 96,  0, 64, 32,  0,  0};
-static const GLubyte TimesRoman10_Character_244[] = {  5,  0,  0,  0,  0, 96,144,144,144, 96,  0,160, 64,  0,  0};
-static const GLubyte TimesRoman10_Character_245[] = {  5,  0,  0,  0,  0, 96,144,144,144, 96,  0,160, 80,  0,  0};
-static const GLubyte TimesRoman10_Character_246[] = {  5,  0,  0,  0,  0, 96,144,144,144, 96,  0,160,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_247[] = {  6,  0,  0,  0,  0, 32,  0,248,  0, 32,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_248[] = {  5,  0,  0,  0,  0,224,144,144,144,112,  8,  0,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_249[] = {  5,  0,  0,  0,  0,104,144,144,144,144,  0, 32, 64,  0,  0};
-static const GLubyte TimesRoman10_Character_250[] = {  5,  0,  0,  0,  0,104,144,144,144,144,  0, 64, 32,  0,  0};
-static const GLubyte TimesRoman10_Character_251[] = {  5,  0,  0,  0,  0,104,144,144,144,144,  0, 80, 32,  0,  0};
-static const GLubyte TimesRoman10_Character_252[] = {  5,  0,  0,  0,  0,104,144,144,144,144,  0, 80,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_253[] = {  5,  0,  0,128,192, 64, 96,160,144,184,  0, 32, 16,  0,  0};
-static const GLubyte TimesRoman10_Character_254[] = {  5,  0,  0,192,128,224,144,144,144,224,128,128,  0,  0,  0};
-static const GLubyte TimesRoman10_Character_255[] = {  5,  0,  0,128,192, 64, 96,160,144,184,  0,160,  0,  0,  0};
-
-/* The font characters mapping: */
-static const GLubyte* TimesRoman10_Character_Map[] = {TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,
-                                                      TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,
-                                                      TimesRoman10_Character_032,TimesRoman10_Character_033,TimesRoman10_Character_034,TimesRoman10_Character_035,TimesRoman10_Character_036,TimesRoman10_Character_037,TimesRoman10_Character_038,TimesRoman10_Character_039,TimesRoman10_Character_040,TimesRoman10_Character_041,TimesRoman10_Character_042,TimesRoman10_Character_043,TimesRoman10_Character_044,TimesRoman10_Character_045,TimesRoman10_Character_046,TimesRoman10_Character_047,
-                                                      TimesRoman10_Character_048,TimesRoman10_Character_049,TimesRoman10_Character_050,TimesRoman10_Character_051,TimesRoman10_Character_052,TimesRoman10_Character_053,TimesRoman10_Character_054,TimesRoman10_Character_055,TimesRoman10_Character_056,TimesRoman10_Character_057,TimesRoman10_Character_058,TimesRoman10_Character_059,TimesRoman10_Character_060,TimesRoman10_Character_061,TimesRoman10_Character_062,TimesRoman10_Character_063,
-                                                      TimesRoman10_Character_064,TimesRoman10_Character_065,TimesRoman10_Character_066,TimesRoman10_Character_067,TimesRoman10_Character_068,TimesRoman10_Character_069,TimesRoman10_Character_070,TimesRoman10_Character_071,TimesRoman10_Character_072,TimesRoman10_Character_073,TimesRoman10_Character_074,TimesRoman10_Character_075,TimesRoman10_Character_076,TimesRoman10_Character_077,TimesRoman10_Character_078,TimesRoman10_Character_079,
-                                                      TimesRoman10_Character_080,TimesRoman10_Character_081,TimesRoman10_Character_082,TimesRoman10_Character_083,TimesRoman10_Character_084,TimesRoman10_Character_085,TimesRoman10_Character_086,TimesRoman10_Character_087,TimesRoman10_Character_088,TimesRoman10_Character_089,TimesRoman10_Character_090,TimesRoman10_Character_091,TimesRoman10_Character_092,TimesRoman10_Character_093,TimesRoman10_Character_094,TimesRoman10_Character_095,
-                                                      TimesRoman10_Character_096,TimesRoman10_Character_097,TimesRoman10_Character_098,TimesRoman10_Character_099,TimesRoman10_Character_100,TimesRoman10_Character_101,TimesRoman10_Character_102,TimesRoman10_Character_103,TimesRoman10_Character_104,TimesRoman10_Character_105,TimesRoman10_Character_106,TimesRoman10_Character_107,TimesRoman10_Character_108,TimesRoman10_Character_109,TimesRoman10_Character_110,TimesRoman10_Character_111,
-                                                      TimesRoman10_Character_112,TimesRoman10_Character_113,TimesRoman10_Character_114,TimesRoman10_Character_115,TimesRoman10_Character_116,TimesRoman10_Character_117,TimesRoman10_Character_118,TimesRoman10_Character_119,TimesRoman10_Character_120,TimesRoman10_Character_121,TimesRoman10_Character_122,TimesRoman10_Character_123,TimesRoman10_Character_124,TimesRoman10_Character_125,TimesRoman10_Character_126,TimesRoman10_Character_032,
-                                                      TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,
-                                                      TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,TimesRoman10_Character_032,
-                                                      TimesRoman10_Character_160,TimesRoman10_Character_161,TimesRoman10_Character_162,TimesRoman10_Character_163,TimesRoman10_Character_164,TimesRoman10_Character_165,TimesRoman10_Character_166,TimesRoman10_Character_167,TimesRoman10_Character_168,TimesRoman10_Character_169,TimesRoman10_Character_170,TimesRoman10_Character_171,TimesRoman10_Character_172,TimesRoman10_Character_173,TimesRoman10_Character_174,TimesRoman10_Character_175,
-                                                      TimesRoman10_Character_176,TimesRoman10_Character_177,TimesRoman10_Character_178,TimesRoman10_Character_179,TimesRoman10_Character_180,TimesRoman10_Character_181,TimesRoman10_Character_182,TimesRoman10_Character_183,TimesRoman10_Character_184,TimesRoman10_Character_185,TimesRoman10_Character_186,TimesRoman10_Character_187,TimesRoman10_Character_188,TimesRoman10_Character_189,TimesRoman10_Character_190,TimesRoman10_Character_191,
-                                                      TimesRoman10_Character_192,TimesRoman10_Character_193,TimesRoman10_Character_194,TimesRoman10_Character_195,TimesRoman10_Character_196,TimesRoman10_Character_197,TimesRoman10_Character_198,TimesRoman10_Character_199,TimesRoman10_Character_200,TimesRoman10_Character_201,TimesRoman10_Character_202,TimesRoman10_Character_203,TimesRoman10_Character_204,TimesRoman10_Character_205,TimesRoman10_Character_206,TimesRoman10_Character_207,
-                                                      TimesRoman10_Character_208,TimesRoman10_Character_209,TimesRoman10_Character_210,TimesRoman10_Character_211,TimesRoman10_Character_212,TimesRoman10_Character_213,TimesRoman10_Character_214,TimesRoman10_Character_215,TimesRoman10_Character_216,TimesRoman10_Character_217,TimesRoman10_Character_218,TimesRoman10_Character_219,TimesRoman10_Character_220,TimesRoman10_Character_221,TimesRoman10_Character_222,TimesRoman10_Character_223,
-                                                      TimesRoman10_Character_224,TimesRoman10_Character_225,TimesRoman10_Character_226,TimesRoman10_Character_227,TimesRoman10_Character_228,TimesRoman10_Character_229,TimesRoman10_Character_230,TimesRoman10_Character_231,TimesRoman10_Character_232,TimesRoman10_Character_233,TimesRoman10_Character_234,TimesRoman10_Character_235,TimesRoman10_Character_236,TimesRoman10_Character_237,TimesRoman10_Character_238,TimesRoman10_Character_239,
-                                                      TimesRoman10_Character_240,TimesRoman10_Character_241,TimesRoman10_Character_242,TimesRoman10_Character_243,TimesRoman10_Character_244,TimesRoman10_Character_245,TimesRoman10_Character_246,TimesRoman10_Character_247,TimesRoman10_Character_248,TimesRoman10_Character_249,TimesRoman10_Character_250,TimesRoman10_Character_251,TimesRoman10_Character_252,TimesRoman10_Character_253,TimesRoman10_Character_254,TimesRoman10_Character_255,NULL};
-
-/* The font structure: */
-const SFG_Font fgFontTimesRoman10 = { "-adobe-times-medium-r-normal--10-100-75-75-p-54-iso8859-1", 256, 14, TimesRoman10_Character_Map, 0, 4 };
-
-static const GLubyte TimesRoman24_Character_000[] = { 19,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0, 64,  0, 64,  0,  0,  0, 64,  0, 64,  0,  0,  0, 64,  0, 64,  0,  0,  0, 64,  0, 64,  0,  0,  0, 64,  0, 64,  0,  0,  0, 64,  0, 64,  0,  0,  0, 64,  0, 64,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_001[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_002[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_003[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_004[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_005[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_006[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_007[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_008[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_009[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_010[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_011[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_012[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_013[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_014[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_015[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_016[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_017[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_018[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_019[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_020[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_021[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_022[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_023[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_024[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_025[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_026[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_027[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_028[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_029[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_030[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_031[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_032[] = {  6,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_033[] = {  8,  0,  0,  0,  0,  0,  0,  0, 24, 24,  0,  0,  0, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_034[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 68,  0,102,  0,102,  0,102,  0,102,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_035[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 17,  0, 17,  0, 17,  0, 17,  0, 17,  0,127,224,127,224,  8,128,  8,128,  8,128, 63,240, 63,240,  4, 64,  4, 64,  4, 64,  4, 64,  4, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_036[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  4,  0, 63,  0,229,192,196,192,132, 96,132, 96,  4, 96,  4,224,  7,192,  7,128, 30,  0, 60,  0,116,  0,100,  0,100, 32,100, 96, 52,224, 31,128,  4,  0,  4,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_037[] = { 19,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 24, 30,  0, 12, 57,  0,  6, 48,128,  2, 48, 64,  3, 48, 64,  1,152, 64,  0,140,192,  0,199,128, 60, 96,  0,114, 32,  0, 97, 48,  0, 96,152,  0, 96,136,  0, 48,140,  0, 25,254,  0, 15,  6,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_038[] = { 18,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 30, 30,  0, 63,191,  0,112,240,128, 96, 96,  0, 96,224,  0, 96,208,  0, 49,144,  0, 27,136,  0, 15, 12,  0,  7, 31,  0,  7,128,  0, 14,192,  0, 12, 96,  0, 12, 32,  0, 12, 32,  0,  6, 96,  0,  3,192,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_039[] = {  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 24, 12,  4, 28, 24,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_040[] = {  8,  0,  0,  2,  4,  8, 24, 16, 48, 48, 96, 96, 96, 96, 96, 96, 96, 96, 48, 48, 16, 24,  8,  4,  2,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_041[] = {  8,  0,  0, 64, 32, 16, 24,  8, 12, 12,  6,  6,  6,  6,  6,  6,  6,  6, 12, 12,  8, 24, 16, 32, 64,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_042[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  7,  0, 50, 96, 58,224,  7,  0, 58,224, 50, 96,  7,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_043[] = { 14,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,  0,  3,  0,  3,  0,  3,  0,  3,  0,127,248,127,248,  3,  0,  3,  0,  3,  0,  3,  0,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_044[] = {  7,  0,  0,  0,  0, 48, 24,  8, 56, 48,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_045[] = { 14,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,248,127,248,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_046[] = {  6,  0,  0,  0,  0,  0,  0,  0, 48, 48,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_047[] = {  7,  0,  0,  0,  0,192,192,192, 64, 96, 96, 32, 48, 48, 16, 24, 24,  8, 12, 12,  4,  6,  6,  6,  6,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_048[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15,  0, 25,128, 48,192, 48,192,112,224, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 48,192, 48,192, 25,128, 15,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_049[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 63,192,  6,  0,  6,  0,  6,  0,  6,  0,  6,  0,  6,  0,  6,  0,  6,  0,  6,  0,  6,  0,  6,  0,  6,  0,  6,  0, 30,  0,  6,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_050[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,192,127,224, 48, 32, 24,  0, 12,  0,  6,  0,  2,  0,  3,  0,  1,128,  1,128,  0,192,  0,192, 64,192, 64,192, 33,192, 63,128, 14,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_051[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,  0,115,  0, 97,128,  0,128,  0,192,  0,192,  0,192,  1,192,  3,128, 15,  0,  6,  0,  3,  0, 65,128, 65,128, 35,128, 63,  0, 14,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_052[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,128,  1,128,  1,128,  1,128,127,224,127,224, 97,128, 33,128, 49,128, 17,128, 25,128,  9,128, 13,128,  5,128,  3,128,  3,128,  1,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_053[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 63,  0,113,192, 96,192,  0, 96,  0, 96,  0, 96,  0, 96,  0,224,  1,192,  7,192, 63,  0, 60,  0, 48,  0, 16,  0, 16,  0, 15,192, 15,224,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_054[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15,  0, 61,192, 48,192,112, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,192,121,192,119,  0, 48,  0, 56,  0, 24,  0, 12,  0,  7,  0,  1,224,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_055[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 12,  0, 12,  0,  6,  0,  6,  0,  6,  0,  2,  0,  3,  0,  3,  0,  1,  0,  1,128,  1,128,  0,128,  0,192, 64,192, 96, 96,127,224, 63,224,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_056[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15,  0, 57,192,112,192, 96, 96, 96, 96, 96, 96, 32,224, 48,192, 27,128, 15,  0, 15,  0, 25,128, 48,192, 48,192, 48,192, 25,128, 15,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_057[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,120,  0, 14,  0,  3,  0,  1,128,  1,192,  0,192, 14,192, 57,224, 48,224, 96, 96, 96, 96, 96, 96, 96, 96, 96,224, 48,192, 59,192, 15,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_058[] = {  6,  0,  0,  0,  0,  0,  0,  0, 48, 48,  0,  0,  0,  0,  0,  0,  0, 48, 48,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_059[] = {  7,  0,  0,  0,  0, 48, 24,  8, 56, 48,  0,  0,  0,  0,  0,  0,  0, 48, 48,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_060[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 48,  0,224,  3,128, 14,  0, 56,  0, 96,  0, 56,  0, 14,  0,  3,128,  0,224,  0, 48,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_061[] = { 14,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,248,127,248,  0,  0,  0,  0,127,248,127,248,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_062[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 96,  0, 56,  0, 14,  0,  3,128,  0,224,  0, 48,  0,224,  3,128, 14,  0, 56,  0, 96,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_063[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 12,  0, 12,  0,  0,  0,  0,  0,  4,  0,  4,  0,  4,  0,  6,  0,  6,  0,  3,  0,  3,128,  1,192, 48,192, 48,192, 32,192, 49,128, 31,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_064[] = { 22,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,252,  0,  3,131,  0,  6,  0,  0, 12,  0,  0, 24,119,128, 24,222,192, 49,142, 96, 49,134, 32, 49,134, 48, 49,134, 16, 49,131, 16, 48,195, 16, 48,227, 16, 56,127, 16, 24, 59, 48, 28,  0, 32, 14,  0, 96,  7,  0,192,  3,195,128,  0,254,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_065[] = { 17,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,252, 31,128, 48,  6,  0, 16,  6,  0, 16, 12,  0, 24, 12,  0,  8, 12,  0, 15,248,  0, 12, 24,  0,  4, 24,  0,  4, 48,  0,  6, 48,  0,  2, 48,  0,  2, 96,  0,  1, 96,  0,  1,192,  0,  1,192,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_066[] = { 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,240, 24, 60, 24, 12, 24,  6, 24,  6, 24,  6, 24, 12, 24, 28, 31,240, 24, 32, 24, 24, 24, 12, 24, 12, 24, 12, 24, 24, 24, 56,127,224,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_067[] = { 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,240, 15, 28, 28,  4, 48,  2, 48,  0, 96,  0, 96,  0, 96,  0, 96,  0, 96,  0, 96,  0, 96,  0, 48,  2, 48,  2, 28,  6, 14, 30,  3,242,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_068[] = { 17,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,224,  0, 24, 56,  0, 24, 28,  0, 24,  6,  0, 24,  6,  0, 24,  3,  0, 24,  3,  0, 24,  3,  0, 24,  3,  0, 24,  3,  0, 24,  3,  0, 24,  3,  0, 24,  6,  0, 24,  6,  0, 24, 28,  0, 24, 56,  0,127,224,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_069[] = { 15,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,252, 24, 12, 24,  4, 24,  4, 24,  0, 24,  0, 24, 32, 24, 32, 31,224, 24, 32, 24, 32, 24,  0, 24,  0, 24,  8, 24,  8, 24, 24,127,248,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_070[] = { 14,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,126,  0, 24,  0, 24,  0, 24,  0, 24,  0, 24,  0, 24, 16, 24, 16, 31,240, 24, 16, 24, 16, 24,  0, 24,  0, 24,  8, 24,  8, 24, 24,127,248,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_071[] = { 18,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,240,  0, 15, 28,  0, 28, 14,  0, 48,  6,  0, 48,  6,  0, 96,  6,  0, 96,  6,  0, 96, 31,128, 96,  0,  0, 96,  0,  0, 96,  0,  0, 96,  0,  0, 48,  2,  0, 48,  2,  0, 28,  6,  0, 14, 30,  0,  3,242,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_072[] = { 19,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,126, 15,192, 24,  3,  0, 24,  3,  0, 24,  3,  0, 24,  3,  0, 24,  3,  0, 24,  3,  0, 24,  3,  0, 31,255,  0, 24,  3,  0, 24,  3,  0, 24,  3,  0, 24,  3,  0, 24,  3,  0, 24,  3,  0, 24,  3,  0,126, 15,192,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_073[] = {  8,  0,  0,  0,  0,  0,  0,  0,126, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,126,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_074[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,  0,102,  0, 99,  0,  3,  0,  3,  0,  3,  0,  3,  0,  3,  0,  3,  0,  3,  0,  3,  0,  3,  0,  3,  0,  3,  0,  3,  0,  3,  0, 15,192,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_075[] = { 17,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,126, 15,128, 24,  7,  0, 24, 14,  0, 24, 28,  0, 24, 56,  0, 24,112,  0, 24,224,  0, 25,192,  0, 31,128,  0, 31,  0,  0, 25,128,  0, 24,192,  0, 24, 96,  0, 24, 48,  0, 24, 24,  0, 24, 12,  0,126, 63,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_076[] = { 14,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,252, 24, 12, 24,  4, 24,  4, 24,  0, 24,  0, 24,  0, 24,  0, 24,  0, 24,  0, 24,  0, 24,  0, 24,  0, 24,  0, 24,  0, 24,  0,126,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_077[] = { 22,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,124, 16,252, 16, 48, 48, 16, 48, 48, 16,104, 48, 16,104, 48, 16,196, 48, 16,196, 48, 17,132, 48, 17,130, 48, 19,  2, 48, 19,  1, 48, 22,  1, 48, 22,  1, 48, 28,  0,176, 28,  0,176, 24,  0,112,120,  0,124,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_078[] = { 18,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,124,  6,  0, 16, 14,  0, 16, 14,  0, 16, 26,  0, 16, 50,  0, 16, 50,  0, 16, 98,  0, 16,194,  0, 16,194,  0, 17,130,  0, 19,  2,  0, 19,  2,  0, 22,  2,  0, 28,  2,  0, 28,  2,  0, 24,  2,  0,120, 15,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_079[] = { 18,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,240,  0, 14, 28,  0, 28, 14,  0, 48,  3,  0, 48,  3,  0, 96,  1,128, 96,  1,128, 96,  1,128, 96,  1,128, 96,  1,128, 96,  1,128, 96,  1,128, 48,  3,  0, 48,  3,  0, 28, 14,  0, 14, 28,  0,  3,240,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_080[] = { 15,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,126,  0, 24,  0, 24,  0, 24,  0, 24,  0, 24,  0, 24,  0, 24,  0, 31,224, 24, 56, 24, 24, 24, 12, 24, 12, 24, 12, 24, 24, 24, 56,127,224,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_081[] = { 18,  0,  0,  0,  0,  0,  0,  0,  7,128,  0, 28,  0,  0, 56,  0,  0,112,  0,  0,224,  0,  3,240,  0, 14, 28,  0, 28, 14,  0, 48,  3,  0, 48,  3,  0, 96,  1,128, 96,  1,128, 96,  1,128, 96,  1,128, 96,  1,128, 96,  1,128, 96,  1,128, 48,  3,  0, 48,  3,  0, 28, 14,  0, 14, 28,  0,  3,240,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_082[] = { 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,126, 15, 24, 14, 24, 28, 24, 56, 24, 48, 24, 96, 24,224, 25,192, 31,224, 24, 56, 24, 24, 24, 28, 24, 12, 24, 28, 24, 24, 24, 56,127,224,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_083[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 79,  0,120,192, 96, 96, 64, 48, 64, 48,  0, 48,  0,112,  1,224,  7,192, 15,  0, 60,  0,112,  0, 96, 32, 96, 32, 96, 96, 49,224, 15, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_084[] = { 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  7,224,  1,128,  1,128,  1,128,  1,128,  1,128,  1,128,  1,128,  1,128,  1,128,  1,128,  1,128,  1,128, 65,130, 65,130, 97,134,127,254,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_085[] = { 18,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,240,  0, 14, 24,  0, 12,  4,  0, 24,  4,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0,126, 15,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_086[] = { 17,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,128,  0,  1,128,  0,  1,128,  0,  3,192,  0,  3, 64,  0,  3, 96,  0,  6, 32,  0,  6, 32,  0,  6, 48,  0, 12, 16,  0, 12, 24,  0, 24,  8,  0, 24,  8,  0, 24, 12,  0, 48,  4,  0, 48,  6,  0,252, 31,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_087[] = { 23,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,131,  0,  1,131,  0,  1,131,128,  3,135,128,  3, 70,128,  3, 70,192,  6, 70, 64,  6, 76, 64,  6, 76, 96, 12, 44, 96, 12, 44, 32, 24, 44, 32, 24, 24, 48, 24, 24, 16, 48, 24, 16, 48, 24, 24,252,126,126,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_088[] = { 18,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,252, 15,192, 48,  3,128, 24,  7,  0,  8, 14,  0,  4, 12,  0,  6, 24,  0,  2, 56,  0,  1,112,  0,  0,224,  0,  0,192,  0,  1,192,  0,  3,160,  0,  3, 16,  0,  6,  8,  0, 14, 12,  0, 28,  6,  0,126, 15,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_089[] = { 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  7,224,  1,128,  1,128,  1,128,  1,128,  1,128,  1,128,  3,192,  3, 64,  6, 96,  6, 32, 12, 48, 28, 16, 24, 24, 56,  8, 48, 12,252, 63,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_090[] = { 15,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,252,112, 12, 56,  4, 24,  4, 28,  0, 12,  0, 14,  0,  7,  0,  3,  0,  3,128,  1,128,  1,192,  0,224, 64, 96, 64,112, 96, 56,127,248,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_091[] = {  8,  0,  0,  0, 62, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 62,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_092[] = {  7,  0,  0,  0,  0,  0,  0,  0,  6,  6,  4, 12, 12,  8, 24, 24, 16, 48, 48, 32, 96, 96, 64,192,192,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_093[] = {  8,  0,  0,  0,124, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,124,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_094[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64, 64, 96,192, 32,128, 49,128, 17,  0, 27,  0, 10,  0, 14,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_095[] = { 13,  0,  0,  0,  0,255,248,255,248,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_096[] = {  7,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 48,112, 64, 96, 48,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_097[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 56,192,125,128, 99,128, 97,128, 97,128, 49,128, 29,128,  7,128,  1,128, 49,128, 51,128, 31,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_098[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 47,  0, 57,192, 48,192, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48,192, 57,192, 55,  0, 48,  0, 48,  0, 48,  0, 48,  0,112,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_099[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15,  0, 63,128, 56, 64,112,  0, 96,  0, 96,  0, 96,  0, 96,  0, 96,  0, 32,192, 49,192, 15,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_100[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15, 96, 57,192, 48,192, 96,192, 96,192, 96,192, 96,192, 96,192, 96,192, 48,192, 57,192, 14,192,  0,192,  0,192,  0,192,  0,192,  1,192,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_101[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15,  0, 63,128, 56, 64,112,  0, 96,  0, 96,  0, 96,  0,127,192, 96,192, 32,192, 49,128, 15,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_102[] = {  7,  0,  0,  0,  0,  0,  0,  0,120, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,254, 48, 48, 48, 22, 14,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_103[] = { 12,  0,  0,  0,  0, 31,128,120,224, 96, 48, 96, 16, 48, 48, 31,224, 63,128, 48,  0, 24,  0, 31,  0, 25,128, 48,192, 48,192, 48,192, 48,192, 25,128, 15,224,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_104[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,120,240, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 56,224, 55,192, 51,128, 48,  0, 48,  0, 48,  0, 48,  0,112,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_105[] = {  6,  0,  0,  0,  0,  0,  0,  0,120, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,112,  0,  0,  0, 48, 48,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_106[] = {  6,  0,  0,192,224, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,112,  0,  0,  0, 48, 48,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_107[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,121,240, 48,224, 49,192, 51,128, 55,  0, 54,  0, 60,  0, 52,  0, 50,  0, 51,  0, 49,128, 51,224, 48,  0, 48,  0, 48,  0, 48,  0,112,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_108[] = {  6,  0,  0,  0,  0,  0,  0,  0,120, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,112,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_109[] = { 20,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,120,241,224, 48, 96,192, 48, 96,192, 48, 96,192, 48, 96,192, 48, 96,192, 48, 96,192, 48, 96,192, 48, 96,192, 56,241,192, 55,207,128,115,135,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_110[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,120,240, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 56,224, 55,192,115,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_111[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15,  0, 57,192, 48,192, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 48,192, 57,192, 15,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_112[] = { 12,  0,  0,  0,  0,120,  0, 48,  0, 48,  0, 48,  0, 48,  0, 55,  0, 57,192, 48,192, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48,192, 57,192,119,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_113[] = { 12,  0,  0,  0,  0,  1,224,  0,192,  0,192,  0,192,  0,192, 14,192, 57,192, 48,192, 96,192, 96,192, 96,192, 96,192, 96,192, 96,192, 48,192, 57,192, 14,192,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_114[] = {  8,  0,  0,  0,  0,  0,  0,  0,120, 48, 48, 48, 48, 48, 48, 48, 48, 59, 55,115,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_115[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,124,  0, 99,  0, 65,128,  1,128,  3,128, 15,  0, 62,  0, 56,  0,112,  0, 97,  0, 51,  0, 31,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_116[] = {  7,  0,  0,  0,  0,  0,  0,  0, 28, 50, 48, 48, 48, 48, 48, 48, 48, 48, 48,254,112, 48, 16,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_117[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 14,112, 31, 96, 56,224, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96,112,224,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_118[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0, 14,  0, 14,  0, 26,  0, 25,  0, 25,  0, 49,  0, 48,128, 48,128, 96,128, 96,192,241,224,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_119[] = { 17,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4, 16,  0, 14, 56,  0, 14, 56,  0, 26, 40,  0, 26,100,  0, 25,100,  0, 49,100,  0, 48,194,  0, 48,194,  0, 96,194,  0, 96,195,  0,241,231,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_120[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,120,240, 48, 96, 16,192, 25,192, 13,128,  7,  0,  6,  0, 13,  0, 28,128, 24,192, 48, 96,120,240,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_121[] = { 11,  0,  0,  0,  0,224,  0,240,  0, 24,  0,  8,  0, 12,  0,  4,  0, 14,  0, 14,  0, 26,  0, 25,  0, 25,  0, 49,  0, 48,128, 48,128, 96,128, 96,192,241,224,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_122[] = { 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,128, 97,128, 48,128, 56,  0, 24,  0, 28,  0, 12,  0, 14,  0,  7,  0, 67,  0, 97,128,127,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_123[] = { 10,  0,  0,  0,  0,  3,128,  6,  0, 12,  0, 12,  0, 12,  0, 12,  0, 12,  0, 12,  0,  8,  0, 24,  0, 16,  0, 96,  0, 16,  0, 24,  0,  8,  0, 12,  0, 12,  0, 12,  0, 12,  0, 12,  0,  6,  0,  3,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_124[] = {  6,  0,  0,  0,  0,  0,  0,  0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_125[] = { 10,  0,  0,  0,  0,112,  0, 24,  0, 12,  0, 12,  0, 12,  0, 12,  0, 12,  0, 12,  0,  4,  0,  6,  0,  2,  0,  1,128,  2,  0,  6,  0,  4,  0, 12,  0, 12,  0, 12,  0, 12,  0, 12,  0, 24,  0,112,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_126[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 65,192, 99,224, 62, 48, 28, 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_127[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_128[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_129[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_130[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_131[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_132[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_133[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_134[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_135[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_136[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_137[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_138[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_139[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_140[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_141[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_142[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_143[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_144[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_145[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_146[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_147[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_148[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_149[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_150[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_151[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_152[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_153[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_154[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_155[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_156[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_157[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_158[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_159[] = { 26,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0, 85, 85, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_160[] = {  6,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_161[] = {  8,  0,  0, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,  0,  0,  0, 12, 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_162[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0, 32,  0, 31,  0, 63,128, 56, 64,104,  0,100,  0,100,  0,100,  0, 98,  0, 98,  0, 33,192, 49,192, 15,128,  0,128,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_163[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,115,192, 95, 96, 60, 32, 24,  0, 24,  0, 24,  0, 24,  0, 24,  0, 24,  0,126,  0, 24,  0, 24,  0, 24,  0, 24,  0, 24,192, 12,192,  7,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_164[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 96, 48,119,112, 63,224, 24,192, 48, 96, 48, 96, 48, 96, 48, 96, 24,192, 63,224,119,112, 96, 48,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_165[] = { 14,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15,192,  3,  0,  3,  0,  3,  0,  3,  0, 31,224,  3,  0, 31,224,  3,  0,  7,128, 12,128, 12,192, 24, 64, 24, 96, 48, 32,112, 48,248,124,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_166[] = {  6,  0,  0,  0,  0,  0,  0,  0, 48, 48, 48, 48, 48, 48, 48,  0,  0,  0, 48, 48, 48, 48, 48, 48, 48,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_167[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 14,  0, 25,  0, 24,128,  1,128,  3,128,  7,  0, 14,  0, 29,  0, 56,128, 48,192, 32,192, 33,192, 19,128, 15,  0, 14,  0, 28,  0, 24,  0, 17,128,  9,128,  7,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_168[] = {  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,102,102,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_169[] = { 19,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,248,  0, 14, 14,  0, 24,  3,  0, 48,225,128, 35,184,128, 98, 12,192, 70,  0, 64, 68,  0, 64, 68,  0, 64, 68,  0, 64, 70,  0, 64, 98, 12,192, 35,152,128, 48,241,128, 24,  3,  0, 14, 14,  0,  3,248,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_170[] = {  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,126,  0,118,204,204,124, 12,204,120,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_171[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2, 32,  6, 96, 12,192, 25,128, 51,  0, 51,  0, 25,128, 12,192,  6, 96,  2, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_172[] = { 14,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 24,  0, 24,  0, 24,  0, 24,  0, 24,127,248,127,248,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_173[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,  0,127,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_174[] = { 19,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,248,  0, 14, 14,  0, 24,  3,  0, 48,  1,128, 35,140,128, 97, 24,192, 65, 16, 64, 65, 32, 64, 65,240, 64, 65, 24, 64, 65,  8, 64, 97,  8,192, 33, 24,128, 51,241,128, 24,  3,  0, 14, 14,  0,  3,248,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_175[] = {  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,126,126,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_176[] = {  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 28,  0, 34,  0, 65,  0, 65,  0, 65,  0, 34,  0, 28,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_177[] = { 14,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,248,127,248,  0,  0,  3,  0,  3,  0,  3,  0,  3,  0,  3,  0,127,248,127,248,  3,  0,  3,  0,  3,  0,  3,  0,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_178[] = {  7,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,252, 68, 32, 48, 16,  8, 12,140, 76, 56,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_179[] = {  7,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,112,136,140, 12,  8, 48,  8,140, 76, 56,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_180[] = {  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32, 24, 14,  6,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_181[] = { 13,  0,  0,  0,  0, 32,  0,112,  0, 96,  0, 32,  0, 32,  0, 46,112, 63, 96, 56,224, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96,112,224,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_182[] = { 11,  0,  0,  0,  0,  4,128,  4,128,  4,128,  4,128,  4,128,  4,128,  4,128,  4,128,  4,128,  4,128,  4,128, 12,128, 28,128, 60,128, 60,128,124,128,124,128,124,128, 60,128, 60,128, 28,128, 15,192,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_183[] = {  6,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 48, 48,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_184[] = {  8,  0, 60,102,  6, 30, 24,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_185[] = {  7,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,124, 16, 16, 16, 16, 16, 16, 80, 48, 16,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_186[] = {  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,126,  0, 60,102,102,102,102,102, 60,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_187[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 34,  0, 51,  0, 25,128, 12,192,  6, 96,  6, 96, 12,192, 25,128, 51,  0, 34,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_188[] = { 18,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 24,  2,  0,  8,  2,  0, 12,127,128,  4, 34,  0,  6, 50,  0,  3, 18,  0,  1, 10,  0,125,142,  0, 16,134,  0, 16,194,  0, 16, 96,  0, 16, 32,  0, 16, 48,  0, 16, 16,  0, 80, 24,  0, 48, 12,  0, 16,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_189[] = { 18,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 24, 63,  0,  8, 17,  0, 12,  8,  0,  4, 12,  0,  6,  4,  0,  3,  2,  0,  1,  3,  0,125,163,  0, 16,147,  0, 16,206,  0, 16, 96,  0, 16, 32,  0, 16, 48,  0, 16, 16,  0, 80, 24,  0, 48, 12,  0, 16,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_190[] = { 18,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 24,  2,  0,  8,  2,  0, 12,127,128,  4, 34,  0,  6, 50,  0,  3, 18,  0,  1, 10,  0,113,142,  0,136,134,  0,140,194,  0, 12, 96,  0,  8, 32,  0, 48, 48,  0,  8, 16,  0,140, 24,  0, 76, 12,  0, 56,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_191[] = { 11,  0,  0,  0,  0, 31,  0, 49,128, 96,128, 97,128, 97,128,112,  0, 56,  0, 24,  0, 28,  0, 12,  0, 12,  0,  4,  0,  4,  0,  0,  0,  0,  0,  6,  0,  6,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_192[] = { 17,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,252, 31,128, 48,  6,  0, 16,  6,  0, 16, 12,  0, 24, 12,  0,  8, 12,  0, 15,248,  0, 12, 24,  0,  4, 24,  0,  4, 48,  0,  6, 48,  0,  2, 48,  0,  2, 96,  0,  1, 96,  0,  1,192,  0,  1,192,  0,  0,128,  0,  0,  0,  0,  0, 32,  0,  0,192,  0,  3,128,  0,  3,  0,  0};
-static const GLubyte TimesRoman24_Character_193[] = { 17,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,252, 31,128, 48,  6,  0, 16,  6,  0, 16, 12,  0, 24, 12,  0,  8, 12,  0, 15,248,  0, 12, 24,  0,  4, 24,  0,  4, 48,  0,  6, 48,  0,  2, 48,  0,  2, 96,  0,  1, 96,  0,  1,192,  0,  1,192,  0,  0,128,  0,  0,  0,  0,  1,  0,  0,  0,192,  0,  0,112,  0,  0, 48,  0};
-static const GLubyte TimesRoman24_Character_194[] = { 17,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,252, 31,128, 48,  6,  0, 16,  6,  0, 16, 12,  0, 24, 12,  0,  8, 12,  0, 15,248,  0, 12, 24,  0,  4, 24,  0,  4, 48,  0,  6, 48,  0,  2, 48,  0,  2, 96,  0,  1, 96,  0,  1,192,  0,  1,192,  0,  0,128,  0,  0,  0,  0,  8, 16,  0,  6, 96,  0,  3,192,  0,  1,128,  0};
-static const GLubyte TimesRoman24_Character_195[] = { 17,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,252, 31,128, 48,  7,  0, 16,  6,  0, 16, 12,  0, 24, 12,  0,  8, 12,  0, 15,248,  0, 12, 24,  0,  4, 24,  0,  4, 48,  0,  6, 48,  0,  2, 48,  0,  2, 96,  0,  1, 96,  0,  1,192,  0,  1,192,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  4,224,  0,  3,144,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_196[] = { 17,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,252, 31,128, 48,  6,  0, 16,  6,  0, 16, 12,  0, 24, 12,  0,  8, 12,  0, 15,248,  0, 12, 24,  0,  4, 24,  0,  4, 48,  0,  6, 48,  0,  2, 48,  0,  2, 96,  0,  1, 96,  0,  1,192,  0,  1,192,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  6, 48,  0,  6, 48,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_197[] = { 17,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,252, 31,128, 48,  6,  0, 16,  6,  0, 16, 12,  0, 24, 12,  0,  8, 12,  0, 15,248,  0, 12, 24,  0,  4, 24,  0,  4, 48,  0,  6, 48,  0,  2, 48,  0,  2, 96,  0,  1, 96,  0,  1,192,  0,  1,192,  0,  0,128,  0,  1,192,  0,  2, 32,  0,  2, 32,  0,  1,192,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_198[] = { 21,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,249,255,240, 48, 96, 48, 16, 96, 16, 16, 96, 16, 24, 96,  0,  8, 96,  0, 15,224,128, 12, 96,128,  4,127,128,  4, 96,128,  6, 96,128,  2, 96,  0,  2, 96,  0,  1, 96, 32,  1, 96, 32,  1,224, 96,  3,255,224,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_199[] = { 16,  0,  0,  3,192,  6, 96,  0, 96,  1,224,  1,128,  0,128,  3,240, 15, 28, 28,  4, 48,  2, 48,  0, 96,  0, 96,  0, 96,  0, 96,  0, 96,  0, 96,  0, 96,  0, 48,  2, 48,  2, 28,  6, 14, 30,  3,242,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_200[] = { 15,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,252, 24, 12, 24,  4, 24,  4, 24,  0, 24,  0, 24, 32, 24, 32, 31,224, 24, 32, 24, 32, 24,  0, 24,  0, 24,  8, 24,  8, 24, 24,127,248,  0,  0,  0,128,  3,  0, 14,  0, 12,  0};
-static const GLubyte TimesRoman24_Character_201[] = { 15,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,252, 24, 12, 24,  4, 24,  4, 24,  0, 24,  0, 24, 32, 24, 32, 31,224, 24, 32, 24, 32, 24,  0, 24,  0, 24,  8, 24,  8, 24, 24,127,248,  0,  0,  2,  0,  1,128,  0,224,  0, 96};
-static const GLubyte TimesRoman24_Character_202[] = { 15,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,252, 24, 12, 24,  4, 24,  4, 24,  0, 24,  0, 24, 32, 24, 32, 31,224, 24, 32, 24, 32, 24,  0, 24,  0, 24,  8, 24,  8, 24, 24,127,248,  0,  0,  8, 16,  6, 96,  3,192,  1,128};
-static const GLubyte TimesRoman24_Character_203[] = { 15,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,252, 24, 12, 24,  4, 24,  4, 24,  0, 24,  0, 24, 32, 24, 32, 31,224, 24, 32, 24, 32, 24,  0, 24,  0, 24,  8, 24,  8, 24, 24,127,248,  0,  0,  0,  0, 12,192, 12,192,  0,  0};
-static const GLubyte TimesRoman24_Character_204[] = {  8,  0,  0,  0,  0,  0,  0,  0,126, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,126,  0,  4, 24,112, 96};
-static const GLubyte TimesRoman24_Character_205[] = {  8,  0,  0,  0,  0,  0,  0,  0,126, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,126,  0, 32, 24, 14,  6};
-static const GLubyte TimesRoman24_Character_206[] = {  8,  0,  0,  0,  0,  0,  0,  0, 63, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 63,  0, 64, 51, 30, 12};
-static const GLubyte TimesRoman24_Character_207[] = {  8,  0,  0,  0,  0,  0,  0,  0,126, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,126,  0,  0,102,102,  0};
-static const GLubyte TimesRoman24_Character_208[] = { 17,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,127,224,  0, 24, 56,  0, 24, 28,  0, 24,  6,  0, 24,  6,  0, 24,  3,  0, 24,  3,  0, 24,  3,  0,255,  3,  0, 24,  3,  0, 24,  3,  0, 24,  3,  0, 24,  6,  0, 24,  6,  0, 24, 28,  0, 24, 56,  0,127,224,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_209[] = { 18,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,124,  6,  0, 16, 14,  0, 16, 14,  0, 16, 26,  0, 16, 50,  0, 16, 50,  0, 16, 98,  0, 16,194,  0, 16,194,  0, 17,130,  0, 19,  2,  0, 19,  2,  0, 22,  2,  0, 28,  2,  0, 28,  2,  0, 24,  2,  0,120, 15,128,  0,  0,  0,  0,  0,  0,  2,112,  0,  1,200,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_210[] = { 18,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,240,  0, 14, 28,  0, 28, 14,  0, 48,  3,  0, 48,  3,  0, 96,  1,128, 96,  1,128, 96,  1,128, 96,  1,128, 96,  1,128, 96,  1,128, 96,  1,128, 48,  3,  0, 48,  3,  0, 28, 14,  0, 14, 28,  0,  3,240,  0,  0,  0,  0,  0, 32,  0,  0,192,  0,  3,128,  0,  3,  0,  0};
-static const GLubyte TimesRoman24_Character_211[] = { 18,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,240,  0, 14, 28,  0, 28, 14,  0, 48,  3,  0, 48,  3,  0, 96,  1,128, 96,  1,128, 96,  1,128, 96,  1,128, 96,  1,128, 96,  1,128, 96,  1,128, 48,  3,  0, 48,  3,  0, 28, 14,  0, 14, 28,  0,  3,240,  0,  0,  0,  0,  0,128,  0,  0, 96,  0,  0, 56,  0,  0, 24,  0};
-static const GLubyte TimesRoman24_Character_212[] = { 18,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,240,  0, 14, 28,  0, 28, 14,  0, 48,  3,  0, 48,  3,  0, 96,  1,128, 96,  1,128, 96,  1,128, 96,  1,128, 96,  1,128, 96,  1,128, 96,  1,128, 48,  3,  0, 48,  3,  0, 28, 14,  0, 14, 28,  0,  3,240,  0,  0,  0,  0,  4,  8,  0,  3, 48,  0,  1,224,  0,  0,192,  0};
-static const GLubyte TimesRoman24_Character_213[] = { 18,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,240,  0, 14, 28,  0, 28, 14,  0, 48,  3,  0, 48,  3,  0, 96,  1,128, 96,  1,128, 96,  1,128, 96,  1,128, 96,  1,128, 96,  1,128, 96,  1,128, 48,  3,  0, 48,  3,  0, 28, 14,  0, 14, 28,  0,  3,240,  0,  0,  0,  0,  0,  0,  0,  2,112,  0,  1,200,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_214[] = { 18,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,240,  0, 14, 28,  0, 28, 14,  0, 48,  3,  0, 48,  3,  0, 96,  1,128, 96,  1,128, 96,  1,128, 96,  1,128, 96,  1,128, 96,  1,128, 96,  1,128, 48,  3,  0, 48,  3,  0, 28, 14,  0, 14, 28,  0,  3,240,  0,  0,  0,  0,  0,  0,  0,  3, 48,  0,  3, 48,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_215[] = { 14,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32, 16, 48, 48, 24, 96, 12,192,  7,128,  3,  0,  7,128, 12,192, 24, 96, 48, 48, 32, 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_216[] = { 18,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0, 19,240,  0, 14, 28,  0, 28, 14,  0, 52,  3,  0, 50,  3,  0, 97,  1,128, 97,  1,128, 96,129,128, 96,129,128, 96, 65,128, 96, 65,128, 96, 33,128, 48, 35,  0, 48, 19,  0, 28, 14,  0, 14, 28,  0,  3,242,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_217[] = { 18,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,240,  0, 14, 24,  0, 12,  4,  0, 24,  4,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0,126, 15,128,  0,  0,  0,  0, 32,  0,  0,192,  0,  3,128,  0,  3,  0,  0};
-static const GLubyte TimesRoman24_Character_218[] = { 18,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,240,  0, 14, 24,  0, 12,  4,  0, 24,  4,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0,126, 15,128,  0,  0,  0,  0,128,  0,  0, 96,  0,  0, 56,  0,  0, 24,  0};
-static const GLubyte TimesRoman24_Character_219[] = { 18,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,240,  0, 14, 24,  0, 12,  4,  0, 24,  4,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0,126, 15,128,  0,  0,  0,  4,  8,  0,  3, 48,  0,  1,224,  0,  0,192,  0};
-static const GLubyte TimesRoman24_Character_220[] = { 18,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,240,  0, 14, 24,  0, 12,  4,  0, 24,  4,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0, 24,  2,  0,126, 15,128,  0,  0,  0,  0,  0,  0,  3, 24,  0,  3, 24,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_221[] = { 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  7,224,  1,128,  1,128,  1,128,  1,128,  1,128,  1,128,  3,192,  3, 64,  6, 96,  6, 32, 12, 48, 28, 16, 24, 24, 56,  8, 48, 12,252, 63,  0,  0,  1,  0,  0,192,  0,112,  0, 48};
-static const GLubyte TimesRoman24_Character_222[] = { 15,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,126,  0, 24,  0, 24,  0, 24,  0, 31,224, 24, 56, 24, 24, 24, 12, 24, 12, 24, 12, 24, 24, 24, 56, 31,224, 24,  0, 24,  0, 24,  0,126,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_223[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,115,128, 54, 64, 54, 96, 48, 96, 48, 96, 48,224, 48,192, 49,192, 51,128, 54,  0, 49,128, 48,192, 48,192, 48,192, 48,192, 25,128, 15,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_224[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 56,192,125,128, 99,128, 97,128, 97,128, 49,128, 29,128,  7,128,  1,128, 49,128, 51,128, 31,  0,  0,  0,  2,  0, 12,  0, 56,  0, 48,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_225[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 56,192,125,128, 99,128, 97,128, 97,128, 49,128, 29,128,  7,128,  1,128, 49,128, 51,128, 31,  0,  0,  0,  8,  0,  6,  0,  3,128,  1,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_226[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 56,192,125,128, 99,128, 97,128, 97,128, 49,128, 29,128,  7,128,  1,128, 49,128, 51,128, 31,  0,  0,  0, 33,  0, 18,  0, 30,  0, 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_227[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 56,192,125,128, 99,128, 97,128, 97,128, 49,128, 29,128,  7,128,  1,128, 49,128, 51,128, 31,  0,  0,  0,  0,  0, 46,  0, 29,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_228[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 56,192,125,128, 99,128, 97,128, 97,128, 49,128, 29,128,  7,128,  1,128, 49,128, 51,128, 31,  0,  0,  0,  0,  0, 51,  0, 51,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_229[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 56,192,125,128, 99,128, 97,128, 97,128, 49,128, 29,128,  7,128,  1,128, 49,128, 51,128, 31,  0,  0,  0, 14,  0, 17,  0, 17,  0, 14,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_230[] = { 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 56,120,125,252, 99,194, 97,128, 97,128, 49,128, 29,128,  7,254,  1,134, 49,134, 51,204, 30,120,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_231[] = { 11,  0,  0, 30,  0, 51,  0,  3,  0, 15,  0, 12,  0,  4,  0, 15,  0, 63,128, 56, 64,112,  0, 96,  0, 96,  0, 96,  0, 96,  0, 96,  0, 32,192, 49,192, 15,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_232[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15,  0, 63,128, 56, 64,112,  0, 96,  0, 96,  0, 96,  0,127,192, 96,192, 32,192, 49,128, 15,  0,  0,  0,  2,  0, 12,  0, 56,  0, 48,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_233[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15,  0, 63,128, 56, 64,112,  0, 96,  0, 96,  0, 96,  0,127,192, 96,192, 32,192, 49,128, 15,  0,  0,  0,  8,  0,  6,  0,  3,128,  1,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_234[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15,  0, 63,128, 56, 64,112,  0, 96,  0, 96,  0, 96,  0,127,192, 96,192, 32,192, 49,128, 15,  0,  0,  0, 16,128,  9,  0, 15,  0,  6,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_235[] = { 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15,  0, 63,128, 56, 64,112,  0, 96,  0, 96,  0, 96,  0,127,192, 96,192, 32,192, 49,128, 15,  0,  0,  0,  0,  0, 25,128, 25,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_236[] = {  6,  0,  0,  0,  0,  0,  0,  0,120, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,112,  0,  8, 48,224,192,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_237[] = {  6,  0,  0,  0,  0,  0,  0,  0,120, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,112,  0, 64, 48, 28, 12,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_238[] = {  6,  0,  0,  0,  0,  0,  0,  0,120, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,112,  0,132, 72,120, 48,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_239[] = {  6,  0,  0,  0,  0,  0,  0,  0,120, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,112,  0,  0,204,204,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_240[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15,  0, 57,192, 48,192, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 48,192, 57,192, 15,128, 99,  0, 30,  0, 15,  0, 56,192, 96,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_241[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,120,240, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 56,224, 55,192,115,128,  0,  0,  0,  0, 19,128, 14, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_242[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15,  0, 57,192, 48,192, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 48,192, 57,192, 15,  0,  0,  0,  1,  0,  6,  0, 28,  0, 24,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_243[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15,  0, 57,192, 48,192, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 48,192, 57,192, 15,  0,  0,  0,  4,  0,  3,  0,  1,192,  0,192,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_244[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15,  0, 57,192, 48,192, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 48,192, 57,192, 15,  0,  0,  0, 16,128,  9,  0, 15,  0,  6,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_245[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15,  0, 57,192, 48,192, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 48,192, 57,192, 15,  0,  0,  0,  0,  0, 19,128, 14, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_246[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15,  0, 57,192, 48,192, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 48,192, 57,192, 15,  0,  0,  0,  0,  0, 25,128, 25,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_247[] = { 14,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,  0,  3,  0,  0,  0,  0,  0,127,248,127,248,  0,  0,  0,  0,  3,  0,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_248[] = { 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 96,  0,111,  0, 57,192, 56,192,104, 96,108, 96,100, 96,102, 96, 98, 96, 99, 96, 49,192, 57,192, 15, 96,  0, 96,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_249[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 14,112, 31, 96, 56,224, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96,112,224,  0,  0,  1,  0,  6,  0, 28,  0, 24,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_250[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 14,112, 31, 96, 56,224, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96,112,224,  0,  0,  4,  0,  3,  0,  1,192,  0,192,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_251[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 14,112, 31, 96, 56,224, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96,112,224,  0,  0, 16,128,  9,  0, 15,  0,  6,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_252[] = { 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 14,112, 31, 96, 56,224, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96,112,224,  0,  0,  0,  0, 25,128, 25,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_253[] = { 11,  0,  0,  0,  0,224,  0,240,  0, 24,  0,  8,  0, 12,  0,  4,  0, 14,  0, 14,  0, 26,  0, 25,  0, 25,  0, 49,  0, 48,128, 48,128, 96,128, 96,192,241,224,  0,  0,  8,  0,  6,  0,  3,128,  1,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_254[] = { 12,  0,  0,  0,  0,120,  0, 48,  0, 48,  0, 48,  0, 48,  0, 55,  0, 57,192, 48,192, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48, 96, 48,192, 57,192, 55,  0, 48,  0, 48,  0, 48,  0, 48,  0,112,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-static const GLubyte TimesRoman24_Character_255[] = { 11,  0,  0,  0,  0,224,  0,240,  0, 24,  0,  8,  0, 12,  0,  4,  0, 14,  0, 14,  0, 26,  0, 25,  0, 25,  0, 49,  0, 48,128, 48,128, 96,128, 96,192,241,224,  0,  0,  0,  0, 51,  0, 51,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
-
-/* The font characters mapping: */
-static const GLubyte* TimesRoman24_Character_Map[] = {TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,
-                                                      TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,
-                                                      TimesRoman24_Character_032,TimesRoman24_Character_033,TimesRoman24_Character_034,TimesRoman24_Character_035,TimesRoman24_Character_036,TimesRoman24_Character_037,TimesRoman24_Character_038,TimesRoman24_Character_039,TimesRoman24_Character_040,TimesRoman24_Character_041,TimesRoman24_Character_042,TimesRoman24_Character_043,TimesRoman24_Character_044,TimesRoman24_Character_045,TimesRoman24_Character_046,TimesRoman24_Character_047,
-                                                      TimesRoman24_Character_048,TimesRoman24_Character_049,TimesRoman24_Character_050,TimesRoman24_Character_051,TimesRoman24_Character_052,TimesRoman24_Character_053,TimesRoman24_Character_054,TimesRoman24_Character_055,TimesRoman24_Character_056,TimesRoman24_Character_057,TimesRoman24_Character_058,TimesRoman24_Character_059,TimesRoman24_Character_060,TimesRoman24_Character_061,TimesRoman24_Character_062,TimesRoman24_Character_063,
-                                                      TimesRoman24_Character_064,TimesRoman24_Character_065,TimesRoman24_Character_066,TimesRoman24_Character_067,TimesRoman24_Character_068,TimesRoman24_Character_069,TimesRoman24_Character_070,TimesRoman24_Character_071,TimesRoman24_Character_072,TimesRoman24_Character_073,TimesRoman24_Character_074,TimesRoman24_Character_075,TimesRoman24_Character_076,TimesRoman24_Character_077,TimesRoman24_Character_078,TimesRoman24_Character_079,
-                                                      TimesRoman24_Character_080,TimesRoman24_Character_081,TimesRoman24_Character_082,TimesRoman24_Character_083,TimesRoman24_Character_084,TimesRoman24_Character_085,TimesRoman24_Character_086,TimesRoman24_Character_087,TimesRoman24_Character_088,TimesRoman24_Character_089,TimesRoman24_Character_090,TimesRoman24_Character_091,TimesRoman24_Character_092,TimesRoman24_Character_093,TimesRoman24_Character_094,TimesRoman24_Character_095,
-                                                      TimesRoman24_Character_096,TimesRoman24_Character_097,TimesRoman24_Character_098,TimesRoman24_Character_099,TimesRoman24_Character_100,TimesRoman24_Character_101,TimesRoman24_Character_102,TimesRoman24_Character_103,TimesRoman24_Character_104,TimesRoman24_Character_105,TimesRoman24_Character_106,TimesRoman24_Character_107,TimesRoman24_Character_108,TimesRoman24_Character_109,TimesRoman24_Character_110,TimesRoman24_Character_111,
-                                                      TimesRoman24_Character_112,TimesRoman24_Character_113,TimesRoman24_Character_114,TimesRoman24_Character_115,TimesRoman24_Character_116,TimesRoman24_Character_117,TimesRoman24_Character_118,TimesRoman24_Character_119,TimesRoman24_Character_120,TimesRoman24_Character_121,TimesRoman24_Character_122,TimesRoman24_Character_123,TimesRoman24_Character_124,TimesRoman24_Character_125,TimesRoman24_Character_126,TimesRoman24_Character_032,
-                                                      TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,
-                                                      TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,TimesRoman24_Character_032,
-                                                      TimesRoman24_Character_160,TimesRoman24_Character_161,TimesRoman24_Character_162,TimesRoman24_Character_163,TimesRoman24_Character_164,TimesRoman24_Character_165,TimesRoman24_Character_166,TimesRoman24_Character_167,TimesRoman24_Character_168,TimesRoman24_Character_169,TimesRoman24_Character_170,TimesRoman24_Character_171,TimesRoman24_Character_172,TimesRoman24_Character_173,TimesRoman24_Character_174,TimesRoman24_Character_175,
-                                                      TimesRoman24_Character_176,TimesRoman24_Character_177,TimesRoman24_Character_178,TimesRoman24_Character_179,TimesRoman24_Character_180,TimesRoman24_Character_181,TimesRoman24_Character_182,TimesRoman24_Character_183,TimesRoman24_Character_184,TimesRoman24_Character_185,TimesRoman24_Character_186,TimesRoman24_Character_187,TimesRoman24_Character_188,TimesRoman24_Character_189,TimesRoman24_Character_190,TimesRoman24_Character_191,
-                                                      TimesRoman24_Character_192,TimesRoman24_Character_193,TimesRoman24_Character_194,TimesRoman24_Character_195,TimesRoman24_Character_196,TimesRoman24_Character_197,TimesRoman24_Character_198,TimesRoman24_Character_199,TimesRoman24_Character_200,TimesRoman24_Character_201,TimesRoman24_Character_202,TimesRoman24_Character_203,TimesRoman24_Character_204,TimesRoman24_Character_205,TimesRoman24_Character_206,TimesRoman24_Character_207,
-                                                      TimesRoman24_Character_208,TimesRoman24_Character_209,TimesRoman24_Character_210,TimesRoman24_Character_211,TimesRoman24_Character_212,TimesRoman24_Character_213,TimesRoman24_Character_214,TimesRoman24_Character_215,TimesRoman24_Character_216,TimesRoman24_Character_217,TimesRoman24_Character_218,TimesRoman24_Character_219,TimesRoman24_Character_220,TimesRoman24_Character_221,TimesRoman24_Character_222,TimesRoman24_Character_223,
-                                                      TimesRoman24_Character_224,TimesRoman24_Character_225,TimesRoman24_Character_226,TimesRoman24_Character_227,TimesRoman24_Character_228,TimesRoman24_Character_229,TimesRoman24_Character_230,TimesRoman24_Character_231,TimesRoman24_Character_232,TimesRoman24_Character_233,TimesRoman24_Character_234,TimesRoman24_Character_235,TimesRoman24_Character_236,TimesRoman24_Character_237,TimesRoman24_Character_238,TimesRoman24_Character_239,
-                                                      TimesRoman24_Character_240,TimesRoman24_Character_241,TimesRoman24_Character_242,TimesRoman24_Character_243,TimesRoman24_Character_244,TimesRoman24_Character_245,TimesRoman24_Character_246,TimesRoman24_Character_247,TimesRoman24_Character_248,TimesRoman24_Character_249,TimesRoman24_Character_250,TimesRoman24_Character_251,TimesRoman24_Character_252,TimesRoman24_Character_253,TimesRoman24_Character_254,TimesRoman24_Character_255,NULL};
-
-/* The font structure: */
-const SFG_Font fgFontTimesRoman24 = { "-adobe-times-medium-r-normal--24-240-75-75-p-124-iso8859-1", 256, 29, TimesRoman24_Character_Map, 0, 7 };
-
diff --git a/src/freeglut_gamemode.c b/src/freeglut_gamemode.c
deleted file mode 100644 (file)
index 803026b..0000000
+++ /dev/null
@@ -1,819 +0,0 @@
-/*
- * freeglut_gamemode.c
- *
- * The game mode handling code.
- *
- * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.
- * Written by Pawel W. Olszta, <olszta@sourceforge.net>
- * Creation date: Thu Dec 16 1999
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-#include <GL/freeglut.h>
-#include "freeglut_internal.h"
-
-/*
- * TODO BEFORE THE STABLE RELEASE:
- *
- *  glutGameModeString()    -- missing
- *  glutEnterGameMode()     -- X11 version
- *  glutLeaveGameMode()     -- is that correct?
- *  glutGameModeGet()       -- is that correct?
- */
-
-
-/* -- PRIVATE FUNCTIONS ---------------------------------------------------- */
-
-#if TARGET_HOST_POSIX_X11
-static int xrandr_resize(int xsz, int ysz, int rate, int just_checking)
-{
-#ifdef HAVE_X11_EXTENSIONS_XRANDR_H
-    int event_base, error_base, ver_major, ver_minor, use_rate;
-    XRRScreenConfiguration *xrr_config = 0;
-    Status result = -1;
-
-    /* must check at runtime for the availability of the extension */
-    if(!XRRQueryExtension(fgDisplay.Display, &event_base, &error_base)) {
-        return -1;
-    }
-
-    XRRQueryVersion(fgDisplay.Display, &ver_major, &ver_minor);
-
-    /* we only heed the rate if we CAN actually use it (Xrandr >= 1.1) and
-     * the user actually cares about it (rate > 0)
-     */
-    use_rate = ( rate > 0 ) && ( ( ver_major >= 1 ) ||
-                                        ( ( ver_major == 1 ) && ( ver_minor >= 1 ) ) );
-
-    /* this loop is only so that the whole thing will be repeated if someone
-     * else changes video mode between our query of the current information and
-     * the attempt to change it.
-     */
-    do {
-        XRRScreenSize *ssizes;
-        short *rates;
-        Rotation rot;
-        int i, ssizes_count, rates_count, curr, res_idx = -1;
-        Time timestamp, cfg_timestamp;
-
-        if(xrr_config) {
-            XRRFreeScreenConfigInfo(xrr_config);
-        }
-
-        if(!(xrr_config = XRRGetScreenInfo(fgDisplay.Display, fgDisplay.RootWindow))) {
-            fgWarning("XRRGetScreenInfo failed");
-            break;
-        }
-        ssizes = XRRConfigSizes(xrr_config, &ssizes_count);
-        curr = XRRConfigCurrentConfiguration(xrr_config, &rot);
-        timestamp = XRRConfigTimes(xrr_config, &cfg_timestamp);
-
-        /* if either of xsz or ysz are unspecified, use the current values */
-        if(xsz <= 0)
-            xsz = fgState.GameModeSize.X = ssizes[curr].width;
-        if(ysz <= 0)
-            ysz = fgState.GameModeSize.Y = ssizes[curr].height;
-
-
-        if(xsz == ssizes[curr].width && ysz == ssizes[curr].height) {
-            /* no need to switch, we're already in the requested resolution */
-            res_idx = curr;
-        } else {
-            for(i=0; i<ssizes_count; i++) {
-                if(ssizes[i].width == xsz && ssizes[i].height == ysz) {
-                    res_idx = i;
-                    break;  /* found it */
-                }
-            }
-        }
-        if(res_idx == -1)
-            break;  /* no matching resolution */
-
-#if ( RANDR_MAJOR >= 1 ) || ( ( RANDR_MAJOR == 1 ) && ( RANDR_MINOR >= 1 ) )
-        if(use_rate) {
-            rate = fgState.GameModeRefresh;
-
-            /* for the selected resolution, let's find out if there is
-             * a matching refresh rate available.
-             */
-            rates = XRRConfigRates(xrr_config, res_idx, &rates_count);
-
-            for(i=0; i<rates_count; i++) {
-                if(rates[i] == rate) {
-                    break;
-                }
-            }
-            if(i == rates_count) {
-                break; /* no matching rate */
-            }
-        }
-#endif
-
-        if(just_checking) {
-            result = 0;
-            break;
-        }
-
-#if ( RANDR_MAJOR >= 1 ) || ( ( RANDR_MAJOR == 1 ) && ( RANDR_MINOR >= 1 ) )
-        if(use_rate)
-            result = XRRSetScreenConfigAndRate(fgDisplay.Display, xrr_config,
-                    fgDisplay.RootWindow, res_idx, rot, rate, timestamp);
-        else
-#endif
-            result = XRRSetScreenConfig(fgDisplay.Display, xrr_config,
-                    fgDisplay.RootWindow, res_idx, rot, timestamp);
-
-    } while(result == RRSetConfigInvalidTime);
-
-    if(xrr_config) {
-        XRRFreeScreenConfigInfo(xrr_config);
-    }
-
-    if(result == 0) {
-        return 0;
-    }
-
-#endif  /* HAVE_X11_EXTENSIONS_XRANDR_H */
-    return -1;
-}
-#endif  /* TARGET_HOST_POSIX_X11 */
-
-/*
- * Remembers the current visual settings, so that
- * we can change them and restore later...
- */
-static void fghRememberState( void )
-{
-#if TARGET_HOST_POSIX_X11
-    int event_base, error_base;
-
-    /*
-     * Remember the current pointer location before going fullscreen
-     * for restoring it later:
-     */
-    Window junk_window;
-    unsigned int junk_mask;
-
-    XQueryPointer(fgDisplay.Display, fgDisplay.RootWindow,
-            &junk_window, &junk_window,
-            &fgDisplay.DisplayPointerX, &fgDisplay.DisplayPointerY,
-            &fgDisplay.DisplayPointerX, &fgDisplay.DisplayPointerY, &junk_mask);
-
-#   ifdef HAVE_X11_EXTENSIONS_XRANDR_H
-    if(XRRQueryExtension(fgDisplay.Display, &event_base, &error_base)) {
-        XRRScreenConfiguration *xrr_config;
-        XRRScreenSize *ssizes;
-        Rotation rot;
-        int ssize_count, curr;
-
-        if((xrr_config = XRRGetScreenInfo(fgDisplay.Display, fgDisplay.RootWindow))) {
-            ssizes = XRRConfigSizes(xrr_config, &ssize_count);
-            curr = XRRConfigCurrentConfiguration(xrr_config, &rot);
-
-            fgDisplay.prev_xsz = ssizes[curr].width;
-            fgDisplay.prev_ysz = ssizes[curr].height;
-            fgDisplay.prev_refresh = -1;
-
-#       if ( RANDR_MAJOR >= 1 ) || ( ( RANDR_MAJOR == 1 ) && ( RANDR_MINOR >= 1 ) )
-            if(fgState.GameModeRefresh != -1) {
-                fgDisplay.prev_refresh = XRRConfigCurrentRate(xrr_config);
-            }
-#       endif
-
-            fgDisplay.prev_size_valid = 1;
-
-            XRRFreeScreenConfigInfo(xrr_config);
-        }
-    }
-#   endif
-
-    /*
-     * This highly depends on the XFree86 extensions,
-     * not approved as X Consortium standards
-     */
-#   ifdef HAVE_X11_EXTENSIONS_XF86VMODE_H
-    if(!XF86VidModeQueryExtension(fgDisplay.Display, &event_base, &error_base)) {
-        return;
-    }
-
-    /*
-     * Remember the current ViewPort location of the screen to be able to
-     * restore the ViewPort on LeaveGameMode():
-     */
-    if( !XF86VidModeGetViewPort(
-             fgDisplay.Display,
-             fgDisplay.Screen,
-             &fgDisplay.DisplayViewPortX,
-             &fgDisplay.DisplayViewPortY ) )
-        fgWarning( "XF86VidModeGetViewPort failed" );
-
-
-    /* Query the current display settings: */
-    fgDisplay.DisplayModeValid =
-      XF86VidModeGetModeLine(
-        fgDisplay.Display,
-        fgDisplay.Screen,
-        &fgDisplay.DisplayModeClock,
-        &fgDisplay.DisplayMode
-    );
-
-    if( !fgDisplay.DisplayModeValid )
-        fgWarning( "XF86VidModeGetModeLine failed" );
-#   endif
-
-#elif TARGET_HOST_MS_WINDOWS
-
-/*    DEVMODE devMode; */
-
-    /* Grab the current desktop settings... */
-
-/* hack to get around my stupid cross-gcc headers */
-#define FREEGLUT_ENUM_CURRENT_SETTINGS -1
-
-    EnumDisplaySettings( fgDisplay.DisplayName, FREEGLUT_ENUM_CURRENT_SETTINGS,
-                         &fgDisplay.DisplayMode );
-
-    /* Make sure we will be restoring all settings needed */
-    fgDisplay.DisplayMode.dmFields |=
-        DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL | DM_DISPLAYFREQUENCY;
-
-#endif
-}
-
-/*
- * Restores the previously remembered visual settings
- */
-static void fghRestoreState( void )
-{
-#if TARGET_HOST_POSIX_X11
-    /* Restore the remembered pointer position: */
-    XWarpPointer(
-        fgDisplay.Display, None, fgDisplay.RootWindow, 0, 0, 0, 0,
-        fgDisplay.DisplayPointerX, fgDisplay.DisplayPointerY
-    );
-
-
-#   ifdef HAVE_X11_EXTENSIONS_XRANDR_H
-    if(fgDisplay.prev_size_valid) {
-        if(xrandr_resize(fgDisplay.prev_xsz, fgDisplay.prev_ysz, fgDisplay.prev_refresh, 0) != -1) {
-            fgDisplay.prev_size_valid = 0;
-#       ifdef HAVE_X11_EXTENSIONS_XF86VMODE_H
-            fgDisplay.DisplayModeValid = 0;
-#       endif
-            return;
-        }
-    }
-#   endif
-
-
-
-#   ifdef HAVE_X11_EXTENSIONS_XF86VMODE_H
-    /*
-     * This highly depends on the XFree86 extensions,
-     * not approved as X Consortium standards
-     */
-
-    if( fgDisplay.DisplayModeValid )
-    {
-        XF86VidModeModeInfo** displayModes;
-        int i, displayModesCount;
-
-        if( !XF86VidModeGetAllModeLines(
-                 fgDisplay.Display,
-                 fgDisplay.Screen,
-                 &displayModesCount,
-                 &displayModes ) )
-        {
-            fgWarning( "XF86VidModeGetAllModeLines failed" );
-            return;
-        }
-
-
-        /*
-         * Check every of the modes looking for one that matches our demands.
-         * If we find one, switch to it and restore the remembered viewport.
-         */
-        for( i = 0; i < displayModesCount; i++ )
-        {
-            if(displayModes[ i ]->hdisplay == fgDisplay.DisplayMode.hdisplay &&
-               displayModes[ i ]->vdisplay == fgDisplay.DisplayMode.vdisplay &&
-               displayModes[ i ]->dotclock == fgDisplay.DisplayModeClock )
-            {
-                if( !XF86VidModeSwitchToMode(
-                         fgDisplay.Display,
-                         fgDisplay.Screen,
-                         displayModes[ i ] ) )
-                {
-                    fgWarning( "XF86VidModeSwitchToMode failed" );
-                    break;
-                }
-
-                if( !XF86VidModeSetViewPort(
-                         fgDisplay.Display,
-                         fgDisplay.Screen,
-                         fgDisplay.DisplayViewPortX,
-                         fgDisplay.DisplayViewPortY ) )
-                    fgWarning( "XF86VidModeSetViewPort failed" );
-
-
-                /*
-                 * For the case this would be the last X11 call the application
-                 * calls exit() we've to flush the X11 output queue to have the
-                 * commands sent to the X server before the application exits.
-                 */
-                XFlush( fgDisplay.Display );
-
-                fgDisplay.DisplayModeValid = 0;
-#       ifdef HAVE_X11_EXTENSIONS_XRANDR_H
-                fgDisplay.prev_size_valid = 0;
-#       endif
-
-                break;
-            }
-        }
-        XFree( displayModes );
-    }
-
-#   endif
-
-#elif TARGET_HOST_MS_WINDOWS
-
-    /* Restore the previously remembered desktop display settings */
-    ChangeDisplaySettingsEx( fgDisplay.DisplayName,&fgDisplay.DisplayMode, 0,0,0 );
-
-#endif
-}
-
-#if TARGET_HOST_POSIX_X11
-#ifdef HAVE_X11_EXTENSIONS_XF86VMODE_H
-
-/*
- * Checks a single display mode settings against user's preferences.
- */
-static GLboolean fghCheckDisplayMode( int width, int height, int depth, int refresh )
-{
-    /* The desired values should be stored in fgState structure... */
-    return ( width == fgState.GameModeSize.X ) &&
-           ( height == fgState.GameModeSize.Y ) &&
-           ( depth == fgState.GameModeDepth ) &&
-           ( refresh == fgState.GameModeRefresh );
-}
-
-/*
- * Checks all display modes settings against user's preferences.
- * Returns the mode number found or -1 if none could be found.
- */
-static int fghCheckDisplayModes( GLboolean exactMatch, int displayModesCount, XF86VidModeModeInfo** displayModes )
-{
-    int i;
-    for( i = 0; i < displayModesCount; i++ )
-    {
-        /* Compute the displays refresh rate, dotclock comes in kHz. */
-        int refresh = ( displayModes[ i ]->dotclock * 1000 ) /
-                      ( displayModes[ i ]->htotal * displayModes[ i ]->vtotal );
-
-        if( fghCheckDisplayMode( displayModes[ i ]->hdisplay,
-                                 displayModes[ i ]->vdisplay,
-                                 fgState.GameModeDepth,
-                                 ( exactMatch ? refresh : fgState.GameModeRefresh ) ) ) {
-            if (!exactMatch)
-            {
-                /* Update the chosen refresh rate, otherwise a
-                 * glutGameModeGet(GLUT_GAME_MODE_REFRESH_RATE) would not
-                 * return the right values
-                 */
-                fgState.GameModeRefresh = refresh;
-            }
-
-            return i;
-        }
-    }
-    return -1;
-}
-
-#endif
-#endif
-
-/*
- * Changes the current display mode to match user's settings
- */
-static GLboolean fghChangeDisplayMode( GLboolean haveToTest )
-{
-    GLboolean success = GL_FALSE;
-#if TARGET_HOST_POSIX_X11
-
-    /* first try to use XRandR, then fallback to XF86VidMode */
-#   ifdef HAVE_X11_EXTENSIONS_XRANDR_H
-    if(xrandr_resize(fgState.GameModeSize.X, fgState.GameModeSize.Y,
-                fgState.GameModeRefresh, haveToTest) != -1) {
-        return GL_TRUE;
-    }
-#   endif
-
-
-    /*
-     * This highly depends on the XFree86 extensions,
-     * not approved as X Consortium standards
-     */
-#   ifdef HAVE_X11_EXTENSIONS_XF86VMODE_H
-
-    /*
-     * This is also used by applications which check modes by calling
-     * glutGameModeGet(GLUT_GAME_MODE_POSSIBLE), so allow the check:
-     */
-    if( haveToTest || fgDisplay.DisplayModeValid )
-    {
-        XF86VidModeModeInfo** displayModes;
-        int i, displayModesCount;
-
-        /* If we don't have a valid modeline in the display structure, which
-         * can happen if this is called from glutGameModeGet instead of
-         * glutEnterGameMode, then we need to query the current mode, to make
-         * unspecified settings to default to their current values.
-         */
-        if(!fgDisplay.DisplayModeValid) {
-            if(!XF86VidModeGetModeLine(fgDisplay.Display, fgDisplay.Screen,
-                    &fgDisplay.DisplayModeClock, &fgDisplay.DisplayMode)) {
-                return success;
-            }
-        }
-
-        if (fgState.GameModeSize.X == -1)
-        {
-            fgState.GameModeSize.X = fgDisplay.DisplayMode.hdisplay;
-        }
-        if (fgState.GameModeSize.Y == -1)
-        {
-            fgState.GameModeSize.Y = fgDisplay.DisplayMode.vdisplay;
-        }
-        if (fgState.GameModeDepth == -1)
-        {
-            /* can't get color depth from this, nor can we change it, do nothing
-             * TODO: get with XGetVisualInfo()? but then how to set?
-             */
-        }
-        if (fgState.GameModeRefresh == -1)
-        {
-            /* Compute the displays refresh rate, dotclock comes in kHz. */
-            int refresh = ( fgDisplay.DisplayModeClock * 1000 ) /
-                ( fgDisplay.DisplayMode.htotal * fgDisplay.DisplayMode.vtotal );
-
-            fgState.GameModeRefresh = refresh;
-        }
-
-        /* query all possible display modes */
-        if( !XF86VidModeGetAllModeLines(
-                 fgDisplay.Display,
-                 fgDisplay.Screen,
-                 &displayModesCount,
-                 &displayModes ) )
-        {
-            fgWarning( "XF86VidModeGetAllModeLines failed" );
-            return success;
-        }
-
-
-        /*
-         * Check every of the modes looking for one that matches our demands,
-         * ignoring the refresh rate if no exact match could be found.
-         */
-        i = fghCheckDisplayModes( GL_TRUE, displayModesCount, displayModes );
-        if( i < 0 ) {
-            i = fghCheckDisplayModes( GL_FALSE, displayModesCount, displayModes );
-        }
-        success = ( i < 0 ) ? GL_FALSE : GL_TRUE;
-
-        if( !haveToTest && success ) {
-            if( !XF86VidModeSwitchToMode(
-                     fgDisplay.Display,
-                     fgDisplay.Screen,
-                     displayModes[ i ] ) )
-                fgWarning( "XF86VidModeSwitchToMode failed" );
-        }
-
-        XFree( displayModes );
-    }
-
-#   endif
-
-
-#elif TARGET_HOST_MS_WINDOWS
-
-    DEVMODE  devMode;
-    char *fggmstr = NULL;
-    char displayMode[300];
-
-    success = GL_FALSE;
-
-    EnumDisplaySettings( fgDisplay.DisplayName, -1, &devMode ); 
-    devMode.dmFields = 0;
-
-    if (fgState.GameModeSize.X!=-1)
-    {
-        devMode.dmPelsWidth  = fgState.GameModeSize.X;
-        devMode.dmFields |= DM_PELSWIDTH;
-    }
-    if (fgState.GameModeSize.Y!=-1)
-    {
-        devMode.dmPelsHeight  = fgState.GameModeSize.Y;
-        devMode.dmFields |= DM_PELSHEIGHT;
-    }
-    if (fgState.GameModeDepth!=-1)
-    {
-        devMode.dmBitsPerPel  = fgState.GameModeDepth;
-        devMode.dmFields |= DM_BITSPERPEL;
-    }
-    if (fgState.GameModeRefresh!=-1)
-    {
-        devMode.dmDisplayFrequency  = fgState.GameModeRefresh;
-        devMode.dmFields |= DM_DISPLAYFREQUENCY;
-    }
-
-    switch ( ChangeDisplaySettingsEx(fgDisplay.DisplayName, &devMode, NULL, haveToTest ? CDS_TEST : CDS_FULLSCREEN , NULL) )
-    {
-    case DISP_CHANGE_SUCCESSFUL:
-        success = GL_TRUE;
-
-        if (!haveToTest)
-        {
-            /* update vars in case if windows switched to proper mode */
-            EnumDisplaySettings( fgDisplay.DisplayName, FREEGLUT_ENUM_CURRENT_SETTINGS, &devMode );
-            fgState.GameModeSize.X  = devMode.dmPelsWidth;        
-            fgState.GameModeSize.Y  = devMode.dmPelsHeight;
-            fgState.GameModeDepth   = devMode.dmBitsPerPel;
-            fgState.GameModeRefresh = devMode.dmDisplayFrequency;
-        }
-               break;
-    case DISP_CHANGE_RESTART:
-        fggmstr = "The computer must be restarted for the graphics mode to work.";
-        break;
-    case DISP_CHANGE_BADFLAGS:
-        fggmstr = "An invalid set of flags was passed in.";
-        break;
-    case DISP_CHANGE_BADPARAM:
-        fggmstr = "An invalid parameter was passed in. This can include an invalid flag or combination of flags.";
-        break;
-    case DISP_CHANGE_FAILED:
-        fggmstr = "The display driver failed the specified graphics mode.";
-        break;
-    case DISP_CHANGE_BADMODE:
-        fggmstr = "The graphics mode is not supported.";
-        break;
-    default:
-        fggmstr = "Unknown error in graphics mode???"; /* dunno if it is possible,MSDN does not mention any other error */
-        break;
-    }
-
-    if ( !success )
-    {
-        /* I'd rather get info whats going on in my program than wonder about */
-        /* magic happenings behind my back, its lib for devels at last ;) */
-        
-        /* append display mode to error to make things more informative */
-        sprintf(displayMode,"%s Problem with requested mode: %ix%i:%i@%i", fggmstr, devMode.dmPelsWidth, devMode.dmPelsHeight, devMode.dmBitsPerPel, devMode.dmDisplayFrequency);
-        fgWarning(displayMode);
-    }
-#endif
-
-    return success;
-}
-
-
-/* -- INTERFACE FUNCTIONS -------------------------------------------------- */
-
-/*
- * Sets the game mode display string
- */
-void FGAPIENTRY glutGameModeString( const char* string )
-{
-    int width = -1, height = -1, depth = -1, refresh = -1;
-
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutGameModeString" );
-
-    /*
-     * This one seems a bit easier than glutInitDisplayString. The bad thing
-     * about it that I was unable to find the game mode string definition, so
-     * that I assumed it is: "[width]x[height]:[depth]@[refresh rate]", which
-     * appears in all GLUT game mode programs I have seen to date.
-     */
-    if( sscanf( string, "%ix%i:%i@%i", &width, &height, &depth, &refresh ) !=
-        4 )
-        if( sscanf( string, "%ix%i:%i", &width, &height, &depth ) != 3 )
-            if( sscanf( string, "%ix%i@%i", &width, &height, &refresh ) != 3 )
-                if( sscanf( string, "%ix%i", &width, &height ) != 2 )
-                    if( sscanf( string, ":%i@%i", &depth, &refresh ) != 2 )
-                        if( sscanf( string, ":%i", &depth ) != 1 )
-                            if( sscanf( string, "@%i", &refresh ) != 1 )
-                                fgWarning(
-                                    "unable to parse game mode string `%s'",
-                                    string
-                                );
-
-    /* All values not specified are now set to -1, which means those
-     * aspects of the current display mode are not changed in
-     * fghChangeDisplayMode() above.
-     */
-    fgState.GameModeSize.X  = width;
-    fgState.GameModeSize.Y  = height;
-    fgState.GameModeDepth   = depth;
-    fgState.GameModeRefresh = refresh;
-}
-
-
-
-/*
- * Enters the game mode
- */
-int FGAPIENTRY glutEnterGameMode( void )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutEnterGameMode" );
-
-    if( fgStructure.GameModeWindow )
-        fgAddToWindowDestroyList( fgStructure.GameModeWindow );
-    else
-        fghRememberState( );
-
-    if( ! fghChangeDisplayMode( GL_FALSE ) )
-    {
-        fgWarning( "failed to change screen settings" );
-        return 0;
-    }
-
-    fgStructure.GameModeWindow = fgCreateWindow(
-        NULL, "FREEGLUT", GL_TRUE, 0, 0,
-        GL_TRUE, fgState.GameModeSize.X, fgState.GameModeSize.Y,
-        GL_TRUE, GL_FALSE
-    );
-
-    fgStructure.GameModeWindow->State.Width  = fgState.GameModeSize.X;
-    fgStructure.GameModeWindow->State.Height = fgState.GameModeSize.Y;
-    fgStructure.GameModeWindow->State.NeedToResize = GL_TRUE;
-
-#if TARGET_HOST_POSIX_X11
-
-    /*
-     * Sync needed to avoid a real race, the Xserver must have really created
-     * the window before we can grab the pointer into it:
-     */
-    XSync( fgDisplay.Display, False );
-    /*
-     * Grab the pointer to confine it into the window after the calls to
-     * XWrapPointer() which ensure that the pointer really enters the window.
-     *
-     * We also need to wait here until XGrabPointer() returns GrabSuccess,
-     * otherwise the new window is not viewable yet and if the next function
-     * (XSetInputFocus) is called with a not yet viewable window, it will exit
-     * the application which we have to aviod, so wait until it's viewable:
-     */
-    while( GrabSuccess != XGrabPointer(
-               fgDisplay.Display, fgStructure.GameModeWindow->Window.Handle,
-               TRUE,
-               ButtonPressMask | ButtonReleaseMask | ButtonMotionMask
-               | PointerMotionMask,
-               GrabModeAsync, GrabModeAsync,
-               fgStructure.GameModeWindow->Window.Handle, None, CurrentTime) )
-        usleep( 100 );
-    /*
-     * Change input focus to the new window. This will exit the application
-     * if the new window is not viewable yet, see the XGrabPointer loop above.
-     */
-    XSetInputFocus(
-        fgDisplay.Display,
-        fgStructure.GameModeWindow->Window.Handle,
-        RevertToNone,
-        CurrentTime
-    );
-
-    /* Move the Pointer to the middle of the fullscreen window */
-    XWarpPointer(
-        fgDisplay.Display,
-        None,
-        fgDisplay.RootWindow,
-        0, 0, 0, 0,
-        fgState.GameModeSize.X/2, fgState.GameModeSize.Y/2
-    );
-
-#   ifdef HAVE_X11_EXTENSIONS_XF86VMODE_H
-
-    if( fgDisplay.DisplayModeValid )
-    {
-        int x, y;
-        Window child;
-
-        /* Change to viewport to the window topleft edge: */
-        if( !XF86VidModeSetViewPort( fgDisplay.Display, fgDisplay.Screen, 0, 0 ) )
-            fgWarning( "XF86VidModeSetViewPort failed" );
-
-        /*
-         * Final window repositioning: It could be avoided using an undecorated
-         * window using override_redirect, but this * would possily require
-         * more changes and investigation.
-         */
-
-        /* Get the current postion of the drawable area on screen */
-        XTranslateCoordinates(
-            fgDisplay.Display,
-            fgStructure.CurrentWindow->Window.Handle,
-            fgDisplay.RootWindow,
-            0, 0, &x, &y,
-            &child
-        );
-
-        /* Move the decorataions out of the topleft corner of the display */
-        XMoveWindow( fgDisplay.Display, fgStructure.CurrentWindow->Window.Handle,
-                     -x, -y);
-    }
-
-#endif
-
-    /* Grab the keyboard, too */
-    XGrabKeyboard(
-        fgDisplay.Display,
-        fgStructure.GameModeWindow->Window.Handle,
-        FALSE,
-        GrabModeAsync, GrabModeAsync,
-        CurrentTime
-    );
-
-#endif
-
-    return fgStructure.GameModeWindow->ID;
-}
-
-/*
- * Leaves the game mode
- */
-void FGAPIENTRY glutLeaveGameMode( void )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutLeaveGameMode" );
-
-    freeglut_return_if_fail( fgStructure.GameModeWindow );
-
-    fgAddToWindowDestroyList( fgStructure.GameModeWindow );
-    fgStructure.GameModeWindow = NULL;
-
-#if TARGET_HOST_POSIX_X11
-
-    XUngrabPointer( fgDisplay.Display, CurrentTime );
-    XUngrabKeyboard( fgDisplay.Display, CurrentTime );
-
-#endif
-
-    fghRestoreState();
-}
-
-/*
- * Returns information concerning the freeglut game mode
- */
-int FGAPIENTRY glutGameModeGet( GLenum eWhat )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutGameModeGet" );
-
-    switch( eWhat )
-    {
-    case GLUT_GAME_MODE_ACTIVE:
-        return !!fgStructure.GameModeWindow;
-
-    case GLUT_GAME_MODE_POSSIBLE:
-        return fghChangeDisplayMode( GL_TRUE );
-
-    case GLUT_GAME_MODE_WIDTH:
-        return fgState.GameModeSize.X;
-
-    case GLUT_GAME_MODE_HEIGHT:
-        return fgState.GameModeSize.Y;
-
-    case GLUT_GAME_MODE_PIXEL_DEPTH:
-        return fgState.GameModeDepth;
-
-    case GLUT_GAME_MODE_REFRESH_RATE:
-        return fgState.GameModeRefresh;
-
-    case GLUT_GAME_MODE_DISPLAY_CHANGED:
-        /*
-         * This is true if the game mode has been activated successfully..
-         */
-        return !!fgStructure.GameModeWindow;
-    }
-
-    fgWarning( "Unknown gamemode get: %d", eWhat );
-    return -1;
-}
-
-/*** END OF FILE ***/
diff --git a/src/freeglut_geometry.c b/src/freeglut_geometry.c
deleted file mode 100644 (file)
index 0f9f5c5..0000000
+++ /dev/null
@@ -1,1215 +0,0 @@
-/*
- * freeglut_geometry.c
- *
- * Freeglut geometry rendering methods.
- *
- * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.
- * Written by Pawel W. Olszta, <olszta@sourceforge.net>
- * Creation date: Fri Dec 3 1999
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-#include <GL/freeglut.h>
-#include "freeglut_internal.h"
-
-/*
- * TODO BEFORE THE STABLE RELEASE:
- *
- * Following functions have been contributed by Andreas Umbach.
- *
- *      glutWireCube()          -- looks OK
- *      glutSolidCube()         -- OK
- *
- * Those functions have been implemented by John Fay.
- *
- *      glutWireTorus()         -- looks OK
- *      glutSolidTorus()        -- looks OK
- *      glutWireDodecahedron()  -- looks OK
- *      glutSolidDodecahedron() -- looks OK
- *      glutWireOctahedron()    -- looks OK
- *      glutSolidOctahedron()   -- looks OK
- *      glutWireTetrahedron()   -- looks OK
- *      glutSolidTetrahedron()  -- looks OK
- *      glutWireIcosahedron()   -- looks OK
- *      glutSolidIcosahedron()  -- looks OK
- *
- *  The Following functions have been updated by Nigel Stewart, based
- *  on FreeGLUT 2.0.0 implementations:
- *
- *      glutWireSphere()        -- looks OK
- *      glutSolidSphere()       -- looks OK
- *      glutWireCone()          -- looks OK
- *      glutSolidCone()         -- looks OK
- */
-
-
-/* -- INTERFACE FUNCTIONS -------------------------------------------------- */
-
-/*
- * Draws a wireframed cube. Code contributed by Andreas Umbach <marvin@dataway.ch>
- */
-void FGAPIENTRY glutWireCube( GLdouble dSize )
-{
-    double size = dSize * 0.5;
-
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutWireCube" );
-
-#   define V(a,b,c) glVertex3d( a size, b size, c size );
-#   define N(a,b,c) glNormal3d( a, b, c );
-
-    /* PWO: I dared to convert the code to use macros... */
-    glBegin( GL_LINE_LOOP ); N( 1.0, 0.0, 0.0); V(+,-,+); V(+,-,-); V(+,+,-); V(+,+,+); glEnd();
-    glBegin( GL_LINE_LOOP ); N( 0.0, 1.0, 0.0); V(+,+,+); V(+,+,-); V(-,+,-); V(-,+,+); glEnd();
-    glBegin( GL_LINE_LOOP ); N( 0.0, 0.0, 1.0); V(+,+,+); V(-,+,+); V(-,-,+); V(+,-,+); glEnd();
-    glBegin( GL_LINE_LOOP ); N(-1.0, 0.0, 0.0); V(-,-,+); V(-,+,+); V(-,+,-); V(-,-,-); glEnd();
-    glBegin( GL_LINE_LOOP ); N( 0.0,-1.0, 0.0); V(-,-,+); V(-,-,-); V(+,-,-); V(+,-,+); glEnd();
-    glBegin( GL_LINE_LOOP ); N( 0.0, 0.0,-1.0); V(-,-,-); V(-,+,-); V(+,+,-); V(+,-,-); glEnd();
-
-#   undef V
-#   undef N
-}
-
-/*
- * Draws a solid cube. Code contributed by Andreas Umbach <marvin@dataway.ch>
- */
-void FGAPIENTRY glutSolidCube( GLdouble dSize )
-{
-    double size = dSize * 0.5;
-
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSolidCube" );
-
-#   define V(a,b,c) glVertex3d( a size, b size, c size );
-#   define N(a,b,c) glNormal3d( a, b, c );
-
-    /* PWO: Again, I dared to convert the code to use macros... */
-    glBegin( GL_QUADS );
-        N( 1.0, 0.0, 0.0); V(+,-,+); V(+,-,-); V(+,+,-); V(+,+,+);
-        N( 0.0, 1.0, 0.0); V(+,+,+); V(+,+,-); V(-,+,-); V(-,+,+);
-        N( 0.0, 0.0, 1.0); V(+,+,+); V(-,+,+); V(-,-,+); V(+,-,+);
-        N(-1.0, 0.0, 0.0); V(-,-,+); V(-,+,+); V(-,+,-); V(-,-,-);
-        N( 0.0,-1.0, 0.0); V(-,-,+); V(-,-,-); V(+,-,-); V(+,-,+);
-        N( 0.0, 0.0,-1.0); V(-,-,-); V(-,+,-); V(+,+,-); V(+,-,-);
-    glEnd();
-
-#   undef V
-#   undef N
-}
-
-/*
- * Compute lookup table of cos and sin values forming a cirle
- *
- * Notes:
- *    It is the responsibility of the caller to free these tables
- *    The size of the table is (n+1) to form a connected loop
- *    The last entry is exactly the same as the first
- *    The sign of n can be flipped to get the reverse loop
- */
-
-static void fghCircleTable(double **sint,double **cost,const int n)
-{
-    int i;
-
-    /* Table size, the sign of n flips the circle direction */
-
-    const int size = abs(n);
-
-    /* Determine the angle between samples */
-
-    const double angle = 2*M_PI/(double)( ( n == 0 ) ? 1 : n );
-
-    /* Allocate memory for n samples, plus duplicate of first entry at the end */
-
-    *sint = (double *) calloc(sizeof(double), size+1);
-    *cost = (double *) calloc(sizeof(double), size+1);
-
-    /* Bail out if memory allocation fails, fgError never returns */
-
-    if (!(*sint) || !(*cost))
-    {
-        free(*sint);
-        free(*cost);
-        fgError("Failed to allocate memory in fghCircleTable");
-    }
-
-    /* Compute cos and sin around the circle */
-
-    (*sint)[0] = 0.0;
-    (*cost)[0] = 1.0;
-
-    for (i=1; i<size; i++)
-    {
-        (*sint)[i] = sin(angle*i);
-        (*cost)[i] = cos(angle*i);
-    }
-
-    /* Last sample is duplicate of the first */
-
-    (*sint)[size] = (*sint)[0];
-    (*cost)[size] = (*cost)[0];
-}
-
-/*
- * Draws a solid sphere
- */
-void FGAPIENTRY glutSolidSphere(GLdouble radius, GLint slices, GLint stacks)
-{
-    int i,j;
-
-    /* Adjust z and radius as stacks are drawn. */
-
-    double z0,z1;
-    double r0,r1;
-
-    /* Pre-computed circle */
-
-    double *sint1,*cost1;
-    double *sint2,*cost2;
-
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSolidSphere" );
-
-    fghCircleTable(&sint1,&cost1,-slices);
-    fghCircleTable(&sint2,&cost2,stacks*2);
-
-    /* The top stack is covered with a triangle fan */
-
-    z0 = 1.0;
-    z1 = cost2[(stacks>0)?1:0];
-    r0 = 0.0;
-    r1 = sint2[(stacks>0)?1:0];
-
-    glBegin(GL_TRIANGLE_FAN);
-
-        glNormal3d(0,0,1);
-        glVertex3d(0,0,radius);
-
-        for (j=slices; j>=0; j--)
-        {
-            glNormal3d(cost1[j]*r1,        sint1[j]*r1,        z1       );
-            glVertex3d(cost1[j]*r1*radius, sint1[j]*r1*radius, z1*radius);
-        }
-
-    glEnd();
-
-    /* Cover each stack with a quad strip, except the top and bottom stacks */
-
-    for( i=1; i<stacks-1; i++ )
-    {
-        z0 = z1; z1 = cost2[i+1];
-        r0 = r1; r1 = sint2[i+1];
-
-        glBegin(GL_QUAD_STRIP);
-
-            for(j=0; j<=slices; j++)
-            {
-                glNormal3d(cost1[j]*r1,        sint1[j]*r1,        z1       );
-                glVertex3d(cost1[j]*r1*radius, sint1[j]*r1*radius, z1*radius);
-                glNormal3d(cost1[j]*r0,        sint1[j]*r0,        z0       );
-                glVertex3d(cost1[j]*r0*radius, sint1[j]*r0*radius, z0*radius);
-            }
-
-        glEnd();
-    }
-
-    /* The bottom stack is covered with a triangle fan */
-
-    z0 = z1;
-    r0 = r1;
-
-    glBegin(GL_TRIANGLE_FAN);
-
-        glNormal3d(0,0,-1);
-        glVertex3d(0,0,-radius);
-
-        for (j=0; j<=slices; j++)
-        {
-            glNormal3d(cost1[j]*r0,        sint1[j]*r0,        z0       );
-            glVertex3d(cost1[j]*r0*radius, sint1[j]*r0*radius, z0*radius);
-        }
-
-    glEnd();
-
-    /* Release sin and cos tables */
-
-    free(sint1);
-    free(cost1);
-    free(sint2);
-    free(cost2);
-}
-
-/*
- * Draws a wire sphere
- */
-void FGAPIENTRY glutWireSphere(GLdouble radius, GLint slices, GLint stacks)
-{
-    int i,j;
-
-    /* Adjust z and radius as stacks and slices are drawn. */
-
-    double r;
-    double x,y,z;
-
-    /* Pre-computed circle */
-
-    double *sint1,*cost1;
-    double *sint2,*cost2;
-
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutWireSphere" );
-
-    fghCircleTable(&sint1,&cost1,-slices  );
-    fghCircleTable(&sint2,&cost2, stacks*2);
-
-    /* Draw a line loop for each stack */
-
-    for (i=1; i<stacks; i++)
-    {
-        z = cost2[i];
-        r = sint2[i];
-
-        glBegin(GL_LINE_LOOP);
-
-            for(j=0; j<=slices; j++)
-            {
-                x = cost1[j];
-                y = sint1[j];
-
-                glNormal3d(x,y,z);
-                glVertex3d(x*r*radius,y*r*radius,z*radius);
-            }
-
-        glEnd();
-    }
-
-    /* Draw a line loop for each slice */
-
-    for (i=0; i<slices; i++)
-    {
-        glBegin(GL_LINE_STRIP);
-
-            for(j=0; j<=stacks; j++)
-            {
-                x = cost1[i]*sint2[j];
-                y = sint1[i]*sint2[j];
-                z = cost2[j];
-
-                glNormal3d(x,y,z);
-                glVertex3d(x*radius,y*radius,z*radius);
-            }
-
-        glEnd();
-    }
-
-    /* Release sin and cos tables */
-
-    free(sint1);
-    free(cost1);
-    free(sint2);
-    free(cost2);
-}
-
-/*
- * Draws a solid cone
- */
-void FGAPIENTRY glutSolidCone( GLdouble base, GLdouble height, GLint slices, GLint stacks )
-{
-    int i,j;
-
-    /* Step in z and radius as stacks are drawn. */
-
-    double z0,z1;
-    double r0,r1;
-
-    const double zStep = height / ( ( stacks > 0 ) ? stacks : 1 );
-    const double rStep = base / ( ( stacks > 0 ) ? stacks : 1 );
-
-    /* Scaling factors for vertex normals */
-
-    const double cosn = ( height / sqrt ( height * height + base * base ));
-    const double sinn = ( base   / sqrt ( height * height + base * base ));
-
-    /* Pre-computed circle */
-
-    double *sint,*cost;
-
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSolidCone" );
-
-    fghCircleTable(&sint,&cost,-slices);
-
-    /* Cover the circular base with a triangle fan... */
-
-    z0 = 0.0;
-    z1 = zStep;
-
-    r0 = base;
-    r1 = r0 - rStep;
-
-    glBegin(GL_TRIANGLE_FAN);
-
-        glNormal3d(0.0,0.0,-1.0);
-        glVertex3d(0.0,0.0, z0 );
-
-        for (j=0; j<=slices; j++)
-            glVertex3d(cost[j]*r0, sint[j]*r0, z0);
-
-    glEnd();
-
-    /* Cover each stack with a quad strip, except the top stack */
-
-    for( i=0; i<stacks-1; i++ )
-    {
-        glBegin(GL_QUAD_STRIP);
-
-            for(j=0; j<=slices; j++)
-            {
-                glNormal3d(cost[j]*cosn, sint[j]*cosn, sinn);
-                glVertex3d(cost[j]*r0,   sint[j]*r0,   z0  );
-                glVertex3d(cost[j]*r1,   sint[j]*r1,   z1  );
-            }
-
-            z0 = z1; z1 += zStep;
-            r0 = r1; r1 -= rStep;
-
-        glEnd();
-    }
-
-    /* The top stack is covered with individual triangles */
-
-    glBegin(GL_TRIANGLES);
-
-        glNormal3d(cost[0]*sinn, sint[0]*sinn, cosn);
-
-        for (j=0; j<slices; j++)
-        {
-            glVertex3d(cost[j+0]*r0,   sint[j+0]*r0,   z0    );
-            glVertex3d(0,              0,              height);
-            glNormal3d(cost[j+1]*sinn, sint[j+1]*sinn, cosn  );
-            glVertex3d(cost[j+1]*r0,   sint[j+1]*r0,   z0    );
-        }
-
-    glEnd();
-
-    /* Release sin and cos tables */
-
-    free(sint);
-    free(cost);
-}
-
-/*
- * Draws a wire cone
- */
-void FGAPIENTRY glutWireCone( GLdouble base, GLdouble height, GLint slices, GLint stacks)
-{
-    int i,j;
-
-    /* Step in z and radius as stacks are drawn. */
-
-    double z = 0.0;
-    double r = base;
-
-    const double zStep = height / ( ( stacks > 0 ) ? stacks : 1 );
-    const double rStep = base / ( ( stacks > 0 ) ? stacks : 1 );
-
-    /* Scaling factors for vertex normals */
-
-    const double cosn = ( height / sqrt ( height * height + base * base ));
-    const double sinn = ( base   / sqrt ( height * height + base * base ));
-
-    /* Pre-computed circle */
-
-    double *sint,*cost;
-
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutWireCone" );
-
-    fghCircleTable(&sint,&cost,-slices);
-
-    /* Draw the stacks... */
-
-    for (i=0; i<stacks; i++)
-    {
-        glBegin(GL_LINE_LOOP);
-
-            for( j=0; j<slices; j++ )
-            {
-                glNormal3d(cost[j]*sinn, sint[j]*sinn, cosn);
-                glVertex3d(cost[j]*r,    sint[j]*r,    z   );
-            }
-
-        glEnd();
-
-        z += zStep;
-        r -= rStep;
-    }
-
-    /* Draw the slices */
-
-    r = base;
-
-    glBegin(GL_LINES);
-
-        for (j=0; j<slices; j++)
-        {
-            glNormal3d(cost[j]*sinn, sint[j]*sinn, cosn  );
-            glVertex3d(cost[j]*r,    sint[j]*r,    0.0   );
-            glVertex3d(0.0,          0.0,          height);
-        }
-
-    glEnd();
-
-    /* Release sin and cos tables */
-
-    free(sint);
-    free(cost);
-}
-
-
-/*
- * Draws a solid cylinder
- */
-void FGAPIENTRY glutSolidCylinder(GLdouble radius, GLdouble height, GLint slices, GLint stacks)
-{
-    int i,j;
-
-    /* Step in z and radius as stacks are drawn. */
-
-    double z0,z1;
-    const double zStep = height / ( ( stacks > 0 ) ? stacks : 1 );
-
-    /* Pre-computed circle */
-
-    double *sint,*cost;
-
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSolidCylinder" );
-
-    fghCircleTable(&sint,&cost,-slices);
-
-    /* Cover the base and top */
-
-    glBegin(GL_TRIANGLE_FAN);
-        glNormal3d(0.0, 0.0, -1.0 );
-        glVertex3d(0.0, 0.0,  0.0 );
-        for (j=0; j<=slices; j++)
-          glVertex3d(cost[j]*radius, sint[j]*radius, 0.0);
-    glEnd();
-
-    glBegin(GL_TRIANGLE_FAN);
-        glNormal3d(0.0, 0.0, 1.0   );
-        glVertex3d(0.0, 0.0, height);
-        for (j=slices; j>=0; j--)
-          glVertex3d(cost[j]*radius, sint[j]*radius, height);
-    glEnd();
-
-    /* Do the stacks */
-
-    z0 = 0.0;
-    z1 = zStep;
-
-    for (i=1; i<=stacks; i++)
-    {
-        if (i==stacks)
-            z1 = height;
-
-        glBegin(GL_QUAD_STRIP);
-            for (j=0; j<=slices; j++ )
-            {
-                glNormal3d(cost[j],        sint[j],        0.0 );
-                glVertex3d(cost[j]*radius, sint[j]*radius, z0  );
-                glVertex3d(cost[j]*radius, sint[j]*radius, z1  );
-            }
-        glEnd();
-
-        z0 = z1; z1 += zStep;
-    }
-
-    /* Release sin and cos tables */
-
-    free(sint);
-    free(cost);
-}
-
-/*
- * Draws a wire cylinder
- */
-void FGAPIENTRY glutWireCylinder(GLdouble radius, GLdouble height, GLint slices, GLint stacks)
-{
-    int i,j;
-
-    /* Step in z and radius as stacks are drawn. */
-
-          double z = 0.0;
-    const double zStep = height / ( ( stacks > 0 ) ? stacks : 1 );
-
-    /* Pre-computed circle */
-
-    double *sint,*cost;
-
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutWireCylinder" );
-
-    fghCircleTable(&sint,&cost,-slices);
-
-    /* Draw the stacks... */
-
-    for (i=0; i<=stacks; i++)
-    {
-        if (i==stacks)
-            z = height;
-
-        glBegin(GL_LINE_LOOP);
-
-            for( j=0; j<slices; j++ )
-            {
-                glNormal3d(cost[j],        sint[j],        0.0);
-                glVertex3d(cost[j]*radius, sint[j]*radius, z  );
-            }
-
-        glEnd();
-
-        z += zStep;
-    }
-
-    /* Draw the slices */
-
-    glBegin(GL_LINES);
-
-        for (j=0; j<slices; j++)
-        {
-            glNormal3d(cost[j],        sint[j],        0.0   );
-            glVertex3d(cost[j]*radius, sint[j]*radius, 0.0   );
-            glVertex3d(cost[j]*radius, sint[j]*radius, height);
-        }
-
-    glEnd();
-
-    /* Release sin and cos tables */
-
-    free(sint);
-    free(cost);
-}
-
-/*
- * Draws a wire torus
- */
-void FGAPIENTRY glutWireTorus( GLdouble dInnerRadius, GLdouble dOuterRadius, GLint nSides, GLint nRings )
-{
-  double  iradius = dInnerRadius, oradius = dOuterRadius, phi, psi, dpsi, dphi;
-  double *vertex, *normal;
-  int    i, j;
-  double spsi, cpsi, sphi, cphi ;
-
-  FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutWireTorus" );
-
-  if ( nSides < 1 ) nSides = 1;
-  if ( nRings < 1 ) nRings = 1;
-
-  /* Allocate the vertices array */
-  vertex = (double *)calloc( sizeof(double), 3 * nSides * nRings );
-  normal = (double *)calloc( sizeof(double), 3 * nSides * nRings );
-
-  glPushMatrix();
-
-  dpsi =  2.0 * M_PI / (double)nRings ;
-  dphi = -2.0 * M_PI / (double)nSides ;
-  psi  = 0.0;
-
-  for( j=0; j<nRings; j++ )
-  {
-    cpsi = cos ( psi ) ;
-    spsi = sin ( psi ) ;
-    phi = 0.0;
-
-    for( i=0; i<nSides; i++ )
-    {
-      int offset = 3 * ( j * nSides + i ) ;
-      cphi = cos ( phi ) ;
-      sphi = sin ( phi ) ;
-      *(vertex + offset + 0) = cpsi * ( oradius + cphi * iradius ) ;
-      *(vertex + offset + 1) = spsi * ( oradius + cphi * iradius ) ;
-      *(vertex + offset + 2) =                    sphi * iradius  ;
-      *(normal + offset + 0) = cpsi * cphi ;
-      *(normal + offset + 1) = spsi * cphi ;
-      *(normal + offset + 2) =        sphi ;
-      phi += dphi;
-    }
-
-    psi += dpsi;
-  }
-
-  for( i=0; i<nSides; i++ )
-  {
-    glBegin( GL_LINE_LOOP );
-
-    for( j=0; j<nRings; j++ )
-    {
-      int offset = 3 * ( j * nSides + i ) ;
-      glNormal3dv( normal + offset );
-      glVertex3dv( vertex + offset );
-    }
-
-    glEnd();
-  }
-
-  for( j=0; j<nRings; j++ )
-  {
-    glBegin(GL_LINE_LOOP);
-
-    for( i=0; i<nSides; i++ )
-    {
-      int offset = 3 * ( j * nSides + i ) ;
-      glNormal3dv( normal + offset );
-      glVertex3dv( vertex + offset );
-    }
-
-    glEnd();
-  }
-
-  free ( vertex ) ;
-  free ( normal ) ;
-  glPopMatrix();
-}
-
-/*
- * Draws a solid torus
- */
-void FGAPIENTRY glutSolidTorus( GLdouble dInnerRadius, GLdouble dOuterRadius, GLint nSides, GLint nRings )
-{
-  double  iradius = dInnerRadius, oradius = dOuterRadius, phi, psi, dpsi, dphi;
-  double *vertex, *normal;
-  int    i, j;
-  double spsi, cpsi, sphi, cphi ;
-
-  FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSolidTorus" );
-
-  if ( nSides < 1 ) nSides = 1;
-  if ( nRings < 1 ) nRings = 1;
-
-  /* Increment the number of sides and rings to allow for one more point than surface */
-  nSides ++ ;
-  nRings ++ ;
-
-  /* Allocate the vertices array */
-  vertex = (double *)calloc( sizeof(double), 3 * nSides * nRings );
-  normal = (double *)calloc( sizeof(double), 3 * nSides * nRings );
-
-  glPushMatrix();
-
-  dpsi =  2.0 * M_PI / (double)(nRings - 1) ;
-  dphi = -2.0 * M_PI / (double)(nSides - 1) ;
-  psi  = 0.0;
-
-  for( j=0; j<nRings; j++ )
-  {
-    cpsi = cos ( psi ) ;
-    spsi = sin ( psi ) ;
-    phi = 0.0;
-
-    for( i=0; i<nSides; i++ )
-    {
-      int offset = 3 * ( j * nSides + i ) ;
-      cphi = cos ( phi ) ;
-      sphi = sin ( phi ) ;
-      *(vertex + offset + 0) = cpsi * ( oradius + cphi * iradius ) ;
-      *(vertex + offset + 1) = spsi * ( oradius + cphi * iradius ) ;
-      *(vertex + offset + 2) =                    sphi * iradius  ;
-      *(normal + offset + 0) = cpsi * cphi ;
-      *(normal + offset + 1) = spsi * cphi ;
-      *(normal + offset + 2) =        sphi ;
-      phi += dphi;
-    }
-
-    psi += dpsi;
-  }
-
-    glBegin( GL_QUADS );
-  for( i=0; i<nSides-1; i++ )
-  {
-    for( j=0; j<nRings-1; j++ )
-    {
-      int offset = 3 * ( j * nSides + i ) ;
-      glNormal3dv( normal + offset );
-      glVertex3dv( vertex + offset );
-      glNormal3dv( normal + offset + 3 );
-      glVertex3dv( vertex + offset + 3 );
-      glNormal3dv( normal + offset + 3 * nSides + 3 );
-      glVertex3dv( vertex + offset + 3 * nSides + 3 );
-      glNormal3dv( normal + offset + 3 * nSides );
-      glVertex3dv( vertex + offset + 3 * nSides );
-    }
-  }
-
-  glEnd();
-
-  free ( vertex ) ;
-  free ( normal ) ;
-  glPopMatrix();
-}
-
-/*
- *
- */
-void FGAPIENTRY glutWireDodecahedron( void )
-{
-  FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutWireDodecahedron" );
-
-  /* Magic Numbers:  It is possible to create a dodecahedron by attaching two pentagons to each face of
-   * of a cube.  The coordinates of the points are:
-   *   (+-x,0, z); (+-1, 1, 1); (0, z, x )
-   * where x = (-1 + sqrt(5))/2, z = (1 + sqrt(5))/2  or
-   *       x = 0.61803398875 and z = 1.61803398875.
-   */
-  glBegin ( GL_LINE_LOOP ) ;
-  glNormal3d (  0.0,  0.525731112119,  0.850650808354 ) ; glVertex3d (  0.0,  1.61803398875,  0.61803398875 ) ; glVertex3d ( -1.0,  1.0,  1.0 ) ; glVertex3d ( -0.61803398875, 0.0,  1.61803398875 ) ; glVertex3d (  0.61803398875, 0.0,  1.61803398875 ) ; glVertex3d (  1.0,  1.0,  1.0 ) ;
-  glEnd () ;
-  glBegin ( GL_LINE_LOOP ) ;
-  glNormal3d (  0.0,  0.525731112119, -0.850650808354 ) ; glVertex3d (  0.0,  1.61803398875, -0.61803398875 ) ; glVertex3d (  1.0,  1.0, -1.0 ) ; glVertex3d (  0.61803398875, 0.0, -1.61803398875 ) ; glVertex3d ( -0.61803398875, 0.0, -1.61803398875 ) ; glVertex3d ( -1.0,  1.0, -1.0 ) ;
-  glEnd () ;
-  glBegin ( GL_LINE_LOOP ) ;
-  glNormal3d (  0.0, -0.525731112119,  0.850650808354 ) ; glVertex3d (  0.0, -1.61803398875,  0.61803398875 ) ; glVertex3d (  1.0, -1.0,  1.0 ) ; glVertex3d (  0.61803398875, 0.0,  1.61803398875 ) ; glVertex3d ( -0.61803398875, 0.0,  1.61803398875 ) ; glVertex3d ( -1.0, -1.0,  1.0 ) ;
-  glEnd () ;
-  glBegin ( GL_LINE_LOOP ) ;
-  glNormal3d (  0.0, -0.525731112119, -0.850650808354 ) ; glVertex3d (  0.0, -1.61803398875, -0.61803398875 ) ; glVertex3d ( -1.0, -1.0, -1.0 ) ; glVertex3d ( -0.61803398875, 0.0, -1.61803398875 ) ; glVertex3d (  0.61803398875, 0.0, -1.61803398875 ) ; glVertex3d (  1.0, -1.0, -1.0 ) ;
-  glEnd () ;
-
-  glBegin ( GL_LINE_LOOP ) ;
-  glNormal3d (  0.850650808354,  0.0,  0.525731112119 ) ; glVertex3d (  0.61803398875,  0.0,  1.61803398875 ) ; glVertex3d (  1.0, -1.0,  1.0 ) ; glVertex3d (  1.61803398875, -0.61803398875, 0.0 ) ; glVertex3d (  1.61803398875,  0.61803398875, 0.0 ) ; glVertex3d (  1.0,  1.0,  1.0 ) ;
-  glEnd () ;
-  glBegin ( GL_LINE_LOOP ) ;
-  glNormal3d ( -0.850650808354,  0.0,  0.525731112119 ) ; glVertex3d ( -0.61803398875,  0.0,  1.61803398875 ) ; glVertex3d ( -1.0,  1.0,  1.0 ) ; glVertex3d ( -1.61803398875,  0.61803398875, 0.0 ) ; glVertex3d ( -1.61803398875, -0.61803398875, 0.0 ) ; glVertex3d ( -1.0, -1.0,  1.0 ) ;
-  glEnd () ;
-  glBegin ( GL_LINE_LOOP ) ;
-  glNormal3d (  0.850650808354,  0.0, -0.525731112119 ) ; glVertex3d (  0.61803398875,  0.0, -1.61803398875 ) ; glVertex3d (  1.0,  1.0, -1.0 ) ; glVertex3d (  1.61803398875,  0.61803398875, 0.0 ) ; glVertex3d (  1.61803398875, -0.61803398875, 0.0 ) ; glVertex3d (  1.0, -1.0, -1.0 ) ;
-  glEnd () ;
-  glBegin ( GL_LINE_LOOP ) ;
-  glNormal3d ( -0.850650808354,  0.0, -0.525731112119 ) ; glVertex3d ( -0.61803398875,  0.0, -1.61803398875 ) ; glVertex3d ( -1.0, -1.0, -1.0 ) ; glVertex3d ( -1.61803398875, -0.61803398875, 0.0 ) ; glVertex3d ( -1.61803398875,  0.61803398875, 0.0 ) ; glVertex3d ( -1.0,  1.0, -1.0 ) ;
-  glEnd () ;
-
-  glBegin ( GL_LINE_LOOP ) ;
-  glNormal3d (  0.525731112119,  0.850650808354,  0.0 ) ; glVertex3d (  1.61803398875,  0.61803398875,  0.0 ) ; glVertex3d (  1.0,  1.0, -1.0 ) ; glVertex3d ( 0.0,  1.61803398875, -0.61803398875 ) ; glVertex3d ( 0.0,  1.61803398875,  0.61803398875 ) ; glVertex3d (  1.0,  1.0,  1.0 ) ;
-  glEnd () ;
-  glBegin ( GL_LINE_LOOP ) ;
-  glNormal3d (  0.525731112119, -0.850650808354,  0.0 ) ; glVertex3d (  1.61803398875, -0.61803398875,  0.0 ) ; glVertex3d (  1.0, -1.0,  1.0 ) ; glVertex3d ( 0.0, -1.61803398875,  0.61803398875 ) ; glVertex3d ( 0.0, -1.61803398875, -0.61803398875 ) ; glVertex3d (  1.0, -1.0, -1.0 ) ;
-  glEnd () ;
-  glBegin ( GL_LINE_LOOP ) ;
-  glNormal3d ( -0.525731112119,  0.850650808354,  0.0 ) ; glVertex3d ( -1.61803398875,  0.61803398875,  0.0 ) ; glVertex3d ( -1.0,  1.0,  1.0 ) ; glVertex3d ( 0.0,  1.61803398875,  0.61803398875 ) ; glVertex3d ( 0.0,  1.61803398875, -0.61803398875 ) ; glVertex3d ( -1.0,  1.0, -1.0 ) ;
-  glEnd () ;
-  glBegin ( GL_LINE_LOOP ) ;
-  glNormal3d ( -0.525731112119, -0.850650808354,  0.0 ) ; glVertex3d ( -1.61803398875, -0.61803398875,  0.0 ) ; glVertex3d ( -1.0, -1.0, -1.0 ) ; glVertex3d ( 0.0, -1.61803398875, -0.61803398875 ) ; glVertex3d ( 0.0, -1.61803398875,  0.61803398875 ) ; glVertex3d ( -1.0, -1.0,  1.0 ) ;
-  glEnd () ;
-}
-
-/*
- *
- */
-void FGAPIENTRY glutSolidDodecahedron( void )
-{
-  FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSolidDodecahedron" );
-
-  /* Magic Numbers:  It is possible to create a dodecahedron by attaching two pentagons to each face of
-   * of a cube.  The coordinates of the points are:
-   *   (+-x,0, z); (+-1, 1, 1); (0, z, x )
-   * where x = (-1 + sqrt(5))/2, z = (1 + sqrt(5))/2 or
-   *       x = 0.61803398875 and z = 1.61803398875.
-   */
-  glBegin ( GL_POLYGON ) ;
-  glNormal3d (  0.0,  0.525731112119,  0.850650808354 ) ; glVertex3d (  0.0,  1.61803398875,  0.61803398875 ) ; glVertex3d ( -1.0,  1.0,  1.0 ) ; glVertex3d ( -0.61803398875, 0.0,  1.61803398875 ) ; glVertex3d (  0.61803398875, 0.0,  1.61803398875 ) ; glVertex3d (  1.0,  1.0,  1.0 ) ;
-  glEnd () ;
-  glBegin ( GL_POLYGON ) ;
-  glNormal3d (  0.0,  0.525731112119, -0.850650808354 ) ; glVertex3d (  0.0,  1.61803398875, -0.61803398875 ) ; glVertex3d (  1.0,  1.0, -1.0 ) ; glVertex3d (  0.61803398875, 0.0, -1.61803398875 ) ; glVertex3d ( -0.61803398875, 0.0, -1.61803398875 ) ; glVertex3d ( -1.0,  1.0, -1.0 ) ;
-  glEnd () ;
-  glBegin ( GL_POLYGON ) ;
-  glNormal3d (  0.0, -0.525731112119,  0.850650808354 ) ; glVertex3d (  0.0, -1.61803398875,  0.61803398875 ) ; glVertex3d (  1.0, -1.0,  1.0 ) ; glVertex3d (  0.61803398875, 0.0,  1.61803398875 ) ; glVertex3d ( -0.61803398875, 0.0,  1.61803398875 ) ; glVertex3d ( -1.0, -1.0,  1.0 ) ;
-  glEnd () ;
-  glBegin ( GL_POLYGON ) ;
-  glNormal3d (  0.0, -0.525731112119, -0.850650808354 ) ; glVertex3d (  0.0, -1.61803398875, -0.61803398875 ) ; glVertex3d ( -1.0, -1.0, -1.0 ) ; glVertex3d ( -0.61803398875, 0.0, -1.61803398875 ) ; glVertex3d (  0.61803398875, 0.0, -1.61803398875 ) ; glVertex3d (  1.0, -1.0, -1.0 ) ;
-  glEnd () ;
-
-  glBegin ( GL_POLYGON ) ;
-  glNormal3d (  0.850650808354,  0.0,  0.525731112119 ) ; glVertex3d (  0.61803398875,  0.0,  1.61803398875 ) ; glVertex3d (  1.0, -1.0,  1.0 ) ; glVertex3d (  1.61803398875, -0.61803398875, 0.0 ) ; glVertex3d (  1.61803398875,  0.61803398875, 0.0 ) ; glVertex3d (  1.0,  1.0,  1.0 ) ;
-  glEnd () ;
-  glBegin ( GL_POLYGON ) ;
-  glNormal3d ( -0.850650808354,  0.0,  0.525731112119 ) ; glVertex3d ( -0.61803398875,  0.0,  1.61803398875 ) ; glVertex3d ( -1.0,  1.0,  1.0 ) ; glVertex3d ( -1.61803398875,  0.61803398875, 0.0 ) ; glVertex3d ( -1.61803398875, -0.61803398875, 0.0 ) ; glVertex3d ( -1.0, -1.0,  1.0 ) ;
-  glEnd () ;
-  glBegin ( GL_POLYGON ) ;
-  glNormal3d (  0.850650808354,  0.0, -0.525731112119 ) ; glVertex3d (  0.61803398875,  0.0, -1.61803398875 ) ; glVertex3d (  1.0,  1.0, -1.0 ) ; glVertex3d (  1.61803398875,  0.61803398875, 0.0 ) ; glVertex3d (  1.61803398875, -0.61803398875, 0.0 ) ; glVertex3d (  1.0, -1.0, -1.0 ) ;
-  glEnd () ;
-  glBegin ( GL_POLYGON ) ;
-  glNormal3d ( -0.850650808354,  0.0, -0.525731112119 ) ; glVertex3d ( -0.61803398875,  0.0, -1.61803398875 ) ; glVertex3d ( -1.0, -1.0, -1.0 ) ; glVertex3d ( -1.61803398875, -0.61803398875, 0.0 ) ; glVertex3d ( -1.61803398875,  0.61803398875, 0.0 ) ; glVertex3d ( -1.0,  1.0, -1.0 ) ;
-  glEnd () ;
-
-  glBegin ( GL_POLYGON ) ;
-  glNormal3d (  0.525731112119,  0.850650808354,  0.0 ) ; glVertex3d (  1.61803398875,  0.61803398875,  0.0 ) ; glVertex3d (  1.0,  1.0, -1.0 ) ; glVertex3d ( 0.0,  1.61803398875, -0.61803398875 ) ; glVertex3d ( 0.0,  1.61803398875,  0.61803398875 ) ; glVertex3d (  1.0,  1.0,  1.0 ) ;
-  glEnd () ;
-  glBegin ( GL_POLYGON ) ;
-  glNormal3d (  0.525731112119, -0.850650808354,  0.0 ) ; glVertex3d (  1.61803398875, -0.61803398875,  0.0 ) ; glVertex3d (  1.0, -1.0,  1.0 ) ; glVertex3d ( 0.0, -1.61803398875,  0.61803398875 ) ; glVertex3d ( 0.0, -1.61803398875, -0.61803398875 ) ; glVertex3d (  1.0, -1.0, -1.0 ) ;
-  glEnd () ;
-  glBegin ( GL_POLYGON ) ;
-  glNormal3d ( -0.525731112119,  0.850650808354,  0.0 ) ; glVertex3d ( -1.61803398875,  0.61803398875,  0.0 ) ; glVertex3d ( -1.0,  1.0,  1.0 ) ; glVertex3d ( 0.0,  1.61803398875,  0.61803398875 ) ; glVertex3d ( 0.0,  1.61803398875, -0.61803398875 ) ; glVertex3d ( -1.0,  1.0, -1.0 ) ;
-  glEnd () ;
-  glBegin ( GL_POLYGON ) ;
-  glNormal3d ( -0.525731112119, -0.850650808354,  0.0 ) ; glVertex3d ( -1.61803398875, -0.61803398875,  0.0 ) ; glVertex3d ( -1.0, -1.0, -1.0 ) ; glVertex3d ( 0.0, -1.61803398875, -0.61803398875 ) ; glVertex3d ( 0.0, -1.61803398875,  0.61803398875 ) ; glVertex3d ( -1.0, -1.0,  1.0 ) ;
-  glEnd () ;
-}
-
-/*
- *
- */
-void FGAPIENTRY glutWireOctahedron( void )
-{
-  FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutWireOctahedron" );
-
-#define RADIUS    1.0f
-  glBegin( GL_LINE_LOOP );
-    glNormal3d( 0.577350269189, 0.577350269189, 0.577350269189); glVertex3d( RADIUS, 0.0, 0.0 ); glVertex3d( 0.0, RADIUS, 0.0 ); glVertex3d( 0.0, 0.0, RADIUS );
-    glNormal3d( 0.577350269189, 0.577350269189,-0.577350269189); glVertex3d( RADIUS, 0.0, 0.0 ); glVertex3d( 0.0, 0.0,-RADIUS ); glVertex3d( 0.0, RADIUS, 0.0 );
-    glNormal3d( 0.577350269189,-0.577350269189, 0.577350269189); glVertex3d( RADIUS, 0.0, 0.0 ); glVertex3d( 0.0, 0.0, RADIUS ); glVertex3d( 0.0,-RADIUS, 0.0 );
-    glNormal3d( 0.577350269189,-0.577350269189,-0.577350269189); glVertex3d( RADIUS, 0.0, 0.0 ); glVertex3d( 0.0,-RADIUS, 0.0 ); glVertex3d( 0.0, 0.0,-RADIUS );
-    glNormal3d(-0.577350269189, 0.577350269189, 0.577350269189); glVertex3d(-RADIUS, 0.0, 0.0 ); glVertex3d( 0.0, 0.0, RADIUS ); glVertex3d( 0.0, RADIUS, 0.0 );
-    glNormal3d(-0.577350269189, 0.577350269189,-0.577350269189); glVertex3d(-RADIUS, 0.0, 0.0 ); glVertex3d( 0.0, RADIUS, 0.0 ); glVertex3d( 0.0, 0.0,-RADIUS );
-    glNormal3d(-0.577350269189,-0.577350269189, 0.577350269189); glVertex3d(-RADIUS, 0.0, 0.0 ); glVertex3d( 0.0,-RADIUS, 0.0 ); glVertex3d( 0.0, 0.0, RADIUS );
-    glNormal3d(-0.577350269189,-0.577350269189,-0.577350269189); glVertex3d(-RADIUS, 0.0, 0.0 ); glVertex3d( 0.0, 0.0,-RADIUS ); glVertex3d( 0.0,-RADIUS, 0.0 );
-  glEnd();
-#undef RADIUS
-}
-
-/*
- *
- */
-void FGAPIENTRY glutSolidOctahedron( void )
-{
-  FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSolidOctahedron" );
-
-#define RADIUS    1.0f
-  glBegin( GL_TRIANGLES );
-    glNormal3d( 0.577350269189, 0.577350269189, 0.577350269189); glVertex3d( RADIUS, 0.0, 0.0 ); glVertex3d( 0.0, RADIUS, 0.0 ); glVertex3d( 0.0, 0.0, RADIUS );
-    glNormal3d( 0.577350269189, 0.577350269189,-0.577350269189); glVertex3d( RADIUS, 0.0, 0.0 ); glVertex3d( 0.0, 0.0,-RADIUS ); glVertex3d( 0.0, RADIUS, 0.0 );
-    glNormal3d( 0.577350269189,-0.577350269189, 0.577350269189); glVertex3d( RADIUS, 0.0, 0.0 ); glVertex3d( 0.0, 0.0, RADIUS ); glVertex3d( 0.0,-RADIUS, 0.0 );
-    glNormal3d( 0.577350269189,-0.577350269189,-0.577350269189); glVertex3d( RADIUS, 0.0, 0.0 ); glVertex3d( 0.0,-RADIUS, 0.0 ); glVertex3d( 0.0, 0.0,-RADIUS );
-    glNormal3d(-0.577350269189, 0.577350269189, 0.577350269189); glVertex3d(-RADIUS, 0.0, 0.0 ); glVertex3d( 0.0, 0.0, RADIUS ); glVertex3d( 0.0, RADIUS, 0.0 );
-    glNormal3d(-0.577350269189, 0.577350269189,-0.577350269189); glVertex3d(-RADIUS, 0.0, 0.0 ); glVertex3d( 0.0, RADIUS, 0.0 ); glVertex3d( 0.0, 0.0,-RADIUS );
-    glNormal3d(-0.577350269189,-0.577350269189, 0.577350269189); glVertex3d(-RADIUS, 0.0, 0.0 ); glVertex3d( 0.0,-RADIUS, 0.0 ); glVertex3d( 0.0, 0.0, RADIUS );
-    glNormal3d(-0.577350269189,-0.577350269189,-0.577350269189); glVertex3d(-RADIUS, 0.0, 0.0 ); glVertex3d( 0.0, 0.0,-RADIUS ); glVertex3d( 0.0,-RADIUS, 0.0 );
-  glEnd();
-#undef RADIUS
-}
-
-/* Magic Numbers:  r0 = ( 1, 0, 0 )
- *                 r1 = ( -1/3, 2 sqrt(2) / 3, 0 )
- *                 r2 = ( -1/3, -sqrt(2) / 3, sqrt(6) / 3 )
- *                 r3 = ( -1/3, -sqrt(2) / 3, -sqrt(6) / 3 )
- * |r0| = |r1| = |r2| = |r3| = 1
- * Distance between any two points is 2 sqrt(6) / 3
- *
- * Normals:  The unit normals are simply the negative of the coordinates of the point not on the surface.
- */
-
-#define NUM_TETR_FACES     4
-
-static GLdouble tet_r[4][3] = { {             1.0,             0.0,             0.0 },
-                                { -0.333333333333,  0.942809041582,             0.0 },
-                                { -0.333333333333, -0.471404520791,  0.816496580928 },
-                                { -0.333333333333, -0.471404520791, -0.816496580928 } } ;
-
-static GLint tet_i[4][3] =  /* Vertex indices */
-{
-  { 1, 3, 2 }, { 0, 2, 3 }, { 0, 3, 1 }, { 0, 1, 2 }
-} ;
-
-/*
- *
- */
-void FGAPIENTRY glutWireTetrahedron( void )
-{
-  FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutWireTetrahedron" );
-
-  glBegin( GL_LINE_LOOP ) ;
-    glNormal3d ( -tet_r[0][0], -tet_r[0][1], -tet_r[0][2] ) ; glVertex3dv ( tet_r[1] ) ; glVertex3dv ( tet_r[3] ) ; glVertex3dv ( tet_r[2] ) ;
-    glNormal3d ( -tet_r[1][0], -tet_r[1][1], -tet_r[1][2] ) ; glVertex3dv ( tet_r[0] ) ; glVertex3dv ( tet_r[2] ) ; glVertex3dv ( tet_r[3] ) ;
-    glNormal3d ( -tet_r[2][0], -tet_r[2][1], -tet_r[2][2] ) ; glVertex3dv ( tet_r[0] ) ; glVertex3dv ( tet_r[3] ) ; glVertex3dv ( tet_r[1] ) ;
-    glNormal3d ( -tet_r[3][0], -tet_r[3][1], -tet_r[3][2] ) ; glVertex3dv ( tet_r[0] ) ; glVertex3dv ( tet_r[1] ) ; glVertex3dv ( tet_r[2] ) ;
-  glEnd() ;
-}
-
-/*
- *
- */
-void FGAPIENTRY glutSolidTetrahedron( void )
-{
-  FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSolidTetrahedron" );
-
-  glBegin( GL_TRIANGLES ) ;
-    glNormal3d ( -tet_r[0][0], -tet_r[0][1], -tet_r[0][2] ) ; glVertex3dv ( tet_r[1] ) ; glVertex3dv ( tet_r[3] ) ; glVertex3dv ( tet_r[2] ) ;
-    glNormal3d ( -tet_r[1][0], -tet_r[1][1], -tet_r[1][2] ) ; glVertex3dv ( tet_r[0] ) ; glVertex3dv ( tet_r[2] ) ; glVertex3dv ( tet_r[3] ) ;
-    glNormal3d ( -tet_r[2][0], -tet_r[2][1], -tet_r[2][2] ) ; glVertex3dv ( tet_r[0] ) ; glVertex3dv ( tet_r[3] ) ; glVertex3dv ( tet_r[1] ) ;
-    glNormal3d ( -tet_r[3][0], -tet_r[3][1], -tet_r[3][2] ) ; glVertex3dv ( tet_r[0] ) ; glVertex3dv ( tet_r[1] ) ; glVertex3dv ( tet_r[2] ) ;
-  glEnd() ;
-}
-
-/*
- *
- */
-static double icos_r[12][3] = {
-    {  1.0,             0.0,             0.0            },
-    {  0.447213595500,  0.894427191000,  0.0            },
-    {  0.447213595500,  0.276393202252,  0.850650808354 },
-    {  0.447213595500, -0.723606797748,  0.525731112119 },
-    {  0.447213595500, -0.723606797748, -0.525731112119 },
-    {  0.447213595500,  0.276393202252, -0.850650808354 },
-    { -0.447213595500, -0.894427191000,  0.0 },
-    { -0.447213595500, -0.276393202252,  0.850650808354 },
-    { -0.447213595500,  0.723606797748,  0.525731112119 },
-    { -0.447213595500,  0.723606797748, -0.525731112119 },
-    { -0.447213595500, -0.276393202252, -0.850650808354 },
-    { -1.0,             0.0,             0.0            }
-};
-
-static int icos_v [20][3] = {
-    {  0,  1,  2 },
-    {  0,  2,  3 },
-    {  0,  3,  4 },
-    {  0,  4,  5 },
-    {  0,  5,  1 },
-    {  1,  8,  2 },
-    {  2,  7,  3 },
-    {  3,  6,  4 },
-    {  4, 10,  5 },
-    {  5,  9,  1 },
-    {  1,  9,  8 },
-    {  2,  8,  7 },
-    {  3,  7,  6 },
-    {  4,  6, 10 },
-    {  5, 10,  9 },
-    { 11,  9, 10 },
-    { 11,  8,  9 },
-    { 11,  7,  8 },
-    { 11,  6,  7 },
-    { 11, 10,  6 }
-};
-
-void FGAPIENTRY glutWireIcosahedron( void )
-{
-  int i ;
-
-  FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutWireIcosahedron" );
-
-  for ( i = 0; i < 20; i++ )
-  {
-    double normal[3] ;
-    normal[0] = ( icos_r[icos_v[i][1]][1] - icos_r[icos_v[i][0]][1] ) * ( icos_r[icos_v[i][2]][2] - icos_r[icos_v[i][0]][2] ) - ( icos_r[icos_v[i][1]][2] - icos_r[icos_v[i][0]][2] ) * ( icos_r[icos_v[i][2]][1] - icos_r[icos_v[i][0]][1] ) ;
-    normal[1] = ( icos_r[icos_v[i][1]][2] - icos_r[icos_v[i][0]][2] ) * ( icos_r[icos_v[i][2]][0] - icos_r[icos_v[i][0]][0] ) - ( icos_r[icos_v[i][1]][0] - icos_r[icos_v[i][0]][0] ) * ( icos_r[icos_v[i][2]][2] - icos_r[icos_v[i][0]][2] ) ;
-    normal[2] = ( icos_r[icos_v[i][1]][0] - icos_r[icos_v[i][0]][0] ) * ( icos_r[icos_v[i][2]][1] - icos_r[icos_v[i][0]][1] ) - ( icos_r[icos_v[i][1]][1] - icos_r[icos_v[i][0]][1] ) * ( icos_r[icos_v[i][2]][0] - icos_r[icos_v[i][0]][0] ) ;
-    glBegin ( GL_LINE_LOOP ) ;
-      glNormal3dv ( normal ) ;
-      glVertex3dv ( icos_r[icos_v[i][0]] ) ;
-      glVertex3dv ( icos_r[icos_v[i][1]] ) ;
-      glVertex3dv ( icos_r[icos_v[i][2]] ) ;
-    glEnd () ;
-  }
-}
-
-/*
- *
- */
-void FGAPIENTRY glutSolidIcosahedron( void )
-{
-  int i ;
-
-  FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSolidIcosahedron" );
-
-  glBegin ( GL_TRIANGLES ) ;
-  for ( i = 0; i < 20; i++ )
-  {
-    double normal[3] ;
-    normal[0] = ( icos_r[icos_v[i][1]][1] - icos_r[icos_v[i][0]][1] ) * ( icos_r[icos_v[i][2]][2] - icos_r[icos_v[i][0]][2] ) - ( icos_r[icos_v[i][1]][2] - icos_r[icos_v[i][0]][2] ) * ( icos_r[icos_v[i][2]][1] - icos_r[icos_v[i][0]][1] ) ;
-    normal[1] = ( icos_r[icos_v[i][1]][2] - icos_r[icos_v[i][0]][2] ) * ( icos_r[icos_v[i][2]][0] - icos_r[icos_v[i][0]][0] ) - ( icos_r[icos_v[i][1]][0] - icos_r[icos_v[i][0]][0] ) * ( icos_r[icos_v[i][2]][2] - icos_r[icos_v[i][0]][2] ) ;
-    normal[2] = ( icos_r[icos_v[i][1]][0] - icos_r[icos_v[i][0]][0] ) * ( icos_r[icos_v[i][2]][1] - icos_r[icos_v[i][0]][1] ) - ( icos_r[icos_v[i][1]][1] - icos_r[icos_v[i][0]][1] ) * ( icos_r[icos_v[i][2]][0] - icos_r[icos_v[i][0]][0] ) ;
-      glNormal3dv ( normal ) ;
-      glVertex3dv ( icos_r[icos_v[i][0]] ) ;
-      glVertex3dv ( icos_r[icos_v[i][1]] ) ;
-      glVertex3dv ( icos_r[icos_v[i][2]] ) ;
-  }
-
-  glEnd () ;
-}
-
-/*
- *
- */
-static double rdod_r[14][3] = {
-    {  0.0,             0.0,             1.0 },
-    {  0.707106781187,  0.000000000000,  0.5 },
-    {  0.000000000000,  0.707106781187,  0.5 },
-    { -0.707106781187,  0.000000000000,  0.5 },
-    {  0.000000000000, -0.707106781187,  0.5 },
-    {  0.707106781187,  0.707106781187,  0.0 },
-    { -0.707106781187,  0.707106781187,  0.0 },
-    { -0.707106781187, -0.707106781187,  0.0 },
-    {  0.707106781187, -0.707106781187,  0.0 },
-    {  0.707106781187,  0.000000000000, -0.5 },
-    {  0.000000000000,  0.707106781187, -0.5 },
-    { -0.707106781187,  0.000000000000, -0.5 },
-    {  0.000000000000, -0.707106781187, -0.5 },
-    {  0.0,             0.0,            -1.0 }
-} ;
-
-static int rdod_v [12][4] = {
-    { 0,  1,  5,  2 },
-    { 0,  2,  6,  3 },
-    { 0,  3,  7,  4 },
-    { 0,  4,  8,  1 },
-    { 5, 10,  6,  2 },
-    { 6, 11,  7,  3 },
-    { 7, 12,  8,  4 },
-    { 8,  9,  5,  1 },
-    { 5,  9, 13, 10 },
-    { 6, 10, 13, 11 },
-    { 7, 11, 13, 12 },
-    { 8, 12, 13,  9 }
-};
-
-static double rdod_n[12][3] = {
-    {  0.353553390594,  0.353553390594,  0.5 },
-    { -0.353553390594,  0.353553390594,  0.5 },
-    { -0.353553390594, -0.353553390594,  0.5 },
-    {  0.353553390594, -0.353553390594,  0.5 },
-    {  0.000000000000,  1.000000000000,  0.0 },
-    { -1.000000000000,  0.000000000000,  0.0 },
-    {  0.000000000000, -1.000000000000,  0.0 },
-    {  1.000000000000,  0.000000000000,  0.0 },
-    {  0.353553390594,  0.353553390594, -0.5 },
-    { -0.353553390594,  0.353553390594, -0.5 },
-    { -0.353553390594, -0.353553390594, -0.5 },
-    {  0.353553390594, -0.353553390594, -0.5 }
-};
-
-void FGAPIENTRY glutWireRhombicDodecahedron( void )
-{
-  int i ;
-
-  FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutWireRhombicDodecahedron" );
-
-  for ( i = 0; i < 12; i++ )
-  {
-    glBegin ( GL_LINE_LOOP ) ;
-      glNormal3dv ( rdod_n[i] ) ;
-      glVertex3dv ( rdod_r[rdod_v[i][0]] ) ;
-      glVertex3dv ( rdod_r[rdod_v[i][1]] ) ;
-      glVertex3dv ( rdod_r[rdod_v[i][2]] ) ;
-      glVertex3dv ( rdod_r[rdod_v[i][3]] ) ;
-    glEnd () ;
-  }
-}
-
-/*
- *
- */
-void FGAPIENTRY glutSolidRhombicDodecahedron( void )
-{
-  int i ;
-
-  FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSolidRhombicDodecahedron" );
-
-  glBegin ( GL_QUADS ) ;
-  for ( i = 0; i < 12; i++ )
-  {
-      glNormal3dv ( rdod_n[i] ) ;
-      glVertex3dv ( rdod_r[rdod_v[i][0]] ) ;
-      glVertex3dv ( rdod_r[rdod_v[i][1]] ) ;
-      glVertex3dv ( rdod_r[rdod_v[i][2]] ) ;
-      glVertex3dv ( rdod_r[rdod_v[i][3]] ) ;
-  }
-
-  glEnd () ;
-}
-
-void FGAPIENTRY glutWireSierpinskiSponge ( int num_levels, GLdouble offset[3], GLdouble scale )
-{
-  int i, j ;
-
-  FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutWireSierpinskiSponge" );
-
-  if ( num_levels == 0 )
-  {
-
-    for ( i = 0 ; i < NUM_TETR_FACES ; i++ )
-    {
-      glBegin ( GL_LINE_LOOP ) ;
-      glNormal3d ( -tet_r[i][0], -tet_r[i][1], -tet_r[i][2] ) ;
-      for ( j = 0; j < 3; j++ )
-      {
-        double x = offset[0] + scale * tet_r[tet_i[i][j]][0] ;
-        double y = offset[1] + scale * tet_r[tet_i[i][j]][1] ;
-        double z = offset[2] + scale * tet_r[tet_i[i][j]][2] ;
-        glVertex3d ( x, y, z ) ;
-      }
-
-      glEnd () ;
-    }
-  }
-  else if ( num_levels > 0 )
-  {
-    GLdouble local_offset[3] ;  /* Use a local variable to avoid buildup of roundoff errors */
-    num_levels -- ;
-    scale /= 2.0 ;
-    for ( i = 0 ; i < NUM_TETR_FACES ; i++ )
-    {
-      local_offset[0] = offset[0] + scale * tet_r[i][0] ;
-      local_offset[1] = offset[1] + scale * tet_r[i][1] ;
-      local_offset[2] = offset[2] + scale * tet_r[i][2] ;
-      glutWireSierpinskiSponge ( num_levels, local_offset, scale ) ;
-    }
-  }
-}
-
-void FGAPIENTRY glutSolidSierpinskiSponge ( int num_levels, GLdouble offset[3], GLdouble scale )
-{
-  int i, j ;
-
-  FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSolidSierpinskiSponge" );
-
-  if ( num_levels == 0 )
-  {
-    glBegin ( GL_TRIANGLES ) ;
-
-    for ( i = 0 ; i < NUM_TETR_FACES ; i++ )
-    {
-      glNormal3d ( -tet_r[i][0], -tet_r[i][1], -tet_r[i][2] ) ;
-      for ( j = 0; j < 3; j++ )
-      {
-        double x = offset[0] + scale * tet_r[tet_i[i][j]][0] ;
-        double y = offset[1] + scale * tet_r[tet_i[i][j]][1] ;
-        double z = offset[2] + scale * tet_r[tet_i[i][j]][2] ;
-        glVertex3d ( x, y, z ) ;
-      }
-    }
-
-    glEnd () ;
-  }
-  else if ( num_levels > 0 )
-  {
-    GLdouble local_offset[3] ;  /* Use a local variable to avoid buildup of roundoff errors */
-    num_levels -- ;
-    scale /= 2.0 ;
-    for ( i = 0 ; i < NUM_TETR_FACES ; i++ )
-    {
-      local_offset[0] = offset[0] + scale * tet_r[i][0] ;
-      local_offset[1] = offset[1] + scale * tet_r[i][1] ;
-      local_offset[2] = offset[2] + scale * tet_r[i][2] ;
-      glutSolidSierpinskiSponge ( num_levels, local_offset, scale ) ;
-    }
-  }
-}
-
-/*** END OF FILE ***/
diff --git a/src/freeglut_glutfont_definitions.c b/src/freeglut_glutfont_definitions.c
deleted file mode 100644 (file)
index 454ecb7..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * freeglut_glutfont_definitions.c
- *
- * Bitmap and stroke fonts displaying.
- *
- * Copyright (c) 2003 Stephen J. Baker (whether he wants it or not).
- * All Rights Reserved.
- * Written by John F. Fay <fayjf@sourceforge.net>, who releases the
- * copyright over to the "freeglut" project lead.
- * Creation date: Mon July 21 2003
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/*
- * This file is necessary for the *nix version of "freeglut" because the
- * original GLUT defined its font variables in rather an unusual way.
- * Publicly, in "glut.h", they were defined as "void *".  Privately,
- * in one of the source code files, they were defined as pointers to a
- * structure.  Most compilers and linkers are satisfied with the "void *"
- * and don't go any farther, but some of them balked.  In particular,
- * when compiling with "freeglut" and then trying to run using the GLUT
- * ".so" library, some of them would give an error.  So we are having to
- * create this file to define the variables as pointers to an unusual
- * structure to match GLUT.
- */
-
-/*
- * freeglut_internal.h uses some GL types, but including the GL header portably
- * is a bit tricky, so we include freeglut_std.h here, which contains the
- * necessary machinery. But this poses another problem, caused by the ugly
- * original defintion of the font constants in "classic" GLUT: They are defined
- * as void* externally, so we move them temporarily out of the way by AN EXTREME
- * CPP HACK.
- */
-
-#define glutStrokeRoman glutStrokeRomanIGNOREME
-#define glutStrokeMonoRoman glutStrokeMonoRomanIGNOREME
-#define glutBitmap9By15 glutBitmap9By15IGNOREME
-#define glutBitmap8By13 glutBitmap8By13IGNOREME
-#define glutBitmapTimesRoman10 glutBitmapTimesRoman10IGNOREME
-#define glutBitmapTimesRoman24 glutBitmapTimesRoman24IGNOREME
-#define glutBitmapHelvetica10 glutBitmapHelvetica10IGNOREME
-#define glutBitmapHelvetica12 glutBitmapHelvetica12IGNOREME
-#define glutBitmapHelvetica18 glutBitmapHelvetica18IGNOREME
-
-#include <GL/freeglut_std.h>
-
-#undef glutStrokeRoman
-#undef glutStrokeMonoRoman
-#undef glutBitmap9By15
-#undef glutBitmap8By13
-#undef glutBitmapTimesRoman10
-#undef glutBitmapTimesRoman24
-#undef glutBitmapHelvetica10
-#undef glutBitmapHelvetica12
-#undef glutBitmapHelvetica18
-
-#include "freeglut_internal.h"
-
-#if TARGET_HOST_POSIX_X11
-
-struct freeglutStrokeFont
-{
-  const char *name ;
-  int num_chars ;
-  void *ch ;
-  float top ;
-  float bottom ;
-};
-
-struct freeglutBitmapFont
-{
-  const char *name ;
-  const int num_chars ;
-  const int first ;
-  const void *ch ;
-};
-
-
-struct freeglutStrokeFont glutStrokeRoman ;
-struct freeglutStrokeFont glutStrokeMonoRoman ;
-
-struct freeglutBitmapFont glutBitmap9By15 ;
-struct freeglutBitmapFont glutBitmap8By13 ;
-struct freeglutBitmapFont glutBitmapTimesRoman10 ;
-struct freeglutBitmapFont glutBitmapTimesRoman24 ;
-struct freeglutBitmapFont glutBitmapHelvetica10 ;
-struct freeglutBitmapFont glutBitmapHelvetica12 ;
-struct freeglutBitmapFont glutBitmapHelvetica18 ;
-
-#endif
-
diff --git a/src/freeglut_init.c b/src/freeglut_init.c
deleted file mode 100644 (file)
index 5b5771b..0000000
+++ /dev/null
@@ -1,1183 +0,0 @@
-/*
- * freeglut_init.c
- *
- * Various freeglut initialization functions.
- *
- * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.
- * Written by Pawel W. Olszta, <olszta@sourceforge.net>
- * Creation date: Thu Dec 2 1999
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-#define FREEGLUT_BUILDING_LIB
-#include <GL/freeglut.h>
-#include "freeglut_internal.h"
-
-#if TARGET_HOST_POSIX_X11
-#include <limits.h>  /* LONG_MAX */
-#endif
-
-/*
- * TODO BEFORE THE STABLE RELEASE:
- *
- *  fgDeinitialize()        -- Win32's OK, X11 needs the OS-specific
- *                             deinitialization done
- *  glutInitDisplayString() -- display mode string parsing
- *
- * Wouldn't it be cool to use gettext() for error messages? I just love
- * bash saying  "nie znaleziono pliku" instead of "file not found" :)
- * Is gettext easily portable?
- */
-
-/* -- GLOBAL VARIABLES ----------------------------------------------------- */
-
-/*
- * A structure pointed by g_pDisplay holds all information
- * regarding the display, screen, root window etc.
- */
-SFG_Display fgDisplay;
-
-/*
- * The settings for the current freeglut session
- */
-SFG_State fgState = { { -1, -1, GL_FALSE },  /* Position */
-                      { 300, 300, GL_TRUE }, /* Size */
-                      GLUT_RGBA | GLUT_SINGLE | GLUT_DEPTH,  /* DisplayMode */
-                      GL_FALSE,              /* Initialised */
-                      GLUT_TRY_DIRECT_CONTEXT,  /* DirectContext */
-                      GL_FALSE,              /* ForceIconic */
-                      GL_FALSE,              /* UseCurrentContext */
-                      GL_FALSE,              /* GLDebugSwitch */
-                      GL_FALSE,              /* XSyncSwitch */
-                      GLUT_KEY_REPEAT_ON,    /* KeyRepeat */
-                      INVALID_MODIFIERS,     /* Modifiers */
-                      0,                     /* FPSInterval */
-                      0,                     /* SwapCount */
-                      0,                     /* SwapTime */
-                      0,                     /* Time */
-                      { NULL, NULL },         /* Timers */
-                      { NULL, NULL },         /* FreeTimers */
-                      NULL,                   /* IdleCallback */
-                      0,                      /* ActiveMenus */
-                      NULL,                   /* MenuStateCallback */
-                      NULL,                   /* MenuStatusCallback */
-                      { 640, 480, GL_TRUE },  /* GameModeSize */
-                      16,                     /* GameModeDepth */
-                      72,                     /* GameModeRefresh */
-                      GLUT_ACTION_EXIT,       /* ActionOnWindowClose */
-                      GLUT_EXEC_STATE_INIT,   /* ExecState */
-                      NULL,                   /* ProgramName */
-                      GL_FALSE,               /* JoysticksInitialised */
-                      0,                      /* NumActiveJoysticks */
-                      GL_FALSE,               /* InputDevsInitialised */
-                      0,                      /* MouseWheelTicks */
-                      1,                      /* AuxiliaryBufferNumber */
-                      4,                      /* SampleNumber */
-                      1,                      /* MajorVersion */
-                      0,                      /* MinorVersion */
-                      0,                      /* ContextFlags */
-                      0,                      /* ContextProfile */
-                      NULL,                   /* ErrorFunc */
-                      NULL                    /* WarningFunc */
-};
-
-
-/* -- PRIVATE FUNCTIONS ---------------------------------------------------- */
-
-#if TARGET_HOST_POSIX_X11
-
-/* Return the atom associated with "name". */
-static Atom fghGetAtom(const char * name)
-{
-  return XInternAtom(fgDisplay.Display, name, False);
-}
-
-/*
- * Check if "property" is set on "window".  The property's values are returned
- * through "data".  If the property is set and is of type "type", return the
- * number of elements in "data".  Return zero otherwise.  In both cases, use
- * "Xfree()" to free "data".
- */
-static int fghGetWindowProperty(Window window,
-                               Atom property,
-                               Atom type,
-                               unsigned char ** data)
-{
-  /*
-   * Caller always has to use "Xfree()" to free "data", since
-   * "XGetWindowProperty() always allocates one extra byte in prop_return
-   * [i.e. "data"] (even if the property is zero length) [..]".
-   */
-
-  int status;  /*  Returned by "XGetWindowProperty". */
-
-  Atom          type_returned;
-  int           temp_format;             /*  Not used. */
-  unsigned long number_of_elements;
-  unsigned long temp_bytes_after;        /*  Not used. */
-
-
-  status = XGetWindowProperty(fgDisplay.Display,
-                             window,
-                             property,
-                             0,
-                             LONG_MAX,
-                             False,
-                             type,
-                             &type_returned,
-                             &temp_format,
-                             &number_of_elements,
-                             &temp_bytes_after,
-                             data);
-
-  FREEGLUT_INTERNAL_ERROR_EXIT(status == Success,
-                              "XGetWindowProperty failled",
-                              "fghGetWindowProperty");
-
-  if (type_returned != type)
-    {
-      number_of_elements = 0;
-    }
-
-  return number_of_elements;
-}
-
-/*  Check if the window manager is NET WM compliant. */
-static int fghNetWMSupported(void)
-{
-  Atom wm_check;
-  Window ** window_ptr_1;
-
-  int number_of_windows;
-  int net_wm_supported;
-
-
-  net_wm_supported = 0;
-
-  wm_check = fghGetAtom("_NET_SUPPORTING_WM_CHECK");
-  window_ptr_1 = malloc(sizeof(Window *));
-
-  /*
-   * Check that the window manager has set this property on the root window.
-   * The property must be the ID of a child window.
-   */
-  number_of_windows = fghGetWindowProperty(fgDisplay.RootWindow,
-                                           wm_check,
-                                           XA_WINDOW,
-                                           (unsigned char **) window_ptr_1);
-  if (number_of_windows == 1)
-    {
-      Window ** window_ptr_2;
-
-      window_ptr_2 = malloc(sizeof(Window *));
-
-      /* Check that the window has the same property set to the same value. */
-      number_of_windows = fghGetWindowProperty(**window_ptr_1,
-                                               wm_check,
-                                               XA_WINDOW,
-                                               (unsigned char **) window_ptr_2);
-      if ((number_of_windows == 1) && (**window_ptr_1 == **window_ptr_2))
-      {
-        /* NET WM compliant */
-        net_wm_supported = 1;
-      }
-
-      XFree(*window_ptr_2);
-      free(window_ptr_2);
-    }
-
-        XFree(*window_ptr_1);
-        free(window_ptr_1);
-
-        return net_wm_supported;
-}
-
-/*  Check if "hint" is present in "property" for "window". */
-int fgHintPresent(Window window, Atom property, Atom hint)
-{
-  Atom *atoms;
-  int number_of_atoms;
-  int supported;
-  int i;
-
-  supported = 0;
-
-  number_of_atoms = fghGetWindowProperty(window,
-                                        property,
-                                        XA_ATOM,
-                                        (unsigned char **) &atoms);
-  for (i = 0; i < number_of_atoms; i++)
-  {
-      if (atoms[i] == hint)
-      {
-          supported = 1;
-          break;
-      }
-  }
-
-  XFree(atoms);
-  return supported;
-}
-
-#endif /*  TARGET_HOST_POSIX_X11  */
-
-
-/*
- * A call to this function should initialize all the display stuff...
- */
-static void fghInitialize( const char* displayName )
-{
-#if TARGET_HOST_POSIX_X11
-    fgDisplay.Display = XOpenDisplay( displayName );
-
-    if( fgDisplay.Display == NULL )
-        fgError( "failed to open display '%s'", XDisplayName( displayName ) );
-
-    if( !glXQueryExtension( fgDisplay.Display, NULL, NULL ) )
-        fgError( "OpenGL GLX extension not supported by display '%s'",
-            XDisplayName( displayName ) );
-
-    fgDisplay.Screen = DefaultScreen( fgDisplay.Display );
-    fgDisplay.RootWindow = RootWindow(
-        fgDisplay.Display,
-        fgDisplay.Screen
-    );
-
-    fgDisplay.ScreenWidth  = DisplayWidth(
-        fgDisplay.Display,
-        fgDisplay.Screen
-    );
-    fgDisplay.ScreenHeight = DisplayHeight(
-        fgDisplay.Display,
-        fgDisplay.Screen
-    );
-
-    fgDisplay.ScreenWidthMM = DisplayWidthMM(
-        fgDisplay.Display,
-        fgDisplay.Screen
-    );
-    fgDisplay.ScreenHeightMM = DisplayHeightMM(
-        fgDisplay.Display,
-        fgDisplay.Screen
-    );
-
-    fgDisplay.Connection = ConnectionNumber( fgDisplay.Display );
-
-    /* Create the window deletion atom */
-    fgDisplay.DeleteWindow = fghGetAtom("WM_DELETE_WINDOW");
-
-    /* Create the state and full screen atoms */
-    fgDisplay.State           = None;
-    fgDisplay.StateFullScreen = None;
-
-    if (fghNetWMSupported())
-    {
-      const Atom supported = fghGetAtom("_NET_SUPPORTED");
-      const Atom state     = fghGetAtom("_NET_WM_STATE");
-      
-      /* Check if the state hint is supported. */
-      if (fgHintPresent(fgDisplay.RootWindow, supported, state))
-      {
-        const Atom full_screen = fghGetAtom("_NET_WM_STATE_FULLSCREEN");
-        
-        fgDisplay.State = state;
-        
-        /* Check if the window manager supports full screen. */
-        /**  Check "_NET_WM_ALLOWED_ACTIONS" on our window instead? **/
-        if (fgHintPresent(fgDisplay.RootWindow, supported, full_screen))
-        {
-          fgDisplay.StateFullScreen = full_screen;
-        }
-      }
-    }
-
-#elif TARGET_HOST_MS_WINDOWS
-
-    WNDCLASS wc;
-    ATOM atom;
-
-    /* What we need to do is to initialize the fgDisplay global structure here. */
-    fgDisplay.Instance = GetModuleHandle( NULL );
-    fgDisplay.DisplayName= displayName ? strdup(displayName) : 0 ;
-    atom = GetClassInfo( fgDisplay.Instance, _T("FREEGLUT"), &wc );
-
-    if( atom == 0 )
-    {
-        ZeroMemory( &wc, sizeof(WNDCLASS) );
-
-        /*
-         * Each of the windows should have its own device context, and we
-         * want redraw events during Vertical and Horizontal Resizes by
-         * the user.
-         *
-         * XXX Old code had "| CS_DBCLCKS" commented out.  Plans for the
-         * XXX future?  Dead-end idea?
-         */
-        wc.lpfnWndProc    = fgWindowProc;
-        wc.cbClsExtra     = 0;
-        wc.cbWndExtra     = 0;
-        wc.hInstance      = fgDisplay.Instance;
-        wc.hIcon          = LoadIcon( fgDisplay.Instance, _T("GLUT_ICON") );
-
-#if defined(_WIN32_WCE)
-        wc.style          = CS_HREDRAW | CS_VREDRAW;
-#else
-        wc.style          = CS_OWNDC | CS_HREDRAW | CS_VREDRAW;
-        if (!wc.hIcon)
-          wc.hIcon        = LoadIcon( NULL, IDI_WINLOGO );
-#endif
-
-        wc.hCursor        = LoadCursor( NULL, IDC_ARROW );
-        wc.hbrBackground  = NULL;
-        wc.lpszMenuName   = NULL;
-        wc.lpszClassName  = _T("FREEGLUT");
-
-        /* Register the window class */
-        atom = RegisterClass( &wc );
-        FREEGLUT_INTERNAL_ERROR_EXIT ( atom, "Window Class Not Registered", "fghInitialize" );
-    }
-
-    /* The screen dimensions can be obtained via GetSystemMetrics() calls */
-    fgDisplay.ScreenWidth  = GetSystemMetrics( SM_CXSCREEN );
-    fgDisplay.ScreenHeight = GetSystemMetrics( SM_CYSCREEN );
-
-    {
-        HWND desktop = GetDesktopWindow( );
-        HDC  context = GetDC( desktop );
-
-        fgDisplay.ScreenWidthMM  = GetDeviceCaps( context, HORZSIZE );
-        fgDisplay.ScreenHeightMM = GetDeviceCaps( context, VERTSIZE );
-
-        ReleaseDC( desktop, context );
-    }
-    /* If we have a DisplayName try to use it for metrics */
-    if( fgDisplay.DisplayName )
-    {
-        HDC context = CreateDC(fgDisplay.DisplayName,0,0,0);
-        if( context )
-        {
-           fgDisplay.ScreenWidth  = GetDeviceCaps( context, HORZRES );
-           fgDisplay.ScreenHeight = GetDeviceCaps( context, VERTRES );
-           fgDisplay.ScreenWidthMM  = GetDeviceCaps( context, HORZSIZE );
-           fgDisplay.ScreenHeightMM = GetDeviceCaps( context, VERTSIZE );
-           DeleteDC(context);
-        }
-        else
-           fgWarning("fghInitialize: "
-                     "CreateDC failed, Screen size info may be incorrect\n"
-          "This is quite likely caused by a bad '-display' parameter");
-      
-    }
-    /* Set the timer granularity to 1 ms */
-    timeBeginPeriod ( 1 );
-
-#endif
-
-    fgState.Initialised = GL_TRUE;
-
-    /* Avoid registering atexit callback on Win32 as it results in an access
-     * violation due to calling into a module which has been unloaded.
-     * Any cleanup isn't needed on Windows anyway, the OS takes care of it.c
-     * see: http://blogs.msdn.com/b/oldnewthing/archive/2012/01/05/10253268.aspx
-     */
-#if ( TARGET_HOST_MS_WINDOWS == 0 )
-    atexit(fgDeinitialize);
-#endif
-
-    /* InputDevice uses GlutTimerFunc(), so fgState.Initialised must be TRUE */
-    fgInitialiseInputDevices();
-}
-
-/*
- * Perform the freeglut deinitialization...
- */
-void fgDeinitialize( void )
-{
-    SFG_Timer *timer;
-
-    if( !fgState.Initialised )
-    {
-        return;
-    }
-
-       /* If we're in game mode, we want to leave game mode */
-    if( fgStructure.GameModeWindow ) {
-        glutLeaveGameMode();
-    }
-
-    /* If there was a menu created, destroy the rendering context */
-    if( fgStructure.MenuContext )
-    {
-#if TARGET_HOST_POSIX_X11
-        /* Note that the MVisualInfo is not owned by the MenuContext! */
-        glXDestroyContext( fgDisplay.Display, fgStructure.MenuContext->MContext );
-#endif
-        free( fgStructure.MenuContext );
-        fgStructure.MenuContext = NULL;
-    }
-
-    fgDestroyStructure( );
-
-    while( ( timer = fgState.Timers.First) )
-    {
-        fgListRemove( &fgState.Timers, &timer->Node );
-        free( timer );
-    }
-
-    while( ( timer = fgState.FreeTimers.First) )
-    {
-        fgListRemove( &fgState.FreeTimers, &timer->Node );
-        free( timer );
-    }
-
-#if !defined(_WIN32_WCE)
-    if ( fgState.JoysticksInitialised )
-        fgJoystickClose( );
-
-    if ( fgState.InputDevsInitialised )
-        fgInputDeviceClose( );
-#endif /* !defined(_WIN32_WCE) */
-    fgState.JoysticksInitialised = GL_FALSE;
-    fgState.InputDevsInitialised = GL_FALSE;
-
-       fgState.MouseWheelTicks = 0;
-
-    fgState.MajorVersion = 1;
-    fgState.MinorVersion = 0;
-    fgState.ContextFlags = 0;
-    fgState.ContextProfile = 0;
-
-    fgState.Initialised = GL_FALSE;
-
-    fgState.Position.X = -1;
-    fgState.Position.Y = -1;
-    fgState.Position.Use = GL_FALSE;
-
-    fgState.Size.X = 300;
-    fgState.Size.Y = 300;
-    fgState.Size.Use = GL_TRUE;
-
-    fgState.DisplayMode = GLUT_RGBA | GLUT_SINGLE | GLUT_DEPTH;
-
-    fgState.DirectContext  = GLUT_TRY_DIRECT_CONTEXT;
-    fgState.ForceIconic         = GL_FALSE;
-    fgState.UseCurrentContext   = GL_FALSE;
-    fgState.GLDebugSwitch       = GL_FALSE;
-    fgState.XSyncSwitch         = GL_FALSE;
-    fgState.ActionOnWindowClose = GLUT_ACTION_EXIT;
-    fgState.ExecState           = GLUT_EXEC_STATE_INIT;
-
-    fgState.KeyRepeat       = GLUT_KEY_REPEAT_ON;
-    fgState.Modifiers       = INVALID_MODIFIERS;
-
-    fgState.GameModeSize.X  = 640;
-    fgState.GameModeSize.Y  = 480;
-    fgState.GameModeDepth   =  16;
-    fgState.GameModeRefresh =  72;
-
-    fgListInit( &fgState.Timers );
-    fgListInit( &fgState.FreeTimers );
-
-    fgState.IdleCallback = NULL;
-    fgState.MenuStateCallback = ( FGCBMenuState )NULL;
-    fgState.MenuStatusCallback = ( FGCBMenuStatus )NULL;
-
-    fgState.SwapCount   = 0;
-    fgState.SwapTime    = 0;
-    fgState.FPSInterval = 0;
-
-    if( fgState.ProgramName )
-    {
-        free( fgState.ProgramName );
-        fgState.ProgramName = NULL;
-    }
-
-#if TARGET_HOST_POSIX_X11
-
-    /*
-     * Make sure all X-client data we have created will be destroyed on
-     * display closing
-     */
-    XSetCloseDownMode( fgDisplay.Display, DestroyAll );
-
-    /*
-     * Close the display connection, destroying all windows we have
-     * created so far
-     */
-    XCloseDisplay( fgDisplay.Display );
-
-#elif TARGET_HOST_MS_WINDOWS
-    if( fgDisplay.DisplayName )
-    {
-        free( fgDisplay.DisplayName );
-        fgDisplay.DisplayName = NULL;
-    }
-
-    /* Reset the timer granularity */
-    timeEndPeriod ( 1 );
-
-#endif
-
-    fgState.Initialised = GL_FALSE;
-}
-
-/*
- * Everything inside the following #ifndef is copied from the X sources.
- */
-
-#if TARGET_HOST_MS_WINDOWS
-
-/*
-
-Copyright 1985, 1986, 1987,1998  The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall
-not be used in advertising or otherwise to promote the sale, use or
-other dealings in this Software without prior written authorization
-from The Open Group.
-
-*/
-
-#define NoValue         0x0000
-#define XValue          0x0001
-#define YValue          0x0002
-#define WidthValue      0x0004
-#define HeightValue     0x0008
-#define AllValues       0x000F
-#define XNegative       0x0010
-#define YNegative       0x0020
-
-/*
- *    XParseGeometry parses strings of the form
- *   "=<width>x<height>{+-}<xoffset>{+-}<yoffset>", where
- *   width, height, xoffset, and yoffset are unsigned integers.
- *   Example:  "=80x24+300-49"
- *   The equal sign is optional.
- *   It returns a bitmask that indicates which of the four values
- *   were actually found in the string.  For each value found,
- *   the corresponding argument is updated;  for each value
- *   not found, the corresponding argument is left unchanged.
- */
-
-static int
-ReadInteger(char *string, char **NextString)
-{
-    register int Result = 0;
-    int Sign = 1;
-
-    if (*string == '+')
-        string++;
-    else if (*string == '-')
-    {
-        string++;
-        Sign = -1;
-    }
-    for (; (*string >= '0') && (*string <= '9'); string++)
-    {
-        Result = (Result * 10) + (*string - '0');
-    }
-    *NextString = string;
-    if (Sign >= 0)
-        return Result;
-    else
-        return -Result;
-}
-
-static int XParseGeometry (
-    const char *string,
-    int *x,
-    int *y,
-    unsigned int *width,    /* RETURN */
-    unsigned int *height)    /* RETURN */
-{
-    int mask = NoValue;
-    register char *strind;
-    unsigned int tempWidth = 0, tempHeight = 0;
-    int tempX = 0, tempY = 0;
-    char *nextCharacter;
-
-    if ( (string == NULL) || (*string == '\0'))
-      return mask;
-    if (*string == '=')
-        string++;  /* ignore possible '=' at beg of geometry spec */
-
-    strind = (char *)string;
-    if (*strind != '+' && *strind != '-' && *strind != 'x') {
-        tempWidth = ReadInteger(strind, &nextCharacter);
-        if (strind == nextCharacter)
-            return 0;
-        strind = nextCharacter;
-        mask |= WidthValue;
-    }
-
-    if (*strind == 'x' || *strind == 'X') {
-        strind++;
-        tempHeight = ReadInteger(strind, &nextCharacter);
-        if (strind == nextCharacter)
-            return 0;
-        strind = nextCharacter;
-        mask |= HeightValue;
-    }
-
-    if ((*strind == '+') || (*strind == '-')) {
-        if (*strind == '-') {
-            strind++;
-            tempX = -ReadInteger(strind, &nextCharacter);
-            if (strind == nextCharacter)
-                return 0;
-            strind = nextCharacter;
-            mask |= XNegative;
-        }
-        else
-        {
-            strind++;
-            tempX = ReadInteger(strind, &nextCharacter);
-            if (strind == nextCharacter)
-                return 0;
-            strind = nextCharacter;
-        }
-        mask |= XValue;
-        if ((*strind == '+') || (*strind == '-')) {
-            if (*strind == '-') {
-                strind++;
-                tempY = -ReadInteger(strind, &nextCharacter);
-                if (strind == nextCharacter)
-                    return 0;
-                strind = nextCharacter;
-                mask |= YNegative;
-            }
-            else
-            {
-                strind++;
-                tempY = ReadInteger(strind, &nextCharacter);
-                if (strind == nextCharacter)
-                    return 0;
-                strind = nextCharacter;
-            }
-            mask |= YValue;
-        }
-    }
-
-    /* If strind isn't at the end of the string the it's an invalid
-       geometry specification. */
-
-    if (*strind != '\0') return 0;
-
-    if (mask & XValue)
-        *x = tempX;
-    if (mask & YValue)
-        *y = tempY;
-    if (mask & WidthValue)
-        *width = tempWidth;
-    if (mask & HeightValue)
-        *height = tempHeight;
-    return mask;
-}
-#endif
-
-/* -- INTERFACE FUNCTIONS -------------------------------------------------- */
-
-/*
- * Perform initialization. This usually happens on the program startup
- * and restarting after glutMainLoop termination...
- */
-void FGAPIENTRY glutInit( int* pargc, char** argv )
-{
-    char* displayName = NULL;
-    char* geometry = NULL;
-    int i, j, argc = *pargc;
-
-    if( fgState.Initialised )
-        fgError( "illegal glutInit() reinitialization attempt" );
-
-    if (pargc && *pargc && argv && *argv && **argv)
-    {
-        fgState.ProgramName = strdup (*argv);
-
-        if( !fgState.ProgramName )
-            fgError ("Could not allocate space for the program's name.");
-    }
-
-    fgCreateStructure( );
-
-    /* Get start time */
-    fgState.Time = fgSystemTime();
-
-    /* check if GLUT_FPS env var is set */
-#ifndef _WIN32_WCE
-    {
-        const char *fps = getenv( "GLUT_FPS" );
-
-        if( fps )
-        {
-            int interval;
-            sscanf( fps, "%d", &interval );
-
-            if( interval <= 0 )
-                fgState.FPSInterval = 5000;  /* 5000 millisecond default */
-            else
-                fgState.FPSInterval = interval;
-        }
-    }
-
-    displayName = getenv( "DISPLAY" );
-
-    for( i = 1; i < argc; i++ )
-    {
-        if( strcmp( argv[ i ], "-display" ) == 0 )
-        {
-            if( ++i >= argc )
-                fgError( "-display parameter must be followed by display name" );
-
-            displayName = argv[ i ];
-
-            argv[ i - 1 ] = NULL;
-            argv[ i     ] = NULL;
-            ( *pargc ) -= 2;
-        }
-        else if( strcmp( argv[ i ], "-geometry" ) == 0 )
-        {
-            if( ++i >= argc )
-                fgError( "-geometry parameter must be followed by window "
-                         "geometry settings" );
-
-            geometry = argv[ i ];
-
-            argv[ i - 1 ] = NULL;
-            argv[ i     ] = NULL;
-            ( *pargc ) -= 2;
-        }
-        else if( strcmp( argv[ i ], "-direct" ) == 0)
-        {
-            if( fgState.DirectContext == GLUT_FORCE_INDIRECT_CONTEXT )
-                fgError( "parameters ambiguity, -direct and -indirect "
-                    "cannot be both specified" );
-
-            fgState.DirectContext = GLUT_FORCE_DIRECT_CONTEXT;
-            argv[ i ] = NULL;
-            ( *pargc )--;
-        }
-        else if( strcmp( argv[ i ], "-indirect" ) == 0 )
-        {
-            if( fgState.DirectContext == GLUT_FORCE_DIRECT_CONTEXT )
-                fgError( "parameters ambiguity, -direct and -indirect "
-                    "cannot be both specified" );
-
-            fgState.DirectContext = GLUT_FORCE_INDIRECT_CONTEXT;
-            argv[ i ] = NULL;
-            (*pargc)--;
-        }
-        else if( strcmp( argv[ i ], "-iconic" ) == 0 )
-        {
-            fgState.ForceIconic = GL_TRUE;
-            argv[ i ] = NULL;
-            ( *pargc )--;
-        }
-        else if( strcmp( argv[ i ], "-gldebug" ) == 0 )
-        {
-            fgState.GLDebugSwitch = GL_TRUE;
-            argv[ i ] = NULL;
-            ( *pargc )--;
-        }
-        else if( strcmp( argv[ i ], "-sync" ) == 0 )
-        {
-            fgState.XSyncSwitch = GL_TRUE;
-            argv[ i ] = NULL;
-            ( *pargc )--;
-        }
-    }
-
-    /* Compact {argv}. */
-    for( i = j = 1; i < *pargc; i++, j++ )
-    {
-        /* Guaranteed to end because there are "*pargc" arguments left */
-        while ( argv[ j ] == NULL )
-            j++;
-        if ( i != j )
-            argv[ i ] = argv[ j ];
-    }
-
-#endif /* _WIN32_WCE */
-
-    /*
-     * Have the display created now. If there wasn't a "-display"
-     * in the program arguments, we will use the DISPLAY environment
-     * variable for opening the X display (see code above):
-     */
-    fghInitialize( displayName );
-
-    /*
-     * Geometry parsing deffered until here because we may need the screen
-     * size.
-     */
-
-    if (geometry )
-    {
-        unsigned int parsedWidth, parsedHeight;
-        int mask = XParseGeometry( geometry,
-                                   &fgState.Position.X, &fgState.Position.Y,
-                                   &parsedWidth, &parsedHeight );
-        /* TODO: Check for overflow? */
-        fgState.Size.X = parsedWidth;
-        fgState.Size.Y = parsedHeight;
-
-        if( (mask & (WidthValue|HeightValue)) == (WidthValue|HeightValue) )
-            fgState.Size.Use = GL_TRUE;
-
-        if( mask & XNegative )
-            fgState.Position.X += fgDisplay.ScreenWidth - fgState.Size.X;
-
-        if( mask & YNegative )
-            fgState.Position.Y += fgDisplay.ScreenHeight - fgState.Size.Y;
-
-        if( (mask & (XValue|YValue)) == (XValue|YValue) )
-            fgState.Position.Use = GL_TRUE;
-    }
-}
-
-#if TARGET_HOST_MS_WINDOWS
-void (__cdecl *__glutExitFunc)( int return_value ) = NULL;
-
-void FGAPIENTRY __glutInitWithExit( int *pargc, char **argv, void (__cdecl *exit_function)(int) )
-{
-  __glutExitFunc = exit_function;
-  glutInit(pargc, argv);
-}
-#endif
-
-/*
- * Undoes all the "glutInit" stuff
- */
-void FGAPIENTRY glutExit ( void )
-{
-  fgDeinitialize ();
-}
-
-/*
- * Sets the default initial window position for new windows
- */
-void FGAPIENTRY glutInitWindowPosition( int x, int y )
-{
-    fgState.Position.X = x;
-    fgState.Position.Y = y;
-
-    if( ( x >= 0 ) && ( y >= 0 ) )
-        fgState.Position.Use = GL_TRUE;
-    else
-        fgState.Position.Use = GL_FALSE;
-}
-
-/*
- * Sets the default initial window size for new windows
- */
-void FGAPIENTRY glutInitWindowSize( int width, int height )
-{
-    fgState.Size.X = width;
-    fgState.Size.Y = height;
-
-    if( ( width > 0 ) && ( height > 0 ) )
-        fgState.Size.Use = GL_TRUE;
-    else
-        fgState.Size.Use = GL_FALSE;
-}
-
-/*
- * Sets the default display mode for all new windows
- */
-void FGAPIENTRY glutInitDisplayMode( unsigned int displayMode )
-{
-    /* We will make use of this value when creating a new OpenGL context... */
-    fgState.DisplayMode = displayMode;
-}
-
-
-/* -- INIT DISPLAY STRING PARSING ------------------------------------------ */
-
-static char* Tokens[] =
-{
-    "alpha", "acca", "acc", "blue", "buffer", "conformant", "depth", "double",
-    "green", "index", "num", "red", "rgba", "rgb", "luminance", "stencil",
-    "single", "stereo", "samples", "slow", "win32pdf", "win32pfd", "xvisual",
-    "xstaticgray", "xgrayscale", "xstaticcolor", "xpseudocolor",
-    "xtruecolor", "xdirectcolor",
-    "xstaticgrey", "xgreyscale", "xstaticcolour", "xpseudocolour",
-    "xtruecolour", "xdirectcolour", "borderless", "aux"
-};
-#define NUM_TOKENS             (sizeof(Tokens) / sizeof(*Tokens))
-
-void FGAPIENTRY glutInitDisplayString( const char* displayMode )
-{
-    int glut_state_flag = 0 ;
-    /*
-     * Unpack a lot of options from a character string.  The options are
-     * delimited by blanks or tabs.
-     */
-    char *token ;
-    size_t len = strlen ( displayMode );
-    char *buffer = (char *)malloc ( (len+1) * sizeof(char) );
-    memcpy ( buffer, displayMode, len );
-    buffer[len] = '\0';
-
-    token = strtok ( buffer, " \t" );
-
-    while ( token )
-    {
-        /* Process this token */
-        int i ;
-
-        /* Temporary fix:  Ignore any length specifications and at least
-         * process the basic token
-         * TODO:  Fix this permanently
-         */
-        size_t cleanlength = strcspn ( token, "=<>~!" );
-
-        for ( i = 0; i < NUM_TOKENS; i++ )
-        {
-            if ( strncmp ( token, Tokens[i], cleanlength ) == 0 ) break ;
-        }
-
-        switch ( i )
-        {
-        case 0 :  /* "alpha":  Alpha color buffer precision in bits */
-            glut_state_flag |= GLUT_ALPHA ;  /* Somebody fix this for me! */
-            break ;
-
-        case 1 :  /* "acca":  Red, green, blue, and alpha accumulation buffer
-                     precision in bits */
-            break ;
-
-        case 2 :  /* "acc":  Red, green, and blue accumulation buffer precision
-                     in bits with zero bits alpha */
-            glut_state_flag |= GLUT_ACCUM ;  /* Somebody fix this for me! */
-            break ;
-
-        case 3 :  /* "blue":  Blue color buffer precision in bits */
-            break ;
-
-        case 4 :  /* "buffer":  Number of bits in the color index color buffer
-                   */
-            break ;
-
-        case 5 :  /* "conformant":  Boolean indicating if the frame buffer
-                     configuration is conformant or not */
-            break ;
-
-        case 6 : /* "depth":  Number of bits of precsion in the depth buffer */
-            glut_state_flag |= GLUT_DEPTH ;  /* Somebody fix this for me! */
-            break ;
-
-        case 7 :  /* "double":  Boolean indicating if the color buffer is
-                     double buffered */
-            glut_state_flag |= GLUT_DOUBLE ;
-            break ;
-
-        case 8 :  /* "green":  Green color buffer precision in bits */
-            break ;
-
-        case 9 :  /* "index":  Boolean if the color model is color index or not
-                   */
-            glut_state_flag |= GLUT_INDEX ;
-            break ;
-
-        case 10 :  /* "num":  A special capability  name indicating where the
-                      value represents the Nth frame buffer configuration
-                      matching the description string */
-            break ;
-
-        case 11 :  /* "red":  Red color buffer precision in bits */
-            break ;
-
-        case 12 :  /* "rgba":  Number of bits of red, green, blue, and alpha in
-                      the RGBA color buffer */
-            glut_state_flag |= GLUT_RGBA ;  /* Somebody fix this for me! */
-            break ;
-
-        case 13 :  /* "rgb":  Number of bits of red, green, and blue in the
-                      RGBA color buffer with zero bits alpha */
-            glut_state_flag |= GLUT_RGB ;  /* Somebody fix this for me! */
-            break ;
-
-        case 14 :  /* "luminance":  Number of bits of red in the RGBA and zero
-                      bits of green, blue (alpha not specified) of color buffer
-                      precision */
-            glut_state_flag |= GLUT_LUMINANCE ; /* Somebody fix this for me! */
-            break ;
-
-        case 15 :  /* "stencil":  Number of bits in the stencil buffer */
-            glut_state_flag |= GLUT_STENCIL;  /* Somebody fix this for me! */
-            break ;
-
-        case 16 :  /* "single":  Boolean indicate the color buffer is single
-                      buffered */
-            glut_state_flag |= GLUT_SINGLE ;
-            break ;
-
-        case 17 :  /* "stereo":  Boolean indicating the color buffer supports
-                      OpenGL-style stereo */
-            glut_state_flag |= GLUT_STEREO ;
-            break ;
-
-        case 18 :  /* "samples":  Indicates the number of multisamples to use
-                      based on GLX's SGIS_multisample extension (for
-                      antialiasing) */
-            glut_state_flag |= GLUT_MULTISAMPLE ; /*Somebody fix this for me!*/
-            break ;
-
-        case 19 :  /* "slow":  Boolean indicating if the frame buffer
-                      configuration is slow or not */
-            break ;
-
-        case 20 :  /* "win32pdf": (incorrect spelling but was there before */
-        case 21 :  /* "win32pfd":  matches the Win32 Pixel Format Descriptor by
-                      number */
-#if TARGET_HOST_MS_WINDOWS
-#endif
-            break ;
-
-        case 22 :  /* "xvisual":  matches the X visual ID by number */
-#if TARGET_HOST_POSIX_X11
-#endif
-            break ;
-
-        case 23 :  /* "xstaticgray": */
-        case 29 :  /* "xstaticgrey":  boolean indicating if the frame buffer
-                      configuration's X visual is of type StaticGray */
-#if TARGET_HOST_POSIX_X11
-#endif
-            break ;
-
-        case 24 :  /* "xgrayscale": */
-        case 30 :  /* "xgreyscale":  boolean indicating if the frame buffer
-                      configuration's X visual is of type GrayScale */
-#if TARGET_HOST_POSIX_X11
-#endif
-            break ;
-
-        case 25 :  /* "xstaticcolor": */
-        case 31 :  /* "xstaticcolour":  boolean indicating if the frame buffer
-                      configuration's X visual is of type StaticColor */
-#if TARGET_HOST_POSIX_X11
-#endif
-            break ;
-
-        case 26 :  /* "xpseudocolor": */
-        case 32 :  /* "xpseudocolour":  boolean indicating if the frame buffer
-                      configuration's X visual is of type PseudoColor */
-#if TARGET_HOST_POSIX_X11
-#endif
-            break ;
-
-        case 27 :  /* "xtruecolor": */
-        case 33 :  /* "xtruecolour":  boolean indicating if the frame buffer
-                      configuration's X visual is of type TrueColor */
-#if TARGET_HOST_POSIX_X11
-#endif
-            break ;
-
-        case 28 :  /* "xdirectcolor": */
-        case 34 :  /* "xdirectcolour":  boolean indicating if the frame buffer
-                      configuration's X visual is of type DirectColor */
-#if TARGET_HOST_POSIX_X11
-#endif
-            break ;
-
-        case 35 :  /* "borderless":  windows should not have borders */
-#if TARGET_HOST_POSIX_X11
-#endif
-            break ;
-
-        case 36 :  /* "aux":  some number of aux buffers */
-            glut_state_flag |= GLUT_AUX;
-            break ;
-
-        case 37 :  /* Unrecognized */
-            fgWarning ( "WARNING - Display string token not recognized:  %s",
-                        token );
-            break ;
-        }
-
-        token = strtok ( NULL, " \t" );
-    }
-
-    free ( buffer );
-
-    /* We will make use of this value when creating a new OpenGL context... */
-    fgState.DisplayMode = glut_state_flag;
-}
-
-/* -- SETTING OPENGL 3.0 CONTEXT CREATION PARAMETERS ---------------------- */
-
-void FGAPIENTRY glutInitContextVersion( int majorVersion, int minorVersion )
-{
-    /* We will make use of these valuse when creating a new OpenGL context... */
-    fgState.MajorVersion = majorVersion;
-    fgState.MinorVersion = minorVersion;
-}
-
-
-void FGAPIENTRY glutInitContextFlags( int flags )
-{
-    /* We will make use of this value when creating a new OpenGL context... */
-    fgState.ContextFlags = flags;
-}
-
-void FGAPIENTRY glutInitContextProfile( int profile )
-{
-    /* We will make use of this value when creating a new OpenGL context... */
-    fgState.ContextProfile = profile;
-}
-
-/* -------------- User Defined Error/Warning Handler Support -------------- */
-
-/*
- * Sets the user error handler (note the use of va_list for the args to the fmt)
- */
-void FGAPIENTRY glutInitErrorFunc( void (* vfgError) ( const char *fmt, va_list ap ) )
-{
-    /* This allows user programs to handle freeglut errors */
-    fgState.ErrorFunc = vfgError;
-}
-
-/*
- * Sets the user warning handler (note the use of va_list for the args to the fmt)
- */
-void FGAPIENTRY glutInitWarningFunc( void (* vfgWarning) ( const char *fmt, va_list ap ) )
-{
-    /* This allows user programs to handle freeglut warnings */
-    fgState.WarningFunc = vfgWarning;
-}
-
-/*** END OF FILE ***/
diff --git a/src/freeglut_input_devices.c b/src/freeglut_input_devices.c
deleted file mode 100755 (executable)
index 04f5fd5..0000000
+++ /dev/null
@@ -1,378 +0,0 @@
-/*
- * freeglut_input_devices.c
- *
- * Handles miscellaneous input devices via direct serial-port access.
- * Proper X11 XInput device support is not yet supported.
- * Also lacks Mac support.
- *
- * Written by Joe Krahn <krahn@niehs.nih.gov> 2005
- *
- * Copyright (c) 2005 Stephen J. Baker. All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * PAWEL W. OLSZTA OR STEPHEN J. BAKER BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#    include "config.h"
-#endif
-
-#include <GL/freeglut.h>
-#include "freeglut_internal.h"
-
-#if TARGET_HOST_POSIX_X11
-#ifdef HAVE_ERRNO_H
-#include <errno.h>
-#endif
-#include <sys/ioctl.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <termios.h>
-#include <fcntl.h>
-
-typedef struct {
-   int fd;
-   struct termios termio, termio_save;
-} SERIALPORT;
-
-#elif TARGET_HOST_MS_WINDOWS
-#include <sys/types.h>
-#include <winbase.h>
-typedef struct {
-   HANDLE fh;
-   COMMTIMEOUTS timeouts_save;
-   DCB dcb_save;
-} SERIALPORT;
-
-#endif
-
-/********************* Dialbox definitions ***********************/
-
-#define DIAL_NUM_VALUATORS 8
-
-/* dial parser state machine states */
-#define DIAL_NEW                (-1)
-#define DIAL_WHICH_DEVICE       0
-#define DIAL_VALUE_HIGH         1
-#define DIAL_VALUE_LOW          2
-
-/* dial/button box commands */
-#define DIAL_INITIALIZE                 0x20
-#define DIAL_SET_LEDS                   0x75
-#define DIAL_SET_TEXT                   0x61
-#define DIAL_SET_AUTO_DIALS             0x50
-#define DIAL_SET_AUTO_DELTA_DIALS       0x51
-#define DIAL_SET_FILTER                 0x53
-#define DIAL_SET_BUTTONS_MOM_TYPE       0x71
-#define DIAL_SET_AUTO_MOM_BUTTONS       0x73
-#define DIAL_SET_ALL_LEDS               0x4b
-#define DIAL_CLEAR_ALL_LEDS             0x4c
-
-/* dial/button box replies and events */
-#define DIAL_INITIALIZED        0x20
-#define DIAL_BASE               0x30
-#define DIAL_DELTA_BASE         0x40
-#define DIAL_PRESS_BASE         0xc0
-#define DIAL_RELEASE_BASE       0xe0
-
-/* macros to determine reply type */
-#define IS_DIAL_EVENT(ch)       (((ch)>=DIAL_BASE)&&((ch)<DIAL_BASE+DIAL_NUM_VALUATORS))
-#define IS_KEY_PRESS(ch)        (((ch)>=DIAL_PRESS_BASE)&&((ch)<DIAL_PRESS_BASE+DIAL_NUM_BUTTONS))
-#define IS_KEY_RELEASE(ch)      (((ch)>=DIAL_RELEASE_BASE)&&((ch)<DIAL_RELEASE_BASE+DIAL_NUM_BUTTONS))
-#define IS_INIT_EVENT(ch)       ((ch)==DIAL_INITIALIZED)
-
-/*****************************************************************/
-
-static SERIALPORT *serial_open ( const char *device );
-static void serial_close ( SERIALPORT *port );
-static int serial_getchar ( SERIALPORT *port );
-static int serial_putchar ( SERIALPORT *port, unsigned char ch );
-static void serial_flush ( SERIALPORT *port );
-
-static void send_dial_event(int dial, int value);
-static void poll_dials(int id);
-
-/* local variables */
-static SERIALPORT *dialbox_port=NULL;
-
-/*****************************************************************/
-
-/*
- * Implementation for glutDeviceGet(GLUT_HAS_DIAL_AND_BUTTON_BOX)
- */
-int fgInputDeviceDetect( void )
-{
-    fgInitialiseInputDevices ();
-
-    if ( !dialbox_port )
-        return 0;
-
-    if ( !fgState.InputDevsInitialised )
-        return 0;
-
-    return 1;
-}
-
-/*
- * Try initializing the input device(s)
- */
-void fgInitialiseInputDevices ( void )
-{
-    if( !fgState.InputDevsInitialised )
-    {
-        const char *dial_device=NULL;
-        dial_device = getenv ( "GLUT_DIALS_SERIAL" );
-#if TARGET_HOST_MS_WINDOWS
-        if (!dial_device){
-            static char devname[256];
-            DWORD size=sizeof(devname);
-            DWORD type = REG_SZ;
-            HKEY key;
-            if (RegOpenKeyA(HKEY_LOCAL_MACHINE,"SOFTWARE\\FreeGLUT",&key)==ERROR_SUCCESS) {
-                if (RegQueryValueExA(key,"DialboxSerialPort",NULL,&type,(LPBYTE)devname,&size)==ERROR_SUCCESS){
-                    dial_device=devname;
-                }
-                RegCloseKey(key);
-            }
-        }
-#endif
-        if ( !dial_device ) return;
-        if ( !( dialbox_port = serial_open ( dial_device ) ) ) return;
-        serial_putchar(dialbox_port,DIAL_INITIALIZE);
-        glutTimerFunc ( 10, poll_dials, 0 );
-        fgState.InputDevsInitialised = GL_TRUE;
-    }
-}
-
-/*
- *
- */
-void fgInputDeviceClose( void )
-{
-    if ( fgState.InputDevsInitialised )
-    {
-        serial_close ( dialbox_port );
-        dialbox_port = NULL;
-        fgState.InputDevsInitialised = GL_FALSE;
-    }
-}
-
-/********************************************************************/
-
-/* Check all windows for dialbox callbacks */
-static void fghcbEnumDialCallbacks ( SFG_Window *window, SFG_Enumerator *enumerator )
-{
-    /* Built-in to INVOKE_WCB():  if window->Callbacks[CB_Dials] */
-    INVOKE_WCB ( *window,Dials, ( ((int*)enumerator->data)[0], ((int*)enumerator->data)[1]) );
-    fgEnumSubWindows ( window, fghcbEnumDialCallbacks, enumerator );
-}
-
-static void send_dial_event ( int num, int value )
-{
-    SFG_Enumerator enumerator;
-    int data[2];
-    data[0] = num;
-    data[1] = value;
-    enumerator.found = GL_FALSE;
-    enumerator.data  =  data;
-    fgEnumWindows ( fghcbEnumDialCallbacks, &enumerator );
-}
-
-/********************************************************************/
-static void poll_dials ( int id )
-{
-    int data;
-    static int dial_state = DIAL_NEW;
-    static int dial_which;
-    static int dial_value;
-    static int dials[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };
-
-    if ( !dialbox_port ) return;
-
-    while ( (data=serial_getchar(dialbox_port)) != EOF )
-    {
-        if ( ( dial_state > DIAL_WHICH_DEVICE ) || IS_DIAL_EVENT ( data ) )
-        {
-            switch ( dial_state )
-            {
-            case DIAL_WHICH_DEVICE:
-                dial_which = data - DIAL_BASE;
-                dial_state++;
-                break;
-            case DIAL_VALUE_HIGH:
-                dial_value = ( data << 8 );
-                dial_state++;
-                break;
-            case DIAL_VALUE_LOW:
-                dial_value |= data;
-                if ( dial_value & 0x8000 ) dial_value -= 0x10000;
-                dials[dial_which] = dial_value;
-                send_dial_event ( dial_which + 1, dial_value * 360 / 256 );
-                dial_state = DIAL_WHICH_DEVICE;
-                break;
-            default:
-                /* error: Impossible state value! */
-                break;
-            }
-        }
-        else if ( data == DIAL_INITIALIZED )
-        {
-            fgState.InputDevsInitialised = GL_TRUE;
-            dial_state = DIAL_WHICH_DEVICE;
-            serial_putchar(dialbox_port,DIAL_SET_AUTO_DIALS);
-            serial_putchar(dialbox_port,0xff);
-            serial_putchar(dialbox_port,0xff);
-        }
-        else  /* Unknown data; try flushing. */
-            serial_flush(dialbox_port);
-    }
-
-    glutTimerFunc ( 2, poll_dials, 0 );
-}
-
-
-/******** OS Specific Serial I/O routines *******/
-#if TARGET_HOST_POSIX_X11 /* ==> Linux/BSD/UNIX POSIX serial I/O */
-static SERIALPORT *serial_open ( const char *device )
-{
-    int fd;
-    struct termios termio;
-    SERIALPORT *port;
-
-    fd = open(device, O_RDWR | O_NONBLOCK );
-    if (fd <0) {
-        perror(device);
-        return NULL;
-    }
-
-    port = malloc(sizeof(SERIALPORT));
-    memset(port, 0, sizeof(SERIALPORT));
-    port->fd = fd;
-
-    /* save current port settings */
-    tcgetattr(fd,&port->termio_save);
-
-    memset(&termio, 0, sizeof(termio));
-    termio.c_cflag = CS8 | CREAD | HUPCL ;
-    termio.c_iflag = IGNPAR | IGNBRK ;
-    termio.c_cc[VTIME]    = 0;   /* inter-character timer */
-    termio.c_cc[VMIN]     = 1;   /* block read until 1 chars received, when blocking I/O */
-
-    cfsetispeed(&termio, B9600);
-    cfsetospeed(&termio, B9600);
-    tcsetattr(fd,TCSANOW,&termio);
-
-    serial_flush(port);
-    return port;
-}
-
-static void serial_close(SERIALPORT *port)
-{
-    if (port)
-    {
-        /* restore old port settings */
-        tcsetattr(port->fd,TCSANOW,&port->termio_save);
-        close(port->fd);
-        free(port);
-    }
-}
-
-static int serial_getchar(SERIALPORT *port)
-{
-    unsigned char ch;
-    if (!port) return EOF;
-    if (read(port->fd,&ch,1)) return ch;
-    return EOF;
-}
-
-static int serial_putchar(SERIALPORT *port, unsigned char ch){
-    if (!port) return 0;
-    return write(port->fd,&ch,1);
-}
-
-static void serial_flush ( SERIALPORT *port )
-{
-    tcflush ( port->fd, TCIOFLUSH );
-}
-
-#elif TARGET_HOST_MS_WINDOWS
-
-static SERIALPORT *serial_open(const char *device){
-    HANDLE fh;
-    DCB dcb={sizeof(DCB)};
-    COMMTIMEOUTS timeouts;
-    SERIALPORT *port;
-
-    fh = CreateFile(device,GENERIC_READ|GENERIC_WRITE,0,NULL,
-      OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
-    if (!fh) return NULL;
-
-    port = malloc(sizeof(SERIALPORT));
-    ZeroMemory(port, sizeof(SERIALPORT));
-    port->fh = fh;
-
-    /* save current port settings */
-    GetCommState(fh,&port->dcb_save);
-    GetCommTimeouts(fh,&port->timeouts_save);
-
-    dcb.DCBlength=sizeof(DCB);
-    BuildCommDCB("96,n,8,1",&dcb);
-    SetCommState(fh,&dcb);
-
-    ZeroMemory(&timeouts,sizeof(timeouts));
-    timeouts.ReadTotalTimeoutConstant=1;
-    timeouts.WriteTotalTimeoutConstant=1;
-    SetCommTimeouts(fh,&timeouts);
-
-    serial_flush(port);
-
-    return port;
-}
-
-static void serial_close(SERIALPORT *port){
-    if (port){
-        /* restore old port settings */
-        SetCommState(port->fh,&port->dcb_save);
-        SetCommTimeouts(port->fh,&port->timeouts_save);
-        CloseHandle(port->fh);
-        free(port);
-    }
-}
-
-static int serial_getchar(SERIALPORT *port){
-    DWORD n;
-    unsigned char ch;
-    if (!port) return EOF;
-    if (!ReadFile(port->fh,&ch,1,&n,NULL)) return EOF;
-    if (n==1) return ch;
-    return EOF;
-}
-
-static int serial_putchar(SERIALPORT *port, unsigned char ch){
-    DWORD n;
-    if (!port) return 0;
-    return WriteFile(port->fh,&ch,1,&n,NULL);
-}
-
-static void serial_flush ( SERIALPORT *port )
-{
-    FlushFileBuffers(port->fh);
-}
-
-#endif
diff --git a/src/freeglut_internal.h b/src/freeglut_internal.h
deleted file mode 100644 (file)
index 540f75f..0000000
+++ /dev/null
@@ -1,1023 +0,0 @@
-/*
- * freeglut_internal.h
- *
- * The freeglut library private include file.
- *
- * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.
- * Written by Pawel W. Olszta, <olszta@sourceforge.net>
- * Creation date: Thu Dec 2 1999
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-#ifndef  FREEGLUT_INTERNAL_H
-#define  FREEGLUT_INTERNAL_H
-
-#ifdef HAVE_CONFIG_H
-#    include "config.h"
-#endif
-
-/* XXX Update these for each release! */
-#define  VERSION_MAJOR 2
-#define  VERSION_MINOR 7
-#define  VERSION_PATCH 0
-
-/* Freeglut is intended to function under all Unix/X11 and Win32 platforms. */
-/* XXX: Don't all MS-Windows compilers (except Cygwin) have _WIN32 defined?
- * XXX: If so, remove the first set of defined()'s below.
- */
-#if !defined(TARGET_HOST_POSIX_X11) && !defined(TARGET_HOST_MS_WINDOWS) && !defined(TARGET_HOST_MAC_OSX) && !defined(TARGET_HOST_SOLARIS)
-#if defined(_MSC_VER) || defined(__WATCOMC__) || defined(__MINGW32__) \
-    || defined(_WIN32) || defined(_WIN32_WCE) \
-    || ( defined(__CYGWIN__) && defined(X_DISPLAY_MISSING) )
-#   define  TARGET_HOST_MS_WINDOWS 1
-
-#elif defined(__posix__) || defined(__unix__) || defined(__linux__) || defined(__sun)
-#   define  TARGET_HOST_POSIX_X11  1
-
-#elif defined(__APPLE__)
-/* This is a placeholder until we get native OSX support ironed out -- JFF 11/18/09 */
-#   define  TARGET_HOST_POSIX_X11  1
-/* #   define  TARGET_HOST_MAC_OSX    1 */
-
-#else
-#   error "Unrecognized target host!"
-
-#endif
-#endif
-
-/* Detect both SunPro and gcc compilers on Sun Solaris */
-#if defined (__SVR4) && defined (__sun)
-#   define TARGET_HOST_SOLARIS 1
-#endif
-
-#ifndef TARGET_HOST_MS_WINDOWS
-#   define  TARGET_HOST_MS_WINDOWS 0
-#endif
-
-#ifndef  TARGET_HOST_POSIX_X11
-#   define  TARGET_HOST_POSIX_X11  0
-#endif
-
-#ifndef  TARGET_HOST_MAC_OSX
-#   define  TARGET_HOST_MAC_OSX    0
-#endif
-
-#ifndef  TARGET_HOST_SOLARIS
-#   define  TARGET_HOST_SOLARIS    0
-#endif
-
-/* -- FIXED CONFIGURATION LIMITS ------------------------------------------- */
-
-#define  FREEGLUT_MAX_MENUS         3
-
-/* -- PLATFORM-SPECIFIC INCLUDES ------------------------------------------- */
-
-/* All Win32 headers depend on the huge windows.h recursive include.
- * Note: Lower-case header names are used, for best cross-platform
- * compatibility.
- */
-#if TARGET_HOST_MS_WINDOWS && !defined(_WIN32_WCE)
-#    include <windows.h>
-#    include <windowsx.h>
-#    include <mmsystem.h>
-/* CYGWIN does not have tchar.h, but has TEXT(x), defined in winnt.h. */
-#    ifndef __CYGWIN__
-#      include <tchar.h>
-#    else
-#      define _TEXT(x) TEXT(x)
-#      define _T(x)    TEXT(x)
-#    endif
-
-#elif TARGET_HOST_POSIX_X11
-#    include <GL/glx.h>
-#    include <X11/Xlib.h>
-#    include <X11/Xatom.h>
-#    include <X11/keysym.h>
-#    include <X11/extensions/XInput.h>
-#    ifdef HAVE_X11_EXTENSIONS_XF86VMODE_H
-#        include <X11/extensions/xf86vmode.h>
-#    endif
-#    ifdef HAVE_X11_EXTENSIONS_XRANDR_H
-#        include <X11/extensions/Xrandr.h>
-#    endif
-/* If GLX is too old, we will fail during runtime when multisampling
-   is requested, but at least freeglut compiles. */
-#    ifndef GLX_SAMPLE_BUFFERS
-#        define GLX_SAMPLE_BUFFERS 0x80A8
-#    endif
-#    ifndef GLX_SAMPLES
-#        define GLX_SAMPLES 0x80A9
-#    endif
-
-#endif
-
-/* These files should be available on every platform. */
-#include <stdio.h>
-#include <string.h>
-#include <math.h>
-#include <stdlib.h>
-#include <stdarg.h>
-
-/* These are included based on autoconf directives. */
-#ifdef HAVE_SYS_TYPES_H
-#    include <sys/types.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#    include <unistd.h>
-#endif
-#ifdef TIME_WITH_SYS_TIME
-#    include <sys/time.h>
-#    include <time.h>
-#elif defined(HAVE_SYS_TIME_H)
-#    include <sys/time.h>
-#else
-#    include <time.h>
-#endif
-
-/* -- AUTOCONF HACKS --------------------------------------------------------*/
-
-/* XXX: Update autoconf to avoid these.
- * XXX: Are non-POSIX platforms intended not to use autoconf?
- * If so, perhaps there should be a config_guess.h for them. Alternatively,
- * config guesses could be placed above, just after the config.h exclusion.
- */
-#if defined(__FreeBSD__) || defined(__NetBSD__)
-#    define HAVE_USB_JS 1
-#    if defined(__NetBSD__) || ( defined(__FreeBSD__) && __FreeBSD_version >= 500000)
-#        define HAVE_USBHID_H 1
-#    endif
-#endif
-
-#if TARGET_HOST_MS_WINDOWS
-#    define  HAVE_VFPRINTF 1
-#endif
-
-/* MinGW may lack a prototype for ChangeDisplaySettingsEx() (depending on the version?) */
-#if TARGET_HOST_MS_WINDOWS && !defined(ChangeDisplaySettingsEx)
-LONG WINAPI ChangeDisplaySettingsExA(LPCSTR,LPDEVMODEA,HWND,DWORD,LPVOID);
-LONG WINAPI ChangeDisplaySettingsExW(LPCWSTR,LPDEVMODEW,HWND,DWORD,LPVOID);
-#    ifdef UNICODE
-#        define ChangeDisplaySettingsEx ChangeDisplaySettingsExW
-#    else
-#        define ChangeDisplaySettingsEx ChangeDisplaySettingsExA
-#    endif
-#endif
-
-#if defined(_MSC_VER) || defined(__WATCOMC__)
-/* strdup() is non-standard, for all but POSIX-2001 */
-#define strdup   _strdup
-#endif
-
-/* M_PI is non-standard (defined by BSD, not ISO-C) */
-#ifndef M_PI
-#    define  M_PI  3.14159265358979323846
-#endif
-
-#ifdef HAVE_STDBOOL_H
-#    include <stdbool.h>
-#    ifndef TRUE
-#        define TRUE true
-#    endif
-#    ifndef FALSE
-#        define FALSE false
-#    endif
-#else
-#    ifndef TRUE
-#        define  TRUE  1
-#    endif
-#    ifndef FALSE
-#        define  FALSE  0
-#    endif
-#endif
-
-/* General defines */
-
-#define INVALID_MODIFIERS 0xffffffff
-
-/* -- GLOBAL TYPE DEFINITIONS ---------------------------------------------- */
-
-/* Freeglut callbacks type definitions */
-typedef void (* FGCBDisplay       )( void );
-typedef void (* FGCBReshape       )( int, int );
-typedef void (* FGCBVisibility    )( int );
-typedef void (* FGCBKeyboard      )( unsigned char, int, int );
-typedef void (* FGCBSpecial       )( int, int, int );
-typedef void (* FGCBMouse         )( int, int, int, int );
-typedef void (* FGCBMouseWheel    )( int, int, int, int );
-typedef void (* FGCBMotion        )( int, int );
-typedef void (* FGCBPassive       )( int, int );
-typedef void (* FGCBEntry         )( int );
-typedef void (* FGCBWindowStatus  )( int );
-typedef void (* FGCBSelect        )( int, int, int );
-typedef void (* FGCBJoystick      )( unsigned int, int, int, int );
-typedef void (* FGCBKeyboardUp    )( unsigned char, int, int );
-typedef void (* FGCBSpecialUp     )( int, int, int );
-typedef void (* FGCBOverlayDisplay)( void );
-typedef void (* FGCBSpaceMotion   )( int, int, int );
-typedef void (* FGCBSpaceRotation )( int, int, int );
-typedef void (* FGCBSpaceButton   )( int, int );
-typedef void (* FGCBDials         )( int, int );
-typedef void (* FGCBButtonBox     )( int, int );
-typedef void (* FGCBTabletMotion  )( int, int );
-typedef void (* FGCBTabletButton  )( int, int, int, int );
-typedef void (* FGCBDestroy       )( void );
-
-typedef void (* FGCBMultiEntry   )( int, int );
-typedef void (* FGCBMultiButton  )( int, int, int, int, int );
-typedef void (* FGCBMultiMotion  )( int, int, int );
-typedef void (* FGCBMultiPassive )( int, int, int );
-
-/* The global callbacks type definitions */
-typedef void (* FGCBIdle          )( void );
-typedef void (* FGCBTimer         )( int );
-typedef void (* FGCBMenuState     )( int );
-typedef void (* FGCBMenuStatus    )( int, int, int );
-
-/* The callback used when creating/using menus */
-typedef void (* FGCBMenu          )( int );
-
-/* The FreeGLUT error/warning handler type definition */
-typedef void (* FGError           ) ( const char *fmt, va_list ap);
-typedef void (* FGWarning         ) ( const char *fmt, va_list ap);
-
-
-/* A list structure */
-typedef struct tagSFG_List SFG_List;
-struct tagSFG_List
-{
-    void *First;
-    void *Last;
-};
-
-/* A list node structure */
-typedef struct tagSFG_Node SFG_Node;
-struct tagSFG_Node
-{
-    void *Next;
-    void *Prev;
-};
-
-/* A helper structure holding two ints and a boolean */
-typedef struct tagSFG_XYUse SFG_XYUse;
-struct tagSFG_XYUse
-{
-    GLint           X, Y;               /* The two integers...               */
-    GLboolean       Use;                /* ...and a single boolean.          */
-};
-
-/*
- * An enumeration containing the state of the GLUT execution:
- * initializing, running, or stopping
- */
-typedef enum
-{
-  GLUT_EXEC_STATE_INIT,
-  GLUT_EXEC_STATE_RUNNING,
-  GLUT_EXEC_STATE_STOP
-} fgExecutionState ;
-
-/* This structure holds different freeglut settings */
-typedef struct tagSFG_State SFG_State;
-struct tagSFG_State
-{
-    SFG_XYUse        Position;             /* The default windows' position  */
-    SFG_XYUse        Size;                 /* The default windows' size      */
-    unsigned int     DisplayMode;          /* Display mode for new windows   */
-
-    GLboolean        Initialised;          /* freeglut has been initialised  */
-
-    int              DirectContext;        /* Direct rendering state         */
-
-    GLboolean        ForceIconic;          /* New top windows are iconified  */
-    GLboolean        UseCurrentContext;    /* New windows share with current */
-
-    GLboolean        GLDebugSwitch;        /* OpenGL state debugging switch  */
-    GLboolean        XSyncSwitch;          /* X11 sync protocol switch       */
-
-    int              KeyRepeat;            /* Global key repeat mode.        */
-    int              Modifiers;            /* Current ALT/SHIFT/CTRL state   */
-
-    GLuint           FPSInterval;          /* Interval between FPS printfs   */
-    GLuint           SwapCount;            /* Count of glutSwapBuffer calls  */
-    GLuint           SwapTime;             /* Time of last SwapBuffers       */
-
-    unsigned long    Time;                 /* Time that glutInit was called  */
-    SFG_List         Timers;               /* The freeglut timer hooks       */
-    SFG_List         FreeTimers;           /* The unused timer hooks         */
-
-    FGCBIdle         IdleCallback;         /* The global idle callback       */
-
-    int              ActiveMenus;          /* Num. of currently active menus */
-    FGCBMenuState    MenuStateCallback;    /* Menu callbacks are global      */
-    FGCBMenuStatus   MenuStatusCallback;
-
-    SFG_XYUse        GameModeSize;         /* Game mode screen's dimensions  */
-    int              GameModeDepth;        /* The pixel depth for game mode  */
-    int              GameModeRefresh;      /* The refresh rate for game mode */
-
-    int              ActionOnWindowClose; /* Action when user closes window  */
-
-    fgExecutionState ExecState;           /* Used for GLUT termination       */
-    char            *ProgramName;         /* Name of the invoking program    */
-    GLboolean        JoysticksInitialised;  /* Only initialize if application calls for them */
-    int              NumActiveJoysticks;    /* Number of active joysticks -- if zero, don't poll joysticks */
-    GLboolean        InputDevsInitialised;  /* Only initialize if application calls for them */
-
-       int              MouseWheelTicks;      /* Number of ticks the mouse wheel has turned */
-
-    int              AuxiliaryBufferNumber;  /* Number of auxiliary buffers */
-    int              SampleNumber;         /*  Number of samples per pixel  */
-
-    int              MajorVersion;         /* Major OpenGL context version  */
-    int              MinorVersion;         /* Minor OpenGL context version  */
-    int              ContextFlags;         /* OpenGL context flags          */
-    int              ContextProfile;       /* OpenGL context profile        */
-    FGError          ErrorFunc;            /* User defined error handler    */
-    FGWarning        WarningFunc;          /* User defined warning handler  */
-};
-
-/* The structure used by display initialization in freeglut_init.c */
-typedef struct tagSFG_Display SFG_Display;
-struct tagSFG_Display
-{
-#if TARGET_HOST_POSIX_X11
-    Display*        Display;            /* The display we are being run in.  */
-    int             Screen;             /* The screen we are about to use.   */
-    Window          RootWindow;         /* The screen's root window.         */
-    int             Connection;         /* The display's connection number   */
-    Atom            DeleteWindow;       /* The window deletion atom          */
-    Atom            State;              /* The state atom                    */
-    Atom            StateFullScreen;    /* The full screen atom              */
-
-#ifdef HAVE_X11_EXTENSIONS_XRANDR_H
-    int prev_xsz, prev_ysz;
-    int prev_refresh;
-    int prev_size_valid;
-#endif /* HAVE_X11_EXTENSIONS_XRANDR_H */
-
-#ifdef HAVE_X11_EXTENSIONS_XF86VMODE_H
-    /*
-     * XF86VidMode may be compilable even if it fails at runtime.  Therefore,
-     * the validity of the VidMode has to be tracked
-     */
-    int             DisplayModeValid;   /* Flag that indicates runtime status*/
-    XF86VidModeModeLine DisplayMode;    /* Current screen's display settings */
-    int             DisplayModeClock;   /* The display mode's refresh rate   */
-    int             DisplayViewPortX;   /* saved X location of the viewport  */
-    int             DisplayViewPortY;   /* saved Y location of the viewport  */
-#endif /* HAVE_X11_EXTENSIONS_XF86VMODE_H */
-
-    int             DisplayPointerX;    /* saved X location of the pointer   */
-    int             DisplayPointerY;    /* saved Y location of the pointer   */
-
-#elif TARGET_HOST_MS_WINDOWS
-    HINSTANCE       Instance;           /* The application's instance        */
-    DEVMODE         DisplayMode;        /* Desktop's display settings        */
-    char           *DisplayName;        /* Display name for multi display support*/ 
-
-#endif
-
-    int             ScreenWidth;        /* The screen's width in pixels      */
-    int             ScreenHeight;       /* The screen's height in pixels     */
-    int             ScreenWidthMM;      /* The screen's width in milimeters  */
-    int             ScreenHeightMM;     /* The screen's height in milimeters */
-};
-
-
-/* The user can create any number of timer hooks */
-typedef struct tagSFG_Timer SFG_Timer;
-struct tagSFG_Timer
-{
-    SFG_Node        Node;
-    int             ID;                 /* The timer ID integer              */
-    FGCBTimer       Callback;           /* The timer callback                */
-    long            TriggerTime;        /* The timer trigger time            */
-};
-
-/*
- * Make "freeglut" window handle and context types so that we don't need so
- * much conditionally-compiled code later in the library.
- */
-#if TARGET_HOST_POSIX_X11
-
-typedef Window     SFG_WindowHandleType ;
-typedef GLXContext SFG_WindowContextType ;
-
-#elif TARGET_HOST_MS_WINDOWS
-
-typedef HWND    SFG_WindowHandleType ;
-typedef HGLRC   SFG_WindowContextType ;
-
-#endif
-
-/*
- * A window and its OpenGL context. The contents of this structure
- * are highly dependant on the target operating system we aim at...
- */
-typedef struct tagSFG_Context SFG_Context;
-struct tagSFG_Context
-{
-    SFG_WindowHandleType  Handle;    /* The window's handle                 */
-    SFG_WindowContextType Context;   /* The window's OpenGL/WGL context     */
-
-#if TARGET_HOST_POSIX_X11
-    GLXFBConfig*    FBConfig;        /* The window's FBConfig               */
-#elif TARGET_HOST_MS_WINDOWS
-    HDC             Device;          /* The window's device context         */
-#endif
-
-    int             DoubleBuffered;  /* Treat the window as double-buffered */
-};
-
-/* Window's state description. This structure should be kept portable. */
-typedef struct tagSFG_WindowState SFG_WindowState;
-struct tagSFG_WindowState
-{
-    /* Note that on Windows, sizes always refer to the client area, thus without the window decorations */
-    int             Width;              /* Window's width in pixels          */
-    int             Height;             /* The same about the height         */
-#if TARGET_HOST_POSIX_X11
-    int             OldWidth;           /* Window width from before a resize */
-    int             OldHeight;          /*   "    height  "    "    "   "    */
-#elif TARGET_HOST_MS_WINDOWS
-    RECT            OldRect;            /* window rect - stored before the window is made fullscreen */
-    DWORD           OldStyle;           /* window style - stored before the window is made fullscreen */
-#endif
-
-    GLboolean       Redisplay;          /* Do we have to redisplay?          */
-    GLboolean       Visible;            /* Is the window visible now         */
-
-    int             Cursor;             /* The currently selected cursor     */
-
-    long            JoystickPollRate;   /* The joystick polling rate         */
-    long            JoystickLastPoll;   /* When the last poll happened       */
-
-    int             MouseX, MouseY;     /* The most recent mouse position    */
-
-    GLboolean       IgnoreKeyRepeat;    /* Whether to ignore key repeat.     */
-    GLboolean       KeyRepeating;       /* Currently in repeat mode          */
-
-    GLboolean       NeedToResize;       /* Do we need to resize the window?  */
-
-    GLboolean       IsFullscreen;       /* is the window fullscreen? */
-};
-
-
-/*
- * A generic function pointer.  We should really use the GLUTproc type
- * defined in freeglut_ext.h, but if we include that header in this file
- * a bunch of other stuff (font-related) blows up!
- */
-typedef void (*SFG_Proc)();
-
-
-/*
- * SET_WCB() is used as:
- *
- *     SET_WCB( window, cbname, func );
- *
- * ...where {window} is the freeglut window to set the callback,
- *          {cbname} is the window-specific callback to set,
- *          {func} is a function-pointer.
- *
- * Originally, {FETCH_WCB( ... ) = func} was rather sloppily used,
- * but this can cause warnings because the FETCH_WCB() macro type-
- * casts its result, and a type-cast value shouldn't be an lvalue.
- *
- * The {if( FETCH_WCB( ... ) != func )} test is to do type-checking
- * and for no other reason.  Since it's hidden in the macro, the
- * ugliness is felt to be rather benign.
- */
-#define SET_WCB(window,cbname,func)                            \
-do                                                             \
-{                                                              \
-    if( FETCH_WCB( window, cbname ) != (SFG_Proc)(func) )      \
-        (((window).CallBacks[CB_ ## cbname]) = (SFG_Proc)(func)); \
-} while( 0 )
-
-/*
- * FETCH_WCB() is used as:
- *
- *     FETCH_WCB( window, cbname );
- *
- * ...where {window} is the freeglut window to fetch the callback from,
- *          {cbname} is the window-specific callback to fetch.
- *
- * The result is correctly type-cast to the callback function pointer
- * type.
- */
-#define FETCH_WCB(window,cbname) \
-    ((window).CallBacks[CB_ ## cbname])
-
-/*
- * INVOKE_WCB() is used as:
- *
- *     INVOKE_WCB( window, cbname, ( arg_list ) );
- *
- * ...where {window} is the freeglut window,
- *          {cbname} is the window-specific callback to be invoked,
- *          {(arg_list)} is the parameter list.
- *
- * The callback is invoked as:
- *
- *    callback( arg_list );
- *
- * ...so the parentheses are REQUIRED in the {arg_list}.
- *
- * NOTE that it does a sanity-check and also sets the
- * current window.
- *
- */
-#if TARGET_HOST_MS_WINDOWS && !defined(_WIN32_WCE) /* FIXME: also WinCE? */
-#define INVOKE_WCB(window,cbname,arg_list)    \
-do                                            \
-{                                             \
-    if( FETCH_WCB( window, cbname ) )         \
-    {                                         \
-        FGCB ## cbname func = (FGCB ## cbname)(FETCH_WCB( window, cbname )); \
-        fgSetWindow( &window );               \
-        func arg_list;                        \
-    }                                         \
-} while( 0 )
-#else
-#define INVOKE_WCB(window,cbname,arg_list)    \
-do                                            \
-{                                             \
-    if( FETCH_WCB( window, cbname ) )         \
-    {                                         \
-        fgSetWindow( &window );               \
-        ((FGCB ## cbname)FETCH_WCB( window, cbname )) arg_list; \
-    }                                         \
-} while( 0 )
-#endif
-
-/*
- * The window callbacks the user can supply us with. Should be kept portable.
- *
- * This enumeration provides the freeglut CallBack numbers.
- * The symbolic constants are indices into a window's array of
- * function callbacks.  The names are formed by splicing a common
- * prefix onto the callback's base name.  (This was originally
- * done so that an early stage of development could live side-by-
- * side with the old callback code.  The old callback code used
- * the bare callback's name as a structure member, so I used a
- * prefix for the array index name.)
- *
- * XXX For consistancy, perhaps the prefix should match the
- * XXX FETCH* and INVOKE* macro suffices.  I.e., WCB_, rather than
- * XXX CB_.
- */
-enum
-{
-    CB_Display,
-    CB_Reshape,
-    CB_Keyboard,
-    CB_KeyboardUp,
-    CB_Special,
-    CB_SpecialUp,
-    CB_Mouse,
-    CB_MouseWheel,
-    CB_Motion,
-    CB_Passive,
-    CB_Entry,
-    CB_Visibility,
-    CB_WindowStatus,
-    CB_Joystick,
-    CB_Destroy,
-
-    /* MPX-related */
-    CB_MultiEntry,
-    CB_MultiButton,
-    CB_MultiMotion,
-    CB_MultiPassive,
-
-    /* Presently ignored */
-    CB_Select,
-    CB_OverlayDisplay,
-    CB_SpaceMotion,     /* presently implemented only on UNIX/X11 */
-    CB_SpaceRotation,   /* presently implemented only on UNIX/X11 */
-    CB_SpaceButton,     /* presently implemented only on UNIX/X11 */
-    CB_Dials,
-    CB_ButtonBox,
-    CB_TabletMotion,
-    CB_TabletButton,
-
-    /* Always make this the LAST one */
-    TOTAL_CALLBACKS
-};
-
-
-/* This structure holds the OpenGL rendering context for all the menu windows */
-typedef struct tagSFG_MenuContext SFG_MenuContext;
-struct tagSFG_MenuContext
-{
-    SFG_WindowContextType MContext;       /* The menu window's WGL context   */
-};
-
-/* This structure describes a menu */
-typedef struct tagSFG_Window SFG_Window;
-typedef struct tagSFG_MenuEntry SFG_MenuEntry;
-typedef struct tagSFG_Menu SFG_Menu;
-struct tagSFG_Menu
-{
-    SFG_Node            Node;
-    void               *UserData;     /* User data passed back at callback   */
-    int                 ID;           /* The global menu ID                  */
-    SFG_List            Entries;      /* The menu entries list               */
-    FGCBMenu            Callback;     /* The menu callback                   */
-    FGCBDestroy         Destroy;      /* Destruction callback                */
-    GLboolean           IsActive;     /* Is the menu selected?               */
-    int                 Width;        /* Menu box width in pixels            */
-    int                 Height;       /* Menu box height in pixels           */
-    int                 X, Y;         /* Menu box raster position            */
-
-    SFG_MenuEntry      *ActiveEntry;  /* Currently active entry in the menu  */
-    SFG_Window         *Window;       /* Window for menu                     */
-    SFG_Window         *ParentWindow; /* Window in which the menu is invoked */
-};
-
-/* This is a menu entry */
-struct tagSFG_MenuEntry
-{
-    SFG_Node            Node;
-    int                 ID;                     /* The menu entry ID (local) */
-    int                 Ordinal;                /* The menu's ordinal number */
-    char*               Text;                   /* The text to be displayed  */
-    SFG_Menu*           SubMenu;                /* Optional sub-menu tree    */
-    GLboolean           IsActive;               /* Is the entry highlighted? */
-    int                 Width;                  /* Label's width in pixels   */
-};
-
-/*
- * A window, making part of freeglut windows hierarchy.
- * Should be kept portable.
- *
- * NOTE that ActiveMenu is set to menu itself if the window is a menu.
- */
-struct tagSFG_Window
-{
-    SFG_Node            Node;
-    int                 ID;                     /* Window's ID number        */
-
-    SFG_Context         Window;                 /* Window and OpenGL context */
-    SFG_WindowState     State;                  /* The window state          */
-    SFG_Proc            CallBacks[ TOTAL_CALLBACKS ]; /* Array of window callbacks */
-    void               *UserData ;              /* For use by user           */
-
-    SFG_Menu*       Menu[ FREEGLUT_MAX_MENUS ]; /* Menus appended to window  */
-    SFG_Menu*       ActiveMenu;                 /* The window's active menu  */
-
-    SFG_Window*         Parent;                 /* The parent to this window */
-    SFG_List            Children;               /* The subwindows d.l. list  */
-
-    GLboolean           IsMenu;                 /* Set to 1 if we are a menu */
-};
-
-
-/* A linked list structure of windows */
-typedef struct tagSFG_WindowList SFG_WindowList ;
-struct tagSFG_WindowList
-{
-    SFG_Node node;
-    SFG_Window *window ;
-};
-
-/* This holds information about all the windows, menus etc. */
-typedef struct tagSFG_Structure SFG_Structure;
-struct tagSFG_Structure
-{
-    SFG_List        Windows;         /* The global windows list            */
-    SFG_List        Menus;           /* The global menus list              */
-    SFG_List        WindowsToDestroy;
-
-    SFG_Window*     CurrentWindow;   /* The currently set window          */
-    SFG_Menu*       CurrentMenu;     /* Same, but menu...                 */
-
-    SFG_MenuContext* MenuContext;    /* OpenGL rendering context for menus */
-
-    SFG_Window*      GameModeWindow; /* The game mode window               */
-
-    int              WindowID;       /* The new current window ID          */
-    int              MenuID;         /* The new current menu ID            */
-};
-
-/*
- * This structure is used for the enumeration purposes.
- * You can easily extend its functionalities by declaring
- * a structure containing enumerator's contents and custom
- * data, then casting its pointer to (SFG_Enumerator *).
- */
-typedef struct tagSFG_Enumerator SFG_Enumerator;
-struct tagSFG_Enumerator
-{
-    GLboolean   found;                          /* Used to terminate search  */
-    void*       data;                           /* Custom data pointer       */
-};
-typedef void (* FGCBenumerator  )( SFG_Window *, SFG_Enumerator * );
-
-/* The bitmap font structure */
-typedef struct tagSFG_Font SFG_Font;
-struct tagSFG_Font
-{
-    char*           Name;         /* The source font name             */
-    int             Quantity;     /* Number of chars in font          */
-    int             Height;       /* Height of the characters         */
-    const GLubyte** Characters;   /* The characters mapping           */
-
-    float           xorig, yorig; /* Relative origin of the character */
-};
-
-/* The stroke font structures */
-
-typedef struct tagSFG_StrokeVertex SFG_StrokeVertex;
-struct tagSFG_StrokeVertex
-{
-    GLfloat         X, Y;
-};
-
-typedef struct tagSFG_StrokeStrip SFG_StrokeStrip;
-struct tagSFG_StrokeStrip
-{
-    int             Number;
-    const SFG_StrokeVertex* Vertices;
-};
-
-typedef struct tagSFG_StrokeChar SFG_StrokeChar;
-struct tagSFG_StrokeChar
-{
-    GLfloat         Right;
-    int             Number;
-    const SFG_StrokeStrip* Strips;
-};
-
-typedef struct tagSFG_StrokeFont SFG_StrokeFont;
-struct tagSFG_StrokeFont
-{
-    char*           Name;                       /* The source font name      */
-    int             Quantity;                   /* Number of chars in font   */
-    GLfloat         Height;                     /* Height of the characters  */
-    const SFG_StrokeChar** Characters;          /* The characters mapping    */
-};
-
-/* -- GLOBAL VARIABLES EXPORTS --------------------------------------------- */
-
-/* Freeglut display related stuff (initialized once per session) */
-extern SFG_Display fgDisplay;
-
-/* Freeglut internal structure */
-extern SFG_Structure fgStructure;
-
-/* The current freeglut settings */
-extern SFG_State fgState;
-
-
-/* -- PRIVATE FUNCTION DECLARATIONS ---------------------------------------- */
-
-/*
- * A call to this function makes us sure that the Display and Structure
- * subsystems have been properly initialized and are ready to be used
- */
-#define  FREEGLUT_EXIT_IF_NOT_INITIALISED( string )               \
-  if ( ! fgState.Initialised )                                    \
-  {                                                               \
-    fgError ( " ERROR:  Function <%s> called"                     \
-              " without first calling 'glutInit'.", (string) ) ;  \
-  }
-
-#define  FREEGLUT_INTERNAL_ERROR_EXIT_IF_NOT_INITIALISED( string )  \
-  if ( ! fgState.Initialised )                                      \
-  {                                                                 \
-    fgError ( " ERROR:  Internal <%s> function called"              \
-              " without first calling 'glutInit'.", (string) ) ;    \
-  }
-
-#define  FREEGLUT_INTERNAL_ERROR_EXIT( cond, string, function )  \
-  if ( ! ( cond ) )                                              \
-  {                                                              \
-    fgError ( " ERROR:  Internal error <%s> in function %s",     \
-              (string), (function) ) ;                           \
-  }
-
-/*
- * Following definitions are somewhat similiar to GLib's,
- * but do not generate any log messages:
- */
-#define  freeglut_return_if_fail( expr ) \
-    if( !(expr) )                        \
-        return;
-#define  freeglut_return_val_if_fail( expr, val ) \
-    if( !(expr) )                                 \
-        return val ;
-
-/*
- * A call to those macros assures us that there is a current
- * window set, respectively:
- */
-#define  FREEGLUT_EXIT_IF_NO_WINDOW( string )                               \
-  if ( ! fgStructure.CurrentWindow &&                                       \
-       ( fgState.ActionOnWindowClose != GLUT_ACTION_CONTINUE_EXECUTION ) )  \
-  {                                                                         \
-    fgError ( " ERROR:  Function <%s> called"                               \
-              " with no current window defined.", (string) ) ;              \
-  }
-
-/*
- * The deinitialize function gets called on glutMainLoop() end. It should clean up
- * everything inside of the freeglut
- */
-void fgDeinitialize( void );
-
-/*
- * Those two functions are used to create/destroy the freeglut internal
- * structures. This actually happens when calling glutInit() and when
- * quitting the glutMainLoop() (which actually happens, when all windows
- * have been closed).
- */
-void fgCreateStructure( void );
-void fgDestroyStructure( void );
-
-/* A helper function to check if a display mode is possible to use */
-#if TARGET_HOST_POSIX_X11
-GLXFBConfig* fgChooseFBConfig( int* numcfgs );
-#endif
-
-/* The window procedure for Win32 events handling */
-#if TARGET_HOST_MS_WINDOWS
-LRESULT CALLBACK fgWindowProc( HWND hWnd, UINT uMsg,
-                               WPARAM wParam, LPARAM lParam );
-void fgNewWGLCreateContext( SFG_Window* window );
-GLboolean fgSetupPixelFormat( SFG_Window* window, GLboolean checkOnly,
-                              unsigned char layer_type );
-#endif
-
-/*
- * Window creation, opening, closing and destruction.
- * Also CallBack clearing/initialization.
- * Defined in freeglut_structure.c, freeglut_window.c.
- */
-SFG_Window* fgCreateWindow( SFG_Window* parent, const char* title,
-                            GLboolean positionUse, int x, int y,
-                            GLboolean sizeUse, int w, int h,
-                            GLboolean gameMode, GLboolean isMenu );
-void        fgSetWindow ( SFG_Window *window );
-void        fgOpenWindow( SFG_Window* window, const char* title,
-                          GLboolean positionUse, int x, int y,
-                          GLboolean sizeUse, int w, int h,
-                          GLboolean gameMode, GLboolean isSubWindow );
-void        fgCloseWindow( SFG_Window* window );
-void        fgAddToWindowDestroyList ( SFG_Window* window );
-void        fgCloseWindows ();
-void        fgDestroyWindow( SFG_Window* window );
-
-/* Menu creation and destruction. Defined in freeglut_structure.c */
-SFG_Menu*   fgCreateMenu( FGCBMenu menuCallback );
-void        fgDestroyMenu( SFG_Menu* menu );
-
-/* Joystick device management functions, defined in freeglut_joystick.c */
-int         fgJoystickDetect( void );
-void        fgInitialiseJoysticks( void );
-void        fgJoystickClose( void );
-void        fgJoystickPollWindow( SFG_Window* window );
-
-/* InputDevice Initialisation and Closure */
-int         fgInputDeviceDetect( void );
-void        fgInitialiseInputDevices( void );
-void        fgInputDeviceClose( void );
-
-/* spaceball device functions, defined in freeglut_spaceball.c */
-void        fgInitialiseSpaceball( void );
-void        fgSpaceballClose( void );
-void        fgSpaceballSetWindow( SFG_Window *window );
-
-int         fgHasSpaceball( void );
-int         fgSpaceballNumButtons( void );
-
-#if TARGET_HOST_POSIX_X11
-int         fgIsSpaceballXEvent( const XEvent *ev );
-void        fgSpaceballHandleXEvent( const XEvent *ev );
-#endif
-
-/* Setting the cursor for a given window */
-void fgSetCursor ( SFG_Window *window, int cursorID );
-
-/*
- * Helper function to enumerate through all registered windows
- * and one to enumerate all of a window's subwindows...
- *
- * The GFunc callback for those functions will be defined as:
- *
- *      void enumCallback( gpointer window, gpointer enumerator );
- *
- * where window is the enumerated (sub)window pointer (SFG_Window *),
- * and userData is the a custom user-supplied pointer. Functions
- * are defined and exported from freeglut_structure.c file.
- */
-void fgEnumWindows( FGCBenumerator enumCallback, SFG_Enumerator* enumerator );
-void fgEnumSubWindows( SFG_Window* window, FGCBenumerator enumCallback,
-                       SFG_Enumerator* enumerator );
-
-#if TARGET_HOST_MS_WINDOWS
-/* 
- * Helper functions for getting client area from the window rect
- * and the window rect from the client area given the style of the window
- * (or a valid window pointer from which the style can be queried).
- */
-void fghComputeWindowRectFromClientArea_UseStyle   ( const DWORD windowStyle , RECT *clientRect, BOOL posIsOutside );
-void fghComputeWindowRectFromClientArea_QueryWindow( const SFG_Window *window, RECT *clientRect, BOOL posIsOutside );
-void fghComputeClientAreaFromWindowRect            ( const SFG_Window *window, RECT *windowRect, BOOL wantPosOutside );
-RECT fghGetClientArea                              ( const SFG_Window *window,                   BOOL wantPosOutside );
-void fghGetBorderWidth(const DWORD windowStyle, int* xBorderWidth, int* yBorderWidth);
-#endif
-
-/*
- * fgWindowByHandle returns a (SFG_Window *) value pointing to the
- * first window in the queue matching the specified window handle.
- * The function is defined in freeglut_structure.c file.
- */
-SFG_Window* fgWindowByHandle( SFG_WindowHandleType hWindow );
-
-/*
- * This function is similiar to the previous one, except it is
- * looking for a specified (sub)window identifier. The function
- * is defined in freeglut_structure.c file.
- */
-SFG_Window* fgWindowByID( int windowID );
-
-/*
- * Looks up a menu given its ID. This is easier than fgWindowByXXX
- * as all menus are placed in a single doubly linked list...
- */
-SFG_Menu* fgMenuByID( int menuID );
-
-/*
- * The menu activation and deactivation the code. This is the meat
- * of the menu user interface handling code...
- */
-void fgUpdateMenuHighlight ( SFG_Menu *menu );
-GLboolean fgCheckActiveMenu ( SFG_Window *window, int button, GLboolean pressed,
-                              int mouse_x, int mouse_y );
-void fgDeactivateMenu( SFG_Window *window );
-
-/*
- * This function gets called just before the buffers swap, so that
- * freeglut can display the pull-down menus via OpenGL. The function
- * is defined in freeglut_menu.c file.
- */
-void fgDisplayMenu( void );
-
-/* Elapsed time as per glutGet(GLUT_ELAPSED_TIME). */
-long fgElapsedTime( void );
-
-/* System time in milliseconds */
-long unsigned fgSystemTime(void);
-
-/* List functions */
-void fgListInit(SFG_List *list);
-void fgListAppend(SFG_List *list, SFG_Node *node);
-void fgListRemove(SFG_List *list, SFG_Node *node);
-int fgListLength(SFG_List *list);
-void fgListInsert(SFG_List *list, SFG_Node *next, SFG_Node *node);
-
-/* Error Message functions */
-void fgError( const char *fmt, ... );
-void fgWarning( const char *fmt, ... );
-
-/*
- * Check if "hint" is present in "property" for "window".  See freeglut_init.c
- */
-#if TARGET_HOST_POSIX_X11
-int fgHintPresent(Window window, Atom property, Atom hint);
-
-/* Handler for X extension Events */
-#ifdef HAVE_X11_EXTENSIONS_XINPUT2_H
-  void fgHandleExtensionEvents( XEvent * ev );
-  void fgRegisterDevices( Display* dpy, Window* win );
-#endif
-
-#endif
-
-SFG_Proc fghGetProcAddress( const char *procName );
-
-#if TARGET_HOST_MS_WINDOWS
-extern void (__cdecl *__glutExitFunc)( int return_value );
-#endif
-
-#endif /* FREEGLUT_INTERNAL_H */
-
-/*** END OF FILE ***/
diff --git a/src/freeglut_joystick.c b/src/freeglut_joystick.c
deleted file mode 100644 (file)
index f48dc3f..0000000
+++ /dev/null
@@ -1,1800 +0,0 @@
-/*
- * freeglut_joystick.c
- *
- * Joystick handling code
- *
- * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.
- * Written by Steve Baker, <sjbaker1@airmail.net>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/*
- * FreeBSD port by Stephen Montgomery-Smith <stephen@math.missouri.edu>
- *
- * Redone by John Fay 2/4/04 with another look from the PLIB "js" library.
- *  Many thanks for Steve Baker for permission to pull from that library.
- */
-
-#include <GL/freeglut.h>
-#include "freeglut_internal.h"
-#ifdef HAVE_SYS_PARAM_H
-#    include <sys/param.h>
-#endif
-
-/*
- * Initial defines from "js.h" starting around line 33 with the existing "freeglut_joystick.c"
- * interspersed
- */
-
-/* XXX It might be better to poll the operating system for the numbers of buttons and
- * XXX axes and then dynamically allocate the arrays.
- */
-#define _JS_MAX_BUTTONS 32
-
-#if TARGET_HOST_MACINTOSH
-#    define _JS_MAX_AXES  9
-#    include <InputSprocket.h>
-#endif
-
-#if TARGET_HOST_MAC_OSX
-#    define _JS_MAX_AXES 16
-#    include <mach/mach.h>
-#    include <IOKit/IOkitLib.h>
-#    include <IOKit/hid/IOHIDLib.h>
-#endif
-
-#if TARGET_HOST_MS_WINDOWS && !defined(_WIN32_WCE)
-#    define _JS_MAX_AXES  8
-#    include <windows.h>
-#    include <mmsystem.h>
-#    include <regstr.h>
-
-#endif
-
-#if TARGET_HOST_POSIX_X11
-#    define _JS_MAX_AXES 16
-#    ifdef HAVE_SYS_IOCTL_H
-#        include <sys/ioctl.h>
-#    endif
-#    ifdef HAVE_FCNTL_H
-#        include <fcntl.h>
-#    endif
-#    ifdef HAVE_ERRNO_H
-#        include <errno.h>
-#        include <string.h>
-#    endif
-#    if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__)
-/* XXX The below hack is done until freeglut's autoconf is updated. */
-#        define HAVE_USB_JS    1
-
-#        if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
-#            include <sys/joystick.h>
-#        else
-/*
- * XXX NetBSD/amd64 systems may find that they have to steal the
- * XXX /usr/include/machine/joystick.h from a NetBSD/i386 system.
- * XXX I cannot comment whether that works for the interface, but
- * XXX it lets you compile...(^&  I do not think that we can do away
- * XXX with this header.
- */
-#            include <machine/joystick.h>         /* For analog joysticks */
-#        endif
-#        define JS_DATA_TYPE joystick
-#        define JS_RETURN (sizeof(struct JS_DATA_TYPE))
-#    endif
-
-#    if defined(__linux__)
-#        include <linux/joystick.h>
-
-/* check the joystick driver version */
-#        if defined(JS_VERSION) && JS_VERSION >= 0x010000
-#            define JS_NEW
-#        endif
-#    else  /* Not BSD or Linux */
-#        ifndef JS_RETURN
-
-  /*
-   * We'll put these values in and that should
-   * allow the code to at least compile when there is
-   * no support. The JS open routine should error out
-   * and shut off all the code downstream anyway and if
-   * the application doesn't use a joystick we'll be fine.
-   */
-
-  struct JS_DATA_TYPE
-  {
-    int buttons;
-    int x;
-    int y;
-  };
-
-#            define JS_RETURN (sizeof(struct JS_DATA_TYPE))
-#        endif
-#    endif
-#endif
-
-#define JS_TRUE  1
-#define JS_FALSE 0
-
-/* BSD defines from "jsBSD.cxx" around lines 42-270 */
-
-#if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
-
-#    ifdef HAVE_USB_JS
-#        if defined(__NetBSD__)
-/* XXX The below hack is done until freeglut's autoconf is updated. */
-#            define HAVE_USBHID_H 1
-#            ifdef HAVE_USBHID_H
-#                include <usbhid.h>
-#            else
-#                include <usb.h>
-#            endif
-#        elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
-#            ifdef HAVE_USBHID_H
-#                include <usbhid.h>
-#            else
-#                include <libusbhid.h>
-#            endif
-#        endif
-#        include <legacy/dev/usb/usb.h>
-#        include <dev/usb/usbhid.h>
-
-/* Compatibility with older usb.h revisions */
-#        if !defined(USB_MAX_DEVNAMES) && defined(MAXDEVNAMES)
-#            define USB_MAX_DEVNAMES MAXDEVNAMES
-#        endif
-#    endif
-
-static int hatmap_x[9] = { 0, 0, 1, 1, 1, 0, -1, -1, -1 };
-static int hatmap_y[9] = { 0, 1, 1, 0, -1, -1, -1, 0, 1 };
-struct os_specific_s {
-  char             fname [128 ];
-  int              fd;
-  int              is_analog;
-  /* The following structure members are specific to analog joysticks */
-  struct joystick  ajs;
-#    ifdef HAVE_USB_JS
-  /* The following structure members are specific to USB joysticks */
-  struct hid_item *hids;
-  int              hid_dlen;
-  int              hid_offset;
-  char            *hid_data_buf;
-  int              axes_usage [ _JS_MAX_AXES ];
-#    endif
-  /* We keep button and axes state ourselves, as they might not be updated
-   * on every read of a USB device
-   */
-  int              cache_buttons;
-  float            cache_axes [ _JS_MAX_AXES ];
-};
-
-/* Idents lower than USB_IDENT_OFFSET are for analog joysticks. */
-#    define USB_IDENT_OFFSET    2
-
-#    define USBDEV "/dev/usb"
-#    define UHIDDEV "/dev/uhid"
-#    define AJSDEV "/dev/joy"
-
-#    ifdef HAVE_USB_JS
-/*
- * fghJoystickFindUSBdev (and its helper, fghJoystickWalkUSBdev) try to locate
- * the full name of a USB device. If /dev/usbN isn't readable, we punt and
- * return the uhidN device name. We warn the user of this situation once.
- */
-static char *fghJoystickWalkUSBdev(int f, char *dev, char *out, int outlen)
-{
-  struct usb_device_info di;
-  int i, a;
-  char *cp;
-
-  for (a = 1; a < USB_MAX_DEVICES; a++) {
-    di.udi_addr = a;
-    if (ioctl(f, USB_DEVICEINFO, &di) != 0)
-      return NULL;
-    for (i = 0; i < USB_MAX_DEVNAMES; i++)
-      if (di.udi_devnames[i][0] &&
-          strcmp(di.udi_devnames[i], dev) == 0) {
-        cp =  calloc( 1, strlen(di.udi_vendor) + strlen(di.udi_product) + 2);
-        strcpy(cp, di.udi_vendor);
-        strcat(cp, " ");
-        strcat(cp, di.udi_product);
-        strncpy(out, cp, outlen - 1);
-        out[outlen - 1] = 0;
-        free( cp );
-        return out;
-      }
-  }
-  return NULL;
-}
-
-static int fghJoystickFindUSBdev(char *name, char *out, int outlen)
-{
-  int i, f;
-  char buf[50];
-  char *cp;
-  static int protection_warned = 0;
-
-  for (i = 0; i < 16; i++) {
-    snprintf(buf, sizeof(buf), "%s%d", USBDEV, i);
-    f = open(buf, O_RDONLY);
-    if (f >= 0) {
-      cp = fghJoystickWalkUSBdev(f, name, out, outlen);
-      close(f);
-      if (cp)
-        return 1;
-    }
-#ifdef HAVE_ERRNO_H
-    else if (errno == EACCES) {
-      if (!protection_warned) {
-        fgWarning ( "Can't open %s for read!", buf );
-        protection_warned = 1;
-      }
-    }
-#endif
-  }
-  return 0;
-}
-
-static int fghJoystickInitializeHID(struct os_specific_s *os,
-       int *num_axes, int *num_buttons)
-{
-    int size, is_joystick;
-#   ifdef HAVE_USBHID_H
-        int report_id = 0;
-#   endif
-    struct hid_data *d;
-    struct hid_item h;
-    report_desc_t rd;
-
-    if ( ( rd = hid_get_report_desc( os->fd ) ) == 0 )
-    {
-#ifdef HAVE_ERRNO_H
-        fgWarning ( "error: %s: %s", os->fname, strerror( errno ) );
-#else
-        fgWarning ( "error: %s", os->fname );
-#endif
-        return FALSE;
-    }
-
-    os->hids = NULL;
-
-#   ifdef HAVE_USBHID_H
-        if( ioctl( os->fd, USB_GET_REPORT_ID, &report_id ) < 0)
-        {
-            /*** XXX {report_id} may not be the right variable? ***/
-#ifdef HAVE_ERRNO_H
-            fgWarning ( "error: %s%d: %s", UHIDDEV, report_id, strerror( errno ) );
-#else
-            fgWarning ( "error: %s%d", UHIDDEV, report_id );
-#endif
-            return FALSE;
-        }
-
-        size = hid_report_size( rd, hid_input, report_id );
-#   else
-        size = hid_report_size( rd, 0, hid_input );
-#   endif
-    os->hid_data_buf = calloc( 1, size );
-    os->hid_dlen = size;
-
-    is_joystick = 0;
-#   ifdef HAVE_USBHID_H
-        d = hid_start_parse( rd, 1 << hid_input, report_id );
-#   else
-        d = hid_start_parse( rd, 1 << hid_input );
-#   endif
-        while( hid_get_item( d, &h ) )
-        {
-            int usage, page, interesting_hid;
-
-            page = HID_PAGE( h.usage );
-            usage = HID_USAGE( h.usage );
-
-            /* This test is somewhat too simplistic, but this is how MicroSoft
-             * does, so I guess it works for all joysticks/game pads. */
-            is_joystick = is_joystick ||
-                ( h.kind == hid_collection &&
-                  page == HUP_GENERIC_DESKTOP &&
-                  ( usage == HUG_JOYSTICK || usage == HUG_GAME_PAD ) );
-
-            if( h.kind != hid_input )
-                continue;
-
-            if( !is_joystick )
-                continue;
-
-            interesting_hid = TRUE;
-            if( page == HUP_GENERIC_DESKTOP )
-            {
-                switch( usage )
-                {
-                case HUG_X:
-                case HUG_RX:
-                case HUG_Y:
-                case HUG_RY:
-                case HUG_Z:
-                case HUG_RZ:
-                case HUG_SLIDER:
-                    if( *num_axes < _JS_MAX_AXES )
-                    {
-                        os->axes_usage[ *num_axes ] = usage;
-                        ( *num_axes )++;
-                    }
-                    break;
-                case HUG_HAT_SWITCH:
-                    /* Allocate two axes for a hat */
-                    if( *num_axes + 1 < _JS_MAX_AXES )
-                    {
-                        os->axes_usage[ *num_axes ] = usage;
-                        (*num_axes)++;
-                        os->axes_usage[ *num_axes ] = usage;
-                        (*num_axes)++;
-                    }
-                    break;
-                default:
-                    interesting_hid = FALSE;
-                    break;
-                }
-            }
-            else if( page == HUP_BUTTON )
-            {
-                interesting_hid = ( usage > 0 ) &&
-                    ( usage <= _JS_MAX_BUTTONS );
-
-                if( interesting_hid && usage - 1 > *num_buttons )
-                    *num_buttons = usage - 1;
-            }
-
-            if( interesting_hid )
-            {
-                h.next = os->hids;
-                os->hids = calloc( 1, sizeof ( struct hid_item ) );
-                *os->hids = h;
-            }
-        }
-        hid_end_parse( d );
-
-        return os->hids != NULL;
-}
-#    endif
-#endif
-
-/*
- * Definition of "SFG_Joystick" structure -- based on JS's "jsJoystick" object class.
- * See "js.h" lines 80-178.
- */
-typedef struct tagSFG_Joystick SFG_Joystick;
-struct tagSFG_Joystick
-{
-#if TARGET_HOST_MACINTOSH
-#define  ISP_NUM_AXIS    9
-#define  ISP_NUM_NEEDS  41
-    ISpElementReference isp_elem  [ ISP_NUM_NEEDS ];
-    ISpNeed             isp_needs [ ISP_NUM_NEEDS ];
-#endif
-
-#if TARGET_HOST_MAC_OSX
-    IOHIDDeviceInterface ** hidDev;
-    IOHIDElementCookie buttonCookies[41];
-    IOHIDElementCookie axisCookies[_JS_MAX_AXES];
-    long minReport[_JS_MAX_AXES],
-         maxReport[_JS_MAX_AXES];
-#endif
-
-#if TARGET_HOST_MS_WINDOWS && !defined(_WIN32_WCE)
-    JOYCAPS     jsCaps;
-    JOYINFOEX   js;
-    UINT        js_id;
-#endif
-
-
-#if TARGET_HOST_POSIX_X11
-#   if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__)
-       struct os_specific_s *os;
-#   endif
-
-#   ifdef JS_NEW
-       struct js_event     js;
-       int          tmp_buttons;
-       float        tmp_axes [ _JS_MAX_AXES ];
-#   else
-       struct JS_DATA_TYPE js;
-#   endif
-
-    char         fname [ 128 ];
-    int          fd;
-#endif
-
-    int          id;
-    GLboolean    error;
-    char         name [ 128 ];
-    int          num_axes;
-    int          num_buttons;
-
-    float dead_band[ _JS_MAX_AXES ];
-    float saturate [ _JS_MAX_AXES ];
-    float center   [ _JS_MAX_AXES ];
-    float max      [ _JS_MAX_AXES ];
-    float min      [ _JS_MAX_AXES ];
-};
-
-/*
- * Functions associated with the "jsJoystick" class in PLIB
- */
-#if TARGET_HOST_MAC_OSX
-#define K_NUM_DEVICES   32
-int numDevices;
-io_object_t ioDevices[K_NUM_DEVICES];
-
-static void fghJoystickFindDevices ( SFG_Joystick* joy, mach_port_t );
-static CFDictionaryRef fghJoystickGetCFProperties ( SFG_Joystick* joy, io_object_t );
-
-static void fghJoystickEnumerateElements ( SFG_Joystick* joy, CFTypeRef element );
-/* callback for CFArrayApply */
-static void fghJoystickElementEnumerator ( SFG_Joystick* joy, void *element, void* vjs );
-
-static void fghJoystickAddAxisElement ( SFG_Joystick* joy, CFDictionaryRef axis );
-static void fghJoystickAddButtonElement ( SFG_Joystick* joy, CFDictionaryRef button );
-static void fghJoystickAddHatElement ( SFG_Joystick* joy, CFDictionaryRef hat );
-#endif
-
-
-/*
- * The static joystick structure pointer
- */
-#define MAX_NUM_JOYSTICKS  2
-static SFG_Joystick *fgJoystick [ MAX_NUM_JOYSTICKS ];
-
-
-/*
- * Read the raw joystick data
- */
-static void fghJoystickRawRead( SFG_Joystick* joy, int* buttons, float* axes )
-{
-#if TARGET_HOST_MS_WINDOWS && !defined(_WIN32_WCE)
-    MMRESULT status;
-#else
-    int status;
-#endif
-
-#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__)
-    int len;
-#endif
-
-    int i;
-
-    /* Defaults */
-    if( buttons )
-        *buttons = 0;
-
-    if( axes )
-        for( i = 0; i < joy->num_axes; i++ )
-            axes[ i ] = 1500.0f;
-
-    if( joy->error )
-        return;
-
-#if TARGET_HOST_MACINTOSH
-    if ( buttons )
-    {
-        *buttons = 0;
-
-        for ( i = 0; i < joy->num_buttons; i++ )
-        {
-            UInt32 state;
-            int err = ISpElement_GetSimpleState ( isp_elem [ i + isp_num_axis ], &state);
-            ISP_CHECK_ERR(err)
-
-            *buttons |= state << i;
-        }
-    }
-
-    if ( axes )
-    {
-        for ( i = 0; i < joy->num_axes; i++ )
-        {
-            UInt32 state;
-            int err = ISpElement_GetSimpleState ( isp_elem [ i ], &state );
-            ISP_CHECK_ERR(err)
-
-            axes [i] = (float) state;
-        }
-    }
-#endif
-
-#if TARGET_HOST_MAC_OSX
-    if ( buttons != NULL )
-    {
-        *buttons = 0;
-
-        for ( i = 0; i < joy->num_buttons; i++ )
-        {
-            IOHIDEventStruct hidEvent;
-            (*(joy->hidDev))->getElementValue ( joy->hidDev, buttonCookies[i], &hidEvent );
-            if ( hidEvent.value )
-                *buttons |= 1 << i;
-        }
-    }
-
-    if ( axes != NULL )
-    {
-        for ( i = 0; i < joy->num_axes; i++ )
-        {
-            IOHIDEventStruct hidEvent;
-            (*(joy->hidDev))->getElementValue ( joy->hidDev, axisCookies[i], &hidEvent );
-            axes[i] = hidEvent.value;
-        }
-    }
-#endif
-
-#if TARGET_HOST_MS_WINDOWS && !defined(_WIN32_WCE)
-    status = joyGetPosEx( joy->js_id, &joy->js );
-
-    if ( status != JOYERR_NOERROR )
-    {
-        joy->error = GL_TRUE;
-        return;
-    }
-
-    if ( buttons )
-        *buttons = joy->js.dwButtons;
-
-    if ( axes )
-    {
-        /*
-         * WARNING - Fall through case clauses!!
-         */
-        switch ( joy->num_axes )
-        {
-        case 8:
-            /* Generate two POV axes from the POV hat angle.
-             * Low 16 bits of js.dwPOV gives heading (clockwise from ahead) in
-             *   hundredths of a degree, or 0xFFFF when idle.
-             */
-            if ( ( joy->js.dwPOV & 0xFFFF ) == 0xFFFF )
-            {
-              axes [ 6 ] = 0.0;
-              axes [ 7 ] = 0.0;
-            }
-            else
-            {
-              /* This is the contentious bit: how to convert angle to X/Y.
-               *    wk: I know of no define for PI that we could use here:
-               *    SG_PI would pull in sg, M_PI is undefined for MSVC
-               * But the accuracy of the value of PI is very unimportant at
-               * this point.
-               */
-              float s = (float) sin ( ( joy->js.dwPOV & 0xFFFF ) * ( 0.01 * 3.1415926535f / 180.0f ) );
-              float c = (float) cos ( ( joy->js.dwPOV & 0xFFFF ) * ( 0.01 * 3.1415926535f / 180.0f ) );
-
-              /* Convert to coordinates on a square so that North-East
-               * is (1,1) not (.7,.7), etc.
-               * s and c cannot both be zero so we won't divide by zero.
-               */
-              if ( fabs ( s ) < fabs ( c ) )
-              {
-                axes [ 6 ] = ( c < 0.0 ) ? -s/c  : s/c ;
-                axes [ 7 ] = ( c < 0.0 ) ? -1.0f : 1.0f;
-              }
-              else
-              {
-                axes [ 6 ] = ( s < 0.0 ) ? -1.0f : 1.0f;
-                axes [ 7 ] = ( s < 0.0 ) ? -c/s  : c/s ;
-              }
-            }
-
-        case 6: axes[5] = (float) joy->js.dwVpos;
-        case 5: axes[4] = (float) joy->js.dwUpos;
-        case 4: axes[3] = (float) joy->js.dwRpos;
-        case 3: axes[2] = (float) joy->js.dwZpos;
-        case 2: axes[1] = (float) joy->js.dwYpos;
-        case 1: axes[0] = (float) joy->js.dwXpos;
-        }
-    }
-#endif
-
-#if TARGET_HOST_POSIX_X11
-#    if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__)
-    if ( joy->os->is_analog )
-    {
-        int status = read ( joy->os->fd, &joy->os->ajs, sizeof(joy->os->ajs) );
-        if ( status != sizeof(joy->os->ajs) ) {
-            perror ( joy->os->fname );
-            joy->error = GL_TRUE;
-            return;
-        }
-        if ( buttons != NULL )
-            *buttons = ( joy->os->ajs.b1 ? 1 : 0 ) | ( joy->os->ajs.b2 ? 2 : 0 );
-
-        if ( axes != NULL )
-        {
-            axes[0] = (float) joy->os->ajs.x;
-            axes[1] = (float) joy->os->ajs.y;
-        }
-
-        return;
-    }
-
-#        ifdef HAVE_USB_JS
-    while ( ( len = read ( joy->os->fd, joy->os->hid_data_buf, joy->os->hid_dlen ) ) == joy->os->hid_dlen )
-    {
-        struct hid_item *h;
-
-        for  ( h = joy->os->hids; h; h = h->next )
-        {
-            int d = hid_get_data ( joy->os->hid_data_buf, h );
-
-            int page = HID_PAGE ( h->usage );
-            int usage = HID_USAGE ( h->usage );
-
-            if ( page == HUP_GENERIC_DESKTOP )
-            {
-                int i;
-                for ( i = 0; i < joy->num_axes; i++ )
-                    if (joy->os->axes_usage[i] == usage)
-                    {
-                        if (usage == HUG_HAT_SWITCH)
-                        {
-                            if (d < 0 || d > 8)
-                                d = 0;  /* safety */
-                            joy->os->cache_axes[i] = (float)hatmap_x[d];
-                            joy->os->cache_axes[i + 1] = (float)hatmap_y[d];
-                        }
-                        else
-                        {
-                            joy->os->cache_axes[i] = (float)d;
-                        }
-                        break;
-                    }
-            }
-            else if (page == HUP_BUTTON)
-            {
-               if (usage > 0 && usage < _JS_MAX_BUTTONS + 1)
-               {
-                   if (d)
-                       joy->os->cache_buttons |=  (1 << ( usage - 1 ));
-                   else
-                       joy->os->cache_buttons &= ~(1 << ( usage - 1 ));
-               }
-            }
-        }
-    }
-#ifdef HAVE_ERRNO_H
-    if ( len < 0 && errno != EAGAIN )
-#else
-    if ( len < 0 )
-#endif
-    {
-        perror( joy->os->fname );
-        joy->error = 1;
-    }
-    if ( buttons != NULL ) *buttons = joy->os->cache_buttons;
-    if ( axes    != NULL )
-        memcpy ( axes, joy->os->cache_axes, sizeof(float) * joy->num_axes );
-#        endif
-#    endif
-
-#    ifdef JS_NEW
-
-    while ( 1 )
-    {
-        status = read ( joy->fd, &joy->js, sizeof(struct js_event) );
-
-        if ( status != sizeof( struct js_event ) )
-        {
-#ifdef HAVE_ERRNO_H
-            if ( errno == EAGAIN )
-            {
-                /* Use the old values */
-                if ( buttons )
-                    *buttons = joy->tmp_buttons;
-                if ( axes )
-                    memcpy( axes, joy->tmp_axes,
-                            sizeof( float ) * joy->num_axes );
-                return;
-            }
-#endif
-
-            fgWarning ( "%s", joy->fname );
-            joy->error = GL_TRUE;
-            return;
-        }
-
-        switch ( joy->js.type & ~JS_EVENT_INIT )
-        {
-        case JS_EVENT_BUTTON:
-            if( joy->js.value == 0 ) /* clear the flag */
-                joy->tmp_buttons &= ~( 1 << joy->js.number );
-            else
-                joy->tmp_buttons |= ( 1 << joy->js.number );
-            break;
-
-        case JS_EVENT_AXIS:
-            if ( joy->js.number < joy->num_axes )
-            {
-                joy->tmp_axes[ joy->js.number ] = ( float )joy->js.value;
-
-                if( axes )
-                    memcpy( axes, joy->tmp_axes, sizeof(float) * joy->num_axes );
-            }
-            break;
-
-        default:
-            fgWarning ( "PLIB_JS: Unrecognised /dev/js return!?!" );
-
-            /* use the old values */
-
-            if ( buttons != NULL ) *buttons = joy->tmp_buttons;
-            if ( axes    != NULL )
-                memcpy ( axes, joy->tmp_axes, sizeof(float) * joy->num_axes );
-
-            return;
-        }
-
-        if( buttons )
-            *buttons = joy->tmp_buttons;
-    }
-#    else
-
-    status = read( joy->fd, &joy->js, JS_RETURN );
-
-    if ( status != JS_RETURN )
-    {
-        fgWarning( "%s", joy->fname );
-        joy->error = GL_TRUE;
-        return;
-    }
-
-    if ( buttons )
-#        if defined( __FreeBSD__ ) || defined(__FreeBSD_kernel__) || defined( __NetBSD__ )
-        *buttons = ( joy->js.b1 ? 1 : 0 ) | ( joy->js.b2 ? 2 : 0 );  /* XXX Should not be here -- BSD is handled earlier */
-#        else
-        *buttons = joy->js.buttons;
-#        endif
-
-    if ( axes )
-    {
-        axes[ 0 ] = (float) joy->js.x;
-        axes[ 1 ] = (float) joy->js.y;
-    }
-#    endif
-#endif
-}
-
-/*
- * Correct the joystick axis data
- */
-static float fghJoystickFudgeAxis( SFG_Joystick* joy, float value, int axis )
-{
-    if( value < joy->center[ axis ] )
-    {
-        float xx = ( value - joy->center[ axis ] ) / ( joy->center[ axis ] -
-                                                       joy->min[ axis ] );
-
-        if( xx < -joy->saturate[ axis ] )
-            return -1.0f;
-
-        if( xx > -joy->dead_band [ axis ] )
-            return 0.0f;
-
-        xx = ( xx + joy->dead_band[ axis ] ) / ( joy->saturate[ axis ] -
-                                                 joy->dead_band[ axis ] );
-
-        return ( xx < -1.0f ) ? -1.0f : xx;
-    }
-    else
-    {
-        float xx = ( value - joy->center [ axis ] ) / ( joy->max[ axis ] -
-                                                        joy->center[ axis ] );
-
-        if( xx > joy->saturate[ axis ] )
-            return 1.0f;
-
-        if( xx < joy->dead_band[ axis ] )
-            return 0.0f;
-
-        xx = ( xx - joy->dead_band[ axis ] ) / ( joy->saturate[ axis ] -
-                                                 joy->dead_band[ axis ] );
-
-        return ( xx > 1.0f ) ? 1.0f : xx;
-    }
-}
-
-/*
- * Read the corrected joystick data
- */
-static void fghJoystickRead( SFG_Joystick* joy, int* buttons, float* axes )
-{
-    float raw_axes[ _JS_MAX_AXES ];
-    int  i;
-
-    if( joy->error )
-    {
-        if( buttons )
-            *buttons = 0;
-
-        if( axes )
-            for ( i=0; i<joy->num_axes; i++ )
-                axes[ i ] = 0.0f;
-    }
-
-    fghJoystickRawRead( joy, buttons, raw_axes );
-
-    if( axes )
-        for( i=0; i<joy->num_axes; i++ )
-            axes[ i ] = fghJoystickFudgeAxis( joy, raw_axes[ i ], i );
-}
-
-/*
- * Happy happy happy joy joy joy (happy new year toudi :D)
- */
-
-
-#if TARGET_HOST_MAC_OSX
-/** open the IOKit connection, enumerate all the HID devices, add their
-interface references to the static array. We then use the array index
-as the device number when we come to open() the joystick. */
-static int fghJoystickFindDevices ( SFG_Joystick *joy, mach_port_t masterPort )
-{
-    CFMutableDictionaryRef hidMatch = NULL;
-    IOReturn rv = kIOReturnSuccess;
-
-    io_iterator_t hidIterator;
-    io_object_t ioDev;
-
-    /* build a dictionary matching HID devices */
-    hidMatch = IOServiceMatching(kIOHIDDeviceKey);
-
-    rv = IOServiceGetMatchingServices(masterPort, hidMatch, &hidIterator);
-    if (rv != kIOReturnSuccess || !hidIterator) {
-      fgWarning( "no joystick (HID) devices found" );
-      return;
-    }
-
-    /* iterate */
-    while ((ioDev = IOIteratorNext(hidIterator))) {
-        /* filter out keyboard and mouse devices */
-        CFDictionaryRef properties = getCFProperties(ioDev);
-        long usage, page;
-
-        CFTypeRef refPage = CFDictionaryGetValue (properties, CFSTR(kIOHIDPrimaryUsagePageKey));
-        CFTypeRef refUsage = CFDictionaryGetValue (properties, CFSTR(kIOHIDPrimaryUsageKey));
-        CFNumberGetValue((CFNumberRef) refUsage, kCFNumberLongType, &usage);
-        CFNumberGetValue((CFNumberRef) refPage, kCFNumberLongType, &page);
-
-        /* keep only joystick devices */
-        if ( ( page == kHIDPage_GenericDesktop ) && (
-                            (usage == kHIDUsage_GD_Joystick)
-                         || (usage == kHIDUsage_GD_GamePad)
-                         || (usage == kHIDUsage_GD_MultiAxisController)
-                         || (usage == kHIDUsage_GD_Hatswitch) /* last two necessary ? */
-            /* add it to the array */
-            ioDevices[numDevices++] = ioDev;
-    }
-
-    IOObjectRelease(hidIterator);
-}
-
-static CFDictionaryRef fghJoystickGetCFProperties ( SFG_Joystick *joy, io_object_t ioDev )
-{
-    IOReturn rv;
-    CFMutableDictionaryRef cfProperties;
-
-#if 0
-    /* comment copied from darwin/SDL_sysjoystick.c */
-    /* Mac OS X currently is not mirroring all USB properties to HID page so need to look at USB device page also
-     * get dictionary for usb properties: step up two levels and get CF dictionary for USB properties
-     */
-
-    io_registry_entry_t parent1, parent2;
-
-    rv = IORegistryEntryGetParentEntry (ioDev, kIOServicePlane, &parent1);
-    if (rv != kIOReturnSuccess) {
-        fgWarning ( "error getting device entry parent");
-        return NULL;
-    }
-
-    rv = IORegistryEntryGetParentEntry (parent1, kIOServicePlane, &parent2);
-    if (rv != kIOReturnSuccess) {
-        fgWarning ( "error getting device entry parent 2");
-        return NULL;
-    }
-#endif
-
-    rv = IORegistryEntryCreateCFProperties( ioDev /*parent2*/,
-        &cfProperties, kCFAllocatorDefault, kNilOptions);
-    if (rv != kIOReturnSuccess || !cfProperties) {
-        fgWarning ( "error getting device properties");
-        return NULL;
-    }
-
-    return cfProperties;
-}
-
-static void fghJoystickElementEnumerator ( SFG_Joystick *joy, void *element, void* vjs )
-{
-      if (CFGetTypeID((CFTypeRef) element) != CFDictionaryGetTypeID()) {
-            fgError ( "%s", "element enumerator passed non-dictionary value");
-            return;
-    }
-
-      static_cast<jsJoystick*>(vjs)->parseElement ( (CFDictionaryRef) element );
-}
-
-/** element enumerator function : pass NULL for top-level*/
-static void fghJoystickEnumerateElements ( SFG_Joystick *joy, CFTypeRef element )
-{
-      FREEGLUT_INTERNAL_ERROR_EXIT( (CFGetTypeID(element) == CFArrayGetTypeID(),
-                                    "Joystick element type mismatch",
-                                    "fghJoystickEnumerateElements" );
-
-      CFRange range = {0, CFArrayGetCount ((CFArrayRef)element)};
-      CFArrayApplyFunction((CFArrayRef) element, range,
-            &fghJoystickElementEnumerator, joy );
-}
-
-static void fghJoystickAddAxisElement ( SFG_Joystick *joy, CFDictionaryRef axis )
-{
-    long cookie, lmin, lmax;
-    int index = joy->num_axes++;
-
-    CFNumberGetValue ((CFNumberRef)
-        CFDictionaryGetValue ( axis, CFSTR(kIOHIDElementCookieKey) ),
-        kCFNumberLongType, &cookie);
-
-    axisCookies[index] = (IOHIDElementCookie) cookie;
-
-    CFNumberGetValue ((CFNumberRef)
-        CFDictionaryGetValue ( axis, CFSTR(kIOHIDElementMinKey) ),
-        kCFNumberLongType, &lmin);
-
-    CFNumberGetValue ((CFNumberRef)
-        CFDictionaryGetValue ( axis, CFSTR(kIOHIDElementMaxKey) ),
-        kCFNumberLongType, &lmax);
-
-    joy->min[index] = lmin;
-    joy->max[index] = lmax;
-    joy->dead_band[index] = 0.0;
-    joy->saturate[index] = 1.0;
-    joy->center[index] = (lmax + lmin) * 0.5;
-}
-
-static void fghJoystickAddButtonElement ( SFG_Joystick *joy, CFDictionaryRef button )
-{
-    long cookie;
-    CFNumberGetValue ((CFNumberRef)
-            CFDictionaryGetValue ( button, CFSTR(kIOHIDElementCookieKey) ),
-            kCFNumberLongType, &cookie);
-
-    joy->buttonCookies[num_buttons++] = (IOHIDElementCookie) cookie;
-    /* anything else for buttons? */
-}
-
-static void fghJoystickAddHatElement ( SFG_Joystick *joy, CFDictionaryRef button )
-{
-    /* hatCookies[num_hats++] = (IOHIDElementCookie) cookie; */
-    /* do we map hats to axes or buttons? */
-}
-#endif
-
-#if TARGET_HOST_MS_WINDOWS && !defined(_WIN32_WCE)
-/* Inspired by
-   http://msdn.microsoft.com/archive/en-us/dnargame/html/msdn_sidewind3d.asp
- */
-#    if FREEGLUT_LIB_PRAGMAS
-#        pragma comment (lib, "advapi32.lib")
-#    endif
-
-static int fghJoystickGetOEMProductName ( SFG_Joystick* joy, char *buf, int buf_sz )
-{
-    char buffer [ 256 ];
-
-    char OEMKey [ 256 ];
-
-    HKEY  hKey;
-    DWORD dwcb;
-    LONG  lr;
-
-    if ( joy->error )
-        return 0;
-
-    /* Open .. MediaResources\CurrentJoystickSettings */
-    _snprintf ( buffer, sizeof(buffer), "%s\\%s\\%s",
-                REGSTR_PATH_JOYCONFIG, joy->jsCaps.szRegKey,
-                REGSTR_KEY_JOYCURR );
-
-    lr = RegOpenKeyEx ( HKEY_LOCAL_MACHINE, buffer, 0, KEY_QUERY_VALUE, &hKey);
-
-    if ( lr != ERROR_SUCCESS ) return 0;
-
-    /* Get OEM Key name */
-    dwcb = sizeof(OEMKey);
-
-    /* JOYSTICKID1-16 is zero-based; registry entries for VJOYD are 1-based. */
-    _snprintf ( buffer, sizeof(buffer), "Joystick%d%s", joy->js_id + 1, REGSTR_VAL_JOYOEMNAME );
-
-    lr = RegQueryValueEx ( hKey, buffer, 0, 0, (LPBYTE) OEMKey, &dwcb);
-    RegCloseKey ( hKey );
-
-    if ( lr != ERROR_SUCCESS ) return 0;
-
-    /* Open OEM Key from ...MediaProperties */
-    _snprintf ( buffer, sizeof(buffer), "%s\\%s", REGSTR_PATH_JOYOEM, OEMKey );
-
-    lr = RegOpenKeyEx ( HKEY_LOCAL_MACHINE, buffer, 0, KEY_QUERY_VALUE, &hKey );
-
-    if ( lr != ERROR_SUCCESS ) return 0;
-
-    /* Get OEM Name */
-    dwcb = buf_sz;
-
-    lr = RegQueryValueEx ( hKey, REGSTR_VAL_JOYOEMNAME, 0, 0, (LPBYTE) buf,
-                             &dwcb );
-    RegCloseKey ( hKey );
-
-    if ( lr != ERROR_SUCCESS ) return 0;
-
-    return 1;
-}
-#endif
-
-
-static void fghJoystickOpen( SFG_Joystick* joy )
-{
-    int i = 0;
-#if TARGET_HOST_MACINTOSH
-    OSStatus err;
-#endif
-#if TARGET_HOST_MAC_OSX
-        IOReturn rv;
-        SInt32 score;
-        IOCFPlugInInterface **plugin;
-
-        HRESULT pluginResult;
-
-        CFDictionaryRef props;
-    CFTypeRef topLevelElement;
-#endif
-#if TARGET_HOST_POSIX_X11
-#    if defined( __FreeBSD__ ) || defined(__FreeBSD_kernel__) || defined( __NetBSD__ )
-       char *cp;
-#    endif
-#    ifdef JS_NEW
-       unsigned char u;
-#    else
-#      if defined( __linux__ ) || TARGET_HOST_SOLARIS
-         int counter = 0;
-#      endif
-#    endif
-#endif
-
-    /* Silence gcc, the correct #ifdefs would be too fragile... */
-    (void)i;
-
-    /*
-     * Default values (for no joystick -- each conditional will reset the
-     * error flag)
-     */
-    joy->error = TRUE;
-    joy->num_axes = joy->num_buttons = 0;
-    joy->name[ 0 ] = '\0';
-
-#if TARGET_HOST_MACINTOSH
-    /* XXX FIXME: get joystick name in Mac */
-
-    err = ISpStartup( );
-
-    if( err == noErr )
-    {
-#define ISP_CHECK_ERR(x) if( x != noErr ) { joy->error = GL_TRUE; return; }
-
-        joy->error = GL_TRUE;
-
-        /* initialize the needs structure */
-        ISpNeed temp_isp_needs[ isp_num_needs ] =
-        {
-          { "\pX-Axis",  128, 0, 0, kISpElementKind_Axis,   kISpElementLabel_None, 0, 0, 0, 0 },
-          { "\pY-Axis",  128, 0, 0, kISpElementKind_Axis,   kISpElementLabel_None, 0, 0, 0, 0 },
-          { "\pZ-Axis",    128, 0, 0, kISpElementKind_Axis,   kISpElementLabel_None, 0, 0, 0, 0 },
-          { "\pR-Axis",    128, 0, 0, kISpElementKind_Axis,   kISpElementLabel_None, 0, 0, 0, 0 },
-          { "\pAxis   4",  128, 0, 0, kISpElementKind_Axis,   kISpElementLabel_None, 0, 0, 0, 0 },
-          { "\pAxis   5",  128, 0, 0, kISpElementKind_Axis,   kISpElementLabel_None, 0, 0, 0, 0 },
-          { "\pAxis   6",  128, 0, 0, kISpElementKind_Axis,   kISpElementLabel_None, 0, 0, 0, 0 },
-          { "\pAxis   7",  128, 0, 0, kISpElementKind_Axis,   kISpElementLabel_None, 0, 0, 0, 0 },
-          { "\pAxis   8",  128, 0, 0, kISpElementKind_Axis,   kISpElementLabel_None, 0, 0, 0, 0 },
-
-          { "\pButton 0",  128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },
-          { "\pButton 1",  128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },
-          { "\pButton 2",  128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },
-          { "\pButton 3",  128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },
-          { "\pButton 4",  128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },
-          { "\pButton 5",  128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },
-          { "\pButton 6",  128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },
-          { "\pButton 7",  128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },
-          { "\pButton 8",  128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },
-          { "\pButton 9",  128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },
-          { "\pButton 10", 128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },
-          { "\pButton 11", 128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },
-          { "\pButton 12", 128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },
-          { "\pButton 13", 128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },
-          { "\pButton 14", 128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },
-          { "\pButton 15", 128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },
-          { "\pButton 16", 128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },
-          { "\pButton 17", 128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },
-          { "\pButton 18", 128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },
-          { "\pButton 19", 128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },
-          { "\pButton 20", 128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },
-          { "\pButton 21", 128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },
-          { "\pButton 22", 128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },
-          { "\pButton 23", 128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },
-          { "\pButton 24", 128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },
-          { "\pButton 25", 128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },
-          { "\pButton 26", 128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },
-          { "\pButton 27", 128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },
-          { "\pButton 28", 128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },
-          { "\pButton 29", 128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },
-          { "\pButton 30", 128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },
-          { "\pButton 31", 128, 0, 0, kISpElementKind_Button, kISpElementLabel_Btn_Select, 0, 0, 0, 0 },
-        };
-
-        memcpy( joy->isp_needs, temp_isp_needs, sizeof (temp_isp_needs ) );
-
-
-        /* next two calls allow keyboard and mouse to emulate other input
-         * devices (gamepads, joysticks, etc)
-         */
-        /*
-          err = ISpDevices_ActivateClass ( kISpDeviceClass_Keyboard );
-          ISP_CHECK_ERR(err)
-
-
-          err = ISpDevices_ActivateClass ( kISpDeviceClass_Mouse );
-          ISP_CHECK_ERR(err)
-        */
-
-        err = ISpElement_NewVirtualFromNeeds( joy->isp_num_needs,
-                                              joy->isp_needs, joy->isp_elem,
-                                              0 );
-        ISP_CHECK_ERR( err )
-
-        err = ISpInit( joy->isp_num_needs, joy->isp_needs, joy->isp_elem,
-                       'freeglut', nil, 0, 128, 0 );
-        ISP_CHECK_ERR( err )
-
-        joy->num_buttons = joy->isp_num_needs - joy->isp_num_axis;
-        joy->num_axes    = joy->isp_num_axis;
-
-        for( i = 0; i < joy->num_axes; i++ )
-        {
-            joy->dead_band[ i ] = 0;
-            joy->saturate [ i ] = 1;
-            joy->center   [ i ] = kISpAxisMiddle;
-            joy->max      [ i ] = kISpAxisMaximum;
-            joy->min      [ i ] = kISpAxisMinimum;
-        }
-
-        joy->error = GL_FALSE;
-    }
-    else
-        joy->num_buttons = joy->num_axes = 0;
-#endif
-
-#if TARGET_HOST_MAC_OSX
-    if( joy->id >= numDevices )
-    {
-        fgWarning( "device index out of range in fgJoystickOpen()" );
-        return;
-    }
-
-    /* create device interface */
-    rv = IOCreatePlugInInterfaceForService( ioDevices[ joy->id ],
-                                            kIOHIDDeviceUserClientTypeID,
-                                            kIOCFPlugInInterfaceID,
-                                            &plugin, &score );
-
-    if( rv != kIOReturnSuccess )
-    {
-        fgWarning( "error creating plugin for io device" );
-        return;
-    }
-
-    pluginResult = ( *plugin )->QueryInterface(
-        plugin,
-        CFUUIDGetUUIDBytes(kIOHIDDeviceInterfaceID),
-        &( LPVOID )joy->hidDev
-    );
-
-    if( pluginResult != S_OK )
-        fgWarning ( "QI-ing IO plugin to HID Device interface failed" );
-
-    ( *plugin )->Release( plugin ); /* don't leak a ref */
-    if( joy->hidDev == NULL )
-        return;
-
-    /* store the interface in this instance */
-    rv = ( *( joy->hidDev ) )->open( joy->hidDev, 0 );
-    if( rv != kIOReturnSuccess )
-    {
-        fgWarning( "error opening device interface");
-        return;
-    }
-
-    props = getCFProperties( ioDevices[ joy->id ] );
-
-    /* recursively enumerate all the bits */
-    CFTypeRef topLevelElement =
-        CFDictionaryGetValue( props, CFSTR( kIOHIDElementKey ) );
-    enumerateElements( topLevelElement );
-
-    CFRelease( props );
-#endif
-
-#if TARGET_HOST_MS_WINDOWS && !defined(_WIN32_WCE)
-    joy->js.dwFlags = JOY_RETURNALL;
-    joy->js.dwSize  = sizeof( joy->js );
-
-    memset( &joy->jsCaps, 0, sizeof( joy->jsCaps ) );
-
-    joy->error =
-        ( joyGetDevCaps( joy->js_id, &joy->jsCaps, sizeof( joy->jsCaps ) ) !=
-          JOYERR_NOERROR );
-
-    if( joy->jsCaps.wNumAxes == 0 )
-    {
-        joy->num_axes = 0;
-        joy->error = GL_TRUE;
-    }
-    else
-    {
-        /* Device name from jsCaps is often "Microsoft PC-joystick driver",
-         * at least for USB.  Try to get the real name from the registry.
-         */
-        if ( ! fghJoystickGetOEMProductName( joy, joy->name,
-                                             sizeof( joy->name ) ) )
-        {
-            fgWarning( "JS: Failed to read joystick name from registry" );
-            strncpy( joy->name, joy->jsCaps.szPname, sizeof( joy->name ) );
-        }
-
-        /* Windows joystick drivers may provide any combination of
-         * X,Y,Z,R,U,V,POV - not necessarily the first n of these.
-         */
-        if( joy->jsCaps.wCaps & JOYCAPS_HASPOV )
-        {
-            joy->num_axes = _JS_MAX_AXES;
-            joy->min[ 7 ] = -1.0; joy->max[ 7 ] = 1.0;  /* POV Y */
-            joy->min[ 6 ] = -1.0; joy->max[ 6 ] = 1.0;  /* POV X */
-        }
-        else
-            joy->num_axes = 6;
-
-        joy->min[ 5 ] = ( float )joy->jsCaps.wVmin;
-        joy->max[ 5 ] = ( float )joy->jsCaps.wVmax;
-        joy->min[ 4 ] = ( float )joy->jsCaps.wUmin;
-        joy->max[ 4 ] = ( float )joy->jsCaps.wUmax;
-        joy->min[ 3 ] = ( float )joy->jsCaps.wRmin;
-        joy->max[ 3 ] = ( float )joy->jsCaps.wRmax;
-        joy->min[ 2 ] = ( float )joy->jsCaps.wZmin;
-        joy->max[ 2 ] = ( float )joy->jsCaps.wZmax;
-        joy->min[ 1 ] = ( float )joy->jsCaps.wYmin;
-        joy->max[ 1 ] = ( float )joy->jsCaps.wYmax;
-        joy->min[ 0 ] = ( float )joy->jsCaps.wXmin;
-        joy->max[ 0 ] = ( float )joy->jsCaps.wXmax;
-    }
-
-    /* Guess all the rest judging on the axes extremals */
-    for( i = 0; i < joy->num_axes; i++ )
-    {
-        joy->center   [ i ] = ( joy->max[ i ] + joy->min[ i ] ) * 0.5f;
-        joy->dead_band[ i ] = 0.0f;
-        joy->saturate [ i ] = 1.0f;
-    }
-#endif
-
-#if TARGET_HOST_POSIX_X11
-#if defined( __FreeBSD__ ) || defined(__FreeBSD_kernel__) || defined( __NetBSD__ )
-    for( i = 0; i < _JS_MAX_AXES; i++ )
-        joy->os->cache_axes[ i ] = 0.0f;
-
-    joy->os->cache_buttons = 0;
-
-    joy->os->fd = open( joy->os->fname, O_RDONLY | O_NONBLOCK);
-
-#ifdef HAVE_ERRNO_H
-    if( joy->os->fd < 0 && errno == EACCES )
-        fgWarning ( "%s exists but is not readable by you", joy->os->fname );
-#endif
-
-    joy->error =( joy->os->fd < 0 );
-
-    if( joy->error )
-        return;
-
-    joy->num_axes = 0;
-    joy->num_buttons = 0;
-    if( joy->os->is_analog )
-    {
-        FILE *joyfile;
-        char joyfname[ 1024 ];
-        int noargs, in_no_axes;
-
-        float axes [ _JS_MAX_AXES ];
-        int buttons[ _JS_MAX_AXES ];
-
-        joy->num_axes    =  2;
-        joy->num_buttons = 32;
-
-        fghJoystickRawRead( joy, buttons, axes );
-        joy->error = axes[ 0 ] < -1000000000.0f;
-        if( joy->error )
-            return;
-
-        snprintf( joyfname, sizeof(joyfname), "%s/.joy%drc", getenv( "HOME" ), joy->id );
-
-        joyfile = fopen( joyfname, "r" );
-        joy->error =( joyfile == NULL );
-        if( joy->error )
-            return;
-
-        noargs = fscanf( joyfile, "%d%f%f%f%f%f%f", &in_no_axes,
-                         &joy->min[ 0 ], &joy->center[ 0 ], &joy->max[ 0 ],
-                         &joy->min[ 1 ], &joy->center[ 1 ], &joy->max[ 1 ] );
-        joy->error = noargs != 7 || in_no_axes != _JS_MAX_AXES;
-        fclose( joyfile );
-        if( joy->error )
-            return;
-
-        for( i = 0; i < _JS_MAX_AXES; i++ )
-        {
-            joy->dead_band[ i ] = 0.0f;
-            joy->saturate [ i ] = 1.0f;
-        }
-
-        return;    /* End of analog code */
-    }
-
-#    ifdef HAVE_USB_JS
-    if( ! fghJoystickInitializeHID( joy->os, &joy->num_axes,
-                                    &joy->num_buttons ) )
-    {
-        close( joy->os->fd );
-        joy->error = GL_TRUE;
-        return;
-    }
-
-    cp = strrchr( joy->os->fname, '/' );
-    if( cp )
-    {
-        if( fghJoystickFindUSBdev( &cp[1], joy->name, sizeof( joy->name ) ) ==
-            0 )
-            strcpy( joy->name, &cp[1] );
-    }
-
-    if( joy->num_axes > _JS_MAX_AXES )
-        joy->num_axes = _JS_MAX_AXES;
-
-    for( i = 0; i < _JS_MAX_AXES; i++ )
-    {
-        /* We really should get this from the HID, but that data seems
-         * to be quite unreliable for analog-to-USB converters. Punt for
-         * now.
-         */
-        if( joy->os->axes_usage[ i ] == HUG_HAT_SWITCH )
-        {
-            joy->max   [ i ] = 1.0f;
-            joy->center[ i ] = 0.0f;
-            joy->min   [ i ] = -1.0f;
-        }
-        else
-        {
-            joy->max   [ i ] = 255.0f;
-            joy->center[ i ] = 127.0f;
-            joy->min   [ i ] = 0.0f;
-        }
-
-        joy->dead_band[ i ] = 0.0f;
-        joy->saturate[ i ] = 1.0f;
-    }
-#    endif
-#endif
-
-#if defined( __linux__ ) || TARGET_HOST_SOLARIS
-    /* Default for older Linux systems. */
-    joy->num_axes    =  2;
-    joy->num_buttons = 32;
-
-#    ifdef JS_NEW
-    for( i = 0; i < _JS_MAX_AXES; i++ )
-        joy->tmp_axes[ i ] = 0.0f;
-
-    joy->tmp_buttons = 0;
-#    endif
-
-    joy->fd = open( joy->fname, O_RDONLY );
-
-    joy->error =( joy->fd < 0 );
-
-    if( joy->error )
-        return;
-
-    /* Set the correct number of axes for the linux driver */
-#    ifdef JS_NEW
-    /* Melchior Franz's fixes for big-endian Linuxes since writing
-     *  to the upper byte of an uninitialized word doesn't work.
-     *  9 April 2003
-     */
-    ioctl( joy->fd, JSIOCGAXES, &u );
-    joy->num_axes = u;
-    ioctl( joy->fd, JSIOCGBUTTONS, &u );
-    joy->num_buttons = u;
-    ioctl( joy->fd, JSIOCGNAME( sizeof( joy->name ) ), joy->name );
-    fcntl( joy->fd, F_SETFL, O_NONBLOCK );
-#    endif
-
-    /*
-     * The Linux driver seems to return 512 for all axes
-     * when no stick is present - but there is a chance
-     * that could happen by accident - so it's gotta happen
-     * on both axes for at least 100 attempts.
-     *
-     * PWO: shouldn't be that done somehow wiser on the kernel level?
-     */
-#    ifndef JS_NEW
-    counter = 0;
-
-    do
-    {
-        fghJoystickRawRead( joy, NULL, joy->center );
-        counter++;
-    } while( !joy->error &&
-             counter < 100 &&
-             joy->center[ 0 ] == 512.0f &&
-             joy->center[ 1 ] == 512.0f );
-
-    if ( counter >= 100 )
-        joy->error = GL_TRUE;
-#    endif
-
-    for( i = 0; i < _JS_MAX_AXES; i++ )
-    {
-#    ifdef JS_NEW
-        joy->max   [ i ] =  32767.0f;
-        joy->center[ i ] =      0.0f;
-        joy->min   [ i ] = -32767.0f;
-#    else
-        joy->max[ i ] = joy->center[ i ] * 2.0f;
-        joy->min[ i ] = 0.0f;
-#    endif
-        joy->dead_band[ i ] = 0.0f;
-        joy->saturate [ i ] = 1.0f;
-    }
-#endif
-#endif
-}
-
-/*
- * This function replaces the constructor method in the JS library.
- */
-static void fghJoystickInit( int ident )
-{
-    if( ident >= MAX_NUM_JOYSTICKS )
-      fgError( "Too large a joystick number: %d", ident );
-
-    if( fgJoystick[ ident ] )
-        fgError( "illegal attempt to initialize joystick device again" );
-
-    fgJoystick[ ident ] =
-        ( SFG_Joystick * )calloc( sizeof( SFG_Joystick ), 1 );
-
-    /* Set defaults */
-    fgJoystick[ ident ]->num_axes = fgJoystick[ ident ]->num_buttons = 0;
-    fgJoystick[ ident ]->error = GL_TRUE;
-
-#if TARGET_HOST_MACINTOSH
-    fgJoystick[ ident ]->id = ident;
-    snprintf( fgJoystick[ ident ]->fname, sizeof(fgJoystick[ ident ]->fname), "/dev/js%d", ident ); /* FIXME */
-    fgJoystick[ ident ]->error = GL_FALSE;
-#endif
-
-#if TARGET_HOST_MAC_OSX
-    fgJoystick[ ident ]->id = ident;
-    fgJoystick[ ident ]->error = GL_FALSE;
-    fgJoystick[ ident ]->num_axes = 0;
-    fgJoystick[ ident ]->num_buttons = 0;
-
-    if( numDevices < 0 )
-    {
-        /* do first-time init (since we can't over-ride jsInit, hmm */
-        numDevices = 0;
-
-        mach_port_t masterPort;
-        IOReturn rv = IOMasterPort( bootstrap_port, &masterPort );
-        if( rv != kIOReturnSuccess )
-        {
-            fgWarning( "error getting master Mach port" );
-            return;
-        }
-        fghJoystickFindDevices( masterPort );
-    }
-
-    if ( ident >= numDevices )
-    {
-        fgJoystick[ ident ]->error = GL_TRUE;
-        return;
-    }
-
-    /* get the name now too */
-    CFDictionaryRef properties = getCFProperties( ioDevices[ ident ] );
-    CFTypeRef ref = CFDictionaryGetValue( properties,
-                                          CFSTR( kIOHIDProductKey ) );
-    if (!ref)
-        ref = CFDictionaryGetValue(properties, CFSTR( "USB Product Name" ) );
-
-    if( !ref ||
-        !CFStringGetCString( ( CFStringRef )ref, name, 128,
-                             CFStringGetSystemEncoding( ) ) )
-    {
-        fgWarning( "error getting device name" );
-        name[ 0 ] = '\0';
-    }
-#endif
-
-#if TARGET_HOST_MS_WINDOWS && !defined(_WIN32_WCE)
-    switch( ident )
-    {
-    case 0:
-        fgJoystick[ ident ]->js_id = JOYSTICKID1;
-        fgJoystick[ ident ]->error = GL_FALSE;
-        break;
-    case 1:
-        fgJoystick[ ident ]->js_id = JOYSTICKID2;
-        fgJoystick[ ident ]->error = GL_FALSE;
-        break;
-    default:
-        fgJoystick[ ident ]->num_axes = 0;
-        fgJoystick[ ident ]->error = GL_TRUE;
-        return;
-    }
-#endif
-
-#if TARGET_HOST_POSIX_X11
-#    if defined( __FreeBSD__ ) || defined(__FreeBSD_kernel__) || defined( __NetBSD__ )
-    fgJoystick[ ident ]->id = ident;
-    fgJoystick[ ident ]->error = GL_FALSE;
-
-    fgJoystick[ ident ]->os = calloc( 1, sizeof( struct os_specific_s ) );
-    memset( fgJoystick[ ident ]->os, 0, sizeof( struct os_specific_s ) );
-    if( ident < USB_IDENT_OFFSET )
-        fgJoystick[ ident ]->os->is_analog = 1;
-    if( fgJoystick[ ident ]->os->is_analog )
-        snprintf( fgJoystick[ ident ]->os->fname, sizeof(fgJoystick[ ident ]->os->fname), "%s%d", AJSDEV, ident );
-    else
-        snprintf( fgJoystick[ ident ]->os->fname, sizeof(fgJoystick[ ident ]->os->fname), "%s%d", UHIDDEV,
-                 ident - USB_IDENT_OFFSET );
-#    elif defined( __linux__ )
-    fgJoystick[ ident ]->id = ident;
-    fgJoystick[ ident ]->error = GL_FALSE;
-
-    snprintf( fgJoystick[ident]->fname, sizeof(fgJoystick[ident]->fname), "/dev/input/js%d", ident );
-
-    if( access( fgJoystick[ ident ]->fname, F_OK ) != 0 )
-        snprintf( fgJoystick[ ident ]->fname, sizeof(fgJoystick[ ident ]->fname), "/dev/js%d", ident );
-#    endif
-#endif
-
-    fghJoystickOpen( fgJoystick[ ident  ] );
-}
-
-/*
- * Try initializing all the joysticks (well, both of them)
- */
-void fgInitialiseJoysticks ( void )
-{
-    if( !fgState.JoysticksInitialised )
-    {
-        int ident ;
-        for ( ident = 0; ident < MAX_NUM_JOYSTICKS; ident++ )
-            fghJoystickInit( ident );
-
-        fgState.JoysticksInitialised = GL_TRUE;
-    }
-}
-
-/*
- *
- */
-void fgJoystickClose( void )
-{
-    int ident ;
-    for( ident = 0; ident < MAX_NUM_JOYSTICKS; ident++ )
-    {
-        if( fgJoystick[ ident ] )
-        {
-
-#if TARGET_HOST_MACINTOSH
-            ISpSuspend( );
-            ISpStop( );
-            ISpShutdown( );
-#endif
-
-#if TARGET_HOST_MAC_OSX
-            ( *( fgJoystick[ ident ]->hidDev ) )->
-                close( fgJoystick[ ident ]->hidDev );
-#endif
-
-#if TARGET_HOST_MS_WINDOWS && !defined(_WIN32_WCE)
-            /* Do nothing special */
-#endif
-
-#if TARGET_HOST_POSIX_X11
-#if defined( __FreeBSD__ ) || defined(__FreeBSD_kernel__) || defined( __NetBSD__ )
-            if( fgJoystick[ident]->os )
-            {
-                if( ! fgJoystick[ ident ]->error )
-                    close( fgJoystick[ ident ]->os->fd );
-#ifdef HAVE_USB_JS
-                if( fgJoystick[ ident ]->os->hids )
-                    free (fgJoystick[ ident ]->os->hids);
-                if( fgJoystick[ ident ]->os->hid_data_buf )
-                    free( fgJoystick[ ident ]->os->hid_data_buf );
-#endif
-                free( fgJoystick[ident]->os );
-            }
-#endif
-
-            if( ! fgJoystick[ident]->error )
-                close( fgJoystick[ ident ]->fd );
-#endif
-
-            free( fgJoystick[ ident ] );
-            fgJoystick[ ident ] = NULL;
-            /* show joystick has been deinitialized */
-        }
-    }
-}
-
-/*
- * Polls the joystick and executes the joystick callback hooked to the
- * window specified in the function's parameter:
- */
-void fgJoystickPollWindow( SFG_Window* window )
-{
-    float axes[ _JS_MAX_AXES ];
-    int buttons;
-    int ident;
-
-    freeglut_return_if_fail( window );
-    freeglut_return_if_fail( FETCH_WCB( *window, Joystick ) );
-
-    for( ident = 0; ident < MAX_NUM_JOYSTICKS; ident++ )
-    {
-        if( fgJoystick[ident] )
-        {
-            fghJoystickRead( fgJoystick[ident], &buttons, axes );
-
-            if( !fgJoystick[ident]->error )
-                INVOKE_WCB( *window, Joystick,
-                            ( buttons,
-                              (int) ( axes[ 0 ] * 1000.0f ),
-                              (int) ( axes[ 1 ] * 1000.0f ),
-                              (int) ( axes[ 2 ] * 1000.0f ) )
-                );
-        }
-    }
-}
-
-/*
- * Implementation for glutDeviceGet(GLUT_HAS_JOYSTICK)
- */
-int fgJoystickDetect( void )
-{
-    int ident;
-
-    fgInitialiseJoysticks ();
-
-    if ( !fgState.JoysticksInitialised )
-        return 0;
-
-    for( ident=0; ident<MAX_NUM_JOYSTICKS; ident++ )
-        if( fgJoystick[ident] && !fgJoystick[ident]->error )
-            return 1;
-
-    return 0;
-}
-
-/*
- * Joystick information functions
- */
-int  glutJoystickGetNumAxes( int ident )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutJoystickGetNumAxes" );
-    return fgJoystick[ ident ]->num_axes;
-}
-int  glutJoystickGetNumButtons( int ident )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutJoystickGetNumButtons" );
-    return fgJoystick[ ident ]->num_buttons;
-}
-int  glutJoystickNotWorking( int ident )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutJoystickNotWorking" );
-    return fgJoystick[ ident ]->error;
-}
-
-float glutJoystickGetDeadBand( int ident, int axis )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutJoystickGetDeadBand" );
-    return fgJoystick[ ident ]->dead_band [ axis ];
-}
-void  glutJoystickSetDeadBand( int ident, int axis, float db )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutJoystickSetDeadBand" );
-    fgJoystick[ ident ]->dead_band[ axis ] = db;
-}
-
-float glutJoystickGetSaturation( int ident, int axis )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutJoystickGetSaturation" );
-    return fgJoystick[ ident ]->saturate[ axis ];
-}
-void  glutJoystickSetSaturation( int ident, int axis, float st )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutJoystickSetSaturation" );
-    fgJoystick[ ident ]->saturate [ axis ] = st;
-}
-
-void glutJoystickSetMinRange( int ident, float *axes )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutJoystickSetMinRange" );
-    memcpy( fgJoystick[ ident ]->min, axes,
-            fgJoystick[ ident ]->num_axes * sizeof( float ) );
-}
-void glutJoystickSetMaxRange( int ident, float *axes )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutJoystickSetMaxRange" );
-    memcpy( fgJoystick[ ident ]->max, axes,
-            fgJoystick[ ident ]->num_axes * sizeof( float ) );
-}
-void glutJoystickSetCenter( int ident, float *axes )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutJoystickSetCenter" );
-    memcpy( fgJoystick[ ident ]->center, axes,
-            fgJoystick[ ident ]->num_axes * sizeof( float ) );
-}
-
-void glutJoystickGetMinRange( int ident, float *axes )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutJoystickGetMinRange" );
-    memcpy( axes, fgJoystick[ ident ]->min,
-            fgJoystick[ ident ]->num_axes * sizeof( float ) );
-}
-void glutJoystickGetMaxRange( int ident, float *axes )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutJoystickGetMaxRange" );
-    memcpy( axes, fgJoystick[ ident ]->max,
-            fgJoystick[ ident ]->num_axes * sizeof( float ) );
-}
-void glutJoystickGetCenter( int ident, float *axes )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutJoystickGetCenter" );
-    memcpy( axes, fgJoystick[ ident ]->center,
-            fgJoystick[ ident ]->num_axes * sizeof( float ) );
-}
-
-/*** END OF FILE ***/
diff --git a/src/freeglut_main.c b/src/freeglut_main.c
deleted file mode 100644 (file)
index 5f9b0a5..0000000
+++ /dev/null
@@ -1,2511 +0,0 @@
-/*
- * freeglut_main.c
- *
- * The windows message processing methods.
- *
- * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.
- * Written by Pawel W. Olszta, <olszta@sourceforge.net>
- * Creation date: Fri Dec 3 1999
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-#include <GL/freeglut.h>
-#include "freeglut_internal.h"
-#ifdef HAVE_ERRNO_H
-#    include <errno.h>
-#endif
-#include <stdarg.h>
-#ifdef  HAVE_VFPRINTF
-#    define VFPRINTF(s,f,a) vfprintf((s),(f),(a))
-#elif defined(HAVE__DOPRNT)
-#    define VFPRINTF(s,f,a) _doprnt((f),(a),(s))
-#else
-#    define VFPRINTF(s,f,a)
-#endif
-
-#ifdef _WIN32_WCE
-
-typedef struct GXDisplayProperties GXDisplayProperties;
-typedef struct GXKeyList GXKeyList;
-#include <gx.h>
-
-typedef struct GXKeyList (*GXGETDEFAULTKEYS)(int);
-typedef int (*GXOPENINPUT)();
-
-GXGETDEFAULTKEYS GXGetDefaultKeys_ = NULL;
-GXOPENINPUT GXOpenInput_ = NULL;
-
-struct GXKeyList gxKeyList;
-
-#endif /* _WIN32_WCE */
-
-/*
- * Try to get the maximum value allowed for ints, falling back to the minimum
- * guaranteed by ISO C99 if there is no suitable header.
- */
-#ifdef HAVE_LIMITS_H
-#    include <limits.h>
-#endif
-#ifndef INT_MAX
-#    define INT_MAX 32767
-#endif
-
-#ifndef MIN
-#    define MIN(a,b) (((a)<(b)) ? (a) : (b))
-#endif
-
-#ifdef WM_TOUCH
-    typedef BOOL (WINAPI *pGetTouchInputInfo)(HTOUCHINPUT,UINT,PTOUCHINPUT,int);
-    typedef BOOL (WINAPI *pCloseTouchInputHandle)(HTOUCHINPUT);
-       static pGetTouchInputInfo fghGetTouchInputInfo = (pGetTouchInputInfo)0xDEADBEEF;
-       static pCloseTouchInputHandle fghCloseTouchInputHandle = (pCloseTouchInputHandle)0xDEADBEEF;
-#endif
-
-/*
- * TODO BEFORE THE STABLE RELEASE:
- *
- * There are some issues concerning window redrawing under X11, and maybe
- * some events are not handled. The Win32 version lacks some more features,
- * but seems acceptable for not demanding purposes.
- *
- * Need to investigate why the X11 version breaks out with an error when
- * closing a window (using the window manager, not glutDestroyWindow)...
- */
-
-/* -- PRIVATE FUNCTIONS ---------------------------------------------------- */
-
-/*
- * Handle a window configuration change. When no reshape
- * callback is hooked, the viewport size is updated to
- * match the new window size.
- */
-static void fghReshapeWindow ( SFG_Window *window, int width, int height )
-{
-    SFG_Window *current_window = fgStructure.CurrentWindow;
-
-    freeglut_return_if_fail( window != NULL );
-
-#if TARGET_HOST_POSIX_X11
-
-    XResizeWindow( fgDisplay.Display, window->Window.Handle,
-                   width, height );
-    XFlush( fgDisplay.Display ); /* XXX Shouldn't need this */
-
-#elif TARGET_HOST_MS_WINDOWS && !defined(_WIN32_WCE)
-    {
-        RECT windowRect;
-
-        /*
-         * For windowed mode, get the current position of the
-         * window and resize taking the size of the frame
-         * decorations into account.
-         */
-
-        /* "GetWindowRect" returns the pixel coordinates of the outside of the window */
-        GetWindowRect( window->Window.Handle, &windowRect );
-
-        /* Create rect in FreeGLUT format, (X,Y) topleft outside window, WxH of client area */
-        windowRect.right    = windowRect.left+width;
-        windowRect.bottom   = windowRect.top+height;
-
-        if (window->Parent == NULL)
-            /* get the window rect from this to feed to SetWindowPos, correct for window decorations */
-            fghComputeWindowRectFromClientArea_QueryWindow(window,&windowRect,TRUE);
-        else
-        {
-            /* correct rect for position client area of parent window
-             * (SetWindowPos input for child windows is in coordinates
-             * relative to the parent's client area).
-             * Child windows don't have decoration, so no need to correct
-             * for them.
-             */
-            RECT parentRect;
-            parentRect = fghGetClientArea( window->Parent, FALSE );
-            windowRect.left   -= parentRect.left;
-            windowRect.right  -= parentRect.left;
-            windowRect.top    -= parentRect.top;
-            windowRect.bottom -= parentRect.top;
-        }
-        
-        /* Do the actual resizing */
-        SetWindowPos( window->Window.Handle,
-                      HWND_TOP,
-                      windowRect.left, windowRect.top,
-                      windowRect.right - windowRect.left,
-                      windowRect.bottom- windowRect.top,
-                      SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOSENDCHANGING |
-                      SWP_NOZORDER
-        );
-    }
-#endif
-
-    if( FETCH_WCB( *window, Reshape ) )
-        INVOKE_WCB( *window, Reshape, ( width, height ) );
-    else
-    {
-        fgSetWindow( window );
-        glViewport( 0, 0, width, height );
-    }
-
-    /*
-     * Force a window redraw.  In Windows at least this is only a partial
-     * solution:  if the window is increasing in size in either dimension,
-     * the already-drawn part does not get drawn again and things look funny.
-     * But without this we get this bad behaviour whenever we resize the
-     * window.
-     */
-    window->State.Redisplay = GL_TRUE;
-
-    if( window->IsMenu )
-        fgSetWindow( current_window );
-}
-
-/*
- * Calls a window's redraw method. This is used when
- * a redraw is forced by the incoming window messages.
- */
-static void fghRedrawWindow ( SFG_Window *window )
-{
-    SFG_Window *current_window = fgStructure.CurrentWindow;
-
-    freeglut_return_if_fail( window );
-    freeglut_return_if_fail( FETCH_WCB ( *window, Display ) );
-
-    window->State.Redisplay = GL_FALSE;
-
-    freeglut_return_if_fail( window->State.Visible );
-
-    fgSetWindow( window );
-
-    if( window->State.NeedToResize )
-    {
-        fghReshapeWindow(
-            window,
-            window->State.Width,
-            window->State.Height
-        );
-
-        window->State.NeedToResize = GL_FALSE;
-    }
-
-    INVOKE_WCB( *window, Display, ( ) );
-
-    fgSetWindow( current_window );
-}
-
-/*
- * A static helper function to execute display callback for a window
- */
-static void fghcbDisplayWindow( SFG_Window *window,
-                                SFG_Enumerator *enumerator )
-{
-    if( window->State.Redisplay &&
-        window->State.Visible )
-    {
-        window->State.Redisplay = GL_FALSE;
-
-#if TARGET_HOST_POSIX_X11
-        fghRedrawWindow ( window ) ;
-#elif TARGET_HOST_MS_WINDOWS
-
-        RedrawWindow(
-            window->Window.Handle, NULL, NULL,
-            RDW_NOERASE | RDW_INTERNALPAINT | RDW_INVALIDATE | RDW_UPDATENOW
-        );
-#endif
-    }
-
-    fgEnumSubWindows( window, fghcbDisplayWindow, enumerator );
-}
-
-/*
- * Make all windows perform a display call
- */
-static void fghDisplayAll( void )
-{
-    SFG_Enumerator enumerator;
-
-    enumerator.found = GL_FALSE;
-    enumerator.data  =  NULL;
-
-    fgEnumWindows( fghcbDisplayWindow, &enumerator );
-}
-
-/*
- * Window enumerator callback to check for the joystick polling code
- */
-static void fghcbCheckJoystickPolls( SFG_Window *window,
-                                     SFG_Enumerator *enumerator )
-{
-    long int checkTime = fgElapsedTime( );
-
-    if( window->State.JoystickLastPoll + window->State.JoystickPollRate <=
-        checkTime )
-    {
-#if !defined(_WIN32_WCE)
-        fgJoystickPollWindow( window );
-#endif /* !defined(_WIN32_WCE) */
-        window->State.JoystickLastPoll = checkTime;
-    }
-
-    fgEnumSubWindows( window, fghcbCheckJoystickPolls, enumerator );
-}
-
-/*
- * Check all windows for joystick polling
- */
-static void fghCheckJoystickPolls( void )
-{
-    SFG_Enumerator enumerator;
-
-    enumerator.found = GL_FALSE;
-    enumerator.data  =  NULL;
-
-    fgEnumWindows( fghcbCheckJoystickPolls, &enumerator );
-}
-
-/*
- * Check the global timers
- */
-static void fghCheckTimers( void )
-{
-    long checkTime = fgElapsedTime( );
-
-    while( fgState.Timers.First )
-    {
-        SFG_Timer *timer = fgState.Timers.First;
-
-        if( timer->TriggerTime > checkTime )
-            break;
-
-        fgListRemove( &fgState.Timers, &timer->Node );
-        fgListAppend( &fgState.FreeTimers, &timer->Node );
-
-        timer->Callback( timer->ID );
-    }
-}
-
-/* Platform-dependent time in milliseconds, as an unsigned 32-bit integer.
- * This value wraps every 49.7 days, but integer overflows cancel
- * when subtracting an initial start time, unless the total time exceeds
- * 32-bit, where the GLUT API return value is also overflowed.
- */  
-unsigned long fgSystemTime(void) {
-#if TARGET_HOST_SOLARIS || HAVE_GETTIMEOFDAY
-    struct timeval now;
-    gettimeofday( &now, NULL );
-    return now.tv_usec/1000 + now.tv_sec*1000;
-#elif TARGET_HOST_MS_WINDOWS
-#    if defined(_WIN32_WCE)
-    return GetTickCount();
-#    else
-    return timeGetTime();
-#    endif
-#endif
-}
-  
-/*
- * Elapsed Time
- */
-long fgElapsedTime( void )
-{
-    return (long) (fgSystemTime() - fgState.Time);
-}
-
-/*
- * Error Messages.
- */
-void fgError( const char *fmt, ... )
-{
-    va_list ap;
-
-    if (fgState.ErrorFunc) {
-
-        va_start( ap, fmt );
-
-        /* call user set error handler here */
-        fgState.ErrorFunc(fmt, ap);
-
-        va_end( ap );
-
-    } else {
-
-        va_start( ap, fmt );
-
-        fprintf( stderr, "freeglut ");
-        if( fgState.ProgramName )
-            fprintf( stderr, "(%s): ", fgState.ProgramName );
-        VFPRINTF( stderr, fmt, ap );
-        fprintf( stderr, "\n" );
-
-        va_end( ap );
-
-        if ( fgState.Initialised )
-            fgDeinitialize ();
-
-        exit( 1 );
-    }
-}
-
-void fgWarning( const char *fmt, ... )
-{
-    va_list ap;
-
-    if (fgState.WarningFunc) {
-
-        va_start( ap, fmt );
-
-        /* call user set warning handler here */
-        fgState.WarningFunc(fmt, ap);
-
-        va_end( ap );
-
-    } else {
-
-        va_start( ap, fmt );
-
-        fprintf( stderr, "freeglut ");
-        if( fgState.ProgramName )
-            fprintf( stderr, "(%s): ", fgState.ProgramName );
-        VFPRINTF( stderr, fmt, ap );
-        fprintf( stderr, "\n" );
-
-        va_end( ap );
-    }
-}
-
-
-/*
- * Indicates whether Joystick events are being used by ANY window.
- *
- * The current mechanism is to walk all of the windows and ask if
- * there is a joystick callback.  We have a short-circuit early
- * return if we find any joystick handler registered.
- *
- * The real way to do this is to make use of the glutTimer() API
- * to more cleanly re-implement the joystick API.  Then, this code
- * and all other "joystick timer" code can be yanked.
- *
- */
-static void fghCheckJoystickCallback( SFG_Window* w, SFG_Enumerator* e)
-{
-    if( FETCH_WCB( *w, Joystick ) )
-    {
-        e->found = GL_TRUE;
-        e->data = w;
-    }
-    fgEnumSubWindows( w, fghCheckJoystickCallback, e );
-}
-static int fghHaveJoystick( void )
-{
-    SFG_Enumerator enumerator;
-
-    enumerator.found = GL_FALSE;
-    enumerator.data = NULL;
-    fgEnumWindows( fghCheckJoystickCallback, &enumerator );
-    return !!enumerator.data;
-}
-static void fghHavePendingRedisplaysCallback( SFG_Window* w, SFG_Enumerator* e)
-{
-    if( w->State.Redisplay && w->State.Visible )
-    {
-        e->found = GL_TRUE;
-        e->data = w;
-    }
-    fgEnumSubWindows( w, fghHavePendingRedisplaysCallback, e );
-}
-static int fghHavePendingRedisplays (void)
-{
-    SFG_Enumerator enumerator;
-
-    enumerator.found = GL_FALSE;
-    enumerator.data = NULL;
-    fgEnumWindows( fghHavePendingRedisplaysCallback, &enumerator );
-    return !!enumerator.data;
-}
-/*
- * Returns the number of GLUT ticks (milliseconds) till the next timer event.
- */
-static long fghNextTimer( void )
-{
-    long ret = INT_MAX;
-    SFG_Timer *timer = fgState.Timers.First;
-
-    if( timer )
-        ret = timer->TriggerTime - fgElapsedTime();
-    if( ret < 0 )
-        ret = 0;
-
-    return ret;
-}
-/*
- * Does the magic required to relinquish the CPU until something interesting
- * happens.
- */
-static void fghSleepForEvents( void )
-{
-    long msec;
-
-    if( fgState.IdleCallback || fghHavePendingRedisplays( ) )
-        return;
-
-    msec = fghNextTimer( );
-    /* XXX Use GLUT timers for joysticks... */
-    /* XXX Dumb; forces granularity to .01sec */
-    if( fghHaveJoystick( ) && ( msec > 10 ) )     
-        msec = 10;
-
-#if TARGET_HOST_POSIX_X11
-    /*
-     * Possibly due to aggressive use of XFlush() and friends,
-     * it is possible to have our socket drained but still have
-     * unprocessed events.  (Or, this may just be normal with
-     * X, anyway?)  We do non-trivial processing of X events
-     * after the event-reading loop, in any case, so we
-     * need to allow that we may have an empty socket but non-
-     * empty event queue.
-     */
-    if( ! XPending( fgDisplay.Display ) )
-    {
-        fd_set fdset;
-        int err;
-        int socket;
-        struct timeval wait;
-
-        socket = ConnectionNumber( fgDisplay.Display );
-        FD_ZERO( &fdset );
-        FD_SET( socket, &fdset );
-        wait.tv_sec = msec / 1000;
-        wait.tv_usec = (msec % 1000) * 1000;
-        err = select( socket+1, &fdset, NULL, NULL, &wait );
-
-#ifdef HAVE_ERRNO_H
-        if( ( -1 == err ) && ( errno != EINTR ) )
-            fgWarning ( "freeglut select() error: %d", errno );
-#endif
-    }
-#elif TARGET_HOST_MS_WINDOWS
-    MsgWaitForMultipleObjects( 0, NULL, FALSE, msec, QS_ALLINPUT );
-#endif
-}
-
-#if TARGET_HOST_POSIX_X11
-/*
- * Returns GLUT modifier mask for the state field of an X11 event.
- */
-int fghGetXModifiers( int state )
-{
-    int ret = 0;
-
-    if( state & ( ShiftMask | LockMask ) )
-        ret |= GLUT_ACTIVE_SHIFT;
-    if( state & ControlMask )
-        ret |= GLUT_ACTIVE_CTRL;
-    if( state & Mod1Mask )
-        ret |= GLUT_ACTIVE_ALT;
-
-    return ret;
-}
-#endif
-
-
-#if TARGET_HOST_POSIX_X11 && _DEBUG
-
-static const char* fghTypeToString( int type )
-{
-    switch( type ) {
-    case KeyPress: return "KeyPress";
-    case KeyRelease: return "KeyRelease";
-    case ButtonPress: return "ButtonPress";
-    case ButtonRelease: return "ButtonRelease";
-    case MotionNotify: return "MotionNotify";
-    case EnterNotify: return "EnterNotify";
-    case LeaveNotify: return "LeaveNotify";
-    case FocusIn: return "FocusIn";
-    case FocusOut: return "FocusOut";
-    case KeymapNotify: return "KeymapNotify";
-    case Expose: return "Expose";
-    case GraphicsExpose: return "GraphicsExpose";
-    case NoExpose: return "NoExpose";
-    case VisibilityNotify: return "VisibilityNotify";
-    case CreateNotify: return "CreateNotify";
-    case DestroyNotify: return "DestroyNotify";
-    case UnmapNotify: return "UnmapNotify";
-    case MapNotify: return "MapNotify";
-    case MapRequest: return "MapRequest";
-    case ReparentNotify: return "ReparentNotify";
-    case ConfigureNotify: return "ConfigureNotify";
-    case ConfigureRequest: return "ConfigureRequest";
-    case GravityNotify: return "GravityNotify";
-    case ResizeRequest: return "ResizeRequest";
-    case CirculateNotify: return "CirculateNotify";
-    case CirculateRequest: return "CirculateRequest";
-    case PropertyNotify: return "PropertyNotify";
-    case SelectionClear: return "SelectionClear";
-    case SelectionRequest: return "SelectionRequest";
-    case SelectionNotify: return "SelectionNotify";
-    case ColormapNotify: return "ColormapNotify";
-    case ClientMessage: return "ClientMessage";
-    case MappingNotify: return "MappingNotify";
-    default: return "UNKNOWN";
-    }
-}
-
-static const char* fghBoolToString( Bool b )
-{
-    return b == False ? "False" : "True";
-}
-
-static const char* fghNotifyHintToString( char is_hint )
-{
-    switch( is_hint ) {
-    case NotifyNormal: return "NotifyNormal";
-    case NotifyHint: return "NotifyHint";
-    default: return "UNKNOWN";
-    }
-}
-
-static const char* fghNotifyModeToString( int mode )
-{
-    switch( mode ) {
-    case NotifyNormal: return "NotifyNormal";
-    case NotifyGrab: return "NotifyGrab";
-    case NotifyUngrab: return "NotifyUngrab";
-    case NotifyWhileGrabbed: return "NotifyWhileGrabbed";
-    default: return "UNKNOWN";
-    }
-}
-
-static const char* fghNotifyDetailToString( int detail )
-{
-    switch( detail ) {
-    case NotifyAncestor: return "NotifyAncestor";
-    case NotifyVirtual: return "NotifyVirtual";
-    case NotifyInferior: return "NotifyInferior";
-    case NotifyNonlinear: return "NotifyNonlinear";
-    case NotifyNonlinearVirtual: return "NotifyNonlinearVirtual";
-    case NotifyPointer: return "NotifyPointer";
-    case NotifyPointerRoot: return "NotifyPointerRoot";
-    case NotifyDetailNone: return "NotifyDetailNone";
-    default: return "UNKNOWN";
-    }
-}
-
-static const char* fghVisibilityToString( int state ) {
-    switch( state ) {
-    case VisibilityUnobscured: return "VisibilityUnobscured";
-    case VisibilityPartiallyObscured: return "VisibilityPartiallyObscured";
-    case VisibilityFullyObscured: return "VisibilityFullyObscured";
-    default: return "UNKNOWN";
-    }
-}
-
-static const char* fghConfigureDetailToString( int detail )
-{
-    switch( detail ) {
-    case Above: return "Above";
-    case Below: return "Below";
-    case TopIf: return "TopIf";
-    case BottomIf: return "BottomIf";
-    case Opposite: return "Opposite";
-    default: return "UNKNOWN";
-    }
-}
-
-static const char* fghPlaceToString( int place )
-{
-    switch( place ) {
-    case PlaceOnTop: return "PlaceOnTop";
-    case PlaceOnBottom: return "PlaceOnBottom";
-    default: return "UNKNOWN";
-    }
-}
-
-static const char* fghMappingRequestToString( int request )
-{
-    switch( request ) {
-    case MappingModifier: return "MappingModifier";
-    case MappingKeyboard: return "MappingKeyboard";
-    case MappingPointer: return "MappingPointer";
-    default: return "UNKNOWN";
-    }
-}
-
-static const char* fghPropertyStateToString( int state )
-{
-    switch( state ) {
-    case PropertyNewValue: return "PropertyNewValue";
-    case PropertyDelete: return "PropertyDelete";
-    default: return "UNKNOWN";
-    }
-}
-
-static const char* fghColormapStateToString( int state )
-{
-    switch( state ) {
-    case ColormapUninstalled: return "ColormapUninstalled";
-    case ColormapInstalled: return "ColormapInstalled";
-    default: return "UNKNOWN";
-    }
-}
-
-static void fghPrintEvent( XEvent *event )
-{
-    switch( event->type ) {
-
-    case KeyPress:
-    case KeyRelease: {
-        XKeyEvent *e = &event->xkey;
-        fgWarning( "%s: window=0x%x, root=0x%x, subwindow=0x%x, time=%lu, "
-                   "(x,y)=(%d,%d), (x_root,y_root)=(%d,%d), state=0x%x, "
-                   "keycode=%u, same_screen=%s", fghTypeToString( e->type ),
-                   e->window, e->root, e->subwindow, (unsigned long)e->time,
-                   e->x, e->y, e->x_root, e->y_root, e->state, e->keycode,
-                   fghBoolToString( e->same_screen ) );
-        break;
-    }
-
-    case ButtonPress:
-    case ButtonRelease: {
-        XButtonEvent *e = &event->xbutton;
-        fgWarning( "%s: window=0x%x, root=0x%x, subwindow=0x%x, time=%lu, "
-                   "(x,y)=(%d,%d), (x_root,y_root)=(%d,%d), state=0x%x, "
-                   "button=%u, same_screen=%d", fghTypeToString( e->type ),
-                   e->window, e->root, e->subwindow, (unsigned long)e->time,
-                   e->x, e->y, e->x_root, e->y_root, e->state, e->button,
-                   fghBoolToString( e->same_screen ) );
-        break;
-    }
-
-    case MotionNotify: {
-        XMotionEvent *e = &event->xmotion;
-        fgWarning( "%s: window=0x%x, root=0x%x, subwindow=0x%x, time=%lu, "
-                   "(x,y)=(%d,%d), (x_root,y_root)=(%d,%d), state=0x%x, "
-                   "is_hint=%s, same_screen=%d", fghTypeToString( e->type ),
-                   e->window, e->root, e->subwindow, (unsigned long)e->time,
-                   e->x, e->y, e->x_root, e->y_root, e->state,
-                   fghNotifyHintToString( e->is_hint ),
-                   fghBoolToString( e->same_screen ) );
-        break;
-    }
-
-    case EnterNotify:
-    case LeaveNotify: {
-        XCrossingEvent *e = &event->xcrossing;
-        fgWarning( "%s: window=0x%x, root=0x%x, subwindow=0x%x, time=%lu, "
-                   "(x,y)=(%d,%d), mode=%s, detail=%s, same_screen=%d, "
-                   "focus=%d, state=0x%x", fghTypeToString( e->type ),
-                   e->window, e->root, e->subwindow, (unsigned long)e->time,
-                   e->x, e->y, fghNotifyModeToString( e->mode ),
-                   fghNotifyDetailToString( e->detail ), (int)e->same_screen,
-                   (int)e->focus, e->state );
-        break;
-    }
-
-    case FocusIn:
-    case FocusOut: {
-        XFocusChangeEvent *e = &event->xfocus;
-        fgWarning( "%s: window=0x%x, mode=%s, detail=%s",
-                   fghTypeToString( e->type ), e->window,
-                   fghNotifyModeToString( e->mode ),
-                   fghNotifyDetailToString( e->detail ) );
-        break;
-    }
-
-    case KeymapNotify: {
-        XKeymapEvent *e = &event->xkeymap;
-        char buf[32 * 2 + 1];
-        int i;
-        for ( i = 0; i < 32; i++ ) {
-            snprintf( &buf[ i * 2 ], sizeof( buf ) - i * 2,
-                      "%02x", e->key_vector[ i ] );
-        }
-        buf[ i ] = '\0';
-        fgWarning( "%s: window=0x%x, %s", fghTypeToString( e->type ), e->window,
-                   buf );
-        break;
-    }
-
-    case Expose: {
-        XExposeEvent *e = &event->xexpose;
-        fgWarning( "%s: window=0x%x, (x,y)=(%d,%d), (width,height)=(%d,%d), "
-                   "count=%d", fghTypeToString( e->type ), e->window, e->x,
-                   e->y, e->width, e->height, e->count );
-        break;
-    }
-
-    case GraphicsExpose: {
-        XGraphicsExposeEvent *e = &event->xgraphicsexpose;
-        fgWarning( "%s: drawable=0x%x, (x,y)=(%d,%d), (width,height)=(%d,%d), "
-                   "count=%d, (major_code,minor_code)=(%d,%d)",
-                   fghTypeToString( e->type ), e->drawable, e->x, e->y,
-                   e->width, e->height, e->count, e->major_code,
-                   e->minor_code );
-        break;
-    }
-
-    case NoExpose: {
-        XNoExposeEvent *e = &event->xnoexpose;
-        fgWarning( "%s: drawable=0x%x, (major_code,minor_code)=(%d,%d)",
-                   fghTypeToString( e->type ), e->drawable, e->major_code,
-                   e->minor_code );
-        break;
-    }
-
-    case VisibilityNotify: {
-        XVisibilityEvent *e = &event->xvisibility;
-        fgWarning( "%s: window=0x%x, state=%s", fghTypeToString( e->type ),
-                   e->window, fghVisibilityToString( e->state) );
-        break;
-    }
-
-    case CreateNotify: {
-        XCreateWindowEvent *e = &event->xcreatewindow;
-        fgWarning( "%s: (x,y)=(%d,%d), (width,height)=(%d,%d), border_width=%d, "
-                   "window=0x%x, override_redirect=%s",
-                   fghTypeToString( e->type ), e->x, e->y, e->width, e->height,
-                   e->border_width, e->window,
-                   fghBoolToString( e->override_redirect ) );
-        break;
-    }
-
-    case DestroyNotify: {
-        XDestroyWindowEvent *e = &event->xdestroywindow;
-        fgWarning( "%s: event=0x%x, window=0x%x",
-                   fghTypeToString( e->type ), e->event, e->window );
-        break;
-    }
-
-    case UnmapNotify: {
-        XUnmapEvent *e = &event->xunmap;
-        fgWarning( "%s: event=0x%x, window=0x%x, from_configure=%s",
-                   fghTypeToString( e->type ), e->event, e->window,
-                   fghBoolToString( e->from_configure ) );
-        break;
-    }
-
-    case MapNotify: {
-        XMapEvent *e = &event->xmap;
-        fgWarning( "%s: event=0x%x, window=0x%x, override_redirect=%s",
-                   fghTypeToString( e->type ), e->event, e->window,
-                   fghBoolToString( e->override_redirect ) );
-        break;
-    }
-
-    case MapRequest: {
-        XMapRequestEvent *e = &event->xmaprequest;
-        fgWarning( "%s: parent=0x%x, window=0x%x",
-                   fghTypeToString( event->type ), e->parent, e->window );
-        break;
-    }
-
-    case ReparentNotify: {
-        XReparentEvent *e = &event->xreparent;
-        fgWarning( "%s: event=0x%x, window=0x%x, parent=0x%x, (x,y)=(%d,%d), "
-                   "override_redirect=%s", fghTypeToString( e->type ),
-                   e->event, e->window, e->parent, e->x, e->y,
-                   fghBoolToString( e->override_redirect ) );
-        break;
-    }
-
-    case ConfigureNotify: {
-        XConfigureEvent *e = &event->xconfigure;
-        fgWarning( "%s: event=0x%x, window=0x%x, (x,y)=(%d,%d), "
-                   "(width,height)=(%d,%d), border_width=%d, above=0x%x, "
-                   "override_redirect=%s", fghTypeToString( e->type ), e->event,
-                   e->window, e->x, e->y, e->width, e->height, e->border_width,
-                   e->above, fghBoolToString( e->override_redirect ) );
-        break;
-    }
-
-    case ConfigureRequest: {
-        XConfigureRequestEvent *e = &event->xconfigurerequest;
-        fgWarning( "%s: parent=0x%x, window=0x%x, (x,y)=(%d,%d), "
-                   "(width,height)=(%d,%d), border_width=%d, above=0x%x, "
-                   "detail=%s, value_mask=%lx", fghTypeToString( e->type ),
-                   e->parent, e->window, e->x, e->y, e->width, e->height,
-                   e->border_width, e->above,
-                   fghConfigureDetailToString( e->detail ), e->value_mask );
-        break;
-    }
-
-    case GravityNotify: {
-        XGravityEvent *e = &event->xgravity;
-        fgWarning( "%s: event=0x%x, window=0x%x, (x,y)=(%d,%d)",
-                   fghTypeToString( e->type ), e->event, e->window, e->x, e->y );
-        break;
-    }
-
-    case ResizeRequest: {
-        XResizeRequestEvent *e = &event->xresizerequest;
-        fgWarning( "%s: window=0x%x, (width,height)=(%d,%d)",
-                   fghTypeToString( e->type ), e->window, e->width, e->height );
-        break;
-    }
-
-    case CirculateNotify: {
-        XCirculateEvent *e = &event->xcirculate;
-        fgWarning( "%s: event=0x%x, window=0x%x, place=%s",
-                   fghTypeToString( e->type ), e->event, e->window,
-                   fghPlaceToString( e->place ) );
-        break;
-    }
-
-    case CirculateRequest: {
-        XCirculateRequestEvent *e = &event->xcirculaterequest;
-        fgWarning( "%s: parent=0x%x, window=0x%x, place=%s",
-                   fghTypeToString( e->type ), e->parent, e->window,
-                   fghPlaceToString( e->place ) );
-        break;
-    }
-
-    case PropertyNotify: {
-        XPropertyEvent *e = &event->xproperty;
-        fgWarning( "%s: window=0x%x, atom=%lu, time=%lu, state=%s",
-                   fghTypeToString( e->type ), e->window,
-                   (unsigned long)e->atom, (unsigned long)e->time,
-                   fghPropertyStateToString( e->state ) );
-        break;
-    }
-
-    case SelectionClear: {
-        XSelectionClearEvent *e = &event->xselectionclear;
-        fgWarning( "%s: window=0x%x, selection=%lu, time=%lu",
-                   fghTypeToString( e->type ), e->window,
-                   (unsigned long)e->selection, (unsigned long)e->time );
-        break;
-    }
-
-    case SelectionRequest: {
-        XSelectionRequestEvent *e = &event->xselectionrequest;
-        fgWarning( "%s: owner=0x%x, requestor=0x%x, selection=0x%x, "
-                   "target=0x%x, property=%lu, time=%lu",
-                   fghTypeToString( e->type ), e->owner, e->requestor,
-                   (unsigned long)e->selection, (unsigned long)e->target,
-                   (unsigned long)e->property, (unsigned long)e->time );
-        break;
-    }
-
-    case SelectionNotify: {
-        XSelectionEvent *e = &event->xselection;
-        fgWarning( "%s: requestor=0x%x, selection=0x%x, target=0x%x, "
-                   "property=%lu, time=%lu", fghTypeToString( e->type ),
-                   e->requestor, (unsigned long)e->selection,
-                   (unsigned long)e->target, (unsigned long)e->property,
-                   (unsigned long)e->time );
-        break;
-    }
-
-    case ColormapNotify: {
-        XColormapEvent *e = &event->xcolormap;
-        fgWarning( "%s: window=0x%x, colormap=%lu, new=%s, state=%s",
-                   fghTypeToString( e->type ), e->window,
-                   (unsigned long)e->colormap, fghBoolToString( e->new ),
-                   fghColormapStateToString( e->state ) );
-        break;
-    }
-
-    case ClientMessage: {
-        XClientMessageEvent *e = &event->xclient;
-        char buf[ 61 ];
-        char* p = buf;
-        char* end = buf + sizeof( buf );
-        int i;
-        switch( e->format ) {
-        case 8:
-          for ( i = 0; i < 20; i++, p += 3 ) {
-                snprintf( p, end - p, " %02x", e->data.b[ i ] );
-            }
-            break;
-        case 16:
-            for ( i = 0; i < 10; i++, p += 5 ) {
-                snprintf( p, end - p, " %04x", e->data.s[ i ] );
-            }
-            break;
-        case 32:
-            for ( i = 0; i < 5; i++, p += 9 ) {
-                snprintf( p, end - p, " %08lx", e->data.l[ i ] );
-            }
-            break;
-        }
-        *p = '\0';
-        fgWarning( "%s: window=0x%x, message_type=%lu, format=%d, data=(%s )",
-                   fghTypeToString( e->type ), e->window,
-                   (unsigned long)e->message_type, e->format, buf );
-        break;
-    }
-
-    case MappingNotify: {
-        XMappingEvent *e = &event->xmapping;
-        fgWarning( "%s: window=0x%x, request=%s, first_keycode=%d, count=%d",
-                   fghTypeToString( e->type ), e->window,
-                   fghMappingRequestToString( e->request ), e->first_keycode,
-                   e->count );
-        break;
-    }
-
-    default: {
-        fgWarning( "%s", fghTypeToString( event->type ) );
-        break;
-    }
-    }
-}
-
-#endif
-
-/* -- INTERFACE FUNCTIONS -------------------------------------------------- */
-
-/*
- * Executes a single iteration in the freeglut processing loop.
- */
-void FGAPIENTRY glutMainLoopEvent( void )
-{
-#if TARGET_HOST_POSIX_X11
-    SFG_Window* window;
-    XEvent event;
-
-    /* This code was repeated constantly, so here it goes into a definition: */
-#define GETWINDOW(a)                             \
-    window = fgWindowByHandle( event.a.window ); \
-    if( window == NULL )                         \
-        break;
-
-#define GETMOUSE(a)                              \
-    window->State.MouseX = event.a.x;            \
-    window->State.MouseY = event.a.y;
-
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutMainLoopEvent" );
-
-    while( XPending( fgDisplay.Display ) )
-    {
-        XNextEvent( fgDisplay.Display, &event );
-#if _DEBUG
-        fghPrintEvent( &event );
-#endif
-
-        switch( event.type )
-        {
-        case ClientMessage:
-            if(fgIsSpaceballXEvent(&event)) {
-                fgSpaceballHandleXEvent(&event);
-                break;
-            }
-            /* Destroy the window when the WM_DELETE_WINDOW message arrives */
-            if( (Atom) event.xclient.data.l[ 0 ] == fgDisplay.DeleteWindow )
-            {
-                GETWINDOW( xclient );
-
-                fgDestroyWindow ( window );
-
-                if( fgState.ActionOnWindowClose == GLUT_ACTION_EXIT )
-                {
-                    fgDeinitialize( );
-                    exit( 0 );
-                }
-                else if( fgState.ActionOnWindowClose == GLUT_ACTION_GLUTMAINLOOP_RETURNS )
-                    fgState.ExecState = GLUT_EXEC_STATE_STOP;
-
-                return;
-            }
-            break;
-
-            /*
-             * CreateNotify causes a configure-event so that sub-windows are
-             * handled compatibly with GLUT.  Otherwise, your sub-windows
-             * (in freeglut only) will not get an initial reshape event,
-             * which can break things.
-             *
-             * GLUT presumably does this because it generally tries to treat
-             * sub-windows the same as windows.
-             */
-        case CreateNotify:
-        case ConfigureNotify:
-            {
-                int width, height;
-                if( event.type == CreateNotify ) {
-                    GETWINDOW( xcreatewindow );
-                    width = event.xcreatewindow.width;
-                    height = event.xcreatewindow.height;
-                } else {
-                    GETWINDOW( xconfigure );
-                    width = event.xconfigure.width;
-                    height = event.xconfigure.height;
-                }
-
-                if( ( width != window->State.OldWidth ) ||
-                    ( height != window->State.OldHeight ) )
-                {
-                    SFG_Window *current_window = fgStructure.CurrentWindow;
-
-                    window->State.OldWidth = width;
-                    window->State.OldHeight = height;
-                    if( FETCH_WCB( *window, Reshape ) )
-                        INVOKE_WCB( *window, Reshape, ( width, height ) );
-                    else
-                    {
-                        fgSetWindow( window );
-                        glViewport( 0, 0, width, height );
-                    }
-                    glutPostRedisplay( );
-                    if( window->IsMenu )
-                        fgSetWindow( current_window );
-                }
-            }
-            break;
-
-        case DestroyNotify:
-            /*
-             * This is sent to confirm the XDestroyWindow call.
-             *
-             * XXX WHY is this commented out?  Should we re-enable it?
-             */
-            /* fgAddToWindowDestroyList ( window ); */
-            break;
-
-        case Expose:
-            /*
-             * We are too dumb to process partial exposes...
-             *
-             * XXX Well, we could do it.  However, it seems to only
-             * XXX be potentially useful for single-buffered (since
-             * XXX double-buffered does not respect viewport when we
-             * XXX do a buffer-swap).
-             *
-             */
-            if( event.xexpose.count == 0 )
-            {
-                GETWINDOW( xexpose );
-                window->State.Redisplay = GL_TRUE;
-            }
-            break;
-
-        case MapNotify:
-            break;
-
-        case UnmapNotify:
-            /* We get this when iconifying a window. */ 
-            GETWINDOW( xunmap );
-            INVOKE_WCB( *window, WindowStatus, ( GLUT_HIDDEN ) );
-            window->State.Visible = GL_FALSE;
-            break;
-
-        case MappingNotify:
-            /*
-             * Have the client's keyboard knowledge updated (xlib.ps,
-             * page 206, says that's a good thing to do)
-             */
-            XRefreshKeyboardMapping( (XMappingEvent *) &event );
-            break;
-
-        case VisibilityNotify:
-        {
-            /*
-             * Sending this event, the X server can notify us that the window
-             * has just acquired one of the three possible visibility states:
-             * VisibilityUnobscured, VisibilityPartiallyObscured or
-             * VisibilityFullyObscured. Note that we DO NOT receive a
-             * VisibilityNotify event when iconifying a window, we only get an
-             * UnmapNotify then.
-             */
-            GETWINDOW( xvisibility );
-            switch( event.xvisibility.state )
-            {
-            case VisibilityUnobscured:
-                INVOKE_WCB( *window, WindowStatus, ( GLUT_FULLY_RETAINED ) );
-                window->State.Visible = GL_TRUE;
-                break;
-
-            case VisibilityPartiallyObscured:
-                INVOKE_WCB( *window, WindowStatus,
-                            ( GLUT_PARTIALLY_RETAINED ) );
-                window->State.Visible = GL_TRUE;
-                break;
-
-            case VisibilityFullyObscured:
-                INVOKE_WCB( *window, WindowStatus, ( GLUT_FULLY_COVERED ) );
-                window->State.Visible = GL_FALSE;
-                break;
-
-            default:
-                fgWarning( "Unknown X visibility state: %d",
-                           event.xvisibility.state );
-                break;
-            }
-        }
-        break;
-
-        case EnterNotify:
-        case LeaveNotify:
-            GETWINDOW( xcrossing );
-            GETMOUSE( xcrossing );
-            if( ( event.type == LeaveNotify ) && window->IsMenu &&
-                window->ActiveMenu && window->ActiveMenu->IsActive )
-                fgUpdateMenuHighlight( window->ActiveMenu );
-
-            INVOKE_WCB( *window, Entry, ( ( EnterNotify == event.type ) ?
-                                          GLUT_ENTERED :
-                                          GLUT_LEFT ) );
-            break;
-
-        case MotionNotify:
-        {
-            GETWINDOW( xmotion );
-            GETMOUSE( xmotion );
-
-            if( window->ActiveMenu )
-            {
-                if( window == window->ActiveMenu->ParentWindow )
-                {
-                    window->ActiveMenu->Window->State.MouseX =
-                        event.xmotion.x_root - window->ActiveMenu->X;
-                    window->ActiveMenu->Window->State.MouseY =
-                        event.xmotion.y_root - window->ActiveMenu->Y;
-                }
-
-                fgUpdateMenuHighlight( window->ActiveMenu );
-
-                break;
-            }
-
-            /*
-             * XXX For more than 5 buttons, just check {event.xmotion.state},
-             * XXX rather than a host of bit-masks?  Or maybe we need to
-             * XXX track ButtonPress/ButtonRelease events in our own
-             * XXX bit-mask?
-             */
-            fgState.Modifiers = fghGetXModifiers( event.xmotion.state );
-            if ( event.xmotion.state & ( Button1Mask | Button2Mask | Button3Mask | Button4Mask | Button5Mask ) ) {
-                INVOKE_WCB( *window, Motion, ( event.xmotion.x,
-                                               event.xmotion.y ) );
-            } else {
-                INVOKE_WCB( *window, Passive, ( event.xmotion.x,
-                                                event.xmotion.y ) );
-            }
-            fgState.Modifiers = INVALID_MODIFIERS;
-        }
-        break;
-
-        case ButtonRelease:
-        case ButtonPress:
-        {
-            GLboolean pressed = GL_TRUE;
-            int button;
-
-            if( event.type == ButtonRelease )
-                pressed = GL_FALSE ;
-
-            /*
-             * A mouse button has been pressed or released. Traditionally,
-             * break if the window was found within the freeglut structures.
-             */
-            GETWINDOW( xbutton );
-            GETMOUSE( xbutton );
-
-            /*
-             * An X button (at least in XFree86) is numbered from 1.
-             * A GLUT button is numbered from 0.
-             * Old GLUT passed through buttons other than just the first
-             * three, though it only gave symbolic names and official
-             * support to the first three.
-             */
-            button = event.xbutton.button - 1;
-
-            /*
-             * Do not execute the application's mouse callback if a menu
-             * is hooked to this button.  In that case an appropriate
-             * private call should be generated.
-             */
-            if( fgCheckActiveMenu( window, button, pressed,
-                                   event.xbutton.x_root, event.xbutton.y_root ) )
-                break;
-
-            /*
-             * Check if there is a mouse or mouse wheel callback hooked to the
-             * window
-             */
-            if( ! FETCH_WCB( *window, Mouse ) &&
-                ! FETCH_WCB( *window, MouseWheel ) )
-                break;
-
-            fgState.Modifiers = fghGetXModifiers( event.xbutton.state );
-
-            /* Finally execute the mouse or mouse wheel callback */
-            if( ( button < glutDeviceGet ( GLUT_NUM_MOUSE_BUTTONS ) ) || ( ! FETCH_WCB( *window, MouseWheel ) ) )
-                INVOKE_WCB( *window, Mouse, ( button,
-                                              pressed ? GLUT_DOWN : GLUT_UP,
-                                              event.xbutton.x,
-                                              event.xbutton.y )
-                );
-            else
-            {
-                /*
-                 * Map 4 and 5 to wheel zero; EVEN to +1, ODD to -1
-                 *  "  6 and 7 "    "   one; ...
-                 *
-                 * XXX This *should* be behind some variables/macros,
-                 * XXX since the order and numbering isn't certain
-                 * XXX See XFree86 configuration docs (even back in the
-                 * XXX 3.x days, and especially with 4.x).
-                 *
-                 * XXX Note that {button} has already been decremented
-                 * XXX in mapping from X button numbering to GLUT.
-                                *
-                                * XXX Should add support for partial wheel turns as Windows does -- 5/27/11
-                 */
-                int wheel_number = (button - glutDeviceGet ( GLUT_NUM_MOUSE_BUTTONS )) / 2;
-                int direction = -1;
-                if( button % 2 )
-                    direction = 1;
-
-                if( pressed )
-                    INVOKE_WCB( *window, MouseWheel, ( wheel_number,
-                                                       direction,
-                                                       event.xbutton.x,
-                                                       event.xbutton.y )
-                    );
-            }
-            fgState.Modifiers = INVALID_MODIFIERS;
-        }
-        break;
-
-        case KeyRelease:
-        case KeyPress:
-        {
-            FGCBKeyboard keyboard_cb;
-            FGCBSpecial special_cb;
-
-            GETWINDOW( xkey );
-            GETMOUSE( xkey );
-
-            /* Detect auto repeated keys, if configured globally or per-window */
-
-            if ( fgState.KeyRepeat==GLUT_KEY_REPEAT_OFF || window->State.IgnoreKeyRepeat==GL_TRUE )
-            {
-                if (event.type==KeyRelease)
-                {
-                    /*
-                     * Look at X11 keystate to detect repeat mode.
-                     * While X11 says the key is actually held down, we'll ignore KeyRelease/KeyPress pairs.
-                     */
-
-                    char keys[32];
-                    XQueryKeymap( fgDisplay.Display, keys ); /* Look at X11 keystate to detect repeat mode */
-
-                    if ( event.xkey.keycode<256 )            /* XQueryKeymap is limited to 256 keycodes    */
-                    {
-                        if ( keys[event.xkey.keycode>>3] & (1<<(event.xkey.keycode%8)) )
-                            window->State.KeyRepeating = GL_TRUE;
-                        else
-                            window->State.KeyRepeating = GL_FALSE;
-                    }
-                }
-            }
-            else
-                window->State.KeyRepeating = GL_FALSE;
-
-            /* Cease processing this event if it is auto repeated */
-
-            if (window->State.KeyRepeating)
-            {
-                if (event.type == KeyPress) window->State.KeyRepeating = GL_FALSE;
-                break;
-            }
-
-            if( event.type == KeyPress )
-            {
-                keyboard_cb = (FGCBKeyboard)( FETCH_WCB( *window, Keyboard ));
-                special_cb  = (FGCBSpecial) ( FETCH_WCB( *window, Special  ));
-            }
-            else
-            {
-                keyboard_cb = (FGCBKeyboard)( FETCH_WCB( *window, KeyboardUp ));
-                special_cb  = (FGCBSpecial) ( FETCH_WCB( *window, SpecialUp  ));
-            }
-
-            /* Is there a keyboard/special callback hooked for this window? */
-            if( keyboard_cb || special_cb )
-            {
-                XComposeStatus composeStatus;
-                char asciiCode[ 32 ];
-                KeySym keySym;
-                int len;
-
-                /* Check for the ASCII/KeySym codes associated with the event: */
-                len = XLookupString( &event.xkey, asciiCode, sizeof(asciiCode),
-                                     &keySym, &composeStatus
-                );
-
-                /* GLUT API tells us to have two separate callbacks... */
-                if( len > 0 )
-                {
-                    /* ...one for the ASCII translateable keypresses... */
-                    if( keyboard_cb )
-                    {
-                        fgSetWindow( window );
-                        fgState.Modifiers = fghGetXModifiers( event.xkey.state );
-                        keyboard_cb( asciiCode[ 0 ],
-                                     event.xkey.x, event.xkey.y
-                        );
-                        fgState.Modifiers = INVALID_MODIFIERS;
-                    }
-                }
-                else
-                {
-                    int special = -1;
-
-                    /*
-                     * ...and one for all the others, which need to be
-                     * translated to GLUT_KEY_Xs...
-                     */
-                    switch( keySym )
-                    {
-                    case XK_F1:     special = GLUT_KEY_F1;     break;
-                    case XK_F2:     special = GLUT_KEY_F2;     break;
-                    case XK_F3:     special = GLUT_KEY_F3;     break;
-                    case XK_F4:     special = GLUT_KEY_F4;     break;
-                    case XK_F5:     special = GLUT_KEY_F5;     break;
-                    case XK_F6:     special = GLUT_KEY_F6;     break;
-                    case XK_F7:     special = GLUT_KEY_F7;     break;
-                    case XK_F8:     special = GLUT_KEY_F8;     break;
-                    case XK_F9:     special = GLUT_KEY_F9;     break;
-                    case XK_F10:    special = GLUT_KEY_F10;    break;
-                    case XK_F11:    special = GLUT_KEY_F11;    break;
-                    case XK_F12:    special = GLUT_KEY_F12;    break;
-
-                    case XK_KP_Left:
-                    case XK_Left:   special = GLUT_KEY_LEFT;   break;
-                    case XK_KP_Right:
-                    case XK_Right:  special = GLUT_KEY_RIGHT;  break;
-                    case XK_KP_Up:
-                    case XK_Up:     special = GLUT_KEY_UP;     break;
-                    case XK_KP_Down:
-                    case XK_Down:   special = GLUT_KEY_DOWN;   break;
-
-                    case XK_KP_Prior:
-                    case XK_Prior:  special = GLUT_KEY_PAGE_UP; break;
-                    case XK_KP_Next:
-                    case XK_Next:   special = GLUT_KEY_PAGE_DOWN; break;
-                    case XK_KP_Home:
-                    case XK_Home:   special = GLUT_KEY_HOME;   break;
-                    case XK_KP_End:
-                    case XK_End:    special = GLUT_KEY_END;    break;
-                    case XK_KP_Insert:
-                    case XK_Insert: special = GLUT_KEY_INSERT; break;
-
-                    case XK_Num_Lock :  special = GLUT_KEY_NUM_LOCK;  break;
-                    case XK_KP_Begin :  special = GLUT_KEY_BEGIN;     break;
-                    case XK_KP_Delete:  special = GLUT_KEY_DELETE;    break;
-
-                    case XK_Shift_L:   special = GLUT_KEY_SHIFT_L;    break;
-                    case XK_Shift_R:   special = GLUT_KEY_SHIFT_R;    break;
-                    case XK_Control_L: special = GLUT_KEY_CTRL_L;     break;
-                    case XK_Control_R: special = GLUT_KEY_CTRL_R;     break;
-                    case XK_Alt_L:     special = GLUT_KEY_ALT_L;      break;
-                    case XK_Alt_R:     special = GLUT_KEY_ALT_R;      break;
-                    }
-
-                    /*
-                     * Execute the callback (if one has been specified),
-                     * given that the special code seems to be valid...
-                     */
-                    if( special_cb && (special != -1) )
-                    {
-                        fgSetWindow( window );
-                        fgState.Modifiers = fghGetXModifiers( event.xkey.state );
-                        special_cb( special, event.xkey.x, event.xkey.y );
-                        fgState.Modifiers = INVALID_MODIFIERS;
-                    }
-                }
-            }
-        }
-        break;
-
-        case ReparentNotify:
-            break; /* XXX Should disable this event */
-
-        /* Not handled */
-        case GravityNotify:
-            break;
-
-        default:
-            /* enter handling of Extension Events here */
-            #ifdef HAVE_X11_EXTENSIONS_XINPUT2_H
-                fgHandleExtensionEvents( &event );
-            #endif
-            break;
-        }
-    }
-
-#elif TARGET_HOST_MS_WINDOWS
-
-    MSG stMsg;
-
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutMainLoopEvent" );
-
-    while( PeekMessage( &stMsg, NULL, 0, 0, PM_NOREMOVE ) )
-    {
-        if( GetMessage( &stMsg, NULL, 0, 0 ) == 0 )
-        {
-            if( fgState.ActionOnWindowClose == GLUT_ACTION_EXIT )
-            {
-                fgDeinitialize( );
-                exit( 0 );
-            }
-            else if( fgState.ActionOnWindowClose == GLUT_ACTION_GLUTMAINLOOP_RETURNS )
-                fgState.ExecState = GLUT_EXEC_STATE_STOP;
-
-            return;
-        }
-
-        TranslateMessage( &stMsg );
-        DispatchMessage( &stMsg );
-    }
-#endif
-
-    if( fgState.Timers.First )
-        fghCheckTimers( );
-    fghCheckJoystickPolls( );
-    fghDisplayAll( );
-
-    fgCloseWindows( );
-}
-
-/*
- * Enters the freeglut processing loop.
- * Stays until the "ExecState" changes to "GLUT_EXEC_STATE_STOP".
- */
-void FGAPIENTRY glutMainLoop( void )
-{
-    int action;
-
-#if TARGET_HOST_MS_WINDOWS
-    SFG_Window *window = (SFG_Window *)fgStructure.Windows.First ;
-#endif
-
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutMainLoop" );
-
-#if TARGET_HOST_MS_WINDOWS
-    /*
-     * Processing before the main loop:  If there is a window which is open and
-     * which has a visibility callback, call it.  I know this is an ugly hack,
-     * but I'm not sure what else to do about it.  Ideally we should leave
-     * something uninitialized in the create window code and initialize it in
-     * the main loop, and have that initialization create a "WM_ACTIVATE"
-     * message.  Then we would put the visibility callback code in the
-     * "case WM_ACTIVATE" block below.         - John Fay -- 10/24/02
-     */
-    while( window )
-    {
-        if ( FETCH_WCB( *window, Visibility ) )
-        {
-            SFG_Window *current_window = fgStructure.CurrentWindow ;
-
-            INVOKE_WCB( *window, Visibility, ( window->State.Visible ) );
-            fgSetWindow( current_window );
-        }
-
-        window = (SFG_Window *)window->Node.Next ;
-    }
-#endif
-
-    fgState.ExecState = GLUT_EXEC_STATE_RUNNING ;
-    while( fgState.ExecState == GLUT_EXEC_STATE_RUNNING )
-    {
-        SFG_Window *window;
-
-        glutMainLoopEvent( );
-        /*
-         * Step through the list of windows, seeing if there are any
-         * that are not menus
-         */
-        for( window = ( SFG_Window * )fgStructure.Windows.First;
-             window;
-             window = ( SFG_Window * )window->Node.Next )
-            if ( ! ( window->IsMenu ) )
-                break;
-
-        if( ! window )
-            fgState.ExecState = GLUT_EXEC_STATE_STOP;
-        else
-        {
-            if( fgState.IdleCallback )
-            {
-                if( fgStructure.CurrentWindow &&
-                    fgStructure.CurrentWindow->IsMenu )
-                    /* fail safe */
-                    fgSetWindow( window );
-                fgState.IdleCallback( );
-            }
-
-            fghSleepForEvents( );
-        }
-    }
-
-    /*
-     * When this loop terminates, destroy the display, state and structure
-     * of a freeglut session, so that another glutInit() call can happen
-     *
-     * Save the "ActionOnWindowClose" because "fgDeinitialize" resets it.
-     */
-    action = fgState.ActionOnWindowClose;
-    fgDeinitialize( );
-    if( action == GLUT_ACTION_EXIT )
-        exit( 0 );
-}
-
-/*
- * Leaves the freeglut processing loop.
- */
-void FGAPIENTRY glutLeaveMainLoop( void )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutLeaveMainLoop" );
-    fgState.ExecState = GLUT_EXEC_STATE_STOP ;
-}
-
-
-#if TARGET_HOST_MS_WINDOWS
-/*
- * Determine a GLUT modifer mask based on MS-WINDOWS system info.
- */
-static int fghGetWin32Modifiers (void)
-{
-    return
-        ( ( ( GetKeyState( VK_LSHIFT   ) < 0 ) ||
-            ( GetKeyState( VK_RSHIFT   ) < 0 )) ? GLUT_ACTIVE_SHIFT : 0 ) |
-        ( ( ( GetKeyState( VK_LCONTROL ) < 0 ) ||
-            ( GetKeyState( VK_RCONTROL ) < 0 )) ? GLUT_ACTIVE_CTRL  : 0 ) |
-        ( ( ( GetKeyState( VK_LMENU    ) < 0 ) ||
-            ( GetKeyState( VK_RMENU    ) < 0 )) ? GLUT_ACTIVE_ALT   : 0 );
-}
-
-/*
- * The window procedure for handling Win32 events
- */
-LRESULT CALLBACK fgWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam,
-                               LPARAM lParam )
-{
-    static unsigned char lControl = 0, rControl = 0, lShift = 0,
-                         rShift = 0, lAlt = 0, rAlt = 0;
-
-    SFG_Window* window;
-    PAINTSTRUCT ps;
-    LRESULT lRet = 1;
-
-    FREEGLUT_INTERNAL_ERROR_EXIT_IF_NOT_INITIALISED ( "Event Handler" ) ;
-
-    window = fgWindowByHandle( hWnd );
-
-    if ( ( window == NULL ) && ( uMsg != WM_CREATE ) )
-      return DefWindowProc( hWnd, uMsg, wParam, lParam );
-
-    /* printf ( "Window %3d message <%04x> %12d %12d\n", window?window->ID:0,
-             uMsg, wParam, lParam ); */
-
-    if ( window )
-    {
-      /* Checking for CTRL, ALT, and SHIFT key positions:  Key Down! */
-      if ( !lControl && GetAsyncKeyState ( VK_LCONTROL ) )
-      {
-          INVOKE_WCB   ( *window, Special,
-                        ( GLUT_KEY_CTRL_L, window->State.MouseX, window->State.MouseY )
-                      );
-
-          lControl = 1;
-      }
-
-      if ( !rControl && GetAsyncKeyState ( VK_RCONTROL ) )
-      {
-          INVOKE_WCB ( *window, Special,
-                       ( GLUT_KEY_CTRL_R, window->State.MouseX, window->State.MouseY )
-                     );
-
-          rControl = 1;
-      }
-
-      if ( !lShift && GetAsyncKeyState ( VK_LSHIFT ) )
-      {
-          INVOKE_WCB ( *window, Special,
-                       ( GLUT_KEY_SHIFT_L, window->State.MouseX, window->State.MouseY )
-                     );
-
-          lShift = 1;
-      }
-
-      if ( !rShift && GetAsyncKeyState ( VK_RSHIFT ) )
-      {
-          INVOKE_WCB ( *window, Special,
-                       ( GLUT_KEY_SHIFT_R, window->State.MouseX, window->State.MouseY )
-                     );
-
-          rShift = 1;
-      }
-
-      if ( !lAlt && GetAsyncKeyState ( VK_LMENU ) )
-      {
-          INVOKE_WCB ( *window, Special,
-                       ( GLUT_KEY_ALT_L, window->State.MouseX, window->State.MouseY )
-                     );
-
-          lAlt = 1;
-      }
-
-      if ( !rAlt && GetAsyncKeyState ( VK_RMENU ) )
-      {
-          INVOKE_WCB ( *window, Special,
-                       ( GLUT_KEY_ALT_R, window->State.MouseX, window->State.MouseY )
-                     );
-
-          rAlt = 1;
-      }
-
-      /* Checking for CTRL, ALT, and SHIFT key positions:  Key Up! */
-      if ( lControl && !GetAsyncKeyState ( VK_LCONTROL ) )
-      {
-          INVOKE_WCB ( *window, SpecialUp,
-                       ( GLUT_KEY_CTRL_L, window->State.MouseX, window->State.MouseY )
-                     );
-
-          lControl = 0;
-      }
-
-      if ( rControl && !GetAsyncKeyState ( VK_RCONTROL ) )
-      {
-          INVOKE_WCB ( *window, SpecialUp,
-                       ( GLUT_KEY_CTRL_R, window->State.MouseX, window->State.MouseY )
-                     );
-
-          rControl = 0;
-      }
-
-      if ( lShift && !GetAsyncKeyState ( VK_LSHIFT ) )
-      {
-          INVOKE_WCB ( *window, SpecialUp,
-                       ( GLUT_KEY_SHIFT_L, window->State.MouseX, window->State.MouseY )
-                     );
-
-          lShift = 0;
-      }
-
-      if ( rShift && !GetAsyncKeyState ( VK_RSHIFT ) )
-      {
-          INVOKE_WCB ( *window, SpecialUp,
-                       ( GLUT_KEY_SHIFT_R, window->State.MouseX, window->State.MouseY )
-                     );
-
-          rShift = 0;
-      }
-
-      if ( lAlt && !GetAsyncKeyState ( VK_LMENU ) )
-      {
-          INVOKE_WCB ( *window, SpecialUp,
-                       ( GLUT_KEY_ALT_L, window->State.MouseX, window->State.MouseY )
-                     );
-
-          lAlt = 0;
-      }
-
-      if ( rAlt && !GetAsyncKeyState ( VK_RMENU ) )
-      {
-          INVOKE_WCB ( *window, SpecialUp,
-                       ( GLUT_KEY_ALT_R, window->State.MouseX, window->State.MouseY )
-                     );
-
-          rAlt = 0;
-      }
-    }
-
-    switch( uMsg )
-    {
-    case WM_CREATE:
-        /* The window structure is passed as the creation structure parameter... */
-        window = (SFG_Window *) (((LPCREATESTRUCT) lParam)->lpCreateParams);
-        FREEGLUT_INTERNAL_ERROR_EXIT ( ( window != NULL ), "Cannot create window",
-                                       "fgWindowProc" );
-
-        window->Window.Handle = hWnd;
-        window->Window.Device = GetDC( hWnd );
-        if( window->IsMenu )
-        {
-            unsigned int current_DisplayMode = fgState.DisplayMode;
-            fgState.DisplayMode = GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH;
-#if !defined(_WIN32_WCE)
-            fgSetupPixelFormat( window, GL_FALSE, PFD_MAIN_PLANE );
-#endif
-            fgState.DisplayMode = current_DisplayMode;
-
-            if( fgStructure.MenuContext )
-                wglMakeCurrent( window->Window.Device,
-                                fgStructure.MenuContext->MContext
-                );
-            else
-            {
-                fgStructure.MenuContext =
-                    (SFG_MenuContext *)malloc( sizeof(SFG_MenuContext) );
-                fgStructure.MenuContext->MContext =
-                    wglCreateContext( window->Window.Device );
-            }
-
-            /* window->Window.Context = wglGetCurrentContext ();   */
-            window->Window.Context = wglCreateContext( window->Window.Device );
-        }
-        else
-        {
-#if !defined(_WIN32_WCE)
-            fgSetupPixelFormat( window, GL_FALSE, PFD_MAIN_PLANE );
-#endif
-
-            if( ! fgState.UseCurrentContext )
-                window->Window.Context =
-                    wglCreateContext( window->Window.Device );
-            else
-            {
-                window->Window.Context = wglGetCurrentContext( );
-                if( ! window->Window.Context )
-                    window->Window.Context =
-                        wglCreateContext( window->Window.Device );
-            }
-
-#if !defined(_WIN32_WCE)
-            fgNewWGLCreateContext( window );
-#endif
-        }
-
-        window->State.NeedToResize = GL_TRUE;
-        /* if we used CW_USEDEFAULT (thats a negative value) for the size
-         * of the window, query the window now for the size at which it
-         * was created.
-         */
-        if( ( window->State.Width < 0 ) || ( window->State.Height < 0 ) )
-        {
-            SFG_Window *current_window = fgStructure.CurrentWindow;
-
-            fgSetWindow( window );
-            window->State.Width = glutGet( GLUT_WINDOW_WIDTH );
-            window->State.Height = glutGet( GLUT_WINDOW_HEIGHT );
-            fgSetWindow( current_window );
-        }
-
-        ReleaseDC( window->Window.Handle, window->Window.Device );
-
-#if defined(_WIN32_WCE)
-        /* Take over button handling */
-        {
-            HINSTANCE dxDllLib=LoadLibrary(_T("gx.dll"));
-            if (dxDllLib)
-            {
-                GXGetDefaultKeys_=(GXGETDEFAULTKEYS)GetProcAddress(dxDllLib, _T("?GXGetDefaultKeys@@YA?AUGXKeyList@@H@Z"));
-                GXOpenInput_=(GXOPENINPUT)GetProcAddress(dxDllLib, _T("?GXOpenInput@@YAHXZ"));
-            }
-
-            if(GXOpenInput_)
-                (*GXOpenInput_)();
-            if(GXGetDefaultKeys_)
-                gxKeyList = (*GXGetDefaultKeys_)(GX_LANDSCAPEKEYS);
-        }
-
-#endif /* defined(_WIN32_WCE) */
-        break;
-
-    case WM_SIZE:
-        /*
-         * If the window is visible, then it is the user manually resizing it.
-         * If it is not, then it is the system sending us a dummy resize with
-         * zero dimensions on a "glutIconifyWindow" call.
-         */
-        if( window->State.Visible )
-        {
-            window->State.NeedToResize = GL_TRUE;
-#if defined(_WIN32_WCE)
-            window->State.Width  = HIWORD(lParam);
-            window->State.Height = LOWORD(lParam);
-#else
-            window->State.Width  = LOWORD(lParam);
-            window->State.Height = HIWORD(lParam);
-#endif /* defined(_WIN32_WCE) */
-        }
-
-        break;
-
-    case WM_SETFOCUS:
-/*        printf("WM_SETFOCUS: %p\n", window ); */
-        lRet = DefWindowProc( hWnd, uMsg, wParam, lParam );
-        INVOKE_WCB( *window, Entry, ( GLUT_ENTERED ) );
-        break;
-
-    case WM_KILLFOCUS:
-/*        printf("WM_KILLFOCUS: %p\n", window ); */
-        lRet = DefWindowProc( hWnd, uMsg, wParam, lParam );
-        INVOKE_WCB( *window, Entry, ( GLUT_LEFT ) );
-
-        if( window->IsMenu &&
-            window->ActiveMenu && window->ActiveMenu->IsActive )
-            fgUpdateMenuHighlight( window->ActiveMenu );
-
-        break;
-
-#if 0
-    case WM_ACTIVATE:
-        if (LOWORD(wParam) != WA_INACTIVE)
-        {
-/*            printf("WM_ACTIVATE: fgSetCursor( %p, %d)\n", window,
-                   window->State.Cursor ); */
-            fgSetCursor( window, window->State.Cursor );
-        }
-
-        lRet = DefWindowProc( hWnd, uMsg, wParam, lParam );
-        break;
-#endif
-
-    case WM_SETCURSOR:
-/*      printf ( "Cursor event %x %x %x %x\n", window, window->State.Cursor, lParam, wParam ) ; */
-        if( LOWORD( lParam ) == HTCLIENT )
-            fgSetCursor ( window, window->State.Cursor ) ;
-        else
-            lRet = DefWindowProc( hWnd, uMsg, wParam, lParam );
-        break;
-
-    case WM_SHOWWINDOW:
-        window->State.Visible = GL_TRUE;
-        window->State.Redisplay = GL_TRUE;
-        break;
-
-    case WM_PAINT:
-        /* Turn on the visibility in case it was turned off somehow */
-        window->State.Visible = GL_TRUE;
-        BeginPaint( hWnd, &ps );
-        fghRedrawWindow( window );
-        EndPaint( hWnd, &ps );
-        break;
-
-    case WM_CLOSE:
-        fgDestroyWindow ( window );
-        if ( fgState.ActionOnWindowClose != GLUT_ACTION_CONTINUE_EXECUTION )
-            PostQuitMessage(0);
-        break;
-
-    case WM_DESTROY:
-        /*
-         * The window already got destroyed, so don't bother with it.
-         */
-        return 0;
-
-    case WM_MOUSEMOVE:
-    {
-#if defined(_WIN32_WCE)
-        window->State.MouseX = 320-HIWORD( lParam );
-        window->State.MouseY = LOWORD( lParam );
-#else
-        window->State.MouseX = LOWORD( lParam );
-        window->State.MouseY = HIWORD( lParam );
-#endif /* defined(_WIN32_WCE) */
-        /* Restrict to [-32768, 32767] to match X11 behaviour       */
-        /* See comment in "freeglut_developer" mailing list 10/4/04 */
-        if ( window->State.MouseX > 32767 ) window->State.MouseX -= 65536;
-        if ( window->State.MouseY > 32767 ) window->State.MouseY -= 65536;
-
-        if ( window->ActiveMenu )
-        {
-            fgUpdateMenuHighlight( window->ActiveMenu );
-            break;
-        }
-        SetFocus(window->Window.Handle);
-
-        fgState.Modifiers = fghGetWin32Modifiers( );
-
-        if( ( wParam & MK_LBUTTON ) ||
-            ( wParam & MK_MBUTTON ) ||
-            ( wParam & MK_RBUTTON ) )
-            INVOKE_WCB( *window, Motion, ( window->State.MouseX,
-                                           window->State.MouseY ) );
-        else
-            INVOKE_WCB( *window, Passive, ( window->State.MouseX,
-                                            window->State.MouseY ) );
-
-        fgState.Modifiers = INVALID_MODIFIERS;
-    }
-    break;
-
-    case WM_LBUTTONDOWN:
-    case WM_MBUTTONDOWN:
-    case WM_RBUTTONDOWN:
-    case WM_LBUTTONUP:
-    case WM_MBUTTONUP:
-    case WM_RBUTTONUP:
-    {
-        GLboolean pressed = GL_TRUE;
-        int button;
-
-#if defined(_WIN32_WCE)
-        window->State.MouseX = 320-HIWORD( lParam );
-        window->State.MouseY = LOWORD( lParam );
-#else
-        window->State.MouseX = LOWORD( lParam );
-        window->State.MouseY = HIWORD( lParam );
-#endif /* defined(_WIN32_WCE) */
-
-        /* Restrict to [-32768, 32767] to match X11 behaviour       */
-        /* See comment in "freeglut_developer" mailing list 10/4/04 */
-        if ( window->State.MouseX > 32767 ) window->State.MouseX -= 65536;
-        if ( window->State.MouseY > 32767 ) window->State.MouseY -= 65536;
-
-        switch( uMsg )
-        {
-        case WM_LBUTTONDOWN:
-            pressed = GL_TRUE;
-            button = GLUT_LEFT_BUTTON;
-            break;
-        case WM_MBUTTONDOWN:
-            pressed = GL_TRUE;
-            button = GLUT_MIDDLE_BUTTON;
-            break;
-        case WM_RBUTTONDOWN:
-            pressed = GL_TRUE;
-            button = GLUT_RIGHT_BUTTON;
-            break;
-        case WM_LBUTTONUP:
-            pressed = GL_FALSE;
-            button = GLUT_LEFT_BUTTON;
-            break;
-        case WM_MBUTTONUP:
-            pressed = GL_FALSE;
-            button = GLUT_MIDDLE_BUTTON;
-            break;
-        case WM_RBUTTONUP:
-            pressed = GL_FALSE;
-            button = GLUT_RIGHT_BUTTON;
-            break;
-        default:
-            pressed = GL_FALSE;
-            button = -1;
-            break;
-        }
-
-#if !defined(_WIN32_WCE)
-        if( GetSystemMetrics( SM_SWAPBUTTON ) )
-        {
-            if( button == GLUT_LEFT_BUTTON )
-                button = GLUT_RIGHT_BUTTON;
-            else
-                if( button == GLUT_RIGHT_BUTTON )
-                    button = GLUT_LEFT_BUTTON;
-        }
-#endif /* !defined(_WIN32_WCE) */
-
-        if( button == -1 )
-            return DefWindowProc( hWnd, uMsg, lParam, wParam );
-
-        /*
-         * Do not execute the application's mouse callback if a menu
-         * is hooked to this button.  In that case an appropriate
-         * private call should be generated.
-         */
-        if( fgCheckActiveMenu( window, button, pressed,
-                               window->State.MouseX, window->State.MouseY ) )
-            break;
-
-        /* Set capture so that the window captures all the mouse messages */
-        /*
-         * XXX - Multiple button support:  Under X11, the mouse is not released
-         * XXX - from the window until all buttons have been released, even if the
-         * XXX - user presses a button in another window.  This will take more
-         * XXX - code changes than I am up to at the moment (10/5/04).  The present
-         * XXX - is a 90 percent solution.
-         */
-        if ( pressed == GL_TRUE )
-          SetCapture ( window->Window.Handle ) ;
-        else
-          ReleaseCapture () ;
-
-        if( ! FETCH_WCB( *window, Mouse ) )
-            break;
-
-        fgSetWindow( window );
-        fgState.Modifiers = fghGetWin32Modifiers( );
-
-        INVOKE_WCB(
-            *window, Mouse,
-            ( button,
-              pressed ? GLUT_DOWN : GLUT_UP,
-              window->State.MouseX,
-              window->State.MouseY
-            )
-        );
-
-        fgState.Modifiers = INVALID_MODIFIERS;
-    }
-    break;
-
-    case 0x020a:
-        /* Should be WM_MOUSEWHEEL but my compiler doesn't recognize it */
-    {
-        int wheel_number = LOWORD( wParam );
-        short ticks = ( short )HIWORD( wParam );
-               fgState.MouseWheelTicks += ticks;
-
-        /*
-         * XXX Should use WHEEL_DELTA instead of 120
-         */
-               if ( abs ( fgState.MouseWheelTicks ) > 120 )
-               {
-                       int direction = ( fgState.MouseWheelTicks > 0 ) ? 1 : -1;
-
-            if( ! FETCH_WCB( *window, MouseWheel ) &&
-                ! FETCH_WCB( *window, Mouse ) )
-                break;
-
-            fgSetWindow( window );
-            fgState.Modifiers = fghGetWin32Modifiers( );
-
-            /*
-             * XXX Should use WHEEL_DELTA instead of 120
-             */
-            while( abs ( fgState.MouseWheelTicks ) > 120 )
-                       {
-                if( FETCH_WCB( *window, MouseWheel ) )
-                    INVOKE_WCB( *window, MouseWheel,
-                                ( wheel_number,
-                                  direction,
-                                  window->State.MouseX,
-                                  window->State.MouseY
-                                )
-                    );
-                else  /* No mouse wheel, call the mouse button callback twice */
-                               {
-                    /*
-                     * Map wheel zero to button 3 and 4; +1 to 3, -1 to 4
-                     *  "    "   one                     +1 to 5, -1 to 6, ...
-                     *
-                     * XXX The below assumes that you have no more than 3 mouse
-                     * XXX buttons.  Sorry.
-                     */
-                    int button = wheel_number * 2 + 3;
-                    if( direction < 0 )
-                        ++button;
-                    INVOKE_WCB( *window, Mouse,
-                                ( button, GLUT_DOWN,
-                                  window->State.MouseX, window->State.MouseY )
-                    );
-                    INVOKE_WCB( *window, Mouse,
-                                ( button, GLUT_UP,
-                                  window->State.MouseX, window->State.MouseY )
-                    );
-                               }
-
-                /*
-                 * XXX Should use WHEEL_DELTA instead of 120
-                 */
-                               fgState.MouseWheelTicks -= 120 * direction;
-                       }
-
-            fgState.Modifiers = INVALID_MODIFIERS;
-               }
-    }
-    break ;
-
-    case WM_SYSKEYDOWN:
-    case WM_KEYDOWN:
-    {
-        int keypress = -1;
-        POINT mouse_pos ;
-
-        if( ( fgState.KeyRepeat==GLUT_KEY_REPEAT_OFF || window->State.IgnoreKeyRepeat==GL_TRUE ) && (HIWORD(lParam) & KF_REPEAT) )
-            break;
-
-        /*
-         * Remember the current modifiers state. This is done here in order
-         * to make sure the VK_DELETE keyboard callback is executed properly.
-         */
-        fgState.Modifiers = fghGetWin32Modifiers( );
-
-        GetCursorPos( &mouse_pos );
-        ScreenToClient( window->Window.Handle, &mouse_pos );
-
-        window->State.MouseX = mouse_pos.x;
-        window->State.MouseY = mouse_pos.y;
-
-        /* Convert the Win32 keystroke codes to GLUTtish way */
-#       define KEY(a,b) case a: keypress = b; break;
-
-        switch( wParam )
-        {
-            KEY( VK_F1,     GLUT_KEY_F1        );
-            KEY( VK_F2,     GLUT_KEY_F2        );
-            KEY( VK_F3,     GLUT_KEY_F3        );
-            KEY( VK_F4,     GLUT_KEY_F4        );
-            KEY( VK_F5,     GLUT_KEY_F5        );
-            KEY( VK_F6,     GLUT_KEY_F6        );
-            KEY( VK_F7,     GLUT_KEY_F7        );
-            KEY( VK_F8,     GLUT_KEY_F8        );
-            KEY( VK_F9,     GLUT_KEY_F9        );
-            KEY( VK_F10,    GLUT_KEY_F10       );
-            KEY( VK_F11,    GLUT_KEY_F11       );
-            KEY( VK_F12,    GLUT_KEY_F12       );
-            KEY( VK_PRIOR,  GLUT_KEY_PAGE_UP   );
-            KEY( VK_NEXT,   GLUT_KEY_PAGE_DOWN );
-            KEY( VK_HOME,   GLUT_KEY_HOME      );
-            KEY( VK_END,    GLUT_KEY_END       );
-            KEY( VK_LEFT,   GLUT_KEY_LEFT      );
-            KEY( VK_UP,     GLUT_KEY_UP        );
-            KEY( VK_RIGHT,  GLUT_KEY_RIGHT     );
-            KEY( VK_DOWN,   GLUT_KEY_DOWN      );
-            KEY( VK_INSERT, GLUT_KEY_INSERT    );
-            KEY( VK_LCONTROL, GLUT_KEY_CTRL_L  );
-            KEY( VK_RCONTROL, GLUT_KEY_CTRL_R  );
-            KEY( VK_LSHIFT, GLUT_KEY_SHIFT_L   );
-            KEY( VK_RSHIFT, GLUT_KEY_SHIFT_R   );
-            KEY( VK_LMENU,  GLUT_KEY_ALT_L     );
-            KEY( VK_RMENU,  GLUT_KEY_ALT_R     );
-
-        case VK_DELETE:
-            /* The delete key should be treated as an ASCII keypress: */
-            INVOKE_WCB( *window, Keyboard,
-                        ( 127, window->State.MouseX, window->State.MouseY )
-            );
-        }
-
-#if defined(_WIN32_WCE)
-        if(!(lParam & 0x40000000)) /* Prevent auto-repeat */
-        {
-            if(wParam==(unsigned)gxKeyList.vkRight)
-                keypress = GLUT_KEY_RIGHT;
-            else if(wParam==(unsigned)gxKeyList.vkLeft)
-                keypress = GLUT_KEY_LEFT;
-            else if(wParam==(unsigned)gxKeyList.vkUp)
-                keypress = GLUT_KEY_UP;
-            else if(wParam==(unsigned)gxKeyList.vkDown)
-                keypress = GLUT_KEY_DOWN;
-            else if(wParam==(unsigned)gxKeyList.vkA)
-                keypress = GLUT_KEY_F1;
-            else if(wParam==(unsigned)gxKeyList.vkB)
-                keypress = GLUT_KEY_F2;
-            else if(wParam==(unsigned)gxKeyList.vkC)
-                keypress = GLUT_KEY_F3;
-            else if(wParam==(unsigned)gxKeyList.vkStart)
-                keypress = GLUT_KEY_F4;
-        }
-#endif
-
-        if( keypress != -1 )
-            INVOKE_WCB( *window, Special,
-                        ( keypress,
-                          window->State.MouseX, window->State.MouseY )
-            );
-
-        fgState.Modifiers = INVALID_MODIFIERS;
-    }
-    break;
-
-    case WM_SYSKEYUP:
-    case WM_KEYUP:
-    {
-        int keypress = -1;
-        POINT mouse_pos;
-
-        /*
-         * Remember the current modifiers state. This is done here in order
-         * to make sure the VK_DELETE keyboard callback is executed properly.
-         */
-        fgState.Modifiers = fghGetWin32Modifiers( );
-
-        GetCursorPos( &mouse_pos );
-        ScreenToClient( window->Window.Handle, &mouse_pos );
-
-        window->State.MouseX = mouse_pos.x;
-        window->State.MouseY = mouse_pos.y;
-
-        /*
-         * Convert the Win32 keystroke codes to GLUTtish way.
-         * "KEY(a,b)" was defined under "WM_KEYDOWN"
-         */
-
-        switch( wParam )
-        {
-            KEY( VK_F1,     GLUT_KEY_F1        );
-            KEY( VK_F2,     GLUT_KEY_F2        );
-            KEY( VK_F3,     GLUT_KEY_F3        );
-            KEY( VK_F4,     GLUT_KEY_F4        );
-            KEY( VK_F5,     GLUT_KEY_F5        );
-            KEY( VK_F6,     GLUT_KEY_F6        );
-            KEY( VK_F7,     GLUT_KEY_F7        );
-            KEY( VK_F8,     GLUT_KEY_F8        );
-            KEY( VK_F9,     GLUT_KEY_F9        );
-            KEY( VK_F10,    GLUT_KEY_F10       );
-            KEY( VK_F11,    GLUT_KEY_F11       );
-            KEY( VK_F12,    GLUT_KEY_F12       );
-            KEY( VK_PRIOR,  GLUT_KEY_PAGE_UP   );
-            KEY( VK_NEXT,   GLUT_KEY_PAGE_DOWN );
-            KEY( VK_HOME,   GLUT_KEY_HOME      );
-            KEY( VK_END,    GLUT_KEY_END       );
-            KEY( VK_LEFT,   GLUT_KEY_LEFT      );
-            KEY( VK_UP,     GLUT_KEY_UP        );
-            KEY( VK_RIGHT,  GLUT_KEY_RIGHT     );
-            KEY( VK_DOWN,   GLUT_KEY_DOWN      );
-            KEY( VK_INSERT, GLUT_KEY_INSERT    );
-            KEY( VK_LCONTROL, GLUT_KEY_CTRL_L  );
-            KEY( VK_RCONTROL, GLUT_KEY_CTRL_R  );
-            KEY( VK_LSHIFT, GLUT_KEY_SHIFT_L   );
-            KEY( VK_RSHIFT, GLUT_KEY_SHIFT_R   );
-            KEY( VK_LMENU,  GLUT_KEY_ALT_L     );
-            KEY( VK_RMENU,  GLUT_KEY_ALT_R     );
-
-          case VK_DELETE:
-              /* The delete key should be treated as an ASCII keypress: */
-              INVOKE_WCB( *window, KeyboardUp,
-                          ( 127, window->State.MouseX, window->State.MouseY )
-              );
-              break;
-
-        default:
-        {
-#if !defined(_WIN32_WCE)
-            BYTE state[ 256 ];
-            WORD code[ 2 ];
-
-            GetKeyboardState( state );
-
-            if( ToAscii( (UINT)wParam, 0, state, code, 0 ) == 1 )
-                wParam=code[ 0 ];
-
-            INVOKE_WCB( *window, KeyboardUp,
-                        ( (char)wParam,
-                          window->State.MouseX, window->State.MouseY )
-            );
-#endif /* !defined(_WIN32_WCE) */
-        }
-        }
-
-        if( keypress != -1 )
-            INVOKE_WCB( *window, SpecialUp,
-                        ( keypress,
-                          window->State.MouseX, window->State.MouseY )
-            );
-
-        fgState.Modifiers = INVALID_MODIFIERS;
-    }
-    break;
-
-    case WM_SYSCHAR:
-    case WM_CHAR:
-    {
-      if( (fgState.KeyRepeat==GLUT_KEY_REPEAT_OFF || window->State.IgnoreKeyRepeat==GL_TRUE) && (HIWORD(lParam) & KF_REPEAT) )
-            break;
-
-        fgState.Modifiers = fghGetWin32Modifiers( );
-        INVOKE_WCB( *window, Keyboard,
-                    ( (char)wParam,
-                      window->State.MouseX, window->State.MouseY )
-        );
-        fgState.Modifiers = INVALID_MODIFIERS;
-    }
-    break;
-
-    case WM_CAPTURECHANGED:
-        /* User has finished resizing the window, force a redraw */
-        INVOKE_WCB( *window, Display, ( ) );
-
-        /*lRet = DefWindowProc( hWnd, uMsg, wParam, lParam ); */
-        break;
-
-        /* Other messages that I have seen and which are not handled already */
-    case WM_SETTEXT:  /* 0x000c */
-        lRet = DefWindowProc( hWnd, uMsg, wParam, lParam );
-        /* Pass it on to "DefWindowProc" to set the window text */
-        break;
-
-    case WM_GETTEXT:  /* 0x000d */
-        /* Ideally we would copy the title of the window into "lParam" */
-        /* strncpy ( (char *)lParam, "Window Title", wParam );
-           lRet = ( wParam > 12 ) ? 12 : wParam;  */
-        /* the number of characters copied */
-        lRet = DefWindowProc( hWnd, uMsg, wParam, lParam );
-        break;
-
-    case WM_GETTEXTLENGTH:  /* 0x000e */
-        /* Ideally we would get the length of the title of the window */
-        lRet = 12;
-        /* the number of characters in "Window Title\0" (see above) */
-        break;
-
-    case WM_ERASEBKGND:  /* 0x0014 */
-        lRet = DefWindowProc( hWnd, uMsg, wParam, lParam );
-        break;
-
-#if !defined(_WIN32_WCE)
-    case WM_SYNCPAINT:  /* 0x0088 */
-        /* Another window has moved, need to update this one */
-        window->State.Redisplay = GL_TRUE;
-        lRet = DefWindowProc( hWnd, uMsg, wParam, lParam );
-        /* Help screen says this message must be passed to "DefWindowProc" */
-        break;
-
-    case WM_NCPAINT:  /* 0x0085 */
-      /* Need to update the border of this window */
-        lRet = DefWindowProc( hWnd, uMsg, wParam, lParam );
-        /* Pass it on to "DefWindowProc" to repaint a standard border */
-        break;
-
-    case WM_SYSCOMMAND :  /* 0x0112 */
-        {
-          /*
-           * We have received a system command message.  Try to act on it.
-           * The commands are passed in through the "wParam" parameter:
-           * The least significant digit seems to be which edge of the window
-           * is being used for a resize event:
-           *     4  3  5
-           *     1     2
-           *     7  6  8
-           * Congratulations and thanks to Richard Rauch for figuring this out..
-           */
-            switch ( wParam & 0xfff0 )
-            {
-            case SC_SIZE       :
-                break ;
-
-            case SC_MOVE       :
-                break ;
-
-            case SC_MINIMIZE   :
-                /* User has clicked on the "-" to minimize the window */
-                /* Turn off the visibility */
-                window->State.Visible = GL_FALSE ;
-
-                break ;
-
-            case SC_MAXIMIZE   :
-                break ;
-
-            case SC_NEXTWINDOW :
-                break ;
-
-            case SC_PREVWINDOW :
-                break ;
-
-            case SC_CLOSE      :
-                /* Followed very closely by a WM_CLOSE message */
-                break ;
-
-            case SC_VSCROLL    :
-                break ;
-
-            case SC_HSCROLL    :
-                break ;
-
-            case SC_MOUSEMENU  :
-                break ;
-
-            case SC_KEYMENU    :
-                break ;
-
-            case SC_ARRANGE    :
-                break ;
-
-            case SC_RESTORE    :
-                break ;
-
-            case SC_TASKLIST   :
-                break ;
-
-            case SC_SCREENSAVE :
-                break ;
-
-            case SC_HOTKEY     :
-                break ;
-
-#if(WINVER >= 0x0400)
-            case SC_DEFAULT    :
-                break ;
-
-            case SC_MONITORPOWER    :
-                break ;
-
-            case SC_CONTEXTHELP    :
-                break ;
-#endif /* WINVER >= 0x0400 */
-
-            default:
-#if _DEBUG
-                fgWarning( "Unknown wParam type 0x%x", wParam );
-#endif
-                break;
-            }
-        }
-#endif /* !defined(_WIN32_WCE) */
-
-        /* We need to pass the message on to the operating system as well */
-        lRet = DefWindowProc( hWnd, uMsg, wParam, lParam );
-        break;
-
-#ifdef WM_TOUCH
-       /* handle multi-touch messages */
-       case WM_TOUCH:
-       {
-               unsigned int numInputs = (unsigned int)wParam;
-               unsigned int i = 0;
-               TOUCHINPUT* ti = (TOUCHINPUT*)malloc( sizeof(TOUCHINPUT)*numInputs);
-
-               if (fghGetTouchInputInfo == (pGetTouchInputInfo)0xDEADBEEF) {
-                   fghGetTouchInputInfo = (pGetTouchInputInfo)GetProcAddress(GetModuleHandle("user32"),"GetTouchInputInfo");
-                   fghCloseTouchInputHandle = (pCloseTouchInputHandle)GetProcAddress(GetModuleHandle("user32"),"CloseTouchInputHandle");
-               }
-
-               if (!fghGetTouchInputInfo) { 
-                       free( (void*)ti );
-                       break;
-               }
-
-               if (fghGetTouchInputInfo( (HTOUCHINPUT)lParam, numInputs, ti, sizeof(TOUCHINPUT) )) {
-                       /* Handle each contact point */
-                       for (i = 0; i < numInputs; ++i ) {
-
-                               POINT tp;
-                               tp.x = TOUCH_COORD_TO_PIXEL(ti[i].x);
-                               tp.y = TOUCH_COORD_TO_PIXEL(ti[i].y);
-                               ScreenToClient( hWnd, &tp );
-
-                               ti[i].dwID = ti[i].dwID * 2;
-
-                               if (ti[i].dwFlags & TOUCHEVENTF_DOWN) {
-                                       INVOKE_WCB( *window, MultiEntry,  ( ti[i].dwID, GLUT_ENTERED ) );
-                                       INVOKE_WCB( *window, MultiButton, ( ti[i].dwID, tp.x, tp.y, 0, GLUT_DOWN ) );
-                               } else if (ti[i].dwFlags & TOUCHEVENTF_MOVE) {
-                                       INVOKE_WCB( *window, MultiMotion, ( ti[i].dwID, tp.x, tp.y ) );
-                               } else if (ti[i].dwFlags & TOUCHEVENTF_UP)   { 
-                                       INVOKE_WCB( *window, MultiButton, ( ti[i].dwID, tp.x, tp.y, 0, GLUT_UP ) );
-                                       INVOKE_WCB( *window, MultiEntry,  ( ti[i].dwID, GLUT_LEFT ) );
-                               }
-                       }
-               }
-               fghCloseTouchInputHandle((HTOUCHINPUT)lParam);
-               free( (void*)ti );
-               lRet = 0; /*DefWindowProc( hWnd, uMsg, wParam, lParam );*/
-               break;
-       }
-#endif
-    default:
-        /* Handle unhandled messages */
-        lRet = DefWindowProc( hWnd, uMsg, wParam, lParam );
-        break;
-    }
-
-    return lRet;
-}
-#endif
-
-/*** END OF FILE ***/
diff --git a/src/freeglut_menu.c b/src/freeglut_menu.c
deleted file mode 100644 (file)
index ea5837e..0000000
+++ /dev/null
@@ -1,1002 +0,0 @@
-/*
- * freeglut_menu.c
- *
- * Pull-down menu creation and handling.
- *
- * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.
- * Written by Pawel W. Olszta, <olszta@sourceforge.net>
- * Creation date: Thu Dec 16 1999
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-#define FREEGLUT_BUILDING_LIB
-#include <GL/freeglut.h>
-#include "freeglut_internal.h"
-
-/* -- DEFINITIONS ---------------------------------------------------------- */
-
-/*
- * FREEGLUT_MENU_FONT can be any freeglut bitmapped font.
- * (Stroked fonts would not be out of the question, but we'd need to alter
- *  code, since GLUT (hence freeglut) does not quite unify stroked and
- *  bitmapped font handling.)
- * Old UNIX/X11 GLUT (BSD, UNIX, IRIX, LINUX, HPUX, ...) used a system
- * font best approximated by an 18-pixel HELVETICA, I think.  MS-WINDOWS
- * GLUT used something closest to the 8x13 fixed-width font.  (Old
- * GLUT apparently uses host-system menus rather than building its own.
- * freeglut is building its own menus from scratch.)
- *
- * FREEGLUT_MENU_HEIGHT gives the height of ONE menu box.  This should be
- * the distances between two adjacent menu entries.  It should scale
- * automatically with the font choice, so you needn't alter it---unless you
- * use a stroked font.
- *
- * FREEGLUT_MENU_BORDER says how many pixels to allow around the edge of a
- * menu.  (It also seems to be the same as the number of pixels used as
- * a border around *items* to separate them from neighbors.  John says
- * that that wasn't the original intent...if not, perhaps we need another
- * symbolic constant, FREEGLUT_MENU_ITEM_BORDER, or such.)
- */
-#if TARGET_HOST_MS_WINDOWS
-#define  FREEGLUT_MENU_FONT    GLUT_BITMAP_8_BY_13
-#else
-#define  FREEGLUT_MENU_FONT    GLUT_BITMAP_HELVETICA_18
-#endif
-
-#define  FREEGLUT_MENU_HEIGHT  (glutBitmapHeight(FREEGLUT_MENU_FONT) + \
-                                FREEGLUT_MENU_BORDER)
-#define  FREEGLUT_MENU_BORDER   2
-
-
-/*
- * These variables are for rendering the freeglut menu items.
- *
- * The choices are fore- and background, with and without h for Highlighting.
- * Old GLUT appeared to be system-dependant for its colors (sigh) so we are
- * too.  These variables should be stuffed into global state and initialized
- * via the glutInit*() system.
- */
-#if TARGET_HOST_MS_WINDOWS
-static float menu_pen_fore  [4] = {0.0f,  0.0f,  0.0f,  1.0f};
-static float menu_pen_back  [4] = {0.85f, 0.85f, 0.85f, 1.0f};
-static float menu_pen_hfore [4] = {1.0f,  1.0f,  1.0f,  1.0f};
-static float menu_pen_hback [4] = {0.15f, 0.15f, 0.45f, 1.0f};
-#else
-static float menu_pen_fore  [4] = {0.0f,  0.0f,  0.0f,  1.0f};
-static float menu_pen_back  [4] = {0.70f, 0.70f, 0.70f, 1.0f};
-static float menu_pen_hfore [4] = {0.0f,  0.0f,  0.0f,  1.0f};
-static float menu_pen_hback [4] = {1.0f,  1.0f,  1.0f,  1.0f};
-#endif
-
-/* -- PRIVATE FUNCTIONS ---------------------------------------------------- */
-
-/*
- * Private function to find a menu entry by index
- */
-static SFG_MenuEntry *fghFindMenuEntry( SFG_Menu* menu, int index )
-{
-    SFG_MenuEntry *entry;
-    int i = 1;
-
-    for( entry = (SFG_MenuEntry *)menu->Entries.First;
-         entry;
-         entry = (SFG_MenuEntry *)entry->Node.Next )
-    {
-        if( i == index )
-            break;
-        ++i;
-    }
-
-    return entry;
-}
-
-/*
- * Deactivates a menu pointed by the function argument.
- */
-static void fghDeactivateSubMenu( SFG_MenuEntry *menuEntry )
-{
-    SFG_MenuEntry *subMenuIter;
-    /* Hide the present menu's window */
-    fgSetWindow( menuEntry->SubMenu->Window );
-    glutHideWindow( );
-
-    /* Forget about having that menu active anymore, now: */
-    menuEntry->SubMenu->Window->ActiveMenu = NULL;
-    menuEntry->SubMenu->IsActive = GL_FALSE;
-    menuEntry->SubMenu->ActiveEntry = NULL;
-
-    /* Hide all submenu windows, and the root menu's window. */
-    for ( subMenuIter = (SFG_MenuEntry *)menuEntry->SubMenu->Entries.First;
-          subMenuIter;
-          subMenuIter = (SFG_MenuEntry *)subMenuIter->Node.Next )
-    {
-        subMenuIter->IsActive = GL_FALSE;
-
-        /* Is that an active submenu by any case? */
-        if( subMenuIter->SubMenu )
-            fghDeactivateSubMenu( subMenuIter );
-    }
-
-    fgSetWindow ( menuEntry->SubMenu->ParentWindow ) ;
-}
-
-/*
- * Private function to get the virtual maximum screen extent
- */
-static GLvoid fghGetVMaxExtent( SFG_Window* window, int* x, int* y )
-{
-    if( fgStructure.GameModeWindow )
-    {
-#if TARGET_HOST_POSIX_X11
-        int wx, wy;
-        Window w;
-
-        XTranslateCoordinates(
-            fgDisplay.Display,
-            window->Window.Handle,
-            fgDisplay.RootWindow,
-            0, 0, &wx, &wy, &w);
-
-        *x = fgState.GameModeSize.X + wx;
-        *y = fgState.GameModeSize.Y + wy;
-#else
-        *x = glutGet ( GLUT_SCREEN_WIDTH );
-        *y = glutGet ( GLUT_SCREEN_HEIGHT );
-#endif
-    }
-    else
-    {
-        *x = fgDisplay.ScreenWidth;
-        *y = fgDisplay.ScreenHeight;
-    }
-}
-
-/*
- * Private function to check for the current menu/sub menu activity state
- */
-static GLboolean fghCheckMenuStatus( SFG_Menu* menu )
-{
-    SFG_MenuEntry* menuEntry;
-    int x, y;
-
-    /* First of all check any of the active sub menus... */
-    for( menuEntry = (SFG_MenuEntry *)menu->Entries.First;
-         menuEntry;
-         menuEntry = (SFG_MenuEntry *)menuEntry->Node.Next )
-    {
-        if( menuEntry->SubMenu && menuEntry->IsActive )
-        {
-            /*
-             * OK, have the sub-menu checked, too. If it returns GL_TRUE, it
-             * will mean that it caught the mouse cursor and we do not need
-             * to regenerate the activity list, and so our parents do...
-             */
-            GLboolean return_status;
-
-            menuEntry->SubMenu->Window->State.MouseX =
-                menu->Window->State.MouseX + menu->X - menuEntry->SubMenu->X;
-            menuEntry->SubMenu->Window->State.MouseY =
-                menu->Window->State.MouseY + menu->Y - menuEntry->SubMenu->Y;
-            return_status = fghCheckMenuStatus( menuEntry->SubMenu );
-
-            if ( return_status )
-                return GL_TRUE;
-        }
-    }
-
-    /* That much about our sub menus, let's get to checking the current menu: */
-    x = menu->Window->State.MouseX;
-    y = menu->Window->State.MouseY;
-
-    /* Check if the mouse cursor is contained within the current menu box */
-    if( ( x >= FREEGLUT_MENU_BORDER ) &&
-        ( x < menu->Width  - FREEGLUT_MENU_BORDER ) &&
-        ( y >= FREEGLUT_MENU_BORDER ) &&
-        ( y < menu->Height - FREEGLUT_MENU_BORDER )  )
-    {
-        int menuID = ( y - FREEGLUT_MENU_BORDER ) / FREEGLUT_MENU_HEIGHT;
-
-        /* The mouse cursor is somewhere over our box, check it out. */
-        menuEntry = fghFindMenuEntry( menu, menuID + 1 );
-        FREEGLUT_INTERNAL_ERROR_EXIT( menuEntry, "Cannot find menu entry",
-                                      "fghCheckMenuStatus" );
-
-        menuEntry->IsActive = GL_TRUE;
-        menuEntry->Ordinal = menuID;
-
-        /*
-         * If this is not the same as the last active menu entry, deactivate
-         * the previous entry.  Specifically, if the previous active entry
-         * was a submenu then deactivate it.
-         */
-        if( menu->ActiveEntry && ( menuEntry != menu->ActiveEntry ) )
-            if( menu->ActiveEntry->SubMenu )
-                fghDeactivateSubMenu( menu->ActiveEntry );
-
-        if( menuEntry != menu->ActiveEntry )
-        {
-            menu->Window->State.Redisplay = GL_TRUE;
-            if( menu->ActiveEntry )
-                menu->ActiveEntry->IsActive = GL_FALSE;
-        }
-
-        menu->ActiveEntry = menuEntry;
-        menu->IsActive = GL_TRUE;  /* XXX Do we need this? */
-
-        /*
-         * OKi, we have marked that entry as active, but it would be also
-         * nice to have its contents updated, in case it's a sub menu.
-         * Also, ignore the return value of the check function:
-         */
-        if( menuEntry->SubMenu )
-        {
-            if ( ! menuEntry->SubMenu->IsActive )
-            {
-                int max_x, max_y;
-                SFG_Window *current_window = fgStructure.CurrentWindow;
-
-                /* Set up the initial menu position now... */
-                menuEntry->SubMenu->IsActive = GL_TRUE;
-
-                /* Set up the initial submenu position now: */
-                fghGetVMaxExtent(menu->ParentWindow, &max_x, &max_y);
-                menuEntry->SubMenu->X = menu->X + menu->Width;
-                menuEntry->SubMenu->Y = menu->Y +
-                    menuEntry->Ordinal * FREEGLUT_MENU_HEIGHT;
-
-                if( menuEntry->SubMenu->X + menuEntry->SubMenu->Width > max_x )
-                    menuEntry->SubMenu->X = menu->X - menuEntry->SubMenu->Width;
-
-                if( menuEntry->SubMenu->Y + menuEntry->SubMenu->Height > max_y )
-                {
-                    menuEntry->SubMenu->Y -= ( menuEntry->SubMenu->Height -
-                                               FREEGLUT_MENU_HEIGHT -
-                                               2 * FREEGLUT_MENU_BORDER );
-                    if( menuEntry->SubMenu->Y < 0 )
-                        menuEntry->SubMenu->Y = 0;
-                }
-
-                fgSetWindow( menuEntry->SubMenu->Window );
-                glutPositionWindow( menuEntry->SubMenu->X,
-                                    menuEntry->SubMenu->Y );
-                glutReshapeWindow( menuEntry->SubMenu->Width,
-                                   menuEntry->SubMenu->Height );
-                glutPopWindow( );
-                glutShowWindow( );
-                menuEntry->SubMenu->Window->ActiveMenu = menuEntry->SubMenu;
-                fgSetWindow( current_window );
-                menuEntry->SubMenu->Window->State.MouseX =
-                    x + menu->X - menuEntry->SubMenu->X;
-                menuEntry->SubMenu->Window->State.MouseY =
-                    y + menu->Y - menuEntry->SubMenu->Y;
-                fghCheckMenuStatus( menuEntry->SubMenu );
-            }
-
-            /* Activate it because its parent entry is active */
-            menuEntry->SubMenu->IsActive = GL_TRUE;  /* XXX Do we need this? */
-        }
-
-        /* Report back that we have caught the menu cursor */
-        return GL_TRUE;
-    }
-
-    /* Looks like the menu cursor is somewhere else... */
-    if( menu->ActiveEntry && menu->ActiveEntry->IsActive &&
-        ( !menu->ActiveEntry->SubMenu ||
-          !menu->ActiveEntry->SubMenu->IsActive ) )
-    {
-        menu->Window->State.Redisplay = GL_TRUE;
-        menu->ActiveEntry->IsActive = GL_FALSE;
-        menu->ActiveEntry = NULL;
-    }
-
-    return GL_FALSE;
-}
-
-/*
- * Displays a menu box and all of its submenus (if they are active)
- */
-static void fghDisplayMenuBox( SFG_Menu* menu )
-{
-    SFG_MenuEntry *menuEntry;
-    int i;
-    int border = FREEGLUT_MENU_BORDER;
-
-    /*
-     * Have the menu box drawn first. The +- values are
-     * here just to make it more nice-looking...
-     */
-    /* a non-black dark version of the below. */
-    glColor4f( 1.0f, 1.0f, 1.0f, 1.0f );
-    glBegin( GL_QUAD_STRIP );
-        glVertex2i( menu->Width         , 0                    );
-        glVertex2i( menu->Width - border,                border);
-        glVertex2i( 0                   , 0                    );
-        glVertex2i(               border,                border);
-        glVertex2i( 0                   , menu->Height         );
-        glVertex2i(               border, menu->Height - border);
-    glEnd( );
-
-    /* a non-black dark version of the below. */
-    glColor4f( 0.5f, 0.5f, 0.5f, 1.0f );
-    glBegin( GL_QUAD_STRIP );
-        glVertex2i( 0                   , menu->Height         );
-        glVertex2i(               border, menu->Height - border);
-        glVertex2i( menu->Width         , menu->Height         );
-        glVertex2i( menu->Width - border, menu->Height - border);
-        glVertex2i( menu->Width         , 0                    );
-        glVertex2i( menu->Width - border,                border);
-    glEnd( );
-
-    glColor4fv( menu_pen_back );
-    glBegin( GL_QUADS );
-        glVertex2i(               border,                border);
-        glVertex2i( menu->Width - border,                border);
-        glVertex2i( menu->Width - border, menu->Height - border);
-        glVertex2i(               border, menu->Height - border);
-    glEnd( );
-
-    /* Check if any of the submenus is currently active... */
-    for( menuEntry = (SFG_MenuEntry *)menu->Entries.First;
-         menuEntry;
-         menuEntry = (SFG_MenuEntry *)menuEntry->Node.Next )
-    {
-        /* Has the menu been marked as active, maybe? */
-        if( menuEntry->IsActive )
-        {
-            /*
-             * That's truly right, and we need to have it highlighted.
-             * There is an assumption that mouse cursor didn't move
-             * since the last check of menu activity state:
-             */
-            int menuID = menuEntry->Ordinal;
-
-            /* So have the highlight drawn... */
-            glColor4fv( menu_pen_hback );
-            glBegin( GL_QUADS );
-                glVertex2i( border,
-                            (menuID + 0)*FREEGLUT_MENU_HEIGHT + border );
-                glVertex2i( menu->Width - border,
-                            (menuID + 0)*FREEGLUT_MENU_HEIGHT + border );
-                glVertex2i( menu->Width - border,
-                            (menuID + 1)*FREEGLUT_MENU_HEIGHT + border );
-                glVertex2i( border,
-                            (menuID + 1)*FREEGLUT_MENU_HEIGHT + border );
-            glEnd( );
-        }
-    }
-
-    /* Print the menu entries now... */
-
-    glColor4fv( menu_pen_fore );
-
-    for( menuEntry = (SFG_MenuEntry *)menu->Entries.First, i = 0;
-         menuEntry;
-         menuEntry = (SFG_MenuEntry *)menuEntry->Node.Next, ++i )
-    {
-        /* If the menu entry is active, set the color to white */
-        if( menuEntry->IsActive )
-            glColor4fv( menu_pen_hfore );
-
-        /* Move the raster into position... */
-        /* Try to center the text - JCJ 31 July 2003*/
-        glRasterPos2i(
-            2 * border,
-            ( i + 1 )*FREEGLUT_MENU_HEIGHT -
-            ( int )( FREEGLUT_MENU_HEIGHT*0.3 - border )
-        );
-
-        /* Have the label drawn, character after character: */
-        glutBitmapString( FREEGLUT_MENU_FONT,
-                          (unsigned char *)menuEntry->Text);
-
-        /* If it's a submenu, draw a right arrow */
-        if( menuEntry->SubMenu )
-        {
-            int width = glutBitmapWidth( FREEGLUT_MENU_FONT, '_' );
-            int x_base = menu->Width - 2 - width;
-            int y_base = i*FREEGLUT_MENU_HEIGHT + border;
-            glBegin( GL_TRIANGLES );
-                glVertex2i( x_base, y_base + 2*border);
-                glVertex2i( menu->Width - 2, y_base +
-                            ( FREEGLUT_MENU_HEIGHT + border) / 2 );
-                glVertex2i( x_base, y_base + FREEGLUT_MENU_HEIGHT - border );
-            glEnd( );
-        }
-
-        /* If the menu entry is active, reset the color */
-        if( menuEntry->IsActive )
-            glColor4fv( menu_pen_fore );
-    }
-}
-
-/*
- * Private static function to set the parent window of a submenu and all
- * of its submenus
- */
-static void fghSetMenuParentWindow( SFG_Window *window, SFG_Menu *menu )
-{
-    SFG_MenuEntry *menuEntry;
-
-    menu->ParentWindow = window;
-
-    for( menuEntry = ( SFG_MenuEntry * )menu->Entries.First;
-         menuEntry;
-         menuEntry = ( SFG_MenuEntry * )menuEntry->Node.Next )
-        if( menuEntry->SubMenu )
-            fghSetMenuParentWindow( window, menuEntry->SubMenu );
-}
-
-/*
- * Function to check for menu entry selection on menu deactivation
- */
-static void fghExecuteMenuCallback( SFG_Menu* menu )
-{
-    SFG_MenuEntry *menuEntry;
-
-    /* First of all check any of the active sub menus... */
-    for( menuEntry = (SFG_MenuEntry *)menu->Entries.First;
-         menuEntry;
-         menuEntry = (SFG_MenuEntry *)menuEntry->Node.Next)
-    {
-        if( menuEntry->IsActive )
-        {
-            if( menuEntry->SubMenu )
-                fghExecuteMenuCallback( menuEntry->SubMenu );
-            else
-                if( menu->Callback )
-                {
-                    SFG_Menu *save_menu = fgStructure.CurrentMenu;
-                    fgStructure.CurrentMenu = menu;
-                    menu->Callback( menuEntry->ID );
-                    fgStructure.CurrentMenu = save_menu;
-                }
-
-            return;
-        }
-    }
-}
-
-
-/*
- * Displays the currently active menu for the current window
- */
-void fgDisplayMenu( void )
-{
-    SFG_Window* window = fgStructure.CurrentWindow;
-    SFG_Menu* menu = NULL;
-
-    FREEGLUT_INTERNAL_ERROR_EXIT ( fgStructure.CurrentWindow, "Displaying menu in nonexistent window",
-                                   "fgDisplayMenu" );
-
-    /* Check if there is an active menu attached to this window... */
-    menu = window->ActiveMenu;
-    freeglut_return_if_fail( menu );
-
-    fgSetWindow( menu->Window );
-
-    glPushAttrib( GL_DEPTH_BUFFER_BIT | GL_TEXTURE_BIT | GL_LIGHTING_BIT |
-                  GL_POLYGON_BIT );
-
-    glDisable( GL_DEPTH_TEST );
-    glDisable( GL_TEXTURE_2D );
-    glDisable( GL_LIGHTING   );
-    glDisable( GL_CULL_FACE  );
-
-    glMatrixMode( GL_PROJECTION );
-    glPushMatrix( );
-    glLoadIdentity( );
-    glOrtho(
-         0, glutGet( GLUT_WINDOW_WIDTH  ),
-         glutGet( GLUT_WINDOW_HEIGHT ), 0,
-        -1, 1
-    );
-
-    glMatrixMode( GL_MODELVIEW );
-    glPushMatrix( );
-    glLoadIdentity( );
-
-    fghDisplayMenuBox( menu );
-
-    glPopAttrib( );
-
-    glMatrixMode( GL_PROJECTION );
-    glPopMatrix( );
-    glMatrixMode( GL_MODELVIEW );
-    glPopMatrix( );
-
-    glutSwapBuffers( );
-
-    fgSetWindow ( window );
-}
-
-/*
- * Activates a menu pointed by the function argument
- */
-static void fghActivateMenu( SFG_Window* window, int button )
-{
-    int max_x, max_y;
-
-    /* We'll be referencing this menu a lot, so remember its address: */
-    SFG_Menu* menu = window->Menu[ button ];
-    SFG_Window* current_window = fgStructure.CurrentWindow;
-
-    /* If the menu is already active in another window, deactivate it there */
-    if ( menu->ParentWindow )
-      menu->ParentWindow->ActiveMenu = NULL ;
-
-    /* Mark the menu as active, so that it gets displayed: */
-    window->ActiveMenu = menu;
-    menu->IsActive = GL_TRUE;
-    fghSetMenuParentWindow ( window, menu );
-    fgState.ActiveMenus++;
-
-    /* Set up the initial menu position now: */
-    fghGetVMaxExtent(menu->ParentWindow, &max_x, &max_y);
-    fgSetWindow( window );
-    menu->X = window->State.MouseX + glutGet( GLUT_WINDOW_X );
-    menu->Y = window->State.MouseY + glutGet( GLUT_WINDOW_Y );
-
-    if( menu->X + menu->Width > max_x )
-        menu->X -=menu->Width;
-
-    if( menu->Y + menu->Height > max_y )
-    {
-        menu->Y -=menu->Height;
-        if( menu->Y < 0 )
-            menu->Y = 0;
-    }
-
-    menu->Window->State.MouseX =
-        window->State.MouseX + glutGet( GLUT_WINDOW_X ) - menu->X;
-    menu->Window->State.MouseY =
-        window->State.MouseY + glutGet( GLUT_WINDOW_Y ) - menu->Y;
-
-    fgSetWindow( menu->Window );
-    glutPositionWindow( menu->X, menu->Y );
-    glutReshapeWindow( menu->Width, menu->Height );
-    glutPopWindow( );
-    glutShowWindow( );
-    menu->Window->ActiveMenu = menu;
-    fghCheckMenuStatus( menu );
-    fgSetWindow( current_window );
-}
-
-/*
- * Update Highlight states of the menu
- *
- * Current mouse position is in menu->Window->State.MouseX/Y.
- */
-void fgUpdateMenuHighlight ( SFG_Menu *menu )
-{
-    fghCheckMenuStatus( menu );
-}
-
-/*
- * Check whether an active menu absorbs a mouse click
- */
-GLboolean fgCheckActiveMenu ( SFG_Window *window, int button, GLboolean pressed,
-                              int mouse_x, int mouse_y )
-{
-    /*
-     * Near as I can tell, this is the menu behaviour:
-     *  - Down-click the menu button, menu not active:  activate
-     *    the menu with its upper left-hand corner at the mouse
-     *    location.
-     *  - Down-click any button outside the menu, menu active:
-     *    deactivate the menu
-     *  - Down-click any button inside the menu, menu active:
-     *    select the menu entry and deactivate the menu
-     *  - Up-click the menu button, menu not active:  nothing happens
-     *  - Up-click the menu button outside the menu, menu active:
-     *    nothing happens
-     *  - Up-click the menu button inside the menu, menu active:
-     *    select the menu entry and deactivate the menu
-     * Since menus can have submenus, we need to check this recursively.
-     */
-    if( window->ActiveMenu )
-    {
-        if( window == window->ActiveMenu->ParentWindow )
-        {
-            window->ActiveMenu->Window->State.MouseX =
-                                       mouse_x - window->ActiveMenu->X;
-            window->ActiveMenu->Window->State.MouseY =
-                                       mouse_y - window->ActiveMenu->Y;
-        }
-
-        /* In the menu, invoke the callback and deactivate the menu */
-        if( fghCheckMenuStatus( window->ActiveMenu ) )
-        {
-            /*
-             * Save the current window and menu and set the current
-             * window to the window whose menu this is
-             */
-            SFG_Window *save_window = fgStructure.CurrentWindow;
-            SFG_Menu *save_menu = fgStructure.CurrentMenu;
-            SFG_Window *parent_window = window->ActiveMenu->ParentWindow;
-            fgSetWindow( parent_window );
-            fgStructure.CurrentMenu = window->ActiveMenu;
-
-            /* Execute the menu callback */
-            fghExecuteMenuCallback( window->ActiveMenu );
-            fgDeactivateMenu( parent_window );
-
-            /* Restore the current window and menu */
-            fgSetWindow( save_window );
-            fgStructure.CurrentMenu = save_menu;
-        }
-        else if( pressed )
-            /*
-             * Outside the menu, deactivate if it's a downclick
-             *
-             * XXX This isn't enough.  A downclick outside of
-             * XXX the interior of our freeglut windows should also
-             * XXX deactivate the menu.  This is more complicated.
-             */
-            fgDeactivateMenu( window->ActiveMenu->ParentWindow );
-
-        /*
-         * XXX Why does an active menu require a redisplay at
-         * XXX this point?  If this can come out cleanly, then
-         * XXX it probably should do so; if not, a comment should
-         * XXX explain it.
-         */
-        if( ! window->IsMenu )
-            window->State.Redisplay = GL_TRUE;
-
-        return GL_TRUE;
-    }
-
-    /* No active menu, let's check whether we need to activate one. */
-    if( ( 0 <= button ) &&
-        ( FREEGLUT_MAX_MENUS > button ) &&
-        ( window->Menu[ button ] ) &&
-        pressed )
-    {
-        /* XXX Posting a requisite Redisplay seems bogus. */
-        window->State.Redisplay = GL_TRUE;
-        fghActivateMenu( window, button );
-        return GL_TRUE;
-    }
-
-    return GL_FALSE;
-}
-
-/*
- * Deactivates a menu pointed by the function argument.
- */
-void fgDeactivateMenu( SFG_Window *window )
-{
-    SFG_Window *parent_window = NULL;
-
-    /* Check if there is an active menu attached to this window... */
-    SFG_Menu* menu = window->ActiveMenu;
-    SFG_MenuEntry *menuEntry;
-
-    /* Did we find an active window? */
-    freeglut_return_if_fail( menu );
-
-    parent_window = menu->ParentWindow;
-
-    /* Hide the present menu's window */
-    fgSetWindow( menu->Window );
-    glutHideWindow( );
-
-    /* Forget about having that menu active anymore, now: */
-    menu->Window->ActiveMenu = NULL;
-    menu->ParentWindow->ActiveMenu = NULL;
-    fghSetMenuParentWindow ( NULL, menu );
-    menu->IsActive = GL_FALSE;
-    menu->ActiveEntry = NULL;
-
-    fgState.ActiveMenus--;
-
-    /* Hide all submenu windows, and the root menu's window. */
-    for ( menuEntry = ( SFG_MenuEntry * )menu->Entries.First;
-          menuEntry;
-          menuEntry = ( SFG_MenuEntry * )menuEntry->Node.Next )
-    {
-        menuEntry->IsActive = GL_FALSE;
-
-        /* Is that an active submenu by any case? */
-        if( menuEntry->SubMenu )
-            fghDeactivateSubMenu( menuEntry );
-    }
-
-    fgSetWindow ( parent_window ) ;
-}
-
-/*
- * Recalculates current menu's box size
- */
-void fghCalculateMenuBoxSize( void )
-{
-    SFG_MenuEntry* menuEntry;
-    int width = 0, height = 0;
-
-    /* Make sure there is a current menu set */
-    freeglut_return_if_fail( fgStructure.CurrentMenu );
-
-    /* The menu's box size depends on the menu entries: */
-    for( menuEntry = ( SFG_MenuEntry * )fgStructure.CurrentMenu->Entries.First;
-         menuEntry;
-         menuEntry = ( SFG_MenuEntry * )menuEntry->Node.Next )
-    {
-        /* Update the menu entry's width value */
-        menuEntry->Width = glutBitmapLength(
-            FREEGLUT_MENU_FONT,
-            (unsigned char *)menuEntry->Text
-        );
-
-        /*
-         * If the entry is a submenu, then it needs to be wider to
-         * accomodate the arrow. JCJ 31 July 2003
-         */
-        if (menuEntry->SubMenu )
-            menuEntry->Width += glutBitmapLength(
-                FREEGLUT_MENU_FONT,
-                (unsigned char *)"_"
-            );
-
-        /* Check if it's the biggest we've found */
-        if( menuEntry->Width > width )
-            width = menuEntry->Width;
-
-        height += FREEGLUT_MENU_HEIGHT;
-    }
-
-    /* Store the menu's box size now: */
-    fgStructure.CurrentMenu->Height = height + 2 * FREEGLUT_MENU_BORDER;
-    fgStructure.CurrentMenu->Width  = width  + 4 * FREEGLUT_MENU_BORDER;
-}
-
-
-/* -- INTERFACE FUNCTIONS -------------------------------------------------- */
-
-/*
- * Creates a new menu object, adding it to the freeglut structure
- */
-int FGAPIENTRY glutCreateMenu( void(* callback)( int ) )
-{
-    /* The menu object creation code resides in freeglut_structure.c */
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutCreateMenu" );
-    return fgCreateMenu( callback )->ID;
-}
-
-#if TARGET_HOST_MS_WINDOWS
-int FGAPIENTRY __glutCreateMenuWithExit( void(* callback)( int ), void (__cdecl *exit_function)(int) )
-{
-  __glutExitFunc = exit_function;
-  return glutCreateMenu( callback );
-}
-#endif
-
-/*
- * Destroys a menu object, removing all references to it
- */
-void FGAPIENTRY glutDestroyMenu( int menuID )
-{
-    SFG_Menu* menu;
-
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutDestroyMenu" );
-    menu = fgMenuByID( menuID );
-
-    freeglut_return_if_fail( menu );
-
-    /* The menu object destruction code resides in freeglut_structure.c */
-    fgDestroyMenu( menu );
-}
-
-/*
- * Returns the ID number of the currently active menu
- */
-int FGAPIENTRY glutGetMenu( void )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutGetMenu" );
-
-    if( fgStructure.CurrentMenu )
-        return fgStructure.CurrentMenu->ID;
-
-    return 0;
-}
-
-/*
- * Sets the current menu given its menu ID
- */
-void FGAPIENTRY glutSetMenu( int menuID )
-{
-    SFG_Menu* menu;
-
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSetMenu" );
-    menu = fgMenuByID( menuID );
-
-    freeglut_return_if_fail( menu );
-
-    fgStructure.CurrentMenu = menu;
-}
-
-/*
- * Adds a menu entry to the bottom of the current menu
- */
-void FGAPIENTRY glutAddMenuEntry( const char* label, int value )
-{
-    SFG_MenuEntry* menuEntry;
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutAddMenuEntry" );
-    menuEntry = (SFG_MenuEntry *)calloc( sizeof(SFG_MenuEntry), 1 );
-    freeglut_return_if_fail( fgStructure.CurrentMenu );
-
-    menuEntry->Text = strdup( label );
-    menuEntry->ID   = value;
-
-    /* Have the new menu entry attached to the current menu */
-    fgListAppend( &fgStructure.CurrentMenu->Entries, &menuEntry->Node );
-
-    fghCalculateMenuBoxSize( );
-}
-
-/*
- * Add a sub menu to the bottom of the current menu
- */
-void FGAPIENTRY glutAddSubMenu( const char *label, int subMenuID )
-{
-    SFG_MenuEntry *menuEntry;
-    SFG_Menu *subMenu;
-
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutAddSubMenu" );
-    menuEntry = ( SFG_MenuEntry * )calloc( sizeof( SFG_MenuEntry ), 1 );
-    subMenu = fgMenuByID( subMenuID );
-
-    freeglut_return_if_fail( fgStructure.CurrentMenu );
-    freeglut_return_if_fail( subMenu );
-
-    menuEntry->Text    = strdup( label );
-    menuEntry->SubMenu = subMenu;
-    menuEntry->ID      = -1;
-
-    fgListAppend( &fgStructure.CurrentMenu->Entries, &menuEntry->Node );
-    fghCalculateMenuBoxSize( );
-}
-
-/*
- * Changes the specified menu item in the current menu into a menu entry
- */
-void FGAPIENTRY glutChangeToMenuEntry( int item, const char* label, int value )
-{
-    SFG_MenuEntry* menuEntry = NULL;
-
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutChangeToMenuEntry" );
-    freeglut_return_if_fail( fgStructure.CurrentMenu );
-
-    /* Get n-th menu entry in the current menu, starting from one: */
-    menuEntry = fghFindMenuEntry( fgStructure.CurrentMenu, item );
-
-    freeglut_return_if_fail( menuEntry );
-
-    /* We want it to become a normal menu entry, so: */
-    if( menuEntry->Text )
-        free( menuEntry->Text );
-
-    menuEntry->Text    = strdup( label );
-    menuEntry->ID      = value;
-    menuEntry->SubMenu = NULL;
-    fghCalculateMenuBoxSize( );
-}
-
-/*
- * Changes the specified menu item in the current menu into a sub-menu trigger.
- */
-void FGAPIENTRY glutChangeToSubMenu( int item, const char* label,
-                                     int subMenuID )
-{
-    SFG_Menu*      subMenu;
-    SFG_MenuEntry* menuEntry;
-
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutChangeToSubMenu" );
-    subMenu = fgMenuByID( subMenuID );
-    menuEntry = NULL;
-
-    freeglut_return_if_fail( fgStructure.CurrentMenu );
-    freeglut_return_if_fail( subMenu );
-
-    /* Get n-th menu entry in the current menu, starting from one: */
-    menuEntry = fghFindMenuEntry( fgStructure.CurrentMenu, item );
-
-    freeglut_return_if_fail( menuEntry );
-
-    /* We want it to become a sub menu entry, so: */
-    if( menuEntry->Text )
-        free( menuEntry->Text );
-
-    menuEntry->Text    = strdup( label );
-    menuEntry->SubMenu = subMenu;
-    menuEntry->ID      = -1;
-    fghCalculateMenuBoxSize( );
-}
-
-/*
- * Removes the specified menu item from the current menu
- */
-void FGAPIENTRY glutRemoveMenuItem( int item )
-{
-    SFG_MenuEntry* menuEntry;
-
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutRemoveMenuItem" );
-    freeglut_return_if_fail( fgStructure.CurrentMenu );
-
-    /* Get n-th menu entry in the current menu, starting from one: */
-    menuEntry = fghFindMenuEntry( fgStructure.CurrentMenu, item );
-
-    freeglut_return_if_fail( menuEntry );
-
-    fgListRemove( &fgStructure.CurrentMenu->Entries, &menuEntry->Node );
-    if ( menuEntry->Text )
-      free( menuEntry->Text );
-
-    free( menuEntry );
-    fghCalculateMenuBoxSize( );
-}
-
-/*
- * Attaches a menu to the current window
- */
-void FGAPIENTRY glutAttachMenu( int button )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutAttachMenu" );
-
-    freeglut_return_if_fail( fgStructure.CurrentWindow );
-    freeglut_return_if_fail( fgStructure.CurrentMenu );
-
-    freeglut_return_if_fail( button >= 0 );
-    freeglut_return_if_fail( button < FREEGLUT_MAX_MENUS );
-
-    fgStructure.CurrentWindow->Menu[ button ] = fgStructure.CurrentMenu;
-}
-
-/*
- * Detaches a menu from the current window
- */
-void FGAPIENTRY glutDetachMenu( int button )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutDetachMenu" );
-
-    freeglut_return_if_fail( fgStructure.CurrentWindow );
-    freeglut_return_if_fail( fgStructure.CurrentMenu );
-
-    freeglut_return_if_fail( button >= 0 );
-    freeglut_return_if_fail( button < FREEGLUT_MAX_MENUS );
-
-    fgStructure.CurrentWindow->Menu[ button ] = NULL;
-}
-
-/*
- * A.Donev: Set and retrieve the menu's user data
- */
-void* FGAPIENTRY glutGetMenuData( void )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutGetMenuData" );
-    return fgStructure.CurrentMenu->UserData;
-}
-
-void FGAPIENTRY glutSetMenuData(void* data)
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSetMenuData" );
-    fgStructure.CurrentMenu->UserData=data;
-}
-
-/*** END OF FILE ***/
diff --git a/src/freeglut_misc.c b/src/freeglut_misc.c
deleted file mode 100644 (file)
index 4aa809a..0000000
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
- * freeglut_misc.c
- *
- * Functions that didn't fit anywhere else...
- *
- * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.
- * Written by Pawel W. Olszta, <olszta@sourceforge.net>
- * Creation date: Thu Dec 9 1999
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-#include <GL/freeglut.h>
-#include "freeglut_internal.h"
-
-/*
- * TODO BEFORE THE STABLE RELEASE:
- *
- *  glutSetColor()     --
- *  glutGetColor()     --
- *  glutCopyColormap() --
- *  glutSetKeyRepeat() -- this is evil and should be removed from API
- */
-
-/* -- INTERFACE FUNCTIONS -------------------------------------------------- */
-
-/*
- * This functions checks if an OpenGL extension is supported or not
- *
- * XXX Wouldn't this be simpler and clearer if we used strtok()?
- */
-int FGAPIENTRY glutExtensionSupported( const char* extension )
-{
-  const char *extensions, *start;
-  const size_t len = strlen( extension );
-
-  /* Make sure there is a current window, and thus a current context available */
-  FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutExtensionSupported" );
-  freeglut_return_val_if_fail( fgStructure.CurrentWindow != NULL, 0 );
-
-  if (strchr(extension, ' '))
-    return 0;
-  start = extensions = (const char *) glGetString(GL_EXTENSIONS);
-
-  /* XXX consider printing a warning to stderr that there's no current
-   * rendering context.
-   */
-  freeglut_return_val_if_fail( extensions != NULL, 0 );
-
-  while (1) {
-     const char *p = strstr(extensions, extension);
-     if (!p)
-        return 0;  /* not found */
-     /* check that the match isn't a super string */
-     if ((p == start || p[-1] == ' ') && (p[len] == ' ' || p[len] == 0))
-        return 1;
-     /* skip the false match and continue */
-     extensions = p + len;
-  }
-
-  return 0 ;
-}
-
-#ifndef GL_INVALID_FRAMEBUFFER_OPERATION
-#ifdef GL_INVALID_FRAMEBUFFER_OPERATION_EXT
-#define GL_INVALID_FRAMEBUFFER_OPERATION GL_INVALID_FRAMEBUFFER_OPERATION_EXT
-#else
-#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506
-#endif
-#endif
-
-#ifndef GL_TABLE_TOO_LARGE
-#ifdef GL_TABLE_TOO_LARGE_EXT
-#define GL_TABLE_TOO_LARGE GL_TABLE_TOO_LARGE_EXT
-#else
-#define GL_TABLE_TOO_LARGE 0x8031
-#endif
-#endif
-
-#ifndef GL_TEXTURE_TOO_LARGE
-#ifdef GL_TEXTURE_TOO_LARGE_EXT
-#define GL_TEXTURE_TOO_LARGE GL_TEXTURE_TOO_LARGE_EXT
-#else
-#define GL_TEXTURE_TOO_LARGE 0x8065
-#endif
-#endif
-
-/*
- * A cut-down local version of gluErrorString to avoid depending on GLU.
- */
-static const char* fghErrorString( GLenum error )
-{
-  switch ( error ) {
-  case GL_INVALID_ENUM: return "invalid enumerant";
-  case GL_INVALID_VALUE: return "invalid value";
-  case GL_INVALID_OPERATION: return "invalid operation";
-  case GL_STACK_OVERFLOW: return "stack overflow";
-  case GL_STACK_UNDERFLOW: return "stack underflow";
-  case GL_OUT_OF_MEMORY: return "out of memory";
-  case GL_TABLE_TOO_LARGE: return "table too large";
-  case GL_INVALID_FRAMEBUFFER_OPERATION: return "invalid framebuffer operation";
-  case GL_TEXTURE_TOO_LARGE: return "texture too large";
-  default: return "unknown GL error";
-  }
-}
-
-/*
- * This function reports all the OpenGL errors that happened till now
- */
-void FGAPIENTRY glutReportErrors( void )
-{
-    GLenum error;
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutReportErrors" );
-    while( ( error = glGetError() ) != GL_NO_ERROR )
-        fgWarning( "GL error: %s", fghErrorString( error ) );
-}
-
-/*
- * Control the auto-repeat of keystrokes to the current window
- */
-void FGAPIENTRY glutIgnoreKeyRepeat( int ignore )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutIgnoreKeyRepeat" );
-    FREEGLUT_EXIT_IF_NO_WINDOW ( "glutIgnoreKeyRepeat" );
-
-    fgStructure.CurrentWindow->State.IgnoreKeyRepeat = ignore ? GL_TRUE : GL_FALSE;
-}
-
-/*
- * Set global auto-repeat of keystrokes
- *
- * RepeatMode should be either:
- *    GLUT_KEY_REPEAT_OFF
- *    GLUT_KEY_REPEAT_ON
- *    GLUT_KEY_REPEAT_DEFAULT
- */
-void FGAPIENTRY glutSetKeyRepeat( int repeatMode )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSetKeyRepeat" );
-
-    switch( repeatMode )
-    {
-    case GLUT_KEY_REPEAT_OFF:
-    case GLUT_KEY_REPEAT_ON:
-     fgState.KeyRepeat = repeatMode;
-     break;
-
-    case GLUT_KEY_REPEAT_DEFAULT:
-     fgState.KeyRepeat = GLUT_KEY_REPEAT_ON;
-     break;
-
-    default:
-        fgError ("Invalid glutSetKeyRepeat mode: %d", repeatMode);
-        break;
-    }
-}
-
-/*
- * Forces the joystick callback to be executed
- */
-void FGAPIENTRY glutForceJoystickFunc( void )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutForceJoystickFunc" );
-#if !defined(_WIN32_WCE)
-    freeglut_return_if_fail( fgStructure.CurrentWindow != NULL );
-    freeglut_return_if_fail( FETCH_WCB( *( fgStructure.CurrentWindow ), Joystick ) );
-    fgJoystickPollWindow( fgStructure.CurrentWindow );
-#endif /* !defined(_WIN32_WCE) */
-}
-
-/*
- *
- */
-void FGAPIENTRY glutSetColor( int nColor, GLfloat red, GLfloat green, GLfloat blue )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSetColor" );
-    /* We really need to do something here. */
-}
-
-/*
- *
- */
-GLfloat FGAPIENTRY glutGetColor( int color, int component )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutGetColor" );
-    /* We really need to do something here. */
-    return( 0.0f );
-}
-
-/*
- *
- */
-void FGAPIENTRY glutCopyColormap( int window )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutCopyColormap" );
-    /* We really need to do something here. */
-}
-
-/*** END OF FILE ***/
diff --git a/src/freeglut_overlay.c b/src/freeglut_overlay.c
deleted file mode 100644 (file)
index 2a1314a..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * freeglut_overlay.c
- *
- * Overlay management functions (as defined by GLUT API)
- *
- * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.
- * Written by Pawel W. Olszta, <olszta@sourceforge.net>
- * Creation date: Thu Dec 16 1999
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-#include <GL/freeglut.h>
-#include "freeglut_internal.h"
-
-/*
- * NOTE: functions declared in this file probably will not be implemented.
- */
-
-/* -- INTERFACE FUNCTIONS -------------------------------------------------- */
-
-void FGAPIENTRY glutEstablishOverlay( void )             { /* Not implemented */ }
-void FGAPIENTRY glutRemoveOverlay( void )                { /* Not implemented */ }
-void FGAPIENTRY glutUseLayer( GLenum layer )             { /* Not implemented */ }
-void FGAPIENTRY glutPostOverlayRedisplay( void )         { /* Not implemented */ }
-void FGAPIENTRY glutPostWindowOverlayRedisplay( int ID ) { /* Not implemented */ }
-void FGAPIENTRY glutShowOverlay( void )                  { /* Not implemented */ }
-void FGAPIENTRY glutHideOverlay( void )                  { /* Not implemented */ }
-
-/*** END OF FILE ***/
diff --git a/src/freeglut_spaceball.c b/src/freeglut_spaceball.c
deleted file mode 100644 (file)
index 89655f4..0000000
+++ /dev/null
@@ -1,471 +0,0 @@
-/* Spaceball support for Linux.\r
- * Written by John Tsiombikas <nuclear@member.fsf.org>\r
- *\r
- * This code supports 3Dconnexion's 6-dof space-whatever devices.\r
- * It can communicate with either the proprietary 3Dconnexion daemon (3dxsrv)\r
- * free spacenavd (http://spacenav.sourceforge.net), through the "standard"\r
- * magellan X-based protocol.\r
- */\r
-\r
-#include <GL/freeglut.h>\r
-#include "freeglut_internal.h"\r
-\r
-/* -- PRIVATE FUNCTIONS --------------------------------------------------- */\r
-\r
-#if TARGET_HOST_POSIX_X11\r
-#include <X11/Xlib.h>\r
-\r
-enum {\r
-    SPNAV_EVENT_ANY,  /* used by spnav_remove_events() */\r
-    SPNAV_EVENT_MOTION,\r
-    SPNAV_EVENT_BUTTON  /* includes both press and release */\r
-};\r
-\r
-struct spnav_event_motion {\r
-    int type;\r
-    int x, y, z;\r
-    int rx, ry, rz;\r
-    unsigned int period;\r
-    int *data;\r
-};\r
-\r
-struct spnav_event_button {\r
-    int type;\r
-    int press;\r
-    int bnum;\r
-};\r
-\r
-typedef union spnav_event {\r
-    int type;\r
-    struct spnav_event_motion motion;\r
-    struct spnav_event_button button;\r
-} spnav_event;\r
-\r
-\r
-static int spnav_x11_open(Display *dpy, Window win);\r
-static int spnav_x11_window(Window win);\r
-static int spnav_x11_event(const XEvent *xev, spnav_event *event);\r
-static int spnav_close(void);\r
-static int spnav_fd(void);\r
-static int spnav_remove_events(int type);\r
-\r
-static SFG_Window *spnav_win;\r
-#endif\r
-\r
-/* Flag telling whether we have a spaceball:\r
- *   0 - haven't tried initializing\r
- *   1 - have successfully initialized\r
- *  -1 - have tried to initialize but not succeeded\r
- */\r
-static int sball_initialized = 0;\r
-\r
-\r
-void fgInitialiseSpaceball(void)\r
-{\r
-    if(sball_initialized != 0) {\r
-        return;\r
-    }\r
-\r
-#if TARGET_HOST_POSIX_X11\r
-    {\r
-        Window w;\r
-\r
-        if(!fgStructure.CurrentWindow)\r
-               {\r
-                       sball_initialized = -1;\r
-            return;\r
-               }\r
-\r
-        w = fgStructure.CurrentWindow->Window.Handle;\r
-        if(spnav_x11_open(fgDisplay.Display, w) == -1)\r
-               {\r
-                       sball_initialized = -1;\r
-            return;\r
-        }\r
-    }\r
-#endif\r
-\r
-    sball_initialized = 1;\r
-}\r
-\r
-void fgSpaceballClose(void)\r
-{\r
-#if TARGET_HOST_POSIX_X11\r
-    spnav_close();\r
-#endif\r
-}\r
-\r
-int fgHasSpaceball(void)\r
-{\r
-    if(sball_initialized == 0) {\r
-        fgInitialiseSpaceball();\r
-        if(sball_initialized != 1) {\r
-            fgWarning("fgInitialiseSpaceball failed\n");\r
-            return 0;\r
-        }\r
-    }\r
-\r
-#if TARGET_HOST_POSIX_X11\r
-    /* XXX this function should somehow query the driver if there's a device\r
-     * plugged in, as opposed to just checking if there's a driver to talk to.\r
-     */\r
-    return spnav_fd() == -1 ? 0 : 1;\r
-#else\r
-    return 0;\r
-#endif\r
-}\r
-\r
-int fgSpaceballNumButtons(void)\r
-{\r
-    if(sball_initialized == 0) {\r
-        fgInitialiseSpaceball();\r
-        if(sball_initialized != 1) {\r
-            fgWarning("fgInitialiseSpaceball failed\n");\r
-            return 0;\r
-        }\r
-    }\r
-\r
-#if TARGET_HOST_POSIX_X11\r
-    return 2;  /* TODO implement this properly */\r
-#else\r
-    return 0;\r
-#endif\r
-}\r
-\r
-void fgSpaceballSetWindow(SFG_Window *window)\r
-{\r
-    if(sball_initialized == 0) {\r
-        fgInitialiseSpaceball();\r
-        if(sball_initialized != 1) {\r
-            return;\r
-        }\r
-    }\r
-\r
-#if TARGET_HOST_POSIX_X11\r
-    if(spnav_win != window) {\r
-        spnav_x11_window(window->Window.Handle);\r
-        spnav_win = window;\r
-    }\r
-#endif\r
-}\r
-\r
-\r
-#if TARGET_HOST_POSIX_X11\r
-int fgIsSpaceballXEvent(const XEvent *xev)\r
-{\r
-    spnav_event sev;\r
-\r
-    if(spnav_win != fgStructure.CurrentWindow) {\r
-        /* this will also initialize spaceball if needed (first call) */\r
-        fgSpaceballSetWindow(fgStructure.CurrentWindow);\r
-    }\r
-\r
-    if(sball_initialized != 1) {\r
-        return 0;\r
-    }\r
-\r
-    return spnav_x11_event(xev, &sev);\r
-}\r
-\r
-void fgSpaceballHandleXEvent(const XEvent *xev)\r
-{\r
-    spnav_event sev;\r
-\r
-    if(sball_initialized == 0) {\r
-        fgInitialiseSpaceball();\r
-        if(sball_initialized != 1) {\r
-            return;\r
-        }\r
-    }\r
-\r
-    if(spnav_x11_event(xev, &sev)) {\r
-        switch(sev.type) {\r
-        case SPNAV_EVENT_MOTION:\r
-            if(sev.motion.x | sev.motion.y | sev.motion.z) {\r
-                INVOKE_WCB(*spnav_win, SpaceMotion, (sev.motion.x, sev.motion.y, sev.motion.z));\r
-            }\r
-            if(sev.motion.rx | sev.motion.ry | sev.motion.rz) {\r
-                INVOKE_WCB(*spnav_win, SpaceRotation, (sev.motion.rx, sev.motion.ry, sev.motion.rz));\r
-            }\r
-            spnav_remove_events(SPNAV_EVENT_MOTION);\r
-            break;\r
-\r
-        case SPNAV_EVENT_BUTTON:\r
-            INVOKE_WCB(*spnav_win, SpaceButton, (sev.button.bnum, sev.button.press ? GLUT_DOWN : GLUT_UP));\r
-            break;\r
-\r
-        default:\r
-            break;\r
-        }\r
-    }\r
-}\r
-\r
-/*\r
-The following code is part of libspnav, part of the spacenav project (spacenav.sf.net)\r
-Copyright (C) 2007-2009 John Tsiombikas <nuclear@member.fsf.org>\r
-\r
-Redistribution and use in source and binary forms, with or without\r
-modification, are permitted provided that the following conditions are met:\r
-\r
-1. Redistributions of source code must retain the above copyright notice, this\r
-   list of conditions and the following disclaimer.\r
-2. Redistributions in binary form must reproduce the above copyright notice,\r
-   this list of conditions and the following disclaimer in the documentation\r
-   and/or other materials provided with the distribution.\r
-3. The name of the author may not be used to endorse or promote products\r
-   derived from this software without specific prior written permission.\r
-\r
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED\r
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO\r
-EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\r
-EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\r
-OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING\r
-IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r
-OF SUCH DAMAGE.\r
-*/\r
-#include <stdio.h>\r
-#include <stdlib.h>\r
-#include <string.h>\r
-\r
-#ifdef HAVE_ERRNO_H\r
-#include <errno.h>\r
-#endif\r
-\r
-#include <X11/Xlib.h>\r
-#include <X11/Xutil.h>\r
-\r
-static Window get_daemon_window(Display *dpy);\r
-static int catch_badwin(Display *dpy, XErrorEvent *err);\r
-\r
-static Display *dpy;\r
-static Window app_win;\r
-static Atom motion_event, button_press_event, button_release_event, command_event;\r
-\r
-enum {\r
-  CMD_APP_WINDOW = 27695,\r
-  CMD_APP_SENS\r
-};\r
-\r
-#define IS_OPEN    dpy\r
-\r
-struct event_node {\r
-  spnav_event event;\r
-  struct event_node *next;\r
-};\r
-\r
-static int spnav_x11_open(Display *display, Window win)\r
-{\r
-  if(IS_OPEN) {\r
-    return -1;\r
-  }\r
-\r
-  dpy = display;\r
-\r
-  motion_event = XInternAtom(dpy, "MotionEvent", True);\r
-  button_press_event = XInternAtom(dpy, "ButtonPressEvent", True);\r
-  button_release_event = XInternAtom(dpy, "ButtonReleaseEvent", True);\r
-  command_event = XInternAtom(dpy, "CommandEvent", True);\r
-\r
-  if(!motion_event || !button_press_event || !button_release_event || !command_event) {\r
-    dpy = 0;\r
-    return -1;  /* daemon not started */\r
-  }\r
-\r
-  if(spnav_x11_window(win) == -1) {\r
-    dpy = 0;\r
-    return -1;  /* daemon not started */\r
-  }\r
-\r
-  app_win = win;\r
-  return 0;\r
-}\r
-\r
-static int spnav_close(void)\r
-{\r
-  if(dpy) {\r
-    spnav_x11_window(DefaultRootWindow(dpy));\r
-    app_win = 0;\r
-    dpy = 0;\r
-    return 0;\r
-  }\r
-  return -1;\r
-}\r
-\r
-static int spnav_x11_window(Window win)\r
-{\r
-  int (*prev_xerr_handler)(Display*, XErrorEvent*);\r
-  XEvent xev;\r
-  Window daemon_win;\r
-\r
-  if(!IS_OPEN) {\r
-    return -1;\r
-  }\r
-\r
-  if(!(daemon_win = get_daemon_window(dpy))) {\r
-    return -1;\r
-  }\r
-\r
-  prev_xerr_handler = XSetErrorHandler(catch_badwin);\r
-\r
-  xev.type = ClientMessage;\r
-  xev.xclient.send_event = False;\r
-  xev.xclient.display = dpy;\r
-  xev.xclient.window = win;\r
-  xev.xclient.message_type = command_event;\r
-  xev.xclient.format = 16;\r
-  xev.xclient.data.s[0] = ((unsigned int)win & 0xffff0000) >> 16;\r
-  xev.xclient.data.s[1] = (unsigned int)win & 0xffff;\r
-  xev.xclient.data.s[2] = CMD_APP_WINDOW;\r
-\r
-  XSendEvent(dpy, daemon_win, False, 0, &xev);\r
-  XSync(dpy, False);\r
-\r
-  XSetErrorHandler(prev_xerr_handler);\r
-  return 0;\r
-}\r
-\r
-static int spnav_fd(void)\r
-{\r
-  if(dpy) {\r
-    return ConnectionNumber(dpy);\r
-  }\r
-  return -1;\r
-}\r
-\r
-/*static int spnav_wait_event(spnav_event *event)\r
-{\r
-  if(dpy) {\r
-    for(;;) {\r
-      XEvent xev;\r
-      XNextEvent(dpy, &xev);\r
-\r
-      if(spnav_x11_event(&xev, event) > 0) {\r
-        return event->type;\r
-      }\r
-    }\r
-  }\r
-  return 0;\r
-}\r
-\r
-static int spnav_poll_event(spnav_event *event)\r
-{\r
-  if(dpy) {\r
-    if(XPending(dpy)) {\r
-      XEvent xev;\r
-      XNextEvent(dpy, &xev);\r
-\r
-      return spnav_x11_event(&xev, event);\r
-    }\r
-  }\r
-  return 0;\r
-}*/\r
-\r
-static Bool match_events(Display *dpy, XEvent *xev, char *arg)\r
-{\r
-  int evtype = *(int*)arg;\r
-\r
-  if(xev->type != ClientMessage) {\r
-    return False;\r
-  }\r
-\r
-  if(xev->xclient.message_type == motion_event) {\r
-    return !evtype || evtype == SPNAV_EVENT_MOTION ? True : False;\r
-  }\r
-  if(xev->xclient.message_type == button_press_event ||\r
-      xev->xclient.message_type == button_release_event) {\r
-    return !evtype || evtype == SPNAV_EVENT_BUTTON ? True : False;\r
-  }\r
-  return False;\r
-}\r
-\r
-static int spnav_remove_events(int type)\r
-{\r
-  int rm_count = 0;\r
-\r
-  if(dpy) {\r
-    XEvent xev;\r
-\r
-    while(XCheckIfEvent(dpy, &xev, match_events, (char*)&type)) {\r
-      rm_count++;\r
-    }\r
-    return rm_count;\r
-  }\r
-  return 0;\r
-}\r
-\r
-static int spnav_x11_event(const XEvent *xev, spnav_event *event)\r
-{\r
-  int i;\r
-  int xmsg_type;\r
-\r
-  if(xev->type != ClientMessage) {\r
-    return 0;\r
-  }\r
-\r
-  xmsg_type = xev->xclient.message_type;\r
-\r
-  if(xmsg_type != motion_event && xmsg_type != button_press_event &&\r
-      xmsg_type != button_release_event) {\r
-    return 0;\r
-  }\r
-\r
-  if(xmsg_type == motion_event) {\r
-    event->type = SPNAV_EVENT_MOTION;\r
-    event->motion.data = &event->motion.x;\r
-\r
-    for(i=0; i<6; i++) {\r
-      event->motion.data[i] = xev->xclient.data.s[i + 2];\r
-    }\r
-    event->motion.period = xev->xclient.data.s[8];\r
-  } else {\r
-    event->type = SPNAV_EVENT_BUTTON;\r
-    event->button.press = xmsg_type == button_press_event ? 1 : 0;\r
-    event->button.bnum = xev->xclient.data.s[2];\r
-  }\r
-  return event->type;\r
-}\r
-\r
-\r
-static Window get_daemon_window(Display *dpy)\r
-{\r
-  Window win, root_win;\r
-  XTextProperty wname;\r
-  Atom type;\r
-  int fmt;\r
-  unsigned long nitems, bytes_after;\r
-  unsigned char *prop;\r
-\r
-  root_win = DefaultRootWindow(dpy);\r
-\r
-  XGetWindowProperty(dpy, root_win, command_event, 0, 1, False, AnyPropertyType, &type, &fmt, &nitems, &bytes_after, &prop);\r
-  if(!prop) {\r
-    return 0;\r
-  }\r
-\r
-  win = *(Window*)prop;\r
-  XFree(prop);\r
-\r
-  if(!XGetWMName(dpy, win, &wname) || strcmp("Magellan Window", (char*)wname.value) != 0) {\r
-    return 0;\r
-  }\r
-\r
-  return win;\r
-}\r
-\r
-static int catch_badwin(Display *dpy, XErrorEvent *err)\r
-{\r
-  char buf[256];\r
-\r
-  if(err->error_code == BadWindow) {\r
-    /* do nothing? */\r
-  } else {\r
-    XGetErrorText(dpy, err->error_code, buf, sizeof buf);\r
-    fprintf(stderr, "Caught unexpected X error: %s\n", buf);\r
-  }\r
-  return 0;\r
-}\r
-\r
-#endif  /* TARGET_HOST_POSIX_X11 */\r
diff --git a/src/freeglut_state.c b/src/freeglut_state.c
deleted file mode 100644 (file)
index 9e3a627..0000000
+++ /dev/null
@@ -1,887 +0,0 @@
-/*
- * freeglut_state.c
- *
- * Freeglut state query methods.
- *
- * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.
- * Written by Pawel W. Olszta, <olszta@sourceforge.net>
- * Creation date: Thu Dec 16 1999
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-#include <GL/freeglut.h>
-#include "freeglut_internal.h"
-
-/*
- * TODO BEFORE THE STABLE RELEASE:
- *
- *  glutGet()               -- X11 tests passed, but check if all enums
- *                             handled (what about Win32?)
- *  glutDeviceGet()         -- X11 tests passed, but check if all enums
- *                             handled (what about Win32?)
- *  glutGetModifiers()      -- OK, but could also remove the limitation
- *  glutLayerGet()          -- what about GLUT_NORMAL_DAMAGED?
- *
- * The fail-on-call policy will help adding the most needed things imho.
- */
-
-/* -- LOCAL DEFINITIONS ---------------------------------------------------- */
-
-/* -- PRIVATE FUNCTIONS ---------------------------------------------------- */
-
-#if TARGET_HOST_POSIX_X11
-/*
- * Queries the GL context about some attributes
- */
-static int fghGetConfig( int attribute )
-{
-  int returnValue = 0;
-  int result;  /*  Not checked  */
-
-  if( fgStructure.CurrentWindow )
-      result = glXGetFBConfigAttrib( fgDisplay.Display,
-                                     *(fgStructure.CurrentWindow->Window.FBConfig),
-                                     attribute,
-                                     &returnValue );
-
-  return returnValue;
-}
-#endif
-
-/* -- INTERFACE FUNCTIONS -------------------------------------------------- */
-
-/*
- * General settings assignment method
- */
-void FGAPIENTRY glutSetOption( GLenum eWhat, int value )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSetOption" );
-
-    /*
-     * XXX In chronological code add order.  (WHY in that order?)
-     */
-    switch( eWhat )
-    {
-    case GLUT_INIT_WINDOW_X:
-        fgState.Position.X = (GLint)value;
-        break;
-
-    case GLUT_INIT_WINDOW_Y:
-        fgState.Position.Y = (GLint)value;
-        break;
-
-    case GLUT_INIT_WINDOW_WIDTH:
-        fgState.Size.X = (GLint)value;
-        break;
-
-    case GLUT_INIT_WINDOW_HEIGHT:
-        fgState.Size.Y = (GLint)value;
-        break;
-
-    case GLUT_INIT_DISPLAY_MODE:
-        fgState.DisplayMode = (unsigned int)value;
-        break;
-
-    case GLUT_ACTION_ON_WINDOW_CLOSE:
-        fgState.ActionOnWindowClose = value;
-        break;
-
-    case GLUT_RENDERING_CONTEXT:
-        fgState.UseCurrentContext =
-            ( value == GLUT_USE_CURRENT_CONTEXT ) ? GL_TRUE : GL_FALSE;
-        break;
-
-    case GLUT_DIRECT_RENDERING:
-        fgState.DirectContext = value;
-        break;
-
-    case GLUT_WINDOW_CURSOR:
-        if( fgStructure.CurrentWindow != NULL )
-            fgStructure.CurrentWindow->State.Cursor = value;
-        break;
-
-    case GLUT_AUX:
-      fgState.AuxiliaryBufferNumber = value;
-      break;
-
-    case GLUT_MULTISAMPLE:
-      fgState.SampleNumber = value;
-      break;
-
-    default:
-        fgWarning( "glutSetOption(): missing enum handle %d", eWhat );
-        break;
-    }
-}
-
-#if TARGET_HOST_MS_WINDOWS
-/* The following include file is available from SGI but is not standard:
- *   #include <GL/wglext.h>
- * So we copy the necessary parts out of it to support the multisampling query
- */
-#define WGL_SAMPLES_ARB                0x2042
-#endif
-
-
-/*
- * General settings query method
- */
-int FGAPIENTRY glutGet( GLenum eWhat )
-{
-#if TARGET_HOST_MS_WINDOWS
-    int returnValue ;
-    GLboolean boolValue ;
-#endif
-
-    int nsamples = 0;
-
-    switch (eWhat)
-    {
-    case GLUT_INIT_STATE:
-        return fgState.Initialised;
-
-    case GLUT_ELAPSED_TIME:
-        return fgElapsedTime();
-    }
-
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutGet" );
-
-    /* XXX In chronological code add order.  (WHY in that order?) */
-    switch( eWhat )
-    {
-    /* Following values are stored in fgState and fgDisplay global structures */
-    case GLUT_SCREEN_WIDTH:         return fgDisplay.ScreenWidth   ;
-    case GLUT_SCREEN_HEIGHT:        return fgDisplay.ScreenHeight  ;
-    case GLUT_SCREEN_WIDTH_MM:      return fgDisplay.ScreenWidthMM ;
-    case GLUT_SCREEN_HEIGHT_MM:     return fgDisplay.ScreenHeightMM;
-    case GLUT_INIT_WINDOW_X:        return fgState.Position.Use ?
-                                           fgState.Position.X : -1 ;
-    case GLUT_INIT_WINDOW_Y:        return fgState.Position.Use ?
-                                           fgState.Position.Y : -1 ;
-    case GLUT_INIT_WINDOW_WIDTH:    return fgState.Size.Use ?
-                                           fgState.Size.X : -1     ;
-    case GLUT_INIT_WINDOW_HEIGHT:   return fgState.Size.Use ?
-                                           fgState.Size.Y : -1     ;
-    case GLUT_INIT_DISPLAY_MODE:    return fgState.DisplayMode     ;
-    case GLUT_INIT_MAJOR_VERSION:   return fgState.MajorVersion    ;
-    case GLUT_INIT_MINOR_VERSION:   return fgState.MinorVersion    ;
-    case GLUT_INIT_FLAGS:           return fgState.ContextFlags    ;
-    case GLUT_INIT_PROFILE:         return fgState.ContextProfile  ;
-
-#if TARGET_HOST_POSIX_X11
-    /*
-     * The window/context specific queries are handled mostly by
-     * fghGetConfig().
-     */
-    case GLUT_WINDOW_NUM_SAMPLES:
-#ifdef GLX_VERSION_1_3
-        glGetIntegerv(GL_SAMPLES, &nsamples);
-#endif
-        return nsamples;
-
-    /*
-     * The rest of GLX queries under X are general enough to use a macro to
-     * check them
-     */
-#   define GLX_QUERY(a,b) case a: return fghGetConfig( b );
-
-    GLX_QUERY( GLUT_WINDOW_RGBA,                GLX_RGBA                );
-    GLX_QUERY( GLUT_WINDOW_DOUBLEBUFFER,        GLX_DOUBLEBUFFER        );
-    GLX_QUERY( GLUT_WINDOW_BUFFER_SIZE,         GLX_BUFFER_SIZE         );
-    GLX_QUERY( GLUT_WINDOW_STENCIL_SIZE,        GLX_STENCIL_SIZE        );
-    GLX_QUERY( GLUT_WINDOW_DEPTH_SIZE,          GLX_DEPTH_SIZE          );
-    GLX_QUERY( GLUT_WINDOW_RED_SIZE,            GLX_RED_SIZE            );
-    GLX_QUERY( GLUT_WINDOW_GREEN_SIZE,          GLX_GREEN_SIZE          );
-    GLX_QUERY( GLUT_WINDOW_BLUE_SIZE,           GLX_BLUE_SIZE           );
-    GLX_QUERY( GLUT_WINDOW_ALPHA_SIZE,          GLX_ALPHA_SIZE          );
-    GLX_QUERY( GLUT_WINDOW_ACCUM_RED_SIZE,      GLX_ACCUM_RED_SIZE      );
-    GLX_QUERY( GLUT_WINDOW_ACCUM_GREEN_SIZE,    GLX_ACCUM_GREEN_SIZE    );
-    GLX_QUERY( GLUT_WINDOW_ACCUM_BLUE_SIZE,     GLX_ACCUM_BLUE_SIZE     );
-    GLX_QUERY( GLUT_WINDOW_ACCUM_ALPHA_SIZE,    GLX_ACCUM_ALPHA_SIZE    );
-    GLX_QUERY( GLUT_WINDOW_STEREO,              GLX_STEREO              );
-
-#   undef GLX_QUERY
-
-    /* Colormap size is handled in a bit different way than all the rest */
-    case GLUT_WINDOW_COLORMAP_SIZE:
-        if( (fghGetConfig( GLX_RGBA )) || (fgStructure.CurrentWindow == NULL) )
-        {
-            /*
-             * We've got a RGBA visual, so there is no colormap at all.
-             * The other possibility is that we have no current window set.
-             */
-            return 0;
-        }
-        else
-        {
-          const GLXFBConfig * fbconfig =
-                fgStructure.CurrentWindow->Window.FBConfig;
-
-          XVisualInfo * visualInfo =
-                glXGetVisualFromFBConfig( fgDisplay.Display, *fbconfig );
-
-          const int result = visualInfo->visual->map_entries;
-
-          XFree(visualInfo);
-
-          return result;
-        }
-
-    /*
-     * Those calls are somewhat similiar, as they use XGetWindowAttributes()
-     * function
-     */
-    case GLUT_WINDOW_X:
-    case GLUT_WINDOW_Y:
-    case GLUT_WINDOW_BORDER_WIDTH:
-    case GLUT_WINDOW_HEADER_HEIGHT:
-    {
-        int x, y;
-        Window w;
-
-        if( fgStructure.CurrentWindow == NULL )
-            return 0;
-
-        XTranslateCoordinates(
-            fgDisplay.Display,
-            fgStructure.CurrentWindow->Window.Handle,
-            fgDisplay.RootWindow,
-            0, 0, &x, &y, &w);
-
-        switch ( eWhat )
-        {
-        case GLUT_WINDOW_X: return x;
-        case GLUT_WINDOW_Y: return y;
-        }
-
-        if ( w == 0 )
-            return 0;
-        XTranslateCoordinates(
-            fgDisplay.Display,
-            fgStructure.CurrentWindow->Window.Handle,
-            w, 0, 0, &x, &y, &w);
-
-        switch ( eWhat )
-        {
-        case GLUT_WINDOW_BORDER_WIDTH:  return x;
-        case GLUT_WINDOW_HEADER_HEIGHT: return y;
-        }
-    }
-
-    case GLUT_WINDOW_WIDTH:
-    case GLUT_WINDOW_HEIGHT:
-    {
-        XWindowAttributes winAttributes;
-
-        if( fgStructure.CurrentWindow == NULL )
-            return 0;
-        XGetWindowAttributes(
-            fgDisplay.Display,
-            fgStructure.CurrentWindow->Window.Handle,
-            &winAttributes
-        );
-        switch ( eWhat )
-        {
-        case GLUT_WINDOW_WIDTH:            return winAttributes.width ;
-        case GLUT_WINDOW_HEIGHT:           return winAttributes.height ;
-        }
-    }
-
-    /* I do not know yet if there will be a fgChooseVisual() function for Win32 */
-    case GLUT_DISPLAY_MODE_POSSIBLE:
-    {
-        /*  We should not have to call fgChooseFBConfig again here.  */
-        GLXFBConfig * fbconfig;
-        int isPossible;
-
-        fbconfig = fgChooseFBConfig(NULL);
-
-        if (fbconfig == NULL)
-        {
-            isPossible = 0;
-        }
-        else
-        {
-            isPossible = 1;
-            XFree(fbconfig);
-        }
-
-        return isPossible;
-    }
-
-    /* This is system-dependant */
-    case GLUT_WINDOW_FORMAT_ID:
-        if( fgStructure.CurrentWindow == NULL )
-            return 0;
-
-        return fghGetConfig( GLX_VISUAL_ID );
-
-#elif TARGET_HOST_MS_WINDOWS
-
-    case GLUT_WINDOW_NUM_SAMPLES:
-      glGetIntegerv(WGL_SAMPLES_ARB, &nsamples);
-      return nsamples;
-
-    /* Handle the OpenGL inquiries */
-    case GLUT_WINDOW_RGBA:
-#if defined(_WIN32_WCE)
-      boolValue = (GLboolean)0;  /* WinCE doesn't support this feature */
-#else
-      glGetBooleanv ( GL_RGBA_MODE, &boolValue );
-      returnValue = boolValue ? 1 : 0;
-#endif
-      return returnValue;
-    case GLUT_WINDOW_DOUBLEBUFFER:
-#if defined(_WIN32_WCE)
-      boolValue = (GLboolean)0;  /* WinCE doesn't support this feature */
-#else
-      glGetBooleanv ( GL_DOUBLEBUFFER, &boolValue );
-      returnValue = boolValue ? 1 : 0;
-#endif
-      return returnValue;
-    case GLUT_WINDOW_STEREO:
-#if defined(_WIN32_WCE)
-      boolValue = (GLboolean)0;  /* WinCE doesn't support this feature */
-#else
-      glGetBooleanv ( GL_STEREO, &boolValue );
-      returnValue = boolValue ? 1 : 0;
-#endif
-      return returnValue;
-
-    case GLUT_WINDOW_RED_SIZE:
-      glGetIntegerv ( GL_RED_BITS, &returnValue );
-      return returnValue;
-    case GLUT_WINDOW_GREEN_SIZE:
-      glGetIntegerv ( GL_GREEN_BITS, &returnValue );
-      return returnValue;
-    case GLUT_WINDOW_BLUE_SIZE:
-      glGetIntegerv ( GL_BLUE_BITS, &returnValue );
-      return returnValue;
-    case GLUT_WINDOW_ALPHA_SIZE:
-      glGetIntegerv ( GL_ALPHA_BITS, &returnValue );
-      return returnValue;
-    case GLUT_WINDOW_ACCUM_RED_SIZE:
-#if defined(_WIN32_WCE)
-      returnValue = 0;  /* WinCE doesn't support this feature */
-#else
-      glGetIntegerv ( GL_ACCUM_RED_BITS, &returnValue );
-#endif
-      return returnValue;
-    case GLUT_WINDOW_ACCUM_GREEN_SIZE:
-#if defined(_WIN32_WCE)
-      returnValue = 0;  /* WinCE doesn't support this feature */
-#else
-      glGetIntegerv ( GL_ACCUM_GREEN_BITS, &returnValue );
-#endif
-      return returnValue;
-    case GLUT_WINDOW_ACCUM_BLUE_SIZE:
-#if defined(_WIN32_WCE)
-      returnValue = 0;  /* WinCE doesn't support this feature */
-#else
-      glGetIntegerv ( GL_ACCUM_BLUE_BITS, &returnValue );
-#endif
-      return returnValue;
-    case GLUT_WINDOW_ACCUM_ALPHA_SIZE:
-#if defined(_WIN32_WCE)
-      returnValue = 0;  /* WinCE doesn't support this feature */
-#else
-      glGetIntegerv ( GL_ACCUM_ALPHA_BITS, &returnValue );
-#endif
-      return returnValue;
-    case GLUT_WINDOW_DEPTH_SIZE:
-      glGetIntegerv ( GL_DEPTH_BITS, &returnValue );
-      return returnValue;
-
-    case GLUT_WINDOW_BUFFER_SIZE:
-      returnValue = 1 ;                                      /* ????? */
-      return returnValue;
-    case GLUT_WINDOW_STENCIL_SIZE:
-      returnValue = 0 ;                                      /* ????? */
-      return returnValue;
-
-    case GLUT_WINDOW_X:
-    case GLUT_WINDOW_Y:
-    case GLUT_WINDOW_WIDTH:
-    case GLUT_WINDOW_HEIGHT:
-    {
-        /*
-         *  There is considerable confusion about the "right thing to
-         *  do" concerning window  size and position.  GLUT itself is
-         *  not consistent between Windows and UNIX/X11; since
-         *  platform independence is a virtue for "freeglut", we
-         *  decided to break with GLUT's behaviour.
-         *
-         *  Under UNIX/X11, it is apparently not possible to get the
-         *  window border sizes in order to subtract them off the
-         *  window's initial position until some time after the window
-         *  has been created.  Therefore we decided on the following
-         *  behaviour, both under Windows and under UNIX/X11:
-         *  - When you create a window with position (x,y) and size
-         *    (w,h), the upper left hand corner of the outside of the
-         *    window is at (x,y) and the size of the drawable area  is
-         *    (w,h).
-         *  - When you query the size and position of the window--as
-         *    is happening here for Windows--"freeglut" will return
-         *    the size of the drawable area--the (w,h) that you
-         *    specified when you created the window--and the coordinates
-         *    of the upper left hand corner of the drawable
-         *    area--which is NOT the (x,y) you specified.
-         */
-
-        RECT winRect;
-
-        freeglut_return_val_if_fail( fgStructure.CurrentWindow != NULL, 0 );
-
-#if defined(_WIN32_WCE)
-        GetWindowRect( fgStructure.CurrentWindow->Window.Handle, &winRect );
-#else
-        winRect = fghGetClientArea(fgStructure.CurrentWindow, FALSE);
-#endif /* defined(_WIN32_WCE) */
-
-        switch( eWhat )
-        {
-        case GLUT_WINDOW_X:      return winRect.left                ;
-        case GLUT_WINDOW_Y:      return winRect.top                 ;
-        case GLUT_WINDOW_WIDTH:  return winRect.right - winRect.left;
-        case GLUT_WINDOW_HEIGHT: return winRect.bottom - winRect.top;
-        }
-    }
-    break;
-
-    case GLUT_WINDOW_BORDER_WIDTH :
-    case GLUT_WINDOW_HEADER_HEIGHT :
-#if defined(_WIN32_WCE)
-        return 0;
-#else
-        {
-            DWORD windowStyle;
-
-            if (fgStructure.CurrentWindow && fgStructure.CurrentWindow->Window.Handle)
-                windowStyle = GetWindowLong(fgStructure.CurrentWindow->Window.Handle, GWL_STYLE);
-            else
-                /* If no window, return sizes for a default window with title bar and border */
-                windowStyle = WS_OVERLAPPEDWINDOW;
-            
-            switch( eWhat )
-            {
-            case GLUT_WINDOW_BORDER_WIDTH:
-                {
-                    int xBorderWidth, yBorderWidth;
-                    fghGetBorderWidth(windowStyle, &xBorderWidth, &yBorderWidth);
-                    return xBorderWidth;
-                }
-            case GLUT_WINDOW_HEADER_HEIGHT:
-                /* Need to query for WS_MAXIMIZEBOX to see if we have a title bar, the WS_CAPTION query is also true for a WS_DLGFRAME only... */
-                return (windowStyle & WS_MAXIMIZEBOX)? GetSystemMetrics( SM_CYCAPTION ) : 0;
-            }
-        }
-#endif /* defined(_WIN32_WCE) */
-
-    case GLUT_DISPLAY_MODE_POSSIBLE:
-#if defined(_WIN32_WCE)
-        return 0;
-#else
-        return fgSetupPixelFormat( fgStructure.CurrentWindow, GL_TRUE,
-                                    PFD_MAIN_PLANE );
-#endif /* defined(_WIN32_WCE) */
-
-
-    case GLUT_WINDOW_FORMAT_ID:
-#if !defined(_WIN32_WCE)
-        if( fgStructure.CurrentWindow != NULL )
-            return GetPixelFormat( fgStructure.CurrentWindow->Window.Device );
-#endif /* defined(_WIN32_WCE) */
-        return 0;
-
-#endif
-
-    /* The window structure queries */
-    case GLUT_WINDOW_PARENT:
-        if( fgStructure.CurrentWindow         == NULL ) return 0;
-        if( fgStructure.CurrentWindow->Parent == NULL ) return 0;
-        return fgStructure.CurrentWindow->Parent->ID;
-
-    case GLUT_WINDOW_NUM_CHILDREN:
-        if( fgStructure.CurrentWindow == NULL )
-            return 0;
-        return fgListLength( &fgStructure.CurrentWindow->Children );
-
-    case GLUT_WINDOW_CURSOR:
-        if( fgStructure.CurrentWindow == NULL )
-            return 0;
-        return fgStructure.CurrentWindow->State.Cursor;
-
-    case GLUT_MENU_NUM_ITEMS:
-        if( fgStructure.CurrentMenu == NULL )
-            return 0;
-        return fgListLength( &fgStructure.CurrentMenu->Entries );
-
-    case GLUT_ACTION_ON_WINDOW_CLOSE:
-        return fgState.ActionOnWindowClose;
-
-    case GLUT_VERSION :
-        return VERSION_MAJOR * 10000 + VERSION_MINOR * 100 + VERSION_PATCH;
-
-    case GLUT_RENDERING_CONTEXT:
-        return fgState.UseCurrentContext ? GLUT_USE_CURRENT_CONTEXT
-                                         : GLUT_CREATE_NEW_CONTEXT;
-
-    case GLUT_DIRECT_RENDERING:
-        return fgState.DirectContext;
-
-    case GLUT_FULL_SCREEN:
-        return fgStructure.CurrentWindow->State.IsFullscreen;
-
-    case GLUT_AUX:
-      return fgState.AuxiliaryBufferNumber;
-
-    case GLUT_MULTISAMPLE:
-      return fgState.SampleNumber;
-
-    default:
-        fgWarning( "glutGet(): missing enum handle %d", eWhat );
-        break;
-    }
-    return -1;
-}
-
-/*
- * Returns various device information.
- */
-int FGAPIENTRY glutDeviceGet( GLenum eWhat )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutDeviceGet" );
-
-    /* XXX WARNING: we are mostly lying in this function. */
-    switch( eWhat )
-    {
-    case GLUT_HAS_KEYBOARD:
-        /*
-         * Win32 is assumed a keyboard, and this cannot be queried,
-         * except for WindowsCE.
-         *
-         * X11 has a core keyboard by definition, although it can
-         * be present as a virtual/dummy keyboard. For now, there
-         * is no reliable way to tell if a real keyboard is present.
-         */
-#if defined(_WIN32_CE)
-        return ( GetKeyboardStatus() & KBDI_KEYBOARD_PRESENT ) ? 1 : 0;
-#   if FREEGLUT_LIB_PRAGMAS
-#       pragma comment (lib,"Kbdui.lib")
-#   endif
-
-#else
-        return 1;
-#endif
-
-#if TARGET_HOST_POSIX_X11
-
-    /* X11 has a mouse by definition */
-    case GLUT_HAS_MOUSE:
-        return 1 ;
-
-    case GLUT_NUM_MOUSE_BUTTONS:
-        /* We should be able to pass NULL when the last argument is zero,
-         * but at least one X server has a bug where this causes a segfault.
-         *
-         * In XFree86/Xorg servers, a mouse wheel is seen as two buttons
-         * rather than an Axis; "freeglut_main.c" expects this when
-         * checking for a wheel event.
-         */
-        {
-            unsigned char map;
-            int nbuttons = XGetPointerMapping(fgDisplay.Display, &map,0);
-            return nbuttons;
-        }
-
-#elif TARGET_HOST_MS_WINDOWS
-
-    case GLUT_HAS_MOUSE:
-        /*
-         * MS Windows can be booted without a mouse.
-         */
-        return GetSystemMetrics( SM_MOUSEPRESENT );
-
-    case GLUT_NUM_MOUSE_BUTTONS:
-#  if defined(_WIN32_WCE)
-        return 1;
-#  else
-        return GetSystemMetrics( SM_CMOUSEBUTTONS );
-#  endif
-#endif
-
-    case GLUT_HAS_JOYSTICK:
-        return fgJoystickDetect ();
-
-    case GLUT_OWNS_JOYSTICK:
-        return fgState.JoysticksInitialised;
-
-    case GLUT_JOYSTICK_POLL_RATE:
-        return fgStructure.CurrentWindow ? fgStructure.CurrentWindow->State.JoystickPollRate : 0;
-
-    /* XXX The following two are only for Joystick 0 but this is an improvement */
-    case GLUT_JOYSTICK_BUTTONS:
-        return glutJoystickGetNumButtons ( 0 );
-
-    case GLUT_JOYSTICK_AXES:
-        return glutJoystickGetNumAxes ( 0 );
-
-    case GLUT_HAS_DIAL_AND_BUTTON_BOX:
-        return fgInputDeviceDetect ();
-
-    case GLUT_NUM_DIALS:
-        if ( fgState.InputDevsInitialised ) return 8;
-        return 0;
-    case GLUT_NUM_BUTTON_BOX_BUTTONS:
-        return 0;
-
-    case GLUT_HAS_SPACEBALL:
-        return fgHasSpaceball();
-
-    case GLUT_HAS_TABLET:
-        return 0;
-
-    case GLUT_NUM_SPACEBALL_BUTTONS:
-        return fgSpaceballNumButtons();
-
-    case GLUT_NUM_TABLET_BUTTONS:
-        return 0;
-
-    case GLUT_DEVICE_IGNORE_KEY_REPEAT:
-        return fgStructure.CurrentWindow ? fgStructure.CurrentWindow->State.IgnoreKeyRepeat : 0;
-
-    case GLUT_DEVICE_KEY_REPEAT:
-        return fgState.KeyRepeat;
-
-    default:
-        fgWarning( "glutDeviceGet(): missing enum handle %d", eWhat );
-        break;
-    }
-
-    /* And now -- the failure. */
-    return -1;
-}
-
-/*
- * This should return the current state of ALT, SHIFT and CTRL keys.
- */
-int FGAPIENTRY glutGetModifiers( void )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutGetModifiers" );
-    if( fgState.Modifiers == INVALID_MODIFIERS )
-    {
-        fgWarning( "glutGetModifiers() called outside an input callback" );
-        return 0;
-    }
-
-    return fgState.Modifiers;
-}
-
-/*
- * Return the state of the GLUT API overlay subsystem. A misery ;-)
- */
-int FGAPIENTRY glutLayerGet( GLenum eWhat )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutLayerGet" );
-
-    /*
-     * This is easy as layers are not implemented ;-)
-     *
-     * XXX Can we merge the UNIX/X11 and WIN32 sections?  Or
-     * XXX is overlay support planned?
-     */
-    switch( eWhat )
-    {
-
-#if TARGET_HOST_POSIX_X11
-
-    case GLUT_OVERLAY_POSSIBLE:
-        return 0;
-
-    case GLUT_LAYER_IN_USE:
-        return GLUT_NORMAL;
-
-    case GLUT_HAS_OVERLAY:
-        return 0;
-
-    case GLUT_TRANSPARENT_INDEX:
-        /*
-         * Return just anything, which is always defined as zero
-         *
-         * XXX HUH?
-         */
-        return 0;
-
-    case GLUT_NORMAL_DAMAGED:
-        /* XXX Actually I do not know. Maybe. */
-        return 0;
-
-    case GLUT_OVERLAY_DAMAGED:
-        return -1;
-
-#elif TARGET_HOST_MS_WINDOWS
-
-    case GLUT_OVERLAY_POSSIBLE:
-/*      return fgSetupPixelFormat( fgStructure.CurrentWindow, GL_TRUE,
-                                   PFD_OVERLAY_PLANE ); */
-      return 0 ;
-
-    case GLUT_LAYER_IN_USE:
-        return GLUT_NORMAL;
-
-    case GLUT_HAS_OVERLAY:
-        return 0;
-
-    case GLUT_TRANSPARENT_INDEX:
-        /*
-         * Return just anything, which is always defined as zero
-         *
-         * XXX HUH?
-         */
-        return 0;
-
-    case GLUT_NORMAL_DAMAGED:
-        /* XXX Actually I do not know. Maybe. */
-        return 0;
-
-    case GLUT_OVERLAY_DAMAGED:
-        return -1;
-#endif
-
-    default:
-        fgWarning( "glutLayerGet(): missing enum handle %d", eWhat );
-        break;
-    }
-
-    /* And fail. That's good. Programs do love failing. */
-    return -1;
-}
-
-int * FGAPIENTRY glutGetModeValues(GLenum eWhat, int * size)
-{
-  int * array;
-
-#if TARGET_HOST_POSIX_X11
-  int attributes[9];
-  GLXFBConfig * fbconfigArray;  /*  Array of FBConfigs  */
-  int fbconfigArraySize;        /*  Number of FBConfigs in the array  */
-  int attribute_name = 0;
-#endif
-
-  FREEGLUT_EXIT_IF_NOT_INITIALISED("glutGetModeValues");
-
-  array = NULL;
-  *size = 0;
-
-  switch (eWhat)
-    {
-#if TARGET_HOST_POSIX_X11
-    case GLUT_AUX:
-    case GLUT_MULTISAMPLE:
-
-      attributes[0] = GLX_BUFFER_SIZE;
-      attributes[1] = GLX_DONT_CARE;
-
-      switch (eWhat)
-        {
-        case GLUT_AUX:
-          /*
-            FBConfigs are now sorted by increasing number of auxiliary
-            buffers.  We want at least one buffer.
-          */
-          attributes[2] = GLX_AUX_BUFFERS;
-          attributes[3] = 1;
-          attributes[4] = None;
-
-          attribute_name = GLX_AUX_BUFFERS;
-
-          break;
-
-
-        case GLUT_MULTISAMPLE:
-          attributes[2] = GLX_AUX_BUFFERS;
-          attributes[3] = GLX_DONT_CARE;
-          attributes[4] = GLX_SAMPLE_BUFFERS;
-          attributes[5] = 1;
-          /*
-            FBConfigs are now sorted by increasing number of samples per
-            pixel.  We want at least one sample.
-          */
-          attributes[6] = GLX_SAMPLES;
-          attributes[7] = 1;
-          attributes[8] = None;
-
-          attribute_name = GLX_SAMPLES;
-
-          break;
-        }
-
-      fbconfigArray = glXChooseFBConfig(fgDisplay.Display,
-                                        fgDisplay.Screen,
-                                        attributes,
-                                        &fbconfigArraySize);
-
-      if (fbconfigArray != NULL)
-        {
-          int * temp_array;
-          int result;   /*  Returned by glXGetFBConfigAttrib. Not checked.  */
-          int previous_value;
-          int i;
-
-          temp_array = malloc(sizeof(int) * fbconfigArraySize);
-          previous_value = 0;
-
-          for (i = 0; i < fbconfigArraySize; i++)
-            {
-              int value;
-
-              result = glXGetFBConfigAttrib(fgDisplay.Display,
-                                            fbconfigArray[i],
-                                            attribute_name,
-                                            &value);
-              if (value > previous_value)
-                {
-                  temp_array[*size] = value;
-                  previous_value = value;
-                  (*size)++;
-                }
-            }
-
-          array = malloc(sizeof(int) * (*size));
-          for (i = 0; i < *size; i++)
-            {
-              array[i] = temp_array[i];
-            }
-
-          free(temp_array);
-          XFree(fbconfigArray);
-        }
-
-      break;
-#endif      
-
-    default:
-      break;
-    }
-
-  return array;
-}
-
-/*** END OF FILE ***/
diff --git a/src/freeglut_stroke_mono_roman.c b/src/freeglut_stroke_mono_roman.c
deleted file mode 100644 (file)
index ec86d56..0000000
+++ /dev/null
@@ -1,2849 +0,0 @@
-/*
- * freeglut_stroke_mono_roman.c
- *
- * freeglut Monospace Roman stroke font definition
- *
- * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.
- * Written by Pawel W. Olszta, <olszta@sourceforge.net>
- * Creation date: Thu Dec 16 1999
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-
-/* This file has been automatically generated by the genstroke utility. */
-
-#include <GL/freeglut.h>
-#include "freeglut_internal.h"
-
-/* char: 0x20 */
-
-static const SFG_StrokeStrip ch32st[] =
-{
-  { 0, NULL }
-};
-
-static const SFG_StrokeChar ch32 = {104.762f,0,ch32st};
-
-/* char: 0x21 */
-
-static const SFG_StrokeVertex ch33st0[] =
-{
- {52.381f,100.0f},
- {52.381f,33.3333f}
-};
-
-static const SFG_StrokeVertex ch33st1[] =
-{
- {52.381f,9.5238f},
- {47.6191f,4.7619f},
- {52.381f,0.0f},
- {57.1429f,4.7619f},
- {52.381f,9.5238f}
-};
-
-static const SFG_StrokeStrip ch33st[] =
-{
- {2,ch33st0},
- {5,ch33st1}
-};
-
-static const SFG_StrokeChar ch33 = {104.762f,2,ch33st};
-
-/* char: 0x22 */
-
-static const SFG_StrokeVertex ch34st0[] =
-{
- {33.3334f,100.0f},
- {33.3334f,66.6667f}
-};
-
-static const SFG_StrokeVertex ch34st1[] =
-{
- {71.4286f,100.0f},
- {71.4286f,66.6667f}
-};
-
-static const SFG_StrokeStrip ch34st[] =
-{
- {2,ch34st0},
- {2,ch34st1}
-};
-
-static const SFG_StrokeChar ch34 = {104.762f,2,ch34st};
-
-/* char: 0x23 */
-
-static const SFG_StrokeVertex ch35st0[] =
-{
- {54.7619f,119.048f},
- {21.4286f,-33.3333f}
-};
-
-static const SFG_StrokeVertex ch35st1[] =
-{
- {83.3334f,119.048f},
- {50.0f,-33.3333f}
-};
-
-static const SFG_StrokeVertex ch35st2[] =
-{
- {21.4286f,57.1429f},
- {88.0952f,57.1429f}
-};
-
-static const SFG_StrokeVertex ch35st3[] =
-{
- {16.6667f,28.5714f},
- {83.3334f,28.5714f}
-};
-
-static const SFG_StrokeStrip ch35st[] =
-{
- {2,ch35st0},
- {2,ch35st1},
- {2,ch35st2},
- {2,ch35st3}
-};
-
-static const SFG_StrokeChar ch35 = {104.762f,4,ch35st};
-
-/* char: 0x24 */
-
-static const SFG_StrokeVertex ch36st0[] =
-{
- {42.8571f,119.048f},
- {42.8571f,-19.0476f}
-};
-
-static const SFG_StrokeVertex ch36st1[] =
-{
- {61.9047f,119.048f},
- {61.9047f,-19.0476f}
-};
-
-static const SFG_StrokeVertex ch36st2[] =
-{
- {85.7143f,85.7143f},
- {76.1905f,95.2381f},
- {61.9047f,100.0f},
- {42.8571f,100.0f},
- {28.5714f,95.2381f},
- {19.0476f,85.7143f},
- {19.0476f,76.1905f},
- {23.8095f,66.6667f},
- {28.5714f,61.9048f},
- {38.0952f,57.1429f},
- {66.6666f,47.619f},
- {76.1905f,42.8571f},
- {80.9524f,38.0952f},
- {85.7143f,28.5714f},
- {85.7143f,14.2857f},
- {76.1905f,4.7619f},
- {61.9047f,0.0f},
- {42.8571f,0.0f},
- {28.5714f,4.7619f},
- {19.0476f,14.2857f}
-};
-
-static const SFG_StrokeStrip ch36st[] =
-{
- {2,ch36st0},
- {2,ch36st1},
- {20,ch36st2}
-};
-
-static const SFG_StrokeChar ch36 = {104.762f,3,ch36st};
-
-/* char: 0x25 */
-
-static const SFG_StrokeVertex ch37st0[] =
-{
- {95.2381f,100.0f},
- {9.5238f,0.0f}
-};
-
-static const SFG_StrokeVertex ch37st1[] =
-{
- {33.3333f,100.0f},
- {42.8571f,90.4762f},
- {42.8571f,80.9524f},
- {38.0952f,71.4286f},
- {28.5714f,66.6667f},
- {19.0476f,66.6667f},
- {9.5238f,76.1905f},
- {9.5238f,85.7143f},
- {14.2857f,95.2381f},
- {23.8095f,100.0f},
- {33.3333f,100.0f},
- {42.8571f,95.2381f},
- {57.1428f,90.4762f},
- {71.4286f,90.4762f},
- {85.7143f,95.2381f},
- {95.2381f,100.0f}
-};
-
-static const SFG_StrokeVertex ch37st2[] =
-{
- {76.1905f,33.3333f},
- {66.6667f,28.5714f},
- {61.9048f,19.0476f},
- {61.9048f,9.5238f},
- {71.4286f,0.0f},
- {80.9524f,0.0f},
- {90.4762f,4.7619f},
- {95.2381f,14.2857f},
- {95.2381f,23.8095f},
- {85.7143f,33.3333f},
- {76.1905f,33.3333f}
-};
-
-static const SFG_StrokeStrip ch37st[] =
-{
- {2,ch37st0},
- {16,ch37st1},
- {11,ch37st2}
-};
-
-static const SFG_StrokeChar ch37 = {104.762f,3,ch37st};
-
-/* char: 0x26 */
-
-static const SFG_StrokeVertex ch38st0[] =
-{
- {100.0f,57.1429f},
- {100.0f,61.9048f},
- {95.2381f,66.6667f},
- {90.4762f,66.6667f},
- {85.7143f,61.9048f},
- {80.9524f,52.381f},
- {71.4286f,28.5714f},
- {61.9048f,14.2857f},
- {52.3809f,4.7619f},
- {42.8571f,0.0f},
- {23.8095f,0.0f},
- {14.2857f,4.7619f},
- {9.5238f,9.5238f},
- {4.7619f,19.0476f},
- {4.7619f,28.5714f},
- {9.5238f,38.0952f},
- {14.2857f,42.8571f},
- {47.619f,61.9048f},
- {52.3809f,66.6667f},
- {57.1429f,76.1905f},
- {57.1429f,85.7143f},
- {52.3809f,95.2381f},
- {42.8571f,100.0f},
- {33.3333f,95.2381f},
- {28.5714f,85.7143f},
- {28.5714f,76.1905f},
- {33.3333f,61.9048f},
- {42.8571f,47.619f},
- {66.6667f,14.2857f},
- {76.1905f,4.7619f},
- {85.7143f,0.0f},
- {95.2381f,0.0f},
- {100.0f,4.7619f},
- {100.0f,9.5238f}
-};
-
-static const SFG_StrokeStrip ch38st[] =
-{
- {34,ch38st0}
-};
-
-static const SFG_StrokeChar ch38 = {104.762f,1,ch38st};
-
-/* char: 0x27 */
-
-static const SFG_StrokeVertex ch39st0[] =
-{
- {52.381f,100.0f},
- {52.381f,66.6667f}
-};
-
-static const SFG_StrokeStrip ch39st[] =
-{
- {2,ch39st0}
-};
-
-static const SFG_StrokeChar ch39 = {104.762f,1,ch39st};
-
-/* char: 0x28 */
-
-static const SFG_StrokeVertex ch40st0[] =
-{
- {69.0476f,119.048f},
- {59.5238f,109.524f},
- {50.0f,95.2381f},
- {40.4762f,76.1905f},
- {35.7143f,52.381f},
- {35.7143f,33.3333f},
- {40.4762f,9.5238f},
- {50.0f,-9.5238f},
- {59.5238f,-23.8095f},
- {69.0476f,-33.3333f}
-};
-
-static const SFG_StrokeStrip ch40st[] =
-{
- {10,ch40st0}
-};
-
-static const SFG_StrokeChar ch40 = {104.762f,1,ch40st};
-
-/* char: 0x29 */
-
-static const SFG_StrokeVertex ch41st0[] =
-{
- {35.7143f,119.048f},
- {45.2381f,109.524f},
- {54.7619f,95.2381f},
- {64.2857f,76.1905f},
- {69.0476f,52.381f},
- {69.0476f,33.3333f},
- {64.2857f,9.5238f},
- {54.7619f,-9.5238f},
- {45.2381f,-23.8095f},
- {35.7143f,-33.3333f}
-};
-
-static const SFG_StrokeStrip ch41st[] =
-{
- {10,ch41st0}
-};
-
-static const SFG_StrokeChar ch41 = {104.762f,1,ch41st};
-
-/* char: 0x2a */
-
-static const SFG_StrokeVertex ch42st0[] =
-{
- {52.381f,71.4286f},
- {52.381f,14.2857f}
-};
-
-static const SFG_StrokeVertex ch42st1[] =
-{
- {28.5715f,57.1429f},
- {76.1905f,28.5714f}
-};
-
-static const SFG_StrokeVertex ch42st2[] =
-{
- {76.1905f,57.1429f},
- {28.5715f,28.5714f}
-};
-
-static const SFG_StrokeStrip ch42st[] =
-{
- {2,ch42st0},
- {2,ch42st1},
- {2,ch42st2}
-};
-
-static const SFG_StrokeChar ch42 = {104.762f,3,ch42st};
-
-/* char: 0x2b */
-
-static const SFG_StrokeVertex ch43st0[] =
-{
- {52.3809f,85.7143f},
- {52.3809f,0.0f}
-};
-
-static const SFG_StrokeVertex ch43st1[] =
-{
- {9.5238f,42.8571f},
- {95.2381f,42.8571f}
-};
-
-static const SFG_StrokeStrip ch43st[] =
-{
- {2,ch43st0},
- {2,ch43st1}
-};
-
-static const SFG_StrokeChar ch43 = {104.762f,2,ch43st};
-
-/* char: 0x2c */
-
-static const SFG_StrokeVertex ch44st0[] =
-{
- {57.1429f,4.7619f},
- {52.381f,0.0f},
- {47.6191f,4.7619f},
- {52.381f,9.5238f},
- {57.1429f,4.7619f},
- {57.1429f,-4.7619f},
- {52.381f,-14.2857f},
- {47.6191f,-19.0476f}
-};
-
-static const SFG_StrokeStrip ch44st[] =
-{
- {8,ch44st0}
-};
-
-static const SFG_StrokeChar ch44 = {104.762f,1,ch44st};
-
-/* char: 0x2d */
-
-static const SFG_StrokeVertex ch45st0[] =
-{
- {9.5238f,42.8571f},
- {95.2381f,42.8571f}
-};
-
-static const SFG_StrokeStrip ch45st[] =
-{
- {2,ch45st0}
-};
-
-static const SFG_StrokeChar ch45 = {104.762f,1,ch45st};
-
-/* char: 0x2e */
-
-static const SFG_StrokeVertex ch46st0[] =
-{
- {52.381f,9.5238f},
- {47.6191f,4.7619f},
- {52.381f,0.0f},
- {57.1429f,4.7619f},
- {52.381f,9.5238f}
-};
-
-static const SFG_StrokeStrip ch46st[] =
-{
- {5,ch46st0}
-};
-
-static const SFG_StrokeChar ch46 = {104.762f,1,ch46st};
-
-/* char: 0x2f */
-
-static const SFG_StrokeVertex ch47st0[] =
-{
- {19.0476f,-14.2857f},
- {85.7143f,100.0f}
-};
-
-static const SFG_StrokeStrip ch47st[] =
-{
- {2,ch47st0}
-};
-
-static const SFG_StrokeChar ch47 = {104.762f,1,ch47st};
-
-/* char: 0x30 */
-
-static const SFG_StrokeVertex ch48st0[] =
-{
- {47.619f,100.0f},
- {33.3333f,95.2381f},
- {23.8095f,80.9524f},
- {19.0476f,57.1429f},
- {19.0476f,42.8571f},
- {23.8095f,19.0476f},
- {33.3333f,4.7619f},
- {47.619f,0.0f},
- {57.1428f,0.0f},
- {71.4286f,4.7619f},
- {80.9524f,19.0476f},
- {85.7143f,42.8571f},
- {85.7143f,57.1429f},
- {80.9524f,80.9524f},
- {71.4286f,95.2381f},
- {57.1428f,100.0f},
- {47.619f,100.0f}
-};
-
-static const SFG_StrokeStrip ch48st[] =
-{
- {17,ch48st0}
-};
-
-static const SFG_StrokeChar ch48 = {104.762f,1,ch48st};
-
-/* char: 0x31 */
-
-static const SFG_StrokeVertex ch49st0[] =
-{
- {40.4762f,80.9524f},
- {50.0f,85.7143f},
- {64.2857f,100.0f},
- {64.2857f,0.0f}
-};
-
-static const SFG_StrokeStrip ch49st[] =
-{
- {4,ch49st0}
-};
-
-static const SFG_StrokeChar ch49 = {104.762f,1,ch49st};
-
-/* char: 0x32 */
-
-static const SFG_StrokeVertex ch50st0[] =
-{
- {23.8095f,76.1905f},
- {23.8095f,80.9524f},
- {28.5714f,90.4762f},
- {33.3333f,95.2381f},
- {42.8571f,100.0f},
- {61.9047f,100.0f},
- {71.4286f,95.2381f},
- {76.1905f,90.4762f},
- {80.9524f,80.9524f},
- {80.9524f,71.4286f},
- {76.1905f,61.9048f},
- {66.6666f,47.619f},
- {19.0476f,0.0f},
- {85.7143f,0.0f}
-};
-
-static const SFG_StrokeStrip ch50st[] =
-{
- {14,ch50st0}
-};
-
-static const SFG_StrokeChar ch50 = {104.762f,1,ch50st};
-
-/* char: 0x33 */
-
-static const SFG_StrokeVertex ch51st0[] =
-{
- {28.5714f,100.0f},
- {80.9524f,100.0f},
- {52.3809f,61.9048f},
- {66.6666f,61.9048f},
- {76.1905f,57.1429f},
- {80.9524f,52.381f},
- {85.7143f,38.0952f},
- {85.7143f,28.5714f},
- {80.9524f,14.2857f},
- {71.4286f,4.7619f},
- {57.1428f,0.0f},
- {42.8571f,0.0f},
- {28.5714f,4.7619f},
- {23.8095f,9.5238f},
- {19.0476f,19.0476f}
-};
-
-static const SFG_StrokeStrip ch51st[] =
-{
- {15,ch51st0}
-};
-
-static const SFG_StrokeChar ch51 = {104.762f,1,ch51st};
-
-/* char: 0x34 */
-
-static const SFG_StrokeVertex ch52st0[] =
-{
- {64.2857f,100.0f},
- {16.6667f,33.3333f},
- {88.0952f,33.3333f}
-};
-
-static const SFG_StrokeVertex ch52st1[] =
-{
- {64.2857f,100.0f},
- {64.2857f,0.0f}
-};
-
-static const SFG_StrokeStrip ch52st[] =
-{
- {3,ch52st0},
- {2,ch52st1}
-};
-
-static const SFG_StrokeChar ch52 = {104.762f,2,ch52st};
-
-/* char: 0x35 */
-
-static const SFG_StrokeVertex ch53st0[] =
-{
- {76.1905f,100.0f},
- {28.5714f,100.0f},
- {23.8095f,57.1429f},
- {28.5714f,61.9048f},
- {42.8571f,66.6667f},
- {57.1428f,66.6667f},
- {71.4286f,61.9048f},
- {80.9524f,52.381f},
- {85.7143f,38.0952f},
- {85.7143f,28.5714f},
- {80.9524f,14.2857f},
- {71.4286f,4.7619f},
- {57.1428f,0.0f},
- {42.8571f,0.0f},
- {28.5714f,4.7619f},
- {23.8095f,9.5238f},
- {19.0476f,19.0476f}
-};
-
-static const SFG_StrokeStrip ch53st[] =
-{
- {17,ch53st0}
-};
-
-static const SFG_StrokeChar ch53 = {104.762f,1,ch53st};
-
-/* char: 0x36 */
-
-static const SFG_StrokeVertex ch54st0[] =
-{
- {78.5714f,85.7143f},
- {73.8096f,95.2381f},
- {59.5238f,100.0f},
- {50.0f,100.0f},
- {35.7143f,95.2381f},
- {26.1905f,80.9524f},
- {21.4286f,57.1429f},
- {21.4286f,33.3333f},
- {26.1905f,14.2857f},
- {35.7143f,4.7619f},
- {50.0f,0.0f},
- {54.7619f,0.0f},
- {69.0476f,4.7619f},
- {78.5714f,14.2857f},
- {83.3334f,28.5714f},
- {83.3334f,33.3333f},
- {78.5714f,47.619f},
- {69.0476f,57.1429f},
- {54.7619f,61.9048f},
- {50.0f,61.9048f},
- {35.7143f,57.1429f},
- {26.1905f,47.619f},
- {21.4286f,33.3333f}
-};
-
-static const SFG_StrokeStrip ch54st[] =
-{
- {23,ch54st0}
-};
-
-static const SFG_StrokeChar ch54 = {104.762f,1,ch54st};
-
-/* char: 0x37 */
-
-static const SFG_StrokeVertex ch55st0[] =
-{
- {85.7143f,100.0f},
- {38.0952f,0.0f}
-};
-
-static const SFG_StrokeVertex ch55st1[] =
-{
- {19.0476f,100.0f},
- {85.7143f,100.0f}
-};
-
-static const SFG_StrokeStrip ch55st[] =
-{
- {2,ch55st0},
- {2,ch55st1}
-};
-
-static const SFG_StrokeChar ch55 = {104.762f,2,ch55st};
-
-/* char: 0x38 */
-
-static const SFG_StrokeVertex ch56st0[] =
-{
- {42.8571f,100.0f},
- {28.5714f,95.2381f},
- {23.8095f,85.7143f},
- {23.8095f,76.1905f},
- {28.5714f,66.6667f},
- {38.0952f,61.9048f},
- {57.1428f,57.1429f},
- {71.4286f,52.381f},
- {80.9524f,42.8571f},
- {85.7143f,33.3333f},
- {85.7143f,19.0476f},
- {80.9524f,9.5238f},
- {76.1905f,4.7619f},
- {61.9047f,0.0f},
- {42.8571f,0.0f},
- {28.5714f,4.7619f},
- {23.8095f,9.5238f},
- {19.0476f,19.0476f},
- {19.0476f,33.3333f},
- {23.8095f,42.8571f},
- {33.3333f,52.381f},
- {47.619f,57.1429f},
- {66.6666f,61.9048f},
- {76.1905f,66.6667f},
- {80.9524f,76.1905f},
- {80.9524f,85.7143f},
- {76.1905f,95.2381f},
- {61.9047f,100.0f},
- {42.8571f,100.0f}
-};
-
-static const SFG_StrokeStrip ch56st[] =
-{
- {29,ch56st0}
-};
-
-static const SFG_StrokeChar ch56 = {104.762f,1,ch56st};
-
-/* char: 0x39 */
-
-static const SFG_StrokeVertex ch57st0[] =
-{
- {83.3334f,66.6667f},
- {78.5714f,52.381f},
- {69.0476f,42.8571f},
- {54.7619f,38.0952f},
- {50.0f,38.0952f},
- {35.7143f,42.8571f},
- {26.1905f,52.381f},
- {21.4286f,66.6667f},
- {21.4286f,71.4286f},
- {26.1905f,85.7143f},
- {35.7143f,95.2381f},
- {50.0f,100.0f},
- {54.7619f,100.0f},
- {69.0476f,95.2381f},
- {78.5714f,85.7143f},
- {83.3334f,66.6667f},
- {83.3334f,42.8571f},
- {78.5714f,19.0476f},
- {69.0476f,4.7619f},
- {54.7619f,0.0f},
- {45.2381f,0.0f},
- {30.9524f,4.7619f},
- {26.1905f,14.2857f}
-};
-
-static const SFG_StrokeStrip ch57st[] =
-{
- {23,ch57st0}
-};
-
-static const SFG_StrokeChar ch57 = {104.762f,1,ch57st};
-
-/* char: 0x3a */
-
-static const SFG_StrokeVertex ch58st0[] =
-{
- {52.381f,66.6667f},
- {47.6191f,61.9048f},
- {52.381f,57.1429f},
- {57.1429f,61.9048f},
- {52.381f,66.6667f}
-};
-
-static const SFG_StrokeVertex ch58st1[] =
-{
- {52.381f,9.5238f},
- {47.6191f,4.7619f},
- {52.381f,0.0f},
- {57.1429f,4.7619f},
- {52.381f,9.5238f}
-};
-
-static const SFG_StrokeStrip ch58st[] =
-{
- {5,ch58st0},
- {5,ch58st1}
-};
-
-static const SFG_StrokeChar ch58 = {104.762f,2,ch58st};
-
-/* char: 0x3b */
-
-static const SFG_StrokeVertex ch59st0[] =
-{
- {52.381f,66.6667f},
- {47.6191f,61.9048f},
- {52.381f,57.1429f},
- {57.1429f,61.9048f},
- {52.381f,66.6667f}
-};
-
-static const SFG_StrokeVertex ch59st1[] =
-{
- {57.1429f,4.7619f},
- {52.381f,0.0f},
- {47.6191f,4.7619f},
- {52.381f,9.5238f},
- {57.1429f,4.7619f},
- {57.1429f,-4.7619f},
- {52.381f,-14.2857f},
- {47.6191f,-19.0476f}
-};
-
-static const SFG_StrokeStrip ch59st[] =
-{
- {5,ch59st0},
- {8,ch59st1}
-};
-
-static const SFG_StrokeChar ch59 = {104.762f,2,ch59st};
-
-/* char: 0x3c */
-
-static const SFG_StrokeVertex ch60st0[] =
-{
- {90.4762f,85.7143f},
- {14.2857f,42.8571f},
- {90.4762f,0.0f}
-};
-
-static const SFG_StrokeStrip ch60st[] =
-{
- {3,ch60st0}
-};
-
-static const SFG_StrokeChar ch60 = {104.762f,1,ch60st};
-
-/* char: 0x3d */
-
-static const SFG_StrokeVertex ch61st0[] =
-{
- {9.5238f,57.1429f},
- {95.2381f,57.1429f}
-};
-
-static const SFG_StrokeVertex ch61st1[] =
-{
- {9.5238f,28.5714f},
- {95.2381f,28.5714f}
-};
-
-static const SFG_StrokeStrip ch61st[] =
-{
- {2,ch61st0},
- {2,ch61st1}
-};
-
-static const SFG_StrokeChar ch61 = {104.762f,2,ch61st};
-
-/* char: 0x3e */
-
-static const SFG_StrokeVertex ch62st0[] =
-{
- {14.2857f,85.7143f},
- {90.4762f,42.8571f},
- {14.2857f,0.0f}
-};
-
-static const SFG_StrokeStrip ch62st[] =
-{
- {3,ch62st0}
-};
-
-static const SFG_StrokeChar ch62 = {104.762f,1,ch62st};
-
-/* char: 0x3f */
-
-static const SFG_StrokeVertex ch63st0[] =
-{
- {23.8095f,76.1905f},
- {23.8095f,80.9524f},
- {28.5714f,90.4762f},
- {33.3333f,95.2381f},
- {42.8571f,100.0f},
- {61.9047f,100.0f},
- {71.4285f,95.2381f},
- {76.1905f,90.4762f},
- {80.9524f,80.9524f},
- {80.9524f,71.4286f},
- {76.1905f,61.9048f},
- {71.4285f,57.1429f},
- {52.3809f,47.619f},
- {52.3809f,33.3333f}
-};
-
-static const SFG_StrokeVertex ch63st1[] =
-{
- {52.3809f,9.5238f},
- {47.619f,4.7619f},
- {52.3809f,0.0f},
- {57.1428f,4.7619f},
- {52.3809f,9.5238f}
-};
-
-static const SFG_StrokeStrip ch63st[] =
-{
- {14,ch63st0},
- {5,ch63st1}
-};
-
-static const SFG_StrokeChar ch63 = {104.762f,2,ch63st};
-
-/* char: 0x40 */
-
-static const SFG_StrokeVertex ch64st0[] =
-{
- {64.2857f,52.381f},
- {54.7619f,57.1429f},
- {45.2381f,57.1429f},
- {40.4762f,47.619f},
- {40.4762f,42.8571f},
- {45.2381f,33.3333f},
- {54.7619f,33.3333f},
- {64.2857f,38.0952f}
-};
-
-static const SFG_StrokeVertex ch64st1[] =
-{
- {64.2857f,57.1429f},
- {64.2857f,38.0952f},
- {69.0476f,33.3333f},
- {78.5714f,33.3333f},
- {83.3334f,42.8571f},
- {83.3334f,47.619f},
- {78.5714f,61.9048f},
- {69.0476f,71.4286f},
- {54.7619f,76.1905f},
- {50.0f,76.1905f},
- {35.7143f,71.4286f},
- {26.1905f,61.9048f},
- {21.4286f,47.619f},
- {21.4286f,42.8571f},
- {26.1905f,28.5714f},
- {35.7143f,19.0476f},
- {50.0f,14.2857f},
- {54.7619f,14.2857f},
- {69.0476f,19.0476f}
-};
-
-static const SFG_StrokeStrip ch64st[] =
-{
- {8,ch64st0},
- {19,ch64st1}
-};
-
-static const SFG_StrokeChar ch64 = {104.762f,2,ch64st};
-
-/* char: 0x41 */
-
-static const SFG_StrokeVertex ch65st0[] =
-{
- {52.3809f,100.0f},
- {14.2857f,0.0f}
-};
-
-static const SFG_StrokeVertex ch65st1[] =
-{
- {52.3809f,100.0f},
- {90.4762f,0.0f}
-};
-
-static const SFG_StrokeVertex ch65st2[] =
-{
- {28.5714f,33.3333f},
- {76.1905f,33.3333f}
-};
-
-static const SFG_StrokeStrip ch65st[] =
-{
- {2,ch65st0},
- {2,ch65st1},
- {2,ch65st2}
-};
-
-static const SFG_StrokeChar ch65 = {104.762f,3,ch65st};
-
-/* char: 0x42 */
-
-static const SFG_StrokeVertex ch66st0[] =
-{
- {19.0476f,100.0f},
- {19.0476f,0.0f}
-};
-
-static const SFG_StrokeVertex ch66st1[] =
-{
- {19.0476f,100.0f},
- {61.9047f,100.0f},
- {76.1905f,95.2381f},
- {80.9524f,90.4762f},
- {85.7143f,80.9524f},
- {85.7143f,71.4286f},
- {80.9524f,61.9048f},
- {76.1905f,57.1429f},
- {61.9047f,52.381f}
-};
-
-static const SFG_StrokeVertex ch66st2[] =
-{
- {19.0476f,52.381f},
- {61.9047f,52.381f},
- {76.1905f,47.619f},
- {80.9524f,42.8571f},
- {85.7143f,33.3333f},
- {85.7143f,19.0476f},
- {80.9524f,9.5238f},
- {76.1905f,4.7619f},
- {61.9047f,0.0f},
- {19.0476f,0.0f}
-};
-
-static const SFG_StrokeStrip ch66st[] =
-{
- {2,ch66st0},
- {9,ch66st1},
- {10,ch66st2}
-};
-
-static const SFG_StrokeChar ch66 = {104.762f,3,ch66st};
-
-/* char: 0x43 */
-
-static const SFG_StrokeVertex ch67st0[] =
-{
- {88.0952f,76.1905f},
- {83.3334f,85.7143f},
- {73.8096f,95.2381f},
- {64.2857f,100.0f},
- {45.2381f,100.0f},
- {35.7143f,95.2381f},
- {26.1905f,85.7143f},
- {21.4286f,76.1905f},
- {16.6667f,61.9048f},
- {16.6667f,38.0952f},
- {21.4286f,23.8095f},
- {26.1905f,14.2857f},
- {35.7143f,4.7619f},
- {45.2381f,0.0f},
- {64.2857f,0.0f},
- {73.8096f,4.7619f},
- {83.3334f,14.2857f},
- {88.0952f,23.8095f}
-};
-
-static const SFG_StrokeStrip ch67st[] =
-{
- {18,ch67st0}
-};
-
-static const SFG_StrokeChar ch67 = {104.762f,1,ch67st};
-
-/* char: 0x44 */
-
-static const SFG_StrokeVertex ch68st0[] =
-{
- {19.0476f,100.0f},
- {19.0476f,0.0f}
-};
-
-static const SFG_StrokeVertex ch68st1[] =
-{
- {19.0476f,100.0f},
- {52.3809f,100.0f},
- {66.6666f,95.2381f},
- {76.1905f,85.7143f},
- {80.9524f,76.1905f},
- {85.7143f,61.9048f},
- {85.7143f,38.0952f},
- {80.9524f,23.8095f},
- {76.1905f,14.2857f},
- {66.6666f,4.7619f},
- {52.3809f,0.0f},
- {19.0476f,0.0f}
-};
-
-static const SFG_StrokeStrip ch68st[] =
-{
- {2,ch68st0},
- {12,ch68st1}
-};
-
-static const SFG_StrokeChar ch68 = {104.762f,2,ch68st};
-
-/* char: 0x45 */
-
-static const SFG_StrokeVertex ch69st0[] =
-{
- {21.4286f,100.0f},
- {21.4286f,0.0f}
-};
-
-static const SFG_StrokeVertex ch69st1[] =
-{
- {21.4286f,100.0f},
- {83.3334f,100.0f}
-};
-
-static const SFG_StrokeVertex ch69st2[] =
-{
- {21.4286f,52.381f},
- {59.5238f,52.381f}
-};
-
-static const SFG_StrokeVertex ch69st3[] =
-{
- {21.4286f,0.0f},
- {83.3334f,0.0f}
-};
-
-static const SFG_StrokeStrip ch69st[] =
-{
- {2,ch69st0},
- {2,ch69st1},
- {2,ch69st2},
- {2,ch69st3}
-};
-
-static const SFG_StrokeChar ch69 = {104.762f,4,ch69st};
-
-/* char: 0x46 */
-
-static const SFG_StrokeVertex ch70st0[] =
-{
- {21.4286f,100.0f},
- {21.4286f,0.0f}
-};
-
-static const SFG_StrokeVertex ch70st1[] =
-{
- {21.4286f,100.0f},
- {83.3334f,100.0f}
-};
-
-static const SFG_StrokeVertex ch70st2[] =
-{
- {21.4286f,52.381f},
- {59.5238f,52.381f}
-};
-
-static const SFG_StrokeStrip ch70st[] =
-{
- {2,ch70st0},
- {2,ch70st1},
- {2,ch70st2}
-};
-
-static const SFG_StrokeChar ch70 = {104.762f,3,ch70st};
-
-/* char: 0x47 */
-
-static const SFG_StrokeVertex ch71st0[] =
-{
- {88.0952f,76.1905f},
- {83.3334f,85.7143f},
- {73.8096f,95.2381f},
- {64.2857f,100.0f},
- {45.2381f,100.0f},
- {35.7143f,95.2381f},
- {26.1905f,85.7143f},
- {21.4286f,76.1905f},
- {16.6667f,61.9048f},
- {16.6667f,38.0952f},
- {21.4286f,23.8095f},
- {26.1905f,14.2857f},
- {35.7143f,4.7619f},
- {45.2381f,0.0f},
- {64.2857f,0.0f},
- {73.8096f,4.7619f},
- {83.3334f,14.2857f},
- {88.0952f,23.8095f},
- {88.0952f,38.0952f}
-};
-
-static const SFG_StrokeVertex ch71st1[] =
-{
- {64.2857f,38.0952f},
- {88.0952f,38.0952f}
-};
-
-static const SFG_StrokeStrip ch71st[] =
-{
- {19,ch71st0},
- {2,ch71st1}
-};
-
-static const SFG_StrokeChar ch71 = {104.762f,2,ch71st};
-
-/* char: 0x48 */
-
-static const SFG_StrokeVertex ch72st0[] =
-{
- {19.0476f,100.0f},
- {19.0476f,0.0f}
-};
-
-static const SFG_StrokeVertex ch72st1[] =
-{
- {85.7143f,100.0f},
- {85.7143f,0.0f}
-};
-
-static const SFG_StrokeVertex ch72st2[] =
-{
- {19.0476f,52.381f},
- {85.7143f,52.381f}
-};
-
-static const SFG_StrokeStrip ch72st[] =
-{
- {2,ch72st0},
- {2,ch72st1},
- {2,ch72st2}
-};
-
-static const SFG_StrokeChar ch72 = {104.762f,3,ch72st};
-
-/* char: 0x49 */
-
-static const SFG_StrokeVertex ch73st0[] =
-{
- {52.381f,100.0f},
- {52.381f,0.0f}
-};
-
-static const SFG_StrokeStrip ch73st[] =
-{
- {2,ch73st0}
-};
-
-static const SFG_StrokeChar ch73 = {104.762f,1,ch73st};
-
-/* char: 0x4a */
-
-static const SFG_StrokeVertex ch74st0[] =
-{
- {76.1905f,100.0f},
- {76.1905f,23.8095f},
- {71.4286f,9.5238f},
- {66.6667f,4.7619f},
- {57.1429f,0.0f},
- {47.6191f,0.0f},
- {38.0953f,4.7619f},
- {33.3334f,9.5238f},
- {28.5715f,23.8095f},
- {28.5715f,33.3333f}
-};
-
-static const SFG_StrokeStrip ch74st[] =
-{
- {10,ch74st0}
-};
-
-static const SFG_StrokeChar ch74 = {104.762f,1,ch74st};
-
-/* char: 0x4b */
-
-static const SFG_StrokeVertex ch75st0[] =
-{
- {19.0476f,100.0f},
- {19.0476f,0.0f}
-};
-
-static const SFG_StrokeVertex ch75st1[] =
-{
- {85.7143f,100.0f},
- {19.0476f,33.3333f}
-};
-
-static const SFG_StrokeVertex ch75st2[] =
-{
- {42.8571f,57.1429f},
- {85.7143f,0.0f}
-};
-
-static const SFG_StrokeStrip ch75st[] =
-{
- {2,ch75st0},
- {2,ch75st1},
- {2,ch75st2}
-};
-
-static const SFG_StrokeChar ch75 = {104.762f,3,ch75st};
-
-/* char: 0x4c */
-
-static const SFG_StrokeVertex ch76st0[] =
-{
- {23.8095f,100.0f},
- {23.8095f,0.0f}
-};
-
-static const SFG_StrokeVertex ch76st1[] =
-{
- {23.8095f,0.0f},
- {80.9524f,0.0f}
-};
-
-static const SFG_StrokeStrip ch76st[] =
-{
- {2,ch76st0},
- {2,ch76st1}
-};
-
-static const SFG_StrokeChar ch76 = {104.762f,2,ch76st};
-
-/* char: 0x4d */
-
-static const SFG_StrokeVertex ch77st0[] =
-{
- {14.2857f,100.0f},
- {14.2857f,0.0f}
-};
-
-static const SFG_StrokeVertex ch77st1[] =
-{
- {14.2857f,100.0f},
- {52.3809f,0.0f}
-};
-
-static const SFG_StrokeVertex ch77st2[] =
-{
- {90.4762f,100.0f},
- {52.3809f,0.0f}
-};
-
-static const SFG_StrokeVertex ch77st3[] =
-{
- {90.4762f,100.0f},
- {90.4762f,0.0f}
-};
-
-static const SFG_StrokeStrip ch77st[] =
-{
- {2,ch77st0},
- {2,ch77st1},
- {2,ch77st2},
- {2,ch77st3}
-};
-
-static const SFG_StrokeChar ch77 = {104.762f,4,ch77st};
-
-/* char: 0x4e */
-
-static const SFG_StrokeVertex ch78st0[] =
-{
- {19.0476f,100.0f},
- {19.0476f,0.0f}
-};
-
-static const SFG_StrokeVertex ch78st1[] =
-{
- {19.0476f,100.0f},
- {85.7143f,0.0f}
-};
-
-static const SFG_StrokeVertex ch78st2[] =
-{
- {85.7143f,100.0f},
- {85.7143f,0.0f}
-};
-
-static const SFG_StrokeStrip ch78st[] =
-{
- {2,ch78st0},
- {2,ch78st1},
- {2,ch78st2}
-};
-
-static const SFG_StrokeChar ch78 = {104.762f,3,ch78st};
-
-/* char: 0x4f */
-
-static const SFG_StrokeVertex ch79st0[] =
-{
- {42.8571f,100.0f},
- {33.3333f,95.2381f},
- {23.8095f,85.7143f},
- {19.0476f,76.1905f},
- {14.2857f,61.9048f},
- {14.2857f,38.0952f},
- {19.0476f,23.8095f},
- {23.8095f,14.2857f},
- {33.3333f,4.7619f},
- {42.8571f,0.0f},
- {61.9047f,0.0f},
- {71.4286f,4.7619f},
- {80.9524f,14.2857f},
- {85.7143f,23.8095f},
- {90.4762f,38.0952f},
- {90.4762f,61.9048f},
- {85.7143f,76.1905f},
- {80.9524f,85.7143f},
- {71.4286f,95.2381f},
- {61.9047f,100.0f},
- {42.8571f,100.0f}
-};
-
-static const SFG_StrokeStrip ch79st[] =
-{
- {21,ch79st0}
-};
-
-static const SFG_StrokeChar ch79 = {104.762f,1,ch79st};
-
-/* char: 0x50 */
-
-static const SFG_StrokeVertex ch80st0[] =
-{
- {19.0476f,100.0f},
- {19.0476f,0.0f}
-};
-
-static const SFG_StrokeVertex ch80st1[] =
-{
- {19.0476f,100.0f},
- {61.9047f,100.0f},
- {76.1905f,95.2381f},
- {80.9524f,90.4762f},
- {85.7143f,80.9524f},
- {85.7143f,66.6667f},
- {80.9524f,57.1429f},
- {76.1905f,52.381f},
- {61.9047f,47.619f},
- {19.0476f,47.619f}
-};
-
-static const SFG_StrokeStrip ch80st[] =
-{
- {2,ch80st0},
- {10,ch80st1}
-};
-
-static const SFG_StrokeChar ch80 = {104.762f,2,ch80st};
-
-/* char: 0x51 */
-
-static const SFG_StrokeVertex ch81st0[] =
-{
- {42.8571f,100.0f},
- {33.3333f,95.2381f},
- {23.8095f,85.7143f},
- {19.0476f,76.1905f},
- {14.2857f,61.9048f},
- {14.2857f,38.0952f},
- {19.0476f,23.8095f},
- {23.8095f,14.2857f},
- {33.3333f,4.7619f},
- {42.8571f,0.0f},
- {61.9047f,0.0f},
- {71.4286f,4.7619f},
- {80.9524f,14.2857f},
- {85.7143f,23.8095f},
- {90.4762f,38.0952f},
- {90.4762f,61.9048f},
- {85.7143f,76.1905f},
- {80.9524f,85.7143f},
- {71.4286f,95.2381f},
- {61.9047f,100.0f},
- {42.8571f,100.0f}
-};
-
-static const SFG_StrokeVertex ch81st1[] =
-{
- {57.1428f,19.0476f},
- {85.7143f,-9.5238f}
-};
-
-static const SFG_StrokeStrip ch81st[] =
-{
- {21,ch81st0},
- {2,ch81st1}
-};
-
-static const SFG_StrokeChar ch81 = {104.762f,2,ch81st};
-
-/* char: 0x52 */
-
-static const SFG_StrokeVertex ch82st0[] =
-{
- {19.0476f,100.0f},
- {19.0476f,0.0f}
-};
-
-static const SFG_StrokeVertex ch82st1[] =
-{
- {19.0476f,100.0f},
- {61.9047f,100.0f},
- {76.1905f,95.2381f},
- {80.9524f,90.4762f},
- {85.7143f,80.9524f},
- {85.7143f,71.4286f},
- {80.9524f,61.9048f},
- {76.1905f,57.1429f},
- {61.9047f,52.381f},
- {19.0476f,52.381f}
-};
-
-static const SFG_StrokeVertex ch82st2[] =
-{
- {52.3809f,52.381f},
- {85.7143f,0.0f}
-};
-
-static const SFG_StrokeStrip ch82st[] =
-{
- {2,ch82st0},
- {10,ch82st1},
- {2,ch82st2}
-};
-
-static const SFG_StrokeChar ch82 = {104.762f,3,ch82st};
-
-/* char: 0x53 */
-
-static const SFG_StrokeVertex ch83st0[] =
-{
- {85.7143f,85.7143f},
- {76.1905f,95.2381f},
- {61.9047f,100.0f},
- {42.8571f,100.0f},
- {28.5714f,95.2381f},
- {19.0476f,85.7143f},
- {19.0476f,76.1905f},
- {23.8095f,66.6667f},
- {28.5714f,61.9048f},
- {38.0952f,57.1429f},
- {66.6666f,47.619f},
- {76.1905f,42.8571f},
- {80.9524f,38.0952f},
- {85.7143f,28.5714f},
- {85.7143f,14.2857f},
- {76.1905f,4.7619f},
- {61.9047f,0.0f},
- {42.8571f,0.0f},
- {28.5714f,4.7619f},
- {19.0476f,14.2857f}
-};
-
-static const SFG_StrokeStrip ch83st[] =
-{
- {20,ch83st0}
-};
-
-static const SFG_StrokeChar ch83 = {104.762f,1,ch83st};
-
-/* char: 0x54 */
-
-static const SFG_StrokeVertex ch84st0[] =
-{
- {52.3809f,100.0f},
- {52.3809f,0.0f}
-};
-
-static const SFG_StrokeVertex ch84st1[] =
-{
- {19.0476f,100.0f},
- {85.7143f,100.0f}
-};
-
-static const SFG_StrokeStrip ch84st[] =
-{
- {2,ch84st0},
- {2,ch84st1}
-};
-
-static const SFG_StrokeChar ch84 = {104.762f,2,ch84st};
-
-/* char: 0x55 */
-
-static const SFG_StrokeVertex ch85st0[] =
-{
- {19.0476f,100.0f},
- {19.0476f,28.5714f},
- {23.8095f,14.2857f},
- {33.3333f,4.7619f},
- {47.619f,0.0f},
- {57.1428f,0.0f},
- {71.4286f,4.7619f},
- {80.9524f,14.2857f},
- {85.7143f,28.5714f},
- {85.7143f,100.0f}
-};
-
-static const SFG_StrokeStrip ch85st[] =
-{
- {10,ch85st0}
-};
-
-static const SFG_StrokeChar ch85 = {104.762f,1,ch85st};
-
-/* char: 0x56 */
-
-static const SFG_StrokeVertex ch86st0[] =
-{
- {14.2857f,100.0f},
- {52.3809f,0.0f}
-};
-
-static const SFG_StrokeVertex ch86st1[] =
-{
- {90.4762f,100.0f},
- {52.3809f,0.0f}
-};
-
-static const SFG_StrokeStrip ch86st[] =
-{
- {2,ch86st0},
- {2,ch86st1}
-};
-
-static const SFG_StrokeChar ch86 = {104.762f,2,ch86st};
-
-/* char: 0x57 */
-
-static const SFG_StrokeVertex ch87st0[] =
-{
- {4.7619f,100.0f},
- {28.5714f,0.0f}
-};
-
-static const SFG_StrokeVertex ch87st1[] =
-{
- {52.3809f,100.0f},
- {28.5714f,0.0f}
-};
-
-static const SFG_StrokeVertex ch87st2[] =
-{
- {52.3809f,100.0f},
- {76.1905f,0.0f}
-};
-
-static const SFG_StrokeVertex ch87st3[] =
-{
- {100.0f,100.0f},
- {76.1905f,0.0f}
-};
-
-static const SFG_StrokeStrip ch87st[] =
-{
- {2,ch87st0},
- {2,ch87st1},
- {2,ch87st2},
- {2,ch87st3}
-};
-
-static const SFG_StrokeChar ch87 = {104.762f,4,ch87st};
-
-/* char: 0x58 */
-
-static const SFG_StrokeVertex ch88st0[] =
-{
- {19.0476f,100.0f},
- {85.7143f,0.0f}
-};
-
-static const SFG_StrokeVertex ch88st1[] =
-{
- {85.7143f,100.0f},
- {19.0476f,0.0f}
-};
-
-static const SFG_StrokeStrip ch88st[] =
-{
- {2,ch88st0},
- {2,ch88st1}
-};
-
-static const SFG_StrokeChar ch88 = {104.762f,2,ch88st};
-
-/* char: 0x59 */
-
-static const SFG_StrokeVertex ch89st0[] =
-{
- {14.2857f,100.0f},
- {52.3809f,52.381f},
- {52.3809f,0.0f}
-};
-
-static const SFG_StrokeVertex ch89st1[] =
-{
- {90.4762f,100.0f},
- {52.3809f,52.381f}
-};
-
-static const SFG_StrokeStrip ch89st[] =
-{
- {3,ch89st0},
- {2,ch89st1}
-};
-
-static const SFG_StrokeChar ch89 = {104.762f,2,ch89st};
-
-/* char: 0x5a */
-
-static const SFG_StrokeVertex ch90st0[] =
-{
- {85.7143f,100.0f},
- {19.0476f,0.0f}
-};
-
-static const SFG_StrokeVertex ch90st1[] =
-{
- {19.0476f,100.0f},
- {85.7143f,100.0f}
-};
-
-static const SFG_StrokeVertex ch90st2[] =
-{
- {19.0476f,0.0f},
- {85.7143f,0.0f}
-};
-
-static const SFG_StrokeStrip ch90st[] =
-{
- {2,ch90st0},
- {2,ch90st1},
- {2,ch90st2}
-};
-
-static const SFG_StrokeChar ch90 = {104.762f,3,ch90st};
-
-/* char: 0x5b */
-
-static const SFG_StrokeVertex ch91st0[] =
-{
- {35.7143f,119.048f},
- {35.7143f,-33.3333f}
-};
-
-static const SFG_StrokeVertex ch91st1[] =
-{
- {40.4762f,119.048f},
- {40.4762f,-33.3333f}
-};
-
-static const SFG_StrokeVertex ch91st2[] =
-{
- {35.7143f,119.048f},
- {69.0476f,119.048f}
-};
-
-static const SFG_StrokeVertex ch91st3[] =
-{
- {35.7143f,-33.3333f},
- {69.0476f,-33.3333f}
-};
-
-static const SFG_StrokeStrip ch91st[] =
-{
- {2,ch91st0},
- {2,ch91st1},
- {2,ch91st2},
- {2,ch91st3}
-};
-
-static const SFG_StrokeChar ch91 = {104.762f,4,ch91st};
-
-/* char: 0x5c */
-
-static const SFG_StrokeVertex ch92st0[] =
-{
- {19.0476f,100.0f},
- {85.7143f,-14.2857f}
-};
-
-static const SFG_StrokeStrip ch92st[] =
-{
- {2,ch92st0}
-};
-
-static const SFG_StrokeChar ch92 = {104.762f,1,ch92st};
-
-/* char: 0x5d */
-
-static const SFG_StrokeVertex ch93st0[] =
-{
- {64.2857f,119.048f},
- {64.2857f,-33.3333f}
-};
-
-static const SFG_StrokeVertex ch93st1[] =
-{
- {69.0476f,119.048f},
- {69.0476f,-33.3333f}
-};
-
-static const SFG_StrokeVertex ch93st2[] =
-{
- {35.7143f,119.048f},
- {69.0476f,119.048f}
-};
-
-static const SFG_StrokeVertex ch93st3[] =
-{
- {35.7143f,-33.3333f},
- {69.0476f,-33.3333f}
-};
-
-static const SFG_StrokeStrip ch93st[] =
-{
- {2,ch93st0},
- {2,ch93st1},
- {2,ch93st2},
- {2,ch93st3}
-};
-
-static const SFG_StrokeChar ch93 = {104.762f,4,ch93st};
-
-/* char: 0x5e */
-
-static const SFG_StrokeVertex ch94st0[] =
-{
- {52.3809f,109.524f},
- {14.2857f,42.8571f}
-};
-
-static const SFG_StrokeVertex ch94st1[] =
-{
- {52.3809f,109.524f},
- {90.4762f,42.8571f}
-};
-
-static const SFG_StrokeStrip ch94st[] =
-{
- {2,ch94st0},
- {2,ch94st1}
-};
-
-static const SFG_StrokeChar ch94 = {104.762f,2,ch94st};
-
-/* char: 0x5f */
-
-static const SFG_StrokeVertex ch95st0[] =
-{
- {0,-33.3333f},
- {104.762f,-33.3333f},
- {104.762f,-28.5714f},
- {0,-28.5714f},
- {0,-33.3333f}
-};
-
-static const SFG_StrokeStrip ch95st[] =
-{
- {5,ch95st0}
-};
-
-static const SFG_StrokeChar ch95 = {104.762f,1,ch95st};
-
-/* char: 0x60 */
-
-static const SFG_StrokeVertex ch96st0[] =
-{
- {42.8572f,100.0f},
- {66.6667f,71.4286f}
-};
-
-static const SFG_StrokeVertex ch96st1[] =
-{
- {42.8572f,100.0f},
- {38.0953f,95.2381f},
- {66.6667f,71.4286f}
-};
-
-static const SFG_StrokeStrip ch96st[] =
-{
- {2,ch96st0},
- {3,ch96st1}
-};
-
-static const SFG_StrokeChar ch96 = {104.762f,2,ch96st};
-
-/* char: 0x61 */
-
-static const SFG_StrokeVertex ch97st0[] =
-{
- {80.9524f,66.6667f},
- {80.9524f,0.0f}
-};
-
-static const SFG_StrokeVertex ch97st1[] =
-{
- {80.9524f,52.381f},
- {71.4285f,61.9048f},
- {61.9047f,66.6667f},
- {47.619f,66.6667f},
- {38.0952f,61.9048f},
- {28.5714f,52.381f},
- {23.8095f,38.0952f},
- {23.8095f,28.5714f},
- {28.5714f,14.2857f},
- {38.0952f,4.7619f},
- {47.619f,0.0f},
- {61.9047f,0.0f},
- {71.4285f,4.7619f},
- {80.9524f,14.2857f}
-};
-
-static const SFG_StrokeStrip ch97st[] =
-{
- {2,ch97st0},
- {14,ch97st1}
-};
-
-static const SFG_StrokeChar ch97 = {104.762f,2,ch97st};
-
-/* char: 0x62 */
-
-static const SFG_StrokeVertex ch98st0[] =
-{
- {23.8095f,100.0f},
- {23.8095f,0.0f}
-};
-
-static const SFG_StrokeVertex ch98st1[] =
-{
- {23.8095f,52.381f},
- {33.3333f,61.9048f},
- {42.8571f,66.6667f},
- {57.1428f,66.6667f},
- {66.6666f,61.9048f},
- {76.1905f,52.381f},
- {80.9524f,38.0952f},
- {80.9524f,28.5714f},
- {76.1905f,14.2857f},
- {66.6666f,4.7619f},
- {57.1428f,0.0f},
- {42.8571f,0.0f},
- {33.3333f,4.7619f},
- {23.8095f,14.2857f}
-};
-
-static const SFG_StrokeStrip ch98st[] =
-{
- {2,ch98st0},
- {14,ch98st1}
-};
-
-static const SFG_StrokeChar ch98 = {104.762f,2,ch98st};
-
-/* char: 0x63 */
-
-static const SFG_StrokeVertex ch99st0[] =
-{
- {80.9524f,52.381f},
- {71.4285f,61.9048f},
- {61.9047f,66.6667f},
- {47.619f,66.6667f},
- {38.0952f,61.9048f},
- {28.5714f,52.381f},
- {23.8095f,38.0952f},
- {23.8095f,28.5714f},
- {28.5714f,14.2857f},
- {38.0952f,4.7619f},
- {47.619f,0.0f},
- {61.9047f,0.0f},
- {71.4285f,4.7619f},
- {80.9524f,14.2857f}
-};
-
-static const SFG_StrokeStrip ch99st[] =
-{
- {14,ch99st0}
-};
-
-static const SFG_StrokeChar ch99 = {104.762f,1,ch99st};
-
-/* char: 0x64 */
-
-static const SFG_StrokeVertex ch100st0[] =
-{
- {80.9524f,100.0f},
- {80.9524f,0.0f}
-};
-
-static const SFG_StrokeVertex ch100st1[] =
-{
- {80.9524f,52.381f},
- {71.4285f,61.9048f},
- {61.9047f,66.6667f},
- {47.619f,66.6667f},
- {38.0952f,61.9048f},
- {28.5714f,52.381f},
- {23.8095f,38.0952f},
- {23.8095f,28.5714f},
- {28.5714f,14.2857f},
- {38.0952f,4.7619f},
- {47.619f,0.0f},
- {61.9047f,0.0f},
- {71.4285f,4.7619f},
- {80.9524f,14.2857f}
-};
-
-static const SFG_StrokeStrip ch100st[] =
-{
- {2,ch100st0},
- {14,ch100st1}
-};
-
-static const SFG_StrokeChar ch100 = {104.762f,2,ch100st};
-
-/* char: 0x65 */
-
-static const SFG_StrokeVertex ch101st0[] =
-{
- {23.8095f,38.0952f},
- {80.9524f,38.0952f},
- {80.9524f,47.619f},
- {76.1905f,57.1429f},
- {71.4285f,61.9048f},
- {61.9047f,66.6667f},
- {47.619f,66.6667f},
- {38.0952f,61.9048f},
- {28.5714f,52.381f},
- {23.8095f,38.0952f},
- {23.8095f,28.5714f},
- {28.5714f,14.2857f},
- {38.0952f,4.7619f},
- {47.619f,0.0f},
- {61.9047f,0.0f},
- {71.4285f,4.7619f},
- {80.9524f,14.2857f}
-};
-
-static const SFG_StrokeStrip ch101st[] =
-{
- {17,ch101st0}
-};
-
-static const SFG_StrokeChar ch101 = {104.762f,1,ch101st};
-
-/* char: 0x66 */
-
-static const SFG_StrokeVertex ch102st0[] =
-{
- {71.4286f,100.0f},
- {61.9048f,100.0f},
- {52.381f,95.2381f},
- {47.6191f,80.9524f},
- {47.6191f,0.0f}
-};
-
-static const SFG_StrokeVertex ch102st1[] =
-{
- {33.3334f,66.6667f},
- {66.6667f,66.6667f}
-};
-
-static const SFG_StrokeStrip ch102st[] =
-{
- {5,ch102st0},
- {2,ch102st1}
-};
-
-static const SFG_StrokeChar ch102 = {104.762f,2,ch102st};
-
-/* char: 0x67 */
-
-static const SFG_StrokeVertex ch103st0[] =
-{
- {80.9524f,66.6667f},
- {80.9524f,-9.5238f},
- {76.1905f,-23.8095f},
- {71.4285f,-28.5714f},
- {61.9047f,-33.3333f},
- {47.619f,-33.3333f},
- {38.0952f,-28.5714f}
-};
-
-static const SFG_StrokeVertex ch103st1[] =
-{
- {80.9524f,52.381f},
- {71.4285f,61.9048f},
- {61.9047f,66.6667f},
- {47.619f,66.6667f},
- {38.0952f,61.9048f},
- {28.5714f,52.381f},
- {23.8095f,38.0952f},
- {23.8095f,28.5714f},
- {28.5714f,14.2857f},
- {38.0952f,4.7619f},
- {47.619f,0.0f},
- {61.9047f,0.0f},
- {71.4285f,4.7619f},
- {80.9524f,14.2857f}
-};
-
-static const SFG_StrokeStrip ch103st[] =
-{
- {7,ch103st0},
- {14,ch103st1}
-};
-
-static const SFG_StrokeChar ch103 = {104.762f,2,ch103st};
-
-/* char: 0x68 */
-
-static const SFG_StrokeVertex ch104st0[] =
-{
- {26.1905f,100.0f},
- {26.1905f,0.0f}
-};
-
-static const SFG_StrokeVertex ch104st1[] =
-{
- {26.1905f,47.619f},
- {40.4762f,61.9048f},
- {50.0f,66.6667f},
- {64.2857f,66.6667f},
- {73.8095f,61.9048f},
- {78.5715f,47.619f},
- {78.5715f,0.0f}
-};
-
-static const SFG_StrokeStrip ch104st[] =
-{
- {2,ch104st0},
- {7,ch104st1}
-};
-
-static const SFG_StrokeChar ch104 = {104.762f,2,ch104st};
-
-/* char: 0x69 */
-
-static const SFG_StrokeVertex ch105st0[] =
-{
- {47.6191f,100.0f},
- {52.381f,95.2381f},
- {57.1429f,100.0f},
- {52.381f,104.762f},
- {47.6191f,100.0f}
-};
-
-static const SFG_StrokeVertex ch105st1[] =
-{
- {52.381f,66.6667f},
- {52.381f,0.0f}
-};
-
-static const SFG_StrokeStrip ch105st[] =
-{
- {5,ch105st0},
- {2,ch105st1}
-};
-
-static const SFG_StrokeChar ch105 = {104.762f,2,ch105st};
-
-/* char: 0x6a */
-
-static const SFG_StrokeVertex ch106st0[] =
-{
- {57.1429f,100.0f},
- {61.9048f,95.2381f},
- {66.6667f,100.0f},
- {61.9048f,104.762f},
- {57.1429f,100.0f}
-};
-
-static const SFG_StrokeVertex ch106st1[] =
-{
- {61.9048f,66.6667f},
- {61.9048f,-14.2857f},
- {57.1429f,-28.5714f},
- {47.6191f,-33.3333f},
- {38.0953f,-33.3333f}
-};
-
-static const SFG_StrokeStrip ch106st[] =
-{
- {5,ch106st0},
- {5,ch106st1}
-};
-
-static const SFG_StrokeChar ch106 = {104.762f,2,ch106st};
-
-/* char: 0x6b */
-
-static const SFG_StrokeVertex ch107st0[] =
-{
- {26.1905f,100.0f},
- {26.1905f,0.0f}
-};
-
-static const SFG_StrokeVertex ch107st1[] =
-{
- {73.8095f,66.6667f},
- {26.1905f,19.0476f}
-};
-
-static const SFG_StrokeVertex ch107st2[] =
-{
- {45.2381f,38.0952f},
- {78.5715f,0.0f}
-};
-
-static const SFG_StrokeStrip ch107st[] =
-{
- {2,ch107st0},
- {2,ch107st1},
- {2,ch107st2}
-};
-
-static const SFG_StrokeChar ch107 = {104.762f,3,ch107st};
-
-/* char: 0x6c */
-
-static const SFG_StrokeVertex ch108st0[] =
-{
- {52.381f,100.0f},
- {52.381f,0.0f}
-};
-
-static const SFG_StrokeStrip ch108st[] =
-{
- {2,ch108st0}
-};
-
-static const SFG_StrokeChar ch108 = {104.762f,1,ch108st};
-
-/* char: 0x6d */
-
-static const SFG_StrokeVertex ch109st0[] =
-{
- {0,66.6667f},
- {0,0.0f}
-};
-
-static const SFG_StrokeVertex ch109st1[] =
-{
- {0,47.619f},
- {14.2857f,61.9048f},
- {23.8095f,66.6667f},
- {38.0952f,66.6667f},
- {47.619f,61.9048f},
- {52.381f,47.619f},
- {52.381f,0.0f}
-};
-
-static const SFG_StrokeVertex ch109st2[] =
-{
- {52.381f,47.619f},
- {66.6667f,61.9048f},
- {76.1905f,66.6667f},
- {90.4762f,66.6667f},
- {100.0f,61.9048f},
- {104.762f,47.619f},
- {104.762f,0.0f}
-};
-
-static const SFG_StrokeStrip ch109st[] =
-{
- {2,ch109st0},
- {7,ch109st1},
- {7,ch109st2}
-};
-
-static const SFG_StrokeChar ch109 = {104.762f,3,ch109st};
-
-/* char: 0x6e */
-
-static const SFG_StrokeVertex ch110st0[] =
-{
- {26.1905f,66.6667f},
- {26.1905f,0.0f}
-};
-
-static const SFG_StrokeVertex ch110st1[] =
-{
- {26.1905f,47.619f},
- {40.4762f,61.9048f},
- {50.0f,66.6667f},
- {64.2857f,66.6667f},
- {73.8095f,61.9048f},
- {78.5715f,47.619f},
- {78.5715f,0.0f}
-};
-
-static const SFG_StrokeStrip ch110st[] =
-{
- {2,ch110st0},
- {7,ch110st1}
-};
-
-static const SFG_StrokeChar ch110 = {104.762f,2,ch110st};
-
-/* char: 0x6f */
-
-static const SFG_StrokeVertex ch111st0[] =
-{
- {45.2381f,66.6667f},
- {35.7143f,61.9048f},
- {26.1905f,52.381f},
- {21.4286f,38.0952f},
- {21.4286f,28.5714f},
- {26.1905f,14.2857f},
- {35.7143f,4.7619f},
- {45.2381f,0.0f},
- {59.5238f,0.0f},
- {69.0476f,4.7619f},
- {78.5714f,14.2857f},
- {83.3334f,28.5714f},
- {83.3334f,38.0952f},
- {78.5714f,52.381f},
- {69.0476f,61.9048f},
- {59.5238f,66.6667f},
- {45.2381f,66.6667f}
-};
-
-static const SFG_StrokeStrip ch111st[] =
-{
- {17,ch111st0}
-};
-
-static const SFG_StrokeChar ch111 = {104.762f,1,ch111st};
-
-/* char: 0x70 */
-
-static const SFG_StrokeVertex ch112st0[] =
-{
- {23.8095f,66.6667f},
- {23.8095f,-33.3333f}
-};
-
-static const SFG_StrokeVertex ch112st1[] =
-{
- {23.8095f,52.381f},
- {33.3333f,61.9048f},
- {42.8571f,66.6667f},
- {57.1428f,66.6667f},
- {66.6666f,61.9048f},
- {76.1905f,52.381f},
- {80.9524f,38.0952f},
- {80.9524f,28.5714f},
- {76.1905f,14.2857f},
- {66.6666f,4.7619f},
- {57.1428f,0.0f},
- {42.8571f,0.0f},
- {33.3333f,4.7619f},
- {23.8095f,14.2857f}
-};
-
-static const SFG_StrokeStrip ch112st[] =
-{
- {2,ch112st0},
- {14,ch112st1}
-};
-
-static const SFG_StrokeChar ch112 = {104.762f,2,ch112st};
-
-/* char: 0x71 */
-
-static const SFG_StrokeVertex ch113st0[] =
-{
- {80.9524f,66.6667f},
- {80.9524f,-33.3333f}
-};
-
-static const SFG_StrokeVertex ch113st1[] =
-{
- {80.9524f,52.381f},
- {71.4285f,61.9048f},
- {61.9047f,66.6667f},
- {47.619f,66.6667f},
- {38.0952f,61.9048f},
- {28.5714f,52.381f},
- {23.8095f,38.0952f},
- {23.8095f,28.5714f},
- {28.5714f,14.2857f},
- {38.0952f,4.7619f},
- {47.619f,0.0f},
- {61.9047f,0.0f},
- {71.4285f,4.7619f},
- {80.9524f,14.2857f}
-};
-
-static const SFG_StrokeStrip ch113st[] =
-{
- {2,ch113st0},
- {14,ch113st1}
-};
-
-static const SFG_StrokeChar ch113 = {104.762f,2,ch113st};
-
-/* char: 0x72 */
-
-static const SFG_StrokeVertex ch114st0[] =
-{
- {33.3334f,66.6667f},
- {33.3334f,0.0f}
-};
-
-static const SFG_StrokeVertex ch114st1[] =
-{
- {33.3334f,38.0952f},
- {38.0953f,52.381f},
- {47.6191f,61.9048f},
- {57.1429f,66.6667f},
- {71.4286f,66.6667f}
-};
-
-static const SFG_StrokeStrip ch114st[] =
-{
- {2,ch114st0},
- {5,ch114st1}
-};
-
-static const SFG_StrokeChar ch114 = {104.762f,2,ch114st};
-
-/* char: 0x73 */
-
-static const SFG_StrokeVertex ch115st0[] =
-{
- {78.5715f,52.381f},
- {73.8095f,61.9048f},
- {59.5238f,66.6667f},
- {45.2381f,66.6667f},
- {30.9524f,61.9048f},
- {26.1905f,52.381f},
- {30.9524f,42.8571f},
- {40.4762f,38.0952f},
- {64.2857f,33.3333f},
- {73.8095f,28.5714f},
- {78.5715f,19.0476f},
- {78.5715f,14.2857f},
- {73.8095f,4.7619f},
- {59.5238f,0.0f},
- {45.2381f,0.0f},
- {30.9524f,4.7619f},
- {26.1905f,14.2857f}
-};
-
-static const SFG_StrokeStrip ch115st[] =
-{
- {17,ch115st0}
-};
-
-static const SFG_StrokeChar ch115 = {104.762f,1,ch115st};
-
-/* char: 0x74 */
-
-static const SFG_StrokeVertex ch116st0[] =
-{
- {47.6191f,100.0f},
- {47.6191f,19.0476f},
- {52.381f,4.7619f},
- {61.9048f,0.0f},
- {71.4286f,0.0f}
-};
-
-static const SFG_StrokeVertex ch116st1[] =
-{
- {33.3334f,66.6667f},
- {66.6667f,66.6667f}
-};
-
-static const SFG_StrokeStrip ch116st[] =
-{
- {5,ch116st0},
- {2,ch116st1}
-};
-
-static const SFG_StrokeChar ch116 = {104.762f,2,ch116st};
-
-/* char: 0x75 */
-
-static const SFG_StrokeVertex ch117st0[] =
-{
- {26.1905f,66.6667f},
- {26.1905f,19.0476f},
- {30.9524f,4.7619f},
- {40.4762f,0.0f},
- {54.7619f,0.0f},
- {64.2857f,4.7619f},
- {78.5715f,19.0476f}
-};
-
-static const SFG_StrokeVertex ch117st1[] =
-{
- {78.5715f,66.6667f},
- {78.5715f,0.0f}
-};
-
-static const SFG_StrokeStrip ch117st[] =
-{
- {7,ch117st0},
- {2,ch117st1}
-};
-
-static const SFG_StrokeChar ch117 = {104.762f,2,ch117st};
-
-/* char: 0x76 */
-
-static const SFG_StrokeVertex ch118st0[] =
-{
- {23.8095f,66.6667f},
- {52.3809f,0.0f}
-};
-
-static const SFG_StrokeVertex ch118st1[] =
-{
- {80.9524f,66.6667f},
- {52.3809f,0.0f}
-};
-
-static const SFG_StrokeStrip ch118st[] =
-{
- {2,ch118st0},
- {2,ch118st1}
-};
-
-static const SFG_StrokeChar ch118 = {104.762f,2,ch118st};
-
-/* char: 0x77 */
-
-static const SFG_StrokeVertex ch119st0[] =
-{
- {14.2857f,66.6667f},
- {33.3333f,0.0f}
-};
-
-static const SFG_StrokeVertex ch119st1[] =
-{
- {52.3809f,66.6667f},
- {33.3333f,0.0f}
-};
-
-static const SFG_StrokeVertex ch119st2[] =
-{
- {52.3809f,66.6667f},
- {71.4286f,0.0f}
-};
-
-static const SFG_StrokeVertex ch119st3[] =
-{
- {90.4762f,66.6667f},
- {71.4286f,0.0f}
-};
-
-static const SFG_StrokeStrip ch119st[] =
-{
- {2,ch119st0},
- {2,ch119st1},
- {2,ch119st2},
- {2,ch119st3}
-};
-
-static const SFG_StrokeChar ch119 = {104.762f,4,ch119st};
-
-/* char: 0x78 */
-
-static const SFG_StrokeVertex ch120st0[] =
-{
- {26.1905f,66.6667f},
- {78.5715f,0.0f}
-};
-
-static const SFG_StrokeVertex ch120st1[] =
-{
- {78.5715f,66.6667f},
- {26.1905f,0.0f}
-};
-
-static const SFG_StrokeStrip ch120st[] =
-{
- {2,ch120st0},
- {2,ch120st1}
-};
-
-static const SFG_StrokeChar ch120 = {104.762f,2,ch120st};
-
-/* char: 0x79 */
-
-static const SFG_StrokeVertex ch121st0[] =
-{
- {26.1905f,66.6667f},
- {54.7619f,0.0f}
-};
-
-static const SFG_StrokeVertex ch121st1[] =
-{
- {83.3334f,66.6667f},
- {54.7619f,0.0f},
- {45.2381f,-19.0476f},
- {35.7143f,-28.5714f},
- {26.1905f,-33.3333f},
- {21.4286f,-33.3333f}
-};
-
-static const SFG_StrokeStrip ch121st[] =
-{
- {2,ch121st0},
- {6,ch121st1}
-};
-
-static const SFG_StrokeChar ch121 = {104.762f,2,ch121st};
-
-/* char: 0x7a */
-
-static const SFG_StrokeVertex ch122st0[] =
-{
- {78.5715f,66.6667f},
- {26.1905f,0.0f}
-};
-
-static const SFG_StrokeVertex ch122st1[] =
-{
- {26.1905f,66.6667f},
- {78.5715f,66.6667f}
-};
-
-static const SFG_StrokeVertex ch122st2[] =
-{
- {26.1905f,0.0f},
- {78.5715f,0.0f}
-};
-
-static const SFG_StrokeStrip ch122st[] =
-{
- {2,ch122st0},
- {2,ch122st1},
- {2,ch122st2}
-};
-
-static const SFG_StrokeChar ch122 = {104.762f,3,ch122st};
-
-/* char: 0x7b */
-
-static const SFG_StrokeVertex ch123st0[] =
-{
- {64.2857f,119.048f},
- {54.7619f,114.286f},
- {50.0f,109.524f},
- {45.2381f,100.0f},
- {45.2381f,90.4762f},
- {50.0f,80.9524f},
- {54.7619f,76.1905f},
- {59.5238f,66.6667f},
- {59.5238f,57.1429f},
- {50.0f,47.619f}
-};
-
-static const SFG_StrokeVertex ch123st1[] =
-{
- {54.7619f,114.286f},
- {50.0f,104.762f},
- {50.0f,95.2381f},
- {54.7619f,85.7143f},
- {59.5238f,80.9524f},
- {64.2857f,71.4286f},
- {64.2857f,61.9048f},
- {59.5238f,52.381f},
- {40.4762f,42.8571f},
- {59.5238f,33.3333f},
- {64.2857f,23.8095f},
- {64.2857f,14.2857f},
- {59.5238f,4.7619f},
- {54.7619f,0.0f},
- {50.0f,-9.5238f},
- {50.0f,-19.0476f},
- {54.7619f,-28.5714f}
-};
-
-static const SFG_StrokeVertex ch123st2[] =
-{
- {50.0f,38.0952f},
- {59.5238f,28.5714f},
- {59.5238f,19.0476f},
- {54.7619f,9.5238f},
- {50.0f,4.7619f},
- {45.2381f,-4.7619f},
- {45.2381f,-14.2857f},
- {50.0f,-23.8095f},
- {54.7619f,-28.5714f},
- {64.2857f,-33.3333f}
-};
-
-static const SFG_StrokeStrip ch123st[] =
-{
- {10,ch123st0},
- {17,ch123st1},
- {10,ch123st2}
-};
-
-static const SFG_StrokeChar ch123 = {104.762f,3,ch123st};
-
-/* char: 0x7c */
-
-static const SFG_StrokeVertex ch124st0[] =
-{
- {52.381f,119.048f},
- {52.381f,-33.3333f}
-};
-
-static const SFG_StrokeStrip ch124st[] =
-{
- {2,ch124st0}
-};
-
-static const SFG_StrokeChar ch124 = {104.762f,1,ch124st};
-
-/* char: 0x7d */
-
-static const SFG_StrokeVertex ch125st0[] =
-{
- {40.4762f,119.048f},
- {50.0f,114.286f},
- {54.7619f,109.524f},
- {59.5238f,100.0f},
- {59.5238f,90.4762f},
- {54.7619f,80.9524f},
- {50.0f,76.1905f},
- {45.2381f,66.6667f},
- {45.2381f,57.1429f},
- {54.7619f,47.619f}
-};
-
-static const SFG_StrokeVertex ch125st1[] =
-{
- {50.0f,114.286f},
- {54.7619f,104.762f},
- {54.7619f,95.2381f},
- {50.0f,85.7143f},
- {45.2381f,80.9524f},
- {40.4762f,71.4286f},
- {40.4762f,61.9048f},
- {45.2381f,52.381f},
- {64.2857f,42.8571f},
- {45.2381f,33.3333f},
- {40.4762f,23.8095f},
- {40.4762f,14.2857f},
- {45.2381f,4.7619f},
- {50.0f,0.0f},
- {54.7619f,-9.5238f},
- {54.7619f,-19.0476f},
- {50.0f,-28.5714f}
-};
-
-static const SFG_StrokeVertex ch125st2[] =
-{
- {54.7619f,38.0952f},
- {45.2381f,28.5714f},
- {45.2381f,19.0476f},
- {50.0f,9.5238f},
- {54.7619f,4.7619f},
- {59.5238f,-4.7619f},
- {59.5238f,-14.2857f},
- {54.7619f,-23.8095f},
- {50.0f,-28.5714f},
- {40.4762f,-33.3333f}
-};
-
-static const SFG_StrokeStrip ch125st[] =
-{
- {10,ch125st0},
- {17,ch125st1},
- {10,ch125st2}
-};
-
-static const SFG_StrokeChar ch125 = {104.762f,3,ch125st};
-
-/* char: 0x7e */
-
-static const SFG_StrokeVertex ch126st0[] =
-{
- {9.5238f,28.5714f},
- {9.5238f,38.0952f},
- {14.2857f,52.381f},
- {23.8095f,57.1429f},
- {33.3333f,57.1429f},
- {42.8571f,52.381f},
- {61.9048f,38.0952f},
- {71.4286f,33.3333f},
- {80.9524f,33.3333f},
- {90.4762f,38.0952f},
- {95.2381f,47.619f}
-};
-
-static const SFG_StrokeVertex ch126st1[] =
-{
- {9.5238f,38.0952f},
- {14.2857f,47.619f},
- {23.8095f,52.381f},
- {33.3333f,52.381f},
- {42.8571f,47.619f},
- {61.9048f,33.3333f},
- {71.4286f,28.5714f},
- {80.9524f,28.5714f},
- {90.4762f,33.3333f},
- {95.2381f,47.619f},
- {95.2381f,57.1429f}
-};
-
-static const SFG_StrokeStrip ch126st[] =
-{
- {11,ch126st0},
- {11,ch126st1}
-};
-
-static const SFG_StrokeChar ch126 = {104.762f,2,ch126st};
-
-/* char: 0x7f */
-
-static const SFG_StrokeVertex ch127st0[] =
-{
- {71.4286f,100.0f},
- {33.3333f,-33.3333f}
-};
-
-static const SFG_StrokeVertex ch127st1[] =
-{
- {47.619f,66.6667f},
- {33.3333f,61.9048f},
- {23.8095f,52.381f},
- {19.0476f,38.0952f},
- {19.0476f,23.8095f},
- {23.8095f,14.2857f},
- {33.3333f,4.7619f},
- {47.619f,0.0f},
- {57.1428f,0.0f},
- {71.4286f,4.7619f},
- {80.9524f,14.2857f},
- {85.7143f,28.5714f},
- {85.7143f,42.8571f},
- {80.9524f,52.381f},
- {71.4286f,61.9048f},
- {57.1428f,66.6667f},
- {47.619f,66.6667f}
-};
-
-static const SFG_StrokeStrip ch127st[] =
-{
- {2,ch127st0},
- {17,ch127st1}
-};
-
-static const SFG_StrokeChar ch127 = {104.762f,2,ch127st};
-
-static const SFG_StrokeChar *chars[] =
-{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- &ch32, &ch33, &ch34, &ch35, &ch36, &ch37, &ch38, &ch39,
- &ch40, &ch41, &ch42, &ch43, &ch44, &ch45, &ch46, &ch47,
- &ch48, &ch49, &ch50, &ch51, &ch52, &ch53, &ch54, &ch55,
- &ch56, &ch57, &ch58, &ch59, &ch60, &ch61, &ch62, &ch63,
- &ch64, &ch65, &ch66, &ch67, &ch68, &ch69, &ch70, &ch71,
- &ch72, &ch73, &ch74, &ch75, &ch76, &ch77, &ch78, &ch79,
- &ch80, &ch81, &ch82, &ch83, &ch84, &ch85, &ch86, &ch87,
- &ch88, &ch89, &ch90, &ch91, &ch92, &ch93, &ch94, &ch95,
- &ch96, &ch97, &ch98, &ch99, &ch100, &ch101, &ch102, &ch103,
- &ch104, &ch105, &ch106, &ch107, &ch108, &ch109, &ch110, &ch111,
- &ch112, &ch113, &ch114, &ch115, &ch116, &ch117, &ch118, &ch119,
- &ch120, &ch121, &ch122, &ch123, &ch124, &ch125, &ch126, &ch127
-};
-
-const SFG_StrokeFont fgStrokeMonoRoman = {"MonoRoman",128,152.381f,chars};
diff --git a/src/freeglut_stroke_roman.c b/src/freeglut_stroke_roman.c
deleted file mode 100644 (file)
index da4e030..0000000
+++ /dev/null
@@ -1,2849 +0,0 @@
-/*
- * freeglut_stroke_roman.c
- *
- * freeglut Roman stroke font definition
- *
- * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.
- * Written by Pawel W. Olszta, <olszta@sourceforge.net>
- * Creation date: Thu Dec 16 1999
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-
-/* This file has been automatically generated by the genstroke utility. */
-
-#include <GL/freeglut.h>
-#include "freeglut_internal.h"
-
-/* char: 0x20 */
-
-static const SFG_StrokeStrip ch32st[] =
-{
-  { 0, NULL }
-};
-
-static const SFG_StrokeChar ch32 = {104.762f,0,ch32st};
-
-/* char: 0x21 */
-
-static const SFG_StrokeVertex ch33st0[] =
-{
- {13.3819f,100.0f},
- {13.3819f,33.3333f}
-};
-
-static const SFG_StrokeVertex ch33st1[] =
-{
- {13.3819f,9.5238f},
- {8.62f,4.7619f},
- {13.3819f,0.0f},
- {18.1438f,4.7619f},
- {13.3819f,9.5238f}
-};
-
-static const SFG_StrokeStrip ch33st[] =
-{
- {2,ch33st0},
- {5,ch33st1}
-};
-
-static const SFG_StrokeChar ch33 = {26.6238f,2,ch33st};
-
-/* char: 0x22 */
-
-static const SFG_StrokeVertex ch34st0[] =
-{
- {4.02f,100.0f},
- {4.02f,66.6667f}
-};
-
-static const SFG_StrokeVertex ch34st1[] =
-{
- {42.1152f,100.0f},
- {42.1152f,66.6667f}
-};
-
-static const SFG_StrokeStrip ch34st[] =
-{
- {2,ch34st0},
- {2,ch34st1}
-};
-
-static const SFG_StrokeChar ch34 = {51.4352f,2,ch34st};
-
-/* char: 0x23 */
-
-static const SFG_StrokeVertex ch35st0[] =
-{
- {41.2952f,119.048f},
- {7.9619f,-33.3333f}
-};
-
-static const SFG_StrokeVertex ch35st1[] =
-{
- {69.8667f,119.048f},
- {36.5333f,-33.3333f}
-};
-
-static const SFG_StrokeVertex ch35st2[] =
-{
- {7.9619f,57.1429f},
- {74.6286f,57.1429f}
-};
-
-static const SFG_StrokeVertex ch35st3[] =
-{
- {3.2f,28.5714f},
- {69.8667f,28.5714f}
-};
-
-static const SFG_StrokeStrip ch35st[] =
-{
- {2,ch35st0},
- {2,ch35st1},
- {2,ch35st2},
- {2,ch35st3}
-};
-
-static const SFG_StrokeChar ch35 = {79.4886f,4,ch35st};
-
-/* char: 0x24 */
-
-static const SFG_StrokeVertex ch36st0[] =
-{
- {28.6295f,119.048f},
- {28.6295f,-19.0476f}
-};
-
-static const SFG_StrokeVertex ch36st1[] =
-{
- {47.6771f,119.048f},
- {47.6771f,-19.0476f}
-};
-
-static const SFG_StrokeVertex ch36st2[] =
-{
- {71.4867f,85.7143f},
- {61.9629f,95.2381f},
- {47.6771f,100.0f},
- {28.6295f,100.0f},
- {14.3438f,95.2381f},
- {4.82f,85.7143f},
- {4.82f,76.1905f},
- {9.5819f,66.6667f},
- {14.3438f,61.9048f},
- {23.8676f,57.1429f},
- {52.439f,47.619f},
- {61.9629f,42.8571f},
- {66.7248f,38.0952f},
- {71.4867f,28.5714f},
- {71.4867f,14.2857f},
- {61.9629f,4.7619f},
- {47.6771f,0.0f},
- {28.6295f,0.0f},
- {14.3438f,4.7619f},
- {4.82f,14.2857f}
-};
-
-static const SFG_StrokeStrip ch36st[] =
-{
- {2,ch36st0},
- {2,ch36st1},
- {20,ch36st2}
-};
-
-static const SFG_StrokeChar ch36 = {76.2067f,3,ch36st};
-
-/* char: 0x25 */
-
-static const SFG_StrokeVertex ch37st0[] =
-{
- {92.0743f,100.0f},
- {6.36f,0.0f}
-};
-
-static const SFG_StrokeVertex ch37st1[] =
-{
- {30.1695f,100.0f},
- {39.6933f,90.4762f},
- {39.6933f,80.9524f},
- {34.9314f,71.4286f},
- {25.4076f,66.6667f},
- {15.8838f,66.6667f},
- {6.36f,76.1905f},
- {6.36f,85.7143f},
- {11.1219f,95.2381f},
- {20.6457f,100.0f},
- {30.1695f,100.0f},
- {39.6933f,95.2381f},
- {53.979f,90.4762f},
- {68.2648f,90.4762f},
- {82.5505f,95.2381f},
- {92.0743f,100.0f}
-};
-
-static const SFG_StrokeVertex ch37st2[] =
-{
- {73.0267f,33.3333f},
- {63.5029f,28.5714f},
- {58.741f,19.0476f},
- {58.741f,9.5238f},
- {68.2648f,0.0f},
- {77.7886f,0.0f},
- {87.3124f,4.7619f},
- {92.0743f,14.2857f},
- {92.0743f,23.8095f},
- {82.5505f,33.3333f},
- {73.0267f,33.3333f}
-};
-
-static const SFG_StrokeStrip ch37st[] =
-{
- {2,ch37st0},
- {16,ch37st1},
- {11,ch37st2}
-};
-
-static const SFG_StrokeChar ch37 = {96.5743f,3,ch37st};
-
-/* char: 0x26 */
-
-static const SFG_StrokeVertex ch38st0[] =
-{
- {101.218f,57.1429f},
- {101.218f,61.9048f},
- {96.4562f,66.6667f},
- {91.6943f,66.6667f},
- {86.9324f,61.9048f},
- {82.1705f,52.381f},
- {72.6467f,28.5714f},
- {63.1229f,14.2857f},
- {53.599f,4.7619f},
- {44.0752f,0.0f},
- {25.0276f,0.0f},
- {15.5038f,4.7619f},
- {10.7419f,9.5238f},
- {5.98f,19.0476f},
- {5.98f,28.5714f},
- {10.7419f,38.0952f},
- {15.5038f,42.8571f},
- {48.8371f,61.9048f},
- {53.599f,66.6667f},
- {58.361f,76.1905f},
- {58.361f,85.7143f},
- {53.599f,95.2381f},
- {44.0752f,100.0f},
- {34.5514f,95.2381f},
- {29.7895f,85.7143f},
- {29.7895f,76.1905f},
- {34.5514f,61.9048f},
- {44.0752f,47.619f},
- {67.8848f,14.2857f},
- {77.4086f,4.7619f},
- {86.9324f,0.0f},
- {96.4562f,0.0f},
- {101.218f,4.7619f},
- {101.218f,9.5238f}
-};
-
-static const SFG_StrokeStrip ch38st[] =
-{
- {34,ch38st0}
-};
-
-static const SFG_StrokeChar ch38 = {101.758f,1,ch38st};
-
-/* char: 0x27 */
-
-static const SFG_StrokeVertex ch39st0[] =
-{
- {4.44f,100.0f},
- {4.44f,66.6667f}
-};
-
-static const SFG_StrokeStrip ch39st[] =
-{
- {2,ch39st0}
-};
-
-static const SFG_StrokeChar ch39 = {13.62f,1,ch39st};
-
-/* char: 0x28 */
-
-static const SFG_StrokeVertex ch40st0[] =
-{
- {40.9133f,119.048f},
- {31.3895f,109.524f},
- {21.8657f,95.2381f},
- {12.3419f,76.1905f},
- {7.58f,52.381f},
- {7.58f,33.3333f},
- {12.3419f,9.5238f},
- {21.8657f,-9.5238f},
- {31.3895f,-23.8095f},
- {40.9133f,-33.3333f}
-};
-
-static const SFG_StrokeStrip ch40st[] =
-{
- {10,ch40st0}
-};
-
-static const SFG_StrokeChar ch40 = {47.1733f,1,ch40st};
-
-/* char: 0x29 */
-
-static const SFG_StrokeVertex ch41st0[] =
-{
- {5.28f,119.048f},
- {14.8038f,109.524f},
- {24.3276f,95.2381f},
- {33.8514f,76.1905f},
- {38.6133f,52.381f},
- {38.6133f,33.3333f},
- {33.8514f,9.5238f},
- {24.3276f,-9.5238f},
- {14.8038f,-23.8095f},
- {5.28f,-33.3333f}
-};
-
-static const SFG_StrokeStrip ch41st[] =
-{
- {10,ch41st0}
-};
-
-static const SFG_StrokeChar ch41 = {47.5333f,1,ch41st};
-
-/* char: 0x2a */
-
-static const SFG_StrokeVertex ch42st0[] =
-{
- {30.7695f,71.4286f},
- {30.7695f,14.2857f}
-};
-
-static const SFG_StrokeVertex ch42st1[] =
-{
- {6.96f,57.1429f},
- {54.579f,28.5714f}
-};
-
-static const SFG_StrokeVertex ch42st2[] =
-{
- {54.579f,57.1429f},
- {6.96f,28.5714f}
-};
-
-static const SFG_StrokeStrip ch42st[] =
-{
- {2,ch42st0},
- {2,ch42st1},
- {2,ch42st2}
-};
-
-static const SFG_StrokeChar ch42 = {59.439f,3,ch42st};
-
-/* char: 0x2b */
-
-static const SFG_StrokeVertex ch43st0[] =
-{
- {48.8371f,85.7143f},
- {48.8371f,0.0f}
-};
-
-static const SFG_StrokeVertex ch43st1[] =
-{
- {5.98f,42.8571f},
- {91.6943f,42.8571f}
-};
-
-static const SFG_StrokeStrip ch43st[] =
-{
- {2,ch43st0},
- {2,ch43st1}
-};
-
-static const SFG_StrokeChar ch43 = {97.2543f,2,ch43st};
-
-/* char: 0x2c */
-
-static const SFG_StrokeVertex ch44st0[] =
-{
- {18.2838f,4.7619f},
- {13.5219f,0.0f},
- {8.76f,4.7619f},
- {13.5219f,9.5238f},
- {18.2838f,4.7619f},
- {18.2838f,-4.7619f},
- {13.5219f,-14.2857f},
- {8.76f,-19.0476f}
-};
-
-static const SFG_StrokeStrip ch44st[] =
-{
- {8,ch44st0}
-};
-
-static const SFG_StrokeChar ch44 = {26.0638f,1,ch44st};
-
-/* char: 0x2d */
-
-static const SFG_StrokeVertex ch45st0[] =
-{
- {7.38f,42.8571f},
- {93.0943f,42.8571f}
-};
-
-static const SFG_StrokeStrip ch45st[] =
-{
- {2,ch45st0}
-};
-
-static const SFG_StrokeChar ch45 = {100.754f,1,ch45st};
-
-/* char: 0x2e */
-
-static const SFG_StrokeVertex ch46st0[] =
-{
- {13.1019f,9.5238f},
- {8.34f,4.7619f},
- {13.1019f,0.0f},
- {17.8638f,4.7619f},
- {13.1019f,9.5238f}
-};
-
-static const SFG_StrokeStrip ch46st[] =
-{
- {5,ch46st0}
-};
-
-static const SFG_StrokeChar ch46 = {26.4838f,1,ch46st};
-
-/* char: 0x2f */
-
-static const SFG_StrokeVertex ch47st0[] =
-{
- {7.24f,-14.2857f},
- {73.9067f,100.0f}
-};
-
-static const SFG_StrokeStrip ch47st[] =
-{
- {2,ch47st0}
-};
-
-static const SFG_StrokeChar ch47 = {82.1067f,1,ch47st};
-
-/* char: 0x30 */
-
-static const SFG_StrokeVertex ch48st0[] =
-{
- {33.5514f,100.0f},
- {19.2657f,95.2381f},
- {9.7419f,80.9524f},
- {4.98f,57.1429f},
- {4.98f,42.8571f},
- {9.7419f,19.0476f},
- {19.2657f,4.7619f},
- {33.5514f,0.0f},
- {43.0752f,0.0f},
- {57.361f,4.7619f},
- {66.8848f,19.0476f},
- {71.6467f,42.8571f},
- {71.6467f,57.1429f},
- {66.8848f,80.9524f},
- {57.361f,95.2381f},
- {43.0752f,100.0f},
- {33.5514f,100.0f}
-};
-
-static const SFG_StrokeStrip ch48st[] =
-{
- {17,ch48st0}
-};
-
-static const SFG_StrokeChar ch48 = {77.0667f,1,ch48st};
-
-/* char: 0x31 */
-
-static const SFG_StrokeVertex ch49st0[] =
-{
- {11.82f,80.9524f},
- {21.3438f,85.7143f},
- {35.6295f,100.0f},
- {35.6295f,0.0f}
-};
-
-static const SFG_StrokeStrip ch49st[] =
-{
- {4,ch49st0}
-};
-
-static const SFG_StrokeChar ch49 = {66.5295f,1,ch49st};
-
-/* char: 0x32 */
-
-static const SFG_StrokeVertex ch50st0[] =
-{
- {10.1819f,76.1905f},
- {10.1819f,80.9524f},
- {14.9438f,90.4762f},
- {19.7057f,95.2381f},
- {29.2295f,100.0f},
- {48.2771f,100.0f},
- {57.801f,95.2381f},
- {62.5629f,90.4762f},
- {67.3248f,80.9524f},
- {67.3248f,71.4286f},
- {62.5629f,61.9048f},
- {53.039f,47.619f},
- {5.42f,0.0f},
- {72.0867f,0.0f}
-};
-
-static const SFG_StrokeStrip ch50st[] =
-{
- {14,ch50st0}
-};
-
-static const SFG_StrokeChar ch50 = {77.6467f,1,ch50st};
-
-/* char: 0x33 */
-
-static const SFG_StrokeVertex ch51st0[] =
-{
- {14.5238f,100.0f},
- {66.9048f,100.0f},
- {38.3333f,61.9048f},
- {52.619f,61.9048f},
- {62.1429f,57.1429f},
- {66.9048f,52.381f},
- {71.6667f,38.0952f},
- {71.6667f,28.5714f},
- {66.9048f,14.2857f},
- {57.381f,4.7619f},
- {43.0952f,0.0f},
- {28.8095f,0.0f},
- {14.5238f,4.7619f},
- {9.7619f,9.5238f},
- {5.0f,19.0476f}
-};
-
-static const SFG_StrokeStrip ch51st[] =
-{
- {15,ch51st0}
-};
-
-static const SFG_StrokeChar ch51 = {77.0467f,1,ch51st};
-
-/* char: 0x34 */
-
-static const SFG_StrokeVertex ch52st0[] =
-{
- {51.499f,100.0f},
- {3.88f,33.3333f},
- {75.3086f,33.3333f}
-};
-
-static const SFG_StrokeVertex ch52st1[] =
-{
- {51.499f,100.0f},
- {51.499f,0.0f}
-};
-
-static const SFG_StrokeStrip ch52st[] =
-{
- {3,ch52st0},
- {2,ch52st1}
-};
-
-static const SFG_StrokeChar ch52 = {80.1686f,2,ch52st};
-
-/* char: 0x35 */
-
-static const SFG_StrokeVertex ch53st0[] =
-{
- {62.0029f,100.0f},
- {14.3838f,100.0f},
- {9.6219f,57.1429f},
- {14.3838f,61.9048f},
- {28.6695f,66.6667f},
- {42.9552f,66.6667f},
- {57.241f,61.9048f},
- {66.7648f,52.381f},
- {71.5267f,38.0952f},
- {71.5267f,28.5714f},
- {66.7648f,14.2857f},
- {57.241f,4.7619f},
- {42.9552f,0.0f},
- {28.6695f,0.0f},
- {14.3838f,4.7619f},
- {9.6219f,9.5238f},
- {4.86f,19.0476f}
-};
-
-static const SFG_StrokeStrip ch53st[] =
-{
- {17,ch53st0}
-};
-
-static const SFG_StrokeChar ch53 = {77.6867f,1,ch53st};
-
-/* char: 0x36 */
-
-static const SFG_StrokeVertex ch54st0[] =
-{
- {62.7229f,85.7143f},
- {57.961f,95.2381f},
- {43.6752f,100.0f},
- {34.1514f,100.0f},
- {19.8657f,95.2381f},
- {10.3419f,80.9524f},
- {5.58f,57.1429f},
- {5.58f,33.3333f},
- {10.3419f,14.2857f},
- {19.8657f,4.7619f},
- {34.1514f,0.0f},
- {38.9133f,0.0f},
- {53.199f,4.7619f},
- {62.7229f,14.2857f},
- {67.4848f,28.5714f},
- {67.4848f,33.3333f},
- {62.7229f,47.619f},
- {53.199f,57.1429f},
- {38.9133f,61.9048f},
- {34.1514f,61.9048f},
- {19.8657f,57.1429f},
- {10.3419f,47.619f},
- {5.58f,33.3333f}
-};
-
-static const SFG_StrokeStrip ch54st[] =
-{
- {23,ch54st0}
-};
-
-static const SFG_StrokeChar ch54 = {73.8048f,1,ch54st};
-
-/* char: 0x37 */
-
-static const SFG_StrokeVertex ch55st0[] =
-{
- {72.2267f,100.0f},
- {24.6076f,0.0f}
-};
-
-static const SFG_StrokeVertex ch55st1[] =
-{
- {5.56f,100.0f},
- {72.2267f,100.0f}
-};
-
-static const SFG_StrokeStrip ch55st[] =
-{
- {2,ch55st0},
- {2,ch55st1}
-};
-
-static const SFG_StrokeChar ch55 = {77.2267f,2,ch55st};
-
-/* char: 0x38 */
-
-static const SFG_StrokeVertex ch56st0[] =
-{
- {29.4095f,100.0f},
- {15.1238f,95.2381f},
- {10.3619f,85.7143f},
- {10.3619f,76.1905f},
- {15.1238f,66.6667f},
- {24.6476f,61.9048f},
- {43.6952f,57.1429f},
- {57.981f,52.381f},
- {67.5048f,42.8571f},
- {72.2667f,33.3333f},
- {72.2667f,19.0476f},
- {67.5048f,9.5238f},
- {62.7429f,4.7619f},
- {48.4571f,0.0f},
- {29.4095f,0.0f},
- {15.1238f,4.7619f},
- {10.3619f,9.5238f},
- {5.6f,19.0476f},
- {5.6f,33.3333f},
- {10.3619f,42.8571f},
- {19.8857f,52.381f},
- {34.1714f,57.1429f},
- {53.219f,61.9048f},
- {62.7429f,66.6667f},
- {67.5048f,76.1905f},
- {67.5048f,85.7143f},
- {62.7429f,95.2381f},
- {48.4571f,100.0f},
- {29.4095f,100.0f}
-};
-
-static const SFG_StrokeStrip ch56st[] =
-{
- {29,ch56st0}
-};
-
-static const SFG_StrokeChar ch56 = {77.6667f,1,ch56st};
-
-/* char: 0x39 */
-
-static const SFG_StrokeVertex ch57st0[] =
-{
- {68.5048f,66.6667f},
- {63.7429f,52.381f},
- {54.219f,42.8571f},
- {39.9333f,38.0952f},
- {35.1714f,38.0952f},
- {20.8857f,42.8571f},
- {11.3619f,52.381f},
- {6.6f,66.6667f},
- {6.6f,71.4286f},
- {11.3619f,85.7143f},
- {20.8857f,95.2381f},
- {35.1714f,100.0f},
- {39.9333f,100.0f},
- {54.219f,95.2381f},
- {63.7429f,85.7143f},
- {68.5048f,66.6667f},
- {68.5048f,42.8571f},
- {63.7429f,19.0476f},
- {54.219f,4.7619f},
- {39.9333f,0.0f},
- {30.4095f,0.0f},
- {16.1238f,4.7619f},
- {11.3619f,14.2857f}
-};
-
-static const SFG_StrokeStrip ch57st[] =
-{
- {23,ch57st0}
-};
-
-static const SFG_StrokeChar ch57 = {74.0648f,1,ch57st};
-
-/* char: 0x3a */
-
-static const SFG_StrokeVertex ch58st0[] =
-{
- {14.0819f,66.6667f},
- {9.32f,61.9048f},
- {14.0819f,57.1429f},
- {18.8438f,61.9048f},
- {14.0819f,66.6667f}
-};
-
-static const SFG_StrokeVertex ch58st1[] =
-{
- {14.0819f,9.5238f},
- {9.32f,4.7619f},
- {14.0819f,0.0f},
- {18.8438f,4.7619f},
- {14.0819f,9.5238f}
-};
-
-static const SFG_StrokeStrip ch58st[] =
-{
- {5,ch58st0},
- {5,ch58st1}
-};
-
-static const SFG_StrokeChar ch58 = {26.2238f,2,ch58st};
-
-/* char: 0x3b */
-
-static const SFG_StrokeVertex ch59st0[] =
-{
- {12.9619f,66.6667f},
- {8.2f,61.9048f},
- {12.9619f,57.1429f},
- {17.7238f,61.9048f},
- {12.9619f,66.6667f}
-};
-
-static const SFG_StrokeVertex ch59st1[] =
-{
- {17.7238f,4.7619f},
- {12.9619f,0.0f},
- {8.2f,4.7619f},
- {12.9619f,9.5238f},
- {17.7238f,4.7619f},
- {17.7238f,-4.7619f},
- {12.9619f,-14.2857f},
- {8.2f,-19.0476f}
-};
-
-static const SFG_StrokeStrip ch59st[] =
-{
- {5,ch59st0},
- {8,ch59st1}
-};
-
-static const SFG_StrokeChar ch59 = {26.3038f,2,ch59st};
-
-/* char: 0x3c */
-
-static const SFG_StrokeVertex ch60st0[] =
-{
- {79.2505f,85.7143f},
- {3.06f,42.8571f},
- {79.2505f,0.0f}
-};
-
-static const SFG_StrokeStrip ch60st[] =
-{
- {3,ch60st0}
-};
-
-static const SFG_StrokeChar ch60 = {81.6105f,1,ch60st};
-
-/* char: 0x3d */
-
-static const SFG_StrokeVertex ch61st0[] =
-{
- {5.7f,57.1429f},
- {91.4143f,57.1429f}
-};
-
-static const SFG_StrokeVertex ch61st1[] =
-{
- {5.7f,28.5714f},
- {91.4143f,28.5714f}
-};
-
-static const SFG_StrokeStrip ch61st[] =
-{
- {2,ch61st0},
- {2,ch61st1}
-};
-
-static const SFG_StrokeChar ch61 = {97.2543f,2,ch61st};
-
-/* char: 0x3e */
-
-static const SFG_StrokeVertex ch62st0[] =
-{
- {2.78f,85.7143f},
- {78.9705f,42.8571f},
- {2.78f,0.0f}
-};
-
-static const SFG_StrokeStrip ch62st[] =
-{
- {3,ch62st0}
-};
-
-static const SFG_StrokeChar ch62 = {81.6105f,1,ch62st};
-
-/* char: 0x3f */
-
-static const SFG_StrokeVertex ch63st0[] =
-{
- {8.42f,76.1905f},
- {8.42f,80.9524f},
- {13.1819f,90.4762f},
- {17.9438f,95.2381f},
- {27.4676f,100.0f},
- {46.5152f,100.0f},
- {56.039f,95.2381f},
- {60.801f,90.4762f},
- {65.5629f,80.9524f},
- {65.5629f,71.4286f},
- {60.801f,61.9048f},
- {56.039f,57.1429f},
- {36.9914f,47.619f},
- {36.9914f,33.3333f}
-};
-
-static const SFG_StrokeVertex ch63st1[] =
-{
- {36.9914f,9.5238f},
- {32.2295f,4.7619f},
- {36.9914f,0.0f},
- {41.7533f,4.7619f},
- {36.9914f,9.5238f}
-};
-
-static const SFG_StrokeStrip ch63st[] =
-{
- {14,ch63st0},
- {5,ch63st1}
-};
-
-static const SFG_StrokeChar ch63 = {73.9029f,2,ch63st};
-
-/* char: 0x40 */
-
-static const SFG_StrokeVertex ch64st0[] =
-{
- {49.2171f,52.381f},
- {39.6933f,57.1429f},
- {30.1695f,57.1429f},
- {25.4076f,47.619f},
- {25.4076f,42.8571f},
- {30.1695f,33.3333f},
- {39.6933f,33.3333f},
- {49.2171f,38.0952f}
-};
-
-static const SFG_StrokeVertex ch64st1[] =
-{
- {49.2171f,57.1429f},
- {49.2171f,38.0952f},
- {53.979f,33.3333f},
- {63.5029f,33.3333f},
- {68.2648f,42.8571f},
- {68.2648f,47.619f},
- {63.5029f,61.9048f},
- {53.979f,71.4286f},
- {39.6933f,76.1905f},
- {34.9314f,76.1905f},
- {20.6457f,71.4286f},
- {11.1219f,61.9048f},
- {6.36f,47.619f},
- {6.36f,42.8571f},
- {11.1219f,28.5714f},
- {20.6457f,19.0476f},
- {34.9314f,14.2857f},
- {39.6933f,14.2857f},
- {53.979f,19.0476f}
-};
-
-static const SFG_StrokeStrip ch64st[] =
-{
- {8,ch64st0},
- {19,ch64st1}
-};
-
-static const SFG_StrokeChar ch64 = {74.3648f,2,ch64st};
-
-/* char: 0x41 */
-
-static const SFG_StrokeVertex ch65st0[] =
-{
- {40.5952f,100.0f},
- {2.5f,0.0f}
-};
-
-static const SFG_StrokeVertex ch65st1[] =
-{
- {40.5952f,100.0f},
- {78.6905f,0.0f}
-};
-
-static const SFG_StrokeVertex ch65st2[] =
-{
- {16.7857f,33.3333f},
- {64.4048f,33.3333f}
-};
-
-static const SFG_StrokeStrip ch65st[] =
-{
- {2,ch65st0},
- {2,ch65st1},
- {2,ch65st2}
-};
-
-static const SFG_StrokeChar ch65 = {80.4905f,3,ch65st};
-
-/* char: 0x42 */
-
-static const SFG_StrokeVertex ch66st0[] =
-{
- {11.42f,100.0f},
- {11.42f,0.0f}
-};
-
-static const SFG_StrokeVertex ch66st1[] =
-{
- {11.42f,100.0f},
- {54.2771f,100.0f},
- {68.5629f,95.2381f},
- {73.3248f,90.4762f},
- {78.0867f,80.9524f},
- {78.0867f,71.4286f},
- {73.3248f,61.9048f},
- {68.5629f,57.1429f},
- {54.2771f,52.381f}
-};
-
-static const SFG_StrokeVertex ch66st2[] =
-{
- {11.42f,52.381f},
- {54.2771f,52.381f},
- {68.5629f,47.619f},
- {73.3248f,42.8571f},
- {78.0867f,33.3333f},
- {78.0867f,19.0476f},
- {73.3248f,9.5238f},
- {68.5629f,4.7619f},
- {54.2771f,0.0f},
- {11.42f,0.0f}
-};
-
-static const SFG_StrokeStrip ch66st[] =
-{
- {2,ch66st0},
- {9,ch66st1},
- {10,ch66st2}
-};
-
-static const SFG_StrokeChar ch66 = {83.6267f,3,ch66st};
-
-/* char: 0x43 */
-
-static const SFG_StrokeVertex ch67st0[] =
-{
- {78.0886f,76.1905f},
- {73.3267f,85.7143f},
- {63.8029f,95.2381f},
- {54.279f,100.0f},
- {35.2314f,100.0f},
- {25.7076f,95.2381f},
- {16.1838f,85.7143f},
- {11.4219f,76.1905f},
- {6.66f,61.9048f},
- {6.66f,38.0952f},
- {11.4219f,23.8095f},
- {16.1838f,14.2857f},
- {25.7076f,4.7619f},
- {35.2314f,0.0f},
- {54.279f,0.0f},
- {63.8029f,4.7619f},
- {73.3267f,14.2857f},
- {78.0886f,23.8095f}
-};
-
-static const SFG_StrokeStrip ch67st[] =
-{
- {18,ch67st0}
-};
-
-static const SFG_StrokeChar ch67 = {84.4886f,1,ch67st};
-
-/* char: 0x44 */
-
-static const SFG_StrokeVertex ch68st0[] =
-{
- {11.96f,100.0f},
- {11.96f,0.0f}
-};
-
-static const SFG_StrokeVertex ch68st1[] =
-{
- {11.96f,100.0f},
- {45.2933f,100.0f},
- {59.579f,95.2381f},
- {69.1029f,85.7143f},
- {73.8648f,76.1905f},
- {78.6267f,61.9048f},
- {78.6267f,38.0952f},
- {73.8648f,23.8095f},
- {69.1029f,14.2857f},
- {59.579f,4.7619f},
- {45.2933f,0.0f},
- {11.96f,0.0f}
-};
-
-static const SFG_StrokeStrip ch68st[] =
-{
- {2,ch68st0},
- {12,ch68st1}
-};
-
-static const SFG_StrokeChar ch68 = {85.2867f,2,ch68st};
-
-/* char: 0x45 */
-
-static const SFG_StrokeVertex ch69st0[] =
-{
- {11.42f,100.0f},
- {11.42f,0.0f}
-};
-
-static const SFG_StrokeVertex ch69st1[] =
-{
- {11.42f,100.0f},
- {73.3248f,100.0f}
-};
-
-static const SFG_StrokeVertex ch69st2[] =
-{
- {11.42f,52.381f},
- {49.5152f,52.381f}
-};
-
-static const SFG_StrokeVertex ch69st3[] =
-{
- {11.42f,0.0f},
- {73.3248f,0.0f}
-};
-
-static const SFG_StrokeStrip ch69st[] =
-{
- {2,ch69st0},
- {2,ch69st1},
- {2,ch69st2},
- {2,ch69st3}
-};
-
-static const SFG_StrokeChar ch69 = {78.1848f,4,ch69st};
-
-/* char: 0x46 */
-
-static const SFG_StrokeVertex ch70st0[] =
-{
- {11.42f,100.0f},
- {11.42f,0.0f}
-};
-
-static const SFG_StrokeVertex ch70st1[] =
-{
- {11.42f,100.0f},
- {73.3248f,100.0f}
-};
-
-static const SFG_StrokeVertex ch70st2[] =
-{
- {11.42f,52.381f},
- {49.5152f,52.381f}
-};
-
-static const SFG_StrokeStrip ch70st[] =
-{
- {2,ch70st0},
- {2,ch70st1},
- {2,ch70st2}
-};
-
-static const SFG_StrokeChar ch70 = {78.7448f,3,ch70st};
-
-/* char: 0x47 */
-
-static const SFG_StrokeVertex ch71st0[] =
-{
- {78.4886f,76.1905f},
- {73.7267f,85.7143f},
- {64.2029f,95.2381f},
- {54.679f,100.0f},
- {35.6314f,100.0f},
- {26.1076f,95.2381f},
- {16.5838f,85.7143f},
- {11.8219f,76.1905f},
- {7.06f,61.9048f},
- {7.06f,38.0952f},
- {11.8219f,23.8095f},
- {16.5838f,14.2857f},
- {26.1076f,4.7619f},
- {35.6314f,0.0f},
- {54.679f,0.0f},
- {64.2029f,4.7619f},
- {73.7267f,14.2857f},
- {78.4886f,23.8095f},
- {78.4886f,38.0952f}
-};
-
-static const SFG_StrokeVertex ch71st1[] =
-{
- {54.679f,38.0952f},
- {78.4886f,38.0952f}
-};
-
-static const SFG_StrokeStrip ch71st[] =
-{
- {19,ch71st0},
- {2,ch71st1}
-};
-
-static const SFG_StrokeChar ch71 = {89.7686f,2,ch71st};
-
-/* char: 0x48 */
-
-static const SFG_StrokeVertex ch72st0[] =
-{
- {11.42f,100.0f},
- {11.42f,0.0f}
-};
-
-static const SFG_StrokeVertex ch72st1[] =
-{
- {78.0867f,100.0f},
- {78.0867f,0.0f}
-};
-
-static const SFG_StrokeVertex ch72st2[] =
-{
- {11.42f,52.381f},
- {78.0867f,52.381f}
-};
-
-static const SFG_StrokeStrip ch72st[] =
-{
- {2,ch72st0},
- {2,ch72st1},
- {2,ch72st2}
-};
-
-static const SFG_StrokeChar ch72 = {89.0867f,3,ch72st};
-
-/* char: 0x49 */
-
-static const SFG_StrokeVertex ch73st0[] =
-{
- {10.86f,100.0f},
- {10.86f,0.0f}
-};
-
-static const SFG_StrokeStrip ch73st[] =
-{
- {2,ch73st0}
-};
-
-static const SFG_StrokeChar ch73 = {21.3f,1,ch73st};
-
-/* char: 0x4a */
-
-static const SFG_StrokeVertex ch74st0[] =
-{
- {50.119f,100.0f},
- {50.119f,23.8095f},
- {45.3571f,9.5238f},
- {40.5952f,4.7619f},
- {31.0714f,0.0f},
- {21.5476f,0.0f},
- {12.0238f,4.7619f},
- {7.2619f,9.5238f},
- {2.5f,23.8095f},
- {2.5f,33.3333f}
-};
-
-static const SFG_StrokeStrip ch74st[] =
-{
- {10,ch74st0}
-};
-
-static const SFG_StrokeChar ch74 = {59.999f,1,ch74st};
-
-/* char: 0x4b */
-
-static const SFG_StrokeVertex ch75st0[] =
-{
- {11.28f,100.0f},
- {11.28f,0.0f}
-};
-
-static const SFG_StrokeVertex ch75st1[] =
-{
- {77.9467f,100.0f},
- {11.28f,33.3333f}
-};
-
-static const SFG_StrokeVertex ch75st2[] =
-{
- {35.0895f,57.1429f},
- {77.9467f,0.0f}
-};
-
-static const SFG_StrokeStrip ch75st[] =
-{
- {2,ch75st0},
- {2,ch75st1},
- {2,ch75st2}
-};
-
-static const SFG_StrokeChar ch75 = {79.3267f,3,ch75st};
-
-/* char: 0x4c */
-
-static const SFG_StrokeVertex ch76st0[] =
-{
- {11.68f,100.0f},
- {11.68f,0.0f}
-};
-
-static const SFG_StrokeVertex ch76st1[] =
-{
- {11.68f,0.0f},
- {68.8229f,0.0f}
-};
-
-static const SFG_StrokeStrip ch76st[] =
-{
- {2,ch76st0},
- {2,ch76st1}
-};
-
-static const SFG_StrokeChar ch76 = {71.3229f,2,ch76st};
-
-/* char: 0x4d */
-
-static const SFG_StrokeVertex ch77st0[] =
-{
- {10.86f,100.0f},
- {10.86f,0.0f}
-};
-
-static const SFG_StrokeVertex ch77st1[] =
-{
- {10.86f,100.0f},
- {48.9552f,0.0f}
-};
-
-static const SFG_StrokeVertex ch77st2[] =
-{
- {87.0505f,100.0f},
- {48.9552f,0.0f}
-};
-
-static const SFG_StrokeVertex ch77st3[] =
-{
- {87.0505f,100.0f},
- {87.0505f,0.0f}
-};
-
-static const SFG_StrokeStrip ch77st[] =
-{
- {2,ch77st0},
- {2,ch77st1},
- {2,ch77st2},
- {2,ch77st3}
-};
-
-static const SFG_StrokeChar ch77 = {97.2105f,4,ch77st};
-
-/* char: 0x4e */
-
-static const SFG_StrokeVertex ch78st0[] =
-{
- {11.14f,100.0f},
- {11.14f,0.0f}
-};
-
-static const SFG_StrokeVertex ch78st1[] =
-{
- {11.14f,100.0f},
- {77.8067f,0.0f}
-};
-
-static const SFG_StrokeVertex ch78st2[] =
-{
- {77.8067f,100.0f},
- {77.8067f,0.0f}
-};
-
-static const SFG_StrokeStrip ch78st[] =
-{
- {2,ch78st0},
- {2,ch78st1},
- {2,ch78st2}
-};
-
-static const SFG_StrokeChar ch78 = {88.8067f,3,ch78st};
-
-/* char: 0x4f */
-
-static const SFG_StrokeVertex ch79st0[] =
-{
- {34.8114f,100.0f},
- {25.2876f,95.2381f},
- {15.7638f,85.7143f},
- {11.0019f,76.1905f},
- {6.24f,61.9048f},
- {6.24f,38.0952f},
- {11.0019f,23.8095f},
- {15.7638f,14.2857f},
- {25.2876f,4.7619f},
- {34.8114f,0.0f},
- {53.859f,0.0f},
- {63.3829f,4.7619f},
- {72.9067f,14.2857f},
- {77.6686f,23.8095f},
- {82.4305f,38.0952f},
- {82.4305f,61.9048f},
- {77.6686f,76.1905f},
- {72.9067f,85.7143f},
- {63.3829f,95.2381f},
- {53.859f,100.0f},
- {34.8114f,100.0f}
-};
-
-static const SFG_StrokeStrip ch79st[] =
-{
- {21,ch79st0}
-};
-
-static const SFG_StrokeChar ch79 = {88.8305f,1,ch79st};
-
-/* char: 0x50 */
-
-static const SFG_StrokeVertex ch80st0[] =
-{
- {12.1f,100.0f},
- {12.1f,0.0f}
-};
-
-static const SFG_StrokeVertex ch80st1[] =
-{
- {12.1f,100.0f},
- {54.9571f,100.0f},
- {69.2429f,95.2381f},
- {74.0048f,90.4762f},
- {78.7667f,80.9524f},
- {78.7667f,66.6667f},
- {74.0048f,57.1429f},
- {69.2429f,52.381f},
- {54.9571f,47.619f},
- {12.1f,47.619f}
-};
-
-static const SFG_StrokeStrip ch80st[] =
-{
- {2,ch80st0},
- {10,ch80st1}
-};
-
-static const SFG_StrokeChar ch80 = {85.6667f,2,ch80st};
-
-/* char: 0x51 */
-
-static const SFG_StrokeVertex ch81st0[] =
-{
- {33.8714f,100.0f},
- {24.3476f,95.2381f},
- {14.8238f,85.7143f},
- {10.0619f,76.1905f},
- {5.3f,61.9048f},
- {5.3f,38.0952f},
- {10.0619f,23.8095f},
- {14.8238f,14.2857f},
- {24.3476f,4.7619f},
- {33.8714f,0.0f},
- {52.919f,0.0f},
- {62.4429f,4.7619f},
- {71.9667f,14.2857f},
- {76.7286f,23.8095f},
- {81.4905f,38.0952f},
- {81.4905f,61.9048f},
- {76.7286f,76.1905f},
- {71.9667f,85.7143f},
- {62.4429f,95.2381f},
- {52.919f,100.0f},
- {33.8714f,100.0f}
-};
-
-static const SFG_StrokeVertex ch81st1[] =
-{
- {48.1571f,19.0476f},
- {76.7286f,-9.5238f}
-};
-
-static const SFG_StrokeStrip ch81st[] =
-{
- {21,ch81st0},
- {2,ch81st1}
-};
-
-static const SFG_StrokeChar ch81 = {88.0905f,2,ch81st};
-
-/* char: 0x52 */
-
-static const SFG_StrokeVertex ch82st0[] =
-{
- {11.68f,100.0f},
- {11.68f,0.0f}
-};
-
-static const SFG_StrokeVertex ch82st1[] =
-{
- {11.68f,100.0f},
- {54.5371f,100.0f},
- {68.8229f,95.2381f},
- {73.5848f,90.4762f},
- {78.3467f,80.9524f},
- {78.3467f,71.4286f},
- {73.5848f,61.9048f},
- {68.8229f,57.1429f},
- {54.5371f,52.381f},
- {11.68f,52.381f}
-};
-
-static const SFG_StrokeVertex ch82st2[] =
-{
- {45.0133f,52.381f},
- {78.3467f,0.0f}
-};
-
-static const SFG_StrokeStrip ch82st[] =
-{
- {2,ch82st0},
- {10,ch82st1},
- {2,ch82st2}
-};
-
-static const SFG_StrokeChar ch82 = {82.3667f,3,ch82st};
-
-/* char: 0x53 */
-
-static const SFG_StrokeVertex ch83st0[] =
-{
- {74.6667f,85.7143f},
- {65.1429f,95.2381f},
- {50.8571f,100.0f},
- {31.8095f,100.0f},
- {17.5238f,95.2381f},
- {8.0f,85.7143f},
- {8.0f,76.1905f},
- {12.7619f,66.6667f},
- {17.5238f,61.9048f},
- {27.0476f,57.1429f},
- {55.619f,47.619f},
- {65.1429f,42.8571f},
- {69.9048f,38.0952f},
- {74.6667f,28.5714f},
- {74.6667f,14.2857f},
- {65.1429f,4.7619f},
- {50.8571f,0.0f},
- {31.8095f,0.0f},
- {17.5238f,4.7619f},
- {8.0f,14.2857f}
-};
-
-static const SFG_StrokeStrip ch83st[] =
-{
- {20,ch83st0}
-};
-
-static const SFG_StrokeChar ch83 = {80.8267f,1,ch83st};
-
-/* char: 0x54 */
-
-static const SFG_StrokeVertex ch84st0[] =
-{
- {35.6933f,100.0f},
- {35.6933f,0.0f}
-};
-
-static const SFG_StrokeVertex ch84st1[] =
-{
- {2.36f,100.0f},
- {69.0267f,100.0f}
-};
-
-static const SFG_StrokeStrip ch84st[] =
-{
- {2,ch84st0},
- {2,ch84st1}
-};
-
-static const SFG_StrokeChar ch84 = {71.9467f,2,ch84st};
-
-/* char: 0x55 */
-
-static const SFG_StrokeVertex ch85st0[] =
-{
- {11.54f,100.0f},
- {11.54f,28.5714f},
- {16.3019f,14.2857f},
- {25.8257f,4.7619f},
- {40.1114f,0.0f},
- {49.6352f,0.0f},
- {63.921f,4.7619f},
- {73.4448f,14.2857f},
- {78.2067f,28.5714f},
- {78.2067f,100.0f}
-};
-
-static const SFG_StrokeStrip ch85st[] =
-{
- {10,ch85st0}
-};
-
-static const SFG_StrokeChar ch85 = {89.4867f,1,ch85st};
-
-/* char: 0x56 */
-
-static const SFG_StrokeVertex ch86st0[] =
-{
- {2.36f,100.0f},
- {40.4552f,0.0f}
-};
-
-static const SFG_StrokeVertex ch86st1[] =
-{
- {78.5505f,100.0f},
- {40.4552f,0.0f}
-};
-
-static const SFG_StrokeStrip ch86st[] =
-{
- {2,ch86st0},
- {2,ch86st1}
-};
-
-static const SFG_StrokeChar ch86 = {81.6105f,2,ch86st};
-
-/* char: 0x57 */
-
-static const SFG_StrokeVertex ch87st0[] =
-{
- {2.22f,100.0f},
- {26.0295f,0.0f}
-};
-
-static const SFG_StrokeVertex ch87st1[] =
-{
- {49.839f,100.0f},
- {26.0295f,0.0f}
-};
-
-static const SFG_StrokeVertex ch87st2[] =
-{
- {49.839f,100.0f},
- {73.6486f,0.0f}
-};
-
-static const SFG_StrokeVertex ch87st3[] =
-{
- {97.4581f,100.0f},
- {73.6486f,0.0f}
-};
-
-static const SFG_StrokeStrip ch87st[] =
-{
- {2,ch87st0},
- {2,ch87st1},
- {2,ch87st2},
- {2,ch87st3}
-};
-
-static const SFG_StrokeChar ch87 = {100.518f,4,ch87st};
-
-/* char: 0x58 */
-
-static const SFG_StrokeVertex ch88st0[] =
-{
- {2.5f,100.0f},
- {69.1667f,0.0f}
-};
-
-static const SFG_StrokeVertex ch88st1[] =
-{
- {69.1667f,100.0f},
- {2.5f,0.0f}
-};
-
-static const SFG_StrokeStrip ch88st[] =
-{
- {2,ch88st0},
- {2,ch88st1}
-};
-
-static const SFG_StrokeChar ch88 = {72.3667f,2,ch88st};
-
-/* char: 0x59 */
-
-static const SFG_StrokeVertex ch89st0[] =
-{
- {1.52f,100.0f},
- {39.6152f,52.381f},
- {39.6152f,0.0f}
-};
-
-static const SFG_StrokeVertex ch89st1[] =
-{
- {77.7105f,100.0f},
- {39.6152f,52.381f}
-};
-
-static const SFG_StrokeStrip ch89st[] =
-{
- {3,ch89st0},
- {2,ch89st1}
-};
-
-static const SFG_StrokeChar ch89 = {79.6505f,2,ch89st};
-
-/* char: 0x5a */
-
-static const SFG_StrokeVertex ch90st0[] =
-{
- {69.1667f,100.0f},
- {2.5f,0.0f}
-};
-
-static const SFG_StrokeVertex ch90st1[] =
-{
- {2.5f,100.0f},
- {69.1667f,100.0f}
-};
-
-static const SFG_StrokeVertex ch90st2[] =
-{
- {2.5f,0.0f},
- {69.1667f,0.0f}
-};
-
-static const SFG_StrokeStrip ch90st[] =
-{
- {2,ch90st0},
- {2,ch90st1},
- {2,ch90st2}
-};
-
-static const SFG_StrokeChar ch90 = {73.7467f,3,ch90st};
-
-/* char: 0x5b */
-
-static const SFG_StrokeVertex ch91st0[] =
-{
- {7.78f,119.048f},
- {7.78f,-33.3333f}
-};
-
-static const SFG_StrokeVertex ch91st1[] =
-{
- {12.5419f,119.048f},
- {12.5419f,-33.3333f}
-};
-
-static const SFG_StrokeVertex ch91st2[] =
-{
- {7.78f,119.048f},
- {41.1133f,119.048f}
-};
-
-static const SFG_StrokeVertex ch91st3[] =
-{
- {7.78f,-33.3333f},
- {41.1133f,-33.3333f}
-};
-
-static const SFG_StrokeStrip ch91st[] =
-{
- {2,ch91st0},
- {2,ch91st1},
- {2,ch91st2},
- {2,ch91st3}
-};
-
-static const SFG_StrokeChar ch91 = {46.1133f,4,ch91st};
-
-/* char: 0x5c */
-
-static const SFG_StrokeVertex ch92st0[] =
-{
- {5.84f,100.0f},
- {72.5067f,-14.2857f}
-};
-
-static const SFG_StrokeStrip ch92st[] =
-{
- {2,ch92st0}
-};
-
-static const SFG_StrokeChar ch92 = {78.2067f,1,ch92st};
-
-/* char: 0x5d */
-
-static const SFG_StrokeVertex ch93st0[] =
-{
- {33.0114f,119.048f},
- {33.0114f,-33.3333f}
-};
-
-static const SFG_StrokeVertex ch93st1[] =
-{
- {37.7733f,119.048f},
- {37.7733f,-33.3333f}
-};
-
-static const SFG_StrokeVertex ch93st2[] =
-{
- {4.44f,119.048f},
- {37.7733f,119.048f}
-};
-
-static const SFG_StrokeVertex ch93st3[] =
-{
- {4.44f,-33.3333f},
- {37.7733f,-33.3333f}
-};
-
-static const SFG_StrokeStrip ch93st[] =
-{
- {2,ch93st0},
- {2,ch93st1},
- {2,ch93st2},
- {2,ch93st3}
-};
-
-static const SFG_StrokeChar ch93 = {46.3933f,4,ch93st};
-
-/* char: 0x5e */
-
-static const SFG_StrokeVertex ch94st0[] =
-{
- {44.0752f,109.524f},
- {5.98f,42.8571f}
-};
-
-static const SFG_StrokeVertex ch94st1[] =
-{
- {44.0752f,109.524f},
- {82.1705f,42.8571f}
-};
-
-static const SFG_StrokeStrip ch94st[] =
-{
- {2,ch94st0},
- {2,ch94st1}
-};
-
-static const SFG_StrokeChar ch94 = {90.2305f,2,ch94st};
-
-/* char: 0x5f */
-
-static const SFG_StrokeVertex ch95st0[] =
-{
- {-1.1f,-33.3333f},
- {103.662f,-33.3333f},
- {103.662f,-28.5714f},
- {-1.1f,-28.5714f},
- {-1.1f,-33.3333f}
-};
-
-static const SFG_StrokeStrip ch95st[] =
-{
- {5,ch95st0}
-};
-
-static const SFG_StrokeChar ch95 = {104.062f,1,ch95st};
-
-/* char: 0x60 */
-
-static const SFG_StrokeVertex ch96st0[] =
-{
- {33.0219f,100.0f},
- {56.8314f,71.4286f}
-};
-
-static const SFG_StrokeVertex ch96st1[] =
-{
- {33.0219f,100.0f},
- {28.26f,95.2381f},
- {56.8314f,71.4286f}
-};
-
-static const SFG_StrokeStrip ch96st[] =
-{
- {2,ch96st0},
- {3,ch96st1}
-};
-
-static const SFG_StrokeChar ch96 = {83.5714f,2,ch96st};
-
-/* char: 0x61 */
-
-static const SFG_StrokeVertex ch97st0[] =
-{
- {63.8229f,66.6667f},
- {63.8229f,0.0f}
-};
-
-static const SFG_StrokeVertex ch97st1[] =
-{
- {63.8229f,52.381f},
- {54.299f,61.9048f},
- {44.7752f,66.6667f},
- {30.4895f,66.6667f},
- {20.9657f,61.9048f},
- {11.4419f,52.381f},
- {6.68f,38.0952f},
- {6.68f,28.5714f},
- {11.4419f,14.2857f},
- {20.9657f,4.7619f},
- {30.4895f,0.0f},
- {44.7752f,0.0f},
- {54.299f,4.7619f},
- {63.8229f,14.2857f}
-};
-
-static const SFG_StrokeStrip ch97st[] =
-{
- {2,ch97st0},
- {14,ch97st1}
-};
-
-static const SFG_StrokeChar ch97 = {66.6029f,2,ch97st};
-
-/* char: 0x62 */
-
-static const SFG_StrokeVertex ch98st0[] =
-{
- {8.76f,100.0f},
- {8.76f,0.0f}
-};
-
-static const SFG_StrokeVertex ch98st1[] =
-{
- {8.76f,52.381f},
- {18.2838f,61.9048f},
- {27.8076f,66.6667f},
- {42.0933f,66.6667f},
- {51.6171f,61.9048f},
- {61.141f,52.381f},
- {65.9029f,38.0952f},
- {65.9029f,28.5714f},
- {61.141f,14.2857f},
- {51.6171f,4.7619f},
- {42.0933f,0.0f},
- {27.8076f,0.0f},
- {18.2838f,4.7619f},
- {8.76f,14.2857f}
-};
-
-static const SFG_StrokeStrip ch98st[] =
-{
- {2,ch98st0},
- {14,ch98st1}
-};
-
-static const SFG_StrokeChar ch98 = {70.4629f,2,ch98st};
-
-/* char: 0x63 */
-
-static const SFG_StrokeVertex ch99st0[] =
-{
- {62.6629f,52.381f},
- {53.139f,61.9048f},
- {43.6152f,66.6667f},
- {29.3295f,66.6667f},
- {19.8057f,61.9048f},
- {10.2819f,52.381f},
- {5.52f,38.0952f},
- {5.52f,28.5714f},
- {10.2819f,14.2857f},
- {19.8057f,4.7619f},
- {29.3295f,0.0f},
- {43.6152f,0.0f},
- {53.139f,4.7619f},
- {62.6629f,14.2857f}
-};
-
-static const SFG_StrokeStrip ch99st[] =
-{
- {14,ch99st0}
-};
-
-static const SFG_StrokeChar ch99 = {68.9229f,1,ch99st};
-
-/* char: 0x64 */
-
-static const SFG_StrokeVertex ch100st0[] =
-{
- {61.7829f,100.0f},
- {61.7829f,0.0f}
-};
-
-static const SFG_StrokeVertex ch100st1[] =
-{
- {61.7829f,52.381f},
- {52.259f,61.9048f},
- {42.7352f,66.6667f},
- {28.4495f,66.6667f},
- {18.9257f,61.9048f},
- {9.4019f,52.381f},
- {4.64f,38.0952f},
- {4.64f,28.5714f},
- {9.4019f,14.2857f},
- {18.9257f,4.7619f},
- {28.4495f,0.0f},
- {42.7352f,0.0f},
- {52.259f,4.7619f},
- {61.7829f,14.2857f}
-};
-
-static const SFG_StrokeStrip ch100st[] =
-{
- {2,ch100st0},
- {14,ch100st1}
-};
-
-static const SFG_StrokeChar ch100 = {70.2629f,2,ch100st};
-
-/* char: 0x65 */
-
-static const SFG_StrokeVertex ch101st0[] =
-{
- {5.72f,38.0952f},
- {62.8629f,38.0952f},
- {62.8629f,47.619f},
- {58.101f,57.1429f},
- {53.339f,61.9048f},
- {43.8152f,66.6667f},
- {29.5295f,66.6667f},
- {20.0057f,61.9048f},
- {10.4819f,52.381f},
- {5.72f,38.0952f},
- {5.72f,28.5714f},
- {10.4819f,14.2857f},
- {20.0057f,4.7619f},
- {29.5295f,0.0f},
- {43.8152f,0.0f},
- {53.339f,4.7619f},
- {62.8629f,14.2857f}
-};
-
-static const SFG_StrokeStrip ch101st[] =
-{
- {17,ch101st0}
-};
-
-static const SFG_StrokeChar ch101 = {68.5229f,1,ch101st};
-
-/* char: 0x66 */
-
-static const SFG_StrokeVertex ch102st0[] =
-{
- {38.7752f,100.0f},
- {29.2514f,100.0f},
- {19.7276f,95.2381f},
- {14.9657f,80.9524f},
- {14.9657f,0.0f}
-};
-
-static const SFG_StrokeVertex ch102st1[] =
-{
- {0.68f,66.6667f},
- {34.0133f,66.6667f}
-};
-
-static const SFG_StrokeStrip ch102st[] =
-{
- {5,ch102st0},
- {2,ch102st1}
-};
-
-static const SFG_StrokeChar ch102 = {38.6552f,2,ch102st};
-
-/* char: 0x67 */
-
-static const SFG_StrokeVertex ch103st0[] =
-{
- {62.5029f,66.6667f},
- {62.5029f,-9.5238f},
- {57.741f,-23.8095f},
- {52.979f,-28.5714f},
- {43.4552f,-33.3333f},
- {29.1695f,-33.3333f},
- {19.6457f,-28.5714f}
-};
-
-static const SFG_StrokeVertex ch103st1[] =
-{
- {62.5029f,52.381f},
- {52.979f,61.9048f},
- {43.4552f,66.6667f},
- {29.1695f,66.6667f},
- {19.6457f,61.9048f},
- {10.1219f,52.381f},
- {5.36f,38.0952f},
- {5.36f,28.5714f},
- {10.1219f,14.2857f},
- {19.6457f,4.7619f},
- {29.1695f,0.0f},
- {43.4552f,0.0f},
- {52.979f,4.7619f},
- {62.5029f,14.2857f}
-};
-
-static const SFG_StrokeStrip ch103st[] =
-{
- {7,ch103st0},
- {14,ch103st1}
-};
-
-static const SFG_StrokeChar ch103 = {70.9829f,2,ch103st};
-
-/* char: 0x68 */
-
-static const SFG_StrokeVertex ch104st0[] =
-{
- {9.6f,100.0f},
- {9.6f,0.0f}
-};
-
-static const SFG_StrokeVertex ch104st1[] =
-{
- {9.6f,47.619f},
- {23.8857f,61.9048f},
- {33.4095f,66.6667f},
- {47.6952f,66.6667f},
- {57.219f,61.9048f},
- {61.981f,47.619f},
- {61.981f,0.0f}
-};
-
-static const SFG_StrokeStrip ch104st[] =
-{
- {2,ch104st0},
- {7,ch104st1}
-};
-
-static const SFG_StrokeChar ch104 = {71.021f,2,ch104st};
-
-/* char: 0x69 */
-
-static const SFG_StrokeVertex ch105st0[] =
-{
- {10.02f,100.0f},
- {14.7819f,95.2381f},
- {19.5438f,100.0f},
- {14.7819f,104.762f},
- {10.02f,100.0f}
-};
-
-static const SFG_StrokeVertex ch105st1[] =
-{
- {14.7819f,66.6667f},
- {14.7819f,0.0f}
-};
-
-static const SFG_StrokeStrip ch105st[] =
-{
- {5,ch105st0},
- {2,ch105st1}
-};
-
-static const SFG_StrokeChar ch105 = {28.8638f,2,ch105st};
-
-/* char: 0x6a */
-
-static const SFG_StrokeVertex ch106st0[] =
-{
- {17.3876f,100.0f},
- {22.1495f,95.2381f},
- {26.9114f,100.0f},
- {22.1495f,104.762f},
- {17.3876f,100.0f}
-};
-
-static const SFG_StrokeVertex ch106st1[] =
-{
- {22.1495f,66.6667f},
- {22.1495f,-14.2857f},
- {17.3876f,-28.5714f},
- {7.8638f,-33.3333f},
- {-1.66f,-33.3333f}
-};
-
-static const SFG_StrokeStrip ch106st[] =
-{
- {5,ch106st0},
- {5,ch106st1}
-};
-
-static const SFG_StrokeChar ch106 = {36.2314f,2,ch106st};
-
-/* char: 0x6b */
-
-static const SFG_StrokeVertex ch107st0[] =
-{
- {9.6f,100.0f},
- {9.6f,0.0f}
-};
-
-static const SFG_StrokeVertex ch107st1[] =
-{
- {57.219f,66.6667f},
- {9.6f,19.0476f}
-};
-
-static const SFG_StrokeVertex ch107st2[] =
-{
- {28.6476f,38.0952f},
- {61.981f,0.0f}
-};
-
-static const SFG_StrokeStrip ch107st[] =
-{
- {2,ch107st0},
- {2,ch107st1},
- {2,ch107st2}
-};
-
-static const SFG_StrokeChar ch107 = {62.521f,3,ch107st};
-
-/* char: 0x6c */
-
-static const SFG_StrokeVertex ch108st0[] =
-{
- {10.02f,100.0f},
- {10.02f,0.0f}
-};
-
-static const SFG_StrokeStrip ch108st[] =
-{
- {2,ch108st0}
-};
-
-static const SFG_StrokeChar ch108 = {19.34f,1,ch108st};
-
-/* char: 0x6d */
-
-static const SFG_StrokeVertex ch109st0[] =
-{
- {9.6f,66.6667f},
- {9.6f,0.0f}
-};
-
-static const SFG_StrokeVertex ch109st1[] =
-{
- {9.6f,47.619f},
- {23.8857f,61.9048f},
- {33.4095f,66.6667f},
- {47.6952f,66.6667f},
- {57.219f,61.9048f},
- {61.981f,47.619f},
- {61.981f,0.0f}
-};
-
-static const SFG_StrokeVertex ch109st2[] =
-{
- {61.981f,47.619f},
- {76.2667f,61.9048f},
- {85.7905f,66.6667f},
- {100.076f,66.6667f},
- {109.6f,61.9048f},
- {114.362f,47.619f},
- {114.362f,0.0f}
-};
-
-static const SFG_StrokeStrip ch109st[] =
-{
- {2,ch109st0},
- {7,ch109st1},
- {7,ch109st2}
-};
-
-static const SFG_StrokeChar ch109 = {123.962f,3,ch109st};
-
-/* char: 0x6e */
-
-static const SFG_StrokeVertex ch110st0[] =
-{
- {9.18f,66.6667f},
- {9.18f,0.0f}
-};
-
-static const SFG_StrokeVertex ch110st1[] =
-{
- {9.18f,47.619f},
- {23.4657f,61.9048f},
- {32.9895f,66.6667f},
- {47.2752f,66.6667f},
- {56.799f,61.9048f},
- {61.561f,47.619f},
- {61.561f,0.0f}
-};
-
-static const SFG_StrokeStrip ch110st[] =
-{
- {2,ch110st0},
- {7,ch110st1}
-};
-
-static const SFG_StrokeChar ch110 = {70.881f,2,ch110st};
-
-/* char: 0x6f */
-
-static const SFG_StrokeVertex ch111st0[] =
-{
- {28.7895f,66.6667f},
- {19.2657f,61.9048f},
- {9.7419f,52.381f},
- {4.98f,38.0952f},
- {4.98f,28.5714f},
- {9.7419f,14.2857f},
- {19.2657f,4.7619f},
- {28.7895f,0.0f},
- {43.0752f,0.0f},
- {52.599f,4.7619f},
- {62.1229f,14.2857f},
- {66.8848f,28.5714f},
- {66.8848f,38.0952f},
- {62.1229f,52.381f},
- {52.599f,61.9048f},
- {43.0752f,66.6667f},
- {28.7895f,66.6667f}
-};
-
-static const SFG_StrokeStrip ch111st[] =
-{
- {17,ch111st0}
-};
-
-static const SFG_StrokeChar ch111 = {71.7448f,1,ch111st};
-
-/* char: 0x70 */
-
-static const SFG_StrokeVertex ch112st0[] =
-{
- {9.46f,66.6667f},
- {9.46f,-33.3333f}
-};
-
-static const SFG_StrokeVertex ch112st1[] =
-{
- {9.46f,52.381f},
- {18.9838f,61.9048f},
- {28.5076f,66.6667f},
- {42.7933f,66.6667f},
- {52.3171f,61.9048f},
- {61.841f,52.381f},
- {66.6029f,38.0952f},
- {66.6029f,28.5714f},
- {61.841f,14.2857f},
- {52.3171f,4.7619f},
- {42.7933f,0.0f},
- {28.5076f,0.0f},
- {18.9838f,4.7619f},
- {9.46f,14.2857f}
-};
-
-static const SFG_StrokeStrip ch112st[] =
-{
- {2,ch112st0},
- {14,ch112st1}
-};
-
-static const SFG_StrokeChar ch112 = {70.8029f,2,ch112st};
-
-/* char: 0x71 */
-
-static const SFG_StrokeVertex ch113st0[] =
-{
- {61.9829f,66.6667f},
- {61.9829f,-33.3333f}
-};
-
-static const SFG_StrokeVertex ch113st1[] =
-{
- {61.9829f,52.381f},
- {52.459f,61.9048f},
- {42.9352f,66.6667f},
- {28.6495f,66.6667f},
- {19.1257f,61.9048f},
- {9.6019f,52.381f},
- {4.84f,38.0952f},
- {4.84f,28.5714f},
- {9.6019f,14.2857f},
- {19.1257f,4.7619f},
- {28.6495f,0.0f},
- {42.9352f,0.0f},
- {52.459f,4.7619f},
- {61.9829f,14.2857f}
-};
-
-static const SFG_StrokeStrip ch113st[] =
-{
- {2,ch113st0},
- {14,ch113st1}
-};
-
-static const SFG_StrokeChar ch113 = {70.7429f,2,ch113st};
-
-/* char: 0x72 */
-
-static const SFG_StrokeVertex ch114st0[] =
-{
- {9.46f,66.6667f},
- {9.46f,0.0f}
-};
-
-static const SFG_StrokeVertex ch114st1[] =
-{
- {9.46f,38.0952f},
- {14.2219f,52.381f},
- {23.7457f,61.9048f},
- {33.2695f,66.6667f},
- {47.5552f,66.6667f}
-};
-
-static const SFG_StrokeStrip ch114st[] =
-{
- {2,ch114st0},
- {5,ch114st1}
-};
-
-static const SFG_StrokeChar ch114 = {49.4952f,2,ch114st};
-
-/* char: 0x73 */
-
-static const SFG_StrokeVertex ch115st0[] =
-{
- {57.081f,52.381f},
- {52.319f,61.9048f},
- {38.0333f,66.6667f},
- {23.7476f,66.6667f},
- {9.4619f,61.9048f},
- {4.7f,52.381f},
- {9.4619f,42.8571f},
- {18.9857f,38.0952f},
- {42.7952f,33.3333f},
- {52.319f,28.5714f},
- {57.081f,19.0476f},
- {57.081f,14.2857f},
- {52.319f,4.7619f},
- {38.0333f,0.0f},
- {23.7476f,0.0f},
- {9.4619f,4.7619f},
- {4.7f,14.2857f}
-};
-
-static const SFG_StrokeStrip ch115st[] =
-{
- {17,ch115st0}
-};
-
-static const SFG_StrokeChar ch115 = {62.321f,1,ch115st};
-
-/* char: 0x74 */
-
-static const SFG_StrokeVertex ch116st0[] =
-{
- {14.8257f,100.0f},
- {14.8257f,19.0476f},
- {19.5876f,4.7619f},
- {29.1114f,0.0f},
- {38.6352f,0.0f}
-};
-
-static const SFG_StrokeVertex ch116st1[] =
-{
- {0.54f,66.6667f},
- {33.8733f,66.6667f}
-};
-
-static const SFG_StrokeStrip ch116st[] =
-{
- {5,ch116st0},
- {2,ch116st1}
-};
-
-static const SFG_StrokeChar ch116 = {39.3152f,2,ch116st};
-
-/* char: 0x75 */
-
-static const SFG_StrokeVertex ch117st0[] =
-{
- {9.46f,66.6667f},
- {9.46f,19.0476f},
- {14.2219f,4.7619f},
- {23.7457f,0.0f},
- {38.0314f,0.0f},
- {47.5552f,4.7619f},
- {61.841f,19.0476f}
-};
-
-static const SFG_StrokeVertex ch117st1[] =
-{
- {61.841f,66.6667f},
- {61.841f,0.0f}
-};
-
-static const SFG_StrokeStrip ch117st[] =
-{
- {7,ch117st0},
- {2,ch117st1}
-};
-
-static const SFG_StrokeChar ch117 = {71.161f,2,ch117st};
-
-/* char: 0x76 */
-
-static const SFG_StrokeVertex ch118st0[] =
-{
- {1.8f,66.6667f},
- {30.3714f,0.0f}
-};
-
-static const SFG_StrokeVertex ch118st1[] =
-{
- {58.9429f,66.6667f},
- {30.3714f,0.0f}
-};
-
-static const SFG_StrokeStrip ch118st[] =
-{
- {2,ch118st0},
- {2,ch118st1}
-};
-
-static const SFG_StrokeChar ch118 = {60.6029f,2,ch118st};
-
-/* char: 0x77 */
-
-static const SFG_StrokeVertex ch119st0[] =
-{
- {2.5f,66.6667f},
- {21.5476f,0.0f}
-};
-
-static const SFG_StrokeVertex ch119st1[] =
-{
- {40.5952f,66.6667f},
- {21.5476f,0.0f}
-};
-
-static const SFG_StrokeVertex ch119st2[] =
-{
- {40.5952f,66.6667f},
- {59.6429f,0.0f}
-};
-
-static const SFG_StrokeVertex ch119st3[] =
-{
- {78.6905f,66.6667f},
- {59.6429f,0.0f}
-};
-
-static const SFG_StrokeStrip ch119st[] =
-{
- {2,ch119st0},
- {2,ch119st1},
- {2,ch119st2},
- {2,ch119st3}
-};
-
-static const SFG_StrokeChar ch119 = {80.4905f,4,ch119st};
-
-/* char: 0x78 */
-
-static const SFG_StrokeVertex ch120st0[] =
-{
- {1.66f,66.6667f},
- {54.041f,0.0f}
-};
-
-static const SFG_StrokeVertex ch120st1[] =
-{
- {54.041f,66.6667f},
- {1.66f,0.0f}
-};
-
-static const SFG_StrokeStrip ch120st[] =
-{
- {2,ch120st0},
- {2,ch120st1}
-};
-
-static const SFG_StrokeChar ch120 = {56.401f,2,ch120st};
-
-/* char: 0x79 */
-
-static const SFG_StrokeVertex ch121st0[] =
-{
- {6.5619f,66.6667f},
- {35.1333f,0.0f}
-};
-
-static const SFG_StrokeVertex ch121st1[] =
-{
- {63.7048f,66.6667f},
- {35.1333f,0.0f},
- {25.6095f,-19.0476f},
- {16.0857f,-28.5714f},
- {6.5619f,-33.3333f},
- {1.8f,-33.3333f}
-};
-
-static const SFG_StrokeStrip ch121st[] =
-{
- {2,ch121st0},
- {6,ch121st1}
-};
-
-static const SFG_StrokeChar ch121 = {66.0648f,2,ch121st};
-
-/* char: 0x7a */
-
-static const SFG_StrokeVertex ch122st0[] =
-{
- {56.821f,66.6667f},
- {4.44f,0.0f}
-};
-
-static const SFG_StrokeVertex ch122st1[] =
-{
- {4.44f,66.6667f},
- {56.821f,66.6667f}
-};
-
-static const SFG_StrokeVertex ch122st2[] =
-{
- {4.44f,0.0f},
- {56.821f,0.0f}
-};
-
-static const SFG_StrokeStrip ch122st[] =
-{
- {2,ch122st0},
- {2,ch122st1},
- {2,ch122st2}
-};
-
-static const SFG_StrokeChar ch122 = {61.821f,3,ch122st};
-
-/* char: 0x7b */
-
-static const SFG_StrokeVertex ch123st0[] =
-{
- {31.1895f,119.048f},
- {21.6657f,114.286f},
- {16.9038f,109.524f},
- {12.1419f,100.0f},
- {12.1419f,90.4762f},
- {16.9038f,80.9524f},
- {21.6657f,76.1905f},
- {26.4276f,66.6667f},
- {26.4276f,57.1429f},
- {16.9038f,47.619f}
-};
-
-static const SFG_StrokeVertex ch123st1[] =
-{
- {21.6657f,114.286f},
- {16.9038f,104.762f},
- {16.9038f,95.2381f},
- {21.6657f,85.7143f},
- {26.4276f,80.9524f},
- {31.1895f,71.4286f},
- {31.1895f,61.9048f},
- {26.4276f,52.381f},
- {7.38f,42.8571f},
- {26.4276f,33.3333f},
- {31.1895f,23.8095f},
- {31.1895f,14.2857f},
- {26.4276f,4.7619f},
- {21.6657f,0.0f},
- {16.9038f,-9.5238f},
- {16.9038f,-19.0476f},
- {21.6657f,-28.5714f}
-};
-
-static const SFG_StrokeVertex ch123st2[] =
-{
- {16.9038f,38.0952f},
- {26.4276f,28.5714f},
- {26.4276f,19.0476f},
- {21.6657f,9.5238f},
- {16.9038f,4.7619f},
- {12.1419f,-4.7619f},
- {12.1419f,-14.2857f},
- {16.9038f,-23.8095f},
- {21.6657f,-28.5714f},
- {31.1895f,-33.3333f}
-};
-
-static const SFG_StrokeStrip ch123st[] =
-{
- {10,ch123st0},
- {17,ch123st1},
- {10,ch123st2}
-};
-
-static const SFG_StrokeChar ch123 = {41.6295f,3,ch123st};
-
-/* char: 0x7c */
-
-static const SFG_StrokeVertex ch124st0[] =
-{
- {11.54f,119.048f},
- {11.54f,-33.3333f}
-};
-
-static const SFG_StrokeStrip ch124st[] =
-{
- {2,ch124st0}
-};
-
-static const SFG_StrokeChar ch124 = {23.78f,1,ch124st};
-
-/* char: 0x7d */
-
-static const SFG_StrokeVertex ch125st0[] =
-{
- {9.18f,119.048f},
- {18.7038f,114.286f},
- {23.4657f,109.524f},
- {28.2276f,100.0f},
- {28.2276f,90.4762f},
- {23.4657f,80.9524f},
- {18.7038f,76.1905f},
- {13.9419f,66.6667f},
- {13.9419f,57.1429f},
- {23.4657f,47.619f}
-};
-
-static const SFG_StrokeVertex ch125st1[] =
-{
- {18.7038f,114.286f},
- {23.4657f,104.762f},
- {23.4657f,95.2381f},
- {18.7038f,85.7143f},
- {13.9419f,80.9524f},
- {9.18f,71.4286f},
- {9.18f,61.9048f},
- {13.9419f,52.381f},
- {32.9895f,42.8571f},
- {13.9419f,33.3333f},
- {9.18f,23.8095f},
- {9.18f,14.2857f},
- {13.9419f,4.7619f},
- {18.7038f,0.0f},
- {23.4657f,-9.5238f},
- {23.4657f,-19.0476f},
- {18.7038f,-28.5714f}
-};
-
-static const SFG_StrokeVertex ch125st2[] =
-{
- {23.4657f,38.0952f},
- {13.9419f,28.5714f},
- {13.9419f,19.0476f},
- {18.7038f,9.5238f},
- {23.4657f,4.7619f},
- {28.2276f,-4.7619f},
- {28.2276f,-14.2857f},
- {23.4657f,-23.8095f},
- {18.7038f,-28.5714f},
- {9.18f,-33.3333f}
-};
-
-static const SFG_StrokeStrip ch125st[] =
-{
- {10,ch125st0},
- {17,ch125st1},
- {10,ch125st2}
-};
-
-static const SFG_StrokeChar ch125 = {41.4695f,3,ch125st};
-
-/* char: 0x7e */
-
-static const SFG_StrokeVertex ch126st0[] =
-{
- {2.92f,28.5714f},
- {2.92f,38.0952f},
- {7.6819f,52.381f},
- {17.2057f,57.1429f},
- {26.7295f,57.1429f},
- {36.2533f,52.381f},
- {55.301f,38.0952f},
- {64.8248f,33.3333f},
- {74.3486f,33.3333f},
- {83.8724f,38.0952f},
- {88.6343f,47.619f}
-};
-
-static const SFG_StrokeVertex ch126st1[] =
-{
- {2.92f,38.0952f},
- {7.6819f,47.619f},
- {17.2057f,52.381f},
- {26.7295f,52.381f},
- {36.2533f,47.619f},
- {55.301f,33.3333f},
- {64.8248f,28.5714f},
- {74.3486f,28.5714f},
- {83.8724f,33.3333f},
- {88.6343f,47.619f},
- {88.6343f,57.1429f}
-};
-
-static const SFG_StrokeStrip ch126st[] =
-{
- {11,ch126st0},
- {11,ch126st1}
-};
-
-static const SFG_StrokeChar ch126 = {91.2743f,2,ch126st};
-
-/* char: 0x7f */
-
-static const SFG_StrokeVertex ch127st0[] =
-{
- {52.381f,100.0f},
- {14.2857f,-33.3333f}
-};
-
-static const SFG_StrokeVertex ch127st1[] =
-{
- {28.5714f,66.6667f},
- {14.2857f,61.9048f},
- {4.7619f,52.381f},
- {0.0f,38.0952f},
- {0.0f,23.8095f},
- {4.7619f,14.2857f},
- {14.2857f,4.7619f},
- {28.5714f,0.0f},
- {38.0952f,0.0f},
- {52.381f,4.7619f},
- {61.9048f,14.2857f},
- {66.6667f,28.5714f},
- {66.6667f,42.8571f},
- {61.9048f,52.381f},
- {52.381f,61.9048f},
- {38.0952f,66.6667f},
- {28.5714f,66.6667f}
-};
-
-static const SFG_StrokeStrip ch127st[] =
-{
- {2,ch127st0},
- {17,ch127st1}
-};
-
-static const SFG_StrokeChar ch127 = {66.6667f,2,ch127st};
-
-static const SFG_StrokeChar *chars[] =
-{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- &ch32, &ch33, &ch34, &ch35, &ch36, &ch37, &ch38, &ch39,
- &ch40, &ch41, &ch42, &ch43, &ch44, &ch45, &ch46, &ch47,
- &ch48, &ch49, &ch50, &ch51, &ch52, &ch53, &ch54, &ch55,
- &ch56, &ch57, &ch58, &ch59, &ch60, &ch61, &ch62, &ch63,
- &ch64, &ch65, &ch66, &ch67, &ch68, &ch69, &ch70, &ch71,
- &ch72, &ch73, &ch74, &ch75, &ch76, &ch77, &ch78, &ch79,
- &ch80, &ch81, &ch82, &ch83, &ch84, &ch85, &ch86, &ch87,
- &ch88, &ch89, &ch90, &ch91, &ch92, &ch93, &ch94, &ch95,
- &ch96, &ch97, &ch98, &ch99, &ch100, &ch101, &ch102, &ch103,
- &ch104, &ch105, &ch106, &ch107, &ch108, &ch109, &ch110, &ch111,
- &ch112, &ch113, &ch114, &ch115, &ch116, &ch117, &ch118, &ch119,
- &ch120, &ch121, &ch122, &ch123, &ch124, &ch125, &ch126, &ch127
-};
-
-const SFG_StrokeFont fgStrokeRoman = {"Roman",128,152.381f,chars};
diff --git a/src/freeglut_structure.c b/src/freeglut_structure.c
deleted file mode 100644 (file)
index c5a2d73..0000000
+++ /dev/null
@@ -1,598 +0,0 @@
-/*
- * freeglut_structure.c
- *
- * Windows and menus need tree structure
- *
- * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.
- * Written by Pawel W. Olszta, <olszta@sourceforge.net>
- * Creation date: Sat Dec 18 1999
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-#include <GL/freeglut.h>
-#include "freeglut_internal.h"
-
-/* -- GLOBAL EXPORTS ------------------------------------------------------- */
-
-/*
- * The SFG_Structure container holds information about windows and menus
- * created between glutInit() and glutMainLoop() return.
- */
-
-SFG_Structure fgStructure = { { NULL, NULL },  /* The list of windows       */
-                              { NULL, NULL },  /* The list of menus         */
-                              { NULL, NULL },  /* Windows to Destroy list   */
-                              NULL,            /* The current window        */
-                              NULL,            /* The current menu          */
-                              NULL,            /* The menu OpenGL context   */
-                              NULL,            /* The game mode window      */
-                              0,               /* The current new window ID */
-                              0 };             /* The current new menu ID   */
-
-
-/* -- PRIVATE FUNCTIONS ---------------------------------------------------- */
-
-static void fghClearCallBacks( SFG_Window *window )
-{
-    if( window )
-    {
-        int i;
-        for( i = 0; i < TOTAL_CALLBACKS; ++i )
-            window->CallBacks[ i ] = NULL;
-    }
-}
-
-/*
- * This private function creates, opens and adds to the hierarchy
- * a freeglut window complete with OpenGL context and stuff...
- *
- * If parent is set to NULL, the window created will be a topmost one.
- */
-SFG_Window* fgCreateWindow( SFG_Window* parent, const char* title,
-                            GLboolean positionUse, int x, int y,
-                            GLboolean sizeUse, int w, int h,
-                            GLboolean gameMode, GLboolean isMenu )
-{
-    /* Have the window object created */
-    SFG_Window *window = (SFG_Window *)calloc( sizeof(SFG_Window), 1 );
-
-#if TARGET_HOST_UNIX_X11
-    window->Window.FBConfig = NULL;
-#endif
-    fghClearCallBacks( window );
-
-    /* Initialize the object properties */
-    window->ID = ++fgStructure.WindowID;
-#if TARGET_HOST_POSIX_X11
-    window->State.OldHeight = window->State.OldWidth = -1;
-#endif
-
-    fgListInit( &window->Children );
-    if( parent )
-    {
-        fgListAppend( &parent->Children, &window->Node );
-        window->Parent = parent;
-    }
-    else
-        fgListAppend( &fgStructure.Windows, &window->Node );
-
-    /* Set the default mouse cursor and reset the modifiers value */
-    window->State.Cursor    = GLUT_CURSOR_INHERIT;
-
-    window->IsMenu = isMenu;
-
-    window->State.IgnoreKeyRepeat = GL_FALSE;
-    window->State.KeyRepeating    = GL_FALSE;
-    window->State.IsFullscreen    = GL_FALSE;
-
-    /*
-     * Open the window now. The fgOpenWindow() function is system
-     * dependant, and resides in freeglut_window.c. Uses fgState.
-     */
-    fgOpenWindow( window, title, positionUse, x, y, sizeUse, w, h, gameMode,
-                  (GLboolean)(parent ? GL_TRUE : GL_FALSE) );
-
-    return window;
-}
-
-/*
- * This private function creates a menu and adds it to the menus list
- */
-SFG_Menu* fgCreateMenu( FGCBMenu menuCallback )
-{
-    int x = 100, y = 100, w = 1, h = 1;
-    SFG_Window *current_window = fgStructure.CurrentWindow;
-
-    /* Have the menu object created */
-    SFG_Menu* menu = (SFG_Menu *)calloc( sizeof(SFG_Menu), 1 );
-
-    menu->ParentWindow = NULL;
-
-    /* Create a window for the menu to reside in. */
-
-    fgCreateWindow( NULL, "freeglut menu", GL_TRUE, x, y, GL_TRUE, w, h,
-                    GL_FALSE, GL_TRUE );
-    menu->Window = fgStructure.CurrentWindow;
-    glutDisplayFunc( fgDisplayMenu );
-
-    glutHideWindow( );  /* Hide the window for now */
-    fgSetWindow( current_window );
-
-    /* Initialize the object properties: */
-    menu->ID       = ++fgStructure.MenuID;
-    menu->Callback = menuCallback;
-    menu->ActiveEntry = NULL;
-
-    fgListInit( &menu->Entries );
-    fgListAppend( &fgStructure.Menus, &menu->Node );
-
-    /* Newly created menus implicitly become current ones */
-    fgStructure.CurrentMenu = menu;
-
-    return menu;
-}
-
-/*
- * Function to add a window to the linked list of windows to destroy.
- * Subwindows are automatically added because they hang from the window
- * structure.
- */
-void fgAddToWindowDestroyList( SFG_Window* window )
-{
-    SFG_WindowList *new_list_entry =
-        ( SFG_WindowList* )malloc( sizeof(SFG_WindowList ) );
-    new_list_entry->window = window;
-    fgListAppend( &fgStructure.WindowsToDestroy, &new_list_entry->node );
-
-    /* Check if the window is the current one... */
-    if( fgStructure.CurrentWindow == window )
-        fgStructure.CurrentWindow = NULL;
-
-    /*
-     * Clear all window callbacks except Destroy, which will
-     * be invoked later.  Right now, we are potentially carrying
-     * out a freeglut operation at the behest of a client callback,
-     * so we are reluctant to re-enter the client with the Destroy
-     * callback, right now.  The others are all wiped out, however,
-     * to ensure that they are no longer called after this point.
-     */
-    {
-        FGCBDestroy destroy = (FGCBDestroy)FETCH_WCB( *window, Destroy );
-        fghClearCallBacks( window );
-        SET_WCB( *window, Destroy, destroy );
-    }
-}
-
-/*
- * Function to close down all the windows in the "WindowsToDestroy" list
- */
-void fgCloseWindows( )
-{
-    while( fgStructure.WindowsToDestroy.First )
-    {
-        SFG_WindowList *window_ptr = fgStructure.WindowsToDestroy.First;
-        fgDestroyWindow( window_ptr->window );
-        fgListRemove( &fgStructure.WindowsToDestroy, &window_ptr->node );
-        free( window_ptr );
-    }
-}
-
-/*
- * This function destroys a window and all of its subwindows. Actually,
- * another function, defined in freeglut_window.c is called, but this is
- * a whole different story...
- */
-void fgDestroyWindow( SFG_Window* window )
-{
-    FREEGLUT_INTERNAL_ERROR_EXIT ( window, "Window destroy function called with null window",
-                                   "fgDestroyWindow" );
-
-    while( window->Children.First )
-        fgDestroyWindow( ( SFG_Window * )window->Children.First );
-
-    {
-        SFG_Window *activeWindow = fgStructure.CurrentWindow;
-        INVOKE_WCB( *window, Destroy, ( ) );
-        fgSetWindow( activeWindow );
-    }
-
-    if( window->Parent )
-        fgListRemove( &window->Parent->Children, &window->Node );
-    else
-        fgListRemove( &fgStructure.Windows, &window->Node );
-
-    if( window->ActiveMenu )
-      fgDeactivateMenu( window );
-
-    fghClearCallBacks( window );
-    fgCloseWindow( window );
-    free( window );
-    if( fgStructure.CurrentWindow == window )
-        fgStructure.CurrentWindow = NULL;
-}
-
-/*
- * This is a helper static function that removes a menu (given its pointer)
- * from any windows that can be accessed from a given parent...
- */
-static void fghRemoveMenuFromWindow( SFG_Window* window, SFG_Menu* menu )
-{
-    SFG_Window *subWindow;
-    int i;
-
-    /* Check whether this is the active menu in the window */
-    if ( menu == window->ActiveMenu )
-        window->ActiveMenu = NULL ;
-
-    /*
-     * Check if the menu is attached to the current window,
-     * if so, have it detached (by overwriting with a NULL):
-     */
-    for( i = 0; i < FREEGLUT_MAX_MENUS; i++ )
-        if( window->Menu[ i ] == menu )
-            window->Menu[ i ] = NULL;
-
-    /* Call this function for all of the window's children recursively: */
-    for( subWindow = (SFG_Window *)window->Children.First;
-         subWindow;
-         subWindow = (SFG_Window *)subWindow->Node.Next)
-        fghRemoveMenuFromWindow( subWindow, menu );
-}
-
-/*
- * This is a static helper function that removes menu references
- * from another menu, given two pointers to them...
- */
-static void fghRemoveMenuFromMenu( SFG_Menu* from, SFG_Menu* menu )
-{
-    SFG_MenuEntry *entry;
-
-    for( entry = (SFG_MenuEntry *)from->Entries.First;
-         entry;
-         entry = ( SFG_MenuEntry * )entry->Node.Next )
-        if( entry->SubMenu == menu )
-            entry->SubMenu = NULL;
-}
-
-/*
- * This function destroys a menu specified by the parameter. All menus
- * and windows are updated to make sure no ill pointers hang around.
- */
-void fgDestroyMenu( SFG_Menu* menu )
-{
-    SFG_Window *window;
-    SFG_Menu *from;
-
-    FREEGLUT_INTERNAL_ERROR_EXIT ( menu, "Menu destroy function called with null menu",
-                                   "fgDestroyMenu" );
-
-    /* First of all, have all references to this menu removed from all windows: */
-    for( window = (SFG_Window *)fgStructure.Windows.First;
-         window;
-         window = (SFG_Window *)window->Node.Next )
-        fghRemoveMenuFromWindow( window, menu );
-
-    /* Now proceed with removing menu entries that lead to this menu */
-    for( from = ( SFG_Menu * )fgStructure.Menus.First;
-         from;
-         from = ( SFG_Menu * )from->Node.Next )
-        fghRemoveMenuFromMenu( from, menu );
-
-    /*
-     * If the programmer defined a destroy callback, call it
-     * A. Donev: But first make this the active menu
-     */
-    if( menu->Destroy )
-    {
-        SFG_Menu *activeMenu=fgStructure.CurrentMenu;
-        fgStructure.CurrentMenu = menu;
-        menu->Destroy( );
-        fgStructure.CurrentMenu = activeMenu;
-    }
-
-    /*
-     * Now we are pretty sure the menu is not used anywhere
-     * and that we can remove all of its entries
-     */
-    while( menu->Entries.First )
-    {
-        SFG_MenuEntry *entry = ( SFG_MenuEntry * ) menu->Entries.First;
-
-        fgListRemove( &menu->Entries, &entry->Node );
-
-        if( entry->Text )
-            free( entry->Text );
-        entry->Text = NULL;
-
-        free( entry );
-    }
-
-    if( fgStructure.CurrentWindow == menu->Window )
-        fgSetWindow( NULL );
-    fgDestroyWindow( menu->Window );
-    fgListRemove( &fgStructure.Menus, &menu->Node );
-    if( fgStructure.CurrentMenu == menu )
-        fgStructure.CurrentMenu = NULL;
-
-    free( menu );
-}
-
-/*
- * This function should be called on glutInit(). It will prepare the internal
- * structure of freeglut to be used in the application. The structure will be
- * destroyed using fgDestroyStructure() on glutMainLoop() return. In that
- * case further use of freeglut should be preceeded with a glutInit() call.
- */
-void fgCreateStructure( void )
-{
-    /*
-     * We will be needing two lists: the first containing windows,
-     * and the second containing the user-defined menus.
-     * Also, no current window/menu is set, as none has been created yet.
-     */
-
-    fgListInit(&fgStructure.Windows);
-    fgListInit(&fgStructure.Menus);
-    fgListInit(&fgStructure.WindowsToDestroy);
-
-    fgStructure.CurrentWindow = NULL;
-    fgStructure.CurrentMenu = NULL;
-    fgStructure.MenuContext = NULL;
-    fgStructure.GameModeWindow = NULL;
-    fgStructure.WindowID = 0;
-    fgStructure.MenuID = 0;
-}
-
-/*
- * This function is automatically called on glutMainLoop() return.
- * It should deallocate and destroy all remnants of previous
- * glutInit()-enforced structure initialization...
- */
-void fgDestroyStructure( void )
-{
-    /* Clean up the WindowsToDestroy list. */
-    fgCloseWindows( );
-
-    /* Make sure all windows and menus have been deallocated */
-    while( fgStructure.Menus.First )
-        fgDestroyMenu( ( SFG_Menu * )fgStructure.Menus.First );
-
-    while( fgStructure.Windows.First )
-        fgDestroyWindow( ( SFG_Window * )fgStructure.Windows.First );
-}
-
-/*
- * Helper function to enumerate through all registered top-level windows
- */
-void fgEnumWindows( FGCBenumerator enumCallback, SFG_Enumerator* enumerator )
-{
-    SFG_Window *window;
-
-    FREEGLUT_INTERNAL_ERROR_EXIT ( enumCallback && enumerator,
-                                   "Enumerator or callback missing from window enumerator call",
-                                   "fgEnumWindows" );
-
-    /* Check every of the top-level windows */
-    for( window = ( SFG_Window * )fgStructure.Windows.First;
-         window;
-         window = ( SFG_Window * )window->Node.Next )
-    {
-        enumCallback( window, enumerator );
-        if( enumerator->found )
-            return;
-    }
-}
-
-/*
- * Helper function to enumerate through all a window's subwindows
- * (single level descent)
- */
-void fgEnumSubWindows( SFG_Window* window, FGCBenumerator enumCallback,
-                       SFG_Enumerator* enumerator )
-{
-    SFG_Window *child;
-
-    FREEGLUT_INTERNAL_ERROR_EXIT ( enumCallback && enumerator,
-                                   "Enumerator or callback missing from subwindow enumerator call",
-                                   "fgEnumSubWindows" );
-    FREEGLUT_INTERNAL_ERROR_EXIT_IF_NOT_INITIALISED ( "Window Enumeration" );
-
-    for( child = ( SFG_Window * )window->Children.First;
-         child;
-         child = ( SFG_Window * )child->Node.Next )
-    {
-        enumCallback( child, enumerator );
-        if( enumerator->found )
-            return;
-    }
-}
-
-/*
- * A static helper function to look for a window given its handle
- */
-static void fghcbWindowByHandle( SFG_Window *window,
-                                 SFG_Enumerator *enumerator )
-{
-    if ( enumerator->found )
-        return;
-
-    /* Check the window's handle. Hope this works. Looks ugly. That's for sure. */
-    if( window->Window.Handle == (SFG_WindowHandleType) (enumerator->data) )
-    {
-        enumerator->found = GL_TRUE;
-        enumerator->data = window;
-
-        return;
-    }
-
-    /* Otherwise, check this window's children */
-    fgEnumSubWindows( window, fghcbWindowByHandle, enumerator );
-}
-
-/*
- * fgWindowByHandle returns a (SFG_Window *) value pointing to the
- * first window in the queue matching the specified window handle.
- * The function is defined in freeglut_structure.c file.
- */
-SFG_Window* fgWindowByHandle ( SFG_WindowHandleType hWindow )
-{
-    SFG_Enumerator enumerator;
-
-    /* This is easy and makes use of the windows enumeration defined above */
-    enumerator.found = GL_FALSE;
-    enumerator.data = (void *)hWindow;
-    fgEnumWindows( fghcbWindowByHandle, &enumerator );
-
-    if( enumerator.found )
-        return( SFG_Window *) enumerator.data;
-    return NULL;
-}
-
-/*
- * A static helper function to look for a window given its ID
- */
-static void fghcbWindowByID( SFG_Window *window, SFG_Enumerator *enumerator )
-{
-    /* Make sure we do not overwrite our precious results... */
-    if( enumerator->found )
-        return;
-
-    /* Check the window's handle. Hope this works. Looks ugly. That's for sure. */
-    if( window->ID == *( int *)(enumerator->data) )
-    {
-        enumerator->found = GL_TRUE;
-        enumerator->data = window;
-
-        return;
-    }
-
-    /* Otherwise, check this window's children */
-    fgEnumSubWindows( window, fghcbWindowByID, enumerator );
-}
-
-/*
- * This function is similiar to the previous one, except it is
- * looking for a specified (sub)window identifier. The function
- * is defined in freeglut_structure.c file.
- */
-SFG_Window* fgWindowByID( int windowID )
-{
-    SFG_Enumerator enumerator;
-
-    /* Uses a method very similiar for fgWindowByHandle... */
-    enumerator.found = GL_FALSE;
-    enumerator.data = ( void * )&windowID;
-    fgEnumWindows( fghcbWindowByID, &enumerator );
-    if( enumerator.found )
-        return ( SFG_Window * )enumerator.data;
-    return NULL;
-}
-
-/*
- * Looks up a menu given its ID. This is easier that fgWindowByXXX
- * as all menus are placed in one doubly linked list...
- */
-SFG_Menu* fgMenuByID( int menuID )
-{
-    SFG_Menu *menu = NULL;
-
-    /* It's enough to check all entries in fgStructure.Menus... */
-    for( menu = (SFG_Menu *)fgStructure.Menus.First;
-         menu;
-         menu = (SFG_Menu *)menu->Node.Next )
-        if( menu->ID == menuID )
-            return menu;
-    return NULL;
-}
-
-/*
- * List functions...
- */
-void fgListInit(SFG_List *list)
-{
-    list->First = NULL;
-    list->Last = NULL;
-}
-
-void fgListAppend(SFG_List *list, SFG_Node *node)
-{
-    if ( list->Last )
-    {
-        SFG_Node *ln = (SFG_Node *) list->Last;
-        ln->Next = node;
-        node->Prev = ln;
-    }
-    else
-    {
-        node->Prev = NULL;
-        list->First = node;
-    }
-
-    node->Next = NULL;
-    list->Last = node;
-}
-
-void fgListRemove(SFG_List *list, SFG_Node *node)
-{
-    if( node->Next )
-        ( ( SFG_Node * )node->Next )->Prev = node->Prev;
-    if( node->Prev )
-        ( ( SFG_Node * )node->Prev )->Next = node->Next;
-    if( ( ( SFG_Node * )list->First ) == node )
-        list->First = node->Next;
-    if( ( ( SFG_Node * )list->Last ) == node )
-        list->Last = node->Prev;
-}
-
-int fgListLength(SFG_List *list)
-{
-    SFG_Node *node;
-    int length = 0;
-
-    for( node =( SFG_Node * )list->First;
-         node;
-         node = ( SFG_Node * )node->Next )
-        ++length;
-
-    return length;
-}
-
-
-void fgListInsert(SFG_List *list, SFG_Node *next, SFG_Node *node)
-{
-    SFG_Node *prev;
-
-    if( (node->Next = next) )
-    {
-        prev = next->Prev;
-        next->Prev = node;
-    }
-    else
-    {
-        prev = list->Last;
-        list->Last = node;
-    }
-
-    if( (node->Prev = prev) )
-        prev->Next = node;
-    else
-        list->First = node;
-}
-
-/*** END OF FILE ***/
diff --git a/src/freeglut_teapot.c b/src/freeglut_teapot.c
deleted file mode 100644 (file)
index 722bca6..0000000
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
- * freeglut_teapot.c
- *
- * Teapot(tm) rendering code.
- *
- * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.
- * Written by Pawel W. Olszta, <olszta@sourceforge.net>
- * Creation date: Fri Dec 24 1999
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/*
- * Original teapot code copyright follows:
- */
-
-/*
- * (c) Copyright 1993, Silicon Graphics, Inc.
- *
- * ALL RIGHTS RESERVED
- *
- * Permission to use, copy, modify, and distribute this software
- * for any purpose and without fee is hereby granted, provided
- * that the above copyright notice appear in all copies and that
- * both the copyright notice and this permission notice appear in
- * supporting documentation, and that the name of Silicon
- * Graphics, Inc. not be used in advertising or publicity
- * pertaining to distribution of the software without specific,
- * written prior permission.
- *
- * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU
- * "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR
- * OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF
- * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  IN NO
- * EVENT SHALL SILICON GRAPHICS, INC.  BE LIABLE TO YOU OR ANYONE
- * ELSE FOR ANY DIRECT, SPECIAL, INCIDENTAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER,
- * INCLUDING WITHOUT LIMITATION, LOSS OF PROFIT, LOSS OF USE,
- * SAVINGS OR REVENUE, OR THE CLAIMS OF THIRD PARTIES, WHETHER OR
- * NOT SILICON GRAPHICS, INC.  HAS BEEN ADVISED OF THE POSSIBILITY
- * OF SUCH LOSS, HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * ARISING OUT OF OR IN CONNECTION WITH THE POSSESSION, USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- *
- * US Government Users Restricted Rights
- *
- * Use, duplication, or disclosure by the Government is subject to
- * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph
- * (c)(1)(ii) of the Rights in Technical Data and Computer
- * Software clause at DFARS 252.227-7013 and/or in similar or
- * successor clauses in the FAR or the DOD or NASA FAR
- * Supplement.  Unpublished-- rights reserved under the copyright
- * laws of the United States.  Contractor/manufacturer is Silicon
- * Graphics, Inc., 2011 N.  Shoreline Blvd., Mountain View, CA
- * 94039-7311.
- *
- * OpenGL(TM) is a trademark of Silicon Graphics, Inc.
- */
-
-#include <GL/freeglut.h>
-#include "freeglut_internal.h"
-#include "freeglut_teapot_data.h"
-
-/* -- PRIVATE FUNCTIONS ---------------------------------------------------- */
-
-
-static void fghTeapot( GLint grid, GLdouble scale, GLenum type )
-{
-#if defined(_WIN32_WCE)
-               int i, numV=sizeof(strip_vertices)/4, numI=sizeof(strip_normals)/4;
-#else
-    double p[4][4][3], q[4][4][3], r[4][4][3], s[4][4][3];
-    long i, j, k, l;
-#endif
-
-    glPushAttrib( GL_ENABLE_BIT | GL_EVAL_BIT );
-    glEnable( GL_AUTO_NORMAL );
-    glEnable( GL_NORMALIZE );
-    glEnable( GL_MAP2_VERTEX_3 );
-    glEnable( GL_MAP2_TEXTURE_COORD_2 );
-
-    glPushMatrix();
-    glRotated( 270.0, 1.0, 0.0, 0.0 );
-    glScaled( 0.5 * scale, 0.5 * scale, 0.5 * scale );
-    glTranslated( 0.0, 0.0, -1.5 );
-
-#if defined(_WIN32_WCE)
-    glRotated( 90.0, 1.0, 0.0, 0.0 );
-    glBegin( GL_TRIANGLE_STRIP );
-
-    for( i = 0; i < numV-1; i++ )
-    {
-        int vidx = strip_vertices[i],
-            nidx = strip_normals[i];
-
-        if( vidx != -1 )
-        {
-            glNormal3fv( normals[nidx]  );
-            glVertex3fv( vertices[vidx] );
-        }
-        else
-        {
-            glEnd();
-            glBegin( GL_TRIANGLE_STRIP );
-        }
-    }
-
-    glEnd();
-#else
-    for (i = 0; i < 10; i++) {
-      for (j = 0; j < 4; j++) {
-        for (k = 0; k < 4; k++) {
-          for (l = 0; l < 3; l++) {
-            p[j][k][l] = cpdata[patchdata[i][j * 4 + k]][l];
-            q[j][k][l] = cpdata[patchdata[i][j * 4 + (3 - k)]][l];
-            if (l == 1)
-              q[j][k][l] *= -1.0;
-            if (i < 6) {
-              r[j][k][l] =
-                cpdata[patchdata[i][j * 4 + (3 - k)]][l];
-              if (l == 0)
-                r[j][k][l] *= -1.0;
-              s[j][k][l] = cpdata[patchdata[i][j * 4 + k]][l];
-              if (l == 0)
-                s[j][k][l] *= -1.0;
-              if (l == 1)
-                s[j][k][l] *= -1.0;
-            }
-          }
-        }
-      }
-
-      glMap2d(GL_MAP2_TEXTURE_COORD_2, 0.0, 1.0, 2, 2, 0.0, 1.0, 4, 2,
-        &tex[0][0][0]);
-      glMap2d(GL_MAP2_VERTEX_3, 0.0, 1.0, 3, 4, 0.0, 1.0, 12, 4,
-        &p[0][0][0]);
-      glMapGrid2d(grid, 0.0, 1.0, grid, 0.0, 1.0);
-      glEvalMesh2(type, 0, grid, 0, grid);
-      glMap2d(GL_MAP2_VERTEX_3, 0.0, 1.0, 3, 4, 0.0, 1.0, 12, 4,
-        &q[0][0][0]);
-      glEvalMesh2(type, 0, grid, 0, grid);
-      if (i < 6) {
-        glMap2d(GL_MAP2_VERTEX_3, 0.0, 1.0, 3, 4, 0.0, 1.0, 12, 4,
-          &r[0][0][0]);
-        glEvalMesh2(type, 0, grid, 0, grid);
-        glMap2d(GL_MAP2_VERTEX_3, 0.0, 1.0, 3, 4, 0.0, 1.0, 12, 4,
-          &s[0][0][0]);
-        glEvalMesh2(type, 0, grid, 0, grid);
-      }
-    }
-#endif  /* defined(_WIN32_WCE) */
-
-    glPopMatrix();
-    glPopAttrib();
-}
-
-
-/* -- INTERFACE FUNCTIONS -------------------------------------------------- */
-
-/*
- * Renders a beautiful wired teapot...
- */
-void FGAPIENTRY glutWireTeapot( GLdouble size )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutWireTeapot" );
-    /* We will use the general teapot rendering code */
-    fghTeapot( 10, size, GL_LINE );
-}
-
-/*
- * Renders a beautiful filled teapot...
- */
-void FGAPIENTRY glutSolidTeapot( GLdouble size )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSolidTeapot" );
-    /* We will use the general teapot rendering code */
-    fghTeapot( 7, size, GL_FILL );
-}
-
-/*** END OF FILE ***/
-
-
-
-
-
diff --git a/src/freeglut_teapot_data.h b/src/freeglut_teapot_data.h
deleted file mode 100644 (file)
index 3bf83e1..0000000
+++ /dev/null
@@ -1,2429 +0,0 @@
-/*
- * freeglut_teapot_data.h
- *
- * The freeglut library teapot data include file.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-#ifndef  FREEGLUT_TEAPOT_DATA_H
-#define  FREEGLUT_TEAPOT_DATA_H
-
-#if defined(_WIN32_WCE)
-/*
- * Submitted through the kind offices of Daniel Wagner (daniel@ims.tuwien.ac.at)
- */
-
-/* 530 vertices */
-
-const int numVertices = 530;
-const float vertices[530][3] =  {
-2.1f, 3.6f, 0.0f, 
-2.071f, 3.711f, 0.0f, 
-2.105f, 3.748f, 0.0f, 
-2.174f, 3.711f, 0.0f, 
-2.25f, 3.6f, 0.0f, 
-1.937f, 3.6f, 0.8242f, 
-1.91f, 3.711f, 0.8128f, 
-1.942f, 3.748f, 0.8261f, 
-2.005f, 3.711f, 0.8532f, 
-2.076f, 3.6f, 0.8831f, 
-1.491f, 3.6f, 1.491f, 
-1.47f, 3.711f, 1.47f, 
-1.494f, 3.748f, 1.494f, 
-1.543f, 3.711f, 1.543f, 
-1.597f, 3.6f, 1.597f, 
-0.8242f, 3.6f, 1.937f, 
-0.8128f, 3.711f, 1.91f, 
-0.8261f, 3.748f, 1.942f, 
-0.8532f, 3.711f, 2.005f, 
-0.8831f, 3.6f, 2.076f, 
-0.0f, 3.6f, 2.1f, 
-0.0f, 3.711f, 2.071f, 
-0.0f, 3.748f, 2.105f, 
-0.0f, 3.711f, 2.174f, 
-0.0f, 3.6f, 2.25f, 
--0.8812f, 3.6f, 1.937f, 
--0.8368f, 3.711f, 1.91f, 
--0.8332f, 3.748f, 1.942f, 
--0.8541f, 3.711f, 2.005f, 
--0.8831f, 3.6f, 2.076f, 
--1.542f, 3.6f, 1.491f, 
--1.492f, 3.711f, 1.47f, 
--1.501f, 3.748f, 1.494f, 
--1.544f, 3.711f, 1.543f, 
--1.597f, 3.6f, 1.597f, 
--1.956f, 3.6f, 0.8242f, 
--1.918f, 3.711f, 0.8128f, 
--1.944f, 3.748f, 0.8261f, 
--2.006f, 3.711f, 0.8532f, 
--2.076f, 3.6f, 0.8831f, 
--2.1f, 3.6f, 0.0f, 
--2.071f, 3.711f, 0.0f, 
--2.105f, 3.748f, 0.0f, 
--2.174f, 3.711f, 0.0f, 
--2.25f, 3.6f, 0.0f, 
--1.937f, 3.6f, -0.8242f, 
--1.91f, 3.711f, -0.8128f, 
--1.942f, 3.748f, -0.8261f, 
--2.005f, 3.711f, -0.8532f, 
--2.076f, 3.6f, -0.8831f, 
--1.491f, 3.6f, -1.491f, 
--1.47f, 3.711f, -1.47f, 
--1.494f, 3.748f, -1.494f, 
--1.543f, 3.711f, -1.543f, 
--1.597f, 3.6f, -1.597f, 
--0.8242f, 3.6f, -1.937f, 
--0.8128f, 3.711f, -1.91f, 
--0.8261f, 3.748f, -1.942f, 
--0.8532f, 3.711f, -2.005f, 
--0.8831f, 3.6f, -2.076f, 
-0.0f, 3.6f, -2.1f, 
-0.0f, 3.711f, -2.071f, 
-0.0f, 3.748f, -2.105f, 
-0.0f, 3.711f, -2.174f, 
-0.0f, 3.6f, -2.25f, 
-0.8242f, 3.6f, -1.937f, 
-0.8128f, 3.711f, -1.91f, 
-0.8261f, 3.748f, -1.942f, 
-0.8532f, 3.711f, -2.005f, 
-0.8831f, 3.6f, -2.076f, 
-1.491f, 3.6f, -1.491f, 
-1.47f, 3.711f, -1.47f, 
-1.494f, 3.748f, -1.494f, 
-1.543f, 3.711f, -1.543f, 
-1.597f, 3.6f, -1.597f, 
-1.937f, 3.6f, -0.8242f, 
-1.91f, 3.711f, -0.8128f, 
-1.942f, 3.748f, -0.8261f, 
-2.005f, 3.711f, -0.8532f, 
-2.076f, 3.6f, -0.8831f, 
-2.525f, 3.011f, 0.0f, 
-2.766f, 2.433f, 0.0f, 
-2.936f, 1.876f, 0.0f, 
-3.0f, 1.35f, 0.0f, 
-2.33f, 3.011f, 0.9912f, 
-2.551f, 2.433f, 1.086f, 
-2.708f, 1.876f, 1.152f, 
-2.767f, 1.35f, 1.178f, 
-1.793f, 3.011f, 1.793f, 
-1.964f, 2.433f, 1.964f, 
-2.084f, 1.876f, 2.084f, 
-2.13f, 1.35f, 2.13f, 
-0.9912f, 3.011f, 2.33f, 
-1.086f, 2.433f, 2.551f, 
-1.152f, 1.876f, 2.708f, 
-1.178f, 1.35f, 2.767f, 
-0.0f, 3.011f, 2.525f, 
-0.0f, 2.433f, 2.766f, 
-0.0f, 1.876f, 2.936f, 
-0.0f, 1.35f, 3.0f, 
--0.9912f, 3.011f, 2.33f, 
--1.086f, 2.433f, 2.551f, 
--1.152f, 1.876f, 2.708f, 
--1.178f, 1.35f, 2.767f, 
--1.793f, 3.011f, 1.793f, 
--1.964f, 2.433f, 1.964f, 
--2.084f, 1.876f, 2.084f, 
--2.13f, 1.35f, 2.13f, 
--2.33f, 3.011f, 0.9912f, 
--2.551f, 2.433f, 1.086f, 
--2.708f, 1.876f, 1.152f, 
--2.767f, 1.35f, 1.178f, 
--2.525f, 3.011f, 0.0f, 
--2.766f, 2.433f, 0.0f, 
--2.936f, 1.876f, 0.0f, 
--3.0f, 1.35f, 0.0f, 
--2.33f, 3.011f, -0.9912f, 
--2.551f, 2.433f, -1.086f, 
--2.708f, 1.876f, -1.152f, 
--2.767f, 1.35f, -1.178f, 
--1.793f, 3.011f, -1.793f, 
--1.964f, 2.433f, -1.964f, 
--2.084f, 1.876f, -2.084f, 
--2.13f, 1.35f, -2.13f, 
--0.9912f, 3.011f, -2.33f, 
--1.086f, 2.433f, -2.551f, 
--1.152f, 1.876f, -2.708f, 
--1.178f, 1.35f, -2.767f, 
-0.0f, 3.011f, -2.525f, 
-0.0f, 2.433f, -2.766f, 
-0.0f, 1.876f, -2.936f, 
-0.0f, 1.35f, -3.0f, 
-0.9912f, 3.011f, -2.33f, 
-1.086f, 2.433f, -2.551f, 
-1.152f, 1.876f, -2.708f, 
-1.178f, 1.35f, -2.767f, 
-1.793f, 3.011f, -1.793f, 
-1.964f, 2.433f, -1.964f, 
-2.084f, 1.876f, -2.084f, 
-2.13f, 1.35f, -2.13f, 
-2.33f, 3.011f, -0.9912f, 
-2.551f, 2.433f, -1.086f, 
-2.708f, 1.876f, -1.152f, 
-2.767f, 1.35f, -1.178f, 
-2.883f, 0.9053f, 0.0f, 
-2.625f, 0.5766f, 0.0f, 
-2.367f, 0.3533f, 0.0f, 
-2.25f, 0.225f, 0.0f, 
-2.659f, 0.9053f, 1.132f, 
-2.422f, 0.5766f, 1.03f, 
-2.184f, 0.3533f, 0.9291f, 
-2.076f, 0.225f, 0.8831f, 
-2.047f, 0.9053f, 2.047f, 
-1.864f, 0.5766f, 1.864f, 
-1.681f, 0.3533f, 1.681f, 
-1.597f, 0.225f, 1.597f, 
-1.132f, 0.9053f, 2.659f, 
-1.03f, 0.5766f, 2.422f, 
-0.9291f, 0.3533f, 2.184f, 
-0.8831f, 0.225f, 2.076f, 
-0.0f, 0.9053f, 2.883f, 
-0.0f, 0.5766f, 2.625f, 
-0.0f, 0.3533f, 2.367f, 
-0.0f, 0.225f, 2.25f, 
--1.132f, 0.9053f, 2.659f, 
--1.03f, 0.5766f, 2.422f, 
--0.9291f, 0.3533f, 2.184f, 
--0.8831f, 0.225f, 2.076f, 
--2.047f, 0.9053f, 2.047f, 
--1.864f, 0.5766f, 1.864f, 
--1.681f, 0.3533f, 1.681f, 
--1.597f, 0.225f, 1.597f, 
--2.659f, 0.9053f, 1.132f, 
--2.422f, 0.5766f, 1.03f, 
--2.184f, 0.3533f, 0.9291f, 
--2.076f, 0.225f, 0.8831f, 
--2.883f, 0.9053f, 0.0f, 
--2.625f, 0.5766f, 0.0f, 
--2.367f, 0.3533f, 0.0f, 
--2.25f, 0.225f, 0.0f, 
--2.659f, 0.9053f, -1.132f, 
--2.422f, 0.5766f, -1.03f, 
--2.184f, 0.3533f, -0.9291f, 
--2.076f, 0.225f, -0.8831f, 
--2.047f, 0.9053f, -2.047f, 
--1.864f, 0.5766f, -1.864f, 
--1.681f, 0.3533f, -1.681f, 
--1.597f, 0.225f, -1.597f, 
--1.132f, 0.9053f, -2.659f, 
--1.03f, 0.5766f, -2.422f, 
--0.9291f, 0.3533f, -2.184f, 
--0.8831f, 0.225f, -2.076f, 
-0.0f, 0.9053f, -2.883f, 
-0.0f, 0.5766f, -2.625f, 
-0.0f, 0.3533f, -2.367f, 
-0.0f, 0.225f, -2.25f, 
-1.132f, 0.9053f, -2.659f, 
-1.03f, 0.5766f, -2.422f, 
-0.9291f, 0.3533f, -2.184f, 
-0.8831f, 0.225f, -2.076f, 
-2.047f, 0.9053f, -2.047f, 
-1.864f, 0.5766f, -1.864f, 
-1.681f, 0.3533f, -1.681f, 
-1.597f, 0.225f, -1.597f, 
-2.659f, 0.9053f, -1.132f, 
-2.422f, 0.5766f, -1.03f, 
-2.184f, 0.3533f, -0.9291f, 
-2.076f, 0.225f, -0.8831f, 
-2.199f, 0.1424f, 0.0f, 
-1.927f, 0.07031f, 0.0f, 
-1.253f, 0.01934f, 0.0f, 
-0.0f, 0.0f, 0.0f, 
-2.029f, 0.1424f, 0.8631f, 
-1.777f, 0.07031f, 0.7562f, 
-1.156f, 0.01934f, 0.4919f, 
-1.561f, 0.1424f, 1.561f, 
-1.368f, 0.07031f, 1.368f, 
-0.8899f, 0.01934f, 0.8899f, 
-0.8631f, 0.1424f, 2.029f, 
-0.7562f, 0.07031f, 1.777f, 
-0.4919f, 0.01934f, 1.156f, 
-0.0f, 0.1424f, 2.199f, 
-0.0f, 0.07031f, 1.927f, 
-0.0f, 0.01934f, 1.253f, 
--0.8631f, 0.1424f, 2.029f, 
--0.7562f, 0.07031f, 1.777f, 
--0.4919f, 0.01934f, 1.156f, 
--1.561f, 0.1424f, 1.561f, 
--1.368f, 0.07031f, 1.368f, 
--0.8899f, 0.01934f, 0.8899f, 
--2.029f, 0.1424f, 0.8631f, 
--1.777f, 0.07031f, 0.7562f, 
--1.156f, 0.01934f, 0.4919f, 
--2.199f, 0.1424f, 0.0f, 
--1.927f, 0.07031f, 0.0f, 
--1.253f, 0.01934f, 0.0f, 
--2.029f, 0.1424f, -0.8631f, 
--1.777f, 0.07031f, -0.7562f, 
--1.156f, 0.01934f, -0.4919f, 
--1.561f, 0.1424f, -1.561f, 
--1.368f, 0.07031f, -1.368f, 
--0.8899f, 0.01934f, -0.8899f, 
--0.8631f, 0.1424f, -2.029f, 
--0.7562f, 0.07031f, -1.777f, 
--0.4919f, 0.01934f, -1.156f, 
-0.0f, 0.1424f, -2.199f, 
-0.0f, 0.07031f, -1.927f, 
-0.0f, 0.01934f, -1.253f, 
-0.8631f, 0.1424f, -2.029f, 
-0.7562f, 0.07031f, -1.777f, 
-0.4919f, 0.01934f, -1.156f, 
-1.561f, 0.1424f, -1.561f, 
-1.368f, 0.07031f, -1.368f, 
-0.8899f, 0.01934f, -0.8899f, 
-2.029f, 0.1424f, -0.8631f, 
-1.777f, 0.07031f, -0.7562f, 
-1.156f, 0.01934f, -0.4919f, 
--2.4f, 3.038f, 0.0f, 
--3.101f, 3.032f, 0.0f, 
--3.619f, 2.995f, 0.0f, 
--3.94f, 2.895f, 0.0f, 
--4.05f, 2.7f, 0.0f, 
--2.377f, 3.09f, 0.2531f, 
--3.122f, 3.084f, 0.2531f, 
--3.669f, 3.041f, 0.2531f, 
--4.005f, 2.926f, 0.2531f, 
--4.12f, 2.7f, 0.2531f, 
--2.325f, 3.206f, 0.3375f, 
--3.168f, 3.198f, 0.3375f, 
--3.778f, 3.143f, 0.3375f, 
--4.15f, 2.993f, 0.3375f, 
--4.275f, 2.7f, 0.3375f, 
--2.273f, 3.322f, 0.2531f, 
--3.214f, 3.313f, 0.2531f, 
--3.888f, 3.244f, 0.2531f, 
--4.294f, 3.06f, 0.2531f, 
--4.43f, 2.7f, 0.2531f, 
--2.25f, 3.375f, 0.0f, 
--3.234f, 3.364f, 0.0f, 
--3.938f, 3.291f, 0.0f, 
--4.359f, 3.09f, 0.0f, 
--4.5f, 2.7f, 0.0f, 
--2.273f, 3.322f, -0.2531f, 
--3.214f, 3.313f, -0.2531f, 
--3.888f, 3.244f, -0.2531f, 
--4.294f, 3.06f, -0.2531f, 
--4.43f, 2.7f, -0.2531f, 
--2.325f, 3.206f, -0.3375f, 
--3.168f, 3.198f, -0.3375f, 
--3.778f, 3.143f, -0.3375f, 
--4.15f, 2.993f, -0.3375f, 
--4.275f, 2.7f, -0.3375f, 
--2.377f, 3.09f, -0.2531f, 
--3.122f, 3.084f, -0.2531f, 
--3.669f, 3.041f, -0.2531f, 
--4.005f, 2.926f, -0.2531f, 
--4.12f, 2.7f, -0.2531f, 
--3.991f, 2.394f, 0.0f, 
--3.806f, 2.025f, 0.0f, 
--3.48f, 1.656f, 0.0f, 
--3.0f, 1.35f, 0.0f, 
--4.055f, 2.365f, 0.2531f, 
--3.852f, 1.98f, 0.2531f, 
--3.496f, 1.6f, 0.2531f, 
--2.977f, 1.28f, 0.2531f, 
--4.196f, 2.3f, 0.3375f, 
--3.952f, 1.881f, 0.3375f, 
--3.531f, 1.478f, 0.3375f, 
--2.925f, 1.125f, 0.3375f, 
--4.336f, 2.235f, 0.2531f, 
--4.051f, 1.782f, 0.2531f, 
--3.566f, 1.356f, 0.2531f, 
--2.873f, 0.9703f, 0.2531f, 
--4.4f, 2.205f, 0.0f, 
--4.097f, 1.737f, 0.0f, 
--3.582f, 1.3f, 0.0f, 
--2.85f, 0.9f, 0.0f, 
--4.336f, 2.235f, -0.2531f, 
--4.051f, 1.782f, -0.2531f, 
--3.566f, 1.356f, -0.2531f, 
--2.873f, 0.9703f, -0.2531f, 
--4.196f, 2.3f, -0.3375f, 
--3.952f, 1.881f, -0.3375f, 
--3.531f, 1.478f, -0.3375f, 
--2.925f, 1.125f, -0.3375f, 
--4.055f, 2.365f, -0.2531f, 
--3.852f, 1.98f, -0.2531f, 
--3.496f, 1.6f, -0.2531f, 
--2.977f, 1.28f, -0.2531f, 
-2.55f, 2.137f, 0.0f, 
-3.27f, 2.303f, 0.0f, 
-3.581f, 2.7f, 0.0f, 
-3.752f, 3.182f, 0.0f, 
-4.05f, 3.6f, 0.0f, 
-2.55f, 1.944f, 0.5569f, 
-3.324f, 2.159f, 0.5028f, 
-3.652f, 2.617f, 0.3839f, 
-3.838f, 3.151f, 0.265f, 
-4.191f, 3.6f, 0.2109f, 
-2.55f, 1.519f, 0.7425f, 
-3.445f, 1.844f, 0.6704f, 
-3.806f, 2.433f, 0.5119f, 
-4.027f, 3.085f, 0.3533f, 
-4.5f, 3.6f, 0.2813f, 
-2.55f, 1.093f, 0.5569f, 
-3.566f, 1.529f, 0.5028f, 
-3.961f, 2.249f, 0.3839f, 
-4.215f, 3.018f, 0.265f, 
-4.809f, 3.6f, 0.2109f, 
-2.55f, 0.9f, 0.0f, 
-3.621f, 1.385f, 0.0f, 
-4.031f, 2.166f, 0.0f, 
-4.301f, 2.988f, 0.0f, 
-4.95f, 3.6f, 0.0f, 
-2.55f, 1.093f, -0.5569f, 
-3.566f, 1.529f, -0.5028f, 
-3.961f, 2.249f, -0.3839f, 
-4.215f, 3.018f, -0.265f, 
-4.809f, 3.6f, -0.2109f, 
-2.55f, 1.519f, -0.7425f, 
-3.445f, 1.844f, -0.6704f, 
-3.806f, 2.433f, -0.5119f, 
-4.027f, 3.085f, -0.3533f, 
-4.5f, 3.6f, -0.2813f, 
-2.55f, 1.944f, -0.5569f, 
-3.324f, 2.159f, -0.5028f, 
-3.652f, 2.617f, -0.3839f, 
-3.838f, 3.151f, -0.265f, 
-4.191f, 3.6f, -0.2109f, 
-4.158f, 3.663f, 0.0f, 
-4.238f, 3.684f, 0.0f, 
-4.261f, 3.663f, 0.0f, 
-4.2f, 3.6f, 0.0f, 
-4.308f, 3.666f, 0.1978f, 
-4.379f, 3.689f, 0.1687f, 
-4.381f, 3.668f, 0.1397f, 
-4.294f, 3.6f, 0.1266f, 
-4.64f, 3.673f, 0.2637f, 
-4.69f, 3.7f, 0.225f, 
-4.645f, 3.677f, 0.1863f, 
-4.5f, 3.6f, 0.1688f, 
-4.971f, 3.68f, 0.1978f, 
-5.001f, 3.711f, 0.1687f, 
-4.909f, 3.687f, 0.1397f, 
-4.706f, 3.6f, 0.1266f, 
-5.122f, 3.683f, 0.0f, 
-5.142f, 3.716f, 0.0f, 
-5.029f, 3.691f, 0.0f, 
-4.8f, 3.6f, 0.0f, 
-4.971f, 3.68f, -0.1978f, 
-5.001f, 3.711f, -0.1687f, 
-4.909f, 3.687f, -0.1397f, 
-4.706f, 3.6f, -0.1266f, 
-4.64f, 3.673f, -0.2637f, 
-4.69f, 3.7f, -0.225f, 
-4.645f, 3.677f, -0.1863f, 
-4.5f, 3.6f, -0.1688f, 
-4.308f, 3.666f, -0.1978f, 
-4.379f, 3.689f, -0.1687f, 
-4.381f, 3.668f, -0.1397f, 
-4.294f, 3.6f, -0.1266f, 
-0.0f, 4.725f, 0.0f, 
-0.5109f, 4.651f, 0.0f, 
-0.4875f, 4.472f, 0.0f, 
-0.2953f, 4.25f, 0.0f, 
-0.3f, 4.05f, 0.0f, 
-0.4715f, 4.651f, 0.2011f, 
-0.4499f, 4.472f, 0.1918f, 
-0.2725f, 4.25f, 0.1161f, 
-0.2768f, 4.05f, 0.1178f, 
-0.3632f, 4.651f, 0.3632f, 
-0.3465f, 4.472f, 0.3465f, 
-0.2098f, 4.25f, 0.2098f, 
-0.213f, 4.05f, 0.213f, 
-0.2011f, 4.651f, 0.4715f, 
-0.1918f, 4.472f, 0.4499f, 
-0.1161f, 4.25f, 0.2725f, 
-0.1178f, 4.05f, 0.2768f, 
-0.0f, 4.651f, 0.5109f, 
-0.0f, 4.472f, 0.4875f, 
-0.0f, 4.25f, 0.2953f, 
-0.0f, 4.05f, 0.3f, 
--0.2011f, 4.651f, 0.4715f, 
--0.1918f, 4.472f, 0.4499f, 
--0.1161f, 4.25f, 0.2725f, 
--0.1178f, 4.05f, 0.2768f, 
--0.3632f, 4.651f, 0.3632f, 
--0.3465f, 4.472f, 0.3465f, 
--0.2098f, 4.25f, 0.2098f, 
--0.213f, 4.05f, 0.213f, 
--0.4715f, 4.651f, 0.2011f, 
--0.4499f, 4.472f, 0.1918f, 
--0.2725f, 4.25f, 0.1161f, 
--0.2768f, 4.05f, 0.1178f, 
--0.5109f, 4.651f, 0.0f, 
--0.4875f, 4.472f, 0.0f, 
--0.2953f, 4.25f, 0.0f, 
--0.3f, 4.05f, 0.0f, 
--0.4715f, 4.651f, -0.2011f, 
--0.4499f, 4.472f, -0.1918f, 
--0.2725f, 4.25f, -0.1161f, 
--0.2768f, 4.05f, -0.1178f, 
--0.3632f, 4.651f, -0.3632f, 
--0.3465f, 4.472f, -0.3465f, 
--0.2098f, 4.25f, -0.2098f, 
--0.213f, 4.05f, -0.213f, 
--0.2011f, 4.651f, -0.4715f, 
--0.1918f, 4.472f, -0.4499f, 
--0.1161f, 4.25f, -0.2725f, 
--0.1178f, 4.05f, -0.2768f, 
-0.0f, 4.651f, -0.5109f, 
-0.0f, 4.472f, -0.4875f, 
-0.0f, 4.25f, -0.2953f, 
-0.0f, 4.05f, -0.3f, 
-0.2011f, 4.651f, -0.4715f, 
-0.1918f, 4.472f, -0.4499f, 
-0.1161f, 4.25f, -0.2725f, 
-0.1178f, 4.05f, -0.2768f, 
-0.3632f, 4.651f, -0.3632f, 
-0.3465f, 4.472f, -0.3465f, 
-0.2098f, 4.25f, -0.2098f, 
-0.213f, 4.05f, -0.213f, 
-0.4715f, 4.651f, -0.2011f, 
-0.4499f, 4.472f, -0.1918f, 
-0.2725f, 4.25f, -0.1161f, 
-0.2768f, 4.05f, -0.1178f, 
-0.6844f, 3.916f, 0.0f, 
-1.237f, 3.825f, 0.0f, 
-1.734f, 3.734f, 0.0f, 
-1.95f, 3.6f, 0.0f, 
-0.6313f, 3.916f, 0.2686f, 
-1.142f, 3.825f, 0.4857f, 
-1.6f, 3.734f, 0.6807f, 
-1.799f, 3.6f, 0.7654f, 
-0.4859f, 3.916f, 0.4859f, 
-0.8786f, 3.825f, 0.8786f, 
-1.231f, 3.734f, 1.231f, 
-1.385f, 3.6f, 1.385f, 
-0.2686f, 3.916f, 0.6313f, 
-0.4857f, 3.825f, 1.142f, 
-0.6807f, 3.734f, 1.6f, 
-0.7654f, 3.6f, 1.799f, 
-0.0f, 3.916f, 0.6844f, 
-0.0f, 3.825f, 1.237f, 
-0.0f, 3.734f, 1.734f, 
-0.0f, 3.6f, 1.95f, 
--0.2686f, 3.916f, 0.6313f, 
--0.4857f, 3.825f, 1.142f, 
--0.6807f, 3.734f, 1.6f, 
--0.7654f, 3.6f, 1.799f, 
--0.4859f, 3.916f, 0.4859f, 
--0.8786f, 3.825f, 0.8786f, 
--1.231f, 3.734f, 1.231f, 
--1.385f, 3.6f, 1.385f, 
--0.6313f, 3.916f, 0.2686f, 
--1.142f, 3.825f, 0.4857f, 
--1.6f, 3.734f, 0.6807f, 
--1.799f, 3.6f, 0.7654f, 
--0.6844f, 3.916f, 0.0f, 
--1.237f, 3.825f, 0.0f, 
--1.734f, 3.734f, 0.0f, 
--1.95f, 3.6f, 0.0f, 
--0.6313f, 3.916f, -0.2686f, 
--1.142f, 3.825f, -0.4857f, 
--1.6f, 3.734f, -0.6807f, 
--1.799f, 3.6f, -0.7654f, 
--0.4859f, 3.916f, -0.4859f, 
--0.8786f, 3.825f, -0.8786f, 
--1.231f, 3.734f, -1.231f, 
--1.385f, 3.6f, -1.385f, 
--0.2686f, 3.916f, -0.6313f, 
--0.4857f, 3.825f, -1.142f, 
--0.6807f, 3.734f, -1.6f, 
--0.7654f, 3.6f, -1.799f, 
-0.0f, 3.916f, -0.6844f, 
-0.0f, 3.825f, -1.237f, 
-0.0f, 3.734f, -1.734f, 
-0.0f, 3.6f, -1.95f, 
-0.2686f, 3.916f, -0.6313f, 
-0.4857f, 3.825f, -1.142f, 
-0.6807f, 3.734f, -1.6f, 
-0.7654f, 3.6f, -1.799f, 
-0.4859f, 3.916f, -0.4859f, 
-0.8786f, 3.825f, -0.8786f, 
-1.231f, 3.734f, -1.231f, 
-1.385f, 3.6f, -1.385f, 
-0.6313f, 3.916f, -0.2686f, 
-1.142f, 3.825f, -0.4857f, 
-1.6f, 3.734f, -0.6807f, 
-1.799f, 3.6f, -0.7654f
-};
-
-
-/* 530 normals */
-const int numNormals = 530;
-const float normals[530][3] = {
-0.0486f, -0.9986f, 0.0168f, 
-0.9976f, -0.0678f, -0.0008f, 
--0.233f, 0.8502f, -0.4719f, 
--0.2299f, 0.9679f, 0.1004f, 
--0.1648f, 0.985f, 0.0501f, 
--0.0117f, 0.7461f, 0.6656f, 
--0.0888f, 0.9692f, 0.2294f, 
-0.6449f, -0.7172f, -0.2637f, 
--0.066f, 0.9851f, 0.1583f, 
--0.6585f, -0.342f, -0.6703f, 
--0.293f, 0.9558f, 0.0209f, 
-0.179f, 0.9825f, -0.0513f, 
--0.0094f, 0.903f, 0.4295f, 
--0.0059f, -0.986f, -0.1662f, 
--0.7355f, 0.6774f, -0.0026f, 
--0.997f, 0.0763f, 0.0019f, 
--0.1478f, 0.9333f, 0.3271f, 
--0.3014f, -0.6034f, -0.7382f, 
--0.7048f, -0.0681f, 0.706f, 
--0.3361f, 0.9332f, 0.1263f, 
-0.3709f, 0.1524f, -0.916f, 
--0.3399f, -0.4121f, 0.8453f, 
-0.1921f, 0.9724f, -0.1316f, 
--0.2671f, 0.7429f, 0.6137f, 
-0.0888f, 0.9692f, -0.2294f, 
-0.066f, 0.9851f, -0.1583f, 
-0.9411f, 0.338f, 0.001f, 
-0.8666f, -0.2559f, 0.4282f, 
--0.8029f, 0.4968f, 0.3293f, 
--0.0008f, -0.0678f, -0.9976f, 
--0.8453f, -0.4121f, -0.3399f, 
--0.4801f, -0.8741f, 0.0733f, 
-0.6355f, -0.772f, 0.0006f, 
--0.9215f, -0.0678f, 0.3822f, 
--0.6698f, -0.6907f, -0.2723f, 
-0.3734f, 0.876f, -0.3051f, 
-0.3548f, -0.4118f, 0.8393f, 
--0.3629f, 0.2429f, 0.8995f, 
-0.9033f, 0.2079f, 0.375f, 
--0.2824f, 0.5939f, 0.7532f, 
-0.8938f, 0.4452f, 0.0532f, 
-0.1478f, 0.9333f, -0.3271f, 
-0.0085f, -0.0031f, -0.9999f, 
-0.3595f, 0.933f, 0.0115f, 
-0.8995f, 0.2429f, 0.3629f, 
-0.7048f, -0.0681f, -0.706f, 
--0.6428f, -0.7172f, -0.2688f, 
-0.6366f, -0.447f, 0.6283f, 
--0.1213f, -0.9861f, -0.1128f, 
-0.8003f, 0.4978f, 0.334f, 
-0.3361f, 0.9332f, -0.1263f, 
-0.3399f, -0.4121f, -0.8453f, 
--0.3909f, 0.4452f, 0.8055f, 
-0.0117f, 0.7462f, -0.6655f, 
-0.9215f, -0.0678f, -0.3822f, 
-0.3582f, -0.7656f, 0.5343f, 
--0.9782f, 0.2075f, -0.0011f, 
-0.2824f, 0.5939f, -0.7532f, 
-0.035f, -0.8413f, 0.5393f, 
--0.8044f, 0.5934f, 0.0262f, 
--0.1128f, -0.9861f, 0.1213f, 
-0.13f, -0.1396f, 0.9816f, 
-0.6644f, 0.3392f, 0.6659f, 
--0.0042f, -0.6898f, -0.7239f, 
--0.1587f, 0.9851f, 0.065f, 
--0.8719f, -0.3415f, 0.3508f, 
-0.6486f, 0.4756f, -0.5941f, 
--0.4991f, 0.8499f, -0.1684f, 
--0.3969f, 0.6342f, -0.6634f, 
-0.7041f, -0.3863f, -0.5956f, 
-0.3909f, 0.4452f, -0.8055f, 
--0.0391f, -0.0113f, 0.9991f, 
--0.3321f, 0.5936f, -0.733f, 
-0.8523f, -0.5219f, -0.0338f, 
-0.329f, 0.4978f, 0.8023f, 
-0.8044f, 0.5934f, -0.0262f, 
-0.1128f, -0.9861f, -0.1213f, 
-0.0178f, 0.9861f, -0.1651f, 
-0.3491f, 0.4045f, 0.8452f, 
--0.2727f, 0.8505f, 0.4496f, 
-0.065f, 0.9851f, 0.1587f, 
--0.0005f, 0.4037f, 0.9148f, 
--0.0077f, -0.4109f, -0.9116f, 
-0.5609f, -0.604f, 0.5661f, 
-0.8236f, 0.5668f, -0.0138f, 
-0.1587f, 0.9851f, -0.065f, 
-0.8719f, -0.3415f, -0.3508f, 
--0.7382f, -0.6034f, 0.3014f, 
-0.0346f, 0.8495f, 0.5263f, 
--0.4373f, -0.7921f, -0.4257f, 
--0.0532f, 0.4452f, 0.8938f, 
-0.0689f, -0.9861f, 0.1509f, 
--0.1509f, -0.9861f, 0.0689f, 
-0.7706f, -0.2424f, -0.5893f, 
--0.7543f, -0.6564f, 0.0105f, 
-0.0005f, 0.4037f, -0.9148f, 
--0.9116f, -0.4109f, 0.0077f, 
-0.0058f, -0.0438f, 0.999f, 
-0.1719f, 0.985f, 0.0005f, 
--0.1697f, 0.9693f, 0.1774f, 
-0.5874f, -0.5124f, 0.6263f, 
-0.7382f, -0.6034f, -0.3014f, 
--0.1518f, 0.985f, -0.081f, 
-0.646f, 0.4051f, 0.6468f, 
-0.334f, 0.4978f, -0.8003f, 
--0.7354f, -0.6034f, -0.3082f, 
--0.6919f, 0.2428f, -0.6798f, 
-0.0532f, 0.4452f, -0.8938f, 
-0.3547f, -0.3173f, 0.8794f, 
-0.9879f, -0.1547f, -0.0033f, 
--0.0462f, -0.9986f, 0.0223f, 
--0.6088f, 0.4806f, 0.6311f, 
--0.109f, -0.1969f, -0.9743f, 
-0.1509f, -0.9861f, -0.0689f, 
--0.0568f, 0.9983f, 0.0009f, 
-0.9074f, -0.3096f, -0.2839f, 
-0.8677f, 0.4969f, 0.0026f, 
--0.2723f, -0.6907f, 0.6698f, 
--0.4734f, -0.6798f, 0.5599f, 
-0.9116f, -0.4109f, -0.0077f, 
-0.1697f, 0.9693f, -0.1774f, 
-0.5875f, 0.5937f, 0.5497f, 
--0.3232f, 0.6846f, 0.6533f, 
--0.5078f, -0.6913f, 0.5139f, 
--0.4612f, 0.7474f, -0.478f, 
--0.2071f, -0.8049f, 0.556f, 
--0.6976f, -0.7164f, -0.0027f, 
--0.8697f, 0.3388f, 0.3587f, 
-0.0462f, -0.9986f, -0.0223f, 
-0.2723f, -0.6907f, -0.6698f, 
--0.829f, -0.4466f, -0.3365f, 
-0.9148f, 0.4037f, 0.0005f, 
--0.1583f, 0.9851f, -0.066f, 
-0.148f, 0.9838f, 0.1002f, 
--0.1717f, 0.985f, -0.0162f, 
--0.4282f, -0.2559f, 0.8666f, 
-0.3094f, -0.2556f, 0.9159f, 
-0.2803f, -0.6907f, 0.6665f, 
--0.6154f, 0.497f, 0.6117f, 
--0.0262f, 0.5934f, -0.8044f, 
-0.0286f, 0.1639f, -0.986f, 
--0.6924f, 0.2083f, 0.6907f, 
--0.0105f, 0.9975f, -0.0685f, 
-0.5078f, -0.6913f, -0.5139f, 
-0.2071f, -0.8049f, -0.556f, 
--0.4903f, -0.7178f, -0.4942f, 
--0.2637f, -0.7172f, -0.6449f, 
--0.3822f, -0.0678f, -0.9215f, 
-0.8697f, 0.3388f, -0.3587f, 
-0.2461f, -0.805f, 0.5397f, 
--0.2615f, 0.9334f, 0.2452f, 
-0.6187f, 0.747f, -0.243f, 
-0.0375f, -0.8401f, -0.5411f, 
-0.0054f, 0.9691f, 0.2464f, 
-0.3587f, 0.3388f, 0.8697f, 
-0.3993f, 0.6582f, -0.6381f, 
--0.3476f, -0.4464f, -0.8245f, 
-0.099f, 0.9692f, 0.2251f, 
--0.3666f, -0.3412f, 0.8655f, 
-0.0396f, 0.153f, -0.9874f, 
-0.0349f, 0.9969f, -0.0698f, 
-0.1096f, 0.985f, 0.1324f, 
--0.0578f, -0.9861f, 0.1556f, 
-0.4479f, -0.5145f, -0.7311f, 
-0.6924f, 0.2083f, -0.6907f, 
-0.6096f, 0.747f, 0.265f, 
--0.3508f, -0.3415f, -0.8719f, 
--0.6215f, 0.4454f, -0.6443f, 
--0.4942f, -0.7178f, 0.4903f, 
--0.9402f, -0.3403f, -0.0085f, 
-0.0056f, -0.0358f, 0.9993f, 
-0.2615f, 0.9334f, -0.2452f, 
--0.0024f, 0.0291f, -0.9995f, 
--0.2667f, 0.9637f, -0.001f, 
-0.0569f, -0.2712f, -0.9608f, 
-0.7463f, 0.254f, 0.615f, 
-0.5153f, 0.6516f, -0.5564f, 
-0.0223f, -0.9986f, 0.0462f, 
-0.3666f, -0.3412f, -0.8655f, 
-0.0578f, -0.9861f, -0.1556f, 
-0.6111f, 0.4984f, 0.6148f, 
--0.243f, 0.747f, -0.6187f, 
--0.0092f, 0.2338f, -0.9722f, 
-0.478f, 0.7474f, -0.4612f, 
--0.0058f, -0.4457f, -0.8951f, 
--0.4856f, -0.6774f, -0.5524f, 
-0.54f, 0.6414f, 0.5448f, 
--0.3365f, -0.4466f, 0.829f, 
--0.2257f, 0.795f, 0.5629f, 
-0.8055f, 0.4452f, 0.3909f, 
-0.3729f, 0.208f, 0.9042f, 
--0.727f, -0.2562f, 0.6369f, 
--0.0514f, -0.9986f, 0.0029f, 
-0.9159f, 0.1555f, -0.3699f, 
-0.0019f, -0.2377f, -0.9713f, 
-0.4942f, -0.7178f, -0.4903f, 
-0.6497f, -0.4127f, 0.6383f, 
-0.0089f, 0.0486f, -0.9987f, 
--0.0213f, 0.6301f, -0.7761f, 
--0.9269f, -0.3751f, 0.0038f, 
--0.1215f, 0.9852f, 0.1207f, 
--0.5856f, 0.5198f, 0.6218f, 
-0.8655f, -0.3412f, 0.3666f, 
--0.2464f, 0.9691f, 0.0054f, 
-0.0123f, 0.1386f, 0.9902f, 
-0.0179f, -0.0369f, 0.9991f, 
--0.1207f, 0.9852f, -0.1215f, 
--0.0081f, 0.5671f, 0.8235f, 
--0.8689f, 0.3387f, -0.3607f, 
-0.0062f, 0.0309f, -0.9995f, 
-0.3365f, -0.4466f, -0.829f, 
--0.3787f, 0.2424f, -0.8931f, 
--0.2904f, 0.4454f, -0.8468f, 
--0.8707f, 0.4915f, 0.0133f, 
-0.163f, -0.8182f, 0.5512f, 
-0.4337f, -0.8052f, 0.4041f, 
-0.0514f, -0.9986f, -0.0029f, 
--0.0084f, 0.1303f, 0.9914f, 
--0.706f, -0.0681f, -0.7048f, 
--0.556f, -0.8049f, -0.2071f, 
-0.8448f, 0.4045f, 0.3501f, 
-0.4259f, -0.5474f, 0.7203f, 
--0.6907f, 0.2083f, -0.6924f, 
-0.1215f, 0.9852f, -0.1207f, 
--0.1263f, 0.9332f, -0.3361f, 
-0.7711f, -0.0741f, -0.6323f, 
-0.2464f, 0.9691f, -0.0054f, 
-0.1774f, 0.9693f, 0.1697f, 
--0.9042f, 0.208f, 0.3729f, 
--0.8393f, -0.4118f, 0.3548f, 
-0.6888f, -0.7219f, -0.0648f, 
-0.1556f, -0.9861f, 0.0578f, 
-0.3271f, 0.9333f, 0.1478f, 
--0.0024f, 0.2379f, 0.9712f, 
--0.0026f, 0.4969f, 0.8677f, 
-0.0f, 1.0f, 0.0f, 
-0.1912f, -0.9815f, -0.0025f, 
--0.3762f, -0.6681f, 0.6418f, 
--0.7759f, 0.0432f, 0.6292f, 
--0.0208f, -0.8044f, -0.5936f, 
--0.2274f, 0.8822f, -0.4122f, 
-0.7532f, 0.5939f, 0.2824f, 
--0.9221f, -0.0681f, -0.3807f, 
--0.2198f, 0.8494f, 0.4796f, 
-0.0065f, -0.7656f, 0.6431f, 
--0.5876f, 0.4472f, -0.6742f, 
-0.7981f, -0.6024f, 0.0036f, 
--0.0383f, -0.9986f, -0.0341f, 
--0.6369f, -0.2562f, -0.727f, 
--0.5497f, 0.5937f, 0.5875f, 
-0.1084f, 0.9431f, 0.314f, 
-0.9042f, 0.208f, -0.3729f, 
--0.6659f, 0.3392f, 0.6644f, 
-0.8393f, -0.4118f, -0.3548f, 
-0.0029f, -0.9986f, 0.0514f, 
--0.9647f, -0.2552f, -0.0635f, 
--0.2294f, 0.9692f, -0.0888f, 
-0.0026f, 0.4969f, -0.8677f, 
-0.2452f, 0.9334f, 0.2615f, 
-0.5171f, -0.4876f, -0.7033f, 
--0.8951f, -0.4457f, 0.0058f, 
--0.5936f, -0.8044f, 0.0208f, 
-0.5642f, -0.5426f, -0.6222f, 
-0.5938f, 0.4451f, 0.6702f, 
-0.5497f, 0.5937f, -0.5875f, 
-0.6657f, 0.4653f, 0.5832f, 
-0.4857f, -0.6243f, 0.6117f, 
--0.0486f, -0.9986f, -0.0168f, 
--0.6468f, 0.4051f, 0.646f, 
-0.6659f, 0.3392f, -0.6644f, 
-0.1833f, 0.9735f, -0.1365f, 
-0.3955f, 0.8505f, 0.3465f, 
-0.5139f, -0.6913f, 0.5078f, 
-0.8023f, 0.4978f, -0.329f, 
--0.001f, 0.338f, 0.9411f, 
--0.2496f, 0.8321f, -0.4951f, 
-0.8951f, -0.4457f, -0.0058f, 
-0.233f, 0.8502f, 0.4719f, 
--0.0168f, -0.9986f, 0.0486f, 
-0.5936f, -0.8044f, -0.0208f, 
--0.05f, 0.3155f, 0.9475f, 
-0.6585f, -0.342f, 0.6703f, 
-0.4909f, -0.1864f, -0.8509f, 
--0.37f, 0.9238f, -0.0973f, 
-0.6468f, 0.4051f, -0.646f, 
-0.0059f, -0.986f, 0.1662f, 
--0.3724f, 0.9278f, -0.0202f, 
--0.3501f, 0.4045f, 0.8448f, 
--0.0425f, 0.8398f, -0.5411f, 
--0.1684f, 0.8499f, 0.4991f, 
--0.6665f, -0.6907f, 0.2803f, 
--0.2251f, 0.9692f, 0.099f, 
-0.9241f, -0.3816f, -0.0169f, 
-0.001f, 0.338f, -0.9411f, 
--0.9411f, 0.338f, -0.001f, 
--0.8666f, -0.2559f, -0.4282f, 
-0.0262f, 0.5183f, -0.8547f, 
-0.3014f, -0.6034f, 0.7382f, 
-0.0168f, -0.9986f, -0.0486f, 
--0.3548f, -0.4118f, -0.8393f, 
--0.6023f, -0.5297f, 0.5971f, 
--0.9033f, 0.2079f, -0.375f, 
--0.8938f, 0.4452f, -0.0532f, 
-0.6044f, 0.7397f, 0.2957f, 
-0.0008f, -0.0678f, 0.9976f, 
-0.7058f, 0.0906f, -0.7025f, 
-0.8453f, -0.4121f, 0.3399f, 
--0.3595f, 0.933f, -0.0115f, 
-0.6698f, -0.6907f, 0.2723f, 
--0.8995f, 0.2429f, -0.3629f, 
--0.6366f, -0.447f, -0.6283f, 
-0.3501f, 0.4045f, -0.8448f, 
--0.01f, -0.0605f, 0.9981f, 
--0.8003f, 0.4978f, -0.334f, 
-0.1684f, 0.8499f, -0.4991f, 
-0.6665f, -0.6907f, -0.2803f, 
-0.2251f, 0.9692f, -0.099f, 
--0.0036f, -0.6024f, 0.7981f, 
-0.6637f, -0.2967f, -0.6865f, 
--0.081f, 0.985f, 0.1518f, 
-0.0084f, 0.2423f, 0.9701f, 
-0.0071f, -0.9029f, -0.4296f, 
--0.8679f, 0.4966f, -0.0026f, 
-0.0123f, 0.5735f, 0.819f, 
--0.0005f, 0.985f, 0.1719f, 
-0.6428f, -0.7172f, 0.2688f, 
-0.6588f, -0.3366f, 0.6727f, 
-0.1213f, -0.9861f, 0.1128f, 
--0.8931f, 0.2424f, 0.3787f, 
--0.1662f, -0.986f, 0.0059f, 
-0.9994f, 0.0313f, 0.0095f, 
-0.762f, -0.146f, 0.6308f, 
--0.7731f, 0.0861f, -0.6283f, 
--0.6644f, 0.3392f, -0.6659f, 
--0.0027f, -0.7164f, 0.6976f, 
-0.0036f, -0.6024f, -0.7981f, 
-0.9782f, 0.2075f, 0.0011f, 
-0.0405f, -0.9991f, -0.0018f, 
-0.6882f, -0.703f, 0.179f, 
--0.0115f, 0.933f, 0.3595f, 
-0.0911f, 0.0518f, -0.9944f, 
-0.0005f, 0.985f, -0.1719f, 
-0.5337f, -0.5852f, -0.6104f, 
-0.0042f, -0.6898f, 0.7239f, 
-0.4863f, 0.2366f, 0.8411f, 
-0.4991f, 0.8499f, 0.1684f, 
--0.6543f, 0.7561f, 0.0071f, 
-0.265f, 0.747f, -0.6096f, 
--0.329f, 0.4978f, -0.8023f, 
-0.1662f, -0.986f, -0.0059f, 
--0.3491f, 0.4045f, -0.8452f, 
-0.3321f, 0.5936f, 0.733f, 
--0.065f, 0.9851f, -0.1587f, 
--0.6283f, -0.447f, 0.6366f, 
-0.0027f, -0.7164f, -0.6976f, 
--0.1316f, 0.6339f, 0.762f, 
--0.5609f, -0.604f, -0.5661f, 
--0.8452f, 0.4045f, 0.3491f, 
--0.5263f, 0.8495f, 0.0346f, 
-0.0115f, 0.933f, -0.3595f, 
--0.0346f, 0.8495f, -0.5263f, 
-0.0077f, -0.4109f, 0.9116f, 
-0.5758f, -0.8175f, -0.0017f, 
--0.0011f, 0.2075f, 0.9782f, 
--0.0689f, -0.9861f, -0.1509f, 
-0.2934f, -0.5928f, -0.7499f, 
-0.0724f, 0.1198f, -0.9901f, 
--0.7367f, -0.275f, -0.6176f, 
--0.3131f, 0.8154f, 0.4868f, 
--0.0114f, 0.0022f, 0.9999f, 
-0.6283f, -0.447f, -0.6366f, 
-0.8452f, 0.4045f, -0.3491f, 
-0.5263f, 0.8495f, -0.0346f, 
--0.6383f, -0.4127f, 0.6497f, 
--0.1719f, 0.985f, -0.0005f, 
--0.6703f, -0.342f, 0.6585f, 
--0.0085f, -0.3403f, 0.9402f, 
--0.646f, 0.4051f, -0.6468f, 
-0.0011f, 0.2075f, -0.9782f, 
--0.7216f, -0.3071f, 0.6204f, 
-0.0282f, 0.0023f, -0.9995f, 
--0.2483f, 0.6806f, -0.6892f, 
-0.1518f, 0.985f, 0.081f, 
-0.047f, 0.0466f, -0.9978f, 
-0.7354f, -0.6034f, 0.3082f, 
-0.6919f, 0.2428f, 0.6798f, 
-0.4086f, -0.3626f, -0.8375f, 
-0.6383f, -0.4127f, -0.6497f, 
--0.5875f, 0.5937f, -0.5497f, 
-0.6703f, -0.342f, -0.6585f, 
--0.8245f, -0.4464f, 0.3476f, 
-0.0085f, -0.3403f, -0.9402f, 
--0.0591f, -0.0663f, 0.996f, 
-0.0f, -1.0f, 0.0f, 
-0.4612f, 0.7474f, 0.478f, 
-0.6976f, -0.7164f, 0.0027f, 
--0.9148f, 0.4037f, -0.0005f, 
-0.173f, -0.8158f, -0.5518f, 
--0.3607f, 0.3387f, 0.8689f, 
-0.7836f, -0.2411f, 0.5724f, 
--0.1985f, 0.8026f, -0.5623f, 
--0.3094f, -0.2556f, -0.9159f, 
--0.2803f, -0.6907f, -0.6665f, 
-0.8245f, -0.4464f, -0.3476f, 
-0.829f, -0.4466f, 0.3365f, 
--0.4848f, 0.7385f, 0.4683f, 
-0.1583f, 0.9851f, 0.066f, 
--0.0077f, 0.7656f, -0.6432f, 
--0.0162f, 0.985f, 0.1717f, 
-0.1717f, 0.985f, 0.0162f, 
-0.0244f, 0.9805f, -0.1949f, 
--0.2461f, -0.805f, -0.5397f, 
-0.0262f, 0.5934f, 0.8044f, 
-0.142f, 0.1881f, 0.9718f, 
-0.1846f, 0.1002f, 0.9776f, 
-0.4903f, -0.7178f, 0.4942f, 
-0.2637f, -0.7172f, 0.6449f, 
-0.3822f, -0.0678f, 0.9215f, 
--0.0054f, 0.9691f, -0.2464f, 
-0.3607f, 0.3387f, -0.8689f, 
--0.3587f, 0.3388f, -0.8697f, 
--0.5694f, -0.8219f, 0.0081f, 
--0.1324f, 0.985f, 0.1096f, 
--0.099f, 0.9692f, -0.2251f, 
--0.6702f, 0.4451f, 0.5938f, 
-0.0077f, -0.9976f, 0.0684f, 
--0.5661f, -0.604f, 0.5609f, 
--0.1096f, 0.985f, -0.1324f, 
--0.6096f, 0.747f, -0.265f, 
--0.0015f, 0.0295f, -0.9995f, 
-0.3476f, -0.4464f, 0.8245f, 
--0.0635f, -0.2552f, 0.9647f, 
--0.8468f, 0.4454f, 0.2904f, 
--0.4719f, 0.8502f, 0.233f, 
--0.0502f, 0.8385f, 0.5425f, 
--0.6671f, 0.7448f, -0.0116f, 
-0.3508f, -0.3415f, 0.8719f, 
--0.4119f, 0.6135f, -0.6736f, 
--0.2688f, -0.7172f, 0.6428f, 
--0.4041f, -0.8052f, 0.4337f, 
--0.375f, 0.2079f, 0.9033f, 
--0.0223f, -0.9986f, -0.0462f, 
-0.6702f, 0.4451f, -0.5938f, 
-0.9402f, -0.3403f, 0.0085f, 
-0.5661f, -0.604f, -0.5609f, 
--0.6252f, 0.7406f, 0.246f, 
--0.0341f, -0.9986f, 0.0383f, 
--0.6111f, 0.4984f, -0.6148f, 
-0.6655f, 0.7462f, 0.0117f, 
-0.1233f, 0.199f, 0.9722f, 
-0.8468f, 0.4454f, -0.2904f, 
-0.7383f, 0.2702f, -0.6179f, 
--0.8055f, 0.4452f, -0.3909f, 
--0.3729f, 0.208f, -0.9042f, 
-0.4719f, 0.8502f, -0.233f, 
-0.243f, 0.747f, 0.6187f, 
--0.6497f, -0.4127f, -0.6383f, 
--0.5406f, 0.5651f, -0.623f, 
-0.0058f, -0.4457f, 0.8951f, 
--0.3082f, -0.6034f, 0.7354f, 
--0.8655f, -0.3412f, -0.3666f, 
-0.2688f, -0.7172f, -0.6428f, 
-0.4041f, -0.8052f, -0.4337f, 
-0.375f, 0.2079f, -0.9033f, 
-0.0341f, -0.9986f, -0.0383f, 
--0.9701f, 0.2423f, 0.0084f, 
--0.3807f, -0.0681f, 0.9221f, 
-0.9643f, -0.2551f, 0.0705f, 
--0.8758f, 0.4808f, 0.0415f, 
-0.1207f, 0.9852f, 0.1215f, 
-0.4821f, 0.7724f, 0.4133f, 
--0.0522f, 0.9982f, 0.0278f, 
--0.4337f, -0.8052f, -0.4041f, 
--0.6164f, 0.4198f, 0.6661f, 
--0.8448f, 0.4045f, -0.3501f, 
-0.3082f, -0.6034f, -0.7354f, 
-0.8689f, 0.3387f, 0.3607f, 
-0.6894f, -0.7242f, 0.0091f, 
-0.3787f, 0.2424f, 0.8931f, 
-0.2904f, 0.4454f, 0.8468f, 
-0.6148f, 0.4984f, -0.6111f, 
-0.0501f, 0.985f, 0.1648f, 
--0.5397f, -0.805f, 0.2461f, 
--0.9159f, -0.2556f, 0.3094f, 
-0.706f, -0.0681f, 0.7048f, 
--0.3341f, 0.4972f, 0.8006f, 
-0.556f, -0.8049f, 0.2071f, 
--0.1774f, 0.9693f, -0.1697f, 
-0.6907f, 0.2083f, 0.6924f, 
-0.1263f, 0.9332f, 0.3361f, 
-0.3807f, -0.0681f, -0.9221f, 
--0.1556f, -0.9861f, -0.0578f, 
--0.3271f, 0.9333f, -0.1478f, 
--0.3465f, 0.8505f, 0.3955f, 
-0.5315f, 0.8438f, -0.0735f, 
-0.9737f, 0.2276f, -0.0003f, 
-0.6441f, 0.7648f, -0.0112f, 
--0.7239f, -0.6898f, 0.0042f, 
--0.7532f, 0.5939f, -0.2824f, 
-0.1093f, 0.1415f, -0.9838f, 
-0.5397f, -0.805f, -0.2461f, 
--0.7981f, -0.6024f, -0.0036f, 
-0.9456f, 0.3251f, -0.0052f, 
-0.1278f, 0.9696f, -0.2085f, 
-0.0208f, -0.8044f, 0.5936f, 
-0.1635f, 0.1348f, -0.9772f, 
--0.733f, 0.5936f, 0.3321f, 
--0.0505f, 0.9852f, -0.1635f, 
-0.4089f, -0.9069f, -0.1015f, 
--0.0029f, -0.9986f, -0.0514f, 
--0.1796f, 0.814f, -0.5522f, 
-0.9221f, -0.0681f, 0.3807f, 
-0.0383f, -0.9986f, 0.0341f, 
-0.6369f, -0.2562f, 0.727f, 
-0.3465f, 0.8505f, -0.3955f, 
--0.2452f, 0.9334f, -0.2615f, 
-0.4921f, -0.247f, 0.8346f, 
--0.9976f, -0.0678f, 0.0008f, 
--0.5396f, 0.8418f, -0.0094f, 
-0.2294f, 0.9692f, 0.0888f, 
-0.7239f, -0.6898f, -0.0042f, 
--0.4472f, 0.5952f, 0.6675f, 
--0.6449f, -0.7172f, 0.2637f, 
-0.4543f, 0.2732f, -0.8478f, 
--0.6798f, 0.2428f, 0.6919f, 
--0.5938f, 0.4451f, -0.6702f, 
-0.733f, 0.5936f, -0.3321f, 
--0.3955f, 0.8505f, -0.3465f, 
--0.5139f, -0.6913f, -0.5078f, 
--0.623f, -0.5156f, -0.5881f
-};
-
-/* 1 color   */
-/*255 255 0  */
-
-/* 1024 faces */
-/* numIdx fidx0 fidx1 fidx2 nidx0 nidx1 nidx2 coloridx */
-
-const int numFaces = 1024;
-const int faces[1024][8] = {
-3, 0, 5, 6, 255, 295, 309, 0,
-3, 6, 1, 0, 309, 465, 255, 0,
-3, 1, 6, 7, 465, 309, 134, 0,
-3, 7, 2, 1, 134, 4, 465, 0,
-3, 2, 7, 8, 4, 134, 165, 0,
-3, 8, 3, 2, 165, 448, 4, 0,
-3, 3, 8, 9, 448, 165, 49, 0,
-3, 9, 4, 3, 49, 116, 448, 0,
-3, 5, 10, 11, 295, 248, 106, 0,
-3, 11, 6, 5, 106, 309, 295, 0,
-3, 6, 11, 12, 309, 106, 102, 0,
-3, 12, 7, 6, 102, 134, 309, 0,
-3, 7, 12, 13, 134, 102, 394, 0,
-3, 13, 8, 7, 394, 165, 134, 0,
-3, 8, 13, 14, 165, 394, 180, 0,
-3, 14, 9, 8, 180, 49, 165, 0,
-3, 10, 15, 16, 248, 401, 211, 0,
-3, 16, 11, 10, 211, 106, 248, 0,
-3, 11, 16, 17, 106, 211, 427, 0,
-3, 17, 12, 11, 427, 102, 106, 0,
-3, 12, 17, 18, 102, 427, 455, 0,
-3, 18, 13, 12, 455, 394, 102, 0,
-3, 13, 18, 19, 394, 455, 74, 0,
-3, 19, 14, 13, 74, 180, 394, 0,
-3, 15, 20, 21, 401, 174, 182, 0,
-3, 21, 16, 15, 182, 211, 401, 0,
-3, 16, 21, 22, 211, 182, 507, 0,
-3, 22, 17, 16, 507, 427, 211, 0,
-3, 17, 22, 23, 427, 507, 5, 0,
-3, 23, 18, 17, 5, 455, 427, 0,
-3, 18, 23, 24, 455, 5, 234, 0,
-3, 24, 19, 18, 234, 74, 455, 0,
-3, 20, 25, 26, 174, 386, 20, 0,
-3, 26, 21, 20, 20, 182, 174, 0,
-3, 21, 26, 27, 182, 20, 410, 0,
-3, 27, 22, 21, 410, 507, 182, 0,
-3, 22, 27, 28, 507, 410, 23, 0,
-3, 28, 23, 22, 23, 5, 507, 0,
-3, 23, 28, 29, 5, 23, 485, 0,
-3, 29, 24, 23, 485, 234, 5, 0,
-3, 25, 30, 31, 386, 69, 305, 0,
-3, 31, 26, 25, 305, 20, 386, 0,
-3, 26, 31, 32, 20, 305, 503, 0,
-3, 32, 27, 26, 503, 410, 20, 0,
-3, 27, 32, 33, 410, 503, 405, 0,
-3, 33, 28, 27, 405, 23, 410, 0,
-3, 28, 33, 34, 23, 405, 138, 0,
-3, 34, 29, 28, 138, 485, 23, 0,
-3, 30, 35, 36, 69, 115, 193, 0,
-3, 36, 31, 30, 193, 305, 69, 0,
-3, 31, 36, 37, 305, 193, 270, 0,
-3, 37, 32, 31, 270, 503, 305, 0,
-3, 32, 37, 38, 503, 270, 445, 0,
-3, 38, 33, 32, 445, 405, 503, 0,
-3, 33, 38, 39, 405, 445, 28, 0,
-3, 39, 34, 33, 28, 138, 405, 0,
-3, 35, 40, 41, 115, 467, 495, 0,
-3, 41, 36, 35, 495, 193, 115, 0,
-3, 36, 41, 42, 193, 495, 11, 0,
-3, 42, 37, 36, 11, 270, 193, 0,
-3, 37, 42, 43, 270, 11, 435, 0,
-3, 43, 38, 37, 435, 445, 270, 0,
-3, 38, 43, 44, 445, 435, 322, 0,
-3, 44, 39, 38, 322, 28, 445, 0,
-3, 40, 45, 46, 467, 27, 44, 0,
-3, 46, 41, 40, 44, 495, 467, 0,
-3, 41, 46, 47, 495, 44, 409, 0,
-3, 47, 42, 41, 409, 11, 495, 0,
-3, 42, 47, 48, 11, 409, 428, 0,
-3, 48, 43, 42, 428, 435, 11, 0,
-3, 43, 48, 49, 435, 428, 313, 0,
-3, 49, 44, 43, 313, 322, 435, 0,
-3, 45, 50, 51, 27, 513, 385, 0,
-3, 51, 46, 45, 385, 44, 27, 0,
-3, 46, 51, 52, 44, 385, 382, 0,
-3, 52, 47, 46, 382, 409, 44, 0,
-3, 47, 52, 53, 409, 382, 124, 0,
-3, 53, 48, 47, 124, 428, 409, 0,
-3, 48, 53, 54, 428, 124, 447, 0,
-3, 54, 49, 48, 447, 313, 428, 0,
-3, 50, 55, 56, 513, 136, 478, 0,
-3, 56, 51, 50, 478, 385, 513, 0,
-3, 51, 56, 57, 385, 478, 161, 0,
-3, 57, 52, 51, 161, 382, 385, 0,
-3, 52, 57, 58, 382, 161, 181, 0,
-3, 58, 53, 52, 181, 124, 382, 0,
-3, 53, 58, 59, 124, 181, 348, 0,
-3, 59, 54, 53, 348, 447, 124, 0,
-3, 55, 60, 61, 136, 431, 320, 0,
-3, 61, 56, 55, 320, 478, 136, 0,
-3, 56, 61, 62, 478, 320, 481, 0,
-3, 62, 57, 56, 481, 161, 478, 0,
-3, 57, 62, 63, 161, 481, 53, 0,
-3, 63, 58, 57, 53, 181, 161, 0,
-3, 58, 63, 64, 181, 53, 257, 0,
-3, 64, 59, 58, 257, 348, 181, 0,
-3, 60, 65, 66, 431, 135, 37, 0,
-3, 66, 61, 60, 37, 320, 431, 0,
-3, 61, 66, 67, 320, 37, 408, 0,
-3, 67, 62, 61, 408, 481, 320, 0,
-3, 62, 67, 68, 481, 408, 347, 0,
-3, 68, 63, 62, 347, 53, 481, 0,
-3, 63, 68, 69, 53, 347, 104, 0,
-3, 69, 64, 63, 104, 257, 53, 0,
-3, 65, 70, 71, 135, 191, 524, 0,
-3, 71, 66, 65, 524, 37, 135, 0,
-3, 66, 71, 72, 37, 524, 319, 0,
-3, 72, 67, 66, 319, 408, 37, 0,
-3, 67, 72, 73, 408, 319, 183, 0,
-3, 73, 68, 67, 183, 347, 408, 0,
-3, 68, 73, 74, 347, 183, 480, 0,
-3, 74, 69, 68, 480, 104, 347, 0,
-3, 70, 75, 76, 191, 483, 328, 0,
-3, 76, 71, 70, 328, 524, 191, 0,
-3, 71, 76, 77, 524, 328, 422, 0,
-3, 77, 72, 71, 422, 319, 524, 0,
-3, 72, 77, 78, 319, 422, 151, 0,
-3, 78, 73, 72, 151, 183, 319, 0,
-3, 73, 78, 79, 183, 151, 273, 0,
-3, 79, 74, 73, 273, 480, 183, 0,
-3, 75, 0, 1, 483, 255, 465, 0,
-3, 1, 76, 75, 465, 328, 483, 0,
-3, 76, 1, 2, 328, 465, 4, 0,
-3, 2, 77, 76, 4, 422, 328, 0,
-3, 77, 2, 3, 422, 4, 448, 0,
-3, 3, 78, 77, 448, 151, 422, 0,
-3, 78, 3, 4, 151, 448, 116, 0,
-3, 4, 79, 78, 116, 273, 151, 0,
-3, 4, 9, 84, 116, 49, 220, 0,
-3, 84, 80, 4, 220, 131, 116, 0,
-3, 80, 84, 85, 131, 220, 476, 0,
-3, 85, 81, 80, 476, 26, 131, 0,
-3, 81, 85, 86, 26, 476, 38, 0,
-3, 86, 82, 81, 38, 336, 26, 0,
-3, 82, 86, 87, 336, 38, 511, 0,
-3, 87, 83, 82, 511, 1, 336, 0,
-3, 9, 14, 88, 49, 180, 103, 0,
-3, 88, 84, 9, 103, 220, 49, 0,
-3, 84, 88, 89, 220, 103, 62, 0,
-3, 89, 85, 84, 62, 476, 220, 0,
-3, 85, 89, 90, 476, 62, 488, 0,
-3, 90, 86, 85, 488, 38, 476, 0,
-3, 86, 90, 91, 38, 488, 484, 0,
-3, 91, 87, 86, 484, 511, 38, 0,
-3, 14, 19, 92, 180, 74, 78, 0,
-3, 92, 88, 14, 78, 103, 180, 0,
-3, 88, 92, 93, 103, 78, 154, 0,
-3, 93, 89, 88, 154, 62, 103, 0,
-3, 89, 93, 94, 62, 154, 190, 0,
-3, 94, 90, 89, 190, 488, 62, 0,
-3, 90, 94, 95, 488, 190, 417, 0,
-3, 95, 91, 90, 417, 484, 488, 0,
-3, 19, 24, 96, 74, 234, 81, 0,
-3, 96, 92, 19, 81, 78, 74, 0,
-3, 92, 96, 97, 78, 81, 274, 0,
-3, 97, 93, 92, 274, 154, 78, 0,
-3, 93, 97, 98, 154, 274, 363, 0,
-3, 98, 94, 93, 363, 190, 154, 0,
-3, 94, 98, 99, 190, 363, 304, 0,
-3, 99, 95, 94, 304, 417, 190, 0,
-3, 24, 29, 100, 234, 485, 287, 0,
-3, 100, 96, 24, 287, 81, 234, 0,
-3, 96, 100, 101, 81, 287, 398, 0,
-3, 101, 97, 96, 398, 274, 81, 0,
-3, 97, 101, 102, 274, 398, 440, 0,
-3, 102, 98, 97, 440, 363, 274, 0,
-3, 98, 102, 103, 363, 440, 466, 0,
-3, 103, 99, 98, 466, 304, 363, 0,
-3, 29, 34, 104, 485, 138, 268, 0,
-3, 104, 100, 29, 268, 287, 485, 0,
-3, 100, 104, 105, 287, 268, 252, 0,
-3, 105, 101, 100, 252, 398, 287, 0,
-3, 101, 105, 106, 398, 252, 141, 0,
-3, 106, 102, 101, 141, 440, 398, 0,
-3, 102, 106, 107, 440, 141, 18, 0,
-3, 107, 103, 102, 18, 466, 440, 0,
-3, 34, 39, 108, 138, 28, 357, 0,
-3, 108, 104, 34, 357, 268, 138, 0,
-3, 104, 108, 109, 268, 357, 127, 0,
-3, 109, 105, 104, 127, 252, 268, 0,
-3, 105, 109, 110, 252, 127, 228, 0,
-3, 110, 106, 105, 228, 141, 252, 0,
-3, 106, 110, 111, 141, 228, 33, 0,
-3, 111, 107, 106, 33, 18, 141, 0,
-3, 39, 44, 112, 28, 322, 396, 0,
-3, 112, 108, 39, 396, 357, 28, 0,
-3, 108, 112, 113, 357, 396, 294, 0,
-3, 113, 109, 108, 294, 127, 357, 0,
-3, 109, 113, 114, 127, 294, 56, 0,
-3, 114, 110, 109, 56, 228, 127, 0,
-3, 110, 114, 115, 228, 56, 517, 0,
-3, 115, 111, 110, 517, 33, 228, 0,
-3, 44, 49, 116, 322, 313, 474, 0,
-3, 116, 112, 44, 474, 396, 322, 0,
-3, 112, 116, 117, 396, 474, 208, 0,
-3, 117, 113, 112, 208, 294, 396, 0,
-3, 113, 117, 118, 294, 208, 301, 0,
-3, 118, 114, 113, 301, 56, 294, 0,
-3, 114, 118, 119, 56, 301, 242, 0,
-3, 119, 115, 114, 242, 517, 56, 0,
-3, 49, 54, 120, 313, 447, 377, 0,
-3, 120, 116, 49, 377, 474, 313, 0,
-3, 116, 120, 121, 474, 377, 333, 0,
-3, 121, 117, 116, 333, 208, 474, 0,
-3, 117, 121, 122, 208, 333, 222, 0,
-3, 122, 118, 117, 222, 301, 208, 0,
-3, 118, 122, 123, 301, 222, 218, 0,
-3, 123, 119, 118, 218, 242, 301, 0,
-3, 54, 59, 124, 447, 348, 350, 0,
-3, 124, 120, 54, 350, 377, 447, 0,
-3, 120, 124, 125, 377, 350, 420, 0,
-3, 125, 121, 120, 420, 333, 377, 0,
-3, 121, 125, 126, 333, 420, 453, 0,
-3, 126, 122, 121, 453, 222, 333, 0,
-3, 122, 126, 127, 222, 453, 147, 0,
-3, 127, 123, 122, 147, 218, 222, 0,
-3, 59, 64, 128, 348, 257, 95, 0,
-3, 128, 124, 59, 95, 350, 348, 0,
-3, 124, 128, 129, 350, 95, 293, 0,
-3, 129, 125, 124, 293, 420, 350, 0,
-3, 125, 129, 130, 420, 293, 378, 0,
-3, 130, 126, 125, 378, 453, 420, 0,
-3, 126, 130, 131, 453, 378, 29, 0,
-3, 131, 127, 126, 29, 147, 453, 0,
-3, 64, 69, 132, 257, 104, 311, 0,
-3, 132, 128, 64, 311, 95, 257, 0,
-3, 128, 132, 133, 95, 311, 419, 0,
-3, 133, 129, 128, 419, 293, 95, 0,
-3, 129, 133, 134, 293, 419, 463, 0,
-3, 134, 130, 129, 463, 378, 293, 0,
-3, 130, 134, 135, 378, 463, 490, 0,
-3, 135, 131, 130, 490, 29, 378, 0,
-3, 69, 74, 136, 104, 480, 284, 0,
-3, 136, 132, 69, 284, 311, 104, 0,
-3, 132, 136, 137, 311, 284, 269, 0,
-3, 137, 133, 132, 269, 419, 311, 0,
-3, 133, 137, 138, 419, 269, 164, 0,
-3, 138, 134, 133, 164, 463, 419, 0,
-3, 134, 138, 139, 463, 164, 45, 0,
-3, 139, 135, 134, 45, 490, 463, 0,
-3, 74, 79, 140, 480, 273, 371, 0,
-3, 140, 136, 74, 371, 284, 480, 0,
-3, 136, 140, 141, 284, 371, 148, 0,
-3, 141, 137, 136, 148, 269, 284, 0,
-3, 137, 141, 142, 269, 148, 251, 0,
-3, 142, 138, 137, 251, 164, 269, 0,
-3, 138, 142, 143, 164, 251, 54, 0,
-3, 143, 139, 138, 54, 45, 164, 0,
-3, 79, 4, 80, 273, 116, 131, 0,
-3, 80, 140, 79, 131, 371, 273, 0,
-3, 140, 80, 81, 371, 131, 26, 0,
-3, 81, 141, 140, 26, 148, 371, 0,
-3, 141, 81, 82, 148, 26, 336, 0,
-3, 82, 142, 141, 336, 251, 148, 0,
-3, 142, 82, 83, 251, 336, 1, 0,
-3, 83, 143, 142, 1, 54, 251, 0,
-3, 83, 87, 148, 1, 511, 404, 0,
-3, 148, 144, 83, 404, 276, 1, 0,
-3, 144, 148, 149, 276, 404, 308, 0,
-3, 149, 145, 144, 308, 520, 276, 0,
-3, 145, 149, 150, 520, 308, 325, 0,
-3, 150, 146, 145, 325, 395, 520, 0,
-3, 146, 150, 151, 395, 325, 384, 0,
-3, 151, 147, 146, 384, 246, 395, 0,
-3, 87, 91, 152, 511, 484, 47, 0,
-3, 152, 148, 87, 47, 404, 511, 0,
-3, 148, 152, 153, 404, 47, 272, 0,
-3, 153, 149, 148, 272, 308, 404, 0,
-3, 149, 153, 154, 308, 272, 415, 0,
-3, 154, 150, 149, 415, 325, 308, 0,
-3, 150, 154, 155, 325, 415, 83, 0,
-3, 155, 151, 150, 83, 384, 325, 0,
-3, 91, 95, 156, 484, 417, 430, 0,
-3, 156, 152, 91, 430, 47, 484, 0,
-3, 152, 156, 157, 47, 430, 137, 0,
-3, 157, 153, 152, 137, 272, 47, 0,
-3, 153, 157, 158, 272, 137, 416, 0,
-3, 158, 154, 153, 416, 415, 272, 0,
-3, 154, 158, 159, 415, 416, 297, 0,
-3, 159, 155, 154, 297, 83, 415, 0,
-3, 95, 99, 160, 417, 304, 458, 0,
-3, 160, 156, 95, 458, 430, 417, 0,
-3, 156, 160, 161, 430, 458, 343, 0,
-3, 161, 157, 156, 343, 137, 430, 0,
-3, 157, 161, 162, 137, 343, 334, 0,
-3, 162, 158, 157, 334, 416, 137, 0,
-3, 158, 162, 163, 416, 334, 317, 0,
-3, 163, 159, 158, 317, 297, 416, 0,
-3, 99, 103, 164, 304, 466, 187, 0,
-3, 164, 160, 99, 187, 458, 304, 0,
-3, 160, 164, 165, 458, 187, 117, 0,
-3, 165, 161, 160, 117, 343, 458, 0,
-3, 161, 165, 166, 343, 117, 438, 0,
-3, 166, 162, 161, 438, 334, 343, 0,
-3, 162, 166, 167, 334, 438, 459, 0,
-3, 167, 163, 162, 459, 317, 334, 0,
-3, 103, 107, 168, 466, 18, 353, 0,
-3, 168, 164, 103, 353, 187, 466, 0,
-3, 164, 168, 169, 187, 353, 123, 0,
-3, 169, 165, 164, 123, 117, 187, 0,
-3, 165, 169, 170, 117, 123, 168, 0,
-3, 170, 166, 165, 168, 438, 117, 0,
-3, 166, 170, 171, 438, 168, 426, 0,
-3, 171, 167, 166, 426, 459, 438, 0,
-3, 107, 111, 172, 18, 33, 390, 0,
-3, 172, 168, 107, 390, 353, 18, 0,
-3, 168, 172, 173, 353, 390, 290, 0,
-3, 173, 169, 168, 290, 123, 353, 0,
-3, 169, 173, 174, 123, 290, 522, 0,
-3, 174, 170, 169, 522, 168, 123, 0,
-3, 170, 174, 175, 168, 522, 87, 0,
-3, 175, 171, 170, 87, 426, 168, 0,
-3, 111, 115, 176, 33, 517, 260, 0,
-3, 176, 172, 111, 260, 390, 33, 0,
-3, 172, 176, 177, 390, 260, 497, 0,
-3, 177, 173, 172, 497, 290, 390, 0,
-3, 173, 177, 178, 290, 497, 126, 0,
-3, 178, 174, 173, 126, 522, 290, 0,
-3, 174, 178, 179, 522, 126, 501, 0,
-3, 179, 175, 174, 501, 87, 522, 0,
-3, 115, 119, 180, 517, 242, 130, 0,
-3, 180, 176, 115, 130, 260, 517, 0,
-3, 176, 180, 181, 260, 130, 34, 0,
-3, 181, 177, 176, 34, 497, 260, 0,
-3, 177, 181, 182, 497, 34, 46, 0,
-3, 182, 178, 177, 46, 126, 497, 0,
-3, 178, 182, 183, 126, 46, 105, 0,
-3, 183, 179, 178, 105, 501, 126, 0,
-3, 119, 123, 184, 242, 218, 310, 0,
-3, 184, 180, 119, 310, 130, 242, 0,
-3, 180, 184, 185, 130, 310, 528, 0,
-3, 185, 181, 180, 528, 34, 130, 0,
-3, 181, 185, 186, 34, 528, 145, 0,
-3, 186, 182, 181, 145, 46, 34, 0,
-3, 182, 186, 187, 46, 145, 356, 0,
-3, 187, 183, 182, 356, 105, 46, 0,
-3, 123, 127, 188, 218, 147, 156, 0,
-3, 188, 184, 123, 156, 310, 218, 0,
-3, 184, 188, 189, 310, 156, 402, 0,
-3, 189, 185, 184, 402, 528, 310, 0,
-3, 185, 189, 190, 528, 402, 146, 0,
-3, 190, 186, 185, 146, 145, 528, 0,
-3, 186, 190, 191, 145, 146, 17, 0,
-3, 191, 187, 186, 17, 356, 145, 0,
-3, 127, 131, 192, 147, 29, 184, 0,
-3, 192, 188, 127, 184, 156, 147, 0,
-3, 188, 192, 193, 156, 184, 63, 0,
-3, 193, 189, 188, 63, 402, 156, 0,
-3, 189, 193, 194, 402, 63, 354, 0,
-3, 194, 190, 189, 354, 146, 402, 0,
-3, 190, 194, 195, 146, 354, 335, 0,
-3, 195, 191, 190, 335, 17, 146, 0,
-3, 131, 135, 196, 29, 490, 210, 0,
-3, 196, 192, 131, 210, 184, 29, 0,
-3, 192, 196, 197, 184, 210, 129, 0,
-3, 197, 193, 192, 129, 63, 184, 0,
-3, 193, 197, 198, 63, 129, 461, 0,
-3, 198, 194, 193, 461, 354, 63, 0,
-3, 194, 198, 199, 354, 461, 475, 0,
-3, 199, 195, 194, 475, 335, 354, 0,
-3, 135, 139, 200, 490, 45, 370, 0,
-3, 200, 196, 135, 370, 210, 490, 0,
-3, 196, 200, 201, 210, 370, 143, 0,
-3, 201, 197, 196, 143, 129, 210, 0,
-3, 197, 201, 202, 129, 143, 195, 0,
-3, 202, 198, 197, 195, 461, 129, 0,
-3, 198, 202, 203, 461, 195, 444, 0,
-3, 203, 199, 198, 444, 475, 461, 0,
-3, 139, 143, 204, 45, 54, 403, 0,
-3, 204, 200, 139, 403, 370, 45, 0,
-3, 200, 204, 205, 370, 403, 315, 0,
-3, 205, 201, 200, 315, 143, 370, 0,
-3, 201, 205, 206, 143, 315, 7, 0,
-3, 206, 202, 201, 7, 195, 143, 0,
-3, 202, 206, 207, 195, 7, 101, 0,
-3, 207, 203, 202, 101, 444, 195, 0,
-3, 143, 83, 144, 54, 1, 276, 0,
-3, 144, 204, 143, 276, 403, 54, 0,
-3, 204, 144, 145, 403, 276, 520, 0,
-3, 145, 205, 204, 520, 315, 403, 0,
-3, 205, 145, 146, 315, 520, 395, 0,
-3, 146, 206, 205, 395, 7, 315, 0,
-3, 206, 146, 147, 7, 395, 246, 0,
-3, 147, 207, 206, 246, 101, 7, 0,
-3, 147, 151, 212, 246, 384, 486, 0,
-3, 212, 208, 147, 486, 279, 246, 0,
-3, 208, 212, 213, 279, 486, 231, 0,
-3, 213, 209, 208, 231, 349, 279, 0,
-3, 209, 213, 214, 349, 231, 0, 0,
-3, 214, 210, 209, 0, 216, 349, 0,
-3, 210, 214, 211, 216, 0, 393, 0,
-3, 211, 211, 210, 393, 393, 216, 0,
-3, 151, 155, 215, 384, 83, 215, 0,
-3, 215, 212, 151, 215, 486, 384, 0,
-3, 212, 215, 216, 486, 215, 327, 0,
-3, 216, 213, 212, 327, 231, 486, 0,
-3, 213, 216, 217, 231, 327, 512, 0,
-3, 217, 214, 213, 512, 0, 231, 0,
-3, 214, 217, 211, 0, 512, 393, 0,
-3, 211, 211, 214, 393, 393, 0, 0,
-3, 155, 159, 218, 83, 297, 149, 0,
-3, 218, 215, 155, 149, 215, 83, 0,
-3, 215, 218, 219, 215, 149, 91, 0,
-3, 219, 216, 215, 91, 327, 215, 0,
-3, 216, 219, 220, 327, 91, 177, 0,
-3, 220, 217, 216, 177, 512, 327, 0,
-3, 217, 220, 211, 512, 177, 393, 0,
-3, 211, 211, 217, 393, 393, 512, 0,
-3, 159, 163, 221, 297, 317, 504, 0,
-3, 221, 218, 159, 504, 149, 297, 0,
-3, 218, 221, 222, 149, 504, 285, 0,
-3, 222, 219, 218, 285, 91, 149, 0,
-3, 219, 222, 223, 91, 285, 254, 0,
-3, 223, 220, 219, 254, 177, 91, 0,
-3, 220, 223, 211, 177, 254, 393, 0,
-3, 211, 211, 220, 393, 393, 177, 0,
-3, 163, 167, 224, 317, 459, 125, 0,
-3, 224, 221, 163, 125, 504, 317, 0,
-3, 221, 224, 225, 504, 125, 162, 0,
-3, 225, 222, 221, 162, 285, 504, 0,
-3, 222, 225, 226, 285, 162, 278, 0,
-3, 226, 223, 222, 278, 254, 285, 0,
-3, 223, 226, 211, 254, 278, 393, 0,
-3, 211, 211, 223, 393, 393, 254, 0,
-3, 167, 171, 227, 459, 426, 439, 0,
-3, 227, 224, 167, 439, 125, 459, 0,
-3, 224, 227, 228, 125, 439, 60, 0,
-3, 228, 225, 224, 60, 162, 125, 0,
-3, 225, 228, 229, 162, 60, 446, 0,
-3, 229, 226, 225, 446, 278, 162, 0,
-3, 226, 229, 211, 278, 446, 393, 0,
-3, 211, 211, 226, 393, 393, 278, 0,
-3, 171, 175, 230, 426, 87, 482, 0,
-3, 230, 227, 171, 482, 439, 426, 0,
-3, 227, 230, 231, 439, 482, 92, 0,
-3, 231, 228, 227, 92, 60, 439, 0,
-3, 228, 231, 232, 60, 92, 110, 0,
-3, 232, 229, 228, 110, 446, 60, 0,
-3, 229, 232, 211, 446, 110, 393, 0,
-3, 211, 211, 229, 393, 393, 446, 0,
-3, 175, 179, 233, 87, 501, 261, 0,
-3, 233, 230, 175, 261, 482, 87, 0,
-3, 230, 233, 234, 482, 261, 329, 0,
-3, 234, 231, 230, 329, 92, 482, 0,
-3, 231, 234, 235, 92, 329, 192, 0,
-3, 235, 232, 231, 192, 110, 92, 0,
-3, 232, 235, 211, 110, 192, 393, 0,
-3, 211, 211, 232, 393, 393, 110, 0,
-3, 179, 183, 236, 501, 105, 219, 0,
-3, 236, 233, 179, 219, 261, 501, 0,
-3, 233, 236, 237, 261, 219, 491, 0,
-3, 237, 234, 233, 491, 329, 261, 0,
-3, 234, 237, 238, 329, 491, 267, 0,
-3, 238, 235, 234, 267, 192, 329, 0,
-3, 235, 238, 211, 192, 267, 393, 0,
-3, 211, 211, 235, 393, 393, 192, 0,
-3, 183, 187, 239, 105, 356, 472, 0,
-3, 239, 236, 183, 472, 219, 105, 0,
-3, 236, 239, 240, 219, 472, 48, 0,
-3, 240, 237, 236, 48, 491, 219, 0,
-3, 237, 240, 241, 491, 48, 247, 0,
-3, 241, 238, 237, 247, 267, 491, 0,
-3, 238, 241, 211, 267, 247, 393, 0,
-3, 211, 211, 238, 393, 393, 267, 0,
-3, 187, 191, 242, 356, 17, 411, 0,
-3, 242, 239, 187, 411, 472, 356, 0,
-3, 239, 242, 243, 472, 411, 364, 0,
-3, 243, 240, 239, 364, 48, 472, 0,
-3, 240, 243, 244, 48, 364, 441, 0,
-3, 244, 241, 240, 441, 247, 48, 0,
-3, 241, 244, 211, 247, 441, 393, 0,
-3, 211, 211, 241, 393, 393, 247, 0,
-3, 191, 195, 245, 17, 335, 239, 0,
-3, 245, 242, 191, 239, 411, 17, 0,
-3, 242, 245, 246, 411, 239, 13, 0,
-3, 246, 243, 242, 13, 364, 411, 0,
-3, 243, 246, 247, 364, 13, 509, 0,
-3, 247, 244, 243, 509, 441, 364, 0,
-3, 244, 247, 211, 441, 509, 393, 0,
-3, 211, 211, 244, 393, 393, 441, 0,
-3, 195, 199, 248, 335, 475, 144, 0,
-3, 248, 245, 195, 144, 239, 335, 0,
-3, 245, 248, 249, 239, 144, 179, 0,
-3, 249, 246, 245, 179, 13, 239, 0,
-3, 246, 249, 250, 13, 179, 298, 0,
-3, 250, 247, 246, 298, 509, 13, 0,
-3, 247, 250, 211, 509, 298, 393, 0,
-3, 211, 211, 247, 393, 393, 509, 0,
-3, 199, 203, 251, 475, 444, 462, 0,
-3, 251, 248, 199, 462, 144, 475, 0,
-3, 248, 251, 252, 144, 462, 76, 0,
-3, 252, 249, 248, 76, 179, 144, 0,
-3, 249, 252, 253, 179, 76, 464, 0,
-3, 253, 250, 249, 464, 298, 179, 0,
-3, 250, 253, 211, 298, 464, 393, 0,
-3, 211, 211, 250, 393, 393, 298, 0,
-3, 203, 207, 254, 444, 101, 500, 0,
-3, 254, 251, 203, 500, 462, 444, 0,
-3, 251, 254, 255, 462, 500, 113, 0,
-3, 255, 252, 251, 113, 76, 462, 0,
-3, 252, 255, 256, 76, 113, 128, 0,
-3, 256, 253, 252, 128, 464, 76, 0,
-3, 253, 256, 211, 464, 128, 393, 0,
-3, 211, 211, 253, 393, 393, 464, 0,
-3, 207, 147, 208, 101, 246, 279, 0,
-3, 208, 254, 207, 279, 500, 101, 0,
-3, 254, 208, 209, 500, 279, 349, 0,
-3, 209, 255, 254, 349, 113, 500, 0,
-3, 255, 209, 210, 113, 349, 216, 0,
-3, 210, 256, 255, 216, 128, 113, 0,
-3, 256, 210, 211, 128, 216, 393, 0,
-3, 211, 211, 256, 393, 393, 128, 0,
-3, 257, 262, 263, 425, 244, 58, 0,
-3, 263, 258, 257, 58, 337, 425, 0,
-3, 258, 263, 264, 337, 58, 214, 0,
-3, 264, 259, 258, 214, 236, 337, 0,
-3, 259, 264, 265, 236, 214, 266, 0,
-3, 265, 260, 259, 266, 32, 236, 0,
-3, 260, 265, 266, 32, 266, 331, 0,
-3, 266, 261, 260, 331, 109, 32, 0,
-3, 262, 267, 268, 244, 233, 369, 0,
-3, 268, 263, 262, 369, 58, 244, 0,
-3, 263, 268, 269, 58, 369, 71, 0,
-3, 269, 264, 263, 71, 214, 58, 0,
-3, 264, 269, 270, 214, 71, 392, 0,
-3, 270, 265, 264, 392, 266, 214, 0,
-3, 265, 270, 271, 266, 392, 312, 0,
-3, 271, 266, 265, 312, 331, 266, 0,
-3, 267, 272, 273, 233, 12, 434, 0,
-3, 273, 268, 267, 434, 369, 233, 0,
-3, 268, 273, 274, 369, 434, 188, 0,
-3, 274, 269, 268, 188, 71, 369, 0,
-3, 269, 274, 275, 71, 188, 201, 0,
-3, 275, 270, 269, 201, 392, 71, 0,
-3, 270, 275, 276, 392, 201, 238, 0,
-3, 276, 271, 270, 238, 312, 392, 0,
-3, 272, 277, 278, 12, 142, 114, 0,
-3, 278, 273, 272, 114, 434, 12, 0,
-3, 273, 278, 279, 434, 114, 173, 0,
-3, 279, 274, 273, 173, 188, 434, 0,
-3, 274, 279, 280, 188, 173, 14, 0,
-3, 280, 275, 274, 14, 201, 188, 0,
-3, 275, 280, 281, 201, 14, 15, 0,
-3, 281, 276, 275, 15, 238, 201, 0,
-3, 277, 282, 283, 142, 407, 288, 0,
-3, 283, 278, 277, 288, 114, 142, 0,
-3, 278, 283, 284, 114, 288, 400, 0,
-3, 284, 279, 278, 400, 173, 114, 0,
-3, 279, 284, 285, 173, 400, 457, 0,
-3, 285, 280, 279, 457, 14, 173, 0,
-3, 280, 285, 286, 14, 457, 332, 0,
-3, 286, 281, 280, 332, 15, 14, 0,
-3, 282, 287, 288, 407, 194, 42, 0,
-3, 288, 283, 282, 42, 288, 407, 0,
-3, 283, 288, 289, 288, 42, 380, 0,
-3, 289, 284, 283, 380, 400, 288, 0,
-3, 284, 289, 290, 400, 380, 383, 0,
-3, 290, 285, 284, 383, 457, 400, 0,
-3, 285, 290, 291, 457, 383, 197, 0,
-3, 291, 286, 285, 197, 332, 457, 0,
-3, 287, 292, 293, 194, 321, 152, 0,
-3, 293, 288, 287, 152, 42, 194, 0,
-3, 288, 293, 294, 42, 152, 397, 0,
-3, 294, 289, 288, 397, 380, 42, 0,
-3, 289, 294, 295, 380, 397, 342, 0,
-3, 295, 290, 289, 342, 383, 380, 0,
-3, 290, 295, 296, 383, 342, 225, 0,
-3, 296, 291, 290, 225, 197, 383, 0,
-3, 292, 257, 258, 321, 425, 337, 0,
-3, 258, 293, 292, 337, 152, 321, 0,
-3, 293, 258, 259, 152, 337, 236, 0,
-3, 259, 294, 293, 236, 397, 152, 0,
-3, 294, 259, 260, 397, 236, 32, 0,
-3, 260, 295, 294, 32, 342, 397, 0,
-3, 295, 260, 261, 342, 32, 109, 0,
-3, 261, 296, 295, 109, 225, 342, 0,
-3, 261, 266, 301, 109, 331, 175, 0,
-3, 301, 297, 261, 175, 502, 109, 0,
-3, 297, 301, 302, 502, 175, 265, 0,
-3, 302, 298, 297, 265, 84, 502, 0,
-3, 298, 302, 303, 84, 265, 186, 0,
-3, 303, 299, 298, 186, 496, 84, 0,
-3, 299, 303, 304, 496, 186, 470, 0,
-3, 304, 300, 299, 470, 494, 496, 0,
-3, 266, 271, 305, 331, 312, 170, 0,
-3, 305, 301, 266, 170, 175, 331, 0,
-3, 301, 305, 306, 175, 170, 97, 0,
-3, 306, 302, 301, 97, 265, 175, 0,
-3, 302, 306, 307, 265, 97, 205, 0,
-3, 307, 303, 302, 205, 186, 265, 0,
-3, 303, 307, 308, 186, 205, 449, 0,
-3, 308, 304, 303, 449, 470, 186, 0,
-3, 271, 276, 309, 312, 238, 379, 0,
-3, 309, 305, 271, 379, 170, 312, 0,
-3, 305, 309, 310, 170, 379, 300, 0,
-3, 310, 306, 305, 300, 97, 170, 0,
-3, 306, 310, 311, 97, 300, 118, 0,
-3, 311, 307, 306, 118, 205, 97, 0,
-3, 307, 311, 312, 205, 118, 237, 0,
-3, 312, 308, 307, 237, 449, 205, 0,
-3, 276, 281, 313, 238, 15, 199, 0,
-3, 313, 309, 276, 199, 379, 238, 0,
-3, 309, 313, 314, 379, 199, 94, 0,
-3, 314, 310, 309, 94, 300, 379, 0,
-3, 310, 314, 315, 300, 94, 421, 0,
-3, 315, 311, 310, 421, 118, 300, 0,
-3, 311, 315, 316, 118, 421, 31, 0,
-3, 316, 312, 311, 31, 237, 118, 0,
-3, 281, 286, 317, 15, 332, 367, 0,
-3, 317, 313, 281, 367, 199, 15, 0,
-3, 313, 317, 318, 199, 367, 529, 0,
-3, 318, 314, 313, 529, 94, 199, 0,
-3, 314, 318, 319, 94, 529, 185, 0,
-3, 319, 315, 314, 185, 421, 94, 0,
-3, 315, 319, 320, 421, 185, 89, 0,
-3, 320, 316, 315, 89, 31, 421, 0,
-3, 286, 291, 321, 332, 197, 172, 0,
-3, 321, 317, 286, 172, 367, 332, 0,
-3, 317, 321, 322, 367, 172, 209, 0,
-3, 322, 318, 317, 209, 529, 367, 0,
-3, 318, 322, 323, 529, 209, 429, 0,
-3, 323, 319, 318, 429, 185, 529, 0,
-3, 319, 323, 324, 185, 429, 112, 0,
-3, 324, 320, 319, 112, 89, 185, 0,
-3, 291, 296, 325, 197, 225, 451, 0,
-3, 325, 321, 291, 451, 172, 197, 0,
-3, 321, 325, 326, 172, 451, 66, 0,
-3, 326, 322, 321, 66, 209, 172, 0,
-3, 322, 326, 327, 209, 66, 176, 0,
-3, 327, 323, 322, 176, 429, 209, 0,
-3, 323, 327, 328, 429, 176, 155, 0,
-3, 328, 324, 323, 155, 112, 429, 0,
-3, 296, 261, 297, 225, 109, 502, 0,
-3, 297, 325, 296, 502, 451, 225, 0,
-3, 325, 297, 298, 451, 502, 84, 0,
-3, 298, 326, 325, 84, 66, 451, 0,
-3, 326, 298, 299, 66, 84, 496, 0,
-3, 299, 327, 326, 496, 176, 66, 0,
-3, 327, 299, 300, 176, 496, 494, 0,
-3, 300, 328, 327, 494, 155, 176, 0,
-3, 329, 334, 335, 3, 355, 122, 0,
-3, 335, 330, 329, 122, 518, 3, 0,
-3, 330, 335, 336, 518, 122, 111, 0,
-3, 336, 331, 330, 111, 213, 518, 0,
-3, 331, 336, 337, 213, 111, 473, 0,
-3, 337, 332, 331, 473, 468, 213, 0,
-3, 332, 337, 338, 468, 473, 521, 0,
-3, 338, 333, 332, 521, 346, 468, 0,
-3, 334, 339, 340, 355, 61, 414, 0,
-3, 340, 335, 334, 414, 122, 355, 0,
-3, 335, 340, 341, 122, 414, 413, 0,
-3, 341, 336, 335, 413, 111, 122, 0,
-3, 336, 341, 342, 111, 413, 204, 0,
-3, 342, 337, 336, 204, 473, 111, 0,
-3, 337, 342, 343, 473, 204, 217, 0,
-3, 343, 338, 337, 217, 521, 473, 0,
-3, 339, 344, 345, 61, 55, 100, 0,
-3, 345, 340, 339, 100, 414, 61, 0,
-3, 340, 345, 346, 414, 100, 399, 0,
-3, 346, 341, 340, 399, 413, 414, 0,
-3, 341, 346, 347, 413, 399, 326, 0,
-3, 347, 342, 341, 326, 204, 413, 0,
-3, 342, 347, 348, 204, 326, 221, 0,
-3, 348, 343, 342, 221, 217, 204, 0,
-3, 344, 349, 350, 55, 508, 477, 0,
-3, 350, 345, 344, 477, 100, 55, 0,
-3, 345, 350, 351, 100, 477, 292, 0,
-3, 351, 346, 345, 292, 399, 100, 0,
-3, 346, 351, 352, 399, 292, 73, 0,
-3, 352, 347, 346, 73, 326, 399, 0,
-3, 347, 352, 353, 326, 73, 362, 0,
-3, 353, 348, 347, 362, 221, 326, 0,
-3, 349, 354, 355, 508, 365, 262, 0,
-3, 355, 350, 349, 262, 477, 508, 0,
-3, 350, 355, 356, 477, 262, 93, 0,
-3, 356, 351, 350, 93, 292, 477, 0,
-3, 351, 356, 357, 292, 93, 318, 0,
-3, 357, 352, 351, 318, 73, 292, 0,
-3, 352, 357, 358, 73, 318, 163, 0,
-3, 358, 353, 352, 163, 362, 73, 0,
-3, 354, 359, 360, 365, 140, 340, 0,
-3, 360, 355, 354, 340, 262, 365, 0,
-3, 355, 360, 361, 262, 340, 505, 0,
-3, 361, 356, 355, 505, 93, 262, 0,
-3, 356, 361, 362, 93, 505, 499, 0,
-3, 362, 357, 356, 499, 318, 93, 0,
-3, 357, 362, 363, 318, 499, 159, 0,
-3, 363, 358, 357, 159, 163, 318, 0,
-3, 359, 364, 365, 140, 510, 68, 0,
-3, 365, 360, 359, 68, 340, 140, 0,
-3, 360, 365, 366, 340, 68, 167, 0,
-3, 366, 361, 360, 167, 505, 340, 0,
-3, 361, 366, 367, 505, 167, 245, 0,
-3, 367, 362, 361, 245, 499, 505, 0,
-3, 362, 367, 368, 499, 245, 437, 0,
-3, 368, 363, 362, 437, 159, 499, 0,
-3, 364, 329, 330, 510, 3, 518, 0,
-3, 330, 365, 364, 518, 68, 510, 0,
-3, 365, 330, 331, 68, 518, 213, 0,
-3, 331, 366, 365, 213, 167, 68, 0,
-3, 366, 331, 332, 167, 213, 468, 0,
-3, 332, 367, 366, 468, 245, 167, 0,
-3, 367, 332, 333, 245, 468, 346, 0,
-3, 333, 368, 367, 346, 437, 245, 0,
-3, 333, 338, 373, 346, 521, 79, 0,
-3, 373, 369, 333, 79, 286, 346, 0,
-3, 369, 373, 374, 286, 79, 77, 0,
-3, 374, 370, 369, 77, 22, 286, 0,
-3, 370, 374, 375, 22, 77, 523, 0,
-3, 375, 371, 370, 523, 330, 22, 0,
-3, 371, 375, 376, 330, 523, 259, 0,
-3, 376, 372, 371, 259, 338, 330, 0,
-3, 338, 343, 377, 521, 217, 207, 0,
-3, 377, 373, 338, 207, 79, 521, 0,
-3, 373, 377, 378, 79, 207, 471, 0,
-3, 378, 374, 373, 471, 77, 79, 0,
-3, 374, 378, 379, 77, 471, 198, 0,
-3, 379, 375, 374, 198, 523, 77, 0,
-3, 375, 379, 380, 523, 198, 366, 0,
-3, 380, 376, 375, 366, 259, 523, 0,
-3, 343, 348, 381, 217, 221, 516, 0,
-3, 381, 377, 343, 516, 207, 217, 0,
-3, 377, 381, 382, 207, 516, 250, 0,
-3, 382, 378, 377, 250, 471, 207, 0,
-3, 378, 382, 383, 471, 250, 240, 0,
-3, 383, 379, 378, 240, 198, 471, 0,
-3, 379, 383, 384, 198, 240, 381, 0,
-3, 384, 380, 379, 381, 366, 198, 0,
-3, 348, 353, 385, 221, 362, 230, 0,
-3, 385, 381, 348, 230, 516, 221, 0,
-3, 381, 385, 386, 516, 230, 303, 0,
-3, 386, 382, 381, 303, 250, 516, 0,
-3, 382, 386, 387, 250, 303, 10, 0,
-3, 387, 383, 382, 10, 240, 250, 0,
-3, 383, 387, 388, 240, 10, 283, 0,
-3, 388, 384, 383, 283, 381, 240, 0,
-3, 353, 358, 389, 362, 163, 282, 0,
-3, 389, 385, 353, 282, 230, 362, 0,
-3, 385, 389, 390, 230, 282, 35, 0,
-3, 390, 386, 385, 35, 303, 230, 0,
-3, 386, 390, 391, 303, 35, 243, 0,
-3, 391, 387, 386, 243, 10, 303, 0,
-3, 387, 391, 392, 10, 243, 368, 0,
-3, 392, 388, 387, 368, 283, 10, 0,
-3, 358, 363, 393, 163, 159, 296, 0,
-3, 393, 389, 358, 296, 282, 163, 0,
-3, 389, 393, 394, 282, 296, 160, 0,
-3, 394, 390, 389, 160, 35, 282, 0,
-3, 390, 394, 395, 35, 160, 323, 0,
-3, 395, 391, 390, 323, 243, 35, 0,
-3, 391, 395, 396, 243, 323, 280, 0,
-3, 396, 392, 391, 280, 368, 243, 0,
-3, 363, 368, 397, 159, 437, 275, 0,
-3, 397, 393, 363, 275, 296, 159, 0,
-3, 393, 397, 398, 296, 275, 133, 0,
-3, 398, 394, 393, 133, 160, 296, 0,
-3, 394, 398, 399, 160, 133, 344, 0,
-3, 399, 395, 394, 344, 323, 160, 0,
-3, 395, 399, 400, 323, 344, 108, 0,
-3, 400, 396, 395, 108, 280, 323, 0,
-3, 368, 333, 369, 437, 346, 286, 0,
-3, 369, 397, 368, 286, 275, 437, 0,
-3, 397, 369, 370, 275, 286, 22, 0,
-3, 370, 398, 397, 22, 133, 275, 0,
-3, 398, 370, 371, 133, 22, 330, 0,
-3, 371, 399, 398, 330, 344, 133, 0,
-3, 399, 371, 372, 344, 330, 338, 0,
-3, 372, 400, 399, 338, 108, 344, 0,
-3, 401, 401, 406, 235, 235, 189, 0,
-3, 406, 402, 401, 189, 40, 235, 0,
-3, 402, 406, 407, 40, 189, 306, 0,
-3, 407, 403, 402, 306, 119, 40, 0,
-3, 403, 407, 408, 119, 306, 202, 0,
-3, 408, 404, 403, 202, 443, 119, 0,
-3, 404, 408, 409, 443, 202, 241, 0,
-3, 409, 405, 404, 241, 75, 443, 0,
-3, 401, 401, 410, 235, 235, 263, 0,
-3, 410, 406, 401, 263, 189, 235, 0,
-3, 406, 410, 411, 189, 263, 196, 0,
-3, 411, 407, 406, 196, 306, 189, 0,
-3, 407, 411, 412, 306, 196, 281, 0,
-3, 412, 408, 407, 281, 202, 306, 0,
-3, 408, 412, 413, 202, 281, 121, 0,
-3, 413, 409, 408, 121, 241, 202, 0,
-3, 401, 401, 414, 235, 235, 479, 0,
-3, 414, 410, 401, 479, 263, 235, 0,
-3, 410, 414, 415, 263, 479, 36, 0,
-3, 415, 411, 410, 36, 196, 263, 0,
-3, 411, 415, 416, 196, 36, 436, 0,
-3, 416, 412, 411, 436, 281, 196, 0,
-3, 412, 416, 417, 281, 436, 351, 0,
-3, 417, 413, 412, 351, 121, 281, 0,
-3, 401, 401, 418, 235, 235, 90, 0,
-3, 418, 414, 401, 90, 479, 235, 0,
-3, 414, 418, 419, 479, 90, 361, 0,
-3, 419, 415, 414, 361, 36, 479, 0,
-3, 415, 419, 420, 36, 361, 376, 0,
-3, 420, 416, 415, 376, 436, 36, 0,
-3, 416, 420, 421, 436, 376, 412, 0,
-3, 421, 417, 416, 412, 351, 436, 0,
-3, 401, 401, 422, 235, 235, 52, 0,
-3, 422, 418, 401, 52, 90, 235, 0,
-3, 418, 422, 423, 90, 52, 21, 0,
-3, 423, 419, 418, 21, 361, 90, 0,
-3, 419, 423, 424, 361, 21, 158, 0,
-3, 424, 420, 419, 158, 376, 361, 0,
-3, 420, 424, 425, 376, 158, 39, 0,
-3, 425, 421, 420, 39, 412, 376, 0,
-3, 401, 401, 426, 235, 235, 424, 0,
-3, 426, 422, 401, 424, 52, 235, 0,
-3, 422, 426, 427, 52, 424, 373, 0,
-3, 427, 423, 422, 373, 21, 52, 0,
-3, 423, 427, 428, 21, 373, 375, 0,
-3, 428, 424, 423, 375, 158, 21, 0,
-3, 424, 428, 429, 158, 375, 249, 0,
-3, 429, 425, 424, 249, 39, 158, 0,
-3, 401, 401, 430, 235, 235, 432, 0,
-3, 430, 426, 401, 432, 424, 235, 0,
-3, 426, 430, 431, 424, 432, 229, 0,
-3, 431, 427, 426, 229, 373, 424, 0,
-3, 427, 431, 432, 373, 229, 65, 0,
-3, 432, 428, 427, 65, 375, 373, 0,
-3, 428, 432, 433, 375, 65, 506, 0,
-3, 433, 429, 428, 506, 249, 375, 0,
-3, 401, 401, 434, 235, 235, 302, 0,
-3, 434, 430, 401, 302, 432, 235, 0,
-3, 430, 434, 435, 432, 302, 96, 0,
-3, 435, 431, 430, 96, 229, 432, 0,
-3, 431, 435, 436, 229, 96, 169, 0,
-3, 436, 432, 431, 169, 65, 229, 0,
-3, 432, 436, 437, 65, 169, 59, 0,
-3, 437, 433, 432, 59, 506, 65, 0,
-3, 401, 401, 438, 235, 235, 452, 0,
-3, 438, 434, 401, 452, 302, 235, 0,
-3, 434, 438, 439, 302, 452, 30, 0,
-3, 439, 435, 434, 30, 96, 302, 0,
-3, 435, 439, 440, 96, 30, 460, 0,
-3, 440, 436, 435, 460, 169, 96, 0,
-3, 436, 440, 441, 169, 460, 498, 0,
-3, 441, 437, 436, 498, 59, 169, 0,
-3, 401, 401, 442, 235, 235, 525, 0,
-3, 442, 438, 401, 525, 452, 235, 0,
-3, 438, 442, 443, 452, 525, 456, 0,
-3, 443, 439, 438, 456, 30, 452, 0,
-3, 439, 443, 444, 30, 456, 9, 0,
-3, 444, 440, 439, 9, 460, 30, 0,
-3, 440, 444, 445, 460, 9, 388, 0,
-3, 445, 441, 440, 388, 498, 460, 0,
-3, 401, 401, 446, 235, 235, 212, 0,
-3, 446, 442, 401, 212, 525, 235, 0,
-3, 442, 446, 447, 525, 212, 299, 0,
-3, 447, 443, 442, 299, 456, 525, 0,
-3, 443, 447, 448, 456, 299, 166, 0,
-3, 448, 444, 443, 166, 9, 456, 0,
-3, 444, 448, 449, 9, 166, 72, 0,
-3, 449, 445, 444, 72, 388, 9, 0,
-3, 401, 401, 450, 235, 235, 107, 0,
-3, 450, 446, 401, 107, 212, 235, 0,
-3, 446, 450, 451, 212, 107, 82, 0,
-3, 451, 447, 446, 82, 299, 212, 0,
-3, 447, 451, 452, 299, 82, 391, 0,
-3, 452, 448, 447, 391, 166, 299, 0,
-3, 448, 452, 453, 166, 391, 139, 0,
-3, 453, 449, 448, 139, 72, 166, 0,
-3, 401, 401, 454, 235, 235, 70, 0,
-3, 454, 450, 401, 70, 107, 235, 0,
-3, 450, 454, 455, 107, 70, 51, 0,
-3, 455, 451, 450, 51, 82, 107, 0,
-3, 451, 455, 456, 82, 51, 178, 0,
-3, 456, 452, 451, 178, 391, 82, 0,
-3, 452, 456, 457, 391, 178, 57, 0,
-3, 457, 453, 452, 57, 139, 391, 0,
-3, 401, 401, 458, 235, 235, 442, 0,
-3, 458, 454, 401, 442, 70, 235, 0,
-3, 454, 458, 459, 70, 442, 387, 0,
-3, 459, 455, 454, 387, 51, 70, 0,
-3, 455, 459, 460, 51, 387, 389, 0,
-3, 460, 456, 455, 389, 178, 51, 0,
-3, 456, 460, 461, 178, 389, 264, 0,
-3, 461, 457, 456, 264, 57, 178, 0,
-3, 401, 401, 462, 235, 235, 450, 0,
-3, 462, 458, 401, 450, 442, 235, 0,
-3, 458, 462, 463, 442, 450, 253, 0,
-3, 463, 459, 458, 253, 387, 442, 0,
-3, 459, 463, 464, 387, 253, 86, 0,
-3, 464, 460, 459, 86, 389, 387, 0,
-3, 460, 464, 465, 389, 86, 526, 0,
-3, 465, 461, 460, 526, 264, 389, 0,
-3, 401, 401, 402, 235, 235, 40, 0,
-3, 402, 462, 401, 40, 450, 235, 0,
-3, 462, 402, 403, 450, 40, 119, 0,
-3, 403, 463, 462, 119, 253, 450, 0,
-3, 463, 403, 404, 253, 119, 443, 0,
-3, 404, 464, 463, 443, 86, 253, 0,
-3, 464, 404, 405, 86, 443, 75, 0,
-3, 405, 465, 464, 75, 526, 86, 0,
-3, 405, 409, 470, 75, 241, 519, 0,
-3, 470, 466, 405, 519, 226, 75, 0,
-3, 466, 470, 471, 226, 519, 406, 0,
-3, 471, 467, 466, 406, 98, 226, 0,
-3, 467, 471, 472, 98, 406, 232, 0,
-3, 472, 468, 467, 232, 43, 98, 0,
-3, 468, 472, 473, 43, 232, 345, 0,
-3, 473, 469, 468, 345, 372, 43, 0,
-3, 409, 413, 474, 241, 121, 227, 0,
-3, 474, 470, 409, 227, 519, 241, 0,
-3, 470, 474, 475, 519, 227, 469, 0,
-3, 475, 471, 470, 469, 406, 519, 0,
-3, 471, 475, 476, 406, 469, 258, 0,
-3, 476, 472, 471, 258, 232, 406, 0,
-3, 472, 476, 477, 232, 258, 271, 0,
-3, 477, 473, 472, 271, 345, 232, 0,
-3, 413, 417, 478, 121, 351, 157, 0,
-3, 478, 474, 413, 157, 227, 121, 0,
-3, 474, 478, 479, 227, 157, 80, 0,
-3, 479, 475, 474, 80, 469, 227, 0,
-3, 475, 479, 480, 469, 80, 489, 0,
-3, 480, 476, 475, 489, 258, 469, 0,
-3, 476, 480, 481, 258, 489, 277, 0,
-3, 481, 477, 476, 277, 271, 258, 0,
-3, 417, 421, 482, 351, 412, 153, 0,
-3, 482, 478, 417, 153, 157, 351, 0,
-3, 478, 482, 483, 157, 153, 324, 0,
-3, 483, 479, 478, 324, 80, 157, 0,
-3, 479, 483, 484, 80, 324, 339, 0,
-3, 484, 480, 479, 339, 489, 80, 0,
-3, 480, 484, 485, 489, 339, 88, 0,
-3, 485, 481, 480, 88, 277, 489, 0,
-3, 421, 425, 486, 412, 39, 6, 0,
-3, 486, 482, 421, 6, 153, 412, 0,
-3, 482, 486, 487, 153, 6, 8, 0,
-3, 487, 483, 482, 8, 324, 153, 0,
-3, 483, 487, 488, 324, 8, 16, 0,
-3, 488, 484, 483, 16, 339, 324, 0,
-3, 484, 488, 489, 339, 16, 289, 0,
-3, 489, 485, 484, 289, 88, 339, 0,
-3, 425, 429, 490, 39, 249, 99, 0,
-3, 490, 486, 425, 99, 6, 39, 0,
-3, 486, 490, 491, 6, 99, 200, 0,
-3, 491, 487, 486, 200, 8, 6, 0,
-3, 487, 491, 492, 8, 200, 150, 0,
-3, 492, 488, 487, 150, 16, 8, 0,
-3, 488, 492, 493, 16, 150, 493, 0,
-3, 493, 489, 488, 493, 289, 16, 0,
-3, 429, 433, 494, 249, 506, 291, 0,
-3, 494, 490, 429, 291, 99, 249, 0,
-3, 490, 494, 495, 99, 291, 64, 0,
-3, 495, 491, 490, 64, 200, 99, 0,
-3, 491, 495, 496, 200, 64, 19, 0,
-3, 496, 492, 491, 19, 150, 200, 0,
-3, 492, 496, 497, 150, 19, 433, 0,
-3, 497, 493, 492, 433, 493, 150, 0,
-3, 433, 437, 498, 506, 59, 203, 0,
-3, 498, 494, 433, 203, 291, 506, 0,
-3, 494, 498, 499, 291, 203, 374, 0,
-3, 499, 495, 494, 374, 64, 291, 0,
-3, 495, 499, 500, 64, 374, 307, 0,
-3, 500, 496, 495, 307, 19, 64, 0,
-3, 496, 500, 501, 19, 307, 358, 0,
-3, 501, 497, 496, 358, 433, 19, 0,
-3, 437, 441, 502, 59, 498, 256, 0,
-3, 502, 498, 437, 256, 203, 59, 0,
-3, 498, 502, 503, 203, 256, 132, 0,
-3, 503, 499, 498, 132, 374, 203, 0,
-3, 499, 503, 504, 374, 132, 492, 0,
-3, 504, 500, 499, 492, 307, 374, 0,
-3, 500, 504, 505, 307, 492, 67, 0,
-3, 505, 501, 500, 67, 358, 307, 0,
-3, 441, 445, 506, 498, 388, 487, 0,
-3, 506, 502, 441, 487, 256, 498, 0,
-3, 502, 506, 507, 256, 487, 206, 0,
-3, 507, 503, 502, 206, 132, 256, 0,
-3, 503, 507, 508, 132, 206, 515, 0,
-3, 508, 504, 503, 515, 492, 132, 0,
-3, 504, 508, 509, 492, 515, 527, 0,
-3, 509, 505, 504, 527, 67, 492, 0,
-3, 445, 449, 510, 388, 72, 423, 0,
-3, 510, 506, 445, 423, 487, 388, 0,
-3, 506, 510, 511, 487, 423, 352, 0,
-3, 511, 507, 506, 352, 206, 487, 0,
-3, 507, 511, 512, 206, 352, 224, 0,
-3, 512, 508, 507, 224, 515, 206, 0,
-3, 508, 512, 513, 515, 224, 2, 0,
-3, 513, 509, 508, 2, 527, 515, 0,
-3, 449, 453, 514, 72, 139, 418, 0,
-3, 514, 510, 449, 418, 423, 72, 0,
-3, 510, 514, 515, 423, 418, 341, 0,
-3, 515, 511, 510, 341, 352, 423, 0,
-3, 511, 515, 516, 352, 341, 359, 0,
-3, 516, 512, 511, 359, 224, 352, 0,
-3, 512, 516, 517, 224, 359, 360, 0,
-3, 517, 513, 512, 360, 2, 224, 0,
-3, 453, 457, 518, 139, 57, 24, 0,
-3, 518, 514, 453, 24, 418, 139, 0,
-3, 514, 518, 519, 418, 24, 25, 0,
-3, 519, 515, 514, 25, 341, 418, 0,
-3, 515, 519, 520, 341, 25, 41, 0,
-3, 520, 516, 515, 41, 359, 341, 0,
-3, 516, 520, 521, 359, 41, 314, 0,
-3, 521, 517, 516, 314, 360, 359, 0,
-3, 457, 461, 522, 57, 264, 120, 0,
-3, 522, 518, 457, 120, 24, 57, 0,
-3, 518, 522, 523, 24, 120, 223, 0,
-3, 523, 519, 518, 223, 25, 24, 0,
-3, 519, 523, 524, 25, 223, 171, 0,
-3, 524, 520, 519, 171, 41, 25, 0,
-3, 520, 524, 525, 41, 171, 514, 0,
-3, 525, 521, 520, 514, 314, 41, 0,
-3, 461, 465, 526, 264, 526, 316, 0,
-3, 526, 522, 461, 316, 120, 264, 0,
-3, 522, 526, 527, 120, 316, 85, 0,
-3, 527, 523, 522, 85, 223, 120, 0,
-3, 523, 527, 528, 223, 85, 50, 0,
-3, 528, 524, 523, 50, 171, 223, 0,
-3, 524, 528, 529, 171, 50, 454, 0,
-3, 529, 525, 524, 454, 514, 171, 0,
-3, 465, 405, 466, 526, 75, 226, 0,
-3, 466, 526, 465, 226, 316, 526, 0,
-3, 526, 466, 467, 316, 226, 98, 0,
-3, 467, 527, 526, 98, 85, 316, 0,
-3, 527, 467, 468, 85, 98, 43, 0,
-3, 468, 528, 527, 43, 50, 85, 0,
-3, 528, 468, 469, 50, 43, 372, 0,
-3, 469, 529, 528, 372, 454, 50, 0
-};
-
-
-const int strip_vertices[] = {
-508, 508, 504, 509, 504, 505, 500, 501, 496, 497, 492, 493, 488, 489, 484, 485, 480, 481, 476, 477, 472, 473, -1,
-476, 475, 480, 479, 484, 483, 488, 487, 492, 491, 496, 495, 500, 499, 504, 499, 503, 498, 502, 437, 441, -1,
-527, 526, 467, 466, 471, 470, 475, 474, 479, 478, 483, 482, 487, 486, 491, 490, 495, 494, 499, 494, 498, -1,
-490, 490, 425, 486, 421, 482, 417, 478, 413, 474, 409, 470, 405, 466, 465, 526, 465, 461, 460, 456, 455, 451, -1,
-405, 465, 464, 460, 459, 455, 454, 450, -1,
-455, 451, 450, 446, 450, 401, 454, 458, 459, 463, 464, 404, 405, 404, 409, 408, 413, 412, 417, 416, 421, 420, -1,
-421, 420, 425, 420, 424, 419, 423, 418, 422, 418, 401, 414, 410, 415, 411, 416, 411, 412, 407, 408, 403, 404, 403, 463, -1,
-418, 418, 414, 419, 415, 420, 416, -1,
-407, 403, 402, 462, -1,
-403, 463, 462, 458, 462, 401, 402, 406, 407, 406, 411, 406, 410, 401, -1,
-494, 494, 498, 433, 437, 432, 436, 431, 435, 430, 434, 430, 401, 426, 422, 427, 423, 428, 424, 429, 425, 490, -1,
-430, 430, 426, 431, 427, 432, 428, 433, 429, 494, 490, -1,
-437, 437, 441, 436, 440, 435, 439, 434, 438, 401, 442, 446, 447, 451, 452, 456, 457, 461, 522, 526, 527, -1,
-452, 448, 447, -1,
-510, 445, 449, 444, 448, 443, 447, 443, 442, 443, 438, 443, 439, 444, 440, 445, 441, 506, 502, 507, 503, -1,
-510, 506, 445, -1,
-507, 506, 511, 510, 515, 510, 514, 449, 453, 448, 453, 452, 457, -1,
-527, 523, 522, 518, 457, 518, 453, 518, 514, 519, 515, -1,
-523, 519, 518, -1,
-504, 503, 508, 507, 512, 511, 516, 515, 520, 519, 524, 523, 528, 527, 468, 467, 472, 471, 476, 475, -1,
-472, 473, 468, 469, 528, 529, 524, 525, 520, 521, 516, 517, 512, 513, 508, 509, -1,
-211, 211, 214, 210, 209, -1,
-212, 215, 216, 219, 220, 223, 220, 211, 217, 214, 213, 209, 213, 208, 212, 147, -1,
-220, 217, 216, 213, 212, -1,
-251, 251, 248, 252, 249, 253, 250, 253, 211, 256, 210, 255, 209, 254, 208, 207, 147, 206, 147, 146, 147, 151, 212, 215, -1,
-206, 206, 202, 207, 203, 254, 251, 255, 252, 256, 253, -1,
-223, 223, 222, 219, 218, 215, 155, 151, 150, 146, 145, 146, 205, 206, 201, 202, 197, 202, 198, 203, 199, 251, 248, -1,
-145, 149, 150, 154, 155, 159, 218, 221, 222, 225, 226, 229, -1,
-204, 204, 145, 144, 149, 148, 149, 153, 154, 158, 159, 163, 221, 224, 225, 228, 229, 232, 229, 211, 226, 223, 222, -1,
-224, 224, 167, 163, 162, 158, 157, 153, 152, 148, 87, 148, 83, 144, 143, 204, 139, 200, 135, 196, 131, 192, -1,
-82, 83, 142, 143, 138, 139, 134, 135, 130, 131, 126, 127, 122, 123, 118, 123, 119, 184, 180, 185, 181, -1,
-81, 82, 141, 142, 137, 138, 133, 134, 129, 130, 125, 126, 121, 122, 117, 118, 113, 114, 109, 110, -1,
-80, 81, 140, 141, 136, 137, 132, 133, 128, 129, 124, 125, 120, 121, 116, 117, 112, 113, 108, 109, -1,
-4, 80, 79, 140, 74, 136, 69, 132, 64, 128, 59, 124, 54, 120, 49, 116, 44, 112, 39, 108, -1,
-79, 79, 73, 74, 68, 69, 63, 64, 58, 59, 53, 54, 48, 49, 48, 43, 42, 37, 36, 31, 30, 31, 25, -1,
-42, 42, 48, 47, 53, 52, 58, 57, 63, 62, 68, 67, 73, 72, 78, 77, 3, 2, 8, 7, 13, -1,
-36, 36, 42, 41, 47, 46, 52, 51, 57, 56, 62, 61, 67, 66, 72, 71, 77, 76, 2, 1, 7, -1,
-66, 66, 60, 61, 55, 56, 50, 51, 45, 46, 40, 41, 35, 36, 30, -1,
-31, 31, 25, 26, 20, 21, 15, 16, 10, 11, 5, 6, 0, 1, 75, 76, 70, 71, 65, 66, 60, -1,
-1, 1, 7, 6, 12, 11, 17, 16, 22, 21, 27, 26, 32, 31, 32, 37, 38, 43, 44, 49, -1,
-7, 7, 13, 12, 18, 17, 23, 22, 28, 27, 33, 32, 33, 38, -1,
-44, 44, 38, 39, 33, 34, 28, 29, 23, 24, 18, 19, 13, 14, 8, 9, 3, 4, 78, 79, 73, -1,
-39, 108, 34, 104, 29, 100, 24, 96, 19, 92, 14, 88, 9, 84, 4, 84, 80, 85, 81, 86, 81, 82, -1,
-108, 109, 104, 105, 100, 101, 96, 97, 92, 93, 88, 89, 84, 85, -1,
-109, 110, 105, 106, 101, 102, 97, 98, 93, 94, 89, 90, 85, 86, -1,
-118, 119, 114, 115, 110, 111, 106, 107, 102, 103, 98, 99, 94, 95, 90, 91, 86, 87, 82, 83, -1,
-111, 115, 176, -1,
-107, 111, 172, 176, 177, -1,
-103, 107, 168, 172, 173, 177, 178, -1,
-99, 103, 164, 168, 169, 173, 174, 178, 179, -1,
-95, 99, 160, 164, 165, 169, 170, 174, 175, 179, 233, -1,
-91, 95, 156, 160, 161, 165, 166, 170, 171, 175, 230, 233, 234, -1,
-87, 91, 152, 156, 157, 161, 162, 166, 167, 171, 227, 230, 231, 234, 235, 234, 238, 234, 237, 233, 236, 179, -1,
-185, 185, 181, 186, 182, 187, 183, 239, 236, 240, 237, 241, 238, 211, 235, 232, 231, 228, 227, 224, 167, -1,
-236, 179, 183, 178, 182, 177, 181, 176, 180, 115, 119, -1,
-131, 192, 127, 188, 123, 188, 184, 189, 185, 190, 186, 191, 187, 242, 239, 243, 240, 244, 241, 244, 211, 247, -1,
-192, 192, 188, 193, 189, 194, 190, 195, 191, 245, 242, 246, 243, 247, 244, -1,
-211, 247, 250, 246, 249, 245, 248, 195, 199, 194, 198, 193, 197, 192, 197, 196, 201, 200, 205, 204, 145, -1,
-393, 393, 394, 398, 399, 371, -1,
-399, 395, 394, -1,
-363, 363, 393, 397, 398, 370, 371, 375, -1,
-379, 375, 374, 370, 369, 397, 368, 363, 362, -1,
-396, 395, 400, 399, 372, 371, 376, 375, 380, 379, 384, 383, 388, 387, 392, 391, 396, 391, 395, 390, 394, -1,
-374, 378, 379, 378, 383, 382, 387, 386, 391, 386, 390, 385, 389, 353, 358, 352, 357, 351, 356, 350, 355, -1,
-341, 341, 347, 346, 352, 346, 351, 345, 350, -1,
-335, 334, 340, 339, 345, 344, 350, 349, 355, 354, -1,
-390, 390, 394, 389, 393, 358, 363, 357, 362, 356, 361, 355, 360, 354, 360, 359, 365, 364, 330, 329, 335, 334, -1,
-345, 346, 340, 341, 335, 336, 330, 331, 365, 366, 360, 366, 361, 367, 362, 367, 368, 333, 369, 373, 374, 378, -1,
-353, 353, 348, 385, 381, 386, 381, 382, 377, 378, 377, 373, 338, 333, 332, 367, 332, 366, 332, 331, 337, 336, 342, 341, 347, -1,
-332, 337, 338, 343, 377, 343, 381, 343, 348, 342, 348, 347, 353, 352, -1,
-337, 342, 343, -1,
-314, 314, 319, 318, 323, 322, 323, 327, -1,
-309, 309, 314, 313, 318, 317, 322, 321, 322, 326, 327, 299, -1,
-271, 271, 309, 276, 313, 281, 317, 286, 321, 291, 321, 325, 326, 298, 299, 303, -1,
-265, 265, 271, 270, 276, 275, 281, 280, 286, 285, 291, 290, 291, 296, 325, 297, 298, 302, 303, 307, -1,
-259, 259, 265, 264, 270, 269, 275, 274, 280, 279, 285, 284, 290, 289, 290, 295, 296, 261, 297, 301, 302, 306, 307, 311, -1,
-293, 293, 259, 258, 264, 263, 269, 268, 274, 273, 279, 278, 284, 283, 289, 288, 289, 294, 295, 260, 261, 266, -1,
-309, 305, 271, 266, 265, 260, 259, 294, 293, 288, 287, 288, 282, 283, 277, 278, 272, 273, 267, 268, 262, -1,
-268, 268, 262, 263, 257, 258, 292, 293, 287, -1,
-261, 266, 301, 305, 306, 310, 311, 315, 316, 320, -1,
-316, 316, 311, 312, 307, 308, 303, 304, 299, 300, 327, 328, 323, 324, 319, 320, 319, 315, 314, 310, 309, 305, -1
-};
-
-
-const int strip_normals[] = {
-515, 515, 492, 527, 492, 67, 307, 358, 19, 433, 150, 493, 16, 289, 339, 88, 489, 277, 258, 271, 232, 345, -1,
-258, 469, 489, 80, 339, 324, 16, 8, 150, 200, 19, 64, 307, 374, 492, 374, 132, 203, 256, 59, 498, -1,
-85, 316, 98, 226, 406, 519, 469, 227, 80, 157, 324, 153, 8, 6, 200, 99, 64, 291, 374, 291, 203, -1,
-99, 99, 39, 6, 412, 153, 351, 157, 121, 227, 241, 519, 75, 226, 526, 316, 526, 264, 389, 178, 51, 82, -1,
-75, 526, 86, 389, 387, 51, 70, 107, -1,
-51, 82, 107, 212, 107, 235, 70, 442, 387, 253, 86, 443, 75, 443, 241, 202, 121, 281, 351, 436, 412, 376, -1,
-412, 376, 39, 376, 158, 361, 21, 90, 52, 90, 235, 479, 263, 36, 196, 436, 196, 281, 306, 202, 119, 443, 119, 253, -1,
-90, 90, 479, 361, 36, 376, 436, -1,
-306, 119, 40, 450, -1,
-119, 253, 450, 442, 450, 235, 40, 189, 306, 189, 196, 189, 263, 235, -1,
-291, 291, 203, 506, 59, 65, 169, 229, 96, 432, 302, 432, 235, 424, 52, 373, 21, 375, 158, 249, 39, 99, -1,
-432, 432, 424, 229, 373, 65, 375, 506, 249, 291, 99, -1,
-59, 59, 498, 169, 460, 96, 30, 302, 452, 235, 525, 212, 299, 82, 391, 178, 57, 264, 120, 316, 85, -1,
-391, 166, 299, -1,
-423, 388, 72, 9, 166, 456, 299, 456, 525, 456, 452, 456, 30, 9, 460, 388, 498, 487, 256, 206, 132, -1,
-423, 487, 388, -1,
-206, 487, 352, 423, 341, 423, 418, 72, 139, 166, 139, 391, 57, -1,
-85, 223, 120, 24, 57, 24, 139, 24, 418, 25, 341, -1,
-223, 25, 24, -1,
-492, 132, 515, 206, 224, 352, 359, 341, 41, 25, 171, 223, 50, 85, 43, 98, 232, 406, 258, 469, -1,
-232, 345, 43, 372, 50, 454, 171, 514, 41, 314, 359, 360, 224, 2, 515, 527, -1,
-393, 393, 0, 216, 349, -1,
-486, 215, 327, 91, 177, 254, 177, 393, 512, 0, 231, 349, 231, 279, 486, 246, -1,
-177, 512, 327, 231, 486, -1,
-462, 462, 144, 76, 179, 464, 298, 464, 393, 128, 216, 113, 349, 500, 279, 101, 246, 7, 246, 395, 246, 384, 486, 215, -1,
-7, 7, 195, 101, 444, 500, 462, 113, 76, 128, 464, -1,
-254, 254, 285, 91, 149, 215, 83, 384, 325, 395, 520, 395, 315, 7, 143, 195, 129, 195, 461, 444, 475, 462, 144, -1,
-520, 308, 325, 415, 83, 297, 149, 504, 285, 162, 278, 446, -1,
-403, 403, 520, 276, 308, 404, 308, 272, 415, 416, 297, 317, 504, 125, 162, 60, 446, 110, 446, 393, 278, 254, 285, -1,
-125, 125, 459, 317, 334, 416, 137, 272, 47, 404, 511, 404, 1, 276, 54, 403, 45, 370, 490, 210, 29, 184, -1,
-336, 1, 251, 54, 164, 45, 463, 490, 378, 29, 453, 147, 222, 218, 301, 218, 242, 310, 130, 528, 34, -1,
-26, 336, 148, 251, 269, 164, 419, 463, 293, 378, 420, 453, 333, 222, 208, 301, 294, 56, 127, 228, -1,
-131, 26, 371, 148, 284, 269, 311, 419, 95, 293, 350, 420, 377, 333, 474, 208, 396, 294, 357, 127, -1,
-116, 131, 273, 371, 480, 284, 104, 311, 257, 95, 348, 350, 447, 377, 313, 474, 322, 396, 28, 357, -1,
-273, 273, 183, 480, 347, 104, 53, 257, 181, 348, 124, 447, 428, 313, 428, 435, 11, 270, 193, 305, 69, 305, 386, -1,
-11, 11, 428, 409, 124, 382, 181, 161, 53, 481, 347, 408, 183, 319, 151, 422, 448, 4, 165, 134, 394, -1,
-193, 193, 11, 495, 409, 44, 382, 385, 161, 478, 481, 320, 408, 37, 319, 524, 422, 328, 4, 465, 134, -1,
-37, 37, 431, 320, 136, 478, 513, 385, 27, 44, 467, 495, 115, 193, 69, -1,
-305, 305, 386, 20, 174, 182, 401, 211, 248, 106, 295, 309, 255, 465, 483, 328, 191, 524, 135, 37, 431, -1,
-465, 465, 134, 309, 102, 106, 427, 211, 507, 182, 410, 20, 503, 305, 503, 270, 445, 435, 322, 313, -1,
-134, 134, 394, 102, 455, 427, 5, 507, 23, 410, 405, 503, 405, 445, -1,
-322, 322, 445, 28, 405, 138, 23, 485, 5, 234, 455, 74, 394, 180, 165, 49, 448, 116, 151, 273, 183, -1,
-28, 357, 138, 268, 485, 287, 234, 81, 74, 78, 180, 103, 49, 220, 116, 220, 131, 476, 26, 38, 26, 336, -1,
-357, 127, 268, 252, 287, 398, 81, 274, 78, 154, 103, 62, 220, 476, -1,
-127, 228, 252, 141, 398, 440, 274, 363, 154, 190, 62, 488, 476, 38, -1,
-301, 242, 56, 517, 228, 33, 141, 18, 440, 466, 363, 304, 190, 417, 488, 484, 38, 511, 336, 1, -1,
-33, 517, 260, -1,
-18, 33, 390, 260, 497, -1,
-466, 18, 353, 390, 290, 497, 126, -1,
-304, 466, 187, 353, 123, 290, 522, 126, 501, -1,
-417, 304, 458, 187, 117, 123, 168, 522, 87, 501, 261, -1,
-484, 417, 430, 458, 343, 117, 438, 168, 426, 87, 482, 261, 329, -1,
-511, 484, 47, 430, 137, 343, 334, 438, 459, 426, 439, 482, 92, 329, 192, 329, 267, 329, 491, 261, 219, 501, -1,
-528, 528, 34, 145, 46, 356, 105, 472, 219, 48, 491, 247, 267, 393, 192, 110, 92, 60, 439, 125, 459, -1,
-219, 501, 105, 126, 46, 497, 34, 260, 130, 517, 242, -1,
-29, 184, 147, 156, 218, 156, 310, 402, 528, 146, 145, 17, 356, 411, 472, 364, 48, 441, 247, 441, 393, 509, -1,
-184, 184, 156, 63, 402, 354, 146, 335, 17, 239, 411, 13, 364, 509, 441, -1,
-393, 509, 298, 13, 179, 239, 144, 335, 475, 354, 461, 63, 129, 184, 129, 210, 143, 370, 315, 403, 520, -1,
-296, 296, 160, 133, 344, 330, -1,
-344, 323, 160, -1,
-159, 159, 296, 275, 133, 22, 330, 523, -1,
-198, 523, 77, 22, 286, 275, 437, 159, 499, -1,
-280, 323, 108, 344, 338, 330, 259, 523, 366, 198, 381, 240, 283, 10, 368, 243, 280, 243, 323, 35, 160, -1,
-77, 471, 198, 471, 240, 250, 10, 303, 243, 303, 35, 230, 282, 362, 163, 73, 318, 292, 93, 477, 262, -1,
-413, 413, 326, 399, 73, 399, 292, 100, 477, -1,
-122, 355, 414, 61, 100, 55, 477, 508, 262, 365, -1,
-35, 35, 160, 282, 296, 163, 159, 318, 499, 93, 505, 262, 340, 365, 340, 140, 68, 510, 518, 3, 122, 355, -1,
-100, 399, 414, 413, 122, 111, 518, 213, 68, 167, 340, 167, 505, 245, 499, 245, 437, 346, 286, 79, 77, 471, -1,
-362, 362, 221, 230, 516, 303, 516, 250, 207, 471, 207, 79, 521, 346, 468, 245, 468, 167, 468, 213, 473, 111, 204, 413, 326, -1,
-468, 473, 521, 217, 207, 217, 516, 217, 221, 204, 221, 326, 362, 73, -1,
-473, 204, 217, -1,
-94, 94, 185, 529, 429, 209, 429, 176, -1,
-379, 379, 94, 199, 529, 367, 209, 172, 209, 66, 176, 496, -1,
-312, 312, 379, 238, 199, 15, 367, 332, 172, 197, 172, 451, 66, 84, 496, 186, -1,
-266, 266, 312, 392, 238, 201, 15, 14, 332, 457, 197, 383, 197, 225, 451, 502, 84, 265, 186, 205, -1,
-236, 236, 266, 214, 392, 71, 201, 188, 14, 173, 457, 400, 383, 380, 383, 342, 225, 109, 502, 175, 265, 97, 205, 118, -1,
-152, 152, 236, 337, 214, 58, 71, 369, 188, 434, 173, 114, 400, 288, 380, 42, 380, 397, 342, 32, 109, 331, -1,
-379, 170, 312, 331, 266, 32, 236, 397, 152, 42, 194, 42, 407, 288, 142, 114, 12, 434, 233, 369, 244, -1,
-369, 369, 244, 58, 425, 337, 321, 152, 194, -1,
-109, 331, 175, 170, 97, 300, 118, 421, 31, 89, -1,
-31, 31, 118, 237, 205, 449, 186, 470, 496, 494, 176, 155, 429, 112, 185, 89, 185, 421, 94, 300, 379, 170, -1
-};
-
-#else  /* defined(_WIN32_WCE) */
-
-/*
- * Original teapot code copyright follows:
- */
-
-/*
- * (c) Copyright 1993, Silicon Graphics, Inc.
- *
- * ALL RIGHTS RESERVED
- *
- * Permission to use, copy, modify, and distribute this software
- * for any purpose and without fee is hereby granted, provided
- * that the above copyright notice appear in all copies and that
- * both the copyright notice and this permission notice appear in
- * supporting documentation, and that the name of Silicon
- * Graphics, Inc. not be used in advertising or publicity
- * pertaining to distribution of the software without specific,
- * written prior permission.
- *
- * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU
- * "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR
- * OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF
- * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  IN NO
- * EVENT SHALL SILICON GRAPHICS, INC.  BE LIABLE TO YOU OR ANYONE
- * ELSE FOR ANY DIRECT, SPECIAL, INCIDENTAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER,
- * INCLUDING WITHOUT LIMITATION, LOSS OF PROFIT, LOSS OF USE,
- * SAVINGS OR REVENUE, OR THE CLAIMS OF THIRD PARTIES, WHETHER OR
- * NOT SILICON GRAPHICS, INC.  HAS BEEN ADVISED OF THE POSSIBILITY
- * OF SUCH LOSS, HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * ARISING OUT OF OR IN CONNECTION WITH THE POSSESSION, USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- *
- * US Government Users Restricted Rights
- *
- * Use, duplication, or disclosure by the Government is subject to
- * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph
- * (c)(1)(ii) of the Rights in Technical Data and Computer
- * Software clause at DFARS 252.227-7013 and/or in similar or
- * successor clauses in the FAR or the DOD or NASA FAR
- * Supplement.  Unpublished-- rights reserved under the copyright
- * laws of the United States.  Contractor/manufacturer is Silicon
- * Graphics, Inc., 2011 N.  Shoreline Blvd., Mountain View, CA
- * 94039-7311.
- *
- * OpenGL(TM) is a trademark of Silicon Graphics, Inc.
- */
-
-/*
- * Rim, body, lid, and bottom data must be reflected in x and y;
- * handle and spout data across the y axis only.
- */
-static int patchdata[][16] =
-{
-    { 102, 103, 104, 105,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,  15 }, /* rim    */
-    {  12,  13,  14,  15,  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27 }, /* body   */
-    {  24,  25,  26,  27,  29,  30,  31,  32,  33,  34,  35,  36,  37,  38,  39,  40 },
-    {  96,  96,  96,  96,  97,  98,  99, 100, 101, 101, 101, 101,   0,   1,   2,   3 }, /* lid    */
-    {   0,   1,   2,   3, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117 },
-    { 118, 118, 118, 118, 124, 122, 119, 121, 123, 126, 125, 120,  40,  39,  38,  37 }, /* bottom */
-    {  41,  42,  43,  44,  45,  46,  47,  48,  49,  50,  51,  52,  53,  54,  55,  56 }, /* handle */
-    {  53,  54,  55,  56,  57,  58,  59,  60,  61,  62,  63,  64,  28,  65,  66,  67 },
-    {  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,  80,  81,  82,  83 }, /* spout  */
-    {  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90,  91,  92,  93,  94,  95 }
-};
-
-static double cpdata[][3] =
-{
-    {0.2, 0, 2.7}, {0.2, -0.112, 2.7}, {0.112, -0.2, 2.7}, {0,
-    -0.2, 2.7}, {1.3375, 0, 2.53125}, {1.3375, -0.749, 2.53125},
-    {0.749, -1.3375, 2.53125}, {0, -1.3375, 2.53125}, {1.4375,
-    0, 2.53125}, {1.4375, -0.805, 2.53125}, {0.805, -1.4375,
-    2.53125}, {0, -1.4375, 2.53125}, {1.5, 0, 2.4}, {1.5, -0.84,
-    2.4}, {0.84, -1.5, 2.4}, {0, -1.5, 2.4}, {1.75, 0, 1.875},
-    {1.75, -0.98, 1.875}, {0.98, -1.75, 1.875}, {0, -1.75,
-    1.875}, {2, 0, 1.35}, {2, -1.12, 1.35}, {1.12, -2, 1.35},
-    {0, -2, 1.35}, {2, 0, 0.9}, {2, -1.12, 0.9}, {1.12, -2,
-    0.9}, {0, -2, 0.9}, {-2, 0, 0.9}, {2, 0, 0.45}, {2, -1.12,
-    0.45}, {1.12, -2, 0.45}, {0, -2, 0.45}, {1.5, 0, 0.225},
-    {1.5, -0.84, 0.225}, {0.84, -1.5, 0.225}, {0, -1.5, 0.225},
-    {1.5, 0, 0.15}, {1.5, -0.84, 0.15}, {0.84, -1.5, 0.15}, {0,
-    -1.5, 0.15}, {-1.6, 0, 2.025}, {-1.6, -0.3, 2.025}, {-1.5,
-    -0.3, 2.25}, {-1.5, 0, 2.25}, {-2.3, 0, 2.025}, {-2.3, -0.3,
-    2.025}, {-2.5, -0.3, 2.25}, {-2.5, 0, 2.25}, {-2.7, 0,
-    2.025}, {-2.7, -0.3, 2.025}, {-3, -0.3, 2.25}, {-3, 0,
-    2.25}, {-2.7, 0, 1.8}, {-2.7, -0.3, 1.8}, {-3, -0.3, 1.8},
-    {-3, 0, 1.8}, {-2.7, 0, 1.575}, {-2.7, -0.3, 1.575}, {-3,
-    -0.3, 1.35}, {-3, 0, 1.35}, {-2.5, 0, 1.125}, {-2.5, -0.3,
-    1.125}, {-2.65, -0.3, 0.9375}, {-2.65, 0, 0.9375}, {-2,
-    -0.3, 0.9}, {-1.9, -0.3, 0.6}, {-1.9, 0, 0.6}, {1.7, 0,
-    1.425}, {1.7, -0.66, 1.425}, {1.7, -0.66, 0.6}, {1.7, 0,
-    0.6}, {2.6, 0, 1.425}, {2.6, -0.66, 1.425}, {3.1, -0.66,
-    0.825}, {3.1, 0, 0.825}, {2.3, 0, 2.1}, {2.3, -0.25, 2.1},
-    {2.4, -0.25, 2.025}, {2.4, 0, 2.025}, {2.7, 0, 2.4}, {2.7,
-    -0.25, 2.4}, {3.3, -0.25, 2.4}, {3.3, 0, 2.4}, {2.8, 0,
-    2.475}, {2.8, -0.25, 2.475}, {3.525, -0.25, 2.49375},
-    {3.525, 0, 2.49375}, {2.9, 0, 2.475}, {2.9, -0.15, 2.475},
-    {3.45, -0.15, 2.5125}, {3.45, 0, 2.5125}, {2.8, 0, 2.4},
-    {2.8, -0.15, 2.4}, {3.2, -0.15, 2.4}, {3.2, 0, 2.4}, {0, 0,
-    3.15}, {0.8, 0, 3.15}, {0.8, -0.45, 3.15}, {0.45, -0.8,
-    3.15}, {0, -0.8, 3.15}, {0, 0, 2.85}, {1.4, 0, 2.4}, {1.4,
-    -0.784, 2.4}, {0.784, -1.4, 2.4}, {0, -1.4, 2.4}, {0.4, 0,
-    2.55}, {0.4, -0.224, 2.55}, {0.224, -0.4, 2.55}, {0, -0.4,
-    2.55}, {1.3, 0, 2.55}, {1.3, -0.728, 2.55}, {0.728, -1.3,
-    2.55}, {0, -1.3, 2.55}, {1.3, 0, 2.4}, {1.3, -0.728, 2.4},
-    {0.728, -1.3, 2.4}, {0, -1.3, 2.4}, {0, 0, 0}, {1.425,
-    -0.798, 0}, {1.5, 0, 0.075}, {1.425, 0, 0}, {0.798, -1.425,
-    0}, {0, -1.5, 0.075}, {0, -1.425, 0}, {1.5, -0.84, 0.075},
-    {0.84, -1.5, 0.075}
-};
-
-static double tex[2][2][2] =
-{
-    { {0.0, 0.0}, {1.0, 0.0} },
-    { {0.0, 1.0}, {1.0, 1.0} }
-};
-#endif  /* defined(_WIN32_WCE) */
-
-
-#endif  /* FREEGLUT_TEAPOT_DATA_H */
-
diff --git a/src/freeglut_videoresize.c b/src/freeglut_videoresize.c
deleted file mode 100644 (file)
index 4d00fb9..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * freeglut_videoresize.c
- *
- * Video resize functions (as defined by GLUT API)
- *
- * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.
- * Written by Pawel W. Olszta, <olszta@sourceforge.net>
- * Creation date: Thu Dec 16 1999
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-#include <GL/freeglut.h>
-#include "freeglut_internal.h"
-
-/*
- * NOTE: functions declared in this file probably will not be implemented.
- */
-
-/* -- INTERFACE FUNCTIONS -------------------------------------------------- */
-
-int  FGAPIENTRY glutVideoResizeGet( GLenum eWhat )            {    return( 0x00 );    }
-void FGAPIENTRY glutSetupVideoResizing( void )                { /* Not implemented */ }
-void FGAPIENTRY glutStopVideoResizing( void )                 { /* Not implemented */ }
-void FGAPIENTRY glutVideoResize( int x, int y, int w, int h ) { /* Not implemented */ }
-void FGAPIENTRY glutVideoPan( int x, int y, int w, int h )    { /* Not implemented */ }
-
-/*** END OF FILE ***/
-
-
-
-
-
-
-
diff --git a/src/freeglut_window.c b/src/freeglut_window.c
deleted file mode 100644 (file)
index 0542017..0000000
+++ /dev/null
@@ -1,2162 +0,0 @@
-/*
- * freeglut_window.c
- *
- * Window management methods.
- *
- * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.
- * Written by Pawel W. Olszta, <olszta@sourceforge.net>
- * Creation date: Fri Dec 3 1999
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-#define FREEGLUT_BUILDING_LIB
-#include <GL/freeglut.h>
-#include "freeglut_internal.h"
-
-#if TARGET_HOST_POSIX_X11
-#include <limits.h>  /* LONG_MAX */
-#include <unistd.h>  /* usleep */
-#endif
-
-#if defined(_WIN32_WCE)
-#   include <Aygshell.h>
-#   ifdef FREEGLUT_LIB_PRAGMAS
-#       pragma comment( lib, "Aygshell.lib" )
-#   endif
-#endif /* defined(_WIN32_WCE) */
-
-
-#if TARGET_HOST_POSIX_X11
-#ifndef GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB
-#define GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB 0x20B2
-#endif
-
-#ifndef GLX_CONTEXT_MAJOR_VERSION_ARB
-#define GLX_CONTEXT_MAJOR_VERSION_ARB 0x2091
-#endif
-
-#ifndef GLX_CONTEXT_MINOR_VERSION_ARB
-#define GLX_CONTEXT_MINOR_VERSION_ARB 0x2092
-#endif
-
-#ifndef GLX_CONTEXT_FLAGS_ARB
-#define GLX_CONTEXT_FLAGS_ARB 0x2094
-#endif
-
-#ifndef GLX_CONTEXT_PROFILE_MASK_ARB
-#define GLX_CONTEXT_PROFILE_MASK_ARB 0x9126
-#endif
-
-#ifndef GLX_CONTEXT_DEBUG_BIT_ARB
-#define GLX_CONTEXT_DEBUG_BIT_ARB 0x0001
-#endif
-
-#ifndef GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB
-#define GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x0002
-#endif
-
-#ifndef GLX_CONTEXT_CORE_PROFILE_BIT_ARB
-#define GLX_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001
-#endif
-
-#ifndef GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB
-#define GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002
-#endif
-
-#ifndef GLX_RGBA_FLOAT_TYPE
-#define GLX_RGBA_FLOAT_TYPE 0x20B9
-#endif
-
-#ifndef GLX_RGBA_FLOAT_BIT
-#define GLX_RGBA_FLOAT_BIT 0x00000004
-#endif
-#endif  /* TARGET_HOST_POSIX_X11 */
-
-
-#if TARGET_HOST_MS_WINDOWS
-/* The following include file is available from SGI but is not standard:
- *   #include <GL/wglext.h>
- * So we copy the necessary parts out of it.
- * XXX: should local definitions for extensions be put in a separate include file?
- */
-typedef const char * (WINAPI * PFNWGLGETEXTENSIONSSTRINGARBPROC) (HDC hdc);
-
-typedef BOOL (WINAPI * PFNWGLCHOOSEPIXELFORMATARBPROC) (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats);
-
-#define WGL_DRAW_TO_WINDOW_ARB         0x2001
-#define WGL_ACCELERATION_ARB           0x2003
-#define WGL_SUPPORT_OPENGL_ARB         0x2010
-#define WGL_DOUBLE_BUFFER_ARB          0x2011
-#define WGL_COLOR_BITS_ARB             0x2014
-#define WGL_ALPHA_BITS_ARB             0x201B
-#define WGL_DEPTH_BITS_ARB             0x2022
-#define WGL_STENCIL_BITS_ARB           0x2023
-#define WGL_FULL_ACCELERATION_ARB      0x2027
-
-#define WGL_SAMPLE_BUFFERS_ARB         0x2041
-#define WGL_SAMPLES_ARB                0x2042
-
-#define WGL_TYPE_RGBA_FLOAT_ARB        0x21A0
-
-#define WGL_FRAMEBUFFER_SRGB_CAPABLE_ARB 0x20A9
-
-#ifndef WGL_ARB_create_context
-#define WGL_ARB_create_context 1
-#ifdef WGL_WGLEXT_PROTOTYPES
-extern HGLRC WINAPI wglCreateContextAttribsARB (HDC, HGLRC, const int *);
-#endif /* WGL_WGLEXT_PROTOTYPES */
-typedef HGLRC (WINAPI * PFNWGLCREATECONTEXTATTRIBSARBPROC) (HDC hDC, HGLRC hShareContext, const int *attribList);
-
-#define WGL_CONTEXT_MAJOR_VERSION_ARB  0x2091
-#define WGL_CONTEXT_MINOR_VERSION_ARB  0x2092
-#define WGL_CONTEXT_LAYER_PLANE_ARB    0x2093
-#define WGL_CONTEXT_FLAGS_ARB          0x2094
-#define WGL_CONTEXT_PROFILE_MASK_ARB   0x9126
-
-#define WGL_CONTEXT_DEBUG_BIT_ARB      0x0001
-#define WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x0002
-
-#define WGL_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001
-#define WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002
-
-#define ERROR_INVALID_VERSION_ARB      0x2095
-#define ERROR_INVALID_PROFILE_ARB      0x2096
-#endif
-
-#endif  /* TARGET_HOST_MS_WINDOWS */
-
-#ifdef WM_TOUCH
-       typedef BOOL (WINAPI *pRegisterTouchWindow)(HWND,ULONG);
-   static pRegisterTouchWindow fghRegisterTouchWindow = (pRegisterTouchWindow)0xDEADBEEF;
-#endif
-
-/* pushing attribute/value pairs into an array */
-#define ATTRIB(a) attributes[where++]=(a)
-#define ATTRIB_VAL(a,v) {ATTRIB(a); ATTRIB(v);}
-
-/*
- * TODO BEFORE THE STABLE RELEASE:
- *
- *  fgChooseFBConfig()      -- OK, but what about glutInitDisplayString()?
- *  fgSetupPixelFormat      -- ignores the display mode settings
- *  fgOpenWindow()          -- check the Win32 version, -iconic handling!
- *  fgCloseWindow()         -- check the Win32 version
- *  glutCreateWindow()      -- Check when default position and size is {-1,-1}
- *  glutCreateSubWindow()   -- Check when default position and size is {-1,-1}
- *  glutDestroyWindow()     -- check the Win32 version
- *  glutSetWindow()         -- check the Win32 version
- *  glutGetWindow()         -- OK
- *  glutSetWindowTitle()    -- check the Win32 version
- *  glutSetIconTitle()      -- check the Win32 version
- *  glutShowWindow()        -- check the Win32 version
- *  glutHideWindow()        -- check the Win32 version
- *  glutIconifyWindow()     -- check the Win32 version
- *  glutReshapeWindow()     -- check the Win32 version
- *  glutPositionWindow()    -- check the Win32 version
- *  glutPushWindow()        -- check the Win32 version
- *  glutPopWindow()         -- check the Win32 version
- */
-
-/* -- PRIVATE FUNCTIONS ---------------------------------------------------- */
-
-static int fghIsLegacyContextVersionRequested( void )
-{
-  return fgState.MajorVersion < 2 || (fgState.MajorVersion == 2 && fgState.MinorVersion <= 1);
-}
-
-static int fghIsLegacyContextRequested( void )
-{
-  return fghIsLegacyContextVersionRequested() &&
-         fgState.ContextFlags == 0 &&
-         fgState.ContextProfile == 0;
-}
-
-static int fghNumberOfAuxBuffersRequested( void )
-{
-  if ( fgState.DisplayMode & GLUT_AUX4 ) {
-    return 4;
-  }
-  if ( fgState.DisplayMode & GLUT_AUX3 ) {
-    return 3;
-  }
-  if ( fgState.DisplayMode & GLUT_AUX2 ) {
-    return 2;
-  }
-  if ( fgState.DisplayMode & GLUT_AUX1 ) { /* NOTE: Same as GLUT_AUX! */
-    return fgState.AuxiliaryBufferNumber;
-  }
-  return 0;
-}
-
-static int fghMapBit( int mask, int from, int to )
-{
-  return ( mask & from ) ? to : 0;
-
-}
-
-static void fghContextCreationError( void )
-{
-    fgError( "Unable to create OpenGL %d.%d context (flags %x, profile %x)",
-             fgState.MajorVersion, fgState.MinorVersion, fgState.ContextFlags,
-             fgState.ContextProfile );
-}
-
-
-/* -- SYSTEM-DEPENDENT PRIVATE FUNCTIONS ------------------------------------ */
-
-#if TARGET_HOST_POSIX_X11
-/*
- * Chooses a visual basing on the current display mode settings
- */
-
-GLXFBConfig* fgChooseFBConfig( int *numcfgs )
-{
-  GLboolean wantIndexedMode = GL_FALSE;
-  int attributes[ 100 ];
-  int where = 0, numAuxBuffers;
-
-  /* First we have to process the display mode settings... */
-  if( fgState.DisplayMode & GLUT_INDEX ) {
-    ATTRIB_VAL( GLX_BUFFER_SIZE, 8 );
-    /*  Buffer size is selected later.  */
-
-    ATTRIB_VAL( GLX_RENDER_TYPE, GLX_COLOR_INDEX_BIT );
-    wantIndexedMode = GL_TRUE;
-  } else {
-    ATTRIB_VAL( GLX_RED_SIZE,   1 );
-    ATTRIB_VAL( GLX_GREEN_SIZE, 1 );
-    ATTRIB_VAL( GLX_BLUE_SIZE,  1 );
-    if( fgState.DisplayMode & GLUT_ALPHA ) {
-      ATTRIB_VAL( GLX_ALPHA_SIZE, 1 );
-    }
-  }
-
-  if( fgState.DisplayMode & GLUT_DOUBLE ) {
-    ATTRIB_VAL( GLX_DOUBLEBUFFER, True );
-  }
-
-  if( fgState.DisplayMode & GLUT_STEREO ) {
-    ATTRIB_VAL( GLX_STEREO, True );
-  }
-
-  if( fgState.DisplayMode & GLUT_DEPTH ) {
-    ATTRIB_VAL( GLX_DEPTH_SIZE, 1 );
-  }
-
-  if( fgState.DisplayMode & GLUT_STENCIL ) {
-    ATTRIB_VAL( GLX_STENCIL_SIZE, 1 );
-  }
-
-  if( fgState.DisplayMode & GLUT_ACCUM ) {
-    ATTRIB_VAL( GLX_ACCUM_RED_SIZE, 1 );
-    ATTRIB_VAL( GLX_ACCUM_GREEN_SIZE, 1 );
-    ATTRIB_VAL( GLX_ACCUM_BLUE_SIZE, 1 );
-    if( fgState.DisplayMode & GLUT_ALPHA ) {
-      ATTRIB_VAL( GLX_ACCUM_ALPHA_SIZE, 1 );
-    }
-  }
-
-  numAuxBuffers = fghNumberOfAuxBuffersRequested();
-  if ( numAuxBuffers > 0 ) {
-    ATTRIB_VAL( GLX_AUX_BUFFERS, numAuxBuffers );
-  }
-
-  if( fgState.DisplayMode & GLUT_SRGB ) {
-    ATTRIB_VAL( GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB, True );
-  }
-
-  if (fgState.DisplayMode & GLUT_MULTISAMPLE) {
-    ATTRIB_VAL(GLX_SAMPLE_BUFFERS, 1);
-    ATTRIB_VAL(GLX_SAMPLES, fgState.SampleNumber);
-  }
-
-  /* Push a terminator at the end of the list */
-  ATTRIB( None );
-
-    {
-        GLXFBConfig * fbconfigArray;  /*  Array of FBConfigs  */
-        GLXFBConfig * fbconfig;       /*  The FBConfig we want  */
-        int fbconfigArraySize;        /*  Number of FBConfigs in the array  */
-
-
-        /*  Get all FBConfigs that match "attributes".  */
-        fbconfigArray = glXChooseFBConfig( fgDisplay.Display,
-                                           fgDisplay.Screen,
-                                           attributes,
-                                           &fbconfigArraySize );
-
-        if (fbconfigArray != NULL)
-        {
-            int result;  /* Returned by glXGetFBConfigAttrib, not checked. */
-
-
-            if( wantIndexedMode )
-            {
-                /*
-                 * In index mode, we want the largest buffer size, i.e. visual
-                 * depth.  Here, FBConfigs are sorted by increasing buffer size
-                 * first, so FBConfigs with the largest size come last.
-                 */
-
-                int bufferSizeMin, bufferSizeMax;
-
-                /*  Get bufferSizeMin.  */
-                result =
-                  glXGetFBConfigAttrib( fgDisplay.Display,
-                                        fbconfigArray[0],
-                                        GLX_BUFFER_SIZE,
-                                        &bufferSizeMin );
-                /*  Get bufferSizeMax.  */
-                result =
-                  glXGetFBConfigAttrib( fgDisplay.Display,
-                                        fbconfigArray[fbconfigArraySize - 1],
-                                        GLX_BUFFER_SIZE,
-                                        &bufferSizeMax );
-
-                if (bufferSizeMax > bufferSizeMin)
-                {
-                    /* 
-                     * Free and reallocate fbconfigArray, keeping only FBConfigs
-                     * with the largest buffer size.
-                     */
-                    XFree(fbconfigArray);
-
-                    /*  Add buffer size token at the end of the list.  */
-                    where--;
-                    ATTRIB_VAL( GLX_BUFFER_SIZE, bufferSizeMax );
-                    ATTRIB( None );
-
-                    fbconfigArray = glXChooseFBConfig( fgDisplay.Display,
-                                                       fgDisplay.Screen,
-                                                       attributes,
-                                                       &fbconfigArraySize );
-                }
-            }
-
-            /*
-             * We now have an array of FBConfigs, the first one being the "best"
-             * one.  So we should return only this FBConfig:
-             *
-             * int fbconfigXID;
-             *
-             *  - pick the XID of the FBConfig we want
-             * result = glXGetFBConfigAttrib( fgDisplay.Display,
-             *                                fbconfigArray[0],
-             *                                GLX_FBCONFIG_ID,
-             *                                &fbconfigXID );
-             *
-             * - free the array
-             * XFree(fbconfigArray);
-             *
-             * - reset "attributes" with the XID
-             * where = 0;
-             * ATTRIB_VAL( GLX_FBCONFIG_ID, fbconfigXID );
-             * ATTRIB( None );
-             *
-             * - get our FBConfig only
-             * fbconfig = glXChooseFBConfig( fgDisplay.Display,
-             *                               fgDisplay.Screen,
-             *                               attributes,
-             *                               &fbconfigArraySize );
-             *
-             * However, for some configurations (for instance multisampling with
-             * Mesa 6.5.2 and ATI drivers), this does not work:
-             * glXChooseFBConfig returns NULL, whereas fbconfigXID is a valid
-             * XID.  Further investigation is needed.
-             *
-             * So, for now, we return the whole array of FBConfigs.  This should
-             * not produce any side effects elsewhere.
-             */
-            fbconfig = fbconfigArray;
-        }
-        else
-        {
-           fbconfig = NULL;
-        }
-
-       if (numcfgs)
-               *numcfgs = fbconfigArraySize;
-
-        return fbconfig;
-    }
-}
-
-
-static void fghFillContextAttributes( int *attributes ) {
-  int where = 0, contextFlags, contextProfile;
-
-  if ( !fghIsLegacyContextVersionRequested() ) {
-    ATTRIB_VAL( GLX_CONTEXT_MAJOR_VERSION_ARB, fgState.MajorVersion );
-    ATTRIB_VAL( GLX_CONTEXT_MINOR_VERSION_ARB, fgState.MinorVersion );
-  }
-
-  contextFlags =
-    fghMapBit( fgState.ContextFlags, GLUT_DEBUG, GLX_CONTEXT_DEBUG_BIT_ARB ) |
-    fghMapBit( fgState.ContextFlags, GLUT_FORWARD_COMPATIBLE, GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB );
-  if ( contextFlags != 0 ) {
-    ATTRIB_VAL( GLX_CONTEXT_FLAGS_ARB, contextFlags );
-  }
-
-  contextProfile =
-    fghMapBit( fgState.ContextProfile, GLUT_CORE_PROFILE, GLX_CONTEXT_CORE_PROFILE_BIT_ARB ) |
-    fghMapBit( fgState.ContextProfile, GLUT_COMPATIBILITY_PROFILE, GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB );
-  if ( contextProfile != 0 ) {
-    ATTRIB_VAL( GLX_CONTEXT_PROFILE_MASK_ARB, contextProfile );
-  }
-
-  ATTRIB( 0 );
-}
-
-typedef GLXContext (*CreateContextAttribsProc)(Display *dpy, GLXFBConfig config,
-                                              GLXContext share_list, Bool direct,
-                                              const int *attrib_list);
-
-static GLXContext fghCreateNewContext( SFG_Window* window )
-{
-  /* for color model calculation */
-  int menu = ( window->IsMenu && !fgStructure.MenuContext );
-  int index_mode = ( fgState.DisplayMode & GLUT_INDEX );
-
-  /* "classic" context creation */
-  Display *dpy = fgDisplay.Display;
-  GLXFBConfig config = *(window->Window.FBConfig);
-  int render_type = ( !menu && index_mode ) ? GLX_COLOR_INDEX_TYPE : GLX_RGBA_TYPE;
-  GLXContext share_list = NULL;
-  Bool direct = ( fgState.DirectContext != GLUT_FORCE_INDIRECT_CONTEXT );
-  GLXContext context;
-
-  /* new context creation */
-  int attributes[9];
-  CreateContextAttribsProc createContextAttribs = (CreateContextAttribsProc) fghGetProcAddress( "glXCreateContextAttribsARB" );
-  /* glXCreateContextAttribsARB not found, yet the user has requested the new context creation */
-  if ( !createContextAttribs && !fghIsLegacyContextRequested() ) {
-    fgWarning( "OpenGL >2.1 context requested but glXCreateContextAttribsARB is not available! Falling back to legacy context creation" );
-       fgState.MajorVersion = 2;
-       fgState.MinorVersion = 1;
-  }
-
-  /* If nothing fancy has been required, simply use the old context creation GLX API entry */
-  if ( fghIsLegacyContextRequested() || !createContextAttribs )
-  {
-    context = glXCreateNewContext( dpy, config, render_type, share_list, direct );
-    if ( context == NULL ) {
-      fghContextCreationError();
-    }
-    return context;
-  }
-
-  /* color index mode is not available anymore with OpenGL 3.0 */
-  if ( render_type == GLX_COLOR_INDEX_TYPE ) {
-    fgWarning( "color index mode is deprecated, using RGBA mode" );
-  }
-
-  fghFillContextAttributes( attributes );
-
-  context = createContextAttribs( dpy, config, share_list, direct, attributes );
-  if ( context == NULL ) {
-    fghContextCreationError();
-  }
-  return context;
-}
-
-
-#define _NET_WM_STATE_TOGGLE    2
-static int fghResizeFullscrToggle(void)
-{
-    XWindowAttributes attributes;
-
-    if(glutGet(GLUT_FULL_SCREEN)) {
-        /* restore original window size */
-        SFG_Window *win = fgStructure.CurrentWindow;
-        fgStructure.CurrentWindow->State.NeedToResize = GL_TRUE;
-        fgStructure.CurrentWindow->State.Width  = win->State.OldWidth;
-        fgStructure.CurrentWindow->State.Height = win->State.OldHeight;
-
-    } else {
-        /* resize the window to cover the entire screen */
-        XGetWindowAttributes(fgDisplay.Display,
-                fgStructure.CurrentWindow->Window.Handle,
-                &attributes);
-        
-        /*
-         * The "x" and "y" members of "attributes" are the window's coordinates
-         * relative to its parent, i.e. to the decoration window.
-         */
-        XMoveResizeWindow(fgDisplay.Display,
-                fgStructure.CurrentWindow->Window.Handle,
-                -attributes.x,
-                -attributes.y,
-                fgDisplay.ScreenWidth,
-                fgDisplay.ScreenHeight);
-    }
-    return 0;
-}
-
-static int fghEwmhFullscrToggle(void)
-{
-    XEvent xev;
-    long evmask = SubstructureRedirectMask | SubstructureNotifyMask;
-
-    if(!fgDisplay.State || !fgDisplay.StateFullScreen) {
-        return -1;
-    }
-
-    xev.type = ClientMessage;
-    xev.xclient.window = fgStructure.CurrentWindow->Window.Handle;
-    xev.xclient.message_type = fgDisplay.State;
-    xev.xclient.format = 32;
-    xev.xclient.data.l[0] = _NET_WM_STATE_TOGGLE;
-    xev.xclient.data.l[1] = fgDisplay.StateFullScreen;
-    xev.xclient.data.l[2] = 0; /* no second property to toggle */
-    xev.xclient.data.l[3] = 1; /* source indication: application */
-    xev.xclient.data.l[4] = 0; /* unused */
-
-    if(!XSendEvent(fgDisplay.Display, fgDisplay.RootWindow, 0, evmask, &xev)) {
-        return -1;
-    }
-    return 0;
-}
-
-static int fghToggleFullscreen(void)
-{
-    /* first try the EWMH (_NET_WM_STATE) method ... */
-    if(fghEwmhFullscrToggle() != -1) {
-        return 0;
-    }
-
-    /* fall back to resizing the window */
-    if(fghResizeFullscrToggle() != -1) {
-        return 0;
-    }
-    return -1;
-}
-
-
-#endif  /* TARGET_HOST_POSIX_X11 */
-
-
-#if TARGET_HOST_MS_WINDOWS
-/*
- * Setup the pixel format for a Win32 window
- */
-
-#if defined(_WIN32_WCE)
-static wchar_t* fghWstrFromStr(const char* str)
-{
-    int i,len=strlen(str);
-    wchar_t* wstr = (wchar_t*)malloc(2*len+2);
-    for(i=0; i<len; i++)
-        wstr[i] = str[i];
-    wstr[len] = 0;
-    return wstr;
-}
-#endif /* defined(_WIN32_WCE) */
-
-
-static void fghFillContextAttributes( int *attributes ) {
-  int where = 0, contextFlags, contextProfile;
-
-  if ( !fghIsLegacyContextVersionRequested() ) {
-    ATTRIB_VAL( WGL_CONTEXT_MAJOR_VERSION_ARB, fgState.MajorVersion );
-    ATTRIB_VAL( WGL_CONTEXT_MINOR_VERSION_ARB, fgState.MinorVersion );
-  }
-
-  contextFlags =
-    fghMapBit( fgState.ContextFlags, GLUT_DEBUG, WGL_CONTEXT_DEBUG_BIT_ARB ) |
-    fghMapBit( fgState.ContextFlags, GLUT_FORWARD_COMPATIBLE, WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB );
-  if ( contextFlags != 0 ) {
-    ATTRIB_VAL( WGL_CONTEXT_FLAGS_ARB, contextFlags );
-  }
-
-  contextProfile =
-    fghMapBit( fgState.ContextProfile, GLUT_CORE_PROFILE, WGL_CONTEXT_CORE_PROFILE_BIT_ARB ) |
-    fghMapBit( fgState.ContextProfile, GLUT_COMPATIBILITY_PROFILE, WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB );
-  if ( contextProfile != 0 ) {
-    ATTRIB_VAL( WGL_CONTEXT_PROFILE_MASK_ARB, contextProfile );
-  }
-
-  ATTRIB( 0 );
-}
-
-static int fghIsExtensionSupported( HDC hdc, const char *extension ) {
-    const char *pWglExtString;
-    PFNWGLGETEXTENSIONSSTRINGARBPROC wglGetEntensionsStringARB =
-      (PFNWGLGETEXTENSIONSSTRINGARBPROC) wglGetProcAddress("wglGetExtensionsStringARB");
-    if ( wglGetEntensionsStringARB == NULL )
-    {
-      return FALSE;
-    }
-    pWglExtString = wglGetEntensionsStringARB( hdc );
-    return ( pWglExtString != NULL ) && ( strstr(pWglExtString, extension) != NULL );
-}
-
-void fgNewWGLCreateContext( SFG_Window* window )
-{
-    HGLRC context;
-    int attributes[9];
-    PFNWGLCREATECONTEXTATTRIBSARBPROC wglCreateContextAttribsARB;
-
-    /* If nothing fancy has been required, leave the context as it is */
-    if ( fghIsLegacyContextRequested() )
-    {
-        return;
-    }
-
-    wglMakeCurrent( window->Window.Device, window->Window.Context );
-
-    if ( !fghIsExtensionSupported( window->Window.Device, "WGL_ARB_create_context" ) )
-    {
-        return;
-    }
-
-    /* new context creation */
-    fghFillContextAttributes( attributes );
-
-    wglCreateContextAttribsARB = (PFNWGLCREATECONTEXTATTRIBSARBPROC) wglGetProcAddress( "wglCreateContextAttribsARB" );
-    if ( wglCreateContextAttribsARB == NULL )
-    {
-        fgError( "wglCreateContextAttribsARB not found" );
-    }
-
-    context = wglCreateContextAttribsARB( window->Window.Device, 0, attributes );
-    if ( context == NULL )
-    {
-        fghContextCreationError();
-    }
-
-    wglMakeCurrent( NULL, NULL );
-    wglDeleteContext( window->Window.Context );
-    window->Window.Context = context;
-}
-
-#if !defined(_WIN32_WCE)
-
-static void fghFillPFD( PIXELFORMATDESCRIPTOR *ppfd, HDC hdc, unsigned char layer_type )
-{
-  int flags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL;
-  if ( fgState.DisplayMode & GLUT_DOUBLE ) {
-        flags |= PFD_DOUBLEBUFFER;
-  }
-  if ( fgState.DisplayMode & GLUT_STEREO ) {
-    flags |= PFD_STEREO;
-  }
-
-#if defined(_MSC_VER)
-#pragma message( "fgSetupPixelFormat(): there is still some work to do here!" )
-#endif
-
-  /* Specify which pixel format do we opt for... */
-  ppfd->nSize = sizeof(PIXELFORMATDESCRIPTOR);
-  ppfd->nVersion = 1;
-  ppfd->dwFlags = flags;
-
-  if( fgState.DisplayMode & GLUT_INDEX ) {
-    ppfd->iPixelType = PFD_TYPE_COLORINDEX;
-    ppfd->cRedBits = 0;
-    ppfd->cGreenBits = 0;
-    ppfd->cBlueBits = 0;
-    ppfd->cAlphaBits = 0;
-  } else {
-    ppfd->iPixelType = PFD_TYPE_RGBA;
-    ppfd->cRedBits = 8;
-    ppfd->cGreenBits = 8;
-    ppfd->cBlueBits = 8;
-    ppfd->cAlphaBits = ( fgState.DisplayMode & GLUT_ALPHA ) ? 8 : 0;
-  }
-
-  ppfd->cColorBits = 24;
-  ppfd->cRedShift = 0;
-  ppfd->cGreenShift = 0;
-  ppfd->cBlueShift = 0;
-  ppfd->cAlphaShift = 0;
-  ppfd->cAccumBits = ( fgState.DisplayMode & GLUT_ACCUM ) ? 1 : 0;
-  ppfd->cAccumRedBits = 0;
-  ppfd->cAccumGreenBits = 0;
-  ppfd->cAccumBlueBits = 0;
-  ppfd->cAccumAlphaBits = 0;
-
-  /* Hmmm, or 32/0 instead of 24/8? */
-  ppfd->cDepthBits = 24;
-  ppfd->cStencilBits = 8;
-
-  ppfd->cAuxBuffers = fghNumberOfAuxBuffersRequested();
-  ppfd->iLayerType = layer_type;
-  ppfd->bReserved = 0;
-  ppfd->dwLayerMask = 0;
-  ppfd->dwVisibleMask = 0;
-  ppfd->dwDamageMask = 0;
-  
-  ppfd->cColorBits = (BYTE) GetDeviceCaps( hdc, BITSPIXEL );
-}
-
-static void fghFillPixelFormatAttributes( int *attributes, const PIXELFORMATDESCRIPTOR *ppfd )
-{
-  int where = 0;
-
-  ATTRIB_VAL( WGL_DRAW_TO_WINDOW_ARB, GL_TRUE );
-  ATTRIB_VAL( WGL_SUPPORT_OPENGL_ARB, GL_TRUE );
-  ATTRIB_VAL( WGL_ACCELERATION_ARB, WGL_FULL_ACCELERATION_ARB );
-
-  ATTRIB_VAL( WGL_COLOR_BITS_ARB, ppfd->cColorBits );
-  ATTRIB_VAL( WGL_ALPHA_BITS_ARB, ppfd->cAlphaBits );
-  ATTRIB_VAL( WGL_DEPTH_BITS_ARB, ppfd->cDepthBits );
-  ATTRIB_VAL( WGL_STENCIL_BITS_ARB, ppfd->cStencilBits );
-
-  ATTRIB_VAL( WGL_DOUBLE_BUFFER_ARB, ( fgState.DisplayMode & GLUT_DOUBLE ) != 0 );
-
-  if ( fgState.DisplayMode & GLUT_SRGB ) {
-    ATTRIB_VAL( WGL_FRAMEBUFFER_SRGB_CAPABLE_ARB, TRUE );
-  }
-
-  ATTRIB_VAL( WGL_SAMPLE_BUFFERS_ARB, GL_TRUE );
-  ATTRIB_VAL( WGL_SAMPLES_ARB, fgState.SampleNumber );
-  ATTRIB( 0 );
-}
-#endif
-
-GLboolean fgSetupPixelFormat( SFG_Window* window, GLboolean checkOnly,
-                              unsigned char layer_type )
-{
-#if defined(_WIN32_WCE)
-    return GL_TRUE;
-#else
-    PIXELFORMATDESCRIPTOR pfd;
-    PIXELFORMATDESCRIPTOR* ppfd = &pfd;
-    int pixelformat;
-    HDC current_hDC;
-    GLboolean success;
-
-    if (checkOnly)
-      current_hDC = CreateDC(TEXT("DISPLAY"), NULL ,NULL ,NULL);
-    else
-      current_hDC = window->Window.Device;
-
-    fghFillPFD( ppfd, current_hDC, layer_type );
-    pixelformat = ChoosePixelFormat( current_hDC, ppfd );
-
-    /* windows hack for multismapling/sRGB */
-    if ( ( fgState.DisplayMode & GLUT_MULTISAMPLE ) ||
-         ( fgState.DisplayMode & GLUT_SRGB ) )
-    {        
-        HGLRC rc, rc_before=wglGetCurrentContext();
-        HWND hWnd;
-        HDC hDC, hDC_before=wglGetCurrentDC();
-        WNDCLASS wndCls;
-
-        /* create a dummy window */
-        ZeroMemory(&wndCls, sizeof(wndCls));
-        wndCls.lpfnWndProc = DefWindowProc;
-        wndCls.hInstance = fgDisplay.Instance;
-        wndCls.style = CS_OWNDC | CS_HREDRAW | CS_VREDRAW;
-        wndCls.lpszClassName = _T("FREEGLUT_dummy");
-        RegisterClass( &wndCls );
-
-        hWnd=CreateWindow(_T("FREEGLUT_dummy"), _T(""), WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_OVERLAPPEDWINDOW , 0,0,0,0, 0, 0, fgDisplay.Instance, 0 );
-        hDC=GetDC(hWnd);
-        SetPixelFormat( hDC, pixelformat, ppfd );
-
-        rc = wglCreateContext( hDC );
-        wglMakeCurrent(hDC, rc);
-
-        if ( fghIsExtensionSupported( hDC, "WGL_ARB_multisample" ) )
-        {
-            PFNWGLCHOOSEPIXELFORMATARBPROC wglChoosePixelFormatARBProc =
-              (PFNWGLCHOOSEPIXELFORMATARBPROC) wglGetProcAddress("wglChoosePixelFormatARB");
-            if ( wglChoosePixelFormatARBProc )
-            {
-                int attributes[100];
-                int iPixelFormat;
-                BOOL bValid;
-                float fAttributes[] = { 0, 0 };
-                UINT numFormats;
-                fghFillPixelFormatAttributes( attributes, ppfd );
-                bValid = wglChoosePixelFormatARBProc(hDC, attributes, fAttributes, 1, &iPixelFormat, &numFormats);
-
-                if ( bValid && numFormats > 0 )
-                {
-                    pixelformat = iPixelFormat;
-                }
-            }
-        }
-
-        wglMakeCurrent( hDC_before, rc_before);
-        wglDeleteContext(rc);
-        ReleaseDC(hWnd, hDC);
-        DestroyWindow(hWnd);
-        UnregisterClass(_T("FREEGLUT_dummy"), fgDisplay.Instance);
-    }
-
-    success = ( pixelformat != 0 ) && ( checkOnly || SetPixelFormat( current_hDC, pixelformat, ppfd ) );
-
-    if (checkOnly)
-        DeleteDC(current_hDC);
-
-    return success;
-#endif /* defined(_WIN32_WCE) */
-}
-
-#endif  /* TARGET_HOST_MS_WINDOWS */
-
-/*
- * Sets the OpenGL context and the fgStructure "Current Window" pointer to
- * the window structure passed in.
- */
-void fgSetWindow ( SFG_Window *window )
-{
-#if TARGET_HOST_POSIX_X11
-    if ( window )
-    {
-        glXMakeContextCurrent(
-            fgDisplay.Display,
-            window->Window.Handle,
-            window->Window.Handle,
-            window->Window.Context
-        );
-    }
-#elif TARGET_HOST_MS_WINDOWS
-    if ( window != fgStructure.CurrentWindow )
-    {
-        if( fgStructure.CurrentWindow )
-            ReleaseDC( fgStructure.CurrentWindow->Window.Handle,
-                       fgStructure.CurrentWindow->Window.Device );
-
-        if ( window )
-        {
-            window->Window.Device = GetDC( window->Window.Handle );
-            wglMakeCurrent(
-                window->Window.Device,
-                window->Window.Context
-            );
-        }
-    }
-#endif
-    fgStructure.CurrentWindow = window;
-}
-
-#if TARGET_HOST_MS_WINDOWS
-
-/* Computes position of corners of window Rect (outer position including
- * decorations) based on the provided client rect and based on the style
- * of the window in question.
- * If posIsOutside is set to true, the input client Rect is taken to follow
- * freeGLUT's window specification convention in which the top-left corner
- * is at the outside of the window, while the size
- * (rect.right-rect.left,rect.bottom-rect.top) is the size of the drawable
- * area.
- */
-void fghComputeWindowRectFromClientArea_UseStyle( const DWORD windowStyle, RECT *clientRect, BOOL posIsOutside )
-{
-    int xBorderWidth = 0, yBorderWidth = 0;
-
-    /* If window has title bar, correct rect for it */
-    if (windowStyle & WS_MAXIMIZEBOX) /* Need to query for WS_MAXIMIZEBOX to see if we have a title bar, the WS_CAPTION query is also true for a WS_DLGFRAME only... */
-        if (posIsOutside)
-            clientRect->bottom += GetSystemMetrics( SM_CYCAPTION );
-        else
-            clientRect->top -= GetSystemMetrics( SM_CYCAPTION );
-
-    /* get width of window's borders (frame), correct rect for it.
-     * Note, borders can be of zero width if style does not specify borders
-     */
-    fghGetBorderWidth(windowStyle, &xBorderWidth, &yBorderWidth);
-    if (posIsOutside)
-    {
-        clientRect->right  += xBorderWidth * 2;
-        clientRect->bottom += yBorderWidth * 2;
-    }
-    else
-    {
-        clientRect->left   -= xBorderWidth;
-        clientRect->right  += xBorderWidth;
-        clientRect->top    -= yBorderWidth;
-        clientRect->bottom += yBorderWidth;
-    }
-}
-
-/* Computes position of corners of window Rect (outer position including
- * decorations) based on the provided client rect and based on the style
- * of the window in question. If the window pointer or the window handle
- * is NULL, a fully decorated window (caption and border) is assumed.
- * Furthermore, if posIsOutside is set to true, the input client Rect is
- * taken to follow freeGLUT's window specification convention in which the
- * top-left corner is at the outside of the window, while the size
- * (rect.right-rect.left,rect.bottom-rect.top) is the size of the drawable
- * area.
-*/
-void fghComputeWindowRectFromClientArea_QueryWindow( const SFG_Window *window, RECT *clientRect, BOOL posIsOutside )
-{
-    DWORD windowStyle = 0;
-
-    if (window && window->Window.Handle)
-        windowStyle = GetWindowLong(window->Window.Handle, GWL_STYLE);
-    else
-        windowStyle = WS_OVERLAPPEDWINDOW;
-
-    fghComputeWindowRectFromClientArea_UseStyle(windowStyle, clientRect, posIsOutside);
-}
-
-/* Computes position of corners of client area (drawable area) of a window
- * based on the provided window Rect (outer position including decorations)
- * and based on the style of the window in question. If the window pointer
- * or the window handle is NULL, a fully decorated window (caption and
- * border) is assumed.
- * Furthermore, if wantPosOutside is set to true, the output client Rect
- * will follow freeGLUT's window specification convention in which the
- * top-left corner is at the outside of the window, the size
- * (rect.right-rect.left,rect.bottom-rect.top) is the size of the drawable
- * area.
- */
-void fghComputeClientAreaFromWindowRect( const SFG_Window *window, RECT *windowRect, BOOL wantPosOutside )
-{
-    DWORD windowStyle = 0;
-    int xBorderWidth = 0, yBorderWidth = 0;
-
-    if (window && window->Window.Handle)
-        windowStyle = GetWindowLong(window->Window.Handle, GWL_STYLE);
-    else
-        windowStyle = WS_OVERLAPPEDWINDOW;
-
-    /* If window has title bar, correct rect for it */
-    if (windowStyle & WS_MAXIMIZEBOX) /* Need to query for WS_MAXIMIZEBOX to see if we have a title bar, the WS_CAPTION query is also true for a WS_DLGFRAME only... */
-        if (wantPosOutside)
-            windowRect->bottom -= GetSystemMetrics( SM_CYCAPTION );
-        else
-            windowRect->top    += GetSystemMetrics( SM_CYCAPTION );
-
-    /* get width of window's borders (frame), correct rect for it.
-     * Note, borders can be of zero width if style does not specify borders
-     */
-    fghGetBorderWidth(windowStyle, &xBorderWidth, &yBorderWidth);
-    if (wantPosOutside)
-    {
-        windowRect->right  -= xBorderWidth * 2;
-        windowRect->bottom -= yBorderWidth * 2;
-    }
-    else
-    {
-        windowRect->left   += xBorderWidth;
-        windowRect->right  -= xBorderWidth;
-        windowRect->top    += yBorderWidth;
-        windowRect->bottom -= yBorderWidth;
-    }
-}
-
-/* Gets the rect describing the client area (drawable area) of the
- * specified window.
- * Returns an empty rect if window pointer or window handle is NULL.
- * If wantPosOutside is set to true, the output client Rect
- * will follow freeGLUT's window specification convention in which the
- * top-left corner is at the outside of the window, while the size
- * (rect.right-rect.left,rect.bottom-rect.top) is the size of the drawable
- * area.
- */
-RECT fghGetClientArea( const SFG_Window *window, BOOL wantPosOutside )
-{
-    RECT windowRect = {0,0,0,0};
-
-    freeglut_return_val_if_fail((window && window->Window.Handle),windowRect);
-    
-    /*
-     * call GetWindowRect()
-     * (this returns the pixel coordinates of the outside of the window)
-     */
-    GetWindowRect( window->Window.Handle, &windowRect );
-
-    /* Then correct the results */
-    fghComputeClientAreaFromWindowRect(window, &windowRect, wantPosOutside);
-
-    return windowRect;
-}
-
-/* Returns the width of the window borders based on the window's style.
- */
-void fghGetBorderWidth(const DWORD windowStyle, int* xBorderWidth, int* yBorderWidth)
-{
-    if (windowStyle & WS_THICKFRAME)
-    {
-        *xBorderWidth = GetSystemMetrics(SM_CXSIZEFRAME);
-        *yBorderWidth = GetSystemMetrics(SM_CYSIZEFRAME);
-    }
-    else if (windowStyle & WS_DLGFRAME)
-    {
-        *xBorderWidth = GetSystemMetrics(SM_CXFIXEDFRAME);
-        *yBorderWidth = GetSystemMetrics(SM_CYFIXEDFRAME);
-    }
-    else
-    {
-        *xBorderWidth = 0;
-        *yBorderWidth = 0;
-    }
-}
-
-#if(WINVER >= 0x500)
-typedef struct
-{
-      int *x;
-      int *y;
-      const char *name;
-} m_proc_t;
-
-static BOOL CALLBACK m_proc(HMONITOR mon,
-                           HDC hdc,
-                           LPRECT rect,
-                           LPARAM data)
-{
-      m_proc_t *dp=(m_proc_t *)data;
-      MONITORINFOEX info;
-      BOOL res;
-      info.cbSize=sizeof(info);
-      res=GetMonitorInfo(mon,(LPMONITORINFO)&info);
-      if( res )
-      {
-          if( strcmp(dp->name,info.szDevice)==0 )
-          {
-              *(dp->x)=info.rcMonitor.left;
-              *(dp->y)=info.rcMonitor.top;
-              return FALSE;
-          }
-      }
-      return TRUE;
-}
-
-/* 
- * this function returns the origin of the screen identified by
- * fgDisplay.DisplayName, and 0 otherwise.
- * This is used in fgOpenWindow to open the gamemode window on the screen
- * identified by the -display command line argument. The function should
- * not be called otherwise.
- */
-
-static void get_display_origin(int *xp,int *yp)
-{
-    *xp = 0;
-    *yp = 0;
-
-    if( fgDisplay.DisplayName )
-    {
-        m_proc_t st;
-        st.x=xp;
-        st.y=yp;
-        st.name=fgDisplay.DisplayName;
-        EnumDisplayMonitors(0,0,m_proc,(LPARAM)&st);
-    }
-}
-#else
-#pragma message( "-display parameter only works if compiled with WINVER >= 0x0500")
-
-static void get_display_origin(int *xp,int *yp)
-{
-    *xp = 0;
-    *yp = 0;
-
-    if( fgDisplay.DisplayName )
-    {
-        fgWarning( "for working -display support FreeGLUT must be compiled with WINVER >= 0x0500");
-    }
-}
-#endif
-#endif
-
-
-#if TARGET_HOST_POSIX_X11
-static Bool fghWindowIsVisible( Display *display, XEvent *event, XPointer arg)
-{
-    Window window = (Window)arg;
-    return (event->type == MapNotify) && (event->xmap.window == window);
-}
-#endif
-
-
-/*
- * Opens a window. Requires a SFG_Window object created and attached
- * to the freeglut structure. OpenGL context is created here.
- */
-void fgOpenWindow( SFG_Window* window, const char* title,
-                   GLboolean positionUse, int x, int y,
-                   GLboolean sizeUse, int w, int h,
-                   GLboolean gameMode, GLboolean isSubWindow )
-{
-#if TARGET_HOST_POSIX_X11
-    XVisualInfo * visualInfo = NULL;
-    XSetWindowAttributes winAttr;
-    XTextProperty textProperty;
-    XSizeHints sizeHints;
-    XWMHints wmHints;
-    XEvent eventReturnBuffer; /* return buffer required for a call */
-    unsigned long mask;
-    int num_FBConfigs, i;
-    unsigned int current_DisplayMode = fgState.DisplayMode ;
-
-    /* Save the display mode if we are creating a menu window */
-    if( window->IsMenu && ( ! fgStructure.MenuContext ) )
-        fgState.DisplayMode = GLUT_DOUBLE | GLUT_RGB ;
-
-    window->Window.FBConfig = fgChooseFBConfig( &num_FBConfigs );
-
-    if( window->IsMenu && ( ! fgStructure.MenuContext ) )
-        fgState.DisplayMode = current_DisplayMode ;
-
-    if( ! window->Window.FBConfig )
-    {
-        /*
-         * The "fgChooseFBConfig" returned a null meaning that the visual
-         * context is not available.
-         * Try a couple of variations to see if they will work.
-         */
-        if( !( fgState.DisplayMode & GLUT_DOUBLE ) )
-        {
-            fgState.DisplayMode |= GLUT_DOUBLE ;
-            window->Window.FBConfig = fgChooseFBConfig( &num_FBConfigs );
-            fgState.DisplayMode &= ~GLUT_DOUBLE;
-        }
-
-        if( fgState.DisplayMode & GLUT_MULTISAMPLE )
-        {
-            fgState.DisplayMode &= ~GLUT_MULTISAMPLE ;
-            window->Window.FBConfig = fgChooseFBConfig( &num_FBConfigs );
-            fgState.DisplayMode |= GLUT_MULTISAMPLE;
-        }
-    }
-
-    FREEGLUT_INTERNAL_ERROR_EXIT( window->Window.FBConfig != NULL,
-                                  "FBConfig with necessary capabilities not found", "fgOpenWindow" );
-
-    /*  Get the X visual.  */
-    for (i = 0; i < num_FBConfigs; i++) {
-           visualInfo = glXGetVisualFromFBConfig( fgDisplay.Display,
-                                                  window->Window.FBConfig[i] );
-           if (visualInfo)
-               break;
-    }
-
-    FREEGLUT_INTERNAL_ERROR_EXIT( visualInfo != NULL,
-                                  "visualInfo could not be retrieved from FBConfig", "fgOpenWindow" );
-
-    /*
-     * XXX HINT: the masks should be updated when adding/removing callbacks.
-     * XXX       This might speed up message processing. Is that true?
-     * XXX
-     * XXX A: Not appreciably, but it WILL make it easier to debug.
-     * XXX    Try tracing old GLUT and try tracing freeglut.  Old GLUT
-     * XXX    turns off events that it doesn't need and is a whole lot
-     * XXX    more pleasant to trace.  (Think mouse-motion!  Tons of
-     * XXX    ``bonus'' GUI events stream in.)
-     */
-    winAttr.event_mask        =
-        StructureNotifyMask | SubstructureNotifyMask | ExposureMask |
-        ButtonPressMask | ButtonReleaseMask | KeyPressMask | KeyReleaseMask |
-        VisibilityChangeMask | EnterWindowMask | LeaveWindowMask |
-        PointerMotionMask | ButtonMotionMask;
-    winAttr.background_pixmap = None;
-    winAttr.background_pixel  = 0;
-    winAttr.border_pixel      = 0;
-
-    winAttr.colormap = XCreateColormap(
-        fgDisplay.Display, fgDisplay.RootWindow,
-        visualInfo->visual, AllocNone
-    );
-
-    mask = CWBackPixmap | CWBorderPixel | CWColormap | CWEventMask;
-
-    if( window->IsMenu || ( gameMode == GL_TRUE ) )
-    {
-        winAttr.override_redirect = True;
-        mask |= CWOverrideRedirect;
-    }
-
-    if( ! positionUse )
-        x = y = -1; /* default window position */
-    if( ! sizeUse )
-        w = h = 300; /* default window size */
-
-    window->Window.Handle = XCreateWindow(
-        fgDisplay.Display,
-        window->Parent == NULL ? fgDisplay.RootWindow :
-        window->Parent->Window.Handle,
-        x, y, w, h, 0,
-        visualInfo->depth, InputOutput,
-        visualInfo->visual, mask,
-        &winAttr
-    );
-
-    /*
-     * The GLX context creation, possibly trying the direct context rendering
-     *  or else use the current context if the user has so specified
-     */
-
-    if( window->IsMenu )
-    {
-        /*
-         * If there isn't already an OpenGL rendering context for menu
-         * windows, make one
-         */
-        if( !fgStructure.MenuContext )
-        {
-            fgStructure.MenuContext =
-                (SFG_MenuContext *)malloc( sizeof(SFG_MenuContext) );
-            fgStructure.MenuContext->MContext = fghCreateNewContext( window );
-        }
-
-        /* window->Window.Context = fgStructure.MenuContext->MContext; */
-        window->Window.Context = fghCreateNewContext( window );
-    }
-    else if( fgState.UseCurrentContext )
-    {
-        window->Window.Context = glXGetCurrentContext( );
-
-        if( ! window->Window.Context )
-            window->Window.Context = fghCreateNewContext( window );
-    }
-    else
-        window->Window.Context = fghCreateNewContext( window );
-
-#if !defined( __FreeBSD__ ) && !defined( __NetBSD__ )
-    if(  !glXIsDirect( fgDisplay.Display, window->Window.Context ) )
-    {
-      if( fgState.DirectContext == GLUT_FORCE_DIRECT_CONTEXT )
-        fgError( "Unable to force direct context rendering for window '%s'",
-                 title );
-    }
-#endif
-
-    /*
-     * XXX Assume the new window is visible by default
-     * XXX Is this a  safe assumption?
-     */
-    window->State.Visible = GL_TRUE;
-
-    sizeHints.flags = 0;
-    if ( positionUse )
-        sizeHints.flags |= USPosition;
-    if ( sizeUse )
-        sizeHints.flags |= USSize;
-
-    /*
-     * Fill in the size hints values now (the x, y, width and height
-     * settings are obsolete, are there any more WMs that support them?)
-     * Unless the X servers actually stop supporting these, we should
-     * continue to fill them in.  It is *not* our place to tell the user
-     * that they should replace a window manager that they like, and which
-     * works, just because *we* think that it's not "modern" enough.
-     */
-    sizeHints.x      = x;
-    sizeHints.y      = y;
-    sizeHints.width  = w;
-    sizeHints.height = h;
-
-    wmHints.flags = StateHint;
-    wmHints.initial_state = fgState.ForceIconic ? IconicState : NormalState;
-    /* Prepare the window and iconified window names... */
-    XStringListToTextProperty( (char **) &title, 1, &textProperty );
-
-    XSetWMProperties(
-        fgDisplay.Display,
-        window->Window.Handle,
-        &textProperty,
-        &textProperty,
-        0,
-        0,
-        &sizeHints,
-        &wmHints,
-        NULL
-    );
-    XFree( textProperty.value );
-
-    XSetWMProtocols( fgDisplay.Display, window->Window.Handle,
-                     &fgDisplay.DeleteWindow, 1 );
-
-    glXMakeContextCurrent(
-        fgDisplay.Display,
-        window->Window.Handle,
-        window->Window.Handle,
-        window->Window.Context
-    );
-
-    /* register extension events _before_ window is mapped */
-    #ifdef HAVE_X11_EXTENSIONS_XINPUT2_H
-       fgRegisterDevices( fgDisplay.Display, &(window->Window.Handle) );
-    #endif
-
-    XMapWindow( fgDisplay.Display, window->Window.Handle );
-
-    XFree(visualInfo);
-
-    if( !isSubWindow)
-        XPeekIfEvent( fgDisplay.Display, &eventReturnBuffer, &fghWindowIsVisible, (XPointer)(window->Window.Handle) );
-
-#elif TARGET_HOST_MS_WINDOWS
-
-    WNDCLASS wc;
-    DWORD flags   = 0;
-    DWORD exFlags = 0;
-    ATOM atom;
-
-    /* Grab the window class we have registered on glutInit(): */
-    atom = GetClassInfo( fgDisplay.Instance, _T("FREEGLUT"), &wc );
-    FREEGLUT_INTERNAL_ERROR_EXIT ( atom, "Window Class Info Not Found",
-                                   "fgOpenWindow" );
-
-    /* Determine window style flags*/
-    if( gameMode )
-    {
-        FREEGLUT_INTERNAL_ERROR_EXIT ( window->Parent == NULL,
-                                       "Game mode being invoked on a subwindow",
-                                       "fgOpenWindow" );
-
-        /*
-         * Set the window creation flags appropriately to make the window
-         * entirely visible:
-         */
-        flags = WS_POPUP | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_VISIBLE;
-    }
-    else
-    {
-        flags = WS_CLIPSIBLINGS | WS_CLIPCHILDREN;
-
-        /*
-         * There's a small difference between creating the top, child and
-         * menu windows
-         */
-        if ( window->IsMenu )
-        {
-            flags |= WS_POPUP;
-            exFlags |= WS_EX_TOOLWINDOW;
-        }
-#if defined(_WIN32_WCE)
-        /* no decorations for windows CE */
-#else
-        /* if this is not a subwindow (child), set its style based on the requested display mode */
-        else if( window->Parent == NULL )
-            if ( fgState.DisplayMode & GLUT_BORDERLESS )
-            {
-                /* no window decorations needed */
-            }
-            else if ( fgState.DisplayMode & GLUT_CAPTIONLESS )
-                /* only window decoration is a border, no title bar or buttons */
-                flags |= WS_DLGFRAME;
-            else
-                /* window decoration are a border, title bar and buttons.
-                 * NB: we later query whether the window has a title bar or
-                 * not by testing for the maximize button, as the test for
-                 * WS_CAPTION can be true without the window having a title
-                 * bar. This style WS_OVERLAPPEDWINDOW gives you a maximize
-                 * button. */
-                flags |= WS_OVERLAPPEDWINDOW;
-#endif
-        else
-            /* subwindows always have no decoration, but are marked as a child window to the OS */
-            flags |= WS_CHILD;
-    }
-
-    /* determine window size and position */
-    if( gameMode )
-    {
-        /* if in gamemode, query the origin of specified by the -display
-         * command line parameter (if any) and offset the upper-left corner
-         * of the window so we create the window on that screen.
-         * The -display argument doesn't do anything if not trying to enter
-         * gamemode.
-         */
-        int xoff=0, yoff=0;
-        get_display_origin(&xoff,&yoff);
-        x += xoff;
-        y += yoff;
-    }
-    if( !positionUse )
-    {
-        x = CW_USEDEFAULT;
-        y = CW_USEDEFAULT;
-    }
-    if( !sizeUse )
-    {
-        if( ! window->IsMenu )
-        {
-            w = CW_USEDEFAULT;
-            h = CW_USEDEFAULT;
-        }
-        else /* fail safe - Windows can make a window of size (0, 0) */
-            w = h = 300; /* default window size */
-    }
-    /* store requested client area width and height */
-    window->State.Width = w;
-    window->State.Height = h;
-
-#if !defined(_WIN32_WCE)    /* no decorations for windows CE */
-    if( sizeUse )
-    {
-        RECT windowRect;
-        /*
-         * Update the window dimensions, taking the window decorations
-         * into account.  FreeGLUT is to create the window with the
-         * topleft outside corner at (x,y) and with client area
-         * dimensions (w,h).
-         * note: don't need to do this when w=h=CW_USEDEFAULT, so in the
-         * if( sizeUse ) here is convenient.
-         */
-        windowRect.left     = x;
-        windowRect.top      = y;
-        windowRect.right    = x+w;
-        windowRect.bottom   = y+h;
-
-        fghComputeWindowRectFromClientArea_UseStyle(flags,&windowRect,TRUE);
-
-        w = windowRect.right - windowRect.left;
-        h = windowRect.bottom- windowRect.top;
-    }
-#endif /* !defined(_WIN32_WCE) */
-
-#if defined(_WIN32_WCE)
-    {
-        wchar_t* wstr = fghWstrFromStr(title);
-
-        window->Window.Handle = CreateWindow(
-            _T("FREEGLUT"),
-            wstr,
-            WS_VISIBLE | WS_POPUP,
-            0,0, 240,320,
-            NULL,
-            NULL,
-            fgDisplay.Instance,
-            (LPVOID) window
-        );
-
-        free(wstr);
-
-        SHFullScreen(window->Window.Handle, SHFS_HIDESTARTICON);
-        SHFullScreen(window->Window.Handle, SHFS_HIDESIPBUTTON);
-        SHFullScreen(window->Window.Handle, SHFS_HIDETASKBAR);
-        MoveWindow(window->Window.Handle, 0, 0, 240, 320, TRUE);
-        ShowWindow(window->Window.Handle, SW_SHOW);
-        UpdateWindow(window->Window.Handle);
-    }
-#else
-    window->Window.Handle = CreateWindowEx(
-        exFlags,
-        _T("FREEGLUT"),
-        title,
-        flags,
-        x, y, w, h,
-        (HWND) window->Parent == NULL ? NULL : window->Parent->Window.Handle,
-        (HMENU) NULL,
-        fgDisplay.Instance,
-        (LPVOID) window
-    );
-#endif /* defined(_WIN32_WCE) */
-
-    if( !( window->Window.Handle ) )
-        fgError( "Failed to create a window (%s)!", title );
-
-#if !defined(_WIN32_WCE)
-    /* Need to set requested style again, apparently Windows doesn't listen when requesting windows without title bar or borders */
-    SetWindowLong(window->Window.Handle, GWL_STYLE, flags);
-    SetWindowPos(window->Window.Handle, HWND_TOP, 0,0,0,0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
-#endif /* defined(_WIN32_WCE) */
-
-    /* Make a menu window always on top - fix Feature Request 947118 */
-    if( window->IsMenu || gameMode )
-        SetWindowPos(
-                        window->Window.Handle,
-                        HWND_TOPMOST,
-                        0, 0, 0, 0,
-                        SWP_NOMOVE | SWP_NOSIZE
-                    );
-
-    /* Enable multitouch: additional flag TWF_FINETOUCH, TWF_WANTPALM */
-    #ifdef WM_TOUCH
-        if (fghRegisterTouchWindow == (pRegisterTouchWindow)0xDEADBEEF) 
-                       fghRegisterTouchWindow = (pRegisterTouchWindow)GetProcAddress(GetModuleHandle("user32"),"RegisterTouchWindow");
-               if (fghRegisterTouchWindow)
-             fghRegisterTouchWindow( window->Window.Handle, TWF_FINETOUCH | TWF_WANTPALM );
-    #endif
-
-#if defined(_WIN32_WCE)
-    ShowWindow( window->Window.Handle, SW_SHOW );
-#else
-    ShowWindow( window->Window.Handle,
-                fgState.ForceIconic ? SW_SHOWMINIMIZED : SW_SHOW );
-#endif /* defined(_WIN32_WCE) */
-
-    UpdateWindow( window->Window.Handle );
-    ShowCursor( TRUE );  /* XXX Old comments say "hide cursor"! */
-
-#endif
-
-    fgSetWindow( window );
-
-    window->Window.DoubleBuffered =
-        ( fgState.DisplayMode & GLUT_DOUBLE ) ? 1 : 0;
-
-    if ( ! window->Window.DoubleBuffered )
-    {
-        glDrawBuffer ( GL_FRONT );
-        glReadBuffer ( GL_FRONT );
-    }
-}
-
-/*
- * Closes a window, destroying the frame and OpenGL context
- */
-void fgCloseWindow( SFG_Window* window )
-{
-    /* if we're in gamemode and we're closing the gamemode window,
-     * call glutLeaveGameMode first to make sure the gamemode is
-     * properly closed before closing the window
-     */
-    if (fgStructure.GameModeWindow != NULL && fgStructure.GameModeWindow->ID==window->ID)
-        glutLeaveGameMode();
-
-#if TARGET_HOST_POSIX_X11
-
-    if( window->Window.Context )
-        glXDestroyContext( fgDisplay.Display, window->Window.Context );
-    XFree( window->Window.FBConfig );
-
-    if( window->Window.Handle ) {
-        XDestroyWindow( fgDisplay.Display, window->Window.Handle );
-    }
-    /* XFlush( fgDisplay.Display ); */ /* XXX Shouldn't need this */
-
-#elif TARGET_HOST_MS_WINDOWS
-
-    /* Make sure we don't close a window with current context active */
-    if( fgStructure.CurrentWindow == window )
-        wglMakeCurrent( NULL, NULL );
-
-    /*
-     * Step through the list of windows.  If the rendering context
-     * is not being used by another window, then we delete it.
-     */
-    {
-        int used = FALSE ;
-        SFG_Window *iter ;
-
-        for( iter = (SFG_Window *)fgStructure.Windows.First;
-             iter;
-             iter = (SFG_Window *)iter->Node.Next )
-        {
-            if( ( iter->Window.Context == window->Window.Context ) &&
-                ( iter != window ) )
-                used = TRUE;
-        }
-
-        if( ! used )
-            wglDeleteContext( window->Window.Context );
-    }
-
-    DestroyWindow( window->Window.Handle );
-#endif
-}
-
-
-/* -- INTERFACE FUNCTIONS -------------------------------------------------- */
-
-/*
- * Creates a new top-level freeglut window
- */
-int FGAPIENTRY glutCreateWindow( const char* title )
-{
-    /* XXX GLUT does not exit; it simply calls "glutInit" quietly if the
-     * XXX application has not already done so.  The "freeglut" community
-     * XXX decided not to go this route (freeglut-developer e-mail from
-     * XXX Steve Baker, 12/16/04, 4:22 PM CST, "Re: [Freeglut-developer]
-     * XXX Desired 'freeglut' behaviour when there is no current window"
-     */
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutCreateWindow" );
-
-    return fgCreateWindow( NULL, title, fgState.Position.Use,
-                           fgState.Position.X, fgState.Position.Y,
-                           fgState.Size.Use, fgState.Size.X, fgState.Size.Y,
-                           GL_FALSE, GL_FALSE )->ID;
-}
-
-#if TARGET_HOST_MS_WINDOWS
-int FGAPIENTRY __glutCreateWindowWithExit( const char *title, void (__cdecl *exit_function)(int) )
-{
-  __glutExitFunc = exit_function;
-  return glutCreateWindow( title );
-}
-#endif
-
-/*
- * This function creates a sub window.
- */
-int FGAPIENTRY glutCreateSubWindow( int parentID, int x, int y, int w, int h )
-{
-    int ret = 0;
-    SFG_Window* window = NULL;
-    SFG_Window* parent = NULL;
-
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutCreateSubWindow" );
-    parent = fgWindowByID( parentID );
-    freeglut_return_val_if_fail( parent != NULL, 0 );
-    if ( x < 0 )
-    {
-        x = parent->State.Width + x ;
-        if ( w >= 0 ) x -= w ;
-    }
-
-    if ( w < 0 ) w = parent->State.Width - x + w ;
-    if ( w < 0 )
-    {
-        x += w ;
-        w = -w ;
-    }
-
-    if ( y < 0 )
-    {
-        y = parent->State.Height + y ;
-        if ( h >= 0 ) y -= h ;
-    }
-
-    if ( h < 0 ) h = parent->State.Height - y + h ;
-    if ( h < 0 )
-    {
-        y += h ;
-        h = -h ;
-    }
-
-    window = fgCreateWindow( parent, "", GL_TRUE, x, y, GL_TRUE, w, h, GL_FALSE, GL_FALSE );
-    ret = window->ID;
-
-    return ret;
-}
-
-/*
- * Destroys a window and all of its subwindows
- */
-void FGAPIENTRY glutDestroyWindow( int windowID )
-{
-    SFG_Window* window;
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutDestroyWindow" );
-    window = fgWindowByID( windowID );
-    freeglut_return_if_fail( window != NULL );
-    {
-        fgExecutionState ExecState = fgState.ExecState;
-        fgAddToWindowDestroyList( window );
-        fgState.ExecState = ExecState;
-    }
-}
-
-/*
- * This function selects the current window
- */
-void FGAPIENTRY glutSetWindow( int ID )
-{
-    SFG_Window* window = NULL;
-
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSetWindow" );
-    if( fgStructure.CurrentWindow != NULL )
-        if( fgStructure.CurrentWindow->ID == ID )
-            return;
-
-    window = fgWindowByID( ID );
-    if( window == NULL )
-    {
-        fgWarning( "glutSetWindow(): window ID %d not found!", ID );
-        return;
-    }
-
-    fgSetWindow( window );
-}
-
-/*
- * This function returns the ID number of the current window, 0 if none exists
- */
-int FGAPIENTRY glutGetWindow( void )
-{
-    SFG_Window *win = fgStructure.CurrentWindow;
-    /*
-     * Since GLUT did not throw an error if this function was called without a prior call to
-     * "glutInit", this function shouldn't do so here.  Instead let us return a zero.
-     * See Feature Request "[ 1307049 ] glutInit check".
-     */
-    if ( ! fgState.Initialised )
-        return 0;
-
-    while ( win && win->IsMenu )
-        win = win->Parent;
-    return win ? win->ID : 0;
-}
-
-/*
- * This function makes the current window visible
- */
-void FGAPIENTRY glutShowWindow( void )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutShowWindow" );
-    FREEGLUT_EXIT_IF_NO_WINDOW ( "glutShowWindow" );
-
-#if TARGET_HOST_POSIX_X11
-
-    XMapWindow( fgDisplay.Display, fgStructure.CurrentWindow->Window.Handle );
-    XFlush( fgDisplay.Display ); /* XXX Shouldn't need this */
-
-#elif TARGET_HOST_MS_WINDOWS
-
-    ShowWindow( fgStructure.CurrentWindow->Window.Handle, SW_SHOW );
-
-#endif
-
-    fgStructure.CurrentWindow->State.Redisplay = GL_TRUE;
-}
-
-/*
- * This function hides the current window
- */
-void FGAPIENTRY glutHideWindow( void )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutHideWindow" );
-    FREEGLUT_EXIT_IF_NO_WINDOW ( "glutHideWindow" );
-
-#if TARGET_HOST_POSIX_X11
-
-    if( fgStructure.CurrentWindow->Parent == NULL )
-        XWithdrawWindow( fgDisplay.Display,
-                         fgStructure.CurrentWindow->Window.Handle,
-                         fgDisplay.Screen );
-    else
-        XUnmapWindow( fgDisplay.Display,
-                      fgStructure.CurrentWindow->Window.Handle );
-    XFlush( fgDisplay.Display ); /* XXX Shouldn't need this */
-
-#elif TARGET_HOST_MS_WINDOWS
-
-    ShowWindow( fgStructure.CurrentWindow->Window.Handle, SW_HIDE );
-
-#endif
-
-    fgStructure.CurrentWindow->State.Redisplay = GL_FALSE;
-}
-
-/*
- * Iconify the current window (top-level windows only)
- */
-void FGAPIENTRY glutIconifyWindow( void )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutIconifyWindow" );
-    FREEGLUT_EXIT_IF_NO_WINDOW ( "glutIconifyWindow" );
-
-    fgStructure.CurrentWindow->State.Visible   = GL_FALSE;
-#if TARGET_HOST_POSIX_X11
-
-    XIconifyWindow( fgDisplay.Display, fgStructure.CurrentWindow->Window.Handle,
-                    fgDisplay.Screen );
-    XFlush( fgDisplay.Display ); /* XXX Shouldn't need this */
-
-#elif TARGET_HOST_MS_WINDOWS
-
-    ShowWindow( fgStructure.CurrentWindow->Window.Handle, SW_MINIMIZE );
-
-#endif
-
-    fgStructure.CurrentWindow->State.Redisplay = GL_FALSE;
-}
-
-/*
- * Set the current window's title
- */
-void FGAPIENTRY glutSetWindowTitle( const char* title )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSetWindowTitle" );
-    FREEGLUT_EXIT_IF_NO_WINDOW ( "glutSetWindowTitle" );
-    if( ! fgStructure.CurrentWindow->Parent )
-    {
-#if TARGET_HOST_POSIX_X11
-
-        XTextProperty text;
-
-        text.value = (unsigned char *) title;
-        text.encoding = XA_STRING;
-        text.format = 8;
-        text.nitems = strlen( title );
-
-        XSetWMName(
-            fgDisplay.Display,
-            fgStructure.CurrentWindow->Window.Handle,
-            &text
-        );
-
-        XFlush( fgDisplay.Display ); /* XXX Shouldn't need this */
-
-#elif TARGET_HOST_MS_WINDOWS
-#    ifdef _WIN32_WCE
-        {
-            wchar_t* wstr = fghWstrFromStr(title);
-            SetWindowText( fgStructure.CurrentWindow->Window.Handle, wstr );
-            free(wstr);
-        }
-#    else
-        SetWindowText( fgStructure.CurrentWindow->Window.Handle, title );
-#    endif
-
-#endif
-    }
-}
-
-/*
- * Set the current window's iconified title
- */
-void FGAPIENTRY glutSetIconTitle( const char* title )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSetIconTitle" );
-    FREEGLUT_EXIT_IF_NO_WINDOW ( "glutSetIconTitle" );
-
-    if( ! fgStructure.CurrentWindow->Parent )
-    {
-#if TARGET_HOST_POSIX_X11
-
-        XTextProperty text;
-
-        text.value = (unsigned char *) title;
-        text.encoding = XA_STRING;
-        text.format = 8;
-        text.nitems = strlen( title );
-
-        XSetWMIconName(
-            fgDisplay.Display,
-            fgStructure.CurrentWindow->Window.Handle,
-            &text
-        );
-
-        XFlush( fgDisplay.Display ); /* XXX Shouldn't need this */
-
-#elif TARGET_HOST_MS_WINDOWS
-#    ifdef _WIN32_WCE
-        {
-            wchar_t* wstr = fghWstrFromStr(title);
-            SetWindowText( fgStructure.CurrentWindow->Window.Handle, wstr );
-            free(wstr);
-        }
-#    else
-        SetWindowText( fgStructure.CurrentWindow->Window.Handle, title );
-#    endif
-
-#endif
-    }
-}
-
-/*
- * Change the current window's size
- */
-void FGAPIENTRY glutReshapeWindow( int width, int height )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutReshapeWindow" );
-    FREEGLUT_EXIT_IF_NO_WINDOW ( "glutReshapeWindow" );
-
-    if (glutGet(GLUT_FULL_SCREEN))
-    {
-      /*  Leave full screen state before resizing. */
-      glutLeaveFullScreen();
-    }
-
-    fgStructure.CurrentWindow->State.NeedToResize = GL_TRUE;
-    fgStructure.CurrentWindow->State.Width  = width ;
-    fgStructure.CurrentWindow->State.Height = height;
-}
-
-/*
- * Change the current window's position
- */
-void FGAPIENTRY glutPositionWindow( int x, int y )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutPositionWindow" );
-    FREEGLUT_EXIT_IF_NO_WINDOW ( "glutPositionWindow" );
-
-    if (glutGet(GLUT_FULL_SCREEN))
-    {
-      /*  Leave full screen state before moving. */
-      glutLeaveFullScreen();
-    }
-
-#if TARGET_HOST_POSIX_X11
-
-    XMoveWindow( fgDisplay.Display, fgStructure.CurrentWindow->Window.Handle,
-                 x, y );
-    XFlush( fgDisplay.Display ); /* XXX Shouldn't need this */
-
-#elif TARGET_HOST_MS_WINDOWS
-
-    {
-        RECT winRect;
-
-        /* "GetWindowRect" returns the pixel coordinates of the outside of the window */
-        GetWindowRect( fgStructure.CurrentWindow->Window.Handle, &winRect );
-        MoveWindow(
-            fgStructure.CurrentWindow->Window.Handle,
-            x,
-            y,
-            winRect.right - winRect.left,
-            winRect.bottom - winRect.top,
-            TRUE
-        );
-    }
-
-#endif
-}
-
-/*
- * Lowers the current window (by Z order change)
- */
-void FGAPIENTRY glutPushWindow( void )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutPushWindow" );
-    FREEGLUT_EXIT_IF_NO_WINDOW ( "glutPushWindow" );
-
-#if TARGET_HOST_POSIX_X11
-
-    XLowerWindow( fgDisplay.Display, fgStructure.CurrentWindow->Window.Handle );
-
-#elif TARGET_HOST_MS_WINDOWS
-
-    SetWindowPos(
-        fgStructure.CurrentWindow->Window.Handle,
-        HWND_BOTTOM,
-        0, 0, 0, 0,
-        SWP_NOSIZE | SWP_NOMOVE
-    );
-
-#endif
-}
-
-/*
- * Raises the current window (by Z order change)
- */
-void FGAPIENTRY glutPopWindow( void )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutPopWindow" );
-    FREEGLUT_EXIT_IF_NO_WINDOW ( "glutPopWindow" );
-
-#if TARGET_HOST_POSIX_X11
-
-    XRaiseWindow( fgDisplay.Display, fgStructure.CurrentWindow->Window.Handle );
-
-#elif TARGET_HOST_MS_WINDOWS
-
-    SetWindowPos(
-        fgStructure.CurrentWindow->Window.Handle,
-        HWND_TOP,
-        0, 0, 0, 0,
-        SWP_NOSIZE | SWP_NOMOVE
-    );
-
-#endif
-}
-
-/*
- * Resize the current window so that it fits the whole screen
- */
-void FGAPIENTRY glutFullScreen( void )
-{
-    SFG_Window *win;
-
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutFullScreen" );
-    FREEGLUT_EXIT_IF_NO_WINDOW ( "glutFullScreen" );
-
-    win = fgStructure.CurrentWindow;
-
-    if (win->Parent)
-    {
-        /* Child windows cannot be made fullscreen, consistent with GLUT's behavior
-         * Also, what would it mean for a child window to be fullscreen, given that it
-         * is confined to its parent?
-         */
-        fgWarning("glutFullScreen called on a child window, ignoring...");
-        return;
-    }
-    else if (fgStructure.GameModeWindow != NULL && fgStructure.GameModeWindow->ID==win->ID)
-    {
-        /* Ignore fullscreen call on GameMode window, those are always fullscreen already */
-        return;
-    }
-
-#if TARGET_HOST_POSIX_X11
-    if(!glutGet(GLUT_FULL_SCREEN)) {
-        if(fghToggleFullscreen() != -1) {
-            win->State.IsFullscreen = GL_TRUE;
-        }
-    }
-
-#elif TARGET_HOST_MS_WINDOWS && !defined(_WIN32_WCE) /* FIXME: what about WinCE */
-
-    if (glutGet(GLUT_FULL_SCREEN))
-    {
-        /*  Leave full screen state before entering fullscreen again (resizing?) */
-        glutLeaveFullScreen();
-    }
-
-    {
-#if(WINVER >= 0x0500) /* Windows 2000 or later */
-        DWORD s;
-        RECT rect;
-        HMONITOR hMonitor;
-        MONITORINFO mi;
-
-        /* For fullscreen mode, first remove all window decoration
-         * and set style to popup so it will overlap the taskbar
-         * then force to maximize on the screen on which it has the most
-         * overlap.
-         */
-
-        
-        /* store current window rect */
-        GetWindowRect( win->Window.Handle, &win->State.OldRect );
-
-        /* store current window style */
-        win->State.OldStyle = s = GetWindowLong(win->Window.Handle, GWL_STYLE);
-
-        /* remove decorations from style and add popup style*/
-        s &= ~WS_OVERLAPPEDWINDOW;
-        s |= WS_POPUP;
-        SetWindowLong(win->Window.Handle, GWL_STYLE, s);
-        SetWindowPos(win->Window.Handle, HWND_TOP, 0,0,0,0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
-
-        /* For fullscreen mode, find the monitor that is covered the most
-         * by the window and get its rect as the resize target.
-            */
-        hMonitor= MonitorFromRect(&win->State.OldRect, MONITOR_DEFAULTTONEAREST);
-        mi.cbSize = sizeof(mi);
-        GetMonitorInfo(hMonitor, &mi);
-        rect = mi.rcMonitor;
-#else   /* if (WINVER >= 0x0500) */
-        RECT rect;
-
-        /* For fullscreen mode, force the top-left corner to 0,0
-         * and adjust the window rectangle so that the client area
-         * covers the whole screen.
-         */
-
-        rect.left   = 0;
-        rect.top    = 0;
-        rect.right  = fgDisplay.ScreenWidth;
-        rect.bottom = fgDisplay.ScreenHeight;
-
-        AdjustWindowRect ( &rect, WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS |
-                                  WS_CLIPCHILDREN, FALSE );
-#endif  /* (WINVER >= 0x0500) */
-
-        /*
-         * then resize window
-         * SWP_NOACTIVATE     Do not activate the window
-         * SWP_NOOWNERZORDER  Do not change position in z-order
-         * SWP_NOSENDCHANGING Suppress WM_WINDOWPOSCHANGING message
-         * SWP_NOZORDER       Retains the current Z order (ignore 2nd param)
-         */
-        SetWindowPos( fgStructure.CurrentWindow->Window.Handle,
-                      HWND_TOP,
-                      rect.left,
-                      rect.top,
-                      rect.right  - rect.left,
-                      rect.bottom - rect.top,
-                      SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOSENDCHANGING |
-                      SWP_NOZORDER
-                    );
-
-        win->State.IsFullscreen = GL_TRUE;
-    }
-#endif
-}
-
-/*
- * If we are fullscreen, resize the current window back to its original size
- */
-void FGAPIENTRY glutLeaveFullScreen( void )
-{
-    SFG_Window *win;
-
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutFullScreen" );
-    FREEGLUT_EXIT_IF_NO_WINDOW ( "glutFullScreen" );
-
-    win = fgStructure.CurrentWindow;
-
-#if TARGET_HOST_POSIX_X11
-    if(glutGet(GLUT_FULL_SCREEN)) {
-        if(fghToggleFullscreen() != -1) {
-            win->State.IsFullscreen = GL_FALSE;
-        }
-    }
-
-#elif TARGET_HOST_MS_WINDOWS && !defined(_WIN32_WCE) /* FIXME: what about WinCE */
-    if (!glutGet(GLUT_FULL_SCREEN))
-    {
-        /* nothing to do */
-        return;
-    }
-
-    /* restore style of window before making it fullscreen */
-    SetWindowLong(win->Window.Handle, GWL_STYLE, win->State.OldStyle);
-    SetWindowPos(win->Window.Handle, HWND_TOP, 0,0,0,0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
-
-    /* Then resize */
-    SetWindowPos(win->Window.Handle,
-        HWND_TOP,
-        win->State.OldRect.left,
-        win->State.OldRect.top,
-        win->State.OldRect.right  - win->State.OldRect.left,
-        win->State.OldRect.bottom - win->State.OldRect.top,
-        SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOSENDCHANGING |
-        SWP_NOZORDER
-        );
-
-    win->State.IsFullscreen = GL_FALSE;
-#endif
-}
-
-/*
- * Toggle the window's full screen state.
- */
-void FGAPIENTRY glutFullScreenToggle( void )
-{
-    SFG_Window *win;
-
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutFullScreenToggle" );
-    FREEGLUT_EXIT_IF_NO_WINDOW ( "glutFullScreenToggle" );
-
-    win = fgStructure.CurrentWindow;
-
-#if TARGET_HOST_POSIX_X11
-    if(fghToggleFullscreen() != -1) {
-        win->State.IsFullscreen = !win->State.IsFullscreen;
-    }
-#elif TARGET_HOST_MS_WINDOWS
-    if (!win->State.IsFullscreen)
-        glutFullScreen();
-    else
-        glutLeaveFullScreen();
-#endif
-}
-
-/*
- * A.Donev: Set and retrieve the window's user data
- */
-void* FGAPIENTRY glutGetWindowData( void )
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutGetWindowData" );
-    FREEGLUT_EXIT_IF_NO_WINDOW ( "glutGetWindowData" );
-    return fgStructure.CurrentWindow->UserData;
-}
-
-void FGAPIENTRY glutSetWindowData(void* data)
-{
-    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSetWindowData" );
-    FREEGLUT_EXIT_IF_NO_WINDOW ( "glutSetWindowData" );
-    fgStructure.CurrentWindow->UserData = data;
-}
-
-/*** END OF FILE ***/
diff --git a/src/freeglut_xinput.c b/src/freeglut_xinput.c
deleted file mode 100644 (file)
index b0d8cc7..0000000
+++ /dev/null
@@ -1,219 +0,0 @@
-/* Written for XI1 by Nikolas Doerfler <doerflen@in.tum.de> (c) 2008 *
- * Rewritten for XI2 by Florian Echtler <echtler@in.tum.de> (c) 2009 */
-
-#include <GL/freeglut.h>
-
-#include "freeglut_internal.h"
-
-#if TARGET_HOST_POSIX_X11 && HAVE_X11_EXTENSIONS_XINPUT2_H
-
-#include <errno.h>
-#include <stdarg.h>
-
-#include <X11/Xlib.h>
-#include <X11/extensions/XInput2.h>
-
-/* import function from freeglut_main.c */
-int fghGetXModifiers( int state );
-
-/* extension opcode for XInput */
-int xi_opcode = -1;
-
-/**
- * \brief Sets window up for XI2 events.
- */
-void fgRegisterDevices( Display* dpy, Window* win ) {
-
-       XIEventMask mask;
-       unsigned char flags[2] = { 0, 0 };
-       int event, error;
-
-       /*Display* dpy = fgDisplay.Display;
-       Window* win = glutGetXWindow();*/
-
-       /* get XInput extension opcode */
-       if (!XQueryExtension( dpy, "XInputExtension", &xi_opcode, &event, &error )) { xi_opcode = -1; }
-
-       /* Select for motion events */
-       mask.deviceid = XIAllMasterDevices;
-       mask.mask_len = 2;
-       mask.mask = flags;
-
-       XISetMask(mask.mask, XI_Enter);
-       XISetMask(mask.mask, XI_Motion);
-       XISetMask(mask.mask, XI_ButtonPress);
-       XISetMask(mask.mask, XI_ButtonRelease);
-       XISetMask(mask.mask, XI_Leave);
-       /*XISetMask(mask.mask, XI_KeyPress);
-       XISetMask(mask.mask, XI_KeyRelease);
-       XISetMask(mask.mask, XI_DeviceChanged);
-       XISetMask(mask.mask, XI_RawEvent);
-       XISetMask(mask.mask, XI_FocusIn);
-       XISetMask(mask.mask, XI_FocusOut);
-       XISetMask(mask.mask, XI_HierarchyChanged);*/
-
-       XISelectEvents( dpy, *win, &mask, 1 );
-}
-
-
-void fgPrintXILeaveEvent(XILeaveEvent* event)
-{
-    char* mode = "";
-               char* detail = "";
-    int i;
-
-    printf("    windows: root 0x%lx event 0x%lx child 0x%ld\n",
-            event->root, event->event, event->child);
-    switch(event->mode)
-    {
-        case NotifyNormal:       mode = "NotifyNormal"; break;
-        case NotifyGrab:         mode = "NotifyGrab"; break;
-        case NotifyUngrab:       mode = "NotifyUngrab"; break;
-        case NotifyWhileGrabbed: mode = "NotifyWhileGrabbed"; break;
-    }
-    switch (event->detail)
-    {
-        case NotifyAncestor: detail = "NotifyAncestor"; break;
-        case NotifyVirtual: detail = "NotifyVirtual"; break;
-        case NotifyInferior: detail = "NotifyInferior"; break;
-        case NotifyNonlinear: detail = "NotifyNonlinear"; break;
-        case NotifyNonlinearVirtual: detail = "NotifyNonlinearVirtual"; break;
-        case NotifyPointer: detail = "NotifyPointer"; break;
-        case NotifyPointerRoot: detail = "NotifyPointerRoot"; break;
-        case NotifyDetailNone: detail = "NotifyDetailNone"; break;
-    }
-    printf("    mode: %s (detail %s)\n", mode, detail);
-    printf("    flags: %s %s\n", event->focus ? "[focus]" : "",
-                                 event->same_screen ? "[same screen]" : "");
-    printf("    buttons:");
-    for (i = 0; i < event->buttons.mask_len * 8; i++)
-        if (XIMaskIsSet(event->buttons.mask, i))
-            printf(" %d", i);
-    printf("\n");
-
-    printf("    modifiers: locked 0x%x latched 0x%x base 0x%x\n",
-            event->mods.locked, event->mods.latched,
-            event->mods.base);
-    printf("    group: locked 0x%x latched 0x%x base 0x%x\n",
-            event->group.locked, event->group.latched,
-            event->group.base);
-
-    printf("    root x/y:  %.2f / %.2f\n", event->root_x, event->root_y);
-    printf("    event x/y: %.2f / %.2f\n", event->event_x, event->event_y);
-
-}
-
-
-void fgPrintXIDeviceEvent(XIDeviceEvent* event)
-{
-    double *val;
-    int i;
-
-    printf("    device: %d (%d)\n", event->deviceid, event->sourceid);
-    printf("    detail: %d\n", event->detail);
-    printf("    buttons:");
-         for (i = 0; i < event->buttons.mask_len * 8; i++)
-           if (XIMaskIsSet(event->buttons.mask, i))
-             printf(" %d", i);
-    printf("\n");
-
-    printf("    modifiers: locked 0x%x latched 0x%x base 0x%x\n",
-            event->mods.locked, event->mods.latched,
-            event->mods.base);
-    printf("    group: locked 0x%x latched 0x%x base 0x%x\n",
-            event->group.locked, event->group.latched,
-            event->group.base);
-    printf("    valuators:");
-
-    val = event->valuators.values;
-    for (i = 0; i < event->valuators.mask_len * 8; i++)
-        if (XIMaskIsSet(event->valuators.mask, i))
-            printf(" %d: %.2f", i, *val++);
-    printf("\n");
-
-    printf("    windows: root 0x%lx event 0x%lx child 0x%ld\n",
-            event->root, event->event, event->child);
-    printf("    root x/y:  %.2f / %.2f\n", event->root_x, event->root_y);
-    printf("    event x/y: %.2f / %.2f\n", event->event_x, event->event_y);
-
-}
-
-
-/**
- * \brief This function is called when an Extension Event is received
- * and calls the corresponding callback functions for these events.
- */
-void fgHandleExtensionEvents( XEvent* base_ev ) {
-
-       int i, button = 0;
-       XGenericEventCookie* cookie = (XGenericEventCookie*)&(base_ev->xcookie);
-
-       if ( XGetEventData( fgDisplay.Display, cookie ) && (cookie->type == GenericEvent) && (cookie->extension == xi_opcode) ) {
-
-               XIDeviceEvent* event = (XIDeviceEvent*)(cookie->data);
-               /*printf("XI2 event type: %d - %d\n", cookie->evtype, event->type );*/
-
-               SFG_Window* window = fgWindowByHandle( event->event );
-               if (!window) return;
-
-               switch (cookie->evtype) {
-
-                       case XI_Enter:
-                       case XI_Leave:
-                               fgState.Modifiers = fghGetXModifiers( ((XIEnterEvent*)event)->mods.base );
-                               INVOKE_WCB( *window, MultiEntry, (
-                                       event->deviceid, 
-                                       (event->evtype == XI_Enter ? GLUT_ENTERED : GLUT_LEFT)
-                               ));
-                               #if _DEBUG
-                                       fgPrintXILeaveEvent((XILeaveEvent*)event);
-                               #endif
-                               break;
-
-                       case XI_ButtonPress:
-                       case XI_ButtonRelease:
-                               fgState.Modifiers = fghGetXModifiers( event->mods.base );
-                               INVOKE_WCB( *window, MultiButton, (
-                                       event->deviceid, 
-                                       event->event_x,
-                                       event->event_y,
-                                       (event->detail)-1, 
-                                       (event->evtype == XI_ButtonPress ? GLUT_DOWN : GLUT_UP)
-                               ));
-                               INVOKE_WCB( *window, Mouse, (
-                                       (event->detail)-1, 
-                                       (event->evtype == XI_ButtonPress ? GLUT_DOWN : GLUT_UP),
-                                       event->event_x,
-                                       event->event_y
-                               ));
-                               break;
-
-                       case XI_Motion:
-                               fgState.Modifiers = fghGetXModifiers( event->mods.base );
-                               for (i = 0; i < event->buttons.mask_len; i++) if (event->buttons.mask[i]) button = 1;
-                               if (button) {
-                                       INVOKE_WCB( *window, MultiMotion,  ( event->deviceid, event->event_x, event->event_y ) );
-                                       INVOKE_WCB( *window,           Motion,  (                  event->event_x, event->event_y ) );
-                               } else {
-                                       INVOKE_WCB( *window, MultiPassive, ( event->deviceid, event->event_x, event->event_y ) );
-                                       INVOKE_WCB( *window,           Passive, (                  event->event_x, event->event_y ) );
-                               }
-                               #if _DEBUG
-                                       fgPrintXIDeviceEvent(event);
-                               #endif
-                               break;
-
-                       default:
-                               #if _DEBUG
-                                       fgWarning( "Unknown XI2 device event:" );
-                                       fgPrintXIDeviceEvent( event );
-                               #endif
-                               break;
-               }
-               fgState.Modifiers = INVALID_MODIFIERS;
-       }
-       XFreeEventData( fgDisplay.Display, cookie );
-}
-
-#endif
-
diff --git a/src/freeglutdll.def b/src/freeglutdll.def
deleted file mode 100644 (file)
index ac52730..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-LIBRARY freeglut
-VERSION 2.6
-EXPORTS
-       glutInit
-       glutInitWindowPosition
-       glutInitWindowSize
-       glutInitDisplayMode
-       glutInitDisplayString
-       glutMainLoop
-       glutMainLoopEvent
-       glutLeaveMainLoop
-       glutCreateWindow
-       glutCreateSubWindow
-       glutDestroyWindow
-       glutSetWindow
-       glutGetWindow
-       glutSetWindowData
-       glutGetWindowData
-       glutSetWindowTitle
-       glutSetIconTitle
-       glutReshapeWindow
-       glutPositionWindow
-       glutShowWindow
-       glutHideWindow
-       glutIconifyWindow
-       glutPushWindow
-       glutPopWindow
-       glutFullScreen
-       glutPostWindowRedisplay
-       glutPostRedisplay
-       glutSwapBuffers
-       glutWarpPointer
-       glutSetCursor
-       glutEstablishOverlay
-       glutRemoveOverlay
-       glutUseLayer
-       glutPostOverlayRedisplay
-       glutPostWindowOverlayRedisplay
-       glutShowOverlay
-       glutHideOverlay
-       glutCreateMenu
-       glutDestroyMenu
-       glutGetMenu
-       glutSetMenu
-       glutGetMenuData
-       glutSetMenuData
-       glutAddMenuEntry
-       glutAddSubMenu
-       glutChangeToMenuEntry
-       glutChangeToSubMenu
-       glutRemoveMenuItem
-       glutAttachMenu
-       glutDetachMenu
-       glutTimerFunc
-       glutIdleFunc
-       glutKeyboardFunc
-       glutSpecialFunc
-       glutReshapeFunc
-       glutVisibilityFunc
-       glutDisplayFunc
-       glutMouseFunc
-       glutMouseWheelFunc
-       glutMotionFunc
-       glutPassiveMotionFunc
-       glutEntryFunc
-       glutCloseFunc
-       glutWMCloseFunc
-       glutKeyboardUpFunc
-       glutSpecialUpFunc
-       glutJoystickFunc
-       glutMenuStateFunc
-       glutMenuStatusFunc
-       glutMenuDestroyFunc
-       glutOverlayDisplayFunc
-       glutWindowStatusFunc
-       glutSpaceballMotionFunc
-       glutSpaceballRotateFunc
-       glutSpaceballButtonFunc
-       glutButtonBoxFunc
-       glutDialsFunc
-       glutTabletMotionFunc
-       glutTabletButtonFunc
-       glutSetOption
-       glutGet
-       glutDeviceGet
-       glutGetModifiers
-       glutLayerGet
-       glutBitmapCharacter
-       glutBitmapWidth
-       glutStrokeCharacter
-       glutStrokeWidth
-       glutBitmapLength
-       glutStrokeLength
-       glutBitmapHeight
-       glutStrokeHeight
-       glutBitmapString
-       glutStrokeString
-       glutWireCube
-       glutSolidCube
-       glutWireSphere
-       glutSolidSphere
-       glutWireCone
-       glutSolidCone
-       glutWireTorus
-       glutSolidTorus
-       glutWireDodecahedron
-       glutSolidDodecahedron
-       glutWireOctahedron
-       glutSolidOctahedron
-       glutWireTetrahedron
-       glutSolidTetrahedron
-       glutWireIcosahedron
-       glutSolidIcosahedron
-       glutWireRhombicDodecahedron
-       glutSolidRhombicDodecahedron
-       glutWireSierpinskiSponge
-       glutSolidSierpinskiSponge
-       glutWireTeapot
-       glutSolidTeapot
-       glutWireCylinder
-       glutSolidCylinder
-       glutGameModeString
-       glutEnterGameMode
-       glutLeaveGameMode
-       glutGameModeGet
-       glutVideoResizeGet
-       glutSetupVideoResizing
-       glutStopVideoResizing
-       glutVideoResize
-       glutVideoPan
-       glutSetColor
-       glutGetColor
-       glutCopyColormap
-       glutIgnoreKeyRepeat
-       glutSetKeyRepeat
-       glutForceJoystickFunc
-       glutExtensionSupported
-       glutReportErrors
-       glutGetProcAddress
-       glutExit
-       glutFullScreenToggle
-       glutLeaveFullScreen
-       glutGetModeValues
-       glutInitContextFlags
-       glutInitContextVersion
-       glutInitContextProfile
-        glutInitErrorFunc
-        glutInitWarningFunc
-       __glutInitWithExit
-       __glutCreateWindowWithExit
-       __glutCreateMenuWithExit
-       glutMultiButtonFunc
-       glutMultiEntryFunc
-       glutMultiMotionFunc
-       glutMultiPassiveFunc