diff --git a/CMakeLists.txt b/CMakeLists.txt index 5613cb52..65ce371a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,34 +16,130 @@ OPTION(DOUBLE_PRECISION_ENABLED "Select this if you want to compile using double # Headers INCLUDE_DIRECTORIES(src) -IF (PROFILING_ENABLED) - ADD_DEFINITIONS(-DIS_PROFILING_ACTIVE) -ENDIF (PROFILING_ENABLED) +IF(PROFILING_ENABLED) + ADD_DEFINITIONS(-DIS_PROFILING_ACTIVE) +ENDIF(PROFILING_ENABLED) -IF (DOUBLE_PRECISION_ENABLED) - ADD_DEFINITIONS(-DIS_DOUBLE_PRECISION_ENABLED) -ENDIF (DOUBLE_PRECISION_ENABLED) +IF(DOUBLE_PRECISION_ENABLED) + ADD_DEFINITIONS(-DIS_DOUBLE_PRECISION_ENABLED) +ENDIF(DOUBLE_PRECISION_ENABLED) -# Library configuration -file ( - GLOB_RECURSE - source_files - src/* +# Source files +SET (REACTPHYSICS3D_SOURCES + "src/configuration.h" + "src/decimal.h" + "src/reactphysics3d.h" + "src/body/Body.h" + "src/body/Body.cpp" + "src/body/CollisionBody.h" + "src/body/CollisionBody.cpp" + "src/body/RigidBody.h" + "src/body/RigidBody.cpp" + "src/collision/broadphase/BroadPhaseAlgorithm.h" + "src/collision/broadphase/BroadPhaseAlgorithm.cpp" + "src/collision/broadphase/NoBroadPhaseAlgorithm.h" + "src/collision/broadphase/NoBroadPhaseAlgorithm.cpp" + "src/collision/broadphase/PairManager.h" + "src/collision/broadphase/PairManager.cpp" + "src/collision/broadphase/SweepAndPruneAlgorithm.h" + "src/collision/broadphase/SweepAndPruneAlgorithm.cpp" + "src/collision/narrowphase/EPA/EdgeEPA.h" + "src/collision/narrowphase/EPA/EdgeEPA.cpp" + "src/collision/narrowphase/EPA/EPAAlgorithm.h" + "src/collision/narrowphase/EPA/EPAAlgorithm.cpp" + "src/collision/narrowphase/EPA/TriangleEPA.h" + "src/collision/narrowphase/EPA/TriangleEPA.cpp" + "src/collision/narrowphase/EPA/TrianglesStore.h" + "src/collision/narrowphase/EPA/TrianglesStore.cpp" + "src/collision/narrowphase/GJK/Simplex.h" + "src/collision/narrowphase/GJK/Simplex.cpp" + "src/collision/narrowphase/GJK/GJKAlgorithm.h" + "src/collision/narrowphase/GJK/GJKAlgorithm.cpp" + "src/collision/narrowphase/NarrowPhaseAlgorithm.h" + "src/collision/narrowphase/NarrowPhaseAlgorithm.cpp" + "src/collision/narrowphase/SphereVsSphereAlgorithm.h" + "src/collision/narrowphase/SphereVsSphereAlgorithm.cpp" + "src/collision/shapes/AABB.h" + "src/collision/shapes/AABB.cpp" + "src/collision/shapes/BoxShape.h" + "src/collision/shapes/BoxShape.cpp" + "src/collision/shapes/CapsuleShape.h" + "src/collision/shapes/CapsuleShape.cpp" + "src/collision/shapes/CollisionShape.h" + "src/collision/shapes/CollisionShape.cpp" + "src/collision/shapes/ConeShape.h" + "src/collision/shapes/ConeShape.cpp" + "src/collision/shapes/ConvexMeshShape.h" + "src/collision/shapes/ConvexMeshShape.cpp" + "src/collision/shapes/CylinderShape.h" + "src/collision/shapes/CylinderShape.cpp" + "src/collision/shapes/SphereShape.h" + "src/collision/shapes/SphereShape.cpp" + "src/collision/BroadPhasePair.h" + "src/collision/BroadPhasePair.cpp" + "src/collision/CollisionDetection.h" + "src/collision/CollisionDetection.cpp" + "src/constraint/BallAndSocketJoint.h" + "src/constraint/BallAndSocketJoint.cpp" + "src/constraint/ContactPoint.h" + "src/constraint/ContactPoint.cpp" + "src/constraint/FixedJoint.h" + "src/constraint/FixedJoint.cpp" + "src/constraint/HingeJoint.h" + "src/constraint/HingeJoint.cpp" + "src/constraint/Joint.h" + "src/constraint/Joint.cpp" + "src/constraint/SliderJoint.h" + "src/constraint/SliderJoint.cpp" + "src/engine/CollisionWorld.h" + "src/engine/CollisionWorld.cpp" + "src/engine/ConstraintSolver.h" + "src/engine/ConstraintSolver.cpp" + "src/engine/ContactManifold.h" + "src/engine/ContactManifold.cpp" + "src/engine/ContactSolver.h" + "src/engine/ContactSolver.cpp" + "src/engine/DynamicsWorld.h" + "src/engine/DynamicsWorld.cpp" + "src/engine/EventListener.h" + "src/engine/Impulse.h" + "src/engine/Island.h" + "src/engine/Island.cpp" + "src/engine/Material.h" + "src/engine/Material.cpp" + "src/engine/OverlappingPair.h" + "src/engine/OverlappingPair.cpp" + "src/engine/Profiler.h" + "src/engine/Profiler.cpp" + "src/engine/Timer.h" + "src/engine/Timer.cpp" + "src/mathematics/mathematics.h" + "src/mathematics/mathematics_functions.h" + "src/mathematics/Matrix2x2.h" + "src/mathematics/Matrix2x2.cpp" + "src/mathematics/Matrix3x3.h" + "src/mathematics/Matrix3x3.cpp" + "src/mathematics/Quaternion.h" + "src/mathematics/Quaternion.cpp" + "src/mathematics/Transform.h" + "src/mathematics/Transform.cpp" + "src/mathematics/Vector2.h" + "src/mathematics/Vector2.cpp" + "src/mathematics/Vector3.h" + "src/mathematics/Vector3.cpp" + "src/memory/MemoryAllocator.h" + "src/memory/MemoryAllocator.cpp" ) -# Require the reactphysics3d code to be compiled in a static library -ADD_LIBRARY ( - reactphysics3d - STATIC - ${source_files} -) +# Create the library +ADD_LIBRARY (reactphysics3d STATIC ${REACTPHYSICS3D_SOURCES}) # If we need to compile the examples -IF (COMPILE_EXAMPLES) +IF(COMPILE_EXAMPLES) add_subdirectory(examples/) -ENDIF (COMPILE_EXAMPLES) +ENDIF(COMPILE_EXAMPLES) # If we need to compile the tests -IF (COMPILE_TESTS) +IF(COMPILE_TESTS) add_subdirectory(test/) -ENDIF (COMPILE_TESTS) +ENDIF(COMPILE_TESTS) diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 6399abeb..edc71428 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -1,7 +1,10 @@ # Minimum cmake version required CMAKE_MINIMUM_REQUIRED(VERSION 2.6) -add_subdirectory(common/) -add_subdirectory(cubes/) -add_subdirectory(joints/) -add_subdirectory(collisionshapes/) +# Set a variable for the directory of the opengl-framework +SET(OPENGLFRAMEWORK_DIR "${CMAKE_CURRENT_SOURCE_DIR}/common/opengl-framework") + +ADD_SUBDIRECTORY(common/) +ADD_SUBDIRECTORY(cubes/) +ADD_SUBDIRECTORY(joints/) +ADD_SUBDIRECTORY(collisionshapes/) diff --git a/examples/collisionshapes/CMakeLists.txt b/examples/collisionshapes/CMakeLists.txt index bb0d377d..ffbdebbe 100644 --- a/examples/collisionshapes/CMakeLists.txt +++ b/examples/collisionshapes/CMakeLists.txt @@ -8,16 +8,31 @@ PROJECT(CollisionShapes) SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin/collisionshapes/) # Copy the shaders used for the demo into the build directory -FILE(COPY "../common/opengl-framework/src/shaders/" DESTINATION "${EXECUTABLE_OUTPUT_PATH}/shaders/") +FILE(COPY "${OPENGLFRAMEWORK_DIR}/src/shaders/" DESTINATION "${EXECUTABLE_OUTPUT_PATH}/shaders/") # Copy the meshes used for the demo into the build directory FILE(COPY "../common/meshes/" DESTINATION "${EXECUTABLE_OUTPUT_PATH}/meshes/") # Headers -INCLUDE_DIRECTORIES("../common/opengl-framework/src/" "../common/") +INCLUDE_DIRECTORIES("${OPENGLFRAMEWORK_DIR}/src/" "../common/") -# Create the example executable using the -# compiled reactphysics3d static library -ADD_EXECUTABLE(collisionshapes CollisionShapes.cpp Scene.cpp Scene.h "../common/VisualContactPoint.cpp" "../common/ConvexMesh.cpp" "../common/Capsule.cpp" "../common/Sphere.cpp" "../common/Cylinder.cpp" "../common/Cone.cpp" "../common/Box.cpp" "../common/Viewer.cpp") +# Source files +SET(COLLISION_SHAPES_SOURCES + CollisionShapes.cpp + Scene.cpp + Scene.h + "../common/VisualContactPoint.cpp" + "../common/ConvexMesh.cpp" + "../common/Capsule.cpp" + "../common/Sphere.cpp" + "../common/Cylinder.cpp" + "../common/Cone.cpp" + "../common/Box.cpp" + "../common/Viewer.cpp" +) +# Create the executable +ADD_EXECUTABLE(collisionshapes ${COLLISION_SHAPES_SOURCES}) + +# Link with libraries TARGET_LINK_LIBRARIES(collisionshapes reactphysics3d openglframework) diff --git a/examples/common/CMakeLists.txt b/examples/common/CMakeLists.txt index ba4484e0..eb9eee29 100644 --- a/examples/common/CMakeLists.txt +++ b/examples/common/CMakeLists.txt @@ -1,4 +1,4 @@ # Minimum cmake version required CMAKE_MINIMUM_REQUIRED(VERSION 2.6) -add_subdirectory(opengl-framework/) +ADD_SUBDIRECTORY(opengl-framework/) diff --git a/examples/common/opengl-framework/CMakeLists.txt b/examples/common/opengl-framework/CMakeLists.txt index 383c87a6..ab8192db 100644 --- a/examples/common/opengl-framework/CMakeLists.txt +++ b/examples/common/opengl-framework/CMakeLists.txt @@ -8,23 +8,23 @@ PROJECT(OPENGLFRAMEWORK) OPTION(USE_JPEG_TEXTURES "Select this if you want to use jpeg textures (libjpeg required)" OFF) # Where to find the module to find special packages/libraries -set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/") +SET(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/") # Find OpenGL FIND_PACKAGE(OpenGL REQUIRED) -if(OPENGL_FOUND) +IF(OPENGL_FOUND) MESSAGE("OpenGL found") -else() +ELSE() MESSAGE("OpenGL not found") -endif() +ENDIF() # Find the GLEW library FIND_PACKAGE(GLEW REQUIRED) -if(GLEW_FOUND) +IF(GLEW_FOUND) MESSAGE("GLEW found") -else() +ELSE() MESSAGE("GLEW not found") -endif() +ENDIF() # Find the GLUT/FREEGLUT library IF(APPLE) @@ -51,36 +51,60 @@ ELSE(APPLE) ENDIF(APPLE) # If the user wants to use JPEG textures -if(USE_JPEG_TEXTURES) +IF(USE_JPEG_TEXTURES) # Find the LIBJPEG library FIND_PACKAGE(JPEG REQUIRED) - if(JPEG_FOUND) + IF(JPEG_FOUND) MESSAGE("LIBJPEG found") - else() + ELSE() MESSAGE("LIBJPEG not found") - endif() -endif() + ENDIF() +ENDIF() # Headers INCLUDE_DIRECTORIES(src ${OPENGL_INCLUDE_DIR} ${GLEW_INCLUDE_PATH} ${FREEGLUT_INCLUDE_DIR} ${GLUT_INCLUDE_DIR} ${JPEG_INCLUDE_DIR}) -if(USE_JPEG_TEXTURES) - add_definitions(-DUSE_JPEG_TEXTURE) -endif() - -# Library configuration -file ( - GLOB_RECURSE - OPENGLFRAMEWORK_SOURCES_FILES - src/* +# Source files +SET(OPENGL_FRAMEWORK_SOURCES + "src/maths/Color.h" + "src/maths/Matrix3.h" + "src/maths/Matrix4.h" + "src/maths/Vector2.h" + "src/maths/Vector3.h" + "src/maths/Vector4.h" + "src/Camera.cpp" + "src/Camera.h" + "src/definitions.h" + "src/FrameBufferObject.cpp" + "src/FrameBufferObject.h" + "src/GlutViewer.cpp" + "src/GlutViewer.h" + "src/Light.h" + "src/Light.cpp" + "src/Mesh.h" + "src/Mesh.cpp" + "src/MeshReaderWriter.h" + "src/MeshReaderWriter.cpp" + "src/Object3D.h" + "src/Object3D.cpp" + "src/openglframework.h" + "src/Shader.h" + "src/Shader.cpp" + "src/Texture2D.h" + "src/Texture2D.cpp" + "src/TextureReaderWriter.h" + "src/TextureReaderWriter.cpp" + "src/VertexBufferObject.h" + "src/VertexBufferObject.cpp" ) -# Require the opengl-framework code to be compiled in a static library -ADD_LIBRARY ( - openglframework - STATIC - ${OPENGLFRAMEWORK_SOURCES_FILES} -) +IF(USE_JPEG_TEXTURES) + ADD_DEFINITIONS(-DUSE_JPEG_TEXTURE) +ENDIF() +# Create the library +ADD_LIBRARY (openglframework STATIC ${OPENGL_FRAMEWORK_SOURCES}) + +# Link with others libraries TARGET_LINK_LIBRARIES(openglframework ${GLEW_LIBRARIES} ${OPENGL_LIBRARY} ${FREEGLUT_LIBRARY} ${GLUT_LIBRARY}) diff --git a/examples/common/opengl-framework/freeglut/CMakeLists.txt b/examples/common/opengl-framework/freeglut/CMakeLists.txt deleted file mode 100644 index bfa701ed..00000000 --- a/examples/common/opengl-framework/freeglut/CMakeLists.txt +++ /dev/null @@ -1,24 +0,0 @@ -add_definitions( -DFREEGLUT_EXPORTS -DFREEGLUT_STATIC -D_CRT_SECURE_NO_WARNINGS ) - -if(APPLE) - include_directories( /usr/X11/include ) -endif(APPLE) - -if(UNIX) - add_definitions( -D__unix__ -DHAVE_FCNTL_H -DHAVE_GETTIMEOFDAY ) -endif(UNIX) - -file ( - GLOB_RECURSE - FREEGLUT_SOURCES - ./* -) - -include_directories ( - ${OPENGL_INCLUDE_DIR} - . -) - -add_library(freeglut_static - ${FREEGLUT_SOURCES} -) diff --git a/examples/common/opengl-framework/freeglut/COPYING.txt b/examples/common/opengl-framework/freeglut/COPYING.txt deleted file mode 100644 index fc36ad99..00000000 --- a/examples/common/opengl-framework/freeglut/COPYING.txt +++ /dev/null @@ -1,27 +0,0 @@ - - Freeglut Copyright - ------------------ - - Freeglut code without an explicit copyright is covered by the following - copyright: - - Copyright (c) 1999-2000 Pawel W. Olszta. 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 or substantial portions of the Software. - - 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. - - Except as contained in this notice, the name of Pawel W. Olszta shall not be - used in advertising or otherwise to promote the sale, use or other dealings - in this Software without prior written authorization from Pawel W. Olszta. diff --git a/examples/common/opengl-framework/freeglut/GL/freeglut.h b/examples/common/opengl-framework/freeglut/GL/freeglut.h deleted file mode 100644 index 0e6f8c6a..00000000 --- a/examples/common/opengl-framework/freeglut/GL/freeglut.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef __FREEGLUT_H__ -#define __FREEGLUT_H__ - -/* - * freeglut.h - * - * The freeglut library include file - * - * 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 "freeglut_std.h" -#include "freeglut_ext.h" - -/*** END OF FILE ***/ - -#endif /* __FREEGLUT_H__ */ diff --git a/examples/common/opengl-framework/freeglut/GL/freeglut_ext.h b/examples/common/opengl-framework/freeglut/GL/freeglut_ext.h deleted file mode 100644 index 6bf84b86..00000000 --- a/examples/common/opengl-framework/freeglut/GL/freeglut_ext.h +++ /dev/null @@ -1,236 +0,0 @@ -#ifndef __FREEGLUT_EXT_H__ -#define __FREEGLUT_EXT_H__ - -/* - * freeglut_ext.h - * - * The non-GLUT-compatible extensions to the freeglut library 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. - */ - -#ifdef __cplusplus - extern "C" { -#endif - -/* - * Additional GLUT Key definitions for the Special key function - */ -#define GLUT_KEY_NUM_LOCK 0x006D -#define GLUT_KEY_BEGIN 0x006E -#define GLUT_KEY_DELETE 0x006F -#define GLUT_KEY_SHIFT_L 0x0070 -#define GLUT_KEY_SHIFT_R 0x0071 -#define GLUT_KEY_CTRL_L 0x0072 -#define GLUT_KEY_CTRL_R 0x0073 -#define GLUT_KEY_ALT_L 0x0074 -#define GLUT_KEY_ALT_R 0x0075 - -/* - * GLUT API Extension macro definitions -- behaviour when the user clicks on an "x" to close a window - */ -#define GLUT_ACTION_EXIT 0 -#define GLUT_ACTION_GLUTMAINLOOP_RETURNS 1 -#define GLUT_ACTION_CONTINUE_EXECUTION 2 - -/* - * Create a new rendering context when the user opens a new window? - */ -#define GLUT_CREATE_NEW_CONTEXT 0 -#define GLUT_USE_CURRENT_CONTEXT 1 - -/* - * Direct/Indirect rendering context options (has meaning only in Unix/X11) - */ -#define GLUT_FORCE_INDIRECT_CONTEXT 0 -#define GLUT_ALLOW_DIRECT_CONTEXT 1 -#define GLUT_TRY_DIRECT_CONTEXT 2 -#define GLUT_FORCE_DIRECT_CONTEXT 3 - -/* - * GLUT API Extension macro definitions -- the glutGet parameters - */ -#define GLUT_INIT_STATE 0x007C - -#define GLUT_ACTION_ON_WINDOW_CLOSE 0x01F9 - -#define GLUT_WINDOW_BORDER_WIDTH 0x01FA -#define GLUT_WINDOW_HEADER_HEIGHT 0x01FB - -#define GLUT_VERSION 0x01FC - -#define GLUT_RENDERING_CONTEXT 0x01FD -#define GLUT_DIRECT_RENDERING 0x01FE - -#define GLUT_FULL_SCREEN 0x01FF - -/* - * New tokens for glutInitDisplayMode. - * Only one GLUT_AUXn bit may be used at a time. - * Value 0x0400 is defined in OpenGLUT. - */ -#define GLUT_AUX 0x1000 - -#define GLUT_AUX1 0x1000 -#define GLUT_AUX2 0x2000 -#define GLUT_AUX3 0x4000 -#define GLUT_AUX4 0x8000 - -/* - * Context-related flags, see freeglut_state.c - */ -#define GLUT_INIT_MAJOR_VERSION 0x0200 -#define GLUT_INIT_MINOR_VERSION 0x0201 -#define GLUT_INIT_FLAGS 0x0202 -#define GLUT_INIT_PROFILE 0x0203 - -/* - * Flags for glutInitContextFlags, see freeglut_init.c - */ -#define GLUT_DEBUG 0x0001 -#define GLUT_FORWARD_COMPATIBLE 0x0002 - - -/* - * Flags for glutInitContextProfile, see freeglut_init.c - */ -#define GLUT_CORE_PROFILE 0x0001 -#define GLUT_COMPATIBILITY_PROFILE 0x0002 - -/* - * Process loop function, see freeglut_main.c - */ -FGAPI void FGAPIENTRY glutMainLoopEvent( void ); -FGAPI void FGAPIENTRY glutLeaveMainLoop( void ); -FGAPI void FGAPIENTRY glutExit ( void ); - -/* - * Window management functions, see freeglut_window.c - */ -FGAPI void FGAPIENTRY glutFullScreenToggle( void ); -FGAPI void FGAPIENTRY glutLeaveFullScreen( void ); - -/* - * Window-specific callback functions, see freeglut_callbacks.c - */ -FGAPI void FGAPIENTRY glutMouseWheelFunc( void (* callback)( int, int, int, int ) ); -FGAPI void FGAPIENTRY glutCloseFunc( void (* callback)( void ) ); -FGAPI void FGAPIENTRY glutWMCloseFunc( void (* callback)( void ) ); -/* A. Donev: Also a destruction callback for menus */ -FGAPI void FGAPIENTRY glutMenuDestroyFunc( void (* callback)( void ) ); - -/* - * State setting and retrieval functions, see freeglut_state.c - */ -FGAPI void FGAPIENTRY glutSetOption ( GLenum option_flag, int value ); -FGAPI int * FGAPIENTRY glutGetModeValues(GLenum mode, int * size); -/* A.Donev: User-data manipulation */ -FGAPI void* FGAPIENTRY glutGetWindowData( void ); -FGAPI void FGAPIENTRY glutSetWindowData(void* data); -FGAPI void* FGAPIENTRY glutGetMenuData( void ); -FGAPI void FGAPIENTRY glutSetMenuData(void* data); - -/* - * Font stuff, see freeglut_font.c - */ -FGAPI int FGAPIENTRY glutBitmapHeight( void* font ); -FGAPI GLfloat FGAPIENTRY glutStrokeHeight( void* font ); -FGAPI void FGAPIENTRY glutBitmapString( void* font, const unsigned char *string ); -FGAPI void FGAPIENTRY glutStrokeString( void* font, const unsigned char *string ); - -/* - * Geometry functions, see freeglut_geometry.c - */ -FGAPI void FGAPIENTRY glutWireRhombicDodecahedron( void ); -FGAPI void FGAPIENTRY glutSolidRhombicDodecahedron( void ); -FGAPI void FGAPIENTRY glutWireSierpinskiSponge ( int num_levels, GLdouble offset[3], GLdouble scale ); -FGAPI void FGAPIENTRY glutSolidSierpinskiSponge ( int num_levels, GLdouble offset[3], GLdouble scale ); -FGAPI void FGAPIENTRY glutWireCylinder( GLdouble radius, GLdouble height, GLint slices, GLint stacks); -FGAPI void FGAPIENTRY glutSolidCylinder( GLdouble radius, GLdouble height, GLint slices, GLint stacks); - -/* - * Extension functions, see freeglut_ext.c - */ -typedef void (*GLUTproc)(); -FGAPI GLUTproc FGAPIENTRY glutGetProcAddress( const char *procName ); - -/* - * Multi-touch/multi-pointer extensions - */ - -#define GLUT_HAS_MULTI 1 - -FGAPI void FGAPIENTRY glutMultiEntryFunc( void (* callback)( int, int ) ); -FGAPI void FGAPIENTRY glutMultiButtonFunc( void (* callback)( int, int, int, int, int ) ); -FGAPI void FGAPIENTRY glutMultiMotionFunc( void (* callback)( int, int, int ) ); -FGAPI void FGAPIENTRY glutMultiPassiveFunc( void (* callback)( int, int, int ) ); - -/* - * Joystick functions, see freeglut_joystick.c - */ -/* USE OF THESE FUNCTIONS IS DEPRECATED !!!!! */ -/* If you have a serious need for these functions in your application, please either - * contact the "freeglut" developer community at freeglut-developer@lists.sourceforge.net, - * switch to the OpenGLUT library, or else port your joystick functionality over to PLIB's - * "js" library. - */ -int glutJoystickGetNumAxes( int ident ); -int glutJoystickGetNumButtons( int ident ); -int glutJoystickNotWorking( int ident ); -float glutJoystickGetDeadBand( int ident, int axis ); -void glutJoystickSetDeadBand( int ident, int axis, float db ); -float glutJoystickGetSaturation( int ident, int axis ); -void glutJoystickSetSaturation( int ident, int axis, float st ); -void glutJoystickSetMinRange( int ident, float *axes ); -void glutJoystickSetMaxRange( int ident, float *axes ); -void glutJoystickSetCenter( int ident, float *axes ); -void glutJoystickGetMinRange( int ident, float *axes ); -void glutJoystickGetMaxRange( int ident, float *axes ); -void glutJoystickGetCenter( int ident, float *axes ); - -/* - * Initialization functions, see freeglut_init.c - */ -FGAPI void FGAPIENTRY glutInitContextVersion( int majorVersion, int minorVersion ); -FGAPI void FGAPIENTRY glutInitContextFlags( int flags ); -FGAPI void FGAPIENTRY glutInitContextProfile( int profile ); - -/* to get the typedef for va_list */ -#include <stdarg.h> - -FGAPI void FGAPIENTRY glutInitErrorFunc( void (* vError)( const char *fmt, va_list ap ) ); -FGAPI void FGAPIENTRY glutInitWarningFunc( void (* vWarning)( const char *fmt, va_list ap ) ); - -/* - * GLUT API macro definitions -- the display mode definitions - */ -#define GLUT_CAPTIONLESS 0x0400 -#define GLUT_BORDERLESS 0x0800 -#define GLUT_SRGB 0x1000 - -#ifdef __cplusplus - } -#endif - -/*** END OF FILE ***/ - -#endif /* __FREEGLUT_EXT_H__ */ diff --git a/examples/common/opengl-framework/freeglut/GL/freeglut_std.h b/examples/common/opengl-framework/freeglut/GL/freeglut_std.h deleted file mode 100644 index ba1b7165..00000000 --- a/examples/common/opengl-framework/freeglut/GL/freeglut_std.h +++ /dev/null @@ -1,628 +0,0 @@ -#ifndef __FREEGLUT_STD_H__ -#define __FREEGLUT_STD_H__ - -/* - * freeglut_std.h - * - * The GLUT-compatible part of the freeglut library 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. - */ - -#ifdef __cplusplus - extern "C" { -#endif - -/* - * Under windows, we have to differentiate between static and dynamic libraries - */ -#ifdef _WIN32 -/* #pragma may not be supported by some compilers. - * Discussion by FreeGLUT developers suggests that - * Visual C++ specific code involving pragmas may - * need to move to a separate header. 24th Dec 2003 - */ - -/* Define FREEGLUT_LIB_PRAGMAS to 1 to include library - * pragmas or to 0 to exclude library pragmas. - * The default behavior depends on the compiler/platform. - */ -# ifndef FREEGLUT_LIB_PRAGMAS -# if ( defined(_MSC_VER) || defined(__WATCOMC__) ) && !defined(_WIN32_WCE) -# define FREEGLUT_LIB_PRAGMAS 1 -# else -# define FREEGLUT_LIB_PRAGMAS 0 -# endif -# endif - -# ifndef WIN32_LEAN_AND_MEAN -# define WIN32_LEAN_AND_MEAN 1 -# endif -# ifndef NOMINMAX -# define NOMINMAX -# endif -# include <windows.h> - -/* Windows static library */ -# ifdef FREEGLUT_STATIC - -# define FGAPI -# define FGAPIENTRY - - /* Link with Win32 static freeglut lib */ -# if FREEGLUT_LIB_PRAGMAS -# pragma comment (lib, "freeglut_static.lib") -# endif - -/* Windows shared library (DLL) */ -# else - -# define FGAPIENTRY __stdcall -# if defined(FREEGLUT_EXPORTS) -# define FGAPI __declspec(dllexport) -# else -# define FGAPI __declspec(dllimport) - - /* Link with Win32 shared freeglut lib */ -# if FREEGLUT_LIB_PRAGMAS -# pragma comment (lib, "freeglut.lib") -# endif - -# endif - -# endif - -/* Drag in other Windows libraries as required by FreeGLUT */ -# if FREEGLUT_LIB_PRAGMAS -# pragma comment (lib, "glu32.lib") /* link OpenGL Utility lib */ -# pragma comment (lib, "opengl32.lib") /* link Microsoft OpenGL lib */ -# pragma comment (lib, "gdi32.lib") /* link Windows GDI lib */ -# pragma comment (lib, "winmm.lib") /* link Windows MultiMedia lib */ -# pragma comment (lib, "user32.lib") /* link Windows user lib */ -# endif - -#else - -/* Non-Windows definition of FGAPI and FGAPIENTRY */ -# define FGAPI -# define FGAPIENTRY - -#endif - -/* - * The freeglut and GLUT API versions - */ -#define FREEGLUT 1 -#define GLUT_API_VERSION 4 -#define FREEGLUT_VERSION_2_0 1 -#define GLUT_XLIB_IMPLEMENTATION 13 - -/* - * Always include OpenGL and GLU headers - */ -#include <GL/gl.h> -#include <GL/glu.h> - -/* - * GLUT API macro definitions -- the special key codes: - */ -#define GLUT_KEY_F1 0x0001 -#define GLUT_KEY_F2 0x0002 -#define GLUT_KEY_F3 0x0003 -#define GLUT_KEY_F4 0x0004 -#define GLUT_KEY_F5 0x0005 -#define GLUT_KEY_F6 0x0006 -#define GLUT_KEY_F7 0x0007 -#define GLUT_KEY_F8 0x0008 -#define GLUT_KEY_F9 0x0009 -#define GLUT_KEY_F10 0x000A -#define GLUT_KEY_F11 0x000B -#define GLUT_KEY_F12 0x000C -#define GLUT_KEY_LEFT 0x0064 -#define GLUT_KEY_UP 0x0065 -#define GLUT_KEY_RIGHT 0x0066 -#define GLUT_KEY_DOWN 0x0067 -#define GLUT_KEY_PAGE_UP 0x0068 -#define GLUT_KEY_PAGE_DOWN 0x0069 -#define GLUT_KEY_HOME 0x006A -#define GLUT_KEY_END 0x006B -#define GLUT_KEY_INSERT 0x006C - -/* - * GLUT API macro definitions -- mouse state definitions - */ -#define GLUT_LEFT_BUTTON 0x0000 -#define GLUT_MIDDLE_BUTTON 0x0001 -#define GLUT_RIGHT_BUTTON 0x0002 -#define GLUT_DOWN 0x0000 -#define GLUT_UP 0x0001 -#define GLUT_LEFT 0x0000 -#define GLUT_ENTERED 0x0001 - -/* - * GLUT API macro definitions -- the display mode definitions - */ -#define GLUT_RGB 0x0000 -#define GLUT_RGBA 0x0000 -#define GLUT_INDEX 0x0001 -#define GLUT_SINGLE 0x0000 -#define GLUT_DOUBLE 0x0002 -#define GLUT_ACCUM 0x0004 -#define GLUT_ALPHA 0x0008 -#define GLUT_DEPTH 0x0010 -#define GLUT_STENCIL 0x0020 -#define GLUT_MULTISAMPLE 0x0080 -#define GLUT_STEREO 0x0100 -#define GLUT_LUMINANCE 0x0200 - -/* - * GLUT API macro definitions -- windows and menu related definitions - */ -#define GLUT_MENU_NOT_IN_USE 0x0000 -#define GLUT_MENU_IN_USE 0x0001 -#define GLUT_NOT_VISIBLE 0x0000 -#define GLUT_VISIBLE 0x0001 -#define GLUT_HIDDEN 0x0000 -#define GLUT_FULLY_RETAINED 0x0001 -#define GLUT_PARTIALLY_RETAINED 0x0002 -#define GLUT_FULLY_COVERED 0x0003 - -/* - * GLUT API macro definitions -- fonts definitions - * - * Steve Baker suggested to make it binary compatible with GLUT: - */ -#if defined(_MSC_VER) || defined(__CYGWIN__) || defined(__MINGW32__) || defined(__WATCOMC__) -# define GLUT_STROKE_ROMAN ((void *)0x0000) -# define GLUT_STROKE_MONO_ROMAN ((void *)0x0001) -# define GLUT_BITMAP_9_BY_15 ((void *)0x0002) -# define GLUT_BITMAP_8_BY_13 ((void *)0x0003) -# define GLUT_BITMAP_TIMES_ROMAN_10 ((void *)0x0004) -# define GLUT_BITMAP_TIMES_ROMAN_24 ((void *)0x0005) -# define GLUT_BITMAP_HELVETICA_10 ((void *)0x0006) -# define GLUT_BITMAP_HELVETICA_12 ((void *)0x0007) -# define GLUT_BITMAP_HELVETICA_18 ((void *)0x0008) -#else - /* - * I don't really know if it's a good idea... But here it goes: - */ - extern void* glutStrokeRoman; - extern void* glutStrokeMonoRoman; - extern void* glutBitmap9By15; - extern void* glutBitmap8By13; - extern void* glutBitmapTimesRoman10; - extern void* glutBitmapTimesRoman24; - extern void* glutBitmapHelvetica10; - extern void* glutBitmapHelvetica12; - extern void* glutBitmapHelvetica18; - - /* - * Those pointers will be used by following definitions: - */ -# define GLUT_STROKE_ROMAN ((void *) &glutStrokeRoman) -# define GLUT_STROKE_MONO_ROMAN ((void *) &glutStrokeMonoRoman) -# define GLUT_BITMAP_9_BY_15 ((void *) &glutBitmap9By15) -# define GLUT_BITMAP_8_BY_13 ((void *) &glutBitmap8By13) -# define GLUT_BITMAP_TIMES_ROMAN_10 ((void *) &glutBitmapTimesRoman10) -# define GLUT_BITMAP_TIMES_ROMAN_24 ((void *) &glutBitmapTimesRoman24) -# define GLUT_BITMAP_HELVETICA_10 ((void *) &glutBitmapHelvetica10) -# define GLUT_BITMAP_HELVETICA_12 ((void *) &glutBitmapHelvetica12) -# define GLUT_BITMAP_HELVETICA_18 ((void *) &glutBitmapHelvetica18) -#endif - -/* - * GLUT API macro definitions -- the glutGet parameters - */ -#define GLUT_WINDOW_X 0x0064 -#define GLUT_WINDOW_Y 0x0065 -#define GLUT_WINDOW_WIDTH 0x0066 -#define GLUT_WINDOW_HEIGHT 0x0067 -#define GLUT_WINDOW_BUFFER_SIZE 0x0068 -#define GLUT_WINDOW_STENCIL_SIZE 0x0069 -#define GLUT_WINDOW_DEPTH_SIZE 0x006A -#define GLUT_WINDOW_RED_SIZE 0x006B -#define GLUT_WINDOW_GREEN_SIZE 0x006C -#define GLUT_WINDOW_BLUE_SIZE 0x006D -#define GLUT_WINDOW_ALPHA_SIZE 0x006E -#define GLUT_WINDOW_ACCUM_RED_SIZE 0x006F -#define GLUT_WINDOW_ACCUM_GREEN_SIZE 0x0070 -#define GLUT_WINDOW_ACCUM_BLUE_SIZE 0x0071 -#define GLUT_WINDOW_ACCUM_ALPHA_SIZE 0x0072 -#define GLUT_WINDOW_DOUBLEBUFFER 0x0073 -#define GLUT_WINDOW_RGBA 0x0074 -#define GLUT_WINDOW_PARENT 0x0075 -#define GLUT_WINDOW_NUM_CHILDREN 0x0076 -#define GLUT_WINDOW_COLORMAP_SIZE 0x0077 -#define GLUT_WINDOW_NUM_SAMPLES 0x0078 -#define GLUT_WINDOW_STEREO 0x0079 -#define GLUT_WINDOW_CURSOR 0x007A - -#define GLUT_SCREEN_WIDTH 0x00C8 -#define GLUT_SCREEN_HEIGHT 0x00C9 -#define GLUT_SCREEN_WIDTH_MM 0x00CA -#define GLUT_SCREEN_HEIGHT_MM 0x00CB -#define GLUT_MENU_NUM_ITEMS 0x012C -#define GLUT_DISPLAY_MODE_POSSIBLE 0x0190 -#define GLUT_INIT_WINDOW_X 0x01F4 -#define GLUT_INIT_WINDOW_Y 0x01F5 -#define GLUT_INIT_WINDOW_WIDTH 0x01F6 -#define GLUT_INIT_WINDOW_HEIGHT 0x01F7 -#define GLUT_INIT_DISPLAY_MODE 0x01F8 -#define GLUT_ELAPSED_TIME 0x02BC -#define GLUT_WINDOW_FORMAT_ID 0x007B - -/* - * GLUT API macro definitions -- the glutDeviceGet parameters - */ -#define GLUT_HAS_KEYBOARD 0x0258 -#define GLUT_HAS_MOUSE 0x0259 -#define GLUT_HAS_SPACEBALL 0x025A -#define GLUT_HAS_DIAL_AND_BUTTON_BOX 0x025B -#define GLUT_HAS_TABLET 0x025C -#define GLUT_NUM_MOUSE_BUTTONS 0x025D -#define GLUT_NUM_SPACEBALL_BUTTONS 0x025E -#define GLUT_NUM_BUTTON_BOX_BUTTONS 0x025F -#define GLUT_NUM_DIALS 0x0260 -#define GLUT_NUM_TABLET_BUTTONS 0x0261 -#define GLUT_DEVICE_IGNORE_KEY_REPEAT 0x0262 -#define GLUT_DEVICE_KEY_REPEAT 0x0263 -#define GLUT_HAS_JOYSTICK 0x0264 -#define GLUT_OWNS_JOYSTICK 0x0265 -#define GLUT_JOYSTICK_BUTTONS 0x0266 -#define GLUT_JOYSTICK_AXES 0x0267 -#define GLUT_JOYSTICK_POLL_RATE 0x0268 - -/* - * GLUT API macro definitions -- the glutLayerGet parameters - */ -#define GLUT_OVERLAY_POSSIBLE 0x0320 -#define GLUT_LAYER_IN_USE 0x0321 -#define GLUT_HAS_OVERLAY 0x0322 -#define GLUT_TRANSPARENT_INDEX 0x0323 -#define GLUT_NORMAL_DAMAGED 0x0324 -#define GLUT_OVERLAY_DAMAGED 0x0325 - -/* - * GLUT API macro definitions -- the glutVideoResizeGet parameters - */ -#define GLUT_VIDEO_RESIZE_POSSIBLE 0x0384 -#define GLUT_VIDEO_RESIZE_IN_USE 0x0385 -#define GLUT_VIDEO_RESIZE_X_DELTA 0x0386 -#define GLUT_VIDEO_RESIZE_Y_DELTA 0x0387 -#define GLUT_VIDEO_RESIZE_WIDTH_DELTA 0x0388 -#define GLUT_VIDEO_RESIZE_HEIGHT_DELTA 0x0389 -#define GLUT_VIDEO_RESIZE_X 0x038A -#define GLUT_VIDEO_RESIZE_Y 0x038B -#define GLUT_VIDEO_RESIZE_WIDTH 0x038C -#define GLUT_VIDEO_RESIZE_HEIGHT 0x038D - -/* - * GLUT API macro definitions -- the glutUseLayer parameters - */ -#define GLUT_NORMAL 0x0000 -#define GLUT_OVERLAY 0x0001 - -/* - * GLUT API macro definitions -- the glutGetModifiers parameters - */ -#define GLUT_ACTIVE_SHIFT 0x0001 -#define GLUT_ACTIVE_CTRL 0x0002 -#define GLUT_ACTIVE_ALT 0x0004 - -/* - * GLUT API macro definitions -- the glutSetCursor parameters - */ -#define GLUT_CURSOR_RIGHT_ARROW 0x0000 -#define GLUT_CURSOR_LEFT_ARROW 0x0001 -#define GLUT_CURSOR_INFO 0x0002 -#define GLUT_CURSOR_DESTROY 0x0003 -#define GLUT_CURSOR_HELP 0x0004 -#define GLUT_CURSOR_CYCLE 0x0005 -#define GLUT_CURSOR_SPRAY 0x0006 -#define GLUT_CURSOR_WAIT 0x0007 -#define GLUT_CURSOR_TEXT 0x0008 -#define GLUT_CURSOR_CROSSHAIR 0x0009 -#define GLUT_CURSOR_UP_DOWN 0x000A -#define GLUT_CURSOR_LEFT_RIGHT 0x000B -#define GLUT_CURSOR_TOP_SIDE 0x000C -#define GLUT_CURSOR_BOTTOM_SIDE 0x000D -#define GLUT_CURSOR_LEFT_SIDE 0x000E -#define GLUT_CURSOR_RIGHT_SIDE 0x000F -#define GLUT_CURSOR_TOP_LEFT_CORNER 0x0010 -#define GLUT_CURSOR_TOP_RIGHT_CORNER 0x0011 -#define GLUT_CURSOR_BOTTOM_RIGHT_CORNER 0x0012 -#define GLUT_CURSOR_BOTTOM_LEFT_CORNER 0x0013 -#define GLUT_CURSOR_INHERIT 0x0064 -#define GLUT_CURSOR_NONE 0x0065 -#define GLUT_CURSOR_FULL_CROSSHAIR 0x0066 - -/* - * GLUT API macro definitions -- RGB color component specification definitions - */ -#define GLUT_RED 0x0000 -#define GLUT_GREEN 0x0001 -#define GLUT_BLUE 0x0002 - -/* - * GLUT API macro definitions -- additional keyboard and joystick definitions - */ -#define GLUT_KEY_REPEAT_OFF 0x0000 -#define GLUT_KEY_REPEAT_ON 0x0001 -#define GLUT_KEY_REPEAT_DEFAULT 0x0002 - -#define GLUT_JOYSTICK_BUTTON_A 0x0001 -#define GLUT_JOYSTICK_BUTTON_B 0x0002 -#define GLUT_JOYSTICK_BUTTON_C 0x0004 -#define GLUT_JOYSTICK_BUTTON_D 0x0008 - -/* - * GLUT API macro definitions -- game mode definitions - */ -#define GLUT_GAME_MODE_ACTIVE 0x0000 -#define GLUT_GAME_MODE_POSSIBLE 0x0001 -#define GLUT_GAME_MODE_WIDTH 0x0002 -#define GLUT_GAME_MODE_HEIGHT 0x0003 -#define GLUT_GAME_MODE_PIXEL_DEPTH 0x0004 -#define GLUT_GAME_MODE_REFRESH_RATE 0x0005 -#define GLUT_GAME_MODE_DISPLAY_CHANGED 0x0006 - -/* - * Initialization functions, see fglut_init.c - */ -FGAPI void FGAPIENTRY glutInit( int* pargc, char** argv ); -FGAPI void FGAPIENTRY glutInitWindowPosition( int x, int y ); -FGAPI void FGAPIENTRY glutInitWindowSize( int width, int height ); -FGAPI void FGAPIENTRY glutInitDisplayMode( unsigned int displayMode ); -FGAPI void FGAPIENTRY glutInitDisplayString( const char* displayMode ); - -/* - * Process loop function, see freeglut_main.c - */ -FGAPI void FGAPIENTRY glutMainLoop( void ); - -/* - * Window management functions, see freeglut_window.c - */ -FGAPI int FGAPIENTRY glutCreateWindow( const char* title ); -FGAPI int FGAPIENTRY glutCreateSubWindow( int window, int x, int y, int width, int height ); -FGAPI void FGAPIENTRY glutDestroyWindow( int window ); -FGAPI void FGAPIENTRY glutSetWindow( int window ); -FGAPI int FGAPIENTRY glutGetWindow( void ); -FGAPI void FGAPIENTRY glutSetWindowTitle( const char* title ); -FGAPI void FGAPIENTRY glutSetIconTitle( const char* title ); -FGAPI void FGAPIENTRY glutReshapeWindow( int width, int height ); -FGAPI void FGAPIENTRY glutPositionWindow( int x, int y ); -FGAPI void FGAPIENTRY glutShowWindow( void ); -FGAPI void FGAPIENTRY glutHideWindow( void ); -FGAPI void FGAPIENTRY glutIconifyWindow( void ); -FGAPI void FGAPIENTRY glutPushWindow( void ); -FGAPI void FGAPIENTRY glutPopWindow( void ); -FGAPI void FGAPIENTRY glutFullScreen( void ); - -/* - * Display-connected functions, see freeglut_display.c - */ -FGAPI void FGAPIENTRY glutPostWindowRedisplay( int window ); -FGAPI void FGAPIENTRY glutPostRedisplay( void ); -FGAPI void FGAPIENTRY glutSwapBuffers( void ); - -/* - * Mouse cursor functions, see freeglut_cursor.c - */ -FGAPI void FGAPIENTRY glutWarpPointer( int x, int y ); -FGAPI void FGAPIENTRY glutSetCursor( int cursor ); - -/* - * Overlay stuff, see freeglut_overlay.c - */ -FGAPI void FGAPIENTRY glutEstablishOverlay( void ); -FGAPI void FGAPIENTRY glutRemoveOverlay( void ); -FGAPI void FGAPIENTRY glutUseLayer( GLenum layer ); -FGAPI void FGAPIENTRY glutPostOverlayRedisplay( void ); -FGAPI void FGAPIENTRY glutPostWindowOverlayRedisplay( int window ); -FGAPI void FGAPIENTRY glutShowOverlay( void ); -FGAPI void FGAPIENTRY glutHideOverlay( void ); - -/* - * Menu stuff, see freeglut_menu.c - */ -FGAPI int FGAPIENTRY glutCreateMenu( void (* callback)( int menu ) ); -FGAPI void FGAPIENTRY glutDestroyMenu( int menu ); -FGAPI int FGAPIENTRY glutGetMenu( void ); -FGAPI void FGAPIENTRY glutSetMenu( int menu ); -FGAPI void FGAPIENTRY glutAddMenuEntry( const char* label, int value ); -FGAPI void FGAPIENTRY glutAddSubMenu( const char* label, int subMenu ); -FGAPI void FGAPIENTRY glutChangeToMenuEntry( int item, const char* label, int value ); -FGAPI void FGAPIENTRY glutChangeToSubMenu( int item, const char* label, int value ); -FGAPI void FGAPIENTRY glutRemoveMenuItem( int item ); -FGAPI void FGAPIENTRY glutAttachMenu( int button ); -FGAPI void FGAPIENTRY glutDetachMenu( int button ); - -/* - * Global callback functions, see freeglut_callbacks.c - */ -FGAPI void FGAPIENTRY glutTimerFunc( unsigned int time, void (* callback)( int ), int value ); -FGAPI void FGAPIENTRY glutIdleFunc( void (* callback)( void ) ); - -/* - * Window-specific callback functions, see freeglut_callbacks.c - */ -FGAPI void FGAPIENTRY glutKeyboardFunc( void (* callback)( unsigned char, int, int ) ); -FGAPI void FGAPIENTRY glutSpecialFunc( void (* callback)( int, int, int ) ); -FGAPI void FGAPIENTRY glutReshapeFunc( void (* callback)( int, int ) ); -FGAPI void FGAPIENTRY glutVisibilityFunc( void (* callback)( int ) ); -FGAPI void FGAPIENTRY glutDisplayFunc( void (* callback)( void ) ); -FGAPI void FGAPIENTRY glutMouseFunc( void (* callback)( int, int, int, int ) ); -FGAPI void FGAPIENTRY glutMotionFunc( void (* callback)( int, int ) ); -FGAPI void FGAPIENTRY glutPassiveMotionFunc( void (* callback)( int, int ) ); -FGAPI void FGAPIENTRY glutEntryFunc( void (* callback)( int ) ); - -FGAPI void FGAPIENTRY glutKeyboardUpFunc( void (* callback)( unsigned char, int, int ) ); -FGAPI void FGAPIENTRY glutSpecialUpFunc( void (* callback)( int, int, int ) ); -FGAPI void FGAPIENTRY glutJoystickFunc( void (* callback)( unsigned int, int, int, int ), int pollInterval ); -FGAPI void FGAPIENTRY glutMenuStateFunc( void (* callback)( int ) ); -FGAPI void FGAPIENTRY glutMenuStatusFunc( void (* callback)( int, int, int ) ); -FGAPI void FGAPIENTRY glutOverlayDisplayFunc( void (* callback)( void ) ); -FGAPI void FGAPIENTRY glutWindowStatusFunc( void (* callback)( int ) ); - -FGAPI void FGAPIENTRY glutSpaceballMotionFunc( void (* callback)( int, int, int ) ); -FGAPI void FGAPIENTRY glutSpaceballRotateFunc( void (* callback)( int, int, int ) ); -FGAPI void FGAPIENTRY glutSpaceballButtonFunc( void (* callback)( int, int ) ); -FGAPI void FGAPIENTRY glutButtonBoxFunc( void (* callback)( int, int ) ); -FGAPI void FGAPIENTRY glutDialsFunc( void (* callback)( int, int ) ); -FGAPI void FGAPIENTRY glutTabletMotionFunc( void (* callback)( int, int ) ); -FGAPI void FGAPIENTRY glutTabletButtonFunc( void (* callback)( int, int, int, int ) ); - -/* - * State setting and retrieval functions, see freeglut_state.c - */ -FGAPI int FGAPIENTRY glutGet( GLenum query ); -FGAPI int FGAPIENTRY glutDeviceGet( GLenum query ); -FGAPI int FGAPIENTRY glutGetModifiers( void ); -FGAPI int FGAPIENTRY glutLayerGet( GLenum query ); - -/* - * Font stuff, see freeglut_font.c - */ -FGAPI void FGAPIENTRY glutBitmapCharacter( void* font, int character ); -FGAPI int FGAPIENTRY glutBitmapWidth( void* font, int character ); -FGAPI void FGAPIENTRY glutStrokeCharacter( void* font, int character ); -FGAPI int FGAPIENTRY glutStrokeWidth( void* font, int character ); -FGAPI int FGAPIENTRY glutBitmapLength( void* font, const unsigned char* string ); -FGAPI int FGAPIENTRY glutStrokeLength( void* font, const unsigned char* string ); - -/* - * Geometry functions, see freeglut_geometry.c - */ -FGAPI void FGAPIENTRY glutWireCube( GLdouble size ); -FGAPI void FGAPIENTRY glutSolidCube( GLdouble size ); -FGAPI void FGAPIENTRY glutWireSphere( GLdouble radius, GLint slices, GLint stacks ); -FGAPI void FGAPIENTRY glutSolidSphere( GLdouble radius, GLint slices, GLint stacks ); -FGAPI void FGAPIENTRY glutWireCone( GLdouble base, GLdouble height, GLint slices, GLint stacks ); -FGAPI void FGAPIENTRY glutSolidCone( GLdouble base, GLdouble height, GLint slices, GLint stacks ); - -FGAPI void FGAPIENTRY glutWireTorus( GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings ); -FGAPI void FGAPIENTRY glutSolidTorus( GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings ); -FGAPI void FGAPIENTRY glutWireDodecahedron( void ); -FGAPI void FGAPIENTRY glutSolidDodecahedron( void ); -FGAPI void FGAPIENTRY glutWireOctahedron( void ); -FGAPI void FGAPIENTRY glutSolidOctahedron( void ); -FGAPI void FGAPIENTRY glutWireTetrahedron( void ); -FGAPI void FGAPIENTRY glutSolidTetrahedron( void ); -FGAPI void FGAPIENTRY glutWireIcosahedron( void ); -FGAPI void FGAPIENTRY glutSolidIcosahedron( void ); - -/* - * Teapot rendering functions, found in freeglut_teapot.c - */ -FGAPI void FGAPIENTRY glutWireTeapot( GLdouble size ); -FGAPI void FGAPIENTRY glutSolidTeapot( GLdouble size ); - -/* - * Game mode functions, see freeglut_gamemode.c - */ -FGAPI void FGAPIENTRY glutGameModeString( const char* string ); -FGAPI int FGAPIENTRY glutEnterGameMode( void ); -FGAPI void FGAPIENTRY glutLeaveGameMode( void ); -FGAPI int FGAPIENTRY glutGameModeGet( GLenum query ); - -/* - * Video resize functions, see freeglut_videoresize.c - */ -FGAPI int FGAPIENTRY glutVideoResizeGet( GLenum query ); -FGAPI void FGAPIENTRY glutSetupVideoResizing( void ); -FGAPI void FGAPIENTRY glutStopVideoResizing( void ); -FGAPI void FGAPIENTRY glutVideoResize( int x, int y, int width, int height ); -FGAPI void FGAPIENTRY glutVideoPan( int x, int y, int width, int height ); - -/* - * Colormap functions, see freeglut_misc.c - */ -FGAPI void FGAPIENTRY glutSetColor( int color, GLfloat red, GLfloat green, GLfloat blue ); -FGAPI GLfloat FGAPIENTRY glutGetColor( int color, int component ); -FGAPI void FGAPIENTRY glutCopyColormap( int window ); - -/* - * Misc keyboard and joystick functions, see freeglut_misc.c - */ -FGAPI void FGAPIENTRY glutIgnoreKeyRepeat( int ignore ); -FGAPI void FGAPIENTRY glutSetKeyRepeat( int repeatMode ); -FGAPI void FGAPIENTRY glutForceJoystickFunc( void ); - -/* - * Misc functions, see freeglut_misc.c - */ -FGAPI int FGAPIENTRY glutExtensionSupported( const char* extension ); -FGAPI void FGAPIENTRY glutReportErrors( void ); - -/* Comment from glut.h of classic GLUT: - - Win32 has an annoying issue where there are multiple C run-time - libraries (CRTs). If the executable is linked with a different CRT - from the GLUT DLL, the GLUT DLL will not share the same CRT static - data seen by the executable. In particular, atexit callbacks registered - in the executable will not be called if GLUT calls its (different) - exit routine). GLUT is typically built with the - "/MD" option (the CRT with multithreading DLL support), but the Visual - C++ linker default is "/ML" (the single threaded CRT). - - One workaround to this issue is requiring users to always link with - the same CRT as GLUT is compiled with. That requires users supply a - non-standard option. GLUT 3.7 has its own built-in workaround where - the executable's "exit" function pointer is covertly passed to GLUT. - GLUT then calls the executable's exit function pointer to ensure that - any "atexit" calls registered by the application are called if GLUT - needs to exit. - - Note that the __glut*WithExit routines should NEVER be called directly. - To avoid the atexit workaround, #define GLUT_DISABLE_ATEXIT_HACK. */ - -/* to get the prototype for exit() */ -#include <stdlib.h> - -#if defined(_WIN32) && !defined(GLUT_DISABLE_ATEXIT_HACK) && !defined(__WATCOMC__) -FGAPI void FGAPIENTRY __glutInitWithExit(int *argcp, char **argv, void (__cdecl *exitfunc)(int)); -FGAPI int FGAPIENTRY __glutCreateWindowWithExit(const char *title, void (__cdecl *exitfunc)(int)); -FGAPI int FGAPIENTRY __glutCreateMenuWithExit(void (* func)(int), void (__cdecl *exitfunc)(int)); -#ifndef FREEGLUT_BUILDING_LIB -#if defined(__GNUC__) -#define FGUNUSED __attribute__((unused)) -#else -#define FGUNUSED -#endif -static void FGAPIENTRY FGUNUSED glutInit_ATEXIT_HACK(int *argcp, char **argv) { __glutInitWithExit(argcp, argv, exit); } -#define glutInit glutInit_ATEXIT_HACK -static int FGAPIENTRY FGUNUSED glutCreateWindow_ATEXIT_HACK(const char *title) { return __glutCreateWindowWithExit(title, exit); } -#define glutCreateWindow glutCreateWindow_ATEXIT_HACK -static int FGAPIENTRY FGUNUSED glutCreateMenu_ATEXIT_HACK(void (* func)(int)) { return __glutCreateMenuWithExit(func, exit); } -#define glutCreateMenu glutCreateMenu_ATEXIT_HACK -#endif -#endif - -#ifdef __cplusplus - } -#endif - -/*** END OF FILE ***/ - -#endif /* __FREEGLUT_STD_H__ */ - diff --git a/examples/common/opengl-framework/freeglut/GL/glut.h b/examples/common/opengl-framework/freeglut/GL/glut.h deleted file mode 100644 index 6191f77b..00000000 --- a/examples/common/opengl-framework/freeglut/GL/glut.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef __GLUT_H__ -#define __GLUT_H__ - -/* - * glut.h - * - * The freeglut library include file - * - * 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 "freeglut_std.h" - -/*** END OF FILE ***/ - -#endif /* __GLUT_H__ */ diff --git a/examples/common/opengl-framework/freeglut/VERSION.txt b/examples/common/opengl-framework/freeglut/VERSION.txt deleted file mode 100644 index 6533b668..00000000 --- a/examples/common/opengl-framework/freeglut/VERSION.txt +++ /dev/null @@ -1 +0,0 @@ -2.8.0 \ No newline at end of file diff --git a/examples/common/opengl-framework/freeglut/freeglut_callbacks.c b/examples/common/opengl-framework/freeglut/freeglut_callbacks.c deleted file mode 100644 index a40f7daf..00000000 --- a/examples/common/opengl-framework/freeglut/freeglut_callbacks.c +++ /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/examples/common/opengl-framework/freeglut/freeglut_cursor.c b/examples/common/opengl-framework/freeglut/freeglut_cursor.c deleted file mode 100644 index 33708319..00000000 --- a/examples/common/opengl-framework/freeglut/freeglut_cursor.c +++ /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/examples/common/opengl-framework/freeglut/freeglut_display.c b/examples/common/opengl-framework/freeglut/freeglut_display.c deleted file mode 100644 index 2ba0ec54..00000000 --- a/examples/common/opengl-framework/freeglut/freeglut_display.c +++ /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/examples/common/opengl-framework/freeglut/freeglut_ext.c b/examples/common/opengl-framework/freeglut/freeglut_ext.c deleted file mode 100644 index d8aca45e..00000000 --- a/examples/common/opengl-framework/freeglut/freeglut_ext.c +++ /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/examples/common/opengl-framework/freeglut/freeglut_font.c b/examples/common/opengl-framework/freeglut/freeglut_font.c deleted file mode 100644 index e956d5b0..00000000 --- a/examples/common/opengl-framework/freeglut/freeglut_font.c +++ /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/examples/common/opengl-framework/freeglut/freeglut_font_data.c b/examples/common/opengl-framework/freeglut/freeglut_font_data.c deleted file mode 100644 index 35dfc797..00000000 --- a/examples/common/opengl-framework/freeglut/freeglut_font_data.c +++ /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/examples/common/opengl-framework/freeglut/freeglut_gamemode.c b/examples/common/opengl-framework/freeglut/freeglut_gamemode.c deleted file mode 100644 index 803026b0..00000000 --- a/examples/common/opengl-framework/freeglut/freeglut_gamemode.c +++ /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/examples/common/opengl-framework/freeglut/freeglut_geometry.c b/examples/common/opengl-framework/freeglut/freeglut_geometry.c deleted file mode 100644 index 0f9f5c53..00000000 --- a/examples/common/opengl-framework/freeglut/freeglut_geometry.c +++ /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/examples/common/opengl-framework/freeglut/freeglut_glutfont_definitions.c b/examples/common/opengl-framework/freeglut/freeglut_glutfont_definitions.c deleted file mode 100644 index 454ecb73..00000000 --- a/examples/common/opengl-framework/freeglut/freeglut_glutfont_definitions.c +++ /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/examples/common/opengl-framework/freeglut/freeglut_init.c b/examples/common/opengl-framework/freeglut/freeglut_init.c deleted file mode 100644 index f59a456c..00000000 --- a/examples/common/opengl-framework/freeglut/freeglut_init.c +++ /dev/null @@ -1,1180 +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. */ -#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/examples/common/opengl-framework/freeglut/freeglut_input_devices.c b/examples/common/opengl-framework/freeglut/freeglut_input_devices.c deleted file mode 100644 index 04f5fd5d..00000000 --- a/examples/common/opengl-framework/freeglut/freeglut_input_devices.c +++ /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/examples/common/opengl-framework/freeglut/freeglut_internal.h b/examples/common/opengl-framework/freeglut/freeglut_internal.h deleted file mode 100644 index 540f75f5..00000000 --- a/examples/common/opengl-framework/freeglut/freeglut_internal.h +++ /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/examples/common/opengl-framework/freeglut/freeglut_joystick.c b/examples/common/opengl-framework/freeglut/freeglut_joystick.c deleted file mode 100644 index f48dc3f2..00000000 --- a/examples/common/opengl-framework/freeglut/freeglut_joystick.c +++ /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/examples/common/opengl-framework/freeglut/freeglut_main.c b/examples/common/opengl-framework/freeglut/freeglut_main.c deleted file mode 100644 index 5f9b0a5d..00000000 --- a/examples/common/opengl-framework/freeglut/freeglut_main.c +++ /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/examples/common/opengl-framework/freeglut/freeglut_menu.c b/examples/common/opengl-framework/freeglut/freeglut_menu.c deleted file mode 100644 index ea5837e8..00000000 --- a/examples/common/opengl-framework/freeglut/freeglut_menu.c +++ /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/examples/common/opengl-framework/freeglut/freeglut_misc.c b/examples/common/opengl-framework/freeglut/freeglut_misc.c deleted file mode 100644 index 4aa809ac..00000000 --- a/examples/common/opengl-framework/freeglut/freeglut_misc.c +++ /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/examples/common/opengl-framework/freeglut/freeglut_overlay.c b/examples/common/opengl-framework/freeglut/freeglut_overlay.c deleted file mode 100644 index 2a1314a4..00000000 --- a/examples/common/opengl-framework/freeglut/freeglut_overlay.c +++ /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/examples/common/opengl-framework/freeglut/freeglut_spaceball.c b/examples/common/opengl-framework/freeglut/freeglut_spaceball.c deleted file mode 100644 index be0021f0..00000000 --- a/examples/common/opengl-framework/freeglut/freeglut_spaceball.c +++ /dev/null @@ -1,471 +0,0 @@ -/* Spaceball support for Linux. - * Written by John Tsiombikas <nuclear@member.fsf.org> - * - * This code supports 3Dconnexion's 6-dof space-whatever devices. - * It can communicate with either the proprietary 3Dconnexion daemon (3dxsrv) - * free spacenavd (http://spacenav.sourceforge.net), through the "standard" - * magellan X-based protocol. - */ - -#include <GL/freeglut.h> -#include "freeglut_internal.h" - -/* -- PRIVATE FUNCTIONS --------------------------------------------------- */ - -#if TARGET_HOST_POSIX_X11 -#include <X11/Xlib.h> - -enum { - SPNAV_EVENT_ANY, /* used by spnav_remove_events() */ - SPNAV_EVENT_MOTION, - SPNAV_EVENT_BUTTON /* includes both press and release */ -}; - -struct spnav_event_motion { - int type; - int x, y, z; - int rx, ry, rz; - unsigned int period; - int *data; -}; - -struct spnav_event_button { - int type; - int press; - int bnum; -}; - -typedef union spnav_event { - int type; - struct spnav_event_motion motion; - struct spnav_event_button button; -} spnav_event; - - -static int spnav_x11_open(Display *dpy, Window win); -static int spnav_x11_window(Window win); -static int spnav_x11_event(const XEvent *xev, spnav_event *event); -static int spnav_close(void); -static int spnav_fd(void); -static int spnav_remove_events(int type); - -static SFG_Window *spnav_win; -#endif - -/* Flag telling whether we have a spaceball: - * 0 - haven't tried initializing - * 1 - have successfully initialized - * -1 - have tried to initialize but not succeeded - */ -static int sball_initialized = 0; - - -void fgInitialiseSpaceball(void) -{ - if(sball_initialized != 0) { - return; - } - -#if TARGET_HOST_POSIX_X11 - { - Window w; - - if(!fgStructure.CurrentWindow) - { - sball_initialized = -1; - return; - } - - w = fgStructure.CurrentWindow->Window.Handle; - if(spnav_x11_open(fgDisplay.Display, w) == -1) - { - sball_initialized = -1; - return; - } - } -#endif - - sball_initialized = 1; -} - -void fgSpaceballClose(void) -{ -#if TARGET_HOST_POSIX_X11 - spnav_close(); -#endif -} - -int fgHasSpaceball(void) -{ - if(sball_initialized == 0) { - fgInitialiseSpaceball(); - if(sball_initialized != 1) { - fgWarning("fgInitialiseSpaceball failed\n"); - return 0; - } - } - -#if TARGET_HOST_POSIX_X11 - /* XXX this function should somehow query the driver if there's a device - * plugged in, as opposed to just checking if there's a driver to talk to. - */ - return spnav_fd() == -1 ? 0 : 1; -#else - return 0; -#endif -} - -int fgSpaceballNumButtons(void) -{ - if(sball_initialized == 0) { - fgInitialiseSpaceball(); - if(sball_initialized != 1) { - fgWarning("fgInitialiseSpaceball failed\n"); - return 0; - } - } - -#if TARGET_HOST_POSIX_X11 - return 2; /* TODO implement this properly */ -#else - return 0; -#endif -} - -void fgSpaceballSetWindow(SFG_Window *window) -{ - if(sball_initialized == 0) { - fgInitialiseSpaceball(); - if(sball_initialized != 1) { - return; - } - } - -#if TARGET_HOST_POSIX_X11 - if(spnav_win != window) { - spnav_x11_window(window->Window.Handle); - spnav_win = window; - } -#endif -} - - -#if TARGET_HOST_POSIX_X11 -int fgIsSpaceballXEvent(const XEvent *xev) -{ - spnav_event sev; - - if(spnav_win != fgStructure.CurrentWindow) { - /* this will also initialize spaceball if needed (first call) */ - fgSpaceballSetWindow(fgStructure.CurrentWindow); - } - - if(sball_initialized != 1) { - return 0; - } - - return spnav_x11_event(xev, &sev); -} - -void fgSpaceballHandleXEvent(const XEvent *xev) -{ - spnav_event sev; - - if(sball_initialized == 0) { - fgInitialiseSpaceball(); - if(sball_initialized != 1) { - return; - } - } - - if(spnav_x11_event(xev, &sev)) { - switch(sev.type) { - case SPNAV_EVENT_MOTION: - if(sev.motion.x | sev.motion.y | sev.motion.z) { - INVOKE_WCB(*spnav_win, SpaceMotion, (sev.motion.x, sev.motion.y, sev.motion.z)); - } - if(sev.motion.rx | sev.motion.ry | sev.motion.rz) { - INVOKE_WCB(*spnav_win, SpaceRotation, (sev.motion.rx, sev.motion.ry, sev.motion.rz)); - } - spnav_remove_events(SPNAV_EVENT_MOTION); - break; - - case SPNAV_EVENT_BUTTON: - INVOKE_WCB(*spnav_win, SpaceButton, (sev.button.bnum, sev.button.press ? GLUT_DOWN : GLUT_UP)); - break; - - default: - break; - } - } -} - -/* -The following code is part of libspnav, part of the spacenav project (spacenav.sf.net) -Copyright (C) 2007-2009 John Tsiombikas <nuclear@member.fsf.org> - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. -3. The name of the author may not be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED -WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO -EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT -OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING -IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY -OF SUCH DAMAGE. -*/ -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -#ifdef HAVE_ERRNO_H -#include <errno.h> -#endif - -#include <X11/Xlib.h> -#include <X11/Xutil.h> - -static Window get_daemon_window(Display *dpy); -static int catch_badwin(Display *dpy, XErrorEvent *err); - -static Display *dpy; -static Window app_win; -static Atom motion_event, button_press_event, button_release_event, command_event; - -enum { - CMD_APP_WINDOW = 27695, - CMD_APP_SENS -}; - -#define IS_OPEN dpy - -struct event_node { - spnav_event event; - struct event_node *next; -}; - -static int spnav_x11_open(Display *display, Window win) -{ - if(IS_OPEN) { - return -1; - } - - dpy = display; - - motion_event = XInternAtom(dpy, "MotionEvent", True); - button_press_event = XInternAtom(dpy, "ButtonPressEvent", True); - button_release_event = XInternAtom(dpy, "ButtonReleaseEvent", True); - command_event = XInternAtom(dpy, "CommandEvent", True); - - if(!motion_event || !button_press_event || !button_release_event || !command_event) { - dpy = 0; - return -1; /* daemon not started */ - } - - if(spnav_x11_window(win) == -1) { - dpy = 0; - return -1; /* daemon not started */ - } - - app_win = win; - return 0; -} - -static int spnav_close(void) -{ - if(dpy) { - spnav_x11_window(DefaultRootWindow(dpy)); - app_win = 0; - dpy = 0; - return 0; - } - return -1; -} - -static int spnav_x11_window(Window win) -{ - int (*prev_xerr_handler)(Display*, XErrorEvent*); - XEvent xev; - Window daemon_win; - - if(!IS_OPEN) { - return -1; - } - - if(!(daemon_win = get_daemon_window(dpy))) { - return -1; - } - - prev_xerr_handler = XSetErrorHandler(catch_badwin); - - xev.type = ClientMessage; - xev.xclient.send_event = False; - xev.xclient.display = dpy; - xev.xclient.window = win; - xev.xclient.message_type = command_event; - xev.xclient.format = 16; - xev.xclient.data.s[0] = ((unsigned int)win & 0xffff0000) >> 16; - xev.xclient.data.s[1] = (unsigned int)win & 0xffff; - xev.xclient.data.s[2] = CMD_APP_WINDOW; - - XSendEvent(dpy, daemon_win, False, 0, &xev); - XSync(dpy, False); - - XSetErrorHandler(prev_xerr_handler); - return 0; -} - -static int spnav_fd(void) -{ - if(dpy) { - return ConnectionNumber(dpy); - } - return -1; -} - -/*static int spnav_wait_event(spnav_event *event) -{ - if(dpy) { - for(;;) { - XEvent xev; - XNextEvent(dpy, &xev); - - if(spnav_x11_event(&xev, event) > 0) { - return event->type; - } - } - } - return 0; -} - -static int spnav_poll_event(spnav_event *event) -{ - if(dpy) { - if(XPending(dpy)) { - XEvent xev; - XNextEvent(dpy, &xev); - - return spnav_x11_event(&xev, event); - } - } - return 0; -}*/ - -static Bool match_events(Display *dpy, XEvent *xev, char *arg) -{ - int evtype = *(int*)arg; - - if(xev->type != ClientMessage) { - return False; - } - - if(xev->xclient.message_type == motion_event) { - return !evtype || evtype == SPNAV_EVENT_MOTION ? True : False; - } - if(xev->xclient.message_type == button_press_event || - xev->xclient.message_type == button_release_event) { - return !evtype || evtype == SPNAV_EVENT_BUTTON ? True : False; - } - return False; -} - -static int spnav_remove_events(int type) -{ - int rm_count = 0; - - if(dpy) { - XEvent xev; - - while(XCheckIfEvent(dpy, &xev, match_events, (char*)&type)) { - rm_count++; - } - return rm_count; - } - return 0; -} - -static int spnav_x11_event(const XEvent *xev, spnav_event *event) -{ - int i; - int xmsg_type; - - if(xev->type != ClientMessage) { - return 0; - } - - xmsg_type = xev->xclient.message_type; - - if(xmsg_type != motion_event && xmsg_type != button_press_event && - xmsg_type != button_release_event) { - return 0; - } - - if(xmsg_type == motion_event) { - event->type = SPNAV_EVENT_MOTION; - event->motion.data = &event->motion.x; - - for(i=0; i<6; i++) { - event->motion.data[i] = xev->xclient.data.s[i + 2]; - } - event->motion.period = xev->xclient.data.s[8]; - } else { - event->type = SPNAV_EVENT_BUTTON; - event->button.press = xmsg_type == button_press_event ? 1 : 0; - event->button.bnum = xev->xclient.data.s[2]; - } - return event->type; -} - - -static Window get_daemon_window(Display *dpy) -{ - Window win, root_win; - XTextProperty wname; - Atom type; - int fmt; - unsigned long nitems, bytes_after; - unsigned char *prop; - - root_win = DefaultRootWindow(dpy); - - XGetWindowProperty(dpy, root_win, command_event, 0, 1, False, AnyPropertyType, &type, &fmt, &nitems, &bytes_after, &prop); - if(!prop) { - return 0; - } - - win = *(Window*)prop; - XFree(prop); - - if(!XGetWMName(dpy, win, &wname) || strcmp("Magellan Window", (char*)wname.value) != 0) { - return 0; - } - - return win; -} - -static int catch_badwin(Display *dpy, XErrorEvent *err) -{ - char buf[256]; - - if(err->error_code == BadWindow) { - /* do nothing? */ - } else { - XGetErrorText(dpy, err->error_code, buf, sizeof buf); - fprintf(stderr, "Caught unexpected X error: %s\n", buf); - } - return 0; -} - -#endif /* TARGET_HOST_POSIX_X11 */ diff --git a/examples/common/opengl-framework/freeglut/freeglut_state.c b/examples/common/opengl-framework/freeglut/freeglut_state.c deleted file mode 100644 index 9e3a627d..00000000 --- a/examples/common/opengl-framework/freeglut/freeglut_state.c +++ /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/examples/common/opengl-framework/freeglut/freeglut_stroke_mono_roman.c b/examples/common/opengl-framework/freeglut/freeglut_stroke_mono_roman.c deleted file mode 100644 index ec86d56f..00000000 --- a/examples/common/opengl-framework/freeglut/freeglut_stroke_mono_roman.c +++ /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/examples/common/opengl-framework/freeglut/freeglut_stroke_roman.c b/examples/common/opengl-framework/freeglut/freeglut_stroke_roman.c deleted file mode 100644 index da4e0302..00000000 --- a/examples/common/opengl-framework/freeglut/freeglut_stroke_roman.c +++ /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/examples/common/opengl-framework/freeglut/freeglut_structure.c b/examples/common/opengl-framework/freeglut/freeglut_structure.c deleted file mode 100644 index c5a2d734..00000000 --- a/examples/common/opengl-framework/freeglut/freeglut_structure.c +++ /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/examples/common/opengl-framework/freeglut/freeglut_teapot.c b/examples/common/opengl-framework/freeglut/freeglut_teapot.c deleted file mode 100644 index 722bca61..00000000 --- a/examples/common/opengl-framework/freeglut/freeglut_teapot.c +++ /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/examples/common/opengl-framework/freeglut/freeglut_teapot_data.h b/examples/common/opengl-framework/freeglut/freeglut_teapot_data.h deleted file mode 100644 index 3bf83e11..00000000 --- a/examples/common/opengl-framework/freeglut/freeglut_teapot_data.h +++ /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/examples/common/opengl-framework/freeglut/freeglut_videoresize.c b/examples/common/opengl-framework/freeglut/freeglut_videoresize.c deleted file mode 100644 index 4d00fb9c..00000000 --- a/examples/common/opengl-framework/freeglut/freeglut_videoresize.c +++ /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/examples/common/opengl-framework/freeglut/freeglut_window.c b/examples/common/opengl-framework/freeglut/freeglut_window.c deleted file mode 100644 index 0542017b..00000000 --- a/examples/common/opengl-framework/freeglut/freeglut_window.c +++ /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/examples/common/opengl-framework/freeglut/freeglut_xinput.c b/examples/common/opengl-framework/freeglut/freeglut_xinput.c deleted file mode 100644 index b0d8cc7a..00000000 --- a/examples/common/opengl-framework/freeglut/freeglut_xinput.c +++ /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/examples/common/opengl-framework/freeglut/glut.h b/examples/common/opengl-framework/freeglut/glut.h deleted file mode 100644 index 6191f77b..00000000 --- a/examples/common/opengl-framework/freeglut/glut.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef __GLUT_H__ -#define __GLUT_H__ - -/* - * glut.h - * - * The freeglut library include file - * - * 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 "freeglut_std.h" - -/*** END OF FILE ***/ - -#endif /* __GLUT_H__ */ diff --git a/examples/cubes/CMakeLists.txt b/examples/cubes/CMakeLists.txt index 90f64abb..f6b44f3a 100644 --- a/examples/cubes/CMakeLists.txt +++ b/examples/cubes/CMakeLists.txt @@ -8,13 +8,25 @@ PROJECT(Cubes) SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin/cubes/) # Copy the shaders used for the demo into the build directory -FILE(COPY "../common/opengl-framework/src/shaders/" DESTINATION "${EXECUTABLE_OUTPUT_PATH}/shaders/") +FILE(COPY "${OPENGLFRAMEWORK_DIR}/src/shaders/" DESTINATION "${EXECUTABLE_OUTPUT_PATH}/shaders/") # Headers -INCLUDE_DIRECTORIES("../common/opengl-framework/src/" "../common/") +INCLUDE_DIRECTORIES("${OPENGLFRAMEWORK_DIR}/src/" "../common/") -# Create the example executable using the -# compiled reactphysics3d static library -ADD_EXECUTABLE(cubes Cubes.cpp Scene.cpp Scene.h "../common/Box.cpp" "../common/Box.h" "../common/Viewer.cpp" "../common/Viewer.h") +# Source files +SET(CUBES_SOURCES + Cubes.cpp + Scene.cpp + Scene.cpp + Scene.h + "../common/Box.cpp" + "../common/Box.h" + "../common/Viewer.cpp" + "../common/Viewer.h" +) +# Create the executable +ADD_EXECUTABLE(cubes ${CUBES_SOURCES}) + +# Link with libraries TARGET_LINK_LIBRARIES(cubes reactphysics3d openglframework) diff --git a/examples/joints/CMakeLists.txt b/examples/joints/CMakeLists.txt index 458a9731..9b4f71e6 100644 --- a/examples/joints/CMakeLists.txt +++ b/examples/joints/CMakeLists.txt @@ -8,13 +8,24 @@ PROJECT(Joints) SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin/joints/) # Copy the shaders used for the demo into the build directory -FILE(COPY "../common/opengl-framework/src/shaders/" DESTINATION "${EXECUTABLE_OUTPUT_PATH}/shaders/") +FILE(COPY "${OPENGLFRAMEWORK_DIR}/src/shaders/" DESTINATION "${EXECUTABLE_OUTPUT_PATH}/shaders/") # Headers -INCLUDE_DIRECTORIES("../common/opengl-framework/src/" "../common/") +INCLUDE_DIRECTORIES("${OPENGLFRAMEWORK_DIR}/src/" "../common/") -# Create the example executable using the -# compiled reactphysics3d static library -ADD_EXECUTABLE(joints Joints.cpp Scene.cpp Scene.h "../common/Box.cpp" "../common/Box.h" "../common/Viewer.cpp" "../common/Viewer.h") +# Source files +SET(JOINTS_SOURCES + Joints.cpp + Scene.cpp + Scene.h + "../common/Box.cpp" + "../common/Box.h" + "../common/Viewer.cpp" + "../common/Viewer.h" +) +# Create the executable +ADD_EXECUTABLE(joints ${JOINTS_SOURCES}) + +# Link with libraries TARGET_LINK_LIBRARIES(joints reactphysics3d openglframework)