summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rwxr-xr-xSixenseSDK/bin/win32/debug_dll/sixense_utilsd.dllbin0 -> 592384 bytes
-rwxr-xr-xSixenseSDK/bin/win32/debug_dll/sixense_utilsd.pdbbin0 -> 3477504 bytes
-rwxr-xr-xSixenseSDK/bin/win32/debug_dll/sixensed.dllbin0 -> 1367552 bytes
-rwxr-xr-xSixenseSDK/bin/win32/debug_dll/sixensed.pdbbin0 -> 8400896 bytes
-rwxr-xr-xSixenseSDK/bin/win32/debug_static/sixense_utilsd_s.pdbbin0 -> 684032 bytes
-rwxr-xr-xSixenseSDK/bin/win32/debug_static/sixensed_s.pdbbin0 -> 1355776 bytes
-rwxr-xr-xSixenseSDK/bin/win32/release_dll/sixense.dllbin0 -> 622080 bytes
-rwxr-xr-xSixenseSDK/bin/win32/release_dll/sixense.pdbbin0 -> 6811648 bytes
-rwxr-xr-xSixenseSDK/bin/win32/release_dll/sixense_utils.dllbin0 -> 124416 bytes
-rwxr-xr-xSixenseSDK/bin/win32/release_dll/sixense_utils.pdbbin0 -> 1527808 bytes
-rwxr-xr-xSixenseSDK/bin/win32/release_static/sixense_s.pdbbin0 -> 1257472 bytes
-rwxr-xr-xSixenseSDK/bin/win32/release_static/sixense_utils_s.pdbbin0 -> 626688 bytes
-rwxr-xr-xSixenseSDK/bin/x64/debug_dll/sixense_utilsd_x64.dllbin0 -> 776704 bytes
-rwxr-xr-xSixenseSDK/bin/x64/debug_dll/sixense_utilsd_x64.pdbbin0 -> 3714048 bytes
-rwxr-xr-xSixenseSDK/bin/x64/debug_dll/sixensed_x64.dllbin0 -> 919552 bytes
-rwxr-xr-xSixenseSDK/bin/x64/debug_dll/sixensed_x64.pdbbin0 -> 1363968 bytes
-rwxr-xr-xSixenseSDK/bin/x64/debug_static/sixense_utilsd_s_x64.pdbbin0 -> 667648 bytes
-rwxr-xr-xSixenseSDK/bin/x64/debug_static/sixensed_s_x64.pdbbin0 -> 1363968 bytes
-rwxr-xr-xSixenseSDK/bin/x64/release_dll/sixense_utils_x64.dllbin0 -> 152064 bytes
-rwxr-xr-xSixenseSDK/bin/x64/release_dll/sixense_utils_x64.pdbbin0 -> 1346560 bytes
-rwxr-xr-xSixenseSDK/bin/x64/release_dll/sixense_x64.dllbin0 -> 182272 bytes
-rwxr-xr-xSixenseSDK/bin/x64/release_dll/sixense_x64.pdbbin0 -> 1257472 bytes
-rwxr-xr-xSixenseSDK/bin/x64/release_static/sixense_s_x64.pdbbin0 -> 1257472 bytes
-rwxr-xr-xSixenseSDK/bin/x64/release_static/sixense_utils_s_x64.pdbbin0 -> 626688 bytes
-rwxr-xr-xSixenseSDK/doc/Sixense_SDK_Overview.pdfbin0 -> 468193 bytes
-rwxr-xr-xSixenseSDK/doc/Sixense_SDK_Reference.pdfbin0 -> 342063 bytes
-rwxr-xr-xSixenseSDK/include/sixense.h109
-rwxr-xr-xSixenseSDK/include/sixense_math.cpp1398
-rwxr-xr-xSixenseSDK/include/sixense_math.hpp248
-rwxr-xr-xSixenseSDK/include/sixense_utils/accelerometer.hpp0
-rwxr-xr-xSixenseSDK/include/sixense_utils/button_states.hpp106
-rwxr-xr-xSixenseSDK/include/sixense_utils/controller_manager/controller_manager.hpp91
-rwxr-xr-xSixenseSDK/include/sixense_utils/derivatives.hpp63
-rwxr-xr-xSixenseSDK/include/sixense_utils/event_triggers.hpp110
-rwxr-xr-xSixenseSDK/include/sixense_utils/export.hpp27
-rwxr-xr-xSixenseSDK/include/sixense_utils/fps.hpp327
-rwxr-xr-xSixenseSDK/include/sixense_utils/fps_rewrite.hpp270
-rwxr-xr-xSixenseSDK/include/sixense_utils/interfaces.hpp442
-rwxr-xr-xSixenseSDK/include/sixense_utils/keyboard_and_mouse_win32.hpp227
-rwxr-xr-xSixenseSDK/include/sixense_utils/laser_pointer.hpp81
-rwxr-xr-xSixenseSDK/include/sixense_utils/mouse_pointer.hpp76
-rwxr-xr-xSixenseSDK/include/sixense_utils/sixense_utils_string.hpp77
-rwxr-xr-xSixenseSDK/include/sixense_utils/time.hpp23
-rwxr-xr-xSixenseSDK/install/99-sixense-libusb.rules5
-rwxr-xr-xSixenseSDK/install/README.txt383
-rwxr-xr-xSixenseSDK/install/install.cfg73
-rwxr-xr-xSixenseSDK/install/install.py349
-rwxr-xr-xSixenseSDK/lib/linux/debug/libsixense_utilsd.sobin0 -> 2093792 bytes
-rwxr-xr-xSixenseSDK/lib/linux/debug/libsixensed.sobin0 -> 30101794 bytes
-rwxr-xr-xSixenseSDK/lib/linux/release/libsixense.sobin0 -> 461751 bytes
-rwxr-xr-xSixenseSDK/lib/linux/release/libsixense_utils.sobin0 -> 219128 bytes
-rwxr-xr-xSixenseSDK/lib/linux_x64/debug/libsixense_utilsd_x64.sobin0 -> 2249980 bytes
-rwxr-xr-xSixenseSDK/lib/linux_x64/debug/libsixensed_x64.sobin0 -> 30442022 bytes
-rwxr-xr-xSixenseSDK/lib/linux_x64/release/libsixense_utils_x64.sobin0 -> 2249980 bytes
-rwxr-xr-xSixenseSDK/lib/linux_x64/release/libsixense_x64.sobin0 -> 878005 bytes
-rwxr-xr-xSixenseSDK/lib/osx/debug_dll/libsixense_utilsd.dylibbin0 -> 557912 bytes
-rwxr-xr-xSixenseSDK/lib/osx/debug_dll/libsixensed.dylibbin0 -> 1086964 bytes
-rwxr-xr-xSixenseSDK/lib/osx/release_dll/libsixense.dylibbin0 -> 513036 bytes
-rwxr-xr-xSixenseSDK/lib/osx/release_dll/libsixense_utils.dylibbin0 -> 223000 bytes
-rwxr-xr-xSixenseSDK/lib/osx_x64/debug_dll/libsixense_utilsd_x64.dylibbin0 -> 648512 bytes
-rwxr-xr-xSixenseSDK/lib/osx_x64/debug_dll/libsixensed_x64.dylibbin0 -> 1252100 bytes
-rwxr-xr-xSixenseSDK/lib/osx_x64/release_dll/libsixense_utils_x64.dylibbin0 -> 255192 bytes
-rwxr-xr-xSixenseSDK/lib/osx_x64/release_dll/libsixense_x64.dylibbin0 -> 557940 bytes
-rwxr-xr-xSixenseSDK/lib/win32/debug_dll/sixense_utilsd.libbin0 -> 87166 bytes
-rwxr-xr-xSixenseSDK/lib/win32/debug_dll/sixensed.libbin0 -> 12022 bytes
-rwxr-xr-xSixenseSDK/lib/win32/debug_static/sixense_utilsd_s.libbin0 -> 4481842 bytes
-rwxr-xr-xSixenseSDK/lib/win32/debug_static/sixensed_s.libbin0 -> 16874180 bytes
-rwxr-xr-xSixenseSDK/lib/win32/release_dll/sixense.libbin0 -> 11960 bytes
-rwxr-xr-xSixenseSDK/lib/win32/release_dll/sixense_utils.libbin0 -> 86954 bytes
-rwxr-xr-xSixenseSDK/lib/win32/release_static/sixense_s.libbin0 -> 13189148 bytes
-rwxr-xr-xSixenseSDK/lib/win32/release_static/sixense_utils_s.libbin0 -> 11556120 bytes
-rwxr-xr-xSixenseSDK/lib/x64/debug_dll/sixense_utilsd_x64.libbin0 -> 89142 bytes
-rwxr-xr-xSixenseSDK/lib/x64/debug_dll/sixensed_x64.libbin0 -> 12110 bytes
-rwxr-xr-xSixenseSDK/lib/x64/debug_static/sixense_utilsd_s_x64.libbin0 -> 6108746 bytes
-rwxr-xr-xSixenseSDK/lib/x64/debug_static/sixensed_s_x64.libbin0 -> 21353636 bytes
-rwxr-xr-xSixenseSDK/lib/x64/release_dll/sixense_utils_x64.libbin0 -> 88926 bytes
-rwxr-xr-xSixenseSDK/lib/x64/release_dll/sixense_x64.libbin0 -> 11990 bytes
-rwxr-xr-xSixenseSDK/lib/x64/release_static/sixense_s_x64.libbin0 -> 14971132 bytes
-rwxr-xr-xSixenseSDK/lib/x64/release_static/sixense_utils_s_x64.libbin0 -> 11577060 bytes
-rwxr-xr-xSixenseSDK/samples/linux/sixense_simple3d/libfreeglut.sobin0 -> 319505 bytes
-rwxr-xr-xSixenseSDK/samples/linux/sixense_simple3d/libsixense.sobin0 -> 461877 bytes
-rwxr-xr-xSixenseSDK/samples/linux/sixense_simple3d/libsixense_utils.sobin0 -> 219128 bytes
-rwxr-xr-xSixenseSDK/samples/linux/sixense_simple3d/sixense_simple3dbin0 -> 36403 bytes
-rwxr-xr-xSixenseSDK/samples/linux_x64/sixense_simple3d/libfreeglut.sobin0 -> 419582 bytes
-rwxr-xr-xSixenseSDK/samples/linux_x64/sixense_simple3d/libsixense_utils_x64.sobin0 -> 2251860 bytes
-rwxr-xr-xSixenseSDK/samples/linux_x64/sixense_simple3d/libsixense_x64.sobin0 -> 867535 bytes
-rwxr-xr-xSixenseSDK/samples/linux_x64/sixense_simple3d/sixense_simple3dbin0 -> 77607 bytes
-rwxr-xr-xSixenseSDK/samples/osx/osx10.6/sixense_simple3d/libfreeglut.dylibbin0 -> 345516 bytes
-rwxr-xr-xSixenseSDK/samples/osx/osx10.6/sixense_simple3d/libsixense.dylibbin0 -> 513036 bytes
-rwxr-xr-xSixenseSDK/samples/osx/osx10.6/sixense_simple3d/libsixense_utils.dylibbin0 -> 223000 bytes
-rwxr-xr-xSixenseSDK/samples/osx/osx10.6/sixense_simple3d/sixense_simple3dbin0 -> 44432 bytes
-rwxr-xr-xSixenseSDK/samples/osx/osx10.7/sixense_simple3d/libfreeglut.dylibbin0 -> 345292 bytes
-rwxr-xr-xSixenseSDK/samples/osx/osx10.7/sixense_simple3d/libsixense.dylibbin0 -> 513036 bytes
-rwxr-xr-xSixenseSDK/samples/osx/osx10.7/sixense_simple3d/libsixense_utils.dylibbin0 -> 223000 bytes
-rwxr-xr-xSixenseSDK/samples/osx/osx10.7/sixense_simple3d/sixense_simple3dbin0 -> 44492 bytes
-rwxr-xr-xSixenseSDK/samples/osx_x64/osx10.6_x64/sixense_simple3d/libfreeglut.dylibbin0 -> 387152 bytes
-rwxr-xr-xSixenseSDK/samples/osx_x64/osx10.6_x64/sixense_simple3d/libsixense_utils_x64.dylibbin0 -> 255192 bytes
-rwxr-xr-xSixenseSDK/samples/osx_x64/osx10.6_x64/sixense_simple3d/libsixense_x64.dylibbin0 -> 557940 bytes
-rwxr-xr-xSixenseSDK/samples/osx_x64/osx10.6_x64/sixense_simple3d/sixense_simple3dbin0 -> 46268 bytes
-rwxr-xr-xSixenseSDK/samples/osx_x64/osx10.7_x64/sixense_simple3d/libfreeglut.dylibbin0 -> 386920 bytes
-rwxr-xr-xSixenseSDK/samples/osx_x64/osx10.7_x64/sixense_simple3d/libsixense_utils_x64.dylibbin0 -> 255192 bytes
-rwxr-xr-xSixenseSDK/samples/osx_x64/osx10.7_x64/sixense_simple3d/libsixense_x64.dylibbin0 -> 557940 bytes
-rwxr-xr-xSixenseSDK/samples/osx_x64/osx10.7_x64/sixense_simple3d/sixense_simple3dbin0 -> 46244 bytes
-rwxr-xr-xSixenseSDK/samples/win32/sixense_simple3d/DeviceDLL.dllbin0 -> 43520 bytes
-rwxr-xr-xSixenseSDK/samples/win32/sixense_simple3d/freeglut.dllbin0 -> 272896 bytes
-rwxr-xr-xSixenseSDK/samples/win32/sixense_simple3d/hemi_track_log.txt0
-rwxr-xr-xSixenseSDK/samples/win32/sixense_simple3d/msvcp100.dllbin0 -> 421200 bytes
-rwxr-xr-xSixenseSDK/samples/win32/sixense_simple3d/msvcr100.dllbin0 -> 770384 bytes
-rwxr-xr-xSixenseSDK/samples/win32/sixense_simple3d/sixense.dllbin0 -> 622080 bytes
-rwxr-xr-xSixenseSDK/samples/win32/sixense_simple3d/sixense_simple3d.exebin0 -> 25600 bytes
-rwxr-xr-xSixenseSDK/samples/win32/sixense_simple3d/sixense_utils.dllbin0 -> 124416 bytes
-rwxr-xr-xSixenseSDK/samples/x64/sixense_simple3d/DeviceDLL.dllbin0 -> 43520 bytes
-rwxr-xr-xSixenseSDK/samples/x64/sixense_simple3d/freeglut.dllbin0 -> 307712 bytes
-rwxr-xr-xSixenseSDK/samples/x64/sixense_simple3d/hemi_track_log.txt0
-rwxr-xr-xSixenseSDK/samples/x64/sixense_simple3d/msvcp100.dllbin0 -> 421200 bytes
-rwxr-xr-xSixenseSDK/samples/x64/sixense_simple3d/msvcr100.dllbin0 -> 770384 bytes
-rwxr-xr-xSixenseSDK/samples/x64/sixense_simple3d/sixense_simple3d_x64.exebin0 -> 30720 bytes
-rwxr-xr-xSixenseSDK/samples/x64/sixense_simple3d/sixense_utils_x64.dllbin0 -> 152064 bytes
-rwxr-xr-xSixenseSDK/samples/x64/sixense_simple3d/sixense_x64.dllbin0 -> 182272 bytes
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/Eclipse/freeglut/.cproject643
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/Eclipse/freeglut/.project230
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/Eclipse/freeglut/Release_x32/makefile58
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/Eclipse/freeglut/Release_x32/objects.mk8
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/Eclipse/freeglut/Release_x32/sources.mk27
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/Eclipse/freeglut/Release_x32/subdir.mk254
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/Eclipse/freeglut/Release_x64/makefile58
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/Eclipse/freeglut/Release_x64/objects.mk8
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/Eclipse/freeglut/Release_x64/sources.mk27
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/Eclipse/freeglut/Release_x64/subdir.mk254
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/Eclipse/sixense_simple_3d/.cproject632
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/Eclipse/sixense_simple_3d/.project90
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/Eclipse/sixense_simple_3d/Release_x32/makefile58
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/Eclipse/sixense_simple_3d/Release_x32/objects.mk8
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/Eclipse/sixense_simple_3d/Release_x32/sources.mk27
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/Eclipse/sixense_simple_3d/Release_x32/subdir.mk24
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/Eclipse/sixense_simple_3d/Release_x64/makefile58
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/Eclipse/sixense_simple_3d/Release_x64/objects.mk8
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/Eclipse/sixense_simple_3d/Release_x64/sources.mk27
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/Eclipse/sixense_simple_3d/Release_x64/subdir.mk24
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/VisualStudio2010/freeglut.suobin0 -> 26112 bytes
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/VisualStudio2010/freeglut_vs2008.suobin0 -> 27136 bytes
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/VisualStudio2010/freeglut_vs2010.sdfbin0 -> 30167040 bytes
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/VisualStudio2010/freeglut_vs2010.sln55
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/VisualStudio2010/freeglut_vs2010.suobin0 -> 33792 bytes
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/VisualStudio2010/freeglut_vs2010.vcxproj792
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/VisualStudio2010/sixense_simple3d/sixense_simple3d.vcxproj354
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/VisualStudio2010/sixense_simple3d/sixense_simple3d.vcxproj.filters14
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/Xcode/.DS_Storebin0 -> 6148 bytes
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/Xcode/freeglut.xcodeproj/project.pbxproj713
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/Xcode/freeglut.xcodeproj/project.xcworkspace/contents.xcworkspacedata7
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/Xcode/freeglut.xcodeproj/project.xcworkspace/xcuserdata/archie.xcuserdatad/UserInterfaceState.xcuserstatebin0 -> 66381 bytes
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/Xcode/freeglut.xcodeproj/project.xcworkspace/xcuserdata/archie.xcuserdatad/WorkspaceSettings.xcsettings20
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/Xcode/freeglut.xcodeproj/xcuserdata/archie.xcuserdatad/xcschemes/freeglut_i386.xcscheme57
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/Xcode/freeglut.xcodeproj/xcuserdata/archie.xcuserdatad/xcschemes/freeglut_x86_64.xcscheme57
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/Xcode/freeglut.xcodeproj/xcuserdata/archie.xcuserdatad/xcschemes/sixense_simple3d_i386.xcscheme84
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/Xcode/freeglut.xcodeproj/xcuserdata/archie.xcuserdatad/xcschemes/sixense_simple3d_x86_64.xcscheme102
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/Xcode/freeglut.xcodeproj/xcuserdata/archie.xcuserdatad/xcschemes/xcschememanagement.plist62
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/doc/Makefile.am5
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/doc/Makefile.in341
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/doc/download.html42
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/doc/freeglut.html163
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/doc/freeglut_logo.pngbin0 -> 15887 bytes
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/doc/freeglut_user_interface.html1956
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/doc/index.html101
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/doc/ogl_sm.pngbin0 -> 1586 bytes
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/doc/progress.html137
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/doc/structure.html80
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/freeglut-2.6.0.tar.gzbin0 -> 1124186 bytes
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/freeglut.apsbin0 -> 1280 bytes
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/freeglut.rc40
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/include/GL/Makefile.am5
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/include/GL/Makefile.in416
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/include/GL/freeglut.h22
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/include/GL/freeglut_ext.h212
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/include/GL/freeglut_std.h626
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/include/GL/glut.h21
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/include/Makefile.am3
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/include/Makefile.in495
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/progs/Makefile.am1
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/progs/Makefile.in495
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/progs/demos/CallbackMaker/CallbackMaker.c536
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/progs/demos/CallbackMaker/CallbackMaker.dsp102
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/progs/demos/CallbackMaker/CallbackMakerStatic.dsp100
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/progs/demos/CallbackMaker/Makefile.am5
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/progs/demos/CallbackMaker/Makefile.in465
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/progs/demos/Fractals/Fractals.dsp101
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/progs/demos/Fractals/FractalsStatic.dsp100
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/progs/demos/Fractals/Makefile.am5
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/progs/demos/Fractals/Makefile.in465
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/progs/demos/Fractals/fractals.c336
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/progs/demos/Fractals/fractals.dat10
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/progs/demos/Fractals_random/Fractals_random.dsp101
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/progs/demos/Fractals_random/Fractals_randomStatic.dsp100
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/progs/demos/Fractals_random/Makefile.am6
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/progs/demos/Fractals_random/Makefile.in466
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/progs/demos/Fractals_random/fractals.dat10
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/progs/demos/Fractals_random/fractals_random.c387
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/progs/demos/Lorenz/Makefile.am6
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/progs/demos/Lorenz/Makefile.in465
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/progs/demos/Lorenz/lorenz.c379
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/progs/demos/Lorenz/lorenz.dsp102
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/progs/demos/Lorenz/lorenzStatic.dsp100
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/progs/demos/Makefile.am2
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/progs/demos/Makefile.in496
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/progs/demos/One/Makefile.am5
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/progs/demos/One/Makefile.in465
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/progs/demos/One/one.c331
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/progs/demos/One/one.dsp100
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/progs/demos/One/oneStatic.dsp100
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/progs/demos/demos.dsw197
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/progs/demos/shapes/Makefile.am5
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/progs/demos/shapes/Makefile.in465
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/progs/demos/shapes/shapes.c408
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/progs/demos/shapes/shapes.dsp100
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/progs/demos/shapes/shapesStatic.dsp102
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/progs/demos/sixense_simple3d/sixense_simple3d.c899
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/progs/demos/smooth_opengl3/Makefile.am5
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/progs/demos/smooth_opengl3/Makefile.in465
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/progs/demos/smooth_opengl3/smooth_opengl3.c422
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/progs/demos/smooth_opengl3/smooth_opengl3.dsp100
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/progs/demos/smooth_opengl3/smooth_opengl3Static.dsp102
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/progs/demos/spaceball/Makefile.am6
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/progs/demos/spaceball/Makefile.in481
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/progs/demos/spaceball/spaceball.c177
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/progs/demos/spaceball/spaceball.dsp113
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/progs/demos/spaceball/spaceball_static.dsp112
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/progs/demos/spaceball/vmath.c16
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/progs/demos/spaceball/vmath.h38
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/progs/demos/spaceball/vmath.inl68
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/src/Makefile.am53
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/src/Makefile.in749
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/src/freeglut_callbacks.c367
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/src/freeglut_cursor.c280
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/src/freeglut_display.c98
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/src/freeglut_ext.c226
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/src/freeglut_font.c384
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/src/freeglut_font_data.c2020
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/src/freeglut_gamemode.c594
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/src/freeglut_geometry.c1215
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/src/freeglut_glutfont_definitions.c108
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/src/freeglut_init.c1166
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/src/freeglut_input_devices.c395
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/src/freeglut_internal.h960
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/src/freeglut_joystick.c1801
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/src/freeglut_main.c2296
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/src/freeglut_menu.c1002
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/src/freeglut_misc.c214
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/src/freeglut_overlay.c45
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/src/freeglut_spaceball.c454
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/src/freeglut_state.c895
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/src/freeglut_stroke_mono_roman.c2849
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/src/freeglut_stroke_roman.c2849
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/src/freeglut_structure.c596
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/src/freeglut_teapot.c200
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/src/freeglut_teapot_data.h2429
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/src/freeglut_videoresize.c50
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/src/freeglut_window.c1743
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/src/freeglutdll.def148
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/src/templates/cpp_template17
-rwxr-xr-xSixenseSDK/src/sixense_simple3d/src/templates/header_template17
-rwxr-xr-xX-Plane-SDK/CHeaders/Widgets/XPStandardWidgets.h580
-rwxr-xr-xX-Plane-SDK/CHeaders/Widgets/XPUIGraphics.h363
-rwxr-xr-xX-Plane-SDK/CHeaders/Widgets/XPWidgetDefs.h486
-rwxr-xr-xX-Plane-SDK/CHeaders/Widgets/XPWidgetUtils.h234
-rwxr-xr-xX-Plane-SDK/CHeaders/Widgets/XPWidgets.h569
-rwxr-xr-xX-Plane-SDK/CHeaders/Wrappers/XPCBroadcaster.cpp56
-rwxr-xr-xX-Plane-SDK/CHeaders/Wrappers/XPCBroadcaster.h38
-rwxr-xr-xX-Plane-SDK/CHeaders/Wrappers/XPCDisplay.cpp104
-rwxr-xr-xX-Plane-SDK/CHeaders/Wrappers/XPCDisplay.h73
-rwxr-xr-xX-Plane-SDK/CHeaders/Wrappers/XPCListener.cpp27
-rwxr-xr-xX-Plane-SDK/CHeaders/Wrappers/XPCListener.h36
-rwxr-xr-xX-Plane-SDK/CHeaders/Wrappers/XPCProcessing.cpp52
-rwxr-xr-xX-Plane-SDK/CHeaders/Wrappers/XPCProcessing.h37
-rwxr-xr-xX-Plane-SDK/CHeaders/Wrappers/XPCWidget.cpp123
-rwxr-xr-xX-Plane-SDK/CHeaders/Wrappers/XPCWidget.h84
-rwxr-xr-xX-Plane-SDK/CHeaders/Wrappers/XPCWidgetAttachments.cpp267
-rwxr-xr-xX-Plane-SDK/CHeaders/Wrappers/XPCWidgetAttachments.h146
-rwxr-xr-xX-Plane-SDK/CHeaders/XPLM/XPLMCamera.h168
-rwxr-xr-xX-Plane-SDK/CHeaders/XPLM/XPLMDataAccess.h707
-rwxr-xr-xX-Plane-SDK/CHeaders/XPLM/XPLMDefs.h518
-rwxr-xr-xX-Plane-SDK/CHeaders/XPLM/XPLMDisplay.h760
-rwxr-xr-xX-Plane-SDK/CHeaders/XPLM/XPLMGraphics.h408
-rwxr-xr-xX-Plane-SDK/CHeaders/XPLM/XPLMMenus.h225
-rwxr-xr-xX-Plane-SDK/CHeaders/XPLM/XPLMNavigation.h376
-rwxr-xr-xX-Plane-SDK/CHeaders/XPLM/XPLMPlanes.h258
-rwxr-xr-xX-Plane-SDK/CHeaders/XPLM/XPLMPlugin.h331
-rwxr-xr-xX-Plane-SDK/CHeaders/XPLM/XPLMProcessing.h254
-rwxr-xr-xX-Plane-SDK/CHeaders/XPLM/XPLMScenery.h400
-rwxr-xr-xX-Plane-SDK/CHeaders/XPLM/XPLMUtilities.h839
-rwxr-xr-xX-Plane-SDK/Delphi/Widgets/XPStandardWidgets.pas497
-rwxr-xr-xX-Plane-SDK/Delphi/Widgets/XPUIGraphics.pas380
-rwxr-xr-xX-Plane-SDK/Delphi/Widgets/XPWidgetDefs.pas441
-rwxr-xr-xX-Plane-SDK/Delphi/Widgets/XPWidgetUtils.pas225
-rwxr-xr-xX-Plane-SDK/Delphi/Widgets/XPWidgets.pas665
-rwxr-xr-xX-Plane-SDK/Delphi/XPLM/XPLMCamera.pas174
-rwxr-xr-xX-Plane-SDK/Delphi/XPLM/XPLMDataAccess.pas764
-rwxr-xr-xX-Plane-SDK/Delphi/XPLM/XPLMDefs.pas446
-rwxr-xr-xX-Plane-SDK/Delphi/XPLM/XPLMDisplay.pas835
-rwxr-xr-xX-Plane-SDK/Delphi/XPLM/XPLMGraphics.pas441
-rwxr-xr-xX-Plane-SDK/Delphi/XPLM/XPLMMenus.pas259
-rwxr-xr-xX-Plane-SDK/Delphi/XPLM/XPLMNavigation.pas434
-rwxr-xr-xX-Plane-SDK/Delphi/XPLM/XPLMPlanes.pas294
-rwxr-xr-xX-Plane-SDK/Delphi/XPLM/XPLMPlugin.pas381
-rwxr-xr-xX-Plane-SDK/Delphi/XPLM/XPLMProcessing.pas276
-rwxr-xr-xX-Plane-SDK/Delphi/XPLM/XPLMScenery.pas419
-rwxr-xr-xX-Plane-SDK/Delphi/XPLM/XPLMUtilities.pas927
-rwxr-xr-xX-Plane-SDK/Libraries/Mac/XPLM.framework/XPLMbin0 -> 650652 bytes
-rwxr-xr-xX-Plane-SDK/Libraries/Mac/XPWidgets.framework/XPWidgetsbin0 -> 210904 bytes
-rwxr-xr-xX-Plane-SDK/Libraries/Win/XPLM.libbin0 -> 39362 bytes
-rwxr-xr-xX-Plane-SDK/Libraries/Win/XPLM_64.libbin0 -> 39060 bytes
-rwxr-xr-xX-Plane-SDK/Libraries/Win/XPWidgets.libbin0 -> 10524 bytes
-rwxr-xr-xX-Plane-SDK/Libraries/Win/XPWidgets_64.libbin0 -> 10564 bytes
-rwxr-xr-xX-Plane-SDK/README.txt197
-rwxr-xr-xX-Plane-SDK/license.txt27
-rwxr-xr-xfsuipc/FSUIPC_User.h59
-rwxr-xr-xfsuipc/FSUIPC_User.libbin0 -> 6890 bytes
-rwxr-xr-xfsuipc/Lib_source.zipbin0 -> 3525 bytes
-rwxr-xr-xfsuipc/ReadThis.txt120
-rwxr-xr-xfsuipc/UIPCHello.c79
-rwxr-xr-xfsuipc/UIPCHello.rc109
-rwxr-xr-xfsuipc/UIPChello.exebin0 -> 40960 bytes
-rwxr-xr-xfsuipc/libc.libbin0 -> 1379864 bytes
-rwxr-xr-xfsuipc/resource.h15
-rwxr-xr-xvjoy/Debug/VJoy.dllbin0 -> 94208 bytes
-rwxr-xr-xvjoy/Debug/VJoy.exebin0 -> 172147 bytes
-rwxr-xr-xvjoy/Debug/VJoy.ilkbin0 -> 173632 bytes
-rwxr-xr-xvjoy/Debug/VJoy.pchbin0 -> 191584 bytes
-rwxr-xr-xvjoy/Debug/VJoy.pdbbin0 -> 353280 bytes
-rwxr-xr-xvjoy/Debug/vc60.idbbin0 -> 205824 bytes
-rwxr-xr-xvjoy/Debug/vc60.pdbbin0 -> 348160 bytes
-rwxr-xr-xvjoy/ReadMe.txt34
-rwxr-xr-xvjoy/StdAfx.cpp8
-rwxr-xr-xvjoy/StdAfx.h19
-rwxr-xr-xvjoy/VJoy.cpp25
-rwxr-xr-xvjoy/VJoy.dllbin0 -> 94208 bytes
-rwxr-xr-xvjoy/VJoy.dsp121
-rwxr-xr-xvjoy/VJoy.dsw29
-rwxr-xr-xvjoy/VJoy.h39
-rwxr-xr-xvjoy/VJoy.libbin0 -> 2584 bytes
-rwxr-xr-xvjoy/VJoy.ncbbin0 -> 50176 bytes
-rwxr-xr-xvjoy/VJoy.optbin0 -> 53760 bytes
-rwxr-xr-xvjoy/VJoy.plg46
342 files changed, 68137 insertions, 0 deletions
diff --git a/SixenseSDK/bin/win32/debug_dll/sixense_utilsd.dll b/SixenseSDK/bin/win32/debug_dll/sixense_utilsd.dll
new file mode 100755
index 0000000..c3cf294
--- /dev/null
+++ b/SixenseSDK/bin/win32/debug_dll/sixense_utilsd.dll
Binary files differ
diff --git a/SixenseSDK/bin/win32/debug_dll/sixense_utilsd.pdb b/SixenseSDK/bin/win32/debug_dll/sixense_utilsd.pdb
new file mode 100755
index 0000000..e416f37
--- /dev/null
+++ b/SixenseSDK/bin/win32/debug_dll/sixense_utilsd.pdb
Binary files differ
diff --git a/SixenseSDK/bin/win32/debug_dll/sixensed.dll b/SixenseSDK/bin/win32/debug_dll/sixensed.dll
new file mode 100755
index 0000000..be429a2
--- /dev/null
+++ b/SixenseSDK/bin/win32/debug_dll/sixensed.dll
Binary files differ
diff --git a/SixenseSDK/bin/win32/debug_dll/sixensed.pdb b/SixenseSDK/bin/win32/debug_dll/sixensed.pdb
new file mode 100755
index 0000000..7527ea5
--- /dev/null
+++ b/SixenseSDK/bin/win32/debug_dll/sixensed.pdb
Binary files differ
diff --git a/SixenseSDK/bin/win32/debug_static/sixense_utilsd_s.pdb b/SixenseSDK/bin/win32/debug_static/sixense_utilsd_s.pdb
new file mode 100755
index 0000000..43db3a6
--- /dev/null
+++ b/SixenseSDK/bin/win32/debug_static/sixense_utilsd_s.pdb
Binary files differ
diff --git a/SixenseSDK/bin/win32/debug_static/sixensed_s.pdb b/SixenseSDK/bin/win32/debug_static/sixensed_s.pdb
new file mode 100755
index 0000000..7fffe93
--- /dev/null
+++ b/SixenseSDK/bin/win32/debug_static/sixensed_s.pdb
Binary files differ
diff --git a/SixenseSDK/bin/win32/release_dll/sixense.dll b/SixenseSDK/bin/win32/release_dll/sixense.dll
new file mode 100755
index 0000000..5fadb28
--- /dev/null
+++ b/SixenseSDK/bin/win32/release_dll/sixense.dll
Binary files differ
diff --git a/SixenseSDK/bin/win32/release_dll/sixense.pdb b/SixenseSDK/bin/win32/release_dll/sixense.pdb
new file mode 100755
index 0000000..81c1595
--- /dev/null
+++ b/SixenseSDK/bin/win32/release_dll/sixense.pdb
Binary files differ
diff --git a/SixenseSDK/bin/win32/release_dll/sixense_utils.dll b/SixenseSDK/bin/win32/release_dll/sixense_utils.dll
new file mode 100755
index 0000000..e694df0
--- /dev/null
+++ b/SixenseSDK/bin/win32/release_dll/sixense_utils.dll
Binary files differ
diff --git a/SixenseSDK/bin/win32/release_dll/sixense_utils.pdb b/SixenseSDK/bin/win32/release_dll/sixense_utils.pdb
new file mode 100755
index 0000000..fee92b2
--- /dev/null
+++ b/SixenseSDK/bin/win32/release_dll/sixense_utils.pdb
Binary files differ
diff --git a/SixenseSDK/bin/win32/release_static/sixense_s.pdb b/SixenseSDK/bin/win32/release_static/sixense_s.pdb
new file mode 100755
index 0000000..81596b3
--- /dev/null
+++ b/SixenseSDK/bin/win32/release_static/sixense_s.pdb
Binary files differ
diff --git a/SixenseSDK/bin/win32/release_static/sixense_utils_s.pdb b/SixenseSDK/bin/win32/release_static/sixense_utils_s.pdb
new file mode 100755
index 0000000..3246493
--- /dev/null
+++ b/SixenseSDK/bin/win32/release_static/sixense_utils_s.pdb
Binary files differ
diff --git a/SixenseSDK/bin/x64/debug_dll/sixense_utilsd_x64.dll b/SixenseSDK/bin/x64/debug_dll/sixense_utilsd_x64.dll
new file mode 100755
index 0000000..c196e87
--- /dev/null
+++ b/SixenseSDK/bin/x64/debug_dll/sixense_utilsd_x64.dll
Binary files differ
diff --git a/SixenseSDK/bin/x64/debug_dll/sixense_utilsd_x64.pdb b/SixenseSDK/bin/x64/debug_dll/sixense_utilsd_x64.pdb
new file mode 100755
index 0000000..e69d368
--- /dev/null
+++ b/SixenseSDK/bin/x64/debug_dll/sixense_utilsd_x64.pdb
Binary files differ
diff --git a/SixenseSDK/bin/x64/debug_dll/sixensed_x64.dll b/SixenseSDK/bin/x64/debug_dll/sixensed_x64.dll
new file mode 100755
index 0000000..eeb3b6a
--- /dev/null
+++ b/SixenseSDK/bin/x64/debug_dll/sixensed_x64.dll
Binary files differ
diff --git a/SixenseSDK/bin/x64/debug_dll/sixensed_x64.pdb b/SixenseSDK/bin/x64/debug_dll/sixensed_x64.pdb
new file mode 100755
index 0000000..91e1ca9
--- /dev/null
+++ b/SixenseSDK/bin/x64/debug_dll/sixensed_x64.pdb
Binary files differ
diff --git a/SixenseSDK/bin/x64/debug_static/sixense_utilsd_s_x64.pdb b/SixenseSDK/bin/x64/debug_static/sixense_utilsd_s_x64.pdb
new file mode 100755
index 0000000..16132af
--- /dev/null
+++ b/SixenseSDK/bin/x64/debug_static/sixense_utilsd_s_x64.pdb
Binary files differ
diff --git a/SixenseSDK/bin/x64/debug_static/sixensed_s_x64.pdb b/SixenseSDK/bin/x64/debug_static/sixensed_s_x64.pdb
new file mode 100755
index 0000000..c891e19
--- /dev/null
+++ b/SixenseSDK/bin/x64/debug_static/sixensed_s_x64.pdb
Binary files differ
diff --git a/SixenseSDK/bin/x64/release_dll/sixense_utils_x64.dll b/SixenseSDK/bin/x64/release_dll/sixense_utils_x64.dll
new file mode 100755
index 0000000..9cbeb92
--- /dev/null
+++ b/SixenseSDK/bin/x64/release_dll/sixense_utils_x64.dll
Binary files differ
diff --git a/SixenseSDK/bin/x64/release_dll/sixense_utils_x64.pdb b/SixenseSDK/bin/x64/release_dll/sixense_utils_x64.pdb
new file mode 100755
index 0000000..0581e0b
--- /dev/null
+++ b/SixenseSDK/bin/x64/release_dll/sixense_utils_x64.pdb
Binary files differ
diff --git a/SixenseSDK/bin/x64/release_dll/sixense_x64.dll b/SixenseSDK/bin/x64/release_dll/sixense_x64.dll
new file mode 100755
index 0000000..6320f29
--- /dev/null
+++ b/SixenseSDK/bin/x64/release_dll/sixense_x64.dll
Binary files differ
diff --git a/SixenseSDK/bin/x64/release_dll/sixense_x64.pdb b/SixenseSDK/bin/x64/release_dll/sixense_x64.pdb
new file mode 100755
index 0000000..63c7468
--- /dev/null
+++ b/SixenseSDK/bin/x64/release_dll/sixense_x64.pdb
Binary files differ
diff --git a/SixenseSDK/bin/x64/release_static/sixense_s_x64.pdb b/SixenseSDK/bin/x64/release_static/sixense_s_x64.pdb
new file mode 100755
index 0000000..c9bd04b
--- /dev/null
+++ b/SixenseSDK/bin/x64/release_static/sixense_s_x64.pdb
Binary files differ
diff --git a/SixenseSDK/bin/x64/release_static/sixense_utils_s_x64.pdb b/SixenseSDK/bin/x64/release_static/sixense_utils_s_x64.pdb
new file mode 100755
index 0000000..7d1553e
--- /dev/null
+++ b/SixenseSDK/bin/x64/release_static/sixense_utils_s_x64.pdb
Binary files differ
diff --git a/SixenseSDK/doc/Sixense_SDK_Overview.pdf b/SixenseSDK/doc/Sixense_SDK_Overview.pdf
new file mode 100755
index 0000000..3e398e7
--- /dev/null
+++ b/SixenseSDK/doc/Sixense_SDK_Overview.pdf
Binary files differ
diff --git a/SixenseSDK/doc/Sixense_SDK_Reference.pdf b/SixenseSDK/doc/Sixense_SDK_Reference.pdf
new file mode 100755
index 0000000..5666e01
--- /dev/null
+++ b/SixenseSDK/doc/Sixense_SDK_Reference.pdf
Binary files differ
diff --git a/SixenseSDK/include/sixense.h b/SixenseSDK/include/sixense.h
new file mode 100755
index 0000000..b010a90
--- /dev/null
+++ b/SixenseSDK/include/sixense.h
@@ -0,0 +1,109 @@
+/*
+ *
+ * SIXENSE CONFIDENTIAL
+ *
+ * Copyright (C) 2011 Sixense Entertainment Inc.
+ * All Rights Reserved
+ *
+ */
+
+#ifndef _SIXENSE_H_
+#define _SIXENSE_H_
+
+#if defined(WIN32)
+ #ifdef SIXENSE_STATIC_LIB
+ #define SIXENSE_EXPORT
+ #else
+ #ifdef SIXENSE_BUILDING_DLL
+ #define SIXENSE_EXPORT __declspec(dllexport)
+ #else
+ #define SIXENSE_EXPORT __declspec(dllimport)
+ #endif
+ #endif
+#else
+ #define SIXENSE_EXPORT
+#endif
+
+#define SIXENSE_BUTTON_BUMPER (0x01<<7)
+#define SIXENSE_BUTTON_JOYSTICK (0x01<<8)
+#define SIXENSE_BUTTON_1 (0x01<<5)
+#define SIXENSE_BUTTON_2 (0x01<<6)
+#define SIXENSE_BUTTON_3 (0x01<<3)
+#define SIXENSE_BUTTON_4 (0x01<<4)
+#define SIXENSE_BUTTON_START (0x01<<0)
+
+#define SIXENSE_SUCCESS 0
+#define SIXENSE_FAILURE -1
+
+#define SIXENSE_MAX_CONTROLLERS 4
+
+typedef struct _sixenseControllerData {
+ float pos[3];
+ float rot_mat[3][3];
+ float joystick_x;
+ float joystick_y;
+ float trigger;
+ unsigned int buttons;
+ unsigned char sequence_number;
+ float rot_quat[4];
+ unsigned short firmware_revision;
+ unsigned short hardware_revision;
+ unsigned short packet_type;
+ unsigned short magnetic_frequency;
+ int enabled;
+ int controller_index;
+ unsigned char is_docked;
+ unsigned char which_hand;
+ unsigned char hemi_tracking_enabled;
+} sixenseControllerData;
+
+typedef struct _sixenseAllControllerData {
+ sixenseControllerData controllers[4];
+} sixenseAllControllerData;
+
+#if defined(__LANGUAGE_C_PLUS_PLUS)||defined(__cplusplus)||defined(c_plusplus)
+extern "C" {
+#endif
+
+SIXENSE_EXPORT int sixenseInit( void );
+SIXENSE_EXPORT int sixenseExit( void );
+
+SIXENSE_EXPORT int sixenseGetMaxBases();
+SIXENSE_EXPORT int sixenseSetActiveBase( int i );
+SIXENSE_EXPORT int sixenseIsBaseConnected( int i );
+
+SIXENSE_EXPORT int sixenseGetMaxControllers( void );
+SIXENSE_EXPORT int sixenseIsControllerEnabled( int which );
+SIXENSE_EXPORT int sixenseGetNumActiveControllers();
+
+SIXENSE_EXPORT int sixenseGetHistorySize();
+
+SIXENSE_EXPORT int sixenseGetData( int which, int index_back, sixenseControllerData * );
+SIXENSE_EXPORT int sixenseGetAllData( int index_back, sixenseAllControllerData * );
+SIXENSE_EXPORT int sixenseGetNewestData( int which, sixenseControllerData * );
+SIXENSE_EXPORT int sixenseGetAllNewestData( sixenseAllControllerData * );
+
+SIXENSE_EXPORT int sixenseSetHemisphereTrackingMode( int which_controller, int state );
+SIXENSE_EXPORT int sixenseGetHemisphereTrackingMode( int which_controller, int *state );
+
+SIXENSE_EXPORT int sixenseAutoEnableHemisphereTracking( int which_controller );
+
+SIXENSE_EXPORT int sixenseSetHighPriorityBindingEnabled( int on_or_off );
+SIXENSE_EXPORT int sixenseGetHighPriorityBindingEnabled( int *on_or_off );
+
+SIXENSE_EXPORT int sixenseTriggerVibration( int controller_id, int duration_100ms, int pattern_id );
+
+SIXENSE_EXPORT int sixenseSetFilterEnabled( int on_or_off );
+SIXENSE_EXPORT int sixenseGetFilterEnabled( int *on_or_off );
+
+SIXENSE_EXPORT int sixenseSetFilterParams( float near_range, float near_val, float far_range, float far_val );
+SIXENSE_EXPORT int sixenseGetFilterParams( float *near_range, float *near_val, float *far_range, float *far_val );
+
+SIXENSE_EXPORT int sixenseSetBaseColor( unsigned char red, unsigned char green, unsigned char blue );
+SIXENSE_EXPORT int sixenseGetBaseColor( unsigned char *red, unsigned char *green, unsigned char *blue );
+
+#if defined(__LANGUAGE_C_PLUS_PLUS)||defined(__cplusplus)||defined(c_plusplus)
+}
+#endif
+
+#endif /* _SIXENSE_H_ */
diff --git a/SixenseSDK/include/sixense_math.cpp b/SixenseSDK/include/sixense_math.cpp
new file mode 100755
index 0000000..1ba1b43
--- /dev/null
+++ b/SixenseSDK/include/sixense_math.cpp
@@ -0,0 +1,1398 @@
+/*
+ *
+ * SIXENSE CONFIDENTIAL
+ *
+ * Copyright (C) 2011 Sixense Entertainment Inc.
+ * All Rights Reserved
+ *
+ */
+
+
+// Vector2
+
+inline Vector2::Vector2() {
+ _vec[0] = 0.0f;
+ _vec[1] = 0.0f;
+}
+
+inline Vector2::Vector2( float x, float y ) {
+ _vec[0] = x;
+ _vec[1] = y;
+}
+
+inline float& Vector2::operator [](const int idx) {
+ return _vec[idx];
+}
+
+inline Vector2 Vector2::operator -(const Vector2 rhs) {
+ Vector2 rhs_const_copy(rhs);
+ return Vector2( _vec[0] - rhs_const_copy[0], _vec[1] - rhs_const_copy[1] );
+}
+
+inline Vector2 Vector2::operator +(const Vector2 rhs) {
+ Vector2 rhs_const_copy(rhs);
+ return Vector2( _vec[0] + rhs_const_copy[0], _vec[1] + rhs_const_copy[1] );
+}
+
+inline Vector2& Vector2::operator +=(const Vector2& rhs) {
+ Vector2 rhs_const_copy( rhs );
+ _vec[0] += rhs_const_copy[0];
+ _vec[1] += rhs_const_copy[1];
+ return *this;
+}
+
+inline Vector2& Vector2::operator -=(const Vector2& rhs) {
+ Vector2 rhs_const_copy( rhs );
+ _vec[0] -= rhs_const_copy[0];
+ _vec[1] -= rhs_const_copy[1];
+ return *this;
+}
+
+inline float Vector2::operator *(const Vector2 rhs) {
+ Vector2 rhs_const_copy( rhs );
+ return _vec[0]*rhs_const_copy[0] + _vec[1]*rhs_const_copy[1];
+}
+
+inline Vector2 Vector2::operator *(const float rhs) {
+ float rhs_const_copy( rhs );
+ return Vector2( _vec[0]*rhs_const_copy, _vec[1]*rhs_const_copy );
+}
+
+inline Vector2& Vector2::operator *=(const float& rhs) {
+ float rhs_const_copy( rhs );
+ _vec[0]*=rhs_const_copy;
+ _vec[1]*=rhs_const_copy;
+ return *this;
+}
+
+inline Vector2 Vector2::operator /(const float rhs) {
+ float rhs_const_copy( rhs );
+ return Vector2( _vec[0]/rhs_const_copy, _vec[1]/rhs_const_copy);
+}
+
+
+
+
+inline bool Vector2::operator ==(const Vector2& rhs) {
+ Vector2 rhs_const_copy( rhs );
+ if( _vec[0] == rhs_const_copy._vec[0] && _vec[1] == rhs_const_copy._vec[1] ) return true;
+ else return false;
+}
+
+
+
+inline void Vector2::normalize() {
+ float len = sqrtf( _vec[0]*_vec[0] + _vec[1]*_vec[1] );
+ _vec[0]/=len;
+ _vec[1]/=len;
+}
+
+inline float Vector2::length() {
+ return sqrtf( _vec[0]*_vec[0] + _vec[1]*_vec[1] );
+}
+
+inline void Vector2::print( std::string name ) {
+ if( name != "" ) {
+ std::cout << "Vector2 " << name << " = { ";
+ } else {
+ std::cout << "Vector2 = { ";
+ }
+
+ std::cout << _vec[0] << ", " << _vec[1] << " }" << std::endl << std::endl;
+
+}
+
+inline void Vector2::fill( float vec[2] ) {
+ vec[0] = _vec[0];
+ vec[1] = _vec[1];
+}
+
+
+// Vector3
+
+inline Vector3::Vector3() {
+ _vec[0] = 0.0f;
+ _vec[1] = 0.0f;
+ _vec[2] = 0.0f;
+
+}
+
+inline Vector3::Vector3( const Vector3& rhs ) {
+ _vec[0] = rhs._vec[0];
+ _vec[1] = rhs._vec[1];
+ _vec[2] = rhs._vec[2];
+
+}
+
+
+inline Vector3::Vector3( float x, float y, float z ) {
+ _vec[0] = x;
+ _vec[1] = y;
+ _vec[2] = z;
+
+}
+
+inline Vector3::Vector3( const float vec[3] ) {
+ _vec[0] = vec[0];
+ _vec[1] = vec[1];
+ _vec[2] = vec[2];
+
+}
+
+inline float& Vector3::operator [](const int idx) {
+ return _vec[idx];
+}
+
+inline Vector3 Vector3::operator -(const Vector3 rhs) {
+ Vector3 rhs_const_copy( rhs );
+ return Vector3( _vec[0] - rhs_const_copy[0], _vec[1] - rhs_const_copy[1], _vec[2] - rhs_const_copy[2] );
+}
+
+inline Vector3 Vector3::operator +(const Vector3 rhs) {
+ Vector3 rhs_const_copy( rhs );
+ return Vector3( _vec[0] + rhs_const_copy[0], _vec[1] + rhs_const_copy[1], _vec[2] + rhs_const_copy[2] );
+}
+
+inline Vector3& Vector3::operator +=(const Vector3& rhs) {
+ Vector3 rhs_const_copy( rhs );
+ _vec[0] += rhs_const_copy[0];
+ _vec[1] += rhs_const_copy[1];
+ _vec[2] += rhs_const_copy[2];
+ return *this;
+}
+
+inline Vector3& Vector3::operator -=(const Vector3& rhs) {
+ Vector3 rhs_const_copy( rhs );
+ _vec[0] -= rhs_const_copy[0];
+ _vec[1] -= rhs_const_copy[1];
+ _vec[2] -= rhs_const_copy[2];
+ return *this;
+}
+
+inline Vector3 Vector3::operator ^(const Vector3 rhs) {
+ Vector3 rhs_const_copy( rhs );
+ return Vector3( _vec[1]*rhs_const_copy[2]-_vec[2]*rhs_const_copy[1], _vec[2]*rhs_const_copy[0]-_vec[0]*rhs_const_copy[2], _vec[0]*rhs_const_copy[1]-_vec[1]*rhs_const_copy[0] );
+}
+
+
+inline float Vector3::operator *(const Vector3 rhs) {
+ Vector3 rhs_const_copy( rhs );
+ return _vec[0]*rhs_const_copy[0] + _vec[1]*rhs_const_copy[1] + _vec[2]*rhs_const_copy[2];
+}
+
+inline Vector3 Vector3::operator *(const float rhs) {
+ float rhs_const_copy( rhs );
+ return Vector3( _vec[0]*rhs_const_copy, _vec[1]*rhs_const_copy, _vec[2]*rhs_const_copy);
+}
+
+inline Vector3& Vector3::operator *=(const float& rhs) {
+ float rhs_const_copy( rhs );
+ _vec[0]*=rhs_const_copy;
+ _vec[1]*=rhs_const_copy;
+ _vec[2]*=rhs_const_copy;
+ return *this;
+}
+
+inline Vector3 Vector3::operator /(const float rhs) {
+ float rhs_const_copy( rhs );
+ return Vector3( _vec[0]/rhs_const_copy, _vec[1]/rhs_const_copy, _vec[2]/rhs_const_copy);
+}
+
+
+inline bool Vector3::operator ==(const Vector3& rhs) {
+ Vector3 rhs_const_copy( rhs );
+ if( _vec[0] == rhs_const_copy._vec[0] && _vec[1] == rhs_const_copy._vec[1] && _vec[2] == rhs_const_copy._vec[2] ) return true;
+ else return false;
+}
+
+
+
+
+
+inline void Vector3::normalize() {
+ float len = length();
+ _vec[0]/=len;
+ _vec[1]/=len;
+ _vec[2]/=len;
+}
+
+
+inline float Vector3::length() {
+ return sqrt( _vec[0]*_vec[0] + _vec[1]*_vec[1] + _vec[2]*_vec[2] );
+}
+
+inline void Vector3::print( std::string name ) {
+ if( name != "" ) {
+ std::cout << "Vector3 " << name << " = { ";
+ } else {
+ std::cout << "Vector3 = { ";
+ }
+
+ std::cout << _vec[0] << ", " << _vec[1] << ", " << _vec[2] << " }" << std::endl << std::endl;
+
+}
+
+inline Vector3 Vector3::normalize( Vector3 m ) {
+ Vector3 norm(m);
+ norm.normalize();
+ return norm;
+}
+
+inline void Vector3::fill( float vec[3] ) {
+ vec[0] = _vec[0];
+ vec[1] = _vec[1];
+ vec[2] = _vec[2];
+}
+
+
+
+// Vector4
+
+inline Vector4::Vector4() {
+ _vec[0] = 0.0f;
+ _vec[1] = 0.0f;
+ _vec[2] = 0.0f;
+ _vec[3] = 1.0f;
+
+}
+
+inline Vector4::Vector4( const Vector4& rhs ) {
+ _vec[0] = rhs._vec[0];
+ _vec[1] = rhs._vec[1];
+ _vec[2] = rhs._vec[2];
+ _vec[3] = rhs._vec[3];
+
+}
+
+inline Vector4::Vector4( const Vector3& rhs, float w ) {
+ Vector3 rhs_c(rhs);
+ _vec[0] = rhs_c[0];
+ _vec[1] = rhs_c[1];
+ _vec[2] = rhs_c[2];
+ _vec[3] = w;
+}
+
+
+inline Vector4::Vector4( const float vec[4] ) {
+ _vec[0] = vec[0];
+ _vec[1] = vec[1];
+ _vec[2] = vec[2];
+ _vec[3] = vec[3];
+
+}
+
+inline Vector4::Vector4( const float a, const float b, const float c, const float d ) {
+ _vec[0] = a;
+ _vec[1] = b;
+ _vec[2] = c;
+ _vec[3] = d;
+
+}
+
+inline float& Vector4::operator [](const int idx) {
+ return _vec[idx];
+}
+
+inline Vector4 Vector4::operator +(const Vector4 rhs) const {
+ Vector4 rhs_const_copy( rhs );
+ return Vector4( _vec[0] + rhs_const_copy[0], _vec[1] + rhs_const_copy[1], _vec[2] + rhs_const_copy[2], _vec[3] + rhs_const_copy[3] );
+}
+
+inline Vector4 Vector4::operator -(const Vector4 rhs) const {
+ Vector4 rhs_const_copy( rhs );
+ return Vector4( _vec[0] - rhs_const_copy[0], _vec[1] - rhs_const_copy[1], _vec[2] - rhs_const_copy[2], _vec[3] - rhs_const_copy[3] );
+}
+
+inline Vector4 Vector4::operator *(const float rhs) const {
+ float rhs_const_copy( rhs );
+ return Vector4( _vec[0]*rhs_const_copy, _vec[1]*rhs_const_copy, _vec[2]*rhs_const_copy, _vec[3]*rhs_const_copy);
+}
+
+inline Vector4 Vector4::operator /(const float rhs) const {
+ float rhs_const_copy( rhs );
+ return Vector4( _vec[0]/rhs_const_copy, _vec[1]/rhs_const_copy, _vec[2]/rhs_const_copy, _vec[3]/rhs_const_copy);
+}
+
+
+inline Vector4 Vector4::operator -(const float rhs) const {
+ float rhs_const_copy( rhs );
+ return Vector4( _vec[0]-rhs_const_copy, _vec[1]-rhs_const_copy, _vec[2]-rhs_const_copy, _vec[3]-rhs_const_copy);
+}
+
+inline float Vector4::operator *(const Vector4 rhs) { // dot product
+ Vector4 rhs_const_copy( rhs );
+
+ float dot = _vec[0]*rhs_const_copy[0] + _vec[1]*rhs_const_copy[1] + _vec[2]*rhs_const_copy[2] + _vec[3]*rhs_const_copy[3];
+
+ if( dot > 1.0f ) dot = 1.0f;
+ if( dot < -1.0f ) dot = -1.0f;
+ return dot;
+}
+
+
+inline Vector4 Vector4::operator *(const class Matrix4 rhs_in) const {
+ Matrix4 rhs(rhs_in);
+ return Vector4( rhs[0][0]*_vec[0] + rhs[0][1]*_vec[1] + rhs[0][2]*_vec[2] + rhs[0][3]*_vec[3],
+ rhs[1][0]*_vec[0] + rhs[1][1]*_vec[1] + rhs[1][2]*_vec[2] + rhs[1][3]*_vec[3],
+ rhs[2][0]*_vec[0] + rhs[2][1]*_vec[1] + rhs[2][2]*_vec[2] + rhs[2][3]*_vec[3],
+ rhs[3][0]*_vec[0] + rhs[3][1]*_vec[1] + rhs[3][2]*_vec[2] + rhs[3][3]*_vec[3] );
+}
+
+inline bool Vector4::operator ==(const Vector4& rhs) {
+ Vector4 rhs_const_copy( rhs );
+ if(
+ _vec[0] == rhs_const_copy._vec[0] &&
+ _vec[1] == rhs_const_copy._vec[1] &&
+ _vec[2] == rhs_const_copy._vec[2] &&
+ _vec[3] == rhs_const_copy._vec[3] ) return true;
+ else return false;
+}
+
+
+
+
+
+
+inline void Vector4::normalize() {
+ float len = length();
+ _vec[0]/=len;
+ _vec[1]/=len;
+ _vec[2]/=len;
+ _vec[3]/=len;
+}
+
+
+inline float Vector4::length() {
+ return sqrt( _vec[0]*_vec[0] + _vec[1]*_vec[1] + _vec[2]*_vec[2] + _vec[3]*_vec[3] );
+}
+
+inline void Vector4::print( std::string name ) {
+ if( name != "" ) {
+ std::cout << "Vector4 " << name << " = { ";
+ } else {
+ std::cout << "Vector4 = { ";
+ }
+
+ std::cout << _vec[0] << ", " << _vec[1] << ", " << _vec[2] << ", " << _vec[3] << " }" << std::endl << std::endl;
+
+}
+
+inline void Vector4::fill( float vec[4] ) {
+ vec[0] = _vec[0];
+ vec[1] = _vec[1];
+ vec[2] = _vec[2];
+ vec[3] = _vec[3];
+}
+
+
+
+
+// Quat
+
+inline Quat::Quat() {
+ _vec[0] = 0.0f;
+ _vec[1] = 0.0f;
+ _vec[2] = 0.0f;
+ _vec[3] = 1.0f;
+
+}
+
+inline Quat::Quat( const float a, const float b, const float c, const float d ) {
+ _vec[0] = a;
+ _vec[1] = b;
+ _vec[2] = c;
+ _vec[3] = d;
+
+}
+
+inline Quat::Quat( const Vector4& rhs ) : Vector4( rhs ) {
+
+}
+
+inline Quat::Quat( const Vector3 xyz, float w ) {
+ Vector3 deconst( xyz );
+ _vec[0] = deconst[0];
+ _vec[1] = deconst[1];
+ _vec[2] = deconst[2];
+ _vec[3] = w;
+
+}
+
+inline Quat::Quat( const Matrix3& mat_c ) {
+
+ Matrix3 mat(mat_c);
+
+ float T = 1.0f + mat[0][0] + mat[1][1] + mat [2][2];
+
+ float S, X, Y, Z, W;
+
+#if 1
+ if( T > 0.000001f ) {
+ S = sqrt( T ) * 2.0f;
+ X = ( mat[1][2] - mat[2][1] ) / S;
+ Y = ( mat[2][0] - mat[0][2] ) / S;
+ Z = ( mat[0][1] - mat[1][0] ) / S;
+ W = 0.25f * S;
+ } else {
+ if ( mat[0][0] > mat[1][1] && mat[0][0] > mat[2][2] ) { // Column 0:
+ S = sqrt( 1.0f + mat[0][0] - mat[1][1] - mat[2][2] ) * 2.0f;
+ X = 0.25f * S;
+ Y = (mat[0][1] + mat[1][0] ) / S;
+ Z = (mat[2][0] + mat[0][2] ) / S;
+ W = (mat[1][2] - mat[2][1] ) / S;
+ } else if ( mat[1][1] > mat[2][2] ) { // Column 1:
+ S = sqrt( 1.0f + mat[1][1] - mat[0][0] - mat[2][2] ) * 2.0f;
+ X = (mat[0][1] + mat[1][0] ) / S;
+ Y = 0.25f * S;
+ Z = (mat[1][2] + mat[2][1] ) / S;
+ W = (mat[2][0] - mat[0][2] ) / S;
+ } else { // Column 2:
+ S = sqrt( 1.0f + mat[2][2] - mat[0][0] - mat[1][1] ) * 2.0f;
+ X = (mat[2][0] + mat[0][2] ) / S;
+ Y = (mat[1][2] + mat[2][1] ) / S;
+ Z = 0.25f * S;
+ W = (mat[0][1] - mat[1][0] ) / S;
+ }
+ }
+#else
+ if( T > 0.000001f ) {
+ S = sqrt( T ) * 2;
+ X = ( mat[2][1] - mat[1][2] ) / S;
+ Y = ( mat[0][2] - mat[2][0] ) / S;
+ Z = ( mat[1][0] - mat[0][1] ) / S;
+ W = 0.25 * S;
+ } else {
+ if ( mat[0][0] > mat[1][1] && mat[0][0] > mat[2][2] ) { // Column 0:
+ S = sqrt( 1.0 + mat[0][0] - mat[1][1] - mat[2][2] ) * 2;
+ X = 0.25 * S;
+ Y = (mat[1][0] + mat[0][1] ) / S;
+ Z = (mat[0][2] + mat[2][0] ) / S;
+ W = (mat[2][1] - mat[1][2] ) / S;
+ } else if ( mat[1][1] > mat[2][2] ) { // Column 1:
+ S = sqrt( 1.0 + mat[1][1] - mat[0][0] - mat[2][2] ) * 2;
+ X = (mat[1][0] + mat[0][1] ) / S;
+ Y = 0.25 * S;
+ Z = (mat[2][1] + mat[1][2] ) / S;
+ W = (mat[0][2] - mat[2][0] ) / S;
+ } else { // Column 2:
+ S = sqrt( 1.0 + mat[2][2] - mat[0][0] - mat[1][1] ) * 2;
+ X = (mat[0][2] + mat[2][0] ) / S;
+ Y = (mat[2][1] + mat[1][2] ) / S;
+ Z = 0.25 * S;
+ W = (mat[1][0] - mat[0][1] ) / S;
+ }
+ }
+#endif
+
+ _vec[0] = X;
+ _vec[1] = Y;
+ _vec[2] = Z;
+ _vec[3] = W;
+
+}
+
+inline Vector3 Quat::operator *(const Vector3 rhs) const {
+ return Matrix3::rotation( *this ) * rhs;
+}
+
+inline float Quat::dot(const Quat rhs) const {
+ Vector4 t(*this), that(rhs);
+
+ float dot = t * that;
+
+ return dot;
+}
+
+inline Quat Quat::operator *(const Quat rhs) const {
+ Quat a(rhs), b(*this);
+
+ Vector3 vec_a(a[0],a[1],a[2]);
+ Vector3 vec_b(b[0],b[1],b[2]);
+ float scalar_a(a[3]), scalar_b(b[3]);
+
+ Quat retval( vec_b*scalar_a + vec_a*scalar_b + (vec_a^vec_b), scalar_a*scalar_b - vec_a*vec_b );
+ retval.normalize();
+ return retval;
+
+}
+
+
+inline Quat Quat::rotation( const float angle_in_rad, const Vector3 axis_in ) {
+
+ // from http://www.j3d.org/matrix_faq/matrfaq_latest.html
+ Vector3 axis( axis_in );
+ axis.normalize();
+
+ float c = cos( angle_in_rad/2.0f );
+ float s = sin( angle_in_rad/2.0f );
+
+ Quat result( axis[0] * s, axis[1] * s, axis[2] * s, c );
+ result.normalize();
+
+ return result;
+}
+
+inline Quat Quat::rotation( const float heading_in_rad, const float pitch_in_rad, const float roll_in_rad ) {
+
+ Matrix3 mat =
+ Matrix3::rotation( heading_in_rad, Vector3( 0, 1, 0 ) ) *
+ Matrix3::rotation( pitch_in_rad, Vector3( 1, 0, 0 ) ) *
+ Matrix3::rotation( roll_in_rad, Vector3( 0, 0, -1 ) );
+ return Quat(mat);
+
+}
+
+inline Quat Quat::rotation( const Vector3 hpr_in_rad ) {
+ Vector3 deconst_hpr_in_rad( hpr_in_rad );
+ return Quat::rotation( deconst_hpr_in_rad[0], deconst_hpr_in_rad[1], deconst_hpr_in_rad[2] );
+
+}
+
+
+inline Quat Quat::rotation( const Vector3 from_vec_in, const Vector3 to_vec_in ) {
+
+ Vector3 to_vec(to_vec_in);
+ Vector3 from_vec(from_vec_in);
+
+ from_vec.normalize();
+ to_vec.normalize();
+
+ Vector3 axis = from_vec ^ to_vec;
+ float dot = from_vec * to_vec;
+
+ float angle = acosf( dot );
+
+ return rotation( angle, axis );
+}
+
+inline void Quat::print( const std::string name ) {
+ if( name != "" ) {
+ std::cout << "Quat " << name << " = { ";
+ } else {
+ std::cout << "Quat = { ";
+ }
+
+ std::cout << _vec[0] << ", " << _vec[1] << ", " << _vec[2] << ", " << _vec[3] << " }" << std::endl << std::endl;
+
+}
+
+inline void Quat::invert() { // invert in place
+ float norm = _vec[0]*_vec[0] + _vec[1]*_vec[1] + _vec[2]*_vec[2] + _vec[3]*_vec[3];
+ _vec[0] *= -1.0f/norm;
+ _vec[1] *= -1.0f/norm;
+ _vec[2] *= -1.0f/norm;
+ _vec[2] *= 1.0f/norm;
+}
+
+inline Quat Quat::inverse() { // leave this alone and return inverted copy
+ Quat copy( *this );
+
+ copy.invert();
+
+ return copy;
+}
+
+
+
+inline Quat Quat::slerp( const float t, const Quat a, const Quat b) {
+
+
+ // Cant just dot quats, compiler doesnt see Vector4::operator* for some reason...
+ Quat nca(a), ncb(b);
+
+ Vector4 va(nca[0], nca[1], nca[2], nca[3]);
+ Vector4 vb(ncb[0], ncb[1], ncb[2], ncb[3]);
+
+
+ // via google via Graphics Gems
+
+ double beta;
+ double theta;
+ double sin_t, cos_t;
+ double alpha = t;
+ bool bflip=false;
+
+ cos_t = va*vb;
+
+ if( cos_t < 0.0 ) {
+ cos_t = -cos_t;
+ bflip = true;
+ }
+
+ if( 1.0 - cos_t < 1e-7 ) {
+ beta = 1.0 - alpha;
+ } else {
+ theta = acos( cos_t );
+ sin_t = sin( theta );
+ beta = sin( theta * (1.0 - alpha)) / sin_t;
+ alpha = sin( theta * alpha ) / sin_t;
+ }
+
+ if( bflip ) {
+ alpha = -alpha;
+ }
+
+ Quat retval( va*(float)beta + vb*(float)alpha );
+
+ retval.normalize();
+
+ return retval;
+}
+
+
+inline Vector3 Quat::getEulerAngles() {
+
+ const Quat const_this(*this);
+ Matrix3 mat = Matrix3::rotation( const_this );
+
+ return mat.getEulerAngles();
+}
+
+
+
+// Matrix3
+
+inline Matrix3::Matrix3() {
+ _cols[0] = Vector3( 1, 0 ,0 );
+ _cols[1] = Vector3( 0, 1 ,0 );
+ _cols[2] = Vector3( 0, 0 ,1 );
+}
+
+
+inline Matrix3::Matrix3( const float mat[3][3] ) {
+ _cols[0] = Vector3( mat[0][0], mat[0][1], mat[0][2] );
+ _cols[1] = Vector3( mat[1][0], mat[1][1], mat[1][2] );
+ _cols[2] = Vector3( mat[2][0], mat[2][1], mat[2][2] );
+
+}
+
+inline Matrix3::Matrix3( const Matrix3& rhs ) {
+ _cols[0] = rhs._cols[0];
+ _cols[1] = rhs._cols[1];
+ _cols[2] = rhs._cols[2];
+
+}
+
+inline Matrix3::Matrix3( const float m00, const float m10, const float m20, const float m01, const float m11, const float m21, const float m02, const float m12, const float m22 ) {
+
+ _cols[0] = Vector3( m00, m01, m02 );
+ _cols[1] = Vector3( m10, m11, m12 );
+ _cols[2] = Vector3( m20, m21, m22 );
+
+}
+
+
+inline void Matrix3::fill( float mat[3][3] ) {
+ for( unsigned int i=0; i<3; i++ ) {
+ for( int j=0; j<3; j++ ) {
+ mat[i][j] = _cols[i][j];
+ }
+ }
+}
+
+
+inline Matrix3::Matrix3( const Vector3 col0, const Vector3 col1, const Vector3 col2 ) {
+ _cols[0] = col0;
+ _cols[1] = col1;
+ _cols[2] = col2;
+
+}
+
+
+inline Vector3& Matrix3::operator [](const int idx) {
+ return _cols[idx];
+}
+
+
+inline Matrix3 Matrix3::operator *(const Matrix3 rhs_in) {
+ Matrix3 rhs(rhs_in);
+ Matrix3 retmat(
+ Vector3( rhs[0][0]*_cols[0][0] + rhs[1][0]*_cols[0][1] + rhs[2][0]*_cols[0][2],
+ rhs[0][1]*_cols[0][0] + rhs[1][1]*_cols[0][1] + rhs[2][1]*_cols[0][2],
+ rhs[0][2]*_cols[0][0] + rhs[1][2]*_cols[0][1] + rhs[2][2]*_cols[0][2] ),
+
+ Vector3( rhs[0][0]*_cols[1][0] + rhs[1][0]*_cols[1][1] + rhs[2][0]*_cols[1][2],
+ rhs[0][1]*_cols[1][0] + rhs[1][1]*_cols[1][1] + rhs[2][1]*_cols[1][2],
+ rhs[0][2]*_cols[1][0] + rhs[1][2]*_cols[1][1] + rhs[2][2]*_cols[1][2] ),
+
+ Vector3( rhs[0][0]*_cols[2][0] + rhs[1][0]*_cols[2][1] + rhs[2][0]*_cols[2][2],
+ rhs[0][1]*_cols[2][0] + rhs[1][1]*_cols[2][1] + rhs[2][1]*_cols[2][2],
+ rhs[0][2]*_cols[2][0] + rhs[1][2]*_cols[2][1] + rhs[2][2]*_cols[2][2] ) );
+
+ return retmat;
+}
+
+inline Matrix3 Matrix3::operator *(const Quat rhs) {
+ return *this * Matrix3::rotation( rhs );
+}
+
+
+inline Vector3 Matrix3::operator *(const Vector3 rhs_in) {
+ Vector3 rhs(rhs_in);
+ return Vector3( _cols[0][0]*rhs[0] + _cols[1][0]*rhs[1] + _cols[2][0]*rhs[2],
+ _cols[0][1]*rhs[0] + _cols[1][1]*rhs[1] + _cols[2][1]*rhs[2],
+ _cols[0][2]*rhs[0] + _cols[1][2]*rhs[1] + _cols[2][2]*rhs[2] );
+}
+
+inline Matrix3 Matrix3::operator *(const float rhs) {
+ return Matrix3( _cols[0] * rhs, _cols[1] * rhs, _cols[2] * rhs );
+}
+
+inline Matrix3 Matrix3::operator /(const float rhs) {
+ return Matrix3( _cols[0] / rhs, _cols[1] / rhs, _cols[2] / rhs );
+}
+
+inline Matrix3 Matrix3:: operator +(const Matrix3 rhs) {
+ return Matrix3( _cols[0] + rhs._cols[0], _cols[1] + rhs._cols[1], _cols[2] + rhs._cols[2] );
+
+}
+
+inline Matrix3 Matrix3:: operator -(const Matrix3 rhs) {
+ return Matrix3( _cols[0] - rhs._cols[0], _cols[1] - rhs._cols[1], _cols[2] - rhs._cols[2] );
+
+}
+
+
+inline void Matrix3::transpose() {
+ Matrix3 mat(
+ Vector3( _cols[0][0], _cols[1][0], _cols[2][0] ),
+ Vector3( _cols[0][1], _cols[1][1], _cols[2][1] ),
+ Vector3( _cols[0][2], _cols[1][2], _cols[2][2] )
+ );
+
+ _cols[0] = mat._cols[0];
+ _cols[1] = mat._cols[1];
+ _cols[2] = mat._cols[2];
+}
+
+inline float Matrix3::trace() {
+ return( _cols[0][0] + _cols[1][1] + _cols[2][2] );
+}
+
+inline Vector3 Matrix3::col( const int i ) {
+ return _cols[i];
+}
+
+inline Vector3 Matrix3::row( const int i ) {
+ return Vector3( _cols[0][i], _cols[1][i], _cols[2][i] );
+}
+
+inline void Matrix3::set_col( const int which, const Vector3 col ) {
+ _cols[which] = col;
+}
+
+inline bool Matrix3::is_identity() {
+ if( _cols[0][0] == 1.0f &&
+ _cols[0][1] == 0.0f &&
+ _cols[0][2] == 0.0f &&
+ _cols[1][0] == 0.0f &&
+ _cols[1][1] == 1.0f &&
+ _cols[1][2] == 0.0f &&
+ _cols[2][0] == 0.0f &&
+ _cols[2][1] == 0.0f &&
+ _cols[2][2] == 1.0f ) {
+ return true;
+ } else {
+ return false;
+ }
+}
+
+inline Matrix3 Matrix3::rotation( const Vector3 hpr_in_deg ) {
+ return Matrix3::rotation( Quat::rotation( hpr_in_deg ) );
+}
+
+inline Matrix3 Matrix3::rotation( const float angle_in_rad, const Vector3 axis_in ) {
+ Vector3 axis(axis_in);
+
+ // from http://en.wikipedia.org/wiki/Rotation_matrix#Axis_and_angle
+
+ float c = cos(angle_in_rad);
+ float s = sin(angle_in_rad);
+ float C = 1-c;
+ float x = axis[0], y = axis[1], z = axis[2];
+
+ float xs = x*s;
+ float ys = y*s;
+ float zs = z*s;
+ float xC = x*C;
+ float yC = y*C;
+ float zC = z*C;
+ float xyC = x*yC;
+ float yzC = y*zC;
+ float zxC = z*xC;
+
+ return Matrix3(
+ Vector3( x*xC+c, xyC+zs, zxC-ys ),
+ Vector3( xyC-zs, y*yC+c, yzC+xs ),
+ Vector3( zxC+ys, yzC-xs, z*zC+c ) );
+}
+
+
+inline Matrix3 Matrix3::rotation( const Quat rot_in ) {
+ Quat rot(rot_in);
+
+ // from http://www.j3d.org/matrix_faq/matrfaq_latest.html
+
+ float xx, xy, xz, xw, yy, yz, yw, zz, zw;
+ float X = rot[0], Y = rot[1], Z = rot[2], W = rot[3];
+
+ xx = X * X;
+ xy = X * Y;
+ xz = X * Z;
+ xw = X * W;
+ yy = Y * Y;
+ yz = Y * Z;
+ yw = Y * W;
+ zz = Z * Z;
+ zw = Z * W;
+
+ Matrix3 mat;
+
+ mat[0][0] = 1.0f - 2.0f * ( yy + zz );
+ mat[1][0] = 2.0f * ( xy - zw );
+ mat[2][0] = 2.0f * ( xz + yw );
+ mat[0][1] = 2.0f * ( xy + zw );
+ mat[1][1] = 1.0f - 2.0f * ( xx + zz );
+ mat[2][1] = 2.0f * ( yz - xw );
+ mat[0][2] = 2.0f * ( xz - yw );
+ mat[1][2] = 2.0f * ( yz + xw );
+ mat[2][2] = 1.0f - 2.0f * ( xx + yy );
+
+ return mat;
+
+}
+
+inline Matrix3 Matrix3::translation( const Vector3 trans_in ) {
+ Vector3 trans(trans_in);
+
+ Matrix3 mat;
+ mat._cols[2][0] = trans[0];
+ mat._cols[2][1] = trans[1];
+ mat._cols[2][2] = trans[2];
+
+ return mat;
+}
+
+inline void Matrix3::print( const std::string name ) {
+ if( name != "" ) {
+ std::cout << "Matrix3 " << name << " = { " << std::endl;
+ } else {
+ std::cout << "Matrix3 = { " << std::endl;
+ }
+
+ std::cout << _cols[0][0] << ", " << _cols[1][0] << ", " << _cols[2][0] << std::endl;
+ std::cout << _cols[0][1] << ", " << _cols[1][1] << ", " << _cols[2][1] << std::endl;
+ std::cout << _cols[0][2] << ", " << _cols[1][2] << ", " << _cols[2][2] << std::endl;
+ std::cout << "}" << std::endl << std::endl;
+}
+
+inline Matrix3 Matrix3::rotation( const Vector3 from, const Vector3 to ) {
+ return Matrix3( Matrix3::rotation( Quat::rotation( from, to ) ) );
+}
+
+inline Matrix3 Matrix3::scale( const float xs, const float ys, const float zs ) {
+ Matrix3 scale_mat;
+ scale_mat[0][0] = xs;
+ scale_mat[1][1] = ys;
+ scale_mat[2][2] = zs;
+ return scale_mat;
+}
+
+inline Matrix3 Matrix3::scale( const float s ) {
+ Matrix3 scale_mat;
+ scale_mat[0][0] = s;
+ scale_mat[1][1] = s;
+ scale_mat[2][2] = s;
+ return scale_mat;
+}
+
+inline Matrix3 Matrix3::transpose( const Matrix3 m ) {
+ Matrix3 transp(m);
+ transp.transpose();
+ return transp;
+}
+
+
+inline Vector3 Matrix3::getEulerAngles() {
+#if 1
+
+ Vector3 retval;
+
+ float h, p, r;
+ float A, B;
+
+ B = _cols[1][2];
+ p = asinf( B );
+ A = cosf( p );
+
+
+ if( fabs( A ) > 0.005f ) {
+ h = atan2f( -_cols[0][2]/A, _cols[2][2]/A ); // atan2( D, C )
+ r = atan2f( -_cols[1][0]/A, _cols[1][1]/A ); // atan2( F, E )
+ } else {
+ h = 0;
+ r = atan2f( _cols[2][1], _cols[2][0] ); // atan2( F, E ) when B=0, D=1
+ }
+
+ retval[0] = h;
+ retval[1] = p;
+ retval[2] = r;
+
+ return retval;
+
+#endif
+
+#if 0
+
+
+ Vector3 retval;
+
+#if 0
+
+ float sin_az, sin_el, sin_rl;
+ float cos_az, cos_el, cos_rl;
+
+ sin_el = - _cols[0][2];
+ cos_el = (float)sqrt( 1.0 - (sin_el * sin_el) );
+
+ if (cos_el == 0.0) {
+ sin_az = 0.0;
+ cos_az = 1.0;
+ }
+ else {
+ sin_az = _cols[0][1] / cos_el;
+ cos_az = _cols[0][0] / cos_el;
+ }
+
+ sin_rl = sin_az * _cols[2][0] - cos_az * _cols[2][1];
+ cos_rl = - sin_az * _cols[1][0] + cos_az * _cols[1][1];
+
+ retval[0] = (float)atan2 (sin_az , cos_az);
+ retval[1] = (float)atan2 (sin_el , cos_el);
+ retval[2] = (float)atan2 (sin_rl , cos_rl);
+
+#else
+
+ float h, p, r;
+ float A, B;
+
+ B = _cols[2][1];
+ p = asinf( B );
+ A = cosf( p );
+
+
+ if( fabs( A ) > 0.005 ) {
+ h = atan2f( -_cols[2][0]/A, _cols[2][2]/A ); // atan2( D, C )
+ r = atan2f( -_cols[0][1]/A, _cols[1][1]/A ); // atan2( F, E )
+ } else {
+ h = 0;
+ r = atan2f( _cols[1][2], _cols[0][2] ); // atan2( F, E ) when B=0, D=1
+ }
+
+ retval[0] = -h;
+ retval[1] = p;
+ retval[2] = r;
+
+#endif
+
+#endif
+
+ return retval;
+
+}
+
+
+
+
+
+
+
+
+
+// Matrix4
+
+inline Matrix4::Matrix4() {
+ _cols[0] = Vector4( 1, 0, 0, 0 );
+ _cols[1] = Vector4( 0, 1, 0, 0 );
+ _cols[2] = Vector4( 0, 0, 1, 0 );
+ _cols[3] = Vector4( 0, 0, 0, 1 );
+}
+
+
+inline Matrix4::Matrix4( const float mat[4][4] ) {
+ _cols[0] = Vector4( mat[0][0], mat[0][1], mat[0][2], mat[0][3] );
+ _cols[1] = Vector4( mat[1][0], mat[1][1], mat[1][2], mat[1][3] );
+ _cols[2] = Vector4( mat[2][0], mat[2][1], mat[2][2], mat[2][3] );
+ _cols[3] = Vector4( mat[3][0], mat[3][1], mat[3][2], mat[3][3] );
+
+}
+
+inline Matrix4::Matrix4( const Matrix4& rhs ) {
+ _cols[0] = rhs._cols[0];
+ _cols[1] = rhs._cols[1];
+ _cols[2] = rhs._cols[2];
+ _cols[3] = rhs._cols[3];
+
+}
+
+inline Matrix4::Matrix4( const Matrix3& rhs ) {
+ Matrix3 rhs_c(rhs);
+ _cols[0] = Vector4( rhs_c[0], 0.0f );
+ _cols[1] = Vector4( rhs_c[1], 0.0f );
+ _cols[2] = Vector4( rhs_c[2], 0.0f );
+ _cols[3] = Vector4( 0.0f, 0.0f, 0.0f, 1.0f );
+
+}
+
+inline Matrix4::Matrix4( const float m00, const float m10, const float m20, const float m30, const float m01, const float m11, const float m21, const float m31, const float m02, const float m12, const float m22, const float m32, const float m03, const float m13, const float m23, const float m33 ) {
+
+ _cols[0] = Vector4( m00, m01, m02, m03 );
+ _cols[1] = Vector4( m10, m11, m12, m13 );
+ _cols[2] = Vector4( m20, m21, m22, m23 );
+ _cols[3] = Vector4( m30, m31, m32, m33 );
+
+}
+
+
+inline void Matrix4::fill( float mat[4][4] ) {
+ for( unsigned int i=0; i<4; i++ ) {
+ for( int j=0; j<4; j++ ) {
+ mat[i][j] = _cols[i][j];
+ }
+ }
+}
+
+
+inline Matrix4::Matrix4( const Vector4 col0, const Vector4 col1, const Vector4 col2, const Vector4 col3 ) {
+ _cols[0] = col0;
+ _cols[1] = col1;
+ _cols[2] = col2;
+ _cols[3] = col3;
+
+}
+
+
+inline Vector4& Matrix4::operator [](const int idx) {
+ return _cols[idx];
+}
+
+
+inline Matrix4 Matrix4::operator *(const Matrix4 rhs_in) {
+ Matrix4 rhs(rhs_in);
+ Matrix4 retmat(
+ Vector4( rhs[0][0]*_cols[0][0] + rhs[1][0]*_cols[0][1] + rhs[2][0]*_cols[0][2] + rhs[3][0]*_cols[0][3],
+ rhs[0][1]*_cols[0][0] + rhs[1][1]*_cols[0][1] + rhs[2][1]*_cols[0][2] + rhs[3][1]*_cols[0][3],
+ rhs[0][2]*_cols[0][0] + rhs[1][2]*_cols[0][1] + rhs[2][2]*_cols[0][2] + rhs[3][2]*_cols[0][3],
+ rhs[0][3]*_cols[0][0] + rhs[1][3]*_cols[0][1] + rhs[2][3]*_cols[0][2] + rhs[3][3]*_cols[0][3] ),
+
+ Vector4( rhs[0][0]*_cols[1][0] + rhs[1][0]*_cols[1][1] + rhs[2][0]*_cols[1][2] + rhs[3][0]*_cols[1][3],
+ rhs[0][1]*_cols[1][0] + rhs[1][1]*_cols[1][1] + rhs[2][1]*_cols[1][2] + rhs[3][1]*_cols[1][3],
+ rhs[0][2]*_cols[1][0] + rhs[1][2]*_cols[1][1] + rhs[2][2]*_cols[1][2] + rhs[3][2]*_cols[1][3],
+ rhs[0][3]*_cols[1][0] + rhs[1][3]*_cols[1][1] + rhs[2][3]*_cols[1][2] + rhs[3][3]*_cols[1][3] ),
+
+ Vector4( rhs[0][0]*_cols[2][0] + rhs[1][0]*_cols[2][1] + rhs[2][0]*_cols[2][2] + rhs[3][0]*_cols[2][3],
+ rhs[0][1]*_cols[2][0] + rhs[1][1]*_cols[2][1] + rhs[2][1]*_cols[2][2] + rhs[3][1]*_cols[2][3],
+ rhs[0][2]*_cols[2][0] + rhs[1][2]*_cols[2][1] + rhs[2][2]*_cols[2][2] + rhs[3][2]*_cols[2][3],
+ rhs[0][3]*_cols[2][0] + rhs[1][3]*_cols[2][1] + rhs[2][3]*_cols[2][2] + rhs[3][3]*_cols[2][3] ),
+
+ Vector4( rhs[0][0]*_cols[3][0] + rhs[1][0]*_cols[3][1] + rhs[2][0]*_cols[3][2] + rhs[3][0]*_cols[3][3],
+ rhs[0][1]*_cols[3][0] + rhs[1][1]*_cols[3][1] + rhs[2][1]*_cols[3][2] + rhs[3][1]*_cols[3][3],
+ rhs[0][2]*_cols[3][0] + rhs[1][2]*_cols[3][1] + rhs[2][2]*_cols[3][2] + rhs[3][2]*_cols[3][3],
+ rhs[0][3]*_cols[3][0] + rhs[1][3]*_cols[3][1] + rhs[2][3]*_cols[3][2] + rhs[3][3]*_cols[3][3] ) );
+
+ return retmat;
+}
+
+inline Matrix4 Matrix4::operator *(const Quat rhs) {
+ return *this * Matrix4::rotation( rhs );
+}
+
+
+inline Vector4 Matrix4::operator *(const Vector4 rhs_in) {
+ Vector4 rhs(rhs_in);
+ return Vector4( _cols[0][0]*rhs[0] + _cols[1][0]*rhs[1] + _cols[2][0]*rhs[2] + _cols[3][0]*rhs[3],
+ _cols[0][1]*rhs[0] + _cols[1][1]*rhs[1] + _cols[2][1]*rhs[2] + _cols[3][1]*rhs[3],
+ _cols[0][2]*rhs[0] + _cols[1][2]*rhs[1] + _cols[2][2]*rhs[2] + _cols[3][2]*rhs[3],
+ _cols[0][3]*rhs[0] + _cols[1][3]*rhs[1] + _cols[2][3]*rhs[2] + _cols[3][3]*rhs[3] );
+}
+
+inline Matrix4 Matrix4::operator *(const float rhs) {
+ return Matrix4( _cols[0] * rhs, _cols[1] * rhs, _cols[2] * rhs, _cols[3] * rhs );
+}
+
+inline Matrix4 Matrix4::operator /(const float rhs) {
+ return Matrix4( _cols[0] / rhs, _cols[1] / rhs, _cols[2] / rhs, _cols[3] / rhs );
+}
+
+inline Matrix4 Matrix4:: operator +(const Matrix4 rhs) {
+ return Matrix4( _cols[0] + rhs._cols[0], _cols[1] + rhs._cols[1], _cols[2] + rhs._cols[2], _cols[3] + rhs._cols[3] );
+
+}
+
+inline Matrix4 Matrix4:: operator -(const Matrix4 rhs) {
+ return Matrix4( _cols[0] - rhs._cols[0], _cols[1] - rhs._cols[1], _cols[2] - rhs._cols[2], _cols[3] - rhs._cols[3] );
+
+}
+
+
+inline void Matrix4::transpose() {
+ Matrix4 mat(
+ Vector4( _cols[0][0], _cols[1][0], _cols[2][0], _cols[3][0] ),
+ Vector4( _cols[0][1], _cols[1][1], _cols[2][1], _cols[3][1] ),
+ Vector4( _cols[0][2], _cols[1][2], _cols[2][2], _cols[3][2] ),
+ Vector4( _cols[0][3], _cols[1][3], _cols[2][3], _cols[3][3] )
+ );
+
+ _cols[0] = mat._cols[0];
+ _cols[1] = mat._cols[1];
+ _cols[2] = mat._cols[2];
+ _cols[3] = mat._cols[3];
+}
+
+inline Vector4 Matrix4::col( const int i ) {
+ return _cols[i];
+}
+
+inline Vector4 Matrix4::row( const int i ) {
+ return Vector4( _cols[0][i], _cols[1][i], _cols[2][i], _cols[3][i] );
+}
+
+inline void Matrix4::set_col( const int which, const Vector4 col ) {
+ _cols[which] = col;
+}
+
+inline float Matrix4::trace() {
+ return _cols[0][0] + _cols[1][1] + _cols[2][2] + _cols[3][3];
+}
+
+inline bool Matrix4::is_identity() {
+ if( _cols[0][0] == 1.0f &&
+ _cols[0][1] == 0.0f &&
+ _cols[0][2] == 0.0f &&
+ _cols[0][3] == 0.0f &&
+
+ _cols[1][0] == 0.0f &&
+ _cols[1][1] == 1.0f &&
+ _cols[1][2] == 0.0f &&
+ _cols[1][3] == 0.0f &&
+
+ _cols[2][0] == 0.0f &&
+ _cols[2][1] == 0.0f &&
+ _cols[2][2] == 1.0f &&
+ _cols[2][3] == 0.0f &&
+
+ _cols[3][0] == 0.0f &&
+ _cols[3][1] == 0.0f &&
+ _cols[3][2] == 0.0f &&
+ _cols[3][3] == 1.0f ) {
+ return true;
+ } else {
+ return false;
+ }
+}
+
+
+inline Matrix4 Matrix4::rotation( const float angle_in_rad, const Vector3 axis_in ) {
+ return Matrix4( Matrix3::rotation( angle_in_rad, axis_in ) );
+}
+
+
+inline Matrix4 Matrix4::rotation( const Quat rot_in ) {
+ return Matrix4( Matrix3::rotation( rot_in ) );
+}
+
+inline Matrix4 Matrix4::rotation( const Vector3 hpr_in_deg ) {
+ return Matrix4( Matrix3::rotation( hpr_in_deg ) );
+}
+
+inline Matrix4 Matrix4::translation( const Vector3 trans_in ) {
+ return Matrix4( Matrix3::translation( trans_in ) );
+}
+
+inline void Matrix4::print( const std::string name ) {
+ if( name != "" ) {
+ std::cout << "Matrix4 " << name << " = { " << std::endl;
+ } else {
+ std::cout << "Matrix4 = { " << std::endl;
+ }
+
+ std::cout << _cols[0][0] << ", " << _cols[1][0] << ", " << _cols[2][0] << ", " << _cols[3][0] << std::endl;
+ std::cout << _cols[0][1] << ", " << _cols[1][1] << ", " << _cols[2][1] << ", " << _cols[3][1] << std::endl;
+ std::cout << _cols[0][2] << ", " << _cols[1][2] << ", " << _cols[2][2] << ", " << _cols[3][2] << std::endl;
+ std::cout << _cols[0][3] << ", " << _cols[1][3] << ", " << _cols[2][3] << ", " << _cols[3][3] << std::endl;
+ std::cout << "}" << std::endl << std::endl;
+
+
+}
+
+inline Matrix4 Matrix4::rotation( const Vector3 from, const Vector3 to ) {
+ return Matrix4( Matrix3::rotation( from, to ) );
+}
+
+inline Matrix4 Matrix4::scale( const float xs, const float ys, const float zs ) {
+ return Matrix4( Matrix3::scale( xs, ys, zs ) );
+}
+
+inline Matrix4 Matrix4::scale( const float s ) {
+ return Matrix4( Matrix3::scale( s ) );
+}
+
+inline Matrix4 Matrix4::transpose( const Matrix4 m ) {
+ Matrix4 transp(m);
+ transp.transpose();
+ return transp;
+}
+
+inline Vector3 Matrix4::getEulerAngles() {
+ Vector3 retval;
+
+ float h, p, r;
+ float A, B;
+
+ B = _cols[1][2];
+ p = asinf( B );
+ A = cosf( p );
+
+
+ if( fabs( A ) > 0.005f ) {
+ h = atan2f( -_cols[0][2]/A, _cols[2][2]/A ); // atan2( D, C )
+ r = atan2f( -_cols[1][0]/A, _cols[1][1]/A ); // atan2( F, E )
+ } else {
+ h = 0;
+ r = atan2f( _cols[2][1], _cols[2][0] ); // atan2( F, E ) when B=0, D=1
+ }
+
+ retval[0] = h;
+ retval[1] = p;
+ retval[2] = r;
+
+ return retval;
+
+}
+
+
+
+
+
+// Line
+
+inline Line::Line ( const Vector3& d, const Vector3& p ) : _dir( d ), _pos1( p ) {
+ _dir.normalize();
+ _pos2 = _pos1 + _dir;
+}
+
+inline Line::Line ( const Line& line ) {
+ _dir = line._dir;
+ _pos1 = line._pos1;
+}
+
+inline Vector3 Line::getClosestPoint( const Vector3& pos ) {
+
+ Vector3 ncp( pos );
+
+ Vector3 u = _pos2 - _pos1;
+ Vector3 v = ncp - _pos1;
+ Vector3 closest = _pos1 + u * ( (u*v) / (u*u) );
+
+ return closest;
+}
+
+
+
+
+
+// Plane
+
+
+inline Plane::Plane () : _p0( 0.0f, 0.0f, 0.0f ), _p1( 1.0f, 0.0f, 0.0f ), _p2( 1.0f, 1.0f, 0.0f ) {
+ init();
+}
+
+inline Plane::Plane ( const Plane& p ) : _p0(p._p0), _p1(p._p1), _p2(p._p2) {
+ init();
+}
+
+inline Plane::Plane ( Vector3 p0, Vector3 p1, Vector3 p2 ) : _p0( p0 ), _p1( p1 ), _p2( p2 ) {
+ init();
+}
+
+inline Plane::Plane ( Vector3 p, Vector3 norm ) : _p0( p ), _norm( norm ) {
+
+ _a = _norm[0];
+ _b = _norm[1];
+ _c = _norm[2];
+ _d = -( _norm[0] * _p0[0] + _norm[1] * _p0[1] + _norm[2] * _p0[2] );
+
+ _norm.normalize();
+
+ // Make up some valid points for pos2 and pos3
+ _p1 = Vector3( _norm[1], _norm[2], _norm[0] ) ^ _norm;
+ _p2 = _p1 ^ _norm;
+
+ _p1+=_p0;
+ _p2+=_p0;
+}
+
+inline void Plane::init() {
+ _a = ( _p1[1] - _p0[1] ) * ( _p2[2] - _p0[2] ) - ( _p1[2] - _p0[2] ) * ( _p2[1] - _p0[1] );
+ _b = ( _p1[2] - _p0[2] ) * ( _p2[0] - _p0[0] ) - ( _p1[0] - _p0[0] ) * ( _p2[2] - _p0[2] );
+ _c = ( _p1[0] - _p0[0] ) * ( _p2[1] - _p0[1] ) - ( _p1[1] - _p0[1] ) * ( _p2[0] - _p0[0] );
+ _d = -( _p1[0] * _a + _p1[1] * _b + _p1[2] * _c );
+
+ double denom = sqrt( _a * _a + _b * _b + _c * _c );
+ _a /= denom;
+ _b /= denom;
+ _c /= denom;
+ _d /= denom;
+
+ Vector3 dir1 = _p1 - _p0;
+ dir1.normalize();
+
+ Vector3 dir2 = _p2 - _p0;
+ dir2.normalize();
+
+ _norm = dir1^dir2;
+ _norm.normalize();
+}
+
+inline Vector3 Plane::getClosestPoint( Vector3 in ) {
+
+ // Create a vector from the surface to point src
+ Vector3 w = in - _p0;
+
+ // The closest point in the plane to point p is in the negative normal
+ // direction a distance w dot p
+ Vector3 out = in - _norm * (w * _norm); // (w dot normal)
+
+ return out;
+}
+
+inline Vector3 Plane::getNormal() {
+ return _norm;
+}
+
+
+inline Vector3 Plane::intersect( const Line line ) {
+ Vector3 nc_dir( line._dir );
+ Vector3 nc_pos1( line._pos1 );
+
+ double denom = ( _a * nc_dir[0] + _b * nc_dir[1] + _c * nc_dir[2] );
+ if ( fabs( denom ) < .001f ) {
+ return Vector3();
+ }
+
+ double t = -( _a * nc_pos1[0] + _b * nc_pos1[1] + _c * nc_pos1[2] + _d ) / denom;
+
+ Vector3 pos;
+
+ pos[0] = nc_pos1[0] + nc_dir[0] * (float)t;
+ pos[1] = nc_pos1[1] + nc_dir[1] * (float)t;
+ pos[2] = nc_pos1[2] + nc_dir[2] * (float)t;
+
+ return pos;
+}
+
+inline double Plane::whichSide ( Vector3 p ) {
+ return _a * p[0] + _b * p[1] + _c * p[2] + _d;
+}
+
diff --git a/SixenseSDK/include/sixense_math.hpp b/SixenseSDK/include/sixense_math.hpp
new file mode 100755
index 0000000..2db6a54
--- /dev/null
+++ b/SixenseSDK/include/sixense_math.hpp
@@ -0,0 +1,248 @@
+/*
+ *
+ * SIXENSE CONFIDENTIAL
+ *
+ * Copyright (C) 2011 Sixense Entertainment Inc.
+ * All Rights Reserved
+ *
+ */
+
+#ifndef SIXENSE_MATH_HPP
+#define SIXENSE_MATH_HPP
+
+#include <math.h>
+#include <iostream>
+#include <string>
+
+namespace sixenseMath {
+
+ class Vector2 {
+ public:
+ Vector2();
+ Vector2( const float x, const float y );
+ float& operator [](const int idx);
+ Vector2 operator -(const Vector2 rhs);
+ Vector2 operator +(const Vector2 rhs);
+
+ Vector2& operator +=(const Vector2& rhs);
+ Vector2& operator *=(const float& rhs);
+ Vector2& operator -=(const Vector2& rhs);
+ float operator *(const Vector2 rhs); // dot product
+ Vector2 operator *(const float rhs);
+ Vector2 operator /(const float rhs);
+
+ bool operator ==(const Vector2& rhs);
+
+ void normalize();
+ float length();
+ void print( const std::string name=std::string() );
+ void fill( float vec[2] );
+
+ protected:
+ float _vec[2];
+ };
+
+ class Vector3 {
+ public:
+ Vector3();
+ Vector3( const Vector3& );
+ Vector3( const float vec[3] );
+ Vector3( const float x, const float y, const float z );
+ float& operator [](const int idx);
+ Vector3 operator -(const Vector3 rhs);
+ Vector3 operator +(const Vector3 rhs);
+ Vector3 operator ^(const Vector3 rhs); // cross product
+ Vector3& operator +=(const Vector3& rhs);
+ Vector3& operator *=(const float& rhs);
+ Vector3& operator -=(const Vector3& rhs);
+ float operator *(const Vector3 rhs); // dot product
+ Vector3 operator *(const float rhs);
+ Vector3 operator /(const float rhs);
+ void normalize();
+ float length();
+ void print( const std::string name=std::string() );
+ void fill( float vec[3] );
+
+ bool operator ==(const Vector3& rhs);
+
+ // Construction helpers
+ static Vector3 normalize( const Vector3 );
+
+ protected:
+ float _vec[3];
+ };
+
+ class Vector4 {
+ public:
+ Vector4();
+ Vector4( const Vector4& );
+ Vector4( const Vector3&, float w );
+ Vector4( const float vec[4] );
+ Vector4( const float x, const float y, const float z, const float w );
+ float& operator [](const int idx);
+ Vector4 operator -(const Vector4 rhs) const;
+ Vector4 operator ^(const Vector4 rhs) const; // cross product
+ Vector4 operator +(const Vector4 rhs) const;
+ float operator *(const Vector4 rhs); // dot product
+ Vector4 operator *(const float rhs) const;
+ Vector4 operator -(const float rhs) const;
+ Vector4 operator /(const float rhs) const;
+
+ bool operator ==(const Vector4& rhs);
+
+ void normalize();
+ float length();
+ void print( const std::string name=std::string() );
+ Vector4 operator *(const class Matrix4 rhs) const;
+ void fill( float vec[4] );
+
+ protected:
+ float _vec[4];
+ };
+
+ class Quat : public Vector4 {
+ public:
+ Quat();
+ Quat( const float x, const float y, const float z, const float w );
+ Quat( const class Matrix3& );
+ Quat( const Vector4& );
+ Quat( const Vector3 xyz, float w );
+ void print( const std::string name=std::string() );
+ Vector3 operator *(const Vector3 rhs) const;
+ Quat operator *(const Quat rhs) const;
+ float dot(const Quat rhs) const; // dot product (operator * is already used for quat...)
+ void invert(); // invert in place
+ Quat inverse(); // leave this alone and return inverted copy
+ Vector3 getEulerAngles();
+
+ // Construction helpers
+ static Quat rotation( const Vector3 from_vec, const Vector3 to_vec );
+ static Quat rotation( const float angle_in_rad, const Vector3 axis );
+ static Quat rotation( const Vector3 hpr_in_rad );
+ static Quat rotation( const float heading, const float pitch, const float roll );
+ static Quat slerp( const float t, const Quat a, const Quat b);
+ };
+
+ class Matrix3 {
+ public:
+ Matrix3();
+ Matrix3( const Matrix3& );
+ Matrix3( const float mat[3][3] );
+ Matrix3( const float m00, const float m10, const float m20, const float m01, const float m11, const float m21, const float m02, const float m12, const float m22 );
+ void fill( float mat[3][3] );
+ Matrix3( const Vector3 col0, const Vector3 col1, const Vector3 col2 );
+ Vector3& operator [](const int idx);
+ Matrix3 operator *(const Matrix3 rhs);
+ Matrix3 operator *(const float rhs);
+ Matrix3 operator /(const float rhs);
+ Matrix3 operator +(const Matrix3 rhs);
+ Matrix3 operator -(const Matrix3 rhs);
+ Matrix3 operator *(const Quat rhs);
+ Vector3 operator *(const Vector3 rhs);
+ Vector3 col( const int );
+ Vector3 row( const int );
+ void set_col( const int which, const Vector3 col );
+ float trace();
+ bool is_identity();
+ void transpose();
+ void print( const std::string name=std::string() );
+ Vector3 getEulerAngles();
+
+ // Construction helpers
+ static Matrix3 rotation( const float angle_in_rad, const Vector3 axis );
+ static Matrix3 rotation( const Vector3 hpr_in_rad );
+ static Matrix3 rotation( const Quat rot );
+ static Matrix3 rotation( const Vector3 from, const Vector3 to );
+ static Matrix3 translation( const Vector3 trans );
+ static Matrix3 scale( const float, const float, const float );
+ static Matrix3 scale( const float );
+ static Matrix3 transpose( const Matrix3 );
+
+ protected:
+ Vector3 _cols[3];
+ };
+
+ class Matrix4 {
+ public:
+ Matrix4();
+ Matrix4( const Matrix4& );
+ Matrix4( const Matrix3& );
+ Matrix4( const float mat[4][4] );
+ Matrix4( const float m00, const float m10, const float m20, const float m30, const float m01, const float m11, const float m21, const float m31, const float m02, const float m12, const float m22, const float m32, const float m03, const float m13, const float m23, const float m33 );
+ void fill( float mat[4][4] );
+ Matrix4( const Vector4 col0, const Vector4 col1, const Vector4 col2, const Vector4 col3 );
+ Vector4& operator [](const int idx);
+ Matrix4 operator *(const Matrix4 rhs);
+ Matrix4 operator *(const float rhs);
+ Matrix4 operator /(const float rhs);
+ Matrix4 operator +(const Matrix4 rhs);
+ Matrix4 operator -(const Matrix4 rhs);
+ Matrix4 operator *(const Quat rhs);
+ Vector4 operator *(const Vector4 rhs);
+ Vector4 col( const int );
+ Vector4 row( const int );
+ void set_col( const int which, const Vector4 col );
+ float trace();
+ bool is_identity();
+ void transpose();
+ void print( const std::string name=std::string() );
+ Vector3 getEulerAngles();
+
+ // Construction helpers
+ static Matrix4 rotation( const float angle_in_rad, const Vector3 axis );
+ static Matrix4 rotation( const Quat rot );
+ static Matrix4 rotation( const Vector3 from, const Vector3 to );
+ static Matrix4 rotation( const Vector3 hpr_in_rad );
+ static Matrix4 translation( const Vector3 trans );
+ static Matrix4 scale( const float, const float, const float );
+ static Matrix4 scale( const float );
+ static Matrix4 transpose( const Matrix4 );
+
+ protected:
+ Vector4 _cols[4];
+ };
+
+ class Line {
+ friend class Plane;
+ public:
+ Line( const Line& );
+ Line( const Vector3& dir, const Vector3& pos );
+
+ Vector3 getClosestPoint( const Vector3& );
+
+ private:
+ Vector3 _dir;
+ Vector3 _pos1;
+ Vector3 _pos2;
+ };
+
+
+ class Plane {
+ public:
+ Plane();
+ Plane( const Plane& );
+ Plane( Vector3 p0, Vector3 p1, Vector3 p2 );
+ Plane( Vector3 point, Vector3 normal );
+
+ void init();
+ double whichSide( Vector3 p );
+ Vector3 getClosestPoint( Vector3 in );
+ Vector3 intersect( const Line line );
+ Vector3 getNormal();
+
+ private:
+ double _a, _b, _c, _d;
+ Vector3 _norm;
+ Vector3 _p0, _p1, _p2;
+
+ };
+
+
+
+
+ #include "sixense_math.cpp"
+
+}
+
+
+#endif
diff --git a/SixenseSDK/include/sixense_utils/accelerometer.hpp b/SixenseSDK/include/sixense_utils/accelerometer.hpp
new file mode 100755
index 0000000..e69de29
--- /dev/null
+++ b/SixenseSDK/include/sixense_utils/accelerometer.hpp
diff --git a/SixenseSDK/include/sixense_utils/button_states.hpp b/SixenseSDK/include/sixense_utils/button_states.hpp
new file mode 100755
index 0000000..a1d1936
--- /dev/null
+++ b/SixenseSDK/include/sixense_utils/button_states.hpp
@@ -0,0 +1,106 @@
+/*
+ *
+ * SIXENSE CONFIDENTIAL
+ *
+ * Copyright (C) 2011 Sixense Entertainment Inc.
+ * All Rights Reserved
+ *
+ */
+
+#ifndef SIXENSE_UTILS_BUTTON_STATES_HPP
+#define SIXENSE_UTILS_BUTTON_STATES_HPP
+
+#pragma warning(push)
+#pragma warning( disable:4251 )
+
+#include "sixense_utils/export.hpp"
+#include "sixense_utils/interfaces.hpp"
+
+#include <sixense.h>
+#include <sixense_math.hpp>
+
+namespace sixenseUtils {
+
+ // LaserPointer computes a ray that shoots from the controller and intersects with the screen.
+ class SIXENSE_UTILS_EXPORT ButtonStates : public IButtonStates {
+
+ public:
+
+ ButtonStates();
+ void update( sixenseControllerData *cd );
+ bool buttonJustPressed( unsigned short which_button );
+ bool buttonJustReleased( unsigned short which_button );
+
+ void setTriggerThreshold( float thresh );
+ bool triggerJustPressed();
+ bool triggerJustReleased();
+
+ void setStickThreshold( float thresh );
+ bool stickJustPressed( Direction which );
+ bool stickJustReleased( Direction which );
+
+ void setAbsoluteTiltAngleThresholdInDeg( float thresh );
+ void setRelativeTiltAngleThresholdInDeg( float thresh );
+
+ // Relative tilts are an orientation change relative to the orientation last time setRelativeOrigin() was called
+ void setRelativeOrigin();
+ void startPointGesture();
+ void stopPointGesture();
+ bool relativeTiltJustStarted( Direction which );
+ bool relativeTiltJustStopped( Direction which );
+
+ // Absolute gestures are just relative to the world
+ bool absoluteTiltJustStarted( Direction which );
+ bool absoluteTiltJustStopped( Direction which );
+
+ float _trigger_threshold;
+
+ bool justStarted( ActionType action, int arg );
+ bool justStopped( ActionType action, int arg );
+
+ protected:
+ void updateJoystick( sixenseControllerData *cd );
+ void updateTrigger( sixenseControllerData *cd );
+ void updateButtons( sixenseControllerData *cd );
+ void updateTilt( sixenseControllerData *cd );
+
+ private:
+
+ // buttons
+ unsigned short _just_pressed;
+ unsigned short _just_released;
+ unsigned short _last_buttons;
+
+ // trigger
+ bool _trigger_just_pressed;
+ bool _trigger_just_released;
+ float _last_trigger_state;
+
+ // joystick
+ float _joystick_threshold;
+ float _last_joystick[2];
+ bool _joystick_just_pressed[4], _joystick_just_released[4]; // 4 stick directions
+
+
+ // tilt
+ float _absolute_tilt_angle_threshold_in_deg, _relative_tilt_angle_threshold_in_deg;
+ sixenseMath::Vector3 _last_point_vec;
+
+ bool _point_gesture_active;
+
+ bool _last_relative_tilt_states[6];
+ bool _relative_tilt_just_started[6], _relative_tilt_just_stopped[6]; // 6 tilt directions
+
+ bool _last_absolute_tilt_states[6];
+ bool _absolute_tilt_just_started[6], _absolute_tilt_just_stopped[6]; // 6 tilt directions
+ bool _should_zero_relative_origin;
+ sixenseMath::Matrix3 _relative_origin;
+
+ };
+
+}
+
+#pragma warning(pop)
+
+#endif
+
diff --git a/SixenseSDK/include/sixense_utils/controller_manager/controller_manager.hpp b/SixenseSDK/include/sixense_utils/controller_manager/controller_manager.hpp
new file mode 100755
index 0000000..f6b674d
--- /dev/null
+++ b/SixenseSDK/include/sixense_utils/controller_manager/controller_manager.hpp
@@ -0,0 +1,91 @@
+/*
+ *
+ * SIXENSE CONFIDENTIAL
+ *
+ * Copyright (C) 2011 Sixense Entertainment Inc.
+ * All Rights Reserved
+ *
+ */
+
+#ifndef CONTROLLER_MANAGER_HPP
+#define CONTROLLER_MANAGER_HPP
+
+#pragma warning(push)
+#pragma warning( disable:4251 )
+
+#include "sixense_utils/export.hpp"
+#include "sixense_utils/interfaces.hpp"
+#include "sixense_utils/sixense_utils_string.hpp"
+
+#include <string>
+#include <vector>
+#include <map>
+
+#include <sixense.h>
+
+namespace sixenseUtils {
+
+ class SIXENSE_UTILS_EXPORT ControllerManager : public IControllerManager {
+
+ public:
+ ~ControllerManager();
+
+ void setGameType( game_type gt );
+ game_type getGameType();
+
+ // Update the ControllerManager. Should be called each frame.
+ void update( sixenseAllControllerData * );
+
+ // Get the controller index for the given description, ie player 1's left hand is controller index 3
+ int getIndex( controller_desc );
+
+ // Force the user to rebind the controllers to the player slots.
+ void rebind();
+
+ // Register a callback that will get called when the mode changes
+ void registerSetupCallback( setup_callback );
+
+ // Returns true if the application should show the menu system
+ bool isMenuVisible();
+
+ // Returns the filename of the recommended texture for this step
+ const char* getTextureFileName();
+
+ // Returns a string describing this step
+ const char* getStepString();
+
+
+ ControllerManager::sound_type shouldPlaySound();
+
+ static ControllerManager *getTheControllerManager();
+
+ static controller_desc controllerDescFromString( sixense_utils_string str );
+
+ setup_step getCurrentStep();
+
+ protected:
+ ControllerManager();
+
+ game_type _game_type;
+
+ // A pointer to the current step
+ setup_step _current_step;
+
+ // A list of maps, one map of steps for each of the game_types.
+ std::vector< std::map< setup_step, class base_step*> >_steps;
+
+ int _controller_map[LAST_CONTROLLER_DESC];
+
+ setup_callback _callback;
+
+ };
+
+ // Singleton
+ SIXENSE_UTILS_EXPORT ControllerManager *getTheControllerManager();
+
+}
+
+#pragma warning(pop)
+
+#endif
+
diff --git a/SixenseSDK/include/sixense_utils/derivatives.hpp b/SixenseSDK/include/sixense_utils/derivatives.hpp
new file mode 100755
index 0000000..cd3c31f
--- /dev/null
+++ b/SixenseSDK/include/sixense_utils/derivatives.hpp
@@ -0,0 +1,63 @@
+/*
+ *
+ * SIXENSE CONFIDENTIAL
+ *
+ * Copyright (C) 2011 Sixense Entertainment Inc.
+ * All Rights Reserved
+ *
+ */
+
+#ifndef SIXENSE_UTILS_DERIVATIVES_HPP
+#define SIXENSE_UTILS_DERIVATIVES_HPP
+
+#pragma warning(push)
+#pragma warning( disable:4251 )
+
+#include "sixense.h"
+#include "sixense_math.hpp"
+
+#include <deque>
+
+#include "sixense_utils/export.hpp"
+#include "sixense_utils/interfaces.hpp"
+
+namespace sixenseUtils {
+
+ class SIXENSE_UTILS_EXPORT Derivatives : public IDerivatives {
+
+ public:
+ Derivatives( sixenseMath::Vector3 offset_vec = sixenseMath::Vector3() );
+
+ void update( sixenseControllerData *cd );
+
+ sixenseMath::Vector3 getPosition();
+ sixenseMath::Vector3 getVelocity();
+ sixenseMath::Vector3 getAcceleration();
+
+ sixenseMath::Vector3 getRSquared();
+
+ void setOffset( sixenseMath::Vector3 offset );
+ sixenseMath::Vector3 getOffset();
+
+ protected:
+ std::deque<unsigned char> _last_n_sequence;
+
+ std::deque<float> _last_n_times;
+
+ std::deque<sixenseMath::Vector3> _last_n_pos;
+
+ sixenseMath::Vector3 _pos;
+ sixenseMath::Vector3 _vel;
+ sixenseMath::Vector3 _accel;
+
+ sixenseMath::Vector3 _r_squared;
+
+ sixenseMath::Vector3 _offset_vec;
+
+ };
+
+}
+
+#pragma warning(pop)
+
+#endif
diff --git a/SixenseSDK/include/sixense_utils/event_triggers.hpp b/SixenseSDK/include/sixense_utils/event_triggers.hpp
new file mode 100755
index 0000000..53454ef
--- /dev/null
+++ b/SixenseSDK/include/sixense_utils/event_triggers.hpp
@@ -0,0 +1,110 @@
+/*
+ *
+ * SIXENSE CONFIDENTIAL
+ *
+ * Copyright (C) 2011 Sixense Entertainment Inc.
+ * All Rights Reserved
+ *
+ */
+
+#ifndef EVENT_TRIGGERS_HPP
+#define EVENT_TRIGGERS_HPP
+
+#pragma warning(push)
+#pragma warning( disable:4251 )
+
+#include <sixense_math.hpp>
+
+namespace sixenseUtils {
+
+ // Classes for triggering events based on joystick or trigger positions
+
+ // These are classes that call the supplied EventTriggerBase's 'trigger()' events when triggered. They can be
+ // created and bound to a switch.
+
+ class EventTriggerBase {
+ public:
+ virtual void trigger() const = 0;
+ };
+
+ // Do nothing
+ class NullEventTrigger : public EventTriggerBase {
+ public:
+ virtual void trigger() const {};
+ };
+
+
+
+ // These classes monitor a floating point value, and trigger their events when the value crosses
+ // a threshold, both rising and falling.
+
+ class EventSwitchBase {
+ public:
+ EventSwitchBase( float thresh, const EventTriggerBase *positive_transition_event, const EventTriggerBase *negative_transition_event ) : _last_state(false), _thresh(thresh), _positive_transition_event(positive_transition_event), _negative_transition_event(negative_transition_event) {}
+ ~EventSwitchBase() {
+ delete _positive_transition_event;
+ delete _negative_transition_event;
+ }
+ void test( float val ) {
+ if( val > _thresh && !_last_state ) {
+ if( _positive_transition_event ) {
+ _positive_transition_event->trigger();
+ }
+ _last_state = true;
+ }
+ if( val < _thresh && _last_state ) {
+ if( _negative_transition_event ) {
+ _negative_transition_event->trigger();
+ }
+ _last_state = false;
+ }
+ }
+
+ bool getLastState( void ) {
+ return _last_state;
+ }
+
+ protected:
+ bool _last_state;
+ float _thresh;
+ const EventTriggerBase *_positive_transition_event;
+ const EventTriggerBase *_negative_transition_event;
+
+ private:
+ EventSwitchBase() {}
+ };
+
+ class PlaneCrossEventSwitch : public EventSwitchBase {
+ public:
+ PlaneCrossEventSwitch( sixenseMath::Plane plane, float thresh, const EventTriggerBase *positive_transition_event, const EventTriggerBase *negative_transition_event ) : EventSwitchBase( thresh, positive_transition_event, negative_transition_event ),
+ _plane(plane) {}
+
+ void test( sixenseMath::Vector3 pt ) {
+ EventSwitchBase::test( -1.0f * (float)_plane.whichSide( pt ) );
+ }
+ private:
+ sixenseMath::Plane _plane;
+ };
+
+ class BinaryEventSwitch : public EventSwitchBase {
+ public:
+ BinaryEventSwitch( const EventTriggerBase *positive_transition_event, const EventTriggerBase *negative_transition_event ) : EventSwitchBase( 0.5f, positive_transition_event, negative_transition_event ) {}
+
+ void test( bool val ) {
+ EventSwitchBase::test( val ? 1.0f : 0.0f );
+ }
+ };
+
+ class ValuatorEventSwitch : public EventSwitchBase {
+ public:
+ ValuatorEventSwitch( float thresh, const EventTriggerBase *positive_transition_event, const EventTriggerBase *negative_transition_event ) : EventSwitchBase( thresh, positive_transition_event, negative_transition_event ){}
+ void test( float val ) {
+ EventSwitchBase::test( val );
+ }
+ };
+
+
+}
+#pragma warning(pop)
+
+#endif
diff --git a/SixenseSDK/include/sixense_utils/export.hpp b/SixenseSDK/include/sixense_utils/export.hpp
new file mode 100755
index 0000000..3f22ce7
--- /dev/null
+++ b/SixenseSDK/include/sixense_utils/export.hpp
@@ -0,0 +1,27 @@
+/*
+ *
+ * SIXENSE CONFIDENTIAL
+ *
+ * Copyright (C) 2011 Sixense Entertainment Inc.
+ * All Rights Reserved
+ *
+ */
+
+#ifndef SIXENSE_UTILS_EXPORT_HPP
+#define SIXENSE_UTILS_EXPORT_HPP
+
+#if defined(WIN32)
+ #ifdef SIXENSE_UTILS_STATIC_LIB
+ #define SIXENSE_UTILS_EXPORT
+ #else
+ #ifdef BUILDING_SIXENSE_UTILS
+ #define SIXENSE_UTILS_EXPORT __declspec(dllexport)
+ #else
+ #define SIXENSE_UTILS_EXPORT __declspec(dllimport)
+ #endif
+ #endif
+#else
+ #define SIXENSE_UTILS_EXPORT
+#endif
+
+#endif
diff --git a/SixenseSDK/include/sixense_utils/fps.hpp b/SixenseSDK/include/sixense_utils/fps.hpp
new file mode 100755
index 0000000..44bcb51
--- /dev/null
+++ b/SixenseSDK/include/sixense_utils/fps.hpp
@@ -0,0 +1,327 @@
+/*
+ *
+ * SIXENSE CONFIDENTIAL
+ *
+ * Copyright (C) 2011 Sixense Entertainment Inc.
+ * All Rights Reserved
+ *
+ */
+
+#ifndef SIXENSE_PORT_UTILS_FPS_HPP
+#define SIXENSE_PORT_UTILS_FPS_HPP
+
+#pragma warning(push)
+#pragma warning( disable:4251 )
+
+#include "sixense.h"
+#include "sixense_math.hpp"
+#include "sixense_utils/interfaces.hpp"
+
+#include <vector>
+#include <map>
+
+using sixenseMath::Vector2;
+using sixenseMath::Vector3;
+using sixenseMath::Matrix3;
+using sixenseMath::Matrix4;
+using sixenseMath::Quat;
+
+#include "export.hpp"
+
+#include "sixense_utils/derivatives.hpp"
+#include "sixense_utils/button_states.hpp"
+#include "sixense_utils/sixense_utils_string.hpp"
+
+namespace sixenseUtils {
+
+ class SIXENSE_UTILS_EXPORT FPSViewAngles : public IFPSViewAngles {
+
+ public:
+ FPSViewAngles();
+
+ void setGame( const char* game_name );
+
+ void setMode( fps_mode mode );
+ fps_mode getMode();
+
+ int update( sixenseControllerData *left_cd, sixenseControllerData *right_cd, float frametime_in_ms=0.0f );
+
+ Vector3 getViewAngles(); // The final view angles, ie the feet plus the aiming from the controller
+ Vector3 getViewAngleOffset(); // The negative controller aim, used to keep the camera stationary in metroid mode
+
+ Vector3 getSpinSpeed();
+
+ void forceViewAngles( fps_mode mode, Vector3 ); // Used to initialize the view direction when switching into stick spin mode
+
+ void setFeetAnglesMetroid( Vector3 angles );
+ Vector3 getFeetAnglesMetroid();
+
+ float getTestVal();
+
+ void setParameter( fps_params param, float val );
+ float getParameter( fps_params param );
+
+ void setFov( float hfov, float vfov );
+ void getFov( float *hfov, float *vfov );
+
+ void setHoldingTurnSpeed( float horiz, float vert );
+
+ void setRatcheting( bool );
+ bool isRatcheting();
+
+ void reset();
+
+ void forceMetroidBlend( float blend_fraction );
+
+ protected:
+ void computeAimOffset1to1( sixenseControllerData *left_cd, sixenseControllerData *right_cd, float frametime_in_ms );
+ void computeAimOffsetPointer( sixenseControllerData *left_cd, sixenseControllerData *right_cd, float frametime_in_ms );
+
+ void computeFeetAnglesOffsetStickSpin( sixenseControllerData *left_cd, sixenseControllerData *right_cd, float frametime_in_ms );
+ void computeFeetAnglesOffsetMetroid( sixenseControllerData *left_cd, sixenseControllerData *right_cd, float frametime_in_ms );
+ void computeFeetAnglesOffsetRatchet( sixenseControllerData *left_cd, sixenseControllerData *right_cd, float frametime_in_ms );
+
+ void computeSpringViewOffset();
+
+ Vector3 clampViewAngles( Vector3 angles, Vector3 max_vals );
+
+ private:
+ fps_mode _mode;
+
+ // Keep track of the game so we can do
+ std::string _game_name;
+
+ // Different types of aim offsets
+ Vector3 _aim_offset_1to1_metroid, _aim_offset_1to1_mouselook; // need two because they're scaled differently
+ Vector3 _aim_offset_pointer;
+
+ Vector3 _spring_view_offset;
+ float _spring_vel;
+ Quat _spring_view;
+
+ // Different types of feet angles
+ Vector3 _feet_angles_stick_spin;
+ Vector3 _feet_angles_metroid;
+ Vector3 _feet_angles_ratchet;
+
+ Vector3 _feet_angles, _aim_offset_1to1;
+
+ // Parameters to control the different modes
+ std::vector<float> _param_vals;
+
+ ButtonStates _left_button_watcher, _right_button_watcher;
+
+ Vector3 _ratchet_base_orientation;
+
+ // Are we flicking? (0-1)
+ float _flicking;
+
+ bool _ratcheting;
+ bool _just_started_ratcheting, _just_stopped_ratcheting;
+
+ float _roll;
+
+ // Keep track of the fov
+ float _hfov, _vfov;
+
+ // This is used to blend pitch smoothly between modes
+ float _blend_pitch_val;
+
+ Vector3 _blend_view_offset;
+ Vector3 _prev_blend_view_offset;
+
+ Vector3 _mode_switch_blend_angle_start, _mode_switch_blend_angle_end, _mode_switch_blend_angles;
+
+ double _mode_switch_blend_duration_ms;
+ double _mode_switch_blend_start_time;
+
+ float _test_val;
+
+ Vector3 _holding_turn_speed;
+
+ // Allow metroid spinning to blend in over time. Useful when switching from 1-to-1 mode.
+ float _metroid_blend_start_time;
+ int _metroid_blend_in_or_out; // 0 == in, 1 == out
+
+ Vector3 _metroid_spin_speed, _stick_spin_speed;
+
+ float _force_blend_aim_metroid_start_time;
+ float _force_blend_aim_metroid_pitch_mult;
+ float _force_blend_aim_metroid_heading_mult;
+ };
+
+
+
+
+ class SIXENSE_UTILS_EXPORT FPSEvents : public IFPSEvents {
+
+ public:
+
+ FPSEvents();
+
+ void setGame( const char* game_name );
+
+ void setBinding( fps_event, fps_controller, fps_action, int param );
+
+ void setPointGestureButton( int );
+
+ bool isPointGestureActive();
+
+ int update( sixenseControllerData *left_cd, sixenseControllerData *right_cd, float frametime_in_ms=0.0f );
+
+ bool eventActive( fps_event event_query );
+ bool eventStarted( fps_event event_query );
+ bool eventStopped( fps_event event_query );
+
+ Vector3 getGrenadeThrowVelocity();
+
+ void setParameter( fps_params param, float val );
+ float getParameter( fps_params param );
+
+ private:
+
+ typedef struct {
+ fps_event _event;
+ fps_controller _controller;
+ fps_action _action;
+ int _param;
+ } fps_binding;
+
+ protected:
+ bool testButtonBinding( fps_binding );
+ bool testJoystickBinding( fps_binding );
+ bool testTriggerBinding( fps_binding );
+ bool testTiltBinding( fps_binding );
+ bool testPointBinding( fps_binding );
+ bool testVelocityBinding( fps_binding );
+
+ private:
+
+ // keep them in a map so there's only one binding per event
+ std::map <fps_event, fps_binding> _bindings;
+
+ ButtonStates _button_states[2]; // one for each controller, in order of fps_controller, so 0=left 1=right
+
+ std::vector<bool> _event_started, _event_stopped, _event_persistent_state;
+ Derivatives _left_deriv, _right_deriv;
+ Derivatives _left_deriv_offset, _right_deriv_offset;
+
+ // Keep track of the velocity of the hand when a grenade is thrown
+ Vector3 _grenade_throw_vel;
+
+ // Keep track of the game so we can do
+ std::string _game_name;
+
+ // Parameters to control the different modes
+ std::vector<float> _param_vals;
+
+ // The z depth at which one to one mode started.
+ Vector3 _one_to_one_start_pos;
+
+ // This is set when a point gesture is in process
+ bool _point_gesture_active;
+
+ // The button that is used to engage point gestures
+ unsigned short _point_gesture_button;
+
+ };
+
+
+ class SIXENSE_UTILS_EXPORT FPSPlayerMovement : public IFPSPlayerMovement{
+
+ public:
+ FPSPlayerMovement();
+
+ void setGame( const char* game_name );
+
+ int update( sixenseControllerData *left_cd, sixenseControllerData *right_cd, float frametime_in_ms=0.0f );
+
+ Vector2 getWalkDir();
+
+ void setParameter( fps_movement_params param, float val );
+ float getParameter( fps_movement_params param );
+
+ private:
+ Vector2 _walk_dir;
+ std::string _game_name;
+
+ // Parameters to control the different modes
+ std::vector<float> _param_vals;
+
+ };
+
+ class SIXENSE_UTILS_EXPORT FPSMeleeWeapon {
+ public:
+ FPSMeleeWeapon();
+
+ int update( sixenseControllerData *left_cd, sixenseControllerData *right_cd, float frametime_in_ms=0.0f );
+
+ // Weapon movement
+ Vector3 getMeleeWeaponPos();
+ Vector3 getMeleeWeaponBladePos();
+ Matrix3 getMeleeWeaponMatrix();
+
+ // Attack
+ bool swingAttackStarted(); // since last update
+ bool isAttacking();
+
+ // 1-to-1 mode (when the melee weapon should be moving with the controller and not animated
+ bool OneToOneModeStarted();
+ bool OneToOneModeStopped();
+ bool isInOneToOneMode();
+
+ Vector3 getSwingAttackStartPos();
+ Vector3 getSwingAttackDir();
+
+ void setToggleMode( bool mode );
+
+ void forceOneToOneMode( bool mode );
+
+ // Parameters to control the different modes
+ typedef enum {
+ SWING_START_VELOCITY,
+ SWING_STOP_VELOCITY,
+ SWING_REARM_VELOCITY,
+ BLADE_LENGTH,
+ CONTROLLER_ANGLE,
+
+ LEFT_HANDED,
+
+ LAST_MELEE_EVENTS_PARAM
+ } melee_params;
+
+ void setParameter( melee_params param, float val );
+ float getParameter( melee_params param );
+
+
+ private:
+ Derivatives _left_deriv, _right_deriv;
+ bool _armed; // Can we attack again?
+ bool _just_started_attack, _attacking;
+ bool _just_started_1to1, _just_stopped_1to1, _in_1to1_mode;
+ int _swing_wait_count; // How many frames to wait until starting a swing
+ int _swing_count; // How long have we been swinging?
+ Matrix4 _start_swing_mat;
+ Vector3 _swing_dir_vec; // Direction we are attacking in
+ Vector3 _swing_start_pos; // Position swing started from
+
+ float _last_trigger_pos;
+
+ Vector3 _weap_pos, _last_weap_pos;
+ Matrix3 _weap_mat, _last_weap_mat;
+
+ Vector3 _weap_blade_pos;
+
+ bool _toggle_mode;
+
+ // Parameters to control the different modes
+ std::vector<float> _param_vals;
+
+ };
+
+}
+
+#endif
+
+#pragma warning(pop)
+
diff --git a/SixenseSDK/include/sixense_utils/fps_rewrite.hpp b/SixenseSDK/include/sixense_utils/fps_rewrite.hpp
new file mode 100755
index 0000000..f1ddd19
--- /dev/null
+++ b/SixenseSDK/include/sixense_utils/fps_rewrite.hpp
@@ -0,0 +1,270 @@
+/*
+ *
+ * SIXENSE CONFIDENTIAL
+ *
+ * Copyright (C) 2011 Sixense Entertainment Inc.
+ * All Rights Reserved
+ *
+ */
+
+#ifndef SIXENSE_PORT_UTILS_FPS_HPP
+#define SIXENSE_PORT_UTILS_FPS_HPP
+
+#pragma warning(push)
+#pragma warning( disable:4251 )
+
+#include "sixense.h"
+#include "sixense_math.hpp"
+#include "sixense_utils/interfaces.hpp"
+
+#include <vector>
+#include <map>
+
+using sixenseMath::Vector2;
+using sixenseMath::Vector3;
+using sixenseMath::Matrix3;
+using sixenseMath::Matrix4;
+using sixenseMath::Quat;
+
+#include "export.hpp"
+
+#include "sixense_utils/derivatives.hpp"
+#include "sixense_utils/button_states.hpp"
+#include "sixense_utils/sixense_utils_string.hpp"
+
+namespace sixenseUtils {
+
+ class SIXENSE_UTILS_EXPORT FPSViewAngles : public IFPSViewAngles {
+
+ public:
+ FPSViewAngles();
+
+ void setGame( const char* game_name );
+
+ void setMode( fps_mode mode );
+ fps_mode getMode();
+
+ int update( sixenseControllerData *left_cd, sixenseControllerData *right_cd, float frametime_in_ms=0.0f );
+
+ Vector3 getViewAngles(); // The final view angles, ie the feet plus the aiming from the controller
+ Vector3 getViewAngleOffset(); // The negative controller aim, used to keep the camera stationary in metroid mode
+
+ Vector3 getSpinSpeed();
+
+ void forceViewAngles( fps_mode mode, Vector3 ); // Used to initialize the view direction when switching into stick spin mode
+
+ void setFeetAnglesMetroid( Vector3 angles );
+ Vector3 getFeetAnglesMetroid();
+
+ float getTestVal();
+
+ void setParameter( fps_params param, float val );
+ float getParameter( fps_params param );
+
+ void setFov( float hfov, float vfov );
+ void getFov( float *hfov, float *vfov );
+
+ void setHoldingTurnSpeed( float horiz, float vert );
+
+ void setRatcheting( bool );
+ bool isRatcheting();
+
+ void reset();
+
+ void forceMetroidBlend( float blend_fraction );
+
+ protected:
+ Vector2 _feet_angles;
+ Vector2 _torso_angles;
+ Vector2 _view_offset;
+
+ Vector2 _ratchet_base_angles;
+
+ private:
+ fps_mode _mode;
+
+ // Keep track of the game so we can do
+ std::string _game_name;
+
+ // Parameters to control the different modes
+ std::vector<float> _param_vals;
+
+ bool _ratcheting;
+ bool _just_started_ratcheting, _just_stopped_ratcheting;
+ };
+
+
+
+
+ class SIXENSE_UTILS_EXPORT FPSEvents : public IFPSEvents {
+
+ public:
+
+ FPSEvents();
+
+ void setGame( const char* game_name );
+
+ void setBinding( fps_event, fps_controller, fps_action, int param );
+
+ void setPointGestureButton( int );
+
+ bool isPointGestureActive();
+
+ int update( sixenseControllerData *left_cd, sixenseControllerData *right_cd, float frametime_in_ms=0.0f );
+
+ bool eventActive( fps_event event_query );
+ bool eventStarted( fps_event event_query );
+ bool eventStopped( fps_event event_query );
+
+ Vector3 getGrenadeThrowVelocity();
+
+ void setParameter( fps_params param, float val );
+ float getParameter( fps_params param );
+
+ private:
+
+ typedef struct {
+ fps_event _event;
+ fps_controller _controller;
+ fps_action _action;
+ int _param;
+ } fps_binding;
+
+ protected:
+ bool testButtonBinding( fps_binding );
+ bool testJoystickBinding( fps_binding );
+ bool testTriggerBinding( fps_binding );
+ bool testTiltBinding( fps_binding );
+ bool testPointBinding( fps_binding );
+ bool testVelocityBinding( fps_binding );
+
+ private:
+
+ // keep them in a map so there's only one binding per event
+ std::map <fps_event, fps_binding> _bindings;
+
+ ButtonStates _button_states[2]; // one for each controller, in order of fps_controller, so 0=left 1=right
+
+ std::vector<bool> _event_started, _event_stopped, _event_persistent_state;
+ Derivatives _left_deriv, _right_deriv;
+ Derivatives _left_deriv_offset, _right_deriv_offset;
+
+ // Keep track of the velocity of the hand when a grenade is thrown
+ Vector3 _grenade_throw_vel;
+
+ // Keep track of the game so we can do
+ std::string _game_name;
+
+ // Parameters to control the different modes
+ std::vector<float> _param_vals;
+
+ // The z depth at which one to one mode started.
+ Vector3 _one_to_one_start_pos;
+
+ // This is set when a point gesture is in process
+ bool _point_gesture_active;
+
+ // The button that is used to engage point gestures
+ unsigned short _point_gesture_button;
+
+ };
+
+
+ class SIXENSE_UTILS_EXPORT FPSPlayerMovement : public IFPSPlayerMovement{
+
+ public:
+ FPSPlayerMovement();
+
+ void setGame( const char* game_name );
+
+ int update( sixenseControllerData *left_cd, sixenseControllerData *right_cd, float frametime_in_ms=0.0f );
+
+ Vector2 getWalkDir();
+
+ void setParameter( fps_movement_params param, float val );
+ float getParameter( fps_movement_params param );
+
+ private:
+ Vector2 _walk_dir;
+ std::string _game_name;
+
+ // Parameters to control the different modes
+ std::vector<float> _param_vals;
+
+ };
+
+ class SIXENSE_UTILS_EXPORT FPSMeleeWeapon {
+ public:
+ FPSMeleeWeapon();
+
+ int update( sixenseControllerData *left_cd, sixenseControllerData *right_cd, float frametime_in_ms=0.0f );
+
+ // Weapon movement
+ Vector3 getMeleeWeaponPos();
+ Vector3 getMeleeWeaponBladePos();
+ Matrix3 getMeleeWeaponMatrix();
+
+ // Attack
+ bool swingAttackStarted(); // since last update
+ bool isAttacking();
+
+ // 1-to-1 mode (when the melee weapon should be moving with the controller and not animated
+ bool OneToOneModeStarted();
+ bool OneToOneModeStopped();
+ bool isInOneToOneMode();
+
+ Vector3 getSwingAttackStartPos();
+ Vector3 getSwingAttackDir();
+
+ void setToggleMode( bool mode );
+
+ void forceOneToOneMode( bool mode );
+
+ // Parameters to control the different modes
+ typedef enum {
+ SWING_START_VELOCITY,
+ SWING_STOP_VELOCITY,
+ SWING_REARM_VELOCITY,
+ BLADE_LENGTH,
+ CONTROLLER_ANGLE,
+
+ LEFT_HANDED,
+
+ LAST_MELEE_EVENTS_PARAM
+ } melee_params;
+
+ void setParameter( melee_params param, float val );
+ float getParameter( melee_params param );
+
+
+ private:
+ Derivatives _left_deriv, _right_deriv;
+ bool _armed; // Can we attack again?
+ bool _just_started_attack, _attacking;
+ bool _just_started_1to1, _just_stopped_1to1, _in_1to1_mode;
+ int _swing_wait_count; // How many frames to wait until starting a swing
+ int _swing_count; // How long have we been swinging?
+ Matrix4 _start_swing_mat;
+ Vector3 _swing_dir_vec; // Direction we are attacking in
+ Vector3 _swing_start_pos; // Position swing started from
+
+ float _last_trigger_pos;
+
+ Vector3 _weap_pos, _last_weap_pos;
+ Matrix3 _weap_mat, _last_weap_mat;
+
+ Vector3 _weap_blade_pos;
+
+ bool _toggle_mode;
+
+ // Parameters to control the different modes
+ std::vector<float> _param_vals;
+
+ };
+
+}
+
+#endif
+
+#pragma warning(pop)
+
diff --git a/SixenseSDK/include/sixense_utils/interfaces.hpp b/SixenseSDK/include/sixense_utils/interfaces.hpp
new file mode 100755
index 0000000..5470221
--- /dev/null
+++ b/SixenseSDK/include/sixense_utils/interfaces.hpp
@@ -0,0 +1,442 @@
+#ifndef SIXENSE_UTILS_INTERFACES_HPP
+#define SIXENSE_UTILS_INTERFACES_HPP
+
+#include <sixense.h>
+#include <sixense_math.hpp>
+
+namespace sixenseUtils {
+
+ class IButtonStates {
+ public:
+
+ typedef enum {
+ DIR_UP,
+ DIR_DOWN,
+ DIR_LEFT,
+ DIR_RIGHT,
+ DIR_CW,
+ DIR_CCW,
+ DIR_FORWARD,
+ DIR_BACKWARD
+ } Direction;
+
+ typedef enum {
+ ACTION_BUTTON_PRESS,
+ ACTION_JOYSTICK_MOVE,
+ ACTION_TRIGGER_PRESS,
+ ACTION_TILT_GESTURE,
+ ACTION_POINT_GESTURE,
+ ACTION_VELOCITY_GESTURE
+ } ActionType;
+
+ virtual void update( sixenseControllerData *cd )=0;
+ virtual bool buttonJustPressed( unsigned short which_button )=0;
+ virtual bool buttonJustReleased( unsigned short which_button )=0;
+
+ virtual void setTriggerThreshold( float thresh )=0;
+ virtual bool triggerJustPressed()=0;
+ virtual bool triggerJustReleased()=0;
+
+ virtual void setStickThreshold( float thresh )=0;
+ virtual bool stickJustPressed( Direction which )=0;
+ virtual bool stickJustReleased( Direction which )=0;
+
+ virtual void setAbsoluteTiltAngleThresholdInDeg( float thresh )=0;
+ virtual void setRelativeTiltAngleThresholdInDeg( float thresh )=0;
+
+ // Relative tilts are an orientation change relative to the orientation last time setRelativeOrigin() was called
+ virtual void setRelativeOrigin()=0;
+ virtual void startPointGesture()=0;
+ virtual void stopPointGesture()=0;
+ virtual bool relativeTiltJustStarted( Direction which )=0;
+ virtual bool relativeTiltJustStopped( Direction which )=0;
+
+ // Absolute gestures are just relative to the world
+ virtual bool absoluteTiltJustStarted( Direction which )=0;
+ virtual bool absoluteTiltJustStopped( Direction which )=0;
+
+ virtual bool justStarted( ActionType action, int arg )=0;
+ virtual bool justStopped( ActionType action, int arg )=0;
+
+ };
+
+ class IDerivatives {
+ public:
+ virtual void update( sixenseControllerData *cd )=0;
+
+ virtual sixenseMath::Vector3 getPosition()=0;
+ virtual sixenseMath::Vector3 getVelocity()=0;
+ virtual sixenseMath::Vector3 getAcceleration()=0;
+
+ virtual sixenseMath::Vector3 getRSquared()=0;
+
+ virtual void setOffset( sixenseMath::Vector3 offset )=0;
+ virtual sixenseMath::Vector3 getOffset()=0;
+ };
+
+ class IFPSViewAngles {
+
+ public:
+ virtual void setGame( const char* game_name )=0;
+
+ typedef enum {
+ MOUSELOOK,
+ FREE_AIM_TWO_CONTROLLER,
+ FREE_AIM_ONE_CONTROLLER,
+ DUAL_ANALOG
+ } fps_mode;
+
+ virtual void setMode( fps_mode mode )=0;
+ virtual fps_mode getMode()=0;
+
+ virtual int update( sixenseControllerData *left_cd, sixenseControllerData *right_cd, float frametime_in_ms=0.0f )=0;
+
+ virtual sixenseMath::Vector3 getViewAngles()=0; // The final view angles, ie the feet plus the aiming from the controller
+ virtual sixenseMath::Vector3 getViewAngleOffset()=0; // The negative controller aim, used to keep the camera stationary in metroid mode
+
+ virtual sixenseMath::Vector3 getSpinSpeed()=0;
+
+ virtual void forceViewAngles( fps_mode mode, sixenseMath::Vector3 )=0; // Used to initialize the view direction when switching into stick spin mode
+
+ virtual void setFeetAnglesMetroid( sixenseMath::Vector3 angles )=0;
+ virtual sixenseMath::Vector3 getFeetAnglesMetroid()=0;
+
+ virtual float getTestVal()=0;
+
+ // Parameters to control the different modes
+ typedef enum {
+ CONTROLLER_ANGLE_MODE,
+
+ AIM_1TO1_HEADING_MULTIPLIER,
+ AIM_1TO1_PITCH_MULTIPLIER,
+ AIM_1TO1_RATCHET_VERTICAL,
+
+ AIM_METROID_HEADING_MULTIPLIER,
+ AIM_METROID_PITCH_MULTIPLIER,
+ AIM_METROID_DEAD_ZONE_RADIUS,
+ AIM_METROID_ACCEL_BAND_SIZE,
+ AIM_METROID_MAX_SPEED,
+ AIM_METROID_AUTO_LEVEL_RATE,
+ AIM_METROID_ACCEL_BAND_EXPONENT,
+ AIM_METROID_SWITCH_BLEND_TIME_ENTER,
+ AIM_METROID_SWITCH_BLEND_TIME_EXIT,
+
+ FEET_ANGLES_OFFSET_STICK_SPIN_HORIZ_MULTIPLIER,
+ FEET_ANGLES_OFFSET_STICK_SPIN_VERT_MULTIPLIER,
+ FEET_ANGLES_OFFSET_STICK_SPIN_INVERT_PITCH,
+ FEET_ANGLES_OFFSET_STICK_SPIN_EXPONENT,
+
+ PITCH_CHANGE_BLEND_VAL,
+
+ SPRING_VIEW_ENABLED,
+ SPRING_VIEW_MIN_SPRING,
+ SPRING_VIEW_MAX_SPRING,
+ SPRING_VIEW_MIN_ANGLE,
+ SPRING_VIEW_MAX_ANGLE,
+
+ FEET_ANGLES_ALLOW_VERT_STICK_SPIN,
+
+ AIM_METROID_ACCEL_BAND_POWER,
+
+ HOLDING_TURN_SPEED,
+
+ ROLL_CORRECTION_BLEND,
+ EXIT_METROID_BLEND,
+
+ LEFT_HANDED,
+
+ LAST_FPS_VIEW_ANGLES_PARAM
+ } fps_params;
+
+ virtual void setParameter( fps_params param, float val )=0;
+ virtual float getParameter( fps_params param )=0;
+
+ virtual void setFov( float hfov, float vfov )=0;
+ virtual void getFov( float *hfov, float *vfov )=0;
+
+ virtual void setHoldingTurnSpeed( float horiz, float vert )=0;
+
+ virtual void setRatcheting( bool )=0;
+ virtual bool isRatcheting()=0;
+
+ virtual void reset()=0;
+
+ virtual void forceMetroidBlend( float blend_fraction )=0;
+ };
+
+ class IFPSEvents {
+
+ public:
+ typedef enum {
+ WALK_LEFT,
+ WALK_RIGHT,
+ WALK_FORWARD,
+ WALK_BACK,
+ JUMP,
+ USE,
+ PRIMARY_FIRE,
+ SECONDARY_FIRE,
+ ZOOM,
+ MELEE,
+ LEAN_LEFT,
+ LEAN_RIGHT,
+ CROUCH,
+ SPRINT,
+ THROW_GRENADE,
+ FLASHLIGHT,
+ NIGHTVISION,
+ RELOAD,
+ NEXT_WEAPON,
+ PREV_WEAPON,
+ ESC_KEY,
+ EQUIP_GRENADE,
+ MEDPACK_SWITCH,
+ GIVE,
+ NEXT_PRIMARY_WEAPON,
+ ONE_TO_ONE_CARRY,
+ EQUIP_MELEE,
+ EQUIP_MACHINEGUN,
+ EQUIP_PISTOL,
+ RATCHET,
+ LAST_FPS_EVENT
+ } fps_event;
+
+ typedef enum {
+ CONTROLLER_LEFT,
+ CONTROLLER_RIGHT
+ } fps_controller;
+
+ typedef enum {
+ ACTION_BUTTON_PRESS,
+ ACTION_JOYSTICK_MOVE,
+ ACTION_TRIGGER_PRESS,
+ ACTION_TILT_GESTURE,
+ ACTION_POINT_GESTURE,
+ ACTION_VELOCITY_GESTURE
+ } fps_action;
+
+ typedef enum {
+ DIR_UP,
+ DIR_DOWN,
+ DIR_LEFT,
+ DIR_RIGHT,
+ DIR_FORWARD,
+ DIR_BACKWARD,
+ DIR_CW,
+ DIR_CCW
+ } fps_direction;
+
+ virtual void setGame( const char* game_name )=0;
+
+ virtual void setBinding( fps_event, fps_controller, fps_action, int param )=0;
+
+ virtual void setPointGestureButton( int )=0;
+
+ virtual bool isPointGestureActive()=0;
+
+ virtual int update( sixenseControllerData *left_cd, sixenseControllerData *right_cd, float frametime_in_ms=0.0f )=0;
+
+ virtual bool eventActive( fps_event event_query )=0;
+ virtual bool eventStarted( fps_event event_query )=0;
+ virtual bool eventStopped( fps_event event_query )=0;
+
+ virtual sixenseMath::Vector3 getGrenadeThrowVelocity()=0;
+
+ // Parameters to control the different modes
+ typedef enum {
+ MELEE_SENSITIVITY,
+ WEAPON_SELECT_SENSITIVITY,
+ CROUCH_SENSITIVITY,
+ JUMP_SENSITIVITY,
+ RELOAD_SENSITIVITY,
+ THROW_SENSITIVITY,
+
+ CONTROLLER_ANGLE_MODE,
+
+ AUTO_ONE_TO_ONE_START_VEL,
+ AUTO_ONE_TO_ONE_START_ACCEL,
+ AUTO_ONE_TO_ONE_START_ACCEL_TIMER,
+ AUTO_ONE_TO_ONE_START_ANGLE_THRESH,
+
+ AUTO_ONE_TO_ONE_STOP_XY_DIST,
+ AUTO_ONE_TO_ONE_STOP_Z_DIST,
+
+ LEFT_HANDED,
+
+ LAST_FPS_EVENTS_PARAM
+ } fps_params;
+
+ virtual void setParameter( fps_params param, float val )=0;
+ virtual float getParameter( fps_params param )=0;
+
+
+ };
+
+ class IFPSPlayerMovement {
+ public:
+ virtual void setGame( const char* game_name )=0;
+
+ virtual int update( sixenseControllerData *left_cd, sixenseControllerData *right_cd, float frametime_in_ms=0.0f )=0;
+
+ virtual sixenseMath::Vector2 getWalkDir()=0;
+
+ // Parameters to control the different modes
+ typedef enum {
+ DEAD_ZONE_PERCENT,
+ EXPONENTIAL,
+ USE_RIGHT_HAND,
+
+ LEFT_HANDED,
+
+ LAST_FPS_MOVEMENT_PARAM
+ } fps_movement_params;
+
+ virtual void setParameter( fps_movement_params param, float val )=0;
+ virtual float getParameter( fps_movement_params param )=0;
+
+ };
+
+ class ILaserPointer {
+ public:
+ virtual void setScreenSize( sixenseMath::Vector2 width_and_height_in_mm )=0;
+ virtual void setScreenCenterOffsetFromBase( sixenseMath::Vector3 offset_in_mm )=0;
+
+ virtual sixenseMath::Vector2 getScreenSize()=0;
+ virtual sixenseMath::Vector3 getScreenCenterOffsetFromBase()=0;
+
+ virtual sixenseMath::Vector2 getIntersection( sixenseMath::Vector3 position, sixenseMath::Matrix3 rotation )=0;
+ };
+
+ class IMousePointer {
+ public:
+ virtual sixenseMath::Vector2 update( sixenseControllerData *cd )=0;
+
+ virtual void setSensitivity( float sensitivity )=0;
+ virtual void setAcceleration( float acceleration )=0;
+ virtual void setSlideEnabled( bool slide_enabled )=0;
+ virtual void setAspectRatio( float aspect_ratio )=0;
+
+ virtual float getRollAngle()=0;
+
+ virtual void setCenter()=0;
+ };
+
+ class IControllerManager {
+ public:
+
+ // Define the steps the manager goes through for the different modes
+ typedef enum {
+
+ SETUP_COMPLETE,
+
+ // P1C1 = One player, 1 controller
+
+ // One player one controller
+ P1C1_START, //1
+ P1C1_POWER_UP_0,
+ P1C1_POWER_UP_DONE,
+ P1C1_AIM_P1L,
+ P1C1_DONE,
+ P1C1_OUT_OF_RANGE,
+ P1C1_IDLE, // 7
+
+ // One player two controllers
+ P1C2_START, // 8
+ P1C2_POWER_UP_0,
+ P1C2_POWER_UP_1,
+ P1C2_POWER_UP_DONE,
+ P1C2_AIM_P1L, // 12
+ P1C2_AIM_P1R,
+ P1C2_DONE,
+ P1C2_OUT_OF_RANGE,
+ P1C2_IDLE // 16
+
+ } setup_step;
+
+
+ typedef enum {
+ NO_SOUND,
+ SUCCESS_BEEP,
+ FAIL_BEEP
+ } sound_type;
+
+ typedef void (*setup_callback)( setup_step );
+
+ typedef enum {
+ ONE_PLAYER_ONE_CONTROLLER,
+ ONE_PLAYER_TWO_CONTROLLER,
+ TWO_PLAYER_ONE_CONTROLLER,
+ TWO_PLAYER_TWO_CONTROLLER,
+ THREE_PLAYER_ONE_CONTROLLER,
+ THREE_PLAYER_TWO_CONTROLLER,
+ FOUR_PLAYER_ONE_CONTROLLER,
+ FOUR_PLAYER_TWO_CONTROLLER
+ } game_type;
+
+ typedef enum {
+ P1L,
+ P1R,
+ P2L,
+ P2R,
+ P3L,
+ P3R,
+ P4L,
+ P4R,
+ LAST_CONTROLLER_DESC
+ } controller_desc;
+
+ virtual void setGameType( game_type gt )=0;
+ virtual game_type getGameType()=0;
+
+ // Update the controller_manager. Should be called each frame.
+ virtual void update( sixenseAllControllerData * )=0;
+
+ // Get the controller index for the given description, ie player 1's left hand is controller index 3
+ virtual int getIndex( controller_desc )=0;
+
+ // Force the user to rebind the controllers to the player slots.
+ virtual void rebind()=0;
+
+ // Register a callback that will get called when the mode changes
+ virtual void registerSetupCallback( setup_callback )=0;
+
+ // Returns true if the application should show the menu system
+ virtual bool isMenuVisible()=0;
+
+ // Returns the filename of the recommended texture for this step
+ virtual const char* getTextureFileName()=0;
+
+ // Returns a string describing this step
+ virtual const char* getStepString()=0;
+
+
+ virtual IControllerManager::sound_type shouldPlaySound()=0;
+
+ virtual setup_step getCurrentStep()=0;
+
+ };
+
+ class IMouseAndKeyboard {
+ public:
+ virtual void sendMouseClick( int click, int release ) = 0; // 0 = none, 1 = left, 2 = right
+ virtual void sendMouseClick( int click, int release, int delay) = 0; // 0 = none, 1 = left, 2 = right
+ virtual void sendMouseWheelMove( int dir ) = 0; // in 'clicks', + = forwards - = backwards
+ virtual void sendKeyState( char key, int press, int release ) = 0;
+ virtual void sendKeyState( char key, int press, int release, int delay ) = 0;
+ virtual void releaseKey( char key ) = 0;
+ virtual void releaseMouseButton( int release ) = 0;
+ virtual void sendAbsoluteMouseMove( float x, float y ) = 0;
+ virtual void sendRelativeMouseMove( float x, float y ) = 0;
+ virtual void sendAbsoluteMouseMoveInPixels( int x, int y ) = 0;
+
+ virtual void getMousePos( int *x, int *y ) = 0;
+ virtual void getPrimaryScreenResolution( int *x, int *y ) = 0;
+
+ virtual void sendMouseClick( float x, float y, int click, int release ) = 0;
+
+ // This should be called once per 10ms or so...
+ virtual void processQueue() = 0;
+ };
+}
+
+#endif
diff --git a/SixenseSDK/include/sixense_utils/keyboard_and_mouse_win32.hpp b/SixenseSDK/include/sixense_utils/keyboard_and_mouse_win32.hpp
new file mode 100755
index 0000000..16223b9
--- /dev/null
+++ b/SixenseSDK/include/sixense_utils/keyboard_and_mouse_win32.hpp
@@ -0,0 +1,227 @@
+/*
+ *
+ * SIXENSE CONFIDENTIAL
+ *
+ * Copyright (C) 2011 Sixense Entertainment Inc.
+ * All Rights Reserved
+ *
+ */
+
+#ifndef SIXENSE_UTILS_KEYBOARD_AND_MOUSE_WIN32_HPP
+#define SIXENSE_UTILS_KEYBOARD_AND_MOUSE_WIN32_HPP
+
+#include "export.hpp"
+
+#include "sixense_utils/interfaces.hpp"
+
+namespace sixenseUtils {
+
+ const int key_esc = 0x01;
+
+#define KEY_ESCAPE 0x01
+#define KEY_1 0x02
+#define KEY_2 0x03
+#define KEY_3 0x04
+#define KEY_4 0x05
+#define KEY_5 0x06
+#define KEY_6 0x07
+#define KEY_7 0x08
+#define KEY_8 0x09
+#define KEY_9 0x0A
+#define KEY_0 0x0B
+#define KEY_MINUS 0x0C /* - on main keyboard */
+#define KEY_EQUALS 0x0D
+#define KEY_BACK 0x0E /* backspace */
+#define KEY_TAB 0x0F
+#define KEY_Q 0x10
+#define KEY_W 0x11
+#define KEY_E 0x12
+#define KEY_R 0x13
+#define KEY_T 0x14
+#define KEY_Y 0x15
+#define KEY_U 0x16
+#define KEY_I 0x17
+#define KEY_O 0x18
+#define KEY_P 0x19
+#define KEY_LBRACKET 0x1A
+#define KEY_RBRACKET 0x1B
+#define KEY_RETURN 0x1C /* Enter on main keyboard */
+#define KEY_LCONTROL 0x1D
+#define KEY_A 0x1E
+#define KEY_S 0x1F
+#define KEY_D 0x20
+#define KEY_F 0x21
+#define KEY_G 0x22
+#define KEY_H 0x23
+#define KEY_J 0x24
+#define KEY_K 0x25
+#define KEY_L 0x26
+#define KEY_SEMICOLON 0x27
+#define KEY_APOSTROPHE 0x28
+#define KEY_GRAVE 0x29 /* accent grave */
+#define KEY_LSHIFT 0x2A
+#define KEY_BACKSLASH 0x2B
+#define KEY_Z 0x2C
+#define KEY_X 0x2D
+#define KEY_C 0x2E
+#define KEY_V 0x2F
+#define KEY_B 0x30
+#define KEY_N 0x31
+#define KEY_M 0x32
+#define KEY_COMMA 0x33
+#define KEY_PERIOD 0x34 /* . on main keyboard */
+#define KEY_SLASH 0x35 /* / on main keyboard */
+#define KEY_RSHIFT 0x36
+#define KEY_MULTIPLY 0x37 /* * on numeric keypad */
+#define KEY_LMENU 0x38 /* left Alt */
+#define KEY_SPACE 0x39
+#define KEY_CAPITAL 0x3A
+#define KEY_F1 0x3B
+#define KEY_F2 0x3C
+#define KEY_F3 0x3D
+#define KEY_F4 0x3E
+#define KEY_F5 0x3F
+#define KEY_F6 0x40
+#define KEY_F7 0x41
+#define KEY_F8 0x42
+#define KEY_F9 0x43
+#define KEY_F10 0x44
+#define KEY_NUMLOCK 0x45
+#define KEY_SCROLL 0x46 /* Scroll Lock */
+#define KEY_NUMPAD7 0x47
+#define KEY_NUMPAD8 0x48
+#define KEY_NUMPAD9 0x49
+#define KEY_SUBTRACT 0x4A /* - on numeric keypad */
+#define KEY_NUMPAD4 0x4B
+#define KEY_NUMPAD5 0x4C
+#define KEY_NUMPAD6 0x4D
+#define KEY_ADD 0x4E /* + on numeric keypad */
+#define KEY_NUMPAD1 0x4F
+#define KEY_NUMPAD2 0x50
+#define KEY_NUMPAD3 0x51
+#define KEY_NUMPAD0 0x52
+#define KEY_DECIMAL 0x53 /* . on numeric keypad */
+#define KEY_F11 0x57
+#define KEY_F12 0x58
+#define KEY_F13 0x64 /* (NEC PC98) */
+#define KEY_F14 0x65 /* (NEC PC98) */
+#define KEY_F15 0x66 /* (NEC PC98) */
+
+#define KEY_KANA 0x70 /* (Japanese keyboard) */
+#define KEY_CONVERT 0x79 /* (Japanese keyboard) */
+#define KEY_NOCONVERT 0x7B /* (Japanese keyboard) */
+#define KEY_YEN 0x7D /* (Japanese keyboard) */
+#define KEY_BREAK 0x7E
+#define KEY_NUMPADEQUALS 0x8D /* = on numeric keypad (NEC PC98) */
+#define KEY_CIRCUMFLEX 0x90 /* (Japanese keyboard) */
+#define KEY_AT 0x91 /* (NEC PC98) */
+#define KEY_COLON 0x92 /* (NEC PC98) */
+#define KEY_UNDERLINE 0x93 /* (NEC PC98) */
+#define KEY_KANJI 0x94 /* (Japanese keyboard) */
+#define KEY_STOP 0x95 /* (NEC PC98) */
+#define KEY_AX 0x96 /* (Japan AX) */
+#define KEY_UNLABELED 0x97 /* (J3100) */
+#define KEY_NUMPADENTER 0x9C /* Enter on numeric keypad */
+#define KEY_RCONTROL 0x9D
+#define KEY_NUMPADCOMMA 0xB3 /* , on numeric keypad (NEC PC98) */
+#define KEY_DIVIDE 0xB5 /* / on numeric keypad */
+#define KEY_SYSRQ 0xB7
+#define KEY_RMENU 0xB8 /* right Alt */
+#define KEY_HOME 0xC7 /* Home on arrow keypad */
+#define KEY_UP 0xC8 /* UpArrow on arrow keypad */
+#define KEY_PRIOR 0xC9 /* PgUp on arrow keypad */
+#define KEY_LEFT 0xCB /* LeftArrow on arrow keypad */
+#define KEY_RIGHT 0xCD /* RightArrow on arrow keypad */
+#define KEY_END 0xCF /* End on arrow keypad */
+#define KEY_DOWN 0xD0 /* DownArrow on arrow keypad */
+#define KEY_NEXT 0xD1 /* PgDn on arrow keypad */
+#define KEY_INSERT 0xD2 /* Insert on arrow keypad */
+#define KEY_DELETE 0xD3 /* Delete on arrow keypad */
+#define KEY_LWIN 0xDB /* Left Windows key */
+#define KEY_RWIN 0xDC /* Right Windows key */
+#define KEY_APPS 0xDD /* AppMenu key */
+
+ class SIXENSE_UTILS_EXPORT mouseAndKeyboardWin32 {
+ public:
+ static void sendMouseClick( int click, int release ); // 0 = none, 1 = left, 2 = right
+ static void sendMouseClick( int click, int release, int delay); // 0 = none, 1 = left, 2 = right
+ static void sendMouseWheelMove( int dir ); // in 'clicks', + = forwards - = backwards
+ static void sendKeyState( char key, int press, int release );
+ static void sendKeyState( char key, int press, int release, int delay );
+ static void releaseKey( char key );
+ static void releaseMouseButton( int release );
+ static void sendAbsoluteMouseMove( float x, float y );
+ static void sendRelativeMouseMove( float x, float y );
+ static void sendAbsoluteMouseMoveInPixels( int x, int y );
+
+ static void getMousePos( int *x, int *y );
+ static void getPrimaryScreenResolution( int *x, int *y );
+
+ static void sendMouseClick( float x, float y, int click, int release );
+
+ // This should be called once per 10ms or so...
+ static void processQueue();
+
+ private:
+ static double _last_click_time;
+ static float _last_absolute_mouse_pos_x;
+ static float _last_absolute_mouse_pos_y;
+ static float _last_absolute_mouse_pos_x_when_clicked;
+ static float _last_absolute_mouse_pos_y_when_clicked;
+ };
+
+ // Define a non-static class for use by the factory constructor. These calls just
+ // pass through to the static calls above.
+ class MouseAndKeyboardWin32 : public IMouseAndKeyboard {
+ public:
+ virtual void sendMouseClick( int click, int release ) {
+ mouseAndKeyboardWin32::sendMouseClick( click, release );
+ }
+ virtual void sendMouseClick( int click, int release, int delay) {
+ mouseAndKeyboardWin32::sendMouseClick( click, release, delay );
+ }
+ virtual void sendMouseWheelMove( int dir ) {
+ mouseAndKeyboardWin32::sendMouseWheelMove( dir );
+ }
+ virtual void sendKeyState( char key, int press, int release ) {
+ mouseAndKeyboardWin32::sendKeyState( key, press, release );
+ }
+ virtual void sendKeyState( char key, int press, int release, int delay ) {
+ mouseAndKeyboardWin32::sendKeyState( key, press, release, delay );
+ }
+ virtual void releaseKey( char key ) {
+ mouseAndKeyboardWin32::releaseKey( key );
+ }
+ virtual void releaseMouseButton( int release ) {
+ mouseAndKeyboardWin32::releaseMouseButton( release );
+ }
+ virtual void sendAbsoluteMouseMove( float x, float y ) {
+ mouseAndKeyboardWin32::sendAbsoluteMouseMove( x, y );
+ }
+ virtual void sendRelativeMouseMove( float x, float y ) {
+ mouseAndKeyboardWin32::sendRelativeMouseMove( x, y );
+ }
+ virtual void sendAbsoluteMouseMoveInPixels( int x, int y ) {
+ mouseAndKeyboardWin32::sendAbsoluteMouseMoveInPixels( x, y );
+ }
+ virtual void getMousePos( int *x, int *y ) {
+ mouseAndKeyboardWin32::getMousePos( x, y );
+ }
+ virtual void getPrimaryScreenResolution( int *x, int *y ) {
+ mouseAndKeyboardWin32::getPrimaryScreenResolution( x, y );
+ }
+
+ virtual void sendMouseClick( float x, float y, int click, int release ) {
+ mouseAndKeyboardWin32::sendMouseClick( x, y, click, release );
+ }
+ // This should be called once per 10ms or so...
+ virtual void processQueue() {
+ mouseAndKeyboardWin32::processQueue();
+ }
+
+ };
+
+}
+
+#endif
+
diff --git a/SixenseSDK/include/sixense_utils/laser_pointer.hpp b/SixenseSDK/include/sixense_utils/laser_pointer.hpp
new file mode 100755
index 0000000..d845ae9
--- /dev/null
+++ b/SixenseSDK/include/sixense_utils/laser_pointer.hpp
@@ -0,0 +1,81 @@
+/*
+ *
+ * SIXENSE CONFIDENTIAL
+ *
+ * Copyright (C) 2011 Sixense Entertainment Inc.
+ * All Rights Reserved
+ *
+ */
+
+#ifndef SIXENSE_PORT_UTILS_LASER_POINTER_HPP
+#define SIXENSE_PORT_UTILS_LASER_POINTER_HPP
+
+#pragma warning(push)
+#pragma warning( disable:4251 )
+
+#include "sixense_utils/export.hpp"
+#include "sixense_utils/interfaces.hpp"
+
+#include "sixense_math.hpp"
+
+using sixenseMath::Vector2;
+using sixenseMath::Vector3;
+using sixenseMath::Matrix3;
+
+namespace sixenseUtils {
+
+ // LaserPointer computes a ray that shoots from the controller and intersects with the screen.
+ class SIXENSE_UTILS_EXPORT LaserPointer {
+
+ public:
+ LaserPointer();
+
+ void setScreenSize( Vector2 width_and_height_in_mm );
+ void setScreenCenterOffsetFromBase( Vector3 offset_in_mm );
+
+ Vector2 getScreenSize();
+ Vector3 getScreenCenterOffsetFromBase();
+
+ Vector2 getIntersection( Vector3 position, Matrix3 rotation );
+
+ private:
+ Vector2 _width_and_height_in_mm;
+ Vector3 _offset_in_mm;
+
+ };
+
+
+ // This class can be used to compute the required parameters for the LaserPointer by having the user aim the controller at the
+ // corners of the screen.
+ class SIXENSE_UTILS_EXPORT LaserPointerCalib {
+ public:
+
+ LaserPointerCalib() { _has_computed = false; }
+
+ // Calibrate using 4 ray casts, bottom left and top right from 2 distinct positions in space
+ bool compute(
+ Vector3 bottom_left_ray_from_point_A,
+ Vector3 top_right_ray_from_point_A,
+ Vector3 bottom_left_ray_from_point_B,
+ Vector3 top_right_ray_from_point_B );
+
+ // Calibrate using 2 ray casts plus the screen size, bottom left and top right
+ bool compute(
+ float screen_width_in_mm, float screen_aspect,
+ Vector3 bottom_left_ray_from_point_A,
+ Vector3 top_right_ray_from_point_A );
+
+ bool hasComputed() { return _has_computed; }
+ Vector2 getScrenSize();
+ Vector3 setScreenCenterOffsetFromBase();
+
+ private:
+ bool _has_computed;
+ Vector2 _width_and_height_in_mm;
+ Vector3 _offset_in_mm;
+ };
+};
+
+#pragma warning(pop)
+
+#endif
diff --git a/SixenseSDK/include/sixense_utils/mouse_pointer.hpp b/SixenseSDK/include/sixense_utils/mouse_pointer.hpp
new file mode 100755
index 0000000..fb16e6a
--- /dev/null
+++ b/SixenseSDK/include/sixense_utils/mouse_pointer.hpp
@@ -0,0 +1,76 @@
+/*
+ *
+ * SIXENSE CONFIDENTIAL
+ *
+ * Copyright (C) 2011 Sixense Entertainment Inc.
+ * All Rights Reserved
+ *
+ */
+
+#ifndef SIXENSE_UTILS_MOUSE_POINTER_HPP
+#define SIXENSE_UTILS_MOUSE_POINTER_HPP
+
+#pragma warning(push)
+#pragma warning( disable:4251 )
+
+#include "sixense_utils/export.hpp"
+#include "sixense_utils/interfaces.hpp"
+
+using sixenseMath::Vector2;
+using sixenseMath::Vector3;
+using sixenseMath::Matrix3;
+
+namespace sixenseUtils {
+
+ class SIXENSE_UTILS_EXPORT MousePointer : public IMousePointer {
+
+ public:
+ MousePointer();
+ sixenseMath::Vector2 update( sixenseControllerData *cd );
+
+ void setSensitivity( float sensitivity );
+ void setAcceleration( float acceleration );
+ void setSlideEnabled( bool slide_enabled );
+ void setAspectRatio( float aspect_ratio );
+ void setLockRelativeToWindow(bool lock);
+ void setLockRelativeToClientBounds(bool client);
+
+ Vector2 getMouseOffset() { return mouse_offset; }
+ void setMouseOffset( Vector2 offset ) { mouse_offset = offset; }
+ float getRollAngle();
+
+ void setCenter();
+ void setWindowCenter();
+
+ private:
+ bool _slide_enabled;
+ float _aspect_ratio;
+ float _sensitivity;
+ float _screen_width_in_mm;
+
+ // velocity params
+ float _min_vel, _max_vel;
+ float _acceleration;
+
+ // This offset is the position of the center of the virtual screen relative to the base
+ Vector2 mouse_offset;
+
+ // Keep track of the previous mouse pos so we can compute velocity
+ Vector2 _last_mouse_pos;
+
+ // Keep track of the last accel so we can filter it
+ float _last_accel;
+
+ float _roll_angle;
+
+ bool _center_mouse_requested;
+ bool _center_mouse_on_window;
+
+ bool _lock_relative_to_window;
+ bool _lock_relative_using_client_bounds;
+ };
+}
+
+#pragma warning(pop)
+
+#endif
diff --git a/SixenseSDK/include/sixense_utils/sixense_utils_string.hpp b/SixenseSDK/include/sixense_utils/sixense_utils_string.hpp
new file mode 100755
index 0000000..31ee7c6
--- /dev/null
+++ b/SixenseSDK/include/sixense_utils/sixense_utils_string.hpp
@@ -0,0 +1,77 @@
+/*
+ *
+ * SIXENSE CONFIDENTIAL
+ *
+ * Copyright (C) 2011 Sixense Entertainment Inc.
+ * All Rights Reserved
+ *
+ */
+
+#ifndef SIXENSE_UTILS_STRING_HPP
+#define SIXENSE_UTILS_STRING_HPP
+
+SIXENSE_UTILS_EXPORT void* sixense_utils_alloc(size_t);
+SIXENSE_UTILS_EXPORT void sixense_utils_free(void*);
+
+#include <string>
+#include <cstddef>
+
+template<class MY_TYPE>
+class sixense_utils_allocator
+{
+public:
+ typedef size_t size_type;
+ typedef ptrdiff_t difference_type;
+ typedef MY_TYPE* pointer;
+ typedef const MY_TYPE* const_pointer;
+ typedef MY_TYPE& reference;
+ typedef const MY_TYPE& const_reference;
+ typedef MY_TYPE value_type;
+
+ sixense_utils_allocator () {}
+ template <class U> sixense_utils_allocator(const sixense_utils_allocator<U>&) {}
+ template <class U> struct rebind { typedef sixense_utils_allocator<U> other; };
+
+ pointer allocate(size_type n, std::allocator<void>::const_pointer hint = 0)
+ {
+ return reinterpret_cast<pointer>(sixense_utils_alloc(n * sizeof(MY_TYPE)));
+ }
+ void construct(pointer p, const_reference val)
+ {
+ ::new(p) MY_TYPE(val);
+ }
+ void destroy(pointer p)
+ {
+ p->~MY_TYPE();
+ }
+ void deallocate(pointer p, size_type n)
+ {
+ sixense_utils_free(p);
+ }
+ size_type max_size() const throw()
+ {
+ return ~size_type(0);
+ }
+};
+
+template<class MY_TYPE>
+bool operator==(const sixense_utils_allocator<MY_TYPE>& left, const sixense_utils_allocator<MY_TYPE>& right) throw()
+{
+ return true;
+}
+
+template<class MY_TYPE>
+bool operator!=(const sixense_utils_allocator<MY_TYPE>& left, const sixense_utils_allocator<MY_TYPE>& right) throw()
+{
+ return false;
+}
+
+namespace sixenseUtils {
+
+ typedef std::basic_string< char, std::char_traits<char>, sixense_utils_allocator<char> > sixense_utils_string;
+
+}
+
+
+#endif
+
diff --git a/SixenseSDK/include/sixense_utils/time.hpp b/SixenseSDK/include/sixense_utils/time.hpp
new file mode 100755
index 0000000..314ed64
--- /dev/null
+++ b/SixenseSDK/include/sixense_utils/time.hpp
@@ -0,0 +1,23 @@
+/*
+ *
+ * SIXENSE CONFIDENTIAL
+ *
+ * Copyright (C) 2011 Sixense Entertainment Inc.
+ * All Rights Reserved
+ *
+ */
+
+#include "sixense_utils/export.hpp"
+
+namespace sixenseUtils {
+
+ class SIXENSE_UTILS_EXPORT Time {
+ public:
+ static double getTimeInMilliseconds();
+
+ // Return the number of milliseconds since this was last called with the given token
+ static double getElapsedMilliseconds( int token );
+ };
+
+}
+
diff --git a/SixenseSDK/install/99-sixense-libusb.rules b/SixenseSDK/install/99-sixense-libusb.rules
new file mode 100755
index 0000000..76632dc
--- /dev/null
+++ b/SixenseSDK/install/99-sixense-libusb.rules
@@ -0,0 +1,5 @@
+# Allow all users read and write raw USB devices for Razer
+ SUBSYSTEMS=="usb", ATTR{manufacturer}=="Razer", ATTR{product}=="Razer Hydra", \
+ MODE="0666"
+
+
diff --git a/SixenseSDK/install/README.txt b/SixenseSDK/install/README.txt
new file mode 100755
index 0000000..a1aac4d
--- /dev/null
+++ b/SixenseSDK/install/README.txt
@@ -0,0 +1,383 @@
+Sixense SDK Package
+12/15/2011
+======================
+
+
+Table of Contents
+=================
+
+1. Installing the SDK
+ 1.1 Requirements
+ 1.2 Install SDK using install.py
+
+2. How to Run Sample Apps
+
+3. Build From Source
+ 3.1 Build for Windows
+ 3.1.1 Requirements
+ 3.1.2 sixense_simple3d and freeglut
+ 3.2 Build for Linux
+ 3.2.1 Requirements
+ 3.2.2. sixense_simple3d and freeglut
+ 3.2.2.1 Using Eclipse
+ 3.2.2.2 Using Makefile
+ 3.3 Build for OSX
+ 3.3.1 Requirements
+ 3.3.2 Building sixense_simple3d and freeglut
+ 3.3.2.1 OSX 10.6 Snow Leopard
+ 3.3.2.1 OSX 10.7 Lion
+
+4. Packaging Scripts
+ 4.1 Requirements
+ 4.2 install.py
+ 4.2.1 Information
+ 4.2.2 Install SixenseSDK using package_sdk.py
+
+5. Developer Notes
+ 5.1 Library Paths
+ 5.1.1 Linux
+ 5.1.2 OSX
+ 5.2 Tested Operating Systems
+ 5.2.1 Linux
+
+1. Installing the SDK
+=====================
+
+1.1 Requirements
+----------------
+ Python version 2.5 or later is required to install the SDK using install scripts.
+
+1.2 Install SDK using install.py
+--------------------------------
+ 1. Navigate to the "install" directory in the top level of the sdk.
+ 2. Run install.py as administrator.
+ on Fedora Linux, to beome the root (administrator) user, type:
+ su - <enter>
+ On Ubuntu Linux, for each command you wish to execute as administrator,
+ type :
+ sudo <command> <enter>
+ [TODO: Windows, OSX...]
+ 3. Select the operating system of the target computer when prompted.
+ 4. Optionally, see section 5 below for further instructions on installing shared libraries.
+
+2. How to run sample apps
+=============================
+ 1. Use a file browser to navigate to "sixense_simple3d" directory.
+ There, folders for various OSes are found:
+ OSX 10.6 32 bit : SixenseSDK/samples/osx10.6/
+ OSX 10.6 64 bit : SixenseSDK/samples/osx10.6_x64/
+ OSX 10.7 32 bit : SixenseSDK/samples/osx10.7/
+ OSX 10.7 64 bit : SixenseSDK/samples/osx10.7_x64/
+ Linux 32 bit : SixenseSDK/samples/linux/
+ Linux 64 bit : SixenseSDK/samples/linux_x64/
+ Windows 32 bit : SixenseSDK/samples/win32/
+ Windows 64 bit : SixenseSDK/samples/x64/
+ 2. Use a file browser to navigate into the proper folder and then double-click
+ the "sixense_simple3d" application. Alternatively, in a terminal in the proper dirctory
+ type:
+ ./sixense_simple3d <enter>
+
+3. Build From Source
+====================
+ All source projects regardless of operating system use relative paths to source and library
+ files.
+
+3.1 Build for Windows
+---------------------
+
+3.1.1 Requirements
+------------------
+ To compile any of the libraries in windows, Microsoft Visual C++ must be used. The Express
+ version of Microsoft Visual C++ can not be used to compile the source code because Microsoft
+ Visual C++ Express does not contain any MFC header's or libraries.
+
+ Sixense_simple3d and freeglut require Visual Studio 2010 to compile the sample application.
+
+3.1.2 sixense_simple3d and freeglut
+---------------------------------
+ 1. Navigate to "src/sixense_simple3d/VisualStudio2010" directory in the top level SDK directory.
+ 2. Open the Visual Studio Solution for the Sixense driver:
+ VC++ 2010 freeglut_vs2010.sln
+ 3. Select the target configuration in the "Solution Configuration" dropdown combo box.
+ Debug : Debug
+ Release : Release
+ 4. Select the target platform in the "Solution Platform" dropdown combo box.
+ Windows 32 bit : Win32
+ Windows 65 bit : x64
+ 5. Build the solution by selecting Build->Bulid Solution in the main menu ( shortcut F7 )
+ 6. The libraries will be located at:
+ Debug : src/sixense_simple3d/VisualStudio2010/Debug/
+ Release : src/sixense_simple3d/VisualStudio2010/Release/
+
+
+3.2 Build for Linux
+-------------------
+
+3.2.1 Requirements
+------------------
+ In order to compile for Linux, the following package dependancies must be installed:
+ libusb1
+ gl-mesa-devel (required only for freeglut)
+ libXi-devel
+ g++
+ See section 5 for instructions on installing packages.
+
+3.2.2 sixense_simple3d and freeglut
+-----------------------------------
+ Pre-built binaries of sixense_simple3d and freeglut are provided in the SDK. If a build on a new
+ operating system is desired, see instructions which follow.
+
+3.2.2.1 Using Eclipse
+---------------------
+ 1. Open Eclipse and select a workspace.
+ 2. Click File->Import->Existing Project Into Workspace
+ 3. Choose the SixenseSDK directory as the root directory. Eclipse will list all projects under
+ that directory.
+ 4. Choose freeglut and sixense_simple_3d and click Finish.
+ 5. Right click on the project and select "Build"
+
+3.2.2.2. Using Makefiles
+------------------------
+ 1. Open a Terminal.
+ 2. Navigate to one of the following directories in the SixenseSDK directory based on the build
+ target.
+ Release 32 bit : SixenseSDK/src/sixense_simple3d/Eclipse/freeglut/Release_x32
+ Release 64 bit : SixenseSDK/src/sixense_simple3d/Eclipse/freeglut/Release_x64
+ 3. Type:
+ make <Enter>
+ 4. Navigate to one of the following directories in the SixenseSDK directory based on the build
+ target.
+ Release 32 bit : SixenseSDK/src/sixense_simple3d/Eclipse/sixense_simple_3d/Release_x32
+ Release 64 bit : SixenseSDK/src/sixense_simple3d/Eclipse/sixense_simple_3d/Release_x64
+ 5. Type:
+ make <Enter>
+
+ Note that SDK Makefiles originally contain relative paths to sources. Once an Eclipse project is
+ built, though, Eclipse overwrites the Makefiles with absolut paths, unless Eclipse options are
+ chosen to avoid generating Makefiles.
+
+3.3 Build for OSX
+-----------------
+
+3.3.1 Requirements
+------------------
+ To keep the build results in the same directory click Xcode->Preferences->Locations, and set
+ 'Derived Data' to 'Relative', instead of 'Default'. This is a system setting. By default,
+ clicking Product->Build will compile a Debug version only. To compile a Release version,
+ click Product->'Build for Profiling'. This behavior can be changed in Product->'Edit Schemes'
+ Changing the location from 'Derived Data' to 'Relative' allows the files built in OSX to be
+ placed in a relative location from the source instead of a system defined location allowing
+ the files to be easily located.
+
+3.3.2 Building sixense_simple3d and freeglut
+-------------------------------------------------
+ Pre-built binaries of sixense_simple3d and freeglut are provided in the SDK. If a build on a new
+ operating system is desired, see instructions which follow.
+
+3.3.2.1 Using Xcode on OSX 10.6 Snow Leopard
+-----------------------------
+ 1. Using a file browser, navigate to the directory where the xcode project exists:
+ SixenseSDK/src/sixense_simple3d/Xcode
+ 2. Double click on "freeglut.xcodeproj" to open the XCode IDE.
+ 3. Set XCode's active scheme to:
+ OSX 32 bit : freeglut_i386, or
+ OSX 64 bit - freeglut_x86_64
+ by selecting the drop down list in the upper left hand corner of the XCode window,
+ to the right of the 'stop' button.
+ 4. Click on "freeglut" project in the file view list to open "Build Settings"
+ 5. Change "Mac OSX Deployment Target" setting to Mac OSX 10.6
+ 6. Click on Product->Build from the main menu ( shortcut: command B ).
+ 7. Set XCode's active scheme to:
+ OSX 32 bit - sixense_simple3d_i386, or
+ OSX 64 bit - sixense_simple3d_x86_64
+ by selecting the drop down list in the upper left hand corner of the XCode window,
+ to the right of the 'stop' button.
+ 8. Click on "freeglut" project in the file view list to open "Build Settings"
+ 9. Change "Mac OSX Deployment Target" setting to Mac OSX 10.6
+ 10. Click on Product->Build from the main menu ( shortcut: command B ).
+ 11. Using a file browser, navigate to:
+ SixenseSDK/src/sixense_simple3d/Xcode/DerrivedData/freeglut/Build/Products/Debug
+ 12. To run the sixense_simple3d application, double click on sixense_simple3d.
+
+3.3.2.2 Using Xcode on OSX 10.7 Lion
+---------------------
+ 1. Using a file browser, navigate to the directory where the xcode project exists:
+ SixenseSDK/src/sixense_simple3d/Xcode
+ 2. Double click on "freeglut.xcodeproj" to open the XCode IDE.
+ 3. Set XCode's active scheme to:
+ OSX 32 bit - freeglut_i386, or
+ OSX 64 bit - freeglut_x86_64
+ by selecting the drop down list in the upper left hand corner of the XCode window,
+ to the right of the 'stop' button.
+ 4. Click on "freeglut" project in the file view list to open "Build Settings"
+ 5. Change "Mac OSX Deployment Target" setting to Mac OSX 10.7
+ 6. Click on Product->Build from the main menu ( shortcut: command B ).
+ 7. Set XCode's active scheme to:
+ OSX 32 bit - sixense_simple3d_i386, or
+ OSX 64 bit - sixense_simple3d_x86_64
+ by selecting the drop down list in the upper left hand corner of the XCode window,
+ to the right of the 'stop' button.
+ 8. Click on "freeglut" project in the file view list to open "Build Settings"
+ 9. Change "Mac OSX Deployment Target" setting to Mac OSX 10.7
+ 10. Click on Product->Build from the main menu ( shortcut: command B ).
+ 11. Using a file browser, navigate to:
+ SixenseSDK/src/sixense_simple3d/Xcode/DerrivedData/freeglut/Build/Products/Debug
+ 12. To run the sixense_simple3d application, double click on sixense_simple3d.
+
+4. Packaging Scripts
+====================
+
+4.1 Requirements
+----------------
+ All scripts have been tested with Python 2.5 and Python 2.6.
+
+4.2 install.py
+--------------
+This file is located in this directory: SixenseSDK/install/install.py
+Usage information follows.
+
+4.2.1 Information
+-----------------
+ Installs the SixenseSDK files onto a designated platform using a config file
+ ( default install.cfg ). This script should be run from SixenseSDK/install. The script
+ install.py will install libraries and add new "udev rules" for Linux. After installing
+ udev rules, the hydra device must be unplugged then plugged back in to allow the new
+ udev rules to take effect.
+
+ The script install.py should only be run from within a SixenseSDK package.
+
+ Usage: install.py [options]
+
+ Options:
+ -h, --help show this help message and exit
+ --version Prints the version and exits
+ -c CONFIG, --config=CONFIG
+ Config File to use
+ -v, --verbose Print Extra Information
+ -w, --warning Print Only Warning Information
+
+4.2.1 Information
+--------------
+ The default configuration script for install.py is called "install.cfg". This file defines
+ various paths used for the installation process.
+
+5. Developer Notes
+==================
+
+5.1 Library Paths
+-----------------
+ On Linux and OSX, system shared library paths may not be searched automatically for dynamic
+ libraries which SixenseSDK installs. SDK installer scripts take action to correct this issue.
+
+5.1.1 Linux
+-----------
+ All Fedora packages should be updated after an install. This can be done
+ with the following command (as root):
+ yum update <enter>
+
+ Run install.py script to place all libraries in standard library paths.
+ Alternatively, the end user can put SDK shared libraries into /usr/local/lib, add that
+ path to /etc/ld.so.conf if needed, then run /sbin/ldconfig
+
+ Most required shared libraries should be pre-installed on your system but some may not be.
+ In Fedora, use the system package manager, or, on a command line do the following, substituting
+ the desired package name (as root):
+ yum install mesa-libGL <enter>
+ (here package "mesa-libGL" is installed)
+
+ What packages need to be installed on Fedora15-64 ?
+ ( this list was generated using the command: ldd ./sixense_simple3d )
+
+ file: /usr/lib64/libGL.so.1
+ package: mesa-libGL-7.11-1.fc15.x86_64
+
+ file: /usr/lib64/libstdc++.so.6
+ libstdc++-4.6.1-9.fc15.x86_64
+
+ file: /lib64/libm.so.6
+ file: /lib64/libc.so.6
+ file: /lib64/libpthread.so.0
+ file: /lib64/libdl.so.2
+ file: /lib64/librt.so.1
+ package: glibc-2.14-5.x86_64
+
+ file: /lib64/libgcc_s.so.1
+ package: libgcc-4.6.1-9.fc15.x86_64
+
+ file: /lib64/libusb-1.0.so.0
+ package: libusb1-1.0.8-7.fc15.x86_64
+
+ file: /usr/lib64/libX11.so.6
+ package: libX11-1.4.3-1.fc15.x86_64
+
+ file: /usr/lib64/libXext.so.6
+ package: libXext-1.2.0-2.fc15.x86_64
+
+ file: /usr/lib64/libXdamage.so.1
+ package: libXdamage-1.1.3-2.fc15.x86_64
+
+ file: /usr/lib64/libXfixes.so.3
+ package: libXfixes-5.0-1.fc15.x86_64
+
+ file: /usr/lib64/libXxf86vm.so.1
+ package: libXxf86vm-1.1.1-2.fc15.x86_64
+
+ file: /usr/lib64/libdrm.so.2
+ package: libdrm-2.4.26-2.fc15.x86_64
+
+ file: /usr/lib64/libxcb.so.1
+ package: libxcb-1.7-2.fc15.x86_64
+
+ file: /usr/lib64/libXau.so.6
+ package: libXau-1.0.6-2.fc15.x86_64
+
+ In Ubuntu, or other Debian based Linux distributions, packages can be installed like this:
+ sudo apt-get install libusb1.0-0
+ (this would install libusb1 on Ubuntu)
+
+5.1.2 OSX
+---------
+ In OSX, library paths are hardcoded into the binary during linking. Currently, library files
+ are hardcoded to these paths:
+ libsixense.dylib -> /usr/local/lib
+ libsixense_utils.dylib -> /usr/local/lib
+ libfreeglut.dylib -> @executable_path(same path as executable)
+ To see what library paths are hardcoded to a library or executable, run
+ 'otool -L (library or executable name)'
+ the location of the libraries the executable uses can be changed with a command line tool
+ called 'install_name_tool'. For example, to use the libsixense.dylib in the same path as the
+ sixense_simple3d instead of /usr/local/lib, run the command:
+ install_name_tool -change /usr/local/lib/libsixense.dylib @executable_path/libsixense.dylib sixense_simple3d
+
+ Note that dynamic libraries may also have hardcoded links to other libraries. for example,
+ libsixense_utils.dylib by default will look for libsixense.dylib in /usr/local/lib. This can
+ also be changed with install_name_tool.
+
+5.2 Tested Operating Systems
+----------------------------
+
+5.2.1 Linux
+----------------------------
+ The 32 bit versions of the libsixense libraries and the sixense_simple3d binary have been compiled using
+ gcc 4.4.2 linked to glibc 2.11.1.
+ This sixense_simple3d app has been tested on the following systems:
+ Fedora 15 32 bit
+ Ubuntu 10.04 32 bit
+ Ubuntu 11.10 32 bit
+
+ The 64 bit versions of the libsixense libraries and the sixense_simple3d binary have been compiled using
+ gcc 4.4.2 linked to glibc 2.11.1.
+ This sixense_simple3d app has been tested on the following systems:
+ Fedora 15 64 bit
+ Fedora 16 64 bit
+ Ubuntu 11.10 64 bit
+
+5.2.2 OSX
+---------
+The 64 and 32 bit versions of the libsixense libraries and the sixense_simple3d binary have been tested on:
+OSX Lion 10.7.1 (11826), X server version: xorg 1.10.2
+
+The 32 bit version of the libsixense libraries and the sixense_simple3d binary have been tested on:
+OSX Snow Leopard 10.6.8 (10K549), X server version: xquartz 2.3.6 (xorg 1.4.2-apple-56)
+
+
diff --git a/SixenseSDK/install/install.cfg b/SixenseSDK/install/install.cfg
new file mode 100755
index 0000000..ab3093e
--- /dev/null
+++ b/SixenseSDK/install/install.cfg
@@ -0,0 +1,73 @@
+#config file for install.py
+#any line starting with a '#' is a comment and will be ignored
+
+# arguments
+# packager needs to know definition of these items
+# each item is comprised of elements on the list
+linux_32 = udev_rules, linux_32_debug, linux_32_release
+linux_64 = udev_rules, linux_64_debug, linux_64_release
+osx_32 = osx_32_lib_debug, osx_32_lib_release
+osx_64 = osx_64_lib_debug, osx_64_lib_release
+
+###linux###
+
+#ld.so.conf paths
+linux_library_config_file = /etc/ld.so.conf
+linux_library_path = /usr/local/lib
+
+#udev_rules
+udev_rules_destination = /etc/udev/rules.d/
+udev_rules_source = .
+udev_rules_file = 99-sixense-libusb.rules
+
+#linux_32_debug
+linux_32_debug_destination = /usr/local/lib
+linux_32_debug_source = ../lib/linux/glibc4.4/debug
+linux_32_debug_file = *.*
+
+#linux_32_release
+linux_32_release_destination = /usr/local/lib
+linux_32_release_source = ../lib/linux/glibc4.4/release
+linux_32_release_file = *.*
+
+#glibc_4.6_32_lib_debug
+glibc_4.6_32_lib_debug_destination = /usr/local/lib
+glibc_4.6_32_lib_debug_source = ../lib/linux_x32/glibc4.6/debug
+glibc_4.6_32_lib_debug_file = *.*
+
+#glibc_4.6_32_lib_release
+glibc_4.6_32_lib_release_destination = /usr/local/lib
+glibc_4.6_32_lib_release_source = ../lib/linux_x32/glibc4.6/release
+glibc_4.6_32_lib_release_file = *.*
+
+#linux_64_debug
+linux_64_debug_destination = /usr/local/lib
+linux_64_debug_source = ../lib/linux_x64/glibc4.6/debug
+linux_64_debug_file = *.*
+
+#linux_64_release
+linux_64_release_destination = /usr/local/lib
+linux_64_release_source = ../lib/linux_x64/glibc4.6/release
+linux_64_release_file = *.*
+
+###osx###
+
+#osx_32_lib_debug
+osx_32_lib_debug_destination = /usr/local/lib
+osx_32_lib_debug_source = ../lib/osx/debug_dll
+osx_32_lib_debug_file = *.*
+
+#osx_32_lib_release
+osx_32_lib_release_destination = /usr/local/lib
+osx_32_lib_release_source = ../lib/osx_x64/release_dll
+osx_32_lib_release_file = *.*
+
+#osx_64_lib_debug
+osx_64_lib_debug_destination = /usr/local/lib
+osx_64_lib_debug_source = ../lib/osx_x64/debug_dll
+osx_64_lib_debug_file = *.*
+
+#osx_64_lib_release
+osx_64_lib_release_destination = /usr/local/lib
+osx_64_lib_release_source = ../lib/osx_x64/release_dll
+osx_64_lib_release_file = *.*
diff --git a/SixenseSDK/install/install.py b/SixenseSDK/install/install.py
new file mode 100755
index 0000000..0e6bd37
--- /dev/null
+++ b/SixenseSDK/install/install.py
@@ -0,0 +1,349 @@
+#!/usr/bin/python
+
+import sys
+import os.path
+from optparse import OptionParser
+from shutil import rmtree, copy, copytree
+import subprocess
+
+cmdOpts = ''
+cmdArgs = ''
+config = ''
+
+menu = """
+Please select your operating system:
+1. Windows 32 bit
+2. Windows 64 bit
+3. Linux 32 bit
+4. Linux 65 bit
+5. OSX 32 bit
+6. OSX 64 bit
+"""
+
+def isInt( s ):
+ try:
+ int(s)
+ return True
+ except ValueError:
+ return False
+
+
+class SDKPackager:
+ def __init__( self ):
+ self.versionMajor = 1
+ self.versionMinor = 0
+ self.versionMacro = 1
+
+ self.currentDirectory = os.path.dirname(os.path.realpath(__file__))
+ self.platform = ""
+
+ self.linux_32 = []
+ self.linux_64 = []
+ self.osx = []
+ self.osx64 = []
+
+ print "\nSixense SDK Installation Script v%02d.%02d.%02d" % ( self.versionMajor, self.versionMinor, self.versionMacro )
+ if( not cmdOpts.printVersionAndExit ):
+ print "============================================"
+
+ def cleanString( self, string ):
+ string = string.lstrip()
+ string = string.rstrip(" \t\r\n\0")
+ return string
+
+ def cleanList( self, lst):
+ if "" in lst:
+ lst.remove("")
+ return lst
+
+ def forceString( self, value ):
+ if not isinstance(value, str):
+ return value[0]
+ else:
+ return value
+
+ def getValue( self, key ):
+ returnValue = []
+
+ file = open(cmdOpts.config)
+ for line in file:
+ line = self.cleanString(line)
+ if len(line) == 0:
+ continue
+
+ if line[0] == '#':
+ continue
+
+ pairs = line.split("=")
+
+ keyFile = self.cleanString(pairs[0])
+ if keyFile == key:
+ for element in pairs[1].split(","):
+ returnValue.append(self.cleanString(element))
+ return returnValue
+
+ return returnValue
+
+ def find_in_file(self, filename, searchstr): # see whether a string appears in a file at all, and tell on which line
+ libfd = open(filename,"r")
+ contents = libfd.readlines()
+ libfd.close()
+ index = 0
+ for fline in contents:
+ if searchstr in fline:
+ return True, index
+ index = index + 1
+ return False, index
+
+ def append_to_file(self, filename, newstr):
+ libfd = open(filename,"a")
+ libfd.write(newstr)
+ libfd.close()
+
+ def parseConfig( self ):
+
+ print "-----------------------------------------------"
+ print "Parsing Config File %s" % cmdOpts.config
+ print "-----------------------------------------------"
+
+ self.parseItem()
+
+ def parseItem( self ):
+ print "Finding Items"
+ file = open(cmdOpts.config)
+
+ for line in file:
+ line = self.cleanString(line)
+
+ if len(line) == 0:
+ continue
+
+ if line[0] == '#':
+ continue
+
+ pairs = line.split("=")
+
+ key = self.cleanString(pairs[0])
+ value = []
+
+ if key == "linux_32" and self.platform == "linux_32":
+ sys.stdout.write("Found Linux 32 bit")
+ sys.stdout.flush()
+ for element in pairs[1].split(","):
+ if len(element) > 0:
+ self.linux_32.append(self.cleanString(element))
+ print " Done"
+ if key == "linux_64" and self.platform == "linux_64":
+ sys.stdout.write("Found Linux 64 bit")
+ sys.stdout.flush()
+ for element in pairs[1].split(","):
+ if len(element) > 0:
+ self.linux_64.append(self.cleanString(element))
+ print " Done"
+ if key == "osx_32" and self.platform == "osx_32":
+ sys.stdout.write("Found OSX 32 bit")
+ sys.stdout.flush()
+ for element in pairs[1].split(","):
+ if len(element) > 0:
+ self.osx.append(self.cleanString(element))
+ print " Done"
+ if key == "osx_64" and self.platform == "osx_64":
+ sys.stdout.write("Found OSX 64 bit")
+ sys.stdout.flush()
+ for element in pairs[1].split(","):
+ if len(element) > 0:
+ self.osx64.append(self.cleanString(element))
+ print " Done"
+
+ file.close()
+ print "Done\n"
+
+ def chooseTargetPlatform( self ):
+ response = ""
+ print menu
+
+ response = raw_input("Enter Selection: ")
+
+ if response == "3":
+ self.platform = "linux_32"
+ elif response == "4":
+ self.platform = "linux_64"
+ elif response == "5":
+ self.platform = "osx_32"
+ elif response == "6":
+ self.platform = "osx_64"
+ else:
+ if response == "1" or response == "2":
+ print "Currently Unsupported Target Operating System"
+ else:
+ print "Invalid Selection"
+ self.chooseTargetPlatform()
+
+ def preInstall( self ):
+ return
+
+ def install( self ):
+ self.copyFilesHelper( self.linux_32, "Linux 32 bit" )
+ self.copyFilesHelper( self.linux_64, "Linux 64 bit" )
+ self.copyFilesHelper( self.osx, "OSX 32 bit" )
+ self.copyFilesHelper( self.osx64, "OSX 64 bit" )
+ return
+
+ def copyFilesHelper( self, folderList, userText ):
+ if not cmdOpts.verbose:
+ self.firstErrorAfterHeader = True
+ destination = ""
+ source = ""
+ files = []
+ if len(folderList) > 0:
+ sys.stdout.write("- for %s\r" % userText)
+ sys.stdout.flush()
+ if cmdOpts.verbose:
+ print ""
+ for element in folderList:
+ destination = self.getValue(element+"_destination")
+ source = self.getValue(element+"_source")
+ files = self.getValue(element+"_file")
+ source = self.cleanList(source)
+ files = self.cleanList(files)
+ for outfile in files:
+ self.copyFileParser( destination, source, outfile )
+ if not cmdOpts.verbose:
+ sys.stdout.write("%46s\r" % "Done")
+ sys.stdout.write("- for %s\n" % userText)
+ sys.stdout.flush()
+ else:
+ print "Done\n"
+
+ def copyFileParser( self, dstPath, srcPath, srcFile ):
+ dst = ""
+ src = ""
+ if not isinstance(dstPath, str):
+ dst = dstPath[0]
+ else:
+ dst = dstPath
+ if not isinstance(srcPath, str):
+ src = srcPath[0]
+ else:
+ src = srcPath
+
+ pathsExist = True
+
+ if not os.path.isdir(src):
+ if self.firstErrorAfterHeader:
+ print ""
+ self.firstErrorAfterHeader = False
+ print "Source Path Does Not Exist: %s" % src
+ pathsExist = False
+ if not os.path.isdir(dst):
+ if self.firstErrorAfterHeader:
+ print ""
+ self.firstErrorAfterHeader = False
+ print "Destination Path Does Not Exist: %s" % dst
+ pathsExist = False
+
+ if not pathsExist:
+ return
+
+ #copy all files
+ if srcFile.split('.')[0] == '*' and srcFile.split('.')[1] == '*':
+ for filename in os.listdir( os.path.join(".",src) ):
+ self.copyFile( dst, src, filename )
+ #copy all files by extention
+ elif srcFile.split('.')[0] == '*' and srcFile.split('.')[1] != '*':
+ for filename in os.listdir( os.path.join(".",src) ):
+ if os.path.isfile(filename):
+ if filename.split('.')[1] == srcFile.split('.')[1]:
+ self.copyFile( dst, src, filename )
+ #copy all files starting with <>
+ elif srcFile.split('.')[0] != '*' and srcFile.split('.')[1] == '*':
+ for filename in os.listdir( os.path.join(".",src) ):
+ if filename.split('.')[0] == srcFile.split('.')[0]:
+ self.copyFile( dst, src, filename )
+ #copy individual file
+ else:
+ self.copyFile( dst, src, srcFile )
+
+ def copyFile( self, dstPath, srcPath, srcFile ):
+ fileExists = True
+
+ if not os.path.isfile(os.path.join(srcPath,srcFile)):
+ if os.path.isdir(os.path.join(srcPath,srcFile)):
+ if cmdOpts.verbose:
+ print "Copying all files from %s to %s" % (os.path.join(srcPath,srcFile), dstPath )
+ copytree(srcPath,os.path.join(dstPath,srcFile))
+ return
+ else:
+ if self.firstErrorAfterHeader:
+ print ""
+ self.firstErrorAfterHeader = False
+ print "Source File Does Not Exist: %s" % os.path.join(srcPath,srcFile)
+ fileExists = False
+
+ if not fileExists:
+ return
+
+ if cmdOpts.verbose:
+ print "Copying File %s from %s to %s" % (srcFile, srcPath, dstPath )
+ copy( os.path.join(srcPath,srcFile), dstPath)
+
+ def postInstall( self ):
+ if self.platform =="linux_32" or self.platform == "linux_64":
+ configFile = self.forceString(self.getValue("linux_library_config_file"))
+ libPath = self.forceString(self.getValue("linux_library_path"))
+ if os.path.isfile( configFile ):
+ found, index = self.find_in_file(configFile,libPath) # is lib path already there?
+ if found:
+ print "Library path is already registered in %s, on line %d." % (configFile,index)
+ else:
+ print "Library path not registered yet. Adding library path to %s..." % configFile
+ self.append_to_file(configFile,"\n"+libPath+"\n")
+ lib_update_cmd = "ldconfig"
+ p = subprocess.Popen(lib_update_cmd, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=True)
+ else:
+ print "Unable to Find ld.so.conf"
+
+ def run( self ):
+ self.chooseTargetPlatform()
+ self.parseConfig()
+ self.preInstall()
+ self.install()
+ self.postInstall()
+
+# main program starts here
+if __name__ == '__main__':
+ #configFile = "sdk_hierarchy_default"
+
+ parser = OptionParser(usage="%prog [options]")
+
+ parser.add_option('',"--version",
+ action="store_true",
+ dest="printVersionAndExit",
+ default=False,
+ help="Prints the version and exits",)
+
+ parser.add_option('-c',"--config",
+ action="store",
+ dest="config",
+ default="install.cfg",
+ help="Config File to use",)
+
+ parser.add_option('-v',"--verbose",
+ action="store_true",
+ dest="verbose",
+ default=False,
+ help="Print Extra Information",)
+
+ parser.add_option('-w',"--warning",
+ action="store_true",
+ dest="warning",
+ default=False,
+ help="Print Only Warning Information",)
+
+ (cmdOpts, cmdArgs) = parser.parse_args()
+
+ package = SDKPackager()
+
+ if( cmdOpts.printVersionAndExit ):
+ exit()
+ package.run()
diff --git a/SixenseSDK/lib/linux/debug/libsixense_utilsd.so b/SixenseSDK/lib/linux/debug/libsixense_utilsd.so
new file mode 100755
index 0000000..6cf8aea
--- /dev/null
+++ b/SixenseSDK/lib/linux/debug/libsixense_utilsd.so
Binary files differ
diff --git a/SixenseSDK/lib/linux/debug/libsixensed.so b/SixenseSDK/lib/linux/debug/libsixensed.so
new file mode 100755
index 0000000..027e30b
--- /dev/null
+++ b/SixenseSDK/lib/linux/debug/libsixensed.so
Binary files differ
diff --git a/SixenseSDK/lib/linux/release/libsixense.so b/SixenseSDK/lib/linux/release/libsixense.so
new file mode 100755
index 0000000..3d2dcea
--- /dev/null
+++ b/SixenseSDK/lib/linux/release/libsixense.so
Binary files differ
diff --git a/SixenseSDK/lib/linux/release/libsixense_utils.so b/SixenseSDK/lib/linux/release/libsixense_utils.so
new file mode 100755
index 0000000..621b04a
--- /dev/null
+++ b/SixenseSDK/lib/linux/release/libsixense_utils.so
Binary files differ
diff --git a/SixenseSDK/lib/linux_x64/debug/libsixense_utilsd_x64.so b/SixenseSDK/lib/linux_x64/debug/libsixense_utilsd_x64.so
new file mode 100755
index 0000000..cefda54
--- /dev/null
+++ b/SixenseSDK/lib/linux_x64/debug/libsixense_utilsd_x64.so
Binary files differ
diff --git a/SixenseSDK/lib/linux_x64/debug/libsixensed_x64.so b/SixenseSDK/lib/linux_x64/debug/libsixensed_x64.so
new file mode 100755
index 0000000..8a63038
--- /dev/null
+++ b/SixenseSDK/lib/linux_x64/debug/libsixensed_x64.so
Binary files differ
diff --git a/SixenseSDK/lib/linux_x64/release/libsixense_utils_x64.so b/SixenseSDK/lib/linux_x64/release/libsixense_utils_x64.so
new file mode 100755
index 0000000..031d805
--- /dev/null
+++ b/SixenseSDK/lib/linux_x64/release/libsixense_utils_x64.so
Binary files differ
diff --git a/SixenseSDK/lib/linux_x64/release/libsixense_x64.so b/SixenseSDK/lib/linux_x64/release/libsixense_x64.so
new file mode 100755
index 0000000..8004518
--- /dev/null
+++ b/SixenseSDK/lib/linux_x64/release/libsixense_x64.so
Binary files differ
diff --git a/SixenseSDK/lib/osx/debug_dll/libsixense_utilsd.dylib b/SixenseSDK/lib/osx/debug_dll/libsixense_utilsd.dylib
new file mode 100755
index 0000000..472bdd6
--- /dev/null
+++ b/SixenseSDK/lib/osx/debug_dll/libsixense_utilsd.dylib
Binary files differ
diff --git a/SixenseSDK/lib/osx/debug_dll/libsixensed.dylib b/SixenseSDK/lib/osx/debug_dll/libsixensed.dylib
new file mode 100755
index 0000000..d68e6c3
--- /dev/null
+++ b/SixenseSDK/lib/osx/debug_dll/libsixensed.dylib
Binary files differ
diff --git a/SixenseSDK/lib/osx/release_dll/libsixense.dylib b/SixenseSDK/lib/osx/release_dll/libsixense.dylib
new file mode 100755
index 0000000..4a8c516
--- /dev/null
+++ b/SixenseSDK/lib/osx/release_dll/libsixense.dylib
Binary files differ
diff --git a/SixenseSDK/lib/osx/release_dll/libsixense_utils.dylib b/SixenseSDK/lib/osx/release_dll/libsixense_utils.dylib
new file mode 100755
index 0000000..1869f16
--- /dev/null
+++ b/SixenseSDK/lib/osx/release_dll/libsixense_utils.dylib
Binary files differ
diff --git a/SixenseSDK/lib/osx_x64/debug_dll/libsixense_utilsd_x64.dylib b/SixenseSDK/lib/osx_x64/debug_dll/libsixense_utilsd_x64.dylib
new file mode 100755
index 0000000..684acff
--- /dev/null
+++ b/SixenseSDK/lib/osx_x64/debug_dll/libsixense_utilsd_x64.dylib
Binary files differ
diff --git a/SixenseSDK/lib/osx_x64/debug_dll/libsixensed_x64.dylib b/SixenseSDK/lib/osx_x64/debug_dll/libsixensed_x64.dylib
new file mode 100755
index 0000000..ad0d315
--- /dev/null
+++ b/SixenseSDK/lib/osx_x64/debug_dll/libsixensed_x64.dylib
Binary files differ
diff --git a/SixenseSDK/lib/osx_x64/release_dll/libsixense_utils_x64.dylib b/SixenseSDK/lib/osx_x64/release_dll/libsixense_utils_x64.dylib
new file mode 100755
index 0000000..29bbf07
--- /dev/null
+++ b/SixenseSDK/lib/osx_x64/release_dll/libsixense_utils_x64.dylib
Binary files differ
diff --git a/SixenseSDK/lib/osx_x64/release_dll/libsixense_x64.dylib b/SixenseSDK/lib/osx_x64/release_dll/libsixense_x64.dylib
new file mode 100755
index 0000000..08f7b36
--- /dev/null
+++ b/SixenseSDK/lib/osx_x64/release_dll/libsixense_x64.dylib
Binary files differ
diff --git a/SixenseSDK/lib/win32/debug_dll/sixense_utilsd.lib b/SixenseSDK/lib/win32/debug_dll/sixense_utilsd.lib
new file mode 100755
index 0000000..04a5fde
--- /dev/null
+++ b/SixenseSDK/lib/win32/debug_dll/sixense_utilsd.lib
Binary files differ
diff --git a/SixenseSDK/lib/win32/debug_dll/sixensed.lib b/SixenseSDK/lib/win32/debug_dll/sixensed.lib
new file mode 100755
index 0000000..c9fc91c
--- /dev/null
+++ b/SixenseSDK/lib/win32/debug_dll/sixensed.lib
Binary files differ
diff --git a/SixenseSDK/lib/win32/debug_static/sixense_utilsd_s.lib b/SixenseSDK/lib/win32/debug_static/sixense_utilsd_s.lib
new file mode 100755
index 0000000..527067b
--- /dev/null
+++ b/SixenseSDK/lib/win32/debug_static/sixense_utilsd_s.lib
Binary files differ
diff --git a/SixenseSDK/lib/win32/debug_static/sixensed_s.lib b/SixenseSDK/lib/win32/debug_static/sixensed_s.lib
new file mode 100755
index 0000000..d463580
--- /dev/null
+++ b/SixenseSDK/lib/win32/debug_static/sixensed_s.lib
Binary files differ
diff --git a/SixenseSDK/lib/win32/release_dll/sixense.lib b/SixenseSDK/lib/win32/release_dll/sixense.lib
new file mode 100755
index 0000000..96ac37f
--- /dev/null
+++ b/SixenseSDK/lib/win32/release_dll/sixense.lib
Binary files differ
diff --git a/SixenseSDK/lib/win32/release_dll/sixense_utils.lib b/SixenseSDK/lib/win32/release_dll/sixense_utils.lib
new file mode 100755
index 0000000..1265a25
--- /dev/null
+++ b/SixenseSDK/lib/win32/release_dll/sixense_utils.lib
Binary files differ
diff --git a/SixenseSDK/lib/win32/release_static/sixense_s.lib b/SixenseSDK/lib/win32/release_static/sixense_s.lib
new file mode 100755
index 0000000..96b22a7
--- /dev/null
+++ b/SixenseSDK/lib/win32/release_static/sixense_s.lib
Binary files differ
diff --git a/SixenseSDK/lib/win32/release_static/sixense_utils_s.lib b/SixenseSDK/lib/win32/release_static/sixense_utils_s.lib
new file mode 100755
index 0000000..168fa5e
--- /dev/null
+++ b/SixenseSDK/lib/win32/release_static/sixense_utils_s.lib
Binary files differ
diff --git a/SixenseSDK/lib/x64/debug_dll/sixense_utilsd_x64.lib b/SixenseSDK/lib/x64/debug_dll/sixense_utilsd_x64.lib
new file mode 100755
index 0000000..b4859ae
--- /dev/null
+++ b/SixenseSDK/lib/x64/debug_dll/sixense_utilsd_x64.lib
Binary files differ
diff --git a/SixenseSDK/lib/x64/debug_dll/sixensed_x64.lib b/SixenseSDK/lib/x64/debug_dll/sixensed_x64.lib
new file mode 100755
index 0000000..0845976
--- /dev/null
+++ b/SixenseSDK/lib/x64/debug_dll/sixensed_x64.lib
Binary files differ
diff --git a/SixenseSDK/lib/x64/debug_static/sixense_utilsd_s_x64.lib b/SixenseSDK/lib/x64/debug_static/sixense_utilsd_s_x64.lib
new file mode 100755
index 0000000..81d2b4e
--- /dev/null
+++ b/SixenseSDK/lib/x64/debug_static/sixense_utilsd_s_x64.lib
Binary files differ
diff --git a/SixenseSDK/lib/x64/debug_static/sixensed_s_x64.lib b/SixenseSDK/lib/x64/debug_static/sixensed_s_x64.lib
new file mode 100755
index 0000000..5ef7a3f
--- /dev/null
+++ b/SixenseSDK/lib/x64/debug_static/sixensed_s_x64.lib
Binary files differ
diff --git a/SixenseSDK/lib/x64/release_dll/sixense_utils_x64.lib b/SixenseSDK/lib/x64/release_dll/sixense_utils_x64.lib
new file mode 100755
index 0000000..7211555
--- /dev/null
+++ b/SixenseSDK/lib/x64/release_dll/sixense_utils_x64.lib
Binary files differ
diff --git a/SixenseSDK/lib/x64/release_dll/sixense_x64.lib b/SixenseSDK/lib/x64/release_dll/sixense_x64.lib
new file mode 100755
index 0000000..bdf00ea
--- /dev/null
+++ b/SixenseSDK/lib/x64/release_dll/sixense_x64.lib
Binary files differ
diff --git a/SixenseSDK/lib/x64/release_static/sixense_s_x64.lib b/SixenseSDK/lib/x64/release_static/sixense_s_x64.lib
new file mode 100755
index 0000000..a85f6de
--- /dev/null
+++ b/SixenseSDK/lib/x64/release_static/sixense_s_x64.lib
Binary files differ
diff --git a/SixenseSDK/lib/x64/release_static/sixense_utils_s_x64.lib b/SixenseSDK/lib/x64/release_static/sixense_utils_s_x64.lib
new file mode 100755
index 0000000..d5c8707
--- /dev/null
+++ b/SixenseSDK/lib/x64/release_static/sixense_utils_s_x64.lib
Binary files differ
diff --git a/SixenseSDK/samples/linux/sixense_simple3d/libfreeglut.so b/SixenseSDK/samples/linux/sixense_simple3d/libfreeglut.so
new file mode 100755
index 0000000..1f5f59b
--- /dev/null
+++ b/SixenseSDK/samples/linux/sixense_simple3d/libfreeglut.so
Binary files differ
diff --git a/SixenseSDK/samples/linux/sixense_simple3d/libsixense.so b/SixenseSDK/samples/linux/sixense_simple3d/libsixense.so
new file mode 100755
index 0000000..d001e13
--- /dev/null
+++ b/SixenseSDK/samples/linux/sixense_simple3d/libsixense.so
Binary files differ
diff --git a/SixenseSDK/samples/linux/sixense_simple3d/libsixense_utils.so b/SixenseSDK/samples/linux/sixense_simple3d/libsixense_utils.so
new file mode 100755
index 0000000..621b04a
--- /dev/null
+++ b/SixenseSDK/samples/linux/sixense_simple3d/libsixense_utils.so
Binary files differ
diff --git a/SixenseSDK/samples/linux/sixense_simple3d/sixense_simple3d b/SixenseSDK/samples/linux/sixense_simple3d/sixense_simple3d
new file mode 100755
index 0000000..0b39f93
--- /dev/null
+++ b/SixenseSDK/samples/linux/sixense_simple3d/sixense_simple3d
Binary files differ
diff --git a/SixenseSDK/samples/linux_x64/sixense_simple3d/libfreeglut.so b/SixenseSDK/samples/linux_x64/sixense_simple3d/libfreeglut.so
new file mode 100755
index 0000000..ae593ea
--- /dev/null
+++ b/SixenseSDK/samples/linux_x64/sixense_simple3d/libfreeglut.so
Binary files differ
diff --git a/SixenseSDK/samples/linux_x64/sixense_simple3d/libsixense_utils_x64.so b/SixenseSDK/samples/linux_x64/sixense_simple3d/libsixense_utils_x64.so
new file mode 100755
index 0000000..85d69b5
--- /dev/null
+++ b/SixenseSDK/samples/linux_x64/sixense_simple3d/libsixense_utils_x64.so
Binary files differ
diff --git a/SixenseSDK/samples/linux_x64/sixense_simple3d/libsixense_x64.so b/SixenseSDK/samples/linux_x64/sixense_simple3d/libsixense_x64.so
new file mode 100755
index 0000000..edb57c7
--- /dev/null
+++ b/SixenseSDK/samples/linux_x64/sixense_simple3d/libsixense_x64.so
Binary files differ
diff --git a/SixenseSDK/samples/linux_x64/sixense_simple3d/sixense_simple3d b/SixenseSDK/samples/linux_x64/sixense_simple3d/sixense_simple3d
new file mode 100755
index 0000000..84f0fe8
--- /dev/null
+++ b/SixenseSDK/samples/linux_x64/sixense_simple3d/sixense_simple3d
Binary files differ
diff --git a/SixenseSDK/samples/osx/osx10.6/sixense_simple3d/libfreeglut.dylib b/SixenseSDK/samples/osx/osx10.6/sixense_simple3d/libfreeglut.dylib
new file mode 100755
index 0000000..8b8cd5f
--- /dev/null
+++ b/SixenseSDK/samples/osx/osx10.6/sixense_simple3d/libfreeglut.dylib
Binary files differ
diff --git a/SixenseSDK/samples/osx/osx10.6/sixense_simple3d/libsixense.dylib b/SixenseSDK/samples/osx/osx10.6/sixense_simple3d/libsixense.dylib
new file mode 100755
index 0000000..4a8c516
--- /dev/null
+++ b/SixenseSDK/samples/osx/osx10.6/sixense_simple3d/libsixense.dylib
Binary files differ
diff --git a/SixenseSDK/samples/osx/osx10.6/sixense_simple3d/libsixense_utils.dylib b/SixenseSDK/samples/osx/osx10.6/sixense_simple3d/libsixense_utils.dylib
new file mode 100755
index 0000000..ca67835
--- /dev/null
+++ b/SixenseSDK/samples/osx/osx10.6/sixense_simple3d/libsixense_utils.dylib
Binary files differ
diff --git a/SixenseSDK/samples/osx/osx10.6/sixense_simple3d/sixense_simple3d b/SixenseSDK/samples/osx/osx10.6/sixense_simple3d/sixense_simple3d
new file mode 100755
index 0000000..ba9b292
--- /dev/null
+++ b/SixenseSDK/samples/osx/osx10.6/sixense_simple3d/sixense_simple3d
Binary files differ
diff --git a/SixenseSDK/samples/osx/osx10.7/sixense_simple3d/libfreeglut.dylib b/SixenseSDK/samples/osx/osx10.7/sixense_simple3d/libfreeglut.dylib
new file mode 100755
index 0000000..e2a175d
--- /dev/null
+++ b/SixenseSDK/samples/osx/osx10.7/sixense_simple3d/libfreeglut.dylib
Binary files differ
diff --git a/SixenseSDK/samples/osx/osx10.7/sixense_simple3d/libsixense.dylib b/SixenseSDK/samples/osx/osx10.7/sixense_simple3d/libsixense.dylib
new file mode 100755
index 0000000..4a8c516
--- /dev/null
+++ b/SixenseSDK/samples/osx/osx10.7/sixense_simple3d/libsixense.dylib
Binary files differ
diff --git a/SixenseSDK/samples/osx/osx10.7/sixense_simple3d/libsixense_utils.dylib b/SixenseSDK/samples/osx/osx10.7/sixense_simple3d/libsixense_utils.dylib
new file mode 100755
index 0000000..ca67835
--- /dev/null
+++ b/SixenseSDK/samples/osx/osx10.7/sixense_simple3d/libsixense_utils.dylib
Binary files differ
diff --git a/SixenseSDK/samples/osx/osx10.7/sixense_simple3d/sixense_simple3d b/SixenseSDK/samples/osx/osx10.7/sixense_simple3d/sixense_simple3d
new file mode 100755
index 0000000..093599d
--- /dev/null
+++ b/SixenseSDK/samples/osx/osx10.7/sixense_simple3d/sixense_simple3d
Binary files differ
diff --git a/SixenseSDK/samples/osx_x64/osx10.6_x64/sixense_simple3d/libfreeglut.dylib b/SixenseSDK/samples/osx_x64/osx10.6_x64/sixense_simple3d/libfreeglut.dylib
new file mode 100755
index 0000000..e9a340d
--- /dev/null
+++ b/SixenseSDK/samples/osx_x64/osx10.6_x64/sixense_simple3d/libfreeglut.dylib
Binary files differ
diff --git a/SixenseSDK/samples/osx_x64/osx10.6_x64/sixense_simple3d/libsixense_utils_x64.dylib b/SixenseSDK/samples/osx_x64/osx10.6_x64/sixense_simple3d/libsixense_utils_x64.dylib
new file mode 100755
index 0000000..1931438
--- /dev/null
+++ b/SixenseSDK/samples/osx_x64/osx10.6_x64/sixense_simple3d/libsixense_utils_x64.dylib
Binary files differ
diff --git a/SixenseSDK/samples/osx_x64/osx10.6_x64/sixense_simple3d/libsixense_x64.dylib b/SixenseSDK/samples/osx_x64/osx10.6_x64/sixense_simple3d/libsixense_x64.dylib
new file mode 100755
index 0000000..08f7b36
--- /dev/null
+++ b/SixenseSDK/samples/osx_x64/osx10.6_x64/sixense_simple3d/libsixense_x64.dylib
Binary files differ
diff --git a/SixenseSDK/samples/osx_x64/osx10.6_x64/sixense_simple3d/sixense_simple3d b/SixenseSDK/samples/osx_x64/osx10.6_x64/sixense_simple3d/sixense_simple3d
new file mode 100755
index 0000000..f237ff0
--- /dev/null
+++ b/SixenseSDK/samples/osx_x64/osx10.6_x64/sixense_simple3d/sixense_simple3d
Binary files differ
diff --git a/SixenseSDK/samples/osx_x64/osx10.7_x64/sixense_simple3d/libfreeglut.dylib b/SixenseSDK/samples/osx_x64/osx10.7_x64/sixense_simple3d/libfreeglut.dylib
new file mode 100755
index 0000000..18257ef
--- /dev/null
+++ b/SixenseSDK/samples/osx_x64/osx10.7_x64/sixense_simple3d/libfreeglut.dylib
Binary files differ
diff --git a/SixenseSDK/samples/osx_x64/osx10.7_x64/sixense_simple3d/libsixense_utils_x64.dylib b/SixenseSDK/samples/osx_x64/osx10.7_x64/sixense_simple3d/libsixense_utils_x64.dylib
new file mode 100755
index 0000000..1931438
--- /dev/null
+++ b/SixenseSDK/samples/osx_x64/osx10.7_x64/sixense_simple3d/libsixense_utils_x64.dylib
Binary files differ
diff --git a/SixenseSDK/samples/osx_x64/osx10.7_x64/sixense_simple3d/libsixense_x64.dylib b/SixenseSDK/samples/osx_x64/osx10.7_x64/sixense_simple3d/libsixense_x64.dylib
new file mode 100755
index 0000000..08f7b36
--- /dev/null
+++ b/SixenseSDK/samples/osx_x64/osx10.7_x64/sixense_simple3d/libsixense_x64.dylib
Binary files differ
diff --git a/SixenseSDK/samples/osx_x64/osx10.7_x64/sixense_simple3d/sixense_simple3d b/SixenseSDK/samples/osx_x64/osx10.7_x64/sixense_simple3d/sixense_simple3d
new file mode 100755
index 0000000..9bb02db
--- /dev/null
+++ b/SixenseSDK/samples/osx_x64/osx10.7_x64/sixense_simple3d/sixense_simple3d
Binary files differ
diff --git a/SixenseSDK/samples/win32/sixense_simple3d/DeviceDLL.dll b/SixenseSDK/samples/win32/sixense_simple3d/DeviceDLL.dll
new file mode 100755
index 0000000..6cf6a26
--- /dev/null
+++ b/SixenseSDK/samples/win32/sixense_simple3d/DeviceDLL.dll
Binary files differ
diff --git a/SixenseSDK/samples/win32/sixense_simple3d/freeglut.dll b/SixenseSDK/samples/win32/sixense_simple3d/freeglut.dll
new file mode 100755
index 0000000..8d116ff
--- /dev/null
+++ b/SixenseSDK/samples/win32/sixense_simple3d/freeglut.dll
Binary files differ
diff --git a/SixenseSDK/samples/win32/sixense_simple3d/hemi_track_log.txt b/SixenseSDK/samples/win32/sixense_simple3d/hemi_track_log.txt
new file mode 100755
index 0000000..e69de29
--- /dev/null
+++ b/SixenseSDK/samples/win32/sixense_simple3d/hemi_track_log.txt
diff --git a/SixenseSDK/samples/win32/sixense_simple3d/msvcp100.dll b/SixenseSDK/samples/win32/sixense_simple3d/msvcp100.dll
new file mode 100755
index 0000000..0285593
--- /dev/null
+++ b/SixenseSDK/samples/win32/sixense_simple3d/msvcp100.dll
Binary files differ
diff --git a/SixenseSDK/samples/win32/sixense_simple3d/msvcr100.dll b/SixenseSDK/samples/win32/sixense_simple3d/msvcr100.dll
new file mode 100755
index 0000000..6d6af7e
--- /dev/null
+++ b/SixenseSDK/samples/win32/sixense_simple3d/msvcr100.dll
Binary files differ
diff --git a/SixenseSDK/samples/win32/sixense_simple3d/sixense.dll b/SixenseSDK/samples/win32/sixense_simple3d/sixense.dll
new file mode 100755
index 0000000..5fadb28
--- /dev/null
+++ b/SixenseSDK/samples/win32/sixense_simple3d/sixense.dll
Binary files differ
diff --git a/SixenseSDK/samples/win32/sixense_simple3d/sixense_simple3d.exe b/SixenseSDK/samples/win32/sixense_simple3d/sixense_simple3d.exe
new file mode 100755
index 0000000..2ac0d12
--- /dev/null
+++ b/SixenseSDK/samples/win32/sixense_simple3d/sixense_simple3d.exe
Binary files differ
diff --git a/SixenseSDK/samples/win32/sixense_simple3d/sixense_utils.dll b/SixenseSDK/samples/win32/sixense_simple3d/sixense_utils.dll
new file mode 100755
index 0000000..e694df0
--- /dev/null
+++ b/SixenseSDK/samples/win32/sixense_simple3d/sixense_utils.dll
Binary files differ
diff --git a/SixenseSDK/samples/x64/sixense_simple3d/DeviceDLL.dll b/SixenseSDK/samples/x64/sixense_simple3d/DeviceDLL.dll
new file mode 100755
index 0000000..6cf6a26
--- /dev/null
+++ b/SixenseSDK/samples/x64/sixense_simple3d/DeviceDLL.dll
Binary files differ
diff --git a/SixenseSDK/samples/x64/sixense_simple3d/freeglut.dll b/SixenseSDK/samples/x64/sixense_simple3d/freeglut.dll
new file mode 100755
index 0000000..c5c4aed
--- /dev/null
+++ b/SixenseSDK/samples/x64/sixense_simple3d/freeglut.dll
Binary files differ
diff --git a/SixenseSDK/samples/x64/sixense_simple3d/hemi_track_log.txt b/SixenseSDK/samples/x64/sixense_simple3d/hemi_track_log.txt
new file mode 100755
index 0000000..e69de29
--- /dev/null
+++ b/SixenseSDK/samples/x64/sixense_simple3d/hemi_track_log.txt
diff --git a/SixenseSDK/samples/x64/sixense_simple3d/msvcp100.dll b/SixenseSDK/samples/x64/sixense_simple3d/msvcp100.dll
new file mode 100755
index 0000000..0285593
--- /dev/null
+++ b/SixenseSDK/samples/x64/sixense_simple3d/msvcp100.dll
Binary files differ
diff --git a/SixenseSDK/samples/x64/sixense_simple3d/msvcr100.dll b/SixenseSDK/samples/x64/sixense_simple3d/msvcr100.dll
new file mode 100755
index 0000000..6d6af7e
--- /dev/null
+++ b/SixenseSDK/samples/x64/sixense_simple3d/msvcr100.dll
Binary files differ
diff --git a/SixenseSDK/samples/x64/sixense_simple3d/sixense_simple3d_x64.exe b/SixenseSDK/samples/x64/sixense_simple3d/sixense_simple3d_x64.exe
new file mode 100755
index 0000000..6851964
--- /dev/null
+++ b/SixenseSDK/samples/x64/sixense_simple3d/sixense_simple3d_x64.exe
Binary files differ
diff --git a/SixenseSDK/samples/x64/sixense_simple3d/sixense_utils_x64.dll b/SixenseSDK/samples/x64/sixense_simple3d/sixense_utils_x64.dll
new file mode 100755
index 0000000..9cbeb92
--- /dev/null
+++ b/SixenseSDK/samples/x64/sixense_simple3d/sixense_utils_x64.dll
Binary files differ
diff --git a/SixenseSDK/samples/x64/sixense_simple3d/sixense_x64.dll b/SixenseSDK/samples/x64/sixense_simple3d/sixense_x64.dll
new file mode 100755
index 0000000..6320f29
--- /dev/null
+++ b/SixenseSDK/samples/x64/sixense_simple3d/sixense_x64.dll
Binary files differ
diff --git a/SixenseSDK/src/sixense_simple3d/Eclipse/freeglut/.cproject b/SixenseSDK/src/sixense_simple3d/Eclipse/freeglut/.cproject
new file mode 100755
index 0000000..115a300
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/Eclipse/freeglut/.cproject
@@ -0,0 +1,643 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?fileVersion 4.0.0?>
+
+<cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
+ <storageModule moduleId="org.eclipse.cdt.core.settings">
+ <cconfiguration id="cdt.managedbuild.config.gnu.exe.release.803809622">
+ <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.exe.release.803809622" moduleId="org.eclipse.cdt.core.settings" name="Release_x32">
+ <externalSettings>
+ <externalSetting>
+ <entry flags="VALUE_WORKSPACE_PATH" kind="includePath" name="/freeglut"/>
+ <entry flags="VALUE_WORKSPACE_PATH" kind="libraryPath" name="/freeglut/Release_x32"/>
+ <entry flags="RESOLVED" kind="libraryFile" name="freeglut"/>
+ </externalSetting>
+ </externalSettings>
+ <extensions>
+ <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+ <extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ </extensions>
+ </storageModule>
+ <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+ <configuration artifactExtension="so" artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.sharedLib" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release,org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.sharedLib" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.exe.release.803809622" name="Release_x32" parent="cdt.managedbuild.config.gnu.exe.release">
+ <folderInfo id="cdt.managedbuild.config.gnu.exe.release.803809622." name="/" resourcePath="">
+ <toolChain id="cdt.managedbuild.toolchain.gnu.exe.release.885851169" name="Linux GCC" superClass="cdt.managedbuild.toolchain.gnu.exe.release">
+ <targetPlatform id="cdt.managedbuild.target.gnu.platform.exe.release.100839205" name="Debug Platform" superClass="cdt.managedbuild.target.gnu.platform.exe.release"/>
+ <builder buildPath="${workspace_loc:/freeglut/Release}" id="cdt.managedbuild.target.gnu.builder.exe.release.855694020" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" superClass="cdt.managedbuild.target.gnu.builder.exe.release"/>
+ <tool id="cdt.managedbuild.tool.gnu.archiver.base.198712687" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.base"/>
+ <tool id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.release.779766240" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.release">
+ <option id="gnu.cpp.compiler.exe.release.option.optimization.level.1444253424" name="Optimization Level" superClass="gnu.cpp.compiler.exe.release.option.optimization.level" value="gnu.cpp.compiler.optimization.level.most" valueType="enumerated"/>
+ <option id="gnu.cpp.compiler.exe.release.option.debugging.level.1584427887" name="Debug Level" superClass="gnu.cpp.compiler.exe.release.option.debugging.level" value="gnu.cpp.compiler.debugging.level.none" valueType="enumerated"/>
+ <inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.2073365958" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+ </tool>
+ <tool id="cdt.managedbuild.tool.gnu.c.compiler.exe.release.536744807" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.exe.release">
+ <option defaultValue="gnu.c.optimization.level.most" id="gnu.c.compiler.exe.release.option.optimization.level.75086742" name="Optimization Level" superClass="gnu.c.compiler.exe.release.option.optimization.level" valueType="enumerated"/>
+ <option id="gnu.c.compiler.exe.release.option.debugging.level.1438536957" name="Debug Level" superClass="gnu.c.compiler.exe.release.option.debugging.level" value="gnu.c.debugging.level.none" valueType="enumerated"/>
+ <option id="gnu.c.compiler.option.preprocessor.def.symbols.1225191550" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols" valueType="definedSymbols">
+ <listOptionValue builtIn="false" value="FREEGLUT_EXPORTS"/>
+ <listOptionValue builtIn="false" value="HAVE_DLFCN_H"/>
+ <listOptionValue builtIn="false" value="HAVE_FCNTL_H"/>
+ </option>
+ <option id="gnu.c.compiler.option.include.paths.1327554627" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
+ <listOptionValue builtIn="false" value="/usr/include/"/>
+ <listOptionValue builtIn="false" value="../../../../../src/sixense_simple3d/include"/>
+ </option>
+ <option id="gnu.c.compiler.option.misc.other.1506625876" name="Other flags" superClass="gnu.c.compiler.option.misc.other" value="-c -fmessage-length=0 -m32 -fPIC" valueType="string"/>
+ <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.1996863563" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
+ </tool>
+ <tool id="cdt.managedbuild.tool.gnu.c.linker.exe.release.1519237113" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.exe.release">
+ <option defaultValue="true" id="gnu.c.link.option.shared.795365403" name="Shared (-shared)" superClass="gnu.c.link.option.shared" valueType="boolean"/>
+ </tool>
+ <tool id="cdt.managedbuild.tool.gnu.cpp.linker.exe.release.2068495927" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.exe.release">
+ <option defaultValue="true" id="gnu.cpp.link.option.shared.833989792" name="Shared (-shared)" superClass="gnu.cpp.link.option.shared" valueType="boolean"/>
+ <inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.1714111077" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
+ <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
+ <additionalInput kind="additionalinput" paths="$(LIBS)"/>
+ </inputType>
+ </tool>
+ <tool id="cdt.managedbuild.tool.gnu.assembler.exe.release.16169876" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.exe.release">
+ <inputType id="cdt.managedbuild.tool.gnu.assembler.input.1878102450" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
+ </tool>
+ </toolChain>
+ </folderInfo>
+ </configuration>
+ </storageModule>
+ <storageModule moduleId="scannerConfiguration">
+ <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
+ <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="makefileGenerator">
+ <runAction arguments="-E -P -v -dD" command="" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/${specs_file}&quot;'" command="sh" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-c 'g++ -E -P -v -dD &quot;${plugin_state_location}/specs.cpp&quot;'" command="sh" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/specs.c&quot;'" command="sh" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.release.803809622;cdt.managedbuild.config.gnu.exe.release.803809622.;cdt.managedbuild.tool.gnu.c.compiler.exe.release.536744807;cdt.managedbuild.tool.gnu.c.compiler.input.1996863563">
+ <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/>
+ <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="makefileGenerator">
+ <runAction arguments="-E -P -v -dD" command="" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/${specs_file}&quot;'" command="sh" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-c 'g++ -E -P -v -dD &quot;${plugin_state_location}/specs.cpp&quot;'" command="sh" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/specs.c&quot;'" command="sh" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ </scannerConfigBuildInfo>
+ <scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.release.803809622;cdt.managedbuild.config.gnu.exe.release.803809622.;cdt.managedbuild.tool.gnu.cpp.compiler.exe.release.779766240;cdt.managedbuild.tool.gnu.cpp.compiler.input.2073365958">
+ <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP"/>
+ <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="makefileGenerator">
+ <runAction arguments="-E -P -v -dD" command="" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/${specs_file}&quot;'" command="sh" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-c 'g++ -E -P -v -dD &quot;${plugin_state_location}/specs.cpp&quot;'" command="sh" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/specs.c&quot;'" command="sh" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ </scannerConfigBuildInfo>
+ </storageModule>
+ <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+ <storageModule moduleId="org.eclipse.cdt.core.language.mapping"/>
+ <storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
+ </cconfiguration>
+ <cconfiguration id="cdt.managedbuild.config.gnu.exe.release.1184738843">
+ <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.exe.release.1184738843" moduleId="org.eclipse.cdt.core.settings" name="Release_x64">
+ <externalSettings>
+ <externalSetting>
+ <entry flags="VALUE_WORKSPACE_PATH" kind="includePath" name="/freeglut"/>
+ <entry flags="VALUE_WORKSPACE_PATH" kind="libraryPath" name="/freeglut/x64 Release"/>
+ <entry flags="VALUE_WORKSPACE_PATH" kind="libraryPath" name="/freeglut/Release_x64"/>
+ <entry flags="RESOLVED" kind="libraryFile" name="freeglut"/>
+ </externalSetting>
+ </externalSettings>
+ <extensions>
+ <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+ <extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ </extensions>
+ </storageModule>
+ <storageModule moduleId="scannerConfiguration">
+ <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
+ <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="makefileGenerator">
+ <runAction arguments="-E -P -v -dD" command="" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/${specs_file}&quot;'" command="sh" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-c 'g++ -E -P -v -dD &quot;${plugin_state_location}/specs.cpp&quot;'" command="sh" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/specs.c&quot;'" command="sh" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.release.803809622;cdt.managedbuild.config.gnu.exe.release.803809622.;cdt.managedbuild.tool.gnu.c.compiler.exe.release.536744807;cdt.managedbuild.tool.gnu.c.compiler.input.1996863563">
+ <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/>
+ <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="makefileGenerator">
+ <runAction arguments="-E -P -v -dD" command="" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/${specs_file}&quot;'" command="sh" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-c 'g++ -E -P -v -dD &quot;${plugin_state_location}/specs.cpp&quot;'" command="sh" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/specs.c&quot;'" command="sh" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ </scannerConfigBuildInfo>
+ <scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.release.803809622;cdt.managedbuild.config.gnu.exe.release.803809622.;cdt.managedbuild.tool.gnu.cpp.compiler.exe.release.779766240;cdt.managedbuild.tool.gnu.cpp.compiler.input.2073365958">
+ <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP"/>
+ <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="makefileGenerator">
+ <runAction arguments="-E -P -v -dD" command="" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/${specs_file}&quot;'" command="sh" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-c 'g++ -E -P -v -dD &quot;${plugin_state_location}/specs.cpp&quot;'" command="sh" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/specs.c&quot;'" command="sh" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ </scannerConfigBuildInfo>
+ </storageModule>
+ <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+ <configuration artifactExtension="so" artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.sharedLib" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release,org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.sharedLib" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.exe.release.1184738843" name="Release_x64" parent="cdt.managedbuild.config.gnu.exe.release">
+ <folderInfo id="cdt.managedbuild.config.gnu.exe.release.1184738843." name="/" resourcePath="">
+ <toolChain id="cdt.managedbuild.toolchain.gnu.exe.release.1619388625" name="Linux GCC" superClass="cdt.managedbuild.toolchain.gnu.exe.release">
+ <targetPlatform id="cdt.managedbuild.target.gnu.platform.exe.release.648145652" name="Debug Platform" superClass="cdt.managedbuild.target.gnu.platform.exe.release"/>
+ <builder buildPath="${workspace_loc:/freeglut/x64 Release}" id="cdt.managedbuild.target.gnu.builder.exe.release.1391098744" keepEnvironmentInBuildfile="false" name="Gnu Make Builder" superClass="cdt.managedbuild.target.gnu.builder.exe.release"/>
+ <tool id="cdt.managedbuild.tool.gnu.archiver.base.1877855944" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.base"/>
+ <tool id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.release.1614860415" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.release">
+ <option id="gnu.cpp.compiler.exe.release.option.optimization.level.1225226427" name="Optimization Level" superClass="gnu.cpp.compiler.exe.release.option.optimization.level" value="gnu.cpp.compiler.optimization.level.most" valueType="enumerated"/>
+ <option id="gnu.cpp.compiler.exe.release.option.debugging.level.27521851" name="Debug Level" superClass="gnu.cpp.compiler.exe.release.option.debugging.level" value="gnu.cpp.compiler.debugging.level.none" valueType="enumerated"/>
+ <option id="gnu.cpp.compiler.option.include.paths.588824205" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths"/>
+ <option id="gnu.cpp.compiler.option.preprocessor.def.432023381" name="Defined symbols (-D)" superClass="gnu.cpp.compiler.option.preprocessor.def"/>
+ <inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.1151846193" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+ </tool>
+ <tool id="cdt.managedbuild.tool.gnu.c.compiler.exe.release.1375449064" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.exe.release">
+ <option defaultValue="gnu.c.optimization.level.most" id="gnu.c.compiler.exe.release.option.optimization.level.1716121206" name="Optimization Level" superClass="gnu.c.compiler.exe.release.option.optimization.level" valueType="enumerated"/>
+ <option id="gnu.c.compiler.exe.release.option.debugging.level.1678948637" name="Debug Level" superClass="gnu.c.compiler.exe.release.option.debugging.level" value="gnu.c.debugging.level.none" valueType="enumerated"/>
+ <option id="gnu.c.compiler.option.include.paths.1002753691" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
+ <listOptionValue builtIn="false" value="/usr/include/"/>
+ <listOptionValue builtIn="false" value="../../../../../src/sixense_simple3d/include"/>
+ </option>
+ <option id="gnu.c.compiler.option.preprocessor.def.symbols.1662131124" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols" valueType="definedSymbols">
+ <listOptionValue builtIn="false" value="FREEGLUT_EXPORTS"/>
+ <listOptionValue builtIn="false" value="HAVE_DLFCN_H"/>
+ <listOptionValue builtIn="false" value="HAVE_FCNTL_H"/>
+ </option>
+ <option id="gnu.c.compiler.option.misc.other.997024119" name="Other flags" superClass="gnu.c.compiler.option.misc.other" value="-c -fmessage-length=0 -m64 -fPIC" valueType="string"/>
+ <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.1677947737" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
+ </tool>
+ <tool id="cdt.managedbuild.tool.gnu.c.linker.exe.release.729412717" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.exe.release">
+ <option defaultValue="true" id="gnu.c.link.option.shared.1350045389" name="Shared (-shared)" superClass="gnu.c.link.option.shared" valueType="boolean"/>
+ </tool>
+ <tool id="cdt.managedbuild.tool.gnu.cpp.linker.exe.release.481034426" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.exe.release">
+ <option defaultValue="true" id="gnu.cpp.link.option.shared.245701051" name="Shared (-shared)" superClass="gnu.cpp.link.option.shared" valueType="boolean"/>
+ <inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.386944869" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
+ <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
+ <additionalInput kind="additionalinput" paths="$(LIBS)"/>
+ </inputType>
+ </tool>
+ <tool id="cdt.managedbuild.tool.gnu.assembler.exe.release.1970433427" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.exe.release">
+ <inputType id="cdt.managedbuild.tool.gnu.assembler.input.710344567" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
+ </tool>
+ </toolChain>
+ </folderInfo>
+ </configuration>
+ </storageModule>
+ <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+ <storageModule moduleId="org.eclipse.cdt.core.language.mapping"/>
+ <storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
+ </cconfiguration>
+ </storageModule>
+ <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+ <project id="freeglut.cdt.managedbuild.target.gnu.exe.1557087906" name="Executable" projectType="cdt.managedbuild.target.gnu.exe"/>
+ </storageModule>
+</cproject>
diff --git a/SixenseSDK/src/sixense_simple3d/Eclipse/freeglut/.project b/SixenseSDK/src/sixense_simple3d/Eclipse/freeglut/.project
new file mode 100755
index 0000000..b375703
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/Eclipse/freeglut/.project
@@ -0,0 +1,230 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>freeglut</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
+ <triggers>clean,full,incremental,</triggers>
+ <arguments>
+ <dictionary>
+ <key>?name?</key>
+ <value></value>
+ </dictionary>
+ <dictionary>
+ <key>org.eclipse.cdt.make.core.append_environment</key>
+ <value>true</value>
+ </dictionary>
+ <dictionary>
+ <key>org.eclipse.cdt.make.core.autoBuildTarget</key>
+ <value>all</value>
+ </dictionary>
+ <dictionary>
+ <key>org.eclipse.cdt.make.core.buildArguments</key>
+ <value></value>
+ </dictionary>
+ <dictionary>
+ <key>org.eclipse.cdt.make.core.buildCommand</key>
+ <value>make</value>
+ </dictionary>
+ <dictionary>
+ <key>org.eclipse.cdt.make.core.buildLocation</key>
+ <value>${workspace_loc:/freeglut/Release}</value>
+ </dictionary>
+ <dictionary>
+ <key>org.eclipse.cdt.make.core.cleanBuildTarget</key>
+ <value>clean</value>
+ </dictionary>
+ <dictionary>
+ <key>org.eclipse.cdt.make.core.contents</key>
+ <value>org.eclipse.cdt.make.core.activeConfigSettings</value>
+ </dictionary>
+ <dictionary>
+ <key>org.eclipse.cdt.make.core.enableAutoBuild</key>
+ <value>false</value>
+ </dictionary>
+ <dictionary>
+ <key>org.eclipse.cdt.make.core.enableCleanBuild</key>
+ <value>true</value>
+ </dictionary>
+ <dictionary>
+ <key>org.eclipse.cdt.make.core.enableFullBuild</key>
+ <value>true</value>
+ </dictionary>
+ <dictionary>
+ <key>org.eclipse.cdt.make.core.fullBuildTarget</key>
+ <value>all</value>
+ </dictionary>
+ <dictionary>
+ <key>org.eclipse.cdt.make.core.stopOnError</key>
+ <value>true</value>
+ </dictionary>
+ <dictionary>
+ <key>org.eclipse.cdt.make.core.useDefaultBuildCmd</key>
+ <value>true</value>
+ </dictionary>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
+ <triggers>full,incremental,</triggers>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.cdt.core.cnature</nature>
+ <nature>org.eclipse.cdt.core.ccnature</nature>
+ <nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
+ <nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
+ </natures>
+ <linkedResources>
+ <link>
+ <name>freeglut_callbacks.c</name>
+ <type>1</type>
+ <locationURI>PARENT-2-PROJECT_LOC/src/freeglut_callbacks.c</locationURI>
+ </link>
+ <link>
+ <name>freeglut_cursor.c</name>
+ <type>1</type>
+ <locationURI>PARENT-2-PROJECT_LOC/src/freeglut_cursor.c</locationURI>
+ </link>
+ <link>
+ <name>freeglut_display.c</name>
+ <type>1</type>
+ <locationURI>PARENT-2-PROJECT_LOC/src/freeglut_display.c</locationURI>
+ </link>
+ <link>
+ <name>freeglut_ext.c</name>
+ <type>1</type>
+ <locationURI>PARENT-2-PROJECT_LOC/src/freeglut_ext.c</locationURI>
+ </link>
+ <link>
+ <name>freeglut_font.c</name>
+ <type>1</type>
+ <locationURI>PARENT-2-PROJECT_LOC/src/freeglut_font.c</locationURI>
+ </link>
+ <link>
+ <name>freeglut_font_data.c</name>
+ <type>1</type>
+ <locationURI>PARENT-2-PROJECT_LOC/src/freeglut_font_data.c</locationURI>
+ </link>
+ <link>
+ <name>freeglut_gamemode.c</name>
+ <type>1</type>
+ <locationURI>PARENT-2-PROJECT_LOC/src/freeglut_gamemode.c</locationURI>
+ </link>
+ <link>
+ <name>freeglut_geometry.c</name>
+ <type>1</type>
+ <locationURI>PARENT-2-PROJECT_LOC/src/freeglut_geometry.c</locationURI>
+ </link>
+ <link>
+ <name>freeglut_glutfont_definitions.c</name>
+ <type>1</type>
+ <locationURI>PARENT-2-PROJECT_LOC/src/freeglut_glutfont_definitions.c</locationURI>
+ </link>
+ <link>
+ <name>freeglut_init.c</name>
+ <type>1</type>
+ <locationURI>PARENT-2-PROJECT_LOC/src/freeglut_init.c</locationURI>
+ </link>
+ <link>
+ <name>freeglut_input_devices.c</name>
+ <type>1</type>
+ <locationURI>PARENT-2-PROJECT_LOC/src/freeglut_input_devices.c</locationURI>
+ </link>
+ <link>
+ <name>freeglut_internal.h</name>
+ <type>1</type>
+ <locationURI>PARENT-2-PROJECT_LOC/src/freeglut_internal.h</locationURI>
+ </link>
+ <link>
+ <name>freeglut_joystick.c</name>
+ <type>1</type>
+ <locationURI>PARENT-2-PROJECT_LOC/src/freeglut_joystick.c</locationURI>
+ </link>
+ <link>
+ <name>freeglut_main.c</name>
+ <type>1</type>
+ <locationURI>PARENT-2-PROJECT_LOC/src/freeglut_main.c</locationURI>
+ </link>
+ <link>
+ <name>freeglut_menu.c</name>
+ <type>1</type>
+ <locationURI>PARENT-2-PROJECT_LOC/src/freeglut_menu.c</locationURI>
+ </link>
+ <link>
+ <name>freeglut_misc.c</name>
+ <type>1</type>
+ <locationURI>PARENT-2-PROJECT_LOC/src/freeglut_misc.c</locationURI>
+ </link>
+ <link>
+ <name>freeglut_overlay.c</name>
+ <type>1</type>
+ <locationURI>PARENT-2-PROJECT_LOC/src/freeglut_overlay.c</locationURI>
+ </link>
+ <link>
+ <name>freeglut_spaceball.c</name>
+ <type>1</type>
+ <locationURI>PARENT-2-PROJECT_LOC/src/freeglut_spaceball.c</locationURI>
+ </link>
+ <link>
+ <name>freeglut_state.c</name>
+ <type>1</type>
+ <locationURI>PARENT-2-PROJECT_LOC/src/freeglut_state.c</locationURI>
+ </link>
+ <link>
+ <name>freeglut_stroke_mono_roman.c</name>
+ <type>1</type>
+ <locationURI>PARENT-2-PROJECT_LOC/src/freeglut_stroke_mono_roman.c</locationURI>
+ </link>
+ <link>
+ <name>freeglut_stroke_roman.c</name>
+ <type>1</type>
+ <locationURI>PARENT-2-PROJECT_LOC/src/freeglut_stroke_roman.c</locationURI>
+ </link>
+ <link>
+ <name>freeglut_structure.c</name>
+ <type>1</type>
+ <locationURI>PARENT-2-PROJECT_LOC/src/freeglut_structure.c</locationURI>
+ </link>
+ <link>
+ <name>freeglut_teapot.c</name>
+ <type>1</type>
+ <locationURI>PARENT-2-PROJECT_LOC/src/freeglut_teapot.c</locationURI>
+ </link>
+ <link>
+ <name>freeglut_teapot_data.h</name>
+ <type>1</type>
+ <locationURI>PARENT-2-PROJECT_LOC/src/freeglut_teapot_data.h</locationURI>
+ </link>
+ <link>
+ <name>freeglut_videoresize.c</name>
+ <type>1</type>
+ <locationURI>PARENT-2-PROJECT_LOC/src/freeglut_videoresize.c</locationURI>
+ </link>
+ <link>
+ <name>freeglut_window.c</name>
+ <type>1</type>
+ <locationURI>PARENT-2-PROJECT_LOC/src/freeglut_window.c</locationURI>
+ </link>
+ <link>
+ <name>templates</name>
+ <type>2</type>
+ <locationURI>virtual:/virtual</locationURI>
+ </link>
+ <link>
+ <name>templates/cpp_template</name>
+ <type>1</type>
+ <locationURI>PARENT-2-PROJECT_LOC/src/templates/cpp_template</locationURI>
+ </link>
+ <link>
+ <name>templates/header_template</name>
+ <type>1</type>
+ <locationURI>PARENT-2-PROJECT_LOC/src/templates/header_template</locationURI>
+ </link>
+ </linkedResources>
+</projectDescription>
diff --git a/SixenseSDK/src/sixense_simple3d/Eclipse/freeglut/Release_x32/makefile b/SixenseSDK/src/sixense_simple3d/Eclipse/freeglut/Release_x32/makefile
new file mode 100755
index 0000000..5c20fcf
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/Eclipse/freeglut/Release_x32/makefile
@@ -0,0 +1,58 @@
+################################################################################
+# Automatically-generated file. Do not edit!
+################################################################################
+
+-include ../makefile.init
+
+RM := rm -rf
+
+# All of the sources participating in the build are defined here
+-include sources.mk
+-include subdir.mk
+-include objects.mk
+
+ifneq ($(MAKECMDGOALS),clean)
+ifneq ($(strip $(C++_DEPS)),)
+-include $(C++_DEPS)
+endif
+ifneq ($(strip $(C_DEPS)),)
+-include $(C_DEPS)
+endif
+ifneq ($(strip $(CC_DEPS)),)
+-include $(CC_DEPS)
+endif
+ifneq ($(strip $(CPP_DEPS)),)
+-include $(CPP_DEPS)
+endif
+ifneq ($(strip $(CXX_DEPS)),)
+-include $(CXX_DEPS)
+endif
+ifneq ($(strip $(C_UPPER_DEPS)),)
+-include $(C_UPPER_DEPS)
+endif
+endif
+
+-include ../makefile.defs
+
+# Add inputs and outputs from these tool invocations to the build variables
+
+# All Target
+all: libfreeglut.so
+
+# Tool invocations
+libfreeglut.so: $(OBJS) $(USER_OBJS)
+ @echo 'Building target: $@'
+ @echo 'Invoking: GCC C++ Linker'
+ g++ -shared -o"libfreeglut.so" $(OBJS) $(USER_OBJS) $(LIBS)
+ @echo 'Finished building target: $@'
+ @echo ' '
+
+# Other Targets
+clean:
+ -$(RM) $(OBJS)$(C++_DEPS)$(C_DEPS)$(CC_DEPS)$(LIBRARIES)$(CPP_DEPS)$(CXX_DEPS)$(C_UPPER_DEPS) libfreeglut.so
+ -@echo ' '
+
+.PHONY: all clean dependents
+.SECONDARY:
+
+-include ../makefile.targets
diff --git a/SixenseSDK/src/sixense_simple3d/Eclipse/freeglut/Release_x32/objects.mk b/SixenseSDK/src/sixense_simple3d/Eclipse/freeglut/Release_x32/objects.mk
new file mode 100755
index 0000000..742c2da
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/Eclipse/freeglut/Release_x32/objects.mk
@@ -0,0 +1,8 @@
+################################################################################
+# Automatically-generated file. Do not edit!
+################################################################################
+
+USER_OBJS :=
+
+LIBS :=
+
diff --git a/SixenseSDK/src/sixense_simple3d/Eclipse/freeglut/Release_x32/sources.mk b/SixenseSDK/src/sixense_simple3d/Eclipse/freeglut/Release_x32/sources.mk
new file mode 100755
index 0000000..9058cd4
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/Eclipse/freeglut/Release_x32/sources.mk
@@ -0,0 +1,27 @@
+################################################################################
+# Automatically-generated file. Do not edit!
+################################################################################
+
+O_SRCS :=
+CPP_SRCS :=
+C_UPPER_SRCS :=
+C_SRCS :=
+S_UPPER_SRCS :=
+OBJ_SRCS :=
+ASM_SRCS :=
+CXX_SRCS :=
+C++_SRCS :=
+CC_SRCS :=
+OBJS :=
+C++_DEPS :=
+C_DEPS :=
+CC_DEPS :=
+LIBRARIES :=
+CPP_DEPS :=
+CXX_DEPS :=
+C_UPPER_DEPS :=
+
+# Every subdirectory with source files must be described here
+SUBDIRS := \
+. \
+
diff --git a/SixenseSDK/src/sixense_simple3d/Eclipse/freeglut/Release_x32/subdir.mk b/SixenseSDK/src/sixense_simple3d/Eclipse/freeglut/Release_x32/subdir.mk
new file mode 100755
index 0000000..7a1c3fa
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/Eclipse/freeglut/Release_x32/subdir.mk
@@ -0,0 +1,254 @@
+################################################################################
+# Automatically-generated file. Do not edit!
+################################################################################
+
+# Add inputs and outputs from these tool invocations to the build variables
+C_SRCS += \
+../../../src/freeglut_callbacks.c \
+../../../src/freeglut_cursor.c \
+../../../src/freeglut_display.c \
+../../../src/freeglut_ext.c \
+../../../src/freeglut_font.c \
+../../../src/freeglut_font_data.c \
+../../../src/freeglut_gamemode.c \
+../../../src/freeglut_geometry.c \
+../../../src/freeglut_glutfont_definitions.c \
+../../../src/freeglut_init.c \
+../../../src/freeglut_input_devices.c \
+../../../src/freeglut_joystick.c \
+../../../src/freeglut_main.c \
+../../../src/freeglut_menu.c \
+../../../src/freeglut_misc.c \
+../../../src/freeglut_overlay.c \
+../../../src/freeglut_spaceball.c \
+../../../src/freeglut_state.c \
+../../../src/freeglut_stroke_mono_roman.c \
+../../../src/freeglut_stroke_roman.c \
+../../../src/freeglut_structure.c \
+../../../src/freeglut_teapot.c \
+../../../src/freeglut_videoresize.c \
+../../../src/freeglut_window.c
+
+OBJS += \
+./freeglut_callbacks.o \
+./freeglut_cursor.o \
+./freeglut_display.o \
+./freeglut_ext.o \
+./freeglut_font.o \
+./freeglut_font_data.o \
+./freeglut_gamemode.o \
+./freeglut_geometry.o \
+./freeglut_glutfont_definitions.o \
+./freeglut_init.o \
+./freeglut_input_devices.o \
+./freeglut_joystick.o \
+./freeglut_main.o \
+./freeglut_menu.o \
+./freeglut_misc.o \
+./freeglut_overlay.o \
+./freeglut_spaceball.o \
+./freeglut_state.o \
+./freeglut_stroke_mono_roman.o \
+./freeglut_stroke_roman.o \
+./freeglut_structure.o \
+./freeglut_teapot.o \
+./freeglut_videoresize.o \
+./freeglut_window.o
+
+C_DEPS += \
+./freeglut_callbacks.d \
+./freeglut_cursor.d \
+./freeglut_display.d \
+./freeglut_ext.d \
+./freeglut_font.d \
+./freeglut_font_data.d \
+./freeglut_gamemode.d \
+./freeglut_geometry.d \
+./freeglut_glutfont_definitions.d \
+./freeglut_init.d \
+./freeglut_input_devices.d \
+./freeglut_joystick.d \
+./freeglut_main.d \
+./freeglut_menu.d \
+./freeglut_misc.d \
+./freeglut_overlay.d \
+./freeglut_spaceball.d \
+./freeglut_state.d \
+./freeglut_stroke_mono_roman.d \
+./freeglut_stroke_roman.d \
+./freeglut_structure.d \
+./freeglut_teapot.d \
+./freeglut_videoresize.d \
+./freeglut_window.d
+
+
+# Each subdirectory must supply rules for building sources it contributes
+freeglut_callbacks.o: ../../../src/freeglut_callbacks.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -DFREEGLUT_EXPORTS -DHAVE_DLFCN_H -DHAVE_FCNTL_H -I/usr/include/ -I../../../../../src/sixense_simple3d/include -O3 -Wall -c -fmessage-length=0 -m32 -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+freeglut_cursor.o: ../../../src/freeglut_cursor.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -DFREEGLUT_EXPORTS -DHAVE_DLFCN_H -DHAVE_FCNTL_H -I/usr/include/ -I../../../../../src/sixense_simple3d/include -O3 -Wall -c -fmessage-length=0 -m32 -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+freeglut_display.o: ../../../src/freeglut_display.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -DFREEGLUT_EXPORTS -DHAVE_DLFCN_H -DHAVE_FCNTL_H -I/usr/include/ -I../../../../../src/sixense_simple3d/include -O3 -Wall -c -fmessage-length=0 -m32 -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+freeglut_ext.o: ../../../src/freeglut_ext.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -DFREEGLUT_EXPORTS -DHAVE_DLFCN_H -DHAVE_FCNTL_H -I/usr/include/ -I../../../../../src/sixense_simple3d/include -O3 -Wall -c -fmessage-length=0 -m32 -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+freeglut_font.o: ../../../src/freeglut_font.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -DFREEGLUT_EXPORTS -DHAVE_DLFCN_H -DHAVE_FCNTL_H -I/usr/include/ -I../../../../../src/sixense_simple3d/include -O3 -Wall -c -fmessage-length=0 -m32 -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+freeglut_font_data.o: ../../../src/freeglut_font_data.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -DFREEGLUT_EXPORTS -DHAVE_DLFCN_H -DHAVE_FCNTL_H -I/usr/include/ -I../../../../../src/sixense_simple3d/include -O3 -Wall -c -fmessage-length=0 -m32 -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+freeglut_gamemode.o: ../../../src/freeglut_gamemode.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -DFREEGLUT_EXPORTS -DHAVE_DLFCN_H -DHAVE_FCNTL_H -I/usr/include/ -I../../../../../src/sixense_simple3d/include -O3 -Wall -c -fmessage-length=0 -m32 -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+freeglut_geometry.o: ../../../src/freeglut_geometry.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -DFREEGLUT_EXPORTS -DHAVE_DLFCN_H -DHAVE_FCNTL_H -I/usr/include/ -I../../../../../src/sixense_simple3d/include -O3 -Wall -c -fmessage-length=0 -m32 -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+freeglut_glutfont_definitions.o: ../../../src/freeglut_glutfont_definitions.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -DFREEGLUT_EXPORTS -DHAVE_DLFCN_H -DHAVE_FCNTL_H -I/usr/include/ -I../../../../../src/sixense_simple3d/include -O3 -Wall -c -fmessage-length=0 -m32 -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+freeglut_init.o: ../../../src/freeglut_init.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -DFREEGLUT_EXPORTS -DHAVE_DLFCN_H -DHAVE_FCNTL_H -I/usr/include/ -I../../../../../src/sixense_simple3d/include -O3 -Wall -c -fmessage-length=0 -m32 -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+freeglut_input_devices.o: ../../../src/freeglut_input_devices.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -DFREEGLUT_EXPORTS -DHAVE_DLFCN_H -DHAVE_FCNTL_H -I/usr/include/ -I../../../../../src/sixense_simple3d/include -O3 -Wall -c -fmessage-length=0 -m32 -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+freeglut_joystick.o: ../../../src/freeglut_joystick.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -DFREEGLUT_EXPORTS -DHAVE_DLFCN_H -DHAVE_FCNTL_H -I/usr/include/ -I../../../../../src/sixense_simple3d/include -O3 -Wall -c -fmessage-length=0 -m32 -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+freeglut_main.o: ../../../src/freeglut_main.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -DFREEGLUT_EXPORTS -DHAVE_DLFCN_H -DHAVE_FCNTL_H -I/usr/include/ -I../../../../../src/sixense_simple3d/include -O3 -Wall -c -fmessage-length=0 -m32 -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+freeglut_menu.o: ../../../src/freeglut_menu.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -DFREEGLUT_EXPORTS -DHAVE_DLFCN_H -DHAVE_FCNTL_H -I/usr/include/ -I../../../../../src/sixense_simple3d/include -O3 -Wall -c -fmessage-length=0 -m32 -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+freeglut_misc.o: ../../../src/freeglut_misc.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -DFREEGLUT_EXPORTS -DHAVE_DLFCN_H -DHAVE_FCNTL_H -I/usr/include/ -I../../../../../src/sixense_simple3d/include -O3 -Wall -c -fmessage-length=0 -m32 -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+freeglut_overlay.o: ../../../src/freeglut_overlay.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -DFREEGLUT_EXPORTS -DHAVE_DLFCN_H -DHAVE_FCNTL_H -I/usr/include/ -I../../../../../src/sixense_simple3d/include -O3 -Wall -c -fmessage-length=0 -m32 -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+freeglut_spaceball.o: ../../../src/freeglut_spaceball.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -DFREEGLUT_EXPORTS -DHAVE_DLFCN_H -DHAVE_FCNTL_H -I/usr/include/ -I../../../../../src/sixense_simple3d/include -O3 -Wall -c -fmessage-length=0 -m32 -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+freeglut_state.o: ../../../src/freeglut_state.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -DFREEGLUT_EXPORTS -DHAVE_DLFCN_H -DHAVE_FCNTL_H -I/usr/include/ -I../../../../../src/sixense_simple3d/include -O3 -Wall -c -fmessage-length=0 -m32 -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+freeglut_stroke_mono_roman.o: ../../../src/freeglut_stroke_mono_roman.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -DFREEGLUT_EXPORTS -DHAVE_DLFCN_H -DHAVE_FCNTL_H -I/usr/include/ -I../../../../../src/sixense_simple3d/include -O3 -Wall -c -fmessage-length=0 -m32 -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+freeglut_stroke_roman.o: ../../../src/freeglut_stroke_roman.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -DFREEGLUT_EXPORTS -DHAVE_DLFCN_H -DHAVE_FCNTL_H -I/usr/include/ -I../../../../../src/sixense_simple3d/include -O3 -Wall -c -fmessage-length=0 -m32 -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+freeglut_structure.o: ../../../src/freeglut_structure.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -DFREEGLUT_EXPORTS -DHAVE_DLFCN_H -DHAVE_FCNTL_H -I/usr/include/ -I../../../../../src/sixense_simple3d/include -O3 -Wall -c -fmessage-length=0 -m32 -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+freeglut_teapot.o: ../../../src/freeglut_teapot.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -DFREEGLUT_EXPORTS -DHAVE_DLFCN_H -DHAVE_FCNTL_H -I/usr/include/ -I../../../../../src/sixense_simple3d/include -O3 -Wall -c -fmessage-length=0 -m32 -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+freeglut_videoresize.o: ../../../src/freeglut_videoresize.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -DFREEGLUT_EXPORTS -DHAVE_DLFCN_H -DHAVE_FCNTL_H -I/usr/include/ -I../../../../../src/sixense_simple3d/include -O3 -Wall -c -fmessage-length=0 -m32 -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+freeglut_window.o: ../../../src/freeglut_window.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -DFREEGLUT_EXPORTS -DHAVE_DLFCN_H -DHAVE_FCNTL_H -I/usr/include/ -I../../../../../src/sixense_simple3d/include -O3 -Wall -c -fmessage-length=0 -m32 -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+
diff --git a/SixenseSDK/src/sixense_simple3d/Eclipse/freeglut/Release_x64/makefile b/SixenseSDK/src/sixense_simple3d/Eclipse/freeglut/Release_x64/makefile
new file mode 100755
index 0000000..5c20fcf
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/Eclipse/freeglut/Release_x64/makefile
@@ -0,0 +1,58 @@
+################################################################################
+# Automatically-generated file. Do not edit!
+################################################################################
+
+-include ../makefile.init
+
+RM := rm -rf
+
+# All of the sources participating in the build are defined here
+-include sources.mk
+-include subdir.mk
+-include objects.mk
+
+ifneq ($(MAKECMDGOALS),clean)
+ifneq ($(strip $(C++_DEPS)),)
+-include $(C++_DEPS)
+endif
+ifneq ($(strip $(C_DEPS)),)
+-include $(C_DEPS)
+endif
+ifneq ($(strip $(CC_DEPS)),)
+-include $(CC_DEPS)
+endif
+ifneq ($(strip $(CPP_DEPS)),)
+-include $(CPP_DEPS)
+endif
+ifneq ($(strip $(CXX_DEPS)),)
+-include $(CXX_DEPS)
+endif
+ifneq ($(strip $(C_UPPER_DEPS)),)
+-include $(C_UPPER_DEPS)
+endif
+endif
+
+-include ../makefile.defs
+
+# Add inputs and outputs from these tool invocations to the build variables
+
+# All Target
+all: libfreeglut.so
+
+# Tool invocations
+libfreeglut.so: $(OBJS) $(USER_OBJS)
+ @echo 'Building target: $@'
+ @echo 'Invoking: GCC C++ Linker'
+ g++ -shared -o"libfreeglut.so" $(OBJS) $(USER_OBJS) $(LIBS)
+ @echo 'Finished building target: $@'
+ @echo ' '
+
+# Other Targets
+clean:
+ -$(RM) $(OBJS)$(C++_DEPS)$(C_DEPS)$(CC_DEPS)$(LIBRARIES)$(CPP_DEPS)$(CXX_DEPS)$(C_UPPER_DEPS) libfreeglut.so
+ -@echo ' '
+
+.PHONY: all clean dependents
+.SECONDARY:
+
+-include ../makefile.targets
diff --git a/SixenseSDK/src/sixense_simple3d/Eclipse/freeglut/Release_x64/objects.mk b/SixenseSDK/src/sixense_simple3d/Eclipse/freeglut/Release_x64/objects.mk
new file mode 100755
index 0000000..742c2da
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/Eclipse/freeglut/Release_x64/objects.mk
@@ -0,0 +1,8 @@
+################################################################################
+# Automatically-generated file. Do not edit!
+################################################################################
+
+USER_OBJS :=
+
+LIBS :=
+
diff --git a/SixenseSDK/src/sixense_simple3d/Eclipse/freeglut/Release_x64/sources.mk b/SixenseSDK/src/sixense_simple3d/Eclipse/freeglut/Release_x64/sources.mk
new file mode 100755
index 0000000..9058cd4
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/Eclipse/freeglut/Release_x64/sources.mk
@@ -0,0 +1,27 @@
+################################################################################
+# Automatically-generated file. Do not edit!
+################################################################################
+
+O_SRCS :=
+CPP_SRCS :=
+C_UPPER_SRCS :=
+C_SRCS :=
+S_UPPER_SRCS :=
+OBJ_SRCS :=
+ASM_SRCS :=
+CXX_SRCS :=
+C++_SRCS :=
+CC_SRCS :=
+OBJS :=
+C++_DEPS :=
+C_DEPS :=
+CC_DEPS :=
+LIBRARIES :=
+CPP_DEPS :=
+CXX_DEPS :=
+C_UPPER_DEPS :=
+
+# Every subdirectory with source files must be described here
+SUBDIRS := \
+. \
+
diff --git a/SixenseSDK/src/sixense_simple3d/Eclipse/freeglut/Release_x64/subdir.mk b/SixenseSDK/src/sixense_simple3d/Eclipse/freeglut/Release_x64/subdir.mk
new file mode 100755
index 0000000..727642f
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/Eclipse/freeglut/Release_x64/subdir.mk
@@ -0,0 +1,254 @@
+################################################################################
+# Automatically-generated file. Do not edit!
+################################################################################
+
+# Add inputs and outputs from these tool invocations to the build variables
+C_SRCS += \
+../../../src/freeglut_callbacks.c \
+../../../src/freeglut_cursor.c \
+../../../src/freeglut_display.c \
+../../../src/freeglut_ext.c \
+../../../src/freeglut_font.c \
+../../../src/freeglut_font_data.c \
+../../../src/freeglut_gamemode.c \
+../../../src/freeglut_geometry.c \
+../../../src/freeglut_glutfont_definitions.c \
+../../../src/freeglut_init.c \
+../../../src/freeglut_input_devices.c \
+../../../src/freeglut_joystick.c \
+../../../src/freeglut_main.c \
+../../../src/freeglut_menu.c \
+../../../src/freeglut_misc.c \
+../../../src/freeglut_overlay.c \
+../../../src/freeglut_spaceball.c \
+../../../src/freeglut_state.c \
+../../../src/freeglut_stroke_mono_roman.c \
+../../../src/freeglut_stroke_roman.c \
+../../../src/freeglut_structure.c \
+../../../src/freeglut_teapot.c \
+../../../src/freeglut_videoresize.c \
+../../../src/freeglut_window.c
+
+OBJS += \
+./freeglut_callbacks.o \
+./freeglut_cursor.o \
+./freeglut_display.o \
+./freeglut_ext.o \
+./freeglut_font.o \
+./freeglut_font_data.o \
+./freeglut_gamemode.o \
+./freeglut_geometry.o \
+./freeglut_glutfont_definitions.o \
+./freeglut_init.o \
+./freeglut_input_devices.o \
+./freeglut_joystick.o \
+./freeglut_main.o \
+./freeglut_menu.o \
+./freeglut_misc.o \
+./freeglut_overlay.o \
+./freeglut_spaceball.o \
+./freeglut_state.o \
+./freeglut_stroke_mono_roman.o \
+./freeglut_stroke_roman.o \
+./freeglut_structure.o \
+./freeglut_teapot.o \
+./freeglut_videoresize.o \
+./freeglut_window.o
+
+C_DEPS += \
+./freeglut_callbacks.d \
+./freeglut_cursor.d \
+./freeglut_display.d \
+./freeglut_ext.d \
+./freeglut_font.d \
+./freeglut_font_data.d \
+./freeglut_gamemode.d \
+./freeglut_geometry.d \
+./freeglut_glutfont_definitions.d \
+./freeglut_init.d \
+./freeglut_input_devices.d \
+./freeglut_joystick.d \
+./freeglut_main.d \
+./freeglut_menu.d \
+./freeglut_misc.d \
+./freeglut_overlay.d \
+./freeglut_spaceball.d \
+./freeglut_state.d \
+./freeglut_stroke_mono_roman.d \
+./freeglut_stroke_roman.d \
+./freeglut_structure.d \
+./freeglut_teapot.d \
+./freeglut_videoresize.d \
+./freeglut_window.d
+
+
+# Each subdirectory must supply rules for building sources it contributes
+freeglut_callbacks.o: ../../../src/freeglut_callbacks.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -DFREEGLUT_EXPORTS -DHAVE_DLFCN_H -DHAVE_FCNTL_H -I/usr/include/ -I../../../../../src/sixense_simple3d/include -O3 -Wall -c -fmessage-length=0 -m64 -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+freeglut_cursor.o: ../../../src/freeglut_cursor.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -DFREEGLUT_EXPORTS -DHAVE_DLFCN_H -DHAVE_FCNTL_H -I/usr/include/ -I../../../../../src/sixense_simple3d/include -O3 -Wall -c -fmessage-length=0 -m64 -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+freeglut_display.o: ../../../src/freeglut_display.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -DFREEGLUT_EXPORTS -DHAVE_DLFCN_H -DHAVE_FCNTL_H -I/usr/include/ -I../../../../../src/sixense_simple3d/include -O3 -Wall -c -fmessage-length=0 -m64 -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+freeglut_ext.o: ../../../src/freeglut_ext.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -DFREEGLUT_EXPORTS -DHAVE_DLFCN_H -DHAVE_FCNTL_H -I/usr/include/ -I../../../../../src/sixense_simple3d/include -O3 -Wall -c -fmessage-length=0 -m64 -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+freeglut_font.o: ../../../src/freeglut_font.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -DFREEGLUT_EXPORTS -DHAVE_DLFCN_H -DHAVE_FCNTL_H -I/usr/include/ -I../../../../../src/sixense_simple3d/include -O3 -Wall -c -fmessage-length=0 -m64 -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+freeglut_font_data.o: ../../../src/freeglut_font_data.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -DFREEGLUT_EXPORTS -DHAVE_DLFCN_H -DHAVE_FCNTL_H -I/usr/include/ -I../../../../../src/sixense_simple3d/include -O3 -Wall -c -fmessage-length=0 -m64 -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+freeglut_gamemode.o: ../../../src/freeglut_gamemode.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -DFREEGLUT_EXPORTS -DHAVE_DLFCN_H -DHAVE_FCNTL_H -I/usr/include/ -I../../../../../src/sixense_simple3d/include -O3 -Wall -c -fmessage-length=0 -m64 -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+freeglut_geometry.o: ../../../src/freeglut_geometry.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -DFREEGLUT_EXPORTS -DHAVE_DLFCN_H -DHAVE_FCNTL_H -I/usr/include/ -I../../../../../src/sixense_simple3d/include -O3 -Wall -c -fmessage-length=0 -m64 -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+freeglut_glutfont_definitions.o: ../../../src/freeglut_glutfont_definitions.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -DFREEGLUT_EXPORTS -DHAVE_DLFCN_H -DHAVE_FCNTL_H -I/usr/include/ -I../../../../../src/sixense_simple3d/include -O3 -Wall -c -fmessage-length=0 -m64 -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+freeglut_init.o: ../../../src/freeglut_init.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -DFREEGLUT_EXPORTS -DHAVE_DLFCN_H -DHAVE_FCNTL_H -I/usr/include/ -I../../../../../src/sixense_simple3d/include -O3 -Wall -c -fmessage-length=0 -m64 -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+freeglut_input_devices.o: ../../../src/freeglut_input_devices.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -DFREEGLUT_EXPORTS -DHAVE_DLFCN_H -DHAVE_FCNTL_H -I/usr/include/ -I../../../../../src/sixense_simple3d/include -O3 -Wall -c -fmessage-length=0 -m64 -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+freeglut_joystick.o: ../../../src/freeglut_joystick.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -DFREEGLUT_EXPORTS -DHAVE_DLFCN_H -DHAVE_FCNTL_H -I/usr/include/ -I../../../../../src/sixense_simple3d/include -O3 -Wall -c -fmessage-length=0 -m64 -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+freeglut_main.o: ../../../src/freeglut_main.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -DFREEGLUT_EXPORTS -DHAVE_DLFCN_H -DHAVE_FCNTL_H -I/usr/include/ -I../../../../../src/sixense_simple3d/include -O3 -Wall -c -fmessage-length=0 -m64 -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+freeglut_menu.o: ../../../src/freeglut_menu.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -DFREEGLUT_EXPORTS -DHAVE_DLFCN_H -DHAVE_FCNTL_H -I/usr/include/ -I../../../../../src/sixense_simple3d/include -O3 -Wall -c -fmessage-length=0 -m64 -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+freeglut_misc.o: ../../../src/freeglut_misc.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -DFREEGLUT_EXPORTS -DHAVE_DLFCN_H -DHAVE_FCNTL_H -I/usr/include/ -I../../../../../src/sixense_simple3d/include -O3 -Wall -c -fmessage-length=0 -m64 -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+freeglut_overlay.o: ../../../src/freeglut_overlay.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -DFREEGLUT_EXPORTS -DHAVE_DLFCN_H -DHAVE_FCNTL_H -I/usr/include/ -I../../../../../src/sixense_simple3d/include -O3 -Wall -c -fmessage-length=0 -m64 -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+freeglut_spaceball.o: ../../../src/freeglut_spaceball.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -DFREEGLUT_EXPORTS -DHAVE_DLFCN_H -DHAVE_FCNTL_H -I/usr/include/ -I../../../../../src/sixense_simple3d/include -O3 -Wall -c -fmessage-length=0 -m64 -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+freeglut_state.o: ../../../src/freeglut_state.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -DFREEGLUT_EXPORTS -DHAVE_DLFCN_H -DHAVE_FCNTL_H -I/usr/include/ -I../../../../../src/sixense_simple3d/include -O3 -Wall -c -fmessage-length=0 -m64 -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+freeglut_stroke_mono_roman.o: ../../../src/freeglut_stroke_mono_roman.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -DFREEGLUT_EXPORTS -DHAVE_DLFCN_H -DHAVE_FCNTL_H -I/usr/include/ -I../../../../../src/sixense_simple3d/include -O3 -Wall -c -fmessage-length=0 -m64 -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+freeglut_stroke_roman.o: ../../../src/freeglut_stroke_roman.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -DFREEGLUT_EXPORTS -DHAVE_DLFCN_H -DHAVE_FCNTL_H -I/usr/include/ -I../../../../../src/sixense_simple3d/include -O3 -Wall -c -fmessage-length=0 -m64 -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+freeglut_structure.o: ../../../src/freeglut_structure.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -DFREEGLUT_EXPORTS -DHAVE_DLFCN_H -DHAVE_FCNTL_H -I/usr/include/ -I../../../../../src/sixense_simple3d/include -O3 -Wall -c -fmessage-length=0 -m64 -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+freeglut_teapot.o: ../../../src/freeglut_teapot.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -DFREEGLUT_EXPORTS -DHAVE_DLFCN_H -DHAVE_FCNTL_H -I/usr/include/ -I../../../../../src/sixense_simple3d/include -O3 -Wall -c -fmessage-length=0 -m64 -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+freeglut_videoresize.o: ../../../src/freeglut_videoresize.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -DFREEGLUT_EXPORTS -DHAVE_DLFCN_H -DHAVE_FCNTL_H -I/usr/include/ -I../../../../../src/sixense_simple3d/include -O3 -Wall -c -fmessage-length=0 -m64 -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+freeglut_window.o: ../../../src/freeglut_window.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -DFREEGLUT_EXPORTS -DHAVE_DLFCN_H -DHAVE_FCNTL_H -I/usr/include/ -I../../../../../src/sixense_simple3d/include -O3 -Wall -c -fmessage-length=0 -m64 -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+
diff --git a/SixenseSDK/src/sixense_simple3d/Eclipse/sixense_simple_3d/.cproject b/SixenseSDK/src/sixense_simple3d/Eclipse/sixense_simple_3d/.cproject
new file mode 100755
index 0000000..1859f3d
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/Eclipse/sixense_simple_3d/.cproject
@@ -0,0 +1,632 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?fileVersion 4.0.0?>
+
+<cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
+ <storageModule moduleId="org.eclipse.cdt.core.settings">
+ <cconfiguration id="cdt.managedbuild.config.gnu.exe.release.323568511">
+ <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.exe.release.323568511" moduleId="org.eclipse.cdt.core.settings" name="Release_x32">
+ <externalSettings/>
+ <extensions>
+ <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+ <extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ </extensions>
+ </storageModule>
+ <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+ <configuration artifactName="sixense_simple3d" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release,org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.exe.release.323568511" name="Release_x32" parent="cdt.managedbuild.config.gnu.exe.release">
+ <folderInfo id="cdt.managedbuild.config.gnu.exe.release.323568511." name="/" resourcePath="">
+ <toolChain id="cdt.managedbuild.toolchain.gnu.exe.release.280517602" name="Linux GCC" superClass="cdt.managedbuild.toolchain.gnu.exe.release">
+ <targetPlatform id="cdt.managedbuild.target.gnu.platform.exe.release.1763277263" name="Debug Platform" superClass="cdt.managedbuild.target.gnu.platform.exe.release"/>
+ <builder buildPath="${workspace_loc:/sixense_simple_3d/Release}" id="cdt.managedbuild.target.gnu.builder.exe.release.1773163417" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" superClass="cdt.managedbuild.target.gnu.builder.exe.release"/>
+ <tool id="cdt.managedbuild.tool.gnu.archiver.base.1275297065" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.base"/>
+ <tool id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.release.1117394655" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.release">
+ <option id="gnu.cpp.compiler.exe.release.option.optimization.level.1502730107" name="Optimization Level" superClass="gnu.cpp.compiler.exe.release.option.optimization.level" value="gnu.cpp.compiler.optimization.level.most" valueType="enumerated"/>
+ <option id="gnu.cpp.compiler.exe.release.option.debugging.level.931281381" name="Debug Level" superClass="gnu.cpp.compiler.exe.release.option.debugging.level" value="gnu.cpp.compiler.debugging.level.none" valueType="enumerated"/>
+ <option id="gnu.cpp.compiler.option.include.paths.1783133058" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
+ <listOptionValue builtIn="false" value="../../../../../src/sixense_simple3d/include"/>
+ <listOptionValue builtIn="false" value="../../../../../include"/>
+ </option>
+ <option id="gnu.cpp.compiler.option.other.other.277191243" name="Other flags" superClass="gnu.cpp.compiler.option.other.other" value="-c -fmessage-length=0 -m32 -fPIC" valueType="string"/>
+ <inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.922756366" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+ </tool>
+ <tool id="cdt.managedbuild.tool.gnu.c.compiler.exe.release.649769378" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.exe.release">
+ <option defaultValue="gnu.c.optimization.level.most" id="gnu.c.compiler.exe.release.option.optimization.level.1644934343" name="Optimization Level" superClass="gnu.c.compiler.exe.release.option.optimization.level" valueType="enumerated"/>
+ <option id="gnu.c.compiler.exe.release.option.debugging.level.1270487393" name="Debug Level" superClass="gnu.c.compiler.exe.release.option.debugging.level" value="gnu.c.debugging.level.none" valueType="enumerated"/>
+ <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.70607540" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
+ </tool>
+ <tool id="cdt.managedbuild.tool.gnu.c.linker.exe.release.291339576" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.exe.release"/>
+ <tool id="cdt.managedbuild.tool.gnu.cpp.linker.exe.release.630987354" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.exe.release">
+ <option id="gnu.cpp.link.option.libs.184473338" name="Libraries (-l)" superClass="gnu.cpp.link.option.libs" valueType="libs">
+ <listOptionValue builtIn="false" value="sixense"/>
+ <listOptionValue builtIn="false" value="sixense_utils"/>
+ <listOptionValue builtIn="false" value="GL"/>
+ <listOptionValue builtIn="false" value="freeglut"/>
+ </option>
+ <option id="gnu.cpp.link.option.paths.370273191" name="Library search path (-L)" superClass="gnu.cpp.link.option.paths" valueType="libPaths">
+ <listOptionValue builtIn="false" value="../../../../../lib/linux/release"/>
+ <listOptionValue builtIn="false" value="../../../../../src/sixense_simple3d/Eclipse/freeglut/Release_x32"/>
+ <listOptionValue builtIn="false" value="/usr/lib/"/>
+ </option>
+ <inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.468068198" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
+ <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
+ <additionalInput kind="additionalinput" paths="$(LIBS)"/>
+ </inputType>
+ </tool>
+ <tool id="cdt.managedbuild.tool.gnu.assembler.exe.release.2136990878" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.exe.release">
+ <inputType id="cdt.managedbuild.tool.gnu.assembler.input.1583198043" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
+ </tool>
+ </toolChain>
+ </folderInfo>
+ </configuration>
+ </storageModule>
+ <storageModule moduleId="scannerConfiguration">
+ <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
+ <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="makefileGenerator">
+ <runAction arguments="-E -P -v -dD" command="" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/${specs_file}&quot;'" command="sh" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-c 'g++ -E -P -v -dD &quot;${plugin_state_location}/specs.cpp&quot;'" command="sh" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/specs.c&quot;'" command="sh" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.release.323568511;cdt.managedbuild.config.gnu.exe.release.323568511.;cdt.managedbuild.tool.gnu.cpp.compiler.exe.release.1117394655;cdt.managedbuild.tool.gnu.cpp.compiler.input.922756366">
+ <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP"/>
+ <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="makefileGenerator">
+ <runAction arguments="-E -P -v -dD" command="" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/${specs_file}&quot;'" command="sh" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-c 'g++ -E -P -v -dD &quot;${plugin_state_location}/specs.cpp&quot;'" command="sh" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/specs.c&quot;'" command="sh" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ </scannerConfigBuildInfo>
+ <scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.release.323568511;cdt.managedbuild.config.gnu.exe.release.323568511.;cdt.managedbuild.tool.gnu.c.compiler.exe.release.649769378;cdt.managedbuild.tool.gnu.c.compiler.input.70607540">
+ <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/>
+ <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="makefileGenerator">
+ <runAction arguments="-E -P -v -dD" command="" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/${specs_file}&quot;'" command="sh" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-c 'g++ -E -P -v -dD &quot;${plugin_state_location}/specs.cpp&quot;'" command="sh" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/specs.c&quot;'" command="sh" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ </scannerConfigBuildInfo>
+ </storageModule>
+ <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+ <storageModule moduleId="org.eclipse.cdt.core.language.mapping"/>
+ </cconfiguration>
+ <cconfiguration id="cdt.managedbuild.config.gnu.exe.release.1731693536">
+ <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.exe.release.1731693536" moduleId="org.eclipse.cdt.core.settings" name="Release_x64">
+ <externalSettings/>
+ <extensions>
+ <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+ <extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ </extensions>
+ </storageModule>
+ <storageModule moduleId="scannerConfiguration">
+ <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
+ <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="makefileGenerator">
+ <runAction arguments="-E -P -v -dD" command="" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/${specs_file}&quot;'" command="sh" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-c 'g++ -E -P -v -dD &quot;${plugin_state_location}/specs.cpp&quot;'" command="sh" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/specs.c&quot;'" command="sh" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.release.323568511;cdt.managedbuild.config.gnu.exe.release.323568511.;cdt.managedbuild.tool.gnu.cpp.compiler.exe.release.1117394655;cdt.managedbuild.tool.gnu.cpp.compiler.input.922756366">
+ <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP"/>
+ <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="makefileGenerator">
+ <runAction arguments="-E -P -v -dD" command="" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/${specs_file}&quot;'" command="sh" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-c 'g++ -E -P -v -dD &quot;${plugin_state_location}/specs.cpp&quot;'" command="sh" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/specs.c&quot;'" command="sh" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ </scannerConfigBuildInfo>
+ <scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.release.323568511;cdt.managedbuild.config.gnu.exe.release.323568511.;cdt.managedbuild.tool.gnu.c.compiler.exe.release.649769378;cdt.managedbuild.tool.gnu.c.compiler.input.70607540">
+ <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/>
+ <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="makefileGenerator">
+ <runAction arguments="-E -P -v -dD" command="" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/${specs_file}&quot;'" command="sh" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-c 'g++ -E -P -v -dD &quot;${plugin_state_location}/specs.cpp&quot;'" command="sh" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
+ <buildOutputProvider>
+ <openAction enabled="true" filePath=""/>
+ <parser enabled="true"/>
+ </buildOutputProvider>
+ <scannerInfoProvider id="specsFile">
+ <runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/specs.c&quot;'" command="sh" useDefault="true"/>
+ <parser enabled="true"/>
+ </scannerInfoProvider>
+ </profile>
+ </scannerConfigBuildInfo>
+ </storageModule>
+ <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+ <configuration artifactName="sixense_simple3d" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release,org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.exe.release.1731693536" name="Release_x64" parent="cdt.managedbuild.config.gnu.exe.release">
+ <folderInfo id="cdt.managedbuild.config.gnu.exe.release.1731693536." name="/" resourcePath="">
+ <toolChain id="cdt.managedbuild.toolchain.gnu.exe.release.438642582" name="Linux GCC" superClass="cdt.managedbuild.toolchain.gnu.exe.release">
+ <targetPlatform id="cdt.managedbuild.target.gnu.platform.exe.release.1399680817" name="Debug Platform" superClass="cdt.managedbuild.target.gnu.platform.exe.release"/>
+ <builder buildPath="${workspace_loc:/sixense_simple_3d/x64 Release}" id="cdt.managedbuild.target.gnu.builder.exe.release.1215931181" keepEnvironmentInBuildfile="false" name="Gnu Make Builder" superClass="cdt.managedbuild.target.gnu.builder.exe.release"/>
+ <tool id="cdt.managedbuild.tool.gnu.archiver.base.564480372" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.base"/>
+ <tool id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.release.831366229" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.release">
+ <option id="gnu.cpp.compiler.exe.release.option.optimization.level.1689333313" name="Optimization Level" superClass="gnu.cpp.compiler.exe.release.option.optimization.level" value="gnu.cpp.compiler.optimization.level.none" valueType="enumerated"/>
+ <option id="gnu.cpp.compiler.exe.release.option.debugging.level.2056439260" name="Debug Level" superClass="gnu.cpp.compiler.exe.release.option.debugging.level" value="gnu.cpp.compiler.debugging.level.none" valueType="enumerated"/>
+ <option id="gnu.cpp.compiler.option.include.paths.1502911939" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
+ <listOptionValue builtIn="false" value="../../../../../src/sixense_simple3d/include"/>
+ <listOptionValue builtIn="false" value="../../../../../include"/>
+ </option>
+ <option id="gnu.cpp.compiler.option.other.other.427490913" name="Other flags" superClass="gnu.cpp.compiler.option.other.other" value="-c -fmessage-length=0 -m64 -fPIC" valueType="string"/>
+ <inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.1512052912" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+ </tool>
+ <tool id="cdt.managedbuild.tool.gnu.c.compiler.exe.release.1580979756" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.exe.release">
+ <option defaultValue="gnu.c.optimization.level.most" id="gnu.c.compiler.exe.release.option.optimization.level.879477669" name="Optimization Level" superClass="gnu.c.compiler.exe.release.option.optimization.level" valueType="enumerated"/>
+ <option id="gnu.c.compiler.exe.release.option.debugging.level.680052430" name="Debug Level" superClass="gnu.c.compiler.exe.release.option.debugging.level" value="gnu.c.debugging.level.none" valueType="enumerated"/>
+ <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.1043665766" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
+ </tool>
+ <tool id="cdt.managedbuild.tool.gnu.c.linker.exe.release.1527105911" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.exe.release"/>
+ <tool id="cdt.managedbuild.tool.gnu.cpp.linker.exe.release.392389137" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.exe.release">
+ <option id="gnu.cpp.link.option.libs.541966584" name="Libraries (-l)" superClass="gnu.cpp.link.option.libs" valueType="libs">
+ <listOptionValue builtIn="false" value="sixense_x64"/>
+ <listOptionValue builtIn="false" value="GL"/>
+ <listOptionValue builtIn="false" value="freeglut"/>
+ <listOptionValue builtIn="false" value="sixense_utils_x64"/>
+ </option>
+ <option id="gnu.cpp.link.option.paths.1709116290" name="Library search path (-L)" superClass="gnu.cpp.link.option.paths" valueType="libPaths">
+ <listOptionValue builtIn="false" value="../../../../../lib/linux_x64/release"/>
+ <listOptionValue builtIn="false" value="/usr/lib64/"/>
+ <listOptionValue builtIn="false" value="../../../../../src/sixense_simple3d/Eclipse/freeglut/Release_x64"/>
+ </option>
+ <inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.681748111" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
+ <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
+ <additionalInput kind="additionalinput" paths="$(LIBS)"/>
+ </inputType>
+ </tool>
+ <tool id="cdt.managedbuild.tool.gnu.assembler.exe.release.812535269" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.exe.release">
+ <inputType id="cdt.managedbuild.tool.gnu.assembler.input.190187470" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
+ </tool>
+ </toolChain>
+ </folderInfo>
+ </configuration>
+ </storageModule>
+ <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+ <storageModule moduleId="org.eclipse.cdt.core.language.mapping"/>
+ </cconfiguration>
+ </storageModule>
+ <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+ <project id="sixense_simple_3d.cdt.managedbuild.target.gnu.exe.719633754" name="Executable" projectType="cdt.managedbuild.target.gnu.exe"/>
+ </storageModule>
+</cproject>
diff --git a/SixenseSDK/src/sixense_simple3d/Eclipse/sixense_simple_3d/.project b/SixenseSDK/src/sixense_simple3d/Eclipse/sixense_simple_3d/.project
new file mode 100755
index 0000000..c9b0238
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/Eclipse/sixense_simple_3d/.project
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>sixense_simple_3d</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
+ <triggers>clean,full,incremental,</triggers>
+ <arguments>
+ <dictionary>
+ <key>?name?</key>
+ <value></value>
+ </dictionary>
+ <dictionary>
+ <key>org.eclipse.cdt.make.core.append_environment</key>
+ <value>true</value>
+ </dictionary>
+ <dictionary>
+ <key>org.eclipse.cdt.make.core.autoBuildTarget</key>
+ <value>all</value>
+ </dictionary>
+ <dictionary>
+ <key>org.eclipse.cdt.make.core.buildArguments</key>
+ <value></value>
+ </dictionary>
+ <dictionary>
+ <key>org.eclipse.cdt.make.core.buildCommand</key>
+ <value>make</value>
+ </dictionary>
+ <dictionary>
+ <key>org.eclipse.cdt.make.core.buildLocation</key>
+ <value>${workspace_loc:/sixense_simple_3d/Release}</value>
+ </dictionary>
+ <dictionary>
+ <key>org.eclipse.cdt.make.core.cleanBuildTarget</key>
+ <value>clean</value>
+ </dictionary>
+ <dictionary>
+ <key>org.eclipse.cdt.make.core.contents</key>
+ <value>org.eclipse.cdt.make.core.activeConfigSettings</value>
+ </dictionary>
+ <dictionary>
+ <key>org.eclipse.cdt.make.core.enableAutoBuild</key>
+ <value>false</value>
+ </dictionary>
+ <dictionary>
+ <key>org.eclipse.cdt.make.core.enableCleanBuild</key>
+ <value>true</value>
+ </dictionary>
+ <dictionary>
+ <key>org.eclipse.cdt.make.core.enableFullBuild</key>
+ <value>true</value>
+ </dictionary>
+ <dictionary>
+ <key>org.eclipse.cdt.make.core.fullBuildTarget</key>
+ <value>all</value>
+ </dictionary>
+ <dictionary>
+ <key>org.eclipse.cdt.make.core.stopOnError</key>
+ <value>true</value>
+ </dictionary>
+ <dictionary>
+ <key>org.eclipse.cdt.make.core.useDefaultBuildCmd</key>
+ <value>true</value>
+ </dictionary>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
+ <triggers>full,incremental,</triggers>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.cdt.core.cnature</nature>
+ <nature>org.eclipse.cdt.core.ccnature</nature>
+ <nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
+ <nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
+ </natures>
+ <linkedResources>
+ <link>
+ <name>sixense_simple3d.cpp</name>
+ <type>1</type>
+ <locationURI>PARENT-2-PROJECT_LOC/progs/demos/sixense_simple3d/sixense_simple3d.cpp</locationURI>
+ </link>
+ </linkedResources>
+</projectDescription>
diff --git a/SixenseSDK/src/sixense_simple3d/Eclipse/sixense_simple_3d/Release_x32/makefile b/SixenseSDK/src/sixense_simple3d/Eclipse/sixense_simple_3d/Release_x32/makefile
new file mode 100755
index 0000000..a2ea60d
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/Eclipse/sixense_simple_3d/Release_x32/makefile
@@ -0,0 +1,58 @@
+################################################################################
+# Automatically-generated file. Do not edit!
+################################################################################
+
+-include ../makefile.init
+
+RM := rm -rf
+
+# All of the sources participating in the build are defined here
+-include sources.mk
+-include subdir.mk
+-include objects.mk
+
+ifneq ($(MAKECMDGOALS),clean)
+ifneq ($(strip $(C++_DEPS)),)
+-include $(C++_DEPS)
+endif
+ifneq ($(strip $(C_DEPS)),)
+-include $(C_DEPS)
+endif
+ifneq ($(strip $(CC_DEPS)),)
+-include $(CC_DEPS)
+endif
+ifneq ($(strip $(CPP_DEPS)),)
+-include $(CPP_DEPS)
+endif
+ifneq ($(strip $(CXX_DEPS)),)
+-include $(CXX_DEPS)
+endif
+ifneq ($(strip $(C_UPPER_DEPS)),)
+-include $(C_UPPER_DEPS)
+endif
+endif
+
+-include ../makefile.defs
+
+# Add inputs and outputs from these tool invocations to the build variables
+
+# All Target
+all: sixense_simple3d
+
+# Tool invocations
+sixense_simple3d: $(OBJS) $(USER_OBJS)
+ @echo 'Building target: $@'
+ @echo 'Invoking: GCC C++ Linker'
+ g++ -L../../../../../lib/linux/release -L../../../../../src/sixense_simple3d/Eclipse/freeglut/Release_x32 -L/usr/lib/ -o"sixense_simple3d" $(OBJS) $(USER_OBJS) $(LIBS)
+ @echo 'Finished building target: $@'
+ @echo ' '
+
+# Other Targets
+clean:
+ -$(RM) $(OBJS)$(C++_DEPS)$(C_DEPS)$(CC_DEPS)$(CPP_DEPS)$(EXECUTABLES)$(CXX_DEPS)$(C_UPPER_DEPS) sixense_simple3d
+ -@echo ' '
+
+.PHONY: all clean dependents
+.SECONDARY:
+
+-include ../makefile.targets
diff --git a/SixenseSDK/src/sixense_simple3d/Eclipse/sixense_simple_3d/Release_x32/objects.mk b/SixenseSDK/src/sixense_simple3d/Eclipse/sixense_simple_3d/Release_x32/objects.mk
new file mode 100755
index 0000000..b4e1561
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/Eclipse/sixense_simple_3d/Release_x32/objects.mk
@@ -0,0 +1,8 @@
+################################################################################
+# Automatically-generated file. Do not edit!
+################################################################################
+
+USER_OBJS :=
+
+LIBS := -lsixense -lsixense_utils -lGL -lfreeglut
+
diff --git a/SixenseSDK/src/sixense_simple3d/Eclipse/sixense_simple_3d/Release_x32/sources.mk b/SixenseSDK/src/sixense_simple3d/Eclipse/sixense_simple_3d/Release_x32/sources.mk
new file mode 100755
index 0000000..5b37ead
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/Eclipse/sixense_simple_3d/Release_x32/sources.mk
@@ -0,0 +1,27 @@
+################################################################################
+# Automatically-generated file. Do not edit!
+################################################################################
+
+O_SRCS :=
+CPP_SRCS :=
+C_UPPER_SRCS :=
+C_SRCS :=
+S_UPPER_SRCS :=
+OBJ_SRCS :=
+ASM_SRCS :=
+CXX_SRCS :=
+C++_SRCS :=
+CC_SRCS :=
+OBJS :=
+C++_DEPS :=
+C_DEPS :=
+CC_DEPS :=
+CPP_DEPS :=
+EXECUTABLES :=
+CXX_DEPS :=
+C_UPPER_DEPS :=
+
+# Every subdirectory with source files must be described here
+SUBDIRS := \
+. \
+
diff --git a/SixenseSDK/src/sixense_simple3d/Eclipse/sixense_simple_3d/Release_x32/subdir.mk b/SixenseSDK/src/sixense_simple3d/Eclipse/sixense_simple_3d/Release_x32/subdir.mk
new file mode 100755
index 0000000..b84f062
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/Eclipse/sixense_simple_3d/Release_x32/subdir.mk
@@ -0,0 +1,24 @@
+################################################################################
+# Automatically-generated file. Do not edit!
+################################################################################
+
+# Add inputs and outputs from these tool invocations to the build variables
+CPP_SRCS += \
+../../../progs/demos/sixense_simple3d/sixense_simple3d.cpp
+
+OBJS += \
+./sixense_simple3d.o
+
+CPP_DEPS += \
+./sixense_simple3d.d
+
+
+# Each subdirectory must supply rules for building sources it contributes
+sixense_simple3d.o: ../../../progs/demos/sixense_simple3d/sixense_simple3d.cpp
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C++ Compiler'
+ g++ -I../../../../../src/sixense_simple3d/include -I../../../../../include -O3 -Wall -c -fmessage-length=0 -m32 -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+
diff --git a/SixenseSDK/src/sixense_simple3d/Eclipse/sixense_simple_3d/Release_x64/makefile b/SixenseSDK/src/sixense_simple3d/Eclipse/sixense_simple_3d/Release_x64/makefile
new file mode 100755
index 0000000..a72b0fb
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/Eclipse/sixense_simple_3d/Release_x64/makefile
@@ -0,0 +1,58 @@
+################################################################################
+# Automatically-generated file. Do not edit!
+################################################################################
+
+-include ../makefile.init
+
+RM := rm -rf
+
+# All of the sources participating in the build are defined here
+-include sources.mk
+-include subdir.mk
+-include objects.mk
+
+ifneq ($(MAKECMDGOALS),clean)
+ifneq ($(strip $(C++_DEPS)),)
+-include $(C++_DEPS)
+endif
+ifneq ($(strip $(C_DEPS)),)
+-include $(C_DEPS)
+endif
+ifneq ($(strip $(CC_DEPS)),)
+-include $(CC_DEPS)
+endif
+ifneq ($(strip $(CPP_DEPS)),)
+-include $(CPP_DEPS)
+endif
+ifneq ($(strip $(CXX_DEPS)),)
+-include $(CXX_DEPS)
+endif
+ifneq ($(strip $(C_UPPER_DEPS)),)
+-include $(C_UPPER_DEPS)
+endif
+endif
+
+-include ../makefile.defs
+
+# Add inputs and outputs from these tool invocations to the build variables
+
+# All Target
+all: sixense_simple3d
+
+# Tool invocations
+sixense_simple3d: $(OBJS) $(USER_OBJS)
+ @echo 'Building target: $@'
+ @echo 'Invoking: GCC C++ Linker'
+ g++ -L../../../../../lib/linux_x64/release -L/usr/lib64/ -L../../../../../src/sixense_simple3d/Eclipse/freeglut/Release_x64 -o"sixense_simple3d" $(OBJS) $(USER_OBJS) $(LIBS)
+ @echo 'Finished building target: $@'
+ @echo ' '
+
+# Other Targets
+clean:
+ -$(RM) $(OBJS)$(C++_DEPS)$(C_DEPS)$(CC_DEPS)$(CPP_DEPS)$(EXECUTABLES)$(CXX_DEPS)$(C_UPPER_DEPS) sixense_simple3d
+ -@echo ' '
+
+.PHONY: all clean dependents
+.SECONDARY:
+
+-include ../makefile.targets
diff --git a/SixenseSDK/src/sixense_simple3d/Eclipse/sixense_simple_3d/Release_x64/objects.mk b/SixenseSDK/src/sixense_simple3d/Eclipse/sixense_simple_3d/Release_x64/objects.mk
new file mode 100755
index 0000000..4ad894e
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/Eclipse/sixense_simple_3d/Release_x64/objects.mk
@@ -0,0 +1,8 @@
+################################################################################
+# Automatically-generated file. Do not edit!
+################################################################################
+
+USER_OBJS :=
+
+LIBS := -lsixense_x64 -lGL -lfreeglut -lsixense_utils_x64
+
diff --git a/SixenseSDK/src/sixense_simple3d/Eclipse/sixense_simple_3d/Release_x64/sources.mk b/SixenseSDK/src/sixense_simple3d/Eclipse/sixense_simple_3d/Release_x64/sources.mk
new file mode 100755
index 0000000..5b37ead
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/Eclipse/sixense_simple_3d/Release_x64/sources.mk
@@ -0,0 +1,27 @@
+################################################################################
+# Automatically-generated file. Do not edit!
+################################################################################
+
+O_SRCS :=
+CPP_SRCS :=
+C_UPPER_SRCS :=
+C_SRCS :=
+S_UPPER_SRCS :=
+OBJ_SRCS :=
+ASM_SRCS :=
+CXX_SRCS :=
+C++_SRCS :=
+CC_SRCS :=
+OBJS :=
+C++_DEPS :=
+C_DEPS :=
+CC_DEPS :=
+CPP_DEPS :=
+EXECUTABLES :=
+CXX_DEPS :=
+C_UPPER_DEPS :=
+
+# Every subdirectory with source files must be described here
+SUBDIRS := \
+. \
+
diff --git a/SixenseSDK/src/sixense_simple3d/Eclipse/sixense_simple_3d/Release_x64/subdir.mk b/SixenseSDK/src/sixense_simple3d/Eclipse/sixense_simple_3d/Release_x64/subdir.mk
new file mode 100755
index 0000000..c9b3454
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/Eclipse/sixense_simple_3d/Release_x64/subdir.mk
@@ -0,0 +1,24 @@
+################################################################################
+# Automatically-generated file. Do not edit!
+################################################################################
+
+# Add inputs and outputs from these tool invocations to the build variables
+CPP_SRCS += \
+../../../progs/demos/sixense_simple3d/sixense_simple3d.cpp
+
+OBJS += \
+./sixense_simple3d.o
+
+CPP_DEPS += \
+./sixense_simple3d.d
+
+
+# Each subdirectory must supply rules for building sources it contributes
+sixense_simple3d.o: ../../../progs/demos/sixense_simple3d/sixense_simple3d.cpp
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C++ Compiler'
+ g++ -I../../../../../src/sixense_simple3d/include -I../../../../../include -O0 -Wall -c -fmessage-length=0 -m64 -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+
diff --git a/SixenseSDK/src/sixense_simple3d/VisualStudio2010/freeglut.suo b/SixenseSDK/src/sixense_simple3d/VisualStudio2010/freeglut.suo
new file mode 100755
index 0000000..3d0fe9f
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/VisualStudio2010/freeglut.suo
Binary files differ
diff --git a/SixenseSDK/src/sixense_simple3d/VisualStudio2010/freeglut_vs2008.suo b/SixenseSDK/src/sixense_simple3d/VisualStudio2010/freeglut_vs2008.suo
new file mode 100755
index 0000000..d933eed
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/VisualStudio2010/freeglut_vs2008.suo
Binary files differ
diff --git a/SixenseSDK/src/sixense_simple3d/VisualStudio2010/freeglut_vs2010.sdf b/SixenseSDK/src/sixense_simple3d/VisualStudio2010/freeglut_vs2010.sdf
new file mode 100755
index 0000000..7f7179a
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/VisualStudio2010/freeglut_vs2010.sdf
Binary files differ
diff --git a/SixenseSDK/src/sixense_simple3d/VisualStudio2010/freeglut_vs2010.sln b/SixenseSDK/src/sixense_simple3d/VisualStudio2010/freeglut_vs2010.sln
new file mode 100755
index 0000000..956f02b
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/VisualStudio2010/freeglut_vs2010.sln
@@ -0,0 +1,55 @@
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "freeglut", "freeglut_vs2010.vcxproj", "{1BB1BF26-43B1-454C-958D-4A6AEFEE270F}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sixense_simple3d", "sixense_simple3d\sixense_simple3d.vcxproj", "{9CF59EE9-AEE3-46FB-8026-DF1DDA82DF18}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug Static Lib|Win32 = Debug Static Lib|Win32
+ Debug Static Lib|x64 = Debug Static Lib|x64
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release Static Lib|Win32 = Release Static Lib|Win32
+ Release Static Lib|x64 = Release Static Lib|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {1BB1BF26-43B1-454C-958D-4A6AEFEE270F}.Debug Static Lib|Win32.ActiveCfg = Debug Static Lib|Win32
+ {1BB1BF26-43B1-454C-958D-4A6AEFEE270F}.Debug Static Lib|Win32.Build.0 = Debug Static Lib|Win32
+ {1BB1BF26-43B1-454C-958D-4A6AEFEE270F}.Debug Static Lib|x64.ActiveCfg = Debug Static Lib|x64
+ {1BB1BF26-43B1-454C-958D-4A6AEFEE270F}.Debug Static Lib|x64.Build.0 = Debug Static Lib|x64
+ {1BB1BF26-43B1-454C-958D-4A6AEFEE270F}.Debug|Win32.ActiveCfg = Debug|Win32
+ {1BB1BF26-43B1-454C-958D-4A6AEFEE270F}.Debug|Win32.Build.0 = Debug|Win32
+ {1BB1BF26-43B1-454C-958D-4A6AEFEE270F}.Debug|x64.ActiveCfg = Debug|x64
+ {1BB1BF26-43B1-454C-958D-4A6AEFEE270F}.Debug|x64.Build.0 = Debug|x64
+ {1BB1BF26-43B1-454C-958D-4A6AEFEE270F}.Release Static Lib|Win32.ActiveCfg = Release Static Lib|Win32
+ {1BB1BF26-43B1-454C-958D-4A6AEFEE270F}.Release Static Lib|Win32.Build.0 = Release Static Lib|Win32
+ {1BB1BF26-43B1-454C-958D-4A6AEFEE270F}.Release Static Lib|x64.ActiveCfg = Release Static Lib|x64
+ {1BB1BF26-43B1-454C-958D-4A6AEFEE270F}.Release Static Lib|x64.Build.0 = Release Static Lib|x64
+ {1BB1BF26-43B1-454C-958D-4A6AEFEE270F}.Release|Win32.ActiveCfg = Release|Win32
+ {1BB1BF26-43B1-454C-958D-4A6AEFEE270F}.Release|Win32.Build.0 = Release|Win32
+ {1BB1BF26-43B1-454C-958D-4A6AEFEE270F}.Release|x64.ActiveCfg = Release|x64
+ {1BB1BF26-43B1-454C-958D-4A6AEFEE270F}.Release|x64.Build.0 = Release|x64
+ {9CF59EE9-AEE3-46FB-8026-DF1DDA82DF18}.Debug Static Lib|Win32.ActiveCfg = Debug Static Lib|Win32
+ {9CF59EE9-AEE3-46FB-8026-DF1DDA82DF18}.Debug Static Lib|Win32.Build.0 = Debug Static Lib|Win32
+ {9CF59EE9-AEE3-46FB-8026-DF1DDA82DF18}.Debug Static Lib|x64.ActiveCfg = Debug Static Lib|x64
+ {9CF59EE9-AEE3-46FB-8026-DF1DDA82DF18}.Debug Static Lib|x64.Build.0 = Debug Static Lib|x64
+ {9CF59EE9-AEE3-46FB-8026-DF1DDA82DF18}.Debug|Win32.ActiveCfg = Debug|Win32
+ {9CF59EE9-AEE3-46FB-8026-DF1DDA82DF18}.Debug|Win32.Build.0 = Debug|Win32
+ {9CF59EE9-AEE3-46FB-8026-DF1DDA82DF18}.Debug|x64.ActiveCfg = Debug|x64
+ {9CF59EE9-AEE3-46FB-8026-DF1DDA82DF18}.Debug|x64.Build.0 = Debug|x64
+ {9CF59EE9-AEE3-46FB-8026-DF1DDA82DF18}.Release Static Lib|Win32.ActiveCfg = Release Static Lib|Win32
+ {9CF59EE9-AEE3-46FB-8026-DF1DDA82DF18}.Release Static Lib|Win32.Build.0 = Release Static Lib|Win32
+ {9CF59EE9-AEE3-46FB-8026-DF1DDA82DF18}.Release Static Lib|x64.ActiveCfg = Release Static Lib|x64
+ {9CF59EE9-AEE3-46FB-8026-DF1DDA82DF18}.Release Static Lib|x64.Build.0 = Release Static Lib|x64
+ {9CF59EE9-AEE3-46FB-8026-DF1DDA82DF18}.Release|Win32.ActiveCfg = Release|Win32
+ {9CF59EE9-AEE3-46FB-8026-DF1DDA82DF18}.Release|Win32.Build.0 = Release|Win32
+ {9CF59EE9-AEE3-46FB-8026-DF1DDA82DF18}.Release|x64.ActiveCfg = Release|x64
+ {9CF59EE9-AEE3-46FB-8026-DF1DDA82DF18}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/SixenseSDK/src/sixense_simple3d/VisualStudio2010/freeglut_vs2010.suo b/SixenseSDK/src/sixense_simple3d/VisualStudio2010/freeglut_vs2010.suo
new file mode 100755
index 0000000..f3e985a
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/VisualStudio2010/freeglut_vs2010.suo
Binary files differ
diff --git a/SixenseSDK/src/sixense_simple3d/VisualStudio2010/freeglut_vs2010.vcxproj b/SixenseSDK/src/sixense_simple3d/VisualStudio2010/freeglut_vs2010.vcxproj
new file mode 100755
index 0000000..f40d5b6
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/VisualStudio2010/freeglut_vs2010.vcxproj
@@ -0,0 +1,792 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug Static Lib|Win32">
+ <Configuration>Debug Static Lib</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug Static Lib|x64">
+ <Configuration>Debug Static Lib</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release Static Lib|Win32">
+ <Configuration>Release Static Lib</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release Static Lib|x64">
+ <Configuration>Release Static Lib</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectName>freeglut</ProjectName>
+ <ProjectGuid>{1BB1BF26-43B1-454C-958D-4A6AEFEE270F}</ProjectGuid>
+ <RootNamespace>freeglut</RootNamespace>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>MultiByte</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>MultiByte</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>MultiByte</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>MultiByte</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)\</OutDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'">$(SolutionDir)$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</IntDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'">$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)\</OutDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'">$(SolutionDir)$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</IntDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'">$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <AdditionalOptions>/D "_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES" %(AdditionalOptions)</AdditionalOptions>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_DEBUG;WIN32;_WINDOWS;_USRDLL;FREEGLUT_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ <Link>
+ <OutputFile>$(OutDir)$(ProjectName).dll</OutputFile>
+ <ModuleDefinitionFile>..\src\freeglutdll.def</ModuleDefinitionFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <ImportLibrary>$(OutDir)$(ProjectName).lib</ImportLibrary>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'">
+ <ClCompile>
+ <AdditionalOptions>/D "_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES" %(AdditionalOptions)</AdditionalOptions>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_DEBUG;WIN32;_WINDOWS;_USRDLL;FREEGLUT_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ <Link>
+ <OutputFile>$(OutDir)$(ProjectName).dll</OutputFile>
+ <ModuleDefinitionFile>..\src\freeglutdll.def</ModuleDefinitionFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <ImportLibrary>$(OutDir)$(ProjectName).lib</ImportLibrary>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <AdditionalIncludeDirectories>..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>NDEBUG;WIN32;_WINDOWS;_USRDLL;FREEGLUT_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <WarningLevel>Level3</WarningLevel>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ <Link>
+ <OutputFile>$(OutDir)$(ProjectName).dll</OutputFile>
+ <ModuleDefinitionFile>..\src\freeglutdll.def</ModuleDefinitionFile>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <ImportLibrary>$(OutDir)$(ProjectName).lib</ImportLibrary>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <AdditionalIncludeDirectories>..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>NDEBUG;WIN32;_WINDOWS;_USRDLL;FREEGLUT_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <WarningLevel>Level3</WarningLevel>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ <Link>
+ <OutputFile>$(OutDir)$(ProjectName).dll</OutputFile>
+ <ModuleDefinitionFile>..\src\freeglutdll.def</ModuleDefinitionFile>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <ImportLibrary>$(OutDir)$(ProjectName).lib</ImportLibrary>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <AdditionalOptions>/D "_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES" %(AdditionalOptions)</AdditionalOptions>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_DEBUG;WIN32;_WINDOWS;_USRDLL;FREEGLUT_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ <Link>
+ <OutputFile>$(OutDir)$(ProjectName).dll</OutputFile>
+ <ModuleDefinitionFile>..\src\freeglutdll.def</ModuleDefinitionFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <ImportLibrary>$(OutDir)$(ProjectName).lib</ImportLibrary>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <AdditionalOptions>/D "_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES" %(AdditionalOptions)</AdditionalOptions>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_DEBUG;WIN32;_WINDOWS;_USRDLL;FREEGLUT_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ <Link>
+ <OutputFile>$(OutDir)$(ProjectName).dll</OutputFile>
+ <ModuleDefinitionFile>..\src\freeglutdll.def</ModuleDefinitionFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <ImportLibrary>$(OutDir)$(ProjectName).lib</ImportLibrary>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <AdditionalIncludeDirectories>..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>NDEBUG;WIN32;_WINDOWS;_USRDLL;FREEGLUT_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <WarningLevel>Level3</WarningLevel>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ <Link>
+ <OutputFile>$(OutDir)$(ProjectName).dll</OutputFile>
+ <ModuleDefinitionFile>..\src\freeglutdll.def</ModuleDefinitionFile>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <ImportLibrary>$(OutDir)$(ProjectName).lib</ImportLibrary>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <AdditionalIncludeDirectories>..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>NDEBUG;WIN32;_WINDOWS;_USRDLL;FREEGLUT_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <WarningLevel>Level3</WarningLevel>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ <Link>
+ <OutputFile>$(OutDir)$(ProjectName).dll</OutputFile>
+ <ModuleDefinitionFile>..\src\freeglutdll.def</ModuleDefinitionFile>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <ImportLibrary>$(OutDir)$(ProjectName).lib</ImportLibrary>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\src\freeglut_callbacks.c">
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <ClCompile Include="..\src\freeglut_cursor.c">
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <ClCompile Include="..\src\freeglut_display.c">
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <ClCompile Include="..\src\freeglut_ext.c">
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <ClCompile Include="..\src\freeglut_font.c">
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <ClCompile Include="..\src\freeglut_font_data.c">
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <ClCompile Include="..\src\freeglut_gamemode.c">
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <ClCompile Include="..\src\freeglut_geometry.c">
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <ClCompile Include="..\src\freeglut_glutfont_definitions.c">
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <ClCompile Include="..\src\freeglut_init.c">
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <ClCompile Include="..\src\freeglut_input_devices.c">
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <ClCompile Include="..\src\freeglut_joystick.c">
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <ClCompile Include="..\src\freeglut_main.c">
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <ClCompile Include="..\src\freeglut_menu.c">
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <ClCompile Include="..\src\freeglut_misc.c">
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <ClCompile Include="..\src\freeglut_overlay.c">
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <ClCompile Include="..\src\freeglut_spaceball.c" />
+ <ClCompile Include="..\src\freeglut_state.c">
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <ClCompile Include="..\src\freeglut_stroke_mono_roman.c">
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <ClCompile Include="..\src\freeglut_stroke_roman.c">
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <ClCompile Include="..\src\freeglut_structure.c">
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <ClCompile Include="..\src\freeglut_teapot.c">
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <ClCompile Include="..\src\freeglut_videoresize.c">
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <ClCompile Include="..\src\freeglut_window.c">
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="..\src\freeglutdll.def" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\include\GL\freeglut.h" />
+ <ClInclude Include="..\include\GL\freeglut_ext.h" />
+ <ClInclude Include="..\src\freeglut_internal.h" />
+ <ClInclude Include="..\include\GL\freeglut_std.h" />
+ <ClInclude Include="..\src\freeglut_teapot_data.h" />
+ <ClInclude Include="..\include\GL\glut.h" />
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="..\freeglut.rc" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/SixenseSDK/src/sixense_simple3d/VisualStudio2010/sixense_simple3d/sixense_simple3d.vcxproj b/SixenseSDK/src/sixense_simple3d/VisualStudio2010/sixense_simple3d/sixense_simple3d.vcxproj
new file mode 100755
index 0000000..10b8be2
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/VisualStudio2010/sixense_simple3d/sixense_simple3d.vcxproj
@@ -0,0 +1,354 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug Static Lib|Win32">
+ <Configuration>Debug Static Lib</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug Static Lib|x64">
+ <Configuration>Debug Static Lib</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release Static Lib|Win32">
+ <Configuration>Release Static Lib</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release Static Lib|x64">
+ <Configuration>Release Static Lib</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{9CF59EE9-AEE3-46FB-8026-DF1DDA82DF18}</ProjectGuid>
+ <RootNamespace>sixense_test</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)\</OutDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'">$(SolutionDir)$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</IntDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'">$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)\</OutDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'">$(SolutionDir)$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</IntDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'">$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'">false</LinkIncremental>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(ProjectName)_x64</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'">$(ProjectName)_x64</TargetName>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\include;..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>sixensed.lib;sixense_utilsd.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <AdditionalLibraryDirectories>..\..\..\..\lib\win32\debug_dll;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\include;..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;SIXENSE_STATIC_LIB;SIXENSE_UTILS_STATIC_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>sixensed_s.lib;sixense_utilsd_s.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <AdditionalLibraryDirectories>..\..\..\..\lib\win32\debug_static;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <AdditionalIncludeDirectories>..\..\include;..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>sixense.lib;sixense_utils.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <AdditionalLibraryDirectories>..\..\..\..\lib\win32\release_dll;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ <ProjectReference>
+ <UseLibraryDependencyInputs>true</UseLibraryDependencyInputs>
+ </ProjectReference>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <AdditionalIncludeDirectories>..\..\include;..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;SIXENSE_STATIC_LIB;SIXENSE_UTILS_STATIC_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>sixense_s.lib;sixense_utils_s.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <AdditionalLibraryDirectories>..\..\..\..\lib\win32\release_static;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineX86</TargetMachine>
+ <IgnoreSpecificDefaultLibraries>
+ </IgnoreSpecificDefaultLibraries>
+ </Link>
+ <ProjectReference>
+ <UseLibraryDependencyInputs>true</UseLibraryDependencyInputs>
+ </ProjectReference>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\include;..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <CompileAs>CompileAsCpp</CompileAs>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>sixensed_x64.lib;sixense_utilsd_x64.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <AdditionalLibraryDirectories>..\..\..\..\lib\x64\debug_dll;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\include;..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;SIXENSE_STATIC_LIB;SIXENSE_UTILS_STATIC_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <CompileAs>CompileAsCpp</CompileAs>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>sixensed_s_x64.lib;sixense_utilsd_s_x64.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <AdditionalLibraryDirectories>..\..\..\..\lib\x64\debug_static;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineX64</TargetMachine>
+ <IgnoreSpecificDefaultLibraries>
+ </IgnoreSpecificDefaultLibraries>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <AdditionalIncludeDirectories>..\..\include;..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;SIXENSE_STATIC_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <CompileAs>CompileAsCpp</CompileAs>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>sixense_x64.lib;sixense_utils_x64.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <AdditionalLibraryDirectories>..\..\..\..\lib\x64\release_dll;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <AdditionalIncludeDirectories>..\..\include;..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;SIXENSE_STATIC_LIB;SIXENSE_UTILS_STATIC_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <CompileAs>CompileAsCpp</CompileAs>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>sixense_s_x64.lib;sixense_utils_s_x64.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <AdditionalLibraryDirectories>..\..\..\..\lib\x64\release_static;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\freeglut_vs2010.vcxproj">
+ <Project>{1bb1bf26-43b1-454c-958d-4a6aefee270f}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\progs\demos\sixense_simple3d\sixense_simple3d.c">
+ <CompileAs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">CompileAsCpp</CompileAs>
+ <CompileAs Condition="'$(Configuration)|$(Platform)'=='Debug Static Lib|Win32'">CompileAsCpp</CompileAs>
+ <CompileAs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">CompileAsCpp</CompileAs>
+ <CompileAs Condition="'$(Configuration)|$(Platform)'=='Release Static Lib|Win32'">CompileAsCpp</CompileAs>
+ </ClCompile>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/SixenseSDK/src/sixense_simple3d/VisualStudio2010/sixense_simple3d/sixense_simple3d.vcxproj.filters b/SixenseSDK/src/sixense_simple3d/VisualStudio2010/sixense_simple3d/sixense_simple3d.vcxproj.filters
new file mode 100755
index 0000000..5b10dc8
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/VisualStudio2010/sixense_simple3d/sixense_simple3d.vcxproj.filters
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source">
+ <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+ <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\progs\demos\sixense_simple3d\sixense_simple3d.c">
+ <Filter>Source</Filter>
+ </ClCompile>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/SixenseSDK/src/sixense_simple3d/Xcode/.DS_Store b/SixenseSDK/src/sixense_simple3d/Xcode/.DS_Store
new file mode 100755
index 0000000..3f39355
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/Xcode/.DS_Store
Binary files differ
diff --git a/SixenseSDK/src/sixense_simple3d/Xcode/freeglut.xcodeproj/project.pbxproj b/SixenseSDK/src/sixense_simple3d/Xcode/freeglut.xcodeproj/project.pbxproj
new file mode 100755
index 0000000..5d251ed
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/Xcode/freeglut.xcodeproj/project.pbxproj
@@ -0,0 +1,713 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 46;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 21839AB61484017900F978BA /* libsixense.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 21839AB51484017900F978BA /* libsixense.dylib */; };
+ 21839AB81484018D00F978BA /* libsixense_utils.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 21839AB71484018D00F978BA /* libsixense_utils.dylib */; };
+ 21839AB91484019700F978BA /* libfreeglut.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2185354B147DD0D500C24A68 /* libfreeglut.dylib */; };
+ 21839ABC148402EE00F978BA /* sixense_simple3d.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 21839ABA148402DD00F978BA /* sixense_simple3d.cpp */; };
+ 21839AD01484046100F978BA /* glut.h in Headers */ = {isa = PBXBuildFile; fileRef = 21853588147DD1F300C24A68 /* glut.h */; };
+ 21839AD11484046400F978BA /* freeglut_stroke_mono_roman.c in Sources */ = {isa = PBXBuildFile; fileRef = 2185357A147DD1E800C24A68 /* freeglut_stroke_mono_roman.c */; };
+ 21839AD21484046800F978BA /* freeglut_stroke_roman.c in Sources */ = {isa = PBXBuildFile; fileRef = 2185357B147DD1E800C24A68 /* freeglut_stroke_roman.c */; };
+ 21839AD31484046B00F978BA /* freeglut_structure.c in Sources */ = {isa = PBXBuildFile; fileRef = 2185357C147DD1E800C24A68 /* freeglut_structure.c */; };
+ 21839AD41484046E00F978BA /* freeglut_teapot_data.h in Headers */ = {isa = PBXBuildFile; fileRef = 2185357D147DD1E800C24A68 /* freeglut_teapot_data.h */; };
+ 21839AD51484047100F978BA /* freeglut_teapot.c in Sources */ = {isa = PBXBuildFile; fileRef = 2185357E147DD1E800C24A68 /* freeglut_teapot.c */; };
+ 21839AD61484047500F978BA /* freeglut_videoresize.c in Sources */ = {isa = PBXBuildFile; fileRef = 2185357F147DD1E800C24A68 /* freeglut_videoresize.c */; };
+ 21839AD71484047900F978BA /* freeglut_window.c in Sources */ = {isa = PBXBuildFile; fileRef = 21853580147DD1E800C24A68 /* freeglut_window.c */; };
+ 21839AD81484047C00F978BA /* freeglut_std.h in Headers */ = {isa = PBXBuildFile; fileRef = 21853578147DD1BE00C24A68 /* freeglut_std.h */; };
+ 21839AD91484048000F978BA /* freeglut_font_data.c in Sources */ = {isa = PBXBuildFile; fileRef = 2185355A147DD1B300C24A68 /* freeglut_font_data.c */; };
+ 21839ADA1484048900F978BA /* freeglut_font.c in Sources */ = {isa = PBXBuildFile; fileRef = 2185355B147DD1B300C24A68 /* freeglut_font.c */; };
+ 21839ADB1484048D00F978BA /* freeglut_gamemode.c in Sources */ = {isa = PBXBuildFile; fileRef = 2185355C147DD1B300C24A68 /* freeglut_gamemode.c */; };
+ 21839ADC1484049100F978BA /* freeglut_geometry.c in Sources */ = {isa = PBXBuildFile; fileRef = 2185355D147DD1B300C24A68 /* freeglut_geometry.c */; };
+ 21839ADD1484049400F978BA /* freeglut_glutfont_definitions.c in Sources */ = {isa = PBXBuildFile; fileRef = 2185355E147DD1B300C24A68 /* freeglut_glutfont_definitions.c */; };
+ 21839ADE1484049700F978BA /* freeglut_init.c in Sources */ = {isa = PBXBuildFile; fileRef = 2185355F147DD1B300C24A68 /* freeglut_init.c */; };
+ 21839ADF1484049B00F978BA /* freeglut_input_devices.c in Sources */ = {isa = PBXBuildFile; fileRef = 21853560147DD1B300C24A68 /* freeglut_input_devices.c */; };
+ 21839AE01484049F00F978BA /* freeglut_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 21853561147DD1B300C24A68 /* freeglut_internal.h */; };
+ 21839AE1148404A200F978BA /* freeglut_joystick.c in Sources */ = {isa = PBXBuildFile; fileRef = 21853562147DD1B300C24A68 /* freeglut_joystick.c */; };
+ 21839AE2148404A600F978BA /* freeglut_main.c in Sources */ = {isa = PBXBuildFile; fileRef = 21853563147DD1B300C24A68 /* freeglut_main.c */; };
+ 21839AE3148404A900F978BA /* freeglut_menu.c in Sources */ = {isa = PBXBuildFile; fileRef = 21853564147DD1B300C24A68 /* freeglut_menu.c */; };
+ 21839AE4148404AC00F978BA /* freeglut_misc.c in Sources */ = {isa = PBXBuildFile; fileRef = 21853565147DD1B300C24A68 /* freeglut_misc.c */; };
+ 21839AE5148404B000F978BA /* freeglut_overlay.c in Sources */ = {isa = PBXBuildFile; fileRef = 21853566147DD1B300C24A68 /* freeglut_overlay.c */; };
+ 21839AE6148404B300F978BA /* freeglut_spaceball.c in Sources */ = {isa = PBXBuildFile; fileRef = 21853567147DD1B300C24A68 /* freeglut_spaceball.c */; };
+ 21839AE7148404B700F978BA /* freeglut_state.c in Sources */ = {isa = PBXBuildFile; fileRef = 21853568147DD1B300C24A68 /* freeglut_state.c */; };
+ 21839AE8148404BA00F978BA /* freeglut_ext.h in Headers */ = {isa = PBXBuildFile; fileRef = 21853558147DD17300C24A68 /* freeglut_ext.h */; };
+ 21839AE9148404BD00F978BA /* freeglut_callbacks.c in Sources */ = {isa = PBXBuildFile; fileRef = 21853550147DD16200C24A68 /* freeglut_callbacks.c */; };
+ 21839AEA148404C000F978BA /* freeglut_cursor.c in Sources */ = {isa = PBXBuildFile; fileRef = 21853551147DD16200C24A68 /* freeglut_cursor.c */; };
+ 21839AEB148404C300F978BA /* freeglut_display.c in Sources */ = {isa = PBXBuildFile; fileRef = 21853552147DD16200C24A68 /* freeglut_display.c */; };
+ 21839AEC148404C700F978BA /* freeglut_ext.c in Sources */ = {isa = PBXBuildFile; fileRef = 21853553147DD16200C24A68 /* freeglut_ext.c */; };
+ 21839AED148404D600F978BA /* sixense_simple3d.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 21839ABA148402DD00F978BA /* sixense_simple3d.cpp */; };
+ 21839AEF148404EE00F978BA /* libsixense_x64.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 21839AEE148404EE00F978BA /* libsixense_x64.dylib */; };
+ 21839AF21484050700F978BA /* libfreeglut.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 21839A9E1484005200F978BA /* libfreeglut.dylib */; };
+ 21853554147DD16200C24A68 /* freeglut_callbacks.c in Sources */ = {isa = PBXBuildFile; fileRef = 21853550147DD16200C24A68 /* freeglut_callbacks.c */; };
+ 21853555147DD16200C24A68 /* freeglut_cursor.c in Sources */ = {isa = PBXBuildFile; fileRef = 21853551147DD16200C24A68 /* freeglut_cursor.c */; };
+ 21853556147DD16200C24A68 /* freeglut_display.c in Sources */ = {isa = PBXBuildFile; fileRef = 21853552147DD16200C24A68 /* freeglut_display.c */; };
+ 21853557147DD16200C24A68 /* freeglut_ext.c in Sources */ = {isa = PBXBuildFile; fileRef = 21853553147DD16200C24A68 /* freeglut_ext.c */; };
+ 21853559147DD17300C24A68 /* freeglut_ext.h in Headers */ = {isa = PBXBuildFile; fileRef = 21853558147DD17300C24A68 /* freeglut_ext.h */; };
+ 21853569147DD1B300C24A68 /* freeglut_font_data.c in Sources */ = {isa = PBXBuildFile; fileRef = 2185355A147DD1B300C24A68 /* freeglut_font_data.c */; };
+ 2185356A147DD1B300C24A68 /* freeglut_font.c in Sources */ = {isa = PBXBuildFile; fileRef = 2185355B147DD1B300C24A68 /* freeglut_font.c */; };
+ 2185356B147DD1B300C24A68 /* freeglut_gamemode.c in Sources */ = {isa = PBXBuildFile; fileRef = 2185355C147DD1B300C24A68 /* freeglut_gamemode.c */; };
+ 2185356C147DD1B300C24A68 /* freeglut_geometry.c in Sources */ = {isa = PBXBuildFile; fileRef = 2185355D147DD1B300C24A68 /* freeglut_geometry.c */; };
+ 2185356D147DD1B300C24A68 /* freeglut_glutfont_definitions.c in Sources */ = {isa = PBXBuildFile; fileRef = 2185355E147DD1B300C24A68 /* freeglut_glutfont_definitions.c */; };
+ 2185356E147DD1B300C24A68 /* freeglut_init.c in Sources */ = {isa = PBXBuildFile; fileRef = 2185355F147DD1B300C24A68 /* freeglut_init.c */; };
+ 2185356F147DD1B300C24A68 /* freeglut_input_devices.c in Sources */ = {isa = PBXBuildFile; fileRef = 21853560147DD1B300C24A68 /* freeglut_input_devices.c */; };
+ 21853570147DD1B300C24A68 /* freeglut_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 21853561147DD1B300C24A68 /* freeglut_internal.h */; };
+ 21853571147DD1B300C24A68 /* freeglut_joystick.c in Sources */ = {isa = PBXBuildFile; fileRef = 21853562147DD1B300C24A68 /* freeglut_joystick.c */; };
+ 21853572147DD1B300C24A68 /* freeglut_main.c in Sources */ = {isa = PBXBuildFile; fileRef = 21853563147DD1B300C24A68 /* freeglut_main.c */; };
+ 21853573147DD1B300C24A68 /* freeglut_menu.c in Sources */ = {isa = PBXBuildFile; fileRef = 21853564147DD1B300C24A68 /* freeglut_menu.c */; };
+ 21853574147DD1B300C24A68 /* freeglut_misc.c in Sources */ = {isa = PBXBuildFile; fileRef = 21853565147DD1B300C24A68 /* freeglut_misc.c */; };
+ 21853575147DD1B300C24A68 /* freeglut_overlay.c in Sources */ = {isa = PBXBuildFile; fileRef = 21853566147DD1B300C24A68 /* freeglut_overlay.c */; };
+ 21853576147DD1B300C24A68 /* freeglut_spaceball.c in Sources */ = {isa = PBXBuildFile; fileRef = 21853567147DD1B300C24A68 /* freeglut_spaceball.c */; };
+ 21853577147DD1B300C24A68 /* freeglut_state.c in Sources */ = {isa = PBXBuildFile; fileRef = 21853568147DD1B300C24A68 /* freeglut_state.c */; };
+ 21853579147DD1BE00C24A68 /* freeglut_std.h in Headers */ = {isa = PBXBuildFile; fileRef = 21853578147DD1BE00C24A68 /* freeglut_std.h */; };
+ 21853581147DD1E800C24A68 /* freeglut_stroke_mono_roman.c in Sources */ = {isa = PBXBuildFile; fileRef = 2185357A147DD1E800C24A68 /* freeglut_stroke_mono_roman.c */; };
+ 21853582147DD1E800C24A68 /* freeglut_stroke_roman.c in Sources */ = {isa = PBXBuildFile; fileRef = 2185357B147DD1E800C24A68 /* freeglut_stroke_roman.c */; };
+ 21853583147DD1E800C24A68 /* freeglut_structure.c in Sources */ = {isa = PBXBuildFile; fileRef = 2185357C147DD1E800C24A68 /* freeglut_structure.c */; };
+ 21853584147DD1E800C24A68 /* freeglut_teapot_data.h in Headers */ = {isa = PBXBuildFile; fileRef = 2185357D147DD1E800C24A68 /* freeglut_teapot_data.h */; };
+ 21853585147DD1E800C24A68 /* freeglut_teapot.c in Sources */ = {isa = PBXBuildFile; fileRef = 2185357E147DD1E800C24A68 /* freeglut_teapot.c */; };
+ 21853586147DD1E800C24A68 /* freeglut_videoresize.c in Sources */ = {isa = PBXBuildFile; fileRef = 2185357F147DD1E800C24A68 /* freeglut_videoresize.c */; };
+ 21853587147DD1E800C24A68 /* freeglut_window.c in Sources */ = {isa = PBXBuildFile; fileRef = 21853580147DD1E800C24A68 /* freeglut_window.c */; };
+ 21853589147DD1F300C24A68 /* glut.h in Headers */ = {isa = PBXBuildFile; fileRef = 21853588147DD1F300C24A68 /* glut.h */; };
+ 2187B7E214841FF400C2F1D6 /* libsixense_utils_x64.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 21839AF0148404FA00F978BA /* libsixense_utils_x64.dylib */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ 21839AA41484007F00F978BA /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = /usr/share/man/man1/;
+ dstSubfolderSpec = 0;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ 21839AC3148403C400F978BA /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = /usr/share/man/man1/;
+ dstSubfolderSpec = 0;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+ 21839A9E1484005200F978BA /* libfreeglut.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libfreeglut.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
+ 21839AA61484007F00F978BA /* sixense_simple3d */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = "compiled.mach-o.executable"; path = sixense_simple3d; sourceTree = BUILT_PRODUCTS_DIR; };
+ 21839AB51484017900F978BA /* libsixense.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libsixense.dylib; path = ../../../lib/OSX/release_dll/libsixense.dylib; sourceTree = SOURCE_ROOT; };
+ 21839AB71484018D00F978BA /* libsixense_utils.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libsixense_utils.dylib; path = ../../../lib/OSX/release_dll/libsixense_utils.dylib; sourceTree = SOURCE_ROOT; };
+ 21839ABA148402DD00F978BA /* sixense_simple3d.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = sixense_simple3d.cpp; path = ../progs/demos/sixense_simple3d/sixense_simple3d.cpp; sourceTree = SOURCE_ROOT; };
+ 21839AC5148403C400F978BA /* sixense_simple3d */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = sixense_simple3d; sourceTree = BUILT_PRODUCTS_DIR; };
+ 21839AEE148404EE00F978BA /* libsixense_x64.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libsixense_x64.dylib; path = ../../../lib/OSX_x64/release_dll/libsixense_x64.dylib; sourceTree = SOURCE_ROOT; };
+ 21839AF0148404FA00F978BA /* libsixense_utils_x64.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libsixense_utils_x64.dylib; path = ../../../lib/OSX_x64/release_dll/libsixense_utils_x64.dylib; sourceTree = SOURCE_ROOT; };
+ 2185354B147DD0D500C24A68 /* libfreeglut.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libfreeglut.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
+ 21853550147DD16200C24A68 /* freeglut_callbacks.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = freeglut_callbacks.c; path = ../src/freeglut_callbacks.c; sourceTree = SOURCE_ROOT; };
+ 21853551147DD16200C24A68 /* freeglut_cursor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = freeglut_cursor.c; path = ../src/freeglut_cursor.c; sourceTree = SOURCE_ROOT; };
+ 21853552147DD16200C24A68 /* freeglut_display.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = freeglut_display.c; path = ../src/freeglut_display.c; sourceTree = SOURCE_ROOT; };
+ 21853553147DD16200C24A68 /* freeglut_ext.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = freeglut_ext.c; path = ../src/freeglut_ext.c; sourceTree = SOURCE_ROOT; };
+ 21853558147DD17300C24A68 /* freeglut_ext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = freeglut_ext.h; path = ../include/GL/freeglut_ext.h; sourceTree = SOURCE_ROOT; };
+ 2185355A147DD1B300C24A68 /* freeglut_font_data.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = freeglut_font_data.c; path = ../src/freeglut_font_data.c; sourceTree = SOURCE_ROOT; };
+ 2185355B147DD1B300C24A68 /* freeglut_font.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = freeglut_font.c; path = ../src/freeglut_font.c; sourceTree = SOURCE_ROOT; };
+ 2185355C147DD1B300C24A68 /* freeglut_gamemode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = freeglut_gamemode.c; path = ../src/freeglut_gamemode.c; sourceTree = SOURCE_ROOT; };
+ 2185355D147DD1B300C24A68 /* freeglut_geometry.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = freeglut_geometry.c; path = ../src/freeglut_geometry.c; sourceTree = SOURCE_ROOT; };
+ 2185355E147DD1B300C24A68 /* freeglut_glutfont_definitions.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = freeglut_glutfont_definitions.c; path = ../src/freeglut_glutfont_definitions.c; sourceTree = SOURCE_ROOT; };
+ 2185355F147DD1B300C24A68 /* freeglut_init.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = freeglut_init.c; path = ../src/freeglut_init.c; sourceTree = SOURCE_ROOT; };
+ 21853560147DD1B300C24A68 /* freeglut_input_devices.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = freeglut_input_devices.c; path = ../src/freeglut_input_devices.c; sourceTree = SOURCE_ROOT; };
+ 21853561147DD1B300C24A68 /* freeglut_internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = freeglut_internal.h; path = ../src/freeglut_internal.h; sourceTree = SOURCE_ROOT; };
+ 21853562147DD1B300C24A68 /* freeglut_joystick.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = freeglut_joystick.c; path = ../src/freeglut_joystick.c; sourceTree = SOURCE_ROOT; };
+ 21853563147DD1B300C24A68 /* freeglut_main.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = freeglut_main.c; path = ../src/freeglut_main.c; sourceTree = SOURCE_ROOT; };
+ 21853564147DD1B300C24A68 /* freeglut_menu.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = freeglut_menu.c; path = ../src/freeglut_menu.c; sourceTree = SOURCE_ROOT; };
+ 21853565147DD1B300C24A68 /* freeglut_misc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = freeglut_misc.c; path = ../src/freeglut_misc.c; sourceTree = SOURCE_ROOT; };
+ 21853566147DD1B300C24A68 /* freeglut_overlay.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = freeglut_overlay.c; path = ../src/freeglut_overlay.c; sourceTree = SOURCE_ROOT; };
+ 21853567147DD1B300C24A68 /* freeglut_spaceball.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = freeglut_spaceball.c; path = ../src/freeglut_spaceball.c; sourceTree = SOURCE_ROOT; };
+ 21853568147DD1B300C24A68 /* freeglut_state.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = freeglut_state.c; path = ../src/freeglut_state.c; sourceTree = SOURCE_ROOT; };
+ 21853578147DD1BE00C24A68 /* freeglut_std.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = freeglut_std.h; path = ../include/GL/freeglut_std.h; sourceTree = SOURCE_ROOT; };
+ 2185357A147DD1E800C24A68 /* freeglut_stroke_mono_roman.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = freeglut_stroke_mono_roman.c; path = ../src/freeglut_stroke_mono_roman.c; sourceTree = SOURCE_ROOT; };
+ 2185357B147DD1E800C24A68 /* freeglut_stroke_roman.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = freeglut_stroke_roman.c; path = ../src/freeglut_stroke_roman.c; sourceTree = SOURCE_ROOT; };
+ 2185357C147DD1E800C24A68 /* freeglut_structure.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = freeglut_structure.c; path = ../src/freeglut_structure.c; sourceTree = SOURCE_ROOT; };
+ 2185357D147DD1E800C24A68 /* freeglut_teapot_data.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = freeglut_teapot_data.h; path = ../src/freeglut_teapot_data.h; sourceTree = SOURCE_ROOT; };
+ 2185357E147DD1E800C24A68 /* freeglut_teapot.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = freeglut_teapot.c; path = ../src/freeglut_teapot.c; sourceTree = SOURCE_ROOT; };
+ 2185357F147DD1E800C24A68 /* freeglut_videoresize.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = freeglut_videoresize.c; path = ../src/freeglut_videoresize.c; sourceTree = SOURCE_ROOT; };
+ 21853580147DD1E800C24A68 /* freeglut_window.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = freeglut_window.c; path = ../src/freeglut_window.c; sourceTree = SOURCE_ROOT; };
+ 21853588147DD1F300C24A68 /* glut.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = glut.h; path = ../include/GL/glut.h; sourceTree = SOURCE_ROOT; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 21839A9B1484005200F978BA /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 21839AA31484007F00F978BA /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 21839AB91484019700F978BA /* libfreeglut.dylib in Frameworks */,
+ 21839AB81484018D00F978BA /* libsixense_utils.dylib in Frameworks */,
+ 21839AB61484017900F978BA /* libsixense.dylib in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 21839AC2148403C400F978BA /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 21839AF21484050700F978BA /* libfreeglut.dylib in Frameworks */,
+ 21839AEF148404EE00F978BA /* libsixense_x64.dylib in Frameworks */,
+ 2187B7E214841FF400C2F1D6 /* libsixense_utils_x64.dylib in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 21853548147DD0D500C24A68 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 21839A721483FFB200F978BA /* sixense_simple3d */ = {
+ isa = PBXGroup;
+ children = (
+ 21839ABA148402DD00F978BA /* sixense_simple3d.cpp */,
+ );
+ name = sixense_simple3d;
+ sourceTree = "<group>";
+ };
+ 21853532147DD0AB00C24A68 = {
+ isa = PBXGroup;
+ children = (
+ 21839AF0148404FA00F978BA /* libsixense_utils_x64.dylib */,
+ 21839AEE148404EE00F978BA /* libsixense_x64.dylib */,
+ 21839AB71484018D00F978BA /* libsixense_utils.dylib */,
+ 21839AB51484017900F978BA /* libsixense.dylib */,
+ 21839A721483FFB200F978BA /* sixense_simple3d */,
+ 2185358A147DD20400C24A68 /* freeglut */,
+ 2185353E147DD0AB00C24A68 /* Products */,
+ );
+ sourceTree = "<group>";
+ };
+ 2185353E147DD0AB00C24A68 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 2185354B147DD0D500C24A68 /* libfreeglut.dylib */,
+ 21839A9E1484005200F978BA /* libfreeglut.dylib */,
+ 21839AA61484007F00F978BA /* sixense_simple3d */,
+ 21839AC5148403C400F978BA /* sixense_simple3d */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ 2185358A147DD20400C24A68 /* freeglut */ = {
+ isa = PBXGroup;
+ children = (
+ 21853588147DD1F300C24A68 /* glut.h */,
+ 2185357A147DD1E800C24A68 /* freeglut_stroke_mono_roman.c */,
+ 2185357B147DD1E800C24A68 /* freeglut_stroke_roman.c */,
+ 2185357C147DD1E800C24A68 /* freeglut_structure.c */,
+ 2185357D147DD1E800C24A68 /* freeglut_teapot_data.h */,
+ 2185357E147DD1E800C24A68 /* freeglut_teapot.c */,
+ 2185357F147DD1E800C24A68 /* freeglut_videoresize.c */,
+ 21853580147DD1E800C24A68 /* freeglut_window.c */,
+ 21853578147DD1BE00C24A68 /* freeglut_std.h */,
+ 2185355A147DD1B300C24A68 /* freeglut_font_data.c */,
+ 2185355B147DD1B300C24A68 /* freeglut_font.c */,
+ 2185355C147DD1B300C24A68 /* freeglut_gamemode.c */,
+ 2185355D147DD1B300C24A68 /* freeglut_geometry.c */,
+ 2185355E147DD1B300C24A68 /* freeglut_glutfont_definitions.c */,
+ 2185355F147DD1B300C24A68 /* freeglut_init.c */,
+ 21853560147DD1B300C24A68 /* freeglut_input_devices.c */,
+ 21853561147DD1B300C24A68 /* freeglut_internal.h */,
+ 21853562147DD1B300C24A68 /* freeglut_joystick.c */,
+ 21853563147DD1B300C24A68 /* freeglut_main.c */,
+ 21853564147DD1B300C24A68 /* freeglut_menu.c */,
+ 21853565147DD1B300C24A68 /* freeglut_misc.c */,
+ 21853566147DD1B300C24A68 /* freeglut_overlay.c */,
+ 21853567147DD1B300C24A68 /* freeglut_spaceball.c */,
+ 21853568147DD1B300C24A68 /* freeglut_state.c */,
+ 21853558147DD17300C24A68 /* freeglut_ext.h */,
+ 21853550147DD16200C24A68 /* freeglut_callbacks.c */,
+ 21853551147DD16200C24A68 /* freeglut_cursor.c */,
+ 21853552147DD16200C24A68 /* freeglut_display.c */,
+ 21853553147DD16200C24A68 /* freeglut_ext.c */,
+ );
+ name = freeglut;
+ sourceTree = "<group>";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXHeadersBuildPhase section */
+ 21839A9C1484005200F978BA /* Headers */ = {
+ isa = PBXHeadersBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 21839AD01484046100F978BA /* glut.h in Headers */,
+ 21839AD41484046E00F978BA /* freeglut_teapot_data.h in Headers */,
+ 21839AD81484047C00F978BA /* freeglut_std.h in Headers */,
+ 21839AE01484049F00F978BA /* freeglut_internal.h in Headers */,
+ 21839AE8148404BA00F978BA /* freeglut_ext.h in Headers */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 21853549147DD0D500C24A68 /* Headers */ = {
+ isa = PBXHeadersBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 21853559147DD17300C24A68 /* freeglut_ext.h in Headers */,
+ 21853570147DD1B300C24A68 /* freeglut_internal.h in Headers */,
+ 21853579147DD1BE00C24A68 /* freeglut_std.h in Headers */,
+ 21853584147DD1E800C24A68 /* freeglut_teapot_data.h in Headers */,
+ 21853589147DD1F300C24A68 /* glut.h in Headers */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXHeadersBuildPhase section */
+
+/* Begin PBXNativeTarget section */
+ 21839A9D1484005200F978BA /* freeglut_x86_64 */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 21839A9F1484005200F978BA /* Build configuration list for PBXNativeTarget "freeglut_x86_64" */;
+ buildPhases = (
+ 21839A9A1484005200F978BA /* Sources */,
+ 21839A9B1484005200F978BA /* Frameworks */,
+ 21839A9C1484005200F978BA /* Headers */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = freeglut_x86_64;
+ productName = freeglut_x86_64;
+ productReference = 21839A9E1484005200F978BA /* libfreeglut.dylib */;
+ productType = "com.apple.product-type.library.dynamic";
+ };
+ 21839AA51484007F00F978BA /* sixense_simple3d_i386 */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 21839AAD1484007F00F978BA /* Build configuration list for PBXNativeTarget "sixense_simple3d_i386" */;
+ buildPhases = (
+ 21839AA21484007F00F978BA /* Sources */,
+ 21839AA31484007F00F978BA /* Frameworks */,
+ 21839AA41484007F00F978BA /* CopyFiles */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = sixense_simple3d_i386;
+ productName = sixense_simple3d_i386;
+ productReference = 21839AA61484007F00F978BA /* sixense_simple3d */;
+ productType = "com.apple.product-type.tool";
+ };
+ 21839AC4148403C400F978BA /* sixense_simple3d_x86_64 */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 21839ACE148403C400F978BA /* Build configuration list for PBXNativeTarget "sixense_simple3d_x86_64" */;
+ buildPhases = (
+ 21839AC1148403C400F978BA /* Sources */,
+ 21839AC2148403C400F978BA /* Frameworks */,
+ 21839AC3148403C400F978BA /* CopyFiles */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = sixense_simple3d_x86_64;
+ productName = sixense_simple3d_x86_64;
+ productReference = 21839AC5148403C400F978BA /* sixense_simple3d */;
+ productType = "com.apple.product-type.tool";
+ };
+ 2185354A147DD0D500C24A68 /* freeglut_i386 */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 2185354E147DD0D500C24A68 /* Build configuration list for PBXNativeTarget "freeglut_i386" */;
+ buildPhases = (
+ 21853547147DD0D500C24A68 /* Sources */,
+ 21853548147DD0D500C24A68 /* Frameworks */,
+ 21853549147DD0D500C24A68 /* Headers */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = freeglut_i386;
+ productName = freeglut_i386;
+ productReference = 2185354B147DD0D500C24A68 /* libfreeglut.dylib */;
+ productType = "com.apple.product-type.library.dynamic";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 21853534147DD0AB00C24A68 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ LastUpgradeCheck = 0420;
+ };
+ buildConfigurationList = 21853537147DD0AB00C24A68 /* Build configuration list for PBXProject "freeglut" */;
+ compatibilityVersion = "Xcode 3.2";
+ developmentRegion = English;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ );
+ mainGroup = 21853532147DD0AB00C24A68;
+ productRefGroup = 2185353E147DD0AB00C24A68 /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 2185354A147DD0D500C24A68 /* freeglut_i386 */,
+ 21839A9D1484005200F978BA /* freeglut_x86_64 */,
+ 21839AA51484007F00F978BA /* sixense_simple3d_i386 */,
+ 21839AC4148403C400F978BA /* sixense_simple3d_x86_64 */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 21839A9A1484005200F978BA /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 21839AD11484046400F978BA /* freeglut_stroke_mono_roman.c in Sources */,
+ 21839AD21484046800F978BA /* freeglut_stroke_roman.c in Sources */,
+ 21839AD31484046B00F978BA /* freeglut_structure.c in Sources */,
+ 21839AD51484047100F978BA /* freeglut_teapot.c in Sources */,
+ 21839AD61484047500F978BA /* freeglut_videoresize.c in Sources */,
+ 21839AD71484047900F978BA /* freeglut_window.c in Sources */,
+ 21839AD91484048000F978BA /* freeglut_font_data.c in Sources */,
+ 21839ADA1484048900F978BA /* freeglut_font.c in Sources */,
+ 21839ADB1484048D00F978BA /* freeglut_gamemode.c in Sources */,
+ 21839ADC1484049100F978BA /* freeglut_geometry.c in Sources */,
+ 21839ADD1484049400F978BA /* freeglut_glutfont_definitions.c in Sources */,
+ 21839ADE1484049700F978BA /* freeglut_init.c in Sources */,
+ 21839ADF1484049B00F978BA /* freeglut_input_devices.c in Sources */,
+ 21839AE1148404A200F978BA /* freeglut_joystick.c in Sources */,
+ 21839AE2148404A600F978BA /* freeglut_main.c in Sources */,
+ 21839AE3148404A900F978BA /* freeglut_menu.c in Sources */,
+ 21839AE4148404AC00F978BA /* freeglut_misc.c in Sources */,
+ 21839AE5148404B000F978BA /* freeglut_overlay.c in Sources */,
+ 21839AE6148404B300F978BA /* freeglut_spaceball.c in Sources */,
+ 21839AE7148404B700F978BA /* freeglut_state.c in Sources */,
+ 21839AE9148404BD00F978BA /* freeglut_callbacks.c in Sources */,
+ 21839AEA148404C000F978BA /* freeglut_cursor.c in Sources */,
+ 21839AEB148404C300F978BA /* freeglut_display.c in Sources */,
+ 21839AEC148404C700F978BA /* freeglut_ext.c in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 21839AA21484007F00F978BA /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 21839ABC148402EE00F978BA /* sixense_simple3d.cpp in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 21839AC1148403C400F978BA /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 21839AED148404D600F978BA /* sixense_simple3d.cpp in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 21853547147DD0D500C24A68 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 21853554147DD16200C24A68 /* freeglut_callbacks.c in Sources */,
+ 21853555147DD16200C24A68 /* freeglut_cursor.c in Sources */,
+ 21853556147DD16200C24A68 /* freeglut_display.c in Sources */,
+ 21853557147DD16200C24A68 /* freeglut_ext.c in Sources */,
+ 21853569147DD1B300C24A68 /* freeglut_font_data.c in Sources */,
+ 2185356A147DD1B300C24A68 /* freeglut_font.c in Sources */,
+ 2185356B147DD1B300C24A68 /* freeglut_gamemode.c in Sources */,
+ 2185356C147DD1B300C24A68 /* freeglut_geometry.c in Sources */,
+ 2185356D147DD1B300C24A68 /* freeglut_glutfont_definitions.c in Sources */,
+ 2185356E147DD1B300C24A68 /* freeglut_init.c in Sources */,
+ 2185356F147DD1B300C24A68 /* freeglut_input_devices.c in Sources */,
+ 21853571147DD1B300C24A68 /* freeglut_joystick.c in Sources */,
+ 21853572147DD1B300C24A68 /* freeglut_main.c in Sources */,
+ 21853573147DD1B300C24A68 /* freeglut_menu.c in Sources */,
+ 21853574147DD1B300C24A68 /* freeglut_misc.c in Sources */,
+ 21853575147DD1B300C24A68 /* freeglut_overlay.c in Sources */,
+ 21853576147DD1B300C24A68 /* freeglut_spaceball.c in Sources */,
+ 21853577147DD1B300C24A68 /* freeglut_state.c in Sources */,
+ 21853581147DD1E800C24A68 /* freeglut_stroke_mono_roman.c in Sources */,
+ 21853582147DD1E800C24A68 /* freeglut_stroke_roman.c in Sources */,
+ 21853583147DD1E800C24A68 /* freeglut_structure.c in Sources */,
+ 21853585147DD1E800C24A68 /* freeglut_teapot.c in Sources */,
+ 21853586147DD1E800C24A68 /* freeglut_videoresize.c in Sources */,
+ 21853587147DD1E800C24A68 /* freeglut_window.c in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+ 21839AA01484005200F978BA /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = YES;
+ ARCHS = "$(ARCHS_STANDARD_64_BIT)";
+ EXECUTABLE_EXTENSION = dylib;
+ EXECUTABLE_PREFIX = lib;
+ GCC_VERSION = com.apple.compilers.llvmgcc42;
+ INSTALL_PATH = "@executable_path";
+ LIBRARY_SEARCH_PATHS = "$(DEVELOPER_SDK_DIR)/MacOSX$(MACOSX_DEPLOYMENT_TARGET).sdk/usr/X11/lib";
+ MACH_O_TYPE = mh_dylib;
+ OTHER_LDFLAGS = (
+ "-lX11",
+ "-lGL",
+ );
+ PRODUCT_NAME = freeglut;
+ USER_HEADER_SEARCH_PATHS = "$(DEVELOPER_SDK_DIR)/MacOSX$(MACOSX_DEPLOYMENT_TARGET).sdk/usr/X11/include $(SRCROOT)/../include";
+ };
+ name = Debug;
+ };
+ 21839AA11484005200F978BA /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = YES;
+ ARCHS = "$(ARCHS_STANDARD_64_BIT)";
+ EXECUTABLE_EXTENSION = dylib;
+ EXECUTABLE_PREFIX = lib;
+ GCC_VERSION = com.apple.compilers.llvmgcc42;
+ INSTALL_PATH = "@executable_path";
+ LIBRARY_SEARCH_PATHS = "$(DEVELOPER_SDK_DIR)/MacOSX$(MACOSX_DEPLOYMENT_TARGET).sdk/usr/X11/lib";
+ MACH_O_TYPE = mh_dylib;
+ OTHER_LDFLAGS = (
+ "-lX11",
+ "-lGL",
+ );
+ PRODUCT_NAME = freeglut;
+ USER_HEADER_SEARCH_PATHS = "$(DEVELOPER_SDK_DIR)/MacOSX$(MACOSX_DEPLOYMENT_TARGET).sdk/usr/X11/include $(SRCROOT)/../include";
+ };
+ name = Release;
+ };
+ 21839AAE1484007F00F978BA /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = YES;
+ ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+ GCC_VERSION = com.apple.compilers.llvmgcc42;
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "\"$(SRCROOT)/../../../lib/OSX/release_dll\"",
+ "$(DEVELOPER_SDK_DIR)/MacOSX$(MACOSX_DEPLOYMENT_TARGET).sdk/usr/X11/lib",
+ );
+ OTHER_LDFLAGS = (
+ "-lX11",
+ "-lGL",
+ );
+ PRODUCT_NAME = sixense_simple3d;
+ USER_HEADER_SEARCH_PATHS = "$(DEVELOPER_SDK_DIR)/MacOSX$(MACOSX_DEPLOYMENT_TARGET).sdk/usr/X11/include $(SRCROOT)/../include $(SRCROOT)/../../../include $(SRCROOT)/../../../include/sixense_utils";
+ };
+ name = Debug;
+ };
+ 21839AAF1484007F00F978BA /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = YES;
+ ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+ GCC_VERSION = com.apple.compilers.llvmgcc42;
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "\"$(SRCROOT)/../../../lib/OSX/release_dll\"",
+ "$(DEVELOPER_SDK_DIR)/MacOSX$(MACOSX_DEPLOYMENT_TARGET).sdk/usr/X11/lib",
+ );
+ OTHER_LDFLAGS = (
+ "-lX11",
+ "-lGL",
+ );
+ PRODUCT_NAME = sixense_simple3d;
+ USER_HEADER_SEARCH_PATHS = "$(DEVELOPER_SDK_DIR)/MacOSX$(MACOSX_DEPLOYMENT_TARGET).sdk/usr/X11/include $(SRCROOT)/../include $(SRCROOT)/../../../include $(SRCROOT)/../../../include/sixense_utils";
+ };
+ name = Release;
+ };
+ 21839ACC148403C400F978BA /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = YES;
+ ARCHS = "$(ARCHS_STANDARD_64_BIT)";
+ GCC_VERSION = com.apple.compilers.llvmgcc42;
+ LD_DYLIB_INSTALL_NAME = "";
+ LD_RUNPATH_SEARCH_PATHS = "";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "\"$(SRCROOT)/../../../lib/OSX_x64/release_dll\"",
+ "$(DEVELOPER_SDK_DIR)/MacOSX$(MACOSX_DEPLOYMENT_TARGET).sdk/usr/X11/lib",
+ );
+ OTHER_LDFLAGS = (
+ "-lX11",
+ "-lGL",
+ );
+ PRODUCT_NAME = sixense_simple3d;
+ USER_HEADER_SEARCH_PATHS = "$(DEVELOPER_SDK_DIR)/MacOSX$(MACOSX_DEPLOYMENT_TARGET).sdk/usr/X11/include $(SRCROOT)/../include $(SRCROOT)/../../../include $(SRCROOT)/../../../include/sixense_utils";
+ };
+ name = Debug;
+ };
+ 21839ACD148403C400F978BA /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = YES;
+ ARCHS = "$(ARCHS_STANDARD_64_BIT)";
+ GCC_VERSION = com.apple.compilers.llvmgcc42;
+ LD_DYLIB_INSTALL_NAME = "";
+ LD_RUNPATH_SEARCH_PATHS = "";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "\"$(SRCROOT)/../../../lib/OSX_x64/release_dll\"",
+ "$(DEVELOPER_SDK_DIR)/MacOSX$(MACOSX_DEPLOYMENT_TARGET).sdk/usr/X11/lib",
+ );
+ OTHER_LDFLAGS = (
+ "-lX11",
+ "-lGL",
+ );
+ PRODUCT_NAME = sixense_simple3d;
+ USER_HEADER_SEARCH_PATHS = "$(DEVELOPER_SDK_DIR)/MacOSX$(MACOSX_DEPLOYMENT_TARGET).sdk/usr/X11/include $(SRCROOT)/../include $(SRCROOT)/../../../include $(SRCROOT)/../../../include/sixense_utils";
+ };
+ name = Release;
+ };
+ 2185353F147DD0AB00C24A68 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = YES;
+ ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
+ CLANG_ENABLE_OBJC_ARC = YES;
+ COPY_PHASE_STRIP = NO;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ GCC_VERSION = com.apple.compilers.llvmgcc42;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ MACOSX_DEPLOYMENT_TARGET = 10.7;
+ ONLY_ACTIVE_ARCH = YES;
+ SDKROOT = macosx;
+ };
+ name = Debug;
+ };
+ 21853540147DD0AB00C24A68 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = YES;
+ ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
+ CLANG_ENABLE_OBJC_ARC = YES;
+ COPY_PHASE_STRIP = YES;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+ GCC_VERSION = com.apple.compilers.llvmgcc42;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ MACOSX_DEPLOYMENT_TARGET = 10.7;
+ ONLY_ACTIVE_ARCH = YES;
+ SDKROOT = macosx;
+ };
+ name = Release;
+ };
+ 2185354C147DD0D500C24A68 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+ EXECUTABLE_EXTENSION = dylib;
+ EXECUTABLE_PREFIX = lib;
+ INSTALL_PATH = "@executable_path";
+ LIBRARY_SEARCH_PATHS = "$(DEVELOPER_SDK_DIR)/MacOSX$(MACOSX_DEPLOYMENT_TARGET).sdk/usr/X11/lib";
+ MACH_O_TYPE = mh_dylib;
+ OTHER_LDFLAGS = (
+ "-lX11",
+ "-lGL",
+ );
+ PRODUCT_NAME = freeglut;
+ USER_HEADER_SEARCH_PATHS = "$(DEVELOPER_SDK_DIR)/MacOSX$(MACOSX_DEPLOYMENT_TARGET).sdk/usr/X11/include $(SRCROOT)/../include";
+ };
+ name = Debug;
+ };
+ 2185354D147DD0D500C24A68 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+ EXECUTABLE_EXTENSION = dylib;
+ EXECUTABLE_PREFIX = lib;
+ INSTALL_PATH = "@executable_path";
+ LIBRARY_SEARCH_PATHS = "$(DEVELOPER_SDK_DIR)/MacOSX$(MACOSX_DEPLOYMENT_TARGET).sdk/usr/X11/lib";
+ MACH_O_TYPE = mh_dylib;
+ OTHER_LDFLAGS = (
+ "-lX11",
+ "-lGL",
+ );
+ PRODUCT_NAME = freeglut;
+ USER_HEADER_SEARCH_PATHS = "$(DEVELOPER_SDK_DIR)/MacOSX$(MACOSX_DEPLOYMENT_TARGET).sdk/usr/X11/include $(SRCROOT)/../include";
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 21839A9F1484005200F978BA /* Build configuration list for PBXNativeTarget "freeglut_x86_64" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 21839AA01484005200F978BA /* Debug */,
+ 21839AA11484005200F978BA /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 21839AAD1484007F00F978BA /* Build configuration list for PBXNativeTarget "sixense_simple3d_i386" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 21839AAE1484007F00F978BA /* Debug */,
+ 21839AAF1484007F00F978BA /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 21839ACE148403C400F978BA /* Build configuration list for PBXNativeTarget "sixense_simple3d_x86_64" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 21839ACC148403C400F978BA /* Debug */,
+ 21839ACD148403C400F978BA /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 21853537147DD0AB00C24A68 /* Build configuration list for PBXProject "freeglut" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 2185353F147DD0AB00C24A68 /* Debug */,
+ 21853540147DD0AB00C24A68 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 2185354E147DD0D500C24A68 /* Build configuration list for PBXNativeTarget "freeglut_i386" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 2185354C147DD0D500C24A68 /* Debug */,
+ 2185354D147DD0D500C24A68 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 21853534147DD0AB00C24A68 /* Project object */;
+}
diff --git a/SixenseSDK/src/sixense_simple3d/Xcode/freeglut.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/SixenseSDK/src/sixense_simple3d/Xcode/freeglut.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100755
index 0000000..d70e8a5
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/Xcode/freeglut.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+ version = "1.0">
+ <FileRef
+ location = "self:freeglut.xcodeproj">
+ </FileRef>
+</Workspace>
diff --git a/SixenseSDK/src/sixense_simple3d/Xcode/freeglut.xcodeproj/project.xcworkspace/xcuserdata/archie.xcuserdatad/UserInterfaceState.xcuserstate b/SixenseSDK/src/sixense_simple3d/Xcode/freeglut.xcodeproj/project.xcworkspace/xcuserdata/archie.xcuserdatad/UserInterfaceState.xcuserstate
new file mode 100755
index 0000000..ebdf38f
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/Xcode/freeglut.xcodeproj/project.xcworkspace/xcuserdata/archie.xcuserdatad/UserInterfaceState.xcuserstate
Binary files differ
diff --git a/SixenseSDK/src/sixense_simple3d/Xcode/freeglut.xcodeproj/project.xcworkspace/xcuserdata/archie.xcuserdatad/WorkspaceSettings.xcsettings b/SixenseSDK/src/sixense_simple3d/Xcode/freeglut.xcodeproj/project.xcworkspace/xcuserdata/archie.xcuserdatad/WorkspaceSettings.xcsettings
new file mode 100755
index 0000000..1160e1d
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/Xcode/freeglut.xcodeproj/project.xcworkspace/xcuserdata/archie.xcuserdatad/WorkspaceSettings.xcsettings
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>IDEWorkspaceUserSettings_BuildLocationStyle</key>
+ <integer>0</integer>
+ <key>IDEWorkspaceUserSettings_BuildSubfolderNameStyle</key>
+ <integer>0</integer>
+ <key>IDEWorkspaceUserSettings_DerivedDataLocationStyle</key>
+ <integer>0</integer>
+ <key>IDEWorkspaceUserSettings_IssueFilterStyle</key>
+ <integer>0</integer>
+ <key>IDEWorkspaceUserSettings_LiveSourceIssuesEnabled</key>
+ <true/>
+ <key>IDEWorkspaceUserSettings_SnapshotAutomaticallyBeforeSignificantChanges</key>
+ <true/>
+ <key>IDEWorkspaceUserSettings_SnapshotLocationStyle</key>
+ <integer>0</integer>
+</dict>
+</plist>
diff --git a/SixenseSDK/src/sixense_simple3d/Xcode/freeglut.xcodeproj/xcuserdata/archie.xcuserdatad/xcschemes/freeglut_i386.xcscheme b/SixenseSDK/src/sixense_simple3d/Xcode/freeglut.xcodeproj/xcuserdata/archie.xcuserdatad/xcschemes/freeglut_i386.xcscheme
new file mode 100755
index 0000000..4ee86bb
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/Xcode/freeglut.xcodeproj/xcuserdata/archie.xcuserdatad/xcschemes/freeglut_i386.xcscheme
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+ version = "1.3">
+ <BuildAction
+ parallelizeBuildables = "YES"
+ buildImplicitDependencies = "YES">
+ <BuildActionEntries>
+ <BuildActionEntry
+ buildForTesting = "YES"
+ buildForRunning = "YES"
+ buildForProfiling = "YES"
+ buildForArchiving = "YES"
+ buildForAnalyzing = "YES">
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "2185354A147DD0D500C24A68"
+ BuildableName = "libfreeglut.dylib"
+ BlueprintName = "freeglut_i386"
+ ReferencedContainer = "container:freeglut.xcodeproj">
+ </BuildableReference>
+ </BuildActionEntry>
+ </BuildActionEntries>
+ </BuildAction>
+ <TestAction
+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.GDB"
+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.GDB"
+ shouldUseLaunchSchemeArgsEnv = "YES"
+ buildConfiguration = "Debug">
+ <Testables>
+ </Testables>
+ </TestAction>
+ <LaunchAction
+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.GDB"
+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.GDB"
+ launchStyle = "0"
+ useCustomWorkingDirectory = "NO"
+ buildConfiguration = "Debug"
+ debugDocumentVersioning = "YES"
+ allowLocationSimulation = "YES">
+ <AdditionalOptions>
+ </AdditionalOptions>
+ </LaunchAction>
+ <ProfileAction
+ shouldUseLaunchSchemeArgsEnv = "YES"
+ savedToolIdentifier = ""
+ useCustomWorkingDirectory = "NO"
+ buildConfiguration = "Release"
+ debugDocumentVersioning = "YES">
+ </ProfileAction>
+ <AnalyzeAction
+ buildConfiguration = "Debug">
+ </AnalyzeAction>
+ <ArchiveAction
+ buildConfiguration = "Release"
+ revealArchiveInOrganizer = "YES">
+ </ArchiveAction>
+</Scheme>
diff --git a/SixenseSDK/src/sixense_simple3d/Xcode/freeglut.xcodeproj/xcuserdata/archie.xcuserdatad/xcschemes/freeglut_x86_64.xcscheme b/SixenseSDK/src/sixense_simple3d/Xcode/freeglut.xcodeproj/xcuserdata/archie.xcuserdatad/xcschemes/freeglut_x86_64.xcscheme
new file mode 100755
index 0000000..6151fa2
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/Xcode/freeglut.xcodeproj/xcuserdata/archie.xcuserdatad/xcschemes/freeglut_x86_64.xcscheme
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+ version = "1.3">
+ <BuildAction
+ parallelizeBuildables = "YES"
+ buildImplicitDependencies = "YES">
+ <BuildActionEntries>
+ <BuildActionEntry
+ buildForTesting = "YES"
+ buildForRunning = "YES"
+ buildForProfiling = "YES"
+ buildForArchiving = "YES"
+ buildForAnalyzing = "YES">
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "21839A9D1484005200F978BA"
+ BuildableName = "libfreeglut.dylib"
+ BlueprintName = "freeglut_x86_64"
+ ReferencedContainer = "container:freeglut.xcodeproj">
+ </BuildableReference>
+ </BuildActionEntry>
+ </BuildActionEntries>
+ </BuildAction>
+ <TestAction
+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.GDB"
+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.GDB"
+ shouldUseLaunchSchemeArgsEnv = "YES"
+ buildConfiguration = "Debug">
+ <Testables>
+ </Testables>
+ </TestAction>
+ <LaunchAction
+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.GDB"
+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.GDB"
+ launchStyle = "0"
+ useCustomWorkingDirectory = "NO"
+ buildConfiguration = "Debug"
+ debugDocumentVersioning = "YES"
+ allowLocationSimulation = "YES">
+ <AdditionalOptions>
+ </AdditionalOptions>
+ </LaunchAction>
+ <ProfileAction
+ shouldUseLaunchSchemeArgsEnv = "YES"
+ savedToolIdentifier = ""
+ useCustomWorkingDirectory = "NO"
+ buildConfiguration = "Release"
+ debugDocumentVersioning = "YES">
+ </ProfileAction>
+ <AnalyzeAction
+ buildConfiguration = "Debug">
+ </AnalyzeAction>
+ <ArchiveAction
+ buildConfiguration = "Release"
+ revealArchiveInOrganizer = "YES">
+ </ArchiveAction>
+</Scheme>
diff --git a/SixenseSDK/src/sixense_simple3d/Xcode/freeglut.xcodeproj/xcuserdata/archie.xcuserdatad/xcschemes/sixense_simple3d_i386.xcscheme b/SixenseSDK/src/sixense_simple3d/Xcode/freeglut.xcodeproj/xcuserdata/archie.xcuserdatad/xcschemes/sixense_simple3d_i386.xcscheme
new file mode 100755
index 0000000..5019f0b
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/Xcode/freeglut.xcodeproj/xcuserdata/archie.xcuserdatad/xcschemes/sixense_simple3d_i386.xcscheme
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+ version = "1.3">
+ <BuildAction
+ parallelizeBuildables = "YES"
+ buildImplicitDependencies = "YES">
+ <BuildActionEntries>
+ <BuildActionEntry
+ buildForTesting = "YES"
+ buildForRunning = "YES"
+ buildForProfiling = "YES"
+ buildForArchiving = "YES"
+ buildForAnalyzing = "YES">
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "21839AA51484007F00F978BA"
+ BuildableName = "sixense_simple3d"
+ BlueprintName = "sixense_simple3d_i386"
+ ReferencedContainer = "container:freeglut.xcodeproj">
+ </BuildableReference>
+ </BuildActionEntry>
+ </BuildActionEntries>
+ </BuildAction>
+ <TestAction
+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.GDB"
+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.GDB"
+ shouldUseLaunchSchemeArgsEnv = "YES"
+ buildConfiguration = "Debug">
+ <Testables>
+ </Testables>
+ <MacroExpansion>
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "21839AA51484007F00F978BA"
+ BuildableName = "sixense_simple3d"
+ BlueprintName = "sixense_simple3d_i386"
+ ReferencedContainer = "container:freeglut.xcodeproj">
+ </BuildableReference>
+ </MacroExpansion>
+ </TestAction>
+ <LaunchAction
+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.GDB"
+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.GDB"
+ launchStyle = "0"
+ useCustomWorkingDirectory = "NO"
+ buildConfiguration = "Debug"
+ debugDocumentVersioning = "YES"
+ allowLocationSimulation = "YES">
+ <BuildableProductRunnable>
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "21839AA51484007F00F978BA"
+ BuildableName = "sixense_simple3d"
+ BlueprintName = "sixense_simple3d_i386"
+ ReferencedContainer = "container:freeglut.xcodeproj">
+ </BuildableReference>
+ </BuildableProductRunnable>
+ <AdditionalOptions>
+ </AdditionalOptions>
+ </LaunchAction>
+ <ProfileAction
+ shouldUseLaunchSchemeArgsEnv = "YES"
+ savedToolIdentifier = ""
+ useCustomWorkingDirectory = "NO"
+ buildConfiguration = "Release"
+ debugDocumentVersioning = "YES">
+ <BuildableProductRunnable>
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "21839AA51484007F00F978BA"
+ BuildableName = "sixense_simple3d"
+ BlueprintName = "sixense_simple3d_i386"
+ ReferencedContainer = "container:freeglut.xcodeproj">
+ </BuildableReference>
+ </BuildableProductRunnable>
+ </ProfileAction>
+ <AnalyzeAction
+ buildConfiguration = "Debug">
+ </AnalyzeAction>
+ <ArchiveAction
+ buildConfiguration = "Release"
+ revealArchiveInOrganizer = "YES">
+ </ArchiveAction>
+</Scheme>
diff --git a/SixenseSDK/src/sixense_simple3d/Xcode/freeglut.xcodeproj/xcuserdata/archie.xcuserdatad/xcschemes/sixense_simple3d_x86_64.xcscheme b/SixenseSDK/src/sixense_simple3d/Xcode/freeglut.xcodeproj/xcuserdata/archie.xcuserdatad/xcschemes/sixense_simple3d_x86_64.xcscheme
new file mode 100755
index 0000000..28cf419
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/Xcode/freeglut.xcodeproj/xcuserdata/archie.xcuserdatad/xcschemes/sixense_simple3d_x86_64.xcscheme
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+ version = "1.3">
+ <BuildAction
+ parallelizeBuildables = "YES"
+ buildImplicitDependencies = "YES">
+ <BuildActionEntries>
+ <BuildActionEntry
+ buildForTesting = "YES"
+ buildForRunning = "YES"
+ buildForProfiling = "YES"
+ buildForArchiving = "YES"
+ buildForAnalyzing = "YES">
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "21839AC4148403C400F978BA"
+ BuildableName = "sixense_simple3d"
+ BlueprintName = "sixense_simple3d_x86_64"
+ ReferencedContainer = "container:freeglut.xcodeproj">
+ </BuildableReference>
+ </BuildActionEntry>
+ </BuildActionEntries>
+ </BuildAction>
+ <TestAction
+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.GDB"
+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.GDB"
+ shouldUseLaunchSchemeArgsEnv = "YES"
+ buildConfiguration = "Debug">
+ <Testables>
+ </Testables>
+ <MacroExpansion>
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "21839AC4148403C400F978BA"
+ BuildableName = "sixense_simple3d"
+ BlueprintName = "sixense_simple3d_x86_64"
+ ReferencedContainer = "container:freeglut.xcodeproj">
+ </BuildableReference>
+ </MacroExpansion>
+ </TestAction>
+ <LaunchAction
+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.GDB"
+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.GDB"
+ launchStyle = "0"
+ useCustomWorkingDirectory = "NO"
+ buildConfiguration = "Debug"
+ debugDocumentVersioning = "YES"
+ allowLocationSimulation = "YES">
+ <BuildableProductRunnable>
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "21839AC4148403C400F978BA"
+ BuildableName = "sixense_simple3d"
+ BlueprintName = "sixense_simple3d_x86_64"
+ ReferencedContainer = "container:freeglut.xcodeproj">
+ </BuildableReference>
+ </BuildableProductRunnable>
+ <CommandLineArguments>
+ <CommandLineArgument
+ argument = ""
+ isEnabled = "NO">
+ </CommandLineArgument>
+ </CommandLineArguments>
+ <EnvironmentVariables>
+ <EnvironmentVariable
+ key = ""
+ value = ""
+ isEnabled = "NO">
+ </EnvironmentVariable>
+ <EnvironmentVariable
+ key = ""
+ value = ""
+ isEnabled = "NO">
+ </EnvironmentVariable>
+ </EnvironmentVariables>
+ <AdditionalOptions>
+ </AdditionalOptions>
+ </LaunchAction>
+ <ProfileAction
+ shouldUseLaunchSchemeArgsEnv = "YES"
+ savedToolIdentifier = ""
+ useCustomWorkingDirectory = "NO"
+ buildConfiguration = "Release"
+ debugDocumentVersioning = "YES">
+ <BuildableProductRunnable>
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "21839AC4148403C400F978BA"
+ BuildableName = "sixense_simple3d"
+ BlueprintName = "sixense_simple3d_x86_64"
+ ReferencedContainer = "container:freeglut.xcodeproj">
+ </BuildableReference>
+ </BuildableProductRunnable>
+ </ProfileAction>
+ <AnalyzeAction
+ buildConfiguration = "Debug">
+ </AnalyzeAction>
+ <ArchiveAction
+ buildConfiguration = "Release"
+ revealArchiveInOrganizer = "YES">
+ </ArchiveAction>
+</Scheme>
diff --git a/SixenseSDK/src/sixense_simple3d/Xcode/freeglut.xcodeproj/xcuserdata/archie.xcuserdatad/xcschemes/xcschememanagement.plist b/SixenseSDK/src/sixense_simple3d/Xcode/freeglut.xcodeproj/xcuserdata/archie.xcuserdatad/xcschemes/xcschememanagement.plist
new file mode 100755
index 0000000..1d8950f
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/Xcode/freeglut.xcodeproj/xcuserdata/archie.xcuserdatad/xcschemes/xcschememanagement.plist
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>SchemeUserState</key>
+ <dict>
+ <key>freeglut_i386.xcscheme</key>
+ <dict>
+ <key>orderHint</key>
+ <integer>0</integer>
+ </dict>
+ <key>freeglut_x86_64.xcscheme</key>
+ <dict>
+ <key>orderHint</key>
+ <integer>2</integer>
+ </dict>
+ <key>sixense_simple3d_i386.xcscheme</key>
+ <dict>
+ <key>orderHint</key>
+ <integer>3</integer>
+ </dict>
+ <key>sixense_simple3d_x86_64.xcscheme</key>
+ <dict>
+ <key>orderHint</key>
+ <integer>4</integer>
+ </dict>
+ </dict>
+ <key>SuppressBuildableAutocreation</key>
+ <dict>
+ <key>21839A751484002000F978BA</key>
+ <dict>
+ <key>primary</key>
+ <true/>
+ </dict>
+ <key>21839A9D1484005200F978BA</key>
+ <dict>
+ <key>primary</key>
+ <true/>
+ </dict>
+ <key>21839AA51484007F00F978BA</key>
+ <dict>
+ <key>primary</key>
+ <true/>
+ </dict>
+ <key>21839AC4148403C400F978BA</key>
+ <dict>
+ <key>primary</key>
+ <true/>
+ </dict>
+ <key>2185353C147DD0AB00C24A68</key>
+ <dict>
+ <key>primary</key>
+ <true/>
+ </dict>
+ <key>2185354A147DD0D500C24A68</key>
+ <dict>
+ <key>primary</key>
+ <true/>
+ </dict>
+ </dict>
+</dict>
+</plist>
diff --git a/SixenseSDK/src/sixense_simple3d/doc/Makefile.am b/SixenseSDK/src/sixense_simple3d/doc/Makefile.am
new file mode 100755
index 0000000..754637b
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/doc/Makefile.am
@@ -0,0 +1,5 @@
+EXTRA_DIST = \
+ download.html freeglut.html freeglut_logo.png \
+ freeglut_user_interface.html index.html \
+ ogl_sm.png progress.html structure.html
+
diff --git a/SixenseSDK/src/sixense_simple3d/doc/Makefile.in b/SixenseSDK/src/sixense_simple3d/doc/Makefile.in
new file mode 100755
index 0000000..52711bd
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/doc/Makefile.in
@@ -0,0 +1,341 @@
+# Makefile.in generated by automake 1.10.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = doc
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXPORT_FLAGS = @EXPORT_FLAGS@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+GL_LIBS = @GL_LIBS@
+GREP = @GREP@
+HEADER = @HEADER@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBRARY = @LIBRARY@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIBXI = @LIBXI@
+LIBXXF86VM = @LIBXXF86VM@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NMEDIT = @NMEDIT@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+VERSION_INFO = @VERSION_INFO@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXTRA_DIST = \
+ download.html freeglut.html freeglut_logo.png \
+ freeglut_user_interface.html index.html \
+ ogl_sm.png progress.html structure.html
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu doc/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ distclean distclean-generic distclean-libtool distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/SixenseSDK/src/sixense_simple3d/doc/download.html b/SixenseSDK/src/sixense_simple3d/doc/download.html
new file mode 100755
index 0000000..b9baab2
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/doc/download.html
@@ -0,0 +1,42 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <meta name="author" content="Pawel W. Olszta">
+ <meta name="copyright" content="Pawel W. Olszta">
+ <meta name="description" content="The downloads page">
+ <meta name="keywords" content="freeglut glut OpenGL">
+ <meta name="GENERATOR" content="WebMaker">
+ <title>The freeglut project</title>
+</head>
+<body text="#000000" bgcolor="#FFFFFF" link="#0000EF" vlink="#51188E" alink="#FF0000">
+
+<center><img SRC="freeglut_logo.png" ALT="The freeglut logo" height=106 width=314></center>
+
+<center><dt><i><font face="Courier New,Courier"><font size=+1>
+I upload it, you download it. That's the ying-yang nature of the Buddha.
+</font></font></i></dt></center>
+
+<center><table WIDTH="620"><tr><td><hr WIDTH="100%">
+
+<p><i>January the 16th, 2000</i>
+<p>Here is a list of files you can download:
+<p>
+
+<ul>
+<li>
+ <a href="freeglut-1.3-alpha-2000-01-04.tar.gz">
+ freeglut-1.3-alpha-2000-01-04.tar.gz</a> (approx. 210kB)
+<li>
+ <a href="freeglut-1.3-alpha-2000-01-06.tar.gz">
+ freeglut-1.3-alpha-2000-01-06.tar.gz</a> (approx. 220kB)
+<li>
+ <a href="freeglut-1.3-alpha-2000-01-09.tar.gz">
+ freeglut-1.3-alpha-2000-01-09.tar.gz</a> (approx. 230kB)
+<li>
+ <a href="freeglut-1.3-alpha-2000-01-16.tar.gz">
+ freeglut-1.3-alpha-2000-01-16.tar.gz</a> (approx. 230kB)
+</ul>
+
+</table></center></body></html>
+
diff --git a/SixenseSDK/src/sixense_simple3d/doc/freeglut.html b/SixenseSDK/src/sixense_simple3d/doc/freeglut.html
new file mode 100755
index 0000000..7357dea
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/doc/freeglut.html
@@ -0,0 +1,163 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <meta name="author" content="Pawel W. Olszta">
+ <meta name="copyright" content="Pawel W. Olszta">
+ <meta name="description" content="A bit about me and the freeglut project">
+ <meta name="keywords" content="freeglut glut OpenGL">
+ <meta name="GENERATOR" content="WebMaker">
+ <title>The freeglut project</title>
+</head>
+<body text="#000000" bgcolor="#FFFFFF" link="#0000EF" vlink="#51188E" alink="#FF0000">
+
+<center><img SRC="freeglut_logo.png" ALT="The freeglut logo" height=106 width=314></center>
+
+<center><dt><i><font face="Courier New,Courier"><font size=+1>
+I am best at what I do worst and for this gift I feel blessed...
+</font></font></i></dt></center>
+
+<center><table WIDTH="620"><tr><td><hr WIDTH="100%">
+
+<p><i>January the 2nd, 2000</i>
+
+<p>The alpha version has been released yesterday. Today I have been busy with moving
+the project site to the <a href="http://www.sourceforge.net">SourceForge</a>. As for
+now there will be the web site available and I will give it a try to set up the
+freeglut mailing lists. There will be no CVS access available for now (my dialup
+internet connection sucks so badly that I wouldn't be able to work on the project).
+After I am done with that, I will try announcing the project on www.opengl.org.
+
+<p>Of other things, there has been rumours floating round the routers and hubs about
+Mark Kilgard changing the GLUT's license, but this is unconfirmed. It would be really
+cool if he did so, there's no better motivation to work than a bit of sound competition.
+As for me, I already put too much work into the freeglut project to terminate it just
+now. We'll see what happens next.
+
+<p><i>January the 4th, 2000</i>
+
+<p>Ho-ho-ho. Freeglut-1.3 works fine with `Tux the Penguin and the Quest for Herring'.
+At least that's what Steve Baker, the author, says. Not only that, Steve has provided
+us with the joystick code (from his great PLIB project) and numerous hints and tips
+about making freeglut more useful (I will try to put the results of our discussion
+on the <a href="structure.html">structure page</a>).
+
+<p>As for other issues -- I promise I will start the Win32 port this weekend.
+BTW. -- is there a decent cross compiler for Linux that generates Win32 executables,
+so that I don't have to use windows for development? And what about Wine OpenGL
+support?
+
+<p>The package is now some 40kB smaller than the previous one. Did some general
+clean ups, removed unnecessary configure scripts in the genfonts directory,
+the configure cahce, the Makefiles and so on. Also, I have started introducing
+the new internal structure, as described <a href="structure.html">here</a>.
+
+<p><i>January the 6th, 2000</i>
+
+<p>The missing glutInit() issue seems to be solved. Chris Purnell (fxGLUT author) says
+that the GLUT window and menu creation functions call glutInit() if the caller didn't
+do that before.
+
+<p>The enumerations for GLUT_KEY_UP and GLUT_KEY_RIGHT were accidentally swapped.
+They should be OK now. Hope the rest is OK :)
+
+<p>Added two new API calls to freeglut-1.3 -- glutBitmapHeight() and glutStrokeHeight(),
+as suggested by Steve Baker. This won't break the GLUT compatibility a lot, and I've
+heard it can be useful. Here you go.
+
+<p>The <a href="structure.html">structure</a> plans page has been updated. The numerous
+feature hints from opengl-gamedev-l readers have been added.
+
+<p>Somebody (Chris?) hinted me that the stroke fonts can be found in the XFree86
+sources. I browsed through it and -- presto. Now I only need to define the stroke fonts
+structure (should be very similiar to bitmapped one) and write quite a simple parser.
+
+<p>I've spent the (late) evening doing the init display string parsing and making
+my logics classes homework :) Both is harder than I primarily thought, but fortunately
+for me I can commit errors in one of those tasks. Guess which one? Argh. :)
+
+<p><i>January the 8th, 2000</i>
+
+<p>First of all, both the missing glutInit() and glutGet(GLUT_WINDOW_[X|Y]) issues are
+fixed now. The first problem was solved thanks to Chris Purnell, who showed me the way
+GLUT dealt with the problem. Good for me there's someone who reads it's source code (I
+just felt it would be unfair for me to do so :D). The second problem was solved by
+adding a XMoveWindow call just after the window creation and initial mapping. This is
+strange. Maybe one of the Xlib calls between the creation and mapping spoiled the
+window's coordinates?
+
+<p>This makes even more GLUT tests work fine. The tests can be found in any decent
+GLUT 3.7 distribution. Following tests produce a FAIL message: test18.c (some layer
+issues), test19.c (see the GLUT_NORMAL_DAMAGED issue on the progress page), test22.c
+(window stacking/visibilty problems), test23.c (glutInitDisplayString() is unfinished),
+test25.c (the freeglut fonts differ a bit from GLUT's), test28.c (-iconic handling
+is missing(?)). Gee :)
+
+<p>I've spent another hour doing the glutInitDisplayString(), but it still is far from
+being complete. And I've also started gathering information on doing the game mode
+stuff. The video mode enumeration in both cases will be painful.
+
+<p>There is a big issue with the window contents redrawing. Right now, it is forced
+every time there are no events pending in the main loop. I know it's wrong, but it
+without such an approach some of the test programs freeze soon after starting. Could
+someone peer-review the main loop code please?
+
+<p>I have decided to start the Win32 port this weekend. As for now, the code compiles
+under vc++5.0. I will start making it work as soon as I download the pthreads library
+and the newest version of GLib for Windows. It was quite a good idea to start the port,
+as the Microsoft's compiler generates much more warnings and I had quite a few things
+fixed for free.
+
+<p><i>January the 9th, 2000</i>
+
+<p>Doing the Win32 port all the day... Actually, there is enough code to make it work,
+however I am sure only of that it compiles (more or less). I need to download the
+pthreads-win32 library to get the GLib working first, and somehow I was unable to
+do it during the weekend. Once again -- the Win32 port does not work yet. Oh, and
+I need adding the __declspec(dllexport) thing...
+
+<p>After it starts working, I'll have to clean up the code a bit, I guess...
+
+<p><i>January the 10th, 2000</i>
+
+<p>Here I am at three o'clock am, half-awake, uploading and downloading things for
+freeglut. I never thought I'd be able to force myself getting up that early :)
+
+<p><i>January the 16th, 2000</i>
+
+<p>Both the flu and a terrible feeling about the dialup bills made me slow down
+a bit, the internet activity I mean :). But here I am again uploading the latest
+snapshot. The biggest news about it is the Win32 port working, with nearly all
+features you can find in the X11 version implemented (still, it needs some debugging).
+For the Unix port, game mode support (loosely based on SDL source code posted at Neal
+Tringham's www.pseudonymz.demon.co.uk) and numerous bug fixes have been introduced.
+
+<p>In order to compile the Win32 version, you'll need pthreads-win32 library (see
+sourceware.cygnus.org), the GLib-1.2.x (www.gtk.org, I've been using the 1.2.6),
+a working native compiler (Microsoft VisualC++ 5.0 in my case), and a bit of patience.
+See the project files I've supplied for some definitions needed (FREEGLUT_LIBRARY_BUILD
+needs to be declared when building the DLL), and don't forget freeglut joystick code
+is making use of Win32 multimedia extensions (link against winmm.lib).
+
+<p>Be prepared to meet the fact Mesa 3.1 (or at least my compilation) doesn't work very
+well with this snapshot -- something's messed up when changing WGL contexts. This is
+really strange, as the Microsoft's OpenGL works pretty fine, as does Dominik Behr's
+miniGL thing. The assumption is that I've taken some approach that somehow is valid
+with Microsoft's drivers, but is not OpenGL conformant. Could anyone check this out
+please?
+
+<p>My plan for next week is to add some lesser features missing, and start learning
+maths as the session at my university is coming in really fast :) This way or another,
+expect the next release not any sooner than next weekend (given that no nasty bugs get
+digged out).
+
+<p>Argh. Don't be surprised if the code doesn't compile under X-11 other than XFree86.
+It could fail when trying to include the X11/extensions/xf86vmode.h include header,
+in that case just comment out that inclusion line (found in freeglut_internal.h).
+Is there any intelligent way to detect the existence of an include header, and if
+it's autoconf to be the answer, how to use it?
+
+<br><br><a href="index.html"><i>Back to the main page</i></a>
+
+</table></center></body></html>
+
diff --git a/SixenseSDK/src/sixense_simple3d/doc/freeglut_logo.png b/SixenseSDK/src/sixense_simple3d/doc/freeglut_logo.png
new file mode 100755
index 0000000..36bf1b5
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/doc/freeglut_logo.png
Binary files differ
diff --git a/SixenseSDK/src/sixense_simple3d/doc/freeglut_user_interface.html b/SixenseSDK/src/sixense_simple3d/doc/freeglut_user_interface.html
new file mode 100755
index 0000000..20d1e42
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/doc/freeglut_user_interface.html
@@ -0,0 +1,1956 @@
+<!DOCTYPE html PUBLIC "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+
+ <meta name="Author" content="John F. Fay">
+
+ <meta name="GENERATOR" content="Mozilla/4.77 [en] (Windows NT 5.0; U) [Netscape]">
+ <title>FREEGLUT Application Program Interface</title>
+</head>
+ <body>
+
+<dl>
+<center>
+<h1> The Open-Source</h1>
+ </center>
+<center>
+<h1> OpenGL Utility Toolkit</h1>
+ </center>
+<center>
+<h1> (<i>freeglut</i> 2.0.0)</h1>
+ </center>
+<center>
+<h1> Application Programming Interface</h1>
+ </center>
+</dl>
+
+<center>
+<h1> Version 4.0</h1>
+ </center>
+
+<center>
+<h2> The <i>freeglut</i> Programming Consortium</h2>
+ </center>
+
+<center>
+<h2> July, 2003</h2>
+ </center>
+
+<p><br>
+ OpenGL is a trademark of Silicon Graphics, Inc. X Window System is a trademark
+of X Consortium, Inc.&nbsp; Spaceball is a registered trademark of Spatial
+Systems Inc. <br>
+ The authors have taken care in preparation of this documentation but make
+no expressed or implied warranty of any kind and assumes no responsibility
+ for errors or omissions. No liability is assumed for incidental or consequential
+ damages in connection with or arising from the use of information or programs
+ contained herein. <br>
+ &nbsp; </p>
+
+<h1> 1.0&nbsp;<a name="Contents"></a>
+ Contents</h1>
+ 1.0&nbsp; <a href="#Contents">Contents</a>
+
+<p>2.0&nbsp; <a href="#Introduction">Introduction</a>
+ </p>
+
+<p>3.0&nbsp; <a href="#Background">Background</a>
+ </p>
+
+<blockquote>3.1&nbsp; Design Philosophy <br>
+ 3.2&nbsp; Conventions <br>
+ 3.3&nbsp; Terminology <br>
+ 3.4&nbsp; Differences from GLUT 3.7</blockquote>
+
+ <p><br>
+ 4.0&nbsp; <a href="#Initialization">Initialization Functions</a>
+ </p>
+
+ <blockquote>4.1&nbsp; glutInit <br>
+ 4.2&nbsp; glutInitWindowPosition, glutInitWindowSize <br>
+ 4.3&nbsp; glutInitDisplayMode <br>
+ 4.4&nbsp; glutInitDisplayString</blockquote>
+
+ <p><br>
+ 5.0&nbsp; <a href="#EventProcessing">Event Processing Functions</a>
+ </p>
+
+ <blockquote>5.1&nbsp; glutMainLoop <br>
+ 5.2&nbsp; glutMainLoopEvent <br>
+ 5.3&nbsp; glutLeaveMainLoop</blockquote>
+
+ <p><br>
+ 6.0&nbsp; <a href="#Window">Window Functions</a>
+ </p>
+
+ <blockquote>6.1&nbsp; glutCreateWindow <br>
+ 6.2&nbsp; glutCreateSubwindow <br>
+ 6.3&nbsp; glutDestroyWindow <br>
+ 6.4&nbsp; glutSetWindow, glutGetWindow <br>
+ 6.5&nbsp; glutSetWindowTitle, glutSetIconTitle <br>
+ 6.6&nbsp; glutReshapeWindow <br>
+ 6.7&nbsp; glutPositionWindow <br>
+ 6.8&nbsp; glutShowWindow, glutHideWindow, glutIconifyWindow <br>
+ 6.9&nbsp; glutPushWindow, glutPopWindow <br>
+ 6.10&nbsp; glutFullScreen</blockquote>
+
+ <p><br>
+ 7.0&nbsp; <a href="#Display">Display Functions</a>
+ </p>
+
+ <blockquote>7.1&nbsp; glutPostRedisplay <br>
+ 7.2&nbsp; glutPostWindowRedisplay <br>
+ 7.3&nbsp; glutSwapBuffers</blockquote>
+
+ <p><br>
+ 8.0&nbsp; <a href="#MouseCursor">Mouse Cursor Functions</a>
+ </p>
+
+ <blockquote>8.1&nbsp; glutSetCursor <br>
+ 8.2&nbsp; glutWarpPointer</blockquote>
+
+ <p><br>
+ 9.0&nbsp; <a href="#Overlay">Overlay Functions</a>
+ </p>
+
+ <blockquote>9.1&nbsp; glutEstablishOverlay <br>
+ 9.2&nbsp; glutRemoveOverlay <br>
+ 9.3&nbsp; glutUseLayer <br>
+ 9.4&nbsp; glutPostOverlayRedisplay <br>
+ 9.5&nbsp; glutPostWindowOverlayRedisplay <br>
+ 9.6&nbsp; glutShowOverlay, glutHideOverlay</blockquote>
+
+ <p><br>
+ 10.0&nbsp; <a href="#Menu">Menu Functions</a>
+ </p>
+
+ <blockquote>10.1&nbsp; glutCreateMenu <br>
+ 10.2&nbsp; glutDestroyMenu <br>
+ 10.3&nbsp; glutGetMenu, glutSetMenu <br>
+ 10.4&nbsp; glutAddMenuEntry <br>
+ 10.5&nbsp; glutAddSubMenu <br>
+ 10.6&nbsp; glutChangeToMenuEntry <br>
+ 10.7&nbsp; glutChangeToSubMenu <br>
+ 10.8&nbsp; glutRemoveMenuItem <br>
+ 10.9&nbsp; glutAttachMenu, glutDetachMenu</blockquote>
+
+ <p><br>
+ 11.0&nbsp; <a href="#GlobalCallback">Global Callback Registration Functions</a>
+ </p>
+
+ <blockquote>11.1&nbsp; glutTimerFunc <br>
+ 11.2&nbsp; glutIdleFunc</blockquote>
+
+ <p><br>
+ 12.0&nbsp; <a href="#WindowCallback">Window-Specific Callback Registration
+ Functions</a>
+ </p>
+
+ <blockquote>12.1&nbsp; glutDisplayFunc <br>
+ 12.2&nbsp; glutOverlayDisplayFunc <br>
+ 12.3&nbsp; glutReshapeFunc <br>
+ 12.4&nbsp; glutCloseFunc <br>
+ 12.5&nbsp; glutKeyboardFunc <br>
+ 12.6&nbsp; glutSpecialFunc <br>
+ 12.7&nbsp; glutKeyboardUpFunc <br>
+ 12.8&nbsp; glutSpecialUpFunc <br>
+ 12.9&nbsp; glutMouseFunc <br>
+ 12.10&nbsp; glutMotionFunc, glutPassiveMotionFunc <br>
+ 12.11&nbsp; glutVisibilityFunc <br>
+ 12.12&nbsp; glutEntryFunc <br>
+ 12.13&nbsp; glutJoystickFunc <br>
+ 12.14&nbsp; glutSpaceballMotionFunc <br>
+ 12.15&nbsp; glutSpaceballRotateFunc <br>
+ 12.16&nbsp; glutSpaceballButtonFunc <br>
+ 12.17&nbsp; glutButtonBoxFunc <br>
+ 12.18&nbsp; glutDialsFunc <br>
+ 12.19&nbsp; glutTabletMotionFunc <br>
+ 12.20&nbsp; glutTabletButtonFunc
+ <p>12.21&nbsp; glutMenuStatusFunc <br>
+ 12.22&nbsp; glutWindowStatusFunc</p>
+ </blockquote>
+
+ <p><br>
+ 13.0&nbsp; <a href="#StateSetting">State Setting and Retrieval Functions</a>
+ </p>
+
+ <blockquote>13.1&nbsp; glutSetOption <br>
+ 13.2&nbsp; glutGet <br>
+ 13.3&nbsp; glutDeviceGet <br>
+ 13.4&nbsp; glutGetModifiers <br>
+ 13.5&nbsp; glutLayerGet <br>
+ 13.6&nbsp; glutExtensionSupported<br>
+13.7 &nbsp;glutGetProcAddress<br>
+ </blockquote>
+
+ <p><br>
+ 14.0&nbsp; <a href="#FontRendering">Font Rendering Functions</a>
+ </p>
+
+ <blockquote>14.1&nbsp; glutBitmapCharacter <br>
+ 14.2&nbsp; glutBitmapString <br>
+ 14.3&nbsp; glutBitmapWidth <br>
+ 14.4&nbsp; glutBitmapLength <br>
+ 14.5&nbsp; glutBitmapHeight <br>
+ 14.6&nbsp; glutStrokeCharacter <br>
+ 14.7&nbsp; glutStrokeString <br>
+ 14.8&nbsp; glutStrokeWidth <br>
+ 14.9&nbsp; glutStrokeLength <br>
+ 14.10&nbsp; glutStrokeHeight</blockquote>
+
+ <p><br>
+ 15.0&nbsp; <a href="#GeometricObject">Geometric Object Rendering Functions</a>
+ </p>
+
+ <blockquote>15.1&nbsp; glutWireSphere, glutSolidSphere
+ <br>
+ 15.2&nbsp; glutWireTorus, glutSolidTorus <br>
+ 15.3&nbsp; glutWireCone, glutSolidCone <br>
+ 15.4&nbsp; glutWireCube, glutSolidCube <br>
+ 15.5&nbsp; glutWireTetrahedron, glutSolidTetrahedron <br>
+ 15.6&nbsp; glutWireOctahedron, glutSolidOctahedron <br>
+ 15.7&nbsp; glutWireDodecahedron, glutSolidDodecahedron <br>
+ 15.8&nbsp; glutWireIcosahedron, glutSolidIcosahedron <br>
+ 15.9&nbsp; glutWireRhombicDodecahedron, glutSolidRhombicDodecahedron <br>
+ 15.10&nbsp; glutWireTeapot, glutSolidTeapot</blockquote>
+
+ <p><br>
+ 16.0&nbsp; <a href="#GameMode">Game Mode Functions</a>
+ </p>
+
+ <blockquote>16.1&nbsp; glutGameModeString <br>
+ 16.2&nbsp; glutEnterGameMode, glutLeaveGameMode <br>
+ 16.3&nbsp; glutGameModeGet</blockquote>
+
+ <p><br>
+ 17.0&nbsp; <a href="#VideoResize">Video Resize Functions</a>
+ </p>
+
+ <blockquote>17.1&nbsp; glutVideoResizeGet <br>
+ 17.2&nbsp; glutSetupVideoResizing, glutStopVideoResizing <br>
+ 17.3&nbsp; glutVideoResize <br>
+ 17.4&nbsp; glutVideoPan</blockquote>
+
+ <p><br>
+ 18.0&nbsp; <a href="#ColorMap">Color Map Functions</a>
+ </p>
+
+ <blockquote>18.1&nbsp; glutSetColor, glutGetColor
+ <br>
+ 18.2&nbsp; glutCopyColormap</blockquote>
+
+ <p><br>
+ 19.0&nbsp; <a href="#Miscellaneous">Miscellaneous Functions</a>
+ </p>
+
+ <blockquote>19.1&nbsp; glutIgnoreKeyRepeat,
+glutSetKeyRepeat <br>
+ 19.2&nbsp; glutForceJoystickFunc <br>
+ 19.3&nbsp; glutReportErrors</blockquote>
+
+ <p><br>
+ 20.0&nbsp; <a href="#UsageNotes">Usage Notes</a>
+ </p>
+
+ <p>21.0&nbsp; <a href="#ImplementationNotes">
+ Implementation Notes</a>
+ </p>
+
+ <p>22.0&nbsp; <a href="#GLUT_State">GLUT
+State</a>
+ </p>
+
+ <p>23.0&nbsp; <a href="#Freeglut.h_Header">
+ "freeglut.h" Header File</a>
+ </p>
+
+ <p>24.0&nbsp; <a href="#References">References</a>
+ </p>
+
+ <p>25.0&nbsp; <a href="#Index">Index</a>
+ <br>
+ &nbsp; <br>
+ &nbsp; </p>
+
+ <h1> 2.0&nbsp;<a name="Introduction"></a>
+ Introduction</h1>
+ &nbsp;
+ <h1> 3.0&nbsp;<a name="Background"></a>
+ Background</h1>
+ The OpenGL programming world owes a tremendous debt to Mr. Mark J. Kilgard
+ for writing the OpenGL Utility Toolkit, or GLUT.&nbsp; The GLUT library
+of functions allows an application programmer to create, control, and manipulate
+ windows independent of what operating system the program is running on.&nbsp;
+ By hiding the dependency on the operating system from the application programmer,
+ he allowed people to write truly portable OpenGL applications.
+
+ <p>&nbsp;&nbsp;&nbsp; Mr. Kilgard copyrighted
+his library and gave it a rather unusual license.&nbsp; Under his license,
+people are allowed freely to copy and distribute the libraries and the source
+code, but they are not allowed to modify it.&nbsp; For a long time this did
+not matter because the GLUT library worked so well and because Mr. Kilgard
+was releasing updates on a regular basis.&nbsp; But with the passage of time,
+people started wanting some slightly different behaviours in their windowing
+system.&nbsp; When Mr. Kilgard stopped supporting the GLUT library in 1999,
+having moved on to bigger and better things, this started to become a problem.
+ </p>
+
+ <p>&nbsp;&nbsp;&nbsp; In December 1999,
+Mr. Pawel Olzsta started work on an open-source clone of the GLUT library.&nbsp;
+This open-source clone, which does not use any of the GLUT source code, has
+evolved into the present <i>freeglut</i> library.&nbsp; This documentation
+specifies the application program interface to the <i>freeglut</i> library.
+ </p>
+
+ <h2> 3.1&nbsp; Design Philosophy</h2>
+
+ <h2> 3.2&nbsp; Conventions</h2>
+
+ <h2> 3.3&nbsp; Terminology</h2>
+
+ <h2> 3.4&nbsp; Differences from GLUT 3.7</h2>
+ Since the <i>freeglut</i> library was developed in order to update GLUT,
+ it is natural that there will be some differences between the two.&nbsp;
+Each function in the API notes any differences between the GLUT and the <i>
+freeglut</i> function behaviours.&nbsp; The important ones are summarized
+here.
+ <h3> 3.4.1&nbsp; glutMainLoop Behaviour</h3>
+ One of the commonest complaints about the GLUT library was that once an
+application called "<tt>glutMainLoop</tt>", it never got control back.&nbsp;
+There was no way for an application to loop in GLUT for a while, possibly
+as a subloop while a specific window was open, and then return to the calling
+function.&nbsp; A new function, "<tt>glutMainLoopEvent</tt>", has been added
+to allow this functionality.&nbsp; Another function, "<tt>glutLeaveMainLoop</tt>
+", has also been added to allow the application to tell <i>freeglut</i> to clean
+up and close down.
+ <h3> 3.4.2&nbsp; Action on Window Closure</h3>
+ Another difficulty with GLUT, especially with multiple-window programs,
+is that if the user clicks on the "x" in the window header the application
+exits immediately.&nbsp; The application programmer can now set an option,
+"<tt> GLUT_ACTION_ON_WINDOW_CLOSE</tt>", to specify whether execution should
+continue, whether GLUT should return control to the main program, or whether
+GLUT should simply exit (the default).
+
+ <h3>3.4.3&nbsp; Changes to Callbacks<br>
+ </h3>
+ Several new callbacks have been added and several callbacks which were specific
+to Silicon Graphics hardware have not been implemented.&nbsp; Most or all
+of the new callbacks are listed in the GLUT Version 4 "glut.h" header file
+but did not make it into the documentation.&nbsp; The new callbacks consist
+of regular and special key release callbacks, a joystick callback, a window
+status callback, window closure callbacks, a menu closure callback, and a
+mouse wheel callback.&nbsp; Unsupported callbacks are the three Spaceball
+callbacks, the ButtonBox callback, and the two Tablet
+callbacks.&nbsp; If the user has a need for an unsupported callback he should
+contact the <i>freeglut</i> development team.<br>
+
+ <h3>3.4.4&nbsp; String Rendering<br>
+ </h3>
+ New functions have been added to render full character strings (including
+carriage returns) rather than rendering one character at a time.&nbsp; More
+functions return the widths of character strings and the font heights, in
+pixels for bitmapped fonts and in OpenGL units for the stroke fonts.<br>
+
+ <h3>3.4.5&nbsp; Geometry Rendering<br>
+ </h3>
+ Functions have been added to render a wireframe and a solid rhombic
+dodecahedron, a cylinder, and a Sierpinski sponge.
+ <h3> 3.4.5&nbsp; Extension Function Queries</h3>
+ glutGetProcAddress is a wrapper for the glXGetProcAddressARB and wglGetProcAddress
+functions.
+ <h1> 4.0&nbsp;<a name="Initialization"></a>
+ Initialization Functions</h1>
+
+ <h2> 4.1&nbsp; glutInit</h2>
+
+ <h2> 4.2&nbsp; glutInitWindowPosition, glutInitWindowSize</h2>
+ The "<tt>glutInitWindowPosition</tt> " and "<tt>glutInitWindowSize</tt>
+" functions specify a desired position and size for windows that <i>freeglut</i>
+ will create in the future.
+ <p><b>Usage</b> </p>
+
+ <p><tt>void glutInitWindowPosition ( int
+x, int y ) ;</tt> <br>
+ <tt>void glutInitWindowSize ( int width,
+int height ) ;</tt> </p>
+
+ <p><b>Description</b> </p>
+
+ <p>The "<tt>glutInitWindowPosition</tt>
+ " and "<tt>glutInitWindowSize</tt>" functions specify a desired position
+and size for windows that <i>freeglut</i> will create in the future.&nbsp;
+The position is measured in pixels from the upper left hand corner of the
+screen, with "x" increasing to the right and "y" increasing towards the bottom
+of the screen.&nbsp; The size is measured in pixels.&nbsp; <i>Freeglut</i>
+ does not promise to follow these specifications in creating its windows,
+it certainly makes an attempt to. </p>
+
+ <p>The position and size of a window are
+a matter of some subtlety.&nbsp; Most windows have a usable area surrounded
+by a border and with a title bar on the top.&nbsp; The border and title bar
+are commonly called "decorations."&nbsp; The position of the window unfortunately
+varies with the operating system.&nbsp; On Linux, it is the coordinates of
+the upper left-hand corner of its decorations.&nbsp; On Windows, it is the
+coordinates of the upper left hand corner of its usable interior.&nbsp; For
+both operating systems, the size of the window is the size of the usable interior.
+ </p>
+
+ <p>Windows has some additional quirks which
+the application programmer should know about.&nbsp; First, the minimum y-coordinate
+of a window decoration is zero.&nbsp; (This is a feature of <i>freeglut</i>
+ and can be adjusted if so desired.)&nbsp; Second, there appears to be a
+minimum window width on Windows which is 104 pixels.&nbsp; The user may specify
+a smaller width, but the Windows system calls ignore it.&nbsp; It is also
+impossible to make a window narrower than this by dragging on its corner.
+ </p>
+
+ <p><b>Changes From GLUT</b> </p>
+
+ <p>For some reason, GLUT is not affected
+by the 104-pixel minimum window width.&nbsp; If the user clicks on the corner
+of a window which is narrower than this amount, the window will immediately
+snap out to this width, but the application can call "<tt>glutReshapeWindow</tt>
+ " and make a window narrower again. </p>
+
+ <h2> 4.3&nbsp; glutInitDisplayMode</h2>
+
+ <h2> 4.4&nbsp; glutInitDisplayString</h2>
+
+ <h1> 5.0&nbsp;<a name="EventProcessing"></a>
+ Event Processing Functions</h1>
+ After an application has finished initializing its windows and menus, it
+ enters an event loop.&nbsp; Within this loop, <i>freeglut</i> polls the
+data entry devices (keyboard, mouse, etc.) and calls the application's appropriate
+callbacks.
+ <p>In GLUT, control never returned from
+the event loop (as invoked by the "<tt>glutMainLoop</tt>" function) to the
+calling function.&nbsp; This prevented an application from having re-entrant
+code, in which GLUT could be invoked from within a callback, and it prevented
+the application from doing any post-processing (such as freeing allocated
+memory) after GLUT had closed down.&nbsp; <i>Freeglut</i> allows the application
+programmer to specify more direct control over the event loop by means of
+two new functions.&nbsp; The first, "<tt>glutMainLoopEvent</tt>", processes
+a single iteration of the event loop and allows the application to use a different
+event loop controller or to contain re-entrant code.&nbsp; The second, "<tt>
+glutLeaveMainLoop</tt>", causes the event loop to exit nicely; this is preferable
+to the application's calling "<tt>exit</tt>" from within a GLUT callback.
+ </p>
+
+ <h2> 5.1&nbsp; glutMainLoop</h2>
+ The "<tt>glutMainLoop</tt>" function enters the event loop.
+
+ <p><b>Usage</b> </p>
+
+ <p><tt>void glutMainLoop ( void ) ;</tt>
+ </p>
+
+ <p><b>Description</b> </p>
+
+ <p>The&nbsp; "<tt>glutMainLoop</tt>" function
+causes the program to enter the window event loop.&nbsp; An application should
+call this function at most once.&nbsp; It will call any application callback
+functions as required to process mouse clicks, mouse motion, key presses,
+and so on. </p>
+
+ <p><b>Changes From GLUT</b> </p>
+
+ <p>In GLUT, there was absolutely no way
+for the application programmer to have control return from the "<tt>glutMainLoop</tt>
+ " function to the calling function.&nbsp; <i>Freeglut</i> allows the programmer
+to force this by setting the "<tt>GLUT_ACTION_ON_WINDOW_CLOSE</tt>" option
+and invoking the "<tt>glutLeaveMainLoop</tt>" function from one of the callbacks.&nbsp;
+ Stopping the program this way is preferable to simply calling "<tt>exit</tt>
+ " from within a callback because this allows <i>freeglut</i> to free allocated
+ memory and otherwise clean up after itself.&nbsp; (I know I just said this,
+ but I think it is important enough that it bears repeating.) </p>
+
+ <h2> 5.2&nbsp; glutMainLoopEvent</h2>
+ The "<tt>glutMainLoopEvent</tt>" function processes a single iteration
+in the <i>freeglut</i> event loop.
+ <p><b>Usage</b> </p>
+
+ <p><tt>void glutMainLoopEvent ( void ) ;</tt>
+ </p>
+
+ <p><b>Description</b> </p>
+
+ <p>The&nbsp; "<tt>glutMainLoopEvent</tt>
+ " function causes <i>freeglut</i> to process one iteration's worth of events
+in its event loop.&nbsp; This allows the application to control its own event
+loop and still use the <i>freeglut</i> windowing system. </p>
+
+ <p><b>Changes From GLUT</b> </p>
+
+ <p>GLUT does not include this function.
+ </p>
+
+ <h2> 5.3&nbsp; glutLeaveMainLoop</h2>
+ The "<tt>glutLeaveMainLoop</tt>" function causes <i>freeglut</i> to stop
+ its event loop.
+ <p><b>Usage</b> </p>
+
+ <p><tt>void glutLeaveMainLoop ( void ) ;</tt>
+ </p>
+
+ <p><b>Description</b> </p>
+
+ <p>The&nbsp; "<tt>glutLeaveMainLoop</tt>
+ " function causes <i>freeglut</i> to stop the event loop.&nbsp; If the
+"<tt> GLUT_ACTION_ON_WINDOW_CLOSE</tt>" option has been set to "<tt>GLUT_ACTION_CONTINUE_EXECUTION</tt>
+ ", control will return to the function which called "<tt>glutMainLoop</tt>
+ "; otherwise the application will exit. </p>
+
+ <p>If the application has two nested calls
+to "<tt>glutMainLoop</tt>" and calls "<tt>glutLeaveMainLoop</tt>", the behaviour
+of <i>freeglut</i> is undefined.&nbsp; It may leave only the inner nested
+loop or it may leave both loops.&nbsp; If the reader has a strong preference
+for one behaviour over the other he should contact the <i>freeglut</i> Programming
+Consortium and ask for the code to be fixed. </p>
+
+ <p><b>Changes From GLUT</b> </p>
+
+ <p>GLUT does not include this function.
+ </p>
+
+ <h1> 6.0&nbsp;<a name="Window"></a>
+ Window Functions</h1>
+
+ <h2> 6.1&nbsp; glutCreateWindow</h2>
+
+ <h2> 6.2&nbsp; glutCreateSubwindow</h2>
+
+ <h2> 6.3&nbsp; glutDestroyWindow</h2>
+
+ <h2> 6.4&nbsp; glutSetWindow, glutGetWindow</h2>
+
+ <h2> 6.5&nbsp; glutSetWindowTitle, glutSetIconTitle</h2>
+
+ <h2> 6.6&nbsp; glutReshapeWindow</h2>
+
+ <h2> 6.7&nbsp; glutPositionWindow</h2>
+
+ <h2> 6.8&nbsp; glutShowWindow, glutHideWindow,
+glutIconifyWindow</h2>
+
+ <h2> 6.9&nbsp; glutPushWindow, glutPopWindow</h2>
+
+ <h2> 6.10&nbsp; glutFullScreen</h2>
+
+ <h1> 7.0&nbsp;<a name="Display"></a>
+ Display Functions</h1>
+
+ <h2> 7.1&nbsp; glutPostRedisplay</h2>
+
+ <h2> 7.2&nbsp; glutPostWindowRedisplay</h2>
+
+ <h2> 7.3&nbsp; glutSwapBuffers</h2>
+
+ <h1> 8.0&nbsp;<a name="MouseCursor"></a>
+ Mouse Cursor Functions</h1>
+
+ <h2> 8.1&nbsp; glutSetCursor</h2>
+
+ <h2> 8.2&nbsp; glutWarpPointer</h2>
+
+ <h1> 9.0&nbsp;<a name="Overlay"></a>
+ Overlay Functions</h1>
+ <i>Freeglut</i> does not allow overlays, although it does "answer the mail"
+ with function stubs so that GLUT-based programs can compile and link against
+ <i>freeglut</i> without modification.&nbsp;
+If the reader needs overlays, he should contact the <i>freeglut</i> Programming
+Consortium and ask for them to be implemented.&nbsp; He should also be prepared
+to assist in the implementation.
+ <h2> 9.1&nbsp; glutEstablishOverlay</h2>
+ The "<tt>glutEstablishOverlay</tt>" function is not implemented in <i>freeglut</i>
+ .
+ <p><b>Usage</b> </p>
+
+ <p><tt>void glutEstablishOverlay ( void
+) ;</tt> </p>
+
+ <p><b>Description</b> </p>
+
+ <p>The "<tt>glutEstablishOverlay</tt>" function
+is not implemented in <i>freeglut</i>. </p>
+
+ <p><b>Changes From GLUT</b> </p>
+
+ <p>GLUT implements this function. </p>
+
+ <h2> 9.2&nbsp; glutRemoveOverlay</h2>
+ The "<tt>glutRemoveOverlay</tt>" function is not implemented in <i>freeglut</i>
+ .
+ <p><b>Usage</b> </p>
+
+ <p><tt>void glutRemoveOverlay ( void ) ;</tt>
+ </p>
+
+ <p><b>Description</b> </p>
+
+ <p>The "<tt>glutRemoveOverlay</tt>" function
+is not implemented in <i>freeglut</i>. </p>
+
+ <p><b>Changes From GLUT</b> </p>
+
+ <p>GLUT implements this function. </p>
+
+ <h2> 9.3&nbsp; glutUseLayer</h2>
+ The "<tt>glutUseLayer</tt>" function is not implemented in <i>freeglut</i>
+ .
+ <p><b>Usage</b> </p>
+
+ <p><tt>void glutUseLayer (&nbsp; GLenum
+layer ) ;</tt> </p>
+
+ <p><b>Description</b> </p>
+
+ <p>The "<tt>glutUseLayer</tt>" function
+is not implemented in <i>freeglut</i>. </p>
+
+ <p><b>Changes From GLUT</b> </p>
+
+ <p>GLUT implements this function. </p>
+
+ <h2> 9.4&nbsp; glutPostOverlayRedisplay</h2>
+ The "<tt>glutPostOverlayRedisplay</tt> " function is not implemented in
+ <i> freeglut</i>.
+
+ <p><b>Usage</b> </p>
+
+ <p><tt>void glutPostOverlayRedisplay ( void
+) ;</tt> </p>
+
+ <p><b>Description</b> </p>
+
+ <p>The "<tt>glutPostOverlayRedisplay</tt>
+ " function is not implemented in <i>freeglut</i>. </p>
+
+ <p><b>Changes From GLUT</b> </p>
+
+ <p>GLUT implements this function. </p>
+
+ <h2> 9.5&nbsp; glutPostWindowOverlayRedisplay</h2>
+ The "<tt>glutPostWindowOverlayRedisplay</tt> " function is not implemented
+ in <i>freeglut</i>.
+ <p><b>Usage</b> </p>
+
+ <p><tt>void glutPostWindowOverlayRedisplay
+( int window ) ;</tt> </p>
+
+ <p><b>Description</b> </p>
+
+ <p>The "<tt>glutPostWindowOverlayRedisplay</tt>
+ " function is not implemented in <i>freeglut</i>. </p>
+
+ <p><b>Changes From GLUT</b> </p>
+
+ <p>GLUT implements this function. </p>
+
+ <h2> 9.6&nbsp; glutShowOverlay, glutHideOverlay</h2>
+ The "<tt>glutShowOverlay</tt>" and "<tt>glutHideOverlay</tt>" functions
+are not implemented in <i>freeglut</i> .
+
+ <p><b>Usage</b> </p>
+
+ <p><tt>void glutShowOverlay( void ) ;</tt>
+ <br>
+ <tt>void glutHideOverlay( void ) ;</tt>
+ </p>
+
+ <p><b>Description</b> </p>
+
+ <p>The "<tt>glutShowOverlay</tt>" and "<tt>
+glutHideOverlay</tt>" functions are not implemented in <i>freeglut</i> .
+ </p>
+
+ <p><b>Changes From GLUT</b> </p>
+
+ <p>GLUT implements these functions. </p>
+
+ <h1> 10.0&nbsp;<a name="Menu"></a>
+ Menu Functions</h1>
+
+ <h2> 10.1&nbsp; glutCreateMenu</h2>
+
+ <h2> 10.2&nbsp; glutDestroyMenu</h2>
+
+ <h2> 10.3&nbsp; glutGetMenu, glutSetMenu</h2>
+
+ <h2> 10.4&nbsp; glutAddMenuEntry</h2>
+
+ <h2> 10.5&nbsp; glutAddSubMenu</h2>
+
+ <h2> 10.6&nbsp; glutChangeToMenuEntry</h2>
+
+ <h2> 10.7&nbsp; glutChangeToSubMenu</h2>
+
+ <h2> 10.8&nbsp; glutRemoveMenuItem</h2>
+
+ <h2> 10.9&nbsp; glutAttachMenu, glutDetachMenu</h2>
+
+ <h1> 11.0&nbsp;<a name="GlobalCallback"></a>
+ Global Callback Registration Functions</h1>
+
+ <h2> 11.1&nbsp; glutTimerFunc</h2>
+
+ <h2> 11.2&nbsp; glutIdleFunc</h2>
+ The "<tt>glutIdleFunc</tt>" function sets the global idle callback. <i>
+Freeglut</i> calls the idle callback when there are no inputs from the user.
+
+ <p><b>Usage</b> </p>
+
+ <p><tt>void glutIdleFunc ( void (*func)
+( void ) ) ;</tt> </p>
+
+ <p><tt>func&nbsp;&nbsp;&nbsp; </tt>The new
+global idle callback function </p>
+
+ <p><b>Description</b> </p>
+
+ <p>The&nbsp; "<tt>glutIdleFunc</tt>" function
+specifies the function that <i>freeglut</i> will call to perform background
+processing tasks such as continuous animation when window system events are
+not being received.&nbsp; If enabled, this function is called continuously
+from <i>freeglut</i> while no events are received.&nbsp; The callback function
+has no parameters and returns no value.&nbsp; <i>Freeglut</i> does not change
+the <i>current window</i> or the <i>current menu</i> before invoking the idle
+callback; programs with multiple windows or menus must explicitly set the
+ <i>current window</i> and <i>current menu</i>
+ and not rely on its current setting. <br>
+ &nbsp;&nbsp;&nbsp; The amount of computation and rendering done in an idle
+callback should be minimized to avoid affecting the program's interactive
+ response.&nbsp; In general, no more than a single frame of rendering should
+ be done in a single invocation of an idle callback. <br>
+ &nbsp;&nbsp;&nbsp; Calling "<tt>glutIdleFunc</tt>" with a NULL argument
+disables the call to an idle callback. </p>
+
+ <p><b>Changes From GLUT</b> </p>
+
+ <p>Application programmers should note that
+if they have specified the "continue execution" action on window closure,
+ <i>freeglut</i> will continue to call the
+idle callback after the user has closed a window by clicking on the "x" in
+the window header bar.&nbsp; If the idle callback renders a particular window
+(this is considered bad form but is frequently done anyway), the programmer
+should supply a window closure callback for that window which changes or disables
+the idle callback. </p>
+
+ <h1> 12.0&nbsp;<a name="WindowCallback"></a>
+ Window-Specific Callback Registration Functions</h1>
+
+ <h2> 12.1&nbsp; glutDisplayFunc</h2>
+
+ <h2> 12.2&nbsp; glutOverlayDisplayFunc</h2>
+
+ <h2> 12.3&nbsp; glutReshapeFunc</h2>
+
+ <h2> 12.4&nbsp; glutCloseFunc</h2>
+
+ <h2> 12.5&nbsp; glutKeyboardFunc</h2>
+
+ <h2> 12.6&nbsp; glutSpecialFunc</h2>
+ The "<tt>glutSpecialFunc</tt>" function sets the window's special key press
+ callback. <i>Freeglut</i> calls the special key press callback when the
+user presses a special key.
+ <p><b>Usage</b> </p>
+
+ <p><tt>void glutSpecialFunc ( void (*func)
+( int key, int x, int y ) ) ;</tt> </p>
+
+ <p><tt>func&nbsp;&nbsp;&nbsp; </tt>The window's
+new special key press callback function <br>
+ <tt>key&nbsp;&nbsp;&nbsp;&nbsp; </tt>The
+key whose press triggers the callback <br>
+ <tt>x&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ </tt>The x-coordinate of the mouse relative
+to the window at the time the key is pressed <br>
+ <tt>y&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ </tt>The y-coordinate of the mouse relative
+to the window at the time the key is pressed </p>
+
+ <p><b>Description</b> </p>
+
+ <p>The&nbsp; "<tt>glutSpecialFunc</tt>"
+function specifies the function that <i>freeglut</i> will call when the user
+presses a special key on the keyboard.&nbsp; The callback function has one
+argument:&nbsp; the name of the function to be invoked ("called back") at
+the time at which the special key is pressed.&nbsp; The function returns no
+value.&nbsp; <i>Freeglut</i> sets the <i>current window</i> to the window
+which is active when the callback is invoked.&nbsp; "Special keys" are the
+function keys, the arrow keys, the Page Up and Page Down keys, and the Insert
+key.&nbsp; The Delete key is considered to be a regular key. <br>
+ &nbsp;&nbsp;&nbsp; Calling "<tt>glutSpecialUpFunc</tt>" with a NULL argument
+disables the call to the window's special key press callback. </p>
+
+ <p>&nbsp;&nbsp;&nbsp; The "<tt>key</tt>
+" argument may take one of the following defined constant values: </p>
+
+ <ul>
+ <li> <tt>GLUT_KEY_F1, GLUT_KEY_F2, ..., GLUT_KEY_F12</tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ - F1 through F12 keys</li>
+ <li> <tt>GLUT_KEY_PAGE_UP, GLUT_KEY_PAGE_DOWN</tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ - Page Up and Page Down keys</li>
+ <li> <tt>GLUT_KEY_HOME, GLUT_KEY_END</tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ - Home and End keys</li>
+ <li> <tt>GLUT_KEY_LEFT, GLUT_KEY_RIGHT, GLUT_KEY_UP, GLUT_KEY_DOWN</tt>
+ - arrow keys</li>
+ <li> <tt>GLUT_KEY_INSERT</tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ - Insert key</li>
+
+ </ul>
+ <b>Changes From GLUT</b>
+ <p>None. </p>
+
+ <h2> 12.7&nbsp; glutKeyboardUpFunc</h2>
+ The "<tt>glutKeyboardUpFunc</tt>" function sets the window's key release
+ callback. <i>Freeglut</i> calls the key release callback when the user releases
+a key.
+ <p><b>Usage</b> </p>
+
+ <p><tt>void glutKeyboardUpFunc ( void (*func)
+( unsigned char key, int x, int y ) ) ;</tt> </p>
+
+ <p><tt>func&nbsp;&nbsp;&nbsp; </tt>The window's
+new key release callback function <br>
+ <tt>key&nbsp;&nbsp;&nbsp;&nbsp; </tt>The
+key whose release triggers the callback <br>
+ <tt>x&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ </tt>The x-coordinate of the mouse relative
+to the window at the time the key is released <br>
+ <tt>y&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ </tt>The y-coordinate of the mouse relative
+to the window at the time the key is released </p>
+
+ <p><b>Description</b> </p>
+
+ <p>The&nbsp; "<tt>glutKeyboardUpFunc</tt>
+" function specifies the function that <i>freeglut</i> will call when the
+user releases a key from the keyboard.&nbsp; The callback function has one
+argument:&nbsp; the name of the function to be invoked ("called back") at
+the time at which the key is released.&nbsp; The function returns no value.&nbsp;
+ <i>Freeglut</i> sets the <i>current window</i>
+ to the window which is active when the callback is invoked. <br>
+ &nbsp;&nbsp;&nbsp; While <i>freeglut</i> checks for upper or lower case
+letters, it does not do so for non-alphabetical characters.&nbsp; Nor does
+it account for the Caps-Lock key being on.&nbsp; The operating system may
+send some unexpected characters to <i>freeglut</i>, such as "8" when the
+user is pressing the Shift key.&nbsp; <i>Freeglut</i> also invokes the callback
+when the user releases the Control, Alt, or Shift keys, among others.&nbsp;
+Releasing the Delete key causes this function to be invoked with a value
+of 127 for "<tt>key</tt>". <br>
+ &nbsp;&nbsp;&nbsp; Calling "<tt>glutKeyboardUpFunc</tt>" with a NULL argument
+disables the call to the window's key release callback. </p>
+
+ <p><b>Changes From GLUT</b> </p>
+
+ <p>This function is not implemented in GLUT
+versions before Version 4.&nbsp; It has been designed to be as close to GLUT
+as possible.&nbsp; Users who find differences should contact the
+ <i>freeglut</i>&nbsp;Programming Consortium to
+have them fixed. </p>
+
+ <h2> 12.8&nbsp; glutSpecialUpFunc</h2>
+ The "<tt>glutSpecialUpFunc</tt>" function sets the window's special key
+release callback. <i>Freeglut</i> calls the special key release callback
+when the user releases a special key.
+ <p><b>Usage</b> </p>
+
+ <p><tt>void glutSpecialUpFunc ( void (*func)
+( int key, int x, int y ) ) ;</tt> </p>
+
+ <p><tt>func&nbsp;&nbsp;&nbsp; </tt>The window's
+new special key release callback function <br>
+ <tt>key&nbsp;&nbsp;&nbsp;&nbsp; </tt>The
+key whose release triggers the callback <br>
+ <tt>x&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ </tt>The x-coordinate of the mouse relative
+to the window at the time the key is released <br>
+ <tt>y&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ </tt>The y-coordinate of the mouse relative
+to the window at the time the key is released </p>
+
+ <p><b>Description</b> </p>
+
+ <p>The&nbsp; "<tt>glutSpecialUpFunc</tt>
+" function specifies the function that <i>freeglut</i> will call when the
+user releases a special key from the keyboard.&nbsp; The callback function
+has one argument:&nbsp; the name of the function to be invoked ("called back")
+at the time at which the special key is released.&nbsp; The function returns
+no value.&nbsp; <i>Freeglut</i> sets the <i>current window</i> to the window
+which is active when the callback is invoked.&nbsp; "Special keys" are the
+function keys, the arrow keys, the Page Up and Page Down keys, and the Insert
+key.&nbsp; The Delete key is considered to be a regular key. <br>
+ &nbsp;&nbsp;&nbsp; Calling "<tt>glutSpecialUpFunc</tt>" with a NULL argument
+disables the call to the window's special key release callback. </p>
+
+ <p>&nbsp;&nbsp;&nbsp; The "<tt>key</tt>
+" argument may take one of the following defined constant values: </p>
+
+ <ul>
+ <li> <tt>GLUT_KEY_F1, GLUT_KEY_F2, ..., GLUT_KEY_F12</tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ - F1 through F12 keys</li>
+ <li> <tt>GLUT_KEY_PAGE_UP, GLUT_KEY_PAGE_DOWN</tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ - Page Up and Page Down keys</li>
+ <li> <tt>GLUT_KEY_HOME, GLUT_KEY_END</tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ - Home and End keys</li>
+ <li> <tt>GLUT_KEY_LEFT, GLUT_KEY_RIGHT, GLUT_KEY_UP, GLUT_KEY_DOWN</tt>
+ - arrow keys</li>
+ <li> <tt>GLUT_KEY_INSERT</tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ - Insert key</li>
+
+ </ul>
+ <b>Changes From GLUT</b>
+ <p>This function is not implemented in GLUT
+versions before Version 4.&nbsp; It has been designed to be as close to GLUT
+as possible.&nbsp; Users who find differences should contact the
+ <i>freeglut</i>&nbsp;Programming Consortium to
+have them fixed. </p>
+
+ <h2> 12.9&nbsp; glutMouseFunc</h2>
+
+ <h2> 12.10&nbsp; glutMotionFunc, glutPassiveMotionFunc</h2>
+
+ <h2> 12.11&nbsp; glutVisibilityFunc</h2>
+
+ <h2> 12.12&nbsp; glutEntryFunc</h2>
+
+ <h2> 12.13&nbsp; glutJoystickFunc</h2>
+
+ <h2> 12.14&nbsp; glutSpaceballMotionFunc</h2>
+ The "<tt>glutSpaceballMotionFunc</tt>" function is not implemented in
+ <i>freeglut</i>, although the library does
+"answer the mail" to the extent that a call to the function will not produce
+an error..
+ <p><b>Usage</b></p>
+
+ <p><tt>void glutSpaceballMotionFunc ( void
+(* callback)( int x, int y, int z )</tt><tt> ) ;</tt></p>
+
+ <p><b>Description</b></p>
+
+ <p>The "<tt>glutSpaceballMotionFunc</tt>
+ " function is not implemented in <i>freeglut</i>. </p>
+
+ <p><b>Changes From GLUT</b></p>
+
+ <p>GLUT implements this function. </p>
+
+ <h2> 12.15&nbsp; glutSpaceballRotateFunc</h2>
+ The "<tt>glutSpaceballRotateFunc</tt>" function is not implemented in
+ <i>freeglut</i>, although the library does
+"answer the mail" to the extent that a call to the function will not produce
+an error..
+ <p><b>Usage</b></p>
+
+ <p><tt>void glutSpaceballRotateFunc ( void
+(* callback)( int x, int y, int z )</tt><tt> ) ;</tt></p>
+
+ <p><b>Description</b></p>
+
+ <p>The "<tt>glutSpaceballRotateFunc</tt>
+ " function is not implemented in <i>freeglut</i>. </p>
+
+ <p><b>Changes From GLUT</b></p>
+
+ <p>GLUT implements this function. </p>
+
+ <h2> 12.16&nbsp; glutSpaceballButtonFunc</h2>
+ The "<tt>glutSpaceballButtonFunc</tt>" function is not implemented in
+ <i>freeglut</i>, although the library does
+"answer the mail" to the extent that a call to the function will not produce
+an error..
+ <p><b>Usage</b></p>
+
+ <p><tt>void glutSpaceballButtonFunc ( void
+(* callback)( int button, int updown )</tt><tt> ) ;</tt></p>
+
+ <p><b>Description</b></p>
+
+ <p>The "<tt>glutSpaceballButtonFunc</tt>
+ " function is not implemented in <i>freeglut</i>. </p>
+
+ <p><b>Changes From GLUT</b></p>
+
+ <p>GLUT implements this function. </p>
+
+ <h2> 12.17&nbsp; glutButtonBoxFunc</h2>
+ The "<tt>glutSpaceballButtonBoxFunc</tt>" function is not implemented
+in <i>freeglut</i>, although the library does "answer the mail" to the extent
+that a call to the function will not produce an error..
+
+ <p><b>Usage</b></p>
+
+ <p><tt>void glutSpaceballButtonBoxFunc (
+void (* callback)( int button, int updown )</tt><tt> ) ;</tt></p>
+
+ <p><b>Description</b></p>
+
+ <p>The "<tt>glutSpaceballButtonBoxFunc</tt>
+ " function is not implemented in <i>freeglut</i>. </p>
+
+ <p><b>Changes From GLUT</b></p>
+
+ <p>GLUT implements this function. </p>
+
+ <h2> 12.18&nbsp; glutDialsFunc</h2>
+ The "<tt>glutDialsFunc</tt>" function is not implemented in <i>freeglut</i>
+ , although the library does "answer the mail" to the extent that a call
+to the function will not produce an error..
+
+ <p><b>Usage</b></p>
+
+ <p><tt>void glutDialsFunc ( void (* callback)(
+int dial, int value )</tt><tt> ) ;</tt></p>
+
+ <p><b>Description</b></p>
+
+ <p>The "<tt>glutDialsFunc</tt>" function
+is not implemented in <i>freeglut</i>. </p>
+
+ <p><b>Changes From GLUT</b></p>
+
+ <p>GLUT implements this function. </p>
+
+ <h2> 12.19&nbsp; glutTabletMotionFunc</h2>
+ The "<tt>glutTabletMotionFunc</tt>" function is not implemented in <i>
+ freeglut</i>, although the library does "answer the mail" to the extent
+that a call to the function will not produce an error..
+
+ <p><b>Usage</b></p>
+
+ <p><tt>void glutTabletMotionFunc ( void
+(* callback)( int x, int y )</tt><tt> ) ;</tt></p>
+
+ <p><b>Description</b></p>
+
+ <p>The "<tt>glutTabletMotionFunc</tt>" function
+is not implemented in <i>freeglut</i>. </p>
+
+ <p><b>Changes From GLUT</b></p>
+
+ <p>GLUT implements this function. </p>
+
+ <h2> 12.20&nbsp; glutTabletButtonFunc</h2>
+ The "<tt>glutTabletButtonFunc</tt>" function is not implemented in <i>
+ freeglut</i>, although the library does "answer the mail" to the extent
+that a call to the function will not produce an error..
+
+ <p><b>Usage</b></p>
+
+ <p><tt>void glutTabletButtonFunc ( void
+(* callback)( int button, int updown, int x, int y )</tt><tt> ) ;</tt></p>
+
+ <p><b>Description</b></p>
+
+ <p>The "<tt>glutTabletButtonFunc</tt>" function
+is not implemented in <i>freeglut</i>. </p>
+
+ <p><b>Changes From GLUT</b></p>
+
+ <p>GLUT implements this function. </p>
+
+ <h2> 12.21&nbsp; glutMenuStatusFunc</h2>
+
+ <h2> 12.22&nbsp; glutWindowStatusFunc</h2>
+
+ <h1> 13.0&nbsp;<a name="StateSetting"></a>
+ State Setting and Retrieval Functions</h1>
+
+ <h2> 13.1&nbsp; glutSetOption</h2>
+
+ <h2> 13.2&nbsp; glutGet</h2>
+
+
+<p>
+The following state variables may be queried with "<tt>glutGet</tt>".
+The returned value is an integer.
+</p>
+
+<p>
+These queries are with respect to the current window:
+</p>
+
+<ul>
+<li>GLUT_WINDOW_X - window X position
+<li>GLUT_WINDOW_Y - window Y position
+<li>GLUT_WINDOW_WIDTH - window width
+<li>GLUT_WINDOW_HEIGHT - window height
+<li>GLUT_WINDOW_BUFFER_SIZE - number of color or color index bits per pixel
+<li>GLUT_WINDOW_STENCIL_SIZE - number of bits per stencil value
+<li>GLUT_WINDOW_DEPTH_SIZE - number of bits per depth value
+<li>GLUT_WINDOW_RED_SIZE - number of bits per red value
+<li>GLUT_WINDOW_GREEN_SIZE - number of bits per green value
+<li>GLUT_WINDOW_BLUE_SIZE - number of bits per blue value
+<li>GLUT_WINDOW_ALPHA_SIZE - number of bits per alpha value
+<li>GLUT_WINDOW_ACCUM_RED_SIZE - number of red bits in the accumulation buffer
+<li>GLUT_WINDOW_ACCUM_GREEN_SIZE - number of green bits in the accumulation buffer
+<li>GLUT_WINDOW_ACCUM_BLUE_SIZE - number of blue bits in the accumulation buffer
+<li>GLUT_WINDOW_ACCUM_ALPHA_SIZE - number of alpha bits in the accumulation buffer
+<li>GLUT_WINDOW_DOUBLEBUFFER - 1 if the color buffer is double buffered, 0 otherwise
+<li>GLUT_WINDOW_RGBA - 1 if the color buffers are RGB[A], 0 for color index
+<li>GLUT_WINDOW_PARENT - parent window ID
+<li>GLUT_WINDOW_NUM_CHILDREN - number of child windows
+<li>GLUT_WINDOW_COLORMAP_SIZE - number of entries in the window's colormap
+<li>GLUT_WINDOW_NUM_SAMPLES - number of samples per pixel if using multisampling
+<li>GLUT_WINDOW_STEREO - 1 if the window supports stereo, 0 otherwise
+<li>GLUT_WINDOW_CURSOR - current cursor
+<li>GLUT_WINDOW_FORMAT_ID - on Windows, return the pixel format number of the current window
+</ul>
+
+<p>
+These queries do not depend on the current window.
+</p>
+
+<ul>
+<li>GLUT_SCREEN_WIDTH - width of the screen in pixels
+<li>GLUT_SCREEN_HEIGHT - height of the screen in pixels
+<li>GLUT_SCREEN_WIDTH_MM - width of the screen in millimeters
+<li>GLUT_SCREEN_HEIGHT_MM - height of the screen in millimeters
+<li>GLUT_MENU_NUM_ITEMS - number of items in the current menu
+<li>GLUT_DISPLAY_MODE_POSSIBLE - return 1 if the current display mode is supported, 0 otherwise
+<li>GLUT_INIT_WINDOW_X - X position last set by glutInitWindowPosition
+<li>GLUT_INIT_WINDOW_Y - Y position last set by glutInitWindowPosition
+<li>GLUT_INIT_WINDOW_WIDTH - width last set by glutInitWindowSize
+<li>GLUT_INIT_WINDOW_HEIGHT - height last set by glutInitWindowSize
+<li>GLUT_INIT_DISPLAY_MODE - display mode last set by glutInitDisplayMode
+<li>GLUT_ELAPSED_TIME - time (in milliseconds) elapsed since glutInit or glutGet(GLUT_ELAPSED_TIME) was first called
+<li>GLUT_INIT_STATE - ?
+<li>GLUT_VERSION - Return value will be X*10000+Y*100+Z where X is the
+ major version, Y is the minor version and Z is the patch level.
+ This query is only supported in <i>freeglut</i> (version 2.0.0 or later).
+</ul>
+
+
+ <h2> 13.3&nbsp; glutDeviceGet</h2>
+
+ <h2> 13.4&nbsp; glutGetModifiers</h2>
+
+ <h2> 13.5&nbsp; glutLayerGet</h2>
+
+ <h2> 13.6&nbsp; glutExtensionSupported</h2>
+
+ <h2> 13.7&nbsp; glutGetProcAddress</h2>
+ <p><tt>glutGetProcAddress</tt> returns
+a pointer to a named GL or <i>freeglut</i> function. </p>
+ <p><b>Usage</b></p>
+ <p><tt>void *glutGetProcAddress ( const
+char *procName ) ;</tt></p>
+ <p><tt>procName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ </tt>Name of an OpenGL or GLUT function.
+ </p>
+ <p><b>Description</b></p>
+ <p><tt>glutGetProcAddress</tt> is useful
+for dealing with OpenGL extensions. If an application calls OpenGL extension
+functions directly, that application will only link/run with an OpenGL library
+that supports the extension. By using a function pointer returned from glutGetProcAddress(),
+the application will avoid this hard dependency and be more portable and interoperate
+better with various implementations of OpenGL. </p>
+ <p> Both OpenGL functions and <i>freeglut</i>
+functions can be queried with this function. </p>
+ <p><b>Changes From GLUT</b> </p>
+
+ <p>GLUT does not include this function.
+ </p>
+
+ <h1> 14.0&nbsp;<a name="FontRendering"></a>
+ Font Rendering Functions</h1>
+ <i>Freeglut</i> supports two types of font rendering:&nbsp; bitmap fonts,
+ which are rendered using the "<tt>glBitmap</tt>" function call, and stroke
+ fonts, which are rendered as sequences of OpenGL line segments.&nbsp; Because
+ they are rendered as bitmaps, the bitmap fonts tend to render more quickly
+ than stroke fonts, but they are less flexible in terms of scaling and rendering.&nbsp;
+ Bitmap font characters are positioned with calls to the "<tt>glRasterPos*</tt>
+ " functions while stroke font characters use the OpenGL transformations
+to position characters.
+ <p>&nbsp;&nbsp;&nbsp; It should be noted
+that <i>freeglut</i> fonts are similar but not identical to GLUT fonts.&nbsp;
+At the moment, <i>freeglut</i> fonts do not support the "`" (backquote) and
+"|" (vertical line) characters; in their place it renders asterisks. </p>
+
+ <p>&nbsp;&nbsp;&nbsp; <i>Freeglut</i> supports
+the following bitmap fonts: </p>
+
+ <ul>
+ <li> <tt>GLUT_BITMAP_8_BY_13</tt> - A variable-width font with every character
+ fitting in a rectangle of 13 pixels high by at most 8 pixels wide.</li>
+ <li> <tt>GLUT_BITMAP_9_BY_15</tt> - A variable-width font with every character
+ fitting in a rectangle of 15 pixels high by at most 9 pixels wide.</li>
+ <li> <tt>GLUT_BITMAP_TIMES_ROMAN_10</tt> - A 10-point variable-width Times
+Roman font.</li>
+ <li> <tt>GLUT_BITMAP_TIMES_ROMAN_24</tt> - A 24-point variable-width Times
+Roman font.</li>
+ <li> <tt>GLUT_BITMAP_HELVETICA_10</tt> - A 10-point variable-width Helvetica
+ font.</li>
+ <li> <tt>GLUT_BITMAP_HELVETICA_12</tt> - A 12-point variable-width Helvetica
+ font.</li>
+ <li> <tt>GLUT_BITMAP_HELVETICA_18</tt> - A 18-point variable-width Helvetica
+ font.</li>
+
+ </ul>
+ <i>Freeglut</i> calls "<tt>glRasterPos4v</tt>" to advance the cursor by
+the width of a character and to render carriage returns when appropriate.&nbsp;
+ It does not use any display lists in it rendering in bitmap fonts.
+
+ <p>&nbsp;&nbsp;&nbsp; <i>Freeglut</i> supports
+the following stroke fonts: </p>
+
+ <ul>
+ <li> <tt>GLUT_STROKE_ROMAN</tt> - A proportionally-spaced Roman Simplex
+font</li>
+ <li> <tt>GLUT_STROKE_MONO_ROMAN</tt> - A fixed-width Roman Simplex font</li>
+
+ </ul>
+ <i>Freeglut</i> does not use any display lists in its rendering of stroke
+ fonts.&nbsp; It calls "<tt>glTranslatef</tt>" to advance the cursor by the
+width of a character and to render carriage returns when appropriate.
+
+ <h2> 14.1&nbsp; glutBitmapCharacter</h2>
+ The "<tt>glutBitmapCharacter</tt>" function renders a single bitmapped
+character in the <i>current window</i> using the specified font.
+
+ <p><b>Usage</b> </p>
+
+ <p><tt>void glutBitmapCharacter ( void *font,
+int character ) ;</tt> </p>
+
+ <p><tt>font&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ </tt>The bitmapped font to use in rendering
+the character <br>
+ <tt>character&nbsp;&nbsp; </tt>The ASCII
+code of the character to be rendered </p>
+
+ <p><b>Description</b> </p>
+
+ <p>The&nbsp; "<tt>glutBitmapCharacter</tt>
+ " function renders the given character in the specified bitmap font.&nbsp;
+ <i>Freeglut</i> automatically sets the necessary
+pixel unpack storage modes and restores the existing modes when it has finished.&nbsp;
+Before the first call to "<tt>glutBitMapCharacter</tt> " the application
+program should call "<tt>glRasterPos*</tt>" to set the position of the character
+in the window.&nbsp; The "<tt>glutBitmapCharacter</tt> " function advances
+the cursor position as part of its call to "<tt>glBitmap</tt> " and so the
+application does not need to call "<tt>glRasterPos*</tt>" again for successive
+characters on the same line. </p>
+
+ <p><b>Changes From GLUT</b> </p>
+
+ <p>Nonexistent characters are rendered as
+asterisks.&nbsp; The rendering position in <i>freeglut</i> is apparently off
+from GLUT's position by a few pixels vertically and one or two pixels horizontally.
+ </p>
+
+ <h2> 14.2&nbsp; glutBitmapString</h2>
+ The "<tt>glutBitmapString</tt>" function renders a string of bitmapped
+characters in the <i>current window</i> using the specified font.
+
+ <p><b>Usage</b> </p>
+
+ <p><tt>void glutBitmapString ( void *font,
+char *string ) ;</tt> </p>
+
+ <p><tt>font&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ </tt>The bitmapped font to use in rendering
+the character string <br>
+ <tt>string&nbsp;&nbsp;&nbsp; </tt>String
+of characters to be rendered </p>
+
+ <p><b>Description</b> </p>
+
+ <p>The&nbsp; "<tt>glutBitmapString</tt>
+ " function renders the given character string in the specified bitmap font.&nbsp;
+ <i>Freeglut</i> automatically sets the necessary
+pixel unpack storage modes and restores the existing modes when it has finished.&nbsp;
+Before calling "<tt>glutBitMapString</tt>" the application program should
+call "<tt>glRasterPos*</tt>" to set the position of the string in the window.&nbsp;
+The "<tt>glutBitmapString</tt>" function handles carriage returns.&nbsp;
+Nonexistent characters are rendered as asterisks. </p>
+
+ <p><b>Changes From GLUT</b> </p>
+
+ <p>GLUT does not include this function.
+ </p>
+
+ <h2> 14.3&nbsp; glutBitmapWidth</h2>
+ The "<tt>glutBitmapWidth</tt>" function returns the width in pixels of
+a single bitmapped character in the specified font.
+
+ <p><b>Usage</b> </p>
+
+ <p><tt>int glutBitmapWidth ( void *font,
+int character ) ;</tt> </p>
+
+ <p><tt>font&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ </tt>The bitmapped font to use in calculating
+the character width <br>
+ <tt>character&nbsp;&nbsp; </tt>The ASCII
+code of the character </p>
+
+ <p><b>Description</b> </p>
+
+ <p>The&nbsp; "<tt>glutBitmapWidth</tt>"
+function returns the width of the given character in the specified bitmap
+font.&nbsp; Because the font is bitmapped, the width is an exact integer.
+ </p>
+
+ <p><b>Changes From GLUT</b> </p>
+
+ <p>Nonexistent characters return the width
+of an asterisk. </p>
+
+ <h2> 14.4&nbsp; glutBitmapLength</h2>
+ The "<tt>glutBitmapLength</tt>" function returns the width in pixels of
+a string of bitmapped characters in the specified font.
+
+ <p><b>Usage</b> </p>
+
+ <p><tt>int glutBitmapLength ( void *font,
+char *string ) ;</tt> </p>
+
+ <p><tt>font&nbsp;&nbsp;&nbsp; </tt>The bitmapped
+font to use in calculating the character width <br>
+ <tt>string&nbsp; </tt>String of characters
+whose width is to be calculated </p>
+
+ <p><b>Description</b> </p>
+
+ <p>The&nbsp; "<tt>glutBitmapLength</tt>
+ " function returns the width in pixels of the given character string in
+the specified bitmap font.&nbsp; Because the font is bitmapped, the width
+is an exact integer:&nbsp; the return value is identical to the sum of the
+character widths returned by a series of calls to "<tt>glutBitmapWidth</tt>
+".&nbsp; The width of nonexistent characters is counted to be the width of
+an asterisk. </p>
+
+ <p>&nbsp;&nbsp;&nbsp; If the string contains
+one or more carriage returns, <i>freeglut</i> calculates the widths in pixels
+of the lines separately and returns the largest width. </p>
+
+ <p><b>Changes From GLUT</b> </p>
+
+ <p>GLUT does not include this function.
+ </p>
+
+ <h2> 14.5&nbsp; glutBitmapHeight</h2>
+ The "<tt>glutBitmapHeight</tt>" function returns the height in pixels of
+ the specified font.
+ <p><b>Usage</b> </p>
+
+ <p><tt>int glutBitmapHeight ( void *font
+) ;</tt> </p>
+
+ <p><tt>font&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ </tt>The bitmapped font to use in calculating
+the character height </p>
+
+ <p><b>Description</b> </p>
+
+ <p>The&nbsp; "<tt>glutBitmapHeight</tt>
+ " function returns the height of a character in the specified bitmap font.&nbsp;
+Because the font is bitmapped, the height is an exact integer.&nbsp; The fonts
+are designed such that all characters have (nominally) the same height.
+ </p>
+
+ <p><b>Changes From GLUT</b> </p>
+
+ <p>GLUT does not include this function.
+ </p>
+
+ <h2> 14.6&nbsp; glutStrokeCharacter</h2>
+ The "<tt>glutStrokeCharacter</tt>" function renders a single stroke character
+ in the <i>current window</i> using the specified font.
+
+ <p><b>Usage</b> </p>
+
+ <p><tt>void glutStrokeCharacter ( void *font,
+int character ) ;</tt> </p>
+
+ <p><tt>font&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ </tt>The stroke font to use in rendering
+the character <br>
+ <tt>character&nbsp;&nbsp; </tt>The ASCII
+code of the character to be rendered </p>
+
+ <p><b>Description</b> </p>
+
+ <p>The&nbsp; "<tt>glutStrokeCharacter</tt>
+ " function renders the given character in the specified stroke font.&nbsp;
+Before the first call to "<tt>glutStrokeCharacter</tt>" the application program
+should call the OpenGL transformation (positioning and scaling) functions
+to set the position of the character in the window.&nbsp; The "<tt>glutStrokeCharacter</tt>
+ " function advances the cursor position by a call to "<tt>glTranslatef</tt>
+ " and so the application does not need to call the OpenGL positioning functions
+ again for successive characters on the same line. </p>
+
+ <p><b>Changes From GLUT</b> </p>
+
+ <p>Nonexistent characters are rendered as
+asterisks. </p>
+
+ <h2> 14.7&nbsp; glutStrokeString</h2>
+ The "<tt>glutStrokeString</tt>" function renders a string of characters
+in the <i>current window</i> using the specified stroke font.
+
+ <p><b>Usage</b> </p>
+
+ <p><tt>void glutStrokeString ( void *font,
+char *string ) ;</tt> </p>
+
+ <p><tt>font&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ </tt>The stroke font to use in rendering
+the character string <br>
+ <tt>string&nbsp;&nbsp;&nbsp; </tt>String
+of characters to be rendered </p>
+
+ <p><b>Description</b> </p>
+
+ <p>The&nbsp; "<tt>glutStrokeString</tt>
+ " function renders the given character string in the specified stroke font.&nbsp;
+Before calling "<tt>glutStrokeString</tt>" the application program should
+call the OpenGL transformation (positioning and scaling) functions to set
+the position of the string in the window.&nbsp; The "<tt>glutStrokeString</tt>
+ " function handles carriage returns.&nbsp; Nonexistent characters are rendered
+as asterisks. </p>
+
+ <p><b>Changes From GLUT</b> </p>
+
+ <p>GLUT does not include this function.
+ </p>
+
+ <h2> 14.8&nbsp; glutStrokeWidth</h2>
+ The "<tt>glutStrokeWidth</tt>" function returns the width in pixels of
+a single character in the specified stroke font.
+
+ <p><b>Usage</b> </p>
+
+ <p><tt>int glutStrokeWidth ( void *font,
+int character ) ;</tt> </p>
+
+ <p><tt>font&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ </tt>The stroke font to use in calculating
+the character width <br>
+ <tt>character&nbsp;&nbsp; </tt>The ASCII
+code of the character </p>
+
+ <p><b>Description</b> </p>
+
+ <p>The&nbsp; "<tt>glutStrokeWidth</tt>"
+function returns the width of the given character in the specified stroke
+font.&nbsp; Because the font is a stroke font, the width is actually a floating-point
+number; the function rounds it to the nearest integer for the return value.
+ </p>
+
+ <p><b>Changes From GLUT</b> </p>
+
+ <p>Nonexistent characters return the width
+of an asterisk. </p>
+
+ <h2> 14.9&nbsp; glutStrokeLength</h2>
+ The "<tt>glutStrokeLength</tt>" function returns the width in pixels of
+a string of characters in the specified stroke font.
+
+ <p><b>Usage</b> </p>
+
+ <p><tt>int glutStrokeLength ( void *font,
+char *string ) ;</tt> </p>
+
+ <p><tt>font&nbsp;&nbsp;&nbsp; </tt>The stroke
+font to use in calculating the character width <br>
+ <tt>string&nbsp; </tt>String of characters
+whose width is to be calculated </p>
+
+ <p><b>Description</b> </p>
+
+ <p>The&nbsp; "<tt>glutStrokeLength</tt>
+ " function returns the width in pixels of the given character string in
+the specified stroke font.&nbsp; Because the font is a stroke font, the width
+of an individual character is a floating-point number.&nbsp; <i>Freeglut</i>
+ adds the floating-point widths and rounds the funal result to return the
+integer value.&nbsp; Thus the return value may differ from the sum of the
+character widths returned by a series of calls to "<tt>glutStrokeWidth</tt>
+ ".&nbsp; The width of nonexistent characters is counted to be the width
+of an asterisk. </p>
+
+ <p>&nbsp;&nbsp;&nbsp; If the string contains
+one or more carriage returns, <i>freeglut</i> calculates the widths in pixels
+of the lines separately and returns the largest width. </p>
+
+ <p><b>Changes From GLUT</b> </p>
+
+ <p>GLUT does not include this function.
+ </p>
+
+ <h2> 14.10&nbsp; glutStrokeHeight</h2>
+ The "<tt>glutStrokeHeight</tt>" function returns the height in pixels of
+ the specified font.
+ <p><b>Usage</b> </p>
+
+ <p><tt>GLfloat glutStrokeHeight ( void *font
+) ;</tt> </p>
+
+ <p><tt>font&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ </tt>The stroke font to use in calculating
+the character height </p>
+
+ <p><b>Description</b> </p>
+
+ <p>The&nbsp; "<tt>glutStrokeHeight</tt>
+ " function returns the height of a character in the specified stroke font.&nbsp;
+The application programmer should note that, unlike the other <i>freeglut</i>
+ font functions, this one returns a floating-point number.&nbsp; The fonts
+are designed such that all characters have (nominally) the same height. </p>
+
+ <p><b>Changes From GLUT</b> </p>
+
+ <p>GLUT does not include this function.
+ </p>
+
+ <h1> 15.0&nbsp;<a name="GeometricObject"></a>
+ Geometric Object Rendering Functions</h1>
+ <i>Freeglut</i> includes eighteen routines for generating easily-recognizable
+ 3-d geometric objects.&nbsp; These routines are effectively the same ones
+ that are included in the GLUT library, and reflect the functionality available
+ in the <i>aux</i> toolkit described in the <i>OpenGL Programmer's Guide</i>
+ .&nbsp; They are included to allow programmers to create with a single
+line of code a three-dimensional object which can be used to test a variety
+of OpenGL functionality.&nbsp; None of the routines generates a display list
+for the object which it draws.&nbsp; The functions generate normals appropriate
+for lighting but, except for the teapon functions, do not generate texture
+coordinates.
+ <h2> 15.1&nbsp; glutWireSphere, glutSolidSphere</h2>
+ The "<tt>glutWireSphere</tt>" and "<tt>glutSolidSphere</tt>" functions
+draw a wireframe and solid sphere respectively.
+
+ <p><b>Usage</b> </p>
+
+ <p><tt>void glutWireSphere ( GLdouble dRadius,
+GLint slices, GLint stacks ) ;</tt> </p>
+
+ <p><tt>void glutSolidSphere ( GLdouble dRadius,
+GLint slices, GLint stacks ) ;</tt> </p>
+
+ <p><tt>dRadius&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ </tt>The desired radius of the sphere </p>
+
+ <p><tt>slices&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ </tt>The desired number of slices (divisions
+in the longitudinal direction) in the sphere </p>
+
+ <p><tt>stacks&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ </tt>The desired number of stacks (divisions
+in the latitudinal direction) in the sphere.&nbsp; The number of points in
+this direction, including the north and south poles, is <tt>stacks+1</tt>
+ </p>
+
+ <p><b>Description</b> </p>
+
+ <p>The "<tt>glutWireSphere</tt>" and "<tt>
+ glutSolidSphere</tt>" functions render a sphere centered at the origin
+of the modeling coordinate system.&nbsp; The north and south poles of the
+sphere are on the positive and negative Z-axes respectively and the prime
+meridian crosses the positive X-axis. </p>
+
+ <p><b>Changes From GLUT</b> </p>
+
+ <p>None that we know of. </p>
+
+ <h2> 15.2&nbsp; glutWireTorus, glutSolidTorus</h2>
+ The "<tt>glutWireTorus</tt>" and "<tt>glutSolidTorus</tt>" functions draw
+ a wireframe and solid torus (donut shape) respectively.
+
+ <p><b>Usage</b> </p>
+
+ <p><tt>void glutWireTorus ( GLdouble dInnerRadius,
+GLdouble dOuterRadius, GLint nSides, GLint nRings ) ;</tt> </p>
+
+ <p><tt>void glutSolidTorus ( GLdouble dInnerRadius,
+GLdouble dOuterRadius, GLint nSides, GLint nRings ) ;</tt> </p>
+
+ <p><tt>dInnerRadius&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ </tt>The desired inner radius of the torus,
+from the origin to the circle defining the centers of the outer circles </p>
+
+ <p><tt>dOuterRadius&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ </tt>The desired outer radius of the torus,
+from the center of the outer circle to the actual surface of the torus </p>
+
+ <p><tt>nSides&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ </tt>The desired number of segments in a
+single outer circle of the torus </p>
+
+ <p><tt>nRings&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ </tt>The desired number of outer circles
+around the origin of the torus </p>
+
+ <p><b>Description</b> </p>
+
+ <p>The "<tt>glutWireTorus</tt>" and "<tt>
+ glutSolidTorus</tt>" functions render a torus centered at the origin of
+the modeling coordinate system.&nbsp; The torus is circularly symmetric about
+the Z-axis and starts at the positive X-axis. </p>
+
+ <p><b>Changes From GLUT</b> </p>
+
+ <p>None that we know of. </p>
+
+ <h2> 15.3&nbsp; glutWireCone, glutSolidCone</h2>
+ The "<tt>glutWireCone</tt>" and "<tt>glutSolidCone</tt>" functions draw
+a wireframe and solid cone respectively.
+
+ <p><b>Usage</b> </p>
+
+ <p><tt>void glutWireCone ( GLdouble base,
+GLdouble height, GLint slices, GLint stacks ) ;</tt> </p>
+
+ <p><tt>void glutSolidCone ( GLdouble base,
+GLdouble height, GLint slices, GLint stacks ) ;</tt> </p>
+
+ <p><tt>base&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ </tt>The desired radius of the base of the
+cone </p>
+
+ <p><tt>height&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ </tt>The desired height of the cone </p>
+
+ <p><tt>slices&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ </tt>The desired number of slices around
+the base of the cone </p>
+
+ <p><tt>stacks&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ </tt>The desired number of segments between
+the base and the tip of the cone (the number of points, including the tip,
+is <tt>stacks + 1</tt>) </p>
+
+ <p><b>Description</b> </p>
+
+ <p>The "<tt>glutWireCone</tt>" and "<tt>
+ glutSolidCone</tt>" functions render a right circular cone with a base
+centered at the origin and in the X-Y plane and its tip on the positive Z-axis.&nbsp;
+The wire cone is rendered with triangular elements. </p>
+
+ <p><b>Changes From GLUT</b> </p>
+
+ <p>None that we know of. </p>
+
+ <h2> 15.4&nbsp; glutWireCube, glutSolidCube</h2>
+ The "<tt>glutWireCube</tt>" and "<tt>glutSolidCube</tt>" functions draw
+a wireframe and solid cube respectively.
+
+ <p><b>Usage</b> </p>
+
+ <p><tt>void glutWireCube ( GLdouble dSize
+) ;</tt> </p>
+
+ <p><tt>void glutSolidCube ( GLdouble dSize
+) ;</tt> </p>
+
+ <p><tt>dSize&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ </tt>The desired length of an edge of the
+cube </p>
+
+ <p><b>Description</b> </p>
+
+ <p>The "<tt>glutWireCube</tt>" and "<tt>
+ glutSolidCube</tt>" functions render a cube of the desired size, centered
+at the origin.&nbsp; Its faces are normal to the coordinate directions. </p>
+
+ <p><b>Changes From GLUT</b> </p>
+
+ <p>None that we know of. </p>
+
+ <h2> 15.5&nbsp; glutWireTetrahedron, glutSolidTetrahedron</h2>
+ The "<tt>glutWireTetrahedron</tt>" and "<tt>glutSolidTetrahedron</tt>"
+functions draw a wireframe and solid tetrahedron (four-sided Platonic solid)
+respectively.
+ <p><b>Usage</b> </p>
+
+ <p><tt>void glutWireTetrahedron ( void )
+;</tt> </p>
+
+ <p><tt>void glutSolidTetrahedron ( void
+) ;</tt> </p>
+
+ <p><b>Description</b> </p>
+
+ <p>The "<tt>glutWireTetrahedron</tt>" and
+"<tt>glutSolidTetrahedron</tt>" functions render a tetrahedron whose corners
+are each a distance of one from the origin.&nbsp; The length of each side
+is 2/3 sqrt(6).&nbsp; One corner is on the positive X-axis and another is
+in the X-Y plane with a positive Y-coordinate. </p>
+
+ <p><b>Changes From GLUT</b> </p>
+
+ <p>None that we know of. </p>
+
+ <h2> 15.6&nbsp; glutWireOctahedron, glutSolidOctahedron</h2>
+ The "<tt>glutWireOctahedron</tt>" and "<tt>glutSolidOctahedron</tt>" functions
+ draw a wireframe and solid octahedron (eight-sided Platonic solid) respectively.
+
+ <p><b>Usage</b> </p>
+
+ <p><tt>void glutWireOctahedron ( void )
+;</tt> </p>
+
+ <p><tt>void glutSolidOctahedron ( void )
+;</tt> </p>
+
+ <p><b>Description</b> </p>
+
+ <p>The "<tt>glutWireOctahedron</tt>" and
+"<tt>glutSolidOctahedron</tt>" functions render an octahedron whose corners
+are each a distance of one from the origin.&nbsp; The length of each side
+is sqrt(2).&nbsp; The corners are on the positive and negative coordinate
+axes. </p>
+
+ <p><b>Changes From GLUT</b> </p>
+
+ <p>None that we know of. </p>
+
+ <h2> 15.7&nbsp; glutWireDodecahedron, glutSolidDodecahedron</h2>
+ The "<tt>glutWireDodecahedron</tt>" and "<tt>glutSolidDodecahedron</tt>
+" functions draw a wireframe and solid dodecahedron (twelve-sided Platonic
+solid) respectively.
+ <p><b>Usage</b> </p>
+
+ <p><tt>void glutWireDodecahedron ( void
+) ;</tt> </p>
+
+ <p><tt>void glutSolidDodecahedron ( void
+) ;</tt> </p>
+
+ <p><b>Description</b> </p>
+
+ <p>The "<tt>glutWireDodecahedron</tt>" and
+"<tt>glutSolidDodecahedron</tt>" functions render a dodecahedron whose corners
+are each a distance of sqrt(3) from the origin.&nbsp; The length of each
+side is sqrt(5)-1.&nbsp; There are twenty corners; interestingly enough,
+eight of them coincide with the corners of a cube with sizes of length 2.
+ </p>
+
+ <p><b>Changes From GLUT</b> </p>
+
+ <p>None that we know of. </p>
+
+ <h2> 15.8&nbsp; glutWireIcosahedron, glutSolidIcosahedron</h2>
+ The "<tt>glutWireIcosahedron</tt>" and "<tt>glutSolidIcosahedron</tt>"
+functions draw a wireframe and solid icosahedron (twenty-sided Platonic solid)
+respectively.
+ <p><b>Usage</b> </p>
+
+ <p><tt>void glutWireIcosahedron ( void )
+;</tt> </p>
+
+ <p><tt>void glutSolidIcosahedron ( void
+) ;</tt> </p>
+
+ <p><b>Description</b> </p>
+
+ <p>The "<tt>glutWireIcosahedron</tt>" and
+"<tt>glutSolidIcosahedron</tt>" functions render an icosahedron whose corners
+are each a unit distance from the origin.&nbsp; The length of each side is
+slightly greater than one.&nbsp; Two of the corners lie on the positive and
+negative X-axes. </p>
+
+ <p><b>Changes From GLUT</b> </p>
+
+ <p>None that we know of. </p>
+
+ <h2> 15.7&nbsp; glutWireRhombicDodecahedron,
+glutSolidRhombicDodecahedron</h2>
+ The "<tt>glutWireRhombicDodecahedron</tt>" and "<tt>glutSolidRhombicDodecahedron</tt>
+ " functions draw a wireframe and solid rhombic dodecahedron (twelve-sided
+ semi-regular solid) respectively.
+ <p><b>Usage</b> </p>
+
+ <p><tt>void glutWireRhombicDodecahedron
+( void ) ;</tt> </p>
+
+ <p><tt>void glutSolidRhombicDodecahedron
+( void ) ;</tt> </p>
+
+ <p><b>Description</b> </p>
+
+ <p>The "<tt>glutWireRhombicDodecahedron</tt>
+ " and "<tt>glutSolidRhombicDodecahedron</tt>" functions render a rhombic
+dodecahedron whose corners are at most a distance of one from the origin.&nbsp;
+The rhombic dodecahedron has faces which are identical rhombuses (rhombi?)
+but which have some vertices at which three faces meet and some vertices at
+which four faces meet.&nbsp; The length of each side is sqrt(3)/2.&nbsp; Vertices
+at which four faces meet are found at (0, 0, <u>+</u>1) and (<u> +</u>sqrt(2)/2,
+ <u>+</u>sqrt(2)/2, 0). </p>
+
+ <p><b>Changes From GLUT</b> </p>
+
+ <p>GLUT does not include these functions.
+ </p>
+
+ <h2> 15.10&nbsp; glutWireTeapot, glutSolidTeapot</h2>
+ The "<tt>glutWireTeapot</tt>" and "<tt>glutSolidTeapot</tt>" functions
+draw a wireframe and solid teapot respectively.
+
+ <p><b>Usage</b> </p>
+
+ <p><tt>void glutWireTeapot ( GLdouble dSize
+) ;</tt> </p>
+
+ <p><tt>void glutSolidTeapot ( GLdouble dSize
+) ;</tt> </p>
+
+ <p><tt>dSize&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ </tt>The desired size of the teapot </p>
+
+ <p><b>Description</b> </p>
+
+ <p>The "<tt>glutWireTeapot</tt>" and "<tt>
+ glutSolidTeapot</tt>" functions render a teapot of the desired size, centered
+at the origin.&nbsp; This is the famous OpenGL teapot [add reference]. </p>
+
+ <p><b>Changes From GLUT</b> </p>
+
+ <p>None that we know of. </p>
+
+ <h1> 16.0&nbsp;<a name="GameMode"></a>
+ Game Mode Functions</h1>
+
+ <h2> 16.1&nbsp; glutGameModeString</h2>
+
+ <h2> 16.2&nbsp; glutEnterGameMode, glutLeaveGameMode</h2>
+
+ <h2> 16.3&nbsp; glutGameModeGet</h2>
+
+ <h1> 17.0&nbsp;<a name="VideoResize"></a>
+ Video Resize Functions</h1>
+
+ <h2> 17.1&nbsp; glutVideoResizeGet</h2>
+
+ <h2> 17.2&nbsp; glutSetupVideoResizing,
+glutStopVideoResizing</h2>
+
+ <h2> 17.3&nbsp; glutVideoResize</h2>
+
+ <h2> 17.4&nbsp; glutVideoPan</h2>
+
+ <h1> 18.0&nbsp;<a name="ColorMap"></a>
+ Color Map Functions</h1>
+
+ <h2> 18.1&nbsp; glutSetColor, glutGetColor</h2>
+
+ <h2> 18.2&nbsp; glutCopyColormap</h2>
+
+ <h1> 19.0&nbsp;<a name="Miscellaneous"></a>
+ Miscellaneous Functions</h1>
+
+ <h2> 19.1&nbsp; glutIgnoreKeyRepeat, glutSetKeyRepeat</h2>
+
+ <h2> 19.2&nbsp; glutForceJoystickFunc</h2>
+
+ <h2> 19.3&nbsp; glutReportErrors</h2>
+
+ <h1> 20.0&nbsp;<a name="UsageNotes"></a>
+ Usage Notes</h1>
+
+ <p> The following environment variables
+are recognized by <i>freeglut</i>: </p>
+ <ul>
+ <li>DISPLAY - specifies a display name.<br>
+ </li>
+ <li>GLUT_FPS - specifies a time interval
+(in milliseconds) for reporting framerate messages to stderr. For example,
+if FREEGLUT_FPS is set to 5000, every 5 seconds a message will be printed
+to stderr showing the current frame rate. The frame rate is measured by counting
+the number of times glutSwapBuffers() is called over the time interval.</li>
+ <li>GLUT_ICON - specifies the icon that
+goes in the upper left-hand corner of the <i>freeglut</i><i> </i>windows </li>
+ </ul>
+ <h1> 21.0&nbsp;<a name="ImplementationNotes"></a>
+ Implementation Notes</h1>
+
+<h1> 22.0&nbsp;<a name="GLUT_State"></a>
+GLUT State</h1>
+
+<h1> 23.0&nbsp;<a name="Freeglut.h_Header"></a>
+"freeglut.h" Header File</h1>
+
+
+<p>
+Application programmers who are porting their GLUT programs to <i>freeglut</i> may continue
+to include <tt>&lt;GL/glut.h&gt;</tt> in their programs.
+Programs which use the <i>freeglut</i>-specific extensions to GLUT should include
+<tt>&lt;GL/freeglut.h&gt;</tt>. One possible arrangement is as follows:
+</p>
+
+<pre>
+#ifdef FREEGLUT
+#include &lt;GL/freeglut_ext.h&gt;
+#else
+#include &lt;GL/glut.h&gt;
+#endif
+</pre>
+
+<p>
+Compile-time <i>freeglut</i> version testing can be done as follows:
+</p>
+
+<pre>
+#ifdef FREEGLUT_VERSION_2_0
+ code specific to freeglut 2.0 or later here
+#endif
+</pre>
+
+<p>
+In future releases, FREEGLUT_VERSION_2_1, FREEGLUT_VERSION_2_2, etc will
+be defined. This scheme mimics OpenGL conventions.
+</p>
+
+<p>
+The <i>freeglut</i> version can be queried at runtime by calling
+glutGet(GLUT_VERSION).
+The result will be X*10000+Y*100+Z where X is the major version, Y is the
+minor version and Z is the patch level.
+</p>
+<p>
+This may be used as follows:
+</p>
+
+<pre>
+if (glutGet(GLUT_VERSION) < 20001) {
+ printf("Sorry, you need freeglut version 2.0.1 or later to run this program.\n");
+ exit(1);
+}
+</pre>
+
+
+
+<h1> 24.0&nbsp;<a name="References"></a>
+References</h1>
+
+<h1> 25.0&nbsp;<a name="Index"></a>
+Index</h1>
+&nbsp;
+<p>&nbsp; <br>
+ &nbsp; <br>
+ &nbsp; <br>
+ &nbsp; <br>
+ &nbsp; <br>
+ &nbsp; <br>
+ &nbsp; <br>
+ &nbsp; <br>
+ &nbsp; <br>
+ &nbsp; <br>
+ &nbsp; <br>
+ &nbsp; <br>
+ &nbsp; <br>
+ &nbsp; <br>
+ &nbsp; <br>
+ &nbsp; <br>
+ &nbsp; <br>
+ &nbsp; <br>
+ &nbsp; <br>
+ &nbsp; <br>
+ &nbsp; <br>
+ &nbsp; <br>
+ &nbsp; </p>
+
+ </body>
+ </html>
diff --git a/SixenseSDK/src/sixense_simple3d/doc/index.html b/SixenseSDK/src/sixense_simple3d/doc/index.html
new file mode 100755
index 0000000..d511a9b
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/doc/index.html
@@ -0,0 +1,101 @@
+<html>
+<head>
+<title>The freeglut project</title>
+</head>
+<body text="#000000" bgcolor="#FFFFFF" link="#0000EF" vlink="#51188E" alink="#FF0000">
+
+<table>
+<tr>
+<td>
+
+<center><img SRC="freeglut_logo.png" ALT="The freeglut logo"></center>
+<center><i><font size=+1> The free OpenGL utility toolkit </font></i></center>
+
+</td>
+<td>
+
+<center><a href="http://sourceforge.net">
+<img src="http://sourceforge.net/sflogo.php?group_id=0&type=1" border="0">
+</a></center><br>
+<center><i>Hosted at SourceForge</i></center>
+</td>
+</tr>
+</table>
+
+<hr>
+
+<ul>
+
+<li><b><font size=+2>What</font></b>
+<p>
+freeglut is a completely OpenSourced alternative to the OpenGL Utility
+Toolkit (GLUT) library. GLUT was originally written by Mark Kilgard
+to support the sample programs in the second edition OpenGL 'RedBook'.
+Since then, GLUT has been used in a wide variety of practical applications
+because it is simple, universally available and highly portable.
+<p>
+GLUT (and hence freeglut) allows the user to create and manage
+windows containing OpenGL contexts on a wide range of platforms and
+also read the mouse, keyboard and joystick functions.
+<p>
+freeglut is released under the X-Consortium license.
+<p>
+
+<li><b><font size=+2>Why</font></b>
+<p>
+The original GLUT library seems to have been abandoned with the most
+recent version (3.7) dating back to August 1998. It's license does
+not allow anyone to distribute modified the library code. This would
+be OK, if not for the fact that GLUT is getting old and really needs
+improvement. Also, GLUT's license is incompatible with some software
+distributions (eg Xfree86).
+<p>
+
+<li><b><font size=+2>Who</font></b>
+<p>
+freeglut was originally written by Pawel W. Olszta with contributions
+from Andreas Umbach and Steve Baker. Steve is now the official
+owner/maintainer of freeglut.
+<p>
+
+<li><b><font size=+2>When</font></b>
+<p>
+Pawel started freeglut development on December 1st, 1999.
+The project is now a virtually 100% replacement for the original
+GLUT with only a few departures (such as the abandonment of SGI-specific
+features such as the Dials&Buttons box and Dynamic Video Resolution).
+<p>
+
+<li><b><font size=+2>Downloads</font></b>
+<p>
+Check the <a href="download.html">
+downloads page</a> for the latest release.
+<p>
+
+<li><b><font size=+2>Support</font></b>
+<p>
+Send freeglut related questions to the appropriate freeglut mailing list:
+<ul>
+<li><a href="mailto:freeglut-developer@lists.sourceforge.net">freeglut-developer</a>,
+<li><a href="mailto:freeglut-announce@lists.sourceforge.net">freeglut-announce</a> and
+<li><a href="mailto:freeglut-bugs@lists.sourceforge.net">freeglut-bugs</a>.
+</ul>
+You can subscribe to them via the
+ <a href="http://sourceforge.net/project/?group_id=1032">
+SourceForge project interface</a>.
+<p>
+
+<li><b><font size=+2>Documentation</font></b>
+<p>
+I believe this is enough for a short introduction.
+If you are not tired of reading yet, check out the
+<a href="freeglut.html">freeglut project log</a>. Here you will find the
+yet-to-be-introduced new project <a href="structure.html">structure
+description</a>. Finally, here you will find the latest
+<a href="progress.html">work progress report</a>. Since freeglut is
+a re-implementation of the original GLUT API, you can find API
+documentation at <A HREF="http://www.opengl.org">http://www.opengl.org</A>.
+<p>
+</ul>
+</body></html>
+
diff --git a/SixenseSDK/src/sixense_simple3d/doc/ogl_sm.png b/SixenseSDK/src/sixense_simple3d/doc/ogl_sm.png
new file mode 100755
index 0000000..80baefc
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/doc/ogl_sm.png
Binary files differ
diff --git a/SixenseSDK/src/sixense_simple3d/doc/progress.html b/SixenseSDK/src/sixense_simple3d/doc/progress.html
new file mode 100755
index 0000000..8a84483
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/doc/progress.html
@@ -0,0 +1,137 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <meta name="author" content="Pawel W. Olszta">
+ <meta name="copyright" content="Pawel W. Olszta">
+ <meta name="description" content="The freeglut development progress reports">
+ <meta name="keywords" content="freeglut glut OpenGL">
+ <meta name="GENERATOR" content="WebMaker">
+ <title>The freeglut project</title>
+</head>
+<body text="#000000" bgcolor="#FFFFFF" link="#0000EF" vlink="#51188E" alink="#FF0000">
+
+<center><img SRC="freeglut_logo.png" ALT="The freeglut logo" height=106 width=314></center>
+<center><dt><i><font face="Courier New,Courier"><font size=+1>
+I love reports. They are so full of brightness and hope...
+</font></font></i></dt></center>
+
+<center><table WIDTH="620" ><tr><td><hr WIDTH="100%">
+
+<p><i>January the 16th, 2000</i>
+
+<p>It looks like both X11 and Win32 version have reached a comparable usability stage.
+They are still missing many GLUT API 3 features, but the number is getting smaller and
+smaller every day :)
+
+<br><ul><li><b><font size=+2>input devices</font></b></li>
+
+<p>Keyboard and mouse seems to work well. There is a big guess about the mouse buttons
+count under X11 (always 3) -- I must remember to correct the menu activation code if
+this shows to be invalid.
+
+<p>None of the bizarre input devices found in GLUT API is supported (and probably won't).
+
+<p>Steve Baker contributed the joystick code. It should work fine, as it did in PLIB,
+but I haven't tested it out yet. It might not compile under FreeBSD, as I had to
+convert it from C++ to C and had no possibility to compile it under FreeBSD (the Win32
+version had some typos, but I've already fixed them).
+
+<br><br><li><b><font size=+2>pull-down menus</font></b></li>
+
+<p>Pull down menus seem to work. The menu is displayed using OpenGL, so it requires
+the window's contents to be refreshed at an interactive rate, which sometimes does not
+happen. That's why I'll consider adding optional window-system menu navigation later.
+For now -- extensive testing is what I believe should be done with the menu system.
+
+<br><br><li><b><font size=+2>fonts</font></b></li>
+
+<p>Bitmap fonts support is done. However it would be good to add two more API functions
+-- glutBitmapString() and glutStrokeString(), which should limit the quantity of state
+changes when drawing longer strings.
+
+<p>Good that somebody finally told me where to get the stroke fonts data from... XFree86
+sources contain the ROMAN and MONO ROMAN stroke fonts data. For now stroke fonts are
+rendered using the bitmap font GLUT_BITMAP_8_BY_13.
+
+<p>What has changed is the way the fonts are specified. I moved to the GLUT's strange
+way of supplying (fake for freeglut) font data pointers instead of some nice enums.
+Hope it helps in achieving the binary compatibility between freeglut and GLUT.
+
+<p>Added two new API calls: glutBitmapHeight() and glutStrokeHeight(), that return
+a font's height. Hope this doesn't break the GLUT compatibility a lot.
+
+<br><br><li><b><font size=+2>mouse cursor</font></b></li>
+
+<p>Need to have own cursor shapes, so that freeglut can pass them to the windowing
+system, draw them using glBitmap() and/or texture mapping. The cursor shapes are very
+probable to be found in XFree86 sources.
+
+<br><br><li><b><font size=+2>indexed color mode</font></b></li>
+
+<p>This might work, however I have not tested it yet. glutGetColor/glutSetColor is not
+implemented. Again, looks like a single Xlib call, but there might be some problems
+with the colormap access. Need to switch into indexed color mode some day and check it
+out (does Mesa 3.1 work with indexed color mode?)
+
+<br><br><li><b><font size=+2>planes</font></b></li>
+
+<p>Overlays are not supported, but one of the GLUT conformance tests fails due to
+glutLayerGet( GLUT_NORMAL_DAMAGED ) returning FALSE when the window has actually
+been damaged.
+
+<p>Layers would be good for drawing the menus and mouse cursor, as they wouldn't force
+the application redraw to update their state.
+
+<br><br><li><b><font size=+2>init display string</font></b></li>
+
+<p>I am in middle of the fight with the init display string. It's parsing OK, now it
+would be cool to make it impress some effects on the display...
+
+<br><br><li><b><font size=+2>game mode</font></b></li>
+
+<p>Is the game mode string parsed correctly?
+
+<br><br><li><b><font size=+2>geometry</font></b></li>
+
+<p>Andreas Umbach has contributed the cube and sphere code. The teapot rendering is
+done using free SGI code. I have also added the cone rendering, however it is missing
+normal vectors (just as Andrea's wireframed cube does). All of the glut*hedron()
+functions await to be implemented.
+
+<br><br><li><b><font size=+2>obvious bugs</font></b></li>
+
+<br><br><ol>
+<li>
+the visibility/window status function is a conceptual mess. I had to peer into the GLUT
+source code to see what actually happens inside. It helped me a bit, but still one of
+the visibility tests fails. This is probably the reason for which a window covered by
+enlightenment status bar is marked as hidden and does not get redrawn.</li>
+
+<li>
+GLX 1.3 spec states that glXChooseVisual() et consortes are deprecated. Should move to
+glXFBConfig.</li>
+
+<li>
+need to investigate what happens when initial window position is set to (-1,-1). GLUT
+specification says, that the window positioning should be left to the window system.
+And I do not know how to force it do so...</li>
+
+<li>
+I was told it is wrong to have the redisplay forced in the main loop. Is that right?</li>
+
+</ol><br><li><b><font size=+2>not so obvious bugs</font></b></li>
+
+<br><br><ol>
+<li>some of the tests freeze because they do not generate the glutPostRedisplay() call
+every frame. Again, this is somehow handled by GLUT, but I can't see how. And why.
+
+<p>Looks like I've fixed it (or rather hacked it?) by forcing a redisplay every
+frame, but this is no good and kills interactiveness of my console :D</li>
+
+</ol></ul>
+
+<a href="index.html"><i>Back to the main page</i></a>
+
+</table></center></body></html>
+
diff --git a/SixenseSDK/src/sixense_simple3d/doc/structure.html b/SixenseSDK/src/sixense_simple3d/doc/structure.html
new file mode 100755
index 0000000..a460567
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/doc/structure.html
@@ -0,0 +1,80 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <meta name="author" content="Pawel W. Olszta">
+ <meta name="copyright" content="Pawel W. Olszta">
+ <meta name="description" content="The freeglut project plans">
+ <meta name="keywords" content="freeglut glut OpenGL">
+ <meta name="GENERATOR" content="WebMaker">
+ <title>The freeglut project</title>
+</head>
+<body text="#000000" bgcolor="#FFFFFF" link="#0000EF" vlink="#51188E" alink="#FF0000">
+
+<center><img SRC="freeglut_logo.png" ALT="The freeglut logo" height=106 width=314></center>
+<center><dt><i><font face="Courier New,Courier"><font size=+1>
+I've got a master plan (to take your API down)...
+</font></font></i></dt></center>
+
+<center><table WIDTH="620" ><tr><td><hr WIDTH="100%">
+
+<p>After that I get the freeglut Windows port working in an acceptable manner and thus
+getting assured that the freeglut internal structure is valid, I will split the project
+into three separate parts, listed below.
+
+<br><ul><li><b><font size=+2>freeglut-common</font></b></li>
+
+<p>The least common denominator between the two freeglut versions. This will probably
+contain most of the internal structure of the toolkit, notably the windows and menu
+hierarchy, and possibly some private helpers.
+
+<br><br><li><b><font size=+2>freeglut-1.3</font></b></li>
+
+<p>The GLUT API 3 compatible library. This is what's can be found now in the alpha
+release (apart from the bugs, naturally :D).
+
+<br><br><li><b><font size=+2>freeglut-2.0</font></b></li>
+
+<p>Hopefully this will be what GLUT should have been from the beginning. I will give
+a try to design a much more coherent API than GLUT's, aiming at fast games prototyping.
+<a href="mailto:olszta@sourceforge.net">Suggestions</a> are welcome.</ul>
+
+<br><p>Here's a list of propositions I have received so far. Hopefully this some day
+turns into an API spefication proposal, not just a bunch of meaningless phrases...<br>
+
+<br><li>glutBitmapHeight() and glutStrokeHeight() -- I have added them to the
+freeglut-1.3 API, they are already implemented and should work fine,</li>
+<br><li>glutBitmapString() and glutStrokeString(), to write (multiple-line maybe)
+strings, starting from the current raster position, using some simple formatting
+maybe (changing the color, font, etc.?)</li>
+<br><li>texture mapped fonts -- this is easy and could be added to freeglut-1.3, but
+would require adding the...</li>
+<br><li>glutHint() function to tell freeglut to: use bitmapped/texture mapped fonts,
+draw the menus and mouse cursor using OpenGL/window system, and stuff...</li>
+<br><li>glutMainLoop() termination and glutMainLoopStep() function, which should
+perform a single check of pending events, so that one can have his own main loop,</li>
+<br><li>multiple joysticks support with multiple axes, buttons, hats, etc. It is a real
+good thing to do, yet the API to do the magic might result in being really twisted,</li>
+<br><li>glutModifierFunc() could be added, or glutGetModifierState() should be allowed
+to be called anywhere from the client's code</li>
+
+<br><p>We might also think about:<br>
+
+<br><li>freeglut-2.0 modularity via plugins, so that only the features that one
+needs get loaded (plugins are easily supported by GLib),</li>
+<br><li>OpenGL state management functions,</li>
+<br><li>audio support -- using OpenAL maybe?,</li>
+<br><li>a real menu system, not only the popups</li>
+<br><li>non-OpenGL but portable UI, something like Java Swing</li>
+<br><li>window-closing confirmation box (this is related to the above)</li>
+
+<br><p>Following ideas are bad for freeglut:<br>
+
+<br><li>more accurate timers under Win32 -- this goes to the GLib development afaik</li>
+<br><li>portable file I/O, portable threads, plugins/modules -- this is already
+done in GLib</li>
+
+<br><br><a href="index.html"><i>Back to the main page</i></a>
+
+</table></center></body></html>
+
diff --git a/SixenseSDK/src/sixense_simple3d/freeglut-2.6.0.tar.gz b/SixenseSDK/src/sixense_simple3d/freeglut-2.6.0.tar.gz
new file mode 100755
index 0000000..e8caffa
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/freeglut-2.6.0.tar.gz
Binary files differ
diff --git a/SixenseSDK/src/sixense_simple3d/freeglut.aps b/SixenseSDK/src/sixense_simple3d/freeglut.aps
new file mode 100755
index 0000000..65ca26c
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/freeglut.aps
Binary files differ
diff --git a/SixenseSDK/src/sixense_simple3d/freeglut.rc b/SixenseSDK/src/sixense_simple3d/freeglut.rc
new file mode 100755
index 0000000..c6dc397
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/freeglut.rc
@@ -0,0 +1,40 @@
+
+/* 0 ICON DISCARDABLE "OpenGL.ico" */
+
+1 VERSIONINFO
+ FILEVERSION 2,6,0,0
+ PRODUCTVERSION 2,6,0,0
+ FILEFLAGSMASK 0x3fL
+#ifdef _DEBUG
+ FILEFLAGS 0x1L
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS 0x40004L
+ FILETYPE 0x1L
+ FILESUBTYPE 0x0L
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "080904b0"
+ BEGIN
+ /* VALUE "Comments", "\0" */
+ /* VALUE "CompanyName", "\0" */
+ VALUE "FileDescription", "Freeglut OpenGL Utility Toolkit\0"
+ VALUE "FileVersion", "2, 6, 0, 0\0"
+ VALUE "InternalName", "freeglutdll\0"
+ VALUE "LegalCopyright", "Copyright © 1999-2000 Pawel W. Olszta\0"
+ /* VALUE "LegalTrademarks", "\0" */
+ VALUE "OriginalFilename", "freeglut.dll\0"
+ /* VALUE "PrivateBuild", "\0" */
+ VALUE "ProductName", "Freeglut OpenGL Utility Toolkit\0"
+ VALUE "ProductVersion", "2, 6, 0, 0\0"
+ /* VALUE "SpecialBuild", "\0" */
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x809, 1200
+ END
+END
+
diff --git a/SixenseSDK/src/sixense_simple3d/include/GL/Makefile.am b/SixenseSDK/src/sixense_simple3d/include/GL/Makefile.am
new file mode 100755
index 0000000..ce22c32
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/include/GL/Makefile.am
@@ -0,0 +1,5 @@
+## Process this file with automake to produce Makefile.in
+
+libfreeglutincludedir = $(includedir)/GL
+libfreeglutinclude_HEADERS = freeglut.h freeglut_std.h freeglut_ext.h @HEADER@
+EXTRA_HEADERS = glut.h
diff --git a/SixenseSDK/src/sixense_simple3d/include/GL/Makefile.in b/SixenseSDK/src/sixense_simple3d/include/GL/Makefile.in
new file mode 100755
index 0000000..201e063
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/include/GL/Makefile.in
@@ -0,0 +1,416 @@
+# Makefile.in generated by automake 1.10.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = include/GL
+DIST_COMMON = $(libfreeglutinclude_HEADERS) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+am__installdirs = "$(DESTDIR)$(libfreeglutincludedir)"
+libfreeglutincludeHEADERS_INSTALL = $(INSTALL_HEADER)
+HEADERS = $(libfreeglutinclude_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXPORT_FLAGS = @EXPORT_FLAGS@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+GL_LIBS = @GL_LIBS@
+GREP = @GREP@
+HEADER = @HEADER@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBRARY = @LIBRARY@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIBXI = @LIBXI@
+LIBXXF86VM = @LIBXXF86VM@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NMEDIT = @NMEDIT@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+VERSION_INFO = @VERSION_INFO@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+libfreeglutincludedir = $(includedir)/GL
+libfreeglutinclude_HEADERS = freeglut.h freeglut_std.h freeglut_ext.h @HEADER@
+EXTRA_HEADERS = glut.h
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/GL/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu include/GL/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-libfreeglutincludeHEADERS: $(libfreeglutinclude_HEADERS)
+ @$(NORMAL_INSTALL)
+ test -z "$(libfreeglutincludedir)" || $(MKDIR_P) "$(DESTDIR)$(libfreeglutincludedir)"
+ @list='$(libfreeglutinclude_HEADERS)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ f=$(am__strip_dir) \
+ echo " $(libfreeglutincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(libfreeglutincludedir)/$$f'"; \
+ $(libfreeglutincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(libfreeglutincludedir)/$$f"; \
+ done
+
+uninstall-libfreeglutincludeHEADERS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(libfreeglutinclude_HEADERS)'; for p in $$list; do \
+ f=$(am__strip_dir) \
+ echo " rm -f '$(DESTDIR)$(libfreeglutincludedir)/$$f'"; \
+ rm -f "$(DESTDIR)$(libfreeglutincludedir)/$$f"; \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(HEADERS)
+installdirs:
+ for dir in "$(DESTDIR)$(libfreeglutincludedir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-libfreeglutincludeHEADERS
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-libfreeglutincludeHEADERS
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool ctags distclean distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-libfreeglutincludeHEADERS install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags uninstall uninstall-am \
+ uninstall-libfreeglutincludeHEADERS
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/SixenseSDK/src/sixense_simple3d/include/GL/freeglut.h b/SixenseSDK/src/sixense_simple3d/include/GL/freeglut.h
new file mode 100755
index 0000000..0e6f8c6
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/include/GL/freeglut.h
@@ -0,0 +1,22 @@
+#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/SixenseSDK/src/sixense_simple3d/include/GL/freeglut_ext.h b/SixenseSDK/src/sixense_simple3d/include/GL/freeglut_ext.h
new file mode 100755
index 0000000..aca85e7
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/include/GL/freeglut_ext.h
@@ -0,0 +1,212 @@
+#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
+
+/*
+ * 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 );
+
+/*
+ * 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 );
+
+/*
+ * 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 );
+
+/*
+ * 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/SixenseSDK/src/sixense_simple3d/include/GL/freeglut_std.h b/SixenseSDK/src/sixense_simple3d/include/GL/freeglut_std.h
new file mode 100755
index 0000000..da18176
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/include/GL/freeglut_std.h
@@ -0,0 +1,626 @@
+#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 1 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
+# define NOMINMAX
+# 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/SixenseSDK/src/sixense_simple3d/include/GL/glut.h b/SixenseSDK/src/sixense_simple3d/include/GL/glut.h
new file mode 100755
index 0000000..6191f77
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/include/GL/glut.h
@@ -0,0 +1,21 @@
+#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/SixenseSDK/src/sixense_simple3d/include/Makefile.am b/SixenseSDK/src/sixense_simple3d/include/Makefile.am
new file mode 100755
index 0000000..90f2094
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/include/Makefile.am
@@ -0,0 +1,3 @@
+## Process this file with automake to produce Makefile.in
+
+SUBDIRS = GL
diff --git a/SixenseSDK/src/sixense_simple3d/include/Makefile.in b/SixenseSDK/src/sixense_simple3d/include/Makefile.in
new file mode 100755
index 0000000..96edaef
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/include/Makefile.in
@@ -0,0 +1,495 @@
+# Makefile.in generated by automake 1.10.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = include
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-dvi-recursive install-exec-recursive \
+ install-html-recursive install-info-recursive \
+ install-pdf-recursive install-ps-recursive install-recursive \
+ installcheck-recursive installdirs-recursive pdf-recursive \
+ ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXPORT_FLAGS = @EXPORT_FLAGS@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+GL_LIBS = @GL_LIBS@
+GREP = @GREP@
+HEADER = @HEADER@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBRARY = @LIBRARY@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIBXI = @LIBXI@
+LIBXXF86VM = @LIBXXF86VM@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NMEDIT = @NMEDIT@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+VERSION_INFO = @VERSION_INFO@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = GL
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu include/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+# (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+ @failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+ @failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique; \
+ fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+ list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ distdir=`$(am__cd) $(distdir) && pwd`; \
+ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+ (cd $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$top_distdir" \
+ distdir="$$distdir/$$subdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-info: install-info-recursive
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-ps: install-ps-recursive
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \
+ install-strip
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+ all all-am check check-am clean clean-generic clean-libtool \
+ ctags ctags-recursive distclean distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs installdirs-am maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
+ uninstall uninstall-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/SixenseSDK/src/sixense_simple3d/progs/Makefile.am b/SixenseSDK/src/sixense_simple3d/progs/Makefile.am
new file mode 100755
index 0000000..7cb8ff3
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/progs/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = demos
diff --git a/SixenseSDK/src/sixense_simple3d/progs/Makefile.in b/SixenseSDK/src/sixense_simple3d/progs/Makefile.in
new file mode 100755
index 0000000..2b0337c
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/progs/Makefile.in
@@ -0,0 +1,495 @@
+# Makefile.in generated by automake 1.10.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = progs
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-dvi-recursive install-exec-recursive \
+ install-html-recursive install-info-recursive \
+ install-pdf-recursive install-ps-recursive install-recursive \
+ installcheck-recursive installdirs-recursive pdf-recursive \
+ ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXPORT_FLAGS = @EXPORT_FLAGS@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+GL_LIBS = @GL_LIBS@
+GREP = @GREP@
+HEADER = @HEADER@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBRARY = @LIBRARY@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIBXI = @LIBXI@
+LIBXXF86VM = @LIBXXF86VM@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NMEDIT = @NMEDIT@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+VERSION_INFO = @VERSION_INFO@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = demos
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu progs/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu progs/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+# (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+ @failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+ @failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique; \
+ fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+ list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ distdir=`$(am__cd) $(distdir) && pwd`; \
+ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+ (cd $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$top_distdir" \
+ distdir="$$distdir/$$subdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-info: install-info-recursive
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-ps: install-ps-recursive
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \
+ install-strip
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+ all all-am check check-am clean clean-generic clean-libtool \
+ ctags ctags-recursive distclean distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs installdirs-am maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
+ uninstall uninstall-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/SixenseSDK/src/sixense_simple3d/progs/demos/CallbackMaker/CallbackMaker.c b/SixenseSDK/src/sixense_simple3d/progs/demos/CallbackMaker/CallbackMaker.c
new file mode 100755
index 0000000..25e83dc
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/progs/demos/CallbackMaker/CallbackMaker.c
@@ -0,0 +1,536 @@
+/* CallbackMaker.c */
+/*
+ * Program to invoke all the callbacks that "freeglut" supports
+ */
+
+
+#include <GL/freeglut.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+
+static int sequence_number = 0 ;
+
+int reshape_called = 0, key_called = 0, special_called = 0, visibility_called = 0,
+ keyup_called = 0, specialup_called = 0, joystick_called = 0, mouse_called = 0,
+ mousewheel_called = 0, motion_called = 0, passivemotion_called = 0, entry_called = 0,
+ close_called = 0, overlaydisplay_called = 0, windowstatus_called = 0,
+ spacemotion_called = 0, spacerotation_called = 0, spacebutton_called = 0,
+ buttonbox_called = 0, dials_called = 0, tabletmotion_called = 0, tabletbutton_called = 0,
+ menudestroy_called = 0, menustatus_called = 0 ;
+int reshape_width = -1, reshape_height = -1, reshape_seq = -1 ;
+int key_key = -1, key_x = -1, key_y = -1, key_seq = -1 ;
+int special_key = -1, special_x = -1, special_y = -1, special_seq = -1 ;
+int visibility_vis = -1, visibility_seq = -1 ;
+int keyup_key = -1, keyup_x = -1, keyup_y = -1, keyup_seq = -1 ;
+int specialup_key = -1, specialup_x = -1, specialup_y = -1, specialup_seq = -1 ;
+int joystick_a = -1, joystick_b = -1, joystick_c = -1, joystick_d = -1, joystick_seq = -1 ; /* Need meaningful names */
+int mouse_button = -1, mouse_updown = -1, mouse_x = -1, mouse_y = -1, mouse_seq = -1 ;
+int mousewheel_number = -1, mousewheel_direction = -1, mousewheel_x = -1, mousewheel_y = -1, mousewheel_seq = -1 ;
+int motion_x = -1, motion_y = -1, motion_seq = -1 ;
+int passivemotion_x = -1, passivemotion_y = -1, passivemotion_seq = -1 ;
+
+static void
+bitmapPrintf (const char *fmt, ...)
+{
+ static char buf[256];
+ va_list args;
+
+ va_start(args, fmt);
+#if defined(WIN32) && !defined(__CYGWIN__)
+ (void) _vsnprintf (buf, sizeof(buf), fmt, args);
+#else
+ (void) vsnprintf (buf, sizeof(buf), fmt, args);
+#endif
+ va_end(args);
+ glutBitmapString ( GLUT_BITMAP_HELVETICA_12, (unsigned char*)buf ) ;
+}
+
+
+static void
+Display(void)
+{
+ int window = glutGetWindow () ;
+ glClear ( GL_COLOR_BUFFER_BIT );
+
+ glDisable ( GL_DEPTH_TEST );
+ glMatrixMode ( GL_PROJECTION );
+ glPushMatrix();
+ glLoadIdentity();
+ glOrtho(0, glutGet ( GLUT_WINDOW_WIDTH ),
+ 0, glutGet ( GLUT_WINDOW_HEIGHT ), -1, 1 );
+ glMatrixMode ( GL_MODELVIEW );
+ glPushMatrix ();
+ glLoadIdentity ();
+ glColor3ub ( 0, 0, 0 );
+ glRasterPos2i ( 10, glutGet ( GLUT_WINDOW_HEIGHT ) - 10 );
+
+ if ( reshape_called )
+ {
+ bitmapPrintf ( "Reshape %d: %d %d\n", reshape_seq, reshape_width, reshape_height );
+ }
+
+ if ( key_called )
+ {
+ bitmapPrintf ( "Key %d: %d(%c) %d %d\n", key_seq, key_key, key_key, key_x, key_y );
+ }
+
+ if ( special_called )
+ {
+ bitmapPrintf ( "Special %d: %d(%c) %d %d\n", special_seq, special_key, special_key, special_x, special_y );
+ }
+
+ if ( visibility_called )
+ {
+ bitmapPrintf ( "Visibility %d: %d\n", visibility_seq, visibility_vis );
+ }
+
+ if ( keyup_called )
+ {
+ bitmapPrintf ( "Key Up %d: %d(%c) %d %d\n", keyup_seq, keyup_key, keyup_key, keyup_x, keyup_y );
+ }
+
+ if ( specialup_called )
+ {
+ bitmapPrintf ( "Special Up %d: %d(%c) %d %d\n", specialup_seq, specialup_key, specialup_key, specialup_x, specialup_y );
+ }
+
+ if ( joystick_called )
+ {
+ bitmapPrintf ( "Joystick %d: %d %d %d %d\n", joystick_seq, joystick_a, joystick_b, joystick_c, joystick_d );
+ }
+
+ if ( mouse_called )
+ {
+ bitmapPrintf ( "Mouse %d: %d %d %d %d\n", mouse_seq, mouse_button, mouse_updown, mouse_x, mouse_y );
+ }
+
+ if ( mousewheel_called )
+ {
+ bitmapPrintf ( "Mouse Wheel %d: %d %d %d %d\n", mousewheel_seq, mousewheel_number, mousewheel_direction, mousewheel_x, mousewheel_y );
+ }
+
+ if ( motion_called )
+ {
+ bitmapPrintf ( "Motion %d: %d %d\n", motion_seq, motion_x, motion_y );
+ }
+
+ if ( passivemotion_called )
+ {
+ bitmapPrintf ( "Passive Motion %d: %d %d\n", passivemotion_seq, passivemotion_x, passivemotion_y );
+ }
+
+ glMatrixMode ( GL_PROJECTION );
+ glPopMatrix ();
+ glMatrixMode ( GL_MODELVIEW );
+ glPopMatrix ();
+ glEnable ( GL_DEPTH_TEST );
+
+ printf ( "%6d Window %d Display Callback\n",
+ ++sequence_number, window ) ;
+ glutSwapBuffers();
+}
+
+static void
+Reshape(int width, int height)
+{
+ int window = glutGetWindow () ;
+ printf ( "%6d Window %d Reshape Callback: %d %d\n",
+ ++sequence_number, window, width, height ) ;
+ reshape_called = 1 ;
+ reshape_width = width ;
+ reshape_height = height ;
+ reshape_seq = sequence_number ;
+ glutPostRedisplay () ;
+}
+
+static void
+Key(unsigned char key, int x, int y)
+{
+ int window = glutGetWindow () ;
+ printf ( "%6d Window %d Keyboard Callback: %d %d %d\n",
+ ++sequence_number, window, key, x, y ) ;
+ key_called = 1 ;
+ key_key = key ;
+ key_x = x ;
+ key_y = y ;
+ key_seq = sequence_number ;
+ glutPostRedisplay () ;
+}
+
+static void
+Special(int key, int x, int y)
+{
+ int window = glutGetWindow () ;
+ printf ( "%6d Window %d Special Key Callback: %d %d %d\n",
+ ++sequence_number, window, key, x, y ) ;
+ special_called = 1 ;
+ special_key = key ;
+ special_x = x ;
+ special_y = y ;
+ special_seq = sequence_number ;
+ glutPostRedisplay () ;
+}
+
+static void
+Visibility(int vis)
+{
+ int window = glutGetWindow () ;
+ printf ( "%6d Window %d Visibility Callback: %d\n",
+ ++sequence_number, window, vis ) ;
+ visibility_called = 1 ;
+ visibility_vis = vis ;
+ visibility_seq = sequence_number ;
+ glutPostRedisplay () ;
+}
+
+static void
+KeyUp(unsigned char key, int x, int y)
+{
+ int window = glutGetWindow () ;
+ printf ( "%6d Window %d Key Release Callback: %d %d %d\n",
+ ++sequence_number, window, key, x, y ) ;
+ keyup_called = 1 ;
+ keyup_key = key ;
+ keyup_x = x ;
+ keyup_y = y ;
+ keyup_seq = sequence_number ;
+ glutPostRedisplay () ;
+}
+
+static void
+SpecialUp(int key, int x, int y)
+{
+ int window = glutGetWindow () ;
+ printf ( "%6d Window %d Special Key Release Callback: %d %d %d\n",
+ ++sequence_number, window, key, x, y ) ;
+ specialup_called = 1 ;
+ specialup_key = key ;
+ specialup_x = x ;
+ specialup_y = y ;
+ specialup_seq = sequence_number ;
+ glutPostRedisplay () ;
+}
+
+static void
+Joystick( unsigned int a, int b, int c, int d) /* Need meaningful names */
+{
+ int window = glutGetWindow () ;
+ printf ( "%6d Window %d Joystick Callback: %d %d %d %d\n",
+ ++sequence_number, window, a, b, c, d ) ;
+ joystick_called = 1 ;
+ joystick_a = a ;
+ joystick_b = b ;
+ joystick_c = c ;
+ joystick_d = d ;
+ joystick_seq = sequence_number ;
+ glutPostRedisplay () ;
+}
+
+static void
+Mouse(int button, int updown, int x, int y)
+{
+ int window = glutGetWindow () ;
+ printf ( "%6d Window %d Mouse Click Callback: %d %d %d %d\n",
+ ++sequence_number, window, button, updown, x, y ) ;
+ mouse_called = 1 ;
+ mouse_button = button ;
+ mouse_updown = updown ;
+ mouse_x = x ;
+ mouse_y = y ;
+ mouse_seq = sequence_number ;
+ glutPostRedisplay () ;
+}
+
+static void
+MouseWheel(int wheel_number, int direction, int x, int y)
+{
+ int window = glutGetWindow () ;
+ printf ( "%6d Window %d Mouse Wheel Callback: %d %d %d %d\n",
+ ++sequence_number, window, wheel_number, direction, x, y ) ;
+ mousewheel_called = 1 ;
+ mousewheel_number = wheel_number ;
+ mousewheel_direction = direction ;
+ mousewheel_x = x ;
+ mousewheel_y = y ;
+ mousewheel_seq = sequence_number ;
+ glutPostRedisplay () ;
+}
+
+static void
+Motion(int x, int y)
+{
+ int window = glutGetWindow () ;
+ printf ( "%6d Window %d Mouse Motion Callback: %d %d\n",
+ ++sequence_number, window, x, y ) ;
+ motion_called = 1 ;
+ motion_x = x ;
+ motion_y = y ;
+ motion_seq = sequence_number ;
+ glutPostRedisplay () ;
+}
+
+static void
+PassiveMotion(int x, int y)
+{
+ int window = glutGetWindow () ;
+ printf ( "%6d Window %d Mouse Passive Motion Callback: %d %d\n",
+ ++sequence_number, window, x, y ) ;
+ passivemotion_called = 1 ;
+ passivemotion_x = x ;
+ passivemotion_y = y ;
+ passivemotion_seq = sequence_number ;
+ glutPostRedisplay () ;
+}
+
+static void
+Entry(int state)
+{
+ int window = glutGetWindow () ;
+ entry_called = 1 ;
+ printf ( "%6d Window %d Entry Callback: %d\n",
+ ++sequence_number, window, state ) ;
+ glutPostRedisplay () ;
+}
+
+static void
+Close(void)
+{
+ int window = glutGetWindow () ;
+ close_called = 1 ;
+ printf ( "%6d Window %d Close Callback\n",
+ ++sequence_number, window ) ;
+}
+
+static void
+OverlayDisplay(void)
+{
+ int window = glutGetWindow () ;
+ overlaydisplay_called = 1 ;
+ printf ( "%6d Window %d OverlayDisplay Callback\n",
+ ++sequence_number, window ) ;
+ glutPostRedisplay () ;
+}
+
+static void
+WindowStatus(int state)
+{
+ int window = glutGetWindow () ;
+ windowstatus_called = 1 ;
+ printf ( "%6d Window %d WindowStatus Callback: %d\n",
+ ++sequence_number, window, state ) ;
+ glutPostRedisplay () ;
+}
+
+static void
+SpaceMotion(int x, int y, int z)
+{
+ int window = glutGetWindow () ;
+ spacemotion_called = 1 ;
+ printf ( "%6d Window %d SpaceMotion Callback: %d %d %d\n",
+ ++sequence_number, window, x, y, z ) ;
+ glutPostRedisplay () ;
+}
+
+static void
+SpaceRotation(int x, int y, int z)
+{
+ int window = glutGetWindow () ;
+ spacerotation_called = 1 ;
+ printf ( "%6d Window %d SpaceRotation Callback: %d %d %d\n",
+ ++sequence_number, window, x, y, z ) ;
+ glutPostRedisplay () ;
+}
+
+static void
+SpaceButton(int button, int updown)
+{
+ int window = glutGetWindow () ;
+ spacebutton_called = 1 ;
+ printf ( "%6d Window %d SpaceButton Callback: %d %d\n",
+ ++sequence_number, window, button, updown ) ;
+ glutPostRedisplay () ;
+}
+
+static void
+Dials(int x, int y)
+{
+ int window = glutGetWindow () ;
+ dials_called = 1 ;
+ printf ( "%6d Window %d Dials Callback: %d %d\n",
+ ++sequence_number, window, x, y ) ;
+ glutPostRedisplay () ;
+}
+
+static void
+ButtonBox(int button, int updown)
+{
+ int window = glutGetWindow () ;
+ buttonbox_called = 1 ;
+ printf ( "%6d Window %d ButtonBox Callback: %d %d\n",
+ ++sequence_number, window, button, updown ) ;
+ glutPostRedisplay () ;
+}
+
+static void
+TabletMotion(int x, int y)
+{
+ int window = glutGetWindow () ;
+ tabletmotion_called = 1 ;
+ printf ( "%6d Window %d TabletMotion Callback: %d %d\n",
+ ++sequence_number, window, x, y ) ;
+ glutPostRedisplay () ;
+}
+
+static void
+TabletButton(int button, int updown, int x, int y)
+{
+ int window = glutGetWindow () ;
+ tabletbutton_called = 1 ;
+ printf ( "%6d Window %d TabletButton Callback: %d %d %d %d\n",
+ ++sequence_number, window, button, updown, x, y ) ;
+ glutPostRedisplay () ;
+}
+
+static void
+MenuCallback ( int menuID )
+{
+ int window = glutGetWindow () ;
+ printf( "%6d Window %d MenuCallback - menuID is %d\n",
+ ++sequence_number, window, menuID );
+}
+
+static void
+MenuDestroy( void )
+{
+ int window = glutGetWindow () ;
+ menudestroy_called = 1 ;
+ printf ( "%6d Window %d MenuDestroy Callback\n",
+ ++sequence_number, window ) ;
+ glutPostRedisplay () ;
+}
+
+static void
+MenuStatus( int status, int x, int y )
+{
+ int window = glutGetWindow () ;
+ menudestroy_called = 1 ;
+ printf ( "%6d Window %d MenuStatus Callback: %d %d %d\n",
+ ++sequence_number, window, status, x, y ) ;
+ glutPostRedisplay () ;
+}
+
+static void Idle ( void )
+{
+ ++sequence_number ;
+}
+
+int
+main(int argc, char *argv[])
+{
+#define STRING_LENGTH 10
+ int freeglut_window, aux_window ;
+ char dummy_string[STRING_LENGTH];
+
+ int menuID, subMenuA, subMenuB;
+
+ glutInitWindowSize(500, 250);
+ glutInitWindowPosition ( 140, 140 );
+ glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE );
+ glutInit(&argc, argv);
+
+ freeglut_window = glutCreateWindow( "Callback Demo" );
+ printf ( "Creating window %d as 'Callback Demo'\n", freeglut_window ) ;
+
+ glClearColor(1.0, 1.0, 1.0, 1.0);
+
+ glutDisplayFunc( Display );
+ glutReshapeFunc( Reshape );
+ glutKeyboardFunc( Key );
+ glutSpecialFunc( Special );
+ glutVisibilityFunc( Visibility );
+ glutKeyboardUpFunc( KeyUp );
+ glutSpecialUpFunc( SpecialUp );
+ glutJoystickFunc( Joystick, 100 );
+ glutMouseFunc ( Mouse ) ;
+ glutMouseWheelFunc ( MouseWheel ) ;
+ glutMotionFunc ( Motion ) ;
+ glutPassiveMotionFunc ( PassiveMotion ) ;
+ glutEntryFunc ( Entry ) ;
+ glutCloseFunc ( Close ) ;
+ glutOverlayDisplayFunc ( OverlayDisplay ) ;
+ glutWindowStatusFunc ( WindowStatus ) ;
+ glutSpaceballMotionFunc ( SpaceMotion ) ;
+ glutSpaceballRotateFunc ( SpaceRotation ) ;
+ glutSpaceballButtonFunc ( SpaceButton ) ;
+ glutButtonBoxFunc ( ButtonBox ) ;
+ glutDialsFunc ( Dials ) ;
+ glutTabletMotionFunc ( TabletMotion ) ;
+ glutTabletButtonFunc ( TabletButton ) ;
+ glutMenuDestroyFunc ( MenuDestroy );
+ glutMenuStatusFunc ( MenuStatus );
+ glutSetKeyRepeat(GLUT_KEY_REPEAT_OFF) ;
+
+ subMenuA = glutCreateMenu( MenuCallback );
+ glutAddMenuEntry( "Sub menu A1 (01)", 1 );
+ glutAddMenuEntry( "Sub menu A2 (02)", 2 );
+ glutAddMenuEntry( "Sub menu A3 (03)", 3 );
+
+ subMenuB = glutCreateMenu( MenuCallback );
+ glutAddMenuEntry( "Sub menu B1 (04)", 4 );
+ glutAddMenuEntry( "Sub menu B2 (05)", 5 );
+ glutAddMenuEntry( "Sub menu B3 (06)", 6 );
+ glutAddSubMenu( "Going to sub menu A", subMenuA );
+
+ menuID = glutCreateMenu( MenuCallback );
+ glutAddMenuEntry( "Entry one", 1 );
+ glutAddMenuEntry( "Entry two", 2 );
+ glutAddMenuEntry( "Entry three", 3 );
+ glutAddMenuEntry( "Entry four", 4 );
+ glutAddMenuEntry( "Entry five", 5 );
+ glutAddSubMenu( "Enter sub menu A", subMenuA );
+ glutAddSubMenu( "Enter sub menu B", subMenuB );
+
+ glutAttachMenu( GLUT_LEFT_BUTTON );
+
+ aux_window = glutCreateWindow( "Second Window" );
+ printf ( "Creating window %d as 'Second Window'\n", aux_window ) ;
+
+ glClearColor(1.0, 1.0, 1.0, 1.0);
+
+ glutDisplayFunc( Display );
+ glutReshapeFunc( Reshape );
+ glutKeyboardFunc( Key );
+ glutSpecialFunc( Special );
+ glutVisibilityFunc( Visibility );
+ glutKeyboardUpFunc( KeyUp );
+ glutSpecialUpFunc( SpecialUp );
+ /* glutJoystickFunc( Joystick, 100 ); */
+ glutMouseFunc ( Mouse ) ;
+ glutMouseWheelFunc ( MouseWheel ) ;
+ glutMotionFunc ( Motion ) ;
+ glutPassiveMotionFunc ( PassiveMotion ) ;
+ glutEntryFunc ( Entry ) ;
+ glutCloseFunc ( Close ) ;
+ glutOverlayDisplayFunc ( OverlayDisplay ) ;
+ glutWindowStatusFunc ( WindowStatus ) ;
+ glutSpaceballMotionFunc ( SpaceMotion ) ;
+ glutSpaceballRotateFunc ( SpaceRotation ) ;
+ glutSpaceballButtonFunc ( SpaceButton ) ;
+ glutButtonBoxFunc ( ButtonBox ) ;
+ glutDialsFunc ( Dials ) ;
+ glutTabletMotionFunc ( TabletMotion ) ;
+ glutTabletButtonFunc ( TabletButton ) ;
+ glutSetKeyRepeat(GLUT_KEY_REPEAT_OFF) ;
+
+ glutIdleFunc ( Idle );
+
+ printf ( "Please enter something to continue: " );
+ fgets ( dummy_string, STRING_LENGTH, stdin );
+
+ glutMainLoop();
+
+ printf ( "Back from the 'freeglut' main loop\n" ) ;
+
+ return 0; /* ANSI C requires main to return int. */
+}
diff --git a/SixenseSDK/src/sixense_simple3d/progs/demos/CallbackMaker/CallbackMaker.dsp b/SixenseSDK/src/sixense_simple3d/progs/demos/CallbackMaker/CallbackMaker.dsp
new file mode 100755
index 0000000..596082c
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/progs/demos/CallbackMaker/CallbackMaker.dsp
@@ -0,0 +1,102 @@
+# Microsoft Developer Studio Project File - Name="CallbackMaker" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=CallbackMaker - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "CallbackMaker.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "CallbackMaker.mak" CFG="CallbackMaker - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "CallbackMaker - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "CallbackMaker - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "CallbackMaker - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../../include" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 /nologo /subsystem:console /machine:I386 /libpath:"../../../Release"
+
+!ELSEIF "$(CFG)" == "CallbackMaker - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"../../../Debug"
+
+!ENDIF
+
+# Begin Target
+
+# Name "CallbackMaker - Win32 Release"
+# Name "CallbackMaker - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\CallbackMaker.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/SixenseSDK/src/sixense_simple3d/progs/demos/CallbackMaker/CallbackMakerStatic.dsp b/SixenseSDK/src/sixense_simple3d/progs/demos/CallbackMaker/CallbackMakerStatic.dsp
new file mode 100755
index 0000000..9993deb
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/progs/demos/CallbackMaker/CallbackMakerStatic.dsp
@@ -0,0 +1,100 @@
+# Microsoft Developer Studio Project File - Name="CallbackMakerStatic" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=CallbackMakerStatic - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "CallbackMakerStatic.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "CallbackMakerStatic.mak" CFG="CallbackMakerStatic - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "CallbackMakerStatic - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "CallbackMakerStatic - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "CallbackMakerStatic - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "CallbackMakerStatic___Win32_Release"
+# PROP BASE Intermediate_Dir "CallbackMakerStatic___Win32_Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "ReleaseStatic"
+# PROP Intermediate_Dir "ReleaseStatic"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../../include" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "FREEGLUT_STATIC" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /libpath:"../../../ReleaseStatic"
+
+!ELSEIF "$(CFG)" == "CallbackMakerStatic - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "CallbackMakerStatic___Win32_Debug"
+# PROP BASE Intermediate_Dir "CallbackMakerStatic___Win32_Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "DebugStatic"
+# PROP Intermediate_Dir "DebugStatic"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "FREEGLUT_STATIC" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"../../../DebugStatic"
+
+!ENDIF
+
+# Begin Target
+
+# Name "CallbackMakerStatic - Win32 Release"
+# Name "CallbackMakerStatic - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\CallbackMaker.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/SixenseSDK/src/sixense_simple3d/progs/demos/CallbackMaker/Makefile.am b/SixenseSDK/src/sixense_simple3d/progs/demos/CallbackMaker/Makefile.am
new file mode 100755
index 0000000..c70c398
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/progs/demos/CallbackMaker/Makefile.am
@@ -0,0 +1,5 @@
+EXTRA_DIST = CallbackMaker.c CallbackMaker.dsp
+noinst_PROGRAMS = CallbackMaker
+CallbackMaker_SOURCES = CallbackMaker.c
+CallbackMaker_LDFLAGS = -export-dynamic ../../../src/lib@LIBRARY@.la
+CallbackMaker_CFLAGS = -I$(top_srcdir)/include $(X_CFLAGS)
diff --git a/SixenseSDK/src/sixense_simple3d/progs/demos/CallbackMaker/Makefile.in b/SixenseSDK/src/sixense_simple3d/progs/demos/CallbackMaker/Makefile.in
new file mode 100755
index 0000000..fa11bd4
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/progs/demos/CallbackMaker/Makefile.in
@@ -0,0 +1,465 @@
+# Makefile.in generated by automake 1.10.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = CallbackMaker$(EXEEXT)
+subdir = progs/demos/CallbackMaker
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_CallbackMaker_OBJECTS = CallbackMaker-CallbackMaker.$(OBJEXT)
+CallbackMaker_OBJECTS = $(am_CallbackMaker_OBJECTS)
+CallbackMaker_LDADD = $(LDADD)
+CallbackMaker_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(CallbackMaker_CFLAGS) \
+ $(CFLAGS) $(CallbackMaker_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(CallbackMaker_SOURCES)
+DIST_SOURCES = $(CallbackMaker_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXPORT_FLAGS = @EXPORT_FLAGS@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+GL_LIBS = @GL_LIBS@
+GREP = @GREP@
+HEADER = @HEADER@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBRARY = @LIBRARY@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIBXI = @LIBXI@
+LIBXXF86VM = @LIBXXF86VM@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NMEDIT = @NMEDIT@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+VERSION_INFO = @VERSION_INFO@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXTRA_DIST = CallbackMaker.c CallbackMaker.dsp
+CallbackMaker_SOURCES = CallbackMaker.c
+CallbackMaker_LDFLAGS = -export-dynamic ../../../src/lib@LIBRARY@.la
+CallbackMaker_CFLAGS = -I$(top_srcdir)/include $(X_CFLAGS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu progs/demos/CallbackMaker/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu progs/demos/CallbackMaker/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+clean-noinstPROGRAMS:
+ @list='$(noinst_PROGRAMS)'; for p in $$list; do \
+ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f $$p $$f"; \
+ rm -f $$p $$f ; \
+ done
+CallbackMaker$(EXEEXT): $(CallbackMaker_OBJECTS) $(CallbackMaker_DEPENDENCIES)
+ @rm -f CallbackMaker$(EXEEXT)
+ $(CallbackMaker_LINK) $(CallbackMaker_OBJECTS) $(CallbackMaker_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CallbackMaker-CallbackMaker.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+CallbackMaker-CallbackMaker.o: CallbackMaker.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(CallbackMaker_CFLAGS) $(CFLAGS) -MT CallbackMaker-CallbackMaker.o -MD -MP -MF $(DEPDIR)/CallbackMaker-CallbackMaker.Tpo -c -o CallbackMaker-CallbackMaker.o `test -f 'CallbackMaker.c' || echo '$(srcdir)/'`CallbackMaker.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/CallbackMaker-CallbackMaker.Tpo $(DEPDIR)/CallbackMaker-CallbackMaker.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='CallbackMaker.c' object='CallbackMaker-CallbackMaker.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(CallbackMaker_CFLAGS) $(CFLAGS) -c -o CallbackMaker-CallbackMaker.o `test -f 'CallbackMaker.c' || echo '$(srcdir)/'`CallbackMaker.c
+
+CallbackMaker-CallbackMaker.obj: CallbackMaker.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(CallbackMaker_CFLAGS) $(CFLAGS) -MT CallbackMaker-CallbackMaker.obj -MD -MP -MF $(DEPDIR)/CallbackMaker-CallbackMaker.Tpo -c -o CallbackMaker-CallbackMaker.obj `if test -f 'CallbackMaker.c'; then $(CYGPATH_W) 'CallbackMaker.c'; else $(CYGPATH_W) '$(srcdir)/CallbackMaker.c'; fi`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/CallbackMaker-CallbackMaker.Tpo $(DEPDIR)/CallbackMaker-CallbackMaker.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='CallbackMaker.c' object='CallbackMaker-CallbackMaker.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(CallbackMaker_CFLAGS) $(CFLAGS) -c -o CallbackMaker-CallbackMaker.obj `if test -f 'CallbackMaker.c'; then $(CYGPATH_W) 'CallbackMaker.c'; else $(CYGPATH_W) '$(srcdir)/CallbackMaker.c'; fi`
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstPROGRAMS ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/SixenseSDK/src/sixense_simple3d/progs/demos/Fractals/Fractals.dsp b/SixenseSDK/src/sixense_simple3d/progs/demos/Fractals/Fractals.dsp
new file mode 100755
index 0000000..fa991b6
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/progs/demos/Fractals/Fractals.dsp
@@ -0,0 +1,101 @@
+# Microsoft Developer Studio Project File - Name="Fractals" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=Fractals - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "Fractals.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "Fractals.mak" CFG="Fractals - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "Fractals - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "Fractals - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "Fractals - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../../include" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /libpath:"../../../Release"
+
+!ELSEIF "$(CFG)" == "Fractals - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Fractals___Win32_Debug"
+# PROP BASE Intermediate_Dir "Fractals___Win32_Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"../../../Debug"
+
+!ENDIF
+
+# Begin Target
+
+# Name "Fractals - Win32 Release"
+# Name "Fractals - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\fractals.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/SixenseSDK/src/sixense_simple3d/progs/demos/Fractals/FractalsStatic.dsp b/SixenseSDK/src/sixense_simple3d/progs/demos/Fractals/FractalsStatic.dsp
new file mode 100755
index 0000000..780f78e
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/progs/demos/Fractals/FractalsStatic.dsp
@@ -0,0 +1,100 @@
+# Microsoft Developer Studio Project File - Name="FractalsStatic" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=FractalsStatic - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "FractalsStatic.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "FractalsStatic.mak" CFG="FractalsStatic - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "FractalsStatic - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "FractalsStatic - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "FractalsStatic - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "FractalsStatic___Win32_Release"
+# PROP BASE Intermediate_Dir "FractalsStatic___Win32_Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "ReleaseStatic"
+# PROP Intermediate_Dir "ReleaseStatic"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../../include" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "FREEGLUT_STATIC" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /libpath:"../../../ReleaseStatic"
+
+!ELSEIF "$(CFG)" == "FractalsStatic - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "FractalsStatic___Win32_Debug"
+# PROP BASE Intermediate_Dir "FractalsStatic___Win32_Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "DebugStatic"
+# PROP Intermediate_Dir "DebugStatic"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "FREEGLUT_STATIC" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"../../../DebugStatic"
+
+!ENDIF
+
+# Begin Target
+
+# Name "FractalsStatic - Win32 Release"
+# Name "FractalsStatic - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\fractals.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/SixenseSDK/src/sixense_simple3d/progs/demos/Fractals/Makefile.am b/SixenseSDK/src/sixense_simple3d/progs/demos/Fractals/Makefile.am
new file mode 100755
index 0000000..8be8276
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/progs/demos/Fractals/Makefile.am
@@ -0,0 +1,5 @@
+EXTRA_DIST = Fractals.dsp fractals.c fractals.dat
+noinst_PROGRAMS = fractals
+fractals_SOURCES = fractals.c
+fractals_LDFLAGS = -export-dynamic ../../../src/lib@LIBRARY@.la
+fractals_CFLAGS = -I$(top_srcdir)/include $(X_CFLAGS)
diff --git a/SixenseSDK/src/sixense_simple3d/progs/demos/Fractals/Makefile.in b/SixenseSDK/src/sixense_simple3d/progs/demos/Fractals/Makefile.in
new file mode 100755
index 0000000..b67234d
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/progs/demos/Fractals/Makefile.in
@@ -0,0 +1,465 @@
+# Makefile.in generated by automake 1.10.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = fractals$(EXEEXT)
+subdir = progs/demos/Fractals
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_fractals_OBJECTS = fractals-fractals.$(OBJEXT)
+fractals_OBJECTS = $(am_fractals_OBJECTS)
+fractals_LDADD = $(LDADD)
+fractals_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(fractals_CFLAGS) $(CFLAGS) \
+ $(fractals_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(fractals_SOURCES)
+DIST_SOURCES = $(fractals_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXPORT_FLAGS = @EXPORT_FLAGS@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+GL_LIBS = @GL_LIBS@
+GREP = @GREP@
+HEADER = @HEADER@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBRARY = @LIBRARY@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIBXI = @LIBXI@
+LIBXXF86VM = @LIBXXF86VM@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NMEDIT = @NMEDIT@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+VERSION_INFO = @VERSION_INFO@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXTRA_DIST = Fractals.dsp fractals.c fractals.dat
+fractals_SOURCES = fractals.c
+fractals_LDFLAGS = -export-dynamic ../../../src/lib@LIBRARY@.la
+fractals_CFLAGS = -I$(top_srcdir)/include $(X_CFLAGS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu progs/demos/Fractals/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu progs/demos/Fractals/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+clean-noinstPROGRAMS:
+ @list='$(noinst_PROGRAMS)'; for p in $$list; do \
+ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f $$p $$f"; \
+ rm -f $$p $$f ; \
+ done
+fractals$(EXEEXT): $(fractals_OBJECTS) $(fractals_DEPENDENCIES)
+ @rm -f fractals$(EXEEXT)
+ $(fractals_LINK) $(fractals_OBJECTS) $(fractals_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fractals-fractals.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+fractals-fractals.o: fractals.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fractals_CFLAGS) $(CFLAGS) -MT fractals-fractals.o -MD -MP -MF $(DEPDIR)/fractals-fractals.Tpo -c -o fractals-fractals.o `test -f 'fractals.c' || echo '$(srcdir)/'`fractals.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/fractals-fractals.Tpo $(DEPDIR)/fractals-fractals.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fractals.c' object='fractals-fractals.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fractals_CFLAGS) $(CFLAGS) -c -o fractals-fractals.o `test -f 'fractals.c' || echo '$(srcdir)/'`fractals.c
+
+fractals-fractals.obj: fractals.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fractals_CFLAGS) $(CFLAGS) -MT fractals-fractals.obj -MD -MP -MF $(DEPDIR)/fractals-fractals.Tpo -c -o fractals-fractals.obj `if test -f 'fractals.c'; then $(CYGPATH_W) 'fractals.c'; else $(CYGPATH_W) '$(srcdir)/fractals.c'; fi`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/fractals-fractals.Tpo $(DEPDIR)/fractals-fractals.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fractals.c' object='fractals-fractals.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fractals_CFLAGS) $(CFLAGS) -c -o fractals-fractals.obj `if test -f 'fractals.c'; then $(CYGPATH_W) 'fractals.c'; else $(CYGPATH_W) '$(srcdir)/fractals.c'; fi`
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstPROGRAMS ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/SixenseSDK/src/sixense_simple3d/progs/demos/Fractals/fractals.c b/SixenseSDK/src/sixense_simple3d/progs/demos/Fractals/fractals.c
new file mode 100755
index 0000000..12d8989
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/progs/demos/Fractals/fractals.c
@@ -0,0 +1,336 @@
+/* fractals.c */
+/*
+ * Program to draw a fractal by Michael Barnsley's deterministic algorithm.
+ * Algorithm:
+ * (1) Define the affine transformations (of the form r(i+1) = A r(i) + b )
+ * (2) Find the stationary point for each transformation
+ * (3) To draw:
+ * - If you are at the lowest level, draw lines connecting all the stationary points
+ * - If not, call the draw function recursively with each affine transformation applied
+ */
+
+/*
+ * User Commands:
+ * +,- - increment/decrement number of levels
+ * PgUp, PgDn - increase/decrease scaling
+ * Arrow keys - translate viewing section
+ * r - reset view
+ * Escape - quit
+ */
+
+#include <GL/freeglut.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+
+typedef struct
+{
+ double a00, a01, a10, a11 ; /* Transformation matrix */
+ double b0, b1 ; /* Constant vector added on */
+ double statx, staty ; /* Coordinates of the stationary point */
+}
+AffineTrans ;
+
+/* Number of levels to draw the fractal */
+static int num_levels = 4 ;
+
+/* The definition of the fractal */
+static int num_trans ;
+static AffineTrans *affine ;
+
+/* Flag telling us to keep executing the main loop */
+static int continue_in_main_loop = 1;
+
+/* the window title */
+char window_title [ 80 ] ;
+
+/* The amount the view is translated and scaled */
+double xwin = 0.0, ywin = 0.0 ;
+double scale_factor = 1.0 ;
+
+static void draw_level ( int num, double m00, double m01, double m10, double m11, double n0, double n1 )
+{
+ /* Draw a fractal transformed by "M", "N" as passed in */
+ int i ;
+
+ if ( num == 0 )
+ {
+ double x0 = m00 * affine[0].statx + m01 * affine[0].staty + n0 ;
+ double y0 = m10 * affine[0].statx + m11 * affine[0].staty + n1 ;
+
+ for ( i = 1; i < num_trans; i++ )
+ {
+ double x1 = m00 * affine[i].statx + m01 * affine[i].staty + n0 ;
+ double y1 = m10 * affine[i].statx + m11 * affine[i].staty + n1 ;
+
+ glVertex2d ( x0, y0 ) ;
+ glVertex2d ( x1, y1 ) ;
+
+ x0 = x1 ;
+ y0 = y1 ;
+ }
+ }
+ else
+ {
+ /* Map each affine transformation in the fractal through the one passed in and call "draw_level" */
+
+ for ( i = 0; i < num_trans; i++ )
+ {
+ draw_level ( num-1, m00*affine[i].a00+m01*affine[i].a10, m00*affine[i].a01+m01*affine[i].a11,
+ m10*affine[i].a00+m11*affine[i].a10, m10*affine[i].a01+m11*affine[i].a11,
+ m00*affine[i].b0 +m01*affine[i].b1 + n0, m10*affine[i].b0 +m11*affine[i].b1 + n1 ) ;
+ }
+ }
+}
+
+static void
+Display(void)
+{
+ glClear( GL_COLOR_BUFFER_BIT );
+
+ /* the curve */
+ glPushMatrix();
+ glScalef(2.5, 2.5, 2.5);
+
+ glColor4f(0.0, 0.0, 0.0, 1.0);
+ glBegin ( GL_LINES ) ;
+ draw_level ( num_levels, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0 );
+ glEnd () ;
+
+ glPopMatrix();
+ glutSwapBuffers();
+}
+
+static void
+Reshape(int width, int height)
+{
+ float ar;
+ glViewport ( 0, 0, width, height ) ;
+ glMatrixMode ( GL_PROJECTION ) ;
+ glLoadIdentity();
+ ar = (float) width / (float) height ;
+ if( ar > 1 )
+ glFrustum ( -ar, ar, -1.0, 1.0, 2.0, 100.0 ) ;
+ else
+ glFrustum ( -1.0, 1.0, -1/ar, 1/ar, 2.0, 100.0 );
+ glMatrixMode ( GL_MODELVIEW ) ;
+ glLoadIdentity () ;
+ xwin = -1.0 ;
+ ywin = 0.0 ;
+ glTranslated ( xwin, ywin, -5.0 ) ;
+}
+
+static void
+Key(unsigned char key, int x, int y)
+{
+ int need_redisplay = 1;
+
+ switch (key) {
+ case 27: /* Escape key */
+ continue_in_main_loop = 0 ;
+ break;
+
+ case '+' :
+ ++num_levels ;
+ break ;
+
+ case '-' :
+ if ( num_levels > 0 )
+ --num_levels ;
+ break ;
+
+ case 'r' : case 'R' :
+ glMatrixMode ( GL_MODELVIEW ) ;
+ glLoadIdentity();
+ xwin = -1.0 ;
+ ywin = 0.0 ;
+ glTranslated ( xwin, ywin, -5.0 ) ;
+ break ;
+
+ default:
+ need_redisplay = 0;
+ break;
+ }
+ if (need_redisplay)
+ glutPostRedisplay();
+}
+
+static void
+Special(int key, int x, int y)
+{
+ int need_redisplay = 1;
+
+ switch (key) {
+ case GLUT_KEY_UP :
+ glMatrixMode ( GL_MODELVIEW ) ;
+ ywin += 0.1 * scale_factor ;
+ glTranslated ( 0.0, 0.1 * scale_factor, 0.0 ) ;
+ break ;
+
+ case GLUT_KEY_DOWN :
+ glMatrixMode ( GL_MODELVIEW ) ;
+ ywin -= 0.1 * scale_factor ;
+ glTranslated ( 0.0, -0.1 * scale_factor, 0.0 ) ;
+ break ;
+
+ case GLUT_KEY_LEFT :
+ glMatrixMode ( GL_MODELVIEW ) ;
+ xwin -= 0.1 * scale_factor ;
+ glTranslated ( -0.1 * scale_factor, 0.0, 0.0 ) ;
+ break ;
+
+ case GLUT_KEY_RIGHT :
+ glMatrixMode ( GL_MODELVIEW ) ;
+ xwin += 0.1 * scale_factor ;
+ glTranslated ( 0.1 * scale_factor, 0.0, 0.0 ) ;
+ break ;
+
+ case GLUT_KEY_PAGE_UP :
+ glMatrixMode ( GL_MODELVIEW ) ;
+ glTranslated ( -xwin, -ywin, 0.0 ) ;
+ glScaled ( 1.25, 1.25, 1.25 ) ;
+ glTranslated ( xwin, ywin, 0.0 ) ;
+ scale_factor *= 0.8 ;
+ break ;
+
+ case GLUT_KEY_PAGE_DOWN :
+ glMatrixMode ( GL_MODELVIEW ) ;
+ glTranslated ( -xwin, -ywin, 0.0 ) ;
+ glScaled ( 0.8, 0.8, 0.8 ) ;
+ glTranslated ( xwin, ywin, 0.0 ) ;
+ scale_factor *= 1.25 ;
+ break ;
+
+ default:
+ need_redisplay = 0;
+ break;
+ }
+ if (need_redisplay)
+ glutPostRedisplay();
+}
+
+
+static void
+checkedFGets ( char *s, int size, FILE *stream )
+{
+ if ( fgets ( s, size, stream ) == NULL ) {
+ fprintf ( stderr, "fgets failed\n");
+ exit ( EXIT_FAILURE );
+ }
+}
+
+
+void readConfigFile ( char *fnme )
+{
+ FILE *fptr = fopen ( fnme, "rt" ) ;
+ int i ;
+ char inputline [ 256 ] ;
+
+ if ( fptr )
+ {
+ /* Read a header line */
+ checkedFGets ( inputline, sizeof ( inputline ), fptr ) ;
+
+ /* Read a comment line */
+ checkedFGets ( inputline, sizeof ( inputline ), fptr ) ;
+
+ /* Read the window title */
+ checkedFGets ( inputline, sizeof ( inputline ), fptr ) ;
+ /* We assume here that this line will not exceed 79 characters plus a
+ newline (window_title is 80 characters long). That'll cause a buffer
+ overflow. For a simple program like this, though, we're letting it
+ slide!
+ */
+ sscanf ( inputline, "%[a-zA-Z0-9!@#$%^&*()+=/\\_-\" ]", window_title ) ;
+
+ /* Read a comment line */
+ checkedFGets ( inputline, sizeof ( inputline ), fptr ) ;
+
+ /* Read the number of affine transformations */
+ checkedFGets ( inputline, sizeof ( inputline ), fptr ) ;
+ sscanf ( inputline, "%d", &num_trans ) ;
+
+ affine = (AffineTrans *)malloc ( num_trans * sizeof(AffineTrans) ) ;
+
+ /* Read a comment line */
+ checkedFGets ( inputline, sizeof ( inputline ), fptr ) ;
+
+ for ( i = 0; i < num_trans; i++ )
+ {
+ /* Read an affine transformation definition */
+ checkedFGets ( inputline, sizeof ( inputline ), fptr ) ;
+ sscanf ( inputline, "%lf %lf %lf %lf %lf %lf", &affine[i].a00, &affine[i].a01,
+ &affine[i].a10, &affine[i].a11, &affine[i].b0, &affine[i].b1 ) ;
+ }
+ }
+ else /* No data file, set a default */
+ {
+ printf ( "ERROR opening file <%s>\n", fnme ) ;
+ strcpy ( window_title, "Cantor Dust" ) ;
+ num_trans = 2 ;
+ affine = (AffineTrans *)malloc ( num_trans * sizeof(AffineTrans) ) ;
+ affine[0].a00 = 0.25 ; affine[0].a01 = 0.00 ; affine[0].a10 = 0.00 ; affine[0].a11 = 0.25 ;
+ affine[0].b0 = 0.0 ; affine[0].b1 = 0.0 ;
+ affine[1].a00 = 0.25 ; affine[1].a01 = 0.00 ; affine[1].a10 = 0.00 ; affine[1].a11 = 0.25 ;
+ affine[1].b0 = 0.5 ; affine[1].b1 = 0.0 ;
+ }
+
+ for ( i = 0; i < num_trans; i++ )
+ {
+ double m00, m01, m10, m11 ; /* Matrix "I" minus "A" */
+ double determ ; /* Determinant of this matrix */
+
+ /* Calculate the stationary point */
+
+ m00 = 1.0 - affine[i].a00 ;
+ m01 = - affine[i].a01 ;
+ m10 = - affine[i].a10 ;
+ m11 = 1.0 - affine[i].a11 ;
+
+ determ = m00 * m11 - m01 * m10 ;
+
+ if ( fabs ( determ ) > 1.e-6 )
+ {
+ affine[i].statx = ( m11 * affine[i].b0 - m01 * affine[i].b1 ) / determ ;
+ affine[i].staty = ( -m10 * affine[i].b0 + m00 * affine[i].b1 ) / determ ;
+ }
+ else
+ affine[i].statx = affine[i].staty = 0.0 ;
+ }
+}
+
+int
+main(int argc, char *argv[])
+{
+ int fractal_window ;
+
+ glutInitWindowSize(500, 250);
+ glutInitWindowPosition ( 140, 140 );
+ glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE );
+ glutInit(&argc, argv);
+
+ if ( argc > 1 )
+ readConfigFile ( argv[1] ) ;
+ else
+ readConfigFile ( "fractals.dat" ) ;
+
+ fractal_window = glutCreateWindow( window_title );
+
+ glClearColor(1.0, 1.0, 1.0, 1.0);
+
+ glutReshapeFunc(Reshape);
+ glutKeyboardFunc(Key);
+ glutSpecialFunc(Special);
+ glutDisplayFunc(Display);
+
+#ifdef WIN32
+#endif
+
+ while ( continue_in_main_loop )
+ glutMainLoopEvent();
+
+ printf ( "Back from the 'freeglut' main loop\n" ) ;
+
+ return 0; /* ANSI C requires main to return int. */
+}
diff --git a/SixenseSDK/src/sixense_simple3d/progs/demos/Fractals/fractals.dat b/SixenseSDK/src/sixense_simple3d/progs/demos/Fractals/fractals.dat
new file mode 100755
index 0000000..6a32de6
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/progs/demos/Fractals/fractals.dat
@@ -0,0 +1,10 @@
+Koch Snowflake Fractal
+Title of window
+"Koch Snowflake"
+Number of transformations
+4
+ A00 A01 A10 A11 B0 B1
+0.33333 0.0 0.0 0.33333 0.0 0.0
+0.16667 -.28868 0.28868 0.16667 0.33333 0.0
+0.16667 0.28868 -.28868 0.16667 0.5 0.28868
+0.33333 0.0 0.0 0.33333 0.66667 0.0
diff --git a/SixenseSDK/src/sixense_simple3d/progs/demos/Fractals_random/Fractals_random.dsp b/SixenseSDK/src/sixense_simple3d/progs/demos/Fractals_random/Fractals_random.dsp
new file mode 100755
index 0000000..a19fb4e
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/progs/demos/Fractals_random/Fractals_random.dsp
@@ -0,0 +1,101 @@
+# Microsoft Developer Studio Project File - Name="Fractals_random" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=Fractals_random - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "Fractals_random.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "Fractals_random.mak" CFG="Fractals_random - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "Fractals_random - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "Fractals_random - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "Fractals_random - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../../include" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /libpath:"../../../Release"
+
+!ELSEIF "$(CFG)" == "Fractals_random - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\..\include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"../../../Debug"
+
+!ENDIF
+
+# Begin Target
+
+# Name "Fractals_random - Win32 Release"
+# Name "Fractals_random - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\fractals_random.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/SixenseSDK/src/sixense_simple3d/progs/demos/Fractals_random/Fractals_randomStatic.dsp b/SixenseSDK/src/sixense_simple3d/progs/demos/Fractals_random/Fractals_randomStatic.dsp
new file mode 100755
index 0000000..49d0bf3
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/progs/demos/Fractals_random/Fractals_randomStatic.dsp
@@ -0,0 +1,100 @@
+# Microsoft Developer Studio Project File - Name="Fractals_randomStatic" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=Fractals_randomStatic - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "Fractals_randomStatic.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "Fractals_randomStatic.mak" CFG="Fractals_randomStatic - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "Fractals_randomStatic - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "Fractals_randomStatic - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "Fractals_randomStatic - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Fractals_randomStatic___Win32_Release"
+# PROP BASE Intermediate_Dir "Fractals_randomStatic___Win32_Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "ReleaseStatic"
+# PROP Intermediate_Dir "ReleaseStatic"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../../include" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "FREEGLUT_STATIC" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /libpath:"../../../ReleaseStatic"
+
+!ELSEIF "$(CFG)" == "Fractals_randomStatic - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Fractals_randomStatic___Win32_Debug"
+# PROP BASE Intermediate_Dir "Fractals_randomStatic___Win32_Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "DebugStatic"
+# PROP Intermediate_Dir "DebugStatic"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "FREEGLUT_STATIC" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"../../../DebugStatic"
+
+!ENDIF
+
+# Begin Target
+
+# Name "Fractals_randomStatic - Win32 Release"
+# Name "Fractals_randomStatic - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\fractals_random.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/SixenseSDK/src/sixense_simple3d/progs/demos/Fractals_random/Makefile.am b/SixenseSDK/src/sixense_simple3d/progs/demos/Fractals_random/Makefile.am
new file mode 100755
index 0000000..9dc66b9
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/progs/demos/Fractals_random/Makefile.am
@@ -0,0 +1,6 @@
+EXTRA_DIST = Fractals_random.dsp fractals.dat fractals_random.c
+
+noinst_PROGRAMS = fractals_random
+fractals_random_SOURCES = fractals_random.c
+fractals_random_LDFLAGS = -export-dynamic ../../../src/lib@LIBRARY@.la
+fractals_random_CFLAGS = -I$(top_srcdir)/include $(X_CFLAGS)
diff --git a/SixenseSDK/src/sixense_simple3d/progs/demos/Fractals_random/Makefile.in b/SixenseSDK/src/sixense_simple3d/progs/demos/Fractals_random/Makefile.in
new file mode 100755
index 0000000..4bf6a7c
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/progs/demos/Fractals_random/Makefile.in
@@ -0,0 +1,466 @@
+# Makefile.in generated by automake 1.10.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = fractals_random$(EXEEXT)
+subdir = progs/demos/Fractals_random
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_fractals_random_OBJECTS = \
+ fractals_random-fractals_random.$(OBJEXT)
+fractals_random_OBJECTS = $(am_fractals_random_OBJECTS)
+fractals_random_LDADD = $(LDADD)
+fractals_random_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(fractals_random_CFLAGS) \
+ $(CFLAGS) $(fractals_random_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(fractals_random_SOURCES)
+DIST_SOURCES = $(fractals_random_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXPORT_FLAGS = @EXPORT_FLAGS@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+GL_LIBS = @GL_LIBS@
+GREP = @GREP@
+HEADER = @HEADER@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBRARY = @LIBRARY@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIBXI = @LIBXI@
+LIBXXF86VM = @LIBXXF86VM@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NMEDIT = @NMEDIT@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+VERSION_INFO = @VERSION_INFO@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXTRA_DIST = Fractals_random.dsp fractals.dat fractals_random.c
+fractals_random_SOURCES = fractals_random.c
+fractals_random_LDFLAGS = -export-dynamic ../../../src/lib@LIBRARY@.la
+fractals_random_CFLAGS = -I$(top_srcdir)/include $(X_CFLAGS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu progs/demos/Fractals_random/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu progs/demos/Fractals_random/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+clean-noinstPROGRAMS:
+ @list='$(noinst_PROGRAMS)'; for p in $$list; do \
+ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f $$p $$f"; \
+ rm -f $$p $$f ; \
+ done
+fractals_random$(EXEEXT): $(fractals_random_OBJECTS) $(fractals_random_DEPENDENCIES)
+ @rm -f fractals_random$(EXEEXT)
+ $(fractals_random_LINK) $(fractals_random_OBJECTS) $(fractals_random_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fractals_random-fractals_random.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+fractals_random-fractals_random.o: fractals_random.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fractals_random_CFLAGS) $(CFLAGS) -MT fractals_random-fractals_random.o -MD -MP -MF $(DEPDIR)/fractals_random-fractals_random.Tpo -c -o fractals_random-fractals_random.o `test -f 'fractals_random.c' || echo '$(srcdir)/'`fractals_random.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/fractals_random-fractals_random.Tpo $(DEPDIR)/fractals_random-fractals_random.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fractals_random.c' object='fractals_random-fractals_random.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fractals_random_CFLAGS) $(CFLAGS) -c -o fractals_random-fractals_random.o `test -f 'fractals_random.c' || echo '$(srcdir)/'`fractals_random.c
+
+fractals_random-fractals_random.obj: fractals_random.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fractals_random_CFLAGS) $(CFLAGS) -MT fractals_random-fractals_random.obj -MD -MP -MF $(DEPDIR)/fractals_random-fractals_random.Tpo -c -o fractals_random-fractals_random.obj `if test -f 'fractals_random.c'; then $(CYGPATH_W) 'fractals_random.c'; else $(CYGPATH_W) '$(srcdir)/fractals_random.c'; fi`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/fractals_random-fractals_random.Tpo $(DEPDIR)/fractals_random-fractals_random.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fractals_random.c' object='fractals_random-fractals_random.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fractals_random_CFLAGS) $(CFLAGS) -c -o fractals_random-fractals_random.obj `if test -f 'fractals_random.c'; then $(CYGPATH_W) 'fractals_random.c'; else $(CYGPATH_W) '$(srcdir)/fractals_random.c'; fi`
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstPROGRAMS ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/SixenseSDK/src/sixense_simple3d/progs/demos/Fractals_random/fractals.dat b/SixenseSDK/src/sixense_simple3d/progs/demos/Fractals_random/fractals.dat
new file mode 100755
index 0000000..6a32de6
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/progs/demos/Fractals_random/fractals.dat
@@ -0,0 +1,10 @@
+Koch Snowflake Fractal
+Title of window
+"Koch Snowflake"
+Number of transformations
+4
+ A00 A01 A10 A11 B0 B1
+0.33333 0.0 0.0 0.33333 0.0 0.0
+0.16667 -.28868 0.28868 0.16667 0.33333 0.0
+0.16667 0.28868 -.28868 0.16667 0.5 0.28868
+0.33333 0.0 0.0 0.33333 0.66667 0.0
diff --git a/SixenseSDK/src/sixense_simple3d/progs/demos/Fractals_random/fractals_random.c b/SixenseSDK/src/sixense_simple3d/progs/demos/Fractals_random/fractals_random.c
new file mode 100755
index 0000000..176013f
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/progs/demos/Fractals_random/fractals_random.c
@@ -0,0 +1,387 @@
+/* fractals_random.c */
+/* This demo shows a single-buffering "freeglut" example. */
+
+/*
+ * Program to draw a fractal by Michael Barnsley's stochastic algorithm.
+ * Algorithm:
+ * (1) Define the affine transformations (of the form r(i+1) = A r(i) + b )
+ * (2) Find the stationary point for the first transformation
+ * (3) To draw:
+ * - Pick a random integer between 1 and the number of transformations (inclusive)
+ * - Send the current point through the transformation to create the new current point
+ * - Plot the new current point
+ */
+
+/*
+ * User Commands:
+ * PgUp, PgDn - increase/decrease scaling
+ * Arrow keys - translate viewing section
+ * r - reset view
+ * Escape - quit
+ */
+
+#include <GL/freeglut.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#ifdef _MSC_VER
+/* DUMP MEMORY LEAKS */
+#include <crtdbg.h>
+#endif
+
+typedef struct
+{
+ double a00, a01, a10, a11 ; /* Transformation matrix */
+ double b0, b1 ; /* Constant vector added on */
+ double statx, staty ; /* Coordinates of the stationary point */
+}
+AffineTrans ;
+
+/* Number of levels to draw the fractal */
+static int num_levels = 0 ;
+
+/* The definition of the fractal */
+static int num_trans ;
+static AffineTrans *affine ;
+
+/* the window title */
+char window_title [ 80 ] ;
+
+/* The amount the view is translated */
+double xwin = 0.0, ywin = 0.0 ;
+double scale_factor = 1.0 ;
+
+/* The current point */
+double current_x = 0.0, current_y = 0.0 ;
+
+/* Signals when a glClear is needed */
+static GLboolean needClear = GL_TRUE;
+
+static void draw_level ( int num, double m00, double m01, double m10, double m11, double n0, double n1 )
+{
+ /* Draw a fractal transformed by "M", "N" as passed in */
+ int i ;
+
+ for ( i = 0; i < 10; i++ )
+ {
+ int random = ( rand( ) >> 10 ) % num_trans;
+ double new_x = affine[random].a00 * current_x + affine[random].a01 * current_y + affine[random].b0 ;
+ double new_y = affine[random].a10 * current_x + affine[random].a11 * current_y + affine[random].b1 ;
+
+ glVertex2d ( new_x, new_y ) ;
+ current_x = new_x ;
+ current_y = new_y ;
+ }
+}
+
+static void
+Display(void)
+{
+ if (needClear) {
+ glClear(GL_COLOR_BUFFER_BIT);
+ needClear = GL_FALSE;
+ }
+
+ /* the curve */
+ glPushMatrix();
+ glScaled(2.5, 2.5, 2.5);
+
+ glColor4f(0.0, 0.0, 0.0, 1.0);
+ glBegin ( GL_POINTS ) ;
+ draw_level ( num_levels, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0 );
+ glEnd () ;
+
+ glPopMatrix();
+
+ glFlush();
+ glutPostRedisplay(); /* Needed so that this function will be called again */
+}
+
+static void
+Reshape(int width, int height)
+{
+ float ar;
+ glViewport(0, 0, width, height);
+ glMatrixMode(GL_PROJECTION);
+ glLoadIdentity();
+ ar = (float) width / (float) height;
+ if( ar > 1 )
+ glFrustum(-ar, ar, -1.0, 1.0, 2.0, 100.0);
+ else
+ glFrustum(-1.0, 1.0, -1/ar, 1/ar, 2.0, 100.0);
+ glMatrixMode(GL_MODELVIEW);
+ glLoadIdentity();
+ xwin = -1.0 ;
+ ywin = 0.0 ;
+ glTranslated(xwin, ywin, -5.0);
+ needClear = GL_TRUE;
+}
+
+static void
+Key(unsigned char key, int x, int y)
+{
+ int changed_settings = 1;
+
+ switch (key) {
+ case 27: /* Escape key */
+ glutLeaveMainLoop ();
+ break;
+
+ case 'r' : case 'R' :
+ glMatrixMode(GL_MODELVIEW);
+ glLoadIdentity();
+ xwin = -1.0 ;
+ ywin = 0.0 ;
+ glTranslated(xwin, ywin, -5.0);
+ break ;
+
+ default:
+ changed_settings = 0;
+ break;
+ }
+ if (changed_settings)
+ needClear = GL_TRUE;
+ glutPostRedisplay();
+}
+
+static void
+Special(int key, int x, int y)
+{
+ int changed_settings = 1;
+
+ switch (key) {
+ case GLUT_KEY_UP :
+ glMatrixMode(GL_MODELVIEW);
+ ywin += 0.1 * scale_factor ;
+ glTranslated(0.0, 0.1 * scale_factor, 0.0);
+ break ;
+
+ case GLUT_KEY_DOWN :
+ glMatrixMode(GL_MODELVIEW);
+ ywin -= 0.1 * scale_factor ;
+ glTranslated(0.0, -0.1 * scale_factor, 0.0);
+ break ;
+
+ case GLUT_KEY_LEFT :
+ glMatrixMode(GL_MODELVIEW);
+ xwin -= 0.1 * scale_factor ;
+ glTranslated(-0.1 * scale_factor, 0.0, 0.0);
+ break ;
+
+ case GLUT_KEY_RIGHT :
+ glMatrixMode(GL_MODELVIEW);
+ xwin += 0.1 * scale_factor ;
+ glTranslated(0.1 * scale_factor, 0.0, 0.0);
+ break ;
+
+ case GLUT_KEY_PAGE_UP :
+ glMatrixMode(GL_MODELVIEW);
+ glTranslated ( -xwin, -ywin, 0.0 ) ;
+ glScaled(1.25, 1.25, 1.25);
+ glTranslated ( xwin, ywin, 0.0 ) ;
+ scale_factor *= 0.8 ;
+ break ;
+
+ case GLUT_KEY_PAGE_DOWN :
+ glMatrixMode(GL_MODELVIEW);
+ glTranslated ( -xwin, -ywin, 0.0 ) ;
+ glScaled(0.8, 0.8, 0.8);
+ glTranslated ( xwin, ywin, 0.0 ) ;
+ scale_factor *= 1.25 ;
+ break ;
+
+ default:
+ changed_settings = 0;
+ break;
+ }
+ if (changed_settings)
+ needClear = GL_TRUE;
+
+ glutPostRedisplay();
+}
+
+
+static int mouse_x = 0, mouse_y = 0 ;
+static int button_down = GLUT_DOWN ;
+
+static void
+Mouse ( int button, int updown, int x, int y )
+{
+ button_down = updown ;
+
+ if ( updown == GLUT_DOWN )
+ {
+ mouse_x = x ;
+ mouse_y = y ;
+ }
+}
+
+static void
+MouseMotion ( int x, int y )
+{
+ int window_width = glutGet ( GLUT_WINDOW_WIDTH ) ;
+ int window_height = glutGet ( GLUT_WINDOW_HEIGHT ) ;
+ int window_size = ( window_width < window_height ) ? window_width : window_height ;
+
+ double delta_x = 5.0 * (double)(x - mouse_x) / (double)(window_size) ;
+ double delta_y = 5.0 * (double)(y - mouse_y) / (double)(window_size) ;
+
+ xwin += delta_x * scale_factor ;
+ ywin -= delta_y * scale_factor ;
+ glMatrixMode ( GL_MODELVIEW ) ;
+ glTranslated ( delta_x * scale_factor, -delta_y * scale_factor, 0.0 ) ;
+
+ needClear = GL_TRUE;
+ glutPostRedisplay();
+
+ mouse_x = x ;
+ mouse_y = y ;
+}
+
+static void
+MouseWheel ( int wheel_number, int direction, int x, int y )
+{
+ double scale = ( direction > 0 ) ? 1.25 : 0.8 ;
+
+ glMatrixMode ( GL_MODELVIEW ) ;
+ glTranslated ( -xwin, -ywin, 0.0 ) ;
+ glScaled ( scale, scale, scale ) ;
+ glTranslated ( xwin, ywin, 0.0 ) ;
+ scale_factor /= scale ;
+
+ needClear = GL_TRUE;
+ glutPostRedisplay();
+}
+
+
+static void
+checkedFGets ( char *s, int size, FILE *stream )
+{
+ if ( fgets ( s, size, stream ) == NULL ) {
+ fprintf ( stderr, "fgets failed\n");
+ exit ( EXIT_FAILURE );
+ }
+}
+
+
+void readConfigFile ( char *fnme )
+{
+ FILE *fptr = fopen ( fnme, "rt" ) ;
+ int i ;
+ char inputline [ 256 ] ;
+
+ if ( fptr )
+ {
+ /* Read a header line */
+ checkedFGets ( inputline, sizeof ( inputline ), fptr ) ;
+
+ /* Read a comment line */
+ checkedFGets ( inputline, sizeof ( inputline ), fptr ) ;
+
+ /* Read the window title */
+ checkedFGets ( inputline, sizeof ( inputline ), fptr ) ;
+ /* We assume here that this line will not exceed 79 characters plus a
+ newline (window_title is 80 characters long). That'll cause a buffer
+ overflow. For a simple program like this, though, we're letting it
+ slide!
+ */
+ sscanf ( inputline, "%[a-zA-Z0-9!@#$%^&*()+=/\\_-\" ]", window_title ) ;
+
+ /* Read a comment line */
+ checkedFGets ( inputline, sizeof ( inputline ), fptr ) ;
+
+ /* Read the number of affine transformations */
+ checkedFGets ( inputline, sizeof ( inputline ), fptr ) ;
+ sscanf ( inputline, "%d", &num_trans ) ;
+
+ affine = (AffineTrans *)malloc ( num_trans * sizeof(AffineTrans) ) ;
+
+ /* Read a comment line */
+ checkedFGets ( inputline, sizeof ( inputline ), fptr ) ;
+
+ for ( i = 0; i < num_trans; i++ )
+ {
+ /* Read an affine transformation definition */
+ checkedFGets ( inputline, sizeof ( inputline ), fptr ) ;
+ sscanf ( inputline, "%lf %lf %lf %lf %lf %lf", &affine[i].a00, &affine[i].a01,
+ &affine[i].a10, &affine[i].a11, &affine[i].b0, &affine[i].b1 ) ;
+ }
+ }
+ else /* No data file, set a default */
+ {
+ printf ( "ERROR opening file <%s>\n", fnme ) ;
+ strcpy ( window_title, "Cantor Dust" ) ;
+ num_trans = 2 ;
+ affine = (AffineTrans *)malloc ( num_trans * sizeof(AffineTrans) ) ;
+ affine[0].a00 = 0.25 ; affine[0].a01 = 0.00 ; affine[0].a10 = 0.00 ; affine[0].a11 = 0.25 ;
+ affine[0].b0 = 0.0 ; affine[0].b1 = 0.0 ;
+ affine[1].a00 = 0.25 ; affine[1].a01 = 0.00 ; affine[1].a10 = 0.00 ; affine[1].a11 = 0.25 ;
+ affine[1].b0 = 0.5 ; affine[1].b1 = 0.0 ;
+ }
+
+ for ( i = 0; i < num_trans; i++ )
+ {
+ double m00, m01, m10, m11 ; /* Matrix "I" minus "A" */
+ double determ ; /* Determinant of this matrix */
+
+ /* Calculate the stationary point */
+
+ m00 = 1.0 - affine[i].a00 ;
+ m01 = - affine[i].a01 ;
+ m10 = - affine[i].a10 ;
+ m11 = 1.0 - affine[i].a11 ;
+
+ determ = m00 * m11 - m01 * m10 ;
+
+ if ( fabs ( determ ) > 1.e-6 )
+ {
+ affine[i].statx = ( m11 * affine[i].b0 - m01 * affine[i].b1 ) / determ ;
+ affine[i].staty = ( -m10 * affine[i].b0 + m00 * affine[i].b1 ) / determ ;
+ }
+ else
+ affine[i].statx = affine[i].staty = 0.0 ;
+ }
+}
+
+int
+main(int argc, char *argv[])
+{
+ int fractal_window ;
+
+ glutInitDisplayMode( GLUT_RGB | GLUT_SINGLE );
+
+ glutInitWindowSize(500, 250);
+ glutInitWindowPosition ( 140, 140 ) ;
+ glutInit(&argc, argv);
+
+ if ( argc > 1 )
+ readConfigFile ( argv[1] ) ;
+ else
+ readConfigFile ( "fractals.dat" ) ;
+
+ fractal_window = glutCreateWindow( window_title );
+
+ glClearColor(1.0, 1.0, 1.0, 1.0);
+
+ glutReshapeFunc(Reshape);
+ glutKeyboardFunc(Key);
+ glutSpecialFunc(Special);
+ glutDisplayFunc(Display);
+ glutMouseFunc(Mouse);
+ glutMotionFunc(MouseMotion);
+ glutMouseWheelFunc(MouseWheel);
+
+ glutMainLoop();
+
+ printf ( "Back from the 'freeglut' main loop\n" ) ;
+
+ free ( affine ) ;
+
+#ifdef _MSC_VER
+ /* DUMP MEMORY LEAK INFORMATION */
+ _CrtDumpMemoryLeaks () ;
+#endif
+
+ return 0; /* ANSI C requires main to return int. */
+}
diff --git a/SixenseSDK/src/sixense_simple3d/progs/demos/Lorenz/Makefile.am b/SixenseSDK/src/sixense_simple3d/progs/demos/Lorenz/Makefile.am
new file mode 100755
index 0000000..0d61044
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/progs/demos/Lorenz/Makefile.am
@@ -0,0 +1,6 @@
+EXTRA_DIST = lorenz.c lorenz.dsp
+
+noinst_PROGRAMS = lorenz
+lorenz_SOURCES = lorenz.c
+lorenz_LDFLAGS = -export-dynamic ../../../src/lib@LIBRARY@.la
+lorenz_CFLAGS = -I$(top_srcdir)/include $(X_CFLAGS)
diff --git a/SixenseSDK/src/sixense_simple3d/progs/demos/Lorenz/Makefile.in b/SixenseSDK/src/sixense_simple3d/progs/demos/Lorenz/Makefile.in
new file mode 100755
index 0000000..8ab2f03
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/progs/demos/Lorenz/Makefile.in
@@ -0,0 +1,465 @@
+# Makefile.in generated by automake 1.10.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = lorenz$(EXEEXT)
+subdir = progs/demos/Lorenz
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_lorenz_OBJECTS = lorenz-lorenz.$(OBJEXT)
+lorenz_OBJECTS = $(am_lorenz_OBJECTS)
+lorenz_LDADD = $(LDADD)
+lorenz_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(lorenz_CFLAGS) $(CFLAGS) \
+ $(lorenz_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(lorenz_SOURCES)
+DIST_SOURCES = $(lorenz_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXPORT_FLAGS = @EXPORT_FLAGS@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+GL_LIBS = @GL_LIBS@
+GREP = @GREP@
+HEADER = @HEADER@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBRARY = @LIBRARY@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIBXI = @LIBXI@
+LIBXXF86VM = @LIBXXF86VM@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NMEDIT = @NMEDIT@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+VERSION_INFO = @VERSION_INFO@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXTRA_DIST = lorenz.c lorenz.dsp
+lorenz_SOURCES = lorenz.c
+lorenz_LDFLAGS = -export-dynamic ../../../src/lib@LIBRARY@.la
+lorenz_CFLAGS = -I$(top_srcdir)/include $(X_CFLAGS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu progs/demos/Lorenz/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu progs/demos/Lorenz/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+clean-noinstPROGRAMS:
+ @list='$(noinst_PROGRAMS)'; for p in $$list; do \
+ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f $$p $$f"; \
+ rm -f $$p $$f ; \
+ done
+lorenz$(EXEEXT): $(lorenz_OBJECTS) $(lorenz_DEPENDENCIES)
+ @rm -f lorenz$(EXEEXT)
+ $(lorenz_LINK) $(lorenz_OBJECTS) $(lorenz_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lorenz-lorenz.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+lorenz-lorenz.o: lorenz.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lorenz_CFLAGS) $(CFLAGS) -MT lorenz-lorenz.o -MD -MP -MF $(DEPDIR)/lorenz-lorenz.Tpo -c -o lorenz-lorenz.o `test -f 'lorenz.c' || echo '$(srcdir)/'`lorenz.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/lorenz-lorenz.Tpo $(DEPDIR)/lorenz-lorenz.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lorenz.c' object='lorenz-lorenz.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lorenz_CFLAGS) $(CFLAGS) -c -o lorenz-lorenz.o `test -f 'lorenz.c' || echo '$(srcdir)/'`lorenz.c
+
+lorenz-lorenz.obj: lorenz.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lorenz_CFLAGS) $(CFLAGS) -MT lorenz-lorenz.obj -MD -MP -MF $(DEPDIR)/lorenz-lorenz.Tpo -c -o lorenz-lorenz.obj `if test -f 'lorenz.c'; then $(CYGPATH_W) 'lorenz.c'; else $(CYGPATH_W) '$(srcdir)/lorenz.c'; fi`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/lorenz-lorenz.Tpo $(DEPDIR)/lorenz-lorenz.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lorenz.c' object='lorenz-lorenz.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lorenz_CFLAGS) $(CFLAGS) -c -o lorenz-lorenz.obj `if test -f 'lorenz.c'; then $(CYGPATH_W) 'lorenz.c'; else $(CYGPATH_W) '$(srcdir)/lorenz.c'; fi`
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstPROGRAMS ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/SixenseSDK/src/sixense_simple3d/progs/demos/Lorenz/lorenz.c b/SixenseSDK/src/sixense_simple3d/progs/demos/Lorenz/lorenz.c
new file mode 100755
index 0000000..6a816b2
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/progs/demos/Lorenz/lorenz.c
@@ -0,0 +1,379 @@
+/*
+ * Lorenz Strange Attractor
+ *
+ * Written by John F. Fay in honor of the "freeglut" 2.0.0 release in July 2003
+ *
+ * What it does:
+ * This program starts with two particles right next to each other. The particles
+ * move through a three-dimensional phase space governed by the following equations:
+ * dx/dt = sigma * ( y - x )
+ * dy/dt = r * x - y + x * z
+ * dz/dt = x * y + b * z
+ * These are the Lorenz equations and define the "Lorenz Attractor." Any two particles
+ * arbitrarily close together will move apart as time increases, but their tracks are
+ * confined within a region of the space.
+ *
+ * Commands:
+ * Arrow keys: Rotate the view
+ * PgUp, PgDn: Zoom in and out
+ * Mouse click: Center on the nearest point on a particle trajectory
+ *
+ * 'r'/'R': Reset the simulation
+ * 'm'/'M': Modify the Lorenz parameters (in the text window)
+ * 's'/'S': Stop (the advancement in time)
+ * 'g'/'G': Go
+ * <spacebar>: Single-step
+ * <Escape>: Quit
+ */
+
+/* Include Files */
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <math.h>
+#include <GL/freeglut.h>
+#ifdef _MSC_VER
+/* DUMP MEMORY LEAKS */
+#include <crtdbg.h>
+#endif
+
+
+/************************************** Defined Constants ***************************************/
+/* Number of points to draw in the curves */
+#define NUM_POINTS 512
+
+/* Angle to rotate when the user presses an arrow key */
+#define ROTATION_ANGLE 5.0
+
+/* Amount to scale bu when the user presses PgUp or PgDn */
+#define SCALE_FACTOR 0.8
+
+
+/*************************************** Global Variables ***************************************/
+/* Lorenz Attractor variables */
+double s0 = 10.0, r0 = 28.0, b0 = 8.0/3.0 ; /* Default Lorenz attactor parameters */
+double time_step = 0.03 ; /* Time step in the simulation */
+double sigma = 10.0, r = 28.0, b = 8.0/3.0 ; /* Lorenz attactor parameters */
+double red_position[NUM_POINTS][3] ; /* Path of the red point */
+double grn_position[NUM_POINTS][3] ; /* Path of the green point */
+int array_index ; /* Position in *_position arrays of most recent point */
+double distance = 0.0 ; /* Distance between the two points */
+
+/* GLUT variables */
+double yaw = 0.0, pit = 0.0 ; /* Euler angles of the viewing rotation */
+double scale = 1.0 ; /* Scale factor */
+double xcen = 0.0, ycen = 0.0, zcen = 0.0 ; /* Coordinates of the point looked at */
+
+int animate = 1 ; /* 0 - stop, 1 = go, 2 = single-step */
+
+
+/******************************************* Functions ******************************************/
+
+/* The Lorenz Attractor */
+void calc_deriv ( double position[3], double deriv[3] )
+{
+ /* Calculate the Lorenz attractor derivatives */
+ deriv[0] = sigma * ( position[1] - position[0] ) ;
+ deriv[1] = ( r + position[2] ) * position[0] - position[1] ;
+ deriv[2] = -position[0] * position[1] - b * position[2] ;
+}
+
+void advance_in_time ( double time_step, double position[3], double new_position[3] )
+{
+ /* Move a point along the Lorenz attractor */
+ double deriv0[3], deriv1[3], deriv2[3], deriv3[3] ;
+ int i ;
+ memcpy ( new_position, position, 3 * sizeof(double) ) ; /* Save the present values */
+
+ /* First pass in a Fourth-Order Runge-Kutta integration method */
+ calc_deriv ( position, deriv0 ) ;
+ for ( i = 0; i < 3; i++ )
+ new_position[i] = position[i] + 0.5 * time_step * deriv0[i] ;
+
+ /* Second pass */
+ calc_deriv ( new_position, deriv1 ) ;
+ for ( i = 0; i < 3; i++ )
+ new_position[i] = position[i] + 0.5 * time_step * deriv1[i] ;
+
+ /* Third pass */
+ calc_deriv ( position, deriv2 ) ;
+ for ( i = 0; i < 3; i++ )
+ new_position[i] = position[i] + time_step * deriv2[i] ;
+
+ /* Second pass */
+ calc_deriv ( new_position, deriv3 ) ;
+ for ( i = 0; i < 3; i++ )
+ new_position[i] = position[i] + 0.1666666666666666667 * time_step *
+ ( deriv0[i] + 2.0 * ( deriv1[i] + deriv2[i] ) + deriv3[i] ) ;
+}
+
+static void
+checkedFGets ( char *s, int size, FILE *stream )
+{
+ if ( fgets ( s, size, stream ) == NULL ) {
+ fprintf ( stderr, "fgets failed\n");
+ exit ( EXIT_FAILURE );
+ }
+}
+
+
+/* GLUT callbacks */
+
+#define INPUT_LINE_LENGTH 80
+
+void key_cb ( unsigned char key, int x, int y )
+{
+ int i ;
+ char inputline [ INPUT_LINE_LENGTH ] ;
+
+ switch ( key )
+ {
+ case 'r' : case 'R' : /* Reset the simulation */
+ /* Reset the Lorenz parameters */
+ sigma = s0 ;
+ b = b0 ;
+ r = r0 ;
+ /* Set an initial position */
+ red_position[0][0] = (double)rand() / (double)RAND_MAX ;
+ red_position[0][1] = (double)rand() / (double)RAND_MAX ;
+ red_position[0][2] = (double)rand() / (double)RAND_MAX ;
+ grn_position[0][0] = (double)rand() / (double)RAND_MAX ;
+ grn_position[0][1] = (double)rand() / (double)RAND_MAX ;
+ grn_position[0][2] = (double)rand() / (double)RAND_MAX ;
+ array_index = 0 ;
+ /* Initialize the arrays */
+ for ( i = 1; i < NUM_POINTS; i++ )
+ {
+ memcpy ( red_position[i], red_position[0], 3 * sizeof(double) ) ;
+ memcpy ( grn_position[i], grn_position[0], 3 * sizeof(double) ) ;
+ }
+
+ break ;
+
+ case 'm' : case 'M' : /* Modify the Lorenz parameters */
+ printf ( "Please enter new value for <sigma> (default %f, currently %f): ", s0, sigma ) ;
+ checkedFGets ( inputline, sizeof ( inputline ), stdin ) ;
+ sscanf ( inputline, "%lf", &sigma ) ;
+
+ printf ( "Please enter new value for <b> (default %f, currently %f): ", b0, b ) ;
+ checkedFGets ( inputline, sizeof ( inputline ), stdin ) ;
+ sscanf ( inputline, "%lf", &b ) ;
+
+ printf ( "Please enter new value for <r> (default %f, currently %f): ", r0, r ) ;
+ checkedFGets ( inputline, sizeof ( inputline ), stdin ) ;
+ sscanf ( inputline, "%lf", &r ) ;
+
+ break ;
+
+ case 's' : case 'S' : /* Stop the animation */
+ animate = 0 ;
+ break ;
+
+ case 'g' : case 'G' : /* Start the animation */
+ animate = 1 ;
+ break ;
+
+ case ' ' : /* Spacebar: Single step */
+ animate = 2 ;
+ break ;
+
+ case 27 : /* Escape key */
+ glutLeaveMainLoop () ;
+ break ;
+ }
+}
+
+void special_cb ( int key, int x, int y )
+{
+ switch ( key )
+ {
+ case GLUT_KEY_UP : /* Rotate up a little */
+ glRotated ( ROTATION_ANGLE, 0.0, 1.0, 0.0 ) ;
+ break ;
+
+ case GLUT_KEY_DOWN : /* Rotate down a little */
+ glRotated ( -ROTATION_ANGLE, 0.0, 1.0, 0.0 ) ;
+ break ;
+
+ case GLUT_KEY_LEFT : /* Rotate left a little */
+ glRotated ( ROTATION_ANGLE, 0.0, 0.0, 1.0 ) ;
+ break ;
+
+ case GLUT_KEY_RIGHT : /* Rotate right a little */
+ glRotated ( -ROTATION_ANGLE, 0.0, 0.0, 1.0 ) ;
+ break ;
+
+ case GLUT_KEY_PAGE_UP : /* Zoom in a little */
+ glScaled ( 1.0 / SCALE_FACTOR, 1.0 / SCALE_FACTOR, 1.0 / SCALE_FACTOR ) ;
+ break ;
+
+ case GLUT_KEY_PAGE_DOWN : /* Zoom out a little */
+ glScaled ( SCALE_FACTOR, SCALE_FACTOR, SCALE_FACTOR ) ;
+ break ;
+ }
+
+ glutPostRedisplay () ;
+}
+
+void mouse_cb ( int button, int updown, int x, int y )
+{
+ if ( updown == GLUT_DOWN )
+ {
+ double dist = 1.0e20 ; /* A very large number */
+ dist = 0.0 ; /* so we don't get "unused variable" compiler warning */
+ /* The idea here is that we go into "pick" mode and pick the nearest point
+ to the mouse click position. Unfortunately I don't have the time to implement
+ it at the moment. */
+ }
+}
+
+void draw_curve ( int index, double position [ NUM_POINTS ][3] )
+{
+ int i = index ;
+
+ glBegin ( GL_LINE_STRIP ) ;
+ do
+ {
+ i = ( i == NUM_POINTS-1 ) ? 0 : i + 1 ;
+ glVertex3dv ( position[i] ) ;
+ }
+ while ( i != index ) ;
+
+ glEnd () ;
+}
+
+void bitmapPrintf (const char *fmt, ...)
+{
+ static char buf[256];
+ va_list args;
+
+ va_start(args, fmt);
+#if defined(WIN32) && !defined(__CYGWIN__)
+ (void) _vsnprintf (buf, sizeof(buf), fmt, args);
+#else
+ (void) vsnprintf (buf, sizeof(buf), fmt, args);
+#endif
+ va_end(args);
+ glutBitmapString ( GLUT_BITMAP_HELVETICA_12, (unsigned char*)buf ) ;
+}
+
+void display_cb ( void )
+{
+ glClear ( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ) ;
+
+ glColor3d ( 1.0, 1.0, 1.0 ) ; /* White */
+ /* Draw some axes */
+ glBegin ( GL_LINES ) ;
+ glVertex3d ( 0.0, 0.0, 0.0 ) ;
+ glVertex3d ( 2.0, 0.0, 0.0 ) ;
+ glVertex3d ( 0.0, 0.0, 0.0 ) ;
+ glVertex3d ( 0.0, 1.0, 0.0 ) ;
+ glVertex3d ( 0.0, 0.0, 0.0 ) ;
+ glVertex3d ( 0.0, 0.0, 1.0 ) ;
+ glEnd () ;
+
+ glColor3d ( 1.0, 0.0, 0.0 ) ; /* Red */
+ draw_curve ( array_index, red_position ) ;
+
+ glColor3d ( 0.0, 1.0, 0.0 ) ; /* Green */
+ draw_curve ( array_index, grn_position ) ;
+
+ /* Print the distance between the two points */
+ glColor3d ( 1.0, 1.0, 1.0 ) ; /* White */
+ glRasterPos2i ( 1, 1 ) ;
+ bitmapPrintf ( "Distance: %10.6f", distance ) ;
+
+ glutSwapBuffers();
+}
+
+void reshape_cb ( int width, int height )
+{
+ float ar;
+ glViewport ( 0, 0, width, height ) ;
+ glMatrixMode ( GL_PROJECTION ) ;
+ glLoadIdentity () ;
+ ar = (float) width / (float) height ;
+ glFrustum ( -ar, ar, -1.0, 1.0, 10.0, 100.0 ) ;
+ glMatrixMode ( GL_MODELVIEW ) ;
+ glLoadIdentity () ;
+ xcen = 0.0 ;
+ ycen = 0.0 ;
+ zcen = 0.0 ;
+ glTranslated ( xcen, ycen, zcen - 50.0 ) ;
+}
+
+
+void timer_cb ( int value )
+{
+ /* Function called at regular intervals to update the positions of the points */
+ double deltax, deltay, deltaz ;
+ int new_index = array_index + 1 ;
+
+ /* Set the next timed callback */
+ glutTimerFunc ( 30, timer_cb, 0 ) ;
+
+ if ( animate > 0 )
+ {
+ if ( new_index == NUM_POINTS ) new_index = 0 ;
+ advance_in_time ( time_step, red_position[array_index], red_position[new_index] ) ;
+ advance_in_time ( time_step, grn_position[array_index], grn_position[new_index] ) ;
+ array_index = new_index ;
+
+ deltax = red_position[array_index][0] - grn_position[array_index][0] ;
+ deltay = red_position[array_index][1] - grn_position[array_index][1] ;
+ deltaz = red_position[array_index][2] - grn_position[array_index][2] ;
+ distance = sqrt ( deltax * deltax + deltay * deltay + deltaz * deltaz ) ;
+
+ if ( animate == 2 ) animate = 0 ;
+ }
+
+ glutPostRedisplay () ;
+}
+
+
+
+/* The Main Program */
+
+int main ( int argc, char *argv[] )
+{
+ int pargc = argc ;
+
+ /* Initialize the random number generator */
+ srand ( 1023 ) ;
+
+ /* Set up the OpenGL parameters */
+ glEnable ( GL_DEPTH_TEST ) ;
+ glClearColor ( 0.0, 0.0, 0.0, 0.0 ) ;
+ glClearDepth ( 1.0 ) ;
+
+ /* Initialize GLUT */
+ glutInitWindowSize ( 600, 600 ) ;
+ glutInit ( &pargc, argv ) ;
+ glutInitDisplayMode ( GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH ) ;
+
+ /* Create the window */
+ glutCreateWindow ( "Lorenz Attractor" ) ;
+ glutKeyboardFunc ( key_cb ) ;
+ glutMouseFunc ( mouse_cb ) ;
+ glutSpecialFunc ( special_cb ) ;
+ glutDisplayFunc ( display_cb ) ;
+ glutReshapeFunc ( reshape_cb ) ;
+ glutTimerFunc ( 30, timer_cb, 0 ) ;
+
+ /* Initialize the attractor: The easiest way is to call the keyboard callback with an
+ * argument of 'r' for Reset.
+ */
+ key_cb ( 'r', 0, 0 ) ;
+
+ /* Enter the GLUT main loop */
+ glutMainLoop () ;
+
+#ifdef _MSC_VER
+ /* DUMP MEMORY LEAK INFORMATION */
+ _CrtDumpMemoryLeaks () ;
+#endif
+
+ return 0 ;
+}
+
diff --git a/SixenseSDK/src/sixense_simple3d/progs/demos/Lorenz/lorenz.dsp b/SixenseSDK/src/sixense_simple3d/progs/demos/Lorenz/lorenz.dsp
new file mode 100755
index 0000000..9b40406
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/progs/demos/Lorenz/lorenz.dsp
@@ -0,0 +1,102 @@
+# Microsoft Developer Studio Project File - Name="lorenz" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=lorenz - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "lorenz.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "lorenz.mak" CFG="lorenz - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "lorenz - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "lorenz - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "lorenz - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../../include" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /libpath:"../../../Release"
+
+!ELSEIF "$(CFG)" == "lorenz - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"../../../Debug"
+
+!ENDIF
+
+# Begin Target
+
+# Name "lorenz - Win32 Release"
+# Name "lorenz - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\lorenz.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/SixenseSDK/src/sixense_simple3d/progs/demos/Lorenz/lorenzStatic.dsp b/SixenseSDK/src/sixense_simple3d/progs/demos/Lorenz/lorenzStatic.dsp
new file mode 100755
index 0000000..0e6a80b
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/progs/demos/Lorenz/lorenzStatic.dsp
@@ -0,0 +1,100 @@
+# Microsoft Developer Studio Project File - Name="lorenzStatic" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=lorenzStatic - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "lorenzStatic.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "lorenzStatic.mak" CFG="lorenzStatic - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "lorenzStatic - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "lorenzStatic - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "lorenzStatic - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "lorenzStatic___Win32_Release"
+# PROP BASE Intermediate_Dir "lorenzStatic___Win32_Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "ReleaseStatic"
+# PROP Intermediate_Dir "ReleaseStatic"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../../include" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "FREEGLUT_STATIC" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /libpath:"../../../ReleaseStatic"
+
+!ELSEIF "$(CFG)" == "lorenzStatic - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "lorenzStatic___Win32_Debug"
+# PROP BASE Intermediate_Dir "lorenzStatic___Win32_Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "DebugStatic"
+# PROP Intermediate_Dir "DebugStatic"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "FREEGLUT_STATIC" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"../../../DebugStatic"
+
+!ENDIF
+
+# Begin Target
+
+# Name "lorenzStatic - Win32 Release"
+# Name "lorenzStatic - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\lorenz.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/SixenseSDK/src/sixense_simple3d/progs/demos/Makefile.am b/SixenseSDK/src/sixense_simple3d/progs/demos/Makefile.am
new file mode 100755
index 0000000..31c1739
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/progs/demos/Makefile.am
@@ -0,0 +1,2 @@
+EXTRA_DIST = demos.dsw
+SUBDIRS = CallbackMaker Fractals Fractals_random Lorenz One shapes smooth_opengl3 spaceball
diff --git a/SixenseSDK/src/sixense_simple3d/progs/demos/Makefile.in b/SixenseSDK/src/sixense_simple3d/progs/demos/Makefile.in
new file mode 100755
index 0000000..7793255
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/progs/demos/Makefile.in
@@ -0,0 +1,496 @@
+# Makefile.in generated by automake 1.10.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = progs/demos
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-dvi-recursive install-exec-recursive \
+ install-html-recursive install-info-recursive \
+ install-pdf-recursive install-ps-recursive install-recursive \
+ installcheck-recursive installdirs-recursive pdf-recursive \
+ ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXPORT_FLAGS = @EXPORT_FLAGS@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+GL_LIBS = @GL_LIBS@
+GREP = @GREP@
+HEADER = @HEADER@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBRARY = @LIBRARY@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIBXI = @LIBXI@
+LIBXXF86VM = @LIBXXF86VM@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NMEDIT = @NMEDIT@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+VERSION_INFO = @VERSION_INFO@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXTRA_DIST = demos.dsw
+SUBDIRS = CallbackMaker Fractals Fractals_random Lorenz One shapes smooth_opengl3 spaceball
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu progs/demos/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu progs/demos/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+# (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+ @failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+ @failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique; \
+ fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+ list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ distdir=`$(am__cd) $(distdir) && pwd`; \
+ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+ (cd $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$top_distdir" \
+ distdir="$$distdir/$$subdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-info: install-info-recursive
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-ps: install-ps-recursive
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \
+ install-strip
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+ all all-am check check-am clean clean-generic clean-libtool \
+ ctags ctags-recursive distclean distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs installdirs-am maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
+ uninstall uninstall-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/SixenseSDK/src/sixense_simple3d/progs/demos/One/Makefile.am b/SixenseSDK/src/sixense_simple3d/progs/demos/One/Makefile.am
new file mode 100755
index 0000000..7f5906c
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/progs/demos/One/Makefile.am
@@ -0,0 +1,5 @@
+EXTRA_DIST = one.c one.dsp
+noinst_PROGRAMS = one
+one_SOURCES = one.c
+one_LDFLAGS = -export-dynamic ../../../src/lib@LIBRARY@.la
+one_CFLAGS = -I$(top_srcdir)/include $(X_CFLAGS)
diff --git a/SixenseSDK/src/sixense_simple3d/progs/demos/One/Makefile.in b/SixenseSDK/src/sixense_simple3d/progs/demos/One/Makefile.in
new file mode 100755
index 0000000..9519fc1
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/progs/demos/One/Makefile.in
@@ -0,0 +1,465 @@
+# Makefile.in generated by automake 1.10.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = one$(EXEEXT)
+subdir = progs/demos/One
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_one_OBJECTS = one-one.$(OBJEXT)
+one_OBJECTS = $(am_one_OBJECTS)
+one_LDADD = $(LDADD)
+one_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(one_CFLAGS) $(CFLAGS) $(one_LDFLAGS) \
+ $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(one_SOURCES)
+DIST_SOURCES = $(one_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXPORT_FLAGS = @EXPORT_FLAGS@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+GL_LIBS = @GL_LIBS@
+GREP = @GREP@
+HEADER = @HEADER@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBRARY = @LIBRARY@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIBXI = @LIBXI@
+LIBXXF86VM = @LIBXXF86VM@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NMEDIT = @NMEDIT@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+VERSION_INFO = @VERSION_INFO@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXTRA_DIST = one.c one.dsp
+one_SOURCES = one.c
+one_LDFLAGS = -export-dynamic ../../../src/lib@LIBRARY@.la
+one_CFLAGS = -I$(top_srcdir)/include $(X_CFLAGS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu progs/demos/One/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu progs/demos/One/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+clean-noinstPROGRAMS:
+ @list='$(noinst_PROGRAMS)'; for p in $$list; do \
+ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f $$p $$f"; \
+ rm -f $$p $$f ; \
+ done
+one$(EXEEXT): $(one_OBJECTS) $(one_DEPENDENCIES)
+ @rm -f one$(EXEEXT)
+ $(one_LINK) $(one_OBJECTS) $(one_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/one-one.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+one-one.o: one.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(one_CFLAGS) $(CFLAGS) -MT one-one.o -MD -MP -MF $(DEPDIR)/one-one.Tpo -c -o one-one.o `test -f 'one.c' || echo '$(srcdir)/'`one.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/one-one.Tpo $(DEPDIR)/one-one.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='one.c' object='one-one.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(one_CFLAGS) $(CFLAGS) -c -o one-one.o `test -f 'one.c' || echo '$(srcdir)/'`one.c
+
+one-one.obj: one.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(one_CFLAGS) $(CFLAGS) -MT one-one.obj -MD -MP -MF $(DEPDIR)/one-one.Tpo -c -o one-one.obj `if test -f 'one.c'; then $(CYGPATH_W) 'one.c'; else $(CYGPATH_W) '$(srcdir)/one.c'; fi`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/one-one.Tpo $(DEPDIR)/one-one.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='one.c' object='one-one.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(one_CFLAGS) $(CFLAGS) -c -o one-one.obj `if test -f 'one.c'; then $(CYGPATH_W) 'one.c'; else $(CYGPATH_W) '$(srcdir)/one.c'; fi`
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstPROGRAMS ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/SixenseSDK/src/sixense_simple3d/progs/demos/One/one.c b/SixenseSDK/src/sixense_simple3d/progs/demos/One/one.c
new file mode 100755
index 0000000..c0f3017
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/progs/demos/One/one.c
@@ -0,0 +1,331 @@
+/*
+ * one.c
+ *
+ * Hey! This was the original file where freeglut development started. Just
+ * note what I have written here at the time. And see the creation date :)
+ *
+ * : This is a wrapper. I still have to figure out
+ * : how to build shared libraries under *nix :)
+ *
+ * Copyright (c) 1999 by Pawel W. Olszta
+ * Written by Pawel W. Olszta, <olszta@sourceforge.net>
+ * Creation date: czw gru 2 11:58:41 CET 1999
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <GL/freeglut.h>
+
+int g_LeaveGameMode = 0;
+int g_InGameMode = 1;
+
+/*
+ * Call this function to have some text drawn at given coordinates
+ */
+void PrintText( int nX, int nY, char* pszText )
+{
+ int lines;
+ char *p;
+
+ /*
+ * Prepare the OpenGL state
+ */
+ glDisable( GL_LIGHTING );
+ glDisable( GL_DEPTH_TEST );
+ glMatrixMode( GL_PROJECTION );
+ glPushMatrix();
+ glLoadIdentity();
+
+ /*
+ * Have an orthogonal projection matrix set
+ */
+ glOrtho( 0, glutGet( GLUT_WINDOW_WIDTH ),
+ 0, glutGet( GLUT_WINDOW_HEIGHT ),
+ -1, +1
+ );
+
+ /*
+ * Now the matrix mode
+ */
+ glMatrixMode( GL_MODELVIEW );
+ glPushMatrix();
+ glLoadIdentity();
+
+ /*
+ * Now the main text
+ */
+ glColor3ub( 0, 0, 0 );
+ glRasterPos2i( nX, nY );
+
+ for( p=pszText, lines=0; *p; p++ )
+ {
+ if( *p == '\n' )
+ {
+ lines++;
+ glRasterPos2i( nX, nY-(lines*18) );
+ }
+
+ glutBitmapCharacter( GLUT_BITMAP_HELVETICA_18, *p );
+ }
+
+ /*
+ * Revert to the old matrix modes
+ */
+ glMatrixMode( GL_PROJECTION );
+ glPopMatrix();
+
+ glMatrixMode( GL_MODELVIEW );
+ glPopMatrix();
+
+ /*
+ * Restore the old OpenGL states
+ */
+ glColor4f( 1.0f, 1.0f, 1.0f, 1.0f );
+ glEnable( GL_DEPTH_TEST );
+ glEnable( GL_LIGHTING );
+}
+
+/*
+ * This is the display routine for our sample FreeGLUT windows
+ */
+static float g_fTime = 0.0f;
+
+void SampleDisplay( void )
+{
+ /*
+ * Clear the screen
+ */
+ glClearColor( 0, 0.5, 1, 1 );
+ glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
+
+ /*
+ * Have the cube rotated
+ */
+ glMatrixMode( GL_MODELVIEW );
+ glPushMatrix();
+
+ glRotatef( g_fTime, 0, 0, 1 );
+ glRotatef( g_fTime, 0, 1, 0 );
+ glRotatef( g_fTime, 1, 0, 0 );
+
+ /*
+ * And then drawn...
+ */
+ glColor3f( 1, 1, 0 );
+ /* glutWireCube( 20.0 ); */
+ glutWireTeapot( 20.0 );
+ /* glutWireSpher( 15.0, 15, 15 ); */
+ /* glColor3f( 0, 1, 0 ); */
+ /* glutWireCube( 30.0 ); */
+ /* glutSolidCone( 10, 20, 10, 2 ); */
+
+ /*
+ * Don't forget about the model-view matrix
+ */
+ glPopMatrix( );
+
+ /*
+ * Draw a silly text
+ */
+ if( g_InGameMode == 0 )
+ PrintText( 20, 20, "Hello there cruel world!" );
+ else
+ PrintText( 20, 20, "Press ESC to leave the game mode!" );
+
+ /*
+ * And swap this context's buffers
+ */
+ glutSwapBuffers( );
+}
+
+/*
+ * This is a sample idle function
+ */
+void SampleIdle( void )
+{
+ g_fTime += 0.5f;
+
+ if( g_LeaveGameMode == 1 )
+ {
+ glutLeaveGameMode( );
+ g_LeaveGameMode = 0;
+ g_InGameMode = 0;
+ }
+}
+
+/*
+ * The reshape function
+ */
+void SampleReshape( int nWidth, int nHeight )
+{
+ GLfloat fAspect = (GLfloat) nHeight / (GLfloat) nWidth;
+ GLfloat fPos[ 4 ] = { 0.0f, 0.0f, 10.0f, 0.0f };
+ GLfloat fCol[ 4 ] = { 0.5f, 1.0f, 0.0f, 1.0f };
+
+ /*
+ * Update the viewport first
+ */
+ glViewport( 0, 0, nWidth, nHeight );
+
+ /*
+ * Then the projection matrix
+ */
+ glMatrixMode( GL_PROJECTION );
+ glLoadIdentity();
+ glFrustum( -1.0, 1.0, -fAspect, fAspect, 1.0, 80.0 );
+
+ /*
+ * Move back the camera a bit
+ */
+ glMatrixMode( GL_MODELVIEW );
+ glLoadIdentity( );
+ glTranslatef( 0.0, 0.0, -40.0f );
+
+ /*
+ * Enable some features...
+ */
+ glEnable( GL_CULL_FACE );
+ glEnable( GL_DEPTH_TEST );
+ glEnable( GL_NORMALIZE );
+
+ /*
+ * Set up some lighting
+ */
+ glLightfv( GL_LIGHT0, GL_POSITION, fPos );
+ glEnable( GL_LIGHTING );
+ glEnable( GL_LIGHT0 );
+
+ /*
+ * Set up a sample material
+ */
+ glMaterialfv( GL_FRONT, GL_AMBIENT_AND_DIFFUSE, fCol );
+}
+
+/*
+ * A sample keyboard callback
+ */
+void SampleKeyboard( unsigned char cChar, int nMouseX, int nMouseY )
+{
+ printf( "SampleKeyboard(): keypress '%c' at (%i,%i)\n",
+ cChar, nMouseX, nMouseY );
+}
+
+/*
+ * A sample keyboard callback (for game mode window)
+ */
+void SampleGameModeKeyboard( unsigned char cChar, int nMouseX, int nMouseY )
+{
+ if( cChar == 27 )
+ g_LeaveGameMode = 1;
+}
+
+
+/*
+ * A sample special callback
+ */
+void SampleSpecial( int nSpecial, int nMouseX, int nMouseY )
+{
+ printf( "SampleSpecial(): special keypress %i at (%i,%i)\n",
+ nSpecial, nMouseX, nMouseY );
+}
+
+/*
+ * A sample menu callback
+ */
+void SampleMenu( int menuID )
+{
+ /*
+ * Just print something funny
+ */
+ printf( "SampleMenu() callback executed, menuID is %i\n", menuID );
+}
+
+/*
+ * The sample's entry point
+ */
+int main( int argc, char** argv )
+{
+ int menuID, subMenuA, subMenuB;
+
+ glutInitDisplayString( "stencil~2 rgb double depth>=16 samples" );
+ glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH );
+ glutInitWindowPosition( 100, 100 );
+
+ glutInit( &argc, argv );
+
+ subMenuA = glutCreateMenu( SampleMenu );
+ glutAddMenuEntry( "Sub menu A1 (01)", 1 );
+ glutAddMenuEntry( "Sub menu A2 (02)", 2 );
+ glutAddMenuEntry( "Sub menu A3 (03)", 3 );
+
+ subMenuB = glutCreateMenu( SampleMenu );
+ glutAddMenuEntry( "Sub menu B1 (04)", 4 );
+ glutAddMenuEntry( "Sub menu B2 (05)", 5 );
+ glutAddMenuEntry( "Sub menu B3 (06)", 6 );
+ glutAddSubMenu( "Going to sub menu A", subMenuA );
+
+ menuID = glutCreateMenu( SampleMenu );
+ glutAddMenuEntry( "Entry one", 1 );
+ glutAddMenuEntry( "Entry two", 2 );
+ glutAddMenuEntry( "Entry three", 3 );
+ glutAddMenuEntry( "Entry four", 4 );
+ glutAddMenuEntry( "Entry five", 5 );
+ glutAddSubMenu( "Enter sub menu A", subMenuA );
+ glutAddSubMenu( "Enter sub menu B", subMenuB );
+
+ glutCreateWindow( "Hello world!" );
+ glutDisplayFunc( SampleDisplay );
+ glutReshapeFunc( SampleReshape );
+ glutKeyboardFunc( SampleKeyboard );
+ glutSpecialFunc( SampleSpecial );
+ glutIdleFunc( SampleIdle );
+ glutAttachMenu( GLUT_LEFT_BUTTON );
+
+ glutInitWindowPosition( 200, 200 );
+ glutCreateWindow( "I am not Jan B." );
+ glutDisplayFunc( SampleDisplay );
+ glutReshapeFunc( SampleReshape );
+ glutKeyboardFunc( SampleKeyboard );
+ glutSpecialFunc( SampleSpecial );
+ glutIdleFunc( SampleIdle );
+ glutAttachMenu( GLUT_LEFT_BUTTON );
+
+ printf( "Testing game mode string parsing, don't panic!\n" );
+ glutGameModeString( "320x240:32@100" );
+ glutGameModeString( "640x480:16@72" );
+ glutGameModeString( "1024x768" );
+ glutGameModeString( ":32@120" );
+ glutGameModeString( "Toudi glupcze, Danwin bedzie moj!" );
+ glutGameModeString( "640x480:16@72" );
+
+ glutEnterGameMode();
+ glutDisplayFunc( SampleDisplay );
+ glutReshapeFunc( SampleReshape );
+ glutKeyboardFunc( SampleGameModeKeyboard );
+ glutIdleFunc( SampleIdle );
+ glutAttachMenu( GLUT_LEFT_BUTTON );
+
+ printf( "current window is %ix%i+%i+%i",
+ glutGet( GLUT_WINDOW_X ), glutGet( GLUT_WINDOW_Y ),
+ glutGet( GLUT_WINDOW_WIDTH ), glutGet( GLUT_WINDOW_HEIGHT )
+ );
+
+ /*
+ * Enter the main FreeGLUT processing loop
+ */
+ glutMainLoop();
+
+ printf( "glutMainLoop() termination works fine!\n" );
+
+ /*
+ * This is never reached in FreeGLUT. Is that good?
+ */
+ return EXIT_SUCCESS;
+}
+
+/*** END OF FILE ***/
diff --git a/SixenseSDK/src/sixense_simple3d/progs/demos/One/one.dsp b/SixenseSDK/src/sixense_simple3d/progs/demos/One/one.dsp
new file mode 100755
index 0000000..a89e034
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/progs/demos/One/one.dsp
@@ -0,0 +1,100 @@
+# Microsoft Developer Studio Project File - Name="one" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=one - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "one.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "one.mak" CFG="one - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "one - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "one - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "one - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../../include" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /libpath:"../../../Release"
+
+!ELSEIF "$(CFG)" == "one - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"../../../Debug"
+
+!ENDIF
+
+# Begin Target
+
+# Name "one - Win32 Release"
+# Name "one - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\one.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/SixenseSDK/src/sixense_simple3d/progs/demos/One/oneStatic.dsp b/SixenseSDK/src/sixense_simple3d/progs/demos/One/oneStatic.dsp
new file mode 100755
index 0000000..e582281
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/progs/demos/One/oneStatic.dsp
@@ -0,0 +1,100 @@
+# Microsoft Developer Studio Project File - Name="oneStatic" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=oneStatic - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "oneStatic.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "oneStatic.mak" CFG="oneStatic - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "oneStatic - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "oneStatic - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "oneStatic - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "oneStatic___Win32_Release"
+# PROP BASE Intermediate_Dir "oneStatic___Win32_Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "ReleaseStatic"
+# PROP Intermediate_Dir "ReleaseStatic"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../../include" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "FREEGLUT_STATIC" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /libpath:"../../../ReleaseStatic"
+
+!ELSEIF "$(CFG)" == "oneStatic - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "oneStatic___Win32_Debug"
+# PROP BASE Intermediate_Dir "oneStatic___Win32_Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "DebugStatic"
+# PROP Intermediate_Dir "DebugStatic"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "FREEGLUT_STATIC" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"../../../DebugStatic"
+
+!ENDIF
+
+# Begin Target
+
+# Name "oneStatic - Win32 Release"
+# Name "oneStatic - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\one.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/SixenseSDK/src/sixense_simple3d/progs/demos/demos.dsw b/SixenseSDK/src/sixense_simple3d/progs/demos/demos.dsw
new file mode 100755
index 0000000..52b9eee
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/progs/demos/demos.dsw
@@ -0,0 +1,197 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "CallbackMaker"=.\CallbackMaker\CallbackMaker.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "CallbackMakerStatic"=.\CallbackMaker\CallbackMakerStatic.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "Fractals"=.\Fractals\Fractals.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "FractalsStatic"=.\Fractals\FractalsStatic.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "Fractals_random"=.\Fractals_random\Fractals_random.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "Fractals_randomStatic"=.\Fractals_random\Fractals_randomStatic.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "lorenz"=.\Lorenz\lorenz.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "lorenzStatic"=.\lorenz\lorenzStatic.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "one"=.\One\one.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "oneStatic"=.\one\oneStatic.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "shapes"=.\shapes\shapes.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "shapesStatic"=.\shapes\shapesStatic.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "smooth_opengl3"=.\smooth_opengl3\smooth_opengl3.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "spaceball"=.\spaceball\spaceball.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "spaceball_static"=.\spaceball\spaceball_static.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/SixenseSDK/src/sixense_simple3d/progs/demos/shapes/Makefile.am b/SixenseSDK/src/sixense_simple3d/progs/demos/shapes/Makefile.am
new file mode 100755
index 0000000..f44415c
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/progs/demos/shapes/Makefile.am
@@ -0,0 +1,5 @@
+EXTRA_DIST = shapes.c shapes.dsp
+noinst_PROGRAMS = shapes
+shapes_SOURCES = shapes.c
+shapes_LDFLAGS = -export-dynamic ../../../src/lib@LIBRARY@.la
+shapes_CFLAGS = -I$(top_srcdir)/include $(X_CFLAGS)
diff --git a/SixenseSDK/src/sixense_simple3d/progs/demos/shapes/Makefile.in b/SixenseSDK/src/sixense_simple3d/progs/demos/shapes/Makefile.in
new file mode 100755
index 0000000..59a6ce5
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/progs/demos/shapes/Makefile.in
@@ -0,0 +1,465 @@
+# Makefile.in generated by automake 1.10.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = shapes$(EXEEXT)
+subdir = progs/demos/shapes
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_shapes_OBJECTS = shapes-shapes.$(OBJEXT)
+shapes_OBJECTS = $(am_shapes_OBJECTS)
+shapes_LDADD = $(LDADD)
+shapes_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(shapes_CFLAGS) $(CFLAGS) \
+ $(shapes_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(shapes_SOURCES)
+DIST_SOURCES = $(shapes_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXPORT_FLAGS = @EXPORT_FLAGS@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+GL_LIBS = @GL_LIBS@
+GREP = @GREP@
+HEADER = @HEADER@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBRARY = @LIBRARY@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIBXI = @LIBXI@
+LIBXXF86VM = @LIBXXF86VM@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NMEDIT = @NMEDIT@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+VERSION_INFO = @VERSION_INFO@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXTRA_DIST = shapes.c shapes.dsp
+shapes_SOURCES = shapes.c
+shapes_LDFLAGS = -export-dynamic ../../../src/lib@LIBRARY@.la
+shapes_CFLAGS = -I$(top_srcdir)/include $(X_CFLAGS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu progs/demos/shapes/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu progs/demos/shapes/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+clean-noinstPROGRAMS:
+ @list='$(noinst_PROGRAMS)'; for p in $$list; do \
+ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f $$p $$f"; \
+ rm -f $$p $$f ; \
+ done
+shapes$(EXEEXT): $(shapes_OBJECTS) $(shapes_DEPENDENCIES)
+ @rm -f shapes$(EXEEXT)
+ $(shapes_LINK) $(shapes_OBJECTS) $(shapes_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/shapes-shapes.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+shapes-shapes.o: shapes.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(shapes_CFLAGS) $(CFLAGS) -MT shapes-shapes.o -MD -MP -MF $(DEPDIR)/shapes-shapes.Tpo -c -o shapes-shapes.o `test -f 'shapes.c' || echo '$(srcdir)/'`shapes.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/shapes-shapes.Tpo $(DEPDIR)/shapes-shapes.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='shapes.c' object='shapes-shapes.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(shapes_CFLAGS) $(CFLAGS) -c -o shapes-shapes.o `test -f 'shapes.c' || echo '$(srcdir)/'`shapes.c
+
+shapes-shapes.obj: shapes.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(shapes_CFLAGS) $(CFLAGS) -MT shapes-shapes.obj -MD -MP -MF $(DEPDIR)/shapes-shapes.Tpo -c -o shapes-shapes.obj `if test -f 'shapes.c'; then $(CYGPATH_W) 'shapes.c'; else $(CYGPATH_W) '$(srcdir)/shapes.c'; fi`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/shapes-shapes.Tpo $(DEPDIR)/shapes-shapes.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='shapes.c' object='shapes-shapes.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(shapes_CFLAGS) $(CFLAGS) -c -o shapes-shapes.obj `if test -f 'shapes.c'; then $(CYGPATH_W) 'shapes.c'; else $(CYGPATH_W) '$(srcdir)/shapes.c'; fi`
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstPROGRAMS ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/SixenseSDK/src/sixense_simple3d/progs/demos/shapes/shapes.c b/SixenseSDK/src/sixense_simple3d/progs/demos/shapes/shapes.c
new file mode 100755
index 0000000..da32e0b
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/progs/demos/shapes/shapes.c
@@ -0,0 +1,408 @@
+/*! \file shapes.c
+ \ingroup demos
+
+ This program is a test harness for the various shapes
+ in OpenGLUT. It may also be useful to see which
+ parameters control what behavior in the OpenGLUT
+ objects.
+
+ Spinning wireframe and solid-shaded shapes are
+ displayed. Some parameters can be adjusted.
+
+ Keys:
+ - <tt>Esc &nbsp;</tt> Quit
+ - <tt>q Q &nbsp;</tt> Quit
+ - <tt>i I &nbsp;</tt> Show info
+ - <tt>= + &nbsp;</tt> Increase \a slices
+ - <tt>- _ &nbsp;</tt> Decreate \a slices
+ - <tt>, < &nbsp;</tt> Decreate \a stacks
+ - <tt>. > &nbsp;</tt> Increase \a stacks
+ - <tt>9 ( &nbsp;</tt> Decreate \a depth (Sierpinski Sponge)
+ - <tt>0 ) &nbsp;</tt> Increase \a depth (Sierpinski Sponge)
+ - <tt>up&nbsp; &nbsp;</tt> Increase "outer radius"
+ - <tt>down&nbsp;</tt> Decrease "outer radius"
+ - <tt>left&nbsp;</tt> Decrease "inner radius"
+ - <tt>right</tt> Increase "inner radius"
+ - <tt>PgUp&nbsp;</tt> Next shape-drawing function
+ - <tt>PgDn&nbsp;</tt> Prev shape-drawing function
+
+ \author Written by Nigel Stewart November 2003
+
+ \author Portions Copyright (C) 2004, the OpenGLUT project contributors. <br>
+ OpenGLUT branched from freeglut in February, 2004.
+
+ \image html openglut_shapes.png OpenGLUT Geometric Shapes Demonstration
+ \include demos/shapes/shapes.c
+*/
+
+#include <GL/freeglut.h>
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#ifdef _MSC_VER
+/* DUMP MEMORY LEAKS */
+#include <crtdbg.h>
+#endif
+
+/*
+ * This macro is only intended to be used on arrays, of course.
+ */
+#define NUMBEROF(x) ((sizeof(x))/(sizeof(x[0])))
+
+/*
+ * These global variables control which object is drawn,
+ * and how it is drawn. No object uses all of these
+ * variables.
+ */
+static int function_index;
+static int slices = 16;
+static int stacks = 16;
+static double irad = .25;
+static double orad = 1.0;
+static int depth = 4;
+static double offset[ 3 ] = { 0, 0, 0 };
+static GLboolean show_info = GL_TRUE;
+
+/*
+ * These one-liners draw particular objects, fetching appropriate
+ * information from the above globals. They are just thin wrappers
+ * for the OpenGLUT objects.
+ */
+static void drawSolidTetrahedron(void) { glutSolidTetrahedron (); }
+static void drawWireTetrahedron(void) { glutWireTetrahedron (); }
+static void drawSolidCube(void) { glutSolidCube(1); }
+static void drawWireCube(void) { glutWireCube(1); }
+static void drawSolidOctahedron(void) { glutSolidOctahedron (); }
+static void drawWireOctahedron(void) { glutWireOctahedron (); }
+static void drawSolidDodecahedron(void) { glutSolidDodecahedron (); }
+static void drawWireDodecahedron(void) { glutWireDodecahedron (); }
+static void drawSolidRhombicDodecahedron(void) { glutSolidRhombicDodecahedron (); }
+static void drawWireRhombicDodecahedron(void) { glutWireRhombicDodecahedron (); }
+static void drawSolidIcosahedron(void) { glutSolidIcosahedron (); }
+static void drawWireIcosahedron(void) { glutWireIcosahedron (); }
+static void drawSolidSierpinskiSponge(void) { glutSolidSierpinskiSponge (depth, offset, 1); }
+static void drawWireSierpinskiSponge(void) { glutWireSierpinskiSponge (depth, offset, 1); }
+static void drawSolidTeapot(void) { glutSolidTeapot(1); }
+static void drawWireTeapot(void) { glutWireTeapot(1); }
+static void drawSolidTorus(void) { glutSolidTorus(irad,orad,slices,stacks); }
+static void drawWireTorus(void) { glutWireTorus (irad,orad,slices,stacks); }
+static void drawSolidSphere(void) { glutSolidSphere(1,slices,stacks); }
+static void drawWireSphere(void) { glutWireSphere(1,slices,stacks); }
+static void drawSolidCone(void) { glutSolidCone(1,1,slices,stacks); }
+static void drawWireCone(void) { glutWireCone(1,1,slices,stacks); }
+static void drawSolidCylinder(void) { glutSolidCylinder(1,1,slices,stacks); }
+static void drawWireCylinder(void) { glutWireCylinder(1,1,slices,stacks); }
+
+#define RADIUS 1.0f
+
+static void drawSolidCuboctahedron(void)
+{
+ glBegin( GL_TRIANGLES );
+ glNormal3d( 0.577350269189, 0.577350269189, 0.577350269189); glVertex3d( RADIUS, RADIUS, 0.0 ); glVertex3d( 0.0, RADIUS, RADIUS ); glVertex3d( RADIUS, 0.0, RADIUS );
+ glNormal3d( 0.577350269189, 0.577350269189,-0.577350269189); glVertex3d( RADIUS, RADIUS, 0.0 ); glVertex3d( RADIUS, 0.0,-RADIUS ); glVertex3d( 0.0, RADIUS,-RADIUS );
+ glNormal3d( 0.577350269189,-0.577350269189, 0.577350269189); glVertex3d( RADIUS,-RADIUS, 0.0 ); glVertex3d( RADIUS, 0.0, RADIUS ); glVertex3d( 0.0,-RADIUS, RADIUS );
+ glNormal3d( 0.577350269189,-0.577350269189,-0.577350269189); glVertex3d( RADIUS,-RADIUS, 0.0 ); glVertex3d( 0.0,-RADIUS,-RADIUS ); glVertex3d( RADIUS, 0.0,-RADIUS );
+ glNormal3d(-0.577350269189, 0.577350269189, 0.577350269189); glVertex3d(-RADIUS, RADIUS, 0.0 ); glVertex3d(-RADIUS, 0.0, RADIUS ); glVertex3d( 0.0, RADIUS, RADIUS );
+ glNormal3d(-0.577350269189, 0.577350269189,-0.577350269189); glVertex3d(-RADIUS, RADIUS, 0.0 ); glVertex3d( 0.0, RADIUS,-RADIUS ); glVertex3d(-RADIUS, 0.0,-RADIUS );
+ glNormal3d(-0.577350269189,-0.577350269189, 0.577350269189); glVertex3d(-RADIUS,-RADIUS, 0.0 ); glVertex3d( 0.0,-RADIUS, RADIUS ); glVertex3d(-RADIUS, 0.0, RADIUS );
+ glNormal3d(-0.577350269189,-0.577350269189,-0.577350269189); glVertex3d(-RADIUS,-RADIUS, 0.0 ); glVertex3d(-RADIUS, 0.0,-RADIUS ); glVertex3d( 0.0,-RADIUS,-RADIUS );
+ glEnd();
+
+ glBegin( GL_QUADS );
+ glNormal3d( 1.0, 0.0, 0.0 ); glVertex3d( RADIUS, RADIUS, 0.0 ); glVertex3d( RADIUS, 0.0, RADIUS ); glVertex3d( RADIUS,-RADIUS, 0.0 ); glVertex3d( RADIUS, 0.0,-RADIUS );
+ glNormal3d(-1.0, 0.0, 0.0 ); glVertex3d(-RADIUS, RADIUS, 0.0 ); glVertex3d(-RADIUS, 0.0,-RADIUS ); glVertex3d(-RADIUS,-RADIUS, 0.0 ); glVertex3d(-RADIUS, 0.0, RADIUS );
+ glNormal3d( 0.0, 1.0, 0.0 ); glVertex3d( RADIUS, RADIUS, 0.0 ); glVertex3d( 0.0, RADIUS,-RADIUS ); glVertex3d(-RADIUS, RADIUS, 0.0 ); glVertex3d( 0.0, RADIUS, RADIUS );
+ glNormal3d( 0.0,-1.0, 0.0 ); glVertex3d( RADIUS,-RADIUS, 0.0 ); glVertex3d( 0.0,-RADIUS, RADIUS ); glVertex3d(-RADIUS,-RADIUS, 0.0 ); glVertex3d( 0.0,-RADIUS,-RADIUS );
+ glNormal3d( 0.0, 0.0, 1.0 ); glVertex3d( RADIUS, 0.0, RADIUS ); glVertex3d( 0.0, RADIUS, RADIUS ); glVertex3d(-RADIUS, 0.0, RADIUS ); glVertex3d( 0.0,-RADIUS, RADIUS );
+ glNormal3d( 0.0, 0.0,-1.0 ); glVertex3d( RADIUS, 0.0,-RADIUS ); glVertex3d( 0.0,-RADIUS,-RADIUS ); glVertex3d(-RADIUS, 0.0,-RADIUS ); glVertex3d( 0.0, RADIUS,-RADIUS );
+ glEnd();
+}
+
+static void drawWireCuboctahedron(void)
+{
+ glBegin( GL_LINE_LOOP );
+ glNormal3d( 1.0, 0.0, 0.0 ); glVertex3d( RADIUS, RADIUS, 0.0 ); glVertex3d( RADIUS, 0.0, RADIUS ); glVertex3d( RADIUS,-RADIUS, 0.0 ); glVertex3d( RADIUS, 0.0,-RADIUS );
+ glEnd();
+ glBegin( GL_LINE_LOOP );
+ glNormal3d(-1.0, 0.0, 0.0 ); glVertex3d(-RADIUS, RADIUS, 0.0 ); glVertex3d(-RADIUS, 0.0,-RADIUS ); glVertex3d(-RADIUS,-RADIUS, 0.0 ); glVertex3d(-RADIUS, 0.0, RADIUS );
+ glEnd();
+ glBegin( GL_LINE_LOOP );
+ glNormal3d( 0.0, 1.0, 0.0 ); glVertex3d( RADIUS, RADIUS, 0.0 ); glVertex3d( 0.0, RADIUS,-RADIUS ); glVertex3d(-RADIUS, RADIUS, 0.0 ); glVertex3d( 0.0, RADIUS, RADIUS );
+ glEnd();
+ glBegin( GL_LINE_LOOP );
+ glNormal3d( 0.0,-1.0, 0.0 ); glVertex3d( RADIUS,-RADIUS, 0.0 ); glVertex3d( 0.0,-RADIUS, RADIUS ); glVertex3d(-RADIUS,-RADIUS, 0.0 ); glVertex3d( 0.0,-RADIUS,-RADIUS );
+ glEnd();
+ glBegin( GL_LINE_LOOP );
+ glNormal3d( 0.0, 0.0, 1.0 ); glVertex3d( RADIUS, 0.0, RADIUS ); glVertex3d( 0.0, RADIUS, RADIUS ); glVertex3d(-RADIUS, 0.0, RADIUS ); glVertex3d( 0.0,-RADIUS, RADIUS );
+ glEnd();
+ glBegin( GL_LINE_LOOP );
+ glNormal3d( 0.0, 0.0,-1.0 ); glVertex3d( RADIUS, 0.0,-RADIUS ); glVertex3d( 0.0,-RADIUS,-RADIUS ); glVertex3d(-RADIUS, 0.0,-RADIUS ); glVertex3d( 0.0, RADIUS,-RADIUS );
+ glEnd();
+}
+
+#undef RADIUS
+
+/*
+ * This structure defines an entry in our function-table.
+ */
+typedef struct
+{
+ const char * const name;
+ void (*solid) (void);
+ void (*wire) (void);
+} entry;
+
+#define ENTRY(e) {#e, drawSolid##e, drawWire##e}
+static const entry table [] =
+{
+ ENTRY (Tetrahedron),
+ ENTRY (Cube),
+ ENTRY (Octahedron),
+ ENTRY (Dodecahedron),
+ ENTRY (RhombicDodecahedron),
+ ENTRY (Icosahedron),
+ ENTRY (SierpinskiSponge),
+ ENTRY (Teapot),
+ ENTRY (Torus),
+ ENTRY (Sphere),
+ ENTRY (Cone),
+ ENTRY (Cylinder),
+ ENTRY (Cuboctahedron)
+};
+#undef ENTRY
+
+/*!
+ Does printf()-like work using freeglut/OpenGLUT
+ glutBitmapString(). Uses a fixed font. Prints
+ at the indicated row/column position.
+
+ Limitation: Cannot address pixels.
+ Limitation: Renders in screen coords, not model coords.
+*/
+static void shapesPrintf (int row, int col, const char *fmt, ...)
+{
+ static char buf[256];
+ int viewport[4];
+ void *font = GLUT_BITMAP_9_BY_15;
+ va_list args;
+
+ va_start(args, fmt);
+#if defined(WIN32) && !defined(__CYGWIN__)
+ (void) _vsnprintf (buf, sizeof(buf), fmt, args);
+#else
+ (void) vsnprintf (buf, sizeof(buf), fmt, args);
+#endif
+ va_end(args);
+
+ glGetIntegerv(GL_VIEWPORT,viewport);
+
+ glPushMatrix();
+ glLoadIdentity();
+
+ glMatrixMode(GL_PROJECTION);
+ glPushMatrix();
+ glLoadIdentity();
+
+ glOrtho(0,viewport[2],0,viewport[3],-1,1);
+
+ glRasterPos2i
+ (
+ glutBitmapWidth(font, ' ') * col,
+ - glutBitmapHeight(font) * (row+2) + viewport[3]
+ );
+ glutBitmapString (font, (unsigned char*)buf);
+
+ glPopMatrix();
+ glMatrixMode(GL_MODELVIEW);
+ glPopMatrix();
+}
+
+/* GLUT callback Handlers */
+
+static void
+resize(int width, int height)
+{
+ const float ar = (float) width / (float) height;
+
+ glViewport(0, 0, width, height);
+
+ glMatrixMode(GL_PROJECTION);
+ glLoadIdentity();
+ glFrustum(-ar, ar, -1.0, 1.0, 2.0, 100.0);
+
+ glMatrixMode(GL_MODELVIEW);
+ glLoadIdentity() ;
+}
+
+static void display(void)
+{
+ const double t = glutGet(GLUT_ELAPSED_TIME) / 1000.0;
+ const double a = t*90.0;
+
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
+ glEnable(GL_LIGHTING);
+
+ glColor3d(1,0,0);
+
+ glPushMatrix();
+ glTranslated(0,1.2,-6);
+ glRotated(60,1,0,0);
+ glRotated(a,0,0,1);
+ table [function_index].solid ();
+ glPopMatrix();
+
+ glPushMatrix();
+ glTranslated(0,-1.2,-6);
+ glRotated(60,1,0,0);
+ glRotated(a,0,0,1);
+ table [function_index].wire ();
+ glPopMatrix();
+
+ glDisable(GL_LIGHTING);
+ glColor3d(0.1,0.1,0.4);
+
+ if( show_info ) {
+ shapesPrintf (1, 3, "Shape PgUp PgDn: %s", table [function_index].name);
+ shapesPrintf (2, 3, "Slices +-: %d Stacks <>: %d", slices, stacks);
+ shapesPrintf (3, 3, "nSides +-: %d nRings <>: %d", slices, stacks);
+ shapesPrintf (4, 3, "Depth (): %d", depth);
+ shapesPrintf (5, 3, "Outer radius Up Down : %f", orad);
+ shapesPrintf (6, 3, "Inner radius Left Right: %f", irad);
+ } else {
+ printf ( "Shape %d slides %d stacks %d\n", function_index, slices, stacks ) ;
+ }
+
+ glutSwapBuffers();
+}
+
+
+static void
+key(unsigned char key, int x, int y)
+{
+ switch (key)
+ {
+ case 27 :
+ case 'Q':
+ case 'q': glutLeaveMainLoop () ; break;
+
+ case 'I':
+ case 'i': show_info = ( show_info == GL_TRUE ) ? GL_FALSE : GL_TRUE; break;
+
+ case '=':
+ case '+': slices++; break;
+
+ case '-':
+ case '_': if( slices > -1 ) slices--; break;
+
+ case ',':
+ case '<': if( stacks > -1 ) stacks--; break;
+
+ case '.':
+ case '>': stacks++; break;
+
+ case '9':
+ case '(': if( depth > -1 ) depth--; break;
+
+ case '0':
+ case ')': ++depth; break;
+
+ default:
+ break;
+ }
+
+ glutPostRedisplay();
+}
+
+static void special (int key, int x, int y)
+{
+ switch (key)
+ {
+ case GLUT_KEY_PAGE_UP: ++function_index; break;
+ case GLUT_KEY_PAGE_DOWN: --function_index; break;
+ case GLUT_KEY_UP: orad *= 2; break;
+ case GLUT_KEY_DOWN: orad /= 2; break;
+
+ case GLUT_KEY_RIGHT: irad *= 2; break;
+ case GLUT_KEY_LEFT: irad /= 2; break;
+
+ default:
+ break;
+ }
+
+ if (0 > function_index)
+ function_index = NUMBEROF (table) - 1;
+
+ if (NUMBEROF (table) <= ( unsigned )function_index)
+ function_index = 0;
+}
+
+
+static void
+idle(void)
+{
+ glutPostRedisplay();
+}
+
+const GLfloat light_ambient[] = { 0.0f, 0.0f, 0.0f, 1.0f };
+const GLfloat light_diffuse[] = { 1.0f, 1.0f, 1.0f, 1.0f };
+const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
+const GLfloat light_position[] = { 2.0f, 5.0f, 5.0f, 0.0f };
+
+const GLfloat mat_ambient[] = { 0.7f, 0.7f, 0.7f, 1.0f };
+const GLfloat mat_diffuse[] = { 0.8f, 0.8f, 0.8f, 1.0f };
+const GLfloat mat_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
+const GLfloat high_shininess[] = { 100.0f };
+
+/* Program entry point */
+
+int
+main(int argc, char *argv[])
+{
+ glutInitWindowSize(640,480);
+ glutInitWindowPosition(40,40);
+ glutInit(&argc, argv);
+ glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH | GLUT_MULTISAMPLE);
+
+ glutCreateWindow("OpenGLUT Shapes");
+
+ glutReshapeFunc(resize);
+ glutDisplayFunc(display);
+ glutKeyboardFunc(key);
+ glutSpecialFunc(special);
+ glutIdleFunc(idle);
+
+ glutSetOption ( GLUT_ACTION_ON_WINDOW_CLOSE, GLUT_ACTION_CONTINUE_EXECUTION ) ;
+
+ glClearColor(1,1,1,1);
+ glEnable(GL_CULL_FACE);
+ glCullFace(GL_BACK);
+
+ glEnable(GL_DEPTH_TEST);
+ glDepthFunc(GL_LESS);
+
+ glEnable(GL_LIGHT0);
+ glEnable(GL_NORMALIZE);
+ glEnable(GL_COLOR_MATERIAL);
+
+ glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
+ glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
+ glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
+ glLightfv(GL_LIGHT0, GL_POSITION, light_position);
+
+ glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
+ glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
+ glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
+ glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);
+
+ glutMainLoop();
+
+#ifdef _MSC_VER
+ /* DUMP MEMORY LEAK INFORMATION */
+ _CrtDumpMemoryLeaks () ;
+#endif
+
+ return EXIT_SUCCESS;
+}
diff --git a/SixenseSDK/src/sixense_simple3d/progs/demos/shapes/shapes.dsp b/SixenseSDK/src/sixense_simple3d/progs/demos/shapes/shapes.dsp
new file mode 100755
index 0000000..4a6ad5a
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/progs/demos/shapes/shapes.dsp
@@ -0,0 +1,100 @@
+# Microsoft Developer Studio Project File - Name="shapes" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=shapes - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "shapes.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "shapes.mak" CFG="shapes - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "shapes - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "shapes - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "shapes - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../../include" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /libpath:"../../../Release"
+
+!ELSEIF "$(CFG)" == "shapes - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"../../../Debug"
+
+!ENDIF
+
+# Begin Target
+
+# Name "shapes - Win32 Release"
+# Name "shapes - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\shapes.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/SixenseSDK/src/sixense_simple3d/progs/demos/shapes/shapesStatic.dsp b/SixenseSDK/src/sixense_simple3d/progs/demos/shapes/shapesStatic.dsp
new file mode 100755
index 0000000..5811bbe
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/progs/demos/shapes/shapesStatic.dsp
@@ -0,0 +1,102 @@
+# Microsoft Developer Studio Project File - Name="shapesStatic" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=shapesStatic - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "shapesStatic.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "shapesStatic.mak" CFG="shapesStatic - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "shapesStatic - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "shapesStatic - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "shapesStatic - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "shapesStatic___Win32_Release"
+# PROP BASE Intermediate_Dir "shapesStatic___Win32_Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "ReleaseStatic"
+# PROP Intermediate_Dir "ReleaseStatic"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../../include" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "FREEGLUT_STATIC" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /libpath:"../../../ReleaseStatic"
+
+!ELSEIF "$(CFG)" == "shapesStatic - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "shapesStatic___Win32_Debug"
+# PROP BASE Intermediate_Dir "shapesStatic___Win32_Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "DebugStatic"
+# PROP Intermediate_Dir "DebugStatic"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "FREEGLUT_STATIC" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"../../../DebugStatic"
+
+!ENDIF
+
+# Begin Target
+
+# Name "shapesStatic - Win32 Release"
+# Name "shapesStatic - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\shapes.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/SixenseSDK/src/sixense_simple3d/progs/demos/sixense_simple3d/sixense_simple3d.c b/SixenseSDK/src/sixense_simple3d/progs/demos/sixense_simple3d/sixense_simple3d.c
new file mode 100755
index 0000000..c11b284
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/progs/demos/sixense_simple3d/sixense_simple3d.c
@@ -0,0 +1,899 @@
+#include <GL/freeglut.h>
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <sixense.h>
+#include <sixense_math.hpp>
+#ifdef WIN32
+#include <sixense_utils/mouse_pointer.hpp>
+#endif
+#include <sixense_utils/derivatives.hpp>
+#include <sixense_utils/button_states.hpp>
+#include <sixense_utils/event_triggers.hpp>
+#include <sixense_utils/controller_manager/controller_manager.hpp>
+
+#include <deque>
+
+// whether or not we are currently logging position data to a file, and the file pointer to which to log
+static int is_logging = 0;
+static FILE *log_file = 0;
+
+// whether or not to write the current controller positions on the screen.
+static int display_pos_enabled = 0;
+
+// Zoom factor for the camera, press [ and ] to zoom in or out
+static float camera_dist = 1.0f;
+
+// The current mode of the real-time graph display
+static int graph_mode = 0; // 0 == off, 1 == pos, 2 == vel, 3 == accel
+static bool graph_paused = false;
+static bool auto_graph_bounds = false;
+static float graph_bounds[2] = {-750, 750};
+
+// flags that the controller manager system can set to tell the graphics system to draw the instructions
+// for the player
+static bool controller_manager_screen_visible = true;
+std::string controller_manager_text_string;
+
+// these are used by the graphics to highlight one of the controller 3d objects for a number of frames
+static int flash_left_controller_frames=0, flash_right_controller_frames=0;
+
+// pressing 'm' turns on drawing of 2d mouse cursors controlled by each controller
+static bool draw_mouse_pointers_enabled = false;
+static float left_mouse_pos[2]={0,0}, right_mouse_pos[2]={0,0};
+static float left_mouse_roll=0.0f, right_mouse_roll=0.0f;
+
+// Log a number of samples for graphing
+const int log_history_size = 1000;
+std::deque<sixenseMath::Vector3> pos_hist, vel_hist, accel_hist;
+
+
+// Draw a text string, at the given row, column
+static void shapesPrintf (int row, int col, const char *fmt, ...)
+{
+ static char buf[256];
+ int viewport[4];
+ void *font = GLUT_BITMAP_HELVETICA_12;
+ va_list args;
+
+ va_start(args, fmt);
+#if defined(WIN32) && !defined(__CYGWIN__)
+ (void) _vsnprintf (buf, sizeof(buf), fmt, args);
+#else
+ (void) vsnprintf (buf, sizeof(buf), fmt, args);
+#endif
+ va_end(args);
+
+ glGetIntegerv(GL_VIEWPORT,viewport);
+
+ glPushMatrix();
+ glLoadIdentity();
+
+ glMatrixMode(GL_PROJECTION);
+ glPushMatrix();
+ glLoadIdentity();
+
+ glOrtho(0,viewport[2],0,viewport[3],-1,1);
+
+ glRasterPos2i
+ (
+ glutBitmapWidth(font, ' ') * col,
+ - glutBitmapHeight(font) * (row+0) + viewport[3]
+ );
+ glutBitmapString (font, (unsigned char*)buf);
+
+ glPopMatrix();
+ glMatrixMode(GL_MODELVIEW);
+ glPopMatrix();
+}
+
+// Draw a text string, centered in the middle of the screen
+static void shapesPrintfCentered (const char *fmt, ...)
+{
+ static char buf[256];
+ int viewport[4];
+ void *font = GLUT_BITMAP_HELVETICA_12;
+ va_list args;
+
+ va_start(args, fmt);
+#if defined(WIN32) && !defined(__CYGWIN__)
+ (void) _vsnprintf (buf, sizeof(buf), fmt, args);
+#else
+ (void) vsnprintf (buf, sizeof(buf), fmt, args);
+#endif
+ va_end(args);
+
+ glGetIntegerv(GL_VIEWPORT,viewport);
+
+ glPushMatrix();
+ glLoadIdentity();
+
+ glMatrixMode(GL_PROJECTION);
+ glPushMatrix();
+ glLoadIdentity();
+
+ glOrtho(0,viewport[2],0,viewport[3],-1,1);
+
+ glRasterPos2i
+ (
+ viewport[2]/2 - glutBitmapLength(font, (unsigned char*)buf)/2,
+ viewport[3]/2 - glutBitmapHeight(font)/2
+ );
+ glutBitmapString (font, (unsigned char*)buf);
+
+ glPopMatrix();
+ glMatrixMode(GL_MODELVIEW);
+ glPopMatrix();
+}
+
+// Handle resizing of the window
+static void resize(int width, int height)
+{
+ const float ar = (float) width / (float) height;
+
+ glViewport(0, 0, width, height);
+
+ glMatrixMode(GL_PROJECTION);
+ glLoadIdentity();
+ glFrustum(-ar, ar, -1.0, 1.0, 2.0, 100.0);
+
+ glMatrixMode(GL_MODELVIEW);
+ glLoadIdentity() ;
+}
+
+// Write the current controller position data point to a log file
+static void updateLog() {
+ int base, cont;
+ sixenseAllControllerData acd;
+
+ if( log_file ) {
+
+ for( base=0; base<sixenseGetMaxBases(); base++ ) {
+ sixenseSetActiveBase(base);
+
+ sixenseGetAllNewestData( &acd );
+
+ for( cont=0; cont<sixenseGetMaxControllers(); cont++ ) {
+
+ if( sixenseIsControllerEnabled( cont ) ) {
+
+ fprintf( log_file, "base: %d controller: %d ", base, cont );
+
+ fprintf( log_file, "pos: %f %f %f ", acd.controllers[cont].pos[0], acd.controllers[cont].pos[1], acd.controllers[cont].pos[2] );
+ fprintf( log_file, "rot_mat: %f %f %f %f %f %f %f %f %f",
+ acd.controllers[cont].rot_mat[0][0], acd.controllers[cont].rot_mat[0][1], acd.controllers[cont].rot_mat[0][2],
+ acd.controllers[cont].rot_mat[1][0], acd.controllers[cont].rot_mat[1][1], acd.controllers[cont].rot_mat[1][2],
+ acd.controllers[cont].rot_mat[2][0], acd.controllers[cont].rot_mat[2][1], acd.controllers[cont].rot_mat[2][2] );
+
+ fprintf( log_file, "\n" );
+
+ }
+
+ }
+ }
+
+
+ }
+}
+
+
+// Draw the two 3d objects representing the controllers
+static void drawObjects() {
+ int base, cont, i, j;
+ sixenseAllControllerData acd;
+ float rot_mat[4][4];
+ float colors[4][3] = {
+ 1.0f, 0.0f, 0.0f,
+ 0.8f, 0.8f, 0.0f,
+ 0.0f, 1.0f, 0.0f,
+ 0.0f, 0.0f, 1.0f };
+
+ int left_index = sixenseUtils::getTheControllerManager()->getIndex( sixenseUtils::ControllerManager::P1L );
+ int right_index = sixenseUtils::getTheControllerManager()->getIndex( sixenseUtils::ControllerManager::P1R );
+
+ // Go through each of the connected systems
+ for( base=0; base<sixenseGetMaxBases(); base++ ) {
+ sixenseSetActiveBase(base);
+
+ // Get the latest controller data
+ sixenseGetAllNewestData( &acd );
+
+ // For each possible controller
+ for( cont=0; cont<sixenseGetMaxControllers(); cont++ ) {
+
+ // See if it's enabled
+ if( sixenseIsControllerEnabled( cont ) ) {
+
+ // Set up the color of the object. If we're flashing this controller, set a color additive
+ float flash_multiplier = 0.0f;
+
+ if( cont == left_index ) { // if this is the left controller
+ if( flash_left_controller_frames ) { // and we're supposed to flash the left controller
+ flash_left_controller_frames--;
+
+ flash_multiplier = 0.2f;
+ }
+ }
+
+ if( cont == right_index ) { // if this is the left controller
+ if( flash_right_controller_frames ) { // and we're supposed to flash the left controller
+ flash_right_controller_frames--;
+
+ flash_multiplier = 0.2f;
+ }
+ }
+
+ // draw one hand darker than the other one
+ if( cont == 0 ) {
+ glColor3d(colors[base][0]+flash_multiplier, colors[base][1]+flash_multiplier, colors[base][2]+flash_multiplier );
+ } else {
+ glColor3d(0.6f*colors[base][0]+flash_multiplier, 0.6f*colors[base][1]+flash_multiplier, 0.6f*colors[base][2]+flash_multiplier );
+ }
+
+ glPushMatrix();
+ for( i=0; i<3; i++ )
+ for( j=0; j<3; j++ )
+ rot_mat[i][j] = acd.controllers[cont].rot_mat[i][j];
+
+ rot_mat[0][3] = 0.0f;
+ rot_mat[1][3] = 0.0f;
+ rot_mat[2][3] = 0.0f;
+ rot_mat[3][0] = acd.controllers[cont].pos[0]/500.0f;
+ rot_mat[3][1] = acd.controllers[cont].pos[1]/500.0f;
+ rot_mat[3][2] = acd.controllers[cont].pos[2]/500.0f;
+ rot_mat[3][3] = 1.0f;
+
+ glMultMatrixf( (GLfloat*)rot_mat );
+ glScaled( 0.15f, 0.15f, 0.15f );
+
+
+ glutSolidSphere( 1, 5, 5 );
+ glTranslated( 0, 0, -12 );
+ glutSolidCylinder( 0.5, 12, 5, 5 );
+
+
+ glPopMatrix();
+
+ }
+ }
+ }
+}
+
+
+// Compute the velocity and acceleration and keep them in a list
+void collectDataForGraph()
+{
+ if( graph_paused ) return;
+
+ // Get the latest data for the left controller
+ int left_index = sixenseUtils::getTheControllerManager()->getIndex( sixenseUtils::ControllerManager::P1L );
+ sixenseControllerData cd;
+ sixenseGetNewestData( left_index, &cd );
+
+ // Use a sixenseUtils::Derivatives object to compute velocity and acceleration from the position
+ static sixenseUtils::Derivatives derivs;
+
+ // update the derivative object
+ derivs.update( &cd );
+
+ // Push the newest derivative computations onto the history queue
+ pos_hist.push_back( sixenseMath::Vector3( cd.pos ) );
+ vel_hist.push_back( derivs.getVelocity() );
+ accel_hist.push_back( derivs.getAcceleration() );
+
+ // Constrain the queues to a maximum size
+ if( vel_hist.size() > log_history_size ) {
+ vel_hist.pop_front();
+ }
+
+ if( accel_hist.size() > log_history_size ) {
+ accel_hist.pop_front();
+ }
+
+ if( pos_hist.size() > log_history_size ) {
+ pos_hist.pop_front();
+ }
+
+}
+
+// Draw a plot line of the sequence of values. Dynmically fit the y axis to keep the lines on the screen
+// regardless of their range.
+void drawGraph( std::deque<sixenseMath::Vector3> &hist_list ) {
+
+ // Keep track of the y bounds of the graph. These will change with time to dynamically
+ // fit the full y range on the screen
+ static float graph_min_y = graph_bounds[0], graph_max_y = graph_bounds[1];
+
+ if( auto_graph_bounds ) {
+
+ // Go through all the elements in the list and get the max and min of the y coordinate
+
+ float pad_scale = 0.1f;
+ float new_min_y = 99999.0f, new_max_y = -99999.0f;
+
+ for( int i=0; i<(int)hist_list.size(); i++ ) {
+ for( int axis=0; axis<3; axis++ ) {
+ if( hist_list[i][axis] < new_min_y ) new_min_y = hist_list[i][axis];
+ if( hist_list[i][axis] > new_max_y ) new_max_y = hist_list[i][axis];
+ }
+ }
+
+ // Add some padding to the range
+ float range = new_max_y - new_min_y;
+ new_min_y -= range * pad_scale;
+ new_max_y += range * pad_scale;
+
+ // Filter the y extents so they move smoothly
+ float filter_val = 0.999f;
+
+ graph_min_y = graph_min_y * filter_val + new_min_y * (1.0f-filter_val);
+ graph_max_y = graph_max_y * filter_val + new_max_y * (1.0f-filter_val);
+
+ } else {
+ graph_min_y = graph_bounds[0];
+ graph_max_y = graph_bounds[1];
+ }
+
+ const float axis_colors[3][3] = {
+ { 1, 0, 0 },
+ { 0, 1, 0 },
+ { 0, 0, 1 }
+ };
+
+ if( hist_list.size() < 2 ) return;
+
+ glLineWidth( 2.0f );
+
+ // Draw
+ glBegin( GL_LINES );
+
+ int axis = 2;
+ for( int axis=0; axis<3; axis++ ) {
+
+ glColor3f( axis_colors[axis][0], axis_colors[axis][1], axis_colors[axis][2] );
+
+ for( int i=0; i<(int)hist_list.size()-1; i++ ) {
+
+ float x_pos_0 = (float)i/(float)log_history_size;
+ float x_pos_1 = (float)(i+1)/(float)log_history_size;
+
+ float y_pos_0 = (hist_list[i][axis]-graph_min_y)/(graph_max_y-graph_min_y);
+ float y_pos_1 = (hist_list[i+1][axis]-graph_min_y)/(graph_max_y-graph_min_y);
+
+ glVertex3f( x_pos_0, y_pos_0, 0 );
+ glVertex3f( x_pos_1, y_pos_1, 0 );
+
+ }
+ }
+
+ glEnd();
+
+
+}
+
+// Draw the position, velocity or acceleration graphs, depending on the current graph_mode
+void drawGraphs() {
+
+ const float default_graph_bounds[3][2] =
+ {
+ { -750, 750 },
+ { -1000, 1000 },
+ { -15000, 15000 }
+ };
+
+ // Set up ortho proj mat
+ glMatrixMode(GL_PROJECTION);
+ glPushMatrix();
+ glLoadIdentity();
+ glOrtho( 0, 1, 0, 1, -1, 1 );
+
+ // Clear modelview mat
+ glMatrixMode(GL_MODELVIEW);
+
+ glPushMatrix();
+ glLoadIdentity();
+
+ glDisable( GL_DEPTH_TEST );
+
+ // Draw the graphs
+ if( graph_mode == 1 ) {
+ drawGraph( pos_hist );
+ graph_bounds[0] = default_graph_bounds[0][0];
+ graph_bounds[1] = default_graph_bounds[0][1];
+ } else if( graph_mode == 2 ) {
+ drawGraph( vel_hist );
+ graph_bounds[0] = default_graph_bounds[1][0];
+ graph_bounds[1] = default_graph_bounds[1][1];
+ } else if( graph_mode == 3 ) {
+ drawGraph( accel_hist );
+ graph_bounds[0] = default_graph_bounds[2][0];
+ graph_bounds[1] = default_graph_bounds[2][1];
+ }
+
+ glEnable( GL_DEPTH_TEST );
+
+ glPopMatrix();
+
+ glMatrixMode(GL_PROJECTION);
+ glPopMatrix();
+
+ glMatrixMode(GL_MODELVIEW);
+
+}
+
+// Draw a couple of small rectangles for 2D cursors. They roll with the controller rotation.
+void draw_mouse_pointers() {
+
+ // Set up ortho proj mat
+ glMatrixMode(GL_PROJECTION);
+ glPushMatrix();
+ glLoadIdentity();
+ glOrtho( 0, 1, 0, 1, -1, 1 );
+
+ // Clear modelview mat
+ glMatrixMode(GL_MODELVIEW);
+
+ glPushMatrix();
+ glLoadIdentity();
+
+ glDisable( GL_DEPTH_TEST );
+
+
+ glLineWidth( 5.0f );
+
+ // Draw the left cursor
+ glColor4f( 1.0, 0.0, 0.0, 1.0 );
+ glPushMatrix();
+ glTranslatef( left_mouse_pos[0], left_mouse_pos[1], 0.0f );
+ glRotatef( left_mouse_roll*180.0f/3.1415926f, 0.0f, 0.0f, -1.0f );
+
+ glBegin( GL_LINES );
+ glVertex3f( -0.02f, 0.01f, 0.0f );
+ glVertex3f( 0.02f, 0.01f, 0.0f );
+
+ glVertex3f( 0.02f, 0.01f, 0.0f );
+ glVertex3f( 0.02f, -0.01f, 0.0f );
+
+ glVertex3f( 0.02f, -0.01f, 0.0f );
+ glVertex3f( -0.02f, -0.01f, 0.0f );
+
+ glVertex3f( -0.02f, -0.01f, 0.0f );
+ glVertex3f( -0.02f, 0.01f, 0.0f );
+ glEnd();
+
+ glPopMatrix();
+
+ // Now draw the right
+ glColor4f( 0.0, 0.0, 1.0, 1.0 );
+ glPushMatrix();
+ glTranslatef( right_mouse_pos[0], right_mouse_pos[1], 0.0f );
+ glRotatef( right_mouse_roll*180.0f/3.1415926f, 0.0f, 0.0f, -1.0f );
+
+ glBegin( GL_LINES );
+ glVertex3f( -0.02f, 0.01f, 0.0f );
+ glVertex3f( 0.02f, 0.01f, 0.0f );
+
+ glVertex3f( 0.02f, 0.01f, 0.0f );
+ glVertex3f( 0.02f, -0.01f, 0.0f );
+
+ glVertex3f( 0.02f, -0.01f, 0.0f );
+ glVertex3f( -0.02f, -0.01f, 0.0f );
+
+ glVertex3f( -0.02f, -0.01f, 0.0f );
+ glVertex3f( -0.02f, 0.01f, 0.0f );
+ glEnd();
+
+ glPopMatrix();
+
+
+ glEnable( GL_DEPTH_TEST );
+
+ glPopMatrix();
+
+ glMatrixMode(GL_PROJECTION);
+ glPopMatrix();
+
+ glMatrixMode(GL_MODELVIEW);
+
+
+}
+
+// Write a bunch of instruction text, as well as the current position and rotation information
+void draw_controller_info() {
+ const double t = glutGet(GLUT_ELAPSED_TIME) / 1000.0;
+ const double a = t*90.0;
+ sixenseAllControllerData acd;
+ int i, base, cont;
+ int hpb_on;
+ float camera_offset[3] = { 0, -1.0f, -6.0f };
+
+ glClearColor(0.6f,0.6f,0.7f,1.0f);
+
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
+ glEnable(GL_LIGHTING);
+
+ glColor3d(0.2,0.2,0.2);
+
+ glPushMatrix();
+
+ glTranslatef( camera_offset[0]*camera_dist, camera_offset[1]*camera_dist, camera_offset[2]*camera_dist );
+
+ // Draw a sphere at the origin
+ glutSolidSphere( 0.1, 8, 8 );
+
+ drawObjects();
+
+ glPopMatrix();
+
+ glDisable(GL_LIGHTING);
+ glColor3d(0.1,0.1,0.4);
+
+ int next_line = 1;
+
+ // Update the text
+ sixenseSetActiveBase(0);
+ collectDataForGraph();
+ glColor3d(0.1,0.1,0.4);
+ shapesPrintf (next_line, 3, "Base 0: %d controllers", sixenseGetNumActiveControllers() );
+
+ next_line++;
+
+ if( is_logging ) {
+ glColor3d(0.8,0.1,0.4);
+ shapesPrintf (next_line, 3, "Logging ON. Press 'L' to stop." );
+ } else {
+ glColor3d(0.1,0.1,0.4);
+ shapesPrintf (next_line, 3, "Logging OFF. Press 'L' to start." );
+ }
+
+
+ next_line++;
+
+ shapesPrintf (next_line, 3, "Press '[' to zoom out, ']' to zoom in." );
+
+ next_line++;
+
+ if( graph_mode == 0 )
+ shapesPrintf (next_line, 3, "Press 'g' to cycle through position, velocity and acceleration graphs. Graphs are OFF." );
+ else if( graph_mode == 1 )
+ shapesPrintf (next_line, 3, "Press 'g' to cycle through position, velocity and acceleration graphs. Currently plotting POSITION." );
+ else if( graph_mode == 2 )
+ shapesPrintf (next_line, 3, "Press 'g' to cycle through position, velocity and acceleration graphs. Currently plotting VELOCITY." );
+ else if( graph_mode == 3 )
+ shapesPrintf (next_line, 3, "Press 'g' to cycle through position, velocity and acceleration graphs. Currently plotting ACCELERATION." );
+
+ next_line++;
+
+ shapesPrintf (next_line, 3, "Press 'm' to toggle drawing of mouse cursors." );
+
+
+
+ next_line++;
+ next_line++;
+
+ if( display_pos_enabled ) {
+
+ i=0;
+
+ shapesPrintf (next_line, 3, "Controller position data. Press 'P' to hide:" );
+
+ next_line++;
+
+ for( base=0; base<sixenseGetMaxBases(); base++ ) {
+ sixenseSetActiveBase(base);
+ sixenseGetAllNewestData( &acd );
+
+ for( cont=0; cont<sixenseGetMaxControllers(); cont++ ) {
+
+ if( sixenseIsControllerEnabled( cont ) ) {
+
+ shapesPrintf( next_line + i, 3, "base: %d controller: %d pos: %f %f %f rot_mat: %f %f %f %f %f %f %f %f %f", base, cont,
+ acd.controllers[cont].pos[0], acd.controllers[cont].pos[1], acd.controllers[cont].pos[2],
+ acd.controllers[cont].rot_mat[0][0], acd.controllers[cont].rot_mat[0][1], acd.controllers[cont].rot_mat[0][2],
+ acd.controllers[cont].rot_mat[1][0], acd.controllers[cont].rot_mat[1][1], acd.controllers[cont].rot_mat[1][2],
+ acd.controllers[cont].rot_mat[2][0], acd.controllers[cont].rot_mat[2][1], acd.controllers[cont].rot_mat[2][2] );
+
+ i++;
+
+ }
+
+ }
+ }
+
+ } else {
+ shapesPrintf (next_line, 3, "Press 'P' to display controller position data." );
+
+ }
+
+ drawGraphs();
+
+ if( draw_mouse_pointers_enabled )
+ draw_mouse_pointers();
+
+}
+
+// This is the callback that gets registered with the sixenseUtils::controller_manager. It will get called each time the user completes
+// one of the setup steps so that the game can update the instructions to the user. If the engine supports texture mapping, the
+// controller_manager can prove a pathname to a image file that contains the instructions in graphic form.
+// The controller_manager serves the following functions:
+// 1) Makes sure the appropriate number of controllers are connected to the system. The number of required controllers is designaged by the
+// game type (ie two player two controller game requires 4 controllers, one player one controller game requires one)
+// 2) Makes the player designate which controllers are held in which hand.
+// 3) Enables hemisphere tracking by calling the Sixense API call sixenseAutoEnableHemisphereTracking. After this is completed full 360 degree
+// tracking is possible.
+void controller_manager_setup_callback( sixenseUtils::ControllerManager::setup_step step ) {
+
+ if( sixenseUtils::getTheControllerManager()->isMenuVisible() ) {
+
+ // Turn on the flag that tells the graphics system to draw the instruction screen instead of the controller information. The game
+ // should be paused at this time.
+ controller_manager_screen_visible = true;
+
+ // Ask the controller manager what the next instruction string should be.
+ controller_manager_text_string = sixenseUtils::getTheControllerManager()->getStepString();
+
+ // We could also load the supplied controllermanager textures using the filename: sixenseUtils::getTheControllerManager()->getTextureFileName();
+
+ } else {
+
+ // We're done with the setup, so hide the instruction screen.
+ controller_manager_screen_visible = false;
+
+ }
+
+}
+
+// Draw the grey screen with a single yellow line of text to prompt the user through the setup steps.
+void draw_controller_manager_screen() {
+
+ glClearColor( 0.2f, 0.2f, 0.2f, 1.0f );
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
+ glColor3d(0.8,0.8,0.0);
+ shapesPrintfCentered( controller_manager_text_string.c_str() );
+
+}
+
+// This function causes the 3D objects to flash when the buttons are pressed. It does so using two different techniques
+// available using sixenseUtils
+void check_for_button_presses( sixenseAllControllerData *acd ) {
+
+ // Ask the controller manager which controller is in the left hand and which is in the right
+ int left_index = sixenseUtils::getTheControllerManager()->getIndex( sixenseUtils::ControllerManager::P1L );
+ int right_index = sixenseUtils::getTheControllerManager()->getIndex( sixenseUtils::ControllerManager::P1R );
+
+
+
+ // First use the 'ButtonStates' class to flash the object when the 1 button is pressed, or the trigger is pulled.
+ // ButtonStates is a simple class that reports when a button's state just transitioned from released to pressed
+ // or vice versa. It also detects when the trigger crosses a programmable threshold.
+ static sixenseUtils::ButtonStates left_states, right_states;
+
+ left_states.update( &acd->controllers[left_index] );
+ right_states.update( &acd->controllers[right_index] );
+
+ // Do something if the button was pressed
+ if( left_states.buttonJustPressed( SIXENSE_BUTTON_1 ) ) {
+ flash_left_controller_frames = 20;
+ }
+
+ if( right_states.buttonJustPressed( SIXENSE_BUTTON_1 ) ) {
+ flash_right_controller_frames = 20;
+ }
+
+ // Or if the trigger was pulled
+ if( left_states.triggerJustPressed() ) {
+ flash_left_controller_frames = 20;
+ }
+
+ if( right_states.triggerJustPressed() ) {
+ flash_right_controller_frames = 20;
+ }
+
+
+
+ // Now do the same thing but use event triggers to flash the object when a button is pressed, or when the
+ // controller moves to a certain height.
+ // EventTriggers are very flexible objects that can be used to check for transitions of controller state including buttons being pressed, controllers moving a certain distance,
+ // or exceeding a certain velocity.
+ class FlashObjectTrigger : public sixenseUtils::EventTriggerBase {
+ int &enable_for_frames;
+ public:
+ FlashObjectTrigger( int &i ) : enable_for_frames( i ) {}
+ virtual void trigger() const {
+ enable_for_frames = 20;
+ }
+ };
+
+ // First make a couple of BinaryEventSwitch that flash the object when the test parameter changes from false to true. Use a null trigger for when it transitions
+ // from true to false.
+ static sixenseUtils::EventSwitchBase *left_button_switch = new sixenseUtils::BinaryEventSwitch( new FlashObjectTrigger( flash_left_controller_frames ), new sixenseUtils::NullEventTrigger );
+ static sixenseUtils::EventSwitchBase *right_button_switch = new sixenseUtils::BinaryEventSwitch( new FlashObjectTrigger( flash_right_controller_frames ), new sixenseUtils::NullEventTrigger );
+ left_button_switch->test( ((acd->controllers)[left_index].buttons & SIXENSE_BUTTON_4) ? 1.0f : 0.0f ); // test against the current state of the 4 button
+ right_button_switch->test( ((acd->controllers)[right_index].buttons & SIXENSE_BUTTON_4) ? 1.0f : 0.0f );
+
+ // First make a couple of BinaryEventSwitch that flash the object when the controller moves above a 200mm. Do nothing when it transitions back down.
+ // ValuatorEventSwitches can be used to test against any floating point value, including position, velocity, trigger positions, joystick positions, rotation angles, etc.
+ static sixenseUtils::EventSwitchBase *left_height_switch = new sixenseUtils::ValuatorEventSwitch( 200.0f, new FlashObjectTrigger( flash_left_controller_frames ), new sixenseUtils::NullEventTrigger );
+ static sixenseUtils::EventSwitchBase *right_height_switch = new sixenseUtils::ValuatorEventSwitch( 200.0f, new FlashObjectTrigger( flash_right_controller_frames ), new sixenseUtils::NullEventTrigger );
+ left_button_switch->test( (acd->controllers)[left_index].pos[1] ); // test the y position (height)
+ right_button_switch->test( (acd->controllers)[right_index].pos[1] );
+
+}
+
+#ifdef WIN32
+// use the sixenseUtils::MousePointer class to compute the 2d mouse position pointed to by the two controllers.
+void update_mouse_pointers( sixenseAllControllerData *acd ) {
+
+ // Ask the controller manager which controller is in the left hand and which is in the right
+ int left_index = sixenseUtils::getTheControllerManager()->getIndex( sixenseUtils::ControllerManager::P1L );
+ int right_index = sixenseUtils::getTheControllerManager()->getIndex( sixenseUtils::ControllerManager::P1R );
+
+
+ static sixenseUtils::MousePointer left_mouse_pointer, right_mouse_pointer;
+
+ left_mouse_pointer.setSensitivity( 1.5f );
+ right_mouse_pointer.setSensitivity( 1.5f );
+
+ Vector2 pos = left_mouse_pointer.update( &acd->controllers[left_index] );
+ pos.fill( left_mouse_pos ); // fill just copies the elements into a float array
+ left_mouse_roll = left_mouse_pointer.getRollAngle(); // store off the roll of the controller as well
+
+ pos = right_mouse_pointer.update( &acd->controllers[right_index] );
+ pos.fill( right_mouse_pos ); // fill just copies the elements into a float array
+ right_mouse_roll = right_mouse_pointer.getRollAngle(); // store off the roll of the controller as well
+
+}
+#endif
+
+// glut calls this function each frame
+static void display(void)
+{
+
+ // update the controller manager with the latest controller data here
+ sixenseSetActiveBase(0);
+ sixenseAllControllerData acd;
+ sixenseGetAllNewestData( &acd );
+ sixenseUtils::getTheControllerManager()->update( &acd );
+
+ check_for_button_presses( &acd );
+
+#ifdef WIN32
+ update_mouse_pointers( &acd );
+#endif
+
+ // Either draw the controller manager instruction screen, or display the controller information
+ if( controller_manager_screen_visible ) {
+ draw_controller_manager_screen();
+ } else {
+ draw_controller_info();
+ }
+
+ glutSwapBuffers();
+
+ if( is_logging ) {
+ updateLog();
+ }
+}
+
+
+static void
+ toggleLogging() {
+ if( is_logging ) {
+ is_logging = 0;
+
+ fclose( log_file );
+
+ } else {
+ is_logging = 1;
+
+ log_file = fopen( "sixense_log.txt", "w" );
+ }
+}
+
+static void
+ key(unsigned char key, int x, int y)
+{
+ switch (key)
+ {
+ case 27 :
+ case 'Q':
+ case 'q': glutLeaveMainLoop () ; break;
+
+ case 'L':
+ case 'l': toggleLogging(); break;
+
+ case 'P':
+ case 'p': display_pos_enabled=(display_pos_enabled?0:1); break;
+
+ case ']': camera_dist *= 0.99f; break;
+ case '[': camera_dist *= 1.01f; break;
+
+ case ' ': graph_paused=!graph_paused; break;
+
+ case 'g': ++graph_mode; if(graph_mode==4) graph_mode=0; break;
+ case 'a': auto_graph_bounds=!auto_graph_bounds; break;
+
+ case 'm': draw_mouse_pointers_enabled=!draw_mouse_pointers_enabled; break;
+
+ default:
+ break;
+ }
+
+ glutPostRedisplay();
+}
+
+static void
+ idle(void)
+{
+ glutPostRedisplay();
+}
+
+const GLfloat light_ambient[] = { 0.0f, 0.0f, 0.0f, 1.0f };
+const GLfloat light_diffuse[] = { 1.0f, 1.0f, 1.0f, 1.0f };
+const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
+const GLfloat light_position[] = { 2.0f, 5.0f, 5.0f, 0.0f };
+
+const GLfloat mat_ambient[] = { 0.7f, 0.7f, 0.7f, 1.0f };
+const GLfloat mat_diffuse[] = { 0.8f, 0.8f, 0.8f, 1.0f };
+const GLfloat mat_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
+const GLfloat high_shininess[] = { 100.0f };
+
+int main(int argc, char *argv[])
+{
+ int i;
+ float hemi_vec[3] = { 0, 1, 0 };
+
+ glutInitWindowSize(640,480);
+ glutInitWindowPosition(40,40);
+ glutInit(&argc, argv);
+ //glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH | GLUT_MULTISAMPLE);
+ glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
+
+ glutCreateWindow("Sixense Test");
+
+ glutReshapeFunc(resize);
+ glutDisplayFunc(display);
+ glutKeyboardFunc(key);
+ glutIdleFunc(idle);
+
+ glutSetOption ( GLUT_ACTION_ON_WINDOW_CLOSE, GLUT_ACTION_CONTINUE_EXECUTION ) ;
+
+ glClearColor(0.6f,0.6f,0.7f,1.0f);
+ glEnable(GL_CULL_FACE);
+ glCullFace(GL_BACK);
+
+ glEnable(GL_DEPTH_TEST);
+ glDepthFunc(GL_LESS);
+
+ glEnable(GL_LIGHT0);
+ glEnable(GL_NORMALIZE);
+ glEnable(GL_COLOR_MATERIAL);
+
+ glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
+ glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
+ glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
+ glLightfv(GL_LIGHT0, GL_POSITION, light_position);
+
+ glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
+ glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
+ glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
+ glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);
+
+ // Init sixense
+ sixenseInit();
+
+ // Init the controller manager. This makes sure the controllers are present, assigned to left and right hands, and that
+ // the hemisphere calibration is complete.
+ sixenseUtils::getTheControllerManager()->setGameType( sixenseUtils::ControllerManager::ONE_PLAYER_TWO_CONTROLLER );
+ sixenseUtils::getTheControllerManager()->registerSetupCallback( controller_manager_setup_callback );
+
+ glutMainLoop();
+
+ sixenseExit();
+
+ return EXIT_SUCCESS;
+}
diff --git a/SixenseSDK/src/sixense_simple3d/progs/demos/smooth_opengl3/Makefile.am b/SixenseSDK/src/sixense_simple3d/progs/demos/smooth_opengl3/Makefile.am
new file mode 100755
index 0000000..493b742
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/progs/demos/smooth_opengl3/Makefile.am
@@ -0,0 +1,5 @@
+EXTRA_DIST = smooth_opengl3.c smooth_opengl3.dsp
+noinst_PROGRAMS = smooth_opengl3
+smooth_opengl3_SOURCES = smooth_opengl3.c
+smooth_opengl3_LDFLAGS = -export-dynamic ../../../src/lib@LIBRARY@.la
+smooth_opengl3_CFLAGS = -I$(top_srcdir)/include $(X_CFLAGS)
diff --git a/SixenseSDK/src/sixense_simple3d/progs/demos/smooth_opengl3/Makefile.in b/SixenseSDK/src/sixense_simple3d/progs/demos/smooth_opengl3/Makefile.in
new file mode 100755
index 0000000..b409470
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/progs/demos/smooth_opengl3/Makefile.in
@@ -0,0 +1,465 @@
+# Makefile.in generated by automake 1.10.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = smooth_opengl3$(EXEEXT)
+subdir = progs/demos/smooth_opengl3
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_smooth_opengl3_OBJECTS = smooth_opengl3-smooth_opengl3.$(OBJEXT)
+smooth_opengl3_OBJECTS = $(am_smooth_opengl3_OBJECTS)
+smooth_opengl3_LDADD = $(LDADD)
+smooth_opengl3_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(smooth_opengl3_CFLAGS) \
+ $(CFLAGS) $(smooth_opengl3_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(smooth_opengl3_SOURCES)
+DIST_SOURCES = $(smooth_opengl3_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXPORT_FLAGS = @EXPORT_FLAGS@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+GL_LIBS = @GL_LIBS@
+GREP = @GREP@
+HEADER = @HEADER@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBRARY = @LIBRARY@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIBXI = @LIBXI@
+LIBXXF86VM = @LIBXXF86VM@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NMEDIT = @NMEDIT@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+VERSION_INFO = @VERSION_INFO@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXTRA_DIST = smooth_opengl3.c smooth_opengl3.dsp
+smooth_opengl3_SOURCES = smooth_opengl3.c
+smooth_opengl3_LDFLAGS = -export-dynamic ../../../src/lib@LIBRARY@.la
+smooth_opengl3_CFLAGS = -I$(top_srcdir)/include $(X_CFLAGS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu progs/demos/smooth_opengl3/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu progs/demos/smooth_opengl3/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+clean-noinstPROGRAMS:
+ @list='$(noinst_PROGRAMS)'; for p in $$list; do \
+ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f $$p $$f"; \
+ rm -f $$p $$f ; \
+ done
+smooth_opengl3$(EXEEXT): $(smooth_opengl3_OBJECTS) $(smooth_opengl3_DEPENDENCIES)
+ @rm -f smooth_opengl3$(EXEEXT)
+ $(smooth_opengl3_LINK) $(smooth_opengl3_OBJECTS) $(smooth_opengl3_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smooth_opengl3-smooth_opengl3.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+smooth_opengl3-smooth_opengl3.o: smooth_opengl3.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(smooth_opengl3_CFLAGS) $(CFLAGS) -MT smooth_opengl3-smooth_opengl3.o -MD -MP -MF $(DEPDIR)/smooth_opengl3-smooth_opengl3.Tpo -c -o smooth_opengl3-smooth_opengl3.o `test -f 'smooth_opengl3.c' || echo '$(srcdir)/'`smooth_opengl3.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/smooth_opengl3-smooth_opengl3.Tpo $(DEPDIR)/smooth_opengl3-smooth_opengl3.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='smooth_opengl3.c' object='smooth_opengl3-smooth_opengl3.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(smooth_opengl3_CFLAGS) $(CFLAGS) -c -o smooth_opengl3-smooth_opengl3.o `test -f 'smooth_opengl3.c' || echo '$(srcdir)/'`smooth_opengl3.c
+
+smooth_opengl3-smooth_opengl3.obj: smooth_opengl3.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(smooth_opengl3_CFLAGS) $(CFLAGS) -MT smooth_opengl3-smooth_opengl3.obj -MD -MP -MF $(DEPDIR)/smooth_opengl3-smooth_opengl3.Tpo -c -o smooth_opengl3-smooth_opengl3.obj `if test -f 'smooth_opengl3.c'; then $(CYGPATH_W) 'smooth_opengl3.c'; else $(CYGPATH_W) '$(srcdir)/smooth_opengl3.c'; fi`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/smooth_opengl3-smooth_opengl3.Tpo $(DEPDIR)/smooth_opengl3-smooth_opengl3.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='smooth_opengl3.c' object='smooth_opengl3-smooth_opengl3.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(smooth_opengl3_CFLAGS) $(CFLAGS) -c -o smooth_opengl3-smooth_opengl3.obj `if test -f 'smooth_opengl3.c'; then $(CYGPATH_W) 'smooth_opengl3.c'; else $(CYGPATH_W) '$(srcdir)/smooth_opengl3.c'; fi`
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstPROGRAMS ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/SixenseSDK/src/sixense_simple3d/progs/demos/smooth_opengl3/smooth_opengl3.c b/SixenseSDK/src/sixense_simple3d/progs/demos/smooth_opengl3/smooth_opengl3.c
new file mode 100755
index 0000000..a36f090
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/progs/demos/smooth_opengl3/smooth_opengl3.c
@@ -0,0 +1,422 @@
+/*
+ * smooth_opengl3.c, based on smooth.c, which is (c) by SGI, see below.
+ * This program demonstrates smooth shading in a way which is fully
+ * OpenGL-3.1-compliant.
+ * A smooth shaded polygon is drawn in a 2-D projection.
+ */
+
+/*
+ * Original copyright notice from smooth.c:
+ *
+ * License Applicability. Except to the extent portions of this file are
+ * made subject to an alternative license as permitted in the SGI Free
+ * Software License B, Version 1.1 (the "License"), the contents of this
+ * file are subject only to the provisions of the License. You may not use
+ * this file except in compliance with the License. You may obtain a copy
+ * of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
+ * Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
+ *
+ * http://oss.sgi.com/projects/FreeB
+ *
+ * Note that, as provided in the License, the Software is distributed on an
+ * "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
+ * DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
+ * CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
+ * PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
+ *
+ * Original Code. The Original Code is: OpenGL Sample Implementation,
+ * Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
+ * Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
+ * Copyright in any portions created by third parties is as indicated
+ * elsewhere herein. All Rights Reserved.
+ *
+ * Additional Notice Provisions: The application programming interfaces
+ * established by SGI in conjunction with the Original Code are The
+ * OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
+ * April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
+ * 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
+ * Window System(R) (Version 1.3), released October 19, 1998. This software
+ * was created using the OpenGL(R) version 1.2.1 Sample Implementation
+ * published by SGI, but has not been independently verified as being
+ * compliant with the OpenGL(R) version 1.2.1 Specification.
+ *
+ */
+
+#include <GL/freeglut.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <stddef.h>
+#include <string.h>
+
+/* report GL errors, if any, to stderr */
+void checkError(const char *functionName)
+{
+ GLenum error;
+ while (( error = glGetError() ) != GL_NO_ERROR) {
+ fprintf (stderr, "GL error 0x%X detected in %s\n", error, functionName);
+ }
+}
+
+/* extension #defines, types and entries, avoiding a dependency on additional
+ libraries like GLEW or the GL/glext.h header */
+#ifndef GL_ARRAY_BUFFER
+#define GL_ARRAY_BUFFER 0x8892
+#endif
+
+#ifndef GL_STATIC_DRAW
+#define GL_STATIC_DRAW 0x88E4
+#endif
+
+#ifndef GL_FRAGMENT_SHADER
+#define GL_FRAGMENT_SHADER 0x8B30
+#endif
+
+#ifndef GL_VERTEX_SHADER
+#define GL_VERTEX_SHADER 0x8B31
+#endif
+
+#ifndef GL_SHADING_LANGUAGE_VERSION
+#define GL_SHADING_LANGUAGE_VERSION 0x8B8C
+#endif
+
+#ifndef GL_COMPILE_STATUS
+#define GL_COMPILE_STATUS 0x8B81
+#endif
+
+#ifndef GL_LINK_STATUS
+#define GL_LINK_STATUS 0x8B82
+#endif
+
+#ifndef GL_INFO_LOG_LENGTH
+#define GL_INFO_LOG_LENGTH 0x8B84
+#endif
+
+typedef ptrdiff_t ourGLsizeiptr;
+typedef char ourGLchar;
+
+#if defined(WIN32)
+#ifndef APIENTRY
+#define APIENTRY
+#endif
+
+typedef void (APIENTRY *PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers);
+typedef void (APIENTRY *PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer);
+typedef void (APIENTRY *PFNGLBUFFERDATAPROC) (GLenum target, ourGLsizeiptr size, const GLvoid *data, GLenum usage);
+typedef GLuint (APIENTRY *PFNGLCREATESHADERPROC) (GLenum type);
+typedef void (APIENTRY *PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const ourGLchar **string, const GLint *length);
+typedef void (APIENTRY *PFNGLCOMPILESHADERPROC) (GLuint shader);
+typedef GLuint (APIENTRY *PFNGLCREATEPROGRAMPROC) (void);
+typedef void (APIENTRY *PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader);
+typedef void (APIENTRY *PFNGLLINKPROGRAMPROC) (GLuint program);
+typedef void (APIENTRY *PFNGLUSEPROGRAMPROC) (GLuint program);
+typedef void (APIENTRY *PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params);
+typedef void (APIENTRY *PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, ourGLchar *infoLog);
+typedef void (APIENTRY *PFNGLGETPROGRAMIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRY *PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, ourGLchar *infoLog);
+typedef GLint (APIENTRY *PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const ourGLchar *name);
+typedef void (APIENTRY *PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer);
+typedef void (APIENTRY *PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index);
+typedef GLint (APIENTRY *PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const ourGLchar *name);
+typedef void (APIENTRY *PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+#endif /* defined(WIN32) */
+
+PFNGLGENBUFFERSPROC gl_GenBuffers;
+PFNGLBINDBUFFERPROC gl_BindBuffer;
+PFNGLBUFFERDATAPROC gl_BufferData;
+PFNGLCREATESHADERPROC gl_CreateShader;
+PFNGLSHADERSOURCEPROC gl_ShaderSource;
+PFNGLCOMPILESHADERPROC gl_CompileShader;
+PFNGLCREATEPROGRAMPROC gl_CreateProgram;
+PFNGLATTACHSHADERPROC gl_AttachShader;
+PFNGLLINKPROGRAMPROC gl_LinkProgram;
+PFNGLUSEPROGRAMPROC gl_UseProgram;
+PFNGLGETSHADERIVPROC gl_GetShaderiv;
+PFNGLGETSHADERINFOLOGPROC gl_GetShaderInfoLog;
+PFNGLGETPROGRAMIVPROC gl_GetProgramiv;
+PFNGLGETPROGRAMINFOLOGPROC gl_GetProgramInfoLog;
+PFNGLGETATTRIBLOCATIONPROC gl_GetAttribLocation;
+PFNGLVERTEXATTRIBPOINTERPROC gl_VertexAttribPointer;
+PFNGLENABLEVERTEXATTRIBARRAYPROC gl_EnableVertexAttribArray;
+PFNGLGETUNIFORMLOCATIONPROC gl_GetUniformLocation;
+PFNGLUNIFORMMATRIX4FVPROC gl_UniformMatrix4fv;
+
+void initExtensionEntries(void)
+{
+ gl_GenBuffers = (PFNGLGENBUFFERSPROC) glutGetProcAddress ("glGenBuffers");
+ gl_BindBuffer = (PFNGLBINDBUFFERPROC) glutGetProcAddress ("glBindBuffer");
+ gl_BufferData = (PFNGLBUFFERDATAPROC) glutGetProcAddress ("glBufferData");
+ gl_CreateShader = (PFNGLCREATESHADERPROC) glutGetProcAddress ("glCreateShader");
+ gl_ShaderSource = (PFNGLSHADERSOURCEPROC) glutGetProcAddress ("glShaderSource");
+ gl_CompileShader = (PFNGLCOMPILESHADERPROC) glutGetProcAddress ("glCompileShader");
+ gl_CreateProgram = (PFNGLCREATEPROGRAMPROC) glutGetProcAddress ("glCreateProgram");
+ gl_AttachShader = (PFNGLATTACHSHADERPROC) glutGetProcAddress ("glAttachShader");
+ gl_LinkProgram = (PFNGLLINKPROGRAMPROC) glutGetProcAddress ("glLinkProgram");
+ gl_UseProgram = (PFNGLUSEPROGRAMPROC) glutGetProcAddress ("glUseProgram");
+ gl_GetShaderiv = (PFNGLGETSHADERIVPROC) glutGetProcAddress ("glGetShaderiv");
+ gl_GetShaderInfoLog = (PFNGLGETSHADERINFOLOGPROC) glutGetProcAddress ("glGetShaderInfoLog");
+ gl_GetProgramiv = (PFNGLGETPROGRAMIVPROC) glutGetProcAddress ("glGetProgramiv");
+ gl_GetProgramInfoLog = (PFNGLGETPROGRAMINFOLOGPROC) glutGetProcAddress ("glGetProgramInfoLog");
+ gl_GetAttribLocation = (PFNGLGETATTRIBLOCATIONPROC) glutGetProcAddress ("glGetAttribLocation");
+ gl_VertexAttribPointer = (PFNGLVERTEXATTRIBPOINTERPROC) glutGetProcAddress ("glVertexAttribPointer");
+ gl_EnableVertexAttribArray = (PFNGLENABLEVERTEXATTRIBARRAYPROC) glutGetProcAddress ("glEnableVertexAttribArray");
+ gl_GetUniformLocation = (PFNGLGETUNIFORMLOCATIONPROC) glutGetProcAddress ("glGetUniformLocation");
+ gl_UniformMatrix4fv = (PFNGLUNIFORMMATRIX4FVPROC) glutGetProcAddress ("glUniformMatrix4fv");
+}
+
+/* vertex array data for a colored 2D triangle, consisting of RGB color values
+ and XY coordinates */
+const GLfloat varray[] = {
+ 1.0f, 0.0f, 0.0f, /* red */
+ 5.0f, 5.0f, /* lower left */
+
+ 0.0f, 1.0f, 0.0f, /* green */
+ 25.0f, 5.0f, /* lower right */
+
+ 0.0f, 0.0f, 1.0f, /* blue */
+ 5.0f, 25.0f /* upper left */
+};
+
+/* ISO C somehow enforces this silly use of 'enum' for compile-time constants */
+enum {
+ numColorComponents = 3,
+ numVertexComponents = 2,
+ stride = sizeof(GLfloat) * (numColorComponents + numVertexComponents),
+ numElements = sizeof(varray) / stride
+};
+
+/* the name of the vertex buffer object */
+GLuint vertexBufferName;
+
+void initBuffer(void)
+{
+ gl_GenBuffers (1, &vertexBufferName);
+ gl_BindBuffer (GL_ARRAY_BUFFER, vertexBufferName);
+ gl_BufferData (GL_ARRAY_BUFFER, sizeof(varray), varray, GL_STATIC_DRAW);
+ checkError ("initBuffer");
+}
+
+const ourGLchar *vertexShaderSource[] = {
+ "#version 140\n",
+ "uniform mat4 fg_ProjectionMatrix;\n",
+ "in vec4 fg_Color;\n",
+ "in vec4 fg_Vertex;\n",
+ "smooth out vec4 fg_SmoothColor;\n",
+ "void main()\n",
+ "{\n",
+ " fg_SmoothColor = fg_Color;\n",
+ " gl_Position = fg_ProjectionMatrix * fg_Vertex;\n",
+ "}\n"
+};
+
+const ourGLchar *fragmentShaderSource[] = {
+ "#version 140\n",
+ "smooth in vec4 fg_SmoothColor;\n",
+ "out vec4 fg_FragColor;\n",
+ "void main(void)\n",
+ "{\n",
+ " fg_FragColor = fg_SmoothColor;\n",
+ "}\n"
+};
+
+void compileAndCheck(GLuint shader)
+{
+ GLint status;
+ gl_CompileShader (shader);
+ gl_GetShaderiv (shader, GL_COMPILE_STATUS, &status);
+ if (status == GL_FALSE) {
+ GLint infoLogLength;
+ ourGLchar *infoLog;
+ gl_GetShaderiv (shader, GL_INFO_LOG_LENGTH, &infoLogLength);
+ infoLog = (ourGLchar*) malloc (infoLogLength);
+ gl_GetShaderInfoLog (shader, infoLogLength, NULL, infoLog);
+ fprintf (stderr, "compile log: %s\n", infoLog);
+ free (infoLog);
+ }
+}
+
+GLuint compileShaderSource(GLenum type, GLsizei count, const ourGLchar **string)
+{
+ GLuint shader = gl_CreateShader (type);
+ gl_ShaderSource (shader, count, string, NULL);
+ compileAndCheck (shader);
+ return shader;
+}
+
+void linkAndCheck(GLuint program)
+{
+ GLint status;
+ gl_LinkProgram (program);
+ gl_GetProgramiv (program, GL_LINK_STATUS, &status);
+ if (status == GL_FALSE) {
+ GLint infoLogLength;
+ ourGLchar *infoLog;
+ gl_GetProgramiv (program, GL_INFO_LOG_LENGTH, &infoLogLength);
+ infoLog = (ourGLchar*) malloc (infoLogLength);
+ gl_GetProgramInfoLog (program, infoLogLength, NULL, infoLog);
+ fprintf (stderr, "link log: %s\n", infoLog);
+ free (infoLog);
+ }
+}
+
+GLuint createProgram(GLuint vertexShader, GLuint fragmentShader)
+{
+ GLuint program = gl_CreateProgram ();
+ if (vertexShader != 0) {
+ gl_AttachShader (program, vertexShader);
+ }
+ if (fragmentShader != 0) {
+ gl_AttachShader (program, fragmentShader);
+ }
+ linkAndCheck (program);
+ return program;
+}
+
+GLuint fgProjectionMatrixIndex;
+GLuint fgColorIndex;
+GLuint fgVertexIndex;
+
+void initShader(void)
+{
+ const GLsizei vertexShaderLines = sizeof(vertexShaderSource) / sizeof(ourGLchar*);
+ GLuint vertexShader =
+ compileShaderSource (GL_VERTEX_SHADER, vertexShaderLines, vertexShaderSource);
+
+ const GLsizei fragmentShaderLines = sizeof(fragmentShaderSource) / sizeof(ourGLchar*);
+ GLuint fragmentShader =
+ compileShaderSource (GL_FRAGMENT_SHADER, fragmentShaderLines, fragmentShaderSource);
+
+ GLuint program = createProgram (vertexShader, fragmentShader);
+
+ gl_UseProgram (program);
+
+ fgProjectionMatrixIndex = gl_GetUniformLocation(program, "fg_ProjectionMatrix");
+
+ fgColorIndex = gl_GetAttribLocation(program, "fg_Color");
+ gl_EnableVertexAttribArray (fgColorIndex);
+
+ fgVertexIndex = gl_GetAttribLocation(program, "fg_Vertex");
+ gl_EnableVertexAttribArray (fgVertexIndex);
+
+ checkError ("initShader");
+}
+
+void initRendering(void)
+{
+ glClearColor (0.0, 0.0, 0.0, 0.0);
+ checkError ("initRendering");
+}
+
+void init(void)
+{
+ initExtensionEntries ();
+ initBuffer ();
+ initShader ();
+ initRendering ();
+}
+
+void dumpInfo(void)
+{
+ printf ("Vendor: %s\n", glGetString (GL_VENDOR));
+ printf ("Renderer: %s\n", glGetString (GL_RENDERER));
+ printf ("Version: %s\n", glGetString (GL_VERSION));
+ printf ("GLSL: %s\n", glGetString (GL_SHADING_LANGUAGE_VERSION));
+ checkError ("dumpInfo");
+}
+
+const GLvoid *bufferObjectPtr (GLsizei index)
+{
+ return (const GLvoid *) (((char *) NULL) + index);
+}
+
+GLfloat projectionMatrix[16];
+
+void triangle(void)
+{
+ gl_UniformMatrix4fv (fgProjectionMatrixIndex, 1, GL_FALSE, projectionMatrix);
+
+ gl_BindBuffer (GL_ARRAY_BUFFER, vertexBufferName);
+ gl_VertexAttribPointer (fgColorIndex, numColorComponents, GL_FLOAT, GL_FALSE,
+ stride, bufferObjectPtr (0));
+ gl_VertexAttribPointer (fgVertexIndex, numVertexComponents, GL_FLOAT, GL_FALSE,
+ stride, bufferObjectPtr (sizeof(GLfloat) * numColorComponents));
+ glDrawArrays(GL_TRIANGLES, 0, numElements);
+ checkError ("triangle");
+}
+
+void display(void)
+{
+ glClear (GL_COLOR_BUFFER_BIT);
+ triangle ();
+ glFlush ();
+ checkError ("display");
+}
+
+void loadOrthof(GLfloat *m, GLfloat l, GLfloat r, GLfloat b, GLfloat t,
+ GLfloat n, GLfloat f)
+{
+ m[ 0] = 2.0f / (r - l);
+ m[ 1] = 0.0f;
+ m[ 2] = 0.0f;
+ m[ 3] = 0.0f;
+
+ m[ 4] = 0.0f;
+ m[ 5] = 2.0f / (t - b);
+ m[ 6] = 0.0f;
+ m[ 7] = 0.0f;
+
+ m[ 8] = 0.0f;
+ m[ 9] = 0.0f;
+ m[10] = -2.0f / (f - n);
+ m[11] = 0.0f;
+
+ m[12] = -(r + l) / (r - l);
+ m[13] = -(t + b) / (t - b);
+ m[14] = -(f + n) / (f - n);
+ m[15] = 1.0f;
+}
+
+void loadOrtho2Df(GLfloat *m, GLfloat l, GLfloat r, GLfloat b, GLfloat t)
+{
+ loadOrthof (m, l, r, b, t, -1.0f, 1.0f);
+}
+
+void reshape (int w, int h)
+{
+ glViewport (0, 0, (GLsizei) w, (GLsizei) h);
+ if (w <= h) {
+ loadOrtho2Df (projectionMatrix, 0.0f, 30.0f, 0.0f, 30.0f * (GLfloat) h/(GLfloat) w);
+ } else {
+ loadOrtho2Df (projectionMatrix, 0.0f, 30.0f * (GLfloat) w/(GLfloat) h, 0.0f, 30.0f);
+ }
+ checkError ("reshape");
+}
+
+void keyboard(unsigned char key, int x, int y)
+{
+ switch (key) {
+ case 27:
+ exit(0);
+ break;
+ }
+}
+
+int main(int argc, char** argv)
+{
+ glutInit(&argc, argv);
+ glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
+ /* add command line argument "classic" for a pre-3.x context */
+ if ((argc != 2) || (strcmp (argv[1], "classic") != 0)) {
+ glutInitContextVersion (3, 1);
+ glutInitContextFlags (GLUT_FORWARD_COMPATIBLE | GLUT_DEBUG);
+ }
+ glutInitWindowSize (500, 500);
+ glutInitWindowPosition (100, 100);
+ glutCreateWindow (argv[0]);
+ dumpInfo ();
+ init ();
+ glutDisplayFunc(display);
+ glutReshapeFunc(reshape);
+ glutKeyboardFunc (keyboard);
+ glutMainLoop();
+ return 0;
+}
diff --git a/SixenseSDK/src/sixense_simple3d/progs/demos/smooth_opengl3/smooth_opengl3.dsp b/SixenseSDK/src/sixense_simple3d/progs/demos/smooth_opengl3/smooth_opengl3.dsp
new file mode 100755
index 0000000..d8ec743
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/progs/demos/smooth_opengl3/smooth_opengl3.dsp
@@ -0,0 +1,100 @@
+# Microsoft Developer Studio Project File - Name="smooth_opengl3" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=smooth_opengl3 - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "smooth_opengl3.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "smooth_opengl3.mak" CFG="smooth_opengl3 - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "smooth_opengl3 - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "smooth_opengl3 - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "smooth_opengl3 - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../../include" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /libpath:"../../../Release"
+
+!ELSEIF "$(CFG)" == "smooth_opengl3 - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"../../../Debug"
+
+!ENDIF
+
+# Begin Target
+
+# Name "smooth_opengl3 - Win32 Release"
+# Name "smooth_opengl3 - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\smooth_opengl3.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/SixenseSDK/src/sixense_simple3d/progs/demos/smooth_opengl3/smooth_opengl3Static.dsp b/SixenseSDK/src/sixense_simple3d/progs/demos/smooth_opengl3/smooth_opengl3Static.dsp
new file mode 100755
index 0000000..2a81243
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/progs/demos/smooth_opengl3/smooth_opengl3Static.dsp
@@ -0,0 +1,102 @@
+# Microsoft Developer Studio Project File - Name="smooth_opengl3Static" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=smooth_opengl3Static - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "smooth_opengl3Static.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "smooth_opengl3Static.mak" CFG="smooth_opengl3Static - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "smooth_opengl3Static - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "smooth_opengl3Static - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "smooth_opengl3Static - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "smooth_opengl3Static___Win32_Release"
+# PROP BASE Intermediate_Dir "smooth_opengl3Static___Win32_Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "ReleaseStatic"
+# PROP Intermediate_Dir "ReleaseStatic"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../../include" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "FREEGLUT_STATIC" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /libpath:"../../../ReleaseStatic"
+
+!ELSEIF "$(CFG)" == "smooth_opengl3Static - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "smooth_opengl3Static___Win32_Debug"
+# PROP BASE Intermediate_Dir "smooth_opengl3Static___Win32_Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "DebugStatic"
+# PROP Intermediate_Dir "DebugStatic"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "FREEGLUT_STATIC" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"../../../DebugStatic"
+
+!ENDIF
+
+# Begin Target
+
+# Name "smooth_opengl3Static - Win32 Release"
+# Name "smooth_opengl3Static - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\smooth_opengl3.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/SixenseSDK/src/sixense_simple3d/progs/demos/spaceball/Makefile.am b/SixenseSDK/src/sixense_simple3d/progs/demos/spaceball/Makefile.am
new file mode 100755
index 0000000..10b628c
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/progs/demos/spaceball/Makefile.am
@@ -0,0 +1,6 @@
+EXTRA_DIST = spaceball.c vmath.c vmath.h vmath.inl
+
+noinst_PROGRAMS = spaceball
+spaceball_SOURCES = spaceball.c vmath.c
+spaceball_LDFLAGS = -export-dynamic ../../../src/lib@LIBRARY@.la
+spaceball_CFLAGS = -I$(top_srcdir)/include $(X_CFLAGS) \ No newline at end of file
diff --git a/SixenseSDK/src/sixense_simple3d/progs/demos/spaceball/Makefile.in b/SixenseSDK/src/sixense_simple3d/progs/demos/spaceball/Makefile.in
new file mode 100755
index 0000000..d695cb6
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/progs/demos/spaceball/Makefile.in
@@ -0,0 +1,481 @@
+# Makefile.in generated by automake 1.10.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = spaceball$(EXEEXT)
+subdir = progs/demos/spaceball
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_spaceball_OBJECTS = spaceball-spaceball.$(OBJEXT) \
+ spaceball-vmath.$(OBJEXT)
+spaceball_OBJECTS = $(am_spaceball_OBJECTS)
+spaceball_LDADD = $(LDADD)
+spaceball_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(spaceball_CFLAGS) \
+ $(CFLAGS) $(spaceball_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(spaceball_SOURCES)
+DIST_SOURCES = $(spaceball_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXPORT_FLAGS = @EXPORT_FLAGS@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+GL_LIBS = @GL_LIBS@
+GREP = @GREP@
+HEADER = @HEADER@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBRARY = @LIBRARY@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIBXI = @LIBXI@
+LIBXXF86VM = @LIBXXF86VM@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NMEDIT = @NMEDIT@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+VERSION_INFO = @VERSION_INFO@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXTRA_DIST = spaceball.c vmath.c vmath.h vmath.inl
+spaceball_SOURCES = spaceball.c vmath.c
+spaceball_LDFLAGS = -export-dynamic ../../../src/lib@LIBRARY@.la
+spaceball_CFLAGS = -I$(top_srcdir)/include $(X_CFLAGS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu progs/demos/spaceball/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu progs/demos/spaceball/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+clean-noinstPROGRAMS:
+ @list='$(noinst_PROGRAMS)'; for p in $$list; do \
+ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f $$p $$f"; \
+ rm -f $$p $$f ; \
+ done
+spaceball$(EXEEXT): $(spaceball_OBJECTS) $(spaceball_DEPENDENCIES)
+ @rm -f spaceball$(EXEEXT)
+ $(spaceball_LINK) $(spaceball_OBJECTS) $(spaceball_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spaceball-spaceball.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spaceball-vmath.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+spaceball-spaceball.o: spaceball.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(spaceball_CFLAGS) $(CFLAGS) -MT spaceball-spaceball.o -MD -MP -MF $(DEPDIR)/spaceball-spaceball.Tpo -c -o spaceball-spaceball.o `test -f 'spaceball.c' || echo '$(srcdir)/'`spaceball.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/spaceball-spaceball.Tpo $(DEPDIR)/spaceball-spaceball.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='spaceball.c' object='spaceball-spaceball.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(spaceball_CFLAGS) $(CFLAGS) -c -o spaceball-spaceball.o `test -f 'spaceball.c' || echo '$(srcdir)/'`spaceball.c
+
+spaceball-spaceball.obj: spaceball.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(spaceball_CFLAGS) $(CFLAGS) -MT spaceball-spaceball.obj -MD -MP -MF $(DEPDIR)/spaceball-spaceball.Tpo -c -o spaceball-spaceball.obj `if test -f 'spaceball.c'; then $(CYGPATH_W) 'spaceball.c'; else $(CYGPATH_W) '$(srcdir)/spaceball.c'; fi`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/spaceball-spaceball.Tpo $(DEPDIR)/spaceball-spaceball.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='spaceball.c' object='spaceball-spaceball.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(spaceball_CFLAGS) $(CFLAGS) -c -o spaceball-spaceball.obj `if test -f 'spaceball.c'; then $(CYGPATH_W) 'spaceball.c'; else $(CYGPATH_W) '$(srcdir)/spaceball.c'; fi`
+
+spaceball-vmath.o: vmath.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(spaceball_CFLAGS) $(CFLAGS) -MT spaceball-vmath.o -MD -MP -MF $(DEPDIR)/spaceball-vmath.Tpo -c -o spaceball-vmath.o `test -f 'vmath.c' || echo '$(srcdir)/'`vmath.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/spaceball-vmath.Tpo $(DEPDIR)/spaceball-vmath.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='vmath.c' object='spaceball-vmath.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(spaceball_CFLAGS) $(CFLAGS) -c -o spaceball-vmath.o `test -f 'vmath.c' || echo '$(srcdir)/'`vmath.c
+
+spaceball-vmath.obj: vmath.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(spaceball_CFLAGS) $(CFLAGS) -MT spaceball-vmath.obj -MD -MP -MF $(DEPDIR)/spaceball-vmath.Tpo -c -o spaceball-vmath.obj `if test -f 'vmath.c'; then $(CYGPATH_W) 'vmath.c'; else $(CYGPATH_W) '$(srcdir)/vmath.c'; fi`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/spaceball-vmath.Tpo $(DEPDIR)/spaceball-vmath.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='vmath.c' object='spaceball-vmath.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(spaceball_CFLAGS) $(CFLAGS) -c -o spaceball-vmath.obj `if test -f 'vmath.c'; then $(CYGPATH_W) 'vmath.c'; else $(CYGPATH_W) '$(srcdir)/vmath.c'; fi`
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstPROGRAMS ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/SixenseSDK/src/sixense_simple3d/progs/demos/spaceball/spaceball.c b/SixenseSDK/src/sixense_simple3d/progs/demos/spaceball/spaceball.c
new file mode 100755
index 0000000..52da93a
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/progs/demos/spaceball/spaceball.c
@@ -0,0 +1,177 @@
+/* Spaceball demo
+ *
+ * Written by John Tsiombikas <nuclear@member.fsf.org>
+ * (converted from the libspnav cube example)
+ *
+ * Use the spaceball to move and rotate the colored cube.
+ * Pressing any button will reset the cube at its original location.
+ *
+ * Press escape or q to exit.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <GL/freeglut.h>
+#include "vmath.h"
+
+#ifndef M_PI
+#define M_PI 3.14159265358979323846264338327950
+#endif
+
+void draw_cube(void);
+
+/* callbacks */
+void disp(void);
+void reshape(int x, int y);
+void keyb(unsigned char key, int x, int y);
+void sbmot(int x, int y, int z); /* spaceball translation */
+void sbrot(int x, int y, int z); /* spaceball rotation */
+void sbbut(int bn, int state); /* spaceball button */
+
+vec3_t pos = {0, 0, -6};
+quat_t rot = {0, 0, 0, 1};
+
+int main(int argc, char **argv)
+{
+ glutInit(&argc, argv);
+ glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
+ glutCreateWindow("spaceball demo");
+
+ glutDisplayFunc(disp);
+ glutReshapeFunc(reshape);
+ glutKeyboardFunc(keyb);
+ glutSpaceballMotionFunc(sbmot);
+ glutSpaceballRotateFunc(sbrot);
+ glutSpaceballButtonFunc(sbbut);
+
+ glEnable(GL_CULL_FACE);
+
+ glutMainLoop();
+ return 0;
+}
+
+void disp(void)
+{
+ mat4_t xform;
+
+ quat_to_mat(xform, rot);
+
+ glClear(GL_COLOR_BUFFER_BIT);
+
+ glMatrixMode(GL_MODELVIEW);
+ glLoadIdentity();
+ glTranslatef(pos.x, pos.y, pos.z);
+ glMultMatrixf((float*)xform);
+
+ draw_cube();
+
+ glutSwapBuffers();
+}
+
+void draw_cube(void)
+{
+ glBegin(GL_QUADS);
+ /* face +Z */
+ glNormal3f(0, 0, 1);
+ glColor3f(1, 0, 0);
+ glVertex3f(-1, -1, 1);
+ glVertex3f(1, -1, 1);
+ glVertex3f(1, 1, 1);
+ glVertex3f(-1, 1, 1);
+ /* face +X */
+ glNormal3f(1, 0, 0);
+ glColor3f(0, 1, 0);
+ glVertex3f(1, -1, 1);
+ glVertex3f(1, -1, -1);
+ glVertex3f(1, 1, -1);
+ glVertex3f(1, 1, 1);
+ /* face -Z */
+ glNormal3f(0, 0, -1);
+ glColor3f(0, 0, 1);
+ glVertex3f(1, -1, -1);
+ glVertex3f(-1, -1, -1);
+ glVertex3f(-1, 1, -1);
+ glVertex3f(1, 1, -1);
+ /* face -X */
+ glNormal3f(-1, 0, 0);
+ glColor3f(1, 1, 0);
+ glVertex3f(-1, -1, -1);
+ glVertex3f(-1, -1, 1);
+ glVertex3f(-1, 1, 1);
+ glVertex3f(-1, 1, -1);
+ /* face +Y */
+ glNormal3f(0, 1, 0);
+ glColor3f(0, 1, 1);
+ glVertex3f(-1, 1, 1);
+ glVertex3f(1, 1, 1);
+ glVertex3f(1, 1, -1);
+ glVertex3f(-1, 1, -1);
+ /* face -Y */
+ glNormal3f(0, -1, 0);
+ glColor3f(1, 0, 1);
+ glVertex3f(-1, -1, -1);
+ glVertex3f(1, -1, -1);
+ glVertex3f(1, -1, 1);
+ glVertex3f(-1, -1, 1);
+ glEnd();
+}
+
+/* 45deg fov */
+#define FOV (M_PI / 4.0)
+
+void reshape(int x, int y)
+{
+ float aspect = (float)x / (float)y;
+ float halfy = (float)tan(FOV / 2.0);
+ float halfx = halfy * aspect;
+
+ glViewport(0, 0, x, y);
+
+ glMatrixMode(GL_PROJECTION);
+ glLoadIdentity();
+ glFrustum(-halfx, halfx, -halfy, halfy, 1.0, 1000.0);
+}
+
+void keyb(unsigned char key, int x, int y)
+{
+ switch(key) {
+ case 'q':
+ case 'Q':
+ case 27:
+ exit(0);
+
+ case ' ':
+ /* reset initial view */
+ pos = v3_cons(0, 0, -6);
+ rot = quat_cons(1, 0, 0, 0);
+ glutPostRedisplay();
+
+ default:
+ break;
+ }
+}
+
+void sbmot(int x, int y, int z)
+{
+ pos.x += x * 0.001f;
+ pos.y += y * 0.001f;
+ pos.z -= z * 0.001f;
+ glutPostRedisplay();
+}
+
+void sbrot(int x, int y, int z)
+{
+ float axis_len = (float)sqrt(x * x + y * y + z * z);
+ rot = quat_rotate(rot, axis_len * 0.001f, -x / axis_len, -y / axis_len, z / axis_len);
+ glutPostRedisplay();
+}
+
+void sbbut(int bn, int state)
+{
+ if(state == GLUT_DOWN) {
+ pos = v3_cons(0, 0, -6);
+ rot = quat_cons(1, 0, 0, 0);
+ glutPostRedisplay();
+ }
+}
diff --git a/SixenseSDK/src/sixense_simple3d/progs/demos/spaceball/spaceball.dsp b/SixenseSDK/src/sixense_simple3d/progs/demos/spaceball/spaceball.dsp
new file mode 100755
index 0000000..cc47490
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/progs/demos/spaceball/spaceball.dsp
@@ -0,0 +1,113 @@
+# Microsoft Developer Studio Project File - Name="spaceball" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=spaceball - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "spaceball.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "spaceball.mak" CFG="spaceball - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "spaceball - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "spaceball - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "spaceball - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /libpath:"../../../Release"
+
+!ELSEIF "$(CFG)" == "spaceball - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"../../../Debug"
+
+!ENDIF
+
+# Begin Target
+
+# Name "spaceball - Win32 Release"
+# Name "spaceball - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\spaceball.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\vmath.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=.\vmath.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\vmath.inl
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/SixenseSDK/src/sixense_simple3d/progs/demos/spaceball/spaceball_static.dsp b/SixenseSDK/src/sixense_simple3d/progs/demos/spaceball/spaceball_static.dsp
new file mode 100755
index 0000000..5ed0ad5
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/progs/demos/spaceball/spaceball_static.dsp
@@ -0,0 +1,112 @@
+# Microsoft Developer Studio Project File - Name="spaceball_static" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=spaceball_static - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "spaceball_static.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "spaceball_static.mak" CFG="spaceball_static - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "spaceball_static - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "spaceball_static - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "spaceball_static - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "spaceball_static___Win32_Release"
+# PROP BASE Intermediate_Dir "spaceball_static___Win32_Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "ReleaseStatic"
+# PROP Intermediate_Dir "ReleaseStatic"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../../include" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "FREEGLUT_STATIC" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /libpath:"../../../ReleaseStatic"
+
+!ELSEIF "$(CFG)" == "spaceball_static - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "spaceball_static___Win32_Debug"
+# PROP BASE Intermediate_Dir "spaceball_static___Win32_Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "DebugStatic"
+# PROP Intermediate_Dir "DebugStatic"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "FREEGLUT_STATIC" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"../../../DebugStatic"
+
+!ENDIF
+
+# Begin Target
+
+# Name "spaceball_static - Win32 Release"
+# Name "spaceball_static - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\spaceball.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\vmath.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=.\vmath.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\vmath.inl
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/SixenseSDK/src/sixense_simple3d/progs/demos/spaceball/vmath.c b/SixenseSDK/src/sixense_simple3d/progs/demos/spaceball/vmath.c
new file mode 100755
index 0000000..7ef3c25
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/progs/demos/spaceball/vmath.c
@@ -0,0 +1,16 @@
+#include <math.h>
+#include "vmath.h"
+
+quat_t quat_rotate(quat_t q, float angle, float x, float y, float z)
+{
+ quat_t rq;
+ float half_angle = angle * 0.5f;
+ float sin_half = (float)sin(half_angle);
+
+ rq.w = (float)cos(half_angle);
+ rq.x = x * sin_half;
+ rq.y = y * sin_half;
+ rq.z = z * sin_half;
+
+ return quat_mul(q, rq);
+}
diff --git a/SixenseSDK/src/sixense_simple3d/progs/demos/spaceball/vmath.h b/SixenseSDK/src/sixense_simple3d/progs/demos/spaceball/vmath.h
new file mode 100755
index 0000000..249a504
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/progs/demos/spaceball/vmath.h
@@ -0,0 +1,38 @@
+#ifndef VMATH_H_
+#define VMATH_H_
+
+#if defined(WIN32)
+#define INLINE
+#else
+#define INLINE inline
+#endif
+
+
+typedef struct { float x, y, z; } vec3_t;
+typedef struct { float x, y, z, w; } vec4_t;
+
+typedef vec4_t quat_t;
+
+typedef float mat4_t[4][4];
+
+/* vector functions */
+static INLINE vec3_t v3_cons(float x, float y, float z);
+static INLINE float v3_dot(vec3_t v1, vec3_t v2);
+
+/* quaternion functions */
+static INLINE quat_t quat_cons(float s, float x, float y, float z);
+static INLINE vec3_t quat_vec(quat_t q);
+static INLINE quat_t quat_mul(quat_t q1, quat_t q2);
+static INLINE void quat_to_mat(mat4_t res, quat_t q);
+quat_t quat_rotate(quat_t q, float angle, float x, float y, float z);
+
+/* matrix functions */
+static INLINE void m4_cons(mat4_t m,
+ float m11, float m12, float m13, float m14,
+ float m21, float m22, float m23, float m24,
+ float m31, float m32, float m33, float m34,
+ float m41, float m42, float m43, float m44);
+
+#include "vmath.inl"
+
+#endif /* VMATH_H_ */
diff --git a/SixenseSDK/src/sixense_simple3d/progs/demos/spaceball/vmath.inl b/SixenseSDK/src/sixense_simple3d/progs/demos/spaceball/vmath.inl
new file mode 100755
index 0000000..e3ad6b8
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/progs/demos/spaceball/vmath.inl
@@ -0,0 +1,68 @@
+/* vector functions */
+static INLINE vec3_t v3_cons(float x, float y, float z)
+{
+ vec3_t res;
+ res.x = x;
+ res.y = y;
+ res.z = z;
+ return res;
+}
+
+static INLINE vec3_t quat_vec(quat_t q)
+{
+ vec3_t v;
+ v.x = q.x;
+ v.y = q.y;
+ v.z = q.z;
+ return v;
+}
+
+static INLINE float v3_dot(vec3_t v1, vec3_t v2)
+{
+ return v1.x * v2.x + v1.y * v2.y + v1.z * v2.z;
+}
+
+/* quaternion functions */
+static INLINE quat_t quat_cons(float s, float x, float y, float z)
+{
+ quat_t q;
+ q.x = x;
+ q.y = y;
+ q.z = z;
+ q.w = s;
+ return q;
+}
+
+static INLINE quat_t quat_mul(quat_t q1, quat_t q2)
+{
+ quat_t res;
+ vec3_t v1 = quat_vec(q1);
+ vec3_t v2 = quat_vec(q2);
+
+ res.w = q1.w * q2.w - v3_dot(v1, v2);
+ res.x = v2.x * q1.w + v1.x * q2.w + (v1.y * v2.z - v1.z * v2.y);
+ res.y = v2.y * q1.w + v1.y * q2.w + (v1.z * v2.x - v1.x * v2.z);
+ res.z = v2.z * q1.w + v1.z * q2.w + (v1.x * v2.y - v1.y * v2.x);
+ return res;
+}
+
+static INLINE void quat_to_mat(mat4_t res, quat_t q)
+{
+ m4_cons(res, 1.0f - 2.0f * q.y*q.y - 2.0f * q.z*q.z, 2.0f * q.x * q.y + 2.0f * q.w * q.z, 2.0f * q.z * q.x - 2.0f * q.w * q.y, 0,
+ 2.0f * q.x * q.y - 2.0f * q.w * q.z, 1.0f - 2.0f * q.x*q.x - 2.0f * q.z*q.z, 2.0f * q.y * q.z + 2.0f * q.w * q.x, 0,
+ 2.0f * q.z * q.x + 2.0f * q.w * q.y, 2.0f * q.y * q.z - 2.0f * q.w * q.x, 1.0f - 2.0f * q.x*q.x - 2.0f * q.y*q.y, 0,
+ 0, 0, 0, 1);
+}
+
+/* matrix functions */
+static INLINE void m4_cons(mat4_t m,
+ float m11, float m12, float m13, float m14,
+ float m21, float m22, float m23, float m24,
+ float m31, float m32, float m33, float m34,
+ float m41, float m42, float m43, float m44)
+{
+ m[0][0] = m11; m[1][0] = m12; m[2][0] = m13; m[3][0] = m14;
+ m[0][1] = m21; m[1][1] = m22; m[2][1] = m23; m[3][1] = m24;
+ m[0][2] = m31; m[1][2] = m32; m[2][2] = m33; m[3][2] = m34;
+ m[0][3] = m41; m[1][3] = m42; m[2][3] = m43; m[3][3] = m44;
+}
diff --git a/SixenseSDK/src/sixense_simple3d/src/Makefile.am b/SixenseSDK/src/sixense_simple3d/src/Makefile.am
new file mode 100755
index 0000000..683f33f
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/src/Makefile.am
@@ -0,0 +1,53 @@
+## Process this file with automake to produce Makefile.im
+
+#
+# The library we want to build
+#
+lib_LTLIBRARIES = lib@LIBRARY@.la
+
+#
+# Headers and extra stuff we want to distribute
+#
+noinst_HEADERS = freeglut_internal.h freeglut_teapot_data.h
+
+EXTRA_DIST = freeglutdll.def
+
+#
+# Those source files build the freeglut library
+#
+lib@LIBRARY@_la_SOURCES = freeglut_callbacks.c \
+ freeglut_cursor.c \
+ freeglut_display.c \
+ freeglut_ext.c \
+ freeglut_font.c \
+ freeglut_glutfont_definitions.c \
+ freeglut_font_data.c \
+ freeglut_stroke_roman.c \
+ freeglut_stroke_mono_roman.c \
+ freeglut_gamemode.c \
+ freeglut_geometry.c \
+ freeglut_init.c \
+ freeglut_input_devices.c \
+ freeglut_spaceball.c \
+ freeglut_joystick.c \
+ freeglut_main.c \
+ freeglut_menu.c \
+ freeglut_misc.c \
+ freeglut_overlay.c \
+ freeglut_state.c \
+ freeglut_structure.c \
+ freeglut_teapot.c \
+ freeglut_videoresize.c \
+ freeglut_window.c
+
+#
+# Additional linker flags
+#
+lib@LIBRARY@_la_LIBADD = $(LIBM) $(X_LIBS) $(GL_LIBS) $(LIBXXF86VM) $(LIBXI)
+lib@LIBRARY@_la_LDFLAGS = $(VERSION_INFO) -no-undefined
+lib@LIBRARY@_la_CFLAGS = $(X_CFLAGS) $(EXPORT_FLAGS)
+lib@LIBRARY@_la_CPPFLAGS= -I$(top_srcdir)/include
+
+#
+# End of file
+#
diff --git a/SixenseSDK/src/sixense_simple3d/src/Makefile.in b/SixenseSDK/src/sixense_simple3d/src/Makefile.in
new file mode 100755
index 0000000..8d9a008
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/src/Makefile.in
@@ -0,0 +1,749 @@
+# Makefile.in generated by automake 1.10.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+am__installdirs = "$(DESTDIR)$(libdir)"
+libLTLIBRARIES_INSTALL = $(INSTALL)
+LTLIBRARIES = $(lib_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+lib@LIBRARY@_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+am_lib@LIBRARY@_la_OBJECTS = lib@LIBRARY@_la-freeglut_callbacks.lo \
+ lib@LIBRARY@_la-freeglut_cursor.lo \
+ lib@LIBRARY@_la-freeglut_display.lo \
+ lib@LIBRARY@_la-freeglut_ext.lo \
+ lib@LIBRARY@_la-freeglut_font.lo \
+ lib@LIBRARY@_la-freeglut_glutfont_definitions.lo \
+ lib@LIBRARY@_la-freeglut_font_data.lo \
+ lib@LIBRARY@_la-freeglut_stroke_roman.lo \
+ lib@LIBRARY@_la-freeglut_stroke_mono_roman.lo \
+ lib@LIBRARY@_la-freeglut_gamemode.lo \
+ lib@LIBRARY@_la-freeglut_geometry.lo \
+ lib@LIBRARY@_la-freeglut_init.lo \
+ lib@LIBRARY@_la-freeglut_input_devices.lo \
+ lib@LIBRARY@_la-freeglut_spaceball.lo \
+ lib@LIBRARY@_la-freeglut_joystick.lo \
+ lib@LIBRARY@_la-freeglut_main.lo \
+ lib@LIBRARY@_la-freeglut_menu.lo \
+ lib@LIBRARY@_la-freeglut_misc.lo \
+ lib@LIBRARY@_la-freeglut_overlay.lo \
+ lib@LIBRARY@_la-freeglut_state.lo \
+ lib@LIBRARY@_la-freeglut_structure.lo \
+ lib@LIBRARY@_la-freeglut_teapot.lo \
+ lib@LIBRARY@_la-freeglut_videoresize.lo \
+ lib@LIBRARY@_la-freeglut_window.lo
+lib@LIBRARY@_la_OBJECTS = $(am_lib@LIBRARY@_la_OBJECTS)
+lib@LIBRARY@_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(lib@LIBRARY@_la_CFLAGS) \
+ $(CFLAGS) $(lib@LIBRARY@_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(lib@LIBRARY@_la_SOURCES)
+DIST_SOURCES = $(lib@LIBRARY@_la_SOURCES)
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXPORT_FLAGS = @EXPORT_FLAGS@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+GL_LIBS = @GL_LIBS@
+GREP = @GREP@
+HEADER = @HEADER@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBRARY = @LIBRARY@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIBXI = @LIBXI@
+LIBXXF86VM = @LIBXXF86VM@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NMEDIT = @NMEDIT@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+VERSION_INFO = @VERSION_INFO@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+#
+# The library we want to build
+#
+lib_LTLIBRARIES = lib@LIBRARY@.la
+
+#
+# Headers and extra stuff we want to distribute
+#
+noinst_HEADERS = freeglut_internal.h freeglut_teapot_data.h
+EXTRA_DIST = freeglutdll.def
+
+#
+# Those source files build the freeglut library
+#
+lib@LIBRARY@_la_SOURCES = freeglut_callbacks.c \
+ freeglut_cursor.c \
+ freeglut_display.c \
+ freeglut_ext.c \
+ freeglut_font.c \
+ freeglut_glutfont_definitions.c \
+ freeglut_font_data.c \
+ freeglut_stroke_roman.c \
+ freeglut_stroke_mono_roman.c \
+ freeglut_gamemode.c \
+ freeglut_geometry.c \
+ freeglut_init.c \
+ freeglut_input_devices.c \
+ freeglut_spaceball.c \
+ freeglut_joystick.c \
+ freeglut_main.c \
+ freeglut_menu.c \
+ freeglut_misc.c \
+ freeglut_overlay.c \
+ freeglut_state.c \
+ freeglut_structure.c \
+ freeglut_teapot.c \
+ freeglut_videoresize.c \
+ freeglut_window.c
+
+
+#
+# Additional linker flags
+#
+lib@LIBRARY@_la_LIBADD = $(LIBM) $(X_LIBS) $(GL_LIBS) $(LIBXXF86VM) $(LIBXI)
+lib@LIBRARY@_la_LDFLAGS = $(VERSION_INFO) -no-undefined
+lib@LIBRARY@_la_CFLAGS = $(X_CFLAGS) $(EXPORT_FLAGS)
+lib@LIBRARY@_la_CPPFLAGS = -I$(top_srcdir)/include
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu src/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+ @$(NORMAL_INSTALL)
+ test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
+ @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+ if test -f $$p; then \
+ f=$(am__strip_dir) \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
+ else :; fi; \
+ done
+
+uninstall-libLTLIBRARIES:
+ @$(NORMAL_UNINSTALL)
+ @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+ p=$(am__strip_dir) \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \
+ done
+
+clean-libLTLIBRARIES:
+ -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+ @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+ test "$$dir" != "$$p" || dir=.; \
+ echo "rm -f \"$${dir}/so_locations\""; \
+ rm -f "$${dir}/so_locations"; \
+ done
+lib@LIBRARY@.la: $(lib@LIBRARY@_la_OBJECTS) $(lib@LIBRARY@_la_DEPENDENCIES)
+ $(lib@LIBRARY@_la_LINK) -rpath $(libdir) $(lib@LIBRARY@_la_OBJECTS) $(lib@LIBRARY@_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib@LIBRARY@_la-freeglut_callbacks.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib@LIBRARY@_la-freeglut_cursor.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib@LIBRARY@_la-freeglut_display.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib@LIBRARY@_la-freeglut_ext.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib@LIBRARY@_la-freeglut_font.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib@LIBRARY@_la-freeglut_font_data.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib@LIBRARY@_la-freeglut_gamemode.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib@LIBRARY@_la-freeglut_geometry.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib@LIBRARY@_la-freeglut_glutfont_definitions.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib@LIBRARY@_la-freeglut_init.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib@LIBRARY@_la-freeglut_input_devices.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib@LIBRARY@_la-freeglut_joystick.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib@LIBRARY@_la-freeglut_main.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib@LIBRARY@_la-freeglut_menu.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib@LIBRARY@_la-freeglut_misc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib@LIBRARY@_la-freeglut_overlay.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib@LIBRARY@_la-freeglut_spaceball.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib@LIBRARY@_la-freeglut_state.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib@LIBRARY@_la-freeglut_stroke_mono_roman.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib@LIBRARY@_la-freeglut_stroke_roman.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib@LIBRARY@_la-freeglut_structure.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib@LIBRARY@_la-freeglut_teapot.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib@LIBRARY@_la-freeglut_videoresize.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib@LIBRARY@_la-freeglut_window.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+lib@LIBRARY@_la-freeglut_callbacks.lo: freeglut_callbacks.c
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib@LIBRARY@_la_CPPFLAGS) $(CPPFLAGS) $(lib@LIBRARY@_la_CFLAGS) $(CFLAGS) -MT lib@LIBRARY@_la-freeglut_callbacks.lo -MD -MP -MF $(DEPDIR)/lib@LIBRARY@_la-freeglut_callbacks.Tpo -c -o lib@LIBRARY@_la-freeglut_callbacks.lo `test -f 'freeglut_callbacks.c' || echo '$(srcdir)/'`freeglut_callbacks.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/lib@LIBRARY@_la-freeglut_callbacks.Tpo $(DEPDIR)/lib@LIBRARY@_la-freeglut_callbacks.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='freeglut_callbacks.c' object='lib@LIBRARY@_la-freeglut_callbacks.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib@LIBRARY@_la_CPPFLAGS) $(CPPFLAGS) $(lib@LIBRARY@_la_CFLAGS) $(CFLAGS) -c -o lib@LIBRARY@_la-freeglut_callbacks.lo `test -f 'freeglut_callbacks.c' || echo '$(srcdir)/'`freeglut_callbacks.c
+
+lib@LIBRARY@_la-freeglut_cursor.lo: freeglut_cursor.c
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib@LIBRARY@_la_CPPFLAGS) $(CPPFLAGS) $(lib@LIBRARY@_la_CFLAGS) $(CFLAGS) -MT lib@LIBRARY@_la-freeglut_cursor.lo -MD -MP -MF $(DEPDIR)/lib@LIBRARY@_la-freeglut_cursor.Tpo -c -o lib@LIBRARY@_la-freeglut_cursor.lo `test -f 'freeglut_cursor.c' || echo '$(srcdir)/'`freeglut_cursor.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/lib@LIBRARY@_la-freeglut_cursor.Tpo $(DEPDIR)/lib@LIBRARY@_la-freeglut_cursor.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='freeglut_cursor.c' object='lib@LIBRARY@_la-freeglut_cursor.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib@LIBRARY@_la_CPPFLAGS) $(CPPFLAGS) $(lib@LIBRARY@_la_CFLAGS) $(CFLAGS) -c -o lib@LIBRARY@_la-freeglut_cursor.lo `test -f 'freeglut_cursor.c' || echo '$(srcdir)/'`freeglut_cursor.c
+
+lib@LIBRARY@_la-freeglut_display.lo: freeglut_display.c
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib@LIBRARY@_la_CPPFLAGS) $(CPPFLAGS) $(lib@LIBRARY@_la_CFLAGS) $(CFLAGS) -MT lib@LIBRARY@_la-freeglut_display.lo -MD -MP -MF $(DEPDIR)/lib@LIBRARY@_la-freeglut_display.Tpo -c -o lib@LIBRARY@_la-freeglut_display.lo `test -f 'freeglut_display.c' || echo '$(srcdir)/'`freeglut_display.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/lib@LIBRARY@_la-freeglut_display.Tpo $(DEPDIR)/lib@LIBRARY@_la-freeglut_display.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='freeglut_display.c' object='lib@LIBRARY@_la-freeglut_display.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib@LIBRARY@_la_CPPFLAGS) $(CPPFLAGS) $(lib@LIBRARY@_la_CFLAGS) $(CFLAGS) -c -o lib@LIBRARY@_la-freeglut_display.lo `test -f 'freeglut_display.c' || echo '$(srcdir)/'`freeglut_display.c
+
+lib@LIBRARY@_la-freeglut_ext.lo: freeglut_ext.c
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib@LIBRARY@_la_CPPFLAGS) $(CPPFLAGS) $(lib@LIBRARY@_la_CFLAGS) $(CFLAGS) -MT lib@LIBRARY@_la-freeglut_ext.lo -MD -MP -MF $(DEPDIR)/lib@LIBRARY@_la-freeglut_ext.Tpo -c -o lib@LIBRARY@_la-freeglut_ext.lo `test -f 'freeglut_ext.c' || echo '$(srcdir)/'`freeglut_ext.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/lib@LIBRARY@_la-freeglut_ext.Tpo $(DEPDIR)/lib@LIBRARY@_la-freeglut_ext.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='freeglut_ext.c' object='lib@LIBRARY@_la-freeglut_ext.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib@LIBRARY@_la_CPPFLAGS) $(CPPFLAGS) $(lib@LIBRARY@_la_CFLAGS) $(CFLAGS) -c -o lib@LIBRARY@_la-freeglut_ext.lo `test -f 'freeglut_ext.c' || echo '$(srcdir)/'`freeglut_ext.c
+
+lib@LIBRARY@_la-freeglut_font.lo: freeglut_font.c
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib@LIBRARY@_la_CPPFLAGS) $(CPPFLAGS) $(lib@LIBRARY@_la_CFLAGS) $(CFLAGS) -MT lib@LIBRARY@_la-freeglut_font.lo -MD -MP -MF $(DEPDIR)/lib@LIBRARY@_la-freeglut_font.Tpo -c -o lib@LIBRARY@_la-freeglut_font.lo `test -f 'freeglut_font.c' || echo '$(srcdir)/'`freeglut_font.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/lib@LIBRARY@_la-freeglut_font.Tpo $(DEPDIR)/lib@LIBRARY@_la-freeglut_font.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='freeglut_font.c' object='lib@LIBRARY@_la-freeglut_font.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib@LIBRARY@_la_CPPFLAGS) $(CPPFLAGS) $(lib@LIBRARY@_la_CFLAGS) $(CFLAGS) -c -o lib@LIBRARY@_la-freeglut_font.lo `test -f 'freeglut_font.c' || echo '$(srcdir)/'`freeglut_font.c
+
+lib@LIBRARY@_la-freeglut_glutfont_definitions.lo: freeglut_glutfont_definitions.c
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib@LIBRARY@_la_CPPFLAGS) $(CPPFLAGS) $(lib@LIBRARY@_la_CFLAGS) $(CFLAGS) -MT lib@LIBRARY@_la-freeglut_glutfont_definitions.lo -MD -MP -MF $(DEPDIR)/lib@LIBRARY@_la-freeglut_glutfont_definitions.Tpo -c -o lib@LIBRARY@_la-freeglut_glutfont_definitions.lo `test -f 'freeglut_glutfont_definitions.c' || echo '$(srcdir)/'`freeglut_glutfont_definitions.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/lib@LIBRARY@_la-freeglut_glutfont_definitions.Tpo $(DEPDIR)/lib@LIBRARY@_la-freeglut_glutfont_definitions.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='freeglut_glutfont_definitions.c' object='lib@LIBRARY@_la-freeglut_glutfont_definitions.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib@LIBRARY@_la_CPPFLAGS) $(CPPFLAGS) $(lib@LIBRARY@_la_CFLAGS) $(CFLAGS) -c -o lib@LIBRARY@_la-freeglut_glutfont_definitions.lo `test -f 'freeglut_glutfont_definitions.c' || echo '$(srcdir)/'`freeglut_glutfont_definitions.c
+
+lib@LIBRARY@_la-freeglut_font_data.lo: freeglut_font_data.c
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib@LIBRARY@_la_CPPFLAGS) $(CPPFLAGS) $(lib@LIBRARY@_la_CFLAGS) $(CFLAGS) -MT lib@LIBRARY@_la-freeglut_font_data.lo -MD -MP -MF $(DEPDIR)/lib@LIBRARY@_la-freeglut_font_data.Tpo -c -o lib@LIBRARY@_la-freeglut_font_data.lo `test -f 'freeglut_font_data.c' || echo '$(srcdir)/'`freeglut_font_data.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/lib@LIBRARY@_la-freeglut_font_data.Tpo $(DEPDIR)/lib@LIBRARY@_la-freeglut_font_data.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='freeglut_font_data.c' object='lib@LIBRARY@_la-freeglut_font_data.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib@LIBRARY@_la_CPPFLAGS) $(CPPFLAGS) $(lib@LIBRARY@_la_CFLAGS) $(CFLAGS) -c -o lib@LIBRARY@_la-freeglut_font_data.lo `test -f 'freeglut_font_data.c' || echo '$(srcdir)/'`freeglut_font_data.c
+
+lib@LIBRARY@_la-freeglut_stroke_roman.lo: freeglut_stroke_roman.c
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib@LIBRARY@_la_CPPFLAGS) $(CPPFLAGS) $(lib@LIBRARY@_la_CFLAGS) $(CFLAGS) -MT lib@LIBRARY@_la-freeglut_stroke_roman.lo -MD -MP -MF $(DEPDIR)/lib@LIBRARY@_la-freeglut_stroke_roman.Tpo -c -o lib@LIBRARY@_la-freeglut_stroke_roman.lo `test -f 'freeglut_stroke_roman.c' || echo '$(srcdir)/'`freeglut_stroke_roman.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/lib@LIBRARY@_la-freeglut_stroke_roman.Tpo $(DEPDIR)/lib@LIBRARY@_la-freeglut_stroke_roman.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='freeglut_stroke_roman.c' object='lib@LIBRARY@_la-freeglut_stroke_roman.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib@LIBRARY@_la_CPPFLAGS) $(CPPFLAGS) $(lib@LIBRARY@_la_CFLAGS) $(CFLAGS) -c -o lib@LIBRARY@_la-freeglut_stroke_roman.lo `test -f 'freeglut_stroke_roman.c' || echo '$(srcdir)/'`freeglut_stroke_roman.c
+
+lib@LIBRARY@_la-freeglut_stroke_mono_roman.lo: freeglut_stroke_mono_roman.c
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib@LIBRARY@_la_CPPFLAGS) $(CPPFLAGS) $(lib@LIBRARY@_la_CFLAGS) $(CFLAGS) -MT lib@LIBRARY@_la-freeglut_stroke_mono_roman.lo -MD -MP -MF $(DEPDIR)/lib@LIBRARY@_la-freeglut_stroke_mono_roman.Tpo -c -o lib@LIBRARY@_la-freeglut_stroke_mono_roman.lo `test -f 'freeglut_stroke_mono_roman.c' || echo '$(srcdir)/'`freeglut_stroke_mono_roman.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/lib@LIBRARY@_la-freeglut_stroke_mono_roman.Tpo $(DEPDIR)/lib@LIBRARY@_la-freeglut_stroke_mono_roman.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='freeglut_stroke_mono_roman.c' object='lib@LIBRARY@_la-freeglut_stroke_mono_roman.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib@LIBRARY@_la_CPPFLAGS) $(CPPFLAGS) $(lib@LIBRARY@_la_CFLAGS) $(CFLAGS) -c -o lib@LIBRARY@_la-freeglut_stroke_mono_roman.lo `test -f 'freeglut_stroke_mono_roman.c' || echo '$(srcdir)/'`freeglut_stroke_mono_roman.c
+
+lib@LIBRARY@_la-freeglut_gamemode.lo: freeglut_gamemode.c
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib@LIBRARY@_la_CPPFLAGS) $(CPPFLAGS) $(lib@LIBRARY@_la_CFLAGS) $(CFLAGS) -MT lib@LIBRARY@_la-freeglut_gamemode.lo -MD -MP -MF $(DEPDIR)/lib@LIBRARY@_la-freeglut_gamemode.Tpo -c -o lib@LIBRARY@_la-freeglut_gamemode.lo `test -f 'freeglut_gamemode.c' || echo '$(srcdir)/'`freeglut_gamemode.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/lib@LIBRARY@_la-freeglut_gamemode.Tpo $(DEPDIR)/lib@LIBRARY@_la-freeglut_gamemode.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='freeglut_gamemode.c' object='lib@LIBRARY@_la-freeglut_gamemode.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib@LIBRARY@_la_CPPFLAGS) $(CPPFLAGS) $(lib@LIBRARY@_la_CFLAGS) $(CFLAGS) -c -o lib@LIBRARY@_la-freeglut_gamemode.lo `test -f 'freeglut_gamemode.c' || echo '$(srcdir)/'`freeglut_gamemode.c
+
+lib@LIBRARY@_la-freeglut_geometry.lo: freeglut_geometry.c
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib@LIBRARY@_la_CPPFLAGS) $(CPPFLAGS) $(lib@LIBRARY@_la_CFLAGS) $(CFLAGS) -MT lib@LIBRARY@_la-freeglut_geometry.lo -MD -MP -MF $(DEPDIR)/lib@LIBRARY@_la-freeglut_geometry.Tpo -c -o lib@LIBRARY@_la-freeglut_geometry.lo `test -f 'freeglut_geometry.c' || echo '$(srcdir)/'`freeglut_geometry.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/lib@LIBRARY@_la-freeglut_geometry.Tpo $(DEPDIR)/lib@LIBRARY@_la-freeglut_geometry.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='freeglut_geometry.c' object='lib@LIBRARY@_la-freeglut_geometry.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib@LIBRARY@_la_CPPFLAGS) $(CPPFLAGS) $(lib@LIBRARY@_la_CFLAGS) $(CFLAGS) -c -o lib@LIBRARY@_la-freeglut_geometry.lo `test -f 'freeglut_geometry.c' || echo '$(srcdir)/'`freeglut_geometry.c
+
+lib@LIBRARY@_la-freeglut_init.lo: freeglut_init.c
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib@LIBRARY@_la_CPPFLAGS) $(CPPFLAGS) $(lib@LIBRARY@_la_CFLAGS) $(CFLAGS) -MT lib@LIBRARY@_la-freeglut_init.lo -MD -MP -MF $(DEPDIR)/lib@LIBRARY@_la-freeglut_init.Tpo -c -o lib@LIBRARY@_la-freeglut_init.lo `test -f 'freeglut_init.c' || echo '$(srcdir)/'`freeglut_init.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/lib@LIBRARY@_la-freeglut_init.Tpo $(DEPDIR)/lib@LIBRARY@_la-freeglut_init.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='freeglut_init.c' object='lib@LIBRARY@_la-freeglut_init.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib@LIBRARY@_la_CPPFLAGS) $(CPPFLAGS) $(lib@LIBRARY@_la_CFLAGS) $(CFLAGS) -c -o lib@LIBRARY@_la-freeglut_init.lo `test -f 'freeglut_init.c' || echo '$(srcdir)/'`freeglut_init.c
+
+lib@LIBRARY@_la-freeglut_input_devices.lo: freeglut_input_devices.c
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib@LIBRARY@_la_CPPFLAGS) $(CPPFLAGS) $(lib@LIBRARY@_la_CFLAGS) $(CFLAGS) -MT lib@LIBRARY@_la-freeglut_input_devices.lo -MD -MP -MF $(DEPDIR)/lib@LIBRARY@_la-freeglut_input_devices.Tpo -c -o lib@LIBRARY@_la-freeglut_input_devices.lo `test -f 'freeglut_input_devices.c' || echo '$(srcdir)/'`freeglut_input_devices.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/lib@LIBRARY@_la-freeglut_input_devices.Tpo $(DEPDIR)/lib@LIBRARY@_la-freeglut_input_devices.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='freeglut_input_devices.c' object='lib@LIBRARY@_la-freeglut_input_devices.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib@LIBRARY@_la_CPPFLAGS) $(CPPFLAGS) $(lib@LIBRARY@_la_CFLAGS) $(CFLAGS) -c -o lib@LIBRARY@_la-freeglut_input_devices.lo `test -f 'freeglut_input_devices.c' || echo '$(srcdir)/'`freeglut_input_devices.c
+
+lib@LIBRARY@_la-freeglut_spaceball.lo: freeglut_spaceball.c
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib@LIBRARY@_la_CPPFLAGS) $(CPPFLAGS) $(lib@LIBRARY@_la_CFLAGS) $(CFLAGS) -MT lib@LIBRARY@_la-freeglut_spaceball.lo -MD -MP -MF $(DEPDIR)/lib@LIBRARY@_la-freeglut_spaceball.Tpo -c -o lib@LIBRARY@_la-freeglut_spaceball.lo `test -f 'freeglut_spaceball.c' || echo '$(srcdir)/'`freeglut_spaceball.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/lib@LIBRARY@_la-freeglut_spaceball.Tpo $(DEPDIR)/lib@LIBRARY@_la-freeglut_spaceball.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='freeglut_spaceball.c' object='lib@LIBRARY@_la-freeglut_spaceball.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib@LIBRARY@_la_CPPFLAGS) $(CPPFLAGS) $(lib@LIBRARY@_la_CFLAGS) $(CFLAGS) -c -o lib@LIBRARY@_la-freeglut_spaceball.lo `test -f 'freeglut_spaceball.c' || echo '$(srcdir)/'`freeglut_spaceball.c
+
+lib@LIBRARY@_la-freeglut_joystick.lo: freeglut_joystick.c
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib@LIBRARY@_la_CPPFLAGS) $(CPPFLAGS) $(lib@LIBRARY@_la_CFLAGS) $(CFLAGS) -MT lib@LIBRARY@_la-freeglut_joystick.lo -MD -MP -MF $(DEPDIR)/lib@LIBRARY@_la-freeglut_joystick.Tpo -c -o lib@LIBRARY@_la-freeglut_joystick.lo `test -f 'freeglut_joystick.c' || echo '$(srcdir)/'`freeglut_joystick.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/lib@LIBRARY@_la-freeglut_joystick.Tpo $(DEPDIR)/lib@LIBRARY@_la-freeglut_joystick.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='freeglut_joystick.c' object='lib@LIBRARY@_la-freeglut_joystick.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib@LIBRARY@_la_CPPFLAGS) $(CPPFLAGS) $(lib@LIBRARY@_la_CFLAGS) $(CFLAGS) -c -o lib@LIBRARY@_la-freeglut_joystick.lo `test -f 'freeglut_joystick.c' || echo '$(srcdir)/'`freeglut_joystick.c
+
+lib@LIBRARY@_la-freeglut_main.lo: freeglut_main.c
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib@LIBRARY@_la_CPPFLAGS) $(CPPFLAGS) $(lib@LIBRARY@_la_CFLAGS) $(CFLAGS) -MT lib@LIBRARY@_la-freeglut_main.lo -MD -MP -MF $(DEPDIR)/lib@LIBRARY@_la-freeglut_main.Tpo -c -o lib@LIBRARY@_la-freeglut_main.lo `test -f 'freeglut_main.c' || echo '$(srcdir)/'`freeglut_main.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/lib@LIBRARY@_la-freeglut_main.Tpo $(DEPDIR)/lib@LIBRARY@_la-freeglut_main.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='freeglut_main.c' object='lib@LIBRARY@_la-freeglut_main.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib@LIBRARY@_la_CPPFLAGS) $(CPPFLAGS) $(lib@LIBRARY@_la_CFLAGS) $(CFLAGS) -c -o lib@LIBRARY@_la-freeglut_main.lo `test -f 'freeglut_main.c' || echo '$(srcdir)/'`freeglut_main.c
+
+lib@LIBRARY@_la-freeglut_menu.lo: freeglut_menu.c
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib@LIBRARY@_la_CPPFLAGS) $(CPPFLAGS) $(lib@LIBRARY@_la_CFLAGS) $(CFLAGS) -MT lib@LIBRARY@_la-freeglut_menu.lo -MD -MP -MF $(DEPDIR)/lib@LIBRARY@_la-freeglut_menu.Tpo -c -o lib@LIBRARY@_la-freeglut_menu.lo `test -f 'freeglut_menu.c' || echo '$(srcdir)/'`freeglut_menu.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/lib@LIBRARY@_la-freeglut_menu.Tpo $(DEPDIR)/lib@LIBRARY@_la-freeglut_menu.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='freeglut_menu.c' object='lib@LIBRARY@_la-freeglut_menu.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib@LIBRARY@_la_CPPFLAGS) $(CPPFLAGS) $(lib@LIBRARY@_la_CFLAGS) $(CFLAGS) -c -o lib@LIBRARY@_la-freeglut_menu.lo `test -f 'freeglut_menu.c' || echo '$(srcdir)/'`freeglut_menu.c
+
+lib@LIBRARY@_la-freeglut_misc.lo: freeglut_misc.c
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib@LIBRARY@_la_CPPFLAGS) $(CPPFLAGS) $(lib@LIBRARY@_la_CFLAGS) $(CFLAGS) -MT lib@LIBRARY@_la-freeglut_misc.lo -MD -MP -MF $(DEPDIR)/lib@LIBRARY@_la-freeglut_misc.Tpo -c -o lib@LIBRARY@_la-freeglut_misc.lo `test -f 'freeglut_misc.c' || echo '$(srcdir)/'`freeglut_misc.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/lib@LIBRARY@_la-freeglut_misc.Tpo $(DEPDIR)/lib@LIBRARY@_la-freeglut_misc.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='freeglut_misc.c' object='lib@LIBRARY@_la-freeglut_misc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib@LIBRARY@_la_CPPFLAGS) $(CPPFLAGS) $(lib@LIBRARY@_la_CFLAGS) $(CFLAGS) -c -o lib@LIBRARY@_la-freeglut_misc.lo `test -f 'freeglut_misc.c' || echo '$(srcdir)/'`freeglut_misc.c
+
+lib@LIBRARY@_la-freeglut_overlay.lo: freeglut_overlay.c
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib@LIBRARY@_la_CPPFLAGS) $(CPPFLAGS) $(lib@LIBRARY@_la_CFLAGS) $(CFLAGS) -MT lib@LIBRARY@_la-freeglut_overlay.lo -MD -MP -MF $(DEPDIR)/lib@LIBRARY@_la-freeglut_overlay.Tpo -c -o lib@LIBRARY@_la-freeglut_overlay.lo `test -f 'freeglut_overlay.c' || echo '$(srcdir)/'`freeglut_overlay.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/lib@LIBRARY@_la-freeglut_overlay.Tpo $(DEPDIR)/lib@LIBRARY@_la-freeglut_overlay.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='freeglut_overlay.c' object='lib@LIBRARY@_la-freeglut_overlay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib@LIBRARY@_la_CPPFLAGS) $(CPPFLAGS) $(lib@LIBRARY@_la_CFLAGS) $(CFLAGS) -c -o lib@LIBRARY@_la-freeglut_overlay.lo `test -f 'freeglut_overlay.c' || echo '$(srcdir)/'`freeglut_overlay.c
+
+lib@LIBRARY@_la-freeglut_state.lo: freeglut_state.c
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib@LIBRARY@_la_CPPFLAGS) $(CPPFLAGS) $(lib@LIBRARY@_la_CFLAGS) $(CFLAGS) -MT lib@LIBRARY@_la-freeglut_state.lo -MD -MP -MF $(DEPDIR)/lib@LIBRARY@_la-freeglut_state.Tpo -c -o lib@LIBRARY@_la-freeglut_state.lo `test -f 'freeglut_state.c' || echo '$(srcdir)/'`freeglut_state.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/lib@LIBRARY@_la-freeglut_state.Tpo $(DEPDIR)/lib@LIBRARY@_la-freeglut_state.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='freeglut_state.c' object='lib@LIBRARY@_la-freeglut_state.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib@LIBRARY@_la_CPPFLAGS) $(CPPFLAGS) $(lib@LIBRARY@_la_CFLAGS) $(CFLAGS) -c -o lib@LIBRARY@_la-freeglut_state.lo `test -f 'freeglut_state.c' || echo '$(srcdir)/'`freeglut_state.c
+
+lib@LIBRARY@_la-freeglut_structure.lo: freeglut_structure.c
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib@LIBRARY@_la_CPPFLAGS) $(CPPFLAGS) $(lib@LIBRARY@_la_CFLAGS) $(CFLAGS) -MT lib@LIBRARY@_la-freeglut_structure.lo -MD -MP -MF $(DEPDIR)/lib@LIBRARY@_la-freeglut_structure.Tpo -c -o lib@LIBRARY@_la-freeglut_structure.lo `test -f 'freeglut_structure.c' || echo '$(srcdir)/'`freeglut_structure.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/lib@LIBRARY@_la-freeglut_structure.Tpo $(DEPDIR)/lib@LIBRARY@_la-freeglut_structure.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='freeglut_structure.c' object='lib@LIBRARY@_la-freeglut_structure.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib@LIBRARY@_la_CPPFLAGS) $(CPPFLAGS) $(lib@LIBRARY@_la_CFLAGS) $(CFLAGS) -c -o lib@LIBRARY@_la-freeglut_structure.lo `test -f 'freeglut_structure.c' || echo '$(srcdir)/'`freeglut_structure.c
+
+lib@LIBRARY@_la-freeglut_teapot.lo: freeglut_teapot.c
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib@LIBRARY@_la_CPPFLAGS) $(CPPFLAGS) $(lib@LIBRARY@_la_CFLAGS) $(CFLAGS) -MT lib@LIBRARY@_la-freeglut_teapot.lo -MD -MP -MF $(DEPDIR)/lib@LIBRARY@_la-freeglut_teapot.Tpo -c -o lib@LIBRARY@_la-freeglut_teapot.lo `test -f 'freeglut_teapot.c' || echo '$(srcdir)/'`freeglut_teapot.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/lib@LIBRARY@_la-freeglut_teapot.Tpo $(DEPDIR)/lib@LIBRARY@_la-freeglut_teapot.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='freeglut_teapot.c' object='lib@LIBRARY@_la-freeglut_teapot.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib@LIBRARY@_la_CPPFLAGS) $(CPPFLAGS) $(lib@LIBRARY@_la_CFLAGS) $(CFLAGS) -c -o lib@LIBRARY@_la-freeglut_teapot.lo `test -f 'freeglut_teapot.c' || echo '$(srcdir)/'`freeglut_teapot.c
+
+lib@LIBRARY@_la-freeglut_videoresize.lo: freeglut_videoresize.c
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib@LIBRARY@_la_CPPFLAGS) $(CPPFLAGS) $(lib@LIBRARY@_la_CFLAGS) $(CFLAGS) -MT lib@LIBRARY@_la-freeglut_videoresize.lo -MD -MP -MF $(DEPDIR)/lib@LIBRARY@_la-freeglut_videoresize.Tpo -c -o lib@LIBRARY@_la-freeglut_videoresize.lo `test -f 'freeglut_videoresize.c' || echo '$(srcdir)/'`freeglut_videoresize.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/lib@LIBRARY@_la-freeglut_videoresize.Tpo $(DEPDIR)/lib@LIBRARY@_la-freeglut_videoresize.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='freeglut_videoresize.c' object='lib@LIBRARY@_la-freeglut_videoresize.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib@LIBRARY@_la_CPPFLAGS) $(CPPFLAGS) $(lib@LIBRARY@_la_CFLAGS) $(CFLAGS) -c -o lib@LIBRARY@_la-freeglut_videoresize.lo `test -f 'freeglut_videoresize.c' || echo '$(srcdir)/'`freeglut_videoresize.c
+
+lib@LIBRARY@_la-freeglut_window.lo: freeglut_window.c
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib@LIBRARY@_la_CPPFLAGS) $(CPPFLAGS) $(lib@LIBRARY@_la_CFLAGS) $(CFLAGS) -MT lib@LIBRARY@_la-freeglut_window.lo -MD -MP -MF $(DEPDIR)/lib@LIBRARY@_la-freeglut_window.Tpo -c -o lib@LIBRARY@_la-freeglut_window.lo `test -f 'freeglut_window.c' || echo '$(srcdir)/'`freeglut_window.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/lib@LIBRARY@_la-freeglut_window.Tpo $(DEPDIR)/lib@LIBRARY@_la-freeglut_window.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='freeglut_window.c' object='lib@LIBRARY@_la-freeglut_window.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib@LIBRARY@_la_CPPFLAGS) $(CPPFLAGS) $(lib@LIBRARY@_la_CFLAGS) $(CFLAGS) -c -o lib@LIBRARY@_la-freeglut_window.lo `test -f 'freeglut_window.c' || echo '$(srcdir)/'`freeglut_window.c
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs:
+ for dir in "$(DESTDIR)$(libdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am: install-libLTLIBRARIES
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-libLTLIBRARIES
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libLTLIBRARIES clean-libtool ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am \
+ install-libLTLIBRARIES install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags uninstall uninstall-am uninstall-libLTLIBRARIES
+
+
+#
+# End of file
+#
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/SixenseSDK/src/sixense_simple3d/src/freeglut_callbacks.c b/SixenseSDK/src/sixense_simple3d/src/freeglut_callbacks.c
new file mode 100755
index 0000000..4915e19
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/src/freeglut_callbacks.c
@@ -0,0 +1,367 @@
+/*
+ * 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 ();
+
+ 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 );
+}
+
+/*** END OF FILE ***/
diff --git a/SixenseSDK/src/sixense_simple3d/src/freeglut_cursor.c b/SixenseSDK/src/sixense_simple3d/src/freeglut_cursor.c
new file mode 100755
index 0000000..0d48e99
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/src/freeglut_cursor.c
@@ -0,0 +1,280 @@
+/*
+ * 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"
+
+#if TARGET_HOST_POSIX_X11
+ #include <X11/cursorfont.h>
+#endif
+
+/*
+ * 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
+/*
+ * 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 */
+};
+#endif
+
+/* -- INTERNAL FUNCTIONS ---------------------------------------------------- */
+
+/*
+ * Set the cursor image to be used for the current window
+ */
+void fgSetCursor ( SFG_Window *window, int cursorID )
+{
+#if TARGET_HOST_POSIX_X11
+ {
+ 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" );
+ }
+ }
+
+#elif TARGET_HOST_MS_WINDOWS
+
+ /*
+ * 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;
+ }
+#endif
+
+ window->State.Cursor = 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" );
+
+ fgSetCursor ( fgStructure.CurrentWindow, 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" );
+
+#if TARGET_HOST_POSIX_X11
+
+ XWarpPointer(
+ fgDisplay.Display,
+ None,
+ fgStructure.CurrentWindow->Window.Handle,
+ 0, 0, 0, 0,
+ x, y
+ );
+ /* Make the warp visible immediately. */
+ XFlush( fgDisplay.Display );
+
+#elif TARGET_HOST_MS_WINDOWS
+
+ {
+ 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
+}
+
+/*** END OF FILE ***/
diff --git a/SixenseSDK/src/sixense_simple3d/src/freeglut_display.c b/SixenseSDK/src/sixense_simple3d/src/freeglut_display.c
new file mode 100755
index 0000000..601375b
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/src/freeglut_display.c
@@ -0,0 +1,98 @@
+/*
+ * 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" );
+ FREEGLUT_EXIT_IF_NO_WINDOW ( "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/SixenseSDK/src/sixense_simple3d/src/freeglut_ext.c b/SixenseSDK/src/sixense_simple3d/src/freeglut_ext.c
new file mode 100755
index 0000000..972ae78
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/src/freeglut_ext.c
@@ -0,0 +1,226 @@
+/*
+ * 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(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(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);
+#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/SixenseSDK/src/sixense_simple3d/src/freeglut_font.c b/SixenseSDK/src/sixense_simple3d/src/freeglut_font.c
new file mode 100755
index 0000000..e956d5b
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/src/freeglut_font.c
@@ -0,0 +1,384 @@
+/*
+ * 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/SixenseSDK/src/sixense_simple3d/src/freeglut_font_data.c b/SixenseSDK/src/sixense_simple3d/src/freeglut_font_data.c
new file mode 100755
index 0000000..35dfc79
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/src/freeglut_font_data.c
@@ -0,0 +1,2020 @@
+/*
+ \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/SixenseSDK/src/sixense_simple3d/src/freeglut_gamemode.c b/SixenseSDK/src/sixense_simple3d/src/freeglut_gamemode.c
new file mode 100755
index 0000000..67159e1
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/src/freeglut_gamemode.c
@@ -0,0 +1,594 @@
+/*
+ * 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 ---------------------------------------------------- */
+
+/*
+ * Remembers the current visual settings, so that
+ * we can change them and restore later...
+ */
+static void fghRememberState( void )
+{
+#if TARGET_HOST_POSIX_X11
+
+ /*
+ * This highly depends on the XFree86 extensions,
+ * not approved as X Consortium standards
+ */
+# ifdef X_XF86VidModeGetModeLine
+
+
+ /*
+ * 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" );
+
+ /*
+ * Remember the current pointer location before going fullscreen
+ * for restoring it later:
+ */
+ {
+ Window junk_window;
+ unsigned int mask;
+
+ XQueryPointer(
+ fgDisplay.Display, fgDisplay.RootWindow,
+ &junk_window, &junk_window,
+ &fgDisplay.DisplayPointerX, &fgDisplay.DisplayPointerY,
+ &fgDisplay.DisplayPointerX, &fgDisplay.DisplayPointerY, &mask
+ );
+ }
+
+ /* Query the current display settings: */
+ fgDisplay.DisplayModeValid =
+ XF86VidModeGetModeLine(
+ fgDisplay.Display,
+ fgDisplay.Screen,
+ &fgDisplay.DisplayModeClock,
+ &fgDisplay.DisplayMode
+ );
+
+ if( !fgDisplay.DisplayModeValid )
+ fgWarning( "XF86VidModeGetModeLine failed" );
+
+# else
+ /*
+ * XXX warning fghRememberState: missing XFree86 video mode extensions,
+ * XXX game mode will not change screen resolution when activated
+ */
+# 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( NULL, 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
+
+# ifdef X_XF86VidModeGetAllModeLines
+ /* Restore the remembered pointer position: */
+ XWarpPointer(
+ fgDisplay.Display, None, fgDisplay.RootWindow, 0, 0, 0, 0,
+ fgDisplay.DisplayPointerX, fgDisplay.DisplayPointerY
+ );
+
+ /*
+ * 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 );
+
+ break;
+ }
+ }
+ XFree( displayModes );
+ }
+
+# else
+ /*
+ * XXX warning fghRestoreState: missing XFree86 video mode extensions,
+ * XXX game mode will not change screen resolution when activated
+ */
+# endif
+
+#elif TARGET_HOST_MS_WINDOWS
+
+ /* Restore the previously rememebered desktop display settings */
+ ChangeDisplaySettings( &fgDisplay.DisplayMode, 0 );
+
+#endif
+}
+
+#if TARGET_HOST_POSIX_X11
+#ifdef X_XF86VidModeGetAllModeLines
+
+/*
+ * 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 ) ) ) {
+ 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
+
+ /*
+ * This highly depends on the XFree86 extensions,
+ * not approved as X Consortium standards
+ */
+# ifdef X_XF86VidModeGetAllModeLines
+
+ /*
+ * This is also used by applcations which check modes by calling
+ * glutGameModeGet(GLUT_GAME_MODE_POSSIBLE), so allow the check:
+ */
+ if( haveToTest || fgDisplay.DisplayModeValid )
+ {
+ XF86VidModeModeInfo** displayModes;
+ int i, displayModesCount;
+
+ 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 );
+ }
+
+# else
+
+ /*
+ * XXX warning fghChangeDisplayMode: missing XFree86 video mode extensions,
+ * XXX game mode will not change screen resolution when activated
+ */
+ success = GL_TRUE;
+
+# endif
+
+#elif TARGET_HOST_MS_WINDOWS
+
+ DEVMODE devMode;
+ char *fggmstr = NULL;
+
+ success = GL_FALSE;
+
+ EnumDisplaySettings( NULL, -1, &devMode );
+ devMode.dmFields |= DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL | DM_DISPLAYFREQUENCY;
+
+ devMode.dmPelsWidth = fgState.GameModeSize.X;
+ devMode.dmPelsHeight = fgState.GameModeSize.Y;
+ devMode.dmBitsPerPel = fgState.GameModeDepth;
+ devMode.dmDisplayFrequency = fgState.GameModeRefresh;
+ devMode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL | DM_DISPLAYFREQUENCY;
+
+ switch ( ChangeDisplaySettingsEx(NULL, &devMode, NULL, haveToTest ? CDS_TEST : CDS_FULLSCREEN , NULL) )
+ {
+ case DISP_CHANGE_SUCCESSFUL:
+ success = GL_TRUE;
+
+ /* update vars in case if windows switched to proper mode */
+ EnumDisplaySettings( NULL, 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 )
+ fgWarning(fggmstr); /* 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 ;) */
+#endif
+
+ return success;
+}
+
+
+/* -- INTERFACE FUNCTIONS -------------------------------------------------- */
+
+/*
+ * Sets the game mode display string
+ */
+void FGAPIENTRY glutGameModeString( const char* string )
+{
+ int width = 640, height = 480, depth = 16, refresh = 72;
+
+ 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
+ );
+
+ /* Hopefully it worked, and if not, we still have the default values */
+ 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 X_XF86VidModeSetViewPort
+
+ 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/SixenseSDK/src/sixense_simple3d/src/freeglut_geometry.c b/SixenseSDK/src/sixense_simple3d/src/freeglut_geometry.c
new file mode 100755
index 0000000..0b17793
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/src/freeglut_geometry.c
@@ -0,0 +1,1215 @@
+/*
+ * 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]*sinn, sint[j]*sinn, cosn);
+ 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/SixenseSDK/src/sixense_simple3d/src/freeglut_glutfont_definitions.c b/SixenseSDK/src/sixense_simple3d/src/freeglut_glutfont_definitions.c
new file mode 100755
index 0000000..454ecb7
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/src/freeglut_glutfont_definitions.c
@@ -0,0 +1,108 @@
+/*
+ * 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/SixenseSDK/src/sixense_simple3d/src/freeglut_init.c b/SixenseSDK/src/sixense_simple3d/src/freeglut_init.c
new file mode 100755
index 0000000..7893f05
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/src/freeglut_init.c
@@ -0,0 +1,1166 @@
+/*
+ * 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 */
+ GL_FALSE, /* InputDevsInitialised */
+ 1, /* AuxiliaryBufferNumber */
+ 4, /* SampleNumber */
+ 1, /* MajorVersion */
+ 0, /* MajorVersion */
+ 0, /* ContextFlags */
+ 0 /* ContextProfile */
+};
+
+
+/* -- 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_ptr;
+ int number_of_atoms;
+ int supported;
+ int i;
+
+ supported = 0;
+
+ atoms_ptr = malloc(sizeof(Atom *));
+ number_of_atoms = fghGetWindowProperty(window,
+ property,
+ XA_ATOM,
+ (unsigned char **) atoms_ptr);
+ for (i = 0; i < number_of_atoms; i++)
+ {
+ if ((*atoms_ptr)[i] == hint)
+ {
+ supported = 1;
+ break;
+ }
+ }
+
+ 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 );
+
+ 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 );
+ }
+
+ /* Set the timer granularity to 1 ms */
+ timeBeginPeriod ( 1 );
+
+#endif
+
+ fgState.Initialised = GL_TRUE;
+
+ /* InputDevice uses GlutTimerFunc(), so fgState.Initialised must be TRUE */
+ fgInitialiseInputDevices();
+}
+
+/*
+ * Perform the freeglut deinitialization...
+ */
+void fgDeinitialize( void )
+{
+ SFG_Timer *timer;
+
+ if( !fgState.Initialised )
+ {
+ fgWarning( "fgDeinitialize(): "
+ "no valid initialization has been performed" );
+ return;
+ }
+
+ /* 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.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
+
+ /* 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;
+
+ /* will return true for VC8 (VC2005) and higher */
+#if TARGET_HOST_MS_WINDOWS && ( _MSC_VER >= 1400 )
+ size_t sLen;
+#if HAVE_ERRNO
+ errno_t err;
+#endif
+#endif
+
+ 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
+ {
+ /* will return true for VC8 (VC2005) and higher */
+#if TARGET_HOST_MS_WINDOWS && ( _MSC_VER >= 1400 ) && HAVE_ERRNO
+ char* fps = NULL;
+ err = _dupenv_s( &fps, &sLen, "GLUT_FPS" );
+ if (err)
+ fgError("Error getting GLUT_FPS environment variable");
+#else
+ const char *fps = getenv( "GLUT_FPS" );
+#endif
+ if( fps )
+ {
+ int interval;
+ sscanf( fps, "%d", &interval );
+
+ if( interval <= 0 )
+ fgState.FPSInterval = 5000; /* 5000 millisecond default */
+ else
+ fgState.FPSInterval = interval;
+ }
+ /* will return true for VC8 (VC2005) and higher */
+#if TARGET_HOST_MS_WINDOWS && ( _MSC_VER >= 1400 ) && HAVE_ERRNO
+ free ( fps ); fps = NULL; /* dupenv_s allocates a string that we must free */
+#endif
+ }
+
+ /* will return true for VC8 (VC2005) and higher */
+#if TARGET_HOST_MS_WINDOWS && ( _MSC_VER >= 1400 ) && HAVE_ERRNO
+ err = _dupenv_s( &displayName, &sLen, "DISPLAY" );
+ if (err)
+ fgError("Error getting DISPLAY environment variable");
+#else
+ displayName = getenv( "DISPLAY" );
+#endif
+
+ 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 );
+ /* will return true for VC8 (VC2005) and higher */
+#if TARGET_HOST_MS_WINDOWS && ( _MSC_VER >= 1400 ) && HAVE_ERRNO
+ free ( displayName ); displayName = NULL; /* dupenv_s allocates a string that we must free */
+#endif
+
+ /*
+ * 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 ;
+ /* will return true for VC8 (VC2005) and higher */
+#if TARGET_HOST_MS_WINDOWS && ( _MSC_VER >= 1400 )
+ char *next_token = NULL;
+#endif
+ size_t len = strlen ( displayMode );
+ char *buffer = (char *)malloc ( (len+1) * sizeof(char) );
+ memcpy ( buffer, displayMode, len );
+ buffer[len] = '\0';
+
+ /* will return true for VC8 (VC2005) and higher */
+#if TARGET_HOST_MS_WINDOWS && ( _MSC_VER >= 1400 )
+ token = strtok_s ( buffer, " \t", &next_token );
+#else
+ token = strtok ( buffer, " \t" );
+#endif
+ 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 ;
+ }
+
+ /* will return true for VC8 (VC2005) and higher */
+#if TARGET_HOST_MS_WINDOWS && ( _MSC_VER >= 1400 )
+ token = strtok_s ( NULL, " \t", &next_token );
+#else
+ token = strtok ( NULL, " \t" );
+#endif
+ }
+
+ 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;
+}
+
+/*** END OF FILE ***/
diff --git a/SixenseSDK/src/sixense_simple3d/src/freeglut_input_devices.c b/SixenseSDK/src/sixense_simple3d/src/freeglut_input_devices.c
new file mode 100755
index 0000000..0e202fa
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/src/freeglut_input_devices.c
@@ -0,0 +1,395 @@
+/*
+ * 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
+#if HAVE_ERRNO
+#include <errno.h>
+#endif
+#include <sys/ioctl.h>
+#include <sys/time.h>
+#include <time.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <termios.h>
+#include <fcntl.h>
+#include <sys/types.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 )
+ {
+ /* will return true for VC8 (VC2005) and higher */
+#if TARGET_HOST_MS_WINDOWS && ( _MSC_VER >= 1400 ) && HAVE_ERRNO
+ char *dial_device=NULL;
+ size_t sLen;
+ errno_t err = _dupenv_s( &dial_device, &sLen, "GLUT_DIALS_SERIAL" );
+ if (err)
+ fgError("Error getting GLUT_DIALS_SERIAL environment variable");
+#else
+ const char *dial_device=NULL;
+ dial_device = getenv ( "GLUT_DIALS_SERIAL" );
+#endif
+#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;
+ /* will return true for VC8 (VC2005) and higher */
+#if TARGET_HOST_MS_WINDOWS && ( _MSC_VER >= 1400 ) && HAVE_ERRNO
+ free ( dial_device ); dial_device = NULL; /* dupenv_s allocates a string that we must free */
+#endif
+ 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/SixenseSDK/src/sixense_simple3d/src/freeglut_internal.h b/SixenseSDK/src/sixense_simple3d/src/freeglut_internal.h
new file mode 100755
index 0000000..2d77ab0
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/src/freeglut_internal.h
@@ -0,0 +1,960 @@
+/*
+ * 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
+
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+/* XXX Update these for each release! */
+#define VERSION_MAJOR 2
+#define VERSION_MINOR 6
+#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(_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__)
+# 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
+
+/* 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: Let's use proper case for MS-Win headers. Even though it's
+ * not required due to case insensitivity, it's a good habit to keep
+ * because the cross-platform includes are case sensitive.
+ */
+#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
+/* 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>
+
+/* These are included based on autoconf directives. */
+#if HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+#if TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
+#elif 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_VPRINTF 1
+#endif
+
+#if !defined(HAVE_VPRINTF) && !defined(HAVE_DOPRNT)
+/* XXX warning directive here? */
+# define HAVE_VPRINTF 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
+
+#ifndef TRUE
+# define TRUE 1
+#endif
+
+#ifndef FALSE
+# define FALSE 0
+#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 );
+
+/* 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 );
+
+
+/* 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 */
+ GLboolean InputDevsInitialised; /* Only initialize if application calls for them */
+
+ 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 */
+};
+
+/* 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 X_XF86VidModeGetModeLine
+ /*
+ * 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 */
+ int DisplayPointerX; /* saved X location of the pointer */
+ int DisplayPointerY; /* saved Y location of the pointer */
+
+#endif /* X_XF86VidModeGetModeLine */
+
+#elif TARGET_HOST_MS_WINDOWS
+ HINSTANCE Instance; /* The application's instance */
+ DEVMODE DisplayMode; /* Desktop's display settings */
+
+#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
+{
+ int Width; /* Window's width in pixels */
+ int Height; /* The same about the height */
+ int OldWidth; /* Window width from before a resize */
+ int OldHeight; /* " height " " " " */
+
+ 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,
+
+ /* 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 ) \
+ { \
+ 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( void );
+#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 );
+
+/*
+ * 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);
+#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/SixenseSDK/src/sixense_simple3d/src/freeglut_joystick.c b/SixenseSDK/src/sixense_simple3d/src/freeglut_joystick.c
new file mode 100755
index 0000000..c009377
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/src/freeglut_joystick.c
@@ -0,0 +1,1801 @@
+/*
+ * 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"
+#if 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
+# if HAVE_SYS_IOCTL_H
+# include <sys/ioctl.h>
+# endif
+# if HAVE_FCNTL_H
+# include <fcntl.h>
+# endif
+# if HAVE_ERRNO
+# include <errno.h>
+# endif
+# if defined(__FreeBSD__) || defined(__NetBSD__)
+/* XXX The below hack is done until freeglut's autoconf is updated. */
+# define HAVE_USB_JS 1
+
+# if defined(__FreeBSD__)
+# 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__)
+
+# 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__)
+# if __FreeBSD_version < 500000
+# include <libusbhid.h>
+# else
+/* XXX The below hack is done until freeglut's autoconf is updated. */
+# define HAVE_USBHID_H 1
+# include <usbhid.h>
+# endif
+# endif
+# include <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;
+ }
+#if HAVE_ERRNO
+ 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 )
+ {
+#if HAVE_ERRNO
+ 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? ***/
+#if HAVE_ERRNO
+ 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(__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(__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(__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 ));
+ }
+ }
+ }
+ }
+#if HAVE_ERRNO
+ 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 ) )
+ {
+#if HAVE_ERRNO
+ 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( __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( __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( __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);
+
+#if HAVE_ERRNO
+ 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( __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( __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/SixenseSDK/src/sixense_simple3d/src/freeglut_main.c b/SixenseSDK/src/sixense_simple3d/src/freeglut_main.c
new file mode 100755
index 0000000..0a45402
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/src/freeglut_main.c
@@ -0,0 +1,2296 @@
+/*
+ * 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"
+#if HAVE_ERRNO
+# include <errno.h>
+#endif
+#include <stdarg.h>
+#if HAVE_VPRINTF
+# define VFPRINTF(s,f,a) vfprintf((s),(f),(a))
+#elif 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.
+ */
+#if 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
+
+
+/*
+ * 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 winRect;
+ int x, y, w, h;
+
+ /*
+ * 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, &winRect );
+ x = winRect.left;
+ y = winRect.top;
+ w = width;
+ h = height;
+
+ if ( window->Parent == NULL )
+ {
+ if ( ! window->IsMenu && (window != fgStructure.GameModeWindow) )
+ {
+ w += GetSystemMetrics( SM_CXSIZEFRAME ) * 2;
+ h += GetSystemMetrics( SM_CYSIZEFRAME ) * 2 +
+ GetSystemMetrics( SM_CYCAPTION );
+ }
+ }
+ else
+ {
+ RECT parentRect;
+ GetWindowRect( window->Parent->Window.Handle, &parentRect );
+ x -= parentRect.left + GetSystemMetrics( SM_CXSIZEFRAME ) * 2;
+ y -= parentRect.top + GetSystemMetrics( SM_CYSIZEFRAME ) * 2 +
+ GetSystemMetrics( SM_CYCAPTION );
+ }
+
+ /*
+ * SWP_NOACTIVATE Do not activate the window
+ * SWP_NOOWNERZORDER Do not change position in z-order
+ * SWP_NOSENDCHANGING Supress WM_WINDOWPOSCHANGING message
+ * SWP_NOZORDER Retains the current Z order (ignore 2nd param)
+ */
+
+ SetWindowPos( window->Window.Handle,
+ HWND_TOP,
+ x, y, w, h,
+ SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOSENDCHANGING |
+ SWP_NOZORDER
+ );
+ }
+#endif
+
+ /*
+ * XXX Should update {window->State.OldWidth, window->State.OldHeight}
+ * XXX to keep in lockstep with POSIX_X11 code.
+ */
+ 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;
+
+ 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;
+
+ 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 );
+
+#if HAVE_ERRNO
+ 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.
+ */
+static 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 decremeted
+ * XXX in mapping from X button numbering to GLUT.
+ */
+ 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;
+ }
+
+ /*
+ * 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:
+ fgWarning ("Unknown X event type: %d\n", event.type);
+ 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 )
+{
+ 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 ); */
+ switch( uMsg )
+ {
+ case WM_CREATE:
+ /* The window structure is passed as the creation structure paramter... */
+ 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( ( 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;
+ }
+
+ 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 */
+ {
+ /*
+ * XXX THIS IS SPECULATIVE -- John Fay, 10/2/03
+ * XXX Should use WHEEL_DELTA instead of 120
+ */
+ int wheel_number = LOWORD( wParam );
+ short ticks = ( short )HIWORD( wParam ) / 120;
+ int direction = 1;
+
+ if( ticks < 0 )
+ {
+ direction = -1;
+ ticks = -ticks;
+ }
+
+ /*
+ * The mouse cursor has moved. Remember the new mouse cursor's position
+ */
+ /* window->State.MouseX = LOWORD( lParam ); */
+ /* Need to adjust by window position, */
+ /* window->State.MouseY = HIWORD( lParam ); */
+ /* change "lParam" to other parameter */
+
+ if( ! FETCH_WCB( *window, MouseWheel ) &&
+ ! FETCH_WCB( *window, Mouse ) )
+ break;
+
+ fgSetWindow( window );
+ fgState.Modifiers = fghGetWin32Modifiers( );
+
+ while( ticks-- )
+ 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 )
+ );
+ }
+
+ 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 );
+
+ 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 );
+
+ 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;
+
+ default:
+ /* Handle unhandled messages */
+ lRet = DefWindowProc( hWnd, uMsg, wParam, lParam );
+ break;
+ }
+
+ return lRet;
+}
+#endif
+
+/*** END OF FILE ***/
diff --git a/SixenseSDK/src/sixense_simple3d/src/freeglut_menu.c b/SixenseSDK/src/sixense_simple3d/src/freeglut_menu.c
new file mode 100755
index 0000000..ea5837e
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/src/freeglut_menu.c
@@ -0,0 +1,1002 @@
+/*
+ * 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/SixenseSDK/src/sixense_simple3d/src/freeglut_misc.c b/SixenseSDK/src/sixense_simple3d/src/freeglut_misc.c
new file mode 100755
index 0000000..4aa809a
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/src/freeglut_misc.c
@@ -0,0 +1,214 @@
+/*
+ * 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/SixenseSDK/src/sixense_simple3d/src/freeglut_overlay.c b/SixenseSDK/src/sixense_simple3d/src/freeglut_overlay.c
new file mode 100755
index 0000000..2a1314a
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/src/freeglut_overlay.c
@@ -0,0 +1,45 @@
+/*
+ * 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/SixenseSDK/src/sixense_simple3d/src/freeglut_spaceball.c b/SixenseSDK/src/sixense_simple3d/src/freeglut_spaceball.c
new file mode 100755
index 0000000..a36008e
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/src/freeglut_spaceball.c
@@ -0,0 +1,454 @@
+/* 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"
+
+#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
+
+static int sball_initialized;
+
+
+void fgInitialiseSpaceball(void)
+{
+ if(sball_initialized) {
+ return;
+ }
+
+#if TARGET_HOST_POSIX_X11
+ {
+ Window w;
+
+ if(!fgStructure.CurrentWindow)
+ return;
+
+ w = fgStructure.CurrentWindow->Window.Handle;
+ if(spnav_x11_open(fgDisplay.Display, w) == -1) {
+ return;
+ }
+ }
+#endif
+
+ sball_initialized = 1;
+}
+
+void fgSpaceballClose(void)
+{
+#if TARGET_HOST_POSIX_X11
+ spnav_close();
+#endif
+}
+
+int fgHasSpaceball(void)
+{
+ if(!sball_initialized) {
+ fgInitialiseSpaceball();
+ if(!sball_initialized) {
+ 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) {
+ fgInitialiseSpaceball();
+ if(!sball_initialized) {
+ 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) {
+ fgInitialiseSpaceball();
+ if(!sball_initialized) {
+ 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(!sball_initialized) {
+ fgInitialiseSpaceball();
+ if(!sball_initialized) {
+ return 0;
+ }
+ }
+
+ return spnav_x11_event(xev, &sev);
+}
+
+void fgSpaceballHandleXEvent(const XEvent *xev)
+{
+ spnav_event sev;
+
+ if(!sball_initialized) {
+ fgInitialiseSpaceball();
+ if(!sball_initialized) {
+ 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>
+#include <errno.h>
+
+#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/SixenseSDK/src/sixense_simple3d/src/freeglut_state.c b/SixenseSDK/src/sixense_simple3d/src/freeglut_state.c
new file mode 100755
index 0000000..589f8ff
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/src/freeglut_state.c
@@ -0,0 +1,895 @@
+/*
+ * 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
+
+/* Check if the window is in full screen state. */
+static int fghCheckFullScreen(void)
+{
+#if TARGET_HOST_POSIX_X11
+ return fgStructure.CurrentWindow->State.IsFullscreen;
+#else
+ return 0;
+#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();
+
+ 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 );
+
+ /*
+ * We need to call GetWindowRect() first...
+ * (this returns the pixel coordinates of the outside of the window)
+ */
+ GetWindowRect( fgStructure.CurrentWindow->Window.Handle, &winRect );
+
+ /* ...then we've got to correct the results we've just received... */
+
+#if !defined(_WIN32_WCE)
+ if ( ( fgStructure.GameModeWindow != fgStructure.CurrentWindow ) && ( fgStructure.CurrentWindow->Parent == NULL ) &&
+ ( ! fgStructure.CurrentWindow->IsMenu ) )
+ {
+ winRect.left += GetSystemMetrics( SM_CXSIZEFRAME );
+ winRect.right -= GetSystemMetrics( SM_CXSIZEFRAME );
+ winRect.top += GetSystemMetrics( SM_CYSIZEFRAME ) + GetSystemMetrics( SM_CYCAPTION );
+ winRect.bottom -= GetSystemMetrics( SM_CYSIZEFRAME );
+ }
+#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 :
+#if defined(_WIN32_WCE)
+ return 0;
+#else
+ return GetSystemMetrics( SM_CXSIZEFRAME );
+#endif /* !defined(_WIN32_WCE) */
+
+ case GLUT_WINDOW_HEADER_HEIGHT :
+#if defined(_WIN32_WCE)
+ return 0;
+#else
+ return GetSystemMetrics( SM_CYCAPTION );
+#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 fghCheckFullScreen();
+
+ 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/SixenseSDK/src/sixense_simple3d/src/freeglut_stroke_mono_roman.c b/SixenseSDK/src/sixense_simple3d/src/freeglut_stroke_mono_roman.c
new file mode 100755
index 0000000..ec86d56
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/src/freeglut_stroke_mono_roman.c
@@ -0,0 +1,2849 @@
+/*
+ * 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/SixenseSDK/src/sixense_simple3d/src/freeglut_stroke_roman.c b/SixenseSDK/src/sixense_simple3d/src/freeglut_stroke_roman.c
new file mode 100755
index 0000000..da4e030
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/src/freeglut_stroke_roman.c
@@ -0,0 +1,2849 @@
+/*
+ * 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/SixenseSDK/src/sixense_simple3d/src/freeglut_structure.c b/SixenseSDK/src/sixense_simple3d/src/freeglut_structure.c
new file mode 100755
index 0000000..e092429
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/src/freeglut_structure.c
@@ -0,0 +1,596 @@
+/*
+ * 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;
+ window->State.OldHeight = window->State.OldWidth = -1;
+
+ 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 = 100, h = 100;
+ 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/SixenseSDK/src/sixense_simple3d/src/freeglut_teapot.c b/SixenseSDK/src/sixense_simple3d/src/freeglut_teapot.c
new file mode 100755
index 0000000..722bca6
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/src/freeglut_teapot.c
@@ -0,0 +1,200 @@
+/*
+ * 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/SixenseSDK/src/sixense_simple3d/src/freeglut_teapot_data.h b/SixenseSDK/src/sixense_simple3d/src/freeglut_teapot_data.h
new file mode 100755
index 0000000..3bf83e1
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/src/freeglut_teapot_data.h
@@ -0,0 +1,2429 @@
+/*
+ * 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/SixenseSDK/src/sixense_simple3d/src/freeglut_videoresize.c b/SixenseSDK/src/sixense_simple3d/src/freeglut_videoresize.c
new file mode 100755
index 0000000..4d00fb9
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/src/freeglut_videoresize.c
@@ -0,0 +1,50 @@
+/*
+ * 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/SixenseSDK/src/sixense_simple3d/src/freeglut_window.c b/SixenseSDK/src/sixense_simple3d/src/freeglut_window.c
new file mode 100755
index 0000000..e19eaff
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/src/freeglut_window.c
@@ -0,0 +1,1743 @@
+/*
+ * 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 */
+#endif
+
+#if defined(_WIN32_WCE)
+# include <Aygshell.h>
+# ifdef FREEGLUT_LIB_PRAGMAS
+# pragma comment( lib, "Aygshell.lib" )
+# endif
+
+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) */
+
+/* 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 == 1 && fgState.MinorVersion == 0;
+}
+
+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 );
+}
+
+/*
+ * Chooses a visual basing on the current display mode settings
+ */
+#if TARGET_HOST_POSIX_X11
+
+#ifndef GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB
+#define GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB 0x20B2
+#endif
+
+GLXFBConfig* fgChooseFBConfig( void )
+{
+ 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;
+ }
+
+ return fbconfig;
+ }
+}
+#endif /* TARGET_HOST_POSIX_X11 */
+
+/*
+ * Setup the pixel format for a Win32 window
+ */
+#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
+
+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 = 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;
+
+ fghFillPFD( ppfd, window->Window.Device, layer_type );
+ pixelformat = ChoosePixelFormat( window->Window.Device, 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(window->Window.Device, 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);
+ }
+
+ return ( pixelformat != 0 ) && ( checkOnly || SetPixelFormat( window->Window.Device, pixelformat, ppfd ) );
+#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
+ );
+
+ /* also register this window to receive spaceball events */
+ fgSpaceballSetWindow(window);
+ }
+#elif TARGET_HOST_MS_WINDOWS
+ 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_POSIX_X11
+
+#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
+
+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;
+
+ /* If nothing fancy has been required, simply use the old context creation GLX API entry */
+ if ( fghIsLegacyContextRequested() )
+ {
+ 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 );
+
+ createContextAttribs = (CreateContextAttribsProc) fghGetProcAddress( "glXCreateContextAttribsARB" );
+ if ( createContextAttribs == NULL ) {
+ fgError( "glXCreateContextAttribsARB not found" );
+ }
+
+ context = createContextAttribs( dpy, config, share_list, direct, attributes );
+ if ( context == NULL ) {
+ fghContextCreationError();
+ }
+ return context;
+}
+#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;
+ XSetWindowAttributes winAttr;
+ XTextProperty textProperty;
+ XSizeHints sizeHints;
+ XWMHints wmHints;
+ unsigned long mask;
+ 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( );
+
+ 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( );
+ fgState.DisplayMode &= ~GLUT_DOUBLE;
+ }
+
+ if( fgState.DisplayMode & GLUT_MULTISAMPLE )
+ {
+ fgState.DisplayMode &= ~GLUT_MULTISAMPLE ;
+ window->Window.FBConfig = fgChooseFBConfig( );
+ fgState.DisplayMode |= GLUT_MULTISAMPLE;
+ }
+ }
+
+ FREEGLUT_INTERNAL_ERROR_EXIT( window->Window.FBConfig != NULL,
+ "FBConfig with necessary capabilities not found", "fgOpenWindow" );
+
+ /* Get the X visual. */
+ visualInfo = glXGetVisualFromFBConfig( fgDisplay.Display,
+ *(window->Window.FBConfig) );
+
+ /*
+ * 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
+ );
+
+ XMapWindow( fgDisplay.Display, window->Window.Handle );
+
+ XFree(visualInfo);
+
+#elif TARGET_HOST_MS_WINDOWS
+
+ WNDCLASS wc;
+ DWORD flags;
+ DWORD exFlags = 0;
+ ATOM atom;
+ int WindowStyle = 0;
+
+ /* 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" );
+
+ 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
+ {
+ int worig = w, horig = h;
+
+#if !defined(_WIN32_WCE)
+ if ( ( ! isSubWindow ) && ( ! window->IsMenu ) )
+ {
+ /*
+ * Update the window dimensions, taking account of window
+ * decorations. "freeglut" is to create the window with the
+ * outside of its border at (x,y) and with dimensions (w,h).
+ */
+ w += (GetSystemMetrics( SM_CXSIZEFRAME ) )*2;
+ h += (GetSystemMetrics( SM_CYSIZEFRAME ) )*2 +
+ GetSystemMetrics( SM_CYCAPTION );
+ }
+#endif /* defined(_WIN32_WCE) */
+
+ if( ! positionUse )
+ {
+ x = CW_USEDEFAULT;
+ y = CW_USEDEFAULT;
+ }
+ /* setting State.Width/Height to call resize callback later */
+ 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 */
+ window->State.Width = window->State.Height = -1;
+ }
+ else
+ {
+ window->State.Width = worig;
+ window->State.Height = horig;
+ }
+
+ /*
+ * There's a small difference between creating the top, child and
+ * game mode windows
+ */
+ flags = WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_VISIBLE;
+
+ if ( window->IsMenu )
+ {
+ flags |= WS_POPUP;
+ exFlags |= WS_EX_TOOLWINDOW;
+ }
+#if !defined(_WIN32_WCE)
+ else if( window->Parent == NULL )
+ flags |= WS_OVERLAPPEDWINDOW;
+#endif
+ else
+ flags |= WS_CHILD;
+ }
+
+#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 );
+
+ /* 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
+ );
+
+ /* Hack to remove the caption (title bar) and/or border
+ * and all the system menu controls.
+ */
+ WindowStyle = GetWindowLong(window->Window.Handle, GWL_STYLE);
+ if ( fgState.DisplayMode & GLUT_CAPTIONLESS )
+ {
+ SetWindowLong ( window->Window.Handle, GWL_STYLE,
+ WindowStyle & ~(WS_DLGFRAME | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX));
+ }
+ else if ( fgState.DisplayMode & GLUT_BORDERLESS )
+ {
+ SetWindowLong ( window->Window.Handle, GWL_STYLE,
+ WindowStyle & ~(WS_BORDER | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX));
+ }
+/* SetWindowPos(window->Window.Handle, NULL, 0, 0, 0, 0,
+ SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED); */
+
+
+#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 TARGET_HOST_POSIX_X11
+
+ if( window->Window.Context )
+ glXDestroyContext( fgDisplay.Display, window->Window.Context );
+ XFree( window->Window.FBConfig );
+ 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. */
+ glutFullScreenToggle();
+ }
+
+ 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. */
+ glutFullScreenToggle();
+ }
+
+#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
+}
+
+#if TARGET_HOST_POSIX_X11
+static int ewmh_fullscr_toggle(void);
+static int resize_fullscr_toogle(void);
+
+static int toggle_fullscreen(void)
+{
+ /* first try the EWMH (_NET_WM_STATE) method ... */
+ if(ewmh_fullscr_toggle() != -1) {
+ return 0;
+ }
+
+ /* fall back to resizing the window */
+ if(resize_fullscr_toogle() != -1) {
+ return 0;
+ }
+ return -1;
+}
+
+#define _NET_WM_STATE_TOGGLE 2
+static int ewmh_fullscr_toggle(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 resize_fullscr_toogle(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;
+}
+#endif /* TARGET_HOST_POSIX_X11 */
+
+
+/*
+ * 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 TARGET_HOST_POSIX_X11
+ if(!glutGet(GLUT_FULL_SCREEN)) {
+ if(toggle_fullscreen() != -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 resizing. */
+ glutFullScreenToggle();
+ }
+
+ {
+ 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 );
+
+ /*
+ * SWP_NOACTIVATE Do not activate the window
+ * SWP_NOOWNERZORDER Do not change position in z-order
+ * SWP_NOSENDCHANGING Supress 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
+}
+
+/*
+ * 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(toggle_fullscreen() != -1) {
+ win->State.IsFullscreen = !win->State.IsFullscreen;
+ }
+#elif TARGET_HOST_MS_WINDOWS
+ glutFullScreen();
+ win->State.IsFullscreen = !win->State.IsFullscreen;
+#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/SixenseSDK/src/sixense_simple3d/src/freeglutdll.def b/SixenseSDK/src/sixense_simple3d/src/freeglutdll.def
new file mode 100755
index 0000000..724f0be
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/src/freeglutdll.def
@@ -0,0 +1,148 @@
+LIBRARY freeglut
+VERSION 2.6
+EXPORTS
+ glutInit
+ glutInitWindowPosition
+ glutInitWindowSize
+ glutInitDisplayMode
+ glutInitDisplayString
+ glutMainLoop
+ glutMainLoopEvent
+ glutLeaveMainLoop
+ glutCreateWindow
+ glutCreateSubWindow
+ glutDestroyWindow
+ glutSetWindow
+ glutGetWindow
+ glutSetWindowData
+ glutGetWindowData
+ glutSetWindowTitle
+ glutSetIconTitle
+ glutReshapeWindow
+ glutPositionWindow
+ glutShowWindow
+ glutHideWindow
+ glutIconifyWindow
+ glutPushWindow
+ glutPopWindow
+ glutFullScreen
+ glutPostWindowRedisplay
+ glutPostRedisplay
+ glutSwapBuffers
+ glutWarpPointer
+ glutSetCursor
+ glutEstablishOverlay
+ glutRemoveOverlay
+ glutUseLayer
+ glutPostOverlayRedisplay
+ glutPostWindowOverlayRedisplay
+ glutShowOverlay
+ glutHideOverlay
+ glutCreateMenu
+ glutDestroyMenu
+ glutGetMenu
+ glutSetMenu
+ glutGetMenuData
+ glutSetMenuData
+ glutAddMenuEntry
+ glutAddSubMenu
+ glutChangeToMenuEntry
+ glutChangeToSubMenu
+ glutRemoveMenuItem
+ glutAttachMenu
+ glutDetachMenu
+ glutTimerFunc
+ glutIdleFunc
+ glutKeyboardFunc
+ glutSpecialFunc
+ glutReshapeFunc
+ glutVisibilityFunc
+ glutDisplayFunc
+ glutMouseFunc
+ glutMouseWheelFunc
+ glutMotionFunc
+ glutPassiveMotionFunc
+ glutEntryFunc
+ glutCloseFunc
+ glutWMCloseFunc
+ glutKeyboardUpFunc
+ glutSpecialUpFunc
+ glutJoystickFunc
+ glutMenuStateFunc
+ glutMenuStatusFunc
+ glutMenuDestroyFunc
+ glutOverlayDisplayFunc
+ glutWindowStatusFunc
+ glutSpaceballMotionFunc
+ glutSpaceballRotateFunc
+ glutSpaceballButtonFunc
+ glutButtonBoxFunc
+ glutDialsFunc
+ glutTabletMotionFunc
+ glutTabletButtonFunc
+ glutSetOption
+ glutGet
+ glutDeviceGet
+ glutGetModifiers
+ glutLayerGet
+ glutBitmapCharacter
+ glutBitmapWidth
+ glutStrokeCharacter
+ glutStrokeWidth
+ glutBitmapLength
+ glutStrokeLength
+ glutBitmapHeight
+ glutStrokeHeight
+ glutBitmapString
+ glutStrokeString
+ glutWireCube
+ glutSolidCube
+ glutWireSphere
+ glutSolidSphere
+ glutWireCone
+ glutSolidCone
+ glutWireTorus
+ glutSolidTorus
+ glutWireDodecahedron
+ glutSolidDodecahedron
+ glutWireOctahedron
+ glutSolidOctahedron
+ glutWireTetrahedron
+ glutSolidTetrahedron
+ glutWireIcosahedron
+ glutSolidIcosahedron
+ glutWireRhombicDodecahedron
+ glutSolidRhombicDodecahedron
+ glutWireSierpinskiSponge
+ glutSolidSierpinskiSponge
+ glutWireTeapot
+ glutSolidTeapot
+ glutWireCylinder
+ glutSolidCylinder
+ glutGameModeString
+ glutEnterGameMode
+ glutLeaveGameMode
+ glutGameModeGet
+ glutVideoResizeGet
+ glutSetupVideoResizing
+ glutStopVideoResizing
+ glutVideoResize
+ glutVideoPan
+ glutSetColor
+ glutGetColor
+ glutCopyColormap
+ glutIgnoreKeyRepeat
+ glutSetKeyRepeat
+ glutForceJoystickFunc
+ glutExtensionSupported
+ glutReportErrors
+ glutGetProcAddress
+ glutExit
+ glutFullScreenToggle
+ glutGetModeValues
+ glutInitContextFlags
+ glutInitContextVersion
+ glutInitContextProfile
+ __glutInitWithExit
+ __glutCreateWindowWithExit
+ __glutCreateMenuWithExit
diff --git a/SixenseSDK/src/sixense_simple3d/src/templates/cpp_template b/SixenseSDK/src/sixense_simple3d/src/templates/cpp_template
new file mode 100755
index 0000000..9d4d4fa
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/src/templates/cpp_template
@@ -0,0 +1,17 @@
+INVALID TEMPLATE, MOVED TO XFREE86-STYLE LICENSE
+
+/*
+ * |FILENAME|
+ *
+ * Here comes the file's contents description.
+ *
+ * Copyright (c) |YEAR| by |AUTHOR|
+ * Written by |AUTHOR|, <|EMAIL|>
+ * Creation date: |DATE|
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ */
+
diff --git a/SixenseSDK/src/sixense_simple3d/src/templates/header_template b/SixenseSDK/src/sixense_simple3d/src/templates/header_template
new file mode 100755
index 0000000..9d4d4fa
--- /dev/null
+++ b/SixenseSDK/src/sixense_simple3d/src/templates/header_template
@@ -0,0 +1,17 @@
+INVALID TEMPLATE, MOVED TO XFREE86-STYLE LICENSE
+
+/*
+ * |FILENAME|
+ *
+ * Here comes the file's contents description.
+ *
+ * Copyright (c) |YEAR| by |AUTHOR|
+ * Written by |AUTHOR|, <|EMAIL|>
+ * Creation date: |DATE|
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ */
+
diff --git a/X-Plane-SDK/CHeaders/Widgets/XPStandardWidgets.h b/X-Plane-SDK/CHeaders/Widgets/XPStandardWidgets.h
new file mode 100755
index 0000000..fe5b4a8
--- /dev/null
+++ b/X-Plane-SDK/CHeaders/Widgets/XPStandardWidgets.h
@@ -0,0 +1,580 @@
+#ifndef _XPStandardWidgets_h_
+#define _XPStandardWidgets_h_
+
+/*
+ * Copyright 2005-2012 Sandy Barbour and Ben Supnik
+ *
+ * All rights reserved. See license.txt for usage.
+ *
+ * X-Plane SDK Version: 2.1.1
+ *
+ */
+
+/*
+ * XPStandardWidgets - THEORY OF OPERATION
+ *
+ * The standard widgets are widgets built into the widgets library. While you
+ * can gain access to the widget function that drives them, you generally use
+ * them by calling XPCreateWidget and then listening for special messages,
+ * etc.
+ *
+ * The standard widgets often send mesages to themselves when the user
+ * performs an event; these messages are sent up the widget hierarchy until
+ * they are handled. So you can add a widget proc directly to a push button
+ * (for example) to intercept the message when it is clicked, or you can put
+ * one widget proc on a window for all of the push buttons in the window.
+ * Most of these messages contain the original widget ID as a parameter so you
+ * can know which widget is messaging no matter who it is sent to.
+ *
+ */
+
+#include "XPWidgetDefs.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/***************************************************************************
+ * MAIN WINDOW
+ ***************************************************************************/
+/*
+ * The main window widget class provides a "window" as the user knows it.
+ * These windows are dragable and can be selected. Use them to create
+ * floating windows and non-modal dialogs.
+ *
+ */
+
+
+
+#define xpWidgetClass_MainWindow 1
+
+/*
+ * Main Window Type Values
+ *
+ * These type values are used to control the appearance of a main window.
+ *
+ */
+enum {
+ /* The standard main window; pin stripes on XP7, metal frame on XP 6. */
+ xpMainWindowStyle_MainWindow = 0
+
+ /* A translucent dark gray window, like the one ATC messages appear in. */
+ ,xpMainWindowStyle_Translucent = 1
+
+
+};
+
+/*
+ * Main Window Properties
+ *
+ *
+ */
+enum {
+ /* This property specifies the type of window. Set to one of the main window *
+ * types above. */
+ xpProperty_MainWindowType = 1100
+
+ /* This property specifies whether the main window has close boxes in its *
+ * corners. */
+ ,xpProperty_MainWindowHasCloseBoxes = 1200
+
+
+};
+
+/*
+ * MainWindow Messages
+ *
+ *
+ */
+enum {
+ /* This message is sent when the close buttons are pressed for your window. */
+ xpMessage_CloseButtonPushed = 1200
+
+
+};
+
+/***************************************************************************
+ * SUB WINDOW
+ ***************************************************************************/
+/*
+ * X-plane dialogs are divided into separate areas; the sub window widgets
+ * allow you to make these areas. Create one main window and place several
+ * subwindows inside it. Then place your controls inside the subwindows.
+ *
+ */
+
+
+
+#define xpWidgetClass_SubWindow 2
+
+/*
+ * SubWindow Type Values
+ *
+ * These values control the appearance of the subwindow.
+ *
+ */
+enum {
+ /* A panel that sits inside a main window. */
+ xpSubWindowStyle_SubWindow = 0
+
+ /* A screen that sits inside a panel for showing text information. */
+ ,xpSubWindowStyle_Screen = 2
+
+ /* A list view for scrolling lists. */
+ ,xpSubWindowStyle_ListView = 3
+
+
+};
+
+/*
+ * SubWindow Properties
+ *
+ *
+ */
+enum {
+ /* This property specifies the type of window. Set to one of the subwindow *
+ * types above. */
+ xpProperty_SubWindowType = 1200
+
+
+};
+
+/***************************************************************************
+ * BUTTON
+ ***************************************************************************/
+/*
+ * The button class provides a number of different button styles and
+ * behaviors, including push buttons, radio buttons, check boxes, etc. The
+ * button label appears on or next to the button depending on the button's
+ * appearance, or type.
+ *
+ * The button's behavior is a separate property that dictates who it hilights
+ * and what kinds of messages it sends. Since behavior and type are
+ * different, you can do strange things like make check boxes that act as push
+ * buttons or push buttons with radio button behavior.
+ *
+ * In X-Plane 6 there were no check box graphics. The result is the following
+ * behavior: in x-plane 6 all check box and radio buttons are round
+ * (radio-button style) buttons; in X-Plane 7 they are all square (check-box
+ * style) buttons. In a future version of x-plane, the xpButtonBehavior enums
+ * will provide the correct graphic (check box or radio button) giving the
+ * expected result.
+ *
+ */
+
+
+
+#define xpWidgetClass_Button 3
+
+/*
+ * Button Types
+ *
+ * These define the visual appearance of buttons but not how they respond to
+ * the mouse.
+ *
+ */
+enum {
+ /* This is a standard push button, like an "OK" or "Cancel" button in a dialog *
+ * box. */
+ xpPushButton = 0
+
+ /* A check box or radio button. Use this and the button behaviors below to *
+ * get the desired behavior. */
+ ,xpRadioButton = 1
+
+ /* A window close box. */
+ ,xpWindowCloseBox = 3
+
+ /* A small down arrow. */
+ ,xpLittleDownArrow = 5
+
+ /* A small up arrow. */
+ ,xpLittleUpArrow = 6
+
+
+};
+
+/*
+ * Button Behavior Values
+ *
+ * These define how the button responds to mouse clicks.
+ *
+ */
+enum {
+ /* Standard push button behavior. The button hilites while the mouse is *
+ * clicked over it and unhilites when the mouse is moved outside of it or *
+ * released. If the mouse is released over the button, the *
+ * xpMsg_PushButtonPressed message is sent. */
+ xpButtonBehaviorPushButton = 0
+
+ /* Check box behavior. The button immediately toggles its value when the *
+ * mouse is clicked and sends out a xpMsg_ButtonStateChanged message. */
+ ,xpButtonBehaviorCheckBox = 1
+
+ /* Radio button behavior. The button immediately sets its state to one and *
+ * sends out a xpMsg_ButtonStateChanged message if it was not already set to *
+ * one. You must turn off other radio buttons in a group in your code. */
+ ,xpButtonBehaviorRadioButton = 2
+
+
+};
+
+/*
+ * Button Properties
+ *
+ *
+ */
+enum {
+ /* This property sets the visual type of button. Use one of the button types *
+ * above. */
+ xpProperty_ButtonType = 1300
+
+ /* This property sets the button's behavior. Use one of the button behaviors *
+ * above. */
+ ,xpProperty_ButtonBehavior = 1301
+
+ /* This property tells whether a check box or radio button is "checked" or *
+ * not. Not used for push buttons. */
+ ,xpProperty_ButtonState = 1302
+
+
+};
+
+/*
+ * Button Messages
+ *
+ * These messages are sent by the button to itself and then up the widget
+ * chain when the button is clicked. (You may intercept them by providing a
+ * widget handler for the button itself or by providing a handler in a parent
+ * widget.)
+ *
+ */
+enum {
+ /* This message is sent when the user completes a click and release in a *
+ * button with push button behavior. Parameter one of the message is the *
+ * widget ID of the button. This message is dispatched up the widget *
+ * hierarchy. */
+ xpMsg_PushButtonPressed = 1300
+
+ /* This message is sent when a button is clicked that has radio button or *
+ * check box behavior and its value changes. (Note that if the value changes *
+ * by setting a property you do not receive this message!) Parameter one is *
+ * the widget ID of the button, parameter 2 is the new state value, either *
+ * zero or one. This message is dispatched up the widget hierarchy. */
+ ,xpMsg_ButtonStateChanged = 1301
+
+
+};
+
+/***************************************************************************
+ * TEXT FIELD
+ ***************************************************************************/
+/*
+ * The text field widget provides an editable text field including mouse
+ * selection and keyboard navigation. The contents of the text field are its
+ * descriptor. (The descriptor changes as the user types.)
+ *
+ * The text field can have a number of types, that effect the visual layout of
+ * the text field. The text field sends messages to itself so you may control
+ * its behavior.
+ *
+ * If you need to filter keystrokes, add a new handler and intercept the key
+ * press message. Since key presses are passed by pointer, you can modify the
+ * keystroke and pass it through to the text field widget.
+ *
+ * WARNING: in x-plane before 7.10 (including 6.70) null characters could
+ * crash x-plane. To prevent this, wrap this object with a filter function
+ * (more instructions can be found on the SDK website).
+ *
+ */
+
+
+
+#define xpWidgetClass_TextField 4
+
+/*
+ * Text Field Type Values
+ *
+ * These control the look of the text field.
+ *
+ */
+enum {
+ /* A field for text entry. */
+ xpTextEntryField = 0
+
+ /* A transparent text field. The user can type and the text is drawn, but no *
+ * background is drawn. You can draw your own background by adding a widget *
+ * handler and prehandling the draw message. */
+ ,xpTextTransparent = 3
+
+ /* A translucent edit field, dark gray. */
+ ,xpTextTranslucent = 4
+
+
+};
+
+/*
+ * Text Field Properties
+ *
+ *
+ */
+enum {
+ /* This is the character position the selection starts at, zero based. If it *
+ * is the same as the end insertion point, the insertion point is not a *
+ * selection. */
+ xpProperty_EditFieldSelStart = 1400
+
+ /* This is the character position of the end of the selection. */
+ ,xpProperty_EditFieldSelEnd = 1401
+
+ /* This is the character position a drag was started at if the user is *
+ * dragging to select text, or -1 if a drag is not in progress. */
+ ,xpProperty_EditFieldSelDragStart = 1402
+
+ /* This is the type of text field to display, from the above list. */
+ ,xpProperty_TextFieldType = 1403
+
+ /* Set this property to 1 to password protect the field. Characters will be *
+ * drawn as *s even though the descriptor will contain plain-text. */
+ ,xpProperty_PasswordMode = 1404
+
+ /* The max number of characters you can enter, if limited. Zero means *
+ * unlimited. */
+ ,xpProperty_MaxCharacters = 1405
+
+ /* The first visible character on the left. This effectively scrolls the text *
+ * field. */
+ ,xpProperty_ScrollPosition = 1406
+
+ /* The font to draw the field's text with. (An XPLMFontID.) */
+ ,xpProperty_Font = 1407
+
+ /* This is the active side of the insert selection. (Internal) */
+ ,xpProperty_ActiveEditSide = 1408
+
+
+};
+
+/*
+ * Text Field Messages
+ *
+ *
+ */
+enum {
+ /* Text Field Messages *
+ * *
+ * The text field sends this message to itself when its text changes. It *
+ * sends the message up the call chain; param1 is the text field's widget ID. */
+ xpMsg_TextFieldChanged = 1400
+
+
+};
+
+/***************************************************************************
+ * SCROLL BAR
+ ***************************************************************************/
+/*
+ * A standard scroll bar or slider control. The scroll bar has a minimum,
+ * maximum and current value that is updated when the user drags it. The
+ * scroll bar sends continuous messages as it is dragged.
+ *
+ */
+
+
+
+#define xpWidgetClass_ScrollBar 5
+
+/*
+ * Scroll Bar Type Values
+ *
+ * This defines how the scroll bar looks.
+ *
+ */
+enum {
+ /* Scroll bar types. *
+ * *
+ * A standard x-plane scroll bar (with arrows on the ends). */
+ xpScrollBarTypeScrollBar = 0
+
+ /* A slider, no arrows. */
+ ,xpScrollBarTypeSlider = 1
+
+
+};
+
+/*
+ * Scroll Bar Properties
+ *
+ *
+ */
+enum {
+ /* The current position of the thumb (in between the min and max, inclusive) */
+ xpProperty_ScrollBarSliderPosition = 1500
+
+ /* The value the scroll bar has when the thumb is in the lowest position. */
+ ,xpProperty_ScrollBarMin = 1501
+
+ /* The value the scroll bar has when the thumb is in the highest position. */
+ ,xpProperty_ScrollBarMax = 1502
+
+ /* How many units to moev the scroll bar when clicking next to the thumb. The *
+ * scroll bar always moves one unit when the arrows are clicked. */
+ ,xpProperty_ScrollBarPageAmount = 1503
+
+ /* The type of scrollbar from the enums above. */
+ ,xpProperty_ScrollBarType = 1504
+
+ /* Used internally. */
+ ,xpProperty_ScrollBarSlop = 1505
+
+
+};
+
+/*
+ * Scroll Bar Messages
+ *
+ *
+ */
+enum {
+ /* The Scroll Bar sends this message when the slider position changes. It *
+ * sends the message up the call chain; param1 is the Scroll Bar widget ID. */
+ xpMsg_ScrollBarSliderPositionChanged = 1500
+
+
+};
+
+/***************************************************************************
+ * CAPTION
+ ***************************************************************************/
+/*
+ * A caption is a simple widget that shows its descriptor as a string, useful
+ * for labeling parts of a window. It always shows its descriptor as its
+ * string and is otherwise transparent.
+ *
+ */
+
+
+
+#define xpWidgetClass_Caption 6
+
+/*
+ * Caption Properties
+ *
+ *
+ */
+enum {
+ /* This property specifies whether the caption is lit; use lit captions *
+ * against screens. */
+ xpProperty_CaptionLit = 1600
+
+
+};
+
+/***************************************************************************
+ * GENERAL GRAPHICS
+ ***************************************************************************/
+/*
+ * The general graphics widget can show one of many icons available from
+ * x-plane.
+ *
+ */
+
+
+
+#define xpWidgetClass_GeneralGraphics 7
+
+/*
+ * General Graphics Types Values
+ *
+ * These define the icon for the general graphics.
+ *
+ */
+enum {
+ xpShip = 4
+
+ ,xpILSGlideScope = 5
+
+ ,xpMarkerLeft = 6
+
+ ,xp_Airport = 7
+
+ ,xpNDB = 8
+
+ ,xpVOR = 9
+
+ ,xpRadioTower = 10
+
+ ,xpAircraftCarrier = 11
+
+ ,xpFire = 12
+
+ ,xpMarkerRight = 13
+
+ ,xpCustomObject = 14
+
+ ,xpCoolingTower = 15
+
+ ,xpSmokeStack = 16
+
+ ,xpBuilding = 17
+
+ ,xpPowerLine = 18
+
+ ,xpVORWithCompassRose = 19
+
+ ,xpOilPlatform = 21
+
+ ,xpOilPlatformSmall = 22
+
+ ,xpWayPoint = 23
+
+
+};
+
+/*
+ * General Graphics Properties
+ *
+ *
+ */
+enum {
+ /* This property controls the type of icon that is drawn. */
+ xpProperty_GeneralGraphicsType = 1700
+
+
+};
+
+/***************************************************************************
+ * PROGRESS INDICATOR
+ ***************************************************************************/
+/*
+ * This widget implements a progress indicator as seen when x-plane starts up.
+ *
+ */
+
+
+
+#define xpWidgetClass_Progress 8
+
+/*
+ * Progress Indicator Properties
+ *
+ *
+ */
+enum {
+ /* This is the current value of the progress indicator. */
+ xpProperty_ProgressPosition = 1800
+
+ /* This is the minimum value, equivalent to 0% filled. */
+ ,xpProperty_ProgressMin = 1801
+
+ /* This is the maximum value, equivalent to 100% filled. */
+ ,xpProperty_ProgressMax = 1802
+
+
+};
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/X-Plane-SDK/CHeaders/Widgets/XPUIGraphics.h b/X-Plane-SDK/CHeaders/Widgets/XPUIGraphics.h
new file mode 100755
index 0000000..24822c6
--- /dev/null
+++ b/X-Plane-SDK/CHeaders/Widgets/XPUIGraphics.h
@@ -0,0 +1,363 @@
+#ifndef _XPUIGraphics_h_
+#define _XPUIGraphics_h_
+
+/*
+ * Copyright 2005-2012 Sandy Barbour and Ben Supnik
+ *
+ * All rights reserved. See license.txt for usage.
+ *
+ * X-Plane SDK Version: 2.1.1
+ *
+ */
+
+/*
+ *
+ *
+ */
+
+#include "XPWidgetDefs.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/***************************************************************************
+ * UI GRAPHICS
+ ***************************************************************************/
+/*
+ *
+ *
+ */
+
+
+/*
+ * XPWindowStyle
+ *
+ * There are a few built-in window styles in X-Plane that you can use.
+ *
+ * Note that X-Plane 6 does not offer real shadow-compositing; you must make
+ * sure to put a window on top of another window of the right style to the
+ * shadows work, etc. This applies to elements with insets and shadows. The
+ * rules are:
+ *
+ * Sub windows must go on top of main windows, and screens and list views on
+ * top of subwindows. Only help and main windows can be over the main screen.
+ *
+ *
+ * With X-Plane 7 any window or element may be placed over any other element.
+ *
+ * Some windows are scaled by stretching, some by repeating. The drawing
+ * routines know which scaling method to use. The list view cannot be
+ * rescaled in x-plane 6 because it has both a repeating pattern and a
+ * gradient in one element. All other elements can be rescaled.
+ *
+ */
+enum {
+ /* An LCD screen that shows help. */
+ xpWindow_Help = 0
+
+ /* A dialog box window. */
+ ,xpWindow_MainWindow = 1
+
+ /* A panel or frame within a dialog box window. */
+ ,xpWindow_SubWindow = 2
+
+ /* An LCD screen within a panel to hold text displays. */
+ ,xpWindow_Screen = 4
+
+ /* A list view within a panel for scrolling file names, etc. */
+ ,xpWindow_ListView = 5
+
+
+};
+typedef int XPWindowStyle;
+
+/*
+ * XPDrawWindow
+ *
+ * This routine draws a window of the given dimensions at the given offset on
+ * the virtual screen in a given style. The window is automatically scaled as
+ * appropriate using a bitmap scaling technique (scaling or repeating) as
+ * appropriate to the style.
+ *
+ */
+WIDGET_API void XPDrawWindow(
+ int inX1,
+ int inY1,
+ int inX2,
+ int inY2,
+ XPWindowStyle inStyle);
+
+/*
+ * XPGetWindowDefaultDimensions
+ *
+ * This routine returns the default dimensions for a window. Output is either
+ * a minimum or fixed value depending on whether the window is scalable.
+ *
+ */
+WIDGET_API void XPGetWindowDefaultDimensions(
+ XPWindowStyle inStyle,
+ int * outWidth, /* Can be NULL */
+ int * outHeight); /* Can be NULL */
+
+/*
+ * XPElementStyle
+ *
+ * Elements are individually drawable UI things like push buttons, etc. The
+ * style defines what kind of element you are drawing. Elements can be
+ * stretched in one or two dimensions (depending on the element). Some
+ * elements can be lit.
+ *
+ * In x-plane 6 some elements must be drawn over metal. Some are scalable and
+ * some are not. Any element can be drawn anywhere in x-plane 7.
+ *
+ * Scalable Axis Required Background
+ *
+ */
+enum {
+ /* x metal */
+ xpElement_TextField = 6
+
+ /* none metal */
+ ,xpElement_CheckBox = 9
+
+ /* none metal */
+ ,xpElement_CheckBoxLit = 10
+
+ /* none window header */
+ ,xpElement_WindowCloseBox = 14
+
+ /* none window header */
+ ,xpElement_WindowCloseBoxPressed = 15
+
+ /* x metal */
+ ,xpElement_PushButton = 16
+
+ /* x metal */
+ ,xpElement_PushButtonLit = 17
+
+ /* none any */
+ ,xpElement_OilPlatform = 24
+
+ /* none any */
+ ,xpElement_OilPlatformSmall = 25
+
+ /* none any */
+ ,xpElement_Ship = 26
+
+ /* none any */
+ ,xpElement_ILSGlideScope = 27
+
+ /* none any */
+ ,xpElement_MarkerLeft = 28
+
+ /* none any */
+ ,xpElement_Airport = 29
+
+ /* none any */
+ ,xpElement_Waypoint = 30
+
+ /* none any */
+ ,xpElement_NDB = 31
+
+ /* none any */
+ ,xpElement_VOR = 32
+
+ /* none any */
+ ,xpElement_RadioTower = 33
+
+ /* none any */
+ ,xpElement_AircraftCarrier = 34
+
+ /* none any */
+ ,xpElement_Fire = 35
+
+ /* none any */
+ ,xpElement_MarkerRight = 36
+
+ /* none any */
+ ,xpElement_CustomObject = 37
+
+ /* none any */
+ ,xpElement_CoolingTower = 38
+
+ /* none any */
+ ,xpElement_SmokeStack = 39
+
+ /* none any */
+ ,xpElement_Building = 40
+
+ /* none any */
+ ,xpElement_PowerLine = 41
+
+ /* none metal */
+ ,xpElement_CopyButtons = 45
+
+ /* none metal */
+ ,xpElement_CopyButtonsWithEditingGrid = 46
+
+ /* x, y metal */
+ ,xpElement_EditingGrid = 47
+
+ /* THIS CAN PROBABLY BE REMOVED */
+ ,xpElement_ScrollBar = 48
+
+ /* none any */
+ ,xpElement_VORWithCompassRose = 49
+
+ /* none metal */
+ ,xpElement_Zoomer = 51
+
+ /* x, y metal */
+ ,xpElement_TextFieldMiddle = 52
+
+ /* none metal */
+ ,xpElement_LittleDownArrow = 53
+
+ /* none metal */
+ ,xpElement_LittleUpArrow = 54
+
+ /* none metal */
+ ,xpElement_WindowDragBar = 61
+
+ /* none metal */
+ ,xpElement_WindowDragBarSmooth = 62
+
+
+};
+typedef int XPElementStyle;
+
+/*
+ * XPDrawElement
+ *
+ * XPDrawElement draws a given element at an offset on the virtual screen in
+ * set dimensions. EVEN if the element is not scalable, it will be scaled if
+ * the width and height do not match the preferred dimensions; it'll just look
+ * ugly. Pass inLit to see the lit version of the element; if the element
+ * cannot be lit this is ignored.
+ *
+ */
+WIDGET_API void XPDrawElement(
+ int inX1,
+ int inY1,
+ int inX2,
+ int inY2,
+ XPElementStyle inStyle,
+ int inLit);
+
+/*
+ * XPGetElementDefaultDimensions
+ *
+ * This routine returns the recommended or minimum dimensions of a given UI
+ * element. outCanBeLit tells whether the element has both a lit and unlit
+ * state. Pass NULL to not receive any of these parameters.
+ *
+ */
+WIDGET_API void XPGetElementDefaultDimensions(
+ XPElementStyle inStyle,
+ int * outWidth, /* Can be NULL */
+ int * outHeight, /* Can be NULL */
+ int * outCanBeLit); /* Can be NULL */
+
+/*
+ * XPTrackStyle
+ *
+ * A track is a UI element that displays a value vertically or horizontally.
+ * X-Plane has three kinds of tracks: scroll bars, sliders, and progress bars.
+ * Tracks can be displayed either horizontally or vertically; tracks will
+ * choose their own layout based on the larger dimension of their dimensions
+ * (e.g. they know if they are tall or wide). Sliders may be lit or unlit
+ * (showing the user manipulating them).
+ *
+ * ScrollBar - this is a standard scroll bar with arrows and a thumb to drag.
+ * Slider - this is a simple track with a ball in the middle that can be
+ * slid. Progress - this is a progress indicator showing how a long task is
+ * going.
+ *
+ */
+enum {
+ /* not over metal can be lit can be rotated */
+ xpTrack_ScrollBar = 0
+
+ /* over metal can be lit can be rotated */
+ ,xpTrack_Slider = 1
+
+ /* over metal cannot be lit cannot be rotated */
+ ,xpTrack_Progress = 2
+
+
+};
+typedef int XPTrackStyle;
+
+/*
+ * XPDrawTrack
+ *
+ * This routine draws a track. You pass in the track dimensions and size; the
+ * track picks the optimal orientation for these dimensions. Pass in the
+ * track's minimum current and maximum values; the indicator will be
+ * positioned appropriately. You can also specify whether the track is lit or
+ * not.
+ *
+ */
+WIDGET_API void XPDrawTrack(
+ int inX1,
+ int inY1,
+ int inX2,
+ int inY2,
+ int inMin,
+ int inMax,
+ int inValue,
+ XPTrackStyle inTrackStyle,
+ int inLit);
+
+/*
+ * XPGetTrackDefaultDimensions
+ *
+ * This routine returns a track's default smaller dimension; all tracks are
+ * scalable in the larger dimension. It also returns whether a track can be
+ * lit.
+ *
+ */
+WIDGET_API void XPGetTrackDefaultDimensions(
+ XPTrackStyle inStyle,
+ int * outWidth,
+ int * outCanBeLit);
+
+/*
+ * XPGetTrackMetrics
+ *
+ * This routine returns the metrics of a track. If you want to write UI code
+ * to manipulate a track, this routine helps you know where the mouse
+ * locations are. For most other elements, the rectangle the element is drawn
+ * in is enough information. However, the scrollbar drawing routine does some
+ * automatic placement; this routine lets you know where things ended up. You
+ * pass almost everything you would pass to the draw routine. You get out the
+ * orientation, and other useful stuff.
+ *
+ * Besides orientation, you get five dimensions for the five parts of a
+ * scrollbar, which are the down button, down area (area before the thumb),
+ * the thumb, and the up area and button. For horizontal scrollers, the left
+ * button decreases; for vertical scrollers, the top button decreases.
+ *
+ */
+WIDGET_API void XPGetTrackMetrics(
+ int inX1,
+ int inY1,
+ int inX2,
+ int inY2,
+ int inMin,
+ int inMax,
+ int inValue,
+ XPTrackStyle inTrackStyle,
+ int * outIsVertical,
+ int * outDownBtnSize,
+ int * outDownPageSize,
+ int * outThumbSize,
+ int * outUpPageSize,
+ int * outUpBtnSize);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/X-Plane-SDK/CHeaders/Widgets/XPWidgetDefs.h b/X-Plane-SDK/CHeaders/Widgets/XPWidgetDefs.h
new file mode 100755
index 0000000..18a1bca
--- /dev/null
+++ b/X-Plane-SDK/CHeaders/Widgets/XPWidgetDefs.h
@@ -0,0 +1,486 @@
+#ifndef _XPWidgetDefs_h_
+#define _XPWidgetDefs_h_
+
+/*
+ * Copyright 2005-2012 Sandy Barbour and Ben Supnik
+ *
+ * All rights reserved. See license.txt for usage.
+ *
+ * X-Plane SDK Version: 2.1.1
+ *
+ */
+
+/*
+ *
+ *
+ */
+
+#include "XPLMDefs.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#if APL
+ #if XPWIDGETS
+ #if __GNUC__ >= 4
+ #define WIDGET_API __attribute__((visibility("default")))
+ #elif __MACH__
+ #define WIDGET_API
+ #else
+ #define WIDGET_API __declspec(dllexport)
+ #endif
+ #else
+ #define WIDGET_API
+ #endif
+#elif IBM
+ #if XPWIDGETS
+ #define WIDGET_API __declspec(dllexport)
+ #else
+ #define WIDGET_API __declspec(dllimport)
+ #endif
+#elif LIN
+ #if XPWIDGETS
+ #if __GNUC__ >= 4
+ #define WIDGET_API __attribute__((visibility("default")))
+ #else
+ #define WIDGET_API
+ #endif
+ #else
+ #define WIDGET_API
+ #endif
+#else
+#pragma error "Platform not defined!"
+#endif
+ /***************************************************************************
+ * WIDGET DEFINITIONS
+ ***************************************************************************/
+/*
+ * A widget is a call-back driven screen entity like a push-button, window,
+ * text entry field, etc.
+ *
+ * Use the widget API to create widgets of various classes. You can nest them
+ * into trees of widgets to create complex user interfaces.
+ *
+ */
+
+
+
+/*
+ * XPWidgetID
+ *
+ * A Widget ID is an opaque unique non-zero handle identifying your widget.
+ * Use 0 to specify "no widget". This type is defined as wide enough to hold
+ * a pointer. You receive a widget ID when you create a new widget and then
+ * use that widget ID to further refer to the widget.
+ *
+ */
+typedef void * XPWidgetID;
+
+/*
+ * XPWidgetPropertyID
+ *
+ * Properties are values attached to instances of your widgets. A property is
+ * identified by a 32-bit ID and its value is the width of a pointer.
+ *
+ * Each widget instance may have a property or not have it. When you set a
+ * property on a widget for the first time, the property is added to the
+ * widget; it then stays there for the life of the widget.
+ *
+ * Some property IDs are predefined by the widget package; you can make up
+ * your own property IDs as well.
+ *
+ */
+enum {
+ /* A window's refcon is an opaque value used by client code to find other data *
+ * based on it. */
+ xpProperty_Refcon = 0
+
+ /* These properties are used by the utlities to implement dragging. */
+ ,xpProperty_Dragging = 1
+
+ ,xpProperty_DragXOff = 2
+
+ ,xpProperty_DragYOff = 3
+
+ /* Is the widget hilited? (For widgets that support this kind of thing.) */
+ ,xpProperty_Hilited = 4
+
+ /* Is there a C++ object attached to this widget? */
+ ,xpProperty_Object = 5
+
+ /* If this property is 1, the widget package will use OpenGL to restrict *
+ * drawing to the Wiget's exposed rectangle. */
+ ,xpProperty_Clip = 6
+
+ /* Is this widget enabled (for those that have a disabled state too)? */
+ ,xpProperty_Enabled = 7
+
+ /* NOTE: Property IDs 1 - 999 are reserved for the widget's library. *
+ * *
+ * NOTE: Property IDs 1000 - 9999 are allocated to the standard widget classes *
+ * provided with the library Properties 1000 - 1099 are for widget class 0, *
+ * 1100 - 1199 for widget class 1, etc. */
+ ,xpProperty_UserStart = 10000
+
+
+};
+typedef int XPWidgetPropertyID;
+
+/*
+ * XPMouseState_t
+ *
+ * When the mouse is clicked or dragged, a pointer to this structure is passed
+ * to your widget function.
+ *
+ */
+typedef struct {
+ int x;
+ int y;
+ /* Mouse Button number, left = 0 (right button not yet supported. */
+ int button;
+#if defined(XPLM200)
+ /* Scroll wheel delta (button in this case would be the wheel axis number). */
+ int delta;
+#endif /* XPLM200 */
+} XPMouseState_t;
+
+/*
+ * XPKeyState_t
+ *
+ * When a key is pressed, a pointer to this struct is passed to your widget
+ * function.
+ *
+ */
+typedef struct {
+ /* The ASCII key that was pressed. WARNING: this may be 0 for some non-ASCII *
+ * key sequences. */
+ char key;
+ /* The flags. Make sure to check this if you only want key-downs! */
+ XPLMKeyFlags flags;
+ /* The virtual key code for the key */
+ char vkey;
+} XPKeyState_t;
+
+/*
+ * XPWidgetGeometryChange_t
+ *
+ * This structure contains the deltas for your widget's geometry when it
+ * changes.
+ *
+ */
+typedef struct {
+ int dx;
+ /* +Y = the widget moved up */
+ int dy;
+ int dwidth;
+ int dheight;
+} XPWidgetGeometryChange_t;
+
+/*
+ * XPDispatchMode
+ *
+ * The dispatching modes describe how the widgets library sends out messages.
+ * Currently there are three modes:
+ *
+ */
+enum {
+ /* The message will only be sent to the target widget. */
+ xpMode_Direct = 0
+
+ /* The message is sent to the target widget, then up the chain of parents *
+ * until the message is handled or a parentless widget is reached. */
+ ,xpMode_UpChain = 1
+
+ /* The message is sent to the target widget and then all of its children *
+ * recursively depth-first. */
+ ,xpMode_Recursive = 2
+
+ /* The message is snet just to the target, but goes to every callback, even if *
+ * it is handled. */
+ ,xpMode_DirectAllCallbacks = 3
+
+ /* The message is only sent to the very first handler even if it is not *
+ * accepted. (This is really only useful for some internal Widget Lib *
+ * functions. */
+ ,xpMode_Once = 4
+
+
+};
+typedef int XPDispatchMode;
+
+/*
+ * XPWidgetClass
+ *
+ * Widget classes define predefined widget types. A widget class basically
+ * specifies from a library the widget function to be used for the widget.
+ * Most widgets can be made right from classes.
+ *
+ */
+typedef int XPWidgetClass;
+
+/* An unspecified widget class. Other widget classes are in *
+ * XPStandardWidgets.h */
+#define xpWidgetClass_None 0
+
+/***************************************************************************
+ * WIDGET MESSAGES
+ ***************************************************************************/
+/*
+ *
+ *
+ */
+
+
+/*
+ * XPWidgetMessage
+ *
+ * Widgets receive 32-bit messages indicating what action is to be taken or
+ * notifications of events. The list of messages may be expanded.
+ *
+ */
+enum {
+ /* No message, should not be sent. */
+ xpMsg_None = 0
+
+ /* The create message is sent once per widget that is created with your widget *
+ * function and once for any widget that has your widget function attached. *
+ * *
+ * Dispatching: Direct *
+ * *
+ * Param 1: 1 if you are being added as a subclass, 0 if the widget is first *
+ * being created. */
+ ,xpMsg_Create = 1
+
+ /* The destroy message is sent once for each message that is destroyed that *
+ * has your widget function. *
+ * *
+ * Dispatching: Direct for all *
+ * *
+ * Param 1: 1 if being deleted by a recursive delete to the parent, 0 for *
+ * explicit deletion. */
+ ,xpMsg_Destroy = 2
+
+ /* The paint message is sent to your widget to draw itself. The paint message *
+ * is the bare-bones message; in response you must draw yourself, draw your *
+ * children, set up clipping and culling, check for visibility, etc. If you *
+ * don't want to do all of this, ignore the paint message and a draw message *
+ * (see below) will be sent to you. *
+ * *
+ * Dispatching: Direct */
+ ,xpMsg_Paint = 3
+
+ /* The draw message is sent to your widget when it is time to draw yourself. *
+ * OpenGL will be set up to draw in 2-d global screen coordinates, but you *
+ * should use the XPLM to set up OpenGL state. *
+ * *
+ * Dispatching: Direct */
+ ,xpMsg_Draw = 4
+
+ /* The key press message is sent once per key that is pressed. The first *
+ * parameter is the type of key code (integer or char) and the second is the *
+ * code itself. By handling this event, you consume the key stroke. *
+ * *
+ * Handling this message 'consumes' the keystroke; not handling it passes it *
+ * to your parent widget. *
+ * *
+ * Dispatching: Up Chain *
+ * *
+ * : Param 1: A pointer to an XPKeyState_t structure with the keystroke. */
+ ,xpMsg_KeyPress = 5
+
+ /* Keyboard focus is being given to you. By handling this message you accept *
+ * keyboard focus. The first parameter will be one if a child of yours gave *
+ * up focus to you, 0 if someone set focus on you explicitly. *
+ * *
+ * : Handling this message accepts focus; not handling refuses focus. *
+ * *
+ * Dispatching: direct *
+ * *
+ * Param 1: 1 if you are gaining focus because your child is giving it up, 0 *
+ * if someone is explicitly giving you focus. */
+ ,xpMsg_KeyTakeFocus = 6
+
+ /* Keyboard focus is being taken away from you. The first parameter will be *
+ * one if you are losing focus because another widget is taking it, or 0 if *
+ * someone called the API to make you lose focus explicitly. *
+ * *
+ * Dispatching: Direct *
+ * *
+ * Param 1: 1 if focus is being taken by another widget, 0 if code requested *
+ * to remove focus. */
+ ,xpMsg_KeyLoseFocus = 7
+
+ /* You receive one mousedown event per click with a mouse-state structure *
+ * pointed to by parameter 1, by accepting this you eat the click, otherwise *
+ * your parent gets it. You will not receive drag and mouse up messages if *
+ * you do not accept the down message. *
+ * *
+ * Handling this message consumes the mouse click, not handling it passes it *
+ * to the next widget. You can act 'transparent' as a window by never handling *
+ * moues clicks to certain areas. *
+ * *
+ * Dispatching: Up chain NOTE: Technically this is direct dispatched, but the *
+ * widgets library will shop it to each widget until one consumes the click, *
+ * making it effectively "up chain". *
+ * *
+ * Param 1: A pointer to an XPMouseState_t containing the mouse status. */
+ ,xpMsg_MouseDown = 8
+
+ /* You receive a series of mouse drag messages (typically one per frame in the *
+ * sim) as the mouse is moved once you have accepted a mouse down message. *
+ * Parameter one points to a mouse-state structure describing the mouse *
+ * location. You will continue to receive these until the mouse button is *
+ * released. You may receive multiple mouse state messages with the same mouse *
+ * position. You will receive mouse drag events even if the mouse is dragged *
+ * out of your current or original bounds at the time of the mouse down. *
+ * *
+ * Dispatching: Direct *
+ * *
+ * Param 1: A pointer to an XPMouseState_t containing the mouse status. */
+ ,xpMsg_MouseDrag = 9
+
+ /* The mouseup event is sent once when the mouse button is released after a *
+ * drag or click. You only receive this message if you accept the mouseDown *
+ * message. Parameter one points to a mouse state structure. *
+ * *
+ * Dispatching: Direct *
+ * *
+ * Param 1: A pointer to an XPMouseState_t containing the mouse status. */
+ ,xpMsg_MouseUp = 10
+
+ /* Your geometry or a child's geometry is being changed. *
+ * *
+ * Dispatching: Up chain *
+ * *
+ * Param 1: The widget ID of the original reshaped target. *
+ * *
+ * Param 2: A pointer to a XPWidgetGeometryChange_t struct describing the *
+ * change. */
+ ,xpMsg_Reshape = 11
+
+ /* Your exposed area has changed. *
+ * *
+ * Dispatching: Direct */
+ ,xpMsg_ExposedChanged = 12
+
+ /* A child has been added to you. The child's ID is passed in parameter one. *
+ * *
+ * *
+ * Dispatching: Direct *
+ * *
+ * Param 1: The Widget ID of the child being added. */
+ ,xpMsg_AcceptChild = 13
+
+ /* A child has been removed from to you. The child's ID is passed in *
+ * parameter one. *
+ * *
+ * Dispatching: Direct *
+ * *
+ * Param 1: The Widget ID of the child being removed. */
+ ,xpMsg_LoseChild = 14
+
+ /* You now have a new parent, or have no parent. The parent's ID is passed *
+ * in, or 0 for no parent. *
+ * *
+ * Dispatching: Direct *
+ * *
+ * Param 1: The Widget ID of your parent */
+ ,xpMsg_AcceptParent = 15
+
+ /* You or a child has been shown. Note that this does not include you being *
+ * shown because your parent was shown, you were put in a new parent, your *
+ * root was shown, etc. *
+ * *
+ * Dispatching: Up chain *
+ * *
+ * Param 1: The widget ID of the shown widget. */
+ ,xpMsg_Shown = 16
+
+ /* You have been hidden. See limitations above. *
+ * *
+ * Dispatching: Up chain *
+ * *
+ * Param 1: The widget ID of the hidden widget. */
+ ,xpMsg_Hidden = 17
+
+ /* Your descriptor has changed. *
+ * *
+ * Dispatching: Direct */
+ ,xpMsg_DescriptorChanged = 18
+
+ /* A property has changed. Param 1 contains the property ID. *
+ * *
+ * Dispatching: Direct *
+ * *
+ * Param 1: The Property ID being changed. *
+ * *
+ * Param 2: The new property value */
+ ,xpMsg_PropertyChanged = 19
+
+#if defined(XPLM200)
+ /* The mouse wheel has moved. *
+ * *
+ * Return 1 to consume the mouse wheel move, or 0 to pass the message to a *
+ * parent. Dispatching: Up chain *
+ * *
+ * Param 1: A pointer to an XPMouseState_t containing the mouse status. */
+ ,xpMsg_MouseWheel = 20
+
+#endif /* XPLM200 */
+#if defined(XPLM200)
+ /* The cursor is over your widget. If you consume this message, change the *
+ * XPLMCursorStatus value to indicate the desired result, with the same rules *
+ * as in XPLMDisplay.h. *
+ * *
+ * Return 1 to consume this message, 0 to pass it on. *
+ * *
+ * Dispatching: Up chain Param 1: A pointer to an XPMouseState_t struct *
+ * containing the mouse status. *
+ * *
+ * Param 2: A pointer to a XPLMCursorStatus - set this to the cursor result *
+ * you desire. */
+ ,xpMsg_CursorAdjust = 21
+
+#endif /* XPLM200 */
+ /* NOTE: Message IDs 1000 - 9999 are allocated to the standard widget classes *
+ * provided with the library with 1000 - 1099 for widget class 0, 1100 - 1199 *
+ * for widget class 1, etc. Message IDs 10,000 and beyond are for plugin use. */
+ ,xpMsg_UserStart = 10000
+
+
+};
+typedef int XPWidgetMessage;
+
+/***************************************************************************
+ * WIDGET CALLBACK FUNCTION
+ ***************************************************************************/
+/*
+ *
+ *
+ */
+
+
+/*
+ * XPWidgetFunc_t
+ *
+ * This function defines your custom widget's behavior. It will be called by
+ * the widgets library to send messages to your widget. The message and
+ * widget ID are passed in, as well as two ptr-width signed parameters whose
+ * meaning varies with the message. Return 1 to indicate that you have
+ * processed the message, 0 to indicate that you have not. For any message
+ * that is not understood, return 0.
+ *
+ */
+typedef int (* XPWidgetFunc_t)(
+ XPWidgetMessage inMessage,
+ XPWidgetID inWidget,
+ intptr_t inParam1,
+ intptr_t inParam2);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/X-Plane-SDK/CHeaders/Widgets/XPWidgetUtils.h b/X-Plane-SDK/CHeaders/Widgets/XPWidgetUtils.h
new file mode 100755
index 0000000..e61d272
--- /dev/null
+++ b/X-Plane-SDK/CHeaders/Widgets/XPWidgetUtils.h
@@ -0,0 +1,234 @@
+#ifndef _XPWidgetUtils_h_
+#define _XPWidgetUtils_h_
+
+/*
+ * Copyright 2005-2012 Sandy Barbour and Ben Supnik
+ *
+ * All rights reserved. See license.txt for usage.
+ *
+ * X-Plane SDK Version: 2.1.1
+ *
+ */
+
+/*
+ * XPWidgetUtils - USAGE NOTES
+ *
+ * The XPWidgetUtils library contains useful functions that make writing and
+ * using widgets less of a pain.
+ *
+ * One set of functions are the widget behavior functions. These functions
+ * each add specific useful behaviors to widgets. They can be used in two
+ * manners:
+ *
+ * 1. You can add a widget behavior function to a widget as a callback proc
+ * using the XPAddWidgetCallback function. The widget will gain that
+ * behavior. Remember that the last function you add has highest priority.
+ * You can use this to change or augment the behavior of an existing finished
+ * widget.
+ *
+ * 2. You can call a widget function from inside your own widget function.
+ * This allows you to include useful behaviors in custom-built widgets. A
+ * number of the standard widgets get their behavior from this library. To do
+ * this, call the behavior function from your function first. If it returns
+ * 1, that means it handled the event and you don't need to; simply return 1.
+ *
+ */
+
+#include "XPWidgetDefs.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/***************************************************************************
+ * GENERAL UTILITIES
+ ***************************************************************************/
+/*
+ *
+ *
+ */
+
+
+
+
+/*
+ * Convenience accessors
+ *
+ * It can be clumsy accessing the variables passed in by pointer to a struct
+ * for mouse and reshape messages; these accessors let you simply pass in the param
+ * right from the arguments of your widget proc and get back the value you want.
+ *
+ */
+#define MOUSE_X(param) (((XPMouseState_t *) (param))->x)
+#define MOUSE_Y(param) (((XPMouseState_t *) (param))->y)
+
+#define DELTA_X(param) (((XPWidgetGeometryChange_t *) (param))->dx)
+#define DELTA_Y(param) (((XPWidgetGeometryChange_t *) (param))->dy)
+#define DELTA_W(param) (((XPWidgetGeometryChange_t *) (param))->dwidth)
+#define DELTA_H(param) (((XPWidgetGeometryChange_t *) (param))->dheight)
+
+#define KEY_CHAR(param) (((XPKeyState_t *) (param))->key)
+#define KEY_FLAGS(param) (((XPKeyState_t *) (param))->flags)
+#define KEY_VKEY(param) (((XPKeyState_t *) (param))->vkey)
+
+#define IN_RECT(x, y, l, t, r, b) \
+ (((x) >= (l)) && ((x) <= (r)) && ((y) >= (b)) && ((y) <= (t)))
+
+/*
+ * XPWidgetCreate_t
+ *
+ * This structure contains all of the parameters needed to create a wiget. It
+ * is used with XPUCreateWidgets to create widgets in bulk from an array. All
+ * parameters correspond to those of XPCreateWidget except for the container
+ * index. If the container index is equal to the index of a widget in the
+ * array, the widget in the array passed to XPUCreateWidgets is used as the
+ * parent of this widget. Note that if you pass an index greater than your
+ * own position in the array, the parent you are requesting will not exist
+ * yet. If the container index is NO_PARENT, the parent widget is specified as
+ * NULL. If the container index is PARAM_PARENT, the widget passed into
+ * XPUCreateWidgets is used.
+ *
+ */
+typedef struct {
+ int left;
+ int top;
+ int right;
+ int bottom;
+ int visible;
+ const char * descriptor;
+ int isRoot;
+ int containerIndex;
+ XPWidgetClass widgetClass;
+} XPWidgetCreate_t;
+
+#define NO_PARENT -1
+
+#define PARAM_PARENT -2
+
+#define WIDGET_COUNT(x) ((sizeof(x) / sizeof(XPWidgetCreate_t)))
+
+/*
+ * XPUCreateWidgets
+ *
+ * This function creates a series of widgets from a table...see
+ * XPCreateWidget_t above. Pass in an array of widget creation structures and
+ * an array of widget IDs that will receive each widget.
+ *
+ * Widget parents are specified by index into the created widget table,
+ * allowing you to create nested widget structures. You can create multiple
+ * widget trees in one table. Generally you should create widget trees from
+ * the top down.
+ *
+ * You can also pass in a widget ID that will be used when the widget's parent
+ * is listed as PARAM_PARENT; this allows you to embed widgets created with
+ * XPUCreateWidgets in a widget created previously.
+ *
+ */
+WIDGET_API void XPUCreateWidgets(
+ const XPWidgetCreate_t * inWidgetDefs,
+ int inCount,
+ XPWidgetID inParamParent,
+ XPWidgetID * ioWidgets);
+
+/*
+ * XPUMoveWidgetBy
+ *
+ * Simply moves a widget by an amount, +x = right, +y=up, without resizing the
+ * widget.
+ *
+ */
+WIDGET_API void XPUMoveWidgetBy(
+ XPWidgetID inWidget,
+ int inDeltaX,
+ int inDeltaY);
+
+/***************************************************************************
+ * LAYOUT MANAGERS
+ ***************************************************************************/
+/*
+ * The layout managers are widget behavior functions for handling where
+ * widgets move. Layout managers can be called from a widget function or
+ * attached to a widget later.
+ *
+ */
+
+
+
+/*
+ * XPUFixedLayout
+ *
+ * This function causes the widget to maintain its children in fixed position
+ * relative to itself as it is resized. Use this on the top level 'window'
+ * widget for your window.
+ *
+ */
+WIDGET_API int XPUFixedLayout(
+ XPWidgetMessage inMessage,
+ XPWidgetID inWidget,
+ intptr_t inParam1,
+ intptr_t inParam2);
+
+/***************************************************************************
+ * WIDGET PROC BEHAVIORS
+ ***************************************************************************/
+/*
+ * These widget behavior functions add other useful behaviors to widgets.
+ * These functions cannot be attached to a widget; they must be called from
+ * your widget function.
+ *
+ */
+
+
+
+/*
+ * XPUSelectIfNeeded
+ *
+ * This causes the widget to bring its window to the foreground if it is not
+ * already. inEatClick specifies whether clicks in the background should be
+ * consumed by bringin the window to the foreground.
+ *
+ */
+WIDGET_API int XPUSelectIfNeeded(
+ XPWidgetMessage inMessage,
+ XPWidgetID inWidget,
+ intptr_t inParam1,
+ intptr_t inParam2,
+ int inEatClick);
+
+/*
+ * XPUDefocusKeyboard
+ *
+ * This causes a click in the widget to send keyboard focus back to X-Plane.
+ * This stops editing of any text fields, etc.
+ *
+ */
+WIDGET_API int XPUDefocusKeyboard(
+ XPWidgetMessage inMessage,
+ XPWidgetID inWidget,
+ intptr_t inParam1,
+ intptr_t inParam2,
+ int inEatClick);
+
+/*
+ * XPUDragWidget
+ *
+ * XPUDragWidget drags the widget in response to mouse clicks. Pass in not
+ * only the event, but the global coordinates of the drag region, which might
+ * be a sub-region of your widget (for example, a title bar).
+ *
+ */
+WIDGET_API int XPUDragWidget(
+ XPWidgetMessage inMessage,
+ XPWidgetID inWidget,
+ intptr_t inParam1,
+ intptr_t inParam2,
+ int inLeft,
+ int inTop,
+ int inRight,
+ int inBottom);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/X-Plane-SDK/CHeaders/Widgets/XPWidgets.h b/X-Plane-SDK/CHeaders/Widgets/XPWidgets.h
new file mode 100755
index 0000000..13ca62e
--- /dev/null
+++ b/X-Plane-SDK/CHeaders/Widgets/XPWidgets.h
@@ -0,0 +1,569 @@
+#ifndef _XPWidgets_h_
+#define _XPWidgets_h_
+
+/*
+ * Copyright 2005-2012 Sandy Barbour and Ben Supnik
+ *
+ * All rights reserved. See license.txt for usage.
+ *
+ * X-Plane SDK Version: 2.1.1
+ *
+ */
+
+/*
+ * WIDGETS - THEORY OF OPERATION AND NOTES
+ *
+ * Widgets are persistent view 'objects' for X-Plane. A widget is an object
+ * referenced by its opaque handle (widget ID) and the APIs in this file. You
+ * cannot access the widget's guts directly. Every Widget has the following
+ * intrinsic data:
+ *
+ * - A bounding box defined in global screen coordinates with 0,0 in the
+ * bottom left and +y = up, +x = right.
+ *
+ * - A visible box, which is the intersection of the bounding box with the
+ * widget's parents visible box.
+ *
+ * - Zero or one parent widgets. (Always zero if the widget is a root widget.
+ *
+ *
+ * - Zero or more child widgets.
+ *
+ * - Whether the widget is a root. Root widgets are the top level plugin
+ * windows.
+ *
+ * - Whether the widget is visible.
+ *
+ * - A text string descriptor, whose meaning varies from widget to widget.
+ *
+ * - An arbitrary set of 32 bit integral properties defined by 32-bit integral
+ * keys. This is how specific widgets
+ *
+ * store specific data.
+ *
+ * - A list of widget callbacks proc that implements the widgets behaviors.
+ *
+ * The Widgets library sends messages to widgets to request specific behaviors
+ * or notify the widget of things.
+ *
+ * Widgets may have more than one callback function, in which case messages
+ * are sent to the most recently added callback function until the message is
+ * handled. Messages may also be sent to parents or children; see the
+ * XPWidgetDefs.h header file for the different widget message dispatching
+ * functions. By adding a callback function to a window you can 'subclass'
+ * its behavior.
+ *
+ * A set of standard widgets are provided that serve common UI purposes. You
+ * can also customize or implement entirely custom widgets.
+ *
+ * Widgets are different than other view hierarchies (most notably Win32,
+ * which they bear a striking resemblance to) in the following ways:
+ *
+ * - Not all behavior can be patched. State that is managed by the XPWidgets
+ * DLL and not by individual widgets cannot be customized.
+ *
+ * - All coordinates are in global screen coordinates. Coordinates are not
+ * relative to an enclosing widget, nor are they relative to a display window.
+ *
+ *
+ * - Widget messages are always dispatched synchronously, and there is no
+ * concept of scheduling an update or a dirty region. Messages originate from
+ * X-Plane as the sim cycle goes by. Since x-plane is constantly redrawing,
+ * so are widgets; there is no need to mark a part of a widget as 'needing
+ * redrawing' because redrawing happens frequently whether the widget needs it
+ * or not.
+ *
+ * - Any widget may be a 'root' widget, causing it to be drawn; there is no
+ * relationship between widget class and rootness. Root widgets are
+ * imlemented as XPLMDisply windows.
+ *
+ */
+
+#include "XPWidgetDefs.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/***************************************************************************
+ * WIDGET CREATION AND MANAGEMENT
+ ***************************************************************************/
+/*
+ *
+ *
+ */
+
+
+/*
+ * XPCreateWidget
+ *
+ * This function creates a new widget and returns the new widget's ID to you.
+ * If the widget creation fails for some reason, it returns NULL. Widget
+ * creation will fail either if you pass a bad class ID or if there is not
+ * adequate memory.
+ *
+ * Input Parameters:
+ *
+ * - Top, left, bottom, and right in global screen coordinates defining the
+ * widget's location on the screen.
+ *
+ * - inVisible is 1 if the widget should be drawn, 0 to start the widget as
+ * hidden.
+ *
+ * - inDescriptor is a null terminated string that will become the widget's
+ * descriptor.
+ *
+ * - inIsRoot is 1 if this is going to be a root widget, 0 if it will not be.
+ *
+ * - inContainer is the ID of this widget's container. It must be 0 for a
+ * root widget. for a non-root widget, pass the widget ID of the widget to
+ * place this widget within. If this widget is not going to start inside
+ * another widget, pass 0; this new widget will then just be floating off in
+ * space (and will not be drawn until it is placed in a widget.
+ *
+ * - inClass is the class of the widget to draw. Use one of the predefined
+ * class-IDs to create a standard widget.
+ *
+ * A note on widget embedding: a widget is only called (and will be drawn,
+ * etc.) if it is placed within a widget that will be called. Root widgets
+ * are always called. So it is possible to have whole chains of widgets that
+ * are simply not called. You can preconstruct widget trees and then place
+ * them into root widgets later to activate them if you wish.
+ *
+ */
+WIDGET_API XPWidgetID XPCreateWidget(
+ int inLeft,
+ int inTop,
+ int inRight,
+ int inBottom,
+ int inVisible,
+ const char * inDescriptor,
+ int inIsRoot,
+ XPWidgetID inContainer,
+ XPWidgetClass inClass);
+
+/*
+ * XPCreateCustomWidget
+ *
+ * This function is the same as XPCreateWidget except that instead of passing
+ * a class ID, you pass your widget callback function pointer defining the
+ * widget. Use this function to define a custom widget. All parameters are
+ * the same as XPCreateWidget, except that the widget class has been replaced
+ * with the widget function.
+ *
+ */
+WIDGET_API XPWidgetID XPCreateCustomWidget(
+ int inLeft,
+ int inTop,
+ int inRight,
+ int inBottom,
+ int inVisible,
+ const char * inDescriptor,
+ int inIsRoot,
+ XPWidgetID inContainer,
+ XPWidgetFunc_t inCallback);
+
+/*
+ * XPDestroyWidget
+ *
+ * This class destroys a widget. Pass in the ID of the widget to kill. If
+ * you pass 1 for inDestroyChilren, the widget's children will be destroyed
+ * first, then this widget will be destroyed. (Furthermore, the widget's
+ * children will be destroyed with the inDestroyChildren flag set to 1, so the
+ * destruction will recurse down the widget tree.) If you pass 0 for this
+ * flag, the child widgets will simply end up with their parent set to 0.
+ *
+ */
+WIDGET_API void XPDestroyWidget(
+ XPWidgetID inWidget,
+ int inDestroyChildren);
+
+/*
+ * XPSendMessageToWidget
+ *
+ * This sends any message to a widget. You should probably not go around
+ * simulating the predefined messages that the widgets library defines for
+ * you. You may however define custom messages for your widgets and send them
+ * with this method.
+ *
+ * This method supports several dispatching patterns; see XPDispatchMode for
+ * more info. The function returns 1 if the message was handled, 0 if it was
+ * not.
+ *
+ * For each widget that receives the message (see the dispatching modes), each
+ * widget function from the most recently installed to the oldest one
+ * receives the message in order until it is handled.
+ *
+ */
+WIDGET_API int XPSendMessageToWidget(
+ XPWidgetID inWidget,
+ XPWidgetMessage inMessage,
+ XPDispatchMode inMode,
+ intptr_t inParam1,
+ intptr_t inParam2);
+
+/***************************************************************************
+ * WIDGET POSITIONING AND VISIBILITY
+ ***************************************************************************/
+/*
+ *
+ *
+ */
+
+
+/*
+ * XPPlaceWidgetWithin
+ *
+ * This function changes which container a widget resides in. You may NOT use
+ * this function on a root widget! inSubWidget is the widget that will be
+ * moved. Pass a widget ID in inContainer to make inSubWidget be a child of
+ * inContainer. It will become the last/closest widget in the container.
+ * Pass 0 to remove the widget from any container. Any call to this other
+ * than passing the widget ID of the old parent of the affected widget will
+ * cause the widget to be removed from its old parent. Placing a widget within
+ * its own parent simply makes it the last widget.
+ *
+ * NOTE: this routine does not reposition the sub widget in global
+ * coordinates. If the container has layout management code, it will
+ * reposition the subwidget for you, otherwise you must do it with
+ * SetWidgetGeometry.
+ *
+ */
+WIDGET_API void XPPlaceWidgetWithin(
+ XPWidgetID inSubWidget,
+ XPWidgetID inContainer);
+
+/*
+ * XPCountChildWidgets
+ *
+ * This routine returns the number of widgets another widget contains.
+ *
+ */
+WIDGET_API int XPCountChildWidgets(
+ XPWidgetID inWidget);
+
+/*
+ * XPGetNthChildWidget
+ *
+ * This routine returns the widget ID of a child widget by index. Indexes are
+ * 0 based, from 0 to one minus the number of widgets in the parent,
+ * inclusive. If the index is invalid, 0 is returned.
+ *
+ */
+WIDGET_API XPWidgetID XPGetNthChildWidget(
+ XPWidgetID inWidget,
+ int inIndex);
+
+/*
+ * XPGetParentWidget
+ *
+ * This routine returns the parent of a widget, or 0 if the widget has no
+ * parent. Root widgets never have parents and therefore always return 0.
+ *
+ */
+WIDGET_API XPWidgetID XPGetParentWidget(
+ XPWidgetID inWidget);
+
+/*
+ * XPShowWidget
+ *
+ * This routine makes a widget visible if it is not already. Note that if a
+ * widget is not in a rooted widget hierarchy or one of its parents is not
+ * visible, it will still not be visible to the user.
+ *
+ */
+WIDGET_API void XPShowWidget(
+ XPWidgetID inWidget);
+
+/*
+ * XPHideWidget
+ *
+ * Makes a widget invisible. See XPShowWidget for considerations of when a
+ * widget might not be visible despite its own visibility state.
+ *
+ */
+WIDGET_API void XPHideWidget(
+ XPWidgetID inWidget);
+
+/*
+ * XPIsWidgetVisible
+ *
+ * This returns 1 if a widget is visible, 0 if it is not. Note that this
+ * routine takes into consideration whether a parent is invisible. Use this
+ * routine to tell if the user can see the widget.
+ *
+ */
+WIDGET_API int XPIsWidgetVisible(
+ XPWidgetID inWidget);
+
+/*
+ * XPFindRootWidget
+ *
+ * XPFindRootWidget returns the Widget ID of the root widget that contains the
+ * passed in widget or NULL if the passed in widget is not in a rooted
+ * hierarchy.
+ *
+ */
+WIDGET_API XPWidgetID XPFindRootWidget(
+ XPWidgetID inWidget);
+
+/*
+ * XPBringRootWidgetToFront
+ *
+ * This routine makes the specified widget be in the front most widget
+ * hierarchy. If this widget is a root widget, its widget hierarchy comes to
+ * front, otherwise the widget's root is brought to the front. If this widget
+ * is not in an active widget hiearchy (e.g. there is no root widget at the
+ * top of the tree), this routine does nothing.
+ *
+ */
+WIDGET_API void XPBringRootWidgetToFront(
+ XPWidgetID inWidget);
+
+/*
+ * XPIsWidgetInFront
+ *
+ * This routine returns true if this widget's hierarchy is the front most
+ * hierarchy. It returns false if the widget's hierarchy is not in front, or
+ * if the widget is not in a rooted hierarchy.
+ *
+ */
+WIDGET_API int XPIsWidgetInFront(
+ XPWidgetID inWidget);
+
+/*
+ * XPGetWidgetGeometry
+ *
+ * This routine returns the bounding box of a widget in global coordinates.
+ * Pass NULL for any parameter you are not interested in.
+ *
+ */
+WIDGET_API void XPGetWidgetGeometry(
+ XPWidgetID inWidget,
+ int * outLeft, /* Can be NULL */
+ int * outTop, /* Can be NULL */
+ int * outRight, /* Can be NULL */
+ int * outBottom); /* Can be NULL */
+
+/*
+ * XPSetWidgetGeometry
+ *
+ * This function changes the bounding box of a widget.
+ *
+ */
+WIDGET_API void XPSetWidgetGeometry(
+ XPWidgetID inWidget,
+ int inLeft,
+ int inTop,
+ int inRight,
+ int inBottom);
+
+/*
+ * XPGetWidgetForLocation
+ *
+ * Given a widget and a location, this routine returns the widget ID of the
+ * child of that widget that owns that location. If inRecursive is true then
+ * this will return a child of a child of a widget as it tries to find the
+ * deepest widget at that location. If inVisibleOnly is true, then only
+ * visible widgets are considered, otherwise all widgets are considered. The
+ * widget ID passed for inContainer will be returned if the location is in
+ * that widget but not in a child widget. 0 is returned if the location is
+ * not in the container.
+ *
+ * NOTE: if a widget's geometry extends outside its parents geometry, it will
+ * not be returned by this call for mouse locations outside the parent
+ * geometry. The parent geometry limits the child's eligibility for mouse
+ * location.
+ *
+ */
+WIDGET_API XPWidgetID XPGetWidgetForLocation(
+ XPWidgetID inContainer,
+ int inXOffset,
+ int inYOffset,
+ int inRecursive,
+ int inVisibleOnly);
+
+/*
+ * XPGetWidgetExposedGeometry
+ *
+ * This routine returns the bounds of the area of a widget that is completely
+ * within its parent widgets. Since a widget's bounding box can be outside
+ * its parent, part of its area will not be elligible for mouse clicks and
+ * should not draw. Use XPGetWidgetGeometry to find out what area defines
+ * your widget's shape, but use this routine to find out what area to actually
+ * draw into. Note that the widget library does not use OpenGL clipping to
+ * keep frame rates up, although you could use it internally.
+ *
+ */
+WIDGET_API void XPGetWidgetExposedGeometry(
+ XPWidgetID inWidgetID,
+ int * outLeft, /* Can be NULL */
+ int * outTop, /* Can be NULL */
+ int * outRight, /* Can be NULL */
+ int * outBottom); /* Can be NULL */
+
+/***************************************************************************
+ * ACCESSING WIDGET DATA
+ ***************************************************************************/
+/*
+ *
+ *
+ */
+
+
+/*
+ * XPSetWidgetDescriptor
+ *
+ * Every widget has a descriptor, which is a text string. What the text
+ * string is used for varies from widget to widget; for example, a push
+ * button's text is its descriptor, a caption shows its descriptor, and a text
+ * field's descriptor is the text being edited. In other words, the usage for
+ * the text varies from widget to widget, but this API provides a universal
+ * and convenient way to get at it. While not all UI widgets need their
+ * descriptor, many do.
+ *
+ */
+WIDGET_API void XPSetWidgetDescriptor(
+ XPWidgetID inWidget,
+ const char * inDescriptor);
+
+/*
+ * XPGetWidgetDescriptor
+ *
+ * This routine returns the widget's descriptor. Pass in the length of the
+ * buffer you are going to receive the descriptor in. The descriptor will be
+ * null terminated for you. This routine returns the length of the actual
+ * descriptor; if you pass NULL for outDescriptor, you can get the
+ * descriptor's length without getting its text. If the length of the
+ * descriptor exceeds your buffer length, the buffer will not be null
+ * terminated (this routine has 'strncpy' semantics).
+ *
+ */
+WIDGET_API int XPGetWidgetDescriptor(
+ XPWidgetID inWidget,
+ char * outDescriptor,
+ int inMaxDescLength);
+
+/*
+ * XPSetWidgetProperty
+ *
+ * This function sets a widget's property. Properties are arbitrary values
+ * associated by a widget by ID.
+ *
+ */
+WIDGET_API void XPSetWidgetProperty(
+ XPWidgetID inWidget,
+ XPWidgetPropertyID inProperty,
+ intptr_t inValue);
+
+/*
+ * XPGetWidgetProperty
+ *
+ * This routine returns the value of a widget's property, or 0 if the property
+ * is not defined. If you need to know whether the property is defined, pass
+ * a pointer to an int for inExists; the existence of that property will be
+ * returned in the int. Pass NULL for inExists if you do not need this
+ * information.
+ *
+ */
+WIDGET_API intptr_t XPGetWidgetProperty(
+ XPWidgetID inWidget,
+ XPWidgetPropertyID inProperty,
+ int * inExists); /* Can be NULL */
+
+/***************************************************************************
+ * KEYBOARD MANAGEMENT
+ ***************************************************************************/
+/*
+ *
+ *
+ */
+
+
+/*
+ * XPSetKeyboardFocus
+ *
+ * XPSetKeyboardFocus controls which widget will receive keystrokes. Pass the
+ * Widget ID of the widget to get the keys. Note that if the widget does not
+ * care about keystrokes, they will go to the parent widget, and if no widget
+ * cares about them, they go to X-Plane.
+ *
+ * If you set the keyboard focus to Widget ID 0, X-Plane gets keyboard focus.
+ *
+ * This routine returns the widget ID that ended up with keyboard focus, or 0
+ * for x-plane.
+ *
+ * Keyboard focus is not changed if the new widget will not accept it. For
+ * setting to x-plane, keyboard focus is always accepted.
+ *
+ * *
+ */
+WIDGET_API XPWidgetID XPSetKeyboardFocus(
+ XPWidgetID inWidget);
+
+/*
+ * XPLoseKeyboardFocus
+ *
+ * This causes the specified widget to lose focus; focus is passed to its
+ * parent, or the next parent that will accept it. This routine does nothing
+ * if this widget does not have focus.
+ *
+ */
+WIDGET_API void XPLoseKeyboardFocus(
+ XPWidgetID inWidget);
+
+/*
+ * XPGetWidgetWithFocus
+ *
+ * This routine returns the widget that has keyboard focus, or 0 if X-Plane
+ * has keyboard focus or some other plugin window that does not have widgets
+ * has focus.
+ *
+ */
+WIDGET_API XPWidgetID XPGetWidgetWithFocus(void);
+
+/***************************************************************************
+ * CREATING CUSTOM WIDGETS
+ ***************************************************************************/
+/*
+ *
+ *
+ */
+
+
+/*
+ * XPAddWidgetCallback
+ *
+ * This function adds a new widget callback to a widget. This widget callback
+ * supercedes any existing ones and will receive messages first; if it does
+ * not handle messages they will go on to be handled by pre-existing widgets.
+ *
+ * The widget function will remain on the widget for the life of the widget.
+ * The creation message will be sent to the new callback immediately with the
+ * widget ID, and the destruction message will be sent before the other widget
+ * function receives a destruction message.
+ *
+ * This provides a way to 'subclass' an existing widget. By providing a
+ * second hook that only handles certain widget messages, you can customize or
+ * extend widget behavior.
+ *
+ */
+WIDGET_API void XPAddWidgetCallback(
+ XPWidgetID inWidget,
+ XPWidgetFunc_t inNewCallback);
+
+/*
+ * XPGetWidgetClassFunc
+ *
+ * Given a widget class, this function returns the callbacks that power that
+ * widget class.
+ *
+ */
+WIDGET_API XPWidgetFunc_t XPGetWidgetClassFunc(
+ XPWidgetClass inWidgetClass);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/X-Plane-SDK/CHeaders/Wrappers/XPCBroadcaster.cpp b/X-Plane-SDK/CHeaders/Wrappers/XPCBroadcaster.cpp
new file mode 100755
index 0000000..5fe6218
--- /dev/null
+++ b/X-Plane-SDK/CHeaders/Wrappers/XPCBroadcaster.cpp
@@ -0,0 +1,56 @@
+#include "XPCBroadcaster.h"
+#include "XPCListener.h"
+
+XPCBroadcaster::XPCBroadcaster() :
+ mIterator(NULL)
+{
+}
+
+XPCBroadcaster::~XPCBroadcaster()
+{
+ ListenerVector::iterator iter;
+ mIterator = &iter;
+ for (iter = mListeners.begin(); iter != mListeners.end(); ++iter)
+ {
+ (*iter)->BroadcasterRemoved(this);
+ }
+}
+
+void XPCBroadcaster::AddListener(
+ XPCListener * inListener)
+{
+ mListeners.push_back(inListener);
+ inListener->BroadcasterAdded(this);
+}
+
+void XPCBroadcaster::RemoveListener(
+ XPCListener * inListener)
+{
+ ListenerVector::iterator iter = std::find
+ (mListeners.begin(), mListeners.end(), inListener);
+ if (iter == mListeners.end())
+ return;
+
+ if (mIterator != NULL)
+ {
+ if (*mIterator >= iter)
+ (*mIterator)--;
+ }
+
+ mListeners.erase(iter);
+ inListener->BroadcasterRemoved(this);
+}
+
+void XPCBroadcaster::BroadcastMessage(
+ int inMessage,
+ void * inParam)
+{
+ ListenerVector::iterator iter;
+ mIterator = &iter;
+ for (iter = mListeners.begin(); iter != mListeners.end(); ++iter)
+ {
+ (*iter)->ListenToMessage(inMessage, inParam);
+ }
+ mIterator = NULL;
+}
+
diff --git a/X-Plane-SDK/CHeaders/Wrappers/XPCBroadcaster.h b/X-Plane-SDK/CHeaders/Wrappers/XPCBroadcaster.h
new file mode 100755
index 0000000..8f34a05
--- /dev/null
+++ b/X-Plane-SDK/CHeaders/Wrappers/XPCBroadcaster.h
@@ -0,0 +1,38 @@
+#ifndef _XPCBroadcaster_h_
+#define _XPCBroadcaster_h_
+
+#include <vector>
+#include <algorithm>
+
+class XPCListener;
+
+class XPCBroadcaster {
+public:
+
+ XPCBroadcaster();
+ virtual ~XPCBroadcaster();
+
+ void AddListener(
+ XPCListener * inListener);
+ void RemoveListener(
+ XPCListener * inListener);
+
+protected:
+
+ void BroadcastMessage(
+ int inMessage,
+ void * inParam=0);
+
+private:
+
+ typedef std::vector<XPCListener *> ListenerVector;
+
+ ListenerVector mListeners;
+
+ // Reentrancy support
+
+ ListenerVector::iterator * mIterator;
+
+};
+
+#endif \ No newline at end of file
diff --git a/X-Plane-SDK/CHeaders/Wrappers/XPCDisplay.cpp b/X-Plane-SDK/CHeaders/Wrappers/XPCDisplay.cpp
new file mode 100755
index 0000000..fc996ca
--- /dev/null
+++ b/X-Plane-SDK/CHeaders/Wrappers/XPCDisplay.cpp
@@ -0,0 +1,104 @@
+#include "XPCDisplay.h"
+
+XPCKeySniffer::XPCKeySniffer(int inBeforeWindows) : mBeforeWindows(inBeforeWindows)
+{
+ XPLMRegisterKeySniffer(KeySnifferCB, mBeforeWindows, reinterpret_cast<void *>(this));
+}
+
+XPCKeySniffer::~XPCKeySniffer()
+{
+ XPLMUnregisterKeySniffer(KeySnifferCB, mBeforeWindows, reinterpret_cast<void *>(this));
+}
+
+
+int XPCKeySniffer::KeySnifferCB(
+ char inCharKey,
+ XPLMKeyFlags inFlags,
+ char inVirtualKey,
+ void * inRefCon)
+{
+ XPCKeySniffer * me = reinterpret_cast<XPCKeySniffer *>(inRefCon);
+ return me->HandleKeyStroke(inCharKey, inFlags, inVirtualKey);
+}
+
+XPCWindow::XPCWindow(
+ int inLeft,
+ int inTop,
+ int inRight,
+ int inBottom,
+ int inIsVisible)
+{
+ mWindow = XPLMCreateWindow(inLeft, inTop, inRight, inBottom, inIsVisible,
+ DrawCB, HandleKeyCB, MouseClickCB,
+ reinterpret_cast<void *>(this));
+}
+
+XPCWindow::~XPCWindow()
+{
+ XPLMDestroyWindow(mWindow);
+}
+
+void XPCWindow::GetWindowGeometry(
+ int * outLeft,
+ int * outTop,
+ int * outRight,
+ int * outBottom)
+{
+ XPLMGetWindowGeometry(mWindow, outLeft, outTop, outRight, outBottom);
+}
+
+void XPCWindow::SetWindowGeometry(
+ int inLeft,
+ int inTop,
+ int inRight,
+ int inBottom)
+{
+ XPLMSetWindowGeometry(mWindow, inLeft, inTop, inRight, inBottom);
+}
+
+int XPCWindow::GetWindowIsVisible(void)
+{
+ return XPLMGetWindowIsVisible(mWindow);
+}
+
+void XPCWindow::SetWindowIsVisible(
+ int inIsVisible)
+{
+ XPLMSetWindowIsVisible(mWindow, inIsVisible);
+}
+
+void XPCWindow::TakeKeyboardFocus(void)
+{
+ XPLMTakeKeyboardFocus(mWindow);
+}
+
+void XPCWindow::BringWindowToFront(void)
+{
+ XPLMBringWindowToFront(mWindow);
+}
+
+int XPCWindow::IsWindowInFront(void)
+{
+ return XPLMIsWindowInFront(mWindow);
+}
+
+void XPCWindow::DrawCB(XPLMWindowID inWindowID, void * inRefcon)
+{
+ XPCWindow * me = reinterpret_cast<XPCWindow *>(inRefcon);
+ me->DoDraw();
+}
+
+void XPCWindow::HandleKeyCB(XPLMWindowID inWindowID, char inKey, XPLMKeyFlags inFlags, char inVirtualKey, void * inRefcon, int losingFocus)
+{
+ XPCWindow * me = reinterpret_cast<XPCWindow *>(inRefcon);
+ if (losingFocus)
+ me->LoseFocus();
+ else
+ me->HandleKey(inKey, inFlags, inVirtualKey);
+}
+
+int XPCWindow::MouseClickCB(XPLMWindowID inWindowID, int x, int y, XPLMMouseStatus inMouse, void * inRefcon)
+{
+ XPCWindow * me = reinterpret_cast<XPCWindow *>(inRefcon);
+ return me->HandleClick(x, y, inMouse);
+}
diff --git a/X-Plane-SDK/CHeaders/Wrappers/XPCDisplay.h b/X-Plane-SDK/CHeaders/Wrappers/XPCDisplay.h
new file mode 100755
index 0000000..2465928
--- /dev/null
+++ b/X-Plane-SDK/CHeaders/Wrappers/XPCDisplay.h
@@ -0,0 +1,73 @@
+#ifndef _XPCDisplay_h_
+#define _XPCDisplay_h_
+
+#include "XPLMDisplay.h"
+
+class XPCKeySniffer {
+public:
+
+ XPCKeySniffer(int inBeforeWindows);
+ virtual ~XPCKeySniffer();
+
+ virtual int HandleKeyStroke(
+ char inCharKey,
+ XPLMKeyFlags inFlags,
+ char inVirtualKey)=0;
+
+private:
+
+ int mBeforeWindows;
+
+ static int KeySnifferCB(
+ char inCharKey,
+ XPLMKeyFlags inFlags,
+ char inVirtualKey,
+ void * inRefCon);
+};
+
+
+
+class XPCWindow {
+public:
+
+ XPCWindow(
+ int inLeft,
+ int inTop,
+ int inRight,
+ int inBottom,
+ int inIsVisible);
+ virtual ~XPCWindow();
+
+ virtual void DoDraw(void)=0;
+ virtual void HandleKey(char inKey, XPLMKeyFlags inFlags, char inVirtualKey)=0;
+ virtual void LoseFocus(void)=0;
+ virtual int HandleClick(int x, int y, XPLMMouseStatus inMouse)=0;
+
+ void GetWindowGeometry(
+ int * outLeft,
+ int * outTop,
+ int * outRight,
+ int * outBottom);
+ void SetWindowGeometry(
+ int inLeft,
+ int inTop,
+ int inRight,
+ int inBottom);
+ int GetWindowIsVisible(void);
+ void SetWindowIsVisible(
+ int inIsVisible);
+ void TakeKeyboardFocus(void);
+ void BringWindowToFront(void);
+ int IsWindowInFront(void);
+
+private:
+
+ XPLMWindowID mWindow;
+
+ static void DrawCB(XPLMWindowID inWindowID, void * inRefcon);
+ static void HandleKeyCB(XPLMWindowID inWindowID, char inKey, XPLMKeyFlags inFlags, char inVirtualKey, void * inRefcon, int losingFocus);
+ static int MouseClickCB(XPLMWindowID inWindowID, int x, int y, XPLMMouseStatus inMouse, void * inRefcon);
+
+};
+
+#endif \ No newline at end of file
diff --git a/X-Plane-SDK/CHeaders/Wrappers/XPCListener.cpp b/X-Plane-SDK/CHeaders/Wrappers/XPCListener.cpp
new file mode 100755
index 0000000..b4c77aa
--- /dev/null
+++ b/X-Plane-SDK/CHeaders/Wrappers/XPCListener.cpp
@@ -0,0 +1,27 @@
+#include "XPCListener.h"
+#include "XPCBroadcaster.h"
+
+XPCListener::XPCListener()
+{
+}
+
+XPCListener::~XPCListener()
+{
+ while (!mBroadcasters.empty())
+ mBroadcasters.front()->RemoveListener(this);
+}
+
+void XPCListener::BroadcasterAdded(
+ XPCBroadcaster * inBroadcaster)
+{
+ mBroadcasters.push_back(inBroadcaster);
+}
+
+void XPCListener::BroadcasterRemoved(
+ XPCBroadcaster * inBroadcaster)
+{
+ BroadcastVector::iterator iter = std::find(mBroadcasters.begin(),
+ mBroadcasters.end(), inBroadcaster);
+ if (iter != mBroadcasters.end())
+ mBroadcasters.erase(iter);
+}
diff --git a/X-Plane-SDK/CHeaders/Wrappers/XPCListener.h b/X-Plane-SDK/CHeaders/Wrappers/XPCListener.h
new file mode 100755
index 0000000..dbdd2a0
--- /dev/null
+++ b/X-Plane-SDK/CHeaders/Wrappers/XPCListener.h
@@ -0,0 +1,36 @@
+#ifndef _XPCListener_h_
+#define _XPCListener_h_
+
+#include <vector>
+#include <algorithm>
+
+class XPCBroadcaster;
+
+
+class XPCListener {
+public:
+
+ XPCListener();
+ virtual ~XPCListener();
+
+ virtual void ListenToMessage(
+ int inMessage,
+ void * inParam)=0;
+
+private:
+
+ typedef std::vector<XPCBroadcaster *> BroadcastVector;
+
+ BroadcastVector mBroadcasters;
+
+ friend class XPCBroadcaster;
+
+ void BroadcasterAdded(
+ XPCBroadcaster * inBroadcaster);
+
+ void BroadcasterRemoved(
+ XPCBroadcaster * inBroadcaster);
+
+};
+
+#endif \ No newline at end of file
diff --git a/X-Plane-SDK/CHeaders/Wrappers/XPCProcessing.cpp b/X-Plane-SDK/CHeaders/Wrappers/XPCProcessing.cpp
new file mode 100755
index 0000000..352c05f
--- /dev/null
+++ b/X-Plane-SDK/CHeaders/Wrappers/XPCProcessing.cpp
@@ -0,0 +1,52 @@
+#include "XPCProcessing.h"
+#include "XPLMUtilities.h"
+
+XPCProcess::XPCProcess() :
+ mInCallback(false),
+ mCallbackTime(0)
+{
+ XPLMRegisterFlightLoopCallback(FlightLoopCB, 0, reinterpret_cast<void *>(this));
+}
+
+XPCProcess::~XPCProcess()
+{
+ XPLMUnregisterFlightLoopCallback(FlightLoopCB, reinterpret_cast<void *>(this));
+}
+
+void XPCProcess::StartProcessTime(float inSeconds)
+{
+ mCallbackTime = inSeconds;
+ if (!mInCallback)
+ XPLMSetFlightLoopCallbackInterval(
+ FlightLoopCB, mCallbackTime, 1/*relative to now*/, reinterpret_cast<void *>(this));
+}
+
+void XPCProcess::StartProcessCycles(int inCycles)
+{
+ mCallbackTime = -inCycles;
+ if (!mInCallback)
+ XPLMSetFlightLoopCallbackInterval(
+ FlightLoopCB, mCallbackTime, 1/*relative to now*/, reinterpret_cast<void *>(this));
+}
+
+void XPCProcess::StopProcess(void)
+{
+ mCallbackTime = 0;
+ if (!mInCallback)
+ XPLMSetFlightLoopCallbackInterval(
+ FlightLoopCB, mCallbackTime, 1/*relative to now*/, reinterpret_cast<void *>(this));
+}
+
+
+float XPCProcess::FlightLoopCB(
+ float inElapsedSinceLastCall,
+ float inElapsedTimeSinceLastFlightLoop,
+ int inCounter,
+ void * inRefcon)
+{
+ XPCProcess * me = reinterpret_cast<XPCProcess *>(inRefcon);
+ me->mInCallback = true;
+ me->DoProcessing(inElapsedSinceLastCall, inElapsedTimeSinceLastFlightLoop, inCounter);
+ me->mInCallback = false;
+ return me->mCallbackTime;
+} \ No newline at end of file
diff --git a/X-Plane-SDK/CHeaders/Wrappers/XPCProcessing.h b/X-Plane-SDK/CHeaders/Wrappers/XPCProcessing.h
new file mode 100755
index 0000000..cd735e5
--- /dev/null
+++ b/X-Plane-SDK/CHeaders/Wrappers/XPCProcessing.h
@@ -0,0 +1,37 @@
+#ifndef _XPCProcessing_h_
+#define _XPCProcessing_h_
+
+#include "XPLMProcessing.h"
+
+class XPCProcess {
+public:
+
+ XPCProcess();
+ virtual ~XPCProcess();
+
+ void StartProcessTime(float inSeconds);
+ void StartProcessCycles(int inCycles);
+ void StopProcess(void);
+
+ virtual void DoProcessing(
+ float inElapsedSinceLastCall,
+ float inElapsedTimeSinceLastFlightLoop,
+ int inCounter)=0;
+
+private:
+
+ static float FlightLoopCB(
+ float inElapsedSinceLastCall,
+ float inElapsedTimeSinceLastFlightLoop,
+ int inCounter,
+ void * inRefcon);
+
+ bool mInCallback;
+ float mCallbackTime;
+
+ XPCProcess(const XPCProcess&);
+ XPCProcess& operator=(const XPCProcess&);
+
+};
+
+#endif
diff --git a/X-Plane-SDK/CHeaders/Wrappers/XPCWidget.cpp b/X-Plane-SDK/CHeaders/Wrappers/XPCWidget.cpp
new file mode 100755
index 0000000..8ef8aa3
--- /dev/null
+++ b/X-Plane-SDK/CHeaders/Wrappers/XPCWidget.cpp
@@ -0,0 +1,123 @@
+#include "XPCWidget.h"
+
+XPCWidget::XPCWidget(
+ int inLeft,
+ int inTop,
+ int inRight,
+ int inBottom,
+ bool inVisible,
+ const char * inDescriptor,
+ bool inIsRoot,
+ XPWidgetID inParent,
+ XPWidgetClass inClass) :
+ mWidget(NULL),
+ mOwnsChildren(false),
+ mOwnsWidget(true)
+{
+ mWidget = XPCreateWidget(
+ inLeft, inTop, inRight, inBottom,
+ inVisible ? 1 : 0,
+ inDescriptor,
+ inIsRoot ? 1 : 0,
+ inIsRoot ? NULL : inParent,
+ inClass);
+
+ XPSetWidgetProperty(mWidget, xpProperty_Object, reinterpret_cast<intptr_t>(this));
+ XPAddWidgetCallback(mWidget, WidgetCallback);
+}
+
+XPCWidget::XPCWidget(
+ XPWidgetID inWidget,
+ bool inOwnsWidget) :
+ mWidget(inWidget),
+ mOwnsChildren(false),
+ mOwnsWidget(inOwnsWidget)
+{
+ XPSetWidgetProperty(mWidget, xpProperty_Object, reinterpret_cast<intptr_t>(this));
+ XPAddWidgetCallback(mWidget, WidgetCallback);
+}
+
+XPCWidget::~XPCWidget()
+{
+ if (mOwnsWidget)
+ XPDestroyWidget(mWidget, mOwnsChildren ? 1 : 0);
+}
+
+void XPCWidget::SetOwnsWidget(
+ bool inOwnsWidget)
+{
+ mOwnsWidget = inOwnsWidget;
+}
+
+void XPCWidget::SetOwnsChildren(
+ bool inOwnsChildren)
+{
+ mOwnsChildren = inOwnsChildren;
+}
+
+XPCWidget::operator XPWidgetID () const
+{
+ return mWidget;
+}
+
+XPWidgetID XPCWidget::Get(void) const
+{
+ return mWidget;
+}
+
+void XPCWidget::AddAttachment(
+ XPCWidgetAttachment * inAttachment,
+ bool inOwnsAttachment,
+ bool inPrefilter)
+{
+ if (inPrefilter)
+ {
+ mAttachments.insert(mAttachments.begin(), AttachmentInfo(inAttachment, inOwnsAttachment));
+ } else {
+ mAttachments.push_back(AttachmentInfo(inAttachment, inOwnsAttachment));
+ }
+}
+
+void XPCWidget::RemoveAttachment(
+ XPCWidgetAttachment * inAttachment)
+{
+ for (AttachmentVector::iterator iter = mAttachments.begin();
+ iter != mAttachments.end(); ++iter)
+ {
+ if (iter->first == inAttachment)
+ {
+ mAttachments.erase(iter);
+ return;
+ }
+ }
+}
+
+int XPCWidget::HandleWidgetMessage(
+ XPWidgetMessage inMessage,
+ XPWidgetID inWidget,
+ intptr_t inParam1,
+ intptr_t inParam2)
+{
+ return 0;
+}
+
+int XPCWidget::WidgetCallback(
+ XPWidgetMessage inMessage,
+ XPWidgetID inWidget,
+ intptr_t inParam1,
+ intptr_t inParam2)
+{
+ XPCWidget * me = reinterpret_cast<XPCWidget *>(XPGetWidgetProperty(inWidget, xpProperty_Object, NULL));
+ if (me == NULL)
+ return 0;
+
+ for (AttachmentVector::iterator iter = me->mAttachments.begin(); iter !=
+ me->mAttachments.end(); ++iter)
+ {
+ int result = iter->first->HandleWidgetMessage(me, inMessage, inWidget, inParam1, inParam2);
+ if (result != 0)
+ return result;
+ }
+
+ return me->HandleWidgetMessage(inMessage, inWidget, inParam1, inParam2);
+}
diff --git a/X-Plane-SDK/CHeaders/Wrappers/XPCWidget.h b/X-Plane-SDK/CHeaders/Wrappers/XPCWidget.h
new file mode 100755
index 0000000..788b56a
--- /dev/null
+++ b/X-Plane-SDK/CHeaders/Wrappers/XPCWidget.h
@@ -0,0 +1,84 @@
+#ifndef _XPCWidget_h_
+#define _XPCWidget_h_
+
+#include <vector>
+#include <algorithm>
+#include "XPWidgets.h"
+
+class XPCWidget;
+
+class XPCWidgetAttachment {
+public:
+
+ virtual int HandleWidgetMessage(
+ XPCWidget * inObject,
+ XPWidgetMessage inMessage,
+ XPWidgetID inWidget,
+ intptr_t inParam1,
+ intptr_t inParam2)=0;
+
+};
+
+class XPCWidget {
+public:
+
+ XPCWidget(
+ int inLeft,
+ int inTop,
+ int inRight,
+ int inBottom,
+ bool inVisible,
+ const char * inDescriptor,
+ bool inIsRoot,
+ XPWidgetID inParent,
+ XPWidgetClass inClass);
+ XPCWidget(
+ XPWidgetID inWidget,
+ bool inOwnsWidget);
+ virtual ~XPCWidget();
+
+ void SetOwnsWidget(
+ bool inOwnsWidget);
+ void SetOwnsChildren(
+ bool inOwnsChildren);
+
+ operator XPWidgetID () const;
+
+ XPWidgetID Get(void) const;
+
+ void AddAttachment(
+ XPCWidgetAttachment * inAttachment,
+ bool inOwnsAttachment,
+ bool inPrefilter);
+ void RemoveAttachment(
+ XPCWidgetAttachment * inAttachment);
+
+ virtual int HandleWidgetMessage(
+ XPWidgetMessage inMessage,
+ XPWidgetID inWidget,
+ intptr_t inParam1,
+ intptr_t inParam2);
+
+private:
+
+ static int WidgetCallback(
+ XPWidgetMessage inMessage,
+ XPWidgetID inWidget,
+ intptr_t inParam1,
+ intptr_t inParam2);
+
+ typedef std::pair<XPCWidgetAttachment *, bool> AttachmentInfo;
+ typedef std::vector<AttachmentInfo> AttachmentVector;
+
+ AttachmentVector mAttachments;
+ XPWidgetID mWidget;
+ bool mOwnsChildren;
+ bool mOwnsWidget;
+
+ XPCWidget();
+ XPCWidget(const XPCWidget&);
+ XPCWidget& operator=(const XPCWidget&);
+
+};
+
+#endif \ No newline at end of file
diff --git a/X-Plane-SDK/CHeaders/Wrappers/XPCWidgetAttachments.cpp b/X-Plane-SDK/CHeaders/Wrappers/XPCWidgetAttachments.cpp
new file mode 100755
index 0000000..d87f105
--- /dev/null
+++ b/X-Plane-SDK/CHeaders/Wrappers/XPCWidgetAttachments.cpp
@@ -0,0 +1,267 @@
+#include "XPCWidgetAttachments.h"
+#include "XPStandardWidgets.h"
+#include "XPWidgetUtils.h"
+
+static void XPCGetOrderedSubWidgets(
+ XPWidgetID inWidget,
+ std::vector<XPWidgetID>& outChildren);
+
+XPCKeyFilterAttachment::XPCKeyFilterAttachment(
+ const char * inValidKeys,
+ const char * outValidKeys) :
+ mInput(inValidKeys),
+ mOutput(outValidKeys)
+{
+}
+
+XPCKeyFilterAttachment::~XPCKeyFilterAttachment()
+{
+}
+
+int XPCKeyFilterAttachment::HandleWidgetMessage(
+ XPCWidget * inObject,
+ XPWidgetMessage inMessage,
+ XPWidgetID inWidget,
+ intptr_t inParam1,
+ intptr_t inParam2)
+{
+ if (inMessage == xpMsg_KeyPress)
+ {
+ char& theKey = KEY_CHAR(inParam1);
+ std::string::size_type pos = mInput.find(theKey);
+ if (pos == std::string::npos)
+ return 1; // Not found; eat the key!
+ else {
+ theKey = mOutput[pos];
+ return 0;
+ } // Let it live.
+ }
+ return 0;
+}
+
+
+XPCKeyMessageAttachment::XPCKeyMessageAttachment(
+ char inKey,
+ int inMessage,
+ void * inParam,
+ bool inConsume,
+ bool inVkey,
+ XPCListener * inListener) :
+ mKey(inKey), mMsg(inMessage), mParam(inParam), mConsume(inConsume),
+ mVkey(inVkey)
+{
+ if (inListener != NULL)
+ this->AddListener(inListener);
+}
+
+XPCKeyMessageAttachment::~XPCKeyMessageAttachment()
+{
+}
+
+int XPCKeyMessageAttachment::HandleWidgetMessage(
+ XPCWidget * inObject,
+ XPWidgetMessage inMessage,
+ XPWidgetID inWidget,
+ intptr_t inParam1,
+ intptr_t inParam2)
+{
+ if (inMessage == xpMsg_KeyPress)
+ {
+ char theKey = mVkey ? KEY_VKEY(inParam1) : KEY_CHAR(inParam1);
+ if (theKey != mKey)
+ return 0;
+ if (!(KEY_FLAGS(inParam1) & xplm_DownFlag))
+ return 0;
+
+ BroadcastMessage(mMsg, mParam);
+ return mConsume ? 1 : 0;
+ }
+ return 0;
+}
+
+XPCPushButtonMessageAttachment::XPCPushButtonMessageAttachment(
+ XPWidgetID inWidget,
+ int inMessage,
+ void * inParam,
+ XPCListener * inListener) :
+ mMsg(inMessage), mParam(inParam), mWidget(inWidget)
+{
+ if (inListener != NULL)
+ this->AddListener(inListener);
+}
+
+XPCPushButtonMessageAttachment::~XPCPushButtonMessageAttachment()
+{
+}
+
+int XPCPushButtonMessageAttachment::HandleWidgetMessage(
+ XPCWidget * inObject,
+ XPWidgetMessage inMessage,
+ XPWidgetID inWidget,
+ intptr_t inParam1,
+ intptr_t inParam2)
+{
+ if ((inMessage == xpMsg_PushButtonPressed) && ((XPWidgetID) inParam1 == mWidget))
+ {
+ BroadcastMessage(mMsg, mParam);
+ return 1;
+ }
+
+ if ((inMessage == xpMsg_ButtonStateChanged) && ((XPWidgetID) inParam1 == mWidget))
+ {
+ BroadcastMessage(mMsg, mParam);
+ return 1;
+ }
+ return 0;
+}
+
+XPCSliderMessageAttachment::XPCSliderMessageAttachment(
+ XPWidgetID inWidget,
+ int inMessage,
+ void * inParam,
+ XPCListener * inListener) :
+ mMsg(inMessage), mParam(inParam), mWidget(inWidget)
+{
+ if (inListener != NULL)
+ this->AddListener(inListener);
+}
+
+XPCSliderMessageAttachment::~XPCSliderMessageAttachment()
+{
+}
+
+int XPCSliderMessageAttachment::HandleWidgetMessage(
+ XPCWidget * inObject,
+ XPWidgetMessage inMessage,
+ XPWidgetID inWidget,
+ intptr_t inParam1,
+ intptr_t inParam2)
+{
+ if ((inMessage == xpMsg_ScrollBarSliderPositionChanged) && ((XPWidgetID) inParam1 == mWidget))
+ {
+ BroadcastMessage(mMsg, mParam);
+ return 1;
+ }
+
+ return 0;
+}
+
+
+XPCCloseButtonMessageAttachment::XPCCloseButtonMessageAttachment(
+ XPWidgetID inWidget,
+ int inMessage,
+ void * inParam,
+ XPCListener * inListener) :
+ mMsg(inMessage), mParam(inParam), mWidget(inWidget)
+{
+ if (inListener != NULL)
+ this->AddListener(inListener);
+}
+
+XPCCloseButtonMessageAttachment::~XPCCloseButtonMessageAttachment()
+{
+}
+
+int XPCCloseButtonMessageAttachment::HandleWidgetMessage(
+ XPCWidget * inObject,
+ XPWidgetMessage inMessage,
+ XPWidgetID inWidget,
+ intptr_t inParam1,
+ intptr_t inParam2)
+{
+ if ((inMessage == xpMessage_CloseButtonPushed) && ((XPWidgetID) inParam1 == mWidget))
+ {
+ BroadcastMessage(mMsg, mParam);
+ return 1;
+ }
+
+ return 0;
+}
+
+XPCTabGroupAttachment::XPCTabGroupAttachment()
+{
+}
+
+XPCTabGroupAttachment::~XPCTabGroupAttachment()
+{
+}
+
+int XPCTabGroupAttachment::HandleWidgetMessage(
+ XPCWidget * inObject,
+ XPWidgetMessage inMessage,
+ XPWidgetID inWidget,
+ intptr_t inParam1,
+ intptr_t inParam2)
+{
+ if ((inMessage == xpMsg_KeyPress) && (KEY_CHAR(inParam1) == XPLM_KEY_TAB) &&
+ ((KEY_FLAGS(inParam1) & xplm_UpFlag) == 0))
+ {
+ bool backwards = (KEY_FLAGS(inParam1) & xplm_ShiftFlag) != 0;
+ std::vector<XPWidgetID> widgets;
+ XPCGetOrderedSubWidgets(inWidget, widgets);
+ int n, index = 0;
+ XPWidgetID focusWidget = XPGetWidgetWithFocus();
+ std::vector<XPWidgetID>::iterator iter = std::find(widgets.begin(), widgets.end(), focusWidget);
+ if (iter != widgets.end())
+ {
+ index = std::distance(widgets.begin(), iter);
+ if (backwards)
+ index--;
+ else
+ index++;
+ if (index < 0)
+ index = widgets.size() - 1;
+ if (index >= widgets.size())
+ index = 0;
+ }
+
+ if (backwards)
+ {
+ for (n = index; n >= 0; --n)
+ {
+ if (XPGetWidgetProperty(widgets[n], xpProperty_Enabled, NULL))
+ if (XPSetKeyboardFocus(widgets[n]) != NULL)
+ return 1;
+ }
+ for (n = widgets.size() - 1; n > index; --n)
+ {
+ if (XPGetWidgetProperty(widgets[n], xpProperty_Enabled, NULL))
+ if (XPSetKeyboardFocus(widgets[n]) != NULL)
+ return 1;
+ }
+ } else {
+ for (n = index; n < widgets.size(); ++n)
+ {
+ if (XPGetWidgetProperty(widgets[n], xpProperty_Enabled, NULL))
+ if (XPSetKeyboardFocus(widgets[n]) != NULL)
+ return 1;
+ }
+ for (n = 0; n < index; ++n)
+ {
+ if (XPGetWidgetProperty(widgets[n], xpProperty_Enabled, NULL))
+ if (XPSetKeyboardFocus(widgets[n]) != NULL)
+ return 1;
+ }
+ }
+ }
+ return 0;
+}
+
+
+
+static void XPCGetOrderedSubWidgets(
+ XPWidgetID inWidget,
+ std::vector<XPWidgetID>& outChildren)
+{
+ outChildren.clear();
+ int count = XPCountChildWidgets(inWidget);
+ for (int n = 0; n < count; ++n)
+ {
+ XPWidgetID child = XPGetNthChildWidget(inWidget, n);
+ outChildren.push_back(child);
+ std::vector<XPWidgetID> grandChildren;
+ XPCGetOrderedSubWidgets(child, grandChildren);
+
+ outChildren.insert(outChildren.end(), grandChildren.begin(), grandChildren.end());
+ }
+}
diff --git a/X-Plane-SDK/CHeaders/Wrappers/XPCWidgetAttachments.h b/X-Plane-SDK/CHeaders/Wrappers/XPCWidgetAttachments.h
new file mode 100755
index 0000000..91fb587
--- /dev/null
+++ b/X-Plane-SDK/CHeaders/Wrappers/XPCWidgetAttachments.h
@@ -0,0 +1,146 @@
+#ifndef _XPCWidgetAttachments_h_
+#define _XPCWidgetAttachments_h_
+
+#include <string>
+
+#include "XPCWidget.h"
+#include "XPCBroadcaster.h"
+
+class XPCKeyFilterAttachment : public XPCWidgetAttachment {
+public:
+
+ XPCKeyFilterAttachment(
+ const char * inValidKeys,
+ const char * outValidKeys);
+ virtual ~XPCKeyFilterAttachment();
+
+ virtual int HandleWidgetMessage(
+ XPCWidget * inObject,
+ XPWidgetMessage inMessage,
+ XPWidgetID inWidget,
+ intptr_t inParam1,
+ intptr_t inParam2);
+
+private:
+
+ std::string mInput;
+ std::string mOutput;
+
+};
+
+
+class XPCKeyMessageAttachment : public XPCWidgetAttachment, public XPCBroadcaster {
+public:
+
+ XPCKeyMessageAttachment(
+ char inKey,
+ int inMessage,
+ void * inParam,
+ bool inConsume,
+ bool inVkey,
+ XPCListener * inListener);
+ virtual ~XPCKeyMessageAttachment();
+
+ virtual int HandleWidgetMessage(
+ XPCWidget * inObject,
+ XPWidgetMessage inMessage,
+ XPWidgetID inWidget,
+ intptr_t inParam1,
+ intptr_t inParam2);
+
+private:
+
+ char mKey;
+ bool mVkey;
+ int mMsg;
+ void * mParam;
+ bool mConsume;
+
+};
+
+class XPCPushButtonMessageAttachment : public XPCWidgetAttachment, XPCBroadcaster {
+public:
+
+ XPCPushButtonMessageAttachment(
+ XPWidgetID inWidget,
+ int inMessage,
+ void * inParam,
+ XPCListener * inListener);
+ virtual ~XPCPushButtonMessageAttachment();
+
+ virtual int HandleWidgetMessage(
+ XPCWidget * inObject,
+ XPWidgetMessage inMessage,
+ XPWidgetID inWidget,
+ intptr_t inParam1,
+ intptr_t inParam2);
+
+private:
+ XPWidgetID mWidget;
+ int mMsg;
+ void * mParam;
+};
+
+class XPCSliderMessageAttachment : public XPCWidgetAttachment, XPCBroadcaster {
+public:
+
+ XPCSliderMessageAttachment(
+ XPWidgetID inWidget,
+ int inMessage,
+ void * inParam,
+ XPCListener * inListener);
+ virtual ~XPCSliderMessageAttachment();
+
+ virtual int HandleWidgetMessage(
+ XPCWidget * inObject,
+ XPWidgetMessage inMessage,
+ XPWidgetID inWidget,
+ intptr_t inParam1,
+ intptr_t inParam2);
+
+private:
+ XPWidgetID mWidget;
+ int mMsg;
+ void * mParam;
+};
+
+
+class XPCCloseButtonMessageAttachment : public XPCWidgetAttachment, XPCBroadcaster {
+public:
+
+ XPCCloseButtonMessageAttachment(
+ XPWidgetID inWidget,
+ int inMessage,
+ void * inParam,
+ XPCListener * inListener);
+ virtual ~XPCCloseButtonMessageAttachment();
+
+ virtual int HandleWidgetMessage(
+ XPCWidget * inObject,
+ XPWidgetMessage inMessage,
+ XPWidgetID inWidget,
+ intptr_t inParam1,
+ intptr_t inParam2);
+
+private:
+ XPWidgetID mWidget;
+ int mMsg;
+ void * mParam;
+};
+
+class XPCTabGroupAttachment : public XPCWidgetAttachment {
+public:
+
+ XPCTabGroupAttachment();
+ virtual ~XPCTabGroupAttachment();
+
+ virtual int HandleWidgetMessage(
+ XPCWidget * inObject,
+ XPWidgetMessage inMessage,
+ XPWidgetID inWidget,
+ intptr_t inParam1,
+ intptr_t inParam2);
+
+};
+
+#endif \ No newline at end of file
diff --git a/X-Plane-SDK/CHeaders/XPLM/XPLMCamera.h b/X-Plane-SDK/CHeaders/XPLM/XPLMCamera.h
new file mode 100755
index 0000000..211db73
--- /dev/null
+++ b/X-Plane-SDK/CHeaders/XPLM/XPLMCamera.h
@@ -0,0 +1,168 @@
+#ifndef _XPLMCamera_h_
+#define _XPLMCamera_h_
+
+/*
+ * Copyright 2005-2012 Sandy Barbour and Ben Supnik
+ *
+ * All rights reserved. See license.txt for usage.
+ *
+ * X-Plane SDK Version: 2.1.1
+ *
+ */
+
+/*
+ * XPLMCamera - THEORY OF OPERATION The XPLMCamera APIs allow plug-ins to
+ * control the camera angle in X-Plane. This has a number of applications,
+ * including but not limited to:
+ *
+ * - Creating new views (including dynamic/user-controllable views) for the
+ * user.
+ *
+ * - Creating applications that use X-Plane as a renderer of scenery,
+ * aircrafts, or both.
+ *
+ * The camera is controlled via six parameters: a location in OpenGL
+ * coordinates and pitch, roll and yaw, similar to an airplane's position.
+ * OpenGL coordinate info is described in detail in the XPLMGraphics
+ * documentation; generally you should use the XPLMGraphics routines to
+ * convert from world to local coordinates. The camera's orientation starts
+ * facing level with the ground directly up the negative-Z axis
+ * (approximately north) with the horizon horizontal. It is then rotated
+ * clockwise for yaw, pitched up for positive pitch, and rolled clockwise
+ * around the vector it is looking along for roll.
+ *
+ * You control the camera either either until the user selects a new view or
+ * permanently (the later being similar to how UDP camera control works). You
+ * control the camera by registering a callback per frame from which you
+ * calculate the new camera positions. This guarantees smooth camera motion.
+ *
+ * Use the XPLMDataAccess APIs to get information like the position of the
+ * aircraft, etc. for complex camera positioning.
+ *
+ */
+
+#include "XPLMDefs.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/***************************************************************************
+ * CAMERA CONTROL
+ ***************************************************************************/
+/*
+ *
+ *
+ */
+
+
+/*
+ * XPLMCameraControlDuration
+ *
+ * This enumeration states how long you want to retain control of the camera.
+ * You can retain it indefinitely or until the user selects a new view.
+ *
+ */
+enum {
+ /* Control the camera until the user picks a new view. */
+ xplm_ControlCameraUntilViewChanges = 1
+
+ /* Control the camera until your plugin is disabled or another plugin forcably *
+ * takes control. */
+ ,xplm_ControlCameraForever = 2
+
+
+};
+typedef int XPLMCameraControlDuration;
+
+/*
+ * XPLMCameraPosition_t
+ *
+ * This structure contains a full specification of the camera. X, Y, and Z
+ * are the camera's position in OpenGL coordiantes; pitch, roll, and yaw are
+ * rotations from a camera facing flat north in degrees. Positive pitch means
+ * nose up, positive roll means roll right, and positive yaw means yaw right,
+ * all in degrees. Zoom is a zoom factor, with 1.0 meaning normal zoom and 2.0
+ * magnifying by 2x (objects appear larger).
+ *
+ */
+typedef struct {
+ float x;
+ float y;
+ float z;
+ float pitch;
+ float heading;
+ float roll;
+ float zoom;
+} XPLMCameraPosition_t;
+
+/*
+ * XPLMCameraControl_f
+ *
+ * You use an XPLMCameraControl function to provide continuous control over
+ * the camera. You are passed in a structure in which to put the new camera
+ * position; modify it and return 1 to reposition the camera. Return 0 to
+ * surrender control of the camera; camera control will be handled by X-Plane
+ * on this draw loop. The contents of the structure as you are called are
+ * undefined.
+ *
+ * If X-Plane is taking camera control away from you, this function will be
+ * called with inIsLosingControl set to 1 and ioCameraPosition NULL.
+ *
+ */
+typedef int (* XPLMCameraControl_f)(
+ XPLMCameraPosition_t * outCameraPosition, /* Can be NULL */
+ int inIsLosingControl,
+ void * inRefcon);
+
+/*
+ * XPLMControlCamera
+ *
+ * This function repositions the camera on the next drawing cycle. You must
+ * pass a non-null control function. Specify in inHowLong how long you'd like
+ * control (indefinitely or until a key is pressed).
+ *
+ */
+XPLM_API void XPLMControlCamera(
+ XPLMCameraControlDuration inHowLong,
+ XPLMCameraControl_f inControlFunc,
+ void * inRefcon);
+
+/*
+ * XPLMDontControlCamera
+ *
+ * This function stops you from controlling the camera. If you have a camera
+ * control function, it will not be called with an inIsLosingControl flag.
+ * X-Plane will control the camera on the next cycle.
+ *
+ * For maximum compatibility you should not use this routine unless you are in
+ * posession of the camera.
+ *
+ */
+XPLM_API void XPLMDontControlCamera(void);
+
+/*
+ * XPLMIsCameraBeingControlled
+ *
+ * This routine returns 1 if the camera is being controlled, zero if it is
+ * not. If it is and you pass in a pointer to a camera control duration, the
+ * current control duration will be returned.
+ *
+ */
+XPLM_API int XPLMIsCameraBeingControlled(
+ XPLMCameraControlDuration * outCameraControlDuration); /* Can be NULL */
+
+/*
+ * XPLMReadCameraPosition
+ *
+ * This function reads the current camera position.
+ *
+ */
+XPLM_API void XPLMReadCameraPosition(
+ XPLMCameraPosition_t * outCameraPosition);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/X-Plane-SDK/CHeaders/XPLM/XPLMDataAccess.h b/X-Plane-SDK/CHeaders/XPLM/XPLMDataAccess.h
new file mode 100755
index 0000000..10d6698
--- /dev/null
+++ b/X-Plane-SDK/CHeaders/XPLM/XPLMDataAccess.h
@@ -0,0 +1,707 @@
+#ifndef _XPLMDataAccess_h_
+#define _XPLMDataAccess_h_
+
+/*
+ * Copyright 2005-2012 Sandy Barbour and Ben Supnik
+ *
+ * All rights reserved. See license.txt for usage.
+ *
+ * X-Plane SDK Version: 2.1.1
+ *
+ */
+
+/*
+ * XPLM Data Access API - Theory of Operation
+ *
+ * The data access API gives you a generic, flexible, high performance way to
+ * read and write data to and from X-Plane and other plug-ins. For example,
+ * this API allows you to read and set the nav radios, get the plane location,
+ * determine the current effective graphics frame rate, etc.
+ *
+ * The data access APIs are the way that you read and write data from the sim
+ * as well as other plugins.
+ *
+ * The API works using opaque data references. A data reference is a source
+ * of data; you do not know where it comes from, but once you have it you can
+ * read the data quickly and possibly write it. To get a data reference, you
+ * look it up.
+ *
+ * Data references are identified by verbose string names
+ * (sim/cockpit/radios/nav1_freq_hz). The actual numeric value of the data
+ * reference is implementation defined and is likely to change each time the
+ * simulator is run (or the plugin that provides the datareference is
+ * reloaded).
+ *
+ * The task of looking up a data reference is relatively expensive; look up
+ * your data references once based on verbose strings, and save the opaque
+ * data reference value for the duration of your plugin's operation. Reading
+ * and writing data references is relatively fast (the cost is equivalent to
+ * two function calls through function pointers).
+ *
+ * This allows data access to be high performance, while leaving in
+ * abstraction; since data references are opaque and are searched for, the
+ * underlying data access system can be rebuilt.
+ *
+ * A note on typing: you must know the correct data type to read and write.
+ * APIs are provided for reading and writing data in a number of ways. You
+ * can also double check the data type for a data ref. Note that automatic
+ * conversion is not done for you.
+ *
+ * A note for plugins sharing data with other plugins: the load order of
+ * plugins is not guaranteed. To make sure that every plugin publishing data
+ * has published their data references before other plugins try to subscribe,
+ * publish your data references in your start routine but resolve them the
+ * first time your 'enable' routine is called, or the first time they are
+ * needed in code.
+ *
+ * X-Plane publishes well over 1000 datarefs; a complete list may be found in
+ * the reference section of the SDK online documentation (from the SDK home
+ * page, choose Documentation).
+ *
+ */
+
+#include "XPLMDefs.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/***************************************************************************
+ * READING AND WRITING DATA
+ ***************************************************************************/
+/*
+ * These routines allow you to access a wide variety of data from within
+ * x-plane and modify some of it.
+ *
+ */
+
+
+
+/*
+ * XPLMDataRef
+ *
+ * A data ref is an opaque handle to data provided by the simulator or another
+ * plugin. It uniquely identifies one variable (or array of variables) over
+ * the lifetime of your plugin. You never hard code these values; you always
+ * get them from XPLMFindDataRef.
+ *
+ */
+typedef void * XPLMDataRef;
+
+/*
+ * XPLMDataTypeID
+ *
+ * This is an enumeration that defines the type of the data behind a data
+ * reference. This allows you to sanity check that the data type matches what
+ * you expect. But for the most part, you will know the type of data you are
+ * expecting from the online documentation.
+ *
+ * Data types each take a bit field, so sets of data types may be formed.
+ *
+ */
+enum {
+ /* Data of a type the current XPLM doesn't do. */
+ xplmType_Unknown = 0
+
+ /* A single 4-byte integer, native endian. */
+ ,xplmType_Int = 1
+
+ /* A single 4-byte float, native endian. */
+ ,xplmType_Float = 2
+
+ /* A single 8-byte double, native endian. */
+ ,xplmType_Double = 4
+
+ /* An array of 4-byte floats, native endian. */
+ ,xplmType_FloatArray = 8
+
+ /* An array of 4-byte integers, native endian. */
+ ,xplmType_IntArray = 16
+
+ /* A variable block of data. */
+ ,xplmType_Data = 32
+
+
+};
+typedef int XPLMDataTypeID;
+
+/*
+ * XPLMFindDataRef
+ *
+ * Given a c-style string that names the data ref, this routine looks up the
+ * actual opaque XPLMDataRef that you use to read and write the data. The
+ * string names for datarefs are published on the x-plane SDK web site.
+ *
+ * This function returns NULL if the data ref cannot be found.
+ *
+ * NOTE: this function is relatively expensive; save the XPLMDataRef this
+ * function returns for future use. Do not look up your data ref by string
+ * every time you need to read or write it.
+ *
+ */
+XPLM_API XPLMDataRef XPLMFindDataRef(
+ const char * inDataRefName);
+
+/*
+ * XPLMCanWriteDataRef
+ *
+ * Given a data ref, this routine returns true if you can successfully set
+ * the data, false otherwise. Some datarefs are read-only.
+ *
+ */
+XPLM_API int XPLMCanWriteDataRef(
+ XPLMDataRef inDataRef);
+
+/*
+ * XPLMIsDataRefGood
+ *
+ * WARNING: This function is deprecated and should not be used. Datarefs are
+ * valid until plugins are reloaded or the sim quits. Plugins sharing
+ * datarefs should support these semantics by not unregistering datarefs
+ * during operation. (You should however unregister datarefs when your plugin
+ * is unloaded, as part of general resource cleanup.)
+ *
+ * This function returns whether a data ref is still valid. If it returns
+ * false, you should refind the data ref from its original string. Calling an
+ * accessor function on a bad data ref will return a default value, typically
+ * 0 or 0-length data.
+ *
+ */
+XPLM_API int XPLMIsDataRefGood(
+ XPLMDataRef inDataRef);
+
+/*
+ * XPLMGetDataRefTypes
+ *
+ * This routine returns the types of the data ref for accessor use. If a data
+ * ref is available in multiple data types, they will all be returned.
+ *
+ */
+XPLM_API XPLMDataTypeID XPLMGetDataRefTypes(
+ XPLMDataRef inDataRef);
+
+/***************************************************************************
+ * DATA ACCESSORS
+ ***************************************************************************/
+/*
+ * These routines read and write the data references. For each supported data
+ * type there is a reader and a writer.
+ *
+ * If the data ref is invalid or the plugin that provides it is disabled or
+ * there is a type mismatch, the functions that read data will return 0 as a
+ * default value or not modify the passed in memory. The plugins that write
+ * data will not write under these circumstances or if the data ref is
+ * read-only. NOTE: to keep the overhead of reading datarefs low, these
+ * routines do not do full validation of a dataref; passing a junk value for
+ * a dataref can result in crashing the sim.
+ *
+ * For array-style datarefs, you specify the number of items to read/write and
+ * the offset into the array; the actual number of items read or written is
+ * returned. This may be less to prevent an array-out-of-bounds error.
+ *
+ */
+
+
+
+/*
+ * XPLMGetDatai
+ *
+ * Read an integer data ref and return its value. The return value is the
+ * dataref value or 0 if the dataref is invalid/NULL or the plugin is
+ * disabled.
+ *
+ */
+XPLM_API int XPLMGetDatai(
+ XPLMDataRef inDataRef);
+
+/*
+ * XPLMSetDatai
+ *
+ * Write a new value to an integer data ref. This routine is a no-op if the
+ * plugin publishing the dataref is disabled, the dataref is invalid, or the
+ * dataref is not writable.
+ *
+ */
+XPLM_API void XPLMSetDatai(
+ XPLMDataRef inDataRef,
+ int inValue);
+
+/*
+ * XPLMGetDataf
+ *
+ * Read a single precision floating point dataref and return its value. The
+ * return value is the dataref value or 0.0 if the dataref is invalid/NULL or
+ * the plugin is disabled.
+ *
+ */
+XPLM_API float XPLMGetDataf(
+ XPLMDataRef inDataRef);
+
+/*
+ * XPLMSetDataf
+ *
+ * Write a new value to a single precision floating point data ref. This
+ * routine is a no-op if the plugin publishing the dataref is disabled, the
+ * dataref is invalid, or the dataref is not writable.
+ *
+ */
+XPLM_API void XPLMSetDataf(
+ XPLMDataRef inDataRef,
+ float inValue);
+
+/*
+ * XPLMGetDatad
+ *
+ * Read a double precision floating point dataref and return its value. The
+ * return value is the dataref value or 0.0 if the dataref is invalid/NULL or
+ * the plugin is disabled.
+ *
+ */
+XPLM_API double XPLMGetDatad(
+ XPLMDataRef inDataRef);
+
+/*
+ * XPLMSetDatad
+ *
+ * Write a new value to a double precision floating point data ref. This
+ * routine is a no-op if the plugin publishing the dataref is disabled, the
+ * dataref is invalid, or the dataref is not writable.
+ *
+ */
+XPLM_API void XPLMSetDatad(
+ XPLMDataRef inDataRef,
+ double inValue);
+
+/*
+ * XPLMGetDatavi
+ *
+ * Read a part of an integer array dataref. If you pass NULL for outVaules,
+ * the routine will return the size of the array, ignoring inOffset and inMax.
+ *
+ *
+ * If outValues is not NULL, then up to inMax values are copied from the
+ * dataref into outValues, starting at inOffset in the dataref. If inMax +
+ * inOffset is larger than the size of the dataref, less than inMax values
+ * will be copied. The number of values copied is returned.
+ *
+ * Note: the semantics of array datarefs are entirely implemented by the
+ * plugin (or X-Plane) that provides the dataref, not the SDK itself; the
+ * above description is how these datarefs are intended to work, but a rogue
+ * plugin may have different behavior.
+ *
+ */
+XPLM_API int XPLMGetDatavi(
+ XPLMDataRef inDataRef,
+ int * outValues, /* Can be NULL */
+ int inOffset,
+ int inMax);
+
+/*
+ * XPLMSetDatavi
+ *
+ * Write part or all of an integer array dataref. The values passed by
+ * inValues are written into the dataref starting at inOffset. Up to inCount
+ * values are written; however if the values would write "off the end" of the
+ * dataref array, then fewer values are written.
+ *
+ * Note: the semantics of array datarefs are entirely implemented by the
+ * plugin (or X-Plane) that provides the dataref, not the SDK itself; the
+ * above description is how these datarefs are intended to work, but a rogue
+ * plugin may have different behavior.
+ *
+ */
+XPLM_API void XPLMSetDatavi(
+ XPLMDataRef inDataRef,
+ int * inValues,
+ int inoffset,
+ int inCount);
+
+/*
+ * XPLMGetDatavf
+ *
+ * Read a part of a single precision floating point array dataref. If you
+ * pass NULL for outVaules, the routine will return the size of the array,
+ * ignoring inOffset and inMax.
+ *
+ * If outValues is not NULL, then up to inMax values are copied from the
+ * dataref into outValues, starting at inOffset in the dataref. If inMax +
+ * inOffset is larger than the size of the dataref, less than inMax values
+ * will be copied. The number of values copied is returned.
+ *
+ * Note: the semantics of array datarefs are entirely implemented by the
+ * plugin (or X-Plane) that provides the dataref, not the SDK itself; the
+ * above description is how these datarefs are intended to work, but a rogue
+ * plugin may have different behavior.
+ *
+ */
+XPLM_API int XPLMGetDatavf(
+ XPLMDataRef inDataRef,
+ float * outValues, /* Can be NULL */
+ int inOffset,
+ int inMax);
+
+/*
+ * XPLMSetDatavf
+ *
+ * Write part or all of a single precision floating point array dataref. The
+ * values passed by inValues are written into the dataref starting at
+ * inOffset. Up to inCount values are written; however if the values would
+ * write "off the end" of the dataref array, then fewer values are written.
+ *
+ * Note: the semantics of array datarefs are entirely implemented by the
+ * plugin (or X-Plane) that provides the dataref, not the SDK itself; the
+ * above description is how these datarefs are intended to work, but a rogue
+ * plugin may have different behavior.
+ *
+ */
+XPLM_API void XPLMSetDatavf(
+ XPLMDataRef inDataRef,
+ float * inValues,
+ int inoffset,
+ int inCount);
+
+/*
+ * XPLMGetDatab
+ *
+ * Read a part of a byte array dataref. If you pass NULL for outVaules, the
+ * routine will return the size of the array, ignoring inOffset and inMax.
+ *
+ * If outValues is not NULL, then up to inMax values are copied from the
+ * dataref into outValues, starting at inOffset in the dataref. If inMax +
+ * inOffset is larger than the size of the dataref, less than inMax values
+ * will be copied. The number of values copied is returned.
+ *
+ * Note: the semantics of array datarefs are entirely implemented by the
+ * plugin (or X-Plane) that provides the dataref, not the SDK itself; the
+ * above description is how these datarefs are intended to work, but a rogue
+ * plugin may have different behavior.
+ *
+ */
+XPLM_API int XPLMGetDatab(
+ XPLMDataRef inDataRef,
+ void * outValue, /* Can be NULL */
+ int inOffset,
+ int inMaxBytes);
+
+/*
+ * XPLMSetDatab
+ *
+ * Write part or all of a byte array dataref. The values passed by inValues
+ * are written into the dataref starting at inOffset. Up to inCount values
+ * are written; however if the values would write "off the end" of the dataref
+ * array, then fewer values are written.
+ *
+ * Note: the semantics of array datarefs are entirely implemented by the
+ * plugin (or X-Plane) that provides the dataref, not the SDK itself; the
+ * above description is how these datarefs are intended to work, but a rogue
+ * plugin may have different behavior.
+ *
+ */
+XPLM_API void XPLMSetDatab(
+ XPLMDataRef inDataRef,
+ void * inValue,
+ int inOffset,
+ int inLength);
+
+/***************************************************************************
+ * PUBLISHING YOUR PLUGINS DATA
+ ***************************************************************************/
+/*
+ * These functions allow you to create data references that other plug-ins can
+ * access via the above data access APIs. Data references published by other
+ * plugins operate the same as ones published by x-plane in all manners except
+ * that your data reference will not be available to other plugins if/when
+ * your plugin is disabled.
+ *
+ * You share data by registering data provider callback functions. When a
+ * plug-in requests your data, these callbacks are then called. You provide
+ * one callback to return the value when a plugin 'reads' it and another to
+ * change the value when a plugin 'writes' it.
+ *
+ * Important: you must pick a prefix for your datarefs other than "sim/" -
+ * this prefix is reserved for X-Plane. The X-Plane SDK website contains a
+ * registry where authors can select a unique first word for dataref names, to
+ * prevent dataref collisions between plugins.
+ *
+ */
+
+
+
+/*
+ * XPLMGetDatai_f
+ *
+ * Data provider function pointers.
+ *
+ * These define the function pointers you provide to get or set data. Note
+ * that you are passed a generic pointer for each one. This is the same
+ * pointer you pass in your register routine; you can use it to find global
+ * variables, etc.
+ *
+ * The semantics of your callbacks are the same as the dataref accessor above
+ * - basically routines like XPLMGetDatai are just pass-throughs from a caller
+ * to your plugin. Be particularly mindful in implementing array dataref
+ * read-write accessors; you are responsible for avoiding overruns, supporting
+ * offset read/writes, and handling a read with a NULL buffer.
+ *
+ */
+typedef int (* XPLMGetDatai_f)(
+ void * inRefcon);
+
+/*
+ * XPLMSetDatai_f
+ *
+ *
+ */
+typedef void (* XPLMSetDatai_f)(
+ void * inRefcon,
+ int inValue);
+
+/*
+ * XPLMGetDataf_f
+ *
+ *
+ */
+typedef float (* XPLMGetDataf_f)(
+ void * inRefcon);
+
+/*
+ * XPLMSetDataf_f
+ *
+ *
+ */
+typedef void (* XPLMSetDataf_f)(
+ void * inRefcon,
+ float inValue);
+
+/*
+ * XPLMGetDatad_f
+ *
+ *
+ */
+typedef double (* XPLMGetDatad_f)(
+ void * inRefcon);
+
+/*
+ * XPLMSetDatad_f
+ *
+ *
+ */
+typedef void (* XPLMSetDatad_f)(
+ void * inRefcon,
+ double inValue);
+
+/*
+ * XPLMGetDatavi_f
+ *
+ *
+ */
+typedef int (* XPLMGetDatavi_f)(
+ void * inRefcon,
+ int * outValues, /* Can be NULL */
+ int inOffset,
+ int inMax);
+
+/*
+ * XPLMSetDatavi_f
+ *
+ *
+ */
+typedef void (* XPLMSetDatavi_f)(
+ void * inRefcon,
+ int * inValues,
+ int inOffset,
+ int inCount);
+
+/*
+ * XPLMGetDatavf_f
+ *
+ *
+ */
+typedef int (* XPLMGetDatavf_f)(
+ void * inRefcon,
+ float * outValues, /* Can be NULL */
+ int inOffset,
+ int inMax);
+
+/*
+ * XPLMSetDatavf_f
+ *
+ *
+ */
+typedef void (* XPLMSetDatavf_f)(
+ void * inRefcon,
+ float * inValues,
+ int inOffset,
+ int inCount);
+
+/*
+ * XPLMGetDatab_f
+ *
+ *
+ */
+typedef int (* XPLMGetDatab_f)(
+ void * inRefcon,
+ void * outValue, /* Can be NULL */
+ int inOffset,
+ int inMaxLength);
+
+/*
+ * XPLMSetDatab_f
+ *
+ *
+ */
+typedef void (* XPLMSetDatab_f)(
+ void * inRefcon,
+ void * inValue,
+ int inOffset,
+ int inLength);
+
+/*
+ * XPLMRegisterDataAccessor
+ *
+ * This routine creates a new item of data that can be read and written. Pass
+ * in the data's full name for searching, the type(s) of the data for
+ * accessing, and whether the data can be written to. For each data type you
+ * support, pass in a read accessor function and a write accessor function if
+ * necessary. Pass NULL for data types you do not support or write accessors
+ * if you are read-only.
+ *
+ * You are returned a data ref for the new item of data created. You can use
+ * this data ref to unregister your data later or read or write from it.
+ *
+ */
+XPLM_API XPLMDataRef XPLMRegisterDataAccessor(
+ const char * inDataName,
+ XPLMDataTypeID inDataType,
+ int inIsWritable,
+ XPLMGetDatai_f inReadInt,
+ XPLMSetDatai_f inWriteInt,
+ XPLMGetDataf_f inReadFloat,
+ XPLMSetDataf_f inWriteFloat,
+ XPLMGetDatad_f inReadDouble,
+ XPLMSetDatad_f inWriteDouble,
+ XPLMGetDatavi_f inReadIntArray,
+ XPLMSetDatavi_f inWriteIntArray,
+ XPLMGetDatavf_f inReadFloatArray,
+ XPLMSetDatavf_f inWriteFloatArray,
+ XPLMGetDatab_f inReadData,
+ XPLMSetDatab_f inWriteData,
+ void * inReadRefcon,
+ void * inWriteRefcon);
+
+/*
+ * XPLMUnregisterDataAccessor
+ *
+ * Use this routine to unregister any data accessors you may have registered.
+ * You unregister a data ref by the XPLMDataRef you get back from
+ * registration. Once you unregister a data ref, your function pointer will
+ * not be called anymore.
+ *
+ * For maximum compatibility, do not unregister your data accessors until
+ * final shutdown (when your XPluginStop routine is called). This allows
+ * other plugins to find your data reference once and use it for their entire
+ * time of operation.
+ *
+ */
+XPLM_API void XPLMUnregisterDataAccessor(
+ XPLMDataRef inDataRef);
+
+/***************************************************************************
+ * SHARING DATA BETWEEN MULTIPLE PLUGINS
+ ***************************************************************************/
+/*
+ * The data reference registration APIs from the previous section allow a
+ * plugin to publish data in a one-owner manner; the plugin that publishes the
+ * data reference owns the real memory that the data ref uses. This is
+ * satisfactory for most cases, but there are also cases where plugnis need to
+ * share actual data.
+ *
+ * With a shared data reference, no one plugin owns the actual memory for the
+ * data reference; the plugin SDK allocates that for you. When the first
+ * plugin asks to 'share' the data, the memory is allocated. When the data is
+ * changed, every plugin that is sharing the data is notified.
+ *
+ * Shared data references differ from the 'owned' data references from the
+ * previous section in a few ways:
+ *
+ * - With shared data references, any plugin can create the data reference;
+ * with owned plugins one plugin must create the data reference and others
+ * subscribe. (This can be a problem if you don't know which set of plugins
+ * will be present).
+ *
+ * - With shared data references, every plugin that is sharing the data is
+ * notified when the data is changed. With owned data references, only the
+ * one owner is notified when the data is changed.
+ *
+ * - With shared data references, you cannot access the physical memory of the
+ * data reference; you must use the XPLMGet... and XPLMSet... APIs. With an
+ * owned data reference, the one owning data reference can manipulate the
+ * data reference's memory in any way it sees fit.
+ *
+ * Shared data references solve two problems: if you need to have a data
+ * reference used by several plugins but do not know which plugins will be
+ * installed, or if all plugins sharing data need to be notified when that
+ * data is changed, use shared data references.
+ *
+ */
+
+
+
+/*
+ * XPLMDataChanged_f
+ *
+ * An XPLMDataChanged_f is a callback that the XPLM calls whenever any other
+ * plug-in modifies shared data. A refcon you provide is passed back to help
+ * identify which data is being changed. In response, you may want to call one
+ * of the XPLMGetDataxxx routines to find the new value of the data.
+ *
+ */
+typedef void (* XPLMDataChanged_f)(
+ void * inRefcon);
+
+/*
+ * XPLMShareData
+ *
+ * This routine connects a plug-in to shared data, creating the shared data if
+ * necessary. inDataName is a standard path for the data ref, and inDataType
+ * specifies the type. This function will create the data if it does not
+ * exist. If the data already exists but the type does not match, an error is
+ * returned, so it is important that plug-in authors collaborate to establish
+ * public standards for shared data.
+ *
+ * If a notificationFunc is passed in and is not NULL, that notification
+ * function will be called whenever the data is modified. The notification
+ * refcon will be passed to it. This allows your plug-in to know which shared
+ * data was changed if multiple shared data are handled by one callback, or if
+ * the plug-in does not use global variables.
+ *
+ * A one is returned for successfully creating or finding the shared data; a
+ * zero if the data already exists but is of the wrong type.
+ *
+ */
+XPLM_API int XPLMShareData(
+ const char * inDataName,
+ XPLMDataTypeID inDataType,
+ XPLMDataChanged_f inNotificationFunc,
+ void * inNotificationRefcon);
+
+/*
+ * XPLMUnshareData
+ *
+ * This routine removes your notification function for shared data. Call it
+ * when done with the data to stop receiving change notifications. Arguments
+ * must match XPLMShareData. The actual memory will not necessarily be freed,
+ * since other plug-ins could be using it.
+ *
+ */
+XPLM_API int XPLMUnshareData(
+ const char * inDataName,
+ XPLMDataTypeID inDataType,
+ XPLMDataChanged_f inNotificationFunc,
+ void * inNotificationRefcon);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/X-Plane-SDK/CHeaders/XPLM/XPLMDefs.h b/X-Plane-SDK/CHeaders/XPLM/XPLMDefs.h
new file mode 100755
index 0000000..e1909c4
--- /dev/null
+++ b/X-Plane-SDK/CHeaders/XPLM/XPLMDefs.h
@@ -0,0 +1,518 @@
+#ifndef _XPLMDefs_h_
+#define _XPLMDefs_h_
+
+/*
+ * Copyright 2005-2012 Sandy Barbour and Ben Supnik
+ *
+ * All rights reserved. See license.txt for usage.
+ *
+ * X-Plane SDK Version: 2.1.1
+ *
+ */
+
+/*
+ * This file is contains the cross-platform and basic definitions for the
+ * X-Plane SDK.
+ *
+ * The preprocessor macros APL and IBM must be defined to specify the
+ * compilation target; define APL to 1 and IBM 0 to compile on Macintosh and
+ * APL to 0 and IBM to 1 for Windows. You must specify these macro definitions
+ * before including XPLMDefs.h or any other XPLM headers. You can do this
+ * using the -D command line option or a preprocessor header.
+ *
+ */
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if IBM
+#include <windows.h>
+#else
+#include <stdint.h>
+#endif
+/***************************************************************************
+ * DLL Definitions
+ ***************************************************************************/
+/*
+ * These definitions control the importing and exporting of functions within
+ * the DLL.
+ *
+ * You can prefix your five required callbacks with the PLUGIN_API macro to
+ * declare them as exported C functions. The XPLM_API macro identifies
+ * functions that are provided to you via the plugin SDK. (Link against
+ * XPLM.lib to use these functions.)
+ *
+ */
+
+
+
+#ifdef __cplusplus
+ #if APL
+ #if __GNUC__ >= 4
+ #define PLUGIN_API extern "C" __attribute__((visibility("default")))
+ #elif __MACH__
+ #define PLUGIN_API extern "C"
+ #else
+ #define PLUGIN_API extern "C" __declspec(dllexport)
+ #endif
+ #elif IBM
+ #define PLUGIN_API extern "C" __declspec(dllexport)
+ #elif LIN
+ #if __GNUC__ >= 4
+ #define PLUGIN_API extern "C" __attribute__((visibility("default")))
+ #else
+ #define PLUGIN_API extern "C"
+ #endif
+ #else
+ #error "Platform not defined!"
+ #endif
+#else
+ #if APL
+ #if __GNUC__ >= 4
+ #define PLUGIN_API __attribute__((visibility("default")))
+ #elif __MACH__
+ #define PLUGIN_API
+ #else
+ #define PLUGIN_API __declspec(dllexport)
+ #endif
+ #elif IBM
+ #define PLUGIN_API __declspec(dllexport)
+ #elif LIN
+ #if __GNUC__ >= 4
+ #define PLUGIN_API __attribute__((visibility("default")))
+ #else
+ #define PLUGIN_API
+ #endif
+ #else
+ #error "Platform not defined!"
+ #endif
+#endif
+
+#if APL
+ #if XPLM
+ #if __GNUC__ >= 4
+ #define XPLM_API __attribute__((visibility("default")))
+ #elif __MACH__
+ #define XPLM_API
+ #else
+ #define XPLM_API __declspec(dllexport)
+ #endif
+ #else
+ #define XPLM_API
+ #endif
+#elif IBM
+ #if XPLM
+ #define XPLM_API __declspec(dllexport)
+ #else
+ #define XPLM_API __declspec(dllimport)
+ #endif
+#elif LIN
+ #if XPLM
+ #if __GNUC__ >= 4
+ #define XPLM_API __attribute__((visibility("default")))
+ #else
+ #define XPLM_API
+ #endif
+ #else
+ #define XPLM_API
+ #endif
+#else
+ #error "Platform not defined!"
+#endif
+
+/***************************************************************************
+ * GLOBAL DEFINITIONS
+ ***************************************************************************/
+/*
+ * These definitions are used in all parts of the SDK.
+ *
+ */
+
+
+
+/*
+ * XPLMPluginID
+ *
+ * Each plug-in is identified by a unique integer ID. This ID can be used to
+ * disable or enable a plug-in, or discover what plug-in is 'running' at the
+ * time. A plug-in ID is unique within the currently running instance of
+ * X-Plane unless plug-ins are reloaded. Plug-ins may receive a different
+ * unique ID each time they are loaded.
+ *
+ * For persistent identification of plug-ins, use XPLMFindPluginBySignature in
+ * XPLMUtiltiies.h
+ *
+ * -1 indicates no plug-in.
+ *
+ */
+typedef int XPLMPluginID;
+
+/* No plugin. */
+#define XPLM_NO_PLUGIN_ID (-1)
+
+/* X-Plane itself */
+#define XPLM_PLUGIN_XPLANE (0)
+
+/* The current XPLM revision is 2.10 (210). */
+#define kXPLM_Version (210)
+
+/*
+ * XPLMKeyFlags
+ *
+ * These bitfields define modifier keys in a platform independent way. When a
+ * key is pressed, a series of messages are sent to your plugin. The down
+ * flag is set in the first of these messages, and the up flag in the last.
+ * While the key is held down, messages are sent with neither to indicate that
+ * the key is being held down as a repeated character.
+ *
+ * The control flag is mapped to the control flag on Macintosh and PC.
+ * Generally X-Plane uses the control key and not the command key on
+ * Macintosh, providing a consistent interface across platforms that does not
+ * necessarily match the Macintosh user interface guidelines. There is not
+ * yet a way for plugins to access the Macintosh control keys without using
+ * #ifdefed code.
+ *
+ */
+enum {
+ /* The shift key is down */
+ xplm_ShiftFlag = 1
+
+ /* The option or alt key is down */
+ ,xplm_OptionAltFlag = 2
+
+ /* The control key is down* */
+ ,xplm_ControlFlag = 4
+
+ /* The key is being pressed down */
+ ,xplm_DownFlag = 8
+
+ /* The key is being released */
+ ,xplm_UpFlag = 16
+
+
+};
+typedef int XPLMKeyFlags;
+
+/***************************************************************************
+ * ASCII CONTROL KEY CODES
+ ***************************************************************************/
+/*
+ * These definitions define how various control keys are mapped to ASCII key
+ * codes. Not all key presses generate an ASCII value, so plugin code should
+ * be prepared to see null characters come from the keyboard...this usually
+ * represents a key stroke that has no equivalent ASCII, like a page-down
+ * press. Use virtual key codes to find these key strokes. ASCII key codes
+ * take into account modifier keys; shift keys will affect capitals and
+ * punctuation; control key combinations may have no vaild ASCII and produce
+ * NULL. To detect control-key combinations, use virtual key codes, not ASCII
+ * keys.
+ *
+ */
+
+
+
+#define XPLM_KEY_RETURN 13
+
+#define XPLM_KEY_ESCAPE 27
+
+#define XPLM_KEY_TAB 9
+
+#define XPLM_KEY_DELETE 8
+
+#define XPLM_KEY_LEFT 28
+
+#define XPLM_KEY_RIGHT 29
+
+#define XPLM_KEY_UP 30
+
+#define XPLM_KEY_DOWN 31
+
+#define XPLM_KEY_0 48
+
+#define XPLM_KEY_1 49
+
+#define XPLM_KEY_2 50
+
+#define XPLM_KEY_3 51
+
+#define XPLM_KEY_4 52
+
+#define XPLM_KEY_5 53
+
+#define XPLM_KEY_6 54
+
+#define XPLM_KEY_7 55
+
+#define XPLM_KEY_8 56
+
+#define XPLM_KEY_9 57
+
+#define XPLM_KEY_DECIMAL 46
+
+/***************************************************************************
+ * VIRTUAL KEY CODES
+ ***************************************************************************/
+/*
+ * These are cross-platform defines for every distinct keyboard press on the
+ * computer. Every physical key on the keyboard has a virtual key code. So
+ * the "two" key on the top row of the main keyboard has a different code
+ * from the "two" key on the numeric key pad. But the 'w' and 'W' character
+ * are indistinguishable by virtual key code because they are the same
+ * physical key (one with and one without the shift key).
+ *
+ * Use virtual key codes to detect keystrokes that do not have ASCII
+ * equivalents, allow the user to map the numeric keypad separately from the
+ * main keyboard, and detect control key and other modifier-key combinations
+ * that generate ASCII control key sequences (many of which are not available
+ * directly via character keys in the SDK).
+ *
+ * To assign virtual key codes we started with the Microsoft set but made some
+ * additions and changes. A few differences:
+ *
+ * 1. Modifier keys are not available as virtual key codes. You cannot get
+ * distinct modifier press and release messages. Please do not try to use
+ * modifier keys as regular keys; doing so will almost certainly interfere
+ * with users' abilities to use the native x-plane key bindings.
+ *
+ * 2. Some keys that do not exist on both Mac and PC keyboards are removed.
+ *
+ * 3. Do not assume that the values of these keystrokes are interchangeable
+ * with MS v-keys.
+ *
+ */
+
+
+
+#define XPLM_VK_BACK 0x08
+
+#define XPLM_VK_TAB 0x09
+
+#define XPLM_VK_CLEAR 0x0C
+
+#define XPLM_VK_RETURN 0x0D
+
+#define XPLM_VK_ESCAPE 0x1B
+
+#define XPLM_VK_SPACE 0x20
+
+#define XPLM_VK_PRIOR 0x21
+
+#define XPLM_VK_NEXT 0x22
+
+#define XPLM_VK_END 0x23
+
+#define XPLM_VK_HOME 0x24
+
+#define XPLM_VK_LEFT 0x25
+
+#define XPLM_VK_UP 0x26
+
+#define XPLM_VK_RIGHT 0x27
+
+#define XPLM_VK_DOWN 0x28
+
+#define XPLM_VK_SELECT 0x29
+
+#define XPLM_VK_PRINT 0x2A
+
+#define XPLM_VK_EXECUTE 0x2B
+
+#define XPLM_VK_SNAPSHOT 0x2C
+
+#define XPLM_VK_INSERT 0x2D
+
+#define XPLM_VK_DELETE 0x2E
+
+#define XPLM_VK_HELP 0x2F
+
+/* XPLM_VK_0 thru XPLM_VK_9 are the same as ASCII '0' thru '9' (0x30 - 0x39) */
+#define XPLM_VK_0 0x30
+
+#define XPLM_VK_1 0x31
+
+#define XPLM_VK_2 0x32
+
+#define XPLM_VK_3 0x33
+
+#define XPLM_VK_4 0x34
+
+#define XPLM_VK_5 0x35
+
+#define XPLM_VK_6 0x36
+
+#define XPLM_VK_7 0x37
+
+#define XPLM_VK_8 0x38
+
+#define XPLM_VK_9 0x39
+
+/* XPLM_VK_A thru XPLM_VK_Z are the same as ASCII 'A' thru 'Z' (0x41 - 0x5A) */
+#define XPLM_VK_A 0x41
+
+#define XPLM_VK_B 0x42
+
+#define XPLM_VK_C 0x43
+
+#define XPLM_VK_D 0x44
+
+#define XPLM_VK_E 0x45
+
+#define XPLM_VK_F 0x46
+
+#define XPLM_VK_G 0x47
+
+#define XPLM_VK_H 0x48
+
+#define XPLM_VK_I 0x49
+
+#define XPLM_VK_J 0x4A
+
+#define XPLM_VK_K 0x4B
+
+#define XPLM_VK_L 0x4C
+
+#define XPLM_VK_M 0x4D
+
+#define XPLM_VK_N 0x4E
+
+#define XPLM_VK_O 0x4F
+
+#define XPLM_VK_P 0x50
+
+#define XPLM_VK_Q 0x51
+
+#define XPLM_VK_R 0x52
+
+#define XPLM_VK_S 0x53
+
+#define XPLM_VK_T 0x54
+
+#define XPLM_VK_U 0x55
+
+#define XPLM_VK_V 0x56
+
+#define XPLM_VK_W 0x57
+
+#define XPLM_VK_X 0x58
+
+#define XPLM_VK_Y 0x59
+
+#define XPLM_VK_Z 0x5A
+
+#define XPLM_VK_NUMPAD0 0x60
+
+#define XPLM_VK_NUMPAD1 0x61
+
+#define XPLM_VK_NUMPAD2 0x62
+
+#define XPLM_VK_NUMPAD3 0x63
+
+#define XPLM_VK_NUMPAD4 0x64
+
+#define XPLM_VK_NUMPAD5 0x65
+
+#define XPLM_VK_NUMPAD6 0x66
+
+#define XPLM_VK_NUMPAD7 0x67
+
+#define XPLM_VK_NUMPAD8 0x68
+
+#define XPLM_VK_NUMPAD9 0x69
+
+#define XPLM_VK_MULTIPLY 0x6A
+
+#define XPLM_VK_ADD 0x6B
+
+#define XPLM_VK_SEPARATOR 0x6C
+
+#define XPLM_VK_SUBTRACT 0x6D
+
+#define XPLM_VK_DECIMAL 0x6E
+
+#define XPLM_VK_DIVIDE 0x6F
+
+#define XPLM_VK_F1 0x70
+
+#define XPLM_VK_F2 0x71
+
+#define XPLM_VK_F3 0x72
+
+#define XPLM_VK_F4 0x73
+
+#define XPLM_VK_F5 0x74
+
+#define XPLM_VK_F6 0x75
+
+#define XPLM_VK_F7 0x76
+
+#define XPLM_VK_F8 0x77
+
+#define XPLM_VK_F9 0x78
+
+#define XPLM_VK_F10 0x79
+
+#define XPLM_VK_F11 0x7A
+
+#define XPLM_VK_F12 0x7B
+
+#define XPLM_VK_F13 0x7C
+
+#define XPLM_VK_F14 0x7D
+
+#define XPLM_VK_F15 0x7E
+
+#define XPLM_VK_F16 0x7F
+
+#define XPLM_VK_F17 0x80
+
+#define XPLM_VK_F18 0x81
+
+#define XPLM_VK_F19 0x82
+
+#define XPLM_VK_F20 0x83
+
+#define XPLM_VK_F21 0x84
+
+#define XPLM_VK_F22 0x85
+
+#define XPLM_VK_F23 0x86
+
+#define XPLM_VK_F24 0x87
+
+/* The following definitions are extended and are not based on the Microsoft *
+ * key set. */
+#define XPLM_VK_EQUAL 0xB0
+
+#define XPLM_VK_MINUS 0xB1
+
+#define XPLM_VK_RBRACE 0xB2
+
+#define XPLM_VK_LBRACE 0xB3
+
+#define XPLM_VK_QUOTE 0xB4
+
+#define XPLM_VK_SEMICOLON 0xB5
+
+#define XPLM_VK_BACKSLASH 0xB6
+
+#define XPLM_VK_COMMA 0xB7
+
+#define XPLM_VK_SLASH 0xB8
+
+#define XPLM_VK_PERIOD 0xB9
+
+#define XPLM_VK_BACKQUOTE 0xBA
+
+#define XPLM_VK_ENTER 0xBB
+
+#define XPLM_VK_NUMPAD_ENT 0xBC
+
+#define XPLM_VK_NUMPAD_EQ 0xBD
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/X-Plane-SDK/CHeaders/XPLM/XPLMDisplay.h b/X-Plane-SDK/CHeaders/XPLM/XPLMDisplay.h
new file mode 100755
index 0000000..686c921
--- /dev/null
+++ b/X-Plane-SDK/CHeaders/XPLM/XPLMDisplay.h
@@ -0,0 +1,760 @@
+#ifndef _XPLMDisplay_h_
+#define _XPLMDisplay_h_
+
+/*
+ * Copyright 2005-2012 Sandy Barbour and Ben Supnik
+ *
+ * All rights reserved. See license.txt for usage.
+ *
+ * X-Plane SDK Version: 2.1.1
+ *
+ */
+
+/*
+ * XPLM Display APIs - THEORY OF OPERATION
+ *
+ * This API provides the basic hooks to draw in X-Plane and create user
+ * interface. All X-Plane drawing is done in OpenGL. The X-Plane plug-in
+ * manager takes care of properly setting up the OpenGL context and matrices.
+ * You do not decide when in your code's execution to draw; X-Plane tells you
+ * when it is ready to have your plugin draw.
+ *
+ * X-Plane's drawing strategy is straightforward: every "frame" the screen is
+ * rendered by drawing the 3-d scene (dome, ground, objects, airplanes, etc.)
+ * and then drawing the cockpit on top of it. Alpha blending is used to
+ * overlay the cockpit over the world (and the gauges over the panel, etc.).
+ *
+ * There are two ways you can draw: directly and in a window.
+ *
+ * Direct drawing involves drawing to the screen before or after X-Plane
+ * finishes a phase of drawing. When you draw directly, you can specify
+ * whether x-plane is to complete this phase or not. This allows you to do
+ * three things: draw before x-plane does (under it), draw after x-plane does
+ * (over it), or draw instead of x-plane.
+ *
+ * To draw directly, you register a callback and specify what phase you want
+ * to intercept. The plug-in manager will call you over and over to draw that
+ * phase.
+ *
+ * Direct drawing allows you to override scenery, panels, or anything. Note
+ * that you cannot assume that you are the only plug-in drawing at this
+ * phase.
+ *
+ * Window drawing provides slightly higher level functionality. With window
+ * drawing you create a window that takes up a portion of the screen. Window
+ * drawing is always two dimensional. Window drawing is front-to-back
+ * controlled; you can specify that you want your window to be brought on
+ * top, and other plug-ins may put their window on top of you. Window drawing
+ * also allows you to sign up for key presses and receive mouse clicks.
+ *
+ * There are three ways to get keystrokes:
+ *
+ * If you create a window, the window can take keyboard focus. It will then
+ * receive all keystrokes. If no window has focus, X-Plane receives
+ * keystrokes. Use this to implement typing in dialog boxes, etc. Only one
+ * window may have focus at a time; your window will be notified if it loses
+ * focus.
+ *
+ * If you need to associate key strokes with commands/functions in your
+ * plug-in, use a hot key. A hoy is a key-specific callback. Hotkeys are
+ * sent based on virtual key strokes, so any key may be distinctly mapped with
+ * any modifiers. Hot keys can be remapped by other plug-ins. As a plug-in,
+ * you don't have to worry about what your hot key ends up mapped to; other
+ * plug-ins may provide a UI for remapping keystrokes. So hotkeys allow a
+ * user to resolve conflicts and customize keystrokes.
+ *
+ * If you need low level access to the keystroke stream, install a key
+ * sniffer. Key sniffers can be installed above everything or right in front
+ * of the sim.
+ *
+ */
+
+#include "XPLMDefs.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/***************************************************************************
+ * DRAWING CALLBACKS
+ ***************************************************************************/
+/*
+ * Basic drawing callbacks, for low level intercepting of render loop. The
+ * purpose of drawing callbacks is to provide targeted additions or
+ * replacements to x-plane's graphics environment (for example, to add extra
+ * custom objects, or replace drawing of the AI aircraft). Do not assume that
+ * the drawing callbacks will be called in the order implied by the
+ * enumerations. Also do not assume that each drawing phase ends before
+ * another begins; they may be nested.
+ *
+ */
+
+
+
+/*
+ * XPLMDrawingPhase
+ *
+ * This constant indicates which part of drawing we are in. Drawing is done
+ * from the back to the front. We get a callback before or after each item.
+ * Metaphases provide access to the beginning and end of the 3d (scene) and 2d
+ * (cockpit) drawing in a manner that is independent of new phases added via
+ * x-plane implementation.
+ *
+ * WARNING: As X-Plane's scenery evolves, some drawing phases may cease to
+ * exist and new ones may be invented. If you need a particularly specific
+ * use of these codes, consult Austin and/or be prepared to revise your code
+ * as X-Plane evolves.
+ *
+ */
+enum {
+ /* This is the earliest point at which you can draw in 3-d. */
+ xplm_Phase_FirstScene = 0
+
+ /* Drawing of land and water. */
+ ,xplm_Phase_Terrain = 5
+
+ /* Drawing runways and other airport detail. */
+ ,xplm_Phase_Airports = 10
+
+ /* Drawing roads, trails, trains, etc. */
+ ,xplm_Phase_Vectors = 15
+
+ /* 3-d objects (houses, smokestacks, etc. */
+ ,xplm_Phase_Objects = 20
+
+ /* External views of airplanes, both yours and the AI aircraft. */
+ ,xplm_Phase_Airplanes = 25
+
+ /* This is the last point at which you can draw in 3-d. */
+ ,xplm_Phase_LastScene = 30
+
+ /* This is the first phase where you can draw in 2-d. */
+ ,xplm_Phase_FirstCockpit = 35
+
+ /* The non-moving parts of the aircraft panel. */
+ ,xplm_Phase_Panel = 40
+
+ /* The moving parts of the aircraft panel. */
+ ,xplm_Phase_Gauges = 45
+
+ /* Floating windows from plugins. */
+ ,xplm_Phase_Window = 50
+
+ /* The last change to draw in 2d. */
+ ,xplm_Phase_LastCockpit = 55
+
+#if defined(XPLM200)
+ /* 3-d Drawing for the local map. Use regular OpenGL coordinates to draw in *
+ * this phase. */
+ ,xplm_Phase_LocalMap3D = 100
+
+#endif /* XPLM200 */
+#if defined(XPLM200)
+ /* 2-d Drawing of text over the local map. */
+ ,xplm_Phase_LocalMap2D = 101
+
+#endif /* XPLM200 */
+#if defined(XPLM200)
+ /* Drawing of the side-profile view in the local map screen. */
+ ,xplm_Phase_LocalMapProfile = 102
+
+#endif /* XPLM200 */
+
+};
+typedef int XPLMDrawingPhase;
+
+/*
+ * XPLMDrawCallback_f
+ *
+ * This is the prototype for a low level drawing callback. You are passed in
+ * the phase and whether it is before or after. If you are before the phase,
+ * return 1 to let x-plane draw or 0 to suppress x-plane drawing. If you are
+ * after the phase the return value is ignored.
+ *
+ * Refcon is a unique value that you specify when registering the callback,
+ * allowing you to slip a pointer to your own data to the callback.
+ *
+ * Upon entry the OpenGL context will be correctly set up for you and OpenGL
+ * will be in 'local' coordinates for 3d drawing and panel coordinates for 2d
+ * drawing. The OpenGL state (texturing, etc.) will be unknown.
+ *
+ */
+typedef int (* XPLMDrawCallback_f)(
+ XPLMDrawingPhase inPhase,
+ int inIsBefore,
+ void * inRefcon);
+
+/*
+ * XPLMKeySniffer_f
+ *
+ * This is the prototype for a low level key-sniffing function. Window-based
+ * UI _should not use this_! The windowing system provides high-level
+ * mediated keyboard access. By comparison, the key sniffer provides low
+ * level keyboard access.
+ *
+ * Key sniffers are provided to allow libraries to provide non-windowed user
+ * interaction. For example, the MUI library uses a key sniffer to do pop-up
+ * text entry.
+ *
+ * inKey is the character pressed, inRefCon is a value you supply during
+ * registration. Return 1 to pass the key on to the next sniffer, the window
+ * mgr, x-plane, or whomever is down stream. Return 0 to consume the key.
+ *
+ * Warning: this API declares virtual keys as a signed character; however the
+ * VKEY #define macros in XPLMDefs.h define the vkeys using unsigned values
+ * (that is 0x80 instead of -0x80). So you may need to cast the incoming vkey
+ * to an unsigned char to get correct comparisons in C.
+ *
+ */
+typedef int (* XPLMKeySniffer_f)(
+ char inChar,
+ XPLMKeyFlags inFlags,
+ char inVirtualKey,
+ void * inRefcon);
+
+/*
+ * XPLMRegisterDrawCallback
+ *
+ * This routine registers a low level drawing callback. Pass in the phase you
+ * want to be called for and whether you want to be called before or after.
+ * This routine returns 1 if the registration was successful, or 0 if the
+ * phase does not exist in this version of x-plane. You may register a
+ * callback multiple times for the same or different phases as long as the
+ * refcon is unique each time.
+ *
+ */
+XPLM_API int XPLMRegisterDrawCallback(
+ XPLMDrawCallback_f inCallback,
+ XPLMDrawingPhase inPhase,
+ int inWantsBefore,
+ void * inRefcon);
+
+/*
+ * XPLMUnregisterDrawCallback
+ *
+ * This routine unregisters a draw callback. You must unregister a callback
+ * for each time you register a callback if you have registered it multiple
+ * times with different refcons. The routine returns 1 if it can find the
+ * callback to unregister, 0 otherwise.
+ *
+ */
+XPLM_API int XPLMUnregisterDrawCallback(
+ XPLMDrawCallback_f inCallback,
+ XPLMDrawingPhase inPhase,
+ int inWantsBefore,
+ void * inRefcon);
+
+/*
+ * XPLMRegisterKeySniffer
+ *
+ * This routine registers a key sniffing callback. You specify whether you
+ * want to sniff before the window system, or only sniff keys the window
+ * system does not consume. You should ALMOST ALWAYS sniff non-control keys
+ * after the window system. When the window system consumes a key, it is
+ * because the user has "focused" a window. Consuming the key or taking
+ * action based on the key will produce very weird results. Returns 1 if
+ * successful.
+ *
+ */
+XPLM_API int XPLMRegisterKeySniffer(
+ XPLMKeySniffer_f inCallback,
+ int inBeforeWindows,
+ void * inRefcon);
+
+/*
+ * XPLMUnregisterKeySniffer
+ *
+ * This routine unregisters a key sniffer. You must unregister a key sniffer
+ * for every time you register one with the exact same signature. Returns 1
+ * if successful.
+ *
+ */
+XPLM_API int XPLMUnregisterKeySniffer(
+ XPLMKeySniffer_f inCallback,
+ int inBeforeWindows,
+ void * inRefcon);
+
+/***************************************************************************
+ * WINDOW API
+ ***************************************************************************/
+/*
+ * Window API, for higher level drawing with UI interaction.
+ *
+ * Note: all 2-d (and thus all window drawing) is done in 'cockpit pixels'.
+ * Even when the OpenGL window contains more than 1024x768 pixels, the cockpit
+ * drawing is magnified so that only 1024x768 pixels are available.
+ *
+ */
+
+
+
+/*
+ * XPLMMouseStatus
+ *
+ * When the mouse is clicked, your mouse click routine is called repeatedly.
+ * It is first called with the mouse down message. It is then called zero or
+ * more times with the mouse-drag message, and finally it is called once with
+ * the mouse up message. All of these messages will be directed to the same
+ * window.
+ *
+ */
+enum {
+ xplm_MouseDown = 1
+
+ ,xplm_MouseDrag = 2
+
+ ,xplm_MouseUp = 3
+
+
+};
+typedef int XPLMMouseStatus;
+
+#if defined(XPLM200)
+/*
+ * XPLMCursorStatus
+ *
+ * XPLMCursorStatus describes how you would like X-Plane to manage the cursor.
+ * See XPLMHandleCursor_f for more info.
+ *
+ */
+enum {
+ /* X-Plane manages the cursor normally, plugin does not affect the cusrsor. */
+ xplm_CursorDefault = 0
+
+ /* X-Plane hides the cursor. */
+ ,xplm_CursorHidden = 1
+
+ /* X-Plane shows the cursor as the default arrow. */
+ ,xplm_CursorArrow = 2
+
+ /* X-Plane shows the cursor but lets you select an OS cursor. */
+ ,xplm_CursorCustom = 3
+
+
+};
+typedef int XPLMCursorStatus;
+#endif /* XPLM200 */
+
+/*
+ * XPLMWindowID
+ *
+ * This is an opaque identifier for a window. You use it to control your
+ * window. When you create a window, you will specify callbacks to handle
+ * drawing and mouse interaction, etc.
+ *
+ */
+typedef void * XPLMWindowID;
+
+/*
+ * XPLMDrawWindow_f
+ *
+ * This function handles drawing. You are passed in your window and its
+ * refcon. Draw the window. You can use XPLM functions to find the current
+ * dimensions of your window, etc. When this callback is called, the OpenGL
+ * context will be set properly for cockpit drawing. NOTE: Because you are
+ * drawing your window over a background, you can make a translucent window
+ * easily by simply not filling in your entire window's bounds.
+ *
+ */
+typedef void (* XPLMDrawWindow_f)(
+ XPLMWindowID inWindowID,
+ void * inRefcon);
+
+/*
+ * XPLMHandleKey_f
+ *
+ * This function is called when a key is pressed or keyboard focus is taken
+ * away from your window. If losingFocus is 1, you are losign the keyboard
+ * focus, otherwise a key was pressed and inKey contains its character. You
+ * are also passewd your window and a refcon. Warning: this API declares
+ * virtual keys as a signed character; however the VKEY #define macros in
+ * XPLMDefs.h define the vkeys using unsigned values (that is 0x80 instead of
+ * -0x80). So you may need to cast the incoming vkey to an unsigned char to
+ * get correct comparisons in C.
+ *
+ */
+typedef void (* XPLMHandleKey_f)(
+ XPLMWindowID inWindowID,
+ char inKey,
+ XPLMKeyFlags inFlags,
+ char inVirtualKey,
+ void * inRefcon,
+ int losingFocus);
+
+/*
+ * XPLMHandleMouseClick_f
+ *
+ * You receive this call when the mouse button is pressed down or released.
+ * Between then these two calls is a drag. You receive the x and y of the
+ * click, your window, and a refcon. Return 1 to consume the click, or 0 to
+ * pass it through.
+ *
+ * WARNING: passing clicks through windows (as of this writing) causes mouse
+ * tracking problems in X-Plane; do not use this feature!
+ *
+ */
+typedef int (* XPLMHandleMouseClick_f)(
+ XPLMWindowID inWindowID,
+ int x,
+ int y,
+ XPLMMouseStatus inMouse,
+ void * inRefcon);
+
+#if defined(XPLM200)
+/*
+ * XPLMHandleCursor_f
+ *
+ * The SDK calls your cursor status callback when the mouse is over your
+ * plugin window. Return a cursor status code to indicate how you would like
+ * X-Plane to manage the cursor. If you return xplm_CursorDefault, the SDK
+ * will try lower-Z-order plugin windows, then let the sim manage the cursor.
+ *
+ * Note: you should never show or hide the cursor yourself - these APIs are
+ * typically reference-counted and thus cannot safely and predictably be used
+ * by the SDK. Instead return one of xplm_CursorHidden to hide the cursor or
+ * xplm_CursorArrow/xplm_CursorCustom to show the cursor.
+ *
+ * If you want to implement a custom cursor by drawing a cursor in OpenGL, use
+ * xplm_CursorHidden to hide the OS cursor and draw the cursor using a 2-d
+ * drawing callback (after xplm_Phase_Window is probably a good choice). If
+ * you want to use a custom OS-based cursor, use xplm_CursorCustom to ask
+ * X-Plane to show the cursor but not affect its image. You can then use an
+ * OS specific call like SetThemeCursor (Mac) or SetCursor/LoadCursor
+ * (Windows).
+ *
+ */
+typedef XPLMCursorStatus (* XPLMHandleCursor_f)(
+ XPLMWindowID inWindowID,
+ int x,
+ int y,
+ void * inRefcon);
+#endif /* XPLM200 */
+
+#if defined(XPLM200)
+/*
+ * XPLMHandleMouseWheel_f
+ *
+ * The SDK calls your mouse wheel callback when one of the mouse wheels is
+ * turned within your window. Return 1 to consume the mouse wheel clicks or
+ * 0 to pass them on to a lower window. (You should consume mouse wheel
+ * clicks even if they do nothing if your window appears opaque to the user.)
+ * The number of clicks indicates how far the wheel was turned since the last
+ * callback. The wheel is 0 for the vertical axis or 1 for the horizontal axis
+ * (for OS/mouse combinations that support this).
+ *
+ */
+typedef int (* XPLMHandleMouseWheel_f)(
+ XPLMWindowID inWindowID,
+ int x,
+ int y,
+ int wheel,
+ int clicks,
+ void * inRefcon);
+#endif /* XPLM200 */
+
+#if defined(XPLM200)
+/*
+ * XPLMCreateWindow_t
+ *
+ * The XPMCreateWindow_t structure defines all of the parameters used to
+ * create a window using XPLMCreateWindowEx. The structure will be expanded
+ * in future SDK APIs to include more features. Always set the structSize
+ * member to the size of your struct in bytes!
+ *
+ */
+typedef struct {
+ int structSize;
+ int left;
+ int top;
+ int right;
+ int bottom;
+ int visible;
+ XPLMDrawWindow_f drawWindowFunc;
+ XPLMHandleMouseClick_f handleMouseClickFunc;
+ XPLMHandleKey_f handleKeyFunc;
+ XPLMHandleCursor_f handleCursorFunc;
+ XPLMHandleMouseWheel_f handleMouseWheelFunc;
+ void * refcon;
+} XPLMCreateWindow_t;
+#endif /* XPLM200 */
+
+/*
+ * XPLMGetScreenSize
+ *
+ * This routine returns the size of the size of the X-Plane OpenGL window in
+ * pixels. Please note that this is not the size of the screen when doing
+ * 2-d drawing (the 2-d screen is currently always 1024x768, and graphics are
+ * scaled up by OpenGL when doing 2-d drawing for higher-res monitors). This
+ * number can be used to get a rough idea of the amount of detail the user
+ * will be able to see when drawing in 3-d.
+ *
+ */
+XPLM_API void XPLMGetScreenSize(
+ int * outWidth, /* Can be NULL */
+ int * outHeight); /* Can be NULL */
+
+/*
+ * XPLMGetMouseLocation
+ *
+ * This routine returns the current mouse location in cockpit pixels. The
+ * bottom left corner of the display is 0,0. Pass NULL to not receive info
+ * about either parameter.
+ *
+ */
+XPLM_API void XPLMGetMouseLocation(
+ int * outX, /* Can be NULL */
+ int * outY); /* Can be NULL */
+
+/*
+ * XPLMCreateWindow
+ *
+ * This routine creates a new window. Pass in the dimensions and offsets to
+ * the window's bottom left corner from the bottom left of the screen. You
+ * can specify whether the window is initially visible or not. Also, you pass
+ * in three callbacks to run the window and a refcon. This function returns a
+ * window ID you can use to refer to the new window.
+ *
+ * NOTE: windows do not have "frames"; you are responsible for drawing the
+ * background and frame of the window. Higher level libraries have routines
+ * which make this easy.
+ *
+ */
+XPLM_API XPLMWindowID XPLMCreateWindow(
+ int inLeft,
+ int inTop,
+ int inRight,
+ int inBottom,
+ int inIsVisible,
+ XPLMDrawWindow_f inDrawCallback,
+ XPLMHandleKey_f inKeyCallback,
+ XPLMHandleMouseClick_f inMouseCallback,
+ void * inRefcon);
+
+#if defined(XPLM200)
+/*
+ * XPLMCreateWindowEx
+ *
+ * This routine creates a new window - you pass in an XPLMCreateWindow_t
+ * structure with all of the fields set in. You must set the structSize of
+ * the structure to the size of the actual structure you used. Also, you
+ * must provide funtions for every callback - you may not leave them null!
+ * (If you do not support the cursor or mouse wheel, use functions that return
+ * the default values.) The numeric values of the XPMCreateWindow_t structure
+ * correspond to the parameters of XPLMCreateWindow.
+ *
+ */
+XPLM_API XPLMWindowID XPLMCreateWindowEx(
+ XPLMCreateWindow_t * inParams);
+#endif /* XPLM200 */
+
+/*
+ * XPLMDestroyWindow
+ *
+ * This routine destroys a window. The callbacks are not called after this
+ * call. Keyboard focus is removed from the window before destroying it.
+ *
+ */
+XPLM_API void XPLMDestroyWindow(
+ XPLMWindowID inWindowID);
+
+/*
+ * XPLMGetWindowGeometry
+ *
+ * This routine returns the position and size of a window in cockpit pixels.
+ * Pass NULL to not receive any paramter.
+ *
+ */
+XPLM_API void XPLMGetWindowGeometry(
+ XPLMWindowID inWindowID,
+ int * outLeft, /* Can be NULL */
+ int * outTop, /* Can be NULL */
+ int * outRight, /* Can be NULL */
+ int * outBottom); /* Can be NULL */
+
+/*
+ * XPLMSetWindowGeometry
+ *
+ * This routine allows you to set the position or height aspects of a window.
+ *
+ */
+XPLM_API void XPLMSetWindowGeometry(
+ XPLMWindowID inWindowID,
+ int inLeft,
+ int inTop,
+ int inRight,
+ int inBottom);
+
+/*
+ * XPLMGetWindowIsVisible
+ *
+ * This routine returns whether a window is visible.
+ *
+ */
+XPLM_API int XPLMGetWindowIsVisible(
+ XPLMWindowID inWindowID);
+
+/*
+ * XPLMSetWindowIsVisible
+ *
+ * This routine shows or hides a window.
+ *
+ */
+XPLM_API void XPLMSetWindowIsVisible(
+ XPLMWindowID inWindowID,
+ int inIsVisible);
+
+/*
+ * XPLMGetWindowRefCon
+ *
+ * This routine returns a windows refcon, the unique value you can use for
+ * your own purposes.
+ *
+ */
+XPLM_API void * XPLMGetWindowRefCon(
+ XPLMWindowID inWindowID);
+
+/*
+ * XPLMSetWindowRefCon
+ *
+ * This routine sets a window's reference constant. Use this to pass data to
+ * yourself in the callbacks.
+ *
+ */
+XPLM_API void XPLMSetWindowRefCon(
+ XPLMWindowID inWindowID,
+ void * inRefcon);
+
+/*
+ * XPLMTakeKeyboardFocus
+ *
+ * This routine gives a specific window keyboard focus. Keystrokes will be
+ * sent to that window. Pass a window ID of 0 to pass keyboard strokes
+ * directly to X-Plane.
+ *
+ */
+XPLM_API void XPLMTakeKeyboardFocus(
+ XPLMWindowID inWindow);
+
+/*
+ * XPLMBringWindowToFront
+ *
+ * This routine brings the window to the front of the Z-order. Windows are
+ * brought to the front when they are created...beyond that you should make
+ * sure you are front before handling mouse clicks.
+ *
+ */
+XPLM_API void XPLMBringWindowToFront(
+ XPLMWindowID inWindow);
+
+/*
+ * XPLMIsWindowInFront
+ *
+ * This routine returns true if you pass inthe ID of the frontmost visible
+ * window.
+ *
+ */
+XPLM_API int XPLMIsWindowInFront(
+ XPLMWindowID inWindow);
+
+/***************************************************************************
+ * HOT KEYS
+ ***************************************************************************/
+/*
+ * Hot Keys - keystrokes that can be managed by others.
+ *
+ */
+
+
+
+/*
+ * XPLMHotKey_f
+ *
+ * Your hot key callback simply takes a pointer of your choosing.
+ *
+ */
+typedef void (* XPLMHotKey_f)(
+ void * inRefcon);
+
+/*
+ * XPLMHotKeyID
+ *
+ * Hot keys are identified by opaque IDs.
+ *
+ */
+typedef void * XPLMHotKeyID;
+
+/*
+ * XPLMRegisterHotKey
+ *
+ * This routine registers a hot key. You specify your preferred key stroke
+ * virtual key/flag combination, a description of what your callback does (so
+ * other plug-ins can describe the plug-in to the user for remapping) and a
+ * callback function and opaque pointer to pass in). A new hot key ID is
+ * returned. During execution, the actual key associated with your hot key
+ * may change, but you are insulated from this.
+ *
+ */
+XPLM_API XPLMHotKeyID XPLMRegisterHotKey(
+ char inVirtualKey,
+ XPLMKeyFlags inFlags,
+ const char * inDescription,
+ XPLMHotKey_f inCallback,
+ void * inRefcon);
+
+/*
+ * XPLMUnregisterHotKey
+ *
+ * This API unregisters a hot key. You can only register your own hot keys.
+ *
+ */
+XPLM_API void XPLMUnregisterHotKey(
+ XPLMHotKeyID inHotKey);
+
+/*
+ * XPLMCountHotKeys
+ *
+ * Returns the number of current hot keys.
+ *
+ */
+XPLM_API int XPLMCountHotKeys(void);
+
+/*
+ * XPLMGetNthHotKey
+ *
+ * Returns a hot key by index, for iteration on all hot keys.
+ *
+ */
+XPLM_API XPLMHotKeyID XPLMGetNthHotKey(
+ int inIndex);
+
+/*
+ * XPLMGetHotKeyInfo
+ *
+ * Returns information about the hot key. Return NULL for any parameter you
+ * don't want info about. The description should be at least 512 chars long.
+ *
+ */
+XPLM_API void XPLMGetHotKeyInfo(
+ XPLMHotKeyID inHotKey,
+ char * outVirtualKey, /* Can be NULL */
+ XPLMKeyFlags * outFlags, /* Can be NULL */
+ char * outDescription, /* Can be NULL */
+ XPLMPluginID * outPlugin); /* Can be NULL */
+
+/*
+ * XPLMSetHotKeyCombination
+ *
+ * XPLMSetHotKeyCombination remaps a hot keys keystrokes. You may remap
+ * another plugin's keystrokes.
+ *
+ */
+XPLM_API void XPLMSetHotKeyCombination(
+ XPLMHotKeyID inHotKey,
+ char inVirtualKey,
+ XPLMKeyFlags inFlags);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/X-Plane-SDK/CHeaders/XPLM/XPLMGraphics.h b/X-Plane-SDK/CHeaders/XPLM/XPLMGraphics.h
new file mode 100755
index 0000000..e27bb5b
--- /dev/null
+++ b/X-Plane-SDK/CHeaders/XPLM/XPLMGraphics.h
@@ -0,0 +1,408 @@
+#ifndef _XPLMGraphics_h_
+#define _XPLMGraphics_h_
+
+/*
+ * Copyright 2005-2012 Sandy Barbour and Ben Supnik
+ *
+ * All rights reserved. See license.txt for usage.
+ *
+ * X-Plane SDK Version: 2.1.1
+ *
+ */
+
+/*
+ * Graphics routines for X-Plane and OpenGL.
+ *
+ * A few notes on coordinate systems:
+ *
+ * X-Plane uses three kinds of coordinates. Global coordinates are specified
+ * as latitude, longitude and elevation. This coordinate system never changes
+ * but is not very precise.
+ *
+ * OpenGL (or 'local') coordinates are cartesian and shift with the plane.
+ * They offer more precision and are used for 3-d OpenGL drawing. The X axis
+ * is aligned east-west with positive X meaning east. The Y axis is aligned
+ * straight up and down at the point 0,0,0 (but since the earth is round it is
+ * not truly straight up and down at other points). The Z axis is aligned
+ * north-south at 0, 0, 0 with positive Z pointing south (but since the earth
+ * is round it isn't exactly north-south as you move east or west of 0, 0, 0).
+ * One unit is one meter and the point 0,0,0 is on the surface of the earth
+ * at sea level for some latitude and longitude picked by the sim such that
+ * the user's aircraft is reasonably nearby.
+ *
+ * Cockpit coordinates are 2d, with the X axis horizontal and the Y axis
+ * vertical. The point 0,0 is the bottom left and 1024,768 is the upper right
+ * of the screen. This is true no matter what resolution the user's monitor is
+ * in; when running in higher resolution, graphics will be scaled.
+ *
+ * Use X-Plane's routines to convert between global and local coordinates. Do
+ * not attempt to do this conversion yourself; the precise 'roundness' of
+ * X-Plane's physics model may not match your own, and (to make things
+ * weirder) the user can potentially customize the physics of the current
+ * planet.
+ *
+ */
+
+#include "XPLMDefs.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/***************************************************************************
+ * X-PLANE GRAPHICS
+ ***************************************************************************/
+/*
+ * These routines allow you to use OpenGL with X-Plane.
+ *
+ */
+
+
+
+/*
+ * XPLMTextureID
+ *
+ * XPLM Texture IDs name well-known textures in the sim for you to use. This
+ * allows you to recycle textures from X-Plane, saving VRAM.
+ *
+ */
+enum {
+ /* The bitmap that contains window outlines, button outlines, fonts, etc. */
+ xplm_Tex_GeneralInterface = 0
+
+ /* The exterior paint for the user's aircraft (daytime). */
+ ,xplm_Tex_AircraftPaint = 1
+
+ /* The exterior light map for the user's aircraft. */
+ ,xplm_Tex_AircraftLiteMap = 2
+
+
+};
+typedef int XPLMTextureID;
+
+/*
+ * XPLMSetGraphicsState
+ *
+ * XPLMSetGraphicsState changes OpenGL's graphics state in a number of ways:
+ *
+ * inEnableFog - enables or disables fog, equivalent to: glEnable(GL_FOG);
+ *
+ * inNumberTexUnits - enables or disables a number of multitexturing units. If
+ * the number is 0, 2d texturing is disabled entirely, as in
+ * glDisable(GL_TEXTURE_2D); Otherwise, 2d texturing is enabled, and a
+ * number of multitexturing units are enabled sequentially, starting with
+ * unit 0, e.g. glActiveTextureARB(GL_TEXTURE0_ARB); glEnable
+ * (GL_TEXTURE_2D);
+ *
+ * inEnableLighting - enables or disables OpenGL lighting, e.g.
+ * glEnable(GL_LIGHTING); glEnable(GL_LIGHT0);
+ *
+ * inEnableAlphaTesting - enables or disables the alpha test per pixel, e.g.
+ * glEnable(GL_ALPHA_TEST);
+ *
+ * inEnableAlphaBlending - enables or disables alpha blending per pixel, e.g.
+ * glEnable(GL_BLEND);
+ *
+ * inEnableDepthTesting - enables per pixel depth testing, as in
+ * glEnable(GL_DEPTH_TEST);
+ *
+ * inEnableDepthWriting - enables writing back of depth information to the
+ * depth bufffer, as in glDepthMask(GL_TRUE);
+ *
+ * The purpose of this function is to change OpenGL state while keeping
+ * X-Plane aware of the state changes; this keeps X-Plane from getting
+ * surprised by OGL state changes, and prevents X-Plane and plug-ins from
+ * having to set all state before all draws; XPLMSetGraphicsState internally
+ * skips calls to change state that is already properly enabled.
+ *
+ * X-Plane does not have a 'default' OGL state to plug-ins; plug-ins should
+ * totally set OGL state before drawing. Use XPLMSetGraphicsState instead of
+ * any of the above OpenGL calls.
+ *
+ * WARNING: Any routine that performs drawing (e.g. XPLMDrawString or widget
+ * code) may change X-Plane's state. Always set state before drawing after
+ * unknown code has executed.
+ *
+ */
+XPLM_API void XPLMSetGraphicsState(
+ int inEnableFog,
+ int inNumberTexUnits,
+ int inEnableLighting,
+ int inEnableAlphaTesting,
+ int inEnableAlphaBlending,
+ int inEnableDepthTesting,
+ int inEnableDepthWriting);
+
+/*
+ * XPLMBindTexture2d
+ *
+ * XPLMBindTexture2d changes what texture is bound to the 2d texturing target.
+ * This routine caches the current 2d texture across all texturing units in
+ * the sim and plug-ins, preventing extraneous binding. For example, consider
+ * several plug-ins running in series; if they all use the 'general interface'
+ * bitmap to do UI, calling this function will skip the rebinding of the
+ * general interface texture on all but the first plug-in, which can provide
+ * better frame rate son some graphics cards.
+ *
+ * inTextureID is the ID of the texture object to bind; inTextureUnit is a
+ * zero-based texture unit (e.g. 0 for the first one), up to a maximum of 4
+ * units. (This number may increase in future versions of x-plane.)
+ *
+ * Use this routine instead of glBindTexture(GL_TEXTURE_2D, ....);
+ *
+ */
+XPLM_API void XPLMBindTexture2d(
+ int inTextureNum,
+ int inTextureUnit);
+
+/*
+ * XPLMGenerateTextureNumbers
+ *
+ * This routine generates unused texture numbers that a plug-in can use to
+ * safely bind textures. Use this routine instead of glGenTextures;
+ * glGenTextures will allocate texture numbers in ranges that X-Plane reserves
+ * for its own use but does not always use; for example, it might provide an
+ * ID within the range of textures reserved for terrain...loading a new .env
+ * file as the plane flies might then cause X-Plane to use this texture ID.
+ * X-Plane will then overwrite the plug-ins texture. This routine returns
+ * texture IDs that are out of X-Plane's usage range.
+ *
+ */
+XPLM_API void XPLMGenerateTextureNumbers(
+ int * outTextureIDs,
+ int inCount);
+
+/*
+ * XPLMGetTexture
+ *
+ * XPLMGetTexture returns the OpenGL texture enumeration of an X-Plane texture
+ * based on a generic identifying code. For example, you can get the texture
+ * for X-Plane's UI bitmaps. This allows you to build new gauges that take
+ * advantage of x-plane's textures, for smooth artwork integration and also
+ * saving texture memory. Note that the texture might not be loaded yet,
+ * depending on what the plane's panel contains.
+ *
+ * OPEN ISSUE: We really need a way to make sure X-Plane loads this texture if
+ * it isn't around, or at least a way to find out whether it is loaded or not.
+ *
+ */
+XPLM_API int XPLMGetTexture(
+ XPLMTextureID inTexture);
+
+/*
+ * XPLMWorldToLocal
+ *
+ * This routine translates coordinates from latitude, longitude, and altitude
+ * to local scene coordinates. Latitude and longitude are in decimal degrees,
+ * and altitude is in meters MSL (mean sea level). The XYZ coordinates are in
+ * meters in the local OpenGL coordinate system.
+ *
+ */
+XPLM_API void XPLMWorldToLocal(
+ double inLatitude,
+ double inLongitude,
+ double inAltitude,
+ double * outX,
+ double * outY,
+ double * outZ);
+
+/*
+ * XPLMLocalToWorld
+ *
+ * This routine translates a local coordinate triplet back into latitude,
+ * longitude, and altitude. Latitude and longitude are in decimal degrees,
+ * and altitude is in meters MSL (mean sea level). The XYZ coordinates are in
+ * meters in the local OpenGL coordinate system.
+ *
+ * NOTE: world coordinates are less precise than local coordinates; you should
+ * try to avoid round tripping from local to world and back.
+ *
+ */
+XPLM_API void XPLMLocalToWorld(
+ double inX,
+ double inY,
+ double inZ,
+ double * outLatitude,
+ double * outLongitude,
+ double * outAltitude);
+
+/*
+ * XPLMDrawTranslucentDarkBox
+ *
+ * This routine draws a translucent dark box, partially obscuring parts of the
+ * screen but making text easy to read. This is the same graphics primitive
+ * used by X-Plane to show text files and ATC info.
+ *
+ */
+XPLM_API void XPLMDrawTranslucentDarkBox(
+ int inLeft,
+ int inTop,
+ int inRight,
+ int inBottom);
+
+/***************************************************************************
+ * X-PLANE TEXT
+ ***************************************************************************/
+/*
+ *
+ *
+ */
+
+
+
+/*
+ * XPLMFontID
+ *
+ * X-Plane features some fixed-character fonts. Each font may have its own
+ * metrics.
+ *
+ * WARNING: Some of these fonts are no longer supported or may have changed
+ * geometries. For maximum copmatibility, see the comments below.
+ *
+ * Note: X-Plane 7 supports proportional-spaced fonts. Since no measuring
+ * routine is available yet, the SDK will normally draw using a fixed-width
+ * font. You can use a dataref to enable proportional font drawing on XP7 if
+ * you want to.
+ *
+ */
+enum {
+ /* Mono-spaced font for user interface. Available in all versions of the SDK. */
+ xplmFont_Basic = 0
+
+ /* Deprecated, do not use. */
+ ,xplmFont_Menus = 1
+
+ /* Deprecated, do not use. */
+ ,xplmFont_Metal = 2
+
+ /* Deprecated, do not use. */
+ ,xplmFont_Led = 3
+
+ /* Deprecated, do not use. */
+ ,xplmFont_LedWide = 4
+
+ /* Deprecated, do not use. */
+ ,xplmFont_PanelHUD = 5
+
+ /* Deprecated, do not use. */
+ ,xplmFont_PanelEFIS = 6
+
+ /* Deprecated, do not use. */
+ ,xplmFont_PanelGPS = 7
+
+ /* Deprecated, do not use. */
+ ,xplmFont_RadiosGA = 8
+
+ /* Deprecated, do not use. */
+ ,xplmFont_RadiosBC = 9
+
+ /* Deprecated, do not use. */
+ ,xplmFont_RadiosHM = 10
+
+ /* Deprecated, do not use. */
+ ,xplmFont_RadiosGANarrow = 11
+
+ /* Deprecated, do not use. */
+ ,xplmFont_RadiosBCNarrow = 12
+
+ /* Deprecated, do not use. */
+ ,xplmFont_RadiosHMNarrow = 13
+
+ /* Deprecated, do not use. */
+ ,xplmFont_Timer = 14
+
+ /* Deprecated, do not use. */
+ ,xplmFont_FullRound = 15
+
+ /* Deprecated, do not use. */
+ ,xplmFont_SmallRound = 16
+
+ /* Deprecated, do not use. */
+ ,xplmFont_Menus_Localized = 17
+
+#if defined(XPLM200)
+ /* Proportional UI font. */
+ ,xplmFont_Proportional = 18
+
+#endif /* XPLM200 */
+
+};
+typedef int XPLMFontID;
+
+/*
+ * XPLMDrawString
+ *
+ * This routine draws a NULL termianted string in a given font. Pass in the
+ * lower left pixel that the character is to be drawn onto. Also pass the
+ * character and font ID. This function returns the x offset plus the width of
+ * all drawn characters. The color to draw in is specified as a pointer to an
+ * array of three floating point colors, representing RGB intensities from 0.0
+ * to 1.0.
+ *
+ */
+XPLM_API void XPLMDrawString(
+ float * inColorRGB,
+ int inXOffset,
+ int inYOffset,
+ char * inChar,
+ int * inWordWrapWidth, /* Can be NULL */
+ XPLMFontID inFontID);
+
+/*
+ * XPLMDrawNumber
+ *
+ * This routine draws a number similar to the digit editing fields in
+ * PlaneMaker and data output display in X-Plane. Pass in a color, a
+ * position, a floating point value, and formatting info. Specify how many
+ * integer and how many decimal digits to show and whether to show a sign, as
+ * well as a character set. This routine returns the xOffset plus width of the
+ * string drawn.
+ *
+ */
+XPLM_API void XPLMDrawNumber(
+ float * inColorRGB,
+ int inXOffset,
+ int inYOffset,
+ double inValue,
+ int inDigits,
+ int inDecimals,
+ int inShowSign,
+ XPLMFontID inFontID);
+
+/*
+ * XPLMGetFontDimensions
+ *
+ * This routine returns the width and height of a character in a given font.
+ * It also tells you if the font only supports numeric digits. Pass NULL if
+ * you don't need a given field. Note that for a proportional font the width
+ * will be an arbitrary, hopefully average width.
+ *
+ */
+XPLM_API void XPLMGetFontDimensions(
+ XPLMFontID inFontID,
+ int * outCharWidth, /* Can be NULL */
+ int * outCharHeight, /* Can be NULL */
+ int * outDigitsOnly); /* Can be NULL */
+
+#if defined(XPLM200)
+/*
+ * XPLMMeasureString
+ *
+ * This routine returns the width in pixels of a string using a given font.
+ * The string is passed as a pointer plus length (and does not need to be null
+ * terminated); this is used to allow for measuring substrings. The return
+ * value is floating point; it is possible that future font drawing may allow
+ * for fractional pixels.
+ *
+ */
+XPLM_API float XPLMMeasureString(
+ XPLMFontID inFontID,
+ const char * inChar,
+ int inNumChars);
+#endif /* XPLM200 */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/X-Plane-SDK/CHeaders/XPLM/XPLMMenus.h b/X-Plane-SDK/CHeaders/XPLM/XPLMMenus.h
new file mode 100755
index 0000000..630a66a
--- /dev/null
+++ b/X-Plane-SDK/CHeaders/XPLM/XPLMMenus.h
@@ -0,0 +1,225 @@
+#ifndef _XPLMMenus_h_
+#define _XPLMMenus_h_
+
+/*
+ * Copyright 2005-2012 Sandy Barbour and Ben Supnik
+ *
+ * All rights reserved. See license.txt for usage.
+ *
+ * X-Plane SDK Version: 2.1.1
+ *
+ */
+
+/*
+ * XPLMMenus - Theory of Operation
+ *
+ * Plug-ins can create menus in the menu bar of X-Plane. This is done by
+ * creating a menu and then creating items. Menus are referred to by an
+ * opaque ID. Items are referred to by index number. For each menu and item
+ * you specify a void *. Per menu you specify a handler function that is
+ * called with each void * when the menu item is picked. Menu item indices
+ * are zero based.
+ *
+ */
+
+#include "XPLMDefs.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/***************************************************************************
+ * XPLM MENUS
+ ***************************************************************************/
+/*
+ *
+ *
+ */
+
+
+
+/*
+ * XPLMMenuCheck
+ *
+ * These enumerations define the various 'check' states for an X-Plane menu.
+ * 'checking' in x-plane actually appears as a light which may or may not be
+ * lit. So there are three possible states.
+ *
+ */
+enum {
+ /* there is no symbol to the left of the menu item. */
+ xplm_Menu_NoCheck = 0
+
+ /* the menu has a mark next to it that is unmarked (not lit). */
+ ,xplm_Menu_Unchecked = 1
+
+ /* the menu has a mark next to it that is checked (lit). */
+ ,xplm_Menu_Checked = 2
+
+
+};
+typedef int XPLMMenuCheck;
+
+/*
+ * XPLMMenuID
+ *
+ * This is a unique ID for each menu you create.
+ *
+ */
+typedef void * XPLMMenuID;
+
+/*
+ * XPLMMenuHandler_f
+ *
+ * A menu handler function takes two reference pointers, one for the menu
+ * (specified when the menu was created) and one for the item (specified when
+ * the item was created).
+ *
+ */
+typedef void (* XPLMMenuHandler_f)(
+ void * inMenuRef,
+ void * inItemRef);
+
+/*
+ * XPLMFindPluginsMenu
+ *
+ * This function returns the ID of the plug-ins menu, which is created for you
+ * at startup.
+ *
+ */
+XPLM_API XPLMMenuID XPLMFindPluginsMenu(void);
+
+/*
+ * XPLMCreateMenu
+ *
+ * This function creates a new menu and returns its ID. It returns NULL if
+ * the menu cannot be created. Pass in a parent menu ID and an item index to
+ * create a submenu, or NULL for the parent menu to put the menu in the menu
+ * bar. The menu's name is only used if the menu is in the menubar. You also
+ * pass a handler function and a menu reference value. Pass NULL for the
+ * handler if you do not need callbacks from the menu (for example, if it only
+ * contains submenus).
+ *
+ * Important: you must pass a valid, non-empty menu title even if the menu is
+ * a submenu where the title is not visible.
+ *
+ */
+XPLM_API XPLMMenuID XPLMCreateMenu(
+ const char * inName,
+ XPLMMenuID inParentMenu,
+ int inParentItem,
+ XPLMMenuHandler_f inHandler,
+ void * inMenuRef);
+
+/*
+ * XPLMDestroyMenu
+ *
+ * This function destroys a menu that you have created. Use this to remove a
+ * submenu if necessary. (Normally this function will not be necessary.)
+ *
+ */
+XPLM_API void XPLMDestroyMenu(
+ XPLMMenuID inMenuID);
+
+/*
+ * XPLMClearAllMenuItems
+ *
+ * This function removes all menu items from a menu, allowing you to rebuild
+ * it. Use this function if you need to change the number of items on a menu.
+ *
+ */
+XPLM_API void XPLMClearAllMenuItems(
+ XPLMMenuID inMenuID);
+
+/*
+ * XPLMAppendMenuItem
+ *
+ * This routine appends a new menu item to the bottom of a menu and returns
+ * its index. Pass in the menu to add the item to, the items name, and a void
+ * * ref for this item. If you pass in inForceEnglish, this menu item will be
+ * drawn using the english character set no matter what language x-plane is
+ * running in. Otherwise the menu item will be drawn localized. (An example
+ * of why you'd want to do this is for a proper name.) See XPLMUtilities for
+ * determining the current langauge.
+ *
+ */
+XPLM_API int XPLMAppendMenuItem(
+ XPLMMenuID inMenu,
+ const char * inItemName,
+ void * inItemRef,
+ int inForceEnglish);
+
+/*
+ * XPLMAppendMenuSeparator
+ *
+ * This routine adds a seperator to the end of a menu.
+ *
+ */
+XPLM_API void XPLMAppendMenuSeparator(
+ XPLMMenuID inMenu);
+
+/*
+ * XPLMSetMenuItemName
+ *
+ * This routine changes the name of an existing menu item. Pass in the menu
+ * ID and the index of the menu item.
+ *
+ */
+XPLM_API void XPLMSetMenuItemName(
+ XPLMMenuID inMenu,
+ int inIndex,
+ const char * inItemName,
+ int inForceEnglish);
+
+/*
+ * XPLMCheckMenuItem
+ *
+ * Set whether a menu item is checked. Pass in the menu ID and item index.
+ *
+ */
+XPLM_API void XPLMCheckMenuItem(
+ XPLMMenuID inMenu,
+ int index,
+ XPLMMenuCheck inCheck);
+
+/*
+ * XPLMCheckMenuItemState
+ *
+ * This routine returns whether a menu item is checked or not. A menu item's
+ * check mark may be on or off, or a menu may not have an icon at all.
+ *
+ */
+XPLM_API void XPLMCheckMenuItemState(
+ XPLMMenuID inMenu,
+ int index,
+ XPLMMenuCheck * outCheck);
+
+/*
+ * XPLMEnableMenuItem
+ *
+ * Sets whether this menu item is enabled. Items start out enabled.
+ *
+ */
+XPLM_API void XPLMEnableMenuItem(
+ XPLMMenuID inMenu,
+ int index,
+ int enabled);
+
+#if defined(XPLM210)
+/*
+ * XPLMRemoveMenuItem
+ *
+ * Removes one item from a menu. Note that all menu items below are moved up
+ * one; your plugin must track the change in index numbers.
+ *
+ */
+XPLM_API void XPLMRemoveMenuItem(
+ XPLMMenuID inMenu,
+ int inIndex);
+#endif /* XPLM210 */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/X-Plane-SDK/CHeaders/XPLM/XPLMNavigation.h b/X-Plane-SDK/CHeaders/XPLM/XPLMNavigation.h
new file mode 100755
index 0000000..5e08705
--- /dev/null
+++ b/X-Plane-SDK/CHeaders/XPLM/XPLMNavigation.h
@@ -0,0 +1,376 @@
+#ifndef _XPLMNavigation_h_
+#define _XPLMNavigation_h_
+
+/*
+ * Copyright 2005-2012 Sandy Barbour and Ben Supnik
+ *
+ * All rights reserved. See license.txt for usage.
+ *
+ * X-Plane SDK Version: 2.1.1
+ *
+ */
+
+/*
+ * XPLMNavigation - THEORY OF OPERATION
+ *
+ * The XPLM Navigation APIs give you some access to the navigation databases
+ * inside X-Plane. X-Plane stores all navigation information in RAM, so by
+ * using these APIs you can gain access to most information without having to
+ * go to disk or parse the files yourself.
+ *
+ * You can also use this API to program the FMS. You must use the navigation
+ * APIs to find the nav-aids you want to program into the FMS, since the FMS
+ * is powered internally by x-plane's navigation database.
+ *
+ */
+
+#include "XPLMDefs.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/***************************************************************************
+ * NAVIGATION DATABASE ACCESS
+ ***************************************************************************/
+/*
+ *
+ *
+ */
+
+
+
+/*
+ * XPLMNavType
+ *
+ * These enumerations define the different types of navaids. They are each
+ * defined with a separate bit so that they may be bit-wise added together to
+ * form sets of nav-aid types.
+ *
+ * NOTE: xplm_Nav_LatLon is a specific lat-lon coordinate entered into the
+ * FMS. It will not exist in the database, and cannot be programmed into the
+ * FMS. Querying the FMS for navaids will return it. Use
+ * XPLMSetFMSEntryLatLon to set a lat/lon waypoint.
+ *
+ */
+enum {
+ xplm_Nav_Unknown = 0
+
+ ,xplm_Nav_Airport = 1
+
+ ,xplm_Nav_NDB = 2
+
+ ,xplm_Nav_VOR = 4
+
+ ,xplm_Nav_ILS = 8
+
+ ,xplm_Nav_Localizer = 16
+
+ ,xplm_Nav_GlideSlope = 32
+
+ ,xplm_Nav_OuterMarker = 64
+
+ ,xplm_Nav_MiddleMarker = 128
+
+ ,xplm_Nav_InnerMarker = 256
+
+ ,xplm_Nav_Fix = 512
+
+ ,xplm_Nav_DME = 1024
+
+ ,xplm_Nav_LatLon = 2048
+
+
+};
+typedef int XPLMNavType;
+
+/*
+ * XPLMNavRef
+ *
+ * XPLMNavRef is an iterator into the navigation database. The navigation
+ * database is essentially an array, but it is not necessarily densely
+ * populated. The only assumption you can safely make is that like-typed
+ * nav-aids are grouped together.
+ *
+ * Use XPLMNavRef to refer to a nav-aid.
+ *
+ * XPLM_NAV_NOT_FOUND is returned by functions that return an XPLMNavRef when
+ * the iterator must be invalid.
+ *
+ */
+typedef int XPLMNavRef;
+
+#define XPLM_NAV_NOT_FOUND -1
+
+/*
+ * XPLMGetFirstNavAid
+ *
+ * This returns the very first navaid in the database. Use this to traverse
+ * the entire database. Returns XPLM_NAV_NOT_FOUND if the nav database is
+ * empty.
+ *
+ */
+XPLM_API XPLMNavRef XPLMGetFirstNavAid(void);
+
+/*
+ * XPLMGetNextNavAid
+ *
+ * Given a nav aid ref, this routine returns the next navaid. It returns
+ * XPLM_NAV_NOT_FOUND if the nav aid passed in was invalid or if the navaid
+ * passed in was the last one in the database. Use this routine to iterate
+ * across all like-typed navaids or the entire database.
+ *
+ * WARNING: due to a bug in the SDK, when fix loading is disabled in the
+ * rendering settings screen, calling this routine with the last airport
+ * returns a bogus nav aid. Using this nav aid can crash x-plane.
+ *
+ */
+XPLM_API XPLMNavRef XPLMGetNextNavAid(
+ XPLMNavRef inNavAidRef);
+
+/*
+ * XPLMFindFirstNavAidOfType
+ *
+ * This routine returns the ref of the first navaid of the given type in the
+ * database or XPLM_NAV_NOT_FOUND if there are no navaids of that type in the
+ * database. You must pass exactly one nav aid type to this routine.
+ *
+ * WARNING: due to a bug in the SDK, when fix loading is disabled in the
+ * rendering settings screen, calling this routine with fixes returns a bogus
+ * nav aid. Using this nav aid can crash x-plane.
+ *
+ */
+XPLM_API XPLMNavRef XPLMFindFirstNavAidOfType(
+ XPLMNavType inType);
+
+/*
+ * XPLMFindLastNavAidOfType
+ *
+ * This routine returns the ref of the last navaid of the given type in the
+ * database or XPLM_NAV_NOT_FOUND if there are no navaids of that type in the
+ * database. You must pass exactly one nav aid type to this routine.
+ *
+ * WARNING: due to a bug in the SDK, when fix loading is disabled in the
+ * rendering settings screen, calling this routine with fixes returns a bogus
+ * nav aid. Using this nav aid can crash x-plane.
+ *
+ */
+XPLM_API XPLMNavRef XPLMFindLastNavAidOfType(
+ XPLMNavType inType);
+
+/*
+ * XPLMFindNavAid
+ *
+ * This routine provides a number of searching capabilities for the nav
+ * database. XPLMFindNavAid will search through every nav aid whose type is
+ * within inType (multiple types may be added together) and return any
+ * nav-aids found based on the following rules:
+ *
+ * If inLat and inLon are not NULL, the navaid nearest to that lat/lon will be
+ * returned, otherwise the last navaid found will be returned.
+ *
+ * If inFrequency is not NULL, then any navaids considered must match this
+ * frequency. Note that this will screen out radio beacons that do not have
+ * frequency data published (like inner markers) but not fixes and airports.
+ *
+ * If inNameFragment is not NULL, only navaids that contain the fragment in
+ * their name will be returned.
+ *
+ * If inIDFragment is not NULL, only navaids that contain the fragment in
+ * their IDs will be returned.
+ *
+ * This routine provides a simple way to do a number of useful searches:
+ *
+ * Find the nearest navaid on this frequency. Find the nearest airport. Find
+ * the VOR whose ID is "KBOS". Find the nearest airport whose name contains
+ * "Chicago".
+ *
+ */
+XPLM_API XPLMNavRef XPLMFindNavAid(
+ const char * inNameFragment, /* Can be NULL */
+ const char * inIDFragment, /* Can be NULL */
+ float * inLat, /* Can be NULL */
+ float * inLon, /* Can be NULL */
+ int * inFrequency, /* Can be NULL */
+ XPLMNavType inType);
+
+/*
+ * XPLMGetNavAidInfo
+ *
+ * This routine returns information about a navaid. Any non-null field is
+ * filled out with information if it is available.
+ *
+ * Frequencies are in the nav.dat convention as described in the X-Plane nav
+ * database FAQ: NDB frequencies are exact, all others are multiplied by 100.
+ *
+ * The buffer for IDs should be at least 6 chars and the buffer for names
+ * should be at least 41 chars, but since these values are likely to go up, I
+ * recommend passing at least 32 chars for IDs and 256 chars for names when
+ * possible.
+ *
+ * The outReg parameter tells if the navaid is within the local "region" of
+ * loaded DSFs. (This information may not be particularly useful to plugins.)
+ * The parameter is a single byte value 1 for true or 0 for false, not a C
+ * string.
+ *
+ */
+XPLM_API void XPLMGetNavAidInfo(
+ XPLMNavRef inRef,
+ XPLMNavType * outType, /* Can be NULL */
+ float * outLatitude, /* Can be NULL */
+ float * outLongitude, /* Can be NULL */
+ float * outHeight, /* Can be NULL */
+ int * outFrequency, /* Can be NULL */
+ float * outHeading, /* Can be NULL */
+ char * outID, /* Can be NULL */
+ char * outName, /* Can be NULL */
+ char * outReg); /* Can be NULL */
+
+/***************************************************************************
+ * FLIGHT MANAGEMENT COMPUTER
+ ***************************************************************************/
+/*
+ * Note: the FMS works based on an array of entries. Indices into the array
+ * are zero-based. Each entry is a nav-aid plus an altitude. The FMS tracks
+ * the currently displayed entry and the entry that it is flying to.
+ *
+ * The FMS must be programmed with contiguous entries, so clearing an entry at
+ * the end shortens the effective flight plan. There is a max of 100
+ * waypoints in the flight plan.
+ *
+ */
+
+
+
+/*
+ * XPLMCountFMSEntries
+ *
+ * This routine returns the number of entries in the FMS.
+ *
+ */
+XPLM_API int XPLMCountFMSEntries(void);
+
+/*
+ * XPLMGetDisplayedFMSEntry
+ *
+ * This routine returns the index of the entry the pilot is viewing.
+ *
+ */
+XPLM_API int XPLMGetDisplayedFMSEntry(void);
+
+/*
+ * XPLMGetDestinationFMSEntry
+ *
+ * This routine returns the index of the entry the FMS is flying to.
+ *
+ */
+XPLM_API int XPLMGetDestinationFMSEntry(void);
+
+/*
+ * XPLMSetDisplayedFMSEntry
+ *
+ * This routine changes which entry the FMS is showing to the index specified.
+ * *
+ */
+XPLM_API void XPLMSetDisplayedFMSEntry(
+ int inIndex);
+
+/*
+ * XPLMSetDestinationFMSEntry
+ *
+ * This routine changes which entry the FMS is flying the aircraft toward.
+ *
+ */
+XPLM_API void XPLMSetDestinationFMSEntry(
+ int inIndex);
+
+/*
+ * XPLMGetFMSEntryInfo
+ *
+ * This routine returns information about a given FMS entry. A reference to a
+ * navaid can be returned allowing you to find additional information (such as
+ * a frequency, ILS heading, name, etc.). Some information is available
+ * immediately. For a lat/lon entry, the lat/lon is returned by this routine
+ * but the navaid cannot be looked up (and the reference will be
+ * XPLM_NAV_NOT_FOUND. FMS name entry buffers should be at least 256 chars in
+ * length.
+ *
+ */
+XPLM_API void XPLMGetFMSEntryInfo(
+ int inIndex,
+ XPLMNavType * outType, /* Can be NULL */
+ char * outID, /* Can be NULL */
+ XPLMNavRef * outRef, /* Can be NULL */
+ int * outAltitude, /* Can be NULL */
+ float * outLat, /* Can be NULL */
+ float * outLon); /* Can be NULL */
+
+/*
+ * XPLMSetFMSEntryInfo
+ *
+ * This routine changes an entry in the FMS to have the destination navaid
+ * passed in and the altitude specified. Use this only for airports, fixes,
+ * and radio-beacon navaids. Currently of radio beacons, the FMS can only
+ * support VORs and NDBs. Use the routines below to clear or fly to a lat/lon.
+ *
+ */
+XPLM_API void XPLMSetFMSEntryInfo(
+ int inIndex,
+ XPLMNavRef inRef,
+ int inAltitude);
+
+/*
+ * XPLMSetFMSEntryLatLon
+ *
+ * This routine changes the entry in the FMS to a lat/lon entry with the given
+ * coordinates.
+ *
+ */
+XPLM_API void XPLMSetFMSEntryLatLon(
+ int inIndex,
+ float inLat,
+ float inLon,
+ int inAltitude);
+
+/*
+ * XPLMClearFMSEntry
+ *
+ * This routine clears the given entry, potentially shortening the flight
+ * plan.
+ *
+ */
+XPLM_API void XPLMClearFMSEntry(
+ int inIndex);
+
+/***************************************************************************
+ * GPS RECEIVER
+ ***************************************************************************/
+/*
+ * These APIs let you read data from the GPS unit.
+ *
+ */
+
+
+
+/*
+ * XPLMGetGPSDestinationType
+ *
+ * This routine returns the type of the currently selected GPS destination,
+ * one of fix, airport, VOR or NDB.
+ *
+ */
+XPLM_API XPLMNavType XPLMGetGPSDestinationType(void);
+
+/*
+ * XPLMGetGPSDestination
+ *
+ * This routine returns the current GPS destination.
+ *
+ */
+XPLM_API XPLMNavRef XPLMGetGPSDestination(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/X-Plane-SDK/CHeaders/XPLM/XPLMPlanes.h b/X-Plane-SDK/CHeaders/XPLM/XPLMPlanes.h
new file mode 100755
index 0000000..cbc58f4
--- /dev/null
+++ b/X-Plane-SDK/CHeaders/XPLM/XPLMPlanes.h
@@ -0,0 +1,258 @@
+#ifndef _XPLMPlanes_h_
+#define _XPLMPlanes_h_
+
+/*
+ * Copyright 2005-2012 Sandy Barbour and Ben Supnik
+ *
+ * All rights reserved. See license.txt for usage.
+ *
+ * X-Plane SDK Version: 2.1.1
+ *
+ */
+
+/*
+ * The XPLMPlanes APIs allow you to control the various aircraft in x-plane,
+ * both the user's and the sim's.
+ *
+ */
+
+#include "XPLMDefs.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/***************************************************************************
+ * USER AIRCRAFT ACCESS
+ ***************************************************************************/
+/*
+ *
+ *
+ */
+
+
+/*
+ * XPLMSetUsersAircraft
+ *
+ * This routine changes the user's aircraft. Note that this will reinitialize
+ * the user to be on the nearest airport's first runway. Pass in a full path
+ * (hard drive and everything including the .acf extension) to the .acf file.
+ *
+ */
+XPLM_API void XPLMSetUsersAircraft(
+ const char * inAircraftPath);
+/*
+ * XPLMPlaceUserAtAirport
+ *
+ * This routine places the user at a given airport. Specify the airport by
+ * its ICAO code (e.g. 'KBOS').
+ *
+ */
+XPLM_API void XPLMPlaceUserAtAirport(
+ const char * inAirportCode);
+/***************************************************************************
+ * GLOBAL AIRCRAFT ACCESS
+ ***************************************************************************/
+/*
+ *
+ *
+ */
+
+
+/* The user's aircraft is always index 0. */
+#define XPLM_USER_AIRCRAFT 0
+/*
+ * XPLMPlaneDrawState_t
+ *
+ * This structure contains additional plane parameter info to be passed to
+ * draw plane. Make sure to fill in the size of the structure field with
+ * sizeof(XPLMDrawPlaneState_t) so that the XPLM can tell how many fields you
+ * knew about when compiling your plugin (since more fields may be added
+ * later).
+ *
+ * Most of these fields are ratios from 0 to 1 for control input. X-Plane
+ * calculates what the actual controls look like based on the .acf file for
+ * that airplane. Note for the yoke inputs, this is what the pilot of the
+ * plane has commanded (post artificial stability system if there were one)
+ * and affects aelerons, rudder, etc. It is not necessarily related to the
+ * actual position of the plane!
+ *
+ */
+typedef struct {
+ /* The size of the draw state struct. */
+ int structSize;
+ /* A ratio from [0..1] describing how far the landing gear is extended. */
+ float gearPosition;
+ /* Ratio of flap deployment, 0 = up, 1 = full deploy. */
+ float flapRatio;
+ /* Ratio of spoiler deployment, 0 = none, 1 = full deploy. */
+ float spoilerRatio;
+ /* Ratio of speed brake deployment, 0 = none, 1 = full deploy. */
+ float speedBrakeRatio;
+ /* Ratio of slat deployment, 0 = none, 1 = full deploy. */
+ float slatRatio;
+ /* Wing sweep ratio, 0 = forward, 1 = swept. */
+ float wingSweep;
+ /* Thrust power, 0 = none, 1 = full fwd, -1 = full reverse. */
+ float thrust;
+ /* Total pitch input for this plane. */
+ float yokePitch;
+ /* Total Heading input for this plane. */
+ float yokeHeading;
+ /* Total Roll input for this plane. */
+ float yokeRoll;
+} XPLMPlaneDrawState_t;
+/*
+ * XPLMCountAircraft
+ *
+ * This function returns the number of aircraft X-Plane is capable of having,
+ * as well as the number of aircraft that are currently active. These numbers
+ * count the user's aircraft. It can also return the plugin that is currently
+ * controlling aircraft. In X-Plane 7, this routine reflects the number of
+ * aircraft the user has enabled in the rendering options window.
+ *
+ */
+XPLM_API void XPLMCountAircraft(
+ int * outTotalAircraft,
+ int * outActiveAircraft,
+ XPLMPluginID * outController);
+/*
+ * XPLMGetNthAircraftModel
+ *
+ * This function returns the aircraft model for the Nth aircraft. Indices are
+ * zero based, with zero being the user's aircraft. The file name should be
+ * at least 256 chars in length; the path should be at least 512 chars in
+ * length.
+ *
+ */
+XPLM_API void XPLMGetNthAircraftModel(
+ int inIndex,
+ char * outFileName,
+ char * outPath);
+/***************************************************************************
+ * EXCLUSIVE AIRCRAFT ACCESS
+ ***************************************************************************/
+/*
+ * The following routines require exclusive access to the airplane APIs. Only
+ * one plugin may have this access at a time.
+ *
+ */
+
+
+
+/*
+ * XPLMPlanesAvailable_f
+ *
+ * Your airplanes available callback is called when another plugin gives up
+ * access to the multiplayer planes. Use this to wait for access to
+ * multiplayer.
+ *
+ */
+typedef void (* XPLMPlanesAvailable_f)(
+ void * inRefcon);
+
+/*
+ * XPLMAcquirePlanes
+ *
+ * XPLMAcquirePlanes grants your plugin exclusive access to the aircraft. It
+ * returns 1 if you gain access, 0 if you do not. inAircraft - pass in an
+ * array of pointers to strings specifying the planes you want loaded. For
+ * any plane index you do not want loaded, pass a 0-length string. Other
+ * strings should be full paths with the .acf extension. NULL terminates this
+ * array, or pass NULL if there are no planes you want loaded. If you pass in
+ * a callback and do not receive access to the planes your callback will be
+ * called when the airplanes are available. If you do receive airplane access,
+ * your callback will not be called.
+ *
+ */
+XPLM_API int XPLMAcquirePlanes(
+ char ** inAircraft, /* Can be NULL */
+ XPLMPlanesAvailable_f inCallback,
+ void * inRefcon);
+
+/*
+ * XPLMReleasePlanes
+ *
+ * Call this function to release access to the planes. Note that if you are
+ * disabled, access to planes is released for you and you must reacquire it.
+ *
+ */
+XPLM_API void XPLMReleasePlanes(void);
+
+/*
+ * XPLMSetActiveAircraftCount
+ *
+ * This routine sets the number of active planes. If you pass in a number
+ * higher than the total number of planes availables, only the total number of
+ * planes available is actually used.
+ *
+ */
+XPLM_API void XPLMSetActiveAircraftCount(
+ int inCount);
+
+/*
+ * XPLMSetAircraftModel
+ *
+ * This routine loads an aircraft model. It may only be called if you have
+ * exclusive access to the airplane APIs. Pass in the path of the model with
+ * the .acf extension. The index is zero based, but you may not pass in 0
+ * (use XPLMSetUsersAircraft to load the user's aircracft).
+ *
+ */
+XPLM_API void XPLMSetAircraftModel(
+ int inIndex,
+ const char * inAircraftPath);
+
+/*
+ * XPLMDisableAIForPlane
+ *
+ * This routine turns off X-Plane's AI for a given plane. The plane will
+ * continue to draw and be a real plane in X-Plane, but will not move itself.
+ *
+ */
+XPLM_API void XPLMDisableAIForPlane(
+ int inPlaneIndex);
+
+/*
+ * XPLMDrawAircraft
+ *
+ * This routine draws an aircraft. It can only be called from a 3-d drawing
+ * callback. Pass in the position of the plane in OpenGL local coordinates
+ * and the orientation of the plane. A 1 for full drawing indicates that the
+ * whole plane must be drawn; a 0 indicates you only need the nav lights
+ * drawn. (This saves rendering time when planes are far away.)
+ *
+ */
+XPLM_API void XPLMDrawAircraft(
+ int inPlaneIndex,
+ float inX,
+ float inY,
+ float inZ,
+ float inPitch,
+ float inRoll,
+ float inYaw,
+ int inFullDraw,
+ XPLMPlaneDrawState_t * inDrawStateInfo);
+
+/*
+ * XPLMReinitUsersPlane
+ *
+ * This function recomputes the derived flight model data from the aircraft
+ * structure in memory. If you have used the data access layer to modify the
+ * aircraft structure, use this routine to resynchronize x-plane; since
+ * X-plane works at least partly from derived values, the sim will not behave
+ * properly until this is called.
+ *
+ * WARNING: this routine does not necessarily place the airplane at the
+ * airport; use XPLMSetUsersAircraft to be compatible. This routine is
+ * provided to do special experimentation with flight models without resetting
+ * flight.
+ *
+ */
+XPLM_API void XPLMReinitUsersPlane(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/X-Plane-SDK/CHeaders/XPLM/XPLMPlugin.h b/X-Plane-SDK/CHeaders/XPLM/XPLMPlugin.h
new file mode 100755
index 0000000..576d157
--- /dev/null
+++ b/X-Plane-SDK/CHeaders/XPLM/XPLMPlugin.h
@@ -0,0 +1,331 @@
+#ifndef _XPLMPlugin_h_
+#define _XPLMPlugin_h_
+
+/*
+ * Copyright 2005-2012 Sandy Barbour and Ben Supnik
+ *
+ * All rights reserved. See license.txt for usage.
+ *
+ * X-Plane SDK Version: 2.1.1
+ *
+ */
+
+/*
+ * These APIs provide facilities to find and work with other plugins and
+ * manage other plugins.
+ *
+ */
+
+#include "XPLMDefs.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/***************************************************************************
+ * FINDING PLUGINS
+ ***************************************************************************/
+/*
+ * These APIs allow you to find another plugin or yourself, or iterate across
+ * all plugins. For example, if you wrote an FMS plugin that needed to talk
+ * to an autopilot plugin, you could use these APIs to locate the autopilot
+ * plugin.
+ *
+ */
+
+
+
+/*
+ * XPLMGetMyID
+ *
+ * This routine returns the plugin ID of the calling plug-in. Call this to
+ * get your own ID.
+ *
+ */
+XPLM_API XPLMPluginID XPLMGetMyID(void);
+
+/*
+ * XPLMCountPlugins
+ *
+ * This routine returns the total number of plug-ins that are loaded, both
+ * disabled and enabled.
+ *
+ */
+XPLM_API int XPLMCountPlugins(void);
+
+/*
+ * XPLMGetNthPlugin
+ *
+ * This routine returns the ID of a plug-in by index. Index is 0 based from 0
+ * to XPLMCountPlugins-1, inclusive. Plugins may be returned in any arbitrary
+ * order.
+ *
+ */
+XPLM_API XPLMPluginID XPLMGetNthPlugin(
+ int inIndex);
+
+/*
+ * XPLMFindPluginByPath
+ *
+ * This routine returns the plug-in ID of the plug-in whose file exists at the
+ * passed in absolute file system path. XPLM_NO_PLUGIN_ID is returned if the
+ * path does not point to a currently loaded plug-in.
+ *
+ */
+XPLM_API XPLMPluginID XPLMFindPluginByPath(
+ const char * inPath);
+
+/*
+ * XPLMFindPluginBySignature
+ *
+ * This routine returns the plug-in ID of the plug-in whose signature matches
+ * what is passed in or XPLM_NO_PLUGIN_ID if no running plug-in has this
+ * signature. Signatures are the best way to identify another plug-in as they
+ * are independent of the file system path of a plug-in or the human-readable
+ * plug-in name, and should be unique for all plug-ins. Use this routine to
+ * locate another plugin that your plugin interoperates with
+ *
+ */
+XPLM_API XPLMPluginID XPLMFindPluginBySignature(
+ const char * inSignature);
+
+/*
+ * XPLMGetPluginInfo
+ *
+ * This routine returns information about a plug-in. Each parameter should be
+ * a pointer to a buffer of at least 256 characters, or NULL to not receive
+ * the information.
+ *
+ * outName - the human-readable name of the plug-in. outFilePath - the
+ * absolute file path to the file that contains this plug-in. outSignature - a
+ * unique string that identifies this plug-in. outDescription - a
+ * human-readable description of this plug-in.
+ *
+ */
+XPLM_API void XPLMGetPluginInfo(
+ XPLMPluginID inPlugin,
+ char * outName, /* Can be NULL */
+ char * outFilePath, /* Can be NULL */
+ char * outSignature, /* Can be NULL */
+ char * outDescription); /* Can be NULL */
+
+/***************************************************************************
+ * ENABLING/DISABLING PLUG-INS
+ ***************************************************************************/
+/*
+ * These routines are used to work with plug-ins and manage them. Most
+ * plugins will not need to use these APIs.
+ *
+ */
+
+
+
+/*
+ * XPLMIsPluginEnabled
+ *
+ * Returns whether the specified plug-in is enabled for running.
+ *
+ */
+XPLM_API int XPLMIsPluginEnabled(
+ XPLMPluginID inPluginID);
+
+/*
+ * XPLMEnablePlugin
+ *
+ * This routine enables a plug-in if it is not already enabled. It returns 1
+ * if the plugin was enabled or successfully enables itself, 0 if it does not.
+ * Plugins may fail to enable (for example, if resources cannot be acquired)
+ * by returning 0 from their XPluginEnable callback.
+ *
+ */
+XPLM_API int XPLMEnablePlugin(
+ XPLMPluginID inPluginID);
+
+/*
+ * XPLMDisablePlugin
+ *
+ * This routine disableds an enabled plug-in.
+ *
+ */
+XPLM_API void XPLMDisablePlugin(
+ XPLMPluginID inPluginID);
+
+/*
+ * XPLMReloadPlugins
+ *
+ * This routine reloads all plug-ins. Once this routine is called and you
+ * return from the callback you were within (e.g. a menu select callback) you
+ * will receive your XPluginDisable and XPluginStop callbacks and your DLL
+ * will be unloaded, then the start process happens as if the sim was starting
+ * up.
+ *
+ */
+XPLM_API void XPLMReloadPlugins(void);
+
+/***************************************************************************
+ * INTERPLUGIN MESSAGING
+ ***************************************************************************/
+/*
+ * Plugin messages are defined as 32-bit integers. Messages below 0x00FFFFFF
+ * are reserved for X-Plane and the plugin SDK.
+ *
+ * Messages have two conceptual uses: notifications and commands. Commands
+ * are sent from one plugin to another to induce behavior; notifications are
+ * sent from one plugin to all others for informational purposes. It is
+ * important that commands and notifications not have the same values because
+ * this could cause a notification sent by one plugin to accidentally induce a
+ * command in another.
+ *
+ * By convention, plugin-defined notifications should have the high bit set
+ * (e.g. be greater or equal to unsigned 0x8000000) while commands should have
+ * this bit be cleared.
+ *
+ * The following messages are sent to your plugin by x-plane.
+ *
+ */
+
+
+
+/* This message is sent to your plugin whenever the user's plane crashes. */
+#define XPLM_MSG_PLANE_CRASHED 101
+
+/* This message is sent to your plugin whenever a new plane is loaded. The *
+ * parameter is the number of the plane being loaded; 0 indicates the user's *
+ * plane. */
+#define XPLM_MSG_PLANE_LOADED 102
+
+/* This messages is called whenever the user's plane is positioned at a new *
+ * airport. */
+#define XPLM_MSG_AIRPORT_LOADED 103
+
+/* This message is sent whenever new scenery is loaded. Use datarefs to *
+ * determine the new scenery files that were loaded. */
+#define XPLM_MSG_SCENERY_LOADED 104
+
+/* This message is sent whenever the user adjusts the number of X-Plane *
+ * aircraft models. You must use XPLMCountPlanes to find out how many planes *
+ * are now available. This message will only be sent in XP7 and higher *
+ * because in XP6 the number of aircraft is not user-adjustable. */
+#define XPLM_MSG_AIRPLANE_COUNT_CHANGED 105
+
+#if defined(XPLM200)
+/* This message is sent to your plugin whenever a plane is unloaded. The *
+ * parameter is the number of the plane being unloaded; 0 indicates the user's *
+ * plane. The parameter is of type int, passed as the value of the pointer. *
+ * (That is: the parameter is an int, not a pointer to an int.) */
+#define XPLM_MSG_PLANE_UNLOADED 106
+#endif /* XPLM200 */
+
+#if defined(XPLM210)
+/* This message is sent to your plugin right before X-Plane writes its *
+ * preferences file. You can use this for two purposes: to write your own *
+ * preferences, and to modify any datarefs to influence preferences output. *
+ * For example, if your plugin temporarily modifies saved preferences, you can *
+ * put them back to their default values here to avoid having the tweaks be *
+ * persisted if your plugin is not loaded on the next invocation of X-Plane. */
+#define XPLM_MSG_WILL_WRITE_PREFS 107
+#endif /* XPLM210 */
+
+#if defined(XPLM210)
+/* This message is sent to your plugin right after a livery is loaded for an *
+ * airplane. You can use this to check the new livery (via datarefs) and *
+ * react accordingly. The parameter is of type int, passed as the value of a *
+ * pointer and represents the aicraft plane number - 0 is the user's plane. */
+#define XPLM_MSG_LIVERY_LOADED 108
+#endif /* XPLM210 */
+
+/*
+ * XPLMSendMessageToPlugin
+ *
+ * This function sends a message to another plug-in or X-Plane. Pass
+ * XPLM_NO_PLUGIN_ID to broadcast to all plug-ins. Only enabled plug-ins with
+ * a message receive function receive the message.
+ *
+ */
+XPLM_API void XPLMSendMessageToPlugin(
+ XPLMPluginID inPlugin,
+ int inMessage,
+ void * inParam);
+
+#if defined(XPLM200)
+/***************************************************************************
+ * Plugin Features API
+ ***************************************************************************/
+/*
+ * The plugin features API allows your plugin to "sign up" for additional
+ * capabilities and plugin system features that are normally disabled for
+ * backward compatibility. This allows advanced plugins to "opt-in" to new
+ * behavior.
+ *
+ * Each feature is defined by a permanent string name. The feature string
+ * names will vary with the particular installation of X-Plane, so plugins
+ * should not expect a feature to be guaranteed present.
+ *
+ */
+
+
+
+
+/*
+ * XPLMFeatureEnumerator_f
+ *
+ * You pass an XPLMFeatureEnumerator_f to get a list of all features supported
+ * by a given version running version of X-Plane. This routine is called once
+ * for each feature.
+ *
+ */
+typedef void (* XPLMFeatureEnumerator_f)(
+ const char * inFeature,
+ void * inRef);
+
+/*
+ * XPLMHasFeature
+ *
+ * This returns 1 if the given installation of X-Plane supports a feature, or
+ * 0 if it does not.
+ *
+ */
+XPLM_API int XPLMHasFeature(
+ const char * inFeature);
+
+/*
+ * XPLMIsFeatureEnabled
+ *
+ * This returns 1 if a feature is currently enabled for your plugin, or 0 if
+ * it is not enabled. It is an error to call this routine with an unsupported
+ * feature.
+ *
+ */
+XPLM_API int XPLMIsFeatureEnabled(
+ const char * inFeature);
+
+/*
+ * XPLMEnableFeature
+ *
+ * This routine enables or disables a feature for your plugin. This will
+ * change the running behavior of X-Plane and your plugin in some way,
+ * depending on the feature.
+ *
+ */
+XPLM_API void XPLMEnableFeature(
+ const char * inFeature,
+ int inEnable);
+
+/*
+ * XPLMEnumerateFeatures
+ *
+ * This routine calls your enumerator callback once for each feature that this
+ * running version of X-Plane supports. Use this routine to determine all of
+ * the features that X-Plane can support.
+ *
+ */
+XPLM_API void XPLMEnumerateFeatures(
+ XPLMFeatureEnumerator_f inEnumerator,
+ void * inRef);
+
+#endif /* XPLM200 */
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/X-Plane-SDK/CHeaders/XPLM/XPLMProcessing.h b/X-Plane-SDK/CHeaders/XPLM/XPLMProcessing.h
new file mode 100755
index 0000000..99fb6ea
--- /dev/null
+++ b/X-Plane-SDK/CHeaders/XPLM/XPLMProcessing.h
@@ -0,0 +1,254 @@
+#ifndef _XPLMProcessing_h_
+#define _XPLMProcessing_h_
+
+/*
+ * Copyright 2005-2012 Sandy Barbour and Ben Supnik
+ *
+ * All rights reserved. See license.txt for usage.
+ *
+ * X-Plane SDK Version: 2.1.1
+ *
+ */
+
+/*
+ * This API allows you to get regular callbacks during the flight loop, the
+ * part of X-Plane where the plane's position calculates the physics of
+ * flight, etc. Use these APIs to accomplish periodic tasks like logging data
+ * and performing I/O.
+ *
+ * WARNING: Do NOT use these callbacks to draw! You cannot draw during flight
+ * loop callbacks. Use the drawing callbacks (see XPLMDisplay for more info)
+ * for graphics.
+ *
+ */
+
+#include "XPLMDefs.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/***************************************************************************
+ * FLIGHT LOOP CALLBACKS
+ ***************************************************************************/
+/*
+ *
+ *
+ */
+
+
+
+#if defined(XPLM210)
+/*
+ * XPLMFlightLoopPhaseType
+ *
+ * You can register a flight loop callback to run either before or after the
+ * flight model is integrated by X-Plane.
+ *
+ */
+enum {
+ /* Your callback runs before X-Plane integrates the flight model. */
+ xplm_FlightLoop_Phase_BeforeFlightModel = 0
+
+ /* Your callback runs after X-Plane integrates the flight model. */
+ ,xplm_FlightLoop_Phase_AfterFlightModel = 1
+
+
+};
+typedef int XPLMFlightLoopPhaseType;
+#endif /* XPLM210 */
+
+#if defined(XPLM210)
+/*
+ * XPLMFlightLoopID
+ *
+ * This is an opaque identifier for a flight loop callback. You can use this
+ * identifier to easily track and remove your callbacks, or to use the new
+ * flight loop APIs.
+ *
+ */
+typedef void * XPLMFlightLoopID;
+#endif /* XPLM210 */
+
+/*
+ * XPLMFlightLoop_f
+ *
+ * This is your flight loop callback. Each time the flight loop is iterated
+ * through, you receive this call at the end. You receive a time since you
+ * were last called and a time since the last loop, as well as a loop counter.
+ * The 'phase' parameter is deprecated and should be ignored.
+ *
+ * Your return value controls when you will next be called. Return 0 to stop
+ * receiving callbacks. Pass a positive number to specify how many seconds
+ * until the next callback. (You will be called at or after this time, not
+ * before.) Pass a negative number to specify how many loops must go by until
+ * you are called. For example, -1.0 means call me the very next loop. Try
+ * to run your flight loop as infrequently as is practical, and suspend it
+ * (using return value 0) when you do not need it; lots of flight loop
+ * callbacks that do nothing lowers x-plane's frame rate.
+ *
+ * Your callback will NOT be unregistered if you return 0; it will merely be
+ * inactive.
+ *
+ * The reference constant you passed to your loop is passed back to you.
+ *
+ */
+typedef float (* XPLMFlightLoop_f)(
+ float inElapsedSinceLastCall,
+ float inElapsedTimeSinceLastFlightLoop,
+ int inCounter,
+ void * inRefcon);
+
+#if defined(XPLM210)
+/*
+ * XPLMCreateFlightLoop_t
+ *
+ * XPLMCreateFlightLoop_t contains the parameters to create a new flight loop
+ * callback. The strsucture can be expanded in future SDKs - always set
+ * structSize to the size of your structure in bytes.
+ *
+ */
+typedef struct {
+ int structSize;
+ XPLMFlightLoopPhaseType phase;
+ XPLMFlightLoop_f callbackFunc;
+ void * refcon;
+} XPLMCreateFlightLoop_t;
+#endif /* XPLM210 */
+
+/*
+ * XPLMGetElapsedTime
+ *
+ * This routine returns the elapsed time since the sim started up in decimal
+ * seconds.
+ *
+ */
+XPLM_API float XPLMGetElapsedTime(void);
+
+/*
+ * XPLMGetCycleNumber
+ *
+ * This routine returns a counter starting at zero for each sim cycle
+ * computed/video frame rendered.
+ *
+ */
+XPLM_API int XPLMGetCycleNumber(void);
+
+/*
+ * XPLMRegisterFlightLoopCallback
+ *
+ * This routine registers your flight loop callback. Pass in a pointer to a
+ * flight loop function and a refcon. inInterval defines when you will be
+ * called. Pass in a positive number to specify seconds from registration
+ * time to the next callback. Pass in a negative number to indicate when you
+ * will be called (e.g. pass -1 to be called at the next cylcle). Pass 0 to
+ * not be called; your callback will be inactive.
+ *
+ */
+XPLM_API void XPLMRegisterFlightLoopCallback(
+ XPLMFlightLoop_f inFlightLoop,
+ float inInterval,
+ void * inRefcon);
+
+/*
+ * XPLMUnregisterFlightLoopCallback
+ *
+ * This routine unregisters your flight loop callback. Do NOT call it from
+ * your flight loop callback. Once your flight loop callback is
+ * unregistered, it will not be called again.
+ *
+ */
+XPLM_API void XPLMUnregisterFlightLoopCallback(
+ XPLMFlightLoop_f inFlightLoop,
+ void * inRefcon);
+
+/*
+ * XPLMSetFlightLoopCallbackInterval
+ *
+ * This routine sets when a callback will be called. Do NOT call it from your
+ * callback; use the return value of the callback to change your callback
+ * interval from inside your callback.
+ *
+ * inInterval is formatted the same way as in XPLMRegisterFlightLoopCallback;
+ * positive for seconds, negative for cycles, and 0 for deactivating the
+ * callback. If inRelativeToNow is 1, times are from the time of this call;
+ * otherwise they are from the time the callback was last called (or the time
+ * it was registered if it has never been called.
+ *
+ */
+XPLM_API void XPLMSetFlightLoopCallbackInterval(
+ XPLMFlightLoop_f inFlightLoop,
+ float inInterval,
+ int inRelativeToNow,
+ void * inRefcon);
+
+#if defined(XPLM210)
+/*
+ * XPLMCreateFlightLoop
+ *
+ * This routine creates a flight loop callback and returns its ID. The flight
+ * loop callback is created using the input param struct, and is inited to be
+ * unscheduled.
+ *
+ */
+XPLM_API XPLMFlightLoopID XPLMCreateFlightLoop(
+ XPLMCreateFlightLoop_t * inParams);
+#endif /* XPLM210 */
+
+#if defined(XPLM210)
+/*
+ * XPLMDestroyFlightLoop
+ *
+ * This routine destroys a flight loop callback by ID.
+ *
+ */
+XPLM_API void XPLMDestroyFlightLoop(
+ XPLMFlightLoopID inFlightLoopID);
+#endif /* XPLM210 */
+
+#if defined(XPLM210)
+/*
+ * XPLMScheduleFlightLoop
+ *
+ * This routine schedules a flight loop callback for future execution. If
+ * inInterval is negative, it is run in a certain number of frames based on
+ * the absolute value of the input. If the interval is positive, it is a
+ * duration in seconds.
+ *
+ * If inRelativeToNow is true, ties are interpretted relative to the time this
+ * routine is called; otherwise they are relative to the last call time or the
+ * time the flight loop was registered (if never called).
+ *
+ * THREAD SAFETY: it is legal to call this routine from any thread under the
+ * following conditions:
+ *
+ * 1. The call must be between the beginning of an XPLMEnable and the end of
+ * an XPLMDisable sequence. (That is, you must not call this routine from
+ * thread activity when your plugin was supposed to be disabled. Since
+ * plugins are only enabled while loaded, this also implies you cannot run
+ * this routine outside an XPLMStart/XPLMStop sequence.)
+ *
+ * 2. You may not call this routine re-entrantly for a single flight loop ID.
+ * (That is, you can't enable from multiple threads at the same time.)
+ *
+ * 3. You must call this routine between the time after XPLMCreateFlightLoop
+ * returns a value and the time you call XPLMDestroyFlightLoop. (That is, you
+ * must ensure that your threaded activity is within the life of the object.
+ * The SDK does not check this for you, nor does it synchronize destruction of
+ * the object.)
+ *
+ * 4. The object must be unscheduled if this routine is to be called from a
+ * thread other than the main thread.
+ *
+ */
+XPLM_API void XPLMScheduleFlightLoop(
+ XPLMFlightLoopID inFlightLoopID,
+ float inInterval,
+ int inRelativeToNow);
+#endif /* XPLM210 */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/X-Plane-SDK/CHeaders/XPLM/XPLMScenery.h b/X-Plane-SDK/CHeaders/XPLM/XPLMScenery.h
new file mode 100755
index 0000000..1cc5186
--- /dev/null
+++ b/X-Plane-SDK/CHeaders/XPLM/XPLMScenery.h
@@ -0,0 +1,400 @@
+#ifndef _XPLMScenery_h_
+#define _XPLMScenery_h_
+
+/*
+ * Copyright 2005-2012 Sandy Barbour and Ben Supnik
+ *
+ * All rights reserved. See license.txt for usage.
+ *
+ * X-Plane SDK Version: 2.1.1
+ *
+ */
+
+/*
+ * This package contains APIs to interact with X-Plane's scenery system.
+ *
+ */
+
+#include "XPLMDefs.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if defined(XPLM200)
+/***************************************************************************
+ * Terrain Y-Testing
+ ***************************************************************************/
+/*
+ * The Y-testing API allows you to locate the physical scenery mesh. This
+ * would be used to place dynamic graphics on top of the ground in a
+ * plausible way or do physics interactions.
+ *
+ * The Y-test API works via probe objects, which are allocated by your plugin
+ * and used to query terrain. Probe objects exist both to capture which
+ * algorithm you have requested (see probe types) and also to cache query
+ * information.
+ *
+ * Performance guidelines: It is generally faster to use the same probe for
+ * nearby points and different probes for different points. Try not to
+ * allocate more than "hundreds" of probes at most. Share probes if you need
+ * more. Generally, probing operations are expensive, and should be avoided
+ * via caching when possible.
+ *
+ * Y testing returns a location on the terrain, a normal vectory, and a
+ * velocity vector. The normal vector tells you the slope of the terrain at
+ * that point. The velocity vector tells you if that terrain is moving (and
+ * is in meters/second). For example, if your Y test hits the aircraft carrier
+ * deck, this tells you the velocity of that point on the deck.
+ *
+ * Note: the Y-testing API is limited to probing the loaded scenery area,
+ * which is approximately 300x300 km in X-Plane 9. Probes outside this area
+ * will return the height of a 0 MSL sphere.
+ *
+ */
+
+
+
+
+/*
+ * XPLMProbeType
+ *
+ * XPLMProbeType defines the type of terrain probe - each probe has a
+ * different algorithm. (Only one type of probe is provided right now, but
+ * future APIs will expose more flexible or poewrful or useful probes.
+ *
+ */
+enum {
+ /* The Y probe gives you the location of the tallest physical scenery along *
+ * the Y axis going through the queried point. */
+ xplm_ProbeY = 0
+
+
+};
+typedef int XPLMProbeType;
+
+/*
+ * XPLMProbeResult
+ *
+ * Probe results - possible results from a probe query.
+ *
+ */
+enum {
+ /* The probe hit terrain and returned valid values. */
+ xplm_ProbeHitTerrain = 0
+
+ /* An error in the API call. Either the probe struct size is bad, or the *
+ * probe is invalid or the type is mismatched for the specific query call. */
+ ,xplm_ProbeError = 1
+
+ /* The probe call succeeded but there is no terrain under this point (perhaps *
+ * it is off the side of the planet?) */
+ ,xplm_ProbeMissed = 2
+
+
+};
+typedef int XPLMProbeResult;
+
+/*
+ * XPLMProbeRef
+ *
+ * An XPLMProbeRef is an opaque handle to a probe, used for querying the
+ * terrain.
+ *
+ */
+typedef void * XPLMProbeRef;
+
+/*
+ * XPLMProbeInfo_t
+ *
+ * XPLMProbeInfo_t contains the results of a probe call. Make sure to set
+ * structSize to the size of the struct before using it.
+ *
+ */
+typedef struct {
+ /* Size of structure in bytes - always set this before calling the XPLM. */
+ int structSize;
+ /* Resulting X location of the terrain point we hit, in local OpenGL *
+ * coordinates. */
+ float locationX;
+ /* Resulting Y location of the terrain point we hit, in local OpenGL *
+ * coordinates. */
+ float locationY;
+ /* Resulting Z location of the terrain point we hit, in local OpenGL *
+ * coordinates. */
+ float locationZ;
+ /* X component of the normal vector to the terrain we found. */
+ float normalX;
+ /* Y component of the normal vector to the terrain we found. */
+ float normalY;
+ /* Z component of the normal vector to the terrain we found. */
+ float normalZ;
+ /* X component of the velocity vector of the terrain we found. */
+ float velocityX;
+ /* Y component of the velocity vector of the terrain we found. */
+ float velocityY;
+ /* Z component of the velocity vector of the terrain we found. */
+ float velocityZ;
+ /* Tells if the surface we hit is water (otherwise it is land). */
+ int is_wet;
+} XPLMProbeInfo_t;
+
+/*
+ * XPLMCreateProbe
+ *
+ * Creates a new probe object of a given type and returns.
+ *
+ */
+XPLM_API XPLMProbeRef XPLMCreateProbe(
+ XPLMProbeType inProbeType);
+
+/*
+ * XPLMDestroyProbe
+ *
+ * Deallocates an existing probe object.
+ *
+ */
+XPLM_API void XPLMDestroyProbe(
+ XPLMProbeRef inProbe);
+
+/*
+ * XPLMProbeTerrainXYZ
+ *
+ * Probes the terrain. Pass in the XYZ coordinate of the probe point, a probe
+ * object, and an XPLMProbeInfo_t struct that has its structSize member set
+ * properly. Other fields are filled in if we hit terrain, and a probe result
+ * is returned.
+ *
+ */
+XPLM_API XPLMProbeResult XPLMProbeTerrainXYZ(
+ XPLMProbeRef inProbe,
+ float inX,
+ float inY,
+ float inZ,
+ XPLMProbeInfo_t * outInfo);
+
+#endif /* XPLM200 */
+/***************************************************************************
+ * Object Drawing
+ ***************************************************************************/
+/*
+ * The object drawing routines let you load and draw X-Plane OBJ files.
+ * Objects are loaded by file path and managed via an opaque handle. X-Plane
+ * naturally reference counts objects, so it is important that you balance
+ * every successful call to XPLMLoadObject with a call to XPLMUnloadObject!
+ *
+ */
+
+
+
+#if defined(XPLM200)
+/*
+ * XPLMObjectRef
+ *
+ * An XPLMObjectRef is a opaque handle to an .obj file that has been loaded
+ * into memory.
+ *
+ */
+typedef void * XPLMObjectRef;
+#endif /* XPLM200 */
+
+#if defined(XPLM200)
+/*
+ * XPLMDrawInfo_t
+ *
+ * The XPLMDrawInfo_t structure contains positioning info for one object that
+ * is to be drawn. Be sure to set structSize to the size of the structure for
+ * future expansion.
+ *
+ */
+typedef struct {
+ /* Set this to the size of this structure! */
+ int structSize;
+ /* X location of the object in local coordinates. */
+ float x;
+ /* Y location of the object in local coordinates. */
+ float y;
+ /* Z location of the object in local coordinates. */
+ float z;
+ /* Pitch in degres to rotate the object, positive is up. */
+ float pitch;
+ /* Heading in local coordinates to rotate the object, clockwise. */
+ float heading;
+ /* Roll to rotate the object. */
+ float roll;
+} XPLMDrawInfo_t;
+#endif /* XPLM200 */
+
+#if defined(XPLM210)
+/*
+ * XPLMObjectLoaded_f
+ *
+ * You provide this callback when loading an object asynchronously; it will be
+ * called once the object is loaded. Your refcon is passed back. The object
+ * ref passed in is the newly loaded object (ready for use) or NULL if an
+ * error occured.
+ *
+ * If your plugin is disabled, this callback will be delivered as soon as the
+ * plugin is re-enabled. If your plugin is unloaded before this callback is
+ * ever called, the SDK will release the object handle for you.
+ *
+ */
+typedef void (* XPLMObjectLoaded_f)(
+ XPLMObjectRef inObject,
+ void * inRefcon);
+#endif /* XPLM210 */
+
+#if defined(XPLM200)
+/*
+ * XPLMLoadObject
+ *
+ * This routine loads an OBJ file and returns a handle to it. If X-plane has
+ * already loaded the object, the handle to the existing object is returned.
+ * Do not assume you will get the same handle back twice, but do make sure to
+ * call unload once for every load to avoid "leaking" objects. The object
+ * will be purged from memory when no plugins and no scenery are using it.
+ *
+ * The path for the object must be relative to the X-System base folder. If
+ * the path is in the root of the X-System folder you may need to prepend ./
+ * to it; loading objects in the root of the X-System folder is STRONGLY
+ * discouraged - your plugin should not dump art resources in the root folder!
+ *
+ *
+ * XPLMLoadObject will return NULL if the object cannot be loaded (either
+ * because it is not found or the file is misformatted). This routine will
+ * load any object that can be used in the X-Plane scenery system.
+ *
+ * It is important that the datarefs an object uses for animation already be
+ * loaded before you load the object. For this reason it may be necessary to
+ * defer object loading until the sim has fully started.
+ *
+ */
+XPLM_API XPLMObjectRef XPLMLoadObject(
+ const char * inPath);
+#endif /* XPLM200 */
+
+#if defined(XPLM210)
+/*
+ * XPLMLoadObjectAsync
+ *
+ * This routine loads an object asynchronously; control is returned to you
+ * immediately while X-Plane loads the object. The sim will not stop flying
+ * while the object loads. For large objects, it may be several seconds
+ * before the load finishes.
+ *
+ * You provide a callback function that is called once the load has completed.
+ * Note that if the object cannot be loaded, you will not find out until the
+ * callback function is called with a NULL object handle.
+ *
+ * There is no way to cancel an asynchronous object load; you must wait for
+ * the load to complete and then release the object if it is no longer
+ * desired.
+ *
+ */
+XPLM_API void XPLMLoadObjectAsync(
+ const char * inPath,
+ XPLMObjectLoaded_f inCallback,
+ void * inRefcon);
+#endif /* XPLM210 */
+
+#if defined(XPLM200)
+/*
+ * XPLMDrawObjects
+ *
+ * XPLMDrawObjects draws an object from an OBJ file one or more times. You
+ * pass in the object and an array of XPLMDrawInfo_t structs, one for each
+ * place you would like the object to be drawn.
+ *
+ * X-Plane will attempt to cull the objects based on LOD and visibility, and
+ * will pick the appropriate LOD.
+ *
+ * Lighting is a boolean; pass 1 to show the night version of object with
+ * night-only lights lit up. Pass 0 to show the daytime version of the
+ * object.
+ *
+ * earth_relative controls the coordinate system. If this is 1, the rotations
+ * you specify are applied to the object after its coordinate system is
+ * transformed from local to earth-relative coordinates -- that is, an object
+ * with no rotations will point toward true north and the Y axis will be up
+ * against gravity. If this is 0, the object is drawn with your rotations
+ * from local coordanates -- that is, an object with no rotations is drawn
+ * pointing down the -Z axis and the Y axis of the object matches the local
+ * coordinate Y axis.
+ *
+ */
+XPLM_API void XPLMDrawObjects(
+ XPLMObjectRef inObject,
+ int inCount,
+ XPLMDrawInfo_t * inLocations,
+ int lighting,
+ int earth_relative);
+#endif /* XPLM200 */
+
+#if defined(XPLM200)
+/*
+ * XPLMUnloadObject
+ *
+ * This routine marks an object as no longer being used by your plugin.
+ * Objects are reference counted: once no plugins are using an object, it is
+ * purged from memory. Make sure to call XPLMUnloadObject once for each
+ * successful call to XPLMLoadObject.
+ *
+ */
+XPLM_API void XPLMUnloadObject(
+ XPLMObjectRef inObject);
+#endif /* XPLM200 */
+
+#if defined(XPLM200)
+/***************************************************************************
+ * Library Access
+ ***************************************************************************/
+/*
+ * The library access routines allow you to locate scenery objects via the
+ * X-Plane library system. Right now library access is only provided for
+ * objects, allowing plugin-drawn objects to be extended using the library
+ * system.
+ *
+ */
+
+
+
+
+/*
+ * XPLMLibraryEnumerator_f
+ *
+ * An XPLMLibraryEnumerator_f is a callback you provide that is called once
+ * for each library element that is located. The returned paths will be
+ * relative to the X-System folder.
+ *
+ */
+typedef void (* XPLMLibraryEnumerator_f)(
+ const char * inFilePath,
+ void * inRef);
+
+/*
+ * XPLMLookupObjects
+ *
+ * This routine looks up a virtual path in the library system and returns all
+ * matching elements. You provide a callback - one virtual path may match
+ * many objects in the library. XPLMLookupObjects returns the number of
+ * objects found.
+ *
+ * The latitude and longitude parameters specify the location the object will
+ * be used. The library system allows for scenery packages to only provide
+ * objects to certain local locations. Only objects that are allowed at the
+ * latitude/longitude you provide will be returned.
+ *
+ */
+XPLM_API int XPLMLookupObjects(
+ const char * inPath,
+ float inLatitude,
+ float inLongitude,
+ XPLMLibraryEnumerator_f enumerator,
+ void * ref);
+
+#endif /* XPLM200 */
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/X-Plane-SDK/CHeaders/XPLM/XPLMUtilities.h b/X-Plane-SDK/CHeaders/XPLM/XPLMUtilities.h
new file mode 100755
index 0000000..5588c66
--- /dev/null
+++ b/X-Plane-SDK/CHeaders/XPLM/XPLMUtilities.h
@@ -0,0 +1,839 @@
+#ifndef _XPLMUtilities_h_
+#define _XPLMUtilities_h_
+
+/*
+ * Copyright 2005-2012 Sandy Barbour and Ben Supnik
+ *
+ * All rights reserved. See license.txt for usage.
+ *
+ * X-Plane SDK Version: 2.1.1
+ *
+ */
+
+/*
+ *
+ *
+ */
+
+#include "XPLMDefs.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/***************************************************************************
+ * X-PLANE USER INTERACTION
+ ***************************************************************************/
+/*
+ * The user interaction APIs let you simulate commands the user can do with a
+ * joystick, keyboard etc. Note that it is generally safer for future
+ * compatibility to use one of these commands than to manipulate the
+ * underlying sim data.
+ *
+ */
+
+
+
+/*
+ * XPLMCommandKeyID
+ *
+ * These enums represent all the keystrokes available within x-plane. They
+ * can be sent to x-plane directly. For example, you can reverse thrust using
+ * these enumerations.
+ *
+ */
+enum {
+ xplm_key_pause=0,
+ xplm_key_revthrust,
+ xplm_key_jettison,
+ xplm_key_brakesreg,
+ xplm_key_brakesmax,
+ xplm_key_gear,
+ xplm_key_timedn,
+ xplm_key_timeup,
+ xplm_key_fadec,
+ xplm_key_otto_dis,
+ xplm_key_otto_atr,
+ xplm_key_otto_asi,
+ xplm_key_otto_hdg,
+ xplm_key_otto_gps,
+ xplm_key_otto_lev,
+ xplm_key_otto_hnav,
+ xplm_key_otto_alt,
+ xplm_key_otto_vvi,
+ xplm_key_otto_vnav,
+ xplm_key_otto_nav1,
+ xplm_key_otto_nav2,
+ xplm_key_targ_dn,
+ xplm_key_targ_up,
+ xplm_key_hdgdn,
+ xplm_key_hdgup,
+ xplm_key_barodn,
+ xplm_key_baroup,
+ xplm_key_obs1dn,
+ xplm_key_obs1up,
+ xplm_key_obs2dn,
+ xplm_key_obs2up,
+ xplm_key_com1_1,
+ xplm_key_com1_2,
+ xplm_key_com1_3,
+ xplm_key_com1_4,
+ xplm_key_nav1_1,
+ xplm_key_nav1_2,
+ xplm_key_nav1_3,
+ xplm_key_nav1_4,
+ xplm_key_com2_1,
+ xplm_key_com2_2,
+ xplm_key_com2_3,
+ xplm_key_com2_4,
+ xplm_key_nav2_1,
+ xplm_key_nav2_2,
+ xplm_key_nav2_3,
+ xplm_key_nav2_4,
+ xplm_key_adf_1,
+ xplm_key_adf_2,
+ xplm_key_adf_3,
+ xplm_key_adf_4,
+ xplm_key_adf_5,
+ xplm_key_adf_6,
+ xplm_key_transpon_1,
+ xplm_key_transpon_2,
+ xplm_key_transpon_3,
+ xplm_key_transpon_4,
+ xplm_key_transpon_5,
+ xplm_key_transpon_6,
+ xplm_key_transpon_7,
+ xplm_key_transpon_8,
+ xplm_key_flapsup,
+ xplm_key_flapsdn,
+ xplm_key_cheatoff,
+ xplm_key_cheaton,
+ xplm_key_sbrkoff,
+ xplm_key_sbrkon,
+ xplm_key_ailtrimL,
+ xplm_key_ailtrimR,
+ xplm_key_rudtrimL,
+ xplm_key_rudtrimR,
+ xplm_key_elvtrimD,
+ xplm_key_elvtrimU,
+ xplm_key_forward,
+ xplm_key_down,
+ xplm_key_left,
+ xplm_key_right,
+ xplm_key_back,
+ xplm_key_tower,
+ xplm_key_runway,
+ xplm_key_chase,
+ xplm_key_free1,
+ xplm_key_free2,
+ xplm_key_spot,
+ xplm_key_fullscrn1,
+ xplm_key_fullscrn2,
+ xplm_key_tanspan,
+ xplm_key_smoke,
+ xplm_key_map,
+ xplm_key_zoomin,
+ xplm_key_zoomout,
+ xplm_key_cycledump,
+ xplm_key_replay,
+ xplm_key_tranID,
+ xplm_key_max
+};
+typedef int XPLMCommandKeyID;
+
+/*
+ * XPLMCommandButtonID
+ *
+ * These are enumerations for all of the things you can do with a joystick
+ * button in X-Plane. They currently match the buttons menu in the equipment
+ * setup dialog, but these enums will be stable even if they change in
+ * X-Plane.
+ *
+ */
+enum {
+ xplm_joy_nothing=0,
+ xplm_joy_start_all,
+ xplm_joy_start_0,
+ xplm_joy_start_1,
+ xplm_joy_start_2,
+ xplm_joy_start_3,
+ xplm_joy_start_4,
+ xplm_joy_start_5,
+ xplm_joy_start_6,
+ xplm_joy_start_7,
+ xplm_joy_throt_up,
+ xplm_joy_throt_dn,
+ xplm_joy_prop_up,
+ xplm_joy_prop_dn,
+ xplm_joy_mixt_up,
+ xplm_joy_mixt_dn,
+ xplm_joy_carb_tog,
+ xplm_joy_carb_on,
+ xplm_joy_carb_off,
+ xplm_joy_trev,
+ xplm_joy_trm_up,
+ xplm_joy_trm_dn,
+ xplm_joy_rot_trm_up,
+ xplm_joy_rot_trm_dn,
+ xplm_joy_rud_lft,
+ xplm_joy_rud_cntr,
+ xplm_joy_rud_rgt,
+ xplm_joy_ail_lft,
+ xplm_joy_ail_cntr,
+ xplm_joy_ail_rgt,
+ xplm_joy_B_rud_lft,
+ xplm_joy_B_rud_rgt,
+ xplm_joy_look_up,
+ xplm_joy_look_dn,
+ xplm_joy_look_lft,
+ xplm_joy_look_rgt,
+ xplm_joy_glance_l,
+ xplm_joy_glance_r,
+ xplm_joy_v_fnh,
+ xplm_joy_v_fwh,
+ xplm_joy_v_tra,
+ xplm_joy_v_twr,
+ xplm_joy_v_run,
+ xplm_joy_v_cha,
+ xplm_joy_v_fr1,
+ xplm_joy_v_fr2,
+ xplm_joy_v_spo,
+ xplm_joy_flapsup,
+ xplm_joy_flapsdn,
+ xplm_joy_vctswpfwd,
+ xplm_joy_vctswpaft,
+ xplm_joy_gear_tog,
+ xplm_joy_gear_up,
+ xplm_joy_gear_down,
+ xplm_joy_lft_brake,
+ xplm_joy_rgt_brake,
+ xplm_joy_brakesREG,
+ xplm_joy_brakesMAX,
+ xplm_joy_speedbrake,
+ xplm_joy_ott_dis,
+ xplm_joy_ott_atr,
+ xplm_joy_ott_asi,
+ xplm_joy_ott_hdg,
+ xplm_joy_ott_alt,
+ xplm_joy_ott_vvi,
+ xplm_joy_tim_start,
+ xplm_joy_tim_reset,
+ xplm_joy_ecam_up,
+ xplm_joy_ecam_dn,
+ xplm_joy_fadec,
+ xplm_joy_yaw_damp,
+ xplm_joy_art_stab,
+ xplm_joy_chute,
+ xplm_joy_JATO,
+ xplm_joy_arrest,
+ xplm_joy_jettison,
+ xplm_joy_fuel_dump,
+ xplm_joy_puffsmoke,
+ xplm_joy_prerotate,
+ xplm_joy_UL_prerot,
+ xplm_joy_UL_collec,
+ xplm_joy_TOGA,
+ xplm_joy_shutdown,
+ xplm_joy_con_atc,
+ xplm_joy_fail_now,
+ xplm_joy_pause,
+ xplm_joy_rock_up,
+ xplm_joy_rock_dn,
+ xplm_joy_rock_lft,
+ xplm_joy_rock_rgt,
+ xplm_joy_rock_for,
+ xplm_joy_rock_aft,
+ xplm_joy_idle_hilo,
+ xplm_joy_lanlights,
+ xplm_joy_max
+};
+typedef int XPLMCommandButtonID;
+
+/*
+ * XPLMHostApplicationID
+ *
+ * The plug-in system is based on Austin's cross-platform OpenGL framework and
+ * could theoretically be adapted to run in other apps like WorldMaker. The
+ * plug-in system also runs against a test harness for internal development
+ * and could be adapted to another flight sim (in theory at least). So an ID
+ * is providing allowing plug-ins to indentify what app they are running
+ * under.
+ *
+ */
+enum {
+ xplm_Host_Unknown = 0
+
+ ,xplm_Host_XPlane = 1
+
+ ,xplm_Host_PlaneMaker = 2
+
+ ,xplm_Host_WorldMaker = 3
+
+ ,xplm_Host_Briefer = 4
+
+ ,xplm_Host_PartMaker = 5
+
+ ,xplm_Host_YoungsMod = 6
+
+ ,xplm_Host_XAuto = 7
+
+
+};
+typedef int XPLMHostApplicationID;
+
+/*
+ * XPLMLanguageCode
+ *
+ * These enums define what language the sim is running in. These enumerations
+ * do not imply that the sim can or does run in all of these languages; they
+ * simply provide a known encoding in the event that a given sim version is
+ * localized to a certain language.
+ *
+ */
+enum {
+ xplm_Language_Unknown = 0
+
+ ,xplm_Language_English = 1
+
+ ,xplm_Language_French = 2
+
+ ,xplm_Language_German = 3
+
+ ,xplm_Language_Italian = 4
+
+ ,xplm_Language_Spanish = 5
+
+ ,xplm_Language_Korean = 6
+
+#if defined(XPLM200)
+ ,xplm_Language_Russian = 7
+
+#endif /* XPLM200 */
+#if defined(XPLM200)
+ ,xplm_Language_Greek = 8
+
+#endif /* XPLM200 */
+#if defined(XPLM200)
+ ,xplm_Language_Japanese = 9
+
+#endif /* XPLM200 */
+#if defined(XPLM200)
+ ,xplm_Language_Chinese = 10
+
+#endif /* XPLM200 */
+
+};
+typedef int XPLMLanguageCode;
+
+#if defined(XPLM200)
+/*
+ * XPLMDataFileType
+ *
+ * These enums define types of data files you can load or unload using the
+ * SDK.
+ *
+ */
+enum {
+ /* A situation (.sit) file, which starts off a flight in a given *
+ * configuration. */
+ xplm_DataFile_Situation = 1
+
+ /* A situation movie (.smo) file, which replays a past flight. */
+ ,xplm_DataFile_ReplayMovie = 2
+
+
+};
+typedef int XPLMDataFileType;
+#endif /* XPLM200 */
+
+#if defined(XPLM200)
+/*
+ * XPLMError_f
+ *
+ * An XPLM error callback is a function that you provide to receive debugging
+ * information from the plugin SDK. See XPLMSetErrorCallback for more
+ * information. NOTE: for the sake of debugging, your error callback will be
+ * called even if your plugin is not enabled, allowing you to receive debug
+ * info in your XPluginStart and XPluginStop callbacks. To avoid causing
+ * logic errors in the management code, do not call any other plugin routines
+ * from your error callback - it is only meant for logging!
+ *
+ */
+typedef void (* XPLMError_f)(
+ const char * inMessage);
+#endif /* XPLM200 */
+
+/*
+ * XPLMSimulateKeyPress
+ *
+ * This function simulates a key being pressed for x-plane. The keystroke
+ * goes directly to x-plane; it is never sent to any plug-ins. However, since
+ * this is a raw key stroke it may be mapped by the keys file or enter text
+ * into a field.
+ *
+ * WARNING: This function will be deprecated; do not use it. Instead use
+ * XPLMCommandKeyStroke.
+ *
+ */
+XPLM_API void XPLMSimulateKeyPress(
+ int inKeyType,
+ int inKey);
+
+/*
+ * XPLMSpeakString
+ *
+ * This function displays the string in a translucent overlay over the current
+ * display and also speaks the string if text-to-speech is enabled. The
+ * string is spoken asynchronously, this function returns immediately.
+ *
+ */
+XPLM_API void XPLMSpeakString(
+ const char * inString);
+
+/*
+ * XPLMCommandKeyStroke
+ *
+ * This routine simulates a command-key stroke. However, the keys are done by
+ * function, not by actual letter, so this function works even if the user has
+ * remapped their keyboard. Examples of things you might do with this include
+ * pausing the simulator.
+ *
+ */
+XPLM_API void XPLMCommandKeyStroke(
+ XPLMCommandKeyID inKey);
+
+/*
+ * XPLMCommandButtonPress
+ *
+ * This function simulates any of the actions that might be taken by pressing
+ * a joystick button. However, this lets you call the command directly rather
+ * than have to know which button is mapped where. Important: you must
+ * release each button you press. The APIs are separate so that you can 'hold
+ * down' a button for a fixed amount of time.
+ *
+ */
+XPLM_API void XPLMCommandButtonPress(
+ XPLMCommandButtonID inButton);
+
+/*
+ * XPLMCommandButtonRelease
+ *
+ * This function simulates any of the actions that might be taken by pressing
+ * a joystick button. See XPLMCommandButtonPress
+ *
+ */
+XPLM_API void XPLMCommandButtonRelease(
+ XPLMCommandButtonID inButton);
+
+/*
+ * XPLMGetVirtualKeyDescription
+ *
+ * Given a virtual key code (as defined in XPLMDefs.h) this routine returns a
+ * human-readable string describing the character. This routine is provided
+ * for showing users what keyboard mappings they have set up. The string may
+ * read 'unknown' or be a blank or NULL string if the virtual key is unknown.
+ *
+ */
+XPLM_API const char * XPLMGetVirtualKeyDescription(
+ char inVirtualKey);
+
+/***************************************************************************
+ * X-PLANE MISC
+ ***************************************************************************/
+/*
+ *
+ *
+ */
+
+
+
+/*
+ * XPLMReloadScenery
+ *
+ * XPLMReloadScenery reloads the current set of scenery. You can use this
+ * function in two typical ways: simply call it to reload the scenery, picking
+ * up any new installed scenery, .env files, etc. from disk. Or, change the
+ * lat/ref and lon/ref data refs and then call this function to shift the
+ * scenery environment.
+ *
+ */
+XPLM_API void XPLMReloadScenery(void);
+
+/*
+ * XPLMGetSystemPath
+ *
+ * This function returns the full path to the X-System folder. Note that this
+ * is a directory path, so it ends in a trailing : or /. The buffer you pass
+ * should be at least 512 characters long.
+ *
+ */
+XPLM_API void XPLMGetSystemPath(
+ char * outSystemPath);
+
+/*
+ * XPLMGetPrefsPath
+ *
+ * This routine returns a full path to the proper directory to store
+ * preferences in. It ends in a : or /. The buffer you pass should be at
+ * least 512 characters long.
+ *
+ */
+XPLM_API void XPLMGetPrefsPath(
+ char * outPrefsPath);
+
+/*
+ * XPLMGetDirectorySeparator
+ *
+ * This routine returns a string with one char and a null terminator that is
+ * the directory separator for the current platform. This allows you to write
+ * code that concatinates directory paths without having to #ifdef for
+ * platform.
+ *
+ */
+XPLM_API const char * XPLMGetDirectorySeparator(void);
+
+/*
+ * XPLMExtractFileAndPath
+ *
+ * Given a full path to a file, this routine separates the path from the file.
+ * If the path is a partial directory (e.g. ends in : or \) the trailing
+ * directory separator is removed. This routine works in-place; a pointer to
+ * the file part of the buffer is returned; the original buffer still starts
+ * with the path.
+ *
+ */
+XPLM_API char * XPLMExtractFileAndPath(
+ char * inFullPath);
+
+/*
+ * XPLMGetDirectoryContents
+ *
+ * This routine returns a list of files in a directory (specified by a full
+ * path, no trailing : or \). The output is returned as a list of NULL
+ * terminated strings. An index array (if specified) is filled with pointers
+ * into the strings. This routine The last file is indicated by a zero-length
+ * string (and NULL in the indices). This routine will return 1 if you had
+ * capacity for all files or 0 if you did not. You can also skip a given
+ * number of files.
+ *
+ * inDirectoryPath - a null terminated C string containing the full path to
+ * the directory with no trailing directory char.
+ *
+ * inFirstReturn - the zero-based index of the first file in the directory to
+ * return. (Usually zero to fetch all in one pass.)
+ *
+ * outFileNames - a buffer to receive a series of sequential null terminated
+ * C-string file names. A zero-length C string will be appended to the very
+ * end.
+ *
+ * inFileNameBufSize - the size of the file name buffer in bytes.
+ *
+ * outIndices - a pointer to an array of character pointers that will become
+ * an index into the directory. The last file will be followed by a NULL
+ * value. Pass NULL if you do not want indexing information.
+ *
+ * inIndexCount - the max size of the index in entries.
+ *
+ * outTotalFiles - if not NULL, this is filled in with the number of files in
+ * the directory.
+ *
+ * outReturnedFiles - if not NULL, the number of files returned by this
+ * iteration.
+ *
+ * Return value - 1 if all info could be returned, 0 if there was a buffer
+ * overrun.
+ *
+ * WARNING: Before X-Plane 7 this routine did not properly iterate through
+ * directories. If X-Plane 6 compatibility is needed, use your own code to
+ * iterate directories.
+ *
+ */
+XPLM_API int XPLMGetDirectoryContents(
+ const char * inDirectoryPath,
+ int inFirstReturn,
+ char * outFileNames,
+ int inFileNameBufSize,
+ char ** outIndices, /* Can be NULL */
+ int inIndexCount,
+ int * outTotalFiles, /* Can be NULL */
+ int * outReturnedFiles); /* Can be NULL */
+
+/*
+ * XPLMInitialized
+ *
+ * This function returns 1 if X-Plane has properly initialized the plug-in
+ * system. If this routine returns 0, many XPLM functions will not work.
+ *
+ * NOTE: Under normal circumstances a plug-in should never be running while
+ * the plug-in manager is not initialized.
+ *
+ * WARNING: This function is generally not needed and may be deprecated in the
+ * future.
+ *
+ */
+XPLM_API int XPLMInitialized(void);
+
+/*
+ * XPLMGetVersions
+ *
+ * This routine returns the revision of both X-Plane and the XPLM DLL. All
+ * versions are three-digit decimal numbers (e.g. 606 for version 6.06 of
+ * X-Plane); the current revision of the XPLM is 200 (2.00). This routine
+ * also returns the host ID of the app running us.
+ *
+ * The most common use of this routine is to special-case around x-plane
+ * version-specific behavior.
+ *
+ */
+XPLM_API void XPLMGetVersions(
+ int * outXPlaneVersion,
+ int * outXPLMVersion,
+ XPLMHostApplicationID * outHostID);
+
+/*
+ * XPLMGetLanguage
+ *
+ * This routine returns the langauge the sim is running in.
+ *
+ */
+XPLM_API XPLMLanguageCode XPLMGetLanguage(void);
+
+/*
+ * XPLMDebugString
+ *
+ * This routine outputs a C-style string to the Log.txt file. The file is
+ * immediately flushed so you will not lose data. (This does cause a
+ * performance penalty.)
+ *
+ */
+XPLM_API void XPLMDebugString(
+ const char * inString);
+
+#if defined(XPLM200)
+/*
+ * XPLMSetErrorCallback
+ *
+ * XPLMSetErrorCallback installs an error-reporting callback for your plugin.
+ * Normally the plugin system performs minimum diagnostics to maximize
+ * performance. When you install an error callback, you will receive calls
+ * due to certain plugin errors, such as passing bad parameters or incorrect
+ * data.
+ *
+ * The intention is for you to install the error callback during debug
+ * sections and put a break-point inside your callback. This will cause you
+ * to break into the debugger from within the SDK at the point in your plugin
+ * where you made an illegal call.
+ *
+ * Installing an error callback may activate error checking code that would
+ * not normally run, and this may adversely affect performance, so do not
+ * leave error callbacks installed in shipping plugins.
+ *
+ */
+XPLM_API void XPLMSetErrorCallback(
+ XPLMError_f inCallback);
+#endif /* XPLM200 */
+
+#if defined(XPLM200)
+/*
+ * XPLMFindSymbol
+ *
+ * This routine will attempt to find the symbol passed in the inString
+ * parameter. If the symbol is found a pointer the function is returned,
+ * othewise the function will return NULL.
+ *
+ */
+XPLM_API void * XPLMFindSymbol(
+ const char * inString);
+#endif /* XPLM200 */
+
+#if defined(XPLM200)
+/*
+ * XPLMLoadDataFile
+ *
+ * Loads a data file of a given type. Paths must be relative to the X-System
+ * folder. To clear the replay, pass a NULL file name (this is only valid with
+ * replay movies, not sit files).
+ *
+ */
+XPLM_API int XPLMLoadDataFile(
+ XPLMDataFileType inFileType,
+ const char * inFilePath); /* Can be NULL */
+#endif /* XPLM200 */
+
+#if defined(XPLM200)
+/*
+ * XPLMSaveDataFile
+ *
+ * Saves the current situation or replay; paths are relative to the X-System
+ * folder.
+ *
+ */
+XPLM_API int XPLMSaveDataFile(
+ XPLMDataFileType inFileType,
+ const char * inFilePath);
+#endif /* XPLM200 */
+
+#if defined(XPLM200)
+/***************************************************************************
+ * X-PLANE COMMAND MANAGEMENT
+ ***************************************************************************/
+/*
+ * The command management APIs let plugins interact with the command-system in
+ * X-Plane, the abstraction behind keyboard presses and joystick buttons.
+ * This API lets you create new commands and modify the behavior (or get
+ * notification) of existing ones.
+ *
+ * An X-Plane command consists of three phases: a beginning, continuous
+ * repetition, and an ending. The command may be repeated zero times in the
+ * event that the user presses a button only momentarily.
+ *
+ */
+
+
+
+
+/*
+ * XPLMCommandPhase
+ *
+ * The phases of a command.
+ *
+ */
+enum {
+ /* The command is being started. */
+ xplm_CommandBegin = 0
+
+ /* The command is continuing to execute. */
+ ,xplm_CommandContinue = 1
+
+ /* The command has ended. */
+ ,xplm_CommandEnd = 2
+
+
+};
+typedef int XPLMCommandPhase;
+
+/*
+ * XPLMCommandRef
+ *
+ * A command ref is an opaque identifier for an X-Plane command. Command
+ * references stay the same for the life of your plugin but not between
+ * executions of X-Plane. Command refs are used to execute commands, create
+ * commands, and create callbacks for particular commands.
+ *
+ * Note that a command is not "owned" by a particular plugin. Since many
+ * plugins may participate in a command's execution, the command does not go
+ * away if the plugin that created it is unloaded.
+ *
+ */
+typedef void * XPLMCommandRef;
+
+/*
+ * XPLMCommandCallback_f
+ *
+ * A command callback is a function in your plugin that is called when a
+ * command is pressed. Your callback receives the commadn reference for the
+ * particular command, the phase of the command that is executing, and a
+ * reference pointer that you specify when registering the callback.
+ *
+ * Your command handler should return 1 to let processing of the command
+ * continue to other plugins and X-Plane, or 0 to halt processing,
+ * potentially bypassing X-Plane code.
+ *
+ */
+typedef int (* XPLMCommandCallback_f)(
+ XPLMCommandRef inCommand,
+ XPLMCommandPhase inPhase,
+ void * inRefcon);
+
+/*
+ * XPLMFindCommand
+ *
+ * XPLMFindCommand looks up a command by name, and returns its command
+ * reference or NULL if the command does not exist.
+ *
+ */
+XPLM_API XPLMCommandRef XPLMFindCommand(
+ const char * inName);
+
+/*
+ * XPLMCommandBegin
+ *
+ * XPLMCommandBegin starts the execution of a command, specified by its
+ * command reference. The command is "held down" until XPLMCommandEnd is
+ * called.
+ *
+ */
+XPLM_API void XPLMCommandBegin(
+ XPLMCommandRef inCommand);
+
+/*
+ * XPLMCommandEnd
+ *
+ * XPLMCommandEnd ends the execution of a given command that was started with
+ * XPLMCommandBegin.
+ *
+ */
+XPLM_API void XPLMCommandEnd(
+ XPLMCommandRef inCommand);
+
+/*
+ * XPLMCommandOnce
+ *
+ * This executes a given command momentarily, that is, the command begins and
+ * ends immediately.
+ *
+ */
+XPLM_API void XPLMCommandOnce(
+ XPLMCommandRef inCommand);
+
+/*
+ * XPLMCreateCommand
+ *
+ * XPLMCreateCommand creates a new command for a given string. If the command
+ * already exists, the existing command reference is returned. The
+ * description may appear in user interface contexts, such as the joystick
+ * configuration screen.
+ *
+ */
+XPLM_API XPLMCommandRef XPLMCreateCommand(
+ const char * inName,
+ const char * inDescription);
+
+/*
+ * XPLMRegisterCommandHandler
+ *
+ * XPLMRegisterCommandHandler registers a callback to be called when a command
+ * is executed. You provide a callback with a reference pointer.
+ *
+ * If inBefore is true, your command handler callback will be executed before
+ * X-Plane executes the command, and returning 0 from your callback will
+ * disable X-Plane's processing of the command. If inBefore is false, your
+ * callback will run after X-Plane. (You can register a single callback both
+ * before and after a command.)
+ *
+ */
+XPLM_API void XPLMRegisterCommandHandler(
+ XPLMCommandRef inComand,
+ XPLMCommandCallback_f inHandler,
+ int inBefore,
+ void * inRefcon);
+
+/*
+ * XPLMUnregisterCommandHandler
+ *
+ * XPLMUnregisterCommandHandler removes a command callback registered with
+ * XPLMRegisterCommandHandler.
+ *
+ */
+XPLM_API void XPLMUnregisterCommandHandler(
+ XPLMCommandRef inComand,
+ XPLMCommandCallback_f inHandler,
+ int inBefore,
+ void * inRefcon);
+
+#endif /* XPLM200 */
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/X-Plane-SDK/Delphi/Widgets/XPStandardWidgets.pas b/X-Plane-SDK/Delphi/Widgets/XPStandardWidgets.pas
new file mode 100755
index 0000000..bde7c77
--- /dev/null
+++ b/X-Plane-SDK/Delphi/Widgets/XPStandardWidgets.pas
@@ -0,0 +1,497 @@
+{
+ Copyright 2005-2012 Sandy Barbour and Ben Supnik
+
+ All rights reserved. See license.txt for usage.
+
+ X-Plane SDK Version: 2.1.1
+}
+
+UNIT XPStandardWidgets;
+INTERFACE
+{
+ XPStandardWidgets - THEORY OF OPERATION
+
+ The standard widgets are widgets built into the widgets library. While you
+ can gain access to the widget function that drives them, you generally use
+ them by calling XPCreateWidget and then listening for special messages,
+ etc.
+
+ The standard widgets often send mesages to themselves when the user
+ performs an event; these messages are sent up the widget hierarchy until
+ they are handled. So you can add a widget proc directly to a push button
+ (for example) to intercept the message when it is clicked, or you can put
+ one widget proc on a window for all of the push buttons in the window.
+ Most of these messages contain the original widget ID as a parameter so you
+ can know which widget is messaging no matter who it is sent to.
+}
+
+USES XPWidgetDefs;
+ {$A4}
+{$IFDEF MSWINDOWS}
+ {$DEFINE DELPHI}
+{$ENDIF}
+{___________________________________________________________________________
+ * MAIN WINDOW
+ ___________________________________________________________________________}
+{
+ The main window widget class provides a "window" as the user knows it.
+ These windows are dragable and can be selected. Use them to create
+ floating windows and non-modal dialogs.
+}
+
+
+
+CONST
+ xpWidgetClass_MainWindow = 1;
+
+ {
+ Main Window Type Values
+
+ These type values are used to control the appearance of a main window.
+ }
+ { The standard main window; pin stripes on XP7, metal frame on XP 6. }
+ xpMainWindowStyle_MainWindow = 0
+;
+ { A translucent dark gray window, like the one ATC messages appear in. }
+ xpMainWindowStyle_Translucent = 1
+;
+
+ {
+ Main Window Properties
+
+ }
+ { This property specifies the type of window. Set to one of the main window }
+ { types above. }
+ xpProperty_MainWindowType = 1100
+;
+ { This property specifies whether the main window has close boxes in its }
+ { corners. }
+ xpProperty_MainWindowHasCloseBoxes = 1200
+;
+
+ {
+ MainWindow Messages
+
+ }
+ { This message is sent when the close buttons are pressed for your window. }
+ xpMessage_CloseButtonPushed = 1200
+;
+
+{___________________________________________________________________________
+ * SUB WINDOW
+ ___________________________________________________________________________}
+{
+ X-plane dialogs are divided into separate areas; the sub window widgets
+ allow you to make these areas. Create one main window and place several
+ subwindows inside it. Then place your controls inside the subwindows.
+}
+
+
+
+CONST
+ xpWidgetClass_SubWindow = 2;
+
+ {
+ SubWindow Type Values
+
+ These values control the appearance of the subwindow.
+ }
+ { A panel that sits inside a main window. }
+ xpSubWindowStyle_SubWindow = 0
+;
+ { A screen that sits inside a panel for showing text information. }
+ xpSubWindowStyle_Screen = 2
+;
+ { A list view for scrolling lists. }
+ xpSubWindowStyle_ListView = 3
+;
+
+ {
+ SubWindow Properties
+
+ }
+ { This property specifies the type of window. Set to one of the subwindow }
+ { types above. }
+ xpProperty_SubWindowType = 1200
+;
+
+{___________________________________________________________________________
+ * BUTTON
+ ___________________________________________________________________________}
+{
+ The button class provides a number of different button styles and
+ behaviors, including push buttons, radio buttons, check boxes, etc. The
+ button label appears on or next to the button depending on the button's
+ appearance, or type.
+
+ The button's behavior is a separate property that dictates who it hilights
+ and what kinds of messages it sends. Since behavior and type are
+ different, you can do strange things like make check boxes that act as push
+ buttons or push buttons with radio button behavior.
+
+ In X-Plane 6 there were no check box graphics. The result is the following
+ behavior: in x-plane 6 all check box and radio buttons are round
+ (radio-button style) buttons; in X-Plane 7 they are all square (check-box
+ style) buttons. In a future version of x-plane, the xpButtonBehavior enums
+ will provide the correct graphic (check box or radio button) giving the
+ expected result.
+}
+
+
+
+CONST
+ xpWidgetClass_Button = 3;
+
+ {
+ Button Types
+
+ These define the visual appearance of buttons but not how they respond to
+ the mouse.
+ }
+ { This is a standard push button, like an "OK" or "Cancel" button in a dialog }
+ { box. }
+ xpPushButton = 0
+;
+ { A check box or radio button. Use this and the button behaviors below to }
+ { get the desired behavior. }
+ xpRadioButton = 1
+;
+ { A window close box. }
+ xpWindowCloseBox = 3
+;
+ { A small down arrow. }
+ xpLittleDownArrow = 5
+;
+ { A small up arrow. }
+ xpLittleUpArrow = 6
+;
+
+ {
+ Button Behavior Values
+
+ These define how the button responds to mouse clicks.
+ }
+ { Standard push button behavior. The button hilites while the mouse is }
+ { clicked over it and unhilites when the mouse is moved outside of it or }
+ { released. If the mouse is released over the button, the }
+ { xpMsg_PushButtonPressed message is sent. }
+ xpButtonBehaviorPushButton = 0
+;
+ { Check box behavior. The button immediately toggles its value when the }
+ { mouse is clicked and sends out a xpMsg_ButtonStateChanged message. }
+ xpButtonBehaviorCheckBox = 1
+;
+ { Radio button behavior. The button immediately sets its state to one and }
+ { sends out a xpMsg_ButtonStateChanged message if it was not already set to }
+ { one. You must turn off other radio buttons in a group in your code. }
+ xpButtonBehaviorRadioButton = 2
+;
+
+ {
+ Button Properties
+
+ }
+ { This property sets the visual type of button. Use one of the button types }
+ { above. }
+ xpProperty_ButtonType = 1300
+;
+ { This property sets the button's behavior. Use one of the button behaviors }
+ { above. }
+ xpProperty_ButtonBehavior = 1301
+;
+ { This property tells whether a check box or radio button is "checked" or }
+ { not. Not used for push buttons. }
+ xpProperty_ButtonState = 1302
+;
+
+ {
+ Button Messages
+
+ These messages are sent by the button to itself and then up the widget
+ chain when the button is clicked. (You may intercept them by providing a
+ widget handler for the button itself or by providing a handler in a parent
+ widget.)
+ }
+ { This message is sent when the user completes a click and release in a }
+ { button with push button behavior. Parameter one of the message is the }
+ { widget ID of the button. This message is dispatched up the widget }
+ { hierarchy. }
+ xpMsg_PushButtonPressed = 1300
+;
+ { This message is sent when a button is clicked that has radio button or }
+ { check box behavior and its value changes. (Note that if the value changes }
+ { by setting a property you do not receive this message!) Parameter one is }
+ { the widget ID of the button, parameter 2 is the new state value, either }
+ { zero or one. This message is dispatched up the widget hierarchy. }
+ xpMsg_ButtonStateChanged = 1301
+;
+
+{___________________________________________________________________________
+ * TEXT FIELD
+ ___________________________________________________________________________}
+{
+ The text field widget provides an editable text field including mouse
+ selection and keyboard navigation. The contents of the text field are its
+ descriptor. (The descriptor changes as the user types.)
+
+ The text field can have a number of types, that effect the visual layout of
+ the text field. The text field sends messages to itself so you may control
+ its behavior.
+
+ If you need to filter keystrokes, add a new handler and intercept the key
+ press message. Since key presses are passed by pointer, you can modify the
+ keystroke and pass it through to the text field widget.
+
+ WARNING: in x-plane before 7.10 (including 6.70) null characters could
+ crash x-plane. To prevent this, wrap this object with a filter function
+ (more instructions can be found on the SDK website).
+}
+
+
+
+CONST
+ xpWidgetClass_TextField = 4;
+
+ {
+ Text Field Type Values
+
+ These control the look of the text field.
+ }
+ { A field for text entry. }
+ xpTextEntryField = 0
+;
+ { A transparent text field. The user can type and the text is drawn, but no }
+ { background is drawn. You can draw your own background by adding a widget }
+ { handler and prehandling the draw message. }
+ xpTextTransparent = 3
+;
+ { A translucent edit field, dark gray. }
+ xpTextTranslucent = 4
+;
+
+ {
+ Text Field Properties
+
+ }
+ { This is the character position the selection starts at, zero based. If it }
+ { is the same as the end insertion point, the insertion point is not a }
+ { selection. }
+ xpProperty_EditFieldSelStart = 1400
+;
+ { This is the character position of the end of the selection. }
+ xpProperty_EditFieldSelEnd = 1401
+;
+ { This is the character position a drag was started at if the user is }
+ { dragging to select text, or -1 if a drag is not in progress. }
+ xpProperty_EditFieldSelDragStart = 1402
+;
+ { This is the type of text field to display, from the above list. }
+ xpProperty_TextFieldType = 1403
+;
+ { Set this property to 1 to password protect the field. Characters will be }
+ { drawn as *s even though the descriptor will contain plain-text. }
+ xpProperty_PasswordMode = 1404
+;
+ { The max number of characters you can enter, if limited. Zero means }
+ { unlimited. }
+ xpProperty_MaxCharacters = 1405
+;
+ { The first visible character on the left. This effectively scrolls the text }
+ { field. }
+ xpProperty_ScrollPosition = 1406
+;
+ { The font to draw the field's text with. (An XPLMFontID.) }
+ xpProperty_Font = 1407
+;
+ { This is the active side of the insert selection. (Internal) }
+ xpProperty_ActiveEditSide = 1408
+;
+
+ {
+ Text Field Messages
+
+ }
+ { Text Field Messages }
+ { }
+ { The text field sends this message to itself when its text changes. It }
+ { sends the message up the call chain; param1 is the text field's widget ID. }
+ xpMsg_TextFieldChanged = 1400
+;
+
+{___________________________________________________________________________
+ * SCROLL BAR
+ ___________________________________________________________________________}
+{
+ A standard scroll bar or slider control. The scroll bar has a minimum,
+ maximum and current value that is updated when the user drags it. The
+ scroll bar sends continuous messages as it is dragged.
+}
+
+
+
+CONST
+ xpWidgetClass_ScrollBar = 5;
+
+ {
+ Scroll Bar Type Values
+
+ This defines how the scroll bar looks.
+ }
+ { Scroll bar types. }
+ { }
+ { A standard x-plane scroll bar (with arrows on the ends). }
+ xpScrollBarTypeScrollBar = 0
+;
+ { A slider, no arrows. }
+ xpScrollBarTypeSlider = 1
+;
+
+ {
+ Scroll Bar Properties
+
+ }
+ { The current position of the thumb (in between the min and max, inclusive) }
+ xpProperty_ScrollBarSliderPosition = 1500
+;
+ { The value the scroll bar has when the thumb is in the lowest position. }
+ xpProperty_ScrollBarMin = 1501
+;
+ { The value the scroll bar has when the thumb is in the highest position. }
+ xpProperty_ScrollBarMax = 1502
+;
+ { How many units to moev the scroll bar when clicking next to the thumb. The }
+ { scroll bar always moves one unit when the arrows are clicked. }
+ xpProperty_ScrollBarPageAmount = 1503
+;
+ { The type of scrollbar from the enums above. }
+ xpProperty_ScrollBarType = 1504
+;
+ { Used internally. }
+ xpProperty_ScrollBarSlop = 1505
+;
+
+ {
+ Scroll Bar Messages
+
+ }
+ { The Scroll Bar sends this message when the slider position changes. It }
+ { sends the message up the call chain; param1 is the Scroll Bar widget ID. }
+ xpMsg_ScrollBarSliderPositionChanged = 1500
+;
+
+{___________________________________________________________________________
+ * CAPTION
+ ___________________________________________________________________________}
+{
+ A caption is a simple widget that shows its descriptor as a string, useful
+ for labeling parts of a window. It always shows its descriptor as its
+ string and is otherwise transparent.
+}
+
+
+
+CONST
+ xpWidgetClass_Caption = 6;
+
+ {
+ Caption Properties
+
+ }
+ { This property specifies whether the caption is lit; use lit captions }
+ { against screens. }
+ xpProperty_CaptionLit = 1600
+;
+
+{___________________________________________________________________________
+ * GENERAL GRAPHICS
+ ___________________________________________________________________________}
+{
+ The general graphics widget can show one of many icons available from
+ x-plane.
+}
+
+
+
+CONST
+ xpWidgetClass_GeneralGraphics = 7;
+
+ {
+ General Graphics Types Values
+
+ These define the icon for the general graphics.
+ }
+ xpShip = 4
+;
+ xpILSGlideScope = 5
+;
+ xpMarkerLeft = 6
+;
+ xp_Airport = 7
+;
+ xpNDB = 8
+;
+ xpVOR = 9
+;
+ xpRadioTower = 10
+;
+ xpAircraftCarrier = 11
+;
+ xpFire = 12
+;
+ xpMarkerRight = 13
+;
+ xpCustomObject = 14
+;
+ xpCoolingTower = 15
+;
+ xpSmokeStack = 16
+;
+ xpBuilding = 17
+;
+ xpPowerLine = 18
+;
+ xpVORWithCompassRose = 19
+;
+ xpOilPlatform = 21
+;
+ xpOilPlatformSmall = 22
+;
+ xpWayPoint = 23
+;
+
+ {
+ General Graphics Properties
+
+ }
+ { This property controls the type of icon that is drawn. }
+ xpProperty_GeneralGraphicsType = 1700
+;
+
+{___________________________________________________________________________
+ * PROGRESS INDICATOR
+ ___________________________________________________________________________}
+{
+ This widget implements a progress indicator as seen when x-plane starts up.
+}
+
+
+
+CONST
+ xpWidgetClass_Progress = 8;
+
+ {
+ Progress Indicator Properties
+
+ }
+ { This is the current value of the progress indicator. }
+ xpProperty_ProgressPosition = 1800
+;
+ { This is the minimum value, equivalent to 0% filled. }
+ xpProperty_ProgressMin = 1801
+;
+ { This is the maximum value, equivalent to 100% filled. }
+ xpProperty_ProgressMax = 1802
+;
+
+IMPLEMENTATION
+END.
diff --git a/X-Plane-SDK/Delphi/Widgets/XPUIGraphics.pas b/X-Plane-SDK/Delphi/Widgets/XPUIGraphics.pas
new file mode 100755
index 0000000..f06806a
--- /dev/null
+++ b/X-Plane-SDK/Delphi/Widgets/XPUIGraphics.pas
@@ -0,0 +1,380 @@
+{
+ Copyright 2005-2012 Sandy Barbour and Ben Supnik
+
+ All rights reserved. See license.txt for usage.
+
+ X-Plane SDK Version: 2.1.1
+}
+
+UNIT XPUIGraphics;
+INTERFACE
+{
+
+}
+
+USES XPWidgetDefs;
+ {$A4}
+{$IFDEF MSWINDOWS}
+ {$DEFINE DELPHI}
+{$ENDIF}
+{___________________________________________________________________________
+ * UI GRAPHICS
+ ___________________________________________________________________________}
+{
+
+}
+
+
+ {
+ XPWindowStyle
+
+ There are a few built-in window styles in X-Plane that you can use.
+
+ Note that X-Plane 6 does not offer real shadow-compositing; you must make
+ sure to put a window on top of another window of the right style to the
+ shadows work, etc. This applies to elements with insets and shadows. The
+ rules are:
+
+ Sub windows must go on top of main windows, and screens and list views on
+ top of subwindows. Only help and main windows can be over the main screen.
+
+
+ With X-Plane 7 any window or element may be placed over any other element.
+
+ Some windows are scaled by stretching, some by repeating. The drawing
+ routines know which scaling method to use. The list view cannot be
+ rescaled in x-plane 6 because it has both a repeating pattern and a
+ gradient in one element. All other elements can be rescaled.
+ }
+TYPE
+ XPWindowStyle = (
+ { An LCD screen that shows help. }
+ xpWindow_Help = 0
+
+ { A dialog box window. }
+ ,xpWindow_MainWindow = 1
+
+ { A panel or frame within a dialog box window. }
+ ,xpWindow_SubWindow = 2
+
+ { An LCD screen within a panel to hold text displays. }
+ ,xpWindow_Screen = 4
+
+ { A list view within a panel for scrolling file names, etc. }
+ ,xpWindow_ListView = 5
+
+ );
+ PXPWindowStyle = ^XPWindowStyle;
+
+ {
+ XPDrawWindow
+
+ This routine draws a window of the given dimensions at the given offset on
+ the virtual screen in a given style. The window is automatically scaled as
+ appropriate using a bitmap scaling technique (scaling or repeating) as
+ appropriate to the style.
+ }
+ PROCEDURE XPDrawWindow(
+ inX1 : integer;
+ inY1 : integer;
+ inX2 : integer;
+ inY2 : integer;
+ inStyle : XPWindowStyle);
+{$IFDEF DELPHI}
+ cdecl; external 'XPWIDGETS.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPGetWindowDefaultDimensions
+
+ This routine returns the default dimensions for a window. Output is either
+ a minimum or fixed value depending on whether the window is scalable.
+ }
+ PROCEDURE XPGetWindowDefaultDimensions(
+ inStyle : XPWindowStyle;
+ outWidth : Pinteger; { Can be nil }
+ outHeight : Pinteger); { Can be nil }
+{$IFDEF DELPHI}
+ cdecl; external 'XPWIDGETS.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPElementStyle
+
+ Elements are individually drawable UI things like push buttons, etc. The
+ style defines what kind of element you are drawing. Elements can be
+ stretched in one or two dimensions (depending on the element). Some
+ elements can be lit.
+
+ In x-plane 6 some elements must be drawn over metal. Some are scalable and
+ some are not. Any element can be drawn anywhere in x-plane 7.
+
+ Scalable Axis Required Background
+ }
+TYPE
+ XPElementStyle = (
+ { x metal }
+ xpElement_TextField = 6
+
+ { none metal }
+ ,xpElement_CheckBox = 9
+
+ { none metal }
+ ,xpElement_CheckBoxLit = 10
+
+ { none window header }
+ ,xpElement_WindowCloseBox = 14
+
+ { none window header }
+ ,xpElement_WindowCloseBoxPressed = 15
+
+ { x metal }
+ ,xpElement_PushButton = 16
+
+ { x metal }
+ ,xpElement_PushButtonLit = 17
+
+ { none any }
+ ,xpElement_OilPlatform = 24
+
+ { none any }
+ ,xpElement_OilPlatformSmall = 25
+
+ { none any }
+ ,xpElement_Ship = 26
+
+ { none any }
+ ,xpElement_ILSGlideScope = 27
+
+ { none any }
+ ,xpElement_MarkerLeft = 28
+
+ { none any }
+ ,xpElement_Airport = 29
+
+ { none any }
+ ,xpElement_Waypoint = 30
+
+ { none any }
+ ,xpElement_NDB = 31
+
+ { none any }
+ ,xpElement_VOR = 32
+
+ { none any }
+ ,xpElement_RadioTower = 33
+
+ { none any }
+ ,xpElement_AircraftCarrier = 34
+
+ { none any }
+ ,xpElement_Fire = 35
+
+ { none any }
+ ,xpElement_MarkerRight = 36
+
+ { none any }
+ ,xpElement_CustomObject = 37
+
+ { none any }
+ ,xpElement_CoolingTower = 38
+
+ { none any }
+ ,xpElement_SmokeStack = 39
+
+ { none any }
+ ,xpElement_Building = 40
+
+ { none any }
+ ,xpElement_PowerLine = 41
+
+ { none metal }
+ ,xpElement_CopyButtons = 45
+
+ { none metal }
+ ,xpElement_CopyButtonsWithEditingGrid = 46
+
+ { x, y metal }
+ ,xpElement_EditingGrid = 47
+
+ { THIS CAN PROBABLY BE REMOVED }
+ ,xpElement_ScrollBar = 48
+
+ { none any }
+ ,xpElement_VORWithCompassRose = 49
+
+ { none metal }
+ ,xpElement_Zoomer = 51
+
+ { x, y metal }
+ ,xpElement_TextFieldMiddle = 52
+
+ { none metal }
+ ,xpElement_LittleDownArrow = 53
+
+ { none metal }
+ ,xpElement_LittleUpArrow = 54
+
+ { none metal }
+ ,xpElement_WindowDragBar = 61
+
+ { none metal }
+ ,xpElement_WindowDragBarSmooth = 62
+
+ );
+ PXPElementStyle = ^XPElementStyle;
+
+ {
+ XPDrawElement
+
+ XPDrawElement draws a given element at an offset on the virtual screen in
+ set dimensions. EVEN if the element is not scalable, it will be scaled if
+ the width and height do not match the preferred dimensions; it'll just look
+ ugly. Pass inLit to see the lit version of the element; if the element
+ cannot be lit this is ignored.
+ }
+ PROCEDURE XPDrawElement(
+ inX1 : integer;
+ inY1 : integer;
+ inX2 : integer;
+ inY2 : integer;
+ inStyle : XPElementStyle;
+ inLit : integer);
+{$IFDEF DELPHI}
+ cdecl; external 'XPWIDGETS.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPGetElementDefaultDimensions
+
+ This routine returns the recommended or minimum dimensions of a given UI
+ element. outCanBeLit tells whether the element has both a lit and unlit
+ state. Pass NULL to not receive any of these parameters.
+ }
+ PROCEDURE XPGetElementDefaultDimensions(
+ inStyle : XPElementStyle;
+ outWidth : Pinteger; { Can be nil }
+ outHeight : Pinteger; { Can be nil }
+ outCanBeLit : Pinteger); { Can be nil }
+{$IFDEF DELPHI}
+ cdecl; external 'XPWIDGETS.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPTrackStyle
+
+ A track is a UI element that displays a value vertically or horizontally.
+ X-Plane has three kinds of tracks: scroll bars, sliders, and progress bars.
+ Tracks can be displayed either horizontally or vertically; tracks will
+ choose their own layout based on the larger dimension of their dimensions
+ (e.g. they know if they are tall or wide). Sliders may be lit or unlit
+ (showing the user manipulating them).
+
+ ScrollBar - this is a standard scroll bar with arrows and a thumb to drag.
+ Slider - this is a simple track with a ball in the middle that can be
+ slid. Progress - this is a progress indicator showing how a long task is
+ going.
+ }
+TYPE
+ XPTrackStyle = (
+ { not over metal can be lit can be rotated }
+ xpTrack_ScrollBar = 0
+
+ { over metal can be lit can be rotated }
+ ,xpTrack_Slider = 1
+
+ { over metal cannot be lit cannot be rotated }
+ ,xpTrack_Progress = 2
+
+ );
+ PXPTrackStyle = ^XPTrackStyle;
+
+ {
+ XPDrawTrack
+
+ This routine draws a track. You pass in the track dimensions and size; the
+ track picks the optimal orientation for these dimensions. Pass in the
+ track's minimum current and maximum values; the indicator will be
+ positioned appropriately. You can also specify whether the track is lit or
+ not.
+ }
+ PROCEDURE XPDrawTrack(
+ inX1 : integer;
+ inY1 : integer;
+ inX2 : integer;
+ inY2 : integer;
+ inMin : integer;
+ inMax : integer;
+ inValue : integer;
+ inTrackStyle : XPTrackStyle;
+ inLit : integer);
+{$IFDEF DELPHI}
+ cdecl; external 'XPWIDGETS.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPGetTrackDefaultDimensions
+
+ This routine returns a track's default smaller dimension; all tracks are
+ scalable in the larger dimension. It also returns whether a track can be
+ lit.
+ }
+ PROCEDURE XPGetTrackDefaultDimensions(
+ inStyle : XPTrackStyle;
+ outWidth : Pinteger;
+ outCanBeLit : Pinteger);
+{$IFDEF DELPHI}
+ cdecl; external 'XPWIDGETS.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPGetTrackMetrics
+
+ This routine returns the metrics of a track. If you want to write UI code
+ to manipulate a track, this routine helps you know where the mouse
+ locations are. For most other elements, the rectangle the element is drawn
+ in is enough information. However, the scrollbar drawing routine does some
+ automatic placement; this routine lets you know where things ended up. You
+ pass almost everything you would pass to the draw routine. You get out the
+ orientation, and other useful stuff.
+
+ Besides orientation, you get five dimensions for the five parts of a
+ scrollbar, which are the down button, down area (area before the thumb),
+ the thumb, and the up area and button. For horizontal scrollers, the left
+ button decreases; for vertical scrollers, the top button decreases.
+ }
+ PROCEDURE XPGetTrackMetrics(
+ inX1 : integer;
+ inY1 : integer;
+ inX2 : integer;
+ inY2 : integer;
+ inMin : integer;
+ inMax : integer;
+ inValue : integer;
+ inTrackStyle : XPTrackStyle;
+ outIsVertical : Pinteger;
+ outDownBtnSize : Pinteger;
+ outDownPageSize : Pinteger;
+ outThumbSize : Pinteger;
+ outUpPageSize : Pinteger;
+ outUpBtnSize : Pinteger);
+{$IFDEF DELPHI}
+ cdecl; external 'XPWIDGETS.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+IMPLEMENTATION
+END.
diff --git a/X-Plane-SDK/Delphi/Widgets/XPWidgetDefs.pas b/X-Plane-SDK/Delphi/Widgets/XPWidgetDefs.pas
new file mode 100755
index 0000000..2e55830
--- /dev/null
+++ b/X-Plane-SDK/Delphi/Widgets/XPWidgetDefs.pas
@@ -0,0 +1,441 @@
+{
+ Copyright 2005-2012 Sandy Barbour and Ben Supnik
+
+ All rights reserved. See license.txt for usage.
+
+ X-Plane SDK Version: 2.1.1
+}
+
+UNIT XPWidgetDefs;
+INTERFACE
+{
+
+}
+
+USES XPLMDefs;
+ {$A4}
+{$IFDEF MSWINDOWS}
+ {$DEFINE DELPHI}
+{$ENDIF}
+{___________________________________________________________________________
+ * WIDGET DEFINITIONS
+ ___________________________________________________________________________}
+{
+ A widget is a call-back driven screen entity like a push-button, window,
+ text entry field, etc.
+
+ Use the widget API to create widgets of various classes. You can nest them
+ into trees of widgets to create complex user interfaces.
+}
+
+
+
+TYPE
+ {
+ XPWidgetID
+
+ A Widget ID is an opaque unique non-zero handle identifying your widget.
+ Use 0 to specify "no widget". This type is defined as wide enough to hold
+ a pointer. You receive a widget ID when you create a new widget and then
+ use that widget ID to further refer to the widget.
+ }
+ XPWidgetID = pointer;
+ PXPWidgetID = ^XPWidgetID;
+
+ {
+ XPWidgetPropertyID
+
+ Properties are values attached to instances of your widgets. A property is
+ identified by a 32-bit ID and its value is the width of a pointer.
+
+ Each widget instance may have a property or not have it. When you set a
+ property on a widget for the first time, the property is added to the
+ widget; it then stays there for the life of the widget.
+
+ Some property IDs are predefined by the widget package; you can make up
+ your own property IDs as well.
+ }
+ XPWidgetPropertyID = (
+ { A window's refcon is an opaque value used by client code to find other data }
+ { based on it. }
+ xpProperty_Refcon = 0
+
+ { These properties are used by the utlities to implement dragging. }
+ ,xpProperty_Dragging = 1
+
+ ,xpProperty_DragXOff = 2
+
+ ,xpProperty_DragYOff = 3
+
+ { Is the widget hilited? (For widgets that support this kind of thing.) }
+ ,xpProperty_Hilited = 4
+
+ { Is there a C++ object attached to this widget? }
+ ,xpProperty_Object = 5
+
+ { If this property is 1, the widget package will use OpenGL to restrict }
+ { drawing to the Wiget's exposed rectangle. }
+ ,xpProperty_Clip = 6
+
+ { Is this widget enabled (for those that have a disabled state too)? }
+ ,xpProperty_Enabled = 7
+
+ { NOTE: Property IDs 1 - 999 are reserved for the widget's library. }
+ { }
+ { NOTE: Property IDs 1000 - 9999 are allocated to the standard widget classes }
+ { provided with the library Properties 1000 - 1099 are for widget class 0, }
+ { 1100 - 1199 for widget class 1, etc. }
+ ,xpProperty_UserStart = 10000
+
+ );
+ PXPWidgetPropertyID = ^XPWidgetPropertyID;
+
+ {
+ XPMouseState_t
+
+ When the mouse is clicked or dragged, a pointer to this structure is passed
+ to your widget function.
+ }
+ XPMouseState_t = RECORD
+ x : integer;
+ y : integer;
+ { Mouse Button number, left = 0 (right button not yet supported. }
+ button : integer;
+{$IFDEF XPLM200}
+ { Scroll wheel delta (button in this case would be the wheel axis number). }
+ delta : integer;
+{$ENDIF}
+ END;
+ PXPMouseState_t = ^XPMouseState_t;
+
+ {
+ XPKeyState_t
+
+ When a key is pressed, a pointer to this struct is passed to your widget
+ function.
+ }
+ XPKeyState_t = RECORD
+ { The ASCII key that was pressed. WARNING: this may be 0 for some non-ASCII }
+ { key sequences. }
+ key : char;
+ { The flags. Make sure to check this if you only want key-downs! }
+ flags : XPLMKeyFlags;
+ { The virtual key code for the key }
+ vkey : char;
+ END;
+ PXPKeyState_t = ^XPKeyState_t;
+
+ {
+ XPWidgetGeometryChange_t
+
+ This structure contains the deltas for your widget's geometry when it
+ changes.
+ }
+ XPWidgetGeometryChange_t = RECORD
+ dx : integer;
+ { +Y = the widget moved up }
+ dy : integer;
+ dwidth : integer;
+ dheight : integer;
+ END;
+ PXPWidgetGeometryChange_t = ^XPWidgetGeometryChange_t;
+
+ {
+ XPDispatchMode
+
+ The dispatching modes describe how the widgets library sends out messages.
+ Currently there are three modes:
+ }
+ XPDispatchMode = (
+ { The message will only be sent to the target widget. }
+ xpMode_Direct = 0
+
+ { The message is sent to the target widget, then up the chain of parents }
+ { until the message is handled or a parentless widget is reached. }
+ ,xpMode_UpChain = 1
+
+ { The message is sent to the target widget and then all of its children }
+ { recursively depth-first. }
+ ,xpMode_Recursive = 2
+
+ { The message is snet just to the target, but goes to every callback, even if }
+ { it is handled. }
+ ,xpMode_DirectAllCallbacks = 3
+
+ { The message is only sent to the very first handler even if it is not }
+ { accepted. (This is really only useful for some internal Widget Lib }
+ { functions. }
+ ,xpMode_Once = 4
+
+ );
+ PXPDispatchMode = ^XPDispatchMode;
+
+ {
+ XPWidgetClass
+
+ Widget classes define predefined widget types. A widget class basically
+ specifies from a library the widget function to be used for the widget.
+ Most widgets can be made right from classes.
+ }
+ XPWidgetClass = integer;
+ PXPWidgetClass = ^XPWidgetClass;
+
+CONST
+ { An unspecified widget class. Other widget classes are in }
+ { XPStandardWidgets.h }
+ xpWidgetClass_None = 0;
+
+{___________________________________________________________________________
+ * WIDGET MESSAGES
+ ___________________________________________________________________________}
+{
+
+}
+
+
+ {
+ XPWidgetMessage
+
+ Widgets receive 32-bit messages indicating what action is to be taken or
+ notifications of events. The list of messages may be expanded.
+ }
+TYPE
+ XPWidgetMessage = (
+ { No message, should not be sent. }
+ xpMsg_None = 0
+
+ { The create message is sent once per widget that is created with your widget }
+ { function and once for any widget that has your widget function attached. }
+ { }
+ { Dispatching: Direct }
+ { }
+ { Param 1: 1 if you are being added as a subclass, 0 if the widget is first }
+ { being created. }
+ ,xpMsg_Create = 1
+
+ { The destroy message is sent once for each message that is destroyed that }
+ { has your widget function. }
+ { }
+ { Dispatching: Direct for all }
+ { }
+ { Param 1: 1 if being deleted by a recursive delete to the parent, 0 for }
+ { explicit deletion. }
+ ,xpMsg_Destroy = 2
+
+ { The paint message is sent to your widget to draw itself. The paint message }
+ { is the bare-bones message; in response you must draw yourself, draw your }
+ { children, set up clipping and culling, check for visibility, etc. If you }
+ { don't want to do all of this, ignore the paint message and a draw message }
+ { (see below) will be sent to you. }
+ { }
+ { Dispatching: Direct }
+ ,xpMsg_Paint = 3
+
+ { The draw message is sent to your widget when it is time to draw yourself. }
+ { OpenGL will be set up to draw in 2-d global screen coordinates, but you }
+ { should use the XPLM to set up OpenGL state. }
+ { }
+ { Dispatching: Direct }
+ ,xpMsg_Draw = 4
+
+ { The key press message is sent once per key that is pressed. The first }
+ { parameter is the type of key code (integer or char) and the second is the }
+ { code itself. By handling this event, you consume the key stroke. }
+ { }
+ { Handling this message 'consumes' the keystroke; not handling it passes it }
+ { to your parent widget. }
+ { }
+ { Dispatching: Up Chain }
+ { }
+ { : Param 1: A pointer to an XPKeyState_t structure with the keystroke. }
+ ,xpMsg_KeyPress = 5
+
+ { Keyboard focus is being given to you. By handling this message you accept }
+ { keyboard focus. The first parameter will be one if a child of yours gave }
+ { up focus to you, 0 if someone set focus on you explicitly. }
+ { }
+ { : Handling this message accepts focus; not handling refuses focus. }
+ { }
+ { Dispatching: direct }
+ { }
+ { Param 1: 1 if you are gaining focus because your child is giving it up, 0 }
+ { if someone is explicitly giving you focus. }
+ ,xpMsg_KeyTakeFocus = 6
+
+ { Keyboard focus is being taken away from you. The first parameter will be }
+ { one if you are losing focus because another widget is taking it, or 0 if }
+ { someone called the API to make you lose focus explicitly. }
+ { }
+ { Dispatching: Direct }
+ { }
+ { Param 1: 1 if focus is being taken by another widget, 0 if code requested }
+ { to remove focus. }
+ ,xpMsg_KeyLoseFocus = 7
+
+ { You receive one mousedown event per click with a mouse-state structure }
+ { pointed to by parameter 1, by accepting this you eat the click, otherwise }
+ { your parent gets it. You will not receive drag and mouse up messages if }
+ { you do not accept the down message. }
+ { }
+ { Handling this message consumes the mouse click, not handling it passes it }
+ { to the next widget. You can act 'transparent' as a window by never handling }
+ { moues clicks to certain areas. }
+ { }
+ { Dispatching: Up chain NOTE: Technically this is direct dispatched, but the }
+ { widgets library will shop it to each widget until one consumes the click, }
+ { making it effectively "up chain". }
+ { }
+ { Param 1: A pointer to an XPMouseState_t containing the mouse status. }
+ ,xpMsg_MouseDown = 8
+
+ { You receive a series of mouse drag messages (typically one per frame in the }
+ { sim) as the mouse is moved once you have accepted a mouse down message. }
+ { Parameter one points to a mouse-state structure describing the mouse }
+ { location. You will continue to receive these until the mouse button is }
+ { released. You may receive multiple mouse state messages with the same mouse }
+ { position. You will receive mouse drag events even if the mouse is dragged }
+ { out of your current or original bounds at the time of the mouse down. }
+ { }
+ { Dispatching: Direct }
+ { }
+ { Param 1: A pointer to an XPMouseState_t containing the mouse status. }
+ ,xpMsg_MouseDrag = 9
+
+ { The mouseup event is sent once when the mouse button is released after a }
+ { drag or click. You only receive this message if you accept the mouseDown }
+ { message. Parameter one points to a mouse state structure. }
+ { }
+ { Dispatching: Direct }
+ { }
+ { Param 1: A pointer to an XPMouseState_t containing the mouse status. }
+ ,xpMsg_MouseUp = 10
+
+ { Your geometry or a child's geometry is being changed. }
+ { }
+ { Dispatching: Up chain }
+ { }
+ { Param 1: The widget ID of the original reshaped target. }
+ { }
+ { Param 2: A pointer to a XPWidgetGeometryChange_t struct describing the }
+ { change. }
+ ,xpMsg_Reshape = 11
+
+ { Your exposed area has changed. }
+ { }
+ { Dispatching: Direct }
+ ,xpMsg_ExposedChanged = 12
+
+ { A child has been added to you. The child's ID is passed in parameter one. }
+ { }
+ { }
+ { Dispatching: Direct }
+ { }
+ { Param 1: The Widget ID of the child being added. }
+ ,xpMsg_AcceptChild = 13
+
+ { A child has been removed from to you. The child's ID is passed in }
+ { parameter one. }
+ { }
+ { Dispatching: Direct }
+ { }
+ { Param 1: The Widget ID of the child being removed. }
+ ,xpMsg_LoseChild = 14
+
+ { You now have a new parent, or have no parent. The parent's ID is passed }
+ { in, or 0 for no parent. }
+ { }
+ { Dispatching: Direct }
+ { }
+ { Param 1: The Widget ID of your parent }
+ ,xpMsg_AcceptParent = 15
+
+ { You or a child has been shown. Note that this does not include you being }
+ { shown because your parent was shown, you were put in a new parent, your }
+ { root was shown, etc. }
+ { }
+ { Dispatching: Up chain }
+ { }
+ { Param 1: The widget ID of the shown widget. }
+ ,xpMsg_Shown = 16
+
+ { You have been hidden. See limitations above. }
+ { }
+ { Dispatching: Up chain }
+ { }
+ { Param 1: The widget ID of the hidden widget. }
+ ,xpMsg_Hidden = 17
+
+ { Your descriptor has changed. }
+ { }
+ { Dispatching: Direct }
+ ,xpMsg_DescriptorChanged = 18
+
+ { A property has changed. Param 1 contains the property ID. }
+ { }
+ { Dispatching: Direct }
+ { }
+ { Param 1: The Property ID being changed. }
+ { }
+ { Param 2: The new property value }
+ ,xpMsg_PropertyChanged = 19
+
+{$IFDEF XPLM200}
+ { The mouse wheel has moved. }
+ { }
+ { Return 1 to consume the mouse wheel move, or 0 to pass the message to a }
+ { parent. Dispatching: Up chain }
+ { }
+ { Param 1: A pointer to an XPMouseState_t containing the mouse status. }
+ ,xpMsg_MouseWheel = 20
+{$ENDIF}
+
+{$IFDEF XPLM200}
+ { The cursor is over your widget. If you consume this message, change the }
+ { XPLMCursorStatus value to indicate the desired result, with the same rules }
+ { as in XPLMDisplay.h. }
+ { }
+ { Return 1 to consume this message, 0 to pass it on. }
+ { }
+ { Dispatching: Up chain Param 1: A pointer to an XPMouseState_t struct }
+ { containing the mouse status. }
+ { }
+ { Param 2: A pointer to a XPLMCursorStatus - set this to the cursor result }
+ { you desire. }
+ ,xpMsg_CursorAdjust = 21
+{$ENDIF}
+
+ { NOTE: Message IDs 1000 - 9999 are allocated to the standard widget classes }
+ { provided with the library with 1000 - 1099 for widget class 0, 1100 - 1199 }
+ { for widget class 1, etc. Message IDs 10,000 and beyond are for plugin use. }
+ ,xpMsg_UserStart = 10000
+
+ );
+ PXPWidgetMessage = ^XPWidgetMessage;
+
+{___________________________________________________________________________
+ * WIDGET CALLBACK FUNCTION
+ ___________________________________________________________________________}
+{
+
+}
+
+
+ {
+ XPWidgetFunc_t
+
+ This function defines your custom widget's behavior. It will be called by
+ the widgets library to send messages to your widget. The message and
+ widget ID are passed in, as well as two ptr-width signed parameters whose
+ meaning varies with the message. Return 1 to indicate that you have
+ processed the message, 0 to indicate that you have not. For any message
+ that is not understood, return 0.
+ }
+TYPE
+ XPWidgetFunc_t = FUNCTION(
+ inMessage : XPWidgetMessage;
+ inWidget : XPWidgetID;
+ inParam1 : intptr_t;
+ inParam2 : intptr_t) : integer; cdecl;
+
+IMPLEMENTATION
+END.
diff --git a/X-Plane-SDK/Delphi/Widgets/XPWidgetUtils.pas b/X-Plane-SDK/Delphi/Widgets/XPWidgetUtils.pas
new file mode 100755
index 0000000..9dcb1d2
--- /dev/null
+++ b/X-Plane-SDK/Delphi/Widgets/XPWidgetUtils.pas
@@ -0,0 +1,225 @@
+{
+ Copyright 2005-2012 Sandy Barbour and Ben Supnik
+
+ All rights reserved. See license.txt for usage.
+
+ X-Plane SDK Version: 2.1.1
+}
+
+UNIT XPWidgetUtils;
+INTERFACE
+{
+ XPWidgetUtils - USAGE NOTES
+
+ The XPWidgetUtils library contains useful functions that make writing and
+ using widgets less of a pain.
+
+ One set of functions are the widget behavior functions. These functions
+ each add specific useful behaviors to widgets. They can be used in two
+ manners:
+
+ 1. You can add a widget behavior function to a widget as a callback proc
+ using the XPAddWidgetCallback function. The widget will gain that
+ behavior. Remember that the last function you add has highest priority.
+ You can use this to change or augment the behavior of an existing finished
+ widget.
+
+ 2. You can call a widget function from inside your own widget function.
+ This allows you to include useful behaviors in custom-built widgets. A
+ number of the standard widgets get their behavior from this library. To do
+ this, call the behavior function from your function first. If it returns
+ 1, that means it handled the event and you don't need to; simply return 1.
+}
+
+USES XPWidgetDefs;
+ {$A4}
+{$IFDEF MSWINDOWS}
+ {$DEFINE DELPHI}
+{$ENDIF}
+{___________________________________________________________________________
+ * GENERAL UTILITIES
+ ___________________________________________________________________________}
+{
+
+}
+
+
+
+ {
+ XPWidgetCreate_t
+
+ This structure contains all of the parameters needed to create a wiget. It
+ is used with XPUCreateWidgets to create widgets in bulk from an array. All
+ parameters correspond to those of XPCreateWidget except for the container
+ index. If the container index is equal to the index of a widget in the
+ array, the widget in the array passed to XPUCreateWidgets is used as the
+ parent of this widget. Note that if you pass an index greater than your
+ own position in the array, the parent you are requesting will not exist
+ yet. If the container index is NO_PARENT, the parent widget is specified as
+ NULL. If the container index is PARAM_PARENT, the widget passed into
+ XPUCreateWidgets is used.
+ }
+TYPE
+ XPWidgetCreate_t = RECORD
+ left : integer;
+ top : integer;
+ right : integer;
+ bottom : integer;
+ visible : integer;
+ descriptor : Pchar;
+ isRoot : integer;
+ containerIndex : integer;
+ widgetClass : XPWidgetClass;
+ END;
+ PXPWidgetCreate_t = ^XPWidgetCreate_t;
+
+CONST
+ NO_PARENT = -1;
+
+ PARAM_PARENT = -2;
+
+
+ {
+ XPUCreateWidgets
+
+ This function creates a series of widgets from a table...see
+ XPCreateWidget_t above. Pass in an array of widget creation structures and
+ an array of widget IDs that will receive each widget.
+
+ Widget parents are specified by index into the created widget table,
+ allowing you to create nested widget structures. You can create multiple
+ widget trees in one table. Generally you should create widget trees from
+ the top down.
+
+ You can also pass in a widget ID that will be used when the widget's parent
+ is listed as PARAM_PARENT; this allows you to embed widgets created with
+ XPUCreateWidgets in a widget created previously.
+ }
+ PROCEDURE XPUCreateWidgets(
+ inWidgetDefs : PXPWidgetCreate_t;
+ inCount : integer;
+ inParamParent : XPWidgetID;
+ ioWidgets : PXPWidgetID);
+{$IFDEF DELPHI}
+ cdecl; external 'XPWIDGETS.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPUMoveWidgetBy
+
+ Simply moves a widget by an amount, +x = right, +y=up, without resizing the
+ widget.
+ }
+ PROCEDURE XPUMoveWidgetBy(
+ inWidget : XPWidgetID;
+ inDeltaX : integer;
+ inDeltaY : integer);
+{$IFDEF DELPHI}
+ cdecl; external 'XPWIDGETS.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+{___________________________________________________________________________
+ * LAYOUT MANAGERS
+ ___________________________________________________________________________}
+{
+ The layout managers are widget behavior functions for handling where
+ widgets move. Layout managers can be called from a widget function or
+ attached to a widget later.
+}
+
+
+
+ {
+ XPUFixedLayout
+
+ This function causes the widget to maintain its children in fixed position
+ relative to itself as it is resized. Use this on the top level 'window'
+ widget for your window.
+ }
+ FUNCTION XPUFixedLayout(
+ inMessage : XPWidgetMessage;
+ inWidget : XPWidgetID;
+ inParam1 : intptr_t;
+ inParam2 : intptr_t) : integer;
+{$IFDEF DELPHI}
+ cdecl; external 'XPWIDGETS.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+{___________________________________________________________________________
+ * WIDGET PROC BEHAVIORS
+ ___________________________________________________________________________}
+{
+ These widget behavior functions add other useful behaviors to widgets.
+ These functions cannot be attached to a widget; they must be called from
+ your widget function.
+}
+
+
+
+ {
+ XPUSelectIfNeeded
+
+ This causes the widget to bring its window to the foreground if it is not
+ already. inEatClick specifies whether clicks in the background should be
+ consumed by bringin the window to the foreground.
+ }
+ FUNCTION XPUSelectIfNeeded(
+ inMessage : XPWidgetMessage;
+ inWidget : XPWidgetID;
+ inParam1 : intptr_t;
+ inParam2 : intptr_t;
+ inEatClick : integer) : integer;
+{$IFDEF DELPHI}
+ cdecl; external 'XPWIDGETS.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPUDefocusKeyboard
+
+ This causes a click in the widget to send keyboard focus back to X-Plane.
+ This stops editing of any text fields, etc.
+ }
+ FUNCTION XPUDefocusKeyboard(
+ inMessage : XPWidgetMessage;
+ inWidget : XPWidgetID;
+ inParam1 : intptr_t;
+ inParam2 : intptr_t;
+ inEatClick : integer) : integer;
+{$IFDEF DELPHI}
+ cdecl; external 'XPWIDGETS.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPUDragWidget
+
+ XPUDragWidget drags the widget in response to mouse clicks. Pass in not
+ only the event, but the global coordinates of the drag region, which might
+ be a sub-region of your widget (for example, a title bar).
+ }
+ FUNCTION XPUDragWidget(
+ inMessage : XPWidgetMessage;
+ inWidget : XPWidgetID;
+ inParam1 : intptr_t;
+ inParam2 : intptr_t;
+ inLeft : integer;
+ inTop : integer;
+ inRight : integer;
+ inBottom : integer) : integer;
+{$IFDEF DELPHI}
+ cdecl; external 'XPWIDGETS.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+IMPLEMENTATION
+END.
diff --git a/X-Plane-SDK/Delphi/Widgets/XPWidgets.pas b/X-Plane-SDK/Delphi/Widgets/XPWidgets.pas
new file mode 100755
index 0000000..44623dc
--- /dev/null
+++ b/X-Plane-SDK/Delphi/Widgets/XPWidgets.pas
@@ -0,0 +1,665 @@
+{
+ Copyright 2005-2012 Sandy Barbour and Ben Supnik
+
+ All rights reserved. See license.txt for usage.
+
+ X-Plane SDK Version: 2.1.1
+}
+
+UNIT XPWidgets;
+INTERFACE
+{
+ WIDGETS - THEORY OF OPERATION AND NOTES
+
+ Widgets are persistent view 'objects' for X-Plane. A widget is an object
+ referenced by its opaque handle (widget ID) and the APIs in this file. You
+ cannot access the widget's guts directly. Every Widget has the following
+ intrinsic data:
+
+ - A bounding box defined in global screen coordinates with 0,0 in the
+ bottom left and +y = up, +x = right.
+
+ - A visible box, which is the intersection of the bounding box with the
+ widget's parents visible box.
+
+ - Zero or one parent widgets. (Always zero if the widget is a root widget.
+
+
+ - Zero or more child widgets.
+
+ - Whether the widget is a root. Root widgets are the top level plugin
+ windows.
+
+ - Whether the widget is visible.
+
+ - A text string descriptor, whose meaning varies from widget to widget.
+
+ - An arbitrary set of 32 bit integral properties defined by 32-bit integral
+ keys. This is how specific widgets
+
+ store specific data.
+
+ - A list of widget callbacks proc that implements the widgets behaviors.
+
+ The Widgets library sends messages to widgets to request specific behaviors
+ or notify the widget of things.
+
+ Widgets may have more than one callback function, in which case messages
+ are sent to the most recently added callback function until the message is
+ handled. Messages may also be sent to parents or children; see the
+ XPWidgetDefs.h header file for the different widget message dispatching
+ functions. By adding a callback function to a window you can 'subclass'
+ its behavior.
+
+ A set of standard widgets are provided that serve common UI purposes. You
+ can also customize or implement entirely custom widgets.
+
+ Widgets are different than other view hierarchies (most notably Win32,
+ which they bear a striking resemblance to) in the following ways:
+
+ - Not all behavior can be patched. State that is managed by the XPWidgets
+ DLL and not by individual widgets cannot be customized.
+
+ - All coordinates are in global screen coordinates. Coordinates are not
+ relative to an enclosing widget, nor are they relative to a display window.
+
+
+ - Widget messages are always dispatched synchronously, and there is no
+ concept of scheduling an update or a dirty region. Messages originate from
+ X-Plane as the sim cycle goes by. Since x-plane is constantly redrawing,
+ so are widgets; there is no need to mark a part of a widget as 'needing
+ redrawing' because redrawing happens frequently whether the widget needs it
+ or not.
+
+ - Any widget may be a 'root' widget, causing it to be drawn; there is no
+ relationship between widget class and rootness. Root widgets are
+ imlemented as XPLMDisply windows.
+}
+
+USES XPWidgetDefs;
+ {$A4}
+{$IFDEF MSWINDOWS}
+ {$DEFINE DELPHI}
+{$ENDIF}
+{___________________________________________________________________________
+ * WIDGET CREATION AND MANAGEMENT
+ ___________________________________________________________________________}
+{
+
+}
+
+
+ {
+ XPCreateWidget
+
+ This function creates a new widget and returns the new widget's ID to you.
+ If the widget creation fails for some reason, it returns NULL. Widget
+ creation will fail either if you pass a bad class ID or if there is not
+ adequate memory.
+
+ Input Parameters:
+
+ - Top, left, bottom, and right in global screen coordinates defining the
+ widget's location on the screen.
+
+ - inVisible is 1 if the widget should be drawn, 0 to start the widget as
+ hidden.
+
+ - inDescriptor is a null terminated string that will become the widget's
+ descriptor.
+
+ - inIsRoot is 1 if this is going to be a root widget, 0 if it will not be.
+
+ - inContainer is the ID of this widget's container. It must be 0 for a
+ root widget. for a non-root widget, pass the widget ID of the widget to
+ place this widget within. If this widget is not going to start inside
+ another widget, pass 0; this new widget will then just be floating off in
+ space (and will not be drawn until it is placed in a widget.
+
+ - inClass is the class of the widget to draw. Use one of the predefined
+ class-IDs to create a standard widget.
+
+ A note on widget embedding: a widget is only called (and will be drawn,
+ etc.) if it is placed within a widget that will be called. Root widgets
+ are always called. So it is possible to have whole chains of widgets that
+ are simply not called. You can preconstruct widget trees and then place
+ them into root widgets later to activate them if you wish.
+ }
+ FUNCTION XPCreateWidget(
+ inLeft : integer;
+ inTop : integer;
+ inRight : integer;
+ inBottom : integer;
+ inVisible : integer;
+ inDescriptor : Pchar;
+ inIsRoot : integer;
+ inContainer : XPWidgetID;
+ inClass : XPWidgetClass) : XPWidgetID;
+{$IFDEF DELPHI}
+ cdecl; external 'XPWIDGETS.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPCreateCustomWidget
+
+ This function is the same as XPCreateWidget except that instead of passing
+ a class ID, you pass your widget callback function pointer defining the
+ widget. Use this function to define a custom widget. All parameters are
+ the same as XPCreateWidget, except that the widget class has been replaced
+ with the widget function.
+ }
+ FUNCTION XPCreateCustomWidget(
+ inLeft : integer;
+ inTop : integer;
+ inRight : integer;
+ inBottom : integer;
+ inVisible : integer;
+ inDescriptor : Pchar;
+ inIsRoot : integer;
+ inContainer : XPWidgetID;
+ inCallback : XPWidgetFunc_t) : XPWidgetID;
+{$IFDEF DELPHI}
+ cdecl; external 'XPWIDGETS.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPDestroyWidget
+
+ This class destroys a widget. Pass in the ID of the widget to kill. If
+ you pass 1 for inDestroyChilren, the widget's children will be destroyed
+ first, then this widget will be destroyed. (Furthermore, the widget's
+ children will be destroyed with the inDestroyChildren flag set to 1, so the
+ destruction will recurse down the widget tree.) If you pass 0 for this
+ flag, the child widgets will simply end up with their parent set to 0.
+ }
+ PROCEDURE XPDestroyWidget(
+ inWidget : XPWidgetID;
+ inDestroyChildren : integer);
+{$IFDEF DELPHI}
+ cdecl; external 'XPWIDGETS.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPSendMessageToWidget
+
+ This sends any message to a widget. You should probably not go around
+ simulating the predefined messages that the widgets library defines for
+ you. You may however define custom messages for your widgets and send them
+ with this method.
+
+ This method supports several dispatching patterns; see XPDispatchMode for
+ more info. The function returns 1 if the message was handled, 0 if it was
+ not.
+
+ For each widget that receives the message (see the dispatching modes), each
+ widget function from the most recently installed to the oldest one
+ receives the message in order until it is handled.
+ }
+ FUNCTION XPSendMessageToWidget(
+ inWidget : XPWidgetID;
+ inMessage : XPWidgetMessage;
+ inMode : XPDispatchMode;
+ inParam1 : intptr_t;
+ inParam2 : intptr_t) : integer;
+{$IFDEF DELPHI}
+ cdecl; external 'XPWIDGETS.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+{___________________________________________________________________________
+ * WIDGET POSITIONING AND VISIBILITY
+ ___________________________________________________________________________}
+{
+
+}
+
+
+ {
+ XPPlaceWidgetWithin
+
+ This function changes which container a widget resides in. You may NOT use
+ this function on a root widget! inSubWidget is the widget that will be
+ moved. Pass a widget ID in inContainer to make inSubWidget be a child of
+ inContainer. It will become the last/closest widget in the container.
+ Pass 0 to remove the widget from any container. Any call to this other
+ than passing the widget ID of the old parent of the affected widget will
+ cause the widget to be removed from its old parent. Placing a widget within
+ its own parent simply makes it the last widget.
+
+ NOTE: this routine does not reposition the sub widget in global
+ coordinates. If the container has layout management code, it will
+ reposition the subwidget for you, otherwise you must do it with
+ SetWidgetGeometry.
+ }
+ PROCEDURE XPPlaceWidgetWithin(
+ inSubWidget : XPWidgetID;
+ inContainer : XPWidgetID);
+{$IFDEF DELPHI}
+ cdecl; external 'XPWIDGETS.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPCountChildWidgets
+
+ This routine returns the number of widgets another widget contains.
+ }
+ FUNCTION XPCountChildWidgets(
+ inWidget : XPWidgetID) : integer;
+{$IFDEF DELPHI}
+ cdecl; external 'XPWIDGETS.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPGetNthChildWidget
+
+ This routine returns the widget ID of a child widget by index. Indexes are
+ 0 based, from 0 to one minus the number of widgets in the parent,
+ inclusive. If the index is invalid, 0 is returned.
+ }
+ FUNCTION XPGetNthChildWidget(
+ inWidget : XPWidgetID;
+ inIndex : integer) : XPWidgetID;
+{$IFDEF DELPHI}
+ cdecl; external 'XPWIDGETS.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPGetParentWidget
+
+ This routine returns the parent of a widget, or 0 if the widget has no
+ parent. Root widgets never have parents and therefore always return 0.
+ }
+ FUNCTION XPGetParentWidget(
+ inWidget : XPWidgetID) : XPWidgetID;
+{$IFDEF DELPHI}
+ cdecl; external 'XPWIDGETS.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPShowWidget
+
+ This routine makes a widget visible if it is not already. Note that if a
+ widget is not in a rooted widget hierarchy or one of its parents is not
+ visible, it will still not be visible to the user.
+ }
+ PROCEDURE XPShowWidget(
+ inWidget : XPWidgetID);
+{$IFDEF DELPHI}
+ cdecl; external 'XPWIDGETS.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPHideWidget
+
+ Makes a widget invisible. See XPShowWidget for considerations of when a
+ widget might not be visible despite its own visibility state.
+ }
+ PROCEDURE XPHideWidget(
+ inWidget : XPWidgetID);
+{$IFDEF DELPHI}
+ cdecl; external 'XPWIDGETS.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPIsWidgetVisible
+
+ This returns 1 if a widget is visible, 0 if it is not. Note that this
+ routine takes into consideration whether a parent is invisible. Use this
+ routine to tell if the user can see the widget.
+ }
+ FUNCTION XPIsWidgetVisible(
+ inWidget : XPWidgetID) : integer;
+{$IFDEF DELPHI}
+ cdecl; external 'XPWIDGETS.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPFindRootWidget
+
+ XPFindRootWidget returns the Widget ID of the root widget that contains the
+ passed in widget or NULL if the passed in widget is not in a rooted
+ hierarchy.
+ }
+ FUNCTION XPFindRootWidget(
+ inWidget : XPWidgetID) : XPWidgetID;
+{$IFDEF DELPHI}
+ cdecl; external 'XPWIDGETS.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPBringRootWidgetToFront
+
+ This routine makes the specified widget be in the front most widget
+ hierarchy. If this widget is a root widget, its widget hierarchy comes to
+ front, otherwise the widget's root is brought to the front. If this widget
+ is not in an active widget hiearchy (e.g. there is no root widget at the
+ top of the tree), this routine does nothing.
+ }
+ PROCEDURE XPBringRootWidgetToFront(
+ inWidget : XPWidgetID);
+{$IFDEF DELPHI}
+ cdecl; external 'XPWIDGETS.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPIsWidgetInFront
+
+ This routine returns true if this widget's hierarchy is the front most
+ hierarchy. It returns false if the widget's hierarchy is not in front, or
+ if the widget is not in a rooted hierarchy.
+ }
+ FUNCTION XPIsWidgetInFront(
+ inWidget : XPWidgetID) : integer;
+{$IFDEF DELPHI}
+ cdecl; external 'XPWIDGETS.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPGetWidgetGeometry
+
+ This routine returns the bounding box of a widget in global coordinates.
+ Pass NULL for any parameter you are not interested in.
+ }
+ PROCEDURE XPGetWidgetGeometry(
+ inWidget : XPWidgetID;
+ outLeft : Pinteger; { Can be nil }
+ outTop : Pinteger; { Can be nil }
+ outRight : Pinteger; { Can be nil }
+ outBottom : Pinteger); { Can be nil }
+{$IFDEF DELPHI}
+ cdecl; external 'XPWIDGETS.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPSetWidgetGeometry
+
+ This function changes the bounding box of a widget.
+ }
+ PROCEDURE XPSetWidgetGeometry(
+ inWidget : XPWidgetID;
+ inLeft : integer;
+ inTop : integer;
+ inRight : integer;
+ inBottom : integer);
+{$IFDEF DELPHI}
+ cdecl; external 'XPWIDGETS.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPGetWidgetForLocation
+
+ Given a widget and a location, this routine returns the widget ID of the
+ child of that widget that owns that location. If inRecursive is true then
+ this will return a child of a child of a widget as it tries to find the
+ deepest widget at that location. If inVisibleOnly is true, then only
+ visible widgets are considered, otherwise all widgets are considered. The
+ widget ID passed for inContainer will be returned if the location is in
+ that widget but not in a child widget. 0 is returned if the location is
+ not in the container.
+
+ NOTE: if a widget's geometry extends outside its parents geometry, it will
+ not be returned by this call for mouse locations outside the parent
+ geometry. The parent geometry limits the child's eligibility for mouse
+ location.
+ }
+ FUNCTION XPGetWidgetForLocation(
+ inContainer : XPWidgetID;
+ inXOffset : integer;
+ inYOffset : integer;
+ inRecursive : integer;
+ inVisibleOnly : integer) : XPWidgetID;
+{$IFDEF DELPHI}
+ cdecl; external 'XPWIDGETS.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPGetWidgetExposedGeometry
+
+ This routine returns the bounds of the area of a widget that is completely
+ within its parent widgets. Since a widget's bounding box can be outside
+ its parent, part of its area will not be elligible for mouse clicks and
+ should not draw. Use XPGetWidgetGeometry to find out what area defines
+ your widget's shape, but use this routine to find out what area to actually
+ draw into. Note that the widget library does not use OpenGL clipping to
+ keep frame rates up, although you could use it internally.
+ }
+ PROCEDURE XPGetWidgetExposedGeometry(
+ inWidgetID : XPWidgetID;
+ outLeft : Pinteger; { Can be nil }
+ outTop : Pinteger; { Can be nil }
+ outRight : Pinteger; { Can be nil }
+ outBottom : Pinteger); { Can be nil }
+{$IFDEF DELPHI}
+ cdecl; external 'XPWIDGETS.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+{___________________________________________________________________________
+ * ACCESSING WIDGET DATA
+ ___________________________________________________________________________}
+{
+
+}
+
+
+ {
+ XPSetWidgetDescriptor
+
+ Every widget has a descriptor, which is a text string. What the text
+ string is used for varies from widget to widget; for example, a push
+ button's text is its descriptor, a caption shows its descriptor, and a text
+ field's descriptor is the text being edited. In other words, the usage for
+ the text varies from widget to widget, but this API provides a universal
+ and convenient way to get at it. While not all UI widgets need their
+ descriptor, many do.
+ }
+ PROCEDURE XPSetWidgetDescriptor(
+ inWidget : XPWidgetID;
+ inDescriptor : Pchar);
+{$IFDEF DELPHI}
+ cdecl; external 'XPWIDGETS.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPGetWidgetDescriptor
+
+ This routine returns the widget's descriptor. Pass in the length of the
+ buffer you are going to receive the descriptor in. The descriptor will be
+ null terminated for you. This routine returns the length of the actual
+ descriptor; if you pass NULL for outDescriptor, you can get the
+ descriptor's length without getting its text. If the length of the
+ descriptor exceeds your buffer length, the buffer will not be null
+ terminated (this routine has 'strncpy' semantics).
+ }
+ FUNCTION XPGetWidgetDescriptor(
+ inWidget : XPWidgetID;
+ outDescriptor : Pchar;
+ inMaxDescLength : integer) : integer;
+{$IFDEF DELPHI}
+ cdecl; external 'XPWIDGETS.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPSetWidgetProperty
+
+ This function sets a widget's property. Properties are arbitrary values
+ associated by a widget by ID.
+ }
+ PROCEDURE XPSetWidgetProperty(
+ inWidget : XPWidgetID;
+ inProperty : XPWidgetPropertyID;
+ inValue : intptr_t);
+{$IFDEF DELPHI}
+ cdecl; external 'XPWIDGETS.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPGetWidgetProperty
+
+ This routine returns the value of a widget's property, or 0 if the property
+ is not defined. If you need to know whether the property is defined, pass
+ a pointer to an int for inExists; the existence of that property will be
+ returned in the int. Pass NULL for inExists if you do not need this
+ information.
+ }
+ FUNCTION XPGetWidgetProperty(
+ inWidget : XPWidgetID;
+ inProperty : XPWidgetPropertyID;
+ inExists : Pinteger) : intptr_t; { Can be nil }
+{$IFDEF DELPHI}
+ cdecl; external 'XPWIDGETS.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+{___________________________________________________________________________
+ * KEYBOARD MANAGEMENT
+ ___________________________________________________________________________}
+{
+
+}
+
+
+ {
+ XPSetKeyboardFocus
+
+ XPSetKeyboardFocus controls which widget will receive keystrokes. Pass the
+ Widget ID of the widget to get the keys. Note that if the widget does not
+ care about keystrokes, they will go to the parent widget, and if no widget
+ cares about them, they go to X-Plane.
+
+ If you set the keyboard focus to Widget ID 0, X-Plane gets keyboard focus.
+
+ This routine returns the widget ID that ended up with keyboard focus, or 0
+ for x-plane.
+
+ Keyboard focus is not changed if the new widget will not accept it. For
+ setting to x-plane, keyboard focus is always accepted.
+
+ }
+ FUNCTION XPSetKeyboardFocus(
+ inWidget : XPWidgetID) : XPWidgetID;
+{$IFDEF DELPHI}
+ cdecl; external 'XPWIDGETS.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLoseKeyboardFocus
+
+ This causes the specified widget to lose focus; focus is passed to its
+ parent, or the next parent that will accept it. This routine does nothing
+ if this widget does not have focus.
+ }
+ PROCEDURE XPLoseKeyboardFocus(
+ inWidget : XPWidgetID);
+{$IFDEF DELPHI}
+ cdecl; external 'XPWIDGETS.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPGetWidgetWithFocus
+
+ This routine returns the widget that has keyboard focus, or 0 if X-Plane
+ has keyboard focus or some other plugin window that does not have widgets
+ has focus.
+ }
+ FUNCTION XPGetWidgetWithFocus: XPWidgetID;
+{$IFDEF DELPHI}
+ cdecl; external 'XPWIDGETS.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+{___________________________________________________________________________
+ * CREATING CUSTOM WIDGETS
+ ___________________________________________________________________________}
+{
+
+}
+
+
+ {
+ XPAddWidgetCallback
+
+ This function adds a new widget callback to a widget. This widget callback
+ supercedes any existing ones and will receive messages first; if it does
+ not handle messages they will go on to be handled by pre-existing widgets.
+
+ The widget function will remain on the widget for the life of the widget.
+ The creation message will be sent to the new callback immediately with the
+ widget ID, and the destruction message will be sent before the other widget
+ function receives a destruction message.
+
+ This provides a way to 'subclass' an existing widget. By providing a
+ second hook that only handles certain widget messages, you can customize or
+ extend widget behavior.
+ }
+ PROCEDURE XPAddWidgetCallback(
+ inWidget : XPWidgetID;
+ inNewCallback : XPWidgetFunc_t);
+{$IFDEF DELPHI}
+ cdecl; external 'XPWIDGETS.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPGetWidgetClassFunc
+
+ Given a widget class, this function returns the callbacks that power that
+ widget class.
+ }
+ FUNCTION XPGetWidgetClassFunc(
+ inWidgetClass : XPWidgetClass) : XPWidgetFunc_t;
+{$IFDEF DELPHI}
+ cdecl; external 'XPWIDGETS.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+IMPLEMENTATION
+END.
diff --git a/X-Plane-SDK/Delphi/XPLM/XPLMCamera.pas b/X-Plane-SDK/Delphi/XPLM/XPLMCamera.pas
new file mode 100755
index 0000000..44b121c
--- /dev/null
+++ b/X-Plane-SDK/Delphi/XPLM/XPLMCamera.pas
@@ -0,0 +1,174 @@
+{
+ Copyright 2005-2012 Sandy Barbour and Ben Supnik
+
+ All rights reserved. See license.txt for usage.
+
+ X-Plane SDK Version: 2.1.1
+}
+
+UNIT XPLMCamera;
+INTERFACE
+{
+ XPLMCamera - THEORY OF OPERATION The XPLMCamera APIs allow plug-ins to
+ control the camera angle in X-Plane. This has a number of applications,
+ including but not limited to:
+
+ - Creating new views (including dynamic/user-controllable views) for the
+ user.
+
+ - Creating applications that use X-Plane as a renderer of scenery,
+ aircrafts, or both.
+
+ The camera is controlled via six parameters: a location in OpenGL
+ coordinates and pitch, roll and yaw, similar to an airplane's position.
+ OpenGL coordinate info is described in detail in the XPLMGraphics
+ documentation; generally you should use the XPLMGraphics routines to
+ convert from world to local coordinates. The camera's orientation starts
+ facing level with the ground directly up the negative-Z axis
+ (approximately north) with the horizon horizontal. It is then rotated
+ clockwise for yaw, pitched up for positive pitch, and rolled clockwise
+ around the vector it is looking along for roll.
+
+ You control the camera either either until the user selects a new view or
+ permanently (the later being similar to how UDP camera control works). You
+ control the camera by registering a callback per frame from which you
+ calculate the new camera positions. This guarantees smooth camera motion.
+
+ Use the XPLMDataAccess APIs to get information like the position of the
+ aircraft, etc. for complex camera positioning.
+}
+
+USES XPLMDefs;
+ {$A4}
+{$IFDEF MSWINDOWS}
+ {$DEFINE DELPHI}
+{$ENDIF}
+{___________________________________________________________________________
+ * CAMERA CONTROL
+ ___________________________________________________________________________}
+{
+
+}
+
+
+ {
+ XPLMCameraControlDuration
+
+ This enumeration states how long you want to retain control of the camera.
+ You can retain it indefinitely or until the user selects a new view.
+ }
+TYPE
+ XPLMCameraControlDuration = (
+ { Control the camera until the user picks a new view. }
+ xplm_ControlCameraUntilViewChanges = 1
+
+ { Control the camera until your plugin is disabled or another plugin forcably }
+ { takes control. }
+ ,xplm_ControlCameraForever = 2
+
+ );
+ PXPLMCameraControlDuration = ^XPLMCameraControlDuration;
+
+ {
+ XPLMCameraPosition_t
+
+ This structure contains a full specification of the camera. X, Y, and Z
+ are the camera's position in OpenGL coordiantes; pitch, roll, and yaw are
+ rotations from a camera facing flat north in degrees. Positive pitch means
+ nose up, positive roll means roll right, and positive yaw means yaw right,
+ all in degrees. Zoom is a zoom factor, with 1.0 meaning normal zoom and 2.0
+ magnifying by 2x (objects appear larger).
+ }
+ XPLMCameraPosition_t = RECORD
+ x : single;
+ y : single;
+ z : single;
+ pitch : single;
+ heading : single;
+ roll : single;
+ zoom : single;
+ END;
+ PXPLMCameraPosition_t = ^XPLMCameraPosition_t;
+
+ {
+ XPLMCameraControl_f
+
+ You use an XPLMCameraControl function to provide continuous control over
+ the camera. You are passed in a structure in which to put the new camera
+ position; modify it and return 1 to reposition the camera. Return 0 to
+ surrender control of the camera; camera control will be handled by X-Plane
+ on this draw loop. The contents of the structure as you are called are
+ undefined.
+
+ If X-Plane is taking camera control away from you, this function will be
+ called with inIsLosingControl set to 1 and ioCameraPosition NULL.
+ }
+ XPLMCameraControl_f = FUNCTION(
+ outCameraPosition : PXPLMCameraPosition_t; { Can be nil }
+ inIsLosingControl : integer;
+ inRefcon : pointer) : integer; cdecl;
+
+ {
+ XPLMControlCamera
+
+ This function repositions the camera on the next drawing cycle. You must
+ pass a non-null control function. Specify in inHowLong how long you'd like
+ control (indefinitely or until a key is pressed).
+ }
+ PROCEDURE XPLMControlCamera(
+ inHowLong : XPLMCameraControlDuration;
+ inControlFunc : XPLMCameraControl_f;
+ inRefcon : pointer);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMDontControlCamera
+
+ This function stops you from controlling the camera. If you have a camera
+ control function, it will not be called with an inIsLosingControl flag.
+ X-Plane will control the camera on the next cycle.
+
+ For maximum compatibility you should not use this routine unless you are in
+ posession of the camera.
+ }
+ PROCEDURE XPLMDontControlCamera;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMIsCameraBeingControlled
+
+ This routine returns 1 if the camera is being controlled, zero if it is
+ not. If it is and you pass in a pointer to a camera control duration, the
+ current control duration will be returned.
+ }
+ FUNCTION XPLMIsCameraBeingControlled(
+ outCameraControlDuration: PXPLMCameraControlDuration) : integer; { Can be nil }
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMReadCameraPosition
+
+ This function reads the current camera position.
+ }
+ PROCEDURE XPLMReadCameraPosition(
+ outCameraPosition : PXPLMCameraPosition_t);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+IMPLEMENTATION
+END.
diff --git a/X-Plane-SDK/Delphi/XPLM/XPLMDataAccess.pas b/X-Plane-SDK/Delphi/XPLM/XPLMDataAccess.pas
new file mode 100755
index 0000000..e82ded4
--- /dev/null
+++ b/X-Plane-SDK/Delphi/XPLM/XPLMDataAccess.pas
@@ -0,0 +1,764 @@
+{
+ Copyright 2005-2012 Sandy Barbour and Ben Supnik
+
+ All rights reserved. See license.txt for usage.
+
+ X-Plane SDK Version: 2.1.1
+}
+
+UNIT XPLMDataAccess;
+INTERFACE
+{
+ XPLM Data Access API - Theory of Operation
+
+ The data access API gives you a generic, flexible, high performance way to
+ read and write data to and from X-Plane and other plug-ins. For example,
+ this API allows you to read and set the nav radios, get the plane location,
+ determine the current effective graphics frame rate, etc.
+
+ The data access APIs are the way that you read and write data from the sim
+ as well as other plugins.
+
+ The API works using opaque data references. A data reference is a source
+ of data; you do not know where it comes from, but once you have it you can
+ read the data quickly and possibly write it. To get a data reference, you
+ look it up.
+
+ Data references are identified by verbose string names
+ (sim/cockpit/radios/nav1_freq_hz). The actual numeric value of the data
+ reference is implementation defined and is likely to change each time the
+ simulator is run (or the plugin that provides the datareference is
+ reloaded).
+
+ The task of looking up a data reference is relatively expensive; look up
+ your data references once based on verbose strings, and save the opaque
+ data reference value for the duration of your plugin's operation. Reading
+ and writing data references is relatively fast (the cost is equivalent to
+ two function calls through function pointers).
+
+ This allows data access to be high performance, while leaving in
+ abstraction; since data references are opaque and are searched for, the
+ underlying data access system can be rebuilt.
+
+ A note on typing: you must know the correct data type to read and write.
+ APIs are provided for reading and writing data in a number of ways. You
+ can also double check the data type for a data ref. Note that automatic
+ conversion is not done for you.
+
+ A note for plugins sharing data with other plugins: the load order of
+ plugins is not guaranteed. To make sure that every plugin publishing data
+ has published their data references before other plugins try to subscribe,
+ publish your data references in your start routine but resolve them the
+ first time your 'enable' routine is called, or the first time they are
+ needed in code.
+
+ X-Plane publishes well over 1000 datarefs; a complete list may be found in
+ the reference section of the SDK online documentation (from the SDK home
+ page, choose Documentation).
+}
+
+USES XPLMDefs;
+ {$A4}
+{$IFDEF MSWINDOWS}
+ {$DEFINE DELPHI}
+{$ENDIF}
+{___________________________________________________________________________
+ * READING AND WRITING DATA
+ ___________________________________________________________________________}
+{
+ These routines allow you to access a wide variety of data from within
+ x-plane and modify some of it.
+}
+
+
+
+TYPE
+ {
+ XPLMDataRef
+
+ A data ref is an opaque handle to data provided by the simulator or another
+ plugin. It uniquely identifies one variable (or array of variables) over
+ the lifetime of your plugin. You never hard code these values; you always
+ get them from XPLMFindDataRef.
+ }
+ XPLMDataRef = pointer;
+ PXPLMDataRef = ^XPLMDataRef;
+
+ {
+ XPLMDataTypeID
+
+ This is an enumeration that defines the type of the data behind a data
+ reference. This allows you to sanity check that the data type matches what
+ you expect. But for the most part, you will know the type of data you are
+ expecting from the online documentation.
+
+ Data types each take a bit field, so sets of data types may be formed.
+ }
+ XPLMDataTypeID = (
+ { Data of a type the current XPLM doesn't do. }
+ xplmType_Unknown = 0
+
+ { A single 4-byte integer, native endian. }
+ ,xplmType_Int = 1
+
+ { A single 4-byte float, native endian. }
+ ,xplmType_Float = 2
+
+ { A single 8-byte double, native endian. }
+ ,xplmType_Double = 4
+
+ { An array of 4-byte floats, native endian. }
+ ,xplmType_FloatArray = 8
+
+ { An array of 4-byte integers, native endian. }
+ ,xplmType_IntArray = 16
+
+ { A variable block of data. }
+ ,xplmType_Data = 32
+
+ );
+ PXPLMDataTypeID = ^XPLMDataTypeID;
+
+ {
+ XPLMFindDataRef
+
+ Given a c-style string that names the data ref, this routine looks up the
+ actual opaque XPLMDataRef that you use to read and write the data. The
+ string names for datarefs are published on the x-plane SDK web site.
+
+ This function returns NULL if the data ref cannot be found.
+
+ NOTE: this function is relatively expensive; save the XPLMDataRef this
+ function returns for future use. Do not look up your data ref by string
+ every time you need to read or write it.
+ }
+ FUNCTION XPLMFindDataRef(
+ inDataRefName : Pchar) : XPLMDataRef;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMCanWriteDataRef
+
+ Given a data ref, this routine returns true if you can successfully set
+ the data, false otherwise. Some datarefs are read-only.
+ }
+ FUNCTION XPLMCanWriteDataRef(
+ inDataRef : XPLMDataRef) : integer;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMIsDataRefGood
+
+ WARNING: This function is deprecated and should not be used. Datarefs are
+ valid until plugins are reloaded or the sim quits. Plugins sharing
+ datarefs should support these semantics by not unregistering datarefs
+ during operation. (You should however unregister datarefs when your plugin
+ is unloaded, as part of general resource cleanup.)
+
+ This function returns whether a data ref is still valid. If it returns
+ false, you should refind the data ref from its original string. Calling an
+ accessor function on a bad data ref will return a default value, typically
+ 0 or 0-length data.
+ }
+ FUNCTION XPLMIsDataRefGood(
+ inDataRef : XPLMDataRef) : integer;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMGetDataRefTypes
+
+ This routine returns the types of the data ref for accessor use. If a data
+ ref is available in multiple data types, they will all be returned.
+ }
+ FUNCTION XPLMGetDataRefTypes(
+ inDataRef : XPLMDataRef) : XPLMDataTypeID;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+{___________________________________________________________________________
+ * DATA ACCESSORS
+ ___________________________________________________________________________}
+{
+ These routines read and write the data references. For each supported data
+ type there is a reader and a writer.
+
+ If the data ref is invalid or the plugin that provides it is disabled or
+ there is a type mismatch, the functions that read data will return 0 as a
+ default value or not modify the passed in memory. The plugins that write
+ data will not write under these circumstances or if the data ref is
+ read-only. NOTE: to keep the overhead of reading datarefs low, these
+ routines do not do full validation of a dataref; passing a junk value for
+ a dataref can result in crashing the sim.
+
+ For array-style datarefs, you specify the number of items to read/write and
+ the offset into the array; the actual number of items read or written is
+ returned. This may be less to prevent an array-out-of-bounds error.
+}
+
+
+
+ {
+ XPLMGetDatai
+
+ Read an integer data ref and return its value. The return value is the
+ dataref value or 0 if the dataref is invalid/NULL or the plugin is
+ disabled.
+ }
+ FUNCTION XPLMGetDatai(
+ inDataRef : XPLMDataRef) : integer;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMSetDatai
+
+ Write a new value to an integer data ref. This routine is a no-op if the
+ plugin publishing the dataref is disabled, the dataref is invalid, or the
+ dataref is not writable.
+ }
+ PROCEDURE XPLMSetDatai(
+ inDataRef : XPLMDataRef;
+ inValue : integer);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMGetDataf
+
+ Read a single precision floating point dataref and return its value. The
+ return value is the dataref value or 0.0 if the dataref is invalid/NULL or
+ the plugin is disabled.
+ }
+ FUNCTION XPLMGetDataf(
+ inDataRef : XPLMDataRef) : single;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMSetDataf
+
+ Write a new value to a single precision floating point data ref. This
+ routine is a no-op if the plugin publishing the dataref is disabled, the
+ dataref is invalid, or the dataref is not writable.
+ }
+ PROCEDURE XPLMSetDataf(
+ inDataRef : XPLMDataRef;
+ inValue : single);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMGetDatad
+
+ Read a double precision floating point dataref and return its value. The
+ return value is the dataref value or 0.0 if the dataref is invalid/NULL or
+ the plugin is disabled.
+ }
+ FUNCTION XPLMGetDatad(
+ inDataRef : XPLMDataRef) : real;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMSetDatad
+
+ Write a new value to a double precision floating point data ref. This
+ routine is a no-op if the plugin publishing the dataref is disabled, the
+ dataref is invalid, or the dataref is not writable.
+ }
+ PROCEDURE XPLMSetDatad(
+ inDataRef : XPLMDataRef;
+ inValue : real);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMGetDatavi
+
+ Read a part of an integer array dataref. If you pass NULL for outVaules,
+ the routine will return the size of the array, ignoring inOffset and inMax.
+
+
+ If outValues is not NULL, then up to inMax values are copied from the
+ dataref into outValues, starting at inOffset in the dataref. If inMax +
+ inOffset is larger than the size of the dataref, less than inMax values
+ will be copied. The number of values copied is returned.
+
+ Note: the semantics of array datarefs are entirely implemented by the
+ plugin (or X-Plane) that provides the dataref, not the SDK itself; the
+ above description is how these datarefs are intended to work, but a rogue
+ plugin may have different behavior.
+ }
+ FUNCTION XPLMGetDatavi(
+ inDataRef : XPLMDataRef;
+ outValues : Pinteger; { Can be nil }
+ inOffset : integer;
+ inMax : integer) : integer;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMSetDatavi
+
+ Write part or all of an integer array dataref. The values passed by
+ inValues are written into the dataref starting at inOffset. Up to inCount
+ values are written; however if the values would write "off the end" of the
+ dataref array, then fewer values are written.
+
+ Note: the semantics of array datarefs are entirely implemented by the
+ plugin (or X-Plane) that provides the dataref, not the SDK itself; the
+ above description is how these datarefs are intended to work, but a rogue
+ plugin may have different behavior.
+ }
+ PROCEDURE XPLMSetDatavi(
+ inDataRef : XPLMDataRef;
+ inValues : Pinteger;
+ inoffset : integer;
+ inCount : integer);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMGetDatavf
+
+ Read a part of a single precision floating point array dataref. If you
+ pass NULL for outVaules, the routine will return the size of the array,
+ ignoring inOffset and inMax.
+
+ If outValues is not NULL, then up to inMax values are copied from the
+ dataref into outValues, starting at inOffset in the dataref. If inMax +
+ inOffset is larger than the size of the dataref, less than inMax values
+ will be copied. The number of values copied is returned.
+
+ Note: the semantics of array datarefs are entirely implemented by the
+ plugin (or X-Plane) that provides the dataref, not the SDK itself; the
+ above description is how these datarefs are intended to work, but a rogue
+ plugin may have different behavior.
+ }
+ FUNCTION XPLMGetDatavf(
+ inDataRef : XPLMDataRef;
+ outValues : Psingle; { Can be nil }
+ inOffset : integer;
+ inMax : integer) : integer;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMSetDatavf
+
+ Write part or all of a single precision floating point array dataref. The
+ values passed by inValues are written into the dataref starting at
+ inOffset. Up to inCount values are written; however if the values would
+ write "off the end" of the dataref array, then fewer values are written.
+
+ Note: the semantics of array datarefs are entirely implemented by the
+ plugin (or X-Plane) that provides the dataref, not the SDK itself; the
+ above description is how these datarefs are intended to work, but a rogue
+ plugin may have different behavior.
+ }
+ PROCEDURE XPLMSetDatavf(
+ inDataRef : XPLMDataRef;
+ inValues : Psingle;
+ inoffset : integer;
+ inCount : integer);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMGetDatab
+
+ Read a part of a byte array dataref. If you pass NULL for outVaules, the
+ routine will return the size of the array, ignoring inOffset and inMax.
+
+ If outValues is not NULL, then up to inMax values are copied from the
+ dataref into outValues, starting at inOffset in the dataref. If inMax +
+ inOffset is larger than the size of the dataref, less than inMax values
+ will be copied. The number of values copied is returned.
+
+ Note: the semantics of array datarefs are entirely implemented by the
+ plugin (or X-Plane) that provides the dataref, not the SDK itself; the
+ above description is how these datarefs are intended to work, but a rogue
+ plugin may have different behavior.
+ }
+ FUNCTION XPLMGetDatab(
+ inDataRef : XPLMDataRef;
+ outValue : pointer; { Can be nil }
+ inOffset : integer;
+ inMaxBytes : integer) : integer;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMSetDatab
+
+ Write part or all of a byte array dataref. The values passed by inValues
+ are written into the dataref starting at inOffset. Up to inCount values
+ are written; however if the values would write "off the end" of the dataref
+ array, then fewer values are written.
+
+ Note: the semantics of array datarefs are entirely implemented by the
+ plugin (or X-Plane) that provides the dataref, not the SDK itself; the
+ above description is how these datarefs are intended to work, but a rogue
+ plugin may have different behavior.
+ }
+ PROCEDURE XPLMSetDatab(
+ inDataRef : XPLMDataRef;
+ inValue : pointer;
+ inOffset : integer;
+ inLength : integer);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+{___________________________________________________________________________
+ * PUBLISHING YOUR PLUGINS DATA
+ ___________________________________________________________________________}
+{
+ These functions allow you to create data references that other plug-ins can
+ access via the above data access APIs. Data references published by other
+ plugins operate the same as ones published by x-plane in all manners except
+ that your data reference will not be available to other plugins if/when
+ your plugin is disabled.
+
+ You share data by registering data provider callback functions. When a
+ plug-in requests your data, these callbacks are then called. You provide
+ one callback to return the value when a plugin 'reads' it and another to
+ change the value when a plugin 'writes' it.
+
+ Important: you must pick a prefix for your datarefs other than "sim/" -
+ this prefix is reserved for X-Plane. The X-Plane SDK website contains a
+ registry where authors can select a unique first word for dataref names, to
+ prevent dataref collisions between plugins.
+}
+
+
+
+ {
+ XPLMGetDatai_f
+
+ Data provider function pointers.
+
+ These define the function pointers you provide to get or set data. Note
+ that you are passed a generic pointer for each one. This is the same
+ pointer you pass in your register routine; you can use it to find global
+ variables, etc.
+
+ The semantics of your callbacks are the same as the dataref accessor above
+ - basically routines like XPLMGetDatai are just pass-throughs from a caller
+ to your plugin. Be particularly mindful in implementing array dataref
+ read-write accessors; you are responsible for avoiding overruns, supporting
+ offset read/writes, and handling a read with a NULL buffer.
+ }
+TYPE
+ XPLMGetDatai_f = FUNCTION(
+ inRefcon : pointer) : integer; cdecl;
+
+ {
+ XPLMSetDatai_f
+
+ }
+ XPLMSetDatai_f = PROCEDURE(
+ inRefcon : pointer;
+ inValue : integer); cdecl;
+
+ {
+ XPLMGetDataf_f
+
+ }
+ XPLMGetDataf_f = FUNCTION(
+ inRefcon : pointer) : single; cdecl;
+
+ {
+ XPLMSetDataf_f
+
+ }
+ XPLMSetDataf_f = PROCEDURE(
+ inRefcon : pointer;
+ inValue : single); cdecl;
+
+ {
+ XPLMGetDatad_f
+
+ }
+ XPLMGetDatad_f = FUNCTION(
+ inRefcon : pointer) : real; cdecl;
+
+ {
+ XPLMSetDatad_f
+
+ }
+ XPLMSetDatad_f = PROCEDURE(
+ inRefcon : pointer;
+ inValue : real); cdecl;
+
+ {
+ XPLMGetDatavi_f
+
+ }
+ XPLMGetDatavi_f = FUNCTION(
+ inRefcon : pointer;
+ outValues : Pinteger; { Can be nil }
+ inOffset : integer;
+ inMax : integer) : integer; cdecl;
+
+ {
+ XPLMSetDatavi_f
+
+ }
+ XPLMSetDatavi_f = PROCEDURE(
+ inRefcon : pointer;
+ inValues : Pinteger;
+ inOffset : integer;
+ inCount : integer); cdecl;
+
+ {
+ XPLMGetDatavf_f
+
+ }
+ XPLMGetDatavf_f = FUNCTION(
+ inRefcon : pointer;
+ outValues : Psingle; { Can be nil }
+ inOffset : integer;
+ inMax : integer) : integer; cdecl;
+
+ {
+ XPLMSetDatavf_f
+
+ }
+ XPLMSetDatavf_f = PROCEDURE(
+ inRefcon : pointer;
+ inValues : Psingle;
+ inOffset : integer;
+ inCount : integer); cdecl;
+
+ {
+ XPLMGetDatab_f
+
+ }
+ XPLMGetDatab_f = FUNCTION(
+ inRefcon : pointer;
+ outValue : pointer; { Can be nil }
+ inOffset : integer;
+ inMaxLength : integer) : integer; cdecl;
+
+ {
+ XPLMSetDatab_f
+
+ }
+ XPLMSetDatab_f = PROCEDURE(
+ inRefcon : pointer;
+ inValue : pointer;
+ inOffset : integer;
+ inLength : integer); cdecl;
+
+ {
+ XPLMRegisterDataAccessor
+
+ This routine creates a new item of data that can be read and written. Pass
+ in the data's full name for searching, the type(s) of the data for
+ accessing, and whether the data can be written to. For each data type you
+ support, pass in a read accessor function and a write accessor function if
+ necessary. Pass NULL for data types you do not support or write accessors
+ if you are read-only.
+
+ You are returned a data ref for the new item of data created. You can use
+ this data ref to unregister your data later or read or write from it.
+ }
+ FUNCTION XPLMRegisterDataAccessor(
+ inDataName : Pchar;
+ inDataType : XPLMDataTypeID;
+ inIsWritable : integer;
+ inReadInt : XPLMGetDatai_f;
+ inWriteInt : XPLMSetDatai_f;
+ inReadFloat : XPLMGetDataf_f;
+ inWriteFloat : XPLMSetDataf_f;
+ inReadDouble : XPLMGetDatad_f;
+ inWriteDouble : XPLMSetDatad_f;
+ inReadIntArray : XPLMGetDatavi_f;
+ inWriteIntArray : XPLMSetDatavi_f;
+ inReadFloatArray : XPLMGetDatavf_f;
+ inWriteFloatArray : XPLMSetDatavf_f;
+ inReadData : XPLMGetDatab_f;
+ inWriteData : XPLMSetDatab_f;
+ inReadRefcon : pointer;
+ inWriteRefcon : pointer) : XPLMDataRef;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMUnregisterDataAccessor
+
+ Use this routine to unregister any data accessors you may have registered.
+ You unregister a data ref by the XPLMDataRef you get back from
+ registration. Once you unregister a data ref, your function pointer will
+ not be called anymore.
+
+ For maximum compatibility, do not unregister your data accessors until
+ final shutdown (when your XPluginStop routine is called). This allows
+ other plugins to find your data reference once and use it for their entire
+ time of operation.
+ }
+ PROCEDURE XPLMUnregisterDataAccessor(
+ inDataRef : XPLMDataRef);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+{___________________________________________________________________________
+ * SHARING DATA BETWEEN MULTIPLE PLUGINS
+ ___________________________________________________________________________}
+{
+ The data reference registration APIs from the previous section allow a
+ plugin to publish data in a one-owner manner; the plugin that publishes the
+ data reference owns the real memory that the data ref uses. This is
+ satisfactory for most cases, but there are also cases where plugnis need to
+ share actual data.
+
+ With a shared data reference, no one plugin owns the actual memory for the
+ data reference; the plugin SDK allocates that for you. When the first
+ plugin asks to 'share' the data, the memory is allocated. When the data is
+ changed, every plugin that is sharing the data is notified.
+
+ Shared data references differ from the 'owned' data references from the
+ previous section in a few ways:
+
+ - With shared data references, any plugin can create the data reference;
+ with owned plugins one plugin must create the data reference and others
+ subscribe. (This can be a problem if you don't know which set of plugins
+ will be present).
+
+ - With shared data references, every plugin that is sharing the data is
+ notified when the data is changed. With owned data references, only the
+ one owner is notified when the data is changed.
+
+ - With shared data references, you cannot access the physical memory of the
+ data reference; you must use the XPLMGet... and XPLMSet... APIs. With an
+ owned data reference, the one owning data reference can manipulate the
+ data reference's memory in any way it sees fit.
+
+ Shared data references solve two problems: if you need to have a data
+ reference used by several plugins but do not know which plugins will be
+ installed, or if all plugins sharing data need to be notified when that
+ data is changed, use shared data references.
+}
+
+
+
+ {
+ XPLMDataChanged_f
+
+ An XPLMDataChanged_f is a callback that the XPLM calls whenever any other
+ plug-in modifies shared data. A refcon you provide is passed back to help
+ identify which data is being changed. In response, you may want to call one
+ of the XPLMGetDataxxx routines to find the new value of the data.
+ }
+TYPE
+ XPLMDataChanged_f = PROCEDURE(
+ inRefcon : pointer); cdecl;
+
+ {
+ XPLMShareData
+
+ This routine connects a plug-in to shared data, creating the shared data if
+ necessary. inDataName is a standard path for the data ref, and inDataType
+ specifies the type. This function will create the data if it does not
+ exist. If the data already exists but the type does not match, an error is
+ returned, so it is important that plug-in authors collaborate to establish
+ public standards for shared data.
+
+ If a notificationFunc is passed in and is not NULL, that notification
+ function will be called whenever the data is modified. The notification
+ refcon will be passed to it. This allows your plug-in to know which shared
+ data was changed if multiple shared data are handled by one callback, or if
+ the plug-in does not use global variables.
+
+ A one is returned for successfully creating or finding the shared data; a
+ zero if the data already exists but is of the wrong type.
+ }
+ FUNCTION XPLMShareData(
+ inDataName : Pchar;
+ inDataType : XPLMDataTypeID;
+ inNotificationFunc : XPLMDataChanged_f;
+ inNotificationRefcon: pointer) : integer;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMUnshareData
+
+ This routine removes your notification function for shared data. Call it
+ when done with the data to stop receiving change notifications. Arguments
+ must match XPLMShareData. The actual memory will not necessarily be freed,
+ since other plug-ins could be using it.
+ }
+ FUNCTION XPLMUnshareData(
+ inDataName : Pchar;
+ inDataType : XPLMDataTypeID;
+ inNotificationFunc : XPLMDataChanged_f;
+ inNotificationRefcon: pointer) : integer;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+IMPLEMENTATION
+END.
diff --git a/X-Plane-SDK/Delphi/XPLM/XPLMDefs.pas b/X-Plane-SDK/Delphi/XPLM/XPLMDefs.pas
new file mode 100755
index 0000000..57ffba1
--- /dev/null
+++ b/X-Plane-SDK/Delphi/XPLM/XPLMDefs.pas
@@ -0,0 +1,446 @@
+{
+ Copyright 2005-2012 Sandy Barbour and Ben Supnik
+
+ All rights reserved. See license.txt for usage.
+
+ X-Plane SDK Version: 2.1.1
+}
+
+UNIT XPLMDefs;
+INTERFACE
+{
+ This file is contains the cross-platform and basic definitions for the
+ X-Plane SDK.
+
+ The preprocessor macros APL and IBM must be defined to specify the
+ compilation target; define APL to 1 and IBM 0 to compile on Macintosh and
+ APL to 0 and IBM to 1 for Windows. You must specify these macro definitions
+ before including XPLMDefs.h or any other XPLM headers. You can do this
+ using the -D command line option or a preprocessor header.
+}
+
+ {$A4}
+{$IFDEF MSWINDOWS}
+ {$DEFINE DELPHI}
+{$ENDIF}
+{$IFDEF LINUX}
+ {$DEFINE KYLIX}
+{$ENDIF}
+TYPE
+{$IFNDEF DELPHI}
+{$IFNDEF KYLIX}
+ Pchar = ^char;
+ Ppchar = ^Pchar;
+ Psingle = ^single;
+ Pinteger = ^integer;
+{$ENDIF}
+{$ENDIF}
+ Preal = ^real;
+ Plongint = ^longint;
+{___________________________________________________________________________
+ * DLL Definitions
+ ___________________________________________________________________________}
+{
+ These definitions control the importing and exporting of functions within
+ the DLL.
+
+ You can prefix your five required callbacks with the PLUGIN_API macro to
+ declare them as exported C functions. The XPLM_API macro identifies
+ functions that are provided to you via the plugin SDK. (Link against
+ XPLM.lib to use these functions.)
+}
+
+
+
+
+{___________________________________________________________________________
+ * GLOBAL DEFINITIONS
+ ___________________________________________________________________________}
+{
+ These definitions are used in all parts of the SDK.
+}
+
+
+
+TYPE
+ {
+ XPLMPluginID
+
+ Each plug-in is identified by a unique integer ID. This ID can be used to
+ disable or enable a plug-in, or discover what plug-in is 'running' at the
+ time. A plug-in ID is unique within the currently running instance of
+ X-Plane unless plug-ins are reloaded. Plug-ins may receive a different
+ unique ID each time they are loaded.
+
+ For persistent identification of plug-ins, use XPLMFindPluginBySignature in
+ XPLMUtiltiies.h
+
+ -1 indicates no plug-in.
+ }
+ XPLMPluginID = integer;
+ PXPLMPluginID = ^XPLMPluginID;
+
+CONST
+ { No plugin. }
+ XPLM_NO_PLUGIN_ID = (-1);
+
+ { X-Plane itself }
+ XPLM_PLUGIN_XPLANE = (0);
+
+ { The current XPLM revision is 2.10 (210). }
+ kXPLM_Version = (210);
+
+ {
+ XPLMKeyFlags
+
+ These bitfields define modifier keys in a platform independent way. When a
+ key is pressed, a series of messages are sent to your plugin. The down
+ flag is set in the first of these messages, and the up flag in the last.
+ While the key is held down, messages are sent with neither to indicate that
+ the key is being held down as a repeated character.
+
+ The control flag is mapped to the control flag on Macintosh and PC.
+ Generally X-Plane uses the control key and not the command key on
+ Macintosh, providing a consistent interface across platforms that does not
+ necessarily match the Macintosh user interface guidelines. There is not
+ yet a way for plugins to access the Macintosh control keys without using
+ #ifdefed code.
+ }
+TYPE
+ XPLMKeyFlags = (
+ { The shift key is down }
+ xplm_ShiftFlag = 1
+
+ { The option or alt key is down }
+ ,xplm_OptionAltFlag = 2
+
+ { The control key is down* }
+ ,xplm_ControlFlag = 4
+
+ { The key is being pressed down }
+ ,xplm_DownFlag = 8
+
+ { The key is being released }
+ ,xplm_UpFlag = 16
+
+ );
+ PXPLMKeyFlags = ^XPLMKeyFlags;
+
+{___________________________________________________________________________
+ * ASCII CONTROL KEY CODES
+ ___________________________________________________________________________}
+{
+ These definitions define how various control keys are mapped to ASCII key
+ codes. Not all key presses generate an ASCII value, so plugin code should
+ be prepared to see null characters come from the keyboard...this usually
+ represents a key stroke that has no equivalent ASCII, like a page-down
+ press. Use virtual key codes to find these key strokes. ASCII key codes
+ take into account modifier keys; shift keys will affect capitals and
+ punctuation; control key combinations may have no vaild ASCII and produce
+ NULL. To detect control-key combinations, use virtual key codes, not ASCII
+ keys.
+}
+
+
+
+CONST
+ XPLM_KEY_RETURN = 13;
+
+ XPLM_KEY_ESCAPE = 27;
+
+ XPLM_KEY_TAB = 9;
+
+ XPLM_KEY_DELETE = 8;
+
+ XPLM_KEY_LEFT = 28;
+
+ XPLM_KEY_RIGHT = 29;
+
+ XPLM_KEY_UP = 30;
+
+ XPLM_KEY_DOWN = 31;
+
+ XPLM_KEY_0 = 48;
+
+ XPLM_KEY_1 = 49;
+
+ XPLM_KEY_2 = 50;
+
+ XPLM_KEY_3 = 51;
+
+ XPLM_KEY_4 = 52;
+
+ XPLM_KEY_5 = 53;
+
+ XPLM_KEY_6 = 54;
+
+ XPLM_KEY_7 = 55;
+
+ XPLM_KEY_8 = 56;
+
+ XPLM_KEY_9 = 57;
+
+ XPLM_KEY_DECIMAL = 46;
+
+{___________________________________________________________________________
+ * VIRTUAL KEY CODES
+ ___________________________________________________________________________}
+{
+ These are cross-platform defines for every distinct keyboard press on the
+ computer. Every physical key on the keyboard has a virtual key code. So
+ the "two" key on the top row of the main keyboard has a different code
+ from the "two" key on the numeric key pad. But the 'w' and 'W' character
+ are indistinguishable by virtual key code because they are the same
+ physical key (one with and one without the shift key).
+
+ Use virtual key codes to detect keystrokes that do not have ASCII
+ equivalents, allow the user to map the numeric keypad separately from the
+ main keyboard, and detect control key and other modifier-key combinations
+ that generate ASCII control key sequences (many of which are not available
+ directly via character keys in the SDK).
+
+ To assign virtual key codes we started with the Microsoft set but made some
+ additions and changes. A few differences:
+
+ 1. Modifier keys are not available as virtual key codes. You cannot get
+ distinct modifier press and release messages. Please do not try to use
+ modifier keys as regular keys; doing so will almost certainly interfere
+ with users' abilities to use the native x-plane key bindings.
+
+ 2. Some keys that do not exist on both Mac and PC keyboards are removed.
+
+ 3. Do not assume that the values of these keystrokes are interchangeable
+ with MS v-keys.
+}
+
+
+
+CONST
+ XPLM_VK_BACK = $08;
+
+ XPLM_VK_TAB = $09;
+
+ XPLM_VK_CLEAR = $0C;
+
+ XPLM_VK_RETURN = $0D;
+
+ XPLM_VK_ESCAPE = $1B;
+
+ XPLM_VK_SPACE = $20;
+
+ XPLM_VK_PRIOR = $21;
+
+ XPLM_VK_NEXT = $22;
+
+ XPLM_VK_END = $23;
+
+ XPLM_VK_HOME = $24;
+
+ XPLM_VK_LEFT = $25;
+
+ XPLM_VK_UP = $26;
+
+ XPLM_VK_RIGHT = $27;
+
+ XPLM_VK_DOWN = $28;
+
+ XPLM_VK_SELECT = $29;
+
+ XPLM_VK_PRINT = $2A;
+
+ XPLM_VK_EXECUTE = $2B;
+
+ XPLM_VK_SNAPSHOT = $2C;
+
+ XPLM_VK_INSERT = $2D;
+
+ XPLM_VK_DELETE = $2E;
+
+ XPLM_VK_HELP = $2F;
+
+ { XPLM_VK_0 thru XPLM_VK_9 are the same as ASCII '0' thru '9' (0x30 - 0x39) }
+ XPLM_VK_0 = $30;
+
+ XPLM_VK_1 = $31;
+
+ XPLM_VK_2 = $32;
+
+ XPLM_VK_3 = $33;
+
+ XPLM_VK_4 = $34;
+
+ XPLM_VK_5 = $35;
+
+ XPLM_VK_6 = $36;
+
+ XPLM_VK_7 = $37;
+
+ XPLM_VK_8 = $38;
+
+ XPLM_VK_9 = $39;
+
+ { XPLM_VK_A thru XPLM_VK_Z are the same as ASCII 'A' thru 'Z' (0x41 - 0x5A) }
+ XPLM_VK_A = $41;
+
+ XPLM_VK_B = $42;
+
+ XPLM_VK_C = $43;
+
+ XPLM_VK_D = $44;
+
+ XPLM_VK_E = $45;
+
+ XPLM_VK_F = $46;
+
+ XPLM_VK_G = $47;
+
+ XPLM_VK_H = $48;
+
+ XPLM_VK_I = $49;
+
+ XPLM_VK_J = $4A;
+
+ XPLM_VK_K = $4B;
+
+ XPLM_VK_L = $4C;
+
+ XPLM_VK_M = $4D;
+
+ XPLM_VK_N = $4E;
+
+ XPLM_VK_O = $4F;
+
+ XPLM_VK_P = $50;
+
+ XPLM_VK_Q = $51;
+
+ XPLM_VK_R = $52;
+
+ XPLM_VK_S = $53;
+
+ XPLM_VK_T = $54;
+
+ XPLM_VK_U = $55;
+
+ XPLM_VK_V = $56;
+
+ XPLM_VK_W = $57;
+
+ XPLM_VK_X = $58;
+
+ XPLM_VK_Y = $59;
+
+ XPLM_VK_Z = $5A;
+
+ XPLM_VK_NUMPAD0 = $60;
+
+ XPLM_VK_NUMPAD1 = $61;
+
+ XPLM_VK_NUMPAD2 = $62;
+
+ XPLM_VK_NUMPAD3 = $63;
+
+ XPLM_VK_NUMPAD4 = $64;
+
+ XPLM_VK_NUMPAD5 = $65;
+
+ XPLM_VK_NUMPAD6 = $66;
+
+ XPLM_VK_NUMPAD7 = $67;
+
+ XPLM_VK_NUMPAD8 = $68;
+
+ XPLM_VK_NUMPAD9 = $69;
+
+ XPLM_VK_MULTIPLY = $6A;
+
+ XPLM_VK_ADD = $6B;
+
+ XPLM_VK_SEPARATOR = $6C;
+
+ XPLM_VK_SUBTRACT = $6D;
+
+ XPLM_VK_DECIMAL = $6E;
+
+ XPLM_VK_DIVIDE = $6F;
+
+ XPLM_VK_F1 = $70;
+
+ XPLM_VK_F2 = $71;
+
+ XPLM_VK_F3 = $72;
+
+ XPLM_VK_F4 = $73;
+
+ XPLM_VK_F5 = $74;
+
+ XPLM_VK_F6 = $75;
+
+ XPLM_VK_F7 = $76;
+
+ XPLM_VK_F8 = $77;
+
+ XPLM_VK_F9 = $78;
+
+ XPLM_VK_F10 = $79;
+
+ XPLM_VK_F11 = $7A;
+
+ XPLM_VK_F12 = $7B;
+
+ XPLM_VK_F13 = $7C;
+
+ XPLM_VK_F14 = $7D;
+
+ XPLM_VK_F15 = $7E;
+
+ XPLM_VK_F16 = $7F;
+
+ XPLM_VK_F17 = $80;
+
+ XPLM_VK_F18 = $81;
+
+ XPLM_VK_F19 = $82;
+
+ XPLM_VK_F20 = $83;
+
+ XPLM_VK_F21 = $84;
+
+ XPLM_VK_F22 = $85;
+
+ XPLM_VK_F23 = $86;
+
+ XPLM_VK_F24 = $87;
+
+ { The following definitions are extended and are not based on the Microsoft }
+ { key set. }
+ XPLM_VK_EQUAL = $B0;
+
+ XPLM_VK_MINUS = $B1;
+
+ XPLM_VK_RBRACE = $B2;
+
+ XPLM_VK_LBRACE = $B3;
+
+ XPLM_VK_QUOTE = $B4;
+
+ XPLM_VK_SEMICOLON = $B5;
+
+ XPLM_VK_BACKSLASH = $B6;
+
+ XPLM_VK_COMMA = $B7;
+
+ XPLM_VK_SLASH = $B8;
+
+ XPLM_VK_PERIOD = $B9;
+
+ XPLM_VK_BACKQUOTE = $BA;
+
+ XPLM_VK_ENTER = $BB;
+
+ XPLM_VK_NUMPAD_ENT = $BC;
+
+ XPLM_VK_NUMPAD_EQ = $BD;
+
+IMPLEMENTATION
+END.
diff --git a/X-Plane-SDK/Delphi/XPLM/XPLMDisplay.pas b/X-Plane-SDK/Delphi/XPLM/XPLMDisplay.pas
new file mode 100755
index 0000000..751b5b5
--- /dev/null
+++ b/X-Plane-SDK/Delphi/XPLM/XPLMDisplay.pas
@@ -0,0 +1,835 @@
+{
+ Copyright 2005-2012 Sandy Barbour and Ben Supnik
+
+ All rights reserved. See license.txt for usage.
+
+ X-Plane SDK Version: 2.1.1
+}
+
+UNIT XPLMDisplay;
+INTERFACE
+{
+ XPLM Display APIs - THEORY OF OPERATION
+
+ This API provides the basic hooks to draw in X-Plane and create user
+ interface. All X-Plane drawing is done in OpenGL. The X-Plane plug-in
+ manager takes care of properly setting up the OpenGL context and matrices.
+ You do not decide when in your code's execution to draw; X-Plane tells you
+ when it is ready to have your plugin draw.
+
+ X-Plane's drawing strategy is straightforward: every "frame" the screen is
+ rendered by drawing the 3-d scene (dome, ground, objects, airplanes, etc.)
+ and then drawing the cockpit on top of it. Alpha blending is used to
+ overlay the cockpit over the world (and the gauges over the panel, etc.).
+
+ There are two ways you can draw: directly and in a window.
+
+ Direct drawing involves drawing to the screen before or after X-Plane
+ finishes a phase of drawing. When you draw directly, you can specify
+ whether x-plane is to complete this phase or not. This allows you to do
+ three things: draw before x-plane does (under it), draw after x-plane does
+ (over it), or draw instead of x-plane.
+
+ To draw directly, you register a callback and specify what phase you want
+ to intercept. The plug-in manager will call you over and over to draw that
+ phase.
+
+ Direct drawing allows you to override scenery, panels, or anything. Note
+ that you cannot assume that you are the only plug-in drawing at this
+ phase.
+
+ Window drawing provides slightly higher level functionality. With window
+ drawing you create a window that takes up a portion of the screen. Window
+ drawing is always two dimensional. Window drawing is front-to-back
+ controlled; you can specify that you want your window to be brought on
+ top, and other plug-ins may put their window on top of you. Window drawing
+ also allows you to sign up for key presses and receive mouse clicks.
+
+ There are three ways to get keystrokes:
+
+ If you create a window, the window can take keyboard focus. It will then
+ receive all keystrokes. If no window has focus, X-Plane receives
+ keystrokes. Use this to implement typing in dialog boxes, etc. Only one
+ window may have focus at a time; your window will be notified if it loses
+ focus.
+
+ If you need to associate key strokes with commands/functions in your
+ plug-in, use a hot key. A hoy is a key-specific callback. Hotkeys are
+ sent based on virtual key strokes, so any key may be distinctly mapped with
+ any modifiers. Hot keys can be remapped by other plug-ins. As a plug-in,
+ you don't have to worry about what your hot key ends up mapped to; other
+ plug-ins may provide a UI for remapping keystrokes. So hotkeys allow a
+ user to resolve conflicts and customize keystrokes.
+
+ If you need low level access to the keystroke stream, install a key
+ sniffer. Key sniffers can be installed above everything or right in front
+ of the sim.
+}
+
+USES XPLMDefs;
+ {$A4}
+{$IFDEF MSWINDOWS}
+ {$DEFINE DELPHI}
+{$ENDIF}
+{___________________________________________________________________________
+ * DRAWING CALLBACKS
+ ___________________________________________________________________________}
+{
+ Basic drawing callbacks, for low level intercepting of render loop. The
+ purpose of drawing callbacks is to provide targeted additions or
+ replacements to x-plane's graphics environment (for example, to add extra
+ custom objects, or replace drawing of the AI aircraft). Do not assume that
+ the drawing callbacks will be called in the order implied by the
+ enumerations. Also do not assume that each drawing phase ends before
+ another begins; they may be nested.
+}
+
+
+
+ {
+ XPLMDrawingPhase
+
+ This constant indicates which part of drawing we are in. Drawing is done
+ from the back to the front. We get a callback before or after each item.
+ Metaphases provide access to the beginning and end of the 3d (scene) and 2d
+ (cockpit) drawing in a manner that is independent of new phases added via
+ x-plane implementation.
+
+ WARNING: As X-Plane's scenery evolves, some drawing phases may cease to
+ exist and new ones may be invented. If you need a particularly specific
+ use of these codes, consult Austin and/or be prepared to revise your code
+ as X-Plane evolves.
+ }
+TYPE
+ XPLMDrawingPhase = (
+ { This is the earliest point at which you can draw in 3-d. }
+ xplm_Phase_FirstScene = 0
+
+ { Drawing of land and water. }
+ ,xplm_Phase_Terrain = 5
+
+ { Drawing runways and other airport detail. }
+ ,xplm_Phase_Airports = 10
+
+ { Drawing roads, trails, trains, etc. }
+ ,xplm_Phase_Vectors = 15
+
+ { 3-d objects (houses, smokestacks, etc. }
+ ,xplm_Phase_Objects = 20
+
+ { External views of airplanes, both yours and the AI aircraft. }
+ ,xplm_Phase_Airplanes = 25
+
+ { This is the last point at which you can draw in 3-d. }
+ ,xplm_Phase_LastScene = 30
+
+ { This is the first phase where you can draw in 2-d. }
+ ,xplm_Phase_FirstCockpit = 35
+
+ { The non-moving parts of the aircraft panel. }
+ ,xplm_Phase_Panel = 40
+
+ { The moving parts of the aircraft panel. }
+ ,xplm_Phase_Gauges = 45
+
+ { Floating windows from plugins. }
+ ,xplm_Phase_Window = 50
+
+ { The last change to draw in 2d. }
+ ,xplm_Phase_LastCockpit = 55
+
+{$IFDEF XPLM200}
+ { 3-d Drawing for the local map. Use regular OpenGL coordinates to draw in }
+ { this phase. }
+ ,xplm_Phase_LocalMap3D = 100
+{$ENDIF}
+
+{$IFDEF XPLM200}
+ { 2-d Drawing of text over the local map. }
+ ,xplm_Phase_LocalMap2D = 101
+{$ENDIF}
+
+{$IFDEF XPLM200}
+ { Drawing of the side-profile view in the local map screen. }
+ ,xplm_Phase_LocalMapProfile = 102
+{$ENDIF}
+
+ );
+ PXPLMDrawingPhase = ^XPLMDrawingPhase;
+
+ {
+ XPLMDrawCallback_f
+
+ This is the prototype for a low level drawing callback. You are passed in
+ the phase and whether it is before or after. If you are before the phase,
+ return 1 to let x-plane draw or 0 to suppress x-plane drawing. If you are
+ after the phase the return value is ignored.
+
+ Refcon is a unique value that you specify when registering the callback,
+ allowing you to slip a pointer to your own data to the callback.
+
+ Upon entry the OpenGL context will be correctly set up for you and OpenGL
+ will be in 'local' coordinates for 3d drawing and panel coordinates for 2d
+ drawing. The OpenGL state (texturing, etc.) will be unknown.
+ }
+ XPLMDrawCallback_f = FUNCTION(
+ inPhase : XPLMDrawingPhase;
+ inIsBefore : integer;
+ inRefcon : pointer) : integer; cdecl;
+
+ {
+ XPLMKeySniffer_f
+
+ This is the prototype for a low level key-sniffing function. Window-based
+ UI _should not use this_! The windowing system provides high-level
+ mediated keyboard access. By comparison, the key sniffer provides low
+ level keyboard access.
+
+ Key sniffers are provided to allow libraries to provide non-windowed user
+ interaction. For example, the MUI library uses a key sniffer to do pop-up
+ text entry.
+
+ inKey is the character pressed, inRefCon is a value you supply during
+ registration. Return 1 to pass the key on to the next sniffer, the window
+ mgr, x-plane, or whomever is down stream. Return 0 to consume the key.
+
+ Warning: this API declares virtual keys as a signed character; however the
+ VKEY #define macros in XPLMDefs.h define the vkeys using unsigned values
+ (that is 0x80 instead of -0x80). So you may need to cast the incoming vkey
+ to an unsigned char to get correct comparisons in C.
+ }
+ XPLMKeySniffer_f = FUNCTION(
+ inChar : char;
+ inFlags : XPLMKeyFlags;
+ inVirtualKey : char;
+ inRefcon : pointer) : integer; cdecl;
+
+ {
+ XPLMRegisterDrawCallback
+
+ This routine registers a low level drawing callback. Pass in the phase you
+ want to be called for and whether you want to be called before or after.
+ This routine returns 1 if the registration was successful, or 0 if the
+ phase does not exist in this version of x-plane. You may register a
+ callback multiple times for the same or different phases as long as the
+ refcon is unique each time.
+ }
+ FUNCTION XPLMRegisterDrawCallback(
+ inCallback : XPLMDrawCallback_f;
+ inPhase : XPLMDrawingPhase;
+ inWantsBefore : integer;
+ inRefcon : pointer) : integer;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMUnregisterDrawCallback
+
+ This routine unregisters a draw callback. You must unregister a callback
+ for each time you register a callback if you have registered it multiple
+ times with different refcons. The routine returns 1 if it can find the
+ callback to unregister, 0 otherwise.
+ }
+ FUNCTION XPLMUnregisterDrawCallback(
+ inCallback : XPLMDrawCallback_f;
+ inPhase : XPLMDrawingPhase;
+ inWantsBefore : integer;
+ inRefcon : pointer) : integer;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMRegisterKeySniffer
+
+ This routine registers a key sniffing callback. You specify whether you
+ want to sniff before the window system, or only sniff keys the window
+ system does not consume. You should ALMOST ALWAYS sniff non-control keys
+ after the window system. When the window system consumes a key, it is
+ because the user has "focused" a window. Consuming the key or taking
+ action based on the key will produce very weird results. Returns 1 if
+ successful.
+ }
+ FUNCTION XPLMRegisterKeySniffer(
+ inCallback : XPLMKeySniffer_f;
+ inBeforeWindows : integer;
+ inRefcon : pointer) : integer;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMUnregisterKeySniffer
+
+ This routine unregisters a key sniffer. You must unregister a key sniffer
+ for every time you register one with the exact same signature. Returns 1
+ if successful.
+ }
+ FUNCTION XPLMUnregisterKeySniffer(
+ inCallback : XPLMKeySniffer_f;
+ inBeforeWindows : integer;
+ inRefcon : pointer) : integer;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+{___________________________________________________________________________
+ * WINDOW API
+ ___________________________________________________________________________}
+{
+ Window API, for higher level drawing with UI interaction.
+
+ Note: all 2-d (and thus all window drawing) is done in 'cockpit pixels'.
+ Even when the OpenGL window contains more than 1024x768 pixels, the cockpit
+ drawing is magnified so that only 1024x768 pixels are available.
+}
+
+
+
+ {
+ XPLMMouseStatus
+
+ When the mouse is clicked, your mouse click routine is called repeatedly.
+ It is first called with the mouse down message. It is then called zero or
+ more times with the mouse-drag message, and finally it is called once with
+ the mouse up message. All of these messages will be directed to the same
+ window.
+ }
+TYPE
+ XPLMMouseStatus = (
+ xplm_MouseDown = 1
+
+ ,xplm_MouseDrag = 2
+
+ ,xplm_MouseUp = 3
+
+ );
+ PXPLMMouseStatus = ^XPLMMouseStatus;
+
+{$IFDEF XPLM200}
+ {
+ XPLMCursorStatus
+
+ XPLMCursorStatus describes how you would like X-Plane to manage the cursor.
+ See XPLMHandleCursor_f for more info.
+ }
+ XPLMCursorStatus = (
+ { X-Plane manages the cursor normally, plugin does not affect the cusrsor. }
+ xplm_CursorDefault = 0
+
+ { X-Plane hides the cursor. }
+ ,xplm_CursorHidden = 1
+
+ { X-Plane shows the cursor as the default arrow. }
+ ,xplm_CursorArrow = 2
+
+ { X-Plane shows the cursor but lets you select an OS cursor. }
+ ,xplm_CursorCustom = 3
+
+ );
+ PXPLMCursorStatus = ^XPLMCursorStatus;
+{$ENDIF}
+
+ {
+ XPLMWindowID
+
+ This is an opaque identifier for a window. You use it to control your
+ window. When you create a window, you will specify callbacks to handle
+ drawing and mouse interaction, etc.
+ }
+ XPLMWindowID = pointer;
+ PXPLMWindowID = ^XPLMWindowID;
+
+ {
+ XPLMDrawWindow_f
+
+ This function handles drawing. You are passed in your window and its
+ refcon. Draw the window. You can use XPLM functions to find the current
+ dimensions of your window, etc. When this callback is called, the OpenGL
+ context will be set properly for cockpit drawing. NOTE: Because you are
+ drawing your window over a background, you can make a translucent window
+ easily by simply not filling in your entire window's bounds.
+ }
+ XPLMDrawWindow_f = PROCEDURE(
+ inWindowID : XPLMWindowID;
+ inRefcon : pointer); cdecl;
+
+ {
+ XPLMHandleKey_f
+
+ This function is called when a key is pressed or keyboard focus is taken
+ away from your window. If losingFocus is 1, you are losign the keyboard
+ focus, otherwise a key was pressed and inKey contains its character. You
+ are also passewd your window and a refcon. Warning: this API declares
+ virtual keys as a signed character; however the VKEY #define macros in
+ XPLMDefs.h define the vkeys using unsigned values (that is 0x80 instead of
+ -0x80). So you may need to cast the incoming vkey to an unsigned char to
+ get correct comparisons in C.
+ }
+ XPLMHandleKey_f = PROCEDURE(
+ inWindowID : XPLMWindowID;
+ inKey : char;
+ inFlags : XPLMKeyFlags;
+ inVirtualKey : char;
+ inRefcon : pointer;
+ losingFocus : integer); cdecl;
+
+ {
+ XPLMHandleMouseClick_f
+
+ You receive this call when the mouse button is pressed down or released.
+ Between then these two calls is a drag. You receive the x and y of the
+ click, your window, and a refcon. Return 1 to consume the click, or 0 to
+ pass it through.
+
+ WARNING: passing clicks through windows (as of this writing) causes mouse
+ tracking problems in X-Plane; do not use this feature!
+ }
+ XPLMHandleMouseClick_f = FUNCTION(
+ inWindowID : XPLMWindowID;
+ x : integer;
+ y : integer;
+ inMouse : XPLMMouseStatus;
+ inRefcon : pointer) : integer; cdecl;
+
+{$IFDEF XPLM200}
+ {
+ XPLMHandleCursor_f
+
+ The SDK calls your cursor status callback when the mouse is over your
+ plugin window. Return a cursor status code to indicate how you would like
+ X-Plane to manage the cursor. If you return xplm_CursorDefault, the SDK
+ will try lower-Z-order plugin windows, then let the sim manage the cursor.
+
+ Note: you should never show or hide the cursor yourself - these APIs are
+ typically reference-counted and thus cannot safely and predictably be used
+ by the SDK. Instead return one of xplm_CursorHidden to hide the cursor or
+ xplm_CursorArrow/xplm_CursorCustom to show the cursor.
+
+ If you want to implement a custom cursor by drawing a cursor in OpenGL, use
+ xplm_CursorHidden to hide the OS cursor and draw the cursor using a 2-d
+ drawing callback (after xplm_Phase_Window is probably a good choice). If
+ you want to use a custom OS-based cursor, use xplm_CursorCustom to ask
+ X-Plane to show the cursor but not affect its image. You can then use an
+ OS specific call like SetThemeCursor (Mac) or SetCursor/LoadCursor
+ (Windows).
+ }
+ XPLMHandleCursor_f = FUNCTION(
+ inWindowID : XPLMWindowID;
+ x : integer;
+ y : integer;
+ inRefcon : pointer) : XPLMCursorStatus; cdecl;
+{$ENDIF}
+
+{$IFDEF XPLM200}
+ {
+ XPLMHandleMouseWheel_f
+
+ The SDK calls your mouse wheel callback when one of the mouse wheels is
+ turned within your window. Return 1 to consume the mouse wheel clicks or
+ 0 to pass them on to a lower window. (You should consume mouse wheel
+ clicks even if they do nothing if your window appears opaque to the user.)
+ The number of clicks indicates how far the wheel was turned since the last
+ callback. The wheel is 0 for the vertical axis or 1 for the horizontal axis
+ (for OS/mouse combinations that support this).
+ }
+ XPLMHandleMouseWheel_f = FUNCTION(
+ inWindowID : XPLMWindowID;
+ x : integer;
+ y : integer;
+ wheel : integer;
+ clicks : integer;
+ inRefcon : pointer) : integer; cdecl;
+{$ENDIF}
+
+{$IFDEF XPLM200}
+ {
+ XPLMCreateWindow_t
+
+ The XPMCreateWindow_t structure defines all of the parameters used to
+ create a window using XPLMCreateWindowEx. The structure will be expanded
+ in future SDK APIs to include more features. Always set the structSize
+ member to the size of your struct in bytes!
+ }
+ XPLMCreateWindow_t = RECORD
+ structSize : integer;
+ left : integer;
+ top : integer;
+ right : integer;
+ bottom : integer;
+ visible : integer;
+ drawWindowFunc : XPLMDrawWindow_f;
+ handleMouseClickFunc : XPLMHandleMouseClick_f;
+ handleKeyFunc : XPLMHandleKey_f;
+ handleCursorFunc : XPLMHandleCursor_f;
+ handleMouseWheelFunc : XPLMHandleMouseWheel_f;
+ refcon : pointer;
+ END;
+ PXPLMCreateWindow_t = ^XPLMCreateWindow_t;
+{$ENDIF}
+
+ {
+ XPLMGetScreenSize
+
+ This routine returns the size of the size of the X-Plane OpenGL window in
+ pixels. Please note that this is not the size of the screen when doing
+ 2-d drawing (the 2-d screen is currently always 1024x768, and graphics are
+ scaled up by OpenGL when doing 2-d drawing for higher-res monitors). This
+ number can be used to get a rough idea of the amount of detail the user
+ will be able to see when drawing in 3-d.
+ }
+ PROCEDURE XPLMGetScreenSize(
+ outWidth : Pinteger; { Can be nil }
+ outHeight : Pinteger); { Can be nil }
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMGetMouseLocation
+
+ This routine returns the current mouse location in cockpit pixels. The
+ bottom left corner of the display is 0,0. Pass NULL to not receive info
+ about either parameter.
+ }
+ PROCEDURE XPLMGetMouseLocation(
+ outX : Pinteger; { Can be nil }
+ outY : Pinteger); { Can be nil }
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMCreateWindow
+
+ This routine creates a new window. Pass in the dimensions and offsets to
+ the window's bottom left corner from the bottom left of the screen. You
+ can specify whether the window is initially visible or not. Also, you pass
+ in three callbacks to run the window and a refcon. This function returns a
+ window ID you can use to refer to the new window.
+
+ NOTE: windows do not have "frames"; you are responsible for drawing the
+ background and frame of the window. Higher level libraries have routines
+ which make this easy.
+ }
+ FUNCTION XPLMCreateWindow(
+ inLeft : integer;
+ inTop : integer;
+ inRight : integer;
+ inBottom : integer;
+ inIsVisible : integer;
+ inDrawCallback : XPLMDrawWindow_f;
+ inKeyCallback : XPLMHandleKey_f;
+ inMouseCallback : XPLMHandleMouseClick_f;
+ inRefcon : pointer) : XPLMWindowID;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+{$IFDEF XPLM200}
+ {
+ XPLMCreateWindowEx
+
+ This routine creates a new window - you pass in an XPLMCreateWindow_t
+ structure with all of the fields set in. You must set the structSize of
+ the structure to the size of the actual structure you used. Also, you
+ must provide funtions for every callback - you may not leave them null!
+ (If you do not support the cursor or mouse wheel, use functions that return
+ the default values.) The numeric values of the XPMCreateWindow_t structure
+ correspond to the parameters of XPLMCreateWindow.
+ }
+ FUNCTION XPLMCreateWindowEx(
+ inParams : PXPLMCreateWindow_t) : XPLMWindowID;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+{$ENDIF}
+
+ {
+ XPLMDestroyWindow
+
+ This routine destroys a window. The callbacks are not called after this
+ call. Keyboard focus is removed from the window before destroying it.
+ }
+ PROCEDURE XPLMDestroyWindow(
+ inWindowID : XPLMWindowID);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMGetWindowGeometry
+
+ This routine returns the position and size of a window in cockpit pixels.
+ Pass NULL to not receive any paramter.
+ }
+ PROCEDURE XPLMGetWindowGeometry(
+ inWindowID : XPLMWindowID;
+ outLeft : Pinteger; { Can be nil }
+ outTop : Pinteger; { Can be nil }
+ outRight : Pinteger; { Can be nil }
+ outBottom : Pinteger); { Can be nil }
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMSetWindowGeometry
+
+ This routine allows you to set the position or height aspects of a window.
+ }
+ PROCEDURE XPLMSetWindowGeometry(
+ inWindowID : XPLMWindowID;
+ inLeft : integer;
+ inTop : integer;
+ inRight : integer;
+ inBottom : integer);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMGetWindowIsVisible
+
+ This routine returns whether a window is visible.
+ }
+ FUNCTION XPLMGetWindowIsVisible(
+ inWindowID : XPLMWindowID) : integer;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMSetWindowIsVisible
+
+ This routine shows or hides a window.
+ }
+ PROCEDURE XPLMSetWindowIsVisible(
+ inWindowID : XPLMWindowID;
+ inIsVisible : integer);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMGetWindowRefCon
+
+ This routine returns a windows refcon, the unique value you can use for
+ your own purposes.
+ }
+ FUNCTION XPLMGetWindowRefCon(
+ inWindowID : XPLMWindowID) : pointer;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMSetWindowRefCon
+
+ This routine sets a window's reference constant. Use this to pass data to
+ yourself in the callbacks.
+ }
+ PROCEDURE XPLMSetWindowRefCon(
+ inWindowID : XPLMWindowID;
+ inRefcon : pointer);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMTakeKeyboardFocus
+
+ This routine gives a specific window keyboard focus. Keystrokes will be
+ sent to that window. Pass a window ID of 0 to pass keyboard strokes
+ directly to X-Plane.
+ }
+ PROCEDURE XPLMTakeKeyboardFocus(
+ inWindow : XPLMWindowID);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMBringWindowToFront
+
+ This routine brings the window to the front of the Z-order. Windows are
+ brought to the front when they are created...beyond that you should make
+ sure you are front before handling mouse clicks.
+ }
+ PROCEDURE XPLMBringWindowToFront(
+ inWindow : XPLMWindowID);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMIsWindowInFront
+
+ This routine returns true if you pass inthe ID of the frontmost visible
+ window.
+ }
+ FUNCTION XPLMIsWindowInFront(
+ inWindow : XPLMWindowID) : integer;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+{___________________________________________________________________________
+ * HOT KEYS
+ ___________________________________________________________________________}
+{
+ Hot Keys - keystrokes that can be managed by others.
+}
+
+
+
+ {
+ XPLMHotKey_f
+
+ Your hot key callback simply takes a pointer of your choosing.
+ }
+TYPE
+ XPLMHotKey_f = PROCEDURE(
+ inRefcon : pointer); cdecl;
+
+ {
+ XPLMHotKeyID
+
+ Hot keys are identified by opaque IDs.
+ }
+ XPLMHotKeyID = pointer;
+ PXPLMHotKeyID = ^XPLMHotKeyID;
+
+ {
+ XPLMRegisterHotKey
+
+ This routine registers a hot key. You specify your preferred key stroke
+ virtual key/flag combination, a description of what your callback does (so
+ other plug-ins can describe the plug-in to the user for remapping) and a
+ callback function and opaque pointer to pass in). A new hot key ID is
+ returned. During execution, the actual key associated with your hot key
+ may change, but you are insulated from this.
+ }
+ FUNCTION XPLMRegisterHotKey(
+ inVirtualKey : char;
+ inFlags : XPLMKeyFlags;
+ inDescription : Pchar;
+ inCallback : XPLMHotKey_f;
+ inRefcon : pointer) : XPLMHotKeyID;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMUnregisterHotKey
+
+ This API unregisters a hot key. You can only register your own hot keys.
+ }
+ PROCEDURE XPLMUnregisterHotKey(
+ inHotKey : XPLMHotKeyID);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMCountHotKeys
+
+ Returns the number of current hot keys.
+ }
+ FUNCTION XPLMCountHotKeys: integer;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMGetNthHotKey
+
+ Returns a hot key by index, for iteration on all hot keys.
+ }
+ FUNCTION XPLMGetNthHotKey(
+ inIndex : integer) : XPLMHotKeyID;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMGetHotKeyInfo
+
+ Returns information about the hot key. Return NULL for any parameter you
+ don't want info about. The description should be at least 512 chars long.
+ }
+ PROCEDURE XPLMGetHotKeyInfo(
+ inHotKey : XPLMHotKeyID;
+ outVirtualKey : Pchar; { Can be nil }
+ outFlags : PXPLMKeyFlags; { Can be nil }
+ outDescription : Pchar; { Can be nil }
+ outPlugin : PXPLMPluginID); { Can be nil }
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMSetHotKeyCombination
+
+ XPLMSetHotKeyCombination remaps a hot keys keystrokes. You may remap
+ another plugin's keystrokes.
+ }
+ PROCEDURE XPLMSetHotKeyCombination(
+ inHotKey : XPLMHotKeyID;
+ inVirtualKey : char;
+ inFlags : XPLMKeyFlags);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+IMPLEMENTATION
+END.
diff --git a/X-Plane-SDK/Delphi/XPLM/XPLMGraphics.pas b/X-Plane-SDK/Delphi/XPLM/XPLMGraphics.pas
new file mode 100755
index 0000000..713f14a
--- /dev/null
+++ b/X-Plane-SDK/Delphi/XPLM/XPLMGraphics.pas
@@ -0,0 +1,441 @@
+{
+ Copyright 2005-2012 Sandy Barbour and Ben Supnik
+
+ All rights reserved. See license.txt for usage.
+
+ X-Plane SDK Version: 2.1.1
+}
+
+UNIT XPLMGraphics;
+INTERFACE
+{
+ Graphics routines for X-Plane and OpenGL.
+
+ A few notes on coordinate systems:
+
+ X-Plane uses three kinds of coordinates. Global coordinates are specified
+ as latitude, longitude and elevation. This coordinate system never changes
+ but is not very precise.
+
+ OpenGL (or 'local') coordinates are cartesian and shift with the plane.
+ They offer more precision and are used for 3-d OpenGL drawing. The X axis
+ is aligned east-west with positive X meaning east. The Y axis is aligned
+ straight up and down at the point 0,0,0 (but since the earth is round it is
+ not truly straight up and down at other points). The Z axis is aligned
+ north-south at 0, 0, 0 with positive Z pointing south (but since the earth
+ is round it isn't exactly north-south as you move east or west of 0, 0, 0).
+ One unit is one meter and the point 0,0,0 is on the surface of the earth
+ at sea level for some latitude and longitude picked by the sim such that
+ the user's aircraft is reasonably nearby.
+
+ Cockpit coordinates are 2d, with the X axis horizontal and the Y axis
+ vertical. The point 0,0 is the bottom left and 1024,768 is the upper right
+ of the screen. This is true no matter what resolution the user's monitor is
+ in; when running in higher resolution, graphics will be scaled.
+
+ Use X-Plane's routines to convert between global and local coordinates. Do
+ not attempt to do this conversion yourself; the precise 'roundness' of
+ X-Plane's physics model may not match your own, and (to make things
+ weirder) the user can potentially customize the physics of the current
+ planet.
+}
+
+USES XPLMDefs;
+ {$A4}
+{$IFDEF MSWINDOWS}
+ {$DEFINE DELPHI}
+{$ENDIF}
+{___________________________________________________________________________
+ * X-PLANE GRAPHICS
+ ___________________________________________________________________________}
+{
+ These routines allow you to use OpenGL with X-Plane.
+}
+
+
+
+ {
+ XPLMTextureID
+
+ XPLM Texture IDs name well-known textures in the sim for you to use. This
+ allows you to recycle textures from X-Plane, saving VRAM.
+ }
+TYPE
+ XPLMTextureID = (
+ { The bitmap that contains window outlines, button outlines, fonts, etc. }
+ xplm_Tex_GeneralInterface = 0
+
+ { The exterior paint for the user's aircraft (daytime). }
+ ,xplm_Tex_AircraftPaint = 1
+
+ { The exterior light map for the user's aircraft. }
+ ,xplm_Tex_AircraftLiteMap = 2
+
+ );
+ PXPLMTextureID = ^XPLMTextureID;
+
+ {
+ XPLMSetGraphicsState
+
+ XPLMSetGraphicsState changes OpenGL's graphics state in a number of ways:
+
+ inEnableFog - enables or disables fog, equivalent to: glEnable(GL_FOG);
+
+ inNumberTexUnits - enables or disables a number of multitexturing units. If
+ the number is 0, 2d texturing is disabled entirely, as in
+ glDisable(GL_TEXTURE_2D); Otherwise, 2d texturing is enabled, and a
+ number of multitexturing units are enabled sequentially, starting with
+ unit 0, e.g. glActiveTextureARB(GL_TEXTURE0_ARB); glEnable
+ (GL_TEXTURE_2D);
+
+ inEnableLighting - enables or disables OpenGL lighting, e.g.
+ glEnable(GL_LIGHTING); glEnable(GL_LIGHT0);
+
+ inEnableAlphaTesting - enables or disables the alpha test per pixel, e.g.
+ glEnable(GL_ALPHA_TEST);
+
+ inEnableAlphaBlending - enables or disables alpha blending per pixel, e.g.
+ glEnable(GL_BLEND);
+
+ inEnableDepthTesting - enables per pixel depth testing, as in
+ glEnable(GL_DEPTH_TEST);
+
+ inEnableDepthWriting - enables writing back of depth information to the
+ depth bufffer, as in glDepthMask(GL_TRUE);
+
+ The purpose of this function is to change OpenGL state while keeping
+ X-Plane aware of the state changes; this keeps X-Plane from getting
+ surprised by OGL state changes, and prevents X-Plane and plug-ins from
+ having to set all state before all draws; XPLMSetGraphicsState internally
+ skips calls to change state that is already properly enabled.
+
+ X-Plane does not have a 'default' OGL state to plug-ins; plug-ins should
+ totally set OGL state before drawing. Use XPLMSetGraphicsState instead of
+ any of the above OpenGL calls.
+
+ WARNING: Any routine that performs drawing (e.g. XPLMDrawString or widget
+ code) may change X-Plane's state. Always set state before drawing after
+ unknown code has executed.
+ }
+ PROCEDURE XPLMSetGraphicsState(
+ inEnableFog : integer;
+ inNumberTexUnits : integer;
+ inEnableLighting : integer;
+ inEnableAlphaTesting: integer;
+ inEnableAlphaBlending: integer;
+ inEnableDepthTesting: integer;
+ inEnableDepthWriting: integer);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMBindTexture2d
+
+ XPLMBindTexture2d changes what texture is bound to the 2d texturing target.
+ This routine caches the current 2d texture across all texturing units in
+ the sim and plug-ins, preventing extraneous binding. For example, consider
+ several plug-ins running in series; if they all use the 'general interface'
+ bitmap to do UI, calling this function will skip the rebinding of the
+ general interface texture on all but the first plug-in, which can provide
+ better frame rate son some graphics cards.
+
+ inTextureID is the ID of the texture object to bind; inTextureUnit is a
+ zero-based texture unit (e.g. 0 for the first one), up to a maximum of 4
+ units. (This number may increase in future versions of x-plane.)
+
+ Use this routine instead of glBindTexture(GL_TEXTURE_2D, ....);
+ }
+ PROCEDURE XPLMBindTexture2d(
+ inTextureNum : integer;
+ inTextureUnit : integer);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMGenerateTextureNumbers
+
+ This routine generates unused texture numbers that a plug-in can use to
+ safely bind textures. Use this routine instead of glGenTextures;
+ glGenTextures will allocate texture numbers in ranges that X-Plane reserves
+ for its own use but does not always use; for example, it might provide an
+ ID within the range of textures reserved for terrain...loading a new .env
+ file as the plane flies might then cause X-Plane to use this texture ID.
+ X-Plane will then overwrite the plug-ins texture. This routine returns
+ texture IDs that are out of X-Plane's usage range.
+ }
+ PROCEDURE XPLMGenerateTextureNumbers(
+ outTextureIDs : Pinteger;
+ inCount : integer);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMGetTexture
+
+ XPLMGetTexture returns the OpenGL texture enumeration of an X-Plane texture
+ based on a generic identifying code. For example, you can get the texture
+ for X-Plane's UI bitmaps. This allows you to build new gauges that take
+ advantage of x-plane's textures, for smooth artwork integration and also
+ saving texture memory. Note that the texture might not be loaded yet,
+ depending on what the plane's panel contains.
+
+ OPEN ISSUE: We really need a way to make sure X-Plane loads this texture if
+ it isn't around, or at least a way to find out whether it is loaded or not.
+ }
+ FUNCTION XPLMGetTexture(
+ inTexture : XPLMTextureID) : integer;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMWorldToLocal
+
+ This routine translates coordinates from latitude, longitude, and altitude
+ to local scene coordinates. Latitude and longitude are in decimal degrees,
+ and altitude is in meters MSL (mean sea level). The XYZ coordinates are in
+ meters in the local OpenGL coordinate system.
+ }
+ PROCEDURE XPLMWorldToLocal(
+ inLatitude : real;
+ inLongitude : real;
+ inAltitude : real;
+ outX : Preal;
+ outY : Preal;
+ outZ : Preal);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMLocalToWorld
+
+ This routine translates a local coordinate triplet back into latitude,
+ longitude, and altitude. Latitude and longitude are in decimal degrees,
+ and altitude is in meters MSL (mean sea level). The XYZ coordinates are in
+ meters in the local OpenGL coordinate system.
+
+ NOTE: world coordinates are less precise than local coordinates; you should
+ try to avoid round tripping from local to world and back.
+ }
+ PROCEDURE XPLMLocalToWorld(
+ inX : real;
+ inY : real;
+ inZ : real;
+ outLatitude : Preal;
+ outLongitude : Preal;
+ outAltitude : Preal);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMDrawTranslucentDarkBox
+
+ This routine draws a translucent dark box, partially obscuring parts of the
+ screen but making text easy to read. This is the same graphics primitive
+ used by X-Plane to show text files and ATC info.
+ }
+ PROCEDURE XPLMDrawTranslucentDarkBox(
+ inLeft : integer;
+ inTop : integer;
+ inRight : integer;
+ inBottom : integer);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+{___________________________________________________________________________
+ * X-PLANE TEXT
+ ___________________________________________________________________________}
+{
+
+}
+
+
+
+ {
+ XPLMFontID
+
+ X-Plane features some fixed-character fonts. Each font may have its own
+ metrics.
+
+ WARNING: Some of these fonts are no longer supported or may have changed
+ geometries. For maximum copmatibility, see the comments below.
+
+ Note: X-Plane 7 supports proportional-spaced fonts. Since no measuring
+ routine is available yet, the SDK will normally draw using a fixed-width
+ font. You can use a dataref to enable proportional font drawing on XP7 if
+ you want to.
+ }
+TYPE
+ XPLMFontID = (
+ { Mono-spaced font for user interface. Available in all versions of the SDK. }
+ xplmFont_Basic = 0
+
+ { Deprecated, do not use. }
+ ,xplmFont_Menus = 1
+
+ { Deprecated, do not use. }
+ ,xplmFont_Metal = 2
+
+ { Deprecated, do not use. }
+ ,xplmFont_Led = 3
+
+ { Deprecated, do not use. }
+ ,xplmFont_LedWide = 4
+
+ { Deprecated, do not use. }
+ ,xplmFont_PanelHUD = 5
+
+ { Deprecated, do not use. }
+ ,xplmFont_PanelEFIS = 6
+
+ { Deprecated, do not use. }
+ ,xplmFont_PanelGPS = 7
+
+ { Deprecated, do not use. }
+ ,xplmFont_RadiosGA = 8
+
+ { Deprecated, do not use. }
+ ,xplmFont_RadiosBC = 9
+
+ { Deprecated, do not use. }
+ ,xplmFont_RadiosHM = 10
+
+ { Deprecated, do not use. }
+ ,xplmFont_RadiosGANarrow = 11
+
+ { Deprecated, do not use. }
+ ,xplmFont_RadiosBCNarrow = 12
+
+ { Deprecated, do not use. }
+ ,xplmFont_RadiosHMNarrow = 13
+
+ { Deprecated, do not use. }
+ ,xplmFont_Timer = 14
+
+ { Deprecated, do not use. }
+ ,xplmFont_FullRound = 15
+
+ { Deprecated, do not use. }
+ ,xplmFont_SmallRound = 16
+
+ { Deprecated, do not use. }
+ ,xplmFont_Menus_Localized = 17
+
+{$IFDEF XPLM200}
+ { Proportional UI font. }
+ ,xplmFont_Proportional = 18
+{$ENDIF}
+
+ );
+ PXPLMFontID = ^XPLMFontID;
+
+ {
+ XPLMDrawString
+
+ This routine draws a NULL termianted string in a given font. Pass in the
+ lower left pixel that the character is to be drawn onto. Also pass the
+ character and font ID. This function returns the x offset plus the width of
+ all drawn characters. The color to draw in is specified as a pointer to an
+ array of three floating point colors, representing RGB intensities from 0.0
+ to 1.0.
+ }
+ PROCEDURE XPLMDrawString(
+ inColorRGB : Psingle;
+ inXOffset : integer;
+ inYOffset : integer;
+ inChar : Pchar;
+ inWordWrapWidth : Pinteger; { Can be nil }
+ inFontID : XPLMFontID);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMDrawNumber
+
+ This routine draws a number similar to the digit editing fields in
+ PlaneMaker and data output display in X-Plane. Pass in a color, a
+ position, a floating point value, and formatting info. Specify how many
+ integer and how many decimal digits to show and whether to show a sign, as
+ well as a character set. This routine returns the xOffset plus width of the
+ string drawn.
+ }
+ PROCEDURE XPLMDrawNumber(
+ inColorRGB : Psingle;
+ inXOffset : integer;
+ inYOffset : integer;
+ inValue : real;
+ inDigits : integer;
+ inDecimals : integer;
+ inShowSign : integer;
+ inFontID : XPLMFontID);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMGetFontDimensions
+
+ This routine returns the width and height of a character in a given font.
+ It also tells you if the font only supports numeric digits. Pass NULL if
+ you don't need a given field. Note that for a proportional font the width
+ will be an arbitrary, hopefully average width.
+ }
+ PROCEDURE XPLMGetFontDimensions(
+ inFontID : XPLMFontID;
+ outCharWidth : Pinteger; { Can be nil }
+ outCharHeight : Pinteger; { Can be nil }
+ outDigitsOnly : Pinteger); { Can be nil }
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+{$IFDEF XPLM200}
+ {
+ XPLMMeasureString
+
+ This routine returns the width in pixels of a string using a given font.
+ The string is passed as a pointer plus length (and does not need to be null
+ terminated); this is used to allow for measuring substrings. The return
+ value is floating point; it is possible that future font drawing may allow
+ for fractional pixels.
+ }
+ FUNCTION XPLMMeasureString(
+ inFontID : XPLMFontID;
+ inChar : Pchar;
+ inNumChars : integer) : single;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+{$ENDIF}
+
+IMPLEMENTATION
+END.
diff --git a/X-Plane-SDK/Delphi/XPLM/XPLMMenus.pas b/X-Plane-SDK/Delphi/XPLM/XPLMMenus.pas
new file mode 100755
index 0000000..d113952
--- /dev/null
+++ b/X-Plane-SDK/Delphi/XPLM/XPLMMenus.pas
@@ -0,0 +1,259 @@
+{
+ Copyright 2005-2012 Sandy Barbour and Ben Supnik
+
+ All rights reserved. See license.txt for usage.
+
+ X-Plane SDK Version: 2.1.1
+}
+
+UNIT XPLMMenus;
+INTERFACE
+{
+ XPLMMenus - Theory of Operation
+
+ Plug-ins can create menus in the menu bar of X-Plane. This is done by
+ creating a menu and then creating items. Menus are referred to by an
+ opaque ID. Items are referred to by index number. For each menu and item
+ you specify a void *. Per menu you specify a handler function that is
+ called with each void * when the menu item is picked. Menu item indices
+ are zero based.
+}
+
+USES XPLMDefs;
+ {$A4}
+{$IFDEF MSWINDOWS}
+ {$DEFINE DELPHI}
+{$ENDIF}
+{___________________________________________________________________________
+ * XPLM MENUS
+ ___________________________________________________________________________}
+{
+
+}
+
+
+
+ {
+ XPLMMenuCheck
+
+ These enumerations define the various 'check' states for an X-Plane menu.
+ 'checking' in x-plane actually appears as a light which may or may not be
+ lit. So there are three possible states.
+ }
+TYPE
+ XPLMMenuCheck = (
+ { there is no symbol to the left of the menu item. }
+ xplm_Menu_NoCheck = 0
+
+ { the menu has a mark next to it that is unmarked (not lit). }
+ ,xplm_Menu_Unchecked = 1
+
+ { the menu has a mark next to it that is checked (lit). }
+ ,xplm_Menu_Checked = 2
+
+ );
+ PXPLMMenuCheck = ^XPLMMenuCheck;
+
+ {
+ XPLMMenuID
+
+ This is a unique ID for each menu you create.
+ }
+ XPLMMenuID = pointer;
+ PXPLMMenuID = ^XPLMMenuID;
+
+ {
+ XPLMMenuHandler_f
+
+ A menu handler function takes two reference pointers, one for the menu
+ (specified when the menu was created) and one for the item (specified when
+ the item was created).
+ }
+ XPLMMenuHandler_f = PROCEDURE(
+ inMenuRef : pointer;
+ inItemRef : pointer); cdecl;
+
+ {
+ XPLMFindPluginsMenu
+
+ This function returns the ID of the plug-ins menu, which is created for you
+ at startup.
+ }
+ FUNCTION XPLMFindPluginsMenu: XPLMMenuID;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMCreateMenu
+
+ This function creates a new menu and returns its ID. It returns NULL if
+ the menu cannot be created. Pass in a parent menu ID and an item index to
+ create a submenu, or NULL for the parent menu to put the menu in the menu
+ bar. The menu's name is only used if the menu is in the menubar. You also
+ pass a handler function and a menu reference value. Pass NULL for the
+ handler if you do not need callbacks from the menu (for example, if it only
+ contains submenus).
+
+ Important: you must pass a valid, non-empty menu title even if the menu is
+ a submenu where the title is not visible.
+ }
+ FUNCTION XPLMCreateMenu(
+ inName : Pchar;
+ inParentMenu : XPLMMenuID;
+ inParentItem : integer;
+ inHandler : XPLMMenuHandler_f;
+ inMenuRef : pointer) : XPLMMenuID;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMDestroyMenu
+
+ This function destroys a menu that you have created. Use this to remove a
+ submenu if necessary. (Normally this function will not be necessary.)
+ }
+ PROCEDURE XPLMDestroyMenu(
+ inMenuID : XPLMMenuID);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMClearAllMenuItems
+
+ This function removes all menu items from a menu, allowing you to rebuild
+ it. Use this function if you need to change the number of items on a menu.
+ }
+ PROCEDURE XPLMClearAllMenuItems(
+ inMenuID : XPLMMenuID);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMAppendMenuItem
+
+ This routine appends a new menu item to the bottom of a menu and returns
+ its index. Pass in the menu to add the item to, the items name, and a void
+ * ref for this item. If you pass in inForceEnglish, this menu item will be
+ drawn using the english character set no matter what language x-plane is
+ running in. Otherwise the menu item will be drawn localized. (An example
+ of why you'd want to do this is for a proper name.) See XPLMUtilities for
+ determining the current langauge.
+ }
+ FUNCTION XPLMAppendMenuItem(
+ inMenu : XPLMMenuID;
+ inItemName : Pchar;
+ inItemRef : pointer;
+ inForceEnglish : integer) : integer;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMAppendMenuSeparator
+
+ This routine adds a seperator to the end of a menu.
+ }
+ PROCEDURE XPLMAppendMenuSeparator(
+ inMenu : XPLMMenuID);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMSetMenuItemName
+
+ This routine changes the name of an existing menu item. Pass in the menu
+ ID and the index of the menu item.
+ }
+ PROCEDURE XPLMSetMenuItemName(
+ inMenu : XPLMMenuID;
+ inIndex : integer;
+ inItemName : Pchar;
+ inForceEnglish : integer);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMCheckMenuItem
+
+ Set whether a menu item is checked. Pass in the menu ID and item index.
+ }
+ PROCEDURE XPLMCheckMenuItem(
+ inMenu : XPLMMenuID;
+ index : integer;
+ inCheck : XPLMMenuCheck);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMCheckMenuItemState
+
+ This routine returns whether a menu item is checked or not. A menu item's
+ check mark may be on or off, or a menu may not have an icon at all.
+ }
+ PROCEDURE XPLMCheckMenuItemState(
+ inMenu : XPLMMenuID;
+ index : integer;
+ outCheck : PXPLMMenuCheck);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMEnableMenuItem
+
+ Sets whether this menu item is enabled. Items start out enabled.
+ }
+ PROCEDURE XPLMEnableMenuItem(
+ inMenu : XPLMMenuID;
+ index : integer;
+ enabled : integer);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+{$IFDEF XPLM210}
+ {
+ XPLMRemoveMenuItem
+
+ Removes one item from a menu. Note that all menu items below are moved up
+ one; your plugin must track the change in index numbers.
+ }
+ PROCEDURE XPLMRemoveMenuItem(
+ inMenu : XPLMMenuID;
+ inIndex : integer);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+{$ENDIF}
+
+IMPLEMENTATION
+END.
diff --git a/X-Plane-SDK/Delphi/XPLM/XPLMNavigation.pas b/X-Plane-SDK/Delphi/XPLM/XPLMNavigation.pas
new file mode 100755
index 0000000..993ef58
--- /dev/null
+++ b/X-Plane-SDK/Delphi/XPLM/XPLMNavigation.pas
@@ -0,0 +1,434 @@
+{
+ Copyright 2005-2012 Sandy Barbour and Ben Supnik
+
+ All rights reserved. See license.txt for usage.
+
+ X-Plane SDK Version: 2.1.1
+}
+
+UNIT XPLMNavigation;
+INTERFACE
+{
+ XPLMNavigation - THEORY OF OPERATION
+
+ The XPLM Navigation APIs give you some access to the navigation databases
+ inside X-Plane. X-Plane stores all navigation information in RAM, so by
+ using these APIs you can gain access to most information without having to
+ go to disk or parse the files yourself.
+
+ You can also use this API to program the FMS. You must use the navigation
+ APIs to find the nav-aids you want to program into the FMS, since the FMS
+ is powered internally by x-plane's navigation database.
+}
+
+USES XPLMDefs;
+ {$A4}
+{$IFDEF MSWINDOWS}
+ {$DEFINE DELPHI}
+{$ENDIF}
+{___________________________________________________________________________
+ * NAVIGATION DATABASE ACCESS
+ ___________________________________________________________________________}
+{
+
+}
+
+
+
+ {
+ XPLMNavType
+
+ These enumerations define the different types of navaids. They are each
+ defined with a separate bit so that they may be bit-wise added together to
+ form sets of nav-aid types.
+
+ NOTE: xplm_Nav_LatLon is a specific lat-lon coordinate entered into the
+ FMS. It will not exist in the database, and cannot be programmed into the
+ FMS. Querying the FMS for navaids will return it. Use
+ XPLMSetFMSEntryLatLon to set a lat/lon waypoint.
+ }
+TYPE
+ XPLMNavType = (
+ xplm_Nav_Unknown = 0
+
+ ,xplm_Nav_Airport = 1
+
+ ,xplm_Nav_NDB = 2
+
+ ,xplm_Nav_VOR = 4
+
+ ,xplm_Nav_ILS = 8
+
+ ,xplm_Nav_Localizer = 16
+
+ ,xplm_Nav_GlideSlope = 32
+
+ ,xplm_Nav_OuterMarker = 64
+
+ ,xplm_Nav_MiddleMarker = 128
+
+ ,xplm_Nav_InnerMarker = 256
+
+ ,xplm_Nav_Fix = 512
+
+ ,xplm_Nav_DME = 1024
+
+ ,xplm_Nav_LatLon = 2048
+
+ );
+ PXPLMNavType = ^XPLMNavType;
+
+ {
+ XPLMNavRef
+
+ XPLMNavRef is an iterator into the navigation database. The navigation
+ database is essentially an array, but it is not necessarily densely
+ populated. The only assumption you can safely make is that like-typed
+ nav-aids are grouped together.
+
+ Use XPLMNavRef to refer to a nav-aid.
+
+ XPLM_NAV_NOT_FOUND is returned by functions that return an XPLMNavRef when
+ the iterator must be invalid.
+ }
+ XPLMNavRef = integer;
+ PXPLMNavRef = ^XPLMNavRef;
+
+CONST
+ XPLM_NAV_NOT_FOUND = -1;
+
+ {
+ XPLMGetFirstNavAid
+
+ This returns the very first navaid in the database. Use this to traverse
+ the entire database. Returns XPLM_NAV_NOT_FOUND if the nav database is
+ empty.
+ }
+ FUNCTION XPLMGetFirstNavAid: XPLMNavRef;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMGetNextNavAid
+
+ Given a nav aid ref, this routine returns the next navaid. It returns
+ XPLM_NAV_NOT_FOUND if the nav aid passed in was invalid or if the navaid
+ passed in was the last one in the database. Use this routine to iterate
+ across all like-typed navaids or the entire database.
+
+ WARNING: due to a bug in the SDK, when fix loading is disabled in the
+ rendering settings screen, calling this routine with the last airport
+ returns a bogus nav aid. Using this nav aid can crash x-plane.
+ }
+ FUNCTION XPLMGetNextNavAid(
+ inNavAidRef : XPLMNavRef) : XPLMNavRef;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMFindFirstNavAidOfType
+
+ This routine returns the ref of the first navaid of the given type in the
+ database or XPLM_NAV_NOT_FOUND if there are no navaids of that type in the
+ database. You must pass exactly one nav aid type to this routine.
+
+ WARNING: due to a bug in the SDK, when fix loading is disabled in the
+ rendering settings screen, calling this routine with fixes returns a bogus
+ nav aid. Using this nav aid can crash x-plane.
+ }
+ FUNCTION XPLMFindFirstNavAidOfType(
+ inType : XPLMNavType) : XPLMNavRef;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMFindLastNavAidOfType
+
+ This routine returns the ref of the last navaid of the given type in the
+ database or XPLM_NAV_NOT_FOUND if there are no navaids of that type in the
+ database. You must pass exactly one nav aid type to this routine.
+
+ WARNING: due to a bug in the SDK, when fix loading is disabled in the
+ rendering settings screen, calling this routine with fixes returns a bogus
+ nav aid. Using this nav aid can crash x-plane.
+ }
+ FUNCTION XPLMFindLastNavAidOfType(
+ inType : XPLMNavType) : XPLMNavRef;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMFindNavAid
+
+ This routine provides a number of searching capabilities for the nav
+ database. XPLMFindNavAid will search through every nav aid whose type is
+ within inType (multiple types may be added together) and return any
+ nav-aids found based on the following rules:
+
+ If inLat and inLon are not NULL, the navaid nearest to that lat/lon will be
+ returned, otherwise the last navaid found will be returned.
+
+ If inFrequency is not NULL, then any navaids considered must match this
+ frequency. Note that this will screen out radio beacons that do not have
+ frequency data published (like inner markers) but not fixes and airports.
+
+ If inNameFragment is not NULL, only navaids that contain the fragment in
+ their name will be returned.
+
+ If inIDFragment is not NULL, only navaids that contain the fragment in
+ their IDs will be returned.
+
+ This routine provides a simple way to do a number of useful searches:
+
+ Find the nearest navaid on this frequency. Find the nearest airport. Find
+ the VOR whose ID is "KBOS". Find the nearest airport whose name contains
+ "Chicago".
+ }
+ FUNCTION XPLMFindNavAid(
+ inNameFragment : Pchar; { Can be nil }
+ inIDFragment : Pchar; { Can be nil }
+ inLat : Psingle; { Can be nil }
+ inLon : Psingle; { Can be nil }
+ inFrequency : Pinteger; { Can be nil }
+ inType : XPLMNavType) : XPLMNavRef;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMGetNavAidInfo
+
+ This routine returns information about a navaid. Any non-null field is
+ filled out with information if it is available.
+
+ Frequencies are in the nav.dat convention as described in the X-Plane nav
+ database FAQ: NDB frequencies are exact, all others are multiplied by 100.
+
+ The buffer for IDs should be at least 6 chars and the buffer for names
+ should be at least 41 chars, but since these values are likely to go up, I
+ recommend passing at least 32 chars for IDs and 256 chars for names when
+ possible.
+
+ The outReg parameter tells if the navaid is within the local "region" of
+ loaded DSFs. (This information may not be particularly useful to plugins.)
+ The parameter is a single byte value 1 for true or 0 for false, not a C
+ string.
+ }
+ PROCEDURE XPLMGetNavAidInfo(
+ inRef : XPLMNavRef;
+ outType : PXPLMNavType; { Can be nil }
+ outLatitude : Psingle; { Can be nil }
+ outLongitude : Psingle; { Can be nil }
+ outHeight : Psingle; { Can be nil }
+ outFrequency : Pinteger; { Can be nil }
+ outHeading : Psingle; { Can be nil }
+ outID : Pchar; { Can be nil }
+ outName : Pchar; { Can be nil }
+ outReg : Pchar); { Can be nil }
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+{___________________________________________________________________________
+ * FLIGHT MANAGEMENT COMPUTER
+ ___________________________________________________________________________}
+{
+ Note: the FMS works based on an array of entries. Indices into the array
+ are zero-based. Each entry is a nav-aid plus an altitude. The FMS tracks
+ the currently displayed entry and the entry that it is flying to.
+
+ The FMS must be programmed with contiguous entries, so clearing an entry at
+ the end shortens the effective flight plan. There is a max of 100
+ waypoints in the flight plan.
+}
+
+
+
+ {
+ XPLMCountFMSEntries
+
+ This routine returns the number of entries in the FMS.
+ }
+ FUNCTION XPLMCountFMSEntries: integer;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMGetDisplayedFMSEntry
+
+ This routine returns the index of the entry the pilot is viewing.
+ }
+ FUNCTION XPLMGetDisplayedFMSEntry: integer;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMGetDestinationFMSEntry
+
+ This routine returns the index of the entry the FMS is flying to.
+ }
+ FUNCTION XPLMGetDestinationFMSEntry: integer;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMSetDisplayedFMSEntry
+
+ This routine changes which entry the FMS is showing to the index specified.
+ }
+ PROCEDURE XPLMSetDisplayedFMSEntry(
+ inIndex : integer);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMSetDestinationFMSEntry
+
+ This routine changes which entry the FMS is flying the aircraft toward.
+ }
+ PROCEDURE XPLMSetDestinationFMSEntry(
+ inIndex : integer);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMGetFMSEntryInfo
+
+ This routine returns information about a given FMS entry. A reference to a
+ navaid can be returned allowing you to find additional information (such as
+ a frequency, ILS heading, name, etc.). Some information is available
+ immediately. For a lat/lon entry, the lat/lon is returned by this routine
+ but the navaid cannot be looked up (and the reference will be
+ XPLM_NAV_NOT_FOUND. FMS name entry buffers should be at least 256 chars in
+ length.
+ }
+ PROCEDURE XPLMGetFMSEntryInfo(
+ inIndex : integer;
+ outType : PXPLMNavType; { Can be nil }
+ outID : Pchar; { Can be nil }
+ outRef : PXPLMNavRef; { Can be nil }
+ outAltitude : Pinteger; { Can be nil }
+ outLat : Psingle; { Can be nil }
+ outLon : Psingle); { Can be nil }
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMSetFMSEntryInfo
+
+ This routine changes an entry in the FMS to have the destination navaid
+ passed in and the altitude specified. Use this only for airports, fixes,
+ and radio-beacon navaids. Currently of radio beacons, the FMS can only
+ support VORs and NDBs. Use the routines below to clear or fly to a lat/lon.
+ }
+ PROCEDURE XPLMSetFMSEntryInfo(
+ inIndex : integer;
+ inRef : XPLMNavRef;
+ inAltitude : integer);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMSetFMSEntryLatLon
+
+ This routine changes the entry in the FMS to a lat/lon entry with the given
+ coordinates.
+ }
+ PROCEDURE XPLMSetFMSEntryLatLon(
+ inIndex : integer;
+ inLat : single;
+ inLon : single;
+ inAltitude : integer);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMClearFMSEntry
+
+ This routine clears the given entry, potentially shortening the flight
+ plan.
+ }
+ PROCEDURE XPLMClearFMSEntry(
+ inIndex : integer);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+{___________________________________________________________________________
+ * GPS RECEIVER
+ ___________________________________________________________________________}
+{
+ These APIs let you read data from the GPS unit.
+}
+
+
+
+ {
+ XPLMGetGPSDestinationType
+
+ This routine returns the type of the currently selected GPS destination,
+ one of fix, airport, VOR or NDB.
+ }
+ FUNCTION XPLMGetGPSDestinationType: XPLMNavType;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMGetGPSDestination
+
+ This routine returns the current GPS destination.
+ }
+ FUNCTION XPLMGetGPSDestination: XPLMNavRef;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+IMPLEMENTATION
+END.
diff --git a/X-Plane-SDK/Delphi/XPLM/XPLMPlanes.pas b/X-Plane-SDK/Delphi/XPLM/XPLMPlanes.pas
new file mode 100755
index 0000000..b5d19a2
--- /dev/null
+++ b/X-Plane-SDK/Delphi/XPLM/XPLMPlanes.pas
@@ -0,0 +1,294 @@
+{
+ Copyright 2005-2012 Sandy Barbour and Ben Supnik
+
+ All rights reserved. See license.txt for usage.
+
+ X-Plane SDK Version: 2.1.1
+}
+
+UNIT XPLMPlanes;
+INTERFACE
+{
+ The XPLMPlanes APIs allow you to control the various aircraft in x-plane,
+ both the user's and the sim's.
+}
+
+USES XPLMDefs;
+ {$A4}
+{$IFDEF MSWINDOWS}
+ {$DEFINE DELPHI}
+{$ENDIF}
+{___________________________________________________________________________
+ * USER AIRCRAFT ACCESS
+ ___________________________________________________________________________}
+{
+
+}
+
+
+ {
+ XPLMSetUsersAircraft
+
+ This routine changes the user's aircraft. Note that this will reinitialize
+ the user to be on the nearest airport's first runway. Pass in a full path
+ (hard drive and everything including the .acf extension) to the .acf file.
+ }
+ PROCEDURE XPLMSetUsersAircraft(
+ inAircraftPath : Pchar);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+ {
+ XPLMPlaceUserAtAirport
+
+ This routine places the user at a given airport. Specify the airport by
+ its ICAO code (e.g. 'KBOS').
+ }
+ PROCEDURE XPLMPlaceUserAtAirport(
+ inAirportCode : Pchar);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+{___________________________________________________________________________
+ * GLOBAL AIRCRAFT ACCESS
+ ___________________________________________________________________________}
+{
+
+}
+
+
+CONST
+ { The user's aircraft is always index 0. }
+ XPLM_USER_AIRCRAFT = 0;
+ {
+ XPLMPlaneDrawState_t
+
+ This structure contains additional plane parameter info to be passed to
+ draw plane. Make sure to fill in the size of the structure field with
+ sizeof(XPLMDrawPlaneState_t) so that the XPLM can tell how many fields you
+ knew about when compiling your plugin (since more fields may be added
+ later).
+
+ Most of these fields are ratios from 0 to 1 for control input. X-Plane
+ calculates what the actual controls look like based on the .acf file for
+ that airplane. Note for the yoke inputs, this is what the pilot of the
+ plane has commanded (post artificial stability system if there were one)
+ and affects aelerons, rudder, etc. It is not necessarily related to the
+ actual position of the plane!
+ }
+TYPE
+ XPLMPlaneDrawState_t = RECORD
+ { The size of the draw state struct. }
+ structSize : integer;
+ { A ratio from [0..1] describing how far the landing gear is extended. }
+ gearPosition : single;
+ { Ratio of flap deployment, 0 = up, 1 = full deploy. }
+ flapRatio : single;
+ { Ratio of spoiler deployment, 0 = none, 1 = full deploy. }
+ spoilerRatio : single;
+ { Ratio of speed brake deployment, 0 = none, 1 = full deploy. }
+ speedBrakeRatio : single;
+ { Ratio of slat deployment, 0 = none, 1 = full deploy. }
+ slatRatio : single;
+ { Wing sweep ratio, 0 = forward, 1 = swept. }
+ wingSweep : single;
+ { Thrust power, 0 = none, 1 = full fwd, -1 = full reverse. }
+ thrust : single;
+ { Total pitch input for this plane. }
+ yokePitch : single;
+ { Total Heading input for this plane. }
+ yokeHeading : single;
+ { Total Roll input for this plane. }
+ yokeRoll : single;
+ END;
+ PXPLMPlaneDrawState_t = ^XPLMPlaneDrawState_t;
+ {
+ XPLMCountAircraft
+
+ This function returns the number of aircraft X-Plane is capable of having,
+ as well as the number of aircraft that are currently active. These numbers
+ count the user's aircraft. It can also return the plugin that is currently
+ controlling aircraft. In X-Plane 7, this routine reflects the number of
+ aircraft the user has enabled in the rendering options window.
+ }
+ PROCEDURE XPLMCountAircraft(
+ outTotalAircraft : Pinteger;
+ outActiveAircraft : Pinteger;
+ outController : PXPLMPluginID);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+ {
+ XPLMGetNthAircraftModel
+
+ This function returns the aircraft model for the Nth aircraft. Indices are
+ zero based, with zero being the user's aircraft. The file name should be
+ at least 256 chars in length; the path should be at least 512 chars in
+ length.
+ }
+ PROCEDURE XPLMGetNthAircraftModel(
+ inIndex : integer;
+ outFileName : Pchar;
+ outPath : Pchar);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+{___________________________________________________________________________
+ * EXCLUSIVE AIRCRAFT ACCESS
+ ___________________________________________________________________________}
+{
+ The following routines require exclusive access to the airplane APIs. Only
+ one plugin may have this access at a time.
+}
+
+
+
+ {
+ XPLMPlanesAvailable_f
+
+ Your airplanes available callback is called when another plugin gives up
+ access to the multiplayer planes. Use this to wait for access to
+ multiplayer.
+ }
+TYPE
+ XPLMPlanesAvailable_f = PROCEDURE(
+ inRefcon : pointer); cdecl;
+
+ {
+ XPLMAcquirePlanes
+
+ XPLMAcquirePlanes grants your plugin exclusive access to the aircraft. It
+ returns 1 if you gain access, 0 if you do not. inAircraft - pass in an
+ array of pointers to strings specifying the planes you want loaded. For
+ any plane index you do not want loaded, pass a 0-length string. Other
+ strings should be full paths with the .acf extension. NULL terminates this
+ array, or pass NULL if there are no planes you want loaded. If you pass in
+ a callback and do not receive access to the planes your callback will be
+ called when the airplanes are available. If you do receive airplane access,
+ your callback will not be called.
+ }
+ FUNCTION XPLMAcquirePlanes(
+ inAircraft : PPchar; { Can be nil }
+ inCallback : XPLMPlanesAvailable_f;
+ inRefcon : pointer) : integer;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMReleasePlanes
+
+ Call this function to release access to the planes. Note that if you are
+ disabled, access to planes is released for you and you must reacquire it.
+ }
+ PROCEDURE XPLMReleasePlanes;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMSetActiveAircraftCount
+
+ This routine sets the number of active planes. If you pass in a number
+ higher than the total number of planes availables, only the total number of
+ planes available is actually used.
+ }
+ PROCEDURE XPLMSetActiveAircraftCount(
+ inCount : integer);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMSetAircraftModel
+
+ This routine loads an aircraft model. It may only be called if you have
+ exclusive access to the airplane APIs. Pass in the path of the model with
+ the .acf extension. The index is zero based, but you may not pass in 0
+ (use XPLMSetUsersAircraft to load the user's aircracft).
+ }
+ PROCEDURE XPLMSetAircraftModel(
+ inIndex : integer;
+ inAircraftPath : Pchar);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMDisableAIForPlane
+
+ This routine turns off X-Plane's AI for a given plane. The plane will
+ continue to draw and be a real plane in X-Plane, but will not move itself.
+ }
+ PROCEDURE XPLMDisableAIForPlane(
+ inPlaneIndex : integer);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMDrawAircraft
+
+ This routine draws an aircraft. It can only be called from a 3-d drawing
+ callback. Pass in the position of the plane in OpenGL local coordinates
+ and the orientation of the plane. A 1 for full drawing indicates that the
+ whole plane must be drawn; a 0 indicates you only need the nav lights
+ drawn. (This saves rendering time when planes are far away.)
+ }
+ PROCEDURE XPLMDrawAircraft(
+ inPlaneIndex : integer;
+ inX : single;
+ inY : single;
+ inZ : single;
+ inPitch : single;
+ inRoll : single;
+ inYaw : single;
+ inFullDraw : integer;
+ inDrawStateInfo : PXPLMPlaneDrawState_t);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMReinitUsersPlane
+
+ This function recomputes the derived flight model data from the aircraft
+ structure in memory. If you have used the data access layer to modify the
+ aircraft structure, use this routine to resynchronize x-plane; since
+ X-plane works at least partly from derived values, the sim will not behave
+ properly until this is called.
+
+ WARNING: this routine does not necessarily place the airplane at the
+ airport; use XPLMSetUsersAircraft to be compatible. This routine is
+ provided to do special experimentation with flight models without resetting
+ flight.
+ }
+ PROCEDURE XPLMReinitUsersPlane;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+IMPLEMENTATION
+END.
diff --git a/X-Plane-SDK/Delphi/XPLM/XPLMPlugin.pas b/X-Plane-SDK/Delphi/XPLM/XPLMPlugin.pas
new file mode 100755
index 0000000..f053f80
--- /dev/null
+++ b/X-Plane-SDK/Delphi/XPLM/XPLMPlugin.pas
@@ -0,0 +1,381 @@
+{
+ Copyright 2005-2012 Sandy Barbour and Ben Supnik
+
+ All rights reserved. See license.txt for usage.
+
+ X-Plane SDK Version: 2.1.1
+}
+
+UNIT XPLMPlugin;
+INTERFACE
+{
+ These APIs provide facilities to find and work with other plugins and
+ manage other plugins.
+}
+
+USES XPLMDefs;
+ {$A4}
+{$IFDEF MSWINDOWS}
+ {$DEFINE DELPHI}
+{$ENDIF}
+{___________________________________________________________________________
+ * FINDING PLUGINS
+ ___________________________________________________________________________}
+{
+ These APIs allow you to find another plugin or yourself, or iterate across
+ all plugins. For example, if you wrote an FMS plugin that needed to talk
+ to an autopilot plugin, you could use these APIs to locate the autopilot
+ plugin.
+}
+
+
+
+ {
+ XPLMGetMyID
+
+ This routine returns the plugin ID of the calling plug-in. Call this to
+ get your own ID.
+ }
+ FUNCTION XPLMGetMyID: XPLMPluginID;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMCountPlugins
+
+ This routine returns the total number of plug-ins that are loaded, both
+ disabled and enabled.
+ }
+ FUNCTION XPLMCountPlugins: integer;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMGetNthPlugin
+
+ This routine returns the ID of a plug-in by index. Index is 0 based from 0
+ to XPLMCountPlugins-1, inclusive. Plugins may be returned in any arbitrary
+ order.
+ }
+ FUNCTION XPLMGetNthPlugin(
+ inIndex : integer) : XPLMPluginID;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMFindPluginByPath
+
+ This routine returns the plug-in ID of the plug-in whose file exists at the
+ passed in absolute file system path. XPLM_NO_PLUGIN_ID is returned if the
+ path does not point to a currently loaded plug-in.
+ }
+ FUNCTION XPLMFindPluginByPath(
+ inPath : Pchar) : XPLMPluginID;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMFindPluginBySignature
+
+ This routine returns the plug-in ID of the plug-in whose signature matches
+ what is passed in or XPLM_NO_PLUGIN_ID if no running plug-in has this
+ signature. Signatures are the best way to identify another plug-in as they
+ are independent of the file system path of a plug-in or the human-readable
+ plug-in name, and should be unique for all plug-ins. Use this routine to
+ locate another plugin that your plugin interoperates with
+ }
+ FUNCTION XPLMFindPluginBySignature(
+ inSignature : Pchar) : XPLMPluginID;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMGetPluginInfo
+
+ This routine returns information about a plug-in. Each parameter should be
+ a pointer to a buffer of at least 256 characters, or NULL to not receive
+ the information.
+
+ outName - the human-readable name of the plug-in. outFilePath - the
+ absolute file path to the file that contains this plug-in. outSignature - a
+ unique string that identifies this plug-in. outDescription - a
+ human-readable description of this plug-in.
+ }
+ PROCEDURE XPLMGetPluginInfo(
+ inPlugin : XPLMPluginID;
+ outName : Pchar; { Can be nil }
+ outFilePath : Pchar; { Can be nil }
+ outSignature : Pchar; { Can be nil }
+ outDescription : Pchar); { Can be nil }
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+{___________________________________________________________________________
+ * ENABLING/DISABLING PLUG-INS
+ ___________________________________________________________________________}
+{
+ These routines are used to work with plug-ins and manage them. Most
+ plugins will not need to use these APIs.
+}
+
+
+
+ {
+ XPLMIsPluginEnabled
+
+ Returns whether the specified plug-in is enabled for running.
+ }
+ FUNCTION XPLMIsPluginEnabled(
+ inPluginID : XPLMPluginID) : integer;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMEnablePlugin
+
+ This routine enables a plug-in if it is not already enabled. It returns 1
+ if the plugin was enabled or successfully enables itself, 0 if it does not.
+ Plugins may fail to enable (for example, if resources cannot be acquired)
+ by returning 0 from their XPluginEnable callback.
+ }
+ FUNCTION XPLMEnablePlugin(
+ inPluginID : XPLMPluginID) : integer;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMDisablePlugin
+
+ This routine disableds an enabled plug-in.
+ }
+ PROCEDURE XPLMDisablePlugin(
+ inPluginID : XPLMPluginID);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMReloadPlugins
+
+ This routine reloads all plug-ins. Once this routine is called and you
+ return from the callback you were within (e.g. a menu select callback) you
+ will receive your XPluginDisable and XPluginStop callbacks and your DLL
+ will be unloaded, then the start process happens as if the sim was starting
+ up.
+ }
+ PROCEDURE XPLMReloadPlugins;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+{___________________________________________________________________________
+ * INTERPLUGIN MESSAGING
+ ___________________________________________________________________________}
+{
+ Plugin messages are defined as 32-bit integers. Messages below 0x00FFFFFF
+ are reserved for X-Plane and the plugin SDK.
+
+ Messages have two conceptual uses: notifications and commands. Commands
+ are sent from one plugin to another to induce behavior; notifications are
+ sent from one plugin to all others for informational purposes. It is
+ important that commands and notifications not have the same values because
+ this could cause a notification sent by one plugin to accidentally induce a
+ command in another.
+
+ By convention, plugin-defined notifications should have the high bit set
+ (e.g. be greater or equal to unsigned 0x8000000) while commands should have
+ this bit be cleared.
+
+ The following messages are sent to your plugin by x-plane.
+}
+
+
+
+CONST
+ { This message is sent to your plugin whenever the user's plane crashes. }
+ XPLM_MSG_PLANE_CRASHED = 101;
+
+ { This message is sent to your plugin whenever a new plane is loaded. The }
+ { parameter is the number of the plane being loaded; 0 indicates the user's }
+ { plane. }
+ XPLM_MSG_PLANE_LOADED = 102;
+
+ { This messages is called whenever the user's plane is positioned at a new }
+ { airport. }
+ XPLM_MSG_AIRPORT_LOADED = 103;
+
+ { This message is sent whenever new scenery is loaded. Use datarefs to }
+ { determine the new scenery files that were loaded. }
+ XPLM_MSG_SCENERY_LOADED = 104;
+
+ { This message is sent whenever the user adjusts the number of X-Plane }
+ { aircraft models. You must use XPLMCountPlanes to find out how many planes }
+ { are now available. This message will only be sent in XP7 and higher }
+ { because in XP6 the number of aircraft is not user-adjustable. }
+ XPLM_MSG_AIRPLANE_COUNT_CHANGED = 105;
+
+{$IFDEF XPLM200}
+ { This message is sent to your plugin whenever a plane is unloaded. The }
+ { parameter is the number of the plane being unloaded; 0 indicates the user's }
+ { plane. The parameter is of type int, passed as the value of the pointer. }
+ { (That is: the parameter is an int, not a pointer to an int.) }
+ XPLM_MSG_PLANE_UNLOADED = 106;
+{$ENDIF}
+
+{$IFDEF XPLM210}
+ { This message is sent to your plugin right before X-Plane writes its }
+ { preferences file. You can use this for two purposes: to write your own }
+ { preferences, and to modify any datarefs to influence preferences output. }
+ { For example, if your plugin temporarily modifies saved preferences, you can }
+ { put them back to their default values here to avoid having the tweaks be }
+ { persisted if your plugin is not loaded on the next invocation of X-Plane. }
+ XPLM_MSG_WILL_WRITE_PREFS = 107;
+{$ENDIF}
+
+{$IFDEF XPLM210}
+ { This message is sent to your plugin right after a livery is loaded for an }
+ { airplane. You can use this to check the new livery (via datarefs) and }
+ { react accordingly. The parameter is of type int, passed as the value of a }
+ { pointer and represents the aicraft plane number - 0 is the user's plane. }
+ XPLM_MSG_LIVERY_LOADED = 108;
+{$ENDIF}
+
+ {
+ XPLMSendMessageToPlugin
+
+ This function sends a message to another plug-in or X-Plane. Pass
+ XPLM_NO_PLUGIN_ID to broadcast to all plug-ins. Only enabled plug-ins with
+ a message receive function receive the message.
+ }
+ PROCEDURE XPLMSendMessageToPlugin(
+ inPlugin : XPLMPluginID;
+ inMessage : integer;
+ inParam : pointer);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+{$IFDEF XPLM200}
+{___________________________________________________________________________
+ * Plugin Features API
+ ___________________________________________________________________________}
+{
+ The plugin features API allows your plugin to "sign up" for additional
+ capabilities and plugin system features that are normally disabled for
+ backward compatibility. This allows advanced plugins to "opt-in" to new
+ behavior.
+
+ Each feature is defined by a permanent string name. The feature string
+ names will vary with the particular installation of X-Plane, so plugins
+ should not expect a feature to be guaranteed present.
+}
+
+
+
+
+ {
+ XPLMFeatureEnumerator_f
+
+ You pass an XPLMFeatureEnumerator_f to get a list of all features supported
+ by a given version running version of X-Plane. This routine is called once
+ for each feature.
+ }
+TYPE
+ XPLMFeatureEnumerator_f = PROCEDURE(
+ inFeature : Pchar;
+ inRef : pointer); cdecl;
+
+ {
+ XPLMHasFeature
+
+ This returns 1 if the given installation of X-Plane supports a feature, or
+ 0 if it does not.
+ }
+ FUNCTION XPLMHasFeature(
+ inFeature : Pchar) : integer;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMIsFeatureEnabled
+
+ This returns 1 if a feature is currently enabled for your plugin, or 0 if
+ it is not enabled. It is an error to call this routine with an unsupported
+ feature.
+ }
+ FUNCTION XPLMIsFeatureEnabled(
+ inFeature : Pchar) : integer;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMEnableFeature
+
+ This routine enables or disables a feature for your plugin. This will
+ change the running behavior of X-Plane and your plugin in some way,
+ depending on the feature.
+ }
+ PROCEDURE XPLMEnableFeature(
+ inFeature : Pchar;
+ inEnable : integer);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMEnumerateFeatures
+
+ This routine calls your enumerator callback once for each feature that this
+ running version of X-Plane supports. Use this routine to determine all of
+ the features that X-Plane can support.
+ }
+ PROCEDURE XPLMEnumerateFeatures(
+ inEnumerator : XPLMFeatureEnumerator_f;
+ inRef : pointer);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+{$ENDIF}
+IMPLEMENTATION
+END.
diff --git a/X-Plane-SDK/Delphi/XPLM/XPLMProcessing.pas b/X-Plane-SDK/Delphi/XPLM/XPLMProcessing.pas
new file mode 100755
index 0000000..79c7b2e
--- /dev/null
+++ b/X-Plane-SDK/Delphi/XPLM/XPLMProcessing.pas
@@ -0,0 +1,276 @@
+{
+ Copyright 2005-2012 Sandy Barbour and Ben Supnik
+
+ All rights reserved. See license.txt for usage.
+
+ X-Plane SDK Version: 2.1.1
+}
+
+UNIT XPLMProcessing;
+INTERFACE
+{
+ This API allows you to get regular callbacks during the flight loop, the
+ part of X-Plane where the plane's position calculates the physics of
+ flight, etc. Use these APIs to accomplish periodic tasks like logging data
+ and performing I/O.
+
+ WARNING: Do NOT use these callbacks to draw! You cannot draw during flight
+ loop callbacks. Use the drawing callbacks (see XPLMDisplay for more info)
+ for graphics.
+}
+
+USES XPLMDefs;
+ {$A4}
+{$IFDEF MSWINDOWS}
+ {$DEFINE DELPHI}
+{$ENDIF}
+{___________________________________________________________________________
+ * FLIGHT LOOP CALLBACKS
+ ___________________________________________________________________________}
+{
+
+}
+
+
+
+{$IFDEF XPLM210}
+ {
+ XPLMFlightLoopPhaseType
+
+ You can register a flight loop callback to run either before or after the
+ flight model is integrated by X-Plane.
+ }
+TYPE
+ XPLMFlightLoopPhaseType = (
+ { Your callback runs before X-Plane integrates the flight model. }
+ xplm_FlightLoop_Phase_BeforeFlightModel = 0
+
+ { Your callback runs after X-Plane integrates the flight model. }
+ ,xplm_FlightLoop_Phase_AfterFlightModel = 1
+
+ );
+ PXPLMFlightLoopPhaseType = ^XPLMFlightLoopPhaseType;
+{$ENDIF}
+
+{$IFDEF XPLM210}
+ {
+ XPLMFlightLoopID
+
+ This is an opaque identifier for a flight loop callback. You can use this
+ identifier to easily track and remove your callbacks, or to use the new
+ flight loop APIs.
+ }
+ XPLMFlightLoopID = pointer;
+ PXPLMFlightLoopID = ^XPLMFlightLoopID;
+{$ENDIF}
+
+ {
+ XPLMFlightLoop_f
+
+ This is your flight loop callback. Each time the flight loop is iterated
+ through, you receive this call at the end. You receive a time since you
+ were last called and a time since the last loop, as well as a loop counter.
+ The 'phase' parameter is deprecated and should be ignored.
+
+ Your return value controls when you will next be called. Return 0 to stop
+ receiving callbacks. Pass a positive number to specify how many seconds
+ until the next callback. (You will be called at or after this time, not
+ before.) Pass a negative number to specify how many loops must go by until
+ you are called. For example, -1.0 means call me the very next loop. Try
+ to run your flight loop as infrequently as is practical, and suspend it
+ (using return value 0) when you do not need it; lots of flight loop
+ callbacks that do nothing lowers x-plane's frame rate.
+
+ Your callback will NOT be unregistered if you return 0; it will merely be
+ inactive.
+
+ The reference constant you passed to your loop is passed back to you.
+ }
+ XPLMFlightLoop_f = FUNCTION(
+ inElapsedSinceLastCall: single;
+ inElapsedTimeSinceLastFlightLoop: single;
+ inCounter : integer;
+ inRefcon : pointer) : single; cdecl;
+
+{$IFDEF XPLM210}
+ {
+ XPLMCreateFlightLoop_t
+
+ XPLMCreateFlightLoop_t contains the parameters to create a new flight loop
+ callback. The strsucture can be expanded in future SDKs - always set
+ structSize to the size of your structure in bytes.
+ }
+ XPLMCreateFlightLoop_t = RECORD
+ structSize : integer;
+ phase : XPLMFlightLoopPhaseType;
+ callbackFunc : XPLMFlightLoop_f;
+ refcon : pointer;
+ END;
+ PXPLMCreateFlightLoop_t = ^XPLMCreateFlightLoop_t;
+{$ENDIF}
+
+ {
+ XPLMGetElapsedTime
+
+ This routine returns the elapsed time since the sim started up in decimal
+ seconds.
+ }
+ FUNCTION XPLMGetElapsedTime: single;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMGetCycleNumber
+
+ This routine returns a counter starting at zero for each sim cycle
+ computed/video frame rendered.
+ }
+ FUNCTION XPLMGetCycleNumber: integer;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMRegisterFlightLoopCallback
+
+ This routine registers your flight loop callback. Pass in a pointer to a
+ flight loop function and a refcon. inInterval defines when you will be
+ called. Pass in a positive number to specify seconds from registration
+ time to the next callback. Pass in a negative number to indicate when you
+ will be called (e.g. pass -1 to be called at the next cylcle). Pass 0 to
+ not be called; your callback will be inactive.
+ }
+ PROCEDURE XPLMRegisterFlightLoopCallback(
+ inFlightLoop : XPLMFlightLoop_f;
+ inInterval : single;
+ inRefcon : pointer);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMUnregisterFlightLoopCallback
+
+ This routine unregisters your flight loop callback. Do NOT call it from
+ your flight loop callback. Once your flight loop callback is
+ unregistered, it will not be called again.
+ }
+ PROCEDURE XPLMUnregisterFlightLoopCallback(
+ inFlightLoop : XPLMFlightLoop_f;
+ inRefcon : pointer);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMSetFlightLoopCallbackInterval
+
+ This routine sets when a callback will be called. Do NOT call it from your
+ callback; use the return value of the callback to change your callback
+ interval from inside your callback.
+
+ inInterval is formatted the same way as in XPLMRegisterFlightLoopCallback;
+ positive for seconds, negative for cycles, and 0 for deactivating the
+ callback. If inRelativeToNow is 1, times are from the time of this call;
+ otherwise they are from the time the callback was last called (or the time
+ it was registered if it has never been called.
+ }
+ PROCEDURE XPLMSetFlightLoopCallbackInterval(
+ inFlightLoop : XPLMFlightLoop_f;
+ inInterval : single;
+ inRelativeToNow : integer;
+ inRefcon : pointer);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+{$IFDEF XPLM210}
+ {
+ XPLMCreateFlightLoop
+
+ This routine creates a flight loop callback and returns its ID. The flight
+ loop callback is created using the input param struct, and is inited to be
+ unscheduled.
+ }
+ FUNCTION XPLMCreateFlightLoop(
+ inParams : PXPLMCreateFlightLoop_t) : XPLMFlightLoopID;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+{$ENDIF}
+
+{$IFDEF XPLM210}
+ {
+ XPLMDestroyFlightLoop
+
+ This routine destroys a flight loop callback by ID.
+ }
+ PROCEDURE XPLMDestroyFlightLoop(
+ inFlightLoopID : XPLMFlightLoopID);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+{$ENDIF}
+
+{$IFDEF XPLM210}
+ {
+ XPLMScheduleFlightLoop
+
+ This routine schedules a flight loop callback for future execution. If
+ inInterval is negative, it is run in a certain number of frames based on
+ the absolute value of the input. If the interval is positive, it is a
+ duration in seconds.
+
+ If inRelativeToNow is true, ties are interpretted relative to the time this
+ routine is called; otherwise they are relative to the last call time or the
+ time the flight loop was registered (if never called).
+
+ THREAD SAFETY: it is legal to call this routine from any thread under the
+ following conditions:
+
+ 1. The call must be between the beginning of an XPLMEnable and the end of
+ an XPLMDisable sequence. (That is, you must not call this routine from
+ thread activity when your plugin was supposed to be disabled. Since
+ plugins are only enabled while loaded, this also implies you cannot run
+ this routine outside an XPLMStart/XPLMStop sequence.)
+
+ 2. You may not call this routine re-entrantly for a single flight loop ID.
+ (That is, you can't enable from multiple threads at the same time.)
+
+ 3. You must call this routine between the time after XPLMCreateFlightLoop
+ returns a value and the time you call XPLMDestroyFlightLoop. (That is, you
+ must ensure that your threaded activity is within the life of the object.
+ The SDK does not check this for you, nor does it synchronize destruction of
+ the object.)
+
+ 4. The object must be unscheduled if this routine is to be called from a
+ thread other than the main thread.
+ }
+ PROCEDURE XPLMScheduleFlightLoop(
+ inFlightLoopID : XPLMFlightLoopID;
+ inInterval : single;
+ inRelativeToNow : integer);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+{$ENDIF}
+
+IMPLEMENTATION
+END.
diff --git a/X-Plane-SDK/Delphi/XPLM/XPLMScenery.pas b/X-Plane-SDK/Delphi/XPLM/XPLMScenery.pas
new file mode 100755
index 0000000..e0c51ac
--- /dev/null
+++ b/X-Plane-SDK/Delphi/XPLM/XPLMScenery.pas
@@ -0,0 +1,419 @@
+{
+ Copyright 2005-2012 Sandy Barbour and Ben Supnik
+
+ All rights reserved. See license.txt for usage.
+
+ X-Plane SDK Version: 2.1.1
+}
+
+UNIT XPLMScenery;
+INTERFACE
+{
+ This package contains APIs to interact with X-Plane's scenery system.
+}
+
+USES XPLMDefs;
+ {$A4}
+{$IFDEF MSWINDOWS}
+ {$DEFINE DELPHI}
+{$ENDIF}
+{$IFDEF XPLM200}
+{___________________________________________________________________________
+ * Terrain Y-Testing
+ ___________________________________________________________________________}
+{
+ The Y-testing API allows you to locate the physical scenery mesh. This
+ would be used to place dynamic graphics on top of the ground in a
+ plausible way or do physics interactions.
+
+ The Y-test API works via probe objects, which are allocated by your plugin
+ and used to query terrain. Probe objects exist both to capture which
+ algorithm you have requested (see probe types) and also to cache query
+ information.
+
+ Performance guidelines: It is generally faster to use the same probe for
+ nearby points and different probes for different points. Try not to
+ allocate more than "hundreds" of probes at most. Share probes if you need
+ more. Generally, probing operations are expensive, and should be avoided
+ via caching when possible.
+
+ Y testing returns a location on the terrain, a normal vectory, and a
+ velocity vector. The normal vector tells you the slope of the terrain at
+ that point. The velocity vector tells you if that terrain is moving (and
+ is in meters/second). For example, if your Y test hits the aircraft carrier
+ deck, this tells you the velocity of that point on the deck.
+
+ Note: the Y-testing API is limited to probing the loaded scenery area,
+ which is approximately 300x300 km in X-Plane 9. Probes outside this area
+ will return the height of a 0 MSL sphere.
+}
+
+
+
+
+ {
+ XPLMProbeType
+
+ XPLMProbeType defines the type of terrain probe - each probe has a
+ different algorithm. (Only one type of probe is provided right now, but
+ future APIs will expose more flexible or poewrful or useful probes.
+ }
+TYPE
+ XPLMProbeType = (
+ { The Y probe gives you the location of the tallest physical scenery along }
+ { the Y axis going through the queried point. }
+ xplm_ProbeY = 0
+
+ );
+ PXPLMProbeType = ^XPLMProbeType;
+
+ {
+ XPLMProbeResult
+
+ Probe results - possible results from a probe query.
+ }
+ XPLMProbeResult = (
+ { The probe hit terrain and returned valid values. }
+ xplm_ProbeHitTerrain = 0
+
+ { An error in the API call. Either the probe struct size is bad, or the }
+ { probe is invalid or the type is mismatched for the specific query call. }
+ ,xplm_ProbeError = 1
+
+ { The probe call succeeded but there is no terrain under this point (perhaps }
+ { it is off the side of the planet?) }
+ ,xplm_ProbeMissed = 2
+
+ );
+ PXPLMProbeResult = ^XPLMProbeResult;
+
+ {
+ XPLMProbeRef
+
+ An XPLMProbeRef is an opaque handle to a probe, used for querying the
+ terrain.
+ }
+ XPLMProbeRef = pointer;
+ PXPLMProbeRef = ^XPLMProbeRef;
+
+ {
+ XPLMProbeInfo_t
+
+ XPLMProbeInfo_t contains the results of a probe call. Make sure to set
+ structSize to the size of the struct before using it.
+ }
+ XPLMProbeInfo_t = RECORD
+ { Size of structure in bytes - always set this before calling the XPLM. }
+ structSize : integer;
+ { Resulting X location of the terrain point we hit, in local OpenGL }
+ { coordinates. }
+ locationX : single;
+ { Resulting Y location of the terrain point we hit, in local OpenGL }
+ { coordinates. }
+ locationY : single;
+ { Resulting Z location of the terrain point we hit, in local OpenGL }
+ { coordinates. }
+ locationZ : single;
+ { X component of the normal vector to the terrain we found. }
+ normalX : single;
+ { Y component of the normal vector to the terrain we found. }
+ normalY : single;
+ { Z component of the normal vector to the terrain we found. }
+ normalZ : single;
+ { X component of the velocity vector of the terrain we found. }
+ velocityX : single;
+ { Y component of the velocity vector of the terrain we found. }
+ velocityY : single;
+ { Z component of the velocity vector of the terrain we found. }
+ velocityZ : single;
+ { Tells if the surface we hit is water (otherwise it is land). }
+ is_wet : integer;
+ END;
+ PXPLMProbeInfo_t = ^XPLMProbeInfo_t;
+
+ {
+ XPLMCreateProbe
+
+ Creates a new probe object of a given type and returns.
+ }
+ FUNCTION XPLMCreateProbe(
+ inProbeType : XPLMProbeType) : XPLMProbeRef;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMDestroyProbe
+
+ Deallocates an existing probe object.
+ }
+ PROCEDURE XPLMDestroyProbe(
+ inProbe : XPLMProbeRef);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMProbeTerrainXYZ
+
+ Probes the terrain. Pass in the XYZ coordinate of the probe point, a probe
+ object, and an XPLMProbeInfo_t struct that has its structSize member set
+ properly. Other fields are filled in if we hit terrain, and a probe result
+ is returned.
+ }
+ FUNCTION XPLMProbeTerrainXYZ(
+ inProbe : XPLMProbeRef;
+ inX : single;
+ inY : single;
+ inZ : single;
+ outInfo : PXPLMProbeInfo_t) : XPLMProbeResult;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+{$ENDIF}
+{___________________________________________________________________________
+ * Object Drawing
+ ___________________________________________________________________________}
+{
+ The object drawing routines let you load and draw X-Plane OBJ files.
+ Objects are loaded by file path and managed via an opaque handle. X-Plane
+ naturally reference counts objects, so it is important that you balance
+ every successful call to XPLMLoadObject with a call to XPLMUnloadObject!
+}
+
+
+
+{$IFDEF XPLM200}
+TYPE
+ {
+ XPLMObjectRef
+
+ An XPLMObjectRef is a opaque handle to an .obj file that has been loaded
+ into memory.
+ }
+ XPLMObjectRef = pointer;
+ PXPLMObjectRef = ^XPLMObjectRef;
+{$ENDIF}
+
+{$IFDEF XPLM200}
+ {
+ XPLMDrawInfo_t
+
+ The XPLMDrawInfo_t structure contains positioning info for one object that
+ is to be drawn. Be sure to set structSize to the size of the structure for
+ future expansion.
+ }
+ XPLMDrawInfo_t = RECORD
+ { Set this to the size of this structure! }
+ structSize : integer;
+ { X location of the object in local coordinates. }
+ x : single;
+ { Y location of the object in local coordinates. }
+ y : single;
+ { Z location of the object in local coordinates. }
+ z : single;
+ { Pitch in degres to rotate the object, positive is up. }
+ pitch : single;
+ { Heading in local coordinates to rotate the object, clockwise. }
+ heading : single;
+ { Roll to rotate the object. }
+ roll : single;
+ END;
+ PXPLMDrawInfo_t = ^XPLMDrawInfo_t;
+{$ENDIF}
+
+{$IFDEF XPLM210}
+ {
+ XPLMObjectLoaded_f
+
+ You provide this callback when loading an object asynchronously; it will be
+ called once the object is loaded. Your refcon is passed back. The object
+ ref passed in is the newly loaded object (ready for use) or NULL if an
+ error occured.
+
+ If your plugin is disabled, this callback will be delivered as soon as the
+ plugin is re-enabled. If your plugin is unloaded before this callback is
+ ever called, the SDK will release the object handle for you.
+ }
+ XPLMObjectLoaded_f = PROCEDURE(
+ inObject : XPLMObjectRef;
+ inRefcon : pointer); cdecl;
+{$ENDIF}
+
+{$IFDEF XPLM200}
+ {
+ XPLMLoadObject
+
+ This routine loads an OBJ file and returns a handle to it. If X-plane has
+ already loaded the object, the handle to the existing object is returned.
+ Do not assume you will get the same handle back twice, but do make sure to
+ call unload once for every load to avoid "leaking" objects. The object
+ will be purged from memory when no plugins and no scenery are using it.
+
+ The path for the object must be relative to the X-System base folder. If
+ the path is in the root of the X-System folder you may need to prepend ./
+ to it; loading objects in the root of the X-System folder is STRONGLY
+ discouraged - your plugin should not dump art resources in the root folder!
+
+
+ XPLMLoadObject will return NULL if the object cannot be loaded (either
+ because it is not found or the file is misformatted). This routine will
+ load any object that can be used in the X-Plane scenery system.
+
+ It is important that the datarefs an object uses for animation already be
+ loaded before you load the object. For this reason it may be necessary to
+ defer object loading until the sim has fully started.
+ }
+ FUNCTION XPLMLoadObject(
+ inPath : Pchar) : XPLMObjectRef;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+{$ENDIF}
+
+{$IFDEF XPLM210}
+ {
+ XPLMLoadObjectAsync
+
+ This routine loads an object asynchronously; control is returned to you
+ immediately while X-Plane loads the object. The sim will not stop flying
+ while the object loads. For large objects, it may be several seconds
+ before the load finishes.
+
+ You provide a callback function that is called once the load has completed.
+ Note that if the object cannot be loaded, you will not find out until the
+ callback function is called with a NULL object handle.
+
+ There is no way to cancel an asynchronous object load; you must wait for
+ the load to complete and then release the object if it is no longer
+ desired.
+ }
+ PROCEDURE XPLMLoadObjectAsync(
+ inPath : Pchar;
+ inCallback : XPLMObjectLoaded_f;
+ inRefcon : pointer);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+{$ENDIF}
+
+{$IFDEF XPLM200}
+ {
+ XPLMDrawObjects
+
+ XPLMDrawObjects draws an object from an OBJ file one or more times. You
+ pass in the object and an array of XPLMDrawInfo_t structs, one for each
+ place you would like the object to be drawn.
+
+ X-Plane will attempt to cull the objects based on LOD and visibility, and
+ will pick the appropriate LOD.
+
+ Lighting is a boolean; pass 1 to show the night version of object with
+ night-only lights lit up. Pass 0 to show the daytime version of the
+ object.
+
+ earth_relative controls the coordinate system. If this is 1, the rotations
+ you specify are applied to the object after its coordinate system is
+ transformed from local to earth-relative coordinates -- that is, an object
+ with no rotations will point toward true north and the Y axis will be up
+ against gravity. If this is 0, the object is drawn with your rotations
+ from local coordanates -- that is, an object with no rotations is drawn
+ pointing down the -Z axis and the Y axis of the object matches the local
+ coordinate Y axis.
+ }
+ PROCEDURE XPLMDrawObjects(
+ inObject : XPLMObjectRef;
+ inCount : integer;
+ inLocations : PXPLMDrawInfo_t;
+ lighting : integer;
+ earth_relative : integer);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+{$ENDIF}
+
+{$IFDEF XPLM200}
+ {
+ XPLMUnloadObject
+
+ This routine marks an object as no longer being used by your plugin.
+ Objects are reference counted: once no plugins are using an object, it is
+ purged from memory. Make sure to call XPLMUnloadObject once for each
+ successful call to XPLMLoadObject.
+ }
+ PROCEDURE XPLMUnloadObject(
+ inObject : XPLMObjectRef);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+{$ENDIF}
+
+{$IFDEF XPLM200}
+{___________________________________________________________________________
+ * Library Access
+ ___________________________________________________________________________}
+{
+ The library access routines allow you to locate scenery objects via the
+ X-Plane library system. Right now library access is only provided for
+ objects, allowing plugin-drawn objects to be extended using the library
+ system.
+}
+
+
+
+
+ {
+ XPLMLibraryEnumerator_f
+
+ An XPLMLibraryEnumerator_f is a callback you provide that is called once
+ for each library element that is located. The returned paths will be
+ relative to the X-System folder.
+ }
+TYPE
+ XPLMLibraryEnumerator_f = PROCEDURE(
+ inFilePath : Pchar;
+ inRef : pointer); cdecl;
+
+ {
+ XPLMLookupObjects
+
+ This routine looks up a virtual path in the library system and returns all
+ matching elements. You provide a callback - one virtual path may match
+ many objects in the library. XPLMLookupObjects returns the number of
+ objects found.
+
+ The latitude and longitude parameters specify the location the object will
+ be used. The library system allows for scenery packages to only provide
+ objects to certain local locations. Only objects that are allowed at the
+ latitude/longitude you provide will be returned.
+ }
+ FUNCTION XPLMLookupObjects(
+ inPath : Pchar;
+ inLatitude : single;
+ inLongitude : single;
+ enumerator : XPLMLibraryEnumerator_f;
+ ref : pointer) : integer;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+{$ENDIF}
+IMPLEMENTATION
+END.
diff --git a/X-Plane-SDK/Delphi/XPLM/XPLMUtilities.pas b/X-Plane-SDK/Delphi/XPLM/XPLMUtilities.pas
new file mode 100755
index 0000000..0595d1c
--- /dev/null
+++ b/X-Plane-SDK/Delphi/XPLM/XPLMUtilities.pas
@@ -0,0 +1,927 @@
+{
+ Copyright 2005-2012 Sandy Barbour and Ben Supnik
+
+ All rights reserved. See license.txt for usage.
+
+ X-Plane SDK Version: 2.1.1
+}
+
+UNIT XPLMUtilities;
+INTERFACE
+{
+
+}
+
+USES XPLMDefs;
+ {$A4}
+{$IFDEF MSWINDOWS}
+ {$DEFINE DELPHI}
+{$ENDIF}
+{___________________________________________________________________________
+ * X-PLANE USER INTERACTION
+ ___________________________________________________________________________}
+{
+ The user interaction APIs let you simulate commands the user can do with a
+ joystick, keyboard etc. Note that it is generally safer for future
+ compatibility to use one of these commands than to manipulate the
+ underlying sim data.
+}
+
+
+
+ {
+ XPLMCommandKeyID
+
+ These enums represent all the keystrokes available within x-plane. They
+ can be sent to x-plane directly. For example, you can reverse thrust using
+ these enumerations.
+ }
+TYPE
+ XPLMCommandKeyID = (
+ xplm_key_pause=0,
+ xplm_key_revthrust,
+ xplm_key_jettison,
+ xplm_key_brakesreg,
+ xplm_key_brakesmax,
+ xplm_key_gear,
+ xplm_key_timedn,
+ xplm_key_timeup,
+ xplm_key_fadec,
+ xplm_key_otto_dis,
+ xplm_key_otto_atr,
+ xplm_key_otto_asi,
+ xplm_key_otto_hdg,
+ xplm_key_otto_gps,
+ xplm_key_otto_lev,
+ xplm_key_otto_hnav,
+ xplm_key_otto_alt,
+ xplm_key_otto_vvi,
+ xplm_key_otto_vnav,
+ xplm_key_otto_nav1,
+ xplm_key_otto_nav2,
+ xplm_key_targ_dn,
+ xplm_key_targ_up,
+ xplm_key_hdgdn,
+ xplm_key_hdgup,
+ xplm_key_barodn,
+ xplm_key_baroup,
+ xplm_key_obs1dn,
+ xplm_key_obs1up,
+ xplm_key_obs2dn,
+ xplm_key_obs2up,
+ xplm_key_com1_1,
+ xplm_key_com1_2,
+ xplm_key_com1_3,
+ xplm_key_com1_4,
+ xplm_key_nav1_1,
+ xplm_key_nav1_2,
+ xplm_key_nav1_3,
+ xplm_key_nav1_4,
+ xplm_key_com2_1,
+ xplm_key_com2_2,
+ xplm_key_com2_3,
+ xplm_key_com2_4,
+ xplm_key_nav2_1,
+ xplm_key_nav2_2,
+ xplm_key_nav2_3,
+ xplm_key_nav2_4,
+ xplm_key_adf_1,
+ xplm_key_adf_2,
+ xplm_key_adf_3,
+ xplm_key_adf_4,
+ xplm_key_adf_5,
+ xplm_key_adf_6,
+ xplm_key_transpon_1,
+ xplm_key_transpon_2,
+ xplm_key_transpon_3,
+ xplm_key_transpon_4,
+ xplm_key_transpon_5,
+ xplm_key_transpon_6,
+ xplm_key_transpon_7,
+ xplm_key_transpon_8,
+ xplm_key_flapsup,
+ xplm_key_flapsdn,
+ xplm_key_cheatoff,
+ xplm_key_cheaton,
+ xplm_key_sbrkoff,
+ xplm_key_sbrkon,
+ xplm_key_ailtrimL,
+ xplm_key_ailtrimR,
+ xplm_key_rudtrimL,
+ xplm_key_rudtrimR,
+ xplm_key_elvtrimD,
+ xplm_key_elvtrimU,
+ xplm_key_forward,
+ xplm_key_down,
+ xplm_key_left,
+ xplm_key_right,
+ xplm_key_back,
+ xplm_key_tower,
+ xplm_key_runway,
+ xplm_key_chase,
+ xplm_key_free1,
+ xplm_key_free2,
+ xplm_key_spot,
+ xplm_key_fullscrn1,
+ xplm_key_fullscrn2,
+ xplm_key_tanspan,
+ xplm_key_smoke,
+ xplm_key_map,
+ xplm_key_zoomin,
+ xplm_key_zoomout,
+ xplm_key_cycledump,
+ xplm_key_replay,
+ xplm_key_tranID,
+ xplm_key_max
+ );
+ PXPLMCommandKeyID = ^XPLMCommandKeyID;
+
+ {
+ XPLMCommandButtonID
+
+ These are enumerations for all of the things you can do with a joystick
+ button in X-Plane. They currently match the buttons menu in the equipment
+ setup dialog, but these enums will be stable even if they change in
+ X-Plane.
+ }
+ XPLMCommandButtonID = (
+ xplm_joy_nothing=0,
+ xplm_joy_start_all,
+ xplm_joy_start_0,
+ xplm_joy_start_1,
+ xplm_joy_start_2,
+ xplm_joy_start_3,
+ xplm_joy_start_4,
+ xplm_joy_start_5,
+ xplm_joy_start_6,
+ xplm_joy_start_7,
+ xplm_joy_throt_up,
+ xplm_joy_throt_dn,
+ xplm_joy_prop_up,
+ xplm_joy_prop_dn,
+ xplm_joy_mixt_up,
+ xplm_joy_mixt_dn,
+ xplm_joy_carb_tog,
+ xplm_joy_carb_on,
+ xplm_joy_carb_off,
+ xplm_joy_trev,
+ xplm_joy_trm_up,
+ xplm_joy_trm_dn,
+ xplm_joy_rot_trm_up,
+ xplm_joy_rot_trm_dn,
+ xplm_joy_rud_lft,
+ xplm_joy_rud_cntr,
+ xplm_joy_rud_rgt,
+ xplm_joy_ail_lft,
+ xplm_joy_ail_cntr,
+ xplm_joy_ail_rgt,
+ xplm_joy_B_rud_lft,
+ xplm_joy_B_rud_rgt,
+ xplm_joy_look_up,
+ xplm_joy_look_dn,
+ xplm_joy_look_lft,
+ xplm_joy_look_rgt,
+ xplm_joy_glance_l,
+ xplm_joy_glance_r,
+ xplm_joy_v_fnh,
+ xplm_joy_v_fwh,
+ xplm_joy_v_tra,
+ xplm_joy_v_twr,
+ xplm_joy_v_run,
+ xplm_joy_v_cha,
+ xplm_joy_v_fr1,
+ xplm_joy_v_fr2,
+ xplm_joy_v_spo,
+ xplm_joy_flapsup,
+ xplm_joy_flapsdn,
+ xplm_joy_vctswpfwd,
+ xplm_joy_vctswpaft,
+ xplm_joy_gear_tog,
+ xplm_joy_gear_up,
+ xplm_joy_gear_down,
+ xplm_joy_lft_brake,
+ xplm_joy_rgt_brake,
+ xplm_joy_brakesREG,
+ xplm_joy_brakesMAX,
+ xplm_joy_speedbrake,
+ xplm_joy_ott_dis,
+ xplm_joy_ott_atr,
+ xplm_joy_ott_asi,
+ xplm_joy_ott_hdg,
+ xplm_joy_ott_alt,
+ xplm_joy_ott_vvi,
+ xplm_joy_tim_start,
+ xplm_joy_tim_reset,
+ xplm_joy_ecam_up,
+ xplm_joy_ecam_dn,
+ xplm_joy_fadec,
+ xplm_joy_yaw_damp,
+ xplm_joy_art_stab,
+ xplm_joy_chute,
+ xplm_joy_JATO,
+ xplm_joy_arrest,
+ xplm_joy_jettison,
+ xplm_joy_fuel_dump,
+ xplm_joy_puffsmoke,
+ xplm_joy_prerotate,
+ xplm_joy_UL_prerot,
+ xplm_joy_UL_collec,
+ xplm_joy_TOGA,
+ xplm_joy_shutdown,
+ xplm_joy_con_atc,
+ xplm_joy_fail_now,
+ xplm_joy_pause,
+ xplm_joy_rock_up,
+ xplm_joy_rock_dn,
+ xplm_joy_rock_lft,
+ xplm_joy_rock_rgt,
+ xplm_joy_rock_for,
+ xplm_joy_rock_aft,
+ xplm_joy_idle_hilo,
+ xplm_joy_lanlights,
+ xplm_joy_max
+ );
+ PXPLMCommandButtonID = ^XPLMCommandButtonID;
+
+ {
+ XPLMHostApplicationID
+
+ The plug-in system is based on Austin's cross-platform OpenGL framework and
+ could theoretically be adapted to run in other apps like WorldMaker. The
+ plug-in system also runs against a test harness for internal development
+ and could be adapted to another flight sim (in theory at least). So an ID
+ is providing allowing plug-ins to indentify what app they are running
+ under.
+ }
+ XPLMHostApplicationID = (
+ xplm_Host_Unknown = 0
+
+ ,xplm_Host_XPlane = 1
+
+ ,xplm_Host_PlaneMaker = 2
+
+ ,xplm_Host_WorldMaker = 3
+
+ ,xplm_Host_Briefer = 4
+
+ ,xplm_Host_PartMaker = 5
+
+ ,xplm_Host_YoungsMod = 6
+
+ ,xplm_Host_XAuto = 7
+
+ );
+ PXPLMHostApplicationID = ^XPLMHostApplicationID;
+
+ {
+ XPLMLanguageCode
+
+ These enums define what language the sim is running in. These enumerations
+ do not imply that the sim can or does run in all of these languages; they
+ simply provide a known encoding in the event that a given sim version is
+ localized to a certain language.
+ }
+ XPLMLanguageCode = (
+ xplm_Language_Unknown = 0
+
+ ,xplm_Language_English = 1
+
+ ,xplm_Language_French = 2
+
+ ,xplm_Language_German = 3
+
+ ,xplm_Language_Italian = 4
+
+ ,xplm_Language_Spanish = 5
+
+ ,xplm_Language_Korean = 6
+
+{$IFDEF XPLM200}
+ ,xplm_Language_Russian = 7
+{$ENDIF}
+
+{$IFDEF XPLM200}
+ ,xplm_Language_Greek = 8
+{$ENDIF}
+
+{$IFDEF XPLM200}
+ ,xplm_Language_Japanese = 9
+{$ENDIF}
+
+{$IFDEF XPLM200}
+ ,xplm_Language_Chinese = 10
+{$ENDIF}
+
+ );
+ PXPLMLanguageCode = ^XPLMLanguageCode;
+
+{$IFDEF XPLM200}
+ {
+ XPLMDataFileType
+
+ These enums define types of data files you can load or unload using the
+ SDK.
+ }
+ XPLMDataFileType = (
+ { A situation (.sit) file, which starts off a flight in a given }
+ { configuration. }
+ xplm_DataFile_Situation = 1
+
+ { A situation movie (.smo) file, which replays a past flight. }
+ ,xplm_DataFile_ReplayMovie = 2
+
+ );
+ PXPLMDataFileType = ^XPLMDataFileType;
+{$ENDIF}
+
+{$IFDEF XPLM200}
+ {
+ XPLMError_f
+
+ An XPLM error callback is a function that you provide to receive debugging
+ information from the plugin SDK. See XPLMSetErrorCallback for more
+ information. NOTE: for the sake of debugging, your error callback will be
+ called even if your plugin is not enabled, allowing you to receive debug
+ info in your XPluginStart and XPluginStop callbacks. To avoid causing
+ logic errors in the management code, do not call any other plugin routines
+ from your error callback - it is only meant for logging!
+ }
+ XPLMError_f = PROCEDURE(
+ inMessage : Pchar); cdecl;
+{$ENDIF}
+
+ {
+ XPLMSimulateKeyPress
+
+ This function simulates a key being pressed for x-plane. The keystroke
+ goes directly to x-plane; it is never sent to any plug-ins. However, since
+ this is a raw key stroke it may be mapped by the keys file or enter text
+ into a field.
+
+ WARNING: This function will be deprecated; do not use it. Instead use
+ XPLMCommandKeyStroke.
+ }
+ PROCEDURE XPLMSimulateKeyPress(
+ inKeyType : integer;
+ inKey : integer);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMSpeakString
+
+ This function displays the string in a translucent overlay over the current
+ display and also speaks the string if text-to-speech is enabled. The
+ string is spoken asynchronously, this function returns immediately.
+ }
+ PROCEDURE XPLMSpeakString(
+ inString : Pchar);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMCommandKeyStroke
+
+ This routine simulates a command-key stroke. However, the keys are done by
+ function, not by actual letter, so this function works even if the user has
+ remapped their keyboard. Examples of things you might do with this include
+ pausing the simulator.
+ }
+ PROCEDURE XPLMCommandKeyStroke(
+ inKey : XPLMCommandKeyID);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMCommandButtonPress
+
+ This function simulates any of the actions that might be taken by pressing
+ a joystick button. However, this lets you call the command directly rather
+ than have to know which button is mapped where. Important: you must
+ release each button you press. The APIs are separate so that you can 'hold
+ down' a button for a fixed amount of time.
+ }
+ PROCEDURE XPLMCommandButtonPress(
+ inButton : XPLMCommandButtonID);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMCommandButtonRelease
+
+ This function simulates any of the actions that might be taken by pressing
+ a joystick button. See XPLMCommandButtonPress
+ }
+ PROCEDURE XPLMCommandButtonRelease(
+ inButton : XPLMCommandButtonID);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMGetVirtualKeyDescription
+
+ Given a virtual key code (as defined in XPLMDefs.h) this routine returns a
+ human-readable string describing the character. This routine is provided
+ for showing users what keyboard mappings they have set up. The string may
+ read 'unknown' or be a blank or NULL string if the virtual key is unknown.
+ }
+ FUNCTION XPLMGetVirtualKeyDescription(
+ inVirtualKey : char) : Pchar;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+{___________________________________________________________________________
+ * X-PLANE MISC
+ ___________________________________________________________________________}
+{
+
+}
+
+
+
+ {
+ XPLMReloadScenery
+
+ XPLMReloadScenery reloads the current set of scenery. You can use this
+ function in two typical ways: simply call it to reload the scenery, picking
+ up any new installed scenery, .env files, etc. from disk. Or, change the
+ lat/ref and lon/ref data refs and then call this function to shift the
+ scenery environment.
+ }
+ PROCEDURE XPLMReloadScenery;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMGetSystemPath
+
+ This function returns the full path to the X-System folder. Note that this
+ is a directory path, so it ends in a trailing : or /. The buffer you pass
+ should be at least 512 characters long.
+ }
+ PROCEDURE XPLMGetSystemPath(
+ outSystemPath : Pchar);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMGetPrefsPath
+
+ This routine returns a full path to the proper directory to store
+ preferences in. It ends in a : or /. The buffer you pass should be at
+ least 512 characters long.
+ }
+ PROCEDURE XPLMGetPrefsPath(
+ outPrefsPath : Pchar);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMGetDirectorySeparator
+
+ This routine returns a string with one char and a null terminator that is
+ the directory separator for the current platform. This allows you to write
+ code that concatinates directory paths without having to #ifdef for
+ platform.
+ }
+ FUNCTION XPLMGetDirectorySeparator: Pchar;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMExtractFileAndPath
+
+ Given a full path to a file, this routine separates the path from the file.
+ If the path is a partial directory (e.g. ends in : or \) the trailing
+ directory separator is removed. This routine works in-place; a pointer to
+ the file part of the buffer is returned; the original buffer still starts
+ with the path.
+ }
+ FUNCTION XPLMExtractFileAndPath(
+ inFullPath : Pchar) : Pchar;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMGetDirectoryContents
+
+ This routine returns a list of files in a directory (specified by a full
+ path, no trailing : or \). The output is returned as a list of NULL
+ terminated strings. An index array (if specified) is filled with pointers
+ into the strings. This routine The last file is indicated by a zero-length
+ string (and NULL in the indices). This routine will return 1 if you had
+ capacity for all files or 0 if you did not. You can also skip a given
+ number of files.
+
+ inDirectoryPath - a null terminated C string containing the full path to
+ the directory with no trailing directory char.
+
+ inFirstReturn - the zero-based index of the first file in the directory to
+ return. (Usually zero to fetch all in one pass.)
+
+ outFileNames - a buffer to receive a series of sequential null terminated
+ C-string file names. A zero-length C string will be appended to the very
+ end.
+
+ inFileNameBufSize - the size of the file name buffer in bytes.
+
+ outIndices - a pointer to an array of character pointers that will become
+ an index into the directory. The last file will be followed by a NULL
+ value. Pass NULL if you do not want indexing information.
+
+ inIndexCount - the max size of the index in entries.
+
+ outTotalFiles - if not NULL, this is filled in with the number of files in
+ the directory.
+
+ outReturnedFiles - if not NULL, the number of files returned by this
+ iteration.
+
+ Return value - 1 if all info could be returned, 0 if there was a buffer
+ overrun.
+
+ WARNING: Before X-Plane 7 this routine did not properly iterate through
+ directories. If X-Plane 6 compatibility is needed, use your own code to
+ iterate directories.
+ }
+ FUNCTION XPLMGetDirectoryContents(
+ inDirectoryPath : Pchar;
+ inFirstReturn : integer;
+ outFileNames : Pchar;
+ inFileNameBufSize : integer;
+ outIndices : PPchar; { Can be nil }
+ inIndexCount : integer;
+ outTotalFiles : Pinteger; { Can be nil }
+ outReturnedFiles : Pinteger) : integer; { Can be nil }
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMInitialized
+
+ This function returns 1 if X-Plane has properly initialized the plug-in
+ system. If this routine returns 0, many XPLM functions will not work.
+
+ NOTE: Under normal circumstances a plug-in should never be running while
+ the plug-in manager is not initialized.
+
+ WARNING: This function is generally not needed and may be deprecated in the
+ future.
+ }
+ FUNCTION XPLMInitialized: integer;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMGetVersions
+
+ This routine returns the revision of both X-Plane and the XPLM DLL. All
+ versions are three-digit decimal numbers (e.g. 606 for version 6.06 of
+ X-Plane); the current revision of the XPLM is 200 (2.00). This routine
+ also returns the host ID of the app running us.
+
+ The most common use of this routine is to special-case around x-plane
+ version-specific behavior.
+ }
+ PROCEDURE XPLMGetVersions(
+ outXPlaneVersion : Pinteger;
+ outXPLMVersion : Pinteger;
+ outHostID : PXPLMHostApplicationID);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMGetLanguage
+
+ This routine returns the langauge the sim is running in.
+ }
+ FUNCTION XPLMGetLanguage: XPLMLanguageCode;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMDebugString
+
+ This routine outputs a C-style string to the Log.txt file. The file is
+ immediately flushed so you will not lose data. (This does cause a
+ performance penalty.)
+ }
+ PROCEDURE XPLMDebugString(
+ inString : Pchar);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+{$IFDEF XPLM200}
+ {
+ XPLMSetErrorCallback
+
+ XPLMSetErrorCallback installs an error-reporting callback for your plugin.
+ Normally the plugin system performs minimum diagnostics to maximize
+ performance. When you install an error callback, you will receive calls
+ due to certain plugin errors, such as passing bad parameters or incorrect
+ data.
+
+ The intention is for you to install the error callback during debug
+ sections and put a break-point inside your callback. This will cause you
+ to break into the debugger from within the SDK at the point in your plugin
+ where you made an illegal call.
+
+ Installing an error callback may activate error checking code that would
+ not normally run, and this may adversely affect performance, so do not
+ leave error callbacks installed in shipping plugins.
+ }
+ PROCEDURE XPLMSetErrorCallback(
+ inCallback : XPLMError_f);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+{$ENDIF}
+
+{$IFDEF XPLM200}
+ {
+ XPLMFindSymbol
+
+ This routine will attempt to find the symbol passed in the inString
+ parameter. If the symbol is found a pointer the function is returned,
+ othewise the function will return NULL.
+ }
+ FUNCTION XPLMFindSymbol(
+ inString : Pchar) : pointer;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+{$ENDIF}
+
+{$IFDEF XPLM200}
+ {
+ XPLMLoadDataFile
+
+ Loads a data file of a given type. Paths must be relative to the X-System
+ folder. To clear the replay, pass a NULL file name (this is only valid with
+ replay movies, not sit files).
+ }
+ FUNCTION XPLMLoadDataFile(
+ inFileType : XPLMDataFileType;
+ inFilePath : Pchar) : integer; { Can be nil }
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+{$ENDIF}
+
+{$IFDEF XPLM200}
+ {
+ XPLMSaveDataFile
+
+ Saves the current situation or replay; paths are relative to the X-System
+ folder.
+ }
+ FUNCTION XPLMSaveDataFile(
+ inFileType : XPLMDataFileType;
+ inFilePath : Pchar) : integer;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+{$ENDIF}
+
+{$IFDEF XPLM200}
+{___________________________________________________________________________
+ * X-PLANE COMMAND MANAGEMENT
+ ___________________________________________________________________________}
+{
+ The command management APIs let plugins interact with the command-system in
+ X-Plane, the abstraction behind keyboard presses and joystick buttons.
+ This API lets you create new commands and modify the behavior (or get
+ notification) of existing ones.
+
+ An X-Plane command consists of three phases: a beginning, continuous
+ repetition, and an ending. The command may be repeated zero times in the
+ event that the user presses a button only momentarily.
+}
+
+
+
+
+ {
+ XPLMCommandPhase
+
+ The phases of a command.
+ }
+TYPE
+ XPLMCommandPhase = (
+ { The command is being started. }
+ xplm_CommandBegin = 0
+
+ { The command is continuing to execute. }
+ ,xplm_CommandContinue = 1
+
+ { The command has ended. }
+ ,xplm_CommandEnd = 2
+
+ );
+ PXPLMCommandPhase = ^XPLMCommandPhase;
+
+ {
+ XPLMCommandRef
+
+ A command ref is an opaque identifier for an X-Plane command. Command
+ references stay the same for the life of your plugin but not between
+ executions of X-Plane. Command refs are used to execute commands, create
+ commands, and create callbacks for particular commands.
+
+ Note that a command is not "owned" by a particular plugin. Since many
+ plugins may participate in a command's execution, the command does not go
+ away if the plugin that created it is unloaded.
+ }
+ XPLMCommandRef = pointer;
+ PXPLMCommandRef = ^XPLMCommandRef;
+
+ {
+ XPLMCommandCallback_f
+
+ A command callback is a function in your plugin that is called when a
+ command is pressed. Your callback receives the commadn reference for the
+ particular command, the phase of the command that is executing, and a
+ reference pointer that you specify when registering the callback.
+
+ Your command handler should return 1 to let processing of the command
+ continue to other plugins and X-Plane, or 0 to halt processing,
+ potentially bypassing X-Plane code.
+ }
+ XPLMCommandCallback_f = FUNCTION(
+ inCommand : XPLMCommandRef;
+ inPhase : XPLMCommandPhase;
+ inRefcon : pointer) : integer; cdecl;
+
+ {
+ XPLMFindCommand
+
+ XPLMFindCommand looks up a command by name, and returns its command
+ reference or NULL if the command does not exist.
+ }
+ FUNCTION XPLMFindCommand(
+ inName : Pchar) : XPLMCommandRef;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMCommandBegin
+
+ XPLMCommandBegin starts the execution of a command, specified by its
+ command reference. The command is "held down" until XPLMCommandEnd is
+ called.
+ }
+ PROCEDURE XPLMCommandBegin(
+ inCommand : XPLMCommandRef);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMCommandEnd
+
+ XPLMCommandEnd ends the execution of a given command that was started with
+ XPLMCommandBegin.
+ }
+ PROCEDURE XPLMCommandEnd(
+ inCommand : XPLMCommandRef);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMCommandOnce
+
+ This executes a given command momentarily, that is, the command begins and
+ ends immediately.
+ }
+ PROCEDURE XPLMCommandOnce(
+ inCommand : XPLMCommandRef);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMCreateCommand
+
+ XPLMCreateCommand creates a new command for a given string. If the command
+ already exists, the existing command reference is returned. The
+ description may appear in user interface contexts, such as the joystick
+ configuration screen.
+ }
+ FUNCTION XPLMCreateCommand(
+ inName : Pchar;
+ inDescription : Pchar) : XPLMCommandRef;
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMRegisterCommandHandler
+
+ XPLMRegisterCommandHandler registers a callback to be called when a command
+ is executed. You provide a callback with a reference pointer.
+
+ If inBefore is true, your command handler callback will be executed before
+ X-Plane executes the command, and returning 0 from your callback will
+ disable X-Plane's processing of the command. If inBefore is false, your
+ callback will run after X-Plane. (You can register a single callback both
+ before and after a command.)
+ }
+ PROCEDURE XPLMRegisterCommandHandler(
+ inComand : XPLMCommandRef;
+ inHandler : XPLMCommandCallback_f;
+ inBefore : integer;
+ inRefcon : pointer);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+ {
+ XPLMUnregisterCommandHandler
+
+ XPLMUnregisterCommandHandler removes a command callback registered with
+ XPLMRegisterCommandHandler.
+ }
+ PROCEDURE XPLMUnregisterCommandHandler(
+ inComand : XPLMCommandRef;
+ inHandler : XPLMCommandCallback_f;
+ inBefore : integer;
+ inRefcon : pointer);
+{$IFDEF DELPHI}
+ cdecl; external 'XPLM.DLL';
+{$ELSE}
+ cdecl; external '';
+{$ENDIF}
+
+{$ENDIF}
+IMPLEMENTATION
+END.
diff --git a/X-Plane-SDK/Libraries/Mac/XPLM.framework/XPLM b/X-Plane-SDK/Libraries/Mac/XPLM.framework/XPLM
new file mode 100755
index 0000000..c03cf48
--- /dev/null
+++ b/X-Plane-SDK/Libraries/Mac/XPLM.framework/XPLM
Binary files differ
diff --git a/X-Plane-SDK/Libraries/Mac/XPWidgets.framework/XPWidgets b/X-Plane-SDK/Libraries/Mac/XPWidgets.framework/XPWidgets
new file mode 100755
index 0000000..aba93db
--- /dev/null
+++ b/X-Plane-SDK/Libraries/Mac/XPWidgets.framework/XPWidgets
Binary files differ
diff --git a/X-Plane-SDK/Libraries/Win/XPLM.lib b/X-Plane-SDK/Libraries/Win/XPLM.lib
new file mode 100755
index 0000000..c7b00b1
--- /dev/null
+++ b/X-Plane-SDK/Libraries/Win/XPLM.lib
Binary files differ
diff --git a/X-Plane-SDK/Libraries/Win/XPLM_64.lib b/X-Plane-SDK/Libraries/Win/XPLM_64.lib
new file mode 100755
index 0000000..51fdf70
--- /dev/null
+++ b/X-Plane-SDK/Libraries/Win/XPLM_64.lib
Binary files differ
diff --git a/X-Plane-SDK/Libraries/Win/XPWidgets.lib b/X-Plane-SDK/Libraries/Win/XPWidgets.lib
new file mode 100755
index 0000000..1eac5bf
--- /dev/null
+++ b/X-Plane-SDK/Libraries/Win/XPWidgets.lib
Binary files differ
diff --git a/X-Plane-SDK/Libraries/Win/XPWidgets_64.lib b/X-Plane-SDK/Libraries/Win/XPWidgets_64.lib
new file mode 100755
index 0000000..32c3ae4
--- /dev/null
+++ b/X-Plane-SDK/Libraries/Win/XPWidgets_64.lib
Binary files differ
diff --git a/X-Plane-SDK/README.txt b/X-Plane-SDK/README.txt
new file mode 100755
index 0000000..2316eb5
--- /dev/null
+++ b/X-Plane-SDK/README.txt
@@ -0,0 +1,197 @@
+-------------------------------------------------------------------------------
+ THE X-PLANE PLUGIN SDK
+-------------------------------------------------------------------------------
+
+This download contains the files necessary to build plugins for X-Plane. The
+X-Plane plugin website is:
+
+http://www.xsquawkbox.net/xpsdk/
+
+The website contains full documentation on the SDK including tech notes, sample
+plugins, sample code, contact information, and links to the latest versions of
+this SDK.
+
+The X-Plane SDK authors can be reached at:
+
+xplanesdk@xsquawkbox.net
+
+Please do not email Austin or Laminar Research for SDK questions or support;
+the SDK is a third party effort.
+
+the X-Plane developer mailing list is an unlisted yahoo group frequented by
+many X-Plane developers.
+
+x-plane-dev@yahoogroups.com
+
+-------------------------------------------------------------------------------
+ SDK FILES
+-------------------------------------------------------------------------------
+
+license.txt Copyright information for this download.
+README.txt This document
+CHeaders Header files for compiling C/C++ plugins
+Delphi Interfaces for compiling Pascal plugins
+Libraries Import libraries for linking on Windows
+ and frameworks for linking on Mac.
+
+Note: there are no import/link-time libraries for Linux; on Linux, plugins
+simply leave SDK symbols undefined and they are discovered at runtime. The
+SDK website explains this process in more detail.
+
+Mac CFM plugins are not supported by the SDK versions 2.0 and higher; the
+2.0 SDK requires X-Plane 9.0 or newer, and X-Plane 9 will not run on
+Mac OS 9. Therefore CFM plugins are not useful (and are probably
+counterproductive since they cannot support x86 code). If you have a CFM
+plugin, continue to use the 1.0 SDK to build it. You will have to port to
+Mach-O if you want to use 2.0 features.
+
+-------------------------------------------------------------------------------
+ RELEASE NOTES
+-------------------------------------------------------------------------------
+
+This section contains per-release notes for the history of the X-Plane SDK.
+
+X-Plane SDK Release 2.1.3 11/14/13
+
+Fixed XPC Wrappers to use int and intptr_t instead of long. This fixes
+crashes for plugins on 64-bit Windows.
+
+X-Plane SDK Release 2.1.2 RC2 1/15/13
+
+Removed headers from frameworks, as they don't work; updated README.
+
+X-Plane SDK Release 2.1.2 RC1 1/12/13
+
+The 2.1.2 SDK adds frameworks for the XPLM and XPWidgets; Mac developers
+can link directly against these frameworks and avoid unresolved symbols
+and flat namespace problems. The frameworks produce plugins that will
+work on X-Plane 8, 9, and 10 depending on the plugin CPU architecture,
+minimum system SDK, and XPLM API revision number.
+
+X-Plane SDK Release 2.1.1 RC1 10/29/12
+
+The 2.1.1 update to the SDK provides 64-bit build materials.
+
+X-Plane SDK Release 2.1.0 RC1 3/31/12
+
+This is the first release of the version 2.1 X-Plane SDK. This version of the
+SDK exposes new APIs.
+
+This API also replaces all references to "long" with int or intptr_t,
+depending on whether the integer needs to be wide enough to hold coerced
+pointers. Most of the time, int is used; the notable exception is the widgets
+library where params and properties can contain pointers to user data.
+
+This change is not an ABI change - compiled plugins will work unmodified.
+However for some compilers, you may need to replace long with int or intptr_t
+in your code.
+
+X-Plane SDK Release 2.0.1 RC1 7/21/10
+
+This release adds symbol visibility macros for GCC 4 on Linux and corrects a few
+function documentation comments.
+
+X-Plane SDK Release 2.0 RC1 7/11/08
+
+This release includes a corrected XPLM.lib for windows with exports for some of
+the new 2.0 APIs.
+
+X-Plane SDK Release 2.0 Beta 2 4/23/08
+
+This release includes new APIs for reading and writing data files and drawing
+hooks for the local map screen, as well as some minor tweaks:
+
+- Sim version is 2.0 in the headers.
+- unload plane msg marked as 2.0 only.
+- New enumerations for additional languages.
+- Function level docs improved.
+
+X-Plane SDK Release 2.0 Beta 1 1/19/08
+
+This is the first release of the version 2.0 X-Plane SDK. CFM support has
+been removed, and the license has been simplified, reflecting that it only has
+to cover the SDK include/import lib files and not the sample code or examples.
+
+X-Plane SDK Release 1.0.2 1/5/05
+
+The headers of the SDK are modified to support Kylix. No changes for Mac,
+Windows, or C users. Headers now have SDK version numbers.
+
+X-Plane SDK Release 1.0.1 12/29/04
+
+The headers of this SDK are modified to support Linux complication. No changes
+for Mac and Windows users.
+
+X-Plane SDK Release Candidate 1
+
+Only one slight change in the enums: the enum xpProperty_SubWindowHasCloseBoxes
+in XPStandardWidgets.h has been changed to xpProperty_MainWindowHasCloseBoxes.
+Its value has not been changed, so you will need to search-and-replace your code
+when using this version of the SDK, but already-compiled plugins will experience
+no different operation.
+
+The documentation has been revised for all headers to revise changes made to the
+SDK over the course of beta.
+
+X-Plane SDK Beta 5
+
+This version of the SDK features a number of enumeration changes to reflect the
+X-Plane interface more correctly. This became crucial when X-Plane 7's new user
+interface was released. With X-Plane in release candidates hopefully beta 5 of
+the SDK could be the last one. Please see:
+
+www.xsquawkbox.net/xpsdk/newui.html
+
+For a comprehensive description of all the enumeration changes. For most
+plugins (no developers reported using the deprecated enumerations), a simple
+search and replace should suffice. Plugins compiled against the beta 4 SDK that
+do not use now-unsupported graphics will continue to work correctly.
+
+X-Plane SDK Beta 4
+
+This release corrects two problems with the Pascal headers: function pointer
+types are now declared cdecl (since this is how the SDK calls them), and the
+import library for the widget callbacks is now XPWIDGETS.DLL as it should be.
+
+X-Plane SDK Beta 3
+
+This release finally features full documentation and a stable widgets API, as
+well as a few other minor bug fixes.
+
+Starting with beta 3, the DLLs necessary to run plugins ship with X-Plane 660.
+The SDK will work with X-Plane 660 RC3 and later. The XPWidgets DLL now lives
+in the Resources/plugins folder.
+
+Starting with beta 3, extra plugins, documentation, sample code, and sample
+projects are now featured directly on the web in the new X-Plane SDK library.
+They are not included in the SDK zip file; the zip file only contains headers
+and lib files for the SDK.
+
+X-Plane SDK Beta 2
+
+You must recompile your plugin for the beta 2 plugin SDK! Plugins compiled
+against the beta 1 SDK will not work with X-Plane 660 or the new XPLM.DLL.
+
+A huge number of data refs have been added. Unfortunately the documentation
+is thin. Use the data ref tester plugin to view the data refs in real time
+and find what you need.
+
+The data ref APIs have also changed to allow for arrays of integers as well
+as floats. Some sim variables are now arrays that were previously many
+individual items.
+
+A new drawing phase is available for replacing aircraft graphics. The
+texturing APIs in XPLMGraphics have been revised. The most notable change is
+that you cannot use the SDK to load your textures. (This functionality was
+broken and never worked in beta 1.) See the x-plane-dev list for sample code
+on how to load your own bitmaps.
+
+X-Plane can reload plugins on the fly. Use the Plugin Enabler plugin to reload
+your plugin. On the Mac you can throw the old DLL in the trash and put a new
+one in its place to reload a new version of the plugin. On the PC, an alert
+comes up; while this alert is up you can swap your plugins' DLL. This allows
+you to recompile your plugin without rebooting the sim.
+
+Delphi Pascal interfaces and sample code are in the SDK. Thanks to Billy
+Verreynne for his hard work on this.
+
diff --git a/X-Plane-SDK/license.txt b/X-Plane-SDK/license.txt
new file mode 100755
index 0000000..8b9cbfc
--- /dev/null
+++ b/X-Plane-SDK/license.txt
@@ -0,0 +1,27 @@
+Copyright (c) 2008, Sandy Barbour and Ben Supnik
+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:
+
+ * Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+ * Neither the names of the authors nor that of X-Plane or Laminar Research
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission from the authors or
+ Laminar Research, respectively.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/fsuipc/FSUIPC_User.h b/fsuipc/FSUIPC_User.h
new file mode 100755
index 0000000..89ab07f
--- /dev/null
+++ b/fsuipc/FSUIPC_User.h
@@ -0,0 +1,59 @@
+#ifndef _FSUIPC_H_
+#define _FSUIPC_H_
+
+// Supported Sims
+#define SIM_ANY 0
+#define SIM_FS98 1
+#define SIM_FS2K 2
+#define SIM_CFS2 3
+#define SIM_CFS1 4
+#define SIM_FLY 5
+#define SIM_FS2K2 6
+#define SIM_FS2K4 7
+#define SIM_FSX 8
+#define SIM_ESP 9
+
+// Error numbers
+#define FSUIPC_ERR_OK 0
+#define FSUIPC_ERR_OPEN 1 // Attempt to Open when already Open
+#define FSUIPC_ERR_NOFS 2 // Cannot link to FSUIPC or WideClient
+#define FSUIPC_ERR_REGMSG 3 // Failed to Register common message with Windows
+#define FSUIPC_ERR_ATOM 4 // Failed to create Atom for mapping filename
+#define FSUIPC_ERR_MAP 5 // Failed to create a file mapping object
+#define FSUIPC_ERR_VIEW 6 // Failed to open a view to the file map
+#define FSUIPC_ERR_VERSION 7 // Incorrect version of FSUIPC, or not FSUIPC
+#define FSUIPC_ERR_WRONGFS 8 // Sim is not version requested
+#define FSUIPC_ERR_NOTOPEN 9 // Call cannot execute, link not Open
+#define FSUIPC_ERR_NODATA 10 // Call cannot execute: no requests accumulated
+#define FSUIPC_ERR_TIMEOUT 11 // IPC timed out all retries
+#define FSUIPC_ERR_SENDMSG 12 // IPC sendmessage failed all retries
+#define FSUIPC_ERR_DATA 13 // IPC request contains bad data
+#define FSUIPC_ERR_RUNNING 14 // Maybe running on WideClient, but FS not running on Server, or wrong FSUIPC
+#define FSUIPC_ERR_SIZE 15 // Read or Write request cannot be added, memory for Process is full
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Globals accessible from main code
+extern DWORD FSUIPC_Version; // HIWORD is 1000 x Version Number, minimum 1998
+ // LOWORD is build letter, with a = 1 etc. For 1998 this must be at least 5 (1998e)
+extern DWORD FSUIPC_FS_Version;
+ // FS98=1, FS2k=2, CFS2=3. See above.
+extern DWORD FSUIPC_Lib_Version;
+ // HIWORD is 1000 x version, LOWORD is build letter, a = 1 etc.
+
+// Library routines
+extern BOOL FSUIPC_Open(DWORD dwFSReq, DWORD *pdwResult); // For use externally (IPCuser.lib)
+extern BOOL FSUIPC_Open2(DWORD dwFSReq, DWORD *pdwResult, BYTE *pMem, DWORD dwSize); // For use internally (ModuleUser.lib)
+extern void FSUIPC_Close(void);
+extern BOOL FSUIPC_Read(DWORD dwOffset, DWORD dwSize, void *pDest, DWORD *pdwResult);
+extern BOOL FSUIPC_ReadSpecial(DWORD dwOffset, DWORD dwSize, void *pDest, DWORD *pdwResult);
+extern BOOL FSUIPC_Write(DWORD dwOffset, DWORD dwSize, void *pSrce, DWORD *pdwResult);
+extern BOOL FSUIPC_Process(DWORD *pdwResult);
+
+#ifdef __cplusplus
+};
+#endif
+
+#endif // _FSUIPC_H_
diff --git a/fsuipc/FSUIPC_User.lib b/fsuipc/FSUIPC_User.lib
new file mode 100755
index 0000000..c8d5243
--- /dev/null
+++ b/fsuipc/FSUIPC_User.lib
Binary files differ
diff --git a/fsuipc/Lib_source.zip b/fsuipc/Lib_source.zip
new file mode 100755
index 0000000..638732c
--- /dev/null
+++ b/fsuipc/Lib_source.zip
Binary files differ
diff --git a/fsuipc/ReadThis.txt b/fsuipc/ReadThis.txt
new file mode 100755
index 0000000..dad3590
--- /dev/null
+++ b/fsuipc/ReadThis.txt
@@ -0,0 +1,120 @@
+FSUIPC Developer Kit: Library for MSVC/C++ programmers
+======================================================
+
+To interface to FSUIPC (versions 1.998e or later) in your MSVC/C++ programs:
+
+* insert the LIB and Header file into your source folder
+* include the header in your source module(s) (#include "...")
+* add the Lib to the list of Libs in the Link section of the Project Settings
+* call the appropriate Library routines in your code.
+
+More on this last part (and please also refer to the UIPCHello example
+provided):
+
+Opening the link to FSUIPC
+==========================
+
+For this you use the following Library toutine:
+
+ BOOL FSUIPC_Open(DWORD dwFSReq, DWORD *pdwResult);
+
+where
+ dwFSReq specified which Flight Simulator you want to connect to:
+
+ SIM_ANY for any supported by FSUIPC or equivalent
+ SIM_FS98 FS98
+ SIM_FS2K FS2000
+ SIM_FS2K2 FS2002
+ SIM_FS2K4 FS2004
+ SIM_FSX FSX
+ SIM_ESP ESP (first version)
+ SIM_CFS2 CFS2
+ SIM_CFS1 CFS
+and
+ pResult is a pointer to a DWORD to receive an error number if the
+ operation fails.
+
+If FSUIPC_Open returns "FALSE" then the value in the result DWORD will
+tell you what went wrong. The errors currently possible are defined in
+the Header file (see the list of FSUIPC_ERR_ ... definitions).
+
+If it returns "TRUE" then the link is open and ready for your requests.
+Already the Library routine will have obtained some data for you:
+
+ DWORD FSUIPC_Version; // HIWORD is 1000 x Version Number, minimum 1998
+ // LOWORD is build letter, with a = 1 etc.
+ DWORD FSUIPC_FS_Version;
+ // SIM_FS98, SIM_FS2K etc -- see above
+
+
+Closing the link
+================
+
+Before terminating your program, or trying to re-open (e.g. to re-connect
+after a lost connection, possibly due to FS crashing or closing), you must
+Close the link to free up the resources it uses:
+
+ void FSUIPC_Close(void);
+
+There is no harm done if you Close a link that is already Closed.
+
+
+
+Specifying the requests
+=======================
+
+The interface to FSUIPC and hence the simulator is simply one of reads and
+writes from and to specific "offsets". These "were originally true offsets
+into a specific Global data earea within FS, but nowadays, at least in FS2000
+and CFS they are more likely to be treated a Identifiers to specific
+variables, and are translated within FSUIPC. However, you may still address
+data with contiguous offsets in blocks, as FSUIPC breaks these down if it
+needs to.
+
+The following Library calls are used to accumulate Read and Write requests:
+
+ BOOL FSUIPC_Read(DWORD dwOffset, DWORD dwSize,
+ void *pDest, DWORD *pdwResult);
+ BOOL FSUIPC_Write(DWORD dwOffset, DWORD dwSize,
+ void *pSrce, DWORD *pdwResult);
+
+In both cases you supply an offset, identifying the data required or to be
+written, and a size (in bytes). The pointers "pDest" for reads and "pSrce"
+for writes naturally must point to the area to receive the result or (for
+writes) the area containing the data to be written. These pointers are defined
+as "void *" here so that you can use whatever component size or structure you
+like, as appropriate for the data in question.
+
+The DWORD for the result is used to identify the reason for error should the
+return be FALSE. The only possible errors on these calls are an unopened
+link or a full data area. You can only accumulate so much data before you need
+to get FSUIPC to "process" it. This is next:
+
+
+Processing the requests
+=======================
+
+ BOOL FSUIPC_Process(DWORD *pdwResult);
+
+This routine sends all the requests accumulated using the Read and Write calls
+since the last Process call (if any). It is this call which actually operates
+the interface.
+
+As usual , the error number in the Result DWORD needs to be checked if this
+call returns FALSE, indicating an error.
+
+Note that, if your program is run under WideClient, it is likely that your
+first requests for data are met with zeroes for everything. this is because
+WideClient sends off the request but meanwhile returns what it already has. If
+you depend on seeing correct data from the outset, you will need to wait some
+milliseconds (100 or more is good, 500 safer) and read again.
+
+If you are coninually reading the same data over and over in a loop, as when,
+for instance, maintaining a moving map position and so on, the initial values
+from Wideclient shouldn't be any bother. But remember, in loops, allow some
+time for other processes to run, and also process your own Windows messages.
+
+
+==============================================================================
+Pete Dowson, 6th March 2008
+
diff --git a/fsuipc/UIPCHello.c b/fsuipc/UIPCHello.c
new file mode 100755
index 0000000..c31a54f
--- /dev/null
+++ b/fsuipc/UIPCHello.c
@@ -0,0 +1,79 @@
+/* UIPChello.c Displays UIPC link data in a message box */
+
+#include <windows.h>
+#include "FSUIPC_User.h"
+
+char *pszErrors[] =
+ { "Okay",
+ "Attempt to Open when already Open",
+ "Cannot link to FSUIPC or WideClient",
+ "Failed to Register common message with Windows",
+ "Failed to create Atom for mapping filename",
+ "Failed to create a file mapping object",
+ "Failed to open a view to the file map",
+ "Incorrect version of FSUIPC, or not FSUIPC",
+ "Sim is not version requested",
+ "Call cannot execute, link not Open",
+ "Call cannot execute: no requests accumulated",
+ "IPC timed out all retries",
+ "IPC sendmessage failed all retries",
+ "IPC request contains bad data",
+ "Maybe running on WideClient, but FS not running on Server, or wrong FSUIPC",
+ "Read or Write request cannot be added, memory for Process is full",
+ };
+
+
+int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
+{ DWORD dwResult;
+
+ if (FSUIPC_Open(SIM_ANY, &dwResult))
+ { char chMsg[128], chTimeMsg[64];
+ char chTime[3];
+ BOOL fTimeOk = TRUE;
+ static char *pFS[] = { "FS98", "FS2000", "CFS2", "CFS1", "Fly!", "FS2002", "FS2004" }; // Change made 060603
+
+ // Okay, we're linked, and already the FSUIPC_Open has had an initial
+ // exchange with FSUIPC to get its version number and to differentiate
+ // between FS's.
+
+ // Now to auto-Register with FSUIPC, to save the user of an Unregistered FSUIPC
+ // having to Register UIPCHello for us:
+ static char chOurKey[] = "IKB3BI67TCHE"; // As obtained from Pete Dowson
+
+ if (FSUIPC_Write(0x8001, 12, chOurKey, &dwResult))
+ FSUIPC_Process(&dwResult); // Process the request(s)
+
+ // I've not checked the reslut of the above -- if it didn't register us,
+ // and FSUIPC isn't fully user-Registered, the next request will not
+ // return the FS lock time
+
+ // As an example of retrieving data, well also get the FS clock time too:
+ if (!FSUIPC_Read(0x238, 3, chTime, &dwResult) ||
+ // If we wanted other reads/writes at the same time, we could put them here
+ !FSUIPC_Process(&dwResult)) // Process the request(s)
+ fTimeOk = FALSE;
+
+ // Now display all the knowledge we've accrued:
+ if (fTimeOk)
+ wsprintf(chTimeMsg, "Request for time ok: FS clock = %02d:%02d:%02d", chTime[0], chTime[1], chTime[2]);
+
+ else
+ wsprintf(chTimeMsg, "Request for time failed: %s", pszErrors[dwResult]);
+
+ wsprintf(chMsg, "Sim is %s, FSUIPC Version = %c.%c%c%c%c\r%s",
+ (FSUIPC_FS_Version && (FSUIPC_FS_Version <= 7)) ? pFS[FSUIPC_FS_Version - 1] : "Unknown FS", // Change made 060603
+ '0' + (0x0f & (FSUIPC_Version >> 28)),
+ '0' + (0x0f & (FSUIPC_Version >> 24)),
+ '0' + (0x0f & (FSUIPC_Version >> 20)),
+ '0' + (0x0f & (FSUIPC_Version >> 16)),
+ (FSUIPC_Version & 0xffff) ? 'a' + (FSUIPC_Version & 0xff) - 1 : ' ',
+ chTimeMsg);
+ MessageBox (NULL, chMsg, "UIPChello: Link established to FSUIPC", 0) ;
+ }
+
+ else
+ MessageBox (NULL, pszErrors[dwResult], "UIPChello: Failed to open link to FSUIPC", 0) ;
+
+ FSUIPC_Close(); // Closing when it wasn't open is okay, so this is safe here
+ return 0 ;
+}
diff --git a/fsuipc/UIPCHello.rc b/fsuipc/UIPCHello.rc
new file mode 100755
index 0000000..96fab2c
--- /dev/null
+++ b/fsuipc/UIPCHello.rc
@@ -0,0 +1,109 @@
+//Microsoft Developer Studio generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "afxres.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.K.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENG)
+#ifdef _WIN32
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_UK
+#pragma code_page(1252)
+#endif //_WIN32
+
+#ifndef _MAC
+/////////////////////////////////////////////////////////////////////////////
+//
+// Version
+//
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION 2,0,0,0
+ PRODUCTVERSION 2,0,0,0
+ FILEFLAGSMASK 0x3fL
+#ifdef _DEBUG
+ FILEFLAGS 0x1L
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS 0x40004L
+ FILETYPE 0x1L
+ FILESUBTYPE 0x0L
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "080904b0"
+ BEGIN
+ VALUE "Comments", "\0"
+ VALUE "CompanyName", "Peter L. Dowson\0"
+ VALUE "FileDescription", "UIPChello\0"
+ VALUE "FileVersion", "2, 0, 0, 0\0"
+ VALUE "InternalName", "UIPChello\0"
+ VALUE "LegalCopyright", "\0"
+ VALUE "LegalTrademarks", "\0"
+ VALUE "OriginalFilename", "UIPChello.exe\0"
+ VALUE "PrivateBuild", "\0"
+ VALUE "ProductName", "UIPC Hello Demo\0"
+ VALUE "ProductVersion", "2, 0, 0, 0\0"
+ VALUE "SpecialBuild", "\0"
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x809, 1200
+ END
+END
+
+#endif // !_MAC
+
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE DISCARDABLE
+BEGIN
+ "resource.h\0"
+END
+
+2 TEXTINCLUDE DISCARDABLE
+BEGIN
+ "#include ""afxres.h""\r\n"
+ "\0"
+END
+
+3 TEXTINCLUDE DISCARDABLE
+BEGIN
+ "\r\n"
+ "\0"
+END
+
+#endif // APSTUDIO_INVOKED
+
+#endif // English (U.K.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
+
diff --git a/fsuipc/UIPChello.exe b/fsuipc/UIPChello.exe
new file mode 100755
index 0000000..71e5911
--- /dev/null
+++ b/fsuipc/UIPChello.exe
Binary files differ
diff --git a/fsuipc/libc.lib b/fsuipc/libc.lib
new file mode 100755
index 0000000..4ec9a76
--- /dev/null
+++ b/fsuipc/libc.lib
Binary files differ
diff --git a/fsuipc/resource.h b/fsuipc/resource.h
new file mode 100755
index 0000000..654c5fb
--- /dev/null
+++ b/fsuipc/resource.h
@@ -0,0 +1,15 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Developer Studio generated include file.
+// Used by UIPCHello2.rc
+//
+
+// Next default values for new objects
+//
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE 101
+#define _APS_NEXT_COMMAND_VALUE 40001
+#define _APS_NEXT_CONTROL_VALUE 1000
+#define _APS_NEXT_SYMED_VALUE 101
+#endif
+#endif
diff --git a/vjoy/Debug/VJoy.dll b/vjoy/Debug/VJoy.dll
new file mode 100755
index 0000000..a383fd7
--- /dev/null
+++ b/vjoy/Debug/VJoy.dll
Binary files differ
diff --git a/vjoy/Debug/VJoy.exe b/vjoy/Debug/VJoy.exe
new file mode 100755
index 0000000..52b39a4
--- /dev/null
+++ b/vjoy/Debug/VJoy.exe
Binary files differ
diff --git a/vjoy/Debug/VJoy.ilk b/vjoy/Debug/VJoy.ilk
new file mode 100755
index 0000000..cd8ac3e
--- /dev/null
+++ b/vjoy/Debug/VJoy.ilk
Binary files differ
diff --git a/vjoy/Debug/VJoy.pch b/vjoy/Debug/VJoy.pch
new file mode 100755
index 0000000..5d895a7
--- /dev/null
+++ b/vjoy/Debug/VJoy.pch
Binary files differ
diff --git a/vjoy/Debug/VJoy.pdb b/vjoy/Debug/VJoy.pdb
new file mode 100755
index 0000000..a14a32e
--- /dev/null
+++ b/vjoy/Debug/VJoy.pdb
Binary files differ
diff --git a/vjoy/Debug/vc60.idb b/vjoy/Debug/vc60.idb
new file mode 100755
index 0000000..5b1403d
--- /dev/null
+++ b/vjoy/Debug/vc60.idb
Binary files differ
diff --git a/vjoy/Debug/vc60.pdb b/vjoy/Debug/vc60.pdb
new file mode 100755
index 0000000..4e0fc8a
--- /dev/null
+++ b/vjoy/Debug/vc60.pdb
Binary files differ
diff --git a/vjoy/ReadMe.txt b/vjoy/ReadMe.txt
new file mode 100755
index 0000000..b91bb56
--- /dev/null
+++ b/vjoy/ReadMe.txt
@@ -0,0 +1,34 @@
+========================================================================
+ CONSOLE APPLICATION : VJoy
+========================================================================
+
+
+AppWizard has created this VJoy application for you.
+
+This file contains a summary of what you will find in each of the files that
+make up your VJoy application.
+
+VJoy.dsp
+ This file (the project file) contains information at the project level and
+ is used to build a single project or subproject. Other users can share the
+ project (.dsp) file, but they should export the makefiles locally.
+
+VJoy.cpp
+ This is the main application source file.
+
+
+/////////////////////////////////////////////////////////////////////////////
+Other standard files:
+
+StdAfx.h, StdAfx.cpp
+ These files are used to build a precompiled header (PCH) file
+ named VJoy.pch and a precompiled types file named StdAfx.obj.
+
+
+/////////////////////////////////////////////////////////////////////////////
+Other notes:
+
+AppWizard uses "TODO:" to indicate parts of the source code you
+should add to or customize.
+
+/////////////////////////////////////////////////////////////////////////////
diff --git a/vjoy/StdAfx.cpp b/vjoy/StdAfx.cpp
new file mode 100755
index 0000000..ccd2455
--- /dev/null
+++ b/vjoy/StdAfx.cpp
@@ -0,0 +1,8 @@
+// stdafx.cpp : source file that includes just the standard includes
+// VJoy.pch will be the pre-compiled header
+// stdafx.obj will contain the pre-compiled type information
+
+#include "stdafx.h"
+
+// TODO: reference any additional headers you need in STDAFX.H
+// and not in this file
diff --git a/vjoy/StdAfx.h b/vjoy/StdAfx.h
new file mode 100755
index 0000000..1f9af59
--- /dev/null
+++ b/vjoy/StdAfx.h
@@ -0,0 +1,19 @@
+// stdafx.h : include file for standard system include files,
+// or project specific include files that are used frequently, but
+// are changed infrequently
+//
+
+#if !defined(AFX_STDAFX_H__B4543DD5_284F_4EB2_A6B0_8757CF067C24__INCLUDED_)
+#define AFX_STDAFX_H__B4543DD5_284F_4EB2_A6B0_8757CF067C24__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+
+// TODO: reference additional headers your program requires here
+
+//{{AFX_INSERT_LOCATION}}
+// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
+
+#endif // !defined(AFX_STDAFX_H__B4543DD5_284F_4EB2_A6B0_8757CF067C24__INCLUDED_)
diff --git a/vjoy/VJoy.cpp b/vjoy/VJoy.cpp
new file mode 100755
index 0000000..42c2ae9
--- /dev/null
+++ b/vjoy/VJoy.cpp
@@ -0,0 +1,25 @@
+// VJoy.cpp : Defines the entry point for the console application.
+//
+
+#include "stdafx.h"
+#include "windows.h"
+#include "VJoy.h"
+
+JOYSTICK_STATE m_joyState[2] = { 0 };
+
+int main(int argc, char* argv[])
+{
+ VJoy_Initialize("", "");
+
+ m_joyState[0].XAxis = 32767;
+ m_joyState[0].YAxis = 32767;
+ m_joyState[0].ZAxis = 32767;
+ m_joyState[0].Buttons = 0xAAAAAAAA;
+ m_joyState[0].POV = (4 << 12) | (4 << 8) | (4 << 4) | 4;
+
+ VJoy_UpdateJoyState(0, &m_joyState[0]);
+
+ VJoy_Shutdown();
+
+ return 0;
+}
diff --git a/vjoy/VJoy.dll b/vjoy/VJoy.dll
new file mode 100755
index 0000000..e344667
--- /dev/null
+++ b/vjoy/VJoy.dll
Binary files differ
diff --git a/vjoy/VJoy.dsp b/vjoy/VJoy.dsp
new file mode 100755
index 0000000..49eef32
--- /dev/null
+++ b/vjoy/VJoy.dsp
@@ -0,0 +1,121 @@
+# Microsoft Developer Studio Project File - Name="VJoy" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=VJoy - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "VJoy.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "VJoy.mak" CFG="VJoy - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "VJoy - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "VJoy - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "VJoy - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Yu"stdafx.h" /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Yu"stdafx.h" /FD /c
+# ADD BASE RSC /l 0xc09 /d "NDEBUG"
+# ADD RSC /l 0xc09 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+
+!ELSEIF "$(CFG)" == "VJoy - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Yu"stdafx.h" /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Yu"stdafx.h" /FD /GZ /c
+# ADD BASE RSC /l 0xc09 /d "_DEBUG"
+# ADD RSC /l 0xc09 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+
+!ENDIF
+
+# Begin Target
+
+# Name "VJoy - Win32 Release"
+# Name "VJoy - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\VJoy.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\StdAfx.cpp
+# ADD CPP /Yc"stdafx.h"
+# End Source File
+# Begin Source File
+
+SOURCE=.\VJoy.lib
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=.\VJoy.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\StdAfx.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# Begin Source File
+
+SOURCE=.\ReadMe.txt
+# End Source File
+# End Target
+# End Project
diff --git a/vjoy/VJoy.dsw b/vjoy/VJoy.dsw
new file mode 100755
index 0000000..555be9b
--- /dev/null
+++ b/vjoy/VJoy.dsw
@@ -0,0 +1,29 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "VJoy"=".\VJoy.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/vjoy/VJoy.h b/vjoy/VJoy.h
new file mode 100755
index 0000000..b3145fc
--- /dev/null
+++ b/vjoy/VJoy.h
@@ -0,0 +1,39 @@
+// VJoy.h header file.
+#ifdef VJOY_EXPORTS
+#define VJOY_API __declspec(dllexport)
+#else
+#define VJOY_API __declspec(dllimport)
+#endif
+
+#define VJOY_AXIS_MIN -32768
+#define VJOY_AXIS_NIL 0
+#define VJOY_AXIS_MAX 32767
+
+#define POV_UP 0
+#define POV_RIGHT 1
+#define POV_DOWN 2
+#define POV_LEFT 3
+#define POV_NIL 4
+
+#include <pshpack1.h>
+
+typedef struct _JOYSTICK_STATE
+{
+ UCHAR ReportId; // Report Id
+ SHORT XAxis; // X Axis
+ SHORT YAxis; // Y Axis
+ SHORT ZAxis; // Z Axis
+ SHORT XRotation; // X Rotation
+ SHORT YRotation; // Y Rotation
+ SHORT ZRotation; // Z Rotation
+ SHORT Slider; // Slider
+ SHORT Dial; // Dial
+ USHORT POV; // POV
+ UINT32 Buttons; // 32 Buttons
+} JOYSTICK_STATE, * PJOYSTICK_STATE;
+
+#include <poppack.h>
+
+VJOY_API BOOL __stdcall VJoy_Initialize(PCHAR name, PCHAR serial);
+VJOY_API VOID __stdcall VJoy_Shutdown();
+VJOY_API BOOL __stdcall VJoy_UpdateJoyState(int id, PJOYSTICK_STATE pJoyState);
diff --git a/vjoy/VJoy.lib b/vjoy/VJoy.lib
new file mode 100755
index 0000000..9229546
--- /dev/null
+++ b/vjoy/VJoy.lib
Binary files differ
diff --git a/vjoy/VJoy.ncb b/vjoy/VJoy.ncb
new file mode 100755
index 0000000..10acc5b
--- /dev/null
+++ b/vjoy/VJoy.ncb
Binary files differ
diff --git a/vjoy/VJoy.opt b/vjoy/VJoy.opt
new file mode 100755
index 0000000..545a537
--- /dev/null
+++ b/vjoy/VJoy.opt
Binary files differ
diff --git a/vjoy/VJoy.plg b/vjoy/VJoy.plg
new file mode 100755
index 0000000..6556074
--- /dev/null
+++ b/vjoy/VJoy.plg
@@ -0,0 +1,46 @@
+<html>
+<body>
+<pre>
+<h1>Build Log</h1>
+<h3>
+--------------------Configuration: VJoy - Win32 Debug--------------------
+</h3>
+<h3>Command Lines</h3>
+Creating temporary file "C:\DOCUME~1\Headsoft\LOCALS~1\Temp\RSP2C71.tmp" with contents
+[
+/nologo /MLd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Fp"Debug/VJoy.pch" /Yu"stdafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c
+"C:\Documents and Settings\Headsoft\My Documents\Visual Studio Projects\VJoy SDK\C++\VJoy.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\Headsoft\LOCALS~1\Temp\RSP2C71.tmp"
+Creating temporary file "C:\DOCUME~1\Headsoft\LOCALS~1\Temp\RSP2C72.tmp" with contents
+[
+/nologo /MLd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Fp"Debug/VJoy.pch" /Yc"stdafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c
+"C:\Documents and Settings\Headsoft\My Documents\Visual Studio Projects\VJoy SDK\C++\StdAfx.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\Headsoft\LOCALS~1\Temp\RSP2C72.tmp"
+Creating temporary file "C:\DOCUME~1\Headsoft\LOCALS~1\Temp\RSP2C73.tmp" with contents
+[
+kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:yes /pdb:"Debug/VJoy.pdb" /debug /machine:I386 /out:"Debug/VJoy.exe" /pdbtype:sept
+".\Debug\VJoy.obj"
+".\Debug\StdAfx.obj"
+".\VJoy.lib"
+]
+Creating command line "link.exe @C:\DOCUME~1\Headsoft\LOCALS~1\Temp\RSP2C73.tmp"
+<h3>Output Window</h3>
+Compiling...
+StdAfx.cpp
+Compiling...
+VJoy.cpp
+c:\winddk\6001.18002\inc\api\winnt.h(3607) : warning C4035: 'ReadPMC' : no return value
+c:\winddk\6001.18002\inc\api\winnt.h(3637) : warning C4035: 'ReadTimeStampCounter' : no return value
+c:\winddk\6001.18002\inc\api\wingdi.h(4340) : warning C4068: unknown pragma
+c:\winddk\6001.18002\inc\api\wingdi.h(4341) : warning C4068: unknown pragma
+Linking...
+
+
+
+<h3>Results</h3>
+VJoy.exe - 0 error(s), 4 warning(s)
+</pre>
+</body>
+</html>