Tue Nov 11 16:05:29 2008 UTC ()
Initial import of MesaGLUT, version 7.0.3 for native X.Org's benefit.
Status:
Vendor Tag: xorg
Release Tags: MesaGLUT-7-0-3
(cube)
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/include/GL/glutf90.h
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/include/GL/glut.h
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/Makefile
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/Makefile.cygnus
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/Makefile.mgw
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/win32_winproc.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/Makefile.sgi
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/Makefile.win
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/depend
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/glut.pc.in
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/fxglut.def
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/glut.def
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/descrip.mms
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/mms_depend
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/capturexfont.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/glut_8x13.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/glut_9x15.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/glut_bitmap.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/glutbitmap.h
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/glut_bwidth.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/layerutil.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/glut_cindex.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/glut_cmap.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/glut_dstr.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/glut_cursor.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/glut_dials.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/glut_event.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/glut_ext.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/glut_fcb.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/glut_fullscrn.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/glut_gamemode.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/glut_get.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/glut_glxext.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/glut_hel10.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/glut_hel12.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/glut_hel18.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/glut_init.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/glut_input.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/glutint.h
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/glut_joy.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/glut_key.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/glut_keyctrl.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/glut_keyup.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/glut_menu.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/glut_menu2.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/glut_mesa.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/glut_swap.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/glut_modifier.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/glut_mroman.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/glut_overlay.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/glut_roman.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/glut_shapes.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/glut_space.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/glut_stroke.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/glutstroke.h
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/glut_swidth.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/glut_tablet.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/glut_teapot.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/glut_tr10.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/glut_tr24.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/glut_util.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/glut_vidresize.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/glut_warp.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/glutwin32.h
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/glut_win.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/glut_winmisc.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/layerutil.h
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/stroke.h
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/win32_glx.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/win32_glx.h
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/win32_menu.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/win32_util.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/win32_x11.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/glx/win32_x11.h
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/beos/glut_bitmap.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/beos/beos_x11.h
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/beos/glut_8x13.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/beos/glut_9x15.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/beos/glutBlocker.h
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/beos/glutbitmap.h
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/beos/glut_bwidth.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/beos/glutCursors.h
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/beos/glut_ext.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/beos/glut_hel10.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/beos/glut_hel12.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/beos/glut_hel18.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/beos/glutint.h
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/beos/glutMenu.h
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/beos/glut_mroman.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/beos/glut_roman.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/beos/glut_shapes.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/beos/glutState.h
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/beos/glut_stroke.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/beos/glutstroke.h
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/beos/glut_swidth.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/beos/glut_teapot.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/beos/glut_tr10.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/beos/glut_tr24.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/beos/glut_util.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/beos/glut_vidresize.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/beos/glutWindow.h
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/beos/beos_x11.cpp
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/beos/glutBlocker.cpp
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/beos/glutCallback.cpp
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/beos/glutColor.cpp
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/beos/glutCursor.cpp
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/beos/glutDstr.cpp
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/beos/glutEvent.cpp
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/beos/glutGet.cpp
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/beos/glutInit.cpp
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/beos/glutMenu.cpp
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/beos/glutOverlay.cpp
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/beos/glutWindow.cpp
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/beos/Makefile
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/dos/callback.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/dos/bitmap.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/dos/internal.h
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/dos/color.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/dos/extens.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/dos/f8x13.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/dos/f9x15.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/dos/hel10.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/dos/hel12.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/dos/hel18.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/dos/init.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/dos/overlay.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/dos/loop.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/dos/menu.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/dos/mouse.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/dos/mroman.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/dos/roman.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/dos/shapes.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/dos/state.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/dos/stroke.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/dos/teapot.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/dos/tr10.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/dos/tr24.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/dos/util.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/dos/window.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/dos/Makefile.DJ
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/dos/PC_HW/pc_keyb.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/dos/PC_HW/pc_hw.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/dos/PC_HW/pc_hw.h
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/dos/PC_HW/pc_irq.S
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/dos/PC_HW/pc_mouse.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/dos/PC_HW/pc_timer.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/ggi/ggiglut.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/ggi/debug.h
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/ggi/Makefile
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/fbdev/callback.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/fbdev/Makefile
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/fbdev/bitmap.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/fbdev/colormap.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/fbdev/cursor.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/fbdev/cursors.h
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/fbdev/ext.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/fbdev/fbdev.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/fbdev/gamemode.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/fbdev/input.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/fbdev/internal.h
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/fbdev/menu.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/fbdev/overlay.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/fbdev/state.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/fbdev/stroke.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/fbdev/vidresize.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/mini/callback.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/mini/bitmap.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/mini/globals.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/mini/color.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/mini/internal.h
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/mini/init.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/mini/overlay.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/mini/menu.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/mini/models.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/mini/glut.pc.in
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/mini/state.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/mini/teapot.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/mini/window.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/directfb/callback.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/directfb/Makefile
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/directfb/NOTES
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/directfb/cursors.h
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/directfb/color.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/directfb/cursor.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/directfb/globals.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/directfb/events.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/directfb/ext.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/directfb/font.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/directfb/font.h
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/directfb/game.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/directfb/internal.h
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/directfb/init.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/directfb/overlay.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/directfb/menu.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/directfb/models.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/directfb/state.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/directfb/teapot.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/src/glut/directfb/window.c
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/windows/VC6/progs/glut/glut.dsp
diff -r0 -r1.1.1.1 xsrc/external/mit/MesaGLUT/dist/windows/VC7/progs/glut/glut.vcproj
#ifndef __glutf90_h__
#define __glutf90_h__
/* Copyright (c) Mark J. Kilgard & Willam F. Mitchell, 1998. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
/* This header provides the binding interface for William Mitchell's
f90gl Fortran 90 GLUT binding. Other GLUT language bindings
can and should use this interace. */
/* I appreciate the guidance from William Mitchell
(mitchell@cam.nist.gov) in developing this friend interface
for use by the f90gl package. See ../../README.fortran */
#include <GL/glut.h>
/* Which callback enumerants for the __glutSetFCB/__glutGetFCB routines. */
/* NOTE These values are part of a binary interface for the f90gl Fortran
90 binding and so must NOT changes (additions are allowed). */
/* GLUTwindow callbacks. */
#define GLUT_FCB_DISPLAY 0 /* GLUTdisplayFCB */
#define GLUT_FCB_RESHAPE 1 /* GLUTreshapeFCB */
#define GLUT_FCB_MOUSE 2 /* GLUTmouseFCB */
#define GLUT_FCB_MOTION 3 /* GLUTmotionFCB */
#define GLUT_FCB_PASSIVE 4 /* GLUTpassiveFCB */
#define GLUT_FCB_ENTRY 5 /* GLUTentryFCB */
#define GLUT_FCB_KEYBOARD 6 /* GLUTkeyboardFCB */
#define GLUT_FCB_KEYBOARD_UP 7 /* GLUTkeyboardFCB */
#define GLUT_FCB_WINDOW_STATUS 8 /* GLUTwindowStatusFCB */
#define GLUT_FCB_VISIBILITY 9 /* GLUTvisibilityFCB */
#define GLUT_FCB_SPECIAL 10 /* GLUTspecialFCB */
#define GLUT_FCB_SPECIAL_UP 11 /* GLUTspecialFCB */
#define GLUT_FCB_BUTTON_BOX 12 /* GLUTbuttonBoxFCB */
#define GLUT_FCB_DIALS 13 /* GLUTdialsFCB */
#define GLUT_FCB_SPACE_MOTION 14 /* GLUTspaceMotionFCB */
#define GLUT_FCB_SPACE_ROTATE 15 /* GLUTspaceRotateFCB */
#define GLUT_FCB_SPACE_BUTTON 16 /* GLUTspaceButtonFCB */
#define GLUT_FCB_TABLET_MOTION 17 /* GLUTtabletMotionFCB */
#define GLUT_FCB_TABLET_BUTTON 18 /* GLUTtabletButtonFCB */
#define GLUT_FCB_JOYSTICK 19 /* GLUTjoystickFCB */
/* Non-GLUTwindow callbacks. */
#define GLUT_FCB_OVERLAY_DISPLAY 100 /* GLUTdisplayFCB */
#define GLUT_FCB_SELECT 101 /* GLUTselectFCB */
#define GLUT_FCB_TIMER 102 /* GLUTtimerFCB */
/* GLUT Fortran callback function types. */
typedef void (GLUTCALLBACK *GLUTdisplayFCB) (void);
typedef void (GLUTCALLBACK *GLUTreshapeFCB) (int *, int *);
/* NOTE the pressed key is int, not unsigned char for Fortran! */
typedef void (GLUTCALLBACK *GLUTkeyboardFCB) (int *, int *, int *);
typedef void (GLUTCALLBACK *GLUTmouseFCB) (int *, int *, int *, int *);
typedef void (GLUTCALLBACK *GLUTmotionFCB) (int *, int *);
typedef void (GLUTCALLBACK *GLUTpassiveFCB) (int *, int *);
typedef void (GLUTCALLBACK *GLUTentryFCB) (int *);
typedef void (GLUTCALLBACK *GLUTwindowStatusFCB) (int *);
typedef void (GLUTCALLBACK *GLUTvisibilityFCB) (int *);
typedef void (GLUTCALLBACK *GLUTspecialFCB) (int *, int *, int *);
typedef void (GLUTCALLBACK *GLUTbuttonBoxFCB) (int *, int *);
typedef void (GLUTCALLBACK *GLUTdialsFCB) (int *, int *);
typedef void (GLUTCALLBACK *GLUTspaceMotionFCB) (int *, int *, int *);
typedef void (GLUTCALLBACK *GLUTspaceRotateFCB) (int *, int *, int *);
typedef void (GLUTCALLBACK *GLUTspaceButtonFCB) (int *, int *);
typedef void (GLUTCALLBACK *GLUTtabletMotionFCB) (int *, int *);
typedef void (GLUTCALLBACK *GLUTtabletButtonFCB) (int *, int *, int *, int *);
typedef void (GLUTCALLBACK *GLUTjoystickFCB) (unsigned int *buttonMask, int *x, int *y, int *z);
typedef void (GLUTCALLBACK *GLUTselectFCB) (int *);
typedef void (GLUTCALLBACK *GLUTtimerFCB) (int *);
typedef void (GLUTCALLBACK *GLUTmenuStateFCB) (int *); /* DEPRICATED. */
typedef void (GLUTCALLBACK *GLUTmenuStatusFCB) (int *, int *, int *);
typedef void (GLUTCALLBACK *GLUTidleFCB) (void);
/* Functions that set and return Fortran callback functions. */
GLUTAPI GLUTproc APIENTRY __glutGetFCB(int which);
GLUTAPI void APIENTRY __glutSetFCB(int which, GLUTproc func);
#endif /* __glutf90_h__ */
#ifndef __glut_h__
#define __glut_h__
/* Copyright (c) Mark J. Kilgard, 1994, 1995, 1996, 1998. */
/* This program is freely distributable without licensing fees and is
provided without guarantee or warrantee expressed or implied. This
program is -not- in the public domain. */
#include <GL/gl.h>
#include <GL/glu.h>
#if defined(__MINGW32__)
#include <GL/mesa_wgl.h>
#endif
#ifdef __cplusplus
extern "C" {
#endif
#if defined(_WIN32)
/* GLUT 3.7 now tries to avoid including <windows.h>
to avoid name space pollution, but Win32's <GL/gl.h>
needs APIENTRY and WINGDIAPI defined properly.
tjump@spgs.com contributes:
If users are building glut code on MS Windows, then they should
make sure they include windows.h early, let's not get into a
header definitions war since MS has proven it's capability to
change header dependencies w/o publishing they have done so.
So, let's not include windows.h here, as it's not really required and
MS own gl/gl.h *should* include it if the dependency is there. */
/* To disable automatic library usage for GLUT, define GLUT_NO_LIB_PRAGMA
in your compile preprocessor options. */
# if !defined(GLUT_BUILDING_LIB) && !defined(GLUT_NO_LIB_PRAGMA)
# pragma comment (lib, "winmm.lib") /* link with Windows MultiMedia lib */
/* To enable automatic SGI OpenGL for Windows library usage for GLUT,
define GLUT_USE_SGI_OPENGL in your compile preprocessor options. */
# ifdef GLUT_USE_SGI_OPENGL
# pragma comment (lib, "opengl.lib") /* link with SGI OpenGL for Windows lib */
# pragma comment (lib, "glu.lib") /* link with SGI OpenGL Utility lib */
# pragma comment (lib, "glut.lib") /* link with Win32 GLUT for SGI OpenGL lib */
# else
# pragma comment (lib, "opengl32.lib") /* link with Microsoft OpenGL lib */
# pragma comment (lib, "glu32.lib") /* link with Microsoft OpenGL Utility lib */
# pragma comment (lib, "glut32.lib") /* link with Win32 GLUT lib */
# endif
# endif
/* To disable supression of annoying warnings about floats being promoted
to doubles, define GLUT_NO_WARNING_DISABLE in your compile preprocessor
options. */
# ifndef GLUT_NO_WARNING_DISABLE
# pragma warning (disable:4244) /* Disable bogus VC++ 4.2 conversion warnings. */
# pragma warning (disable:4305) /* VC++ 5.0 version of above warning. */
# endif
/* 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. */
/* XXX This is from Win32's <process.h> */
# if !defined(_MSC_VER) && !defined(__MINGW32__) && !defined(__cdecl)
/* Define __cdecl for non-Microsoft compilers. */
# define __cdecl
# define GLUT_DEFINED___CDECL
# endif
# ifndef _CRTIMP
# ifdef _NTSDK
/* Definition compatible with NT SDK */
# define _CRTIMP
# else
/* Current definition */
# ifdef _DLL
# define _CRTIMP __declspec(dllimport)
# else
# define _CRTIMP
# endif
# endif
# define GLUT_DEFINED__CRTIMP
# endif
# ifndef GLUT_BUILDING_LIB
extern _CRTIMP void __cdecl exit(int);
# endif
/* GLUT callback calling convention for Win32. */
# define GLUTCALLBACK __cdecl
/* for callback/function pointer defs */
# define GLUTAPIENTRYV __cdecl
/* glut-win32 specific macros, defined to prevent collision with
and redifinition of Windows system defs, also removes requirement of
pretty much any standard windows header from this file */
#if (_MSC_VER >= 800) || defined(__MINGW32__) || defined(_STDCALL_SUPPORTED) || defined(__CYGWIN32__)
# define GLUTAPIENTRY __stdcall
#else
# define GLUTAPIENTRY
#endif
/* GLUT API entry point declarations for Win32. */
#if (defined(BUILD_GLUT32) || defined(GLUT_BUILDING_LIB)) && defined(_DLL)
# define GLUTAPI __declspec(dllexport)
#elif defined(_DLL)
# define GLUTAPI __declspec(dllimport)
#else
# define GLUTAPI extern
#endif
#if defined(_WIN32) && !defined(_WINDEF_) && !defined(MESA)
# if !defined(MESA_MINWARN)
# pragma message( "note: WINDOWS.H not included, providing Mesa definition of CALLBACK macro" )
# pragma message( "----: and PROC typedef. If you receive compiler warnings about either ")
# pragma message( "----: being multiply defined you should include WINDOWS.H priot to gl/glut.h" )
# endif
# define CALLBACK __stdcall
#if !defined(__MINGW32__)
typedef int (GLUTAPIENTRY *PROC)();
typedef void *HGLRC;
typedef void *HDC;
#endif
typedef unsigned long COLORREF;
#endif
#if defined(_WIN32) && !defined(_WINGDI_) && !defined(MESA)
# if !defined(MESA_MINWARN)
# pragma message( "note: WINDOWS.H not included, providing Mesa definition of wgl functions" )
# pragma message( "----: and macros. If you receive compiler warnings about any being multiply ")
# pragma message( "----: defined you should include WINDOWS.H priot to gl/glut.h" )
# endif
# define WGL_FONT_LINES 0
# define WGL_FONT_POLYGONS 1
# ifdef UNICODE
# define wglUseFontBitmaps wglUseFontBitmapsW
# define wglUseFontOutlines wglUseFontOutlinesW
# else
# define wglUseFontBitmaps wglUseFontBitmapsA
# define wglUseFontOutlines wglUseFontOutlinesA
# endif /* !UNICODE */
typedef struct tagLAYERPLANEDESCRIPTOR LAYERPLANEDESCRIPTOR, *PLAYERPLANEDESCRIPTOR, *LPLAYERPLANEDESCRIPTOR;
typedef struct _GLYPHMETRICSFLOAT GLYPHMETRICSFLOAT, *PGLYPHMETRICSFLOAT, *LPGLYPHMETRICSFLOAT;
# pragma warning( push )
# pragma warning( disable : 4273 ) /* 'function' : inconsistent DLL linkage. dllexport assumed. */
# define WGLAPI __declspec(dllimport)
WGLAPI int GLAPIENTRY wglDeleteContext(HGLRC);
WGLAPI int GLAPIENTRY wglMakeCurrent(HDC,HGLRC);
WGLAPI int GLAPIENTRY wglSetPixelFormat(HDC, int, const PIXELFORMATDESCRIPTOR *);
WGLAPI int GLAPIENTRY wglSwapBuffers(HDC hdc);
WGLAPI HDC GLAPIENTRY wglGetCurrentDC(void);
WGLAPI HGLRC GLAPIENTRY wglCreateContext(HDC);
WGLAPI HGLRC GLAPIENTRY wglCreateLayerContext(HDC,int);
WGLAPI HGLRC GLAPIENTRY wglGetCurrentContext(void);
WGLAPI PROC GLAPIENTRY wglGetProcAddress(const char*);
WGLAPI int GLAPIENTRY wglChoosePixelFormat(HDC, const PIXELFORMATDESCRIPTOR *);
WGLAPI int GLAPIENTRY wglCopyContext(HGLRC, HGLRC, unsigned int);
WGLAPI int GLAPIENTRY wglDeleteContext(HGLRC);
WGLAPI int GLAPIENTRY wglDescribeLayerPlane(HDC, int, int, unsigned int,LPLAYERPLANEDESCRIPTOR);
WGLAPI int GLAPIENTRY wglDescribePixelFormat(HDC,int, unsigned int, LPPIXELFORMATDESCRIPTOR);
WGLAPI int GLAPIENTRY wglGetLayerPaletteEntries(HDC, int, int, int,COLORREF *);
WGLAPI int GLAPIENTRY wglGetPixelFormat(HDC hdc);
WGLAPI int GLAPIENTRY wglMakeCurrent(HDC, HGLRC);
WGLAPI int GLAPIENTRY wglRealizeLayerPalette(HDC, int, int);
WGLAPI int GLAPIENTRY wglSetLayerPaletteEntries(HDC, int, int, int,const COLORREF *);
WGLAPI int GLAPIENTRY wglShareLists(HGLRC, HGLRC);
WGLAPI int GLAPIENTRY wglSwapLayerBuffers(HDC, unsigned int);
WGLAPI int GLAPIENTRY wglUseFontBitmapsA(HDC, unsigned long, unsigned long, unsigned long);
WGLAPI int GLAPIENTRY wglUseFontBitmapsW(HDC, unsigned long, unsigned long, unsigned long);
WGLAPI int GLAPIENTRY wglUseFontOutlinesA(HDC, unsigned long, unsigned long, unsigned long, float,float, int, LPGLYPHMETRICSFLOAT);
WGLAPI int GLAPIENTRY wglUseFontOutlinesW(HDC, unsigned long, unsigned long, unsigned long, float,float, int, LPGLYPHMETRICSFLOAT);
WGLAPI int GLAPIENTRY SwapBuffers(HDC);
WGLAPI int GLAPIENTRY ChoosePixelFormat(HDC,const PIXELFORMATDESCRIPTOR *);
WGLAPI int GLAPIENTRY DescribePixelFormat(HDC,int,unsigned int,LPPIXELFORMATDESCRIPTOR);
WGLAPI int GLAPIENTRY GetPixelFormat(HDC);
WGLAPI int GLAPIENTRY SetPixelFormat(HDC,int,const PIXELFORMATDESCRIPTOR *);
# undef WGLAPI
# pragma warning( pop )
#endif
#else /* _WIN32 not defined */
/* Define GLUTAPIENTRY and GLUTCALLBACK to nothing if we aren't on Win32. */
# define GLUTAPIENTRY GLAPIENTRY
# define GLUTAPIENTRYV
# define GLUTCALLBACK
# define GLUTAPI extern
#endif
/**
GLUT API revision history:
GLUT_API_VERSION is updated to reflect incompatible GLUT
API changes (interface changes, semantic changes, deletions,
or additions).
GLUT_API_VERSION=1 First public release of GLUT. 11/29/94
GLUT_API_VERSION=2 Added support for OpenGL/GLX multisampling,
extension. Supports new input devices like tablet, dial and button
box, and Spaceball. Easy to query OpenGL extensions.
GLUT_API_VERSION=3 glutMenuStatus added.
GLUT_API_VERSION=4 glutInitDisplayString, glutWarpPointer,
glutBitmapLength, glutStrokeLength, glutWindowStatusFunc, dynamic
video resize subAPI, glutPostWindowRedisplay, glutKeyboardUpFunc,
glutSpecialUpFunc, glutIgnoreKeyRepeat, glutSetKeyRepeat,
glutJoystickFunc, glutForceJoystickFunc (NOT FINALIZED!).
GLUT_API_VERSION=5 glutGetProcAddress (added by BrianP)
**/
#ifndef GLUT_API_VERSION /* allow this to be overriden */
#define GLUT_API_VERSION 5
#endif
/**
GLUT implementation revision history:
GLUT_XLIB_IMPLEMENTATION is updated to reflect both GLUT
API revisions and implementation revisions (ie, bug fixes).
GLUT_XLIB_IMPLEMENTATION=1 mjk's first public release of
GLUT Xlib-based implementation. 11/29/94
GLUT_XLIB_IMPLEMENTATION=2 mjk's second public release of
GLUT Xlib-based implementation providing GLUT version 2
interfaces.
GLUT_XLIB_IMPLEMENTATION=3 mjk's GLUT 2.2 images. 4/17/95
GLUT_XLIB_IMPLEMENTATION=4 mjk's GLUT 2.3 images. 6/?/95
GLUT_XLIB_IMPLEMENTATION=5 mjk's GLUT 3.0 images. 10/?/95
GLUT_XLIB_IMPLEMENTATION=7 mjk's GLUT 3.1+ with glutWarpPoitner. 7/24/96
GLUT_XLIB_IMPLEMENTATION=8 mjk's GLUT 3.1+ with glutWarpPoitner
and video resize. 1/3/97
GLUT_XLIB_IMPLEMENTATION=9 mjk's GLUT 3.4 release with early GLUT 4 routines.
GLUT_XLIB_IMPLEMENTATION=11 Mesa 2.5's GLUT 3.6 release.
GLUT_XLIB_IMPLEMENTATION=12 mjk's GLUT 3.6 release with early GLUT 4 routines + signal handling.
GLUT_XLIB_IMPLEMENTATION=13 mjk's GLUT 3.7 beta with GameGLUT support.
GLUT_XLIB_IMPLEMENTATION=14 mjk's GLUT 3.7 beta with f90gl friend interface.
GLUT_XLIB_IMPLEMENTATION=15 mjk's GLUT 3.7 beta sync'ed with Mesa <GL/glut.h>
**/
#ifndef GLUT_XLIB_IMPLEMENTATION /* Allow this to be overriden. */
#define GLUT_XLIB_IMPLEMENTATION 15
#endif
/* Display mode bit masks. */
#define GLUT_RGB 0
#define GLUT_RGBA GLUT_RGB
#define GLUT_INDEX 1
#define GLUT_SINGLE 0
#define GLUT_DOUBLE 2
#define GLUT_ACCUM 4
#define GLUT_ALPHA 8
#define GLUT_DEPTH 16
#define GLUT_STENCIL 32
#if (GLUT_API_VERSION >= 2)
#define GLUT_MULTISAMPLE 128
#define GLUT_STEREO 256
#endif
#if (GLUT_API_VERSION >= 3)
#define GLUT_LUMINANCE 512
#endif
/* Mouse buttons. */
#define GLUT_LEFT_BUTTON 0
#define GLUT_MIDDLE_BUTTON 1
#define GLUT_RIGHT_BUTTON 2
/* Mouse button state. */
#define GLUT_DOWN 0
#define GLUT_UP 1
#if (GLUT_API_VERSION >= 2)
/* function keys */
#define GLUT_KEY_F1 1
#define GLUT_KEY_F2 2
#define GLUT_KEY_F3 3
#define GLUT_KEY_F4 4
#define GLUT_KEY_F5 5
#define GLUT_KEY_F6 6
#define GLUT_KEY_F7 7
#define GLUT_KEY_F8 8
#define GLUT_KEY_F9 9
#define GLUT_KEY_F10 10
#define GLUT_KEY_F11 11
#define GLUT_KEY_F12 12
/* directional keys */
#define GLUT_KEY_LEFT 100
#define GLUT_KEY_UP 101
#define GLUT_KEY_RIGHT 102
#define GLUT_KEY_DOWN 103
#define GLUT_KEY_PAGE_UP 104
#define GLUT_KEY_PAGE_DOWN 105
#define GLUT_KEY_HOME 106
#define GLUT_KEY_END 107
#define GLUT_KEY_INSERT 108
#endif
/* Entry/exit state. */
#define GLUT_LEFT 0
#define GLUT_ENTERED 1
/* Menu usage state. */
#define GLUT_MENU_NOT_IN_USE 0
#define GLUT_MENU_IN_USE 1
/* Visibility state. */
#define GLUT_NOT_VISIBLE 0
#define GLUT_VISIBLE 1
/* Window status state. */
#define GLUT_HIDDEN 0
#define GLUT_FULLY_RETAINED 1
#define GLUT_PARTIALLY_RETAINED 2
#define GLUT_FULLY_COVERED 3
/* Color index component selection values. */
#define GLUT_RED 0
#define GLUT_GREEN 1
#define GLUT_BLUE 2
/* Layers for use. */
#define GLUT_NORMAL 0
#define GLUT_OVERLAY 1
#if defined(_WIN32) || defined (GLUT_IMPORT_LIB)
/* Stroke font constants (use these in GLUT program). */
#define GLUT_STROKE_ROMAN ((void*)0)
#define GLUT_STROKE_MONO_ROMAN ((void*)1)
/* Bitmap font constants (use these in GLUT program). */
#define GLUT_BITMAP_9_BY_15 ((void*)2)
#define GLUT_BITMAP_8_BY_13 ((void*)3)
#define GLUT_BITMAP_TIMES_ROMAN_10 ((void*)4)
#define GLUT_BITMAP_TIMES_ROMAN_24 ((void*)5)
#if (GLUT_API_VERSION >= 3)
#define GLUT_BITMAP_HELVETICA_10 ((void*)6)
#define GLUT_BITMAP_HELVETICA_12 ((void*)7)
#define GLUT_BITMAP_HELVETICA_18 ((void*)8)
#endif
#else
/* Stroke font opaque addresses (use constants instead in source code). */
GLUTAPI void *glutStrokeRoman;
GLUTAPI void *glutStrokeMonoRoman;
/* Stroke font constants (use these in GLUT program). */
#define GLUT_STROKE_ROMAN (&glutStrokeRoman)
#define GLUT_STROKE_MONO_ROMAN (&glutStrokeMonoRoman)
/* Bitmap font opaque addresses (use constants instead in source code). */
GLUTAPI void *glutBitmap9By15;
GLUTAPI void *glutBitmap8By13;
GLUTAPI void *glutBitmapTimesRoman10;
GLUTAPI void *glutBitmapTimesRoman24;
GLUTAPI void *glutBitmapHelvetica10;
GLUTAPI void *glutBitmapHelvetica12;
GLUTAPI void *glutBitmapHelvetica18;
/* Bitmap font constants (use these in GLUT program). */
#define GLUT_BITMAP_9_BY_15 (&glutBitmap9By15)
#define GLUT_BITMAP_8_BY_13 (&glutBitmap8By13)
#define GLUT_BITMAP_TIMES_ROMAN_10 (&glutBitmapTimesRoman10)
#define GLUT_BITMAP_TIMES_ROMAN_24 (&glutBitmapTimesRoman24)
#if (GLUT_API_VERSION >= 3)
#define GLUT_BITMAP_HELVETICA_10 (&glutBitmapHelvetica10)
#define GLUT_BITMAP_HELVETICA_12 (&glutBitmapHelvetica12)
#define GLUT_BITMAP_HELVETICA_18 (&glutBitmapHelvetica18)
#endif
#endif
/* glutGet parameters. */
#define GLUT_WINDOW_X 100
#define GLUT_WINDOW_Y 101
#define GLUT_WINDOW_WIDTH 102
#define GLUT_WINDOW_HEIGHT 103
#define GLUT_WINDOW_BUFFER_SIZE 104
#define GLUT_WINDOW_STENCIL_SIZE 105
#define GLUT_WINDOW_DEPTH_SIZE 106
#define GLUT_WINDOW_RED_SIZE 107
#define GLUT_WINDOW_GREEN_SIZE 108
#define GLUT_WINDOW_BLUE_SIZE 109
#define GLUT_WINDOW_ALPHA_SIZE 110
#define GLUT_WINDOW_ACCUM_RED_SIZE 111
#define GLUT_WINDOW_ACCUM_GREEN_SIZE 112
#define GLUT_WINDOW_ACCUM_BLUE_SIZE 113
#define GLUT_WINDOW_ACCUM_ALPHA_SIZE 114
#define GLUT_WINDOW_DOUBLEBUFFER 115
#define GLUT_WINDOW_RGBA 116
#define GLUT_WINDOW_PARENT 117
#define GLUT_WINDOW_NUM_CHILDREN 118
#define GLUT_WINDOW_COLORMAP_SIZE 119
#if (GLUT_API_VERSION >= 2)
#define GLUT_WINDOW_NUM_SAMPLES 120
#define GLUT_WINDOW_STEREO 121
#endif
#if (GLUT_API_VERSION >= 3)
#define GLUT_WINDOW_CURSOR 122
#endif
#define GLUT_SCREEN_WIDTH 200
#define GLUT_SCREEN_HEIGHT 201
#define GLUT_SCREEN_WIDTH_MM 202
#define GLUT_SCREEN_HEIGHT_MM 203
#define GLUT_MENU_NUM_ITEMS 300
#define GLUT_DISPLAY_MODE_POSSIBLE 400
#define GLUT_INIT_WINDOW_X 500
#define GLUT_INIT_WINDOW_Y 501
#define GLUT_INIT_WINDOW_WIDTH 502
#define GLUT_INIT_WINDOW_HEIGHT 503
#define GLUT_INIT_DISPLAY_MODE 504
#if (GLUT_API_VERSION >= 2)
#define GLUT_ELAPSED_TIME 700
#endif
#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 13)
#define GLUT_WINDOW_FORMAT_ID 123
#endif
#if (GLUT_API_VERSION >= 2)
/* glutDeviceGet parameters. */
#define GLUT_HAS_KEYBOARD 600
#define GLUT_HAS_MOUSE 601
#define GLUT_HAS_SPACEBALL 602
#define GLUT_HAS_DIAL_AND_BUTTON_BOX 603
#define GLUT_HAS_TABLET 604
#define GLUT_NUM_MOUSE_BUTTONS 605
#define GLUT_NUM_SPACEBALL_BUTTONS 606
#define GLUT_NUM_BUTTON_BOX_BUTTONS 607
#define GLUT_NUM_DIALS 608
#define GLUT_NUM_TABLET_BUTTONS 609
#endif
#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 13)
#define GLUT_DEVICE_IGNORE_KEY_REPEAT 610
#define GLUT_DEVICE_KEY_REPEAT 611
#define GLUT_HAS_JOYSTICK 612
#define GLUT_OWNS_JOYSTICK 613
#define GLUT_JOYSTICK_BUTTONS 614
#define GLUT_JOYSTICK_AXES 615
#define GLUT_JOYSTICK_POLL_RATE 616
#endif
#if (GLUT_API_VERSION >= 3)
/* glutLayerGet parameters. */
#define GLUT_OVERLAY_POSSIBLE 800
#define GLUT_LAYER_IN_USE 801
#define GLUT_HAS_OVERLAY 802
#define GLUT_TRANSPARENT_INDEX 803
#define GLUT_NORMAL_DAMAGED 804
#define GLUT_OVERLAY_DAMAGED 805
#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9)
/* glutVideoResizeGet parameters. */
#define GLUT_VIDEO_RESIZE_POSSIBLE 900
#define GLUT_VIDEO_RESIZE_IN_USE 901
#define GLUT_VIDEO_RESIZE_X_DELTA 902
#define GLUT_VIDEO_RESIZE_Y_DELTA 903
#define GLUT_VIDEO_RESIZE_WIDTH_DELTA 904
#define GLUT_VIDEO_RESIZE_HEIGHT_DELTA 905
#define GLUT_VIDEO_RESIZE_X 906
#define GLUT_VIDEO_RESIZE_Y 907
#define GLUT_VIDEO_RESIZE_WIDTH 908
#define GLUT_VIDEO_RESIZE_HEIGHT 909
#endif
/* glutUseLayer parameters. */
#define GLUT_NORMAL 0
#define GLUT_OVERLAY 1
/* glutGetModifiers return mask. */
#define GLUT_ACTIVE_SHIFT 1
#define GLUT_ACTIVE_CTRL 2
#define GLUT_ACTIVE_ALT 4
/* glutSetCursor parameters. */
/* Basic arrows. */
#define GLUT_CURSOR_RIGHT_ARROW 0
#define GLUT_CURSOR_LEFT_ARROW 1
/* Symbolic cursor shapes. */
#define GLUT_CURSOR_INFO 2
#define GLUT_CURSOR_DESTROY 3
#define GLUT_CURSOR_HELP 4
#define GLUT_CURSOR_CYCLE 5
#define GLUT_CURSOR_SPRAY 6
#define GLUT_CURSOR_WAIT 7
#define GLUT_CURSOR_TEXT 8
#define GLUT_CURSOR_CROSSHAIR 9
/* Directional cursors. */
#define GLUT_CURSOR_UP_DOWN 10
#define GLUT_CURSOR_LEFT_RIGHT 11
/* Sizing cursors. */
#define GLUT_CURSOR_TOP_SIDE 12
#define GLUT_CURSOR_BOTTOM_SIDE 13
#define GLUT_CURSOR_LEFT_SIDE 14
#define GLUT_CURSOR_RIGHT_SIDE 15
#define GLUT_CURSOR_TOP_LEFT_CORNER 16
#define GLUT_CURSOR_TOP_RIGHT_CORNER 17
#define GLUT_CURSOR_BOTTOM_RIGHT_CORNER 18
#define GLUT_CURSOR_BOTTOM_LEFT_CORNER 19
/* Inherit from parent window. */
#define GLUT_CURSOR_INHERIT 100
/* Blank cursor. */
#define GLUT_CURSOR_NONE 101
/* Fullscreen crosshair (if available). */
#define GLUT_CURSOR_FULL_CROSSHAIR 102
#endif
/* GLUT initialization sub-API. */
GLUTAPI void GLUTAPIENTRY glutInit(int *argcp, char **argv);
#if defined(_WIN32) && !defined(GLUT_DISABLE_ATEXIT_HACK)
GLUTAPI void GLUTAPIENTRY __glutInitWithExit(int *argcp, char **argv, void (__cdecl *exitfunc)(int));
#ifndef GLUT_BUILDING_LIB
static void GLUTAPIENTRY glutInit_ATEXIT_HACK(int *argcp, char **argv) { __glutInitWithExit(argcp, argv, exit); }
#define glutInit glutInit_ATEXIT_HACK
#endif
#endif
GLUTAPI void GLUTAPIENTRY glutInitDisplayMode(unsigned int mode);
#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9)
GLUTAPI void GLUTAPIENTRY glutInitDisplayString(const char *string);
#endif
GLUTAPI void GLUTAPIENTRY glutInitWindowPosition(int x, int y);
GLUTAPI void GLUTAPIENTRY glutInitWindowSize(int width, int height);
GLUTAPI void GLUTAPIENTRY glutMainLoop(void);
/* GLUT window sub-API. */
GLUTAPI int GLUTAPIENTRY glutCreateWindow(const char *title);
#if defined(_WIN32) && !defined(GLUT_DISABLE_ATEXIT_HACK)
GLUTAPI int GLUTAPIENTRY __glutCreateWindowWithExit(const char *title, void (__cdecl *exitfunc)(int));
#ifndef GLUT_BUILDING_LIB
static int GLUTAPIENTRY glutCreateWindow_ATEXIT_HACK(const char *title) { return __glutCreateWindowWithExit(title, exit); }
#define glutCreateWindow glutCreateWindow_ATEXIT_HACK
#endif
#endif
GLUTAPI int GLUTAPIENTRY glutCreateSubWindow(int win, int x, int y, int width, int height);
GLUTAPI void GLUTAPIENTRY glutDestroyWindow(int win);
GLUTAPI void GLUTAPIENTRY glutPostRedisplay(void);
#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 11)
GLUTAPI void GLUTAPIENTRY glutPostWindowRedisplay(int win);
#endif
GLUTAPI void GLUTAPIENTRY glutSwapBuffers(void);
GLUTAPI int GLUTAPIENTRY glutGetWindow(void);
GLUTAPI void GLUTAPIENTRY glutSetWindow(int win);
GLUTAPI void GLUTAPIENTRY glutSetWindowTitle(const char *title);
GLUTAPI void GLUTAPIENTRY glutSetIconTitle(const char *title);
GLUTAPI void GLUTAPIENTRY glutPositionWindow(int x, int y);
GLUTAPI void GLUTAPIENTRY glutReshapeWindow(int width, int height);
GLUTAPI void GLUTAPIENTRY glutPopWindow(void);
GLUTAPI void GLUTAPIENTRY glutPushWindow(void);
GLUTAPI void GLUTAPIENTRY glutIconifyWindow(void);
GLUTAPI void GLUTAPIENTRY glutShowWindow(void);
GLUTAPI void GLUTAPIENTRY glutHideWindow(void);
#if (GLUT_API_VERSION >= 3)
GLUTAPI void GLUTAPIENTRY glutFullScreen(void);
GLUTAPI void GLUTAPIENTRY glutSetCursor(int cursor);
#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9)
GLUTAPI void GLUTAPIENTRY glutWarpPointer(int x, int y);
#endif
/* GLUT overlay sub-API. */
GLUTAPI void GLUTAPIENTRY glutEstablishOverlay(void);
GLUTAPI void GLUTAPIENTRY glutRemoveOverlay(void);
GLUTAPI void GLUTAPIENTRY glutUseLayer(GLenum layer);
GLUTAPI void GLUTAPIENTRY glutPostOverlayRedisplay(void);
#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 11)
GLUTAPI void GLUTAPIENTRY glutPostWindowOverlayRedisplay(int win);
#endif
GLUTAPI void GLUTAPIENTRY glutShowOverlay(void);
GLUTAPI void GLUTAPIENTRY glutHideOverlay(void);
#endif
/* GLUT menu sub-API. */
GLUTAPI int GLUTAPIENTRY glutCreateMenu(void (GLUTCALLBACK *func)(int));
#if defined(_WIN32) && !defined(GLUT_DISABLE_ATEXIT_HACK)
GLUTAPI int GLUTAPIENTRY __glutCreateMenuWithExit(void (GLUTCALLBACK *func)(int), void (__cdecl *exitfunc)(int));
#ifndef GLUT_BUILDING_LIB
static int GLUTAPIENTRY glutCreateMenu_ATEXIT_HACK(void (GLUTCALLBACK *func)(int)) { return __glutCreateMenuWithExit(func, exit); }
#define glutCreateMenu glutCreateMenu_ATEXIT_HACK
#endif
#endif
GLUTAPI void GLUTAPIENTRY glutDestroyMenu(int menu);
GLUTAPI int GLUTAPIENTRY glutGetMenu(void);
GLUTAPI void GLUTAPIENTRY glutSetMenu(int menu);
GLUTAPI void GLUTAPIENTRY glutAddMenuEntry(const char *label, int value);
GLUTAPI void GLUTAPIENTRY glutAddSubMenu(const char *label, int submenu);
GLUTAPI void GLUTAPIENTRY glutChangeToMenuEntry(int item, const char *label, int value);
GLUTAPI void GLUTAPIENTRY glutChangeToSubMenu(int item, const char *label, int submenu);
GLUTAPI void GLUTAPIENTRY glutRemoveMenuItem(int item);
GLUTAPI void GLUTAPIENTRY glutAttachMenu(int button);
GLUTAPI void GLUTAPIENTRY glutDetachMenu(int button);
/* GLUT window callback sub-API. */
GLUTAPI void GLUTAPIENTRY glutDisplayFunc(void (GLUTCALLBACK *func)(void));
GLUTAPI void GLUTAPIENTRY glutReshapeFunc(void (GLUTCALLBACK *func)(int width, int height));
GLUTAPI void GLUTAPIENTRY glutKeyboardFunc(void (GLUTCALLBACK *func)(unsigned char key, int x, int y));
GLUTAPI void GLUTAPIENTRY glutMouseFunc(void (GLUTCALLBACK *func)(int button, int state, int x, int y));
GLUTAPI void GLUTAPIENTRY glutMotionFunc(void (GLUTCALLBACK *func)(int x, int y));
GLUTAPI void GLUTAPIENTRY glutPassiveMotionFunc(void (GLUTCALLBACK *func)(int x, int y));
GLUTAPI void GLUTAPIENTRY glutEntryFunc(void (GLUTCALLBACK *func)(int state));
GLUTAPI void GLUTAPIENTRY glutVisibilityFunc(void (GLUTCALLBACK *func)(int state));
GLUTAPI void GLUTAPIENTRY glutIdleFunc(void (GLUTCALLBACK *func)(void));
GLUTAPI void GLUTAPIENTRY glutTimerFunc(unsigned int millis, void (GLUTCALLBACK *func)(int value), int value);
GLUTAPI void GLUTAPIENTRY glutMenuStateFunc(void (GLUTCALLBACK *func)(int state));
#if (GLUT_API_VERSION >= 2)
GLUTAPI void GLUTAPIENTRY glutSpecialFunc(void (GLUTCALLBACK *func)(int key, int x, int y));
GLUTAPI void GLUTAPIENTRY glutSpaceballMotionFunc(void (GLUTCALLBACK *func)(int x, int y, int z));
GLUTAPI void GLUTAPIENTRY glutSpaceballRotateFunc(void (GLUTCALLBACK *func)(int x, int y, int z));
GLUTAPI void GLUTAPIENTRY glutSpaceballButtonFunc(void (GLUTCALLBACK *func)(int button, int state));
GLUTAPI void GLUTAPIENTRY glutButtonBoxFunc(void (GLUTCALLBACK *func)(int button, int state));
GLUTAPI void GLUTAPIENTRY glutDialsFunc(void (GLUTCALLBACK *func)(int dial, int value));
GLUTAPI void GLUTAPIENTRY glutTabletMotionFunc(void (GLUTCALLBACK *func)(int x, int y));
GLUTAPI void GLUTAPIENTRY glutTabletButtonFunc(void (GLUTCALLBACK *func)(int button, int state, int x, int y));
#if (GLUT_API_VERSION >= 3)
GLUTAPI void GLUTAPIENTRY glutMenuStatusFunc(void (GLUTCALLBACK *func)(int status, int x, int y));
GLUTAPI void GLUTAPIENTRY glutOverlayDisplayFunc(void (GLUTCALLBACK *func)(void));
#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9)
GLUTAPI void GLUTAPIENTRY glutWindowStatusFunc(void (GLUTCALLBACK *func)(int state));
#endif
#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 13)
GLUTAPI void GLUTAPIENTRY glutKeyboardUpFunc(void (GLUTCALLBACK *func)(unsigned char key, int x, int y));
GLUTAPI void GLUTAPIENTRY glutSpecialUpFunc(void (GLUTCALLBACK *func)(int key, int x, int y));
GLUTAPI void GLUTAPIENTRY glutJoystickFunc(void (GLUTCALLBACK *func)(unsigned int buttonMask, int x, int y, int z), int pollInterval);
#endif
#endif
#endif
/* GLUT color index sub-API. */
GLUTAPI void GLUTAPIENTRY glutSetColor(int ndx, GLfloat red, GLfloat green, GLfloat blue);
GLUTAPI GLfloat GLUTAPIENTRY glutGetColor(int ndx, int component);
GLUTAPI void GLUTAPIENTRY glutCopyColormap(int win);
/* GLUT state retrieval sub-API. */
GLUTAPI int GLUTAPIENTRY glutGet(GLenum type);
GLUTAPI int GLUTAPIENTRY glutDeviceGet(GLenum type);
#if (GLUT_API_VERSION >= 2)
/* GLUT extension support sub-API */
GLUTAPI int GLUTAPIENTRY glutExtensionSupported(const char *name);
#endif
#if (GLUT_API_VERSION >= 3)
GLUTAPI int GLUTAPIENTRY glutGetModifiers(void);
GLUTAPI int GLUTAPIENTRY glutLayerGet(GLenum type);
#endif
#if (GLUT_API_VERSION >= 5)
typedef void (*GLUTproc)();
GLUTAPI GLUTproc GLUTAPIENTRY glutGetProcAddress(const char *procName);
#endif
/* GLUT font sub-API */
GLUTAPI void GLUTAPIENTRY glutBitmapCharacter(void *font, int character);
GLUTAPI int GLUTAPIENTRY glutBitmapWidth(void *font, int character);
GLUTAPI void GLUTAPIENTRY glutStrokeCharacter(void *font, int character);
GLUTAPI int GLUTAPIENTRY glutStrokeWidth(void *font, int character);
#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9)
GLUTAPI int GLUTAPIENTRY glutBitmapLength(void *font, const unsigned char *string);
GLUTAPI int GLUTAPIENTRY glutStrokeLength(void *font, const unsigned char *string);
#endif
/* GLUT pre-built models sub-API */
GLUTAPI void GLUTAPIENTRY glutWireSphere(GLdouble radius, GLint slices, GLint stacks);
GLUTAPI void GLUTAPIENTRY glutSolidSphere(GLdouble radius, GLint slices, GLint stacks);
GLUTAPI void GLUTAPIENTRY glutWireCone(GLdouble base, GLdouble height, GLint slices, GLint stacks);
GLUTAPI void GLUTAPIENTRY glutSolidCone(GLdouble base, GLdouble height, GLint slices, GLint stacks);
GLUTAPI void GLUTAPIENTRY glutWireCube(GLdouble size);
GLUTAPI void GLUTAPIENTRY glutSolidCube(GLdouble size);
GLUTAPI void GLUTAPIENTRY glutWireTorus(GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings);
GLUTAPI void GLUTAPIENTRY glutSolidTorus(GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings);
GLUTAPI void GLUTAPIENTRY glutWireDodecahedron(void);
GLUTAPI void GLUTAPIENTRY glutSolidDodecahedron(void);
GLUTAPI void GLUTAPIENTRY glutWireTeapot(GLdouble size);
GLUTAPI void GLUTAPIENTRY glutSolidTeapot(GLdouble size);
GLUTAPI void GLUTAPIENTRY glutWireOctahedron(void);
GLUTAPI void GLUTAPIENTRY glutSolidOctahedron(void);
GLUTAPI void GLUTAPIENTRY glutWireTetrahedron(void);
GLUTAPI void GLUTAPIENTRY glutSolidTetrahedron(void);
GLUTAPI void GLUTAPIENTRY glutWireIcosahedron(void);
GLUTAPI void GLUTAPIENTRY glutSolidIcosahedron(void);
#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9)
/* GLUT video resize sub-API. */
GLUTAPI int GLUTAPIENTRY glutVideoResizeGet(GLenum param);
GLUTAPI void GLUTAPIENTRY glutSetupVideoResizing(void);
GLUTAPI void GLUTAPIENTRY glutStopVideoResizing(void);
GLUTAPI void GLUTAPIENTRY glutVideoResize(int x, int y, int width, int height);
GLUTAPI void GLUTAPIENTRY glutVideoPan(int x, int y, int width, int height);
/* GLUT debugging sub-API. */
GLUTAPI void GLUTAPIENTRY glutReportErrors(void);
#endif
#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 13)
/* GLUT device control sub-API. */
/* glutSetKeyRepeat modes. */
#define GLUT_KEY_REPEAT_OFF 0
#define GLUT_KEY_REPEAT_ON 1
#define GLUT_KEY_REPEAT_DEFAULT 2
/* Joystick button masks. */
#define GLUT_JOYSTICK_BUTTON_A 1
#define GLUT_JOYSTICK_BUTTON_B 2
#define GLUT_JOYSTICK_BUTTON_C 4
#define GLUT_JOYSTICK_BUTTON_D 8
GLUTAPI void GLUTAPIENTRY glutIgnoreKeyRepeat(int ignore);
GLUTAPI void GLUTAPIENTRY glutSetKeyRepeat(int repeatMode);
GLUTAPI void GLUTAPIENTRY glutForceJoystickFunc(void);
/* GLUT game mode sub-API. */
/* glutGameModeGet. */
#define GLUT_GAME_MODE_ACTIVE 0
#define GLUT_GAME_MODE_POSSIBLE 1
#define GLUT_GAME_MODE_WIDTH 2
#define GLUT_GAME_MODE_HEIGHT 3
#define GLUT_GAME_MODE_PIXEL_DEPTH 4
#define GLUT_GAME_MODE_REFRESH_RATE 5
#define GLUT_GAME_MODE_DISPLAY_CHANGED 6
GLUTAPI void GLUTAPIENTRY glutGameModeString(const char *string);
GLUTAPI int GLUTAPIENTRY glutEnterGameMode(void);
GLUTAPI void GLUTAPIENTRY glutLeaveGameMode(void);
GLUTAPI int GLUTAPIENTRY glutGameModeGet(GLenum mode);
#endif
#ifdef __cplusplus
}
#endif
#endif /* __glut_h__ */
# Makefile for GLUT
#
# NOTICE: The OpenGL Utility Toolkit (GLUT) distribution contains source
# code published in a book titled "Programming OpenGL for the X Window
# System" (ISBN: 0-201-48359-9) published by Addison-Wesley. The
# programs and associated files contained in the distribution were
# developed by Mark J. Kilgard and are Copyright 1994, 1995, 1996 by Mark
# J. Kilgard (unless otherwise noted). The programs are not in the
# public domain, but they are freely distributable without licensing
# fees. These programs are provided without guarantee or warrantee
# expressed or implied.
#
# GLUT source included with Mesa with permission from Mark Kilgard.
TOP = ../../..
include $(TOP)/configs/current
##### MACROS #####
GLUT_MAJOR = 3
GLUT_MINOR = 7
GLUT_TINY = 1
SOURCES = \
glut_8x13.c \
glut_9x15.c \
glut_bitmap.c \
glut_bwidth.c \
glut_cindex.c \
glut_cmap.c \
glut_cursor.c \
glut_dials.c \
glut_dstr.c \
glut_event.c \
glut_ext.c \
glut_fcb.c \
glut_fullscrn.c \
glut_gamemode.c \
glut_get.c \
glut_glxext.c \
glut_hel10.c \
glut_hel12.c \
glut_hel18.c \
glut_init.c \
glut_input.c \
glut_joy.c \
glut_key.c \
glut_keyctrl.c \
glut_keyup.c \
glut_menu.c \
glut_menu2.c \
glut_mesa.c \
glut_modifier.c \
glut_mroman.c \
glut_overlay.c \
glut_roman.c \
glut_shapes.c \
glut_space.c \
glut_stroke.c \
glut_swap.c \
glut_swidth.c \
glut_tablet.c \
glut_teapot.c \
glut_tr10.c \
glut_tr24.c \
glut_util.c \
glut_vidresize.c \
glut_warp.c \
glut_win.c \
glut_winmisc.c \
layerutil.c
OBJECTS = $(SOURCES:.c=.o)
##### RULES #####
.c.o:
$(CC) -c -I$(TOP)/include $(X11_INCLUDES) $(CFLAGS) $(GLUT_CFLAGS) $<
##### TARGETS #####
default: $(TOP)/$(LIB_DIR)/$(GLUT_LIB_NAME)
# Make the library
$(TOP)/$(LIB_DIR)/$(GLUT_LIB_NAME): depend $(OBJECTS)
$(TOP)/bin/mklib -o $(GLUT_LIB) -linker '$(CC)' -ldflags '$(LDFLAGS)' \
-major $(GLUT_MAJOR) -minor $(GLUT_MINOR) -patch $(GLUT_TINY) \
$(MKLIB_OPTIONS) -install $(TOP)/$(LIB_DIR) \
$(GLUT_LIB_DEPS) $(OBJECTS)
# glut pkgconfig file
pcedit = sed \
-e 's,@INSTALL_DIR@,$(INSTALL_DIR),' \
-e 's,@LIB_DIR@,$(LIB_DIR),' \
-e 's,@VERSION@,$(GLUT_MAJOR).$(GLUT_MINOR).$(GLUT_TINY),'
glut.pc: glut.pc.in
$(pcedit) $< > $@
install: glut.pc
$(INSTALL) -d $(DESTDIR)$(INSTALL_DIR)/include/GL
$(INSTALL) -d $(DESTDIR)$(INSTALL_DIR)/$(LIB_DIR)
$(INSTALL) -d $(DESTDIR)$(INSTALL_DIR)/$(LIB_DIR)/pkgconfig
$(INSTALL) -m 644 $(TOP)/include/GL/glut.h $(DESTDIR)$(INSTALL_DIR)/include/GL
$(INSTALL) $(TOP)/$(LIB_DIR)/libglut* $(DESTDIR)$(INSTALL_DIR)/$(LIB_DIR)
$(INSTALL) -m 644 glut.pc $(DESTDIR)$(INSTALL_DIR)/$(LIB_DIR)/pkgconfig
clean:
-rm -f *.o *~
-rm -f *.lo
-rm -f *.la
-rm -rf .libs
-rm -rf depend depend.bak
depend: $(SOURCES)
@ echo "running $(MKDEP)"
@ touch depend
@ $(MKDEP) $(MKDEP_OPTIONS) -I$(TOP)/include $(SOURCES) \
> /dev/null
include depend
# Makefile.cygnus for Cygnus-Win32 target
# /Stephane Rehel, November 16 1997
# Makefile for GLUT 3.7
#
# NOTICE: The OpenGL Utility Toolkit (GLUT) distribution contains source
# code published in a book titled "Programming OpenGL for the X Window
# System" (ISBN: 0-201-48359-9) published by Addison-Wesley. The
# programs and associated files contained in the distribution were
# developed by Mark J. Kilgard and are Copyright 1994, 1995, 1996 by Mark
# J. Kilgard (unless otherwise noted). The programs are not in the
# public domain, but they are freely distributable without licensing
# fees. These programs are provided without guarantee or warrantee
# expressed or implied.
#
# GLUT source included with Mesa with permission from Mark Kilgard.
##### MACROS #####
GLUT_MAJOR = 3
GLUT_MINOR = 7
GLUT_TINY = 0
VPATH = RCS
INCDIR = ../include
LIBDIR = ../lib
SOURCES = \
glut_8x13.c \
glut_9x15.c \
glut_bitmap.c \
glut_bwidth.c \
glut_cindex.c \
glut_cmap.c \
glut_cursor.c \
glut_dials.c \
glut_dstr.c \
glut_event.c \
glut_ext.c \
glut_fullscrn.c \
glut_get.c \
glut_hel10.c \
glut_hel12.c \
glut_hel18.c \
glut_init.c \
glut_input.c \
glut_mesa.c \
glut_modifier.c \
glut_mroman.c \
glut_overlay.c \
glut_roman.c \
glut_shapes.c \
glut_space.c \
glut_stroke.c \
glut_swap.c \
glut_swidth.c \
glut_tablet.c \
glut_teapot.c \
glut_tr10.c \
glut_tr24.c \
glut_util.c \
glut_vidresize.c \
glut_warp.c \
glut_win.c \
glut_winmisc.c \
win32_x11.c \
win32_glx.c \
win32_menu.c \
win32_util.c
OBJECTS = $(SOURCES:.c=.o)
##### RULES #####
.c.o:
$(CC) -c -I$(INCDIR) $(CFLAGS) $<
##### TARGETS #####
default:
@echo "Specify a target configuration"
clean:
-rm *.o *~
targets: $(LIBDIR)/$(GLUT_LIB)
# Make the library
$(LIBDIR)/$(GLUT_LIB): $(OBJECTS)
$(MAKELIB) $(GLUT_LIB) $(GLUT_MAJOR) $(GLUT_MINOR) $(GLUT_TINY) $(OBJECTS)
mv $(GLUT_LIB)* $(LIBDIR)
include ../Make-config
include depend
#
# Run 'make dep' to update the dependencies if you change what's included
# by any source file.
#
dep: $(SOURCES)
makedepend -fdepend -Y -I../include $(SOURCES)
# Mesa 3-D graphics library
# Version: 5.1
#
# Copyright (C) 1999-2003 Brian Paul 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
# BRIAN PAUL 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.
# MinGW core makefile v1.4 for Mesa
#
# Copyright (C) 2002 - Daniel Borca
# Email : dborca@users.sourceforge.net
# Web : http://www.geocities.com/dborca
# MinGW core-glut makefile updated for Mesa 7.0
#
# Updated : by Heromyth, on 2007-7-21
# Email : zxpmyth@yahoo.com.cn
# Bugs : 1) All the default settings work fine. But the setting X86=1 can't work.
# The others havn't been tested yet.
# 2) The generated DLLs are *not* compatible with the ones built
# with the other compilers like VC8, especially for GLUT.
# 3) Although more tests are needed, it can be used individually!
#
# Available options:
#
# Environment variables:
# CFLAGS
#
# GLIDE path to Glide3 SDK; used with FX.
# default = $(TOP)/glide3
# FX=1 build for 3dfx Glide3. Note that this disables
# compilation of most WMesa code and requires fxMesa.
# As a consequence, you'll need the Win32 Glide3
# library to build any application.
# default = no
# ICD=1 build the installable client driver interface
# (windows opengl driver interface)
# default = no
# X86=1 optimize for x86 (if possible, use MMX, SSE, 3DNow).
# default = no
#
# Targets:
# all: build GL
# clean: remove object files
#
.PHONY: all clean
.INTERMEDIATE: x86/gen_matypes.exe
.SUFFIXES: .rc .res
# Set this to the prefix of your build tools, i.e. mingw32-
TOOLS_PREFIX = mingw32-
TOP = ../../..
LIBDIR = $(TOP)/lib
LIB_NAME = glut32
DLL_EXT = .dll
IMP_EXT = .a
LIB_PRE = lib
STRIP = -s
AR = ar
ARFLAGS = crus
DLLTOOL = dlltool
GLUT_DLL = $(LIB_NAME)$(DLL_EXT)
GLUT_IMP = $(LIB_PRE)$(LIB_NAME)$(IMP_EXT)
GLUT_DEF = $(LIB_NAME).def
LDLIBS = -L$(LIBDIR) -lwinmm -lgdi32 -luser32 -lopengl32 -lglu32
LDFLAGS = $(STRIP) -shared -fPIC -Wl,--kill-at
CFLAGS += -DBUILD_GLUT32 -DGLUT_BUILDING_LIB -DMESA -D_DLL
CFLAGS += -DNDEBUG -DLIBRARYBUILD -I$(TOP)/include
CC = $(TOOLS_PREFIX)gcc
CXX = $(TOOLS_PREFIX)g++
CXXFLAGS = $(CFLAGS)
AR = ar
ARFLAGS = crus
UNLINK = del $(subst /,\,$(1))
ifneq ($(wildcard $(addsuffix /rm.exe,$(subst ;, ,$(PATH)))),)
UNLINK = $(RM) $(1)
endif
ifneq ($(wildcard $(addsuffix /rm,$(subst :, ,$(PATH)))),)
UNLINK = $(RM) $(1)
endif
HDRS = glutint.h glutstroke.h glutbitmap.h glutwin32.h stroke.h win32_glx.h win32_x11.h
SRCS = \
glut_bitmap.c \
glut_bwidth.c \
glut_cindex.c \
glut_cmap.c \
glut_cursor.c \
glut_dials.c \
glut_dstr.c \
glut_event.c \
glut_ext.c \
glut_fbc.c \
glut_fullscrn.c \
glut_gamemode.c \
glut_get.c \
glut_init.c \
glut_input.c \
glut_joy.c \
glut_key.c \
glut_keyctrl.c \
glut_keyup.c \
glut_mesa.c \
glut_modifier.c \
glut_overlay.c \
glut_shapes.c \
glut_space.c \
glut_stroke.c \
glut_swap.c \
glut_swidth.c \
glut_tablet.c \
glut_teapot.c \
glut_util.c \
glut_vidresize.c \
glut_warp.c \
glut_win.c \
glut_winmisc.c \
win32_glx.c \
win32_menu.c \
win32_util.c \
win32_winproc.c \
win32_x11.c
SRCSSEMIGENS = \
glut_8x13.c \
glut_9x15.c \
glut_hel10.c \
glut_hel12.c \
glut_hel18.c \
glut_mroman.c \
glut_roman.c \
glut_tr10.c \
glut_tr24.c
SOURCES = $(SRCS) $(SRCSSEMIGENS)
OBJECTS = $(addsuffix .o,$(basename $(SOURCES)))
.c.o:
$(CC) -o $@ $(CFLAGS) -c $<
.cc.o:
$(CXX) -o $@ $(CXXFLAGS) -c $<
all: $(LIBDIR) $(LIBDIR)/$(GLUT_DLL) $(LIBDIR)/$(GLUT_IMP)
$(LIBDIR):
mkdir -p $(LIBDIR)
$(LIBDIR)/$(GLUT_DLL) $(LIBDIR)/$(GLUT_IMP): $(OBJECTS)
$(CXX) $(LDFLAGS) -o $(LIBDIR)/$(GLUT_DLL) $^ $(LDLIBS)
$(DLLTOOL) --as=as --dllname $(LIB_NAME) --output-def $(LIBDIR)/$(GLUT_DEF) $^
$(DLLTOOL) --as=as -k --dllname $(LIB_NAME) --output-lib $(LIBDIR)/$(GLUT_IMP) --def $(LIBDIR)/$(GLUT_DEF)
clean:
-$(call UNLINK,*.o)
/* Copyright (c) Nate Robins, 1997. */
/* portions Copyright (c) Mark Kilgard, 1997, 1998. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#include "glutint.h"
#include <sys/timeb.h>
#ifdef __MINGW32__
#include <ctype.h>
#endif
#if defined(_WIN32) && !defined(__CYGWIN32__)
#include <mmsystem.h> /* Win32 Multimedia API header. */
#endif
extern unsigned __glutMenuButton;
extern GLUTidleCB __glutIdleFunc;
extern GLUTtimer *__glutTimerList;
extern GLUTmenuItem *__glutGetUniqueMenuItem(GLUTmenu * menu, int unique);
static HMENU __glutHMenu;
void
updateWindowState(GLUTwindow *window, int visState)
{
GLUTwindow* child;
/* XXX shownState and visState are the same in Win32. */
window->shownState = visState;
if (visState != window->visState) {
if (window->windowStatus) {
window->visState = visState;
__glutSetWindow(window);
window->windowStatus(visState);
}
}
/* Since Win32 only sends an activate for the toplevel window,
update the visibility for all the child windows. */
child = window->children;
while (child) {
updateWindowState(child, visState);
child = child->siblings;
}
}
LONG WINAPI
__glutWindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
POINT point; /* Point structure. */
PAINTSTRUCT ps; /* Paint structure. */
LPMINMAXINFO minmax; /* Minimum/maximum info structure. */
GLUTwindow* window; /* GLUT window associated with message. */
GLUTmenu* menu; /* GLUT menu associated with message. */
int x, y, width, height, key;
int button = -1;
switch(msg) {
case WM_CREATE:
return 0;
case WM_CLOSE:
if (__glutExitFunc) {
__glutExitFunc(0);
}
exit(0);
break;
#if 0
case WM_DESTROY:
/* XXX NVidia's NT OpenGL can have problems closing down
its OpenGL internal data structures if we just allow
the process to terminate without unbinding and deleting
the windows context. Apparently, DirectDraw unloads
before OPENGL32.DLL in the close down sequence, but
NVidia's NT OpenGL needs DirectDraw to close down its
data structures. */
window = __glutGetWindow(hwnd);
if (window) {
if (window->ctx) {
wglMakeCurrent(NULL, NULL);
wglDeleteContext(window->ctx);
}
}
return 0;
#endif
case WM_PAINT:
window = __glutGetWindow(hwnd);
if (window) {
BeginPaint(hwnd, &ps); /* Must have this for some Win32 reason. */
EndPaint(hwnd, &ps);
if (window->win == hwnd) {
__glutPostRedisplay(window, GLUT_REPAIR_WORK);
} else if (window->overlay && window->overlay->win == hwnd) {
__glutPostRedisplay(window, GLUT_OVERLAY_REPAIR_WORK);
}
}
return 0;
case WM_SYSKEYUP:
case WM_KEYUP:
window = __glutGetWindow(hwnd);
if (!window) {
break;
}
/* Win32 is dumb and sends these messages only to the parent
window. Therefore, find out if we're in a child window and
call the child windows keyboard callback if we are. */
if (window->parent) {
GetCursorPos(&point);
ScreenToClient(hwnd, &point);
hwnd = ChildWindowFromPoint(hwnd, point);
window = __glutGetWindow(hwnd);
}
if (window->specialUp || window->keyboardUp) {
GetCursorPos(&point);
ScreenToClient(window->win, &point);
__glutSetWindow(window);
__glutModifierMask = 0;
if (GetKeyState(VK_SHIFT) < 0) /* < 0 = high order bit is on */
__glutModifierMask |= ShiftMask;
if (GetKeyState(VK_SHIFT) < 0) /* < 0 = high order bit is on */
__glutModifierMask |= ControlMask;
if (GetKeyState(VK_MENU) < 0)
__glutModifierMask |= Mod1Mask;
switch (wParam) {
/* *INDENT-OFF* */
case VK_F1: key = GLUT_KEY_F1; break;
case VK_F2: key = GLUT_KEY_F2; break;
case VK_F3: key = GLUT_KEY_F3; break;
case VK_F4: key = GLUT_KEY_F4; break;
case VK_F5: key = GLUT_KEY_F5; break;
case VK_F6: key = GLUT_KEY_F6; break;
case VK_F7: key = GLUT_KEY_F7; break;
case VK_F8: key = GLUT_KEY_F8; break;
case VK_F9: key = GLUT_KEY_F9; break;
case VK_F10: key = GLUT_KEY_F10; break;
case VK_F11: key = GLUT_KEY_F11; break;
case VK_F12: key = GLUT_KEY_F12; break;
case VK_LEFT: key = GLUT_KEY_LEFT; break;
case VK_UP: key = GLUT_KEY_UP; break;
case VK_RIGHT: key = GLUT_KEY_RIGHT; break;
case VK_DOWN: key = GLUT_KEY_DOWN; break;
case VK_PRIOR: key = GLUT_KEY_PAGE_UP; break;
case VK_NEXT: key = GLUT_KEY_PAGE_DOWN; break;
case VK_HOME: key = GLUT_KEY_HOME; break;
case VK_END: key = GLUT_KEY_END; break;
case VK_INSERT: key = GLUT_KEY_INSERT; break;
case VK_DELETE:
/* Delete is an ASCII character. */
if (window->keyboardUp) {
window->keyboardUp((unsigned char) 127, point.x, point.y);
}
return 0;
/* *INDENT-ON* */
default:
if (window->keyboardUp) {
key = MapVirtualKey(wParam, 2); /* Map to ASCII. */
if (isascii(key) && (key != 0)) {
/* XXX Attempt to determine modified ASCII character
is quite incomplete. Digits, symbols, CapsLock,
Ctrl, and numeric keypad are all ignored. Fix this. */
if (!(__glutModifierMask & ShiftMask))
key = tolower(key);
window->keyboardUp((unsigned char) key, point.x, point.y);
}
}
__glutModifierMask = (unsigned int) ~0;
return 0;
}
if (window->specialUp) {
window->specialUp(key, point.x, point.y);
}
__glutModifierMask = (unsigned int) ~0;
}
return 0;
case WM_SYSCHAR:
case WM_CHAR:
window = __glutGetWindow(hwnd);
if (!window) {
break;
}
/* Bit 30 of lParam is set if key already held down. If
we are ignoring auto repeated key strokes for the window, bail. */
if (window->ignoreKeyRepeat && (lParam & (1 << 30)) ) {
break;
}
/* Win32 is dumb and sends these messages only to the parent
window. Therefore, find out if we're in a child window and
call the child windows keyboard callback if we are. */
if (window->parent) {
GetCursorPos(&point);
ScreenToClient(hwnd, &point);
hwnd = ChildWindowFromPoint(hwnd, point);
window = __glutGetWindow(hwnd);
}
if (window->keyboard) {
GetCursorPos(&point);
ScreenToClient(window->win, &point);
__glutSetWindow(window);
__glutModifierMask = 0;
if (GetKeyState(VK_SHIFT) < 0) /* < 0 = high order bit is on */
__glutModifierMask |= ShiftMask;
if (GetKeyState(VK_CONTROL) < 0)
__glutModifierMask |= ControlMask;
if (GetKeyState(VK_MENU) < 0)
__glutModifierMask |= Mod1Mask;
window->keyboard((unsigned char)wParam, point.x, point.y);
__glutModifierMask = (unsigned int) ~0;
}
return 0;
case WM_SYSKEYDOWN:
case WM_KEYDOWN:
window = __glutGetWindow(hwnd);
if (!window) {
break;
}
/* Bit 30 of lParam is set if key already held down. If
we are ignoring auto repeated key strokes for the window, bail. */
if (window->ignoreKeyRepeat && (lParam & (1 << 30)) ) {
break;
}
/* Win32 is dumb and sends these messages only to the parent
window. Therefore, find out if we're in a child window and
call the child windows keyboard callback if we are. */
if (window->parent) {
GetCursorPos(&point);
ScreenToClient(hwnd, &point);
hwnd = ChildWindowFromPoint(hwnd, point);
window = __glutGetWindow(hwnd);
}
if (window->special) {
switch (wParam) {
/* *INDENT-OFF* */
/* function keys */
case VK_F1: key = GLUT_KEY_F1; break;
case VK_F2: key = GLUT_KEY_F2; break;
case VK_F3: key = GLUT_KEY_F3; break;
case VK_F4: key = GLUT_KEY_F4; break;
case VK_F5: key = GLUT_KEY_F5; break;
case VK_F6: key = GLUT_KEY_F6; break;
case VK_F7: key = GLUT_KEY_F7; break;
case VK_F8: key = GLUT_KEY_F8; break;
case VK_F9: key = GLUT_KEY_F9; break;
case VK_F10: key = GLUT_KEY_F10; break;
case VK_F11: key = GLUT_KEY_F11; break;
case VK_F12: key = GLUT_KEY_F12; break;
/* directional keys */
case VK_LEFT: key = GLUT_KEY_LEFT; break;
case VK_UP: key = GLUT_KEY_UP; break;
case VK_RIGHT: key = GLUT_KEY_RIGHT; break;
case VK_DOWN: key = GLUT_KEY_DOWN; break;
/* *INDENT-ON* */
case VK_PRIOR:
/* VK_PRIOR is Win32's Page Up */
key = GLUT_KEY_PAGE_UP;
break;
case VK_NEXT:
/* VK_NEXT is Win32's Page Down */
key = GLUT_KEY_PAGE_DOWN;
break;
case VK_HOME:
key = GLUT_KEY_HOME;
break;
case VK_END:
key = GLUT_KEY_END;
break;
case VK_INSERT:
key = GLUT_KEY_INSERT;
break;
case VK_DELETE:
goto handleDelete;
default:
goto defproc;
}
GetCursorPos(&point);
ScreenToClient(window->win, &point);
__glutSetWindow(window);
__glutModifierMask = 0;
if (GetKeyState(VK_SHIFT) < 0) /* < 0 = high order bit is on */
__glutModifierMask |= ShiftMask;
if (GetKeyState(VK_CONTROL) < 0)
__glutModifierMask |= ControlMask;
if (GetKeyState(VK_MENU) < 0)
__glutModifierMask |= Mod1Mask;
window->special(key, point.x, point.y);
__glutModifierMask = (unsigned int) ~0;
} else if (window->keyboard) {
/* Specially handle any keys that match ASCII values but
do not generate Windows WM_SYSCHAR or WM_CHAR messages. */
switch (wParam) {
case VK_DELETE:
handleDelete:
/* Delete is an ASCII character. */
GetCursorPos(&point);
ScreenToClient(window->win, &point);
__glutSetWindow(window);
__glutModifierMask = 0;
if (GetKeyState(VK_SHIFT) < 0) /* < 0 = high order bit is on */
__glutModifierMask |= ShiftMask;
if (GetKeyState(VK_CONTROL) < 0)
__glutModifierMask |= ControlMask;
if (GetKeyState(VK_MENU) < 0)
__glutModifierMask |= Mod1Mask;
window->keyboard((unsigned char) 127, point.x, point.y);
__glutModifierMask = (unsigned int) ~0;
return 0;
default:
/* Let the following WM_SYSCHAR or WM_CHAR message generate
the keyboard callback. */
break;
}
}
return 0;
case WM_LBUTTONDOWN:
button = GLUT_LEFT_BUTTON;
case WM_MBUTTONDOWN:
if (button < 0)
button = GLUT_MIDDLE_BUTTON;
case WM_RBUTTONDOWN:
if (button < 0)
button = GLUT_RIGHT_BUTTON;
/* finish the menu if we get a button down message (user must have
cancelled the menu). */
if (__glutMappedMenu) {
/* TODO: take this out once the menu on middle mouse stuff works
properly. */
if (button == GLUT_MIDDLE_BUTTON)
return 0;
GetCursorPos(&point);
ScreenToClient(hwnd, &point);
__glutItemSelected = NULL;
__glutFinishMenu(hwnd, point.x, point.y);
return 0;
}
/* set the capture so we can get mouse events outside the window */
SetCapture(hwnd);
/* Win32 doesn't return the same numbers as X does when the mouse
goes beyond the upper or left side of the window. roll the
Win32's 0..2^16 pointer co-ord range to 0 +/- 2^15. */
x = LOWORD(lParam);
y = HIWORD(lParam);
if(x & 1 << 15) x -= (1 << 16);
if(y & 1 << 15) y -= (1 << 16);
window = __glutGetWindow(hwnd);
if (window) {
menu = __glutGetMenuByNum(window->menu[button]);
if (menu) {
point.x = LOWORD(lParam); point.y = HIWORD(lParam);
ClientToScreen(window->win, &point);
__glutMenuButton = button == GLUT_RIGHT_BUTTON ? TPM_RIGHTBUTTON :
button == GLUT_LEFT_BUTTON ? TPM_LEFTBUTTON :
0x0001;
__glutStartMenu(menu, window, point.x, point.y, x, y);
} else if (window->mouse) {
__glutSetWindow(window);
__glutModifierMask = 0;
if (GetKeyState(VK_SHIFT) < 0) /* < 0 = high order bit is on. */
__glutModifierMask |= ShiftMask;
if (GetKeyState(VK_CONTROL) < 0)
__glutModifierMask |= ControlMask;
if (GetKeyState(VK_MENU) < 0)
__glutModifierMask |= Mod1Mask;
window->mouse(button, GLUT_DOWN, x, y);
__glutModifierMask = (unsigned int)~0;
} else {
/* Stray mouse events. Ignore. */
}
}
return 0;
case WM_LBUTTONUP:
button = GLUT_LEFT_BUTTON;
case WM_MBUTTONUP:
if (button < 0)
button = GLUT_MIDDLE_BUTTON;
case WM_RBUTTONUP:
if (button < 0)
button = GLUT_RIGHT_BUTTON;
/* Bail out if we're processing a menu. */
if (__glutMappedMenu) {
GetCursorPos(&point);
ScreenToClient(hwnd, &point);
/* if we're getting the middle button up signal, then something
on the menu was selected. */
if (button == GLUT_MIDDLE_BUTTON) {
return 0;
/* For some reason, the code below always returns -1 even
though the point IS IN THE ITEM! Therefore, just bail out if
we get a middle mouse up. The user must select using the
left mouse button. Stupid Win32. */
#if 0
int item = MenuItemFromPoint(hwnd, __glutHMenu, point);
if (item != -1)
__glutItemSelected = (GLUTmenuItem*)GetMenuItemID(__glutHMenu, item);
else
__glutItemSelected = NULL;
__glutFinishMenu(hwnd, point.x, point.y);
#endif
} else {
__glutItemSelected = NULL;
__glutFinishMenu(hwnd, point.x, point.y);
}
return 0;
}
/* Release the mouse capture. */
ReleaseCapture();
window = __glutGetWindow(hwnd);
if (window && window->mouse) {
/* Win32 doesn't return the same numbers as X does when the
mouse goes beyond the upper or left side of the window. roll
the Win32's 0..2^16 pointer co-ord range to 0 +/- 2^15. */
x = LOWORD(lParam);
y = HIWORD(lParam);
if(x & 1 << 15) x -= (1 << 16);
if(y & 1 << 15) y -= (1 << 16);
__glutSetWindow(window);
__glutModifierMask = 0;
if (GetKeyState(VK_SHIFT) < 0) /* < 0 = high order bit is on */
__glutModifierMask |= ShiftMask;
if (GetKeyState(VK_CONTROL) < 0)
__glutModifierMask |= ControlMask;
if (GetKeyState(VK_MENU) < 0)
__glutModifierMask |= Mod1Mask;
window->mouse(button, GLUT_UP, x, y);
__glutModifierMask = (unsigned int)~0;
} else {
/* Window might have been destroyed and all the
events for the window may not yet be received. */
}
return 0;
case WM_ENTERMENULOOP:
/* KLUDGE: create a timer that fires every 100 ms when we start a
menu so that we can still process the idle & timer events (that
way, the timers will fire during a menu pick and so will the
idle func. */
SetTimer(hwnd, 1, 1, NULL);
return 0;
case WM_TIMER:
#if 0
/* If the timer id is 2, then this is the timer that is set up in
the main glut message processing loop, and we don't want to do
anything but acknowledge that we got it. It is used to prevent
CPU spiking when an idle function is installed. */
if (wParam == 2)
return 0;
#endif
/* only worry about the idle function and the timeouts, since
these are the only events we expect to process during
processing of a menu. */
/* we no longer process the idle functions (as outlined in the
README), since drawing can't be done until the menu has
finished...it's pretty lame when the animation goes on, but
doesn't update, so you get this weird jerkiness. */
#if 0
if (__glutIdleFunc)
__glutIdleFunc();
#endif
if (__glutTimerList)
handleTimeouts();
return 0;
case WM_EXITMENULOOP:
/* nuke the above created timer...we don't need it anymore, since
the menu is gone now. */
KillTimer(hwnd, 1);
return 0;
case WM_MENUSELECT:
if (lParam != 0)
__glutHMenu = (HMENU)lParam;
return 0;
case WM_COMMAND:
if (__glutMappedMenu) {
if (GetSubMenu(__glutHMenu, LOWORD(wParam)))
__glutItemSelected = NULL;
else
__glutItemSelected =
__glutGetUniqueMenuItem(__glutMappedMenu, LOWORD(wParam));
GetCursorPos(&point);
ScreenToClient(hwnd, &point);
__glutFinishMenu(hwnd, point.x, point.y);
}
return 0;
case WM_MOUSEMOVE:
if (!__glutMappedMenu) {
window = __glutGetWindow(hwnd);
if (window) {
/* If motion function registered _and_ buttons held *
down, call motion function... */
x = LOWORD(lParam);
y = HIWORD(lParam);
/* Win32 doesn't return the same numbers as X does when the
mouse goes beyond the upper or left side of the window.
roll the Win32's 0..2^16 pointer co-ord range to 0..+/-2^15. */
if(x & 1 << 15) x -= (1 << 16);
if(y & 1 << 15) y -= (1 << 16);
if (window->motion && wParam &
(MK_LBUTTON | MK_MBUTTON | MK_RBUTTON)) {
__glutSetWindow(window);
window->motion(x, y);
}
/* If passive motion function registered _and_
buttons not held down, call passive motion
function... */
else if (window->passive &&
((wParam &
(MK_LBUTTON | MK_MBUTTON | MK_RBUTTON)) ==
0)) {
__glutSetWindow(window);
window->passive(x, y);
}
}
} else {
/* Motion events are thrown away when a pop up menu is
active. */
}
return 0;
case WM_GETMINMAXINFO:
/* this voodoo is brought to you by Win32 (again). It allows the
window to be bigger than the screen, and smaller than 100x100
(although it doesn't seem to help the y minimum). */
minmax = (LPMINMAXINFO)lParam;
minmax->ptMaxSize.x = __glutScreenWidth;
minmax->ptMaxSize.y = __glutScreenHeight;
minmax->ptMinTrackSize.x = 0;
minmax->ptMinTrackSize.y = 0;
minmax->ptMaxTrackSize.x = __glutScreenWidth +
GetSystemMetrics(SM_CXSIZE) * 2;
minmax->ptMaxTrackSize.y = __glutScreenHeight +
GetSystemMetrics(SM_CXSIZE) * 2 + GetSystemMetrics(SM_CYCAPTION);
return 0;
case WM_SIZE:
window = __glutGetWindow(hwnd);
if (window) {
width = LOWORD(lParam);
height = HIWORD(lParam);
if (width != window->width || height != window->height) {
#if 0 /* Win32 GLUT does not support overlays for now. */
if (window->overlay) {
XResizeWindow(__glutDisplay, window->overlay->win, width, height);
}
#endif
window->width = width;
window->height = height;
__glutSetWindow(window);
/* Do not execute OpenGL out of sequence with respect
to the SetWindowPos request! */
GdiFlush();
window->reshape(width, height);
window->forceReshape = FALSE;
/* A reshape should be considered like posting a
repair request. */
__glutPostRedisplay(window, GLUT_REPAIR_WORK);
}
}
return 0;
case WM_SETCURSOR:
/* If the cursor is not in the client area, then we want to send
this message to the default window procedure ('cause its
probably in the border or title, and we don't handle that
cursor. otherwise, set our cursor. Win32 makes us set the
cursor every time the mouse moves (DUMB!). */
if(LOWORD(lParam) != HTCLIENT) {
goto defproc;
}
window = __glutGetWindow(hwnd);
if (window) {
__glutSetCursor(window);
}
/* TODO: check out the info in DevStudio on WM_SETCURSOR in the
DefaultAction section. */
return 1;
case WM_SETFOCUS:
window = __glutGetWindow(hwnd);
if (window) {
window->entryState = WM_SETFOCUS;
if (window->entry) {
__glutSetWindow(window);
window->entry(GLUT_ENTERED);
/* XXX Generation of fake passive notify? See how much
work the X11 code does to support fake passive notify
callbacks. */
}
if (window->joystick && __glutCurrentWindow) {
if (__glutCurrentWindow->joyPollInterval > 0) {
MMRESULT result;
/* Because Win32 will only let one window capture the
joystick at a time, we must capture it when we get the
focus and release it when we lose the focus. */
result = joySetCapture(__glutCurrentWindow->win,
JOYSTICKID1, 0, TRUE);
if (result != JOYERR_NOERROR) {
return 0;
}
(void) joySetThreshold(JOYSTICKID1,
__glutCurrentWindow->joyPollInterval);
}
}
}
return 0;
case WM_KILLFOCUS:
window = __glutGetWindow(hwnd);
if (window) {
window->entryState = WM_KILLFOCUS;
if (window->entry) {
__glutSetWindow(window);
window->entry(GLUT_LEFT);
}
if (window->joystick && __glutCurrentWindow) {
if (__glutCurrentWindow->joyPollInterval > 0) {
/* Because Win32 will only let one window capture the
joystick at a time, we must capture it when we get the
focus and release it when we lose the focus. */
(void) joyReleaseCapture(JOYSTICKID1);
}
}
}
return 0;
case WM_ACTIVATE:
window = __glutGetWindow(hwnd);
/* Make sure we re-select the correct palette if needed. */
if (LOWORD(wParam)) {
PostMessage(hwnd, WM_PALETTECHANGED, 0, 0);
}
if (window) {
int visState;
/* HIWORD(wParam) is the minimized flag. */
visState = !HIWORD(wParam);
updateWindowState(window, visState);
}
return 0;
/* Colour Palette Management */
case WM_PALETTECHANGED:
if (hwnd == (HWND)wParam) {
/* Don't respond to the message that we sent! */
break;
}
/* fall through to WM_QUERYNEWPALETTE */
case WM_QUERYNEWPALETTE:
window = __glutGetWindow(hwnd);
if (window && window->colormap) {
UnrealizeObject(window->colormap->cmap);
SelectPalette(window->hdc, window->colormap->cmap, FALSE);
RealizePalette(window->hdc);
return TRUE;
}
return FALSE;
case MM_JOY1MOVE:
case MM_JOY1ZMOVE:
window = __glutGetWindow(hwnd);
if (window->joystick) {
JOYINFOEX jix;
int x, y, z;
/* Because WIN32 only supports messages for X, Y, and Z
translations, we must poll for the rest */
jix.dwSize = sizeof(jix);
jix.dwFlags = JOY_RETURNALL;
joyGetPosEx(JOYSTICKID1,&jix);
#define SCALE(v) ((int) ((v - 32767)/32.768))
/* Convert to integer for scaling. */
x = jix.dwXpos;
y = jix.dwYpos;
z = jix.dwZpos;
window->joystick(jix.dwButtons, SCALE(x), SCALE(y), SCALE(z));
return TRUE;
}
return FALSE;
case MM_JOY1BUTTONDOWN:
case MM_JOY1BUTTONUP:
window = __glutGetWindow(hwnd);
if (window->joystick) {
JOYINFOEX jix;
/* Because WIN32 only supports messages for X, Y, and Z
translations, we must poll for the rest */
jix.dwSize = sizeof(jix);
jix.dwFlags = JOY_RETURNALL;
joyGetPosEx(JOYSTICKID1,&jix);
return TRUE;
}
return FALSE;
#if 0
/* Miscellaneous messages (don't really need to enumerate them,
but it's good to know what you're not getting sometimes). */
case WM_DISPLAYCHANGE:
break;
case WM_NCHITTEST:
/* This event is generated by every mouse move event. */
goto defproc;
case WM_NCMOUSEMOVE:
goto defproc;
case WM_NCACTIVATE:
goto defproc;
case WM_NCPAINT:
goto defproc;
case WM_NCCALCSIZE:
goto defproc;
case WM_NCCREATE:
goto defproc;
case WM_NCDESTROY:
goto defproc;
case WM_NCLBUTTONDOWN:
goto defproc;
case WM_SETTEXT:
goto defproc;
case WM_GETTEXT:
goto defproc;
case WM_ACTIVATEAPP:
goto defproc;
case WM_GETICON:
goto defproc;
case WM_ERASEBKGND:
goto defproc;
case WM_WINDOWPOSCHANGING:
goto defproc;
case WM_WINDOWPOSCHANGED:
goto defproc;
case WM_MOUSEACTIVATE:
goto defproc;
case WM_SHOWWINDOW:
goto defproc;
case WM_MOVING:
goto defproc;
case WM_MOVE:
goto defproc;
case WM_KEYUP:
goto defproc;
case WM_CAPTURECHANGED:
goto defproc;
case WM_SYSCOMMAND:
goto defproc;
case WM_ENTERSIZEMOVE:
goto defproc;
case WM_ENTERIDLE:
goto defproc;
#endif
default:
goto defproc;
}
defproc:
return DefWindowProc(hwnd, msg, wParam, lParam);
}
#! smake
#
# Copyright (c) Mark J. Kilgard, 1995, 1998.
#
include $(ROOT)/usr/include/make/commondefs
# NOTE: In my GLUT development tree, many of the C source files for
# GLUT are generated. For this reason, "make full_clobber" will remove
# these generated C files, while "make clobber" will not.
TOP = ../..
TARGETS = libglut.a
LN = ln -s
MV = mv
RM = -rm -rf
HDRS = glutint.h glutstroke.h layerutil.h glutbitmap.h
SRCS = \
glut_bitmap.c \
glut_bwidth.c \
glut_cindex.c \
glut_cmap.c \
glut_cursor.c \
glut_dials.c \
glut_dstr.c \
glut_event.c \
glut_ext.c \
glut_fbc.c \
glut_fullscrn.c \
glut_gamemode.c \
glut_get.c \
glut_glxext.c \
glut_init.c \
glut_input.c \
glut_joy.c \
glut_key.c \
glut_keyctrl.c \
glut_keyup.c \
glut_menu.c \
glut_menu2.c \
glut_mesa.c \
glut_modifier.c \
glut_overlay.c \
glut_shapes.c \
glut_space.c \
glut_stroke.c \
glut_swap.c \
glut_swidth.c \
glut_tablet.c \
glut_teapot.c \
glut_util.c \
glut_vidresize.c \
glut_warp.c \
glut_win.c \
glut_winmisc.c \
layerutil.c
SRCSSEMIGENS = \
glut_8x13.c \
glut_9x15.c \
glut_hel10.c \
glut_hel12.c \
glut_hel18.c \
glut_mroman.c \
glut_roman.c \
glut_tr10.c \
glut_tr24.c
OBJS = $(SRCS:.c=.o) $(SRCSSEMIGENS:.c=.o)
OTHERGENS = y.tab.c y.tab.h strokegen.c strokegen.h strokelex.c
OTHERSRCS = strokegen.y strokelex.l stroke.h
FONTS = Roman.stroke MonoRoman.stroke
# Uncomment the LCDEFS line below if you want to build a version of
# libglut.a that avoids using the SGI "fast atoms" optimization
# introduced in IRIX 6.3. This optimization eliminates serveral X server
# round-trips. If you are building libglut.a on an IRIX 6.3 or later
# machine and want a chance (no guarantees) that GLUT executables built
# against your libglut.a will work on IRIX 6.2 machines, uncomment out
# the LCDEFS line below. Otherwise, you'll get a run-time message about
# "attempted access to unresolvable symbol in XXX: _XSGIFastInternAtom"
#LCDEFS = -DNO_FAST_ATOMS
LCOPTS = -I$(TOP)/include -fullwarn
LWOFF = ,813,852,827,826
LDIRT = *~ $(OTHERGENS) strokegen *.bak hardcopy glutsrc.ps capturexfont *.pure dstr dstr.c *.gen
default: $(TARGETS)
sinclude ObjectType.mk
$(OBJS) : $(HDRS)
libglut.a : $(OBJS)
$(RM) $@
$(AR) crl $@ $(OBJS)
.ORDER : strokegen.h strokegen.c
strokegen.h strokegen.c : strokegen.y
$(YACC) -d strokegen.y
$(MV) y.tab.c strokegen.c
$(MV) y.tab.h strokegen.h
# avoid warnings when compiling lex generated code
strokegen.o : strokegen.c
$(CC) $(CFLAGS) -woff 726,825,635,818,819,820,824,831,835,822,821,1167,1498,1116,1136,1174,1196,803 -c -MDupdate Makedepend strokegen.c
strokelex.c : strokelex.l
$(LEX) strokelex.l
$(MV) lex.yy.c strokelex.c
# avoid warnings when compiling lex generated code
strokelex.o : strokelex.c
$(CC) $(CFLAGS) -woff 831,825,817,835,702,819,635,824,822,1167,1498,1110,1196,1174,803 -c -MDupdate Makedepend strokelex.c
strokegen : strokegen.o strokelex.o
$(CC) -o $@ $(LDFLAGS) strokegen.o strokelex.o -ll
capturexfont : capturexfont.o
$(CC) -o $@ $(LDFLAGS) capturexfont.o -lX11
# glut_roman.c and glut_mroman.c are now checked in, but here are rules to generate them
glut_roman.c.gen : Roman.stroke strokegen
./strokegen -s glutStrokeRoman < Roman.stroke > $@
glut_mroman.c.gen : MonoRoman.stroke strokegen
./strokegen -s glutStrokeMonoRoman < MonoRoman.stroke > $@
glutsrc.ps : $(SRCS)
$(RM) hardcopy
mkdir -p hardcopy
for i in $(SRCS) ;\
do \
grep -v CENTRY $$i | grep -v INDENT- > hardcopy/$$i; \
done
cd hardcopy ; enscript -p ../$@ -G -2r `echo $(SRCS) | fmt -1 | sort`
$(RM) hardcopy
# The bitmap files can be generated using capturexfont, but because
# they require a connection to an X server and potentially different
# X servers have different fonts, these generated files are part
# of the GLUT distribution.
9_BY_15 = -misc-fixed-medium-r-normal--15-140-75-75-C-90-iso8859-1
8_BY_13 = -misc-fixed-medium-r-normal--13-120-75-75-C-80-iso8859-1
TR10 = -adobe-times-medium-r-normal--10-100-75-75-p-54-iso8859-1
TR24 = -adobe-times-medium-r-normal--24-240-75-75-p-124-iso8859-1
HEL10 = -adobe-helvetica-medium-r-normal--10-100-75-75-p-56-iso8859-1
HEL12 = -adobe-helvetica-medium-r-normal--12-120-75-75-p-67-iso8859-1
HEL18 = -adobe-helvetica-medium-r-normal--18-180-75-75-p-98-iso8859-1
semigens : capturexfont
./capturexfont $(9_BY_15) glutBitmap9By15 > glut_9x15.c.gen
./capturexfont $(8_BY_13) glutBitmap8By13 > glut_8x13.c.gen
./capturexfont $(TR10) glutBitmapTimesRoman10 > glut_tr10.c.gen
./capturexfont $(TR24) glutBitmapTimesRoman24 > glut_tr24.c.gen
./capturexfont $(HEL10) glutBitmapHelvetica10 > glut_hel10.c.gen
./capturexfont $(HEL12) glutBitmapHelvetica12 > glut_hel12.c.gen
./capturexfont $(HEL18) glutBitmapHelvetica18 > glut_hel18.c.gen
# unused test rule for test building 16-bit font
JIS = -jis-fixed-medium-r-normal--24-230-75-75-c-240-jisx0208.1983-0
glut_jis.c :
./capturexfont $(JIS) glutBitmapJis > $@
sources: $(SRCS)
symcheck: libglut.a
-nm -Bo libglut.a | grep -v ' d ' | grep -v ' T glut' | grep -v ' D glut' | grep -v ' U ' | grep -v ' T __glut' | grep -v ' t ' | grep -v ' b ' | grep -v ' D __glut' | grep -v ' B __glut'
dstr.c: glut_dstr.c
ln -s glut_dstr.c $@
dstr: dstr.c glut_util.o glut_glxext.o
$(RM) $@
$(CC) -g -o $@ $(CFLAGS) -DTEST dstr.c glut_util.o glut_glxext.o -lGLU -lGL -lXext -lX11 -lm
./glut.h : glut.h
./glutint.h : glutint.h
./glutstroke.h : glutstroke.h
./strokegen.h : strokegen.h
./stroke.h : stroke.h
./layerutil.h : layerutil.h
strokelex.o: strokelex.c strokegen.h
include $(COMMONRULES)
# Makefile for Win32
!include <win32.mak>
TOP = ..
# NOTE: glut_menu.c and glut_glxext.c are NOT compiled into Win32 GLUT
SRCS = glut_8x13.c glut_9x15.c glut_bitmap.c glut_bwidth.c glut_cindex.c glut_cmap.c glut_cursor.c glut_dials.c glut_dstr.c glut_event.c glut_ext.c glut_fbc.c glut_fullscrn.c glut_gamemode.c glut_get.c glut_hel10.c glut_hel12.c glut_hel18.c glut_init.c glut_input.c glut_joy.c glut_key.c glut_keyctrl.c glut_keyup.c glut_mesa.c glut_modifier.c glut_mroman.c glut_overlay.c glut_roman.c glut_shapes.c glut_space.c glut_stroke.c glut_swap.c glut_swidth.c glut_tablet.c glut_teapot.c glut_tr10.c glut_tr24.c glut_util.c glut_vidresize.c glut_warp.c glut_win.c glut_winmisc.c win32_glx.c win32_menu.c win32_util.c win32_winproc.c win32_x11.c
all : glutdll
!include "$(TOP)/mesawin32.mak"
glutdll : $(GLUTDLL)
!IFDEF NODEBUG
OPTIMIZE_CFLAGS = -DNDEBUG
!ENDIF
CFLAGS = $(cvarsdll) $(CFLAGS) $(OPTIMIZE_CFLAGS) -DMESA -DBUILD_GL32
LFLAGS = $(dlllflags) $(lcommon) $(LFLAGS)
OBJS = $(SRCS:.c=.obj)
MS_LIBS = ../lib/$(MESALIB) ../lib/$(GLULIB) winmm.lib $(guilibsdll)
SGI_LIBS = $(SGI_OPENGL) $(SGI_GLU) winmm.lib $(guilibsdll)
MesaGlut.dll : $(OBJS) glut.def
$(link) $(LFLAGS) -out:MesaGlut.dll -def:glut.def $(OBJS) $(MS_LIBS)
@echo "copying GLUT dynamic link library to lib directory..."
-copy $(GLUTDLL) ..\lib
@echo "copying GLUT import library to lib directory..."
-copy $(GLUTLIB) ..\lib
glut.dll : $(OBJS) glut.def
$(link) $(LFLAGS) -out:glut.dll -def:glut.def $(OBJS) $(SGI_LIBS)
install : $(GLUTDLL)
@echo "copying GLUT dynamic link library to system directory..."
-copy $(GLUTDLL) $(DLLINSTALL)
@echo "copying GLUT header file to include directory..."
-copy ..\include\GL\glut.h $(INCLUDEINSTALL)
@echo "copying GLUT import library to library directory..."
-copy $(GLUTLIB) $(LIBINSTALL)
.c.obj :
$(cc) $(CFLAGS) -I . $*.c
# explicit object dependencies for all source files
win32_glx.obj: win32_glx.c win32_glx.h
win32_x11.obj: win32_x11.c win32_x11.h
win32_menu.obj: win32_menu.c glutint.h ..\include\GL\glutf90.h ..\include\GL\glut.h
win32_util.obj: win32_util.c glutint.h ..\include\GL\glutf90.h
win32_winproc.obj: win32_winproc.c glutint.h ..\include\GL\glutf90.h
glut_mroman.obj: glut_mroman.c glutstroke.h glutint.h ..\include\GL\glutf90.h
glut_roman.obj: glut_roman.c glutstroke.h glutint.h ..\include\GL\glutf90.h
glut_hel12.obj: glut_hel12.c glutbitmap.h glutint.h ..\include\GL\glutf90.h
glut_8x13.obj: glut_8x13.c glutbitmap.h glutint.h ..\include\GL\glutf90.h
glut_hel18.obj: glut_hel18.c glutbitmap.h glutint.h ..\include\GL\glutf90.h
glut_9x15.obj: glut_9x15.c glutbitmap.h glutint.h ..\include\GL\glutf90.h
glut_tr10.obj: glut_tr10.c glutbitmap.h glutint.h ..\include\GL\glutf90.h
glut_hel10.obj: glut_hel10.c glutbitmap.h glutint.h ..\include\GL\glutf90.h
glut_tr24.obj: glut_tr24.c glutbitmap.h glutint.h ..\include\GL\glutf90.h
glut_bitmap.obj: glut_bitmap.c glutint.h ..\include\GL\glutf90.h ..\include\GL\glut.h glutwin32.h win32_glx.h win32_x11.h
glut_bwidth.obj: glut_bwidth.c glutint.h ..\include\GL\glutf90.h ..\include\GL\glut.h glutwin32.h win32_glx.h win32_x11.h
glut_cindex.obj: glut_cindex.c glutint.h ..\include\GL\glutf90.h ..\include\GL\glut.h glutwin32.h win32_glx.h win32_x11.h
glut_cmap.obj: glut_cmap.c glutint.h ..\include\GL\glutf90.h ..\include\GL\glut.h glutwin32.h win32_glx.h win32_x11.h
glut_cursor.obj: glut_cursor.c glutint.h ..\include\GL\glutf90.h ..\include\GL\glut.h glutwin32.h win32_glx.h win32_x11.h
glut_dials.obj: glut_dials.c glutint.h ..\include\GL\glutf90.h ..\include\GL\glut.h glutwin32.h win32_glx.h win32_x11.h
glut_dstr.obj: glut_dstr.c glutint.h ..\include\GL\glutf90.h ..\include\GL\glut.h glutwin32.h win32_glx.h win32_x11.h
glut_event.obj: glut_event.c glutint.h ..\include\GL\glutf90.h ..\include\GL\glut.h glutwin32.h win32_glx.h win32_x11.h
glut_ext.obj: glut_ext.c glutint.h ..\include\GL\glutf90.h ..\include\GL\glut.h glutwin32.h win32_glx.h win32_x11.h
glut_fullscrn.obj: glut_fullscrn.c glutint.h ..\include\GL\glutf90.h ..\include\GL\glut.h glutwin32.h win32_glx.h win32_x11.h
glut_gamemode.obj: glut_gamemode.c glutint.h ..\include\GL\glutf90.h ..\include\GL\glut.h glutwin32.h win32_glx.h win32_x11.h
glut_get.obj: glut_get.c glutint.h ..\include\GL\glutf90.h ..\include\GL\glut.h glutwin32.h win32_glx.h win32_x11.h
glut_init.obj: glut_init.c glutint.h ..\include\GL\glutf90.h ..\include\GL\glut.h glutwin32.h win32_glx.h win32_x11.h
glut_input.obj: glut_input.c glutint.h ..\include\GL\glutf90.h ..\include\GL\glut.h glutwin32.h win32_glx.h win32_x11.h
glut_joy.obj: glut_joy.c glutint.h ..\include\GL\glutf90.h ..\include\GL\glut.h glutwin32.h win32_glx.h win32_x11.h
glut_key.obj: glut_key.c glutint.h ..\include\GL\glutf90.h ..\include\GL\glut.h glutwin32.h win32_glx.h win32_x11.h
glut_keyctrl.obj: glut_keyctrl.c glutint.h ..\include\GL\glutf90.h ..\include\GL\glut.h glutwin32.h win32_glx.h win32_x11.h
glut_keyup.obj: glut_keyup.c glutint.h ..\include\GL\glutf90.h ..\include\GL\glut.h glutwin32.h win32_glx.h win32_x11.h
glut_mesa.obj: glut_mesa.c glutint.h ..\include\GL\glutf90.h ..\include\GL\glut.h glutwin32.h win32_glx.h win32_x11.h
glut_modifier.obj: glut_modifier.c glutint.h ..\include\GL\glutf90.h ..\include\GL\glut.h glutwin32.h win32_glx.h win32_x11.h
glut_overlay.obj: glut_overlay.c glutint.h ..\include\GL\glutf90.h ..\include\GL\glut.h glutwin32.h win32_glx.h win32_x11.h
glut_shapes.obj: glut_shapes.c glutint.h ..\include\GL\glutf90.h ..\include\GL\glut.h glutwin32.h win32_glx.h win32_x11.h
glut_space.obj: glut_space.c glutint.h ..\include\GL\glutf90.h ..\include\GL\glut.h glutwin32.h win32_glx.h win32_x11.h
glut_swap.obj: glut_swap.c glutint.h ..\include\GL\glutf90.h ..\include\GL\glut.h glutwin32.h win32_glx.h win32_x11.h
glut_swidth.obj: glut_swidth.c glutint.h ..\include\GL\glutf90.h ..\include\GL\glut.h glutwin32.h win32_glx.h win32_x11.h
glut_tablet.obj: glut_tablet.c glutint.h ..\include\GL\glutf90.h ..\include\GL\glut.h glutwin32.h win32_glx.h win32_x11.h
glut_teapot.obj: glut_teapot.c glutint.h ..\include\GL\glutf90.h ..\include\GL\glut.h glutwin32.h win32_glx.h win32_x11.h
glut_util.obj: glut_util.c glutint.h ..\include\GL\glutf90.h ..\include\GL\glut.h glutwin32.h win32_glx.h win32_x11.h
glut_vidresize.obj: glut_vidresize.c glutint.h ..\include\GL\glutf90.h ..\include\GL\glut.h glutwin32.h win32_glx.h win32_x11.h
glut_warp.obj: glut_warp.c glutint.h ..\include\GL\glutf90.h ..\include\GL\glut.h glutwin32.h win32_glx.h win32_x11.h
glut_win.obj: glut_win.c glutint.h ..\include\GL\glutf90.h ..\include\GL\glut.h glutwin32.h
glut_winmisc.obj: glut_winmisc.c glutint.h ..\include\GL\glutf90.h ..\include\GL\glut.h glutwin32.h win32_glx.h win32_x11.h
prefix=@INSTALL_DIR@
exec_prefix=${prefix}
libdir=${exec_prefix}/@LIB_DIR@
includedir=${prefix}/include
Name: glut
Description: Mesa OpenGL Utility Toolkit library
Requires: gl glu
Version: @VERSION@
Libs: -L${libdir} -lglut
Cflags: -I${includedir}
EXPORTS
glutInit
glutInitDisplayMode
glutInitDisplayString
glutInitWindowPosition
glutInitWindowSize
glutMainLoop
glutCreateWindow
glutCreateSubWindow
glutDestroyWindow
glutPostRedisplay
glutSwapBuffers
glutGetWindow
glutSetWindow
glutSetWindowTitle
glutSetIconTitle
glutPositionWindow
glutReshapeWindow
glutPopWindow
glutPushWindow
glutIconifyWindow
glutShowWindow
glutHideWindow
glutFullScreen
glutSetCursor
glutWarpPointer
glutEstablishOverlay
glutRemoveOverlay
glutUseLayer
glutPostOverlayRedisplay
glutShowOverlay
glutHideOverlay
glutCreateMenu
glutDestroyMenu
glutGetMenu
glutSetMenu
glutAddMenuEntry
glutAddSubMenu
glutChangeToMenuEntry
glutChangeToSubMenu
glutRemoveMenuItem
glutAttachMenu
glutDetachMenu
glutDisplayFunc
glutReshapeFunc
glutKeyboardFunc
glutMouseFunc
glutMotionFunc
glutPassiveMotionFunc
glutEntryFunc
glutVisibilityFunc
glutIdleFunc
glutTimerFunc
glutMenuStateFunc
glutSpecialFunc
glutSpaceballMotionFunc
glutSpaceballRotateFunc
glutSpaceballButtonFunc
glutButtonBoxFunc
glutDialsFunc
glutTabletMotionFunc
glutTabletButtonFunc
glutMenuStatusFunc
glutOverlayDisplayFunc
glutWindowStatusFunc
glutSetColor
glutGetColor
glutCopyColormap
glutGet
glutDeviceGet
glutExtensionSupported
glutGetModifiers
glutLayerGet
glutBitmapCharacter
glutBitmapWidth
glutStrokeCharacter
glutStrokeWidth
glutBitmapLength
glutStrokeLength
glutWireSphere
glutSolidSphere
glutWireCone
glutSolidCone
glutWireCube
glutSolidCube
glutWireTorus
glutSolidTorus
glutWireDodecahedron
glutSolidDodecahedron
glutWireTeapot
glutSolidTeapot
glutWireOctahedron
glutSolidOctahedron
glutWireTetrahedron
glutSolidTetrahedron
glutWireIcosahedron
glutSolidIcosahedron
glutVideoResizeGet
glutSetupVideoResizing
glutStopVideoResizing
glutVideoResize
glutVideoPan
glutReportErrors
DESCRIPTION 'OpenGL Utility Toolkit for Win32'
VERSION 3.7
EXPORTS
glutAddMenuEntry
glutAddSubMenu
glutAttachMenu
glutBitmapCharacter
glutBitmapLength
glutBitmapWidth
glutButtonBoxFunc
glutChangeToMenuEntry
glutChangeToSubMenu
glutCopyColormap
glutCreateMenu
__glutCreateMenuWithExit
glutCreateSubWindow
glutCreateWindow
__glutCreateWindowWithExit
glutDestroyMenu
glutDestroyWindow
glutDetachMenu
glutDeviceGet
glutDialsFunc
glutDisplayFunc
glutEnterGameMode
glutEntryFunc
glutEstablishOverlay
glutExtensionSupported
glutForceJoystickFunc
glutFullScreen
glutGameModeGet
glutGameModeString
glutGet
glutGetColor
glutGetMenu
glutGetModifiers
glutGetWindow
glutHideOverlay
glutHideWindow
glutIconifyWindow
glutIdleFunc
glutIgnoreKeyRepeat
glutInit
__glutInitWithExit
glutInitDisplayMode
glutInitDisplayString
glutInitWindowPosition
glutInitWindowSize
glutJoystickFunc
glutKeyboardFunc
glutKeyboardUpFunc
glutLayerGet
glutLeaveGameMode
glutMainLoop
glutMenuStateFunc
glutMenuStatusFunc
glutMotionFunc
glutMouseFunc
glutOverlayDisplayFunc
glutPassiveMotionFunc
glutPopWindow
glutPositionWindow
glutPostOverlayRedisplay
glutPostRedisplay
glutPostWindowOverlayRedisplay
glutPostWindowRedisplay
glutPushWindow
glutRemoveMenuItem
glutRemoveOverlay
glutReportErrors
glutReshapeFunc
glutReshapeWindow
glutSetColor
glutSetCursor
glutSetIconTitle
glutSetKeyRepeat
glutSetMenu
glutSetWindow
glutSetWindowTitle
glutSetupVideoResizing
glutShowOverlay
glutShowWindow
glutSolidCone
glutSolidCube
glutSolidDodecahedron
glutSolidIcosahedron
glutSolidOctahedron
glutSolidSphere
glutSolidTeapot
glutSolidTetrahedron
glutSolidTorus
glutSpaceballButtonFunc
glutSpaceballMotionFunc
glutSpaceballRotateFunc
glutSpecialFunc
glutSpecialUpFunc
glutStopVideoResizing
glutStrokeCharacter
glutStrokeLength
glutStrokeWidth
glutSwapBuffers
glutTabletButtonFunc
glutTabletMotionFunc
glutTimerFunc
glutUseLayer
glutVideoPan
glutVideoResize
glutVideoResizeGet
glutVisibilityFunc
glutWarpPointer
glutWindowStatusFunc
glutWireCone
glutWireCube
glutWireDodecahedron
glutWireIcosahedron
glutWireOctahedron
glutWireSphere
glutWireTeapot
glutWireTetrahedron
glutWireTorus
glutStrokeRoman
glutBitmap9By15
glutBitmapHelvetica10
glutBitmapHelvetica18
glutBitmapTimesRoman24
; __glutSetFCB
; __glutGetFCB
# Makefile for GLUT for VMS
# contributed by Jouk Jansen joukj@hrem.stm.tudelft.nl
.first
define gl [---.include.gl]
.include [---]mms-config.
##### MACROS #####
GLUT_MAJOR = 3
GLUT_MINOR = 7
VPATH = RCS
INCDIR = [---.include]
LIBDIR = [---.lib]
CFLAGS = /nowarn/include=$(INCDIR)/prefix=all/name=(as_is,short)/float=ieee/ieee=denorm
SOURCES = \
glut_8x13.c \
glut_9x15.c \
glut_bitmap.c \
glut_bwidth.c \
glut_cindex.c \
glut_cmap.c \
glut_cursor.c \
glut_dials.c \
glut_dstr.c \
glut_event.c \
glut_ext.c \
glut_fullscrn.c \
glut_gamemode.c \
glut_get.c \
glut_glxext.c \
glut_hel10.c \
glut_hel12.c \
glut_hel18.c \
glut_init.c \
glut_input.c \
glut_joy.c \
glut_key.c \
glut_keyctrl.c \
glut_keyup.c \
glut_menu.c \
glut_menu2.c \
glut_mesa.c \
glut_modifier.c \
glut_mroman.c \
glut_overlay.c \
glut_roman.c \
glut_shapes.c \
glut_space.c \
glut_stroke.c \
glut_swap.c \
glut_swidth.c \
glut_tablet.c \
glut_teapot.c \
glut_tr10.c \
glut_tr24.c \
glut_util.c \
glut_vidresize.c \
glut_warp.c \
glut_win.c \
glut_winmisc.c \
layerutil.c
OBJECTS0=glut_8x13.obj,\
glut_9x15.obj,\
glut_bitmap.obj,\
glut_bwidth.obj,\
glut_cindex.obj,\
glut_cmap.obj,\
glut_cursor.obj,\
glut_dials.obj,\
glut_dstr.obj,\
glut_event.obj,\
glut_ext.obj,\
glut_fullscrn.obj,\
glut_gamemode.obj
OBJECTS1=glut_get.obj,\
glut_glxext.obj,\
glut_hel10.obj,\
glut_hel12.obj,\
glut_hel18.obj,\
glut_init.obj,\
glut_input.obj,\
glut_joy.obj,\
glut_key.obj,\
glut_keyctrl.obj,\
glut_keyup.obj,\
glut_menu.obj,\
glut_menu2.obj,\
glut_mesa.obj,\
glut_modifier.obj
OBJECTS2=glut_mroman.obj,\
glut_overlay.obj,\
glut_roman.obj,\
glut_shapes.obj,\
glut_space.obj,\
glut_stroke.obj,\
glut_swap.obj,\
glut_swidth.obj,\
glut_tablet.obj,\
glut_teapot.obj,\
glut_tr10.obj,\
glut_tr24.obj,\
glut_util.obj,\
glut_vidresize.obj
OBJECTS3=glut_warp.obj,\
glut_win.obj,\
glut_winmisc.obj,\
layerutil.obj
##### RULES #####
VERSION=Glut V3.7
##### TARGETS #####
# Make the library
$(LIBDIR)$(GLUT_LIB) : $(OBJECTS0) $(OBJECTS1) $(OBJECTS2) $(OBJECTS3)
@ $(MAKELIB) $(GLUT_LIB) $(OBJECTS0)
@ library $(GLUT_LIB) $(OBJECTS1)
@ library $(GLUT_LIB) $(OBJECTS2)
@ library $(GLUT_LIB) $(OBJECTS3)
@ rename $(GLUT_LIB)* $(LIBDIR)
.ifdef SHARE
@ WRITE_ SYS$OUTPUT " generating mesagl1.opt"
@ OPEN_/WRITE FILE mesagl1.opt
@ WRITE_ FILE "!"
@ WRITE_ FILE "! mesagl1.opt generated by DESCRIP.$(MMS_EXT)"
@ WRITE_ FILE "!"
@ WRITE_ FILE "IDENTIFICATION=""$(VERSION)"""
@ WRITE_ FILE "GSMATCH=LEQUAL,3,7
@ WRITE_ FILE "$(OBJECTS0)"
@ WRITE_ FILE "$(OBJECTS1)"
@ WRITE_ FILE "$(OBJECTS2)"
@ WRITE_ FILE "$(OBJECTS3)"
@ WRITE_ FILE "[---.lib]libmesaglu.exe/SHARE"
@ WRITE_ FILE "[---.lib]libmesagl.exe/SHARE"
@ write file "sys$library:decw$xmulibshr.exe/share"
@ WRITE_ FILE "SYS$SHARE:DECW$XEXTLIBSHR/SHARE"
@ WRITE_ FILE "SYS$SHARE:DECW$XLIBSHR/SHARE"
@ CLOSE_ FILE
@ WRITE_ SYS$OUTPUT " generating mesagl.map ..."
@ CXXLINK_/NODEB/NOSHARE/NOEXE/MAP=mesagl.map/FULL mesagl1.opt/OPT
@ WRITE_ SYS$OUTPUT " analyzing mesagl.map ..."
@ @[---.vms]ANALYZE_MAP.COM mesagl.map mesagl.opt
@ WRITE_ SYS$OUTPUT " linking $(GLUT_SHAR) ..."
@ CXXLINK_/NODEB/SHARE=$(GLUT_SHAR)/MAP=mesagl.map/FULL mesagl1.opt/opt,mesagl.opt/opt
@ rename $(GLUT_SHAR)* $(LIBDIR)
.endif
clean :
delete *.obj;*
purge
include mms_depend.
glut_8x13.obj : glut_8x13.c
glut_9x15.obj : glut_9x15.c
glut_bitmap.obj : glut_bitmap.c
glut_bwidth.obj : glut_bwidth.c
glut_cindex.obj : glut_cindex.c
glut_cmap.obj : glut_cmap.c
glut_cursor.obj : glut_cursor.c
glut_dials.obj : glut_dials.c
glut_dstr.obj : glut_dstr.c
glut_event.obj : glut_event.c
glut_ext.obj : glut_ext.c
glut_fullscrn.obj : glut_fullscrn.c
glut_gamemode.obj : glut_gamemode.c
glut_get.obj : glut_get.c
glut_glxext.obj : glut_glxext.c
glut_hel10.obj : glut_hel10.c
glut_hel12.obj : glut_hel12.c
glut_hel18.obj : glut_hel18.c
glut_init.obj : glut_init.c
glut_input.obj : glut_input.c
glut_joy.obj : glut_joy.c
glut_key.obj : glut_key.c
glut_keyctrl.obj : glut_keyctrl.c
glut_keyup.obj : glut_keyup.c
glut_menu.obj : glut_menu.c
glut_menu2.obj : glut_menu2.c
glut_mesa.obj : glut_mesa.c
glut_modifier.obj : glut_modifier.c
glut_mroman.obj : glut_mroman.c
glut_overlay.obj : glut_overlay.c
glut_roman.obj : glut_roman.c
glut_shapes.obj : glut_shapes.c
glut_space.obj : glut_space.c
glut_stroke.obj : glut_stroke.c
glut_swap.obj : glut_swap.c
glut_swidth.obj : glut_swidth.c
glut_tablet.obj : glut_tablet.c
glut_teapot.obj : glut_teapot.c
glut_tr10.obj : glut_tr10.c
glut_tr24.obj : glut_tr24.c
glut_util.obj : glut_util.c
glut_vidresize.obj : glut_vidresize.c
glut_warp.obj : glut_warp.c
glut_win.obj : glut_win.c
glut_winmisc.obj : glut_winmisc.c
layerutil.obj : layerutil.c
# DO NOT DELETE
glut_8x13.obj : glutbitmap.h [---.include.gl]gl.h
glut_9x15.obj : glutbitmap.h [---.include.gl]gl.h
glut_bitmap.obj : [---.include.gl]glut.h [---.include.gl]gl.h [---.include.gl]glu.h
glut_bitmap.obj : glutint.h [---.include.gl]glx.h [---.include.gl]xmesa.h
glut_bitmap.obj : glutbitmap.h
glut_bwidth.obj : [---.include.gl]glut.h [---.include.gl]gl.h [---.include.gl]glu.h
glut_bwidth.obj : glutint.h [---.include.gl]glx.h [---.include.gl]xmesa.h
glut_bwidth.obj : glutbitmap.h
glut_cindex.obj : [---.include.gl]glut.h [---.include.gl]gl.h [---.include.gl]glu.h
glut_cindex.obj : glutint.h [---.include.gl]glx.h [---.include.gl]xmesa.h
glut_cindex.obj : layerutil.h
glut_cursor.obj : [---.include.gl]glut.h [---.include.gl]gl.h [---.include.gl]glu.h
glut_cursor.obj : glutint.h [---.include.gl]glx.h [---.include.gl]xmesa.h
glut_dials.obj : glutint.h [---.include.gl]glx.h [---.include.gl]gl.h
glut_dials.obj : [---.include.gl]xmesa.h [---.include.gl]glut.h [---.include.gl]glu.h
glut_dstr.obj : glutint.h [---.include.gl]glx.h [---.include.gl]gl.h
glut_dstr.obj : [---.include.gl]xmesa.h [---.include.gl]glut.h [---.include.gl]glu.h
glut_event.obj : [---.include.gl]glut.h [---.include.gl]gl.h [---.include.gl]glu.h
glut_event.obj : glutint.h [---.include.gl]glx.h [---.include.gl]xmesa.h
glut_ext.obj : [---.include.gl]glut.h [---.include.gl]gl.h [---.include.gl]glu.h
glut_ext.obj : glutint.h [---.include.gl]glx.h [---.include.gl]xmesa.h
glut_fullscrn.obj : glutint.h [---.include.gl]glx.h [---.include.gl]gl.h
glut_fullscrn.obj : [---.include.gl]xmesa.h [---.include.gl]glut.h
glut_fullscrn.obj : [---.include.gl]glu.h
glut_get.obj : [---.include.gl]glut.h [---.include.gl]gl.h [---.include.gl]glu.h
glut_get.obj : glutint.h [---.include.gl]glx.h [---.include.gl]xmesa.h
glut_hel10.obj : glutbitmap.h [---.include.gl]gl.h
glut_hel12.obj : glutbitmap.h [---.include.gl]gl.h
glut_hel18.obj : glutbitmap.h [---.include.gl]gl.h
glut_init.obj : [---.include.gl]glut.h [---.include.gl]gl.h [---.include.gl]glu.h
glut_init.obj : glutint.h [---.include.gl]glx.h [---.include.gl]xmesa.h
glut_menu.obj : [---.include.gl]glut.h [---.include.gl]gl.h [---.include.gl]glu.h
glut_menu.obj : glutint.h [---.include.gl]glx.h [---.include.gl]xmesa.h layerutil.h
glut_mesa.obj : glutint.h [---.include.gl]glx.h [---.include.gl]gl.h
glut_mesa.obj : [---.include.gl]xmesa.h [---.include.gl]glut.h [---.include.gl]glu.h
glut_modifier.obj : glutint.h [---.include.gl]glx.h [---.include.gl]gl.h
glut_modifier.obj : [---.include.gl]xmesa.h [---.include.gl]glut.h
glut_modifier.obj : [---.include.gl]glu.h
glut_mroman.obj : glutstroke.h
glut_overlay.obj : [---.include.gl]glut.h [---.include.gl]gl.h [---.include.gl]glu.h
glut_overlay.obj : glutint.h [---.include.gl]glx.h [---.include.gl]xmesa.h
glut_overlay.obj : layerutil.h
glut_roman.obj : glutstroke.h
glut_shapes.obj : [---.include.gl]glut.h [---.include.gl]gl.h [---.include.gl]glu.h
glut_shapes.obj : glutint.h [---.include.gl]glx.h [---.include.gl]xmesa.h
glut_space.obj : glutint.h [---.include.gl]glx.h [---.include.gl]gl.h
glut_space.obj : [---.include.gl]xmesa.h [---.include.gl]glut.h [---.include.gl]glu.h
glut_stroke.obj : [---.include.gl]glut.h [---.include.gl]gl.h [---.include.gl]glu.h
glut_stroke.obj : glutint.h [---.include.gl]glx.h [---.include.gl]xmesa.h
glut_stroke.obj : glutstroke.h
glut_swidth.obj : [---.include.gl]glut.h [---.include.gl]gl.h [---.include.gl]glu.h
glut_swidth.obj : glutint.h [---.include.gl]glx.h [---.include.gl]xmesa.h
glut_swidth.obj : glutstroke.h
glut_tablet.obj : glutint.h [---.include.gl]glx.h [---.include.gl]gl.h
glut_tablet.obj : [---.include.gl]xmesa.h [---.include.gl]glut.h [---.include.gl]glu.h
glut_teapot.obj : [---.include.gl]glut.h [---.include.gl]gl.h [---.include.gl]glu.h
glut_tr10.obj : glutbitmap.h [---.include.gl]gl.h
glut_tr24.obj : glutbitmap.h [---.include.gl]gl.h
glut_util.obj : [---.include.gl]glut.h [---.include.gl]gl.h [---.include.gl]glu.h
glut_util.obj : glutint.h [---.include.gl]glx.h [---.include.gl]xmesa.h
glut_vidresize.obj : [---.include.gl]glx.h [---.include.gl]gl.h
glut_vidresize.obj : [---.include.gl]xmesa.h glutint.h [---.include.gl]glut.h
glut_vidresize.obj : [---.include.gl]glu.h
glut_warp.obj : [---.include.gl]glut.h [---.include.gl]gl.h [---.include.gl]glu.h
glut_warp.obj : glutint.h [---.include.gl]glx.h [---.include.gl]xmesa.h
glut_win.obj : [---.include.gl]glut.h [---.include.gl]gl.h [---.include.gl]glu.h
glut_win.obj : glutint.h [---.include.gl]glx.h [---.include.gl]xmesa.h
glut_winmisc.obj : [---.include.gl]glut.h [---.include.gl]gl.h [---.include.gl]glu.h
glut_winmisc.obj : glutint.h [---.include.gl]glx.h [---.include.gl]xmesa.h
layerutil.obj : layerutil.h
/* Copyright (c) Mark J. Kilgard, 1994. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
/* capturexfont.c connects to an X server and downloads a
bitmap font from which a C source file is generated,
encoding the font for GLUT's use. Example usage:
capturexfont.c 9x15 glutBitmap9By15 > glut_9x15.c */
#ifdef __VMS
#include <GL/vms_x_fix.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <GL/gl.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#define MAX_GLYPHS_PER_GRAB 512 /* This is big enough for 2^9
glyph character sets */
static void
outputChar(int num, int width, int height,
int xoff, int yoff, int advance, int data)
{
if (width == 0 || height == 0) {
printf("#ifdef _WIN32\n");
printf("/* XXX Work around Microsoft OpenGL 1.1 bug where glBitmap with\n");
printf(" a height or width of zero does not advance the raster position\n");
printf(" as specified by OpenGL. (Cosmo OpenGL does not have this bug.) */\n");
printf("static const GLubyte ch%ddata[] = { 0x0 };\n", num);
printf("static const BitmapCharRec ch%d = {", num);
printf("%d,", 0);
printf("%d,", 0);
printf("%d,", xoff);
printf("%d,", yoff);
printf("%d,", advance);
printf("ch%ddata", num);
printf("};\n");
printf("#else\n");
}
printf("static const BitmapCharRec ch%d = {", num);
printf("%d,", width);
printf("%d,", height);
printf("%d,", xoff);
printf("%d,", yoff);
printf("%d,", advance);
if (data) {
printf("ch%ddata", num);
} else {
printf("0");
}
printf("};\n");
if (width == 0 || height == 0) {
printf("#endif\n");
}
printf("\n");
}
/* Can't just use isprint because it only works for the range
of ASCII characters (ie, TRUE for isascii) and capturexfont
might be run on 16-bit fonts. */
#define PRINTABLE(ch) (isascii(ch) ? isprint(ch) : 0)
void
captureXFont(Display * dpy, Font font, char *xfont, char *name)
{
int first, last, count;
int cnt, len;
Pixmap offscreen;
Window drawable;
XFontStruct *fontinfo;
XImage *image;
GC xgc;
XGCValues values;
int width, height;
int i, j, k;
XCharStruct *charinfo;
XChar2b character;
GLubyte *bitmapData;
int x, y;
int spanLength;
int charWidth, charHeight, maxSpanLength, pixwidth;
int grabList[MAX_GLYPHS_PER_GRAB];
int glyphsPerGrab = MAX_GLYPHS_PER_GRAB;
int numToGrab;
int rows, pages, byte1, byte2, index;
int nullBitmap;
drawable = RootWindow(dpy, DefaultScreen(dpy));
fontinfo = XQueryFont(dpy, font);
pages = fontinfo->max_char_or_byte2 - fontinfo->min_char_or_byte2 + 1;
first = (fontinfo->min_byte1 << 8) + fontinfo->min_char_or_byte2;
last = (fontinfo->max_byte1 << 8) + fontinfo->max_char_or_byte2;
count = last - first + 1;
width = fontinfo->max_bounds.rbearing -
fontinfo->min_bounds.lbearing;
height = fontinfo->max_bounds.ascent +
fontinfo->max_bounds.descent;
/* 16-bit fonts have more than one row; indexing into
per_char is trickier. */
rows = fontinfo->max_byte1 - fontinfo->min_byte1 + 1;
maxSpanLength = (width + 7) / 8;
/* For portability reasons we don't use alloca for
bitmapData, but we could. */
bitmapData = malloc(height * maxSpanLength);
/* Be careful determining the width of the pixmap; the X
protocol allows pixmaps of width 2^16-1 (unsigned short
size) but drawing coordinates max out at 2^15-1 (signed
short size). If the width is too large, we need to limit
the glyphs per grab. */
if ((glyphsPerGrab * 8 * maxSpanLength) >= (1 << 15)) {
glyphsPerGrab = (1 << 15) / (8 * maxSpanLength);
}
pixwidth = glyphsPerGrab * 8 * maxSpanLength;
offscreen = XCreatePixmap(dpy, drawable, pixwidth, height, 1);
values.font = font;
values.background = 0;
values.foreground = 0;
xgc = XCreateGC(dpy, offscreen,
GCFont | GCBackground | GCForeground, &values);
XFillRectangle(dpy, offscreen, xgc, 0, 0,
8 * maxSpanLength * glyphsPerGrab, height);
XSetForeground(dpy, xgc, 1);
numToGrab = 0;
if (fontinfo->per_char == NULL) {
charinfo = &(fontinfo->min_bounds);
charWidth = charinfo->rbearing - charinfo->lbearing;
charHeight = charinfo->ascent + charinfo->descent;
spanLength = (charWidth + 7) / 8;
}
printf("\n/* GENERATED FILE -- DO NOT MODIFY */\n\n");
printf("#include \"glutbitmap.h\"\n\n");
for (i = first; count; i++, count--) {
int undefined;
if (rows == 1) {
undefined = (fontinfo->min_char_or_byte2 > i ||
fontinfo->max_char_or_byte2 < i);
} else {
byte2 = i & 0xff;
byte1 = i >> 8;
undefined = (fontinfo->min_char_or_byte2 > byte2 ||
fontinfo->max_char_or_byte2 < byte2 ||
fontinfo->min_byte1 > byte1 ||
fontinfo->max_byte1 < byte1);
}
if (undefined) {
goto PossiblyDoGrab;
}
if (fontinfo->per_char != NULL) {
if (rows == 1) {
index = i - fontinfo->min_char_or_byte2;
} else {
byte2 = i & 0xff;
byte1 = i >> 8;
index =
(byte1 - fontinfo->min_byte1) * pages +
(byte2 - fontinfo->min_char_or_byte2);
}
charinfo = &(fontinfo->per_char[index]);
charWidth = charinfo->rbearing - charinfo->lbearing;
charHeight = charinfo->ascent + charinfo->descent;
if (charWidth == 0 || charHeight == 0) {
if (charinfo->width != 0) {
/* Still must move raster pos even if empty character
*/
outputChar(i, 0, 0, 0, 0, charinfo->width, 0);
}
goto PossiblyDoGrab;
}
}
grabList[numToGrab] = i;
character.byte2 = i & 255;
character.byte1 = i >> 8;
/* XXX We could use XDrawImageString16 which would also
paint the backing rectangle but X server bugs in some
scalable font rasterizers makes it more effective to do
XFillRectangles to clear the pixmap and then
XDrawImage16 for the text. */
XDrawString16(dpy, offscreen, xgc,
-charinfo->lbearing + 8 * maxSpanLength * numToGrab,
charinfo->ascent, &character, 1);
numToGrab++;
PossiblyDoGrab:
if (numToGrab >= glyphsPerGrab || count == 1) {
image = XGetImage(dpy, offscreen,
0, 0, pixwidth, height, 1, XYPixmap);
for (j = numToGrab - 1; j >= 0; j--) {
if (fontinfo->per_char != NULL) {
byte2 = grabList[j] & 0xff;
byte1 = grabList[j] >> 8;
index =
(byte1 - fontinfo->min_byte1) * pages +
(byte2 - fontinfo->min_char_or_byte2);
charinfo = &(fontinfo->per_char[index]);
charWidth = charinfo->rbearing - charinfo->lbearing;
charHeight = charinfo->ascent + charinfo->descent;
spanLength = (charWidth + 7) / 8;
}
memset(bitmapData, 0, height * spanLength);
for (y = 0; y < charHeight; y++) {
for (x = 0; x < charWidth; x++) {
if (XGetPixel(image, j * maxSpanLength * 8 + x,
charHeight - 1 - y)) {
/* Little endian machines (such as DEC Alpha)
could benefit from reversing the bit order
here and changing the GL_UNPACK_LSB_FIRST
parameter in glutBitmapCharacter to GL_TRUE. */
bitmapData[y * spanLength + x / 8] |=
(1 << (7 - (x & 7)));
}
}
}
if (PRINTABLE(grabList[j])) {
printf("/* char: 0x%x '%c' */\n\n",
grabList[j], grabList[j]);
} else {
printf("/* char: 0x%x */\n\n", grabList[j]);
}
/* Determine if the bitmap is null. */
nullBitmap = 1;
len = (charinfo->ascent + charinfo->descent) *
((charinfo->rbearing - charinfo->lbearing + 7) / 8);
cnt = 0;
while (cnt < len) {
for (k = 0; k < 16 && cnt < len; k++, cnt++) {
if (bitmapData[cnt] != 0) {
nullBitmap = 0;
}
}
}
if (!nullBitmap) {
printf("static const GLubyte ch%ddata[] = {\n", grabList[j]);
len = (charinfo->ascent + charinfo->descent) *
((charinfo->rbearing - charinfo->lbearing + 7) / 8);
cnt = 0;
while (cnt < len) {
for (k = 0; k < 16 && cnt < len; k++, cnt++) {
printf("0x%x,", bitmapData[cnt]);
}
printf("\n");
}
printf("};\n\n");
} else {
charWidth = 0;
charHeight = 0;
}
outputChar(grabList[j], charWidth, charHeight,
-charinfo->lbearing, charinfo->descent,
charinfo->width, !nullBitmap);
}
XDestroyImage(image);
numToGrab = 0;
if (count > 0) {
XSetForeground(dpy, xgc, 0);
XFillRectangle(dpy, offscreen, xgc, 0, 0,
8 * maxSpanLength * glyphsPerGrab, height);
XSetForeground(dpy, xgc, 1);
}
}
}
XFreeGC(dpy, xgc);
XFreePixmap(dpy, offscreen);
/* For portability reasons we don't use alloca for
bitmapData, but we could. */
free(bitmapData);
printf("static const BitmapCharRec * const chars[] = {\n");
for (i = first; i <= last; i++) {
int undefined;
byte2 = i & 0xff;
byte1 = i >> 8;
undefined = (fontinfo->min_char_or_byte2 > byte2 ||
fontinfo->max_char_or_byte2 < byte2 ||
fontinfo->min_byte1 > byte1 ||
fontinfo->max_byte1 < byte1);
if (undefined) {
printf("0,\n");
} else {
if (fontinfo->per_char != NULL) {
if (rows == 1) {
index = i - fontinfo->min_char_or_byte2;
} else {
byte2 = i & 0xff;
byte1 = i >> 8;
index =
(byte1 - fontinfo->min_byte1) * pages +
(byte2 - fontinfo->min_char_or_byte2);
}
charinfo = &(fontinfo->per_char[index]);
charWidth = charinfo->rbearing - charinfo->lbearing;
charHeight = charinfo->ascent + charinfo->descent;
if (charWidth == 0 || charHeight == 0) {
if (charinfo->width == 0) {
printf("0,\n");
continue;
}
}
}
printf("&ch%d,\n", i);
}
}
printf("};\n\n");
printf("const BitmapFontRec %s = {\n", name);
printf("\"%s\",\n", xfont);
printf("%d,\n", last - first + 1);
printf("%d,\n", first);
printf("chars\n");
printf("};\n\n");
XFreeFont(dpy, fontinfo);
}
int
main(int argc, char **argv)
{
Display *dpy;
Font font;
if (argc != 3) {
fprintf(stderr, "usage: capturexfont XFONT NAME\n");
exit(1);
}
dpy = XOpenDisplay(NULL);
if (dpy == NULL) {
fprintf(stderr, "capturexfont: could not open X display\n");
exit(1);
}
font = XLoadFont(dpy, argv[1]);
if (font == None) {
fprintf(stderr, "capturexfont: bad font\n");
exit(1);
}
captureXFont(dpy, font, argv[1], argv[2]);
XCloseDisplay(dpy);
return 0;
}
/* GENERATED FILE -- DO NOT MODIFY */
#define glutBitmap8By13 XXX
#include "glutbitmap.h"
#undef glutBitmap8By13
#ifdef _WIN32
/* XXX Work around Microsoft OpenGL 1.1 bug where glBitmap with
a height or width of zero does not advance the raster position
as specified by OpenGL. (Cosmo OpenGL does not have this bug.) */
static const GLubyte ch0data[] = { 0x0 };
static const BitmapCharRec ch0 = {1,1,0,0,8,ch0data};
#else
static const BitmapCharRec ch0 = {0,0,0,0,8,0};
#endif
#ifdef _WIN32
/* XXX Work around Microsoft OpenGL 1.1 bug where glBitmap with
a height or width of zero does not advance the raster position
as specified by OpenGL. (Cosmo OpenGL does not have this bug.) */
static const GLubyte ch32data[] = { 0x0 };
static const BitmapCharRec ch32 = {1,1,0,0,8,ch32data};
#else
static const BitmapCharRec ch32 = {0,0,0,0,8,0};
#endif
#ifdef _WIN32
/* XXX Work around Microsoft OpenGL 1.1 bug where glBitmap with
a height or width of zero does not advance the raster position
as specified by OpenGL. (Cosmo OpenGL does not have this bug.) */
static const GLubyte ch127data[] = { 0x0 };
static const BitmapCharRec ch127 = {1,1,0,0,8,ch127data};
#else
static const BitmapCharRec ch127 = {0,0,0,0,8,0};
#endif
#ifdef _WIN32
/* XXX Work around Microsoft OpenGL 1.1 bug where glBitmap with
a height or width of zero does not advance the raster position
as specified by OpenGL. (Cosmo OpenGL does not have this bug.) */
static const GLubyte ch160data[] = { 0x0 };
static const BitmapCharRec ch160 = {1,1,0,0,8,ch160data};
#else
static const BitmapCharRec ch160 = {0,0,0,0,8,0};
#endif
/* char: 0xff */
static const GLubyte ch255data[] = {
0x78,0x84,0x4,0x74,0x8c,0x84,0x84,0x84,0x0,0x0,0x48,0x48,
};
static const BitmapCharRec ch255 = {6,12,-1,2,8,ch255data};
/* char: 0xfe */
static const GLubyte ch254data[] = {
0x80,0x80,0xb8,0xc4,0x84,0x84,0xc4,0xb8,0x80,0x80,
};
static const BitmapCharRec ch254 = {6,10,-1,2,8,ch254data};
/* char: 0xfd */
static const GLubyte ch253data[] = {
0x78,0x84,0x4,0x74,0x8c,0x84,0x84,0x84,0x0,0x0,0x20,0x10,
};
static const BitmapCharRec ch253 = {6,12,-1,2,8,ch253data};
/* char: 0xfc */
static const GLubyte ch252data[] = {
0x74,0x88,0x88,0x88,0x88,0x88,0x0,0x0,0x48,0x48,
};
static const BitmapCharRec ch252 = {6,10,-1,0,8,ch252data};
/* char: 0xfb */
static const GLubyte ch251data[] = {
0x74,0x88,0x88,0x88,0x88,0x88,0x0,0x0,0x48,0x30,
};
static const BitmapCharRec ch251 = {6,10,-1,0,8,ch251data};
/* char: 0xfa */
static const GLubyte ch250data[] = {
0x74,0x88,0x88,0x88,0x88,0x88,0x0,0x0,0x20,0x10,
};
static const BitmapCharRec ch250 = {6,10,-1,0,8,ch250data};
/* char: 0xf9 */
static const GLubyte ch249data[] = {
0x74,0x88,0x88,0x88,0x88,0x88,0x0,0x0,0x10,0x20,
};
static const BitmapCharRec ch249 = {6,10,-1,0,8,ch249data};
/* char: 0xf8 */
static const GLubyte ch248data[] = {
0x80,0x78,0xc4,0xa4,0x94,0x8c,0x78,0x4,
};
static const BitmapCharRec ch248 = {6,8,-1,1,8,ch248data};
/* char: 0xf7 */
static const GLubyte ch247data[] = {
0x20,0x20,0x0,0xf8,0x0,0x20,0x20,
};
static const BitmapCharRec ch247 = {5,7,-1,-1,8,ch247data};
/* char: 0xf6 */
static const GLubyte ch246data[] = {
0x78,0x84,0x84,0x84,0x84,0x78,0x0,0x0,0x48,0x48,
};
static const BitmapCharRec ch246 = {6,10,-1,0,8,ch246data};
/* char: 0xf5 */
static const GLubyte ch245data[] = {
0x78,0x84,0x84,0x84,0x84,0x78,0x0,0x0,0x50,0x28,
};
static const BitmapCharRec ch245 = {6,10,-1,0,8,ch245data};
/* char: 0xf4 */
static const GLubyte ch244data[] = {
0x78,0x84,0x84,0x84,0x84,0x78,0x0,0x0,0x48,0x30,
};
static const BitmapCharRec ch244 = {6,10,-1,0,8,ch244data};
/* char: 0xf3 */
static const GLubyte ch243data[] = {
0x78,0x84,0x84,0x84,0x84,0x78,0x0,0x0,0x20,0x10,
};
static const BitmapCharRec ch243 = {6,10,-1,0,8,ch243data};
/* char: 0xf2 */
static const GLubyte ch242data[] = {
0x78,0x84,0x84,0x84,0x84,0x78,0x0,0x0,0x10,0x20,
};
static const BitmapCharRec ch242 = {6,10,-1,0,8,ch242data};
/* char: 0xf1 */
static const GLubyte ch241data[] = {
0x84,0x84,0x84,0x84,0xc4,0xb8,0x0,0x0,0x50,0x28,
};
static const BitmapCharRec ch241 = {6,10,-1,0,8,ch241data};
/* char: 0xf0 */
static const GLubyte ch240data[] = {
0x78,0x84,0x84,0x84,0x84,0x78,0x8,0x50,0x30,0x48,
};
static const BitmapCharRec ch240 = {6,10,-1,0,8,ch240data};
/* char: 0xef */
static const GLubyte ch239data[] = {
0xf8,0x20,0x20,0x20,0x20,0x60,0x0,0x0,0x50,0x50,
};
static const BitmapCharRec ch239 = {5,10,-1,0,8,ch239data};
/* char: 0xee */
static const GLubyte ch238data[] = {
0xf8,0x20,0x20,0x20,0x20,0x60,0x0,0x0,0x90,0x60,
};
static const BitmapCharRec ch238 = {5,10,-1,0,8,ch238data};
/* char: 0xed */
static const GLubyte ch237data[] = {
0xf8,0x20,0x20,0x20,0x20,0x60,0x0,0x0,0x40,0x20,
};
static const BitmapCharRec ch237 = {5,10,-1,0,8,ch237data};
/* char: 0xec */
static const GLubyte ch236data[] = {
0xf8,0x20,0x20,0x20,0x20,0x60,0x0,0x0,0x20,0x40,
};
static const BitmapCharRec ch236 = {5,10,-1,0,8,ch236data};
/* char: 0xeb */
static const GLubyte ch235data[] = {
0x78,0x84,0x80,0xfc,0x84,0x78,0x0,0x0,0x48,0x48,
};
static const BitmapCharRec ch235 = {6,10,-1,0,8,ch235data};
/* char: 0xea */
static const GLubyte ch234data[] = {
0x78,0x84,0x80,0xfc,0x84,0x78,0x0,0x0,0x48,0x30,
};
static const BitmapCharRec ch234 = {6,10,-1,0,8,ch234data};
/* char: 0xe9 */
static const GLubyte ch233data[] = {
0x78,0x84,0x80,0xfc,0x84,0x78,0x0,0x0,0x20,0x10,
};
static const BitmapCharRec ch233 = {6,10,-1,0,8,ch233data};
/* char: 0xe8 */
static const GLubyte ch232data[] = {
0x78,0x84,0x80,0xfc,0x84,0x78,0x0,0x0,0x10,0x20,
};
static const BitmapCharRec ch232 = {6,10,-1,0,8,ch232data};
/* char: 0xe7 */
static const GLubyte ch231data[] = {
0x20,0x10,0x78,0x84,0x80,0x80,0x84,0x78,
};
static const BitmapCharRec ch231 = {6,8,-1,2,8,ch231data};
/* char: 0xe6 */
static const GLubyte ch230data[] = {
0x6c,0x92,0x90,0x7c,0x12,0x6c,
};
static const BitmapCharRec ch230 = {7,6,0,0,8,ch230data};
/* char: 0xe5 */
static const GLubyte ch229data[] = {
0x74,0x8c,0x84,0x7c,0x4,0x78,0x0,0x30,0x48,0x30,
};
static const BitmapCharRec ch229 = {6,10,-1,0,8,ch229data};
/* char: 0xe4 */
static const GLubyte ch228data[] = {
0x74,0x8c,0x84,0x7c,0x4,0x78,0x0,0x0,0x48,0x48,
};
static const BitmapCharRec ch228 = {6,10,-1,0,8,ch228data};
/* char: 0xe3 */
static const GLubyte ch227data[] = {
0x74,0x8c,0x84,0x7c,0x4,0x78,0x0,0x0,0x50,0x28,
};
static const BitmapCharRec ch227 = {6,10,-1,0,8,ch227data};
/* char: 0xe2 */
static const GLubyte ch226data[] = {
0x74,0x8c,0x84,0x7c,0x4,0x78,0x0,0x0,0x48,0x30,
};
static const BitmapCharRec ch226 = {6,10,-1,0,8,ch226data};
/* char: 0xe1 */
static const GLubyte ch225data[] = {
0x74,0x8c,0x84,0x7c,0x4,0x78,0x0,0x0,0x20,0x10,
};
static const BitmapCharRec ch225 = {6,10,-1,0,8,ch225data};
/* char: 0xe0 */
static const GLubyte ch224data[] = {
0x74,0x8c,0x84,0x7c,0x4,0x78,0x0,0x0,0x10,0x20,
};
static const BitmapCharRec ch224 = {6,10,-1,0,8,ch224data};
/* char: 0xdf */
static const GLubyte ch223data[] = {
0x80,0xb8,0xc4,0x84,0x84,0xf8,0x84,0x84,0x78,
};
static const BitmapCharRec ch223 = {6,9,-1,1,8,ch223data};
/* char: 0xde */
static const GLubyte ch222data[] = {
0x80,0x80,0x80,0xf8,0x84,0x84,0x84,0xf8,0x80,
};
static const BitmapCharRec ch222 = {6,9,-1,0,8,ch222data};
/* char: 0xdd */
static const GLubyte ch221data[] = {
0x20,0x20,0x20,0x20,0x50,0x88,0x88,0x0,0x20,0x10,
};
static const BitmapCharRec ch221 = {5,10,-1,0,8,ch221data};
/* char: 0xdc */
static const GLubyte ch220data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x0,0x48,0x48,
};
static const BitmapCharRec ch220 = {6,10,-1,0,8,ch220data};
/* char: 0xdb */
static const GLubyte ch219data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x0,0x48,0x30,
};
static const BitmapCharRec ch219 = {6,10,-1,0,8,ch219data};
/* char: 0xda */
static const GLubyte ch218data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x0,0x20,0x10,
};
static const BitmapCharRec ch218 = {6,10,-1,0,8,ch218data};
/* char: 0xd9 */
static const GLubyte ch217data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x0,0x10,0x20,
};
static const BitmapCharRec ch217 = {6,10,-1,0,8,ch217data};
/* char: 0xd8 */
static const GLubyte ch216data[] = {
0x80,0x78,0xc4,0xa4,0xa4,0xa4,0x94,0x94,0x8c,0x78,0x4,
};
static const BitmapCharRec ch216 = {6,11,-1,1,8,ch216data};
/* char: 0xd7 */
static const GLubyte ch215data[] = {
0x84,0x48,0x30,0x30,0x48,0x84,
};
static const BitmapCharRec ch215 = {6,6,-1,-1,8,ch215data};
/* char: 0xd6 */
static const GLubyte ch214data[] = {
0x7c,0x82,0x82,0x82,0x82,0x82,0x7c,0x0,0x28,0x28,
};
static const BitmapCharRec ch214 = {7,10,0,0,8,ch214data};
/* char: 0xd5 */
static const GLubyte ch213data[] = {
0x7c,0x82,0x82,0x82,0x82,0x82,0x7c,0x0,0x28,0x14,
};
static const BitmapCharRec ch213 = {7,10,0,0,8,ch213data};
/* char: 0xd4 */
static const GLubyte ch212data[] = {
0x7c,0x82,0x82,0x82,0x82,0x82,0x7c,0x0,0x24,0x18,
};
static const BitmapCharRec ch212 = {7,10,0,0,8,ch212data};
/* char: 0xd3 */
static const GLubyte ch211data[] = {
0x7c,0x82,0x82,0x82,0x82,0x82,0x7c,0x0,0x10,0x8,
};
static const BitmapCharRec ch211 = {7,10,0,0,8,ch211data};
/* char: 0xd2 */
static const GLubyte ch210data[] = {
0x7c,0x82,0x82,0x82,0x82,0x82,0x7c,0x0,0x8,0x10,
};
static const BitmapCharRec ch210 = {7,10,0,0,8,ch210data};
/* char: 0xd1 */
static const GLubyte ch209data[] = {
0x82,0x86,0x8a,0x92,0xa2,0xc2,0x82,0x0,0x28,0x14,
};
static const BitmapCharRec ch209 = {7,10,0,0,8,ch209data};
/* char: 0xd0 */
static const GLubyte ch208data[] = {
0xfc,0x42,0x42,0x42,0xe2,0x42,0x42,0x42,0xfc,
};
static const BitmapCharRec ch208 = {7,9,0,0,8,ch208data};
/* char: 0xcf */
static const GLubyte ch207data[] = {
0xf8,0x20,0x20,0x20,0x20,0x20,0xf8,0x0,0x50,0x50,
};
static const BitmapCharRec ch207 = {5,10,-1,0,8,ch207data};
/* char: 0xce */
static const GLubyte ch206data[] = {
0xf8,0x20,0x20,0x20,0x20,0x20,0xf8,0x0,0x48,0x30,
};
static const BitmapCharRec ch206 = {5,10,-1,0,8,ch206data};
/* char: 0xcd */
static const GLubyte ch205data[] = {
0xf8,0x20,0x20,0x20,0x20,0x20,0xf8,0x0,0x20,0x10,
};
static const BitmapCharRec ch205 = {5,10,-1,0,8,ch205data};
/* char: 0xcc */
static const GLubyte ch204data[] = {
0xf8,0x20,0x20,0x20,0x20,0x20,0xf8,0x0,0x10,0x20,
};
static const BitmapCharRec ch204 = {5,10,-1,0,8,ch204data};
/* char: 0xcb */
static const GLubyte ch203data[] = {
0xfc,0x80,0x80,0xf0,0x80,0x80,0xfc,0x0,0x48,0x48,
};
static const BitmapCharRec ch203 = {6,10,-1,0,8,ch203data};
/* char: 0xca */
static const GLubyte ch202data[] = {
0xfc,0x80,0x80,0xf0,0x80,0x80,0xfc,0x0,0x48,0x30,
};
static const BitmapCharRec ch202 = {6,10,-1,0,8,ch202data};
/* char: 0xc9 */
static const GLubyte ch201data[] = {
0xfc,0x80,0x80,0xf0,0x80,0x80,0xfc,0x0,0x20,0x10,
};
static const BitmapCharRec ch201 = {6,10,-1,0,8,ch201data};
/* char: 0xc8 */
static const GLubyte ch200data[] = {
0xfc,0x80,0x80,0xf0,0x80,0x80,0xfc,0x0,0x10,0x20,
};
static const BitmapCharRec ch200 = {6,10,-1,0,8,ch200data};
/* char: 0xc7 */
static const GLubyte ch199data[] = {
0x20,0x10,0x78,0x84,0x80,0x80,0x80,0x80,0x80,0x84,0x78,
};
static const BitmapCharRec ch199 = {6,11,-1,2,8,ch199data};
/* char: 0xc6 */
static const GLubyte ch198data[] = {
0x9e,0x90,0x90,0xf0,0x9c,0x90,0x90,0x90,0x6e,
};
static const BitmapCharRec ch198 = {7,9,0,0,8,ch198data};
/* char: 0xc5 */
static const GLubyte ch197data[] = {
0x84,0x84,0xfc,0x84,0x84,0x48,0x30,0x30,0x48,0x30,
};
static const BitmapCharRec ch197 = {6,10,-1,0,8,ch197data};
/* char: 0xc4 */
static const GLubyte ch196data[] = {
0x84,0x84,0xfc,0x84,0x84,0x48,0x30,0x0,0x48,0x48,
};
static const BitmapCharRec ch196 = {6,10,-1,0,8,ch196data};
/* char: 0xc3 */
static const GLubyte ch195data[] = {
0x84,0x84,0xfc,0x84,0x84,0x48,0x30,0x0,0x50,0x28,
};
static const BitmapCharRec ch195 = {6,10,-1,0,8,ch195data};
/* char: 0xc2 */
static const GLubyte ch194data[] = {
0x84,0x84,0xfc,0x84,0x84,0x48,0x30,0x0,0x48,0x30,
};
static const BitmapCharRec ch194 = {6,10,-1,0,8,ch194data};
/* char: 0xc1 */
static const GLubyte ch193data[] = {
0x84,0x84,0xfc,0x84,0x84,0x48,0x30,0x0,0x20,0x10,
};
static const BitmapCharRec ch193 = {6,10,-1,0,8,ch193data};
/* char: 0xc0 */
static const GLubyte ch192data[] = {
0x84,0x84,0xfc,0x84,0x84,0x48,0x30,0x0,0x10,0x20,
};
static const BitmapCharRec ch192 = {6,10,-1,0,8,ch192data};
/* char: 0xbf */
static const GLubyte ch191data[] = {
0x78,0x84,0x84,0x80,0x40,0x20,0x20,0x0,0x20,
};
static const BitmapCharRec ch191 = {6,9,-1,0,8,ch191data};
/* char: 0xbe */
static const GLubyte ch190data[] = {
0x6,0x1a,0x12,0xa,0x66,0x92,0x10,0x20,0x90,0x60,
};
static const BitmapCharRec ch190 = {7,10,0,0,8,ch190data};
/* char: 0xbd */
static const GLubyte ch189data[] = {
0x1e,0x10,0xc,0x2,0xf2,0x4c,0x40,0x40,0xc0,0x40,
};
static const BitmapCharRec ch189 = {7,10,0,0,8,ch189data};
/* char: 0xbc */
static const GLubyte ch188data[] = {
0x6,0x1a,0x12,0xa,0xe6,0x42,0x40,0x40,0xc0,0x40,
};
static const BitmapCharRec ch188 = {7,10,0,0,8,ch188data};
/* char: 0xbb */
static const GLubyte ch187data[] = {
0x90,0x48,0x24,0x12,0x24,0x48,0x90,
};
static const BitmapCharRec ch187 = {7,7,0,-1,8,ch187data};
/* char: 0xba */
static const GLubyte ch186data[] = {
0xf0,0x0,0x60,0x90,0x90,0x60,
};
static const BitmapCharRec ch186 = {4,6,-1,-3,8,ch186data};
/* char: 0xb9 */
static const GLubyte ch185data[] = {
0xe0,0x40,0x40,0x40,0xc0,0x40,
};
static const BitmapCharRec ch185 = {3,6,-1,-4,8,ch185data};
/* char: 0xb8 */
static const GLubyte ch184data[] = {
0xc0,0x40,
};
static const BitmapCharRec ch184 = {2,2,-3,2,8,ch184data};
/* char: 0xb7 */
static const GLubyte ch183data[] = {
0xc0,
};
static const BitmapCharRec ch183 = {2,1,-3,-4,8,ch183data};
/* char: 0xb6 */
static const GLubyte ch182data[] = {
0x28,0x28,0x28,0x28,0x68,0xe8,0xe8,0xe8,0x7c,
};
static const BitmapCharRec ch182 = {6,9,-1,0,8,ch182data};
/* char: 0xb5 */
static const GLubyte ch181data[] = {
0x80,0xb4,0xcc,0x84,0x84,0x84,0x84,
};
static const BitmapCharRec ch181 = {6,7,-1,1,8,ch181data};
/* char: 0xb4 */
static const GLubyte ch180data[] = {
0x80,0x40,
};
static const BitmapCharRec ch180 = {2,2,-3,-8,8,ch180data};
/* char: 0xb3 */
static const GLubyte ch179data[] = {
0x60,0x90,0x10,0x20,0x90,0x60,
};
static const BitmapCharRec ch179 = {4,6,-1,-4,8,ch179data};
/* char: 0xb2 */
static const GLubyte ch178data[] = {
0xf0,0x80,0x60,0x10,0x90,0x60,
};
static const BitmapCharRec ch178 = {4,6,-1,-4,8,ch178data};
/* char: 0xb1 */
static const GLubyte ch177data[] = {
0xf8,0x0,0x20,0x20,0xf8,0x20,0x20,
};
static const BitmapCharRec ch177 = {5,7,-1,-1,8,ch177data};
/* char: 0xb0 */
static const GLubyte ch176data[] = {
0x60,0x90,0x90,0x60,
};
static const BitmapCharRec ch176 = {4,4,-2,-5,8,ch176data};
/* char: 0xaf */
static const GLubyte ch175data[] = {
0xfc,
};
static const BitmapCharRec ch175 = {6,1,-1,-8,8,ch175data};
/* char: 0xae */
static const GLubyte ch174data[] = {
0x38,0x44,0xaa,0xb2,0xaa,0xaa,0x92,0x44,0x38,
};
static const BitmapCharRec ch174 = {7,9,0,-1,8,ch174data};
/* char: 0xad */
static const GLubyte ch173data[] = {
0xfc,
};
static const BitmapCharRec ch173 = {6,1,-1,-4,8,ch173data};
/* char: 0xac */
static const GLubyte ch172data[] = {
0x4,0x4,0x4,0xfc,
};
static const BitmapCharRec ch172 = {6,4,-1,-1,8,ch172data};
/* char: 0xab */
static const GLubyte ch171data[] = {
0x12,0x24,0x48,0x90,0x48,0x24,0x12,
};
static const BitmapCharRec ch171 = {7,7,0,-1,8,ch171data};
/* char: 0xaa */
static const GLubyte ch170data[] = {
0xf8,0x0,0x78,0x88,0x78,0x8,0x70,
};
static const BitmapCharRec ch170 = {5,7,-1,-2,8,ch170data};
/* char: 0xa9 */
static const GLubyte ch169data[] = {
0x38,0x44,0x92,0xaa,0xa2,0xaa,0x92,0x44,0x38,
};
static const BitmapCharRec ch169 = {7,9,0,-1,8,ch169data};
/* char: 0xa8 */
static const GLubyte ch168data[] = {
0xd8,
};
static const BitmapCharRec ch168 = {5,1,-1,-8,8,ch168data};
/* char: 0xa7 */
static const GLubyte ch167data[] = {
0x60,0x90,0x10,0x60,0x90,0x90,0x60,0x80,0x90,0x60,
};
static const BitmapCharRec ch167 = {4,10,-2,0,8,ch167data};
/* char: 0xa6 */
static const GLubyte ch166data[] = {
0x80,0x80,0x80,0x80,0x0,0x80,0x80,0x80,0x80,
};
static const BitmapCharRec ch166 = {1,9,-3,0,8,ch166data};
/* char: 0xa5 */
static const GLubyte ch165data[] = {
0x10,0x10,0x7c,0x10,0x7c,0x28,0x44,0x82,0x82,
};
static const BitmapCharRec ch165 = {7,9,0,0,8,ch165data};
/* char: 0xa4 */
static const GLubyte ch164data[] = {
0x84,0x78,0x48,0x48,0x78,0x84,
};
static const BitmapCharRec ch164 = {6,6,-1,-1,8,ch164data};
/* char: 0xa3 */
static const GLubyte ch163data[] = {
0xdc,0x62,0x20,0x20,0x20,0x70,0x20,0x22,0x1c,
};
static const BitmapCharRec ch163 = {7,9,0,0,8,ch163data};
/* char: 0xa2 */
static const GLubyte ch162data[] = {
0x20,0x70,0xa8,0xa0,0xa0,0xa8,0x70,0x20,
};
static const BitmapCharRec ch162 = {5,8,-1,-1,8,ch162data};
/* char: 0xa1 */
static const GLubyte ch161data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x80,
};
static const BitmapCharRec ch161 = {1,9,-3,0,8,ch161data};
/* char: 0x7e '~' */
static const GLubyte ch126data[] = {
0x90,0xa8,0x48,
};
static const BitmapCharRec ch126 = {5,3,-1,-6,8,ch126data};
/* char: 0x7d '}' */
static const GLubyte ch125data[] = {
0xe0,0x10,0x10,0x20,0x18,0x20,0x10,0x10,0xe0,
};
static const BitmapCharRec ch125 = {5,9,-1,0,8,ch125data};
/* char: 0x7c '|' */
static const GLubyte ch124data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
};
static const BitmapCharRec ch124 = {1,9,-3,0,8,ch124data};
/* char: 0x7b '{' */
static const GLubyte ch123data[] = {
0x38,0x40,0x40,0x20,0xc0,0x20,0x40,0x40,0x38,
};
static const BitmapCharRec ch123 = {5,9,-2,0,8,ch123data};
/* char: 0x7a 'z' */
static const GLubyte ch122data[] = {
0xfc,0x40,0x20,0x10,0x8,0xfc,
};
static const BitmapCharRec ch122 = {6,6,-1,0,8,ch122data};
/* char: 0x79 'y' */
static const GLubyte ch121data[] = {
0x78,0x84,0x4,0x74,0x8c,0x84,0x84,0x84,
};
static const BitmapCharRec ch121 = {6,8,-1,2,8,ch121data};
/* char: 0x78 'x' */
static const GLubyte ch120data[] = {
0x84,0x48,0x30,0x30,0x48,0x84,
};
static const BitmapCharRec ch120 = {6,6,-1,0,8,ch120data};
/* char: 0x77 'w' */
static const GLubyte ch119data[] = {
0x44,0xaa,0x92,0x92,0x82,0x82,
};
static const BitmapCharRec ch119 = {7,6,0,0,8,ch119data};
/* char: 0x76 'v' */
static const GLubyte ch118data[] = {
0x20,0x50,0x50,0x88,0x88,0x88,
};
static const BitmapCharRec ch118 = {5,6,-1,0,8,ch118data};
/* char: 0x75 'u' */
static const GLubyte ch117data[] = {
0x74,0x88,0x88,0x88,0x88,0x88,
};
static const BitmapCharRec ch117 = {6,6,-1,0,8,ch117data};
/* char: 0x74 't' */
static const GLubyte ch116data[] = {
0x38,0x44,0x40,0x40,0x40,0xf8,0x40,0x40,
};
static const BitmapCharRec ch116 = {6,8,-1,0,8,ch116data};
/* char: 0x73 's' */
static const GLubyte ch115data[] = {
0x78,0x84,0x18,0x60,0x84,0x78,
};
static const BitmapCharRec ch115 = {6,6,-1,0,8,ch115data};
/* char: 0x72 'r' */
static const GLubyte ch114data[] = {
0x40,0x40,0x40,0x40,0x44,0xb8,
};
static const BitmapCharRec ch114 = {6,6,-1,0,8,ch114data};
/* char: 0x71 'q' */
static const GLubyte ch113data[] = {
0x4,0x4,0x4,0x74,0x8c,0x84,0x8c,0x74,
};
static const BitmapCharRec ch113 = {6,8,-1,2,8,ch113data};
/* char: 0x70 'p' */
static const GLubyte ch112data[] = {
0x80,0x80,0x80,0xb8,0xc4,0x84,0xc4,0xb8,
};
static const BitmapCharRec ch112 = {6,8,-1,2,8,ch112data};
/* char: 0x6f 'o' */
static const GLubyte ch111data[] = {
0x78,0x84,0x84,0x84,0x84,0x78,
};
static const BitmapCharRec ch111 = {6,6,-1,0,8,ch111data};
/* char: 0x6e 'n' */
static const GLubyte ch110data[] = {
0x84,0x84,0x84,0x84,0xc4,0xb8,
};
static const BitmapCharRec ch110 = {6,6,-1,0,8,ch110data};
/* char: 0x6d 'm' */
static const GLubyte ch109data[] = {
0x82,0x92,0x92,0x92,0x92,0xec,
};
static const BitmapCharRec ch109 = {7,6,0,0,8,ch109data};
/* char: 0x6c 'l' */
static const GLubyte ch108data[] = {
0xf8,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x60,
};
static const BitmapCharRec ch108 = {5,9,-1,0,8,ch108data};
/* char: 0x6b 'k' */
static const GLubyte ch107data[] = {
0x84,0x88,0x90,0xe0,0x90,0x88,0x80,0x80,0x80,
};
static const BitmapCharRec ch107 = {6,9,-1,0,8,ch107data};
/* char: 0x6a 'j' */
static const GLubyte ch106data[] = {
0x70,0x88,0x88,0x8,0x8,0x8,0x8,0x18,0x0,0x8,
};
static const BitmapCharRec ch106 = {5,10,-1,2,8,ch106data};
/* char: 0x69 'i' */
static const GLubyte ch105data[] = {
0xf8,0x20,0x20,0x20,0x20,0x60,0x0,0x20,
};
static const BitmapCharRec ch105 = {5,8,-1,0,8,ch105data};
/* char: 0x68 'h' */
static const GLubyte ch104data[] = {
0x84,0x84,0x84,0x84,0xc4,0xb8,0x80,0x80,0x80,
};
static const BitmapCharRec ch104 = {6,9,-1,0,8,ch104data};
/* char: 0x67 'g' */
static const GLubyte ch103data[] = {
0x78,0x84,0x78,0x80,0x70,0x88,0x88,0x74,
};
static const BitmapCharRec ch103 = {6,8,-1,2,8,ch103data};
/* char: 0x66 'f' */
static const GLubyte ch102data[] = {
0x40,0x40,0x40,0x40,0xf8,0x40,0x40,0x44,0x38,
};
static const BitmapCharRec ch102 = {6,9,-1,0,8,ch102data};
/* char: 0x65 'e' */
static const GLubyte ch101data[] = {
0x78,0x84,0x80,0xfc,0x84,0x78,
};
static const BitmapCharRec ch101 = {6,6,-1,0,8,ch101data};
/* char: 0x64 'd' */
static const GLubyte ch100data[] = {
0x74,0x8c,0x84,0x84,0x8c,0x74,0x4,0x4,0x4,
};
static const BitmapCharRec ch100 = {6,9,-1,0,8,ch100data};
/* char: 0x63 'c' */
static const GLubyte ch99data[] = {
0x78,0x84,0x80,0x80,0x84,0x78,
};
static const BitmapCharRec ch99 = {6,6,-1,0,8,ch99data};
/* char: 0x62 'b' */
static const GLubyte ch98data[] = {
0xb8,0xc4,0x84,0x84,0xc4,0xb8,0x80,0x80,0x80,
};
static const BitmapCharRec ch98 = {6,9,-1,0,8,ch98data};
/* char: 0x61 'a' */
static const GLubyte ch97data[] = {
0x74,0x8c,0x84,0x7c,0x4,0x78,
};
static const BitmapCharRec ch97 = {6,6,-1,0,8,ch97data};
/* char: 0x60 '`' */
static const GLubyte ch96data[] = {
0x10,0x60,0xe0,
};
static const BitmapCharRec ch96 = {4,3,-2,-6,8,ch96data};
/* char: 0x5f '_' */
static const GLubyte ch95data[] = {
0xfe,
};
static const BitmapCharRec ch95 = {7,1,0,1,8,ch95data};
/* char: 0x5e '^' */
static const GLubyte ch94data[] = {
0x88,0x50,0x20,
};
static const BitmapCharRec ch94 = {5,3,-1,-6,8,ch94data};
/* char: 0x5d ']' */
static const GLubyte ch93data[] = {
0xf0,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0xf0,
};
static const BitmapCharRec ch93 = {4,9,-1,0,8,ch93data};
/* char: 0x5c '\' */
static const GLubyte ch92data[] = {
0x2,0x2,0x4,0x8,0x10,0x20,0x40,0x80,0x80,
};
static const BitmapCharRec ch92 = {7,9,0,0,8,ch92data};
/* char: 0x5b '[' */
static const GLubyte ch91data[] = {
0xf0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xf0,
};
static const BitmapCharRec ch91 = {4,9,-2,0,8,ch91data};
/* char: 0x5a 'Z' */
static const GLubyte ch90data[] = {
0xfc,0x80,0x80,0x40,0x20,0x10,0x8,0x4,0xfc,
};
static const BitmapCharRec ch90 = {6,9,-1,0,8,ch90data};
/* char: 0x59 'Y' */
static const GLubyte ch89data[] = {
0x10,0x10,0x10,0x10,0x10,0x28,0x44,0x82,0x82,
};
static const BitmapCharRec ch89 = {7,9,0,0,8,ch89data};
/* char: 0x58 'X' */
static const GLubyte ch88data[] = {
0x82,0x82,0x44,0x28,0x10,0x28,0x44,0x82,0x82,
};
static const BitmapCharRec ch88 = {7,9,0,0,8,ch88data};
/* char: 0x57 'W' */
static const GLubyte ch87data[] = {
0x44,0xaa,0x92,0x92,0x92,0x82,0x82,0x82,0x82,
};
static const BitmapCharRec ch87 = {7,9,0,0,8,ch87data};
/* char: 0x56 'V' */
static const GLubyte ch86data[] = {
0x10,0x28,0x28,0x28,0x44,0x44,0x44,0x82,0x82,
};
static const BitmapCharRec ch86 = {7,9,0,0,8,ch86data};
/* char: 0x55 'U' */
static const GLubyte ch85data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,
};
static const BitmapCharRec ch85 = {6,9,-1,0,8,ch85data};
/* char: 0x54 'T' */
static const GLubyte ch84data[] = {
0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0xfe,
};
static const BitmapCharRec ch84 = {7,9,0,0,8,ch84data};
/* char: 0x53 'S' */
static const GLubyte ch83data[] = {
0x78,0x84,0x4,0x4,0x78,0x80,0x80,0x84,0x78,
};
static const BitmapCharRec ch83 = {6,9,-1,0,8,ch83data};
/* char: 0x52 'R' */
static const GLubyte ch82data[] = {
0x84,0x88,0x90,0xa0,0xf8,0x84,0x84,0x84,0xf8,
};
static const BitmapCharRec ch82 = {6,9,-1,0,8,ch82data};
/* char: 0x51 'Q' */
static const GLubyte ch81data[] = {
0x4,0x78,0x94,0xa4,0x84,0x84,0x84,0x84,0x84,0x78,
};
static const BitmapCharRec ch81 = {6,10,-1,1,8,ch81data};
/* char: 0x50 'P' */
static const GLubyte ch80data[] = {
0x80,0x80,0x80,0x80,0xf8,0x84,0x84,0x84,0xf8,
};
static const BitmapCharRec ch80 = {6,9,-1,0,8,ch80data};
/* char: 0x4f 'O' */
static const GLubyte ch79data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x78,
};
static const BitmapCharRec ch79 = {6,9,-1,0,8,ch79data};
/* char: 0x4e 'N' */
static const GLubyte ch78data[] = {
0x84,0x84,0x84,0x8c,0x94,0xa4,0xc4,0x84,0x84,
};
static const BitmapCharRec ch78 = {6,9,-1,0,8,ch78data};
/* char: 0x4d 'M' */
static const GLubyte ch77data[] = {
0x82,0x82,0x82,0x92,0x92,0xaa,0xc6,0x82,0x82,
};
static const BitmapCharRec ch77 = {7,9,0,0,8,ch77data};
/* char: 0x4c 'L' */
static const GLubyte ch76data[] = {
0xfc,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
};
static const BitmapCharRec ch76 = {6,9,-1,0,8,ch76data};
/* char: 0x4b 'K' */
static const GLubyte ch75data[] = {
0x84,0x88,0x90,0xa0,0xc0,0xa0,0x90,0x88,0x84,
};
static const BitmapCharRec ch75 = {6,9,-1,0,8,ch75data};
/* char: 0x4a 'J' */
static const GLubyte ch74data[] = {
0x70,0x88,0x8,0x8,0x8,0x8,0x8,0x8,0x3c,
};
static const BitmapCharRec ch74 = {6,9,-1,0,8,ch74data};
/* char: 0x49 'I' */
static const GLubyte ch73data[] = {
0xf8,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xf8,
};
static const BitmapCharRec ch73 = {5,9,-1,0,8,ch73data};
/* char: 0x48 'H' */
static const GLubyte ch72data[] = {
0x84,0x84,0x84,0x84,0xfc,0x84,0x84,0x84,0x84,
};
static const BitmapCharRec ch72 = {6,9,-1,0,8,ch72data};
/* char: 0x47 'G' */
static const GLubyte ch71data[] = {
0x74,0x8c,0x84,0x9c,0x80,0x80,0x80,0x84,0x78,
};
static const BitmapCharRec ch71 = {6,9,-1,0,8,ch71data};
/* char: 0x46 'F' */
static const GLubyte ch70data[] = {
0x80,0x80,0x80,0x80,0xf0,0x80,0x80,0x80,0xfc,
};
static const BitmapCharRec ch70 = {6,9,-1,0,8,ch70data};
/* char: 0x45 'E' */
static const GLubyte ch69data[] = {
0xfc,0x80,0x80,0x80,0xf0,0x80,0x80,0x80,0xfc,
};
static const BitmapCharRec ch69 = {6,9,-1,0,8,ch69data};
/* char: 0x44 'D' */
static const GLubyte ch68data[] = {
0xfc,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0xfc,
};
static const BitmapCharRec ch68 = {7,9,0,0,8,ch68data};
/* char: 0x43 'C' */
static const GLubyte ch67data[] = {
0x78,0x84,0x80,0x80,0x80,0x80,0x80,0x84,0x78,
};
static const BitmapCharRec ch67 = {6,9,-1,0,8,ch67data};
/* char: 0x42 'B' */
static const GLubyte ch66data[] = {
0xfc,0x42,0x42,0x42,0x7c,0x42,0x42,0x42,0xfc,
};
static const BitmapCharRec ch66 = {7,9,0,0,8,ch66data};
/* char: 0x41 'A' */
static const GLubyte ch65data[] = {
0x84,0x84,0x84,0xfc,0x84,0x84,0x84,0x48,0x30,
};
static const BitmapCharRec ch65 = {6,9,-1,0,8,ch65data};
/* char: 0x40 '@' */
static const GLubyte ch64data[] = {
0x78,0x80,0x94,0xac,0xa4,0x9c,0x84,0x84,0x78,
};
static const BitmapCharRec ch64 = {6,9,-1,0,8,ch64data};
/* char: 0x3f '?' */
static const GLubyte ch63data[] = {
0x10,0x0,0x10,0x10,0x8,0x4,0x84,0x84,0x78,
};
static const BitmapCharRec ch63 = {6,9,-1,0,8,ch63data};
/* char: 0x3e '>' */
static const GLubyte ch62data[] = {
0x80,0x40,0x20,0x10,0x8,0x10,0x20,0x40,0x80,
};
static const BitmapCharRec ch62 = {5,9,-1,0,8,ch62data};
/* char: 0x3d '=' */
static const GLubyte ch61data[] = {
0xfc,0x0,0x0,0xfc,
};
static const BitmapCharRec ch61 = {6,4,-1,-2,8,ch61data};
/* char: 0x3c '<' */
static const GLubyte ch60data[] = {
0x8,0x10,0x20,0x40,0x80,0x40,0x20,0x10,0x8,
};
static const BitmapCharRec ch60 = {5,9,-2,0,8,ch60data};
/* char: 0x3b ';' */
static const GLubyte ch59data[] = {
0x80,0x60,0x70,0x0,0x0,0x20,0x70,0x20,
};
static const BitmapCharRec ch59 = {4,8,-1,1,8,ch59data};
/* char: 0x3a ':' */
static const GLubyte ch58data[] = {
0x40,0xe0,0x40,0x0,0x0,0x40,0xe0,0x40,
};
static const BitmapCharRec ch58 = {3,8,-2,1,8,ch58data};
/* char: 0x39 '9' */
static const GLubyte ch57data[] = {
0x70,0x8,0x4,0x4,0x74,0x8c,0x84,0x84,0x78,
};
static const BitmapCharRec ch57 = {6,9,-1,0,8,ch57data};
/* char: 0x38 '8' */
static const GLubyte ch56data[] = {
0x78,0x84,0x84,0x84,0x78,0x84,0x84,0x84,0x78,
};
static const BitmapCharRec ch56 = {6,9,-1,0,8,ch56data};
/* char: 0x37 '7' */
static const GLubyte ch55data[] = {
0x40,0x40,0x20,0x20,0x10,0x10,0x8,0x4,0xfc,
};
static const BitmapCharRec ch55 = {6,9,-1,0,8,ch55data};
/* char: 0x36 '6' */
static const GLubyte ch54data[] = {
0x78,0x84,0x84,0xc4,0xb8,0x80,0x80,0x40,0x38,
};
static const BitmapCharRec ch54 = {6,9,-1,0,8,ch54data};
/* char: 0x35 '5' */
static const GLubyte ch53data[] = {
0x78,0x84,0x4,0x4,0xc4,0xb8,0x80,0x80,0xfc,
};
static const BitmapCharRec ch53 = {6,9,-1,0,8,ch53data};
/* char: 0x34 '4' */
static const GLubyte ch52data[] = {
0x8,0x8,0xfc,0x88,0x88,0x48,0x28,0x18,0x8,
};
static const BitmapCharRec ch52 = {6,9,-1,0,8,ch52data};
/* char: 0x33 '3' */
static const GLubyte ch51data[] = {
0x78,0x84,0x4,0x4,0x38,0x10,0x8,0x4,0xfc,
};
static const BitmapCharRec ch51 = {6,9,-1,0,8,ch51data};
/* char: 0x32 '2' */
static const GLubyte ch50data[] = {
0xfc,0x80,0x40,0x30,0x8,0x4,0x84,0x84,0x78,
};
static const BitmapCharRec ch50 = {6,9,-1,0,8,ch50data};
/* char: 0x31 '1' */
static const GLubyte ch49data[] = {
0xf8,0x20,0x20,0x20,0x20,0x20,0xa0,0x60,0x20,
};
static const BitmapCharRec ch49 = {5,9,-1,0,8,ch49data};
/* char: 0x30 '0' */
static const GLubyte ch48data[] = {
0x30,0x48,0x84,0x84,0x84,0x84,0x84,0x48,0x30,
};
static const BitmapCharRec ch48 = {6,9,-1,0,8,ch48data};
/* char: 0x2f '/' */
static const GLubyte ch47data[] = {
0x80,0x80,0x40,0x20,0x10,0x8,0x4,0x2,0x2,
};
static const BitmapCharRec ch47 = {7,9,0,0,8,ch47data};
/* char: 0x2e '.' */
static const GLubyte ch46data[] = {
0x40,0xe0,0x40,
};
static const BitmapCharRec ch46 = {3,3,-2,1,8,ch46data};
/* char: 0x2d '-' */
static const GLubyte ch45data[] = {
0xfc,
};
static const BitmapCharRec ch45 = {6,1,-1,-4,8,ch45data};
/* char: 0x2c ',' */
static const GLubyte ch44data[] = {
0x80,0x60,0x70,
};
static const BitmapCharRec ch44 = {4,3,-1,1,8,ch44data};
/* char: 0x2b '+' */
static const GLubyte ch43data[] = {
0x20,0x20,0xf8,0x20,0x20,
};
static const BitmapCharRec ch43 = {5,5,-1,-2,8,ch43data};
/* char: 0x2a '*' */
static const GLubyte ch42data[] = {
0x48,0x30,0xfc,0x30,0x48,
};
static const BitmapCharRec ch42 = {6,5,-1,-2,8,ch42data};
/* char: 0x29 ')' */
static const GLubyte ch41data[] = {
0x80,0x40,0x40,0x20,0x20,0x20,0x40,0x40,0x80,
};
static const BitmapCharRec ch41 = {3,9,-2,0,8,ch41data};
/* char: 0x28 '(' */
static const GLubyte ch40data[] = {
0x20,0x40,0x40,0x80,0x80,0x80,0x40,0x40,0x20,
};
static const BitmapCharRec ch40 = {3,9,-3,0,8,ch40data};
/* char: 0x27 ''' */
static const GLubyte ch39data[] = {
0x80,0x60,0x70,
};
static const BitmapCharRec ch39 = {4,3,-1,-6,8,ch39data};
/* char: 0x26 '&' */
static const GLubyte ch38data[] = {
0x74,0x88,0x94,0x60,0x90,0x90,0x60,
};
static const BitmapCharRec ch38 = {6,7,-1,0,8,ch38data};
/* char: 0x25 '%' */
static const GLubyte ch37data[] = {
0x88,0x54,0x48,0x20,0x10,0x10,0x48,0xa4,0x44,
};
static const BitmapCharRec ch37 = {6,9,-1,0,8,ch37data};
/* char: 0x24 '$' */
static const GLubyte ch36data[] = {
0x20,0xf0,0x28,0x70,0xa0,0x78,0x20,
};
static const BitmapCharRec ch36 = {5,7,-1,-1,8,ch36data};
/* char: 0x23 '#' */
static const GLubyte ch35data[] = {
0x48,0x48,0xfc,0x48,0xfc,0x48,0x48,
};
static const BitmapCharRec ch35 = {6,7,-1,-1,8,ch35data};
/* char: 0x22 '"' */
static const GLubyte ch34data[] = {
0x90,0x90,0x90,
};
static const BitmapCharRec ch34 = {4,3,-2,-6,8,ch34data};
/* char: 0x21 '!' */
static const GLubyte ch33data[] = {
0x80,0x0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
};
static const BitmapCharRec ch33 = {1,9,-3,0,8,ch33data};
/* char: 0x1f */
static const GLubyte ch31data[] = {
0x80,
};
static const BitmapCharRec ch31 = {1,1,-3,-3,8,ch31data};
/* char: 0x1e */
static const GLubyte ch30data[] = {
0xdc,0x62,0x20,0x20,0x20,0x70,0x20,0x22,0x1c,
};
static const BitmapCharRec ch30 = {7,9,0,0,8,ch30data};
/* char: 0x1d */
static const GLubyte ch29data[] = {
0x80,0x40,0xfe,0x10,0xfe,0x4,0x2,
};
static const BitmapCharRec ch29 = {7,7,0,0,8,ch29data};
/* char: 0x1c */
static const GLubyte ch28data[] = {
0x88,0x48,0x48,0x48,0x48,0xfc,
};
static const BitmapCharRec ch28 = {6,6,-1,0,8,ch28data};
/* char: 0x1b */
static const GLubyte ch27data[] = {
0xfe,0x80,0x20,0x8,0x2,0x8,0x20,0x80,
};
static const BitmapCharRec ch27 = {7,8,0,0,8,ch27data};
/* char: 0x1a */
static const GLubyte ch26data[] = {
0xfe,0x2,0x8,0x20,0x80,0x20,0x8,0x2,
};
static const BitmapCharRec ch26 = {7,8,0,0,8,ch26data};
/* char: 0x19 */
static const GLubyte ch25data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
};
static const BitmapCharRec ch25 = {1,13,-3,2,8,ch25data};
/* char: 0x18 */
static const GLubyte ch24data[] = {
0x10,0x10,0x10,0x10,0x10,0xff,
};
static const BitmapCharRec ch24 = {8,6,0,2,8,ch24data};
/* char: 0x17 */
static const GLubyte ch23data[] = {
0xff,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
};
static const BitmapCharRec ch23 = {8,8,0,-3,8,ch23data};
/* char: 0x16 */
static const GLubyte ch22data[] = {
0x10,0x10,0x10,0x10,0x10,0xf0,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
};
static const BitmapCharRec ch22 = {4,13,0,2,8,ch22data};
/* char: 0x15 */
static const GLubyte ch21data[] = {
0x80,0x80,0x80,0x80,0x80,0xf8,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
};
static const BitmapCharRec ch21 = {5,13,-3,2,8,ch21data};
/* char: 0x14 */
static const GLubyte ch20data[] = {
0xff,
};
static const BitmapCharRec ch20 = {8,1,0,1,8,ch20data};
/* char: 0x13 */
static const GLubyte ch19data[] = {
0xff,
};
static const BitmapCharRec ch19 = {8,1,0,-1,8,ch19data};
/* char: 0x12 */
static const GLubyte ch18data[] = {
0xff,
};
static const BitmapCharRec ch18 = {8,1,0,-3,8,ch18data};
/* char: 0x11 */
static const GLubyte ch17data[] = {
0xff,
};
static const BitmapCharRec ch17 = {8,1,0,-5,8,ch17data};
/* char: 0x10 */
static const GLubyte ch16data[] = {
0xff,
};
static const BitmapCharRec ch16 = {8,1,0,-7,8,ch16data};
/* char: 0xf */
static const GLubyte ch15data[] = {
0x10,0x10,0x10,0x10,0x10,0xff,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
};
static const BitmapCharRec ch15 = {8,13,0,2,8,ch15data};
/* char: 0xe */
static const GLubyte ch14data[] = {
0xf8,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
};
static const BitmapCharRec ch14 = {5,8,-3,-3,8,ch14data};
/* char: 0xd */
static const GLubyte ch13data[] = {
0x80,0x80,0x80,0x80,0x80,0xf8,
};
static const BitmapCharRec ch13 = {5,6,-3,2,8,ch13data};
/* char: 0xc */
static const GLubyte ch12data[] = {
0x10,0x10,0x10,0x10,0x10,0xf0,
};
static const BitmapCharRec ch12 = {4,6,0,2,8,ch12data};
/* char: 0xb */
static const GLubyte ch11data[] = {
0xf0,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
};
static const BitmapCharRec ch11 = {4,8,0,-3,8,ch11data};
/* char: 0xa */
static const GLubyte ch10data[] = {
0x8,0x8,0x8,0x8,0x3e,0x20,0x50,0x88,0x88,
};
static const BitmapCharRec ch10 = {7,9,0,2,8,ch10data};
/* char: 0x9 */
static const GLubyte ch9data[] = {
0x3e,0x20,0x20,0x20,0x88,0x98,0xa8,0xc8,0x88,
};
static const BitmapCharRec ch9 = {7,9,0,2,8,ch9data};
/* char: 0x8 */
static const GLubyte ch8data[] = {
0xfe,0x10,0x10,0xfe,0x10,0x10,
};
static const BitmapCharRec ch8 = {7,6,0,0,8,ch8data};
/* char: 0x7 */
static const GLubyte ch7data[] = {
0x70,0x88,0x88,0x70,
};
static const BitmapCharRec ch7 = {5,4,-1,-5,8,ch7data};
/* char: 0x6 */
static const GLubyte ch6data[] = {
0x20,0x20,0x3c,0x20,0x3e,0xf8,0x80,0x80,0x80,
};
static const BitmapCharRec ch6 = {7,9,0,2,8,ch6data};
/* char: 0x5 */
static const GLubyte ch5data[] = {
0x22,0x22,0x3c,0x22,0x3c,0x78,0x80,0x80,0x78,
};
static const BitmapCharRec ch5 = {7,9,0,2,8,ch5data};
/* char: 0x4 */
static const GLubyte ch4data[] = {
0x10,0x10,0x1c,0x10,0x9e,0x80,0xe0,0x80,0xf0,
};
static const BitmapCharRec ch4 = {7,9,0,2,8,ch4data};
/* char: 0x3 */
static const GLubyte ch3data[] = {
0x8,0x8,0x8,0x3e,0x88,0x88,0xf8,0x88,0x88,
};
static const BitmapCharRec ch3 = {7,9,0,2,8,ch3data};
/* char: 0x2 */
static const GLubyte ch2data[] = {
0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,
};
static const BitmapCharRec ch2 = {8,12,0,2,8,ch2data};
/* char: 0x1 */
static const GLubyte ch1data[] = {
0x10,0x38,0x7c,0xfe,0x7c,0x38,0x10,
};
static const BitmapCharRec ch1 = {7,7,0,-1,8,ch1data};
static const BitmapCharRec * const chars[] = {
&ch0,
&ch1,
&ch2,
&ch3,
&ch4,
&ch5,
&ch6,
&ch7,
&ch8,
&ch9,
&ch10,
&ch11,
&ch12,
&ch13,
&ch14,
&ch15,
&ch16,
&ch17,
&ch18,
&ch19,
&ch20,
&ch21,
&ch22,
&ch23,
&ch24,
&ch25,
&ch26,
&ch27,
&ch28,
&ch29,
&ch30,
&ch31,
&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,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
&ch160,
&ch161,
&ch162,
&ch163,
&ch164,
&ch165,
&ch166,
&ch167,
&ch168,
&ch169,
&ch170,
&ch171,
&ch172,
&ch173,
&ch174,
&ch175,
&ch176,
&ch177,
&ch178,
&ch179,
&ch180,
&ch181,
&ch182,
&ch183,
&ch184,
&ch185,
&ch186,
&ch187,
&ch188,
&ch189,
&ch190,
&ch191,
&ch192,
&ch193,
&ch194,
&ch195,
&ch196,
&ch197,
&ch198,
&ch199,
&ch200,
&ch201,
&ch202,
&ch203,
&ch204,
&ch205,
&ch206,
&ch207,
&ch208,
&ch209,
&ch210,
&ch211,
&ch212,
&ch213,
&ch214,
&ch215,
&ch216,
&ch217,
&ch218,
&ch219,
&ch220,
&ch221,
&ch222,
&ch223,
&ch224,
&ch225,
&ch226,
&ch227,
&ch228,
&ch229,
&ch230,
&ch231,
&ch232,
&ch233,
&ch234,
&ch235,
&ch236,
&ch237,
&ch238,
&ch239,
&ch240,
&ch241,
&ch242,
&ch243,
&ch244,
&ch245,
&ch246,
&ch247,
&ch248,
&ch249,
&ch250,
&ch251,
&ch252,
&ch253,
&ch254,
&ch255,
};
const BitmapFontRec glutBitmap8By13 = {
"-misc-fixed-medium-r-normal--13-120-75-75-C-80-iso8859-1",
256,
0,
chars
};
/* GENERATED FILE -- DO NOT MODIFY */
#define glutBitmap9By15 XXX
#include "glutbitmap.h"
#undef glutBitmap9By15
#ifdef _WIN32
/* XXX Work around Microsoft OpenGL 1.1 bug where glBitmap with
a height or width of zero does not advance the raster position
as specified by OpenGL. (Cosmo OpenGL does not have this bug.) */
static const GLubyte ch0data[] = { 0x0 };
static const BitmapCharRec ch0 = {1,1,0,0,9,ch0data};
#else
static const BitmapCharRec ch0 = {0,0,0,0,9,0};
#endif
#ifdef _WIN32
/* XXX Work around Microsoft OpenGL 1.1 bug where glBitmap with
a height or width of zero does not advance the raster position
as specified by OpenGL. (Cosmo OpenGL does not have this bug.) */
static const GLubyte ch32data[] = { 0x0 };
static const BitmapCharRec ch32 = {1,1,0,0,9,ch32data};
#else
static const BitmapCharRec ch32 = {0,0,0,0,9,0};
#endif
#ifdef _WIN32
/* XXX Work around Microsoft OpenGL 1.1 bug where glBitmap with
a height or width of zero does not advance the raster position
as specified by OpenGL. (Cosmo OpenGL does not have this bug.) */
static const GLubyte ch127data[] = { 0x0 };
static const BitmapCharRec ch127 = {1,1,0,0,9,ch127data};
#else
static const BitmapCharRec ch127 = {0,0,0,0,9,0};
#endif
#ifdef _WIN32
/* XXX Work around Microsoft OpenGL 1.1 bug where glBitmap with
a height or width of zero does not advance the raster position
as specified by OpenGL. (Cosmo OpenGL does not have this bug.) */
static const GLubyte ch160data[] = { 0x0 };
static const BitmapCharRec ch160 = {1,1,0,0,9,ch160data};
#else
static const BitmapCharRec ch160 = {0,0,0,0,9,0};
#endif
/* char: 0xff */
static const GLubyte ch255data[] = {
0x78,0x84,0x4,0x74,0x8c,0x84,0x84,0x84,0x84,0x84,0x0,0x0,0x28,0x28,
};
static const BitmapCharRec ch255 = {6,14,-1,3,9,ch255data};
/* char: 0xfe */
static const GLubyte ch254data[] = {
0x80,0x80,0x80,0xbc,0xc2,0x82,0x82,0x82,0xc2,0xbc,0x80,0x80,
};
static const BitmapCharRec ch254 = {7,12,-1,3,9,ch254data};
/* char: 0xfd */
static const GLubyte ch253data[] = {
0x78,0x84,0x4,0x74,0x8c,0x84,0x84,0x84,0x84,0x84,0x0,0x0,0x30,0x8,
};
static const BitmapCharRec ch253 = {6,14,-1,3,9,ch253data};
/* char: 0xfc */
static const GLubyte ch252data[] = {
0x7a,0x84,0x84,0x84,0x84,0x84,0x84,0x0,0x0,0x28,0x28,
};
static const BitmapCharRec ch252 = {7,11,-1,0,9,ch252data};
/* char: 0xfb */
static const GLubyte ch251data[] = {
0x7a,0x84,0x84,0x84,0x84,0x84,0x84,0x0,0x0,0x44,0x38,
};
static const BitmapCharRec ch251 = {7,11,-1,0,9,ch251data};
/* char: 0xfa */
static const GLubyte ch250data[] = {
0x7a,0x84,0x84,0x84,0x84,0x84,0x84,0x0,0x0,0x30,0x8,
};
static const BitmapCharRec ch250 = {7,11,-1,0,9,ch250data};
/* char: 0xf9 */
static const GLubyte ch249data[] = {
0x7a,0x84,0x84,0x84,0x84,0x84,0x84,0x0,0x0,0x18,0x20,
};
static const BitmapCharRec ch249 = {7,11,-1,0,9,ch249data};
/* char: 0xf8 */
static const GLubyte ch248data[] = {
0x80,0x7c,0xa2,0xa2,0x92,0x8a,0x8a,0x7c,0x2,
};
static const BitmapCharRec ch248 = {7,9,-1,1,9,ch248data};
/* char: 0xf7 */
static const GLubyte ch247data[] = {
0x10,0x38,0x10,0x0,0xfe,0x0,0x10,0x38,0x10,
};
static const BitmapCharRec ch247 = {7,9,-1,0,9,ch247data};
/* char: 0xf6 */
static const GLubyte ch246data[] = {
0x7c,0x82,0x82,0x82,0x82,0x82,0x7c,0x0,0x0,0x28,0x28,
};
static const BitmapCharRec ch246 = {7,11,-1,0,9,ch246data};
/* char: 0xf5 */
static const GLubyte ch245data[] = {
0x7c,0x82,0x82,0x82,0x82,0x82,0x7c,0x0,0x0,0x50,0x28,
};
static const BitmapCharRec ch245 = {7,11,-1,0,9,ch245data};
/* char: 0xf4 */
static const GLubyte ch244data[] = {
0x7c,0x82,0x82,0x82,0x82,0x82,0x7c,0x0,0x0,0x44,0x38,
};
static const BitmapCharRec ch244 = {7,11,-1,0,9,ch244data};
/* char: 0xf3 */
static const GLubyte ch243data[] = {
0x7c,0x82,0x82,0x82,0x82,0x82,0x7c,0x0,0x0,0x30,0x8,
};
static const BitmapCharRec ch243 = {7,11,-1,0,9,ch243data};
/* char: 0xf2 */
static const GLubyte ch242data[] = {
0x7c,0x82,0x82,0x82,0x82,0x82,0x7c,0x0,0x0,0x18,0x20,
};
static const BitmapCharRec ch242 = {7,11,-1,0,9,ch242data};
/* char: 0xf1 */
static const GLubyte ch241data[] = {
0x82,0x82,0x82,0x82,0x82,0xc2,0xbc,0x0,0x0,0x50,0x28,
};
static const BitmapCharRec ch241 = {7,11,-1,0,9,ch241data};
/* char: 0xf0 */
static const GLubyte ch240data[] = {
0x7c,0x82,0x82,0x82,0x82,0x82,0x7c,0x8,0x50,0x30,0x48,
};
static const BitmapCharRec ch240 = {7,11,-1,0,9,ch240data};
/* char: 0xef */
static const GLubyte ch239data[] = {
0xf8,0x20,0x20,0x20,0x20,0x20,0xe0,0x0,0x0,0x50,0x50,
};
static const BitmapCharRec ch239 = {5,11,-2,0,9,ch239data};
/* char: 0xee */
static const GLubyte ch238data[] = {
0xf8,0x20,0x20,0x20,0x20,0x20,0xe0,0x0,0x0,0x90,0x60,
};
static const BitmapCharRec ch238 = {5,11,-2,0,9,ch238data};
/* char: 0xed */
static const GLubyte ch237data[] = {
0xf8,0x20,0x20,0x20,0x20,0x20,0xe0,0x0,0x0,0x60,0x10,
};
static const BitmapCharRec ch237 = {5,11,-2,0,9,ch237data};
/* char: 0xec */
static const GLubyte ch236data[] = {
0xf8,0x20,0x20,0x20,0x20,0x20,0xe0,0x0,0x0,0x30,0x40,
};
static const BitmapCharRec ch236 = {5,11,-2,0,9,ch236data};
/* char: 0xeb */
static const GLubyte ch235data[] = {
0x7c,0x80,0x80,0xfe,0x82,0x82,0x7c,0x0,0x0,0x28,0x28,
};
static const BitmapCharRec ch235 = {7,11,-1,0,9,ch235data};
/* char: 0xea */
static const GLubyte ch234data[] = {
0x7c,0x80,0x80,0xfe,0x82,0x82,0x7c,0x0,0x0,0x44,0x38,
};
static const BitmapCharRec ch234 = {7,11,-1,0,9,ch234data};
/* char: 0xe9 */
static const GLubyte ch233data[] = {
0x7c,0x80,0x80,0xfe,0x82,0x82,0x7c,0x0,0x0,0x30,0x8,
};
static const BitmapCharRec ch233 = {7,11,-1,0,9,ch233data};
/* char: 0xe8 */
static const GLubyte ch232data[] = {
0x7c,0x80,0x80,0xfe,0x82,0x82,0x7c,0x0,0x0,0x18,0x20,
};
static const BitmapCharRec ch232 = {7,11,-1,0,9,ch232data};
/* char: 0xe7 */
static const GLubyte ch231data[] = {
0x30,0x48,0x18,0x7c,0x82,0x80,0x80,0x80,0x82,0x7c,
};
static const BitmapCharRec ch231 = {7,10,-1,3,9,ch231data};
/* char: 0xe6 */
static const GLubyte ch230data[] = {
0x6e,0x92,0x90,0x7c,0x12,0x92,0x6c,
};
static const BitmapCharRec ch230 = {7,7,-1,0,9,ch230data};
/* char: 0xe5 */
static const GLubyte ch229data[] = {
0x7a,0x86,0x82,0x7e,0x2,0x2,0x7c,0x0,0x18,0x24,0x18,
};
static const BitmapCharRec ch229 = {7,11,-1,0,9,ch229data};
/* char: 0xe4 */
static const GLubyte ch228data[] = {
0x7a,0x86,0x82,0x7e,0x2,0x2,0x7c,0x0,0x0,0x28,0x28,
};
static const BitmapCharRec ch228 = {7,11,-1,0,9,ch228data};
/* char: 0xe3 */
static const GLubyte ch227data[] = {
0x7a,0x86,0x82,0x7e,0x2,0x2,0x7c,0x0,0x0,0x50,0x28,
};
static const BitmapCharRec ch227 = {7,11,-1,0,9,ch227data};
/* char: 0xe2 */
static const GLubyte ch226data[] = {
0x7a,0x86,0x82,0x7e,0x2,0x2,0x7c,0x0,0x0,0x44,0x38,
};
static const BitmapCharRec ch226 = {7,11,-1,0,9,ch226data};
/* char: 0xe1 */
static const GLubyte ch225data[] = {
0x7a,0x86,0x82,0x7e,0x2,0x2,0x7c,0x0,0x0,0x30,0x8,
};
static const BitmapCharRec ch225 = {7,11,-1,0,9,ch225data};
/* char: 0xe0 */
static const GLubyte ch224data[] = {
0x7a,0x86,0x82,0x7e,0x2,0x2,0x7c,0x0,0x0,0x18,0x20,
};
static const BitmapCharRec ch224 = {7,11,-1,0,9,ch224data};
/* char: 0xdf */
static const GLubyte ch223data[] = {
0x80,0xbc,0xc2,0x82,0x82,0xfc,0x82,0x82,0x7c,
};
static const BitmapCharRec ch223 = {7,9,-1,1,9,ch223data};
/* char: 0xde */
static const GLubyte ch222data[] = {
0x80,0x80,0x80,0xfc,0x82,0x82,0x82,0xfc,0x80,0x80,
};
static const BitmapCharRec ch222 = {7,10,-1,0,9,ch222data};
/* char: 0xdd */
static const GLubyte ch221data[] = {
0x10,0x10,0x10,0x10,0x28,0x44,0x82,0x82,0x0,0x30,0x8,
};
static const BitmapCharRec ch221 = {7,11,-1,0,9,ch221data};
/* char: 0xdc */
static const GLubyte ch220data[] = {
0x7c,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x0,0x28,0x28,
};
static const BitmapCharRec ch220 = {7,11,-1,0,9,ch220data};
/* char: 0xdb */
static const GLubyte ch219data[] = {
0x7c,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x0,0x44,0x38,
};
static const BitmapCharRec ch219 = {7,11,-1,0,9,ch219data};
/* char: 0xda */
static const GLubyte ch218data[] = {
0x7c,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x0,0x30,0x8,
};
static const BitmapCharRec ch218 = {7,11,-1,0,9,ch218data};
/* char: 0xd9 */
static const GLubyte ch217data[] = {
0x7c,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x0,0x18,0x20,
};
static const BitmapCharRec ch217 = {7,11,-1,0,9,ch217data};
/* char: 0xd8 */
static const GLubyte ch216data[] = {
0x80,0x7c,0xc2,0xa2,0xa2,0x92,0x92,0x8a,0x8a,0x86,0x7c,0x2,
};
static const BitmapCharRec ch216 = {7,12,-1,1,9,ch216data};
/* char: 0xd7 */
static const GLubyte ch215data[] = {
0x82,0x44,0x28,0x10,0x28,0x44,0x82,
};
static const BitmapCharRec ch215 = {7,7,-1,-1,9,ch215data};
/* char: 0xd6 */
static const GLubyte ch214data[] = {
0x7c,0x82,0x82,0x82,0x82,0x82,0x82,0x7c,0x0,0x28,0x28,
};
static const BitmapCharRec ch214 = {7,11,-1,0,9,ch214data};
/* char: 0xd5 */
static const GLubyte ch213data[] = {
0x7c,0x82,0x82,0x82,0x82,0x82,0x82,0x7c,0x0,0x50,0x28,
};
static const BitmapCharRec ch213 = {7,11,-1,0,9,ch213data};
/* char: 0xd4 */
static const GLubyte ch212data[] = {
0x7c,0x82,0x82,0x82,0x82,0x82,0x82,0x7c,0x0,0x44,0x38,
};
static const BitmapCharRec ch212 = {7,11,-1,0,9,ch212data};
/* char: 0xd3 */
static const GLubyte ch211data[] = {
0x7c,0x82,0x82,0x82,0x82,0x82,0x82,0x7c,0x0,0x30,0x8,
};
static const BitmapCharRec ch211 = {7,11,-1,0,9,ch211data};
/* char: 0xd2 */
static const GLubyte ch210data[] = {
0x7c,0x82,0x82,0x82,0x82,0x82,0x82,0x7c,0x0,0x18,0x20,
};
static const BitmapCharRec ch210 = {7,11,-1,0,9,ch210data};
/* char: 0xd1 */
static const GLubyte ch209data[] = {
0x82,0x86,0x8a,0x92,0x92,0xa2,0xc2,0x82,0x0,0x50,0x28,
};
static const BitmapCharRec ch209 = {7,11,-1,0,9,ch209data};
/* char: 0xd0 */
static const GLubyte ch208data[] = {
0xfc,0x42,0x42,0x42,0x42,0xf2,0x42,0x42,0x42,0xfc,
};
static const BitmapCharRec ch208 = {7,10,-1,0,9,ch208data};
/* char: 0xcf */
static const GLubyte ch207data[] = {
0xf8,0x20,0x20,0x20,0x20,0x20,0x20,0xf8,0x0,0x50,0x50,
};
static const BitmapCharRec ch207 = {5,11,-2,0,9,ch207data};
/* char: 0xce */
static const GLubyte ch206data[] = {
0xf8,0x20,0x20,0x20,0x20,0x20,0x20,0xf8,0x0,0x88,0x70,
};
static const BitmapCharRec ch206 = {5,11,-2,0,9,ch206data};
/* char: 0xcd */
static const GLubyte ch205data[] = {
0xf8,0x20,0x20,0x20,0x20,0x20,0x20,0xf8,0x0,0x60,0x10,
};
static const BitmapCharRec ch205 = {5,11,-2,0,9,ch205data};
/* char: 0xcc */
static const GLubyte ch204data[] = {
0xf8,0x20,0x20,0x20,0x20,0x20,0x20,0xf8,0x0,0x30,0x40,
};
static const BitmapCharRec ch204 = {5,11,-2,0,9,ch204data};
/* char: 0xcb */
static const GLubyte ch203data[] = {
0xfe,0x40,0x40,0x40,0x78,0x40,0x40,0xfe,0x0,0x28,0x28,
};
static const BitmapCharRec ch203 = {7,11,-1,0,9,ch203data};
/* char: 0xca */
static const GLubyte ch202data[] = {
0xfe,0x40,0x40,0x40,0x78,0x40,0x40,0xfe,0x0,0x44,0x38,
};
static const BitmapCharRec ch202 = {7,11,-1,0,9,ch202data};
/* char: 0xc9 */
static const GLubyte ch201data[] = {
0xfe,0x40,0x40,0x40,0x78,0x40,0x40,0xfe,0x0,0x30,0x8,
};
static const BitmapCharRec ch201 = {7,11,-1,0,9,ch201data};
/* char: 0xc8 */
static const GLubyte ch200data[] = {
0xfe,0x40,0x40,0x40,0x78,0x40,0x40,0xfe,0x0,0x18,0x20,
};
static const BitmapCharRec ch200 = {7,11,-1,0,9,ch200data};
/* char: 0xc7 */
static const GLubyte ch199data[] = {
0x30,0x48,0x18,0x7c,0x82,0x80,0x80,0x80,0x80,0x80,0x80,0x82,0x7c,
};
static const BitmapCharRec ch199 = {7,13,-1,3,9,ch199data};
/* char: 0xc6 */
static const GLubyte ch198data[] = {
0x9e,0x90,0x90,0x90,0xfc,0x90,0x90,0x90,0x90,0x6e,
};
static const BitmapCharRec ch198 = {7,10,-1,0,9,ch198data};
/* char: 0xc5 */
static const GLubyte ch197data[] = {
0x82,0x82,0x82,0xfe,0x82,0x82,0x44,0x38,0x10,0x28,0x10,
};
static const BitmapCharRec ch197 = {7,11,-1,0,9,ch197data};
/* char: 0xc4 */
static const GLubyte ch196data[] = {
0x82,0x82,0x82,0xfe,0x82,0x82,0x44,0x38,0x0,0x28,0x28,
};
static const BitmapCharRec ch196 = {7,11,-1,0,9,ch196data};
/* char: 0xc3 */
static const GLubyte ch195data[] = {
0x82,0x82,0x82,0xfe,0x82,0x82,0x44,0x38,0x0,0x50,0x28,
};
static const BitmapCharRec ch195 = {7,11,-1,0,9,ch195data};
/* char: 0xc2 */
static const GLubyte ch194data[] = {
0x82,0x82,0x82,0xfe,0x82,0x82,0x44,0x38,0x0,0x44,0x38,
};
static const BitmapCharRec ch194 = {7,11,-1,0,9,ch194data};
/* char: 0xc1 */
static const GLubyte ch193data[] = {
0x82,0x82,0x82,0xfe,0x82,0x82,0x44,0x38,0x0,0x30,0x8,
};
static const BitmapCharRec ch193 = {7,11,-1,0,9,ch193data};
/* char: 0xc0 */
static const GLubyte ch192data[] = {
0x82,0x82,0x82,0xfe,0x82,0x82,0x44,0x38,0x0,0x18,0x20,
};
static const BitmapCharRec ch192 = {7,11,-1,0,9,ch192data};
/* char: 0xbf */
static const GLubyte ch191data[] = {
0x7c,0x82,0x82,0x80,0x40,0x20,0x10,0x10,0x0,0x10,
};
static const BitmapCharRec ch191 = {7,10,-1,0,9,ch191data};
/* char: 0xbe */
static const GLubyte ch190data[] = {
0x6,0x1a,0x12,0xa,0x66,0x92,0x10,0x20,0x90,0x60,
};
static const BitmapCharRec ch190 = {7,10,-1,0,9,ch190data};
/* char: 0xbd */
static const GLubyte ch189data[] = {
0x1e,0x10,0xc,0x2,0xf2,0x4c,0x40,0x40,0xc0,0x40,
};
static const BitmapCharRec ch189 = {7,10,-1,0,9,ch189data};
/* char: 0xbc */
static const GLubyte ch188data[] = {
0x6,0x1a,0x12,0xa,0xe6,0x42,0x40,0x40,0xc0,0x40,
};
static const BitmapCharRec ch188 = {7,10,-1,0,9,ch188data};
/* char: 0xbb */
static const GLubyte ch187data[] = {
0x90,0x48,0x24,0x12,0x12,0x24,0x48,0x90,
};
static const BitmapCharRec ch187 = {7,8,-1,-1,9,ch187data};
/* char: 0xba */
static const GLubyte ch186data[] = {
0xf8,0x0,0x70,0x88,0x88,0x70,
};
static const BitmapCharRec ch186 = {5,6,-1,-5,9,ch186data};
/* char: 0xb9 */
static const GLubyte ch185data[] = {
0xe0,0x40,0x40,0x40,0xc0,0x40,
};
static const BitmapCharRec ch185 = {3,6,-1,-4,9,ch185data};
/* char: 0xb8 */
static const GLubyte ch184data[] = {
0x60,0x90,0x30,
};
static const BitmapCharRec ch184 = {4,3,-2,3,9,ch184data};
/* char: 0xb7 */
static const GLubyte ch183data[] = {
0xc0,0xc0,
};
static const BitmapCharRec ch183 = {2,2,-4,-4,9,ch183data};
/* char: 0xb6 */
static const GLubyte ch182data[] = {
0xa,0xa,0xa,0xa,0xa,0x7a,0x8a,0x8a,0x8a,0x7e,
};
static const BitmapCharRec ch182 = {7,10,-1,0,9,ch182data};
/* char: 0xb5 */
static const GLubyte ch181data[] = {
0x80,0x80,0xba,0xc6,0x82,0x82,0x82,0x82,0x82,
};
static const BitmapCharRec ch181 = {7,9,-1,2,9,ch181data};
/* char: 0xb4 */
static const GLubyte ch180data[] = {
0xc0,0x20,
};
static const BitmapCharRec ch180 = {3,2,-3,-9,9,ch180data};
/* char: 0xb3 */
static const GLubyte ch179data[] = {
0x60,0x90,0x10,0x20,0x90,0x60,
};
static const BitmapCharRec ch179 = {4,6,-1,-4,9,ch179data};
/* char: 0xb2 */
static const GLubyte ch178data[] = {
0xf0,0x80,0x60,0x10,0x90,0x60,
};
static const BitmapCharRec ch178 = {4,6,-1,-4,9,ch178data};
/* char: 0xb1 */
static const GLubyte ch177data[] = {
0xfe,0x0,0x10,0x10,0x10,0xfe,0x10,0x10,0x10,
};
static const BitmapCharRec ch177 = {7,9,-1,-1,9,ch177data};
/* char: 0xb0 */
static const GLubyte ch176data[] = {
0x60,0x90,0x90,0x60,
};
static const BitmapCharRec ch176 = {4,4,-3,-6,9,ch176data};
/* char: 0xaf */
static const GLubyte ch175data[] = {
0xfc,
};
static const BitmapCharRec ch175 = {6,1,-1,-9,9,ch175data};
/* char: 0xae */
static const GLubyte ch174data[] = {
0x3c,0x42,0xa5,0xa9,0xbd,0xa5,0xb9,0x42,0x3c,
};
static const BitmapCharRec ch174 = {8,9,0,-1,9,ch174data};
/* char: 0xad */
static const GLubyte ch173data[] = {
0xfc,
};
static const BitmapCharRec ch173 = {6,1,-1,-4,9,ch173data};
/* char: 0xac */
static const GLubyte ch172data[] = {
0x4,0x4,0x4,0xfc,
};
static const BitmapCharRec ch172 = {6,4,-1,-2,9,ch172data};
/* char: 0xab */
static const GLubyte ch171data[] = {
0x12,0x24,0x48,0x90,0x90,0x48,0x24,0x12,
};
static const BitmapCharRec ch171 = {7,8,-1,-1,9,ch171data};
/* char: 0xaa */
static const GLubyte ch170data[] = {
0xf8,0x0,0x78,0x90,0x70,0x90,0x60,
};
static const BitmapCharRec ch170 = {5,7,-3,-3,9,ch170data};
/* char: 0xa9 */
static const GLubyte ch169data[] = {
0x3c,0x42,0x99,0xa5,0xa1,0xa5,0x99,0x42,0x3c,
};
static const BitmapCharRec ch169 = {8,9,0,-1,9,ch169data};
/* char: 0xa8 */
static const GLubyte ch168data[] = {
0xa0,0xa0,
};
static const BitmapCharRec ch168 = {3,2,-3,-9,9,ch168data};
/* char: 0xa7 */
static const GLubyte ch167data[] = {
0x70,0x88,0x8,0x70,0x88,0x88,0x88,0x70,0x80,0x88,0x70,
};
static const BitmapCharRec ch167 = {5,11,-2,1,9,ch167data};
/* char: 0xa6 */
static const GLubyte ch166data[] = {
0x80,0x80,0x80,0x80,0x80,0x0,0x80,0x80,0x80,0x80,0x80,
};
static const BitmapCharRec ch166 = {1,11,-4,1,9,ch166data};
/* char: 0xa5 */
static const GLubyte ch165data[] = {
0x10,0x10,0x10,0x7c,0x10,0x7c,0x28,0x44,0x82,0x82,
};
static const BitmapCharRec ch165 = {7,10,-1,0,9,ch165data};
/* char: 0xa4 */
static const GLubyte ch164data[] = {
0x82,0x7c,0x44,0x44,0x7c,0x82,
};
static const BitmapCharRec ch164 = {7,6,-1,-3,9,ch164data};
/* char: 0xa3 */
static const GLubyte ch163data[] = {
0x5c,0xa2,0x60,0x20,0x20,0xf8,0x20,0x20,0x22,0x1c,
};
static const BitmapCharRec ch163 = {7,10,-1,0,9,ch163data};
/* char: 0xa2 */
static const GLubyte ch162data[] = {
0x40,0x78,0xa4,0xa0,0x90,0x94,0x78,0x8,
};
static const BitmapCharRec ch162 = {6,8,-1,0,9,ch162data};
/* char: 0xa1 */
static const GLubyte ch161data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x0,0x80,0x80,
};
static const BitmapCharRec ch161 = {1,11,-4,0,9,ch161data};
/* char: 0x7e '~' */
static const GLubyte ch126data[] = {
0x8c,0x92,0x62,
};
static const BitmapCharRec ch126 = {7,3,-1,-7,9,ch126data};
/* char: 0x7d '}' */
static const GLubyte ch125data[] = {
0xe0,0x10,0x10,0x10,0x20,0x18,0x18,0x20,0x10,0x10,0x10,0xe0,
};
static const BitmapCharRec ch125 = {5,12,-1,1,9,ch125data};
/* char: 0x7c '|' */
static const GLubyte ch124data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
};
static const BitmapCharRec ch124 = {1,12,-4,1,9,ch124data};
/* char: 0x7b '{' */
static const GLubyte ch123data[] = {
0x38,0x40,0x40,0x40,0x20,0xc0,0xc0,0x20,0x40,0x40,0x40,0x38,
};
static const BitmapCharRec ch123 = {5,12,-3,1,9,ch123data};
/* char: 0x7a 'z' */
static const GLubyte ch122data[] = {
0xfe,0x40,0x20,0x10,0x8,0x4,0xfe,
};
static const BitmapCharRec ch122 = {7,7,-1,0,9,ch122data};
/* char: 0x79 'y' */
static const GLubyte ch121data[] = {
0x78,0x84,0x4,0x74,0x8c,0x84,0x84,0x84,0x84,0x84,
};
static const BitmapCharRec ch121 = {6,10,-1,3,9,ch121data};
/* char: 0x78 'x' */
static const GLubyte ch120data[] = {
0x82,0x44,0x28,0x10,0x28,0x44,0x82,
};
static const BitmapCharRec ch120 = {7,7,-1,0,9,ch120data};
/* char: 0x77 'w' */
static const GLubyte ch119data[] = {
0x44,0xaa,0x92,0x92,0x92,0x82,0x82,
};
static const BitmapCharRec ch119 = {7,7,-1,0,9,ch119data};
/* char: 0x76 'v' */
static const GLubyte ch118data[] = {
0x10,0x28,0x28,0x44,0x44,0x82,0x82,
};
static const BitmapCharRec ch118 = {7,7,-1,0,9,ch118data};
/* char: 0x75 'u' */
static const GLubyte ch117data[] = {
0x7a,0x84,0x84,0x84,0x84,0x84,0x84,
};
static const BitmapCharRec ch117 = {7,7,-1,0,9,ch117data};
/* char: 0x74 't' */
static const GLubyte ch116data[] = {
0x1c,0x22,0x20,0x20,0x20,0x20,0xfc,0x20,0x20,
};
static const BitmapCharRec ch116 = {7,9,-1,0,9,ch116data};
/* char: 0x73 's' */
static const GLubyte ch115data[] = {
0x7c,0x82,0x2,0x7c,0x80,0x82,0x7c,
};
static const BitmapCharRec ch115 = {7,7,-1,0,9,ch115data};
/* char: 0x72 'r' */
static const GLubyte ch114data[] = {
0x40,0x40,0x40,0x40,0x42,0x62,0x9c,
};
static const BitmapCharRec ch114 = {7,7,-1,0,9,ch114data};
/* char: 0x71 'q' */
static const GLubyte ch113data[] = {
0x2,0x2,0x2,0x7a,0x86,0x82,0x82,0x82,0x86,0x7a,
};
static const BitmapCharRec ch113 = {7,10,-1,3,9,ch113data};
/* char: 0x70 'p' */
static const GLubyte ch112data[] = {
0x80,0x80,0x80,0xbc,0xc2,0x82,0x82,0x82,0xc2,0xbc,
};
static const BitmapCharRec ch112 = {7,10,-1,3,9,ch112data};
/* char: 0x6f 'o' */
static const GLubyte ch111data[] = {
0x7c,0x82,0x82,0x82,0x82,0x82,0x7c,
};
static const BitmapCharRec ch111 = {7,7,-1,0,9,ch111data};
/* char: 0x6e 'n' */
static const GLubyte ch110data[] = {
0x82,0x82,0x82,0x82,0x82,0xc2,0xbc,
};
static const BitmapCharRec ch110 = {7,7,-1,0,9,ch110data};
/* char: 0x6d 'm' */
static const GLubyte ch109data[] = {
0x82,0x92,0x92,0x92,0x92,0x92,0xec,
};
static const BitmapCharRec ch109 = {7,7,-1,0,9,ch109data};
/* char: 0x6c 'l' */
static const GLubyte ch108data[] = {
0xf8,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xe0,
};
static const BitmapCharRec ch108 = {5,10,-2,0,9,ch108data};
/* char: 0x6b 'k' */
static const GLubyte ch107data[] = {
0x82,0x8c,0xb0,0xc0,0xb0,0x8c,0x82,0x80,0x80,0x80,
};
static const BitmapCharRec ch107 = {7,10,-1,0,9,ch107data};
/* char: 0x6a 'j' */
static const GLubyte ch106data[] = {
0x78,0x84,0x84,0x84,0x4,0x4,0x4,0x4,0x4,0x1c,0x0,0x0,0xc,
};
static const BitmapCharRec ch106 = {6,13,-1,3,9,ch106data};
/* char: 0x69 'i' */
static const GLubyte ch105data[] = {
0xf8,0x20,0x20,0x20,0x20,0x20,0xe0,0x0,0x0,0x60,
};
static const BitmapCharRec ch105 = {5,10,-2,0,9,ch105data};
/* char: 0x68 'h' */
static const GLubyte ch104data[] = {
0x82,0x82,0x82,0x82,0x82,0xc2,0xbc,0x80,0x80,0x80,
};
static const BitmapCharRec ch104 = {7,10,-1,0,9,ch104data};
/* char: 0x67 'g' */
static const GLubyte ch103data[] = {
0x7c,0x82,0x82,0x7c,0x80,0x78,0x84,0x84,0x84,0x7a,
};
static const BitmapCharRec ch103 = {7,10,-1,3,9,ch103data};
/* char: 0x66 'f' */
static const GLubyte ch102data[] = {
0x20,0x20,0x20,0x20,0xf8,0x20,0x20,0x22,0x22,0x1c,
};
static const BitmapCharRec ch102 = {7,10,-1,0,9,ch102data};
/* char: 0x65 'e' */
static const GLubyte ch101data[] = {
0x7c,0x80,0x80,0xfe,0x82,0x82,0x7c,
};
static const BitmapCharRec ch101 = {7,7,-1,0,9,ch101data};
/* char: 0x64 'd' */
static const GLubyte ch100data[] = {
0x7a,0x86,0x82,0x82,0x82,0x86,0x7a,0x2,0x2,0x2,
};
static const BitmapCharRec ch100 = {7,10,-1,0,9,ch100data};
/* char: 0x63 'c' */
static const GLubyte ch99data[] = {
0x7c,0x82,0x80,0x80,0x80,0x82,0x7c,
};
static const BitmapCharRec ch99 = {7,7,-1,0,9,ch99data};
/* char: 0x62 'b' */
static const GLubyte ch98data[] = {
0xbc,0xc2,0x82,0x82,0x82,0xc2,0xbc,0x80,0x80,0x80,
};
static const BitmapCharRec ch98 = {7,10,-1,0,9,ch98data};
/* char: 0x61 'a' */
static const GLubyte ch97data[] = {
0x7a,0x86,0x82,0x7e,0x2,0x2,0x7c,
};
static const BitmapCharRec ch97 = {7,7,-1,0,9,ch97data};
/* char: 0x60 '`' */
static const GLubyte ch96data[] = {
0x10,0x20,0x40,0xc0,
};
static const BitmapCharRec ch96 = {4,4,-3,-6,9,ch96data};
/* char: 0x5f '_' */
static const GLubyte ch95data[] = {
0xff,
};
static const BitmapCharRec ch95 = {8,1,0,1,9,ch95data};
/* char: 0x5e '^' */
static const GLubyte ch94data[] = {
0x82,0x44,0x28,0x10,
};
static const BitmapCharRec ch94 = {7,4,-1,-6,9,ch94data};
/* char: 0x5d ']' */
static const GLubyte ch93data[] = {
0xf0,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0xf0,
};
static const BitmapCharRec ch93 = {4,12,-2,1,9,ch93data};
/* char: 0x5c '\' */
static const GLubyte ch92data[] = {
0x2,0x4,0x4,0x8,0x10,0x10,0x20,0x40,0x40,0x80,
};
static const BitmapCharRec ch92 = {7,10,-1,0,9,ch92data};
/* char: 0x5b '[' */
static const GLubyte ch91data[] = {
0xf0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xf0,
};
static const BitmapCharRec ch91 = {4,12,-3,1,9,ch91data};
/* char: 0x5a 'Z' */
static const GLubyte ch90data[] = {
0xfe,0x80,0x80,0x40,0x20,0x10,0x8,0x4,0x2,0xfe,
};
static const BitmapCharRec ch90 = {7,10,-1,0,9,ch90data};
/* char: 0x59 'Y' */
static const GLubyte ch89data[] = {
0x10,0x10,0x10,0x10,0x10,0x10,0x28,0x44,0x82,0x82,
};
static const BitmapCharRec ch89 = {7,10,-1,0,9,ch89data};
/* char: 0x58 'X' */
static const GLubyte ch88data[] = {
0x82,0x82,0x44,0x28,0x10,0x10,0x28,0x44,0x82,0x82,
};
static const BitmapCharRec ch88 = {7,10,-1,0,9,ch88data};
/* char: 0x57 'W' */
static const GLubyte ch87data[] = {
0x44,0xaa,0x92,0x92,0x92,0x92,0x82,0x82,0x82,0x82,
};
static const BitmapCharRec ch87 = {7,10,-1,0,9,ch87data};
/* char: 0x56 'V' */
static const GLubyte ch86data[] = {
0x10,0x28,0x28,0x28,0x44,0x44,0x44,0x82,0x82,0x82,
};
static const BitmapCharRec ch86 = {7,10,-1,0,9,ch86data};
/* char: 0x55 'U' */
static const GLubyte ch85data[] = {
0x7c,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,
};
static const BitmapCharRec ch85 = {7,10,-1,0,9,ch85data};
/* char: 0x54 'T' */
static const GLubyte ch84data[] = {
0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0xfe,
};
static const BitmapCharRec ch84 = {7,10,-1,0,9,ch84data};
/* char: 0x53 'S' */
static const GLubyte ch83data[] = {
0x7c,0x82,0x82,0x2,0xc,0x70,0x80,0x82,0x82,0x7c,
};
static const BitmapCharRec ch83 = {7,10,-1,0,9,ch83data};
/* char: 0x52 'R' */
static const GLubyte ch82data[] = {
0x82,0x82,0x84,0x88,0x90,0xfc,0x82,0x82,0x82,0xfc,
};
static const BitmapCharRec ch82 = {7,10,-1,0,9,ch82data};
/* char: 0x51 'Q' */
static const GLubyte ch81data[] = {
0x6,0x8,0x7c,0x92,0xa2,0x82,0x82,0x82,0x82,0x82,0x82,0x7c,
};
static const BitmapCharRec ch81 = {7,12,-1,2,9,ch81data};
/* char: 0x50 'P' */
static const GLubyte ch80data[] = {
0x80,0x80,0x80,0x80,0x80,0xfc,0x82,0x82,0x82,0xfc,
};
static const BitmapCharRec ch80 = {7,10,-1,0,9,ch80data};
/* char: 0x4f 'O' */
static const GLubyte ch79data[] = {
0x7c,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x7c,
};
static const BitmapCharRec ch79 = {7,10,-1,0,9,ch79data};
/* char: 0x4e 'N' */
static const GLubyte ch78data[] = {
0x82,0x82,0x82,0x86,0x8a,0x92,0xa2,0xc2,0x82,0x82,
};
static const BitmapCharRec ch78 = {7,10,-1,0,9,ch78data};
/* char: 0x4d 'M' */
static const GLubyte ch77data[] = {
0x82,0x82,0x82,0x92,0x92,0xaa,0xaa,0xc6,0x82,0x82,
};
static const BitmapCharRec ch77 = {7,10,-1,0,9,ch77data};
/* char: 0x4c 'L' */
static const GLubyte ch76data[] = {
0xfe,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
};
static const BitmapCharRec ch76 = {7,10,-1,0,9,ch76data};
/* char: 0x4b 'K' */
static const GLubyte ch75data[] = {
0x82,0x84,0x88,0x90,0xa0,0xe0,0x90,0x88,0x84,0x82,
};
static const BitmapCharRec ch75 = {7,10,-1,0,9,ch75data};
/* char: 0x4a 'J' */
static const GLubyte ch74data[] = {
0x78,0x84,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x1e,
};
static const BitmapCharRec ch74 = {7,10,-1,0,9,ch74data};
/* char: 0x49 'I' */
static const GLubyte ch73data[] = {
0xf8,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xf8,
};
static const BitmapCharRec ch73 = {5,10,-2,0,9,ch73data};
/* char: 0x48 'H' */
static const GLubyte ch72data[] = {
0x82,0x82,0x82,0x82,0x82,0xfe,0x82,0x82,0x82,0x82,
};
static const BitmapCharRec ch72 = {7,10,-1,0,9,ch72data};
/* char: 0x47 'G' */
static const GLubyte ch71data[] = {
0x7c,0x82,0x82,0x82,0x8e,0x80,0x80,0x80,0x82,0x7c,
};
static const BitmapCharRec ch71 = {7,10,-1,0,9,ch71data};
/* char: 0x46 'F' */
static const GLubyte ch70data[] = {
0x40,0x40,0x40,0x40,0x40,0x78,0x40,0x40,0x40,0xfe,
};
static const BitmapCharRec ch70 = {7,10,-1,0,9,ch70data};
/* char: 0x45 'E' */
static const GLubyte ch69data[] = {
0xfe,0x40,0x40,0x40,0x40,0x78,0x40,0x40,0x40,0xfe,
};
static const BitmapCharRec ch69 = {7,10,-1,0,9,ch69data};
/* char: 0x44 'D' */
static const GLubyte ch68data[] = {
0xfc,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0xfc,
};
static const BitmapCharRec ch68 = {7,10,-1,0,9,ch68data};
/* char: 0x43 'C' */
static const GLubyte ch67data[] = {
0x7c,0x82,0x80,0x80,0x80,0x80,0x80,0x80,0x82,0x7c,
};
static const BitmapCharRec ch67 = {7,10,-1,0,9,ch67data};
/* char: 0x42 'B' */
static const GLubyte ch66data[] = {
0xfc,0x42,0x42,0x42,0x42,0x7c,0x42,0x42,0x42,0xfc,
};
static const BitmapCharRec ch66 = {7,10,-1,0,9,ch66data};
/* char: 0x41 'A' */
static const GLubyte ch65data[] = {
0x82,0x82,0x82,0xfe,0x82,0x82,0x82,0x44,0x28,0x10,
};
static const BitmapCharRec ch65 = {7,10,-1,0,9,ch65data};
/* char: 0x40 '@' */
static const GLubyte ch64data[] = {
0x7c,0x80,0x80,0x9a,0xa6,0xa2,0x9e,0x82,0x82,0x7c,
};
static const BitmapCharRec ch64 = {7,10,-1,0,9,ch64data};
/* char: 0x3f '?' */
static const GLubyte ch63data[] = {
0x10,0x0,0x10,0x10,0x8,0x4,0x2,0x82,0x82,0x7c,
};
static const BitmapCharRec ch63 = {7,10,-1,0,9,ch63data};
/* char: 0x3e '>' */
static const GLubyte ch62data[] = {
0x80,0x40,0x20,0x10,0x8,0x8,0x10,0x20,0x40,0x80,
};
static const BitmapCharRec ch62 = {5,10,-2,0,9,ch62data};
/* char: 0x3d '=' */
static const GLubyte ch61data[] = {
0xfe,0x0,0x0,0xfe,
};
static const BitmapCharRec ch61 = {7,4,-1,-2,9,ch61data};
/* char: 0x3c '<' */
static const GLubyte ch60data[] = {
0x8,0x10,0x20,0x40,0x80,0x80,0x40,0x20,0x10,0x8,
};
static const BitmapCharRec ch60 = {5,10,-2,0,9,ch60data};
/* char: 0x3b ';' */
static const GLubyte ch59data[] = {
0x80,0x40,0x40,0xc0,0xc0,0x0,0x0,0x0,0xc0,0xc0,
};
static const BitmapCharRec ch59 = {2,10,-4,3,9,ch59data};
/* char: 0x3a ':' */
static const GLubyte ch58data[] = {
0xc0,0xc0,0x0,0x0,0x0,0xc0,0xc0,
};
static const BitmapCharRec ch58 = {2,7,-4,0,9,ch58data};
/* char: 0x39 '9' */
static const GLubyte ch57data[] = {
0x78,0x4,0x2,0x2,0x7a,0x86,0x82,0x82,0x82,0x7c,
};
static const BitmapCharRec ch57 = {7,10,-1,0,9,ch57data};
/* char: 0x38 '8' */
static const GLubyte ch56data[] = {
0x38,0x44,0x82,0x82,0x44,0x38,0x44,0x82,0x44,0x38,
};
static const BitmapCharRec ch56 = {7,10,-1,0,9,ch56data};
/* char: 0x37 '7' */
static const GLubyte ch55data[] = {
0x40,0x40,0x20,0x20,0x10,0x8,0x4,0x2,0x2,0xfe,
};
static const BitmapCharRec ch55 = {7,10,-1,0,9,ch55data};
/* char: 0x36 '6' */
static const GLubyte ch54data[] = {
0x7c,0x82,0x82,0x82,0xc2,0xbc,0x80,0x80,0x40,0x3c,
};
static const BitmapCharRec ch54 = {7,10,-1,0,9,ch54data};
/* char: 0x35 '5' */
static const GLubyte ch53data[] = {
0x7c,0x82,0x2,0x2,0x2,0xc2,0xbc,0x80,0x80,0xfe,
};
static const BitmapCharRec ch53 = {7,10,-1,0,9,ch53data};
/* char: 0x34 '4' */
static const GLubyte ch52data[] = {
0x4,0x4,0x4,0xfe,0x84,0x44,0x24,0x14,0xc,0x4,
};
static const BitmapCharRec ch52 = {7,10,-1,0,9,ch52data};
/* char: 0x33 '3' */
static const GLubyte ch51data[] = {
0x7c,0x82,0x2,0x2,0x2,0x1c,0x8,0x4,0x2,0xfe,
};
static const BitmapCharRec ch51 = {7,10,-1,0,9,ch51data};
/* char: 0x32 '2' */
static const GLubyte ch50data[] = {
0xfe,0x80,0x40,0x30,0x8,0x4,0x2,0x82,0x82,0x7c,
};
static const BitmapCharRec ch50 = {7,10,-1,0,9,ch50data};
/* char: 0x31 '1' */
static const GLubyte ch49data[] = {
0xfe,0x10,0x10,0x10,0x10,0x10,0x90,0x50,0x30,0x10,
};
static const BitmapCharRec ch49 = {7,10,-1,0,9,ch49data};
/* char: 0x30 '0' */
static const GLubyte ch48data[] = {
0x38,0x44,0x82,0x82,0x82,0x82,0x82,0x82,0x44,0x38,
};
static const BitmapCharRec ch48 = {7,10,-1,0,9,ch48data};
/* char: 0x2f '/' */
static const GLubyte ch47data[] = {
0x80,0x40,0x40,0x20,0x10,0x10,0x8,0x4,0x4,0x2,
};
static const BitmapCharRec ch47 = {7,10,-1,0,9,ch47data};
/* char: 0x2e '.' */
static const GLubyte ch46data[] = {
0xc0,0xc0,
};
static const BitmapCharRec ch46 = {2,2,-4,0,9,ch46data};
/* char: 0x2d '-' */
static const GLubyte ch45data[] = {
0xfe,
};
static const BitmapCharRec ch45 = {7,1,-1,-4,9,ch45data};
/* char: 0x2c ',' */
static const GLubyte ch44data[] = {
0x80,0x40,0x40,0xc0,0xc0,
};
static const BitmapCharRec ch44 = {2,5,-4,3,9,ch44data};
/* char: 0x2b '+' */
static const GLubyte ch43data[] = {
0x10,0x10,0x10,0xfe,0x10,0x10,0x10,
};
static const BitmapCharRec ch43 = {7,7,-1,-1,9,ch43data};
/* char: 0x2a '*' */
static const GLubyte ch42data[] = {
0x10,0x92,0x54,0x38,0x54,0x92,0x10,
};
static const BitmapCharRec ch42 = {7,7,-1,-1,9,ch42data};
/* char: 0x29 ')' */
static const GLubyte ch41data[] = {
0x80,0x40,0x40,0x20,0x20,0x20,0x20,0x20,0x20,0x40,0x40,0x80,
};
static const BitmapCharRec ch41 = {3,12,-3,1,9,ch41data};
/* char: 0x28 '(' */
static const GLubyte ch40data[] = {
0x20,0x40,0x40,0x80,0x80,0x80,0x80,0x80,0x80,0x40,0x40,0x20,
};
static const BitmapCharRec ch40 = {3,12,-3,1,9,ch40data};
/* char: 0x27 ''' */
static const GLubyte ch39data[] = {
0x80,0x40,0x20,0x30,
};
static const BitmapCharRec ch39 = {4,4,-3,-6,9,ch39data};
/* char: 0x26 '&' */
static const GLubyte ch38data[] = {
0x62,0x94,0x88,0x94,0x62,0x60,0x90,0x90,0x90,0x60,
};
static const BitmapCharRec ch38 = {7,10,-1,0,9,ch38data};
/* char: 0x25 '%' */
static const GLubyte ch37data[] = {
0x84,0x4a,0x4a,0x24,0x10,0x10,0x48,0xa4,0xa4,0x42,
};
static const BitmapCharRec ch37 = {7,10,-1,0,9,ch37data};
/* char: 0x24 '$' */
static const GLubyte ch36data[] = {
0x10,0x7c,0x92,0x12,0x12,0x14,0x38,0x50,0x90,0x92,0x7c,0x10,
};
static const BitmapCharRec ch36 = {7,12,-1,1,9,ch36data};
/* char: 0x23 '#' */
static const GLubyte ch35data[] = {
0x48,0x48,0xfc,0x48,0x48,0xfc,0x48,0x48,
};
static const BitmapCharRec ch35 = {6,8,-1,-1,9,ch35data};
/* char: 0x22 '"' */
static const GLubyte ch34data[] = {
0x90,0x90,0x90,
};
static const BitmapCharRec ch34 = {4,3,-3,-7,9,ch34data};
/* char: 0x21 '!' */
static const GLubyte ch33data[] = {
0x80,0x80,0x0,0x0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
};
static const BitmapCharRec ch33 = {1,11,-4,0,9,ch33data};
/* char: 0x1f */
static const GLubyte ch31data[] = {
0xc0,0xc0,
};
static const BitmapCharRec ch31 = {2,2,-4,-2,9,ch31data};
/* char: 0x1e */
static const GLubyte ch30data[] = {
0x5c,0xa2,0x60,0x20,0x20,0xf8,0x20,0x20,0x22,0x1c,
};
static const BitmapCharRec ch30 = {7,10,-1,0,9,ch30data};
/* char: 0x1d */
static const GLubyte ch29data[] = {
0x80,0x40,0xfe,0x10,0xfe,0x4,0x2,
};
static const BitmapCharRec ch29 = {7,7,-1,0,9,ch29data};
/* char: 0x1c */
static const GLubyte ch28data[] = {
0x44,0x24,0x24,0x24,0x24,0x24,0xfe,
};
static const BitmapCharRec ch28 = {7,7,-1,0,9,ch28data};
/* char: 0x1b */
static const GLubyte ch27data[] = {
0xfe,0x0,0x80,0x40,0x20,0x10,0x8,0x8,0x10,0x20,0x40,0x80,
};
static const BitmapCharRec ch27 = {7,12,-1,2,9,ch27data};
/* char: 0x1a */
static const GLubyte ch26data[] = {
0xfc,0x0,0x4,0x8,0x10,0x20,0x40,0x40,0x20,0x10,0x8,0x4,
};
static const BitmapCharRec ch26 = {6,12,-2,2,9,ch26data};
/* char: 0x19 */
static const GLubyte ch25data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
};
static const BitmapCharRec ch25 = {1,15,-4,3,9,ch25data};
/* char: 0x18 */
static const GLubyte ch24data[] = {
0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0xff,0x80,
};
static const BitmapCharRec ch24 = {9,7,0,3,9,ch24data};
/* char: 0x17 */
static const GLubyte ch23data[] = {
0xff,0x80,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,
0x8,0x0,
};
static const BitmapCharRec ch23 = {9,9,0,-3,9,ch23data};
/* char: 0x16 */
static const GLubyte ch22data[] = {
0x8,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,
};
static const BitmapCharRec ch22 = {5,15,0,3,9,ch22data};
/* char: 0x15 */
static const GLubyte ch21data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0xf8,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
};
static const BitmapCharRec ch21 = {5,15,-4,3,9,ch21data};
/* char: 0x14 */
static const GLubyte ch20data[] = {
0xff,0x80,
};
static const BitmapCharRec ch20 = {9,1,0,1,9,ch20data};
/* char: 0x13 */
static const GLubyte ch19data[] = {
0xff,0x80,
};
static const BitmapCharRec ch19 = {9,1,0,-1,9,ch19data};
/* char: 0x12 */
static const GLubyte ch18data[] = {
0xff,0x80,
};
static const BitmapCharRec ch18 = {9,1,0,-3,9,ch18data};
/* char: 0x11 */
static const GLubyte ch17data[] = {
0xff,0x80,
};
static const BitmapCharRec ch17 = {9,1,0,-5,9,ch17data};
/* char: 0x10 */
static const GLubyte ch16data[] = {
0xff,0x80,
};
static const BitmapCharRec ch16 = {9,1,0,-7,9,ch16data};
/* char: 0xf */
static const GLubyte ch15data[] = {
0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0xff,0x80,0x8,0x0,
0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,
};
static const BitmapCharRec ch15 = {9,15,0,3,9,ch15data};
/* char: 0xe */
static const GLubyte ch14data[] = {
0xf8,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
};
static const BitmapCharRec ch14 = {5,9,-4,-3,9,ch14data};
/* char: 0xd */
static const GLubyte ch13data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0xf8,
};
static const BitmapCharRec ch13 = {5,7,-4,3,9,ch13data};
/* char: 0xc */
static const GLubyte ch12data[] = {
0x8,0x8,0x8,0x8,0x8,0x8,0xf8,
};
static const BitmapCharRec ch12 = {5,7,0,3,9,ch12data};
/* char: 0xb */
static const GLubyte ch11data[] = {
0xf8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,
};
static const BitmapCharRec ch11 = {5,9,0,-3,9,ch11data};
/* char: 0xa */
static const GLubyte ch10data[] = {
0x8,0x8,0x8,0x8,0x3e,0x0,0x20,0x50,0x88,0x88,
};
static const BitmapCharRec ch10 = {7,10,-1,2,9,ch10data};
/* char: 0x9 */
static const GLubyte ch9data[] = {
0x3e,0x20,0x20,0x20,0x20,0x88,0x98,0xa8,0xc8,0x88,
};
static const BitmapCharRec ch9 = {7,10,-1,2,9,ch9data};
/* char: 0x8 */
static const GLubyte ch8data[] = {
0xfe,0x10,0x10,0xfe,0x10,0x10,
};
static const BitmapCharRec ch8 = {7,6,-1,0,9,ch8data};
/* char: 0x7 */
static const GLubyte ch7data[] = {
0x70,0x88,0x88,0x70,
};
static const BitmapCharRec ch7 = {5,4,-2,-6,9,ch7data};
/* char: 0x6 */
static const GLubyte ch6data[] = {
0x20,0x20,0x3c,0x20,0x3e,0x0,0xf8,0x80,0x80,0x80,
};
static const BitmapCharRec ch6 = {7,10,-1,2,9,ch6data};
/* char: 0x5 */
static const GLubyte ch5data[] = {
0x22,0x22,0x3c,0x22,0x3c,0x0,0x78,0x80,0x80,0x78,
};
static const BitmapCharRec ch5 = {7,10,-1,2,9,ch5data};
/* char: 0x4 */
static const GLubyte ch4data[] = {
0x10,0x10,0x1c,0x10,0x1e,0x80,0x80,0xe0,0x80,0xf0,
};
static const BitmapCharRec ch4 = {7,10,-1,2,9,ch4data};
/* char: 0x3 */
static const GLubyte ch3data[] = {
0x8,0x8,0x8,0x3e,0x0,0x88,0x88,0xf8,0x88,0x88,
};
static const BitmapCharRec ch3 = {7,10,-1,2,9,ch3data};
/* char: 0x2 */
static const GLubyte ch2data[] = {
0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,
};
static const BitmapCharRec ch2 = {8,14,0,3,9,ch2data};
/* char: 0x1 */
static const GLubyte ch1data[] = {
0x10,0x38,0x7c,0xfe,0x7c,0x38,0x10,
};
static const BitmapCharRec ch1 = {7,7,-1,0,9,ch1data};
static const BitmapCharRec * const chars[] = {
&ch0,
&ch1,
&ch2,
&ch3,
&ch4,
&ch5,
&ch6,
&ch7,
&ch8,
&ch9,
&ch10,
&ch11,
&ch12,
&ch13,
&ch14,
&ch15,
&ch16,
&ch17,
&ch18,
&ch19,
&ch20,
&ch21,
&ch22,
&ch23,
&ch24,
&ch25,
&ch26,
&ch27,
&ch28,
&ch29,
&ch30,
&ch31,
&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,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
&ch160,
&ch161,
&ch162,
&ch163,
&ch164,
&ch165,
&ch166,
&ch167,
&ch168,
&ch169,
&ch170,
&ch171,
&ch172,
&ch173,
&ch174,
&ch175,
&ch176,
&ch177,
&ch178,
&ch179,
&ch180,
&ch181,
&ch182,
&ch183,
&ch184,
&ch185,
&ch186,
&ch187,
&ch188,
&ch189,
&ch190,
&ch191,
&ch192,
&ch193,
&ch194,
&ch195,
&ch196,
&ch197,
&ch198,
&ch199,
&ch200,
&ch201,
&ch202,
&ch203,
&ch204,
&ch205,
&ch206,
&ch207,
&ch208,
&ch209,
&ch210,
&ch211,
&ch212,
&ch213,
&ch214,
&ch215,
&ch216,
&ch217,
&ch218,
&ch219,
&ch220,
&ch221,
&ch222,
&ch223,
&ch224,
&ch225,
&ch226,
&ch227,
&ch228,
&ch229,
&ch230,
&ch231,
&ch232,
&ch233,
&ch234,
&ch235,
&ch236,
&ch237,
&ch238,
&ch239,
&ch240,
&ch241,
&ch242,
&ch243,
&ch244,
&ch245,
&ch246,
&ch247,
&ch248,
&ch249,
&ch250,
&ch251,
&ch252,
&ch253,
&ch254,
&ch255,
};
const BitmapFontRec glutBitmap9By15 = {
"-misc-fixed-medium-r-normal--15-140-75-75-C-90-iso8859-1",
256,
0,
chars
};
/* Copyright (c) Mark J. Kilgard, 1994. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#include "glutint.h"
#include "glutbitmap.h"
void GLUTAPIENTRY
glutBitmapCharacter(GLUTbitmapFont font, int c)
{
const BitmapCharRec *ch;
BitmapFontPtr fontinfo;
GLint swapbytes, lsbfirst, rowlength;
GLint skiprows, skippixels, alignment;
#if defined(_WIN32) || defined(GLUT_IMPORT_LIB)
fontinfo = (BitmapFontPtr) __glutFont(font);
#else
fontinfo = (BitmapFontPtr) font;
#endif
if (c < fontinfo->first ||
c >= fontinfo->first + fontinfo->num_chars)
return;
ch = fontinfo->ch[c - fontinfo->first];
if (ch) {
/* Save current modes. */
glGetIntegerv(GL_UNPACK_SWAP_BYTES, &swapbytes);
glGetIntegerv(GL_UNPACK_LSB_FIRST, &lsbfirst);
glGetIntegerv(GL_UNPACK_ROW_LENGTH, &rowlength);
glGetIntegerv(GL_UNPACK_SKIP_ROWS, &skiprows);
glGetIntegerv(GL_UNPACK_SKIP_PIXELS, &skippixels);
glGetIntegerv(GL_UNPACK_ALIGNMENT, &alignment);
/* Little endian machines (DEC Alpha for example) could
benefit from setting GL_UNPACK_LSB_FIRST to GL_TRUE
instead of GL_FALSE, but this would require changing the
generated bitmaps too. */
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(ch->width, ch->height, ch->xorig, ch->yorig,
ch->advance, 0, ch->bitmap);
/* Restore saved modes. */
glPixelStorei(GL_UNPACK_SWAP_BYTES, swapbytes);
glPixelStorei(GL_UNPACK_LSB_FIRST, lsbfirst);
glPixelStorei(GL_UNPACK_ROW_LENGTH, rowlength);
glPixelStorei(GL_UNPACK_SKIP_ROWS, skiprows);
glPixelStorei(GL_UNPACK_SKIP_PIXELS, skippixels);
glPixelStorei(GL_UNPACK_ALIGNMENT, alignment);
}
}
#ifndef __glutbitmap_h__
#define __glutbitmap_h__
/* Copyright (c) Mark J. Kilgard, 1994, 1998. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#define GLUT_NO_LIB_PRAGMA /* Avoid auto library linking when building
the GLUT library itself. */
#include <GL/glut.h>
typedef struct {
const GLsizei width;
const GLsizei height;
const GLfloat xorig;
const GLfloat yorig;
const GLfloat advance;
const GLubyte *bitmap;
} BitmapCharRec, *BitmapCharPtr;
typedef struct {
const char *name;
const int num_chars;
const int first;
const BitmapCharRec * const *ch;
} BitmapFontRec, *BitmapFontPtr;
typedef void *GLUTbitmapFont;
#endif /* __glutbitmap_h__ */
/* Copyright (c) Mark J. Kilgard, 1994. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#include "glutint.h"
#include "glutbitmap.h"
/* CENTRY */
int GLUTAPIENTRY
glutBitmapWidth(GLUTbitmapFont font, int c)
{
BitmapFontPtr fontinfo;
const BitmapCharRec *ch;
#if defined(_WIN32) || defined(GLUT_IMPORT_LIB)
fontinfo = (BitmapFontPtr) __glutFont(font);
#else
fontinfo = (BitmapFontPtr) font;
#endif
if (c < fontinfo->first || c >= fontinfo->first + fontinfo->num_chars)
return 0;
ch = fontinfo->ch[c - fontinfo->first];
if (ch)
return ch->advance;
else
return 0;
}
int GLUTAPIENTRY
glutBitmapLength(GLUTbitmapFont font, const unsigned char *string)
{
int c, length;
BitmapFontPtr fontinfo;
const BitmapCharRec *ch;
#if defined(_WIN32) || defined(GLUT_IMPORT_LIB)
fontinfo = (BitmapFontPtr) __glutFont(font);
#else
fontinfo = (BitmapFontPtr) font;
#endif
length = 0;
for (; *string != '\0'; string++) {
c = *string;
if (c >= fontinfo->first && c < fontinfo->first + fontinfo->num_chars) {
ch = fontinfo->ch[c - fontinfo->first];
if (ch)
length += ch->advance;
}
}
return length;
}
/* ENDCENTRY */
/* Copyright (c) Mark J. Kilgard, 1993, 1994. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
/* Based on XLayerUtil.c: Revision: 1.5 */
#include <stdio.h>
#include <stdlib.h>
#include "layerutil.h"
/* SGI optimization introduced in IRIX 6.3 to avoid X server
round trips for interning common X atoms. */
#include <X11/Xatom.h>
#if defined(_SGI_EXTRA_PREDEFINES) && !defined(NO_FAST_ATOMS)
#include <X11/SGIFastAtom.h>
#else
#define XSGIFastInternAtom(dpy,string,fast_name,how) XInternAtom(dpy,string,how)
#endif
static Bool layersRead = False;
static OverlayInfo **overlayInfoPerScreen;
static unsigned long *numOverlaysPerScreen;
static void
findServerOverlayVisualsInfo(Display * dpy)
{
static Atom overlayVisualsAtom;
Atom actualType;
Status status;
unsigned long sizeData, bytesLeft;
Window root;
int actualFormat, numScreens, i;
if (layersRead == False) {
overlayVisualsAtom = XSGIFastInternAtom(dpy,
"SERVER_OVERLAY_VISUALS", SGI_XA_SERVER_OVERLAY_VISUALS, True);
if (overlayVisualsAtom != None) {
numScreens = ScreenCount(dpy);
overlayInfoPerScreen = (OverlayInfo **)
malloc(numScreens * sizeof(OverlayInfo *));
numOverlaysPerScreen = (unsigned long *)
malloc(numScreens * sizeof(unsigned long));
if (overlayInfoPerScreen != NULL &&
numOverlaysPerScreen != NULL) {
for (i = 0; i < numScreens; i++) {
root = RootWindow(dpy, i);
status = XGetWindowProperty(dpy, root,
overlayVisualsAtom, 0L, (long) 10000, False,
overlayVisualsAtom, &actualType, &actualFormat,
&sizeData, &bytesLeft,
(unsigned char **) &overlayInfoPerScreen[i]);
if (status != Success ||
actualType != overlayVisualsAtom ||
actualFormat != 32 || sizeData < 4)
numOverlaysPerScreen[i] = 0;
else
/* Four 32-bit quantities per
SERVER_OVERLAY_VISUALS entry. */
numOverlaysPerScreen[i] = sizeData / 4;
}
layersRead = True;
} else {
if (overlayInfoPerScreen != NULL)
free(overlayInfoPerScreen);
if (numOverlaysPerScreen != NULL)
free(numOverlaysPerScreen);
}
}
}
}
int
__glutGetTransparentPixel(Display * dpy, XVisualInfo * vinfo)
{
int i, screen = vinfo->screen;
OverlayInfo *overlayInfo;
findServerOverlayVisualsInfo(dpy);
if (layersRead) {
for (i = 0; i < numOverlaysPerScreen[screen]; i++) {
overlayInfo = &overlayInfoPerScreen[screen][i];
if (vinfo->visualid == overlayInfo->overlay_visual) {
if (overlayInfo->transparent_type == TransparentPixel) {
return (int) overlayInfo->value;
} else {
return -1;
}
}
}
}
return -1;
}
XLayerVisualInfo *
__glutXGetLayerVisualInfo(Display * dpy, long lvinfo_mask,
XLayerVisualInfo * lvinfo_template, int *nitems_return)
{
XVisualInfo *vinfo;
XLayerVisualInfo *layerInfo;
int numVisuals, count, i, j;
vinfo = XGetVisualInfo(dpy, lvinfo_mask & VisualAllMask,
&lvinfo_template->vinfo, nitems_return);
if (vinfo == NULL)
return NULL;
numVisuals = *nitems_return;
findServerOverlayVisualsInfo(dpy);
layerInfo = (XLayerVisualInfo *)
malloc(numVisuals * sizeof(XLayerVisualInfo));
if (layerInfo == NULL) {
XFree(vinfo);
return NULL;
}
count = 0;
for (i = 0; i < numVisuals; i++) {
XVisualInfo *pVinfo = &vinfo[i];
int screen = pVinfo->screen;
OverlayInfo *overlayInfo = NULL;
overlayInfo = NULL;
if (layersRead) {
for (j = 0; j < numOverlaysPerScreen[screen]; j++)
if (pVinfo->visualid ==
overlayInfoPerScreen[screen][j].overlay_visual) {
overlayInfo = &overlayInfoPerScreen[screen][j];
break;
}
}
if (lvinfo_mask & VisualLayerMask) {
if (overlayInfo == NULL) {
if (lvinfo_template->layer != 0)
continue;
} else if (lvinfo_template->layer != overlayInfo->layer)
continue;
}
if (lvinfo_mask & VisualTransparentType) {
if (overlayInfo == NULL) {
if (lvinfo_template->type != None)
continue;
} else if (lvinfo_template->type !=
overlayInfo->transparent_type)
continue;
}
if (lvinfo_mask & VisualTransparentValue) {
if (overlayInfo == NULL)
/* Non-overlay visuals have no sense of
TransparentValue. */
continue;
else if (lvinfo_template->value != overlayInfo->value)
continue;
}
layerInfo[count].vinfo = *pVinfo;
if (overlayInfo == NULL) {
layerInfo[count].layer = 0;
layerInfo[count].type = None;
layerInfo[count].value = 0; /* meaningless */
} else {
layerInfo[count].layer = overlayInfo->layer;
layerInfo[count].type = overlayInfo->transparent_type;
layerInfo[count].value = overlayInfo->value;
}
count++;
}
XFree(vinfo);
*nitems_return = count;
if (count == 0) {
XFree(layerInfo);
return NULL;
} else
return layerInfo;
}
#if 0 /* Unused by GLUT. */
Status
__glutXMatchLayerVisualInfo(Display * dpy, int screen,
int depth, int visualClass, int layer,
XLayerVisualInfo * lvinfo_return)
{
XLayerVisualInfo *lvinfo;
XLayerVisualInfo lvinfoTemplate;
int nitems;
lvinfoTemplate.vinfo.screen = screen;
lvinfoTemplate.vinfo.depth = depth;
#if defined(__cplusplus) || defined(c_plusplus)
lvinfoTemplate.vinfo.c_class = visualClass;
#else
lvinfoTemplate.vinfo.class = visualClass;
#endif
lvinfoTemplate.layer = layer;
lvinfo = __glutXGetLayerVisualInfo(dpy,
VisualScreenMask | VisualDepthMask |
VisualClassMask | VisualLayerMask,
&lvinfoTemplate, &nitems);
if (lvinfo != NULL && nitems > 0) {
*lvinfo_return = *lvinfo;
return 1;
} else
return 0;
}
#endif
/* Copyright (c) Mark J. Kilgard, 1994, 1996, 1997. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#include <stdlib.h>
#include "glutint.h"
#define CLAMP(i) ((i) > 1.0 ? 1.0 : ((i) < 0.0 ? 0.0 : (i)))
/* CENTRY */
void GLUTAPIENTRY
glutSetColor(int ndx, GLfloat red, GLfloat green, GLfloat blue)
{
GLUTcolormap *cmap, *newcmap;
XVisualInfo *vis;
XColor color;
int i;
if (__glutCurrentWindow->renderWin == __glutCurrentWindow->win) {
cmap = __glutCurrentWindow->colormap;
vis = __glutCurrentWindow->vis;
} else {
cmap = __glutCurrentWindow->overlay->colormap;
vis = __glutCurrentWindow->overlay->vis;
if (ndx == __glutCurrentWindow->overlay->transparentPixel) {
__glutWarning(
"glutSetColor: cannot set color of overlay transparent index %d\n",
ndx);
return;
}
}
if (!cmap) {
__glutWarning("glutSetColor: current window is RGBA");
return;
}
#if defined(_WIN32)
if (ndx >= 256 || /* always assume 256 colors on Win32 */
#else
if (ndx >= vis->visual->map_entries ||
#endif
ndx < 0) {
__glutWarning("glutSetColor: index %d out of range", ndx);
return;
}
if (cmap->refcnt > 1) {
newcmap = __glutAssociateNewColormap(vis);
cmap->refcnt--;
/* Wouldn't it be nice if XCopyColormapAndFree could be
told not to free the old colormap's entries! */
for (i = cmap->size - 1; i >= 0; i--) {
if (i == ndx) {
/* We are going to set this cell shortly! */
continue;
}
if (cmap->cells[i].component[GLUT_RED] >= 0.0) {
color.pixel = i;
newcmap->cells[i].component[GLUT_RED] =
cmap->cells[i].component[GLUT_RED];
color.red = (GLfloat) 0xffff *
cmap->cells[i].component[GLUT_RED];
newcmap->cells[i].component[GLUT_GREEN] =
cmap->cells[i].component[GLUT_GREEN];
color.green = (GLfloat) 0xffff *
cmap->cells[i].component[GLUT_GREEN];
newcmap->cells[i].component[GLUT_BLUE] =
cmap->cells[i].component[GLUT_BLUE];
color.blue = (GLfloat) 0xffff *
cmap->cells[i].component[GLUT_BLUE];
color.flags = DoRed | DoGreen | DoBlue;
#if defined(_WIN32)
if (IsWindowVisible(__glutCurrentWindow->win)) {
XHDC = __glutCurrentWindow->hdc;
} else {
XHDC = 0;
}
#endif
XStoreColor(__glutDisplay, newcmap->cmap, &color);
} else {
/* Leave unallocated entries unallocated. */
}
}
cmap = newcmap;
if (__glutCurrentWindow->renderWin == __glutCurrentWindow->win) {
__glutCurrentWindow->colormap = cmap;
__glutCurrentWindow->cmap = cmap->cmap;
} else {
__glutCurrentWindow->overlay->colormap = cmap;
__glutCurrentWindow->overlay->cmap = cmap->cmap;
}
XSetWindowColormap(__glutDisplay,
__glutCurrentWindow->renderWin, cmap->cmap);
#if !defined(_WIN32)
{
GLUTwindow *toplevel;
toplevel = __glutToplevelOf(__glutCurrentWindow);
if (toplevel->cmap != cmap->cmap) {
__glutPutOnWorkList(toplevel, GLUT_COLORMAP_WORK);
}
}
#endif
}
color.pixel = ndx;
red = CLAMP(red);
cmap->cells[ndx].component[GLUT_RED] = red;
color.red = (GLfloat) 0xffff *red;
green = CLAMP(green);
cmap->cells[ndx].component[GLUT_GREEN] = green;
color.green = (GLfloat) 0xffff *green;
blue = CLAMP(blue);
cmap->cells[ndx].component[GLUT_BLUE] = blue;
color.blue = (GLfloat) 0xffff *blue;
color.flags = DoRed | DoGreen | DoBlue;
#if defined(_WIN32)
if (IsWindowVisible(__glutCurrentWindow->win)) {
XHDC = __glutCurrentWindow->hdc;
} else {
XHDC = 0;
}
#endif
XStoreColor(__glutDisplay, cmap->cmap, &color);
}
GLfloat GLUTAPIENTRY
glutGetColor(int ndx, int comp)
{
GLUTcolormap *colormap;
XVisualInfo *vis;
if (__glutCurrentWindow->renderWin == __glutCurrentWindow->win) {
colormap = __glutCurrentWindow->colormap;
vis = __glutCurrentWindow->vis;
} else {
colormap = __glutCurrentWindow->overlay->colormap;
vis = __glutCurrentWindow->overlay->vis;
if (ndx == __glutCurrentWindow->overlay->transparentPixel) {
__glutWarning("glutGetColor: requesting overlay transparent index %d\n",
ndx);
return -1.0;
}
}
if (!colormap) {
__glutWarning("glutGetColor: current window is RGBA");
return -1.0;
}
#if defined(_WIN32)
#define OUT_OF_RANGE_NDX(ndx) (ndx >= 256 || ndx < 0)
#else
#define OUT_OF_RANGE_NDX(ndx) (ndx >= vis->visual->map_entries || ndx < 0)
#endif
if (OUT_OF_RANGE_NDX(ndx)) {
__glutWarning("glutGetColor: index %d out of range", ndx);
return -1.0;
}
return colormap->cells[ndx].component[comp];
}
void GLUTAPIENTRY
glutCopyColormap(int winnum)
{
GLUTwindow *window = __glutWindowList[winnum - 1];
GLUTcolormap *oldcmap, *newcmap;
XVisualInfo *dstvis;
if (__glutCurrentWindow->renderWin == __glutCurrentWindow->win) {
oldcmap = __glutCurrentWindow->colormap;
dstvis = __glutCurrentWindow->vis;
newcmap = window->colormap;
} else {
oldcmap = __glutCurrentWindow->overlay->colormap;
dstvis = __glutCurrentWindow->overlay->vis;
if (!window->overlay) {
__glutWarning("glutCopyColormap: window %d has no overlay", winnum);
return;
}
newcmap = window->overlay->colormap;
}
if (!oldcmap) {
__glutWarning("glutCopyColormap: destination colormap must be color index");
return;
}
if (!newcmap) {
__glutWarning(
"glutCopyColormap: source colormap of window %d must be color index",
winnum);
return;
}
if (newcmap == oldcmap) {
/* Source and destination are the same; now copy needed. */
return;
}
#if !defined(_WIN32)
/* Play safe: compare visual IDs, not Visual*'s. */
if (newcmap->visual->visualid == oldcmap->visual->visualid) {
#endif
/* Visuals match! "Copy" by reference... */
__glutFreeColormap(oldcmap);
newcmap->refcnt++;
if (__glutCurrentWindow->renderWin == __glutCurrentWindow->win) {
__glutCurrentWindow->colormap = newcmap;
__glutCurrentWindow->cmap = newcmap->cmap;
} else {
__glutCurrentWindow->overlay->colormap = newcmap;
__glutCurrentWindow->overlay->cmap = newcmap->cmap;
}
XSetWindowColormap(__glutDisplay, __glutCurrentWindow->renderWin,
newcmap->cmap);
#if !defined(_WIN32)
__glutPutOnWorkList(__glutToplevelOf(window), GLUT_COLORMAP_WORK);
} else {
GLUTcolormap *copycmap;
XColor color;
int i, last;
/* Visuals different - need a distinct X colormap! */
copycmap = __glutAssociateNewColormap(dstvis);
/* Wouldn't it be nice if XCopyColormapAndFree could be
told not to free the old colormap's entries! */
last = newcmap->size;
if (last > copycmap->size) {
last = copycmap->size;
}
for (i = last - 1; i >= 0; i--) {
if (newcmap->cells[i].component[GLUT_RED] >= 0.0) {
color.pixel = i;
copycmap->cells[i].component[GLUT_RED] =
newcmap->cells[i].component[GLUT_RED];
color.red = (GLfloat) 0xffff *
newcmap->cells[i].component[GLUT_RED];
copycmap->cells[i].component[GLUT_GREEN] =
newcmap->cells[i].component[GLUT_GREEN];
color.green = (GLfloat) 0xffff *
newcmap->cells[i].component[GLUT_GREEN];
copycmap->cells[i].component[GLUT_BLUE] =
newcmap->cells[i].component[GLUT_BLUE];
color.blue = (GLfloat) 0xffff *
newcmap->cells[i].component[GLUT_BLUE];
color.flags = DoRed | DoGreen | DoBlue;
XStoreColor(__glutDisplay, copycmap->cmap, &color);
}
}
}
#endif
}
/* ENDCENTRY */
/* Copyright (c) Mark J. Kilgard, 1994, 1996, 1997. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#ifdef __VMS
#include <GL/vms_x_fix.h>
#endif
#include <stdlib.h>
#include <string.h>
#include <stdio.h> /* SunOS multithreaded assert() needs <stdio.h>. Lame. */
#include <assert.h>
#if !defined(_WIN32)
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/Xatom.h> /* for XA_RGB_DEFAULT_MAP atom */
#if defined(__vms)
#include <Xmu/StdCmap.h> /* for XmuLookupStandardColormap */
#else
#include <X11/Xmu/StdCmap.h> /* for XmuLookupStandardColormap */
#endif
#endif
/* SGI optimization introduced in IRIX 6.3 to avoid X server
round trips for interning common X atoms. */
#if defined(_SGI_EXTRA_PREDEFINES) && !defined(NO_FAST_ATOMS)
#include <X11/SGIFastAtom.h>
#else
#define XSGIFastInternAtom(dpy,string,fast_name,how) XInternAtom(dpy,string,how)
#endif
#include "glutint.h"
#include "layerutil.h"
GLUTcolormap *__glutColormapList = NULL;
GLUTcolormap *
__glutAssociateNewColormap(XVisualInfo * vis)
{
GLUTcolormap *cmap;
int transparentPixel, i;
unsigned long pixels[255];
cmap = (GLUTcolormap *) malloc(sizeof(GLUTcolormap));
if (!cmap)
__glutFatalError("out of memory.");
#if defined(_WIN32)
pixels[0] = 0; /* avoid compilation warnings on win32 */
cmap->visual = 0;
cmap->size = 256; /* always assume 256 on Win32 */
#else
cmap->visual = vis->visual;
cmap->size = vis->visual->map_entries;
#endif
cmap->refcnt = 1;
cmap->cells = (GLUTcolorcell *)
malloc(sizeof(GLUTcolorcell) * cmap->size);
if (!cmap->cells)
__glutFatalError("out of memory.");
/* make all color cell entries be invalid */
for (i = cmap->size - 1; i >= 0; i--) {
cmap->cells[i].component[GLUT_RED] = -1.0;
cmap->cells[i].component[GLUT_GREEN] = -1.0;
cmap->cells[i].component[GLUT_BLUE] = -1.0;
}
transparentPixel = __glutGetTransparentPixel(__glutDisplay, vis);
if (transparentPixel == -1 || transparentPixel >= cmap->size) {
/* If there is no transparent pixel or if the transparent
pixel is outside the range of valid colormap cells (HP
can implement their overlays this smart way since their
transparent pixel is 255), we can AllocAll the colormap.
See note below. */
cmap->cmap = XCreateColormap(__glutDisplay,
__glutRoot, cmap->visual, AllocAll);
} else {
/* On machines where zero (or some other value in the range
of 0 through map_entries-1), BadAlloc may be generated
when an AllocAll overlay colormap is allocated since the
transparent pixel precludes all the cells in the colormap
being allocated (the transparent pixel is pre-allocated).
So in this case, use XAllocColorCells to allocate
map_entries-1 pixels (that is, all but the transparent
pixel. */
#if defined(_WIN32)
cmap->cmap = XCreateColormap(__glutDisplay,
__glutRoot, 0, AllocNone);
#else
cmap->cmap = XCreateColormap(__glutDisplay,
__glutRoot, vis->visual, AllocNone);
XAllocColorCells(__glutDisplay, cmap->cmap, False, 0, 0,
pixels, cmap->size - 1);
#endif
}
cmap->next = __glutColormapList;
__glutColormapList = cmap;
return cmap;
}
static GLUTcolormap *
associateColormap(XVisualInfo * vis)
{
#if !defined(_WIN32)
GLUTcolormap *cmap = __glutColormapList;
while (cmap != NULL) {
/* Play safe: compare visual IDs, not Visual*'s. */
if (cmap->visual->visualid == vis->visual->visualid) {
/* Already have created colormap for the visual. */
cmap->refcnt++;
return cmap;
}
cmap = cmap->next;
}
#endif
return __glutAssociateNewColormap(vis);
}
void
__glutSetupColormap(XVisualInfo * vi, GLUTcolormap ** colormap, Colormap * cmap)
{
#if defined(_WIN32)
if (vi->dwFlags & PFD_NEED_PALETTE || vi->iPixelType == PFD_TYPE_COLORINDEX) {
*colormap = associateColormap(vi);
*cmap = (*colormap)->cmap;
} else {
*colormap = NULL;
*cmap = 0;
}
#else
Status status;
XStandardColormap *standardCmaps;
int i, numCmaps;
static Atom hpColorRecoveryAtom = -1;
int isRGB, visualClass, rc;
#if defined(__cplusplus) || defined(c_plusplus)
visualClass = vi->c_class;
#else
visualClass = vi->class;
#endif
switch (visualClass) {
case PseudoColor:
/* Mesa might return a PseudoColor visual for RGB mode. */
rc = glXGetConfig(__glutDisplay, vi, GLX_RGBA, &isRGB);
if (rc == 0 && isRGB) {
/* Must be Mesa. */
*colormap = NULL;
if (MaxCmapsOfScreen(DefaultScreenOfDisplay(__glutDisplay)) == 1
&& vi->visual == DefaultVisual(__glutDisplay, __glutScreen)) {
char *privateCmap = getenv("MESA_PRIVATE_CMAP");
if (privateCmap) {
/* User doesn't want to share colormaps. */
*cmap = XCreateColormap(__glutDisplay, __glutRoot,
vi->visual, AllocNone);
} else {
/* Share the root colormap. */
*cmap = DefaultColormap(__glutDisplay, __glutScreen);
}
} else {
/* Get our own PseudoColor colormap. */
*cmap = XCreateColormap(__glutDisplay, __glutRoot,
vi->visual, AllocNone);
}
} else {
/* CI mode, real GLX never returns a PseudoColor visual
for RGB mode. */
*colormap = associateColormap(vi);
*cmap = (*colormap)->cmap;
}
break;
case TrueColor:
*colormap = NULL; /* NULL if RGBA */
/* Hewlett-Packard supports a feature called "HP Color
Recovery". Mesa has code to use HP Color Recovery. For
Mesa to use this feature, the atom
_HP_RGB_SMOOTH_MAP_LIST must be defined on the root
window AND the colormap obtainable by XGetRGBColormaps
for that atom must be set on the window. If that
colormap is not set, the output will look stripy. */
if (hpColorRecoveryAtom == -1) {
char *xvendor;
#define VENDOR_HP "Hewlett-Packard"
/* Only makes sense to make XInternAtom round-trip if we
know that we are connected to an HP X server. */
xvendor = ServerVendor(__glutDisplay);
if (!strncmp(xvendor, VENDOR_HP, sizeof(VENDOR_HP) - 1)) {
hpColorRecoveryAtom = XInternAtom(__glutDisplay, "_HP_RGB_SMOOTH_MAP_LIST", True);
} else {
hpColorRecoveryAtom = None;
}
}
if (hpColorRecoveryAtom != None) {
status = XGetRGBColormaps(__glutDisplay, __glutRoot,
&standardCmaps, &numCmaps, hpColorRecoveryAtom);
if (status == 1) {
for (i = 0; i < numCmaps; i++) {
if (standardCmaps[i].visualid == vi->visualid) {
*cmap = standardCmaps[i].colormap;
XFree(standardCmaps);
return;
}
}
XFree(standardCmaps);
}
}
#ifndef SOLARIS_2_4_BUG
/* Solaris 2.4 and 2.5 have a bug in their
XmuLookupStandardColormap implementations. Please
compile your Solaris 2.4 or 2.5 version of GLUT with
-DSOLARIS_2_4_BUG to work around this bug. The symptom
of the bug is that programs will get a BadMatch error
from X_CreateWindow when creating a GLUT window because
Solaris 2.4 and 2.5 create a corrupted RGB_DEFAULT_MAP
property. Note that this workaround prevents Colormap
sharing between applications, perhaps leading
unnecessary colormap installations or colormap flashing.
Sun fixed this bug in Solaris 2.6. */
status = XmuLookupStandardColormap(__glutDisplay,
vi->screen, vi->visualid, vi->depth, XA_RGB_DEFAULT_MAP,
/* replace */ False, /* retain */ True);
if (status == 1) {
status = XGetRGBColormaps(__glutDisplay, __glutRoot,
&standardCmaps, &numCmaps, XA_RGB_DEFAULT_MAP);
if (status == 1) {
for (i = 0; i < numCmaps; i++) {
if (standardCmaps[i].visualid == vi->visualid) {
*cmap = standardCmaps[i].colormap;
XFree(standardCmaps);
return;
}
}
XFree(standardCmaps);
}
}
#endif
/* If no standard colormap but TrueColor, just make a
private one. */
/* XXX Should do a better job of internal sharing for
privately allocated TrueColor colormaps. */
*cmap = XCreateColormap(__glutDisplay, __glutRoot,
vi->visual, AllocNone);
break;
case DirectColor:
*colormap = NULL; /* NULL if RGBA */
*cmap = XCreateColormap(__glutDisplay, __glutRoot,
vi->visual, AllocAll);
if (vi->depth == 24) {
/* init the red, green, blue maps to linear ramps */
XColor xc[256];
int i;
for (i = 0; i < 256; i++) {
xc[i].pixel = (i << 16) | (i << 8) | i;
xc[i].red = (i << 8) | i;
xc[i].green = (i << 8) | i;
xc[i].blue = (i << 8) | i;
xc[i].flags = DoRed | DoGreen | DoBlue;
}
XStoreColors(__glutDisplay, *cmap, xc, 256);
}
else {
fprintf(stderr, "GLUT Error: DirectColor visuals other than 24-bits "
"not fully supported.\n");
}
break;
case StaticColor:
case StaticGray:
case GrayScale:
/* Mesa supports these visuals */
*colormap = NULL;
*cmap = XCreateColormap(__glutDisplay, __glutRoot,
vi->visual, AllocNone);
break;
default:
__glutFatalError(
"could not allocate colormap for visual type: %d.",
visualClass);
}
return;
#endif
}
#if !defined(_WIN32)
static int
findColormaps(GLUTwindow * window,
Window * winlist, Colormap * cmaplist, int num, int max)
{
GLUTwindow *child;
int i;
/* Do not allow more entries that maximum number of
colormaps! */
if (num >= max)
return num;
/* Is cmap for this window already on the list? */
for (i = 0; i < num; i++) {
if (cmaplist[i] == window->cmap)
goto normalColormapAlreadyListed;
}
/* Not found on the list; add colormap and window. */
winlist[num] = window->win;
cmaplist[num] = window->cmap;
num++;
normalColormapAlreadyListed:
/* Repeat above but for the overlay colormap if there one. */
if (window->overlay) {
if (num >= max)
return num;
for (i = 0; i < num; i++) {
if (cmaplist[i] == window->overlay->cmap)
goto overlayColormapAlreadyListed;
}
winlist[num] = window->overlay->win;
cmaplist[num] = window->overlay->cmap;
num++;
}
overlayColormapAlreadyListed:
/* Recursively search children. */
child = window->children;
while (child) {
num = findColormaps(child, winlist, cmaplist, num, max);
child = child->siblings;
}
return num;
}
void
__glutEstablishColormapsProperty(GLUTwindow * window)
{
/* this routine is strictly X. Win32 doesn't need to do
anything of this sort (but has to do other wacky stuff
later). */
static Atom wmColormapWindows = None;
Window *winlist;
Colormap *cmaplist;
Status status;
int maxcmaps, num;
assert(!window->parent);
maxcmaps = MaxCmapsOfScreen(ScreenOfDisplay(__glutDisplay,
__glutScreen));
/* For portability reasons we don't use alloca for winlist
and cmaplist, but we could. */
winlist = (Window *) malloc(maxcmaps * sizeof(Window));
cmaplist = (Colormap *) malloc(maxcmaps * sizeof(Colormap));
num = findColormaps(window, winlist, cmaplist, 0, maxcmaps);
if (num < 2) {
/* Property no longer needed; remove it. */
wmColormapWindows = XSGIFastInternAtom(__glutDisplay,
"WM_COLORMAP_WINDOWS", SGI_XA_WM_COLORMAP_WINDOWS, False);
if (wmColormapWindows == None) {
__glutWarning("Could not intern X atom for WM_COLORMAP_WINDOWS.");
return;
}
XDeleteProperty(__glutDisplay, window->win, wmColormapWindows);
} else {
status = XSetWMColormapWindows(__glutDisplay, window->win,
winlist, num);
/* XSetWMColormapWindows should always work unless the
WM_COLORMAP_WINDOWS property cannot be intern'ed. We
check to be safe. */
if (status == False)
__glutFatalError("XSetWMColormapWindows returned False.");
}
/* For portability reasons we don't use alloca for winlist
and cmaplist, but we could. */
free(winlist);
free(cmaplist);
}
GLUTwindow *
__glutToplevelOf(GLUTwindow * window)
{
while (window->parent) {
window = window->parent;
}
return window;
}
#endif
void
__glutFreeColormap(GLUTcolormap * cmap)
{
GLUTcolormap *cur, **prev;
cmap->refcnt--;
if (cmap->refcnt == 0) {
/* remove from colormap list */
cur = __glutColormapList;
prev = &__glutColormapList;
while (cur) {
if (cur == cmap) {
*prev = cmap->next;
break;
}
prev = &(cur->next);
cur = cur->next;
}
/* actually free colormap */
XFreeColormap(__glutDisplay, cmap->cmap);
free(cmap->cells);
free(cmap);
}
}
/* Copyright (c) Mark J. Kilgard, 1997. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#include <assert.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "glutint.h"
/* glxcaps matches the criteria macros listed in glutint.h, but
only list the first set (those that correspond to GLX visual
attributes). */
static int glxcap[NUM_GLXCAPS] =
{
GLX_RGBA,
GLX_BUFFER_SIZE,
GLX_DOUBLEBUFFER,
GLX_STEREO,
GLX_AUX_BUFFERS,
GLX_RED_SIZE,
GLX_GREEN_SIZE,
GLX_BLUE_SIZE,
GLX_ALPHA_SIZE,
GLX_DEPTH_SIZE,
GLX_STENCIL_SIZE,
GLX_ACCUM_RED_SIZE,
GLX_ACCUM_GREEN_SIZE,
GLX_ACCUM_BLUE_SIZE,
GLX_ACCUM_ALPHA_SIZE,
GLX_LEVEL,
};
#ifdef TEST
#if !defined(_WIN32)
char *__glutProgramName = "dstr";
Display *__glutDisplay;
int __glutScreen;
XVisualInfo *(*__glutDetermineVisualFromString) (char *string, Bool * treatAsSingle,
Criterion * requiredCriteria, int nRequired, int requiredMask, void **fbc) = NULL;
char *__glutDisplayString = NULL;
#endif
static int verbose = 0;
static char *compstr[] =
{
"none", "=", "!=", "<=", ">=", ">", "<", "~"
};
static char *capstr[] =
{
"rgba", "bufsize", "double", "stereo", "auxbufs", "red", "green", "blue", "alpha",
"depth", "stencil", "acred", "acgreen", "acblue", "acalpha", "level", "xvisual",
"transparent", "samples", "xstaticgray", "xgrayscale", "xstaticcolor", "xpseudocolor",
"xtruecolor", "xdirectcolor", "slow", "conformant", "num"
};
static void
printCriteria(Criterion * criteria, int ncriteria)
{
int i;
printf("Criteria: %d\n", ncriteria);
for (i = 0; i < ncriteria; i++) {
printf(" %s %s %d\n",
capstr[criteria[i].capability],
compstr[criteria[i].comparison],
criteria[i].value);
}
}
#endif /* TEST */
static int isMesaGLX = -1;
static int
determineMesaGLX(void)
{
#ifdef GLX_VERSION_1_1
const char *vendor, *version, *ch;
vendor = glXGetClientString(__glutDisplay, GLX_VENDOR);
if (!strcmp(vendor, "Brian Paul")) {
version = glXGetClientString(__glutDisplay, GLX_VERSION);
for (ch = version; *ch != ' ' && *ch != '\0'; ch++);
for (; *ch == ' ' && *ch != '\0'; ch++);
#define MESA_NAME "Mesa " /* Trailing space is intentional. */
if (!strncmp(MESA_NAME, ch, sizeof(MESA_NAME) - 1)) {
return 1;
}
}
#else
/* Recent versions for Mesa should support GLX 1.1 and
therefore glXGetClientString. If we get into this case,
we would be compiling against a true OpenGL not supporting
GLX 1.1, and the resulting compiled library won't work well
with Mesa then. */
#endif
return 0;
}
static XVisualInfo **
getMesaVisualList(int *n)
{
XVisualInfo **vlist, *vinfo;
int attribs[23];
int i, x, cnt;
vlist = (XVisualInfo **) malloc((32 + 16) * sizeof(XVisualInfo *));
if (!vlist)
__glutFatalError("out of memory.");
cnt = 0;
for (i = 0; i < 32; i++) {
x = 0;
attribs[x] = GLX_RGBA;
x++;
attribs[x] = GLX_RED_SIZE;
x++;
attribs[x] = 1;
x++;
attribs[x] = GLX_GREEN_SIZE;
x++;
attribs[x] = 1;
x++;
attribs[x] = GLX_BLUE_SIZE;
x++;
attribs[x] = 1;
x++;
if (i & 1) {
attribs[x] = GLX_DEPTH_SIZE;
x++;
attribs[x] = 1;
x++;
}
if (i & 2) {
attribs[x] = GLX_STENCIL_SIZE;
x++;
attribs[x] = 1;
x++;
}
if (i & 4) {
attribs[x] = GLX_ACCUM_RED_SIZE;
x++;
attribs[x] = 1;
x++;
attribs[x] = GLX_ACCUM_GREEN_SIZE;
x++;
attribs[x] = 1;
x++;
attribs[x] = GLX_ACCUM_BLUE_SIZE;
x++;
attribs[x] = 1;
x++;
}
if (i & 8) {
attribs[x] = GLX_ALPHA_SIZE;
x++;
attribs[x] = 1;
x++;
if (i & 4) {
attribs[x] = GLX_ACCUM_ALPHA_SIZE;
x++;
attribs[x] = 1;
x++;
}
}
if (i & 16) {
attribs[x] = GLX_DOUBLEBUFFER;
x++;
}
attribs[x] = None;
x++;
assert(x <= sizeof(attribs) / sizeof(attribs[0]));
vinfo = glXChooseVisual(__glutDisplay, __glutScreen, attribs);
if (vinfo) {
vlist[cnt] = vinfo;
cnt++;
}
}
for (i = 0; i < 16; i++) {
x = 0;
if (i & 1) {
attribs[x] = GLX_DEPTH_SIZE;
x++;
attribs[x] = 1;
x++;
}
if (i & 2) {
attribs[x] = GLX_STENCIL_SIZE;
x++;
attribs[x] = 1;
x++;
}
if (i & 4) {
attribs[x] = GLX_DOUBLEBUFFER;
x++;
}
if (i & 8) {
attribs[x] = GLX_LEVEL;
x++;
attribs[x] = 1;
x++;
#if defined(GLX_TRANSPARENT_TYPE_EXT) && defined(GLX_TRANSPARENT_INDEX_EXT)
attribs[x] = GLX_TRANSPARENT_TYPE_EXT;
x++;
attribs[x] = GLX_TRANSPARENT_INDEX_EXT;
x++;
#endif
}
attribs[x] = None;
x++;
assert(x <= sizeof(attribs) / sizeof(attribs[0]));
vinfo = glXChooseVisual(__glutDisplay, __glutScreen, attribs);
if (vinfo) {
vlist[cnt] = vinfo;
cnt++;
}
}
*n = cnt;
return vlist;
}
static FrameBufferMode *
loadVisuals(int *nitems_return)
{
XVisualInfo *vinfo, **vlist, template;
FrameBufferMode *fbmodes, *mode;
int n, i, j, rc, glcapable;
#if defined(GLX_VERSION_1_1) && defined(GLX_SGIS_multisample)
int multisample;
#endif
#if defined(GLX_VERSION_1_1) && defined(GLX_EXT_visual_info)
int visual_info;
#endif
#if defined(GLX_VERSION_1_1) && defined(GLX_EXT_visual_rating)
int visual_rating;
#endif
#if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_fbconfig)
int fbconfig;
#endif
isMesaGLX = determineMesaGLX();
if (isMesaGLX) {
vlist = getMesaVisualList(&n);
} else {
#if !defined(_WIN32)
template.screen = __glutScreen;
vinfo = XGetVisualInfo(__glutDisplay, VisualScreenMask, &template, &n);
#else
vinfo = XGetVisualInfo(__glutDisplay, 0, &template, &n);
#endif
if (vinfo == NULL) {
*nitems_return = 0;
return NULL;
}
assert(n > 0);
/* Make an array of XVisualInfo* pointers to help the Mesa
case because each glXChooseVisual call returns a
distinct XVisualInfo*, not a handy array like
XGetVisualInfo. (Mesa expects us to return the _exact_
pointer returned by glXChooseVisual so we could not just
copy the returned structure.) */
vlist = (XVisualInfo **) malloc(n * sizeof(XVisualInfo *));
if (!vlist)
__glutFatalError("out of memory.");
for (i = 0; i < n; i++) {
vlist[i] = &vinfo[i];
}
}
#if defined(GLX_VERSION_1_1) && defined(GLX_SGIS_multisample)
multisample = __glutIsSupportedByGLX("GLX_SGIS_multisample");
#endif
#if defined(GLX_VERSION_1_1) && defined(GLX_EXT_visual_info)
visual_info = __glutIsSupportedByGLX("GLX_EXT_visual_info");
#endif
#if defined(GLX_VERSION_1_1) && defined(GLX_EXT_visual_rating)
visual_rating = __glutIsSupportedByGLX("GLX_EXT_visual_rating");
#endif
#if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_fbconfig)
fbconfig = __glutIsSupportedByGLX("GLX_SGIX_fbconfig");
#endif
fbmodes = (FrameBufferMode *) malloc(n * sizeof(FrameBufferMode));
if (fbmodes == NULL) {
*nitems_return = -1;
free(vlist);
return NULL;
}
for (i = 0; i < n; i++) {
mode = &fbmodes[i];
mode->vi = vlist[i];
#if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_fbconfig)
mode->fbc = NULL;
#endif
rc = glXGetConfig(__glutDisplay, vlist[i], GLX_USE_GL, &glcapable);
if (rc == 0 && glcapable) {
mode->valid = 1; /* Assume the best until proven
otherwise. */
for (j = 0; j < NUM_GLXCAPS; j++) {
rc = glXGetConfig(__glutDisplay, vlist[i], glxcap[j], &mode->cap[j]);
if (rc != 0) {
mode->valid = 0;
}
}
#if defined(_WIN32)
mode->cap[XVISUAL] = ChoosePixelFormat(XHDC, vlist[i]);
#else
mode->cap[XVISUAL] = (int) vlist[i]->visualid;
#endif
mode->cap[XSTATICGRAY] = 0;
mode->cap[XGRAYSCALE] = 0;
mode->cap[XSTATICCOLOR] = 0;
mode->cap[XPSEUDOCOLOR] = 0;
mode->cap[XTRUECOLOR] = 0;
mode->cap[XDIRECTCOLOR] = 0;
#if !defined(_WIN32)
#if defined(__cplusplus) || defined(c_plusplus)
switch (vlist[i]->c_class) {
#else
switch (vlist[i]->class) {
#endif
case StaticGray:
mode->cap[XSTATICGRAY] = 1;
break;
case GrayScale:
mode->cap[XGRAYSCALE] = 1;
break;
case StaticColor:
mode->cap[XSTATICCOLOR] = 1;
break;
case PseudoColor:
mode->cap[XPSEUDOCOLOR] = 1;
break;
case TrueColor:
mode->cap[XTRUECOLOR] = 1;
break;
case DirectColor:
mode->cap[XDIRECTCOLOR] = 1;
break;
}
#endif
#if defined(GLX_VERSION_1_1) && defined(GLX_EXT_visual_rating)
if (visual_rating) {
int rating;
/* babcock@cs.montana.edu reported that DEC UNIX (OSF1) V4.0
564 for Alpha did not properly define GLX_VISUAL_CAVEAT_EXT
in <GL/glx.h> despite claiming to support
GLX_EXT_visual_rating. */
#ifndef GLX_VISUAL_CAVEAT_EXT
#define GLX_VISUAL_CAVEAT_EXT 0x20
#endif
rc = glXGetConfig(__glutDisplay,
vlist[i], GLX_VISUAL_CAVEAT_EXT, &rating);
if (rc != 0) {
mode->cap[SLOW] = 0;
mode->cap[CONFORMANT] = 1;
} else {
switch (rating) {
case GLX_SLOW_VISUAL_EXT:
mode->cap[SLOW] = 1;
mode->cap[CONFORMANT] = 1;
break;
/* IRIX 5.3 for the R10K Indigo2 may have shipped without this
properly defined in /usr/include/GL/glxtokens.h */
#ifndef GLX_NON_CONFORMANT_VISUAL_EXT
#define GLX_NON_CONFORMANT_VISUAL_EXT 0x800D
#endif
case GLX_NON_CONFORMANT_VISUAL_EXT:
mode->cap[SLOW] = 0;
mode->cap[CONFORMANT] = 0;
break;
case GLX_NONE_EXT:
default: /* XXX Hopefully this is a good default
assumption. */
mode->cap[SLOW] = 0;
mode->cap[CONFORMANT] = 1;
break;
}
}
} else {
mode->cap[TRANSPARENT] = 0;
}
#else
mode->cap[SLOW] = 0;
mode->cap[CONFORMANT] = 1;
#endif
#if defined(GLX_VERSION_1_1) && defined(GLX_EXT_visual_info)
if (visual_info) {
int transparent;
/* babcock@cs.montana.edu reported that DEC UNIX (OSF1) V4.0
564 for Alpha did not properly define
GLX_TRANSPARENT_TYPE_EXT in <GL/glx.h> despite claiming to
support GLX_EXT_visual_info. */
#ifndef GLX_TRANSPARENT_TYPE_EXT
#define GLX_TRANSPARENT_TYPE_EXT 0x23
#endif
rc = glXGetConfig(__glutDisplay,
vlist[i], GLX_TRANSPARENT_TYPE_EXT, &transparent);
if (rc != 0) {
mode->cap[TRANSPARENT] = 0;
} else {
mode->cap[TRANSPARENT] = (transparent != GLX_NONE_EXT);
}
} else {
mode->cap[TRANSPARENT] = 0;
}
#else
mode->cap[TRANSPARENT] = 0;
#endif
#if defined(GLX_VERSION_1_1) && defined(GLX_SGIS_multisample)
if (multisample) {
rc = glXGetConfig(__glutDisplay,
vlist[i], GLX_SAMPLES_SGIS, &mode->cap[SAMPLES]);
if (rc != 0) {
mode->cap[SAMPLES] = 0;
}
} else {
mode->cap[SAMPLES] = 0;
}
#else
mode->cap[SAMPLES] = 0;
#endif
} else {
#if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_fbconfig)
if (fbconfig) {
GLXFBConfigSGIX fbc;
int fbconfigID, drawType, renderType;
fbc = __glut_glXGetFBConfigFromVisualSGIX(__glutDisplay, vlist[i]);
if (fbc) {
rc = __glut_glXGetFBConfigAttribSGIX(__glutDisplay, fbc,
GLX_FBCONFIG_ID_SGIX, &fbconfigID);
if ((rc == 0) && (fbconfigID != None)) {
rc = __glut_glXGetFBConfigAttribSGIX(__glutDisplay, fbc,
GLX_DRAWABLE_TYPE_SGIX, &drawType);
if ((rc == 0) && (drawType & GLX_WINDOW_BIT_SGIX)) {
rc = __glut_glXGetFBConfigAttribSGIX(__glutDisplay, fbc,
GLX_RENDER_TYPE_SGIX, &renderType);
if ((rc == 0) && (renderType & GLX_RGBA_BIT_SGIX)) {
mode->fbc = fbc;
mode->valid = 1; /* Assume the best until
proven otherwise. */
assert(glxcap[0] == GLX_RGBA);
mode->cap[0] = 1;
/* Start with "j = 1" to skip the GLX_RGBA attribute. */
for (j = 1; j < NUM_GLXCAPS; j++) {
rc = __glut_glXGetFBConfigAttribSGIX(__glutDisplay,
fbc, glxcap[j], &mode->cap[j]);
if (rc != 0) {
mode->valid = 0;
}
}
mode->cap[XVISUAL] = (int) vlist[i]->visualid;
mode->cap[XSTATICGRAY] = 0;
mode->cap[XGRAYSCALE] = 0;
mode->cap[XSTATICCOLOR] = 0;
mode->cap[XPSEUDOCOLOR] = 0;
mode->cap[XTRUECOLOR] = 0;
mode->cap[XDIRECTCOLOR] = 0;
#if defined(__cplusplus) || defined(c_plusplus)
switch (vlist[i]->c_class) {
#else
switch (vlist[i]->class) {
#endif
case StaticGray:
mode->cap[XSTATICGRAY] = 1;
break;
case GrayScale:
mode->cap[XGRAYSCALE] = 1;
break;
case StaticColor:
mode->cap[XSTATICCOLOR] = 1;
break;
case PseudoColor:
mode->cap[XPSEUDOCOLOR] = 1;
break;
case TrueColor:
mode->cap[XTRUECOLOR] = 1;
break;
case DirectColor:
mode->cap[XDIRECTCOLOR] = 1;
break;
}
#if defined(GLX_VERSION_1_1) && defined(GLX_EXT_visual_rating)
if (visual_rating) {
int rating;
/* babcock@cs.montana.edu reported that DEC UNIX (OSF1) V4.0
564 for Alpha did not properly define GLX_VISUAL_CAVEAT_EXT
in <GL/glx.h> despite claiming to support
GLX_EXT_visual_rating. */
#ifndef GLX_VISUAL_CAVEAT_EXT
#define GLX_VISUAL_CAVEAT_EXT 0x20
#endif
rc = __glut_glXGetFBConfigAttribSGIX(__glutDisplay,
fbc, GLX_VISUAL_CAVEAT_EXT, &rating);
if (rc != 0) {
mode->cap[SLOW] = 0;
mode->cap[CONFORMANT] = 1;
} else {
switch (rating) {
case GLX_SLOW_VISUAL_EXT:
mode->cap[SLOW] = 1;
mode->cap[CONFORMANT] = 1;
break;
/* IRIX 5.3 for the R10K Indigo2 may have shipped without this
properly defined in /usr/include/GL/glxtokens.h */
#ifndef GLX_NON_CONFORMANT_VISUAL_EXT
#define GLX_NON_CONFORMANT_VISUAL_EXT 0x800D
#endif
case GLX_NON_CONFORMANT_VISUAL_EXT:
mode->cap[SLOW] = 0;
mode->cap[CONFORMANT] = 0;
break;
case GLX_NONE_EXT:
default: /* XXX Hopefully this is a good
default assumption. */
mode->cap[SLOW] = 0;
mode->cap[CONFORMANT] = 1;
break;
}
}
} else {
mode->cap[TRANSPARENT] = 0;
}
#else
mode->cap[SLOW] = 0;
mode->cap[CONFORMANT] = 1;
#endif
#if defined(GLX_VERSION_1_1) && defined(GLX_EXT_visual_info)
if (visual_info) {
int transparent;
/* babcock@cs.montana.edu reported that DEC UNIX (OSF1) V4.0
564 for Alpha did not properly define
GLX_TRANSPARENT_TYPE_EXT in <GL/glx.h> despite claiming to
support GLX_EXT_visual_info. */
#ifndef GLX_TRANSPARENT_TYPE_EXT
#define GLX_TRANSPARENT_TYPE_EXT 0x23
#endif
rc = __glut_glXGetFBConfigAttribSGIX(__glutDisplay,
fbc, GLX_TRANSPARENT_TYPE_EXT, &transparent);
if (rc != 0) {
mode->cap[TRANSPARENT] = 0;
} else {
mode->cap[TRANSPARENT] = (transparent != GLX_NONE_EXT);
}
} else {
mode->cap[TRANSPARENT] = 0;
}
#else
mode->cap[TRANSPARENT] = 0;
#endif
#if defined(GLX_VERSION_1_1) && defined(GLX_SGIS_multisample)
if (multisample) {
rc = __glut_glXGetFBConfigAttribSGIX(__glutDisplay,
fbc, GLX_SAMPLES_SGIS, &mode->cap[SAMPLES]);
if (rc != 0) {
mode->cap[SAMPLES] = 0;
}
} else {
mode->cap[SAMPLES] = 0;
}
#else
mode->cap[SAMPLES] = 0;
#endif
} else {
/* Fbconfig is not RGBA; GLUT only uses RGBA
FBconfigs. */
/* XXX Code could be exteneded to handle color
index FBconfigs, but seems a color index
window-renderable FBconfig would also be
advertised as an X visual. */
mode->valid = 0;
}
} else {
/* Fbconfig does not support window rendering;
not a valid FBconfig for GLUT windows. */
mode->valid = 0;
}
} else {
/* FBconfig ID is None (zero); not a valid
FBconfig. */
mode->valid = 0;
}
} else {
/* FBconfig ID is None (zero); not a valid FBconfig. */
mode->valid = 0;
}
} else {
/* No SGIX_fbconfig GLX sever implementation support. */
mode->valid = 0;
}
#else
/* No SGIX_fbconfig GLX extension API support. */
mode->valid = 0;
#endif
}
}
free(vlist);
*nitems_return = n;
return fbmodes;
}
static XVisualInfo *
findMatch(FrameBufferMode * fbmodes, int nfbmodes,
Criterion * criteria, int ncriteria, void **fbc)
{
FrameBufferMode *found;
int *bestScore, *thisScore;
int i, j, numok, result = 0, worse, better;
found = NULL;
numok = 1; /* "num" capability is indexed from 1,
not 0. */
/* XXX alloca canidate. */
bestScore = (int *) malloc(ncriteria * sizeof(int));
if (!bestScore)
__glutFatalError("out of memory.");
for (j = 0; j < ncriteria; j++) {
/* Very negative number. */
bestScore[j] = -32768;
}
/* XXX alloca canidate. */
thisScore = (int *) malloc(ncriteria * sizeof(int));
if (!thisScore)
__glutFatalError("out of memory.");
for (i = 0; i < nfbmodes; i++) {
if (fbmodes[i].valid) {
#ifdef TEST
#if !defined(_WIN32)
if (verbose)
printf("Visual 0x%x\n", fbmodes[i].vi->visualid);
#endif
#endif
worse = 0;
better = 0;
for (j = 0; j < ncriteria; j++) {
int cap, cvalue, fbvalue;
cap = criteria[j].capability;
cvalue = criteria[j].value;
if (cap == NUM) {
fbvalue = numok;
} else {
fbvalue = fbmodes[i].cap[cap];
}
#ifdef TEST
if (verbose)
printf(" %s %s %d to %d\n",
capstr[cap], compstr[criteria[j].comparison], cvalue, fbvalue);
#endif
switch (criteria[j].comparison) {
case EQ:
result = cvalue == fbvalue;
thisScore[j] = 1;
break;
case NEQ:
result = cvalue != fbvalue;
thisScore[j] = 1;
break;
case LT:
result = fbvalue < cvalue;
thisScore[j] = fbvalue - cvalue;
break;
case GT:
result = fbvalue > cvalue;
thisScore[j] = fbvalue - cvalue;
break;
case LTE:
result = fbvalue <= cvalue;
thisScore[j] = fbvalue - cvalue;
break;
case GTE:
result = (fbvalue >= cvalue);
thisScore[j] = fbvalue - cvalue;
break;
case MIN:
result = fbvalue >= cvalue;
thisScore[j] = cvalue - fbvalue;
break;
}
#ifdef TEST
if (verbose)
printf(" result=%d score=%d bestScore=%d\n", result, thisScore[j], bestScore[j]);
#endif
if (result) {
if (better || thisScore[j] > bestScore[j]) {
better = 1;
} else if (thisScore[j] == bestScore[j]) {
/* Keep looking. */
} else {
goto nextFBM;
}
} else {
if (cap == NUM) {
worse = 1;
} else {
goto nextFBM;
}
}
}
if (better && !worse) {
found = &fbmodes[i];
for (j = 0; j < ncriteria; j++) {
bestScore[j] = thisScore[j];
}
}
numok++;
nextFBM:;
}
}
free(bestScore);
free(thisScore);
if (found) {
#if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_fbconfig)
*fbc = found->fbc;
#endif
return found->vi;
} else {
return NULL;
}
}
static int
parseCriteria(char *word, Criterion * criterion, int *mask,
Bool * allowDoubleAsSingle)
{
char *cstr, *vstr, *response;
int comparator, value = 0;
int rgb, rgba, acc, acca, count, i;
cstr = strpbrk(word, "=><!~");
if (cstr) {
switch (cstr[0]) {
case '=':
comparator = EQ;
vstr = &cstr[1];
break;
case '~':
comparator = MIN;
vstr = &cstr[1];
break;
case '>':
if (cstr[1] == '=') {
comparator = GTE;
vstr = &cstr[2];
} else {
comparator = GT;
vstr = &cstr[1];
}
break;
case '<':
if (cstr[1] == '=') {
comparator = LTE;
vstr = &cstr[2];
} else {
comparator = LT;
vstr = &cstr[1];
}
break;
case '!':
if (cstr[1] == '=') {
comparator = NEQ;
vstr = &cstr[2];
} else {
return -1;
}
break;
default:
return -1;
}
value = (int) strtol(vstr, &response, 0);
if (response == vstr) {
/* Not a valid number. */
return -1;
}
*cstr = '\0';
} else {
comparator = NONE;
}
switch (word[0]) {
case 'a':
if (!strcmp(word, "alpha")) {
criterion[0].capability = ALPHA_SIZE;
if (comparator == NONE) {
criterion[0].comparison = GTE;
criterion[0].value = 1;
} else {
criterion[0].comparison = comparator;
criterion[0].value = value;
}
*mask |= (1 << RGBA);
*mask |= (1 << ALPHA_SIZE);
*mask |= (1 << RGBA_MODE);
return 1;
}
acca = !strcmp(word, "acca");
acc = !strcmp(word, "acc");
if (acc || acca) {
criterion[0].capability = ACCUM_RED_SIZE;
criterion[1].capability = ACCUM_GREEN_SIZE;
criterion[2].capability = ACCUM_BLUE_SIZE;
criterion[3].capability = ACCUM_ALPHA_SIZE;
if (acca) {
count = 4;
} else {
count = 3;
criterion[3].comparison = MIN;
criterion[3].value = 0;
}
if (comparator == NONE) {
comparator = GTE;
value = 8;
}
for (i = 0; i < count; i++) {
criterion[i].comparison = comparator;
criterion[i].value = value;
}
*mask |= (1 << ACCUM_RED_SIZE);
return 4;
}
if (!strcmp(word, "auxbufs")) {
criterion[0].capability = AUX_BUFFERS;
if (comparator == NONE) {
criterion[0].comparison = MIN;
criterion[0].value = 1;
} else {
criterion[0].comparison = comparator;
criterion[0].value = value;
}
*mask |= (1 << AUX_BUFFERS);
return 1;
}
return -1;
case 'b':
if (!strcmp(word, "blue")) {
criterion[0].capability = BLUE_SIZE;
if (comparator == NONE) {
criterion[0].comparison = GTE;
criterion[0].value = 1;
} else {
criterion[0].comparison = comparator;
criterion[0].value = value;
}
*mask |= (1 << RGBA);
*mask |= (1 << RGBA_MODE);
return 1;
}
if (!strcmp(word, "buffer")) {
criterion[0].capability = BUFFER_SIZE;
if (comparator == NONE) {
criterion[0].comparison = GTE;
criterion[0].value = 1;
} else {
criterion[0].comparison = comparator;
criterion[0].value = value;
}
return 1;
}
return -1;
case 'c':
if (!strcmp(word, "conformant")) {
criterion[0].capability = CONFORMANT;
if (comparator == NONE) {
criterion[0].comparison = EQ;
criterion[0].value = 1;
} else {
criterion[0].comparison = comparator;
criterion[0].value = value;
}
*mask |= (1 << CONFORMANT);
return 1;
}
return -1;
case 'd':
if (!strcmp(word, "depth")) {
criterion[0].capability = DEPTH_SIZE;
if (comparator == NONE) {
criterion[0].comparison = GTE;
criterion[0].value = 12;
} else {
criterion[0].comparison = comparator;
criterion[0].value = value;
}
*mask |= (1 << DEPTH_SIZE);
return 1;
}
if (!strcmp(word, "double")) {
criterion[0].capability = DOUBLEBUFFER;
if (comparator == NONE) {
criterion[0].comparison = EQ;
criterion[0].value = 1;
} else {
criterion[0].comparison = comparator;
criterion[0].value = value;
}
*mask |= (1 << DOUBLEBUFFER);
return 1;
}
return -1;
case 'g':
if (!strcmp(word, "green")) {
criterion[0].capability = GREEN_SIZE;
if (comparator == NONE) {
criterion[0].comparison = GTE;
criterion[0].value = 1;
} else {
criterion[0].comparison = comparator;
criterion[0].value = value;
}
*mask |= (1 << RGBA);
*mask |= (1 << RGBA_MODE);
return 1;
}
return -1;
case 'i':
if (!strcmp(word, "index")) {
criterion[0].capability = RGBA;
criterion[0].comparison = EQ;
criterion[0].value = 0;
*mask |= (1 << RGBA);
*mask |= (1 << CI_MODE);
criterion[1].capability = BUFFER_SIZE;
if (comparator == NONE) {
criterion[1].comparison = GTE;
criterion[1].value = 1;
} else {
criterion[1].comparison = comparator;
criterion[1].value = value;
}
return 2;
}
return -1;
case 'l':
if (!strcmp(word, "luminance")) {
criterion[0].capability = RGBA;
criterion[0].comparison = EQ;
criterion[0].value = 1;
criterion[1].capability = RED_SIZE;
if (comparator == NONE) {
criterion[1].comparison = GTE;
criterion[1].value = 1;
} else {
criterion[1].comparison = comparator;
criterion[1].value = value;
}
criterion[2].capability = GREEN_SIZE;
criterion[2].comparison = EQ;
criterion[2].value = 0;
criterion[3].capability = BLUE_SIZE;
criterion[3].comparison = EQ;
criterion[3].value = 0;
*mask |= (1 << RGBA);
*mask |= (1 << RGBA_MODE);
*mask |= (1 << LUMINANCE_MODE);
return 4;
}
return -1;
case 'n':
if (!strcmp(word, "num")) {
criterion[0].capability = NUM;
if (comparator == NONE) {
return -1;
} else {
criterion[0].comparison = comparator;
criterion[0].value = value;
return 1;
}
}
return -1;
case 'r':
if (!strcmp(word, "red")) {
criterion[0].capability = RED_SIZE;
if (comparator == NONE) {
criterion[0].comparison = GTE;
criterion[0].value = 1;
} else {
criterion[0].comparison = comparator;
criterion[0].value = value;
}
*mask |= (1 << RGBA);
*mask |= (1 << RGBA_MODE);
return 1;
}
rgba = !strcmp(word, "rgba");
rgb = !strcmp(word, "rgb");
if (rgb || rgba) {
criterion[0].capability = RGBA;
criterion[0].comparison = EQ;
criterion[0].value = 1;
criterion[1].capability = RED_SIZE;
criterion[2].capability = GREEN_SIZE;
criterion[3].capability = BLUE_SIZE;
criterion[4].capability = ALPHA_SIZE;
if (rgba) {
count = 5;
} else {
count = 4;
criterion[4].comparison = MIN;
criterion[4].value = 0;
}
if (comparator == NONE) {
comparator = GTE;
value = 1;
}
for (i = 1; i < count; i++) {
criterion[i].comparison = comparator;
criterion[i].value = value;
}
*mask |= (1 << RGBA);
*mask |= (1 << RGBA_MODE);
return 5;
}
return -1;
case 's':
if (!strcmp(word, "stencil")) {
criterion[0].capability = STENCIL_SIZE;
if (comparator == NONE) {
criterion[0].comparison = MIN;
criterion[0].value = 1;
} else {
criterion[0].comparison = comparator;
criterion[0].value = value;
}
*mask |= (1 << STENCIL_SIZE);
return 1;
}
if (!strcmp(word, "single")) {
criterion[0].capability = DOUBLEBUFFER;
if (comparator == NONE) {
criterion[0].comparison = EQ;
criterion[0].value = 0;
*allowDoubleAsSingle = True;
*mask |= (1 << DOUBLEBUFFER);
return 1;
} else {
return -1;
}
}
if (!strcmp(word, "stereo")) {
criterion[0].capability = STEREO;
if (comparator == NONE) {
criterion[0].comparison = EQ;
criterion[0].value = 1;
} else {
criterion[0].comparison = comparator;
criterion[0].value = value;
}
*mask |= (1 << STEREO);
return 1;
}
if (!strcmp(word, "samples")) {
criterion[0].capability = SAMPLES;
if (comparator == NONE) {
criterion[0].comparison = LTE;
criterion[0].value = 4;
} else {
criterion[0].comparison = comparator;
criterion[0].value = value;
}
*mask |= (1 << SAMPLES);
return 1;
}
if (!strcmp(word, "slow")) {
criterion[0].capability = SLOW;
if (comparator == NONE) {
/* Just "slow" means permit fast visuals, but accept
slow ones in preference. Presumably the slow ones
must be higher quality or something else desirable. */
criterion[0].comparison = GTE;
criterion[0].value = 0;
} else {
criterion[0].comparison = comparator;
criterion[0].value = value;
}
*mask |= (1 << SLOW);
return 1;
}
return -1;
#if defined(_WIN32)
case 'w':
if (!strcmp(word, "win32pfd")) {
criterion[0].capability = XVISUAL;
if (comparator == NONE) {
return -1;
} else {
criterion[0].comparison = comparator;
criterion[0].value = value;
return 1;
}
}
return -1;
#endif
#if !defined(_WIN32)
case 'x':
if (!strcmp(word, "xvisual")) {
if (comparator == NONE) {
return -1;
} else {
criterion[0].capability = XVISUAL;
criterion[0].comparison = comparator;
criterion[0].value = value;
/* Set everything in "mask" so that no default criteria
get used. Assume the program really wants the
xvisual specified. */
*mask |= ~0;
return 1;
}
}
/* Be a little over-eager to fill in the comparison and
value so we won't have to replicate the code after each
string match. */
if (comparator == NONE) {
criterion[0].comparison = EQ;
criterion[0].value = 1;
} else {
criterion[0].comparison = comparator;
criterion[0].value = value;
}
if (!strcmp(word, "xstaticgray")) {
criterion[0].capability = XSTATICGRAY;
*mask |= (1 << XSTATICGRAY); /* Indicates _any_ visual
class selected. */
return 1;
}
if (!strcmp(word, "xgrayscale")) {
criterion[0].capability = XGRAYSCALE;
*mask |= (1 << XSTATICGRAY); /* Indicates _any_ visual
class selected. */
return 1;
}
if (!strcmp(word, "xstaticcolor")) {
criterion[0].capability = XSTATICCOLOR;
*mask |= (1 << XSTATICGRAY); /* Indicates _any_ visual
class selected. */
return 1;
}
if (!strcmp(word, "xpseudocolor")) {
criterion[0].capability = XPSEUDOCOLOR;
*mask |= (1 << XSTATICGRAY); /* Indicates _any_ visual
class selected. */
return 1;
}
if (!strcmp(word, "xtruecolor")) {
criterion[0].capability = XTRUECOLOR;
*mask |= (1 << XSTATICGRAY); /* Indicates _any_ visual
class selected. */
return 1;
}
if (!strcmp(word, "xdirectcolor")) {
criterion[0].capability = XDIRECTCOLOR;
*mask |= (1 << XSTATICGRAY); /* Indicates _any_ visual
class selected. */
return 1;
}
return -1;
#endif
default:
return -1;
}
}
static Criterion *
parseModeString(char *mode, int *ncriteria, Bool * allowDoubleAsSingle,
Criterion * requiredCriteria, int nRequired, int requiredMask)
{
Criterion *criteria = NULL;
int n, mask, parsed, i;
char *copy, *word;
*allowDoubleAsSingle = False;
copy = __glutStrdup(mode);
/* Attempt to estimate how many criteria entries should be
needed. */
n = 0;
word = strtok(copy, " \t");
while (word) {
n++;
word = strtok(NULL, " \t");
}
/* Overestimate by 4 times ("rgba" might add four criteria
entries) plus add in possible defaults plus space for
required criteria. */
criteria = (Criterion *) malloc((4 * n + 30 + nRequired) * sizeof(Criterion));
if (!criteria) {
__glutFatalError("out of memory.");
}
/* Re-copy the copy of the mode string. */
strcpy(copy, mode);
/* First add the required criteria (these match at the
highest priority). Typically these will be used to force a
specific level (layer), transparency, and/or visual type. */
mask = requiredMask;
for (i = 0; i < nRequired; i++) {
criteria[i] = requiredCriteria[i];
}
n = nRequired;
word = strtok(copy, " \t");
while (word) {
parsed = parseCriteria(word, &criteria[n], &mask, allowDoubleAsSingle);
if (parsed >= 0) {
n += parsed;
} else {
__glutWarning("Unrecognized display string word: %s (ignoring)\n", word);
}
word = strtok(NULL, " \t");
}
#if defined(GLX_VERSION_1_1) && defined(GLX_SGIS_multisample)
if (__glutIsSupportedByGLX("GLX_SGIS_multisample")) {
if (!(mask & (1 << SAMPLES))) {
criteria[n].capability = SAMPLES;
criteria[n].comparison = EQ;
criteria[n].value = 0;
n++;
} else {
/* Multisample visuals are marked nonconformant. If
multisampling was requeste and no conformant
preference was set, assume that we will settle for a
non-conformant visual to get multisampling. */
if (!(mask & (1 << CONFORMANT))) {
criteria[n].capability = CONFORMANT;
criteria[n].comparison = MIN;
criteria[n].value = 0;
n++;
mask |= (1 << CONFORMANT);
}
}
}
#endif
#if defined(GLX_VERSION_1_1) && defined(GLX_EXT_visual_info)
if (__glutIsSupportedByGLX("GLX_EXT_visual_info")) {
if (!(mask & (1 << TRANSPARENT))) {
criteria[n].capability = TRANSPARENT;
criteria[n].comparison = EQ;
criteria[n].value = 0;
n++;
}
}
#endif
#if defined(GLX_VERSION_1_1) && defined(GLX_EXT_visual_rating)
if (__glutIsSupportedByGLX("GLX_EXT_visual_rating")) {
if (!(mask & (1 << SLOW))) {
criteria[n].capability = SLOW;
criteria[n].comparison = EQ;
criteria[n].value = 0;
n++;
}
if (!(mask & (1 << CONFORMANT))) {
criteria[n].capability = CONFORMANT;
criteria[n].comparison = EQ;
criteria[n].value = 1;
n++;
}
}
#endif
if (!(mask & (1 << ACCUM_RED_SIZE))) {
criteria[n].capability = ACCUM_RED_SIZE;
criteria[n].comparison = MIN;
criteria[n].value = 0;
criteria[n + 1].capability = ACCUM_GREEN_SIZE;
criteria[n + 1].comparison = MIN;
criteria[n + 1].value = 0;
criteria[n + 2].capability = ACCUM_BLUE_SIZE;
criteria[n + 2].comparison = MIN;
criteria[n + 2].value = 0;
criteria[n + 3].capability = ACCUM_ALPHA_SIZE;
criteria[n + 3].comparison = MIN;
criteria[n + 3].value = 0;
n += 4;
}
if (!(mask & (1 << AUX_BUFFERS))) {
criteria[n].capability = AUX_BUFFERS;
criteria[n].comparison = MIN;
criteria[n].value = 0;
n++;
}
if (!(mask & (1 << RGBA))) {
criteria[n].capability = RGBA;
criteria[n].comparison = EQ;
criteria[n].value = 1;
criteria[n + 1].capability = RED_SIZE;
criteria[n + 1].comparison = GTE;
criteria[n + 1].value = 1;
criteria[n + 2].capability = GREEN_SIZE;
criteria[n + 2].comparison = GTE;
criteria[n + 2].value = 1;
criteria[n + 3].capability = BLUE_SIZE;
criteria[n + 3].comparison = GTE;
criteria[n + 3].value = 1;
criteria[n + 4].capability = ALPHA_SIZE;
criteria[n + 4].comparison = MIN;
criteria[n + 4].value = 0;
n += 5;
mask |= (1 << RGBA_MODE);
}
#if !defined(_WIN32)
if (!(mask & (1 << XSTATICGRAY))) {
assert(isMesaGLX != -1);
if ((mask & (1 << RGBA_MODE)) && !isMesaGLX) {
/* Normally, request an RGBA mode visual be TrueColor,
except in the case of Mesa where we trust Mesa (and
other code in GLUT) to handle any type of RGBA visual
reasonably. */
if (mask & (1 << LUMINANCE_MODE)) {
/* If RGBA luminance was requested, actually go for
a StaticGray visual. */
criteria[n].capability = XSTATICGRAY;
} else {
criteria[n].capability = XTRUECOLOR;
}
criteria[n].value = 1;
criteria[n].comparison = EQ;
n++;
}
if (mask & (1 << CI_MODE)) {
criteria[n].capability = XPSEUDOCOLOR;
criteria[n].value = 1;
criteria[n].comparison = EQ;
n++;
}
}
#endif
if (!(mask & (1 << STEREO))) {
criteria[n].capability = STEREO;
criteria[n].comparison = EQ;
criteria[n].value = 0;
n++;
}
if (!(mask & (1 << DOUBLEBUFFER))) {
criteria[n].capability = DOUBLEBUFFER;
criteria[n].comparison = EQ;
criteria[n].value = 0;
*allowDoubleAsSingle = True;
n++;
}
if (!(mask & (1 << DEPTH_SIZE))) {
criteria[n].capability = DEPTH_SIZE;
criteria[n].comparison = MIN;
criteria[n].value = 0;
n++;
}
if (!(mask & (1 << STENCIL_SIZE))) {
criteria[n].capability = STENCIL_SIZE;
criteria[n].comparison = MIN;
criteria[n].value = 0;
n++;
}
if (!(mask & (1 << LEVEL))) {
criteria[n].capability = LEVEL;
criteria[n].comparison = EQ;
criteria[n].value = 0;
n++;
}
if (n) {
/* Since over-estimated the size needed; squeeze it down to
reality. */
criteria = (Criterion *) realloc(criteria, n * sizeof(Criterion));
if (!criteria) {
/* Should never happen since should be shrinking down! */
__glutFatalError("out of memory.");
}
} else {
/* For portability, avoid "realloc(ptr,0)" call. */
free(criteria);
criteria = NULL;
}
free(copy);
*ncriteria = n;
return criteria;
}
static FrameBufferMode *fbmodes = NULL;
static int nfbmodes = 0;
static XVisualInfo *
getVisualInfoFromString(char *string, Bool * treatAsSingle,
Criterion * requiredCriteria, int nRequired, int requiredMask, void **fbc)
{
Criterion *criteria;
XVisualInfo *visinfo;
Bool allowDoubleAsSingle;
int ncriteria, i;
if (!fbmodes) {
fbmodes = loadVisuals(&nfbmodes);
}
criteria = parseModeString(string, &ncriteria,
&allowDoubleAsSingle, requiredCriteria, nRequired, requiredMask);
if (criteria == NULL) {
__glutWarning("failed to parse mode string");
return NULL;
}
#ifdef TEST
printCriteria(criteria, ncriteria);
#endif
visinfo = findMatch(fbmodes, nfbmodes, criteria, ncriteria, fbc);
if (visinfo) {
*treatAsSingle = 0;
} else {
if (allowDoubleAsSingle) {
/* Rewrite criteria so that we now look for a double
buffered visual which will then get treated as a
single buffered visual. */
for (i = 0; i < ncriteria; i++) {
if (criteria[i].capability == DOUBLEBUFFER
&& criteria[i].comparison == EQ
&& criteria[i].value == 0) {
criteria[i].value = 1;
}
}
visinfo = findMatch(fbmodes, nfbmodes, criteria, ncriteria, fbc);
if (visinfo) {
*treatAsSingle = 1;
}
}
}
free(criteria);
if (visinfo) {
#if defined(_WIN32)
/* We could have a valid pixel format for drawing to a
bitmap. However, we don't want to draw into a bitmap, we
need one that can be used with a window, so make sure
that this is true. */
if (!(visinfo->dwFlags & PFD_DRAW_TO_WINDOW))
return NULL;
#endif
return visinfo;
} else {
return NULL;
}
}
/* CENTRY */
void GLUTAPIENTRY
glutInitDisplayString(const char *string)
{
#ifdef _WIN32
XHDC = GetDC(GetDesktopWindow());
#endif
__glutDetermineVisualFromString = getVisualInfoFromString;
if (__glutDisplayString) {
free(__glutDisplayString);
}
if (string) {
__glutDisplayString = __glutStrdup(string);
if (!__glutDisplayString)
__glutFatalError("out of memory.");
} else {
__glutDisplayString = NULL;
}
}
/* ENDCENTRY */
#ifdef TEST
Criterion requiredWindowCriteria[] =
{
{LEVEL, EQ, 0},
{TRANSPARENT, EQ, 0}
};
int numRequiredWindowCriteria = sizeof(requiredWindowCriteria) / sizeof(Criterion);
int requiredWindowCriteriaMask = (1 << LEVEL) | (1 << TRANSPARENT);
Criterion requiredOverlayCriteria[] =
{
{LEVEL, EQ, 1},
{TRANSPARENT, EQ, 1},
{XPSEUDOCOLOR, EQ, 1},
{RGBA, EQ, 0},
{BUFFER_SIZE, GTE, 1}
};
int numRequiredOverlayCriteria = sizeof(requiredOverlayCriteria) / sizeof(Criterion);
int requiredOverlayCriteriaMask =
(1 << LEVEL) | (1 << TRANSPARENT) | (1 << XSTATICGRAY) | (1 << RGBA) | (1 << CI_MODE);
int
main(int argc, char **argv)
{
Display *dpy;
XVisualInfo *vinfo;
Bool treatAsSingle;
char *str, buffer[1024];
int tty = isatty(fileno(stdin));
int overlay = 0, showconfig = 0;
void *fbc;
#if !defined(_WIN32)
dpy = XOpenDisplay(NULL);
if (dpy == NULL) {
printf("Could not connect to X server\n");
exit(1);
}
__glutDisplay = dpy;
__glutScreen = DefaultScreen(__glutDisplay);
#endif
while (!feof(stdin)) {
if (tty)
printf("dstr> ");
str = fgets(buffer, 1023, stdin);
if (str) {
printf("\n");
if (!strcmp("v", str)) {
verbose = 1 - verbose;
printf("verbose = %d\n\n", verbose);
} else if (!strcmp("s", str)) {
showconfig = 1 - showconfig;
printf("showconfig = %d\n\n", showconfig);
} else if (!strcmp("o", str)) {
overlay = 1 - overlay;
printf("overlay = %d\n\n", overlay);
} else {
if (overlay) {
vinfo = getVisualInfoFromString(str, &treatAsSingle,
requiredOverlayCriteria, numRequiredOverlayCriteria, requiredOverlayCriteriaMask, &fbc);
} else {
vinfo = getVisualInfoFromString(str, &treatAsSingle,
requiredWindowCriteria, numRequiredWindowCriteria, requiredWindowCriteriaMask, &fbc);
}
if (vinfo) {
printf("\n");
if (!tty)
printf("Display string: %s", str);
#ifdef _WIN32
printf("Visual = 0x%x\n", 0);
#else
printf("Visual = 0x%x%s\n", vinfo->visualid, fbc ? " (needs FBC)" : "");
#endif
if (treatAsSingle) {
printf("Treat as SINGLE.\n");
}
if (showconfig) {
int glxCapable, bufferSize, level, renderType, doubleBuffer,
stereo, auxBuffers, redSize, greenSize, blueSize,
alphaSize, depthSize, stencilSize, acRedSize, acGreenSize,
acBlueSize, acAlphaSize;
glXGetConfig(dpy, vinfo, GLX_BUFFER_SIZE, &bufferSize);
glXGetConfig(dpy, vinfo, GLX_LEVEL, &level);
glXGetConfig(dpy, vinfo, GLX_RGBA, &renderType);
glXGetConfig(dpy, vinfo, GLX_DOUBLEBUFFER, &doubleBuffer);
glXGetConfig(dpy, vinfo, GLX_STEREO, &stereo);
glXGetConfig(dpy, vinfo, GLX_AUX_BUFFERS, &auxBuffers);
glXGetConfig(dpy, vinfo, GLX_RED_SIZE, &redSize);
glXGetConfig(dpy, vinfo, GLX_GREEN_SIZE, &greenSize);
glXGetConfig(dpy, vinfo, GLX_BLUE_SIZE, &blueSize);
glXGetConfig(dpy, vinfo, GLX_ALPHA_SIZE, &alphaSize);
glXGetConfig(dpy, vinfo, GLX_DEPTH_SIZE, &depthSize);
glXGetConfig(dpy, vinfo, GLX_STENCIL_SIZE, &stencilSize);
glXGetConfig(dpy, vinfo, GLX_ACCUM_RED_SIZE, &acRedSize);
glXGetConfig(dpy, vinfo, GLX_ACCUM_GREEN_SIZE, &acGreenSize);
glXGetConfig(dpy, vinfo, GLX_ACCUM_BLUE_SIZE, &acBlueSize);
glXGetConfig(dpy, vinfo, GLX_ACCUM_ALPHA_SIZE, &acAlphaSize);
printf("RGBA = (%d, %d, %d, %d)\n", redSize, greenSize, blueSize, alphaSize);
printf("acc = (%d, %d, %d, %d)\n", acRedSize, acGreenSize, acBlueSize, acAlphaSize);
printf("db = %d\n", doubleBuffer);
printf("str = %d\n", stereo);
printf("aux = %d\n", auxBuffers);
printf("lvl = %d\n", level);
printf("buf = %d\n", bufferSize);
printf("rgba = %d\n", renderType);
printf("z = %d\n", depthSize);
printf("s = %d\n", stencilSize);
}
} else {
printf("\n");
printf("No match.\n");
}
printf("\n");
}
}
}
printf("\n");
return 0;
}
#endif
/* Copyright (c) Mark J. Kilgard, 1995, 1998. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#include "glutint.h"
#if !defined(_WIN32)
#include <X11/Xatom.h> /* For XA_CURSOR */
#include <X11/cursorfont.h>
#endif
typedef struct _CursorTable {
#if defined(_WIN32)
char* glyph;
#else
int glyph;
#endif
Cursor cursor;
} CursorTable;
/* *INDENT-OFF* */
static CursorTable cursorTable[] = {
{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 */
};
/* *INDENT-ON* */
#if !defined(_WIN32)
static Cursor blankCursor = None;
static Cursor fullCrosshairCusor = None;
/* SGI X server's support a special property called the
_SGI_CROSSHAIR_CURSOR that when installed as a window's
cursor, becomes a full screen crosshair cursor. SGI
has special cursor generation hardware for this case. */
static Cursor
getFullCrosshairCursor(void)
{
Cursor cursor;
Atom crosshairAtom, actualType;
int rc, actualFormat;
unsigned long n, left;
unsigned char *value;
if (fullCrosshairCusor == None) {
crosshairAtom = XInternAtom(__glutDisplay,
"_SGI_CROSSHAIR_CURSOR", True);
if (crosshairAtom != None) {
value = 0; /* Make compiler happy. */
rc = XGetWindowProperty(__glutDisplay, __glutRoot,
crosshairAtom, 0, 1, False, XA_CURSOR, &actualType,
&actualFormat, &n, &left, &value);
if (rc == Success && actualFormat == 32 && n >= 1) {
cursor = ((unsigned long *)value)[0];
XFree(value);
return cursor;
}
}
}
return XCreateFontCursor(__glutDisplay, XC_crosshair);
}
/* X11 forces you to create a blank cursor if you want
to disable the cursor. */
static Cursor
makeBlankCursor(void)
{
static char data[1] =
{0};
Cursor cursor;
Pixmap blank;
XColor dummy;
blank = XCreateBitmapFromData(__glutDisplay, __glutRoot,
data, 1, 1);
if (blank == None)
__glutFatalError("out of memory.");
cursor = XCreatePixmapCursor(__glutDisplay, blank, blank,
&dummy, &dummy, 0, 0);
XFreePixmap(__glutDisplay, blank);
return cursor;
}
#endif /* !_WIN32 */
/* Win32 and X11 use this same function to accomplish
fairly different tasks. X11 lets you just define the
cursor for a window and the window system takes care
of making sure that the window's cursor is installed
when the mouse is in the window. Win32 requires the
application to handle a WM_SETCURSOR message to install
the right cursor when windows are entered. Think of
the Win32 __glutSetCursor (called from __glutWindowProc)
as "install cursor". Think of the X11 __glutSetCursor
(called from glutSetCursor) as "define cursor". */
void
__glutSetCursor(GLUTwindow *window)
{
int cursor = window->cursor;
Cursor xcursor = 0;
if (cursor >= 0 &&
cursor < sizeof(cursorTable) / sizeof(cursorTable[0])) {
if (cursorTable[cursor].cursor == None) {
cursorTable[cursor].cursor = XCreateFontCursor(__glutDisplay,
cursorTable[cursor].glyph);
}
xcursor = cursorTable[cursor].cursor;
} else {
/* Special cases. */
switch (cursor) {
case GLUT_CURSOR_INHERIT:
#if defined(_WIN32)
while (window->parent) {
window = window->parent;
if (window->cursor != GLUT_CURSOR_INHERIT) {
__glutSetCursor(window);
return;
}
}
/* XXX Default to an arrow cursor. Is this
right or should we be letting the default
window proc be installing some system cursor? */
xcursor = cursorTable[0].cursor;
if (xcursor == NULL) {
xcursor =
cursorTable[0].cursor =
LoadCursor(NULL, cursorTable[0].glyph);
}
#else
xcursor = None;
#endif
break;
case GLUT_CURSOR_NONE:
#if defined(_WIN32)
xcursor = NULL;
#else
if (blankCursor == None) {
blankCursor = makeBlankCursor();
}
xcursor = blankCursor;
#endif
break;
case GLUT_CURSOR_FULL_CROSSHAIR:
#if defined(_WIN32)
xcursor = (HICON) IDC_CROSS;
#else
if (fullCrosshairCusor == None) {
fullCrosshairCusor = getFullCrosshairCursor();
}
xcursor = fullCrosshairCusor;
#endif
break;
}
}
XDefineCursor(__glutDisplay,
window->win, xcursor);
XFlush(__glutDisplay);
}
/* CENTRY */
void GLUTAPIENTRY
glutSetCursor(int cursor)
{
#ifdef _WIN32
POINT point;
__glutCurrentWindow->cursor = cursor;
/* Are we in the window right now? If so,
install the cursor. */
GetCursorPos(&point);
if (__glutCurrentWindow->win == WindowFromPoint(point)) {
__glutSetCursor(__glutCurrentWindow);
}
#else
__glutCurrentWindow->cursor = cursor;
__glutSetCursor(__glutCurrentWindow);
#endif
}
/* ENDCENTRY */
/* Copyright (c) Mark J. Kilgard, 1994. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#include "glutint.h"
void GLUTAPIENTRY
glutButtonBoxFunc(GLUTbuttonBoxCB buttonBoxFunc)
{
__glutCurrentWindow->buttonBox = buttonBoxFunc;
__glutUpdateInputDeviceMaskFunc = __glutUpdateInputDeviceMask;
__glutPutOnWorkList(__glutCurrentWindow,
GLUT_DEVICE_MASK_WORK);
}
void GLUTAPIENTRY
glutDialsFunc(GLUTdialsCB dialsFunc)
{
__glutCurrentWindow->dials = dialsFunc;
__glutUpdateInputDeviceMaskFunc = __glutUpdateInputDeviceMask;
__glutPutOnWorkList(__glutCurrentWindow,
GLUT_DEVICE_MASK_WORK);
}
/* Copyright (c) Mark J. Kilgard, 1994, 1995, 1996, 1997, 1998. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#ifdef __VMS
#include <GL/vms_x_fix.h>
#endif
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <assert.h>
#include <string.h> /* Some FD_ZERO macros use memset without
prototyping memset. */
/* Much of the following #ifdef logic to include the proper
prototypes for the select system call is based on logic
from the X11R6.3 version of <X11/Xpoll.h>. */
#if !defined(_WIN32)
# ifdef __sgi
# include <bstring.h> /* prototype for bzero used by FD_ZERO */
# endif
# if (defined(__FreeBSD__) || defined(SVR4) || defined(CRAY) || defined(AIXV3)) && !defined(FD_SETSIZE)
# include <sys/select.h> /* select system call interface */
# ifdef luna
# include <sysent.h>
# endif
# endif
/* AIX 4.2 fubar-ed <sys/select.h>, so go to heroic measures to get it */
# if defined(AIXV4) && !defined(NFDBITS)
# include <sys/select.h>
# endif
#endif /* !_WIN32 */
#include <sys/types.h>
#if !defined(_WIN32)
# if defined(__vms) && ( __VMS_VER < 70000000 )
# include <sys/time.h>
# else
# ifndef __vms
# include <sys/time.h>
# endif
# endif
# include <unistd.h>
# include <X11/Xlib.h>
# include <X11/keysym.h>
#else
# ifdef __CYGWIN32__
# include <sys/time.h>
# else
# include <sys/timeb.h>
# endif
# ifdef __hpux
/* XXX Bert Gijsbers <bert@mc.bio.uva.nl> reports that HP-UX
needs different keysyms for the End, Insert, and Delete keys
to work on an HP 715. It would be better if HP generated
standard keysyms for standard keys. */
# include <X11/HPkeysym.h>
# endif
#endif /* !_WIN32 */
#include "glutint.h"
#if defined(__vms) && ( __VMS_VER < 70000000 )
#include <ssdef.h>
#include <psldef.h>
extern int SYS$CLREF(int efn);
extern int SYS$SETIMR(unsigned int efn, struct timeval6 *timeout, void *ast,
unsigned int request_id, unsigned int flags);
extern int SYS$WFLOR(unsigned int efn, unsigned int mask);
extern int SYS$CANTIM(unsigned int request_id, unsigned int mode);
#endif /* __vms, VMs 6.2 or earlier */
static GLUTtimer *freeTimerList = NULL;
GLUTidleCB __glutIdleFunc = NULL;
GLUTtimer *__glutTimerList = NULL;
#ifdef SUPPORT_FORTRAN
GLUTtimer *__glutNewTimer;
#endif
GLUTwindow *__glutWindowWorkList = NULL;
GLUTmenu *__glutMappedMenu;
GLUTmenu *__glutCurrentMenu = NULL;
void (*__glutUpdateInputDeviceMaskFunc) (GLUTwindow *);
#if !defined(_WIN32)
void (*__glutMenuItemEnterOrLeave)(GLUTmenuItem * item, int num, int type) = NULL;
void (*__glutFinishMenu)(Window win, int x, int y);
void (*__glutPaintMenu)(GLUTmenu * menu);
void (*__glutStartMenu)(GLUTmenu * menu, GLUTwindow * window, int x, int y, int x_win, int y_win);
GLUTmenu * (*__glutGetMenuByNum)(int menunum);
GLUTmenuItem * (*__glutGetMenuItem)(GLUTmenu * menu, Window win, int *which);
GLUTmenu * (*__glutGetMenu)(Window win);
#endif
Atom __glutMotifHints = None;
/* Modifier mask of ~0 implies not in core input callback. */
unsigned int __glutModifierMask = (unsigned int) ~0;
int __glutWindowDamaged = 0;
void GLUTAPIENTRY
glutIdleFunc(GLUTidleCB idleFunc)
{
__glutIdleFunc = idleFunc;
}
void GLUTAPIENTRY
glutTimerFunc(unsigned int interval, GLUTtimerCB timerFunc, int value)
{
GLUTtimer *timer, *other;
GLUTtimer **prevptr;
#ifdef OLD_VMS
struct timeval6 now;
#else
struct timeval now;
#endif
if (!timerFunc)
return;
if (freeTimerList) {
timer = freeTimerList;
freeTimerList = timer->next;
} else {
timer = (GLUTtimer *) malloc(sizeof(GLUTtimer));
if (!timer)
__glutFatalError("out of memory.");
}
timer->func = timerFunc;
#if defined(__vms) && ( __VMS_VER < 70000000 )
/* VMS time is expressed in units of 100 ns */
timer->timeout.val = interval * TICKS_PER_MILLISECOND;
#else
timer->timeout.tv_sec = (int) interval / 1000;
timer->timeout.tv_usec = (int) (interval % 1000) * 1000;
#endif
timer->value = value;
timer->next = NULL;
GETTIMEOFDAY(&now);
ADD_TIME(timer->timeout, timer->timeout, now);
prevptr = &__glutTimerList;
other = *prevptr;
while (other && IS_AFTER(other->timeout, timer->timeout)) {
prevptr = &other->next;
other = *prevptr;
}
timer->next = other;
#ifdef SUPPORT_FORTRAN
__glutNewTimer = timer; /* for Fortran binding! */
#endif
*prevptr = timer;
}
void
handleTimeouts(void)
{
#ifdef OLD_VMS
struct timeval6 now;
#else
struct timeval now;
#endif
GLUTtimer *timer;
/* Assumption is that __glutTimerList is already determined
to be non-NULL. */
GETTIMEOFDAY(&now);
while (IS_AT_OR_AFTER(__glutTimerList->timeout, now)) {
timer = __glutTimerList;
/* call the timer function */
timer->func(timer->value);
/* remove from the linked list */
__glutTimerList = timer->next;
/* put this timer on the "free" list */
timer->next = freeTimerList;
freeTimerList = timer;
if (!__glutTimerList)
break;
}
}
void
__glutPutOnWorkList(GLUTwindow * window, int workMask)
{
if (window->workMask) {
/* Already on list; just OR in new workMask. */
window->workMask |= workMask;
} else {
/* Update work mask and add to window work list. */
window->workMask = workMask;
/* Assert that if the window does not have a
workMask already, the window should definitely
not be the head of the work list. */
assert(window != __glutWindowWorkList);
window->prevWorkWin = __glutWindowWorkList;
__glutWindowWorkList = window;
}
}
void
__glutPostRedisplay(GLUTwindow * window, int layerMask)
{
int shown = (layerMask & (GLUT_REDISPLAY_WORK | GLUT_REPAIR_WORK)) ?
window->shownState : window->overlay->shownState;
/* Post a redisplay if the window is visible (or the
visibility of the window is unknown, ie. window->visState
== -1) _and_ the layer is known to be shown. */
if (window->visState != GLUT_HIDDEN
&& window->visState != GLUT_FULLY_COVERED && shown) {
__glutPutOnWorkList(window, layerMask);
}
}
/* CENTRY */
void GLUTAPIENTRY
glutPostRedisplay(void)
{
__glutPostRedisplay(__glutCurrentWindow, GLUT_REDISPLAY_WORK);
}
/* The advantage of this routine is that it saves the cost of a
glutSetWindow call (entailing an expensive OpenGL context switch),
particularly useful when multiple windows need redisplays posted at
the same times. See also glutPostWindowOverlayRedisplay. */
void GLUTAPIENTRY
glutPostWindowRedisplay(int win)
{
__glutPostRedisplay(__glutWindowList[win - 1], GLUT_REDISPLAY_WORK);
}
/* ENDCENTRY */
static GLUTeventParser *eventParserList = NULL;
/* __glutRegisterEventParser allows another module to register
to intercept X events types not otherwise acted on by the
GLUT processEventsAndTimeouts routine. The X Input
extension support code uses an event parser for handling X
Input extension events. */
void
__glutRegisterEventParser(GLUTeventParser * parser)
{
parser->next = eventParserList;
eventParserList = parser;
}
static void
markWindowHidden(GLUTwindow * window)
{
if (GLUT_HIDDEN != window->visState) {
GLUTwindow *child;
if (window->windowStatus) {
window->visState = GLUT_HIDDEN;
__glutSetWindow(window);
window->windowStatus(GLUT_HIDDEN);
}
/* An unmap is only reported on a single window; its
descendents need to know they are no longer visible. */
child = window->children;
while (child) {
markWindowHidden(child);
child = child->siblings;
}
}
}
#if !defined(_WIN32)
static void
purgeStaleWindow(Window win)
{
GLUTstale **pEntry = &__glutStaleWindowList;
GLUTstale *entry = __glutStaleWindowList;
/* Tranverse singly-linked stale window list look for the
window ID. */
while (entry) {
if (entry->win == win) {
/* Found it; delete it. */
*pEntry = entry->next;
free(entry);
return;
} else {
pEntry = &entry->next;
entry = *pEntry;
}
}
}
/* Unlike XNextEvent, if a signal arrives,
interruptibleXNextEvent will return (with a zero return
value). This helps GLUT drop out of XNextEvent if a signal
is delivered. The intent is so that a GLUT program can call
glutIdleFunc in a signal handler to register an idle func
and then immediately get dropped into the idle func (after
returning from the signal handler). The idea is to make
GLUT's main loop reliably interruptible by signals. */
static int
interruptibleXNextEvent(Display * dpy, XEvent * event)
{
fd_set fds;
int rc;
/* Flush X protocol since XPending does not do this
implicitly. */
XFlush(__glutDisplay);
for (;;) {
if (XPending(__glutDisplay)) {
XNextEvent(dpy, event);
return 1;
}
#ifndef VMS
/* the combination ConectionNumber-select is buggy on VMS. Sometimes it
* fails. This part of the code hangs the program on VMS7.2. But even
* without it the program seems to run correctly.
* Note that this is a bug in the VMS/DECWindows run-time-libraries.
* Compaq engeneering does not want or is not able to make a fix.
* (last sentence is a quotation from Compaq when I reported the
* problem January 2000) */
FD_ZERO(&fds);
FD_SET(__glutConnectionFD, &fds);
rc = select(__glutConnectionFD + 1, &fds, NULL, NULL, NULL);
if (rc < 0) {
if (errno == EINTR) {
return 0;
} else {
__glutFatalError("select error.");
}
}
#endif
}
}
#endif
static void
processEventsAndTimeouts(void)
{
do {
#if defined(_WIN32)
MSG event;
if(!GetMessage(&event, NULL, 0, 0)) /* bail if no more messages */
exit(0);
TranslateMessage(&event); /* translate virtual-key messages */
DispatchMessage(&event); /* call the window proc */
/* see win32_event.c for event (message) processing procedures */
#else
static int mappedMenuButton;
GLUTeventParser *parser;
XEvent event, ahead;
GLUTwindow *window;
GLUTkeyboardCB keyboard;
GLUTspecialCB special;
int gotEvent, width, height;
gotEvent = interruptibleXNextEvent(__glutDisplay, &event);
if (gotEvent) {
switch (event.type) {
case MappingNotify:
XRefreshKeyboardMapping((XMappingEvent *) & event);
break;
case ConfigureNotify:
window = __glutGetWindow(event.xconfigure.window);
if (window) {
if (window->win != event.xconfigure.window) {
/* Ignore ConfigureNotify sent to the overlay
planes. GLUT could get here because overlays
select for StructureNotify events to receive
DestroyNotify. */
break;
}
width = event.xconfigure.width;
height = event.xconfigure.height;
if (width != window->width || height != window->height) {
if (window->overlay) {
XResizeWindow(__glutDisplay, window->overlay->win, width, height);
}
window->width = width;
window->height = height;
__glutSetWindow(window);
/* Do not execute OpenGL out of sequence with
respect to the XResizeWindow request! */
glXWaitX();
window->reshape(width, height);
window->forceReshape = False;
/* A reshape should be considered like posting a
repair; this is necessary for the "Mesa
glXSwapBuffers to repair damage" hack to operate
correctly. Without it, there's not an initial
back buffer render from which to blit from when
damage happens to the window. */
__glutPostRedisplay(window, GLUT_REPAIR_WORK);
}
}
break;
case Expose:
/* compress expose events */
while (XEventsQueued(__glutDisplay, QueuedAfterReading)
> 0) {
XPeekEvent(__glutDisplay, &ahead);
if (ahead.type != Expose ||
ahead.xexpose.window != event.xexpose.window) {
break;
}
XNextEvent(__glutDisplay, &event);
}
if (event.xexpose.count == 0) {
GLUTmenu *menu;
if (__glutMappedMenu &&
(menu = __glutGetMenu(event.xexpose.window))) {
__glutPaintMenu(menu);
} else {
window = __glutGetWindow(event.xexpose.window);
if (window) {
if (window->win == event.xexpose.window) {
__glutPostRedisplay(window, GLUT_REPAIR_WORK);
} else if (window->overlay && window->overlay->win == event.xexpose.window) {
__glutPostRedisplay(window, GLUT_OVERLAY_REPAIR_WORK);
}
}
}
} else {
/* there are more exposes to read; wait to redisplay */
}
break;
case ButtonPress:
case ButtonRelease:
if (__glutMappedMenu && event.type == ButtonRelease
&& mappedMenuButton == event.xbutton.button) {
/* Menu is currently popped up and its button is
released. */
__glutFinishMenu(event.xbutton.window, event.xbutton.x, event.xbutton.y);
} else {
window = __glutGetWindow(event.xbutton.window);
/* added button check for mice with > 3 buttons */
if (window) {
GLUTmenu *menu;
int menuNum;
if (event.xbutton.button <= GLUT_MAX_MENUS)
menuNum = window->menu[event.xbutton.button - 1];
else
menuNum = 0;
/* Make sure that __glutGetMenuByNum is only called if there
really is a menu present. */
if ((menuNum > 0) && (menu = __glutGetMenuByNum(menuNum))) {
if (event.type == ButtonPress && !__glutMappedMenu) {
__glutStartMenu(menu, window,
event.xbutton.x_root, event.xbutton.y_root,
event.xbutton.x, event.xbutton.y);
mappedMenuButton = event.xbutton.button;
} else {
/* Ignore a release of a button with a menu
attatched to it when no menu is popped up,
or ignore a press when another menu is
already popped up. */
}
} else if (window->mouse) {
__glutSetWindow(window);
__glutModifierMask = event.xbutton.state;
window->mouse(event.xbutton.button - 1,
event.type == ButtonRelease ?
GLUT_UP : GLUT_DOWN,
event.xbutton.x, event.xbutton.y);
__glutModifierMask = ~0;
} else {
/* Stray mouse events. Ignore. */
}
} else {
/* Window might have been destroyed and all the
events for the window may not yet be received. */
}
}
break;
case MotionNotify:
if (!__glutMappedMenu) {
window = __glutGetWindow(event.xmotion.window);
if (window) {
/* If motion function registered _and_ buttons held
* down, call motion function... */
if (window->motion && event.xmotion.state &
(Button1Mask | Button2Mask | Button3Mask)) {
__glutSetWindow(window);
window->motion(event.xmotion.x, event.xmotion.y);
}
/* If passive motion function registered _and_
buttons not held down, call passive motion
function... */
else if (window->passive &&
((event.xmotion.state &
(Button1Mask | Button2Mask | Button3Mask)) ==
0)) {
__glutSetWindow(window);
window->passive(event.xmotion.x,
event.xmotion.y);
}
}
} else {
/* Motion events are thrown away when a pop up menu
is active. */
}
break;
case KeyPress:
case KeyRelease:
window = __glutGetWindow(event.xkey.window);
if (!window) {
break;
}
if (event.type == KeyPress) {
keyboard = window->keyboard;
} else {
/* If we are ignoring auto repeated keys for this window,
check if the next event in the X event queue is a KeyPress
for the exact same key (and at the exact same time) as the
key being released. The X11 protocol will send auto
repeated keys as such KeyRelease/KeyPress pairs. */
if (window->ignoreKeyRepeat) {
if (XEventsQueued(__glutDisplay, QueuedAfterReading)) {
XPeekEvent(__glutDisplay, &ahead);
if (ahead.type == KeyPress
&& ahead.xkey.window == event.xkey.window
&& ahead.xkey.keycode == event.xkey.keycode
&& ahead.xkey.time == event.xkey.time) {
/* Pop off the repeated KeyPress and ignore
the auto repeated KeyRelease/KeyPress pair. */
XNextEvent(__glutDisplay, &event);
break;
}
}
}
keyboard = window->keyboardUp;
}
if (keyboard) {
char tmp[1];
int rc;
rc = XLookupString(&event.xkey, tmp, sizeof(tmp),
NULL, NULL);
if (rc) {
__glutSetWindow(window);
__glutModifierMask = event.xkey.state;
keyboard(tmp[0],
event.xkey.x, event.xkey.y);
__glutModifierMask = ~0;
break;
}
}
if (event.type == KeyPress) {
special = window->special;
} else {
special = window->specialUp;
}
if (special) {
KeySym ks;
int key;
/* Introduced in X11R6: (Partial list of) Keypad Functions. Define
in place in case compiling against an older pre-X11R6
X11/keysymdef.h file. */
#ifndef XK_KP_Home
#define XK_KP_Home 0xFF95
#endif
#ifndef XK_KP_Left
#define XK_KP_Left 0xFF96
#endif
#ifndef XK_KP_Up
#define XK_KP_Up 0xFF97
#endif
#ifndef XK_KP_Right
#define XK_KP_Right 0xFF98
#endif
#ifndef XK_KP_Down
#define XK_KP_Down 0xFF99
#endif
#ifndef XK_KP_Prior
#define XK_KP_Prior 0xFF9A
#endif
#ifndef XK_KP_Next
#define XK_KP_Next 0xFF9B
#endif
#ifndef XK_KP_End
#define XK_KP_End 0xFF9C
#endif
#ifndef XK_KP_Insert
#define XK_KP_Insert 0xFF9E
#endif
#ifndef XK_KP_Delete
#define XK_KP_Delete 0xFF9F
#endif
ks = XLookupKeysym((XKeyEvent *) & event, 0);
/* XXX Verbose, but makes no assumptions about keysym
layout. */
switch (ks) {
/* *INDENT-OFF* */
/* function keys */
case XK_F1: key = GLUT_KEY_F1; break;
case XK_F2: key = GLUT_KEY_F2; break;
case XK_F3: key = GLUT_KEY_F3; break;
case XK_F4: key = GLUT_KEY_F4; break;
case XK_F5: key = GLUT_KEY_F5; break;
case XK_F6: key = GLUT_KEY_F6; break;
case XK_F7: key = GLUT_KEY_F7; break;
case XK_F8: key = GLUT_KEY_F8; break;
case XK_F9: key = GLUT_KEY_F9; break;
case XK_F10: key = GLUT_KEY_F10; break;
case XK_F11: key = GLUT_KEY_F11; break;
case XK_F12: key = GLUT_KEY_F12; break;
/* directional keys */
case XK_KP_Left:
case XK_Left: key = GLUT_KEY_LEFT; break;
case XK_KP_Up: /* Introduced in X11R6. */
case XK_Up: key = GLUT_KEY_UP; break;
case XK_KP_Right: /* Introduced in X11R6. */
case XK_Right: key = GLUT_KEY_RIGHT; break;
case XK_KP_Down: /* Introduced in X11R6. */
case XK_Down: key = GLUT_KEY_DOWN; break;
/* *INDENT-ON* */
case XK_KP_Prior: /* Introduced in X11R6. */
case XK_Prior:
/* XK_Prior same as X11R6's XK_Page_Up */
key = GLUT_KEY_PAGE_UP;
break;
case XK_KP_Next: /* Introduced in X11R6. */
case XK_Next:
/* XK_Next same as X11R6's XK_Page_Down */
key = GLUT_KEY_PAGE_DOWN;
break;
case XK_KP_Home: /* Introduced in X11R6. */
case XK_Home:
key = GLUT_KEY_HOME;
break;
#ifdef __hpux
case XK_Select:
#endif
case XK_KP_End: /* Introduced in X11R6. */
case XK_End:
key = GLUT_KEY_END;
break;
#ifdef __hpux
case XK_InsertChar:
#endif
case XK_KP_Insert: /* Introduced in X11R6. */
case XK_Insert:
key = GLUT_KEY_INSERT;
break;
#ifdef __hpux
case XK_DeleteChar:
#endif
case XK_KP_Delete: /* Introduced in X11R6. */
/* The Delete character is really an ASCII key. */
__glutSetWindow(window);
keyboard(127, /* ASCII Delete character. */
event.xkey.x, event.xkey.y);
goto skip;
default:
goto skip;
}
__glutSetWindow(window);
__glutModifierMask = event.xkey.state;
special(key, event.xkey.x, event.xkey.y);
__glutModifierMask = ~0;
skip:;
}
break;
case EnterNotify:
case LeaveNotify:
if (event.xcrossing.mode != NotifyNormal ||
event.xcrossing.detail == NotifyNonlinearVirtual ||
event.xcrossing.detail == NotifyVirtual) {
/* Careful to ignore Enter/LeaveNotify events that
come from the pop-up menu pointer grab and ungrab.
Also, ignore "virtual" Enter/LeaveNotify events
since they represent the pointer passing through
the window hierarchy without actually entering or
leaving the actual real estate of a window. */
break;
}
if (__glutMappedMenu) {
GLUTmenuItem *item;
int num;
item = __glutGetMenuItem(__glutMappedMenu,
event.xcrossing.window, &num);
if (item) {
__glutMenuItemEnterOrLeave(item, num, event.type);
break;
}
}
window = __glutGetWindow(event.xcrossing.window);
if (window) {
if (window->entry) {
if (event.type == EnterNotify) {
/* With overlays established, X can report two
enter events for both the overlay and normal
plane window. Do not generate a second enter
callback if we reported one without an
intervening leave. */
if (window->entryState != EnterNotify) {
int num = window->num;
Window xid = window->win;
window->entryState = EnterNotify;
__glutSetWindow(window);
window->entry(GLUT_ENTERED);
if (__glutMappedMenu) {
/* Do not generate any passive motion events
when menus are in use. */
} else {
/* An EnterNotify event can result in a
"compound" callback if a passive motion
callback is also registered. In this case,
be a little paranoid about the possibility
the window could have been destroyed in the
entry callback. */
window = __glutWindowList[num];
if (window && window->passive && window->win == xid) {
__glutSetWindow(window);
window->passive(event.xcrossing.x, event.xcrossing.y);
}
}
}
} else {
if (window->entryState != LeaveNotify) {
/* When an overlay is established for a window
already mapped and with the pointer in it,
the X server will generate a leave/enter
event pair as the pointer leaves (without
moving) from the normal plane X window to
the newly mapped overlay X window (or vice
versa). This enter/leave pair should not be
reported to the GLUT program since the pair
is a consequence of creating (or destroying)
the overlay, not an actual leave from the
GLUT window. */
if (XEventsQueued(__glutDisplay, QueuedAfterReading)) {
XPeekEvent(__glutDisplay, &ahead);
if (ahead.type == EnterNotify &&
__glutGetWindow(ahead.xcrossing.window) == window) {
XNextEvent(__glutDisplay, &event);
break;
}
}
window->entryState = LeaveNotify;
__glutSetWindow(window);
window->entry(GLUT_LEFT);
}
}
} else if (window->passive) {
__glutSetWindow(window);
window->passive(event.xcrossing.x, event.xcrossing.y);
}
}
break;
case UnmapNotify:
/* MapNotify events are not needed to maintain
visibility state since VisibilityNotify events will
be delivered when a window becomes visible from
mapping. However, VisibilityNotify events are not
delivered when a window is unmapped (for the window
or its children). */
window = __glutGetWindow(event.xunmap.window);
if (window) {
if (window->win != event.xconfigure.window) {
/* Ignore UnmapNotify sent to the overlay planes.
GLUT could get here because overlays select for
StructureNotify events to receive DestroyNotify.
*/
break;
}
markWindowHidden(window);
}
break;
case VisibilityNotify:
window = __glutGetWindow(event.xvisibility.window);
if (window) {
/* VisibilityUnobscured+1 = GLUT_FULLY_RETAINED,
VisibilityPartiallyObscured+1 =
GLUT_PARTIALLY_RETAINED, VisibilityFullyObscured+1
= GLUT_FULLY_COVERED. */
int visState = event.xvisibility.state + 1;
if (visState != window->visState) {
if (window->windowStatus) {
window->visState = visState;
__glutSetWindow(window);
window->windowStatus(visState);
}
}
}
break;
case ClientMessage:
if (event.xclient.data.l[0] == __glutWMDeleteWindow)
exit(0);
break;
case DestroyNotify:
purgeStaleWindow(event.xdestroywindow.window);
break;
case CirculateNotify:
case CreateNotify:
case GravityNotify:
case ReparentNotify:
/* Uninteresting to GLUT (but possible for GLUT to
receive). */
break;
default:
/* Pass events not directly handled by the GLUT main
event loop to any event parsers that have been
registered. In this way, X Input extension events
are passed to the correct handler without forcing
all GLUT programs to support X Input event handling.
*/
parser = eventParserList;
while (parser) {
if (parser->func(&event))
break;
parser = parser->next;
}
break;
}
}
#endif /* _WIN32 */
if (__glutTimerList) {
handleTimeouts();
}
}
while (XPending(__glutDisplay));
}
static void
waitForSomething(void)
{
#if defined(__vms) && ( __VMS_VER < 70000000 )
static struct timeval6 zerotime =
{0};
unsigned int timer_efn;
#define timer_id 'glut' /* random :-) number */
unsigned int wait_mask;
#else
static struct timeval zerotime =
{0, 0};
#if !defined(_WIN32)
fd_set fds;
#endif
#endif
#ifdef OLD_VMS
struct timeval6 now, timeout, waittime;
#else
struct timeval now, timeout, waittime;
#endif
#if !defined(_WIN32)
int rc;
#endif
/* Flush X protocol since XPending does not do this
implicitly. */
XFlush(__glutDisplay);
if (XPending(__glutDisplay)) {
/* It is possible (but quite rare) that XFlush may have
needed to wait for a writable X connection file
descriptor, and in the process, may have had to read off
X protocol from the file descriptor. If XPending is true,
this case occured and we should avoid waiting in select
since X protocol buffered within Xlib is due to be
processed and potentially no more X protocol is on the
file descriptor, so we would risk waiting improperly in
select. */
goto immediatelyHandleXinput;
}
#if defined(__vms) && ( __VMS_VER < 70000000 )
timeout = __glutTimerList->timeout;
GETTIMEOFDAY(&now);
wait_mask = 1 << (__glutConnectionFD & 31);
if (IS_AFTER(now, timeout)) {
/* We need an event flag for the timer. */
/* XXX The `right' way to do this is to use LIB$GET_EF, but
since it needs to be in the same cluster as the EFN for
the display, we will have hack it. */
timer_efn = __glutConnectionFD - 1;
if ((timer_efn / 32) != (__glutConnectionFD / 32)) {
timer_efn = __glutConnectionFD + 1;
}
rc = SYS$CLREF(timer_efn);
rc = SYS$SETIMR(timer_efn, &timeout, NULL, timer_id, 0);
wait_mask |= 1 << (timer_efn & 31);
} else {
timer_efn = 0;
}
rc = SYS$WFLOR(__glutConnectionFD, wait_mask);
if (timer_efn != 0 && SYS$CLREF(timer_efn) == SS$_WASCLR) {
rc = SYS$CANTIM(timer_id, PSL$C_USER);
}
/* XXX There does not seem to be checking of "rc" in the code
above. Can any of the SYS$ routines above fail? */
#else /* not vms6.2 or lower */
#if !defined(_WIN32)
FD_ZERO(&fds);
FD_SET(__glutConnectionFD, &fds);
#endif
timeout = __glutTimerList->timeout;
GETTIMEOFDAY(&now);
if (IS_AFTER(now, timeout)) {
TIMEDELTA(waittime, timeout, now);
} else {
waittime = zerotime;
}
#if !defined(_WIN32)
rc = select(__glutConnectionFD + 1, &fds,
NULL, NULL, &waittime);
if (rc < 0 && errno != EINTR)
__glutFatalError("select error.");
#else
MsgWaitForMultipleObjects(0, NULL, FALSE,
waittime.tv_sec*1000 + waittime.tv_usec/1000, QS_ALLINPUT);
#endif
#endif /* not vms6.2 or lower */
/* Without considering the cause of select unblocking, check
for pending X events and handle any timeouts (by calling
processEventsAndTimeouts). We always look for X events
even if select returned with 0 (indicating a timeout);
otherwise we risk starving X event processing by continous
timeouts. */
if (XPending(__glutDisplay)) {
immediatelyHandleXinput:
processEventsAndTimeouts();
} else {
if (__glutTimerList)
handleTimeouts();
}
}
static void
idleWait(void)
{
if (XPending(__glutDisplay)) {
processEventsAndTimeouts();
} else {
if (__glutTimerList) {
handleTimeouts();
}
}
/* Make sure idle func still exists! */
if (__glutIdleFunc) {
__glutIdleFunc();
}
}
static GLUTwindow **beforeEnd;
static GLUTwindow *
processWindowWorkList(GLUTwindow * window)
{
int workMask;
if (window->prevWorkWin) {
window->prevWorkWin = processWindowWorkList(window->prevWorkWin);
} else {
beforeEnd = &window->prevWorkWin;
}
/* Capture work mask for work that needs to be done to this
window, then clear the window's work mask (excepting the
dummy work bit, see below). Then, process the captured
work mask. This allows callbacks in the processing the
captured work mask to set the window's work mask for
subsequent processing. */
workMask = window->workMask;
assert((workMask & GLUT_DUMMY_WORK) == 0);
/* Set the dummy work bit, clearing all other bits, to
indicate that the window is currently on the window work
list _and_ that the window's work mask is currently being
processed. This convinces __glutPutOnWorkList that this
window is on the work list still. */
window->workMask = GLUT_DUMMY_WORK;
/* Optimization: most of the time, the work to do is a
redisplay and not these other types of work. Check for
the following cases as a group to before checking each one
individually one by one. This saves about 25 MIPS
instructions in the common redisplay only case. */
if (workMask & (GLUT_EVENT_MASK_WORK | GLUT_DEVICE_MASK_WORK |
GLUT_CONFIGURE_WORK | GLUT_COLORMAP_WORK | GLUT_MAP_WORK)) {
#if !defined(_WIN32)
/* Be sure to set event mask BEFORE map window is done. */
if (workMask & GLUT_EVENT_MASK_WORK) {
long eventMask;
/* Make sure children are not propogating events this
window is selecting for. Be sure to do this before
enabling events on the children's parent. */
if (window->children) {
GLUTwindow *child = window->children;
unsigned long attribMask = CWDontPropagate;
XSetWindowAttributes wa;
wa.do_not_propagate_mask = window->eventMask & GLUT_DONT_PROPAGATE_FILTER_MASK;
if (window->eventMask & GLUT_HACK_STOP_PROPAGATE_MASK) {
wa.event_mask = child->eventMask | (window->eventMask & GLUT_HACK_STOP_PROPAGATE_MASK);
attribMask |= CWEventMask;
}
do {
XChangeWindowAttributes(__glutDisplay, child->win,
attribMask, &wa);
child = child->siblings;
} while (child);
}
eventMask = window->eventMask;
if (window->parent && window->parent->eventMask & GLUT_HACK_STOP_PROPAGATE_MASK)
eventMask |= (window->parent->eventMask & GLUT_HACK_STOP_PROPAGATE_MASK);
XSelectInput(__glutDisplay, window->win, eventMask);
if (window->overlay)
XSelectInput(__glutDisplay, window->overlay->win,
window->eventMask & GLUT_OVERLAY_EVENT_FILTER_MASK);
}
#endif /* !_WIN32 */
/* Be sure to set device mask BEFORE map window is done. */
if (workMask & GLUT_DEVICE_MASK_WORK) {
__glutUpdateInputDeviceMaskFunc(window);
}
/* Be sure to configure window BEFORE map window is done. */
if (workMask & GLUT_CONFIGURE_WORK) {
#if defined(_WIN32)
RECT changes;
POINT point;
UINT flags = SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOOWNERZORDER
| SWP_NOSENDCHANGING | SWP_NOSIZE | SWP_NOZORDER;
GetClientRect(window->win, &changes);
/* If this window is a toplevel window, translate the 0,0 client
coordinate into a screen coordinate for proper placement. */
if (!window->parent) {
point.x = 0;
point.y = 0;
ClientToScreen(window->win, &point);
changes.left = point.x;
changes.top = point.y;
}
if (window->desiredConfMask & (CWX | CWY)) {
changes.left = window->desiredX;
changes.top = window->desiredY;
flags &= ~SWP_NOMOVE;
}
if (window->desiredConfMask & (CWWidth | CWHeight)) {
changes.right = changes.left + window->desiredWidth;
changes.bottom = changes.top + window->desiredHeight;
flags &= ~SWP_NOSIZE;
/* XXX If overlay exists, resize the overlay here, ie.
if (window->overlay) ... */
}
if (window->desiredConfMask & CWStackMode) {
flags &= ~SWP_NOZORDER;
/* XXX Overlay support might require something special here. */
}
/* Adjust the window rectangle because Win32 thinks that the x, y,
width & height are the WHOLE window (including decorations),
whereas GLUT treats the x, y, width & height as only the CLIENT
area of the window. Only do this to top level windows
that are not in game mode (since game mode windows do
not have any decorations). */
if (!window->parent && window != __glutGameModeWindow) {
AdjustWindowRect(&changes,
WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS | WS_CLIPCHILDREN,
FALSE);
}
/* Do the repositioning, moving, and push/pop. */
SetWindowPos(window->win,
window->desiredStack == Above ? HWND_TOP : HWND_NOTOPMOST,
changes.left, changes.top,
changes.right - changes.left, changes.bottom - changes.top,
flags);
/* Zero out the mask. */
window->desiredConfMask = 0;
/* This hack causes the window to go back to the right position
when it is taken out of fullscreen mode. */
if (workMask & GLUT_FULL_SCREEN_WORK) {
window->desiredConfMask |= CWX | CWY;
window->desiredX = point.x;
window->desiredY = point.y;
}
#else /* !_WIN32 */
XWindowChanges changes;
changes.x = window->desiredX;
changes.y = window->desiredY;
if (window->desiredConfMask & (CWWidth | CWHeight)) {
changes.width = window->desiredWidth;
changes.height = window->desiredHeight;
if (window->overlay)
XResizeWindow(__glutDisplay, window->overlay->win,
window->desiredWidth, window->desiredHeight);
if (__glutMotifHints != None) {
if (workMask & GLUT_FULL_SCREEN_WORK) {
MotifWmHints hints;
hints.flags = MWM_HINTS_DECORATIONS;
hints.decorations = 0; /* Absolutely no
decorations. */
XChangeProperty(__glutDisplay, window->win,
__glutMotifHints, __glutMotifHints, 32,
PropModeReplace, (unsigned char *) &hints, 4);
if (workMask & GLUT_MAP_WORK) {
/* Handle case where glutFullScreen is called
before the first time that the window is
mapped. Some window managers will randomly or
interactively position the window the first
time it is mapped if the window's
WM_NORMAL_HINTS property does not request an
explicit position. We don't want any such
window manager interaction when going
fullscreen. Overwrite the WM_NORMAL_HINTS
property installed by glutCreateWindow's
XSetWMProperties property with one explicitly
requesting a fullscreen window. */
XSizeHints hints;
hints.flags = USPosition | USSize;
hints.x = 0;
hints.y = 0;
hints.width = window->desiredWidth;
hints.height = window->desiredHeight;
XSetWMNormalHints(__glutDisplay, window->win, &hints);
}
} else {
XDeleteProperty(__glutDisplay, window->win, __glutMotifHints);
}
}
}
if (window->desiredConfMask & CWStackMode) {
changes.stack_mode = window->desiredStack;
/* Do not let glutPushWindow push window beneath the
underlay. */
if (window->parent && window->parent->overlay
&& window->desiredStack == Below) {
changes.stack_mode = Above;
changes.sibling = window->parent->overlay->win;
window->desiredConfMask |= CWSibling;
}
}
XConfigureWindow(__glutDisplay, window->win,
window->desiredConfMask, &changes);
window->desiredConfMask = 0;
#endif
}
#if !defined(_WIN32)
/* Be sure to establish the colormaps BEFORE map window is
done. */
if (workMask & GLUT_COLORMAP_WORK) {
__glutEstablishColormapsProperty(window);
}
#endif
if (workMask & GLUT_MAP_WORK) {
switch (window->desiredMapState) {
case WithdrawnState:
if (window->parent) {
XUnmapWindow(__glutDisplay, window->win);
} else {
XWithdrawWindow(__glutDisplay, window->win,
__glutScreen);
}
window->shownState = 0;
break;
case NormalState:
XMapWindow(__glutDisplay, window->win);
window->shownState = 1;
break;
#ifdef _WIN32
case GameModeState: /* Not an Xlib value. */
ShowWindow(window->win, SW_SHOW);
window->shownState = 1;
break;
#endif
case IconicState:
XIconifyWindow(__glutDisplay, window->win, __glutScreen);
window->shownState = 0;
break;
}
}
}
if (workMask & (GLUT_REDISPLAY_WORK | GLUT_OVERLAY_REDISPLAY_WORK | GLUT_REPAIR_WORK | GLUT_OVERLAY_REPAIR_WORK)) {
if (window->forceReshape) {
/* Guarantee that before a display callback is generated
for a window, a reshape callback must be generated. */
__glutSetWindow(window);
window->reshape(window->width, window->height);
window->forceReshape = False;
/* Setting the redisplay bit on the first reshape is
necessary to make the "Mesa glXSwapBuffers to repair
damage" hack operate correctly. Without indicating a
redisplay is necessary, there's not an initial back
buffer render from which to blit from when damage
happens to the window. */
workMask |= GLUT_REDISPLAY_WORK;
}
/* The code below is more involved than otherwise necessary
because it is paranoid about the overlay or entire window
being removed or destroyed in the course of the callbacks.
Notice how the global __glutWindowDamaged is used to record
the layers' damage status. See the code in glutLayerGet for
how __glutWindowDamaged is used. The point is to not have to
update the "damaged" field after the callback since the
window (or overlay) may be destroyed (or removed) when the
callback returns. */
if (window->overlay && window->overlay->display) {
int num = window->num;
Window xid = window->overlay ? window->overlay->win : None;
/* If an overlay display callback is registered, we
differentiate between a redisplay needed for the
overlay and/or normal plane. If there is no overlay
display callback registered, we simply use the
standard display callback. */
if (workMask & (GLUT_REDISPLAY_WORK | GLUT_REPAIR_WORK)) {
if (__glutMesaSwapHackSupport) {
if (window->usedSwapBuffers) {
if ((workMask & (GLUT_REPAIR_WORK | GLUT_REDISPLAY_WORK)) == GLUT_REPAIR_WORK) {
SWAP_BUFFERS_WINDOW(window);
goto skippedDisplayCallback1;
}
}
}
/* Render to normal plane. */
#ifdef _WIN32
window->renderDc = window->hdc;
#endif
window->renderWin = window->win;
window->renderCtx = window->ctx;
__glutWindowDamaged = (workMask & GLUT_REPAIR_WORK);
__glutSetWindow(window);
window->usedSwapBuffers = 0;
window->display();
__glutWindowDamaged = 0;
skippedDisplayCallback1:;
}
if (workMask & (GLUT_OVERLAY_REDISPLAY_WORK | GLUT_OVERLAY_REPAIR_WORK)) {
window = __glutWindowList[num];
if (window && window->overlay &&
window->overlay->win == xid && window->overlay->display) {
/* Render to overlay. */
#ifdef _WIN32
window->renderDc = window->overlay->hdc;
#endif
window->renderWin = window->overlay->win;
window->renderCtx = window->overlay->ctx;
__glutWindowDamaged = (workMask & GLUT_OVERLAY_REPAIR_WORK);
__glutSetWindow(window);
window->overlay->display();
__glutWindowDamaged = 0;
} else {
/* Overlay may have since been destroyed or the
overlay callback may have been disabled during
normal display callback. */
}
}
} else {
if (__glutMesaSwapHackSupport) {
if (!window->overlay && window->usedSwapBuffers) {
if ((workMask & (GLUT_REPAIR_WORK | GLUT_REDISPLAY_WORK)) == GLUT_REPAIR_WORK) {
SWAP_BUFFERS_WINDOW(window);
goto skippedDisplayCallback2;
}
}
}
/* Render to normal plane (and possibly overlay). */
__glutWindowDamaged = (workMask & (GLUT_OVERLAY_REPAIR_WORK | GLUT_REPAIR_WORK));
__glutSetWindow(window);
window->usedSwapBuffers = 0;
window->display();
__glutWindowDamaged = 0;
skippedDisplayCallback2:;
}
}
/* Combine workMask with window->workMask to determine what
finish and debug work there is. */
workMask |= window->workMask;
if (workMask & GLUT_FINISH_WORK) {
/* Finish work makes sure a glFinish gets done to indirect
rendering contexts. Indirect contexts tend to have much
longer latency because lots of OpenGL extension requests
can queue up in the X protocol stream. __glutSetWindow
is where the finish works gets queued for indirect
contexts. */
__glutSetWindow(window);
glFinish();
}
if (workMask & GLUT_DEBUG_WORK) {
__glutSetWindow(window);
glutReportErrors();
}
/* Strip out dummy, finish, and debug work bits. */
window->workMask &= ~(GLUT_DUMMY_WORK | GLUT_FINISH_WORK | GLUT_DEBUG_WORK);
if (window->workMask) {
/* Leave on work list. */
return window;
} else {
/* Remove current window from work list. */
return window->prevWorkWin;
}
}
#ifndef _WIN32
static /* X11 implementations do not need this global. */
#endif
void
__glutProcessWindowWorkLists(void)
{
if (__glutWindowWorkList) {
GLUTwindow *remainder, *work;
work = __glutWindowWorkList;
__glutWindowWorkList = NULL;
if (work) {
remainder = processWindowWorkList(work);
if (remainder) {
*beforeEnd = __glutWindowWorkList;
__glutWindowWorkList = remainder;
}
}
}
}
/* CENTRY */
void GLUTAPIENTRY
glutMainLoop(void)
{
#if !defined(_WIN32)
if (!__glutDisplay)
__glutFatalUsage("main loop entered with out proper initialization.");
#endif
if (!__glutWindowListSize)
__glutFatalUsage(
"main loop entered with no windows created.");
for (;;) {
__glutProcessWindowWorkLists();
if (__glutIdleFunc || __glutWindowWorkList) {
idleWait();
} else {
if (__glutTimerList) {
waitForSomething();
} else {
processEventsAndTimeouts();
}
}
}
}
/* ENDCENTRY */
/* Copyright (c) Mark J. Kilgard, 1994, 1997. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#include <stdlib.h>
#include <string.h>
#include "glutint.h"
/* CENTRY */
int GLUTAPIENTRY
glutExtensionSupported(const char *extension)
{
static const GLubyte *extensions = NULL;
const GLubyte *start;
GLubyte *where, *terminator;
/* Extension names should not have spaces. */
where = (GLubyte *) strchr(extension, ' ');
if (where || *extension == '\0')
return 0;
if (!extensions) {
extensions = glGetString(GL_EXTENSIONS);
}
/* It takes a bit of care to be fool-proof about parsing the
OpenGL extensions string. Don't be fooled by sub-strings,
etc. */
start = extensions;
for (;;) {
/* If your application crashes in the strstr routine below,
you are probably calling glutExtensionSupported without
having a current window. Calling glGetString without
a current OpenGL context has unpredictable results.
Please fix your program. */
where = (GLubyte *) strstr((const char *) start, extension);
if (!where)
break;
terminator = where + strlen(extension);
if (where == start || *(where - 1) == ' ') {
if (*terminator == ' ' || *terminator == '\0') {
return 1;
}
}
start = terminator;
}
return 0;
}
struct name_address_pair {
const char *name;
const GLUTproc address;
};
static struct name_address_pair glut_functions[] = {
{ "glutInit", (const GLUTproc) glutInit },
{ "glutInitDisplayMode", (const GLUTproc) glutInitDisplayMode },
{ "glutInitDisplayString", (const GLUTproc) glutInitDisplayString },
{ "glutInitWindowPosition", (const GLUTproc) glutInitWindowPosition },
{ "glutInitWindowSize", (const GLUTproc) glutInitWindowSize },
{ "glutMainLoop", (const GLUTproc) glutMainLoop },
{ "glutCreateWindow", (const GLUTproc) glutCreateWindow },
{ "glutCreateSubWindow", (const GLUTproc) glutCreateSubWindow },
{ "glutDestroyWindow", (const GLUTproc) glutDestroyWindow },
{ "glutPostRedisplay", (const GLUTproc) glutPostRedisplay },
{ "glutPostWindowRedisplay", (const GLUTproc) glutPostWindowRedisplay },
{ "glutSwapBuffers", (const GLUTproc) glutSwapBuffers },
{ "glutGetWindow", (const GLUTproc) glutGetWindow },
{ "glutSetWindow", (const GLUTproc) glutSetWindow },
{ "glutSetWindowTitle", (const GLUTproc) glutSetWindowTitle },
{ "glutSetIconTitle", (const GLUTproc) glutSetIconTitle },
{ "glutPositionWindow", (const GLUTproc) glutPositionWindow },
{ "glutReshapeWindow", (const GLUTproc) glutReshapeWindow },
{ "glutPopWindow", (const GLUTproc) glutPopWindow },
{ "glutPushWindow", (const GLUTproc) glutPushWindow },
{ "glutIconifyWindow", (const GLUTproc) glutIconifyWindow },
{ "glutShowWindow", (const GLUTproc) glutShowWindow },
{ "glutHideWindow", (const GLUTproc) glutHideWindow },
{ "glutFullScreen", (const GLUTproc) glutFullScreen },
{ "glutSetCursor", (const GLUTproc) glutSetCursor },
{ "glutWarpPointer", (const GLUTproc) glutWarpPointer },
{ "glutEstablishOverlay", (const GLUTproc) glutEstablishOverlay },
{ "glutRemoveOverlay", (const GLUTproc) glutRemoveOverlay },
{ "glutUseLayer", (const GLUTproc) glutUseLayer },
{ "glutPostOverlayRedisplay", (const GLUTproc) glutPostOverlayRedisplay },
{ "glutPostWindowOverlayRedisplay", (const GLUTproc) glutPostWindowOverlayRedisplay },
{ "glutShowOverlay", (const GLUTproc) glutShowOverlay },
{ "glutHideOverlay", (const GLUTproc) glutHideOverlay },
{ "glutCreateMenu", (const GLUTproc) glutCreateMenu },
{ "glutDestroyMenu", (const GLUTproc) glutDestroyMenu },
{ "glutGetMenu", (const GLUTproc) glutGetMenu },
{ "glutSetMenu", (const GLUTproc) glutSetMenu },
{ "glutAddMenuEntry", (const GLUTproc) glutAddMenuEntry },
{ "glutAddSubMenu", (const GLUTproc) glutAddSubMenu },
{ "glutChangeToMenuEntry", (const GLUTproc) glutChangeToMenuEntry },
{ "glutChangeToSubMenu", (const GLUTproc) glutChangeToSubMenu },
{ "glutRemoveMenuItem", (const GLUTproc) glutRemoveMenuItem },
{ "glutAttachMenu", (const GLUTproc) glutAttachMenu },
{ "glutDetachMenu", (const GLUTproc) glutDetachMenu },
{ "glutDisplayFunc", (const GLUTproc) glutDisplayFunc },
{ "glutReshapeFunc", (const GLUTproc) glutReshapeFunc },
{ "glutKeyboardFunc", (const GLUTproc) glutKeyboardFunc },
{ "glutMouseFunc", (const GLUTproc) glutMouseFunc },
{ "glutMotionFunc", (const GLUTproc) glutMotionFunc },
{ "glutPassiveMotionFunc", (const GLUTproc) glutPassiveMotionFunc },
{ "glutEntryFunc", (const GLUTproc) glutEntryFunc },
{ "glutVisibilityFunc", (const GLUTproc) glutVisibilityFunc },
{ "glutIdleFunc", (const GLUTproc) glutIdleFunc },
{ "glutTimerFunc", (const GLUTproc) glutTimerFunc },
{ "glutMenuStateFunc", (const GLUTproc) glutMenuStateFunc },
{ "glutSpecialFunc", (const GLUTproc) glutSpecialFunc },
{ "glutSpaceballMotionFunc", (const GLUTproc) glutSpaceballMotionFunc },
{ "glutSpaceballRotateFunc", (const GLUTproc) glutSpaceballRotateFunc },
{ "glutSpaceballButtonFunc", (const GLUTproc) glutSpaceballButtonFunc },
{ "glutButtonBoxFunc", (const GLUTproc) glutButtonBoxFunc },
{ "glutDialsFunc", (const GLUTproc) glutDialsFunc },
{ "glutTabletMotionFunc", (const GLUTproc) glutTabletMotionFunc },
{ "glutTabletButtonFunc", (const GLUTproc) glutTabletButtonFunc },
{ "glutMenuStatusFunc", (const GLUTproc) glutMenuStatusFunc },
{ "glutOverlayDisplayFunc", (const GLUTproc) glutOverlayDisplayFunc },
{ "glutWindowStatusFunc", (const GLUTproc) glutWindowStatusFunc },
{ "glutKeyboardUpFunc", (const GLUTproc) glutKeyboardUpFunc },
{ "glutSpecialUpFunc", (const GLUTproc) glutSpecialUpFunc },
{ "glutJoystickFunc", (const GLUTproc) glutJoystickFunc },
{ "glutSetColor", (const GLUTproc) glutSetColor },
{ "glutGetColor", (const GLUTproc) glutGetColor },
{ "glutCopyColormap", (const GLUTproc) glutCopyColormap },
{ "glutGet", (const GLUTproc) glutGet },
{ "glutDeviceGet", (const GLUTproc) glutDeviceGet },
{ "glutExtensionSupported", (const GLUTproc) glutExtensionSupported },
{ "glutGetModifiers", (const GLUTproc) glutGetModifiers },
{ "glutLayerGet", (const GLUTproc) glutLayerGet },
{ "glutGetProcAddress", (const GLUTproc) glutGetProcAddress },
{ "glutBitmapCharacter", (const GLUTproc) glutBitmapCharacter },
{ "glutBitmapWidth", (const GLUTproc) glutBitmapWidth },
{ "glutStrokeCharacter", (const GLUTproc) glutStrokeCharacter },
{ "glutStrokeWidth", (const GLUTproc) glutStrokeWidth },
{ "glutBitmapLength", (const GLUTproc) glutBitmapLength },
{ "glutStrokeLength", (const GLUTproc) glutStrokeLength },
{ "glutWireSphere", (const GLUTproc) glutWireSphere },
{ "glutSolidSphere", (const GLUTproc) glutSolidSphere },
{ "glutWireCone", (const GLUTproc) glutWireCone },
{ "glutSolidCone", (const GLUTproc) glutSolidCone },
{ "glutWireCube", (const GLUTproc) glutWireCube },
{ "glutSolidCube", (const GLUTproc) glutSolidCube },
{ "glutWireTorus", (const GLUTproc) glutWireTorus },
{ "glutSolidTorus", (const GLUTproc) glutSolidTorus },
{ "glutWireDodecahedron", (const GLUTproc) glutWireDodecahedron },
{ "glutSolidDodecahedron", (const GLUTproc) glutSolidDodecahedron },
{ "glutWireTeapot", (const GLUTproc) glutWireTeapot },
{ "glutSolidTeapot", (const GLUTproc) glutSolidTeapot },
{ "glutWireOctahedron", (const GLUTproc) glutWireOctahedron },
{ "glutSolidOctahedron", (const GLUTproc) glutSolidOctahedron },
{ "glutWireTetrahedron", (const GLUTproc) glutWireTetrahedron },
{ "glutSolidTetrahedron", (const GLUTproc) glutSolidTetrahedron },
{ "glutWireIcosahedron", (const GLUTproc) glutWireIcosahedron },
{ "glutSolidIcosahedron", (const GLUTproc) glutSolidIcosahedron },
{ "glutVideoResizeGet", (const GLUTproc) glutVideoResizeGet },
{ "glutSetupVideoResizing", (const GLUTproc) glutSetupVideoResizing },
{ "glutStopVideoResizing", (const GLUTproc) glutStopVideoResizing },
{ "glutVideoResize", (const GLUTproc) glutVideoResize },
{ "glutVideoPan", (const GLUTproc) glutVideoPan },
{ "glutReportErrors", (const GLUTproc) glutReportErrors },
{ "glutIgnoreKeyRepeat", (const GLUTproc) glutIgnoreKeyRepeat },
{ "glutSetKeyRepeat", (const GLUTproc) glutSetKeyRepeat },
{ "glutForceJoystickFunc", (const GLUTproc) glutForceJoystickFunc },
{ "glutGameModeString", (const GLUTproc) glutGameModeString },
{ "glutEnterGameMode", (const GLUTproc) glutEnterGameMode },
{ "glutLeaveGameMode", (const GLUTproc) glutLeaveGameMode },
{ "glutGameModeGet", (const GLUTproc) glutGameModeGet },
{ NULL, NULL }
};
/* XXX This isn't an official GLUT function, yet */
GLUTproc GLUTAPIENTRY
glutGetProcAddress(const char *procName)
{
/* Try GLUT functions first */
int i;
for (i = 0; glut_functions[i].name; i++) {
if (strcmp(glut_functions[i].name, procName) == 0)
return glut_functions[i].address;
}
/* Try core GL functions */
#if defined(_WIN32)
return (GLUTproc) wglGetProcAddress((LPCSTR) procName);
#elif defined(GLX_ARB_get_proc_address)
return (GLUTproc) glXGetProcAddressARB((const GLubyte *) procName);
#else
return NULL;
#endif
}
/* ENDCENTRY */
/* Copyright (c) Mark J. Kilgard, 1998. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
/* I appreciate the guidance from William Mitchell
(mitchell@cam.nist.gov) in developing this friend interface
for use by the f90gl package. See ../../README.fortran */
#include "glutint.h"
/* FCB stands for Fortran CallBack. */
/* There is only one idleFunc, menuStateFunc, and menuStatusFunc, so they
can be saved in the wrappers for Fortran rather than the C structures. */
/* Set a Fortran callback function. */
void APIENTRY
__glutSetFCB(int which, GLUTproc func)
{
#ifdef SUPPORT_FORTRAN
switch (which) {
case GLUT_FCB_DISPLAY:
__glutCurrentWindow->fdisplay = (GLUTdisplayFCB) func;
break;
case GLUT_FCB_RESHAPE:
__glutCurrentWindow->freshape = (GLUTreshapeFCB) func;
break;
case GLUT_FCB_MOUSE:
__glutCurrentWindow->fmouse = (GLUTmouseFCB) func;
break;
case GLUT_FCB_MOTION:
__glutCurrentWindow->fmotion = (GLUTmotionFCB) func;
break;
case GLUT_FCB_PASSIVE:
__glutCurrentWindow->fpassive = (GLUTpassiveFCB) func;
break;
case GLUT_FCB_ENTRY:
__glutCurrentWindow->fentry = (GLUTentryFCB) func;
break;
case GLUT_FCB_KEYBOARD:
__glutCurrentWindow->fkeyboard = (GLUTkeyboardFCB) func;
break;
case GLUT_FCB_KEYBOARD_UP:
__glutCurrentWindow->fkeyboardUp = (GLUTkeyboardFCB) func;
break;
case GLUT_FCB_WINDOW_STATUS:
__glutCurrentWindow->fwindowStatus = (GLUTwindowStatusFCB) func;
break;
case GLUT_FCB_VISIBILITY:
__glutCurrentWindow->fvisibility = (GLUTvisibilityFCB) func;
break;
case GLUT_FCB_SPECIAL:
__glutCurrentWindow->fspecial = (GLUTspecialFCB) func;
break;
case GLUT_FCB_SPECIAL_UP:
__glutCurrentWindow->fspecialUp = (GLUTspecialFCB) func;
break;
case GLUT_FCB_BUTTON_BOX:
__glutCurrentWindow->fbuttonBox = (GLUTbuttonBoxFCB) func;
break;
case GLUT_FCB_DIALS:
__glutCurrentWindow->fdials = (GLUTdialsFCB) func;
break;
case GLUT_FCB_SPACE_MOTION:
__glutCurrentWindow->fspaceMotion = (GLUTspaceMotionFCB) func;
break;
case GLUT_FCB_SPACE_ROTATE:
__glutCurrentWindow->fspaceRotate = (GLUTspaceRotateFCB) func;
break;
case GLUT_FCB_SPACE_BUTTON:
__glutCurrentWindow->fspaceButton = (GLUTspaceButtonFCB) func;
break;
case GLUT_FCB_TABLET_MOTION:
__glutCurrentWindow->ftabletMotion = (GLUTtabletMotionFCB) func;
break;
case GLUT_FCB_TABLET_BUTTON:
__glutCurrentWindow->ftabletButton = (GLUTtabletButtonFCB) func;
break;
#ifdef _WIN32
case GLUT_FCB_JOYSTICK:
__glutCurrentWindow->fjoystick = (GLUTjoystickFCB) func;
break;
#endif
case GLUT_FCB_OVERLAY_DISPLAY:
__glutCurrentWindow->overlay->fdisplay = (GLUTdisplayFCB) func;
break;
case GLUT_FCB_SELECT:
__glutCurrentMenu->fselect = (GLUTselectFCB) func;
break;
case GLUT_FCB_TIMER:
__glutNewTimer->ffunc = (GLUTtimerFCB) func;
break;
}
#endif
}
/* Get a Fortran callback function. */
GLUTproc APIENTRY
__glutGetFCB(int which)
{
#ifdef SUPPORT_FORTRAN
switch (which) {
case GLUT_FCB_DISPLAY:
return __glutCurrentWindow->fdisplay;
case GLUT_FCB_RESHAPE:
return __glutCurrentWindow->freshape;
case GLUT_FCB_MOUSE:
return __glutCurrentWindow->fmouse;
case GLUT_FCB_MOTION:
return __glutCurrentWindow->fmotion;
case GLUT_FCB_PASSIVE:
return __glutCurrentWindow->fpassive;
case GLUT_FCB_ENTRY:
return __glutCurrentWindow->fentry;
case GLUT_FCB_KEYBOARD:
return __glutCurrentWindow->fkeyboard;
case GLUT_FCB_KEYBOARD_UP:
return __glutCurrentWindow->fkeyboardUp;
case GLUT_FCB_WINDOW_STATUS:
return __glutCurrentWindow->fwindowStatus;
case GLUT_FCB_VISIBILITY:
return __glutCurrentWindow->fvisibility;
case GLUT_FCB_SPECIAL:
return __glutCurrentWindow->fspecial;
case GLUT_FCB_SPECIAL_UP:
return __glutCurrentWindow->fspecialUp;
case GLUT_FCB_BUTTON_BOX:
return __glutCurrentWindow->fbuttonBox;
case GLUT_FCB_DIALS:
return __glutCurrentWindow->fdials;
case GLUT_FCB_SPACE_MOTION:
return __glutCurrentWindow->fspaceMotion;
case GLUT_FCB_SPACE_ROTATE:
return __glutCurrentWindow->fspaceRotate;
case GLUT_FCB_SPACE_BUTTON:
return __glutCurrentWindow->fspaceButton;
case GLUT_FCB_TABLET_MOTION:
return __glutCurrentWindow->ftabletMotion;
case GLUT_FCB_TABLET_BUTTON:
return __glutCurrentWindow->ftabletButton;
case GLUT_FCB_JOYSTICK:
#ifdef _WIN32
return __glutCurrentWindow->fjoystick;
#else
return NULL;
#endif
case GLUT_FCB_OVERLAY_DISPLAY:
return __glutCurrentWindow->overlay->fdisplay;
case GLUT_FCB_SELECT:
return __glutCurrentMenu->fselect;
case GLUT_FCB_TIMER:
return __glutTimerList ? __glutTimerList->ffunc : NULL;
default:
return NULL;
}
#else
return NULL;
#endif
}
/* Copyright (c) Mark J. Kilgard, 1995, 1998. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#ifdef __VMS
#include <GL/vms_x_fix.h>
#endif
#include <stdio.h> /* SunOS multithreaded assert() needs <stdio.h>. Lame. */
#include <assert.h>
#if !defined(_WIN32)
#include <X11/Xlib.h>
#include <X11/Xatom.h>
#endif
/* SGI optimization introduced in IRIX 6.3 to avoid X server
round trips for interning common X atoms. */
#if defined(_SGI_EXTRA_PREDEFINES) && !defined(NO_FAST_ATOMS)
#include <X11/SGIFastAtom.h>
#else
#define XSGIFastInternAtom(dpy,string,fast_name,how) XInternAtom(dpy,string,how)
#endif
#include "glutint.h"
/* CENTRY */
void GLUTAPIENTRY
glutFullScreen(void)
{
assert(!__glutCurrentWindow->parent);
IGNORE_IN_GAME_MODE();
#if !defined(_WIN32)
if (__glutMotifHints == None) {
__glutMotifHints = XSGIFastInternAtom(__glutDisplay, "_MOTIF_WM_HINTS",
SGI_XA__MOTIF_WM_HINTS, 0);
if (__glutMotifHints == None) {
__glutWarning("Could not intern X atom for _MOTIF_WM_HINTS.");
}
}
#endif
__glutCurrentWindow->desiredX = 0;
__glutCurrentWindow->desiredY = 0;
__glutCurrentWindow->desiredWidth = __glutScreenWidth;
__glutCurrentWindow->desiredHeight = __glutScreenHeight;
__glutCurrentWindow->desiredConfMask |= CWX | CWY | CWWidth | CWHeight;
__glutPutOnWorkList(__glutCurrentWindow,
GLUT_CONFIGURE_WORK | GLUT_FULL_SCREEN_WORK);
}
/* ENDCENTRY */
/* Copyright (c) Mark J. Kilgard, 1998. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#ifdef __VMS
#include <GL/vms_x_fix.h>
#endif
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "glutint.h"
#ifndef _WIN32
#include <X11/Xlib.h>
#include <X11/Xatom.h>
/* SGI optimization introduced in IRIX 6.3 to avoid X server
round trips for interning common X atoms. */
#if defined(_SGI_EXTRA_PREDEFINES) && !defined(NO_FAST_ATOMS)
#include <X11/SGIFastAtom.h>
#else
#define XSGIFastInternAtom(dpy,string,fast_name,how) XInternAtom(dpy,string,how)
#endif
#endif /* not _WIN32 */
int __glutDisplaySettingsChanged = 0;
static DisplayMode *dmodes, *currentDm = NULL;
static int ndmodes = -1;
GLUTwindow *__glutGameModeWindow = NULL;
#ifdef TEST
static char *compstr[] =
{
"none", "=", "!=", "<=", ">=", ">", "<", "~"
};
static char *capstr[] =
{
"width", "height", "bpp", "hertz", "num"
};
#endif
void
__glutCloseDownGameMode(void)
{
if (__glutDisplaySettingsChanged) {
#ifdef _WIN32
/* Assumes that display settings have been changed, that
is __glutDisplaySettingsChanged is true. */
ChangeDisplaySettings(NULL, 0);
#endif
__glutDisplaySettingsChanged = 0;
}
__glutGameModeWindow = NULL;
}
void GLUTAPIENTRY
glutLeaveGameMode(void)
{
if (__glutGameModeWindow == NULL) {
__glutWarning("not in game mode so cannot leave game mode");
return;
}
__glutDestroyWindow(__glutGameModeWindow,
__glutGameModeWindow);
XFlush(__glutDisplay);
__glutGameModeWindow = NULL;
}
#ifdef _WIN32
/* Same values as from MSDN's SetDisp.c example. */
#define MIN_WIDTH 400
#define MIN_FREQUENCY 60
static void
initGameModeSupport(void)
{
DEVMODE dm;
DWORD mode;
int i;
if (ndmodes >= 0) {
/* ndmodes is initially -1 to indicate no
dmodes allocated yet. */
return;
}
/* Determine how many display modes there are. */
ndmodes = 0;
mode = 0;
while (EnumDisplaySettings(NULL, mode, &dm)) {
if (dm.dmPelsWidth >= MIN_WIDTH &&
(dm.dmDisplayFrequency == 0 ||
dm.dmDisplayFrequency >= MIN_FREQUENCY)) {
ndmodes++;
}
mode++;
}
/* Allocate memory for a list of all the display modes. */
dmodes = (DisplayMode*)
malloc(ndmodes * sizeof(DisplayMode));
/* Now that we know how many display modes to expect,
enumerate them again and save the information in
the list we allocated above. */
i = 0;
mode = 0;
while (EnumDisplaySettings(NULL, mode, &dm)) {
/* Try to reject any display settings that seem unplausible. */
if (dm.dmPelsWidth >= MIN_WIDTH &&
(dm.dmDisplayFrequency == 0 ||
dm.dmDisplayFrequency >= MIN_FREQUENCY)) {
dmodes[i].devmode = dm;
dmodes[i].valid = 1; /* XXX Not used for now. */
dmodes[i].cap[DM_WIDTH] = dm.dmPelsWidth;
dmodes[i].cap[DM_HEIGHT] = dm.dmPelsHeight;
dmodes[i].cap[DM_PIXEL_DEPTH] = dm.dmBitsPerPel;
if (dm.dmDisplayFrequency == 0) {
/* Guess a reasonable guess. */
/* Lame Windows 95 version of EnumDisplaySettings. */
dmodes[i].cap[DM_HERTZ] = 60;
} else {
dmodes[i].cap[DM_HERTZ] = dm.dmDisplayFrequency;
}
i++;
}
mode++;
}
assert(i == ndmodes);
}
#else
/* X Windows version of initGameModeSupport. */
static void
initGameModeSupport(void)
{
if (ndmodes >= 0) {
/* ndmodes is initially -1 to indicate no
dmodes allocated yet. */
return;
}
/* Determine how many display modes there are. */
ndmodes = 0;
}
#endif
/* This routine is based on similiar code in glut_dstr.c */
static DisplayMode *
findMatch(DisplayMode * dmodes, int ndmodes,
Criterion * criteria, int ncriteria)
{
DisplayMode *found;
int *bestScore, *thisScore;
int i, j, numok, result = 0, worse, better;
found = NULL;
numok = 1; /* "num" capability is indexed from 1,
not 0. */
/* XXX alloca canidate. */
bestScore = (int *) malloc(ncriteria * sizeof(int));
if (!bestScore) {
__glutFatalError("out of memory.");
}
for (j = 0; j < ncriteria; j++) {
/* Very negative number. */
bestScore[j] = -32768;
}
/* XXX alloca canidate. */
thisScore = (int *) malloc(ncriteria * sizeof(int));
if (!thisScore) {
__glutFatalError("out of memory.");
}
for (i = 0; i < ndmodes; i++) {
if (dmodes[i].valid) {
worse = 0;
better = 0;
for (j = 0; j < ncriteria; j++) {
int cap, cvalue, dvalue;
cap = criteria[j].capability;
cvalue = criteria[j].value;
if (cap == NUM) {
dvalue = numok;
} else {
dvalue = dmodes[i].cap[cap];
}
#ifdef TEST
if (verbose)
printf(" %s %s %d to %d\n",
capstr[cap], compstr[criteria[j].comparison], cvalue, dvalue);
#endif
switch (criteria[j].comparison) {
case EQ:
result = cvalue == dvalue;
thisScore[j] = 1;
break;
case NEQ:
result = cvalue != dvalue;
thisScore[j] = 1;
break;
case LT:
result = dvalue < cvalue;
thisScore[j] = dvalue - cvalue;
break;
case GT:
result = dvalue > cvalue;
thisScore[j] = dvalue - cvalue;
break;
case LTE:
result = dvalue <= cvalue;
thisScore[j] = dvalue - cvalue;
break;
case GTE:
result = (dvalue >= cvalue);
thisScore[j] = dvalue - cvalue;
break;
case MIN:
result = dvalue >= cvalue;
thisScore[j] = cvalue - dvalue;
break;
}
#ifdef TEST
if (verbose)
printf(" result=%d score=%d bestScore=%d\n", result, thisScore[j], bestScore[j]);
#endif
if (result) {
if (better || thisScore[j] > bestScore[j]) {
better = 1;
} else if (thisScore[j] == bestScore[j]) {
/* Keep looking. */
} else {
goto nextDM;
}
} else {
if (cap == NUM) {
worse = 1;
} else {
goto nextDM;
}
}
}
if (better && !worse) {
found = &dmodes[i];
for (j = 0; j < ncriteria; j++) {
bestScore[j] = thisScore[j];
}
}
numok++;
nextDM:;
}
}
free(bestScore);
free(thisScore);
return found;
}
/**
* Parses strings in the form of:
* 800x600
* 800x600:16
* 800x600@60
* 800x600:16@60
* @60
* :16
* :16@60
* NOTE that @ before : is not parsed.
*/
static int
specialCaseParse(char *word, Criterion * criterion, int mask)
{
char *xstr, *response;
int got;
int width, height, bpp, hertz;
switch(word[0]) {
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
/* The WWWxHHH case. */
if (mask & (1 << DM_WIDTH)) {
return -1;
}
xstr = strpbrk(&word[1], "x");
if (xstr) {
width = (int) strtol(word, &response, 0);
if (response == word || response[0] != 'x') {
/* Not a valid number OR needs to be followed by 'x'. */
return -1;
}
height = (int) strtol(&xstr[1], &response, 0);
if (response == &xstr[1]) {
/* Not a valid number. */
return -1;
}
criterion[0].capability = DM_WIDTH;
criterion[0].comparison = EQ;
criterion[0].value = width;
criterion[1].capability = DM_HEIGHT;
criterion[1].comparison = EQ;
criterion[1].value = height;
got = specialCaseParse(response,
&criterion[2], 1 << DM_WIDTH);
if (got >= 0) {
return got + 2;
} else {
return -1;
}
}
return -1;
case ':':
/* The :BPP case. */
if (mask & (1 << DM_PIXEL_DEPTH)) {
return -1;
}
bpp = (int) strtol(&word[1], &response, 0);
if (response == &word[1]) {
/* Not a valid number. */
return -1;
}
criterion[0].capability = DM_PIXEL_DEPTH;
criterion[0].comparison = EQ;
criterion[0].value = bpp;
got = specialCaseParse(response,
&criterion[1], 1 << DM_WIDTH | 1 << DM_PIXEL_DEPTH);
if (got >= 0) {
return got + 1;
} else {
return -1;
}
case '@':
/* The @HZ case. */
if (mask & (1 << DM_HERTZ)) {
return -1;
}
hertz = (int) strtol(&word[1], &response, 0);
if (response == &word[1]) {
/* Not a valid number. */
return -1;
}
criterion[0].capability = DM_HERTZ;
criterion[0].comparison = EQ;
criterion[0].value = hertz;
got = specialCaseParse(response,
&criterion[1], ~DM_HERTZ);
if (got >= 0) {
return got + 1;
} else {
return -1;
}
case '\0':
return 0;
}
return -1;
}
/* This routine is based on similiar code in glut_dstr.c */
static int
parseCriteria(char *word, Criterion * criterion)
{
char *cstr, *vstr, *response;
int comparator, value = 0;
cstr = strpbrk(word, "=><!~");
if (cstr) {
switch (cstr[0]) {
case '=':
comparator = EQ;
vstr = &cstr[1];
break;
case '~':
comparator = MIN;
vstr = &cstr[1];
break;
case '>':
if (cstr[1] == '=') {
comparator = GTE;
vstr = &cstr[2];
} else {
comparator = GT;
vstr = &cstr[1];
}
break;
case '<':
if (cstr[1] == '=') {
comparator = LTE;
vstr = &cstr[2];
} else {
comparator = LT;
vstr = &cstr[1];
}
break;
case '!':
if (cstr[1] == '=') {
comparator = NEQ;
vstr = &cstr[2];
} else {
return -1;
}
break;
default:
return -1;
}
value = (int) strtol(vstr, &response, 0);
if (response == vstr) {
/* Not a valid number. */
return -1;
}
*cstr = '\0';
} else {
comparator = NONE;
}
switch (word[0]) {
case 'b':
if (!strcmp(word, "bpp")) {
criterion[0].capability = DM_PIXEL_DEPTH;
if (comparator == NONE) {
return -1;
} else {
criterion[0].comparison = comparator;
criterion[0].value = value;
return 1;
}
}
return -1;
case 'h':
if (!strcmp(word, "height")) {
criterion[0].capability = DM_HEIGHT;
if (comparator == NONE) {
return -1;
} else {
criterion[0].comparison = comparator;
criterion[0].value = value;
return 1;
}
}
if (!strcmp(word, "hertz")) {
criterion[0].capability = DM_HERTZ;
if (comparator == NONE) {
return -1;
} else {
criterion[0].comparison = comparator;
criterion[0].value = value;
return 1;
}
}
return -1;
case 'n':
if (!strcmp(word, "num")) {
criterion[0].capability = DM_NUM;
if (comparator == NONE) {
return -1;
} else {
criterion[0].comparison = comparator;
criterion[0].value = value;
return 1;
}
}
return -1;
case 'w':
if (!strcmp(word, "width")) {
criterion[0].capability = DM_WIDTH;
if (comparator == NONE) {
return -1;
} else {
criterion[0].comparison = comparator;
criterion[0].value = value;
return 1;
}
}
return -1;
}
if (comparator == NONE) {
return specialCaseParse(word, criterion, 0);
}
return -1;
}
/* This routine is based on similiar code in glut_dstr.c */
static Criterion *
parseDisplayString(const char *display, int *ncriteria)
{
Criterion *criteria = NULL;
int n, parsed;
char *copy, *word;
copy = __glutStrdup(display);
/* Attempt to estimate how many criteria entries should be
needed. */
n = 0;
word = strtok(copy, " \t");
while (word) {
n++;
word = strtok(NULL, " \t");
}
/* Allocate number of words of criteria. A word
could contain as many as four criteria in the
worst case. Example: 800x600:16@60 */
criteria = (Criterion *) malloc(4 * n * sizeof(Criterion));
if (!criteria) {
__glutFatalError("out of memory.");
}
/* Re-copy the copy of the display string. */
strcpy(copy, display);
n = 0;
word = strtok(copy, " \t");
while (word) {
parsed = parseCriteria(word, &criteria[n]);
if (parsed >= 0) {
n += parsed;
} else {
__glutWarning("Unrecognized game mode string word: %s (ignoring)\n", word);
}
word = strtok(NULL, " \t");
}
free(copy);
*ncriteria = n;
return criteria;
}
void GLUTAPIENTRY
glutGameModeString(const char *string)
{
Criterion *criteria;
int ncriteria;
initGameModeSupport();
criteria = parseDisplayString(string, &ncriteria);
currentDm = findMatch(dmodes, ndmodes, criteria, ncriteria);
free(criteria);
}
int GLUTAPIENTRY
glutEnterGameMode(void)
{
GLUTwindow *window;
int width, height;
Window win;
if (__glutMappedMenu) {
__glutFatalUsage("entering game mode not allowed while menus in use");
}
if (__glutGameModeWindow) {
/* Already in game mode, so blow away game mode
window so apps can change resolutions. */
window = __glutGameModeWindow;
/* Setting the game mode window to NULL tricks
the window destroy code into not undoing the
screen display change since we plan on immediately
doing another mode change. */
__glutGameModeWindow = NULL;
__glutDestroyWindow(window, window);
}
/* Assume default screen size until we find out if we
can actually change the display settings. */
width = __glutScreenWidth;
height = __glutScreenHeight;
if (currentDm) {
#ifdef _WIN32
LONG status;
static int registered = 0;
status = ChangeDisplaySettings(¤tDm->devmode,
CDS_FULLSCREEN);
if (status == DISP_CHANGE_SUCCESSFUL) {
__glutDisplaySettingsChanged = 1;
width = currentDm->cap[DM_WIDTH];
height = currentDm->cap[DM_HEIGHT];
if (!registered) {
atexit(__glutCloseDownGameMode);
registered = 1;
}
} else {
/* Switch back to default resolution. */
ChangeDisplaySettings(NULL, 0);
}
#endif
}
window = __glutCreateWindow(NULL, 0, 0,
width, height, /* game mode */ 1);
win = window->win;
#if !defined(_WIN32)
if (__glutMotifHints == None) {
__glutMotifHints = XSGIFastInternAtom(__glutDisplay, "_MOTIF_WM_HINTS",
SGI_XA__MOTIF_WM_HINTS, 0);
if (__glutMotifHints == None) {
__glutWarning("Could not intern X atom for _MOTIF_WM_HINTS.");
}
}
/* Game mode window is a toplevel window. */
XSetWMProtocols(__glutDisplay, win, &__glutWMDeleteWindow, 1);
#endif
/* Schedule the fullscreen property to be added and to
make sure the window is configured right. Win32
doesn't need this. */
window->desiredX = 0;
window->desiredY = 0;
window->desiredWidth = width;
window->desiredHeight = height;
window->desiredConfMask |= CWX | CWY | CWWidth | CWHeight;
#ifdef _WIN32
/* Win32 does not want to use GLUT_FULL_SCREEN_WORK
for game mode because we need to be maximizing
the window in game mode, not just sizing it to
take up the full screen. The Win32-ness of game
mode happens when you pass 1 in the gameMode parameter
to __glutCreateWindow above. A gameMode of creates
a WS_POPUP window, not a standard WS_OVERLAPPEDWINDOW
window. WS_POPUP ensures the taskbar is hidden. */
__glutPutOnWorkList(window,
GLUT_CONFIGURE_WORK);
#else
__glutPutOnWorkList(window,
GLUT_CONFIGURE_WORK | GLUT_FULL_SCREEN_WORK);
#endif
__glutGameModeWindow = window;
return window->num + 1;
}
int GLUTAPIENTRY
glutGameModeGet(GLenum mode)
{
switch (mode) {
case GLUT_GAME_MODE_ACTIVE:
return __glutGameModeWindow != NULL;
case GLUT_GAME_MODE_POSSIBLE:
return currentDm != NULL;
case GLUT_GAME_MODE_WIDTH:
return currentDm ? currentDm->cap[DM_WIDTH] : -1;
case GLUT_GAME_MODE_HEIGHT:
return currentDm ? currentDm->cap[DM_HEIGHT] : -1;
case GLUT_GAME_MODE_PIXEL_DEPTH:
return currentDm ? currentDm->cap[DM_PIXEL_DEPTH] : -1;
case GLUT_GAME_MODE_REFRESH_RATE:
return currentDm ? currentDm->cap[DM_HERTZ] : -1;
case GLUT_GAME_MODE_DISPLAY_CHANGED:
return __glutDisplaySettingsChanged;
default:
return -1;
}
}
/* Copyright (c) Mark J. Kilgard, 1994, 1997, 1998. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#include <assert.h>
#include <stdlib.h> /* SunOS 4 needs NULL defined for GETTIMEOFDAY macro. */
#include "glutint.h"
/* CENTRY */
int GLUTAPIENTRY
glutGet(GLenum param)
{
Window win, root;
int x, y, value;
unsigned int width, height, border, depth;
switch (param) {
case GLUT_INIT_WINDOW_X:
return __glutInitX;
case GLUT_INIT_WINDOW_Y:
return __glutInitY;
case GLUT_INIT_WINDOW_WIDTH:
return __glutInitWidth;
case GLUT_INIT_WINDOW_HEIGHT:
return __glutInitHeight;
case GLUT_INIT_DISPLAY_MODE:
return __glutDisplayMode;
case GLUT_WINDOW_X:
XTranslateCoordinates(__glutDisplay, __glutCurrentWindow->win,
__glutRoot, 0, 0, &x, &y, &win);
return x;
case GLUT_WINDOW_Y:
XTranslateCoordinates(__glutDisplay, __glutCurrentWindow->win,
__glutRoot, 0, 0, &x, &y, &win);
return y;
case GLUT_WINDOW_WIDTH:
if (!__glutCurrentWindow->reshape) {
XGetGeometry(__glutDisplay, __glutCurrentWindow->win,
&root, &x, &y,
&width, &height, &border, &depth);
return width;
}
return __glutCurrentWindow->width;
case GLUT_WINDOW_HEIGHT:
if (!__glutCurrentWindow->reshape) {
XGetGeometry(__glutDisplay, __glutCurrentWindow->win,
&root, &x, &y,
&width, &height, &border, &depth);
return height;
}
return __glutCurrentWindow->height;
#define GET_CONFIG(attrib) { \
if (__glutCurrentWindow->renderWin == __glutCurrentWindow->win) { \
glXGetConfig(__glutDisplay, __glutCurrentWindow->vis, \
attrib, &value); \
} else { \
glXGetConfig(__glutDisplay, __glutCurrentWindow->overlay->vis, \
attrib, &value); \
} \
}
case GLUT_WINDOW_BUFFER_SIZE:
GET_CONFIG(GLX_BUFFER_SIZE);
return value;
case GLUT_WINDOW_STENCIL_SIZE:
GET_CONFIG(GLX_STENCIL_SIZE);
return value;
case GLUT_WINDOW_DEPTH_SIZE:
GET_CONFIG(GLX_DEPTH_SIZE);
return value;
case GLUT_WINDOW_RED_SIZE:
GET_CONFIG(GLX_RED_SIZE);
return value;
case GLUT_WINDOW_GREEN_SIZE:
GET_CONFIG(GLX_GREEN_SIZE);
return value;
case GLUT_WINDOW_BLUE_SIZE:
GET_CONFIG(GLX_BLUE_SIZE);
return value;
case GLUT_WINDOW_ALPHA_SIZE:
GET_CONFIG(GLX_ALPHA_SIZE);
return value;
case GLUT_WINDOW_ACCUM_RED_SIZE:
GET_CONFIG(GLX_ACCUM_RED_SIZE);
return value;
case GLUT_WINDOW_ACCUM_GREEN_SIZE:
GET_CONFIG(GLX_ACCUM_GREEN_SIZE);
return value;
case GLUT_WINDOW_ACCUM_BLUE_SIZE:
GET_CONFIG(GLX_ACCUM_BLUE_SIZE);
return value;
case GLUT_WINDOW_ACCUM_ALPHA_SIZE:
GET_CONFIG(GLX_ACCUM_ALPHA_SIZE);
return value;
case GLUT_WINDOW_DOUBLEBUFFER:
GET_CONFIG(GLX_DOUBLEBUFFER);
return value;
case GLUT_WINDOW_RGBA:
GET_CONFIG(GLX_RGBA);
return value;
case GLUT_WINDOW_COLORMAP_SIZE:
GET_CONFIG(GLX_RGBA);
if (value) {
return 0;
} else {
#if defined(_WIN32)
/* KLUDGE: we always assume 256 colors in CI mode on
Win32 */
return 256;
#else
if (__glutCurrentWindow->renderWin == __glutCurrentWindow->win) {
return __glutCurrentWindow->vis->visual->map_entries;
} else {
return __glutCurrentWindow->overlay->vis->visual->map_entries;
}
#endif /* _WIN32 */
}
case GLUT_WINDOW_PARENT:
return __glutCurrentWindow->parent ?
__glutCurrentWindow->parent->num + 1 : 0;
case GLUT_WINDOW_NUM_CHILDREN:
{
int num = 0;
GLUTwindow *children = __glutCurrentWindow->children;
while (children) {
num++;
children = children->siblings;
}
return num;
}
case GLUT_WINDOW_NUM_SAMPLES:
#if defined(GLX_VERSION_1_1) && defined(GLX_SGIS_multisample)
if (__glutIsSupportedByGLX("GLX_SGIS_multisample")) {
GET_CONFIG(GLX_SAMPLES_SGIS);
return value;
} else {
return 0;
}
#else
/* Independent of GLX server support, multisampling not
supported by GLX client-side. */
return 0;
#endif
case GLUT_WINDOW_STEREO:
GET_CONFIG(GLX_STEREO);
return value;
case GLUT_WINDOW_CURSOR:
return __glutCurrentWindow->cursor;
case GLUT_SCREEN_WIDTH:
return DisplayWidth(__glutDisplay, __glutScreen);
case GLUT_SCREEN_HEIGHT:
return DisplayHeight(__glutDisplay, __glutScreen);
case GLUT_SCREEN_WIDTH_MM:
return DisplayWidthMM(__glutDisplay, __glutScreen);
case GLUT_SCREEN_HEIGHT_MM:
return DisplayHeightMM(__glutDisplay, __glutScreen);
case GLUT_MENU_NUM_ITEMS:
return __glutCurrentMenu->num;
case GLUT_DISPLAY_MODE_POSSIBLE:
{
XVisualInfo *vi;
Bool dummy, visAlloced;
void *fbc;
#if defined(_WIN32)
/* Our fake glXChooseVisual (which is called by
__glutDetermineVisual) needs an HDC to work with, so grab one
from the "root" window. */
XHDC = GetDC(GetDesktopWindow());
#endif
vi = __glutDetermineWindowVisual(&dummy, &visAlloced, &fbc);
#if defined(_WIN32)
ReleaseDC(GetDesktopWindow(), XHDC);
#endif
if (vi) {
if (visAlloced)
XFree(vi);
return 1;
}
return 0;
}
case GLUT_ELAPSED_TIME:
{
#ifdef OLD_VMS
struct timeval6 elapsed, beginning, now;
#else
struct timeval elapsed, beginning, now;
#endif
__glutInitTime(&beginning);
GETTIMEOFDAY(&now);
TIMEDELTA(elapsed, now, beginning);
/* Return elapsed milliseconds. */
#if defined(__vms) && ( __VMS_VER < 70000000 )
return (int) (elapsed.val / TICKS_PER_MILLISECOND);
#else
return (int) ((elapsed.tv_sec * 1000) + (elapsed.tv_usec / 1000));
#endif
}
case GLUT_WINDOW_FORMAT_ID:
#if defined(_WIN32)
return GetPixelFormat(__glutCurrentWindow->hdc);
#else
if (__glutCurrentWindow->renderWin == __glutCurrentWindow->win) {
return (int) __glutCurrentWindow->vis->visualid;
} else {
return (int) __glutCurrentWindow->overlay->vis->visualid;
}
#endif
default:
__glutWarning("invalid glutGet parameter: %d", param);
return -1;
}
}
/* ENDCENTRY */
/* Copyright (c) Mark J. Kilgard, 1997. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#include <stdlib.h>
#include <string.h>
#include "glutint.h"
#if defined(GLX_VERSION_1_1)
int
__glutIsSupportedByGLX(char *extension)
{
static const char *extensions = NULL;
const char *start;
char *where, *terminator;
int major, minor;
glXQueryVersion(__glutDisplay, &major, &minor);
/* Be careful not to call glXQueryExtensionsString if it
looks like the server doesn't support GLX 1.1.
Unfortunately, the original GLX 1.0 didn't have the notion
of GLX extensions. */
if ((major == 1 && minor >= 1) || (major > 1)) {
if (!extensions)
extensions = glXQueryExtensionsString(__glutDisplay, __glutScreen);
/* It takes a bit of care to be fool-proof about parsing
the GLX extensions string. Don't be fooled by
sub-strings, etc. */
start = extensions;
for (;;) {
where = strstr(start, extension);
if (!where)
return 0;
terminator = where + strlen(extension);
if (where == start || *(where - 1) == ' ') {
if (*terminator == ' ' || *terminator == '\0') {
return 1;
}
}
start = terminator;
}
}
return 0;
}
#endif
/*
* Wrapping of GLX extension functions.
* Technically, we should do a runtime test to see if we've got the
* glXGetProcAddressARB() function. I think GLX_ARB_get_proc_address
* is pretty widely supported now and any system that has
* GLX_ARB_get_proc_address defined in its header files should be OK
* at runtime.
*/
int
__glut_glXBindChannelToWindowSGIX(Display *dpy, int screen,
int channel, Window window)
{
#ifdef GLX_ARB_get_proc_address
typedef int (*glXBindChannelToWindowSGIX_t) (Display *, int, int, Window);
static glXBindChannelToWindowSGIX_t glXBindChannelToWindowSGIX_ptr = NULL;
if (!glXBindChannelToWindowSGIX_ptr) {
glXBindChannelToWindowSGIX_ptr = (glXBindChannelToWindowSGIX_t)
glXGetProcAddressARB((const GLubyte *) "glXBindChannelToWindowSGIX");
}
if (glXBindChannelToWindowSGIX_ptr)
return (*glXBindChannelToWindowSGIX_ptr)(dpy, screen, channel, window);
else
return 0;
#elif defined(GLX_SGIX_video_resize)
return glXBindChannelToWindowSGIX(dpy, screen, channel, window);
#else
return 0;
#endif
}
int
__glut_glXChannelRectSGIX(Display *dpy, int screen, int channel,
int x, int y, int w, int h)
{
#ifdef GLX_ARB_get_proc_address
typedef int (*glXChannelRectSGIX_t)(Display *, int, int, int, int, int, int);
static glXChannelRectSGIX_t glXChannelRectSGIX_ptr = NULL;
if (!glXChannelRectSGIX_ptr) {
glXChannelRectSGIX_ptr = (glXChannelRectSGIX_t)
glXGetProcAddressARB((const GLubyte *) "glXChannelRectSGIX");
}
if (glXChannelRectSGIX_ptr)
return (*glXChannelRectSGIX_ptr)(dpy, screen, channel, x, y, w, h);
else
return 0;
#elif defined(GLX_SGIX_video_resize)
return glXChannelRectSGIX(dpy, screen, channel, x, y, w, h);
#else
return 0;
#endif
}
int
__glut_glXQueryChannelRectSGIX(Display *dpy, int screen, int channel,
int *x, int *y, int *w, int *h)
{
#ifdef GLX_ARB_get_proc_address
typedef int (*glXQueryChannelRectSGIX_t)(Display *, int, int,
int *, int *, int *, int *);
static glXQueryChannelRectSGIX_t glXQueryChannelRectSGIX_ptr = NULL;
if (!glXQueryChannelRectSGIX_ptr) {
glXQueryChannelRectSGIX_ptr = (glXQueryChannelRectSGIX_t)
glXGetProcAddressARB((const GLubyte *) "glXQueryChannelRectSGIX");
}
if (glXQueryChannelRectSGIX_ptr)
return (*glXQueryChannelRectSGIX_ptr)(dpy, screen, channel, x, y, w, h);
else
return 0;
#elif defined(GLX_SGIX_video_resize)
return glXQueryChannelRectSGIX(dpy, screen, channel, x, y, w, h);
#else
return 0;
#endif
}
int
__glut_glXQueryChannelDeltasSGIX(Display *dpy, int screen, int channel,
int *dx, int *dy, int *dw, int *dh)
{
#ifdef GLX_ARB_get_proc_address
typedef int (*glXQueryChannelDeltasSGIX_t)(Display *, int, int,
int *, int *, int *, int *);
static glXQueryChannelDeltasSGIX_t glXQueryChannelDeltasSGIX_ptr = NULL;
if (!glXQueryChannelDeltasSGIX_ptr) {
glXQueryChannelDeltasSGIX_ptr = (glXQueryChannelDeltasSGIX_t)
glXGetProcAddressARB((const GLubyte *) "glXQueryChannelDeltasSGIX");
}
if (glXQueryChannelDeltasSGIX_ptr)
return (*glXQueryChannelDeltasSGIX_ptr)(dpy, screen, channel,
dx, dy, dw, dh);
else
return 0;
#elif defined(GLX_SGIX_video_resize)
return glXQueryChannelDeltasSGIX(dpy, screen, channel, dx, dy, dw, dh);
#else
return 0;
#endif
}
int
__glut_glXChannelRectSyncSGIX(Display *dpy, int screen,
int channel, GLenum synctype)
{
#ifdef GLX_ARB_get_proc_address
typedef int (*glXChannelRectSyncSGIX_t)(Display *, int, int, GLenum);
static glXChannelRectSyncSGIX_t glXChannelRectSyncSGIX_ptr = NULL;
if (!glXChannelRectSyncSGIX_ptr) {
glXChannelRectSyncSGIX_ptr = (glXChannelRectSyncSGIX_t)
glXGetProcAddressARB((const GLubyte *) "glXChannelRectSyncSGIX");
}
if (glXChannelRectSyncSGIX_ptr)
return (*glXChannelRectSyncSGIX_ptr)(dpy, screen, channel, synctype);
else
return 0;
#elif defined(GLX_SGIX_video_resize)
return glXChannelRectSyncSGIX(dpy, screen, channel, synctype);
#else
return 0;
#endif
}
GLXContext
__glut_glXCreateContextWithConfigSGIX(Display *dpy, GLXFBConfigSGIX config,
int render_type, GLXContext share_list,
Bool direct)
{
#ifdef GLX_ARB_get_proc_address
typedef GLXContext (*glXCreateContextWithConfigSGIX_t)(Display *,
GLXFBConfigSGIX, int, GLXContext, Bool);
static glXCreateContextWithConfigSGIX_t glXCreateContextWithConfig_ptr = NULL;
if (!glXCreateContextWithConfig_ptr) {
glXCreateContextWithConfig_ptr = (glXCreateContextWithConfigSGIX_t)
glXGetProcAddressARB((const GLubyte *) "glXCreateContextWithConfigSGIX");
}
if (glXCreateContextWithConfig_ptr)
return (*glXCreateContextWithConfig_ptr)(dpy, config, render_type,
share_list, direct);
else
return 0;
#elif defined(GLX_SGIX_fbconfig)
return glXCreateContextWithConfigSGIX(dpy, config, render_type,
share_list, direct);
#else
return 0;
#endif
}
int
__glut_glXGetFBConfigAttribSGIX(Display *dpy, GLXFBConfigSGIX config,
int attribute, int *value)
{
#ifdef GLX_ARB_get_proc_address
typedef int (*glXGetFBConfigAttribSGIX_t)(Display *,
GLXFBConfigSGIX, int, int *);
static glXGetFBConfigAttribSGIX_t glXGetFBConfigAttrib_ptr = NULL;
if (!glXGetFBConfigAttrib_ptr) {
glXGetFBConfigAttrib_ptr = (glXGetFBConfigAttribSGIX_t)
glXGetProcAddressARB((const GLubyte *) "glXGetFBConfigAttribSGIX");
}
if (glXGetFBConfigAttrib_ptr)
return (*glXGetFBConfigAttrib_ptr)(dpy, config, attribute, value);
else
return 0;
#elif defined(GLX_SGIX_fbconfig)
return glXGetFBConfigAttribSGIX(dpy, config, attribute, value);
#else
return 0;
#endif
}
GLXFBConfigSGIX
__glut_glXGetFBConfigFromVisualSGIX(Display *dpy, XVisualInfo *vis)
{
#ifdef GLX_ARB_get_proc_address
typedef GLXFBConfigSGIX (*glXGetFBConfigFromVisualSGIX_t)(Display *,
XVisualInfo *);
static glXGetFBConfigFromVisualSGIX_t glXGetFBConfigFromVisual_ptr = NULL;
if (!glXGetFBConfigFromVisual_ptr) {
glXGetFBConfigFromVisual_ptr = (glXGetFBConfigFromVisualSGIX_t)
glXGetProcAddressARB((const GLubyte *) "glXGetFBConfigFromVisualSGIX");
}
if (glXGetFBConfigFromVisual_ptr)
return (*glXGetFBConfigFromVisual_ptr)(dpy, vis);
else
return 0;
#elif defined(GLX_SGIX_fbconfig)
return glXGetFBConfigFromVisualSGIX(dpy, vis);
#else
return 0;
#endif
}
/* GENERATED FILE -- DO NOT MODIFY */
#define glutBitmapHelvetica10 XXX
#include "glutbitmap.h"
#undef glutBitmapHelvetica10
/* char: 0xff */
static const GLubyte ch255data[] = {
0x80,0x40,0x40,0x60,0xa0,0xa0,0x90,0x90,0x0,0x50,
};
static const BitmapCharRec ch255 = {4,10,0,2,5,ch255data};
/* char: 0xfe */
static const GLubyte ch254data[] = {
0x80,0x80,0xb0,0xc8,0x88,0x88,0xc8,0xb0,0x80,0x80,
};
static const BitmapCharRec ch254 = {5,10,0,2,6,ch254data};
/* char: 0xfd */
static const GLubyte ch253data[] = {
0x80,0x40,0x40,0x60,0xa0,0xa0,0x90,0x90,0x0,0x20,0x10,
};
static const BitmapCharRec ch253 = {4,11,0,2,5,ch253data};
/* char: 0xfc */
static const GLubyte ch252data[] = {
0x70,0x90,0x90,0x90,0x90,0x90,0x0,0x50,
};
static const BitmapCharRec ch252 = {4,8,0,0,5,ch252data};
/* char: 0xfb */
static const GLubyte ch251data[] = {
0x70,0x90,0x90,0x90,0x90,0x90,0x0,0x50,0x20,
};
static const BitmapCharRec ch251 = {4,9,0,0,5,ch251data};
/* char: 0xfa */
static const GLubyte ch250data[] = {
0x70,0x90,0x90,0x90,0x90,0x90,0x0,0x40,0x20,
};
static const BitmapCharRec ch250 = {4,9,0,0,5,ch250data};
/* char: 0xf9 */
static const GLubyte ch249data[] = {
0x70,0x90,0x90,0x90,0x90,0x90,0x0,0x20,0x40,
};
static const BitmapCharRec ch249 = {4,9,0,0,5,ch249data};
/* char: 0xf8 */
static const GLubyte ch248data[] = {
0x70,0x88,0xc8,0xa8,0x98,0x74,
};
static const BitmapCharRec ch248 = {6,6,0,0,6,ch248data};
/* char: 0xf7 */
static const GLubyte ch247data[] = {
0x20,0x0,0xf8,0x0,0x20,
};
static const BitmapCharRec ch247 = {5,5,0,-1,6,ch247data};
/* char: 0xf6 */
static const GLubyte ch246data[] = {
0x70,0x88,0x88,0x88,0x88,0x70,0x0,0x50,
};
static const BitmapCharRec ch246 = {5,8,0,0,6,ch246data};
/* char: 0xf5 */
static const GLubyte ch245data[] = {
0x70,0x88,0x88,0x88,0x88,0x70,0x0,0x50,0x28,
};
static const BitmapCharRec ch245 = {5,9,0,0,6,ch245data};
/* char: 0xf4 */
static const GLubyte ch244data[] = {
0x70,0x88,0x88,0x88,0x88,0x70,0x0,0x50,0x20,
};
static const BitmapCharRec ch244 = {5,9,0,0,6,ch244data};
/* char: 0xf3 */
static const GLubyte ch243data[] = {
0x70,0x88,0x88,0x88,0x88,0x70,0x0,0x20,0x10,
};
static const BitmapCharRec ch243 = {5,9,0,0,6,ch243data};
/* char: 0xf2 */
static const GLubyte ch242data[] = {
0x70,0x88,0x88,0x88,0x88,0x70,0x0,0x20,0x40,
};
static const BitmapCharRec ch242 = {5,9,0,0,6,ch242data};
/* char: 0xf1 */
static const GLubyte ch241data[] = {
0x90,0x90,0x90,0x90,0x90,0xe0,0x0,0xa0,0x50,
};
static const BitmapCharRec ch241 = {4,9,0,0,5,ch241data};
/* char: 0xf0 */
static const GLubyte ch240data[] = {
0x70,0x88,0x88,0x88,0x88,0x78,0x90,0x60,0x50,
};
static const BitmapCharRec ch240 = {5,9,0,0,6,ch240data};
/* char: 0xef */
static const GLubyte ch239data[] = {
0x40,0x40,0x40,0x40,0x40,0x40,0x0,0xa0,
};
static const BitmapCharRec ch239 = {3,8,0,0,2,ch239data};
/* char: 0xee */
static const GLubyte ch238data[] = {
0x40,0x40,0x40,0x40,0x40,0x40,0x0,0xa0,0x40,
};
static const BitmapCharRec ch238 = {3,9,1,0,2,ch238data};
/* char: 0xed */
static const GLubyte ch237data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x80,0x40,
};
static const BitmapCharRec ch237 = {2,9,0,0,2,ch237data};
/* char: 0xec */
static const GLubyte ch236data[] = {
0x40,0x40,0x40,0x40,0x40,0x40,0x0,0x40,0x80,
};
static const BitmapCharRec ch236 = {2,9,1,0,2,ch236data};
/* char: 0xeb */
static const GLubyte ch235data[] = {
0x60,0x90,0x80,0xf0,0x90,0x60,0x0,0x50,
};
static const BitmapCharRec ch235 = {4,8,0,0,5,ch235data};
/* char: 0xea */
static const GLubyte ch234data[] = {
0x60,0x90,0x80,0xf0,0x90,0x60,0x0,0x50,0x20,
};
static const BitmapCharRec ch234 = {4,9,0,0,5,ch234data};
/* char: 0xe9 */
static const GLubyte ch233data[] = {
0x60,0x90,0x80,0xf0,0x90,0x60,0x0,0x40,0x20,
};
static const BitmapCharRec ch233 = {4,9,0,0,5,ch233data};
/* char: 0xe8 */
static const GLubyte ch232data[] = {
0x60,0x90,0x80,0xf0,0x90,0x60,0x0,0x20,0x40,
};
static const BitmapCharRec ch232 = {4,9,0,0,5,ch232data};
/* char: 0xe7 */
static const GLubyte ch231data[] = {
0x60,0x20,0x60,0x90,0x80,0x80,0x90,0x60,
};
static const BitmapCharRec ch231 = {4,8,0,2,5,ch231data};
/* char: 0xe6 */
static const GLubyte ch230data[] = {
0x6c,0x92,0x90,0x7e,0x12,0xec,
};
static const BitmapCharRec ch230 = {7,6,0,0,8,ch230data};
/* char: 0xe5 */
static const GLubyte ch229data[] = {
0x68,0x90,0x90,0x70,0x10,0xe0,0x20,0x50,0x20,
};
static const BitmapCharRec ch229 = {5,9,0,0,5,ch229data};
/* char: 0xe4 */
static const GLubyte ch228data[] = {
0x68,0x90,0x90,0x70,0x10,0xe0,0x0,0x50,
};
static const BitmapCharRec ch228 = {5,8,0,0,5,ch228data};
/* char: 0xe3 */
static const GLubyte ch227data[] = {
0x68,0x90,0x90,0x70,0x10,0xe0,0x0,0xa0,0x50,
};
static const BitmapCharRec ch227 = {5,9,0,0,5,ch227data};
/* char: 0xe2 */
static const GLubyte ch226data[] = {
0x68,0x90,0x90,0x70,0x10,0xe0,0x0,0x50,0x20,
};
static const BitmapCharRec ch226 = {5,9,0,0,5,ch226data};
/* char: 0xe1 */
static const GLubyte ch225data[] = {
0x68,0x90,0x90,0x70,0x10,0xe0,0x0,0x20,0x10,
};
static const BitmapCharRec ch225 = {5,9,0,0,5,ch225data};
/* char: 0xe0 */
static const GLubyte ch224data[] = {
0x68,0x90,0x90,0x70,0x10,0xe0,0x0,0x20,0x40,
};
static const BitmapCharRec ch224 = {5,9,0,0,5,ch224data};
/* char: 0xdf */
static const GLubyte ch223data[] = {
0xa0,0x90,0x90,0x90,0xa0,0x90,0x90,0x60,
};
static const BitmapCharRec ch223 = {4,8,0,0,5,ch223data};
/* char: 0xde */
static const GLubyte ch222data[] = {
0x80,0x80,0xf0,0x88,0x88,0xf0,0x80,0x80,
};
static const BitmapCharRec ch222 = {5,8,-1,0,7,ch222data};
/* char: 0xdd */
static const GLubyte ch221data[] = {
0x10,0x10,0x10,0x28,0x28,0x44,0x44,0x82,0x0,0x10,0x8,
};
static const BitmapCharRec ch221 = {7,11,0,0,7,ch221data};
/* char: 0xdc */
static const GLubyte ch220data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x0,0x48,
};
static const BitmapCharRec ch220 = {6,10,-1,0,8,ch220data};
/* char: 0xdb */
static const GLubyte ch219data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x0,0x28,0x10,
};
static const BitmapCharRec ch219 = {6,11,-1,0,8,ch219data};
/* char: 0xda */
static const GLubyte ch218data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x0,0x20,0x10,
};
static const BitmapCharRec ch218 = {6,11,-1,0,8,ch218data};
/* char: 0xd9 */
static const GLubyte ch217data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x0,0x10,0x20,
};
static const BitmapCharRec ch217 = {6,11,-1,0,8,ch217data};
/* char: 0xd8 */
static const GLubyte ch216data[] = {
0x80,0x78,0xc4,0xa4,0xa4,0x94,0x94,0x8c,0x78,0x4,
};
static const BitmapCharRec ch216 = {6,10,-1,1,8,ch216data};
/* char: 0xd7 */
static const GLubyte ch215data[] = {
0x88,0x50,0x20,0x50,0x88,
};
static const BitmapCharRec ch215 = {5,5,0,-1,6,ch215data};
/* char: 0xd6 */
static const GLubyte ch214data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x78,0x0,0x48,
};
static const BitmapCharRec ch214 = {6,10,-1,0,8,ch214data};
/* char: 0xd5 */
static const GLubyte ch213data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x78,0x0,0x50,0x28,
};
static const BitmapCharRec ch213 = {6,11,-1,0,8,ch213data};
/* char: 0xd4 */
static const GLubyte ch212data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x78,0x0,0x28,0x10,
};
static const BitmapCharRec ch212 = {6,11,-1,0,8,ch212data};
/* char: 0xd3 */
static const GLubyte ch211data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x78,0x0,0x10,0x8,
};
static const BitmapCharRec ch211 = {6,11,-1,0,8,ch211data};
/* char: 0xd2 */
static const GLubyte ch210data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x78,0x0,0x10,0x20,
};
static const BitmapCharRec ch210 = {6,11,-1,0,8,ch210data};
/* char: 0xd1 */
static const GLubyte ch209data[] = {
0x8c,0x8c,0x94,0x94,0xa4,0xa4,0xc4,0xc4,0x0,0x50,0x28,
};
static const BitmapCharRec ch209 = {6,11,-1,0,8,ch209data};
/* char: 0xd0 */
static const GLubyte ch208data[] = {
0x78,0x44,0x42,0x42,0xf2,0x42,0x44,0x78,
};
static const BitmapCharRec ch208 = {7,8,0,0,8,ch208data};
/* char: 0xcf */
static const GLubyte ch207data[] = {
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x0,0xa0,
};
static const BitmapCharRec ch207 = {3,10,0,0,3,ch207data};
/* char: 0xce */
static const GLubyte ch206data[] = {
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x0,0xa0,0x40,
};
static const BitmapCharRec ch206 = {3,11,0,0,3,ch206data};
/* char: 0xcd */
static const GLubyte ch205data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x80,0x40,
};
static const BitmapCharRec ch205 = {2,11,-1,0,3,ch205data};
/* char: 0xcc */
static const GLubyte ch204data[] = {
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x0,0x40,0x80,
};
static const BitmapCharRec ch204 = {2,11,0,0,3,ch204data};
/* char: 0xcb */
static const GLubyte ch203data[] = {
0xf8,0x80,0x80,0x80,0xf8,0x80,0x80,0xf8,0x0,0x50,
};
static const BitmapCharRec ch203 = {5,10,-1,0,7,ch203data};
/* char: 0xca */
static const GLubyte ch202data[] = {
0xf8,0x80,0x80,0xf8,0x80,0x80,0x80,0xf8,0x0,0x50,0x20,
};
static const BitmapCharRec ch202 = {5,11,-1,0,7,ch202data};
/* char: 0xc9 */
static const GLubyte ch201data[] = {
0xf8,0x80,0x80,0x80,0xf8,0x80,0x80,0xf8,0x0,0x20,0x10,
};
static const BitmapCharRec ch201 = {5,11,-1,0,7,ch201data};
/* char: 0xc8 */
static const GLubyte ch200data[] = {
0xf8,0x80,0x80,0x80,0xf8,0x80,0x80,0xf8,0x0,0x20,0x40,
};
static const BitmapCharRec ch200 = {5,11,-1,0,7,ch200data};
/* char: 0xc7 */
static const GLubyte ch199data[] = {
0x30,0x10,0x78,0x84,0x80,0x80,0x80,0x80,0x84,0x78,
};
static const BitmapCharRec ch199 = {6,10,-1,2,8,ch199data};
/* char: 0xc6 */
static const GLubyte ch198data[] = {
0x8f,0x80,0x88,0x0,0x78,0x0,0x48,0x0,0x2f,0x80,0x28,0x0,0x18,0x0,0x1f,0x80,
};
static const BitmapCharRec ch198 = {9,8,0,0,10,ch198data};
/* char: 0xc5 */
static const GLubyte ch197data[] = {
0x82,0x82,0x7c,0x44,0x28,0x28,0x10,0x10,0x10,0x28,0x10,
};
static const BitmapCharRec ch197 = {7,11,0,0,7,ch197data};
/* char: 0xc4 */
static const GLubyte ch196data[] = {
0x82,0x82,0x7c,0x44,0x28,0x28,0x10,0x10,0x0,0x28,
};
static const BitmapCharRec ch196 = {7,10,0,0,7,ch196data};
/* char: 0xc3 */
static const GLubyte ch195data[] = {
0x82,0x82,0x7c,0x44,0x28,0x28,0x10,0x10,0x0,0x28,0x14,
};
static const BitmapCharRec ch195 = {7,11,0,0,7,ch195data};
/* char: 0xc2 */
static const GLubyte ch194data[] = {
0x82,0x82,0x7c,0x44,0x28,0x28,0x10,0x10,0x0,0x28,0x10,
};
static const BitmapCharRec ch194 = {7,11,0,0,7,ch194data};
/* char: 0xc1 */
static const GLubyte ch193data[] = {
0x82,0x82,0x7c,0x44,0x28,0x28,0x10,0x10,0x0,0x10,0x8,
};
static const BitmapCharRec ch193 = {7,11,0,0,7,ch193data};
/* char: 0xc0 */
static const GLubyte ch192data[] = {
0x82,0x82,0x7c,0x44,0x28,0x28,0x10,0x10,0x0,0x10,0x20,
};
static const BitmapCharRec ch192 = {7,11,0,0,7,ch192data};
/* char: 0xbf */
static const GLubyte ch191data[] = {
0x60,0x90,0x80,0x40,0x20,0x20,0x0,0x20,
};
static const BitmapCharRec ch191 = {4,8,-1,2,6,ch191data};
/* char: 0xbe */
static const GLubyte ch190data[] = {
0x21,0x0,0x17,0x80,0x13,0x0,0x9,0x0,0xc8,0x0,0x24,0x0,0x44,0x0,0xe2,0x0,
};
static const BitmapCharRec ch190 = {9,8,0,0,9,ch190data};
/* char: 0xbd */
static const GLubyte ch189data[] = {
0x27,0x12,0x15,0xb,0x48,0x44,0xc4,0x42,
};
static const BitmapCharRec ch189 = {8,8,0,0,9,ch189data};
/* char: 0xbc */
static const GLubyte ch188data[] = {
0x21,0x0,0x17,0x80,0x13,0x0,0x9,0x0,0x48,0x0,0x44,0x0,0xc4,0x0,0x42,0x0,
};
static const BitmapCharRec ch188 = {9,8,0,0,9,ch188data};
/* char: 0xbb */
static const GLubyte ch187data[] = {
0xa0,0x50,0x28,0x50,0xa0,
};
static const BitmapCharRec ch187 = {5,5,0,0,6,ch187data};
/* char: 0xba */
static const GLubyte ch186data[] = {
0xe0,0x0,0xe0,0xa0,0xe0,
};
static const BitmapCharRec ch186 = {3,5,0,-3,4,ch186data};
/* char: 0xb9 */
static const GLubyte ch185data[] = {
0x40,0x40,0xc0,0x40,
};
static const BitmapCharRec ch185 = {2,4,0,-3,3,ch185data};
/* char: 0xb8 */
static const GLubyte ch184data[] = {
0xc0,0x40,
};
static const BitmapCharRec ch184 = {2,2,0,2,3,ch184data};
/* char: 0xb7 */
static const GLubyte ch183data[] = {
0xc0,
};
static const BitmapCharRec ch183 = {2,1,0,-3,3,ch183data};
/* char: 0xb6 */
static const GLubyte ch182data[] = {
0x28,0x28,0x28,0x28,0x28,0x68,0xe8,0xe8,0xe8,0x7c,
};
static const BitmapCharRec ch182 = {6,10,0,2,6,ch182data};
/* char: 0xb5 */
static const GLubyte ch181data[] = {
0x80,0x80,0xf0,0x90,0x90,0x90,0x90,0x90,
};
static const BitmapCharRec ch181 = {4,8,0,2,5,ch181data};
/* char: 0xb4 */
static const GLubyte ch180data[] = {
0x80,0x40,
};
static const BitmapCharRec ch180 = {2,2,0,-6,3,ch180data};
/* char: 0xb3 */
static const GLubyte ch179data[] = {
0xc0,0x20,0x40,0xe0,
};
static const BitmapCharRec ch179 = {3,4,0,-3,3,ch179data};
/* char: 0xb2 */
static const GLubyte ch178data[] = {
0xe0,0x40,0xa0,0x60,
};
static const BitmapCharRec ch178 = {3,4,0,-3,3,ch178data};
/* char: 0xb1 */
static const GLubyte ch177data[] = {
0xf8,0x0,0x20,0x20,0xf8,0x20,0x20,
};
static const BitmapCharRec ch177 = {5,7,0,0,6,ch177data};
/* char: 0xb0 */
static const GLubyte ch176data[] = {
0x60,0x90,0x90,0x60,
};
static const BitmapCharRec ch176 = {4,4,0,-3,4,ch176data};
/* char: 0xaf */
static const GLubyte ch175data[] = {
0xe0,
};
static const BitmapCharRec ch175 = {3,1,0,-7,3,ch175data};
/* char: 0xae */
static const GLubyte ch174data[] = {
0x38,0x44,0xaa,0xb2,0xba,0x44,0x38,
};
static const BitmapCharRec ch174 = {7,7,-1,0,9,ch174data};
/* char: 0xad */
static const GLubyte ch173data[] = {
0xe0,
};
static const BitmapCharRec ch173 = {3,1,0,-3,4,ch173data};
/* char: 0xac */
static const GLubyte ch172data[] = {
0x8,0x8,0xf8,
};
static const BitmapCharRec ch172 = {5,3,-1,-2,7,ch172data};
/* char: 0xab */
static const GLubyte ch171data[] = {
0x28,0x50,0xa0,0x50,0x28,
};
static const BitmapCharRec ch171 = {5,5,0,0,6,ch171data};
/* char: 0xaa */
static const GLubyte ch170data[] = {
0xe0,0x0,0xa0,0x20,0xe0,
};
static const BitmapCharRec ch170 = {3,5,0,-3,4,ch170data};
/* char: 0xa9 */
static const GLubyte ch169data[] = {
0x38,0x44,0x9a,0xa2,0x9a,0x44,0x38,
};
static const BitmapCharRec ch169 = {7,7,-1,0,9,ch169data};
/* char: 0xa8 */
static const GLubyte ch168data[] = {
0xa0,
};
static const BitmapCharRec ch168 = {3,1,0,-7,3,ch168data};
/* char: 0xa7 */
static const GLubyte ch167data[] = {
0x70,0x88,0x18,0x70,0xc8,0x98,0x70,0xc0,0x88,0x70,
};
static const BitmapCharRec ch167 = {5,10,0,2,6,ch167data};
/* char: 0xa6 */
static const GLubyte ch166data[] = {
0x80,0x80,0x80,0x80,0x0,0x0,0x80,0x80,0x80,0x80,
};
static const BitmapCharRec ch166 = {1,10,-1,2,3,ch166data};
/* char: 0xa5 */
static const GLubyte ch165data[] = {
0x20,0xf8,0x20,0xf8,0x50,0x50,0x88,0x88,
};
static const BitmapCharRec ch165 = {5,8,0,0,6,ch165data};
/* char: 0xa4 */
static const GLubyte ch164data[] = {
0x90,0x60,0x90,0x90,0x60,0x90,
};
static const BitmapCharRec ch164 = {4,6,0,-1,5,ch164data};
/* char: 0xa3 */
static const GLubyte ch163data[] = {
0xb0,0x48,0x40,0x40,0xe0,0x40,0x48,0x30,
};
static const BitmapCharRec ch163 = {5,8,0,0,6,ch163data};
/* char: 0xa2 */
static const GLubyte ch162data[] = {
0x40,0x70,0xa8,0xa0,0xa0,0xa8,0x70,0x10,
};
static const BitmapCharRec ch162 = {5,8,0,1,6,ch162data};
/* char: 0xa1 */
static const GLubyte ch161data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x80,
};
static const BitmapCharRec ch161 = {1,8,-1,2,3,ch161data};
/* char: 0xa0 */
#ifdef _WIN32
/* XXX Work around Microsoft OpenGL 1.1 bug where glBitmap with
a height or width of zero does not advance the raster position
as specified by OpenGL. (Cosmo OpenGL does not have this bug.) */
static const GLubyte ch160data[] = { 0x0 };
static const BitmapCharRec ch160 = {1,1,0,0,3,ch160data};
#else
static const BitmapCharRec ch160 = {0,0,0,0,3,0};
#endif
/* char: 0x7e '~' */
static const GLubyte ch126data[] = {
0x98,0x64,
};
static const BitmapCharRec ch126 = {6,2,0,-3,7,ch126data};
/* char: 0x7d '}' */
static const GLubyte ch125data[] = {
0x80,0x40,0x40,0x40,0x40,0x20,0x40,0x40,0x40,0x80,
};
static const BitmapCharRec ch125 = {3,10,0,2,3,ch125data};
/* char: 0x7c '|' */
static const GLubyte ch124data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
};
static const BitmapCharRec ch124 = {1,10,-1,2,3,ch124data};
/* char: 0x7b '{' */
static const GLubyte ch123data[] = {
0x20,0x40,0x40,0x40,0x40,0x80,0x40,0x40,0x40,0x20,
};
static const BitmapCharRec ch123 = {3,10,0,2,3,ch123data};
/* char: 0x7a 'z' */
static const GLubyte ch122data[] = {
0xf0,0x80,0x40,0x20,0x10,0xf0,
};
static const BitmapCharRec ch122 = {4,6,0,0,5,ch122data};
/* char: 0x79 'y' */
static const GLubyte ch121data[] = {
0x80,0x40,0x40,0x60,0xa0,0xa0,0x90,0x90,
};
static const BitmapCharRec ch121 = {4,8,0,2,5,ch121data};
/* char: 0x78 'x' */
static const GLubyte ch120data[] = {
0x88,0x88,0x50,0x20,0x50,0x88,
};
static const BitmapCharRec ch120 = {5,6,0,0,6,ch120data};
/* char: 0x77 'w' */
static const GLubyte ch119data[] = {
0x28,0x28,0x54,0x54,0x92,0x92,
};
static const BitmapCharRec ch119 = {7,6,0,0,8,ch119data};
/* char: 0x76 'v' */
static const GLubyte ch118data[] = {
0x20,0x20,0x50,0x50,0x88,0x88,
};
static const BitmapCharRec ch118 = {5,6,0,0,6,ch118data};
/* char: 0x75 'u' */
static const GLubyte ch117data[] = {
0x70,0x90,0x90,0x90,0x90,0x90,
};
static const BitmapCharRec ch117 = {4,6,0,0,5,ch117data};
/* char: 0x74 't' */
static const GLubyte ch116data[] = {
0x60,0x40,0x40,0x40,0x40,0xe0,0x40,0x40,
};
static const BitmapCharRec ch116 = {3,8,0,0,4,ch116data};
/* char: 0x73 's' */
static const GLubyte ch115data[] = {
0x60,0x90,0x10,0x60,0x90,0x60,
};
static const BitmapCharRec ch115 = {4,6,0,0,5,ch115data};
/* char: 0x72 'r' */
static const GLubyte ch114data[] = {
0x80,0x80,0x80,0x80,0xc0,0xa0,
};
static const BitmapCharRec ch114 = {3,6,0,0,4,ch114data};
/* char: 0x71 'q' */
static const GLubyte ch113data[] = {
0x8,0x8,0x68,0x98,0x88,0x88,0x98,0x68,
};
static const BitmapCharRec ch113 = {5,8,0,2,6,ch113data};
/* char: 0x70 'p' */
static const GLubyte ch112data[] = {
0x80,0x80,0xb0,0xc8,0x88,0x88,0xc8,0xb0,
};
static const BitmapCharRec ch112 = {5,8,0,2,6,ch112data};
/* char: 0x6f 'o' */
static const GLubyte ch111data[] = {
0x70,0x88,0x88,0x88,0x88,0x70,
};
static const BitmapCharRec ch111 = {5,6,0,0,6,ch111data};
/* char: 0x6e 'n' */
static const GLubyte ch110data[] = {
0x88,0x88,0x88,0x88,0xc8,0xb0,
};
static const BitmapCharRec ch110 = {5,6,0,0,6,ch110data};
/* char: 0x6d 'm' */
static const GLubyte ch109data[] = {
0x92,0x92,0x92,0x92,0x92,0xec,
};
static const BitmapCharRec ch109 = {7,6,0,0,8,ch109data};
/* char: 0x6c 'l' */
static const GLubyte ch108data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
};
static const BitmapCharRec ch108 = {1,8,0,0,2,ch108data};
/* char: 0x6b 'k' */
static const GLubyte ch107data[] = {
0x90,0x90,0xa0,0xc0,0xa0,0x90,0x80,0x80,
};
static const BitmapCharRec ch107 = {4,8,0,0,5,ch107data};
/* char: 0x6a 'j' */
static const GLubyte ch106data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x80,
};
static const BitmapCharRec ch106 = {1,9,0,1,2,ch106data};
/* char: 0x69 'i' */
static const GLubyte ch105data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x80,
};
static const BitmapCharRec ch105 = {1,8,0,0,2,ch105data};
/* char: 0x68 'h' */
static const GLubyte ch104data[] = {
0x88,0x88,0x88,0x88,0xc8,0xb0,0x80,0x80,
};
static const BitmapCharRec ch104 = {5,8,0,0,6,ch104data};
/* char: 0x67 'g' */
static const GLubyte ch103data[] = {
0x70,0x8,0x68,0x98,0x88,0x88,0x98,0x68,
};
static const BitmapCharRec ch103 = {5,8,0,2,6,ch103data};
/* char: 0x66 'f' */
static const GLubyte ch102data[] = {
0x40,0x40,0x40,0x40,0x40,0xe0,0x40,0x30,
};
static const BitmapCharRec ch102 = {4,8,0,0,4,ch102data};
/* char: 0x65 'e' */
static const GLubyte ch101data[] = {
0x60,0x90,0x80,0xf0,0x90,0x60,
};
static const BitmapCharRec ch101 = {4,6,0,0,5,ch101data};
/* char: 0x64 'd' */
static const GLubyte ch100data[] = {
0x68,0x98,0x88,0x88,0x98,0x68,0x8,0x8,
};
static const BitmapCharRec ch100 = {5,8,0,0,6,ch100data};
/* char: 0x63 'c' */
static const GLubyte ch99data[] = {
0x60,0x90,0x80,0x80,0x90,0x60,
};
static const BitmapCharRec ch99 = {4,6,0,0,5,ch99data};
/* char: 0x62 'b' */
static const GLubyte ch98data[] = {
0xb0,0xc8,0x88,0x88,0xc8,0xb0,0x80,0x80,
};
static const BitmapCharRec ch98 = {5,8,0,0,6,ch98data};
/* char: 0x61 'a' */
static const GLubyte ch97data[] = {
0x68,0x90,0x90,0x70,0x10,0xe0,
};
static const BitmapCharRec ch97 = {5,6,0,0,5,ch97data};
/* char: 0x60 '`' */
static const GLubyte ch96data[] = {
0x80,0x80,0x40,
};
static const BitmapCharRec ch96 = {2,3,0,-5,3,ch96data};
/* char: 0x5f '_' */
static const GLubyte ch95data[] = {
0xfc,
};
static const BitmapCharRec ch95 = {6,1,0,2,6,ch95data};
/* char: 0x5e '^' */
static const GLubyte ch94data[] = {
0x88,0x50,0x50,0x20,0x20,
};
static const BitmapCharRec ch94 = {5,5,0,-3,6,ch94data};
/* char: 0x5d ']' */
static const GLubyte ch93data[] = {
0xc0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xc0,
};
static const BitmapCharRec ch93 = {2,10,0,2,3,ch93data};
/* char: 0x5c '\' */
static const GLubyte ch92data[] = {
0x20,0x20,0x40,0x40,0x40,0x40,0x80,0x80,
};
static const BitmapCharRec ch92 = {3,8,0,0,3,ch92data};
/* char: 0x5b '[' */
static const GLubyte ch91data[] = {
0xc0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xc0,
};
static const BitmapCharRec ch91 = {2,10,-1,2,3,ch91data};
/* char: 0x5a 'Z' */
static const GLubyte ch90data[] = {
0xf8,0x80,0x40,0x20,0x20,0x10,0x8,0xf8,
};
static const BitmapCharRec ch90 = {5,8,-1,0,7,ch90data};
/* char: 0x59 'Y' */
static const GLubyte ch89data[] = {
0x10,0x10,0x10,0x28,0x28,0x44,0x44,0x82,
};
static const BitmapCharRec ch89 = {7,8,0,0,7,ch89data};
/* char: 0x58 'X' */
static const GLubyte ch88data[] = {
0x88,0x88,0x50,0x50,0x20,0x50,0x88,0x88,
};
static const BitmapCharRec ch88 = {5,8,-1,0,7,ch88data};
/* char: 0x57 'W' */
static const GLubyte ch87data[] = {
0x22,0x0,0x22,0x0,0x22,0x0,0x55,0x0,0x49,0x0,0x49,0x0,0x88,0x80,0x88,0x80,
};
static const BitmapCharRec ch87 = {9,8,0,0,9,ch87data};
/* char: 0x56 'V' */
static const GLubyte ch86data[] = {
0x10,0x28,0x28,0x44,0x44,0x44,0x82,0x82,
};
static const BitmapCharRec ch86 = {7,8,0,0,7,ch86data};
/* char: 0x55 'U' */
static const GLubyte ch85data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x84,
};
static const BitmapCharRec ch85 = {6,8,-1,0,8,ch85data};
/* char: 0x54 'T' */
static const GLubyte ch84data[] = {
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xf8,
};
static const BitmapCharRec ch84 = {5,8,0,0,5,ch84data};
/* char: 0x53 'S' */
static const GLubyte ch83data[] = {
0x70,0x88,0x88,0x8,0x70,0x80,0x88,0x70,
};
static const BitmapCharRec ch83 = {5,8,-1,0,7,ch83data};
/* char: 0x52 'R' */
static const GLubyte ch82data[] = {
0x88,0x88,0x88,0x88,0xf0,0x88,0x88,0xf0,
};
static const BitmapCharRec ch82 = {5,8,-1,0,7,ch82data};
/* char: 0x51 'Q' */
static const GLubyte ch81data[] = {
0x2,0x7c,0x8c,0x94,0x84,0x84,0x84,0x84,0x78,
};
static const BitmapCharRec ch81 = {7,9,-1,1,8,ch81data};
/* char: 0x50 'P' */
static const GLubyte ch80data[] = {
0x80,0x80,0x80,0x80,0xf0,0x88,0x88,0xf0,
};
static const BitmapCharRec ch80 = {5,8,-1,0,7,ch80data};
/* char: 0x4f 'O' */
static const GLubyte ch79data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x78,
};
static const BitmapCharRec ch79 = {6,8,-1,0,8,ch79data};
/* char: 0x4e 'N' */
static const GLubyte ch78data[] = {
0x8c,0x8c,0x94,0x94,0xa4,0xa4,0xc4,0xc4,
};
static const BitmapCharRec ch78 = {6,8,-1,0,8,ch78data};
/* char: 0x4d 'M' */
static const GLubyte ch77data[] = {
0x92,0x92,0x92,0xaa,0xaa,0xc6,0xc6,0x82,
};
static const BitmapCharRec ch77 = {7,8,-1,0,9,ch77data};
/* char: 0x4c 'L' */
static const GLubyte ch76data[] = {
0xf0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
};
static const BitmapCharRec ch76 = {4,8,-1,0,6,ch76data};
/* char: 0x4b 'K' */
static const GLubyte ch75data[] = {
0x88,0x88,0x90,0x90,0xe0,0xa0,0x90,0x88,
};
static const BitmapCharRec ch75 = {5,8,-1,0,7,ch75data};
/* char: 0x4a 'J' */
static const GLubyte ch74data[] = {
0x60,0x90,0x10,0x10,0x10,0x10,0x10,0x10,
};
static const BitmapCharRec ch74 = {4,8,0,0,5,ch74data};
/* char: 0x49 'I' */
static const GLubyte ch73data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
};
static const BitmapCharRec ch73 = {1,8,-1,0,3,ch73data};
/* char: 0x48 'H' */
static const GLubyte ch72data[] = {
0x84,0x84,0x84,0x84,0xfc,0x84,0x84,0x84,
};
static const BitmapCharRec ch72 = {6,8,-1,0,8,ch72data};
/* char: 0x47 'G' */
static const GLubyte ch71data[] = {
0x74,0x8c,0x84,0x8c,0x80,0x80,0x84,0x78,
};
static const BitmapCharRec ch71 = {6,8,-1,0,8,ch71data};
/* char: 0x46 'F' */
static const GLubyte ch70data[] = {
0x80,0x80,0x80,0x80,0xf0,0x80,0x80,0xf8,
};
static const BitmapCharRec ch70 = {5,8,-1,0,6,ch70data};
/* char: 0x45 'E' */
static const GLubyte ch69data[] = {
0xf8,0x80,0x80,0x80,0xf8,0x80,0x80,0xf8,
};
static const BitmapCharRec ch69 = {5,8,-1,0,7,ch69data};
/* char: 0x44 'D' */
static const GLubyte ch68data[] = {
0xf0,0x88,0x84,0x84,0x84,0x84,0x88,0xf0,
};
static const BitmapCharRec ch68 = {6,8,-1,0,8,ch68data};
/* char: 0x43 'C' */
static const GLubyte ch67data[] = {
0x78,0x84,0x80,0x80,0x80,0x80,0x84,0x78,
};
static const BitmapCharRec ch67 = {6,8,-1,0,8,ch67data};
/* char: 0x42 'B' */
static const GLubyte ch66data[] = {
0xf0,0x88,0x88,0x88,0xf0,0x88,0x88,0xf0,
};
static const BitmapCharRec ch66 = {5,8,-1,0,7,ch66data};
/* char: 0x41 'A' */
static const GLubyte ch65data[] = {
0x82,0x82,0x7c,0x44,0x28,0x28,0x10,0x10,
};
static const BitmapCharRec ch65 = {7,8,0,0,7,ch65data};
/* char: 0x40 '@' */
static const GLubyte ch64data[] = {
0x3e,0x0,0x40,0x0,0x9b,0x0,0xa4,0x80,0xa4,0x80,0xa2,0x40,0x92,0x40,0x4d,0x40,
0x20,0x80,0x1f,0x0,
};
static const BitmapCharRec ch64 = {10,10,0,2,11,ch64data};
/* char: 0x3f '?' */
static const GLubyte ch63data[] = {
0x40,0x0,0x40,0x40,0x20,0x10,0x90,0x60,
};
static const BitmapCharRec ch63 = {4,8,-1,0,6,ch63data};
/* char: 0x3e '>' */
static const GLubyte ch62data[] = {
0x80,0x40,0x20,0x40,0x80,
};
static const BitmapCharRec ch62 = {3,5,-1,-1,6,ch62data};
/* char: 0x3d '=' */
static const GLubyte ch61data[] = {
0xf0,0x0,0xf0,
};
static const BitmapCharRec ch61 = {4,3,0,-2,5,ch61data};
/* char: 0x3c '<' */
static const GLubyte ch60data[] = {
0x20,0x40,0x80,0x40,0x20,
};
static const BitmapCharRec ch60 = {3,5,-1,-1,6,ch60data};
/* char: 0x3b ';' */
static const GLubyte ch59data[] = {
0x80,0x40,0x40,0x0,0x0,0x0,0x0,0x40,
};
static const BitmapCharRec ch59 = {2,8,0,2,3,ch59data};
/* char: 0x3a ':' */
static const GLubyte ch58data[] = {
0x80,0x0,0x0,0x0,0x0,0x80,
};
static const BitmapCharRec ch58 = {1,6,-1,0,3,ch58data};
/* char: 0x39 '9' */
static const GLubyte ch57data[] = {
0x70,0x88,0x8,0x68,0x98,0x88,0x88,0x70,
};
static const BitmapCharRec ch57 = {5,8,0,0,6,ch57data};
/* char: 0x38 '8' */
static const GLubyte ch56data[] = {
0x70,0x88,0x88,0x88,0x70,0x88,0x88,0x70,
};
static const BitmapCharRec ch56 = {5,8,0,0,6,ch56data};
/* char: 0x37 '7' */
static const GLubyte ch55data[] = {
0x40,0x40,0x20,0x20,0x10,0x10,0x8,0xf8,
};
static const BitmapCharRec ch55 = {5,8,0,0,6,ch55data};
/* char: 0x36 '6' */
static const GLubyte ch54data[] = {
0x70,0x88,0x88,0xc8,0xb0,0x80,0x88,0x70,
};
static const BitmapCharRec ch54 = {5,8,0,0,6,ch54data};
/* char: 0x35 '5' */
static const GLubyte ch53data[] = {
0x70,0x88,0x8,0x8,0xf0,0x80,0x80,0xf8,
};
static const BitmapCharRec ch53 = {5,8,0,0,6,ch53data};
/* char: 0x34 '4' */
static const GLubyte ch52data[] = {
0x10,0x10,0xf8,0x90,0x50,0x50,0x30,0x10,
};
static const BitmapCharRec ch52 = {5,8,0,0,6,ch52data};
/* char: 0x33 '3' */
static const GLubyte ch51data[] = {
0x70,0x88,0x8,0x8,0x30,0x8,0x88,0x70,
};
static const BitmapCharRec ch51 = {5,8,0,0,6,ch51data};
/* char: 0x32 '2' */
static const GLubyte ch50data[] = {
0xf8,0x80,0x40,0x30,0x8,0x8,0x88,0x70,
};
static const BitmapCharRec ch50 = {5,8,0,0,6,ch50data};
/* char: 0x31 '1' */
static const GLubyte ch49data[] = {
0x40,0x40,0x40,0x40,0x40,0x40,0xc0,0x40,
};
static const BitmapCharRec ch49 = {2,8,-1,0,6,ch49data};
/* char: 0x30 '0' */
static const GLubyte ch48data[] = {
0x70,0x88,0x88,0x88,0x88,0x88,0x88,0x70,
};
static const BitmapCharRec ch48 = {5,8,0,0,6,ch48data};
/* char: 0x2f '/' */
static const GLubyte ch47data[] = {
0x80,0x80,0x40,0x40,0x40,0x40,0x20,0x20,
};
static const BitmapCharRec ch47 = {3,8,0,0,3,ch47data};
/* char: 0x2e '.' */
static const GLubyte ch46data[] = {
0x80,
};
static const BitmapCharRec ch46 = {1,1,-1,0,3,ch46data};
/* char: 0x2d '-' */
static const GLubyte ch45data[] = {
0xf8,
};
static const BitmapCharRec ch45 = {5,1,-1,-3,7,ch45data};
/* char: 0x2c ',' */
static const GLubyte ch44data[] = {
0x80,0x40,0x40,
};
static const BitmapCharRec ch44 = {2,3,0,2,3,ch44data};
/* char: 0x2b '+' */
static const GLubyte ch43data[] = {
0x20,0x20,0xf8,0x20,0x20,
};
static const BitmapCharRec ch43 = {5,5,0,-1,6,ch43data};
/* char: 0x2a '*' */
static const GLubyte ch42data[] = {
0xa0,0x40,0xa0,
};
static const BitmapCharRec ch42 = {3,3,0,-5,4,ch42data};
/* char: 0x29 ')' */
static const GLubyte ch41data[] = {
0x80,0x40,0x40,0x20,0x20,0x20,0x20,0x40,0x40,0x80,
};
static const BitmapCharRec ch41 = {3,10,-1,2,4,ch41data};
/* char: 0x28 '(' */
static const GLubyte ch40data[] = {
0x20,0x40,0x40,0x80,0x80,0x80,0x80,0x40,0x40,0x20,
};
static const BitmapCharRec ch40 = {3,10,0,2,4,ch40data};
/* char: 0x27 ''' */
static const GLubyte ch39data[] = {
0x80,0x40,0x40,
};
static const BitmapCharRec ch39 = {2,3,-1,-5,3,ch39data};
/* char: 0x26 '&' */
static const GLubyte ch38data[] = {
0x64,0x98,0x98,0xa4,0x60,0x50,0x50,0x20,
};
static const BitmapCharRec ch38 = {6,8,-1,0,8,ch38data};
/* char: 0x25 '%' */
static const GLubyte ch37data[] = {
0x26,0x29,0x16,0x10,0x8,0x68,0x94,0x64,
};
static const BitmapCharRec ch37 = {8,8,0,0,9,ch37data};
/* char: 0x24 '$' */
static const GLubyte ch36data[] = {
0x20,0x70,0xa8,0x28,0x70,0xa0,0xa8,0x70,0x20,
};
static const BitmapCharRec ch36 = {5,9,0,1,6,ch36data};
/* char: 0x23 '#' */
static const GLubyte ch35data[] = {
0x50,0x50,0xf8,0x28,0x7c,0x28,0x28,
};
static const BitmapCharRec ch35 = {6,7,0,0,6,ch35data};
/* char: 0x22 '"' */
static const GLubyte ch34data[] = {
0xa0,0xa0,
};
static const BitmapCharRec ch34 = {3,2,-1,-6,4,ch34data};
/* char: 0x21 '!' */
static const GLubyte ch33data[] = {
0x80,0x0,0x80,0x80,0x80,0x80,0x80,0x80,
};
static const BitmapCharRec ch33 = {1,8,-1,0,3,ch33data};
/* char: 0x20 ' ' */
#ifdef _WIN32
/* XXX Work around Microsoft OpenGL 1.1 bug where glBitmap with
a height or width of zero does not advance the raster position
as specified by OpenGL. (Cosmo OpenGL does not have this bug.) */
static const GLubyte ch32data[] = { 0x0 };
static const BitmapCharRec ch32 = {0,0,0,0,3,ch32data};
#else
static const BitmapCharRec ch32 = {0,0,0,0,3,0};
#endif
static const BitmapCharRec * const chars[] = {
&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,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
&ch160,
&ch161,
&ch162,
&ch163,
&ch164,
&ch165,
&ch166,
&ch167,
&ch168,
&ch169,
&ch170,
&ch171,
&ch172,
&ch173,
&ch174,
&ch175,
&ch176,
&ch177,
&ch178,
&ch179,
&ch180,
&ch181,
&ch182,
&ch183,
&ch184,
&ch185,
&ch186,
&ch187,
&ch188,
&ch189,
&ch190,
&ch191,
&ch192,
&ch193,
&ch194,
&ch195,
&ch196,
&ch197,
&ch198,
&ch199,
&ch200,
&ch201,
&ch202,
&ch203,
&ch204,
&ch205,
&ch206,
&ch207,
&ch208,
&ch209,
&ch210,
&ch211,
&ch212,
&ch213,
&ch214,
&ch215,
&ch216,
&ch217,
&ch218,
&ch219,
&ch220,
&ch221,
&ch222,
&ch223,
&ch224,
&ch225,
&ch226,
&ch227,
&ch228,
&ch229,
&ch230,
&ch231,
&ch232,
&ch233,
&ch234,
&ch235,
&ch236,
&ch237,
&ch238,
&ch239,
&ch240,
&ch241,
&ch242,
&ch243,
&ch244,
&ch245,
&ch246,
&ch247,
&ch248,
&ch249,
&ch250,
&ch251,
&ch252,
&ch253,
&ch254,
&ch255,
};
const BitmapFontRec glutBitmapHelvetica10 = {
"-adobe-helvetica-medium-r-normal--10-100-75-75-p-56-iso8859-1",
224,
32,
chars
};
/* GENERATED FILE -- DO NOT MODIFY */
#define glutBitmapHelvetica12 XXX
#include "glutbitmap.h"
#undef glutBitmapHelvetica12
/* char: 0xff */
static const GLubyte ch255data[] = {
0xc0,0x20,0x20,0x20,0x30,0x50,0x50,0x48,0x88,0x88,0x0,0x50,
};
static const BitmapCharRec ch255 = {5,12,-1,3,7,ch255data};
/* char: 0xfe */
static const GLubyte ch254data[] = {
0x80,0x80,0x80,0xb0,0xc8,0x88,0x88,0x88,0xc8,0xb0,0x80,0x80,
};
static const BitmapCharRec ch254 = {5,12,-1,3,7,ch254data};
/* char: 0xfd */
static const GLubyte ch253data[] = {
0x80,0x40,0x20,0x20,0x50,0x50,0x90,0x88,0x88,0x88,0x0,0x20,0x10,
};
static const BitmapCharRec ch253 = {5,13,-1,3,7,ch253data};
/* char: 0xfc */
static const GLubyte ch252data[] = {
0x68,0x98,0x88,0x88,0x88,0x88,0x88,0x0,0x50,
};
static const BitmapCharRec ch252 = {5,9,-1,0,7,ch252data};
/* char: 0xfb */
static const GLubyte ch251data[] = {
0x68,0x98,0x88,0x88,0x88,0x88,0x88,0x0,0x50,0x20,
};
static const BitmapCharRec ch251 = {5,10,-1,0,7,ch251data};
/* char: 0xfa */
static const GLubyte ch250data[] = {
0x68,0x98,0x88,0x88,0x88,0x88,0x88,0x0,0x20,0x10,
};
static const BitmapCharRec ch250 = {5,10,-1,0,7,ch250data};
/* char: 0xf9 */
static const GLubyte ch249data[] = {
0x68,0x98,0x88,0x88,0x88,0x88,0x88,0x0,0x20,0x40,
};
static const BitmapCharRec ch249 = {5,10,-1,0,7,ch249data};
/* char: 0xf8 */
static const GLubyte ch248data[] = {
0xb8,0x44,0x64,0x54,0x4c,0x44,0x3a,
};
static const BitmapCharRec ch248 = {7,7,0,0,7,ch248data};
/* char: 0xf7 */
static const GLubyte ch247data[] = {
0x20,0x0,0xf8,0x0,0x20,
};
static const BitmapCharRec ch247 = {5,5,-1,-1,7,ch247data};
/* char: 0xf6 */
static const GLubyte ch246data[] = {
0x70,0x88,0x88,0x88,0x88,0x88,0x70,0x0,0x50,
};
static const BitmapCharRec ch246 = {5,9,-1,0,7,ch246data};
/* char: 0xf5 */
static const GLubyte ch245data[] = {
0x70,0x88,0x88,0x88,0x88,0x88,0x70,0x0,0x50,0x28,
};
static const BitmapCharRec ch245 = {5,10,-1,0,7,ch245data};
/* char: 0xf4 */
static const GLubyte ch244data[] = {
0x70,0x88,0x88,0x88,0x88,0x88,0x70,0x0,0x50,0x20,
};
static const BitmapCharRec ch244 = {5,10,-1,0,7,ch244data};
/* char: 0xf3 */
static const GLubyte ch243data[] = {
0x70,0x88,0x88,0x88,0x88,0x88,0x70,0x0,0x20,0x10,
};
static const BitmapCharRec ch243 = {5,10,-1,0,7,ch243data};
/* char: 0xf2 */
static const GLubyte ch242data[] = {
0x70,0x88,0x88,0x88,0x88,0x88,0x70,0x0,0x20,0x40,
};
static const BitmapCharRec ch242 = {5,10,-1,0,7,ch242data};
/* char: 0xf1 */
static const GLubyte ch241data[] = {
0x88,0x88,0x88,0x88,0x88,0xc8,0xb0,0x0,0x50,0x28,
};
static const BitmapCharRec ch241 = {5,10,-1,0,7,ch241data};
/* char: 0xf0 */
static const GLubyte ch240data[] = {
0x70,0x88,0x88,0x88,0x88,0x78,0x8,0x50,0x30,0x68,
};
static const BitmapCharRec ch240 = {5,10,-1,0,7,ch240data};
/* char: 0xef */
static const GLubyte ch239data[] = {
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x0,0xa0,
};
static const BitmapCharRec ch239 = {3,9,0,0,3,ch239data};
/* char: 0xee */
static const GLubyte ch238data[] = {
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x0,0xa0,0x40,
};
static const BitmapCharRec ch238 = {3,10,0,0,3,ch238data};
/* char: 0xed */
static const GLubyte ch237data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x80,0x40,
};
static const BitmapCharRec ch237 = {2,10,-1,0,3,ch237data};
/* char: 0xec */
static const GLubyte ch236data[] = {
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x0,0x40,0x80,
};
static const BitmapCharRec ch236 = {2,10,0,0,3,ch236data};
/* char: 0xeb */
static const GLubyte ch235data[] = {
0x70,0x88,0x80,0xf8,0x88,0x88,0x70,0x0,0x50,
};
static const BitmapCharRec ch235 = {5,9,-1,0,7,ch235data};
/* char: 0xea */
static const GLubyte ch234data[] = {
0x70,0x88,0x80,0xf8,0x88,0x88,0x70,0x0,0x50,0x20,
};
static const BitmapCharRec ch234 = {5,10,-1,0,7,ch234data};
/* char: 0xe9 */
static const GLubyte ch233data[] = {
0x70,0x88,0x80,0xf8,0x88,0x88,0x70,0x0,0x20,0x10,
};
static const BitmapCharRec ch233 = {5,10,-1,0,7,ch233data};
/* char: 0xe8 */
static const GLubyte ch232data[] = {
0x70,0x88,0x80,0xf8,0x88,0x88,0x70,0x0,0x20,0x40,
};
static const BitmapCharRec ch232 = {5,10,-1,0,7,ch232data};
/* char: 0xe7 */
static const GLubyte ch231data[] = {
0x60,0x10,0x20,0x70,0x88,0x80,0x80,0x80,0x88,0x70,
};
static const BitmapCharRec ch231 = {5,10,-1,3,7,ch231data};
/* char: 0xe6 */
static const GLubyte ch230data[] = {
0x77,0x0,0x88,0x80,0x88,0x0,0x7f,0x80,0x8,0x80,0x88,0x80,0x77,0x0,
};
static const BitmapCharRec ch230 = {9,7,-1,0,11,ch230data};
/* char: 0xe5 */
static const GLubyte ch229data[] = {
0x74,0x88,0x88,0x78,0x8,0x88,0x70,0x30,0x48,0x30,
};
static const BitmapCharRec ch229 = {6,10,-1,0,7,ch229data};
/* char: 0xe4 */
static const GLubyte ch228data[] = {
0x74,0x88,0x88,0x78,0x8,0x88,0x70,0x0,0x50,
};
static const BitmapCharRec ch228 = {6,9,-1,0,7,ch228data};
/* char: 0xe3 */
static const GLubyte ch227data[] = {
0x74,0x88,0x88,0x78,0x8,0x88,0x70,0x0,0x50,0x28,
};
static const BitmapCharRec ch227 = {6,10,-1,0,7,ch227data};
/* char: 0xe2 */
static const GLubyte ch226data[] = {
0x74,0x88,0x88,0x78,0x8,0x88,0x70,0x0,0x50,0x20,
};
static const BitmapCharRec ch226 = {6,10,-1,0,7,ch226data};
/* char: 0xe1 */
static const GLubyte ch225data[] = {
0x74,0x88,0x88,0x78,0x8,0x88,0x70,0x0,0x20,0x10,
};
static const BitmapCharRec ch225 = {6,10,-1,0,7,ch225data};
/* char: 0xe0 */
static const GLubyte ch224data[] = {
0x74,0x88,0x88,0x78,0x8,0x88,0x70,0x0,0x10,0x20,
};
static const BitmapCharRec ch224 = {6,10,-1,0,7,ch224data};
/* char: 0xdf */
static const GLubyte ch223data[] = {
0xb0,0x88,0x88,0x88,0xb0,0x88,0x88,0x88,0x70,
};
static const BitmapCharRec ch223 = {5,9,-1,0,7,ch223data};
/* char: 0xde */
static const GLubyte ch222data[] = {
0x80,0x80,0xf8,0x84,0x84,0x84,0xf8,0x80,0x80,
};
static const BitmapCharRec ch222 = {6,9,-1,0,8,ch222data};
/* char: 0xdd */
static const GLubyte ch221data[] = {
0x10,0x10,0x10,0x10,0x28,0x44,0x44,0x82,0x82,0x0,0x10,0x8,
};
static const BitmapCharRec ch221 = {7,12,-1,0,9,ch221data};
/* char: 0xdc */
static const GLubyte ch220data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x0,0x48,
};
static const BitmapCharRec ch220 = {6,11,-1,0,8,ch220data};
/* char: 0xdb */
static const GLubyte ch219data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x0,0x28,0x10,
};
static const BitmapCharRec ch219 = {6,12,-1,0,8,ch219data};
/* char: 0xda */
static const GLubyte ch218data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x0,0x10,0x8,
};
static const BitmapCharRec ch218 = {6,12,-1,0,8,ch218data};
/* char: 0xd9 */
static const GLubyte ch217data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x0,0x10,0x20,
};
static const BitmapCharRec ch217 = {6,12,-1,0,8,ch217data};
/* char: 0xd8 */
static const GLubyte ch216data[] = {
0x80,0x0,0x5e,0x0,0x21,0x0,0x50,0x80,0x48,0x80,0x44,0x80,0x44,0x80,0x42,0x80,
0x21,0x0,0x1e,0x80,0x0,0x40,
};
static const BitmapCharRec ch216 = {10,11,0,1,10,ch216data};
/* char: 0xd7 */
static const GLubyte ch215data[] = {
0x88,0x50,0x20,0x50,0x88,
};
static const BitmapCharRec ch215 = {5,5,-1,-1,7,ch215data};
/* char: 0xd6 */
static const GLubyte ch214data[] = {
0x3c,0x42,0x81,0x81,0x81,0x81,0x81,0x42,0x3c,0x0,0x24,
};
static const BitmapCharRec ch214 = {8,11,-1,0,10,ch214data};
/* char: 0xd5 */
static const GLubyte ch213data[] = {
0x3c,0x42,0x81,0x81,0x81,0x81,0x81,0x42,0x3c,0x0,0x28,0x14,
};
static const BitmapCharRec ch213 = {8,12,-1,0,10,ch213data};
/* char: 0xd4 */
static const GLubyte ch212data[] = {
0x3c,0x42,0x81,0x81,0x81,0x81,0x81,0x42,0x3c,0x0,0x14,0x8,
};
static const BitmapCharRec ch212 = {8,12,-1,0,10,ch212data};
/* char: 0xd3 */
static const GLubyte ch211data[] = {
0x3c,0x42,0x81,0x81,0x81,0x81,0x81,0x42,0x3c,0x0,0x8,0x4,
};
static const BitmapCharRec ch211 = {8,12,-1,0,10,ch211data};
/* char: 0xd2 */
static const GLubyte ch210data[] = {
0x3c,0x42,0x81,0x81,0x81,0x81,0x81,0x42,0x3c,0x0,0x8,0x10,
};
static const BitmapCharRec ch210 = {8,12,-1,0,10,ch210data};
/* char: 0xd1 */
static const GLubyte ch209data[] = {
0x82,0x86,0x8a,0x8a,0x92,0xa2,0xa2,0xc2,0x82,0x0,0x28,0x14,
};
static const BitmapCharRec ch209 = {7,12,-1,0,9,ch209data};
/* char: 0xd0 */
static const GLubyte ch208data[] = {
0x7c,0x42,0x41,0x41,0xf1,0x41,0x41,0x42,0x7c,
};
static const BitmapCharRec ch208 = {8,9,0,0,9,ch208data};
/* char: 0xcf */
static const GLubyte ch207data[] = {
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x0,0xa0,
};
static const BitmapCharRec ch207 = {3,11,0,0,3,ch207data};
/* char: 0xce */
static const GLubyte ch206data[] = {
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x0,0xa0,0x40,
};
static const BitmapCharRec ch206 = {3,12,0,0,3,ch206data};
/* char: 0xcd */
static const GLubyte ch205data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x80,0x40,
};
static const BitmapCharRec ch205 = {2,12,-1,0,3,ch205data};
/* char: 0xcc */
static const GLubyte ch204data[] = {
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x0,0x40,0x80,
};
static const BitmapCharRec ch204 = {2,12,0,0,3,ch204data};
/* char: 0xcb */
static const GLubyte ch203data[] = {
0xfc,0x80,0x80,0x80,0xfc,0x80,0x80,0x80,0xfc,0x0,0x28,
};
static const BitmapCharRec ch203 = {6,11,-1,0,8,ch203data};
/* char: 0xca */
static const GLubyte ch202data[] = {
0xfc,0x80,0x80,0x80,0xfc,0x80,0x80,0x80,0xfc,0x0,0x28,0x10,
};
static const BitmapCharRec ch202 = {6,12,-1,0,8,ch202data};
/* char: 0xc9 */
static const GLubyte ch201data[] = {
0xfc,0x80,0x80,0x80,0xfc,0x80,0x80,0x80,0xfc,0x0,0x10,0x8,
};
static const BitmapCharRec ch201 = {6,12,-1,0,8,ch201data};
/* char: 0xc8 */
static const GLubyte ch200data[] = {
0xfc,0x80,0x80,0x80,0xfc,0x80,0x80,0x80,0xfc,0x0,0x10,0x20,
};
static const BitmapCharRec ch200 = {6,12,-1,0,8,ch200data};
/* char: 0xc7 */
static const GLubyte ch199data[] = {
0x30,0x8,0x8,0x3c,0x42,0x80,0x80,0x80,0x80,0x80,0x42,0x3c,
};
static const BitmapCharRec ch199 = {7,12,-1,3,9,ch199data};
/* char: 0xc6 */
static const GLubyte ch198data[] = {
0x8f,0x80,0x88,0x0,0x88,0x0,0x78,0x0,0x4f,0x80,0x48,0x0,0x28,0x0,0x28,0x0,
0x1f,0x80,
};
static const BitmapCharRec ch198 = {9,9,-1,0,11,ch198data};
/* char: 0xc5 */
static const GLubyte ch197data[] = {
0x82,0x82,0x82,0x7c,0x44,0x44,0x28,0x10,0x10,0x10,0x28,0x10,
};
static const BitmapCharRec ch197 = {7,12,-1,0,9,ch197data};
/* char: 0xc4 */
static const GLubyte ch196data[] = {
0x82,0x82,0x82,0x7c,0x44,0x44,0x28,0x10,0x10,0x0,0x28,
};
static const BitmapCharRec ch196 = {7,11,-1,0,9,ch196data};
/* char: 0xc3 */
static const GLubyte ch195data[] = {
0x82,0x82,0x82,0x7c,0x44,0x44,0x28,0x10,0x10,0x0,0x28,0x14,
};
static const BitmapCharRec ch195 = {7,12,-1,0,9,ch195data};
/* char: 0xc2 */
static const GLubyte ch194data[] = {
0x82,0x82,0x82,0x7c,0x44,0x44,0x28,0x10,0x10,0x0,0x28,0x10,
};
static const BitmapCharRec ch194 = {7,12,-1,0,9,ch194data};
/* char: 0xc1 */
static const GLubyte ch193data[] = {
0x82,0x82,0x82,0x7c,0x44,0x44,0x28,0x10,0x10,0x0,0x10,0x8,
};
static const BitmapCharRec ch193 = {7,12,-1,0,9,ch193data};
/* char: 0xc0 */
static const GLubyte ch192data[] = {
0x82,0x82,0x82,0x7c,0x44,0x44,0x28,0x10,0x10,0x0,0x10,0x20,
};
static const BitmapCharRec ch192 = {7,12,-1,0,9,ch192data};
/* char: 0xbf */
static const GLubyte ch191data[] = {
0x70,0x88,0x88,0x40,0x40,0x20,0x20,0x0,0x20,
};
static const BitmapCharRec ch191 = {5,9,-1,3,7,ch191data};
/* char: 0xbe */
static const GLubyte ch190data[] = {
0x21,0x0,0x17,0x80,0x15,0x0,0xb,0x0,0xc9,0x0,0x24,0x0,0x44,0x0,0x22,0x0,
0xe1,0x0,
};
static const BitmapCharRec ch190 = {9,9,0,0,10,ch190data};
/* char: 0xbd */
static const GLubyte ch189data[] = {
0x47,0x80,0x22,0x0,0x11,0x0,0x14,0x80,0x4b,0x0,0x48,0x0,0x44,0x0,0xc2,0x0,
0x41,0x0,
};
static const BitmapCharRec ch189 = {9,9,0,0,10,ch189data};
/* char: 0xbc */
static const GLubyte ch188data[] = {
0x41,0x0,0x27,0x80,0x15,0x0,0x13,0x0,0x49,0x0,0x44,0x0,0x44,0x0,0xc2,0x0,
0x41,0x0,
};
static const BitmapCharRec ch188 = {9,9,0,0,10,ch188data};
/* char: 0xbb */
static const GLubyte ch187data[] = {
0xa0,0x50,0x28,0x50,0xa0,
};
static const BitmapCharRec ch187 = {5,5,-1,-1,7,ch187data};
/* char: 0xba */
static const GLubyte ch186data[] = {
0xe0,0x0,0xe0,0xa0,0xe0,
};
static const BitmapCharRec ch186 = {3,5,-1,-4,5,ch186data};
/* char: 0xb9 */
static const GLubyte ch185data[] = {
0x40,0x40,0x40,0xc0,0x40,
};
static const BitmapCharRec ch185 = {2,5,-1,-3,4,ch185data};
/* char: 0xb8 */
static const GLubyte ch184data[] = {
0xc0,0x20,0x20,0x40,
};
static const BitmapCharRec ch184 = {3,4,0,3,3,ch184data};
/* char: 0xb7 */
static const GLubyte ch183data[] = {
0x80,
};
static const BitmapCharRec ch183 = {1,1,-1,-3,3,ch183data};
/* char: 0xb6 */
static const GLubyte ch182data[] = {
0x28,0x28,0x28,0x28,0x28,0x28,0x68,0xe8,0xe8,0xe8,0x68,0x3c,
};
static const BitmapCharRec ch182 = {6,12,0,3,7,ch182data};
/* char: 0xb5 */
static const GLubyte ch181data[] = {
0x80,0x80,0x80,0xe8,0x98,0x88,0x88,0x88,0x88,0x88,
};
static const BitmapCharRec ch181 = {5,10,-1,3,7,ch181data};
/* char: 0xb4 */
static const GLubyte ch180data[] = {
0x80,0x40,
};
static const BitmapCharRec ch180 = {2,2,0,-8,2,ch180data};
/* char: 0xb3 */
static const GLubyte ch179data[] = {
0xc0,0x20,0x40,0x20,0xe0,
};
static const BitmapCharRec ch179 = {3,5,0,-3,4,ch179data};
/* char: 0xb2 */
static const GLubyte ch178data[] = {
0xf0,0x40,0x20,0x90,0x60,
};
static const BitmapCharRec ch178 = {4,5,0,-3,4,ch178data};
/* char: 0xb1 */
static const GLubyte ch177data[] = {
0xf8,0x0,0x20,0x20,0xf8,0x20,0x20,
};
static const BitmapCharRec ch177 = {5,7,-1,0,7,ch177data};
/* char: 0xb0 */
static const GLubyte ch176data[] = {
0x60,0x90,0x90,0x60,
};
static const BitmapCharRec ch176 = {4,4,0,-4,5,ch176data};
/* char: 0xaf */
static const GLubyte ch175data[] = {
0xf0,
};
static const BitmapCharRec ch175 = {4,1,0,-8,4,ch175data};
/* char: 0xae */
static const GLubyte ch174data[] = {
0x3e,0x0,0x41,0x0,0x94,0x80,0x94,0x80,0x98,0x80,0x94,0x80,0x9c,0x80,0x41,0x0,
0x3e,0x0,
};
static const BitmapCharRec ch174 = {9,9,-1,0,11,ch174data};
/* char: 0xad */
static const GLubyte ch173data[] = {
0xf0,
};
static const BitmapCharRec ch173 = {4,1,0,-3,5,ch173data};
/* char: 0xac */
static const GLubyte ch172data[] = {
0x4,0x4,0x4,0xfc,
};
static const BitmapCharRec ch172 = {6,4,-1,-2,8,ch172data};
/* char: 0xab */
static const GLubyte ch171data[] = {
0x28,0x50,0xa0,0x50,0x28,
};
static const BitmapCharRec ch171 = {5,5,-1,-1,7,ch171data};
/* char: 0xaa */
static const GLubyte ch170data[] = {
0xe0,0x0,0xa0,0x20,0xe0,
};
static const BitmapCharRec ch170 = {3,5,-1,-4,5,ch170data};
/* char: 0xa9 */
static const GLubyte ch169data[] = {
0x3e,0x0,0x41,0x0,0x9c,0x80,0xa2,0x80,0xa0,0x80,0xa2,0x80,0x9c,0x80,0x41,0x0,
0x3e,0x0,
};
static const BitmapCharRec ch169 = {9,9,-1,0,11,ch169data};
/* char: 0xa8 */
static const GLubyte ch168data[] = {
0xa0,
};
static const BitmapCharRec ch168 = {3,1,0,-8,3,ch168data};
/* char: 0xa7 */
static const GLubyte ch167data[] = {
0x70,0x88,0x8,0x30,0x48,0x88,0x88,0x90,0x60,0x80,0x88,0x70,
};
static const BitmapCharRec ch167 = {5,12,0,3,6,ch167data};
/* char: 0xa6 */
static const GLubyte ch166data[] = {
0x80,0x80,0x80,0x80,0x0,0x0,0x0,0x80,0x80,0x80,0x80,
};
static const BitmapCharRec ch166 = {1,11,-1,2,3,ch166data};
/* char: 0xa5 */
static const GLubyte ch165data[] = {
0x20,0x20,0xf8,0x20,0xf8,0x20,0x50,0x88,0x88,
};
static const BitmapCharRec ch165 = {5,9,-1,0,7,ch165data};
/* char: 0xa4 */
static const GLubyte ch164data[] = {
0x84,0x78,0x48,0x48,0x78,0x84,
};
static const BitmapCharRec ch164 = {6,6,0,-1,7,ch164data};
/* char: 0xa3 */
static const GLubyte ch163data[] = {
0xb0,0x48,0x20,0x20,0xf0,0x40,0x40,0x48,0x30,
};
static const BitmapCharRec ch163 = {5,9,-1,0,7,ch163data};
/* char: 0xa2 */
static const GLubyte ch162data[] = {
0x40,0x70,0xc8,0xa0,0xa0,0xa0,0xa8,0x70,0x10,
};
static const BitmapCharRec ch162 = {5,9,-1,1,7,ch162data};
/* char: 0xa1 */
static const GLubyte ch161data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x80,
};
static const BitmapCharRec ch161 = {1,10,-1,3,3,ch161data};
/* char: 0xa0 */
#ifdef _WIN32
/* XXX Work around Microsoft OpenGL 1.1 bug where glBitmap with
a height or width of zero does not advance the raster position
as specified by OpenGL. (Cosmo OpenGL does not have this bug.) */
static const GLubyte ch160data[] = { 0x0 };
static const BitmapCharRec ch160 = {1,1,0,0,4,ch160data};
#else
static const BitmapCharRec ch160 = {0,0,0,0,4,0};
#endif
/* char: 0x7e '~' */
static const GLubyte ch126data[] = {
0x98,0x64,
};
static const BitmapCharRec ch126 = {6,2,0,-3,7,ch126data};
/* char: 0x7d '}' */
static const GLubyte ch125data[] = {
0xc0,0x20,0x20,0x20,0x20,0x20,0x10,0x20,0x20,0x20,0x20,0xc0,
};
static const BitmapCharRec ch125 = {4,12,0,3,4,ch125data};
/* char: 0x7c '|' */
static const GLubyte ch124data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
};
static const BitmapCharRec ch124 = {1,12,-1,3,3,ch124data};
/* char: 0x7b '{' */
static const GLubyte ch123data[] = {
0x30,0x40,0x40,0x40,0x40,0x40,0x80,0x40,0x40,0x40,0x40,0x30,
};
static const BitmapCharRec ch123 = {4,12,0,3,4,ch123data};
/* char: 0x7a 'z' */
static const GLubyte ch122data[] = {
0xf0,0x80,0x40,0x40,0x20,0x10,0xf0,
};
static const BitmapCharRec ch122 = {4,7,-1,0,6,ch122data};
/* char: 0x79 'y' */
static const GLubyte ch121data[] = {
0x80,0x40,0x20,0x20,0x50,0x50,0x90,0x88,0x88,0x88,
};
static const BitmapCharRec ch121 = {5,10,-1,3,7,ch121data};
/* char: 0x78 'x' */
static const GLubyte ch120data[] = {
0x84,0x84,0x48,0x30,0x30,0x48,0x84,
};
static const BitmapCharRec ch120 = {6,7,0,0,6,ch120data};
/* char: 0x77 'w' */
static const GLubyte ch119data[] = {
0x22,0x0,0x22,0x0,0x55,0x0,0x49,0x0,0x49,0x0,0x88,0x80,0x88,0x80,
};
static const BitmapCharRec ch119 = {9,7,0,0,9,ch119data};
/* char: 0x76 'v' */
static const GLubyte ch118data[] = {
0x20,0x20,0x50,0x50,0x88,0x88,0x88,
};
static const BitmapCharRec ch118 = {5,7,-1,0,7,ch118data};
/* char: 0x75 'u' */
static const GLubyte ch117data[] = {
0x68,0x98,0x88,0x88,0x88,0x88,0x88,
};
static const BitmapCharRec ch117 = {5,7,-1,0,7,ch117data};
/* char: 0x74 't' */
static const GLubyte ch116data[] = {
0x60,0x40,0x40,0x40,0x40,0x40,0xe0,0x40,0x40,
};
static const BitmapCharRec ch116 = {3,9,0,0,3,ch116data};
/* char: 0x73 's' */
static const GLubyte ch115data[] = {
0x60,0x90,0x10,0x60,0x80,0x90,0x60,
};
static const BitmapCharRec ch115 = {4,7,-1,0,6,ch115data};
/* char: 0x72 'r' */
static const GLubyte ch114data[] = {
0x80,0x80,0x80,0x80,0x80,0xc0,0xa0,
};
static const BitmapCharRec ch114 = {3,7,-1,0,4,ch114data};
/* char: 0x71 'q' */
static const GLubyte ch113data[] = {
0x8,0x8,0x8,0x68,0x98,0x88,0x88,0x88,0x98,0x68,
};
static const BitmapCharRec ch113 = {5,10,-1,3,7,ch113data};
/* char: 0x70 'p' */
static const GLubyte ch112data[] = {
0x80,0x80,0x80,0xb0,0xc8,0x88,0x88,0x88,0xc8,0xb0,
};
static const BitmapCharRec ch112 = {5,10,-1,3,7,ch112data};
/* char: 0x6f 'o' */
static const GLubyte ch111data[] = {
0x70,0x88,0x88,0x88,0x88,0x88,0x70,
};
static const BitmapCharRec ch111 = {5,7,-1,0,7,ch111data};
/* char: 0x6e 'n' */
static const GLubyte ch110data[] = {
0x88,0x88,0x88,0x88,0x88,0xc8,0xb0,
};
static const BitmapCharRec ch110 = {5,7,-1,0,7,ch110data};
/* char: 0x6d 'm' */
static const GLubyte ch109data[] = {
0x92,0x92,0x92,0x92,0x92,0xda,0xa4,
};
static const BitmapCharRec ch109 = {7,7,-1,0,9,ch109data};
/* char: 0x6c 'l' */
static const GLubyte ch108data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
};
static const BitmapCharRec ch108 = {1,9,-1,0,3,ch108data};
/* char: 0x6b 'k' */
static const GLubyte ch107data[] = {
0x88,0x90,0xa0,0xc0,0xc0,0xa0,0x90,0x80,0x80,
};
static const BitmapCharRec ch107 = {5,9,-1,0,6,ch107data};
/* char: 0x6a 'j' */
static const GLubyte ch106data[] = {
0x80,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x0,0x40,
};
static const BitmapCharRec ch106 = {2,12,0,3,3,ch106data};
/* char: 0x69 'i' */
static const GLubyte ch105data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x80,
};
static const BitmapCharRec ch105 = {1,9,-1,0,3,ch105data};
/* char: 0x68 'h' */
static const GLubyte ch104data[] = {
0x88,0x88,0x88,0x88,0x88,0xc8,0xb0,0x80,0x80,
};
static const BitmapCharRec ch104 = {5,9,-1,0,7,ch104data};
/* char: 0x67 'g' */
static const GLubyte ch103data[] = {
0x70,0x88,0x8,0x68,0x98,0x88,0x88,0x88,0x98,0x68,
};
static const BitmapCharRec ch103 = {5,10,-1,3,7,ch103data};
/* char: 0x66 'f' */
static const GLubyte ch102data[] = {
0x40,0x40,0x40,0x40,0x40,0x40,0xe0,0x40,0x30,
};
static const BitmapCharRec ch102 = {4,9,0,0,3,ch102data};
/* char: 0x65 'e' */
static const GLubyte ch101data[] = {
0x70,0x88,0x80,0xf8,0x88,0x88,0x70,
};
static const BitmapCharRec ch101 = {5,7,-1,0,7,ch101data};
/* char: 0x64 'd' */
static const GLubyte ch100data[] = {
0x68,0x98,0x88,0x88,0x88,0x98,0x68,0x8,0x8,
};
static const BitmapCharRec ch100 = {5,9,-1,0,7,ch100data};
/* char: 0x63 'c' */
static const GLubyte ch99data[] = {
0x70,0x88,0x80,0x80,0x80,0x88,0x70,
};
static const BitmapCharRec ch99 = {5,7,-1,0,7,ch99data};
/* char: 0x62 'b' */
static const GLubyte ch98data[] = {
0xb0,0xc8,0x88,0x88,0x88,0xc8,0xb0,0x80,0x80,
};
static const BitmapCharRec ch98 = {5,9,-1,0,7,ch98data};
/* char: 0x61 'a' */
static const GLubyte ch97data[] = {
0x74,0x88,0x88,0x78,0x8,0x88,0x70,
};
static const BitmapCharRec ch97 = {6,7,-1,0,7,ch97data};
/* char: 0x60 '`' */
static const GLubyte ch96data[] = {
0xc0,0x80,0x40,
};
static const BitmapCharRec ch96 = {2,3,0,-6,3,ch96data};
/* char: 0x5f '_' */
static const GLubyte ch95data[] = {
0xfe,
};
static const BitmapCharRec ch95 = {7,1,0,2,7,ch95data};
/* char: 0x5e '^' */
static const GLubyte ch94data[] = {
0x88,0x50,0x20,
};
static const BitmapCharRec ch94 = {5,3,0,-5,6,ch94data};
/* char: 0x5d ']' */
static const GLubyte ch93data[] = {
0xc0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xc0,
};
static const BitmapCharRec ch93 = {2,12,0,3,3,ch93data};
/* char: 0x5c '\' */
static const GLubyte ch92data[] = {
0x10,0x10,0x20,0x20,0x20,0x40,0x40,0x80,0x80,
};
static const BitmapCharRec ch92 = {4,9,0,0,4,ch92data};
/* char: 0x5b '[' */
static const GLubyte ch91data[] = {
0xc0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xc0,
};
static const BitmapCharRec ch91 = {2,12,-1,3,3,ch91data};
/* char: 0x5a 'Z' */
static const GLubyte ch90data[] = {
0xfe,0x80,0x40,0x20,0x10,0x8,0x4,0x2,0xfe,
};
static const BitmapCharRec ch90 = {7,9,-1,0,9,ch90data};
/* char: 0x59 'Y' */
static const GLubyte ch89data[] = {
0x10,0x10,0x10,0x10,0x28,0x44,0x44,0x82,0x82,
};
static const BitmapCharRec ch89 = {7,9,-1,0,9,ch89data};
/* char: 0x58 'X' */
static const GLubyte ch88data[] = {
0x82,0x44,0x44,0x28,0x10,0x28,0x44,0x44,0x82,
};
static const BitmapCharRec ch88 = {7,9,-1,0,9,ch88data};
/* char: 0x57 'W' */
static const GLubyte ch87data[] = {
0x22,0x0,0x22,0x0,0x22,0x0,0x55,0x0,0x55,0x0,0x49,0x0,0x88,0x80,0x88,0x80,
0x88,0x80,
};
static const BitmapCharRec ch87 = {9,9,-1,0,11,ch87data};
/* char: 0x56 'V' */
static const GLubyte ch86data[] = {
0x10,0x10,0x28,0x28,0x44,0x44,0x44,0x82,0x82,
};
static const BitmapCharRec ch86 = {7,9,-1,0,9,ch86data};
/* char: 0x55 'U' */
static const GLubyte ch85data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,
};
static const BitmapCharRec ch85 = {6,9,-1,0,8,ch85data};
/* char: 0x54 'T' */
static const GLubyte ch84data[] = {
0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0xfe,
};
static const BitmapCharRec ch84 = {7,9,0,0,7,ch84data};
/* char: 0x53 'S' */
static const GLubyte ch83data[] = {
0x78,0x84,0x84,0x4,0x18,0x60,0x80,0x84,0x78,
};
static const BitmapCharRec ch83 = {6,9,-1,0,8,ch83data};
/* char: 0x52 'R' */
static const GLubyte ch82data[] = {
0x84,0x84,0x84,0x88,0xf8,0x84,0x84,0x84,0xf8,
};
static const BitmapCharRec ch82 = {6,9,-1,0,8,ch82data};
/* char: 0x51 'Q' */
static const GLubyte ch81data[] = {
0x3d,0x42,0x85,0x89,0x81,0x81,0x81,0x42,0x3c,
};
static const BitmapCharRec ch81 = {8,9,-1,0,10,ch81data};
/* char: 0x50 'P' */
static const GLubyte ch80data[] = {
0x80,0x80,0x80,0x80,0xf8,0x84,0x84,0x84,0xf8,
};
static const BitmapCharRec ch80 = {6,9,-1,0,8,ch80data};
/* char: 0x4f 'O' */
static const GLubyte ch79data[] = {
0x3c,0x42,0x81,0x81,0x81,0x81,0x81,0x42,0x3c,
};
static const BitmapCharRec ch79 = {8,9,-1,0,10,ch79data};
/* char: 0x4e 'N' */
static const GLubyte ch78data[] = {
0x82,0x86,0x8a,0x8a,0x92,0xa2,0xa2,0xc2,0x82,
};
static const BitmapCharRec ch78 = {7,9,-1,0,9,ch78data};
/* char: 0x4d 'M' */
static const GLubyte ch77data[] = {
0x88,0x80,0x88,0x80,0x94,0x80,0x94,0x80,0xa2,0x80,0xa2,0x80,0xc1,0x80,0xc1,0x80,
0x80,0x80,
};
static const BitmapCharRec ch77 = {9,9,-1,0,11,ch77data};
/* char: 0x4c 'L' */
static const GLubyte ch76data[] = {
0xf8,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
};
static const BitmapCharRec ch76 = {5,9,-1,0,7,ch76data};
/* char: 0x4b 'K' */
static const GLubyte ch75data[] = {
0x82,0x84,0x88,0x90,0xe0,0xa0,0x90,0x88,0x84,
};
static const BitmapCharRec ch75 = {7,9,-1,0,8,ch75data};
/* char: 0x4a 'J' */
static const GLubyte ch74data[] = {
0x70,0x88,0x88,0x8,0x8,0x8,0x8,0x8,0x8,
};
static const BitmapCharRec ch74 = {5,9,-1,0,7,ch74data};
/* char: 0x49 'I' */
static const GLubyte ch73data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
};
static const BitmapCharRec ch73 = {1,9,-1,0,3,ch73data};
/* char: 0x48 'H' */
static const GLubyte ch72data[] = {
0x82,0x82,0x82,0x82,0xfe,0x82,0x82,0x82,0x82,
};
static const BitmapCharRec ch72 = {7,9,-1,0,9,ch72data};
/* char: 0x47 'G' */
static const GLubyte ch71data[] = {
0x3a,0x46,0x82,0x82,0x8e,0x80,0x80,0x42,0x3c,
};
static const BitmapCharRec ch71 = {7,9,-1,0,9,ch71data};
/* char: 0x46 'F' */
static const GLubyte ch70data[] = {
0x80,0x80,0x80,0x80,0xf8,0x80,0x80,0x80,0xfc,
};
static const BitmapCharRec ch70 = {6,9,-1,0,8,ch70data};
/* char: 0x45 'E' */
static const GLubyte ch69data[] = {
0xfc,0x80,0x80,0x80,0xfc,0x80,0x80,0x80,0xfc,
};
static const BitmapCharRec ch69 = {6,9,-1,0,8,ch69data};
/* char: 0x44 'D' */
static const GLubyte ch68data[] = {
0xf8,0x84,0x82,0x82,0x82,0x82,0x82,0x84,0xf8,
};
static const BitmapCharRec ch68 = {7,9,-1,0,9,ch68data};
/* char: 0x43 'C' */
static const GLubyte ch67data[] = {
0x3c,0x42,0x80,0x80,0x80,0x80,0x80,0x42,0x3c,
};
static const BitmapCharRec ch67 = {7,9,-1,0,9,ch67data};
/* char: 0x42 'B' */
static const GLubyte ch66data[] = {
0xf8,0x84,0x84,0x84,0xf8,0x84,0x84,0x84,0xf8,
};
static const BitmapCharRec ch66 = {6,9,-1,0,8,ch66data};
/* char: 0x41 'A' */
static const GLubyte ch65data[] = {
0x82,0x82,0x82,0x7c,0x44,0x44,0x28,0x28,0x10,
};
static const BitmapCharRec ch65 = {7,9,-1,0,9,ch65data};
/* char: 0x40 '@' */
static const GLubyte ch64data[] = {
0x3e,0x0,0x40,0x0,0x9b,0x0,0xa6,0x80,0xa2,0x40,0xa2,0x40,0x92,0x40,0x4d,0x40,
0x60,0x80,0x1f,0x0,
};
static const BitmapCharRec ch64 = {10,10,-1,1,12,ch64data};
/* char: 0x3f '?' */
static const GLubyte ch63data[] = {
0x20,0x0,0x20,0x20,0x10,0x10,0x88,0x88,0x70,
};
static const BitmapCharRec ch63 = {5,9,-1,0,7,ch63data};
/* char: 0x3e '>' */
static const GLubyte ch62data[] = {
0xc0,0x30,0xc,0x30,0xc0,
};
static const BitmapCharRec ch62 = {6,5,-1,-1,7,ch62data};
/* char: 0x3d '=' */
static const GLubyte ch61data[] = {
0xf8,0x0,0xf8,
};
static const BitmapCharRec ch61 = {5,3,-1,-2,7,ch61data};
/* char: 0x3c '<' */
static const GLubyte ch60data[] = {
0xc,0x30,0xc0,0x30,0xc,
};
static const BitmapCharRec ch60 = {6,5,0,-1,7,ch60data};
/* char: 0x3b ';' */
static const GLubyte ch59data[] = {
0x80,0x40,0x40,0x0,0x0,0x0,0x0,0x40,
};
static const BitmapCharRec ch59 = {2,8,0,2,3,ch59data};
/* char: 0x3a ':' */
static const GLubyte ch58data[] = {
0x80,0x0,0x0,0x0,0x0,0x80,
};
static const BitmapCharRec ch58 = {1,6,-1,0,3,ch58data};
/* char: 0x39 '9' */
static const GLubyte ch57data[] = {
0x70,0x88,0x8,0x8,0x78,0x88,0x88,0x88,0x70,
};
static const BitmapCharRec ch57 = {5,9,-1,0,7,ch57data};
/* char: 0x38 '8' */
static const GLubyte ch56data[] = {
0x70,0x88,0x88,0x88,0x88,0x70,0x88,0x88,0x70,
};
static const BitmapCharRec ch56 = {5,9,-1,0,7,ch56data};
/* char: 0x37 '7' */
static const GLubyte ch55data[] = {
0x40,0x40,0x20,0x20,0x20,0x10,0x10,0x8,0xf8,
};
static const BitmapCharRec ch55 = {5,9,-1,0,7,ch55data};
/* char: 0x36 '6' */
static const GLubyte ch54data[] = {
0x70,0x88,0x88,0x88,0xc8,0xb0,0x80,0x88,0x70,
};
static const BitmapCharRec ch54 = {5,9,-1,0,7,ch54data};
/* char: 0x35 '5' */
static const GLubyte ch53data[] = {
0x70,0x88,0x88,0x8,0x8,0xf0,0x80,0x80,0xf8,
};
static const BitmapCharRec ch53 = {5,9,-1,0,7,ch53data};
/* char: 0x34 '4' */
static const GLubyte ch52data[] = {
0x8,0x8,0xfc,0x88,0x48,0x28,0x28,0x18,0x8,
};
static const BitmapCharRec ch52 = {6,9,0,0,7,ch52data};
/* char: 0x33 '3' */
static const GLubyte ch51data[] = {
0x70,0x88,0x88,0x8,0x8,0x30,0x8,0x88,0x70,
};
static const BitmapCharRec ch51 = {5,9,-1,0,7,ch51data};
/* char: 0x32 '2' */
static const GLubyte ch50data[] = {
0xf8,0x80,0x80,0x40,0x20,0x10,0x8,0x88,0x70,
};
static const BitmapCharRec ch50 = {5,9,-1,0,7,ch50data};
/* char: 0x31 '1' */
static const GLubyte ch49data[] = {
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xe0,0x20,
};
static const BitmapCharRec ch49 = {3,9,-1,0,7,ch49data};
/* char: 0x30 '0' */
static const GLubyte ch48data[] = {
0x70,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x70,
};
static const BitmapCharRec ch48 = {5,9,-1,0,7,ch48data};
/* char: 0x2f '/' */
static const GLubyte ch47data[] = {
0x80,0x80,0x40,0x40,0x40,0x20,0x20,0x10,0x10,
};
static const BitmapCharRec ch47 = {4,9,0,0,4,ch47data};
/* char: 0x2e '.' */
static const GLubyte ch46data[] = {
0x80,
};
static const BitmapCharRec ch46 = {1,1,-1,0,3,ch46data};
/* char: 0x2d '-' */
static const GLubyte ch45data[] = {
0xf8,
};
static const BitmapCharRec ch45 = {5,1,-1,-3,8,ch45data};
/* char: 0x2c ',' */
static const GLubyte ch44data[] = {
0x80,0x40,0x40,
};
static const BitmapCharRec ch44 = {2,3,-1,2,4,ch44data};
/* char: 0x2b '+' */
static const GLubyte ch43data[] = {
0x20,0x20,0xf8,0x20,0x20,
};
static const BitmapCharRec ch43 = {5,5,-1,-1,7,ch43data};
/* char: 0x2a '*' */
static const GLubyte ch42data[] = {
0xa0,0x40,0xa0,
};
static const BitmapCharRec ch42 = {3,3,-1,-6,5,ch42data};
/* char: 0x29 ')' */
static const GLubyte ch41data[] = {
0x80,0x40,0x40,0x20,0x20,0x20,0x20,0x20,0x20,0x40,0x40,0x80,
};
static const BitmapCharRec ch41 = {3,12,0,3,4,ch41data};
/* char: 0x28 '(' */
static const GLubyte ch40data[] = {
0x20,0x40,0x40,0x80,0x80,0x80,0x80,0x80,0x80,0x40,0x40,0x20,
};
static const BitmapCharRec ch40 = {3,12,-1,3,4,ch40data};
/* char: 0x27 ''' */
static const GLubyte ch39data[] = {
0x80,0x40,0xc0,
};
static const BitmapCharRec ch39 = {2,3,-1,-6,3,ch39data};
/* char: 0x26 '&' */
static const GLubyte ch38data[] = {
0x72,0x8c,0x84,0x8a,0x50,0x30,0x48,0x48,0x30,
};
static const BitmapCharRec ch38 = {7,9,-1,0,9,ch38data};
/* char: 0x25 '%' */
static const GLubyte ch37data[] = {
0x23,0x0,0x14,0x80,0x14,0x80,0x13,0x0,0x8,0x0,0x68,0x0,0x94,0x0,0x94,0x0,
0x62,0x0,
};
static const BitmapCharRec ch37 = {9,9,-1,0,11,ch37data};
/* char: 0x24 '$' */
static const GLubyte ch36data[] = {
0x20,0x70,0xa8,0xa8,0x28,0x70,0xa0,0xa8,0x70,0x20,
};
static const BitmapCharRec ch36 = {5,10,-1,1,7,ch36data};
/* char: 0x23 '#' */
static const GLubyte ch35data[] = {
0x50,0x50,0x50,0xfc,0x28,0xfc,0x28,0x28,
};
static const BitmapCharRec ch35 = {6,8,0,0,7,ch35data};
/* char: 0x22 '"' */
static const GLubyte ch34data[] = {
0xa0,0xa0,0xa0,
};
static const BitmapCharRec ch34 = {3,3,-1,-6,5,ch34data};
/* char: 0x21 '!' */
static const GLubyte ch33data[] = {
0x80,0x0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
};
static const BitmapCharRec ch33 = {1,9,-1,0,3,ch33data};
/* char: 0x20 ' ' */
#ifdef _WIN32
/* XXX Work around Microsoft OpenGL 1.1 bug where glBitmap with
a height or width of zero does not advance the raster position
as specified by OpenGL. (Cosmo OpenGL does not have this bug.) */
static const GLubyte ch32data[] = { 0x0 };
static const BitmapCharRec ch32 = {1,1,0,0,4,ch32data};
#else
static const BitmapCharRec ch32 = {0,0,0,0,4,0};
#endif
static const BitmapCharRec * const chars[] = {
&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,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
&ch160,
&ch161,
&ch162,
&ch163,
&ch164,
&ch165,
&ch166,
&ch167,
&ch168,
&ch169,
&ch170,
&ch171,
&ch172,
&ch173,
&ch174,
&ch175,
&ch176,
&ch177,
&ch178,
&ch179,
&ch180,
&ch181,
&ch182,
&ch183,
&ch184,
&ch185,
&ch186,
&ch187,
&ch188,
&ch189,
&ch190,
&ch191,
&ch192,
&ch193,
&ch194,
&ch195,
&ch196,
&ch197,
&ch198,
&ch199,
&ch200,
&ch201,
&ch202,
&ch203,
&ch204,
&ch205,
&ch206,
&ch207,
&ch208,
&ch209,
&ch210,
&ch211,
&ch212,
&ch213,
&ch214,
&ch215,
&ch216,
&ch217,
&ch218,
&ch219,
&ch220,
&ch221,
&ch222,
&ch223,
&ch224,
&ch225,
&ch226,
&ch227,
&ch228,
&ch229,
&ch230,
&ch231,
&ch232,
&ch233,
&ch234,
&ch235,
&ch236,
&ch237,
&ch238,
&ch239,
&ch240,
&ch241,
&ch242,
&ch243,
&ch244,
&ch245,
&ch246,
&ch247,
&ch248,
&ch249,
&ch250,
&ch251,
&ch252,
&ch253,
&ch254,
&ch255,
};
const BitmapFontRec glutBitmapHelvetica12 = {
"-adobe-helvetica-medium-r-normal--12-120-75-75-p-67-iso8859-1",
224,
32,
chars
};
/* GENERATED FILE -- DO NOT MODIFY */
#define glutBitmapHelvetica18 XXX
#include "glutbitmap.h"
#undef glutBitmapHelvetica18
/* char: 0xff */
static const GLubyte ch255data[] = {
0x70,0x70,0x18,0x18,0x18,0x18,0x3c,0x24,0x66,0x66,0x66,0xc3,0xc3,0xc3,0x0,0x66,
0x66,
};
static const BitmapCharRec ch255 = {8,17,-1,4,10,ch255data};
/* char: 0xfe */
static const GLubyte ch254data[] = {
0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xde,0x0,0xff,0x0,0xe3,0x0,0xc1,0x80,
0xc1,0x80,0xc1,0x80,0xc1,0x80,0xe3,0x0,0xff,0x0,0xde,0x0,0xc0,0x0,0xc0,0x0,
0xc0,0x0,0xc0,0x0,
};
static const BitmapCharRec ch254 = {9,18,-1,4,11,ch254data};
/* char: 0xfd */
static const GLubyte ch253data[] = {
0x70,0x70,0x18,0x18,0x18,0x18,0x3c,0x24,0x66,0x66,0x66,0xc3,0xc3,0xc3,0x0,0x18,
0xc,0x6,
};
static const BitmapCharRec ch253 = {8,18,-1,4,10,ch253data};
/* char: 0xfc */
static const GLubyte ch252data[] = {
0x73,0xfb,0xc7,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0x0,0x66,0x66,
};
static const BitmapCharRec ch252 = {8,13,-1,0,10,ch252data};
/* char: 0xfb */
static const GLubyte ch251data[] = {
0x73,0xfb,0xc7,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0x0,0x66,0x3c,0x18,
};
static const BitmapCharRec ch251 = {8,14,-1,0,10,ch251data};
/* char: 0xfa */
static const GLubyte ch250data[] = {
0x73,0xfb,0xc7,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0x0,0x18,0xc,0x6,
};
static const BitmapCharRec ch250 = {8,14,-1,0,10,ch250data};
/* char: 0xf9 */
static const GLubyte ch249data[] = {
0x73,0xfb,0xc7,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0x0,0xc,0x18,0x30,
};
static const BitmapCharRec ch249 = {8,14,-1,0,10,ch249data};
/* char: 0xf8 */
static const GLubyte ch248data[] = {
0xce,0x0,0x7f,0x80,0x31,0x80,0x78,0xc0,0x6c,0xc0,0x66,0xc0,0x63,0xc0,0x31,0x80,
0x3f,0xc0,0xe,0x60,
};
static const BitmapCharRec ch248 = {11,10,0,0,11,ch248data};
/* char: 0xf7 */
static const GLubyte ch247data[] = {
0x18,0x18,0x0,0xff,0xff,0x0,0x18,0x18,
};
static const BitmapCharRec ch247 = {8,8,-1,-1,10,ch247data};
/* char: 0xf6 */
static const GLubyte ch246data[] = {
0x3e,0x0,0x7f,0x0,0x63,0x0,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0x63,0x0,
0x7f,0x0,0x3e,0x0,0x0,0x0,0x36,0x0,0x36,0x0,
};
static const BitmapCharRec ch246 = {9,13,-1,0,11,ch246data};
/* char: 0xf5 */
static const GLubyte ch245data[] = {
0x3e,0x0,0x7f,0x0,0x63,0x0,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0x63,0x0,
0x7f,0x0,0x3e,0x0,0x0,0x0,0x26,0x0,0x2d,0x0,0x19,0x0,
};
static const BitmapCharRec ch245 = {9,14,-1,0,11,ch245data};
/* char: 0xf4 */
static const GLubyte ch244data[] = {
0x3e,0x0,0x7f,0x0,0x63,0x0,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0x63,0x0,
0x7f,0x0,0x3e,0x0,0x0,0x0,0x33,0x0,0x1e,0x0,0xc,0x0,
};
static const BitmapCharRec ch244 = {9,14,-1,0,11,ch244data};
/* char: 0xf3 */
static const GLubyte ch243data[] = {
0x3e,0x0,0x7f,0x0,0x63,0x0,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0x63,0x0,
0x7f,0x0,0x3e,0x0,0x0,0x0,0x18,0x0,0xc,0x0,0x6,0x0,
};
static const BitmapCharRec ch243 = {9,14,-1,0,11,ch243data};
/* char: 0xf2 */
static const GLubyte ch242data[] = {
0x3e,0x0,0x7f,0x0,0x63,0x0,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0x63,0x0,
0x7f,0x0,0x3e,0x0,0x0,0x0,0xc,0x0,0x18,0x0,0x30,0x0,
};
static const BitmapCharRec ch242 = {9,14,-1,0,11,ch242data};
/* char: 0xf1 */
static const GLubyte ch241data[] = {
0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xe3,0xdf,0xce,0x0,0x4c,0x5a,0x32,
};
static const BitmapCharRec ch241 = {8,14,-1,0,10,ch241data};
/* char: 0xf0 */
static const GLubyte ch240data[] = {
0x3e,0x0,0x7f,0x0,0x63,0x0,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0x63,0x0,
0x7f,0x0,0x3e,0x0,0x4c,0x0,0x38,0x0,0x36,0x0,0x60,0x0,
};
static const BitmapCharRec ch240 = {9,14,-1,0,11,ch240data};
/* char: 0xef */
static const GLubyte ch239data[] = {
0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x0,0xd8,0xd8,
};
static const BitmapCharRec ch239 = {5,13,0,0,4,ch239data};
/* char: 0xee */
static const GLubyte ch238data[] = {
0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x0,0xcc,0x78,0x30,
};
static const BitmapCharRec ch238 = {6,14,1,0,4,ch238data};
/* char: 0xed */
static const GLubyte ch237data[] = {
0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x0,0xc0,0x60,0x30,
};
static const BitmapCharRec ch237 = {4,14,0,0,4,ch237data};
/* char: 0xec */
static const GLubyte ch236data[] = {
0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x0,0x30,0x60,0xc0,
};
static const BitmapCharRec ch236 = {4,14,0,0,4,ch236data};
/* char: 0xeb */
static const GLubyte ch235data[] = {
0x3c,0x7f,0xe3,0xc0,0xc0,0xff,0xc3,0xc3,0x7e,0x3c,0x0,0x36,0x36,
};
static const BitmapCharRec ch235 = {8,13,-1,0,10,ch235data};
/* char: 0xea */
static const GLubyte ch234data[] = {
0x3c,0x7f,0xe3,0xc0,0xc0,0xff,0xc3,0xc3,0x7e,0x3c,0x0,0x66,0x3c,0x18,
};
static const BitmapCharRec ch234 = {8,14,-1,0,10,ch234data};
/* char: 0xe9 */
static const GLubyte ch233data[] = {
0x3c,0x7f,0xe3,0xc0,0xc0,0xff,0xc3,0xc3,0x7e,0x3c,0x0,0x18,0xc,0x6,
};
static const BitmapCharRec ch233 = {8,14,-1,0,10,ch233data};
/* char: 0xe8 */
static const GLubyte ch232data[] = {
0x3c,0x7f,0xe3,0xc0,0xc0,0xff,0xc3,0xc3,0x7e,0x3c,0x0,0x18,0x30,0x60,
};
static const BitmapCharRec ch232 = {8,14,-1,0,10,ch232data};
/* char: 0xe7 */
static const GLubyte ch231data[] = {
0x78,0x6c,0xc,0x38,0x3e,0x7f,0x63,0xc0,0xc0,0xc0,0xc0,0x63,0x7f,0x3e,
};
static const BitmapCharRec ch231 = {8,14,-1,4,10,ch231data};
/* char: 0xe6 */
static const GLubyte ch230data[] = {
0x75,0xe0,0xef,0xf8,0xc7,0x18,0xc6,0x0,0xe6,0x0,0x7f,0xf8,0xe,0x18,0xc6,0x18,
0xef,0xf0,0x7d,0xe0,
};
static const BitmapCharRec ch230 = {13,10,-1,0,15,ch230data};
/* char: 0xe5 */
static const GLubyte ch229data[] = {
0x76,0xee,0xc6,0xc6,0xe6,0x7e,0xe,0xc6,0xee,0x7c,0x38,0x6c,0x6c,0x38,
};
static const BitmapCharRec ch229 = {7,14,-1,0,9,ch229data};
/* char: 0xe4 */
static const GLubyte ch228data[] = {
0x76,0xee,0xc6,0xc6,0xe6,0x7e,0xe,0xc6,0xee,0x7c,0x0,0x6c,0x6c,
};
static const BitmapCharRec ch228 = {7,13,-1,0,9,ch228data};
/* char: 0xe3 */
static const GLubyte ch227data[] = {
0x76,0xee,0xc6,0xc6,0xe6,0x7e,0xe,0xc6,0xee,0x7c,0x0,0x4c,0x5a,0x32,
};
static const BitmapCharRec ch227 = {7,14,-1,0,9,ch227data};
/* char: 0xe2 */
static const GLubyte ch226data[] = {
0x76,0xee,0xc6,0xc6,0xe6,0x7e,0xe,0xc6,0xee,0x7c,0x0,0x66,0x3c,0x18,
};
static const BitmapCharRec ch226 = {7,14,-1,0,9,ch226data};
/* char: 0xe1 */
static const GLubyte ch225data[] = {
0x76,0xee,0xc6,0xc6,0xe6,0x7e,0xe,0xc6,0xee,0x7c,0x0,0x30,0x18,0xc,
};
static const BitmapCharRec ch225 = {7,14,-1,0,9,ch225data};
/* char: 0xe0 */
static const GLubyte ch224data[] = {
0x76,0xee,0xc6,0xc6,0xe6,0x7e,0xe,0xc6,0xee,0x7c,0x0,0x18,0x30,0x60,
};
static const BitmapCharRec ch224 = {7,14,-1,0,9,ch224data};
/* char: 0xdf */
static const GLubyte ch223data[] = {
0xdc,0xde,0xc6,0xc6,0xc6,0xc6,0xdc,0xdc,0xc6,0xc6,0xc6,0xc6,0x7c,0x38,
};
static const BitmapCharRec ch223 = {7,14,-1,0,9,ch223data};
/* char: 0xde */
static const GLubyte ch222data[] = {
0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x0,0xff,0x80,0xc1,0xc0,0xc0,0xc0,0xc0,0xc0,
0xc1,0xc0,0xff,0x80,0xff,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,
};
static const BitmapCharRec ch222 = {10,14,-1,0,12,ch222data};
/* char: 0xdd */
static const GLubyte ch221data[] = {
0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0xf,0x0,0x19,0x80,
0x30,0xc0,0x30,0xc0,0x60,0x60,0x60,0x60,0xc0,0x30,0xc0,0x30,0x0,0x0,0x6,0x0,
0x3,0x0,0x1,0x80,
};
static const BitmapCharRec ch221 = {12,18,-1,0,14,ch221data};
/* char: 0xdc */
static const GLubyte ch220data[] = {
0x1f,0x0,0x7f,0xc0,0x60,0xc0,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,
0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0x0,0x0,0x19,0x80,
0x19,0x80,
};
static const BitmapCharRec ch220 = {11,17,-1,0,13,ch220data};
/* char: 0xdb */
static const GLubyte ch219data[] = {
0x1f,0x0,0x7f,0xc0,0x60,0xc0,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,
0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0x0,0x0,0x19,0x80,
0xf,0x0,0x6,0x0,
};
static const BitmapCharRec ch219 = {11,18,-1,0,13,ch219data};
/* char: 0xda */
static const GLubyte ch218data[] = {
0x1f,0x0,0x7f,0xc0,0x60,0xc0,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,
0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0x0,0x0,0xc,0x0,
0x6,0x0,0x3,0x0,
};
static const BitmapCharRec ch218 = {11,18,-1,0,13,ch218data};
/* char: 0xd9 */
static const GLubyte ch217data[] = {
0x1f,0x0,0x7f,0xc0,0x60,0xc0,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,
0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0x0,0x0,0x6,0x0,
0xc,0x0,0x18,0x0,
};
static const BitmapCharRec ch217 = {11,18,-1,0,13,ch217data};
/* char: 0xd8 */
static const GLubyte ch216data[] = {
0xc7,0xc0,0xff,0xf0,0x78,0x38,0x38,0x18,0x6c,0x1c,0x6e,0xc,0x67,0xc,0x63,0x8c,
0x61,0xcc,0x70,0xdc,0x30,0x78,0x38,0x38,0x1f,0xfc,0x7,0xcc,
};
static const BitmapCharRec ch216 = {14,14,0,0,15,ch216data};
/* char: 0xd7 */
static const GLubyte ch215data[] = {
0xc0,0xc0,0x61,0x80,0x33,0x0,0x1e,0x0,0xc,0x0,0x1e,0x0,0x33,0x0,0x61,0x80,
0xc0,0xc0,
};
static const BitmapCharRec ch215 = {10,9,0,0,10,ch215data};
/* char: 0xd6 */
static const GLubyte ch214data[] = {
0xf,0x80,0x3f,0xe0,0x70,0x70,0x60,0x30,0xe0,0x38,0xc0,0x18,0xc0,0x18,0xc0,0x18,
0xc0,0x18,0xe0,0x38,0x60,0x30,0x70,0x70,0x3f,0xe0,0xf,0x80,0x0,0x0,0xd,0x80,
0xd,0x80,
};
static const BitmapCharRec ch214 = {13,17,-1,0,15,ch214data};
/* char: 0xd5 */
static const GLubyte ch213data[] = {
0xf,0x80,0x3f,0xe0,0x70,0x70,0x60,0x30,0xe0,0x38,0xc0,0x18,0xc0,0x18,0xc0,0x18,
0xc0,0x18,0xe0,0x38,0x60,0x30,0x70,0x70,0x3f,0xe0,0xf,0x80,0x0,0x0,0x9,0x80,
0xb,0x40,0x6,0x40,
};
static const BitmapCharRec ch213 = {13,18,-1,0,15,ch213data};
/* char: 0xd4 */
static const GLubyte ch212data[] = {
0xf,0x80,0x3f,0xe0,0x70,0x70,0x60,0x30,0xe0,0x38,0xc0,0x18,0xc0,0x18,0xc0,0x18,
0xc0,0x18,0xe0,0x38,0x60,0x30,0x70,0x70,0x3f,0xe0,0xf,0x80,0x0,0x0,0xc,0xc0,
0x7,0x80,0x3,0x0,
};
static const BitmapCharRec ch212 = {13,18,-1,0,15,ch212data};
/* char: 0xd3 */
static const GLubyte ch211data[] = {
0xf,0x80,0x3f,0xe0,0x70,0x70,0x60,0x30,0xe0,0x38,0xc0,0x18,0xc0,0x18,0xc0,0x18,
0xc0,0x18,0xe0,0x38,0x60,0x30,0x70,0x70,0x3f,0xe0,0xf,0x80,0x0,0x0,0x3,0x0,
0x1,0x80,0x0,0xc0,
};
static const BitmapCharRec ch211 = {13,18,-1,0,15,ch211data};
/* char: 0xd2 */
static const GLubyte ch210data[] = {
0xf,0x80,0x3f,0xe0,0x70,0x70,0x60,0x30,0xe0,0x38,0xc0,0x18,0xc0,0x18,0xc0,0x18,
0xc0,0x18,0xe0,0x38,0x60,0x30,0x70,0x70,0x3f,0xe0,0xf,0x80,0x0,0x0,0x3,0x0,
0x6,0x0,0xc,0x0,
};
static const BitmapCharRec ch210 = {13,18,-1,0,15,ch210data};
/* char: 0xd1 */
static const GLubyte ch209data[] = {
0xc0,0x60,0xc0,0xe0,0xc1,0xe0,0xc1,0xe0,0xc3,0x60,0xc6,0x60,0xc6,0x60,0xcc,0x60,
0xcc,0x60,0xd8,0x60,0xd8,0x60,0xf0,0x60,0xe0,0x60,0xe0,0x60,0x0,0x0,0x13,0x0,
0x16,0x80,0xc,0x80,
};
static const BitmapCharRec ch209 = {11,18,-1,0,13,ch209data};
/* char: 0xd0 */
static const GLubyte ch208data[] = {
0x7f,0x80,0x7f,0xc0,0x60,0xe0,0x60,0x60,0x60,0x30,0x60,0x30,0xfc,0x30,0xfc,0x30,
0x60,0x30,0x60,0x30,0x60,0x60,0x60,0xe0,0x7f,0xc0,0x7f,0x80,
};
static const BitmapCharRec ch208 = {12,14,0,0,13,ch208data};
/* char: 0xcf */
static const GLubyte ch207data[] = {
0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x0,0xcc,
0xcc,
};
static const BitmapCharRec ch207 = {6,17,0,0,6,ch207data};
/* char: 0xce */
static const GLubyte ch206data[] = {
0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x0,0xcc,
0x78,0x30,
};
static const BitmapCharRec ch206 = {6,18,0,0,6,ch206data};
/* char: 0xcd */
static const GLubyte ch205data[] = {
0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x0,0xc0,
0x60,0x30,
};
static const BitmapCharRec ch205 = {4,18,-2,0,6,ch205data};
/* char: 0xcc */
static const GLubyte ch204data[] = {
0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x0,0x30,
0x60,0xc0,
};
static const BitmapCharRec ch204 = {4,18,0,0,6,ch204data};
/* char: 0xcb */
static const GLubyte ch203data[] = {
0xff,0x80,0xff,0x80,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x0,0xff,0x0,
0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x80,0xff,0x80,0x0,0x0,0x33,0x0,
0x33,0x0,
};
static const BitmapCharRec ch203 = {9,17,-1,0,11,ch203data};
/* char: 0xca */
static const GLubyte ch202data[] = {
0xff,0x80,0xff,0x80,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x0,0xff,0x0,
0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x80,0xff,0x80,0x0,0x0,0x33,0x0,
0x1e,0x0,0xc,0x0,
};
static const BitmapCharRec ch202 = {9,18,-1,0,11,ch202data};
/* char: 0xc9 */
static const GLubyte ch201data[] = {
0xff,0x80,0xff,0x80,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x0,0xff,0x0,
0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x80,0xff,0x80,0x0,0x0,0xc,0x0,
0x6,0x0,0x3,0x0,
};
static const BitmapCharRec ch201 = {9,18,-1,0,11,ch201data};
/* char: 0xc8 */
static const GLubyte ch200data[] = {
0xff,0x80,0xff,0x80,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x0,0xff,0x0,
0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x80,0xff,0x80,0x0,0x0,0xc,0x0,
0x18,0x0,0x30,0x0,
};
static const BitmapCharRec ch200 = {9,18,-1,0,11,ch200data};
/* char: 0xc7 */
static const GLubyte ch199data[] = {
0x1e,0x0,0x1b,0x0,0x3,0x0,0xe,0x0,0xf,0x80,0x3f,0xe0,0x70,0x70,0x60,0x30,
0xe0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xe0,0x0,0x60,0x30,0x70,0x70,
0x3f,0xe0,0xf,0x80,
};
static const BitmapCharRec ch199 = {12,18,-1,4,14,ch199data};
/* char: 0xc6 */
static const GLubyte ch198data[] = {
0xc1,0xff,0xc1,0xff,0x61,0x80,0x61,0x80,0x7f,0x80,0x3f,0x80,0x31,0xfe,0x31,0xfe,
0x19,0x80,0x19,0x80,0xd,0x80,0xd,0x80,0x7,0xff,0x7,0xff,
};
static const BitmapCharRec ch198 = {16,14,-1,0,18,ch198data};
/* char: 0xc5 */
static const GLubyte ch197data[] = {
0xc0,0x30,0xc0,0x30,0x60,0x60,0x60,0x60,0x7f,0xe0,0x3f,0xc0,0x30,0xc0,0x30,0xc0,
0x19,0x80,0x19,0x80,0xf,0x0,0xf,0x0,0x6,0x0,0x6,0x0,0xf,0x0,0x19,0x80,
0x19,0x80,0xf,0x0,
};
static const BitmapCharRec ch197 = {12,18,0,0,12,ch197data};
/* char: 0xc4 */
static const GLubyte ch196data[] = {
0xc0,0x30,0xc0,0x30,0x60,0x60,0x60,0x60,0x7f,0xe0,0x3f,0xc0,0x30,0xc0,0x30,0xc0,
0x19,0x80,0x19,0x80,0xf,0x0,0xf,0x0,0x6,0x0,0x6,0x0,0x0,0x0,0x19,0x80,
0x19,0x80,
};
static const BitmapCharRec ch196 = {12,17,0,0,12,ch196data};
/* char: 0xc3 */
static const GLubyte ch195data[] = {
0xc0,0x30,0xc0,0x30,0x60,0x60,0x60,0x60,0x7f,0xe0,0x3f,0xc0,0x30,0xc0,0x30,0xc0,
0x19,0x80,0x19,0x80,0xf,0x0,0xf,0x0,0x6,0x0,0x6,0x0,0x0,0x0,0x13,0x0,
0x16,0x80,0xc,0x80,
};
static const BitmapCharRec ch195 = {12,18,0,0,12,ch195data};
/* char: 0xc2 */
static const GLubyte ch194data[] = {
0xc0,0x30,0xc0,0x30,0x60,0x60,0x60,0x60,0x7f,0xe0,0x3f,0xc0,0x30,0xc0,0x30,0xc0,
0x19,0x80,0x19,0x80,0xf,0x0,0xf,0x0,0x6,0x0,0x6,0x0,0x0,0x0,0x19,0x80,
0xf,0x0,0x6,0x0,
};
static const BitmapCharRec ch194 = {12,18,0,0,12,ch194data};
/* char: 0xc1 */
static const GLubyte ch193data[] = {
0xc0,0x30,0xc0,0x30,0x60,0x60,0x60,0x60,0x7f,0xe0,0x3f,0xc0,0x30,0xc0,0x30,0xc0,
0x19,0x80,0x19,0x80,0xf,0x0,0xf,0x0,0x6,0x0,0x6,0x0,0x0,0x0,0x6,0x0,
0x3,0x0,0x1,0x80,
};
static const BitmapCharRec ch193 = {12,18,0,0,12,ch193data};
/* char: 0xc0 */
static const GLubyte ch192data[] = {
0xc0,0x30,0xc0,0x30,0x60,0x60,0x60,0x60,0x7f,0xe0,0x3f,0xc0,0x30,0xc0,0x30,0xc0,
0x19,0x80,0x19,0x80,0xf,0x0,0xf,0x0,0x6,0x0,0x6,0x0,0x0,0x0,0x6,0x0,
0xc,0x0,0x18,0x0,
};
static const BitmapCharRec ch192 = {12,18,0,0,12,ch192data};
/* char: 0xbf */
static const GLubyte ch191data[] = {
0x7c,0xfe,0xc6,0xc6,0xe0,0x70,0x38,0x18,0x18,0x18,0x0,0x0,0x18,0x18,
};
static const BitmapCharRec ch191 = {7,14,-1,4,10,ch191data};
/* char: 0xbe */
static const GLubyte ch190data[] = {
0x18,0x18,0x18,0x18,0xc,0xfc,0x6,0xd8,0x6,0x78,0x73,0x38,0xf9,0x18,0x99,0x88,
0x30,0xc0,0x30,0xc0,0x98,0x60,0xf8,0x30,0x70,0x30,
};
static const BitmapCharRec ch190 = {14,13,0,0,15,ch190data};
/* char: 0xbd */
static const GLubyte ch189data[] = {
0x30,0xf8,0x30,0xf8,0x18,0x60,0xc,0x30,0xc,0x18,0x66,0x98,0x62,0xf8,0x63,0x70,
0x61,0x80,0x61,0x80,0xe0,0xc0,0xe0,0x60,0x60,0x60,
};
static const BitmapCharRec ch189 = {13,13,-1,0,15,ch189data};
/* char: 0xbc */
static const GLubyte ch188data[] = {
0x30,0x30,0x30,0x30,0x19,0xf8,0xd,0xb0,0xc,0xf0,0x66,0x70,0x62,0x30,0x63,0x10,
0x61,0x80,0x61,0x80,0xe0,0xc0,0xe0,0x60,0x60,0x60,
};
static const BitmapCharRec ch188 = {13,13,-1,0,15,ch188data};
/* char: 0xbb */
static const GLubyte ch187data[] = {
0x90,0xd8,0x6c,0x36,0x36,0x6c,0xd8,0x90,
};
static const BitmapCharRec ch187 = {7,8,-1,-1,9,ch187data};
/* char: 0xba */
static const GLubyte ch186data[] = {
0xf8,0x0,0x70,0xd8,0x88,0x88,0xd8,0x70,
};
static const BitmapCharRec ch186 = {5,8,-1,-6,7,ch186data};
/* char: 0xb9 */
static const GLubyte ch185data[] = {
0x60,0x60,0x60,0x60,0x60,0xe0,0xe0,0x60,
};
static const BitmapCharRec ch185 = {3,8,-1,-5,6,ch185data};
/* char: 0xb8 */
static const GLubyte ch184data[] = {
0xf0,0xd8,0x18,0x70,0x60,
};
static const BitmapCharRec ch184 = {5,5,0,4,5,ch184data};
/* char: 0xb7 */
static const GLubyte ch183data[] = {
0xc0,0xc0,
};
static const BitmapCharRec ch183 = {2,2,-1,-4,4,ch183data};
/* char: 0xb6 */
static const GLubyte ch182data[] = {
0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x32,0x72,0xf2,0xf2,0xf2,0xf2,
0x72,0x3f,
};
static const BitmapCharRec ch182 = {8,18,-1,4,10,ch182data};
/* char: 0xb5 */
static const GLubyte ch181data[] = {
0xc0,0xc0,0xc0,0xc0,0xdb,0xff,0xe7,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,
};
static const BitmapCharRec ch181 = {8,14,-1,4,10,ch181data};
/* char: 0xb4 */
static const GLubyte ch180data[] = {
0xc0,0x60,0x30,
};
static const BitmapCharRec ch180 = {4,3,0,-11,4,ch180data};
/* char: 0xb3 */
static const GLubyte ch179data[] = {
0x70,0xf8,0x98,0x30,0x30,0x98,0xf8,0x70,
};
static const BitmapCharRec ch179 = {5,8,0,-5,6,ch179data};
/* char: 0xb2 */
static const GLubyte ch178data[] = {
0xf8,0xf8,0x60,0x30,0x18,0x98,0xf8,0x70,
};
static const BitmapCharRec ch178 = {5,8,0,-5,6,ch178data};
/* char: 0xb1 */
static const GLubyte ch177data[] = {
0xff,0xff,0x0,0x18,0x18,0x18,0xff,0xff,0x18,0x18,0x18,
};
static const BitmapCharRec ch177 = {8,11,-1,0,10,ch177data};
/* char: 0xb0 */
static const GLubyte ch176data[] = {
0x70,0xd8,0x88,0xd8,0x70,
};
static const BitmapCharRec ch176 = {5,5,-1,-8,7,ch176data};
/* char: 0xaf */
static const GLubyte ch175data[] = {
0xf8,
};
static const BitmapCharRec ch175 = {5,1,0,-12,5,ch175data};
/* char: 0xae */
static const GLubyte ch174data[] = {
0xf,0x80,0x30,0x60,0x40,0x10,0x48,0x50,0x88,0x88,0x89,0x8,0x8f,0x88,0x88,0x48,
0x88,0x48,0x4f,0x90,0x40,0x10,0x30,0x60,0xf,0x80,
};
static const BitmapCharRec ch174 = {13,13,-1,0,14,ch174data};
/* char: 0xad */
static const GLubyte ch173data[] = {
0xf8,0xf8,
};
static const BitmapCharRec ch173 = {5,2,-1,-4,7,ch173data};
/* char: 0xac */
static const GLubyte ch172data[] = {
0x1,0x80,0x1,0x80,0x1,0x80,0xff,0x80,0xff,0x80,
};
static const BitmapCharRec ch172 = {9,5,-1,-3,11,ch172data};
/* char: 0xab */
static const GLubyte ch171data[] = {
0x12,0x36,0x6c,0xd8,0xd8,0x6c,0x36,0x12,
};
static const BitmapCharRec ch171 = {7,8,-1,-1,9,ch171data};
/* char: 0xaa */
static const GLubyte ch170data[] = {
0xf8,0x0,0x68,0xd8,0x48,0x38,0xc8,0x70,
};
static const BitmapCharRec ch170 = {5,8,-1,-6,7,ch170data};
/* char: 0xa9 */
static const GLubyte ch169data[] = {
0xf,0x80,0x30,0x60,0x40,0x10,0x47,0x10,0x88,0x88,0x90,0x8,0x90,0x8,0x90,0x8,
0x88,0x88,0x47,0x10,0x40,0x10,0x30,0x60,0xf,0x80,
};
static const BitmapCharRec ch169 = {13,13,-1,0,15,ch169data};
/* char: 0xa8 */
static const GLubyte ch168data[] = {
0xd8,0xd8,
};
static const BitmapCharRec ch168 = {5,2,0,-11,6,ch168data};
/* char: 0xa7 */
static const GLubyte ch167data[] = {
0x3c,0x7e,0xc3,0xc3,0x7,0xe,0x3e,0x73,0xe3,0xc3,0xc7,0x6e,0x7c,0xf0,0xc3,0xc3,
0x7e,0x3c,
};
static const BitmapCharRec ch167 = {8,18,-1,4,10,ch167data};
/* char: 0xa6 */
static const GLubyte ch166data[] = {
0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x0,0x0,0x0,0x0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
0xc0,
};
static const BitmapCharRec ch166 = {2,17,-1,3,4,ch166data};
/* char: 0xa5 */
static const GLubyte ch165data[] = {
0x18,0x18,0x18,0x18,0xff,0x18,0xff,0x3c,0x66,0x66,0x66,0xc3,0xc3,
};
static const BitmapCharRec ch165 = {8,13,-1,0,10,ch165data};
/* char: 0xa4 */
static const GLubyte ch164data[] = {
0xc3,0xff,0x66,0x66,0x66,0xff,0xc3,
};
static const BitmapCharRec ch164 = {8,7,-1,-3,10,ch164data};
/* char: 0xa3 */
static const GLubyte ch163data[] = {
0xdf,0x0,0xff,0x80,0x60,0x80,0x30,0x0,0x18,0x0,0x18,0x0,0x7e,0x0,0x30,0x0,
0x60,0x0,0x61,0x80,0x61,0x80,0x3f,0x0,0x1e,0x0,
};
static const BitmapCharRec ch163 = {9,13,0,0,10,ch163data};
/* char: 0xa2 */
static const GLubyte ch162data[] = {
0x10,0x10,0x3e,0x7f,0x6b,0xc8,0xc8,0xc8,0xc8,0x6b,0x7f,0x3e,0x4,0x4,
};
static const BitmapCharRec ch162 = {8,14,-1,2,10,ch162data};
/* char: 0xa1 */
static const GLubyte ch161data[] = {
0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x40,0x40,0x0,0x0,0xc0,0xc0,
};
static const BitmapCharRec ch161 = {2,14,-2,4,6,ch161data};
/* char: 0xa0 */
#ifdef _WIN32
/* XXX Work around Microsoft OpenGL 1.1 bug where glBitmap with
a height or width of zero does not advance the raster position
as specified by OpenGL. (Cosmo OpenGL does not have this bug.) */
static const GLubyte ch160data[] = { 0x0 };
static const BitmapCharRec ch160 = {1,1,0,0,5,ch160data};
#else
static const BitmapCharRec ch160 = {0,0,0,0,5,0};
#endif
/* char: 0x7e '~' */
static const GLubyte ch126data[] = {
0xcc,0x7e,0x33,
};
static const BitmapCharRec ch126 = {8,3,-1,-4,10,ch126data};
/* char: 0x7d '}' */
static const GLubyte ch125data[] = {
0xc0,0x60,0x30,0x30,0x30,0x30,0x30,0x30,0x18,0xc,0x18,0x30,0x30,0x30,0x30,0x30,
0x60,0xc0,
};
static const BitmapCharRec ch125 = {6,18,0,4,6,ch125data};
/* char: 0x7c '|' */
static const GLubyte ch124data[] = {
0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
0xc0,0xc0,
};
static const BitmapCharRec ch124 = {2,18,-1,4,4,ch124data};
/* char: 0x7b '{' */
static const GLubyte ch123data[] = {
0xc,0x18,0x30,0x30,0x30,0x30,0x30,0x30,0x60,0xc0,0x60,0x30,0x30,0x30,0x30,0x30,
0x18,0xc,
};
static const BitmapCharRec ch123 = {6,18,0,4,6,ch123data};
/* char: 0x7a 'z' */
static const GLubyte ch122data[] = {
0xfe,0xfe,0xc0,0x60,0x30,0x18,0xc,0x6,0xfe,0xfe,
};
static const BitmapCharRec ch122 = {7,10,-1,0,9,ch122data};
/* char: 0x79 'y' */
static const GLubyte ch121data[] = {
0x70,0x70,0x18,0x18,0x18,0x18,0x3c,0x24,0x66,0x66,0x66,0xc3,0xc3,0xc3,
};
static const BitmapCharRec ch121 = {8,14,-1,4,10,ch121data};
/* char: 0x78 'x' */
static const GLubyte ch120data[] = {
0xc3,0xe7,0x66,0x3c,0x18,0x18,0x3c,0x66,0xe7,0xc3,
};
static const BitmapCharRec ch120 = {8,10,-1,0,10,ch120data};
/* char: 0x77 'w' */
static const GLubyte ch119data[] = {
0x19,0x80,0x19,0x80,0x39,0xc0,0x29,0x40,0x69,0x60,0x66,0x60,0x66,0x60,0xc6,0x30,
0xc6,0x30,0xc6,0x30,
};
static const BitmapCharRec ch119 = {12,10,-1,0,14,ch119data};
/* char: 0x76 'v' */
static const GLubyte ch118data[] = {
0x18,0x18,0x3c,0x24,0x66,0x66,0x66,0xc3,0xc3,0xc3,
};
static const BitmapCharRec ch118 = {8,10,-1,0,10,ch118data};
/* char: 0x75 'u' */
static const GLubyte ch117data[] = {
0x73,0xfb,0xc7,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,
};
static const BitmapCharRec ch117 = {8,10,-1,0,10,ch117data};
/* char: 0x74 't' */
static const GLubyte ch116data[] = {
0x18,0x38,0x30,0x30,0x30,0x30,0x30,0x30,0xfc,0xfc,0x30,0x30,0x30,
};
static const BitmapCharRec ch116 = {6,13,0,0,6,ch116data};
/* char: 0x73 's' */
static const GLubyte ch115data[] = {
0x78,0xfc,0xc6,0x6,0x3e,0xfc,0xc0,0xc6,0x7e,0x3c,
};
static const BitmapCharRec ch115 = {7,10,-1,0,9,ch115data};
/* char: 0x72 'r' */
static const GLubyte ch114data[] = {
0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xe0,0xd8,0xd8,
};
static const BitmapCharRec ch114 = {5,10,-1,0,6,ch114data};
/* char: 0x71 'q' */
static const GLubyte ch113data[] = {
0x1,0x80,0x1,0x80,0x1,0x80,0x1,0x80,0x3d,0x80,0x7f,0x80,0x63,0x80,0xc1,0x80,
0xc1,0x80,0xc1,0x80,0xc1,0x80,0x63,0x80,0x7f,0x80,0x3d,0x80,
};
static const BitmapCharRec ch113 = {9,14,-1,4,11,ch113data};
/* char: 0x70 'p' */
static const GLubyte ch112data[] = {
0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xde,0x0,0xff,0x0,0xe3,0x0,0xc1,0x80,
0xc1,0x80,0xc1,0x80,0xc1,0x80,0xe3,0x0,0xff,0x0,0xde,0x0,
};
static const BitmapCharRec ch112 = {9,14,-1,4,11,ch112data};
/* char: 0x6f 'o' */
static const GLubyte ch111data[] = {
0x3e,0x0,0x7f,0x0,0x63,0x0,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0x63,0x0,
0x7f,0x0,0x3e,0x0,
};
static const BitmapCharRec ch111 = {9,10,-1,0,11,ch111data};
/* char: 0x6e 'n' */
static const GLubyte ch110data[] = {
0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xe3,0xdf,0xce,
};
static const BitmapCharRec ch110 = {8,10,-1,0,10,ch110data};
/* char: 0x6d 'm' */
static const GLubyte ch109data[] = {
0xc6,0x30,0xc6,0x30,0xc6,0x30,0xc6,0x30,0xc6,0x30,0xc6,0x30,0xc6,0x30,0xe7,0x30,
0xde,0xf0,0xcc,0x60,
};
static const BitmapCharRec ch109 = {12,10,-1,0,14,ch109data};
/* char: 0x6c 'l' */
static const GLubyte ch108data[] = {
0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
};
static const BitmapCharRec ch108 = {2,14,-1,0,4,ch108data};
/* char: 0x6b 'k' */
static const GLubyte ch107data[] = {
0xc7,0xc6,0xce,0xcc,0xd8,0xf8,0xf0,0xd8,0xcc,0xc6,0xc0,0xc0,0xc0,0xc0,
};
static const BitmapCharRec ch107 = {8,14,-1,0,9,ch107data};
/* char: 0x6a 'j' */
static const GLubyte ch106data[] = {
0xe0,0xf0,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x0,0x0,
0x30,0x30,
};
static const BitmapCharRec ch106 = {4,18,1,4,4,ch106data};
/* char: 0x69 'i' */
static const GLubyte ch105data[] = {
0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x0,0x0,0xc0,0xc0,
};
static const BitmapCharRec ch105 = {2,14,-1,0,4,ch105data};
/* char: 0x68 'h' */
static const GLubyte ch104data[] = {
0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xe3,0xdf,0xce,0xc0,0xc0,0xc0,0xc0,
};
static const BitmapCharRec ch104 = {8,14,-1,0,10,ch104data};
/* char: 0x67 'g' */
static const GLubyte ch103data[] = {
0x1c,0x0,0x7f,0x0,0x63,0x0,0x1,0x80,0x3d,0x80,0x7f,0x80,0x63,0x80,0xc1,0x80,
0xc1,0x80,0xc1,0x80,0xc1,0x80,0x61,0x80,0x7f,0x80,0x3d,0x80,
};
static const BitmapCharRec ch103 = {9,14,-1,4,11,ch103data};
/* char: 0x66 'f' */
static const GLubyte ch102data[] = {
0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0xfc,0xfc,0x30,0x30,0x3c,0x1c,
};
static const BitmapCharRec ch102 = {6,14,0,0,6,ch102data};
/* char: 0x65 'e' */
static const GLubyte ch101data[] = {
0x3c,0x7f,0xe3,0xc0,0xc0,0xff,0xc3,0xc3,0x7e,0x3c,
};
static const BitmapCharRec ch101 = {8,10,-1,0,10,ch101data};
/* char: 0x64 'd' */
static const GLubyte ch100data[] = {
0x3d,0x80,0x7f,0x80,0x63,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0x63,0x80,
0x7f,0x80,0x3d,0x80,0x1,0x80,0x1,0x80,0x1,0x80,0x1,0x80,
};
static const BitmapCharRec ch100 = {9,14,-1,0,11,ch100data};
/* char: 0x63 'c' */
static const GLubyte ch99data[] = {
0x3e,0x7f,0x63,0xc0,0xc0,0xc0,0xc0,0x63,0x7f,0x3e,
};
static const BitmapCharRec ch99 = {8,10,-1,0,10,ch99data};
/* char: 0x62 'b' */
static const GLubyte ch98data[] = {
0xde,0x0,0xff,0x0,0xe3,0x0,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xe3,0x0,
0xff,0x0,0xde,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,
};
static const BitmapCharRec ch98 = {9,14,-1,0,11,ch98data};
/* char: 0x61 'a' */
static const GLubyte ch97data[] = {
0x76,0xee,0xc6,0xc6,0xe6,0x7e,0xe,0xc6,0xee,0x7c,
};
static const BitmapCharRec ch97 = {7,10,-1,0,9,ch97data};
/* char: 0x60 '`' */
static const GLubyte ch96data[] = {
0xc0,0xc0,0x80,0x80,0x40,
};
static const BitmapCharRec ch96 = {2,5,-1,-9,4,ch96data};
/* char: 0x5f '_' */
static const GLubyte ch95data[] = {
0xff,0xc0,0xff,0xc0,
};
static const BitmapCharRec ch95 = {10,2,0,4,10,ch95data};
/* char: 0x5e '^' */
static const GLubyte ch94data[] = {
0x82,0xc6,0x6c,0x38,0x10,
};
static const BitmapCharRec ch94 = {7,5,-1,-8,9,ch94data};
/* char: 0x5d ']' */
static const GLubyte ch93data[] = {
0xf0,0xf0,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
0xf0,0xf0,
};
static const BitmapCharRec ch93 = {4,18,0,4,5,ch93data};
/* char: 0x5c '\' */
static const GLubyte ch92data[] = {
0x18,0x18,0x10,0x10,0x30,0x30,0x20,0x20,0x60,0x60,0x40,0x40,0xc0,0xc0,
};
static const BitmapCharRec ch92 = {5,14,0,0,5,ch92data};
/* char: 0x5b '[' */
static const GLubyte ch91data[] = {
0xf0,0xf0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
0xf0,0xf0,
};
static const BitmapCharRec ch91 = {4,18,-1,4,5,ch91data};
/* char: 0x5a 'Z' */
static const GLubyte ch90data[] = {
0xff,0xc0,0xff,0xc0,0xc0,0x0,0x60,0x0,0x30,0x0,0x18,0x0,0x1c,0x0,0xc,0x0,
0x6,0x0,0x3,0x0,0x1,0x80,0x0,0xc0,0xff,0xc0,0xff,0xc0,
};
static const BitmapCharRec ch90 = {10,14,-1,0,12,ch90data};
/* char: 0x59 'Y' */
static const GLubyte ch89data[] = {
0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0xf,0x0,0x19,0x80,
0x30,0xc0,0x30,0xc0,0x60,0x60,0x60,0x60,0xc0,0x30,0xc0,0x30,
};
static const BitmapCharRec ch89 = {12,14,-1,0,14,ch89data};
/* char: 0x58 'X' */
static const GLubyte ch88data[] = {
0xc0,0x60,0xe0,0xe0,0x60,0xc0,0x71,0xc0,0x31,0x80,0x1b,0x0,0xe,0x0,0xe,0x0,
0x1b,0x0,0x31,0x80,0x71,0xc0,0x60,0xc0,0xe0,0xe0,0xc0,0x60,
};
static const BitmapCharRec ch88 = {11,14,-1,0,13,ch88data};
/* char: 0x57 'W' */
static const GLubyte ch87data[] = {
0x18,0x18,0x18,0x18,0x1c,0x38,0x34,0x2c,0x36,0x6c,0x36,0x6c,0x66,0x66,0x66,0x66,
0x62,0x46,0x63,0xc6,0xc3,0xc3,0xc1,0x83,0xc1,0x83,0xc1,0x83,
};
static const BitmapCharRec ch87 = {16,14,-1,0,18,ch87data};
/* char: 0x56 'V' */
static const GLubyte ch86data[] = {
0x6,0x0,0xf,0x0,0xf,0x0,0x19,0x80,0x19,0x80,0x19,0x80,0x30,0xc0,0x30,0xc0,
0x30,0xc0,0x60,0x60,0x60,0x60,0x60,0x60,0xc0,0x30,0xc0,0x30,
};
static const BitmapCharRec ch86 = {12,14,-1,0,14,ch86data};
/* char: 0x55 'U' */
static const GLubyte ch85data[] = {
0x1f,0x0,0x7f,0xc0,0x60,0xc0,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,
0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,
};
static const BitmapCharRec ch85 = {11,14,-1,0,13,ch85data};
/* char: 0x54 'T' */
static const GLubyte ch84data[] = {
0xc,0x0,0xc,0x0,0xc,0x0,0xc,0x0,0xc,0x0,0xc,0x0,0xc,0x0,0xc,0x0,
0xc,0x0,0xc,0x0,0xc,0x0,0xc,0x0,0xff,0xc0,0xff,0xc0,
};
static const BitmapCharRec ch84 = {10,14,-1,0,12,ch84data};
/* char: 0x53 'S' */
static const GLubyte ch83data[] = {
0x3f,0x0,0x7f,0xc0,0xe0,0xe0,0xc0,0x60,0x0,0x60,0x0,0xe0,0x3,0xc0,0x1f,0x0,
0x7c,0x0,0xe0,0x0,0xc0,0x60,0xe0,0xe0,0x7f,0xc0,0x1f,0x0,
};
static const BitmapCharRec ch83 = {11,14,-1,0,13,ch83data};
/* char: 0x52 'R' */
static const GLubyte ch82data[] = {
0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc1,0x80,0xc1,0x80,0xff,0x0,0xff,0x80,
0xc1,0xc0,0xc0,0xc0,0xc0,0xc0,0xc1,0xc0,0xff,0x80,0xff,0x0,
};
static const BitmapCharRec ch82 = {10,14,-1,0,12,ch82data};
/* char: 0x51 'Q' */
static const GLubyte ch81data[] = {
0x0,0x30,0xf,0xb0,0x3f,0xe0,0x70,0xf0,0x61,0xb0,0xe1,0xb8,0xc0,0x18,0xc0,0x18,
0xc0,0x18,0xc0,0x18,0xe0,0x38,0x60,0x30,0x70,0x70,0x3f,0xe0,0xf,0x80,
};
static const BitmapCharRec ch81 = {13,15,-1,1,15,ch81data};
/* char: 0x50 'P' */
static const GLubyte ch80data[] = {
0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x0,0xff,0x80,
0xc1,0xc0,0xc0,0xc0,0xc0,0xc0,0xc1,0xc0,0xff,0x80,0xff,0x0,
};
static const BitmapCharRec ch80 = {10,14,-1,0,12,ch80data};
/* char: 0x4f 'O' */
static const GLubyte ch79data[] = {
0xf,0x80,0x3f,0xe0,0x70,0x70,0x60,0x30,0xe0,0x38,0xc0,0x18,0xc0,0x18,0xc0,0x18,
0xc0,0x18,0xe0,0x38,0x60,0x30,0x70,0x70,0x3f,0xe0,0xf,0x80,
};
static const BitmapCharRec ch79 = {13,14,-1,0,15,ch79data};
/* char: 0x4e 'N' */
static const GLubyte ch78data[] = {
0xc0,0x60,0xc0,0xe0,0xc1,0xe0,0xc1,0xe0,0xc3,0x60,0xc6,0x60,0xc6,0x60,0xcc,0x60,
0xcc,0x60,0xd8,0x60,0xf0,0x60,0xf0,0x60,0xe0,0x60,0xc0,0x60,
};
static const BitmapCharRec ch78 = {11,14,-1,0,13,ch78data};
/* char: 0x4d 'M' */
static const GLubyte ch77data[] = {
0xc3,0xc,0xc3,0xc,0xc7,0x8c,0xc4,0x8c,0xcc,0xcc,0xcc,0xcc,0xd8,0x6c,0xd8,0x6c,
0xf0,0x3c,0xf0,0x3c,0xe0,0x1c,0xe0,0x1c,0xc0,0xc,0xc0,0xc,
};
static const BitmapCharRec ch77 = {14,14,-1,0,16,ch77data};
/* char: 0x4c 'L' */
static const GLubyte ch76data[] = {
0xff,0xff,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
};
static const BitmapCharRec ch76 = {8,14,-1,0,10,ch76data};
/* char: 0x4b 'K' */
static const GLubyte ch75data[] = {
0xc0,0x70,0xc0,0xe0,0xc1,0xc0,0xc3,0x80,0xc7,0x0,0xce,0x0,0xfc,0x0,0xf8,0x0,
0xdc,0x0,0xce,0x0,0xc7,0x0,0xc3,0x80,0xc1,0xc0,0xc0,0xe0,
};
static const BitmapCharRec ch75 = {12,14,-1,0,13,ch75data};
/* char: 0x4a 'J' */
static const GLubyte ch74data[] = {
0x3c,0x7e,0xe7,0xc3,0xc3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,
};
static const BitmapCharRec ch74 = {8,14,-1,0,10,ch74data};
/* char: 0x49 'I' */
static const GLubyte ch73data[] = {
0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
};
static const BitmapCharRec ch73 = {2,14,-2,0,6,ch73data};
/* char: 0x48 'H' */
static const GLubyte ch72data[] = {
0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xff,0xe0,0xff,0xe0,
0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,
};
static const BitmapCharRec ch72 = {11,14,-1,0,13,ch72data};
/* char: 0x47 'G' */
static const GLubyte ch71data[] = {
0xf,0xb0,0x3f,0xf0,0x70,0x70,0x60,0x30,0xe0,0x30,0xc1,0xf0,0xc1,0xf0,0xc0,0x0,
0xc0,0x0,0xe0,0x30,0x60,0x30,0x70,0x70,0x3f,0xe0,0xf,0x80,
};
static const BitmapCharRec ch71 = {12,14,-1,0,14,ch71data};
/* char: 0x46 'F' */
static const GLubyte ch70data[] = {
0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x0,0xff,0x0,
0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x80,0xff,0x80,
};
static const BitmapCharRec ch70 = {9,14,-1,0,11,ch70data};
/* char: 0x45 'E' */
static const GLubyte ch69data[] = {
0xff,0x80,0xff,0x80,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x0,0xff,0x0,
0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x80,0xff,0x80,
};
static const BitmapCharRec ch69 = {9,14,-1,0,11,ch69data};
/* char: 0x44 'D' */
static const GLubyte ch68data[] = {
0xff,0x0,0xff,0x80,0xc1,0xc0,0xc0,0xc0,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,
0xc0,0x60,0xc0,0x60,0xc0,0xc0,0xc1,0xc0,0xff,0x80,0xff,0x0,
};
static const BitmapCharRec ch68 = {11,14,-1,0,13,ch68data};
/* char: 0x43 'C' */
static const GLubyte ch67data[] = {
0xf,0x80,0x3f,0xe0,0x70,0x70,0x60,0x30,0xe0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,
0xc0,0x0,0xe0,0x0,0x60,0x30,0x70,0x70,0x3f,0xe0,0xf,0x80,
};
static const BitmapCharRec ch67 = {12,14,-1,0,14,ch67data};
/* char: 0x42 'B' */
static const GLubyte ch66data[] = {
0xff,0x80,0xff,0xc0,0xc0,0xe0,0xc0,0x60,0xc0,0x60,0xc0,0xe0,0xff,0xc0,0xff,0x80,
0xc1,0x80,0xc0,0xc0,0xc0,0xc0,0xc1,0xc0,0xff,0x80,0xff,0x0,
};
static const BitmapCharRec ch66 = {11,14,-1,0,13,ch66data};
/* char: 0x41 'A' */
static const GLubyte ch65data[] = {
0xc0,0x30,0xc0,0x30,0x60,0x60,0x60,0x60,0x7f,0xe0,0x3f,0xc0,0x30,0xc0,0x30,0xc0,
0x19,0x80,0x19,0x80,0xf,0x0,0xf,0x0,0x6,0x0,0x6,0x0,
};
static const BitmapCharRec ch65 = {12,14,0,0,12,ch65data};
/* char: 0x40 '@' */
static const GLubyte ch64data[] = {
0x7,0xe0,0x1f,0xf0,0x38,0x0,0x70,0x0,0x67,0x70,0xcf,0xf8,0xcc,0xcc,0xcc,0x66,
0xcc,0x66,0xcc,0x63,0xc6,0x33,0x67,0x73,0x63,0xb3,0x30,0x6,0x1c,0xe,0xf,0xfc,
0x3,0xf0,
};
static const BitmapCharRec ch64 = {16,17,-1,3,18,ch64data};
/* char: 0x3f '?' */
static const GLubyte ch63data[] = {
0x30,0x30,0x0,0x0,0x30,0x30,0x30,0x38,0x1c,0xe,0xc6,0xc6,0xfe,0x7c,
};
static const BitmapCharRec ch63 = {7,14,-1,0,10,ch63data};
/* char: 0x3e '>' */
static const GLubyte ch62data[] = {
0xc0,0xf0,0x3c,0xe,0x3,0xe,0x3c,0xf0,0xc0,
};
static const BitmapCharRec ch62 = {8,9,-1,0,10,ch62data};
/* char: 0x3d '=' */
static const GLubyte ch61data[] = {
0xfe,0xfe,0x0,0x0,0xfe,0xfe,
};
static const BitmapCharRec ch61 = {7,6,-2,-2,11,ch61data};
/* char: 0x3c '<' */
static const GLubyte ch60data[] = {
0x3,0xf,0x3c,0x70,0xc0,0x70,0x3c,0xf,0x3,
};
static const BitmapCharRec ch60 = {8,9,-1,0,10,ch60data};
/* char: 0x3b ';' */
static const GLubyte ch59data[] = {
0x80,0x40,0x40,0xc0,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0xc0,
};
static const BitmapCharRec ch59 = {2,13,-1,3,5,ch59data};
/* char: 0x3a ':' */
static const GLubyte ch58data[] = {
0xc0,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0xc0,
};
static const BitmapCharRec ch58 = {2,10,-1,0,5,ch58data};
/* char: 0x39 '9' */
static const GLubyte ch57data[] = {
0x7c,0xfe,0xc6,0x3,0x3,0x3b,0x7f,0xc3,0xc3,0xc3,0xc7,0x7e,0x3c,
};
static const BitmapCharRec ch57 = {8,13,-1,0,10,ch57data};
/* char: 0x38 '8' */
static const GLubyte ch56data[] = {
0x3c,0x7e,0xe7,0xc3,0xc3,0x66,0x7e,0x66,0xc3,0xc3,0xe7,0x7e,0x3c,
};
static const BitmapCharRec ch56 = {8,13,-1,0,10,ch56data};
/* char: 0x37 '7' */
static const GLubyte ch55data[] = {
0x60,0x60,0x30,0x30,0x30,0x18,0x18,0xc,0xc,0x6,0x3,0xff,0xff,
};
static const BitmapCharRec ch55 = {8,13,-1,0,10,ch55data};
/* char: 0x36 '6' */
static const GLubyte ch54data[] = {
0x3c,0x7e,0xe3,0xc3,0xc3,0xc3,0xfe,0xdc,0xc0,0xc0,0x63,0x7f,0x3c,
};
static const BitmapCharRec ch54 = {8,13,-1,0,10,ch54data};
/* char: 0x35 '5' */
static const GLubyte ch53data[] = {
0x7c,0xfe,0xc7,0xc3,0x3,0x3,0xc7,0xfe,0xfc,0xc0,0xc0,0xfe,0xfe,
};
static const BitmapCharRec ch53 = {8,13,-1,0,10,ch53data};
/* char: 0x34 '4' */
static const GLubyte ch52data[] = {
0x3,0x0,0x3,0x0,0x3,0x0,0xff,0x80,0xff,0x80,0xc3,0x0,0x63,0x0,0x33,0x0,
0x33,0x0,0x1b,0x0,0xf,0x0,0x7,0x0,0x3,0x0,
};
static const BitmapCharRec ch52 = {9,13,-1,0,10,ch52data};
/* char: 0x33 '3' */
static const GLubyte ch51data[] = {
0x3c,0x7e,0xc7,0xc3,0x3,0x7,0x1e,0x1c,0x6,0xc3,0xc3,0x7e,0x3c,
};
static const BitmapCharRec ch51 = {8,13,-1,0,10,ch51data};
/* char: 0x32 '2' */
static const GLubyte ch50data[] = {
0xff,0xff,0xc0,0xe0,0x70,0x38,0x1c,0xe,0x7,0x3,0xc3,0xfe,0x3c,
};
static const BitmapCharRec ch50 = {8,13,-1,0,10,ch50data};
/* char: 0x31 '1' */
static const GLubyte ch49data[] = {
0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xf8,0xf8,0x18,
};
static const BitmapCharRec ch49 = {5,13,-2,0,10,ch49data};
/* char: 0x30 '0' */
static const GLubyte ch48data[] = {
0x3c,0x7e,0x66,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0x66,0x7e,0x3c,
};
static const BitmapCharRec ch48 = {8,13,-1,0,10,ch48data};
/* char: 0x2f '/' */
static const GLubyte ch47data[] = {
0xc0,0xc0,0x40,0x40,0x60,0x60,0x20,0x20,0x30,0x30,0x10,0x10,0x18,0x18,
};
static const BitmapCharRec ch47 = {5,14,0,0,5,ch47data};
/* char: 0x2e '.' */
static const GLubyte ch46data[] = {
0xc0,0xc0,
};
static const BitmapCharRec ch46 = {2,2,-1,0,5,ch46data};
/* char: 0x2d '-' */
static const GLubyte ch45data[] = {
0xff,0xff,
};
static const BitmapCharRec ch45 = {8,2,-1,-4,11,ch45data};
/* char: 0x2c ',' */
static const GLubyte ch44data[] = {
0x80,0x40,0x40,0xc0,0xc0,
};
static const BitmapCharRec ch44 = {2,5,-1,3,5,ch44data};
/* char: 0x2b '+' */
static const GLubyte ch43data[] = {
0x18,0x18,0x18,0x18,0xff,0xff,0x18,0x18,0x18,0x18,
};
static const BitmapCharRec ch43 = {8,10,-1,0,10,ch43data};
/* char: 0x2a '*' */
static const GLubyte ch42data[] = {
0x88,0x70,0x70,0xf8,0x20,0x20,
};
static const BitmapCharRec ch42 = {5,6,-1,-8,7,ch42data};
/* char: 0x29 ')' */
static const GLubyte ch41data[] = {
0x80,0xc0,0x60,0x60,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x60,0x60,
0xc0,0x80,
};
static const BitmapCharRec ch41 = {4,18,-1,4,6,ch41data};
/* char: 0x28 '(' */
static const GLubyte ch40data[] = {
0x10,0x30,0x60,0x60,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x60,0x60,
0x30,0x10,
};
static const BitmapCharRec ch40 = {4,18,-1,4,6,ch40data};
/* char: 0x27 ''' */
static const GLubyte ch39data[] = {
0x80,0x40,0x40,0xc0,0xc0,
};
static const BitmapCharRec ch39 = {2,5,-1,-9,4,ch39data};
/* char: 0x26 '&' */
static const GLubyte ch38data[] = {
0x3c,0x70,0x7e,0xe0,0xe7,0xc0,0xc3,0x80,0xc3,0xc0,0xc6,0xc0,0xee,0xc0,0x7c,0x0,
0x3c,0x0,0x66,0x0,0x66,0x0,0x7e,0x0,0x3c,0x0,
};
static const BitmapCharRec ch38 = {12,13,-1,0,13,ch38data};
/* char: 0x25 '%' */
static const GLubyte ch37data[] = {
0x18,0x78,0x18,0xfc,0xc,0xcc,0xc,0xcc,0x6,0xfc,0x6,0x78,0x3,0x0,0x7b,0x0,
0xfd,0x80,0xcd,0x80,0xcc,0xc0,0xfc,0xc0,0x78,0x60,
};
static const BitmapCharRec ch37 = {14,13,-1,0,16,ch37data};
/* char: 0x24 '$' */
static const GLubyte ch36data[] = {
0x8,0x0,0x8,0x0,0x3e,0x0,0x7f,0x0,0xeb,0x80,0xc9,0x80,0x9,0x80,0xf,0x0,
0x3e,0x0,0x78,0x0,0xe8,0x0,0xc8,0x0,0xcb,0x0,0x7f,0x0,0x3e,0x0,0x8,0x0,
};
static const BitmapCharRec ch36 = {9,16,-1,2,10,ch36data};
/* char: 0x23 '#' */
static const GLubyte ch35data[] = {
0x24,0x0,0x24,0x0,0x24,0x0,0xff,0x80,0xff,0x80,0x12,0x0,0x12,0x0,0x12,0x0,
0x7f,0xc0,0x7f,0xc0,0x9,0x0,0x9,0x0,0x9,0x0,
};
static const BitmapCharRec ch35 = {10,13,0,0,10,ch35data};
/* char: 0x22 '"' */
static const GLubyte ch34data[] = {
0x90,0x90,0xd8,0xd8,0xd8,
};
static const BitmapCharRec ch34 = {5,5,0,-9,5,ch34data};
/* char: 0x21 '!' */
static const GLubyte ch33data[] = {
0xc0,0xc0,0x0,0x0,0x80,0x80,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
};
static const BitmapCharRec ch33 = {2,14,-2,0,6,ch33data};
/* char: 0x20 ' ' */
#ifdef _WIN32
/* XXX Work around Microsoft OpenGL 1.1 bug where glBitmap with
a height or width of zero does not advance the raster position
as specified by OpenGL. (Cosmo OpenGL does not have this bug.) */
static const GLubyte ch32data[] = { 0x0 };
static const BitmapCharRec ch32 = {1,1,0,0,5,ch32data};
#else
static const BitmapCharRec ch32 = {0,0,0,0,5,0};
#endif
static const BitmapCharRec * const chars[] = {
&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,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
&ch160,
&ch161,
&ch162,
&ch163,
&ch164,
&ch165,
&ch166,
&ch167,
&ch168,
&ch169,
&ch170,
&ch171,
&ch172,
&ch173,
&ch174,
&ch175,
&ch176,
&ch177,
&ch178,
&ch179,
&ch180,
&ch181,
&ch182,
&ch183,
&ch184,
&ch185,
&ch186,
&ch187,
&ch188,
&ch189,
&ch190,
&ch191,
&ch192,
&ch193,
&ch194,
&ch195,
&ch196,
&ch197,
&ch198,
&ch199,
&ch200,
&ch201,
&ch202,
&ch203,
&ch204,
&ch205,
&ch206,
&ch207,
&ch208,
&ch209,
&ch210,
&ch211,
&ch212,
&ch213,
&ch214,
&ch215,
&ch216,
&ch217,
&ch218,
&ch219,
&ch220,
&ch221,
&ch222,
&ch223,
&ch224,
&ch225,
&ch226,
&ch227,
&ch228,
&ch229,
&ch230,
&ch231,
&ch232,
&ch233,
&ch234,
&ch235,
&ch236,
&ch237,
&ch238,
&ch239,
&ch240,
&ch241,
&ch242,
&ch243,
&ch244,
&ch245,
&ch246,
&ch247,
&ch248,
&ch249,
&ch250,
&ch251,
&ch252,
&ch253,
&ch254,
&ch255,
};
const BitmapFontRec glutBitmapHelvetica18 = {
"-adobe-helvetica-medium-r-normal--18-180-75-75-p-98-iso8859-1",
224,
32,
chars
};
/* Copyright (c) Mark J. Kilgard, 1994, 1997. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#ifdef __VMS
#include <GL/vms_x_fix.h>
#endif
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#if !defined(_WIN32)
#include <X11/Xlib.h>
#include <X11/Xatom.h>
#endif
/* SGI optimization introduced in IRIX 6.3 to avoid X server
round trips for interning common X atoms. */
#if defined(_SGI_EXTRA_PREDEFINES) && !defined(NO_FAST_ATOMS)
#include <X11/SGIFastAtom.h>
#else
#define XSGIFastInternAtom(dpy,string,fast_name,how) XInternAtom(dpy,string,how)
#endif
#include "glutint.h"
/* GLUT inter-file variables */
/* *INDENT-OFF* */
char *__glutProgramName = NULL;
int __glutArgc = 0;
char **__glutArgv = NULL;
char *__glutGeometry = NULL;
Display *__glutDisplay = NULL;
int __glutScreen;
Window __glutRoot;
int __glutScreenHeight;
int __glutScreenWidth;
GLboolean __glutIconic = GL_FALSE;
GLboolean __glutDebug = GL_FALSE;
unsigned int __glutDisplayMode =
GLUT_RGB | GLUT_SINGLE | GLUT_DEPTH;
char *__glutDisplayString = NULL;
int __glutConnectionFD;
XSizeHints __glutSizeHints = {0};
int __glutInitWidth = 300, __glutInitHeight = 300;
int __glutInitX = -1, __glutInitY = -1;
GLboolean __glutForceDirect = GL_FALSE,
__glutTryDirect = GL_TRUE;
Atom __glutWMDeleteWindow;
/* *INDENT-ON* */
#ifdef _WIN32
void (__cdecl *__glutExitFunc)(int retval) = NULL;
#endif
static Bool synchronize = False;
#if defined(_WIN32)
#ifdef __BORLANDC__
#include <float.h> /* For masking floating point exceptions. */
#endif
void
__glutOpenWin32Connection(char* display)
{
static char *classname;
WNDCLASS wc;
HINSTANCE hInstance = GetModuleHandle(NULL);
/* Make sure we register the window only once. */
if(classname)
return;
#ifdef __BORLANDC__
/* Under certain conditions (e.g. while rendering solid surfaces with
lighting enabled) Microsoft OpenGL libraries cause some illegal
operations like floating point overflow or division by zero. The
default behaviour of Microsoft compilers is to mask (ignore)
floating point exceptions, while Borland compilers do not. The
following function of Borland RTL allows to mask exceptions.
Advice from Pier Giorgio Esposito (mc2172@mclink.it). */
_control87(MCW_EM,MCW_EM);
#endif
classname = "GLUT";
/* Clear (important!) and then fill in the window class structure. */
memset(&wc, 0, sizeof(WNDCLASS));
wc.style = CS_OWNDC;
wc.lpfnWndProc = (WNDPROC)__glutWindowProc;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(hInstance, "GLUT_ICON");
wc.hCursor = LoadCursor(hInstance, IDC_ARROW);
wc.hbrBackground = NULL;
wc.lpszMenuName = NULL;
wc.lpszClassName = classname;
/* Fill in a default icon if one isn't specified as a resource. */
if(!wc.hIcon)
wc.hIcon = LoadIcon(NULL, IDI_WINLOGO);
if(!RegisterClass(&wc)) {
__glutFatalError("RegisterClass() failed:"
"Cannot register GLUT window class.");
}
__glutScreenWidth = GetSystemMetrics(SM_CXSCREEN);
__glutScreenHeight = GetSystemMetrics(SM_CYSCREEN);
/* Set the root window to NULL because windows creates a top-level
window when the parent is NULL. X creates a top-level window
when the parent is the root window. */
__glutRoot = NULL;
/* Set the display to 1 -- we shouldn't be using this anywhere
(except as an argument to X calls). */
__glutDisplay = (Display*)1;
/* There isn't any concept of multiple screens in Win32, therefore,
we don't need to keep track of the screen we're on... it's always
the same one. */
__glutScreen = 0;
}
#else /* !_WIN32 */
void
__glutOpenXConnection(char *display)
{
int errorBase, eventBase;
__glutDisplay = XOpenDisplay(display);
if (!__glutDisplay)
__glutFatalError("could not open display: %s",
XDisplayName(display));
if (synchronize)
XSynchronize(__glutDisplay, True);
if (!glXQueryExtension(__glutDisplay, &errorBase, &eventBase))
__glutFatalError(
"OpenGL GLX extension not supported by display: %s",
XDisplayName(display));
__glutScreen = DefaultScreen(__glutDisplay);
__glutRoot = RootWindow(__glutDisplay, __glutScreen);
__glutScreenWidth = DisplayWidth(__glutDisplay, __glutScreen);
__glutScreenHeight = DisplayHeight(__glutDisplay,
__glutScreen);
__glutConnectionFD = ConnectionNumber(__glutDisplay);
__glutWMDeleteWindow = XSGIFastInternAtom(__glutDisplay,
"WM_DELETE_WINDOW", SGI_XA_WM_DELETE_WINDOW, False);
}
#endif /* _WIN32 */
void
#ifdef OLD_VMS
__glutInitTime(struct timeval6 *beginning)
#else
__glutInitTime(struct timeval *beginning)
#endif
{
static int beenhere = 0;
#ifdef OLD_VMS
static struct timeval6 genesis;
#else
static struct timeval genesis;
#endif
if (!beenhere) {
GETTIMEOFDAY(&genesis);
beenhere = 1;
}
*beginning = genesis;
}
static void
removeArgs(int *argcp, char **argv, int numToRemove)
{
int i, j;
for (i = 0, j = numToRemove; argv[j]; i++, j++) {
argv[i] = argv[j];
}
argv[i] = NULL;
*argcp -= numToRemove;
}
void GLUTAPIENTRY
glutInit(int *argcp, char **argv)
{
char *display = NULL;
char *str, *geometry = NULL;
#ifdef OLD_VMS
struct timeval6 unused;
#else
struct timeval unused;
#endif
int i;
if (__glutDisplay) {
__glutWarning("glutInit being called a second time.");
return;
}
/* Determine temporary program name. */
str = strrchr(argv[0], '/');
if (str == NULL) {
__glutProgramName = argv[0];
} else {
__glutProgramName = str + 1;
}
/* Make private copy of command line arguments. */
__glutArgc = *argcp;
__glutArgv = (char **) malloc(__glutArgc * sizeof(char *));
if (!__glutArgv)
__glutFatalError("out of memory.");
for (i = 0; i < __glutArgc; i++) {
__glutArgv[i] = __glutStrdup(argv[i]);
if (!__glutArgv[i])
__glutFatalError("out of memory.");
}
/* determine permanent program name */
str = strrchr(__glutArgv[0], '/');
if (str == NULL) {
__glutProgramName = __glutArgv[0];
} else {
__glutProgramName = str + 1;
}
/* parse arguments for standard options */
for (i = 1; i < __glutArgc; i++) {
if (!strcmp(__glutArgv[i], "-display")) {
#if defined(_WIN32)
__glutWarning("-display option not supported by Win32 GLUT.");
#endif
if (++i >= __glutArgc) {
__glutFatalError(
"follow -display option with X display name.");
}
display = __glutArgv[i];
removeArgs(argcp, &argv[1], 2);
} else if (!strcmp(__glutArgv[i], "-geometry")) {
if (++i >= __glutArgc) {
__glutFatalError(
"follow -geometry option with geometry parameter.");
}
geometry = __glutArgv[i];
removeArgs(argcp, &argv[1], 2);
} else if (!strcmp(__glutArgv[i], "-direct")) {
#if defined(_WIN32)
__glutWarning("-direct option not supported by Win32 GLUT.");
#endif
if (!__glutTryDirect)
__glutFatalError(
"cannot force both direct and indirect rendering.");
__glutForceDirect = GL_TRUE;
removeArgs(argcp, &argv[1], 1);
} else if (!strcmp(__glutArgv[i], "-indirect")) {
#if defined(_WIN32)
__glutWarning("-indirect option not supported by Win32 GLUT.");
#endif
if (__glutForceDirect)
__glutFatalError(
"cannot force both direct and indirect rendering.");
__glutTryDirect = GL_FALSE;
removeArgs(argcp, &argv[1], 1);
} else if (!strcmp(__glutArgv[i], "-iconic")) {
__glutIconic = GL_TRUE;
removeArgs(argcp, &argv[1], 1);
} else if (!strcmp(__glutArgv[i], "-gldebug")) {
__glutDebug = GL_TRUE;
removeArgs(argcp, &argv[1], 1);
} else if (!strcmp(__glutArgv[i], "-sync")) {
#if defined(_WIN32)
__glutWarning("-sync option not supported by Win32 GLUT.");
#endif
synchronize = GL_TRUE;
removeArgs(argcp, &argv[1], 1);
} else {
/* Once unknown option encountered, stop command line
processing. */
break;
}
}
#if defined(_WIN32)
__glutOpenWin32Connection(display);
#else
__glutOpenXConnection(display);
#endif
if (geometry) {
int flags, x, y, width, height;
/* Fix bogus "{width|height} may be used before set"
warning */
width = 0;
height = 0;
flags = XParseGeometry(geometry, &x, &y,
(unsigned int *) &width, (unsigned int *) &height);
if (WidthValue & flags) {
/* Careful because X does not allow zero or negative
width windows */
if (width > 0)
__glutInitWidth = width;
}
if (HeightValue & flags) {
/* Careful because X does not allow zero or negative
height windows */
if (height > 0)
__glutInitHeight = height;
}
glutInitWindowSize(__glutInitWidth, __glutInitHeight);
if (XValue & flags) {
if (XNegative & flags)
x = DisplayWidth(__glutDisplay, __glutScreen) +
x - __glutSizeHints.width;
/* Play safe: reject negative X locations */
if (x >= 0)
__glutInitX = x;
}
if (YValue & flags) {
if (YNegative & flags)
y = DisplayHeight(__glutDisplay, __glutScreen) +
y - __glutSizeHints.height;
/* Play safe: reject negative Y locations */
if (y >= 0)
__glutInitY = y;
}
glutInitWindowPosition(__glutInitX, __glutInitY);
}
__glutInitTime(&unused);
/* check if GLUT_FPS env var is set */
{
const char *fps = getenv("GLUT_FPS");
if (fps) {
sscanf(fps, "%d", &__glutFPS);
if (__glutFPS <= 0)
__glutFPS = 5000; /* 5000 milliseconds */
}
}
}
#ifdef _WIN32
void GLUTAPIENTRY
__glutInitWithExit(int *argcp, char **argv, void (__cdecl *exitfunc)(int))
{
__glutExitFunc = exitfunc;
glutInit(argcp, argv);
}
#endif
/* CENTRY */
void GLUTAPIENTRY
glutInitWindowPosition(int x, int y)
{
__glutInitX = x;
__glutInitY = y;
if (x >= 0 && y >= 0) {
__glutSizeHints.x = x;
__glutSizeHints.y = y;
__glutSizeHints.flags |= USPosition;
} else {
__glutSizeHints.flags &= ~USPosition;
}
}
void GLUTAPIENTRY
glutInitWindowSize(int width, int height)
{
__glutInitWidth = width;
__glutInitHeight = height;
if (width > 0 && height > 0) {
__glutSizeHints.width = width;
__glutSizeHints.height = height;
__glutSizeHints.flags |= USSize;
} else {
__glutSizeHints.flags &= ~USSize;
}
}
void GLUTAPIENTRY
glutInitDisplayMode(unsigned int mask)
{
__glutDisplayMode = mask;
}
/* ENDCENTRY */
/* Copyright (c) Mark J. Kilgard, 1994, 1997, 1998. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#ifdef __VMS
#include <GL/vms_x_fix.h>
#endif
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#if !defined(_WIN32)
#include <X11/Xlib.h>
#if defined(__vms)
#include <X11/XInput.h>
#else
#include <X11/extensions/XInput.h>
#endif
#include <X11/Xutil.h>
#else
#ifdef __MINGW32__
#include <GL/gl.h>
#endif
#include <windows.h>
#ifndef __CYGWIN32__
#include <mmsystem.h> /* Win32 Multimedia API header. */
#endif
#endif /* !_WIN32 */
#include "glutint.h"
int __glutNumDials = 0;
int __glutNumSpaceballButtons = 0;
int __glutNumButtonBoxButtons = 0;
int __glutNumTabletButtons = 0;
int __glutNumMouseButtons = 3; /* Good guess. */
XDevice *__glutTablet = NULL;
XDevice *__glutDials = NULL;
XDevice *__glutSpaceball = NULL;
int __glutHasJoystick = 0;
int __glutNumJoystickButtons = 0;
int __glutNumJoystickAxes = 0;
#if !defined(_WIN32)
typedef struct _Range {
int min;
int range;
} Range;
#define NUM_SPACEBALL_AXIS 6
#define NUM_TABLET_AXIS 2
#define NUM_DIALS_AXIS 8
Range __glutSpaceballRange[NUM_SPACEBALL_AXIS];
Range __glutTabletRange[NUM_TABLET_AXIS];
int *__glutDialsResolution;
/* Safely assumes 0 is an illegal event type for X Input
extension events. */
int __glutDeviceMotionNotify = 0;
int __glutDeviceButtonPress = 0;
int __glutDeviceButtonPressGrab = 0;
int __glutDeviceButtonRelease = 0;
int __glutDeviceStateNotify = 0;
static int
normalizeTabletPos(int axis, int rawValue)
{
assert(rawValue >= __glutTabletRange[axis].min);
assert(rawValue <= __glutTabletRange[axis].min
+ __glutTabletRange[axis].range);
/* Normalize rawValue to between 0 and 4000. */
return ((rawValue - __glutTabletRange[axis].min) * 4000) /
__glutTabletRange[axis].range;
}
static int
normalizeDialAngle(int axis, int rawValue)
{
/* XXX Assumption made that the resolution of the device is
number of clicks for one complete dial revolution. This
is true for SGI's dial & button box. */
return (rawValue * 360.0) / __glutDialsResolution[axis];
}
static int
normalizeSpaceballAngle(int axis, int rawValue)
{
assert(rawValue >= __glutSpaceballRange[axis].min);
assert(rawValue <= __glutSpaceballRange[axis].min +
__glutSpaceballRange[axis].range);
/* Normalize rawValue to between -1800 and 1800. */
return ((rawValue - __glutSpaceballRange[axis].min) * 3600) /
__glutSpaceballRange[axis].range - 1800;
}
static int
normalizeSpaceballDelta(int axis, int rawValue)
{
assert(rawValue >= __glutSpaceballRange[axis].min);
assert(rawValue <= __glutSpaceballRange[axis].min +
__glutSpaceballRange[axis].range);
/* Normalize rawValue to between -1000 and 1000. */
return ((rawValue - __glutSpaceballRange[axis].min) * 2000) /
__glutSpaceballRange[axis].range - 1000;
}
static void
queryTabletPos(GLUTwindow * window)
{
XDeviceState *state;
XInputClass *any;
XValuatorState *v;
int i;
state = XQueryDeviceState(__glutDisplay, __glutTablet);
any = state->data;
for (i = 0; i < state->num_classes; i++) {
#if defined(__cplusplus) || defined(c_plusplus)
switch (any->c_class) {
#else
switch (any->class) {
#endif
case ValuatorClass:
v = (XValuatorState *) any;
if (v->num_valuators < 2)
goto end;
if (window->tabletPos[0] == -1)
window->tabletPos[0] = normalizeTabletPos(0, v->valuators[0]);
if (window->tabletPos[1] == -1)
window->tabletPos[1] = normalizeTabletPos(1, v->valuators[1]);
}
any = (XInputClass *) ((char *) any + any->length);
}
end:
XFreeDeviceState(state);
}
static void
tabletPosChange(GLUTwindow * window, int first, int count, int *data)
{
int i, value, genEvent = 0;
for (i = first; i < first + count; i++) {
switch (i) {
case 0: /* X axis */
case 1: /* Y axis */
value = normalizeTabletPos(i, data[i - first]);
if (value != window->tabletPos[i]) {
window->tabletPos[i] = value;
genEvent = 1;
}
break;
}
}
if (window->tabletPos[0] == -1 || window->tabletPos[1] == -1)
queryTabletPos(window);
if (genEvent)
window->tabletMotion(window->tabletPos[0], window->tabletPos[1]);
}
#endif /* !_WIN32 */
static int
__glutProcessDeviceEvents(XEvent * event)
{
#if !defined(_WIN32)
GLUTwindow *window;
/* XXX Ugly code fan out. */
/* Can't use switch/case since X Input event types are
dynamic. */
if (__glutDeviceMotionNotify && event->type == __glutDeviceMotionNotify) {
XDeviceMotionEvent *devmot = (XDeviceMotionEvent *) event;
window = __glutGetWindow(devmot->window);
if (window) {
if (__glutTablet
&& devmot->deviceid == __glutTablet->device_id
&& window->tabletMotion) {
tabletPosChange(window, devmot->first_axis, devmot->axes_count,
devmot->axis_data);
} else if (__glutDials
&& devmot->deviceid == __glutDials->device_id
&& window->dials) {
int i, first = devmot->first_axis, count = devmot->axes_count;
for (i = first; i < first + count; i++)
window->dials(i + 1,
normalizeDialAngle(i, devmot->axis_data[i - first]));
} else if (__glutSpaceball
&& devmot->deviceid == __glutSpaceball->device_id) {
/* XXX Assume that space ball motion events come in as
all the first 6 axes. Assume first 3 axes are XYZ
translations; second 3 axes are XYZ rotations. */
if (devmot->first_axis == 0 && devmot->axes_count == 6) {
if (window->spaceMotion)
window->spaceMotion(
normalizeSpaceballDelta(0, devmot->axis_data[0]),
normalizeSpaceballDelta(1, devmot->axis_data[1]),
normalizeSpaceballDelta(2, devmot->axis_data[2]));
if (window->spaceRotate)
window->spaceRotate(
normalizeSpaceballAngle(3, devmot->axis_data[3]),
normalizeSpaceballAngle(4, devmot->axis_data[4]),
normalizeSpaceballAngle(5, devmot->axis_data[5]));
}
}
return 1;
}
} else if (__glutDeviceButtonPress
&& event->type == __glutDeviceButtonPress) {
XDeviceButtonEvent *devbtn = (XDeviceButtonEvent *) event;
window = __glutGetWindow(devbtn->window);
if (window) {
if (__glutTablet
&& devbtn->deviceid == __glutTablet->device_id
&& window->tabletButton
&& devbtn->first_axis == 0
&& devbtn->axes_count == 2) {
tabletPosChange(window, devbtn->first_axis, devbtn->axes_count,
devbtn->axis_data);
window->tabletButton(devbtn->button, GLUT_DOWN,
window->tabletPos[0], window->tabletPos[1]);
} else if (__glutDials
&& devbtn->deviceid == __glutDials->device_id
&& window->buttonBox) {
window->buttonBox(devbtn->button, GLUT_DOWN);
} else if (__glutSpaceball
&& devbtn->deviceid == __glutSpaceball->device_id
&& window->spaceButton) {
window->spaceButton(devbtn->button, GLUT_DOWN);
}
return 1;
}
} else if (__glutDeviceButtonRelease
&& event->type == __glutDeviceButtonRelease) {
XDeviceButtonEvent *devbtn = (XDeviceButtonEvent *) event;
window = __glutGetWindow(devbtn->window);
if (window) {
if (__glutTablet
&& devbtn->deviceid == __glutTablet->device_id
&& window->tabletButton
&& devbtn->first_axis == 0
&& devbtn->axes_count == 2) {
tabletPosChange(window, devbtn->first_axis, devbtn->axes_count,
devbtn->axis_data);
window->tabletButton(devbtn->button, GLUT_UP,
window->tabletPos[0], window->tabletPos[1]);
} else if (__glutDials
&& devbtn->deviceid == __glutDials->device_id
&& window->buttonBox) {
window->buttonBox(devbtn->button, GLUT_UP);
} else if (__glutSpaceball
&& devbtn->deviceid == __glutSpaceball->device_id
&& window->spaceButton) {
window->spaceButton(devbtn->button, GLUT_UP);
}
return 1;
}
}
#else
{
JOYINFOEX info;
JOYCAPS joyCaps;
memset(&info, 0, sizeof(JOYINFOEX));
info.dwSize = sizeof(JOYINFOEX);
info.dwFlags = JOY_RETURNALL;
if (joyGetPosEx(JOYSTICKID1,&info) != JOYERR_NOERROR) {
__glutHasJoystick = 1;
joyGetDevCaps(JOYSTICKID1, &joyCaps, sizeof(joyCaps));
__glutNumJoystickButtons = joyCaps.wNumButtons;
__glutNumJoystickAxes = joyCaps.wNumAxes;
} else {
__glutHasJoystick = 0;
__glutNumJoystickButtons = 0;
__glutNumJoystickAxes = 0;
}
}
#endif /* !_WIN32 */
return 0;
}
static GLUTeventParser eventParser =
{__glutProcessDeviceEvents, NULL};
static void
addDeviceEventParser(void)
{
static Bool been_here = False;
if (been_here)
return;
been_here = True;
__glutRegisterEventParser(&eventParser);
}
static int
probeDevices(void)
{
static Bool been_here = False;
static int support;
#if !defined(_WIN32)
XExtensionVersion *version;
XDeviceInfoPtr device_info, device;
XAnyClassPtr any;
XButtonInfoPtr b;
XValuatorInfoPtr v;
XAxisInfoPtr a;
int num_dev = 0, btns = 0, dials = 0;
int i, j, k;
#endif /* !_WIN32 */
if (been_here) {
return support;
}
been_here = True;
#if !defined(_WIN32)
version = XGetExtensionVersion(__glutDisplay, "XInputExtension");
/* Ugh. XInput extension API forces annoying cast of a pointer
to a long so it can be compared with the NoSuchExtension
value (#defined to 1). */
if (version == NULL || ((long) version) == NoSuchExtension) {
support = 0;
return support;
}
XFree(version);
device_info = XListInputDevices(__glutDisplay, &num_dev);
if (device_info) {
for (i = 0; i < num_dev; i++) {
/* XXX These are SGI names for these devices;
unfortunately, no good standard exists for standard
types of X input extension devices. */
device = &device_info[i];
any = (XAnyClassPtr) device->inputclassinfo;
if (!__glutSpaceball && !strcmp(device->name, "spaceball")) {
v = NULL;
b = NULL;
for (j = 0; j < device->num_classes; j++) {
#if defined(__cplusplus) || defined(c_plusplus)
switch (any->c_class) {
#else
switch (any->class) {
#endif
case ButtonClass:
b = (XButtonInfoPtr) any;
btns = b->num_buttons;
break;
case ValuatorClass:
v = (XValuatorInfoPtr) any;
/* Sanity check: at least 6 valuators? */
if (v->num_axes < NUM_SPACEBALL_AXIS)
goto skip_device;
a = (XAxisInfoPtr) ((char *) v + sizeof(XValuatorInfo));
for (k = 0; k < NUM_SPACEBALL_AXIS; k++, a++) {
__glutSpaceballRange[k].min = a->min_value;
__glutSpaceballRange[k].range = a->max_value - a->min_value;
}
break;
}
any = (XAnyClassPtr) ((char *) any + any->length);
}
if (v) {
__glutSpaceball = XOpenDevice(__glutDisplay, device->id);
if (__glutSpaceball) {
__glutNumSpaceballButtons = btns;
addDeviceEventParser();
}
}
} else if (!__glutDials && !strcmp(device->name, "dial+buttons")) {
v = NULL;
b = NULL;
for (j = 0; j < device->num_classes; j++) {
#if defined(__cplusplus) || defined(c_plusplus)
switch (any->c_class) {
#else
switch (any->class) {
#endif
case ButtonClass:
b = (XButtonInfoPtr) any;
btns = b->num_buttons;
break;
case ValuatorClass:
v = (XValuatorInfoPtr) any;
/* Sanity check: at least 8 valuators? */
if (v->num_axes < NUM_DIALS_AXIS)
goto skip_device;
dials = v->num_axes;
__glutDialsResolution = (int *) malloc(sizeof(int) * dials);
a = (XAxisInfoPtr) ((char *) v + sizeof(XValuatorInfo));
for (k = 0; k < dials; k++, a++) {
__glutDialsResolution[k] = a->resolution;
}
break;
}
any = (XAnyClassPtr) ((char *) any + any->length);
}
if (v) {
__glutDials = XOpenDevice(__glutDisplay, device->id);
if (__glutDials) {
__glutNumButtonBoxButtons = btns;
__glutNumDials = dials;
addDeviceEventParser();
}
}
} else if (!__glutTablet && !strcmp(device->name, "tablet")) {
v = NULL;
b = NULL;
for (j = 0; j < device->num_classes; j++) {
#if defined(__cplusplus) || defined(c_plusplus)
switch (any->c_class) {
#else
switch (any->class) {
#endif
case ButtonClass:
b = (XButtonInfoPtr) any;
btns = b->num_buttons;
break;
case ValuatorClass:
v = (XValuatorInfoPtr) any;
/* Sanity check: exactly 2 valuators? */
if (v->num_axes != NUM_TABLET_AXIS)
goto skip_device;
a = (XAxisInfoPtr) ((char *) v + sizeof(XValuatorInfo));
for (k = 0; k < NUM_TABLET_AXIS; k++, a++) {
__glutTabletRange[k].min = a->min_value;
__glutTabletRange[k].range = a->max_value - a->min_value;
}
break;
}
any = (XAnyClassPtr) ((char *) any + any->length);
}
if (v) {
__glutTablet = XOpenDevice(__glutDisplay, device->id);
if (__glutTablet) {
__glutNumTabletButtons = btns;
addDeviceEventParser();
}
}
} else if (!strcmp(device->name, "mouse")) {
for (j = 0; j < device->num_classes; j++) {
#if defined(__cplusplus) || defined(c_plusplus)
if (any->c_class == ButtonClass) {
#else
if (any->class == ButtonClass) {
#endif
b = (XButtonInfoPtr) any;
__glutNumMouseButtons = b->num_buttons;
}
any = (XAnyClassPtr) ((char *) any + any->length);
}
}
skip_device:;
}
XFreeDeviceList(device_info);
}
#else /* _WIN32 */
__glutNumMouseButtons = GetSystemMetrics(SM_CMOUSEBUTTONS);
#endif /* !_WIN32 */
/* X Input extension might be supported, but only if there is
a tablet, dials, or spaceball do we claim devices are
supported. */
support = __glutTablet || __glutDials || __glutSpaceball;
return support;
}
void
__glutUpdateInputDeviceMask(GLUTwindow * window)
{
#if !defined(_WIN32)
/* 5 (dial and buttons) + 5 (tablet locator and buttons) + 5
(Spaceball buttons and axis) = 15 */
XEventClass eventList[15];
int rc, numEvents;
rc = probeDevices();
if (rc) {
numEvents = 0;
if (__glutTablet) {
if (window->tabletMotion) {
DeviceMotionNotify(__glutTablet, __glutDeviceMotionNotify,
eventList[numEvents]);
numEvents++;
}
if (window->tabletButton) {
DeviceButtonPress(__glutTablet, __glutDeviceButtonPress,
eventList[numEvents]);
numEvents++;
DeviceButtonPressGrab(__glutTablet, __glutDeviceButtonPressGrab,
eventList[numEvents]);
numEvents++;
DeviceButtonRelease(__glutTablet, __glutDeviceButtonRelease,
eventList[numEvents]);
numEvents++;
}
if (window->tabletMotion || window->tabletButton) {
DeviceStateNotify(__glutTablet, __glutDeviceStateNotify,
eventList[numEvents]);
numEvents++;
}
}
if (__glutDials) {
if (window->dials) {
DeviceMotionNotify(__glutDials, __glutDeviceMotionNotify,
eventList[numEvents]);
numEvents++;
}
if (window->buttonBox) {
DeviceButtonPress(__glutDials, __glutDeviceButtonPress,
eventList[numEvents]);
numEvents++;
DeviceButtonPressGrab(__glutDials, __glutDeviceButtonPressGrab,
eventList[numEvents]);
numEvents++;
DeviceButtonRelease(__glutDials, __glutDeviceButtonRelease,
eventList[numEvents]);
numEvents++;
}
if (window->dials || window->buttonBox) {
DeviceStateNotify(__glutDials, __glutDeviceStateNotify,
eventList[numEvents]);
numEvents++;
}
}
if (__glutSpaceball) {
if (window->spaceMotion || window->spaceRotate) {
DeviceMotionNotify(__glutSpaceball, __glutDeviceMotionNotify,
eventList[numEvents]);
numEvents++;
}
if (window->spaceButton) {
DeviceButtonPress(__glutSpaceball, __glutDeviceButtonPress,
eventList[numEvents]);
numEvents++;
DeviceButtonPressGrab(__glutSpaceball, __glutDeviceButtonPressGrab,
eventList[numEvents]);
numEvents++;
DeviceButtonRelease(__glutSpaceball, __glutDeviceButtonRelease,
eventList[numEvents]);
numEvents++;
}
if (window->spaceMotion || window->spaceRotate || window->spaceButton) {
DeviceStateNotify(__glutSpaceball, __glutDeviceStateNotify,
eventList[numEvents]);
numEvents++;
}
}
#if 0
if (window->children) {
GLUTwindow *child = window->children;
do {
XChangeDeviceDontPropagateList(__glutDisplay, child->win,
numEvents, eventList, AddToList);
child = child->siblings;
} while (child);
}
#endif
XSelectExtensionEvent(__glutDisplay, window->win,
eventList, numEvents);
if (window->overlay) {
XSelectExtensionEvent(__glutDisplay, window->overlay->win,
eventList, numEvents);
}
} else {
/* X Input extension not supported; no chance for exotic
input devices. */
}
#endif /* !_WIN32 */
}
/* CENTRY */
int GLUTAPIENTRY
glutDeviceGet(GLenum param)
{
probeDevices();
switch (param) {
case GLUT_HAS_KEYBOARD:
case GLUT_HAS_MOUSE:
/* Assume window system always has mouse and keyboard. */
return 1;
case GLUT_HAS_SPACEBALL:
return __glutSpaceball != NULL;
case GLUT_HAS_DIAL_AND_BUTTON_BOX:
return __glutDials != NULL;
case GLUT_HAS_TABLET:
return __glutTablet != NULL;
case GLUT_NUM_MOUSE_BUTTONS:
return __glutNumMouseButtons;
case GLUT_NUM_SPACEBALL_BUTTONS:
return __glutNumSpaceballButtons;
case GLUT_NUM_BUTTON_BOX_BUTTONS:
return __glutNumButtonBoxButtons;
case GLUT_NUM_DIALS:
return __glutNumDials;
case GLUT_NUM_TABLET_BUTTONS:
return __glutNumTabletButtons;
case GLUT_DEVICE_IGNORE_KEY_REPEAT:
return __glutCurrentWindow->ignoreKeyRepeat;
#ifndef _WIN32
case GLUT_DEVICE_KEY_REPEAT:
{
XKeyboardState state;
XGetKeyboardControl(__glutDisplay, &state);
return state.global_auto_repeat;
}
case GLUT_JOYSTICK_POLL_RATE:
return 0;
#else
case GLUT_DEVICE_KEY_REPEAT:
/* Win32 cannot globally disable key repeat. */
return GLUT_KEY_REPEAT_ON;
case GLUT_JOYSTICK_POLL_RATE:
return __glutCurrentWindow->joyPollInterval;
#endif
case GLUT_HAS_JOYSTICK:
return __glutHasJoystick;
case GLUT_JOYSTICK_BUTTONS:
return __glutNumJoystickButtons;
case GLUT_JOYSTICK_AXES:
return __glutNumJoystickAxes;
default:
__glutWarning("invalid glutDeviceGet parameter: %d", param);
return -1;
}
}
/* ENDCENTRY */
#ifndef __glutint_h__
#define __glutint_h__
/* Copyright (c) Mark J. Kilgard, 1994, 1997, 1998. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#ifdef __VMS
#include <GL/vms_x_fix.h>
#endif
#if defined(__CYGWIN32__)
#include <sys/time.h>
#endif
#define SUPPORT_FORTRAN /* With GLUT 3.7, everyone supports Fortran. */
#if defined(_WIN32)
#include "glutwin32.h"
#else
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#define GLX_GLXEXT_PROTOTYPES
#include <GL/glx.h>
#endif
#ifndef GLUT_BUILDING_LIB
#define GLUT_BUILDING_LIB /* Building the GLUT library itself. */
#endif
#include <GL/glut.h>
#if defined(MESA) && defined(_WIN32) && !defined(__CYGWIN32__)
#include <gl/mesa_wgl.h>
#endif
#ifndef _WIN32
/* added by BrianP: */
#ifndef APIENTRY
#define APIENTRY GLAPIENTRY
#endif
#define __cdecl GLAPIENTRY
#define CDECL GLAPIENTRY
#endif
/* GLUT_BUILDING_LIB is used by <GL/glut.h> to 1) not #pragma link
with the GLUT library, and 2) avoid the Win32 atexit hack. */
/* This must be done after <GL/gl.h> is included. MESA is defined
if the <GL/gl.h> is supplied by Brian Paul's Mesa library. */
#if defined(MESA) && defined(_WIN32)
/* Mesa implements "wgl" versions of GDI entry points needed for
using OpenGL. Map these "wgl" versions to the GDI names via
macros. */
#define ChoosePixelFormat wglChoosePixelFormat
#define DescribePixelFormat wglDescribePixelFormat
#define GetPixelFormat wglGetPixelFormat
#define SetPixelFormat wglSetPixelFormat
#define SwapBuffers wglSwapBuffers
#define GetCurrentContext wglGetCurrentContext
#define GetCurrentDC wglGetCurrentDC
#define MakeCurrent wglMakeCurrent
#define CreateContext wglCreateContext
#define DeleteContext wglDeleteContext
#endif /* MESA */
#ifdef SUPPORT_FORTRAN
#include <GL/glutf90.h>
#endif
#ifdef __vms
#if ( __VMS_VER < 70000000 )
#define OLD_VMS
struct timeval6 {
__int64 val;
};
extern int sys$gettim(struct timeval6 *);
#else
#include <time.h>
#endif
#else
#include <sys/types.h>
#if !defined(_WIN32) || defined(__CYGWIN32__)
#include <sys/time.h>
#else
#include <winsock.h>
#endif
#endif
#if defined(__vms) && ( __VMS_VER < 70000000 )
/* For VMS6.2 or lower :
One TICK on VMS is 100 nanoseconds; 0.1 microseconds or
0.0001 milliseconds. This means that there are 0.01
ticks/ns, 10 ticks/us, 10,000 ticks/ms and 10,000,000
ticks/second. */
#define TICKS_PER_MILLISECOND 10000
#define TICKS_PER_SECOND 10000000
#define GETTIMEOFDAY(_x) (void) sys$gettim (_x);
#define ADD_TIME(dest, src1, src2) { \
(dest).val = (src1).val + (src2).val; \
}
#define TIMEDELTA(dest, src1, src2) { \
(dest).val = (src1).val - (src2).val; \
}
#define IS_AFTER(t1, t2) ((t2).val > (t1).val)
#define IS_AT_OR_AFTER(t1, t2) ((t2).val >= (t1).val)
#else
#if defined(SVR4) && !defined(sun) /* Sun claims SVR4, but
wants 2 args. */
#define GETTIMEOFDAY(_x) gettimeofday(_x)
#else
#define GETTIMEOFDAY(_x) gettimeofday(_x, NULL)
#endif
#define ADD_TIME(dest, src1, src2) { \
if(((dest).tv_usec = \
(src1).tv_usec + (src2).tv_usec) >= 1000000) { \
(dest).tv_usec -= 1000000; \
(dest).tv_sec = (src1).tv_sec + (src2).tv_sec + 1; \
} else { \
(dest).tv_sec = (src1).tv_sec + (src2).tv_sec; \
if(((dest).tv_sec >= 1) && (((dest).tv_usec <0))) { \
(dest).tv_sec --;(dest).tv_usec += 1000000; \
} \
} \
}
#define TIMEDELTA(dest, src1, src2) { \
if(((dest).tv_usec = (src1).tv_usec - (src2).tv_usec) < 0) { \
(dest).tv_usec += 1000000; \
(dest).tv_sec = (src1).tv_sec - (src2).tv_sec - 1; \
} else { \
(dest).tv_sec = (src1).tv_sec - (src2).tv_sec; \
} \
}
#define IS_AFTER(t1, t2) \
(((t2).tv_sec > (t1).tv_sec) || \
(((t2).tv_sec == (t1).tv_sec) && \
((t2).tv_usec > (t1).tv_usec)))
#define IS_AT_OR_AFTER(t1, t2) \
(((t2).tv_sec > (t1).tv_sec) || \
(((t2).tv_sec == (t1).tv_sec) && \
((t2).tv_usec >= (t1).tv_usec)))
#endif
#define IGNORE_IN_GAME_MODE() \
{ if (__glutGameModeWindow) return; }
#define GLUT_WIND_IS_RGB(x) (((x) & GLUT_INDEX) == 0)
#define GLUT_WIND_IS_INDEX(x) (((x) & GLUT_INDEX) != 0)
#define GLUT_WIND_IS_SINGLE(x) (((x) & GLUT_DOUBLE) == 0)
#define GLUT_WIND_IS_DOUBLE(x) (((x) & GLUT_DOUBLE) != 0)
#define GLUT_WIND_HAS_ACCUM(x) (((x) & GLUT_ACCUM) != 0)
#define GLUT_WIND_HAS_ALPHA(x) (((x) & GLUT_ALPHA) != 0)
#define GLUT_WIND_HAS_DEPTH(x) (((x) & GLUT_DEPTH) != 0)
#define GLUT_WIND_HAS_STENCIL(x) (((x) & GLUT_STENCIL) != 0)
#define GLUT_WIND_IS_MULTISAMPLE(x) (((x) & GLUT_MULTISAMPLE) != 0)
#define GLUT_WIND_IS_STEREO(x) (((x) & GLUT_STEREO) != 0)
#define GLUT_WIND_IS_LUMINANCE(x) (((x) & GLUT_LUMINANCE) != 0)
#define GLUT_MAP_WORK (1 << 0)
#define GLUT_EVENT_MASK_WORK (1 << 1)
#define GLUT_REDISPLAY_WORK (1 << 2)
#define GLUT_CONFIGURE_WORK (1 << 3)
#define GLUT_COLORMAP_WORK (1 << 4)
#define GLUT_DEVICE_MASK_WORK (1 << 5)
#define GLUT_FINISH_WORK (1 << 6)
#define GLUT_DEBUG_WORK (1 << 7)
#define GLUT_DUMMY_WORK (1 << 8)
#define GLUT_FULL_SCREEN_WORK (1 << 9)
#define GLUT_OVERLAY_REDISPLAY_WORK (1 << 10)
#define GLUT_REPAIR_WORK (1 << 11)
#define GLUT_OVERLAY_REPAIR_WORK (1 << 12)
/* Frame buffer capability macros and types. */
#define RGBA 0
#define BUFFER_SIZE 1
#define DOUBLEBUFFER 2
#define STEREO 3
#define AUX_BUFFERS 4
#define RED_SIZE 5 /* Used as mask bit for
"color selected". */
#define GREEN_SIZE 6
#define BLUE_SIZE 7
#define ALPHA_SIZE 8
#define DEPTH_SIZE 9
#define STENCIL_SIZE 10
#define ACCUM_RED_SIZE 11 /* Used as mask bit for
"acc selected". */
#define ACCUM_GREEN_SIZE 12
#define ACCUM_BLUE_SIZE 13
#define ACCUM_ALPHA_SIZE 14
#define LEVEL 15
#define NUM_GLXCAPS (LEVEL + 1)
#define XVISUAL (NUM_GLXCAPS + 0)
#define TRANSPARENT (NUM_GLXCAPS + 1)
#define SAMPLES (NUM_GLXCAPS + 2)
#define XSTATICGRAY (NUM_GLXCAPS + 3) /* Used as
mask bit
for "any
visual type
selected". */
#define XGRAYSCALE (NUM_GLXCAPS + 4)
#define XSTATICCOLOR (NUM_GLXCAPS + 5)
#define XPSEUDOCOLOR (NUM_GLXCAPS + 6)
#define XTRUECOLOR (NUM_GLXCAPS + 7)
#define XDIRECTCOLOR (NUM_GLXCAPS + 8)
#define SLOW (NUM_GLXCAPS + 9)
#define CONFORMANT (NUM_GLXCAPS + 10)
#define NUM_CAPS (NUM_GLXCAPS + 11)
/* Frame buffer capablities that don't have a corresponding
FrameBufferMode entry. These get used as mask bits. */
#define NUM (NUM_CAPS + 0)
#define RGBA_MODE (NUM_CAPS + 1)
#define CI_MODE (NUM_CAPS + 2)
#define LUMINANCE_MODE (NUM_CAPS + 3)
#define NONE 0
#define EQ 1
#define NEQ 2
#define LTE 3
#define GTE 4
#define GT 5
#define LT 6
#define MIN 7
typedef struct _Criterion {
int capability;
int comparison;
int value;
} Criterion;
typedef struct _FrameBufferMode {
XVisualInfo *vi;
#if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_fbconfig)
/* fbc is non-NULL when the XVisualInfo* is not OpenGL-capable
(ie, GLX_USE_GL is false), but the SGIX_fbconfig extension shows
the visual's fbconfig is OpenGL-capable. The reason for this is typically
an RGBA luminance fbconfig such as 16-bit StaticGray that could
not be advertised as a GLX visual since StaticGray visuals are
required (by the GLX specification) to be color index. The
SGIX_fbconfig allows StaticGray visuals to instead advertised as
fbconfigs that can provide RGBA luminance support. */
GLXFBConfigSGIX fbc;
#endif
int valid;
int cap[NUM_CAPS];
} FrameBufferMode;
/* DisplayMode capability macros for game mode. */
#define DM_WIDTH 0 /* "width" */
#define DM_HEIGHT 1 /* "height" */
#define DM_PIXEL_DEPTH 2 /* "bpp" (bits per pixel) */
#define DM_HERTZ 3 /* "hertz" */
#define DM_NUM 4 /* "num" */
#define NUM_DM_CAPS (DM_NUM+1)
typedef struct _DisplayMode {
#ifdef _WIN32
DEVMODE devmode;
#else
/* XXX The X Window System does not have a standard
mechanism for display setting changes. On SGI
systems, GLUT could use the XSGIvc (SGI X video
control extension). Perhaps this can be done in
a future release of GLUT. */
#endif
int valid;
int cap[NUM_DM_CAPS];
} DisplayMode;
/* GLUT function types */
typedef void (GLUTCALLBACK *GLUTdisplayCB) (void);
typedef void (GLUTCALLBACK *GLUTreshapeCB) (int, int);
typedef void (GLUTCALLBACK *GLUTkeyboardCB) (unsigned char, int, int);
typedef void (GLUTCALLBACK *GLUTmouseCB) (int, int, int, int);
typedef void (GLUTCALLBACK *GLUTmotionCB) (int, int);
typedef void (GLUTCALLBACK *GLUTpassiveCB) (int, int);
typedef void (GLUTCALLBACK *GLUTentryCB) (int);
typedef void (GLUTCALLBACK *GLUTvisibilityCB) (int);
typedef void (GLUTCALLBACK *GLUTwindowStatusCB) (int);
typedef void (GLUTCALLBACK *GLUTidleCB) (void);
typedef void (GLUTCALLBACK *GLUTtimerCB) (int);
typedef void (GLUTCALLBACK *GLUTmenuStateCB) (int); /* DEPRICATED. */
typedef void (GLUTCALLBACK *GLUTmenuStatusCB) (int, int, int);
typedef void (GLUTCALLBACK *GLUTselectCB) (int);
typedef void (GLUTCALLBACK *GLUTspecialCB) (int, int, int);
typedef void (GLUTCALLBACK *GLUTspaceMotionCB) (int, int, int);
typedef void (GLUTCALLBACK *GLUTspaceRotateCB) (int, int, int);
typedef void (GLUTCALLBACK *GLUTspaceButtonCB) (int, int);
typedef void (GLUTCALLBACK *GLUTdialsCB) (int, int);
typedef void (GLUTCALLBACK *GLUTbuttonBoxCB) (int, int);
typedef void (GLUTCALLBACK *GLUTtabletMotionCB) (int, int);
typedef void (GLUTCALLBACK *GLUTtabletButtonCB) (int, int, int, int);
typedef void (GLUTCALLBACK *GLUTjoystickCB) (unsigned int buttonMask, int x, int y, int z);
typedef struct _GLUTcolorcell GLUTcolorcell;
struct _GLUTcolorcell {
/* GLUT_RED, GLUT_GREEN, GLUT_BLUE */
GLfloat component[3];
};
typedef struct _GLUTcolormap GLUTcolormap;
struct _GLUTcolormap {
Visual *visual; /* visual of the colormap */
Colormap cmap; /* X colormap ID */
int refcnt; /* number of windows using colormap */
int size; /* number of cells in colormap */
int transparent; /* transparent pixel, or -1 if opaque */
GLUTcolorcell *cells; /* array of cells */
GLUTcolormap *next; /* next colormap in list */
};
typedef struct _GLUTwindow GLUTwindow;
typedef struct _GLUToverlay GLUToverlay;
struct _GLUTwindow {
int num; /* Small integer window id (0-based). */
/* Window system related state. */
#if defined(_WIN32)
int pf; /* Pixel format. */
HDC hdc; /* Window's Win32 device context. */
#endif
Window win; /* X window for GLUT window */
GLXContext ctx; /* OpenGL context GLUT glut window */
XVisualInfo *vis; /* visual for window */
Bool visAlloced; /* if vis needs deallocate on destroy */
Colormap cmap; /* RGB colormap for window; None if CI */
GLUTcolormap *colormap; /* colormap; NULL if RGBA */
GLUToverlay *overlay; /* overlay; NULL if no overlay */
#if defined(_WIN32)
HDC renderDc; /* Win32's device context for rendering. */
#endif
Window renderWin; /* X window for rendering (might be
overlay) */
GLXContext renderCtx; /* OpenGL context for rendering (might
be overlay) */
/* GLUT settable or visible window state. */
int width; /* window width in pixels */
int height; /* window height in pixels */
int cursor; /* cursor name */
int visState; /* visibility state (-1 is unknown) */
int shownState; /* if window mapped */
int entryState; /* entry state (-1 is unknown) */
#define GLUT_MAX_MENUS 3
int menu[GLUT_MAX_MENUS]; /* attatched menu nums */
/* Window relationship state. */
GLUTwindow *parent; /* parent window */
GLUTwindow *children; /* list of children */
GLUTwindow *siblings; /* list of siblings */
/* Misc. non-API visible (hidden) state. */
Bool treatAsSingle; /* treat this window as single-buffered
(it might be "fake" though) */
Bool forceReshape; /* force reshape before display */
#if !defined(_WIN32)
Bool isDirect; /* if direct context (X11 only) */
#endif
Bool usedSwapBuffers; /* if swap buffers used last display */
long eventMask; /* mask of X events selected for */
int buttonUses; /* number of button uses, ref cnt */
int tabletPos[2]; /* tablet position (-1 is invalid) */
/* Work list related state. */
unsigned int workMask; /* mask of window work to be done */
GLUTwindow *prevWorkWin; /* link list of windows to work on */
Bool desiredMapState; /* how to mapped window if on map work
list */
Bool ignoreKeyRepeat; /* if window ignores autorepeat */
int desiredConfMask; /* mask of desired window configuration
*/
int desiredX; /* desired X location */
int desiredY; /* desired Y location */
int desiredWidth; /* desired window width */
int desiredHeight; /* desired window height */
int desiredStack; /* desired window stack */
/* Per-window callbacks. */
GLUTdisplayCB display; /* redraw */
GLUTreshapeCB reshape; /* resize (width,height) */
GLUTmouseCB mouse; /* mouse (button,state,x,y) */
GLUTmotionCB motion; /* motion (x,y) */
GLUTpassiveCB passive; /* passive motion (x,y) */
GLUTentryCB entry; /* window entry/exit (state) */
GLUTkeyboardCB keyboard; /* keyboard (ASCII,x,y) */
GLUTkeyboardCB keyboardUp; /* keyboard up (ASCII,x,y) */
GLUTwindowStatusCB windowStatus; /* window status */
GLUTvisibilityCB visibility; /* visibility */
GLUTspecialCB special; /* special key */
GLUTspecialCB specialUp; /* special up key */
GLUTbuttonBoxCB buttonBox; /* button box */
GLUTdialsCB dials; /* dials */
GLUTspaceMotionCB spaceMotion; /* Spaceball motion */
GLUTspaceRotateCB spaceRotate; /* Spaceball rotate */
GLUTspaceButtonCB spaceButton; /* Spaceball button */
GLUTtabletMotionCB tabletMotion; /* tablet motion */
GLUTtabletButtonCB tabletButton; /* tablet button */
#ifdef _WIN32
GLUTjoystickCB joystick; /* joystick */
int joyPollInterval; /* joystick polling interval */
#endif
#ifdef SUPPORT_FORTRAN
GLUTdisplayFCB fdisplay; /* Fortran display */
GLUTreshapeFCB freshape; /* Fortran reshape */
GLUTmouseFCB fmouse; /* Fortran mouse */
GLUTmotionFCB fmotion; /* Fortran motion */
GLUTpassiveFCB fpassive; /* Fortran passive */
GLUTentryFCB fentry; /* Fortran entry */
GLUTkeyboardFCB fkeyboard; /* Fortran keyboard */
GLUTkeyboardFCB fkeyboardUp; /* Fortran keyboard up */
GLUTwindowStatusFCB fwindowStatus; /* Fortran window status */
GLUTvisibilityFCB fvisibility; /* Fortran visibility */
GLUTspecialFCB fspecial; /* special key */
GLUTspecialFCB fspecialUp; /* special key up */
GLUTbuttonBoxFCB fbuttonBox; /* button box */
GLUTdialsFCB fdials; /* dials */
GLUTspaceMotionFCB fspaceMotion; /* Spaceball motion */
GLUTspaceRotateFCB fspaceRotate; /* Spaceball rotate */
GLUTspaceButtonFCB fspaceButton; /* Spaceball button */
GLUTtabletMotionFCB ftabletMotion; /* tablet motion */
GLUTtabletButtonFCB ftabletButton; /* tablet button */
#ifdef _WIN32
GLUTjoystickFCB fjoystick; /* joystick */
#endif
#endif
};
struct _GLUToverlay {
#if defined(_WIN32)
int pf;
HDC hdc;
#endif
Window win;
GLXContext ctx;
XVisualInfo *vis; /* visual for window */
Bool visAlloced; /* if vis needs deallocate on destroy */
Colormap cmap; /* RGB colormap for window; None if CI */
GLUTcolormap *colormap; /* colormap; NULL if RGBA */
int shownState; /* if overlay window mapped */
Bool treatAsSingle; /* treat as single-buffered */
#if !defined(_WIN32)
Bool isDirect; /* if direct context */
#endif
int transparentPixel; /* transparent pixel value */
GLUTdisplayCB display; /* redraw */
#ifdef SUPPORT_FORTRAN
GLUTdisplayFCB fdisplay; /* redraw */
#endif
};
typedef struct _GLUTstale GLUTstale;
struct _GLUTstale {
GLUTwindow *window;
Window win;
GLUTstale *next;
};
extern GLUTstale *__glutStaleWindowList;
#define GLUT_OVERLAY_EVENT_FILTER_MASK \
(ExposureMask | \
StructureNotifyMask | \
EnterWindowMask | \
LeaveWindowMask)
#define GLUT_DONT_PROPAGATE_FILTER_MASK \
(ButtonReleaseMask | \
ButtonPressMask | \
KeyPressMask | \
KeyReleaseMask | \
PointerMotionMask | \
Button1MotionMask | \
Button2MotionMask | \
Button3MotionMask)
#define GLUT_HACK_STOP_PROPAGATE_MASK \
(KeyPressMask | \
KeyReleaseMask)
typedef struct _GLUTmenu GLUTmenu;
typedef struct _GLUTmenuItem GLUTmenuItem;
struct _GLUTmenu {
int id; /* small integer menu id (0-based) */
Window win; /* X window for the menu */
GLUTselectCB select; /* function of menu */
GLUTmenuItem *list; /* list of menu entries */
int num; /* number of entries */
#if !defined(_WIN32)
Bool managed; /* are the InputOnly windows size
validated? */
Bool searched; /* help detect menu loops */
int pixheight; /* height of menu in pixels */
int pixwidth; /* width of menu in pixels */
#endif
int submenus; /* number of submenu entries */
GLUTmenuItem *highlighted; /* pointer to highlighted menu
entry, NULL not highlighted */
GLUTmenu *cascade; /* currently cascading this menu */
GLUTmenuItem *anchor; /* currently anchored to this entry */
int x; /* current x origin relative to the
root window */
int y; /* current y origin relative to the
root window */
#ifdef SUPPORT_FORTRAN
GLUTselectFCB fselect; /* function of menu */
#endif
};
struct _GLUTmenuItem {
Window win; /* InputOnly X window for entry */
GLUTmenu *menu; /* menu entry belongs to */
Bool isTrigger; /* is a submenu trigger? */
int value; /* value to return for selecting this
entry; doubles as submenu id
(0-base) if submenu trigger */
#if defined(_WIN32)
UINT unique; /* unique menu item id (Win32 only) */
#endif
char *label; /* __glutStrdup'ed label string */
int len; /* length of label string */
int pixwidth; /* width of X window in pixels */
GLUTmenuItem *next; /* next menu entry on list for menu */
};
typedef struct _GLUTtimer GLUTtimer;
struct _GLUTtimer {
GLUTtimer *next; /* list of timers */
#ifdef OLD_VMS
struct timeval6 timeout; /* time to be called */
#else
struct timeval timeout; /* time to be called */
#endif
GLUTtimerCB func; /* timer (value) */
int value; /* return value */
#ifdef SUPPORT_FORTRAN
GLUTtimerFCB ffunc; /* Fortran timer */
#endif
};
typedef struct _GLUTeventParser GLUTeventParser;
struct _GLUTeventParser {
int (*func) (XEvent *);
GLUTeventParser *next;
};
/* Declarations to implement glutFullScreen support with
mwm/4Dwm. */
/* The following X property format is defined in Motif 1.1's
Xm/MwmUtils.h, but GLUT should not depend on that header
file. Note: Motif 1.2 expanded this structure with
uninteresting fields (to GLUT) so just stick with the
smaller Motif 1.1 structure. */
typedef struct {
#define MWM_HINTS_DECORATIONS 2
long flags;
long functions;
long decorations;
long input_mode;
} MotifWmHints;
/* Make current and buffer swap macros. */
#ifdef _WIN32
#define MAKE_CURRENT_LAYER(window) \
{ \
HGLRC currentContext = GetCurrentContext(); \
HDC currentDc = GetCurrentDC(); \
\
if (currentContext != window->renderCtx \
|| currentDc != window->renderDc) { \
MakeCurrent(window->renderDc, window->renderCtx); \
} \
}
#define MAKE_CURRENT_WINDOW(window) \
{ \
HGLRC currentContext = GetCurrentContext(); \
HDC currentDc = GetCurrentDC(); \
\
if (currentContext != window->ctx || currentDc != window->hdc) { \
MakeCurrent(window->hdc, window->ctx); \
} \
}
#define MAKE_CURRENT_OVERLAY(overlay) \
MakeCurrent(overlay->hdc, overlay->ctx)
#define UNMAKE_CURRENT() \
MakeCurrent(NULL, NULL)
#define SWAP_BUFFERS_WINDOW(window) \
SwapBuffers(window->hdc)
#define SWAP_BUFFERS_LAYER(window) \
SwapBuffers(window->renderDc)
#else
#define MAKE_CURRENT_LAYER(window) \
glXMakeCurrent(__glutDisplay, window->renderWin, window->renderCtx)
#define MAKE_CURRENT_WINDOW(window) \
glXMakeCurrent(__glutDisplay, window->win, window->ctx)
#define MAKE_CURRENT_OVERLAY(overlay) \
glXMakeCurrent(__glutDisplay, overlay->win, overlay->ctx)
#define UNMAKE_CURRENT() \
glXMakeCurrent(__glutDisplay, None, NULL)
#define SWAP_BUFFERS_WINDOW(window) \
glXSwapBuffers(__glutDisplay, window->win)
#define SWAP_BUFFERS_LAYER(window) \
glXSwapBuffers(__glutDisplay, window->renderWin)
#endif
/* private variables from glut_event.c */
extern GLUTwindow *__glutWindowWorkList;
extern int __glutWindowDamaged;
#ifdef SUPPORT_FORTRAN
extern GLUTtimer *__glutTimerList;
extern GLUTtimer *__glutNewTimer;
#endif
extern GLUTmenu *__glutMappedMenu;
extern void (*__glutUpdateInputDeviceMaskFunc) (GLUTwindow *);
#if !defined(_WIN32)
extern void (*__glutMenuItemEnterOrLeave)(GLUTmenuItem * item,
int num, int type);
extern void (*__glutFinishMenu)(Window win, int x, int y);
extern void (*__glutPaintMenu)(GLUTmenu * menu);
extern void (*__glutStartMenu)(GLUTmenu * menu,
GLUTwindow * window, int x, int y, int x_win, int y_win);
extern GLUTmenu * (*__glutGetMenuByNum)(int menunum);
extern GLUTmenuItem * (*__glutGetMenuItem)(GLUTmenu * menu,
Window win, int *which);
extern GLUTmenu * (*__glutGetMenu)(Window win);
#endif
/* private variables from glut_init.c */
extern Atom __glutWMDeleteWindow;
extern Display *__glutDisplay;
extern unsigned int __glutDisplayMode;
extern char *__glutDisplayString;
extern XVisualInfo *(*__glutDetermineVisualFromString) (char *string, Bool * treatAsSingle,
Criterion * requiredCriteria, int nRequired, int requiredMask, void **fbc);
extern GLboolean __glutDebug;
extern GLboolean __glutForceDirect;
extern GLboolean __glutIconic;
extern GLboolean __glutTryDirect;
extern Window __glutRoot;
extern XSizeHints __glutSizeHints;
extern char **__glutArgv;
extern char *__glutProgramName;
extern int __glutArgc;
extern int __glutConnectionFD;
extern int __glutInitHeight;
extern int __glutInitWidth;
extern int __glutInitX;
extern int __glutInitY;
extern int __glutScreen;
extern int __glutScreenHeight;
extern int __glutScreenWidth;
extern Atom __glutMotifHints;
extern unsigned int __glutModifierMask;
#ifdef _WIN32
extern void (__cdecl *__glutExitFunc)(int retval);
#endif
/* private variables from glut_menu.c */
extern GLUTmenuItem *__glutItemSelected;
extern GLUTmenu **__glutMenuList;
extern void (GLUTCALLBACK *__glutMenuStatusFunc) (int, int, int);
extern void __glutMenuModificationError(void);
extern void __glutSetMenuItem(GLUTmenuItem * item,
const char *label, int value, Bool isTrigger);
/* private variables from glut_win.c */
extern GLUTwindow **__glutWindowList;
extern GLUTwindow *__glutCurrentWindow;
extern GLUTwindow *__glutMenuWindow;
extern GLUTmenu *__glutCurrentMenu;
extern int __glutWindowListSize;
extern void (*__glutFreeOverlayFunc) (GLUToverlay *);
extern void __glutFreeOverlay(GLUToverlay * overlay);
extern XVisualInfo *__glutDetermineWindowVisual(Bool * treatAsSingle,
Bool * visAlloced, void **fbc);
/* private variables from glut_mesa.c */
extern int __glutMesaSwapHackSupport;
/* private variables from glut_gamemode.c */
extern GLUTwindow *__glutGameModeWindow;
/* private routines from glut_cindex.c */
extern GLUTcolormap * __glutAssociateNewColormap(XVisualInfo * vis);
extern void __glutFreeColormap(GLUTcolormap *);
/* private routines from glut_cmap.c */
extern void __glutSetupColormap(
XVisualInfo * vi,
GLUTcolormap ** colormap,
Colormap * cmap);
#if !defined(_WIN32)
extern void __glutEstablishColormapsProperty(
GLUTwindow * window);
extern GLUTwindow *__glutToplevelOf(GLUTwindow * window);
#endif
/* private routines from glut_cursor.c */
extern void __glutSetCursor(GLUTwindow *window);
/* private routines from glut_event.c */
extern void __glutPutOnWorkList(GLUTwindow * window,
int work_mask);
extern void __glutRegisterEventParser(GLUTeventParser * parser);
extern void __glutPostRedisplay(GLUTwindow * window, int layerMask);
extern void handleTimeouts(void);
/* private routines from glut_init.c */
#if !defined(_WIN32)
extern void __glutOpenXConnection(char *display);
#else
extern void __glutOpenWin32Connection(char *display);
#endif
#ifdef OLD_VMS
extern void __glutInitTime(struct timeval6 *beginning);
#else
extern void __glutInitTime(struct timeval *beginning);
#endif
/* private routines for glut_menu.c (or win32_menu.c) */
#if defined(_WIN32)
extern GLUTmenu *__glutGetMenu(Window win);
extern GLUTmenu *__glutGetMenuByNum(int menunum);
extern GLUTmenuItem *__glutGetMenuItem(GLUTmenu * menu,
Window win, int *which);
extern void __glutStartMenu(GLUTmenu * menu,
GLUTwindow * window, int x, int y, int x_win, int y_win);
extern void __glutFinishMenu(Window win, int x, int y);
#endif
extern void __glutSetMenu(GLUTmenu * menu);
/* private routines from glut_util.c */
extern char * __glutStrdup(const char *string);
extern void __glutWarning(char *format,...);
extern void __glutFatalError(char *format,...);
extern void __glutFatalUsage(char *format,...);
/* private routines from glut_win.c */
extern GLUTwindow *__glutGetWindow(Window win);
extern void __glutChangeWindowEventMask(long mask, Bool add);
extern XVisualInfo *__glutDetermineVisual(
unsigned int mode,
Bool * fakeSingle,
XVisualInfo * (getVisualInfo) (unsigned int));
extern XVisualInfo *__glutGetVisualInfo(unsigned int mode);
extern void __glutSetWindow(GLUTwindow * window);
extern void __glutReshapeFunc(GLUTreshapeCB reshapeFunc,
int callingConvention);
extern void GLUTCALLBACK __glutDefaultReshape(int, int);
extern GLUTwindow *__glutCreateWindow(
GLUTwindow * parent,
int x, int y, int width, int height, int gamemode);
extern void __glutDestroyWindow(
GLUTwindow * window,
GLUTwindow * initialWindow);
#if !defined(_WIN32)
/* private routines from glut_glxext.c */
extern int __glutIsSupportedByGLX(char *);
extern int __glut_glXBindChannelToWindowSGIX(Display *dpy, int screen,
int channel, Window window);
extern int __glut_glXChannelRectSGIX(Display *dpy, int screen, int channel,
int x, int y, int w, int h);
extern int __glut_glXQueryChannelRectSGIX(Display *dpy, int screen,
int channel, int *x, int *y,
int *w, int *h);
extern int __glut_glXQueryChannelDeltasSGIX(Display *dpy, int screen,
int channel, int *dx, int *dy,
int *dw, int *dh);
extern int __glut_glXChannelRectSyncSGIX(Display *dpy, int screen, int channel,
GLenum synctype);
extern GLXContext __glut_glXCreateContextWithConfigSGIX(Display *dpy,
GLXFBConfigSGIX config,
int render_type,
GLXContext share_list,
Bool direct);
extern int __glut_glXGetFBConfigAttribSGIX(Display *dpy,
GLXFBConfigSGIX config,
int attribute,
int *value);
extern GLXFBConfigSGIX __glut_glXGetFBConfigFromVisualSGIX(Display *dpy,
XVisualInfo *vis);
#endif
/* private routines from glut_input.c */
extern void __glutUpdateInputDeviceMask(GLUTwindow * window);
/* private routines from glut_mesa.c */
extern void __glutDetermineMesaSwapHackSupport(void);
/* private routines from glut_gameglut.c */
extern void __glutCloseDownGameMode(void);
/* private variables from glut_swap.c (BrianP) */
extern GLint __glutFPS;
extern GLint __glutSwapCount;
extern GLint __glutSwapTime;
#if defined(_WIN32)
/* private routines from win32_*.c */
extern LONG WINAPI __glutWindowProc(HWND win, UINT msg, WPARAM w, LPARAM l);
extern HDC XHDC;
#endif
#endif /* __glutint_h__ */
/* Copyright (c) Mark J. Kilgard, 1997, 1998. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#ifdef _WIN32
#ifdef __MINGW32__
#include <GL/gl.h>
#endif
#include <windows.h>
#ifndef __CYGWIN32__
#include <mmsystem.h> /* Win32 Multimedia API header. */
#endif
#endif
#include "glutint.h"
/* CENTRY */
void GLUTAPIENTRY
glutJoystickFunc(GLUTjoystickCB joystickFunc, int pollInterval)
{
#ifdef _WIN32
if (joystickFunc && (pollInterval > 0)) {
if (__glutCurrentWindow->entryState == WM_SETFOCUS) {
MMRESULT result;
/* Capture joystick focus if current window has
focus now. */
result = joySetCapture(__glutCurrentWindow->win,
JOYSTICKID1, 0, TRUE);
if (result == JOYERR_NOERROR) {
(void) joySetThreshold(JOYSTICKID1, pollInterval);
}
}
__glutCurrentWindow->joyPollInterval = pollInterval;
} else {
/* Release joystick focus if current window has
focus now. */
if (__glutCurrentWindow->joystick
&& (__glutCurrentWindow->joyPollInterval > 0)
&& (__glutCurrentWindow->entryState == WM_SETFOCUS)) {
(void) joyReleaseCapture(JOYSTICKID1);
}
__glutCurrentWindow->joyPollInterval = 0;
}
__glutCurrentWindow->joystick = joystickFunc;
#else
/* XXX No support currently for X11 joysticks. */
#endif
}
void GLUTAPIENTRY
glutForceJoystickFunc(void)
{
#ifdef _WIN32
if (__glutCurrentWindow->joystick) {
JOYINFOEX jix;
MMRESULT res;
int x, y, z;
/* Poll the joystick. */
jix.dwSize = sizeof(jix);
jix.dwFlags = JOY_RETURNALL;
res = joyGetPosEx(JOYSTICKID1,&jix);
if (res == JOYERR_NOERROR) {
/* Convert to int for scaling. */
x = jix.dwXpos;
y = jix.dwYpos;
z = jix.dwZpos;
#define SCALE(v) ((int) ((v - 32767)/32.768))
__glutCurrentWindow->joystick(jix.dwButtons,
SCALE(x), SCALE(y), SCALE(z));
}
}
#else
/* XXX No support currently for X11 joysticks. */
#endif
}
/* ENDCENTRY */
/* Copyright (c) Mark J. Kilgard, 1997. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#include <stdlib.h>
#include "glutint.h"
/* CENTRY */
void GLUTAPIENTRY
glutKeyboardFunc(GLUTkeyboardCB keyboardFunc)
{
__glutChangeWindowEventMask(KeyPressMask,
keyboardFunc != NULL || __glutCurrentWindow->special != NULL);
__glutCurrentWindow->keyboard = keyboardFunc;
}
void GLUTAPIENTRY
glutSpecialFunc(GLUTspecialCB specialFunc)
{
__glutChangeWindowEventMask(KeyPressMask,
specialFunc != NULL || __glutCurrentWindow->keyboard != NULL);
__glutCurrentWindow->special = specialFunc;
}
/* ENDCENTRY */
/* Copyright (c) Mark J. Kilgard, 1996, 1997. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#include "glutint.h"
/* CENTRY */
void GLUTAPIENTRY
glutIgnoreKeyRepeat(int ignore)
{
__glutCurrentWindow->ignoreKeyRepeat = ignore;
}
void GLUTAPIENTRY
glutSetKeyRepeat(int repeatMode)
{
#if !defined(_WIN32)
XKeyboardControl values;
/* GLUT's repeatMode #define's match the Xlib API values. */
values.auto_repeat_mode = repeatMode;
XChangeKeyboardControl(__glutDisplay, KBAutoRepeatMode, &values);
#endif
}
/* ENDCENTRY */
/* Copyright (c) Mark J. Kilgard, 1997. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#include <stdlib.h>
#include "glutint.h"
/* CENTRY */
void GLUTAPIENTRY
glutKeyboardUpFunc(GLUTkeyboardCB keyboardUpFunc)
{
__glutChangeWindowEventMask(KeyReleaseMask,
keyboardUpFunc != NULL || __glutCurrentWindow->specialUp != NULL);
__glutCurrentWindow->keyboardUp = keyboardUpFunc;
}
void GLUTAPIENTRY
glutSpecialUpFunc(GLUTspecialCB specialUpFunc)
{
__glutChangeWindowEventMask(KeyReleaseMask,
specialUpFunc != NULL || __glutCurrentWindow->keyboardUp != NULL);
__glutCurrentWindow->specialUp = specialUpFunc;
}
/* ENDCENTRY */
/* Copyright (c) Mark J. Kilgard, 1994, 1997. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
/* The Win32 GLUT file win32_menu.c completely re-implements all
the menuing functionality implemented. This file is used only by
the X Window System version of GLUT. */
#ifdef __VMS
#include <GL/vms_x_fix.h>
#endif
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <errno.h>
#include <assert.h>
#include <unistd.h>
#include <X11/Xlib.h>
#include <X11/cursorfont.h> /* for XC_arrow */
#include "glutint.h"
#include "layerutil.h"
void (CDECL *__glutMenuStatusFunc) (int, int, int);
GLUTmenuItem *__glutItemSelected;
GLUTmenu **__glutMenuList = NULL;
static int menuListSize = 0;
static XFontStruct *menuFont = NULL;
static Cursor menuCursor;
static Colormap menuColormap;
static Visual *menuVisual;
static int menuDepth;
static int fontHeight;
static GC blackGC, grayGC, whiteGC;
static unsigned long menuBlack, menuWhite, menuGray;
static unsigned long useSaveUnders;
/* A replacement for XAllocColor (originally by Brian Paul).
This function should never fail to allocate a color. When
XAllocColor fails, we return the nearest matching color. If
we have to allocate many colors this function isn't a great
solution; the XQueryColors() could be done just once. */
static void
noFaultXAllocColor(Display * dpy, Colormap cmap, int cmapSize,
XColor * color)
{
XColor *ctable, subColor;
int i, bestmatch;
double mindist; /* 3*2^16^2 exceeds 32-bit long int
precision. */
for (;;) {
/* First try just using XAllocColor. */
if (XAllocColor(dpy, cmap, color)) {
return;
}
/* Retrieve color table entries. */
/* XXX alloca canidate. */
ctable = (XColor *) malloc(cmapSize * sizeof(XColor));
for (i = 0; i < cmapSize; i++)
ctable[i].pixel = i;
XQueryColors(dpy, cmap, ctable, cmapSize);
/* Find best match. */
bestmatch = -1;
mindist = 0.0;
for (i = 0; i < cmapSize; i++) {
double dr = (double) color->red - (double) ctable[i].red;
double dg = (double) color->green - (double) ctable[i].green;
double db = (double) color->blue - (double) ctable[i].blue;
double dist = dr * dr + dg * dg + db * db;
if (bestmatch < 0 || dist < mindist) {
bestmatch = i;
mindist = dist;
}
}
/* Return result. */
subColor.red = ctable[bestmatch].red;
subColor.green = ctable[bestmatch].green;
subColor.blue = ctable[bestmatch].blue;
free(ctable);
if (XAllocColor(dpy, cmap, &subColor)) {
*color = subColor;
return;
}
/* Extremely unlikely, but possibly color was deallocated
and reallocated by someone else before we could
XAllocColor the color cell we located. If so, loop
again... */
}
}
static int
ifSunCreator(void)
{
char *xvendor, *glvendor, *renderer;
int isSunCreator = 0; /* Until proven that it is. */
int savedDisplayMode = 0;
char *savedDisplayString = 0;
GLUTwindow *window;
#define VENDOR_SUN "Sun Microsystems"
#define RENDERER_CREATOR "Creator"
/* Check the X vendor string first. It is easier to check
than the OpenGL vendor and renderer strings since it
doesn't require a valid OpenGL rendering context. Bail
early if not connected to a Sun. */
xvendor = ServerVendor(__glutDisplay);
if (!strncmp(xvendor, VENDOR_SUN, sizeof(VENDOR_SUN) - 1)) {
/* We need a valid current OpenGL rendering context to be
able to call glGetString successfully. If there is not
a current window, set up a temporary one just to call
glGetString with (gag, expensive). */
if (__glutCurrentWindow) {
window = NULL;
} else {
savedDisplayMode = __glutDisplayMode;
savedDisplayString = __glutDisplayString;
__glutDisplayMode = GLUT_RGB | GLUT_SINGLE;
__glutDisplayString = NULL;
window = __glutCreateWindow(NULL, 0, 0, 1, 1, 0);
}
glvendor = (char *) glGetString(GL_VENDOR);
if (!strncmp(glvendor, VENDOR_SUN, sizeof(VENDOR_SUN) - 1)) {
renderer = (char *) glGetString(GL_RENDERER);
if (!strncmp(renderer, RENDERER_CREATOR, sizeof(RENDERER_CREATOR) - 1)) {
isSunCreator = 1;
}
}
/* Destroy the temporary window for glGetString if one
needed to be created. */
if (window) {
__glutDestroyWindow(window, window);
__glutDisplayMode = savedDisplayMode;
__glutDisplayString = savedDisplayString;
}
}
return isSunCreator;
}
static void
menuVisualSetup(void)
{
XLayerVisualInfo template, *visual, *overlayVisuals;
XColor color;
Status status;
Bool presumablyMesa;
int layer, nVisuals, i, dummy;
unsigned long *placeHolders = NULL;
int numPlaceHolders = 0;
Bool allocateHigh;
allocateHigh = ifSunCreator();
/* Start with the highest overlay layer and work down. I
don't think any hardware has more than 3 overlay layers. */
for (layer = 3; layer > 0; layer--) {
template.layer = layer;
template.vinfo.screen = __glutScreen;
overlayVisuals = __glutXGetLayerVisualInfo(__glutDisplay,
VisualScreenMask | VisualLayerMask, &template, &nVisuals);
if (overlayVisuals) {
/* First, check if the default visual is in this layer.
If the default visual is in this layer, we try to use
it since it has pre-defined black and white pixels and
using the default visual will probably minimize
colormap flashing problems. Suggested by Thomas Roell
(thomas@xig.com). */
for (i = 0; i < nVisuals; i++) {
visual = &overlayVisuals[i];
if (visual->vinfo.colormap_size >= 3) {
/* Compare visual IDs just to be safe. */
if (visual->vinfo.visual->visualid == DefaultVisual(__glutDisplay, __glutScreen)->visualid) {
/* Settle for default visual. */
menuVisual = DefaultVisual(__glutDisplay, __glutScreen);
menuDepth = DefaultDepth(__glutDisplay, __glutScreen);
menuColormap = DefaultColormap(__glutDisplay, __glutScreen);
menuBlack = BlackPixel(__glutDisplay, __glutScreen);
menuWhite = WhitePixel(__glutDisplay, __glutScreen);
color.red = color.green = color.blue = 0xaa00;
noFaultXAllocColor(__glutDisplay, menuColormap,
menuVisual->map_entries, &color);
menuGray = color.pixel;
useSaveUnders = 0;
XFree(overlayVisuals);
return;
}
}
}
for (i = 0; i < nVisuals; i++) {
visual = &overlayVisuals[i];
if (visual->vinfo.colormap_size >= 3) {
if (allocateHigh) {
/* For Sun's Creator graphics, try to force the
read-only colors to the high end of the colormap
by first allocating read-write place-holder cells
for all but the last three cells. This helps
avoid colormap flashing problems. */
numPlaceHolders = visual->vinfo.colormap_size - 3;
if (numPlaceHolders > 0) {
placeHolders = (unsigned long *)
malloc(numPlaceHolders * sizeof(unsigned long));
/* A malloc failure would be harmless. */
}
}
menuColormap = XCreateColormap(__glutDisplay, __glutRoot,
visual->vinfo.visual, AllocNone);
if (placeHolders) {
/* Again for Sun's Creator graphics, do the actual
read-write place-holder cell allocation. */
status = XAllocColorCells(__glutDisplay, menuColormap, False, 0, 0,
placeHolders, numPlaceHolders);
if (!status) {
XFreeColormap(__glutDisplay, menuColormap);
free(placeHolders);
continue;
}
}
/* Allocate overlay colormap cells in defined order:
gray, black, white to match the IRIS GL allocation
scheme. Increases likelihood of less overlay
colormap flashing. */
/* XXX Nice if these 3 AllocColor's could be done in
one protocol round-trip. */
color.red = color.green = color.blue = 0xaa00;
status = XAllocColor(__glutDisplay,
menuColormap, &color);
if (!status) {
XFreeColormap(__glutDisplay, menuColormap);
if (placeHolders) {
free(placeHolders);
}
continue;
}
menuGray = color.pixel;
color.red = color.green = color.blue = 0x0000;
status = XAllocColor(__glutDisplay,
menuColormap, &color);
if (!status) {
XFreeColormap(__glutDisplay, menuColormap);
if (placeHolders) {
free(placeHolders);
}
continue;
}
menuBlack = color.pixel;
color.red = color.green = color.blue = 0xffff;
status = XAllocColor(__glutDisplay,
menuColormap, &color);
if (!status) {
XFreeColormap(__glutDisplay, menuColormap);
if (placeHolders) {
free(placeHolders);
}
continue;
}
if (placeHolders) {
/* Now free the placeholder cells. */
XFreeColors(__glutDisplay, menuColormap,
placeHolders, numPlaceHolders, 0);
free(placeHolders);
}
menuWhite = color.pixel;
menuVisual = visual->vinfo.visual;
menuDepth = visual->vinfo.depth;
/* If using overlays, do not request "save unders". */
useSaveUnders = 0;
XFree(overlayVisuals);
return;
}
}
XFree(overlayVisuals);
}
}
/* Settle for default visual. */
menuVisual = DefaultVisual(__glutDisplay, __glutScreen);
menuDepth = DefaultDepth(__glutDisplay, __glutScreen);
menuColormap = DefaultColormap(__glutDisplay, __glutScreen);
menuBlack = BlackPixel(__glutDisplay, __glutScreen);
menuWhite = WhitePixel(__glutDisplay, __glutScreen);
color.red = color.green = color.blue = 0xaa00;
noFaultXAllocColor(__glutDisplay, menuColormap,
menuVisual->map_entries, &color);
menuGray = color.pixel;
/* When no overlays are supported, we would like to use X
"save unders" to avoid exposes to windows obscured by
pop-up menus. However, OpenGL's direct rendering support
means OpenGL interacts poorly with X backing store and
save unders. X servers do not (in implementation
practice) redirect OpenGL rendering destined to obscured
window regions into backing store.
Implementation solutions exist for this problem, but they
are expensive and high-end OpenGL implementations
typically provide fast rendering and/or overlays to
obviate the problem associated of user interfaces (pop-up
menus) forcing redraws of complex normal plane scenes.
(See support for overlays pop-up menus above.)
Mesa 3D, however, does not support direct rendering.
Overlays are often unavailable to Mesa, and Mesa is also
relatively slow. For these reasons, Mesa-rendering GLUT
programs can and should use X save unders.
Look for the GLX extension. If _not_ supported, we are
presumably using Mesa so enable save unders. */
presumablyMesa = !XQueryExtension(__glutDisplay, "GLX",
&dummy, &dummy, &dummy);
if (presumablyMesa) {
useSaveUnders = CWSaveUnder;
} else {
useSaveUnders = 0;
}
}
static void
menuSetup(void)
{
if (menuFont) {
/* MenuFont overload to indicate menu initalization. */
return;
}
menuFont = XLoadQueryFont(__glutDisplay,
"-*-helvetica-bold-o-normal--14-*-*-*-p-*-iso8859-1");
if (!menuFont) {
/* Try back up font. */
menuFont = XLoadQueryFont(__glutDisplay, "fixed");
}
if (!menuFont) {
__glutFatalError("could not load font.");
}
menuVisualSetup();
fontHeight = menuFont->ascent + menuFont->descent;
menuCursor = XCreateFontCursor(__glutDisplay, XC_arrow);
}
static void
menuGraphicsContextSetup(Window win)
{
XGCValues gcvals;
if (blackGC != None) {
return;
}
gcvals.font = menuFont->fid;
gcvals.foreground = menuBlack;
blackGC = XCreateGC(__glutDisplay, win,
GCFont | GCForeground, &gcvals);
gcvals.foreground = menuGray;
grayGC = XCreateGC(__glutDisplay, win, GCForeground, &gcvals);
gcvals.foreground = menuWhite;
whiteGC = XCreateGC(__glutDisplay, win, GCForeground, &gcvals);
}
void
__glutSetMenu(GLUTmenu * menu)
{
__glutCurrentMenu = menu;
}
static void
unmapMenu(GLUTmenu * menu)
{
if (menu->cascade) {
unmapMenu(menu->cascade);
menu->cascade = NULL;
}
menu->anchor = NULL;
menu->highlighted = NULL;
XUnmapWindow(__glutDisplay, menu->win);
}
static void
finishMenu(Window win, int x, int y)
{
Window dummy;
int rc;
unmapMenu(__glutMappedMenu);
XUngrabPointer(__glutDisplay, CurrentTime);
/* Popping up an overlay popup menu will install its own
colormap. If the window associated with the menu has an
overlay, install that window's overlay colormap so the
overlay isn't left using the popup menu's colormap. */
if (__glutMenuWindow->overlay) {
XInstallColormap(__glutDisplay,
__glutMenuWindow->overlay->colormap->cmap);
}
/* This XFlush is needed to to make sure the pointer is
really ungrabbed when the application's menu callback is
called. Otherwise, a deadlock might happen because the
application may try to read from an terminal window, but
yet the ungrab hasn't really happened since it hasn't been
flushed out. */
XFlush(__glutDisplay);
if (__glutMenuStatusFunc) {
if (win != __glutMenuWindow->win) {
/* The button release may have occurred in a window other
than the window requesting the pop-up menu (for
example, one of the submenu windows). In this case, we
need to translate the coordinates into the coordinate
system of the window associated with the window. */
rc = XTranslateCoordinates(__glutDisplay, win, __glutMenuWindow->win,
x, y, &x, &y, &dummy);
assert(rc != False); /* Will always be on same screen. */
}
__glutSetWindow(__glutMenuWindow);
__glutSetMenu(__glutMappedMenu);
/* Setting __glutMappedMenu to NULL permits operations that
change menus or destroy the menu window again. */
__glutMappedMenu = NULL;
__glutMenuStatusFunc(GLUT_MENU_NOT_IN_USE, x, y);
}
/* Setting __glutMappedMenu to NULL permits operations that
change menus or destroy the menu window again. */
__glutMappedMenu = NULL;
/* If an item is selected and it is not a submenu trigger,
generate menu callback. */
if (__glutItemSelected && !__glutItemSelected->isTrigger) {
__glutSetWindow(__glutMenuWindow);
/* When menu callback is triggered, current menu should be
set to the callback menu. */
__glutSetMenu(__glutItemSelected->menu);
__glutItemSelected->menu->select(
__glutItemSelected->value);
}
__glutMenuWindow = NULL;
}
#define MENU_BORDER 1
#define MENU_GAP 2
#define MENU_ARROW_GAP 6
#define MENU_ARROW_WIDTH 8
static void
mapMenu(GLUTmenu * menu, int x, int y)
{
XWindowChanges changes;
unsigned int mask;
int subMenuExtension, num;
/* If there are submenus, we need to provide extra space for
the submenu pull arrow. */
if (menu->submenus > 0) {
subMenuExtension = MENU_ARROW_GAP + MENU_ARROW_WIDTH;
} else {
subMenuExtension = 0;
}
changes.stack_mode = Above;
mask = CWStackMode | CWX | CWY;
/* If the menu isn't managed (ie, validated so all the
InputOnly subwindows are the right size), do so. */
if (!menu->managed) {
GLUTmenuItem *item;
item = menu->list;
num = menu->num;
while (item) {
XWindowChanges itemupdate;
itemupdate.y = (num - 1) * fontHeight + MENU_GAP;
itemupdate.width = menu->pixwidth;
itemupdate.width += subMenuExtension;
XConfigureWindow(__glutDisplay, item->win,
CWWidth | CWY, &itemupdate);
item = item->next;
num--;
}
menu->pixheight = MENU_GAP +
fontHeight * menu->num + MENU_GAP;
changes.height = menu->pixheight;
changes.width = MENU_GAP +
menu->pixwidth + subMenuExtension + MENU_GAP;
mask |= CWWidth | CWHeight;
menu->managed = True;
}
/* Make sure menu appears fully on screen. */
if (y + menu->pixheight >= __glutScreenHeight) {
changes.y = __glutScreenHeight - menu->pixheight;
} else {
changes.y = y;
}
if (x + menu->pixwidth + subMenuExtension >=
__glutScreenWidth) {
changes.x = __glutScreenWidth -
menu->pixwidth + subMenuExtension;
} else {
changes.x = x;
}
/* Rember where the menu is placed so submenus can be
properly placed relative to it. */
menu->x = changes.x;
menu->y = changes.y;
XConfigureWindow(__glutDisplay, menu->win, mask, &changes);
XInstallColormap(__glutDisplay, menuColormap);
/* XXX The XRaiseWindow below should not be necessary because
the XConfigureWindow requests an Above stack mode (same as
XRaiseWindow), but some Sun users complained this was still
necessary. Probably some window manager or X server bug on
these machines?? */
XRaiseWindow(__glutDisplay, menu->win);
XMapWindow(__glutDisplay, menu->win);
}
static void
startMenu(GLUTmenu * menu, GLUTwindow * window,
int x, int y, int x_win, int y_win)
{
int grab;
assert(__glutMappedMenu == NULL);
grab = XGrabPointer(__glutDisplay, __glutRoot, True,
ButtonPressMask | ButtonReleaseMask,
GrabModeAsync, GrabModeAsync,
__glutRoot, menuCursor, CurrentTime);
if (grab != GrabSuccess) {
/* Somebody else has pointer grabbed, ignore menu
activation. */
return;
}
__glutMappedMenu = menu;
__glutMenuWindow = window;
__glutItemSelected = NULL;
if (__glutMenuStatusFunc) {
__glutSetMenu(menu);
__glutSetWindow(window);
__glutMenuStatusFunc(GLUT_MENU_IN_USE, x_win, y_win);
}
mapMenu(menu, x, y);
}
static void
paintSubMenuArrow(Window win, int x, int y)
{
XPoint p[5];
p[0].x = p[4].x = x;
p[0].y = p[4].y = y - menuFont->ascent + 1;
p[1].x = p[0].x + MENU_ARROW_WIDTH - 1;
p[1].y = p[0].y + (menuFont->ascent / 2) - 1;
p[2].x = p[1].x;
p[2].y = p[1].y + 1;
p[3].x = p[0].x;
p[3].y = p[0].y + menuFont->ascent - 2;
XFillPolygon(__glutDisplay, win,
whiteGC, p, 4, Convex, CoordModeOrigin);
XDrawLines(__glutDisplay, win, blackGC, p, 5, CoordModeOrigin);
}
static void
paintMenuItem(GLUTmenuItem * item, int num)
{
Window win = item->menu->win;
GC gc;
int y;
int subMenuExtension;
if (item->menu->submenus > 0) {
subMenuExtension = MENU_ARROW_GAP + MENU_ARROW_WIDTH;
} else {
subMenuExtension = 0;
}
if (item->menu->highlighted == item) {
gc = whiteGC;
} else {
gc = grayGC;
}
y = MENU_GAP + fontHeight * num - menuFont->descent;
XFillRectangle(__glutDisplay, win, gc,
MENU_GAP, y - fontHeight + menuFont->descent,
item->menu->pixwidth + subMenuExtension, fontHeight);
XDrawString(__glutDisplay, win, blackGC,
MENU_GAP, y, item->label, item->len);
if (item->isTrigger) {
paintSubMenuArrow(win,
item->menu->pixwidth + MENU_ARROW_GAP + 1, y);
}
}
static void
paintMenu(GLUTmenu * menu)
{
GLUTmenuItem *item;
int i = menu->num;
int y = MENU_GAP + fontHeight * i - menuFont->descent;
item = menu->list;
while (item) {
if (item->menu->highlighted == item) {
paintMenuItem(item, i);
} else {
/* Quick render of the menu item; assume background
already cleared to gray. */
XDrawString(__glutDisplay, menu->win, blackGC,
2, y, item->label, item->len);
if (item->isTrigger) {
paintSubMenuArrow(menu->win,
menu->pixwidth + MENU_ARROW_GAP + 1, y);
}
}
i--;
y -= fontHeight;
item = item->next;
}
}
static GLUTmenuItem *
getMenuItem(GLUTmenu * menu, Window win, int *which)
{
GLUTmenuItem *item;
int i;
if (menu->searched) {
__glutFatalError("submenu infinite loop detected");
}
menu->searched = True;
i = menu->num;
item = menu->list;
while (item) {
if (item->win == win) {
*which = i;
menu->searched = False;
return item;
}
if (item->isTrigger) {
GLUTmenuItem *subitem;
subitem = __glutGetMenuItem(__glutMenuList[item->value],
win, which);
if (subitem) {
menu->searched = False;
return subitem;
}
}
i--;
item = item->next;
}
menu->searched = False;
return NULL;
}
static int
getMenuItemIndex(GLUTmenuItem * item)
{
int count = 0;
while (item) {
count++;
item = item->next;
}
return count;
}
static GLUTmenu *
getMenu(Window win)
{
GLUTmenu *menu;
menu = __glutMappedMenu;
while (menu) {
if (win == menu->win) {
return menu;
}
menu = menu->cascade;
}
return NULL;
}
static GLUTmenu *
getMenuByNum(int menunum)
{
if (menunum < 1 || menunum > menuListSize) {
return NULL;
}
return __glutMenuList[menunum - 1];
}
static int
getUnusedMenuSlot(void)
{
int i;
/* Look for allocated, unused slot. */
for (i = 0; i < menuListSize; i++) {
if (!__glutMenuList[i]) {
return i;
}
}
/* Allocate a new slot. */
menuListSize++;
if (__glutMenuList) {
__glutMenuList = (GLUTmenu **)
realloc(__glutMenuList, menuListSize * sizeof(GLUTmenu *));
} else {
/* XXX Some realloc's do not correctly perform a malloc
when asked to perform a realloc on a NULL pointer,
though the ANSI C library spec requires this. */
__glutMenuList = (GLUTmenu **) malloc(sizeof(GLUTmenu *));
}
if (!__glutMenuList) {
__glutFatalError("out of memory.");
}
__glutMenuList[menuListSize - 1] = NULL;
return menuListSize - 1;
}
void
__glutMenuModificationError(void)
{
/* XXX Remove the warning after GLUT 3.0. */
__glutWarning("The following is a new check for GLUT 3.0; update your code.");
__glutFatalError("menu manipulation not allowed while menus in use.");
}
static void
menuItemEnterOrLeave(GLUTmenuItem * item,
int num, int type)
{
int alreadyUp = 0;
if (type == EnterNotify) {
GLUTmenuItem *prevItem = item->menu->highlighted;
if (prevItem && prevItem != item) {
/* If there's an already higlighted item in this menu
that is different from this one (we could be
re-entering an item with an already cascaded
submenu!), unhighlight the previous item. */
item->menu->highlighted = NULL;
paintMenuItem(prevItem, getMenuItemIndex(prevItem));
}
item->menu->highlighted = item;
__glutItemSelected = item;
if (item->menu->cascade) {
if (!item->isTrigger) {
/* Entered a menu item that is not a submenu trigger,
so pop down the current submenu cascade of this
menu. */
unmapMenu(item->menu->cascade);
item->menu->cascade = NULL;
} else {
GLUTmenu *submenu = __glutMenuList[item->value];
if (submenu->anchor == item) {
/* We entered the submenu trigger for the submenu
that is already up, so don't take down the
submenu. */
alreadyUp = 1;
} else {
/* Submenu already popped up for some other submenu
item of this menu; need to pop down that other
submenu cascade. */
unmapMenu(item->menu->cascade);
item->menu->cascade = NULL;
}
}
}
if (!alreadyUp) {
/* Make sure the menu item gets painted with
highlighting. */
paintMenuItem(item, num);
} else {
/* If already up, should already be highlighted. */
}
} else {
/* LeaveNotify: Handle leaving a menu item... */
if (item->menu->cascade &&
item->menu->cascade->anchor == item) {
/* If there is a submenu casacaded from this item, do not
change the highlighting on this item upon leaving. */
} else {
/* Unhighlight this menu item. */
item->menu->highlighted = NULL;
paintMenuItem(item, num);
}
__glutItemSelected = NULL;
}
if (item->isTrigger) {
if (type == EnterNotify && !alreadyUp) {
GLUTmenu *submenu = __glutMenuList[item->value];
mapMenu(submenu,
item->menu->x + item->menu->pixwidth +
MENU_ARROW_GAP + MENU_ARROW_WIDTH +
MENU_GAP + MENU_BORDER,
item->menu->y + fontHeight * (num - 1) + MENU_GAP);
item->menu->cascade = submenu;
submenu->anchor = item;
}
}
}
/* Installs callback functions for use by glut_event.c The point
of this is so that GLUT's menu code only gets linked into
GLUT binaries (assuming a static library) if the GLUT menu
API is used. */
static void
installMenuCallbacks(void)
{
__glutMenuItemEnterOrLeave = menuItemEnterOrLeave;
__glutFinishMenu = finishMenu;
__glutPaintMenu = paintMenu;
__glutStartMenu = startMenu;
__glutGetMenuByNum = getMenuByNum;
__glutGetMenu = getMenu;
__glutGetMenuItem = getMenuItem;
}
int GLUTAPIENTRY
glutCreateMenu(GLUTselectCB selectFunc)
{
XSetWindowAttributes wa;
GLUTmenu *menu;
int menuid;
if (__glutMappedMenu) {
__glutMenuModificationError();
}
if (!__glutDisplay) {
__glutOpenXConnection(NULL);
}
installMenuCallbacks();
menuid = getUnusedMenuSlot();
menu = (GLUTmenu *) malloc(sizeof(GLUTmenu));
if (!menu) {
__glutFatalError("out of memory.");
}
menu->id = menuid;
menu->num = 0;
menu->submenus = 0;
menu->managed = False;
menu->searched = False;
menu->pixwidth = 0;
menu->select = selectFunc;
menu->list = NULL;
menu->cascade = NULL;
menu->highlighted = NULL;
menu->anchor = NULL;
menuSetup();
wa.override_redirect = True;
wa.background_pixel = menuGray;
wa.border_pixel = menuBlack;
wa.colormap = menuColormap;
wa.event_mask = StructureNotifyMask | ExposureMask |
ButtonPressMask | ButtonReleaseMask |
EnterWindowMask | LeaveWindowMask;
/* Save unders really only enabled if useSaveUnders is set to
CWSaveUnder, ie. using Mesa 3D. See earlier comments. */
wa.save_under = True;
menu->win = XCreateWindow(__glutDisplay, __glutRoot,
/* Real position determined when mapped. */
0, 0,
/* Real size will be determined when menu is manged. */
1, 1,
MENU_BORDER, menuDepth, InputOutput, menuVisual,
CWOverrideRedirect | CWBackPixel | CWBorderPixel |
CWEventMask | CWColormap | useSaveUnders,
&wa);
menuGraphicsContextSetup(menu->win);
__glutMenuList[menuid] = menu;
__glutSetMenu(menu);
return menuid + 1;
}
/* CENTRY */
int GLUTAPIENTRY
glutGetMenu(void)
{
if (__glutCurrentMenu) {
return __glutCurrentMenu->id + 1;
} else {
return 0;
}
}
void GLUTAPIENTRY
glutSetMenu(int menuid)
{
GLUTmenu *menu;
if (menuid < 1 || menuid > menuListSize) {
__glutWarning("glutSetMenu attempted on bogus menu.");
return;
}
menu = __glutMenuList[menuid - 1];
if (!menu) {
__glutWarning("glutSetMenu attempted on bogus menu.");
return;
}
__glutSetMenu(menu);
}
/* ENDCENTRY */
void
__glutSetMenuItem(GLUTmenuItem * item, const char *label,
int value, Bool isTrigger)
{
GLUTmenu *menu;
menu = item->menu;
item->label = __glutStrdup(label);
if (!item->label) {
__glutFatalError("out of memory.");
}
item->isTrigger = isTrigger;
item->len = (int) strlen(label);
item->value = value;
item->pixwidth = XTextWidth(menuFont, label, item->len) + 4;
if (item->pixwidth > menu->pixwidth) {
menu->pixwidth = item->pixwidth;
}
menu->managed = False;
}
/* CENTRY */
void GLUTAPIENTRY
glutAddMenuEntry(const char *label, int value)
{
XSetWindowAttributes wa;
GLUTmenuItem *entry;
if (__glutMappedMenu) {
__glutMenuModificationError();
}
entry = (GLUTmenuItem *) malloc(sizeof(GLUTmenuItem));
if (!entry) {
__glutFatalError("out of memory.");
}
entry->menu = __glutCurrentMenu;
__glutSetMenuItem(entry, label, value, False);
wa.event_mask = EnterWindowMask | LeaveWindowMask;
entry->win = XCreateWindow(__glutDisplay,
__glutCurrentMenu->win, MENU_GAP,
__glutCurrentMenu->num * fontHeight + MENU_GAP, /* x & y */
entry->pixwidth, fontHeight, /* width & height */
0, CopyFromParent, InputOnly, CopyFromParent,
CWEventMask, &wa);
XMapWindow(__glutDisplay, entry->win);
__glutCurrentMenu->num++;
entry->next = __glutCurrentMenu->list;
__glutCurrentMenu->list = entry;
}
void GLUTAPIENTRY
glutAddSubMenu(const char *label, int menu)
{
XSetWindowAttributes wa;
GLUTmenuItem *submenu;
if (__glutMappedMenu) {
__glutMenuModificationError();
}
submenu = (GLUTmenuItem *) malloc(sizeof(GLUTmenuItem));
if (!submenu) {
__glutFatalError("out of memory.");
}
__glutCurrentMenu->submenus++;
submenu->menu = __glutCurrentMenu;
__glutSetMenuItem(submenu, label, /* base 0 */ menu - 1, True);
wa.event_mask = EnterWindowMask | LeaveWindowMask;
submenu->win = XCreateWindow(__glutDisplay,
__glutCurrentMenu->win, MENU_GAP,
__glutCurrentMenu->num * fontHeight + MENU_GAP, /* x & y */
submenu->pixwidth, fontHeight, /* width & height */
0, CopyFromParent, InputOnly, CopyFromParent,
CWEventMask, &wa);
XMapWindow(__glutDisplay, submenu->win);
__glutCurrentMenu->num++;
submenu->next = __glutCurrentMenu->list;
__glutCurrentMenu->list = submenu;
}
void GLUTAPIENTRY
glutAttachMenu(int button)
{
/* if button >= GLUT_MAX_MENUS, we'll go out of array bounds below */
if (button >= GLUT_MAX_MENUS) {
return;
}
if (__glutMappedMenu) {
__glutMenuModificationError();
}
installMenuCallbacks();
if (__glutCurrentWindow->menu[button] < 1) {
__glutCurrentWindow->buttonUses++;
}
__glutChangeWindowEventMask(
ButtonPressMask | ButtonReleaseMask, True);
__glutCurrentWindow->menu[button] = __glutCurrentMenu->id + 1;
}
/* ENDCENTRY */
/* Copyright (c) Mark J. Kilgard, 1994, 1997. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
/* glut_menu2.c implements the little used GLUT menu calls in
a distinct file from glut_menu.c for slim static linking. */
/* The Win32 GLUT file win32_menu.c completely re-implements all
the menuing functionality implemented. This file is used only by
the X Window System version of GLUT. */
#ifdef __VMS
#include <GL/vms_x_fix.h>
#endif
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <errno.h>
#include <assert.h>
#include <X11/Xlib.h>
#include "glutint.h"
#include "layerutil.h"
/* CENTRY */
/* DEPRICATED, use glutMenuStatusFunc instead. */
void GLUTAPIENTRY
glutMenuStateFunc(GLUTmenuStateCB menuStateFunc)
{
__glutMenuStatusFunc = (GLUTmenuStatusCB) menuStateFunc;
}
void GLUTAPIENTRY
glutMenuStatusFunc(GLUTmenuStatusCB menuStatusFunc)
{
__glutMenuStatusFunc = menuStatusFunc;
}
void GLUTAPIENTRY
glutDestroyMenu(int menunum)
{
GLUTmenu *menu = __glutGetMenuByNum(menunum);
GLUTmenuItem *item, *next;
if (__glutMappedMenu)
__glutMenuModificationError();
assert(menu->id == menunum - 1);
XDestroySubwindows(__glutDisplay, menu->win);
XDestroyWindow(__glutDisplay, menu->win);
__glutMenuList[menunum - 1] = NULL;
/* free all menu entries */
item = menu->list;
while (item) {
assert(item->menu == menu);
next = item->next;
free(item->label);
free(item);
item = next;
}
if (__glutCurrentMenu == menu) {
__glutCurrentMenu = NULL;
}
free(menu);
}
void GLUTAPIENTRY
glutChangeToMenuEntry(int num, const char *label, int value)
{
GLUTmenuItem *item;
int i;
if (__glutMappedMenu)
__glutMenuModificationError();
i = __glutCurrentMenu->num;
item = __glutCurrentMenu->list;
while (item) {
if (i == num) {
if (item->isTrigger) {
/* If changing a submenu trigger to a menu entry, we
need to account for submenus. */
item->menu->submenus--;
}
free(item->label);
__glutSetMenuItem(item, label, value, False);
return;
}
i--;
item = item->next;
}
__glutWarning("Current menu has no %d item.", num);
}
void GLUTAPIENTRY
glutChangeToSubMenu(int num, const char *label, int menu)
{
GLUTmenuItem *item;
int i;
if (__glutMappedMenu)
__glutMenuModificationError();
i = __glutCurrentMenu->num;
item = __glutCurrentMenu->list;
while (item) {
if (i == num) {
if (!item->isTrigger) {
/* If changing a menu entry to as submenu trigger, we
need to account for submenus. */
item->menu->submenus++;
}
free(item->label);
__glutSetMenuItem(item, label, /* base 0 */ menu - 1, True);
return;
}
i--;
item = item->next;
}
__glutWarning("Current menu has no %d item.", num);
}
void GLUTAPIENTRY
glutRemoveMenuItem(int num)
{
GLUTmenuItem *item, **prev, *remaining;
int pixwidth, i;
if (__glutMappedMenu)
__glutMenuModificationError();
i = __glutCurrentMenu->num;
prev = &__glutCurrentMenu->list;
item = __glutCurrentMenu->list;
/* If menu item is removed, the menu's pixwidth may need to
be recomputed. */
pixwidth = 1;
while (item) {
if (i == num) {
/* If this menu item's pixwidth is as wide as the menu's
pixwidth, removing this menu item will necessitate
shrinking the menu's pixwidth. */
if (item->pixwidth >= __glutCurrentMenu->pixwidth) {
/* Continue recalculating menu pixwidth, first skipping
the removed item. */
remaining = item->next;
while (remaining) {
if (remaining->pixwidth > pixwidth) {
pixwidth = remaining->pixwidth;
}
remaining = remaining->next;
}
__glutCurrentMenu->pixwidth = pixwidth;
}
__glutCurrentMenu->num--;
__glutCurrentMenu->managed = False;
/* Patch up menu's item list. */
*prev = item->next;
free(item->label);
free(item);
return;
}
if (item->pixwidth > pixwidth) {
pixwidth = item->pixwidth;
}
i--;
prev = &item->next;
item = item->next;
}
__glutWarning("Current menu has no %d item.", num);
}
void GLUTAPIENTRY
glutDetachMenu(int button)
{
if (__glutMappedMenu)
__glutMenuModificationError();
if (__glutCurrentWindow->menu[button] > 0) {
__glutCurrentWindow->buttonUses--;
__glutChangeWindowEventMask(ButtonPressMask | ButtonReleaseMask,
__glutCurrentWindow->buttonUses > 0);
__glutCurrentWindow->menu[button] = 0;
}
}
/* ENDCENTRY */
/* Copyright (c) Mark J. Kilgard, 1996. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#include <stdlib.h>
#include <string.h>
#include "glutint.h"
int __glutMesaSwapHackSupport = 0; /* Not supported until
proven otherwise. */
/* Use the "Mesa swap hack" if reasonable if and only if
MESA_SWAP_HACK is set to something whose first character is
not "N" or "n" AND "Brian Paul" is the vendor string AND
"Mesa X11"* (or "Mesa" for backward compatibility) is the
renderer string.
Anyone who modifies Mesa so that glXSwapBuffers does not
simply blit the previously rendered back buffer should
change either their vendor or renderer string to avoid
confusing GLUT. */
void
__glutDetermineMesaSwapHackSupport(void)
{
static int doneAlready = 0;
char *env, *vendor, *renderer;
if (doneAlready)
return;
env = getenv("MESA_SWAP_HACK");
if (env) {
if ((env[0] != 'n') && (env[0] != 'N')) {
vendor = (char *) glGetString(GL_VENDOR);
renderer = (char *) glGetString(GL_RENDERER);
/* Old versions of X11 Mesa uses the renderer string
"Mesa"; Brian plans to start using "Mesa X11" to
distinguish the X version of Mesa from other flavor
such as Windows or 3Dfx. */
#define MESA_X11 "Mesa X11"
/* XXX At some point in the future, eliminate the
backward compatibility for the old "Mesa" renderer
string. */
if (!strcmp(vendor, "Brian Paul") && (!strcmp(renderer, "Mesa") ||
!strncmp(renderer, MESA_X11, sizeof(MESA_X11) - 1)))
__glutMesaSwapHackSupport = 1;
}
}
doneAlready = 1;
}
/* Copyright (c) Mark J. Kilgard, 1994, 1997. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#include <stdio.h>
#include "glutint.h"
GLint __glutFPS = 0;
GLint __glutSwapCount = 0;
GLint __glutSwapTime = 0;
/* CENTRY */
void GLUTAPIENTRY
glutSwapBuffers(void)
{
GLUTwindow *window = __glutCurrentWindow;
if (window->renderWin == window->win) {
if (__glutCurrentWindow->treatAsSingle) {
/* Pretend the double buffered window is single buffered,
so treat glutSwapBuffers as a no-op. */
return;
}
} else {
if (__glutCurrentWindow->overlay->treatAsSingle) {
/* Pretend the double buffered overlay is single
buffered, so treat glutSwapBuffers as a no-op. */
return;
}
}
/* For the MESA_SWAP_HACK. */
window->usedSwapBuffers = 1;
SWAP_BUFFERS_LAYER(__glutCurrentWindow);
/* I considered putting the window being swapped on the
GLUT_FINISH_WORK work list because you could call
glutSwapBuffers from an idle callback which doesn't call
__glutSetWindow which normally adds indirect rendering
windows to the GLUT_FINISH_WORK work list. Not being put
on the list could lead to the buffering up of multiple
redisplays and buffer swaps and hamper interactivity. I
consider this an application bug due to not using
glutPostRedisplay to trigger redraws. If
glutPostRedisplay were used, __glutSetWindow would be
called and a glFinish to throttle buffering would occur. */
if (__glutFPS) {
GLint t = glutGet(GLUT_ELAPSED_TIME);
__glutSwapCount++;
if (__glutSwapTime == 0)
__glutSwapTime = t;
else if (t - __glutSwapTime > __glutFPS) {
float time = 0.001 * (t - __glutSwapTime);
float fps = (float) __glutSwapCount / time;
fprintf(stderr, "GLUT: %d frames in %.2f seconds = %.2f FPS\n",
__glutSwapCount, time, fps);
__glutSwapTime = t;
__glutSwapCount = 0;
}
}
}
/* ENDCENTRY */
/* Copyright (c) Mark J. Kilgard, 1994. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#include "glutint.h"
/* CENTRY */
int GLUTAPIENTRY
glutGetModifiers(void)
{
int modifiers;
if(__glutModifierMask == (unsigned int) ~0) {
__glutWarning(
"glutCurrentModifiers: do not call outside core input callback.");
return 0;
}
modifiers = 0;
if(__glutModifierMask & (ShiftMask|LockMask))
modifiers |= GLUT_ACTIVE_SHIFT;
if(__glutModifierMask & ControlMask)
modifiers |= GLUT_ACTIVE_CTRL;
if(__glutModifierMask & Mod1Mask)
modifiers |= GLUT_ACTIVE_ALT;
return modifiers;
}
/* ENDCENTRY */
/* GENERATED FILE -- DO NOT MODIFY */
#include "glutstroke.h"
/* char: 33 '!' */
static const CoordRec char33_stroke0[] = {
{ 52.381, 100 },
{ 52.381, 33.3333 },
};
static const CoordRec char33_stroke1[] = {
{ 52.381, 9.5238 },
{ 47.6191, 4.7619 },
{ 52.381, 0 },
{ 57.1429, 4.7619 },
{ 52.381, 9.5238 },
};
static const StrokeRec char33[] = {
{ 2, char33_stroke0 },
{ 5, char33_stroke1 },
};
/* char: 34 '"' */
static const CoordRec char34_stroke0[] = {
{ 33.3334, 100 },
{ 33.3334, 66.6667 },
};
static const CoordRec char34_stroke1[] = {
{ 71.4286, 100 },
{ 71.4286, 66.6667 },
};
static const StrokeRec char34[] = {
{ 2, char34_stroke0 },
{ 2, char34_stroke1 },
};
/* char: 35 '#' */
static const CoordRec char35_stroke0[] = {
{ 54.7619, 119.048 },
{ 21.4286, -33.3333 },
};
static const CoordRec char35_stroke1[] = {
{ 83.3334, 119.048 },
{ 50, -33.3333 },
};
static const CoordRec char35_stroke2[] = {
{ 21.4286, 57.1429 },
{ 88.0952, 57.1429 },
};
static const CoordRec char35_stroke3[] = {
{ 16.6667, 28.5714 },
{ 83.3334, 28.5714 },
};
static const StrokeRec char35[] = {
{ 2, char35_stroke0 },
{ 2, char35_stroke1 },
{ 2, char35_stroke2 },
{ 2, char35_stroke3 },
};
/* char: 36 '$' */
static const CoordRec char36_stroke0[] = {
{ 42.8571, 119.048 },
{ 42.8571, -19.0476 },
};
static const CoordRec char36_stroke1[] = {
{ 61.9047, 119.048 },
{ 61.9047, -19.0476 },
};
static const CoordRec char36_stroke2[] = {
{ 85.7143, 85.7143 },
{ 76.1905, 95.2381 },
{ 61.9047, 100 },
{ 42.8571, 100 },
{ 28.5714, 95.2381 },
{ 19.0476, 85.7143 },
{ 19.0476, 76.1905 },
{ 23.8095, 66.6667 },
{ 28.5714, 61.9048 },
{ 38.0952, 57.1429 },
{ 66.6666, 47.619 },
{ 76.1905, 42.8571 },
{ 80.9524, 38.0952 },
{ 85.7143, 28.5714 },
{ 85.7143, 14.2857 },
{ 76.1905, 4.7619 },
{ 61.9047, 0 },
{ 42.8571, 0 },
{ 28.5714, 4.7619 },
{ 19.0476, 14.2857 },
};
static const StrokeRec char36[] = {
{ 2, char36_stroke0 },
{ 2, char36_stroke1 },
{ 20, char36_stroke2 },
};
/* char: 37 '%' */
static const CoordRec char37_stroke0[] = {
{ 95.2381, 100 },
{ 9.5238, 0 },
};
static const CoordRec char37_stroke1[] = {
{ 33.3333, 100 },
{ 42.8571, 90.4762 },
{ 42.8571, 80.9524 },
{ 38.0952, 71.4286 },
{ 28.5714, 66.6667 },
{ 19.0476, 66.6667 },
{ 9.5238, 76.1905 },
{ 9.5238, 85.7143 },
{ 14.2857, 95.2381 },
{ 23.8095, 100 },
{ 33.3333, 100 },
{ 42.8571, 95.2381 },
{ 57.1428, 90.4762 },
{ 71.4286, 90.4762 },
{ 85.7143, 95.2381 },
{ 95.2381, 100 },
};
static const CoordRec char37_stroke2[] = {
{ 76.1905, 33.3333 },
{ 66.6667, 28.5714 },
{ 61.9048, 19.0476 },
{ 61.9048, 9.5238 },
{ 71.4286, 0 },
{ 80.9524, 0 },
{ 90.4762, 4.7619 },
{ 95.2381, 14.2857 },
{ 95.2381, 23.8095 },
{ 85.7143, 33.3333 },
{ 76.1905, 33.3333 },
};
static const StrokeRec char37[] = {
{ 2, char37_stroke0 },
{ 16, char37_stroke1 },
{ 11, char37_stroke2 },
};
/* char: 38 '&' */
static const CoordRec char38_stroke0[] = {
{ 100, 57.1429 },
{ 100, 61.9048 },
{ 95.2381, 66.6667 },
{ 90.4762, 66.6667 },
{ 85.7143, 61.9048 },
{ 80.9524, 52.381 },
{ 71.4286, 28.5714 },
{ 61.9048, 14.2857 },
{ 52.3809, 4.7619 },
{ 42.8571, 0 },
{ 23.8095, 0 },
{ 14.2857, 4.7619 },
{ 9.5238, 9.5238 },
{ 4.7619, 19.0476 },
{ 4.7619, 28.5714 },
{ 9.5238, 38.0952 },
{ 14.2857, 42.8571 },
{ 47.619, 61.9048 },
{ 52.3809, 66.6667 },
{ 57.1429, 76.1905 },
{ 57.1429, 85.7143 },
{ 52.3809, 95.2381 },
{ 42.8571, 100 },
{ 33.3333, 95.2381 },
{ 28.5714, 85.7143 },
{ 28.5714, 76.1905 },
{ 33.3333, 61.9048 },
{ 42.8571, 47.619 },
{ 66.6667, 14.2857 },
{ 76.1905, 4.7619 },
{ 85.7143, 0 },
{ 95.2381, 0 },
{ 100, 4.7619 },
{ 100, 9.5238 },
};
static const StrokeRec char38[] = {
{ 34, char38_stroke0 },
};
/* char: 39 ''' */
static const CoordRec char39_stroke0[] = {
{ 52.381, 100 },
{ 52.381, 66.6667 },
};
static const StrokeRec char39[] = {
{ 2, char39_stroke0 },
};
/* char: 40 '(' */
static const CoordRec char40_stroke0[] = {
{ 69.0476, 119.048 },
{ 59.5238, 109.524 },
{ 50, 95.2381 },
{ 40.4762, 76.1905 },
{ 35.7143, 52.381 },
{ 35.7143, 33.3333 },
{ 40.4762, 9.5238 },
{ 50, -9.5238 },
{ 59.5238, -23.8095 },
{ 69.0476, -33.3333 },
};
static const StrokeRec char40[] = {
{ 10, char40_stroke0 },
};
/* char: 41 ')' */
static const CoordRec char41_stroke0[] = {
{ 35.7143, 119.048 },
{ 45.2381, 109.524 },
{ 54.7619, 95.2381 },
{ 64.2857, 76.1905 },
{ 69.0476, 52.381 },
{ 69.0476, 33.3333 },
{ 64.2857, 9.5238 },
{ 54.7619, -9.5238 },
{ 45.2381, -23.8095 },
{ 35.7143, -33.3333 },
};
static const StrokeRec char41[] = {
{ 10, char41_stroke0 },
};
/* char: 42 '*' */
static const CoordRec char42_stroke0[] = {
{ 52.381, 71.4286 },
{ 52.381, 14.2857 },
};
static const CoordRec char42_stroke1[] = {
{ 28.5715, 57.1429 },
{ 76.1905, 28.5714 },
};
static const CoordRec char42_stroke2[] = {
{ 76.1905, 57.1429 },
{ 28.5715, 28.5714 },
};
static const StrokeRec char42[] = {
{ 2, char42_stroke0 },
{ 2, char42_stroke1 },
{ 2, char42_stroke2 },
};
/* char: 43 '+' */
static const CoordRec char43_stroke0[] = {
{ 52.3809, 85.7143 },
{ 52.3809, 0 },
};
static const CoordRec char43_stroke1[] = {
{ 9.5238, 42.8571 },
{ 95.2381, 42.8571 },
};
static const StrokeRec char43[] = {
{ 2, char43_stroke0 },
{ 2, char43_stroke1 },
};
/* char: 44 ',' */
static const CoordRec char44_stroke0[] = {
{ 57.1429, 4.7619 },
{ 52.381, 0 },
{ 47.6191, 4.7619 },
{ 52.381, 9.5238 },
{ 57.1429, 4.7619 },
{ 57.1429, -4.7619 },
{ 52.381, -14.2857 },
{ 47.6191, -19.0476 },
};
static const StrokeRec char44[] = {
{ 8, char44_stroke0 },
};
/* char: 45 '-' */
static const CoordRec char45_stroke0[] = {
{ 9.5238, 42.8571 },
{ 95.2381, 42.8571 },
};
static const StrokeRec char45[] = {
{ 2, char45_stroke0 },
};
/* char: 46 '.' */
static const CoordRec char46_stroke0[] = {
{ 52.381, 9.5238 },
{ 47.6191, 4.7619 },
{ 52.381, 0 },
{ 57.1429, 4.7619 },
{ 52.381, 9.5238 },
};
static const StrokeRec char46[] = {
{ 5, char46_stroke0 },
};
/* char: 47 '/' */
static const CoordRec char47_stroke0[] = {
{ 19.0476, -14.2857 },
{ 85.7143, 100 },
};
static const StrokeRec char47[] = {
{ 2, char47_stroke0 },
};
/* char: 48 '0' */
static const CoordRec char48_stroke0[] = {
{ 47.619, 100 },
{ 33.3333, 95.2381 },
{ 23.8095, 80.9524 },
{ 19.0476, 57.1429 },
{ 19.0476, 42.8571 },
{ 23.8095, 19.0476 },
{ 33.3333, 4.7619 },
{ 47.619, 0 },
{ 57.1428, 0 },
{ 71.4286, 4.7619 },
{ 80.9524, 19.0476 },
{ 85.7143, 42.8571 },
{ 85.7143, 57.1429 },
{ 80.9524, 80.9524 },
{ 71.4286, 95.2381 },
{ 57.1428, 100 },
{ 47.619, 100 },
};
static const StrokeRec char48[] = {
{ 17, char48_stroke0 },
};
/* char: 49 '1' */
static const CoordRec char49_stroke0[] = {
{ 40.4762, 80.9524 },
{ 50, 85.7143 },
{ 64.2857, 100 },
{ 64.2857, 0 },
};
static const StrokeRec char49[] = {
{ 4, char49_stroke0 },
};
/* char: 50 '2' */
static const CoordRec char50_stroke0[] = {
{ 23.8095, 76.1905 },
{ 23.8095, 80.9524 },
{ 28.5714, 90.4762 },
{ 33.3333, 95.2381 },
{ 42.8571, 100 },
{ 61.9047, 100 },
{ 71.4286, 95.2381 },
{ 76.1905, 90.4762 },
{ 80.9524, 80.9524 },
{ 80.9524, 71.4286 },
{ 76.1905, 61.9048 },
{ 66.6666, 47.619 },
{ 19.0476, 0 },
{ 85.7143, 0 },
};
static const StrokeRec char50[] = {
{ 14, char50_stroke0 },
};
/* char: 51 '3' */
static const CoordRec char51_stroke0[] = {
{ 28.5714, 100 },
{ 80.9524, 100 },
{ 52.3809, 61.9048 },
{ 66.6666, 61.9048 },
{ 76.1905, 57.1429 },
{ 80.9524, 52.381 },
{ 85.7143, 38.0952 },
{ 85.7143, 28.5714 },
{ 80.9524, 14.2857 },
{ 71.4286, 4.7619 },
{ 57.1428, 0 },
{ 42.8571, 0 },
{ 28.5714, 4.7619 },
{ 23.8095, 9.5238 },
{ 19.0476, 19.0476 },
};
static const StrokeRec char51[] = {
{ 15, char51_stroke0 },
};
/* char: 52 '4' */
static const CoordRec char52_stroke0[] = {
{ 64.2857, 100 },
{ 16.6667, 33.3333 },
{ 88.0952, 33.3333 },
};
static const CoordRec char52_stroke1[] = {
{ 64.2857, 100 },
{ 64.2857, 0 },
};
static const StrokeRec char52[] = {
{ 3, char52_stroke0 },
{ 2, char52_stroke1 },
};
/* char: 53 '5' */
static const CoordRec char53_stroke0[] = {
{ 76.1905, 100 },
{ 28.5714, 100 },
{ 23.8095, 57.1429 },
{ 28.5714, 61.9048 },
{ 42.8571, 66.6667 },
{ 57.1428, 66.6667 },
{ 71.4286, 61.9048 },
{ 80.9524, 52.381 },
{ 85.7143, 38.0952 },
{ 85.7143, 28.5714 },
{ 80.9524, 14.2857 },
{ 71.4286, 4.7619 },
{ 57.1428, 0 },
{ 42.8571, 0 },
{ 28.5714, 4.7619 },
{ 23.8095, 9.5238 },
{ 19.0476, 19.0476 },
};
static const StrokeRec char53[] = {
{ 17, char53_stroke0 },
};
/* char: 54 '6' */
static const CoordRec char54_stroke0[] = {
{ 78.5714, 85.7143 },
{ 73.8096, 95.2381 },
{ 59.5238, 100 },
{ 50, 100 },
{ 35.7143, 95.2381 },
{ 26.1905, 80.9524 },
{ 21.4286, 57.1429 },
{ 21.4286, 33.3333 },
{ 26.1905, 14.2857 },
{ 35.7143, 4.7619 },
{ 50, 0 },
{ 54.7619, 0 },
{ 69.0476, 4.7619 },
{ 78.5714, 14.2857 },
{ 83.3334, 28.5714 },
{ 83.3334, 33.3333 },
{ 78.5714, 47.619 },
{ 69.0476, 57.1429 },
{ 54.7619, 61.9048 },
{ 50, 61.9048 },
{ 35.7143, 57.1429 },
{ 26.1905, 47.619 },
{ 21.4286, 33.3333 },
};
static const StrokeRec char54[] = {
{ 23, char54_stroke0 },
};
/* char: 55 '7' */
static const CoordRec char55_stroke0[] = {
{ 85.7143, 100 },
{ 38.0952, 0 },
};
static const CoordRec char55_stroke1[] = {
{ 19.0476, 100 },
{ 85.7143, 100 },
};
static const StrokeRec char55[] = {
{ 2, char55_stroke0 },
{ 2, char55_stroke1 },
};
/* char: 56 '8' */
static const CoordRec char56_stroke0[] = {
{ 42.8571, 100 },
{ 28.5714, 95.2381 },
{ 23.8095, 85.7143 },
{ 23.8095, 76.1905 },
{ 28.5714, 66.6667 },
{ 38.0952, 61.9048 },
{ 57.1428, 57.1429 },
{ 71.4286, 52.381 },
{ 80.9524, 42.8571 },
{ 85.7143, 33.3333 },
{ 85.7143, 19.0476 },
{ 80.9524, 9.5238 },
{ 76.1905, 4.7619 },
{ 61.9047, 0 },
{ 42.8571, 0 },
{ 28.5714, 4.7619 },
{ 23.8095, 9.5238 },
{ 19.0476, 19.0476 },
{ 19.0476, 33.3333 },
{ 23.8095, 42.8571 },
{ 33.3333, 52.381 },
{ 47.619, 57.1429 },
{ 66.6666, 61.9048 },
{ 76.1905, 66.6667 },
{ 80.9524, 76.1905 },
{ 80.9524, 85.7143 },
{ 76.1905, 95.2381 },
{ 61.9047, 100 },
{ 42.8571, 100 },
};
static const StrokeRec char56[] = {
{ 29, char56_stroke0 },
};
/* char: 57 '9' */
static const CoordRec char57_stroke0[] = {
{ 83.3334, 66.6667 },
{ 78.5714, 52.381 },
{ 69.0476, 42.8571 },
{ 54.7619, 38.0952 },
{ 50, 38.0952 },
{ 35.7143, 42.8571 },
{ 26.1905, 52.381 },
{ 21.4286, 66.6667 },
{ 21.4286, 71.4286 },
{ 26.1905, 85.7143 },
{ 35.7143, 95.2381 },
{ 50, 100 },
{ 54.7619, 100 },
{ 69.0476, 95.2381 },
{ 78.5714, 85.7143 },
{ 83.3334, 66.6667 },
{ 83.3334, 42.8571 },
{ 78.5714, 19.0476 },
{ 69.0476, 4.7619 },
{ 54.7619, 0 },
{ 45.2381, 0 },
{ 30.9524, 4.7619 },
{ 26.1905, 14.2857 },
};
static const StrokeRec char57[] = {
{ 23, char57_stroke0 },
};
/* char: 58 ':' */
static const CoordRec char58_stroke0[] = {
{ 52.381, 66.6667 },
{ 47.6191, 61.9048 },
{ 52.381, 57.1429 },
{ 57.1429, 61.9048 },
{ 52.381, 66.6667 },
};
static const CoordRec char58_stroke1[] = {
{ 52.381, 9.5238 },
{ 47.6191, 4.7619 },
{ 52.381, 0 },
{ 57.1429, 4.7619 },
{ 52.381, 9.5238 },
};
static const StrokeRec char58[] = {
{ 5, char58_stroke0 },
{ 5, char58_stroke1 },
};
/* char: 59 ';' */
static const CoordRec char59_stroke0[] = {
{ 52.381, 66.6667 },
{ 47.6191, 61.9048 },
{ 52.381, 57.1429 },
{ 57.1429, 61.9048 },
{ 52.381, 66.6667 },
};
static const CoordRec char59_stroke1[] = {
{ 57.1429, 4.7619 },
{ 52.381, 0 },
{ 47.6191, 4.7619 },
{ 52.381, 9.5238 },
{ 57.1429, 4.7619 },
{ 57.1429, -4.7619 },
{ 52.381, -14.2857 },
{ 47.6191, -19.0476 },
};
static const StrokeRec char59[] = {
{ 5, char59_stroke0 },
{ 8, char59_stroke1 },
};
/* char: 60 '<' */
static const CoordRec char60_stroke0[] = {
{ 90.4762, 85.7143 },
{ 14.2857, 42.8571 },
{ 90.4762, 0 },
};
static const StrokeRec char60[] = {
{ 3, char60_stroke0 },
};
/* char: 61 '=' */
static const CoordRec char61_stroke0[] = {
{ 9.5238, 57.1429 },
{ 95.2381, 57.1429 },
};
static const CoordRec char61_stroke1[] = {
{ 9.5238, 28.5714 },
{ 95.2381, 28.5714 },
};
static const StrokeRec char61[] = {
{ 2, char61_stroke0 },
{ 2, char61_stroke1 },
};
/* char: 62 '>' */
static const CoordRec char62_stroke0[] = {
{ 14.2857, 85.7143 },
{ 90.4762, 42.8571 },
{ 14.2857, 0 },
};
static const StrokeRec char62[] = {
{ 3, char62_stroke0 },
};
/* char: 63 '?' */
static const CoordRec char63_stroke0[] = {
{ 23.8095, 76.1905 },
{ 23.8095, 80.9524 },
{ 28.5714, 90.4762 },
{ 33.3333, 95.2381 },
{ 42.8571, 100 },
{ 61.9047, 100 },
{ 71.4285, 95.2381 },
{ 76.1905, 90.4762 },
{ 80.9524, 80.9524 },
{ 80.9524, 71.4286 },
{ 76.1905, 61.9048 },
{ 71.4285, 57.1429 },
{ 52.3809, 47.619 },
{ 52.3809, 33.3333 },
};
static const CoordRec char63_stroke1[] = {
{ 52.3809, 9.5238 },
{ 47.619, 4.7619 },
{ 52.3809, 0 },
{ 57.1428, 4.7619 },
{ 52.3809, 9.5238 },
};
static const StrokeRec char63[] = {
{ 14, char63_stroke0 },
{ 5, char63_stroke1 },
};
/* char: 64 '@' */
static const CoordRec char64_stroke0[] = {
{ 64.2857, 52.381 },
{ 54.7619, 57.1429 },
{ 45.2381, 57.1429 },
{ 40.4762, 47.619 },
{ 40.4762, 42.8571 },
{ 45.2381, 33.3333 },
{ 54.7619, 33.3333 },
{ 64.2857, 38.0952 },
};
static const CoordRec char64_stroke1[] = {
{ 64.2857, 57.1429 },
{ 64.2857, 38.0952 },
{ 69.0476, 33.3333 },
{ 78.5714, 33.3333 },
{ 83.3334, 42.8571 },
{ 83.3334, 47.619 },
{ 78.5714, 61.9048 },
{ 69.0476, 71.4286 },
{ 54.7619, 76.1905 },
{ 50, 76.1905 },
{ 35.7143, 71.4286 },
{ 26.1905, 61.9048 },
{ 21.4286, 47.619 },
{ 21.4286, 42.8571 },
{ 26.1905, 28.5714 },
{ 35.7143, 19.0476 },
{ 50, 14.2857 },
{ 54.7619, 14.2857 },
{ 69.0476, 19.0476 },
};
static const StrokeRec char64[] = {
{ 8, char64_stroke0 },
{ 19, char64_stroke1 },
};
/* char: 65 'A' */
static const CoordRec char65_stroke0[] = {
{ 52.3809, 100 },
{ 14.2857, 0 },
};
static const CoordRec char65_stroke1[] = {
{ 52.3809, 100 },
{ 90.4762, 0 },
};
static const CoordRec char65_stroke2[] = {
{ 28.5714, 33.3333 },
{ 76.1905, 33.3333 },
};
static const StrokeRec char65[] = {
{ 2, char65_stroke0 },
{ 2, char65_stroke1 },
{ 2, char65_stroke2 },
};
/* char: 66 'B' */
static const CoordRec char66_stroke0[] = {
{ 19.0476, 100 },
{ 19.0476, 0 },
};
static const CoordRec char66_stroke1[] = {
{ 19.0476, 100 },
{ 61.9047, 100 },
{ 76.1905, 95.2381 },
{ 80.9524, 90.4762 },
{ 85.7143, 80.9524 },
{ 85.7143, 71.4286 },
{ 80.9524, 61.9048 },
{ 76.1905, 57.1429 },
{ 61.9047, 52.381 },
};
static const CoordRec char66_stroke2[] = {
{ 19.0476, 52.381 },
{ 61.9047, 52.381 },
{ 76.1905, 47.619 },
{ 80.9524, 42.8571 },
{ 85.7143, 33.3333 },
{ 85.7143, 19.0476 },
{ 80.9524, 9.5238 },
{ 76.1905, 4.7619 },
{ 61.9047, 0 },
{ 19.0476, 0 },
};
static const StrokeRec char66[] = {
{ 2, char66_stroke0 },
{ 9, char66_stroke1 },
{ 10, char66_stroke2 },
};
/* char: 67 'C' */
static const CoordRec char67_stroke0[] = {
{ 88.0952, 76.1905 },
{ 83.3334, 85.7143 },
{ 73.8096, 95.2381 },
{ 64.2857, 100 },
{ 45.2381, 100 },
{ 35.7143, 95.2381 },
{ 26.1905, 85.7143 },
{ 21.4286, 76.1905 },
{ 16.6667, 61.9048 },
{ 16.6667, 38.0952 },
{ 21.4286, 23.8095 },
{ 26.1905, 14.2857 },
{ 35.7143, 4.7619 },
{ 45.2381, 0 },
{ 64.2857, 0 },
{ 73.8096, 4.7619 },
{ 83.3334, 14.2857 },
{ 88.0952, 23.8095 },
};
static const StrokeRec char67[] = {
{ 18, char67_stroke0 },
};
/* char: 68 'D' */
static const CoordRec char68_stroke0[] = {
{ 19.0476, 100 },
{ 19.0476, 0 },
};
static const CoordRec char68_stroke1[] = {
{ 19.0476, 100 },
{ 52.3809, 100 },
{ 66.6666, 95.2381 },
{ 76.1905, 85.7143 },
{ 80.9524, 76.1905 },
{ 85.7143, 61.9048 },
{ 85.7143, 38.0952 },
{ 80.9524, 23.8095 },
{ 76.1905, 14.2857 },
{ 66.6666, 4.7619 },
{ 52.3809, 0 },
{ 19.0476, 0 },
};
static const StrokeRec char68[] = {
{ 2, char68_stroke0 },
{ 12, char68_stroke1 },
};
/* char: 69 'E' */
static const CoordRec char69_stroke0[] = {
{ 21.4286, 100 },
{ 21.4286, 0 },
};
static const CoordRec char69_stroke1[] = {
{ 21.4286, 100 },
{ 83.3334, 100 },
};
static const CoordRec char69_stroke2[] = {
{ 21.4286, 52.381 },
{ 59.5238, 52.381 },
};
static const CoordRec char69_stroke3[] = {
{ 21.4286, 0 },
{ 83.3334, 0 },
};
static const StrokeRec char69[] = {
{ 2, char69_stroke0 },
{ 2, char69_stroke1 },
{ 2, char69_stroke2 },
{ 2, char69_stroke3 },
};
/* char: 70 'F' */
static const CoordRec char70_stroke0[] = {
{ 21.4286, 100 },
{ 21.4286, 0 },
};
static const CoordRec char70_stroke1[] = {
{ 21.4286, 100 },
{ 83.3334, 100 },
};
static const CoordRec char70_stroke2[] = {
{ 21.4286, 52.381 },
{ 59.5238, 52.381 },
};
static const StrokeRec char70[] = {
{ 2, char70_stroke0 },
{ 2, char70_stroke1 },
{ 2, char70_stroke2 },
};
/* char: 71 'G' */
static const CoordRec char71_stroke0[] = {
{ 88.0952, 76.1905 },
{ 83.3334, 85.7143 },
{ 73.8096, 95.2381 },
{ 64.2857, 100 },
{ 45.2381, 100 },
{ 35.7143, 95.2381 },
{ 26.1905, 85.7143 },
{ 21.4286, 76.1905 },
{ 16.6667, 61.9048 },
{ 16.6667, 38.0952 },
{ 21.4286, 23.8095 },
{ 26.1905, 14.2857 },
{ 35.7143, 4.7619 },
{ 45.2381, 0 },
{ 64.2857, 0 },
{ 73.8096, 4.7619 },
{ 83.3334, 14.2857 },
{ 88.0952, 23.8095 },
{ 88.0952, 38.0952 },
};
static const CoordRec char71_stroke1[] = {
{ 64.2857, 38.0952 },
{ 88.0952, 38.0952 },
};
static const StrokeRec char71[] = {
{ 19, char71_stroke0 },
{ 2, char71_stroke1 },
};
/* char: 72 'H' */
static const CoordRec char72_stroke0[] = {
{ 19.0476, 100 },
{ 19.0476, 0 },
};
static const CoordRec char72_stroke1[] = {
{ 85.7143, 100 },
{ 85.7143, 0 },
};
static const CoordRec char72_stroke2[] = {
{ 19.0476, 52.381 },
{ 85.7143, 52.381 },
};
static const StrokeRec char72[] = {
{ 2, char72_stroke0 },
{ 2, char72_stroke1 },
{ 2, char72_stroke2 },
};
/* char: 73 'I' */
static const CoordRec char73_stroke0[] = {
{ 52.381, 100 },
{ 52.381, 0 },
};
static const StrokeRec char73[] = {
{ 2, char73_stroke0 },
};
/* char: 74 'J' */
static const CoordRec char74_stroke0[] = {
{ 76.1905, 100 },
{ 76.1905, 23.8095 },
{ 71.4286, 9.5238 },
{ 66.6667, 4.7619 },
{ 57.1429, 0 },
{ 47.6191, 0 },
{ 38.0953, 4.7619 },
{ 33.3334, 9.5238 },
{ 28.5715, 23.8095 },
{ 28.5715, 33.3333 },
};
static const StrokeRec char74[] = {
{ 10, char74_stroke0 },
};
/* char: 75 'K' */
static const CoordRec char75_stroke0[] = {
{ 19.0476, 100 },
{ 19.0476, 0 },
};
static const CoordRec char75_stroke1[] = {
{ 85.7143, 100 },
{ 19.0476, 33.3333 },
};
static const CoordRec char75_stroke2[] = {
{ 42.8571, 57.1429 },
{ 85.7143, 0 },
};
static const StrokeRec char75[] = {
{ 2, char75_stroke0 },
{ 2, char75_stroke1 },
{ 2, char75_stroke2 },
};
/* char: 76 'L' */
static const CoordRec char76_stroke0[] = {
{ 23.8095, 100 },
{ 23.8095, 0 },
};
static const CoordRec char76_stroke1[] = {
{ 23.8095, 0 },
{ 80.9524, 0 },
};
static const StrokeRec char76[] = {
{ 2, char76_stroke0 },
{ 2, char76_stroke1 },
};
/* char: 77 'M' */
static const CoordRec char77_stroke0[] = {
{ 14.2857, 100 },
{ 14.2857, 0 },
};
static const CoordRec char77_stroke1[] = {
{ 14.2857, 100 },
{ 52.3809, 0 },
};
static const CoordRec char77_stroke2[] = {
{ 90.4762, 100 },
{ 52.3809, 0 },
};
static const CoordRec char77_stroke3[] = {
{ 90.4762, 100 },
{ 90.4762, 0 },
};
static const StrokeRec char77[] = {
{ 2, char77_stroke0 },
{ 2, char77_stroke1 },
{ 2, char77_stroke2 },
{ 2, char77_stroke3 },
};
/* char: 78 'N' */
static const CoordRec char78_stroke0[] = {
{ 19.0476, 100 },
{ 19.0476, 0 },
};
static const CoordRec char78_stroke1[] = {
{ 19.0476, 100 },
{ 85.7143, 0 },
};
static const CoordRec char78_stroke2[] = {
{ 85.7143, 100 },
{ 85.7143, 0 },
};
static const StrokeRec char78[] = {
{ 2, char78_stroke0 },
{ 2, char78_stroke1 },
{ 2, char78_stroke2 },
};
/* char: 79 'O' */
static const CoordRec char79_stroke0[] = {
{ 42.8571, 100 },
{ 33.3333, 95.2381 },
{ 23.8095, 85.7143 },
{ 19.0476, 76.1905 },
{ 14.2857, 61.9048 },
{ 14.2857, 38.0952 },
{ 19.0476, 23.8095 },
{ 23.8095, 14.2857 },
{ 33.3333, 4.7619 },
{ 42.8571, 0 },
{ 61.9047, 0 },
{ 71.4286, 4.7619 },
{ 80.9524, 14.2857 },
{ 85.7143, 23.8095 },
{ 90.4762, 38.0952 },
{ 90.4762, 61.9048 },
{ 85.7143, 76.1905 },
{ 80.9524, 85.7143 },
{ 71.4286, 95.2381 },
{ 61.9047, 100 },
{ 42.8571, 100 },
};
static const StrokeRec char79[] = {
{ 21, char79_stroke0 },
};
/* char: 80 'P' */
static const CoordRec char80_stroke0[] = {
{ 19.0476, 100 },
{ 19.0476, 0 },
};
static const CoordRec char80_stroke1[] = {
{ 19.0476, 100 },
{ 61.9047, 100 },
{ 76.1905, 95.2381 },
{ 80.9524, 90.4762 },
{ 85.7143, 80.9524 },
{ 85.7143, 66.6667 },
{ 80.9524, 57.1429 },
{ 76.1905, 52.381 },
{ 61.9047, 47.619 },
{ 19.0476, 47.619 },
};
static const StrokeRec char80[] = {
{ 2, char80_stroke0 },
{ 10, char80_stroke1 },
};
/* char: 81 'Q' */
static const CoordRec char81_stroke0[] = {
{ 42.8571, 100 },
{ 33.3333, 95.2381 },
{ 23.8095, 85.7143 },
{ 19.0476, 76.1905 },
{ 14.2857, 61.9048 },
{ 14.2857, 38.0952 },
{ 19.0476, 23.8095 },
{ 23.8095, 14.2857 },
{ 33.3333, 4.7619 },
{ 42.8571, 0 },
{ 61.9047, 0 },
{ 71.4286, 4.7619 },
{ 80.9524, 14.2857 },
{ 85.7143, 23.8095 },
{ 90.4762, 38.0952 },
{ 90.4762, 61.9048 },
{ 85.7143, 76.1905 },
{ 80.9524, 85.7143 },
{ 71.4286, 95.2381 },
{ 61.9047, 100 },
{ 42.8571, 100 },
};
static const CoordRec char81_stroke1[] = {
{ 57.1428, 19.0476 },
{ 85.7143, -9.5238 },
};
static const StrokeRec char81[] = {
{ 21, char81_stroke0 },
{ 2, char81_stroke1 },
};
/* char: 82 'R' */
static const CoordRec char82_stroke0[] = {
{ 19.0476, 100 },
{ 19.0476, 0 },
};
static const CoordRec char82_stroke1[] = {
{ 19.0476, 100 },
{ 61.9047, 100 },
{ 76.1905, 95.2381 },
{ 80.9524, 90.4762 },
{ 85.7143, 80.9524 },
{ 85.7143, 71.4286 },
{ 80.9524, 61.9048 },
{ 76.1905, 57.1429 },
{ 61.9047, 52.381 },
{ 19.0476, 52.381 },
};
static const CoordRec char82_stroke2[] = {
{ 52.3809, 52.381 },
{ 85.7143, 0 },
};
static const StrokeRec char82[] = {
{ 2, char82_stroke0 },
{ 10, char82_stroke1 },
{ 2, char82_stroke2 },
};
/* char: 83 'S' */
static const CoordRec char83_stroke0[] = {
{ 85.7143, 85.7143 },
{ 76.1905, 95.2381 },
{ 61.9047, 100 },
{ 42.8571, 100 },
{ 28.5714, 95.2381 },
{ 19.0476, 85.7143 },
{ 19.0476, 76.1905 },
{ 23.8095, 66.6667 },
{ 28.5714, 61.9048 },
{ 38.0952, 57.1429 },
{ 66.6666, 47.619 },
{ 76.1905, 42.8571 },
{ 80.9524, 38.0952 },
{ 85.7143, 28.5714 },
{ 85.7143, 14.2857 },
{ 76.1905, 4.7619 },
{ 61.9047, 0 },
{ 42.8571, 0 },
{ 28.5714, 4.7619 },
{ 19.0476, 14.2857 },
};
static const StrokeRec char83[] = {
{ 20, char83_stroke0 },
};
/* char: 84 'T' */
static const CoordRec char84_stroke0[] = {
{ 52.3809, 100 },
{ 52.3809, 0 },
};
static const CoordRec char84_stroke1[] = {
{ 19.0476, 100 },
{ 85.7143, 100 },
};
static const StrokeRec char84[] = {
{ 2, char84_stroke0 },
{ 2, char84_stroke1 },
};
/* char: 85 'U' */
static const CoordRec char85_stroke0[] = {
{ 19.0476, 100 },
{ 19.0476, 28.5714 },
{ 23.8095, 14.2857 },
{ 33.3333, 4.7619 },
{ 47.619, 0 },
{ 57.1428, 0 },
{ 71.4286, 4.7619 },
{ 80.9524, 14.2857 },
{ 85.7143, 28.5714 },
{ 85.7143, 100 },
};
static const StrokeRec char85[] = {
{ 10, char85_stroke0 },
};
/* char: 86 'V' */
static const CoordRec char86_stroke0[] = {
{ 14.2857, 100 },
{ 52.3809, 0 },
};
static const CoordRec char86_stroke1[] = {
{ 90.4762, 100 },
{ 52.3809, 0 },
};
static const StrokeRec char86[] = {
{ 2, char86_stroke0 },
{ 2, char86_stroke1 },
};
/* char: 87 'W' */
static const CoordRec char87_stroke0[] = {
{ 4.7619, 100 },
{ 28.5714, 0 },
};
static const CoordRec char87_stroke1[] = {
{ 52.3809, 100 },
{ 28.5714, 0 },
};
static const CoordRec char87_stroke2[] = {
{ 52.3809, 100 },
{ 76.1905, 0 },
};
static const CoordRec char87_stroke3[] = {
{ 100, 100 },
{ 76.1905, 0 },
};
static const StrokeRec char87[] = {
{ 2, char87_stroke0 },
{ 2, char87_stroke1 },
{ 2, char87_stroke2 },
{ 2, char87_stroke3 },
};
/* char: 88 'X' */
static const CoordRec char88_stroke0[] = {
{ 19.0476, 100 },
{ 85.7143, 0 },
};
static const CoordRec char88_stroke1[] = {
{ 85.7143, 100 },
{ 19.0476, 0 },
};
static const StrokeRec char88[] = {
{ 2, char88_stroke0 },
{ 2, char88_stroke1 },
};
/* char: 89 'Y' */
static const CoordRec char89_stroke0[] = {
{ 14.2857, 100 },
{ 52.3809, 52.381 },
{ 52.3809, 0 },
};
static const CoordRec char89_stroke1[] = {
{ 90.4762, 100 },
{ 52.3809, 52.381 },
};
static const StrokeRec char89[] = {
{ 3, char89_stroke0 },
{ 2, char89_stroke1 },
};
/* char: 90 'Z' */
static const CoordRec char90_stroke0[] = {
{ 85.7143, 100 },
{ 19.0476, 0 },
};
static const CoordRec char90_stroke1[] = {
{ 19.0476, 100 },
{ 85.7143, 100 },
};
static const CoordRec char90_stroke2[] = {
{ 19.0476, 0 },
{ 85.7143, 0 },
};
static const StrokeRec char90[] = {
{ 2, char90_stroke0 },
{ 2, char90_stroke1 },
{ 2, char90_stroke2 },
};
/* char: 91 '[' */
static const CoordRec char91_stroke0[] = {
{ 35.7143, 119.048 },
{ 35.7143, -33.3333 },
};
static const CoordRec char91_stroke1[] = {
{ 40.4762, 119.048 },
{ 40.4762, -33.3333 },
};
static const CoordRec char91_stroke2[] = {
{ 35.7143, 119.048 },
{ 69.0476, 119.048 },
};
static const CoordRec char91_stroke3[] = {
{ 35.7143, -33.3333 },
{ 69.0476, -33.3333 },
};
static const StrokeRec char91[] = {
{ 2, char91_stroke0 },
{ 2, char91_stroke1 },
{ 2, char91_stroke2 },
{ 2, char91_stroke3 },
};
/* char: 92 '\' */
static const CoordRec char92_stroke0[] = {
{ 19.0476, 100 },
{ 85.7143, -14.2857 },
};
static const StrokeRec char92[] = {
{ 2, char92_stroke0 },
};
/* char: 93 ']' */
static const CoordRec char93_stroke0[] = {
{ 64.2857, 119.048 },
{ 64.2857, -33.3333 },
};
static const CoordRec char93_stroke1[] = {
{ 69.0476, 119.048 },
{ 69.0476, -33.3333 },
};
static const CoordRec char93_stroke2[] = {
{ 35.7143, 119.048 },
{ 69.0476, 119.048 },
};
static const CoordRec char93_stroke3[] = {
{ 35.7143, -33.3333 },
{ 69.0476, -33.3333 },
};
static const StrokeRec char93[] = {
{ 2, char93_stroke0 },
{ 2, char93_stroke1 },
{ 2, char93_stroke2 },
{ 2, char93_stroke3 },
};
/* char: 94 '^' */
static const CoordRec char94_stroke0[] = {
{ 52.3809, 109.524 },
{ 14.2857, 42.8571 },
};
static const CoordRec char94_stroke1[] = {
{ 52.3809, 109.524 },
{ 90.4762, 42.8571 },
};
static const StrokeRec char94[] = {
{ 2, char94_stroke0 },
{ 2, char94_stroke1 },
};
/* char: 95 '_' */
static const CoordRec char95_stroke0[] = {
{ 0, -33.3333 },
{ 104.762, -33.3333 },
{ 104.762, -28.5714 },
{ 0, -28.5714 },
{ 0, -33.3333 },
};
static const StrokeRec char95[] = {
{ 5, char95_stroke0 },
};
/* char: 96 '`' */
static const CoordRec char96_stroke0[] = {
{ 42.8572, 100 },
{ 66.6667, 71.4286 },
};
static const CoordRec char96_stroke1[] = {
{ 42.8572, 100 },
{ 38.0953, 95.2381 },
{ 66.6667, 71.4286 },
};
static const StrokeRec char96[] = {
{ 2, char96_stroke0 },
{ 3, char96_stroke1 },
};
/* char: 97 'a' */
static const CoordRec char97_stroke0[] = {
{ 80.9524, 66.6667 },
{ 80.9524, 0 },
};
static const CoordRec char97_stroke1[] = {
{ 80.9524, 52.381 },
{ 71.4285, 61.9048 },
{ 61.9047, 66.6667 },
{ 47.619, 66.6667 },
{ 38.0952, 61.9048 },
{ 28.5714, 52.381 },
{ 23.8095, 38.0952 },
{ 23.8095, 28.5714 },
{ 28.5714, 14.2857 },
{ 38.0952, 4.7619 },
{ 47.619, 0 },
{ 61.9047, 0 },
{ 71.4285, 4.7619 },
{ 80.9524, 14.2857 },
};
static const StrokeRec char97[] = {
{ 2, char97_stroke0 },
{ 14, char97_stroke1 },
};
/* char: 98 'b' */
static const CoordRec char98_stroke0[] = {
{ 23.8095, 100 },
{ 23.8095, 0 },
};
static const CoordRec char98_stroke1[] = {
{ 23.8095, 52.381 },
{ 33.3333, 61.9048 },
{ 42.8571, 66.6667 },
{ 57.1428, 66.6667 },
{ 66.6666, 61.9048 },
{ 76.1905, 52.381 },
{ 80.9524, 38.0952 },
{ 80.9524, 28.5714 },
{ 76.1905, 14.2857 },
{ 66.6666, 4.7619 },
{ 57.1428, 0 },
{ 42.8571, 0 },
{ 33.3333, 4.7619 },
{ 23.8095, 14.2857 },
};
static const StrokeRec char98[] = {
{ 2, char98_stroke0 },
{ 14, char98_stroke1 },
};
/* char: 99 'c' */
static const CoordRec char99_stroke0[] = {
{ 80.9524, 52.381 },
{ 71.4285, 61.9048 },
{ 61.9047, 66.6667 },
{ 47.619, 66.6667 },
{ 38.0952, 61.9048 },
{ 28.5714, 52.381 },
{ 23.8095, 38.0952 },
{ 23.8095, 28.5714 },
{ 28.5714, 14.2857 },
{ 38.0952, 4.7619 },
{ 47.619, 0 },
{ 61.9047, 0 },
{ 71.4285, 4.7619 },
{ 80.9524, 14.2857 },
};
static const StrokeRec char99[] = {
{ 14, char99_stroke0 },
};
/* char: 100 'd' */
static const CoordRec char100_stroke0[] = {
{ 80.9524, 100 },
{ 80.9524, 0 },
};
static const CoordRec char100_stroke1[] = {
{ 80.9524, 52.381 },
{ 71.4285, 61.9048 },
{ 61.9047, 66.6667 },
{ 47.619, 66.6667 },
{ 38.0952, 61.9048 },
{ 28.5714, 52.381 },
{ 23.8095, 38.0952 },
{ 23.8095, 28.5714 },
{ 28.5714, 14.2857 },
{ 38.0952, 4.7619 },
{ 47.619, 0 },
{ 61.9047, 0 },
{ 71.4285, 4.7619 },
{ 80.9524, 14.2857 },
};
static const StrokeRec char100[] = {
{ 2, char100_stroke0 },
{ 14, char100_stroke1 },
};
/* char: 101 'e' */
static const CoordRec char101_stroke0[] = {
{ 23.8095, 38.0952 },
{ 80.9524, 38.0952 },
{ 80.9524, 47.619 },
{ 76.1905, 57.1429 },
{ 71.4285, 61.9048 },
{ 61.9047, 66.6667 },
{ 47.619, 66.6667 },
{ 38.0952, 61.9048 },
{ 28.5714, 52.381 },
{ 23.8095, 38.0952 },
{ 23.8095, 28.5714 },
{ 28.5714, 14.2857 },
{ 38.0952, 4.7619 },
{ 47.619, 0 },
{ 61.9047, 0 },
{ 71.4285, 4.7619 },
{ 80.9524, 14.2857 },
};
static const StrokeRec char101[] = {
{ 17, char101_stroke0 },
};
/* char: 102 'f' */
static const CoordRec char102_stroke0[] = {
{ 71.4286, 100 },
{ 61.9048, 100 },
{ 52.381, 95.2381 },
{ 47.6191, 80.9524 },
{ 47.6191, 0 },
};
static const CoordRec char102_stroke1[] = {
{ 33.3334, 66.6667 },
{ 66.6667, 66.6667 },
};
static const StrokeRec char102[] = {
{ 5, char102_stroke0 },
{ 2, char102_stroke1 },
};
/* char: 103 'g' */
static const CoordRec char103_stroke0[] = {
{ 80.9524, 66.6667 },
{ 80.9524, -9.5238 },
{ 76.1905, -23.8095 },
{ 71.4285, -28.5714 },
{ 61.9047, -33.3333 },
{ 47.619, -33.3333 },
{ 38.0952, -28.5714 },
};
static const CoordRec char103_stroke1[] = {
{ 80.9524, 52.381 },
{ 71.4285, 61.9048 },
{ 61.9047, 66.6667 },
{ 47.619, 66.6667 },
{ 38.0952, 61.9048 },
{ 28.5714, 52.381 },
{ 23.8095, 38.0952 },
{ 23.8095, 28.5714 },
{ 28.5714, 14.2857 },
{ 38.0952, 4.7619 },
{ 47.619, 0 },
{ 61.9047, 0 },
{ 71.4285, 4.7619 },
{ 80.9524, 14.2857 },
};
static const StrokeRec char103[] = {
{ 7, char103_stroke0 },
{ 14, char103_stroke1 },
};
/* char: 104 'h' */
static const CoordRec char104_stroke0[] = {
{ 26.1905, 100 },
{ 26.1905, 0 },
};
static const CoordRec char104_stroke1[] = {
{ 26.1905, 47.619 },
{ 40.4762, 61.9048 },
{ 50, 66.6667 },
{ 64.2857, 66.6667 },
{ 73.8095, 61.9048 },
{ 78.5715, 47.619 },
{ 78.5715, 0 },
};
static const StrokeRec char104[] = {
{ 2, char104_stroke0 },
{ 7, char104_stroke1 },
};
/* char: 105 'i' */
static const CoordRec char105_stroke0[] = {
{ 47.6191, 100 },
{ 52.381, 95.2381 },
{ 57.1429, 100 },
{ 52.381, 104.762 },
{ 47.6191, 100 },
};
static const CoordRec char105_stroke1[] = {
{ 52.381, 66.6667 },
{ 52.381, 0 },
};
static const StrokeRec char105[] = {
{ 5, char105_stroke0 },
{ 2, char105_stroke1 },
};
/* char: 106 'j' */
static const CoordRec char106_stroke0[] = {
{ 57.1429, 100 },
{ 61.9048, 95.2381 },
{ 66.6667, 100 },
{ 61.9048, 104.762 },
{ 57.1429, 100 },
};
static const CoordRec char106_stroke1[] = {
{ 61.9048, 66.6667 },
{ 61.9048, -14.2857 },
{ 57.1429, -28.5714 },
{ 47.6191, -33.3333 },
{ 38.0953, -33.3333 },
};
static const StrokeRec char106[] = {
{ 5, char106_stroke0 },
{ 5, char106_stroke1 },
};
/* char: 107 'k' */
static const CoordRec char107_stroke0[] = {
{ 26.1905, 100 },
{ 26.1905, 0 },
};
static const CoordRec char107_stroke1[] = {
{ 73.8095, 66.6667 },
{ 26.1905, 19.0476 },
};
static const CoordRec char107_stroke2[] = {
{ 45.2381, 38.0952 },
{ 78.5715, 0 },
};
static const StrokeRec char107[] = {
{ 2, char107_stroke0 },
{ 2, char107_stroke1 },
{ 2, char107_stroke2 },
};
/* char: 108 'l' */
static const CoordRec char108_stroke0[] = {
{ 52.381, 100 },
{ 52.381, 0 },
};
static const StrokeRec char108[] = {
{ 2, char108_stroke0 },
};
/* char: 109 'm' */
static const CoordRec char109_stroke0[] = {
{ 0, 66.6667 },
{ 0, 0 },
};
static const CoordRec char109_stroke1[] = {
{ 0, 47.619 },
{ 14.2857, 61.9048 },
{ 23.8095, 66.6667 },
{ 38.0952, 66.6667 },
{ 47.619, 61.9048 },
{ 52.381, 47.619 },
{ 52.381, 0 },
};
static const CoordRec char109_stroke2[] = {
{ 52.381, 47.619 },
{ 66.6667, 61.9048 },
{ 76.1905, 66.6667 },
{ 90.4762, 66.6667 },
{ 100, 61.9048 },
{ 104.762, 47.619 },
{ 104.762, 0 },
};
static const StrokeRec char109[] = {
{ 2, char109_stroke0 },
{ 7, char109_stroke1 },
{ 7, char109_stroke2 },
};
/* char: 110 'n' */
static const CoordRec char110_stroke0[] = {
{ 26.1905, 66.6667 },
{ 26.1905, 0 },
};
static const CoordRec char110_stroke1[] = {
{ 26.1905, 47.619 },
{ 40.4762, 61.9048 },
{ 50, 66.6667 },
{ 64.2857, 66.6667 },
{ 73.8095, 61.9048 },
{ 78.5715, 47.619 },
{ 78.5715, 0 },
};
static const StrokeRec char110[] = {
{ 2, char110_stroke0 },
{ 7, char110_stroke1 },
};
/* char: 111 'o' */
static const CoordRec char111_stroke0[] = {
{ 45.2381, 66.6667 },
{ 35.7143, 61.9048 },
{ 26.1905, 52.381 },
{ 21.4286, 38.0952 },
{ 21.4286, 28.5714 },
{ 26.1905, 14.2857 },
{ 35.7143, 4.7619 },
{ 45.2381, 0 },
{ 59.5238, 0 },
{ 69.0476, 4.7619 },
{ 78.5714, 14.2857 },
{ 83.3334, 28.5714 },
{ 83.3334, 38.0952 },
{ 78.5714, 52.381 },
{ 69.0476, 61.9048 },
{ 59.5238, 66.6667 },
{ 45.2381, 66.6667 },
};
static const StrokeRec char111[] = {
{ 17, char111_stroke0 },
};
/* char: 112 'p' */
static const CoordRec char112_stroke0[] = {
{ 23.8095, 66.6667 },
{ 23.8095, -33.3333 },
};
static const CoordRec char112_stroke1[] = {
{ 23.8095, 52.381 },
{ 33.3333, 61.9048 },
{ 42.8571, 66.6667 },
{ 57.1428, 66.6667 },
{ 66.6666, 61.9048 },
{ 76.1905, 52.381 },
{ 80.9524, 38.0952 },
{ 80.9524, 28.5714 },
{ 76.1905, 14.2857 },
{ 66.6666, 4.7619 },
{ 57.1428, 0 },
{ 42.8571, 0 },
{ 33.3333, 4.7619 },
{ 23.8095, 14.2857 },
};
static const StrokeRec char112[] = {
{ 2, char112_stroke0 },
{ 14, char112_stroke1 },
};
/* char: 113 'q' */
static const CoordRec char113_stroke0[] = {
{ 80.9524, 66.6667 },
{ 80.9524, -33.3333 },
};
static const CoordRec char113_stroke1[] = {
{ 80.9524, 52.381 },
{ 71.4285, 61.9048 },
{ 61.9047, 66.6667 },
{ 47.619, 66.6667 },
{ 38.0952, 61.9048 },
{ 28.5714, 52.381 },
{ 23.8095, 38.0952 },
{ 23.8095, 28.5714 },
{ 28.5714, 14.2857 },
{ 38.0952, 4.7619 },
{ 47.619, 0 },
{ 61.9047, 0 },
{ 71.4285, 4.7619 },
{ 80.9524, 14.2857 },
};
static const StrokeRec char113[] = {
{ 2, char113_stroke0 },
{ 14, char113_stroke1 },
};
/* char: 114 'r' */
static const CoordRec char114_stroke0[] = {
{ 33.3334, 66.6667 },
{ 33.3334, 0 },
};
static const CoordRec char114_stroke1[] = {
{ 33.3334, 38.0952 },
{ 38.0953, 52.381 },
{ 47.6191, 61.9048 },
{ 57.1429, 66.6667 },
{ 71.4286, 66.6667 },
};
static const StrokeRec char114[] = {
{ 2, char114_stroke0 },
{ 5, char114_stroke1 },
};
/* char: 115 's' */
static const CoordRec char115_stroke0[] = {
{ 78.5715, 52.381 },
{ 73.8095, 61.9048 },
{ 59.5238, 66.6667 },
{ 45.2381, 66.6667 },
{ 30.9524, 61.9048 },
{ 26.1905, 52.381 },
{ 30.9524, 42.8571 },
{ 40.4762, 38.0952 },
{ 64.2857, 33.3333 },
{ 73.8095, 28.5714 },
{ 78.5715, 19.0476 },
{ 78.5715, 14.2857 },
{ 73.8095, 4.7619 },
{ 59.5238, 0 },
{ 45.2381, 0 },
{ 30.9524, 4.7619 },
{ 26.1905, 14.2857 },
};
static const StrokeRec char115[] = {
{ 17, char115_stroke0 },
};
/* char: 116 't' */
static const CoordRec char116_stroke0[] = {
{ 47.6191, 100 },
{ 47.6191, 19.0476 },
{ 52.381, 4.7619 },
{ 61.9048, 0 },
{ 71.4286, 0 },
};
static const CoordRec char116_stroke1[] = {
{ 33.3334, 66.6667 },
{ 66.6667, 66.6667 },
};
static const StrokeRec char116[] = {
{ 5, char116_stroke0 },
{ 2, char116_stroke1 },
};
/* char: 117 'u' */
static const CoordRec char117_stroke0[] = {
{ 26.1905, 66.6667 },
{ 26.1905, 19.0476 },
{ 30.9524, 4.7619 },
{ 40.4762, 0 },
{ 54.7619, 0 },
{ 64.2857, 4.7619 },
{ 78.5715, 19.0476 },
};
static const CoordRec char117_stroke1[] = {
{ 78.5715, 66.6667 },
{ 78.5715, 0 },
};
static const StrokeRec char117[] = {
{ 7, char117_stroke0 },
{ 2, char117_stroke1 },
};
/* char: 118 'v' */
static const CoordRec char118_stroke0[] = {
{ 23.8095, 66.6667 },
{ 52.3809, 0 },
};
static const CoordRec char118_stroke1[] = {
{ 80.9524, 66.6667 },
{ 52.3809, 0 },
};
static const StrokeRec char118[] = {
{ 2, char118_stroke0 },
{ 2, char118_stroke1 },
};
/* char: 119 'w' */
static const CoordRec char119_stroke0[] = {
{ 14.2857, 66.6667 },
{ 33.3333, 0 },
};
static const CoordRec char119_stroke1[] = {
{ 52.3809, 66.6667 },
{ 33.3333, 0 },
};
static const CoordRec char119_stroke2[] = {
{ 52.3809, 66.6667 },
{ 71.4286, 0 },
};
static const CoordRec char119_stroke3[] = {
{ 90.4762, 66.6667 },
{ 71.4286, 0 },
};
static const StrokeRec char119[] = {
{ 2, char119_stroke0 },
{ 2, char119_stroke1 },
{ 2, char119_stroke2 },
{ 2, char119_stroke3 },
};
/* char: 120 'x' */
static const CoordRec char120_stroke0[] = {
{ 26.1905, 66.6667 },
{ 78.5715, 0 },
};
static const CoordRec char120_stroke1[] = {
{ 78.5715, 66.6667 },
{ 26.1905, 0 },
};
static const StrokeRec char120[] = {
{ 2, char120_stroke0 },
{ 2, char120_stroke1 },
};
/* char: 121 'y' */
static const CoordRec char121_stroke0[] = {
{ 26.1905, 66.6667 },
{ 54.7619, 0 },
};
static const CoordRec char121_stroke1[] = {
{ 83.3334, 66.6667 },
{ 54.7619, 0 },
{ 45.2381, -19.0476 },
{ 35.7143, -28.5714 },
{ 26.1905, -33.3333 },
{ 21.4286, -33.3333 },
};
static const StrokeRec char121[] = {
{ 2, char121_stroke0 },
{ 6, char121_stroke1 },
};
/* char: 122 'z' */
static const CoordRec char122_stroke0[] = {
{ 78.5715, 66.6667 },
{ 26.1905, 0 },
};
static const CoordRec char122_stroke1[] = {
{ 26.1905, 66.6667 },
{ 78.5715, 66.6667 },
};
static const CoordRec char122_stroke2[] = {
{ 26.1905, 0 },
{ 78.5715, 0 },
};
static const StrokeRec char122[] = {
{ 2, char122_stroke0 },
{ 2, char122_stroke1 },
{ 2, char122_stroke2 },
};
/* char: 123 '{' */
static const CoordRec char123_stroke0[] = {
{ 64.2857, 119.048 },
{ 54.7619, 114.286 },
{ 50, 109.524 },
{ 45.2381, 100 },
{ 45.2381, 90.4762 },
{ 50, 80.9524 },
{ 54.7619, 76.1905 },
{ 59.5238, 66.6667 },
{ 59.5238, 57.1429 },
{ 50, 47.619 },
};
static const CoordRec char123_stroke1[] = {
{ 54.7619, 114.286 },
{ 50, 104.762 },
{ 50, 95.2381 },
{ 54.7619, 85.7143 },
{ 59.5238, 80.9524 },
{ 64.2857, 71.4286 },
{ 64.2857, 61.9048 },
{ 59.5238, 52.381 },
{ 40.4762, 42.8571 },
{ 59.5238, 33.3333 },
{ 64.2857, 23.8095 },
{ 64.2857, 14.2857 },
{ 59.5238, 4.7619 },
{ 54.7619, 0 },
{ 50, -9.5238 },
{ 50, -19.0476 },
{ 54.7619, -28.5714 },
};
static const CoordRec char123_stroke2[] = {
{ 50, 38.0952 },
{ 59.5238, 28.5714 },
{ 59.5238, 19.0476 },
{ 54.7619, 9.5238 },
{ 50, 4.7619 },
{ 45.2381, -4.7619 },
{ 45.2381, -14.2857 },
{ 50, -23.8095 },
{ 54.7619, -28.5714 },
{ 64.2857, -33.3333 },
};
static const StrokeRec char123[] = {
{ 10, char123_stroke0 },
{ 17, char123_stroke1 },
{ 10, char123_stroke2 },
};
/* char: 124 '|' */
static const CoordRec char124_stroke0[] = {
{ 52.381, 119.048 },
{ 52.381, -33.3333 },
};
static const StrokeRec char124[] = {
{ 2, char124_stroke0 },
};
/* char: 125 '}' */
static const CoordRec char125_stroke0[] = {
{ 40.4762, 119.048 },
{ 50, 114.286 },
{ 54.7619, 109.524 },
{ 59.5238, 100 },
{ 59.5238, 90.4762 },
{ 54.7619, 80.9524 },
{ 50, 76.1905 },
{ 45.2381, 66.6667 },
{ 45.2381, 57.1429 },
{ 54.7619, 47.619 },
};
static const CoordRec char125_stroke1[] = {
{ 50, 114.286 },
{ 54.7619, 104.762 },
{ 54.7619, 95.2381 },
{ 50, 85.7143 },
{ 45.2381, 80.9524 },
{ 40.4762, 71.4286 },
{ 40.4762, 61.9048 },
{ 45.2381, 52.381 },
{ 64.2857, 42.8571 },
{ 45.2381, 33.3333 },
{ 40.4762, 23.8095 },
{ 40.4762, 14.2857 },
{ 45.2381, 4.7619 },
{ 50, 0 },
{ 54.7619, -9.5238 },
{ 54.7619, -19.0476 },
{ 50, -28.5714 },
};
static const CoordRec char125_stroke2[] = {
{ 54.7619, 38.0952 },
{ 45.2381, 28.5714 },
{ 45.2381, 19.0476 },
{ 50, 9.5238 },
{ 54.7619, 4.7619 },
{ 59.5238, -4.7619 },
{ 59.5238, -14.2857 },
{ 54.7619, -23.8095 },
{ 50, -28.5714 },
{ 40.4762, -33.3333 },
};
static const StrokeRec char125[] = {
{ 10, char125_stroke0 },
{ 17, char125_stroke1 },
{ 10, char125_stroke2 },
};
/* char: 126 '~' */
static const CoordRec char126_stroke0[] = {
{ 9.5238, 28.5714 },
{ 9.5238, 38.0952 },
{ 14.2857, 52.381 },
{ 23.8095, 57.1429 },
{ 33.3333, 57.1429 },
{ 42.8571, 52.381 },
{ 61.9048, 38.0952 },
{ 71.4286, 33.3333 },
{ 80.9524, 33.3333 },
{ 90.4762, 38.0952 },
{ 95.2381, 47.619 },
};
static const CoordRec char126_stroke1[] = {
{ 9.5238, 38.0952 },
{ 14.2857, 47.619 },
{ 23.8095, 52.381 },
{ 33.3333, 52.381 },
{ 42.8571, 47.619 },
{ 61.9048, 33.3333 },
{ 71.4286, 28.5714 },
{ 80.9524, 28.5714 },
{ 90.4762, 33.3333 },
{ 95.2381, 47.619 },
{ 95.2381, 57.1429 },
};
static const StrokeRec char126[] = {
{ 11, char126_stroke0 },
{ 11, char126_stroke1 },
};
/* char: 127 */
static const CoordRec char127_stroke0[] = {
{ 71.4286, 100 },
{ 33.3333, -33.3333 },
};
static const CoordRec char127_stroke1[] = {
{ 47.619, 66.6667 },
{ 33.3333, 61.9048 },
{ 23.8095, 52.381 },
{ 19.0476, 38.0952 },
{ 19.0476, 23.8095 },
{ 23.8095, 14.2857 },
{ 33.3333, 4.7619 },
{ 47.619, 0 },
{ 57.1428, 0 },
{ 71.4286, 4.7619 },
{ 80.9524, 14.2857 },
{ 85.7143, 28.5714 },
{ 85.7143, 42.8571 },
{ 80.9524, 52.381 },
{ 71.4286, 61.9048 },
{ 57.1428, 66.6667 },
{ 47.619, 66.6667 },
};
static const StrokeRec char127[] = {
{ 2, char127_stroke0 },
{ 17, char127_stroke1 },
};
static const StrokeCharRec chars[] = {
{ 0, /* char0 */ 0, 0, 0 },
{ 0, /* char1 */ 0, 0, 0 },
{ 0, /* char2 */ 0, 0, 0 },
{ 0, /* char3 */ 0, 0, 0 },
{ 0, /* char4 */ 0, 0, 0 },
{ 0, /* char5 */ 0, 0, 0 },
{ 0, /* char6 */ 0, 0, 0 },
{ 0, /* char7 */ 0, 0, 0 },
{ 0, /* char8 */ 0, 0, 0 },
{ 0, /* char9 */ 0, 0, 0 },
{ 0, /* char10 */ 0, 0, 0 },
{ 0, /* char11 */ 0, 0, 0 },
{ 0, /* char12 */ 0, 0, 0 },
{ 0, /* char13 */ 0, 0, 0 },
{ 0, /* char14 */ 0, 0, 0 },
{ 0, /* char15 */ 0, 0, 0 },
{ 0, /* char16 */ 0, 0, 0 },
{ 0, /* char17 */ 0, 0, 0 },
{ 0, /* char18 */ 0, 0, 0 },
{ 0, /* char19 */ 0, 0, 0 },
{ 0, /* char20 */ 0, 0, 0 },
{ 0, /* char21 */ 0, 0, 0 },
{ 0, /* char22 */ 0, 0, 0 },
{ 0, /* char23 */ 0, 0, 0 },
{ 0, /* char24 */ 0, 0, 0 },
{ 0, /* char25 */ 0, 0, 0 },
{ 0, /* char26 */ 0, 0, 0 },
{ 0, /* char27 */ 0, 0, 0 },
{ 0, /* char28 */ 0, 0, 0 },
{ 0, /* char29 */ 0, 0, 0 },
{ 0, /* char30 */ 0, 0, 0 },
{ 0, /* char31 */ 0, 0, 0 },
{ 0, /* char32 */ 0, 52.381, 104.762 },
{ 2, char33, 52.381, 104.762 },
{ 2, char34, 52.381, 104.762 },
{ 4, char35, 52.381, 104.762 },
{ 3, char36, 52.381, 104.762 },
{ 3, char37, 52.381, 104.762 },
{ 1, char38, 52.381, 104.762 },
{ 1, char39, 52.381, 104.762 },
{ 1, char40, 52.381, 104.762 },
{ 1, char41, 52.381, 104.762 },
{ 3, char42, 52.381, 104.762 },
{ 2, char43, 52.381, 104.762 },
{ 1, char44, 52.381, 104.762 },
{ 1, char45, 52.381, 104.762 },
{ 1, char46, 52.381, 104.762 },
{ 1, char47, 52.381, 104.762 },
{ 1, char48, 52.381, 104.762 },
{ 1, char49, 52.381, 104.762 },
{ 1, char50, 52.381, 104.762 },
{ 1, char51, 52.381, 104.762 },
{ 2, char52, 52.381, 104.762 },
{ 1, char53, 52.381, 104.762 },
{ 1, char54, 52.381, 104.762 },
{ 2, char55, 52.381, 104.762 },
{ 1, char56, 52.381, 104.762 },
{ 1, char57, 52.381, 104.762 },
{ 2, char58, 52.381, 104.762 },
{ 2, char59, 52.381, 104.762 },
{ 1, char60, 52.381, 104.762 },
{ 2, char61, 52.381, 104.762 },
{ 1, char62, 52.381, 104.762 },
{ 2, char63, 52.381, 104.762 },
{ 2, char64, 52.381, 104.762 },
{ 3, char65, 52.381, 104.762 },
{ 3, char66, 52.381, 104.762 },
{ 1, char67, 52.381, 104.762 },
{ 2, char68, 52.381, 104.762 },
{ 4, char69, 52.381, 104.762 },
{ 3, char70, 52.381, 104.762 },
{ 2, char71, 52.381, 104.762 },
{ 3, char72, 52.381, 104.762 },
{ 1, char73, 52.381, 104.762 },
{ 1, char74, 52.381, 104.762 },
{ 3, char75, 52.381, 104.762 },
{ 2, char76, 52.381, 104.762 },
{ 4, char77, 52.381, 104.762 },
{ 3, char78, 52.381, 104.762 },
{ 1, char79, 52.381, 104.762 },
{ 2, char80, 52.381, 104.762 },
{ 2, char81, 52.381, 104.762 },
{ 3, char82, 52.381, 104.762 },
{ 1, char83, 52.381, 104.762 },
{ 2, char84, 52.381, 104.762 },
{ 1, char85, 52.381, 104.762 },
{ 2, char86, 52.381, 104.762 },
{ 4, char87, 52.381, 104.762 },
{ 2, char88, 52.381, 104.762 },
{ 2, char89, 52.381, 104.762 },
{ 3, char90, 52.381, 104.762 },
{ 4, char91, 52.381, 104.762 },
{ 1, char92, 52.381, 104.762 },
{ 4, char93, 52.381, 104.762 },
{ 2, char94, 52.381, 104.762 },
{ 1, char95, 52.381, 104.762 },
{ 2, char96, 52.381, 104.762 },
{ 2, char97, 52.381, 104.762 },
{ 2, char98, 52.381, 104.762 },
{ 1, char99, 52.381, 104.762 },
{ 2, char100, 52.381, 104.762 },
{ 1, char101, 52.381, 104.762 },
{ 2, char102, 52.381, 104.762 },
{ 2, char103, 52.381, 104.762 },
{ 2, char104, 52.381, 104.762 },
{ 2, char105, 52.381, 104.762 },
{ 2, char106, 52.381, 104.762 },
{ 3, char107, 52.381, 104.762 },
{ 1, char108, 52.381, 104.762 },
{ 3, char109, 52.381, 104.762 },
{ 2, char110, 52.381, 104.762 },
{ 1, char111, 52.381, 104.762 },
{ 2, char112, 52.381, 104.762 },
{ 2, char113, 52.381, 104.762 },
{ 2, char114, 52.381, 104.762 },
{ 1, char115, 52.381, 104.762 },
{ 2, char116, 52.381, 104.762 },
{ 2, char117, 52.381, 104.762 },
{ 2, char118, 52.381, 104.762 },
{ 4, char119, 52.381, 104.762 },
{ 2, char120, 52.381, 104.762 },
{ 2, char121, 52.381, 104.762 },
{ 3, char122, 52.381, 104.762 },
{ 3, char123, 52.381, 104.762 },
{ 1, char124, 52.381, 104.762 },
{ 3, char125, 52.381, 104.762 },
{ 2, char126, 52.381, 104.762 },
{ 2, char127, 52.381, 104.762 },
};
StrokeFontRec glutStrokeMonoRoman = { "Roman", 128, chars, 119.048, -33.3333 };
/* Copyright (c) Mark J. Kilgard, 1996, 1997. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#ifdef __VMS
#include <GL/vms_x_fix.h>
#endif
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <assert.h>
#if !defined(_WIN32)
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/Xatom.h> /* for XA_RGB_DEFAULT_MAP atom */
#if defined (__vms)
#include <Xmu/StdCmap.h> /* for XmuLookupStandardColormap */
#else
#include <X11/Xmu/StdCmap.h> /* for XmuLookupStandardColormap */
#endif
#endif /* !_WIN32 */
#include "glutint.h"
#include "layerutil.h"
static Criterion requiredOverlayCriteria[] =
{
{LEVEL, EQ, 1}, /* This entry gets poked in
determineOverlayVisual. */
{TRANSPARENT, EQ, 1},
{XPSEUDOCOLOR, EQ, 1},
{RGBA, EQ, 0},
{BUFFER_SIZE, GTE, 1}
};
static int numRequiredOverlayCriteria = sizeof(requiredOverlayCriteria) / sizeof(Criterion);
static int requiredOverlayCriteriaMask =
(1 << LEVEL) | (1 << TRANSPARENT) | (1 << XSTATICGRAY) | (1 << RGBA) | (1 << CI_MODE);
#if !defined(_WIN32)
static int
checkOverlayAcceptability(XVisualInfo * vi, unsigned int mode)
{
int value;
/* Must support OpenGL. */
glXGetConfig(__glutDisplay, vi, GLX_USE_GL, &value);
if (!value)
return 1;
/* Must be color index. */
glXGetConfig(__glutDisplay, vi, GLX_RGBA, &value);
if (value)
return 1;
/* Must match single/double buffering request. */
glXGetConfig(__glutDisplay, vi, GLX_DOUBLEBUFFER, &value);
if (GLUT_WIND_IS_DOUBLE(mode) != (value != 0))
return 1;
/* Must match mono/stereo request. */
glXGetConfig(__glutDisplay, vi, GLX_STEREO, &value);
if (GLUT_WIND_IS_STEREO(mode) != (value != 0))
return 1;
/* Alpha and accumulation buffers incompatible with color
index. */
if (GLUT_WIND_HAS_ALPHA(mode) || GLUT_WIND_HAS_ACCUM(mode))
return 1;
/* Look for depth buffer if requested. */
glXGetConfig(__glutDisplay, vi, GLX_DEPTH_SIZE, &value);
if (GLUT_WIND_HAS_DEPTH(mode) && (value <= 0))
return 1;
/* Look for stencil buffer if requested. */
glXGetConfig(__glutDisplay, vi, GLX_STENCIL_SIZE, &value);
if (GLUT_WIND_HAS_STENCIL(mode) && (value <= 0))
return 1;
#if defined(GLX_VERSION_1_1) && defined(GLX_SGIS_multisample)
/* XXX Multisampled overlay color index?? Pretty unlikely. */
/* Look for multisampling if requested. */
if (__glutIsSupportedByGLX("GLX_SGIS_multisample"))
glXGetConfig(__glutDisplay, vi, GLX_SAMPLES_SGIS, &value);
else
value = 0;
if (GLUT_WIND_IS_MULTISAMPLE(mode) && (value <= 0))
return 1;
#endif
return 0;
}
#endif
static XVisualInfo *
getOverlayVisualInfoCI(unsigned int mode)
{
#if !defined(_WIN32)
XLayerVisualInfo *vi;
XLayerVisualInfo template;
XVisualInfo *goodVisual, *returnVisual;
int nitems, i, j, bad;
/* The GLX 1.0 glXChooseVisual is does not permit queries
based on pixel transparency (and GLX_BUFFER_SIZE uses
"smallest that meets" its requirement instead of "largest
that meets" that GLUT wants. So, GLUT implements its own
visual selection routine for color index overlays. */
/* Try three overlay layers. */
for (i = 1; i <= 3; i++) {
template.vinfo.screen = __glutScreen;
template.vinfo.class = PseudoColor;
template.layer = i;
template.type = TransparentPixel;
vi = __glutXGetLayerVisualInfo(__glutDisplay,
VisualTransparentType | VisualScreenMask | VisualClassMask | VisualLayerMask,
&template, &nitems);
if (vi) {
/* Check list for acceptable visual meeting requirements
of requested display mode. */
for (j = 0; j < nitems; j++) {
bad = checkOverlayAcceptability(&vi[j].vinfo, mode);
if (bad) {
/* Set vi[j].vinfo.visual to mark it unacceptable. */
vi[j].vinfo.visual = NULL;
}
}
/* Look through list to find deepest acceptable visual. */
goodVisual = NULL;
for (j = 0; j < nitems; j++) {
if (vi[j].vinfo.visual) {
if (goodVisual == NULL) {
goodVisual = &vi[j].vinfo;
} else {
if (goodVisual->depth < vi[j].vinfo.depth) {
goodVisual = &vi[j].vinfo;
}
}
}
}
/* If a visual is found, clean up and return the visual. */
if (goodVisual) {
returnVisual = (XVisualInfo *) malloc(sizeof(XVisualInfo));
if (returnVisual) {
*returnVisual = *goodVisual;
}
XFree(vi);
return returnVisual;
}
XFree(vi);
}
}
#endif /* !_WIN32 */
return NULL;
}
/* ARGSUSED */
static XVisualInfo *
getOverlayVisualInfoRGB(unsigned int mode)
{
/* XXX For now, transparent RGBA overlays are not supported
by GLUT. RGBA overlays raise difficult questions about
what the transparent pixel (really color) value should be.
Color index overlay transparency is "easy" because the
transparent pixel value does not affect displayable colors
(except for stealing one color cell) since colors are
determined by indirection through a colormap, and because
it is uncommon for arbitrary pixel values in color index to
be "calculated" (as can occur with a host of RGBA operations
like lighting, blending, etc) so it is easy to avoid the
transparent pixel value.
Since it is typically easy to avoid the transparent pixel
value in color index mode, if GLUT tells the programmer what
pixel is transparent, then most program can easily avoid
generating that pixel value except when they intend
transparency. GLUT returns whatever transparent pixel value
is provided by the system through glutGet(
GLUT_TRANSPARENT_INDEX).
Theory versus practice for RGBA overlay transparency: In
theory, the reasonable thing is enabling overlay transparency
when an overlay pixel's destination alpha is 0 because this
allows overlay transparency to be controlled via alpha and all
visibile colors are permited, but no hardware I am aware of
supports this practice (and it requires destination alpha which
is typically optional and quite uncommon for overlay windows!).
In practice, the choice of transparent pixel value is typically
"hardwired" into most graphics hardware to a single pixel value.
SGI hardware uses true black (0,0,0) without regard for the
destination alpha. This is far from ideal because true black (a
common color that is easy to accidently generate) can not be
generated in an RGBA overlay. I am not sure what other vendors
do.
Pragmatically, most of the typical things you want to do in the
overlays can be done in color index (rubber banding, pop-up
menus, etc.). One solution for GLUT would be to simply
"advertise" what RGB triple (or possibly RGBA quadruple or simply
A alone) generates transparency. The problem with this approach
is that it forces programmers to avoid whatever arbitrary color
various systems decide is transparent. This is a difficult
burden to place on programmers that want to portably make use of
overlays.
To actually support transparent RGBA overlays, there are really
two reaonsable options. ONE: Simply mandate that true black is
the RGBA overlay transparent color (what IRIS GL did). This is
nice for programmers since only one option, nice for existing SGI
hardware, bad for anyone (including SGI) who wants to improve
upon "true black" RGB transparency.
Or TWO: Provide a set of queriable "transparency types" (like
"true black" or "alpha == 0" or "true white" or even a queriable
transparent color). This is harder for programmers, OK for
existing SGI hardware, and it leaves open the issue of what other
modes are reasonable.
Option TWO seems the more general approach, but since hardware
designers will likely only implement a single mode (this is a
scan out issue where bandwidth is pressing issue), codifying
multiple speculative approaches nobody may ever implement seems
silly. And option ONE fiats a suboptimal solution.
Therefore, I defer any decision of how GLUT should support RGBA
overlay transparency and leave support for it unimplemented.
Nobody has been pressing me for RGBA overlay transparency (though
people have requested color index overlay transparency
repeatedly). Geez, if you read this far you are either really
bored or maybe actually interested in this topic. Anyway, if
you have ideas (particularly if you plan on implementing a
hardware scheme for RGBA overlay transparency), I'd be
interested.
For the record, SGI's expiremental Framebufer Configuration
experimental GLX extension uses option TWO. Transparency modes
for "none" and "RGB" are defined (others could be defined later).
What RGB value is the transparent one must be queried.
I was hoping GLUT could have something that required less work
from the programmer to use portably. -mjk */
__glutWarning("RGBA overlays are not supported by GLUT (for now).");
return NULL;
}
static XVisualInfo *
getOverlayVisualInfo(unsigned int mode)
{
/* XXX GLUT_LUMINANCE not implemented for GLUT 3.0. */
if (GLUT_WIND_IS_LUMINANCE(mode))
return NULL;
if (GLUT_WIND_IS_RGB(mode))
return getOverlayVisualInfoRGB(mode);
else
return getOverlayVisualInfoCI(mode);
}
#if !defined(_WIN32)
/* The GLUT overlay can come and go, and the overlay window has
a distinct X window ID. Logically though, GLUT treats the
normal and overlay windows as a unified window. In
particular, X input events typically go to the overlay window
since it is "on top of" the normal window. When an overlay
window ID is destroyed (due to glutRemoveOverlay or a call to
glutEstablishOverlay when an overlay already exists), we
still keep track of the overlay window ID until we get back a
DestroyNotify event for the overlay window. Otherwise, we
could lose track of X input events sent to a destroyed
overlay. To avoid this, we keep the destroyed overlay window
ID on a "stale window" list. This lets us properly route X
input events generated on destroyed overlay windows to the
proper GLUT window. */
static void
addStaleWindow(GLUTwindow * window, Window win)
{
GLUTstale *entry;
entry = (GLUTstale *) malloc(sizeof(GLUTstale));
if (!entry)
__glutFatalError("out of memory");
entry->window = window;
entry->win = win;
entry->next = __glutStaleWindowList;
__glutStaleWindowList = entry;
}
#endif
void
__glutFreeOverlay(GLUToverlay * overlay)
{
if (overlay->visAlloced)
XFree(overlay->vis);
XDestroyWindow(__glutDisplay, overlay->win);
glXDestroyContext(__glutDisplay, overlay->ctx);
if (overlay->colormap) {
/* Only color index overlays have colormap data structure. */
__glutFreeColormap(overlay->colormap);
}
free(overlay);
}
static XVisualInfo *
determineOverlayVisual(int *treatAsSingle, Bool * visAlloced, void **fbc)
{
if (__glutDisplayString) {
XVisualInfo *vi;
int i;
/* __glutDisplayString should be NULL except if
glutInitDisplayString has been called to register a
different display string. Calling glutInitDisplayString
means using a string instead of an integer mask determine
the visual to use. Using the function pointer variable
__glutDetermineVisualFromString below avoids linking in
the code for implementing glutInitDisplayString (ie,
glut_dstr.o) unless glutInitDisplayString gets called by
the application. */
assert(__glutDetermineVisualFromString);
/* Try three overlay layers. */
*visAlloced = False;
*fbc = NULL;
for (i = 1; i <= 3; i++) {
requiredOverlayCriteria[0].value = i;
vi = __glutDetermineVisualFromString(__glutDisplayString, treatAsSingle,
requiredOverlayCriteria, numRequiredOverlayCriteria,
requiredOverlayCriteriaMask, fbc);
if (vi) {
return vi;
}
}
return NULL;
} else {
*visAlloced = True;
*fbc = NULL;
return __glutDetermineVisual(__glutDisplayMode,
treatAsSingle, getOverlayVisualInfo);
}
}
/* CENTRY */
void GLUTAPIENTRY
glutEstablishOverlay(void)
{
GLUToverlay *overlay;
GLUTwindow *window;
XSetWindowAttributes wa;
void *fbc;
/* Register a routine to free an overlay with glut_win.c;
this keeps glut_win.c from pulling in all of
glut_overlay.c when no overlay functionality is used by
the application. */
__glutFreeOverlayFunc = __glutFreeOverlay;
window = __glutCurrentWindow;
/* Allow for an existant overlay to be re-established perhaps
if you wanted a different display mode. */
if (window->overlay) {
#if !defined(_WIN32)
addStaleWindow(window, window->overlay->win);
#endif
__glutFreeOverlay(window->overlay);
}
overlay = (GLUToverlay *) malloc(sizeof(GLUToverlay));
if (!overlay)
__glutFatalError("out of memory.");
overlay->vis = determineOverlayVisual(&overlay->treatAsSingle,
&overlay->visAlloced, &fbc);
if (!overlay->vis) {
__glutFatalError("lacks overlay support.");
}
#if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_fbconfig)
if (fbc) {
window->ctx = __glut_glXCreateContextWithConfigSGIX(__glutDisplay, fbc,
GLX_RGBA_TYPE_SGIX, None, __glutTryDirect);
} else
#endif
{
overlay->ctx = glXCreateContext(__glutDisplay, overlay->vis,
None, __glutTryDirect);
}
if (!overlay->ctx) {
__glutFatalError(
"failed to create overlay OpenGL rendering context.");
}
#if !defined(_WIN32)
overlay->isDirect = glXIsDirect(__glutDisplay, overlay->ctx);
if (__glutForceDirect) {
if (!overlay->isDirect) {
__glutFatalError("direct rendering not possible.");
}
}
#endif
__glutSetupColormap(overlay->vis, &overlay->colormap, &overlay->cmap);
overlay->transparentPixel = __glutGetTransparentPixel(__glutDisplay,
overlay->vis);
wa.colormap = overlay->cmap;
wa.background_pixel = overlay->transparentPixel;
wa.event_mask = window->eventMask & GLUT_OVERLAY_EVENT_FILTER_MASK;
wa.border_pixel = 0;
#if defined(_WIN32)
/* XXX Overlays not supported in Win32 yet. */
#else
overlay->win = XCreateWindow(__glutDisplay,
window->win,
0, 0, window->width, window->height, 0,
overlay->vis->depth, InputOutput, overlay->vis->visual,
CWBackPixel | CWBorderPixel | CWEventMask | CWColormap,
&wa);
#endif
if (window->children) {
/* Overlay window must be lowered below any GLUT
subwindows. */
XLowerWindow(__glutDisplay, overlay->win);
}
XMapWindow(__glutDisplay, overlay->win);
overlay->shownState = 1;
overlay->display = NULL;
/* Make sure a reshape gets delivered. */
window->forceReshape = True;
#if !defined(_WIN32)
__glutPutOnWorkList(__glutToplevelOf(window), GLUT_COLORMAP_WORK);
#endif
window->overlay = overlay;
glutUseLayer(GLUT_OVERLAY);
if (overlay->treatAsSingle) {
glDrawBuffer(GL_FRONT);
glReadBuffer(GL_FRONT);
}
}
void GLUTAPIENTRY
glutRemoveOverlay(void)
{
GLUTwindow *window = __glutCurrentWindow;
GLUToverlay *overlay = __glutCurrentWindow->overlay;
if (!window->overlay)
return;
/* If using overlay, switch to the normal layer. */
if (window->renderWin == overlay->win) {
glutUseLayer(GLUT_NORMAL);
}
#if !defined(_WIN32)
addStaleWindow(window, overlay->win);
#endif
__glutFreeOverlay(overlay);
window->overlay = NULL;
#if !defined(_WIN32)
__glutPutOnWorkList(__glutToplevelOf(window), GLUT_COLORMAP_WORK);
#endif
}
void GLUTAPIENTRY
glutUseLayer(GLenum layer)
{
GLUTwindow *window = __glutCurrentWindow;
switch (layer) {
case GLUT_NORMAL:
#ifdef _WIN32
window->renderDc = window->hdc;
#endif
window->renderWin = window->win;
window->renderCtx = window->ctx;
break;
case GLUT_OVERLAY:
/* Did you crash here? Calling glutUseLayer(GLUT_OVERLAY)
without an overlay established is erroneous. Fix your
code. */
#ifdef _WIN32
window->renderDc = window->overlay->hdc;
#endif
window->renderWin = window->overlay->win;
window->renderCtx = window->overlay->ctx;
break;
default:
__glutWarning("glutUseLayer: unknown layer, %d.", layer);
break;
}
__glutSetWindow(window);
}
void GLUTAPIENTRY
glutPostOverlayRedisplay(void)
{
__glutPostRedisplay(__glutCurrentWindow, GLUT_OVERLAY_REDISPLAY_WORK);
}
/* The advantage of this routine is that it saves the cost of a
glutSetWindow call (entailing an expensive OpenGL context
switch), particularly useful when multiple windows need
redisplays posted at the same times. */
void GLUTAPIENTRY
glutPostWindowOverlayRedisplay(int win)
{
__glutPostRedisplay(__glutWindowList[win - 1], GLUT_OVERLAY_REDISPLAY_WORK);
}
void GLUTAPIENTRY
glutOverlayDisplayFunc(GLUTdisplayCB displayFunc)
{
if (!__glutCurrentWindow->overlay) {
__glutWarning("glutOverlayDisplayFunc: window has no overlay established");
return;
}
__glutCurrentWindow->overlay->display = displayFunc;
}
void GLUTAPIENTRY
glutHideOverlay(void)
{
if (!__glutCurrentWindow->overlay) {
__glutWarning("glutHideOverlay: window has no overlay established");
return;
}
XUnmapWindow(__glutDisplay, __glutCurrentWindow->overlay->win);
__glutCurrentWindow->overlay->shownState = 0;
}
void GLUTAPIENTRY
glutShowOverlay(void)
{
if (!__glutCurrentWindow->overlay) {
__glutWarning("glutShowOverlay: window has no overlay established");
return;
}
XMapWindow(__glutDisplay, __glutCurrentWindow->overlay->win);
__glutCurrentWindow->overlay->shownState = 1;
}
int GLUTAPIENTRY
glutLayerGet(GLenum param)
{
switch (param) {
case GLUT_OVERLAY_POSSIBLE:
{
XVisualInfo *vi;
Bool dummy, visAlloced;
void *fbc;
vi = determineOverlayVisual(&dummy, &visAlloced, &fbc);
if (vi) {
if (visAlloced)
XFree(vi);
return 1;
}
return 0;
}
case GLUT_LAYER_IN_USE:
return __glutCurrentWindow->renderWin != __glutCurrentWindow->win;
case GLUT_HAS_OVERLAY:
return __glutCurrentWindow->overlay != NULL;
case GLUT_TRANSPARENT_INDEX:
if (__glutCurrentWindow->overlay) {
return __glutCurrentWindow->overlay->transparentPixel;
} else {
return -1;
}
case GLUT_NORMAL_DAMAGED:
/* __glutWindowDamaged is used so the damage state within
the window (or overlay belwo) can be cleared before
calling a display callback so on return, the state does
not have to be cleared (since upon return from the
callback the window could be destroyed (or layer
removed). */
return (__glutCurrentWindow->workMask & GLUT_REPAIR_WORK)
|| __glutWindowDamaged;
case GLUT_OVERLAY_DAMAGED:
if (__glutCurrentWindow->overlay) {
return (__glutCurrentWindow->workMask & GLUT_OVERLAY_REPAIR_WORK)
|| __glutWindowDamaged;
} else {
return -1;
}
default:
__glutWarning("invalid glutLayerGet param: %d", param);
return -1;
}
}
/* ENDCENTRY */
/* GENERATED FILE -- DO NOT MODIFY */
#include "glutstroke.h"
/* char: 33 '!' */
static const CoordRec char33_stroke0[] = {
{ 13.3819, 100 },
{ 13.3819, 33.3333 },
};
static const CoordRec char33_stroke1[] = {
{ 13.3819, 9.5238 },
{ 8.62, 4.7619 },
{ 13.3819, 0 },
{ 18.1438, 4.7619 },
{ 13.3819, 9.5238 },
};
static const StrokeRec char33[] = {
{ 2, char33_stroke0 },
{ 5, char33_stroke1 },
};
/* char: 34 '"' */
static const CoordRec char34_stroke0[] = {
{ 4.02, 100 },
{ 4.02, 66.6667 },
};
static const CoordRec char34_stroke1[] = {
{ 42.1152, 100 },
{ 42.1152, 66.6667 },
};
static const StrokeRec char34[] = {
{ 2, char34_stroke0 },
{ 2, char34_stroke1 },
};
/* char: 35 '#' */
static const CoordRec char35_stroke0[] = {
{ 41.2952, 119.048 },
{ 7.9619, -33.3333 },
};
static const CoordRec char35_stroke1[] = {
{ 69.8667, 119.048 },
{ 36.5333, -33.3333 },
};
static const CoordRec char35_stroke2[] = {
{ 7.9619, 57.1429 },
{ 74.6286, 57.1429 },
};
static const CoordRec char35_stroke3[] = {
{ 3.2, 28.5714 },
{ 69.8667, 28.5714 },
};
static const StrokeRec char35[] = {
{ 2, char35_stroke0 },
{ 2, char35_stroke1 },
{ 2, char35_stroke2 },
{ 2, char35_stroke3 },
};
/* char: 36 '$' */
static const CoordRec char36_stroke0[] = {
{ 28.6295, 119.048 },
{ 28.6295, -19.0476 },
};
static const CoordRec char36_stroke1[] = {
{ 47.6771, 119.048 },
{ 47.6771, -19.0476 },
};
static const CoordRec char36_stroke2[] = {
{ 71.4867, 85.7143 },
{ 61.9629, 95.2381 },
{ 47.6771, 100 },
{ 28.6295, 100 },
{ 14.3438, 95.2381 },
{ 4.82, 85.7143 },
{ 4.82, 76.1905 },
{ 9.5819, 66.6667 },
{ 14.3438, 61.9048 },
{ 23.8676, 57.1429 },
{ 52.439, 47.619 },
{ 61.9629, 42.8571 },
{ 66.7248, 38.0952 },
{ 71.4867, 28.5714 },
{ 71.4867, 14.2857 },
{ 61.9629, 4.7619 },
{ 47.6771, 0 },
{ 28.6295, 0 },
{ 14.3438, 4.7619 },
{ 4.82, 14.2857 },
};
static const StrokeRec char36[] = {
{ 2, char36_stroke0 },
{ 2, char36_stroke1 },
{ 20, char36_stroke2 },
};
/* char: 37 '%' */
static const CoordRec char37_stroke0[] = {
{ 92.0743, 100 },
{ 6.36, 0 },
};
static const CoordRec char37_stroke1[] = {
{ 30.1695, 100 },
{ 39.6933, 90.4762 },
{ 39.6933, 80.9524 },
{ 34.9314, 71.4286 },
{ 25.4076, 66.6667 },
{ 15.8838, 66.6667 },
{ 6.36, 76.1905 },
{ 6.36, 85.7143 },
{ 11.1219, 95.2381 },
{ 20.6457, 100 },
{ 30.1695, 100 },
{ 39.6933, 95.2381 },
{ 53.979, 90.4762 },
{ 68.2648, 90.4762 },
{ 82.5505, 95.2381 },
{ 92.0743, 100 },
};
static const CoordRec char37_stroke2[] = {
{ 73.0267, 33.3333 },
{ 63.5029, 28.5714 },
{ 58.741, 19.0476 },
{ 58.741, 9.5238 },
{ 68.2648, 0 },
{ 77.7886, 0 },
{ 87.3124, 4.7619 },
{ 92.0743, 14.2857 },
{ 92.0743, 23.8095 },
{ 82.5505, 33.3333 },
{ 73.0267, 33.3333 },
};
static const StrokeRec char37[] = {
{ 2, char37_stroke0 },
{ 16, char37_stroke1 },
{ 11, char37_stroke2 },
};
/* char: 38 '&' */
static const CoordRec char38_stroke0[] = {
{ 101.218, 57.1429 },
{ 101.218, 61.9048 },
{ 96.4562, 66.6667 },
{ 91.6943, 66.6667 },
{ 86.9324, 61.9048 },
{ 82.1705, 52.381 },
{ 72.6467, 28.5714 },
{ 63.1229, 14.2857 },
{ 53.599, 4.7619 },
{ 44.0752, 0 },
{ 25.0276, 0 },
{ 15.5038, 4.7619 },
{ 10.7419, 9.5238 },
{ 5.98, 19.0476 },
{ 5.98, 28.5714 },
{ 10.7419, 38.0952 },
{ 15.5038, 42.8571 },
{ 48.8371, 61.9048 },
{ 53.599, 66.6667 },
{ 58.361, 76.1905 },
{ 58.361, 85.7143 },
{ 53.599, 95.2381 },
{ 44.0752, 100 },
{ 34.5514, 95.2381 },
{ 29.7895, 85.7143 },
{ 29.7895, 76.1905 },
{ 34.5514, 61.9048 },
{ 44.0752, 47.619 },
{ 67.8848, 14.2857 },
{ 77.4086, 4.7619 },
{ 86.9324, 0 },
{ 96.4562, 0 },
{ 101.218, 4.7619 },
{ 101.218, 9.5238 },
};
static const StrokeRec char38[] = {
{ 34, char38_stroke0 },
};
/* char: 39 ''' */
static const CoordRec char39_stroke0[] = {
{ 4.44, 100 },
{ 4.44, 66.6667 },
};
static const StrokeRec char39[] = {
{ 2, char39_stroke0 },
};
/* char: 40 '(' */
static const CoordRec char40_stroke0[] = {
{ 40.9133, 119.048 },
{ 31.3895, 109.524 },
{ 21.8657, 95.2381 },
{ 12.3419, 76.1905 },
{ 7.58, 52.381 },
{ 7.58, 33.3333 },
{ 12.3419, 9.5238 },
{ 21.8657, -9.5238 },
{ 31.3895, -23.8095 },
{ 40.9133, -33.3333 },
};
static const StrokeRec char40[] = {
{ 10, char40_stroke0 },
};
/* char: 41 ')' */
static const CoordRec char41_stroke0[] = {
{ 5.28, 119.048 },
{ 14.8038, 109.524 },
{ 24.3276, 95.2381 },
{ 33.8514, 76.1905 },
{ 38.6133, 52.381 },
{ 38.6133, 33.3333 },
{ 33.8514, 9.5238 },
{ 24.3276, -9.5238 },
{ 14.8038, -23.8095 },
{ 5.28, -33.3333 },
};
static const StrokeRec char41[] = {
{ 10, char41_stroke0 },
};
/* char: 42 '*' */
static const CoordRec char42_stroke0[] = {
{ 30.7695, 71.4286 },
{ 30.7695, 14.2857 },
};
static const CoordRec char42_stroke1[] = {
{ 6.96, 57.1429 },
{ 54.579, 28.5714 },
};
static const CoordRec char42_stroke2[] = {
{ 54.579, 57.1429 },
{ 6.96, 28.5714 },
};
static const StrokeRec char42[] = {
{ 2, char42_stroke0 },
{ 2, char42_stroke1 },
{ 2, char42_stroke2 },
};
/* char: 43 '+' */
static const CoordRec char43_stroke0[] = {
{ 48.8371, 85.7143 },
{ 48.8371, 0 },
};
static const CoordRec char43_stroke1[] = {
{ 5.98, 42.8571 },
{ 91.6943, 42.8571 },
};
static const StrokeRec char43[] = {
{ 2, char43_stroke0 },
{ 2, char43_stroke1 },
};
/* char: 44 ',' */
static const CoordRec char44_stroke0[] = {
{ 18.2838, 4.7619 },
{ 13.5219, 0 },
{ 8.76, 4.7619 },
{ 13.5219, 9.5238 },
{ 18.2838, 4.7619 },
{ 18.2838, -4.7619 },
{ 13.5219, -14.2857 },
{ 8.76, -19.0476 },
};
static const StrokeRec char44[] = {
{ 8, char44_stroke0 },
};
/* char: 45 '-' */
static const CoordRec char45_stroke0[] = {
{ 7.38, 42.8571 },
{ 93.0943, 42.8571 },
};
static const StrokeRec char45[] = {
{ 2, char45_stroke0 },
};
/* char: 46 '.' */
static const CoordRec char46_stroke0[] = {
{ 13.1019, 9.5238 },
{ 8.34, 4.7619 },
{ 13.1019, 0 },
{ 17.8638, 4.7619 },
{ 13.1019, 9.5238 },
};
static const StrokeRec char46[] = {
{ 5, char46_stroke0 },
};
/* char: 47 '/' */
static const CoordRec char47_stroke0[] = {
{ 7.24, -14.2857 },
{ 73.9067, 100 },
};
static const StrokeRec char47[] = {
{ 2, char47_stroke0 },
};
/* char: 48 '0' */
static const CoordRec char48_stroke0[] = {
{ 33.5514, 100 },
{ 19.2657, 95.2381 },
{ 9.7419, 80.9524 },
{ 4.98, 57.1429 },
{ 4.98, 42.8571 },
{ 9.7419, 19.0476 },
{ 19.2657, 4.7619 },
{ 33.5514, 0 },
{ 43.0752, 0 },
{ 57.361, 4.7619 },
{ 66.8848, 19.0476 },
{ 71.6467, 42.8571 },
{ 71.6467, 57.1429 },
{ 66.8848, 80.9524 },
{ 57.361, 95.2381 },
{ 43.0752, 100 },
{ 33.5514, 100 },
};
static const StrokeRec char48[] = {
{ 17, char48_stroke0 },
};
/* char: 49 '1' */
static const CoordRec char49_stroke0[] = {
{ 11.82, 80.9524 },
{ 21.3438, 85.7143 },
{ 35.6295, 100 },
{ 35.6295, 0 },
};
static const StrokeRec char49[] = {
{ 4, char49_stroke0 },
};
/* char: 50 '2' */
static const CoordRec char50_stroke0[] = {
{ 10.1819, 76.1905 },
{ 10.1819, 80.9524 },
{ 14.9438, 90.4762 },
{ 19.7057, 95.2381 },
{ 29.2295, 100 },
{ 48.2771, 100 },
{ 57.801, 95.2381 },
{ 62.5629, 90.4762 },
{ 67.3248, 80.9524 },
{ 67.3248, 71.4286 },
{ 62.5629, 61.9048 },
{ 53.039, 47.619 },
{ 5.42, 0 },
{ 72.0867, 0 },
};
static const StrokeRec char50[] = {
{ 14, char50_stroke0 },
};
/* char: 51 '3' */
static const CoordRec char51_stroke0[] = {
{ 14.5238, 100 },
{ 66.9048, 100 },
{ 38.3333, 61.9048 },
{ 52.619, 61.9048 },
{ 62.1429, 57.1429 },
{ 66.9048, 52.381 },
{ 71.6667, 38.0952 },
{ 71.6667, 28.5714 },
{ 66.9048, 14.2857 },
{ 57.381, 4.7619 },
{ 43.0952, 0 },
{ 28.8095, 0 },
{ 14.5238, 4.7619 },
{ 9.7619, 9.5238 },
{ 5, 19.0476 },
};
static const StrokeRec char51[] = {
{ 15, char51_stroke0 },
};
/* char: 52 '4' */
static const CoordRec char52_stroke0[] = {
{ 51.499, 100 },
{ 3.88, 33.3333 },
{ 75.3086, 33.3333 },
};
static const CoordRec char52_stroke1[] = {
{ 51.499, 100 },
{ 51.499, 0 },
};
static const StrokeRec char52[] = {
{ 3, char52_stroke0 },
{ 2, char52_stroke1 },
};
/* char: 53 '5' */
static const CoordRec char53_stroke0[] = {
{ 62.0029, 100 },
{ 14.3838, 100 },
{ 9.6219, 57.1429 },
{ 14.3838, 61.9048 },
{ 28.6695, 66.6667 },
{ 42.9552, 66.6667 },
{ 57.241, 61.9048 },
{ 66.7648, 52.381 },
{ 71.5267, 38.0952 },
{ 71.5267, 28.5714 },
{ 66.7648, 14.2857 },
{ 57.241, 4.7619 },
{ 42.9552, 0 },
{ 28.6695, 0 },
{ 14.3838, 4.7619 },
{ 9.6219, 9.5238 },
{ 4.86, 19.0476 },
};
static const StrokeRec char53[] = {
{ 17, char53_stroke0 },
};
/* char: 54 '6' */
static const CoordRec char54_stroke0[] = {
{ 62.7229, 85.7143 },
{ 57.961, 95.2381 },
{ 43.6752, 100 },
{ 34.1514, 100 },
{ 19.8657, 95.2381 },
{ 10.3419, 80.9524 },
{ 5.58, 57.1429 },
{ 5.58, 33.3333 },
{ 10.3419, 14.2857 },
{ 19.8657, 4.7619 },
{ 34.1514, 0 },
{ 38.9133, 0 },
{ 53.199, 4.7619 },
{ 62.7229, 14.2857 },
{ 67.4848, 28.5714 },
{ 67.4848, 33.3333 },
{ 62.7229, 47.619 },
{ 53.199, 57.1429 },
{ 38.9133, 61.9048 },
{ 34.1514, 61.9048 },
{ 19.8657, 57.1429 },
{ 10.3419, 47.619 },
{ 5.58, 33.3333 },
};
static const StrokeRec char54[] = {
{ 23, char54_stroke0 },
};
/* char: 55 '7' */
static const CoordRec char55_stroke0[] = {
{ 72.2267, 100 },
{ 24.6076, 0 },
};
static const CoordRec char55_stroke1[] = {
{ 5.56, 100 },
{ 72.2267, 100 },
};
static const StrokeRec char55[] = {
{ 2, char55_stroke0 },
{ 2, char55_stroke1 },
};
/* char: 56 '8' */
static const CoordRec char56_stroke0[] = {
{ 29.4095, 100 },
{ 15.1238, 95.2381 },
{ 10.3619, 85.7143 },
{ 10.3619, 76.1905 },
{ 15.1238, 66.6667 },
{ 24.6476, 61.9048 },
{ 43.6952, 57.1429 },
{ 57.981, 52.381 },
{ 67.5048, 42.8571 },
{ 72.2667, 33.3333 },
{ 72.2667, 19.0476 },
{ 67.5048, 9.5238 },
{ 62.7429, 4.7619 },
{ 48.4571, 0 },
{ 29.4095, 0 },
{ 15.1238, 4.7619 },
{ 10.3619, 9.5238 },
{ 5.6, 19.0476 },
{ 5.6, 33.3333 },
{ 10.3619, 42.8571 },
{ 19.8857, 52.381 },
{ 34.1714, 57.1429 },
{ 53.219, 61.9048 },
{ 62.7429, 66.6667 },
{ 67.5048, 76.1905 },
{ 67.5048, 85.7143 },
{ 62.7429, 95.2381 },
{ 48.4571, 100 },
{ 29.4095, 100 },
};
static const StrokeRec char56[] = {
{ 29, char56_stroke0 },
};
/* char: 57 '9' */
static const CoordRec char57_stroke0[] = {
{ 68.5048, 66.6667 },
{ 63.7429, 52.381 },
{ 54.219, 42.8571 },
{ 39.9333, 38.0952 },
{ 35.1714, 38.0952 },
{ 20.8857, 42.8571 },
{ 11.3619, 52.381 },
{ 6.6, 66.6667 },
{ 6.6, 71.4286 },
{ 11.3619, 85.7143 },
{ 20.8857, 95.2381 },
{ 35.1714, 100 },
{ 39.9333, 100 },
{ 54.219, 95.2381 },
{ 63.7429, 85.7143 },
{ 68.5048, 66.6667 },
{ 68.5048, 42.8571 },
{ 63.7429, 19.0476 },
{ 54.219, 4.7619 },
{ 39.9333, 0 },
{ 30.4095, 0 },
{ 16.1238, 4.7619 },
{ 11.3619, 14.2857 },
};
static const StrokeRec char57[] = {
{ 23, char57_stroke0 },
};
/* char: 58 ':' */
static const CoordRec char58_stroke0[] = {
{ 14.0819, 66.6667 },
{ 9.32, 61.9048 },
{ 14.0819, 57.1429 },
{ 18.8438, 61.9048 },
{ 14.0819, 66.6667 },
};
static const CoordRec char58_stroke1[] = {
{ 14.0819, 9.5238 },
{ 9.32, 4.7619 },
{ 14.0819, 0 },
{ 18.8438, 4.7619 },
{ 14.0819, 9.5238 },
};
static const StrokeRec char58[] = {
{ 5, char58_stroke0 },
{ 5, char58_stroke1 },
};
/* char: 59 ';' */
static const CoordRec char59_stroke0[] = {
{ 12.9619, 66.6667 },
{ 8.2, 61.9048 },
{ 12.9619, 57.1429 },
{ 17.7238, 61.9048 },
{ 12.9619, 66.6667 },
};
static const CoordRec char59_stroke1[] = {
{ 17.7238, 4.7619 },
{ 12.9619, 0 },
{ 8.2, 4.7619 },
{ 12.9619, 9.5238 },
{ 17.7238, 4.7619 },
{ 17.7238, -4.7619 },
{ 12.9619, -14.2857 },
{ 8.2, -19.0476 },
};
static const StrokeRec char59[] = {
{ 5, char59_stroke0 },
{ 8, char59_stroke1 },
};
/* char: 60 '<' */
static const CoordRec char60_stroke0[] = {
{ 79.2505, 85.7143 },
{ 3.06, 42.8571 },
{ 79.2505, 0 },
};
static const StrokeRec char60[] = {
{ 3, char60_stroke0 },
};
/* char: 61 '=' */
static const CoordRec char61_stroke0[] = {
{ 5.7, 57.1429 },
{ 91.4143, 57.1429 },
};
static const CoordRec char61_stroke1[] = {
{ 5.7, 28.5714 },
{ 91.4143, 28.5714 },
};
static const StrokeRec char61[] = {
{ 2, char61_stroke0 },
{ 2, char61_stroke1 },
};
/* char: 62 '>' */
static const CoordRec char62_stroke0[] = {
{ 2.78, 85.7143 },
{ 78.9705, 42.8571 },
{ 2.78, 0 },
};
static const StrokeRec char62[] = {
{ 3, char62_stroke0 },
};
/* char: 63 '?' */
static const CoordRec char63_stroke0[] = {
{ 8.42, 76.1905 },
{ 8.42, 80.9524 },
{ 13.1819, 90.4762 },
{ 17.9438, 95.2381 },
{ 27.4676, 100 },
{ 46.5152, 100 },
{ 56.039, 95.2381 },
{ 60.801, 90.4762 },
{ 65.5629, 80.9524 },
{ 65.5629, 71.4286 },
{ 60.801, 61.9048 },
{ 56.039, 57.1429 },
{ 36.9914, 47.619 },
{ 36.9914, 33.3333 },
};
static const CoordRec char63_stroke1[] = {
{ 36.9914, 9.5238 },
{ 32.2295, 4.7619 },
{ 36.9914, 0 },
{ 41.7533, 4.7619 },
{ 36.9914, 9.5238 },
};
static const StrokeRec char63[] = {
{ 14, char63_stroke0 },
{ 5, char63_stroke1 },
};
/* char: 64 '@' */
static const CoordRec char64_stroke0[] = {
{ 49.2171, 52.381 },
{ 39.6933, 57.1429 },
{ 30.1695, 57.1429 },
{ 25.4076, 47.619 },
{ 25.4076, 42.8571 },
{ 30.1695, 33.3333 },
{ 39.6933, 33.3333 },
{ 49.2171, 38.0952 },
};
static const CoordRec char64_stroke1[] = {
{ 49.2171, 57.1429 },
{ 49.2171, 38.0952 },
{ 53.979, 33.3333 },
{ 63.5029, 33.3333 },
{ 68.2648, 42.8571 },
{ 68.2648, 47.619 },
{ 63.5029, 61.9048 },
{ 53.979, 71.4286 },
{ 39.6933, 76.1905 },
{ 34.9314, 76.1905 },
{ 20.6457, 71.4286 },
{ 11.1219, 61.9048 },
{ 6.36, 47.619 },
{ 6.36, 42.8571 },
{ 11.1219, 28.5714 },
{ 20.6457, 19.0476 },
{ 34.9314, 14.2857 },
{ 39.6933, 14.2857 },
{ 53.979, 19.0476 },
};
static const StrokeRec char64[] = {
{ 8, char64_stroke0 },
{ 19, char64_stroke1 },
};
/* char: 65 'A' */
static const CoordRec char65_stroke0[] = {
{ 40.5952, 100 },
{ 2.5, 0 },
};
static const CoordRec char65_stroke1[] = {
{ 40.5952, 100 },
{ 78.6905, 0 },
};
static const CoordRec char65_stroke2[] = {
{ 16.7857, 33.3333 },
{ 64.4048, 33.3333 },
};
static const StrokeRec char65[] = {
{ 2, char65_stroke0 },
{ 2, char65_stroke1 },
{ 2, char65_stroke2 },
};
/* char: 66 'B' */
static const CoordRec char66_stroke0[] = {
{ 11.42, 100 },
{ 11.42, 0 },
};
static const CoordRec char66_stroke1[] = {
{ 11.42, 100 },
{ 54.2771, 100 },
{ 68.5629, 95.2381 },
{ 73.3248, 90.4762 },
{ 78.0867, 80.9524 },
{ 78.0867, 71.4286 },
{ 73.3248, 61.9048 },
{ 68.5629, 57.1429 },
{ 54.2771, 52.381 },
};
static const CoordRec char66_stroke2[] = {
{ 11.42, 52.381 },
{ 54.2771, 52.381 },
{ 68.5629, 47.619 },
{ 73.3248, 42.8571 },
{ 78.0867, 33.3333 },
{ 78.0867, 19.0476 },
{ 73.3248, 9.5238 },
{ 68.5629, 4.7619 },
{ 54.2771, 0 },
{ 11.42, 0 },
};
static const StrokeRec char66[] = {
{ 2, char66_stroke0 },
{ 9, char66_stroke1 },
{ 10, char66_stroke2 },
};
/* char: 67 'C' */
static const CoordRec char67_stroke0[] = {
{ 78.0886, 76.1905 },
{ 73.3267, 85.7143 },
{ 63.8029, 95.2381 },
{ 54.279, 100 },
{ 35.2314, 100 },
{ 25.7076, 95.2381 },
{ 16.1838, 85.7143 },
{ 11.4219, 76.1905 },
{ 6.66, 61.9048 },
{ 6.66, 38.0952 },
{ 11.4219, 23.8095 },
{ 16.1838, 14.2857 },
{ 25.7076, 4.7619 },
{ 35.2314, 0 },
{ 54.279, 0 },
{ 63.8029, 4.7619 },
{ 73.3267, 14.2857 },
{ 78.0886, 23.8095 },
};
static const StrokeRec char67[] = {
{ 18, char67_stroke0 },
};
/* char: 68 'D' */
static const CoordRec char68_stroke0[] = {
{ 11.96, 100 },
{ 11.96, 0 },
};
static const CoordRec char68_stroke1[] = {
{ 11.96, 100 },
{ 45.2933, 100 },
{ 59.579, 95.2381 },
{ 69.1029, 85.7143 },
{ 73.8648, 76.1905 },
{ 78.6267, 61.9048 },
{ 78.6267, 38.0952 },
{ 73.8648, 23.8095 },
{ 69.1029, 14.2857 },
{ 59.579, 4.7619 },
{ 45.2933, 0 },
{ 11.96, 0 },
};
static const StrokeRec char68[] = {
{ 2, char68_stroke0 },
{ 12, char68_stroke1 },
};
/* char: 69 'E' */
static const CoordRec char69_stroke0[] = {
{ 11.42, 100 },
{ 11.42, 0 },
};
static const CoordRec char69_stroke1[] = {
{ 11.42, 100 },
{ 73.3248, 100 },
};
static const CoordRec char69_stroke2[] = {
{ 11.42, 52.381 },
{ 49.5152, 52.381 },
};
static const CoordRec char69_stroke3[] = {
{ 11.42, 0 },
{ 73.3248, 0 },
};
static const StrokeRec char69[] = {
{ 2, char69_stroke0 },
{ 2, char69_stroke1 },
{ 2, char69_stroke2 },
{ 2, char69_stroke3 },
};
/* char: 70 'F' */
static const CoordRec char70_stroke0[] = {
{ 11.42, 100 },
{ 11.42, 0 },
};
static const CoordRec char70_stroke1[] = {
{ 11.42, 100 },
{ 73.3248, 100 },
};
static const CoordRec char70_stroke2[] = {
{ 11.42, 52.381 },
{ 49.5152, 52.381 },
};
static const StrokeRec char70[] = {
{ 2, char70_stroke0 },
{ 2, char70_stroke1 },
{ 2, char70_stroke2 },
};
/* char: 71 'G' */
static const CoordRec char71_stroke0[] = {
{ 78.4886, 76.1905 },
{ 73.7267, 85.7143 },
{ 64.2029, 95.2381 },
{ 54.679, 100 },
{ 35.6314, 100 },
{ 26.1076, 95.2381 },
{ 16.5838, 85.7143 },
{ 11.8219, 76.1905 },
{ 7.06, 61.9048 },
{ 7.06, 38.0952 },
{ 11.8219, 23.8095 },
{ 16.5838, 14.2857 },
{ 26.1076, 4.7619 },
{ 35.6314, 0 },
{ 54.679, 0 },
{ 64.2029, 4.7619 },
{ 73.7267, 14.2857 },
{ 78.4886, 23.8095 },
{ 78.4886, 38.0952 },
};
static const CoordRec char71_stroke1[] = {
{ 54.679, 38.0952 },
{ 78.4886, 38.0952 },
};
static const StrokeRec char71[] = {
{ 19, char71_stroke0 },
{ 2, char71_stroke1 },
};
/* char: 72 'H' */
static const CoordRec char72_stroke0[] = {
{ 11.42, 100 },
{ 11.42, 0 },
};
static const CoordRec char72_stroke1[] = {
{ 78.0867, 100 },
{ 78.0867, 0 },
};
static const CoordRec char72_stroke2[] = {
{ 11.42, 52.381 },
{ 78.0867, 52.381 },
};
static const StrokeRec char72[] = {
{ 2, char72_stroke0 },
{ 2, char72_stroke1 },
{ 2, char72_stroke2 },
};
/* char: 73 'I' */
static const CoordRec char73_stroke0[] = {
{ 10.86, 100 },
{ 10.86, 0 },
};
static const StrokeRec char73[] = {
{ 2, char73_stroke0 },
};
/* char: 74 'J' */
static const CoordRec char74_stroke0[] = {
{ 50.119, 100 },
{ 50.119, 23.8095 },
{ 45.3571, 9.5238 },
{ 40.5952, 4.7619 },
{ 31.0714, 0 },
{ 21.5476, 0 },
{ 12.0238, 4.7619 },
{ 7.2619, 9.5238 },
{ 2.5, 23.8095 },
{ 2.5, 33.3333 },
};
static const StrokeRec char74[] = {
{ 10, char74_stroke0 },
};
/* char: 75 'K' */
static const CoordRec char75_stroke0[] = {
{ 11.28, 100 },
{ 11.28, 0 },
};
static const CoordRec char75_stroke1[] = {
{ 77.9467, 100 },
{ 11.28, 33.3333 },
};
static const CoordRec char75_stroke2[] = {
{ 35.0895, 57.1429 },
{ 77.9467, 0 },
};
static const StrokeRec char75[] = {
{ 2, char75_stroke0 },
{ 2, char75_stroke1 },
{ 2, char75_stroke2 },
};
/* char: 76 'L' */
static const CoordRec char76_stroke0[] = {
{ 11.68, 100 },
{ 11.68, 0 },
};
static const CoordRec char76_stroke1[] = {
{ 11.68, 0 },
{ 68.8229, 0 },
};
static const StrokeRec char76[] = {
{ 2, char76_stroke0 },
{ 2, char76_stroke1 },
};
/* char: 77 'M' */
static const CoordRec char77_stroke0[] = {
{ 10.86, 100 },
{ 10.86, 0 },
};
static const CoordRec char77_stroke1[] = {
{ 10.86, 100 },
{ 48.9552, 0 },
};
static const CoordRec char77_stroke2[] = {
{ 87.0505, 100 },
{ 48.9552, 0 },
};
static const CoordRec char77_stroke3[] = {
{ 87.0505, 100 },
{ 87.0505, 0 },
};
static const StrokeRec char77[] = {
{ 2, char77_stroke0 },
{ 2, char77_stroke1 },
{ 2, char77_stroke2 },
{ 2, char77_stroke3 },
};
/* char: 78 'N' */
static const CoordRec char78_stroke0[] = {
{ 11.14, 100 },
{ 11.14, 0 },
};
static const CoordRec char78_stroke1[] = {
{ 11.14, 100 },
{ 77.8067, 0 },
};
static const CoordRec char78_stroke2[] = {
{ 77.8067, 100 },
{ 77.8067, 0 },
};
static const StrokeRec char78[] = {
{ 2, char78_stroke0 },
{ 2, char78_stroke1 },
{ 2, char78_stroke2 },
};
/* char: 79 'O' */
static const CoordRec char79_stroke0[] = {
{ 34.8114, 100 },
{ 25.2876, 95.2381 },
{ 15.7638, 85.7143 },
{ 11.0019, 76.1905 },
{ 6.24, 61.9048 },
{ 6.24, 38.0952 },
{ 11.0019, 23.8095 },
{ 15.7638, 14.2857 },
{ 25.2876, 4.7619 },
{ 34.8114, 0 },
{ 53.859, 0 },
{ 63.3829, 4.7619 },
{ 72.9067, 14.2857 },
{ 77.6686, 23.8095 },
{ 82.4305, 38.0952 },
{ 82.4305, 61.9048 },
{ 77.6686, 76.1905 },
{ 72.9067, 85.7143 },
{ 63.3829, 95.2381 },
{ 53.859, 100 },
{ 34.8114, 100 },
};
static const StrokeRec char79[] = {
{ 21, char79_stroke0 },
};
/* char: 80 'P' */
static const CoordRec char80_stroke0[] = {
{ 12.1, 100 },
{ 12.1, 0 },
};
static const CoordRec char80_stroke1[] = {
{ 12.1, 100 },
{ 54.9571, 100 },
{ 69.2429, 95.2381 },
{ 74.0048, 90.4762 },
{ 78.7667, 80.9524 },
{ 78.7667, 66.6667 },
{ 74.0048, 57.1429 },
{ 69.2429, 52.381 },
{ 54.9571, 47.619 },
{ 12.1, 47.619 },
};
static const StrokeRec char80[] = {
{ 2, char80_stroke0 },
{ 10, char80_stroke1 },
};
/* char: 81 'Q' */
static const CoordRec char81_stroke0[] = {
{ 33.8714, 100 },
{ 24.3476, 95.2381 },
{ 14.8238, 85.7143 },
{ 10.0619, 76.1905 },
{ 5.3, 61.9048 },
{ 5.3, 38.0952 },
{ 10.0619, 23.8095 },
{ 14.8238, 14.2857 },
{ 24.3476, 4.7619 },
{ 33.8714, 0 },
{ 52.919, 0 },
{ 62.4429, 4.7619 },
{ 71.9667, 14.2857 },
{ 76.7286, 23.8095 },
{ 81.4905, 38.0952 },
{ 81.4905, 61.9048 },
{ 76.7286, 76.1905 },
{ 71.9667, 85.7143 },
{ 62.4429, 95.2381 },
{ 52.919, 100 },
{ 33.8714, 100 },
};
static const CoordRec char81_stroke1[] = {
{ 48.1571, 19.0476 },
{ 76.7286, -9.5238 },
};
static const StrokeRec char81[] = {
{ 21, char81_stroke0 },
{ 2, char81_stroke1 },
};
/* char: 82 'R' */
static const CoordRec char82_stroke0[] = {
{ 11.68, 100 },
{ 11.68, 0 },
};
static const CoordRec char82_stroke1[] = {
{ 11.68, 100 },
{ 54.5371, 100 },
{ 68.8229, 95.2381 },
{ 73.5848, 90.4762 },
{ 78.3467, 80.9524 },
{ 78.3467, 71.4286 },
{ 73.5848, 61.9048 },
{ 68.8229, 57.1429 },
{ 54.5371, 52.381 },
{ 11.68, 52.381 },
};
static const CoordRec char82_stroke2[] = {
{ 45.0133, 52.381 },
{ 78.3467, 0 },
};
static const StrokeRec char82[] = {
{ 2, char82_stroke0 },
{ 10, char82_stroke1 },
{ 2, char82_stroke2 },
};
/* char: 83 'S' */
static const CoordRec char83_stroke0[] = {
{ 74.6667, 85.7143 },
{ 65.1429, 95.2381 },
{ 50.8571, 100 },
{ 31.8095, 100 },
{ 17.5238, 95.2381 },
{ 8, 85.7143 },
{ 8, 76.1905 },
{ 12.7619, 66.6667 },
{ 17.5238, 61.9048 },
{ 27.0476, 57.1429 },
{ 55.619, 47.619 },
{ 65.1429, 42.8571 },
{ 69.9048, 38.0952 },
{ 74.6667, 28.5714 },
{ 74.6667, 14.2857 },
{ 65.1429, 4.7619 },
{ 50.8571, 0 },
{ 31.8095, 0 },
{ 17.5238, 4.7619 },
{ 8, 14.2857 },
};
static const StrokeRec char83[] = {
{ 20, char83_stroke0 },
};
/* char: 84 'T' */
static const CoordRec char84_stroke0[] = {
{ 35.6933, 100 },
{ 35.6933, 0 },
};
static const CoordRec char84_stroke1[] = {
{ 2.36, 100 },
{ 69.0267, 100 },
};
static const StrokeRec char84[] = {
{ 2, char84_stroke0 },
{ 2, char84_stroke1 },
};
/* char: 85 'U' */
static const CoordRec char85_stroke0[] = {
{ 11.54, 100 },
{ 11.54, 28.5714 },
{ 16.3019, 14.2857 },
{ 25.8257, 4.7619 },
{ 40.1114, 0 },
{ 49.6352, 0 },
{ 63.921, 4.7619 },
{ 73.4448, 14.2857 },
{ 78.2067, 28.5714 },
{ 78.2067, 100 },
};
static const StrokeRec char85[] = {
{ 10, char85_stroke0 },
};
/* char: 86 'V' */
static const CoordRec char86_stroke0[] = {
{ 2.36, 100 },
{ 40.4552, 0 },
};
static const CoordRec char86_stroke1[] = {
{ 78.5505, 100 },
{ 40.4552, 0 },
};
static const StrokeRec char86[] = {
{ 2, char86_stroke0 },
{ 2, char86_stroke1 },
};
/* char: 87 'W' */
static const CoordRec char87_stroke0[] = {
{ 2.22, 100 },
{ 26.0295, 0 },
};
static const CoordRec char87_stroke1[] = {
{ 49.839, 100 },
{ 26.0295, 0 },
};
static const CoordRec char87_stroke2[] = {
{ 49.839, 100 },
{ 73.6486, 0 },
};
static const CoordRec char87_stroke3[] = {
{ 97.4581, 100 },
{ 73.6486, 0 },
};
static const StrokeRec char87[] = {
{ 2, char87_stroke0 },
{ 2, char87_stroke1 },
{ 2, char87_stroke2 },
{ 2, char87_stroke3 },
};
/* char: 88 'X' */
static const CoordRec char88_stroke0[] = {
{ 2.5, 100 },
{ 69.1667, 0 },
};
static const CoordRec char88_stroke1[] = {
{ 69.1667, 100 },
{ 2.5, 0 },
};
static const StrokeRec char88[] = {
{ 2, char88_stroke0 },
{ 2, char88_stroke1 },
};
/* char: 89 'Y' */
static const CoordRec char89_stroke0[] = {
{ 1.52, 100 },
{ 39.6152, 52.381 },
{ 39.6152, 0 },
};
static const CoordRec char89_stroke1[] = {
{ 77.7105, 100 },
{ 39.6152, 52.381 },
};
static const StrokeRec char89[] = {
{ 3, char89_stroke0 },
{ 2, char89_stroke1 },
};
/* char: 90 'Z' */
static const CoordRec char90_stroke0[] = {
{ 69.1667, 100 },
{ 2.5, 0 },
};
static const CoordRec char90_stroke1[] = {
{ 2.5, 100 },
{ 69.1667, 100 },
};
static const CoordRec char90_stroke2[] = {
{ 2.5, 0 },
{ 69.1667, 0 },
};
static const StrokeRec char90[] = {
{ 2, char90_stroke0 },
{ 2, char90_stroke1 },
{ 2, char90_stroke2 },
};
/* char: 91 '[' */
static const CoordRec char91_stroke0[] = {
{ 7.78, 119.048 },
{ 7.78, -33.3333 },
};
static const CoordRec char91_stroke1[] = {
{ 12.5419, 119.048 },
{ 12.5419, -33.3333 },
};
static const CoordRec char91_stroke2[] = {
{ 7.78, 119.048 },
{ 41.1133, 119.048 },
};
static const CoordRec char91_stroke3[] = {
{ 7.78, -33.3333 },
{ 41.1133, -33.3333 },
};
static const StrokeRec char91[] = {
{ 2, char91_stroke0 },
{ 2, char91_stroke1 },
{ 2, char91_stroke2 },
{ 2, char91_stroke3 },
};
/* char: 92 '\' */
static const CoordRec char92_stroke0[] = {
{ 5.84, 100 },
{ 72.5067, -14.2857 },
};
static const StrokeRec char92[] = {
{ 2, char92_stroke0 },
};
/* char: 93 ']' */
static const CoordRec char93_stroke0[] = {
{ 33.0114, 119.048 },
{ 33.0114, -33.3333 },
};
static const CoordRec char93_stroke1[] = {
{ 37.7733, 119.048 },
{ 37.7733, -33.3333 },
};
static const CoordRec char93_stroke2[] = {
{ 4.44, 119.048 },
{ 37.7733, 119.048 },
};
static const CoordRec char93_stroke3[] = {
{ 4.44, -33.3333 },
{ 37.7733, -33.3333 },
};
static const StrokeRec char93[] = {
{ 2, char93_stroke0 },
{ 2, char93_stroke1 },
{ 2, char93_stroke2 },
{ 2, char93_stroke3 },
};
/* char: 94 '^' */
static const CoordRec char94_stroke0[] = {
{ 44.0752, 109.524 },
{ 5.98, 42.8571 },
};
static const CoordRec char94_stroke1[] = {
{ 44.0752, 109.524 },
{ 82.1705, 42.8571 },
};
static const StrokeRec char94[] = {
{ 2, char94_stroke0 },
{ 2, char94_stroke1 },
};
/* char: 95 '_' */
static const CoordRec char95_stroke0[] = {
{ -1.1, -33.3333 },
{ 103.662, -33.3333 },
{ 103.662, -28.5714 },
{ -1.1, -28.5714 },
{ -1.1, -33.3333 },
};
static const StrokeRec char95[] = {
{ 5, char95_stroke0 },
};
/* char: 96 '`' */
static const CoordRec char96_stroke0[] = {
{ 33.0219, 100 },
{ 56.8314, 71.4286 },
};
static const CoordRec char96_stroke1[] = {
{ 33.0219, 100 },
{ 28.26, 95.2381 },
{ 56.8314, 71.4286 },
};
static const StrokeRec char96[] = {
{ 2, char96_stroke0 },
{ 3, char96_stroke1 },
};
/* char: 97 'a' */
static const CoordRec char97_stroke0[] = {
{ 63.8229, 66.6667 },
{ 63.8229, 0 },
};
static const CoordRec char97_stroke1[] = {
{ 63.8229, 52.381 },
{ 54.299, 61.9048 },
{ 44.7752, 66.6667 },
{ 30.4895, 66.6667 },
{ 20.9657, 61.9048 },
{ 11.4419, 52.381 },
{ 6.68, 38.0952 },
{ 6.68, 28.5714 },
{ 11.4419, 14.2857 },
{ 20.9657, 4.7619 },
{ 30.4895, 0 },
{ 44.7752, 0 },
{ 54.299, 4.7619 },
{ 63.8229, 14.2857 },
};
static const StrokeRec char97[] = {
{ 2, char97_stroke0 },
{ 14, char97_stroke1 },
};
/* char: 98 'b' */
static const CoordRec char98_stroke0[] = {
{ 8.76, 100 },
{ 8.76, 0 },
};
static const CoordRec char98_stroke1[] = {
{ 8.76, 52.381 },
{ 18.2838, 61.9048 },
{ 27.8076, 66.6667 },
{ 42.0933, 66.6667 },
{ 51.6171, 61.9048 },
{ 61.141, 52.381 },
{ 65.9029, 38.0952 },
{ 65.9029, 28.5714 },
{ 61.141, 14.2857 },
{ 51.6171, 4.7619 },
{ 42.0933, 0 },
{ 27.8076, 0 },
{ 18.2838, 4.7619 },
{ 8.76, 14.2857 },
};
static const StrokeRec char98[] = {
{ 2, char98_stroke0 },
{ 14, char98_stroke1 },
};
/* char: 99 'c' */
static const CoordRec char99_stroke0[] = {
{ 62.6629, 52.381 },
{ 53.139, 61.9048 },
{ 43.6152, 66.6667 },
{ 29.3295, 66.6667 },
{ 19.8057, 61.9048 },
{ 10.2819, 52.381 },
{ 5.52, 38.0952 },
{ 5.52, 28.5714 },
{ 10.2819, 14.2857 },
{ 19.8057, 4.7619 },
{ 29.3295, 0 },
{ 43.6152, 0 },
{ 53.139, 4.7619 },
{ 62.6629, 14.2857 },
};
static const StrokeRec char99[] = {
{ 14, char99_stroke0 },
};
/* char: 100 'd' */
static const CoordRec char100_stroke0[] = {
{ 61.7829, 100 },
{ 61.7829, 0 },
};
static const CoordRec char100_stroke1[] = {
{ 61.7829, 52.381 },
{ 52.259, 61.9048 },
{ 42.7352, 66.6667 },
{ 28.4495, 66.6667 },
{ 18.9257, 61.9048 },
{ 9.4019, 52.381 },
{ 4.64, 38.0952 },
{ 4.64, 28.5714 },
{ 9.4019, 14.2857 },
{ 18.9257, 4.7619 },
{ 28.4495, 0 },
{ 42.7352, 0 },
{ 52.259, 4.7619 },
{ 61.7829, 14.2857 },
};
static const StrokeRec char100[] = {
{ 2, char100_stroke0 },
{ 14, char100_stroke1 },
};
/* char: 101 'e' */
static const CoordRec char101_stroke0[] = {
{ 5.72, 38.0952 },
{ 62.8629, 38.0952 },
{ 62.8629, 47.619 },
{ 58.101, 57.1429 },
{ 53.339, 61.9048 },
{ 43.8152, 66.6667 },
{ 29.5295, 66.6667 },
{ 20.0057, 61.9048 },
{ 10.4819, 52.381 },
{ 5.72, 38.0952 },
{ 5.72, 28.5714 },
{ 10.4819, 14.2857 },
{ 20.0057, 4.7619 },
{ 29.5295, 0 },
{ 43.8152, 0 },
{ 53.339, 4.7619 },
{ 62.8629, 14.2857 },
};
static const StrokeRec char101[] = {
{ 17, char101_stroke0 },
};
/* char: 102 'f' */
static const CoordRec char102_stroke0[] = {
{ 38.7752, 100 },
{ 29.2514, 100 },
{ 19.7276, 95.2381 },
{ 14.9657, 80.9524 },
{ 14.9657, 0 },
};
static const CoordRec char102_stroke1[] = {
{ 0.68, 66.6667 },
{ 34.0133, 66.6667 },
};
static const StrokeRec char102[] = {
{ 5, char102_stroke0 },
{ 2, char102_stroke1 },
};
/* char: 103 'g' */
static const CoordRec char103_stroke0[] = {
{ 62.5029, 66.6667 },
{ 62.5029, -9.5238 },
{ 57.741, -23.8095 },
{ 52.979, -28.5714 },
{ 43.4552, -33.3333 },
{ 29.1695, -33.3333 },
{ 19.6457, -28.5714 },
};
static const CoordRec char103_stroke1[] = {
{ 62.5029, 52.381 },
{ 52.979, 61.9048 },
{ 43.4552, 66.6667 },
{ 29.1695, 66.6667 },
{ 19.6457, 61.9048 },
{ 10.1219, 52.381 },
{ 5.36, 38.0952 },
{ 5.36, 28.5714 },
{ 10.1219, 14.2857 },
{ 19.6457, 4.7619 },
{ 29.1695, 0 },
{ 43.4552, 0 },
{ 52.979, 4.7619 },
{ 62.5029, 14.2857 },
};
static const StrokeRec char103[] = {
{ 7, char103_stroke0 },
{ 14, char103_stroke1 },
};
/* char: 104 'h' */
static const CoordRec char104_stroke0[] = {
{ 9.6, 100 },
{ 9.6, 0 },
};
static const CoordRec char104_stroke1[] = {
{ 9.6, 47.619 },
{ 23.8857, 61.9048 },
{ 33.4095, 66.6667 },
{ 47.6952, 66.6667 },
{ 57.219, 61.9048 },
{ 61.981, 47.619 },
{ 61.981, 0 },
};
static const StrokeRec char104[] = {
{ 2, char104_stroke0 },
{ 7, char104_stroke1 },
};
/* char: 105 'i' */
static const CoordRec char105_stroke0[] = {
{ 10.02, 100 },
{ 14.7819, 95.2381 },
{ 19.5438, 100 },
{ 14.7819, 104.762 },
{ 10.02, 100 },
};
static const CoordRec char105_stroke1[] = {
{ 14.7819, 66.6667 },
{ 14.7819, 0 },
};
static const StrokeRec char105[] = {
{ 5, char105_stroke0 },
{ 2, char105_stroke1 },
};
/* char: 106 'j' */
static const CoordRec char106_stroke0[] = {
{ 17.3876, 100 },
{ 22.1495, 95.2381 },
{ 26.9114, 100 },
{ 22.1495, 104.762 },
{ 17.3876, 100 },
};
static const CoordRec char106_stroke1[] = {
{ 22.1495, 66.6667 },
{ 22.1495, -14.2857 },
{ 17.3876, -28.5714 },
{ 7.8638, -33.3333 },
{ -1.66, -33.3333 },
};
static const StrokeRec char106[] = {
{ 5, char106_stroke0 },
{ 5, char106_stroke1 },
};
/* char: 107 'k' */
static const CoordRec char107_stroke0[] = {
{ 9.6, 100 },
{ 9.6, 0 },
};
static const CoordRec char107_stroke1[] = {
{ 57.219, 66.6667 },
{ 9.6, 19.0476 },
};
static const CoordRec char107_stroke2[] = {
{ 28.6476, 38.0952 },
{ 61.981, 0 },
};
static const StrokeRec char107[] = {
{ 2, char107_stroke0 },
{ 2, char107_stroke1 },
{ 2, char107_stroke2 },
};
/* char: 108 'l' */
static const CoordRec char108_stroke0[] = {
{ 10.02, 100 },
{ 10.02, 0 },
};
static const StrokeRec char108[] = {
{ 2, char108_stroke0 },
};
/* char: 109 'm' */
static const CoordRec char109_stroke0[] = {
{ 9.6, 66.6667 },
{ 9.6, 0 },
};
static const CoordRec char109_stroke1[] = {
{ 9.6, 47.619 },
{ 23.8857, 61.9048 },
{ 33.4095, 66.6667 },
{ 47.6952, 66.6667 },
{ 57.219, 61.9048 },
{ 61.981, 47.619 },
{ 61.981, 0 },
};
static const CoordRec char109_stroke2[] = {
{ 61.981, 47.619 },
{ 76.2667, 61.9048 },
{ 85.7905, 66.6667 },
{ 100.076, 66.6667 },
{ 109.6, 61.9048 },
{ 114.362, 47.619 },
{ 114.362, 0 },
};
static const StrokeRec char109[] = {
{ 2, char109_stroke0 },
{ 7, char109_stroke1 },
{ 7, char109_stroke2 },
};
/* char: 110 'n' */
static const CoordRec char110_stroke0[] = {
{ 9.18, 66.6667 },
{ 9.18, 0 },
};
static const CoordRec char110_stroke1[] = {
{ 9.18, 47.619 },
{ 23.4657, 61.9048 },
{ 32.9895, 66.6667 },
{ 47.2752, 66.6667 },
{ 56.799, 61.9048 },
{ 61.561, 47.619 },
{ 61.561, 0 },
};
static const StrokeRec char110[] = {
{ 2, char110_stroke0 },
{ 7, char110_stroke1 },
};
/* char: 111 'o' */
static const CoordRec char111_stroke0[] = {
{ 28.7895, 66.6667 },
{ 19.2657, 61.9048 },
{ 9.7419, 52.381 },
{ 4.98, 38.0952 },
{ 4.98, 28.5714 },
{ 9.7419, 14.2857 },
{ 19.2657, 4.7619 },
{ 28.7895, 0 },
{ 43.0752, 0 },
{ 52.599, 4.7619 },
{ 62.1229, 14.2857 },
{ 66.8848, 28.5714 },
{ 66.8848, 38.0952 },
{ 62.1229, 52.381 },
{ 52.599, 61.9048 },
{ 43.0752, 66.6667 },
{ 28.7895, 66.6667 },
};
static const StrokeRec char111[] = {
{ 17, char111_stroke0 },
};
/* char: 112 'p' */
static const CoordRec char112_stroke0[] = {
{ 9.46, 66.6667 },
{ 9.46, -33.3333 },
};
static const CoordRec char112_stroke1[] = {
{ 9.46, 52.381 },
{ 18.9838, 61.9048 },
{ 28.5076, 66.6667 },
{ 42.7933, 66.6667 },
{ 52.3171, 61.9048 },
{ 61.841, 52.381 },
{ 66.6029, 38.0952 },
{ 66.6029, 28.5714 },
{ 61.841, 14.2857 },
{ 52.3171, 4.7619 },
{ 42.7933, 0 },
{ 28.5076, 0 },
{ 18.9838, 4.7619 },
{ 9.46, 14.2857 },
};
static const StrokeRec char112[] = {
{ 2, char112_stroke0 },
{ 14, char112_stroke1 },
};
/* char: 113 'q' */
static const CoordRec char113_stroke0[] = {
{ 61.9829, 66.6667 },
{ 61.9829, -33.3333 },
};
static const CoordRec char113_stroke1[] = {
{ 61.9829, 52.381 },
{ 52.459, 61.9048 },
{ 42.9352, 66.6667 },
{ 28.6495, 66.6667 },
{ 19.1257, 61.9048 },
{ 9.6019, 52.381 },
{ 4.84, 38.0952 },
{ 4.84, 28.5714 },
{ 9.6019, 14.2857 },
{ 19.1257, 4.7619 },
{ 28.6495, 0 },
{ 42.9352, 0 },
{ 52.459, 4.7619 },
{ 61.9829, 14.2857 },
};
static const StrokeRec char113[] = {
{ 2, char113_stroke0 },
{ 14, char113_stroke1 },
};
/* char: 114 'r' */
static const CoordRec char114_stroke0[] = {
{ 9.46, 66.6667 },
{ 9.46, 0 },
};
static const CoordRec char114_stroke1[] = {
{ 9.46, 38.0952 },
{ 14.2219, 52.381 },
{ 23.7457, 61.9048 },
{ 33.2695, 66.6667 },
{ 47.5552, 66.6667 },
};
static const StrokeRec char114[] = {
{ 2, char114_stroke0 },
{ 5, char114_stroke1 },
};
/* char: 115 's' */
static const CoordRec char115_stroke0[] = {
{ 57.081, 52.381 },
{ 52.319, 61.9048 },
{ 38.0333, 66.6667 },
{ 23.7476, 66.6667 },
{ 9.4619, 61.9048 },
{ 4.7, 52.381 },
{ 9.4619, 42.8571 },
{ 18.9857, 38.0952 },
{ 42.7952, 33.3333 },
{ 52.319, 28.5714 },
{ 57.081, 19.0476 },
{ 57.081, 14.2857 },
{ 52.319, 4.7619 },
{ 38.0333, 0 },
{ 23.7476, 0 },
{ 9.4619, 4.7619 },
{ 4.7, 14.2857 },
};
static const StrokeRec char115[] = {
{ 17, char115_stroke0 },
};
/* char: 116 't' */
static const CoordRec char116_stroke0[] = {
{ 14.8257, 100 },
{ 14.8257, 19.0476 },
{ 19.5876, 4.7619 },
{ 29.1114, 0 },
{ 38.6352, 0 },
};
static const CoordRec char116_stroke1[] = {
{ 0.54, 66.6667 },
{ 33.8733, 66.6667 },
};
static const StrokeRec char116[] = {
{ 5, char116_stroke0 },
{ 2, char116_stroke1 },
};
/* char: 117 'u' */
static const CoordRec char117_stroke0[] = {
{ 9.46, 66.6667 },
{ 9.46, 19.0476 },
{ 14.2219, 4.7619 },
{ 23.7457, 0 },
{ 38.0314, 0 },
{ 47.5552, 4.7619 },
{ 61.841, 19.0476 },
};
static const CoordRec char117_stroke1[] = {
{ 61.841, 66.6667 },
{ 61.841, 0 },
};
static const StrokeRec char117[] = {
{ 7, char117_stroke0 },
{ 2, char117_stroke1 },
};
/* char: 118 'v' */
static const CoordRec char118_stroke0[] = {
{ 1.8, 66.6667 },
{ 30.3714, 0 },
};
static const CoordRec char118_stroke1[] = {
{ 58.9429, 66.6667 },
{ 30.3714, 0 },
};
static const StrokeRec char118[] = {
{ 2, char118_stroke0 },
{ 2, char118_stroke1 },
};
/* char: 119 'w' */
static const CoordRec char119_stroke0[] = {
{ 2.5, 66.6667 },
{ 21.5476, 0 },
};
static const CoordRec char119_stroke1[] = {
{ 40.5952, 66.6667 },
{ 21.5476, 0 },
};
static const CoordRec char119_stroke2[] = {
{ 40.5952, 66.6667 },
{ 59.6429, 0 },
};
static const CoordRec char119_stroke3[] = {
{ 78.6905, 66.6667 },
{ 59.6429, 0 },
};
static const StrokeRec char119[] = {
{ 2, char119_stroke0 },
{ 2, char119_stroke1 },
{ 2, char119_stroke2 },
{ 2, char119_stroke3 },
};
/* char: 120 'x' */
static const CoordRec char120_stroke0[] = {
{ 1.66, 66.6667 },
{ 54.041, 0 },
};
static const CoordRec char120_stroke1[] = {
{ 54.041, 66.6667 },
{ 1.66, 0 },
};
static const StrokeRec char120[] = {
{ 2, char120_stroke0 },
{ 2, char120_stroke1 },
};
/* char: 121 'y' */
static const CoordRec char121_stroke0[] = {
{ 6.5619, 66.6667 },
{ 35.1333, 0 },
};
static const CoordRec char121_stroke1[] = {
{ 63.7048, 66.6667 },
{ 35.1333, 0 },
{ 25.6095, -19.0476 },
{ 16.0857, -28.5714 },
{ 6.5619, -33.3333 },
{ 1.8, -33.3333 },
};
static const StrokeRec char121[] = {
{ 2, char121_stroke0 },
{ 6, char121_stroke1 },
};
/* char: 122 'z' */
static const CoordRec char122_stroke0[] = {
{ 56.821, 66.6667 },
{ 4.44, 0 },
};
static const CoordRec char122_stroke1[] = {
{ 4.44, 66.6667 },
{ 56.821, 66.6667 },
};
static const CoordRec char122_stroke2[] = {
{ 4.44, 0 },
{ 56.821, 0 },
};
static const StrokeRec char122[] = {
{ 2, char122_stroke0 },
{ 2, char122_stroke1 },
{ 2, char122_stroke2 },
};
/* char: 123 '{' */
static const CoordRec char123_stroke0[] = {
{ 31.1895, 119.048 },
{ 21.6657, 114.286 },
{ 16.9038, 109.524 },
{ 12.1419, 100 },
{ 12.1419, 90.4762 },
{ 16.9038, 80.9524 },
{ 21.6657, 76.1905 },
{ 26.4276, 66.6667 },
{ 26.4276, 57.1429 },
{ 16.9038, 47.619 },
};
static const CoordRec char123_stroke1[] = {
{ 21.6657, 114.286 },
{ 16.9038, 104.762 },
{ 16.9038, 95.2381 },
{ 21.6657, 85.7143 },
{ 26.4276, 80.9524 },
{ 31.1895, 71.4286 },
{ 31.1895, 61.9048 },
{ 26.4276, 52.381 },
{ 7.38, 42.8571 },
{ 26.4276, 33.3333 },
{ 31.1895, 23.8095 },
{ 31.1895, 14.2857 },
{ 26.4276, 4.7619 },
{ 21.6657, 0 },
{ 16.9038, -9.5238 },
{ 16.9038, -19.0476 },
{ 21.6657, -28.5714 },
};
static const CoordRec char123_stroke2[] = {
{ 16.9038, 38.0952 },
{ 26.4276, 28.5714 },
{ 26.4276, 19.0476 },
{ 21.6657, 9.5238 },
{ 16.9038, 4.7619 },
{ 12.1419, -4.7619 },
{ 12.1419, -14.2857 },
{ 16.9038, -23.8095 },
{ 21.6657, -28.5714 },
{ 31.1895, -33.3333 },
};
static const StrokeRec char123[] = {
{ 10, char123_stroke0 },
{ 17, char123_stroke1 },
{ 10, char123_stroke2 },
};
/* char: 124 '|' */
static const CoordRec char124_stroke0[] = {
{ 11.54, 119.048 },
{ 11.54, -33.3333 },
};
static const StrokeRec char124[] = {
{ 2, char124_stroke0 },
};
/* char: 125 '}' */
static const CoordRec char125_stroke0[] = {
{ 9.18, 119.048 },
{ 18.7038, 114.286 },
{ 23.4657, 109.524 },
{ 28.2276, 100 },
{ 28.2276, 90.4762 },
{ 23.4657, 80.9524 },
{ 18.7038, 76.1905 },
{ 13.9419, 66.6667 },
{ 13.9419, 57.1429 },
{ 23.4657, 47.619 },
};
static const CoordRec char125_stroke1[] = {
{ 18.7038, 114.286 },
{ 23.4657, 104.762 },
{ 23.4657, 95.2381 },
{ 18.7038, 85.7143 },
{ 13.9419, 80.9524 },
{ 9.18, 71.4286 },
{ 9.18, 61.9048 },
{ 13.9419, 52.381 },
{ 32.9895, 42.8571 },
{ 13.9419, 33.3333 },
{ 9.18, 23.8095 },
{ 9.18, 14.2857 },
{ 13.9419, 4.7619 },
{ 18.7038, 0 },
{ 23.4657, -9.5238 },
{ 23.4657, -19.0476 },
{ 18.7038, -28.5714 },
};
static const CoordRec char125_stroke2[] = {
{ 23.4657, 38.0952 },
{ 13.9419, 28.5714 },
{ 13.9419, 19.0476 },
{ 18.7038, 9.5238 },
{ 23.4657, 4.7619 },
{ 28.2276, -4.7619 },
{ 28.2276, -14.2857 },
{ 23.4657, -23.8095 },
{ 18.7038, -28.5714 },
{ 9.18, -33.3333 },
};
static const StrokeRec char125[] = {
{ 10, char125_stroke0 },
{ 17, char125_stroke1 },
{ 10, char125_stroke2 },
};
/* char: 126 '~' */
static const CoordRec char126_stroke0[] = {
{ 2.92, 28.5714 },
{ 2.92, 38.0952 },
{ 7.6819, 52.381 },
{ 17.2057, 57.1429 },
{ 26.7295, 57.1429 },
{ 36.2533, 52.381 },
{ 55.301, 38.0952 },
{ 64.8248, 33.3333 },
{ 74.3486, 33.3333 },
{ 83.8724, 38.0952 },
{ 88.6343, 47.619 },
};
static const CoordRec char126_stroke1[] = {
{ 2.92, 38.0952 },
{ 7.6819, 47.619 },
{ 17.2057, 52.381 },
{ 26.7295, 52.381 },
{ 36.2533, 47.619 },
{ 55.301, 33.3333 },
{ 64.8248, 28.5714 },
{ 74.3486, 28.5714 },
{ 83.8724, 33.3333 },
{ 88.6343, 47.619 },
{ 88.6343, 57.1429 },
};
static const StrokeRec char126[] = {
{ 11, char126_stroke0 },
{ 11, char126_stroke1 },
};
/* char: 127 */
static const CoordRec char127_stroke0[] = {
{ 52.381, 100 },
{ 14.2857, -33.3333 },
};
static const CoordRec char127_stroke1[] = {
{ 28.5714, 66.6667 },
{ 14.2857, 61.9048 },
{ 4.7619, 52.381 },
{ 0, 38.0952 },
{ 0, 23.8095 },
{ 4.7619, 14.2857 },
{ 14.2857, 4.7619 },
{ 28.5714, 0 },
{ 38.0952, 0 },
{ 52.381, 4.7619 },
{ 61.9048, 14.2857 },
{ 66.6667, 28.5714 },
{ 66.6667, 42.8571 },
{ 61.9048, 52.381 },
{ 52.381, 61.9048 },
{ 38.0952, 66.6667 },
{ 28.5714, 66.6667 },
};
static const StrokeRec char127[] = {
{ 2, char127_stroke0 },
{ 17, char127_stroke1 },
};
static const StrokeCharRec chars[] = {
{ 0, /* char0 */ 0, 0, 0 },
{ 0, /* char1 */ 0, 0, 0 },
{ 0, /* char2 */ 0, 0, 0 },
{ 0, /* char3 */ 0, 0, 0 },
{ 0, /* char4 */ 0, 0, 0 },
{ 0, /* char5 */ 0, 0, 0 },
{ 0, /* char6 */ 0, 0, 0 },
{ 0, /* char7 */ 0, 0, 0 },
{ 0, /* char8 */ 0, 0, 0 },
{ 0, /* char9 */ 0, 0, 0 },
{ 0, /* char10 */ 0, 0, 0 },
{ 0, /* char11 */ 0, 0, 0 },
{ 0, /* char12 */ 0, 0, 0 },
{ 0, /* char13 */ 0, 0, 0 },
{ 0, /* char14 */ 0, 0, 0 },
{ 0, /* char15 */ 0, 0, 0 },
{ 0, /* char16 */ 0, 0, 0 },
{ 0, /* char17 */ 0, 0, 0 },
{ 0, /* char18 */ 0, 0, 0 },
{ 0, /* char19 */ 0, 0, 0 },
{ 0, /* char20 */ 0, 0, 0 },
{ 0, /* char21 */ 0, 0, 0 },
{ 0, /* char22 */ 0, 0, 0 },
{ 0, /* char23 */ 0, 0, 0 },
{ 0, /* char24 */ 0, 0, 0 },
{ 0, /* char25 */ 0, 0, 0 },
{ 0, /* char26 */ 0, 0, 0 },
{ 0, /* char27 */ 0, 0, 0 },
{ 0, /* char28 */ 0, 0, 0 },
{ 0, /* char29 */ 0, 0, 0 },
{ 0, /* char30 */ 0, 0, 0 },
{ 0, /* char31 */ 0, 0, 0 },
{ 0, /* char32 */ 0, 52.381, 104.762 },
{ 2, char33, 13.3819, 26.6238 },
{ 2, char34, 23.0676, 51.4352 },
{ 4, char35, 36.5333, 79.4886 },
{ 3, char36, 38.1533, 76.2067 },
{ 3, char37, 49.2171, 96.5743 },
{ 1, char38, 53.599, 101.758 },
{ 1, char39, 4.44, 13.62 },
{ 1, char40, 21.8657, 47.1733 },
{ 1, char41, 24.3276, 47.5333 },
{ 3, char42, 30.7695, 59.439 },
{ 2, char43, 48.8371, 97.2543 },
{ 1, char44, 13.5219, 26.0638 },
{ 1, char45, 50.2371, 100.754 },
{ 1, char46, 13.1019, 26.4838 },
{ 1, char47, 40.5733, 82.1067 },
{ 1, char48, 38.3133, 77.0667 },
{ 1, char49, 30.8676, 66.5295 },
{ 1, char50, 38.7533, 77.6467 },
{ 1, char51, 38.3333, 77.0467 },
{ 2, char52, 37.2133, 80.1686 },
{ 1, char53, 38.1933, 77.6867 },
{ 1, char54, 34.1514, 73.8048 },
{ 2, char55, 38.8933, 77.2267 },
{ 1, char56, 38.9333, 77.6667 },
{ 1, char57, 39.9333, 74.0648 },
{ 2, char58, 14.0819, 26.2238 },
{ 2, char59, 12.9619, 26.3038 },
{ 1, char60, 41.1552, 81.6105 },
{ 2, char61, 48.5571, 97.2543 },
{ 1, char62, 40.8752, 81.6105 },
{ 2, char63, 36.9914, 73.9029 },
{ 2, char64, 34.9314, 74.3648 },
{ 3, char65, 40.5952, 80.4905 },
{ 3, char66, 44.7533, 83.6267 },
{ 1, char67, 39.9933, 84.4886 },
{ 2, char68, 45.2933, 85.2867 },
{ 4, char69, 39.9914, 78.1848 },
{ 3, char70, 39.9914, 78.7448 },
{ 2, char71, 40.3933, 89.7686 },
{ 3, char72, 44.7533, 89.0867 },
{ 1, char73, 10.86, 21.3 },
{ 1, char74, 31.0714, 59.999 },
{ 3, char75, 44.6133, 79.3267 },
{ 2, char76, 40.2514, 71.3229 },
{ 4, char77, 48.9552, 97.2105 },
{ 3, char78, 44.4733, 88.8067 },
{ 1, char79, 44.3352, 88.8305 },
{ 2, char80, 45.4333, 85.6667 },
{ 2, char81, 43.3952, 88.0905 },
{ 3, char82, 45.0133, 82.3667 },
{ 1, char83, 41.3333, 80.8267 },
{ 2, char84, 35.6933, 71.9467 },
{ 1, char85, 44.8733, 89.4867 },
{ 2, char86, 40.4552, 81.6105 },
{ 4, char87, 49.839, 100.518 },
{ 2, char88, 35.8333, 72.3667 },
{ 2, char89, 39.6152, 79.6505 },
{ 3, char90, 35.8333, 73.7467 },
{ 4, char91, 22.0657, 46.1133 },
{ 1, char92, 39.1733, 78.2067 },
{ 4, char93, 23.4876, 46.3933 },
{ 2, char94, 44.0752, 90.2305 },
{ 1, char95, 51.281, 104.062 },
{ 2, char96, 42.5457, 83.5714 },
{ 2, char97, 35.2514, 66.6029 },
{ 2, char98, 37.3314, 70.4629 },
{ 1, char99, 34.0914, 68.9229 },
{ 2, char100, 33.2114, 70.2629 },
{ 1, char101, 34.2914, 68.5229 },
{ 2, char102, 14.9657, 38.6552 },
{ 2, char103, 33.9314, 70.9829 },
{ 2, char104, 33.4095, 71.021 },
{ 2, char105, 14.7819, 28.8638 },
{ 2, char106, 17.3876, 36.2314 },
{ 3, char107, 33.4095, 62.521 },
{ 1, char108, 10.02, 19.34 },
{ 3, char109, 61.981, 123.962 },
{ 2, char110, 32.9895, 70.881 },
{ 1, char111, 33.5514, 71.7448 },
{ 2, char112, 38.0314, 70.8029 },
{ 2, char113, 33.4114, 70.7429 },
{ 2, char114, 23.7457, 49.4952 },
{ 1, char115, 28.5095, 62.321 },
{ 2, char116, 14.8257, 39.3152 },
{ 2, char117, 33.2695, 71.161 },
{ 2, char118, 30.3714, 60.6029 },
{ 4, char119, 40.5952, 80.4905 },
{ 2, char120, 25.4695, 56.401 },
{ 2, char121, 35.1333, 66.0648 },
{ 3, char122, 28.2495, 61.821 },
{ 3, char123, 21.6657, 41.6295 },
{ 1, char124, 11.54, 23.78 },
{ 3, char125, 18.7038, 41.4695 },
{ 2, char126, 45.7771, 91.2743 },
{ 2, char127, 33.3333, 66.6667 },
};
StrokeFontRec glutStrokeRoman = { "Roman", 128, chars, 119.048, -33.3333 };
/* Copyright (c) Mark J. Kilgard, 1994, 1997. */
/**
(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 <math.h>
#include "glutint.h"
/* Some <math.h> files do not define M_PI... */
#ifndef M_PI
#define M_PI 3.14159265358979323846
#endif
static GLUquadricObj *quadObj;
#define QUAD_OBJ_INIT() { if(!quadObj) initQuadObj(); }
static void
initQuadObj(void)
{
quadObj = gluNewQuadric();
if (!quadObj)
__glutFatalError("out of memory.");
}
/* CENTRY */
void GLUTAPIENTRY
glutWireSphere(GLdouble radius, GLint slices, GLint stacks)
{
QUAD_OBJ_INIT();
gluQuadricDrawStyle(quadObj, GLU_LINE);
gluQuadricNormals(quadObj, GLU_SMOOTH);
/* If we ever changed/used the texture or orientation state
of quadObj, we'd need to change it to the defaults here
with gluQuadricTexture and/or gluQuadricOrientation. */
gluSphere(quadObj, radius, slices, stacks);
}
void GLUTAPIENTRY
glutSolidSphere(GLdouble radius, GLint slices, GLint stacks)
{
QUAD_OBJ_INIT();
gluQuadricDrawStyle(quadObj, GLU_FILL);
gluQuadricNormals(quadObj, GLU_SMOOTH);
/* If we ever changed/used the texture or orientation state
of quadObj, we'd need to change it to the defaults here
with gluQuadricTexture and/or gluQuadricOrientation. */
gluSphere(quadObj, radius, slices, stacks);
}
void GLUTAPIENTRY
glutWireCone(GLdouble base, GLdouble height,
GLint slices, GLint stacks)
{
QUAD_OBJ_INIT();
gluQuadricDrawStyle(quadObj, GLU_LINE);
gluQuadricNormals(quadObj, GLU_SMOOTH);
/* If we ever changed/used the texture or orientation state
of quadObj, we'd need to change it to the defaults here
with gluQuadricTexture and/or gluQuadricOrientation. */
gluCylinder(quadObj, base, 0.0, height, slices, stacks);
}
void GLUTAPIENTRY
glutSolidCone(GLdouble base, GLdouble height,
GLint slices, GLint stacks)
{
QUAD_OBJ_INIT();
gluQuadricDrawStyle(quadObj, GLU_FILL);
gluQuadricNormals(quadObj, GLU_SMOOTH);
/* If we ever changed/used the texture or orientation state
of quadObj, we'd need to change it to the defaults here
with gluQuadricTexture and/or gluQuadricOrientation. */
gluCylinder(quadObj, base, 0.0, height, slices, stacks);
}
/* ENDCENTRY */
static void
drawBox(GLfloat size, GLenum type)
{
static GLfloat n[6][3] =
{
{-1.0, 0.0, 0.0},
{0.0, 1.0, 0.0},
{1.0, 0.0, 0.0},
{0.0, -1.0, 0.0},
{0.0, 0.0, 1.0},
{0.0, 0.0, -1.0}
};
static GLint faces[6][4] =
{
{0, 1, 2, 3},
{3, 2, 6, 7},
{7, 6, 5, 4},
{4, 5, 1, 0},
{5, 6, 2, 1},
{7, 4, 0, 3}
};
GLfloat v[8][3];
GLint i;
v[0][0] = v[1][0] = v[2][0] = v[3][0] = -size / 2;
v[4][0] = v[5][0] = v[6][0] = v[7][0] = size / 2;
v[0][1] = v[1][1] = v[4][1] = v[5][1] = -size / 2;
v[2][1] = v[3][1] = v[6][1] = v[7][1] = size / 2;
v[0][2] = v[3][2] = v[4][2] = v[7][2] = -size / 2;
v[1][2] = v[2][2] = v[5][2] = v[6][2] = size / 2;
for (i = 5; i >= 0; i--) {
glBegin(type);
glNormal3fv(&n[i][0]);
glVertex3fv(&v[faces[i][0]][0]);
glVertex3fv(&v[faces[i][1]][0]);
glVertex3fv(&v[faces[i][2]][0]);
glVertex3fv(&v[faces[i][3]][0]);
glEnd();
}
}
/* CENTRY */
void GLUTAPIENTRY
glutWireCube(GLdouble size)
{
drawBox(size, GL_LINE_LOOP);
}
void GLUTAPIENTRY
glutSolidCube(GLdouble size)
{
drawBox(size, GL_QUADS);
}
/* ENDCENTRY */
static void
doughnut(GLfloat r, GLfloat R, GLint nsides, GLint rings)
{
int i, j;
GLfloat theta, phi, theta1;
GLfloat cosTheta, sinTheta;
GLfloat cosTheta1, sinTheta1;
GLfloat ringDelta, sideDelta;
ringDelta = 2.0 * M_PI / rings;
sideDelta = 2.0 * M_PI / nsides;
theta = 0.0;
cosTheta = 1.0;
sinTheta = 0.0;
for (i = rings - 1; i >= 0; i--) {
theta1 = theta + ringDelta;
cosTheta1 = cos(theta1);
sinTheta1 = sin(theta1);
glBegin(GL_QUAD_STRIP);
phi = 0.0;
for (j = nsides; j >= 0; j--) {
GLfloat cosPhi, sinPhi, dist;
phi += sideDelta;
cosPhi = cos(phi);
sinPhi = sin(phi);
dist = R + r * cosPhi;
glNormal3f(cosTheta1 * cosPhi, -sinTheta1 * cosPhi, sinPhi);
glVertex3f(cosTheta1 * dist, -sinTheta1 * dist, r * sinPhi);
glNormal3f(cosTheta * cosPhi, -sinTheta * cosPhi, sinPhi);
glVertex3f(cosTheta * dist, -sinTheta * dist, r * sinPhi);
}
glEnd();
theta = theta1;
cosTheta = cosTheta1;
sinTheta = sinTheta1;
}
}
/* CENTRY */
void GLUTAPIENTRY
glutWireTorus(GLdouble innerRadius, GLdouble outerRadius,
GLint nsides, GLint rings)
{
glPushAttrib(GL_POLYGON_BIT);
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
doughnut(innerRadius, outerRadius, nsides, rings);
glPopAttrib();
}
void GLUTAPIENTRY
glutSolidTorus(GLdouble innerRadius, GLdouble outerRadius,
GLint nsides, GLint rings)
{
doughnut(innerRadius, outerRadius, nsides, rings);
}
/* ENDCENTRY */
static GLfloat dodec[20][3];
static void
initDodecahedron(void)
{
GLfloat alpha, beta;
alpha = sqrt(2.0 / (3.0 + sqrt(5.0)));
beta = 1.0 + sqrt(6.0 / (3.0 + sqrt(5.0)) -
2.0 + 2.0 * sqrt(2.0 / (3.0 + sqrt(5.0))));
/* *INDENT-OFF* */
dodec[0][0] = -alpha; dodec[0][1] = 0; dodec[0][2] = beta;
dodec[1][0] = alpha; dodec[1][1] = 0; dodec[1][2] = beta;
dodec[2][0] = -1; dodec[2][1] = -1; dodec[2][2] = -1;
dodec[3][0] = -1; dodec[3][1] = -1; dodec[3][2] = 1;
dodec[4][0] = -1; dodec[4][1] = 1; dodec[4][2] = -1;
dodec[5][0] = -1; dodec[5][1] = 1; dodec[5][2] = 1;
dodec[6][0] = 1; dodec[6][1] = -1; dodec[6][2] = -1;
dodec[7][0] = 1; dodec[7][1] = -1; dodec[7][2] = 1;
dodec[8][0] = 1; dodec[8][1] = 1; dodec[8][2] = -1;
dodec[9][0] = 1; dodec[9][1] = 1; dodec[9][2] = 1;
dodec[10][0] = beta; dodec[10][1] = alpha; dodec[10][2] = 0;
dodec[11][0] = beta; dodec[11][1] = -alpha; dodec[11][2] = 0;
dodec[12][0] = -beta; dodec[12][1] = alpha; dodec[12][2] = 0;
dodec[13][0] = -beta; dodec[13][1] = -alpha; dodec[13][2] = 0;
dodec[14][0] = -alpha; dodec[14][1] = 0; dodec[14][2] = -beta;
dodec[15][0] = alpha; dodec[15][1] = 0; dodec[15][2] = -beta;
dodec[16][0] = 0; dodec[16][1] = beta; dodec[16][2] = alpha;
dodec[17][0] = 0; dodec[17][1] = beta; dodec[17][2] = -alpha;
dodec[18][0] = 0; dodec[18][1] = -beta; dodec[18][2] = alpha;
dodec[19][0] = 0; dodec[19][1] = -beta; dodec[19][2] = -alpha;
/* *INDENT-ON* */
}
#define DIFF3(_a,_b,_c) { \
(_c)[0] = (_a)[0] - (_b)[0]; \
(_c)[1] = (_a)[1] - (_b)[1]; \
(_c)[2] = (_a)[2] - (_b)[2]; \
}
static void
crossprod(GLfloat v1[3], GLfloat v2[3], GLfloat prod[3])
{
GLfloat p[3]; /* in case prod == v1 or v2 */
p[0] = v1[1] * v2[2] - v2[1] * v1[2];
p[1] = v1[2] * v2[0] - v2[2] * v1[0];
p[2] = v1[0] * v2[1] - v2[0] * v1[1];
prod[0] = p[0];
prod[1] = p[1];
prod[2] = p[2];
}
static void
normalize(GLfloat v[3])
{
GLfloat d;
d = sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]);
if (d == 0.0) {
__glutWarning("normalize: zero length vector");
v[0] = d = 1.0;
}
d = 1 / d;
v[0] *= d;
v[1] *= d;
v[2] *= d;
}
static void
pentagon(int a, int b, int c, int d, int e, GLenum shadeType)
{
GLfloat n0[3], d1[3], d2[3];
DIFF3(dodec[a], dodec[b], d1);
DIFF3(dodec[b], dodec[c], d2);
crossprod(d1, d2, n0);
normalize(n0);
glBegin(shadeType);
glNormal3fv(n0);
glVertex3fv(&dodec[a][0]);
glVertex3fv(&dodec[b][0]);
glVertex3fv(&dodec[c][0]);
glVertex3fv(&dodec[d][0]);
glVertex3fv(&dodec[e][0]);
glEnd();
}
static void
dodecahedron(GLenum type)
{
static int inited = 0;
if (inited == 0) {
inited = 1;
initDodecahedron();
}
pentagon(0, 1, 9, 16, 5, type);
pentagon(1, 0, 3, 18, 7, type);
pentagon(1, 7, 11, 10, 9, type);
pentagon(11, 7, 18, 19, 6, type);
pentagon(8, 17, 16, 9, 10, type);
pentagon(2, 14, 15, 6, 19, type);
pentagon(2, 13, 12, 4, 14, type);
pentagon(2, 19, 18, 3, 13, type);
pentagon(3, 0, 5, 12, 13, type);
pentagon(6, 15, 8, 10, 11, type);
pentagon(4, 17, 8, 15, 14, type);
pentagon(4, 12, 5, 16, 17, type);
}
/* CENTRY */
void GLUTAPIENTRY
glutWireDodecahedron(void)
{
dodecahedron(GL_LINE_LOOP);
}
void GLUTAPIENTRY
glutSolidDodecahedron(void)
{
dodecahedron(GL_TRIANGLE_FAN);
}
/* ENDCENTRY */
static void
recorditem(GLfloat * n1, GLfloat * n2, GLfloat * n3,
GLenum shadeType)
{
GLfloat q0[3], q1[3];
DIFF3(n1, n2, q0);
DIFF3(n2, n3, q1);
crossprod(q0, q1, q1);
normalize(q1);
glBegin(shadeType);
glNormal3fv(q1);
glVertex3fv(n1);
glVertex3fv(n2);
glVertex3fv(n3);
glEnd();
}
static void
subdivide(GLfloat * v0, GLfloat * v1, GLfloat * v2,
GLenum shadeType)
{
int depth;
GLfloat w0[3], w1[3], w2[3];
GLfloat l;
int i, j, k, n;
depth = 1;
for (i = 0; i < depth; i++) {
for (j = 0; i + j < depth; j++) {
k = depth - i - j;
for (n = 0; n < 3; n++) {
w0[n] = (i * v0[n] + j * v1[n] + k * v2[n]) / depth;
w1[n] = ((i + 1) * v0[n] + j * v1[n] + (k - 1) * v2[n])
/ depth;
w2[n] = (i * v0[n] + (j + 1) * v1[n] + (k - 1) * v2[n])
/ depth;
}
l = sqrt(w0[0] * w0[0] + w0[1] * w0[1] + w0[2] * w0[2]);
w0[0] /= l;
w0[1] /= l;
w0[2] /= l;
l = sqrt(w1[0] * w1[0] + w1[1] * w1[1] + w1[2] * w1[2]);
w1[0] /= l;
w1[1] /= l;
w1[2] /= l;
l = sqrt(w2[0] * w2[0] + w2[1] * w2[1] + w2[2] * w2[2]);
w2[0] /= l;
w2[1] /= l;
w2[2] /= l;
recorditem(w1, w0, w2, shadeType);
}
}
}
static void
drawtriangle(int i, GLfloat data[][3], int ndx[][3],
GLenum shadeType)
{
GLfloat *x0, *x1, *x2;
x0 = data[ndx[i][0]];
x1 = data[ndx[i][1]];
x2 = data[ndx[i][2]];
subdivide(x0, x1, x2, shadeType);
}
/* octahedron data: The octahedron produced is centered at the
origin and has radius 1.0 */
static GLfloat odata[6][3] =
{
{1.0, 0.0, 0.0},
{-1.0, 0.0, 0.0},
{0.0, 1.0, 0.0},
{0.0, -1.0, 0.0},
{0.0, 0.0, 1.0},
{0.0, 0.0, -1.0}
};
static int ondex[8][3] =
{
{0, 4, 2},
{1, 2, 4},
{0, 3, 4},
{1, 4, 3},
{0, 2, 5},
{1, 5, 2},
{0, 5, 3},
{1, 3, 5}
};
static void
octahedron(GLenum shadeType)
{
int i;
for (i = 7; i >= 0; i--) {
drawtriangle(i, odata, ondex, shadeType);
}
}
/* CENTRY */
void GLUTAPIENTRY
glutWireOctahedron(void)
{
octahedron(GL_LINE_LOOP);
}
void GLUTAPIENTRY
glutSolidOctahedron(void)
{
octahedron(GL_TRIANGLES);
}
/* ENDCENTRY */
/* icosahedron data: These numbers are rigged to make an
icosahedron of radius 1.0 */
#define X .525731112119133606
#define Z .850650808352039932
static GLfloat idata[12][3] =
{
{-X, 0, Z},
{X, 0, Z},
{-X, 0, -Z},
{X, 0, -Z},
{0, Z, X},
{0, Z, -X},
{0, -Z, X},
{0, -Z, -X},
{Z, X, 0},
{-Z, X, 0},
{Z, -X, 0},
{-Z, -X, 0}
};
static int index[20][3] =
{
{0, 4, 1},
{0, 9, 4},
{9, 5, 4},
{4, 5, 8},
{4, 8, 1},
{8, 10, 1},
{8, 3, 10},
{5, 3, 8},
{5, 2, 3},
{2, 7, 3},
{7, 10, 3},
{7, 6, 10},
{7, 11, 6},
{11, 0, 6},
{0, 1, 6},
{6, 1, 10},
{9, 0, 11},
{9, 11, 2},
{9, 2, 5},
{7, 2, 11},
};
static void
icosahedron(GLenum shadeType)
{
int i;
for (i = 19; i >= 0; i--) {
drawtriangle(i, idata, index, shadeType);
}
}
/* CENTRY */
void GLUTAPIENTRY
glutWireIcosahedron(void)
{
icosahedron(GL_LINE_LOOP);
}
void GLUTAPIENTRY
glutSolidIcosahedron(void)
{
icosahedron(GL_TRIANGLES);
}
/* ENDCENTRY */
/* tetrahedron data: */
#define T 1.73205080756887729
static GLfloat tdata[4][3] =
{
{T, T, T},
{T, -T, -T},
{-T, T, -T},
{-T, -T, T}
};
static int tndex[4][3] =
{
{0, 1, 3},
{2, 1, 0},
{3, 2, 0},
{1, 2, 3}
};
static void
tetrahedron(GLenum shadeType)
{
int i;
for (i = 3; i >= 0; i--)
drawtriangle(i, tdata, tndex, shadeType);
}
/* CENTRY */
void GLUTAPIENTRY
glutWireTetrahedron(void)
{
tetrahedron(GL_LINE_LOOP);
}
void GLUTAPIENTRY
glutSolidTetrahedron(void)
{
tetrahedron(GL_TRIANGLES);
}
/* ENDCENTRY */
/* Copyright (c) Mark J. Kilgard, 1994. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#include "glutint.h"
void GLUTAPIENTRY
glutSpaceballMotionFunc(GLUTspaceMotionCB spaceMotionFunc)
{
__glutCurrentWindow->spaceMotion = spaceMotionFunc;
__glutUpdateInputDeviceMaskFunc = __glutUpdateInputDeviceMask;
__glutPutOnWorkList(__glutCurrentWindow,
GLUT_DEVICE_MASK_WORK);
}
void GLUTAPIENTRY
glutSpaceballRotateFunc(GLUTspaceRotateCB spaceRotateFunc)
{
__glutCurrentWindow->spaceRotate = spaceRotateFunc;
__glutUpdateInputDeviceMaskFunc = __glutUpdateInputDeviceMask;
__glutPutOnWorkList(__glutCurrentWindow,
GLUT_DEVICE_MASK_WORK);
}
void GLUTAPIENTRY
glutSpaceballButtonFunc(GLUTspaceButtonCB spaceButtonFunc)
{
__glutCurrentWindow->spaceButton = spaceButtonFunc;
__glutUpdateInputDeviceMaskFunc = __glutUpdateInputDeviceMask;
__glutPutOnWorkList(__glutCurrentWindow,
GLUT_DEVICE_MASK_WORK);
}
/* Copyright (c) Mark J. Kilgard, 1994. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#include "glutint.h"
#include "glutstroke.h"
void GLUTAPIENTRY
glutStrokeCharacter(GLUTstrokeFont font, int c)
{
const StrokeCharRec *ch;
const StrokeRec *stroke;
const CoordRec *coord;
StrokeFontPtr fontinfo;
int i, j;
#if defined(_WIN32) || defined(GLUT_IMPORT_LIB)
fontinfo = (StrokeFontPtr) __glutFont(font);
#else
fontinfo = (StrokeFontPtr) font;
#endif
if (c < 0 || c >= fontinfo->num_chars)
return;
ch = &(fontinfo->ch[c]);
if (ch) {
for (i = ch->num_strokes, stroke = ch->stroke;
i > 0; i--, stroke++) {
glBegin(GL_LINE_STRIP);
for (j = stroke->num_coords, coord = stroke->coord;
j > 0; j--, coord++) {
glVertex2f(coord->x, coord->y);
}
glEnd();
}
glTranslatef(ch->right, 0.0, 0.0);
}
}
#ifndef __glutstroke_h__
#define __glutstroke_h__
/* Copyright (c) Mark J. Kilgard, 1994. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#if defined(_WIN32)
#pragma warning (disable:4244) /* disable bogus conversion warnings */
#pragma warning (disable:4305) /* VC++ 5.0 version of above warning. */
#endif
typedef struct {
float x;
float y;
} CoordRec, *CoordPtr;
typedef struct {
int num_coords;
const CoordRec *coord;
} StrokeRec, *StrokePtr;
typedef struct {
int num_strokes;
const StrokeRec *stroke;
float center;
float right;
} StrokeCharRec, *StrokeCharPtr;
typedef struct {
const char *name;
int num_chars;
const StrokeCharRec *ch;
float top;
float bottom;
} StrokeFontRec, *StrokeFontPtr;
typedef void *GLUTstrokeFont;
#endif /* __glutstroke_h__ */
/* Copyright (c) Mark J. Kilgard, 1995. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#include "glutint.h"
#include "glutstroke.h"
/* CENTRY */
int GLUTAPIENTRY
glutStrokeWidth(GLUTstrokeFont font, int c)
{
StrokeFontPtr fontinfo;
const StrokeCharRec *ch;
#if defined(_WIN32) || defined(GLUT_IMPORT_LIB)
fontinfo = (StrokeFontPtr) __glutFont(font);
#else
fontinfo = (StrokeFontPtr) font;
#endif
if (c < 0 || c >= fontinfo->num_chars)
return 0;
ch = &(fontinfo->ch[c]);
if (ch)
return ch->right;
else
return 0;
}
int GLUTAPIENTRY
glutStrokeLength(GLUTstrokeFont font, const unsigned char *string)
{
int c, length;
StrokeFontPtr fontinfo;
const StrokeCharRec *ch;
#if defined(_WIN32) || defined(GLUT_IMPORT_LIB)
fontinfo = (StrokeFontPtr) __glutFont(font);
#else
fontinfo = (StrokeFontPtr) font;
#endif
length = 0;
for (; *string != '\0'; string++) {
c = *string;
if (c >= 0 && c < fontinfo->num_chars) {
ch = &(fontinfo->ch[c]);
if (ch)
length += ch->right;
}
}
return length;
}
/* ENDCENTRY */
/* Copyright (c) Mark J. Kilgard, 1994. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#include <stdlib.h>
#include "glutint.h"
void GLUTAPIENTRY
glutTabletMotionFunc(GLUTtabletMotionCB tabletMotionFunc)
{
__glutCurrentWindow->tabletMotion = tabletMotionFunc;
__glutUpdateInputDeviceMaskFunc = __glutUpdateInputDeviceMask;
__glutPutOnWorkList(__glutCurrentWindow,
GLUT_DEVICE_MASK_WORK);
/* If deinstalling callback, invalidate tablet position. */
if (tabletMotionFunc == NULL) {
__glutCurrentWindow->tabletPos[0] = -1;
__glutCurrentWindow->tabletPos[1] = -1;
}
}
void GLUTAPIENTRY
glutTabletButtonFunc(GLUTtabletButtonCB tabletButtonFunc)
{
__glutCurrentWindow->tabletButton = tabletButtonFunc;
__glutUpdateInputDeviceMaskFunc = __glutUpdateInputDeviceMask;
__glutPutOnWorkList(__glutCurrentWindow,
GLUT_DEVICE_MASK_WORK);
}
/* Copyright (c) Mark J. Kilgard, 1994. */
/**
(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 "glutint.h"
/* 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] =
{
/* rim */
{102, 103, 104, 105, 4, 5, 6, 7, 8, 9, 10, 11,
12, 13, 14, 15},
/* body */
{12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
24, 25, 26, 27},
{24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36,
37, 38, 39, 40},
/* lid */
{96, 96, 96, 96, 97, 98, 99, 100, 101, 101, 101,
101, 0, 1, 2, 3,},
{0, 1, 2, 3, 106, 107, 108, 109, 110, 111, 112,
113, 114, 115, 116, 117},
/* bottom */
{118, 118, 118, 118, 124, 122, 119, 121, 123, 126,
125, 120, 40, 39, 38, 37},
/* handle */
{41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
53, 54, 55, 56},
{53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
28, 65, 66, 67},
/* spout */
{68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
80, 81, 82, 83},
{80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
92, 93, 94, 95}
};
/* *INDENT-OFF* */
static float 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 float tex[2][2][2] =
{
{ {0, 0},
{1, 0}},
{ {0, 1},
{1, 1}}
};
/* *INDENT-ON* */
static void
teapot(GLint grid, GLdouble scale, GLenum type)
{
float p[4][4][3], q[4][4][3], r[4][4][3], s[4][4][3];
long i, j, k, l;
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();
glRotatef(270.0, 1.0, 0.0, 0.0);
glScalef(0.5 * scale, 0.5 * scale, 0.5 * scale);
glTranslatef(0.0, 0.0, -1.5);
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;
}
}
}
}
glMap2f(GL_MAP2_TEXTURE_COORD_2, 0, 1, 2, 2, 0, 1, 4, 2,
&tex[0][0][0]);
glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4,
&p[0][0][0]);
glMapGrid2f(grid, 0.0, 1.0, grid, 0.0, 1.0);
glEvalMesh2(type, 0, grid, 0, grid);
glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4,
&q[0][0][0]);
glEvalMesh2(type, 0, grid, 0, grid);
if (i < 6) {
glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4,
&r[0][0][0]);
glEvalMesh2(type, 0, grid, 0, grid);
glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4,
&s[0][0][0]);
glEvalMesh2(type, 0, grid, 0, grid);
}
}
glPopMatrix();
glPopAttrib();
}
/* CENTRY */
void GLUTAPIENTRY
glutSolidTeapot(GLdouble scale)
{
teapot(7, scale, GL_FILL);
}
void GLUTAPIENTRY
glutWireTeapot(GLdouble scale)
{
teapot(10, scale, GL_LINE);
}
/* ENDCENTRY */
/* GENERATED FILE -- DO NOT MODIFY */
#define glutBitmapTimesRoman10 XXX
#include "glutbitmap.h"
#undef glutBitmapTimesRoman10
/* char: 0xff */
static const GLubyte ch255data[] = {
0x80,0xc0,0x40,0x60,0xa0,0x90,0xb8,0x0,0xa0,
};
static const BitmapCharRec ch255 = {5,9,0,2,5,ch255data};
/* char: 0xfe */
static const GLubyte ch254data[] = {
0xc0,0x80,0xe0,0x90,0x90,0x90,0xe0,0x80,0x80,
};
static const BitmapCharRec ch254 = {4,9,0,2,5,ch254data};
/* char: 0xfd */
static const GLubyte ch253data[] = {
0x80,0xc0,0x40,0x60,0xa0,0x90,0xb8,0x0,0x20,0x10,
};
static const BitmapCharRec ch253 = {5,10,0,2,5,ch253data};
/* char: 0xfc */
static const GLubyte ch252data[] = {
0x68,0x90,0x90,0x90,0x90,0x0,0x50,
};
static const BitmapCharRec ch252 = {5,7,0,0,5,ch252data};
/* char: 0xfb */
static const GLubyte ch251data[] = {
0x68,0x90,0x90,0x90,0x90,0x0,0x50,0x20,
};
static const BitmapCharRec ch251 = {5,8,0,0,5,ch251data};
/* char: 0xfa */
static const GLubyte ch250data[] = {
0x68,0x90,0x90,0x90,0x90,0x0,0x40,0x20,
};
static const BitmapCharRec ch250 = {5,8,0,0,5,ch250data};
/* char: 0xf9 */
static const GLubyte ch249data[] = {
0x68,0x90,0x90,0x90,0x90,0x0,0x20,0x40,
};
static const BitmapCharRec ch249 = {5,8,0,0,5,ch249data};
/* char: 0xf8 */
static const GLubyte ch248data[] = {
0x80,0x70,0x48,0x48,0x48,0x38,0x4,
};
static const BitmapCharRec ch248 = {6,7,1,1,5,ch248data};
/* char: 0xf7 */
static const GLubyte ch247data[] = {
0x20,0x0,0xf8,0x0,0x20,
};
static const BitmapCharRec ch247 = {5,5,0,0,6,ch247data};
/* char: 0xf6 */
static const GLubyte ch246data[] = {
0x60,0x90,0x90,0x90,0x60,0x0,0xa0,
};
static const BitmapCharRec ch246 = {4,7,0,0,5,ch246data};
/* char: 0xf5 */
static const GLubyte ch245data[] = {
0x60,0x90,0x90,0x90,0x60,0x0,0xa0,0x50,
};
static const BitmapCharRec ch245 = {4,8,0,0,5,ch245data};
/* char: 0xf4 */
static const GLubyte ch244data[] = {
0x60,0x90,0x90,0x90,0x60,0x0,0xa0,0x40,
};
static const BitmapCharRec ch244 = {4,8,0,0,5,ch244data};
/* char: 0xf3 */
static const GLubyte ch243data[] = {
0x60,0x90,0x90,0x90,0x60,0x0,0x40,0x20,
};
static const BitmapCharRec ch243 = {4,8,0,0,5,ch243data};
/* char: 0xf2 */
static const GLubyte ch242data[] = {
0x60,0x90,0x90,0x90,0x60,0x0,0x20,0x40,
};
static const BitmapCharRec ch242 = {4,8,0,0,5,ch242data};
/* char: 0xf1 */
static const GLubyte ch241data[] = {
0xd8,0x90,0x90,0x90,0xe0,0x0,0xa0,0x50,
};
static const BitmapCharRec ch241 = {5,8,0,0,5,ch241data};
/* char: 0xf0 */
static const GLubyte ch240data[] = {
0x60,0x90,0x90,0x90,0x70,0xa0,0x70,0x40,
};
static const BitmapCharRec ch240 = {4,8,0,0,5,ch240data};
/* char: 0xef */
static const GLubyte ch239data[] = {
0xe0,0x40,0x40,0x40,0xc0,0x0,0xa0,
};
static const BitmapCharRec ch239 = {3,7,0,0,4,ch239data};
/* char: 0xee */
static const GLubyte ch238data[] = {
0xe0,0x40,0x40,0x40,0xc0,0x0,0xa0,0x40,
};
static const BitmapCharRec ch238 = {3,8,0,0,4,ch238data};
/* char: 0xed */
static const GLubyte ch237data[] = {
0xe0,0x40,0x40,0x40,0xc0,0x0,0x40,0x20,
};
static const BitmapCharRec ch237 = {3,8,0,0,4,ch237data};
/* char: 0xec */
static const GLubyte ch236data[] = {
0xe0,0x40,0x40,0x40,0xc0,0x0,0x40,0x80,
};
static const BitmapCharRec ch236 = {3,8,0,0,4,ch236data};
/* char: 0xeb */
static const GLubyte ch235data[] = {
0x60,0x80,0xc0,0xa0,0x60,0x0,0xa0,
};
static const BitmapCharRec ch235 = {3,7,0,0,4,ch235data};
/* char: 0xea */
static const GLubyte ch234data[] = {
0x60,0x80,0xc0,0xa0,0x60,0x0,0xa0,0x40,
};
static const BitmapCharRec ch234 = {3,8,0,0,4,ch234data};
/* char: 0xe9 */
static const GLubyte ch233data[] = {
0x60,0x80,0xc0,0xa0,0x60,0x0,0x40,0x20,
};
static const BitmapCharRec ch233 = {3,8,0,0,4,ch233data};
/* char: 0xe8 */
static const GLubyte ch232data[] = {
0x60,0x80,0xc0,0xa0,0x60,0x0,0x40,0x80,
};
static const BitmapCharRec ch232 = {3,8,0,0,4,ch232data};
/* char: 0xe7 */
static const GLubyte ch231data[] = {
0xc0,0x20,0x40,0x60,0x80,0x80,0x80,0x60,
};
static const BitmapCharRec ch231 = {3,8,0,3,4,ch231data};
/* char: 0xe6 */
static const GLubyte ch230data[] = {
0xd8,0xa0,0x70,0x28,0xd8,
};
static const BitmapCharRec ch230 = {5,5,0,0,6,ch230data};
/* char: 0xe5 */
static const GLubyte ch229data[] = {
0xe0,0xa0,0x60,0x20,0xc0,0x40,0xa0,0x40,
};
static const BitmapCharRec ch229 = {3,8,0,0,4,ch229data};
/* char: 0xe4 */
static const GLubyte ch228data[] = {
0xe0,0xa0,0x60,0x20,0xc0,0x0,0xa0,
};
static const BitmapCharRec ch228 = {3,7,0,0,4,ch228data};
/* char: 0xe3 */
static const GLubyte ch227data[] = {
0xe0,0xa0,0x60,0x20,0xc0,0x0,0xa0,0x50,
};
static const BitmapCharRec ch227 = {4,8,0,0,4,ch227data};
/* char: 0xe2 */
static const GLubyte ch226data[] = {
0xe0,0xa0,0x60,0x20,0xc0,0x0,0xa0,0x40,
};
static const BitmapCharRec ch226 = {3,8,0,0,4,ch226data};
/* char: 0xe1 */
static const GLubyte ch225data[] = {
0xe0,0xa0,0x60,0x20,0xc0,0x0,0x40,0x20,
};
static const BitmapCharRec ch225 = {3,8,0,0,4,ch225data};
/* char: 0xe0 */
static const GLubyte ch224data[] = {
0xe0,0xa0,0x60,0x20,0xc0,0x0,0x40,0x80,
};
static const BitmapCharRec ch224 = {3,8,0,0,4,ch224data};
/* char: 0xdf */
static const GLubyte ch223data[] = {
0xe0,0x50,0x50,0x60,0x50,0x50,0x20,
};
static const BitmapCharRec ch223 = {4,7,0,0,5,ch223data};
/* char: 0xde */
static const GLubyte ch222data[] = {
0xe0,0x40,0x70,0x48,0x70,0x40,0xe0,
};
static const BitmapCharRec ch222 = {5,7,0,0,6,ch222data};
/* char: 0xdd */
static const GLubyte ch221data[] = {
0x38,0x10,0x10,0x28,0x28,0x44,0xee,0x0,0x10,0x8,
};
static const BitmapCharRec ch221 = {7,10,0,0,8,ch221data};
/* char: 0xdc */
static const GLubyte ch220data[] = {
0x38,0x6c,0x44,0x44,0x44,0x44,0xee,0x0,0x28,
};
static const BitmapCharRec ch220 = {7,9,0,0,8,ch220data};
/* char: 0xdb */
static const GLubyte ch219data[] = {
0x38,0x6c,0x44,0x44,0x44,0x44,0xee,0x0,0x28,0x10,
};
static const BitmapCharRec ch219 = {7,10,0,0,8,ch219data};
/* char: 0xda */
static const GLubyte ch218data[] = {
0x38,0x6c,0x44,0x44,0x44,0x44,0xee,0x0,0x10,0x8,
};
static const BitmapCharRec ch218 = {7,10,0,0,8,ch218data};
/* char: 0xd9 */
static const GLubyte ch217data[] = {
0x38,0x6c,0x44,0x44,0x44,0x44,0xee,0x0,0x10,0x20,
};
static const BitmapCharRec ch217 = {7,10,0,0,8,ch217data};
/* char: 0xd8 */
static const GLubyte ch216data[] = {
0x80,0x7c,0x66,0x52,0x52,0x4a,0x66,0x3e,0x1,
};
static const BitmapCharRec ch216 = {8,9,0,1,8,ch216data};
/* char: 0xd7 */
static const GLubyte ch215data[] = {
0x88,0x50,0x20,0x50,0x88,
};
static const BitmapCharRec ch215 = {5,5,0,0,6,ch215data};
/* char: 0xd6 */
static const GLubyte ch214data[] = {
0x78,0xcc,0x84,0x84,0x84,0xcc,0x78,0x0,0x50,
};
static const BitmapCharRec ch214 = {6,9,0,0,7,ch214data};
/* char: 0xd5 */
static const GLubyte ch213data[] = {
0x78,0xcc,0x84,0x84,0x84,0xcc,0x78,0x0,0x50,0x28,
};
static const BitmapCharRec ch213 = {6,10,0,0,7,ch213data};
/* char: 0xd4 */
static const GLubyte ch212data[] = {
0x78,0xcc,0x84,0x84,0x84,0xcc,0x78,0x0,0x50,0x20,
};
static const BitmapCharRec ch212 = {6,10,0,0,7,ch212data};
/* char: 0xd3 */
static const GLubyte ch211data[] = {
0x78,0xcc,0x84,0x84,0x84,0xcc,0x78,0x0,0x10,0x8,
};
static const BitmapCharRec ch211 = {6,10,0,0,7,ch211data};
/* char: 0xd2 */
static const GLubyte ch210data[] = {
0x78,0xcc,0x84,0x84,0x84,0xcc,0x78,0x0,0x20,0x40,
};
static const BitmapCharRec ch210 = {6,10,0,0,7,ch210data};
/* char: 0xd1 */
static const GLubyte ch209data[] = {
0xe4,0x4c,0x4c,0x54,0x54,0x64,0xee,0x0,0x50,0x28,
};
static const BitmapCharRec ch209 = {7,10,0,0,8,ch209data};
/* char: 0xd0 */
static const GLubyte ch208data[] = {
0xf8,0x4c,0x44,0xe4,0x44,0x4c,0xf8,
};
static const BitmapCharRec ch208 = {6,7,0,0,7,ch208data};
/* char: 0xcf */
static const GLubyte ch207data[] = {
0xe0,0x40,0x40,0x40,0x40,0x40,0xe0,0x0,0xa0,
};
static const BitmapCharRec ch207 = {3,9,0,0,4,ch207data};
/* char: 0xce */
static const GLubyte ch206data[] = {
0xe0,0x40,0x40,0x40,0x40,0x40,0xe0,0x0,0xa0,0x40,
};
static const BitmapCharRec ch206 = {3,10,0,0,4,ch206data};
/* char: 0xcd */
static const GLubyte ch205data[] = {
0xe0,0x40,0x40,0x40,0x40,0x40,0xe0,0x0,0x40,0x20,
};
static const BitmapCharRec ch205 = {3,10,0,0,4,ch205data};
/* char: 0xcc */
static const GLubyte ch204data[] = {
0xe0,0x40,0x40,0x40,0x40,0x40,0xe0,0x0,0x40,0x80,
};
static const BitmapCharRec ch204 = {3,10,0,0,4,ch204data};
/* char: 0xcb */
static const GLubyte ch203data[] = {
0xf8,0x48,0x40,0x70,0x40,0x48,0xf8,0x0,0x50,
};
static const BitmapCharRec ch203 = {5,9,0,0,6,ch203data};
/* char: 0xca */
static const GLubyte ch202data[] = {
0xf8,0x48,0x40,0x70,0x40,0x48,0xf8,0x0,0x50,0x20,
};
static const BitmapCharRec ch202 = {5,10,0,0,6,ch202data};
/* char: 0xc9 */
static const GLubyte ch201data[] = {
0xf8,0x48,0x40,0x70,0x40,0x48,0xf8,0x0,0x20,0x10,
};
static const BitmapCharRec ch201 = {5,10,0,0,6,ch201data};
/* char: 0xc8 */
static const GLubyte ch200data[] = {
0xf8,0x48,0x40,0x70,0x40,0x48,0xf8,0x0,0x20,0x40,
};
static const BitmapCharRec ch200 = {5,10,0,0,6,ch200data};
/* char: 0xc7 */
static const GLubyte ch199data[] = {
0x60,0x10,0x20,0x78,0xc4,0x80,0x80,0x80,0xc4,0x7c,
};
static const BitmapCharRec ch199 = {6,10,0,3,7,ch199data};
/* char: 0xc6 */
static const GLubyte ch198data[] = {
0xef,0x49,0x78,0x2e,0x28,0x39,0x1f,
};
static const BitmapCharRec ch198 = {8,7,0,0,9,ch198data};
/* char: 0xc5 */
static const GLubyte ch197data[] = {
0xee,0x44,0x7c,0x28,0x28,0x38,0x10,0x10,0x28,0x10,
};
static const BitmapCharRec ch197 = {7,10,0,0,8,ch197data};
/* char: 0xc4 */
static const GLubyte ch196data[] = {
0xee,0x44,0x7c,0x28,0x28,0x38,0x10,0x0,0x28,
};
static const BitmapCharRec ch196 = {7,9,0,0,8,ch196data};
/* char: 0xc3 */
static const GLubyte ch195data[] = {
0xee,0x44,0x7c,0x28,0x28,0x38,0x10,0x0,0x28,0x14,
};
static const BitmapCharRec ch195 = {7,10,0,0,8,ch195data};
/* char: 0xc2 */
static const GLubyte ch194data[] = {
0xee,0x44,0x7c,0x28,0x28,0x38,0x10,0x0,0x28,0x10,
};
static const BitmapCharRec ch194 = {7,10,0,0,8,ch194data};
/* char: 0xc1 */
static const GLubyte ch193data[] = {
0xee,0x44,0x7c,0x28,0x28,0x38,0x10,0x0,0x10,0x8,
};
static const BitmapCharRec ch193 = {7,10,0,0,8,ch193data};
/* char: 0xc0 */
static const GLubyte ch192data[] = {
0xee,0x44,0x7c,0x28,0x28,0x38,0x10,0x0,0x10,0x20,
};
static const BitmapCharRec ch192 = {7,10,0,0,8,ch192data};
/* char: 0xbf */
static const GLubyte ch191data[] = {
0xe0,0xa0,0x80,0x40,0x40,0x0,0x40,
};
static const BitmapCharRec ch191 = {3,7,0,2,4,ch191data};
/* char: 0xbe */
static const GLubyte ch190data[] = {
0x44,0x3e,0x2c,0xd4,0x28,0x48,0xe4,
};
static const BitmapCharRec ch190 = {7,7,0,0,8,ch190data};
/* char: 0xbd */
static const GLubyte ch189data[] = {
0x4e,0x24,0x2a,0xf6,0x48,0xc8,0x44,
};
static const BitmapCharRec ch189 = {7,7,0,0,8,ch189data};
/* char: 0xbc */
static const GLubyte ch188data[] = {
0x44,0x3e,0x2c,0xf4,0x48,0xc8,0x44,
};
static const BitmapCharRec ch188 = {7,7,0,0,8,ch188data};
/* char: 0xbb */
static const GLubyte ch187data[] = {
0xa0,0x50,0x50,0xa0,
};
static const BitmapCharRec ch187 = {4,4,0,-1,5,ch187data};
/* char: 0xba */
static const GLubyte ch186data[] = {
0xe0,0x0,0x40,0xa0,0x40,
};
static const BitmapCharRec ch186 = {3,5,0,-2,4,ch186data};
/* char: 0xb9 */
static const GLubyte ch185data[] = {
0xe0,0x40,0xc0,0x40,
};
static const BitmapCharRec ch185 = {3,4,0,-3,3,ch185data};
/* char: 0xb8 */
static const GLubyte ch184data[] = {
0xc0,0x20,0x40,
};
static const BitmapCharRec ch184 = {3,3,0,3,4,ch184data};
/* char: 0xb7 */
static const GLubyte ch183data[] = {
0x80,
};
static const BitmapCharRec ch183 = {1,1,0,-2,2,ch183data};
/* char: 0xb6 */
static const GLubyte ch182data[] = {
0x28,0x28,0x28,0x28,0x68,0xe8,0xe8,0xe8,0x7c,
};
static const BitmapCharRec ch182 = {6,9,0,2,6,ch182data};
/* char: 0xb5 */
static const GLubyte ch181data[] = {
0x80,0x80,0xe8,0x90,0x90,0x90,0x90,
};
static const BitmapCharRec ch181 = {5,7,0,2,5,ch181data};
/* char: 0xb4 */
static const GLubyte ch180data[] = {
0x80,0x40,
};
static const BitmapCharRec ch180 = {2,2,0,-5,3,ch180data};
/* char: 0xb3 */
static const GLubyte ch179data[] = {
0xc0,0x20,0x40,0xe0,
};
static const BitmapCharRec ch179 = {3,4,0,-3,3,ch179data};
/* char: 0xb2 */
static const GLubyte ch178data[] = {
0xe0,0x40,0xa0,0x60,
};
static const BitmapCharRec ch178 = {3,4,0,-3,3,ch178data};
/* char: 0xb1 */
static const GLubyte ch177data[] = {
0xf8,0x0,0x20,0x20,0xf8,0x20,0x20,
};
static const BitmapCharRec ch177 = {5,7,0,0,6,ch177data};
/* char: 0xb0 */
static const GLubyte ch176data[] = {
0x60,0x90,0x90,0x60,
};
static const BitmapCharRec ch176 = {4,4,0,-3,4,ch176data};
/* char: 0xaf */
static const GLubyte ch175data[] = {
0xe0,
};
static const BitmapCharRec ch175 = {3,1,0,-6,4,ch175data};
/* char: 0xae */
static const GLubyte ch174data[] = {
0x38,0x44,0xaa,0xb2,0xba,0x44,0x38,
};
static const BitmapCharRec ch174 = {7,7,-1,0,9,ch174data};
/* char: 0xad */
static const GLubyte ch173data[] = {
0xe0,
};
static const BitmapCharRec ch173 = {3,1,0,-2,4,ch173data};
/* char: 0xac */
static const GLubyte ch172data[] = {
0x8,0x8,0xf8,
};
static const BitmapCharRec ch172 = {5,3,-1,-1,7,ch172data};
/* char: 0xab */
static const GLubyte ch171data[] = {
0x50,0xa0,0xa0,0x50,
};
static const BitmapCharRec ch171 = {4,4,0,-1,5,ch171data};
/* char: 0xaa */
static const GLubyte ch170data[] = {
0xe0,0x0,0xa0,0x20,0xc0,
};
static const BitmapCharRec ch170 = {3,5,0,-2,4,ch170data};
/* char: 0xa9 */
static const GLubyte ch169data[] = {
0x38,0x44,0x9a,0xa2,0x9a,0x44,0x38,
};
static const BitmapCharRec ch169 = {7,7,-1,0,9,ch169data};
/* char: 0xa8 */
static const GLubyte ch168data[] = {
0xa0,
};
static const BitmapCharRec ch168 = {3,1,-1,-6,5,ch168data};
/* char: 0xa7 */
static const GLubyte ch167data[] = {
0xe0,0x90,0x20,0x50,0x90,0xa0,0x40,0x90,0x70,
};
static const BitmapCharRec ch167 = {4,9,0,1,5,ch167data};
/* char: 0xa6 */
static const GLubyte ch166data[] = {
0x80,0x80,0x80,0x0,0x80,0x80,0x80,
};
static const BitmapCharRec ch166 = {1,7,0,0,2,ch166data};
/* char: 0xa5 */
static const GLubyte ch165data[] = {
0x70,0x20,0xf8,0x20,0xd8,0x50,0x88,
};
static const BitmapCharRec ch165 = {5,7,0,0,5,ch165data};
/* char: 0xa4 */
static const GLubyte ch164data[] = {
0x88,0x70,0x50,0x50,0x70,0x88,
};
static const BitmapCharRec ch164 = {5,6,0,-1,5,ch164data};
/* char: 0xa3 */
static const GLubyte ch163data[] = {
0xf0,0xc8,0x40,0xe0,0x40,0x50,0x30,
};
static const BitmapCharRec ch163 = {5,7,0,0,5,ch163data};
/* char: 0xa2 */
static const GLubyte ch162data[] = {
0x80,0xe0,0x90,0x80,0x90,0x70,0x10,
};
static const BitmapCharRec ch162 = {4,7,0,1,5,ch162data};
/* char: 0xa1 */
static const GLubyte ch161data[] = {
0x80,0x80,0x80,0x80,0x80,0x0,0x80,
};
static const BitmapCharRec ch161 = {1,7,-1,2,3,ch161data};
/* char: 0xa0 */
#ifdef _WIN32
/* XXX Work around Microsoft OpenGL 1.1 bug where glBitmap with
a height or width of zero does not advance the raster position
as specified by OpenGL. (Cosmo OpenGL does not have this bug.) */
static const GLubyte ch160data[] = { 0x0 };
static const BitmapCharRec ch160 = {1,1,0,0,2,ch160data};
#else
static const BitmapCharRec ch160 = {0,0,0,0,2,0};
#endif
/* char: 0x7e '~' */
static const GLubyte ch126data[] = {
0x98,0x64,
};
static const BitmapCharRec ch126 = {6,2,0,-2,7,ch126data};
/* char: 0x7d '}' */
static const GLubyte ch125data[] = {
0x80,0x40,0x40,0x40,0x20,0x40,0x40,0x40,0x80,
};
static const BitmapCharRec ch125 = {3,9,0,2,4,ch125data};
/* char: 0x7c '|' */
static const GLubyte ch124data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
};
static const BitmapCharRec ch124 = {1,9,0,2,2,ch124data};
/* char: 0x7b '{' */
static const GLubyte ch123data[] = {
0x20,0x40,0x40,0x40,0x80,0x40,0x40,0x40,0x20,
};
static const BitmapCharRec ch123 = {3,9,0,2,4,ch123data};
/* char: 0x7a 'z' */
static const GLubyte ch122data[] = {
0xf0,0x90,0x40,0x20,0xf0,
};
static const BitmapCharRec ch122 = {4,5,0,0,5,ch122data};
/* char: 0x79 'y' */
static const GLubyte ch121data[] = {
0x40,0x40,0x20,0x30,0x50,0x48,0xdc,
};
static const BitmapCharRec ch121 = {6,7,1,2,5,ch121data};
/* char: 0x78 'x' */
static const GLubyte ch120data[] = {
0xd8,0x50,0x20,0x50,0xd8,
};
static const BitmapCharRec ch120 = {5,5,0,0,6,ch120data};
/* char: 0x77 'w' */
static const GLubyte ch119data[] = {
0x28,0x6c,0x54,0x92,0xdb,
};
static const BitmapCharRec ch119 = {8,5,0,0,8,ch119data};
/* char: 0x76 'v' */
static const GLubyte ch118data[] = {
0x20,0x60,0x50,0x90,0xd8,
};
static const BitmapCharRec ch118 = {5,5,0,0,5,ch118data};
/* char: 0x75 'u' */
static const GLubyte ch117data[] = {
0x68,0x90,0x90,0x90,0x90,
};
static const BitmapCharRec ch117 = {5,5,0,0,5,ch117data};
/* char: 0x74 't' */
static const GLubyte ch116data[] = {
0x30,0x40,0x40,0x40,0xe0,0x40,
};
static const BitmapCharRec ch116 = {4,6,0,0,4,ch116data};
/* char: 0x73 's' */
static const GLubyte ch115data[] = {
0xe0,0x20,0x60,0x80,0xe0,
};
static const BitmapCharRec ch115 = {3,5,0,0,4,ch115data};
/* char: 0x72 'r' */
static const GLubyte ch114data[] = {
0xe0,0x40,0x40,0x60,0xa0,
};
static const BitmapCharRec ch114 = {3,5,0,0,4,ch114data};
/* char: 0x71 'q' */
static const GLubyte ch113data[] = {
0x38,0x10,0x70,0x90,0x90,0x90,0x70,
};
static const BitmapCharRec ch113 = {5,7,0,2,5,ch113data};
/* char: 0x70 'p' */
static const GLubyte ch112data[] = {
0xc0,0x80,0xe0,0x90,0x90,0x90,0xe0,
};
static const BitmapCharRec ch112 = {4,7,0,2,5,ch112data};
/* char: 0x6f 'o' */
static const GLubyte ch111data[] = {
0x60,0x90,0x90,0x90,0x60,
};
static const BitmapCharRec ch111 = {4,5,0,0,5,ch111data};
/* char: 0x6e 'n' */
static const GLubyte ch110data[] = {
0xd8,0x90,0x90,0x90,0xe0,
};
static const BitmapCharRec ch110 = {5,5,0,0,5,ch110data};
/* char: 0x6d 'm' */
static const GLubyte ch109data[] = {
0xdb,0x92,0x92,0x92,0xec,
};
static const BitmapCharRec ch109 = {8,5,0,0,8,ch109data};
/* char: 0x6c 'l' */
static const GLubyte ch108data[] = {
0xe0,0x40,0x40,0x40,0x40,0x40,0xc0,
};
static const BitmapCharRec ch108 = {3,7,0,0,4,ch108data};
/* char: 0x6b 'k' */
static const GLubyte ch107data[] = {
0x98,0x90,0xe0,0xa0,0x90,0x80,0x80,
};
static const BitmapCharRec ch107 = {5,7,0,0,5,ch107data};
/* char: 0x6a 'j' */
static const GLubyte ch106data[] = {
0x80,0x40,0x40,0x40,0x40,0x40,0xc0,0x0,0x40,
};
static const BitmapCharRec ch106 = {2,9,0,2,3,ch106data};
/* char: 0x69 'i' */
static const GLubyte ch105data[] = {
0x40,0x40,0x40,0x40,0xc0,0x0,0x40,
};
static const BitmapCharRec ch105 = {2,7,0,0,3,ch105data};
/* char: 0x68 'h' */
static const GLubyte ch104data[] = {
0xd8,0x90,0x90,0x90,0xe0,0x80,0x80,
};
static const BitmapCharRec ch104 = {5,7,0,0,5,ch104data};
/* char: 0x67 'g' */
static const GLubyte ch103data[] = {
0xe0,0x90,0x60,0x40,0xa0,0xa0,0x70,
};
static const BitmapCharRec ch103 = {4,7,0,2,5,ch103data};
/* char: 0x66 'f' */
static const GLubyte ch102data[] = {
0xe0,0x40,0x40,0x40,0xe0,0x40,0x30,
};
static const BitmapCharRec ch102 = {4,7,0,0,4,ch102data};
/* char: 0x65 'e' */
static const GLubyte ch101data[] = {
0x60,0x80,0xc0,0xa0,0x60,
};
static const BitmapCharRec ch101 = {3,5,0,0,4,ch101data};
/* char: 0x64 'd' */
static const GLubyte ch100data[] = {
0x68,0x90,0x90,0x90,0x70,0x10,0x30,
};
static const BitmapCharRec ch100 = {5,7,0,0,5,ch100data};
/* char: 0x63 'c' */
static const GLubyte ch99data[] = {
0x60,0x80,0x80,0x80,0x60,
};
static const BitmapCharRec ch99 = {3,5,0,0,4,ch99data};
/* char: 0x62 'b' */
static const GLubyte ch98data[] = {
0xe0,0x90,0x90,0x90,0xe0,0x80,0x80,
};
static const BitmapCharRec ch98 = {4,7,0,0,5,ch98data};
/* char: 0x61 'a' */
static const GLubyte ch97data[] = {
0xe0,0xa0,0x60,0x20,0xc0,
};
static const BitmapCharRec ch97 = {3,5,0,0,4,ch97data};
/* char: 0x60 '`' */
static const GLubyte ch96data[] = {
0xc0,0x80,
};
static const BitmapCharRec ch96 = {2,2,0,-5,3,ch96data};
/* char: 0x5f '_' */
static const GLubyte ch95data[] = {
0xf8,
};
static const BitmapCharRec ch95 = {5,1,0,3,5,ch95data};
/* char: 0x5e '^' */
static const GLubyte ch94data[] = {
0xa0,0xa0,0x40,
};
static const BitmapCharRec ch94 = {3,3,-1,-4,5,ch94data};
/* char: 0x5d ']' */
static const GLubyte ch93data[] = {
0xc0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xc0,
};
static const BitmapCharRec ch93 = {2,9,0,2,3,ch93data};
/* char: 0x5c '\' */
static const GLubyte ch92data[] = {
0x20,0x20,0x40,0x40,0x40,0x80,0x80,
};
static const BitmapCharRec ch92 = {3,7,0,0,3,ch92data};
/* char: 0x5b '[' */
static const GLubyte ch91data[] = {
0xc0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xc0,
};
static const BitmapCharRec ch91 = {2,9,0,2,3,ch91data};
/* char: 0x5a 'Z' */
static const GLubyte ch90data[] = {
0xf8,0x88,0x40,0x20,0x10,0x88,0xf8,
};
static const BitmapCharRec ch90 = {5,7,0,0,6,ch90data};
/* char: 0x59 'Y' */
static const GLubyte ch89data[] = {
0x38,0x10,0x10,0x28,0x28,0x44,0xee,
};
static const BitmapCharRec ch89 = {7,7,0,0,8,ch89data};
/* char: 0x58 'X' */
static const GLubyte ch88data[] = {
0xee,0x44,0x28,0x10,0x28,0x44,0xee,
};
static const BitmapCharRec ch88 = {7,7,0,0,8,ch88data};
/* char: 0x57 'W' */
static const GLubyte ch87data[] = {
0x22,0x0,0x22,0x0,0x55,0x0,0x55,0x0,0xc9,0x80,0x88,0x80,0xdd,0xc0,
};
static const BitmapCharRec ch87 = {10,7,0,0,10,ch87data};
/* char: 0x56 'V' */
static const GLubyte ch86data[] = {
0x10,0x10,0x28,0x28,0x6c,0x44,0xee,
};
static const BitmapCharRec ch86 = {7,7,0,0,8,ch86data};
/* char: 0x55 'U' */
static const GLubyte ch85data[] = {
0x38,0x6c,0x44,0x44,0x44,0x44,0xee,
};
static const BitmapCharRec ch85 = {7,7,0,0,8,ch85data};
/* char: 0x54 'T' */
static const GLubyte ch84data[] = {
0x70,0x20,0x20,0x20,0x20,0xa8,0xf8,
};
static const BitmapCharRec ch84 = {5,7,0,0,6,ch84data};
/* char: 0x53 'S' */
static const GLubyte ch83data[] = {
0xe0,0x90,0x10,0x60,0xc0,0x90,0x70,
};
static const BitmapCharRec ch83 = {4,7,0,0,5,ch83data};
/* char: 0x52 'R' */
static const GLubyte ch82data[] = {
0xec,0x48,0x50,0x70,0x48,0x48,0xf0,
};
static const BitmapCharRec ch82 = {6,7,0,0,7,ch82data};
/* char: 0x51 'Q' */
static const GLubyte ch81data[] = {
0xc,0x18,0x70,0xcc,0x84,0x84,0x84,0xcc,0x78,
};
static const BitmapCharRec ch81 = {6,9,0,2,7,ch81data};
/* char: 0x50 'P' */
static const GLubyte ch80data[] = {
0xe0,0x40,0x40,0x70,0x48,0x48,0xf0,
};
static const BitmapCharRec ch80 = {5,7,0,0,6,ch80data};
/* char: 0x4f 'O' */
static const GLubyte ch79data[] = {
0x78,0xcc,0x84,0x84,0x84,0xcc,0x78,
};
static const BitmapCharRec ch79 = {6,7,0,0,7,ch79data};
/* char: 0x4e 'N' */
static const GLubyte ch78data[] = {
0xe4,0x4c,0x4c,0x54,0x54,0x64,0xee,
};
static const BitmapCharRec ch78 = {7,7,0,0,8,ch78data};
/* char: 0x4d 'M' */
static const GLubyte ch77data[] = {
0xeb,0x80,0x49,0x0,0x55,0x0,0x55,0x0,0x63,0x0,0x63,0x0,0xe3,0x80,
};
static const BitmapCharRec ch77 = {9,7,0,0,10,ch77data};
/* char: 0x4c 'L' */
static const GLubyte ch76data[] = {
0xf8,0x48,0x40,0x40,0x40,0x40,0xe0,
};
static const BitmapCharRec ch76 = {5,7,0,0,6,ch76data};
/* char: 0x4b 'K' */
static const GLubyte ch75data[] = {
0xec,0x48,0x50,0x60,0x50,0x48,0xec,
};
static const BitmapCharRec ch75 = {6,7,0,0,7,ch75data};
/* char: 0x4a 'J' */
static const GLubyte ch74data[] = {
0xc0,0xa0,0x20,0x20,0x20,0x20,0x70,
};
static const BitmapCharRec ch74 = {4,7,0,0,4,ch74data};
/* char: 0x49 'I' */
static const GLubyte ch73data[] = {
0xe0,0x40,0x40,0x40,0x40,0x40,0xe0,
};
static const BitmapCharRec ch73 = {3,7,0,0,4,ch73data};
/* char: 0x48 'H' */
static const GLubyte ch72data[] = {
0xee,0x44,0x44,0x7c,0x44,0x44,0xee,
};
static const BitmapCharRec ch72 = {7,7,0,0,8,ch72data};
/* char: 0x47 'G' */
static const GLubyte ch71data[] = {
0x78,0xc4,0x84,0x9c,0x80,0xc4,0x7c,
};
static const BitmapCharRec ch71 = {6,7,0,0,7,ch71data};
/* char: 0x46 'F' */
static const GLubyte ch70data[] = {
0xe0,0x40,0x40,0x70,0x40,0x48,0xf8,
};
static const BitmapCharRec ch70 = {5,7,0,0,6,ch70data};
/* char: 0x45 'E' */
static const GLubyte ch69data[] = {
0xf8,0x48,0x40,0x70,0x40,0x48,0xf8,
};
static const BitmapCharRec ch69 = {5,7,0,0,6,ch69data};
/* char: 0x44 'D' */
static const GLubyte ch68data[] = {
0xf8,0x4c,0x44,0x44,0x44,0x4c,0xf8,
};
static const BitmapCharRec ch68 = {6,7,0,0,7,ch68data};
/* char: 0x43 'C' */
static const GLubyte ch67data[] = {
0x78,0xc4,0x80,0x80,0x80,0xc4,0x7c,
};
static const BitmapCharRec ch67 = {6,7,0,0,7,ch67data};
/* char: 0x42 'B' */
static const GLubyte ch66data[] = {
0xf0,0x48,0x48,0x70,0x48,0x48,0xf0,
};
static const BitmapCharRec ch66 = {5,7,0,0,6,ch66data};
/* char: 0x41 'A' */
static const GLubyte ch65data[] = {
0xee,0x44,0x7c,0x28,0x28,0x38,0x10,
};
static const BitmapCharRec ch65 = {7,7,0,0,8,ch65data};
/* char: 0x40 '@' */
static const GLubyte ch64data[] = {
0x3e,0x40,0x92,0xad,0xa5,0xa5,0x9d,0x42,0x3c,
};
static const BitmapCharRec ch64 = {8,9,0,2,9,ch64data};
/* char: 0x3f '?' */
static const GLubyte ch63data[] = {
0x40,0x0,0x40,0x40,0x20,0xa0,0xe0,
};
static const BitmapCharRec ch63 = {3,7,0,0,4,ch63data};
/* char: 0x3e '>' */
static const GLubyte ch62data[] = {
0x80,0x40,0x20,0x40,0x80,
};
static const BitmapCharRec ch62 = {3,5,0,0,5,ch62data};
/* char: 0x3d '=' */
static const GLubyte ch61data[] = {
0xf8,0x0,0xf8,
};
static const BitmapCharRec ch61 = {5,3,0,-1,6,ch61data};
/* char: 0x3c '<' */
static const GLubyte ch60data[] = {
0x20,0x40,0x80,0x40,0x20,
};
static const BitmapCharRec ch60 = {3,5,-1,0,5,ch60data};
/* char: 0x3b ';' */
static const GLubyte ch59data[] = {
0x80,0x80,0x80,0x0,0x0,0x0,0x80,
};
static const BitmapCharRec ch59 = {1,7,-1,2,3,ch59data};
/* char: 0x3a ':' */
static const GLubyte ch58data[] = {
0x80,0x0,0x0,0x0,0x80,
};
static const BitmapCharRec ch58 = {1,5,-1,0,3,ch58data};
/* char: 0x39 '9' */
static const GLubyte ch57data[] = {
0xc0,0x20,0x70,0x90,0x90,0x90,0x60,
};
static const BitmapCharRec ch57 = {4,7,0,0,5,ch57data};
/* char: 0x38 '8' */
static const GLubyte ch56data[] = {
0x60,0x90,0x90,0x60,0x90,0x90,0x60,
};
static const BitmapCharRec ch56 = {4,7,0,0,5,ch56data};
/* char: 0x37 '7' */
static const GLubyte ch55data[] = {
0x40,0x40,0x40,0x20,0x20,0x90,0xf0,
};
static const BitmapCharRec ch55 = {4,7,0,0,5,ch55data};
/* char: 0x36 '6' */
static const GLubyte ch54data[] = {
0x60,0x90,0x90,0x90,0xe0,0x40,0x30,
};
static const BitmapCharRec ch54 = {4,7,0,0,5,ch54data};
/* char: 0x35 '5' */
static const GLubyte ch53data[] = {
0xe0,0x90,0x10,0x10,0xe0,0x40,0x70,
};
static const BitmapCharRec ch53 = {4,7,0,0,5,ch53data};
/* char: 0x34 '4' */
static const GLubyte ch52data[] = {
0x10,0x10,0xf8,0x90,0x50,0x30,0x10,
};
static const BitmapCharRec ch52 = {5,7,0,0,5,ch52data};
/* char: 0x33 '3' */
static const GLubyte ch51data[] = {
0xe0,0x10,0x10,0x60,0x10,0x90,0x60,
};
static const BitmapCharRec ch51 = {4,7,0,0,5,ch51data};
/* char: 0x32 '2' */
static const GLubyte ch50data[] = {
0xf0,0x40,0x20,0x20,0x10,0x90,0x60,
};
static const BitmapCharRec ch50 = {4,7,0,0,5,ch50data};
/* char: 0x31 '1' */
static const GLubyte ch49data[] = {
0xe0,0x40,0x40,0x40,0x40,0xc0,0x40,
};
static const BitmapCharRec ch49 = {3,7,-1,0,5,ch49data};
/* char: 0x30 '0' */
static const GLubyte ch48data[] = {
0x60,0x90,0x90,0x90,0x90,0x90,0x60,
};
static const BitmapCharRec ch48 = {4,7,0,0,5,ch48data};
/* char: 0x2f '/' */
static const GLubyte ch47data[] = {
0x80,0x80,0x40,0x40,0x40,0x20,0x20,
};
static const BitmapCharRec ch47 = {3,7,0,0,3,ch47data};
/* char: 0x2e '.' */
static const GLubyte ch46data[] = {
0x80,
};
static const BitmapCharRec ch46 = {1,1,-1,0,3,ch46data};
/* char: 0x2d '-' */
static const GLubyte ch45data[] = {
0xf0,
};
static const BitmapCharRec ch45 = {4,1,-1,-2,7,ch45data};
/* char: 0x2c ',' */
static const GLubyte ch44data[] = {
0x80,0x80,0x80,
};
static const BitmapCharRec ch44 = {1,3,-1,2,3,ch44data};
/* char: 0x2b '+' */
static const GLubyte ch43data[] = {
0x20,0x20,0xf8,0x20,0x20,
};
static const BitmapCharRec ch43 = {5,5,0,0,6,ch43data};
/* char: 0x2a '*' */
static const GLubyte ch42data[] = {
0xa0,0x40,0xa0,
};
static const BitmapCharRec ch42 = {3,3,0,-4,5,ch42data};
/* char: 0x29 ')' */
static const GLubyte ch41data[] = {
0x80,0x40,0x40,0x20,0x20,0x20,0x40,0x40,0x80,
};
static const BitmapCharRec ch41 = {3,9,0,2,4,ch41data};
/* char: 0x28 '(' */
static const GLubyte ch40data[] = {
0x20,0x40,0x40,0x80,0x80,0x80,0x40,0x40,0x20,
};
static const BitmapCharRec ch40 = {3,9,0,2,4,ch40data};
/* char: 0x27 ''' */
static const GLubyte ch39data[] = {
0x40,0xc0,
};
static const BitmapCharRec ch39 = {2,2,0,-5,3,ch39data};
/* char: 0x26 '&' */
static const GLubyte ch38data[] = {
0x76,0x8d,0x98,0x74,0x6e,0x50,0x30,
};
static const BitmapCharRec ch38 = {8,7,0,0,8,ch38data};
/* char: 0x25 '%' */
static const GLubyte ch37data[] = {
0x44,0x2a,0x2a,0x56,0xa8,0xa4,0x7e,
};
static const BitmapCharRec ch37 = {7,7,0,0,8,ch37data};
/* char: 0x24 '$' */
static const GLubyte ch36data[] = {
0x20,0xe0,0x90,0x10,0x60,0x80,0x90,0x70,0x20,
};
static const BitmapCharRec ch36 = {4,9,0,1,5,ch36data};
/* char: 0x23 '#' */
static const GLubyte ch35data[] = {
0x50,0x50,0xf8,0x50,0xf8,0x50,0x50,
};
static const BitmapCharRec ch35 = {5,7,0,0,5,ch35data};
/* char: 0x22 '"' */
static const GLubyte ch34data[] = {
0xa0,0xa0,
};
static const BitmapCharRec ch34 = {3,2,0,-5,4,ch34data};
/* char: 0x21 '!' */
static const GLubyte ch33data[] = {
0x80,0x0,0x80,0x80,0x80,0x80,0x80,
};
static const BitmapCharRec ch33 = {1,7,-1,0,3,ch33data};
/* char: 0x20 ' ' */
#ifdef _WIN32
/* XXX Work around Microsoft OpenGL 1.1 bug where glBitmap with
a height or width of zero does not advance the raster position
as specified by OpenGL. (Cosmo OpenGL does not have this bug.) */
static const GLubyte ch32data[] = { 0x0 };
static const BitmapCharRec ch32 = {1,1,0,0,2,ch32data};
#else
static const BitmapCharRec ch32 = {0,0,0,0,2,0};
#endif
static const BitmapCharRec * const chars[] = {
&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,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
&ch160,
&ch161,
&ch162,
&ch163,
&ch164,
&ch165,
&ch166,
&ch167,
&ch168,
&ch169,
&ch170,
&ch171,
&ch172,
&ch173,
&ch174,
&ch175,
&ch176,
&ch177,
&ch178,
&ch179,
&ch180,
&ch181,
&ch182,
&ch183,
&ch184,
&ch185,
&ch186,
&ch187,
&ch188,
&ch189,
&ch190,
&ch191,
&ch192,
&ch193,
&ch194,
&ch195,
&ch196,
&ch197,
&ch198,
&ch199,
&ch200,
&ch201,
&ch202,
&ch203,
&ch204,
&ch205,
&ch206,
&ch207,
&ch208,
&ch209,
&ch210,
&ch211,
&ch212,
&ch213,
&ch214,
&ch215,
&ch216,
&ch217,
&ch218,
&ch219,
&ch220,
&ch221,
&ch222,
&ch223,
&ch224,
&ch225,
&ch226,
&ch227,
&ch228,
&ch229,
&ch230,
&ch231,
&ch232,
&ch233,
&ch234,
&ch235,
&ch236,
&ch237,
&ch238,
&ch239,
&ch240,
&ch241,
&ch242,
&ch243,
&ch244,
&ch245,
&ch246,
&ch247,
&ch248,
&ch249,
&ch250,
&ch251,
&ch252,
&ch253,
&ch254,
&ch255,
};
const BitmapFontRec glutBitmapTimesRoman10 = {
"-adobe-times-medium-r-normal--10-100-75-75-p-54-iso8859-1",
224,
32,
chars
};
/* GENERATED FILE -- DO NOT MODIFY */
#define glutBitmapTimesRoman24 XXX
#include "glutbitmap.h"
#undef glutBitmapTimesRoman24
/* char: 0xff */
static const GLubyte ch255data[] = {
0xe0,0x0,0xf0,0x0,0x18,0x0,0x8,0x0,0xc,0x0,0x4,0x0,0xe,0x0,0xe,0x0,
0x1a,0x0,0x19,0x0,0x19,0x0,0x31,0x0,0x30,0x80,0x30,0x80,0x60,0x80,0x60,0xc0,
0xf1,0xe0,0x0,0x0,0x0,0x0,0x33,0x0,0x33,0x0,
};
static const BitmapCharRec ch255 = {11,21,0,5,11,ch255data};
/* char: 0xfe */
static const GLubyte ch254data[] = {
0xf0,0x0,0x60,0x0,0x60,0x0,0x60,0x0,0x60,0x0,0x6e,0x0,0x73,0x80,0x61,0x80,
0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x61,0x80,0x73,0x80,
0x6e,0x0,0x60,0x0,0x60,0x0,0x60,0x0,0x60,0x0,0xe0,0x0,
};
static const BitmapCharRec ch254 = {10,22,-1,5,12,ch254data};
/* char: 0xfd */
static const GLubyte ch253data[] = {
0xe0,0x0,0xf0,0x0,0x18,0x0,0x8,0x0,0xc,0x0,0x4,0x0,0xe,0x0,0xe,0x0,
0x1a,0x0,0x19,0x0,0x19,0x0,0x31,0x0,0x30,0x80,0x30,0x80,0x60,0x80,0x60,0xc0,
0xf1,0xe0,0x0,0x0,0x8,0x0,0x6,0x0,0x3,0x80,0x1,0x80,
};
static const BitmapCharRec ch253 = {11,22,0,5,11,ch253data};
/* char: 0xfc */
static const GLubyte ch252data[] = {
0x1c,0xe0,0x3e,0xc0,0x71,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,
0x60,0xc0,0x60,0xc0,0x60,0xc0,0xe1,0xc0,0x0,0x0,0x0,0x0,0x33,0x0,0x33,0x0,
};
static const BitmapCharRec ch252 = {11,16,-1,0,13,ch252data};
/* char: 0xfb */
static const GLubyte ch251data[] = {
0x1c,0xe0,0x3e,0xc0,0x71,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,
0x60,0xc0,0x60,0xc0,0x60,0xc0,0xe1,0xc0,0x0,0x0,0x21,0x0,0x12,0x0,0x1e,0x0,
0xc,0x0,
};
static const BitmapCharRec ch251 = {11,17,-1,0,13,ch251data};
/* char: 0xfa */
static const GLubyte ch250data[] = {
0x1c,0xe0,0x3e,0xc0,0x71,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,
0x60,0xc0,0x60,0xc0,0x60,0xc0,0xe1,0xc0,0x0,0x0,0x8,0x0,0x6,0x0,0x3,0x80,
0x1,0x80,
};
static const BitmapCharRec ch250 = {11,17,-1,0,13,ch250data};
/* char: 0xf9 */
static const GLubyte ch249data[] = {
0x1c,0xe0,0x3e,0xc0,0x71,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,
0x60,0xc0,0x60,0xc0,0x60,0xc0,0xe1,0xc0,0x0,0x0,0x2,0x0,0xc,0x0,0x38,0x0,
0x30,0x0,
};
static const BitmapCharRec ch249 = {11,17,-1,0,13,ch249data};
/* char: 0xf8 */
static const GLubyte ch248data[] = {
0xc0,0x0,0xde,0x0,0x73,0x80,0x71,0x80,0xd0,0xc0,0xd8,0xc0,0xc8,0xc0,0xcc,0xc0,
0xc4,0xc0,0xc6,0xc0,0x63,0x80,0x73,0x80,0x1e,0xc0,0x0,0xc0,
};
static const BitmapCharRec ch248 = {10,14,-1,1,12,ch248data};
/* char: 0xf7 */
static const GLubyte ch247data[] = {
0x6,0x0,0x6,0x0,0x0,0x0,0x0,0x0,0xff,0xf0,0xff,0xf0,0x0,0x0,0x0,0x0,
0x6,0x0,0x6,0x0,
};
static const BitmapCharRec ch247 = {12,10,-1,-2,14,ch247data};
/* char: 0xf6 */
static const GLubyte ch246data[] = {
0x1e,0x0,0x73,0x80,0x61,0x80,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
0xc0,0xc0,0x61,0x80,0x73,0x80,0x1e,0x0,0x0,0x0,0x0,0x0,0x33,0x0,0x33,0x0,
};
static const BitmapCharRec ch246 = {10,16,-1,0,12,ch246data};
/* char: 0xf5 */
static const GLubyte ch245data[] = {
0x1e,0x0,0x73,0x80,0x61,0x80,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
0xc0,0xc0,0x61,0x80,0x73,0x80,0x1e,0x0,0x0,0x0,0x0,0x0,0x27,0x0,0x1c,0x80,
};
static const BitmapCharRec ch245 = {10,16,-1,0,12,ch245data};
/* char: 0xf4 */
static const GLubyte ch244data[] = {
0x1e,0x0,0x73,0x80,0x61,0x80,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
0xc0,0xc0,0x61,0x80,0x73,0x80,0x1e,0x0,0x0,0x0,0x21,0x0,0x12,0x0,0x1e,0x0,
0xc,0x0,
};
static const BitmapCharRec ch244 = {10,17,-1,0,12,ch244data};
/* char: 0xf3 */
static const GLubyte ch243data[] = {
0x1e,0x0,0x73,0x80,0x61,0x80,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
0xc0,0xc0,0x61,0x80,0x73,0x80,0x1e,0x0,0x0,0x0,0x8,0x0,0x6,0x0,0x3,0x80,
0x1,0x80,
};
static const BitmapCharRec ch243 = {10,17,-1,0,12,ch243data};
/* char: 0xf2 */
static const GLubyte ch242data[] = {
0x1e,0x0,0x73,0x80,0x61,0x80,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
0xc0,0xc0,0x61,0x80,0x73,0x80,0x1e,0x0,0x0,0x0,0x2,0x0,0xc,0x0,0x38,0x0,
0x30,0x0,
};
static const BitmapCharRec ch242 = {10,17,-1,0,12,ch242data};
/* char: 0xf1 */
static const GLubyte ch241data[] = {
0xf1,0xe0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,
0x60,0xc0,0x71,0xc0,0x6f,0x80,0xe7,0x0,0x0,0x0,0x0,0x0,0x27,0x0,0x1c,0x80,
};
static const BitmapCharRec ch241 = {11,16,-1,0,13,ch241data};
/* char: 0xf0 */
static const GLubyte ch240data[] = {
0x1e,0x0,0x73,0x80,0x61,0x80,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
0xc0,0xc0,0x61,0x80,0x73,0x80,0x1f,0x0,0xc6,0x0,0x3c,0x0,0x1e,0x0,0x71,0x80,
0xc0,0x0,
};
static const BitmapCharRec ch240 = {10,17,-1,0,12,ch240data};
/* char: 0xef */
static const GLubyte ch239data[] = {
0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x70,0x0,0x0,0xcc,0xcc,
};
static const BitmapCharRec ch239 = {6,16,0,0,6,ch239data};
/* char: 0xee */
static const GLubyte ch238data[] = {
0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x70,0x0,0x84,0x48,0x78,
0x30,
};
static const BitmapCharRec ch238 = {6,17,0,0,6,ch238data};
/* char: 0xed */
static const GLubyte ch237data[] = {
0xf0,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0xe0,0x0,0x80,0x60,0x38,
0x18,
};
static const BitmapCharRec ch237 = {5,17,-1,0,6,ch237data};
/* char: 0xec */
static const GLubyte ch236data[] = {
0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x70,0x0,0x8,0x30,0xe0,
0xc0,
};
static const BitmapCharRec ch236 = {5,17,0,0,6,ch236data};
/* char: 0xeb */
static const GLubyte ch235data[] = {
0x1e,0x0,0x7f,0x0,0x70,0x80,0xe0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x80,
0xc1,0x80,0x41,0x80,0x63,0x0,0x1e,0x0,0x0,0x0,0x0,0x0,0x33,0x0,0x33,0x0,
};
static const BitmapCharRec ch235 = {9,16,-1,0,11,ch235data};
/* char: 0xea */
static const GLubyte ch234data[] = {
0x1e,0x0,0x7f,0x0,0x70,0x80,0xe0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x80,
0xc1,0x80,0x41,0x80,0x63,0x0,0x1e,0x0,0x0,0x0,0x21,0x0,0x12,0x0,0x1e,0x0,
0xc,0x0,
};
static const BitmapCharRec ch234 = {9,17,-1,0,11,ch234data};
/* char: 0xe9 */
static const GLubyte ch233data[] = {
0x1e,0x0,0x7f,0x0,0x70,0x80,0xe0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x80,
0xc1,0x80,0x41,0x80,0x63,0x0,0x1e,0x0,0x0,0x0,0x10,0x0,0xc,0x0,0x7,0x0,
0x3,0x0,
};
static const BitmapCharRec ch233 = {9,17,-1,0,11,ch233data};
/* char: 0xe8 */
static const GLubyte ch232data[] = {
0x1e,0x0,0x7f,0x0,0x70,0x80,0xe0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x80,
0xc1,0x80,0x41,0x80,0x63,0x0,0x1e,0x0,0x0,0x0,0x4,0x0,0x18,0x0,0x70,0x0,
0x60,0x0,
};
static const BitmapCharRec ch232 = {9,17,-1,0,11,ch232data};
/* char: 0xe7 */
static const GLubyte ch231data[] = {
0x3c,0x0,0x66,0x0,0x6,0x0,0x1e,0x0,0x18,0x0,0x8,0x0,0x1e,0x0,0x7f,0x0,
0x70,0x80,0xe0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0x41,0x80,
0x63,0x80,0x1f,0x0,
};
static const BitmapCharRec ch231 = {9,18,-1,6,11,ch231data};
/* char: 0xe6 */
static const GLubyte ch230data[] = {
0x70,0xf0,0xfb,0xf8,0xc7,0x84,0xc3,0x0,0xc3,0x0,0x63,0x0,0x3b,0x0,0xf,0xfc,
0x3,0xc,0x63,0xc,0x67,0x98,0x3c,0xf0,
};
static const BitmapCharRec ch230 = {14,12,-1,0,16,ch230data};
/* char: 0xe5 */
static const GLubyte ch229data[] = {
0x71,0x80,0xfb,0x0,0xc7,0x0,0xc3,0x0,0xc3,0x0,0x63,0x0,0x3b,0x0,0xf,0x0,
0x3,0x0,0x63,0x0,0x67,0x0,0x3e,0x0,0x0,0x0,0x1c,0x0,0x22,0x0,0x22,0x0,
0x1c,0x0,
};
static const BitmapCharRec ch229 = {9,17,-1,0,11,ch229data};
/* char: 0xe4 */
static const GLubyte ch228data[] = {
0x71,0x80,0xfb,0x0,0xc7,0x0,0xc3,0x0,0xc3,0x0,0x63,0x0,0x3b,0x0,0xf,0x0,
0x3,0x0,0x63,0x0,0x67,0x0,0x3e,0x0,0x0,0x0,0x0,0x0,0x66,0x0,0x66,0x0,
};
static const BitmapCharRec ch228 = {9,16,-1,0,11,ch228data};
/* char: 0xe3 */
static const GLubyte ch227data[] = {
0x71,0x80,0xfb,0x0,0xc7,0x0,0xc3,0x0,0xc3,0x0,0x63,0x0,0x3b,0x0,0xf,0x0,
0x3,0x0,0x63,0x0,0x67,0x0,0x3e,0x0,0x0,0x0,0x0,0x0,0x5c,0x0,0x3a,0x0,
};
static const BitmapCharRec ch227 = {9,16,-1,0,11,ch227data};
/* char: 0xe2 */
static const GLubyte ch226data[] = {
0x71,0x80,0xfb,0x0,0xc7,0x0,0xc3,0x0,0xc3,0x0,0x63,0x0,0x3b,0x0,0xf,0x0,
0x3,0x0,0x63,0x0,0x67,0x0,0x3e,0x0,0x0,0x0,0x42,0x0,0x24,0x0,0x3c,0x0,
0x18,0x0,
};
static const BitmapCharRec ch226 = {9,17,-1,0,11,ch226data};
/* char: 0xe1 */
static const GLubyte ch225data[] = {
0x71,0x80,0xfb,0x0,0xc7,0x0,0xc3,0x0,0xc3,0x0,0x63,0x0,0x3b,0x0,0xf,0x0,
0x3,0x0,0x63,0x0,0x67,0x0,0x3e,0x0,0x0,0x0,0x10,0x0,0xc,0x0,0x7,0x0,
0x3,0x0,
};
static const BitmapCharRec ch225 = {9,17,-1,0,11,ch225data};
/* char: 0xe0 */
static const GLubyte ch224data[] = {
0x71,0x80,0xfb,0x0,0xc7,0x0,0xc3,0x0,0xc3,0x0,0x63,0x0,0x3b,0x0,0xf,0x0,
0x3,0x0,0x63,0x0,0x67,0x0,0x3e,0x0,0x0,0x0,0x4,0x0,0x18,0x0,0x70,0x0,
0x60,0x0,
};
static const BitmapCharRec ch224 = {9,17,-1,0,11,ch224data};
/* char: 0xdf */
static const GLubyte ch223data[] = {
0xe7,0x0,0x6c,0x80,0x6c,0xc0,0x60,0xc0,0x60,0xc0,0x61,0xc0,0x61,0x80,0x63,0x80,
0x67,0x0,0x6c,0x0,0x63,0x0,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x33,0x0,
0x1e,0x0,
};
static const BitmapCharRec ch223 = {10,17,-1,0,12,ch223data};
/* char: 0xde */
static const GLubyte ch222data[] = {
0xfc,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x3f,0xc0,0x30,0x70,0x30,0x30,0x30,0x18,
0x30,0x18,0x30,0x18,0x30,0x30,0x30,0x70,0x3f,0xc0,0x30,0x0,0x30,0x0,0x30,0x0,
0xfc,0x0,
};
static const BitmapCharRec ch222 = {13,17,-1,0,15,ch222data};
/* char: 0xdd */
static const GLubyte ch221data[] = {
0x7,0xe0,0x1,0x80,0x1,0x80,0x1,0x80,0x1,0x80,0x1,0x80,0x1,0x80,0x3,0xc0,
0x3,0x40,0x6,0x60,0x6,0x20,0xc,0x30,0x1c,0x10,0x18,0x18,0x38,0x8,0x30,0xc,
0xfc,0x3f,0x0,0x0,0x1,0x0,0x0,0xc0,0x0,0x70,0x0,0x30,
};
static const BitmapCharRec ch221 = {16,22,0,0,16,ch221data};
/* char: 0xdc */
static const GLubyte ch220data[] = {
0x7,0xe0,0x1c,0x30,0x18,0x8,0x30,0x8,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,
0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,
0xfc,0x1f,0x0,0x0,0x0,0x0,0x6,0x30,0x6,0x30,
};
static const BitmapCharRec ch220 = {16,21,-1,0,18,ch220data};
/* char: 0xdb */
static const GLubyte ch219data[] = {
0x7,0xe0,0x1c,0x30,0x18,0x8,0x30,0x8,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,
0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,
0xfc,0x1f,0x0,0x0,0x8,0x10,0x6,0x60,0x3,0xc0,0x1,0x80,
};
static const BitmapCharRec ch219 = {16,22,-1,0,18,ch219data};
/* char: 0xda */
static const GLubyte ch218data[] = {
0x7,0xe0,0x1c,0x30,0x18,0x8,0x30,0x8,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,
0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,
0xfc,0x1f,0x0,0x0,0x1,0x0,0x0,0xc0,0x0,0x70,0x0,0x30,
};
static const BitmapCharRec ch218 = {16,22,-1,0,18,ch218data};
/* char: 0xd9 */
static const GLubyte ch217data[] = {
0x7,0xe0,0x1c,0x30,0x18,0x8,0x30,0x8,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,
0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,
0xfc,0x1f,0x0,0x0,0x0,0x40,0x1,0x80,0x7,0x0,0x6,0x0,
};
static const BitmapCharRec ch217 = {16,22,-1,0,18,ch217data};
/* char: 0xd8 */
static const GLubyte ch216data[] = {
0x20,0x0,0x27,0xe0,0x1c,0x38,0x38,0x1c,0x68,0x6,0x64,0x6,0xc2,0x3,0xc2,0x3,
0xc1,0x3,0xc1,0x3,0xc0,0x83,0xc0,0x83,0xc0,0x43,0x60,0x46,0x60,0x26,0x38,0x1c,
0x1c,0x38,0x7,0xe4,0x0,0x4,
};
static const BitmapCharRec ch216 = {16,19,-1,1,18,ch216data};
/* char: 0xd7 */
static const GLubyte ch215data[] = {
0x80,0x40,0xc0,0xc0,0x61,0x80,0x33,0x0,0x1e,0x0,0xc,0x0,0x1e,0x0,0x33,0x0,
0x61,0x80,0xc0,0xc0,0x80,0x40,
};
static const BitmapCharRec ch215 = {10,11,-2,-1,14,ch215data};
/* char: 0xd6 */
static const GLubyte ch214data[] = {
0x7,0xe0,0x1c,0x38,0x38,0x1c,0x60,0x6,0x60,0x6,0xc0,0x3,0xc0,0x3,0xc0,0x3,
0xc0,0x3,0xc0,0x3,0xc0,0x3,0xc0,0x3,0x60,0x6,0x60,0x6,0x38,0x1c,0x1c,0x38,
0x7,0xe0,0x0,0x0,0x0,0x0,0x6,0x60,0x6,0x60,
};
static const BitmapCharRec ch214 = {16,21,-1,0,18,ch214data};
/* char: 0xd5 */
static const GLubyte ch213data[] = {
0x7,0xe0,0x1c,0x38,0x38,0x1c,0x60,0x6,0x60,0x6,0xc0,0x3,0xc0,0x3,0xc0,0x3,
0xc0,0x3,0xc0,0x3,0xc0,0x3,0xc0,0x3,0x60,0x6,0x60,0x6,0x38,0x1c,0x1c,0x38,
0x7,0xe0,0x0,0x0,0x0,0x0,0x4,0xe0,0x3,0x90,
};
static const BitmapCharRec ch213 = {16,21,-1,0,18,ch213data};
/* char: 0xd4 */
static const GLubyte ch212data[] = {
0x7,0xe0,0x1c,0x38,0x38,0x1c,0x60,0x6,0x60,0x6,0xc0,0x3,0xc0,0x3,0xc0,0x3,
0xc0,0x3,0xc0,0x3,0xc0,0x3,0xc0,0x3,0x60,0x6,0x60,0x6,0x38,0x1c,0x1c,0x38,
0x7,0xe0,0x0,0x0,0x8,0x10,0x6,0x60,0x3,0xc0,0x1,0x80,
};
static const BitmapCharRec ch212 = {16,22,-1,0,18,ch212data};
/* char: 0xd3 */
static const GLubyte ch211data[] = {
0x7,0xe0,0x1c,0x38,0x38,0x1c,0x60,0x6,0x60,0x6,0xc0,0x3,0xc0,0x3,0xc0,0x3,
0xc0,0x3,0xc0,0x3,0xc0,0x3,0xc0,0x3,0x60,0x6,0x60,0x6,0x38,0x1c,0x1c,0x38,
0x7,0xe0,0x0,0x0,0x1,0x0,0x0,0xc0,0x0,0x70,0x0,0x30,
};
static const BitmapCharRec ch211 = {16,22,-1,0,18,ch211data};
/* char: 0xd2 */
static const GLubyte ch210data[] = {
0x7,0xe0,0x1c,0x38,0x38,0x1c,0x60,0x6,0x60,0x6,0xc0,0x3,0xc0,0x3,0xc0,0x3,
0xc0,0x3,0xc0,0x3,0xc0,0x3,0xc0,0x3,0x60,0x6,0x60,0x6,0x38,0x1c,0x1c,0x38,
0x7,0xe0,0x0,0x0,0x0,0x40,0x1,0x80,0x7,0x0,0x6,0x0,
};
static const BitmapCharRec ch210 = {16,22,-1,0,18,ch210data};
/* char: 0xd1 */
static const GLubyte ch209data[] = {
0xf8,0xc,0x20,0x1c,0x20,0x1c,0x20,0x34,0x20,0x64,0x20,0x64,0x20,0xc4,0x21,0x84,
0x21,0x84,0x23,0x4,0x26,0x4,0x26,0x4,0x2c,0x4,0x38,0x4,0x38,0x4,0x30,0x4,
0xf0,0x1f,0x0,0x0,0x0,0x0,0x4,0xe0,0x3,0x90,
};
static const BitmapCharRec ch209 = {16,21,-1,0,18,ch209data};
/* char: 0xd0 */
static const GLubyte ch208data[] = {
0x7f,0xe0,0x18,0x38,0x18,0x1c,0x18,0x6,0x18,0x6,0x18,0x3,0x18,0x3,0x18,0x3,
0xff,0x3,0x18,0x3,0x18,0x3,0x18,0x3,0x18,0x6,0x18,0x6,0x18,0x1c,0x18,0x38,
0x7f,0xe0,
};
static const BitmapCharRec ch208 = {16,17,0,0,17,ch208data};
/* char: 0xcf */
static const GLubyte ch207data[] = {
0xfc,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
0xfc,0x0,0x0,0xcc,0xcc,
};
static const BitmapCharRec ch207 = {6,21,-1,0,8,ch207data};
/* char: 0xce */
static const GLubyte ch206data[] = {
0x7e,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
0x7e,0x0,0x81,0x66,0x3c,0x18,
};
static const BitmapCharRec ch206 = {8,22,-1,0,8,ch206data};
/* char: 0xcd */
static const GLubyte ch205data[] = {
0xfc,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
0xfc,0x0,0x40,0x30,0x1c,0xc,
};
static const BitmapCharRec ch205 = {6,22,-1,0,8,ch205data};
/* char: 0xcc */
static const GLubyte ch204data[] = {
0xfc,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
0xfc,0x0,0x8,0x30,0xe0,0xc0,
};
static const BitmapCharRec ch204 = {6,22,-1,0,8,ch204data};
/* char: 0xcb */
static const GLubyte ch203data[] = {
0xff,0xf8,0x30,0x18,0x30,0x8,0x30,0x8,0x30,0x0,0x30,0x0,0x30,0x40,0x30,0x40,
0x3f,0xc0,0x30,0x40,0x30,0x40,0x30,0x0,0x30,0x0,0x30,0x10,0x30,0x10,0x30,0x30,
0xff,0xf0,0x0,0x0,0x0,0x0,0x19,0x80,0x19,0x80,
};
static const BitmapCharRec ch203 = {13,21,-1,0,15,ch203data};
/* char: 0xca */
static const GLubyte ch202data[] = {
0xff,0xf8,0x30,0x18,0x30,0x8,0x30,0x8,0x30,0x0,0x30,0x0,0x30,0x40,0x30,0x40,
0x3f,0xc0,0x30,0x40,0x30,0x40,0x30,0x0,0x30,0x0,0x30,0x10,0x30,0x10,0x30,0x30,
0xff,0xf0,0x0,0x0,0x10,0x20,0xc,0xc0,0x7,0x80,0x3,0x0,
};
static const BitmapCharRec ch202 = {13,22,-1,0,15,ch202data};
/* char: 0xc9 */
static const GLubyte ch201data[] = {
0xff,0xf8,0x30,0x18,0x30,0x8,0x30,0x8,0x30,0x0,0x30,0x0,0x30,0x40,0x30,0x40,
0x3f,0xc0,0x30,0x40,0x30,0x40,0x30,0x0,0x30,0x0,0x30,0x10,0x30,0x10,0x30,0x30,
0xff,0xf0,0x0,0x0,0x4,0x0,0x3,0x0,0x1,0xc0,0x0,0xc0,
};
static const BitmapCharRec ch201 = {13,22,-1,0,15,ch201data};
/* char: 0xc8 */
static const GLubyte ch200data[] = {
0xff,0xf8,0x30,0x18,0x30,0x8,0x30,0x8,0x30,0x0,0x30,0x0,0x30,0x40,0x30,0x40,
0x3f,0xc0,0x30,0x40,0x30,0x40,0x30,0x0,0x30,0x0,0x30,0x10,0x30,0x10,0x30,0x30,
0xff,0xf0,0x0,0x0,0x1,0x0,0x6,0x0,0x1c,0x0,0x18,0x0,
};
static const BitmapCharRec ch200 = {13,22,-1,0,15,ch200data};
/* char: 0xc7 */
static const GLubyte ch199data[] = {
0x7,0x80,0xc,0xc0,0x0,0xc0,0x3,0xc0,0x3,0x0,0x1,0x0,0x7,0xe0,0x1e,0x38,
0x38,0x8,0x60,0x4,0x60,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,
0xc0,0x0,0xc0,0x0,0x60,0x4,0x60,0x4,0x38,0xc,0x1c,0x3c,0x7,0xe4,
};
static const BitmapCharRec ch199 = {14,23,-1,6,16,ch199data};
/* char: 0xc6 */
static const GLubyte ch198data[] = {
0xf9,0xff,0xf0,0x30,0x60,0x30,0x10,0x60,0x10,0x10,0x60,0x10,0x18,0x60,0x0,0x8,
0x60,0x0,0xf,0xe0,0x80,0xc,0x60,0x80,0x4,0x7f,0x80,0x4,0x60,0x80,0x6,0x60,
0x80,0x2,0x60,0x0,0x2,0x60,0x0,0x1,0x60,0x20,0x1,0x60,0x20,0x1,0xe0,0x60,
0x3,0xff,0xe0,
};
static const BitmapCharRec ch198 = {20,17,0,0,21,ch198data};
/* char: 0xc5 */
static const GLubyte ch197data[] = {
0xfc,0x1f,0x80,0x30,0x6,0x0,0x10,0x6,0x0,0x10,0xc,0x0,0x18,0xc,0x0,0x8,
0xc,0x0,0xf,0xf8,0x0,0xc,0x18,0x0,0x4,0x18,0x0,0x4,0x30,0x0,0x6,0x30,
0x0,0x2,0x30,0x0,0x2,0x60,0x0,0x1,0x60,0x0,0x1,0xc0,0x0,0x1,0xc0,0x0,
0x0,0x80,0x0,0x1,0xc0,0x0,0x2,0x20,0x0,0x2,0x20,0x0,0x1,0xc0,0x0,
};
static const BitmapCharRec ch197 = {17,21,0,0,17,ch197data};
/* char: 0xc4 */
static const GLubyte ch196data[] = {
0xfc,0x1f,0x80,0x30,0x6,0x0,0x10,0x6,0x0,0x10,0xc,0x0,0x18,0xc,0x0,0x8,
0xc,0x0,0xf,0xf8,0x0,0xc,0x18,0x0,0x4,0x18,0x0,0x4,0x30,0x0,0x6,0x30,
0x0,0x2,0x30,0x0,0x2,0x60,0x0,0x1,0x60,0x0,0x1,0xc0,0x0,0x1,0xc0,0x0,
0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6,0x30,0x0,0x6,0x30,0x0,
};
static const BitmapCharRec ch196 = {17,21,0,0,17,ch196data};
/* char: 0xc3 */
static const GLubyte ch195data[] = {
0xfc,0x1f,0x80,0x30,0x7,0x0,0x10,0x6,0x0,0x10,0xc,0x0,0x18,0xc,0x0,0x8,
0xc,0x0,0xf,0xf8,0x0,0xc,0x18,0x0,0x4,0x18,0x0,0x4,0x30,0x0,0x6,0x30,
0x0,0x2,0x30,0x0,0x2,0x60,0x0,0x1,0x60,0x0,0x1,0xc0,0x0,0x1,0xc0,0x0,
0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0xe0,0x0,0x3,0x90,0x0,
};
static const BitmapCharRec ch195 = {17,21,0,0,17,ch195data};
/* char: 0xc2 */
static const GLubyte ch194data[] = {
0xfc,0x1f,0x80,0x30,0x6,0x0,0x10,0x6,0x0,0x10,0xc,0x0,0x18,0xc,0x0,0x8,
0xc,0x0,0xf,0xf8,0x0,0xc,0x18,0x0,0x4,0x18,0x0,0x4,0x30,0x0,0x6,0x30,
0x0,0x2,0x30,0x0,0x2,0x60,0x0,0x1,0x60,0x0,0x1,0xc0,0x0,0x1,0xc0,0x0,
0x0,0x80,0x0,0x0,0x0,0x0,0x8,0x10,0x0,0x6,0x60,0x0,0x3,0xc0,0x0,0x1,
0x80,0x0,
};
static const BitmapCharRec ch194 = {17,22,0,0,17,ch194data};
/* char: 0xc1 */
static const GLubyte ch193data[] = {
0xfc,0x1f,0x80,0x30,0x6,0x0,0x10,0x6,0x0,0x10,0xc,0x0,0x18,0xc,0x0,0x8,
0xc,0x0,0xf,0xf8,0x0,0xc,0x18,0x0,0x4,0x18,0x0,0x4,0x30,0x0,0x6,0x30,
0x0,0x2,0x30,0x0,0x2,0x60,0x0,0x1,0x60,0x0,0x1,0xc0,0x0,0x1,0xc0,0x0,
0x0,0x80,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0xc0,0x0,0x0,0x70,0x0,0x0,
0x30,0x0,
};
static const BitmapCharRec ch193 = {17,22,0,0,17,ch193data};
/* char: 0xc0 */
static const GLubyte ch192data[] = {
0xfc,0x1f,0x80,0x30,0x6,0x0,0x10,0x6,0x0,0x10,0xc,0x0,0x18,0xc,0x0,0x8,
0xc,0x0,0xf,0xf8,0x0,0xc,0x18,0x0,0x4,0x18,0x0,0x4,0x30,0x0,0x6,0x30,
0x0,0x2,0x30,0x0,0x2,0x60,0x0,0x1,0x60,0x0,0x1,0xc0,0x0,0x1,0xc0,0x0,
0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x20,0x0,0x0,0xc0,0x0,0x3,0x80,0x0,0x3,
0x0,0x0,
};
static const BitmapCharRec ch192 = {17,22,0,0,17,ch192data};
/* char: 0xbf */
static const GLubyte ch191data[] = {
0x3e,0x63,0xc1,0xc3,0xc3,0xe0,0x70,0x30,0x38,0x18,0x18,0x8,0x8,0x0,0x0,0xc,
0xc,
};
static const BitmapCharRec ch191 = {8,17,-1,5,11,ch191data};
/* char: 0xbe */
static const GLubyte ch190data[] = {
0x18,0x2,0x0,0x8,0x2,0x0,0xc,0x7f,0x80,0x4,0x22,0x0,0x6,0x32,0x0,0x3,
0x12,0x0,0x1,0xa,0x0,0x71,0x8e,0x0,0x88,0x86,0x0,0x8c,0xc2,0x0,0xc,0x60,
0x0,0x8,0x20,0x0,0x30,0x30,0x0,0x8,0x10,0x0,0x8c,0x18,0x0,0x4c,0xc,0x0,
0x38,0x4,0x0,
};
static const BitmapCharRec ch190 = {17,17,0,0,18,ch190data};
/* char: 0xbd */
static const GLubyte ch189data[] = {
0x30,0x7e,0x10,0x22,0x18,0x10,0x8,0x18,0xc,0x8,0x6,0x4,0x2,0x6,0xfb,0x46,
0x21,0x26,0x21,0x9c,0x20,0xc0,0x20,0x40,0x20,0x60,0x20,0x20,0xa0,0x30,0x60,0x18,
0x20,0x8,
};
static const BitmapCharRec ch189 = {15,17,-1,0,18,ch189data};
/* char: 0xbc */
static const GLubyte ch188data[] = {
0x30,0x4,0x10,0x4,0x18,0xff,0x8,0x44,0xc,0x64,0x6,0x24,0x2,0x14,0xfb,0x1c,
0x21,0xc,0x21,0x84,0x20,0xc0,0x20,0x40,0x20,0x60,0x20,0x20,0xa0,0x30,0x60,0x18,
0x20,0x8,
};
static const BitmapCharRec ch188 = {16,17,-1,0,18,ch188data};
/* char: 0xbb */
static const GLubyte ch187data[] = {
0x88,0x0,0xcc,0x0,0x66,0x0,0x33,0x0,0x19,0x80,0x19,0x80,0x33,0x0,0x66,0x0,
0xcc,0x0,0x88,0x0,
};
static const BitmapCharRec ch187 = {9,10,-2,-1,12,ch187data};
/* char: 0xba */
static const GLubyte ch186data[] = {
0xfc,0x0,0x78,0xcc,0xcc,0xcc,0xcc,0xcc,0x78,
};
static const BitmapCharRec ch186 = {6,9,-1,-8,8,ch186data};
/* char: 0xb9 */
static const GLubyte ch185data[] = {
0xf8,0x20,0x20,0x20,0x20,0x20,0x20,0xa0,0x60,0x20,
};
static const BitmapCharRec ch185 = {5,10,-1,-7,7,ch185data};
/* char: 0xb8 */
static const GLubyte ch184data[] = {
0x78,0xcc,0xc,0x3c,0x30,0x10,
};
static const BitmapCharRec ch184 = {6,6,-1,6,8,ch184data};
/* char: 0xb7 */
static const GLubyte ch183data[] = {
0xc0,0xc0,
};
static const BitmapCharRec ch183 = {2,2,-2,-6,6,ch183data};
/* char: 0xb6 */
static const GLubyte ch182data[] = {
0x9,0x0,0x9,0x0,0x9,0x0,0x9,0x0,0x9,0x0,0x9,0x0,0x9,0x0,0x9,0x0,
0x9,0x0,0x9,0x0,0x9,0x0,0x19,0x0,0x39,0x0,0x79,0x0,0x79,0x0,0xf9,0x0,
0xf9,0x0,0xf9,0x0,0x79,0x0,0x79,0x0,0x39,0x0,0x1f,0x80,
};
static const BitmapCharRec ch182 = {9,22,-1,5,11,ch182data};
/* char: 0xb5 */
static const GLubyte ch181data[] = {
0x40,0x0,0xe0,0x0,0xc0,0x0,0x40,0x0,0x40,0x0,0x5c,0xe0,0x7e,0xc0,0x71,0xc0,
0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,
0xe1,0xc0,
};
static const BitmapCharRec ch181 = {11,17,-1,5,13,ch181data};
/* char: 0xb4 */
static const GLubyte ch180data[] = {
0x80,0x60,0x38,0x18,
};
static const BitmapCharRec ch180 = {5,4,-2,-13,8,ch180data};
/* char: 0xb3 */
static const GLubyte ch179data[] = {
0x70,0x88,0x8c,0xc,0x8,0x30,0x8,0x8c,0x4c,0x38,
};
static const BitmapCharRec ch179 = {6,10,0,-7,7,ch179data};
/* char: 0xb2 */
static const GLubyte ch178data[] = {
0xfc,0x44,0x20,0x30,0x10,0x8,0xc,0x8c,0x4c,0x38,
};
static const BitmapCharRec ch178 = {6,10,0,-7,7,ch178data};
/* char: 0xb1 */
static const GLubyte ch177data[] = {
0xff,0xf0,0xff,0xf0,0x0,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,
0xff,0xf0,0xff,0xf0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,
};
static const BitmapCharRec ch177 = {12,15,-1,0,14,ch177data};
/* char: 0xb0 */
static const GLubyte ch176data[] = {
0x38,0x44,0x82,0x82,0x82,0x44,0x38,
};
static const BitmapCharRec ch176 = {7,7,-1,-10,9,ch176data};
/* char: 0xaf */
static const GLubyte ch175data[] = {
0xfc,0xfc,
};
static const BitmapCharRec ch175 = {6,2,-1,-14,8,ch175data};
/* char: 0xae */
static const GLubyte ch174data[] = {
0x7,0xf0,0x0,0x1c,0x1c,0x0,0x30,0x6,0x0,0x60,0x3,0x0,0x47,0x19,0x0,0xc2,
0x31,0x80,0x82,0x20,0x80,0x82,0x40,0x80,0x83,0xe0,0x80,0x82,0x30,0x80,0x82,0x10,
0x80,0xc2,0x11,0x80,0x42,0x31,0x0,0x67,0xe3,0x0,0x30,0x6,0x0,0x1c,0x1c,0x0,
0x7,0xf0,0x0,
};
static const BitmapCharRec ch174 = {17,17,-1,0,19,ch174data};
/* char: 0xad */
static const GLubyte ch173data[] = {
0xfe,0xfe,
};
static const BitmapCharRec ch173 = {7,2,-1,-5,9,ch173data};
/* char: 0xac */
static const GLubyte ch172data[] = {
0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0xff,0xf0,0xff,0xf0,
};
static const BitmapCharRec ch172 = {12,7,-1,-3,14,ch172data};
/* char: 0xab */
static const GLubyte ch171data[] = {
0x8,0x80,0x19,0x80,0x33,0x0,0x66,0x0,0xcc,0x0,0xcc,0x0,0x66,0x0,0x33,0x0,
0x19,0x80,0x8,0x80,
};
static const BitmapCharRec ch171 = {9,10,-2,-1,13,ch171data};
/* char: 0xaa */
static const GLubyte ch170data[] = {
0x7e,0x0,0x76,0xcc,0xcc,0x7c,0xc,0xcc,0x78,
};
static const BitmapCharRec ch170 = {7,9,0,-8,8,ch170data};
/* char: 0xa9 */
static const GLubyte ch169data[] = {
0x7,0xf0,0x0,0x1c,0x1c,0x0,0x30,0x6,0x0,0x61,0xc3,0x0,0x47,0x71,0x0,0xc4,
0x19,0x80,0x8c,0x0,0x80,0x88,0x0,0x80,0x88,0x0,0x80,0x88,0x0,0x80,0x8c,0x0,
0x80,0xc4,0x19,0x80,0x47,0x31,0x0,0x61,0xe3,0x0,0x30,0x6,0x0,0x1c,0x1c,0x0,
0x7,0xf0,0x0,
};
static const BitmapCharRec ch169 = {17,17,-1,0,19,ch169data};
/* char: 0xa8 */
static const GLubyte ch168data[] = {
0xcc,0xcc,
};
static const BitmapCharRec ch168 = {6,2,-1,-14,8,ch168data};
/* char: 0xa7 */
static const GLubyte ch167data[] = {
0x38,0x64,0x62,0x6,0xe,0x1c,0x38,0x74,0xe2,0xc3,0x83,0x87,0x4e,0x3c,0x38,0x70,
0x60,0x46,0x26,0x1c,
};
static const BitmapCharRec ch167 = {8,20,-2,2,12,ch167data};
/* char: 0xa6 */
static const GLubyte ch166data[] = {
0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x0,0x0,0x0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
0xc0,
};
static const BitmapCharRec ch166 = {2,17,-2,0,6,ch166data};
/* char: 0xa5 */
static const GLubyte ch165data[] = {
0xf,0xc0,0x3,0x0,0x3,0x0,0x3,0x0,0x3,0x0,0x1f,0xe0,0x3,0x0,0x1f,0xe0,
0x3,0x0,0x7,0x80,0xc,0x80,0xc,0xc0,0x18,0x40,0x18,0x60,0x30,0x20,0x70,0x30,
0xf8,0x7c,
};
static const BitmapCharRec ch165 = {14,17,0,0,14,ch165data};
/* char: 0xa4 */
static const GLubyte ch164data[] = {
0xc0,0x60,0xee,0xe0,0x7f,0xc0,0x31,0x80,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,
0x31,0x80,0x7f,0xc0,0xee,0xe0,0xc0,0x60,
};
static const BitmapCharRec ch164 = {11,12,-1,-3,13,ch164data};
/* char: 0xa3 */
static const GLubyte ch163data[] = {
0xe7,0x80,0xbe,0xc0,0x78,0x40,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,
0x30,0x0,0xfc,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x31,0x80,0x19,0x80,
0xf,0x0,
};
static const BitmapCharRec ch163 = {10,17,-1,0,12,ch163data};
/* char: 0xa2 */
static const GLubyte ch162data[] = {
0x40,0x0,0x40,0x0,0x3e,0x0,0x7f,0x0,0x70,0x80,0xd0,0x0,0xc8,0x0,0xc8,0x0,
0xc8,0x0,0xc4,0x0,0xc4,0x0,0x43,0x80,0x63,0x80,0x1f,0x0,0x1,0x0,0x1,0x0,
};
static const BitmapCharRec ch162 = {9,16,-1,2,12,ch162data};
/* char: 0xa1 */
static const GLubyte ch161data[] = {
0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x0,0x0,0x0,0xc0,
0xc0,
};
static const BitmapCharRec ch161 = {2,17,-4,5,8,ch161data};
/* char: 0xa0 */
#ifdef _WIN32
/* XXX Work around Microsoft OpenGL 1.1 bug where glBitmap with
a height or width of zero does not advance the raster position
as specified by OpenGL. (Cosmo OpenGL does not have this bug.) */
static const GLubyte ch160data[] = { 0x0 };
static const BitmapCharRec ch160 = {1,1,0,0,6,ch160data};
#else
static const BitmapCharRec ch160 = {0,0,0,0,6,0};
#endif
/* char: 0x7e '~' */
static const GLubyte ch126data[] = {
0x83,0x80,0xc7,0xc0,0x7c,0x60,0x38,0x20,
};
static const BitmapCharRec ch126 = {11,4,-1,-5,13,ch126data};
/* char: 0x7d '}' */
static const GLubyte ch125data[] = {
0xe0,0x30,0x18,0x18,0x18,0x18,0x18,0x18,0x8,0xc,0x4,0x3,0x4,0xc,0x8,0x18,
0x18,0x18,0x18,0x18,0x30,0xe0,
};
static const BitmapCharRec ch125 = {8,22,-1,5,10,ch125data};
/* char: 0x7c '|' */
static const GLubyte ch124data[] = {
0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
0xc0,
};
static const BitmapCharRec ch124 = {2,17,-2,0,6,ch124data};
/* char: 0x7b '{' */
static const GLubyte ch123data[] = {
0x7,0xc,0x18,0x18,0x18,0x18,0x18,0x18,0x10,0x30,0x20,0xc0,0x20,0x30,0x10,0x18,
0x18,0x18,0x18,0x18,0xc,0x7,
};
static const BitmapCharRec ch123 = {8,22,-1,5,10,ch123data};
/* char: 0x7a 'z' */
static const GLubyte ch122data[] = {
0xff,0xc3,0x61,0x70,0x30,0x38,0x18,0x1c,0xe,0x86,0xc3,0xff,
};
static const BitmapCharRec ch122 = {8,12,-1,0,10,ch122data};
/* char: 0x79 'y' */
static const GLubyte ch121data[] = {
0xe0,0x0,0xf0,0x0,0x18,0x0,0x8,0x0,0xc,0x0,0x4,0x0,0xe,0x0,0xe,0x0,
0x1a,0x0,0x19,0x0,0x19,0x0,0x31,0x0,0x30,0x80,0x30,0x80,0x60,0x80,0x60,0xc0,
0xf1,0xe0,
};
static const BitmapCharRec ch121 = {11,17,0,5,11,ch121data};
/* char: 0x78 'x' */
static const GLubyte ch120data[] = {
0xf1,0xe0,0x60,0xc0,0x21,0x80,0x33,0x80,0x1b,0x0,0xe,0x0,0xc,0x0,0x1a,0x0,
0x39,0x0,0x31,0x80,0x60,0xc0,0xf1,0xe0,
};
static const BitmapCharRec ch120 = {11,12,-1,0,13,ch120data};
/* char: 0x77 'w' */
static const GLubyte ch119data[] = {
0x4,0x10,0x0,0xe,0x38,0x0,0xe,0x38,0x0,0x1a,0x28,0x0,0x1a,0x64,0x0,0x19,
0x64,0x0,0x31,0x64,0x0,0x30,0xc2,0x0,0x30,0xc2,0x0,0x60,0xc2,0x0,0x60,0xc3,
0x0,0xf1,0xe7,0x80,
};
static const BitmapCharRec ch119 = {17,12,0,0,17,ch119data};
/* char: 0x76 'v' */
static const GLubyte ch118data[] = {
0x4,0x0,0xe,0x0,0xe,0x0,0x1a,0x0,0x19,0x0,0x19,0x0,0x31,0x0,0x30,0x80,
0x30,0x80,0x60,0x80,0x60,0xc0,0xf1,0xe0,
};
static const BitmapCharRec ch118 = {11,12,0,0,11,ch118data};
/* char: 0x75 'u' */
static const GLubyte ch117data[] = {
0x1c,0xe0,0x3e,0xc0,0x71,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,
0x60,0xc0,0x60,0xc0,0x60,0xc0,0xe1,0xc0,
};
static const BitmapCharRec ch117 = {11,12,-1,0,13,ch117data};
/* char: 0x74 't' */
static const GLubyte ch116data[] = {
0x1c,0x32,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0xfe,0x70,0x30,0x10,
};
static const BitmapCharRec ch116 = {7,15,0,0,7,ch116data};
/* char: 0x73 's' */
static const GLubyte ch115data[] = {
0xf8,0xc6,0x83,0x3,0x7,0x1e,0x7c,0x70,0xe0,0xc2,0x66,0x3e,
};
static const BitmapCharRec ch115 = {8,12,-1,0,10,ch115data};
/* char: 0x72 'r' */
static const GLubyte ch114data[] = {
0xf0,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x76,0x6e,0xe6,
};
static const BitmapCharRec ch114 = {7,12,-1,0,8,ch114data};
/* char: 0x71 'q' */
static const GLubyte ch113data[] = {
0x3,0xc0,0x1,0x80,0x1,0x80,0x1,0x80,0x1,0x80,0x1d,0x80,0x73,0x80,0x61,0x80,
0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0x61,0x80,0x73,0x80,
0x1d,0x80,
};
static const BitmapCharRec ch113 = {10,17,-1,5,12,ch113data};
/* char: 0x70 'p' */
static const GLubyte ch112data[] = {
0xf0,0x0,0x60,0x0,0x60,0x0,0x60,0x0,0x60,0x0,0x6e,0x0,0x73,0x80,0x61,0x80,
0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x61,0x80,0x73,0x80,
0xee,0x0,
};
static const BitmapCharRec ch112 = {10,17,-1,5,12,ch112data};
/* char: 0x6f 'o' */
static const GLubyte ch111data[] = {
0x1e,0x0,0x73,0x80,0x61,0x80,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
0xc0,0xc0,0x61,0x80,0x73,0x80,0x1e,0x0,
};
static const BitmapCharRec ch111 = {10,12,-1,0,12,ch111data};
/* char: 0x6e 'n' */
static const GLubyte ch110data[] = {
0xf1,0xe0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,
0x60,0xc0,0x71,0xc0,0x6f,0x80,0xe7,0x0,
};
static const BitmapCharRec ch110 = {11,12,-1,0,13,ch110data};
/* char: 0x6d 'm' */
static const GLubyte ch109data[] = {
0xf1,0xe3,0xc0,0x60,0xc1,0x80,0x60,0xc1,0x80,0x60,0xc1,0x80,0x60,0xc1,0x80,0x60,
0xc1,0x80,0x60,0xc1,0x80,0x60,0xc1,0x80,0x60,0xc1,0x80,0x71,0xe3,0x80,0x6f,0x9f,
0x0,0xe7,0xe,0x0,
};
static const BitmapCharRec ch109 = {18,12,-1,0,20,ch109data};
/* char: 0x6c 'l' */
static const GLubyte ch108data[] = {
0xf0,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,
0xe0,
};
static const BitmapCharRec ch108 = {4,17,-1,0,6,ch108data};
/* char: 0x6b 'k' */
static const GLubyte ch107data[] = {
0xf3,0xe0,0x61,0xc0,0x63,0x80,0x67,0x0,0x6e,0x0,0x6c,0x0,0x78,0x0,0x68,0x0,
0x64,0x0,0x66,0x0,0x63,0x0,0x67,0xc0,0x60,0x0,0x60,0x0,0x60,0x0,0x60,0x0,
0xe0,0x0,
};
static const BitmapCharRec ch107 = {11,17,-1,0,12,ch107data};
/* char: 0x6a 'j' */
static const GLubyte ch106data[] = {
0xc0,0xe0,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
0x70,0x0,0x0,0x0,0x30,0x30,
};
static const BitmapCharRec ch106 = {4,22,0,5,6,ch106data};
/* char: 0x69 'i' */
static const GLubyte ch105data[] = {
0xf0,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0xe0,0x0,0x0,0x0,0x60,
0x60,
};
static const BitmapCharRec ch105 = {4,17,-1,0,6,ch105data};
/* char: 0x68 'h' */
static const GLubyte ch104data[] = {
0xf1,0xe0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,
0x60,0xc0,0x71,0xc0,0x6f,0x80,0x67,0x0,0x60,0x0,0x60,0x0,0x60,0x0,0x60,0x0,
0xe0,0x0,
};
static const BitmapCharRec ch104 = {11,17,-1,0,13,ch104data};
/* char: 0x67 'g' */
static const GLubyte ch103data[] = {
0x3f,0x0,0xf1,0xc0,0xc0,0x60,0xc0,0x20,0x60,0x60,0x3f,0xc0,0x7f,0x0,0x60,0x0,
0x30,0x0,0x3e,0x0,0x33,0x0,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x33,0x0,
0x1f,0xc0,
};
static const BitmapCharRec ch103 = {11,17,-1,5,12,ch103data};
/* char: 0x66 'f' */
static const GLubyte ch102data[] = {
0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0xfe,0x30,0x30,0x30,0x16,
0xe,
};
static const BitmapCharRec ch102 = {7,17,0,0,7,ch102data};
/* char: 0x65 'e' */
static const GLubyte ch101data[] = {
0x1e,0x0,0x7f,0x0,0x70,0x80,0xe0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x80,
0xc1,0x80,0x41,0x80,0x63,0x0,0x1e,0x0,
};
static const BitmapCharRec ch101 = {9,12,-1,0,11,ch101data};
/* char: 0x64 'd' */
static const GLubyte ch100data[] = {
0x1e,0xc0,0x73,0x80,0x61,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,
0xc1,0x80,0x61,0x80,0x73,0x80,0x1d,0x80,0x1,0x80,0x1,0x80,0x1,0x80,0x1,0x80,
0x3,0x80,
};
static const BitmapCharRec ch100 = {10,17,-1,0,12,ch100data};
/* char: 0x63 'c' */
static const GLubyte ch99data[] = {
0x1e,0x0,0x7f,0x0,0x70,0x80,0xe0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,
0xc0,0x0,0x41,0x80,0x63,0x80,0x1f,0x0,
};
static const BitmapCharRec ch99 = {9,12,-1,0,11,ch99data};
/* char: 0x62 'b' */
static const GLubyte ch98data[] = {
0x5e,0x0,0x73,0x80,0x61,0x80,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,
0x60,0xc0,0x61,0x80,0x73,0x80,0x6e,0x0,0x60,0x0,0x60,0x0,0x60,0x0,0x60,0x0,
0xe0,0x0,
};
static const BitmapCharRec ch98 = {10,17,-1,0,12,ch98data};
/* char: 0x61 'a' */
static const GLubyte ch97data[] = {
0x71,0x80,0xfb,0x0,0xc7,0x0,0xc3,0x0,0xc3,0x0,0x63,0x0,0x3b,0x0,0xf,0x0,
0x3,0x0,0x63,0x0,0x67,0x0,0x3e,0x0,
};
static const BitmapCharRec ch97 = {9,12,-1,0,11,ch97data};
/* char: 0x60 '`' */
static const GLubyte ch96data[] = {
0x60,0xe0,0x80,0xc0,0x60,
};
static const BitmapCharRec ch96 = {3,5,-2,-12,7,ch96data};
/* char: 0x5f '_' */
static const GLubyte ch95data[] = {
0xff,0xf8,0xff,0xf8,
};
static const BitmapCharRec ch95 = {13,2,0,5,13,ch95data};
/* char: 0x5e '^' */
static const GLubyte ch94data[] = {
0x80,0x80,0xc1,0x80,0x41,0x0,0x63,0x0,0x22,0x0,0x36,0x0,0x14,0x0,0x1c,0x0,
0x8,0x0,
};
static const BitmapCharRec ch94 = {9,9,-1,-8,11,ch94data};
/* char: 0x5d ']' */
static const GLubyte ch93data[] = {
0xf8,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
0x18,0x18,0x18,0x18,0xf8,
};
static const BitmapCharRec ch93 = {5,21,-1,4,8,ch93data};
/* char: 0x5c '\' */
static const GLubyte ch92data[] = {
0x6,0x6,0x4,0xc,0xc,0x8,0x18,0x18,0x10,0x30,0x30,0x20,0x60,0x60,0x40,0xc0,
0xc0,
};
static const BitmapCharRec ch92 = {7,17,0,0,7,ch92data};
/* char: 0x5b '[' */
static const GLubyte ch91data[] = {
0xf8,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
0xc0,0xc0,0xc0,0xc0,0xf8,
};
static const BitmapCharRec ch91 = {5,21,-2,4,8,ch91data};
/* char: 0x5a 'Z' */
static const GLubyte ch90data[] = {
0xff,0xf8,0xe0,0x18,0x70,0x8,0x30,0x8,0x38,0x0,0x18,0x0,0x1c,0x0,0xe,0x0,
0x6,0x0,0x7,0x0,0x3,0x0,0x3,0x80,0x1,0xc0,0x80,0xc0,0x80,0xe0,0xc0,0x70,
0xff,0xf0,
};
static const BitmapCharRec ch90 = {13,17,-1,0,15,ch90data};
/* char: 0x59 'Y' */
static const GLubyte ch89data[] = {
0x7,0xe0,0x1,0x80,0x1,0x80,0x1,0x80,0x1,0x80,0x1,0x80,0x1,0x80,0x3,0xc0,
0x3,0x40,0x6,0x60,0x6,0x20,0xc,0x30,0x1c,0x10,0x18,0x18,0x38,0x8,0x30,0xc,
0xfc,0x3f,
};
static const BitmapCharRec ch89 = {16,17,0,0,16,ch89data};
/* char: 0x58 'X' */
static const GLubyte ch88data[] = {
0xfc,0xf,0xc0,0x30,0x3,0x80,0x18,0x7,0x0,0x8,0xe,0x0,0x4,0xc,0x0,0x6,
0x18,0x0,0x2,0x38,0x0,0x1,0x70,0x0,0x0,0xe0,0x0,0x0,0xc0,0x0,0x1,0xc0,
0x0,0x3,0xa0,0x0,0x3,0x10,0x0,0x6,0x8,0x0,0xe,0xc,0x0,0x1c,0x6,0x0,
0x7e,0xf,0x80,
};
static const BitmapCharRec ch88 = {18,17,0,0,18,ch88data};
/* char: 0x57 'W' */
static const GLubyte ch87data[] = {
0x1,0x83,0x0,0x1,0x83,0x0,0x1,0x83,0x80,0x3,0x87,0x80,0x3,0x46,0x80,0x3,
0x46,0xc0,0x6,0x46,0x40,0x6,0x4c,0x40,0x6,0x4c,0x60,0xc,0x2c,0x60,0xc,0x2c,
0x20,0x18,0x2c,0x20,0x18,0x18,0x30,0x18,0x18,0x10,0x30,0x18,0x10,0x30,0x18,0x18,
0xfc,0x7e,0x7e,
};
static const BitmapCharRec ch87 = {23,17,0,0,23,ch87data};
/* char: 0x56 'V' */
static const GLubyte ch86data[] = {
0x1,0x80,0x0,0x1,0x80,0x0,0x1,0x80,0x0,0x3,0xc0,0x0,0x3,0x40,0x0,0x3,
0x60,0x0,0x6,0x20,0x0,0x6,0x20,0x0,0x6,0x30,0x0,0xc,0x10,0x0,0xc,0x18,
0x0,0x18,0x8,0x0,0x18,0x8,0x0,0x18,0xc,0x0,0x30,0x4,0x0,0x30,0x6,0x0,
0xfc,0x1f,0x80,
};
static const BitmapCharRec ch86 = {17,17,0,0,17,ch86data};
/* char: 0x55 'U' */
static const GLubyte ch85data[] = {
0x7,0xe0,0x1c,0x30,0x18,0x8,0x30,0x8,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,
0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,
0xfc,0x1f,
};
static const BitmapCharRec ch85 = {16,17,-1,0,18,ch85data};
/* char: 0x54 'T' */
static const GLubyte ch84data[] = {
0xf,0xc0,0x3,0x0,0x3,0x0,0x3,0x0,0x3,0x0,0x3,0x0,0x3,0x0,0x3,0x0,
0x3,0x0,0x3,0x0,0x3,0x0,0x3,0x0,0x3,0x0,0x83,0x4,0x83,0x4,0xc3,0xc,
0xff,0xfc,
};
static const BitmapCharRec ch84 = {14,17,-1,0,16,ch84data};
/* char: 0x53 'S' */
static const GLubyte ch83data[] = {
0x9e,0x0,0xf1,0x80,0xc0,0xc0,0x80,0x60,0x80,0x60,0x0,0x60,0x0,0xe0,0x3,0xc0,
0xf,0x80,0x1e,0x0,0x78,0x0,0xe0,0x0,0xc0,0x40,0xc0,0x40,0xc0,0xc0,0x63,0xc0,
0x1e,0x40,
};
static const BitmapCharRec ch83 = {11,17,-1,0,13,ch83data};
/* char: 0x52 'R' */
static const GLubyte ch82data[] = {
0xfc,0x1e,0x30,0x1c,0x30,0x38,0x30,0x70,0x30,0x60,0x30,0xc0,0x31,0xc0,0x33,0x80,
0x3f,0xc0,0x30,0x70,0x30,0x30,0x30,0x38,0x30,0x18,0x30,0x38,0x30,0x30,0x30,0x70,
0xff,0xc0,
};
static const BitmapCharRec ch82 = {15,17,-1,0,16,ch82data};
/* char: 0x51 'Q' */
static const GLubyte ch81data[] = {
0x0,0xf,0x0,0x38,0x0,0x70,0x0,0xe0,0x1,0xc0,0x7,0xe0,0x1c,0x38,0x38,0x1c,
0x60,0x6,0x60,0x6,0xc0,0x3,0xc0,0x3,0xc0,0x3,0xc0,0x3,0xc0,0x3,0xc0,0x3,
0xc0,0x3,0x60,0x6,0x60,0x6,0x38,0x1c,0x1c,0x38,0x7,0xe0,
};
static const BitmapCharRec ch81 = {16,22,-1,5,18,ch81data};
/* char: 0x50 'P' */
static const GLubyte ch80data[] = {
0xfc,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,
0x3f,0xc0,0x30,0x70,0x30,0x30,0x30,0x18,0x30,0x18,0x30,0x18,0x30,0x30,0x30,0x70,
0xff,0xc0,
};
static const BitmapCharRec ch80 = {13,17,-1,0,15,ch80data};
/* char: 0x4f 'O' */
static const GLubyte ch79data[] = {
0x7,0xe0,0x1c,0x38,0x38,0x1c,0x60,0x6,0x60,0x6,0xc0,0x3,0xc0,0x3,0xc0,0x3,
0xc0,0x3,0xc0,0x3,0xc0,0x3,0xc0,0x3,0x60,0x6,0x60,0x6,0x38,0x1c,0x1c,0x38,
0x7,0xe0,
};
static const BitmapCharRec ch79 = {16,17,-1,0,18,ch79data};
/* char: 0x4e 'N' */
static const GLubyte ch78data[] = {
0xf8,0xc,0x20,0x1c,0x20,0x1c,0x20,0x34,0x20,0x64,0x20,0x64,0x20,0xc4,0x21,0x84,
0x21,0x84,0x23,0x4,0x26,0x4,0x26,0x4,0x2c,0x4,0x38,0x4,0x38,0x4,0x30,0x4,
0xf0,0x1f,
};
static const BitmapCharRec ch78 = {16,17,-1,0,18,ch78data};
/* char: 0x4d 'M' */
static const GLubyte ch77data[] = {
0xf8,0x21,0xf8,0x20,0x60,0x60,0x20,0x60,0x60,0x20,0xd0,0x60,0x20,0xd0,0x60,0x21,
0x88,0x60,0x21,0x88,0x60,0x23,0x8,0x60,0x23,0x4,0x60,0x26,0x4,0x60,0x26,0x2,
0x60,0x2c,0x2,0x60,0x2c,0x2,0x60,0x38,0x1,0x60,0x38,0x1,0x60,0x30,0x0,0xe0,
0xf0,0x0,0xf8,
};
static const BitmapCharRec ch77 = {21,17,-1,0,22,ch77data};
/* char: 0x4c 'L' */
static const GLubyte ch76data[] = {
0xff,0xf8,0x30,0x18,0x30,0x8,0x30,0x8,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,
0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,
0xfc,0x0,
};
static const BitmapCharRec ch76 = {13,17,-1,0,14,ch76data};
/* char: 0x4b 'K' */
static const GLubyte ch75data[] = {
0xfc,0x1f,0x30,0xe,0x30,0x1c,0x30,0x38,0x30,0x70,0x30,0xe0,0x31,0xc0,0x33,0x80,
0x3f,0x0,0x3e,0x0,0x33,0x0,0x31,0x80,0x30,0xc0,0x30,0x60,0x30,0x30,0x30,0x18,
0xfc,0x7e,
};
static const BitmapCharRec ch75 = {16,17,-1,0,17,ch75data};
/* char: 0x4a 'J' */
static const GLubyte ch74data[] = {
0x78,0x0,0xcc,0x0,0xc6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,
0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,
0x1f,0x80,
};
static const BitmapCharRec ch74 = {9,17,-1,0,11,ch74data};
/* char: 0x49 'I' */
static const GLubyte ch73data[] = {
0xfc,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
0xfc,
};
static const BitmapCharRec ch73 = {6,17,-1,0,8,ch73data};
/* char: 0x48 'H' */
static const GLubyte ch72data[] = {
0xfc,0x1f,0x80,0x30,0x6,0x0,0x30,0x6,0x0,0x30,0x6,0x0,0x30,0x6,0x0,0x30,
0x6,0x0,0x30,0x6,0x0,0x30,0x6,0x0,0x3f,0xfe,0x0,0x30,0x6,0x0,0x30,0x6,
0x0,0x30,0x6,0x0,0x30,0x6,0x0,0x30,0x6,0x0,0x30,0x6,0x0,0x30,0x6,0x0,
0xfc,0x1f,0x80,
};
static const BitmapCharRec ch72 = {17,17,-1,0,19,ch72data};
/* char: 0x47 'G' */
static const GLubyte ch71data[] = {
0x7,0xe0,0x1e,0x38,0x38,0x1c,0x60,0xc,0x60,0xc,0xc0,0xc,0xc0,0xc,0xc0,0x3f,
0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0x60,0x4,0x60,0x4,0x38,0xc,0x1c,0x3c,
0x7,0xe4,
};
static const BitmapCharRec ch71 = {16,17,-1,0,18,ch71data};
/* char: 0x46 'F' */
static const GLubyte ch70data[] = {
0xfc,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x20,0x30,0x20,
0x3f,0xe0,0x30,0x20,0x30,0x20,0x30,0x0,0x30,0x0,0x30,0x10,0x30,0x10,0x30,0x30,
0xff,0xf0,
};
static const BitmapCharRec ch70 = {12,17,-1,0,14,ch70data};
/* char: 0x45 'E' */
static const GLubyte ch69data[] = {
0xff,0xf8,0x30,0x18,0x30,0x8,0x30,0x8,0x30,0x0,0x30,0x0,0x30,0x40,0x30,0x40,
0x3f,0xc0,0x30,0x40,0x30,0x40,0x30,0x0,0x30,0x0,0x30,0x10,0x30,0x10,0x30,0x30,
0xff,0xf0,
};
static const BitmapCharRec ch69 = {13,17,-1,0,15,ch69data};
/* char: 0x44 'D' */
static const GLubyte ch68data[] = {
0xff,0xc0,0x30,0x70,0x30,0x38,0x30,0xc,0x30,0xc,0x30,0x6,0x30,0x6,0x30,0x6,
0x30,0x6,0x30,0x6,0x30,0x6,0x30,0x6,0x30,0xc,0x30,0xc,0x30,0x38,0x30,0x70,
0xff,0xc0,
};
static const BitmapCharRec ch68 = {15,17,-1,0,17,ch68data};
/* char: 0x43 'C' */
static const GLubyte ch67data[] = {
0x7,0xe0,0x1e,0x38,0x38,0x8,0x60,0x4,0x60,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,
0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0x60,0x4,0x60,0x4,0x38,0xc,0x1c,0x3c,
0x7,0xe4,
};
static const BitmapCharRec ch67 = {14,17,-1,0,16,ch67data};
/* char: 0x42 'B' */
static const GLubyte ch66data[] = {
0xff,0xe0,0x30,0x78,0x30,0x18,0x30,0xc,0x30,0xc,0x30,0xc,0x30,0x18,0x30,0x38,
0x3f,0xe0,0x30,0x40,0x30,0x30,0x30,0x18,0x30,0x18,0x30,0x18,0x30,0x30,0x30,0x70,
0xff,0xc0,
};
static const BitmapCharRec ch66 = {14,17,-1,0,16,ch66data};
/* char: 0x41 'A' */
static const GLubyte ch65data[] = {
0xfc,0x1f,0x80,0x30,0x6,0x0,0x10,0x6,0x0,0x10,0xc,0x0,0x18,0xc,0x0,0x8,
0xc,0x0,0xf,0xf8,0x0,0xc,0x18,0x0,0x4,0x18,0x0,0x4,0x30,0x0,0x6,0x30,
0x0,0x2,0x30,0x0,0x2,0x60,0x0,0x1,0x60,0x0,0x1,0xc0,0x0,0x1,0xc0,0x0,
0x0,0x80,0x0,
};
static const BitmapCharRec ch65 = {17,17,0,0,17,ch65data};
/* char: 0x40 '@' */
static const GLubyte ch64data[] = {
0x3,0xf0,0x0,0xe,0xc,0x0,0x18,0x0,0x0,0x30,0x0,0x0,0x61,0xde,0x0,0x63,
0x7b,0x0,0xc6,0x39,0x80,0xc6,0x18,0x80,0xc6,0x18,0xc0,0xc6,0x18,0x40,0xc6,0xc,
0x40,0xc3,0xc,0x40,0xc3,0x8c,0x40,0xe1,0xfc,0x40,0x60,0xec,0xc0,0x70,0x0,0x80,
0x38,0x1,0x80,0x1c,0x3,0x0,0xf,0xe,0x0,0x3,0xf8,0x0,
};
static const BitmapCharRec ch64 = {18,20,-2,3,22,ch64data};
/* char: 0x3f '?' */
static const GLubyte ch63data[] = {
0x30,0x30,0x0,0x0,0x10,0x10,0x10,0x18,0x18,0xc,0xe,0x7,0xc3,0xc3,0x83,0xc6,
0x7c,
};
static const BitmapCharRec ch63 = {8,17,-2,0,11,ch63data};
/* char: 0x3e '>' */
static const GLubyte ch62data[] = {
0xc0,0x0,0x70,0x0,0x1c,0x0,0x7,0x0,0x1,0xc0,0x0,0x60,0x1,0xc0,0x7,0x0,
0x1c,0x0,0x70,0x0,0xc0,0x0,
};
static const BitmapCharRec ch62 = {11,11,-1,-1,13,ch62data};
/* char: 0x3d '=' */
static const GLubyte ch61data[] = {
0xff,0xf0,0xff,0xf0,0x0,0x0,0x0,0x0,0xff,0xf0,0xff,0xf0,
};
static const BitmapCharRec ch61 = {12,6,-1,-4,14,ch61data};
/* char: 0x3c '<' */
static const GLubyte ch60data[] = {
0x0,0x60,0x1,0xc0,0x7,0x0,0x1c,0x0,0x70,0x0,0xc0,0x0,0x70,0x0,0x1c,0x0,
0x7,0x0,0x1,0xc0,0x0,0x60,
};
static const BitmapCharRec ch60 = {11,11,-1,-1,13,ch60data};
/* char: 0x3b ';' */
static const GLubyte ch59data[] = {
0xc0,0x60,0x20,0xe0,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0xc0,
};
static const BitmapCharRec ch59 = {3,14,-2,3,7,ch59data};
/* char: 0x3a ':' */
static const GLubyte ch58data[] = {
0xc0,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0xc0,
};
static const BitmapCharRec ch58 = {2,11,-2,0,6,ch58data};
/* char: 0x39 '9' */
static const GLubyte ch57data[] = {
0xf0,0x0,0x1c,0x0,0x6,0x0,0x3,0x0,0x3,0x80,0x1,0x80,0x1d,0x80,0x73,0xc0,
0x61,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc1,0xc0,0x61,0x80,0x77,0x80,
0x1e,0x0,
};
static const BitmapCharRec ch57 = {10,17,-1,0,12,ch57data};
/* char: 0x38 '8' */
static const GLubyte ch56data[] = {
0x1e,0x0,0x73,0x80,0xe1,0x80,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x41,0xc0,0x61,0x80,
0x37,0x0,0x1e,0x0,0x1e,0x0,0x33,0x0,0x61,0x80,0x61,0x80,0x61,0x80,0x33,0x0,
0x1e,0x0,
};
static const BitmapCharRec ch56 = {10,17,-1,0,12,ch56data};
/* char: 0x37 '7' */
static const GLubyte ch55data[] = {
0x18,0x0,0x18,0x0,0xc,0x0,0xc,0x0,0xc,0x0,0x4,0x0,0x6,0x0,0x6,0x0,
0x2,0x0,0x3,0x0,0x3,0x0,0x1,0x0,0x1,0x80,0x81,0x80,0xc0,0xc0,0xff,0xc0,
0x7f,0xc0,
};
static const BitmapCharRec ch55 = {10,17,-1,0,12,ch55data};
/* char: 0x36 '6' */
static const GLubyte ch54data[] = {
0x1e,0x0,0x7b,0x80,0x61,0x80,0xe0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
0xc1,0x80,0xf3,0x80,0xee,0x0,0x60,0x0,0x70,0x0,0x30,0x0,0x18,0x0,0xe,0x0,
0x3,0xc0,
};
static const BitmapCharRec ch54 = {10,17,-1,0,12,ch54data};
/* char: 0x35 '5' */
static const GLubyte ch53data[] = {
0x7e,0x0,0xe3,0x80,0xc1,0x80,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x1,0xc0,
0x3,0x80,0xf,0x80,0x7e,0x0,0x78,0x0,0x60,0x0,0x20,0x0,0x20,0x0,0x1f,0x80,
0x1f,0xc0,
};
static const BitmapCharRec ch53 = {10,17,-1,0,12,ch53data};
/* char: 0x34 '4' */
static const GLubyte ch52data[] = {
0x3,0x0,0x3,0x0,0x3,0x0,0x3,0x0,0xff,0xc0,0xff,0xc0,0xc3,0x0,0x43,0x0,
0x63,0x0,0x23,0x0,0x33,0x0,0x13,0x0,0x1b,0x0,0xb,0x0,0x7,0x0,0x7,0x0,
0x3,0x0,
};
static const BitmapCharRec ch52 = {10,17,-1,0,12,ch52data};
/* char: 0x33 '3' */
static const GLubyte ch51data[] = {
0x78,0x0,0xe6,0x0,0xc3,0x0,0x1,0x0,0x1,0x80,0x1,0x80,0x1,0x80,0x3,0x80,
0x7,0x0,0x1e,0x0,0xc,0x0,0x6,0x0,0x83,0x0,0x83,0x0,0x47,0x0,0x7e,0x0,
0x1c,0x0,
};
static const BitmapCharRec ch51 = {9,17,-1,0,12,ch51data};
/* char: 0x32 '2' */
static const GLubyte ch50data[] = {
0xff,0x80,0xff,0xc0,0x60,0x40,0x30,0x0,0x18,0x0,0xc,0x0,0x4,0x0,0x6,0x0,
0x3,0x0,0x3,0x0,0x1,0x80,0x1,0x80,0x81,0x80,0x81,0x80,0x43,0x80,0x7f,0x0,
0x1c,0x0,
};
static const BitmapCharRec ch50 = {10,17,-1,0,12,ch50data};
/* char: 0x31 '1' */
static const GLubyte ch49data[] = {
0xff,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x78,0x18,
0x8,
};
static const BitmapCharRec ch49 = {8,17,-2,0,12,ch49data};
/* char: 0x30 '0' */
static const GLubyte ch48data[] = {
0x1e,0x0,0x33,0x0,0x61,0x80,0x61,0x80,0xe1,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x61,0x80,0x61,0x80,0x33,0x0,
0x1e,0x0,
};
static const BitmapCharRec ch48 = {10,17,-1,0,12,ch48data};
/* char: 0x2f '/' */
static const GLubyte ch47data[] = {
0xc0,0xc0,0xc0,0x60,0x60,0x20,0x30,0x30,0x10,0x18,0x18,0x8,0xc,0xc,0x4,0x6,
0x6,0x3,0x3,0x3,
};
static const BitmapCharRec ch47 = {8,20,1,3,7,ch47data};
/* char: 0x2e '.' */
static const GLubyte ch46data[] = {
0xc0,0xc0,
};
static const BitmapCharRec ch46 = {2,2,-2,0,6,ch46data};
/* char: 0x2d '-' */
static const GLubyte ch45data[] = {
0xff,0xf0,0xff,0xf0,
};
static const BitmapCharRec ch45 = {12,2,-1,-6,14,ch45data};
/* char: 0x2c ',' */
static const GLubyte ch44data[] = {
0xc0,0x60,0x20,0xe0,0xc0,
};
static const BitmapCharRec ch44 = {3,5,-2,3,7,ch44data};
/* char: 0x2b '+' */
static const GLubyte ch43data[] = {
0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0xff,0xf0,0xff,0xf0,0x6,0x0,
0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,
};
static const BitmapCharRec ch43 = {12,12,-1,-1,14,ch43data};
/* char: 0x2a '*' */
static const GLubyte ch42data[] = {
0x8,0x0,0x1c,0x0,0xc9,0x80,0xeb,0x80,0x1c,0x0,0xeb,0x80,0xc9,0x80,0x1c,0x0,
0x8,0x0,
};
static const BitmapCharRec ch42 = {9,9,-2,-8,12,ch42data};
/* char: 0x29 ')' */
static const GLubyte ch41data[] = {
0x80,0x40,0x20,0x30,0x10,0x18,0x18,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0x18,
0x18,0x10,0x30,0x20,0x40,0x80,
};
static const BitmapCharRec ch41 = {6,22,-1,5,8,ch41data};
/* char: 0x28 '(' */
static const GLubyte ch40data[] = {
0x4,0x8,0x10,0x30,0x20,0x60,0x60,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x60,
0x60,0x20,0x30,0x10,0x8,0x4,
};
static const BitmapCharRec ch40 = {6,22,-1,5,8,ch40data};
/* char: 0x27 ''' */
static const GLubyte ch39data[] = {
0xc0,0x60,0x20,0xe0,0xc0,
};
static const BitmapCharRec ch39 = {3,5,-3,-12,8,ch39data};
/* char: 0x26 '&' */
static const GLubyte ch38data[] = {
0x3c,0x3c,0x7f,0x7e,0xe1,0xe1,0xc0,0xc0,0xc1,0xc0,0xc1,0xa0,0x63,0x20,0x37,0x10,
0x1e,0x18,0xe,0x3e,0xf,0x0,0x1d,0x80,0x18,0xc0,0x18,0x40,0x18,0x40,0xc,0xc0,
0x7,0x80,
};
static const BitmapCharRec ch38 = {16,17,-1,0,18,ch38data};
/* char: 0x25 '%' */
static const GLubyte ch37data[] = {
0x30,0x3c,0x0,0x18,0x72,0x0,0xc,0x61,0x0,0x4,0x60,0x80,0x6,0x60,0x80,0x3,
0x30,0x80,0x1,0x19,0x80,0x1,0x8f,0x0,0x78,0xc0,0x0,0xe4,0x40,0x0,0xc2,0x60,
0x0,0xc1,0x30,0x0,0xc1,0x10,0x0,0x61,0x18,0x0,0x33,0xfc,0x0,0x1e,0xc,0x0,
};
static const BitmapCharRec ch37 = {17,16,-1,0,19,ch37data};
/* char: 0x24 '$' */
static const GLubyte ch36data[] = {
0x4,0x0,0x4,0x0,0x3f,0x0,0xe5,0xc0,0xc4,0xc0,0x84,0x60,0x84,0x60,0x4,0x60,
0x4,0xe0,0x7,0xc0,0x7,0x80,0x1e,0x0,0x3c,0x0,0x74,0x0,0x64,0x0,0x64,0x20,
0x64,0x60,0x34,0xe0,0x1f,0x80,0x4,0x0,0x4,0x0,
};
static const BitmapCharRec ch36 = {11,21,0,2,12,ch36data};
/* char: 0x23 '#' */
static const GLubyte ch35data[] = {
0x22,0x0,0x22,0x0,0x22,0x0,0x22,0x0,0x22,0x0,0xff,0xc0,0xff,0xc0,0x11,0x0,
0x11,0x0,0x11,0x0,0x7f,0xe0,0x7f,0xe0,0x8,0x80,0x8,0x80,0x8,0x80,0x8,0x80,
0x8,0x80,
};
static const BitmapCharRec ch35 = {11,17,-1,0,13,ch35data};
/* char: 0x22 '"' */
static const GLubyte ch34data[] = {
0x88,0xcc,0xcc,0xcc,0xcc,
};
static const BitmapCharRec ch34 = {6,5,-1,-12,10,ch34data};
/* char: 0x21 '!' */
static const GLubyte ch33data[] = {
0xc0,0xc0,0x0,0x0,0x0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
0xc0,
};
static const BitmapCharRec ch33 = {2,17,-3,0,8,ch33data};
/* char: 0x20 ' ' */
#ifdef _WIN32
/* XXX Work around Microsoft OpenGL 1.1 bug where glBitmap with
a height or width of zero does not advance the raster position
as specified by OpenGL. (Cosmo OpenGL does not have this bug.) */
static const GLubyte ch32data[] = { 0x0 };
static const BitmapCharRec ch32 = {1,1,0,0,6,ch32data};
#else
static const BitmapCharRec ch32 = {0,0,0,0,6,0};
#endif
static const BitmapCharRec * const chars[] = {
&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,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
&ch160,
&ch161,
&ch162,
&ch163,
&ch164,
&ch165,
&ch166,
&ch167,
&ch168,
&ch169,
&ch170,
&ch171,
&ch172,
&ch173,
&ch174,
&ch175,
&ch176,
&ch177,
&ch178,
&ch179,
&ch180,
&ch181,
&ch182,
&ch183,
&ch184,
&ch185,
&ch186,
&ch187,
&ch188,
&ch189,
&ch190,
&ch191,
&ch192,
&ch193,
&ch194,
&ch195,
&ch196,
&ch197,
&ch198,
&ch199,
&ch200,
&ch201,
&ch202,
&ch203,
&ch204,
&ch205,
&ch206,
&ch207,
&ch208,
&ch209,
&ch210,
&ch211,
&ch212,
&ch213,
&ch214,
&ch215,
&ch216,
&ch217,
&ch218,
&ch219,
&ch220,
&ch221,
&ch222,
&ch223,
&ch224,
&ch225,
&ch226,
&ch227,
&ch228,
&ch229,
&ch230,
&ch231,
&ch232,
&ch233,
&ch234,
&ch235,
&ch236,
&ch237,
&ch238,
&ch239,
&ch240,
&ch241,
&ch242,
&ch243,
&ch244,
&ch245,
&ch246,
&ch247,
&ch248,
&ch249,
&ch250,
&ch251,
&ch252,
&ch253,
&ch254,
&ch255,
};
const BitmapFontRec glutBitmapTimesRoman24 = {
"-adobe-times-medium-r-normal--24-240-75-75-p-124-iso8859-1",
224,
32,
chars
};
/* Copyright (c) Mark J. Kilgard, 1994. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include <stdio.h>
#include "glutint.h"
/* strdup is actually not a standard ANSI C or POSIX routine
so implement a private one for GLUT. OpenVMS does not have a
strdup; Linux's standard libc doesn't declare strdup by default
(unless BSD or SVID interfaces are requested). */
char *
__glutStrdup(const char *string)
{
char *copy;
copy = (char*) malloc(strlen(string) + 1);
if (copy == NULL)
return NULL;
strcpy(copy, string);
return copy;
}
void
__glutWarning(char *format,...)
{
va_list args;
va_start(args, format);
fprintf(stderr, "GLUT: Warning in %s: ",
__glutProgramName ? __glutProgramName : "(unamed)");
vfprintf(stderr, format, args);
va_end(args);
putc('\n', stderr);
}
/* CENTRY */
void GLUTAPIENTRY
glutReportErrors(void)
{
GLenum error;
while ((error = glGetError()) != GL_NO_ERROR)
__glutWarning("GL error: %s", gluErrorString(error));
}
/* ENDCENTRY */
void
__glutFatalError(char *format,...)
{
va_list args;
va_start(args, format);
fprintf(stderr, "GLUT: Fatal Error in %s: ",
__glutProgramName ? __glutProgramName : "(unamed)");
vfprintf(stderr, format, args);
va_end(args);
putc('\n', stderr);
#ifdef _WIN32
if (__glutExitFunc) {
__glutExitFunc(1);
}
#endif
exit(1);
}
void
__glutFatalUsage(char *format,...)
{
va_list args;
va_start(args, format);
fprintf(stderr, "GLUT: Fatal API Usage in %s: ",
__glutProgramName ? __glutProgramName : "(unamed)");
vfprintf(stderr, format, args);
va_end(args);
putc('\n', stderr);
abort();
}
/* Copyright (c) Mark J. Kilgard, 1996. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#include <stdlib.h>
#ifdef __sgi
#include <dlfcn.h>
#endif
#include "glutint.h"
/* Grumble. The IRIX 6.3 and early IRIX 6.4 OpenGL headers
support the video resize extension, but failed to define
GLX_SGIX_video_resize. */
#if 0
#ifdef GLX_SYNC_FRAME_SGIX
#define GLX_SGIX_video_resize 1
#endif
#endif
#if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_video_resize)
static int canVideoResize = -1;
static int videoResizeChannel;
#else
static int canVideoResize = 0;
#endif
static int videoResizeInUse = 0;
static int dx = -1, dy = -1, dw = -1, dh = -1;
/* XXX Note that IRIX 6.2, 6.3, and some 6.4 versions have a
bug where programs seg-fault when they attempt video
resizing from an indirect OpenGL context (either local or
over a network). */
#if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_video_resize)
static volatile int errorCaught;
/* ARGSUSED */
static int
catchXSGIvcErrors(Display * dpy, XErrorEvent * event)
{
errorCaught = 1;
return 0;
}
#endif
/* CENTRY */
int GLUTAPIENTRY
glutVideoResizeGet(GLenum param)
{
#if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_video_resize)
if (canVideoResize < 0) {
canVideoResize = __glutIsSupportedByGLX("GLX_SGIX_video_resize");
if (canVideoResize) {
#if defined(__sgi) && __sgi
/* This is a hack because IRIX 6.2, 6.3, and some 6.4
versions were released with GLX_SGIX_video_resize
being advertised by the X server though the video
resize extension is not actually supported. We try to
determine if the libGL.so we are using actually has a
video resize entrypoint before we try to use the
feature. */
void (*func) (void);
void *glxDso = dlopen("libGL.so", RTLD_LAZY);
func = (void (*)(void)) dlsym(glxDso, "glXQueryChannelDeltasSGIX");
if (!func) {
canVideoResize = 0;
} else
#endif
{
char *channelString;
int (*handler) (Display *, XErrorEvent *);
channelString = getenv("GLUT_VIDEO_RESIZE_CHANNEL");
videoResizeChannel = channelString ? atoi(channelString) : 0;
/* Work around another annoying problem with SGI's
GLX_SGIX_video_resize implementation. Early IRIX
6.4 OpenGL's advertise the extension and have the
video resize API, but an XSGIvc X protocol errors
result trying to use the API. Set up an error
handler to intercept what would otherwise be a fatal
error. If an error was recieved, do not report that
video resize is possible. */
handler = XSetErrorHandler(catchXSGIvcErrors);
errorCaught = 0;
#if defined(GLX_GLXEXT_PROTOTYPES)
#endif
__glut_glXQueryChannelDeltasSGIX(__glutDisplay, __glutScreen,
videoResizeChannel, &dx, &dy, &dw, &dh);
/* glXQueryChannelDeltasSGIX is an inherent X server
round-trip so we know we will have gotten either the
correct reply or and error by this time. */
XSetErrorHandler(handler);
/* Still yet another work around. In IRIX 6.4 betas,
glXQueryChannelDeltasSGIX will return as if it
succeeded, but the values are filled with junk.
Watch to make sure the delta variables really make
sense. */
if (errorCaught ||
dx < 0 || dy < 0 || dw < 0 || dh < 0 ||
dx > 2048 || dy > 2048 || dw > 2048 || dh > 2048) {
canVideoResize = 0;
}
}
}
}
#endif /* GLX_SGIX_video_resize */
switch (param) {
case GLUT_VIDEO_RESIZE_POSSIBLE:
return canVideoResize;
case GLUT_VIDEO_RESIZE_IN_USE:
return videoResizeInUse;
case GLUT_VIDEO_RESIZE_X_DELTA:
return dx;
case GLUT_VIDEO_RESIZE_Y_DELTA:
return dy;
case GLUT_VIDEO_RESIZE_WIDTH_DELTA:
return dw;
case GLUT_VIDEO_RESIZE_HEIGHT_DELTA:
return dh;
case GLUT_VIDEO_RESIZE_X:
case GLUT_VIDEO_RESIZE_Y:
case GLUT_VIDEO_RESIZE_WIDTH:
case GLUT_VIDEO_RESIZE_HEIGHT:
#if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_video_resize)
if (videoResizeInUse) {
int x, y, width, height;
__glut_glXQueryChannelRectSGIX(__glutDisplay, __glutScreen,
videoResizeChannel, &x, &y, &width, &height);
switch (param) {
case GLUT_VIDEO_RESIZE_X:
return x;
case GLUT_VIDEO_RESIZE_Y:
return y;
case GLUT_VIDEO_RESIZE_WIDTH:
return width;
case GLUT_VIDEO_RESIZE_HEIGHT:
return height;
}
}
#endif
return -1;
default:
__glutWarning("invalid glutVideoResizeGet parameter: %d", param);
return -1;
}
}
void GLUTAPIENTRY
glutSetupVideoResizing(void)
{
#if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_video_resize)
if (glutVideoResizeGet(GLUT_VIDEO_RESIZE_POSSIBLE)) {
__glut_glXBindChannelToWindowSGIX(__glutDisplay, __glutScreen,
videoResizeChannel, __glutCurrentWindow->win);
videoResizeInUse = 1;
} else
#endif
__glutFatalError("glutEstablishVideoResizing: video resizing not possible.\n");
}
void GLUTAPIENTRY
glutStopVideoResizing(void)
{
#if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_video_resize)
if (glutVideoResizeGet(GLUT_VIDEO_RESIZE_POSSIBLE)) {
if (videoResizeInUse) {
__glut_glXBindChannelToWindowSGIX(__glutDisplay, __glutScreen,
videoResizeChannel, None);
videoResizeInUse = 0;
}
}
#endif
}
/* ARGSUSED */
void GLUTAPIENTRY
glutVideoResize(int x, int y, int width, int height)
{
#if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_video_resize)
if (videoResizeInUse) {
#ifdef GLX_SYNC_SWAP_SGIX
/* glXChannelRectSyncSGIX introduced in a patch to IRIX
6.2; the original unpatched IRIX 6.2 behavior is always
GLX_SYNC_SWAP_SGIX. */
__glut_glXChannelRectSyncSGIX(__glutDisplay, __glutScreen,
videoResizeChannel, GLX_SYNC_SWAP_SGIX);
#endif
__glut_glXChannelRectSGIX(__glutDisplay, __glutScreen,
videoResizeChannel, x, y, width, height);
}
#endif
}
/* ARGSUSED */
void GLUTAPIENTRY
glutVideoPan(int x, int y, int width, int height)
{
#if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_video_resize)
if (videoResizeInUse) {
#ifdef GLX_SYNC_FRAME_SGIX
/* glXChannelRectSyncSGIX introduced in a patch to IRIX
6.2; the original unpatched IRIX 6.2 behavior is always
GLX_SYNC_SWAP_SGIX. We just ignore that we cannot
accomplish GLX_SYNC_FRAME_SGIX on IRIX unpatched 6.2;
this means you'd need a glutSwapBuffers to actually
realize the video resize. */
__glut_glXChannelRectSyncSGIX(__glutDisplay, __glutScreen,
videoResizeChannel, GLX_SYNC_FRAME_SGIX);
#endif
__glut_glXChannelRectSGIX(__glutDisplay, __glutScreen,
videoResizeChannel, x, y, width, height);
}
#endif
}
/* ENDCENTRY */
/* Copyright (c) Mark J. Kilgard, 1996, 1997. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#include <stdlib.h>
#include <stdarg.h>
#include <stdio.h>
#include "glutint.h"
/* CENTRY */
void GLUTAPIENTRY
glutWarpPointer(int x, int y)
{
XWarpPointer(__glutDisplay, None, __glutCurrentWindow->win,
0, 0, 0, 0, x, y);
XFlush(__glutDisplay);
}
/* ENDCENTRY */
#ifndef __glutwin32_h__
#define __glutwin32_h__
/* Copyright (c) Nate Robins, 1997. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#include "win32_x11.h"
#include "win32_glx.h"
/* We have to undef some things because Microsoft likes to pollute the
global namespace. */
#undef TRANSPARENT
/* Win32 "equivalent" cursors - eventually, the X glyphs should be
converted to Win32 cursors -- then they will look the same */
#define XC_arrow IDC_ARROW
#define XC_top_left_arrow IDC_ARROW
#define XC_hand1 IDC_SIZEALL
#define XC_pirate IDC_NO
#define XC_question_arrow IDC_HELP
#define XC_exchange IDC_NO
#define XC_spraycan IDC_SIZEALL
#define XC_watch IDC_WAIT
#define XC_xterm IDC_IBEAM
#define XC_crosshair IDC_CROSS
#define XC_sb_v_double_arrow IDC_SIZENS
#define XC_sb_h_double_arrow IDC_SIZEWE
#define XC_top_side IDC_UPARROW
#define XC_bottom_side IDC_SIZENS
#define XC_left_side IDC_SIZEWE
#define XC_right_side IDC_SIZEWE
#define XC_top_left_corner IDC_SIZENWSE
#define XC_top_right_corner IDC_SIZENESW
#define XC_bottom_right_corner IDC_SIZENWSE
#define XC_bottom_left_corner IDC_SIZENESW
#define XA_STRING 0
/* Private routines from win32_util.c */
#ifndef __CYGWIN32__
extern int gettimeofday(struct timeval* tp, void* tzp);
#endif
extern void *__glutFont(void *font);
extern int __glutGetTransparentPixel(Display *dpy, XVisualInfo *vinfo);
extern void __glutAdjustCoords(Window parent, int *x, int *y, int *width, int *height);
/* Cygwin B20.1 misses the following definitions */
#ifdef __CYGWIN32__
/* from winuser.h */
#define CDS_FULLSCREEN 4
/* from mmsystem.h */
#define WINMMAPI __declspec(dllimport)
typedef UINT MMRESULT;
#define MM_JOY1MOVE 0x3A0
#define MM_JOY1ZMOVE 0x3A2
#define MM_JOY1BUTTONDOWN 0x3B5
#define MM_JOY1BUTTONUP 0x3B7
#define JOYERR_NOERROR 0
#define JOYERR_PARMS 165
#define JOY_RETURNALL 0x000000ffl
#define JOYSTICKID1 0
typedef struct joyinfoex_tag {
DWORD dwSize; /* size of structure */
DWORD dwFlags; /* flags to indicate what to return */
DWORD dwXpos; /* x position */
DWORD dwYpos; /* y position */
DWORD dwZpos; /* z position */
DWORD dwRpos; /* rudder/4th axis position */
DWORD dwUpos; /* 5th axis position */
DWORD dwVpos; /* 6th axis position */
DWORD dwButtons; /* button states */
DWORD dwButtonNumber; /* current button number pressed */
DWORD dwPOV; /* point of view state */
DWORD dwReserved1; /* reserved for communication between winmm & driver */
DWORD dwReserved2; /* reserved for future expansion */
} JOYINFOEX, *PJOYINFOEX, /* NEAR */ *NPJOYINFOEX, /* FAR */ *LPJOYINFOEX;
WINMMAPI MMRESULT WINAPI joyGetPosEx( UINT uJoyID, LPJOYINFOEX pji);
WINMMAPI MMRESULT WINAPI joyReleaseCapture( UINT uJoyID);
WINMMAPI MMRESULT WINAPI joySetCapture( HWND hwnd, UINT uJoyID, UINT uPeriod, BOOL fChanged);
WINMMAPI MMRESULT WINAPI joySetThreshold( UINT uJoyID, UINT uThreshold);
#endif
#endif /* __glutwin32_h__ */
/* Copyright (c) Mark J. Kilgard, 1994, 1997. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#ifdef __VMS
#include <GL/vms_x_fix.h>
#endif
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <assert.h>
#if !defined(_WIN32)
#include <X11/Xlib.h>
#include <X11/Xatom.h>
#endif
#include "glutint.h"
GLUTwindow *__glutCurrentWindow = NULL;
GLUTwindow **__glutWindowList = NULL;
int __glutWindowListSize = 0;
#if !defined(_WIN32)
GLUTstale *__glutStaleWindowList = NULL;
#endif
GLUTwindow *__glutMenuWindow = NULL;
void (*__glutFreeOverlayFunc) (GLUToverlay *);
XVisualInfo *(*__glutDetermineVisualFromString) (char *string, Bool * treatAsSingle,
Criterion * requiredCriteria, int nRequired, int requiredMask, void **fbc) = NULL;
static Criterion requiredWindowCriteria[] =
{
{LEVEL, EQ, 0},
{TRANSPARENT, EQ, 0}
};
static int numRequiredWindowCriteria = sizeof(requiredWindowCriteria) / sizeof(Criterion);
static int requiredWindowCriteriaMask = (1 << LEVEL) | (1 << TRANSPARENT);
static void
cleanWindowWorkList(GLUTwindow * window)
{
GLUTwindow **pEntry = &__glutWindowWorkList;
GLUTwindow *entry = __glutWindowWorkList;
/* Tranverse singly-linked window work list look for the
window. */
while (entry) {
if (entry == window) {
/* Found it; delete it. */
*pEntry = entry->prevWorkWin;
return;
} else {
pEntry = &entry->prevWorkWin;
entry = *pEntry;
}
}
}
#if !defined(_WIN32)
static void
cleanStaleWindowList(GLUTwindow * window)
{
GLUTstale **pEntry = &__glutStaleWindowList;
GLUTstale *entry = __glutStaleWindowList;
/* Tranverse singly-linked stale window list look for the
window ID. */
while (entry) {
if (entry->window == window) {
/* Found it; delete it. */
*pEntry = entry->next;
free(entry);
return;
} else {
pEntry = &entry->next;
entry = *pEntry;
}
}
}
#endif
static GLUTwindow *__glutWindowCache = NULL;
GLUTwindow *
__glutGetWindow(Window win)
{
int i;
/* Does win belong to the last window ID looked up? */
if (__glutWindowCache && (win == __glutWindowCache->win ||
(__glutWindowCache->overlay && win ==
__glutWindowCache->overlay->win))) {
return
__glutWindowCache;
}
/* Otherwise scan the window list looking for the window ID. */
for (i = 0; i < __glutWindowListSize; i++) {
if (__glutWindowList[i]) {
if (win == __glutWindowList[i]->win) {
__glutWindowCache = __glutWindowList[i];
return __glutWindowCache;
}
if (__glutWindowList[i]->overlay) {
if (win == __glutWindowList[i]->overlay->win) {
__glutWindowCache = __glutWindowList[i];
return __glutWindowCache;
}
}
}
}
#if !defined(_WIN32)
{
GLUTstale *entry;
/* Scan through destroyed overlay window IDs for which no
DestroyNotify has yet been received. */
for (entry = __glutStaleWindowList; entry; entry = entry->next) {
if (entry->win == win)
return entry->window;
}
}
#endif
return NULL;
}
/* CENTRY */
int GLUTAPIENTRY
glutGetWindow(void)
{
if (__glutCurrentWindow) {
return __glutCurrentWindow->num + 1;
} else {
return 0;
}
}
/* ENDCENTRY */
void
__glutSetWindow(GLUTwindow * window)
{
/* It is tempting to try to short-circuit the call to
glXMakeCurrent if we "know" we are going to make current
to a window we are already current to. In fact, this
assumption breaks when GLUT is expected to integrated with
other OpenGL windowing APIs that also make current to
OpenGL contexts. Since glXMakeCurrent short-circuits the
"already bound" case, GLUT avoids the temptation to do so
too. */
__glutCurrentWindow = window;
MAKE_CURRENT_LAYER(__glutCurrentWindow);
#if !defined(_WIN32)
/* We should be careful to force a finish between each
iteration through the GLUT main loop if indirect OpenGL
contexts are in use; indirect contexts tend to have much
longer latency because lots of OpenGL extension requests
can queue up in the X protocol stream. We accomplish this
by posting GLUT_FINISH_WORK to be done. */
if (!__glutCurrentWindow->isDirect)
__glutPutOnWorkList(__glutCurrentWindow, GLUT_FINISH_WORK);
#endif
/* If debugging is enabled, we'll want to check this window
for any OpenGL errors every iteration through the GLUT
main loop. To accomplish this, we post the
GLUT_DEBUG_WORK to be done on this window. */
if (__glutDebug) {
__glutPutOnWorkList(__glutCurrentWindow, GLUT_DEBUG_WORK);
}
}
/* CENTRY */
void GLUTAPIENTRY
glutSetWindow(int win)
{
GLUTwindow *window;
if (win < 1 || win > __glutWindowListSize) {
__glutWarning("glutSetWindow attempted on bogus window.");
return;
}
window = __glutWindowList[win - 1];
if (!window) {
__glutWarning("glutSetWindow attempted on bogus window.");
return;
}
__glutSetWindow(window);
}
/* ENDCENTRY */
static int
getUnusedWindowSlot(void)
{
int i;
/* Look for allocated, unused slot. */
for (i = 0; i < __glutWindowListSize; i++) {
if (!__glutWindowList[i]) {
return i;
}
}
/* Allocate a new slot. */
__glutWindowListSize++;
if (__glutWindowList) {
__glutWindowList = (GLUTwindow **)
realloc(__glutWindowList,
__glutWindowListSize * sizeof(GLUTwindow *));
} else {
/* XXX Some realloc's do not correctly perform a malloc
when asked to perform a realloc on a NULL pointer,
though the ANSI C library spec requires this. */
__glutWindowList = (GLUTwindow **)
malloc(sizeof(GLUTwindow *));
}
if (!__glutWindowList)
__glutFatalError("out of memory.");
__glutWindowList[__glutWindowListSize - 1] = NULL;
return __glutWindowListSize - 1;
}
static XVisualInfo *
getVisualInfoCI(unsigned int mode)
{
static int bufSizeList[] =
{16, 12, 8, 4, 2, 1, 0};
XVisualInfo *vi;
int list[32];
int i, n = 0;
/* Should not be looking at display mode mask if
__glutDisplayString is non-NULL. */
assert(!__glutDisplayString);
list[n++] = GLX_BUFFER_SIZE;
list[n++] = 1;
if (GLUT_WIND_IS_DOUBLE(mode)) {
list[n++] = GLX_DOUBLEBUFFER;
}
if (GLUT_WIND_IS_STEREO(mode)) {
list[n++] = GLX_STEREO;
}
if (GLUT_WIND_HAS_DEPTH(mode)) {
list[n++] = GLX_DEPTH_SIZE;
list[n++] = 1;
}
if (GLUT_WIND_HAS_STENCIL(mode)) {
list[n++] = GLX_STENCIL_SIZE;
list[n++] = 1;
}
list[n] = (int) None; /* terminate list */
/* glXChooseVisual specify GLX_BUFFER_SIZE prefers the
"smallest index buffer of at least the specified size".
This would be reasonable if GLUT allowed the user to
specify the required buffe size, but GLUT's display mode
is too simplistic (easy to use?). GLUT should try to find
the "largest". So start with a large buffer size and
shrink until we find a matching one that exists. */
for (i = 0; bufSizeList[i]; i++) {
/* XXX Assumes list[1] is where GLX_BUFFER_SIZE parameter
is. */
list[1] = bufSizeList[i];
vi = glXChooseVisual(__glutDisplay,
__glutScreen, list);
if (vi)
return vi;
}
return NULL;
}
static XVisualInfo *
getVisualInfoRGB(unsigned int mode)
{
int list[32];
int n = 0;
/* Should not be looking at display mode mask if
__glutDisplayString is non-NULL. */
assert(!__glutDisplayString);
/* XXX Would a caching mechanism to minize the calls to
glXChooseVisual? You'd have to reference count
XVisualInfo* pointers. Would also have to properly
interact with glutInitDisplayString. */
list[n++] = GLX_RGBA;
list[n++] = GLX_RED_SIZE;
list[n++] = 1;
list[n++] = GLX_GREEN_SIZE;
list[n++] = 1;
list[n++] = GLX_BLUE_SIZE;
list[n++] = 1;
if (GLUT_WIND_HAS_ALPHA(mode)) {
list[n++] = GLX_ALPHA_SIZE;
list[n++] = 1;
}
if (GLUT_WIND_IS_DOUBLE(mode)) {
list[n++] = GLX_DOUBLEBUFFER;
}
if (GLUT_WIND_IS_STEREO(mode)) {
list[n++] = GLX_STEREO;
}
if (GLUT_WIND_HAS_DEPTH(mode)) {
list[n++] = GLX_DEPTH_SIZE;
list[n++] = 1;
}
if (GLUT_WIND_HAS_STENCIL(mode)) {
list[n++] = GLX_STENCIL_SIZE;
list[n++] = 1;
}
if (GLUT_WIND_HAS_ACCUM(mode)) {
list[n++] = GLX_ACCUM_RED_SIZE;
list[n++] = 1;
list[n++] = GLX_ACCUM_GREEN_SIZE;
list[n++] = 1;
list[n++] = GLX_ACCUM_BLUE_SIZE;
list[n++] = 1;
if (GLUT_WIND_HAS_ALPHA(mode)) {
list[n++] = GLX_ACCUM_ALPHA_SIZE;
list[n++] = 1;
}
}
#if defined(GLX_VERSION_1_1) && (defined(GLX_SGIS_multisample) || defined(GLX_ARB_multisample))
if (GLUT_WIND_IS_MULTISAMPLE(mode)) {
if (!__glutIsSupportedByGLX("GLX_SGIS_multisample") &&
!__glutIsSupportedByGLX("GLX_ARB_multisample"))
return NULL;
#if defined(GLX_ARB_multisample)
list[n++] = GLX_SAMPLES_ARB;
#elif defined(GLX_SGIS_multisample)
list[n++] = GLX_SAMPLES_SGIS;
#endif
/* XXX Is 4 a reasonable minimum acceptable number of
samples? */
list[n++] = 4;
}
#endif
list[n] = (int) None; /* terminate list */
return glXChooseVisual(__glutDisplay,
__glutScreen, list);
}
#ifndef VisualIDMask
#define VisualIDMask 0
#endif
static XVisualInfo *
getVisualInfoID(int id)
{
XVisualInfo temp;
int count;
#if !defined(_WIN32)
temp.visualid = id;
#endif
return XGetVisualInfo(__glutDisplay, VisualIDMask, &temp, &count);
}
XVisualInfo *
__glutGetVisualInfo(unsigned int mode)
{
char *visStr;
/* XXX GLUT_LUMINANCE not implemented for GLUT 3.0. */
if (GLUT_WIND_IS_LUMINANCE(mode))
return NULL;
visStr = getenv("GLUT_FORCE_VISUAL");
if (visStr) {
int id = atoi(visStr);
return getVisualInfoID(id);
}
if (GLUT_WIND_IS_RGB(mode))
return getVisualInfoRGB(mode);
else
return getVisualInfoCI(mode);
}
XVisualInfo *
__glutDetermineVisual(
unsigned int displayMode,
Bool * treatAsSingle,
XVisualInfo * (getVisualInfo) (unsigned int))
{
XVisualInfo *vis;
/* Should not be looking at display mode mask if
__glutDisplayString is non-NULL. */
assert(!__glutDisplayString);
*treatAsSingle = GLUT_WIND_IS_SINGLE(displayMode);
vis = getVisualInfo(displayMode);
if (!vis) {
/* Fallback cases when can't get exactly what was asked
for... */
if (GLUT_WIND_IS_SINGLE(displayMode)) {
/* If we can't find a single buffered visual, try looking
for a double buffered visual. We can treat a double
buffered visual as a single buffer visual by changing
the draw buffer to GL_FRONT and treating any swap
buffers as no-ops. */
displayMode |= GLUT_DOUBLE;
vis = getVisualInfo(displayMode);
*treatAsSingle = True;
}
if (!vis && GLUT_WIND_IS_MULTISAMPLE(displayMode)) {
/* If we can't seem to get multisampling (ie, not Reality
Engine class graphics!), go without multisampling. It
is up to the application to query how many multisamples
were allocated (0 equals no multisampling) if the
application is going to use multisampling for more than
just antialiasing. */
displayMode &= ~GLUT_MULTISAMPLE;
vis = getVisualInfo(displayMode);
}
}
return vis;
}
static void GLUTCALLBACK
__glutDefaultDisplay(void)
{
/* XXX Remove the warning after GLUT 3.0. */
__glutWarning("The following is a new check for GLUT 3.0; update your code.");
__glutFatalError(
"redisplay needed for window %d, but no display callback.",
__glutCurrentWindow->num + 1);
}
void GLUTCALLBACK
__glutDefaultReshape(int width, int height)
{
GLUToverlay *overlay;
/* Adjust the viewport of the window (and overlay if one
exists). */
MAKE_CURRENT_WINDOW(__glutCurrentWindow);
glViewport(0, 0, (GLsizei) width, (GLsizei) height);
overlay = __glutCurrentWindow->overlay;
if (overlay) {
MAKE_CURRENT_OVERLAY(overlay);
glViewport(0, 0, (GLsizei) width, (GLsizei) height);
}
/* Make sure we are current to the current layer (application
should be able to count on the current layer not changing
unless the application explicitly calls glutUseLayer). */
MAKE_CURRENT_LAYER(__glutCurrentWindow);
}
XVisualInfo *
__glutDetermineWindowVisual(Bool * treatAsSingle, Bool * visAlloced, void **fbc)
{
if (__glutDisplayString) {
/* __glutDisplayString should be NULL except if
glutInitDisplayString has been called to register a
different display string. Calling glutInitDisplayString
means using a string instead of an integer mask determine
the visual to use. Using the function pointer variable
__glutDetermineVisualFromString below avoids linking in
the code for implementing glutInitDisplayString (ie,
glut_dstr.o) unless glutInitDisplayString gets called by
the application. */
assert(__glutDetermineVisualFromString);
*visAlloced = False;
*fbc = NULL;
return __glutDetermineVisualFromString(__glutDisplayString, treatAsSingle,
requiredWindowCriteria, numRequiredWindowCriteria, requiredWindowCriteriaMask, fbc);
} else {
*visAlloced = True;
*fbc = NULL;
return __glutDetermineVisual(__glutDisplayMode,
treatAsSingle, __glutGetVisualInfo);
}
}
/* ARGSUSED5 */ /* Only Win32 uses gameMode parameter. */
GLUTwindow *
__glutCreateWindow(GLUTwindow * parent,
int x, int y, int width, int height, int gameMode)
{
GLUTwindow *window;
XSetWindowAttributes wa;
unsigned long attribMask;
int winnum;
int i;
void *fbc;
#if defined(_WIN32)
WNDCLASS wc;
int style;
if (!GetClassInfo(GetModuleHandle(NULL), "GLUT", &wc)) {
__glutOpenWin32Connection(NULL);
}
#else
if (!__glutDisplay) {
__glutOpenXConnection(NULL);
}
#endif
if (__glutGameModeWindow) {
__glutFatalError("cannot create windows in game mode.");
}
winnum = getUnusedWindowSlot();
window = (GLUTwindow *) malloc(sizeof(GLUTwindow));
if (!window) {
__glutFatalError("out of memory.");
}
window->num = winnum;
#if !defined(_WIN32)
window->vis = __glutDetermineWindowVisual(&window->treatAsSingle,
&window->visAlloced, &fbc);
if (!window->vis) {
__glutFatalError(
"visual with necessary capabilities not found.");
}
__glutSetupColormap(window->vis, &window->colormap, &window->cmap);
#endif
window->eventMask = StructureNotifyMask | ExposureMask;
attribMask = CWBackPixmap | CWBorderPixel | CWColormap | CWEventMask;
wa.background_pixmap = None;
wa.border_pixel = 0;
wa.colormap = window->cmap;
wa.event_mask = window->eventMask;
if (parent) {
if (parent->eventMask & GLUT_HACK_STOP_PROPAGATE_MASK)
wa.event_mask |= GLUT_HACK_STOP_PROPAGATE_MASK;
attribMask |= CWDontPropagate;
wa.do_not_propagate_mask = parent->eventMask & GLUT_DONT_PROPAGATE_FILTER_MASK;
} else {
wa.do_not_propagate_mask = 0;
}
/* Stash width and height before Win32's __glutAdjustCoords
possibly overwrites the values. */
window->width = width;
window->height = height;
window->forceReshape = True;
window->ignoreKeyRepeat = False;
#if defined(_WIN32)
__glutAdjustCoords(parent ? parent->win : NULL,
&x, &y, &width, &height);
if (parent) {
style = WS_CHILD;
} else {
if (gameMode) {
/* Game mode window should be a WS_POPUP window to
ensure that the taskbar is hidden by it. A standard
WS_OVERLAPPEDWINDOW does not hide the task bar. */
style = WS_POPUP | WS_MAXIMIZE;
} else {
/* A standard toplevel window with borders and such. */
style = WS_OVERLAPPEDWINDOW;
}
}
window->win = CreateWindow("GLUT", "GLUT",
WS_CLIPSIBLINGS | WS_CLIPCHILDREN | style,
x, y, width, height, parent ? parent->win : __glutRoot,
NULL, GetModuleHandle(NULL), 0);
window->hdc = GetDC(window->win);
/* Must set the XHDC for fake glXChooseVisual & fake
glXCreateContext & fake XAllocColorCells. */
XHDC = window->hdc;
window->vis = __glutDetermineWindowVisual(&window->treatAsSingle,
&window->visAlloced, &fbc);
if (!window->vis) {
__glutFatalError(
"pixel format with necessary capabilities not found.");
}
if (!SetPixelFormat(window->hdc,
ChoosePixelFormat(window->hdc, window->vis),
window->vis)) {
__glutFatalError("SetPixelFormat failed during window create.");
}
__glutSetupColormap(window->vis, &window->colormap, &window->cmap);
/* Make sure subwindows get a windowStatus callback. */
if (parent) {
PostMessage(parent->win, WM_ACTIVATE, 0, 0);
}
window->renderDc = window->hdc;
#else
window->win = XCreateWindow(__glutDisplay,
parent == NULL ? __glutRoot : parent->win,
x, y, width, height, 0,
window->vis->depth, InputOutput, window->vis->visual,
attribMask, &wa);
#endif
window->renderWin = window->win;
#if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_fbconfig)
if (fbc) {
window->ctx = __glut_glXCreateContextWithConfigSGIX(__glutDisplay, fbc,
GLX_RGBA_TYPE_SGIX, None, __glutTryDirect);
} else
#endif
{
window->ctx = glXCreateContext(__glutDisplay, window->vis,
None, __glutTryDirect);
}
if (!window->ctx) {
__glutFatalError(
"failed to create OpenGL rendering context.");
}
window->renderCtx = window->ctx;
#if !defined(_WIN32)
window->isDirect = glXIsDirect(__glutDisplay, window->ctx);
if (__glutForceDirect) {
if (!window->isDirect)
__glutFatalError("direct rendering not possible.");
}
#endif
window->parent = parent;
if (parent) {
window->siblings = parent->children;
parent->children = window;
} else {
window->siblings = NULL;
}
window->overlay = NULL;
window->children = NULL;
window->display = __glutDefaultDisplay;
window->reshape = __glutDefaultReshape;
window->mouse = NULL;
window->motion = NULL;
window->passive = NULL;
window->entry = NULL;
window->keyboard = NULL;
window->keyboardUp = NULL;
window->windowStatus = NULL;
window->visibility = NULL;
window->special = NULL;
window->specialUp = NULL;
window->buttonBox = NULL;
window->dials = NULL;
window->spaceMotion = NULL;
window->spaceRotate = NULL;
window->spaceButton = NULL;
window->tabletMotion = NULL;
window->tabletButton = NULL;
#ifdef _WIN32
window->joystick = NULL;
window->joyPollInterval = 0;
#endif
window->tabletPos[0] = -1;
window->tabletPos[1] = -1;
window->shownState = 0;
window->visState = -1; /* not VisibilityUnobscured,
VisibilityPartiallyObscured, or
VisibilityFullyObscured */
window->entryState = -1; /* not EnterNotify or LeaveNotify */
window->desiredConfMask = 0;
window->buttonUses = 0;
window->cursor = GLUT_CURSOR_INHERIT;
/* Setup window to be mapped when glutMainLoop starts. */
window->workMask = GLUT_MAP_WORK;
#ifdef _WIN32
if (gameMode) {
/* When mapping a game mode window, just show
the window. We have already created the game
mode window with a maximize flag at creation
time. Doing a ShowWindow(window->win, SW_SHOWNORMAL)
would be wrong for a game mode window since it
would unmaximize the window. */
window->desiredMapState = GameModeState;
} else {
window->desiredMapState = NormalState;
}
#else
window->desiredMapState = NormalState;
#endif
window->prevWorkWin = __glutWindowWorkList;
__glutWindowWorkList = window;
/* Initially, no menus attached. */
for (i = 0; i < GLUT_MAX_MENUS; i++) {
window->menu[i] = 0;
}
/* Add this new window to the window list. */
__glutWindowList[winnum] = window;
/* Make the new window the current window. */
__glutSetWindow(window);
__glutDetermineMesaSwapHackSupport();
if (window->treatAsSingle) {
/* We do this because either the window really is single
buffered (in which case this is redundant, but harmless,
because this is the initial single-buffered context
state); or we are treating a double buffered window as a
single-buffered window because the system does not appear
to export any suitable single- buffered visuals (in which
the following are necessary). */
glDrawBuffer(GL_FRONT);
glReadBuffer(GL_FRONT);
}
return window;
}
/* CENTRY */
int GLUTAPIENTRY
glutCreateWindow(const char *title)
{
static int firstWindow = 1;
GLUTwindow *window;
#if !defined(_WIN32)
XWMHints *wmHints;
#endif
Window win;
XTextProperty textprop;
if (__glutGameModeWindow) {
__glutFatalError("cannot create windows in game mode.");
}
window = __glutCreateWindow(NULL,
__glutSizeHints.x, __glutSizeHints.y,
__glutInitWidth, __glutInitHeight,
/* not game mode */ 0);
win = window->win;
/* Setup ICCCM properties. */
textprop.value = (unsigned char *) title;
textprop.encoding = XA_STRING;
textprop.format = 8;
textprop.nitems = strlen(title);
#if defined(_WIN32)
SetWindowText(win, title);
if (__glutIconic) {
window->desiredMapState = IconicState;
}
#else
wmHints = XAllocWMHints();
wmHints->initial_state =
__glutIconic ? IconicState : NormalState;
wmHints->flags = StateHint;
XSetWMProperties(__glutDisplay, win, &textprop, &textprop,
/* Only put WM_COMMAND property on first window. */
firstWindow ? __glutArgv : NULL,
firstWindow ? __glutArgc : 0,
&__glutSizeHints, wmHints, NULL);
XFree(wmHints);
XSetWMProtocols(__glutDisplay, win, &__glutWMDeleteWindow, 1);
#endif
firstWindow = 0;
return window->num + 1;
}
#ifdef _WIN32
int GLUTAPIENTRY
__glutCreateWindowWithExit(const char *title, void (__cdecl *exitfunc)(int))
{
__glutExitFunc = exitfunc;
return glutCreateWindow(title);
}
#endif
int GLUTAPIENTRY
glutCreateSubWindow(int win, int x, int y, int width, int height)
{
GLUTwindow *window;
window = __glutCreateWindow(__glutWindowList[win - 1],
x, y, width, height, /* not game mode */ 0);
#if !defined(_WIN32)
{
GLUTwindow *toplevel;
toplevel = __glutToplevelOf(window);
if (toplevel->cmap != window->cmap) {
__glutPutOnWorkList(toplevel, GLUT_COLORMAP_WORK);
}
}
#endif
return window->num + 1;
}
/* ENDCENTRY */
void
__glutDestroyWindow(GLUTwindow * window,
GLUTwindow * initialWindow)
{
GLUTwindow **prev, *cur, *parent, *siblings;
/* Recursively destroy any children. */
cur = window->children;
while (cur) {
siblings = cur->siblings;
__glutDestroyWindow(cur, initialWindow);
cur = siblings;
}
/* Remove from parent's children list (only necessary for
non-initial windows and subwindows!). */
parent = window->parent;
if (parent && parent == initialWindow->parent) {
prev = &parent->children;
cur = parent->children;
while (cur) {
if (cur == window) {
*prev = cur->siblings;
break;
}
prev = &(cur->siblings);
cur = cur->siblings;
}
}
/* Unbind if bound to this window. */
if (window == __glutCurrentWindow) {
UNMAKE_CURRENT();
__glutCurrentWindow = NULL;
}
/* Begin tearing down window itself. */
if (window->overlay) {
__glutFreeOverlayFunc(window->overlay);
}
XDestroyWindow(__glutDisplay, window->win);
glXDestroyContext(__glutDisplay, window->ctx);
if (window->colormap) {
/* Only color index windows have colormap data structure. */
__glutFreeColormap(window->colormap);
}
/* NULLing the __glutWindowList helps detect is a window
instance has been destroyed, given a window number. */
__glutWindowList[window->num] = NULL;
/* Cleanup data structures that might contain window. */
cleanWindowWorkList(window);
#if !defined(_WIN32)
cleanStaleWindowList(window);
#endif
/* Remove window from the "get window cache" if it is there. */
if (__glutWindowCache == window)
__glutWindowCache = NULL;
if (window->visAlloced) {
/* Only free XVisualInfo* gotten from glXChooseVisual. */
XFree(window->vis);
}
if (window == __glutGameModeWindow) {
/* Destroying the game mode window should implicitly
have GLUT leave game mode. */
__glutCloseDownGameMode();
}
free(window);
}
/* CENTRY */
void GLUTAPIENTRY
glutDestroyWindow(int win)
{
GLUTwindow *window = __glutWindowList[win - 1];
if (__glutMappedMenu && __glutMenuWindow == window) {
__glutFatalUsage("destroying menu window not allowed while menus in use");
}
#if !defined(_WIN32)
/* If not a toplevel window... */
if (window->parent) {
/* Destroying subwindows may change colormap requirements;
recalculate toplevel window's WM_COLORMAP_WINDOWS
property. */
__glutPutOnWorkList(__glutToplevelOf(window->parent),
GLUT_COLORMAP_WORK);
}
#endif
__glutDestroyWindow(window, window);
XFlush(__glutDisplay);
}
/* ENDCENTRY */
void
__glutChangeWindowEventMask(long eventMask, Bool add)
{
if (add) {
/* Add eventMask to window's event mask. */
if ((__glutCurrentWindow->eventMask & eventMask) !=
eventMask) {
__glutCurrentWindow->eventMask |= eventMask;
__glutPutOnWorkList(__glutCurrentWindow,
GLUT_EVENT_MASK_WORK);
}
} else {
/* Remove eventMask from window's event mask. */
if (__glutCurrentWindow->eventMask & eventMask) {
__glutCurrentWindow->eventMask &= ~eventMask;
__glutPutOnWorkList(__glutCurrentWindow,
GLUT_EVENT_MASK_WORK);
}
}
}
void GLUTAPIENTRY
glutDisplayFunc(GLUTdisplayCB displayFunc)
{
/* XXX Remove the warning after GLUT 3.0. */
if (!displayFunc)
__glutFatalError("NULL display callback not allowed in GLUT 3.0; update your code.");
__glutCurrentWindow->display = displayFunc;
}
void GLUTAPIENTRY
glutMouseFunc(GLUTmouseCB mouseFunc)
{
if (__glutCurrentWindow->mouse) {
if (!mouseFunc) {
/* Previous mouseFunc being disabled. */
__glutCurrentWindow->buttonUses--;
__glutChangeWindowEventMask(
ButtonPressMask | ButtonReleaseMask,
__glutCurrentWindow->buttonUses > 0);
}
} else {
if (mouseFunc) {
/* Previously no mouseFunc, new one being installed. */
__glutCurrentWindow->buttonUses++;
__glutChangeWindowEventMask(
ButtonPressMask | ButtonReleaseMask, True);
}
}
__glutCurrentWindow->mouse = mouseFunc;
}
void GLUTAPIENTRY
glutMotionFunc(GLUTmotionCB motionFunc)
{
/* Hack. Some window managers (4Dwm by default) will mask
motion events if the client is not selecting for button
press and release events. So we select for press and
release events too (being careful to use reference
counting). */
if (__glutCurrentWindow->motion) {
if (!motionFunc) {
/* previous mouseFunc being disabled */
__glutCurrentWindow->buttonUses--;
__glutChangeWindowEventMask(
ButtonPressMask | ButtonReleaseMask,
__glutCurrentWindow->buttonUses > 0);
}
} else {
if (motionFunc) {
/* Previously no mouseFunc, new one being installed. */
__glutCurrentWindow->buttonUses++;
__glutChangeWindowEventMask(
ButtonPressMask | ButtonReleaseMask, True);
}
}
/* Real work of selecting for passive mouse motion. */
__glutChangeWindowEventMask(
Button1MotionMask | Button2MotionMask | Button3MotionMask,
motionFunc != NULL);
__glutCurrentWindow->motion = motionFunc;
}
void GLUTAPIENTRY
glutPassiveMotionFunc(GLUTpassiveCB passiveMotionFunc)
{
__glutChangeWindowEventMask(PointerMotionMask,
passiveMotionFunc != NULL);
/* Passive motion also requires watching enters and leaves so
that a fake passive motion event can be generated on an
enter. */
__glutChangeWindowEventMask(EnterWindowMask | LeaveWindowMask,
__glutCurrentWindow->entry != NULL || passiveMotionFunc != NULL);
__glutCurrentWindow->passive = passiveMotionFunc;
}
void GLUTAPIENTRY
glutEntryFunc(GLUTentryCB entryFunc)
{
__glutChangeWindowEventMask(EnterWindowMask | LeaveWindowMask,
entryFunc != NULL || __glutCurrentWindow->passive);
__glutCurrentWindow->entry = entryFunc;
if (!entryFunc) {
__glutCurrentWindow->entryState = -1;
}
}
void GLUTAPIENTRY
glutWindowStatusFunc(GLUTwindowStatusCB windowStatusFunc)
{
__glutChangeWindowEventMask(VisibilityChangeMask,
windowStatusFunc != NULL);
__glutCurrentWindow->windowStatus = windowStatusFunc;
if (!windowStatusFunc) {
/* Make state invalid. */
__glutCurrentWindow->visState = -1;
}
}
static void GLUTCALLBACK
visibilityHelper(int status)
{
if (status == GLUT_HIDDEN || status == GLUT_FULLY_COVERED)
__glutCurrentWindow->visibility(GLUT_NOT_VISIBLE);
else
__glutCurrentWindow->visibility(GLUT_VISIBLE);
}
void GLUTAPIENTRY
glutVisibilityFunc(GLUTvisibilityCB visibilityFunc)
{
__glutCurrentWindow->visibility = visibilityFunc;
if (visibilityFunc)
glutWindowStatusFunc(visibilityHelper);
else
glutWindowStatusFunc(NULL);
}
void GLUTAPIENTRY
glutReshapeFunc(GLUTreshapeCB reshapeFunc)
{
if (reshapeFunc) {
__glutCurrentWindow->reshape = reshapeFunc;
} else {
__glutCurrentWindow->reshape = __glutDefaultReshape;
}
}
/* Copyright (c) Mark J. Kilgard, 1994. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#ifdef __VMS
#include <GL/vms_x_fix.h>
#endif
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <assert.h>
#if !defined(_WIN32)
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/Xatom.h> /* for XA_STRING atom */
#endif
#include "glutint.h"
/* CENTRY */
void GLUTAPIENTRY
glutSetWindowTitle(const char *title)
{
XTextProperty textprop;
assert(!__glutCurrentWindow->parent);
IGNORE_IN_GAME_MODE();
textprop.value = (unsigned char *) title;
textprop.encoding = XA_STRING;
textprop.format = 8;
textprop.nitems = strlen(title);
XSetWMName(__glutDisplay,
__glutCurrentWindow->win, &textprop);
XFlush(__glutDisplay);
}
void GLUTAPIENTRY
glutSetIconTitle(const char *title)
{
XTextProperty textprop;
assert(!__glutCurrentWindow->parent);
IGNORE_IN_GAME_MODE();
textprop.value = (unsigned char *) title;
textprop.encoding = XA_STRING;
textprop.format = 8;
textprop.nitems = strlen(title);
XSetWMIconName(__glutDisplay,
__glutCurrentWindow->win, &textprop);
XFlush(__glutDisplay);
}
void GLUTAPIENTRY
glutPositionWindow(int x, int y)
{
IGNORE_IN_GAME_MODE();
__glutCurrentWindow->desiredX = x;
__glutCurrentWindow->desiredY = y;
__glutCurrentWindow->desiredConfMask |= CWX | CWY;
__glutPutOnWorkList(__glutCurrentWindow, GLUT_CONFIGURE_WORK);
}
void GLUTAPIENTRY
glutReshapeWindow(int w, int h)
{
IGNORE_IN_GAME_MODE();
if (w <= 0 || h <= 0)
__glutWarning("glutReshapeWindow: non-positive width or height not allowed");
__glutCurrentWindow->desiredWidth = w;
__glutCurrentWindow->desiredHeight = h;
__glutCurrentWindow->desiredConfMask |= CWWidth | CWHeight;
__glutPutOnWorkList(__glutCurrentWindow, GLUT_CONFIGURE_WORK);
}
void GLUTAPIENTRY
glutPopWindow(void)
{
IGNORE_IN_GAME_MODE();
__glutCurrentWindow->desiredStack = Above;
__glutCurrentWindow->desiredConfMask |= CWStackMode;
__glutPutOnWorkList(__glutCurrentWindow, GLUT_CONFIGURE_WORK);
}
void GLUTAPIENTRY
glutPushWindow(void)
{
IGNORE_IN_GAME_MODE();
__glutCurrentWindow->desiredStack = Below;
__glutCurrentWindow->desiredConfMask |= CWStackMode;
__glutPutOnWorkList(__glutCurrentWindow, GLUT_CONFIGURE_WORK);
}
void GLUTAPIENTRY
glutIconifyWindow(void)
{
IGNORE_IN_GAME_MODE();
assert(!__glutCurrentWindow->parent);
__glutCurrentWindow->desiredMapState = IconicState;
__glutPutOnWorkList(__glutCurrentWindow, GLUT_MAP_WORK);
}
void GLUTAPIENTRY
glutShowWindow(void)
{
IGNORE_IN_GAME_MODE();
__glutCurrentWindow->desiredMapState = NormalState;
__glutPutOnWorkList(__glutCurrentWindow, GLUT_MAP_WORK);
}
void GLUTAPIENTRY
glutHideWindow(void)
{
IGNORE_IN_GAME_MODE();
__glutCurrentWindow->desiredMapState = WithdrawnState;
__glutPutOnWorkList(__glutCurrentWindow, GLUT_MAP_WORK);
}
/* ENDCENTRY */
#ifndef __layerutil_h__
#define __layerutil_h__
/* Copyright (c) Mark J. Kilgard, 1993, 1994. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
/* Based on XLayerUtil.h: Revision: 1.3 */
#ifdef __VMS
#include <GL/vms_x_fix.h>
#endif
#if !defined(_WIN32)
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/Xmd.h>
#endif /* !_WIN32 */
/* Transparent type values */
/* None 0 */
#define TransparentPixel 1
#define TransparentMask 2
/* layered visual info template flags */
#define VisualLayerMask 0x200
#define VisualTransparentType 0x400
#define VisualTransparentValue 0x800
#define VisualAllLayerMask 0xFFF
/* layered visual info structure */
typedef struct _XLayerVisualInfo {
XVisualInfo vinfo;
long layer;
long type;
unsigned long value;
} XLayerVisualInfo;
/* SERVER_OVERLAY_VISUALS property element */
typedef struct _OverlayInfo {
/* Avoid 64-bit portability problems by being careful to use
longs due to the way XGetWindowProperty is specified. Note
that these parameters are passed as CARD32s over X
protocol. */
long overlay_visual;
long transparent_type;
long value;
long layer;
} OverlayInfo;
extern int __glutGetTransparentPixel(Display *, XVisualInfo *);
extern XLayerVisualInfo *__glutXGetLayerVisualInfo(Display *,
long, XLayerVisualInfo *, int *);
extern Status __glutXMatchLayerVisualInfo(Display *,
int, int, int, int, XLayerVisualInfo *);
#endif /* __layerutil_h__ */
/* $XConsortium: wfont.h,v 5.1 91/02/16 09:46:37 rws Exp $ */
/*****************************************************************
Copyright (c) 1989,1990, 1991 by Sun Microsystems, Inc. and the X Consortium.
All Rights Reserved
Permission to use, copy, modify, and distribute this software and its
documentation for any purpose and without fee is hereby granted,
provided that the above copyright notice appear in all copies and that
both that copyright notice and this permission notice appear in
supporting documentation, and that the names of Sun Microsystems,
the X Consortium, and MIT not be used in advertising or publicity
pertaining to distribution of the software without specific, written
prior permission.
SUN MICROSYSTEMS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT
SHALL SUN MICROSYSTEMS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
SOFTWARE.
******************************************************************/
#ifndef WFONT_INCLUDED
#define WFONT_INCLUDED
#define WFONT_MAGIC 0x813
#define WFONT_MAGIC_PLUS 0x715
#define WFONT_MAGIC_PEX 0x70686e74
#define START_PROPS 0x100
#define START_DISPATCH(_num_props) (START_PROPS + 160 * _num_props)
#define START_PATH(_num_ch_, _num_props) (START_DISPATCH(_num_props) + sizeof(Dispatch) * _num_ch_)
#define NUM_DISPATCH 128
typedef struct {
unsigned short x;
unsigned short y;
} Path_point2dpx;
typedef struct {
float x;
float y;
} Path_point2df;
typedef struct {
int x;
int y;
int z;
} Path_point3di;
typedef struct {
float x;
float y;
float z;
} Path_point3df;
typedef struct {
float x;
float y;
float z;
float w;
} Path_point4df;
typedef union {
Path_point2dpx *pt2dpx;
Path_point2df *pt2df;
Path_point3di *pt3di;
Path_point3df *pt3df;
Path_point4df *pt4df;
} Path_pt_ptr;
typedef enum {
PATH_2DF,
PATH_2DPX,
PATH_3DF,
PATH_3DI,
PATH_4DF
} Path_type;
typedef struct {
int n_pts; /* number of points in the subpath */
Path_pt_ptr pts; /* pointer to them */
int closed; /* true if the subpath is closed */
int dcmp_flag; /* flag for pgon dcmp, pgon type
* and dcmped triangle type */
} Path_subpath;
typedef struct {
Path_type type; /* type of vertices in this path */
int n_subpaths; /* number of subpaths */
int n_vertices; /* total number of vertices */
Path_subpath *subpaths; /* array of subpaths */
} Path;
typedef Path *Path_handle;
typedef struct {
char propname[80]; /* font property name */
char propvalue[80]; /* font property value */
} Property;
typedef struct {
int magic; /* magic number */
char name[80]; /* name of this font */
float top, /* extreme values */
bottom, max_width;
int num_ch; /* no. of fonts in the set */
int num_props; /* no. of font properties */
Property *properties; /* array of properties */
} Font_header;
typedef struct {
float center, /* center of the character */
right; /* right edge */
long offset; /* offset in the file of the character
* * description */
} Dispatch;
typedef struct {
float center, right;
Path strokes;
} Ch_font;
typedef struct {
char name[80];
float top, bottom, max_width;
int num_ch; /* # characters in the font */
Ch_font **ch_data;
} Phg_font;
#endif /*WFONT_INCLUDED */
/* Copyright (c) Nate Robins, 1997. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#include <stdio.h>
#include "glutint.h"
#include "win32_glx.h"
/* global current HDC */
extern HDC XHDC;
GLXContext
glXCreateContext(Display * display, XVisualInfo * visinfo,
GLXContext share, Bool direct)
{
/* KLUDGE: GLX really expects a display pointer to be passed
in as the first parameter, but Win32 needs an HDC instead,
so BE SURE that the global XHDC is set before calling this
routine. */
HGLRC context;
context = CreateContext(XHDC);
#if 0
/* XXX GLUT doesn't support it now, so don't worry about display list
and texture object sharing. */
if (share) {
wglShareLists(share, context);
}
#endif
/* Since direct rendering is implicit, the direct flag is
ignored. */
return context;
}
int
glXGetConfig(Display * display, XVisualInfo * visual, int attrib, int *value)
{
if (!visual)
return GLX_BAD_VISUAL;
switch (attrib) {
case GLX_USE_GL:
if (visual->dwFlags & (PFD_SUPPORT_OPENGL | PFD_DRAW_TO_WINDOW)) {
/* XXX Brad's Matrix Millenium II has problems creating
color index windows in 24-bit mode (lead to GDI crash)
and 32-bit mode (lead to black window). The cColorBits
filed of the PIXELFORMATDESCRIPTOR returned claims to
have 24 and 32 bits respectively of color indices. 2^24
and 2^32 are ridiculously huge writable colormaps.
Assume that if we get back a color index
PIXELFORMATDESCRIPTOR with 24 or more bits, the
PIXELFORMATDESCRIPTOR doesn't really work and skip it.
-mjk */
if (visual->iPixelType == PFD_TYPE_COLORINDEX
&& visual->cColorBits >= 24) {
*value = 0;
} else {
*value = 1;
}
} else {
*value = 0;
}
break;
case GLX_BUFFER_SIZE:
/* KLUDGE: if we're RGBA, return the number of bits/pixel,
otherwise, return 8 (we guessed at 256 colors in CI
mode). */
if (visual->iPixelType == PFD_TYPE_RGBA)
*value = visual->cColorBits;
else
*value = 8;
break;
case GLX_LEVEL:
/* The bReserved flag of the pfd contains the
overlay/underlay info. */
*value = visual->bReserved;
break;
case GLX_RGBA:
*value = visual->iPixelType == PFD_TYPE_RGBA;
break;
case GLX_DOUBLEBUFFER:
*value = visual->dwFlags & PFD_DOUBLEBUFFER;
break;
case GLX_STEREO:
*value = visual->dwFlags & PFD_STEREO;
break;
case GLX_AUX_BUFFERS:
*value = visual->cAuxBuffers;
break;
case GLX_RED_SIZE:
*value = visual->cRedBits;
break;
case GLX_GREEN_SIZE:
*value = visual->cGreenBits;
break;
case GLX_BLUE_SIZE:
*value = visual->cBlueBits;
break;
case GLX_ALPHA_SIZE:
*value = visual->cAlphaBits;
break;
case GLX_DEPTH_SIZE:
*value = visual->cDepthBits;
break;
case GLX_STENCIL_SIZE:
*value = visual->cStencilBits;
break;
case GLX_ACCUM_RED_SIZE:
*value = visual->cAccumRedBits;
break;
case GLX_ACCUM_GREEN_SIZE:
*value = visual->cAccumGreenBits;
break;
case GLX_ACCUM_BLUE_SIZE:
*value = visual->cAccumBlueBits;
break;
case GLX_ACCUM_ALPHA_SIZE:
*value = visual->cAccumAlphaBits;
break;
default:
return GLX_BAD_ATTRIB;
}
return 0;
}
XVisualInfo *
glXChooseVisual(Display * display, int screen, int *attribList)
{
/* KLUDGE: since we need the HDC, MAKE SURE to set XHDC
before calling this routine. */
int *p = attribList;
int pf;
PIXELFORMATDESCRIPTOR pfd;
PIXELFORMATDESCRIPTOR *match = NULL;
int stereo = 0;
/* Avoid seg-faults. */
if (!p)
return NULL;
memset(&pfd, 0, sizeof(PIXELFORMATDESCRIPTOR));
pfd.nSize = (sizeof(PIXELFORMATDESCRIPTOR));
pfd.nVersion = 1;
/* Defaults. */
pfd.dwFlags = PFD_SUPPORT_OPENGL | PFD_DRAW_TO_WINDOW;
pfd.iPixelType = PFD_TYPE_COLORINDEX;
pfd.cColorBits = 32;
pfd.cDepthBits = 0;
while (*p) {
switch (*p) {
case GLX_USE_GL:
pfd.dwFlags |= PFD_SUPPORT_OPENGL;
break;
case GLX_BUFFER_SIZE:
pfd.cColorBits = *(++p);
break;
case GLX_LEVEL:
/* the bReserved flag of the pfd contains the
overlay/underlay info. */
pfd.bReserved = *(++p);
break;
case GLX_RGBA:
pfd.iPixelType = PFD_TYPE_RGBA;
break;
case GLX_DOUBLEBUFFER:
pfd.dwFlags |= PFD_DOUBLEBUFFER;
break;
case GLX_STEREO:
stereo = 1;
pfd.dwFlags |= PFD_STEREO;
break;
case GLX_AUX_BUFFERS:
pfd.cAuxBuffers = *(++p);
break;
case GLX_RED_SIZE:
pfd.cRedBits = 8; /* Try to get the maximum. */
++p;
break;
case GLX_GREEN_SIZE:
pfd.cGreenBits = 8;
++p;
break;
case GLX_BLUE_SIZE:
pfd.cBlueBits = 8;
++p;
break;
case GLX_ALPHA_SIZE:
pfd.cAlphaBits = 8;
++p;
break;
case GLX_DEPTH_SIZE:
pfd.cDepthBits = 32;
++p;
break;
case GLX_STENCIL_SIZE:
pfd.cStencilBits = *(++p);
break;
case GLX_ACCUM_RED_SIZE:
case GLX_ACCUM_GREEN_SIZE:
case GLX_ACCUM_BLUE_SIZE:
case GLX_ACCUM_ALPHA_SIZE:
/* I believe that WGL only used the cAccumRedBits,
cAccumBlueBits, cAccumGreenBits, and cAccumAlphaBits fields
when returning info about the accumulation buffer precision.
Only cAccumBits is used for requesting an accumulation
buffer. */
pfd.cAccumBits = 1;
++p;
break;
}
++p;
}
/* Let Win32 choose one for us. */
pf = ChoosePixelFormat(XHDC, &pfd);
if (pf > 0) {
match = (PIXELFORMATDESCRIPTOR *) malloc(sizeof(PIXELFORMATDESCRIPTOR));
DescribePixelFormat(XHDC, pf, sizeof(PIXELFORMATDESCRIPTOR), match);
/* ChoosePixelFormat is dumb in that it will return a pixel
format that doesn't have stereo even if it was requested
so we need to make sure that if stereo was selected, we
got it. */
if (stereo) {
if (!(match->dwFlags & PFD_STEREO)) {
free(match);
return NULL;
}
}
/* XXX Brad's Matrix Millenium II has problems creating
color index windows in 24-bit mode (lead to GDI crash)
and 32-bit mode (lead to black window). The cColorBits
filed of the PIXELFORMATDESCRIPTOR returned claims to
have 24 and 32 bits respectively of color indices. 2^24
and 2^32 are ridiculously huge writable colormaps.
Assume that if we get back a color index
PIXELFORMATDESCRIPTOR with 24 or more bits, the
PIXELFORMATDESCRIPTOR doesn't really work and skip it.
-mjk */
if (match->iPixelType == PFD_TYPE_COLORINDEX
&& match->cColorBits >= 24) {
free(match);
return NULL;
}
}
return match;
}
#ifndef __win32_glx_h__
#define __win32_glx_h__
/* Copyright (c) Nate Robins, 1997. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#include "win32_x11.h"
/* Type definitions (conversions). */
typedef HGLRC GLXContext;
#define GLX_USE_GL 1 /* support GLX rendering */
#define GLX_BUFFER_SIZE 2 /* depth of the color buffer */
#define GLX_LEVEL 3 /* level in plane stacking */
#define GLX_RGBA 4 /* true if RGBA mode */
#define GLX_DOUBLEBUFFER 5 /* double buffering supported */
#define GLX_STEREO 6 /* stereo buffering supported */
#define GLX_AUX_BUFFERS 7 /* number of aux buffers */
#define GLX_RED_SIZE 8 /* number of red component bits */
#define GLX_GREEN_SIZE 9 /* number of green component bits */
#define GLX_BLUE_SIZE 10 /* number of blue component bits */
#define GLX_ALPHA_SIZE 11 /* number of alpha component bits */
#define GLX_DEPTH_SIZE 12 /* number of depth bits */
#define GLX_STENCIL_SIZE 13 /* number of stencil bits */
#define GLX_ACCUM_RED_SIZE 14 /* number of red accum bits */
#define GLX_ACCUM_GREEN_SIZE 15 /* number of green accum bits */
#define GLX_ACCUM_BLUE_SIZE 16 /* number of blue accum bits */
#define GLX_ACCUM_ALPHA_SIZE 17 /* number of alpha accum bits */
#define GLX_BAD_ATTRIB 2
#define GLX_BAD_VISUAL 4
/* Functions emulated by macros. */
#define glXDestroyContext(display, context) \
wglDeleteContext(context)
/* Function prototypes. */
extern GLXContext glXCreateContext(
Display* display,
XVisualInfo* visinfo,
GLXContext share,
Bool direct);
extern int glXGetConfig(
Display* display,
XVisualInfo* visual,
int attrib,
int* value);
extern XVisualInfo* glXChooseVisual(
Display* display,
int screen,
int* attribList);
#endif /* __win32_glx_h__ */
/* Copyright (c) Mark J. Kilgard, 1994, 1997, 1998. */
/* Copyright (c) Nate Robins, 1997. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
/* This file completely re-implements glut_menu.c and glut_menu2.c
for Win32. Note that neither glut_menu.c nor glut_menu2.c are
compiled into Win32 GLUT. */
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <errno.h>
#include <assert.h>
#include "glutint.h"
void (GLUTCALLBACK *__glutMenuStatusFunc) (int, int, int);
GLUTmenu *__glutMappedMenu;
GLUTwindow *__glutMenuWindow;
GLUTmenuItem *__glutItemSelected;
unsigned __glutMenuButton;
static GLUTmenu **menuList = NULL;
static int menuListSize = 0;
static UINT uniqueMenuHandler = 1;
/* DEPRICATED, use glutMenuStatusFunc instead. */
void GLUTAPIENTRY
glutMenuStateFunc(GLUTmenuStateCB menuStateFunc)
{
__glutMenuStatusFunc = (GLUTmenuStatusCB) menuStateFunc;
}
void GLUTAPIENTRY
glutMenuStatusFunc(GLUTmenuStatusCB menuStatusFunc)
{
__glutMenuStatusFunc = menuStatusFunc;
}
void
__glutSetMenu(GLUTmenu * menu)
{
__glutCurrentMenu = menu;
}
static void
unmapMenu(GLUTmenu * menu)
{
if (menu->cascade) {
unmapMenu(menu->cascade);
menu->cascade = NULL;
}
menu->anchor = NULL;
menu->highlighted = NULL;
}
void
__glutFinishMenu(Window win, int x, int y)
{
unmapMenu(__glutMappedMenu);
/* XXX Put in a GdiFlush just in case. Probably unnecessary. -mjk */
GdiFlush();
if (__glutMenuStatusFunc) {
__glutSetWindow(__glutMenuWindow);
__glutSetMenu(__glutMappedMenu);
/* Setting __glutMappedMenu to NULL permits operations that
change menus or destroy the menu window again. */
__glutMappedMenu = NULL;
__glutMenuStatusFunc(GLUT_MENU_NOT_IN_USE, x, y);
}
/* Setting __glutMappedMenu to NULL permits operations that
change menus or destroy the menu window again. */
__glutMappedMenu = NULL;
/* If an item is selected and it is not a submenu trigger,
generate menu callback. */
if (__glutItemSelected && !__glutItemSelected->isTrigger) {
__glutSetWindow(__glutMenuWindow);
/* When menu callback is triggered, current menu should be
set to the callback menu. */
__glutSetMenu(__glutItemSelected->menu);
__glutItemSelected->menu->select(__glutItemSelected->value);
}
__glutMenuWindow = NULL;
}
static void
mapMenu(GLUTmenu * menu, int x, int y)
{
TrackPopupMenu((HMENU) menu->win, TPM_LEFTALIGN |
(__glutMenuButton == TPM_RIGHTBUTTON) ? TPM_RIGHTBUTTON : TPM_LEFTBUTTON,
x, y, 0, __glutCurrentWindow->win, NULL);
}
void
__glutStartMenu(GLUTmenu * menu, GLUTwindow * window,
int x, int y, int x_win, int y_win)
{
assert(__glutMappedMenu == NULL);
__glutMappedMenu = menu;
__glutMenuWindow = window;
__glutItemSelected = NULL;
if (__glutMenuStatusFunc) {
__glutSetMenu(menu);
__glutSetWindow(window);
__glutMenuStatusFunc(GLUT_MENU_IN_USE, x_win, y_win);
}
mapMenu(menu, x, y);
}
GLUTmenuItem *
__glutGetUniqueMenuItem(GLUTmenu * menu, UINT unique)
{
GLUTmenuItem *item;
int i;
i = menu->num;
item = menu->list;
while (item) {
if (item->unique == unique) {
return item;
}
if (item->isTrigger) {
GLUTmenuItem *subitem;
subitem = __glutGetUniqueMenuItem(menuList[item->value], unique);
if (subitem) {
return subitem;
}
}
i--;
item = item->next;
}
return NULL;
}
GLUTmenuItem *
__glutGetMenuItem(GLUTmenu * menu, Window win, int *which)
{
GLUTmenuItem *item;
int i;
i = menu->num;
item = menu->list;
while (item) {
if (item->win == win) {
*which = i;
return item;
}
if (item->isTrigger) {
GLUTmenuItem *subitem;
subitem = __glutGetMenuItem(menuList[item->value],
win, which);
if (subitem) {
return subitem;
}
}
i--;
item = item->next;
}
return NULL;
}
GLUTmenu *
__glutGetMenu(Window win)
{
GLUTmenu *menu;
menu = __glutMappedMenu;
while (menu) {
if (win == menu->win) {
return menu;
}
menu = menu->cascade;
}
return NULL;
}
GLUTmenu *
__glutGetMenuByNum(int menunum)
{
if (menunum < 1 || menunum > menuListSize) {
return NULL;
}
return menuList[menunum - 1];
}
static int
getUnusedMenuSlot(void)
{
int i;
/* Look for allocated, unused slot. */
for (i = 0; i < menuListSize; i++) {
if (!menuList[i]) {
return i;
}
}
/* Allocate a new slot. */
menuListSize++;
if (menuList) {
menuList = (GLUTmenu **)
realloc(menuList, menuListSize * sizeof(GLUTmenu *));
} else {
/* XXX Some realloc's do not correctly perform a malloc
when asked to perform a realloc on a NULL pointer,
though the ANSI C library spec requires this. */
menuList = (GLUTmenu **) malloc(sizeof(GLUTmenu *));
}
if (!menuList) {
__glutFatalError("out of memory.");
}
menuList[menuListSize - 1] = NULL;
return menuListSize - 1;
}
static void
menuModificationError(void)
{
/* XXX Remove the warning after GLUT 3.0. */
__glutWarning("The following is a new check for GLUT 3.0; update your code.");
__glutFatalError("menu manipulation not allowed while menus in use.");
}
int GLUTAPIENTRY
glutCreateMenu(GLUTselectCB selectFunc)
{
GLUTmenu *menu;
int menuid;
if (__glutMappedMenu) {
menuModificationError();
}
menuid = getUnusedMenuSlot();
menu = (GLUTmenu *) malloc(sizeof(GLUTmenu));
if (!menu) {
__glutFatalError("out of memory.");
}
menu->id = menuid;
menu->num = 0;
menu->submenus = 0;
menu->select = selectFunc;
menu->list = NULL;
menu->cascade = NULL;
menu->highlighted = NULL;
menu->anchor = NULL;
menu->win = (HWND) CreatePopupMenu();
menuList[menuid] = menu;
__glutSetMenu(menu);
return menuid + 1;
}
int GLUTAPIENTRY
__glutCreateMenuWithExit(GLUTselectCB selectFunc, void (__cdecl *exitfunc)(int))
{
__glutExitFunc = exitfunc;
return glutCreateMenu(selectFunc);
}
void GLUTAPIENTRY
glutDestroyMenu(int menunum)
{
GLUTmenu *menu = __glutGetMenuByNum(menunum);
GLUTmenuItem *item, *next;
if (__glutMappedMenu) {
menuModificationError();
}
assert(menu->id == menunum - 1);
DestroyMenu( (HMENU) menu->win);
menuList[menunum - 1] = NULL;
/* free all menu entries */
item = menu->list;
while (item) {
assert(item->menu == menu);
next = item->next;
free(item->label);
free(item);
item = next;
}
if (__glutCurrentMenu == menu) {
__glutCurrentMenu = NULL;
}
free(menu);
}
int GLUTAPIENTRY
glutGetMenu(void)
{
if (__glutCurrentMenu) {
return __glutCurrentMenu->id + 1;
} else {
return 0;
}
}
void GLUTAPIENTRY
glutSetMenu(int menuid)
{
GLUTmenu *menu;
if (menuid < 1 || menuid > menuListSize) {
__glutWarning("glutSetMenu attempted on bogus menu.");
return;
}
menu = menuList[menuid - 1];
if (!menu) {
__glutWarning("glutSetMenu attempted on bogus menu.");
return;
}
__glutSetMenu(menu);
}
static void
setMenuItem(GLUTmenuItem * item, const char *label,
int value, Bool isTrigger)
{
GLUTmenu *menu;
menu = item->menu;
item->label = __glutStrdup(label);
if (!item->label) {
__glutFatalError("out of memory.");
}
item->isTrigger = isTrigger;
item->len = (int) strlen(label);
item->value = value;
item->unique = uniqueMenuHandler++;
if (isTrigger) {
AppendMenu((HMENU) menu->win, MF_POPUP, (UINT)item->win, label);
} else {
AppendMenu((HMENU) menu->win, MF_STRING, item->unique, label);
}
}
void GLUTAPIENTRY
glutAddMenuEntry(const char *label, int value)
{
GLUTmenuItem *entry;
if (__glutMappedMenu) {
menuModificationError();
}
entry = (GLUTmenuItem *) malloc(sizeof(GLUTmenuItem));
if (!entry) {
__glutFatalError("out of memory.");
}
entry->menu = __glutCurrentMenu;
setMenuItem(entry, label, value, FALSE);
__glutCurrentMenu->num++;
entry->next = __glutCurrentMenu->list;
__glutCurrentMenu->list = entry;
}
void GLUTAPIENTRY
glutAddSubMenu(const char *label, int menu)
{
GLUTmenuItem *submenu;
GLUTmenu *popupmenu;
if (__glutMappedMenu) {
menuModificationError();
}
submenu = (GLUTmenuItem *) malloc(sizeof(GLUTmenuItem));
if (!submenu) {
__glutFatalError("out of memory.");
}
__glutCurrentMenu->submenus++;
submenu->menu = __glutCurrentMenu;
popupmenu = __glutGetMenuByNum(menu);
if (popupmenu) {
submenu->win = popupmenu->win;
}
setMenuItem(submenu, label, /* base 0 */ menu - 1, TRUE);
__glutCurrentMenu->num++;
submenu->next = __glutCurrentMenu->list;
__glutCurrentMenu->list = submenu;
}
void GLUTAPIENTRY
glutChangeToMenuEntry(int num, const char *label, int value)
{
GLUTmenuItem *item;
int i;
if (__glutMappedMenu) {
menuModificationError();
}
i = __glutCurrentMenu->num;
item = __glutCurrentMenu->list;
while (item) {
if (i == num) {
if (item->isTrigger) {
/* If changing a submenu trigger to a menu entry, we
need to account for submenus. */
item->menu->submenus--;
/* Nuke the Win32 menu. */
DestroyMenu((HMENU) item->win);
}
free(item->label);
item->label = strdup(label);
if (!item->label)
__glutFatalError("out of memory");
item->isTrigger = FALSE;
item->len = (int) strlen(label);
item->value = value;
item->unique = uniqueMenuHandler++;
ModifyMenu((HMENU) __glutCurrentMenu->win, (UINT) i - 1,
MF_BYPOSITION | MFT_STRING, item->unique, label);
return;
}
i--;
item = item->next;
}
__glutWarning("Current menu has no %d item.", num);
}
void GLUTAPIENTRY
glutChangeToSubMenu(int num, const char *label, int menu)
{
GLUTmenu *popupmenu;
GLUTmenuItem *item;
int i;
if (__glutMappedMenu) {
menuModificationError();
}
i = __glutCurrentMenu->num;
item = __glutCurrentMenu->list;
while (item) {
if (i == num) {
if (!item->isTrigger) {
/* If changing a menu entry to as submenu trigger, we
need to account for submenus. */
item->menu->submenus++;
item->win = (HWND) CreatePopupMenu();
}
free(item->label);
item->label = strdup(label);
if (!item->label)
__glutFatalError("out of memory");
item->isTrigger = TRUE;
item->len = (int) strlen(label);
item->value = menu - 1;
item->unique = uniqueMenuHandler++;
popupmenu = __glutGetMenuByNum(menu);
if (popupmenu)
item->win = popupmenu->win;
ModifyMenu((HMENU) __glutCurrentMenu->win, (UINT) i - 1,
MF_BYPOSITION | MF_POPUP, (UINT) item->win, label);
return;
}
i--;
item = item->next;
}
__glutWarning("Current menu has no %d item.", num);
}
void GLUTAPIENTRY
glutRemoveMenuItem(int num)
{
GLUTmenuItem *item, **prev;
int i;
if (__glutMappedMenu) {
menuModificationError();
}
i = __glutCurrentMenu->num;
prev = &__glutCurrentMenu->list;
item = __glutCurrentMenu->list;
while (item) {
if (i == num) {
/* Found the menu item in list to remove. */
__glutCurrentMenu->num--;
/* Patch up menu's item list. */
*prev = item->next;
RemoveMenu((HMENU) __glutCurrentMenu->win, (UINT) i - 1, MF_BYPOSITION);
free(item->label);
free(item);
return;
}
i--;
prev = &item->next;
item = item->next;
}
__glutWarning("Current menu has no %d item.", num);
}
void GLUTAPIENTRY
glutAttachMenu(int button)
{
if (__glutCurrentWindow == __glutGameModeWindow) {
__glutWarning("cannot attach menus in game mode.");
return;
}
if (__glutMappedMenu) {
menuModificationError();
}
if (__glutCurrentWindow->menu[button] < 1) {
__glutCurrentWindow->buttonUses++;
}
__glutCurrentWindow->menu[button] = __glutCurrentMenu->id + 1;
}
void GLUTAPIENTRY
glutDetachMenu(int button)
{
if (__glutMappedMenu) {
menuModificationError();
}
if (__glutCurrentWindow->menu[button] > 0) {
__glutCurrentWindow->buttonUses--;
__glutCurrentWindow->menu[button] = 0;
}
}
/* Copyright (c) Nate Robins, 1997. */
/* portions Copyright (c) Mark Kilgard, 1997, 1998. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#include "glutint.h"
#include "glutstroke.h"
#include "glutbitmap.h"
#include <sys/timeb.h>
/* The following added by Paul Garceau <pgarceau@teleport.com> */
#if defined(__MINGW32__)
#include <GL/gl.h>
#include <time.h>
#include <windows.h>
struct timeval;
#endif
extern StrokeFontRec glutStrokeRoman, glutStrokeMonoRoman;
extern BitmapFontRec glutBitmap8By13, glutBitmap9By15, glutBitmapTimesRoman10, glutBitmapTimesRoman24, glutBitmapHelvetica10, glutBitmapHelvetica12, glutBitmapHelvetica18;
#ifndef __CYGWIN32__
int
gettimeofday(struct timeval* tp, void* tzp)
{
struct timeb tb;
ftime(&tb);
tp->tv_sec = tb.time;
tp->tv_usec = tb.millitm * 1000;
/* 0 indicates that the call succeeded. */
return 0;
}
#endif
/* To get around the fact that Microsoft DLLs only allow functions
to be exported and now data addresses (as Unix DSOs support), the
GLUT API constants such as GLUT_STROKE_ROMAN have to get passed
through a case statement to get mapped to the actual data structure
address. */
void*
__glutFont(void *font)
{
switch((int)font) {
case (int)GLUT_STROKE_ROMAN:
return &glutStrokeRoman;
case (int)GLUT_STROKE_MONO_ROMAN:
return &glutStrokeMonoRoman;
case (int)GLUT_BITMAP_9_BY_15:
return &glutBitmap9By15;
case (int)GLUT_BITMAP_8_BY_13:
return &glutBitmap8By13;
case (int)GLUT_BITMAP_TIMES_ROMAN_10:
return &glutBitmapTimesRoman10;
case (int)GLUT_BITMAP_TIMES_ROMAN_24:
return &glutBitmapTimesRoman24;
case (int)GLUT_BITMAP_HELVETICA_10:
return &glutBitmapHelvetica10;
case (int)GLUT_BITMAP_HELVETICA_12:
return &glutBitmapHelvetica12;
case (int)GLUT_BITMAP_HELVETICA_18:
return &glutBitmapHelvetica18;
}
__glutFatalError("font not found.");
/* NOTREACHED */
return NULL; /* MSVC compiler complains if there is no return at all */
}
int
__glutGetTransparentPixel(Display * dpy, XVisualInfo * vinfo)
{
/* the transparent pixel on Win32 is always index number 0. So if
we put this routine in this file, we can avoid compiling the
whole of layerutil.c which is where this routine normally comes
from. */
return 0;
}
void
__glutAdjustCoords(Window parent, int* x, int* y, int* width, int* height)
{
RECT rect;
/* adjust the window rectangle because Win32 thinks that the x, y,
width & height are the WHOLE window (including decorations),
whereas GLUT treats the x, y, width & height as only the CLIENT
area of the window. */
rect.left = *x; rect.top = *y;
rect.right = *x + *width; rect.bottom = *y + *height;
/* must adjust the coordinates according to the correct style
because depending on the style, there may or may not be
borders. */
AdjustWindowRect(&rect, WS_CLIPSIBLINGS | WS_CLIPCHILDREN |
(parent ? WS_CHILD : WS_OVERLAPPEDWINDOW),
FALSE);
/* FALSE in the third parameter = window has no menu bar */
/* readjust if the x and y are offscreen */
if(rect.left < 0) {
*x = 0;
} else {
*x = rect.left;
}
if(rect.top < 0) {
*y = 0;
} else {
*y = rect.top;
}
*width = rect.right - rect.left; /* adjusted width */
*height = rect.bottom - rect.top; /* adjusted height */
}
/* Copyright (c) Nate Robins, 1997. */
/* portions Copyright (c) Mark Kilgard, 1998. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#include "glutint.h"
/* global variable that must be set for some functions to operate
correctly. */
HDC XHDC;
XVisualInfo*
XGetVisualInfo(Display* display, long mask, XVisualInfo* template, int* nitems)
{
/* KLUDGE: this function needs XHDC to be set to the HDC currently
being operated on before it is invoked! */
PIXELFORMATDESCRIPTOR* pfds;
int i, n;
n = DescribePixelFormat(XHDC, 0, 0, NULL);
pfds = (PIXELFORMATDESCRIPTOR*)malloc(sizeof(PIXELFORMATDESCRIPTOR) * n);
memset(pfds, 0, sizeof(PIXELFORMATDESCRIPTOR) * n);
for (i = 0; i < n; i++) {
DescribePixelFormat(XHDC, i + 1, sizeof(PIXELFORMATDESCRIPTOR), &pfds[i]);
}
*nitems = n;
return pfds;
}
Colormap
XCreateColormap(Display* display, Window root, Visual* visual, int alloc)
{
/* KLUDGE: this function needs XHDC to be set to the HDC currently
being operated on before it is invoked! */
PIXELFORMATDESCRIPTOR pfd;
LOGPALETTE *logical;
HPALETTE palette;
int n;
/* grab the pixel format */
memset(&pfd, 0, sizeof(PIXELFORMATDESCRIPTOR));
DescribePixelFormat(XHDC, GetPixelFormat(XHDC),
sizeof(PIXELFORMATDESCRIPTOR), &pfd);
if (!(pfd.dwFlags & PFD_NEED_PALETTE ||
pfd.iPixelType == PFD_TYPE_COLORINDEX))
{
return 0;
}
n = 1 << pfd.cColorBits;
/* allocate a bunch of memory for the logical palette (assume 256
colors in a Win32 palette */
logical = (LOGPALETTE*)malloc(sizeof(LOGPALETTE) +
sizeof(PALETTEENTRY) * n);
memset(logical, 0, sizeof(LOGPALETTE) + sizeof(PALETTEENTRY) * n);
/* set the entries in the logical palette */
logical->palVersion = 0x300;
logical->palNumEntries = n;
/* start with a copy of the current system palette */
GetSystemPaletteEntries(XHDC, 0, 256, &logical->palPalEntry[0]);
if (pfd.iPixelType == PFD_TYPE_RGBA) {
int redMask = (1 << pfd.cRedBits) - 1;
int greenMask = (1 << pfd.cGreenBits) - 1;
int blueMask = (1 << pfd.cBlueBits) - 1;
int i;
/* fill in an RGBA color palette */
for (i = 0; i < n; ++i) {
logical->palPalEntry[i].peRed =
(((i >> pfd.cRedShift) & redMask) * 255) / redMask;
logical->palPalEntry[i].peGreen =
(((i >> pfd.cGreenShift) & greenMask) * 255) / greenMask;
logical->palPalEntry[i].peBlue =
(((i >> pfd.cBlueShift) & blueMask) * 255) / blueMask;
logical->palPalEntry[i].peFlags = 0;
}
}
palette = CreatePalette(logical);
free(logical);
SelectPalette(XHDC, palette, FALSE);
RealizePalette(XHDC);
return palette;
}
void
XAllocColorCells(Display* display, Colormap colormap, Bool contig,
unsigned long plane_masks_return[], unsigned int nplanes,
unsigned long pixels_return[], unsigned int npixels)
{
/* NOP -- we did all the allocating in XCreateColormap! */
}
void
XStoreColor(Display* display, Colormap colormap, XColor* color)
{
/* KLUDGE: set XHDC to 0 if the palette should NOT be realized after
setting the color. set XHDC to the correct HDC if it should. */
PALETTEENTRY pe;
/* X11 stores color from 0-65535, Win32 expects them to be 0-256, so
twiddle the bits ( / 256). */
pe.peRed = color->red / 256;
pe.peGreen = color->green / 256;
pe.peBlue = color->blue / 256;
/* make sure we use this flag, otherwise the colors might get mapped
to another place in the colormap, and when we glIndex() that
color, it may have moved (argh!!) */
pe.peFlags = PC_NOCOLLAPSE;
/* the pixel field of the XColor structure is the index into the
colormap */
SetPaletteEntries(colormap, color->pixel, 1, &pe);
if (XHDC) {
UnrealizeObject(colormap);
SelectPalette(XHDC, colormap, FALSE);
RealizePalette(XHDC);
}
}
void
XSetWindowColormap(Display* display, Window window, Colormap colormap)
{
HDC hdc = GetDC(window);
/* if the third parameter is FALSE, the logical colormap is copied
into the device palette when the application is in the
foreground, if it is TRUE, the colors are mapped into the current
palette in the best possible way. */
SelectPalette(hdc, colormap, FALSE);
RealizePalette(hdc);
/* note that we don't have to release the DC, since our window class
uses the WC_OWNDC flag! */
}
Bool
XTranslateCoordinates(Display *display, Window src, Window dst,
int src_x, int src_y,
int* dest_x_return, int* dest_y_return,
Window* child_return)
{
/* KLUDGE: this isn't really a translate coordinates into some other
windows coordinate system...it only translates coordinates into the
root window (screen) coordinate system. */
POINT point;
point.x = src_x;
point.y = src_y;
ClientToScreen(src, &point);
*dest_x_return = point.x;
*dest_y_return = point.y;
/* just to make compilers happy...we don't use the return value. */
return True;
}
Status
XGetGeometry(Display* display, Window window, Window* root_return,
int* x_return, int* y_return,
unsigned int* width_return, unsigned int* height_return,
unsigned int *border_width_return, unsigned int* depth_return)
{
/* KLUDGE: doesn't return the border_width or depth or root, x & y
are in screen coordinates. */
RECT rect;
POINT point;
GetClientRect(window, &rect);
point.x = 0;
point.y = 0;
ClientToScreen(window, &point);
*x_return = point.x;
*y_return = point.y;
*width_return = rect.right;
*height_return = rect.bottom;
/* just to make compilers happy...we don't use the return value. */
return 1;
}
int
DisplayWidthMM(Display* display, int screen)
{
int width;
HWND hwnd = GetDesktopWindow();
HDC hdc = GetDC(hwnd);
width = GetDeviceCaps(hdc, HORZSIZE);
/* make sure to release this DC (it's the desktops, not ours) */
ReleaseDC(hwnd, hdc);
return width;
}
int
DisplayHeightMM(Display* display, int screen)
{
int height;
HWND hwnd = GetDesktopWindow();
HDC hdc = GetDC(hwnd);
height = GetDeviceCaps(hdc, VERTSIZE);
/* make sure to release this DC (it's the desktops, not ours) */
ReleaseDC(hwnd, hdc);
return height;
}
void
XWarpPointer(Display* display, Window src, Window dst,
int src_x, int src_y, int src_width, int src_height,
int dst_x, int dst_y)
{
/* KLUDGE: this isn't really a warp pointer into some other windows
coordinate system...it only warps the pointer into the root window
(screen) coordinate system. */
POINT point;
point.x = dst_x;
point.y = dst_y;
ClientToScreen(dst, &point);
SetCursorPos(point.x, point.y);
}
int
XPending(Display* display)
{
/* similar functionality...I don't think that it is exact, but this
will have to do. */
MSG msg;
return PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE);
}
/* the following function was stolen from the X sources as indicated. */
/* Copyright Massachusetts Institute of Technology 1985, 1986, 1987 */
/* $XConsortium: XParseGeom.c,v 11.18 91/02/21 17:23:05 rws Exp $ */
/*
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, and that the name of M.I.T. not be used in advertising or
publicity pertaining to distribution of the software without specific,
written prior permission. M.I.T. makes no representations about the
suitability of this software for any purpose. It is provided "as is"
without express or implied warranty.
*/
/*
* 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);
}
int XParseGeometry(char *string, int *x, int *y, unsigned int *width, unsigned int *height)
{
int mask = NoValue;
register char *strind;
unsigned int tempWidth, tempHeight;
int tempX, tempY;
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);
}
#ifndef __win32_x11_h__
#define __win32_x11_h__
/* Copyright (c) Nate Robins, 1997. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#ifdef __MINGW32__
#include <GL/gl.h>
#endif
#include <stdlib.h>
#include <windows.h>
/* These definitions are missing from windows.h */
/* Type definitions (conversions) */
typedef int Visual; /* Win32 equivalent of X11 type */
typedef HWND Window;
typedef HPALETTE Colormap;
typedef PIXELFORMATDESCRIPTOR XVisualInfo;
typedef BOOL Bool;
typedef MSG XEvent;
typedef HDC Display;
typedef HCURSOR Cursor;
typedef int Atom; /* dummies */
typedef int XDevice;
typedef int Status;
#define True TRUE /* Win32 equivalents of X11 booleans */
#define False FALSE
#define None 0L /* universal null resource or null atom */
/* Input Event Masks. Used as event-mask window attribute and as arguments
to Grab requests. Not to be confused with event names. */
#define NoEventMask 0L
#define KeyPressMask (1L<<0)
#define KeyReleaseMask (1L<<1)
#define ButtonPressMask (1L<<2)
#define ButtonReleaseMask (1L<<3)
#define EnterWindowMask (1L<<4)
#define LeaveWindowMask (1L<<5)
#define PointerMotionMask (1L<<6)
#define PointerMotionHintMask (1L<<7)
#define Button1MotionMask (1L<<8)
#define Button2MotionMask (1L<<9)
#define Button3MotionMask (1L<<10)
#define Button4MotionMask (1L<<11)
#define Button5MotionMask (1L<<12)
#define ButtonMotionMask (1L<<13)
#define KeymapStateMask (1L<<14)
#define ExposureMask (1L<<15)
#define VisibilityChangeMask (1L<<16)
#define StructureNotifyMask (1L<<17)
#define ResizeRedirectMask (1L<<18)
#define SubstructureNotifyMask (1L<<19)
#define SubstructureRedirectMask (1L<<20)
#define FocusChangeMask (1L<<21)
#define PropertyChangeMask (1L<<22)
#define ColormapChangeMask (1L<<23)
#define OwnerGrabButtonMask (1L<<24)
/* Key masks. Used as modifiers to GrabButton and GrabKey, results of
QueryPointer, state in various key-, mouse-, and button-related
events. */
#define ShiftMask (1<<0)
#define LockMask (1<<1)
#define ControlMask (1<<2)
#define Mod1Mask (1<<3)
#define Mod2Mask (1<<4)
#define Mod3Mask (1<<5)
#define Mod4Mask (1<<6)
#define Mod5Mask (1<<7)
/* Window classes used by CreateWindow */
/* Note that CopyFromParent is already defined as 0 above */
#define InputOutput 1
#define InputOnly 2
/* Window attributes for CreateWindow and ChangeWindowAttributes */
#define CWBackPixmap (1L<<0)
#define CWBackPixel (1L<<1)
#define CWBorderPixmap (1L<<2)
#define CWBorderPixel (1L<<3)
#define CWBitGravity (1L<<4)
#define CWWinGravity (1L<<5)
#define CWBackingStore (1L<<6)
#define CWBackingPlanes (1L<<7)
#define CWBackingPixel (1L<<8)
#define CWOverrideRedirect (1L<<9)
#define CWSaveUnder (1L<<10)
#define CWEventMask (1L<<11)
#define CWDontPropagate (1L<<12)
#define CWColormap (1L<<13)
#define CWCursor (1L<<14)
/* ConfigureWindow structure */
#define CWX (1<<0)
#define CWY (1<<1)
#define CWWidth (1<<2)
#define CWHeight (1<<3)
#define CWBorderWidth (1<<4)
#define CWSibling (1<<5)
#define CWStackMode (1<<6)
/* Used in GetWindowAttributes reply */
#define IsUnmapped 0
#define IsUnviewable 1
#define IsViewable 2
/* Window stacking method (in configureWindow) */
#define Above 0
#define Below 1
#define TopIf 2
#define BottomIf 3
#define Opposite 4
/* For CreateColormap */
#define AllocNone 0 /* create map with no entries */
#define AllocAll 1 /* allocate entire map writeable */
/* Flags used in StoreNamedColor, StoreColors */
#define DoRed (1<<0)
#define DoGreen (1<<1)
#define DoBlue (1<<2)
/*
* Bitmask returned by XParseGeometry(). Each bit tells if the corresponding
* value (x, y, width, height) was found in the parsed string.
*/
#define NoValue 0x0000
#define XValue 0x0001
#define YValue 0x0002
#define WidthValue 0x0004
#define HeightValue 0x0008
#define AllValues 0x000F
#define XNegative 0x0010
#define YNegative 0x0020
/* flags argument in size hints */
#define USPosition (1L << 0) /* user specified x, y */
#define USSize (1L << 1) /* user specified width, height */
/* definitions for initial window state */
#define WithdrawnState 0 /* for windows that are not mapped */
#define NormalState 1 /* most applications want to start this way */
#define IconicState 3 /* application wants to start as an icon */
#define GameModeState 4 /* Win32 GLUT only (not in Xlib!). */
/* Type definitions */
typedef struct {
unsigned int background_pixmap; /* background pixmap */
unsigned long background_pixel; /* background pixel */
unsigned long border_pixel; /* border pixel value */
long event_mask; /* set of events that should be saved */
long do_not_propagate_mask; /* set of events that should not propagate */
Bool override_redirect; /* boolean value for override-redirect */
Colormap colormap; /* color map to be associated with window */
} XSetWindowAttributes;
typedef struct {
unsigned long pixel;
unsigned short red, green, blue;
char flags; /* do_red, do_green, do_blue */
} XColor;
typedef struct {
unsigned char *value; /* same as Property routines */
Atom encoding; /* prop type */
int format; /* prop data format: 8, 16, or 32 */
unsigned long nitems; /* number of data items in value */
} XTextProperty;
typedef struct {
long flags; /* marks which fields in this structure are defined */
int x, y; /* obsolete for new window mgrs, but clients */
int width, height; /* should set so old wm's don't mess up */
} XSizeHints;
/* Functions emulated by macros. */
#define XFreeColormap(display, colormap) \
DeleteObject(colormap)
#define XCreateFontCursor(display, shape) \
LoadCursor(NULL, shape)
#define XDefineCursor(display, window, cursor) \
SetCursor(cursor)
#define XFlush(display) \
/* Nothing. */
#define DisplayWidth(display, screen) \
GetSystemMetrics(SM_CXSCREEN)
#define DisplayHeight(display, screen) \
GetSystemMetrics(SM_CYSCREEN)
#define XMapWindow(display, window) \
ShowWindow(window, SW_SHOWNORMAL)
#define XUnmapWindow(display, window) \
ShowWindow(window, SW_HIDE)
#define XIconifyWindow(display, window, screen) \
ShowWindow(window, SW_MINIMIZE)
#define XWithdrawWindow(display, window, screen) \
ShowWindow(window, SW_HIDE)
#define XLowerWindow(display, window) \
SetWindowPos(window, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE)
#define XSetWMName(display, window, tp) \
SetWindowText(window, (tp)->value)
/* There really isn't a way to set the icon name separate from the
windows name in Win32, so, just set the windows name. */
#define XSetWMIconName(display, window, tp) \
XSetWMName(display, window, tp)
#define XDestroyWindow(display, window) \
DestroyWindow(window)
/* Anything that needs to be freed was allocated with malloc in our
fake X windows library for Win32, so free it with plain old
free(). */
#define XFree(data) \
free(data)
/* Nothing to be done for this...the pointer is always 'ungrabbed'
in Win32. */
#define XUngrabPointer(display, time) \
/* Nothing. */
/* Function prototypes. */
extern XVisualInfo* XGetVisualInfo(
Display* display,
long mask,
XVisualInfo* ttemplate, /* Avoid class with C++ keyword. */
int*nitems);
extern Colormap XCreateColormap(
Display* display,
Window root,
Visual* visual,
int alloc);
extern void XAllocColorCells(
Display* display,
Colormap colormap,
Bool contig,
unsigned long plane_masks_return[],
unsigned int nplanes,
unsigned long pixels_return[],
unsigned int npixels);
extern void XStoreColor(
Display* display,
Colormap colormap,
XColor* color);
extern void XSetWindowColormap(
Display* display,
Window window,
Colormap colormap);
extern Bool XTranslateCoordinates(
Display *display,
Window src, Window dst,
int src_x, int src_y,
int* dest_x_return, int* dest_y_return,
Window* child_return);
extern Status XGetGeometry(
Display* display,
Window window,
Window* root_return,
int* x_return, int* y_return,
unsigned int* width_return, unsigned int* height_return,
unsigned int *border_width_return,
unsigned int* depth_return);
extern int DisplayWidthMM(
Display* display,
int screen);
extern int DisplayHeightMM(
Display* display,
int screen);
extern void XWarpPointer(
Display* display,
Window src, Window dst,
int src_x, int src_y,
int src_width, int src_height,
int dst_x, int dst_y);
extern int XParseGeometry(
char* string,
int* x, int* y,
unsigned int* width, unsigned int* height);
extern int XPending(
Display* display);
#endif /* __win32_x11_h__ */
/* Copyright (c) Mark J. Kilgard, 1994. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#include "glutint.h"
#include "glutbitmap.h"
void APIENTRY
glutBitmapCharacter(GLUTbitmapFont font, int c)
{
const BitmapCharRec *ch;
BitmapFontPtr fontinfo;
GLint swapbytes, lsbfirst, rowlength;
GLint skiprows, skippixels, alignment;
#if defined(_WIN32)
fontinfo = (BitmapFontPtr) __glutFont(font);
#else
fontinfo = (BitmapFontPtr) font;
#endif
if (c < fontinfo->first ||
c >= fontinfo->first + fontinfo->num_chars)
return;
ch = fontinfo->ch[c - fontinfo->first];
if (ch) {
/* Save current modes. */
glGetIntegerv(GL_UNPACK_SWAP_BYTES, &swapbytes);
glGetIntegerv(GL_UNPACK_LSB_FIRST, &lsbfirst);
glGetIntegerv(GL_UNPACK_ROW_LENGTH, &rowlength);
glGetIntegerv(GL_UNPACK_SKIP_ROWS, &skiprows);
glGetIntegerv(GL_UNPACK_SKIP_PIXELS, &skippixels);
glGetIntegerv(GL_UNPACK_ALIGNMENT, &alignment);
/* Little endian machines (DEC Alpha for example) could
benefit from setting GL_UNPACK_LSB_FIRST to GL_TRUE
instead of GL_FALSE, but this would require changing the
generated bitmaps too. */
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(ch->width, ch->height, ch->xorig, ch->yorig,
ch->advance, 0, ch->bitmap);
/* Restore saved modes. */
glPixelStorei(GL_UNPACK_SWAP_BYTES, swapbytes);
glPixelStorei(GL_UNPACK_LSB_FIRST, lsbfirst);
glPixelStorei(GL_UNPACK_ROW_LENGTH, rowlength);
glPixelStorei(GL_UNPACK_SKIP_ROWS, skiprows);
glPixelStorei(GL_UNPACK_SKIP_PIXELS, skippixels);
glPixelStorei(GL_UNPACK_ALIGNMENT, alignment);
}
}
#ifndef __beos_x11_h__
#define __beos_x11_h__
/* Copyright (c) Nate Robins, 1997. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
/*
* Bitmask returned by XParseGeometry(). Each bit tells if the corresponding
* value (x, y, width, height) was found in the parsed string.
*/
#define NoValue 0x0000
#define XValue 0x0001
#define YValue 0x0002
#define WidthValue 0x0004
#define HeightValue 0x0008
#define AllValues 0x000F
#define XNegative 0x0010
#define YNegative 0x0020
/* Function prototypes. */
extern int DisplayWidth();
extern int DisplayHeight();
extern int XParseGeometry(
char* string,
int* x, int* y,
unsigned int* width, unsigned int* height);
#endif /* __beos_x11_h__ */
/* GENERATED FILE -- DO NOT MODIFY */
#define glutBitmap8By13 XXX
#include "glutbitmap.h"
#undef glutBitmap8By13
#ifdef _WIN32
/* XXX Work around Microsoft OpenGL 1.1 bug where glBitmap with
a height or width of zero does not advance the raster position
as specified by OpenGL. (Cosmo OpenGL does not have this bug.) */
static const GLubyte ch0data[] = { 0x0 };
static const BitmapCharRec ch0 = {1,1,0,0,8,ch0data};
#else
static const BitmapCharRec ch0 = {0,0,0,0,8,0};
#endif
#ifdef _WIN32
/* XXX Work around Microsoft OpenGL 1.1 bug where glBitmap with
a height or width of zero does not advance the raster position
as specified by OpenGL. (Cosmo OpenGL does not have this bug.) */
static const GLubyte ch32data[] = { 0x0 };
static const BitmapCharRec ch32 = {1,1,0,0,8,ch32data};
#else
static const BitmapCharRec ch32 = {0,0,0,0,8,0};
#endif
#ifdef _WIN32
/* XXX Work around Microsoft OpenGL 1.1 bug where glBitmap with
a height or width of zero does not advance the raster position
as specified by OpenGL. (Cosmo OpenGL does not have this bug.) */
static const GLubyte ch127data[] = { 0x0 };
static const BitmapCharRec ch127 = {1,1,0,0,8,ch127data};
#else
static const BitmapCharRec ch127 = {0,0,0,0,8,0};
#endif
#ifdef _WIN32
/* XXX Work around Microsoft OpenGL 1.1 bug where glBitmap with
a height or width of zero does not advance the raster position
as specified by OpenGL. (Cosmo OpenGL does not have this bug.) */
static const GLubyte ch160data[] = { 0x0 };
static const BitmapCharRec ch160 = {1,1,0,0,8,ch160data};
#else
static const BitmapCharRec ch160 = {0,0,0,0,8,0};
#endif
/* char: 0xff */
static const GLubyte ch255data[] = {
0x78,0x84,0x4,0x74,0x8c,0x84,0x84,0x84,0x0,0x0,0x48,0x48,
};
static const BitmapCharRec ch255 = {6,12,-1,2,8,ch255data};
/* char: 0xfe */
static const GLubyte ch254data[] = {
0x80,0x80,0xb8,0xc4,0x84,0x84,0xc4,0xb8,0x80,0x80,
};
static const BitmapCharRec ch254 = {6,10,-1,2,8,ch254data};
/* char: 0xfd */
static const GLubyte ch253data[] = {
0x78,0x84,0x4,0x74,0x8c,0x84,0x84,0x84,0x0,0x0,0x20,0x10,
};
static const BitmapCharRec ch253 = {6,12,-1,2,8,ch253data};
/* char: 0xfc */
static const GLubyte ch252data[] = {
0x74,0x88,0x88,0x88,0x88,0x88,0x0,0x0,0x48,0x48,
};
static const BitmapCharRec ch252 = {6,10,-1,0,8,ch252data};
/* char: 0xfb */
static const GLubyte ch251data[] = {
0x74,0x88,0x88,0x88,0x88,0x88,0x0,0x0,0x48,0x30,
};
static const BitmapCharRec ch251 = {6,10,-1,0,8,ch251data};
/* char: 0xfa */
static const GLubyte ch250data[] = {
0x74,0x88,0x88,0x88,0x88,0x88,0x0,0x0,0x20,0x10,
};
static const BitmapCharRec ch250 = {6,10,-1,0,8,ch250data};
/* char: 0xf9 */
static const GLubyte ch249data[] = {
0x74,0x88,0x88,0x88,0x88,0x88,0x0,0x0,0x10,0x20,
};
static const BitmapCharRec ch249 = {6,10,-1,0,8,ch249data};
/* char: 0xf8 */
static const GLubyte ch248data[] = {
0x80,0x78,0xc4,0xa4,0x94,0x8c,0x78,0x4,
};
static const BitmapCharRec ch248 = {6,8,-1,1,8,ch248data};
/* char: 0xf7 */
static const GLubyte ch247data[] = {
0x20,0x20,0x0,0xf8,0x0,0x20,0x20,
};
static const BitmapCharRec ch247 = {5,7,-1,-1,8,ch247data};
/* char: 0xf6 */
static const GLubyte ch246data[] = {
0x78,0x84,0x84,0x84,0x84,0x78,0x0,0x0,0x48,0x48,
};
static const BitmapCharRec ch246 = {6,10,-1,0,8,ch246data};
/* char: 0xf5 */
static const GLubyte ch245data[] = {
0x78,0x84,0x84,0x84,0x84,0x78,0x0,0x0,0x50,0x28,
};
static const BitmapCharRec ch245 = {6,10,-1,0,8,ch245data};
/* char: 0xf4 */
static const GLubyte ch244data[] = {
0x78,0x84,0x84,0x84,0x84,0x78,0x0,0x0,0x48,0x30,
};
static const BitmapCharRec ch244 = {6,10,-1,0,8,ch244data};
/* char: 0xf3 */
static const GLubyte ch243data[] = {
0x78,0x84,0x84,0x84,0x84,0x78,0x0,0x0,0x20,0x10,
};
static const BitmapCharRec ch243 = {6,10,-1,0,8,ch243data};
/* char: 0xf2 */
static const GLubyte ch242data[] = {
0x78,0x84,0x84,0x84,0x84,0x78,0x0,0x0,0x10,0x20,
};
static const BitmapCharRec ch242 = {6,10,-1,0,8,ch242data};
/* char: 0xf1 */
static const GLubyte ch241data[] = {
0x84,0x84,0x84,0x84,0xc4,0xb8,0x0,0x0,0x50,0x28,
};
static const BitmapCharRec ch241 = {6,10,-1,0,8,ch241data};
/* char: 0xf0 */
static const GLubyte ch240data[] = {
0x78,0x84,0x84,0x84,0x84,0x78,0x8,0x50,0x30,0x48,
};
static const BitmapCharRec ch240 = {6,10,-1,0,8,ch240data};
/* char: 0xef */
static const GLubyte ch239data[] = {
0xf8,0x20,0x20,0x20,0x20,0x60,0x0,0x0,0x50,0x50,
};
static const BitmapCharRec ch239 = {5,10,-1,0,8,ch239data};
/* char: 0xee */
static const GLubyte ch238data[] = {
0xf8,0x20,0x20,0x20,0x20,0x60,0x0,0x0,0x90,0x60,
};
static const BitmapCharRec ch238 = {5,10,-1,0,8,ch238data};
/* char: 0xed */
static const GLubyte ch237data[] = {
0xf8,0x20,0x20,0x20,0x20,0x60,0x0,0x0,0x40,0x20,
};
static const BitmapCharRec ch237 = {5,10,-1,0,8,ch237data};
/* char: 0xec */
static const GLubyte ch236data[] = {
0xf8,0x20,0x20,0x20,0x20,0x60,0x0,0x0,0x20,0x40,
};
static const BitmapCharRec ch236 = {5,10,-1,0,8,ch236data};
/* char: 0xeb */
static const GLubyte ch235data[] = {
0x78,0x84,0x80,0xfc,0x84,0x78,0x0,0x0,0x48,0x48,
};
static const BitmapCharRec ch235 = {6,10,-1,0,8,ch235data};
/* char: 0xea */
static const GLubyte ch234data[] = {
0x78,0x84,0x80,0xfc,0x84,0x78,0x0,0x0,0x48,0x30,
};
static const BitmapCharRec ch234 = {6,10,-1,0,8,ch234data};
/* char: 0xe9 */
static const GLubyte ch233data[] = {
0x78,0x84,0x80,0xfc,0x84,0x78,0x0,0x0,0x20,0x10,
};
static const BitmapCharRec ch233 = {6,10,-1,0,8,ch233data};
/* char: 0xe8 */
static const GLubyte ch232data[] = {
0x78,0x84,0x80,0xfc,0x84,0x78,0x0,0x0,0x10,0x20,
};
static const BitmapCharRec ch232 = {6,10,-1,0,8,ch232data};
/* char: 0xe7 */
static const GLubyte ch231data[] = {
0x20,0x10,0x78,0x84,0x80,0x80,0x84,0x78,
};
static const BitmapCharRec ch231 = {6,8,-1,2,8,ch231data};
/* char: 0xe6 */
static const GLubyte ch230data[] = {
0x6c,0x92,0x90,0x7c,0x12,0x6c,
};
static const BitmapCharRec ch230 = {7,6,0,0,8,ch230data};
/* char: 0xe5 */
static const GLubyte ch229data[] = {
0x74,0x8c,0x84,0x7c,0x4,0x78,0x0,0x30,0x48,0x30,
};
static const BitmapCharRec ch229 = {6,10,-1,0,8,ch229data};
/* char: 0xe4 */
static const GLubyte ch228data[] = {
0x74,0x8c,0x84,0x7c,0x4,0x78,0x0,0x0,0x48,0x48,
};
static const BitmapCharRec ch228 = {6,10,-1,0,8,ch228data};
/* char: 0xe3 */
static const GLubyte ch227data[] = {
0x74,0x8c,0x84,0x7c,0x4,0x78,0x0,0x0,0x50,0x28,
};
static const BitmapCharRec ch227 = {6,10,-1,0,8,ch227data};
/* char: 0xe2 */
static const GLubyte ch226data[] = {
0x74,0x8c,0x84,0x7c,0x4,0x78,0x0,0x0,0x48,0x30,
};
static const BitmapCharRec ch226 = {6,10,-1,0,8,ch226data};
/* char: 0xe1 */
static const GLubyte ch225data[] = {
0x74,0x8c,0x84,0x7c,0x4,0x78,0x0,0x0,0x20,0x10,
};
static const BitmapCharRec ch225 = {6,10,-1,0,8,ch225data};
/* char: 0xe0 */
static const GLubyte ch224data[] = {
0x74,0x8c,0x84,0x7c,0x4,0x78,0x0,0x0,0x10,0x20,
};
static const BitmapCharRec ch224 = {6,10,-1,0,8,ch224data};
/* char: 0xdf */
static const GLubyte ch223data[] = {
0x80,0xb8,0xc4,0x84,0x84,0xf8,0x84,0x84,0x78,
};
static const BitmapCharRec ch223 = {6,9,-1,1,8,ch223data};
/* char: 0xde */
static const GLubyte ch222data[] = {
0x80,0x80,0x80,0xf8,0x84,0x84,0x84,0xf8,0x80,
};
static const BitmapCharRec ch222 = {6,9,-1,0,8,ch222data};
/* char: 0xdd */
static const GLubyte ch221data[] = {
0x20,0x20,0x20,0x20,0x50,0x88,0x88,0x0,0x20,0x10,
};
static const BitmapCharRec ch221 = {5,10,-1,0,8,ch221data};
/* char: 0xdc */
static const GLubyte ch220data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x0,0x48,0x48,
};
static const BitmapCharRec ch220 = {6,10,-1,0,8,ch220data};
/* char: 0xdb */
static const GLubyte ch219data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x0,0x48,0x30,
};
static const BitmapCharRec ch219 = {6,10,-1,0,8,ch219data};
/* char: 0xda */
static const GLubyte ch218data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x0,0x20,0x10,
};
static const BitmapCharRec ch218 = {6,10,-1,0,8,ch218data};
/* char: 0xd9 */
static const GLubyte ch217data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x0,0x10,0x20,
};
static const BitmapCharRec ch217 = {6,10,-1,0,8,ch217data};
/* char: 0xd8 */
static const GLubyte ch216data[] = {
0x80,0x78,0xc4,0xa4,0xa4,0xa4,0x94,0x94,0x8c,0x78,0x4,
};
static const BitmapCharRec ch216 = {6,11,-1,1,8,ch216data};
/* char: 0xd7 */
static const GLubyte ch215data[] = {
0x84,0x48,0x30,0x30,0x48,0x84,
};
static const BitmapCharRec ch215 = {6,6,-1,-1,8,ch215data};
/* char: 0xd6 */
static const GLubyte ch214data[] = {
0x7c,0x82,0x82,0x82,0x82,0x82,0x7c,0x0,0x28,0x28,
};
static const BitmapCharRec ch214 = {7,10,0,0,8,ch214data};
/* char: 0xd5 */
static const GLubyte ch213data[] = {
0x7c,0x82,0x82,0x82,0x82,0x82,0x7c,0x0,0x28,0x14,
};
static const BitmapCharRec ch213 = {7,10,0,0,8,ch213data};
/* char: 0xd4 */
static const GLubyte ch212data[] = {
0x7c,0x82,0x82,0x82,0x82,0x82,0x7c,0x0,0x24,0x18,
};
static const BitmapCharRec ch212 = {7,10,0,0,8,ch212data};
/* char: 0xd3 */
static const GLubyte ch211data[] = {
0x7c,0x82,0x82,0x82,0x82,0x82,0x7c,0x0,0x10,0x8,
};
static const BitmapCharRec ch211 = {7,10,0,0,8,ch211data};
/* char: 0xd2 */
static const GLubyte ch210data[] = {
0x7c,0x82,0x82,0x82,0x82,0x82,0x7c,0x0,0x8,0x10,
};
static const BitmapCharRec ch210 = {7,10,0,0,8,ch210data};
/* char: 0xd1 */
static const GLubyte ch209data[] = {
0x82,0x86,0x8a,0x92,0xa2,0xc2,0x82,0x0,0x28,0x14,
};
static const BitmapCharRec ch209 = {7,10,0,0,8,ch209data};
/* char: 0xd0 */
static const GLubyte ch208data[] = {
0xfc,0x42,0x42,0x42,0xe2,0x42,0x42,0x42,0xfc,
};
static const BitmapCharRec ch208 = {7,9,0,0,8,ch208data};
/* char: 0xcf */
static const GLubyte ch207data[] = {
0xf8,0x20,0x20,0x20,0x20,0x20,0xf8,0x0,0x50,0x50,
};
static const BitmapCharRec ch207 = {5,10,-1,0,8,ch207data};
/* char: 0xce */
static const GLubyte ch206data[] = {
0xf8,0x20,0x20,0x20,0x20,0x20,0xf8,0x0,0x48,0x30,
};
static const BitmapCharRec ch206 = {5,10,-1,0,8,ch206data};
/* char: 0xcd */
static const GLubyte ch205data[] = {
0xf8,0x20,0x20,0x20,0x20,0x20,0xf8,0x0,0x20,0x10,
};
static const BitmapCharRec ch205 = {5,10,-1,0,8,ch205data};
/* char: 0xcc */
static const GLubyte ch204data[] = {
0xf8,0x20,0x20,0x20,0x20,0x20,0xf8,0x0,0x10,0x20,
};
static const BitmapCharRec ch204 = {5,10,-1,0,8,ch204data};
/* char: 0xcb */
static const GLubyte ch203data[] = {
0xfc,0x80,0x80,0xf0,0x80,0x80,0xfc,0x0,0x48,0x48,
};
static const BitmapCharRec ch203 = {6,10,-1,0,8,ch203data};
/* char: 0xca */
static const GLubyte ch202data[] = {
0xfc,0x80,0x80,0xf0,0x80,0x80,0xfc,0x0,0x48,0x30,
};
static const BitmapCharRec ch202 = {6,10,-1,0,8,ch202data};
/* char: 0xc9 */
static const GLubyte ch201data[] = {
0xfc,0x80,0x80,0xf0,0x80,0x80,0xfc,0x0,0x20,0x10,
};
static const BitmapCharRec ch201 = {6,10,-1,0,8,ch201data};
/* char: 0xc8 */
static const GLubyte ch200data[] = {
0xfc,0x80,0x80,0xf0,0x80,0x80,0xfc,0x0,0x10,0x20,
};
static const BitmapCharRec ch200 = {6,10,-1,0,8,ch200data};
/* char: 0xc7 */
static const GLubyte ch199data[] = {
0x20,0x10,0x78,0x84,0x80,0x80,0x80,0x80,0x80,0x84,0x78,
};
static const BitmapCharRec ch199 = {6,11,-1,2,8,ch199data};
/* char: 0xc6 */
static const GLubyte ch198data[] = {
0x9e,0x90,0x90,0xf0,0x9c,0x90,0x90,0x90,0x6e,
};
static const BitmapCharRec ch198 = {7,9,0,0,8,ch198data};
/* char: 0xc5 */
static const GLubyte ch197data[] = {
0x84,0x84,0xfc,0x84,0x84,0x48,0x30,0x30,0x48,0x30,
};
static const BitmapCharRec ch197 = {6,10,-1,0,8,ch197data};
/* char: 0xc4 */
static const GLubyte ch196data[] = {
0x84,0x84,0xfc,0x84,0x84,0x48,0x30,0x0,0x48,0x48,
};
static const BitmapCharRec ch196 = {6,10,-1,0,8,ch196data};
/* char: 0xc3 */
static const GLubyte ch195data[] = {
0x84,0x84,0xfc,0x84,0x84,0x48,0x30,0x0,0x50,0x28,
};
static const BitmapCharRec ch195 = {6,10,-1,0,8,ch195data};
/* char: 0xc2 */
static const GLubyte ch194data[] = {
0x84,0x84,0xfc,0x84,0x84,0x48,0x30,0x0,0x48,0x30,
};
static const BitmapCharRec ch194 = {6,10,-1,0,8,ch194data};
/* char: 0xc1 */
static const GLubyte ch193data[] = {
0x84,0x84,0xfc,0x84,0x84,0x48,0x30,0x0,0x20,0x10,
};
static const BitmapCharRec ch193 = {6,10,-1,0,8,ch193data};
/* char: 0xc0 */
static const GLubyte ch192data[] = {
0x84,0x84,0xfc,0x84,0x84,0x48,0x30,0x0,0x10,0x20,
};
static const BitmapCharRec ch192 = {6,10,-1,0,8,ch192data};
/* char: 0xbf */
static const GLubyte ch191data[] = {
0x78,0x84,0x84,0x80,0x40,0x20,0x20,0x0,0x20,
};
static const BitmapCharRec ch191 = {6,9,-1,0,8,ch191data};
/* char: 0xbe */
static const GLubyte ch190data[] = {
0x6,0x1a,0x12,0xa,0x66,0x92,0x10,0x20,0x90,0x60,
};
static const BitmapCharRec ch190 = {7,10,0,0,8,ch190data};
/* char: 0xbd */
static const GLubyte ch189data[] = {
0x1e,0x10,0xc,0x2,0xf2,0x4c,0x40,0x40,0xc0,0x40,
};
static const BitmapCharRec ch189 = {7,10,0,0,8,ch189data};
/* char: 0xbc */
static const GLubyte ch188data[] = {
0x6,0x1a,0x12,0xa,0xe6,0x42,0x40,0x40,0xc0,0x40,
};
static const BitmapCharRec ch188 = {7,10,0,0,8,ch188data};
/* char: 0xbb */
static const GLubyte ch187data[] = {
0x90,0x48,0x24,0x12,0x24,0x48,0x90,
};
static const BitmapCharRec ch187 = {7,7,0,-1,8,ch187data};
/* char: 0xba */
static const GLubyte ch186data[] = {
0xf0,0x0,0x60,0x90,0x90,0x60,
};
static const BitmapCharRec ch186 = {4,6,-1,-3,8,ch186data};
/* char: 0xb9 */
static const GLubyte ch185data[] = {
0xe0,0x40,0x40,0x40,0xc0,0x40,
};
static const BitmapCharRec ch185 = {3,6,-1,-4,8,ch185data};
/* char: 0xb8 */
static const GLubyte ch184data[] = {
0xc0,0x40,
};
static const BitmapCharRec ch184 = {2,2,-3,2,8,ch184data};
/* char: 0xb7 */
static const GLubyte ch183data[] = {
0xc0,
};
static const BitmapCharRec ch183 = {2,1,-3,-4,8,ch183data};
/* char: 0xb6 */
static const GLubyte ch182data[] = {
0x28,0x28,0x28,0x28,0x68,0xe8,0xe8,0xe8,0x7c,
};
static const BitmapCharRec ch182 = {6,9,-1,0,8,ch182data};
/* char: 0xb5 */
static const GLubyte ch181data[] = {
0x80,0xb4,0xcc,0x84,0x84,0x84,0x84,
};
static const BitmapCharRec ch181 = {6,7,-1,1,8,ch181data};
/* char: 0xb4 */
static const GLubyte ch180data[] = {
0x80,0x40,
};
static const BitmapCharRec ch180 = {2,2,-3,-8,8,ch180data};
/* char: 0xb3 */
static const GLubyte ch179data[] = {
0x60,0x90,0x10,0x20,0x90,0x60,
};
static const BitmapCharRec ch179 = {4,6,-1,-4,8,ch179data};
/* char: 0xb2 */
static const GLubyte ch178data[] = {
0xf0,0x80,0x60,0x10,0x90,0x60,
};
static const BitmapCharRec ch178 = {4,6,-1,-4,8,ch178data};
/* char: 0xb1 */
static const GLubyte ch177data[] = {
0xf8,0x0,0x20,0x20,0xf8,0x20,0x20,
};
static const BitmapCharRec ch177 = {5,7,-1,-1,8,ch177data};
/* char: 0xb0 */
static const GLubyte ch176data[] = {
0x60,0x90,0x90,0x60,
};
static const BitmapCharRec ch176 = {4,4,-2,-5,8,ch176data};
/* char: 0xaf */
static const GLubyte ch175data[] = {
0xfc,
};
static const BitmapCharRec ch175 = {6,1,-1,-8,8,ch175data};
/* char: 0xae */
static const GLubyte ch174data[] = {
0x38,0x44,0xaa,0xb2,0xaa,0xaa,0x92,0x44,0x38,
};
static const BitmapCharRec ch174 = {7,9,0,-1,8,ch174data};
/* char: 0xad */
static const GLubyte ch173data[] = {
0xfc,
};
static const BitmapCharRec ch173 = {6,1,-1,-4,8,ch173data};
/* char: 0xac */
static const GLubyte ch172data[] = {
0x4,0x4,0x4,0xfc,
};
static const BitmapCharRec ch172 = {6,4,-1,-1,8,ch172data};
/* char: 0xab */
static const GLubyte ch171data[] = {
0x12,0x24,0x48,0x90,0x48,0x24,0x12,
};
static const BitmapCharRec ch171 = {7,7,0,-1,8,ch171data};
/* char: 0xaa */
static const GLubyte ch170data[] = {
0xf8,0x0,0x78,0x88,0x78,0x8,0x70,
};
static const BitmapCharRec ch170 = {5,7,-1,-2,8,ch170data};
/* char: 0xa9 */
static const GLubyte ch169data[] = {
0x38,0x44,0x92,0xaa,0xa2,0xaa,0x92,0x44,0x38,
};
static const BitmapCharRec ch169 = {7,9,0,-1,8,ch169data};
/* char: 0xa8 */
static const GLubyte ch168data[] = {
0xd8,
};
static const BitmapCharRec ch168 = {5,1,-1,-8,8,ch168data};
/* char: 0xa7 */
static const GLubyte ch167data[] = {
0x60,0x90,0x10,0x60,0x90,0x90,0x60,0x80,0x90,0x60,
};
static const BitmapCharRec ch167 = {4,10,-2,0,8,ch167data};
/* char: 0xa6 */
static const GLubyte ch166data[] = {
0x80,0x80,0x80,0x80,0x0,0x80,0x80,0x80,0x80,
};
static const BitmapCharRec ch166 = {1,9,-3,0,8,ch166data};
/* char: 0xa5 */
static const GLubyte ch165data[] = {
0x10,0x10,0x7c,0x10,0x7c,0x28,0x44,0x82,0x82,
};
static const BitmapCharRec ch165 = {7,9,0,0,8,ch165data};
/* char: 0xa4 */
static const GLubyte ch164data[] = {
0x84,0x78,0x48,0x48,0x78,0x84,
};
static const BitmapCharRec ch164 = {6,6,-1,-1,8,ch164data};
/* char: 0xa3 */
static const GLubyte ch163data[] = {
0xdc,0x62,0x20,0x20,0x20,0x70,0x20,0x22,0x1c,
};
static const BitmapCharRec ch163 = {7,9,0,0,8,ch163data};
/* char: 0xa2 */
static const GLubyte ch162data[] = {
0x20,0x70,0xa8,0xa0,0xa0,0xa8,0x70,0x20,
};
static const BitmapCharRec ch162 = {5,8,-1,-1,8,ch162data};
/* char: 0xa1 */
static const GLubyte ch161data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x80,
};
static const BitmapCharRec ch161 = {1,9,-3,0,8,ch161data};
/* char: 0x7e '~' */
static const GLubyte ch126data[] = {
0x90,0xa8,0x48,
};
static const BitmapCharRec ch126 = {5,3,-1,-6,8,ch126data};
/* char: 0x7d '}' */
static const GLubyte ch125data[] = {
0xe0,0x10,0x10,0x20,0x18,0x20,0x10,0x10,0xe0,
};
static const BitmapCharRec ch125 = {5,9,-1,0,8,ch125data};
/* char: 0x7c '|' */
static const GLubyte ch124data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
};
static const BitmapCharRec ch124 = {1,9,-3,0,8,ch124data};
/* char: 0x7b '{' */
static const GLubyte ch123data[] = {
0x38,0x40,0x40,0x20,0xc0,0x20,0x40,0x40,0x38,
};
static const BitmapCharRec ch123 = {5,9,-2,0,8,ch123data};
/* char: 0x7a 'z' */
static const GLubyte ch122data[] = {
0xfc,0x40,0x20,0x10,0x8,0xfc,
};
static const BitmapCharRec ch122 = {6,6,-1,0,8,ch122data};
/* char: 0x79 'y' */
static const GLubyte ch121data[] = {
0x78,0x84,0x4,0x74,0x8c,0x84,0x84,0x84,
};
static const BitmapCharRec ch121 = {6,8,-1,2,8,ch121data};
/* char: 0x78 'x' */
static const GLubyte ch120data[] = {
0x84,0x48,0x30,0x30,0x48,0x84,
};
static const BitmapCharRec ch120 = {6,6,-1,0,8,ch120data};
/* char: 0x77 'w' */
static const GLubyte ch119data[] = {
0x44,0xaa,0x92,0x92,0x82,0x82,
};
static const BitmapCharRec ch119 = {7,6,0,0,8,ch119data};
/* char: 0x76 'v' */
static const GLubyte ch118data[] = {
0x20,0x50,0x50,0x88,0x88,0x88,
};
static const BitmapCharRec ch118 = {5,6,-1,0,8,ch118data};
/* char: 0x75 'u' */
static const GLubyte ch117data[] = {
0x74,0x88,0x88,0x88,0x88,0x88,
};
static const BitmapCharRec ch117 = {6,6,-1,0,8,ch117data};
/* char: 0x74 't' */
static const GLubyte ch116data[] = {
0x38,0x44,0x40,0x40,0x40,0xf8,0x40,0x40,
};
static const BitmapCharRec ch116 = {6,8,-1,0,8,ch116data};
/* char: 0x73 's' */
static const GLubyte ch115data[] = {
0x78,0x84,0x18,0x60,0x84,0x78,
};
static const BitmapCharRec ch115 = {6,6,-1,0,8,ch115data};
/* char: 0x72 'r' */
static const GLubyte ch114data[] = {
0x40,0x40,0x40,0x40,0x44,0xb8,
};
static const BitmapCharRec ch114 = {6,6,-1,0,8,ch114data};
/* char: 0x71 'q' */
static const GLubyte ch113data[] = {
0x4,0x4,0x4,0x74,0x8c,0x84,0x8c,0x74,
};
static const BitmapCharRec ch113 = {6,8,-1,2,8,ch113data};
/* char: 0x70 'p' */
static const GLubyte ch112data[] = {
0x80,0x80,0x80,0xb8,0xc4,0x84,0xc4,0xb8,
};
static const BitmapCharRec ch112 = {6,8,-1,2,8,ch112data};
/* char: 0x6f 'o' */
static const GLubyte ch111data[] = {
0x78,0x84,0x84,0x84,0x84,0x78,
};
static const BitmapCharRec ch111 = {6,6,-1,0,8,ch111data};
/* char: 0x6e 'n' */
static const GLubyte ch110data[] = {
0x84,0x84,0x84,0x84,0xc4,0xb8,
};
static const BitmapCharRec ch110 = {6,6,-1,0,8,ch110data};
/* char: 0x6d 'm' */
static const GLubyte ch109data[] = {
0x82,0x92,0x92,0x92,0x92,0xec,
};
static const BitmapCharRec ch109 = {7,6,0,0,8,ch109data};
/* char: 0x6c 'l' */
static const GLubyte ch108data[] = {
0xf8,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x60,
};
static const BitmapCharRec ch108 = {5,9,-1,0,8,ch108data};
/* char: 0x6b 'k' */
static const GLubyte ch107data[] = {
0x84,0x88,0x90,0xe0,0x90,0x88,0x80,0x80,0x80,
};
static const BitmapCharRec ch107 = {6,9,-1,0,8,ch107data};
/* char: 0x6a 'j' */
static const GLubyte ch106data[] = {
0x70,0x88,0x88,0x8,0x8,0x8,0x8,0x18,0x0,0x8,
};
static const BitmapCharRec ch106 = {5,10,-1,2,8,ch106data};
/* char: 0x69 'i' */
static const GLubyte ch105data[] = {
0xf8,0x20,0x20,0x20,0x20,0x60,0x0,0x20,
};
static const BitmapCharRec ch105 = {5,8,-1,0,8,ch105data};
/* char: 0x68 'h' */
static const GLubyte ch104data[] = {
0x84,0x84,0x84,0x84,0xc4,0xb8,0x80,0x80,0x80,
};
static const BitmapCharRec ch104 = {6,9,-1,0,8,ch104data};
/* char: 0x67 'g' */
static const GLubyte ch103data[] = {
0x78,0x84,0x78,0x80,0x70,0x88,0x88,0x74,
};
static const BitmapCharRec ch103 = {6,8,-1,2,8,ch103data};
/* char: 0x66 'f' */
static const GLubyte ch102data[] = {
0x40,0x40,0x40,0x40,0xf8,0x40,0x40,0x44,0x38,
};
static const BitmapCharRec ch102 = {6,9,-1,0,8,ch102data};
/* char: 0x65 'e' */
static const GLubyte ch101data[] = {
0x78,0x84,0x80,0xfc,0x84,0x78,
};
static const BitmapCharRec ch101 = {6,6,-1,0,8,ch101data};
/* char: 0x64 'd' */
static const GLubyte ch100data[] = {
0x74,0x8c,0x84,0x84,0x8c,0x74,0x4,0x4,0x4,
};
static const BitmapCharRec ch100 = {6,9,-1,0,8,ch100data};
/* char: 0x63 'c' */
static const GLubyte ch99data[] = {
0x78,0x84,0x80,0x80,0x84,0x78,
};
static const BitmapCharRec ch99 = {6,6,-1,0,8,ch99data};
/* char: 0x62 'b' */
static const GLubyte ch98data[] = {
0xb8,0xc4,0x84,0x84,0xc4,0xb8,0x80,0x80,0x80,
};
static const BitmapCharRec ch98 = {6,9,-1,0,8,ch98data};
/* char: 0x61 'a' */
static const GLubyte ch97data[] = {
0x74,0x8c,0x84,0x7c,0x4,0x78,
};
static const BitmapCharRec ch97 = {6,6,-1,0,8,ch97data};
/* char: 0x60 '`' */
static const GLubyte ch96data[] = {
0x10,0x60,0xe0,
};
static const BitmapCharRec ch96 = {4,3,-2,-6,8,ch96data};
/* char: 0x5f '_' */
static const GLubyte ch95data[] = {
0xfe,
};
static const BitmapCharRec ch95 = {7,1,0,1,8,ch95data};
/* char: 0x5e '^' */
static const GLubyte ch94data[] = {
0x88,0x50,0x20,
};
static const BitmapCharRec ch94 = {5,3,-1,-6,8,ch94data};
/* char: 0x5d ']' */
static const GLubyte ch93data[] = {
0xf0,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0xf0,
};
static const BitmapCharRec ch93 = {4,9,-1,0,8,ch93data};
/* char: 0x5c '\' */
static const GLubyte ch92data[] = {
0x2,0x2,0x4,0x8,0x10,0x20,0x40,0x80,0x80,
};
static const BitmapCharRec ch92 = {7,9,0,0,8,ch92data};
/* char: 0x5b '[' */
static const GLubyte ch91data[] = {
0xf0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xf0,
};
static const BitmapCharRec ch91 = {4,9,-2,0,8,ch91data};
/* char: 0x5a 'Z' */
static const GLubyte ch90data[] = {
0xfc,0x80,0x80,0x40,0x20,0x10,0x8,0x4,0xfc,
};
static const BitmapCharRec ch90 = {6,9,-1,0,8,ch90data};
/* char: 0x59 'Y' */
static const GLubyte ch89data[] = {
0x10,0x10,0x10,0x10,0x10,0x28,0x44,0x82,0x82,
};
static const BitmapCharRec ch89 = {7,9,0,0,8,ch89data};
/* char: 0x58 'X' */
static const GLubyte ch88data[] = {
0x82,0x82,0x44,0x28,0x10,0x28,0x44,0x82,0x82,
};
static const BitmapCharRec ch88 = {7,9,0,0,8,ch88data};
/* char: 0x57 'W' */
static const GLubyte ch87data[] = {
0x44,0xaa,0x92,0x92,0x92,0x82,0x82,0x82,0x82,
};
static const BitmapCharRec ch87 = {7,9,0,0,8,ch87data};
/* char: 0x56 'V' */
static const GLubyte ch86data[] = {
0x10,0x28,0x28,0x28,0x44,0x44,0x44,0x82,0x82,
};
static const BitmapCharRec ch86 = {7,9,0,0,8,ch86data};
/* char: 0x55 'U' */
static const GLubyte ch85data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,
};
static const BitmapCharRec ch85 = {6,9,-1,0,8,ch85data};
/* char: 0x54 'T' */
static const GLubyte ch84data[] = {
0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0xfe,
};
static const BitmapCharRec ch84 = {7,9,0,0,8,ch84data};
/* char: 0x53 'S' */
static const GLubyte ch83data[] = {
0x78,0x84,0x4,0x4,0x78,0x80,0x80,0x84,0x78,
};
static const BitmapCharRec ch83 = {6,9,-1,0,8,ch83data};
/* char: 0x52 'R' */
static const GLubyte ch82data[] = {
0x84,0x88,0x90,0xa0,0xf8,0x84,0x84,0x84,0xf8,
};
static const BitmapCharRec ch82 = {6,9,-1,0,8,ch82data};
/* char: 0x51 'Q' */
static const GLubyte ch81data[] = {
0x4,0x78,0x94,0xa4,0x84,0x84,0x84,0x84,0x84,0x78,
};
static const BitmapCharRec ch81 = {6,10,-1,1,8,ch81data};
/* char: 0x50 'P' */
static const GLubyte ch80data[] = {
0x80,0x80,0x80,0x80,0xf8,0x84,0x84,0x84,0xf8,
};
static const BitmapCharRec ch80 = {6,9,-1,0,8,ch80data};
/* char: 0x4f 'O' */
static const GLubyte ch79data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x78,
};
static const BitmapCharRec ch79 = {6,9,-1,0,8,ch79data};
/* char: 0x4e 'N' */
static const GLubyte ch78data[] = {
0x84,0x84,0x84,0x8c,0x94,0xa4,0xc4,0x84,0x84,
};
static const BitmapCharRec ch78 = {6,9,-1,0,8,ch78data};
/* char: 0x4d 'M' */
static const GLubyte ch77data[] = {
0x82,0x82,0x82,0x92,0x92,0xaa,0xc6,0x82,0x82,
};
static const BitmapCharRec ch77 = {7,9,0,0,8,ch77data};
/* char: 0x4c 'L' */
static const GLubyte ch76data[] = {
0xfc,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
};
static const BitmapCharRec ch76 = {6,9,-1,0,8,ch76data};
/* char: 0x4b 'K' */
static const GLubyte ch75data[] = {
0x84,0x88,0x90,0xa0,0xc0,0xa0,0x90,0x88,0x84,
};
static const BitmapCharRec ch75 = {6,9,-1,0,8,ch75data};
/* char: 0x4a 'J' */
static const GLubyte ch74data[] = {
0x70,0x88,0x8,0x8,0x8,0x8,0x8,0x8,0x3c,
};
static const BitmapCharRec ch74 = {6,9,-1,0,8,ch74data};
/* char: 0x49 'I' */
static const GLubyte ch73data[] = {
0xf8,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xf8,
};
static const BitmapCharRec ch73 = {5,9,-1,0,8,ch73data};
/* char: 0x48 'H' */
static const GLubyte ch72data[] = {
0x84,0x84,0x84,0x84,0xfc,0x84,0x84,0x84,0x84,
};
static const BitmapCharRec ch72 = {6,9,-1,0,8,ch72data};
/* char: 0x47 'G' */
static const GLubyte ch71data[] = {
0x74,0x8c,0x84,0x9c,0x80,0x80,0x80,0x84,0x78,
};
static const BitmapCharRec ch71 = {6,9,-1,0,8,ch71data};
/* char: 0x46 'F' */
static const GLubyte ch70data[] = {
0x80,0x80,0x80,0x80,0xf0,0x80,0x80,0x80,0xfc,
};
static const BitmapCharRec ch70 = {6,9,-1,0,8,ch70data};
/* char: 0x45 'E' */
static const GLubyte ch69data[] = {
0xfc,0x80,0x80,0x80,0xf0,0x80,0x80,0x80,0xfc,
};
static const BitmapCharRec ch69 = {6,9,-1,0,8,ch69data};
/* char: 0x44 'D' */
static const GLubyte ch68data[] = {
0xfc,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0xfc,
};
static const BitmapCharRec ch68 = {7,9,0,0,8,ch68data};
/* char: 0x43 'C' */
static const GLubyte ch67data[] = {
0x78,0x84,0x80,0x80,0x80,0x80,0x80,0x84,0x78,
};
static const BitmapCharRec ch67 = {6,9,-1,0,8,ch67data};
/* char: 0x42 'B' */
static const GLubyte ch66data[] = {
0xfc,0x42,0x42,0x42,0x7c,0x42,0x42,0x42,0xfc,
};
static const BitmapCharRec ch66 = {7,9,0,0,8,ch66data};
/* char: 0x41 'A' */
static const GLubyte ch65data[] = {
0x84,0x84,0x84,0xfc,0x84,0x84,0x84,0x48,0x30,
};
static const BitmapCharRec ch65 = {6,9,-1,0,8,ch65data};
/* char: 0x40 '@' */
static const GLubyte ch64data[] = {
0x78,0x80,0x94,0xac,0xa4,0x9c,0x84,0x84,0x78,
};
static const BitmapCharRec ch64 = {6,9,-1,0,8,ch64data};
/* char: 0x3f '?' */
static const GLubyte ch63data[] = {
0x10,0x0,0x10,0x10,0x8,0x4,0x84,0x84,0x78,
};
static const BitmapCharRec ch63 = {6,9,-1,0,8,ch63data};
/* char: 0x3e '>' */
static const GLubyte ch62data[] = {
0x80,0x40,0x20,0x10,0x8,0x10,0x20,0x40,0x80,
};
static const BitmapCharRec ch62 = {5,9,-1,0,8,ch62data};
/* char: 0x3d '=' */
static const GLubyte ch61data[] = {
0xfc,0x0,0x0,0xfc,
};
static const BitmapCharRec ch61 = {6,4,-1,-2,8,ch61data};
/* char: 0x3c '<' */
static const GLubyte ch60data[] = {
0x8,0x10,0x20,0x40,0x80,0x40,0x20,0x10,0x8,
};
static const BitmapCharRec ch60 = {5,9,-2,0,8,ch60data};
/* char: 0x3b ';' */
static const GLubyte ch59data[] = {
0x80,0x60,0x70,0x0,0x0,0x20,0x70,0x20,
};
static const BitmapCharRec ch59 = {4,8,-1,1,8,ch59data};
/* char: 0x3a ':' */
static const GLubyte ch58data[] = {
0x40,0xe0,0x40,0x0,0x0,0x40,0xe0,0x40,
};
static const BitmapCharRec ch58 = {3,8,-2,1,8,ch58data};
/* char: 0x39 '9' */
static const GLubyte ch57data[] = {
0x70,0x8,0x4,0x4,0x74,0x8c,0x84,0x84,0x78,
};
static const BitmapCharRec ch57 = {6,9,-1,0,8,ch57data};
/* char: 0x38 '8' */
static const GLubyte ch56data[] = {
0x78,0x84,0x84,0x84,0x78,0x84,0x84,0x84,0x78,
};
static const BitmapCharRec ch56 = {6,9,-1,0,8,ch56data};
/* char: 0x37 '7' */
static const GLubyte ch55data[] = {
0x40,0x40,0x20,0x20,0x10,0x10,0x8,0x4,0xfc,
};
static const BitmapCharRec ch55 = {6,9,-1,0,8,ch55data};
/* char: 0x36 '6' */
static const GLubyte ch54data[] = {
0x78,0x84,0x84,0xc4,0xb8,0x80,0x80,0x40,0x38,
};
static const BitmapCharRec ch54 = {6,9,-1,0,8,ch54data};
/* char: 0x35 '5' */
static const GLubyte ch53data[] = {
0x78,0x84,0x4,0x4,0xc4,0xb8,0x80,0x80,0xfc,
};
static const BitmapCharRec ch53 = {6,9,-1,0,8,ch53data};
/* char: 0x34 '4' */
static const GLubyte ch52data[] = {
0x8,0x8,0xfc,0x88,0x88,0x48,0x28,0x18,0x8,
};
static const BitmapCharRec ch52 = {6,9,-1,0,8,ch52data};
/* char: 0x33 '3' */
static const GLubyte ch51data[] = {
0x78,0x84,0x4,0x4,0x38,0x10,0x8,0x4,0xfc,
};
static const BitmapCharRec ch51 = {6,9,-1,0,8,ch51data};
/* char: 0x32 '2' */
static const GLubyte ch50data[] = {
0xfc,0x80,0x40,0x30,0x8,0x4,0x84,0x84,0x78,
};
static const BitmapCharRec ch50 = {6,9,-1,0,8,ch50data};
/* char: 0x31 '1' */
static const GLubyte ch49data[] = {
0xf8,0x20,0x20,0x20,0x20,0x20,0xa0,0x60,0x20,
};
static const BitmapCharRec ch49 = {5,9,-1,0,8,ch49data};
/* char: 0x30 '0' */
static const GLubyte ch48data[] = {
0x30,0x48,0x84,0x84,0x84,0x84,0x84,0x48,0x30,
};
static const BitmapCharRec ch48 = {6,9,-1,0,8,ch48data};
/* char: 0x2f '/' */
static const GLubyte ch47data[] = {
0x80,0x80,0x40,0x20,0x10,0x8,0x4,0x2,0x2,
};
static const BitmapCharRec ch47 = {7,9,0,0,8,ch47data};
/* char: 0x2e '.' */
static const GLubyte ch46data[] = {
0x40,0xe0,0x40,
};
static const BitmapCharRec ch46 = {3,3,-2,1,8,ch46data};
/* char: 0x2d '-' */
static const GLubyte ch45data[] = {
0xfc,
};
static const BitmapCharRec ch45 = {6,1,-1,-4,8,ch45data};
/* char: 0x2c ',' */
static const GLubyte ch44data[] = {
0x80,0x60,0x70,
};
static const BitmapCharRec ch44 = {4,3,-1,1,8,ch44data};
/* char: 0x2b '+' */
static const GLubyte ch43data[] = {
0x20,0x20,0xf8,0x20,0x20,
};
static const BitmapCharRec ch43 = {5,5,-1,-2,8,ch43data};
/* char: 0x2a '*' */
static const GLubyte ch42data[] = {
0x48,0x30,0xfc,0x30,0x48,
};
static const BitmapCharRec ch42 = {6,5,-1,-2,8,ch42data};
/* char: 0x29 ')' */
static const GLubyte ch41data[] = {
0x80,0x40,0x40,0x20,0x20,0x20,0x40,0x40,0x80,
};
static const BitmapCharRec ch41 = {3,9,-2,0,8,ch41data};
/* char: 0x28 '(' */
static const GLubyte ch40data[] = {
0x20,0x40,0x40,0x80,0x80,0x80,0x40,0x40,0x20,
};
static const BitmapCharRec ch40 = {3,9,-3,0,8,ch40data};
/* char: 0x27 ''' */
static const GLubyte ch39data[] = {
0x80,0x60,0x70,
};
static const BitmapCharRec ch39 = {4,3,-1,-6,8,ch39data};
/* char: 0x26 '&' */
static const GLubyte ch38data[] = {
0x74,0x88,0x94,0x60,0x90,0x90,0x60,
};
static const BitmapCharRec ch38 = {6,7,-1,0,8,ch38data};
/* char: 0x25 '%' */
static const GLubyte ch37data[] = {
0x88,0x54,0x48,0x20,0x10,0x10,0x48,0xa4,0x44,
};
static const BitmapCharRec ch37 = {6,9,-1,0,8,ch37data};
/* char: 0x24 '$' */
static const GLubyte ch36data[] = {
0x20,0xf0,0x28,0x70,0xa0,0x78,0x20,
};
static const BitmapCharRec ch36 = {5,7,-1,-1,8,ch36data};
/* char: 0x23 '#' */
static const GLubyte ch35data[] = {
0x48,0x48,0xfc,0x48,0xfc,0x48,0x48,
};
static const BitmapCharRec ch35 = {6,7,-1,-1,8,ch35data};
/* char: 0x22 '"' */
static const GLubyte ch34data[] = {
0x90,0x90,0x90,
};
static const BitmapCharRec ch34 = {4,3,-2,-6,8,ch34data};
/* char: 0x21 '!' */
static const GLubyte ch33data[] = {
0x80,0x0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
};
static const BitmapCharRec ch33 = {1,9,-3,0,8,ch33data};
/* char: 0x1f */
static const GLubyte ch31data[] = {
0x80,
};
static const BitmapCharRec ch31 = {1,1,-3,-3,8,ch31data};
/* char: 0x1e */
static const GLubyte ch30data[] = {
0xdc,0x62,0x20,0x20,0x20,0x70,0x20,0x22,0x1c,
};
static const BitmapCharRec ch30 = {7,9,0,0,8,ch30data};
/* char: 0x1d */
static const GLubyte ch29data[] = {
0x80,0x40,0xfe,0x10,0xfe,0x4,0x2,
};
static const BitmapCharRec ch29 = {7,7,0,0,8,ch29data};
/* char: 0x1c */
static const GLubyte ch28data[] = {
0x88,0x48,0x48,0x48,0x48,0xfc,
};
static const BitmapCharRec ch28 = {6,6,-1,0,8,ch28data};
/* char: 0x1b */
static const GLubyte ch27data[] = {
0xfe,0x80,0x20,0x8,0x2,0x8,0x20,0x80,
};
static const BitmapCharRec ch27 = {7,8,0,0,8,ch27data};
/* char: 0x1a */
static const GLubyte ch26data[] = {
0xfe,0x2,0x8,0x20,0x80,0x20,0x8,0x2,
};
static const BitmapCharRec ch26 = {7,8,0,0,8,ch26data};
/* char: 0x19 */
static const GLubyte ch25data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
};
static const BitmapCharRec ch25 = {1,13,-3,2,8,ch25data};
/* char: 0x18 */
static const GLubyte ch24data[] = {
0x10,0x10,0x10,0x10,0x10,0xff,
};
static const BitmapCharRec ch24 = {8,6,0,2,8,ch24data};
/* char: 0x17 */
static const GLubyte ch23data[] = {
0xff,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
};
static const BitmapCharRec ch23 = {8,8,0,-3,8,ch23data};
/* char: 0x16 */
static const GLubyte ch22data[] = {
0x10,0x10,0x10,0x10,0x10,0xf0,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
};
static const BitmapCharRec ch22 = {4,13,0,2,8,ch22data};
/* char: 0x15 */
static const GLubyte ch21data[] = {
0x80,0x80,0x80,0x80,0x80,0xf8,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
};
static const BitmapCharRec ch21 = {5,13,-3,2,8,ch21data};
/* char: 0x14 */
static const GLubyte ch20data[] = {
0xff,
};
static const BitmapCharRec ch20 = {8,1,0,1,8,ch20data};
/* char: 0x13 */
static const GLubyte ch19data[] = {
0xff,
};
static const BitmapCharRec ch19 = {8,1,0,-1,8,ch19data};
/* char: 0x12 */
static const GLubyte ch18data[] = {
0xff,
};
static const BitmapCharRec ch18 = {8,1,0,-3,8,ch18data};
/* char: 0x11 */
static const GLubyte ch17data[] = {
0xff,
};
static const BitmapCharRec ch17 = {8,1,0,-5,8,ch17data};
/* char: 0x10 */
static const GLubyte ch16data[] = {
0xff,
};
static const BitmapCharRec ch16 = {8,1,0,-7,8,ch16data};
/* char: 0xf */
static const GLubyte ch15data[] = {
0x10,0x10,0x10,0x10,0x10,0xff,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
};
static const BitmapCharRec ch15 = {8,13,0,2,8,ch15data};
/* char: 0xe */
static const GLubyte ch14data[] = {
0xf8,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
};
static const BitmapCharRec ch14 = {5,8,-3,-3,8,ch14data};
/* char: 0xd */
static const GLubyte ch13data[] = {
0x80,0x80,0x80,0x80,0x80,0xf8,
};
static const BitmapCharRec ch13 = {5,6,-3,2,8,ch13data};
/* char: 0xc */
static const GLubyte ch12data[] = {
0x10,0x10,0x10,0x10,0x10,0xf0,
};
static const BitmapCharRec ch12 = {4,6,0,2,8,ch12data};
/* char: 0xb */
static const GLubyte ch11data[] = {
0xf0,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
};
static const BitmapCharRec ch11 = {4,8,0,-3,8,ch11data};
/* char: 0xa */
static const GLubyte ch10data[] = {
0x8,0x8,0x8,0x8,0x3e,0x20,0x50,0x88,0x88,
};
static const BitmapCharRec ch10 = {7,9,0,2,8,ch10data};
/* char: 0x9 */
static const GLubyte ch9data[] = {
0x3e,0x20,0x20,0x20,0x88,0x98,0xa8,0xc8,0x88,
};
static const BitmapCharRec ch9 = {7,9,0,2,8,ch9data};
/* char: 0x8 */
static const GLubyte ch8data[] = {
0xfe,0x10,0x10,0xfe,0x10,0x10,
};
static const BitmapCharRec ch8 = {7,6,0,0,8,ch8data};
/* char: 0x7 */
static const GLubyte ch7data[] = {
0x70,0x88,0x88,0x70,
};
static const BitmapCharRec ch7 = {5,4,-1,-5,8,ch7data};
/* char: 0x6 */
static const GLubyte ch6data[] = {
0x20,0x20,0x3c,0x20,0x3e,0xf8,0x80,0x80,0x80,
};
static const BitmapCharRec ch6 = {7,9,0,2,8,ch6data};
/* char: 0x5 */
static const GLubyte ch5data[] = {
0x22,0x22,0x3c,0x22,0x3c,0x78,0x80,0x80,0x78,
};
static const BitmapCharRec ch5 = {7,9,0,2,8,ch5data};
/* char: 0x4 */
static const GLubyte ch4data[] = {
0x10,0x10,0x1c,0x10,0x9e,0x80,0xe0,0x80,0xf0,
};
static const BitmapCharRec ch4 = {7,9,0,2,8,ch4data};
/* char: 0x3 */
static const GLubyte ch3data[] = {
0x8,0x8,0x8,0x3e,0x88,0x88,0xf8,0x88,0x88,
};
static const BitmapCharRec ch3 = {7,9,0,2,8,ch3data};
/* char: 0x2 */
static const GLubyte ch2data[] = {
0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,
};
static const BitmapCharRec ch2 = {8,12,0,2,8,ch2data};
/* char: 0x1 */
static const GLubyte ch1data[] = {
0x10,0x38,0x7c,0xfe,0x7c,0x38,0x10,
};
static const BitmapCharRec ch1 = {7,7,0,-1,8,ch1data};
static const BitmapCharRec * const chars[] = {
&ch0,
&ch1,
&ch2,
&ch3,
&ch4,
&ch5,
&ch6,
&ch7,
&ch8,
&ch9,
&ch10,
&ch11,
&ch12,
&ch13,
&ch14,
&ch15,
&ch16,
&ch17,
&ch18,
&ch19,
&ch20,
&ch21,
&ch22,
&ch23,
&ch24,
&ch25,
&ch26,
&ch27,
&ch28,
&ch29,
&ch30,
&ch31,
&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,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
&ch160,
&ch161,
&ch162,
&ch163,
&ch164,
&ch165,
&ch166,
&ch167,
&ch168,
&ch169,
&ch170,
&ch171,
&ch172,
&ch173,
&ch174,
&ch175,
&ch176,
&ch177,
&ch178,
&ch179,
&ch180,
&ch181,
&ch182,
&ch183,
&ch184,
&ch185,
&ch186,
&ch187,
&ch188,
&ch189,
&ch190,
&ch191,
&ch192,
&ch193,
&ch194,
&ch195,
&ch196,
&ch197,
&ch198,
&ch199,
&ch200,
&ch201,
&ch202,
&ch203,
&ch204,
&ch205,
&ch206,
&ch207,
&ch208,
&ch209,
&ch210,
&ch211,
&ch212,
&ch213,
&ch214,
&ch215,
&ch216,
&ch217,
&ch218,
&ch219,
&ch220,
&ch221,
&ch222,
&ch223,
&ch224,
&ch225,
&ch226,
&ch227,
&ch228,
&ch229,
&ch230,
&ch231,
&ch232,
&ch233,
&ch234,
&ch235,
&ch236,
&ch237,
&ch238,
&ch239,
&ch240,
&ch241,
&ch242,
&ch243,
&ch244,
&ch245,
&ch246,
&ch247,
&ch248,
&ch249,
&ch250,
&ch251,
&ch252,
&ch253,
&ch254,
&ch255,
};
const BitmapFontRec glutBitmap8By13 = {
"-misc-fixed-medium-r-normal--13-120-75-75-C-80-iso8859-1",
256,
0,
chars
};
/* GENERATED FILE -- DO NOT MODIFY */
#define glutBitmap9By15 XXX
#include "glutbitmap.h"
#undef glutBitmap9By15
#ifdef _WIN32
/* XXX Work around Microsoft OpenGL 1.1 bug where glBitmap with
a height or width of zero does not advance the raster position
as specified by OpenGL. (Cosmo OpenGL does not have this bug.) */
static const GLubyte ch0data[] = { 0x0 };
static const BitmapCharRec ch0 = {1,1,0,0,9,ch0data};
#else
static const BitmapCharRec ch0 = {0,0,0,0,9,0};
#endif
#ifdef _WIN32
/* XXX Work around Microsoft OpenGL 1.1 bug where glBitmap with
a height or width of zero does not advance the raster position
as specified by OpenGL. (Cosmo OpenGL does not have this bug.) */
static const GLubyte ch32data[] = { 0x0 };
static const BitmapCharRec ch32 = {1,1,0,0,9,ch32data};
#else
static const BitmapCharRec ch32 = {0,0,0,0,9,0};
#endif
#ifdef _WIN32
/* XXX Work around Microsoft OpenGL 1.1 bug where glBitmap with
a height or width of zero does not advance the raster position
as specified by OpenGL. (Cosmo OpenGL does not have this bug.) */
static const GLubyte ch127data[] = { 0x0 };
static const BitmapCharRec ch127 = {1,1,0,0,9,ch127data};
#else
static const BitmapCharRec ch127 = {0,0,0,0,9,0};
#endif
#ifdef _WIN32
/* XXX Work around Microsoft OpenGL 1.1 bug where glBitmap with
a height or width of zero does not advance the raster position
as specified by OpenGL. (Cosmo OpenGL does not have this bug.) */
static const GLubyte ch160data[] = { 0x0 };
static const BitmapCharRec ch160 = {1,1,0,0,9,ch160data};
#else
static const BitmapCharRec ch160 = {0,0,0,0,9,0};
#endif
/* char: 0xff */
static const GLubyte ch255data[] = {
0x78,0x84,0x4,0x74,0x8c,0x84,0x84,0x84,0x84,0x84,0x0,0x0,0x28,0x28,
};
static const BitmapCharRec ch255 = {6,14,-1,3,9,ch255data};
/* char: 0xfe */
static const GLubyte ch254data[] = {
0x80,0x80,0x80,0xbc,0xc2,0x82,0x82,0x82,0xc2,0xbc,0x80,0x80,
};
static const BitmapCharRec ch254 = {7,12,-1,3,9,ch254data};
/* char: 0xfd */
static const GLubyte ch253data[] = {
0x78,0x84,0x4,0x74,0x8c,0x84,0x84,0x84,0x84,0x84,0x0,0x0,0x30,0x8,
};
static const BitmapCharRec ch253 = {6,14,-1,3,9,ch253data};
/* char: 0xfc */
static const GLubyte ch252data[] = {
0x7a,0x84,0x84,0x84,0x84,0x84,0x84,0x0,0x0,0x28,0x28,
};
static const BitmapCharRec ch252 = {7,11,-1,0,9,ch252data};
/* char: 0xfb */
static const GLubyte ch251data[] = {
0x7a,0x84,0x84,0x84,0x84,0x84,0x84,0x0,0x0,0x44,0x38,
};
static const BitmapCharRec ch251 = {7,11,-1,0,9,ch251data};
/* char: 0xfa */
static const GLubyte ch250data[] = {
0x7a,0x84,0x84,0x84,0x84,0x84,0x84,0x0,0x0,0x30,0x8,
};
static const BitmapCharRec ch250 = {7,11,-1,0,9,ch250data};
/* char: 0xf9 */
static const GLubyte ch249data[] = {
0x7a,0x84,0x84,0x84,0x84,0x84,0x84,0x0,0x0,0x18,0x20,
};
static const BitmapCharRec ch249 = {7,11,-1,0,9,ch249data};
/* char: 0xf8 */
static const GLubyte ch248data[] = {
0x80,0x7c,0xa2,0xa2,0x92,0x8a,0x8a,0x7c,0x2,
};
static const BitmapCharRec ch248 = {7,9,-1,1,9,ch248data};
/* char: 0xf7 */
static const GLubyte ch247data[] = {
0x10,0x38,0x10,0x0,0xfe,0x0,0x10,0x38,0x10,
};
static const BitmapCharRec ch247 = {7,9,-1,0,9,ch247data};
/* char: 0xf6 */
static const GLubyte ch246data[] = {
0x7c,0x82,0x82,0x82,0x82,0x82,0x7c,0x0,0x0,0x28,0x28,
};
static const BitmapCharRec ch246 = {7,11,-1,0,9,ch246data};
/* char: 0xf5 */
static const GLubyte ch245data[] = {
0x7c,0x82,0x82,0x82,0x82,0x82,0x7c,0x0,0x0,0x50,0x28,
};
static const BitmapCharRec ch245 = {7,11,-1,0,9,ch245data};
/* char: 0xf4 */
static const GLubyte ch244data[] = {
0x7c,0x82,0x82,0x82,0x82,0x82,0x7c,0x0,0x0,0x44,0x38,
};
static const BitmapCharRec ch244 = {7,11,-1,0,9,ch244data};
/* char: 0xf3 */
static const GLubyte ch243data[] = {
0x7c,0x82,0x82,0x82,0x82,0x82,0x7c,0x0,0x0,0x30,0x8,
};
static const BitmapCharRec ch243 = {7,11,-1,0,9,ch243data};
/* char: 0xf2 */
static const GLubyte ch242data[] = {
0x7c,0x82,0x82,0x82,0x82,0x82,0x7c,0x0,0x0,0x18,0x20,
};
static const BitmapCharRec ch242 = {7,11,-1,0,9,ch242data};
/* char: 0xf1 */
static const GLubyte ch241data[] = {
0x82,0x82,0x82,0x82,0x82,0xc2,0xbc,0x0,0x0,0x50,0x28,
};
static const BitmapCharRec ch241 = {7,11,-1,0,9,ch241data};
/* char: 0xf0 */
static const GLubyte ch240data[] = {
0x7c,0x82,0x82,0x82,0x82,0x82,0x7c,0x8,0x50,0x30,0x48,
};
static const BitmapCharRec ch240 = {7,11,-1,0,9,ch240data};
/* char: 0xef */
static const GLubyte ch239data[] = {
0xf8,0x20,0x20,0x20,0x20,0x20,0xe0,0x0,0x0,0x50,0x50,
};
static const BitmapCharRec ch239 = {5,11,-2,0,9,ch239data};
/* char: 0xee */
static const GLubyte ch238data[] = {
0xf8,0x20,0x20,0x20,0x20,0x20,0xe0,0x0,0x0,0x90,0x60,
};
static const BitmapCharRec ch238 = {5,11,-2,0,9,ch238data};
/* char: 0xed */
static const GLubyte ch237data[] = {
0xf8,0x20,0x20,0x20,0x20,0x20,0xe0,0x0,0x0,0x60,0x10,
};
static const BitmapCharRec ch237 = {5,11,-2,0,9,ch237data};
/* char: 0xec */
static const GLubyte ch236data[] = {
0xf8,0x20,0x20,0x20,0x20,0x20,0xe0,0x0,0x0,0x30,0x40,
};
static const BitmapCharRec ch236 = {5,11,-2,0,9,ch236data};
/* char: 0xeb */
static const GLubyte ch235data[] = {
0x7c,0x80,0x80,0xfe,0x82,0x82,0x7c,0x0,0x0,0x28,0x28,
};
static const BitmapCharRec ch235 = {7,11,-1,0,9,ch235data};
/* char: 0xea */
static const GLubyte ch234data[] = {
0x7c,0x80,0x80,0xfe,0x82,0x82,0x7c,0x0,0x0,0x44,0x38,
};
static const BitmapCharRec ch234 = {7,11,-1,0,9,ch234data};
/* char: 0xe9 */
static const GLubyte ch233data[] = {
0x7c,0x80,0x80,0xfe,0x82,0x82,0x7c,0x0,0x0,0x30,0x8,
};
static const BitmapCharRec ch233 = {7,11,-1,0,9,ch233data};
/* char: 0xe8 */
static const GLubyte ch232data[] = {
0x7c,0x80,0x80,0xfe,0x82,0x82,0x7c,0x0,0x0,0x18,0x20,
};
static const BitmapCharRec ch232 = {7,11,-1,0,9,ch232data};
/* char: 0xe7 */
static const GLubyte ch231data[] = {
0x30,0x48,0x18,0x7c,0x82,0x80,0x80,0x80,0x82,0x7c,
};
static const BitmapCharRec ch231 = {7,10,-1,3,9,ch231data};
/* char: 0xe6 */
static const GLubyte ch230data[] = {
0x6e,0x92,0x90,0x7c,0x12,0x92,0x6c,
};
static const BitmapCharRec ch230 = {7,7,-1,0,9,ch230data};
/* char: 0xe5 */
static const GLubyte ch229data[] = {
0x7a,0x86,0x82,0x7e,0x2,0x2,0x7c,0x0,0x18,0x24,0x18,
};
static const BitmapCharRec ch229 = {7,11,-1,0,9,ch229data};
/* char: 0xe4 */
static const GLubyte ch228data[] = {
0x7a,0x86,0x82,0x7e,0x2,0x2,0x7c,0x0,0x0,0x28,0x28,
};
static const BitmapCharRec ch228 = {7,11,-1,0,9,ch228data};
/* char: 0xe3 */
static const GLubyte ch227data[] = {
0x7a,0x86,0x82,0x7e,0x2,0x2,0x7c,0x0,0x0,0x50,0x28,
};
static const BitmapCharRec ch227 = {7,11,-1,0,9,ch227data};
/* char: 0xe2 */
static const GLubyte ch226data[] = {
0x7a,0x86,0x82,0x7e,0x2,0x2,0x7c,0x0,0x0,0x44,0x38,
};
static const BitmapCharRec ch226 = {7,11,-1,0,9,ch226data};
/* char: 0xe1 */
static const GLubyte ch225data[] = {
0x7a,0x86,0x82,0x7e,0x2,0x2,0x7c,0x0,0x0,0x30,0x8,
};
static const BitmapCharRec ch225 = {7,11,-1,0,9,ch225data};
/* char: 0xe0 */
static const GLubyte ch224data[] = {
0x7a,0x86,0x82,0x7e,0x2,0x2,0x7c,0x0,0x0,0x18,0x20,
};
static const BitmapCharRec ch224 = {7,11,-1,0,9,ch224data};
/* char: 0xdf */
static const GLubyte ch223data[] = {
0x80,0xbc,0xc2,0x82,0x82,0xfc,0x82,0x82,0x7c,
};
static const BitmapCharRec ch223 = {7,9,-1,1,9,ch223data};
/* char: 0xde */
static const GLubyte ch222data[] = {
0x80,0x80,0x80,0xfc,0x82,0x82,0x82,0xfc,0x80,0x80,
};
static const BitmapCharRec ch222 = {7,10,-1,0,9,ch222data};
/* char: 0xdd */
static const GLubyte ch221data[] = {
0x10,0x10,0x10,0x10,0x28,0x44,0x82,0x82,0x0,0x30,0x8,
};
static const BitmapCharRec ch221 = {7,11,-1,0,9,ch221data};
/* char: 0xdc */
static const GLubyte ch220data[] = {
0x7c,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x0,0x28,0x28,
};
static const BitmapCharRec ch220 = {7,11,-1,0,9,ch220data};
/* char: 0xdb */
static const GLubyte ch219data[] = {
0x7c,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x0,0x44,0x38,
};
static const BitmapCharRec ch219 = {7,11,-1,0,9,ch219data};
/* char: 0xda */
static const GLubyte ch218data[] = {
0x7c,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x0,0x30,0x8,
};
static const BitmapCharRec ch218 = {7,11,-1,0,9,ch218data};
/* char: 0xd9 */
static const GLubyte ch217data[] = {
0x7c,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x0,0x18,0x20,
};
static const BitmapCharRec ch217 = {7,11,-1,0,9,ch217data};
/* char: 0xd8 */
static const GLubyte ch216data[] = {
0x80,0x7c,0xc2,0xa2,0xa2,0x92,0x92,0x8a,0x8a,0x86,0x7c,0x2,
};
static const BitmapCharRec ch216 = {7,12,-1,1,9,ch216data};
/* char: 0xd7 */
static const GLubyte ch215data[] = {
0x82,0x44,0x28,0x10,0x28,0x44,0x82,
};
static const BitmapCharRec ch215 = {7,7,-1,-1,9,ch215data};
/* char: 0xd6 */
static const GLubyte ch214data[] = {
0x7c,0x82,0x82,0x82,0x82,0x82,0x82,0x7c,0x0,0x28,0x28,
};
static const BitmapCharRec ch214 = {7,11,-1,0,9,ch214data};
/* char: 0xd5 */
static const GLubyte ch213data[] = {
0x7c,0x82,0x82,0x82,0x82,0x82,0x82,0x7c,0x0,0x50,0x28,
};
static const BitmapCharRec ch213 = {7,11,-1,0,9,ch213data};
/* char: 0xd4 */
static const GLubyte ch212data[] = {
0x7c,0x82,0x82,0x82,0x82,0x82,0x82,0x7c,0x0,0x44,0x38,
};
static const BitmapCharRec ch212 = {7,11,-1,0,9,ch212data};
/* char: 0xd3 */
static const GLubyte ch211data[] = {
0x7c,0x82,0x82,0x82,0x82,0x82,0x82,0x7c,0x0,0x30,0x8,
};
static const BitmapCharRec ch211 = {7,11,-1,0,9,ch211data};
/* char: 0xd2 */
static const GLubyte ch210data[] = {
0x7c,0x82,0x82,0x82,0x82,0x82,0x82,0x7c,0x0,0x18,0x20,
};
static const BitmapCharRec ch210 = {7,11,-1,0,9,ch210data};
/* char: 0xd1 */
static const GLubyte ch209data[] = {
0x82,0x86,0x8a,0x92,0x92,0xa2,0xc2,0x82,0x0,0x50,0x28,
};
static const BitmapCharRec ch209 = {7,11,-1,0,9,ch209data};
/* char: 0xd0 */
static const GLubyte ch208data[] = {
0xfc,0x42,0x42,0x42,0x42,0xf2,0x42,0x42,0x42,0xfc,
};
static const BitmapCharRec ch208 = {7,10,-1,0,9,ch208data};
/* char: 0xcf */
static const GLubyte ch207data[] = {
0xf8,0x20,0x20,0x20,0x20,0x20,0x20,0xf8,0x0,0x50,0x50,
};
static const BitmapCharRec ch207 = {5,11,-2,0,9,ch207data};
/* char: 0xce */
static const GLubyte ch206data[] = {
0xf8,0x20,0x20,0x20,0x20,0x20,0x20,0xf8,0x0,0x88,0x70,
};
static const BitmapCharRec ch206 = {5,11,-2,0,9,ch206data};
/* char: 0xcd */
static const GLubyte ch205data[] = {
0xf8,0x20,0x20,0x20,0x20,0x20,0x20,0xf8,0x0,0x60,0x10,
};
static const BitmapCharRec ch205 = {5,11,-2,0,9,ch205data};
/* char: 0xcc */
static const GLubyte ch204data[] = {
0xf8,0x20,0x20,0x20,0x20,0x20,0x20,0xf8,0x0,0x30,0x40,
};
static const BitmapCharRec ch204 = {5,11,-2,0,9,ch204data};
/* char: 0xcb */
static const GLubyte ch203data[] = {
0xfe,0x40,0x40,0x40,0x78,0x40,0x40,0xfe,0x0,0x28,0x28,
};
static const BitmapCharRec ch203 = {7,11,-1,0,9,ch203data};
/* char: 0xca */
static const GLubyte ch202data[] = {
0xfe,0x40,0x40,0x40,0x78,0x40,0x40,0xfe,0x0,0x44,0x38,
};
static const BitmapCharRec ch202 = {7,11,-1,0,9,ch202data};
/* char: 0xc9 */
static const GLubyte ch201data[] = {
0xfe,0x40,0x40,0x40,0x78,0x40,0x40,0xfe,0x0,0x30,0x8,
};
static const BitmapCharRec ch201 = {7,11,-1,0,9,ch201data};
/* char: 0xc8 */
static const GLubyte ch200data[] = {
0xfe,0x40,0x40,0x40,0x78,0x40,0x40,0xfe,0x0,0x18,0x20,
};
static const BitmapCharRec ch200 = {7,11,-1,0,9,ch200data};
/* char: 0xc7 */
static const GLubyte ch199data[] = {
0x30,0x48,0x18,0x7c,0x82,0x80,0x80,0x80,0x80,0x80,0x80,0x82,0x7c,
};
static const BitmapCharRec ch199 = {7,13,-1,3,9,ch199data};
/* char: 0xc6 */
static const GLubyte ch198data[] = {
0x9e,0x90,0x90,0x90,0xfc,0x90,0x90,0x90,0x90,0x6e,
};
static const BitmapCharRec ch198 = {7,10,-1,0,9,ch198data};
/* char: 0xc5 */
static const GLubyte ch197data[] = {
0x82,0x82,0x82,0xfe,0x82,0x82,0x44,0x38,0x10,0x28,0x10,
};
static const BitmapCharRec ch197 = {7,11,-1,0,9,ch197data};
/* char: 0xc4 */
static const GLubyte ch196data[] = {
0x82,0x82,0x82,0xfe,0x82,0x82,0x44,0x38,0x0,0x28,0x28,
};
static const BitmapCharRec ch196 = {7,11,-1,0,9,ch196data};
/* char: 0xc3 */
static const GLubyte ch195data[] = {
0x82,0x82,0x82,0xfe,0x82,0x82,0x44,0x38,0x0,0x50,0x28,
};
static const BitmapCharRec ch195 = {7,11,-1,0,9,ch195data};
/* char: 0xc2 */
static const GLubyte ch194data[] = {
0x82,0x82,0x82,0xfe,0x82,0x82,0x44,0x38,0x0,0x44,0x38,
};
static const BitmapCharRec ch194 = {7,11,-1,0,9,ch194data};
/* char: 0xc1 */
static const GLubyte ch193data[] = {
0x82,0x82,0x82,0xfe,0x82,0x82,0x44,0x38,0x0,0x30,0x8,
};
static const BitmapCharRec ch193 = {7,11,-1,0,9,ch193data};
/* char: 0xc0 */
static const GLubyte ch192data[] = {
0x82,0x82,0x82,0xfe,0x82,0x82,0x44,0x38,0x0,0x18,0x20,
};
static const BitmapCharRec ch192 = {7,11,-1,0,9,ch192data};
/* char: 0xbf */
static const GLubyte ch191data[] = {
0x7c,0x82,0x82,0x80,0x40,0x20,0x10,0x10,0x0,0x10,
};
static const BitmapCharRec ch191 = {7,10,-1,0,9,ch191data};
/* char: 0xbe */
static const GLubyte ch190data[] = {
0x6,0x1a,0x12,0xa,0x66,0x92,0x10,0x20,0x90,0x60,
};
static const BitmapCharRec ch190 = {7,10,-1,0,9,ch190data};
/* char: 0xbd */
static const GLubyte ch189data[] = {
0x1e,0x10,0xc,0x2,0xf2,0x4c,0x40,0x40,0xc0,0x40,
};
static const BitmapCharRec ch189 = {7,10,-1,0,9,ch189data};
/* char: 0xbc */
static const GLubyte ch188data[] = {
0x6,0x1a,0x12,0xa,0xe6,0x42,0x40,0x40,0xc0,0x40,
};
static const BitmapCharRec ch188 = {7,10,-1,0,9,ch188data};
/* char: 0xbb */
static const GLubyte ch187data[] = {
0x90,0x48,0x24,0x12,0x12,0x24,0x48,0x90,
};
static const BitmapCharRec ch187 = {7,8,-1,-1,9,ch187data};
/* char: 0xba */
static const GLubyte ch186data[] = {
0xf8,0x0,0x70,0x88,0x88,0x70,
};
static const BitmapCharRec ch186 = {5,6,-1,-5,9,ch186data};
/* char: 0xb9 */
static const GLubyte ch185data[] = {
0xe0,0x40,0x40,0x40,0xc0,0x40,
};
static const BitmapCharRec ch185 = {3,6,-1,-4,9,ch185data};
/* char: 0xb8 */
static const GLubyte ch184data[] = {
0x60,0x90,0x30,
};
static const BitmapCharRec ch184 = {4,3,-2,3,9,ch184data};
/* char: 0xb7 */
static const GLubyte ch183data[] = {
0xc0,0xc0,
};
static const BitmapCharRec ch183 = {2,2,-4,-4,9,ch183data};
/* char: 0xb6 */
static const GLubyte ch182data[] = {
0xa,0xa,0xa,0xa,0xa,0x7a,0x8a,0x8a,0x8a,0x7e,
};
static const BitmapCharRec ch182 = {7,10,-1,0,9,ch182data};
/* char: 0xb5 */
static const GLubyte ch181data[] = {
0x80,0x80,0xba,0xc6,0x82,0x82,0x82,0x82,0x82,
};
static const BitmapCharRec ch181 = {7,9,-1,2,9,ch181data};
/* char: 0xb4 */
static const GLubyte ch180data[] = {
0xc0,0x20,
};
static const BitmapCharRec ch180 = {3,2,-3,-9,9,ch180data};
/* char: 0xb3 */
static const GLubyte ch179data[] = {
0x60,0x90,0x10,0x20,0x90,0x60,
};
static const BitmapCharRec ch179 = {4,6,-1,-4,9,ch179data};
/* char: 0xb2 */
static const GLubyte ch178data[] = {
0xf0,0x80,0x60,0x10,0x90,0x60,
};
static const BitmapCharRec ch178 = {4,6,-1,-4,9,ch178data};
/* char: 0xb1 */
static const GLubyte ch177data[] = {
0xfe,0x0,0x10,0x10,0x10,0xfe,0x10,0x10,0x10,
};
static const BitmapCharRec ch177 = {7,9,-1,-1,9,ch177data};
/* char: 0xb0 */
static const GLubyte ch176data[] = {
0x60,0x90,0x90,0x60,
};
static const BitmapCharRec ch176 = {4,4,-3,-6,9,ch176data};
/* char: 0xaf */
static const GLubyte ch175data[] = {
0xfc,
};
static const BitmapCharRec ch175 = {6,1,-1,-9,9,ch175data};
/* char: 0xae */
static const GLubyte ch174data[] = {
0x3c,0x42,0xa5,0xa9,0xbd,0xa5,0xb9,0x42,0x3c,
};
static const BitmapCharRec ch174 = {8,9,0,-1,9,ch174data};
/* char: 0xad */
static const GLubyte ch173data[] = {
0xfc,
};
static const BitmapCharRec ch173 = {6,1,-1,-4,9,ch173data};
/* char: 0xac */
static const GLubyte ch172data[] = {
0x4,0x4,0x4,0xfc,
};
static const BitmapCharRec ch172 = {6,4,-1,-2,9,ch172data};
/* char: 0xab */
static const GLubyte ch171data[] = {
0x12,0x24,0x48,0x90,0x90,0x48,0x24,0x12,
};
static const BitmapCharRec ch171 = {7,8,-1,-1,9,ch171data};
/* char: 0xaa */
static const GLubyte ch170data[] = {
0xf8,0x0,0x78,0x90,0x70,0x90,0x60,
};
static const BitmapCharRec ch170 = {5,7,-3,-3,9,ch170data};
/* char: 0xa9 */
static const GLubyte ch169data[] = {
0x3c,0x42,0x99,0xa5,0xa1,0xa5,0x99,0x42,0x3c,
};
static const BitmapCharRec ch169 = {8,9,0,-1,9,ch169data};
/* char: 0xa8 */
static const GLubyte ch168data[] = {
0xa0,0xa0,
};
static const BitmapCharRec ch168 = {3,2,-3,-9,9,ch168data};
/* char: 0xa7 */
static const GLubyte ch167data[] = {
0x70,0x88,0x8,0x70,0x88,0x88,0x88,0x70,0x80,0x88,0x70,
};
static const BitmapCharRec ch167 = {5,11,-2,1,9,ch167data};
/* char: 0xa6 */
static const GLubyte ch166data[] = {
0x80,0x80,0x80,0x80,0x80,0x0,0x80,0x80,0x80,0x80,0x80,
};
static const BitmapCharRec ch166 = {1,11,-4,1,9,ch166data};
/* char: 0xa5 */
static const GLubyte ch165data[] = {
0x10,0x10,0x10,0x7c,0x10,0x7c,0x28,0x44,0x82,0x82,
};
static const BitmapCharRec ch165 = {7,10,-1,0,9,ch165data};
/* char: 0xa4 */
static const GLubyte ch164data[] = {
0x82,0x7c,0x44,0x44,0x7c,0x82,
};
static const BitmapCharRec ch164 = {7,6,-1,-3,9,ch164data};
/* char: 0xa3 */
static const GLubyte ch163data[] = {
0x5c,0xa2,0x60,0x20,0x20,0xf8,0x20,0x20,0x22,0x1c,
};
static const BitmapCharRec ch163 = {7,10,-1,0,9,ch163data};
/* char: 0xa2 */
static const GLubyte ch162data[] = {
0x40,0x78,0xa4,0xa0,0x90,0x94,0x78,0x8,
};
static const BitmapCharRec ch162 = {6,8,-1,0,9,ch162data};
/* char: 0xa1 */
static const GLubyte ch161data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x0,0x80,0x80,
};
static const BitmapCharRec ch161 = {1,11,-4,0,9,ch161data};
/* char: 0x7e '~' */
static const GLubyte ch126data[] = {
0x8c,0x92,0x62,
};
static const BitmapCharRec ch126 = {7,3,-1,-7,9,ch126data};
/* char: 0x7d '}' */
static const GLubyte ch125data[] = {
0xe0,0x10,0x10,0x10,0x20,0x18,0x18,0x20,0x10,0x10,0x10,0xe0,
};
static const BitmapCharRec ch125 = {5,12,-1,1,9,ch125data};
/* char: 0x7c '|' */
static const GLubyte ch124data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
};
static const BitmapCharRec ch124 = {1,12,-4,1,9,ch124data};
/* char: 0x7b '{' */
static const GLubyte ch123data[] = {
0x38,0x40,0x40,0x40,0x20,0xc0,0xc0,0x20,0x40,0x40,0x40,0x38,
};
static const BitmapCharRec ch123 = {5,12,-3,1,9,ch123data};
/* char: 0x7a 'z' */
static const GLubyte ch122data[] = {
0xfe,0x40,0x20,0x10,0x8,0x4,0xfe,
};
static const BitmapCharRec ch122 = {7,7,-1,0,9,ch122data};
/* char: 0x79 'y' */
static const GLubyte ch121data[] = {
0x78,0x84,0x4,0x74,0x8c,0x84,0x84,0x84,0x84,0x84,
};
static const BitmapCharRec ch121 = {6,10,-1,3,9,ch121data};
/* char: 0x78 'x' */
static const GLubyte ch120data[] = {
0x82,0x44,0x28,0x10,0x28,0x44,0x82,
};
static const BitmapCharRec ch120 = {7,7,-1,0,9,ch120data};
/* char: 0x77 'w' */
static const GLubyte ch119data[] = {
0x44,0xaa,0x92,0x92,0x92,0x82,0x82,
};
static const BitmapCharRec ch119 = {7,7,-1,0,9,ch119data};
/* char: 0x76 'v' */
static const GLubyte ch118data[] = {
0x10,0x28,0x28,0x44,0x44,0x82,0x82,
};
static const BitmapCharRec ch118 = {7,7,-1,0,9,ch118data};
/* char: 0x75 'u' */
static const GLubyte ch117data[] = {
0x7a,0x84,0x84,0x84,0x84,0x84,0x84,
};
static const BitmapCharRec ch117 = {7,7,-1,0,9,ch117data};
/* char: 0x74 't' */
static const GLubyte ch116data[] = {
0x1c,0x22,0x20,0x20,0x20,0x20,0xfc,0x20,0x20,
};
static const BitmapCharRec ch116 = {7,9,-1,0,9,ch116data};
/* char: 0x73 's' */
static const GLubyte ch115data[] = {
0x7c,0x82,0x2,0x7c,0x80,0x82,0x7c,
};
static const BitmapCharRec ch115 = {7,7,-1,0,9,ch115data};
/* char: 0x72 'r' */
static const GLubyte ch114data[] = {
0x40,0x40,0x40,0x40,0x42,0x62,0x9c,
};
static const BitmapCharRec ch114 = {7,7,-1,0,9,ch114data};
/* char: 0x71 'q' */
static const GLubyte ch113data[] = {
0x2,0x2,0x2,0x7a,0x86,0x82,0x82,0x82,0x86,0x7a,
};
static const BitmapCharRec ch113 = {7,10,-1,3,9,ch113data};
/* char: 0x70 'p' */
static const GLubyte ch112data[] = {
0x80,0x80,0x80,0xbc,0xc2,0x82,0x82,0x82,0xc2,0xbc,
};
static const BitmapCharRec ch112 = {7,10,-1,3,9,ch112data};
/* char: 0x6f 'o' */
static const GLubyte ch111data[] = {
0x7c,0x82,0x82,0x82,0x82,0x82,0x7c,
};
static const BitmapCharRec ch111 = {7,7,-1,0,9,ch111data};
/* char: 0x6e 'n' */
static const GLubyte ch110data[] = {
0x82,0x82,0x82,0x82,0x82,0xc2,0xbc,
};
static const BitmapCharRec ch110 = {7,7,-1,0,9,ch110data};
/* char: 0x6d 'm' */
static const GLubyte ch109data[] = {
0x82,0x92,0x92,0x92,0x92,0x92,0xec,
};
static const BitmapCharRec ch109 = {7,7,-1,0,9,ch109data};
/* char: 0x6c 'l' */
static const GLubyte ch108data[] = {
0xf8,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xe0,
};
static const BitmapCharRec ch108 = {5,10,-2,0,9,ch108data};
/* char: 0x6b 'k' */
static const GLubyte ch107data[] = {
0x82,0x8c,0xb0,0xc0,0xb0,0x8c,0x82,0x80,0x80,0x80,
};
static const BitmapCharRec ch107 = {7,10,-1,0,9,ch107data};
/* char: 0x6a 'j' */
static const GLubyte ch106data[] = {
0x78,0x84,0x84,0x84,0x4,0x4,0x4,0x4,0x4,0x1c,0x0,0x0,0xc,
};
static const BitmapCharRec ch106 = {6,13,-1,3,9,ch106data};
/* char: 0x69 'i' */
static const GLubyte ch105data[] = {
0xf8,0x20,0x20,0x20,0x20,0x20,0xe0,0x0,0x0,0x60,
};
static const BitmapCharRec ch105 = {5,10,-2,0,9,ch105data};
/* char: 0x68 'h' */
static const GLubyte ch104data[] = {
0x82,0x82,0x82,0x82,0x82,0xc2,0xbc,0x80,0x80,0x80,
};
static const BitmapCharRec ch104 = {7,10,-1,0,9,ch104data};
/* char: 0x67 'g' */
static const GLubyte ch103data[] = {
0x7c,0x82,0x82,0x7c,0x80,0x78,0x84,0x84,0x84,0x7a,
};
static const BitmapCharRec ch103 = {7,10,-1,3,9,ch103data};
/* char: 0x66 'f' */
static const GLubyte ch102data[] = {
0x20,0x20,0x20,0x20,0xf8,0x20,0x20,0x22,0x22,0x1c,
};
static const BitmapCharRec ch102 = {7,10,-1,0,9,ch102data};
/* char: 0x65 'e' */
static const GLubyte ch101data[] = {
0x7c,0x80,0x80,0xfe,0x82,0x82,0x7c,
};
static const BitmapCharRec ch101 = {7,7,-1,0,9,ch101data};
/* char: 0x64 'd' */
static const GLubyte ch100data[] = {
0x7a,0x86,0x82,0x82,0x82,0x86,0x7a,0x2,0x2,0x2,
};
static const BitmapCharRec ch100 = {7,10,-1,0,9,ch100data};
/* char: 0x63 'c' */
static const GLubyte ch99data[] = {
0x7c,0x82,0x80,0x80,0x80,0x82,0x7c,
};
static const BitmapCharRec ch99 = {7,7,-1,0,9,ch99data};
/* char: 0x62 'b' */
static const GLubyte ch98data[] = {
0xbc,0xc2,0x82,0x82,0x82,0xc2,0xbc,0x80,0x80,0x80,
};
static const BitmapCharRec ch98 = {7,10,-1,0,9,ch98data};
/* char: 0x61 'a' */
static const GLubyte ch97data[] = {
0x7a,0x86,0x82,0x7e,0x2,0x2,0x7c,
};
static const BitmapCharRec ch97 = {7,7,-1,0,9,ch97data};
/* char: 0x60 '`' */
static const GLubyte ch96data[] = {
0x10,0x20,0x40,0xc0,
};
static const BitmapCharRec ch96 = {4,4,-3,-6,9,ch96data};
/* char: 0x5f '_' */
static const GLubyte ch95data[] = {
0xff,
};
static const BitmapCharRec ch95 = {8,1,0,1,9,ch95data};
/* char: 0x5e '^' */
static const GLubyte ch94data[] = {
0x82,0x44,0x28,0x10,
};
static const BitmapCharRec ch94 = {7,4,-1,-6,9,ch94data};
/* char: 0x5d ']' */
static const GLubyte ch93data[] = {
0xf0,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0xf0,
};
static const BitmapCharRec ch93 = {4,12,-2,1,9,ch93data};
/* char: 0x5c '\' */
static const GLubyte ch92data[] = {
0x2,0x4,0x4,0x8,0x10,0x10,0x20,0x40,0x40,0x80,
};
static const BitmapCharRec ch92 = {7,10,-1,0,9,ch92data};
/* char: 0x5b '[' */
static const GLubyte ch91data[] = {
0xf0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xf0,
};
static const BitmapCharRec ch91 = {4,12,-3,1,9,ch91data};
/* char: 0x5a 'Z' */
static const GLubyte ch90data[] = {
0xfe,0x80,0x80,0x40,0x20,0x10,0x8,0x4,0x2,0xfe,
};
static const BitmapCharRec ch90 = {7,10,-1,0,9,ch90data};
/* char: 0x59 'Y' */
static const GLubyte ch89data[] = {
0x10,0x10,0x10,0x10,0x10,0x10,0x28,0x44,0x82,0x82,
};
static const BitmapCharRec ch89 = {7,10,-1,0,9,ch89data};
/* char: 0x58 'X' */
static const GLubyte ch88data[] = {
0x82,0x82,0x44,0x28,0x10,0x10,0x28,0x44,0x82,0x82,
};
static const BitmapCharRec ch88 = {7,10,-1,0,9,ch88data};
/* char: 0x57 'W' */
static const GLubyte ch87data[] = {
0x44,0xaa,0x92,0x92,0x92,0x92,0x82,0x82,0x82,0x82,
};
static const BitmapCharRec ch87 = {7,10,-1,0,9,ch87data};
/* char: 0x56 'V' */
static const GLubyte ch86data[] = {
0x10,0x28,0x28,0x28,0x44,0x44,0x44,0x82,0x82,0x82,
};
static const BitmapCharRec ch86 = {7,10,-1,0,9,ch86data};
/* char: 0x55 'U' */
static const GLubyte ch85data[] = {
0x7c,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,
};
static const BitmapCharRec ch85 = {7,10,-1,0,9,ch85data};
/* char: 0x54 'T' */
static const GLubyte ch84data[] = {
0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0xfe,
};
static const BitmapCharRec ch84 = {7,10,-1,0,9,ch84data};
/* char: 0x53 'S' */
static const GLubyte ch83data[] = {
0x7c,0x82,0x82,0x2,0xc,0x70,0x80,0x82,0x82,0x7c,
};
static const BitmapCharRec ch83 = {7,10,-1,0,9,ch83data};
/* char: 0x52 'R' */
static const GLubyte ch82data[] = {
0x82,0x82,0x84,0x88,0x90,0xfc,0x82,0x82,0x82,0xfc,
};
static const BitmapCharRec ch82 = {7,10,-1,0,9,ch82data};
/* char: 0x51 'Q' */
static const GLubyte ch81data[] = {
0x6,0x8,0x7c,0x92,0xa2,0x82,0x82,0x82,0x82,0x82,0x82,0x7c,
};
static const BitmapCharRec ch81 = {7,12,-1,2,9,ch81data};
/* char: 0x50 'P' */
static const GLubyte ch80data[] = {
0x80,0x80,0x80,0x80,0x80,0xfc,0x82,0x82,0x82,0xfc,
};
static const BitmapCharRec ch80 = {7,10,-1,0,9,ch80data};
/* char: 0x4f 'O' */
static const GLubyte ch79data[] = {
0x7c,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x7c,
};
static const BitmapCharRec ch79 = {7,10,-1,0,9,ch79data};
/* char: 0x4e 'N' */
static const GLubyte ch78data[] = {
0x82,0x82,0x82,0x86,0x8a,0x92,0xa2,0xc2,0x82,0x82,
};
static const BitmapCharRec ch78 = {7,10,-1,0,9,ch78data};
/* char: 0x4d 'M' */
static const GLubyte ch77data[] = {
0x82,0x82,0x82,0x92,0x92,0xaa,0xaa,0xc6,0x82,0x82,
};
static const BitmapCharRec ch77 = {7,10,-1,0,9,ch77data};
/* char: 0x4c 'L' */
static const GLubyte ch76data[] = {
0xfe,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
};
static const BitmapCharRec ch76 = {7,10,-1,0,9,ch76data};
/* char: 0x4b 'K' */
static const GLubyte ch75data[] = {
0x82,0x84,0x88,0x90,0xa0,0xe0,0x90,0x88,0x84,0x82,
};
static const BitmapCharRec ch75 = {7,10,-1,0,9,ch75data};
/* char: 0x4a 'J' */
static const GLubyte ch74data[] = {
0x78,0x84,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x1e,
};
static const BitmapCharRec ch74 = {7,10,-1,0,9,ch74data};
/* char: 0x49 'I' */
static const GLubyte ch73data[] = {
0xf8,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xf8,
};
static const BitmapCharRec ch73 = {5,10,-2,0,9,ch73data};
/* char: 0x48 'H' */
static const GLubyte ch72data[] = {
0x82,0x82,0x82,0x82,0x82,0xfe,0x82,0x82,0x82,0x82,
};
static const BitmapCharRec ch72 = {7,10,-1,0,9,ch72data};
/* char: 0x47 'G' */
static const GLubyte ch71data[] = {
0x7c,0x82,0x82,0x82,0x8e,0x80,0x80,0x80,0x82,0x7c,
};
static const BitmapCharRec ch71 = {7,10,-1,0,9,ch71data};
/* char: 0x46 'F' */
static const GLubyte ch70data[] = {
0x40,0x40,0x40,0x40,0x40,0x78,0x40,0x40,0x40,0xfe,
};
static const BitmapCharRec ch70 = {7,10,-1,0,9,ch70data};
/* char: 0x45 'E' */
static const GLubyte ch69data[] = {
0xfe,0x40,0x40,0x40,0x40,0x78,0x40,0x40,0x40,0xfe,
};
static const BitmapCharRec ch69 = {7,10,-1,0,9,ch69data};
/* char: 0x44 'D' */
static const GLubyte ch68data[] = {
0xfc,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0xfc,
};
static const BitmapCharRec ch68 = {7,10,-1,0,9,ch68data};
/* char: 0x43 'C' */
static const GLubyte ch67data[] = {
0x7c,0x82,0x80,0x80,0x80,0x80,0x80,0x80,0x82,0x7c,
};
static const BitmapCharRec ch67 = {7,10,-1,0,9,ch67data};
/* char: 0x42 'B' */
static const GLubyte ch66data[] = {
0xfc,0x42,0x42,0x42,0x42,0x7c,0x42,0x42,0x42,0xfc,
};
static const BitmapCharRec ch66 = {7,10,-1,0,9,ch66data};
/* char: 0x41 'A' */
static const GLubyte ch65data[] = {
0x82,0x82,0x82,0xfe,0x82,0x82,0x82,0x44,0x28,0x10,
};
static const BitmapCharRec ch65 = {7,10,-1,0,9,ch65data};
/* char: 0x40 '@' */
static const GLubyte ch64data[] = {
0x7c,0x80,0x80,0x9a,0xa6,0xa2,0x9e,0x82,0x82,0x7c,
};
static const BitmapCharRec ch64 = {7,10,-1,0,9,ch64data};
/* char: 0x3f '?' */
static const GLubyte ch63data[] = {
0x10,0x0,0x10,0x10,0x8,0x4,0x2,0x82,0x82,0x7c,
};
static const BitmapCharRec ch63 = {7,10,-1,0,9,ch63data};
/* char: 0x3e '>' */
static const GLubyte ch62data[] = {
0x80,0x40,0x20,0x10,0x8,0x8,0x10,0x20,0x40,0x80,
};
static const BitmapCharRec ch62 = {5,10,-2,0,9,ch62data};
/* char: 0x3d '=' */
static const GLubyte ch61data[] = {
0xfe,0x0,0x0,0xfe,
};
static const BitmapCharRec ch61 = {7,4,-1,-2,9,ch61data};
/* char: 0x3c '<' */
static const GLubyte ch60data[] = {
0x8,0x10,0x20,0x40,0x80,0x80,0x40,0x20,0x10,0x8,
};
static const BitmapCharRec ch60 = {5,10,-2,0,9,ch60data};
/* char: 0x3b ';' */
static const GLubyte ch59data[] = {
0x80,0x40,0x40,0xc0,0xc0,0x0,0x0,0x0,0xc0,0xc0,
};
static const BitmapCharRec ch59 = {2,10,-4,3,9,ch59data};
/* char: 0x3a ':' */
static const GLubyte ch58data[] = {
0xc0,0xc0,0x0,0x0,0x0,0xc0,0xc0,
};
static const BitmapCharRec ch58 = {2,7,-4,0,9,ch58data};
/* char: 0x39 '9' */
static const GLubyte ch57data[] = {
0x78,0x4,0x2,0x2,0x7a,0x86,0x82,0x82,0x82,0x7c,
};
static const BitmapCharRec ch57 = {7,10,-1,0,9,ch57data};
/* char: 0x38 '8' */
static const GLubyte ch56data[] = {
0x38,0x44,0x82,0x82,0x44,0x38,0x44,0x82,0x44,0x38,
};
static const BitmapCharRec ch56 = {7,10,-1,0,9,ch56data};
/* char: 0x37 '7' */
static const GLubyte ch55data[] = {
0x40,0x40,0x20,0x20,0x10,0x8,0x4,0x2,0x2,0xfe,
};
static const BitmapCharRec ch55 = {7,10,-1,0,9,ch55data};
/* char: 0x36 '6' */
static const GLubyte ch54data[] = {
0x7c,0x82,0x82,0x82,0xc2,0xbc,0x80,0x80,0x40,0x3c,
};
static const BitmapCharRec ch54 = {7,10,-1,0,9,ch54data};
/* char: 0x35 '5' */
static const GLubyte ch53data[] = {
0x7c,0x82,0x2,0x2,0x2,0xc2,0xbc,0x80,0x80,0xfe,
};
static const BitmapCharRec ch53 = {7,10,-1,0,9,ch53data};
/* char: 0x34 '4' */
static const GLubyte ch52data[] = {
0x4,0x4,0x4,0xfe,0x84,0x44,0x24,0x14,0xc,0x4,
};
static const BitmapCharRec ch52 = {7,10,-1,0,9,ch52data};
/* char: 0x33 '3' */
static const GLubyte ch51data[] = {
0x7c,0x82,0x2,0x2,0x2,0x1c,0x8,0x4,0x2,0xfe,
};
static const BitmapCharRec ch51 = {7,10,-1,0,9,ch51data};
/* char: 0x32 '2' */
static const GLubyte ch50data[] = {
0xfe,0x80,0x40,0x30,0x8,0x4,0x2,0x82,0x82,0x7c,
};
static const BitmapCharRec ch50 = {7,10,-1,0,9,ch50data};
/* char: 0x31 '1' */
static const GLubyte ch49data[] = {
0xfe,0x10,0x10,0x10,0x10,0x10,0x90,0x50,0x30,0x10,
};
static const BitmapCharRec ch49 = {7,10,-1,0,9,ch49data};
/* char: 0x30 '0' */
static const GLubyte ch48data[] = {
0x38,0x44,0x82,0x82,0x82,0x82,0x82,0x82,0x44,0x38,
};
static const BitmapCharRec ch48 = {7,10,-1,0,9,ch48data};
/* char: 0x2f '/' */
static const GLubyte ch47data[] = {
0x80,0x40,0x40,0x20,0x10,0x10,0x8,0x4,0x4,0x2,
};
static const BitmapCharRec ch47 = {7,10,-1,0,9,ch47data};
/* char: 0x2e '.' */
static const GLubyte ch46data[] = {
0xc0,0xc0,
};
static const BitmapCharRec ch46 = {2,2,-4,0,9,ch46data};
/* char: 0x2d '-' */
static const GLubyte ch45data[] = {
0xfe,
};
static const BitmapCharRec ch45 = {7,1,-1,-4,9,ch45data};
/* char: 0x2c ',' */
static const GLubyte ch44data[] = {
0x80,0x40,0x40,0xc0,0xc0,
};
static const BitmapCharRec ch44 = {2,5,-4,3,9,ch44data};
/* char: 0x2b '+' */
static const GLubyte ch43data[] = {
0x10,0x10,0x10,0xfe,0x10,0x10,0x10,
};
static const BitmapCharRec ch43 = {7,7,-1,-1,9,ch43data};
/* char: 0x2a '*' */
static const GLubyte ch42data[] = {
0x10,0x92,0x54,0x38,0x54,0x92,0x10,
};
static const BitmapCharRec ch42 = {7,7,-1,-1,9,ch42data};
/* char: 0x29 ')' */
static const GLubyte ch41data[] = {
0x80,0x40,0x40,0x20,0x20,0x20,0x20,0x20,0x20,0x40,0x40,0x80,
};
static const BitmapCharRec ch41 = {3,12,-3,1,9,ch41data};
/* char: 0x28 '(' */
static const GLubyte ch40data[] = {
0x20,0x40,0x40,0x80,0x80,0x80,0x80,0x80,0x80,0x40,0x40,0x20,
};
static const BitmapCharRec ch40 = {3,12,-3,1,9,ch40data};
/* char: 0x27 ''' */
static const GLubyte ch39data[] = {
0x80,0x40,0x20,0x30,
};
static const BitmapCharRec ch39 = {4,4,-3,-6,9,ch39data};
/* char: 0x26 '&' */
static const GLubyte ch38data[] = {
0x62,0x94,0x88,0x94,0x62,0x60,0x90,0x90,0x90,0x60,
};
static const BitmapCharRec ch38 = {7,10,-1,0,9,ch38data};
/* char: 0x25 '%' */
static const GLubyte ch37data[] = {
0x84,0x4a,0x4a,0x24,0x10,0x10,0x48,0xa4,0xa4,0x42,
};
static const BitmapCharRec ch37 = {7,10,-1,0,9,ch37data};
/* char: 0x24 '$' */
static const GLubyte ch36data[] = {
0x10,0x7c,0x92,0x12,0x12,0x14,0x38,0x50,0x90,0x92,0x7c,0x10,
};
static const BitmapCharRec ch36 = {7,12,-1,1,9,ch36data};
/* char: 0x23 '#' */
static const GLubyte ch35data[] = {
0x48,0x48,0xfc,0x48,0x48,0xfc,0x48,0x48,
};
static const BitmapCharRec ch35 = {6,8,-1,-1,9,ch35data};
/* char: 0x22 '"' */
static const GLubyte ch34data[] = {
0x90,0x90,0x90,
};
static const BitmapCharRec ch34 = {4,3,-3,-7,9,ch34data};
/* char: 0x21 '!' */
static const GLubyte ch33data[] = {
0x80,0x80,0x0,0x0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
};
static const BitmapCharRec ch33 = {1,11,-4,0,9,ch33data};
/* char: 0x1f */
static const GLubyte ch31data[] = {
0xc0,0xc0,
};
static const BitmapCharRec ch31 = {2,2,-4,-2,9,ch31data};
/* char: 0x1e */
static const GLubyte ch30data[] = {
0x5c,0xa2,0x60,0x20,0x20,0xf8,0x20,0x20,0x22,0x1c,
};
static const BitmapCharRec ch30 = {7,10,-1,0,9,ch30data};
/* char: 0x1d */
static const GLubyte ch29data[] = {
0x80,0x40,0xfe,0x10,0xfe,0x4,0x2,
};
static const BitmapCharRec ch29 = {7,7,-1,0,9,ch29data};
/* char: 0x1c */
static const GLubyte ch28data[] = {
0x44,0x24,0x24,0x24,0x24,0x24,0xfe,
};
static const BitmapCharRec ch28 = {7,7,-1,0,9,ch28data};
/* char: 0x1b */
static const GLubyte ch27data[] = {
0xfe,0x0,0x80,0x40,0x20,0x10,0x8,0x8,0x10,0x20,0x40,0x80,
};
static const BitmapCharRec ch27 = {7,12,-1,2,9,ch27data};
/* char: 0x1a */
static const GLubyte ch26data[] = {
0xfc,0x0,0x4,0x8,0x10,0x20,0x40,0x40,0x20,0x10,0x8,0x4,
};
static const BitmapCharRec ch26 = {6,12,-2,2,9,ch26data};
/* char: 0x19 */
static const GLubyte ch25data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
};
static const BitmapCharRec ch25 = {1,15,-4,3,9,ch25data};
/* char: 0x18 */
static const GLubyte ch24data[] = {
0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0xff,0x80,
};
static const BitmapCharRec ch24 = {9,7,0,3,9,ch24data};
/* char: 0x17 */
static const GLubyte ch23data[] = {
0xff,0x80,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,
0x8,0x0,
};
static const BitmapCharRec ch23 = {9,9,0,-3,9,ch23data};
/* char: 0x16 */
static const GLubyte ch22data[] = {
0x8,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,
};
static const BitmapCharRec ch22 = {5,15,0,3,9,ch22data};
/* char: 0x15 */
static const GLubyte ch21data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0xf8,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
};
static const BitmapCharRec ch21 = {5,15,-4,3,9,ch21data};
/* char: 0x14 */
static const GLubyte ch20data[] = {
0xff,0x80,
};
static const BitmapCharRec ch20 = {9,1,0,1,9,ch20data};
/* char: 0x13 */
static const GLubyte ch19data[] = {
0xff,0x80,
};
static const BitmapCharRec ch19 = {9,1,0,-1,9,ch19data};
/* char: 0x12 */
static const GLubyte ch18data[] = {
0xff,0x80,
};
static const BitmapCharRec ch18 = {9,1,0,-3,9,ch18data};
/* char: 0x11 */
static const GLubyte ch17data[] = {
0xff,0x80,
};
static const BitmapCharRec ch17 = {9,1,0,-5,9,ch17data};
/* char: 0x10 */
static const GLubyte ch16data[] = {
0xff,0x80,
};
static const BitmapCharRec ch16 = {9,1,0,-7,9,ch16data};
/* char: 0xf */
static const GLubyte ch15data[] = {
0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0xff,0x80,0x8,0x0,
0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,
};
static const BitmapCharRec ch15 = {9,15,0,3,9,ch15data};
/* char: 0xe */
static const GLubyte ch14data[] = {
0xf8,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
};
static const BitmapCharRec ch14 = {5,9,-4,-3,9,ch14data};
/* char: 0xd */
static const GLubyte ch13data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0xf8,
};
static const BitmapCharRec ch13 = {5,7,-4,3,9,ch13data};
/* char: 0xc */
static const GLubyte ch12data[] = {
0x8,0x8,0x8,0x8,0x8,0x8,0xf8,
};
static const BitmapCharRec ch12 = {5,7,0,3,9,ch12data};
/* char: 0xb */
static const GLubyte ch11data[] = {
0xf8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,
};
static const BitmapCharRec ch11 = {5,9,0,-3,9,ch11data};
/* char: 0xa */
static const GLubyte ch10data[] = {
0x8,0x8,0x8,0x8,0x3e,0x0,0x20,0x50,0x88,0x88,
};
static const BitmapCharRec ch10 = {7,10,-1,2,9,ch10data};
/* char: 0x9 */
static const GLubyte ch9data[] = {
0x3e,0x20,0x20,0x20,0x20,0x88,0x98,0xa8,0xc8,0x88,
};
static const BitmapCharRec ch9 = {7,10,-1,2,9,ch9data};
/* char: 0x8 */
static const GLubyte ch8data[] = {
0xfe,0x10,0x10,0xfe,0x10,0x10,
};
static const BitmapCharRec ch8 = {7,6,-1,0,9,ch8data};
/* char: 0x7 */
static const GLubyte ch7data[] = {
0x70,0x88,0x88,0x70,
};
static const BitmapCharRec ch7 = {5,4,-2,-6,9,ch7data};
/* char: 0x6 */
static const GLubyte ch6data[] = {
0x20,0x20,0x3c,0x20,0x3e,0x0,0xf8,0x80,0x80,0x80,
};
static const BitmapCharRec ch6 = {7,10,-1,2,9,ch6data};
/* char: 0x5 */
static const GLubyte ch5data[] = {
0x22,0x22,0x3c,0x22,0x3c,0x0,0x78,0x80,0x80,0x78,
};
static const BitmapCharRec ch5 = {7,10,-1,2,9,ch5data};
/* char: 0x4 */
static const GLubyte ch4data[] = {
0x10,0x10,0x1c,0x10,0x1e,0x80,0x80,0xe0,0x80,0xf0,
};
static const BitmapCharRec ch4 = {7,10,-1,2,9,ch4data};
/* char: 0x3 */
static const GLubyte ch3data[] = {
0x8,0x8,0x8,0x3e,0x0,0x88,0x88,0xf8,0x88,0x88,
};
static const BitmapCharRec ch3 = {7,10,-1,2,9,ch3data};
/* char: 0x2 */
static const GLubyte ch2data[] = {
0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,
};
static const BitmapCharRec ch2 = {8,14,0,3,9,ch2data};
/* char: 0x1 */
static const GLubyte ch1data[] = {
0x10,0x38,0x7c,0xfe,0x7c,0x38,0x10,
};
static const BitmapCharRec ch1 = {7,7,-1,0,9,ch1data};
static const BitmapCharRec * const chars[] = {
&ch0,
&ch1,
&ch2,
&ch3,
&ch4,
&ch5,
&ch6,
&ch7,
&ch8,
&ch9,
&ch10,
&ch11,
&ch12,
&ch13,
&ch14,
&ch15,
&ch16,
&ch17,
&ch18,
&ch19,
&ch20,
&ch21,
&ch22,
&ch23,
&ch24,
&ch25,
&ch26,
&ch27,
&ch28,
&ch29,
&ch30,
&ch31,
&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,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
&ch160,
&ch161,
&ch162,
&ch163,
&ch164,
&ch165,
&ch166,
&ch167,
&ch168,
&ch169,
&ch170,
&ch171,
&ch172,
&ch173,
&ch174,
&ch175,
&ch176,
&ch177,
&ch178,
&ch179,
&ch180,
&ch181,
&ch182,
&ch183,
&ch184,
&ch185,
&ch186,
&ch187,
&ch188,
&ch189,
&ch190,
&ch191,
&ch192,
&ch193,
&ch194,
&ch195,
&ch196,
&ch197,
&ch198,
&ch199,
&ch200,
&ch201,
&ch202,
&ch203,
&ch204,
&ch205,
&ch206,
&ch207,
&ch208,
&ch209,
&ch210,
&ch211,
&ch212,
&ch213,
&ch214,
&ch215,
&ch216,
&ch217,
&ch218,
&ch219,
&ch220,
&ch221,
&ch222,
&ch223,
&ch224,
&ch225,
&ch226,
&ch227,
&ch228,
&ch229,
&ch230,
&ch231,
&ch232,
&ch233,
&ch234,
&ch235,
&ch236,
&ch237,
&ch238,
&ch239,
&ch240,
&ch241,
&ch242,
&ch243,
&ch244,
&ch245,
&ch246,
&ch247,
&ch248,
&ch249,
&ch250,
&ch251,
&ch252,
&ch253,
&ch254,
&ch255,
};
const BitmapFontRec glutBitmap9By15 = {
"-misc-fixed-medium-r-normal--15-140-75-75-C-90-iso8859-1",
256,
0,
chars
};
/***********************************************************
* Copyright (C) 1997, Be Inc. Copyright (C) 1999, Jake Hamby.
*
* This program is freely distributable without licensing fees
* and is provided without guarantee or warrantee expressed or
* implied. This program is -not- in the public domain.
*
* FILE: glutBlocker.h
*
* DESCRIPTION: helper class for GLUT event loop.
* if a window receives an event, wake up the event loop.
***********************************************************/
/***********************************************************
* Headers
***********************************************************/
#include <kernel/OS.h>
/***********************************************************
* CLASS: GlutBlocker
*
* DESCRIPTION: Fairly naive, but safe implementation.
* global semaphore controls access to state
* event semaphore blocks WaitEvent() call if necessary
* (this is basically a condition variable class)
***********************************************************/
class GlutBlocker {
public:
GlutBlocker();
~GlutBlocker();
void WaitEvent(); // wait for new event
void WaitEvent(bigtime_t usecs); // wait with timeout
void NewEvent(); // new event from a window (may need to wakeup main thread)
void QuickNewEvent() { events = true; } // new event from main thread
void ClearEvents() { events = false; } // clear counter at beginning of event loop
bool PendingEvent() { return events; } // XPending() equivalent
private:
sem_id gSem;
sem_id eSem;
bool events; // are there any new events?
bool sleeping; // is someone sleeping on eSem?
};
/***********************************************************
* Global variable
***********************************************************/
extern GlutBlocker gBlock;
#ifndef __glutbitmap_h__
#define __glutbitmap_h__
/* Copyright (c) Mark J. Kilgard, 1994. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#include <GL/glut.h>
typedef struct {
const GLsizei width;
const GLsizei height;
const GLfloat xorig;
const GLfloat yorig;
const GLfloat advance;
const GLubyte *bitmap;
} BitmapCharRec, *BitmapCharPtr;
typedef struct {
const char *name;
const int num_chars;
const int first;
const BitmapCharRec * const *ch;
} BitmapFontRec, *BitmapFontPtr;
typedef void *GLUTbitmapFont;
#endif /* __glutbitmap_h__ */
/* Copyright (c) Mark J. Kilgard, 1994. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#include "glutint.h"
#include "glutbitmap.h"
/* CENTRY */
int APIENTRY
glutBitmapWidth(GLUTbitmapFont font, int c)
{
BitmapFontPtr fontinfo;
const BitmapCharRec *ch;
#ifdef _WIN32
fontinfo = (BitmapFontPtr) __glutFont(font);
#else
fontinfo = (BitmapFontPtr) font;
#endif
if (c < fontinfo->first || c >= fontinfo->first + fontinfo->num_chars)
return 0;
ch = fontinfo->ch[c - fontinfo->first];
if (ch)
return ch->advance;
else
return 0;
}
int APIENTRY
glutBitmapLength(GLUTbitmapFont font, const unsigned char *string)
{
int c, length;
BitmapFontPtr fontinfo;
const BitmapCharRec *ch;
#ifdef _WIN32
fontinfo = (BitmapFontPtr) __glutFont(font);
#else
fontinfo = (BitmapFontPtr) font;
#endif
length = 0;
for (; *string != '\0'; string++) {
c = *string;
if (c >= fontinfo->first && c < fontinfo->first + fontinfo->num_chars) {
ch = fontinfo->ch[c - fontinfo->first];
if (ch)
length += ch->advance;
}
}
return length;
}
/* ENDCENTRY */
/* cursors.h: X Window standard cursor shapes */
/* Generated by bdftobcursor */
const unsigned char XC_X_cursor[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
7, 9, /* y,x of hotspot */
/* data */
0x0, 0x0,
0x70, 0xe,
0x78, 0x1e,
0x7c, 0x3e,
0x3e, 0x7c,
0x1f, 0xf8,
0xf, 0xf0,
0x7, 0xe0,
0x7, 0xe0,
0xf, 0xf0,
0x1f, 0xf8,
0x3e, 0x7c,
0x7c, 0x3e,
0x78, 0x1e,
0x70, 0xe,
0x0, 0x0,
/* mask */
0xf0, 0xf,
0xf8, 0x1f,
0xfc, 0x3f,
0xfe, 0x7f,
0x7f, 0xfe,
0x3f, 0xfc,
0x1f, 0xf8,
0xf, 0xf0,
0xf, 0xf0,
0x1f, 0xf8,
0x3f, 0xfc,
0x7f, 0xfe,
0xfe, 0x7f,
0xfc, 0x3f,
0xf8, 0x1f,
0xf0, 0xf,
};
const unsigned char XC_arrow[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
1, 2, /* y,x of hotspot */
/* data */
0x0, 0x0,
0x60, 0x0,
0x78, 0x0,
0x3e, 0x0,
0x3f, 0x80,
0x1f, 0xe0,
0x1f, 0xf8,
0xf, 0x80,
0xf, 0xc0,
0x6, 0xe0,
0x6, 0x70,
0x2, 0x38,
0x2, 0x1c,
0x0, 0xe,
0x0, 0x4,
0x0, 0x0,
/* mask */
0xe0, 0x0,
0xf8, 0x0,
0xfe, 0x0,
0x7f, 0x80,
0x7f, 0xe0,
0x3f, 0xf8,
0x3f, 0xfc,
0x1f, 0xfc,
0x1f, 0xe0,
0xf, 0xf0,
0xf, 0xf8,
0x7, 0x7c,
0x7, 0x3e,
0x2, 0x1f,
0x0, 0xe,
0x0, 0x4,
};
const unsigned char XC_based_arrow_down[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
12, 9, /* y,x of hotspot */
/* data */
0x0, 0x0,
0x0, 0x0,
0x0, 0x0,
0xf, 0xf0,
0x0, 0x0,
0xf, 0xf0,
0x1, 0x80,
0x1, 0x80,
0x1, 0x80,
0x1, 0x80,
0x5, 0xa0,
0x3, 0xc0,
0x1, 0x80,
0x0, 0x0,
0x0, 0x0,
0x0, 0x0,
/* mask */
0x0, 0x0,
0x0, 0x0,
0x1f, 0xf8,
0x1f, 0xf8,
0x1f, 0xf8,
0x1f, 0xf8,
0x1f, 0xf8,
0x3, 0xc0,
0x3, 0xc0,
0xf, 0xf0,
0xf, 0xf0,
0xf, 0xf0,
0x7, 0xe0,
0x3, 0xc0,
0x0, 0x0,
0x0, 0x0,
};
const unsigned char XC_based_arrow_up[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
12, 9, /* y,x of hotspot */
/* data */
0x0, 0x0,
0x0, 0x0,
0x0, 0x0,
0x1, 0x80,
0x3, 0xc0,
0x5, 0xa0,
0x1, 0x80,
0x1, 0x80,
0x1, 0x80,
0x1, 0x80,
0xf, 0xf0,
0x0, 0x0,
0xf, 0xf0,
0x0, 0x0,
0x0, 0x0,
0x0, 0x0,
/* mask */
0x0, 0x0,
0x0, 0x0,
0x1, 0x80,
0x3, 0xc0,
0xf, 0xf0,
0xf, 0xf0,
0xf, 0xf0,
0x3, 0xc0,
0x3, 0xc0,
0x1f, 0xf8,
0x1f, 0xf8,
0x1f, 0xf8,
0x1f, 0xf8,
0x1f, 0xf8,
0x0, 0x0,
0x0, 0x0,
};
const unsigned char XC_boat[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
7, 2, /* y,x of hotspot */
/* data */
0x0, 0x0,
0x0, 0x0,
0x0, 0x0,
0x0, 0x0,
0x0, 0x80,
0x3, 0xe0,
0x6, 0x11,
0xff, 0xff,
0x18, 0x0,
0x4, 0x0,
0x2, 0x0,
0x3, 0xff,
0x0, 0x0,
0x0, 0x0,
0x0, 0x0,
0x0, 0x0,
/* mask */
0x0, 0x0,
0x0, 0x0,
0x0, 0x0,
0x0, 0xe0,
0x3, 0xf0,
0x7, 0xf9,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0x1f, 0xff,
0x7, 0xff,
0x3, 0xff,
0x0, 0x0,
0x0, 0x0,
0x0, 0x0,
0x0, 0x0,
};
const unsigned char XC_bogosity[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
7, 8, /* y,x of hotspot */
/* data */
0x0, 0x0,
0x38, 0x8e,
0x8, 0x88,
0x8, 0x88,
0x8, 0x88,
0x3f, 0xfe,
0x28, 0x8a,
0x28, 0x8a,
0x28, 0x8a,
0x28, 0x8a,
0x3f, 0xfe,
0x8, 0x88,
0x8, 0x88,
0x8, 0x88,
0x38, 0x8e,
0x0, 0x0,
/* mask */
0x7d, 0xdf,
0x7d, 0xdf,
0x7d, 0xdf,
0x1d, 0xdc,
0x7f, 0xff,
0x7f, 0xff,
0x7f, 0xff,
0x7d, 0xdf,
0x7d, 0xdf,
0x7f, 0xff,
0x7f, 0xff,
0x7f, 0xff,
0x1d, 0xdc,
0x7d, 0xdf,
0x7d, 0xdf,
0x7d, 0xdf,
};
const unsigned char XC_bottom_left_corner[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
14, 15, /* y,x of hotspot */
/* data */
0x0, 0x0,
0x0, 0x6,
0x0, 0x6,
0x10, 0x46,
0x8, 0x46,
0x4, 0x46,
0x2, 0x46,
0x1, 0x46,
0x0, 0xc6,
0x1f, 0xc6,
0x0, 0x6,
0x0, 0x6,
0x0, 0x6,
0x7f, 0xfe,
0x7f, 0xfe,
0x0, 0x0,
/* mask */
0x0, 0xf,
0x0, 0xf,
0x30, 0xef,
0x38, 0xef,
0x1c, 0xef,
0xe, 0xef,
0x7, 0xef,
0x3, 0xef,
0x3f, 0xef,
0x3f, 0xef,
0x3f, 0xef,
0x0, 0xf,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
};
const unsigned char XC_bottom_right_corner[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
14, 2, /* y,x of hotspot */
/* data */
0x0, 0x0,
0x60, 0x0,
0x60, 0x0,
0x62, 0x8,
0x62, 0x10,
0x62, 0x20,
0x62, 0x40,
0x62, 0x80,
0x63, 0x0,
0x63, 0xf8,
0x60, 0x0,
0x60, 0x0,
0x60, 0x0,
0x7f, 0xfe,
0x7f, 0xfe,
0x0, 0x0,
/* mask */
0xf0, 0x0,
0xf0, 0x0,
0xf7, 0xc,
0xf7, 0x1c,
0xf7, 0x38,
0xf7, 0x70,
0xf7, 0xe0,
0xf7, 0xc0,
0xf7, 0xfc,
0xf7, 0xfc,
0xf7, 0xfc,
0xf0, 0x0,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
};
const unsigned char XC_bottom_side[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
14, 8, /* y,x of hotspot */
/* data */
0x0, 0x0,
0x0, 0x80,
0x0, 0x80,
0x0, 0x80,
0x0, 0x80,
0x0, 0x80,
0x0, 0x80,
0x8, 0x88,
0x4, 0x90,
0x2, 0xa0,
0x1, 0xc0,
0x0, 0x80,
0x0, 0x0,
0x3f, 0xfe,
0x3f, 0xfe,
0x0, 0x0,
/* mask */
0x1, 0xc0,
0x1, 0xc0,
0x1, 0xc0,
0x1, 0xc0,
0x1, 0xc0,
0x1, 0xc0,
0x19, 0xcc,
0x1d, 0xdc,
0xf, 0xf8,
0x7, 0xf0,
0x3, 0xe0,
0x1, 0xc0,
0x7f, 0xff,
0x7f, 0xff,
0x7f, 0xff,
0x7f, 0xff,
};
const unsigned char XC_bottom_tee[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
12, 8, /* y,x of hotspot */
/* data */
0x0, 0x0,
0x0, 0x0,
0x0, 0x0,
0x1, 0x80,
0x1, 0x80,
0x1, 0x80,
0x1, 0x80,
0x1, 0x80,
0x1, 0x80,
0x1, 0x80,
0x1, 0x80,
0x7f, 0xfe,
0x7f, 0xfe,
0x0, 0x0,
0x0, 0x0,
0x0, 0x0,
/* mask */
0x0, 0x0,
0x0, 0x0,
0x3, 0xc0,
0x3, 0xc0,
0x3, 0xc0,
0x3, 0xc0,
0x3, 0xc0,
0x3, 0xc0,
0x3, 0xc0,
0x3, 0xc0,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0x0, 0x0,
0x0, 0x0,
};
const unsigned char XC_box_spiral[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
8, 7, /* y,x of hotspot */
/* data */
0xff, 0xff,
0x0, 0x1,
0x7f, 0xfd,
0x40, 0x5,
0x5f, 0xf5,
0x50, 0x15,
0x57, 0xd5,
0x54, 0x55,
0x55, 0x55,
0x55, 0xd5,
0x54, 0x15,
0x57, 0xf5,
0x50, 0x5,
0x5f, 0xfd,
0x40, 0x1,
0x7f, 0xff,
/* mask */
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
};
const unsigned char XC_center_ptr[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
1, 9, /* y,x of hotspot */
/* data */
0x0, 0x0,
0x81, 0x80,
0x1, 0x80,
0x3, 0xc0,
0x3, 0xc0,
0x7, 0xe0,
0x7, 0xe0,
0xf, 0xf0,
0xf, 0xf0,
0x19, 0x98,
0x11, 0x88,
0x1, 0x80,
0x1, 0x80,
0x1, 0x80,
0x1, 0x80,
0x0, 0x0,
/* mask */
0x83, 0xc0,
0x3, 0xc0,
0x7, 0xe0,
0x7, 0xe0,
0xf, 0xf0,
0xf, 0xf0,
0x1f, 0xf8,
0x1f, 0xf8,
0x3f, 0xfc,
0x3f, 0xfc,
0x3f, 0xfc,
0x3b, 0xdc,
0x3, 0xc0,
0x3, 0xc0,
0x3, 0xc0,
0x3, 0xc0,
};
const unsigned char XC_circle[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
8, 8, /* y,x of hotspot */
/* data */
0x0, 0x0,
0x3, 0xc0,
0xf, 0xf0,
0x1f, 0xf8,
0x3c, 0x3c,
0x38, 0x1c,
0x70, 0xe,
0x70, 0xe,
0x70, 0xe,
0x70, 0xe,
0x38, 0x1c,
0x3c, 0x3c,
0x1f, 0xf8,
0xf, 0xf0,
0x3, 0xc0,
0x0, 0x0,
/* mask */
0x7, 0xe0,
0x1f, 0xf8,
0x3f, 0xfc,
0x7f, 0xfe,
0x7f, 0xfe,
0xfc, 0x3f,
0xf8, 0x1f,
0xf8, 0x1f,
0xf8, 0x1f,
0xf8, 0x1f,
0xfc, 0x3f,
0x7f, 0xfe,
0x7f, 0xfe,
0x3f, 0xfc,
0x1f, 0xf8,
0x7, 0xe0,
};
const unsigned char XC_clock[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
3, 9, /* y,x of hotspot */
/* data */
0x1f, 0xf8,
0x33, 0xcc,
0x66, 0x26,
0x49, 0x92,
0x48, 0xf2,
0x44, 0x22,
0x63, 0xc6,
0x3f, 0xfc,
0x29, 0x94,
0x29, 0x94,
0x29, 0x94,
0x2b, 0xd4,
0x69, 0x96,
0x78, 0x1e,
0x7f, 0xfe,
0x7f, 0xfe,
/* mask */
0x1f, 0xfe,
0x39, 0xf7,
0x77, 0xdb,
0x6d, 0xed,
0x6f, 0xfd,
0x66, 0xf9,
0x73, 0xf3,
0x3f, 0xff,
0x35, 0xeb,
0x35, 0xeb,
0x35, 0xeb,
0x37, 0xfb,
0x75, 0xeb,
0x7c, 0xcf,
0x7f, 0xff,
0x7f, 0xff,
};
const unsigned char XC_coffee_mug[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
9, 8, /* y,x of hotspot */
/* data */
0x8f, 0xf8,
0x10, 0x4,
0x60, 0x6,
0x58, 0xa,
0x47, 0xf2,
0x40, 0x3,
0x40, 0x3,
0x40, 0x2,
0x40, 0x2,
0x58, 0x9a,
0x55, 0x56,
0x55, 0xd7,
0x59, 0x5b,
0x40, 0x2,
0x40, 0x2,
0x3f, 0xfc,
/* mask */
0xf, 0xf8,
0x1f, 0xfc,
0xff, 0xfe,
0xff, 0xfe,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0xff, 0xfe,
0xff, 0xfe,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0xff, 0xfe,
0x3f, 0xfc,
};
const unsigned char XC_cross[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
7, 9, /* y,x of hotspot */
/* data */
0x1, 0x40,
0x1, 0x40,
0x1, 0x40,
0x1, 0x40,
0x1, 0x40,
0x1, 0x40,
0xff, 0x7f,
0x0, 0x0,
0xff, 0x7f,
0x1, 0x40,
0x1, 0x40,
0x1, 0x40,
0x1, 0x40,
0x1, 0x40,
0x1, 0x40,
0x0, 0x0,
/* mask */
0x3, 0xe0,
0x3, 0xe0,
0x3, 0xe0,
0x3, 0xe0,
0x3, 0xe0,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0x3, 0xe0,
0x3, 0xe0,
0x3, 0xe0,
0x3, 0xe0,
0x3, 0xe0,
0x3, 0xe0,
};
const unsigned char XC_cross_reverse[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
7, 9, /* y,x of hotspot */
/* data */
0x21, 0x42,
0x51, 0x45,
0x29, 0x4a,
0x15, 0x54,
0xb, 0x68,
0x5, 0x50,
0xfe, 0xbf,
0x1, 0x40,
0xfe, 0xbf,
0x5, 0x50,
0xb, 0x68,
0x15, 0x54,
0x29, 0x4a,
0x51, 0x45,
0x21, 0x42,
0x0, 0x0,
/* mask */
0x33, 0x66,
0xdb, 0x6d,
0x6f, 0x7b,
0x37, 0x76,
0x1b, 0x6c,
0xfd, 0x5f,
0xfe, 0x3f,
0x0, 0x80,
0xfe, 0x3f,
0xfd, 0x5f,
0x1b, 0x6c,
0x37, 0x76,
0x6f, 0x7b,
0xdb, 0x6d,
0x33, 0x66,
0x0, 0x0,
};
const unsigned char XC_crosshair[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
7, 9, /* y,x of hotspot */
/* data */
0x0, 0x80,
0x0, 0x80,
0x0, 0x80,
0x0, 0x80,
0x0, 0x80,
0x0, 0x80,
0x0, 0x80,
0xff, 0x7f,
0x0, 0x80,
0x0, 0x80,
0x0, 0x80,
0x0, 0x80,
0x0, 0x80,
0x0, 0x80,
0x0, 0x80,
0x0, 0x0,
/* mask */
0x1, 0xc0,
0x1, 0xc0,
0x1, 0xc0,
0x1, 0xc0,
0x1, 0xc0,
0x1, 0xc0,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0x1, 0xc0,
0x1, 0xc0,
0x1, 0xc0,
0x1, 0xc0,
0x1, 0xc0,
0x1, 0xc0,
0x1, 0xc0,
};
const unsigned char XC_diamond_cross[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
7, 8, /* y,x of hotspot */
/* data */
0x81, 0x40,
0x3, 0x60,
0x5, 0x50,
0x9, 0x48,
0x11, 0x44,
0x21, 0x42,
0x7f, 0x7f,
0x0, 0x0,
0x7f, 0x7f,
0x21, 0x42,
0x11, 0x44,
0x9, 0x48,
0x5, 0x50,
0x3, 0x60,
0x1, 0x40,
0x0, 0x0,
/* mask */
0x3, 0xe0,
0x7, 0xf0,
0xf, 0xf8,
0x1d, 0xdc,
0x39, 0xce,
0x71, 0xc7,
0xff, 0xff,
0xff, 0x7f,
0xff, 0xff,
0x71, 0xc7,
0x39, 0xce,
0x1d, 0xdc,
0xf, 0xf8,
0x7, 0xf0,
0x3, 0xe0,
0x1, 0xc0,
};
const unsigned char XC_dot[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
8, 8, /* y,x of hotspot */
/* data */
0x0, 0x0,
0x0, 0x0,
0x0, 0x0,
0x83, 0xc0,
0xf, 0xf0,
0xf, 0xf0,
0x1f, 0xf8,
0x1f, 0xf8,
0x1f, 0xf8,
0x1f, 0xf8,
0xf, 0xf0,
0xf, 0xf0,
0x3, 0xc0,
0x0, 0x0,
0x0, 0x0,
0x0, 0x0,
/* mask */
0x0, 0x0,
0x0, 0x0,
0x87, 0xe0,
0x1f, 0xf8,
0x1f, 0xf8,
0x3f, 0xfc,
0x3f, 0xfc,
0x3f, 0xfc,
0x3f, 0xfc,
0x3f, 0xfc,
0x3f, 0xfc,
0x1f, 0xf8,
0x1f, 0xf8,
0x7, 0xe0,
0x0, 0x0,
0x0, 0x0,
};
const unsigned char XC_dotbox[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
7, 8, /* y,x of hotspot */
/* data */
0x0, 0x0,
0x0, 0x0,
0x7f, 0xfc,
0x20, 0x4,
0x20, 0x4,
0x20, 0x4,
0x20, 0x4,
0x21, 0x84,
0x21, 0x84,
0x20, 0x4,
0x20, 0x4,
0x20, 0x4,
0x20, 0x4,
0x3f, 0xfc,
0x0, 0x0,
0x0, 0x0,
/* mask */
0x0, 0x0,
0x7f, 0xfe,
0x7f, 0xfe,
0x7f, 0xfe,
0x70, 0xe,
0x70, 0xe,
0x73, 0xce,
0x73, 0xce,
0x73, 0xce,
0x73, 0xce,
0x70, 0xe,
0x70, 0xe,
0x7f, 0xfe,
0x7f, 0xfe,
0x7f, 0xfe,
0x0, 0x0,
};
const unsigned char XC_double_arrow[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
8, 8, /* y,x of hotspot */
/* data */
0x0, 0x0,
0x81, 0x80,
0x3, 0xc0,
0x7, 0xe0,
0xd, 0xb0,
0x19, 0x98,
0x1, 0x80,
0x1, 0x80,
0x1, 0x80,
0x1, 0x80,
0x19, 0x98,
0xd, 0xb0,
0x7, 0xe0,
0x3, 0xc0,
0x1, 0x80,
0x0, 0x0,
/* mask */
0x83, 0xc0,
0x7, 0xe0,
0xf, 0xf0,
0x1f, 0xf8,
0x3f, 0xfc,
0x3f, 0xfc,
0x3f, 0xfc,
0x3, 0xc0,
0x3, 0xc0,
0x3f, 0xfc,
0x3f, 0xfc,
0x3f, 0xfc,
0x1f, 0xf8,
0xf, 0xf0,
0x7, 0xe0,
0x3, 0xc0,
};
const unsigned char XC_draft_large[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
0, 1, /* y,x of hotspot */
/* data */
0xc0, 0x0,
0x30, 0x0,
0x3c, 0x0,
0x1f, 0x0,
0x1f, 0xc0,
0xf, 0xf0,
0xf, 0xfc,
0x7, 0x80,
0x7, 0x40,
0x3, 0x20,
0x3, 0x10,
0x1, 0x8,
0x1, 0x4,
0x0, 0x2,
0x0, 0x1,
0x0, 0x0,
/* mask */
0x60, 0x0,
0x78, 0x0,
0x7e, 0x0,
0x3f, 0x80,
0x1f, 0xe0,
0x1f, 0xf8,
0xf, 0xfe,
0xf, 0xfe,
0x7, 0xe0,
0x7, 0xf0,
0x3, 0xb8,
0x3, 0x9c,
0x1, 0x8e,
0x1, 0x87,
0x0, 0x3,
0x0, 0x1,
};
const unsigned char XC_draft_small[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
0, 1, /* y,x of hotspot */
/* data */
0x40, 0x0,
0x30, 0x0,
0x3c, 0x0,
0x1f, 0x0,
0x1f, 0xc0,
0xe, 0x0,
0xd, 0x0,
0x4, 0x80,
0x4, 0x40,
0x0, 0x20,
0x0, 0x10,
0x0, 0x8,
0x0, 0x4,
0x0, 0x2,
0x0, 0x1,
0x0, 0x0,
/* mask */
0x60, 0x0,
0x78, 0x0,
0x3e, 0x0,
0x3f, 0x80,
0x1f, 0xe0,
0x1f, 0xe0,
0xf, 0x80,
0xf, 0xc0,
0x6, 0xe0,
0x2, 0x70,
0x0, 0x38,
0x0, 0x1c,
0x0, 0xe,
0x0, 0x7,
0x0, 0x3,
0x0, 0x0,
};
const unsigned char XC_draped_box[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
7, 8, /* y,x of hotspot */
/* data */
0x0, 0x0,
0x0, 0x0,
0x7f, 0xfc,
0x22, 0x44,
0x26, 0x64,
0x2c, 0x34,
0x38, 0x1c,
0x21, 0x84,
0x21, 0x84,
0x38, 0x1c,
0x2c, 0x34,
0x26, 0x64,
0x22, 0x44,
0x3f, 0xfc,
0x0, 0x0,
0x0, 0x0,
/* mask */
0x0, 0x0,
0x7f, 0xfe,
0x7f, 0xfe,
0x67, 0xe6,
0x6f, 0xf6,
0x7e, 0x7e,
0x7d, 0xbe,
0x7b, 0xde,
0x7b, 0xde,
0x7d, 0xbe,
0x7e, 0x7e,
0x6f, 0xf6,
0x67, 0xe6,
0x7f, 0xfe,
0x7f, 0xfe,
0x0, 0x0,
};
const unsigned char XC_exchange[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
7, 9, /* y,x of hotspot */
/* data */
0x0, 0x0,
0x7, 0xe2,
0xf, 0xf6,
0x18, 0x3e,
0x10, 0x12,
0x0, 0x32,
0x0, 0x7e,
0x0, 0x0,
0x0, 0x0,
0x7e, 0x0,
0x4c, 0x0,
0x48, 0x8,
0x7c, 0x18,
0x6f, 0xf0,
0x47, 0xe0,
0x0, 0x0,
/* mask */
0x7, 0xe3,
0xf, 0xf7,
0x1f, 0xff,
0x3f, 0xff,
0x38, 0x3f,
0x30, 0xff,
0x0, 0xff,
0x0, 0xff,
0xff, 0x0,
0xff, 0x0,
0xfe, 0xc,
0xfc, 0x1c,
0xff, 0xfc,
0xff, 0xf8,
0xef, 0xf0,
0xc7, 0xe0,
};
const unsigned char XC_fleur[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
8, 8, /* y,x of hotspot */
/* data */
0x0, 0x0,
0x1, 0x80,
0x3, 0xc0,
0x7, 0xe0,
0x1, 0x80,
0x11, 0x88,
0x31, 0x8c,
0x7f, 0xfe,
0x7f, 0xfe,
0x31, 0x8c,
0x11, 0x88,
0x1, 0x80,
0x7, 0xe0,
0x3, 0xc0,
0x1, 0x80,
0x0, 0x0,
/* mask */
0x3, 0xc0,
0x7, 0xc0,
0x7, 0xe0,
0xf, 0xf0,
0x17, 0xe8,
0x3b, 0xdc,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0x3b, 0xdc,
0x17, 0xe8,
0xf, 0xf0,
0x7, 0xe0,
0x3, 0xc0,
0x3, 0xc0,
};
const unsigned char XC_gobbler[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
2, 2, /* y,x of hotspot */
/* data */
0x1e, 0x0,
0xe, 0x0,
0xcc, 0x1,
0xd, 0xf9,
0xf, 0xff,
0xc, 0x7f,
0xc, 0x3f,
0x1c, 0x6,
0xf, 0x0,
0x7, 0xf8,
0x0, 0x10,
0x0, 0x10,
0x0, 0x10,
0x0, 0x10,
0x0, 0x78,
0x0, 0x0,
/* mask */
0x3f, 0x0,
0x3f, 0x0,
0xff, 0x3,
0xff, 0xff,
0xff, 0xff,
0x3f, 0xff,
0x3f, 0xff,
0x3f, 0xff,
0x3f, 0xff,
0x3f, 0xff,
0x1f, 0xfe,
0xf, 0xf8,
0x0, 0x38,
0x0, 0x38,
0x0, 0xfc,
0x0, 0xfc,
};
const unsigned char XC_gumby[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
0, 14, /* y,x of hotspot */
/* data */
0x0, 0xfc,
0x1, 0x8,
0x2, 0x13,
0x5, 0x57,
0x4, 0x13,
0x5, 0xd3,
0x3c, 0x1f,
0xfc, 0x1c,
0xe4, 0x10,
0xe4, 0x10,
0xf4, 0x90,
0xe4, 0x90,
0x4, 0x90,
0x8, 0x88,
0x10, 0x84,
0x1f, 0x7c,
/* mask */
0x0, 0xfc,
0x1, 0xfb,
0x3, 0xf7,
0x7, 0xff,
0x7, 0xf7,
0x3f, 0xf7,
0x7f, 0xff,
0xff, 0xff,
0xf7, 0xfc,
0xf7, 0xf0,
0xff, 0xf0,
0xf7, 0xf0,
0xe7, 0xf0,
0xf, 0xf8,
0x1f, 0xfc,
0x1f, 0x7c,
};
const unsigned char XC_hand1[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
0, 2, /* y,x of hotspot */
/* data */
0x30, 0x0,
0x3c, 0x0,
0xf, 0x0,
0x7, 0x80,
0x3, 0xc0,
0x7, 0xe0,
0xf, 0xf0,
0x7, 0xf4,
0xf, 0xfe,
0xf, 0xfa,
0x7, 0xe0,
0x3, 0xe0,
0x0, 0x52,
0x0, 0x46,
0x0, 0x2c,
0x0, 0x18,
/* mask */
0xb8, 0x0,
0x3e, 0x0,
0x1f, 0x80,
0xf, 0xc0,
0x7, 0xe0,
0xf, 0xf0,
0x1f, 0xfc,
0x1f, 0xfe,
0x1f, 0xfe,
0x1f, 0xfe,
0xf, 0xfe,
0x7, 0xfe,
0x3, 0xfe,
0x0, 0xfe,
0x0, 0x7e,
0x0, 0x3c,
};
const unsigned char XC_hand2[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
1, 15, /* y,x of hotspot */
/* data */
0x0, 0x0,
0x1, 0xfe,
0x2, 0x1,
0x4, 0x7e,
0x8, 0x8,
0x8, 0x70,
0x8, 0x8,
0x14, 0x70,
0x22, 0x8,
0x41, 0x30,
0x20, 0xc0,
0x12, 0x40,
0x8, 0x80,
0x5, 0x0,
0x2, 0x0,
0x0, 0x0,
/* mask */
0x1, 0xfe,
0x3, 0xff,
0x7, 0xff,
0xf, 0xff,
0x1f, 0xfe,
0x1f, 0xf8,
0x1f, 0xfc,
0x3f, 0xf8,
0x7f, 0xfc,
0xff, 0xf8,
0x7f, 0xf0,
0x3f, 0xe0,
0x1f, 0xc0,
0xf, 0x80,
0x7, 0x0,
0x2, 0x0,
};
const unsigned char XC_heart[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
9, 9, /* y,x of hotspot */
/* data */
0x0, 0x0,
0x1f, 0x7c,
0x31, 0xc6,
0x60, 0x83,
0x40, 0x1,
0x40, 0x1,
0x40, 0x1,
0x40, 0x1,
0x60, 0x3,
0x30, 0x6,
0x18, 0xc,
0xc, 0x18,
0x6, 0x30,
0x3, 0x60,
0x1, 0xc0,
0x0, 0x0,
/* mask */
0x0, 0x0,
0x9f, 0x7c,
0x3f, 0xfe,
0x71, 0xc7,
0x60, 0x83,
0x60, 0x3,
0x60, 0x3,
0x61, 0x43,
0x70, 0x87,
0x38, 0xe,
0x1c, 0x1c,
0xe, 0x38,
0x7, 0xf0,
0x3, 0xe0,
0x1, 0xc0,
0x0, 0x0,
};
const unsigned char XC_icon[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
8, 8, /* y,x of hotspot */
/* data */
0xff, 0xff,
0xaa, 0xab,
0xd5, 0x55,
0xaa, 0xab,
0xd0, 0x5,
0xa0, 0xb,
0xd0, 0x5,
0xa0, 0xb,
0xd0, 0x5,
0xa0, 0xb,
0xd0, 0x5,
0xa0, 0xb,
0xd5, 0x55,
0xaa, 0xab,
0xd5, 0x55,
0xff, 0xff,
/* mask */
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
};
const unsigned char XC_iron_cross[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
7, 8, /* y,x of hotspot */
/* data */
0x0, 0x0,
0x3f, 0xfc,
0x1f, 0xf8,
0x4f, 0xf2,
0x67, 0xe6,
0x73, 0xce,
0x79, 0x9e,
0x7f, 0xfe,
0x7f, 0xfe,
0x79, 0x9e,
0x73, 0xce,
0x67, 0xe6,
0x4f, 0xf2,
0x1f, 0xf8,
0x3f, 0xfc,
0x0, 0x0,
/* mask */
0x3f, 0xfc,
0x7f, 0xfe,
0x7f, 0xfe,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0x7f, 0xfe,
0x7f, 0xfe,
0x3f, 0xfc,
};
const unsigned char XC_left_ptr[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
1, 12, /* y,x of hotspot */
/* data */
0x0, 0x0,
0x0, 0x10,
0x0, 0x30,
0x0, 0x70,
0x0, 0xf0,
0x1, 0xf0,
0x3, 0xf0,
0x7, 0xf0,
0xf, 0xf0,
0x1, 0xf0,
0x1, 0xb0,
0x3, 0x10,
0x3, 0x0,
0x6, 0x0,
0x6, 0x0,
0x0, 0x0,
/* mask */
0x0, 0x18,
0x0, 0x38,
0x0, 0x78,
0x0, 0xf8,
0x1, 0xf8,
0x3, 0xf8,
0x7, 0xf8,
0xf, 0xf8,
0x1f, 0xf8,
0x1f, 0xf8,
0x3, 0xf8,
0x7, 0xb8,
0x7, 0x98,
0xf, 0x0,
0xf, 0x0,
0x6, 0x0,
};
const unsigned char XC_left_side[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
7, 15, /* y,x of hotspot */
/* data */
0x0, 0x0,
0x0, 0x6,
0x0, 0x6,
0x1, 0x6,
0x0, 0x86,
0x0, 0x46,
0x0, 0x26,
0x7f, 0xf6,
0x0, 0x26,
0x0, 0x46,
0x0, 0x86,
0x1, 0x6,
0x0, 0x6,
0x0, 0x6,
0x0, 0x0,
0x0, 0x0,
/* mask */
0x0, 0xf,
0x0, 0xf,
0x3, 0xf,
0x3, 0x8f,
0x1, 0xcf,
0x0, 0xef,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0x0, 0xef,
0x1, 0xcf,
0x3, 0x8f,
0x3, 0xf,
0x0, 0xf,
0x0, 0xf,
0x0, 0x0,
};
const unsigned char XC_left_tee[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
8, 13, /* y,x of hotspot */
/* data */
0x0, 0x0,
0x80, 0x18,
0x0, 0x18,
0x0, 0x18,
0x0, 0x18,
0x0, 0x18,
0x0, 0x18,
0x1f, 0xf8,
0x1f, 0xf8,
0x0, 0x18,
0x0, 0x18,
0x0, 0x18,
0x0, 0x18,
0x0, 0x18,
0x0, 0x18,
0x0, 0x0,
/* mask */
0x0, 0x3c,
0x0, 0x3c,
0x0, 0x3c,
0x0, 0x3c,
0x0, 0x3c,
0x0, 0x3c,
0x3f, 0xfc,
0x3f, 0xfc,
0x3f, 0xfc,
0x3f, 0xfc,
0x0, 0x3c,
0x0, 0x3c,
0x0, 0x3c,
0x0, 0x3c,
0x0, 0x3c,
0x0, 0x3c,
};
const unsigned char XC_leftbutton[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
8, 8, /* y,x of hotspot */
/* data */
0xc0, 0x1,
0xbf, 0xfe,
0xbf, 0xfe,
0xa2, 0x22,
0xaa, 0xa2,
0xaa, 0xa2,
0xaa, 0xa2,
0xaa, 0xa2,
0xa2, 0x22,
0xbf, 0xfe,
0xbf, 0xfe,
0xbf, 0xfe,
0xbf, 0xfe,
0xbf, 0xfe,
0xbf, 0xfe,
0xc0, 0x1,
/* mask */
0xbf, 0xfe,
0x7f, 0xff,
0x7f, 0xff,
0x7f, 0xff,
0x7f, 0xff,
0x7f, 0xff,
0x7f, 0xff,
0x7f, 0xff,
0x7f, 0xff,
0x7f, 0xff,
0x7f, 0xff,
0x7f, 0xff,
0x7f, 0xff,
0x7f, 0xff,
0x7f, 0xff,
0x3f, 0xfe,
};
const unsigned char XC_ll_angle[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
12, 13, /* y,x of hotspot */
/* data */
0x0, 0x0,
0x0, 0x0,
0x0, 0x0,
0x80, 0x18,
0x0, 0x18,
0x0, 0x18,
0x0, 0x18,
0x0, 0x18,
0x0, 0x18,
0x0, 0x18,
0x0, 0x18,
0x1f, 0xf8,
0x1f, 0xf8,
0x0, 0x0,
0x0, 0x0,
0x0, 0x0,
/* mask */
0x0, 0x0,
0x0, 0x0,
0x0, 0x3c,
0x0, 0x3c,
0x0, 0x3c,
0x0, 0x3c,
0x0, 0x3c,
0x0, 0x3c,
0x0, 0x3c,
0x0, 0x3c,
0x3f, 0xfc,
0x3f, 0xfc,
0x3f, 0xfc,
0x3f, 0xfc,
0x0, 0x0,
0x0, 0x0,
};
const unsigned char XC_lr_angle[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
12, 4, /* y,x of hotspot */
/* data */
0x0, 0x0,
0x0, 0x0,
0x0, 0x0,
0x98, 0x0,
0x18, 0x0,
0x18, 0x0,
0x18, 0x0,
0x18, 0x0,
0x18, 0x0,
0x18, 0x0,
0x18, 0x0,
0x1f, 0xf8,
0x1f, 0xf8,
0x0, 0x0,
0x0, 0x0,
0x0, 0x0,
/* mask */
0x0, 0x0,
0x0, 0x0,
0x3c, 0x0,
0x3c, 0x0,
0x3c, 0x0,
0x3c, 0x0,
0x3c, 0x0,
0x3c, 0x0,
0x3c, 0x0,
0x3c, 0x0,
0x3f, 0xfc,
0x3f, 0xfc,
0x3f, 0xfc,
0x3f, 0xfc,
0x0, 0x0,
0x0, 0x0,
};
const unsigned char XC_man[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
5, 2, /* y,x of hotspot */
/* data */
0x1, 0xc0,
0xf, 0x78,
0x1, 0x40,
0x0, 0x81,
0xe1, 0xc2,
0xd2, 0x24,
0xe, 0xb8,
0x2, 0xa0,
0x2, 0x20,
0x1, 0x40,
0x2, 0x20,
0x4, 0x90,
0x9, 0x48,
0xa, 0x28,
0x3c, 0x1e,
0xfc, 0x1f,
/* mask */
0x7, 0xf8,
0xf, 0xfc,
0x1f, 0xfc,
0x41, 0xc3,
0xe3, 0xe7,
0xff, 0xfe,
0xdf, 0xfc,
0xf, 0xf8,
0x7, 0xe0,
0x3, 0xe0,
0x7, 0xf0,
0xf, 0xf8,
0x1f, 0xfc,
0x3f, 0x7e,
0xfe, 0x3f,
0xfe, 0x3f,
};
const unsigned char XC_middlebutton[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
8, 8, /* y,x of hotspot */
/* data */
0xc0, 0x1,
0xbf, 0xfe,
0xbf, 0xfe,
0xa2, 0x22,
0xaa, 0x2a,
0xaa, 0x2a,
0xaa, 0x2a,
0xaa, 0x2a,
0xa2, 0x22,
0xbf, 0xfe,
0xbf, 0xfe,
0xbf, 0xfe,
0xbf, 0xfe,
0xbf, 0xfe,
0xbf, 0xfe,
0xc0, 0x1,
/* mask */
0xbf, 0xfe,
0x7f, 0xff,
0x7f, 0xff,
0x7f, 0xff,
0x7f, 0xff,
0x7f, 0xff,
0x7f, 0xff,
0x7f, 0xff,
0x7f, 0xff,
0x7f, 0xff,
0x7f, 0xff,
0x7f, 0xff,
0x7f, 0xff,
0x7f, 0xff,
0x7f, 0xff,
0x3f, 0xfe,
};
const unsigned char XC_mouse[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
2, 11, /* y,x of hotspot */
/* data */
0x0, 0x0,
0x0, 0xe0,
0x0, 0x30,
0x0, 0x60,
0x0, 0xc0,
0x1f, 0xfe,
0x20, 0x1,
0x6c, 0xcd,
0x6c, 0xcd,
0x6c, 0xcd,
0x60, 0x1,
0x60, 0x1,
0x38, 0x6,
0x6, 0x18,
0x1, 0xe0,
0x0, 0x0,
/* mask */
0x1, 0xf0,
0x0, 0x78,
0x0, 0xf0,
0x0, 0xe0,
0x1f, 0xfe,
0x3f, 0xff,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0xef, 0xfc,
0x7, 0xf8,
0x3, 0xf0,
0x1, 0xe0,
};
const unsigned char XC_pencil[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
15, 3, /* y,x of hotspot */
/* data */
0x40, 0x38,
0x0, 0x44,
0x0, 0xc4,
0x1, 0x48,
0x1, 0x78,
0x2, 0x10,
0x2, 0x20,
0x4, 0x20,
0x4, 0x40,
0x8, 0xc0,
0x8, 0x80,
0x11, 0x0,
0x1e, 0x0,
0x1c, 0x0,
0x18, 0x0,
0x10, 0x0,
/* mask */
0x80, 0x7e,
0x0, 0xfe,
0x1, 0xfe,
0x1, 0xfc,
0x3, 0xf8,
0x3, 0xf8,
0x7, 0xf0,
0x7, 0xe0,
0xf, 0xe0,
0xf, 0xc0,
0x1f, 0xc0,
0x3f, 0x80,
0x3f, 0x0,
0x3e, 0x0,
0x3c, 0x0,
0x38, 0x0,
};
const unsigned char XC_pirate[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
12, 8, /* y,x of hotspot */
/* data */
0x1, 0xe0,
0x3, 0xf0,
0x7, 0xf8,
0xc, 0xcc,
0xc, 0xcc,
0x7, 0xf8,
0x3, 0xf0,
0x1, 0xe0,
0x21, 0xe1,
0x61, 0xe1,
0x10, 0xc2,
0xe, 0x1c,
0x1, 0xe0,
0x47, 0xf8,
0x7c, 0xf,
0x20, 0x1,
/* mask */
0x3, 0xf0,
0x7, 0xf8,
0xf, 0xfc,
0x1f, 0xfe,
0x1f, 0xfe,
0xf, 0xfc,
0x7, 0xf8,
0x83, 0xf1,
0xe3, 0xf1,
0xf3, 0xf3,
0x39, 0xef,
0x1e, 0x1e,
0x1, 0xe0,
0xc7, 0xfe,
0xff, 0xff,
0x7c, 0xf,
};
const unsigned char XC_plus[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
8, 9, /* y,x of hotspot */
/* data */
0x0, 0x0,
0x0, 0x0,
0x0, 0x0,
0x81, 0x80,
0x1, 0x80,
0x1, 0x80,
0x1, 0x80,
0x1f, 0xf8,
0x1f, 0xf8,
0x1, 0x80,
0x1, 0x80,
0x1, 0x80,
0x1, 0x80,
0x0, 0x0,
0x0, 0x0,
0x0, 0x0,
/* mask */
0x0, 0x0,
0x0, 0x0,
0x3, 0xc0,
0x3, 0xc0,
0x3, 0xc0,
0x3, 0xc0,
0x3f, 0xfc,
0x3f, 0xfc,
0x3f, 0xfc,
0x3f, 0xfc,
0x3, 0xc0,
0x3, 0xc0,
0x3, 0xc0,
0x3, 0xc0,
0x0, 0x0,
0x0, 0x0,
};
const unsigned char XC_question_arrow[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
7, 8, /* y,x of hotspot */
/* data */
0x83, 0xe0,
0x7, 0xf0,
0xe, 0x38,
0xc, 0x18,
0xc, 0x38,
0xe, 0x30,
0x7, 0x0,
0x3, 0xc0,
0x1, 0xc0,
0x1, 0x40,
0x1, 0x40,
0x7, 0x70,
0x3, 0x60,
0x1, 0xc0,
0x0, 0x80,
0x0, 0x0,
/* mask */
0x3, 0xe0,
0x7, 0xf0,
0xf, 0xf8,
0x1f, 0xfc,
0x1e, 0x3c,
0x1e, 0x7c,
0x1f, 0x78,
0xf, 0xf0,
0x7, 0xe0,
0x3, 0xe0,
0x3, 0xe0,
0x7, 0xf0,
0xf, 0xf8,
0x7, 0xf0,
0x3, 0xe0,
0x1, 0xc0,
};
const unsigned char XC_right_ptr[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
1, 5, /* y,x of hotspot */
/* data */
0x0, 0x0,
0x8, 0x0,
0xc, 0x0,
0xe, 0x0,
0xf, 0x0,
0xf, 0x80,
0xf, 0xc0,
0xf, 0xe0,
0xf, 0xf0,
0xf, 0x80,
0xd, 0x80,
0x8, 0xc0,
0x0, 0xc0,
0x0, 0x60,
0x0, 0x60,
0x0, 0x0,
/* mask */
0x18, 0x0,
0x1c, 0x0,
0x1e, 0x0,
0x1f, 0x0,
0x1f, 0x80,
0x1f, 0xc0,
0x1f, 0xe0,
0x1f, 0xf0,
0x1f, 0xf8,
0x1f, 0xf8,
0x1f, 0xc0,
0x1d, 0xe0,
0x19, 0xe0,
0x0, 0xf0,
0x0, 0xf0,
0x0, 0x60,
};
const unsigned char XC_right_side[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
7, 2, /* y,x of hotspot */
/* data */
0x0, 0x0,
0x60, 0x0,
0x60, 0x0,
0x60, 0x80,
0x61, 0x0,
0x62, 0x0,
0x64, 0x0,
0x6f, 0xfe,
0x64, 0x0,
0x62, 0x0,
0x61, 0x0,
0x60, 0x80,
0x60, 0x0,
0x60, 0x0,
0x0, 0x0,
0x0, 0x0,
/* mask */
0xf0, 0x0,
0xf0, 0x0,
0xf0, 0xc0,
0xf1, 0xc0,
0xf3, 0x80,
0xf7, 0x0,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0xf7, 0x0,
0xf3, 0x80,
0xf1, 0xc0,
0xf0, 0xc0,
0xf0, 0x0,
0xf0, 0x0,
0x0, 0x0,
};
const unsigned char XC_right_tee[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
8, 4, /* y,x of hotspot */
/* data */
0x0, 0x0,
0x98, 0x0,
0x18, 0x0,
0x18, 0x0,
0x18, 0x0,
0x18, 0x0,
0x18, 0x0,
0x1f, 0xf8,
0x1f, 0xf8,
0x18, 0x0,
0x18, 0x0,
0x18, 0x0,
0x18, 0x0,
0x18, 0x0,
0x18, 0x0,
0x0, 0x0,
/* mask */
0x3c, 0x0,
0x3c, 0x0,
0x3c, 0x0,
0x3c, 0x0,
0x3c, 0x0,
0x3c, 0x0,
0x3f, 0xfc,
0x3f, 0xfc,
0x3f, 0xfc,
0x3f, 0xfc,
0x3c, 0x0,
0x3c, 0x0,
0x3c, 0x0,
0x3c, 0x0,
0x3c, 0x0,
0x3c, 0x0,
};
const unsigned char XC_rightbutton[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
8, 8, /* y,x of hotspot */
/* data */
0xc0, 0x1,
0xbf, 0xfe,
0xbf, 0xfe,
0xa2, 0x22,
0xa2, 0xaa,
0xa2, 0xaa,
0xa2, 0xaa,
0xa2, 0xaa,
0xa2, 0x22,
0xbf, 0xfe,
0xbf, 0xfe,
0xbf, 0xfe,
0xbf, 0xfe,
0xbf, 0xfe,
0xbf, 0xfe,
0xc0, 0x1,
/* mask */
0xbf, 0xfe,
0x7f, 0xff,
0x7f, 0xff,
0x7f, 0xff,
0x7f, 0xff,
0x7f, 0xff,
0x7f, 0xff,
0x7f, 0xff,
0x7f, 0xff,
0x7f, 0xff,
0x7f, 0xff,
0x7f, 0xff,
0x7f, 0xff,
0x7f, 0xff,
0x7f, 0xff,
0x3f, 0xfe,
};
const unsigned char XC_rtl_logo[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
7, 9, /* y,x of hotspot */
/* data */
0x0, 0x0,
0x7f, 0xfe,
0x44, 0x2,
0x44, 0x2,
0x44, 0x2,
0x47, 0xfe,
0x44, 0x22,
0x44, 0x22,
0x44, 0x22,
0x44, 0x22,
0x7f, 0xe2,
0x40, 0x22,
0x40, 0x22,
0x40, 0x22,
0x7f, 0xfe,
0x0, 0x0,
/* mask */
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0xee, 0x7,
0xef, 0xff,
0xef, 0xff,
0xef, 0xff,
0xee, 0x77,
0xee, 0x77,
0xff, 0xf7,
0xff, 0xf7,
0xff, 0xf7,
0xe0, 0x77,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
};
const unsigned char XC_sailboat[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
0, 8, /* y,x of hotspot */
/* data */
0x0, 0x0,
0x42, 0x0,
0x2, 0x0,
0x6, 0x80,
0x6, 0x80,
0x6, 0xc0,
0xe, 0xc0,
0xe, 0xe0,
0xe, 0xe0,
0x1e, 0xf0,
0x1e, 0xf0,
0x1e, 0xf8,
0x3e, 0xf8,
0x1c, 0x7c,
0x0, 0x0,
0x0, 0x0,
/* mask */
0x3, 0x0,
0x7, 0x0,
0x7, 0x80,
0xf, 0xc0,
0xf, 0xc0,
0xf, 0xe0,
0x1f, 0xe0,
0x1f, 0xf0,
0x1f, 0xf0,
0x3f, 0xf8,
0x3f, 0xf8,
0x3f, 0xfc,
0xff, 0xfc,
0xff, 0xfe,
0x1f, 0xff,
0x7, 0xfe,
};
const unsigned char XC_sb_down_arrow[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
15, 8, /* y,x of hotspot */
/* data */
0x1, 0x40,
0x1, 0x40,
0x1, 0x40,
0x1, 0x40,
0x1, 0x40,
0x1, 0x40,
0x1, 0x40,
0x1, 0x40,
0x1, 0x40,
0x1, 0x40,
0x1, 0x40,
0x7, 0xf0,
0x3, 0xe0,
0x1, 0xc0,
0x0, 0x80,
0x0, 0x0,
/* mask */
0x3, 0xe0,
0x3, 0xe0,
0x3, 0xe0,
0x3, 0xe0,
0x3, 0xe0,
0x3, 0xe0,
0x3, 0xe0,
0x3, 0xe0,
0x3, 0xe0,
0x3, 0xe0,
0xf, 0xf8,
0xf, 0xf8,
0x7, 0xf0,
0x3, 0xe0,
0x1, 0xc0,
0x0, 0x80,
};
const unsigned char XC_sb_h_double_arrow[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
7, 8, /* y,x of hotspot */
/* data */
0x0, 0x0,
0x0, 0x0,
0x0, 0x0,
0x0, 0x0,
0x8, 0x8,
0x18, 0xc,
0x3f, 0xfe,
0x78, 0xf,
0x3f, 0xfe,
0x18, 0xc,
0x8, 0x8,
0x0, 0x0,
0x0, 0x0,
0x0, 0x0,
0x0, 0x0,
0x0, 0x0,
/* mask */
0x0, 0x0,
0x0, 0x0,
0x0, 0x0,
0x8c, 0x18,
0x1c, 0x1c,
0x3f, 0xfe,
0x7f, 0xff,
0x7f, 0xff,
0x7f, 0xff,
0x3f, 0xfe,
0x1c, 0x1c,
0xc, 0x18,
0x0, 0x0,
0x0, 0x0,
0x0, 0x0,
0x0, 0x0,
};
const unsigned char XC_sb_left_arrow[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
7, 16, /* y,x of hotspot */
/* data */
0x0, 0x0,
0x0, 0x0,
0x0, 0x0,
0x0, 0x0,
0x0, 0x8,
0x0, 0xc,
0x7f, 0xfe,
0x0, 0xf,
0x7f, 0xfe,
0x0, 0xc,
0x0, 0x8,
0x0, 0x0,
0x0, 0x0,
0x0, 0x0,
0x0, 0x0,
0x0, 0x0,
/* mask */
0x0, 0x0,
0x0, 0x0,
0x0, 0x0,
0x0, 0x30,
0x0, 0x38,
0xff, 0xfc,
0xff, 0xfe,
0xff, 0xff,
0xff, 0xfe,
0xff, 0xfc,
0x0, 0x38,
0x0, 0x30,
0x0, 0x0,
0x0, 0x0,
0x0, 0x0,
0x0, 0x0,
};
const unsigned char XC_sb_right_arrow[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
7, 0, /* y,x of hotspot */
/* data */
0x0, 0x0,
0x0, 0x0,
0x0, 0x0,
0x0, 0x0,
0x8, 0x0,
0x18, 0x0,
0x3f, 0xff,
0x78, 0x0,
0x3f, 0xff,
0x18, 0x0,
0x8, 0x0,
0x0, 0x0,
0x0, 0x0,
0x0, 0x0,
0x0, 0x0,
0x0, 0x0,
/* mask */
0x0, 0x0,
0x0, 0x0,
0x0, 0x0,
0xc, 0x0,
0x1c, 0x0,
0x3f, 0xff,
0x7f, 0xff,
0xff, 0xff,
0x7f, 0xff,
0x3f, 0xff,
0x1c, 0x0,
0xc, 0x0,
0x0, 0x0,
0x0, 0x0,
0x0, 0x0,
0x0, 0x0,
};
const unsigned char XC_sb_up_arrow[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
0, 8, /* y,x of hotspot */
/* data */
0x0, 0x80,
0x9, 0xc0,
0x3, 0xe0,
0x7, 0xf0,
0x1, 0x40,
0x1, 0x40,
0x1, 0x40,
0x1, 0x40,
0x1, 0x40,
0x1, 0x40,
0x1, 0x40,
0x1, 0x40,
0x1, 0x40,
0x1, 0x40,
0x1, 0x40,
0x0, 0x0,
/* mask */
0x0, 0x80,
0x1, 0xc0,
0x3, 0xe0,
0x7, 0xf0,
0xf, 0xf8,
0xf, 0xf8,
0x3, 0xe0,
0x3, 0xe0,
0x3, 0xe0,
0x3, 0xe0,
0x3, 0xe0,
0x3, 0xe0,
0x3, 0xe0,
0x3, 0xe0,
0x3, 0xe0,
0x3, 0xe0,
};
const unsigned char XC_sb_v_double_arrow[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
7, 8, /* y,x of hotspot */
/* data */
0x0, 0x80,
0x9, 0xc0,
0x3, 0xe0,
0x7, 0xf0,
0x1, 0x40,
0x1, 0x40,
0x1, 0x40,
0x1, 0x40,
0x1, 0x40,
0x1, 0x40,
0x1, 0x40,
0x7, 0xf0,
0x3, 0xe0,
0x1, 0xc0,
0x0, 0x80,
0x0, 0x0,
/* mask */
0x1, 0xc0,
0x3, 0xe0,
0x7, 0xf0,
0xf, 0xf8,
0xf, 0xf8,
0x3, 0xe0,
0x3, 0xe0,
0x3, 0xe0,
0x3, 0xe0,
0x3, 0xe0,
0xf, 0xf8,
0xf, 0xf8,
0x7, 0xf0,
0x3, 0xe0,
0x1, 0xc0,
0x0, 0x0,
};
const unsigned char XC_shuttle[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
0, 5, /* y,x of hotspot */
/* data */
0x84, 0x0,
0xe, 0x0,
0x1f, 0x0,
0x7b, 0x80,
0x7b, 0xa0,
0x7b, 0x90,
0x7b, 0x88,
0x7b, 0x88,
0x7b, 0x88,
0x7b, 0x88,
0x7b, 0x8c,
0x7b, 0x8e,
0x7b, 0xbf,
0x11, 0x18,
0x1e, 0x0,
0xc, 0x0,
/* mask */
0x1c, 0x0,
0x3e, 0x0,
0x7f, 0x0,
0xff, 0x0,
0xff, 0x60,
0xff, 0x70,
0xff, 0x78,
0xff, 0x78,
0xff, 0x78,
0xff, 0x78,
0xff, 0x7c,
0xff, 0x7e,
0xff, 0x7f,
0x7f, 0x7e,
0x7e, 0x30,
0x3c, 0x0,
};
const unsigned char XC_sizing[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
8, 8, /* y,x of hotspot */
/* data */
0x0, 0x0,
0x81, 0xfe,
0x0, 0x2,
0x0, 0x2,
0x0, 0x2,
0x7, 0xe2,
0x4, 0x22,
0x44, 0x22,
0x44, 0x22,
0x44, 0x20,
0x47, 0xe0,
0x48, 0x0,
0x50, 0x0,
0x60, 0x0,
0x7f, 0x80,
0x0, 0x0,
/* mask */
0x3, 0xff,
0x3, 0xff,
0x3, 0xff,
0x0, 0x7,
0xf, 0xf7,
0xf, 0xf7,
0xef, 0xf7,
0xee, 0x77,
0xee, 0x77,
0xef, 0xf7,
0xef, 0xf0,
0xff, 0xf0,
0xf8, 0x0,
0xff, 0xc0,
0xff, 0xc0,
0xff, 0xc0,
};
const unsigned char XC_spider[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
7, 10, /* y,x of hotspot */
/* data */
0x8, 0x4,
0x4, 0x8,
0x4, 0x8,
0x2, 0x10,
0x2, 0x10,
0xe1, 0xe1,
0x19, 0xe6,
0x7, 0xf8,
0x7, 0xf8,
0x19, 0xe6,
0xe1, 0xe1,
0x2, 0x10,
0x2, 0x10,
0x4, 0x8,
0x4, 0x8,
0x8, 0x4,
/* mask */
0x18, 0x6,
0xc, 0xc,
0x4, 0x8,
0x6, 0x18,
0x83, 0xf1,
0xf3, 0xf3,
0x3b, 0xf6,
0xf, 0xfc,
0x7, 0xfc,
0x1f, 0xf6,
0xf3, 0xf3,
0x83, 0xf1,
0x2, 0x18,
0x6, 0x18,
0xc, 0xc,
0x18, 0x6,
};
const unsigned char XC_spraycan[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
2, 4, /* y,x of hotspot */
/* data */
0x98, 0x0,
0x2, 0x0,
0x18, 0xb0,
0x2, 0x78,
0x18, 0x58,
0x0, 0xfc,
0x0, 0x84,
0x0, 0x9c,
0x0, 0x94,
0x0, 0x9c,
0x0, 0x94,
0x0, 0x9c,
0x0, 0x9c,
0x0, 0x84,
0x0, 0x84,
0x0, 0xfc,
/* mask */
0x30, 0x0,
0x34, 0x60,
0x35, 0xf0,
0x35, 0xf0,
0x35, 0xf8,
0x3, 0xfc,
0x3, 0xfc,
0x3, 0xfc,
0x3, 0xfc,
0x3, 0xfc,
0x3, 0xfc,
0x3, 0xfc,
0x3, 0xfc,
0x3, 0xfc,
0x3, 0xfc,
0x3, 0xfc,
};
const unsigned char XC_star[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
7, 8, /* y,x of hotspot */
/* data */
0x80, 0x80,
0x1, 0x40,
0x1, 0x40,
0x1, 0x40,
0x2, 0x20,
0x2, 0x20,
0x2, 0x20,
0x1c, 0x9c,
0x60, 0x3,
0x1c, 0x1c,
0x4, 0x90,
0x9, 0x48,
0x12, 0x24,
0x14, 0x14,
0x18, 0xc,
0x10, 0x4,
/* mask */
0x0, 0x80,
0x1, 0xc0,
0x1, 0xc0,
0x3, 0x60,
0x3, 0x60,
0x6, 0x30,
0x1e, 0x38,
0x7c, 0x9f,
0xe0, 0x3,
0x7c, 0x1f,
0x1c, 0x9c,
0x19, 0xcc,
0x33, 0x66,
0x36, 0x36,
0x3c, 0x1e,
0x38, 0xe,
};
const unsigned char XC_target[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
7, 8, /* y,x of hotspot */
/* data */
0x0, 0x0,
0x81, 0xc0,
0x7, 0xf0,
0xe, 0x38,
0x18, 0xc,
0x30, 0x6,
0x60, 0x83,
0x61, 0x43,
0x60, 0x83,
0x30, 0x6,
0x18, 0xc,
0xe, 0x38,
0x7, 0xf0,
0x1, 0xc0,
0x0, 0x0,
0x0, 0x0,
/* mask */
0x0, 0x0,
0x3, 0xe0,
0x7, 0xf0,
0xf, 0xf8,
0x1e, 0x3c,
0x38, 0xe,
0x70, 0x87,
0xe1, 0xc3,
0xe3, 0x63,
0xe1, 0xc3,
0x70, 0x87,
0x38, 0xe,
0x1e, 0x3c,
0xf, 0xf8,
0x3, 0xe0,
0x0, 0x0,
};
const unsigned char XC_tcross[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
7, 8, /* y,x of hotspot */
/* data */
0x0, 0x0,
0xc0, 0x80,
0x0, 0x80,
0x0, 0x80,
0x0, 0x80,
0x0, 0x80,
0x0, 0x80,
0x3f, 0xfe,
0x0, 0x80,
0x0, 0x80,
0x0, 0x80,
0x0, 0x80,
0x0, 0x80,
0x0, 0x80,
0x0, 0x0,
0x0, 0x0,
/* mask */
0x1, 0xc0,
0x1, 0xc0,
0x1, 0xc0,
0x1, 0xc0,
0x1, 0xc0,
0x1, 0xc0,
0x7f, 0xff,
0x7f, 0xff,
0x7f, 0xff,
0x1, 0xc0,
0x1, 0xc0,
0x1, 0xc0,
0x1, 0xc0,
0x1, 0xc0,
0x1, 0xc0,
0x0, 0x0,
};
const unsigned char XC_top_left_arrow[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
1, 15, /* y,x of hotspot */
/* data */
0x0, 0x0,
0x80, 0x6,
0x0, 0x1e,
0x0, 0x7c,
0x1, 0xfc,
0x7, 0xf8,
0x1f, 0xf8,
0x1, 0xf0,
0x1, 0xf0,
0x2, 0x60,
0x4, 0x60,
0x8, 0x40,
0x10, 0x40,
0x20, 0x0,
0x40, 0x0,
0x0, 0x0,
/* mask */
0x0, 0x7,
0x0, 0x1f,
0x0, 0x7f,
0x1, 0xfe,
0x7, 0xfe,
0x3f, 0xfc,
0x3f, 0xfc,
0x3f, 0xf8,
0x3, 0xf8,
0x7, 0xf0,
0xe, 0xf0,
0x1c, 0xe0,
0x38, 0xe0,
0x70, 0xe0,
0xe0, 0x0,
0xc0, 0x0,
};
const unsigned char XC_top_left_corner[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
1, 15, /* y,x of hotspot */
/* data */
0x0, 0x0,
0xff, 0xfe,
0x7f, 0xfe,
0x0, 0x6,
0x0, 0x6,
0x0, 0x6,
0x1f, 0xc6,
0x0, 0xc6,
0x1, 0x46,
0x2, 0x46,
0x4, 0x46,
0x8, 0x46,
0x10, 0x46,
0x0, 0x6,
0x0, 0x6,
0x0, 0x0,
/* mask */
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0x0, 0xf,
0x3f, 0xef,
0x3f, 0xef,
0x3f, 0xef,
0x3, 0xef,
0x7, 0xef,
0xe, 0xef,
0x1c, 0xef,
0x38, 0xef,
0x30, 0xef,
0x0, 0xf,
0x0, 0xf,
};
const unsigned char XC_top_right_corner[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
1, 2, /* y,x of hotspot */
/* data */
0x0, 0x0,
0xff, 0xfe,
0x7f, 0xfe,
0x60, 0x0,
0x60, 0x0,
0x60, 0x0,
0x63, 0xf8,
0x63, 0x0,
0x62, 0x80,
0x62, 0x40,
0x62, 0x20,
0x62, 0x10,
0x62, 0x8,
0x60, 0x0,
0x60, 0x0,
0x0, 0x0,
/* mask */
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0xf0, 0x0,
0xf7, 0xfc,
0xf7, 0xfc,
0xf7, 0xfc,
0xf7, 0xc0,
0xf7, 0xe0,
0xf7, 0x70,
0xf7, 0x38,
0xf7, 0x1c,
0xf7, 0xc,
0xf0, 0x0,
0xf0, 0x0,
};
const unsigned char XC_top_side[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
1, 8, /* y,x of hotspot */
/* data */
0x0, 0x0,
0xff, 0xfe,
0x3f, 0xfe,
0x0, 0x0,
0x0, 0x80,
0x1, 0xc0,
0x2, 0xa0,
0x4, 0x90,
0x8, 0x88,
0x0, 0x80,
0x0, 0x80,
0x0, 0x80,
0x0, 0x80,
0x0, 0x80,
0x0, 0x80,
0x0, 0x0,
/* mask */
0x7f, 0xff,
0x7f, 0xff,
0x7f, 0xff,
0x7f, 0xff,
0x1, 0xc0,
0x3, 0xe0,
0x7, 0xf0,
0xf, 0xf8,
0x1d, 0xdc,
0x19, 0xcc,
0x1, 0xc0,
0x1, 0xc0,
0x1, 0xc0,
0x1, 0xc0,
0x1, 0xc0,
0x1, 0xc0,
};
const unsigned char XC_top_tee[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
3, 8, /* y,x of hotspot */
/* data */
0x0, 0x0,
0x0, 0x0,
0x0, 0x0,
0xff, 0xfe,
0x7f, 0xfe,
0x1, 0x80,
0x1, 0x80,
0x1, 0x80,
0x1, 0x80,
0x1, 0x80,
0x1, 0x80,
0x1, 0x80,
0x1, 0x80,
0x0, 0x0,
0x0, 0x0,
0x0, 0x0,
/* mask */
0x0, 0x0,
0x0, 0x0,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0x3, 0xc0,
0x3, 0xc0,
0x3, 0xc0,
0x3, 0xc0,
0x3, 0xc0,
0x3, 0xc0,
0x3, 0xc0,
0x3, 0xc0,
0x0, 0x0,
0x0, 0x0,
};
const unsigned char XC_trek[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
0, 8, /* y,x of hotspot */
/* data */
0x8, 0x80,
0x8, 0x0,
0x1, 0xc0,
0x3, 0xe0,
0x7, 0xf0,
0x7, 0x70,
0x7, 0xf0,
0x3, 0xe0,
0x1, 0xc0,
0x0, 0x80,
0x5, 0xd0,
0x6, 0xb0,
0x4, 0x90,
0x4, 0x10,
0x4, 0x10,
0x4, 0x10,
/* mask */
0x1, 0xc0,
0x1, 0xc0,
0x3, 0xe0,
0x7, 0xf0,
0xf, 0xf8,
0xf, 0xf8,
0xf, 0xf8,
0x7, 0xf0,
0x3, 0xe0,
0x5, 0xd0,
0xf, 0xf8,
0xf, 0xf8,
0xf, 0xf8,
0xe, 0xb8,
0xe, 0xb8,
0xe, 0x38,
};
const unsigned char XC_ul_angle[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
3, 13, /* y,x of hotspot */
/* data */
0x0, 0x0,
0x0, 0x0,
0x0, 0x0,
0x1f, 0xf8,
0x1f, 0xf8,
0x0, 0x18,
0x0, 0x18,
0x0, 0x18,
0x0, 0x18,
0x0, 0x18,
0x0, 0x18,
0x0, 0x18,
0x0, 0x18,
0x0, 0x0,
0x0, 0x0,
0x0, 0x0,
/* mask */
0x0, 0x0,
0x0, 0x0,
0x3f, 0xfc,
0x3f, 0xfc,
0x3f, 0xfc,
0x3f, 0xfc,
0x0, 0x3c,
0x0, 0x3c,
0x0, 0x3c,
0x0, 0x3c,
0x0, 0x3c,
0x0, 0x3c,
0x0, 0x3c,
0x0, 0x3c,
0x0, 0x0,
0x0, 0x0,
};
const unsigned char XC_umbrella[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
3, 8, /* y,x of hotspot */
/* data */
0x0, 0x0,
0x89, 0x10,
0x14, 0x40,
0x65, 0x92,
0x13, 0xe4,
0xc, 0x98,
0x30, 0x86,
0x0, 0x80,
0x0, 0x80,
0x0, 0x80,
0x0, 0x80,
0x0, 0x80,
0x2, 0x80,
0x2, 0x80,
0x1, 0x0,
0x0, 0x0,
/* mask */
0x76, 0xe8,
0xdf, 0xfb,
0x3f, 0xfd,
0xff, 0xfe,
0x3f, 0xff,
0xff, 0xff,
0x79, 0xcf,
0x1, 0xc0,
0x1, 0xc0,
0x1, 0xc0,
0x1, 0xc0,
0x7, 0xc0,
0x7, 0xc0,
0x7, 0xc0,
0x7, 0xc0,
0x3, 0x80,
};
const unsigned char XC_ur_angle[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
3, 4, /* y,x of hotspot */
/* data */
0x0, 0x0,
0x0, 0x0,
0x0, 0x0,
0x1f, 0xf8,
0x1f, 0xf8,
0x18, 0x0,
0x18, 0x0,
0x18, 0x0,
0x18, 0x0,
0x18, 0x0,
0x18, 0x0,
0x18, 0x0,
0x18, 0x0,
0x0, 0x0,
0x0, 0x0,
0x0, 0x0,
/* mask */
0x0, 0x0,
0x0, 0x0,
0x3f, 0xfc,
0x3f, 0xfc,
0x3f, 0xfc,
0x3f, 0xfc,
0x3c, 0x0,
0x3c, 0x0,
0x3c, 0x0,
0x3c, 0x0,
0x3c, 0x0,
0x3c, 0x0,
0x3c, 0x0,
0x3c, 0x0,
0x0, 0x0,
0x0, 0x0,
};
const unsigned char XC_watch[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
9, 1, /* y,x of hotspot */
/* data */
0x7, 0xf8,
0x7, 0xf8,
0x7, 0xf8,
0xf, 0xfc,
0x18, 0x86,
0x30, 0x83,
0xe0, 0x81,
0xe1, 0xc1,
0xe1, 0xc1,
0xe0, 0x21,
0x30, 0x13,
0x18, 0x6,
0xf, 0xfc,
0x7, 0xf8,
0x7, 0xf8,
0x7, 0xf8,
/* mask */
0xf, 0xfc,
0xf, 0xfc,
0xf, 0xfc,
0x1f, 0xfe,
0x3f, 0xff,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0xff, 0xff,
0x3f, 0xff,
0x1f, 0xfe,
0xf, 0xfc,
0xf, 0xfc,
0xf, 0xfc,
};
const unsigned char XC_xterm[] = {
16, /* 16x16 size */
1, /* 1 bit depth */
8, 8, /* y,x of hotspot */
/* data */
0x0, 0x0,
0xf, 0x70,
0x9, 0xc0,
0x0, 0x80,
0x0, 0x80,
0x0, 0x80,
0x0, 0x80,
0x0, 0x80,
0x0, 0x80,
0x0, 0x80,
0x0, 0x80,
0x0, 0x80,
0x0, 0x80,
0x1, 0xc0,
0x7, 0x70,
0x0, 0x0,
/* mask */
0xf, 0x78,
0xf, 0xf8,
0xf, 0xf8,
0x3, 0xe0,
0x1, 0xc0,
0x1, 0xc0,
0x1, 0xc0,
0x1, 0xc0,
0x1, 0xc0,
0x1, 0xc0,
0x1, 0xc0,
0x1, 0xc0,
0x3, 0xe0,
0xf, 0xf8,
0xf, 0xf8,
0xf, 0x78,
};
/* Copyright (c) Mark J. Kilgard, 1994, 1997. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#include <stdlib.h>
#include <string.h>
#include "glutint.h"
/* CENTRY */
int GLUTAPIENTRY
glutExtensionSupported(const char *extension)
{
static const GLubyte *extensions = NULL;
const GLubyte *start;
GLubyte *where, *terminator;
/* Extension names should not have spaces. */
where = (GLubyte *) strchr(extension, ' ');
if (where || *extension == '\0')
return 0;
if (!extensions) {
extensions = glGetString(GL_EXTENSIONS);
}
/* It takes a bit of care to be fool-proof about parsing the
OpenGL extensions string. Don't be fooled by sub-strings,
etc. */
start = extensions;
for (;;) {
/* If your application crashes in the strstr routine below,
you are probably calling glutExtensionSupported without
having a current window. Calling glGetString without
a current OpenGL context has unpredictable results.
Please fix your program. */
where = (GLubyte *) strstr((const char *) start, extension);
if (!where)
break;
terminator = where + strlen(extension);
if (where == start || *(where - 1) == ' ') {
if (*terminator == ' ' || *terminator == '\0') {
return 1;
}
}
start = terminator;
}
return 0;
}
struct name_address_pair {
const char *name;
const GLUTproc address;
};
static struct name_address_pair glut_functions[] = {
{ "glutInit", (const GLUTproc) glutInit },
{ "glutInitDisplayMode", (const GLUTproc) glutInitDisplayMode },
{ "glutInitDisplayString", (const GLUTproc) glutInitDisplayString },
{ "glutInitWindowPosition", (const GLUTproc) glutInitWindowPosition },
{ "glutInitWindowSize", (const GLUTproc) glutInitWindowSize },
{ "glutMainLoop", (const GLUTproc) glutMainLoop },
{ "glutCreateWindow", (const GLUTproc) glutCreateWindow },
{ "glutCreateSubWindow", (const GLUTproc) glutCreateSubWindow },
{ "glutDestroyWindow", (const GLUTproc) glutDestroyWindow },
{ "glutPostRedisplay", (const GLUTproc) glutPostRedisplay },
{ "glutPostWindowRedisplay", (const GLUTproc) glutPostWindowRedisplay },
{ "glutSwapBuffers", (const GLUTproc) glutSwapBuffers },
{ "glutGetWindow", (const GLUTproc) glutGetWindow },
{ "glutSetWindow", (const GLUTproc) glutSetWindow },
{ "glutSetWindowTitle", (const GLUTproc) glutSetWindowTitle },
{ "glutSetIconTitle", (const GLUTproc) glutSetIconTitle },
{ "glutPositionWindow", (const GLUTproc) glutPositionWindow },
{ "glutReshapeWindow", (const GLUTproc) glutReshapeWindow },
{ "glutPopWindow", (const GLUTproc) glutPopWindow },
{ "glutPushWindow", (const GLUTproc) glutPushWindow },
{ "glutIconifyWindow", (const GLUTproc) glutIconifyWindow },
{ "glutShowWindow", (const GLUTproc) glutShowWindow },
{ "glutHideWindow", (const GLUTproc) glutHideWindow },
{ "glutFullScreen", (const GLUTproc) glutFullScreen },
{ "glutSetCursor", (const GLUTproc) glutSetCursor },
{ "glutWarpPointer", (const GLUTproc) glutWarpPointer },
{ "glutEstablishOverlay", (const GLUTproc) glutEstablishOverlay },
{ "glutRemoveOverlay", (const GLUTproc) glutRemoveOverlay },
{ "glutUseLayer", (const GLUTproc) glutUseLayer },
{ "glutPostOverlayRedisplay", (const GLUTproc) glutPostOverlayRedisplay },
{ "glutPostWindowOverlayRedisplay", (const GLUTproc) glutPostWindowOverlayRedisplay },
{ "glutShowOverlay", (const GLUTproc) glutShowOverlay },
{ "glutHideOverlay", (const GLUTproc) glutHideOverlay },
{ "glutCreateMenu", (const GLUTproc) glutCreateMenu },
{ "glutDestroyMenu", (const GLUTproc) glutDestroyMenu },
{ "glutGetMenu", (const GLUTproc) glutGetMenu },
{ "glutSetMenu", (const GLUTproc) glutSetMenu },
{ "glutAddMenuEntry", (const GLUTproc) glutAddMenuEntry },
{ "glutAddSubMenu", (const GLUTproc) glutAddSubMenu },
{ "glutChangeToMenuEntry", (const GLUTproc) glutChangeToMenuEntry },
{ "glutChangeToSubMenu", (const GLUTproc) glutChangeToSubMenu },
{ "glutRemoveMenuItem", (const GLUTproc) glutRemoveMenuItem },
{ "glutAttachMenu", (const GLUTproc) glutAttachMenu },
{ "glutDetachMenu", (const GLUTproc) glutDetachMenu },
{ "glutDisplayFunc", (const GLUTproc) glutDisplayFunc },
{ "glutReshapeFunc", (const GLUTproc) glutReshapeFunc },
{ "glutKeyboardFunc", (const GLUTproc) glutKeyboardFunc },
{ "glutMouseFunc", (const GLUTproc) glutMouseFunc },
{ "glutMotionFunc", (const GLUTproc) glutMotionFunc },
{ "glutPassiveMotionFunc", (const GLUTproc) glutPassiveMotionFunc },
{ "glutEntryFunc", (const GLUTproc) glutEntryFunc },
{ "glutVisibilityFunc", (const GLUTproc) glutVisibilityFunc },
{ "glutIdleFunc", (const GLUTproc) glutIdleFunc },
{ "glutTimerFunc", (const GLUTproc) glutTimerFunc },
{ "glutMenuStateFunc", (const GLUTproc) glutMenuStateFunc },
{ "glutSpecialFunc", (const GLUTproc) glutSpecialFunc },
{ "glutSpaceballMotionFunc", (const GLUTproc) glutSpaceballMotionFunc },
{ "glutSpaceballRotateFunc", (const GLUTproc) glutSpaceballRotateFunc },
{ "glutSpaceballButtonFunc", (const GLUTproc) glutSpaceballButtonFunc },
{ "glutButtonBoxFunc", (const GLUTproc) glutButtonBoxFunc },
{ "glutDialsFunc", (const GLUTproc) glutDialsFunc },
{ "glutTabletMotionFunc", (const GLUTproc) glutTabletMotionFunc },
{ "glutTabletButtonFunc", (const GLUTproc) glutTabletButtonFunc },
{ "glutMenuStatusFunc", (const GLUTproc) glutMenuStatusFunc },
{ "glutOverlayDisplayFunc", (const GLUTproc) glutOverlayDisplayFunc },
{ "glutWindowStatusFunc", (const GLUTproc) glutWindowStatusFunc },
// { "glutKeyboardUpFunc", (const GLUTproc) glutKeyboardUpFunc },
// { "glutSpecialUpFunc", (const GLUTproc) glutSpecialUpFunc },
// { "glutJoystickFunc", (const GLUTproc) glutJoystickFunc },
{ "glutSetColor", (const GLUTproc) glutSetColor },
{ "glutGetColor", (const GLUTproc) glutGetColor },
{ "glutCopyColormap", (const GLUTproc) glutCopyColormap },
{ "glutGet", (const GLUTproc) glutGet },
{ "glutDeviceGet", (const GLUTproc) glutDeviceGet },
{ "glutExtensionSupported", (const GLUTproc) glutExtensionSupported },
{ "glutGetModifiers", (const GLUTproc) glutGetModifiers },
{ "glutLayerGet", (const GLUTproc) glutLayerGet },
{ "glutGetProcAddress", (const GLUTproc) glutGetProcAddress },
{ "glutBitmapCharacter", (const GLUTproc) glutBitmapCharacter },
{ "glutBitmapWidth", (const GLUTproc) glutBitmapWidth },
{ "glutStrokeCharacter", (const GLUTproc) glutStrokeCharacter },
{ "glutStrokeWidth", (const GLUTproc) glutStrokeWidth },
{ "glutBitmapLength", (const GLUTproc) glutBitmapLength },
{ "glutStrokeLength", (const GLUTproc) glutStrokeLength },
{ "glutWireSphere", (const GLUTproc) glutWireSphere },
{ "glutSolidSphere", (const GLUTproc) glutSolidSphere },
{ "glutWireCone", (const GLUTproc) glutWireCone },
{ "glutSolidCone", (const GLUTproc) glutSolidCone },
{ "glutWireCube", (const GLUTproc) glutWireCube },
{ "glutSolidCube", (const GLUTproc) glutSolidCube },
{ "glutWireTorus", (const GLUTproc) glutWireTorus },
{ "glutSolidTorus", (const GLUTproc) glutSolidTorus },
{ "glutWireDodecahedron", (const GLUTproc) glutWireDodecahedron },
{ "glutSolidDodecahedron", (const GLUTproc) glutSolidDodecahedron },
{ "glutWireTeapot", (const GLUTproc) glutWireTeapot },
{ "glutSolidTeapot", (const GLUTproc) glutSolidTeapot },
{ "glutWireOctahedron", (const GLUTproc) glutWireOctahedron },
{ "glutSolidOctahedron", (const GLUTproc) glutSolidOctahedron },
{ "glutWireTetrahedron", (const GLUTproc) glutWireTetrahedron },
{ "glutSolidTetrahedron", (const GLUTproc) glutSolidTetrahedron },
{ "glutWireIcosahedron", (const GLUTproc) glutWireIcosahedron },
{ "glutSolidIcosahedron", (const GLUTproc) glutSolidIcosahedron },
{ "glutVideoResizeGet", (const GLUTproc) glutVideoResizeGet },
{ "glutSetupVideoResizing", (const GLUTproc) glutSetupVideoResizing },
{ "glutStopVideoResizing", (const GLUTproc) glutStopVideoResizing },
{ "glutVideoResize", (const GLUTproc) glutVideoResize },
{ "glutVideoPan", (const GLUTproc) glutVideoPan },
{ "glutReportErrors", (const GLUTproc) glutReportErrors },
// { "glutIgnoreKeyRepeat", (const GLUTproc) glutIgnoreKeyRepeat },
// { "glutSetKeyRepeat", (const GLUTproc) glutSetKeyRepeat },
// { "glutForceJoystickFunc", (const GLUTproc) glutForceJoystickFunc },
// { "glutGameModeString", (const GLUTproc) glutGameModeString },
// { "glutEnterGameMode", (const GLUTproc) glutEnterGameMode },
// { "glutLeaveGameMode", (const GLUTproc) glutLeaveGameMode },
// { "glutGameModeGet", (const GLUTproc) glutGameModeGet },
{ NULL, NULL }
};
/* XXX This isn't an official GLUT function, yet */
GLUTproc GLUTAPIENTRY
glutGetProcAddress(const char *procName)
{
/* Try GLUT functions first */
int i;
for (i = 0; glut_functions[i].name; i++) {
if (strcmp(glut_functions[i].name, procName) == 0)
return glut_functions[i].address;
}
/* Try core GL functions */
#if defined(_WIN32)
return (GLUTProc) wglGetProcAddress((LPCSTR) procName);
#elif defined(GLX_ARB_get_proc_address)
return (GLUTProc) glXGetProcAddressARB((const GLubyte *) procName);
#else
return NULL;
#endif
}
/* ENDCENTRY */
/* GENERATED FILE -- DO NOT MODIFY */
#define glutBitmapHelvetica10 XXX
#include "glutbitmap.h"
#undef glutBitmapHelvetica10
/* char: 0xff */
static const GLubyte ch255data[] = {
0x80,0x40,0x40,0x60,0xa0,0xa0,0x90,0x90,0x0,0x50,
};
static const BitmapCharRec ch255 = {4,10,0,2,5,ch255data};
/* char: 0xfe */
static const GLubyte ch254data[] = {
0x80,0x80,0xb0,0xc8,0x88,0x88,0xc8,0xb0,0x80,0x80,
};
static const BitmapCharRec ch254 = {5,10,0,2,6,ch254data};
/* char: 0xfd */
static const GLubyte ch253data[] = {
0x80,0x40,0x40,0x60,0xa0,0xa0,0x90,0x90,0x0,0x20,0x10,
};
static const BitmapCharRec ch253 = {4,11,0,2,5,ch253data};
/* char: 0xfc */
static const GLubyte ch252data[] = {
0x70,0x90,0x90,0x90,0x90,0x90,0x0,0x50,
};
static const BitmapCharRec ch252 = {4,8,0,0,5,ch252data};
/* char: 0xfb */
static const GLubyte ch251data[] = {
0x70,0x90,0x90,0x90,0x90,0x90,0x0,0x50,0x20,
};
static const BitmapCharRec ch251 = {4,9,0,0,5,ch251data};
/* char: 0xfa */
static const GLubyte ch250data[] = {
0x70,0x90,0x90,0x90,0x90,0x90,0x0,0x40,0x20,
};
static const BitmapCharRec ch250 = {4,9,0,0,5,ch250data};
/* char: 0xf9 */
static const GLubyte ch249data[] = {
0x70,0x90,0x90,0x90,0x90,0x90,0x0,0x20,0x40,
};
static const BitmapCharRec ch249 = {4,9,0,0,5,ch249data};
/* char: 0xf8 */
static const GLubyte ch248data[] = {
0x70,0x88,0xc8,0xa8,0x98,0x74,
};
static const BitmapCharRec ch248 = {6,6,0,0,6,ch248data};
/* char: 0xf7 */
static const GLubyte ch247data[] = {
0x20,0x0,0xf8,0x0,0x20,
};
static const BitmapCharRec ch247 = {5,5,0,-1,6,ch247data};
/* char: 0xf6 */
static const GLubyte ch246data[] = {
0x70,0x88,0x88,0x88,0x88,0x70,0x0,0x50,
};
static const BitmapCharRec ch246 = {5,8,0,0,6,ch246data};
/* char: 0xf5 */
static const GLubyte ch245data[] = {
0x70,0x88,0x88,0x88,0x88,0x70,0x0,0x50,0x28,
};
static const BitmapCharRec ch245 = {5,9,0,0,6,ch245data};
/* char: 0xf4 */
static const GLubyte ch244data[] = {
0x70,0x88,0x88,0x88,0x88,0x70,0x0,0x50,0x20,
};
static const BitmapCharRec ch244 = {5,9,0,0,6,ch244data};
/* char: 0xf3 */
static const GLubyte ch243data[] = {
0x70,0x88,0x88,0x88,0x88,0x70,0x0,0x20,0x10,
};
static const BitmapCharRec ch243 = {5,9,0,0,6,ch243data};
/* char: 0xf2 */
static const GLubyte ch242data[] = {
0x70,0x88,0x88,0x88,0x88,0x70,0x0,0x20,0x40,
};
static const BitmapCharRec ch242 = {5,9,0,0,6,ch242data};
/* char: 0xf1 */
static const GLubyte ch241data[] = {
0x90,0x90,0x90,0x90,0x90,0xe0,0x0,0xa0,0x50,
};
static const BitmapCharRec ch241 = {4,9,0,0,5,ch241data};
/* char: 0xf0 */
static const GLubyte ch240data[] = {
0x70,0x88,0x88,0x88,0x88,0x78,0x90,0x60,0x50,
};
static const BitmapCharRec ch240 = {5,9,0,0,6,ch240data};
/* char: 0xef */
static const GLubyte ch239data[] = {
0x40,0x40,0x40,0x40,0x40,0x40,0x0,0xa0,
};
static const BitmapCharRec ch239 = {3,8,0,0,2,ch239data};
/* char: 0xee */
static const GLubyte ch238data[] = {
0x40,0x40,0x40,0x40,0x40,0x40,0x0,0xa0,0x40,
};
static const BitmapCharRec ch238 = {3,9,1,0,2,ch238data};
/* char: 0xed */
static const GLubyte ch237data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x80,0x40,
};
static const BitmapCharRec ch237 = {2,9,0,0,2,ch237data};
/* char: 0xec */
static const GLubyte ch236data[] = {
0x40,0x40,0x40,0x40,0x40,0x40,0x0,0x40,0x80,
};
static const BitmapCharRec ch236 = {2,9,1,0,2,ch236data};
/* char: 0xeb */
static const GLubyte ch235data[] = {
0x60,0x90,0x80,0xf0,0x90,0x60,0x0,0x50,
};
static const BitmapCharRec ch235 = {4,8,0,0,5,ch235data};
/* char: 0xea */
static const GLubyte ch234data[] = {
0x60,0x90,0x80,0xf0,0x90,0x60,0x0,0x50,0x20,
};
static const BitmapCharRec ch234 = {4,9,0,0,5,ch234data};
/* char: 0xe9 */
static const GLubyte ch233data[] = {
0x60,0x90,0x80,0xf0,0x90,0x60,0x0,0x40,0x20,
};
static const BitmapCharRec ch233 = {4,9,0,0,5,ch233data};
/* char: 0xe8 */
static const GLubyte ch232data[] = {
0x60,0x90,0x80,0xf0,0x90,0x60,0x0,0x20,0x40,
};
static const BitmapCharRec ch232 = {4,9,0,0,5,ch232data};
/* char: 0xe7 */
static const GLubyte ch231data[] = {
0x60,0x20,0x60,0x90,0x80,0x80,0x90,0x60,
};
static const BitmapCharRec ch231 = {4,8,0,2,5,ch231data};
/* char: 0xe6 */
static const GLubyte ch230data[] = {
0x6c,0x92,0x90,0x7e,0x12,0xec,
};
static const BitmapCharRec ch230 = {7,6,0,0,8,ch230data};
/* char: 0xe5 */
static const GLubyte ch229data[] = {
0x68,0x90,0x90,0x70,0x10,0xe0,0x20,0x50,0x20,
};
static const BitmapCharRec ch229 = {5,9,0,0,5,ch229data};
/* char: 0xe4 */
static const GLubyte ch228data[] = {
0x68,0x90,0x90,0x70,0x10,0xe0,0x0,0x50,
};
static const BitmapCharRec ch228 = {5,8,0,0,5,ch228data};
/* char: 0xe3 */
static const GLubyte ch227data[] = {
0x68,0x90,0x90,0x70,0x10,0xe0,0x0,0xa0,0x50,
};
static const BitmapCharRec ch227 = {5,9,0,0,5,ch227data};
/* char: 0xe2 */
static const GLubyte ch226data[] = {
0x68,0x90,0x90,0x70,0x10,0xe0,0x0,0x50,0x20,
};
static const BitmapCharRec ch226 = {5,9,0,0,5,ch226data};
/* char: 0xe1 */
static const GLubyte ch225data[] = {
0x68,0x90,0x90,0x70,0x10,0xe0,0x0,0x20,0x10,
};
static const BitmapCharRec ch225 = {5,9,0,0,5,ch225data};
/* char: 0xe0 */
static const GLubyte ch224data[] = {
0x68,0x90,0x90,0x70,0x10,0xe0,0x0,0x20,0x40,
};
static const BitmapCharRec ch224 = {5,9,0,0,5,ch224data};
/* char: 0xdf */
static const GLubyte ch223data[] = {
0xa0,0x90,0x90,0x90,0xa0,0x90,0x90,0x60,
};
static const BitmapCharRec ch223 = {4,8,0,0,5,ch223data};
/* char: 0xde */
static const GLubyte ch222data[] = {
0x80,0x80,0xf0,0x88,0x88,0xf0,0x80,0x80,
};
static const BitmapCharRec ch222 = {5,8,-1,0,7,ch222data};
/* char: 0xdd */
static const GLubyte ch221data[] = {
0x10,0x10,0x10,0x28,0x28,0x44,0x44,0x82,0x0,0x10,0x8,
};
static const BitmapCharRec ch221 = {7,11,0,0,7,ch221data};
/* char: 0xdc */
static const GLubyte ch220data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x0,0x48,
};
static const BitmapCharRec ch220 = {6,10,-1,0,8,ch220data};
/* char: 0xdb */
static const GLubyte ch219data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x0,0x28,0x10,
};
static const BitmapCharRec ch219 = {6,11,-1,0,8,ch219data};
/* char: 0xda */
static const GLubyte ch218data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x0,0x20,0x10,
};
static const BitmapCharRec ch218 = {6,11,-1,0,8,ch218data};
/* char: 0xd9 */
static const GLubyte ch217data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x0,0x10,0x20,
};
static const BitmapCharRec ch217 = {6,11,-1,0,8,ch217data};
/* char: 0xd8 */
static const GLubyte ch216data[] = {
0x80,0x78,0xc4,0xa4,0xa4,0x94,0x94,0x8c,0x78,0x4,
};
static const BitmapCharRec ch216 = {6,10,-1,1,8,ch216data};
/* char: 0xd7 */
static const GLubyte ch215data[] = {
0x88,0x50,0x20,0x50,0x88,
};
static const BitmapCharRec ch215 = {5,5,0,-1,6,ch215data};
/* char: 0xd6 */
static const GLubyte ch214data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x78,0x0,0x48,
};
static const BitmapCharRec ch214 = {6,10,-1,0,8,ch214data};
/* char: 0xd5 */
static const GLubyte ch213data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x78,0x0,0x50,0x28,
};
static const BitmapCharRec ch213 = {6,11,-1,0,8,ch213data};
/* char: 0xd4 */
static const GLubyte ch212data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x78,0x0,0x28,0x10,
};
static const BitmapCharRec ch212 = {6,11,-1,0,8,ch212data};
/* char: 0xd3 */
static const GLubyte ch211data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x78,0x0,0x10,0x8,
};
static const BitmapCharRec ch211 = {6,11,-1,0,8,ch211data};
/* char: 0xd2 */
static const GLubyte ch210data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x78,0x0,0x10,0x20,
};
static const BitmapCharRec ch210 = {6,11,-1,0,8,ch210data};
/* char: 0xd1 */
static const GLubyte ch209data[] = {
0x8c,0x8c,0x94,0x94,0xa4,0xa4,0xc4,0xc4,0x0,0x50,0x28,
};
static const BitmapCharRec ch209 = {6,11,-1,0,8,ch209data};
/* char: 0xd0 */
static const GLubyte ch208data[] = {
0x78,0x44,0x42,0x42,0xf2,0x42,0x44,0x78,
};
static const BitmapCharRec ch208 = {7,8,0,0,8,ch208data};
/* char: 0xcf */
static const GLubyte ch207data[] = {
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x0,0xa0,
};
static const BitmapCharRec ch207 = {3,10,0,0,3,ch207data};
/* char: 0xce */
static const GLubyte ch206data[] = {
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x0,0xa0,0x40,
};
static const BitmapCharRec ch206 = {3,11,0,0,3,ch206data};
/* char: 0xcd */
static const GLubyte ch205data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x80,0x40,
};
static const BitmapCharRec ch205 = {2,11,-1,0,3,ch205data};
/* char: 0xcc */
static const GLubyte ch204data[] = {
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x0,0x40,0x80,
};
static const BitmapCharRec ch204 = {2,11,0,0,3,ch204data};
/* char: 0xcb */
static const GLubyte ch203data[] = {
0xf8,0x80,0x80,0x80,0xf8,0x80,0x80,0xf8,0x0,0x50,
};
static const BitmapCharRec ch203 = {5,10,-1,0,7,ch203data};
/* char: 0xca */
static const GLubyte ch202data[] = {
0xf8,0x80,0x80,0xf8,0x80,0x80,0x80,0xf8,0x0,0x50,0x20,
};
static const BitmapCharRec ch202 = {5,11,-1,0,7,ch202data};
/* char: 0xc9 */
static const GLubyte ch201data[] = {
0xf8,0x80,0x80,0x80,0xf8,0x80,0x80,0xf8,0x0,0x20,0x10,
};
static const BitmapCharRec ch201 = {5,11,-1,0,7,ch201data};
/* char: 0xc8 */
static const GLubyte ch200data[] = {
0xf8,0x80,0x80,0x80,0xf8,0x80,0x80,0xf8,0x0,0x20,0x40,
};
static const BitmapCharRec ch200 = {5,11,-1,0,7,ch200data};
/* char: 0xc7 */
static const GLubyte ch199data[] = {
0x30,0x10,0x78,0x84,0x80,0x80,0x80,0x80,0x84,0x78,
};
static const BitmapCharRec ch199 = {6,10,-1,2,8,ch199data};
/* char: 0xc6 */
static const GLubyte ch198data[] = {
0x8f,0x80,0x88,0x0,0x78,0x0,0x48,0x0,0x2f,0x80,0x28,0x0,0x18,0x0,0x1f,0x80,
};
static const BitmapCharRec ch198 = {9,8,0,0,10,ch198data};
/* char: 0xc5 */
static const GLubyte ch197data[] = {
0x82,0x82,0x7c,0x44,0x28,0x28,0x10,0x10,0x10,0x28,0x10,
};
static const BitmapCharRec ch197 = {7,11,0,0,7,ch197data};
/* char: 0xc4 */
static const GLubyte ch196data[] = {
0x82,0x82,0x7c,0x44,0x28,0x28,0x10,0x10,0x0,0x28,
};
static const BitmapCharRec ch196 = {7,10,0,0,7,ch196data};
/* char: 0xc3 */
static const GLubyte ch195data[] = {
0x82,0x82,0x7c,0x44,0x28,0x28,0x10,0x10,0x0,0x28,0x14,
};
static const BitmapCharRec ch195 = {7,11,0,0,7,ch195data};
/* char: 0xc2 */
static const GLubyte ch194data[] = {
0x82,0x82,0x7c,0x44,0x28,0x28,0x10,0x10,0x0,0x28,0x10,
};
static const BitmapCharRec ch194 = {7,11,0,0,7,ch194data};
/* char: 0xc1 */
static const GLubyte ch193data[] = {
0x82,0x82,0x7c,0x44,0x28,0x28,0x10,0x10,0x0,0x10,0x8,
};
static const BitmapCharRec ch193 = {7,11,0,0,7,ch193data};
/* char: 0xc0 */
static const GLubyte ch192data[] = {
0x82,0x82,0x7c,0x44,0x28,0x28,0x10,0x10,0x0,0x10,0x20,
};
static const BitmapCharRec ch192 = {7,11,0,0,7,ch192data};
/* char: 0xbf */
static const GLubyte ch191data[] = {
0x60,0x90,0x80,0x40,0x20,0x20,0x0,0x20,
};
static const BitmapCharRec ch191 = {4,8,-1,2,6,ch191data};
/* char: 0xbe */
static const GLubyte ch190data[] = {
0x21,0x0,0x17,0x80,0x13,0x0,0x9,0x0,0xc8,0x0,0x24,0x0,0x44,0x0,0xe2,0x0,
};
static const BitmapCharRec ch190 = {9,8,0,0,9,ch190data};
/* char: 0xbd */
static const GLubyte ch189data[] = {
0x27,0x12,0x15,0xb,0x48,0x44,0xc4,0x42,
};
static const BitmapCharRec ch189 = {8,8,0,0,9,ch189data};
/* char: 0xbc */
static const GLubyte ch188data[] = {
0x21,0x0,0x17,0x80,0x13,0x0,0x9,0x0,0x48,0x0,0x44,0x0,0xc4,0x0,0x42,0x0,
};
static const BitmapCharRec ch188 = {9,8,0,0,9,ch188data};
/* char: 0xbb */
static const GLubyte ch187data[] = {
0xa0,0x50,0x28,0x50,0xa0,
};
static const BitmapCharRec ch187 = {5,5,0,0,6,ch187data};
/* char: 0xba */
static const GLubyte ch186data[] = {
0xe0,0x0,0xe0,0xa0,0xe0,
};
static const BitmapCharRec ch186 = {3,5,0,-3,4,ch186data};
/* char: 0xb9 */
static const GLubyte ch185data[] = {
0x40,0x40,0xc0,0x40,
};
static const BitmapCharRec ch185 = {2,4,0,-3,3,ch185data};
/* char: 0xb8 */
static const GLubyte ch184data[] = {
0xc0,0x40,
};
static const BitmapCharRec ch184 = {2,2,0,2,3,ch184data};
/* char: 0xb7 */
static const GLubyte ch183data[] = {
0xc0,
};
static const BitmapCharRec ch183 = {2,1,0,-3,3,ch183data};
/* char: 0xb6 */
static const GLubyte ch182data[] = {
0x28,0x28,0x28,0x28,0x28,0x68,0xe8,0xe8,0xe8,0x7c,
};
static const BitmapCharRec ch182 = {6,10,0,2,6,ch182data};
/* char: 0xb5 */
static const GLubyte ch181data[] = {
0x80,0x80,0xf0,0x90,0x90,0x90,0x90,0x90,
};
static const BitmapCharRec ch181 = {4,8,0,2,5,ch181data};
/* char: 0xb4 */
static const GLubyte ch180data[] = {
0x80,0x40,
};
static const BitmapCharRec ch180 = {2,2,0,-6,3,ch180data};
/* char: 0xb3 */
static const GLubyte ch179data[] = {
0xc0,0x20,0x40,0xe0,
};
static const BitmapCharRec ch179 = {3,4,0,-3,3,ch179data};
/* char: 0xb2 */
static const GLubyte ch178data[] = {
0xe0,0x40,0xa0,0x60,
};
static const BitmapCharRec ch178 = {3,4,0,-3,3,ch178data};
/* char: 0xb1 */
static const GLubyte ch177data[] = {
0xf8,0x0,0x20,0x20,0xf8,0x20,0x20,
};
static const BitmapCharRec ch177 = {5,7,0,0,6,ch177data};
/* char: 0xb0 */
static const GLubyte ch176data[] = {
0x60,0x90,0x90,0x60,
};
static const BitmapCharRec ch176 = {4,4,0,-3,4,ch176data};
/* char: 0xaf */
static const GLubyte ch175data[] = {
0xe0,
};
static const BitmapCharRec ch175 = {3,1,0,-7,3,ch175data};
/* char: 0xae */
static const GLubyte ch174data[] = {
0x38,0x44,0xaa,0xb2,0xba,0x44,0x38,
};
static const BitmapCharRec ch174 = {7,7,-1,0,9,ch174data};
/* char: 0xad */
static const GLubyte ch173data[] = {
0xe0,
};
static const BitmapCharRec ch173 = {3,1,0,-3,4,ch173data};
/* char: 0xac */
static const GLubyte ch172data[] = {
0x8,0x8,0xf8,
};
static const BitmapCharRec ch172 = {5,3,-1,-2,7,ch172data};
/* char: 0xab */
static const GLubyte ch171data[] = {
0x28,0x50,0xa0,0x50,0x28,
};
static const BitmapCharRec ch171 = {5,5,0,0,6,ch171data};
/* char: 0xaa */
static const GLubyte ch170data[] = {
0xe0,0x0,0xa0,0x20,0xe0,
};
static const BitmapCharRec ch170 = {3,5,0,-3,4,ch170data};
/* char: 0xa9 */
static const GLubyte ch169data[] = {
0x38,0x44,0x9a,0xa2,0x9a,0x44,0x38,
};
static const BitmapCharRec ch169 = {7,7,-1,0,9,ch169data};
/* char: 0xa8 */
static const GLubyte ch168data[] = {
0xa0,
};
static const BitmapCharRec ch168 = {3,1,0,-7,3,ch168data};
/* char: 0xa7 */
static const GLubyte ch167data[] = {
0x70,0x88,0x18,0x70,0xc8,0x98,0x70,0xc0,0x88,0x70,
};
static const BitmapCharRec ch167 = {5,10,0,2,6,ch167data};
/* char: 0xa6 */
static const GLubyte ch166data[] = {
0x80,0x80,0x80,0x80,0x0,0x0,0x80,0x80,0x80,0x80,
};
static const BitmapCharRec ch166 = {1,10,-1,2,3,ch166data};
/* char: 0xa5 */
static const GLubyte ch165data[] = {
0x20,0xf8,0x20,0xf8,0x50,0x50,0x88,0x88,
};
static const BitmapCharRec ch165 = {5,8,0,0,6,ch165data};
/* char: 0xa4 */
static const GLubyte ch164data[] = {
0x90,0x60,0x90,0x90,0x60,0x90,
};
static const BitmapCharRec ch164 = {4,6,0,-1,5,ch164data};
/* char: 0xa3 */
static const GLubyte ch163data[] = {
0xb0,0x48,0x40,0x40,0xe0,0x40,0x48,0x30,
};
static const BitmapCharRec ch163 = {5,8,0,0,6,ch163data};
/* char: 0xa2 */
static const GLubyte ch162data[] = {
0x40,0x70,0xa8,0xa0,0xa0,0xa8,0x70,0x10,
};
static const BitmapCharRec ch162 = {5,8,0,1,6,ch162data};
/* char: 0xa1 */
static const GLubyte ch161data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x80,
};
static const BitmapCharRec ch161 = {1,8,-1,2,3,ch161data};
/* char: 0xa0 */
#ifdef _WIN32
/* XXX Work around Microsoft OpenGL 1.1 bug where glBitmap with
a height or width of zero does not advance the raster position
as specified by OpenGL. (Cosmo OpenGL does not have this bug.) */
static const GLubyte ch160data[] = { 0x0 };
static const BitmapCharRec ch160 = {1,1,0,0,3,ch160data};
#else
static const BitmapCharRec ch160 = {0,0,0,0,3,0};
#endif
/* char: 0x7e '~' */
static const GLubyte ch126data[] = {
0x98,0x64,
};
static const BitmapCharRec ch126 = {6,2,0,-3,7,ch126data};
/* char: 0x7d '}' */
static const GLubyte ch125data[] = {
0x80,0x40,0x40,0x40,0x40,0x20,0x40,0x40,0x40,0x80,
};
static const BitmapCharRec ch125 = {3,10,0,2,3,ch125data};
/* char: 0x7c '|' */
static const GLubyte ch124data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
};
static const BitmapCharRec ch124 = {1,10,-1,2,3,ch124data};
/* char: 0x7b '{' */
static const GLubyte ch123data[] = {
0x20,0x40,0x40,0x40,0x40,0x80,0x40,0x40,0x40,0x20,
};
static const BitmapCharRec ch123 = {3,10,0,2,3,ch123data};
/* char: 0x7a 'z' */
static const GLubyte ch122data[] = {
0xf0,0x80,0x40,0x20,0x10,0xf0,
};
static const BitmapCharRec ch122 = {4,6,0,0,5,ch122data};
/* char: 0x79 'y' */
static const GLubyte ch121data[] = {
0x80,0x40,0x40,0x60,0xa0,0xa0,0x90,0x90,
};
static const BitmapCharRec ch121 = {4,8,0,2,5,ch121data};
/* char: 0x78 'x' */
static const GLubyte ch120data[] = {
0x88,0x88,0x50,0x20,0x50,0x88,
};
static const BitmapCharRec ch120 = {5,6,0,0,6,ch120data};
/* char: 0x77 'w' */
static const GLubyte ch119data[] = {
0x28,0x28,0x54,0x54,0x92,0x92,
};
static const BitmapCharRec ch119 = {7,6,0,0,8,ch119data};
/* char: 0x76 'v' */
static const GLubyte ch118data[] = {
0x20,0x20,0x50,0x50,0x88,0x88,
};
static const BitmapCharRec ch118 = {5,6,0,0,6,ch118data};
/* char: 0x75 'u' */
static const GLubyte ch117data[] = {
0x70,0x90,0x90,0x90,0x90,0x90,
};
static const BitmapCharRec ch117 = {4,6,0,0,5,ch117data};
/* char: 0x74 't' */
static const GLubyte ch116data[] = {
0x60,0x40,0x40,0x40,0x40,0xe0,0x40,0x40,
};
static const BitmapCharRec ch116 = {3,8,0,0,4,ch116data};
/* char: 0x73 's' */
static const GLubyte ch115data[] = {
0x60,0x90,0x10,0x60,0x90,0x60,
};
static const BitmapCharRec ch115 = {4,6,0,0,5,ch115data};
/* char: 0x72 'r' */
static const GLubyte ch114data[] = {
0x80,0x80,0x80,0x80,0xc0,0xa0,
};
static const BitmapCharRec ch114 = {3,6,0,0,4,ch114data};
/* char: 0x71 'q' */
static const GLubyte ch113data[] = {
0x8,0x8,0x68,0x98,0x88,0x88,0x98,0x68,
};
static const BitmapCharRec ch113 = {5,8,0,2,6,ch113data};
/* char: 0x70 'p' */
static const GLubyte ch112data[] = {
0x80,0x80,0xb0,0xc8,0x88,0x88,0xc8,0xb0,
};
static const BitmapCharRec ch112 = {5,8,0,2,6,ch112data};
/* char: 0x6f 'o' */
static const GLubyte ch111data[] = {
0x70,0x88,0x88,0x88,0x88,0x70,
};
static const BitmapCharRec ch111 = {5,6,0,0,6,ch111data};
/* char: 0x6e 'n' */
static const GLubyte ch110data[] = {
0x88,0x88,0x88,0x88,0xc8,0xb0,
};
static const BitmapCharRec ch110 = {5,6,0,0,6,ch110data};
/* char: 0x6d 'm' */
static const GLubyte ch109data[] = {
0x92,0x92,0x92,0x92,0x92,0xec,
};
static const BitmapCharRec ch109 = {7,6,0,0,8,ch109data};
/* char: 0x6c 'l' */
static const GLubyte ch108data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
};
static const BitmapCharRec ch108 = {1,8,0,0,2,ch108data};
/* char: 0x6b 'k' */
static const GLubyte ch107data[] = {
0x90,0x90,0xa0,0xc0,0xa0,0x90,0x80,0x80,
};
static const BitmapCharRec ch107 = {4,8,0,0,5,ch107data};
/* char: 0x6a 'j' */
static const GLubyte ch106data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x80,
};
static const BitmapCharRec ch106 = {1,9,0,1,2,ch106data};
/* char: 0x69 'i' */
static const GLubyte ch105data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x80,
};
static const BitmapCharRec ch105 = {1,8,0,0,2,ch105data};
/* char: 0x68 'h' */
static const GLubyte ch104data[] = {
0x88,0x88,0x88,0x88,0xc8,0xb0,0x80,0x80,
};
static const BitmapCharRec ch104 = {5,8,0,0,6,ch104data};
/* char: 0x67 'g' */
static const GLubyte ch103data[] = {
0x70,0x8,0x68,0x98,0x88,0x88,0x98,0x68,
};
static const BitmapCharRec ch103 = {5,8,0,2,6,ch103data};
/* char: 0x66 'f' */
static const GLubyte ch102data[] = {
0x40,0x40,0x40,0x40,0x40,0xe0,0x40,0x30,
};
static const BitmapCharRec ch102 = {4,8,0,0,4,ch102data};
/* char: 0x65 'e' */
static const GLubyte ch101data[] = {
0x60,0x90,0x80,0xf0,0x90,0x60,
};
static const BitmapCharRec ch101 = {4,6,0,0,5,ch101data};
/* char: 0x64 'd' */
static const GLubyte ch100data[] = {
0x68,0x98,0x88,0x88,0x98,0x68,0x8,0x8,
};
static const BitmapCharRec ch100 = {5,8,0,0,6,ch100data};
/* char: 0x63 'c' */
static const GLubyte ch99data[] = {
0x60,0x90,0x80,0x80,0x90,0x60,
};
static const BitmapCharRec ch99 = {4,6,0,0,5,ch99data};
/* char: 0x62 'b' */
static const GLubyte ch98data[] = {
0xb0,0xc8,0x88,0x88,0xc8,0xb0,0x80,0x80,
};
static const BitmapCharRec ch98 = {5,8,0,0,6,ch98data};
/* char: 0x61 'a' */
static const GLubyte ch97data[] = {
0x68,0x90,0x90,0x70,0x10,0xe0,
};
static const BitmapCharRec ch97 = {5,6,0,0,5,ch97data};
/* char: 0x60 '`' */
static const GLubyte ch96data[] = {
0x80,0x80,0x40,
};
static const BitmapCharRec ch96 = {2,3,0,-5,3,ch96data};
/* char: 0x5f '_' */
static const GLubyte ch95data[] = {
0xfc,
};
static const BitmapCharRec ch95 = {6,1,0,2,6,ch95data};
/* char: 0x5e '^' */
static const GLubyte ch94data[] = {
0x88,0x50,0x50,0x20,0x20,
};
static const BitmapCharRec ch94 = {5,5,0,-3,6,ch94data};
/* char: 0x5d ']' */
static const GLubyte ch93data[] = {
0xc0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xc0,
};
static const BitmapCharRec ch93 = {2,10,0,2,3,ch93data};
/* char: 0x5c '\' */
static const GLubyte ch92data[] = {
0x20,0x20,0x40,0x40,0x40,0x40,0x80,0x80,
};
static const BitmapCharRec ch92 = {3,8,0,0,3,ch92data};
/* char: 0x5b '[' */
static const GLubyte ch91data[] = {
0xc0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xc0,
};
static const BitmapCharRec ch91 = {2,10,-1,2,3,ch91data};
/* char: 0x5a 'Z' */
static const GLubyte ch90data[] = {
0xf8,0x80,0x40,0x20,0x20,0x10,0x8,0xf8,
};
static const BitmapCharRec ch90 = {5,8,-1,0,7,ch90data};
/* char: 0x59 'Y' */
static const GLubyte ch89data[] = {
0x10,0x10,0x10,0x28,0x28,0x44,0x44,0x82,
};
static const BitmapCharRec ch89 = {7,8,0,0,7,ch89data};
/* char: 0x58 'X' */
static const GLubyte ch88data[] = {
0x88,0x88,0x50,0x50,0x20,0x50,0x88,0x88,
};
static const BitmapCharRec ch88 = {5,8,-1,0,7,ch88data};
/* char: 0x57 'W' */
static const GLubyte ch87data[] = {
0x22,0x0,0x22,0x0,0x22,0x0,0x55,0x0,0x49,0x0,0x49,0x0,0x88,0x80,0x88,0x80,
};
static const BitmapCharRec ch87 = {9,8,0,0,9,ch87data};
/* char: 0x56 'V' */
static const GLubyte ch86data[] = {
0x10,0x28,0x28,0x44,0x44,0x44,0x82,0x82,
};
static const BitmapCharRec ch86 = {7,8,0,0,7,ch86data};
/* char: 0x55 'U' */
static const GLubyte ch85data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x84,
};
static const BitmapCharRec ch85 = {6,8,-1,0,8,ch85data};
/* char: 0x54 'T' */
static const GLubyte ch84data[] = {
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xf8,
};
static const BitmapCharRec ch84 = {5,8,0,0,5,ch84data};
/* char: 0x53 'S' */
static const GLubyte ch83data[] = {
0x70,0x88,0x88,0x8,0x70,0x80,0x88,0x70,
};
static const BitmapCharRec ch83 = {5,8,-1,0,7,ch83data};
/* char: 0x52 'R' */
static const GLubyte ch82data[] = {
0x88,0x88,0x88,0x88,0xf0,0x88,0x88,0xf0,
};
static const BitmapCharRec ch82 = {5,8,-1,0,7,ch82data};
/* char: 0x51 'Q' */
static const GLubyte ch81data[] = {
0x2,0x7c,0x8c,0x94,0x84,0x84,0x84,0x84,0x78,
};
static const BitmapCharRec ch81 = {7,9,-1,1,8,ch81data};
/* char: 0x50 'P' */
static const GLubyte ch80data[] = {
0x80,0x80,0x80,0x80,0xf0,0x88,0x88,0xf0,
};
static const BitmapCharRec ch80 = {5,8,-1,0,7,ch80data};
/* char: 0x4f 'O' */
static const GLubyte ch79data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x78,
};
static const BitmapCharRec ch79 = {6,8,-1,0,8,ch79data};
/* char: 0x4e 'N' */
static const GLubyte ch78data[] = {
0x8c,0x8c,0x94,0x94,0xa4,0xa4,0xc4,0xc4,
};
static const BitmapCharRec ch78 = {6,8,-1,0,8,ch78data};
/* char: 0x4d 'M' */
static const GLubyte ch77data[] = {
0x92,0x92,0x92,0xaa,0xaa,0xc6,0xc6,0x82,
};
static const BitmapCharRec ch77 = {7,8,-1,0,9,ch77data};
/* char: 0x4c 'L' */
static const GLubyte ch76data[] = {
0xf0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
};
static const BitmapCharRec ch76 = {4,8,-1,0,6,ch76data};
/* char: 0x4b 'K' */
static const GLubyte ch75data[] = {
0x88,0x88,0x90,0x90,0xe0,0xa0,0x90,0x88,
};
static const BitmapCharRec ch75 = {5,8,-1,0,7,ch75data};
/* char: 0x4a 'J' */
static const GLubyte ch74data[] = {
0x60,0x90,0x10,0x10,0x10,0x10,0x10,0x10,
};
static const BitmapCharRec ch74 = {4,8,0,0,5,ch74data};
/* char: 0x49 'I' */
static const GLubyte ch73data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
};
static const BitmapCharRec ch73 = {1,8,-1,0,3,ch73data};
/* char: 0x48 'H' */
static const GLubyte ch72data[] = {
0x84,0x84,0x84,0x84,0xfc,0x84,0x84,0x84,
};
static const BitmapCharRec ch72 = {6,8,-1,0,8,ch72data};
/* char: 0x47 'G' */
static const GLubyte ch71data[] = {
0x74,0x8c,0x84,0x8c,0x80,0x80,0x84,0x78,
};
static const BitmapCharRec ch71 = {6,8,-1,0,8,ch71data};
/* char: 0x46 'F' */
static const GLubyte ch70data[] = {
0x80,0x80,0x80,0x80,0xf0,0x80,0x80,0xf8,
};
static const BitmapCharRec ch70 = {5,8,-1,0,6,ch70data};
/* char: 0x45 'E' */
static const GLubyte ch69data[] = {
0xf8,0x80,0x80,0x80,0xf8,0x80,0x80,0xf8,
};
static const BitmapCharRec ch69 = {5,8,-1,0,7,ch69data};
/* char: 0x44 'D' */
static const GLubyte ch68data[] = {
0xf0,0x88,0x84,0x84,0x84,0x84,0x88,0xf0,
};
static const BitmapCharRec ch68 = {6,8,-1,0,8,ch68data};
/* char: 0x43 'C' */
static const GLubyte ch67data[] = {
0x78,0x84,0x80,0x80,0x80,0x80,0x84,0x78,
};
static const BitmapCharRec ch67 = {6,8,-1,0,8,ch67data};
/* char: 0x42 'B' */
static const GLubyte ch66data[] = {
0xf0,0x88,0x88,0x88,0xf0,0x88,0x88,0xf0,
};
static const BitmapCharRec ch66 = {5,8,-1,0,7,ch66data};
/* char: 0x41 'A' */
static const GLubyte ch65data[] = {
0x82,0x82,0x7c,0x44,0x28,0x28,0x10,0x10,
};
static const BitmapCharRec ch65 = {7,8,0,0,7,ch65data};
/* char: 0x40 '@' */
static const GLubyte ch64data[] = {
0x3e,0x0,0x40,0x0,0x9b,0x0,0xa4,0x80,0xa4,0x80,0xa2,0x40,0x92,0x40,0x4d,0x40,
0x20,0x80,0x1f,0x0,
};
static const BitmapCharRec ch64 = {10,10,0,2,11,ch64data};
/* char: 0x3f '?' */
static const GLubyte ch63data[] = {
0x40,0x0,0x40,0x40,0x20,0x10,0x90,0x60,
};
static const BitmapCharRec ch63 = {4,8,-1,0,6,ch63data};
/* char: 0x3e '>' */
static const GLubyte ch62data[] = {
0x80,0x40,0x20,0x40,0x80,
};
static const BitmapCharRec ch62 = {3,5,-1,-1,6,ch62data};
/* char: 0x3d '=' */
static const GLubyte ch61data[] = {
0xf0,0x0,0xf0,
};
static const BitmapCharRec ch61 = {4,3,0,-2,5,ch61data};
/* char: 0x3c '<' */
static const GLubyte ch60data[] = {
0x20,0x40,0x80,0x40,0x20,
};
static const BitmapCharRec ch60 = {3,5,-1,-1,6,ch60data};
/* char: 0x3b ';' */
static const GLubyte ch59data[] = {
0x80,0x40,0x40,0x0,0x0,0x0,0x0,0x40,
};
static const BitmapCharRec ch59 = {2,8,0,2,3,ch59data};
/* char: 0x3a ':' */
static const GLubyte ch58data[] = {
0x80,0x0,0x0,0x0,0x0,0x80,
};
static const BitmapCharRec ch58 = {1,6,-1,0,3,ch58data};
/* char: 0x39 '9' */
static const GLubyte ch57data[] = {
0x70,0x88,0x8,0x68,0x98,0x88,0x88,0x70,
};
static const BitmapCharRec ch57 = {5,8,0,0,6,ch57data};
/* char: 0x38 '8' */
static const GLubyte ch56data[] = {
0x70,0x88,0x88,0x88,0x70,0x88,0x88,0x70,
};
static const BitmapCharRec ch56 = {5,8,0,0,6,ch56data};
/* char: 0x37 '7' */
static const GLubyte ch55data[] = {
0x40,0x40,0x20,0x20,0x10,0x10,0x8,0xf8,
};
static const BitmapCharRec ch55 = {5,8,0,0,6,ch55data};
/* char: 0x36 '6' */
static const GLubyte ch54data[] = {
0x70,0x88,0x88,0xc8,0xb0,0x80,0x88,0x70,
};
static const BitmapCharRec ch54 = {5,8,0,0,6,ch54data};
/* char: 0x35 '5' */
static const GLubyte ch53data[] = {
0x70,0x88,0x8,0x8,0xf0,0x80,0x80,0xf8,
};
static const BitmapCharRec ch53 = {5,8,0,0,6,ch53data};
/* char: 0x34 '4' */
static const GLubyte ch52data[] = {
0x10,0x10,0xf8,0x90,0x50,0x50,0x30,0x10,
};
static const BitmapCharRec ch52 = {5,8,0,0,6,ch52data};
/* char: 0x33 '3' */
static const GLubyte ch51data[] = {
0x70,0x88,0x8,0x8,0x30,0x8,0x88,0x70,
};
static const BitmapCharRec ch51 = {5,8,0,0,6,ch51data};
/* char: 0x32 '2' */
static const GLubyte ch50data[] = {
0xf8,0x80,0x40,0x30,0x8,0x8,0x88,0x70,
};
static const BitmapCharRec ch50 = {5,8,0,0,6,ch50data};
/* char: 0x31 '1' */
static const GLubyte ch49data[] = {
0x40,0x40,0x40,0x40,0x40,0x40,0xc0,0x40,
};
static const BitmapCharRec ch49 = {2,8,-1,0,6,ch49data};
/* char: 0x30 '0' */
static const GLubyte ch48data[] = {
0x70,0x88,0x88,0x88,0x88,0x88,0x88,0x70,
};
static const BitmapCharRec ch48 = {5,8,0,0,6,ch48data};
/* char: 0x2f '/' */
static const GLubyte ch47data[] = {
0x80,0x80,0x40,0x40,0x40,0x40,0x20,0x20,
};
static const BitmapCharRec ch47 = {3,8,0,0,3,ch47data};
/* char: 0x2e '.' */
static const GLubyte ch46data[] = {
0x80,
};
static const BitmapCharRec ch46 = {1,1,-1,0,3,ch46data};
/* char: 0x2d '-' */
static const GLubyte ch45data[] = {
0xf8,
};
static const BitmapCharRec ch45 = {5,1,-1,-3,7,ch45data};
/* char: 0x2c ',' */
static const GLubyte ch44data[] = {
0x80,0x40,0x40,
};
static const BitmapCharRec ch44 = {2,3,0,2,3,ch44data};
/* char: 0x2b '+' */
static const GLubyte ch43data[] = {
0x20,0x20,0xf8,0x20,0x20,
};
static const BitmapCharRec ch43 = {5,5,0,-1,6,ch43data};
/* char: 0x2a '*' */
static const GLubyte ch42data[] = {
0xa0,0x40,0xa0,
};
static const BitmapCharRec ch42 = {3,3,0,-5,4,ch42data};
/* char: 0x29 ')' */
static const GLubyte ch41data[] = {
0x80,0x40,0x40,0x20,0x20,0x20,0x20,0x40,0x40,0x80,
};
static const BitmapCharRec ch41 = {3,10,-1,2,4,ch41data};
/* char: 0x28 '(' */
static const GLubyte ch40data[] = {
0x20,0x40,0x40,0x80,0x80,0x80,0x80,0x40,0x40,0x20,
};
static const BitmapCharRec ch40 = {3,10,0,2,4,ch40data};
/* char: 0x27 ''' */
static const GLubyte ch39data[] = {
0x80,0x40,0x40,
};
static const BitmapCharRec ch39 = {2,3,-1,-5,3,ch39data};
/* char: 0x26 '&' */
static const GLubyte ch38data[] = {
0x64,0x98,0x98,0xa4,0x60,0x50,0x50,0x20,
};
static const BitmapCharRec ch38 = {6,8,-1,0,8,ch38data};
/* char: 0x25 '%' */
static const GLubyte ch37data[] = {
0x26,0x29,0x16,0x10,0x8,0x68,0x94,0x64,
};
static const BitmapCharRec ch37 = {8,8,0,0,9,ch37data};
/* char: 0x24 '$' */
static const GLubyte ch36data[] = {
0x20,0x70,0xa8,0x28,0x70,0xa0,0xa8,0x70,0x20,
};
static const BitmapCharRec ch36 = {5,9,0,1,6,ch36data};
/* char: 0x23 '#' */
static const GLubyte ch35data[] = {
0x50,0x50,0xf8,0x28,0x7c,0x28,0x28,
};
static const BitmapCharRec ch35 = {6,7,0,0,6,ch35data};
/* char: 0x22 '"' */
static const GLubyte ch34data[] = {
0xa0,0xa0,
};
static const BitmapCharRec ch34 = {3,2,-1,-6,4,ch34data};
/* char: 0x21 '!' */
static const GLubyte ch33data[] = {
0x80,0x0,0x80,0x80,0x80,0x80,0x80,0x80,
};
static const BitmapCharRec ch33 = {1,8,-1,0,3,ch33data};
/* char: 0x20 ' ' */
#ifdef _WIN32
/* XXX Work around Microsoft OpenGL 1.1 bug where glBitmap with
a height or width of zero does not advance the raster position
as specified by OpenGL. (Cosmo OpenGL does not have this bug.) */
static const GLubyte ch32data[] = { 0x0 };
static const BitmapCharRec ch32 = {0,0,0,0,3,ch32data};
#else
static const BitmapCharRec ch32 = {0,0,0,0,3,0};
#endif
static const BitmapCharRec * const chars[] = {
&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,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
&ch160,
&ch161,
&ch162,
&ch163,
&ch164,
&ch165,
&ch166,
&ch167,
&ch168,
&ch169,
&ch170,
&ch171,
&ch172,
&ch173,
&ch174,
&ch175,
&ch176,
&ch177,
&ch178,
&ch179,
&ch180,
&ch181,
&ch182,
&ch183,
&ch184,
&ch185,
&ch186,
&ch187,
&ch188,
&ch189,
&ch190,
&ch191,
&ch192,
&ch193,
&ch194,
&ch195,
&ch196,
&ch197,
&ch198,
&ch199,
&ch200,
&ch201,
&ch202,
&ch203,
&ch204,
&ch205,
&ch206,
&ch207,
&ch208,
&ch209,
&ch210,
&ch211,
&ch212,
&ch213,
&ch214,
&ch215,
&ch216,
&ch217,
&ch218,
&ch219,
&ch220,
&ch221,
&ch222,
&ch223,
&ch224,
&ch225,
&ch226,
&ch227,
&ch228,
&ch229,
&ch230,
&ch231,
&ch232,
&ch233,
&ch234,
&ch235,
&ch236,
&ch237,
&ch238,
&ch239,
&ch240,
&ch241,
&ch242,
&ch243,
&ch244,
&ch245,
&ch246,
&ch247,
&ch248,
&ch249,
&ch250,
&ch251,
&ch252,
&ch253,
&ch254,
&ch255,
};
const BitmapFontRec glutBitmapHelvetica10 = {
"-adobe-helvetica-medium-r-normal--10-100-75-75-p-56-iso8859-1",
224,
32,
chars
};
/* GENERATED FILE -- DO NOT MODIFY */
#define glutBitmapHelvetica12 XXX
#include "glutbitmap.h"
#undef glutBitmapHelvetica12
/* char: 0xff */
static const GLubyte ch255data[] = {
0xc0,0x20,0x20,0x20,0x30,0x50,0x50,0x48,0x88,0x88,0x0,0x50,
};
static const BitmapCharRec ch255 = {5,12,-1,3,7,ch255data};
/* char: 0xfe */
static const GLubyte ch254data[] = {
0x80,0x80,0x80,0xb0,0xc8,0x88,0x88,0x88,0xc8,0xb0,0x80,0x80,
};
static const BitmapCharRec ch254 = {5,12,-1,3,7,ch254data};
/* char: 0xfd */
static const GLubyte ch253data[] = {
0x80,0x40,0x20,0x20,0x50,0x50,0x90,0x88,0x88,0x88,0x0,0x20,0x10,
};
static const BitmapCharRec ch253 = {5,13,-1,3,7,ch253data};
/* char: 0xfc */
static const GLubyte ch252data[] = {
0x68,0x98,0x88,0x88,0x88,0x88,0x88,0x0,0x50,
};
static const BitmapCharRec ch252 = {5,9,-1,0,7,ch252data};
/* char: 0xfb */
static const GLubyte ch251data[] = {
0x68,0x98,0x88,0x88,0x88,0x88,0x88,0x0,0x50,0x20,
};
static const BitmapCharRec ch251 = {5,10,-1,0,7,ch251data};
/* char: 0xfa */
static const GLubyte ch250data[] = {
0x68,0x98,0x88,0x88,0x88,0x88,0x88,0x0,0x20,0x10,
};
static const BitmapCharRec ch250 = {5,10,-1,0,7,ch250data};
/* char: 0xf9 */
static const GLubyte ch249data[] = {
0x68,0x98,0x88,0x88,0x88,0x88,0x88,0x0,0x20,0x40,
};
static const BitmapCharRec ch249 = {5,10,-1,0,7,ch249data};
/* char: 0xf8 */
static const GLubyte ch248data[] = {
0xb8,0x44,0x64,0x54,0x4c,0x44,0x3a,
};
static const BitmapCharRec ch248 = {7,7,0,0,7,ch248data};
/* char: 0xf7 */
static const GLubyte ch247data[] = {
0x20,0x0,0xf8,0x0,0x20,
};
static const BitmapCharRec ch247 = {5,5,-1,-1,7,ch247data};
/* char: 0xf6 */
static const GLubyte ch246data[] = {
0x70,0x88,0x88,0x88,0x88,0x88,0x70,0x0,0x50,
};
static const BitmapCharRec ch246 = {5,9,-1,0,7,ch246data};
/* char: 0xf5 */
static const GLubyte ch245data[] = {
0x70,0x88,0x88,0x88,0x88,0x88,0x70,0x0,0x50,0x28,
};
static const BitmapCharRec ch245 = {5,10,-1,0,7,ch245data};
/* char: 0xf4 */
static const GLubyte ch244data[] = {
0x70,0x88,0x88,0x88,0x88,0x88,0x70,0x0,0x50,0x20,
};
static const BitmapCharRec ch244 = {5,10,-1,0,7,ch244data};
/* char: 0xf3 */
static const GLubyte ch243data[] = {
0x70,0x88,0x88,0x88,0x88,0x88,0x70,0x0,0x20,0x10,
};
static const BitmapCharRec ch243 = {5,10,-1,0,7,ch243data};
/* char: 0xf2 */
static const GLubyte ch242data[] = {
0x70,0x88,0x88,0x88,0x88,0x88,0x70,0x0,0x20,0x40,
};
static const BitmapCharRec ch242 = {5,10,-1,0,7,ch242data};
/* char: 0xf1 */
static const GLubyte ch241data[] = {
0x88,0x88,0x88,0x88,0x88,0xc8,0xb0,0x0,0x50,0x28,
};
static const BitmapCharRec ch241 = {5,10,-1,0,7,ch241data};
/* char: 0xf0 */
static const GLubyte ch240data[] = {
0x70,0x88,0x88,0x88,0x88,0x78,0x8,0x50,0x30,0x68,
};
static const BitmapCharRec ch240 = {5,10,-1,0,7,ch240data};
/* char: 0xef */
static const GLubyte ch239data[] = {
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x0,0xa0,
};
static const BitmapCharRec ch239 = {3,9,0,0,3,ch239data};
/* char: 0xee */
static const GLubyte ch238data[] = {
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x0,0xa0,0x40,
};
static const BitmapCharRec ch238 = {3,10,0,0,3,ch238data};
/* char: 0xed */
static const GLubyte ch237data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x80,0x40,
};
static const BitmapCharRec ch237 = {2,10,-1,0,3,ch237data};
/* char: 0xec */
static const GLubyte ch236data[] = {
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x0,0x40,0x80,
};
static const BitmapCharRec ch236 = {2,10,0,0,3,ch236data};
/* char: 0xeb */
static const GLubyte ch235data[] = {
0x70,0x88,0x80,0xf8,0x88,0x88,0x70,0x0,0x50,
};
static const BitmapCharRec ch235 = {5,9,-1,0,7,ch235data};
/* char: 0xea */
static const GLubyte ch234data[] = {
0x70,0x88,0x80,0xf8,0x88,0x88,0x70,0x0,0x50,0x20,
};
static const BitmapCharRec ch234 = {5,10,-1,0,7,ch234data};
/* char: 0xe9 */
static const GLubyte ch233data[] = {
0x70,0x88,0x80,0xf8,0x88,0x88,0x70,0x0,0x20,0x10,
};
static const BitmapCharRec ch233 = {5,10,-1,0,7,ch233data};
/* char: 0xe8 */
static const GLubyte ch232data[] = {
0x70,0x88,0x80,0xf8,0x88,0x88,0x70,0x0,0x20,0x40,
};
static const BitmapCharRec ch232 = {5,10,-1,0,7,ch232data};
/* char: 0xe7 */
static const GLubyte ch231data[] = {
0x60,0x10,0x20,0x70,0x88,0x80,0x80,0x80,0x88,0x70,
};
static const BitmapCharRec ch231 = {5,10,-1,3,7,ch231data};
/* char: 0xe6 */
static const GLubyte ch230data[] = {
0x77,0x0,0x88,0x80,0x88,0x0,0x7f,0x80,0x8,0x80,0x88,0x80,0x77,0x0,
};
static const BitmapCharRec ch230 = {9,7,-1,0,11,ch230data};
/* char: 0xe5 */
static const GLubyte ch229data[] = {
0x74,0x88,0x88,0x78,0x8,0x88,0x70,0x30,0x48,0x30,
};
static const BitmapCharRec ch229 = {6,10,-1,0,7,ch229data};
/* char: 0xe4 */
static const GLubyte ch228data[] = {
0x74,0x88,0x88,0x78,0x8,0x88,0x70,0x0,0x50,
};
static const BitmapCharRec ch228 = {6,9,-1,0,7,ch228data};
/* char: 0xe3 */
static const GLubyte ch227data[] = {
0x74,0x88,0x88,0x78,0x8,0x88,0x70,0x0,0x50,0x28,
};
static const BitmapCharRec ch227 = {6,10,-1,0,7,ch227data};
/* char: 0xe2 */
static const GLubyte ch226data[] = {
0x74,0x88,0x88,0x78,0x8,0x88,0x70,0x0,0x50,0x20,
};
static const BitmapCharRec ch226 = {6,10,-1,0,7,ch226data};
/* char: 0xe1 */
static const GLubyte ch225data[] = {
0x74,0x88,0x88,0x78,0x8,0x88,0x70,0x0,0x20,0x10,
};
static const BitmapCharRec ch225 = {6,10,-1,0,7,ch225data};
/* char: 0xe0 */
static const GLubyte ch224data[] = {
0x74,0x88,0x88,0x78,0x8,0x88,0x70,0x0,0x10,0x20,
};
static const BitmapCharRec ch224 = {6,10,-1,0,7,ch224data};
/* char: 0xdf */
static const GLubyte ch223data[] = {
0xb0,0x88,0x88,0x88,0xb0,0x88,0x88,0x88,0x70,
};
static const BitmapCharRec ch223 = {5,9,-1,0,7,ch223data};
/* char: 0xde */
static const GLubyte ch222data[] = {
0x80,0x80,0xf8,0x84,0x84,0x84,0xf8,0x80,0x80,
};
static const BitmapCharRec ch222 = {6,9,-1,0,8,ch222data};
/* char: 0xdd */
static const GLubyte ch221data[] = {
0x10,0x10,0x10,0x10,0x28,0x44,0x44,0x82,0x82,0x0,0x10,0x8,
};
static const BitmapCharRec ch221 = {7,12,-1,0,9,ch221data};
/* char: 0xdc */
static const GLubyte ch220data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x0,0x48,
};
static const BitmapCharRec ch220 = {6,11,-1,0,8,ch220data};
/* char: 0xdb */
static const GLubyte ch219data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x0,0x28,0x10,
};
static const BitmapCharRec ch219 = {6,12,-1,0,8,ch219data};
/* char: 0xda */
static const GLubyte ch218data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x0,0x10,0x8,
};
static const BitmapCharRec ch218 = {6,12,-1,0,8,ch218data};
/* char: 0xd9 */
static const GLubyte ch217data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x0,0x10,0x20,
};
static const BitmapCharRec ch217 = {6,12,-1,0,8,ch217data};
/* char: 0xd8 */
static const GLubyte ch216data[] = {
0x80,0x0,0x5e,0x0,0x21,0x0,0x50,0x80,0x48,0x80,0x44,0x80,0x44,0x80,0x42,0x80,
0x21,0x0,0x1e,0x80,0x0,0x40,
};
static const BitmapCharRec ch216 = {10,11,0,1,10,ch216data};
/* char: 0xd7 */
static const GLubyte ch215data[] = {
0x88,0x50,0x20,0x50,0x88,
};
static const BitmapCharRec ch215 = {5,5,-1,-1,7,ch215data};
/* char: 0xd6 */
static const GLubyte ch214data[] = {
0x3c,0x42,0x81,0x81,0x81,0x81,0x81,0x42,0x3c,0x0,0x24,
};
static const BitmapCharRec ch214 = {8,11,-1,0,10,ch214data};
/* char: 0xd5 */
static const GLubyte ch213data[] = {
0x3c,0x42,0x81,0x81,0x81,0x81,0x81,0x42,0x3c,0x0,0x28,0x14,
};
static const BitmapCharRec ch213 = {8,12,-1,0,10,ch213data};
/* char: 0xd4 */
static const GLubyte ch212data[] = {
0x3c,0x42,0x81,0x81,0x81,0x81,0x81,0x42,0x3c,0x0,0x14,0x8,
};
static const BitmapCharRec ch212 = {8,12,-1,0,10,ch212data};
/* char: 0xd3 */
static const GLubyte ch211data[] = {
0x3c,0x42,0x81,0x81,0x81,0x81,0x81,0x42,0x3c,0x0,0x8,0x4,
};
static const BitmapCharRec ch211 = {8,12,-1,0,10,ch211data};
/* char: 0xd2 */
static const GLubyte ch210data[] = {
0x3c,0x42,0x81,0x81,0x81,0x81,0x81,0x42,0x3c,0x0,0x8,0x10,
};
static const BitmapCharRec ch210 = {8,12,-1,0,10,ch210data};
/* char: 0xd1 */
static const GLubyte ch209data[] = {
0x82,0x86,0x8a,0x8a,0x92,0xa2,0xa2,0xc2,0x82,0x0,0x28,0x14,
};
static const BitmapCharRec ch209 = {7,12,-1,0,9,ch209data};
/* char: 0xd0 */
static const GLubyte ch208data[] = {
0x7c,0x42,0x41,0x41,0xf1,0x41,0x41,0x42,0x7c,
};
static const BitmapCharRec ch208 = {8,9,0,0,9,ch208data};
/* char: 0xcf */
static const GLubyte ch207data[] = {
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x0,0xa0,
};
static const BitmapCharRec ch207 = {3,11,0,0,3,ch207data};
/* char: 0xce */
static const GLubyte ch206data[] = {
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x0,0xa0,0x40,
};
static const BitmapCharRec ch206 = {3,12,0,0,3,ch206data};
/* char: 0xcd */
static const GLubyte ch205data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x80,0x40,
};
static const BitmapCharRec ch205 = {2,12,-1,0,3,ch205data};
/* char: 0xcc */
static const GLubyte ch204data[] = {
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x0,0x40,0x80,
};
static const BitmapCharRec ch204 = {2,12,0,0,3,ch204data};
/* char: 0xcb */
static const GLubyte ch203data[] = {
0xfc,0x80,0x80,0x80,0xfc,0x80,0x80,0x80,0xfc,0x0,0x28,
};
static const BitmapCharRec ch203 = {6,11,-1,0,8,ch203data};
/* char: 0xca */
static const GLubyte ch202data[] = {
0xfc,0x80,0x80,0x80,0xfc,0x80,0x80,0x80,0xfc,0x0,0x28,0x10,
};
static const BitmapCharRec ch202 = {6,12,-1,0,8,ch202data};
/* char: 0xc9 */
static const GLubyte ch201data[] = {
0xfc,0x80,0x80,0x80,0xfc,0x80,0x80,0x80,0xfc,0x0,0x10,0x8,
};
static const BitmapCharRec ch201 = {6,12,-1,0,8,ch201data};
/* char: 0xc8 */
static const GLubyte ch200data[] = {
0xfc,0x80,0x80,0x80,0xfc,0x80,0x80,0x80,0xfc,0x0,0x10,0x20,
};
static const BitmapCharRec ch200 = {6,12,-1,0,8,ch200data};
/* char: 0xc7 */
static const GLubyte ch199data[] = {
0x30,0x8,0x8,0x3c,0x42,0x80,0x80,0x80,0x80,0x80,0x42,0x3c,
};
static const BitmapCharRec ch199 = {7,12,-1,3,9,ch199data};
/* char: 0xc6 */
static const GLubyte ch198data[] = {
0x8f,0x80,0x88,0x0,0x88,0x0,0x78,0x0,0x4f,0x80,0x48,0x0,0x28,0x0,0x28,0x0,
0x1f,0x80,
};
static const BitmapCharRec ch198 = {9,9,-1,0,11,ch198data};
/* char: 0xc5 */
static const GLubyte ch197data[] = {
0x82,0x82,0x82,0x7c,0x44,0x44,0x28,0x10,0x10,0x10,0x28,0x10,
};
static const BitmapCharRec ch197 = {7,12,-1,0,9,ch197data};
/* char: 0xc4 */
static const GLubyte ch196data[] = {
0x82,0x82,0x82,0x7c,0x44,0x44,0x28,0x10,0x10,0x0,0x28,
};
static const BitmapCharRec ch196 = {7,11,-1,0,9,ch196data};
/* char: 0xc3 */
static const GLubyte ch195data[] = {
0x82,0x82,0x82,0x7c,0x44,0x44,0x28,0x10,0x10,0x0,0x28,0x14,
};
static const BitmapCharRec ch195 = {7,12,-1,0,9,ch195data};
/* char: 0xc2 */
static const GLubyte ch194data[] = {
0x82,0x82,0x82,0x7c,0x44,0x44,0x28,0x10,0x10,0x0,0x28,0x10,
};
static const BitmapCharRec ch194 = {7,12,-1,0,9,ch194data};
/* char: 0xc1 */
static const GLubyte ch193data[] = {
0x82,0x82,0x82,0x7c,0x44,0x44,0x28,0x10,0x10,0x0,0x10,0x8,
};
static const BitmapCharRec ch193 = {7,12,-1,0,9,ch193data};
/* char: 0xc0 */
static const GLubyte ch192data[] = {
0x82,0x82,0x82,0x7c,0x44,0x44,0x28,0x10,0x10,0x0,0x10,0x20,
};
static const BitmapCharRec ch192 = {7,12,-1,0,9,ch192data};
/* char: 0xbf */
static const GLubyte ch191data[] = {
0x70,0x88,0x88,0x40,0x40,0x20,0x20,0x0,0x20,
};
static const BitmapCharRec ch191 = {5,9,-1,3,7,ch191data};
/* char: 0xbe */
static const GLubyte ch190data[] = {
0x21,0x0,0x17,0x80,0x15,0x0,0xb,0x0,0xc9,0x0,0x24,0x0,0x44,0x0,0x22,0x0,
0xe1,0x0,
};
static const BitmapCharRec ch190 = {9,9,0,0,10,ch190data};
/* char: 0xbd */
static const GLubyte ch189data[] = {
0x47,0x80,0x22,0x0,0x11,0x0,0x14,0x80,0x4b,0x0,0x48,0x0,0x44,0x0,0xc2,0x0,
0x41,0x0,
};
static const BitmapCharRec ch189 = {9,9,0,0,10,ch189data};
/* char: 0xbc */
static const GLubyte ch188data[] = {
0x41,0x0,0x27,0x80,0x15,0x0,0x13,0x0,0x49,0x0,0x44,0x0,0x44,0x0,0xc2,0x0,
0x41,0x0,
};
static const BitmapCharRec ch188 = {9,9,0,0,10,ch188data};
/* char: 0xbb */
static const GLubyte ch187data[] = {
0xa0,0x50,0x28,0x50,0xa0,
};
static const BitmapCharRec ch187 = {5,5,-1,-1,7,ch187data};
/* char: 0xba */
static const GLubyte ch186data[] = {
0xe0,0x0,0xe0,0xa0,0xe0,
};
static const BitmapCharRec ch186 = {3,5,-1,-4,5,ch186data};
/* char: 0xb9 */
static const GLubyte ch185data[] = {
0x40,0x40,0x40,0xc0,0x40,
};
static const BitmapCharRec ch185 = {2,5,-1,-3,4,ch185data};
/* char: 0xb8 */
static const GLubyte ch184data[] = {
0xc0,0x20,0x20,0x40,
};
static const BitmapCharRec ch184 = {3,4,0,3,3,ch184data};
/* char: 0xb7 */
static const GLubyte ch183data[] = {
0x80,
};
static const BitmapCharRec ch183 = {1,1,-1,-3,3,ch183data};
/* char: 0xb6 */
static const GLubyte ch182data[] = {
0x28,0x28,0x28,0x28,0x28,0x28,0x68,0xe8,0xe8,0xe8,0x68,0x3c,
};
static const BitmapCharRec ch182 = {6,12,0,3,7,ch182data};
/* char: 0xb5 */
static const GLubyte ch181data[] = {
0x80,0x80,0x80,0xe8,0x98,0x88,0x88,0x88,0x88,0x88,
};
static const BitmapCharRec ch181 = {5,10,-1,3,7,ch181data};
/* char: 0xb4 */
static const GLubyte ch180data[] = {
0x80,0x40,
};
static const BitmapCharRec ch180 = {2,2,0,-8,2,ch180data};
/* char: 0xb3 */
static const GLubyte ch179data[] = {
0xc0,0x20,0x40,0x20,0xe0,
};
static const BitmapCharRec ch179 = {3,5,0,-3,4,ch179data};
/* char: 0xb2 */
static const GLubyte ch178data[] = {
0xf0,0x40,0x20,0x90,0x60,
};
static const BitmapCharRec ch178 = {4,5,0,-3,4,ch178data};
/* char: 0xb1 */
static const GLubyte ch177data[] = {
0xf8,0x0,0x20,0x20,0xf8,0x20,0x20,
};
static const BitmapCharRec ch177 = {5,7,-1,0,7,ch177data};
/* char: 0xb0 */
static const GLubyte ch176data[] = {
0x60,0x90,0x90,0x60,
};
static const BitmapCharRec ch176 = {4,4,0,-4,5,ch176data};
/* char: 0xaf */
static const GLubyte ch175data[] = {
0xf0,
};
static const BitmapCharRec ch175 = {4,1,0,-8,4,ch175data};
/* char: 0xae */
static const GLubyte ch174data[] = {
0x3e,0x0,0x41,0x0,0x94,0x80,0x94,0x80,0x98,0x80,0x94,0x80,0x9c,0x80,0x41,0x0,
0x3e,0x0,
};
static const BitmapCharRec ch174 = {9,9,-1,0,11,ch174data};
/* char: 0xad */
static const GLubyte ch173data[] = {
0xf0,
};
static const BitmapCharRec ch173 = {4,1,0,-3,5,ch173data};
/* char: 0xac */
static const GLubyte ch172data[] = {
0x4,0x4,0x4,0xfc,
};
static const BitmapCharRec ch172 = {6,4,-1,-2,8,ch172data};
/* char: 0xab */
static const GLubyte ch171data[] = {
0x28,0x50,0xa0,0x50,0x28,
};
static const BitmapCharRec ch171 = {5,5,-1,-1,7,ch171data};
/* char: 0xaa */
static const GLubyte ch170data[] = {
0xe0,0x0,0xa0,0x20,0xe0,
};
static const BitmapCharRec ch170 = {3,5,-1,-4,5,ch170data};
/* char: 0xa9 */
static const GLubyte ch169data[] = {
0x3e,0x0,0x41,0x0,0x9c,0x80,0xa2,0x80,0xa0,0x80,0xa2,0x80,0x9c,0x80,0x41,0x0,
0x3e,0x0,
};
static const BitmapCharRec ch169 = {9,9,-1,0,11,ch169data};
/* char: 0xa8 */
static const GLubyte ch168data[] = {
0xa0,
};
static const BitmapCharRec ch168 = {3,1,0,-8,3,ch168data};
/* char: 0xa7 */
static const GLubyte ch167data[] = {
0x70,0x88,0x8,0x30,0x48,0x88,0x88,0x90,0x60,0x80,0x88,0x70,
};
static const BitmapCharRec ch167 = {5,12,0,3,6,ch167data};
/* char: 0xa6 */
static const GLubyte ch166data[] = {
0x80,0x80,0x80,0x80,0x0,0x0,0x0,0x80,0x80,0x80,0x80,
};
static const BitmapCharRec ch166 = {1,11,-1,2,3,ch166data};
/* char: 0xa5 */
static const GLubyte ch165data[] = {
0x20,0x20,0xf8,0x20,0xf8,0x20,0x50,0x88,0x88,
};
static const BitmapCharRec ch165 = {5,9,-1,0,7,ch165data};
/* char: 0xa4 */
static const GLubyte ch164data[] = {
0x84,0x78,0x48,0x48,0x78,0x84,
};
static const BitmapCharRec ch164 = {6,6,0,-1,7,ch164data};
/* char: 0xa3 */
static const GLubyte ch163data[] = {
0xb0,0x48,0x20,0x20,0xf0,0x40,0x40,0x48,0x30,
};
static const BitmapCharRec ch163 = {5,9,-1,0,7,ch163data};
/* char: 0xa2 */
static const GLubyte ch162data[] = {
0x40,0x70,0xc8,0xa0,0xa0,0xa0,0xa8,0x70,0x10,
};
static const BitmapCharRec ch162 = {5,9,-1,1,7,ch162data};
/* char: 0xa1 */
static const GLubyte ch161data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x80,
};
static const BitmapCharRec ch161 = {1,10,-1,3,3,ch161data};
/* char: 0xa0 */
#ifdef _WIN32
/* XXX Work around Microsoft OpenGL 1.1 bug where glBitmap with
a height or width of zero does not advance the raster position
as specified by OpenGL. (Cosmo OpenGL does not have this bug.) */
static const GLubyte ch160data[] = { 0x0 };
static const BitmapCharRec ch160 = {1,1,0,0,4,ch160data};
#else
static const BitmapCharRec ch160 = {0,0,0,0,4,0};
#endif
/* char: 0x7e '~' */
static const GLubyte ch126data[] = {
0x98,0x64,
};
static const BitmapCharRec ch126 = {6,2,0,-3,7,ch126data};
/* char: 0x7d '}' */
static const GLubyte ch125data[] = {
0xc0,0x20,0x20,0x20,0x20,0x20,0x10,0x20,0x20,0x20,0x20,0xc0,
};
static const BitmapCharRec ch125 = {4,12,0,3,4,ch125data};
/* char: 0x7c '|' */
static const GLubyte ch124data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
};
static const BitmapCharRec ch124 = {1,12,-1,3,3,ch124data};
/* char: 0x7b '{' */
static const GLubyte ch123data[] = {
0x30,0x40,0x40,0x40,0x40,0x40,0x80,0x40,0x40,0x40,0x40,0x30,
};
static const BitmapCharRec ch123 = {4,12,0,3,4,ch123data};
/* char: 0x7a 'z' */
static const GLubyte ch122data[] = {
0xf0,0x80,0x40,0x40,0x20,0x10,0xf0,
};
static const BitmapCharRec ch122 = {4,7,-1,0,6,ch122data};
/* char: 0x79 'y' */
static const GLubyte ch121data[] = {
0x80,0x40,0x20,0x20,0x50,0x50,0x90,0x88,0x88,0x88,
};
static const BitmapCharRec ch121 = {5,10,-1,3,7,ch121data};
/* char: 0x78 'x' */
static const GLubyte ch120data[] = {
0x84,0x84,0x48,0x30,0x30,0x48,0x84,
};
static const BitmapCharRec ch120 = {6,7,0,0,6,ch120data};
/* char: 0x77 'w' */
static const GLubyte ch119data[] = {
0x22,0x0,0x22,0x0,0x55,0x0,0x49,0x0,0x49,0x0,0x88,0x80,0x88,0x80,
};
static const BitmapCharRec ch119 = {9,7,0,0,9,ch119data};
/* char: 0x76 'v' */
static const GLubyte ch118data[] = {
0x20,0x20,0x50,0x50,0x88,0x88,0x88,
};
static const BitmapCharRec ch118 = {5,7,-1,0,7,ch118data};
/* char: 0x75 'u' */
static const GLubyte ch117data[] = {
0x68,0x98,0x88,0x88,0x88,0x88,0x88,
};
static const BitmapCharRec ch117 = {5,7,-1,0,7,ch117data};
/* char: 0x74 't' */
static const GLubyte ch116data[] = {
0x60,0x40,0x40,0x40,0x40,0x40,0xe0,0x40,0x40,
};
static const BitmapCharRec ch116 = {3,9,0,0,3,ch116data};
/* char: 0x73 's' */
static const GLubyte ch115data[] = {
0x60,0x90,0x10,0x60,0x80,0x90,0x60,
};
static const BitmapCharRec ch115 = {4,7,-1,0,6,ch115data};
/* char: 0x72 'r' */
static const GLubyte ch114data[] = {
0x80,0x80,0x80,0x80,0x80,0xc0,0xa0,
};
static const BitmapCharRec ch114 = {3,7,-1,0,4,ch114data};
/* char: 0x71 'q' */
static const GLubyte ch113data[] = {
0x8,0x8,0x8,0x68,0x98,0x88,0x88,0x88,0x98,0x68,
};
static const BitmapCharRec ch113 = {5,10,-1,3,7,ch113data};
/* char: 0x70 'p' */
static const GLubyte ch112data[] = {
0x80,0x80,0x80,0xb0,0xc8,0x88,0x88,0x88,0xc8,0xb0,
};
static const BitmapCharRec ch112 = {5,10,-1,3,7,ch112data};
/* char: 0x6f 'o' */
static const GLubyte ch111data[] = {
0x70,0x88,0x88,0x88,0x88,0x88,0x70,
};
static const BitmapCharRec ch111 = {5,7,-1,0,7,ch111data};
/* char: 0x6e 'n' */
static const GLubyte ch110data[] = {
0x88,0x88,0x88,0x88,0x88,0xc8,0xb0,
};
static const BitmapCharRec ch110 = {5,7,-1,0,7,ch110data};
/* char: 0x6d 'm' */
static const GLubyte ch109data[] = {
0x92,0x92,0x92,0x92,0x92,0xda,0xa4,
};
static const BitmapCharRec ch109 = {7,7,-1,0,9,ch109data};
/* char: 0x6c 'l' */
static const GLubyte ch108data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
};
static const BitmapCharRec ch108 = {1,9,-1,0,3,ch108data};
/* char: 0x6b 'k' */
static const GLubyte ch107data[] = {
0x88,0x90,0xa0,0xc0,0xc0,0xa0,0x90,0x80,0x80,
};
static const BitmapCharRec ch107 = {5,9,-1,0,6,ch107data};
/* char: 0x6a 'j' */
static const GLubyte ch106data[] = {
0x80,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x0,0x40,
};
static const BitmapCharRec ch106 = {2,12,0,3,3,ch106data};
/* char: 0x69 'i' */
static const GLubyte ch105data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x80,
};
static const BitmapCharRec ch105 = {1,9,-1,0,3,ch105data};
/* char: 0x68 'h' */
static const GLubyte ch104data[] = {
0x88,0x88,0x88,0x88,0x88,0xc8,0xb0,0x80,0x80,
};
static const BitmapCharRec ch104 = {5,9,-1,0,7,ch104data};
/* char: 0x67 'g' */
static const GLubyte ch103data[] = {
0x70,0x88,0x8,0x68,0x98,0x88,0x88,0x88,0x98,0x68,
};
static const BitmapCharRec ch103 = {5,10,-1,3,7,ch103data};
/* char: 0x66 'f' */
static const GLubyte ch102data[] = {
0x40,0x40,0x40,0x40,0x40,0x40,0xe0,0x40,0x30,
};
static const BitmapCharRec ch102 = {4,9,0,0,3,ch102data};
/* char: 0x65 'e' */
static const GLubyte ch101data[] = {
0x70,0x88,0x80,0xf8,0x88,0x88,0x70,
};
static const BitmapCharRec ch101 = {5,7,-1,0,7,ch101data};
/* char: 0x64 'd' */
static const GLubyte ch100data[] = {
0x68,0x98,0x88,0x88,0x88,0x98,0x68,0x8,0x8,
};
static const BitmapCharRec ch100 = {5,9,-1,0,7,ch100data};
/* char: 0x63 'c' */
static const GLubyte ch99data[] = {
0x70,0x88,0x80,0x80,0x80,0x88,0x70,
};
static const BitmapCharRec ch99 = {5,7,-1,0,7,ch99data};
/* char: 0x62 'b' */
static const GLubyte ch98data[] = {
0xb0,0xc8,0x88,0x88,0x88,0xc8,0xb0,0x80,0x80,
};
static const BitmapCharRec ch98 = {5,9,-1,0,7,ch98data};
/* char: 0x61 'a' */
static const GLubyte ch97data[] = {
0x74,0x88,0x88,0x78,0x8,0x88,0x70,
};
static const BitmapCharRec ch97 = {6,7,-1,0,7,ch97data};
/* char: 0x60 '`' */
static const GLubyte ch96data[] = {
0xc0,0x80,0x40,
};
static const BitmapCharRec ch96 = {2,3,0,-6,3,ch96data};
/* char: 0x5f '_' */
static const GLubyte ch95data[] = {
0xfe,
};
static const BitmapCharRec ch95 = {7,1,0,2,7,ch95data};
/* char: 0x5e '^' */
static const GLubyte ch94data[] = {
0x88,0x50,0x20,
};
static const BitmapCharRec ch94 = {5,3,0,-5,6,ch94data};
/* char: 0x5d ']' */
static const GLubyte ch93data[] = {
0xc0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xc0,
};
static const BitmapCharRec ch93 = {2,12,0,3,3,ch93data};
/* char: 0x5c '\' */
static const GLubyte ch92data[] = {
0x10,0x10,0x20,0x20,0x20,0x40,0x40,0x80,0x80,
};
static const BitmapCharRec ch92 = {4,9,0,0,4,ch92data};
/* char: 0x5b '[' */
static const GLubyte ch91data[] = {
0xc0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xc0,
};
static const BitmapCharRec ch91 = {2,12,-1,3,3,ch91data};
/* char: 0x5a 'Z' */
static const GLubyte ch90data[] = {
0xfe,0x80,0x40,0x20,0x10,0x8,0x4,0x2,0xfe,
};
static const BitmapCharRec ch90 = {7,9,-1,0,9,ch90data};
/* char: 0x59 'Y' */
static const GLubyte ch89data[] = {
0x10,0x10,0x10,0x10,0x28,0x44,0x44,0x82,0x82,
};
static const BitmapCharRec ch89 = {7,9,-1,0,9,ch89data};
/* char: 0x58 'X' */
static const GLubyte ch88data[] = {
0x82,0x44,0x44,0x28,0x10,0x28,0x44,0x44,0x82,
};
static const BitmapCharRec ch88 = {7,9,-1,0,9,ch88data};
/* char: 0x57 'W' */
static const GLubyte ch87data[] = {
0x22,0x0,0x22,0x0,0x22,0x0,0x55,0x0,0x55,0x0,0x49,0x0,0x88,0x80,0x88,0x80,
0x88,0x80,
};
static const BitmapCharRec ch87 = {9,9,-1,0,11,ch87data};
/* char: 0x56 'V' */
static const GLubyte ch86data[] = {
0x10,0x10,0x28,0x28,0x44,0x44,0x44,0x82,0x82,
};
static const BitmapCharRec ch86 = {7,9,-1,0,9,ch86data};
/* char: 0x55 'U' */
static const GLubyte ch85data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,
};
static const BitmapCharRec ch85 = {6,9,-1,0,8,ch85data};
/* char: 0x54 'T' */
static const GLubyte ch84data[] = {
0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0xfe,
};
static const BitmapCharRec ch84 = {7,9,0,0,7,ch84data};
/* char: 0x53 'S' */
static const GLubyte ch83data[] = {
0x78,0x84,0x84,0x4,0x18,0x60,0x80,0x84,0x78,
};
static const BitmapCharRec ch83 = {6,9,-1,0,8,ch83data};
/* char: 0x52 'R' */
static const GLubyte ch82data[] = {
0x84,0x84,0x84,0x88,0xf8,0x84,0x84,0x84,0xf8,
};
static const BitmapCharRec ch82 = {6,9,-1,0,8,ch82data};
/* char: 0x51 'Q' */
static const GLubyte ch81data[] = {
0x3d,0x42,0x85,0x89,0x81,0x81,0x81,0x42,0x3c,
};
static const BitmapCharRec ch81 = {8,9,-1,0,10,ch81data};
/* char: 0x50 'P' */
static const GLubyte ch80data[] = {
0x80,0x80,0x80,0x80,0xf8,0x84,0x84,0x84,0xf8,
};
static const BitmapCharRec ch80 = {6,9,-1,0,8,ch80data};
/* char: 0x4f 'O' */
static const GLubyte ch79data[] = {
0x3c,0x42,0x81,0x81,0x81,0x81,0x81,0x42,0x3c,
};
static const BitmapCharRec ch79 = {8,9,-1,0,10,ch79data};
/* char: 0x4e 'N' */
static const GLubyte ch78data[] = {
0x82,0x86,0x8a,0x8a,0x92,0xa2,0xa2,0xc2,0x82,
};
static const BitmapCharRec ch78 = {7,9,-1,0,9,ch78data};
/* char: 0x4d 'M' */
static const GLubyte ch77data[] = {
0x88,0x80,0x88,0x80,0x94,0x80,0x94,0x80,0xa2,0x80,0xa2,0x80,0xc1,0x80,0xc1,0x80,
0x80,0x80,
};
static const BitmapCharRec ch77 = {9,9,-1,0,11,ch77data};
/* char: 0x4c 'L' */
static const GLubyte ch76data[] = {
0xf8,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
};
static const BitmapCharRec ch76 = {5,9,-1,0,7,ch76data};
/* char: 0x4b 'K' */
static const GLubyte ch75data[] = {
0x82,0x84,0x88,0x90,0xe0,0xa0,0x90,0x88,0x84,
};
static const BitmapCharRec ch75 = {7,9,-1,0,8,ch75data};
/* char: 0x4a 'J' */
static const GLubyte ch74data[] = {
0x70,0x88,0x88,0x8,0x8,0x8,0x8,0x8,0x8,
};
static const BitmapCharRec ch74 = {5,9,-1,0,7,ch74data};
/* char: 0x49 'I' */
static const GLubyte ch73data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
};
static const BitmapCharRec ch73 = {1,9,-1,0,3,ch73data};
/* char: 0x48 'H' */
static const GLubyte ch72data[] = {
0x82,0x82,0x82,0x82,0xfe,0x82,0x82,0x82,0x82,
};
static const BitmapCharRec ch72 = {7,9,-1,0,9,ch72data};
/* char: 0x47 'G' */
static const GLubyte ch71data[] = {
0x3a,0x46,0x82,0x82,0x8e,0x80,0x80,0x42,0x3c,
};
static const BitmapCharRec ch71 = {7,9,-1,0,9,ch71data};
/* char: 0x46 'F' */
static const GLubyte ch70data[] = {
0x80,0x80,0x80,0x80,0xf8,0x80,0x80,0x80,0xfc,
};
static const BitmapCharRec ch70 = {6,9,-1,0,8,ch70data};
/* char: 0x45 'E' */
static const GLubyte ch69data[] = {
0xfc,0x80,0x80,0x80,0xfc,0x80,0x80,0x80,0xfc,
};
static const BitmapCharRec ch69 = {6,9,-1,0,8,ch69data};
/* char: 0x44 'D' */
static const GLubyte ch68data[] = {
0xf8,0x84,0x82,0x82,0x82,0x82,0x82,0x84,0xf8,
};
static const BitmapCharRec ch68 = {7,9,-1,0,9,ch68data};
/* char: 0x43 'C' */
static const GLubyte ch67data[] = {
0x3c,0x42,0x80,0x80,0x80,0x80,0x80,0x42,0x3c,
};
static const BitmapCharRec ch67 = {7,9,-1,0,9,ch67data};
/* char: 0x42 'B' */
static const GLubyte ch66data[] = {
0xf8,0x84,0x84,0x84,0xf8,0x84,0x84,0x84,0xf8,
};
static const BitmapCharRec ch66 = {6,9,-1,0,8,ch66data};
/* char: 0x41 'A' */
static const GLubyte ch65data[] = {
0x82,0x82,0x82,0x7c,0x44,0x44,0x28,0x28,0x10,
};
static const BitmapCharRec ch65 = {7,9,-1,0,9,ch65data};
/* char: 0x40 '@' */
static const GLubyte ch64data[] = {
0x3e,0x0,0x40,0x0,0x9b,0x0,0xa6,0x80,0xa2,0x40,0xa2,0x40,0x92,0x40,0x4d,0x40,
0x60,0x80,0x1f,0x0,
};
static const BitmapCharRec ch64 = {10,10,-1,1,12,ch64data};
/* char: 0x3f '?' */
static const GLubyte ch63data[] = {
0x20,0x0,0x20,0x20,0x10,0x10,0x88,0x88,0x70,
};
static const BitmapCharRec ch63 = {5,9,-1,0,7,ch63data};
/* char: 0x3e '>' */
static const GLubyte ch62data[] = {
0xc0,0x30,0xc,0x30,0xc0,
};
static const BitmapCharRec ch62 = {6,5,-1,-1,7,ch62data};
/* char: 0x3d '=' */
static const GLubyte ch61data[] = {
0xf8,0x0,0xf8,
};
static const BitmapCharRec ch61 = {5,3,-1,-2,7,ch61data};
/* char: 0x3c '<' */
static const GLubyte ch60data[] = {
0xc,0x30,0xc0,0x30,0xc,
};
static const BitmapCharRec ch60 = {6,5,0,-1,7,ch60data};
/* char: 0x3b ';' */
static const GLubyte ch59data[] = {
0x80,0x40,0x40,0x0,0x0,0x0,0x0,0x40,
};
static const BitmapCharRec ch59 = {2,8,0,2,3,ch59data};
/* char: 0x3a ':' */
static const GLubyte ch58data[] = {
0x80,0x0,0x0,0x0,0x0,0x80,
};
static const BitmapCharRec ch58 = {1,6,-1,0,3,ch58data};
/* char: 0x39 '9' */
static const GLubyte ch57data[] = {
0x70,0x88,0x8,0x8,0x78,0x88,0x88,0x88,0x70,
};
static const BitmapCharRec ch57 = {5,9,-1,0,7,ch57data};
/* char: 0x38 '8' */
static const GLubyte ch56data[] = {
0x70,0x88,0x88,0x88,0x88,0x70,0x88,0x88,0x70,
};
static const BitmapCharRec ch56 = {5,9,-1,0,7,ch56data};
/* char: 0x37 '7' */
static const GLubyte ch55data[] = {
0x40,0x40,0x20,0x20,0x20,0x10,0x10,0x8,0xf8,
};
static const BitmapCharRec ch55 = {5,9,-1,0,7,ch55data};
/* char: 0x36 '6' */
static const GLubyte ch54data[] = {
0x70,0x88,0x88,0x88,0xc8,0xb0,0x80,0x88,0x70,
};
static const BitmapCharRec ch54 = {5,9,-1,0,7,ch54data};
/* char: 0x35 '5' */
static const GLubyte ch53data[] = {
0x70,0x88,0x88,0x8,0x8,0xf0,0x80,0x80,0xf8,
};
static const BitmapCharRec ch53 = {5,9,-1,0,7,ch53data};
/* char: 0x34 '4' */
static const GLubyte ch52data[] = {
0x8,0x8,0xfc,0x88,0x48,0x28,0x28,0x18,0x8,
};
static const BitmapCharRec ch52 = {6,9,0,0,7,ch52data};
/* char: 0x33 '3' */
static const GLubyte ch51data[] = {
0x70,0x88,0x88,0x8,0x8,0x30,0x8,0x88,0x70,
};
static const BitmapCharRec ch51 = {5,9,-1,0,7,ch51data};
/* char: 0x32 '2' */
static const GLubyte ch50data[] = {
0xf8,0x80,0x80,0x40,0x20,0x10,0x8,0x88,0x70,
};
static const BitmapCharRec ch50 = {5,9,-1,0,7,ch50data};
/* char: 0x31 '1' */
static const GLubyte ch49data[] = {
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xe0,0x20,
};
static const BitmapCharRec ch49 = {3,9,-1,0,7,ch49data};
/* char: 0x30 '0' */
static const GLubyte ch48data[] = {
0x70,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x70,
};
static const BitmapCharRec ch48 = {5,9,-1,0,7,ch48data};
/* char: 0x2f '/' */
static const GLubyte ch47data[] = {
0x80,0x80,0x40,0x40,0x40,0x20,0x20,0x10,0x10,
};
static const BitmapCharRec ch47 = {4,9,0,0,4,ch47data};
/* char: 0x2e '.' */
static const GLubyte ch46data[] = {
0x80,
};
static const BitmapCharRec ch46 = {1,1,-1,0,3,ch46data};
/* char: 0x2d '-' */
static const GLubyte ch45data[] = {
0xf8,
};
static const BitmapCharRec ch45 = {5,1,-1,-3,8,ch45data};
/* char: 0x2c ',' */
static const GLubyte ch44data[] = {
0x80,0x40,0x40,
};
static const BitmapCharRec ch44 = {2,3,-1,2,4,ch44data};
/* char: 0x2b '+' */
static const GLubyte ch43data[] = {
0x20,0x20,0xf8,0x20,0x20,
};
static const BitmapCharRec ch43 = {5,5,-1,-1,7,ch43data};
/* char: 0x2a '*' */
static const GLubyte ch42data[] = {
0xa0,0x40,0xa0,
};
static const BitmapCharRec ch42 = {3,3,-1,-6,5,ch42data};
/* char: 0x29 ')' */
static const GLubyte ch41data[] = {
0x80,0x40,0x40,0x20,0x20,0x20,0x20,0x20,0x20,0x40,0x40,0x80,
};
static const BitmapCharRec ch41 = {3,12,0,3,4,ch41data};
/* char: 0x28 '(' */
static const GLubyte ch40data[] = {
0x20,0x40,0x40,0x80,0x80,0x80,0x80,0x80,0x80,0x40,0x40,0x20,
};
static const BitmapCharRec ch40 = {3,12,-1,3,4,ch40data};
/* char: 0x27 ''' */
static const GLubyte ch39data[] = {
0x80,0x40,0xc0,
};
static const BitmapCharRec ch39 = {2,3,-1,-6,3,ch39data};
/* char: 0x26 '&' */
static const GLubyte ch38data[] = {
0x72,0x8c,0x84,0x8a,0x50,0x30,0x48,0x48,0x30,
};
static const BitmapCharRec ch38 = {7,9,-1,0,9,ch38data};
/* char: 0x25 '%' */
static const GLubyte ch37data[] = {
0x23,0x0,0x14,0x80,0x14,0x80,0x13,0x0,0x8,0x0,0x68,0x0,0x94,0x0,0x94,0x0,
0x62,0x0,
};
static const BitmapCharRec ch37 = {9,9,-1,0,11,ch37data};
/* char: 0x24 '$' */
static const GLubyte ch36data[] = {
0x20,0x70,0xa8,0xa8,0x28,0x70,0xa0,0xa8,0x70,0x20,
};
static const BitmapCharRec ch36 = {5,10,-1,1,7,ch36data};
/* char: 0x23 '#' */
static const GLubyte ch35data[] = {
0x50,0x50,0x50,0xfc,0x28,0xfc,0x28,0x28,
};
static const BitmapCharRec ch35 = {6,8,0,0,7,ch35data};
/* char: 0x22 '"' */
static const GLubyte ch34data[] = {
0xa0,0xa0,0xa0,
};
static const BitmapCharRec ch34 = {3,3,-1,-6,5,ch34data};
/* char: 0x21 '!' */
static const GLubyte ch33data[] = {
0x80,0x0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
};
static const BitmapCharRec ch33 = {1,9,-1,0,3,ch33data};
/* char: 0x20 ' ' */
#ifdef _WIN32
/* XXX Work around Microsoft OpenGL 1.1 bug where glBitmap with
a height or width of zero does not advance the raster position
as specified by OpenGL. (Cosmo OpenGL does not have this bug.) */
static const GLubyte ch32data[] = { 0x0 };
static const BitmapCharRec ch32 = {1,1,0,0,4,ch32data};
#else
static const BitmapCharRec ch32 = {0,0,0,0,4,0};
#endif
static const BitmapCharRec * const chars[] = {
&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,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
&ch160,
&ch161,
&ch162,
&ch163,
&ch164,
&ch165,
&ch166,
&ch167,
&ch168,
&ch169,
&ch170,
&ch171,
&ch172,
&ch173,
&ch174,
&ch175,
&ch176,
&ch177,
&ch178,
&ch179,
&ch180,
&ch181,
&ch182,
&ch183,
&ch184,
&ch185,
&ch186,
&ch187,
&ch188,
&ch189,
&ch190,
&ch191,
&ch192,
&ch193,
&ch194,
&ch195,
&ch196,
&ch197,
&ch198,
&ch199,
&ch200,
&ch201,
&ch202,
&ch203,
&ch204,
&ch205,
&ch206,
&ch207,
&ch208,
&ch209,
&ch210,
&ch211,
&ch212,
&ch213,
&ch214,
&ch215,
&ch216,
&ch217,
&ch218,
&ch219,
&ch220,
&ch221,
&ch222,
&ch223,
&ch224,
&ch225,
&ch226,
&ch227,
&ch228,
&ch229,
&ch230,
&ch231,
&ch232,
&ch233,
&ch234,
&ch235,
&ch236,
&ch237,
&ch238,
&ch239,
&ch240,
&ch241,
&ch242,
&ch243,
&ch244,
&ch245,
&ch246,
&ch247,
&ch248,
&ch249,
&ch250,
&ch251,
&ch252,
&ch253,
&ch254,
&ch255,
};
const BitmapFontRec glutBitmapHelvetica12 = {
"-adobe-helvetica-medium-r-normal--12-120-75-75-p-67-iso8859-1",
224,
32,
chars
};
/* GENERATED FILE -- DO NOT MODIFY */
#define glutBitmapHelvetica18 XXX
#include "glutbitmap.h"
#undef glutBitmapHelvetica18
/* char: 0xff */
static const GLubyte ch255data[] = {
0x70,0x70,0x18,0x18,0x18,0x18,0x3c,0x24,0x66,0x66,0x66,0xc3,0xc3,0xc3,0x0,0x66,
0x66,
};
static const BitmapCharRec ch255 = {8,17,-1,4,10,ch255data};
/* char: 0xfe */
static const GLubyte ch254data[] = {
0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xde,0x0,0xff,0x0,0xe3,0x0,0xc1,0x80,
0xc1,0x80,0xc1,0x80,0xc1,0x80,0xe3,0x0,0xff,0x0,0xde,0x0,0xc0,0x0,0xc0,0x0,
0xc0,0x0,0xc0,0x0,
};
static const BitmapCharRec ch254 = {9,18,-1,4,11,ch254data};
/* char: 0xfd */
static const GLubyte ch253data[] = {
0x70,0x70,0x18,0x18,0x18,0x18,0x3c,0x24,0x66,0x66,0x66,0xc3,0xc3,0xc3,0x0,0x18,
0xc,0x6,
};
static const BitmapCharRec ch253 = {8,18,-1,4,10,ch253data};
/* char: 0xfc */
static const GLubyte ch252data[] = {
0x73,0xfb,0xc7,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0x0,0x66,0x66,
};
static const BitmapCharRec ch252 = {8,13,-1,0,10,ch252data};
/* char: 0xfb */
static const GLubyte ch251data[] = {
0x73,0xfb,0xc7,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0x0,0x66,0x3c,0x18,
};
static const BitmapCharRec ch251 = {8,14,-1,0,10,ch251data};
/* char: 0xfa */
static const GLubyte ch250data[] = {
0x73,0xfb,0xc7,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0x0,0x18,0xc,0x6,
};
static const BitmapCharRec ch250 = {8,14,-1,0,10,ch250data};
/* char: 0xf9 */
static const GLubyte ch249data[] = {
0x73,0xfb,0xc7,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0x0,0xc,0x18,0x30,
};
static const BitmapCharRec ch249 = {8,14,-1,0,10,ch249data};
/* char: 0xf8 */
static const GLubyte ch248data[] = {
0xce,0x0,0x7f,0x80,0x31,0x80,0x78,0xc0,0x6c,0xc0,0x66,0xc0,0x63,0xc0,0x31,0x80,
0x3f,0xc0,0xe,0x60,
};
static const BitmapCharRec ch248 = {11,10,0,0,11,ch248data};
/* char: 0xf7 */
static const GLubyte ch247data[] = {
0x18,0x18,0x0,0xff,0xff,0x0,0x18,0x18,
};
static const BitmapCharRec ch247 = {8,8,-1,-1,10,ch247data};
/* char: 0xf6 */
static const GLubyte ch246data[] = {
0x3e,0x0,0x7f,0x0,0x63,0x0,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0x63,0x0,
0x7f,0x0,0x3e,0x0,0x0,0x0,0x36,0x0,0x36,0x0,
};
static const BitmapCharRec ch246 = {9,13,-1,0,11,ch246data};
/* char: 0xf5 */
static const GLubyte ch245data[] = {
0x3e,0x0,0x7f,0x0,0x63,0x0,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0x63,0x0,
0x7f,0x0,0x3e,0x0,0x0,0x0,0x26,0x0,0x2d,0x0,0x19,0x0,
};
static const BitmapCharRec ch245 = {9,14,-1,0,11,ch245data};
/* char: 0xf4 */
static const GLubyte ch244data[] = {
0x3e,0x0,0x7f,0x0,0x63,0x0,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0x63,0x0,
0x7f,0x0,0x3e,0x0,0x0,0x0,0x33,0x0,0x1e,0x0,0xc,0x0,
};
static const BitmapCharRec ch244 = {9,14,-1,0,11,ch244data};
/* char: 0xf3 */
static const GLubyte ch243data[] = {
0x3e,0x0,0x7f,0x0,0x63,0x0,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0x63,0x0,
0x7f,0x0,0x3e,0x0,0x0,0x0,0x18,0x0,0xc,0x0,0x6,0x0,
};
static const BitmapCharRec ch243 = {9,14,-1,0,11,ch243data};
/* char: 0xf2 */
static const GLubyte ch242data[] = {
0x3e,0x0,0x7f,0x0,0x63,0x0,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0x63,0x0,
0x7f,0x0,0x3e,0x0,0x0,0x0,0xc,0x0,0x18,0x0,0x30,0x0,
};
static const BitmapCharRec ch242 = {9,14,-1,0,11,ch242data};
/* char: 0xf1 */
static const GLubyte ch241data[] = {
0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xe3,0xdf,0xce,0x0,0x4c,0x5a,0x32,
};
static const BitmapCharRec ch241 = {8,14,-1,0,10,ch241data};
/* char: 0xf0 */
static const GLubyte ch240data[] = {
0x3e,0x0,0x7f,0x0,0x63,0x0,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0x63,0x0,
0x7f,0x0,0x3e,0x0,0x4c,0x0,0x38,0x0,0x36,0x0,0x60,0x0,
};
static const BitmapCharRec ch240 = {9,14,-1,0,11,ch240data};
/* char: 0xef */
static const GLubyte ch239data[] = {
0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x0,0xd8,0xd8,
};
static const BitmapCharRec ch239 = {5,13,0,0,4,ch239data};
/* char: 0xee */
static const GLubyte ch238data[] = {
0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x0,0xcc,0x78,0x30,
};
static const BitmapCharRec ch238 = {6,14,1,0,4,ch238data};
/* char: 0xed */
static const GLubyte ch237data[] = {
0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x0,0xc0,0x60,0x30,
};
static const BitmapCharRec ch237 = {4,14,0,0,4,ch237data};
/* char: 0xec */
static const GLubyte ch236data[] = {
0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x0,0x30,0x60,0xc0,
};
static const BitmapCharRec ch236 = {4,14,0,0,4,ch236data};
/* char: 0xeb */
static const GLubyte ch235data[] = {
0x3c,0x7f,0xe3,0xc0,0xc0,0xff,0xc3,0xc3,0x7e,0x3c,0x0,0x36,0x36,
};
static const BitmapCharRec ch235 = {8,13,-1,0,10,ch235data};
/* char: 0xea */
static const GLubyte ch234data[] = {
0x3c,0x7f,0xe3,0xc0,0xc0,0xff,0xc3,0xc3,0x7e,0x3c,0x0,0x66,0x3c,0x18,
};
static const BitmapCharRec ch234 = {8,14,-1,0,10,ch234data};
/* char: 0xe9 */
static const GLubyte ch233data[] = {
0x3c,0x7f,0xe3,0xc0,0xc0,0xff,0xc3,0xc3,0x7e,0x3c,0x0,0x18,0xc,0x6,
};
static const BitmapCharRec ch233 = {8,14,-1,0,10,ch233data};
/* char: 0xe8 */
static const GLubyte ch232data[] = {
0x3c,0x7f,0xe3,0xc0,0xc0,0xff,0xc3,0xc3,0x7e,0x3c,0x0,0x18,0x30,0x60,
};
static const BitmapCharRec ch232 = {8,14,-1,0,10,ch232data};
/* char: 0xe7 */
static const GLubyte ch231data[] = {
0x78,0x6c,0xc,0x38,0x3e,0x7f,0x63,0xc0,0xc0,0xc0,0xc0,0x63,0x7f,0x3e,
};
static const BitmapCharRec ch231 = {8,14,-1,4,10,ch231data};
/* char: 0xe6 */
static const GLubyte ch230data[] = {
0x75,0xe0,0xef,0xf8,0xc7,0x18,0xc6,0x0,0xe6,0x0,0x7f,0xf8,0xe,0x18,0xc6,0x18,
0xef,0xf0,0x7d,0xe0,
};
static const BitmapCharRec ch230 = {13,10,-1,0,15,ch230data};
/* char: 0xe5 */
static const GLubyte ch229data[] = {
0x76,0xee,0xc6,0xc6,0xe6,0x7e,0xe,0xc6,0xee,0x7c,0x38,0x6c,0x6c,0x38,
};
static const BitmapCharRec ch229 = {7,14,-1,0,9,ch229data};
/* char: 0xe4 */
static const GLubyte ch228data[] = {
0x76,0xee,0xc6,0xc6,0xe6,0x7e,0xe,0xc6,0xee,0x7c,0x0,0x6c,0x6c,
};
static const BitmapCharRec ch228 = {7,13,-1,0,9,ch228data};
/* char: 0xe3 */
static const GLubyte ch227data[] = {
0x76,0xee,0xc6,0xc6,0xe6,0x7e,0xe,0xc6,0xee,0x7c,0x0,0x4c,0x5a,0x32,
};
static const BitmapCharRec ch227 = {7,14,-1,0,9,ch227data};
/* char: 0xe2 */
static const GLubyte ch226data[] = {
0x76,0xee,0xc6,0xc6,0xe6,0x7e,0xe,0xc6,0xee,0x7c,0x0,0x66,0x3c,0x18,
};
static const BitmapCharRec ch226 = {7,14,-1,0,9,ch226data};
/* char: 0xe1 */
static const GLubyte ch225data[] = {
0x76,0xee,0xc6,0xc6,0xe6,0x7e,0xe,0xc6,0xee,0x7c,0x0,0x30,0x18,0xc,
};
static const BitmapCharRec ch225 = {7,14,-1,0,9,ch225data};
/* char: 0xe0 */
static const GLubyte ch224data[] = {
0x76,0xee,0xc6,0xc6,0xe6,0x7e,0xe,0xc6,0xee,0x7c,0x0,0x18,0x30,0x60,
};
static const BitmapCharRec ch224 = {7,14,-1,0,9,ch224data};
/* char: 0xdf */
static const GLubyte ch223data[] = {
0xdc,0xde,0xc6,0xc6,0xc6,0xc6,0xdc,0xdc,0xc6,0xc6,0xc6,0xc6,0x7c,0x38,
};
static const BitmapCharRec ch223 = {7,14,-1,0,9,ch223data};
/* char: 0xde */
static const GLubyte ch222data[] = {
0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x0,0xff,0x80,0xc1,0xc0,0xc0,0xc0,0xc0,0xc0,
0xc1,0xc0,0xff,0x80,0xff,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,
};
static const BitmapCharRec ch222 = {10,14,-1,0,12,ch222data};
/* char: 0xdd */
static const GLubyte ch221data[] = {
0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0xf,0x0,0x19,0x80,
0x30,0xc0,0x30,0xc0,0x60,0x60,0x60,0x60,0xc0,0x30,0xc0,0x30,0x0,0x0,0x6,0x0,
0x3,0x0,0x1,0x80,
};
static const BitmapCharRec ch221 = {12,18,-1,0,14,ch221data};
/* char: 0xdc */
static const GLubyte ch220data[] = {
0x1f,0x0,0x7f,0xc0,0x60,0xc0,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,
0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0x0,0x0,0x19,0x80,
0x19,0x80,
};
static const BitmapCharRec ch220 = {11,17,-1,0,13,ch220data};
/* char: 0xdb */
static const GLubyte ch219data[] = {
0x1f,0x0,0x7f,0xc0,0x60,0xc0,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,
0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0x0,0x0,0x19,0x80,
0xf,0x0,0x6,0x0,
};
static const BitmapCharRec ch219 = {11,18,-1,0,13,ch219data};
/* char: 0xda */
static const GLubyte ch218data[] = {
0x1f,0x0,0x7f,0xc0,0x60,0xc0,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,
0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0x0,0x0,0xc,0x0,
0x6,0x0,0x3,0x0,
};
static const BitmapCharRec ch218 = {11,18,-1,0,13,ch218data};
/* char: 0xd9 */
static const GLubyte ch217data[] = {
0x1f,0x0,0x7f,0xc0,0x60,0xc0,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,
0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0x0,0x0,0x6,0x0,
0xc,0x0,0x18,0x0,
};
static const BitmapCharRec ch217 = {11,18,-1,0,13,ch217data};
/* char: 0xd8 */
static const GLubyte ch216data[] = {
0xc7,0xc0,0xff,0xf0,0x78,0x38,0x38,0x18,0x6c,0x1c,0x6e,0xc,0x67,0xc,0x63,0x8c,
0x61,0xcc,0x70,0xdc,0x30,0x78,0x38,0x38,0x1f,0xfc,0x7,0xcc,
};
static const BitmapCharRec ch216 = {14,14,0,0,15,ch216data};
/* char: 0xd7 */
static const GLubyte ch215data[] = {
0xc0,0xc0,0x61,0x80,0x33,0x0,0x1e,0x0,0xc,0x0,0x1e,0x0,0x33,0x0,0x61,0x80,
0xc0,0xc0,
};
static const BitmapCharRec ch215 = {10,9,0,0,10,ch215data};
/* char: 0xd6 */
static const GLubyte ch214data[] = {
0xf,0x80,0x3f,0xe0,0x70,0x70,0x60,0x30,0xe0,0x38,0xc0,0x18,0xc0,0x18,0xc0,0x18,
0xc0,0x18,0xe0,0x38,0x60,0x30,0x70,0x70,0x3f,0xe0,0xf,0x80,0x0,0x0,0xd,0x80,
0xd,0x80,
};
static const BitmapCharRec ch214 = {13,17,-1,0,15,ch214data};
/* char: 0xd5 */
static const GLubyte ch213data[] = {
0xf,0x80,0x3f,0xe0,0x70,0x70,0x60,0x30,0xe0,0x38,0xc0,0x18,0xc0,0x18,0xc0,0x18,
0xc0,0x18,0xe0,0x38,0x60,0x30,0x70,0x70,0x3f,0xe0,0xf,0x80,0x0,0x0,0x9,0x80,
0xb,0x40,0x6,0x40,
};
static const BitmapCharRec ch213 = {13,18,-1,0,15,ch213data};
/* char: 0xd4 */
static const GLubyte ch212data[] = {
0xf,0x80,0x3f,0xe0,0x70,0x70,0x60,0x30,0xe0,0x38,0xc0,0x18,0xc0,0x18,0xc0,0x18,
0xc0,0x18,0xe0,0x38,0x60,0x30,0x70,0x70,0x3f,0xe0,0xf,0x80,0x0,0x0,0xc,0xc0,
0x7,0x80,0x3,0x0,
};
static const BitmapCharRec ch212 = {13,18,-1,0,15,ch212data};
/* char: 0xd3 */
static const GLubyte ch211data[] = {
0xf,0x80,0x3f,0xe0,0x70,0x70,0x60,0x30,0xe0,0x38,0xc0,0x18,0xc0,0x18,0xc0,0x18,
0xc0,0x18,0xe0,0x38,0x60,0x30,0x70,0x70,0x3f,0xe0,0xf,0x80,0x0,0x0,0x3,0x0,
0x1,0x80,0x0,0xc0,
};
static const BitmapCharRec ch211 = {13,18,-1,0,15,ch211data};
/* char: 0xd2 */
static const GLubyte ch210data[] = {
0xf,0x80,0x3f,0xe0,0x70,0x70,0x60,0x30,0xe0,0x38,0xc0,0x18,0xc0,0x18,0xc0,0x18,
0xc0,0x18,0xe0,0x38,0x60,0x30,0x70,0x70,0x3f,0xe0,0xf,0x80,0x0,0x0,0x3,0x0,
0x6,0x0,0xc,0x0,
};
static const BitmapCharRec ch210 = {13,18,-1,0,15,ch210data};
/* char: 0xd1 */
static const GLubyte ch209data[] = {
0xc0,0x60,0xc0,0xe0,0xc1,0xe0,0xc1,0xe0,0xc3,0x60,0xc6,0x60,0xc6,0x60,0xcc,0x60,
0xcc,0x60,0xd8,0x60,0xd8,0x60,0xf0,0x60,0xe0,0x60,0xe0,0x60,0x0,0x0,0x13,0x0,
0x16,0x80,0xc,0x80,
};
static const BitmapCharRec ch209 = {11,18,-1,0,13,ch209data};
/* char: 0xd0 */
static const GLubyte ch208data[] = {
0x7f,0x80,0x7f,0xc0,0x60,0xe0,0x60,0x60,0x60,0x30,0x60,0x30,0xfc,0x30,0xfc,0x30,
0x60,0x30,0x60,0x30,0x60,0x60,0x60,0xe0,0x7f,0xc0,0x7f,0x80,
};
static const BitmapCharRec ch208 = {12,14,0,0,13,ch208data};
/* char: 0xcf */
static const GLubyte ch207data[] = {
0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x0,0xcc,
0xcc,
};
static const BitmapCharRec ch207 = {6,17,0,0,6,ch207data};
/* char: 0xce */
static const GLubyte ch206data[] = {
0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x0,0xcc,
0x78,0x30,
};
static const BitmapCharRec ch206 = {6,18,0,0,6,ch206data};
/* char: 0xcd */
static const GLubyte ch205data[] = {
0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x0,0xc0,
0x60,0x30,
};
static const BitmapCharRec ch205 = {4,18,-2,0,6,ch205data};
/* char: 0xcc */
static const GLubyte ch204data[] = {
0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x0,0x30,
0x60,0xc0,
};
static const BitmapCharRec ch204 = {4,18,0,0,6,ch204data};
/* char: 0xcb */
static const GLubyte ch203data[] = {
0xff,0x80,0xff,0x80,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x0,0xff,0x0,
0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x80,0xff,0x80,0x0,0x0,0x33,0x0,
0x33,0x0,
};
static const BitmapCharRec ch203 = {9,17,-1,0,11,ch203data};
/* char: 0xca */
static const GLubyte ch202data[] = {
0xff,0x80,0xff,0x80,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x0,0xff,0x0,
0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x80,0xff,0x80,0x0,0x0,0x33,0x0,
0x1e,0x0,0xc,0x0,
};
static const BitmapCharRec ch202 = {9,18,-1,0,11,ch202data};
/* char: 0xc9 */
static const GLubyte ch201data[] = {
0xff,0x80,0xff,0x80,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x0,0xff,0x0,
0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x80,0xff,0x80,0x0,0x0,0xc,0x0,
0x6,0x0,0x3,0x0,
};
static const BitmapCharRec ch201 = {9,18,-1,0,11,ch201data};
/* char: 0xc8 */
static const GLubyte ch200data[] = {
0xff,0x80,0xff,0x80,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x0,0xff,0x0,
0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x80,0xff,0x80,0x0,0x0,0xc,0x0,
0x18,0x0,0x30,0x0,
};
static const BitmapCharRec ch200 = {9,18,-1,0,11,ch200data};
/* char: 0xc7 */
static const GLubyte ch199data[] = {
0x1e,0x0,0x1b,0x0,0x3,0x0,0xe,0x0,0xf,0x80,0x3f,0xe0,0x70,0x70,0x60,0x30,
0xe0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xe0,0x0,0x60,0x30,0x70,0x70,
0x3f,0xe0,0xf,0x80,
};
static const BitmapCharRec ch199 = {12,18,-1,4,14,ch199data};
/* char: 0xc6 */
static const GLubyte ch198data[] = {
0xc1,0xff,0xc1,0xff,0x61,0x80,0x61,0x80,0x7f,0x80,0x3f,0x80,0x31,0xfe,0x31,0xfe,
0x19,0x80,0x19,0x80,0xd,0x80,0xd,0x80,0x7,0xff,0x7,0xff,
};
static const BitmapCharRec ch198 = {16,14,-1,0,18,ch198data};
/* char: 0xc5 */
static const GLubyte ch197data[] = {
0xc0,0x30,0xc0,0x30,0x60,0x60,0x60,0x60,0x7f,0xe0,0x3f,0xc0,0x30,0xc0,0x30,0xc0,
0x19,0x80,0x19,0x80,0xf,0x0,0xf,0x0,0x6,0x0,0x6,0x0,0xf,0x0,0x19,0x80,
0x19,0x80,0xf,0x0,
};
static const BitmapCharRec ch197 = {12,18,0,0,12,ch197data};
/* char: 0xc4 */
static const GLubyte ch196data[] = {
0xc0,0x30,0xc0,0x30,0x60,0x60,0x60,0x60,0x7f,0xe0,0x3f,0xc0,0x30,0xc0,0x30,0xc0,
0x19,0x80,0x19,0x80,0xf,0x0,0xf,0x0,0x6,0x0,0x6,0x0,0x0,0x0,0x19,0x80,
0x19,0x80,
};
static const BitmapCharRec ch196 = {12,17,0,0,12,ch196data};
/* char: 0xc3 */
static const GLubyte ch195data[] = {
0xc0,0x30,0xc0,0x30,0x60,0x60,0x60,0x60,0x7f,0xe0,0x3f,0xc0,0x30,0xc0,0x30,0xc0,
0x19,0x80,0x19,0x80,0xf,0x0,0xf,0x0,0x6,0x0,0x6,0x0,0x0,0x0,0x13,0x0,
0x16,0x80,0xc,0x80,
};
static const BitmapCharRec ch195 = {12,18,0,0,12,ch195data};
/* char: 0xc2 */
static const GLubyte ch194data[] = {
0xc0,0x30,0xc0,0x30,0x60,0x60,0x60,0x60,0x7f,0xe0,0x3f,0xc0,0x30,0xc0,0x30,0xc0,
0x19,0x80,0x19,0x80,0xf,0x0,0xf,0x0,0x6,0x0,0x6,0x0,0x0,0x0,0x19,0x80,
0xf,0x0,0x6,0x0,
};
static const BitmapCharRec ch194 = {12,18,0,0,12,ch194data};
/* char: 0xc1 */
static const GLubyte ch193data[] = {
0xc0,0x30,0xc0,0x30,0x60,0x60,0x60,0x60,0x7f,0xe0,0x3f,0xc0,0x30,0xc0,0x30,0xc0,
0x19,0x80,0x19,0x80,0xf,0x0,0xf,0x0,0x6,0x0,0x6,0x0,0x0,0x0,0x6,0x0,
0x3,0x0,0x1,0x80,
};
static const BitmapCharRec ch193 = {12,18,0,0,12,ch193data};
/* char: 0xc0 */
static const GLubyte ch192data[] = {
0xc0,0x30,0xc0,0x30,0x60,0x60,0x60,0x60,0x7f,0xe0,0x3f,0xc0,0x30,0xc0,0x30,0xc0,
0x19,0x80,0x19,0x80,0xf,0x0,0xf,0x0,0x6,0x0,0x6,0x0,0x0,0x0,0x6,0x0,
0xc,0x0,0x18,0x0,
};
static const BitmapCharRec ch192 = {12,18,0,0,12,ch192data};
/* char: 0xbf */
static const GLubyte ch191data[] = {
0x7c,0xfe,0xc6,0xc6,0xe0,0x70,0x38,0x18,0x18,0x18,0x0,0x0,0x18,0x18,
};
static const BitmapCharRec ch191 = {7,14,-1,4,10,ch191data};
/* char: 0xbe */
static const GLubyte ch190data[] = {
0x18,0x18,0x18,0x18,0xc,0xfc,0x6,0xd8,0x6,0x78,0x73,0x38,0xf9,0x18,0x99,0x88,
0x30,0xc0,0x30,0xc0,0x98,0x60,0xf8,0x30,0x70,0x30,
};
static const BitmapCharRec ch190 = {14,13,0,0,15,ch190data};
/* char: 0xbd */
static const GLubyte ch189data[] = {
0x30,0xf8,0x30,0xf8,0x18,0x60,0xc,0x30,0xc,0x18,0x66,0x98,0x62,0xf8,0x63,0x70,
0x61,0x80,0x61,0x80,0xe0,0xc0,0xe0,0x60,0x60,0x60,
};
static const BitmapCharRec ch189 = {13,13,-1,0,15,ch189data};
/* char: 0xbc */
static const GLubyte ch188data[] = {
0x30,0x30,0x30,0x30,0x19,0xf8,0xd,0xb0,0xc,0xf0,0x66,0x70,0x62,0x30,0x63,0x10,
0x61,0x80,0x61,0x80,0xe0,0xc0,0xe0,0x60,0x60,0x60,
};
static const BitmapCharRec ch188 = {13,13,-1,0,15,ch188data};
/* char: 0xbb */
static const GLubyte ch187data[] = {
0x90,0xd8,0x6c,0x36,0x36,0x6c,0xd8,0x90,
};
static const BitmapCharRec ch187 = {7,8,-1,-1,9,ch187data};
/* char: 0xba */
static const GLubyte ch186data[] = {
0xf8,0x0,0x70,0xd8,0x88,0x88,0xd8,0x70,
};
static const BitmapCharRec ch186 = {5,8,-1,-6,7,ch186data};
/* char: 0xb9 */
static const GLubyte ch185data[] = {
0x60,0x60,0x60,0x60,0x60,0xe0,0xe0,0x60,
};
static const BitmapCharRec ch185 = {3,8,-1,-5,6,ch185data};
/* char: 0xb8 */
static const GLubyte ch184data[] = {
0xf0,0xd8,0x18,0x70,0x60,
};
static const BitmapCharRec ch184 = {5,5,0,4,5,ch184data};
/* char: 0xb7 */
static const GLubyte ch183data[] = {
0xc0,0xc0,
};
static const BitmapCharRec ch183 = {2,2,-1,-4,4,ch183data};
/* char: 0xb6 */
static const GLubyte ch182data[] = {
0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x32,0x72,0xf2,0xf2,0xf2,0xf2,
0x72,0x3f,
};
static const BitmapCharRec ch182 = {8,18,-1,4,10,ch182data};
/* char: 0xb5 */
static const GLubyte ch181data[] = {
0xc0,0xc0,0xc0,0xc0,0xdb,0xff,0xe7,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,
};
static const BitmapCharRec ch181 = {8,14,-1,4,10,ch181data};
/* char: 0xb4 */
static const GLubyte ch180data[] = {
0xc0,0x60,0x30,
};
static const BitmapCharRec ch180 = {4,3,0,-11,4,ch180data};
/* char: 0xb3 */
static const GLubyte ch179data[] = {
0x70,0xf8,0x98,0x30,0x30,0x98,0xf8,0x70,
};
static const BitmapCharRec ch179 = {5,8,0,-5,6,ch179data};
/* char: 0xb2 */
static const GLubyte ch178data[] = {
0xf8,0xf8,0x60,0x30,0x18,0x98,0xf8,0x70,
};
static const BitmapCharRec ch178 = {5,8,0,-5,6,ch178data};
/* char: 0xb1 */
static const GLubyte ch177data[] = {
0xff,0xff,0x0,0x18,0x18,0x18,0xff,0xff,0x18,0x18,0x18,
};
static const BitmapCharRec ch177 = {8,11,-1,0,10,ch177data};
/* char: 0xb0 */
static const GLubyte ch176data[] = {
0x70,0xd8,0x88,0xd8,0x70,
};
static const BitmapCharRec ch176 = {5,5,-1,-8,7,ch176data};
/* char: 0xaf */
static const GLubyte ch175data[] = {
0xf8,
};
static const BitmapCharRec ch175 = {5,1,0,-12,5,ch175data};
/* char: 0xae */
static const GLubyte ch174data[] = {
0xf,0x80,0x30,0x60,0x40,0x10,0x48,0x50,0x88,0x88,0x89,0x8,0x8f,0x88,0x88,0x48,
0x88,0x48,0x4f,0x90,0x40,0x10,0x30,0x60,0xf,0x80,
};
static const BitmapCharRec ch174 = {13,13,-1,0,14,ch174data};
/* char: 0xad */
static const GLubyte ch173data[] = {
0xf8,0xf8,
};
static const BitmapCharRec ch173 = {5,2,-1,-4,7,ch173data};
/* char: 0xac */
static const GLubyte ch172data[] = {
0x1,0x80,0x1,0x80,0x1,0x80,0xff,0x80,0xff,0x80,
};
static const BitmapCharRec ch172 = {9,5,-1,-3,11,ch172data};
/* char: 0xab */
static const GLubyte ch171data[] = {
0x12,0x36,0x6c,0xd8,0xd8,0x6c,0x36,0x12,
};
static const BitmapCharRec ch171 = {7,8,-1,-1,9,ch171data};
/* char: 0xaa */
static const GLubyte ch170data[] = {
0xf8,0x0,0x68,0xd8,0x48,0x38,0xc8,0x70,
};
static const BitmapCharRec ch170 = {5,8,-1,-6,7,ch170data};
/* char: 0xa9 */
static const GLubyte ch169data[] = {
0xf,0x80,0x30,0x60,0x40,0x10,0x47,0x10,0x88,0x88,0x90,0x8,0x90,0x8,0x90,0x8,
0x88,0x88,0x47,0x10,0x40,0x10,0x30,0x60,0xf,0x80,
};
static const BitmapCharRec ch169 = {13,13,-1,0,15,ch169data};
/* char: 0xa8 */
static const GLubyte ch168data[] = {
0xd8,0xd8,
};
static const BitmapCharRec ch168 = {5,2,0,-11,6,ch168data};
/* char: 0xa7 */
static const GLubyte ch167data[] = {
0x3c,0x7e,0xc3,0xc3,0x7,0xe,0x3e,0x73,0xe3,0xc3,0xc7,0x6e,0x7c,0xf0,0xc3,0xc3,
0x7e,0x3c,
};
static const BitmapCharRec ch167 = {8,18,-1,4,10,ch167data};
/* char: 0xa6 */
static const GLubyte ch166data[] = {
0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x0,0x0,0x0,0x0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
0xc0,
};
static const BitmapCharRec ch166 = {2,17,-1,3,4,ch166data};
/* char: 0xa5 */
static const GLubyte ch165data[] = {
0x18,0x18,0x18,0x18,0xff,0x18,0xff,0x3c,0x66,0x66,0x66,0xc3,0xc3,
};
static const BitmapCharRec ch165 = {8,13,-1,0,10,ch165data};
/* char: 0xa4 */
static const GLubyte ch164data[] = {
0xc3,0xff,0x66,0x66,0x66,0xff,0xc3,
};
static const BitmapCharRec ch164 = {8,7,-1,-3,10,ch164data};
/* char: 0xa3 */
static const GLubyte ch163data[] = {
0xdf,0x0,0xff,0x80,0x60,0x80,0x30,0x0,0x18,0x0,0x18,0x0,0x7e,0x0,0x30,0x0,
0x60,0x0,0x61,0x80,0x61,0x80,0x3f,0x0,0x1e,0x0,
};
static const BitmapCharRec ch163 = {9,13,0,0,10,ch163data};
/* char: 0xa2 */
static const GLubyte ch162data[] = {
0x10,0x10,0x3e,0x7f,0x6b,0xc8,0xc8,0xc8,0xc8,0x6b,0x7f,0x3e,0x4,0x4,
};
static const BitmapCharRec ch162 = {8,14,-1,2,10,ch162data};
/* char: 0xa1 */
static const GLubyte ch161data[] = {
0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x40,0x40,0x0,0x0,0xc0,0xc0,
};
static const BitmapCharRec ch161 = {2,14,-2,4,6,ch161data};
/* char: 0xa0 */
#ifdef _WIN32
/* XXX Work around Microsoft OpenGL 1.1 bug where glBitmap with
a height or width of zero does not advance the raster position
as specified by OpenGL. (Cosmo OpenGL does not have this bug.) */
static const GLubyte ch160data[] = { 0x0 };
static const BitmapCharRec ch160 = {1,1,0,0,5,ch160data};
#else
static const BitmapCharRec ch160 = {0,0,0,0,5,0};
#endif
/* char: 0x7e '~' */
static const GLubyte ch126data[] = {
0xcc,0x7e,0x33,
};
static const BitmapCharRec ch126 = {8,3,-1,-4,10,ch126data};
/* char: 0x7d '}' */
static const GLubyte ch125data[] = {
0xc0,0x60,0x30,0x30,0x30,0x30,0x30,0x30,0x18,0xc,0x18,0x30,0x30,0x30,0x30,0x30,
0x60,0xc0,
};
static const BitmapCharRec ch125 = {6,18,0,4,6,ch125data};
/* char: 0x7c '|' */
static const GLubyte ch124data[] = {
0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
0xc0,0xc0,
};
static const BitmapCharRec ch124 = {2,18,-1,4,4,ch124data};
/* char: 0x7b '{' */
static const GLubyte ch123data[] = {
0xc,0x18,0x30,0x30,0x30,0x30,0x30,0x30,0x60,0xc0,0x60,0x30,0x30,0x30,0x30,0x30,
0x18,0xc,
};
static const BitmapCharRec ch123 = {6,18,0,4,6,ch123data};
/* char: 0x7a 'z' */
static const GLubyte ch122data[] = {
0xfe,0xfe,0xc0,0x60,0x30,0x18,0xc,0x6,0xfe,0xfe,
};
static const BitmapCharRec ch122 = {7,10,-1,0,9,ch122data};
/* char: 0x79 'y' */
static const GLubyte ch121data[] = {
0x70,0x70,0x18,0x18,0x18,0x18,0x3c,0x24,0x66,0x66,0x66,0xc3,0xc3,0xc3,
};
static const BitmapCharRec ch121 = {8,14,-1,4,10,ch121data};
/* char: 0x78 'x' */
static const GLubyte ch120data[] = {
0xc3,0xe7,0x66,0x3c,0x18,0x18,0x3c,0x66,0xe7,0xc3,
};
static const BitmapCharRec ch120 = {8,10,-1,0,10,ch120data};
/* char: 0x77 'w' */
static const GLubyte ch119data[] = {
0x19,0x80,0x19,0x80,0x39,0xc0,0x29,0x40,0x69,0x60,0x66,0x60,0x66,0x60,0xc6,0x30,
0xc6,0x30,0xc6,0x30,
};
static const BitmapCharRec ch119 = {12,10,-1,0,14,ch119data};
/* char: 0x76 'v' */
static const GLubyte ch118data[] = {
0x18,0x18,0x3c,0x24,0x66,0x66,0x66,0xc3,0xc3,0xc3,
};
static const BitmapCharRec ch118 = {8,10,-1,0,10,ch118data};
/* char: 0x75 'u' */
static const GLubyte ch117data[] = {
0x73,0xfb,0xc7,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,
};
static const BitmapCharRec ch117 = {8,10,-1,0,10,ch117data};
/* char: 0x74 't' */
static const GLubyte ch116data[] = {
0x18,0x38,0x30,0x30,0x30,0x30,0x30,0x30,0xfc,0xfc,0x30,0x30,0x30,
};
static const BitmapCharRec ch116 = {6,13,0,0,6,ch116data};
/* char: 0x73 's' */
static const GLubyte ch115data[] = {
0x78,0xfc,0xc6,0x6,0x3e,0xfc,0xc0,0xc6,0x7e,0x3c,
};
static const BitmapCharRec ch115 = {7,10,-1,0,9,ch115data};
/* char: 0x72 'r' */
static const GLubyte ch114data[] = {
0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xe0,0xd8,0xd8,
};
static const BitmapCharRec ch114 = {5,10,-1,0,6,ch114data};
/* char: 0x71 'q' */
static const GLubyte ch113data[] = {
0x1,0x80,0x1,0x80,0x1,0x80,0x1,0x80,0x3d,0x80,0x7f,0x80,0x63,0x80,0xc1,0x80,
0xc1,0x80,0xc1,0x80,0xc1,0x80,0x63,0x80,0x7f,0x80,0x3d,0x80,
};
static const BitmapCharRec ch113 = {9,14,-1,4,11,ch113data};
/* char: 0x70 'p' */
static const GLubyte ch112data[] = {
0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xde,0x0,0xff,0x0,0xe3,0x0,0xc1,0x80,
0xc1,0x80,0xc1,0x80,0xc1,0x80,0xe3,0x0,0xff,0x0,0xde,0x0,
};
static const BitmapCharRec ch112 = {9,14,-1,4,11,ch112data};
/* char: 0x6f 'o' */
static const GLubyte ch111data[] = {
0x3e,0x0,0x7f,0x0,0x63,0x0,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0x63,0x0,
0x7f,0x0,0x3e,0x0,
};
static const BitmapCharRec ch111 = {9,10,-1,0,11,ch111data};
/* char: 0x6e 'n' */
static const GLubyte ch110data[] = {
0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xe3,0xdf,0xce,
};
static const BitmapCharRec ch110 = {8,10,-1,0,10,ch110data};
/* char: 0x6d 'm' */
static const GLubyte ch109data[] = {
0xc6,0x30,0xc6,0x30,0xc6,0x30,0xc6,0x30,0xc6,0x30,0xc6,0x30,0xc6,0x30,0xe7,0x30,
0xde,0xf0,0xcc,0x60,
};
static const BitmapCharRec ch109 = {12,10,-1,0,14,ch109data};
/* char: 0x6c 'l' */
static const GLubyte ch108data[] = {
0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
};
static const BitmapCharRec ch108 = {2,14,-1,0,4,ch108data};
/* char: 0x6b 'k' */
static const GLubyte ch107data[] = {
0xc7,0xc6,0xce,0xcc,0xd8,0xf8,0xf0,0xd8,0xcc,0xc6,0xc0,0xc0,0xc0,0xc0,
};
static const BitmapCharRec ch107 = {8,14,-1,0,9,ch107data};
/* char: 0x6a 'j' */
static const GLubyte ch106data[] = {
0xe0,0xf0,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x0,0x0,
0x30,0x30,
};
static const BitmapCharRec ch106 = {4,18,1,4,4,ch106data};
/* char: 0x69 'i' */
static const GLubyte ch105data[] = {
0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x0,0x0,0xc0,0xc0,
};
static const BitmapCharRec ch105 = {2,14,-1,0,4,ch105data};
/* char: 0x68 'h' */
static const GLubyte ch104data[] = {
0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xe3,0xdf,0xce,0xc0,0xc0,0xc0,0xc0,
};
static const BitmapCharRec ch104 = {8,14,-1,0,10,ch104data};
/* char: 0x67 'g' */
static const GLubyte ch103data[] = {
0x1c,0x0,0x7f,0x0,0x63,0x0,0x1,0x80,0x3d,0x80,0x7f,0x80,0x63,0x80,0xc1,0x80,
0xc1,0x80,0xc1,0x80,0xc1,0x80,0x61,0x80,0x7f,0x80,0x3d,0x80,
};
static const BitmapCharRec ch103 = {9,14,-1,4,11,ch103data};
/* char: 0x66 'f' */
static const GLubyte ch102data[] = {
0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0xfc,0xfc,0x30,0x30,0x3c,0x1c,
};
static const BitmapCharRec ch102 = {6,14,0,0,6,ch102data};
/* char: 0x65 'e' */
static const GLubyte ch101data[] = {
0x3c,0x7f,0xe3,0xc0,0xc0,0xff,0xc3,0xc3,0x7e,0x3c,
};
static const BitmapCharRec ch101 = {8,10,-1,0,10,ch101data};
/* char: 0x64 'd' */
static const GLubyte ch100data[] = {
0x3d,0x80,0x7f,0x80,0x63,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0x63,0x80,
0x7f,0x80,0x3d,0x80,0x1,0x80,0x1,0x80,0x1,0x80,0x1,0x80,
};
static const BitmapCharRec ch100 = {9,14,-1,0,11,ch100data};
/* char: 0x63 'c' */
static const GLubyte ch99data[] = {
0x3e,0x7f,0x63,0xc0,0xc0,0xc0,0xc0,0x63,0x7f,0x3e,
};
static const BitmapCharRec ch99 = {8,10,-1,0,10,ch99data};
/* char: 0x62 'b' */
static const GLubyte ch98data[] = {
0xde,0x0,0xff,0x0,0xe3,0x0,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xe3,0x0,
0xff,0x0,0xde,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,
};
static const BitmapCharRec ch98 = {9,14,-1,0,11,ch98data};
/* char: 0x61 'a' */
static const GLubyte ch97data[] = {
0x76,0xee,0xc6,0xc6,0xe6,0x7e,0xe,0xc6,0xee,0x7c,
};
static const BitmapCharRec ch97 = {7,10,-1,0,9,ch97data};
/* char: 0x60 '`' */
static const GLubyte ch96data[] = {
0xc0,0xc0,0x80,0x80,0x40,
};
static const BitmapCharRec ch96 = {2,5,-1,-9,4,ch96data};
/* char: 0x5f '_' */
static const GLubyte ch95data[] = {
0xff,0xc0,0xff,0xc0,
};
static const BitmapCharRec ch95 = {10,2,0,4,10,ch95data};
/* char: 0x5e '^' */
static const GLubyte ch94data[] = {
0x82,0xc6,0x6c,0x38,0x10,
};
static const BitmapCharRec ch94 = {7,5,-1,-8,9,ch94data};
/* char: 0x5d ']' */
static const GLubyte ch93data[] = {
0xf0,0xf0,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
0xf0,0xf0,
};
static const BitmapCharRec ch93 = {4,18,0,4,5,ch93data};
/* char: 0x5c '\' */
static const GLubyte ch92data[] = {
0x18,0x18,0x10,0x10,0x30,0x30,0x20,0x20,0x60,0x60,0x40,0x40,0xc0,0xc0,
};
static const BitmapCharRec ch92 = {5,14,0,0,5,ch92data};
/* char: 0x5b '[' */
static const GLubyte ch91data[] = {
0xf0,0xf0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
0xf0,0xf0,
};
static const BitmapCharRec ch91 = {4,18,-1,4,5,ch91data};
/* char: 0x5a 'Z' */
static const GLubyte ch90data[] = {
0xff,0xc0,0xff,0xc0,0xc0,0x0,0x60,0x0,0x30,0x0,0x18,0x0,0x1c,0x0,0xc,0x0,
0x6,0x0,0x3,0x0,0x1,0x80,0x0,0xc0,0xff,0xc0,0xff,0xc0,
};
static const BitmapCharRec ch90 = {10,14,-1,0,12,ch90data};
/* char: 0x59 'Y' */
static const GLubyte ch89data[] = {
0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0xf,0x0,0x19,0x80,
0x30,0xc0,0x30,0xc0,0x60,0x60,0x60,0x60,0xc0,0x30,0xc0,0x30,
};
static const BitmapCharRec ch89 = {12,14,-1,0,14,ch89data};
/* char: 0x58 'X' */
static const GLubyte ch88data[] = {
0xc0,0x60,0xe0,0xe0,0x60,0xc0,0x71,0xc0,0x31,0x80,0x1b,0x0,0xe,0x0,0xe,0x0,
0x1b,0x0,0x31,0x80,0x71,0xc0,0x60,0xc0,0xe0,0xe0,0xc0,0x60,
};
static const BitmapCharRec ch88 = {11,14,-1,0,13,ch88data};
/* char: 0x57 'W' */
static const GLubyte ch87data[] = {
0x18,0x18,0x18,0x18,0x1c,0x38,0x34,0x2c,0x36,0x6c,0x36,0x6c,0x66,0x66,0x66,0x66,
0x62,0x46,0x63,0xc6,0xc3,0xc3,0xc1,0x83,0xc1,0x83,0xc1,0x83,
};
static const BitmapCharRec ch87 = {16,14,-1,0,18,ch87data};
/* char: 0x56 'V' */
static const GLubyte ch86data[] = {
0x6,0x0,0xf,0x0,0xf,0x0,0x19,0x80,0x19,0x80,0x19,0x80,0x30,0xc0,0x30,0xc0,
0x30,0xc0,0x60,0x60,0x60,0x60,0x60,0x60,0xc0,0x30,0xc0,0x30,
};
static const BitmapCharRec ch86 = {12,14,-1,0,14,ch86data};
/* char: 0x55 'U' */
static const GLubyte ch85data[] = {
0x1f,0x0,0x7f,0xc0,0x60,0xc0,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,
0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,
};
static const BitmapCharRec ch85 = {11,14,-1,0,13,ch85data};
/* char: 0x54 'T' */
static const GLubyte ch84data[] = {
0xc,0x0,0xc,0x0,0xc,0x0,0xc,0x0,0xc,0x0,0xc,0x0,0xc,0x0,0xc,0x0,
0xc,0x0,0xc,0x0,0xc,0x0,0xc,0x0,0xff,0xc0,0xff,0xc0,
};
static const BitmapCharRec ch84 = {10,14,-1,0,12,ch84data};
/* char: 0x53 'S' */
static const GLubyte ch83data[] = {
0x3f,0x0,0x7f,0xc0,0xe0,0xe0,0xc0,0x60,0x0,0x60,0x0,0xe0,0x3,0xc0,0x1f,0x0,
0x7c,0x0,0xe0,0x0,0xc0,0x60,0xe0,0xe0,0x7f,0xc0,0x1f,0x0,
};
static const BitmapCharRec ch83 = {11,14,-1,0,13,ch83data};
/* char: 0x52 'R' */
static const GLubyte ch82data[] = {
0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc1,0x80,0xc1,0x80,0xff,0x0,0xff,0x80,
0xc1,0xc0,0xc0,0xc0,0xc0,0xc0,0xc1,0xc0,0xff,0x80,0xff,0x0,
};
static const BitmapCharRec ch82 = {10,14,-1,0,12,ch82data};
/* char: 0x51 'Q' */
static const GLubyte ch81data[] = {
0x0,0x30,0xf,0xb0,0x3f,0xe0,0x70,0xf0,0x61,0xb0,0xe1,0xb8,0xc0,0x18,0xc0,0x18,
0xc0,0x18,0xc0,0x18,0xe0,0x38,0x60,0x30,0x70,0x70,0x3f,0xe0,0xf,0x80,
};
static const BitmapCharRec ch81 = {13,15,-1,1,15,ch81data};
/* char: 0x50 'P' */
static const GLubyte ch80data[] = {
0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x0,0xff,0x80,
0xc1,0xc0,0xc0,0xc0,0xc0,0xc0,0xc1,0xc0,0xff,0x80,0xff,0x0,
};
static const BitmapCharRec ch80 = {10,14,-1,0,12,ch80data};
/* char: 0x4f 'O' */
static const GLubyte ch79data[] = {
0xf,0x80,0x3f,0xe0,0x70,0x70,0x60,0x30,0xe0,0x38,0xc0,0x18,0xc0,0x18,0xc0,0x18,
0xc0,0x18,0xe0,0x38,0x60,0x30,0x70,0x70,0x3f,0xe0,0xf,0x80,
};
static const BitmapCharRec ch79 = {13,14,-1,0,15,ch79data};
/* char: 0x4e 'N' */
static const GLubyte ch78data[] = {
0xc0,0x60,0xc0,0xe0,0xc1,0xe0,0xc1,0xe0,0xc3,0x60,0xc6,0x60,0xc6,0x60,0xcc,0x60,
0xcc,0x60,0xd8,0x60,0xf0,0x60,0xf0,0x60,0xe0,0x60,0xc0,0x60,
};
static const BitmapCharRec ch78 = {11,14,-1,0,13,ch78data};
/* char: 0x4d 'M' */
static const GLubyte ch77data[] = {
0xc3,0xc,0xc3,0xc,0xc7,0x8c,0xc4,0x8c,0xcc,0xcc,0xcc,0xcc,0xd8,0x6c,0xd8,0x6c,
0xf0,0x3c,0xf0,0x3c,0xe0,0x1c,0xe0,0x1c,0xc0,0xc,0xc0,0xc,
};
static const BitmapCharRec ch77 = {14,14,-1,0,16,ch77data};
/* char: 0x4c 'L' */
static const GLubyte ch76data[] = {
0xff,0xff,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
};
static const BitmapCharRec ch76 = {8,14,-1,0,10,ch76data};
/* char: 0x4b 'K' */
static const GLubyte ch75data[] = {
0xc0,0x70,0xc0,0xe0,0xc1,0xc0,0xc3,0x80,0xc7,0x0,0xce,0x0,0xfc,0x0,0xf8,0x0,
0xdc,0x0,0xce,0x0,0xc7,0x0,0xc3,0x80,0xc1,0xc0,0xc0,0xe0,
};
static const BitmapCharRec ch75 = {12,14,-1,0,13,ch75data};
/* char: 0x4a 'J' */
static const GLubyte ch74data[] = {
0x3c,0x7e,0xe7,0xc3,0xc3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,
};
static const BitmapCharRec ch74 = {8,14,-1,0,10,ch74data};
/* char: 0x49 'I' */
static const GLubyte ch73data[] = {
0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
};
static const BitmapCharRec ch73 = {2,14,-2,0,6,ch73data};
/* char: 0x48 'H' */
static const GLubyte ch72data[] = {
0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xff,0xe0,0xff,0xe0,
0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,
};
static const BitmapCharRec ch72 = {11,14,-1,0,13,ch72data};
/* char: 0x47 'G' */
static const GLubyte ch71data[] = {
0xf,0xb0,0x3f,0xf0,0x70,0x70,0x60,0x30,0xe0,0x30,0xc1,0xf0,0xc1,0xf0,0xc0,0x0,
0xc0,0x0,0xe0,0x30,0x60,0x30,0x70,0x70,0x3f,0xe0,0xf,0x80,
};
static const BitmapCharRec ch71 = {12,14,-1,0,14,ch71data};
/* char: 0x46 'F' */
static const GLubyte ch70data[] = {
0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x0,0xff,0x0,
0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x80,0xff,0x80,
};
static const BitmapCharRec ch70 = {9,14,-1,0,11,ch70data};
/* char: 0x45 'E' */
static const GLubyte ch69data[] = {
0xff,0x80,0xff,0x80,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x0,0xff,0x0,
0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x80,0xff,0x80,
};
static const BitmapCharRec ch69 = {9,14,-1,0,11,ch69data};
/* char: 0x44 'D' */
static const GLubyte ch68data[] = {
0xff,0x0,0xff,0x80,0xc1,0xc0,0xc0,0xc0,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,
0xc0,0x60,0xc0,0x60,0xc0,0xc0,0xc1,0xc0,0xff,0x80,0xff,0x0,
};
static const BitmapCharRec ch68 = {11,14,-1,0,13,ch68data};
/* char: 0x43 'C' */
static const GLubyte ch67data[] = {
0xf,0x80,0x3f,0xe0,0x70,0x70,0x60,0x30,0xe0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,
0xc0,0x0,0xe0,0x0,0x60,0x30,0x70,0x70,0x3f,0xe0,0xf,0x80,
};
static const BitmapCharRec ch67 = {12,14,-1,0,14,ch67data};
/* char: 0x42 'B' */
static const GLubyte ch66data[] = {
0xff,0x80,0xff,0xc0,0xc0,0xe0,0xc0,0x60,0xc0,0x60,0xc0,0xe0,0xff,0xc0,0xff,0x80,
0xc1,0x80,0xc0,0xc0,0xc0,0xc0,0xc1,0xc0,0xff,0x80,0xff,0x0,
};
static const BitmapCharRec ch66 = {11,14,-1,0,13,ch66data};
/* char: 0x41 'A' */
static const GLubyte ch65data[] = {
0xc0,0x30,0xc0,0x30,0x60,0x60,0x60,0x60,0x7f,0xe0,0x3f,0xc0,0x30,0xc0,0x30,0xc0,
0x19,0x80,0x19,0x80,0xf,0x0,0xf,0x0,0x6,0x0,0x6,0x0,
};
static const BitmapCharRec ch65 = {12,14,0,0,12,ch65data};
/* char: 0x40 '@' */
static const GLubyte ch64data[] = {
0x7,0xe0,0x1f,0xf0,0x38,0x0,0x70,0x0,0x67,0x70,0xcf,0xf8,0xcc,0xcc,0xcc,0x66,
0xcc,0x66,0xcc,0x63,0xc6,0x33,0x67,0x73,0x63,0xb3,0x30,0x6,0x1c,0xe,0xf,0xfc,
0x3,0xf0,
};
static const BitmapCharRec ch64 = {16,17,-1,3,18,ch64data};
/* char: 0x3f '?' */
static const GLubyte ch63data[] = {
0x30,0x30,0x0,0x0,0x30,0x30,0x30,0x38,0x1c,0xe,0xc6,0xc6,0xfe,0x7c,
};
static const BitmapCharRec ch63 = {7,14,-1,0,10,ch63data};
/* char: 0x3e '>' */
static const GLubyte ch62data[] = {
0xc0,0xf0,0x3c,0xe,0x3,0xe,0x3c,0xf0,0xc0,
};
static const BitmapCharRec ch62 = {8,9,-1,0,10,ch62data};
/* char: 0x3d '=' */
static const GLubyte ch61data[] = {
0xfe,0xfe,0x0,0x0,0xfe,0xfe,
};
static const BitmapCharRec ch61 = {7,6,-2,-2,11,ch61data};
/* char: 0x3c '<' */
static const GLubyte ch60data[] = {
0x3,0xf,0x3c,0x70,0xc0,0x70,0x3c,0xf,0x3,
};
static const BitmapCharRec ch60 = {8,9,-1,0,10,ch60data};
/* char: 0x3b ';' */
static const GLubyte ch59data[] = {
0x80,0x40,0x40,0xc0,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0xc0,
};
static const BitmapCharRec ch59 = {2,13,-1,3,5,ch59data};
/* char: 0x3a ':' */
static const GLubyte ch58data[] = {
0xc0,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0xc0,
};
static const BitmapCharRec ch58 = {2,10,-1,0,5,ch58data};
/* char: 0x39 '9' */
static const GLubyte ch57data[] = {
0x7c,0xfe,0xc6,0x3,0x3,0x3b,0x7f,0xc3,0xc3,0xc3,0xc7,0x7e,0x3c,
};
static const BitmapCharRec ch57 = {8,13,-1,0,10,ch57data};
/* char: 0x38 '8' */
static const GLubyte ch56data[] = {
0x3c,0x7e,0xe7,0xc3,0xc3,0x66,0x7e,0x66,0xc3,0xc3,0xe7,0x7e,0x3c,
};
static const BitmapCharRec ch56 = {8,13,-1,0,10,ch56data};
/* char: 0x37 '7' */
static const GLubyte ch55data[] = {
0x60,0x60,0x30,0x30,0x30,0x18,0x18,0xc,0xc,0x6,0x3,0xff,0xff,
};
static const BitmapCharRec ch55 = {8,13,-1,0,10,ch55data};
/* char: 0x36 '6' */
static const GLubyte ch54data[] = {
0x3c,0x7e,0xe3,0xc3,0xc3,0xc3,0xfe,0xdc,0xc0,0xc0,0x63,0x7f,0x3c,
};
static const BitmapCharRec ch54 = {8,13,-1,0,10,ch54data};
/* char: 0x35 '5' */
static const GLubyte ch53data[] = {
0x7c,0xfe,0xc7,0xc3,0x3,0x3,0xc7,0xfe,0xfc,0xc0,0xc0,0xfe,0xfe,
};
static const BitmapCharRec ch53 = {8,13,-1,0,10,ch53data};
/* char: 0x34 '4' */
static const GLubyte ch52data[] = {
0x3,0x0,0x3,0x0,0x3,0x0,0xff,0x80,0xff,0x80,0xc3,0x0,0x63,0x0,0x33,0x0,
0x33,0x0,0x1b,0x0,0xf,0x0,0x7,0x0,0x3,0x0,
};
static const BitmapCharRec ch52 = {9,13,-1,0,10,ch52data};
/* char: 0x33 '3' */
static const GLubyte ch51data[] = {
0x3c,0x7e,0xc7,0xc3,0x3,0x7,0x1e,0x1c,0x6,0xc3,0xc3,0x7e,0x3c,
};
static const BitmapCharRec ch51 = {8,13,-1,0,10,ch51data};
/* char: 0x32 '2' */
static const GLubyte ch50data[] = {
0xff,0xff,0xc0,0xe0,0x70,0x38,0x1c,0xe,0x7,0x3,0xc3,0xfe,0x3c,
};
static const BitmapCharRec ch50 = {8,13,-1,0,10,ch50data};
/* char: 0x31 '1' */
static const GLubyte ch49data[] = {
0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xf8,0xf8,0x18,
};
static const BitmapCharRec ch49 = {5,13,-2,0,10,ch49data};
/* char: 0x30 '0' */
static const GLubyte ch48data[] = {
0x3c,0x7e,0x66,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0x66,0x7e,0x3c,
};
static const BitmapCharRec ch48 = {8,13,-1,0,10,ch48data};
/* char: 0x2f '/' */
static const GLubyte ch47data[] = {
0xc0,0xc0,0x40,0x40,0x60,0x60,0x20,0x20,0x30,0x30,0x10,0x10,0x18,0x18,
};
static const BitmapCharRec ch47 = {5,14,0,0,5,ch47data};
/* char: 0x2e '.' */
static const GLubyte ch46data[] = {
0xc0,0xc0,
};
static const BitmapCharRec ch46 = {2,2,-1,0,5,ch46data};
/* char: 0x2d '-' */
static const GLubyte ch45data[] = {
0xff,0xff,
};
static const BitmapCharRec ch45 = {8,2,-1,-4,11,ch45data};
/* char: 0x2c ',' */
static const GLubyte ch44data[] = {
0x80,0x40,0x40,0xc0,0xc0,
};
static const BitmapCharRec ch44 = {2,5,-1,3,5,ch44data};
/* char: 0x2b '+' */
static const GLubyte ch43data[] = {
0x18,0x18,0x18,0x18,0xff,0xff,0x18,0x18,0x18,0x18,
};
static const BitmapCharRec ch43 = {8,10,-1,0,10,ch43data};
/* char: 0x2a '*' */
static const GLubyte ch42data[] = {
0x88,0x70,0x70,0xf8,0x20,0x20,
};
static const BitmapCharRec ch42 = {5,6,-1,-8,7,ch42data};
/* char: 0x29 ')' */
static const GLubyte ch41data[] = {
0x80,0xc0,0x60,0x60,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x60,0x60,
0xc0,0x80,
};
static const BitmapCharRec ch41 = {4,18,-1,4,6,ch41data};
/* char: 0x28 '(' */
static const GLubyte ch40data[] = {
0x10,0x30,0x60,0x60,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x60,0x60,
0x30,0x10,
};
static const BitmapCharRec ch40 = {4,18,-1,4,6,ch40data};
/* char: 0x27 ''' */
static const GLubyte ch39data[] = {
0x80,0x40,0x40,0xc0,0xc0,
};
static const BitmapCharRec ch39 = {2,5,-1,-9,4,ch39data};
/* char: 0x26 '&' */
static const GLubyte ch38data[] = {
0x3c,0x70,0x7e,0xe0,0xe7,0xc0,0xc3,0x80,0xc3,0xc0,0xc6,0xc0,0xee,0xc0,0x7c,0x0,
0x3c,0x0,0x66,0x0,0x66,0x0,0x7e,0x0,0x3c,0x0,
};
static const BitmapCharRec ch38 = {12,13,-1,0,13,ch38data};
/* char: 0x25 '%' */
static const GLubyte ch37data[] = {
0x18,0x78,0x18,0xfc,0xc,0xcc,0xc,0xcc,0x6,0xfc,0x6,0x78,0x3,0x0,0x7b,0x0,
0xfd,0x80,0xcd,0x80,0xcc,0xc0,0xfc,0xc0,0x78,0x60,
};
static const BitmapCharRec ch37 = {14,13,-1,0,16,ch37data};
/* char: 0x24 '$' */
static const GLubyte ch36data[] = {
0x8,0x0,0x8,0x0,0x3e,0x0,0x7f,0x0,0xeb,0x80,0xc9,0x80,0x9,0x80,0xf,0x0,
0x3e,0x0,0x78,0x0,0xe8,0x0,0xc8,0x0,0xcb,0x0,0x7f,0x0,0x3e,0x0,0x8,0x0,
};
static const BitmapCharRec ch36 = {9,16,-1,2,10,ch36data};
/* char: 0x23 '#' */
static const GLubyte ch35data[] = {
0x24,0x0,0x24,0x0,0x24,0x0,0xff,0x80,0xff,0x80,0x12,0x0,0x12,0x0,0x12,0x0,
0x7f,0xc0,0x7f,0xc0,0x9,0x0,0x9,0x0,0x9,0x0,
};
static const BitmapCharRec ch35 = {10,13,0,0,10,ch35data};
/* char: 0x22 '"' */
static const GLubyte ch34data[] = {
0x90,0x90,0xd8,0xd8,0xd8,
};
static const BitmapCharRec ch34 = {5,5,0,-9,5,ch34data};
/* char: 0x21 '!' */
static const GLubyte ch33data[] = {
0xc0,0xc0,0x0,0x0,0x80,0x80,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
};
static const BitmapCharRec ch33 = {2,14,-2,0,6,ch33data};
/* char: 0x20 ' ' */
#ifdef _WIN32
/* XXX Work around Microsoft OpenGL 1.1 bug where glBitmap with
a height or width of zero does not advance the raster position
as specified by OpenGL. (Cosmo OpenGL does not have this bug.) */
static const GLubyte ch32data[] = { 0x0 };
static const BitmapCharRec ch32 = {1,1,0,0,5,ch32data};
#else
static const BitmapCharRec ch32 = {0,0,0,0,5,0};
#endif
static const BitmapCharRec * const chars[] = {
&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,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
&ch160,
&ch161,
&ch162,
&ch163,
&ch164,
&ch165,
&ch166,
&ch167,
&ch168,
&ch169,
&ch170,
&ch171,
&ch172,
&ch173,
&ch174,
&ch175,
&ch176,
&ch177,
&ch178,
&ch179,
&ch180,
&ch181,
&ch182,
&ch183,
&ch184,
&ch185,
&ch186,
&ch187,
&ch188,
&ch189,
&ch190,
&ch191,
&ch192,
&ch193,
&ch194,
&ch195,
&ch196,
&ch197,
&ch198,
&ch199,
&ch200,
&ch201,
&ch202,
&ch203,
&ch204,
&ch205,
&ch206,
&ch207,
&ch208,
&ch209,
&ch210,
&ch211,
&ch212,
&ch213,
&ch214,
&ch215,
&ch216,
&ch217,
&ch218,
&ch219,
&ch220,
&ch221,
&ch222,
&ch223,
&ch224,
&ch225,
&ch226,
&ch227,
&ch228,
&ch229,
&ch230,
&ch231,
&ch232,
&ch233,
&ch234,
&ch235,
&ch236,
&ch237,
&ch238,
&ch239,
&ch240,
&ch241,
&ch242,
&ch243,
&ch244,
&ch245,
&ch246,
&ch247,
&ch248,
&ch249,
&ch250,
&ch251,
&ch252,
&ch253,
&ch254,
&ch255,
};
const BitmapFontRec glutBitmapHelvetica18 = {
"-adobe-helvetica-medium-r-normal--18-180-75-75-p-98-iso8859-1",
224,
32,
chars
};
#ifndef __glutint_h__
#define __glutint_h__
/* Copyright (c) Mark J. Kilgard, 1994, 1997, 1998. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#if defined(__CYGWIN32__)
#include <sys/time.h>
#endif
#if defined(_WIN32)
#include "glutwin32.h"
#elif !defined(__BEOS__)
#ifdef __sgi
#define SUPPORT_FORTRAN
#endif
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <GL/glx.h>
#endif
#include <GL/glut.h>
/* Non-Win32 platforms need APIENTRY defined to nothing
because all the GLUT routines have the APIENTRY prefix
to make Win32 happy. */
#ifndef APIENTRY
#define APIENTRY
#endif
#ifdef __vms
#if ( __VMS_VER < 70000000 )
struct timeval {
__int64 val;
};
extern int sys$gettim(struct timeval *);
#else
#include <time.h>
#endif
#else
#include <sys/types.h>
#if !defined(_WIN32)
#include <sys/time.h>
#else
#include <winsock.h>
#endif
#endif
#if defined(__vms) && ( __VMS_VER < 70000000 )
/* For VMS6.2 or lower :
One TICK on VMS is 100 nanoseconds; 0.1 microseconds or
0.0001 milliseconds. This means that there are 0.01
ticks/ns, 10 ticks/us, 10,000 ticks/ms and 10,000,000
ticks/second. */
#define TICKS_PER_MILLISECOND 10000
#define TICKS_PER_SECOND 10000000
#define GETTIMEOFDAY(_x) (void) sys$gettim (_x);
#define ADD_TIME(dest, src1, src2) { \
(dest).val = (src1).val + (src2).val; \
}
#define TIMEDELTA(dest, src1, src2) { \
(dest).val = (src1).val - (src2).val; \
}
#define IS_AFTER(t1, t2) ((t2).val > (t1).val)
#define IS_AT_OR_AFTER(t1, t2) ((t2).val >= (t1).val)
#else
#if defined(SVR4) && !defined(sun) /* Sun claims SVR4, but
wants 2 args. */
#define GETTIMEOFDAY(_x) gettimeofday(_x)
#else
#define GETTIMEOFDAY(_x) gettimeofday(_x, NULL)
#endif
#define ADD_TIME(dest, src1, src2) { \
if(((dest).tv_usec = \
(src1).tv_usec + (src2).tv_usec) >= 1000000) { \
(dest).tv_usec -= 1000000; \
(dest).tv_sec = (src1).tv_sec + (src2).tv_sec + 1; \
} else { \
(dest).tv_sec = (src1).tv_sec + (src2).tv_sec; \
if(((dest).tv_sec >= 1) && (((dest).tv_usec <0))) { \
(dest).tv_sec --;(dest).tv_usec += 1000000; \
} \
} \
}
#define TIMEDELTA(dest, src1, src2) { \
if(((dest).tv_usec = (src1).tv_usec - (src2).tv_usec) < 0) { \
(dest).tv_usec += 1000000; \
(dest).tv_sec = (src1).tv_sec - (src2).tv_sec - 1; \
} else { \
(dest).tv_sec = (src1).tv_sec - (src2).tv_sec; \
} \
}
#define IS_AFTER(t1, t2) \
(((t2).tv_sec > (t1).tv_sec) || \
(((t2).tv_sec == (t1).tv_sec) && \
((t2).tv_usec > (t1).tv_usec)))
#define IS_AT_OR_AFTER(t1, t2) \
(((t2).tv_sec > (t1).tv_sec) || \
(((t2).tv_sec == (t1).tv_sec) && \
((t2).tv_usec >= (t1).tv_usec)))
#endif
#define IGNORE_IN_GAME_MODE() \
{ if (__glutGameModeWindow) return; }
/* BeOS doesn't need most of this file */
#ifndef __BEOS__
#define GLUT_WIND_IS_RGB(x) (((x) & GLUT_INDEX) == 0)
#define GLUT_WIND_IS_INDEX(x) (((x) & GLUT_INDEX) != 0)
#define GLUT_WIND_IS_SINGLE(x) (((x) & GLUT_DOUBLE) == 0)
#define GLUT_WIND_IS_DOUBLE(x) (((x) & GLUT_DOUBLE) != 0)
#define GLUT_WIND_HAS_ACCUM(x) (((x) & GLUT_ACCUM) != 0)
#define GLUT_WIND_HAS_ALPHA(x) (((x) & GLUT_ALPHA) != 0)
#define GLUT_WIND_HAS_DEPTH(x) (((x) & GLUT_DEPTH) != 0)
#define GLUT_WIND_HAS_STENCIL(x) (((x) & GLUT_STENCIL) != 0)
#define GLUT_WIND_IS_MULTISAMPLE(x) (((x) & GLUT_MULTISAMPLE) != 0)
#define GLUT_WIND_IS_STEREO(x) (((x) & GLUT_STEREO) != 0)
#define GLUT_WIND_IS_LUMINANCE(x) (((x) & GLUT_LUMINANCE) != 0)
#define GLUT_MAP_WORK (1 << 0)
#define GLUT_EVENT_MASK_WORK (1 << 1)
#define GLUT_REDISPLAY_WORK (1 << 2)
#define GLUT_CONFIGURE_WORK (1 << 3)
#define GLUT_COLORMAP_WORK (1 << 4)
#define GLUT_DEVICE_MASK_WORK (1 << 5)
#define GLUT_FINISH_WORK (1 << 6)
#define GLUT_DEBUG_WORK (1 << 7)
#define GLUT_DUMMY_WORK (1 << 8)
#define GLUT_FULL_SCREEN_WORK (1 << 9)
#define GLUT_OVERLAY_REDISPLAY_WORK (1 << 10)
#define GLUT_REPAIR_WORK (1 << 11)
#define GLUT_OVERLAY_REPAIR_WORK (1 << 12)
/* Frame buffer capability macros and types. */
#define RGBA 0
#define BUFFER_SIZE 1
#define DOUBLEBUFFER 2
#define STEREO 3
#define AUX_BUFFERS 4
#define RED_SIZE 5 /* Used as mask bit for
"color selected". */
#define GREEN_SIZE 6
#define BLUE_SIZE 7
#define ALPHA_SIZE 8
#define DEPTH_SIZE 9
#define STENCIL_SIZE 10
#define ACCUM_RED_SIZE 11 /* Used as mask bit for
"acc selected". */
#define ACCUM_GREEN_SIZE 12
#define ACCUM_BLUE_SIZE 13
#define ACCUM_ALPHA_SIZE 14
#define LEVEL 15
#define NUM_GLXCAPS (LEVEL + 1)
#define XVISUAL (NUM_GLXCAPS + 0)
#define TRANSPARENT (NUM_GLXCAPS + 1)
#define SAMPLES (NUM_GLXCAPS + 2)
#define XSTATICGRAY (NUM_GLXCAPS + 3) /* Used as
mask bit
for "any
visual type
selected". */
#define XGRAYSCALE (NUM_GLXCAPS + 4)
#define XSTATICCOLOR (NUM_GLXCAPS + 5)
#define XPSEUDOCOLOR (NUM_GLXCAPS + 6)
#define XTRUECOLOR (NUM_GLXCAPS + 7)
#define XDIRECTCOLOR (NUM_GLXCAPS + 8)
#define SLOW (NUM_GLXCAPS + 9)
#define CONFORMANT (NUM_GLXCAPS + 10)
#define NUM_CAPS (NUM_GLXCAPS + 11)
/* Frame buffer capablities that don't have a corresponding
FrameBufferMode entry. These get used as mask bits. */
#define NUM (NUM_CAPS + 0)
#define RGBA_MODE (NUM_CAPS + 1)
#define CI_MODE (NUM_CAPS + 2)
#define LUMINANCE_MODE (NUM_CAPS + 3)
#define NONE 0
#define EQ 1
#define NEQ 2
#define LTE 3
#define GTE 4
#define GT 5
#define LT 6
#define MIN 7
typedef struct _Criterion {
int capability;
int comparison;
int value;
} Criterion;
typedef struct _FrameBufferMode {
XVisualInfo *vi;
#if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_fbconfig)
/* fbc is non-NULL when the XVisualInfo* is not OpenGL-capable
(ie, GLX_USE_GL is false), but the SGIX_fbconfig extension shows
the visual's fbconfig is OpenGL-capable. The reason for this is typically
an RGBA luminance fbconfig such as 16-bit StaticGray that could
not be advertised as a GLX visual since StaticGray visuals are
required (by the GLX specification) to be color index. The
SGIX_fbconfig allows StaticGray visuals to instead advertised as
fbconfigs that can provide RGBA luminance support. */
GLXFBConfigSGIX fbc;
#endif
int valid;
int cap[NUM_CAPS];
} FrameBufferMode;
/* DisplayMode capability macros for game mode. */
#define DM_WIDTH 0 /* "width" */
#define DM_HEIGHT 1 /* "height" */
#define DM_PIXEL_DEPTH 2 /* "bpp" (bits per pixel) */
#define DM_HERTZ 3 /* "hertz" */
#define DM_NUM 4 /* "num" */
#define NUM_DM_CAPS (DM_NUM+1)
typedef struct _DisplayMode {
#ifdef _WIN32
DEVMODE devmode;
#else
/* XXX The X Window System does not have a standard
mechanism for display setting changes. On SGI
systems, GLUT could use the XSGIvc (SGI X video
control extension). Perhaps this can be done in
a future release of GLUT. */
#endif
int valid;
int cap[NUM_DM_CAPS];
} DisplayMode;
#endif /* BeOS */
/* GLUT function types */
typedef void (*GLUTdisplayCB) (void);
typedef void (*GLUTreshapeCB) (int, int);
typedef void (*GLUTkeyboardCB) (unsigned char, int, int);
typedef void (*GLUTmouseCB) (int, int, int, int);
typedef void (*GLUTmotionCB) (int, int);
typedef void (*GLUTpassiveCB) (int, int);
typedef void (*GLUTentryCB) (int);
typedef void (*GLUTvisibilityCB) (int);
typedef void (*GLUTwindowStatusCB) (int);
typedef void (*GLUTidleCB) (void);
typedef void (*GLUTtimerCB) (int);
typedef void (*GLUTmenuStateCB) (int); /* DEPRICATED. */
typedef void (*GLUTmenuStatusCB) (int, int, int);
typedef void (*GLUTselectCB) (int);
typedef void (*GLUTspecialCB) (int, int, int);
typedef void (*GLUTspaceMotionCB) (int, int, int);
typedef void (*GLUTspaceRotateCB) (int, int, int);
typedef void (*GLUTspaceButtonCB) (int, int);
typedef void (*GLUTdialsCB) (int, int);
typedef void (*GLUTbuttonBoxCB) (int, int);
typedef void (*GLUTtabletMotionCB) (int, int);
typedef void (*GLUTtabletButtonCB) (int, int, int, int);
typedef void (*GLUTjoystickCB) (unsigned int buttonMask, int x, int y, int z);
#ifdef SUPPORT_FORTRAN
typedef void (*GLUTdisplayFCB) (void);
typedef void (*GLUTreshapeFCB) (int *, int *);
/* NOTE the pressed key is int, not unsigned char for Fortran! */
typedef void (*GLUTkeyboardFCB) (int *, int *, int *);
typedef void (*GLUTmouseFCB) (int *, int *, int *, int *);
typedef void (*GLUTmotionFCB) (int *, int *);
typedef void (*GLUTpassiveFCB) (int *, int *);
typedef void (*GLUTentryFCB) (int *);
typedef void (*GLUTvisibilityFCB) (int *);
typedef void (*GLUTwindowStatusFCB) (int *);
typedef void (*GLUTidleFCB) (void);
typedef void (*GLUTtimerFCB) (int *);
typedef void (*GLUTmenuStateFCB) (int *); /* DEPRICATED. */
typedef void (*GLUTmenuStatusFCB) (int *, int *, int *);
typedef void (*GLUTselectFCB) (int *);
typedef void (*GLUTspecialFCB) (int *, int *, int *);
typedef void (*GLUTspaceMotionFCB) (int *, int *, int *);
typedef void (*GLUTspaceRotateFCB) (int *, int *, int *);
typedef void (*GLUTspaceButtonFCB) (int *, int *);
typedef void (*GLUTdialsFCB) (int *, int *);
typedef void (*GLUTbuttonBoxFCB) (int *, int *);
typedef void (*GLUTtabletMotionFCB) (int *, int *);
typedef void (*GLUTtabletButtonFCB) (int *, int *, int *, int *);
typedef void (*GLUTjoystickFCB) (unsigned int *buttonMask, int *x, int *y, int *z);
#endif
#ifndef __BEOS__
typedef struct _GLUTcolorcell GLUTcolorcell;
struct _GLUTcolorcell {
/* GLUT_RED, GLUT_GREEN, GLUT_BLUE */
GLfloat component[3];
};
typedef struct _GLUTcolormap GLUTcolormap;
struct _GLUTcolormap {
Visual *visual; /* visual of the colormap */
Colormap cmap; /* X colormap ID */
int refcnt; /* number of windows using colormap */
int size; /* number of cells in colormap */
int transparent; /* transparent pixel, or -1 if opaque */
GLUTcolorcell *cells; /* array of cells */
GLUTcolormap *next; /* next colormap in list */
};
typedef struct _GLUTwindow GLUTwindow;
typedef struct _GLUToverlay GLUToverlay;
struct _GLUTwindow {
int num; /* Small integer window id (0-based). */
/* Window system related state. */
#if defined(_WIN32)
int pf; /* Pixel format. */
HDC hdc; /* Window's Win32 device context. */
#endif
Window win; /* X window for GLUT window */
GLXContext ctx; /* OpenGL context GLUT glut window */
XVisualInfo *vis; /* visual for window */
Bool visAlloced; /* if vis needs deallocate on destroy */
Colormap cmap; /* RGB colormap for window; None if CI */
GLUTcolormap *colormap; /* colormap; NULL if RGBA */
GLUToverlay *overlay; /* overlay; NULL if no overlay */
#if defined(_WIN32)
HDC renderDc; /* Win32's device context for rendering. */
#endif
Window renderWin; /* X window for rendering (might be
overlay) */
GLXContext renderCtx; /* OpenGL context for rendering (might
be overlay) */
/* GLUT settable or visible window state. */
int width; /* window width in pixels */
int height; /* window height in pixels */
int cursor; /* cursor name */
int visState; /* visibility state (-1 is unknown) */
int shownState; /* if window mapped */
int entryState; /* entry state (-1 is unknown) */
#define GLUT_MAX_MENUS 3
int menu[GLUT_MAX_MENUS]; /* attatched menu nums */
/* Window relationship state. */
GLUTwindow *parent; /* parent window */
GLUTwindow *children; /* list of children */
GLUTwindow *siblings; /* list of siblings */
/* Misc. non-API visible (hidden) state. */
Bool treatAsSingle; /* treat this window as single-buffered
(it might be "fake" though) */
Bool forceReshape; /* force reshape before display */
#if !defined(_WIN32)
Bool isDirect; /* if direct context (X11 only) */
#endif
Bool usedSwapBuffers; /* if swap buffers used last display */
long eventMask; /* mask of X events selected for */
int buttonUses; /* number of button uses, ref cnt */
int tabletPos[2]; /* tablet position (-1 is invalid) */
/* Work list related state. */
unsigned int workMask; /* mask of window work to be done */
GLUTwindow *prevWorkWin; /* link list of windows to work on */
Bool desiredMapState; /* how to mapped window if on map work
list */
Bool ignoreKeyRepeat; /* if window ignores autorepeat */
int desiredConfMask; /* mask of desired window configuration
*/
int desiredX; /* desired X location */
int desiredY; /* desired Y location */
int desiredWidth; /* desired window width */
int desiredHeight; /* desired window height */
int desiredStack; /* desired window stack */
/* Per-window callbacks. */
GLUTdisplayCB display; /* redraw */
GLUTreshapeCB reshape; /* resize (width,height) */
GLUTmouseCB mouse; /* mouse (button,state,x,y) */
GLUTmotionCB motion; /* motion (x,y) */
GLUTpassiveCB passive; /* passive motion (x,y) */
GLUTentryCB entry; /* window entry/exit (state) */
GLUTkeyboardCB keyboard; /* keyboard (ASCII,x,y) */
GLUTkeyboardCB keyboardUp; /* keyboard up (ASCII,x,y) */
GLUTwindowStatusCB windowStatus; /* window status */
GLUTvisibilityCB visibility; /* visibility */
GLUTspecialCB special; /* special key */
GLUTspecialCB specialUp; /* special up key */
GLUTbuttonBoxCB buttonBox; /* button box */
GLUTdialsCB dials; /* dials */
GLUTspaceMotionCB spaceMotion; /* Spaceball motion */
GLUTspaceRotateCB spaceRotate; /* Spaceball rotate */
GLUTspaceButtonCB spaceButton; /* Spaceball button */
GLUTtabletMotionCB tabletMotion; /* tablet motion */
GLUTtabletButtonCB tabletButton; /* tablet button */
#ifdef _WIN32
GLUTjoystickCB joystick; /* joystick */
int joyPollInterval; /* joystick polling interval */
#endif
#ifdef SUPPORT_FORTRAN
/* Special Fortran display unneeded since no
parameters! */
GLUTreshapeFCB freshape; /* Fortran reshape */
GLUTmouseFCB fmouse; /* Fortran mouse */
GLUTmotionFCB fmotion; /* Fortran motion */
GLUTpassiveFCB fpassive; /* Fortran passive */
GLUTentryFCB fentry; /* Fortran entry */
GLUTkeyboardFCB fkeyboard; /* Fortran keyboard */
GLUTkeyboardFCB fkeyboardUp; /* Fortran keyboard up */
GLUTwindowStatusFCB fwindowStatus; /* Fortran visibility
*/
GLUTvisibilityFCB fvisibility; /* Fortran visibility
*/
GLUTspecialFCB fspecial; /* special key */
GLUTspecialFCB fspecialUp; /* special key up */
GLUTbuttonBoxFCB fbuttonBox; /* button box */
GLUTdialsFCB fdials; /* dials */
GLUTspaceMotionFCB fspaceMotion; /* Spaceball motion
*/
GLUTspaceRotateFCB fspaceRotate; /* Spaceball rotate
*/
GLUTspaceButtonFCB fspaceButton; /* Spaceball button
*/
GLUTtabletMotionFCB ftabletMotion; /* tablet motion
*/
GLUTtabletButtonFCB ftabletButton; /* tablet button
*/
#ifdef _WIN32
GLUTjoystickFCB fjoystick; /* joystick */
#endif
#endif
};
struct _GLUToverlay {
#if defined(_WIN32)
int pf;
HDC hdc;
#endif
Window win;
GLXContext ctx;
XVisualInfo *vis; /* visual for window */
Bool visAlloced; /* if vis needs deallocate on destroy */
Colormap cmap; /* RGB colormap for window; None if CI */
GLUTcolormap *colormap; /* colormap; NULL if RGBA */
int shownState; /* if overlay window mapped */
Bool treatAsSingle; /* treat as single-buffered */
#if !defined(_WIN32)
Bool isDirect; /* if direct context */
#endif
int transparentPixel; /* transparent pixel value */
GLUTdisplayCB display; /* redraw */
/* Special Fortran display unneeded since no
parameters! */
};
typedef struct _GLUTstale GLUTstale;
struct _GLUTstale {
GLUTwindow *window;
Window win;
GLUTstale *next;
};
extern GLUTstale *__glutStaleWindowList;
#define GLUT_OVERLAY_EVENT_FILTER_MASK \
(ExposureMask | \
StructureNotifyMask | \
EnterWindowMask | \
LeaveWindowMask)
#define GLUT_DONT_PROPAGATE_FILTER_MASK \
(ButtonReleaseMask | \
ButtonPressMask | \
KeyPressMask | \
KeyReleaseMask | \
PointerMotionMask | \
Button1MotionMask | \
Button2MotionMask | \
Button3MotionMask)
#define GLUT_HACK_STOP_PROPAGATE_MASK \
(KeyPressMask | \
KeyReleaseMask)
typedef struct _GLUTmenu GLUTmenu;
typedef struct _GLUTmenuItem GLUTmenuItem;
struct _GLUTmenu {
int id; /* small integer menu id (0-based) */
Window win; /* X window for the menu */
GLUTselectCB select; /* function of menu */
GLUTmenuItem *list; /* list of menu entries */
int num; /* number of entries */
#if !defined(_WIN32)
Bool managed; /* are the InputOnly windows size
validated? */
Bool searched; /* help detect menu loops */
int pixheight; /* height of menu in pixels */
int pixwidth; /* width of menu in pixels */
#endif
int submenus; /* number of submenu entries */
GLUTmenuItem *highlighted; /* pointer to highlighted menu
entry, NULL not highlighted */
GLUTmenu *cascade; /* currently cascading this menu */
GLUTmenuItem *anchor; /* currently anchored to this entry */
int x; /* current x origin relative to the
root window */
int y; /* current y origin relative to the
root window */
#ifdef SUPPORT_FORTRAN
GLUTselectFCB fselect; /* function of menu */
#endif
};
struct _GLUTmenuItem {
Window win; /* InputOnly X window for entry */
GLUTmenu *menu; /* menu entry belongs to */
Bool isTrigger; /* is a submenu trigger? */
int value; /* value to return for selecting this
entry; doubles as submenu id
(0-base) if submenu trigger */
#if defined(_WIN32)
UINT unique; /* unique menu item id (Win32 only) */
#endif
char *label; /* __glutStrdup'ed label string */
int len; /* length of label string */
int pixwidth; /* width of X window in pixels */
GLUTmenuItem *next; /* next menu entry on list for menu */
};
typedef struct _GLUTtimer GLUTtimer;
struct _GLUTtimer {
GLUTtimer *next; /* list of timers */
struct timeval timeout; /* time to be called */
GLUTtimerCB func; /* timer (value) */
int value; /* return value */
#ifdef SUPPORT_FORTRAN
GLUTtimerFCB ffunc; /* Fortran timer */
#endif
};
typedef struct _GLUTeventParser GLUTeventParser;
struct _GLUTeventParser {
int (*func) (XEvent *);
GLUTeventParser *next;
};
/* Declarations to implement glutFullScreen support with
mwm/4Dwm. */
/* The following X property format is defined in Motif 1.1's
Xm/MwmUtils.h, but GLUT should not depend on that header
file. Note: Motif 1.2 expanded this structure with
uninteresting fields (to GLUT) so just stick with the
smaller Motif 1.1 structure. */
typedef struct {
#define MWM_HINTS_DECORATIONS 2
long flags;
long functions;
long decorations;
long input_mode;
} MotifWmHints;
/* Make current and buffer swap macros. */
#ifdef _WIN32
#define MAKE_CURRENT_LAYER(window) \
{ \
HGLRC currentContext = wglGetCurrentContext(); \
HDC currentDc = wglGetCurrentDC(); \
\
if (currentContext != window->renderCtx \
|| currentDc != window->renderDc) { \
wglMakeCurrent(window->renderDc, window->renderCtx); \
} \
}
#define MAKE_CURRENT_WINDOW(window) \
{ \
HGLRC currentContext = wglGetCurrentContext(); \
HDC currentDc = wglGetCurrentDC(); \
\
if (currentContext != window->ctx || currentDc != window->hdc) { \
wglMakeCurrent(window->hdc, window->ctx); \
} \
}
#define MAKE_CURRENT_OVERLAY(overlay) \
wglMakeCurrent(overlay->hdc, overlay->ctx)
#define UNMAKE_CURRENT() \
wglMakeCurrent(NULL, NULL)
#define SWAP_BUFFERS_WINDOW(window) \
SwapBuffers(window->hdc)
#define SWAP_BUFFERS_LAYER(window) \
SwapBuffers(window->renderDc)
#else
#define MAKE_CURRENT_LAYER(window) \
glXMakeCurrent(__glutDisplay, window->renderWin, window->renderCtx)
#define MAKE_CURRENT_WINDOW(window) \
glXMakeCurrent(__glutDisplay, window->win, window->ctx)
#define MAKE_CURRENT_OVERLAY(overlay) \
glXMakeCurrent(__glutDisplay, overlay->win, overlay->ctx)
#define UNMAKE_CURRENT() \
glXMakeCurrent(__glutDisplay, None, NULL)
#define SWAP_BUFFERS_WINDOW(window) \
glXSwapBuffers(__glutDisplay, window->win)
#define SWAP_BUFFERS_LAYER(window) \
glXSwapBuffers(__glutDisplay, window->renderWin)
#endif
/* private variables from glut_event.c */
extern GLUTwindow *__glutWindowWorkList;
extern int __glutWindowDamaged;
#ifdef SUPPORT_FORTRAN
extern GLUTtimer *__glutTimerList;
extern GLUTtimer *__glutNewTimer;
#endif
extern GLUTmenu *__glutMappedMenu;
extern void (*__glutUpdateInputDeviceMaskFunc) (GLUTwindow *);
#if !defined(_WIN32)
extern void (*__glutMenuItemEnterOrLeave)(GLUTmenuItem * item,
int num, int type);
extern void (*__glutFinishMenu)(Window win, int x, int y);
extern void (*__glutPaintMenu)(GLUTmenu * menu);
extern void (*__glutStartMenu)(GLUTmenu * menu,
GLUTwindow * window, int x, int y, int x_win, int y_win);
extern GLUTmenu * (*__glutGetMenuByNum)(int menunum);
extern GLUTmenuItem * (*__glutGetMenuItem)(GLUTmenu * menu,
Window win, int *which);
extern GLUTmenu * (*__glutGetMenu)(Window win);
#endif
/* private variables from glut_init.c */
extern Atom __glutWMDeleteWindow;
extern Display *__glutDisplay;
extern unsigned int __glutDisplayMode;
extern char *__glutDisplayString;
extern XVisualInfo *(*__glutDetermineVisualFromString) (char *string, Bool * treatAsSingle,
Criterion * requiredCriteria, int nRequired, int requiredMask, void **fbc);
extern GLboolean __glutDebug;
extern GLboolean __glutForceDirect;
extern GLboolean __glutIconic;
extern GLboolean __glutTryDirect;
extern Window __glutRoot;
extern XSizeHints __glutSizeHints;
extern char **__glutArgv;
#endif /* BeOS */
extern char *__glutProgramName;
#ifndef __BEOS__
extern int __glutArgc;
extern int __glutConnectionFD;
extern int __glutInitHeight;
extern int __glutInitWidth;
extern int __glutInitX;
extern int __glutInitY;
extern int __glutScreen;
extern int __glutScreenHeight;
extern int __glutScreenWidth;
extern Atom __glutMotifHints;
extern unsigned int __glutModifierMask;
/* private variables from glut_menu.c */
extern GLUTmenuItem *__glutItemSelected;
extern GLUTmenu **__glutMenuList;
extern void (*__glutMenuStatusFunc) (int, int, int);
extern void __glutMenuModificationError(void);
extern void __glutSetMenuItem(GLUTmenuItem * item,
const char *label, int value, Bool isTrigger);
/* private variables from glut_win.c */
extern GLUTwindow **__glutWindowList;
extern GLUTwindow *__glutCurrentWindow;
extern GLUTwindow *__glutMenuWindow;
extern GLUTmenu *__glutCurrentMenu;
extern int __glutWindowListSize;
extern void (*__glutFreeOverlayFunc) (GLUToverlay *);
extern XVisualInfo *__glutDetermineWindowVisual(Bool * treatAsSingle,
Bool * visAlloced, void **fbc);
/* private variables from glut_mesa.c */
extern int __glutMesaSwapHackSupport;
/* private variables from glut_gamemode.c */
extern GLUTwindow *__glutGameModeWindow;
/* private routines from glut_cindex.c */
extern GLUTcolormap * __glutAssociateNewColormap(XVisualInfo * vis);
extern void __glutFreeColormap(GLUTcolormap *);
/* private routines from glut_cmap.c */
extern void __glutSetupColormap(
XVisualInfo * vi,
GLUTcolormap ** colormap,
Colormap * cmap);
#if !defined(_WIN32)
extern void __glutEstablishColormapsProperty(
GLUTwindow * window);
extern GLUTwindow *__glutToplevelOf(GLUTwindow * window);
#endif
/* private routines from glut_cursor.c */
extern void __glutSetCursor(GLUTwindow *window);
/* private routines from glut_event.c */
extern void __glutPutOnWorkList(GLUTwindow * window,
int work_mask);
extern void __glutRegisterEventParser(GLUTeventParser * parser);
extern void __glutPostRedisplay(GLUTwindow * window, int layerMask);
/* private routines from glut_init.c */
#if !defined(_WIN32)
extern void __glutOpenXConnection(char *display);
#else
extern void __glutOpenWin32Connection(char *display);
#endif
extern void __glutInitTime(struct timeval *beginning);
/* private routines for glut_menu.c (or win32_menu.c) */
#if defined(_WIN32)
extern GLUTmenu *__glutGetMenu(Window win);
extern GLUTmenu *__glutGetMenuByNum(int menunum);
extern GLUTmenuItem *__glutGetMenuItem(GLUTmenu * menu,
Window win, int *which);
extern void __glutStartMenu(GLUTmenu * menu,
GLUTwindow * window, int x, int y, int x_win, int y_win);
extern void __glutFinishMenu(Window win, int x, int y);
#endif
extern void __glutSetMenu(GLUTmenu * menu);
#endif /* BeOS */
#ifdef __cplusplus
extern "C" {
#endif
/* private routines from glut_util.c */
extern char * __glutStrdup(const char *string);
extern void __glutWarning(char *format,...);
extern void __glutFatalError(char *format,...);
extern void __glutFatalUsage(char *format,...);
#ifdef __cplusplus
}
#endif
#ifndef __BEOS__
/* private routines from glut_win.c */
extern GLUTwindow *__glutGetWindow(Window win);
extern void __glutChangeWindowEventMask(long mask, Bool add);
extern XVisualInfo *__glutDetermineVisual(
unsigned int mode,
Bool * fakeSingle,
XVisualInfo * (getVisualInfo) (unsigned int));
extern XVisualInfo *__glutGetVisualInfo(unsigned int mode);
extern void __glutSetWindow(GLUTwindow * window);
extern void __glutReshapeFunc(GLUTreshapeCB reshapeFunc,
int callingConvention);
extern void __glutDefaultReshape(int, int);
extern GLUTwindow *__glutCreateWindow(
GLUTwindow * parent,
int x, int y, int width, int height, int gamemode);
extern void __glutDestroyWindow(
GLUTwindow * window,
GLUTwindow * initialWindow);
#if !defined(_WIN32)
/* private routines from glut_glxext.c */
extern int __glutIsSupportedByGLX(char *);
#endif
/* private routines from glut_input.c */
extern void __glutUpdateInputDeviceMask(GLUTwindow * window);
/* private routines from glut_mesa.c */
extern void __glutDetermineMesaSwapHackSupport(void);
/* private routines from glut_gameglut.c */
extern void __glutCloseDownGameMode(void);
#if defined(_WIN32)
/* private routines from win32_*.c */
extern LONG WINAPI __glutWindowProc(HWND win, UINT msg, WPARAM w, LPARAM l);
extern HDC XHDC;
#endif
#else /* BeOS */
/* BeOS specific C++ function prototypes */
#ifdef __cplusplus
#include <SupportDefs.h>
/* private routines from glutInit.cpp */
void __glutInitTime(bigtime_t *beginning);
void __glutInit();
/* private routines from glutMenu.cpp */
class GlutMenu; // avoid including glutMenu.h
GlutMenu *__glutGetMenuByNum(int menunum);
/* private routines from glutWindow.cpp */
int __glutConvertDisplayMode(unsigned long *options);
void __glutDefaultReshape(int width, int height);
class GlutWindow; // avoid including glutWindow.h in every source file
void __glutSetWindow(GlutWindow * window);
void __glutDestroyAllWindows();
/* private routines from glutDstr.cpp */
int __glutConvertDisplayModeFromString(unsigned long *options);
/* private routines from glutCursor.cpp */
void __glutSetCursor(int cursor);
#endif /* __cplusplus */
#endif /* BeOS */
#endif /* __glutint_h__ */
/***********************************************************
* Copyright (C) 1997, Be Inc. Copyright (C) 1999, Jake Hamby.
*
* This program is freely distributable without licensing fees
* and is provided without guarantee or warrantee expressed or
* implied. This program is -not- in the public domain.
*
* FILE: glutMenu.h
*
* DESCRIPTION: the GlutMenu class is a simple popup menu
***********************************************************/
/***********************************************************
* Headers
***********************************************************/
#include <GL/glut.h>
#include <Menu.h>
#include <MenuItem.h>
#include <PopUpMenu.h>
/***********************************************************
* Definitions
***********************************************************/
const int32 MENU_ITEM = 'menu';
/***********************************************************
* CLASS: GlutMenu
***********************************************************/
class GlutMenuItem;
class GlutPopUp;
class GlutMenu {
public:
GlutMenu(int n_id, GLUTselectCB n_select) {
id = n_id;
select = n_select;
list = 0;
num = 0;
}
~GlutMenu();
BMenu *CreateBMenu(bool toplevel=true); // construct BPopUpMenu
// public data
int id;
GLUTselectCB select; // callback function
GlutMenuItem *list; // list of menu items
int num; // number of items
};
/***********************************************************
* CLASS: GlutMenuItem
***********************************************************/
class GlutMenuItem {
public:
GlutMenuItem(GlutMenu *n_menu, bool n_trig, int n_value, const char *n_label);
// public data
GlutMenu *menu; // parent menu
bool isTrigger; // are we a submenu?
int value; // value to send, or submenu id if isTrigger
char *label; // strdup'ed label string
GlutMenuItem *next; // next menu entry on list
};
/***********************************************************
* CLASS: GlutPopUp
***********************************************************/
class GlutPopUp : public BPopUpMenu {
public:
GlutPopUp(int m) : BPopUpMenu(0, false, false) { menu = m;}
BPoint point; // point to start menu
GlutWindow *win; // pointer to my window
int menu; // my menu number
};
/***********************************************************
* CLASS: GlutBMenuItem
***********************************************************/
class GlutBMenuItem : public BMenuItem {
public:
GlutBMenuItem(const char *name) : BMenuItem(name, 0) {}
GlutBMenuItem(BMenu* menu) : BMenuItem(menu) {}
int menu, value;
};
/* GENERATED FILE -- DO NOT MODIFY */
#include "glutstroke.h"
/* char: 33 '!' */
static const CoordRec char33_stroke0[] = {
{ 52.381, 100 },
{ 52.381, 33.3333 },
};
static const CoordRec char33_stroke1[] = {
{ 52.381, 9.5238 },
{ 47.6191, 4.7619 },
{ 52.381, 0 },
{ 57.1429, 4.7619 },
{ 52.381, 9.5238 },
};
static const StrokeRec char33[] = {
{ 2, char33_stroke0 },
{ 5, char33_stroke1 },
};
/* char: 34 '"' */
static const CoordRec char34_stroke0[] = {
{ 33.3334, 100 },
{ 33.3334, 66.6667 },
};
static const CoordRec char34_stroke1[] = {
{ 71.4286, 100 },
{ 71.4286, 66.6667 },
};
static const StrokeRec char34[] = {
{ 2, char34_stroke0 },
{ 2, char34_stroke1 },
};
/* char: 35 '#' */
static const CoordRec char35_stroke0[] = {
{ 54.7619, 119.048 },
{ 21.4286, -33.3333 },
};
static const CoordRec char35_stroke1[] = {
{ 83.3334, 119.048 },
{ 50, -33.3333 },
};
static const CoordRec char35_stroke2[] = {
{ 21.4286, 57.1429 },
{ 88.0952, 57.1429 },
};
static const CoordRec char35_stroke3[] = {
{ 16.6667, 28.5714 },
{ 83.3334, 28.5714 },
};
static const StrokeRec char35[] = {
{ 2, char35_stroke0 },
{ 2, char35_stroke1 },
{ 2, char35_stroke2 },
{ 2, char35_stroke3 },
};
/* char: 36 '$' */
static const CoordRec char36_stroke0[] = {
{ 42.8571, 119.048 },
{ 42.8571, -19.0476 },
};
static const CoordRec char36_stroke1[] = {
{ 61.9047, 119.048 },
{ 61.9047, -19.0476 },
};
static const CoordRec char36_stroke2[] = {
{ 85.7143, 85.7143 },
{ 76.1905, 95.2381 },
{ 61.9047, 100 },
{ 42.8571, 100 },
{ 28.5714, 95.2381 },
{ 19.0476, 85.7143 },
{ 19.0476, 76.1905 },
{ 23.8095, 66.6667 },
{ 28.5714, 61.9048 },
{ 38.0952, 57.1429 },
{ 66.6666, 47.619 },
{ 76.1905, 42.8571 },
{ 80.9524, 38.0952 },
{ 85.7143, 28.5714 },
{ 85.7143, 14.2857 },
{ 76.1905, 4.7619 },
{ 61.9047, 0 },
{ 42.8571, 0 },
{ 28.5714, 4.7619 },
{ 19.0476, 14.2857 },
};
static const StrokeRec char36[] = {
{ 2, char36_stroke0 },
{ 2, char36_stroke1 },
{ 20, char36_stroke2 },
};
/* char: 37 '%' */
static const CoordRec char37_stroke0[] = {
{ 95.2381, 100 },
{ 9.5238, 0 },
};
static const CoordRec char37_stroke1[] = {
{ 33.3333, 100 },
{ 42.8571, 90.4762 },
{ 42.8571, 80.9524 },
{ 38.0952, 71.4286 },
{ 28.5714, 66.6667 },
{ 19.0476, 66.6667 },
{ 9.5238, 76.1905 },
{ 9.5238, 85.7143 },
{ 14.2857, 95.2381 },
{ 23.8095, 100 },
{ 33.3333, 100 },
{ 42.8571, 95.2381 },
{ 57.1428, 90.4762 },
{ 71.4286, 90.4762 },
{ 85.7143, 95.2381 },
{ 95.2381, 100 },
};
static const CoordRec char37_stroke2[] = {
{ 76.1905, 33.3333 },
{ 66.6667, 28.5714 },
{ 61.9048, 19.0476 },
{ 61.9048, 9.5238 },
{ 71.4286, 0 },
{ 80.9524, 0 },
{ 90.4762, 4.7619 },
{ 95.2381, 14.2857 },
{ 95.2381, 23.8095 },
{ 85.7143, 33.3333 },
{ 76.1905, 33.3333 },
};
static const StrokeRec char37[] = {
{ 2, char37_stroke0 },
{ 16, char37_stroke1 },
{ 11, char37_stroke2 },
};
/* char: 38 '&' */
static const CoordRec char38_stroke0[] = {
{ 100, 57.1429 },
{ 100, 61.9048 },
{ 95.2381, 66.6667 },
{ 90.4762, 66.6667 },
{ 85.7143, 61.9048 },
{ 80.9524, 52.381 },
{ 71.4286, 28.5714 },
{ 61.9048, 14.2857 },
{ 52.3809, 4.7619 },
{ 42.8571, 0 },
{ 23.8095, 0 },
{ 14.2857, 4.7619 },
{ 9.5238, 9.5238 },
{ 4.7619, 19.0476 },
{ 4.7619, 28.5714 },
{ 9.5238, 38.0952 },
{ 14.2857, 42.8571 },
{ 47.619, 61.9048 },
{ 52.3809, 66.6667 },
{ 57.1429, 76.1905 },
{ 57.1429, 85.7143 },
{ 52.3809, 95.2381 },
{ 42.8571, 100 },
{ 33.3333, 95.2381 },
{ 28.5714, 85.7143 },
{ 28.5714, 76.1905 },
{ 33.3333, 61.9048 },
{ 42.8571, 47.619 },
{ 66.6667, 14.2857 },
{ 76.1905, 4.7619 },
{ 85.7143, 0 },
{ 95.2381, 0 },
{ 100, 4.7619 },
{ 100, 9.5238 },
};
static const StrokeRec char38[] = {
{ 34, char38_stroke0 },
};
/* char: 39 ''' */
static const CoordRec char39_stroke0[] = {
{ 52.381, 100 },
{ 52.381, 66.6667 },
};
static const StrokeRec char39[] = {
{ 2, char39_stroke0 },
};
/* char: 40 '(' */
static const CoordRec char40_stroke0[] = {
{ 69.0476, 119.048 },
{ 59.5238, 109.524 },
{ 50, 95.2381 },
{ 40.4762, 76.1905 },
{ 35.7143, 52.381 },
{ 35.7143, 33.3333 },
{ 40.4762, 9.5238 },
{ 50, -9.5238 },
{ 59.5238, -23.8095 },
{ 69.0476, -33.3333 },
};
static const StrokeRec char40[] = {
{ 10, char40_stroke0 },
};
/* char: 41 ')' */
static const CoordRec char41_stroke0[] = {
{ 35.7143, 119.048 },
{ 45.2381, 109.524 },
{ 54.7619, 95.2381 },
{ 64.2857, 76.1905 },
{ 69.0476, 52.381 },
{ 69.0476, 33.3333 },
{ 64.2857, 9.5238 },
{ 54.7619, -9.5238 },
{ 45.2381, -23.8095 },
{ 35.7143, -33.3333 },
};
static const StrokeRec char41[] = {
{ 10, char41_stroke0 },
};
/* char: 42 '*' */
static const CoordRec char42_stroke0[] = {
{ 52.381, 71.4286 },
{ 52.381, 14.2857 },
};
static const CoordRec char42_stroke1[] = {
{ 28.5715, 57.1429 },
{ 76.1905, 28.5714 },
};
static const CoordRec char42_stroke2[] = {
{ 76.1905, 57.1429 },
{ 28.5715, 28.5714 },
};
static const StrokeRec char42[] = {
{ 2, char42_stroke0 },
{ 2, char42_stroke1 },
{ 2, char42_stroke2 },
};
/* char: 43 '+' */
static const CoordRec char43_stroke0[] = {
{ 52.3809, 85.7143 },
{ 52.3809, 0 },
};
static const CoordRec char43_stroke1[] = {
{ 9.5238, 42.8571 },
{ 95.2381, 42.8571 },
};
static const StrokeRec char43[] = {
{ 2, char43_stroke0 },
{ 2, char43_stroke1 },
};
/* char: 44 ',' */
static const CoordRec char44_stroke0[] = {
{ 57.1429, 4.7619 },
{ 52.381, 0 },
{ 47.6191, 4.7619 },
{ 52.381, 9.5238 },
{ 57.1429, 4.7619 },
{ 57.1429, -4.7619 },
{ 52.381, -14.2857 },
{ 47.6191, -19.0476 },
};
static const StrokeRec char44[] = {
{ 8, char44_stroke0 },
};
/* char: 45 '-' */
static const CoordRec char45_stroke0[] = {
{ 9.5238, 42.8571 },
{ 95.2381, 42.8571 },
};
static const StrokeRec char45[] = {
{ 2, char45_stroke0 },
};
/* char: 46 '.' */
static const CoordRec char46_stroke0[] = {
{ 52.381, 9.5238 },
{ 47.6191, 4.7619 },
{ 52.381, 0 },
{ 57.1429, 4.7619 },
{ 52.381, 9.5238 },
};
static const StrokeRec char46[] = {
{ 5, char46_stroke0 },
};
/* char: 47 '/' */
static const CoordRec char47_stroke0[] = {
{ 19.0476, -14.2857 },
{ 85.7143, 100 },
};
static const StrokeRec char47[] = {
{ 2, char47_stroke0 },
};
/* char: 48 '0' */
static const CoordRec char48_stroke0[] = {
{ 47.619, 100 },
{ 33.3333, 95.2381 },
{ 23.8095, 80.9524 },
{ 19.0476, 57.1429 },
{ 19.0476, 42.8571 },
{ 23.8095, 19.0476 },
{ 33.3333, 4.7619 },
{ 47.619, 0 },
{ 57.1428, 0 },
{ 71.4286, 4.7619 },
{ 80.9524, 19.0476 },
{ 85.7143, 42.8571 },
{ 85.7143, 57.1429 },
{ 80.9524, 80.9524 },
{ 71.4286, 95.2381 },
{ 57.1428, 100 },
{ 47.619, 100 },
};
static const StrokeRec char48[] = {
{ 17, char48_stroke0 },
};
/* char: 49 '1' */
static const CoordRec char49_stroke0[] = {
{ 40.4762, 80.9524 },
{ 50, 85.7143 },
{ 64.2857, 100 },
{ 64.2857, 0 },
};
static const StrokeRec char49[] = {
{ 4, char49_stroke0 },
};
/* char: 50 '2' */
static const CoordRec char50_stroke0[] = {
{ 23.8095, 76.1905 },
{ 23.8095, 80.9524 },
{ 28.5714, 90.4762 },
{ 33.3333, 95.2381 },
{ 42.8571, 100 },
{ 61.9047, 100 },
{ 71.4286, 95.2381 },
{ 76.1905, 90.4762 },
{ 80.9524, 80.9524 },
{ 80.9524, 71.4286 },
{ 76.1905, 61.9048 },
{ 66.6666, 47.619 },
{ 19.0476, 0 },
{ 85.7143, 0 },
};
static const StrokeRec char50[] = {
{ 14, char50_stroke0 },
};
/* char: 51 '3' */
static const CoordRec char51_stroke0[] = {
{ 28.5714, 100 },
{ 80.9524, 100 },
{ 52.3809, 61.9048 },
{ 66.6666, 61.9048 },
{ 76.1905, 57.1429 },
{ 80.9524, 52.381 },
{ 85.7143, 38.0952 },
{ 85.7143, 28.5714 },
{ 80.9524, 14.2857 },
{ 71.4286, 4.7619 },
{ 57.1428, 0 },
{ 42.8571, 0 },
{ 28.5714, 4.7619 },
{ 23.8095, 9.5238 },
{ 19.0476, 19.0476 },
};
static const StrokeRec char51[] = {
{ 15, char51_stroke0 },
};
/* char: 52 '4' */
static const CoordRec char52_stroke0[] = {
{ 64.2857, 100 },
{ 16.6667, 33.3333 },
{ 88.0952, 33.3333 },
};
static const CoordRec char52_stroke1[] = {
{ 64.2857, 100 },
{ 64.2857, 0 },
};
static const StrokeRec char52[] = {
{ 3, char52_stroke0 },
{ 2, char52_stroke1 },
};
/* char: 53 '5' */
static const CoordRec char53_stroke0[] = {
{ 76.1905, 100 },
{ 28.5714, 100 },
{ 23.8095, 57.1429 },
{ 28.5714, 61.9048 },
{ 42.8571, 66.6667 },
{ 57.1428, 66.6667 },
{ 71.4286, 61.9048 },
{ 80.9524, 52.381 },
{ 85.7143, 38.0952 },
{ 85.7143, 28.5714 },
{ 80.9524, 14.2857 },
{ 71.4286, 4.7619 },
{ 57.1428, 0 },
{ 42.8571, 0 },
{ 28.5714, 4.7619 },
{ 23.8095, 9.5238 },
{ 19.0476, 19.0476 },
};
static const StrokeRec char53[] = {
{ 17, char53_stroke0 },
};
/* char: 54 '6' */
static const CoordRec char54_stroke0[] = {
{ 78.5714, 85.7143 },
{ 73.8096, 95.2381 },
{ 59.5238, 100 },
{ 50, 100 },
{ 35.7143, 95.2381 },
{ 26.1905, 80.9524 },
{ 21.4286, 57.1429 },
{ 21.4286, 33.3333 },
{ 26.1905, 14.2857 },
{ 35.7143, 4.7619 },
{ 50, 0 },
{ 54.7619, 0 },
{ 69.0476, 4.7619 },
{ 78.5714, 14.2857 },
{ 83.3334, 28.5714 },
{ 83.3334, 33.3333 },
{ 78.5714, 47.619 },
{ 69.0476, 57.1429 },
{ 54.7619, 61.9048 },
{ 50, 61.9048 },
{ 35.7143, 57.1429 },
{ 26.1905, 47.619 },
{ 21.4286, 33.3333 },
};
static const StrokeRec char54[] = {
{ 23, char54_stroke0 },
};
/* char: 55 '7' */
static const CoordRec char55_stroke0[] = {
{ 85.7143, 100 },
{ 38.0952, 0 },
};
static const CoordRec char55_stroke1[] = {
{ 19.0476, 100 },
{ 85.7143, 100 },
};
static const StrokeRec char55[] = {
{ 2, char55_stroke0 },
{ 2, char55_stroke1 },
};
/* char: 56 '8' */
static const CoordRec char56_stroke0[] = {
{ 42.8571, 100 },
{ 28.5714, 95.2381 },
{ 23.8095, 85.7143 },
{ 23.8095, 76.1905 },
{ 28.5714, 66.6667 },
{ 38.0952, 61.9048 },
{ 57.1428, 57.1429 },
{ 71.4286, 52.381 },
{ 80.9524, 42.8571 },
{ 85.7143, 33.3333 },
{ 85.7143, 19.0476 },
{ 80.9524, 9.5238 },
{ 76.1905, 4.7619 },
{ 61.9047, 0 },
{ 42.8571, 0 },
{ 28.5714, 4.7619 },
{ 23.8095, 9.5238 },
{ 19.0476, 19.0476 },
{ 19.0476, 33.3333 },
{ 23.8095, 42.8571 },
{ 33.3333, 52.381 },
{ 47.619, 57.1429 },
{ 66.6666, 61.9048 },
{ 76.1905, 66.6667 },
{ 80.9524, 76.1905 },
{ 80.9524, 85.7143 },
{ 76.1905, 95.2381 },
{ 61.9047, 100 },
{ 42.8571, 100 },
};
static const StrokeRec char56[] = {
{ 29, char56_stroke0 },
};
/* char: 57 '9' */
static const CoordRec char57_stroke0[] = {
{ 83.3334, 66.6667 },
{ 78.5714, 52.381 },
{ 69.0476, 42.8571 },
{ 54.7619, 38.0952 },
{ 50, 38.0952 },
{ 35.7143, 42.8571 },
{ 26.1905, 52.381 },
{ 21.4286, 66.6667 },
{ 21.4286, 71.4286 },
{ 26.1905, 85.7143 },
{ 35.7143, 95.2381 },
{ 50, 100 },
{ 54.7619, 100 },
{ 69.0476, 95.2381 },
{ 78.5714, 85.7143 },
{ 83.3334, 66.6667 },
{ 83.3334, 42.8571 },
{ 78.5714, 19.0476 },
{ 69.0476, 4.7619 },
{ 54.7619, 0 },
{ 45.2381, 0 },
{ 30.9524, 4.7619 },
{ 26.1905, 14.2857 },
};
static const StrokeRec char57[] = {
{ 23, char57_stroke0 },
};
/* char: 58 ':' */
static const CoordRec char58_stroke0[] = {
{ 52.381, 66.6667 },
{ 47.6191, 61.9048 },
{ 52.381, 57.1429 },
{ 57.1429, 61.9048 },
{ 52.381, 66.6667 },
};
static const CoordRec char58_stroke1[] = {
{ 52.381, 9.5238 },
{ 47.6191, 4.7619 },
{ 52.381, 0 },
{ 57.1429, 4.7619 },
{ 52.381, 9.5238 },
};
static const StrokeRec char58[] = {
{ 5, char58_stroke0 },
{ 5, char58_stroke1 },
};
/* char: 59 ';' */
static const CoordRec char59_stroke0[] = {
{ 52.381, 66.6667 },
{ 47.6191, 61.9048 },
{ 52.381, 57.1429 },
{ 57.1429, 61.9048 },
{ 52.381, 66.6667 },
};
static const CoordRec char59_stroke1[] = {
{ 57.1429, 4.7619 },
{ 52.381, 0 },
{ 47.6191, 4.7619 },
{ 52.381, 9.5238 },
{ 57.1429, 4.7619 },
{ 57.1429, -4.7619 },
{ 52.381, -14.2857 },
{ 47.6191, -19.0476 },
};
static const StrokeRec char59[] = {
{ 5, char59_stroke0 },
{ 8, char59_stroke1 },
};
/* char: 60 '<' */
static const CoordRec char60_stroke0[] = {
{ 90.4762, 85.7143 },
{ 14.2857, 42.8571 },
{ 90.4762, 0 },
};
static const StrokeRec char60[] = {
{ 3, char60_stroke0 },
};
/* char: 61 '=' */
static const CoordRec char61_stroke0[] = {
{ 9.5238, 57.1429 },
{ 95.2381, 57.1429 },
};
static const CoordRec char61_stroke1[] = {
{ 9.5238, 28.5714 },
{ 95.2381, 28.5714 },
};
static const StrokeRec char61[] = {
{ 2, char61_stroke0 },
{ 2, char61_stroke1 },
};
/* char: 62 '>' */
static const CoordRec char62_stroke0[] = {
{ 14.2857, 85.7143 },
{ 90.4762, 42.8571 },
{ 14.2857, 0 },
};
static const StrokeRec char62[] = {
{ 3, char62_stroke0 },
};
/* char: 63 '?' */
static const CoordRec char63_stroke0[] = {
{ 23.8095, 76.1905 },
{ 23.8095, 80.9524 },
{ 28.5714, 90.4762 },
{ 33.3333, 95.2381 },
{ 42.8571, 100 },
{ 61.9047, 100 },
{ 71.4285, 95.2381 },
{ 76.1905, 90.4762 },
{ 80.9524, 80.9524 },
{ 80.9524, 71.4286 },
{ 76.1905, 61.9048 },
{ 71.4285, 57.1429 },
{ 52.3809, 47.619 },
{ 52.3809, 33.3333 },
};
static const CoordRec char63_stroke1[] = {
{ 52.3809, 9.5238 },
{ 47.619, 4.7619 },
{ 52.3809, 0 },
{ 57.1428, 4.7619 },
{ 52.3809, 9.5238 },
};
static const StrokeRec char63[] = {
{ 14, char63_stroke0 },
{ 5, char63_stroke1 },
};
/* char: 64 '@' */
static const CoordRec char64_stroke0[] = {
{ 64.2857, 52.381 },
{ 54.7619, 57.1429 },
{ 45.2381, 57.1429 },
{ 40.4762, 47.619 },
{ 40.4762, 42.8571 },
{ 45.2381, 33.3333 },
{ 54.7619, 33.3333 },
{ 64.2857, 38.0952 },
};
static const CoordRec char64_stroke1[] = {
{ 64.2857, 57.1429 },
{ 64.2857, 38.0952 },
{ 69.0476, 33.3333 },
{ 78.5714, 33.3333 },
{ 83.3334, 42.8571 },
{ 83.3334, 47.619 },
{ 78.5714, 61.9048 },
{ 69.0476, 71.4286 },
{ 54.7619, 76.1905 },
{ 50, 76.1905 },
{ 35.7143, 71.4286 },
{ 26.1905, 61.9048 },
{ 21.4286, 47.619 },
{ 21.4286, 42.8571 },
{ 26.1905, 28.5714 },
{ 35.7143, 19.0476 },
{ 50, 14.2857 },
{ 54.7619, 14.2857 },
{ 69.0476, 19.0476 },
};
static const StrokeRec char64[] = {
{ 8, char64_stroke0 },
{ 19, char64_stroke1 },
};
/* char: 65 'A' */
static const CoordRec char65_stroke0[] = {
{ 52.3809, 100 },
{ 14.2857, 0 },
};
static const CoordRec char65_stroke1[] = {
{ 52.3809, 100 },
{ 90.4762, 0 },
};
static const CoordRec char65_stroke2[] = {
{ 28.5714, 33.3333 },
{ 76.1905, 33.3333 },
};
static const StrokeRec char65[] = {
{ 2, char65_stroke0 },
{ 2, char65_stroke1 },
{ 2, char65_stroke2 },
};
/* char: 66 'B' */
static const CoordRec char66_stroke0[] = {
{ 19.0476, 100 },
{ 19.0476, 0 },
};
static const CoordRec char66_stroke1[] = {
{ 19.0476, 100 },
{ 61.9047, 100 },
{ 76.1905, 95.2381 },
{ 80.9524, 90.4762 },
{ 85.7143, 80.9524 },
{ 85.7143, 71.4286 },
{ 80.9524, 61.9048 },
{ 76.1905, 57.1429 },
{ 61.9047, 52.381 },
};
static const CoordRec char66_stroke2[] = {
{ 19.0476, 52.381 },
{ 61.9047, 52.381 },
{ 76.1905, 47.619 },
{ 80.9524, 42.8571 },
{ 85.7143, 33.3333 },
{ 85.7143, 19.0476 },
{ 80.9524, 9.5238 },
{ 76.1905, 4.7619 },
{ 61.9047, 0 },
{ 19.0476, 0 },
};
static const StrokeRec char66[] = {
{ 2, char66_stroke0 },
{ 9, char66_stroke1 },
{ 10, char66_stroke2 },
};
/* char: 67 'C' */
static const CoordRec char67_stroke0[] = {
{ 88.0952, 76.1905 },
{ 83.3334, 85.7143 },
{ 73.8096, 95.2381 },
{ 64.2857, 100 },
{ 45.2381, 100 },
{ 35.7143, 95.2381 },
{ 26.1905, 85.7143 },
{ 21.4286, 76.1905 },
{ 16.6667, 61.9048 },
{ 16.6667, 38.0952 },
{ 21.4286, 23.8095 },
{ 26.1905, 14.2857 },
{ 35.7143, 4.7619 },
{ 45.2381, 0 },
{ 64.2857, 0 },
{ 73.8096, 4.7619 },
{ 83.3334, 14.2857 },
{ 88.0952, 23.8095 },
};
static const StrokeRec char67[] = {
{ 18, char67_stroke0 },
};
/* char: 68 'D' */
static const CoordRec char68_stroke0[] = {
{ 19.0476, 100 },
{ 19.0476, 0 },
};
static const CoordRec char68_stroke1[] = {
{ 19.0476, 100 },
{ 52.3809, 100 },
{ 66.6666, 95.2381 },
{ 76.1905, 85.7143 },
{ 80.9524, 76.1905 },
{ 85.7143, 61.9048 },
{ 85.7143, 38.0952 },
{ 80.9524, 23.8095 },
{ 76.1905, 14.2857 },
{ 66.6666, 4.7619 },
{ 52.3809, 0 },
{ 19.0476, 0 },
};
static const StrokeRec char68[] = {
{ 2, char68_stroke0 },
{ 12, char68_stroke1 },
};
/* char: 69 'E' */
static const CoordRec char69_stroke0[] = {
{ 21.4286, 100 },
{ 21.4286, 0 },
};
static const CoordRec char69_stroke1[] = {
{ 21.4286, 100 },
{ 83.3334, 100 },
};
static const CoordRec char69_stroke2[] = {
{ 21.4286, 52.381 },
{ 59.5238, 52.381 },
};
static const CoordRec char69_stroke3[] = {
{ 21.4286, 0 },
{ 83.3334, 0 },
};
static const StrokeRec char69[] = {
{ 2, char69_stroke0 },
{ 2, char69_stroke1 },
{ 2, char69_stroke2 },
{ 2, char69_stroke3 },
};
/* char: 70 'F' */
static const CoordRec char70_stroke0[] = {
{ 21.4286, 100 },
{ 21.4286, 0 },
};
static const CoordRec char70_stroke1[] = {
{ 21.4286, 100 },
{ 83.3334, 100 },
};
static const CoordRec char70_stroke2[] = {
{ 21.4286, 52.381 },
{ 59.5238, 52.381 },
};
static const StrokeRec char70[] = {
{ 2, char70_stroke0 },
{ 2, char70_stroke1 },
{ 2, char70_stroke2 },
};
/* char: 71 'G' */
static const CoordRec char71_stroke0[] = {
{ 88.0952, 76.1905 },
{ 83.3334, 85.7143 },
{ 73.8096, 95.2381 },
{ 64.2857, 100 },
{ 45.2381, 100 },
{ 35.7143, 95.2381 },
{ 26.1905, 85.7143 },
{ 21.4286, 76.1905 },
{ 16.6667, 61.9048 },
{ 16.6667, 38.0952 },
{ 21.4286, 23.8095 },
{ 26.1905, 14.2857 },
{ 35.7143, 4.7619 },
{ 45.2381, 0 },
{ 64.2857, 0 },
{ 73.8096, 4.7619 },
{ 83.3334, 14.2857 },
{ 88.0952, 23.8095 },
{ 88.0952, 38.0952 },
};
static const CoordRec char71_stroke1[] = {
{ 64.2857, 38.0952 },
{ 88.0952, 38.0952 },
};
static const StrokeRec char71[] = {
{ 19, char71_stroke0 },
{ 2, char71_stroke1 },
};
/* char: 72 'H' */
static const CoordRec char72_stroke0[] = {
{ 19.0476, 100 },
{ 19.0476, 0 },
};
static const CoordRec char72_stroke1[] = {
{ 85.7143, 100 },
{ 85.7143, 0 },
};
static const CoordRec char72_stroke2[] = {
{ 19.0476, 52.381 },
{ 85.7143, 52.381 },
};
static const StrokeRec char72[] = {
{ 2, char72_stroke0 },
{ 2, char72_stroke1 },
{ 2, char72_stroke2 },
};
/* char: 73 'I' */
static const CoordRec char73_stroke0[] = {
{ 52.381, 100 },
{ 52.381, 0 },
};
static const StrokeRec char73[] = {
{ 2, char73_stroke0 },
};
/* char: 74 'J' */
static const CoordRec char74_stroke0[] = {
{ 76.1905, 100 },
{ 76.1905, 23.8095 },
{ 71.4286, 9.5238 },
{ 66.6667, 4.7619 },
{ 57.1429, 0 },
{ 47.6191, 0 },
{ 38.0953, 4.7619 },
{ 33.3334, 9.5238 },
{ 28.5715, 23.8095 },
{ 28.5715, 33.3333 },
};
static const StrokeRec char74[] = {
{ 10, char74_stroke0 },
};
/* char: 75 'K' */
static const CoordRec char75_stroke0[] = {
{ 19.0476, 100 },
{ 19.0476, 0 },
};
static const CoordRec char75_stroke1[] = {
{ 85.7143, 100 },
{ 19.0476, 33.3333 },
};
static const CoordRec char75_stroke2[] = {
{ 42.8571, 57.1429 },
{ 85.7143, 0 },
};
static const StrokeRec char75[] = {
{ 2, char75_stroke0 },
{ 2, char75_stroke1 },
{ 2, char75_stroke2 },
};
/* char: 76 'L' */
static const CoordRec char76_stroke0[] = {
{ 23.8095, 100 },
{ 23.8095, 0 },
};
static const CoordRec char76_stroke1[] = {
{ 23.8095, 0 },
{ 80.9524, 0 },
};
static const StrokeRec char76[] = {
{ 2, char76_stroke0 },
{ 2, char76_stroke1 },
};
/* char: 77 'M' */
static const CoordRec char77_stroke0[] = {
{ 14.2857, 100 },
{ 14.2857, 0 },
};
static const CoordRec char77_stroke1[] = {
{ 14.2857, 100 },
{ 52.3809, 0 },
};
static const CoordRec char77_stroke2[] = {
{ 90.4762, 100 },
{ 52.3809, 0 },
};
static const CoordRec char77_stroke3[] = {
{ 90.4762, 100 },
{ 90.4762, 0 },
};
static const StrokeRec char77[] = {
{ 2, char77_stroke0 },
{ 2, char77_stroke1 },
{ 2, char77_stroke2 },
{ 2, char77_stroke3 },
};
/* char: 78 'N' */
static const CoordRec char78_stroke0[] = {
{ 19.0476, 100 },
{ 19.0476, 0 },
};
static const CoordRec char78_stroke1[] = {
{ 19.0476, 100 },
{ 85.7143, 0 },
};
static const CoordRec char78_stroke2[] = {
{ 85.7143, 100 },
{ 85.7143, 0 },
};
static const StrokeRec char78[] = {
{ 2, char78_stroke0 },
{ 2, char78_stroke1 },
{ 2, char78_stroke2 },
};
/* char: 79 'O' */
static const CoordRec char79_stroke0[] = {
{ 42.8571, 100 },
{ 33.3333, 95.2381 },
{ 23.8095, 85.7143 },
{ 19.0476, 76.1905 },
{ 14.2857, 61.9048 },
{ 14.2857, 38.0952 },
{ 19.0476, 23.8095 },
{ 23.8095, 14.2857 },
{ 33.3333, 4.7619 },
{ 42.8571, 0 },
{ 61.9047, 0 },
{ 71.4286, 4.7619 },
{ 80.9524, 14.2857 },
{ 85.7143, 23.8095 },
{ 90.4762, 38.0952 },
{ 90.4762, 61.9048 },
{ 85.7143, 76.1905 },
{ 80.9524, 85.7143 },
{ 71.4286, 95.2381 },
{ 61.9047, 100 },
{ 42.8571, 100 },
};
static const StrokeRec char79[] = {
{ 21, char79_stroke0 },
};
/* char: 80 'P' */
static const CoordRec char80_stroke0[] = {
{ 19.0476, 100 },
{ 19.0476, 0 },
};
static const CoordRec char80_stroke1[] = {
{ 19.0476, 100 },
{ 61.9047, 100 },
{ 76.1905, 95.2381 },
{ 80.9524, 90.4762 },
{ 85.7143, 80.9524 },
{ 85.7143, 66.6667 },
{ 80.9524, 57.1429 },
{ 76.1905, 52.381 },
{ 61.9047, 47.619 },
{ 19.0476, 47.619 },
};
static const StrokeRec char80[] = {
{ 2, char80_stroke0 },
{ 10, char80_stroke1 },
};
/* char: 81 'Q' */
static const CoordRec char81_stroke0[] = {
{ 42.8571, 100 },
{ 33.3333, 95.2381 },
{ 23.8095, 85.7143 },
{ 19.0476, 76.1905 },
{ 14.2857, 61.9048 },
{ 14.2857, 38.0952 },
{ 19.0476, 23.8095 },
{ 23.8095, 14.2857 },
{ 33.3333, 4.7619 },
{ 42.8571, 0 },
{ 61.9047, 0 },
{ 71.4286, 4.7619 },
{ 80.9524, 14.2857 },
{ 85.7143, 23.8095 },
{ 90.4762, 38.0952 },
{ 90.4762, 61.9048 },
{ 85.7143, 76.1905 },
{ 80.9524, 85.7143 },
{ 71.4286, 95.2381 },
{ 61.9047, 100 },
{ 42.8571, 100 },
};
static const CoordRec char81_stroke1[] = {
{ 57.1428, 19.0476 },
{ 85.7143, -9.5238 },
};
static const StrokeRec char81[] = {
{ 21, char81_stroke0 },
{ 2, char81_stroke1 },
};
/* char: 82 'R' */
static const CoordRec char82_stroke0[] = {
{ 19.0476, 100 },
{ 19.0476, 0 },
};
static const CoordRec char82_stroke1[] = {
{ 19.0476, 100 },
{ 61.9047, 100 },
{ 76.1905, 95.2381 },
{ 80.9524, 90.4762 },
{ 85.7143, 80.9524 },
{ 85.7143, 71.4286 },
{ 80.9524, 61.9048 },
{ 76.1905, 57.1429 },
{ 61.9047, 52.381 },
{ 19.0476, 52.381 },
};
static const CoordRec char82_stroke2[] = {
{ 52.3809, 52.381 },
{ 85.7143, 0 },
};
static const StrokeRec char82[] = {
{ 2, char82_stroke0 },
{ 10, char82_stroke1 },
{ 2, char82_stroke2 },
};
/* char: 83 'S' */
static const CoordRec char83_stroke0[] = {
{ 85.7143, 85.7143 },
{ 76.1905, 95.2381 },
{ 61.9047, 100 },
{ 42.8571, 100 },
{ 28.5714, 95.2381 },
{ 19.0476, 85.7143 },
{ 19.0476, 76.1905 },
{ 23.8095, 66.6667 },
{ 28.5714, 61.9048 },
{ 38.0952, 57.1429 },
{ 66.6666, 47.619 },
{ 76.1905, 42.8571 },
{ 80.9524, 38.0952 },
{ 85.7143, 28.5714 },
{ 85.7143, 14.2857 },
{ 76.1905, 4.7619 },
{ 61.9047, 0 },
{ 42.8571, 0 },
{ 28.5714, 4.7619 },
{ 19.0476, 14.2857 },
};
static const StrokeRec char83[] = {
{ 20, char83_stroke0 },
};
/* char: 84 'T' */
static const CoordRec char84_stroke0[] = {
{ 52.3809, 100 },
{ 52.3809, 0 },
};
static const CoordRec char84_stroke1[] = {
{ 19.0476, 100 },
{ 85.7143, 100 },
};
static const StrokeRec char84[] = {
{ 2, char84_stroke0 },
{ 2, char84_stroke1 },
};
/* char: 85 'U' */
static const CoordRec char85_stroke0[] = {
{ 19.0476, 100 },
{ 19.0476, 28.5714 },
{ 23.8095, 14.2857 },
{ 33.3333, 4.7619 },
{ 47.619, 0 },
{ 57.1428, 0 },
{ 71.4286, 4.7619 },
{ 80.9524, 14.2857 },
{ 85.7143, 28.5714 },
{ 85.7143, 100 },
};
static const StrokeRec char85[] = {
{ 10, char85_stroke0 },
};
/* char: 86 'V' */
static const CoordRec char86_stroke0[] = {
{ 14.2857, 100 },
{ 52.3809, 0 },
};
static const CoordRec char86_stroke1[] = {
{ 90.4762, 100 },
{ 52.3809, 0 },
};
static const StrokeRec char86[] = {
{ 2, char86_stroke0 },
{ 2, char86_stroke1 },
};
/* char: 87 'W' */
static const CoordRec char87_stroke0[] = {
{ 4.7619, 100 },
{ 28.5714, 0 },
};
static const CoordRec char87_stroke1[] = {
{ 52.3809, 100 },
{ 28.5714, 0 },
};
static const CoordRec char87_stroke2[] = {
{ 52.3809, 100 },
{ 76.1905, 0 },
};
static const CoordRec char87_stroke3[] = {
{ 100, 100 },
{ 76.1905, 0 },
};
static const StrokeRec char87[] = {
{ 2, char87_stroke0 },
{ 2, char87_stroke1 },
{ 2, char87_stroke2 },
{ 2, char87_stroke3 },
};
/* char: 88 'X' */
static const CoordRec char88_stroke0[] = {
{ 19.0476, 100 },
{ 85.7143, 0 },
};
static const CoordRec char88_stroke1[] = {
{ 85.7143, 100 },
{ 19.0476, 0 },
};
static const StrokeRec char88[] = {
{ 2, char88_stroke0 },
{ 2, char88_stroke1 },
};
/* char: 89 'Y' */
static const CoordRec char89_stroke0[] = {
{ 14.2857, 100 },
{ 52.3809, 52.381 },
{ 52.3809, 0 },
};
static const CoordRec char89_stroke1[] = {
{ 90.4762, 100 },
{ 52.3809, 52.381 },
};
static const StrokeRec char89[] = {
{ 3, char89_stroke0 },
{ 2, char89_stroke1 },
};
/* char: 90 'Z' */
static const CoordRec char90_stroke0[] = {
{ 85.7143, 100 },
{ 19.0476, 0 },
};
static const CoordRec char90_stroke1[] = {
{ 19.0476, 100 },
{ 85.7143, 100 },
};
static const CoordRec char90_stroke2[] = {
{ 19.0476, 0 },
{ 85.7143, 0 },
};
static const StrokeRec char90[] = {
{ 2, char90_stroke0 },
{ 2, char90_stroke1 },
{ 2, char90_stroke2 },
};
/* char: 91 '[' */
static const CoordRec char91_stroke0[] = {
{ 35.7143, 119.048 },
{ 35.7143, -33.3333 },
};
static const CoordRec char91_stroke1[] = {
{ 40.4762, 119.048 },
{ 40.4762, -33.3333 },
};
static const CoordRec char91_stroke2[] = {
{ 35.7143, 119.048 },
{ 69.0476, 119.048 },
};
static const CoordRec char91_stroke3[] = {
{ 35.7143, -33.3333 },
{ 69.0476, -33.3333 },
};
static const StrokeRec char91[] = {
{ 2, char91_stroke0 },
{ 2, char91_stroke1 },
{ 2, char91_stroke2 },
{ 2, char91_stroke3 },
};
/* char: 92 '\' */
static const CoordRec char92_stroke0[] = {
{ 19.0476, 100 },
{ 85.7143, -14.2857 },
};
static const StrokeRec char92[] = {
{ 2, char92_stroke0 },
};
/* char: 93 ']' */
static const CoordRec char93_stroke0[] = {
{ 64.2857, 119.048 },
{ 64.2857, -33.3333 },
};
static const CoordRec char93_stroke1[] = {
{ 69.0476, 119.048 },
{ 69.0476, -33.3333 },
};
static const CoordRec char93_stroke2[] = {
{ 35.7143, 119.048 },
{ 69.0476, 119.048 },
};
static const CoordRec char93_stroke3[] = {
{ 35.7143, -33.3333 },
{ 69.0476, -33.3333 },
};
static const StrokeRec char93[] = {
{ 2, char93_stroke0 },
{ 2, char93_stroke1 },
{ 2, char93_stroke2 },
{ 2, char93_stroke3 },
};
/* char: 94 '^' */
static const CoordRec char94_stroke0[] = {
{ 52.3809, 109.524 },
{ 14.2857, 42.8571 },
};
static const CoordRec char94_stroke1[] = {
{ 52.3809, 109.524 },
{ 90.4762, 42.8571 },
};
static const StrokeRec char94[] = {
{ 2, char94_stroke0 },
{ 2, char94_stroke1 },
};
/* char: 95 '_' */
static const CoordRec char95_stroke0[] = {
{ 0, -33.3333 },
{ 104.762, -33.3333 },
{ 104.762, -28.5714 },
{ 0, -28.5714 },
{ 0, -33.3333 },
};
static const StrokeRec char95[] = {
{ 5, char95_stroke0 },
};
/* char: 96 '`' */
static const CoordRec char96_stroke0[] = {
{ 42.8572, 100 },
{ 66.6667, 71.4286 },
};
static const CoordRec char96_stroke1[] = {
{ 42.8572, 100 },
{ 38.0953, 95.2381 },
{ 66.6667, 71.4286 },
};
static const StrokeRec char96[] = {
{ 2, char96_stroke0 },
{ 3, char96_stroke1 },
};
/* char: 97 'a' */
static const CoordRec char97_stroke0[] = {
{ 80.9524, 66.6667 },
{ 80.9524, 0 },
};
static const CoordRec char97_stroke1[] = {
{ 80.9524, 52.381 },
{ 71.4285, 61.9048 },
{ 61.9047, 66.6667 },
{ 47.619, 66.6667 },
{ 38.0952, 61.9048 },
{ 28.5714, 52.381 },
{ 23.8095, 38.0952 },
{ 23.8095, 28.5714 },
{ 28.5714, 14.2857 },
{ 38.0952, 4.7619 },
{ 47.619, 0 },
{ 61.9047, 0 },
{ 71.4285, 4.7619 },
{ 80.9524, 14.2857 },
};
static const StrokeRec char97[] = {
{ 2, char97_stroke0 },
{ 14, char97_stroke1 },
};
/* char: 98 'b' */
static const CoordRec char98_stroke0[] = {
{ 23.8095, 100 },
{ 23.8095, 0 },
};
static const CoordRec char98_stroke1[] = {
{ 23.8095, 52.381 },
{ 33.3333, 61.9048 },
{ 42.8571, 66.6667 },
{ 57.1428, 66.6667 },
{ 66.6666, 61.9048 },
{ 76.1905, 52.381 },
{ 80.9524, 38.0952 },
{ 80.9524, 28.5714 },
{ 76.1905, 14.2857 },
{ 66.6666, 4.7619 },
{ 57.1428, 0 },
{ 42.8571, 0 },
{ 33.3333, 4.7619 },
{ 23.8095, 14.2857 },
};
static const StrokeRec char98[] = {
{ 2, char98_stroke0 },
{ 14, char98_stroke1 },
};
/* char: 99 'c' */
static const CoordRec char99_stroke0[] = {
{ 80.9524, 52.381 },
{ 71.4285, 61.9048 },
{ 61.9047, 66.6667 },
{ 47.619, 66.6667 },
{ 38.0952, 61.9048 },
{ 28.5714, 52.381 },
{ 23.8095, 38.0952 },
{ 23.8095, 28.5714 },
{ 28.5714, 14.2857 },
{ 38.0952, 4.7619 },
{ 47.619, 0 },
{ 61.9047, 0 },
{ 71.4285, 4.7619 },
{ 80.9524, 14.2857 },
};
static const StrokeRec char99[] = {
{ 14, char99_stroke0 },
};
/* char: 100 'd' */
static const CoordRec char100_stroke0[] = {
{ 80.9524, 100 },
{ 80.9524, 0 },
};
static const CoordRec char100_stroke1[] = {
{ 80.9524, 52.381 },
{ 71.4285, 61.9048 },
{ 61.9047, 66.6667 },
{ 47.619, 66.6667 },
{ 38.0952, 61.9048 },
{ 28.5714, 52.381 },
{ 23.8095, 38.0952 },
{ 23.8095, 28.5714 },
{ 28.5714, 14.2857 },
{ 38.0952, 4.7619 },
{ 47.619, 0 },
{ 61.9047, 0 },
{ 71.4285, 4.7619 },
{ 80.9524, 14.2857 },
};
static const StrokeRec char100[] = {
{ 2, char100_stroke0 },
{ 14, char100_stroke1 },
};
/* char: 101 'e' */
static const CoordRec char101_stroke0[] = {
{ 23.8095, 38.0952 },
{ 80.9524, 38.0952 },
{ 80.9524, 47.619 },
{ 76.1905, 57.1429 },
{ 71.4285, 61.9048 },
{ 61.9047, 66.6667 },
{ 47.619, 66.6667 },
{ 38.0952, 61.9048 },
{ 28.5714, 52.381 },
{ 23.8095, 38.0952 },
{ 23.8095, 28.5714 },
{ 28.5714, 14.2857 },
{ 38.0952, 4.7619 },
{ 47.619, 0 },
{ 61.9047, 0 },
{ 71.4285, 4.7619 },
{ 80.9524, 14.2857 },
};
static const StrokeRec char101[] = {
{ 17, char101_stroke0 },
};
/* char: 102 'f' */
static const CoordRec char102_stroke0[] = {
{ 71.4286, 100 },
{ 61.9048, 100 },
{ 52.381, 95.2381 },
{ 47.6191, 80.9524 },
{ 47.6191, 0 },
};
static const CoordRec char102_stroke1[] = {
{ 33.3334, 66.6667 },
{ 66.6667, 66.6667 },
};
static const StrokeRec char102[] = {
{ 5, char102_stroke0 },
{ 2, char102_stroke1 },
};
/* char: 103 'g' */
static const CoordRec char103_stroke0[] = {
{ 80.9524, 66.6667 },
{ 80.9524, -9.5238 },
{ 76.1905, -23.8095 },
{ 71.4285, -28.5714 },
{ 61.9047, -33.3333 },
{ 47.619, -33.3333 },
{ 38.0952, -28.5714 },
};
static const CoordRec char103_stroke1[] = {
{ 80.9524, 52.381 },
{ 71.4285, 61.9048 },
{ 61.9047, 66.6667 },
{ 47.619, 66.6667 },
{ 38.0952, 61.9048 },
{ 28.5714, 52.381 },
{ 23.8095, 38.0952 },
{ 23.8095, 28.5714 },
{ 28.5714, 14.2857 },
{ 38.0952, 4.7619 },
{ 47.619, 0 },
{ 61.9047, 0 },
{ 71.4285, 4.7619 },
{ 80.9524, 14.2857 },
};
static const StrokeRec char103[] = {
{ 7, char103_stroke0 },
{ 14, char103_stroke1 },
};
/* char: 104 'h' */
static const CoordRec char104_stroke0[] = {
{ 26.1905, 100 },
{ 26.1905, 0 },
};
static const CoordRec char104_stroke1[] = {
{ 26.1905, 47.619 },
{ 40.4762, 61.9048 },
{ 50, 66.6667 },
{ 64.2857, 66.6667 },
{ 73.8095, 61.9048 },
{ 78.5715, 47.619 },
{ 78.5715, 0 },
};
static const StrokeRec char104[] = {
{ 2, char104_stroke0 },
{ 7, char104_stroke1 },
};
/* char: 105 'i' */
static const CoordRec char105_stroke0[] = {
{ 47.6191, 100 },
{ 52.381, 95.2381 },
{ 57.1429, 100 },
{ 52.381, 104.762 },
{ 47.6191, 100 },
};
static const CoordRec char105_stroke1[] = {
{ 52.381, 66.6667 },
{ 52.381, 0 },
};
static const StrokeRec char105[] = {
{ 5, char105_stroke0 },
{ 2, char105_stroke1 },
};
/* char: 106 'j' */
static const CoordRec char106_stroke0[] = {
{ 57.1429, 100 },
{ 61.9048, 95.2381 },
{ 66.6667, 100 },
{ 61.9048, 104.762 },
{ 57.1429, 100 },
};
static const CoordRec char106_stroke1[] = {
{ 61.9048, 66.6667 },
{ 61.9048, -14.2857 },
{ 57.1429, -28.5714 },
{ 47.6191, -33.3333 },
{ 38.0953, -33.3333 },
};
static const StrokeRec char106[] = {
{ 5, char106_stroke0 },
{ 5, char106_stroke1 },
};
/* char: 107 'k' */
static const CoordRec char107_stroke0[] = {
{ 26.1905, 100 },
{ 26.1905, 0 },
};
static const CoordRec char107_stroke1[] = {
{ 73.8095, 66.6667 },
{ 26.1905, 19.0476 },
};
static const CoordRec char107_stroke2[] = {
{ 45.2381, 38.0952 },
{ 78.5715, 0 },
};
static const StrokeRec char107[] = {
{ 2, char107_stroke0 },
{ 2, char107_stroke1 },
{ 2, char107_stroke2 },
};
/* char: 108 'l' */
static const CoordRec char108_stroke0[] = {
{ 52.381, 100 },
{ 52.381, 0 },
};
static const StrokeRec char108[] = {
{ 2, char108_stroke0 },
};
/* char: 109 'm' */
static const CoordRec char109_stroke0[] = {
{ 0, 66.6667 },
{ 0, 0 },
};
static const CoordRec char109_stroke1[] = {
{ 0, 47.619 },
{ 14.2857, 61.9048 },
{ 23.8095, 66.6667 },
{ 38.0952, 66.6667 },
{ 47.619, 61.9048 },
{ 52.381, 47.619 },
{ 52.381, 0 },
};
static const CoordRec char109_stroke2[] = {
{ 52.381, 47.619 },
{ 66.6667, 61.9048 },
{ 76.1905, 66.6667 },
{ 90.4762, 66.6667 },
{ 100, 61.9048 },
{ 104.762, 47.619 },
{ 104.762, 0 },
};
static const StrokeRec char109[] = {
{ 2, char109_stroke0 },
{ 7, char109_stroke1 },
{ 7, char109_stroke2 },
};
/* char: 110 'n' */
static const CoordRec char110_stroke0[] = {
{ 26.1905, 66.6667 },
{ 26.1905, 0 },
};
static const CoordRec char110_stroke1[] = {
{ 26.1905, 47.619 },
{ 40.4762, 61.9048 },
{ 50, 66.6667 },
{ 64.2857, 66.6667 },
{ 73.8095, 61.9048 },
{ 78.5715, 47.619 },
{ 78.5715, 0 },
};
static const StrokeRec char110[] = {
{ 2, char110_stroke0 },
{ 7, char110_stroke1 },
};
/* char: 111 'o' */
static const CoordRec char111_stroke0[] = {
{ 45.2381, 66.6667 },
{ 35.7143, 61.9048 },
{ 26.1905, 52.381 },
{ 21.4286, 38.0952 },
{ 21.4286, 28.5714 },
{ 26.1905, 14.2857 },
{ 35.7143, 4.7619 },
{ 45.2381, 0 },
{ 59.5238, 0 },
{ 69.0476, 4.7619 },
{ 78.5714, 14.2857 },
{ 83.3334, 28.5714 },
{ 83.3334, 38.0952 },
{ 78.5714, 52.381 },
{ 69.0476, 61.9048 },
{ 59.5238, 66.6667 },
{ 45.2381, 66.6667 },
};
static const StrokeRec char111[] = {
{ 17, char111_stroke0 },
};
/* char: 112 'p' */
static const CoordRec char112_stroke0[] = {
{ 23.8095, 66.6667 },
{ 23.8095, -33.3333 },
};
static const CoordRec char112_stroke1[] = {
{ 23.8095, 52.381 },
{ 33.3333, 61.9048 },
{ 42.8571, 66.6667 },
{ 57.1428, 66.6667 },
{ 66.6666, 61.9048 },
{ 76.1905, 52.381 },
{ 80.9524, 38.0952 },
{ 80.9524, 28.5714 },
{ 76.1905, 14.2857 },
{ 66.6666, 4.7619 },
{ 57.1428, 0 },
{ 42.8571, 0 },
{ 33.3333, 4.7619 },
{ 23.8095, 14.2857 },
};
static const StrokeRec char112[] = {
{ 2, char112_stroke0 },
{ 14, char112_stroke1 },
};
/* char: 113 'q' */
static const CoordRec char113_stroke0[] = {
{ 80.9524, 66.6667 },
{ 80.9524, -33.3333 },
};
static const CoordRec char113_stroke1[] = {
{ 80.9524, 52.381 },
{ 71.4285, 61.9048 },
{ 61.9047, 66.6667 },
{ 47.619, 66.6667 },
{ 38.0952, 61.9048 },
{ 28.5714, 52.381 },
{ 23.8095, 38.0952 },
{ 23.8095, 28.5714 },
{ 28.5714, 14.2857 },
{ 38.0952, 4.7619 },
{ 47.619, 0 },
{ 61.9047, 0 },
{ 71.4285, 4.7619 },
{ 80.9524, 14.2857 },
};
static const StrokeRec char113[] = {
{ 2, char113_stroke0 },
{ 14, char113_stroke1 },
};
/* char: 114 'r' */
static const CoordRec char114_stroke0[] = {
{ 33.3334, 66.6667 },
{ 33.3334, 0 },
};
static const CoordRec char114_stroke1[] = {
{ 33.3334, 38.0952 },
{ 38.0953, 52.381 },
{ 47.6191, 61.9048 },
{ 57.1429, 66.6667 },
{ 71.4286, 66.6667 },
};
static const StrokeRec char114[] = {
{ 2, char114_stroke0 },
{ 5, char114_stroke1 },
};
/* char: 115 's' */
static const CoordRec char115_stroke0[] = {
{ 78.5715, 52.381 },
{ 73.8095, 61.9048 },
{ 59.5238, 66.6667 },
{ 45.2381, 66.6667 },
{ 30.9524, 61.9048 },
{ 26.1905, 52.381 },
{ 30.9524, 42.8571 },
{ 40.4762, 38.0952 },
{ 64.2857, 33.3333 },
{ 73.8095, 28.5714 },
{ 78.5715, 19.0476 },
{ 78.5715, 14.2857 },
{ 73.8095, 4.7619 },
{ 59.5238, 0 },
{ 45.2381, 0 },
{ 30.9524, 4.7619 },
{ 26.1905, 14.2857 },
};
static const StrokeRec char115[] = {
{ 17, char115_stroke0 },
};
/* char: 116 't' */
static const CoordRec char116_stroke0[] = {
{ 47.6191, 100 },
{ 47.6191, 19.0476 },
{ 52.381, 4.7619 },
{ 61.9048, 0 },
{ 71.4286, 0 },
};
static const CoordRec char116_stroke1[] = {
{ 33.3334, 66.6667 },
{ 66.6667, 66.6667 },
};
static const StrokeRec char116[] = {
{ 5, char116_stroke0 },
{ 2, char116_stroke1 },
};
/* char: 117 'u' */
static const CoordRec char117_stroke0[] = {
{ 26.1905, 66.6667 },
{ 26.1905, 19.0476 },
{ 30.9524, 4.7619 },
{ 40.4762, 0 },
{ 54.7619, 0 },
{ 64.2857, 4.7619 },
{ 78.5715, 19.0476 },
};
static const CoordRec char117_stroke1[] = {
{ 78.5715, 66.6667 },
{ 78.5715, 0 },
};
static const StrokeRec char117[] = {
{ 7, char117_stroke0 },
{ 2, char117_stroke1 },
};
/* char: 118 'v' */
static const CoordRec char118_stroke0[] = {
{ 23.8095, 66.6667 },
{ 52.3809, 0 },
};
static const CoordRec char118_stroke1[] = {
{ 80.9524, 66.6667 },
{ 52.3809, 0 },
};
static const StrokeRec char118[] = {
{ 2, char118_stroke0 },
{ 2, char118_stroke1 },
};
/* char: 119 'w' */
static const CoordRec char119_stroke0[] = {
{ 14.2857, 66.6667 },
{ 33.3333, 0 },
};
static const CoordRec char119_stroke1[] = {
{ 52.3809, 66.6667 },
{ 33.3333, 0 },
};
static const CoordRec char119_stroke2[] = {
{ 52.3809, 66.6667 },
{ 71.4286, 0 },
};
static const CoordRec char119_stroke3[] = {
{ 90.4762, 66.6667 },
{ 71.4286, 0 },
};
static const StrokeRec char119[] = {
{ 2, char119_stroke0 },
{ 2, char119_stroke1 },
{ 2, char119_stroke2 },
{ 2, char119_stroke3 },
};
/* char: 120 'x' */
static const CoordRec char120_stroke0[] = {
{ 26.1905, 66.6667 },
{ 78.5715, 0 },
};
static const CoordRec char120_stroke1[] = {
{ 78.5715, 66.6667 },
{ 26.1905, 0 },
};
static const StrokeRec char120[] = {
{ 2, char120_stroke0 },
{ 2, char120_stroke1 },
};
/* char: 121 'y' */
static const CoordRec char121_stroke0[] = {
{ 26.1905, 66.6667 },
{ 54.7619, 0 },
};
static const CoordRec char121_stroke1[] = {
{ 83.3334, 66.6667 },
{ 54.7619, 0 },
{ 45.2381, -19.0476 },
{ 35.7143, -28.5714 },
{ 26.1905, -33.3333 },
{ 21.4286, -33.3333 },
};
static const StrokeRec char121[] = {
{ 2, char121_stroke0 },
{ 6, char121_stroke1 },
};
/* char: 122 'z' */
static const CoordRec char122_stroke0[] = {
{ 78.5715, 66.6667 },
{ 26.1905, 0 },
};
static const CoordRec char122_stroke1[] = {
{ 26.1905, 66.6667 },
{ 78.5715, 66.6667 },
};
static const CoordRec char122_stroke2[] = {
{ 26.1905, 0 },
{ 78.5715, 0 },
};
static const StrokeRec char122[] = {
{ 2, char122_stroke0 },
{ 2, char122_stroke1 },
{ 2, char122_stroke2 },
};
/* char: 123 '{' */
static const CoordRec char123_stroke0[] = {
{ 64.2857, 119.048 },
{ 54.7619, 114.286 },
{ 50, 109.524 },
{ 45.2381, 100 },
{ 45.2381, 90.4762 },
{ 50, 80.9524 },
{ 54.7619, 76.1905 },
{ 59.5238, 66.6667 },
{ 59.5238, 57.1429 },
{ 50, 47.619 },
};
static const CoordRec char123_stroke1[] = {
{ 54.7619, 114.286 },
{ 50, 104.762 },
{ 50, 95.2381 },
{ 54.7619, 85.7143 },
{ 59.5238, 80.9524 },
{ 64.2857, 71.4286 },
{ 64.2857, 61.9048 },
{ 59.5238, 52.381 },
{ 40.4762, 42.8571 },
{ 59.5238, 33.3333 },
{ 64.2857, 23.8095 },
{ 64.2857, 14.2857 },
{ 59.5238, 4.7619 },
{ 54.7619, 0 },
{ 50, -9.5238 },
{ 50, -19.0476 },
{ 54.7619, -28.5714 },
};
static const CoordRec char123_stroke2[] = {
{ 50, 38.0952 },
{ 59.5238, 28.5714 },
{ 59.5238, 19.0476 },
{ 54.7619, 9.5238 },
{ 50, 4.7619 },
{ 45.2381, -4.7619 },
{ 45.2381, -14.2857 },
{ 50, -23.8095 },
{ 54.7619, -28.5714 },
{ 64.2857, -33.3333 },
};
static const StrokeRec char123[] = {
{ 10, char123_stroke0 },
{ 17, char123_stroke1 },
{ 10, char123_stroke2 },
};
/* char: 124 '|' */
static const CoordRec char124_stroke0[] = {
{ 52.381, 119.048 },
{ 52.381, -33.3333 },
};
static const StrokeRec char124[] = {
{ 2, char124_stroke0 },
};
/* char: 125 '}' */
static const CoordRec char125_stroke0[] = {
{ 40.4762, 119.048 },
{ 50, 114.286 },
{ 54.7619, 109.524 },
{ 59.5238, 100 },
{ 59.5238, 90.4762 },
{ 54.7619, 80.9524 },
{ 50, 76.1905 },
{ 45.2381, 66.6667 },
{ 45.2381, 57.1429 },
{ 54.7619, 47.619 },
};
static const CoordRec char125_stroke1[] = {
{ 50, 114.286 },
{ 54.7619, 104.762 },
{ 54.7619, 95.2381 },
{ 50, 85.7143 },
{ 45.2381, 80.9524 },
{ 40.4762, 71.4286 },
{ 40.4762, 61.9048 },
{ 45.2381, 52.381 },
{ 64.2857, 42.8571 },
{ 45.2381, 33.3333 },
{ 40.4762, 23.8095 },
{ 40.4762, 14.2857 },
{ 45.2381, 4.7619 },
{ 50, 0 },
{ 54.7619, -9.5238 },
{ 54.7619, -19.0476 },
{ 50, -28.5714 },
};
static const CoordRec char125_stroke2[] = {
{ 54.7619, 38.0952 },
{ 45.2381, 28.5714 },
{ 45.2381, 19.0476 },
{ 50, 9.5238 },
{ 54.7619, 4.7619 },
{ 59.5238, -4.7619 },
{ 59.5238, -14.2857 },
{ 54.7619, -23.8095 },
{ 50, -28.5714 },
{ 40.4762, -33.3333 },
};
static const StrokeRec char125[] = {
{ 10, char125_stroke0 },
{ 17, char125_stroke1 },
{ 10, char125_stroke2 },
};
/* char: 126 '~' */
static const CoordRec char126_stroke0[] = {
{ 9.5238, 28.5714 },
{ 9.5238, 38.0952 },
{ 14.2857, 52.381 },
{ 23.8095, 57.1429 },
{ 33.3333, 57.1429 },
{ 42.8571, 52.381 },
{ 61.9048, 38.0952 },
{ 71.4286, 33.3333 },
{ 80.9524, 33.3333 },
{ 90.4762, 38.0952 },
{ 95.2381, 47.619 },
};
static const CoordRec char126_stroke1[] = {
{ 9.5238, 38.0952 },
{ 14.2857, 47.619 },
{ 23.8095, 52.381 },
{ 33.3333, 52.381 },
{ 42.8571, 47.619 },
{ 61.9048, 33.3333 },
{ 71.4286, 28.5714 },
{ 80.9524, 28.5714 },
{ 90.4762, 33.3333 },
{ 95.2381, 47.619 },
{ 95.2381, 57.1429 },
};
static const StrokeRec char126[] = {
{ 11, char126_stroke0 },
{ 11, char126_stroke1 },
};
/* char: 127 */
static const CoordRec char127_stroke0[] = {
{ 71.4286, 100 },
{ 33.3333, -33.3333 },
};
static const CoordRec char127_stroke1[] = {
{ 47.619, 66.6667 },
{ 33.3333, 61.9048 },
{ 23.8095, 52.381 },
{ 19.0476, 38.0952 },
{ 19.0476, 23.8095 },
{ 23.8095, 14.2857 },
{ 33.3333, 4.7619 },
{ 47.619, 0 },
{ 57.1428, 0 },
{ 71.4286, 4.7619 },
{ 80.9524, 14.2857 },
{ 85.7143, 28.5714 },
{ 85.7143, 42.8571 },
{ 80.9524, 52.381 },
{ 71.4286, 61.9048 },
{ 57.1428, 66.6667 },
{ 47.619, 66.6667 },
};
static const StrokeRec char127[] = {
{ 2, char127_stroke0 },
{ 17, char127_stroke1 },
};
static const StrokeCharRec chars[] = {
{ 0, /* char0 */ 0, 0, 0 },
{ 0, /* char1 */ 0, 0, 0 },
{ 0, /* char2 */ 0, 0, 0 },
{ 0, /* char3 */ 0, 0, 0 },
{ 0, /* char4 */ 0, 0, 0 },
{ 0, /* char5 */ 0, 0, 0 },
{ 0, /* char6 */ 0, 0, 0 },
{ 0, /* char7 */ 0, 0, 0 },
{ 0, /* char8 */ 0, 0, 0 },
{ 0, /* char9 */ 0, 0, 0 },
{ 0, /* char10 */ 0, 0, 0 },
{ 0, /* char11 */ 0, 0, 0 },
{ 0, /* char12 */ 0, 0, 0 },
{ 0, /* char13 */ 0, 0, 0 },
{ 0, /* char14 */ 0, 0, 0 },
{ 0, /* char15 */ 0, 0, 0 },
{ 0, /* char16 */ 0, 0, 0 },
{ 0, /* char17 */ 0, 0, 0 },
{ 0, /* char18 */ 0, 0, 0 },
{ 0, /* char19 */ 0, 0, 0 },
{ 0, /* char20 */ 0, 0, 0 },
{ 0, /* char21 */ 0, 0, 0 },
{ 0, /* char22 */ 0, 0, 0 },
{ 0, /* char23 */ 0, 0, 0 },
{ 0, /* char24 */ 0, 0, 0 },
{ 0, /* char25 */ 0, 0, 0 },
{ 0, /* char26 */ 0, 0, 0 },
{ 0, /* char27 */ 0, 0, 0 },
{ 0, /* char28 */ 0, 0, 0 },
{ 0, /* char29 */ 0, 0, 0 },
{ 0, /* char30 */ 0, 0, 0 },
{ 0, /* char31 */ 0, 0, 0 },
{ 0, /* char32 */ 0, 52.381, 104.762 },
{ 2, char33, 52.381, 104.762 },
{ 2, char34, 52.381, 104.762 },
{ 4, char35, 52.381, 104.762 },
{ 3, char36, 52.381, 104.762 },
{ 3, char37, 52.381, 104.762 },
{ 1, char38, 52.381, 104.762 },
{ 1, char39, 52.381, 104.762 },
{ 1, char40, 52.381, 104.762 },
{ 1, char41, 52.381, 104.762 },
{ 3, char42, 52.381, 104.762 },
{ 2, char43, 52.381, 104.762 },
{ 1, char44, 52.381, 104.762 },
{ 1, char45, 52.381, 104.762 },
{ 1, char46, 52.381, 104.762 },
{ 1, char47, 52.381, 104.762 },
{ 1, char48, 52.381, 104.762 },
{ 1, char49, 52.381, 104.762 },
{ 1, char50, 52.381, 104.762 },
{ 1, char51, 52.381, 104.762 },
{ 2, char52, 52.381, 104.762 },
{ 1, char53, 52.381, 104.762 },
{ 1, char54, 52.381, 104.762 },
{ 2, char55, 52.381, 104.762 },
{ 1, char56, 52.381, 104.762 },
{ 1, char57, 52.381, 104.762 },
{ 2, char58, 52.381, 104.762 },
{ 2, char59, 52.381, 104.762 },
{ 1, char60, 52.381, 104.762 },
{ 2, char61, 52.381, 104.762 },
{ 1, char62, 52.381, 104.762 },
{ 2, char63, 52.381, 104.762 },
{ 2, char64, 52.381, 104.762 },
{ 3, char65, 52.381, 104.762 },
{ 3, char66, 52.381, 104.762 },
{ 1, char67, 52.381, 104.762 },
{ 2, char68, 52.381, 104.762 },
{ 4, char69, 52.381, 104.762 },
{ 3, char70, 52.381, 104.762 },
{ 2, char71, 52.381, 104.762 },
{ 3, char72, 52.381, 104.762 },
{ 1, char73, 52.381, 104.762 },
{ 1, char74, 52.381, 104.762 },
{ 3, char75, 52.381, 104.762 },
{ 2, char76, 52.381, 104.762 },
{ 4, char77, 52.381, 104.762 },
{ 3, char78, 52.381, 104.762 },
{ 1, char79, 52.381, 104.762 },
{ 2, char80, 52.381, 104.762 },
{ 2, char81, 52.381, 104.762 },
{ 3, char82, 52.381, 104.762 },
{ 1, char83, 52.381, 104.762 },
{ 2, char84, 52.381, 104.762 },
{ 1, char85, 52.381, 104.762 },
{ 2, char86, 52.381, 104.762 },
{ 4, char87, 52.381, 104.762 },
{ 2, char88, 52.381, 104.762 },
{ 2, char89, 52.381, 104.762 },
{ 3, char90, 52.381, 104.762 },
{ 4, char91, 52.381, 104.762 },
{ 1, char92, 52.381, 104.762 },
{ 4, char93, 52.381, 104.762 },
{ 2, char94, 52.381, 104.762 },
{ 1, char95, 52.381, 104.762 },
{ 2, char96, 52.381, 104.762 },
{ 2, char97, 52.381, 104.762 },
{ 2, char98, 52.381, 104.762 },
{ 1, char99, 52.381, 104.762 },
{ 2, char100, 52.381, 104.762 },
{ 1, char101, 52.381, 104.762 },
{ 2, char102, 52.381, 104.762 },
{ 2, char103, 52.381, 104.762 },
{ 2, char104, 52.381, 104.762 },
{ 2, char105, 52.381, 104.762 },
{ 2, char106, 52.381, 104.762 },
{ 3, char107, 52.381, 104.762 },
{ 1, char108, 52.381, 104.762 },
{ 3, char109, 52.381, 104.762 },
{ 2, char110, 52.381, 104.762 },
{ 1, char111, 52.381, 104.762 },
{ 2, char112, 52.381, 104.762 },
{ 2, char113, 52.381, 104.762 },
{ 2, char114, 52.381, 104.762 },
{ 1, char115, 52.381, 104.762 },
{ 2, char116, 52.381, 104.762 },
{ 2, char117, 52.381, 104.762 },
{ 2, char118, 52.381, 104.762 },
{ 4, char119, 52.381, 104.762 },
{ 2, char120, 52.381, 104.762 },
{ 2, char121, 52.381, 104.762 },
{ 3, char122, 52.381, 104.762 },
{ 3, char123, 52.381, 104.762 },
{ 1, char124, 52.381, 104.762 },
{ 3, char125, 52.381, 104.762 },
{ 2, char126, 52.381, 104.762 },
{ 2, char127, 52.381, 104.762 },
};
StrokeFontRec glutStrokeMonoRoman = { "Roman", 128, chars, 119.048, -33.3333 };
/* GENERATED FILE -- DO NOT MODIFY */
#include "glutstroke.h"
/* char: 33 '!' */
static const CoordRec char33_stroke0[] = {
{ 13.3819, 100 },
{ 13.3819, 33.3333 },
};
static const CoordRec char33_stroke1[] = {
{ 13.3819, 9.5238 },
{ 8.62, 4.7619 },
{ 13.3819, 0 },
{ 18.1438, 4.7619 },
{ 13.3819, 9.5238 },
};
static const StrokeRec char33[] = {
{ 2, char33_stroke0 },
{ 5, char33_stroke1 },
};
/* char: 34 '"' */
static const CoordRec char34_stroke0[] = {
{ 4.02, 100 },
{ 4.02, 66.6667 },
};
static const CoordRec char34_stroke1[] = {
{ 42.1152, 100 },
{ 42.1152, 66.6667 },
};
static const StrokeRec char34[] = {
{ 2, char34_stroke0 },
{ 2, char34_stroke1 },
};
/* char: 35 '#' */
static const CoordRec char35_stroke0[] = {
{ 41.2952, 119.048 },
{ 7.9619, -33.3333 },
};
static const CoordRec char35_stroke1[] = {
{ 69.8667, 119.048 },
{ 36.5333, -33.3333 },
};
static const CoordRec char35_stroke2[] = {
{ 7.9619, 57.1429 },
{ 74.6286, 57.1429 },
};
static const CoordRec char35_stroke3[] = {
{ 3.2, 28.5714 },
{ 69.8667, 28.5714 },
};
static const StrokeRec char35[] = {
{ 2, char35_stroke0 },
{ 2, char35_stroke1 },
{ 2, char35_stroke2 },
{ 2, char35_stroke3 },
};
/* char: 36 '$' */
static const CoordRec char36_stroke0[] = {
{ 28.6295, 119.048 },
{ 28.6295, -19.0476 },
};
static const CoordRec char36_stroke1[] = {
{ 47.6771, 119.048 },
{ 47.6771, -19.0476 },
};
static const CoordRec char36_stroke2[] = {
{ 71.4867, 85.7143 },
{ 61.9629, 95.2381 },
{ 47.6771, 100 },
{ 28.6295, 100 },
{ 14.3438, 95.2381 },
{ 4.82, 85.7143 },
{ 4.82, 76.1905 },
{ 9.5819, 66.6667 },
{ 14.3438, 61.9048 },
{ 23.8676, 57.1429 },
{ 52.439, 47.619 },
{ 61.9629, 42.8571 },
{ 66.7248, 38.0952 },
{ 71.4867, 28.5714 },
{ 71.4867, 14.2857 },
{ 61.9629, 4.7619 },
{ 47.6771, 0 },
{ 28.6295, 0 },
{ 14.3438, 4.7619 },
{ 4.82, 14.2857 },
};
static const StrokeRec char36[] = {
{ 2, char36_stroke0 },
{ 2, char36_stroke1 },
{ 20, char36_stroke2 },
};
/* char: 37 '%' */
static const CoordRec char37_stroke0[] = {
{ 92.0743, 100 },
{ 6.36, 0 },
};
static const CoordRec char37_stroke1[] = {
{ 30.1695, 100 },
{ 39.6933, 90.4762 },
{ 39.6933, 80.9524 },
{ 34.9314, 71.4286 },
{ 25.4076, 66.6667 },
{ 15.8838, 66.6667 },
{ 6.36, 76.1905 },
{ 6.36, 85.7143 },
{ 11.1219, 95.2381 },
{ 20.6457, 100 },
{ 30.1695, 100 },
{ 39.6933, 95.2381 },
{ 53.979, 90.4762 },
{ 68.2648, 90.4762 },
{ 82.5505, 95.2381 },
{ 92.0743, 100 },
};
static const CoordRec char37_stroke2[] = {
{ 73.0267, 33.3333 },
{ 63.5029, 28.5714 },
{ 58.741, 19.0476 },
{ 58.741, 9.5238 },
{ 68.2648, 0 },
{ 77.7886, 0 },
{ 87.3124, 4.7619 },
{ 92.0743, 14.2857 },
{ 92.0743, 23.8095 },
{ 82.5505, 33.3333 },
{ 73.0267, 33.3333 },
};
static const StrokeRec char37[] = {
{ 2, char37_stroke0 },
{ 16, char37_stroke1 },
{ 11, char37_stroke2 },
};
/* char: 38 '&' */
static const CoordRec char38_stroke0[] = {
{ 101.218, 57.1429 },
{ 101.218, 61.9048 },
{ 96.4562, 66.6667 },
{ 91.6943, 66.6667 },
{ 86.9324, 61.9048 },
{ 82.1705, 52.381 },
{ 72.6467, 28.5714 },
{ 63.1229, 14.2857 },
{ 53.599, 4.7619 },
{ 44.0752, 0 },
{ 25.0276, 0 },
{ 15.5038, 4.7619 },
{ 10.7419, 9.5238 },
{ 5.98, 19.0476 },
{ 5.98, 28.5714 },
{ 10.7419, 38.0952 },
{ 15.5038, 42.8571 },
{ 48.8371, 61.9048 },
{ 53.599, 66.6667 },
{ 58.361, 76.1905 },
{ 58.361, 85.7143 },
{ 53.599, 95.2381 },
{ 44.0752, 100 },
{ 34.5514, 95.2381 },
{ 29.7895, 85.7143 },
{ 29.7895, 76.1905 },
{ 34.5514, 61.9048 },
{ 44.0752, 47.619 },
{ 67.8848, 14.2857 },
{ 77.4086, 4.7619 },
{ 86.9324, 0 },
{ 96.4562, 0 },
{ 101.218, 4.7619 },
{ 101.218, 9.5238 },
};
static const StrokeRec char38[] = {
{ 34, char38_stroke0 },
};
/* char: 39 ''' */
static const CoordRec char39_stroke0[] = {
{ 4.44, 100 },
{ 4.44, 66.6667 },
};
static const StrokeRec char39[] = {
{ 2, char39_stroke0 },
};
/* char: 40 '(' */
static const CoordRec char40_stroke0[] = {
{ 40.9133, 119.048 },
{ 31.3895, 109.524 },
{ 21.8657, 95.2381 },
{ 12.3419, 76.1905 },
{ 7.58, 52.381 },
{ 7.58, 33.3333 },
{ 12.3419, 9.5238 },
{ 21.8657, -9.5238 },
{ 31.3895, -23.8095 },
{ 40.9133, -33.3333 },
};
static const StrokeRec char40[] = {
{ 10, char40_stroke0 },
};
/* char: 41 ')' */
static const CoordRec char41_stroke0[] = {
{ 5.28, 119.048 },
{ 14.8038, 109.524 },
{ 24.3276, 95.2381 },
{ 33.8514, 76.1905 },
{ 38.6133, 52.381 },
{ 38.6133, 33.3333 },
{ 33.8514, 9.5238 },
{ 24.3276, -9.5238 },
{ 14.8038, -23.8095 },
{ 5.28, -33.3333 },
};
static const StrokeRec char41[] = {
{ 10, char41_stroke0 },
};
/* char: 42 '*' */
static const CoordRec char42_stroke0[] = {
{ 30.7695, 71.4286 },
{ 30.7695, 14.2857 },
};
static const CoordRec char42_stroke1[] = {
{ 6.96, 57.1429 },
{ 54.579, 28.5714 },
};
static const CoordRec char42_stroke2[] = {
{ 54.579, 57.1429 },
{ 6.96, 28.5714 },
};
static const StrokeRec char42[] = {
{ 2, char42_stroke0 },
{ 2, char42_stroke1 },
{ 2, char42_stroke2 },
};
/* char: 43 '+' */
static const CoordRec char43_stroke0[] = {
{ 48.8371, 85.7143 },
{ 48.8371, 0 },
};
static const CoordRec char43_stroke1[] = {
{ 5.98, 42.8571 },
{ 91.6943, 42.8571 },
};
static const StrokeRec char43[] = {
{ 2, char43_stroke0 },
{ 2, char43_stroke1 },
};
/* char: 44 ',' */
static const CoordRec char44_stroke0[] = {
{ 18.2838, 4.7619 },
{ 13.5219, 0 },
{ 8.76, 4.7619 },
{ 13.5219, 9.5238 },
{ 18.2838, 4.7619 },
{ 18.2838, -4.7619 },
{ 13.5219, -14.2857 },
{ 8.76, -19.0476 },
};
static const StrokeRec char44[] = {
{ 8, char44_stroke0 },
};
/* char: 45 '-' */
static const CoordRec char45_stroke0[] = {
{ 7.38, 42.8571 },
{ 93.0943, 42.8571 },
};
static const StrokeRec char45[] = {
{ 2, char45_stroke0 },
};
/* char: 46 '.' */
static const CoordRec char46_stroke0[] = {
{ 13.1019, 9.5238 },
{ 8.34, 4.7619 },
{ 13.1019, 0 },
{ 17.8638, 4.7619 },
{ 13.1019, 9.5238 },
};
static const StrokeRec char46[] = {
{ 5, char46_stroke0 },
};
/* char: 47 '/' */
static const CoordRec char47_stroke0[] = {
{ 7.24, -14.2857 },
{ 73.9067, 100 },
};
static const StrokeRec char47[] = {
{ 2, char47_stroke0 },
};
/* char: 48 '0' */
static const CoordRec char48_stroke0[] = {
{ 33.5514, 100 },
{ 19.2657, 95.2381 },
{ 9.7419, 80.9524 },
{ 4.98, 57.1429 },
{ 4.98, 42.8571 },
{ 9.7419, 19.0476 },
{ 19.2657, 4.7619 },
{ 33.5514, 0 },
{ 43.0752, 0 },
{ 57.361, 4.7619 },
{ 66.8848, 19.0476 },
{ 71.6467, 42.8571 },
{ 71.6467, 57.1429 },
{ 66.8848, 80.9524 },
{ 57.361, 95.2381 },
{ 43.0752, 100 },
{ 33.5514, 100 },
};
static const StrokeRec char48[] = {
{ 17, char48_stroke0 },
};
/* char: 49 '1' */
static const CoordRec char49_stroke0[] = {
{ 11.82, 80.9524 },
{ 21.3438, 85.7143 },
{ 35.6295, 100 },
{ 35.6295, 0 },
};
static const StrokeRec char49[] = {
{ 4, char49_stroke0 },
};
/* char: 50 '2' */
static const CoordRec char50_stroke0[] = {
{ 10.1819, 76.1905 },
{ 10.1819, 80.9524 },
{ 14.9438, 90.4762 },
{ 19.7057, 95.2381 },
{ 29.2295, 100 },
{ 48.2771, 100 },
{ 57.801, 95.2381 },
{ 62.5629, 90.4762 },
{ 67.3248, 80.9524 },
{ 67.3248, 71.4286 },
{ 62.5629, 61.9048 },
{ 53.039, 47.619 },
{ 5.42, 0 },
{ 72.0867, 0 },
};
static const StrokeRec char50[] = {
{ 14, char50_stroke0 },
};
/* char: 51 '3' */
static const CoordRec char51_stroke0[] = {
{ 14.5238, 100 },
{ 66.9048, 100 },
{ 38.3333, 61.9048 },
{ 52.619, 61.9048 },
{ 62.1429, 57.1429 },
{ 66.9048, 52.381 },
{ 71.6667, 38.0952 },
{ 71.6667, 28.5714 },
{ 66.9048, 14.2857 },
{ 57.381, 4.7619 },
{ 43.0952, 0 },
{ 28.8095, 0 },
{ 14.5238, 4.7619 },
{ 9.7619, 9.5238 },
{ 5, 19.0476 },
};
static const StrokeRec char51[] = {
{ 15, char51_stroke0 },
};
/* char: 52 '4' */
static const CoordRec char52_stroke0[] = {
{ 51.499, 100 },
{ 3.88, 33.3333 },
{ 75.3086, 33.3333 },
};
static const CoordRec char52_stroke1[] = {
{ 51.499, 100 },
{ 51.499, 0 },
};
static const StrokeRec char52[] = {
{ 3, char52_stroke0 },
{ 2, char52_stroke1 },
};
/* char: 53 '5' */
static const CoordRec char53_stroke0[] = {
{ 62.0029, 100 },
{ 14.3838, 100 },
{ 9.6219, 57.1429 },
{ 14.3838, 61.9048 },
{ 28.6695, 66.6667 },
{ 42.9552, 66.6667 },
{ 57.241, 61.9048 },
{ 66.7648, 52.381 },
{ 71.5267, 38.0952 },
{ 71.5267, 28.5714 },
{ 66.7648, 14.2857 },
{ 57.241, 4.7619 },
{ 42.9552, 0 },
{ 28.6695, 0 },
{ 14.3838, 4.7619 },
{ 9.6219, 9.5238 },
{ 4.86, 19.0476 },
};
static const StrokeRec char53[] = {
{ 17, char53_stroke0 },
};
/* char: 54 '6' */
static const CoordRec char54_stroke0[] = {
{ 62.7229, 85.7143 },
{ 57.961, 95.2381 },
{ 43.6752, 100 },
{ 34.1514, 100 },
{ 19.8657, 95.2381 },
{ 10.3419, 80.9524 },
{ 5.58, 57.1429 },
{ 5.58, 33.3333 },
{ 10.3419, 14.2857 },
{ 19.8657, 4.7619 },
{ 34.1514, 0 },
{ 38.9133, 0 },
{ 53.199, 4.7619 },
{ 62.7229, 14.2857 },
{ 67.4848, 28.5714 },
{ 67.4848, 33.3333 },
{ 62.7229, 47.619 },
{ 53.199, 57.1429 },
{ 38.9133, 61.9048 },
{ 34.1514, 61.9048 },
{ 19.8657, 57.1429 },
{ 10.3419, 47.619 },
{ 5.58, 33.3333 },
};
static const StrokeRec char54[] = {
{ 23, char54_stroke0 },
};
/* char: 55 '7' */
static const CoordRec char55_stroke0[] = {
{ 72.2267, 100 },
{ 24.6076, 0 },
};
static const CoordRec char55_stroke1[] = {
{ 5.56, 100 },
{ 72.2267, 100 },
};
static const StrokeRec char55[] = {
{ 2, char55_stroke0 },
{ 2, char55_stroke1 },
};
/* char: 56 '8' */
static const CoordRec char56_stroke0[] = {
{ 29.4095, 100 },
{ 15.1238, 95.2381 },
{ 10.3619, 85.7143 },
{ 10.3619, 76.1905 },
{ 15.1238, 66.6667 },
{ 24.6476, 61.9048 },
{ 43.6952, 57.1429 },
{ 57.981, 52.381 },
{ 67.5048, 42.8571 },
{ 72.2667, 33.3333 },
{ 72.2667, 19.0476 },
{ 67.5048, 9.5238 },
{ 62.7429, 4.7619 },
{ 48.4571, 0 },
{ 29.4095, 0 },
{ 15.1238, 4.7619 },
{ 10.3619, 9.5238 },
{ 5.6, 19.0476 },
{ 5.6, 33.3333 },
{ 10.3619, 42.8571 },
{ 19.8857, 52.381 },
{ 34.1714, 57.1429 },
{ 53.219, 61.9048 },
{ 62.7429, 66.6667 },
{ 67.5048, 76.1905 },
{ 67.5048, 85.7143 },
{ 62.7429, 95.2381 },
{ 48.4571, 100 },
{ 29.4095, 100 },
};
static const StrokeRec char56[] = {
{ 29, char56_stroke0 },
};
/* char: 57 '9' */
static const CoordRec char57_stroke0[] = {
{ 68.5048, 66.6667 },
{ 63.7429, 52.381 },
{ 54.219, 42.8571 },
{ 39.9333, 38.0952 },
{ 35.1714, 38.0952 },
{ 20.8857, 42.8571 },
{ 11.3619, 52.381 },
{ 6.6, 66.6667 },
{ 6.6, 71.4286 },
{ 11.3619, 85.7143 },
{ 20.8857, 95.2381 },
{ 35.1714, 100 },
{ 39.9333, 100 },
{ 54.219, 95.2381 },
{ 63.7429, 85.7143 },
{ 68.5048, 66.6667 },
{ 68.5048, 42.8571 },
{ 63.7429, 19.0476 },
{ 54.219, 4.7619 },
{ 39.9333, 0 },
{ 30.4095, 0 },
{ 16.1238, 4.7619 },
{ 11.3619, 14.2857 },
};
static const StrokeRec char57[] = {
{ 23, char57_stroke0 },
};
/* char: 58 ':' */
static const CoordRec char58_stroke0[] = {
{ 14.0819, 66.6667 },
{ 9.32, 61.9048 },
{ 14.0819, 57.1429 },
{ 18.8438, 61.9048 },
{ 14.0819, 66.6667 },
};
static const CoordRec char58_stroke1[] = {
{ 14.0819, 9.5238 },
{ 9.32, 4.7619 },
{ 14.0819, 0 },
{ 18.8438, 4.7619 },
{ 14.0819, 9.5238 },
};
static const StrokeRec char58[] = {
{ 5, char58_stroke0 },
{ 5, char58_stroke1 },
};
/* char: 59 ';' */
static const CoordRec char59_stroke0[] = {
{ 12.9619, 66.6667 },
{ 8.2, 61.9048 },
{ 12.9619, 57.1429 },
{ 17.7238, 61.9048 },
{ 12.9619, 66.6667 },
};
static const CoordRec char59_stroke1[] = {
{ 17.7238, 4.7619 },
{ 12.9619, 0 },
{ 8.2, 4.7619 },
{ 12.9619, 9.5238 },
{ 17.7238, 4.7619 },
{ 17.7238, -4.7619 },
{ 12.9619, -14.2857 },
{ 8.2, -19.0476 },
};
static const StrokeRec char59[] = {
{ 5, char59_stroke0 },
{ 8, char59_stroke1 },
};
/* char: 60 '<' */
static const CoordRec char60_stroke0[] = {
{ 79.2505, 85.7143 },
{ 3.06, 42.8571 },
{ 79.2505, 0 },
};
static const StrokeRec char60[] = {
{ 3, char60_stroke0 },
};
/* char: 61 '=' */
static const CoordRec char61_stroke0[] = {
{ 5.7, 57.1429 },
{ 91.4143, 57.1429 },
};
static const CoordRec char61_stroke1[] = {
{ 5.7, 28.5714 },
{ 91.4143, 28.5714 },
};
static const StrokeRec char61[] = {
{ 2, char61_stroke0 },
{ 2, char61_stroke1 },
};
/* char: 62 '>' */
static const CoordRec char62_stroke0[] = {
{ 2.78, 85.7143 },
{ 78.9705, 42.8571 },
{ 2.78, 0 },
};
static const StrokeRec char62[] = {
{ 3, char62_stroke0 },
};
/* char: 63 '?' */
static const CoordRec char63_stroke0[] = {
{ 8.42, 76.1905 },
{ 8.42, 80.9524 },
{ 13.1819, 90.4762 },
{ 17.9438, 95.2381 },
{ 27.4676, 100 },
{ 46.5152, 100 },
{ 56.039, 95.2381 },
{ 60.801, 90.4762 },
{ 65.5629, 80.9524 },
{ 65.5629, 71.4286 },
{ 60.801, 61.9048 },
{ 56.039, 57.1429 },
{ 36.9914, 47.619 },
{ 36.9914, 33.3333 },
};
static const CoordRec char63_stroke1[] = {
{ 36.9914, 9.5238 },
{ 32.2295, 4.7619 },
{ 36.9914, 0 },
{ 41.7533, 4.7619 },
{ 36.9914, 9.5238 },
};
static const StrokeRec char63[] = {
{ 14, char63_stroke0 },
{ 5, char63_stroke1 },
};
/* char: 64 '@' */
static const CoordRec char64_stroke0[] = {
{ 49.2171, 52.381 },
{ 39.6933, 57.1429 },
{ 30.1695, 57.1429 },
{ 25.4076, 47.619 },
{ 25.4076, 42.8571 },
{ 30.1695, 33.3333 },
{ 39.6933, 33.3333 },
{ 49.2171, 38.0952 },
};
static const CoordRec char64_stroke1[] = {
{ 49.2171, 57.1429 },
{ 49.2171, 38.0952 },
{ 53.979, 33.3333 },
{ 63.5029, 33.3333 },
{ 68.2648, 42.8571 },
{ 68.2648, 47.619 },
{ 63.5029, 61.9048 },
{ 53.979, 71.4286 },
{ 39.6933, 76.1905 },
{ 34.9314, 76.1905 },
{ 20.6457, 71.4286 },
{ 11.1219, 61.9048 },
{ 6.36, 47.619 },
{ 6.36, 42.8571 },
{ 11.1219, 28.5714 },
{ 20.6457, 19.0476 },
{ 34.9314, 14.2857 },
{ 39.6933, 14.2857 },
{ 53.979, 19.0476 },
};
static const StrokeRec char64[] = {
{ 8, char64_stroke0 },
{ 19, char64_stroke1 },
};
/* char: 65 'A' */
static const CoordRec char65_stroke0[] = {
{ 40.5952, 100 },
{ 2.5, 0 },
};
static const CoordRec char65_stroke1[] = {
{ 40.5952, 100 },
{ 78.6905, 0 },
};
static const CoordRec char65_stroke2[] = {
{ 16.7857, 33.3333 },
{ 64.4048, 33.3333 },
};
static const StrokeRec char65[] = {
{ 2, char65_stroke0 },
{ 2, char65_stroke1 },
{ 2, char65_stroke2 },
};
/* char: 66 'B' */
static const CoordRec char66_stroke0[] = {
{ 11.42, 100 },
{ 11.42, 0 },
};
static const CoordRec char66_stroke1[] = {
{ 11.42, 100 },
{ 54.2771, 100 },
{ 68.5629, 95.2381 },
{ 73.3248, 90.4762 },
{ 78.0867, 80.9524 },
{ 78.0867, 71.4286 },
{ 73.3248, 61.9048 },
{ 68.5629, 57.1429 },
{ 54.2771, 52.381 },
};
static const CoordRec char66_stroke2[] = {
{ 11.42, 52.381 },
{ 54.2771, 52.381 },
{ 68.5629, 47.619 },
{ 73.3248, 42.8571 },
{ 78.0867, 33.3333 },
{ 78.0867, 19.0476 },
{ 73.3248, 9.5238 },
{ 68.5629, 4.7619 },
{ 54.2771, 0 },
{ 11.42, 0 },
};
static const StrokeRec char66[] = {
{ 2, char66_stroke0 },
{ 9, char66_stroke1 },
{ 10, char66_stroke2 },
};
/* char: 67 'C' */
static const CoordRec char67_stroke0[] = {
{ 78.0886, 76.1905 },
{ 73.3267, 85.7143 },
{ 63.8029, 95.2381 },
{ 54.279, 100 },
{ 35.2314, 100 },
{ 25.7076, 95.2381 },
{ 16.1838, 85.7143 },
{ 11.4219, 76.1905 },
{ 6.66, 61.9048 },
{ 6.66, 38.0952 },
{ 11.4219, 23.8095 },
{ 16.1838, 14.2857 },
{ 25.7076, 4.7619 },
{ 35.2314, 0 },
{ 54.279, 0 },
{ 63.8029, 4.7619 },
{ 73.3267, 14.2857 },
{ 78.0886, 23.8095 },
};
static const StrokeRec char67[] = {
{ 18, char67_stroke0 },
};
/* char: 68 'D' */
static const CoordRec char68_stroke0[] = {
{ 11.96, 100 },
{ 11.96, 0 },
};
static const CoordRec char68_stroke1[] = {
{ 11.96, 100 },
{ 45.2933, 100 },
{ 59.579, 95.2381 },
{ 69.1029, 85.7143 },
{ 73.8648, 76.1905 },
{ 78.6267, 61.9048 },
{ 78.6267, 38.0952 },
{ 73.8648, 23.8095 },
{ 69.1029, 14.2857 },
{ 59.579, 4.7619 },
{ 45.2933, 0 },
{ 11.96, 0 },
};
static const StrokeRec char68[] = {
{ 2, char68_stroke0 },
{ 12, char68_stroke1 },
};
/* char: 69 'E' */
static const CoordRec char69_stroke0[] = {
{ 11.42, 100 },
{ 11.42, 0 },
};
static const CoordRec char69_stroke1[] = {
{ 11.42, 100 },
{ 73.3248, 100 },
};
static const CoordRec char69_stroke2[] = {
{ 11.42, 52.381 },
{ 49.5152, 52.381 },
};
static const CoordRec char69_stroke3[] = {
{ 11.42, 0 },
{ 73.3248, 0 },
};
static const StrokeRec char69[] = {
{ 2, char69_stroke0 },
{ 2, char69_stroke1 },
{ 2, char69_stroke2 },
{ 2, char69_stroke3 },
};
/* char: 70 'F' */
static const CoordRec char70_stroke0[] = {
{ 11.42, 100 },
{ 11.42, 0 },
};
static const CoordRec char70_stroke1[] = {
{ 11.42, 100 },
{ 73.3248, 100 },
};
static const CoordRec char70_stroke2[] = {
{ 11.42, 52.381 },
{ 49.5152, 52.381 },
};
static const StrokeRec char70[] = {
{ 2, char70_stroke0 },
{ 2, char70_stroke1 },
{ 2, char70_stroke2 },
};
/* char: 71 'G' */
static const CoordRec char71_stroke0[] = {
{ 78.4886, 76.1905 },
{ 73.7267, 85.7143 },
{ 64.2029, 95.2381 },
{ 54.679, 100 },
{ 35.6314, 100 },
{ 26.1076, 95.2381 },
{ 16.5838, 85.7143 },
{ 11.8219, 76.1905 },
{ 7.06, 61.9048 },
{ 7.06, 38.0952 },
{ 11.8219, 23.8095 },
{ 16.5838, 14.2857 },
{ 26.1076, 4.7619 },
{ 35.6314, 0 },
{ 54.679, 0 },
{ 64.2029, 4.7619 },
{ 73.7267, 14.2857 },
{ 78.4886, 23.8095 },
{ 78.4886, 38.0952 },
};
static const CoordRec char71_stroke1[] = {
{ 54.679, 38.0952 },
{ 78.4886, 38.0952 },
};
static const StrokeRec char71[] = {
{ 19, char71_stroke0 },
{ 2, char71_stroke1 },
};
/* char: 72 'H' */
static const CoordRec char72_stroke0[] = {
{ 11.42, 100 },
{ 11.42, 0 },
};
static const CoordRec char72_stroke1[] = {
{ 78.0867, 100 },
{ 78.0867, 0 },
};
static const CoordRec char72_stroke2[] = {
{ 11.42, 52.381 },
{ 78.0867, 52.381 },
};
static const StrokeRec char72[] = {
{ 2, char72_stroke0 },
{ 2, char72_stroke1 },
{ 2, char72_stroke2 },
};
/* char: 73 'I' */
static const CoordRec char73_stroke0[] = {
{ 10.86, 100 },
{ 10.86, 0 },
};
static const StrokeRec char73[] = {
{ 2, char73_stroke0 },
};
/* char: 74 'J' */
static const CoordRec char74_stroke0[] = {
{ 50.119, 100 },
{ 50.119, 23.8095 },
{ 45.3571, 9.5238 },
{ 40.5952, 4.7619 },
{ 31.0714, 0 },
{ 21.5476, 0 },
{ 12.0238, 4.7619 },
{ 7.2619, 9.5238 },
{ 2.5, 23.8095 },
{ 2.5, 33.3333 },
};
static const StrokeRec char74[] = {
{ 10, char74_stroke0 },
};
/* char: 75 'K' */
static const CoordRec char75_stroke0[] = {
{ 11.28, 100 },
{ 11.28, 0 },
};
static const CoordRec char75_stroke1[] = {
{ 77.9467, 100 },
{ 11.28, 33.3333 },
};
static const CoordRec char75_stroke2[] = {
{ 35.0895, 57.1429 },
{ 77.9467, 0 },
};
static const StrokeRec char75[] = {
{ 2, char75_stroke0 },
{ 2, char75_stroke1 },
{ 2, char75_stroke2 },
};
/* char: 76 'L' */
static const CoordRec char76_stroke0[] = {
{ 11.68, 100 },
{ 11.68, 0 },
};
static const CoordRec char76_stroke1[] = {
{ 11.68, 0 },
{ 68.8229, 0 },
};
static const StrokeRec char76[] = {
{ 2, char76_stroke0 },
{ 2, char76_stroke1 },
};
/* char: 77 'M' */
static const CoordRec char77_stroke0[] = {
{ 10.86, 100 },
{ 10.86, 0 },
};
static const CoordRec char77_stroke1[] = {
{ 10.86, 100 },
{ 48.9552, 0 },
};
static const CoordRec char77_stroke2[] = {
{ 87.0505, 100 },
{ 48.9552, 0 },
};
static const CoordRec char77_stroke3[] = {
{ 87.0505, 100 },
{ 87.0505, 0 },
};
static const StrokeRec char77[] = {
{ 2, char77_stroke0 },
{ 2, char77_stroke1 },
{ 2, char77_stroke2 },
{ 2, char77_stroke3 },
};
/* char: 78 'N' */
static const CoordRec char78_stroke0[] = {
{ 11.14, 100 },
{ 11.14, 0 },
};
static const CoordRec char78_stroke1[] = {
{ 11.14, 100 },
{ 77.8067, 0 },
};
static const CoordRec char78_stroke2[] = {
{ 77.8067, 100 },
{ 77.8067, 0 },
};
static const StrokeRec char78[] = {
{ 2, char78_stroke0 },
{ 2, char78_stroke1 },
{ 2, char78_stroke2 },
};
/* char: 79 'O' */
static const CoordRec char79_stroke0[] = {
{ 34.8114, 100 },
{ 25.2876, 95.2381 },
{ 15.7638, 85.7143 },
{ 11.0019, 76.1905 },
{ 6.24, 61.9048 },
{ 6.24, 38.0952 },
{ 11.0019, 23.8095 },
{ 15.7638, 14.2857 },
{ 25.2876, 4.7619 },
{ 34.8114, 0 },
{ 53.859, 0 },
{ 63.3829, 4.7619 },
{ 72.9067, 14.2857 },
{ 77.6686, 23.8095 },
{ 82.4305, 38.0952 },
{ 82.4305, 61.9048 },
{ 77.6686, 76.1905 },
{ 72.9067, 85.7143 },
{ 63.3829, 95.2381 },
{ 53.859, 100 },
{ 34.8114, 100 },
};
static const StrokeRec char79[] = {
{ 21, char79_stroke0 },
};
/* char: 80 'P' */
static const CoordRec char80_stroke0[] = {
{ 12.1, 100 },
{ 12.1, 0 },
};
static const CoordRec char80_stroke1[] = {
{ 12.1, 100 },
{ 54.9571, 100 },
{ 69.2429, 95.2381 },
{ 74.0048, 90.4762 },
{ 78.7667, 80.9524 },
{ 78.7667, 66.6667 },
{ 74.0048, 57.1429 },
{ 69.2429, 52.381 },
{ 54.9571, 47.619 },
{ 12.1, 47.619 },
};
static const StrokeRec char80[] = {
{ 2, char80_stroke0 },
{ 10, char80_stroke1 },
};
/* char: 81 'Q' */
static const CoordRec char81_stroke0[] = {
{ 33.8714, 100 },
{ 24.3476, 95.2381 },
{ 14.8238, 85.7143 },
{ 10.0619, 76.1905 },
{ 5.3, 61.9048 },
{ 5.3, 38.0952 },
{ 10.0619, 23.8095 },
{ 14.8238, 14.2857 },
{ 24.3476, 4.7619 },
{ 33.8714, 0 },
{ 52.919, 0 },
{ 62.4429, 4.7619 },
{ 71.9667, 14.2857 },
{ 76.7286, 23.8095 },
{ 81.4905, 38.0952 },
{ 81.4905, 61.9048 },
{ 76.7286, 76.1905 },
{ 71.9667, 85.7143 },
{ 62.4429, 95.2381 },
{ 52.919, 100 },
{ 33.8714, 100 },
};
static const CoordRec char81_stroke1[] = {
{ 48.1571, 19.0476 },
{ 76.7286, -9.5238 },
};
static const StrokeRec char81[] = {
{ 21, char81_stroke0 },
{ 2, char81_stroke1 },
};
/* char: 82 'R' */
static const CoordRec char82_stroke0[] = {
{ 11.68, 100 },
{ 11.68, 0 },
};
static const CoordRec char82_stroke1[] = {
{ 11.68, 100 },
{ 54.5371, 100 },
{ 68.8229, 95.2381 },
{ 73.5848, 90.4762 },
{ 78.3467, 80.9524 },
{ 78.3467, 71.4286 },
{ 73.5848, 61.9048 },
{ 68.8229, 57.1429 },
{ 54.5371, 52.381 },
{ 11.68, 52.381 },
};
static const CoordRec char82_stroke2[] = {
{ 45.0133, 52.381 },
{ 78.3467, 0 },
};
static const StrokeRec char82[] = {
{ 2, char82_stroke0 },
{ 10, char82_stroke1 },
{ 2, char82_stroke2 },
};
/* char: 83 'S' */
static const CoordRec char83_stroke0[] = {
{ 74.6667, 85.7143 },
{ 65.1429, 95.2381 },
{ 50.8571, 100 },
{ 31.8095, 100 },
{ 17.5238, 95.2381 },
{ 8, 85.7143 },
{ 8, 76.1905 },
{ 12.7619, 66.6667 },
{ 17.5238, 61.9048 },
{ 27.0476, 57.1429 },
{ 55.619, 47.619 },
{ 65.1429, 42.8571 },
{ 69.9048, 38.0952 },
{ 74.6667, 28.5714 },
{ 74.6667, 14.2857 },
{ 65.1429, 4.7619 },
{ 50.8571, 0 },
{ 31.8095, 0 },
{ 17.5238, 4.7619 },
{ 8, 14.2857 },
};
static const StrokeRec char83[] = {
{ 20, char83_stroke0 },
};
/* char: 84 'T' */
static const CoordRec char84_stroke0[] = {
{ 35.6933, 100 },
{ 35.6933, 0 },
};
static const CoordRec char84_stroke1[] = {
{ 2.36, 100 },
{ 69.0267, 100 },
};
static const StrokeRec char84[] = {
{ 2, char84_stroke0 },
{ 2, char84_stroke1 },
};
/* char: 85 'U' */
static const CoordRec char85_stroke0[] = {
{ 11.54, 100 },
{ 11.54, 28.5714 },
{ 16.3019, 14.2857 },
{ 25.8257, 4.7619 },
{ 40.1114, 0 },
{ 49.6352, 0 },
{ 63.921, 4.7619 },
{ 73.4448, 14.2857 },
{ 78.2067, 28.5714 },
{ 78.2067, 100 },
};
static const StrokeRec char85[] = {
{ 10, char85_stroke0 },
};
/* char: 86 'V' */
static const CoordRec char86_stroke0[] = {
{ 2.36, 100 },
{ 40.4552, 0 },
};
static const CoordRec char86_stroke1[] = {
{ 78.5505, 100 },
{ 40.4552, 0 },
};
static const StrokeRec char86[] = {
{ 2, char86_stroke0 },
{ 2, char86_stroke1 },
};
/* char: 87 'W' */
static const CoordRec char87_stroke0[] = {
{ 2.22, 100 },
{ 26.0295, 0 },
};
static const CoordRec char87_stroke1[] = {
{ 49.839, 100 },
{ 26.0295, 0 },
};
static const CoordRec char87_stroke2[] = {
{ 49.839, 100 },
{ 73.6486, 0 },
};
static const CoordRec char87_stroke3[] = {
{ 97.4581, 100 },
{ 73.6486, 0 },
};
static const StrokeRec char87[] = {
{ 2, char87_stroke0 },
{ 2, char87_stroke1 },
{ 2, char87_stroke2 },
{ 2, char87_stroke3 },
};
/* char: 88 'X' */
static const CoordRec char88_stroke0[] = {
{ 2.5, 100 },
{ 69.1667, 0 },
};
static const CoordRec char88_stroke1[] = {
{ 69.1667, 100 },
{ 2.5, 0 },
};
static const StrokeRec char88[] = {
{ 2, char88_stroke0 },
{ 2, char88_stroke1 },
};
/* char: 89 'Y' */
static const CoordRec char89_stroke0[] = {
{ 1.52, 100 },
{ 39.6152, 52.381 },
{ 39.6152, 0 },
};
static const CoordRec char89_stroke1[] = {
{ 77.7105, 100 },
{ 39.6152, 52.381 },
};
static const StrokeRec char89[] = {
{ 3, char89_stroke0 },
{ 2, char89_stroke1 },
};
/* char: 90 'Z' */
static const CoordRec char90_stroke0[] = {
{ 69.1667, 100 },
{ 2.5, 0 },
};
static const CoordRec char90_stroke1[] = {
{ 2.5, 100 },
{ 69.1667, 100 },
};
static const CoordRec char90_stroke2[] = {
{ 2.5, 0 },
{ 69.1667, 0 },
};
static const StrokeRec char90[] = {
{ 2, char90_stroke0 },
{ 2, char90_stroke1 },
{ 2, char90_stroke2 },
};
/* char: 91 '[' */
static const CoordRec char91_stroke0[] = {
{ 7.78, 119.048 },
{ 7.78, -33.3333 },
};
static const CoordRec char91_stroke1[] = {
{ 12.5419, 119.048 },
{ 12.5419, -33.3333 },
};
static const CoordRec char91_stroke2[] = {
{ 7.78, 119.048 },
{ 41.1133, 119.048 },
};
static const CoordRec char91_stroke3[] = {
{ 7.78, -33.3333 },
{ 41.1133, -33.3333 },
};
static const StrokeRec char91[] = {
{ 2, char91_stroke0 },
{ 2, char91_stroke1 },
{ 2, char91_stroke2 },
{ 2, char91_stroke3 },
};
/* char: 92 '\' */
static const CoordRec char92_stroke0[] = {
{ 5.84, 100 },
{ 72.5067, -14.2857 },
};
static const StrokeRec char92[] = {
{ 2, char92_stroke0 },
};
/* char: 93 ']' */
static const CoordRec char93_stroke0[] = {
{ 33.0114, 119.048 },
{ 33.0114, -33.3333 },
};
static const CoordRec char93_stroke1[] = {
{ 37.7733, 119.048 },
{ 37.7733, -33.3333 },
};
static const CoordRec char93_stroke2[] = {
{ 4.44, 119.048 },
{ 37.7733, 119.048 },
};
static const CoordRec char93_stroke3[] = {
{ 4.44, -33.3333 },
{ 37.7733, -33.3333 },
};
static const StrokeRec char93[] = {
{ 2, char93_stroke0 },
{ 2, char93_stroke1 },
{ 2, char93_stroke2 },
{ 2, char93_stroke3 },
};
/* char: 94 '^' */
static const CoordRec char94_stroke0[] = {
{ 44.0752, 109.524 },
{ 5.98, 42.8571 },
};
static const CoordRec char94_stroke1[] = {
{ 44.0752, 109.524 },
{ 82.1705, 42.8571 },
};
static const StrokeRec char94[] = {
{ 2, char94_stroke0 },
{ 2, char94_stroke1 },
};
/* char: 95 '_' */
static const CoordRec char95_stroke0[] = {
{ -1.1, -33.3333 },
{ 103.662, -33.3333 },
{ 103.662, -28.5714 },
{ -1.1, -28.5714 },
{ -1.1, -33.3333 },
};
static const StrokeRec char95[] = {
{ 5, char95_stroke0 },
};
/* char: 96 '`' */
static const CoordRec char96_stroke0[] = {
{ 33.0219, 100 },
{ 56.8314, 71.4286 },
};
static const CoordRec char96_stroke1[] = {
{ 33.0219, 100 },
{ 28.26, 95.2381 },
{ 56.8314, 71.4286 },
};
static const StrokeRec char96[] = {
{ 2, char96_stroke0 },
{ 3, char96_stroke1 },
};
/* char: 97 'a' */
static const CoordRec char97_stroke0[] = {
{ 63.8229, 66.6667 },
{ 63.8229, 0 },
};
static const CoordRec char97_stroke1[] = {
{ 63.8229, 52.381 },
{ 54.299, 61.9048 },
{ 44.7752, 66.6667 },
{ 30.4895, 66.6667 },
{ 20.9657, 61.9048 },
{ 11.4419, 52.381 },
{ 6.68, 38.0952 },
{ 6.68, 28.5714 },
{ 11.4419, 14.2857 },
{ 20.9657, 4.7619 },
{ 30.4895, 0 },
{ 44.7752, 0 },
{ 54.299, 4.7619 },
{ 63.8229, 14.2857 },
};
static const StrokeRec char97[] = {
{ 2, char97_stroke0 },
{ 14, char97_stroke1 },
};
/* char: 98 'b' */
static const CoordRec char98_stroke0[] = {
{ 8.76, 100 },
{ 8.76, 0 },
};
static const CoordRec char98_stroke1[] = {
{ 8.76, 52.381 },
{ 18.2838, 61.9048 },
{ 27.8076, 66.6667 },
{ 42.0933, 66.6667 },
{ 51.6171, 61.9048 },
{ 61.141, 52.381 },
{ 65.9029, 38.0952 },
{ 65.9029, 28.5714 },
{ 61.141, 14.2857 },
{ 51.6171, 4.7619 },
{ 42.0933, 0 },
{ 27.8076, 0 },
{ 18.2838, 4.7619 },
{ 8.76, 14.2857 },
};
static const StrokeRec char98[] = {
{ 2, char98_stroke0 },
{ 14, char98_stroke1 },
};
/* char: 99 'c' */
static const CoordRec char99_stroke0[] = {
{ 62.6629, 52.381 },
{ 53.139, 61.9048 },
{ 43.6152, 66.6667 },
{ 29.3295, 66.6667 },
{ 19.8057, 61.9048 },
{ 10.2819, 52.381 },
{ 5.52, 38.0952 },
{ 5.52, 28.5714 },
{ 10.2819, 14.2857 },
{ 19.8057, 4.7619 },
{ 29.3295, 0 },
{ 43.6152, 0 },
{ 53.139, 4.7619 },
{ 62.6629, 14.2857 },
};
static const StrokeRec char99[] = {
{ 14, char99_stroke0 },
};
/* char: 100 'd' */
static const CoordRec char100_stroke0[] = {
{ 61.7829, 100 },
{ 61.7829, 0 },
};
static const CoordRec char100_stroke1[] = {
{ 61.7829, 52.381 },
{ 52.259, 61.9048 },
{ 42.7352, 66.6667 },
{ 28.4495, 66.6667 },
{ 18.9257, 61.9048 },
{ 9.4019, 52.381 },
{ 4.64, 38.0952 },
{ 4.64, 28.5714 },
{ 9.4019, 14.2857 },
{ 18.9257, 4.7619 },
{ 28.4495, 0 },
{ 42.7352, 0 },
{ 52.259, 4.7619 },
{ 61.7829, 14.2857 },
};
static const StrokeRec char100[] = {
{ 2, char100_stroke0 },
{ 14, char100_stroke1 },
};
/* char: 101 'e' */
static const CoordRec char101_stroke0[] = {
{ 5.72, 38.0952 },
{ 62.8629, 38.0952 },
{ 62.8629, 47.619 },
{ 58.101, 57.1429 },
{ 53.339, 61.9048 },
{ 43.8152, 66.6667 },
{ 29.5295, 66.6667 },
{ 20.0057, 61.9048 },
{ 10.4819, 52.381 },
{ 5.72, 38.0952 },
{ 5.72, 28.5714 },
{ 10.4819, 14.2857 },
{ 20.0057, 4.7619 },
{ 29.5295, 0 },
{ 43.8152, 0 },
{ 53.339, 4.7619 },
{ 62.8629, 14.2857 },
};
static const StrokeRec char101[] = {
{ 17, char101_stroke0 },
};
/* char: 102 'f' */
static const CoordRec char102_stroke0[] = {
{ 38.7752, 100 },
{ 29.2514, 100 },
{ 19.7276, 95.2381 },
{ 14.9657, 80.9524 },
{ 14.9657, 0 },
};
static const CoordRec char102_stroke1[] = {
{ 0.68, 66.6667 },
{ 34.0133, 66.6667 },
};
static const StrokeRec char102[] = {
{ 5, char102_stroke0 },
{ 2, char102_stroke1 },
};
/* char: 103 'g' */
static const CoordRec char103_stroke0[] = {
{ 62.5029, 66.6667 },
{ 62.5029, -9.5238 },
{ 57.741, -23.8095 },
{ 52.979, -28.5714 },
{ 43.4552, -33.3333 },
{ 29.1695, -33.3333 },
{ 19.6457, -28.5714 },
};
static const CoordRec char103_stroke1[] = {
{ 62.5029, 52.381 },
{ 52.979, 61.9048 },
{ 43.4552, 66.6667 },
{ 29.1695, 66.6667 },
{ 19.6457, 61.9048 },
{ 10.1219, 52.381 },
{ 5.36, 38.0952 },
{ 5.36, 28.5714 },
{ 10.1219, 14.2857 },
{ 19.6457, 4.7619 },
{ 29.1695, 0 },
{ 43.4552, 0 },
{ 52.979, 4.7619 },
{ 62.5029, 14.2857 },
};
static const StrokeRec char103[] = {
{ 7, char103_stroke0 },
{ 14, char103_stroke1 },
};
/* char: 104 'h' */
static const CoordRec char104_stroke0[] = {
{ 9.6, 100 },
{ 9.6, 0 },
};
static const CoordRec char104_stroke1[] = {
{ 9.6, 47.619 },
{ 23.8857, 61.9048 },
{ 33.4095, 66.6667 },
{ 47.6952, 66.6667 },
{ 57.219, 61.9048 },
{ 61.981, 47.619 },
{ 61.981, 0 },
};
static const StrokeRec char104[] = {
{ 2, char104_stroke0 },
{ 7, char104_stroke1 },
};
/* char: 105 'i' */
static const CoordRec char105_stroke0[] = {
{ 10.02, 100 },
{ 14.7819, 95.2381 },
{ 19.5438, 100 },
{ 14.7819, 104.762 },
{ 10.02, 100 },
};
static const CoordRec char105_stroke1[] = {
{ 14.7819, 66.6667 },
{ 14.7819, 0 },
};
static const StrokeRec char105[] = {
{ 5, char105_stroke0 },
{ 2, char105_stroke1 },
};
/* char: 106 'j' */
static const CoordRec char106_stroke0[] = {
{ 17.3876, 100 },
{ 22.1495, 95.2381 },
{ 26.9114, 100 },
{ 22.1495, 104.762 },
{ 17.3876, 100 },
};
static const CoordRec char106_stroke1[] = {
{ 22.1495, 66.6667 },
{ 22.1495, -14.2857 },
{ 17.3876, -28.5714 },
{ 7.8638, -33.3333 },
{ -1.66, -33.3333 },
};
static const StrokeRec char106[] = {
{ 5, char106_stroke0 },
{ 5, char106_stroke1 },
};
/* char: 107 'k' */
static const CoordRec char107_stroke0[] = {
{ 9.6, 100 },
{ 9.6, 0 },
};
static const CoordRec char107_stroke1[] = {
{ 57.219, 66.6667 },
{ 9.6, 19.0476 },
};
static const CoordRec char107_stroke2[] = {
{ 28.6476, 38.0952 },
{ 61.981, 0 },
};
static const StrokeRec char107[] = {
{ 2, char107_stroke0 },
{ 2, char107_stroke1 },
{ 2, char107_stroke2 },
};
/* char: 108 'l' */
static const CoordRec char108_stroke0[] = {
{ 10.02, 100 },
{ 10.02, 0 },
};
static const StrokeRec char108[] = {
{ 2, char108_stroke0 },
};
/* char: 109 'm' */
static const CoordRec char109_stroke0[] = {
{ 9.6, 66.6667 },
{ 9.6, 0 },
};
static const CoordRec char109_stroke1[] = {
{ 9.6, 47.619 },
{ 23.8857, 61.9048 },
{ 33.4095, 66.6667 },
{ 47.6952, 66.6667 },
{ 57.219, 61.9048 },
{ 61.981, 47.619 },
{ 61.981, 0 },
};
static const CoordRec char109_stroke2[] = {
{ 61.981, 47.619 },
{ 76.2667, 61.9048 },
{ 85.7905, 66.6667 },
{ 100.076, 66.6667 },
{ 109.6, 61.9048 },
{ 114.362, 47.619 },
{ 114.362, 0 },
};
static const StrokeRec char109[] = {
{ 2, char109_stroke0 },
{ 7, char109_stroke1 },
{ 7, char109_stroke2 },
};
/* char: 110 'n' */
static const CoordRec char110_stroke0[] = {
{ 9.18, 66.6667 },
{ 9.18, 0 },
};
static const CoordRec char110_stroke1[] = {
{ 9.18, 47.619 },
{ 23.4657, 61.9048 },
{ 32.9895, 66.6667 },
{ 47.2752, 66.6667 },
{ 56.799, 61.9048 },
{ 61.561, 47.619 },
{ 61.561, 0 },
};
static const StrokeRec char110[] = {
{ 2, char110_stroke0 },
{ 7, char110_stroke1 },
};
/* char: 111 'o' */
static const CoordRec char111_stroke0[] = {
{ 28.7895, 66.6667 },
{ 19.2657, 61.9048 },
{ 9.7419, 52.381 },
{ 4.98, 38.0952 },
{ 4.98, 28.5714 },
{ 9.7419, 14.2857 },
{ 19.2657, 4.7619 },
{ 28.7895, 0 },
{ 43.0752, 0 },
{ 52.599, 4.7619 },
{ 62.1229, 14.2857 },
{ 66.8848, 28.5714 },
{ 66.8848, 38.0952 },
{ 62.1229, 52.381 },
{ 52.599, 61.9048 },
{ 43.0752, 66.6667 },
{ 28.7895, 66.6667 },
};
static const StrokeRec char111[] = {
{ 17, char111_stroke0 },
};
/* char: 112 'p' */
static const CoordRec char112_stroke0[] = {
{ 9.46, 66.6667 },
{ 9.46, -33.3333 },
};
static const CoordRec char112_stroke1[] = {
{ 9.46, 52.381 },
{ 18.9838, 61.9048 },
{ 28.5076, 66.6667 },
{ 42.7933, 66.6667 },
{ 52.3171, 61.9048 },
{ 61.841, 52.381 },
{ 66.6029, 38.0952 },
{ 66.6029, 28.5714 },
{ 61.841, 14.2857 },
{ 52.3171, 4.7619 },
{ 42.7933, 0 },
{ 28.5076, 0 },
{ 18.9838, 4.7619 },
{ 9.46, 14.2857 },
};
static const StrokeRec char112[] = {
{ 2, char112_stroke0 },
{ 14, char112_stroke1 },
};
/* char: 113 'q' */
static const CoordRec char113_stroke0[] = {
{ 61.9829, 66.6667 },
{ 61.9829, -33.3333 },
};
static const CoordRec char113_stroke1[] = {
{ 61.9829, 52.381 },
{ 52.459, 61.9048 },
{ 42.9352, 66.6667 },
{ 28.6495, 66.6667 },
{ 19.1257, 61.9048 },
{ 9.6019, 52.381 },
{ 4.84, 38.0952 },
{ 4.84, 28.5714 },
{ 9.6019, 14.2857 },
{ 19.1257, 4.7619 },
{ 28.6495, 0 },
{ 42.9352, 0 },
{ 52.459, 4.7619 },
{ 61.9829, 14.2857 },
};
static const StrokeRec char113[] = {
{ 2, char113_stroke0 },
{ 14, char113_stroke1 },
};
/* char: 114 'r' */
static const CoordRec char114_stroke0[] = {
{ 9.46, 66.6667 },
{ 9.46, 0 },
};
static const CoordRec char114_stroke1[] = {
{ 9.46, 38.0952 },
{ 14.2219, 52.381 },
{ 23.7457, 61.9048 },
{ 33.2695, 66.6667 },
{ 47.5552, 66.6667 },
};
static const StrokeRec char114[] = {
{ 2, char114_stroke0 },
{ 5, char114_stroke1 },
};
/* char: 115 's' */
static const CoordRec char115_stroke0[] = {
{ 57.081, 52.381 },
{ 52.319, 61.9048 },
{ 38.0333, 66.6667 },
{ 23.7476, 66.6667 },
{ 9.4619, 61.9048 },
{ 4.7, 52.381 },
{ 9.4619, 42.8571 },
{ 18.9857, 38.0952 },
{ 42.7952, 33.3333 },
{ 52.319, 28.5714 },
{ 57.081, 19.0476 },
{ 57.081, 14.2857 },
{ 52.319, 4.7619 },
{ 38.0333, 0 },
{ 23.7476, 0 },
{ 9.4619, 4.7619 },
{ 4.7, 14.2857 },
};
static const StrokeRec char115[] = {
{ 17, char115_stroke0 },
};
/* char: 116 't' */
static const CoordRec char116_stroke0[] = {
{ 14.8257, 100 },
{ 14.8257, 19.0476 },
{ 19.5876, 4.7619 },
{ 29.1114, 0 },
{ 38.6352, 0 },
};
static const CoordRec char116_stroke1[] = {
{ 0.54, 66.6667 },
{ 33.8733, 66.6667 },
};
static const StrokeRec char116[] = {
{ 5, char116_stroke0 },
{ 2, char116_stroke1 },
};
/* char: 117 'u' */
static const CoordRec char117_stroke0[] = {
{ 9.46, 66.6667 },
{ 9.46, 19.0476 },
{ 14.2219, 4.7619 },
{ 23.7457, 0 },
{ 38.0314, 0 },
{ 47.5552, 4.7619 },
{ 61.841, 19.0476 },
};
static const CoordRec char117_stroke1[] = {
{ 61.841, 66.6667 },
{ 61.841, 0 },
};
static const StrokeRec char117[] = {
{ 7, char117_stroke0 },
{ 2, char117_stroke1 },
};
/* char: 118 'v' */
static const CoordRec char118_stroke0[] = {
{ 1.8, 66.6667 },
{ 30.3714, 0 },
};
static const CoordRec char118_stroke1[] = {
{ 58.9429, 66.6667 },
{ 30.3714, 0 },
};
static const StrokeRec char118[] = {
{ 2, char118_stroke0 },
{ 2, char118_stroke1 },
};
/* char: 119 'w' */
static const CoordRec char119_stroke0[] = {
{ 2.5, 66.6667 },
{ 21.5476, 0 },
};
static const CoordRec char119_stroke1[] = {
{ 40.5952, 66.6667 },
{ 21.5476, 0 },
};
static const CoordRec char119_stroke2[] = {
{ 40.5952, 66.6667 },
{ 59.6429, 0 },
};
static const CoordRec char119_stroke3[] = {
{ 78.6905, 66.6667 },
{ 59.6429, 0 },
};
static const StrokeRec char119[] = {
{ 2, char119_stroke0 },
{ 2, char119_stroke1 },
{ 2, char119_stroke2 },
{ 2, char119_stroke3 },
};
/* char: 120 'x' */
static const CoordRec char120_stroke0[] = {
{ 1.66, 66.6667 },
{ 54.041, 0 },
};
static const CoordRec char120_stroke1[] = {
{ 54.041, 66.6667 },
{ 1.66, 0 },
};
static const StrokeRec char120[] = {
{ 2, char120_stroke0 },
{ 2, char120_stroke1 },
};
/* char: 121 'y' */
static const CoordRec char121_stroke0[] = {
{ 6.5619, 66.6667 },
{ 35.1333, 0 },
};
static const CoordRec char121_stroke1[] = {
{ 63.7048, 66.6667 },
{ 35.1333, 0 },
{ 25.6095, -19.0476 },
{ 16.0857, -28.5714 },
{ 6.5619, -33.3333 },
{ 1.8, -33.3333 },
};
static const StrokeRec char121[] = {
{ 2, char121_stroke0 },
{ 6, char121_stroke1 },
};
/* char: 122 'z' */
static const CoordRec char122_stroke0[] = {
{ 56.821, 66.6667 },
{ 4.44, 0 },
};
static const CoordRec char122_stroke1[] = {
{ 4.44, 66.6667 },
{ 56.821, 66.6667 },
};
static const CoordRec char122_stroke2[] = {
{ 4.44, 0 },
{ 56.821, 0 },
};
static const StrokeRec char122[] = {
{ 2, char122_stroke0 },
{ 2, char122_stroke1 },
{ 2, char122_stroke2 },
};
/* char: 123 '{' */
static const CoordRec char123_stroke0[] = {
{ 31.1895, 119.048 },
{ 21.6657, 114.286 },
{ 16.9038, 109.524 },
{ 12.1419, 100 },
{ 12.1419, 90.4762 },
{ 16.9038, 80.9524 },
{ 21.6657, 76.1905 },
{ 26.4276, 66.6667 },
{ 26.4276, 57.1429 },
{ 16.9038, 47.619 },
};
static const CoordRec char123_stroke1[] = {
{ 21.6657, 114.286 },
{ 16.9038, 104.762 },
{ 16.9038, 95.2381 },
{ 21.6657, 85.7143 },
{ 26.4276, 80.9524 },
{ 31.1895, 71.4286 },
{ 31.1895, 61.9048 },
{ 26.4276, 52.381 },
{ 7.38, 42.8571 },
{ 26.4276, 33.3333 },
{ 31.1895, 23.8095 },
{ 31.1895, 14.2857 },
{ 26.4276, 4.7619 },
{ 21.6657, 0 },
{ 16.9038, -9.5238 },
{ 16.9038, -19.0476 },
{ 21.6657, -28.5714 },
};
static const CoordRec char123_stroke2[] = {
{ 16.9038, 38.0952 },
{ 26.4276, 28.5714 },
{ 26.4276, 19.0476 },
{ 21.6657, 9.5238 },
{ 16.9038, 4.7619 },
{ 12.1419, -4.7619 },
{ 12.1419, -14.2857 },
{ 16.9038, -23.8095 },
{ 21.6657, -28.5714 },
{ 31.1895, -33.3333 },
};
static const StrokeRec char123[] = {
{ 10, char123_stroke0 },
{ 17, char123_stroke1 },
{ 10, char123_stroke2 },
};
/* char: 124 '|' */
static const CoordRec char124_stroke0[] = {
{ 11.54, 119.048 },
{ 11.54, -33.3333 },
};
static const StrokeRec char124[] = {
{ 2, char124_stroke0 },
};
/* char: 125 '}' */
static const CoordRec char125_stroke0[] = {
{ 9.18, 119.048 },
{ 18.7038, 114.286 },
{ 23.4657, 109.524 },
{ 28.2276, 100 },
{ 28.2276, 90.4762 },
{ 23.4657, 80.9524 },
{ 18.7038, 76.1905 },
{ 13.9419, 66.6667 },
{ 13.9419, 57.1429 },
{ 23.4657, 47.619 },
};
static const CoordRec char125_stroke1[] = {
{ 18.7038, 114.286 },
{ 23.4657, 104.762 },
{ 23.4657, 95.2381 },
{ 18.7038, 85.7143 },
{ 13.9419, 80.9524 },
{ 9.18, 71.4286 },
{ 9.18, 61.9048 },
{ 13.9419, 52.381 },
{ 32.9895, 42.8571 },
{ 13.9419, 33.3333 },
{ 9.18, 23.8095 },
{ 9.18, 14.2857 },
{ 13.9419, 4.7619 },
{ 18.7038, 0 },
{ 23.4657, -9.5238 },
{ 23.4657, -19.0476 },
{ 18.7038, -28.5714 },
};
static const CoordRec char125_stroke2[] = {
{ 23.4657, 38.0952 },
{ 13.9419, 28.5714 },
{ 13.9419, 19.0476 },
{ 18.7038, 9.5238 },
{ 23.4657, 4.7619 },
{ 28.2276, -4.7619 },
{ 28.2276, -14.2857 },
{ 23.4657, -23.8095 },
{ 18.7038, -28.5714 },
{ 9.18, -33.3333 },
};
static const StrokeRec char125[] = {
{ 10, char125_stroke0 },
{ 17, char125_stroke1 },
{ 10, char125_stroke2 },
};
/* char: 126 '~' */
static const CoordRec char126_stroke0[] = {
{ 2.92, 28.5714 },
{ 2.92, 38.0952 },
{ 7.6819, 52.381 },
{ 17.2057, 57.1429 },
{ 26.7295, 57.1429 },
{ 36.2533, 52.381 },
{ 55.301, 38.0952 },
{ 64.8248, 33.3333 },
{ 74.3486, 33.3333 },
{ 83.8724, 38.0952 },
{ 88.6343, 47.619 },
};
static const CoordRec char126_stroke1[] = {
{ 2.92, 38.0952 },
{ 7.6819, 47.619 },
{ 17.2057, 52.381 },
{ 26.7295, 52.381 },
{ 36.2533, 47.619 },
{ 55.301, 33.3333 },
{ 64.8248, 28.5714 },
{ 74.3486, 28.5714 },
{ 83.8724, 33.3333 },
{ 88.6343, 47.619 },
{ 88.6343, 57.1429 },
};
static const StrokeRec char126[] = {
{ 11, char126_stroke0 },
{ 11, char126_stroke1 },
};
/* char: 127 */
static const CoordRec char127_stroke0[] = {
{ 52.381, 100 },
{ 14.2857, -33.3333 },
};
static const CoordRec char127_stroke1[] = {
{ 28.5714, 66.6667 },
{ 14.2857, 61.9048 },
{ 4.7619, 52.381 },
{ 0, 38.0952 },
{ 0, 23.8095 },
{ 4.7619, 14.2857 },
{ 14.2857, 4.7619 },
{ 28.5714, 0 },
{ 38.0952, 0 },
{ 52.381, 4.7619 },
{ 61.9048, 14.2857 },
{ 66.6667, 28.5714 },
{ 66.6667, 42.8571 },
{ 61.9048, 52.381 },
{ 52.381, 61.9048 },
{ 38.0952, 66.6667 },
{ 28.5714, 66.6667 },
};
static const StrokeRec char127[] = {
{ 2, char127_stroke0 },
{ 17, char127_stroke1 },
};
static const StrokeCharRec chars[] = {
{ 0, /* char0 */ 0, 0, 0 },
{ 0, /* char1 */ 0, 0, 0 },
{ 0, /* char2 */ 0, 0, 0 },
{ 0, /* char3 */ 0, 0, 0 },
{ 0, /* char4 */ 0, 0, 0 },
{ 0, /* char5 */ 0, 0, 0 },
{ 0, /* char6 */ 0, 0, 0 },
{ 0, /* char7 */ 0, 0, 0 },
{ 0, /* char8 */ 0, 0, 0 },
{ 0, /* char9 */ 0, 0, 0 },
{ 0, /* char10 */ 0, 0, 0 },
{ 0, /* char11 */ 0, 0, 0 },
{ 0, /* char12 */ 0, 0, 0 },
{ 0, /* char13 */ 0, 0, 0 },
{ 0, /* char14 */ 0, 0, 0 },
{ 0, /* char15 */ 0, 0, 0 },
{ 0, /* char16 */ 0, 0, 0 },
{ 0, /* char17 */ 0, 0, 0 },
{ 0, /* char18 */ 0, 0, 0 },
{ 0, /* char19 */ 0, 0, 0 },
{ 0, /* char20 */ 0, 0, 0 },
{ 0, /* char21 */ 0, 0, 0 },
{ 0, /* char22 */ 0, 0, 0 },
{ 0, /* char23 */ 0, 0, 0 },
{ 0, /* char24 */ 0, 0, 0 },
{ 0, /* char25 */ 0, 0, 0 },
{ 0, /* char26 */ 0, 0, 0 },
{ 0, /* char27 */ 0, 0, 0 },
{ 0, /* char28 */ 0, 0, 0 },
{ 0, /* char29 */ 0, 0, 0 },
{ 0, /* char30 */ 0, 0, 0 },
{ 0, /* char31 */ 0, 0, 0 },
{ 0, /* char32 */ 0, 52.381, 104.762 },
{ 2, char33, 13.3819, 26.6238 },
{ 2, char34, 23.0676, 51.4352 },
{ 4, char35, 36.5333, 79.4886 },
{ 3, char36, 38.1533, 76.2067 },
{ 3, char37, 49.2171, 96.5743 },
{ 1, char38, 53.599, 101.758 },
{ 1, char39, 4.44, 13.62 },
{ 1, char40, 21.8657, 47.1733 },
{ 1, char41, 24.3276, 47.5333 },
{ 3, char42, 30.7695, 59.439 },
{ 2, char43, 48.8371, 97.2543 },
{ 1, char44, 13.5219, 26.0638 },
{ 1, char45, 50.2371, 100.754 },
{ 1, char46, 13.1019, 26.4838 },
{ 1, char47, 40.5733, 82.1067 },
{ 1, char48, 38.3133, 77.0667 },
{ 1, char49, 30.8676, 66.5295 },
{ 1, char50, 38.7533, 77.6467 },
{ 1, char51, 38.3333, 77.0467 },
{ 2, char52, 37.2133, 80.1686 },
{ 1, char53, 38.1933, 77.6867 },
{ 1, char54, 34.1514, 73.8048 },
{ 2, char55, 38.8933, 77.2267 },
{ 1, char56, 38.9333, 77.6667 },
{ 1, char57, 39.9333, 74.0648 },
{ 2, char58, 14.0819, 26.2238 },
{ 2, char59, 12.9619, 26.3038 },
{ 1, char60, 41.1552, 81.6105 },
{ 2, char61, 48.5571, 97.2543 },
{ 1, char62, 40.8752, 81.6105 },
{ 2, char63, 36.9914, 73.9029 },
{ 2, char64, 34.9314, 74.3648 },
{ 3, char65, 40.5952, 80.4905 },
{ 3, char66, 44.7533, 83.6267 },
{ 1, char67, 39.9933, 84.4886 },
{ 2, char68, 45.2933, 85.2867 },
{ 4, char69, 39.9914, 78.1848 },
{ 3, char70, 39.9914, 78.7448 },
{ 2, char71, 40.3933, 89.7686 },
{ 3, char72, 44.7533, 89.0867 },
{ 1, char73, 10.86, 21.3 },
{ 1, char74, 31.0714, 59.999 },
{ 3, char75, 44.6133, 79.3267 },
{ 2, char76, 40.2514, 71.3229 },
{ 4, char77, 48.9552, 97.2105 },
{ 3, char78, 44.4733, 88.8067 },
{ 1, char79, 44.3352, 88.8305 },
{ 2, char80, 45.4333, 85.6667 },
{ 2, char81, 43.3952, 88.0905 },
{ 3, char82, 45.0133, 82.3667 },
{ 1, char83, 41.3333, 80.8267 },
{ 2, char84, 35.6933, 71.9467 },
{ 1, char85, 44.8733, 89.4867 },
{ 2, char86, 40.4552, 81.6105 },
{ 4, char87, 49.839, 100.518 },
{ 2, char88, 35.8333, 72.3667 },
{ 2, char89, 39.6152, 79.6505 },
{ 3, char90, 35.8333, 73.7467 },
{ 4, char91, 22.0657, 46.1133 },
{ 1, char92, 39.1733, 78.2067 },
{ 4, char93, 23.4876, 46.3933 },
{ 2, char94, 44.0752, 90.2305 },
{ 1, char95, 51.281, 104.062 },
{ 2, char96, 42.5457, 83.5714 },
{ 2, char97, 35.2514, 66.6029 },
{ 2, char98, 37.3314, 70.4629 },
{ 1, char99, 34.0914, 68.9229 },
{ 2, char100, 33.2114, 70.2629 },
{ 1, char101, 34.2914, 68.5229 },
{ 2, char102, 14.9657, 38.6552 },
{ 2, char103, 33.9314, 70.9829 },
{ 2, char104, 33.4095, 71.021 },
{ 2, char105, 14.7819, 28.8638 },
{ 2, char106, 17.3876, 36.2314 },
{ 3, char107, 33.4095, 62.521 },
{ 1, char108, 10.02, 19.34 },
{ 3, char109, 61.981, 123.962 },
{ 2, char110, 32.9895, 70.881 },
{ 1, char111, 33.5514, 71.7448 },
{ 2, char112, 38.0314, 70.8029 },
{ 2, char113, 33.4114, 70.7429 },
{ 2, char114, 23.7457, 49.4952 },
{ 1, char115, 28.5095, 62.321 },
{ 2, char116, 14.8257, 39.3152 },
{ 2, char117, 33.2695, 71.161 },
{ 2, char118, 30.3714, 60.6029 },
{ 4, char119, 40.5952, 80.4905 },
{ 2, char120, 25.4695, 56.401 },
{ 2, char121, 35.1333, 66.0648 },
{ 3, char122, 28.2495, 61.821 },
{ 3, char123, 21.6657, 41.6295 },
{ 1, char124, 11.54, 23.78 },
{ 3, char125, 18.7038, 41.4695 },
{ 2, char126, 45.7771, 91.2743 },
{ 2, char127, 33.3333, 66.6667 },
};
StrokeFontRec glutStrokeRoman = { "Roman", 128, chars, 119.048, -33.3333 };
/* Copyright (c) Mark J. Kilgard, 1994, 1997. */
/**
(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 <math.h>
#include "glutint.h"
/* Some <math.h> files do not define M_PI... */
#ifndef M_PI
#define M_PI 3.14159265358979323846
#endif
static GLUquadricObj *quadObj;
#define QUAD_OBJ_INIT() { if(!quadObj) initQuadObj(); }
static void
initQuadObj(void)
{
quadObj = gluNewQuadric();
if (!quadObj)
__glutFatalError("out of memory.");
}
/* CENTRY */
void APIENTRY
glutWireSphere(GLdouble radius, GLint slices, GLint stacks)
{
QUAD_OBJ_INIT();
gluQuadricDrawStyle(quadObj, GLU_LINE);
gluQuadricNormals(quadObj, GLU_SMOOTH);
/* If we ever changed/used the texture or orientation state
of quadObj, we'd need to change it to the defaults here
with gluQuadricTexture and/or gluQuadricOrientation. */
gluSphere(quadObj, radius, slices, stacks);
}
void APIENTRY
glutSolidSphere(GLdouble radius, GLint slices, GLint stacks)
{
QUAD_OBJ_INIT();
gluQuadricDrawStyle(quadObj, GLU_FILL);
gluQuadricNormals(quadObj, GLU_SMOOTH);
/* If we ever changed/used the texture or orientation state
of quadObj, we'd need to change it to the defaults here
with gluQuadricTexture and/or gluQuadricOrientation. */
gluSphere(quadObj, radius, slices, stacks);
}
void APIENTRY
glutWireCone(GLdouble base, GLdouble height,
GLint slices, GLint stacks)
{
QUAD_OBJ_INIT();
gluQuadricDrawStyle(quadObj, GLU_LINE);
gluQuadricNormals(quadObj, GLU_SMOOTH);
/* If we ever changed/used the texture or orientation state
of quadObj, we'd need to change it to the defaults here
with gluQuadricTexture and/or gluQuadricOrientation. */
gluCylinder(quadObj, base, 0.0, height, slices, stacks);
}
void APIENTRY
glutSolidCone(GLdouble base, GLdouble height,
GLint slices, GLint stacks)
{
QUAD_OBJ_INIT();
gluQuadricDrawStyle(quadObj, GLU_FILL);
gluQuadricNormals(quadObj, GLU_SMOOTH);
/* If we ever changed/used the texture or orientation state
of quadObj, we'd need to change it to the defaults here
with gluQuadricTexture and/or gluQuadricOrientation. */
gluCylinder(quadObj, base, 0.0, height, slices, stacks);
}
/* ENDCENTRY */
static void
drawBox(GLfloat size, GLenum type)
{
static GLfloat n[6][3] =
{
{-1.0, 0.0, 0.0},
{0.0, 1.0, 0.0},
{1.0, 0.0, 0.0},
{0.0, -1.0, 0.0},
{0.0, 0.0, 1.0},
{0.0, 0.0, -1.0}
};
static GLint faces[6][4] =
{
{0, 1, 2, 3},
{3, 2, 6, 7},
{7, 6, 5, 4},
{4, 5, 1, 0},
{5, 6, 2, 1},
{7, 4, 0, 3}
};
GLfloat v[8][3];
GLint i;
v[0][0] = v[1][0] = v[2][0] = v[3][0] = -size / 2;
v[4][0] = v[5][0] = v[6][0] = v[7][0] = size / 2;
v[0][1] = v[1][1] = v[4][1] = v[5][1] = -size / 2;
v[2][1] = v[3][1] = v[6][1] = v[7][1] = size / 2;
v[0][2] = v[3][2] = v[4][2] = v[7][2] = -size / 2;
v[1][2] = v[2][2] = v[5][2] = v[6][2] = size / 2;
for (i = 5; i >= 0; i--) {
glBegin(type);
glNormal3fv(&n[i][0]);
glVertex3fv(&v[faces[i][0]][0]);
glVertex3fv(&v[faces[i][1]][0]);
glVertex3fv(&v[faces[i][2]][0]);
glVertex3fv(&v[faces[i][3]][0]);
glEnd();
}
}
/* CENTRY */
void APIENTRY
glutWireCube(GLdouble size)
{
drawBox(size, GL_LINE_LOOP);
}
void APIENTRY
glutSolidCube(GLdouble size)
{
drawBox(size, GL_QUADS);
}
/* ENDCENTRY */
static void
doughnut(GLfloat r, GLfloat R, GLint nsides, GLint rings)
{
int i, j;
GLfloat theta, phi, theta1;
GLfloat cosTheta, sinTheta;
GLfloat cosTheta1, sinTheta1;
GLfloat ringDelta, sideDelta;
ringDelta = 2.0 * M_PI / rings;
sideDelta = 2.0 * M_PI / nsides;
theta = 0.0;
cosTheta = 1.0;
sinTheta = 0.0;
for (i = rings - 1; i >= 0; i--) {
theta1 = theta + ringDelta;
cosTheta1 = cos(theta1);
sinTheta1 = sin(theta1);
glBegin(GL_QUAD_STRIP);
phi = 0.0;
for (j = nsides; j >= 0; j--) {
GLfloat cosPhi, sinPhi, dist;
phi += sideDelta;
cosPhi = cos(phi);
sinPhi = sin(phi);
dist = R + r * cosPhi;
glNormal3f(cosTheta1 * cosPhi, -sinTheta1 * cosPhi, sinPhi);
glVertex3f(cosTheta1 * dist, -sinTheta1 * dist, r * sinPhi);
glNormal3f(cosTheta * cosPhi, -sinTheta * cosPhi, sinPhi);
glVertex3f(cosTheta * dist, -sinTheta * dist, r * sinPhi);
}
glEnd();
theta = theta1;
cosTheta = cosTheta1;
sinTheta = sinTheta1;
}
}
/* CENTRY */
void APIENTRY
glutWireTorus(GLdouble innerRadius, GLdouble outerRadius,
GLint nsides, GLint rings)
{
glPushAttrib(GL_POLYGON_BIT);
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
doughnut(innerRadius, outerRadius, nsides, rings);
glPopAttrib();
}
void APIENTRY
glutSolidTorus(GLdouble innerRadius, GLdouble outerRadius,
GLint nsides, GLint rings)
{
doughnut(innerRadius, outerRadius, nsides, rings);
}
/* ENDCENTRY */
static GLfloat dodec[20][3];
static void
initDodecahedron(void)
{
GLfloat alpha, beta;
alpha = sqrt(2.0 / (3.0 + sqrt(5.0)));
beta = 1.0 + sqrt(6.0 / (3.0 + sqrt(5.0)) -
2.0 + 2.0 * sqrt(2.0 / (3.0 + sqrt(5.0))));
/* *INDENT-OFF* */
dodec[0][0] = -alpha; dodec[0][1] = 0; dodec[0][2] = beta;
dodec[1][0] = alpha; dodec[1][1] = 0; dodec[1][2] = beta;
dodec[2][0] = -1; dodec[2][1] = -1; dodec[2][2] = -1;
dodec[3][0] = -1; dodec[3][1] = -1; dodec[3][2] = 1;
dodec[4][0] = -1; dodec[4][1] = 1; dodec[4][2] = -1;
dodec[5][0] = -1; dodec[5][1] = 1; dodec[5][2] = 1;
dodec[6][0] = 1; dodec[6][1] = -1; dodec[6][2] = -1;
dodec[7][0] = 1; dodec[7][1] = -1; dodec[7][2] = 1;
dodec[8][0] = 1; dodec[8][1] = 1; dodec[8][2] = -1;
dodec[9][0] = 1; dodec[9][1] = 1; dodec[9][2] = 1;
dodec[10][0] = beta; dodec[10][1] = alpha; dodec[10][2] = 0;
dodec[11][0] = beta; dodec[11][1] = -alpha; dodec[11][2] = 0;
dodec[12][0] = -beta; dodec[12][1] = alpha; dodec[12][2] = 0;
dodec[13][0] = -beta; dodec[13][1] = -alpha; dodec[13][2] = 0;
dodec[14][0] = -alpha; dodec[14][1] = 0; dodec[14][2] = -beta;
dodec[15][0] = alpha; dodec[15][1] = 0; dodec[15][2] = -beta;
dodec[16][0] = 0; dodec[16][1] = beta; dodec[16][2] = alpha;
dodec[17][0] = 0; dodec[17][1] = beta; dodec[17][2] = -alpha;
dodec[18][0] = 0; dodec[18][1] = -beta; dodec[18][2] = alpha;
dodec[19][0] = 0; dodec[19][1] = -beta; dodec[19][2] = -alpha;
/* *INDENT-ON* */
}
#define DIFF3(_a,_b,_c) { \
(_c)[0] = (_a)[0] - (_b)[0]; \
(_c)[1] = (_a)[1] - (_b)[1]; \
(_c)[2] = (_a)[2] - (_b)[2]; \
}
static void
crossprod(GLfloat v1[3], GLfloat v2[3], GLfloat prod[3])
{
GLfloat p[3]; /* in case prod == v1 or v2 */
p[0] = v1[1] * v2[2] - v2[1] * v1[2];
p[1] = v1[2] * v2[0] - v2[2] * v1[0];
p[2] = v1[0] * v2[1] - v2[0] * v1[1];
prod[0] = p[0];
prod[1] = p[1];
prod[2] = p[2];
}
static void
normalize(GLfloat v[3])
{
GLfloat d;
d = sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]);
if (d == 0.0) {
__glutWarning("normalize: zero length vector");
v[0] = d = 1.0;
}
d = 1 / d;
v[0] *= d;
v[1] *= d;
v[2] *= d;
}
static void
pentagon(int a, int b, int c, int d, int e, GLenum shadeType)
{
GLfloat n0[3], d1[3], d2[3];
DIFF3(dodec[a], dodec[b], d1);
DIFF3(dodec[b], dodec[c], d2);
crossprod(d1, d2, n0);
normalize(n0);
glBegin(shadeType);
glNormal3fv(n0);
glVertex3fv(&dodec[a][0]);
glVertex3fv(&dodec[b][0]);
glVertex3fv(&dodec[c][0]);
glVertex3fv(&dodec[d][0]);
glVertex3fv(&dodec[e][0]);
glEnd();
}
static void
dodecahedron(GLenum type)
{
static int inited = 0;
if (inited == 0) {
inited = 1;
initDodecahedron();
}
pentagon(0, 1, 9, 16, 5, type);
pentagon(1, 0, 3, 18, 7, type);
pentagon(1, 7, 11, 10, 9, type);
pentagon(11, 7, 18, 19, 6, type);
pentagon(8, 17, 16, 9, 10, type);
pentagon(2, 14, 15, 6, 19, type);
pentagon(2, 13, 12, 4, 14, type);
pentagon(2, 19, 18, 3, 13, type);
pentagon(3, 0, 5, 12, 13, type);
pentagon(6, 15, 8, 10, 11, type);
pentagon(4, 17, 8, 15, 14, type);
pentagon(4, 12, 5, 16, 17, type);
}
/* CENTRY */
void APIENTRY
glutWireDodecahedron(void)
{
dodecahedron(GL_LINE_LOOP);
}
void APIENTRY
glutSolidDodecahedron(void)
{
dodecahedron(GL_TRIANGLE_FAN);
}
/* ENDCENTRY */
static void
recorditem(GLfloat * n1, GLfloat * n2, GLfloat * n3,
GLenum shadeType)
{
GLfloat q0[3], q1[3];
DIFF3(n1, n2, q0);
DIFF3(n2, n3, q1);
crossprod(q0, q1, q1);
normalize(q1);
glBegin(shadeType);
glNormal3fv(q1);
glVertex3fv(n1);
glVertex3fv(n2);
glVertex3fv(n3);
glEnd();
}
static void
subdivide(GLfloat * v0, GLfloat * v1, GLfloat * v2,
GLenum shadeType)
{
int depth;
GLfloat w0[3], w1[3], w2[3];
GLfloat l;
int i, j, k, n;
depth = 1;
for (i = 0; i < depth; i++) {
for (j = 0; i + j < depth; j++) {
k = depth - i - j;
for (n = 0; n < 3; n++) {
w0[n] = (i * v0[n] + j * v1[n] + k * v2[n]) / depth;
w1[n] = ((i + 1) * v0[n] + j * v1[n] + (k - 1) * v2[n])
/ depth;
w2[n] = (i * v0[n] + (j + 1) * v1[n] + (k - 1) * v2[n])
/ depth;
}
l = sqrt(w0[0] * w0[0] + w0[1] * w0[1] + w0[2] * w0[2]);
w0[0] /= l;
w0[1] /= l;
w0[2] /= l;
l = sqrt(w1[0] * w1[0] + w1[1] * w1[1] + w1[2] * w1[2]);
w1[0] /= l;
w1[1] /= l;
w1[2] /= l;
l = sqrt(w2[0] * w2[0] + w2[1] * w2[1] + w2[2] * w2[2]);
w2[0] /= l;
w2[1] /= l;
w2[2] /= l;
recorditem(w1, w0, w2, shadeType);
}
}
}
static void
drawtriangle(int i, GLfloat data[][3], int ndx[][3],
GLenum shadeType)
{
GLfloat *x0, *x1, *x2;
x0 = data[ndx[i][0]];
x1 = data[ndx[i][1]];
x2 = data[ndx[i][2]];
subdivide(x0, x1, x2, shadeType);
}
/* octahedron data: The octahedron produced is centered at the
origin and has radius 1.0 */
static GLfloat odata[6][3] =
{
{1.0, 0.0, 0.0},
{-1.0, 0.0, 0.0},
{0.0, 1.0, 0.0},
{0.0, -1.0, 0.0},
{0.0, 0.0, 1.0},
{0.0, 0.0, -1.0}
};
static int ondex[8][3] =
{
{0, 4, 2},
{1, 2, 4},
{0, 3, 4},
{1, 4, 3},
{0, 2, 5},
{1, 5, 2},
{0, 5, 3},
{1, 3, 5}
};
static void
octahedron(GLenum shadeType)
{
int i;
for (i = 7; i >= 0; i--) {
drawtriangle(i, odata, ondex, shadeType);
}
}
/* CENTRY */
void APIENTRY
glutWireOctahedron(void)
{
octahedron(GL_LINE_LOOP);
}
void APIENTRY
glutSolidOctahedron(void)
{
octahedron(GL_TRIANGLES);
}
/* ENDCENTRY */
/* icosahedron data: These numbers are rigged to make an
icosahedron of radius 1.0 */
#define X .525731112119133606
#define Z .850650808352039932
static GLfloat idata[12][3] =
{
{-X, 0, Z},
{X, 0, Z},
{-X, 0, -Z},
{X, 0, -Z},
{0, Z, X},
{0, Z, -X},
{0, -Z, X},
{0, -Z, -X},
{Z, X, 0},
{-Z, X, 0},
{Z, -X, 0},
{-Z, -X, 0}
};
static int index[20][3] =
{
{0, 4, 1},
{0, 9, 4},
{9, 5, 4},
{4, 5, 8},
{4, 8, 1},
{8, 10, 1},
{8, 3, 10},
{5, 3, 8},
{5, 2, 3},
{2, 7, 3},
{7, 10, 3},
{7, 6, 10},
{7, 11, 6},
{11, 0, 6},
{0, 1, 6},
{6, 1, 10},
{9, 0, 11},
{9, 11, 2},
{9, 2, 5},
{7, 2, 11},
};
static void
icosahedron(GLenum shadeType)
{
int i;
for (i = 19; i >= 0; i--) {
drawtriangle(i, idata, index, shadeType);
}
}
/* CENTRY */
void APIENTRY
glutWireIcosahedron(void)
{
icosahedron(GL_LINE_LOOP);
}
void APIENTRY
glutSolidIcosahedron(void)
{
icosahedron(GL_TRIANGLES);
}
/* ENDCENTRY */
/* tetrahedron data: */
#define T 1.73205080756887729
static GLfloat tdata[4][3] =
{
{T, T, T},
{T, -T, -T},
{-T, T, -T},
{-T, -T, T}
};
static int tndex[4][3] =
{
{0, 1, 3},
{2, 1, 0},
{3, 2, 0},
{1, 2, 3}
};
static void
tetrahedron(GLenum shadeType)
{
int i;
for (i = 3; i >= 0; i--)
drawtriangle(i, tdata, tndex, shadeType);
}
/* CENTRY */
void APIENTRY
glutWireTetrahedron(void)
{
tetrahedron(GL_LINE_LOOP);
}
void APIENTRY
glutSolidTetrahedron(void)
{
tetrahedron(GL_TRIANGLES);
}
/* ENDCENTRY */
/***********************************************************
* Copyright (C) 1997, Be Inc. Copyright (C) 1999, Jake Hamby.
*
* This program is freely distributable without licensing fees
* and is provided without guarantee or warrantee expressed or
* implied. This program is -not- in the public domain.
*
*
* FILE: glutState.h
*
* DESCRIPTION: the global state for GLUT
* (takes the place of glutint.h in the C version)
***********************************************************/
/***********************************************************
* Headers
***********************************************************/
#include <GL/glut.h>
#include <Application.h>
#include "glutWindow.h"
#include "glutMenu.h"
/***********************************************************
* CLASS: GlutState
*
* DESCRIPTION: all the global state variables
***********************************************************/
struct GlutState {
BApplication *display;
thread_id appthread;
int initX, initY; // initial window position
int initWidth, initHeight; // initial window size
unsigned int displayMode; // initial display mode
char *displayString; // verbose display mode
GlutWindow *currentWindow; // current window
GlutMenu *currentMenu; // current menu
GlutWindow **windowList; // array of pointers to windows
int windowListSize; // size of window list
GLUTidleCB idle; // idle callback
GLUTmenuStatusCB menuStatus; // menu status callback
int modifierKeys; // only valid during keyboard callback
bool debug; // call glGetError
bool quitAll; // quit
GlutState() {
display = 0;
appthread = 0;
initX = initY = -1;
initWidth = initHeight = 300;
displayMode = GLUT_RGB | GLUT_SINGLE | GLUT_DEPTH;
displayString = 0;
currentWindow = 0;
currentMenu = 0;
windowList = 0;
windowListSize = 0;
idle = 0;
menuStatus = 0;
modifierKeys = ~0;
debug = quitAll = false;
}
};
/***********************************************************
* Global variable (declared in glutInit.cpp)
***********************************************************/
extern GlutState gState;
/* Copyright (c) Mark J. Kilgard, 1994. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#include "glutint.h"
#include "glutstroke.h"
void APIENTRY
glutStrokeCharacter(GLUTstrokeFont font, int c)
{
const StrokeCharRec *ch;
const StrokeRec *stroke;
const CoordRec *coord;
StrokeFontPtr fontinfo;
int i, j;
#if defined(_WIN32)
fontinfo = (StrokeFontPtr) __glutFont(font);
#else
fontinfo = (StrokeFontPtr) font;
#endif
if (c < 0 || c >= fontinfo->num_chars)
return;
ch = &(fontinfo->ch[c]);
if (ch) {
for (i = ch->num_strokes, stroke = ch->stroke;
i > 0; i--, stroke++) {
glBegin(GL_LINE_STRIP);
for (j = stroke->num_coords, coord = stroke->coord;
j > 0; j--, coord++) {
glVertex2f(coord->x, coord->y);
}
glEnd();
}
glTranslatef(ch->right, 0.0, 0.0);
}
}
#ifndef __glutstroke_h__
#define __glutstroke_h__
/* Copyright (c) Mark J. Kilgard, 1994. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#if defined(_WIN32)
#pragma warning (disable:4244) /* disable bogus conversion warnings */
#pragma warning (disable:4305) /* VC++ 5.0 version of above warning. */
#endif
typedef struct {
float x;
float y;
} CoordRec, *CoordPtr;
typedef struct {
int num_coords;
const CoordRec *coord;
} StrokeRec, *StrokePtr;
typedef struct {
int num_strokes;
const StrokeRec *stroke;
float center;
float right;
} StrokeCharRec, *StrokeCharPtr;
typedef struct {
const char *name;
int num_chars;
const StrokeCharRec *ch;
float top;
float bottom;
} StrokeFontRec, *StrokeFontPtr;
typedef void *GLUTstrokeFont;
#endif /* __glutstroke_h__ */
/* Copyright (c) Mark J. Kilgard, 1995. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#include "glutint.h"
#include "glutstroke.h"
/* CENTRY */
int APIENTRY
glutStrokeWidth(GLUTstrokeFont font, int c)
{
StrokeFontPtr fontinfo;
const StrokeCharRec *ch;
#if defined(_WIN32)
fontinfo = (StrokeFontPtr) __glutFont(font);
#else
fontinfo = (StrokeFontPtr) font;
#endif
if (c < 0 || c >= fontinfo->num_chars)
return 0;
ch = &(fontinfo->ch[c]);
if (ch)
return ch->right;
else
return 0;
}
int APIENTRY
glutStrokeLength(GLUTstrokeFont font, const unsigned char *string)
{
int c, length;
StrokeFontPtr fontinfo;
const StrokeCharRec *ch;
#if defined(_WIN32)
fontinfo = (StrokeFontPtr) __glutFont(font);
#else
fontinfo = (StrokeFontPtr) font;
#endif
length = 0;
for (; *string != '\0'; string++) {
c = *string;
if (c >= 0 && c < fontinfo->num_chars) {
ch = &(fontinfo->ch[c]);
if (ch)
length += ch->right;
}
}
return length;
}
/* ENDCENTRY */
/* Copyright (c) Mark J. Kilgard, 1994. */
/**
(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 "glutint.h"
/* 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] =
{
/* rim */
{102, 103, 104, 105, 4, 5, 6, 7, 8, 9, 10, 11,
12, 13, 14, 15},
/* body */
{12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
24, 25, 26, 27},
{24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36,
37, 38, 39, 40},
/* lid */
{96, 96, 96, 96, 97, 98, 99, 100, 101, 101, 101,
101, 0, 1, 2, 3,},
{0, 1, 2, 3, 106, 107, 108, 109, 110, 111, 112,
113, 114, 115, 116, 117},
/* bottom */
{118, 118, 118, 118, 124, 122, 119, 121, 123, 126,
125, 120, 40, 39, 38, 37},
/* handle */
{41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
53, 54, 55, 56},
{53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
28, 65, 66, 67},
/* spout */
{68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
80, 81, 82, 83},
{80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
92, 93, 94, 95}
};
/* *INDENT-OFF* */
static float 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 float tex[2][2][2] =
{
{ {0, 0},
{1, 0}},
{ {0, 1},
{1, 1}}
};
/* *INDENT-ON* */
static void
teapot(GLint grid, GLdouble scale, GLenum type)
{
float p[4][4][3], q[4][4][3], r[4][4][3], s[4][4][3];
long i, j, k, l;
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();
glRotatef(270.0, 1.0, 0.0, 0.0);
glScalef(0.5 * scale, 0.5 * scale, 0.5 * scale);
glTranslatef(0.0, 0.0, -1.5);
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;
}
}
}
}
glMap2f(GL_MAP2_TEXTURE_COORD_2, 0, 1, 2, 2, 0, 1, 4, 2,
&tex[0][0][0]);
glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4,
&p[0][0][0]);
glMapGrid2f(grid, 0.0, 1.0, grid, 0.0, 1.0);
glEvalMesh2(type, 0, grid, 0, grid);
glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4,
&q[0][0][0]);
glEvalMesh2(type, 0, grid, 0, grid);
if (i < 6) {
glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4,
&r[0][0][0]);
glEvalMesh2(type, 0, grid, 0, grid);
glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4,
&s[0][0][0]);
glEvalMesh2(type, 0, grid, 0, grid);
}
}
glPopMatrix();
glPopAttrib();
}
/* CENTRY */
void APIENTRY
glutSolidTeapot(GLdouble scale)
{
teapot(14, scale, GL_FILL);
}
void APIENTRY
glutWireTeapot(GLdouble scale)
{
teapot(10, scale, GL_LINE);
}
/* ENDCENTRY */
/* GENERATED FILE -- DO NOT MODIFY */
#define glutBitmapTimesRoman10 XXX
#include "glutbitmap.h"
#undef glutBitmapTimesRoman10
/* char: 0xff */
static const GLubyte ch255data[] = {
0x80,0xc0,0x40,0x60,0xa0,0x90,0xb8,0x0,0xa0,
};
static const BitmapCharRec ch255 = {5,9,0,2,5,ch255data};
/* char: 0xfe */
static const GLubyte ch254data[] = {
0xc0,0x80,0xe0,0x90,0x90,0x90,0xe0,0x80,0x80,
};
static const BitmapCharRec ch254 = {4,9,0,2,5,ch254data};
/* char: 0xfd */
static const GLubyte ch253data[] = {
0x80,0xc0,0x40,0x60,0xa0,0x90,0xb8,0x0,0x20,0x10,
};
static const BitmapCharRec ch253 = {5,10,0,2,5,ch253data};
/* char: 0xfc */
static const GLubyte ch252data[] = {
0x68,0x90,0x90,0x90,0x90,0x0,0x50,
};
static const BitmapCharRec ch252 = {5,7,0,0,5,ch252data};
/* char: 0xfb */
static const GLubyte ch251data[] = {
0x68,0x90,0x90,0x90,0x90,0x0,0x50,0x20,
};
static const BitmapCharRec ch251 = {5,8,0,0,5,ch251data};
/* char: 0xfa */
static const GLubyte ch250data[] = {
0x68,0x90,0x90,0x90,0x90,0x0,0x40,0x20,
};
static const BitmapCharRec ch250 = {5,8,0,0,5,ch250data};
/* char: 0xf9 */
static const GLubyte ch249data[] = {
0x68,0x90,0x90,0x90,0x90,0x0,0x20,0x40,
};
static const BitmapCharRec ch249 = {5,8,0,0,5,ch249data};
/* char: 0xf8 */
static const GLubyte ch248data[] = {
0x80,0x70,0x48,0x48,0x48,0x38,0x4,
};
static const BitmapCharRec ch248 = {6,7,1,1,5,ch248data};
/* char: 0xf7 */
static const GLubyte ch247data[] = {
0x20,0x0,0xf8,0x0,0x20,
};
static const BitmapCharRec ch247 = {5,5,0,0,6,ch247data};
/* char: 0xf6 */
static const GLubyte ch246data[] = {
0x60,0x90,0x90,0x90,0x60,0x0,0xa0,
};
static const BitmapCharRec ch246 = {4,7,0,0,5,ch246data};
/* char: 0xf5 */
static const GLubyte ch245data[] = {
0x60,0x90,0x90,0x90,0x60,0x0,0xa0,0x50,
};
static const BitmapCharRec ch245 = {4,8,0,0,5,ch245data};
/* char: 0xf4 */
static const GLubyte ch244data[] = {
0x60,0x90,0x90,0x90,0x60,0x0,0xa0,0x40,
};
static const BitmapCharRec ch244 = {4,8,0,0,5,ch244data};
/* char: 0xf3 */
static const GLubyte ch243data[] = {
0x60,0x90,0x90,0x90,0x60,0x0,0x40,0x20,
};
static const BitmapCharRec ch243 = {4,8,0,0,5,ch243data};
/* char: 0xf2 */
static const GLubyte ch242data[] = {
0x60,0x90,0x90,0x90,0x60,0x0,0x20,0x40,
};
static const BitmapCharRec ch242 = {4,8,0,0,5,ch242data};
/* char: 0xf1 */
static const GLubyte ch241data[] = {
0xd8,0x90,0x90,0x90,0xe0,0x0,0xa0,0x50,
};
static const BitmapCharRec ch241 = {5,8,0,0,5,ch241data};
/* char: 0xf0 */
static const GLubyte ch240data[] = {
0x60,0x90,0x90,0x90,0x70,0xa0,0x70,0x40,
};
static const BitmapCharRec ch240 = {4,8,0,0,5,ch240data};
/* char: 0xef */
static const GLubyte ch239data[] = {
0xe0,0x40,0x40,0x40,0xc0,0x0,0xa0,
};
static const BitmapCharRec ch239 = {3,7,0,0,4,ch239data};
/* char: 0xee */
static const GLubyte ch238data[] = {
0xe0,0x40,0x40,0x40,0xc0,0x0,0xa0,0x40,
};
static const BitmapCharRec ch238 = {3,8,0,0,4,ch238data};
/* char: 0xed */
static const GLubyte ch237data[] = {
0xe0,0x40,0x40,0x40,0xc0,0x0,0x40,0x20,
};
static const BitmapCharRec ch237 = {3,8,0,0,4,ch237data};
/* char: 0xec */
static const GLubyte ch236data[] = {
0xe0,0x40,0x40,0x40,0xc0,0x0,0x40,0x80,
};
static const BitmapCharRec ch236 = {3,8,0,0,4,ch236data};
/* char: 0xeb */
static const GLubyte ch235data[] = {
0x60,0x80,0xc0,0xa0,0x60,0x0,0xa0,
};
static const BitmapCharRec ch235 = {3,7,0,0,4,ch235data};
/* char: 0xea */
static const GLubyte ch234data[] = {
0x60,0x80,0xc0,0xa0,0x60,0x0,0xa0,0x40,
};
static const BitmapCharRec ch234 = {3,8,0,0,4,ch234data};
/* char: 0xe9 */
static const GLubyte ch233data[] = {
0x60,0x80,0xc0,0xa0,0x60,0x0,0x40,0x20,
};
static const BitmapCharRec ch233 = {3,8,0,0,4,ch233data};
/* char: 0xe8 */
static const GLubyte ch232data[] = {
0x60,0x80,0xc0,0xa0,0x60,0x0,0x40,0x80,
};
static const BitmapCharRec ch232 = {3,8,0,0,4,ch232data};
/* char: 0xe7 */
static const GLubyte ch231data[] = {
0xc0,0x20,0x40,0x60,0x80,0x80,0x80,0x60,
};
static const BitmapCharRec ch231 = {3,8,0,3,4,ch231data};
/* char: 0xe6 */
static const GLubyte ch230data[] = {
0xd8,0xa0,0x70,0x28,0xd8,
};
static const BitmapCharRec ch230 = {5,5,0,0,6,ch230data};
/* char: 0xe5 */
static const GLubyte ch229data[] = {
0xe0,0xa0,0x60,0x20,0xc0,0x40,0xa0,0x40,
};
static const BitmapCharRec ch229 = {3,8,0,0,4,ch229data};
/* char: 0xe4 */
static const GLubyte ch228data[] = {
0xe0,0xa0,0x60,0x20,0xc0,0x0,0xa0,
};
static const BitmapCharRec ch228 = {3,7,0,0,4,ch228data};
/* char: 0xe3 */
static const GLubyte ch227data[] = {
0xe0,0xa0,0x60,0x20,0xc0,0x0,0xa0,0x50,
};
static const BitmapCharRec ch227 = {4,8,0,0,4,ch227data};
/* char: 0xe2 */
static const GLubyte ch226data[] = {
0xe0,0xa0,0x60,0x20,0xc0,0x0,0xa0,0x40,
};
static const BitmapCharRec ch226 = {3,8,0,0,4,ch226data};
/* char: 0xe1 */
static const GLubyte ch225data[] = {
0xe0,0xa0,0x60,0x20,0xc0,0x0,0x40,0x20,
};
static const BitmapCharRec ch225 = {3,8,0,0,4,ch225data};
/* char: 0xe0 */
static const GLubyte ch224data[] = {
0xe0,0xa0,0x60,0x20,0xc0,0x0,0x40,0x80,
};
static const BitmapCharRec ch224 = {3,8,0,0,4,ch224data};
/* char: 0xdf */
static const GLubyte ch223data[] = {
0xe0,0x50,0x50,0x60,0x50,0x50,0x20,
};
static const BitmapCharRec ch223 = {4,7,0,0,5,ch223data};
/* char: 0xde */
static const GLubyte ch222data[] = {
0xe0,0x40,0x70,0x48,0x70,0x40,0xe0,
};
static const BitmapCharRec ch222 = {5,7,0,0,6,ch222data};
/* char: 0xdd */
static const GLubyte ch221data[] = {
0x38,0x10,0x10,0x28,0x28,0x44,0xee,0x0,0x10,0x8,
};
static const BitmapCharRec ch221 = {7,10,0,0,8,ch221data};
/* char: 0xdc */
static const GLubyte ch220data[] = {
0x38,0x6c,0x44,0x44,0x44,0x44,0xee,0x0,0x28,
};
static const BitmapCharRec ch220 = {7,9,0,0,8,ch220data};
/* char: 0xdb */
static const GLubyte ch219data[] = {
0x38,0x6c,0x44,0x44,0x44,0x44,0xee,0x0,0x28,0x10,
};
static const BitmapCharRec ch219 = {7,10,0,0,8,ch219data};
/* char: 0xda */
static const GLubyte ch218data[] = {
0x38,0x6c,0x44,0x44,0x44,0x44,0xee,0x0,0x10,0x8,
};
static const BitmapCharRec ch218 = {7,10,0,0,8,ch218data};
/* char: 0xd9 */
static const GLubyte ch217data[] = {
0x38,0x6c,0x44,0x44,0x44,0x44,0xee,0x0,0x10,0x20,
};
static const BitmapCharRec ch217 = {7,10,0,0,8,ch217data};
/* char: 0xd8 */
static const GLubyte ch216data[] = {
0x80,0x7c,0x66,0x52,0x52,0x4a,0x66,0x3e,0x1,
};
static const BitmapCharRec ch216 = {8,9,0,1,8,ch216data};
/* char: 0xd7 */
static const GLubyte ch215data[] = {
0x88,0x50,0x20,0x50,0x88,
};
static const BitmapCharRec ch215 = {5,5,0,0,6,ch215data};
/* char: 0xd6 */
static const GLubyte ch214data[] = {
0x78,0xcc,0x84,0x84,0x84,0xcc,0x78,0x0,0x50,
};
static const BitmapCharRec ch214 = {6,9,0,0,7,ch214data};
/* char: 0xd5 */
static const GLubyte ch213data[] = {
0x78,0xcc,0x84,0x84,0x84,0xcc,0x78,0x0,0x50,0x28,
};
static const BitmapCharRec ch213 = {6,10,0,0,7,ch213data};
/* char: 0xd4 */
static const GLubyte ch212data[] = {
0x78,0xcc,0x84,0x84,0x84,0xcc,0x78,0x0,0x50,0x20,
};
static const BitmapCharRec ch212 = {6,10,0,0,7,ch212data};
/* char: 0xd3 */
static const GLubyte ch211data[] = {
0x78,0xcc,0x84,0x84,0x84,0xcc,0x78,0x0,0x10,0x8,
};
static const BitmapCharRec ch211 = {6,10,0,0,7,ch211data};
/* char: 0xd2 */
static const GLubyte ch210data[] = {
0x78,0xcc,0x84,0x84,0x84,0xcc,0x78,0x0,0x20,0x40,
};
static const BitmapCharRec ch210 = {6,10,0,0,7,ch210data};
/* char: 0xd1 */
static const GLubyte ch209data[] = {
0xe4,0x4c,0x4c,0x54,0x54,0x64,0xee,0x0,0x50,0x28,
};
static const BitmapCharRec ch209 = {7,10,0,0,8,ch209data};
/* char: 0xd0 */
static const GLubyte ch208data[] = {
0xf8,0x4c,0x44,0xe4,0x44,0x4c,0xf8,
};
static const BitmapCharRec ch208 = {6,7,0,0,7,ch208data};
/* char: 0xcf */
static const GLubyte ch207data[] = {
0xe0,0x40,0x40,0x40,0x40,0x40,0xe0,0x0,0xa0,
};
static const BitmapCharRec ch207 = {3,9,0,0,4,ch207data};
/* char: 0xce */
static const GLubyte ch206data[] = {
0xe0,0x40,0x40,0x40,0x40,0x40,0xe0,0x0,0xa0,0x40,
};
static const BitmapCharRec ch206 = {3,10,0,0,4,ch206data};
/* char: 0xcd */
static const GLubyte ch205data[] = {
0xe0,0x40,0x40,0x40,0x40,0x40,0xe0,0x0,0x40,0x20,
};
static const BitmapCharRec ch205 = {3,10,0,0,4,ch205data};
/* char: 0xcc */
static const GLubyte ch204data[] = {
0xe0,0x40,0x40,0x40,0x40,0x40,0xe0,0x0,0x40,0x80,
};
static const BitmapCharRec ch204 = {3,10,0,0,4,ch204data};
/* char: 0xcb */
static const GLubyte ch203data[] = {
0xf8,0x48,0x40,0x70,0x40,0x48,0xf8,0x0,0x50,
};
static const BitmapCharRec ch203 = {5,9,0,0,6,ch203data};
/* char: 0xca */
static const GLubyte ch202data[] = {
0xf8,0x48,0x40,0x70,0x40,0x48,0xf8,0x0,0x50,0x20,
};
static const BitmapCharRec ch202 = {5,10,0,0,6,ch202data};
/* char: 0xc9 */
static const GLubyte ch201data[] = {
0xf8,0x48,0x40,0x70,0x40,0x48,0xf8,0x0,0x20,0x10,
};
static const BitmapCharRec ch201 = {5,10,0,0,6,ch201data};
/* char: 0xc8 */
static const GLubyte ch200data[] = {
0xf8,0x48,0x40,0x70,0x40,0x48,0xf8,0x0,0x20,0x40,
};
static const BitmapCharRec ch200 = {5,10,0,0,6,ch200data};
/* char: 0xc7 */
static const GLubyte ch199data[] = {
0x60,0x10,0x20,0x78,0xc4,0x80,0x80,0x80,0xc4,0x7c,
};
static const BitmapCharRec ch199 = {6,10,0,3,7,ch199data};
/* char: 0xc6 */
static const GLubyte ch198data[] = {
0xef,0x49,0x78,0x2e,0x28,0x39,0x1f,
};
static const BitmapCharRec ch198 = {8,7,0,0,9,ch198data};
/* char: 0xc5 */
static const GLubyte ch197data[] = {
0xee,0x44,0x7c,0x28,0x28,0x38,0x10,0x10,0x28,0x10,
};
static const BitmapCharRec ch197 = {7,10,0,0,8,ch197data};
/* char: 0xc4 */
static const GLubyte ch196data[] = {
0xee,0x44,0x7c,0x28,0x28,0x38,0x10,0x0,0x28,
};
static const BitmapCharRec ch196 = {7,9,0,0,8,ch196data};
/* char: 0xc3 */
static const GLubyte ch195data[] = {
0xee,0x44,0x7c,0x28,0x28,0x38,0x10,0x0,0x28,0x14,
};
static const BitmapCharRec ch195 = {7,10,0,0,8,ch195data};
/* char: 0xc2 */
static const GLubyte ch194data[] = {
0xee,0x44,0x7c,0x28,0x28,0x38,0x10,0x0,0x28,0x10,
};
static const BitmapCharRec ch194 = {7,10,0,0,8,ch194data};
/* char: 0xc1 */
static const GLubyte ch193data[] = {
0xee,0x44,0x7c,0x28,0x28,0x38,0x10,0x0,0x10,0x8,
};
static const BitmapCharRec ch193 = {7,10,0,0,8,ch193data};
/* char: 0xc0 */
static const GLubyte ch192data[] = {
0xee,0x44,0x7c,0x28,0x28,0x38,0x10,0x0,0x10,0x20,
};
static const BitmapCharRec ch192 = {7,10,0,0,8,ch192data};
/* char: 0xbf */
static const GLubyte ch191data[] = {
0xe0,0xa0,0x80,0x40,0x40,0x0,0x40,
};
static const BitmapCharRec ch191 = {3,7,0,2,4,ch191data};
/* char: 0xbe */
static const GLubyte ch190data[] = {
0x44,0x3e,0x2c,0xd4,0x28,0x48,0xe4,
};
static const BitmapCharRec ch190 = {7,7,0,0,8,ch190data};
/* char: 0xbd */
static const GLubyte ch189data[] = {
0x4e,0x24,0x2a,0xf6,0x48,0xc8,0x44,
};
static const BitmapCharRec ch189 = {7,7,0,0,8,ch189data};
/* char: 0xbc */
static const GLubyte ch188data[] = {
0x44,0x3e,0x2c,0xf4,0x48,0xc8,0x44,
};
static const BitmapCharRec ch188 = {7,7,0,0,8,ch188data};
/* char: 0xbb */
static const GLubyte ch187data[] = {
0xa0,0x50,0x50,0xa0,
};
static const BitmapCharRec ch187 = {4,4,0,-1,5,ch187data};
/* char: 0xba */
static const GLubyte ch186data[] = {
0xe0,0x0,0x40,0xa0,0x40,
};
static const BitmapCharRec ch186 = {3,5,0,-2,4,ch186data};
/* char: 0xb9 */
static const GLubyte ch185data[] = {
0xe0,0x40,0xc0,0x40,
};
static const BitmapCharRec ch185 = {3,4,0,-3,3,ch185data};
/* char: 0xb8 */
static const GLubyte ch184data[] = {
0xc0,0x20,0x40,
};
static const BitmapCharRec ch184 = {3,3,0,3,4,ch184data};
/* char: 0xb7 */
static const GLubyte ch183data[] = {
0x80,
};
static const BitmapCharRec ch183 = {1,1,0,-2,2,ch183data};
/* char: 0xb6 */
static const GLubyte ch182data[] = {
0x28,0x28,0x28,0x28,0x68,0xe8,0xe8,0xe8,0x7c,
};
static const BitmapCharRec ch182 = {6,9,0,2,6,ch182data};
/* char: 0xb5 */
static const GLubyte ch181data[] = {
0x80,0x80,0xe8,0x90,0x90,0x90,0x90,
};
static const BitmapCharRec ch181 = {5,7,0,2,5,ch181data};
/* char: 0xb4 */
static const GLubyte ch180data[] = {
0x80,0x40,
};
static const BitmapCharRec ch180 = {2,2,0,-5,3,ch180data};
/* char: 0xb3 */
static const GLubyte ch179data[] = {
0xc0,0x20,0x40,0xe0,
};
static const BitmapCharRec ch179 = {3,4,0,-3,3,ch179data};
/* char: 0xb2 */
static const GLubyte ch178data[] = {
0xe0,0x40,0xa0,0x60,
};
static const BitmapCharRec ch178 = {3,4,0,-3,3,ch178data};
/* char: 0xb1 */
static const GLubyte ch177data[] = {
0xf8,0x0,0x20,0x20,0xf8,0x20,0x20,
};
static const BitmapCharRec ch177 = {5,7,0,0,6,ch177data};
/* char: 0xb0 */
static const GLubyte ch176data[] = {
0x60,0x90,0x90,0x60,
};
static const BitmapCharRec ch176 = {4,4,0,-3,4,ch176data};
/* char: 0xaf */
static const GLubyte ch175data[] = {
0xe0,
};
static const BitmapCharRec ch175 = {3,1,0,-6,4,ch175data};
/* char: 0xae */
static const GLubyte ch174data[] = {
0x38,0x44,0xaa,0xb2,0xba,0x44,0x38,
};
static const BitmapCharRec ch174 = {7,7,-1,0,9,ch174data};
/* char: 0xad */
static const GLubyte ch173data[] = {
0xe0,
};
static const BitmapCharRec ch173 = {3,1,0,-2,4,ch173data};
/* char: 0xac */
static const GLubyte ch172data[] = {
0x8,0x8,0xf8,
};
static const BitmapCharRec ch172 = {5,3,-1,-1,7,ch172data};
/* char: 0xab */
static const GLubyte ch171data[] = {
0x50,0xa0,0xa0,0x50,
};
static const BitmapCharRec ch171 = {4,4,0,-1,5,ch171data};
/* char: 0xaa */
static const GLubyte ch170data[] = {
0xe0,0x0,0xa0,0x20,0xc0,
};
static const BitmapCharRec ch170 = {3,5,0,-2,4,ch170data};
/* char: 0xa9 */
static const GLubyte ch169data[] = {
0x38,0x44,0x9a,0xa2,0x9a,0x44,0x38,
};
static const BitmapCharRec ch169 = {7,7,-1,0,9,ch169data};
/* char: 0xa8 */
static const GLubyte ch168data[] = {
0xa0,
};
static const BitmapCharRec ch168 = {3,1,-1,-6,5,ch168data};
/* char: 0xa7 */
static const GLubyte ch167data[] = {
0xe0,0x90,0x20,0x50,0x90,0xa0,0x40,0x90,0x70,
};
static const BitmapCharRec ch167 = {4,9,0,1,5,ch167data};
/* char: 0xa6 */
static const GLubyte ch166data[] = {
0x80,0x80,0x80,0x0,0x80,0x80,0x80,
};
static const BitmapCharRec ch166 = {1,7,0,0,2,ch166data};
/* char: 0xa5 */
static const GLubyte ch165data[] = {
0x70,0x20,0xf8,0x20,0xd8,0x50,0x88,
};
static const BitmapCharRec ch165 = {5,7,0,0,5,ch165data};
/* char: 0xa4 */
static const GLubyte ch164data[] = {
0x88,0x70,0x50,0x50,0x70,0x88,
};
static const BitmapCharRec ch164 = {5,6,0,-1,5,ch164data};
/* char: 0xa3 */
static const GLubyte ch163data[] = {
0xf0,0xc8,0x40,0xe0,0x40,0x50,0x30,
};
static const BitmapCharRec ch163 = {5,7,0,0,5,ch163data};
/* char: 0xa2 */
static const GLubyte ch162data[] = {
0x80,0xe0,0x90,0x80,0x90,0x70,0x10,
};
static const BitmapCharRec ch162 = {4,7,0,1,5,ch162data};
/* char: 0xa1 */
static const GLubyte ch161data[] = {
0x80,0x80,0x80,0x80,0x80,0x0,0x80,
};
static const BitmapCharRec ch161 = {1,7,-1,2,3,ch161data};
/* char: 0xa0 */
#ifdef _WIN32
/* XXX Work around Microsoft OpenGL 1.1 bug where glBitmap with
a height or width of zero does not advance the raster position
as specified by OpenGL. (Cosmo OpenGL does not have this bug.) */
static const GLubyte ch160data[] = { 0x0 };
static const BitmapCharRec ch160 = {1,1,0,0,2,ch160data};
#else
static const BitmapCharRec ch160 = {0,0,0,0,2,0};
#endif
/* char: 0x7e '~' */
static const GLubyte ch126data[] = {
0x98,0x64,
};
static const BitmapCharRec ch126 = {6,2,0,-2,7,ch126data};
/* char: 0x7d '}' */
static const GLubyte ch125data[] = {
0x80,0x40,0x40,0x40,0x20,0x40,0x40,0x40,0x80,
};
static const BitmapCharRec ch125 = {3,9,0,2,4,ch125data};
/* char: 0x7c '|' */
static const GLubyte ch124data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
};
static const BitmapCharRec ch124 = {1,9,0,2,2,ch124data};
/* char: 0x7b '{' */
static const GLubyte ch123data[] = {
0x20,0x40,0x40,0x40,0x80,0x40,0x40,0x40,0x20,
};
static const BitmapCharRec ch123 = {3,9,0,2,4,ch123data};
/* char: 0x7a 'z' */
static const GLubyte ch122data[] = {
0xf0,0x90,0x40,0x20,0xf0,
};
static const BitmapCharRec ch122 = {4,5,0,0,5,ch122data};
/* char: 0x79 'y' */
static const GLubyte ch121data[] = {
0x40,0x40,0x20,0x30,0x50,0x48,0xdc,
};
static const BitmapCharRec ch121 = {6,7,1,2,5,ch121data};
/* char: 0x78 'x' */
static const GLubyte ch120data[] = {
0xd8,0x50,0x20,0x50,0xd8,
};
static const BitmapCharRec ch120 = {5,5,0,0,6,ch120data};
/* char: 0x77 'w' */
static const GLubyte ch119data[] = {
0x28,0x6c,0x54,0x92,0xdb,
};
static const BitmapCharRec ch119 = {8,5,0,0,8,ch119data};
/* char: 0x76 'v' */
static const GLubyte ch118data[] = {
0x20,0x60,0x50,0x90,0xd8,
};
static const BitmapCharRec ch118 = {5,5,0,0,5,ch118data};
/* char: 0x75 'u' */
static const GLubyte ch117data[] = {
0x68,0x90,0x90,0x90,0x90,
};
static const BitmapCharRec ch117 = {5,5,0,0,5,ch117data};
/* char: 0x74 't' */
static const GLubyte ch116data[] = {
0x30,0x40,0x40,0x40,0xe0,0x40,
};
static const BitmapCharRec ch116 = {4,6,0,0,4,ch116data};
/* char: 0x73 's' */
static const GLubyte ch115data[] = {
0xe0,0x20,0x60,0x80,0xe0,
};
static const BitmapCharRec ch115 = {3,5,0,0,4,ch115data};
/* char: 0x72 'r' */
static const GLubyte ch114data[] = {
0xe0,0x40,0x40,0x60,0xa0,
};
static const BitmapCharRec ch114 = {3,5,0,0,4,ch114data};
/* char: 0x71 'q' */
static const GLubyte ch113data[] = {
0x38,0x10,0x70,0x90,0x90,0x90,0x70,
};
static const BitmapCharRec ch113 = {5,7,0,2,5,ch113data};
/* char: 0x70 'p' */
static const GLubyte ch112data[] = {
0xc0,0x80,0xe0,0x90,0x90,0x90,0xe0,
};
static const BitmapCharRec ch112 = {4,7,0,2,5,ch112data};
/* char: 0x6f 'o' */
static const GLubyte ch111data[] = {
0x60,0x90,0x90,0x90,0x60,
};
static const BitmapCharRec ch111 = {4,5,0,0,5,ch111data};
/* char: 0x6e 'n' */
static const GLubyte ch110data[] = {
0xd8,0x90,0x90,0x90,0xe0,
};
static const BitmapCharRec ch110 = {5,5,0,0,5,ch110data};
/* char: 0x6d 'm' */
static const GLubyte ch109data[] = {
0xdb,0x92,0x92,0x92,0xec,
};
static const BitmapCharRec ch109 = {8,5,0,0,8,ch109data};
/* char: 0x6c 'l' */
static const GLubyte ch108data[] = {
0xe0,0x40,0x40,0x40,0x40,0x40,0xc0,
};
static const BitmapCharRec ch108 = {3,7,0,0,4,ch108data};
/* char: 0x6b 'k' */
static const GLubyte ch107data[] = {
0x98,0x90,0xe0,0xa0,0x90,0x80,0x80,
};
static const BitmapCharRec ch107 = {5,7,0,0,5,ch107data};
/* char: 0x6a 'j' */
static const GLubyte ch106data[] = {
0x80,0x40,0x40,0x40,0x40,0x40,0xc0,0x0,0x40,
};
static const BitmapCharRec ch106 = {2,9,0,2,3,ch106data};
/* char: 0x69 'i' */
static const GLubyte ch105data[] = {
0x40,0x40,0x40,0x40,0xc0,0x0,0x40,
};
static const BitmapCharRec ch105 = {2,7,0,0,3,ch105data};
/* char: 0x68 'h' */
static const GLubyte ch104data[] = {
0xd8,0x90,0x90,0x90,0xe0,0x80,0x80,
};
static const BitmapCharRec ch104 = {5,7,0,0,5,ch104data};
/* char: 0x67 'g' */
static const GLubyte ch103data[] = {
0xe0,0x90,0x60,0x40,0xa0,0xa0,0x70,
};
static const BitmapCharRec ch103 = {4,7,0,2,5,ch103data};
/* char: 0x66 'f' */
static const GLubyte ch102data[] = {
0xe0,0x40,0x40,0x40,0xe0,0x40,0x30,
};
static const BitmapCharRec ch102 = {4,7,0,0,4,ch102data};
/* char: 0x65 'e' */
static const GLubyte ch101data[] = {
0x60,0x80,0xc0,0xa0,0x60,
};
static const BitmapCharRec ch101 = {3,5,0,0,4,ch101data};
/* char: 0x64 'd' */
static const GLubyte ch100data[] = {
0x68,0x90,0x90,0x90,0x70,0x10,0x30,
};
static const BitmapCharRec ch100 = {5,7,0,0,5,ch100data};
/* char: 0x63 'c' */
static const GLubyte ch99data[] = {
0x60,0x80,0x80,0x80,0x60,
};
static const BitmapCharRec ch99 = {3,5,0,0,4,ch99data};
/* char: 0x62 'b' */
static const GLubyte ch98data[] = {
0xe0,0x90,0x90,0x90,0xe0,0x80,0x80,
};
static const BitmapCharRec ch98 = {4,7,0,0,5,ch98data};
/* char: 0x61 'a' */
static const GLubyte ch97data[] = {
0xe0,0xa0,0x60,0x20,0xc0,
};
static const BitmapCharRec ch97 = {3,5,0,0,4,ch97data};
/* char: 0x60 '`' */
static const GLubyte ch96data[] = {
0xc0,0x80,
};
static const BitmapCharRec ch96 = {2,2,0,-5,3,ch96data};
/* char: 0x5f '_' */
static const GLubyte ch95data[] = {
0xf8,
};
static const BitmapCharRec ch95 = {5,1,0,3,5,ch95data};
/* char: 0x5e '^' */
static const GLubyte ch94data[] = {
0xa0,0xa0,0x40,
};
static const BitmapCharRec ch94 = {3,3,-1,-4,5,ch94data};
/* char: 0x5d ']' */
static const GLubyte ch93data[] = {
0xc0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xc0,
};
static const BitmapCharRec ch93 = {2,9,0,2,3,ch93data};
/* char: 0x5c '\' */
static const GLubyte ch92data[] = {
0x20,0x20,0x40,0x40,0x40,0x80,0x80,
};
static const BitmapCharRec ch92 = {3,7,0,0,3,ch92data};
/* char: 0x5b '[' */
static const GLubyte ch91data[] = {
0xc0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xc0,
};
static const BitmapCharRec ch91 = {2,9,0,2,3,ch91data};
/* char: 0x5a 'Z' */
static const GLubyte ch90data[] = {
0xf8,0x88,0x40,0x20,0x10,0x88,0xf8,
};
static const BitmapCharRec ch90 = {5,7,0,0,6,ch90data};
/* char: 0x59 'Y' */
static const GLubyte ch89data[] = {
0x38,0x10,0x10,0x28,0x28,0x44,0xee,
};
static const BitmapCharRec ch89 = {7,7,0,0,8,ch89data};
/* char: 0x58 'X' */
static const GLubyte ch88data[] = {
0xee,0x44,0x28,0x10,0x28,0x44,0xee,
};
static const BitmapCharRec ch88 = {7,7,0,0,8,ch88data};
/* char: 0x57 'W' */
static const GLubyte ch87data[] = {
0x22,0x0,0x22,0x0,0x55,0x0,0x55,0x0,0xc9,0x80,0x88,0x80,0xdd,0xc0,
};
static const BitmapCharRec ch87 = {10,7,0,0,10,ch87data};
/* char: 0x56 'V' */
static const GLubyte ch86data[] = {
0x10,0x10,0x28,0x28,0x6c,0x44,0xee,
};
static const BitmapCharRec ch86 = {7,7,0,0,8,ch86data};
/* char: 0x55 'U' */
static const GLubyte ch85data[] = {
0x38,0x6c,0x44,0x44,0x44,0x44,0xee,
};
static const BitmapCharRec ch85 = {7,7,0,0,8,ch85data};
/* char: 0x54 'T' */
static const GLubyte ch84data[] = {
0x70,0x20,0x20,0x20,0x20,0xa8,0xf8,
};
static const BitmapCharRec ch84 = {5,7,0,0,6,ch84data};
/* char: 0x53 'S' */
static const GLubyte ch83data[] = {
0xe0,0x90,0x10,0x60,0xc0,0x90,0x70,
};
static const BitmapCharRec ch83 = {4,7,0,0,5,ch83data};
/* char: 0x52 'R' */
static const GLubyte ch82data[] = {
0xec,0x48,0x50,0x70,0x48,0x48,0xf0,
};
static const BitmapCharRec ch82 = {6,7,0,0,7,ch82data};
/* char: 0x51 'Q' */
static const GLubyte ch81data[] = {
0xc,0x18,0x70,0xcc,0x84,0x84,0x84,0xcc,0x78,
};
static const BitmapCharRec ch81 = {6,9,0,2,7,ch81data};
/* char: 0x50 'P' */
static const GLubyte ch80data[] = {
0xe0,0x40,0x40,0x70,0x48,0x48,0xf0,
};
static const BitmapCharRec ch80 = {5,7,0,0,6,ch80data};
/* char: 0x4f 'O' */
static const GLubyte ch79data[] = {
0x78,0xcc,0x84,0x84,0x84,0xcc,0x78,
};
static const BitmapCharRec ch79 = {6,7,0,0,7,ch79data};
/* char: 0x4e 'N' */
static const GLubyte ch78data[] = {
0xe4,0x4c,0x4c,0x54,0x54,0x64,0xee,
};
static const BitmapCharRec ch78 = {7,7,0,0,8,ch78data};
/* char: 0x4d 'M' */
static const GLubyte ch77data[] = {
0xeb,0x80,0x49,0x0,0x55,0x0,0x55,0x0,0x63,0x0,0x63,0x0,0xe3,0x80,
};
static const BitmapCharRec ch77 = {9,7,0,0,10,ch77data};
/* char: 0x4c 'L' */
static const GLubyte ch76data[] = {
0xf8,0x48,0x40,0x40,0x40,0x40,0xe0,
};
static const BitmapCharRec ch76 = {5,7,0,0,6,ch76data};
/* char: 0x4b 'K' */
static const GLubyte ch75data[] = {
0xec,0x48,0x50,0x60,0x50,0x48,0xec,
};
static const BitmapCharRec ch75 = {6,7,0,0,7,ch75data};
/* char: 0x4a 'J' */
static const GLubyte ch74data[] = {
0xc0,0xa0,0x20,0x20,0x20,0x20,0x70,
};
static const BitmapCharRec ch74 = {4,7,0,0,4,ch74data};
/* char: 0x49 'I' */
static const GLubyte ch73data[] = {
0xe0,0x40,0x40,0x40,0x40,0x40,0xe0,
};
static const BitmapCharRec ch73 = {3,7,0,0,4,ch73data};
/* char: 0x48 'H' */
static const GLubyte ch72data[] = {
0xee,0x44,0x44,0x7c,0x44,0x44,0xee,
};
static const BitmapCharRec ch72 = {7,7,0,0,8,ch72data};
/* char: 0x47 'G' */
static const GLubyte ch71data[] = {
0x78,0xc4,0x84,0x9c,0x80,0xc4,0x7c,
};
static const BitmapCharRec ch71 = {6,7,0,0,7,ch71data};
/* char: 0x46 'F' */
static const GLubyte ch70data[] = {
0xe0,0x40,0x40,0x70,0x40,0x48,0xf8,
};
static const BitmapCharRec ch70 = {5,7,0,0,6,ch70data};
/* char: 0x45 'E' */
static const GLubyte ch69data[] = {
0xf8,0x48,0x40,0x70,0x40,0x48,0xf8,
};
static const BitmapCharRec ch69 = {5,7,0,0,6,ch69data};
/* char: 0x44 'D' */
static const GLubyte ch68data[] = {
0xf8,0x4c,0x44,0x44,0x44,0x4c,0xf8,
};
static const BitmapCharRec ch68 = {6,7,0,0,7,ch68data};
/* char: 0x43 'C' */
static const GLubyte ch67data[] = {
0x78,0xc4,0x80,0x80,0x80,0xc4,0x7c,
};
static const BitmapCharRec ch67 = {6,7,0,0,7,ch67data};
/* char: 0x42 'B' */
static const GLubyte ch66data[] = {
0xf0,0x48,0x48,0x70,0x48,0x48,0xf0,
};
static const BitmapCharRec ch66 = {5,7,0,0,6,ch66data};
/* char: 0x41 'A' */
static const GLubyte ch65data[] = {
0xee,0x44,0x7c,0x28,0x28,0x38,0x10,
};
static const BitmapCharRec ch65 = {7,7,0,0,8,ch65data};
/* char: 0x40 '@' */
static const GLubyte ch64data[] = {
0x3e,0x40,0x92,0xad,0xa5,0xa5,0x9d,0x42,0x3c,
};
static const BitmapCharRec ch64 = {8,9,0,2,9,ch64data};
/* char: 0x3f '?' */
static const GLubyte ch63data[] = {
0x40,0x0,0x40,0x40,0x20,0xa0,0xe0,
};
static const BitmapCharRec ch63 = {3,7,0,0,4,ch63data};
/* char: 0x3e '>' */
static const GLubyte ch62data[] = {
0x80,0x40,0x20,0x40,0x80,
};
static const BitmapCharRec ch62 = {3,5,0,0,5,ch62data};
/* char: 0x3d '=' */
static const GLubyte ch61data[] = {
0xf8,0x0,0xf8,
};
static const BitmapCharRec ch61 = {5,3,0,-1,6,ch61data};
/* char: 0x3c '<' */
static const GLubyte ch60data[] = {
0x20,0x40,0x80,0x40,0x20,
};
static const BitmapCharRec ch60 = {3,5,-1,0,5,ch60data};
/* char: 0x3b ';' */
static const GLubyte ch59data[] = {
0x80,0x80,0x80,0x0,0x0,0x0,0x80,
};
static const BitmapCharRec ch59 = {1,7,-1,2,3,ch59data};
/* char: 0x3a ':' */
static const GLubyte ch58data[] = {
0x80,0x0,0x0,0x0,0x80,
};
static const BitmapCharRec ch58 = {1,5,-1,0,3,ch58data};
/* char: 0x39 '9' */
static const GLubyte ch57data[] = {
0xc0,0x20,0x70,0x90,0x90,0x90,0x60,
};
static const BitmapCharRec ch57 = {4,7,0,0,5,ch57data};
/* char: 0x38 '8' */
static const GLubyte ch56data[] = {
0x60,0x90,0x90,0x60,0x90,0x90,0x60,
};
static const BitmapCharRec ch56 = {4,7,0,0,5,ch56data};
/* char: 0x37 '7' */
static const GLubyte ch55data[] = {
0x40,0x40,0x40,0x20,0x20,0x90,0xf0,
};
static const BitmapCharRec ch55 = {4,7,0,0,5,ch55data};
/* char: 0x36 '6' */
static const GLubyte ch54data[] = {
0x60,0x90,0x90,0x90,0xe0,0x40,0x30,
};
static const BitmapCharRec ch54 = {4,7,0,0,5,ch54data};
/* char: 0x35 '5' */
static const GLubyte ch53data[] = {
0xe0,0x90,0x10,0x10,0xe0,0x40,0x70,
};
static const BitmapCharRec ch53 = {4,7,0,0,5,ch53data};
/* char: 0x34 '4' */
static const GLubyte ch52data[] = {
0x10,0x10,0xf8,0x90,0x50,0x30,0x10,
};
static const BitmapCharRec ch52 = {5,7,0,0,5,ch52data};
/* char: 0x33 '3' */
static const GLubyte ch51data[] = {
0xe0,0x10,0x10,0x60,0x10,0x90,0x60,
};
static const BitmapCharRec ch51 = {4,7,0,0,5,ch51data};
/* char: 0x32 '2' */
static const GLubyte ch50data[] = {
0xf0,0x40,0x20,0x20,0x10,0x90,0x60,
};
static const BitmapCharRec ch50 = {4,7,0,0,5,ch50data};
/* char: 0x31 '1' */
static const GLubyte ch49data[] = {
0xe0,0x40,0x40,0x40,0x40,0xc0,0x40,
};
static const BitmapCharRec ch49 = {3,7,-1,0,5,ch49data};
/* char: 0x30 '0' */
static const GLubyte ch48data[] = {
0x60,0x90,0x90,0x90,0x90,0x90,0x60,
};
static const BitmapCharRec ch48 = {4,7,0,0,5,ch48data};
/* char: 0x2f '/' */
static const GLubyte ch47data[] = {
0x80,0x80,0x40,0x40,0x40,0x20,0x20,
};
static const BitmapCharRec ch47 = {3,7,0,0,3,ch47data};
/* char: 0x2e '.' */
static const GLubyte ch46data[] = {
0x80,
};
static const BitmapCharRec ch46 = {1,1,-1,0,3,ch46data};
/* char: 0x2d '-' */
static const GLubyte ch45data[] = {
0xf0,
};
static const BitmapCharRec ch45 = {4,1,-1,-2,7,ch45data};
/* char: 0x2c ',' */
static const GLubyte ch44data[] = {
0x80,0x80,0x80,
};
static const BitmapCharRec ch44 = {1,3,-1,2,3,ch44data};
/* char: 0x2b '+' */
static const GLubyte ch43data[] = {
0x20,0x20,0xf8,0x20,0x20,
};
static const BitmapCharRec ch43 = {5,5,0,0,6,ch43data};
/* char: 0x2a '*' */
static const GLubyte ch42data[] = {
0xa0,0x40,0xa0,
};
static const BitmapCharRec ch42 = {3,3,0,-4,5,ch42data};
/* char: 0x29 ')' */
static const GLubyte ch41data[] = {
0x80,0x40,0x40,0x20,0x20,0x20,0x40,0x40,0x80,
};
static const BitmapCharRec ch41 = {3,9,0,2,4,ch41data};
/* char: 0x28 '(' */
static const GLubyte ch40data[] = {
0x20,0x40,0x40,0x80,0x80,0x80,0x40,0x40,0x20,
};
static const BitmapCharRec ch40 = {3,9,0,2,4,ch40data};
/* char: 0x27 ''' */
static const GLubyte ch39data[] = {
0x40,0xc0,
};
static const BitmapCharRec ch39 = {2,2,0,-5,3,ch39data};
/* char: 0x26 '&' */
static const GLubyte ch38data[] = {
0x76,0x8d,0x98,0x74,0x6e,0x50,0x30,
};
static const BitmapCharRec ch38 = {8,7,0,0,8,ch38data};
/* char: 0x25 '%' */
static const GLubyte ch37data[] = {
0x44,0x2a,0x2a,0x56,0xa8,0xa4,0x7e,
};
static const BitmapCharRec ch37 = {7,7,0,0,8,ch37data};
/* char: 0x24 '$' */
static const GLubyte ch36data[] = {
0x20,0xe0,0x90,0x10,0x60,0x80,0x90,0x70,0x20,
};
static const BitmapCharRec ch36 = {4,9,0,1,5,ch36data};
/* char: 0x23 '#' */
static const GLubyte ch35data[] = {
0x50,0x50,0xf8,0x50,0xf8,0x50,0x50,
};
static const BitmapCharRec ch35 = {5,7,0,0,5,ch35data};
/* char: 0x22 '"' */
static const GLubyte ch34data[] = {
0xa0,0xa0,
};
static const BitmapCharRec ch34 = {3,2,0,-5,4,ch34data};
/* char: 0x21 '!' */
static const GLubyte ch33data[] = {
0x80,0x0,0x80,0x80,0x80,0x80,0x80,
};
static const BitmapCharRec ch33 = {1,7,-1,0,3,ch33data};
/* char: 0x20 ' ' */
#ifdef _WIN32
/* XXX Work around Microsoft OpenGL 1.1 bug where glBitmap with
a height or width of zero does not advance the raster position
as specified by OpenGL. (Cosmo OpenGL does not have this bug.) */
static const GLubyte ch32data[] = { 0x0 };
static const BitmapCharRec ch32 = {1,1,0,0,2,ch32data};
#else
static const BitmapCharRec ch32 = {0,0,0,0,2,0};
#endif
static const BitmapCharRec * const chars[] = {
&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,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
&ch160,
&ch161,
&ch162,
&ch163,
&ch164,
&ch165,
&ch166,
&ch167,
&ch168,
&ch169,
&ch170,
&ch171,
&ch172,
&ch173,
&ch174,
&ch175,
&ch176,
&ch177,
&ch178,
&ch179,
&ch180,
&ch181,
&ch182,
&ch183,
&ch184,
&ch185,
&ch186,
&ch187,
&ch188,
&ch189,
&ch190,
&ch191,
&ch192,
&ch193,
&ch194,
&ch195,
&ch196,
&ch197,
&ch198,
&ch199,
&ch200,
&ch201,
&ch202,
&ch203,
&ch204,
&ch205,
&ch206,
&ch207,
&ch208,
&ch209,
&ch210,
&ch211,
&ch212,
&ch213,
&ch214,
&ch215,
&ch216,
&ch217,
&ch218,
&ch219,
&ch220,
&ch221,
&ch222,
&ch223,
&ch224,
&ch225,
&ch226,
&ch227,
&ch228,
&ch229,
&ch230,
&ch231,
&ch232,
&ch233,
&ch234,
&ch235,
&ch236,
&ch237,
&ch238,
&ch239,
&ch240,
&ch241,
&ch242,
&ch243,
&ch244,
&ch245,
&ch246,
&ch247,
&ch248,
&ch249,
&ch250,
&ch251,
&ch252,
&ch253,
&ch254,
&ch255,
};
const BitmapFontRec glutBitmapTimesRoman10 = {
"-adobe-times-medium-r-normal--10-100-75-75-p-54-iso8859-1",
224,
32,
chars
};
/* GENERATED FILE -- DO NOT MODIFY */
#define glutBitmapTimesRoman24 XXX
#include "glutbitmap.h"
#undef glutBitmapTimesRoman24
/* char: 0xff */
static const GLubyte ch255data[] = {
0xe0,0x0,0xf0,0x0,0x18,0x0,0x8,0x0,0xc,0x0,0x4,0x0,0xe,0x0,0xe,0x0,
0x1a,0x0,0x19,0x0,0x19,0x0,0x31,0x0,0x30,0x80,0x30,0x80,0x60,0x80,0x60,0xc0,
0xf1,0xe0,0x0,0x0,0x0,0x0,0x33,0x0,0x33,0x0,
};
static const BitmapCharRec ch255 = {11,21,0,5,11,ch255data};
/* char: 0xfe */
static const GLubyte ch254data[] = {
0xf0,0x0,0x60,0x0,0x60,0x0,0x60,0x0,0x60,0x0,0x6e,0x0,0x73,0x80,0x61,0x80,
0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x61,0x80,0x73,0x80,
0x6e,0x0,0x60,0x0,0x60,0x0,0x60,0x0,0x60,0x0,0xe0,0x0,
};
static const BitmapCharRec ch254 = {10,22,-1,5,12,ch254data};
/* char: 0xfd */
static const GLubyte ch253data[] = {
0xe0,0x0,0xf0,0x0,0x18,0x0,0x8,0x0,0xc,0x0,0x4,0x0,0xe,0x0,0xe,0x0,
0x1a,0x0,0x19,0x0,0x19,0x0,0x31,0x0,0x30,0x80,0x30,0x80,0x60,0x80,0x60,0xc0,
0xf1,0xe0,0x0,0x0,0x8,0x0,0x6,0x0,0x3,0x80,0x1,0x80,
};
static const BitmapCharRec ch253 = {11,22,0,5,11,ch253data};
/* char: 0xfc */
static const GLubyte ch252data[] = {
0x1c,0xe0,0x3e,0xc0,0x71,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,
0x60,0xc0,0x60,0xc0,0x60,0xc0,0xe1,0xc0,0x0,0x0,0x0,0x0,0x33,0x0,0x33,0x0,
};
static const BitmapCharRec ch252 = {11,16,-1,0,13,ch252data};
/* char: 0xfb */
static const GLubyte ch251data[] = {
0x1c,0xe0,0x3e,0xc0,0x71,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,
0x60,0xc0,0x60,0xc0,0x60,0xc0,0xe1,0xc0,0x0,0x0,0x21,0x0,0x12,0x0,0x1e,0x0,
0xc,0x0,
};
static const BitmapCharRec ch251 = {11,17,-1,0,13,ch251data};
/* char: 0xfa */
static const GLubyte ch250data[] = {
0x1c,0xe0,0x3e,0xc0,0x71,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,
0x60,0xc0,0x60,0xc0,0x60,0xc0,0xe1,0xc0,0x0,0x0,0x8,0x0,0x6,0x0,0x3,0x80,
0x1,0x80,
};
static const BitmapCharRec ch250 = {11,17,-1,0,13,ch250data};
/* char: 0xf9 */
static const GLubyte ch249data[] = {
0x1c,0xe0,0x3e,0xc0,0x71,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,
0x60,0xc0,0x60,0xc0,0x60,0xc0,0xe1,0xc0,0x0,0x0,0x2,0x0,0xc,0x0,0x38,0x0,
0x30,0x0,
};
static const BitmapCharRec ch249 = {11,17,-1,0,13,ch249data};
/* char: 0xf8 */
static const GLubyte ch248data[] = {
0xc0,0x0,0xde,0x0,0x73,0x80,0x71,0x80,0xd0,0xc0,0xd8,0xc0,0xc8,0xc0,0xcc,0xc0,
0xc4,0xc0,0xc6,0xc0,0x63,0x80,0x73,0x80,0x1e,0xc0,0x0,0xc0,
};
static const BitmapCharRec ch248 = {10,14,-1,1,12,ch248data};
/* char: 0xf7 */
static const GLubyte ch247data[] = {
0x6,0x0,0x6,0x0,0x0,0x0,0x0,0x0,0xff,0xf0,0xff,0xf0,0x0,0x0,0x0,0x0,
0x6,0x0,0x6,0x0,
};
static const BitmapCharRec ch247 = {12,10,-1,-2,14,ch247data};
/* char: 0xf6 */
static const GLubyte ch246data[] = {
0x1e,0x0,0x73,0x80,0x61,0x80,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
0xc0,0xc0,0x61,0x80,0x73,0x80,0x1e,0x0,0x0,0x0,0x0,0x0,0x33,0x0,0x33,0x0,
};
static const BitmapCharRec ch246 = {10,16,-1,0,12,ch246data};
/* char: 0xf5 */
static const GLubyte ch245data[] = {
0x1e,0x0,0x73,0x80,0x61,0x80,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
0xc0,0xc0,0x61,0x80,0x73,0x80,0x1e,0x0,0x0,0x0,0x0,0x0,0x27,0x0,0x1c,0x80,
};
static const BitmapCharRec ch245 = {10,16,-1,0,12,ch245data};
/* char: 0xf4 */
static const GLubyte ch244data[] = {
0x1e,0x0,0x73,0x80,0x61,0x80,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
0xc0,0xc0,0x61,0x80,0x73,0x80,0x1e,0x0,0x0,0x0,0x21,0x0,0x12,0x0,0x1e,0x0,
0xc,0x0,
};
static const BitmapCharRec ch244 = {10,17,-1,0,12,ch244data};
/* char: 0xf3 */
static const GLubyte ch243data[] = {
0x1e,0x0,0x73,0x80,0x61,0x80,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
0xc0,0xc0,0x61,0x80,0x73,0x80,0x1e,0x0,0x0,0x0,0x8,0x0,0x6,0x0,0x3,0x80,
0x1,0x80,
};
static const BitmapCharRec ch243 = {10,17,-1,0,12,ch243data};
/* char: 0xf2 */
static const GLubyte ch242data[] = {
0x1e,0x0,0x73,0x80,0x61,0x80,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
0xc0,0xc0,0x61,0x80,0x73,0x80,0x1e,0x0,0x0,0x0,0x2,0x0,0xc,0x0,0x38,0x0,
0x30,0x0,
};
static const BitmapCharRec ch242 = {10,17,-1,0,12,ch242data};
/* char: 0xf1 */
static const GLubyte ch241data[] = {
0xf1,0xe0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,
0x60,0xc0,0x71,0xc0,0x6f,0x80,0xe7,0x0,0x0,0x0,0x0,0x0,0x27,0x0,0x1c,0x80,
};
static const BitmapCharRec ch241 = {11,16,-1,0,13,ch241data};
/* char: 0xf0 */
static const GLubyte ch240data[] = {
0x1e,0x0,0x73,0x80,0x61,0x80,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
0xc0,0xc0,0x61,0x80,0x73,0x80,0x1f,0x0,0xc6,0x0,0x3c,0x0,0x1e,0x0,0x71,0x80,
0xc0,0x0,
};
static const BitmapCharRec ch240 = {10,17,-1,0,12,ch240data};
/* char: 0xef */
static const GLubyte ch239data[] = {
0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x70,0x0,0x0,0xcc,0xcc,
};
static const BitmapCharRec ch239 = {6,16,0,0,6,ch239data};
/* char: 0xee */
static const GLubyte ch238data[] = {
0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x70,0x0,0x84,0x48,0x78,
0x30,
};
static const BitmapCharRec ch238 = {6,17,0,0,6,ch238data};
/* char: 0xed */
static const GLubyte ch237data[] = {
0xf0,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0xe0,0x0,0x80,0x60,0x38,
0x18,
};
static const BitmapCharRec ch237 = {5,17,-1,0,6,ch237data};
/* char: 0xec */
static const GLubyte ch236data[] = {
0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x70,0x0,0x8,0x30,0xe0,
0xc0,
};
static const BitmapCharRec ch236 = {5,17,0,0,6,ch236data};
/* char: 0xeb */
static const GLubyte ch235data[] = {
0x1e,0x0,0x7f,0x0,0x70,0x80,0xe0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x80,
0xc1,0x80,0x41,0x80,0x63,0x0,0x1e,0x0,0x0,0x0,0x0,0x0,0x33,0x0,0x33,0x0,
};
static const BitmapCharRec ch235 = {9,16,-1,0,11,ch235data};
/* char: 0xea */
static const GLubyte ch234data[] = {
0x1e,0x0,0x7f,0x0,0x70,0x80,0xe0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x80,
0xc1,0x80,0x41,0x80,0x63,0x0,0x1e,0x0,0x0,0x0,0x21,0x0,0x12,0x0,0x1e,0x0,
0xc,0x0,
};
static const BitmapCharRec ch234 = {9,17,-1,0,11,ch234data};
/* char: 0xe9 */
static const GLubyte ch233data[] = {
0x1e,0x0,0x7f,0x0,0x70,0x80,0xe0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x80,
0xc1,0x80,0x41,0x80,0x63,0x0,0x1e,0x0,0x0,0x0,0x10,0x0,0xc,0x0,0x7,0x0,
0x3,0x0,
};
static const BitmapCharRec ch233 = {9,17,-1,0,11,ch233data};
/* char: 0xe8 */
static const GLubyte ch232data[] = {
0x1e,0x0,0x7f,0x0,0x70,0x80,0xe0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x80,
0xc1,0x80,0x41,0x80,0x63,0x0,0x1e,0x0,0x0,0x0,0x4,0x0,0x18,0x0,0x70,0x0,
0x60,0x0,
};
static const BitmapCharRec ch232 = {9,17,-1,0,11,ch232data};
/* char: 0xe7 */
static const GLubyte ch231data[] = {
0x3c,0x0,0x66,0x0,0x6,0x0,0x1e,0x0,0x18,0x0,0x8,0x0,0x1e,0x0,0x7f,0x0,
0x70,0x80,0xe0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0x41,0x80,
0x63,0x80,0x1f,0x0,
};
static const BitmapCharRec ch231 = {9,18,-1,6,11,ch231data};
/* char: 0xe6 */
static const GLubyte ch230data[] = {
0x70,0xf0,0xfb,0xf8,0xc7,0x84,0xc3,0x0,0xc3,0x0,0x63,0x0,0x3b,0x0,0xf,0xfc,
0x3,0xc,0x63,0xc,0x67,0x98,0x3c,0xf0,
};
static const BitmapCharRec ch230 = {14,12,-1,0,16,ch230data};
/* char: 0xe5 */
static const GLubyte ch229data[] = {
0x71,0x80,0xfb,0x0,0xc7,0x0,0xc3,0x0,0xc3,0x0,0x63,0x0,0x3b,0x0,0xf,0x0,
0x3,0x0,0x63,0x0,0x67,0x0,0x3e,0x0,0x0,0x0,0x1c,0x0,0x22,0x0,0x22,0x0,
0x1c,0x0,
};
static const BitmapCharRec ch229 = {9,17,-1,0,11,ch229data};
/* char: 0xe4 */
static const GLubyte ch228data[] = {
0x71,0x80,0xfb,0x0,0xc7,0x0,0xc3,0x0,0xc3,0x0,0x63,0x0,0x3b,0x0,0xf,0x0,
0x3,0x0,0x63,0x0,0x67,0x0,0x3e,0x0,0x0,0x0,0x0,0x0,0x66,0x0,0x66,0x0,
};
static const BitmapCharRec ch228 = {9,16,-1,0,11,ch228data};
/* char: 0xe3 */
static const GLubyte ch227data[] = {
0x71,0x80,0xfb,0x0,0xc7,0x0,0xc3,0x0,0xc3,0x0,0x63,0x0,0x3b,0x0,0xf,0x0,
0x3,0x0,0x63,0x0,0x67,0x0,0x3e,0x0,0x0,0x0,0x0,0x0,0x5c,0x0,0x3a,0x0,
};
static const BitmapCharRec ch227 = {9,16,-1,0,11,ch227data};
/* char: 0xe2 */
static const GLubyte ch226data[] = {
0x71,0x80,0xfb,0x0,0xc7,0x0,0xc3,0x0,0xc3,0x0,0x63,0x0,0x3b,0x0,0xf,0x0,
0x3,0x0,0x63,0x0,0x67,0x0,0x3e,0x0,0x0,0x0,0x42,0x0,0x24,0x0,0x3c,0x0,
0x18,0x0,
};
static const BitmapCharRec ch226 = {9,17,-1,0,11,ch226data};
/* char: 0xe1 */
static const GLubyte ch225data[] = {
0x71,0x80,0xfb,0x0,0xc7,0x0,0xc3,0x0,0xc3,0x0,0x63,0x0,0x3b,0x0,0xf,0x0,
0x3,0x0,0x63,0x0,0x67,0x0,0x3e,0x0,0x0,0x0,0x10,0x0,0xc,0x0,0x7,0x0,
0x3,0x0,
};
static const BitmapCharRec ch225 = {9,17,-1,0,11,ch225data};
/* char: 0xe0 */
static const GLubyte ch224data[] = {
0x71,0x80,0xfb,0x0,0xc7,0x0,0xc3,0x0,0xc3,0x0,0x63,0x0,0x3b,0x0,0xf,0x0,
0x3,0x0,0x63,0x0,0x67,0x0,0x3e,0x0,0x0,0x0,0x4,0x0,0x18,0x0,0x70,0x0,
0x60,0x0,
};
static const BitmapCharRec ch224 = {9,17,-1,0,11,ch224data};
/* char: 0xdf */
static const GLubyte ch223data[] = {
0xe7,0x0,0x6c,0x80,0x6c,0xc0,0x60,0xc0,0x60,0xc0,0x61,0xc0,0x61,0x80,0x63,0x80,
0x67,0x0,0x6c,0x0,0x63,0x0,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x33,0x0,
0x1e,0x0,
};
static const BitmapCharRec ch223 = {10,17,-1,0,12,ch223data};
/* char: 0xde */
static const GLubyte ch222data[] = {
0xfc,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x3f,0xc0,0x30,0x70,0x30,0x30,0x30,0x18,
0x30,0x18,0x30,0x18,0x30,0x30,0x30,0x70,0x3f,0xc0,0x30,0x0,0x30,0x0,0x30,0x0,
0xfc,0x0,
};
static const BitmapCharRec ch222 = {13,17,-1,0,15,ch222data};
/* char: 0xdd */
static const GLubyte ch221data[] = {
0x7,0xe0,0x1,0x80,0x1,0x80,0x1,0x80,0x1,0x80,0x1,0x80,0x1,0x80,0x3,0xc0,
0x3,0x40,0x6,0x60,0x6,0x20,0xc,0x30,0x1c,0x10,0x18,0x18,0x38,0x8,0x30,0xc,
0xfc,0x3f,0x0,0x0,0x1,0x0,0x0,0xc0,0x0,0x70,0x0,0x30,
};
static const BitmapCharRec ch221 = {16,22,0,0,16,ch221data};
/* char: 0xdc */
static const GLubyte ch220data[] = {
0x7,0xe0,0x1c,0x30,0x18,0x8,0x30,0x8,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,
0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,
0xfc,0x1f,0x0,0x0,0x0,0x0,0x6,0x30,0x6,0x30,
};
static const BitmapCharRec ch220 = {16,21,-1,0,18,ch220data};
/* char: 0xdb */
static const GLubyte ch219data[] = {
0x7,0xe0,0x1c,0x30,0x18,0x8,0x30,0x8,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,
0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,
0xfc,0x1f,0x0,0x0,0x8,0x10,0x6,0x60,0x3,0xc0,0x1,0x80,
};
static const BitmapCharRec ch219 = {16,22,-1,0,18,ch219data};
/* char: 0xda */
static const GLubyte ch218data[] = {
0x7,0xe0,0x1c,0x30,0x18,0x8,0x30,0x8,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,
0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,
0xfc,0x1f,0x0,0x0,0x1,0x0,0x0,0xc0,0x0,0x70,0x0,0x30,
};
static const BitmapCharRec ch218 = {16,22,-1,0,18,ch218data};
/* char: 0xd9 */
static const GLubyte ch217data[] = {
0x7,0xe0,0x1c,0x30,0x18,0x8,0x30,0x8,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,
0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,
0xfc,0x1f,0x0,0x0,0x0,0x40,0x1,0x80,0x7,0x0,0x6,0x0,
};
static const BitmapCharRec ch217 = {16,22,-1,0,18,ch217data};
/* char: 0xd8 */
static const GLubyte ch216data[] = {
0x20,0x0,0x27,0xe0,0x1c,0x38,0x38,0x1c,0x68,0x6,0x64,0x6,0xc2,0x3,0xc2,0x3,
0xc1,0x3,0xc1,0x3,0xc0,0x83,0xc0,0x83,0xc0,0x43,0x60,0x46,0x60,0x26,0x38,0x1c,
0x1c,0x38,0x7,0xe4,0x0,0x4,
};
static const BitmapCharRec ch216 = {16,19,-1,1,18,ch216data};
/* char: 0xd7 */
static const GLubyte ch215data[] = {
0x80,0x40,0xc0,0xc0,0x61,0x80,0x33,0x0,0x1e,0x0,0xc,0x0,0x1e,0x0,0x33,0x0,
0x61,0x80,0xc0,0xc0,0x80,0x40,
};
static const BitmapCharRec ch215 = {10,11,-2,-1,14,ch215data};
/* char: 0xd6 */
static const GLubyte ch214data[] = {
0x7,0xe0,0x1c,0x38,0x38,0x1c,0x60,0x6,0x60,0x6,0xc0,0x3,0xc0,0x3,0xc0,0x3,
0xc0,0x3,0xc0,0x3,0xc0,0x3,0xc0,0x3,0x60,0x6,0x60,0x6,0x38,0x1c,0x1c,0x38,
0x7,0xe0,0x0,0x0,0x0,0x0,0x6,0x60,0x6,0x60,
};
static const BitmapCharRec ch214 = {16,21,-1,0,18,ch214data};
/* char: 0xd5 */
static const GLubyte ch213data[] = {
0x7,0xe0,0x1c,0x38,0x38,0x1c,0x60,0x6,0x60,0x6,0xc0,0x3,0xc0,0x3,0xc0,0x3,
0xc0,0x3,0xc0,0x3,0xc0,0x3,0xc0,0x3,0x60,0x6,0x60,0x6,0x38,0x1c,0x1c,0x38,
0x7,0xe0,0x0,0x0,0x0,0x0,0x4,0xe0,0x3,0x90,
};
static const BitmapCharRec ch213 = {16,21,-1,0,18,ch213data};
/* char: 0xd4 */
static const GLubyte ch212data[] = {
0x7,0xe0,0x1c,0x38,0x38,0x1c,0x60,0x6,0x60,0x6,0xc0,0x3,0xc0,0x3,0xc0,0x3,
0xc0,0x3,0xc0,0x3,0xc0,0x3,0xc0,0x3,0x60,0x6,0x60,0x6,0x38,0x1c,0x1c,0x38,
0x7,0xe0,0x0,0x0,0x8,0x10,0x6,0x60,0x3,0xc0,0x1,0x80,
};
static const BitmapCharRec ch212 = {16,22,-1,0,18,ch212data};
/* char: 0xd3 */
static const GLubyte ch211data[] = {
0x7,0xe0,0x1c,0x38,0x38,0x1c,0x60,0x6,0x60,0x6,0xc0,0x3,0xc0,0x3,0xc0,0x3,
0xc0,0x3,0xc0,0x3,0xc0,0x3,0xc0,0x3,0x60,0x6,0x60,0x6,0x38,0x1c,0x1c,0x38,
0x7,0xe0,0x0,0x0,0x1,0x0,0x0,0xc0,0x0,0x70,0x0,0x30,
};
static const BitmapCharRec ch211 = {16,22,-1,0,18,ch211data};
/* char: 0xd2 */
static const GLubyte ch210data[] = {
0x7,0xe0,0x1c,0x38,0x38,0x1c,0x60,0x6,0x60,0x6,0xc0,0x3,0xc0,0x3,0xc0,0x3,
0xc0,0x3,0xc0,0x3,0xc0,0x3,0xc0,0x3,0x60,0x6,0x60,0x6,0x38,0x1c,0x1c,0x38,
0x7,0xe0,0x0,0x0,0x0,0x40,0x1,0x80,0x7,0x0,0x6,0x0,
};
static const BitmapCharRec ch210 = {16,22,-1,0,18,ch210data};
/* char: 0xd1 */
static const GLubyte ch209data[] = {
0xf8,0xc,0x20,0x1c,0x20,0x1c,0x20,0x34,0x20,0x64,0x20,0x64,0x20,0xc4,0x21,0x84,
0x21,0x84,0x23,0x4,0x26,0x4,0x26,0x4,0x2c,0x4,0x38,0x4,0x38,0x4,0x30,0x4,
0xf0,0x1f,0x0,0x0,0x0,0x0,0x4,0xe0,0x3,0x90,
};
static const BitmapCharRec ch209 = {16,21,-1,0,18,ch209data};
/* char: 0xd0 */
static const GLubyte ch208data[] = {
0x7f,0xe0,0x18,0x38,0x18,0x1c,0x18,0x6,0x18,0x6,0x18,0x3,0x18,0x3,0x18,0x3,
0xff,0x3,0x18,0x3,0x18,0x3,0x18,0x3,0x18,0x6,0x18,0x6,0x18,0x1c,0x18,0x38,
0x7f,0xe0,
};
static const BitmapCharRec ch208 = {16,17,0,0,17,ch208data};
/* char: 0xcf */
static const GLubyte ch207data[] = {
0xfc,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
0xfc,0x0,0x0,0xcc,0xcc,
};
static const BitmapCharRec ch207 = {6,21,-1,0,8,ch207data};
/* char: 0xce */
static const GLubyte ch206data[] = {
0x7e,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
0x7e,0x0,0x81,0x66,0x3c,0x18,
};
static const BitmapCharRec ch206 = {8,22,-1,0,8,ch206data};
/* char: 0xcd */
static const GLubyte ch205data[] = {
0xfc,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
0xfc,0x0,0x40,0x30,0x1c,0xc,
};
static const BitmapCharRec ch205 = {6,22,-1,0,8,ch205data};
/* char: 0xcc */
static const GLubyte ch204data[] = {
0xfc,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
0xfc,0x0,0x8,0x30,0xe0,0xc0,
};
static const BitmapCharRec ch204 = {6,22,-1,0,8,ch204data};
/* char: 0xcb */
static const GLubyte ch203data[] = {
0xff,0xf8,0x30,0x18,0x30,0x8,0x30,0x8,0x30,0x0,0x30,0x0,0x30,0x40,0x30,0x40,
0x3f,0xc0,0x30,0x40,0x30,0x40,0x30,0x0,0x30,0x0,0x30,0x10,0x30,0x10,0x30,0x30,
0xff,0xf0,0x0,0x0,0x0,0x0,0x19,0x80,0x19,0x80,
};
static const BitmapCharRec ch203 = {13,21,-1,0,15,ch203data};
/* char: 0xca */
static const GLubyte ch202data[] = {
0xff,0xf8,0x30,0x18,0x30,0x8,0x30,0x8,0x30,0x0,0x30,0x0,0x30,0x40,0x30,0x40,
0x3f,0xc0,0x30,0x40,0x30,0x40,0x30,0x0,0x30,0x0,0x30,0x10,0x30,0x10,0x30,0x30,
0xff,0xf0,0x0,0x0,0x10,0x20,0xc,0xc0,0x7,0x80,0x3,0x0,
};
static const BitmapCharRec ch202 = {13,22,-1,0,15,ch202data};
/* char: 0xc9 */
static const GLubyte ch201data[] = {
0xff,0xf8,0x30,0x18,0x30,0x8,0x30,0x8,0x30,0x0,0x30,0x0,0x30,0x40,0x30,0x40,
0x3f,0xc0,0x30,0x40,0x30,0x40,0x30,0x0,0x30,0x0,0x30,0x10,0x30,0x10,0x30,0x30,
0xff,0xf0,0x0,0x0,0x4,0x0,0x3,0x0,0x1,0xc0,0x0,0xc0,
};
static const BitmapCharRec ch201 = {13,22,-1,0,15,ch201data};
/* char: 0xc8 */
static const GLubyte ch200data[] = {
0xff,0xf8,0x30,0x18,0x30,0x8,0x30,0x8,0x30,0x0,0x30,0x0,0x30,0x40,0x30,0x40,
0x3f,0xc0,0x30,0x40,0x30,0x40,0x30,0x0,0x30,0x0,0x30,0x10,0x30,0x10,0x30,0x30,
0xff,0xf0,0x0,0x0,0x1,0x0,0x6,0x0,0x1c,0x0,0x18,0x0,
};
static const BitmapCharRec ch200 = {13,22,-1,0,15,ch200data};
/* char: 0xc7 */
static const GLubyte ch199data[] = {
0x7,0x80,0xc,0xc0,0x0,0xc0,0x3,0xc0,0x3,0x0,0x1,0x0,0x7,0xe0,0x1e,0x38,
0x38,0x8,0x60,0x4,0x60,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,
0xc0,0x0,0xc0,0x0,0x60,0x4,0x60,0x4,0x38,0xc,0x1c,0x3c,0x7,0xe4,
};
static const BitmapCharRec ch199 = {14,23,-1,6,16,ch199data};
/* char: 0xc6 */
static const GLubyte ch198data[] = {
0xf9,0xff,0xf0,0x30,0x60,0x30,0x10,0x60,0x10,0x10,0x60,0x10,0x18,0x60,0x0,0x8,
0x60,0x0,0xf,0xe0,0x80,0xc,0x60,0x80,0x4,0x7f,0x80,0x4,0x60,0x80,0x6,0x60,
0x80,0x2,0x60,0x0,0x2,0x60,0x0,0x1,0x60,0x20,0x1,0x60,0x20,0x1,0xe0,0x60,
0x3,0xff,0xe0,
};
static const BitmapCharRec ch198 = {20,17,0,0,21,ch198data};
/* char: 0xc5 */
static const GLubyte ch197data[] = {
0xfc,0x1f,0x80,0x30,0x6,0x0,0x10,0x6,0x0,0x10,0xc,0x0,0x18,0xc,0x0,0x8,
0xc,0x0,0xf,0xf8,0x0,0xc,0x18,0x0,0x4,0x18,0x0,0x4,0x30,0x0,0x6,0x30,
0x0,0x2,0x30,0x0,0x2,0x60,0x0,0x1,0x60,0x0,0x1,0xc0,0x0,0x1,0xc0,0x0,
0x0,0x80,0x0,0x1,0xc0,0x0,0x2,0x20,0x0,0x2,0x20,0x0,0x1,0xc0,0x0,
};
static const BitmapCharRec ch197 = {17,21,0,0,17,ch197data};
/* char: 0xc4 */
static const GLubyte ch196data[] = {
0xfc,0x1f,0x80,0x30,0x6,0x0,0x10,0x6,0x0,0x10,0xc,0x0,0x18,0xc,0x0,0x8,
0xc,0x0,0xf,0xf8,0x0,0xc,0x18,0x0,0x4,0x18,0x0,0x4,0x30,0x0,0x6,0x30,
0x0,0x2,0x30,0x0,0x2,0x60,0x0,0x1,0x60,0x0,0x1,0xc0,0x0,0x1,0xc0,0x0,
0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6,0x30,0x0,0x6,0x30,0x0,
};
static const BitmapCharRec ch196 = {17,21,0,0,17,ch196data};
/* char: 0xc3 */
static const GLubyte ch195data[] = {
0xfc,0x1f,0x80,0x30,0x7,0x0,0x10,0x6,0x0,0x10,0xc,0x0,0x18,0xc,0x0,0x8,
0xc,0x0,0xf,0xf8,0x0,0xc,0x18,0x0,0x4,0x18,0x0,0x4,0x30,0x0,0x6,0x30,
0x0,0x2,0x30,0x0,0x2,0x60,0x0,0x1,0x60,0x0,0x1,0xc0,0x0,0x1,0xc0,0x0,
0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0xe0,0x0,0x3,0x90,0x0,
};
static const BitmapCharRec ch195 = {17,21,0,0,17,ch195data};
/* char: 0xc2 */
static const GLubyte ch194data[] = {
0xfc,0x1f,0x80,0x30,0x6,0x0,0x10,0x6,0x0,0x10,0xc,0x0,0x18,0xc,0x0,0x8,
0xc,0x0,0xf,0xf8,0x0,0xc,0x18,0x0,0x4,0x18,0x0,0x4,0x30,0x0,0x6,0x30,
0x0,0x2,0x30,0x0,0x2,0x60,0x0,0x1,0x60,0x0,0x1,0xc0,0x0,0x1,0xc0,0x0,
0x0,0x80,0x0,0x0,0x0,0x0,0x8,0x10,0x0,0x6,0x60,0x0,0x3,0xc0,0x0,0x1,
0x80,0x0,
};
static const BitmapCharRec ch194 = {17,22,0,0,17,ch194data};
/* char: 0xc1 */
static const GLubyte ch193data[] = {
0xfc,0x1f,0x80,0x30,0x6,0x0,0x10,0x6,0x0,0x10,0xc,0x0,0x18,0xc,0x0,0x8,
0xc,0x0,0xf,0xf8,0x0,0xc,0x18,0x0,0x4,0x18,0x0,0x4,0x30,0x0,0x6,0x30,
0x0,0x2,0x30,0x0,0x2,0x60,0x0,0x1,0x60,0x0,0x1,0xc0,0x0,0x1,0xc0,0x0,
0x0,0x80,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0xc0,0x0,0x0,0x70,0x0,0x0,
0x30,0x0,
};
static const BitmapCharRec ch193 = {17,22,0,0,17,ch193data};
/* char: 0xc0 */
static const GLubyte ch192data[] = {
0xfc,0x1f,0x80,0x30,0x6,0x0,0x10,0x6,0x0,0x10,0xc,0x0,0x18,0xc,0x0,0x8,
0xc,0x0,0xf,0xf8,0x0,0xc,0x18,0x0,0x4,0x18,0x0,0x4,0x30,0x0,0x6,0x30,
0x0,0x2,0x30,0x0,0x2,0x60,0x0,0x1,0x60,0x0,0x1,0xc0,0x0,0x1,0xc0,0x0,
0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x20,0x0,0x0,0xc0,0x0,0x3,0x80,0x0,0x3,
0x0,0x0,
};
static const BitmapCharRec ch192 = {17,22,0,0,17,ch192data};
/* char: 0xbf */
static const GLubyte ch191data[] = {
0x3e,0x63,0xc1,0xc3,0xc3,0xe0,0x70,0x30,0x38,0x18,0x18,0x8,0x8,0x0,0x0,0xc,
0xc,
};
static const BitmapCharRec ch191 = {8,17,-1,5,11,ch191data};
/* char: 0xbe */
static const GLubyte ch190data[] = {
0x18,0x2,0x0,0x8,0x2,0x0,0xc,0x7f,0x80,0x4,0x22,0x0,0x6,0x32,0x0,0x3,
0x12,0x0,0x1,0xa,0x0,0x71,0x8e,0x0,0x88,0x86,0x0,0x8c,0xc2,0x0,0xc,0x60,
0x0,0x8,0x20,0x0,0x30,0x30,0x0,0x8,0x10,0x0,0x8c,0x18,0x0,0x4c,0xc,0x0,
0x38,0x4,0x0,
};
static const BitmapCharRec ch190 = {17,17,0,0,18,ch190data};
/* char: 0xbd */
static const GLubyte ch189data[] = {
0x30,0x7e,0x10,0x22,0x18,0x10,0x8,0x18,0xc,0x8,0x6,0x4,0x2,0x6,0xfb,0x46,
0x21,0x26,0x21,0x9c,0x20,0xc0,0x20,0x40,0x20,0x60,0x20,0x20,0xa0,0x30,0x60,0x18,
0x20,0x8,
};
static const BitmapCharRec ch189 = {15,17,-1,0,18,ch189data};
/* char: 0xbc */
static const GLubyte ch188data[] = {
0x30,0x4,0x10,0x4,0x18,0xff,0x8,0x44,0xc,0x64,0x6,0x24,0x2,0x14,0xfb,0x1c,
0x21,0xc,0x21,0x84,0x20,0xc0,0x20,0x40,0x20,0x60,0x20,0x20,0xa0,0x30,0x60,0x18,
0x20,0x8,
};
static const BitmapCharRec ch188 = {16,17,-1,0,18,ch188data};
/* char: 0xbb */
static const GLubyte ch187data[] = {
0x88,0x0,0xcc,0x0,0x66,0x0,0x33,0x0,0x19,0x80,0x19,0x80,0x33,0x0,0x66,0x0,
0xcc,0x0,0x88,0x0,
};
static const BitmapCharRec ch187 = {9,10,-2,-1,12,ch187data};
/* char: 0xba */
static const GLubyte ch186data[] = {
0xfc,0x0,0x78,0xcc,0xcc,0xcc,0xcc,0xcc,0x78,
};
static const BitmapCharRec ch186 = {6,9,-1,-8,8,ch186data};
/* char: 0xb9 */
static const GLubyte ch185data[] = {
0xf8,0x20,0x20,0x20,0x20,0x20,0x20,0xa0,0x60,0x20,
};
static const BitmapCharRec ch185 = {5,10,-1,-7,7,ch185data};
/* char: 0xb8 */
static const GLubyte ch184data[] = {
0x78,0xcc,0xc,0x3c,0x30,0x10,
};
static const BitmapCharRec ch184 = {6,6,-1,6,8,ch184data};
/* char: 0xb7 */
static const GLubyte ch183data[] = {
0xc0,0xc0,
};
static const BitmapCharRec ch183 = {2,2,-2,-6,6,ch183data};
/* char: 0xb6 */
static const GLubyte ch182data[] = {
0x9,0x0,0x9,0x0,0x9,0x0,0x9,0x0,0x9,0x0,0x9,0x0,0x9,0x0,0x9,0x0,
0x9,0x0,0x9,0x0,0x9,0x0,0x19,0x0,0x39,0x0,0x79,0x0,0x79,0x0,0xf9,0x0,
0xf9,0x0,0xf9,0x0,0x79,0x0,0x79,0x0,0x39,0x0,0x1f,0x80,
};
static const BitmapCharRec ch182 = {9,22,-1,5,11,ch182data};
/* char: 0xb5 */
static const GLubyte ch181data[] = {
0x40,0x0,0xe0,0x0,0xc0,0x0,0x40,0x0,0x40,0x0,0x5c,0xe0,0x7e,0xc0,0x71,0xc0,
0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,
0xe1,0xc0,
};
static const BitmapCharRec ch181 = {11,17,-1,5,13,ch181data};
/* char: 0xb4 */
static const GLubyte ch180data[] = {
0x80,0x60,0x38,0x18,
};
static const BitmapCharRec ch180 = {5,4,-2,-13,8,ch180data};
/* char: 0xb3 */
static const GLubyte ch179data[] = {
0x70,0x88,0x8c,0xc,0x8,0x30,0x8,0x8c,0x4c,0x38,
};
static const BitmapCharRec ch179 = {6,10,0,-7,7,ch179data};
/* char: 0xb2 */
static const GLubyte ch178data[] = {
0xfc,0x44,0x20,0x30,0x10,0x8,0xc,0x8c,0x4c,0x38,
};
static const BitmapCharRec ch178 = {6,10,0,-7,7,ch178data};
/* char: 0xb1 */
static const GLubyte ch177data[] = {
0xff,0xf0,0xff,0xf0,0x0,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,
0xff,0xf0,0xff,0xf0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,
};
static const BitmapCharRec ch177 = {12,15,-1,0,14,ch177data};
/* char: 0xb0 */
static const GLubyte ch176data[] = {
0x38,0x44,0x82,0x82,0x82,0x44,0x38,
};
static const BitmapCharRec ch176 = {7,7,-1,-10,9,ch176data};
/* char: 0xaf */
static const GLubyte ch175data[] = {
0xfc,0xfc,
};
static const BitmapCharRec ch175 = {6,2,-1,-14,8,ch175data};
/* char: 0xae */
static const GLubyte ch174data[] = {
0x7,0xf0,0x0,0x1c,0x1c,0x0,0x30,0x6,0x0,0x60,0x3,0x0,0x47,0x19,0x0,0xc2,
0x31,0x80,0x82,0x20,0x80,0x82,0x40,0x80,0x83,0xe0,0x80,0x82,0x30,0x80,0x82,0x10,
0x80,0xc2,0x11,0x80,0x42,0x31,0x0,0x67,0xe3,0x0,0x30,0x6,0x0,0x1c,0x1c,0x0,
0x7,0xf0,0x0,
};
static const BitmapCharRec ch174 = {17,17,-1,0,19,ch174data};
/* char: 0xad */
static const GLubyte ch173data[] = {
0xfe,0xfe,
};
static const BitmapCharRec ch173 = {7,2,-1,-5,9,ch173data};
/* char: 0xac */
static const GLubyte ch172data[] = {
0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0xff,0xf0,0xff,0xf0,
};
static const BitmapCharRec ch172 = {12,7,-1,-3,14,ch172data};
/* char: 0xab */
static const GLubyte ch171data[] = {
0x8,0x80,0x19,0x80,0x33,0x0,0x66,0x0,0xcc,0x0,0xcc,0x0,0x66,0x0,0x33,0x0,
0x19,0x80,0x8,0x80,
};
static const BitmapCharRec ch171 = {9,10,-2,-1,13,ch171data};
/* char: 0xaa */
static const GLubyte ch170data[] = {
0x7e,0x0,0x76,0xcc,0xcc,0x7c,0xc,0xcc,0x78,
};
static const BitmapCharRec ch170 = {7,9,0,-8,8,ch170data};
/* char: 0xa9 */
static const GLubyte ch169data[] = {
0x7,0xf0,0x0,0x1c,0x1c,0x0,0x30,0x6,0x0,0x61,0xc3,0x0,0x47,0x71,0x0,0xc4,
0x19,0x80,0x8c,0x0,0x80,0x88,0x0,0x80,0x88,0x0,0x80,0x88,0x0,0x80,0x8c,0x0,
0x80,0xc4,0x19,0x80,0x47,0x31,0x0,0x61,0xe3,0x0,0x30,0x6,0x0,0x1c,0x1c,0x0,
0x7,0xf0,0x0,
};
static const BitmapCharRec ch169 = {17,17,-1,0,19,ch169data};
/* char: 0xa8 */
static const GLubyte ch168data[] = {
0xcc,0xcc,
};
static const BitmapCharRec ch168 = {6,2,-1,-14,8,ch168data};
/* char: 0xa7 */
static const GLubyte ch167data[] = {
0x38,0x64,0x62,0x6,0xe,0x1c,0x38,0x74,0xe2,0xc3,0x83,0x87,0x4e,0x3c,0x38,0x70,
0x60,0x46,0x26,0x1c,
};
static const BitmapCharRec ch167 = {8,20,-2,2,12,ch167data};
/* char: 0xa6 */
static const GLubyte ch166data[] = {
0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x0,0x0,0x0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
0xc0,
};
static const BitmapCharRec ch166 = {2,17,-2,0,6,ch166data};
/* char: 0xa5 */
static const GLubyte ch165data[] = {
0xf,0xc0,0x3,0x0,0x3,0x0,0x3,0x0,0x3,0x0,0x1f,0xe0,0x3,0x0,0x1f,0xe0,
0x3,0x0,0x7,0x80,0xc,0x80,0xc,0xc0,0x18,0x40,0x18,0x60,0x30,0x20,0x70,0x30,
0xf8,0x7c,
};
static const BitmapCharRec ch165 = {14,17,0,0,14,ch165data};
/* char: 0xa4 */
static const GLubyte ch164data[] = {
0xc0,0x60,0xee,0xe0,0x7f,0xc0,0x31,0x80,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,
0x31,0x80,0x7f,0xc0,0xee,0xe0,0xc0,0x60,
};
static const BitmapCharRec ch164 = {11,12,-1,-3,13,ch164data};
/* char: 0xa3 */
static const GLubyte ch163data[] = {
0xe7,0x80,0xbe,0xc0,0x78,0x40,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,
0x30,0x0,0xfc,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x31,0x80,0x19,0x80,
0xf,0x0,
};
static const BitmapCharRec ch163 = {10,17,-1,0,12,ch163data};
/* char: 0xa2 */
static const GLubyte ch162data[] = {
0x40,0x0,0x40,0x0,0x3e,0x0,0x7f,0x0,0x70,0x80,0xd0,0x0,0xc8,0x0,0xc8,0x0,
0xc8,0x0,0xc4,0x0,0xc4,0x0,0x43,0x80,0x63,0x80,0x1f,0x0,0x1,0x0,0x1,0x0,
};
static const BitmapCharRec ch162 = {9,16,-1,2,12,ch162data};
/* char: 0xa1 */
static const GLubyte ch161data[] = {
0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x0,0x0,0x0,0xc0,
0xc0,
};
static const BitmapCharRec ch161 = {2,17,-4,5,8,ch161data};
/* char: 0xa0 */
#ifdef _WIN32
/* XXX Work around Microsoft OpenGL 1.1 bug where glBitmap with
a height or width of zero does not advance the raster position
as specified by OpenGL. (Cosmo OpenGL does not have this bug.) */
static const GLubyte ch160data[] = { 0x0 };
static const BitmapCharRec ch160 = {1,1,0,0,6,ch160data};
#else
static const BitmapCharRec ch160 = {0,0,0,0,6,0};
#endif
/* char: 0x7e '~' */
static const GLubyte ch126data[] = {
0x83,0x80,0xc7,0xc0,0x7c,0x60,0x38,0x20,
};
static const BitmapCharRec ch126 = {11,4,-1,-5,13,ch126data};
/* char: 0x7d '}' */
static const GLubyte ch125data[] = {
0xe0,0x30,0x18,0x18,0x18,0x18,0x18,0x18,0x8,0xc,0x4,0x3,0x4,0xc,0x8,0x18,
0x18,0x18,0x18,0x18,0x30,0xe0,
};
static const BitmapCharRec ch125 = {8,22,-1,5,10,ch125data};
/* char: 0x7c '|' */
static const GLubyte ch124data[] = {
0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
0xc0,
};
static const BitmapCharRec ch124 = {2,17,-2,0,6,ch124data};
/* char: 0x7b '{' */
static const GLubyte ch123data[] = {
0x7,0xc,0x18,0x18,0x18,0x18,0x18,0x18,0x10,0x30,0x20,0xc0,0x20,0x30,0x10,0x18,
0x18,0x18,0x18,0x18,0xc,0x7,
};
static const BitmapCharRec ch123 = {8,22,-1,5,10,ch123data};
/* char: 0x7a 'z' */
static const GLubyte ch122data[] = {
0xff,0xc3,0x61,0x70,0x30,0x38,0x18,0x1c,0xe,0x86,0xc3,0xff,
};
static const BitmapCharRec ch122 = {8,12,-1,0,10,ch122data};
/* char: 0x79 'y' */
static const GLubyte ch121data[] = {
0xe0,0x0,0xf0,0x0,0x18,0x0,0x8,0x0,0xc,0x0,0x4,0x0,0xe,0x0,0xe,0x0,
0x1a,0x0,0x19,0x0,0x19,0x0,0x31,0x0,0x30,0x80,0x30,0x80,0x60,0x80,0x60,0xc0,
0xf1,0xe0,
};
static const BitmapCharRec ch121 = {11,17,0,5,11,ch121data};
/* char: 0x78 'x' */
static const GLubyte ch120data[] = {
0xf1,0xe0,0x60,0xc0,0x21,0x80,0x33,0x80,0x1b,0x0,0xe,0x0,0xc,0x0,0x1a,0x0,
0x39,0x0,0x31,0x80,0x60,0xc0,0xf1,0xe0,
};
static const BitmapCharRec ch120 = {11,12,-1,0,13,ch120data};
/* char: 0x77 'w' */
static const GLubyte ch119data[] = {
0x4,0x10,0x0,0xe,0x38,0x0,0xe,0x38,0x0,0x1a,0x28,0x0,0x1a,0x64,0x0,0x19,
0x64,0x0,0x31,0x64,0x0,0x30,0xc2,0x0,0x30,0xc2,0x0,0x60,0xc2,0x0,0x60,0xc3,
0x0,0xf1,0xe7,0x80,
};
static const BitmapCharRec ch119 = {17,12,0,0,17,ch119data};
/* char: 0x76 'v' */
static const GLubyte ch118data[] = {
0x4,0x0,0xe,0x0,0xe,0x0,0x1a,0x0,0x19,0x0,0x19,0x0,0x31,0x0,0x30,0x80,
0x30,0x80,0x60,0x80,0x60,0xc0,0xf1,0xe0,
};
static const BitmapCharRec ch118 = {11,12,0,0,11,ch118data};
/* char: 0x75 'u' */
static const GLubyte ch117data[] = {
0x1c,0xe0,0x3e,0xc0,0x71,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,
0x60,0xc0,0x60,0xc0,0x60,0xc0,0xe1,0xc0,
};
static const BitmapCharRec ch117 = {11,12,-1,0,13,ch117data};
/* char: 0x74 't' */
static const GLubyte ch116data[] = {
0x1c,0x32,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0xfe,0x70,0x30,0x10,
};
static const BitmapCharRec ch116 = {7,15,0,0,7,ch116data};
/* char: 0x73 's' */
static const GLubyte ch115data[] = {
0xf8,0xc6,0x83,0x3,0x7,0x1e,0x7c,0x70,0xe0,0xc2,0x66,0x3e,
};
static const BitmapCharRec ch115 = {8,12,-1,0,10,ch115data};
/* char: 0x72 'r' */
static const GLubyte ch114data[] = {
0xf0,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x76,0x6e,0xe6,
};
static const BitmapCharRec ch114 = {7,12,-1,0,8,ch114data};
/* char: 0x71 'q' */
static const GLubyte ch113data[] = {
0x3,0xc0,0x1,0x80,0x1,0x80,0x1,0x80,0x1,0x80,0x1d,0x80,0x73,0x80,0x61,0x80,
0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0x61,0x80,0x73,0x80,
0x1d,0x80,
};
static const BitmapCharRec ch113 = {10,17,-1,5,12,ch113data};
/* char: 0x70 'p' */
static const GLubyte ch112data[] = {
0xf0,0x0,0x60,0x0,0x60,0x0,0x60,0x0,0x60,0x0,0x6e,0x0,0x73,0x80,0x61,0x80,
0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x61,0x80,0x73,0x80,
0xee,0x0,
};
static const BitmapCharRec ch112 = {10,17,-1,5,12,ch112data};
/* char: 0x6f 'o' */
static const GLubyte ch111data[] = {
0x1e,0x0,0x73,0x80,0x61,0x80,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
0xc0,0xc0,0x61,0x80,0x73,0x80,0x1e,0x0,
};
static const BitmapCharRec ch111 = {10,12,-1,0,12,ch111data};
/* char: 0x6e 'n' */
static const GLubyte ch110data[] = {
0xf1,0xe0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,
0x60,0xc0,0x71,0xc0,0x6f,0x80,0xe7,0x0,
};
static const BitmapCharRec ch110 = {11,12,-1,0,13,ch110data};
/* char: 0x6d 'm' */
static const GLubyte ch109data[] = {
0xf1,0xe3,0xc0,0x60,0xc1,0x80,0x60,0xc1,0x80,0x60,0xc1,0x80,0x60,0xc1,0x80,0x60,
0xc1,0x80,0x60,0xc1,0x80,0x60,0xc1,0x80,0x60,0xc1,0x80,0x71,0xe3,0x80,0x6f,0x9f,
0x0,0xe7,0xe,0x0,
};
static const BitmapCharRec ch109 = {18,12,-1,0,20,ch109data};
/* char: 0x6c 'l' */
static const GLubyte ch108data[] = {
0xf0,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,
0xe0,
};
static const BitmapCharRec ch108 = {4,17,-1,0,6,ch108data};
/* char: 0x6b 'k' */
static const GLubyte ch107data[] = {
0xf3,0xe0,0x61,0xc0,0x63,0x80,0x67,0x0,0x6e,0x0,0x6c,0x0,0x78,0x0,0x68,0x0,
0x64,0x0,0x66,0x0,0x63,0x0,0x67,0xc0,0x60,0x0,0x60,0x0,0x60,0x0,0x60,0x0,
0xe0,0x0,
};
static const BitmapCharRec ch107 = {11,17,-1,0,12,ch107data};
/* char: 0x6a 'j' */
static const GLubyte ch106data[] = {
0xc0,0xe0,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
0x70,0x0,0x0,0x0,0x30,0x30,
};
static const BitmapCharRec ch106 = {4,22,0,5,6,ch106data};
/* char: 0x69 'i' */
static const GLubyte ch105data[] = {
0xf0,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0xe0,0x0,0x0,0x0,0x60,
0x60,
};
static const BitmapCharRec ch105 = {4,17,-1,0,6,ch105data};
/* char: 0x68 'h' */
static const GLubyte ch104data[] = {
0xf1,0xe0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,
0x60,0xc0,0x71,0xc0,0x6f,0x80,0x67,0x0,0x60,0x0,0x60,0x0,0x60,0x0,0x60,0x0,
0xe0,0x0,
};
static const BitmapCharRec ch104 = {11,17,-1,0,13,ch104data};
/* char: 0x67 'g' */
static const GLubyte ch103data[] = {
0x3f,0x0,0xf1,0xc0,0xc0,0x60,0xc0,0x20,0x60,0x60,0x3f,0xc0,0x7f,0x0,0x60,0x0,
0x30,0x0,0x3e,0x0,0x33,0x0,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x33,0x0,
0x1f,0xc0,
};
static const BitmapCharRec ch103 = {11,17,-1,5,12,ch103data};
/* char: 0x66 'f' */
static const GLubyte ch102data[] = {
0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0xfe,0x30,0x30,0x30,0x16,
0xe,
};
static const BitmapCharRec ch102 = {7,17,0,0,7,ch102data};
/* char: 0x65 'e' */
static const GLubyte ch101data[] = {
0x1e,0x0,0x7f,0x0,0x70,0x80,0xe0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x80,
0xc1,0x80,0x41,0x80,0x63,0x0,0x1e,0x0,
};
static const BitmapCharRec ch101 = {9,12,-1,0,11,ch101data};
/* char: 0x64 'd' */
static const GLubyte ch100data[] = {
0x1e,0xc0,0x73,0x80,0x61,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,
0xc1,0x80,0x61,0x80,0x73,0x80,0x1d,0x80,0x1,0x80,0x1,0x80,0x1,0x80,0x1,0x80,
0x3,0x80,
};
static const BitmapCharRec ch100 = {10,17,-1,0,12,ch100data};
/* char: 0x63 'c' */
static const GLubyte ch99data[] = {
0x1e,0x0,0x7f,0x0,0x70,0x80,0xe0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,
0xc0,0x0,0x41,0x80,0x63,0x80,0x1f,0x0,
};
static const BitmapCharRec ch99 = {9,12,-1,0,11,ch99data};
/* char: 0x62 'b' */
static const GLubyte ch98data[] = {
0x5e,0x0,0x73,0x80,0x61,0x80,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,
0x60,0xc0,0x61,0x80,0x73,0x80,0x6e,0x0,0x60,0x0,0x60,0x0,0x60,0x0,0x60,0x0,
0xe0,0x0,
};
static const BitmapCharRec ch98 = {10,17,-1,0,12,ch98data};
/* char: 0x61 'a' */
static const GLubyte ch97data[] = {
0x71,0x80,0xfb,0x0,0xc7,0x0,0xc3,0x0,0xc3,0x0,0x63,0x0,0x3b,0x0,0xf,0x0,
0x3,0x0,0x63,0x0,0x67,0x0,0x3e,0x0,
};
static const BitmapCharRec ch97 = {9,12,-1,0,11,ch97data};
/* char: 0x60 '`' */
static const GLubyte ch96data[] = {
0x60,0xe0,0x80,0xc0,0x60,
};
static const BitmapCharRec ch96 = {3,5,-2,-12,7,ch96data};
/* char: 0x5f '_' */
static const GLubyte ch95data[] = {
0xff,0xf8,0xff,0xf8,
};
static const BitmapCharRec ch95 = {13,2,0,5,13,ch95data};
/* char: 0x5e '^' */
static const GLubyte ch94data[] = {
0x80,0x80,0xc1,0x80,0x41,0x0,0x63,0x0,0x22,0x0,0x36,0x0,0x14,0x0,0x1c,0x0,
0x8,0x0,
};
static const BitmapCharRec ch94 = {9,9,-1,-8,11,ch94data};
/* char: 0x5d ']' */
static const GLubyte ch93data[] = {
0xf8,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
0x18,0x18,0x18,0x18,0xf8,
};
static const BitmapCharRec ch93 = {5,21,-1,4,8,ch93data};
/* char: 0x5c '\' */
static const GLubyte ch92data[] = {
0x6,0x6,0x4,0xc,0xc,0x8,0x18,0x18,0x10,0x30,0x30,0x20,0x60,0x60,0x40,0xc0,
0xc0,
};
static const BitmapCharRec ch92 = {7,17,0,0,7,ch92data};
/* char: 0x5b '[' */
static const GLubyte ch91data[] = {
0xf8,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
0xc0,0xc0,0xc0,0xc0,0xf8,
};
static const BitmapCharRec ch91 = {5,21,-2,4,8,ch91data};
/* char: 0x5a 'Z' */
static const GLubyte ch90data[] = {
0xff,0xf8,0xe0,0x18,0x70,0x8,0x30,0x8,0x38,0x0,0x18,0x0,0x1c,0x0,0xe,0x0,
0x6,0x0,0x7,0x0,0x3,0x0,0x3,0x80,0x1,0xc0,0x80,0xc0,0x80,0xe0,0xc0,0x70,
0xff,0xf0,
};
static const BitmapCharRec ch90 = {13,17,-1,0,15,ch90data};
/* char: 0x59 'Y' */
static const GLubyte ch89data[] = {
0x7,0xe0,0x1,0x80,0x1,0x80,0x1,0x80,0x1,0x80,0x1,0x80,0x1,0x80,0x3,0xc0,
0x3,0x40,0x6,0x60,0x6,0x20,0xc,0x30,0x1c,0x10,0x18,0x18,0x38,0x8,0x30,0xc,
0xfc,0x3f,
};
static const BitmapCharRec ch89 = {16,17,0,0,16,ch89data};
/* char: 0x58 'X' */
static const GLubyte ch88data[] = {
0xfc,0xf,0xc0,0x30,0x3,0x80,0x18,0x7,0x0,0x8,0xe,0x0,0x4,0xc,0x0,0x6,
0x18,0x0,0x2,0x38,0x0,0x1,0x70,0x0,0x0,0xe0,0x0,0x0,0xc0,0x0,0x1,0xc0,
0x0,0x3,0xa0,0x0,0x3,0x10,0x0,0x6,0x8,0x0,0xe,0xc,0x0,0x1c,0x6,0x0,
0x7e,0xf,0x80,
};
static const BitmapCharRec ch88 = {18,17,0,0,18,ch88data};
/* char: 0x57 'W' */
static const GLubyte ch87data[] = {
0x1,0x83,0x0,0x1,0x83,0x0,0x1,0x83,0x80,0x3,0x87,0x80,0x3,0x46,0x80,0x3,
0x46,0xc0,0x6,0x46,0x40,0x6,0x4c,0x40,0x6,0x4c,0x60,0xc,0x2c,0x60,0xc,0x2c,
0x20,0x18,0x2c,0x20,0x18,0x18,0x30,0x18,0x18,0x10,0x30,0x18,0x10,0x30,0x18,0x18,
0xfc,0x7e,0x7e,
};
static const BitmapCharRec ch87 = {23,17,0,0,23,ch87data};
/* char: 0x56 'V' */
static const GLubyte ch86data[] = {
0x1,0x80,0x0,0x1,0x80,0x0,0x1,0x80,0x0,0x3,0xc0,0x0,0x3,0x40,0x0,0x3,
0x60,0x0,0x6,0x20,0x0,0x6,0x20,0x0,0x6,0x30,0x0,0xc,0x10,0x0,0xc,0x18,
0x0,0x18,0x8,0x0,0x18,0x8,0x0,0x18,0xc,0x0,0x30,0x4,0x0,0x30,0x6,0x0,
0xfc,0x1f,0x80,
};
static const BitmapCharRec ch86 = {17,17,0,0,17,ch86data};
/* char: 0x55 'U' */
static const GLubyte ch85data[] = {
0x7,0xe0,0x1c,0x30,0x18,0x8,0x30,0x8,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,
0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,
0xfc,0x1f,
};
static const BitmapCharRec ch85 = {16,17,-1,0,18,ch85data};
/* char: 0x54 'T' */
static const GLubyte ch84data[] = {
0xf,0xc0,0x3,0x0,0x3,0x0,0x3,0x0,0x3,0x0,0x3,0x0,0x3,0x0,0x3,0x0,
0x3,0x0,0x3,0x0,0x3,0x0,0x3,0x0,0x3,0x0,0x83,0x4,0x83,0x4,0xc3,0xc,
0xff,0xfc,
};
static const BitmapCharRec ch84 = {14,17,-1,0,16,ch84data};
/* char: 0x53 'S' */
static const GLubyte ch83data[] = {
0x9e,0x0,0xf1,0x80,0xc0,0xc0,0x80,0x60,0x80,0x60,0x0,0x60,0x0,0xe0,0x3,0xc0,
0xf,0x80,0x1e,0x0,0x78,0x0,0xe0,0x0,0xc0,0x40,0xc0,0x40,0xc0,0xc0,0x63,0xc0,
0x1e,0x40,
};
static const BitmapCharRec ch83 = {11,17,-1,0,13,ch83data};
/* char: 0x52 'R' */
static const GLubyte ch82data[] = {
0xfc,0x1e,0x30,0x1c,0x30,0x38,0x30,0x70,0x30,0x60,0x30,0xc0,0x31,0xc0,0x33,0x80,
0x3f,0xc0,0x30,0x70,0x30,0x30,0x30,0x38,0x30,0x18,0x30,0x38,0x30,0x30,0x30,0x70,
0xff,0xc0,
};
static const BitmapCharRec ch82 = {15,17,-1,0,16,ch82data};
/* char: 0x51 'Q' */
static const GLubyte ch81data[] = {
0x0,0xf,0x0,0x38,0x0,0x70,0x0,0xe0,0x1,0xc0,0x7,0xe0,0x1c,0x38,0x38,0x1c,
0x60,0x6,0x60,0x6,0xc0,0x3,0xc0,0x3,0xc0,0x3,0xc0,0x3,0xc0,0x3,0xc0,0x3,
0xc0,0x3,0x60,0x6,0x60,0x6,0x38,0x1c,0x1c,0x38,0x7,0xe0,
};
static const BitmapCharRec ch81 = {16,22,-1,5,18,ch81data};
/* char: 0x50 'P' */
static const GLubyte ch80data[] = {
0xfc,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,
0x3f,0xc0,0x30,0x70,0x30,0x30,0x30,0x18,0x30,0x18,0x30,0x18,0x30,0x30,0x30,0x70,
0xff,0xc0,
};
static const BitmapCharRec ch80 = {13,17,-1,0,15,ch80data};
/* char: 0x4f 'O' */
static const GLubyte ch79data[] = {
0x7,0xe0,0x1c,0x38,0x38,0x1c,0x60,0x6,0x60,0x6,0xc0,0x3,0xc0,0x3,0xc0,0x3,
0xc0,0x3,0xc0,0x3,0xc0,0x3,0xc0,0x3,0x60,0x6,0x60,0x6,0x38,0x1c,0x1c,0x38,
0x7,0xe0,
};
static const BitmapCharRec ch79 = {16,17,-1,0,18,ch79data};
/* char: 0x4e 'N' */
static const GLubyte ch78data[] = {
0xf8,0xc,0x20,0x1c,0x20,0x1c,0x20,0x34,0x20,0x64,0x20,0x64,0x20,0xc4,0x21,0x84,
0x21,0x84,0x23,0x4,0x26,0x4,0x26,0x4,0x2c,0x4,0x38,0x4,0x38,0x4,0x30,0x4,
0xf0,0x1f,
};
static const BitmapCharRec ch78 = {16,17,-1,0,18,ch78data};
/* char: 0x4d 'M' */
static const GLubyte ch77data[] = {
0xf8,0x21,0xf8,0x20,0x60,0x60,0x20,0x60,0x60,0x20,0xd0,0x60,0x20,0xd0,0x60,0x21,
0x88,0x60,0x21,0x88,0x60,0x23,0x8,0x60,0x23,0x4,0x60,0x26,0x4,0x60,0x26,0x2,
0x60,0x2c,0x2,0x60,0x2c,0x2,0x60,0x38,0x1,0x60,0x38,0x1,0x60,0x30,0x0,0xe0,
0xf0,0x0,0xf8,
};
static const BitmapCharRec ch77 = {21,17,-1,0,22,ch77data};
/* char: 0x4c 'L' */
static const GLubyte ch76data[] = {
0xff,0xf8,0x30,0x18,0x30,0x8,0x30,0x8,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,
0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,
0xfc,0x0,
};
static const BitmapCharRec ch76 = {13,17,-1,0,14,ch76data};
/* char: 0x4b 'K' */
static const GLubyte ch75data[] = {
0xfc,0x1f,0x30,0xe,0x30,0x1c,0x30,0x38,0x30,0x70,0x30,0xe0,0x31,0xc0,0x33,0x80,
0x3f,0x0,0x3e,0x0,0x33,0x0,0x31,0x80,0x30,0xc0,0x30,0x60,0x30,0x30,0x30,0x18,
0xfc,0x7e,
};
static const BitmapCharRec ch75 = {16,17,-1,0,17,ch75data};
/* char: 0x4a 'J' */
static const GLubyte ch74data[] = {
0x78,0x0,0xcc,0x0,0xc6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,
0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,
0x1f,0x80,
};
static const BitmapCharRec ch74 = {9,17,-1,0,11,ch74data};
/* char: 0x49 'I' */
static const GLubyte ch73data[] = {
0xfc,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
0xfc,
};
static const BitmapCharRec ch73 = {6,17,-1,0,8,ch73data};
/* char: 0x48 'H' */
static const GLubyte ch72data[] = {
0xfc,0x1f,0x80,0x30,0x6,0x0,0x30,0x6,0x0,0x30,0x6,0x0,0x30,0x6,0x0,0x30,
0x6,0x0,0x30,0x6,0x0,0x30,0x6,0x0,0x3f,0xfe,0x0,0x30,0x6,0x0,0x30,0x6,
0x0,0x30,0x6,0x0,0x30,0x6,0x0,0x30,0x6,0x0,0x30,0x6,0x0,0x30,0x6,0x0,
0xfc,0x1f,0x80,
};
static const BitmapCharRec ch72 = {17,17,-1,0,19,ch72data};
/* char: 0x47 'G' */
static const GLubyte ch71data[] = {
0x7,0xe0,0x1e,0x38,0x38,0x1c,0x60,0xc,0x60,0xc,0xc0,0xc,0xc0,0xc,0xc0,0x3f,
0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0x60,0x4,0x60,0x4,0x38,0xc,0x1c,0x3c,
0x7,0xe4,
};
static const BitmapCharRec ch71 = {16,17,-1,0,18,ch71data};
/* char: 0x46 'F' */
static const GLubyte ch70data[] = {
0xfc,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x20,0x30,0x20,
0x3f,0xe0,0x30,0x20,0x30,0x20,0x30,0x0,0x30,0x0,0x30,0x10,0x30,0x10,0x30,0x30,
0xff,0xf0,
};
static const BitmapCharRec ch70 = {12,17,-1,0,14,ch70data};
/* char: 0x45 'E' */
static const GLubyte ch69data[] = {
0xff,0xf8,0x30,0x18,0x30,0x8,0x30,0x8,0x30,0x0,0x30,0x0,0x30,0x40,0x30,0x40,
0x3f,0xc0,0x30,0x40,0x30,0x40,0x30,0x0,0x30,0x0,0x30,0x10,0x30,0x10,0x30,0x30,
0xff,0xf0,
};
static const BitmapCharRec ch69 = {13,17,-1,0,15,ch69data};
/* char: 0x44 'D' */
static const GLubyte ch68data[] = {
0xff,0xc0,0x30,0x70,0x30,0x38,0x30,0xc,0x30,0xc,0x30,0x6,0x30,0x6,0x30,0x6,
0x30,0x6,0x30,0x6,0x30,0x6,0x30,0x6,0x30,0xc,0x30,0xc,0x30,0x38,0x30,0x70,
0xff,0xc0,
};
static const BitmapCharRec ch68 = {15,17,-1,0,17,ch68data};
/* char: 0x43 'C' */
static const GLubyte ch67data[] = {
0x7,0xe0,0x1e,0x38,0x38,0x8,0x60,0x4,0x60,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,
0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0x60,0x4,0x60,0x4,0x38,0xc,0x1c,0x3c,
0x7,0xe4,
};
static const BitmapCharRec ch67 = {14,17,-1,0,16,ch67data};
/* char: 0x42 'B' */
static const GLubyte ch66data[] = {
0xff,0xe0,0x30,0x78,0x30,0x18,0x30,0xc,0x30,0xc,0x30,0xc,0x30,0x18,0x30,0x38,
0x3f,0xe0,0x30,0x40,0x30,0x30,0x30,0x18,0x30,0x18,0x30,0x18,0x30,0x30,0x30,0x70,
0xff,0xc0,
};
static const BitmapCharRec ch66 = {14,17,-1,0,16,ch66data};
/* char: 0x41 'A' */
static const GLubyte ch65data[] = {
0xfc,0x1f,0x80,0x30,0x6,0x0,0x10,0x6,0x0,0x10,0xc,0x0,0x18,0xc,0x0,0x8,
0xc,0x0,0xf,0xf8,0x0,0xc,0x18,0x0,0x4,0x18,0x0,0x4,0x30,0x0,0x6,0x30,
0x0,0x2,0x30,0x0,0x2,0x60,0x0,0x1,0x60,0x0,0x1,0xc0,0x0,0x1,0xc0,0x0,
0x0,0x80,0x0,
};
static const BitmapCharRec ch65 = {17,17,0,0,17,ch65data};
/* char: 0x40 '@' */
static const GLubyte ch64data[] = {
0x3,0xf0,0x0,0xe,0xc,0x0,0x18,0x0,0x0,0x30,0x0,0x0,0x61,0xde,0x0,0x63,
0x7b,0x0,0xc6,0x39,0x80,0xc6,0x18,0x80,0xc6,0x18,0xc0,0xc6,0x18,0x40,0xc6,0xc,
0x40,0xc3,0xc,0x40,0xc3,0x8c,0x40,0xe1,0xfc,0x40,0x60,0xec,0xc0,0x70,0x0,0x80,
0x38,0x1,0x80,0x1c,0x3,0x0,0xf,0xe,0x0,0x3,0xf8,0x0,
};
static const BitmapCharRec ch64 = {18,20,-2,3,22,ch64data};
/* char: 0x3f '?' */
static const GLubyte ch63data[] = {
0x30,0x30,0x0,0x0,0x10,0x10,0x10,0x18,0x18,0xc,0xe,0x7,0xc3,0xc3,0x83,0xc6,
0x7c,
};
static const BitmapCharRec ch63 = {8,17,-2,0,11,ch63data};
/* char: 0x3e '>' */
static const GLubyte ch62data[] = {
0xc0,0x0,0x70,0x0,0x1c,0x0,0x7,0x0,0x1,0xc0,0x0,0x60,0x1,0xc0,0x7,0x0,
0x1c,0x0,0x70,0x0,0xc0,0x0,
};
static const BitmapCharRec ch62 = {11,11,-1,-1,13,ch62data};
/* char: 0x3d '=' */
static const GLubyte ch61data[] = {
0xff,0xf0,0xff,0xf0,0x0,0x0,0x0,0x0,0xff,0xf0,0xff,0xf0,
};
static const BitmapCharRec ch61 = {12,6,-1,-4,14,ch61data};
/* char: 0x3c '<' */
static const GLubyte ch60data[] = {
0x0,0x60,0x1,0xc0,0x7,0x0,0x1c,0x0,0x70,0x0,0xc0,0x0,0x70,0x0,0x1c,0x0,
0x7,0x0,0x1,0xc0,0x0,0x60,
};
static const BitmapCharRec ch60 = {11,11,-1,-1,13,ch60data};
/* char: 0x3b ';' */
static const GLubyte ch59data[] = {
0xc0,0x60,0x20,0xe0,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0xc0,
};
static const BitmapCharRec ch59 = {3,14,-2,3,7,ch59data};
/* char: 0x3a ':' */
static const GLubyte ch58data[] = {
0xc0,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0xc0,
};
static const BitmapCharRec ch58 = {2,11,-2,0,6,ch58data};
/* char: 0x39 '9' */
static const GLubyte ch57data[] = {
0xf0,0x0,0x1c,0x0,0x6,0x0,0x3,0x0,0x3,0x80,0x1,0x80,0x1d,0x80,0x73,0xc0,
0x61,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc1,0xc0,0x61,0x80,0x77,0x80,
0x1e,0x0,
};
static const BitmapCharRec ch57 = {10,17,-1,0,12,ch57data};
/* char: 0x38 '8' */
static const GLubyte ch56data[] = {
0x1e,0x0,0x73,0x80,0xe1,0x80,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x41,0xc0,0x61,0x80,
0x37,0x0,0x1e,0x0,0x1e,0x0,0x33,0x0,0x61,0x80,0x61,0x80,0x61,0x80,0x33,0x0,
0x1e,0x0,
};
static const BitmapCharRec ch56 = {10,17,-1,0,12,ch56data};
/* char: 0x37 '7' */
static const GLubyte ch55data[] = {
0x18,0x0,0x18,0x0,0xc,0x0,0xc,0x0,0xc,0x0,0x4,0x0,0x6,0x0,0x6,0x0,
0x2,0x0,0x3,0x0,0x3,0x0,0x1,0x0,0x1,0x80,0x81,0x80,0xc0,0xc0,0xff,0xc0,
0x7f,0xc0,
};
static const BitmapCharRec ch55 = {10,17,-1,0,12,ch55data};
/* char: 0x36 '6' */
static const GLubyte ch54data[] = {
0x1e,0x0,0x7b,0x80,0x61,0x80,0xe0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
0xc1,0x80,0xf3,0x80,0xee,0x0,0x60,0x0,0x70,0x0,0x30,0x0,0x18,0x0,0xe,0x0,
0x3,0xc0,
};
static const BitmapCharRec ch54 = {10,17,-1,0,12,ch54data};
/* char: 0x35 '5' */
static const GLubyte ch53data[] = {
0x7e,0x0,0xe3,0x80,0xc1,0x80,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x1,0xc0,
0x3,0x80,0xf,0x80,0x7e,0x0,0x78,0x0,0x60,0x0,0x20,0x0,0x20,0x0,0x1f,0x80,
0x1f,0xc0,
};
static const BitmapCharRec ch53 = {10,17,-1,0,12,ch53data};
/* char: 0x34 '4' */
static const GLubyte ch52data[] = {
0x3,0x0,0x3,0x0,0x3,0x0,0x3,0x0,0xff,0xc0,0xff,0xc0,0xc3,0x0,0x43,0x0,
0x63,0x0,0x23,0x0,0x33,0x0,0x13,0x0,0x1b,0x0,0xb,0x0,0x7,0x0,0x7,0x0,
0x3,0x0,
};
static const BitmapCharRec ch52 = {10,17,-1,0,12,ch52data};
/* char: 0x33 '3' */
static const GLubyte ch51data[] = {
0x78,0x0,0xe6,0x0,0xc3,0x0,0x1,0x0,0x1,0x80,0x1,0x80,0x1,0x80,0x3,0x80,
0x7,0x0,0x1e,0x0,0xc,0x0,0x6,0x0,0x83,0x0,0x83,0x0,0x47,0x0,0x7e,0x0,
0x1c,0x0,
};
static const BitmapCharRec ch51 = {9,17,-1,0,12,ch51data};
/* char: 0x32 '2' */
static const GLubyte ch50data[] = {
0xff,0x80,0xff,0xc0,0x60,0x40,0x30,0x0,0x18,0x0,0xc,0x0,0x4,0x0,0x6,0x0,
0x3,0x0,0x3,0x0,0x1,0x80,0x1,0x80,0x81,0x80,0x81,0x80,0x43,0x80,0x7f,0x0,
0x1c,0x0,
};
static const BitmapCharRec ch50 = {10,17,-1,0,12,ch50data};
/* char: 0x31 '1' */
static const GLubyte ch49data[] = {
0xff,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x78,0x18,
0x8,
};
static const BitmapCharRec ch49 = {8,17,-2,0,12,ch49data};
/* char: 0x30 '0' */
static const GLubyte ch48data[] = {
0x1e,0x0,0x33,0x0,0x61,0x80,0x61,0x80,0xe1,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x61,0x80,0x61,0x80,0x33,0x0,
0x1e,0x0,
};
static const BitmapCharRec ch48 = {10,17,-1,0,12,ch48data};
/* char: 0x2f '/' */
static const GLubyte ch47data[] = {
0xc0,0xc0,0xc0,0x60,0x60,0x20,0x30,0x30,0x10,0x18,0x18,0x8,0xc,0xc,0x4,0x6,
0x6,0x3,0x3,0x3,
};
static const BitmapCharRec ch47 = {8,20,1,3,7,ch47data};
/* char: 0x2e '.' */
static const GLubyte ch46data[] = {
0xc0,0xc0,
};
static const BitmapCharRec ch46 = {2,2,-2,0,6,ch46data};
/* char: 0x2d '-' */
static const GLubyte ch45data[] = {
0xff,0xf0,0xff,0xf0,
};
static const BitmapCharRec ch45 = {12,2,-1,-6,14,ch45data};
/* char: 0x2c ',' */
static const GLubyte ch44data[] = {
0xc0,0x60,0x20,0xe0,0xc0,
};
static const BitmapCharRec ch44 = {3,5,-2,3,7,ch44data};
/* char: 0x2b '+' */
static const GLubyte ch43data[] = {
0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0xff,0xf0,0xff,0xf0,0x6,0x0,
0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,
};
static const BitmapCharRec ch43 = {12,12,-1,-1,14,ch43data};
/* char: 0x2a '*' */
static const GLubyte ch42data[] = {
0x8,0x0,0x1c,0x0,0xc9,0x80,0xeb,0x80,0x1c,0x0,0xeb,0x80,0xc9,0x80,0x1c,0x0,
0x8,0x0,
};
static const BitmapCharRec ch42 = {9,9,-2,-8,12,ch42data};
/* char: 0x29 ')' */
static const GLubyte ch41data[] = {
0x80,0x40,0x20,0x30,0x10,0x18,0x18,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0x18,
0x18,0x10,0x30,0x20,0x40,0x80,
};
static const BitmapCharRec ch41 = {6,22,-1,5,8,ch41data};
/* char: 0x28 '(' */
static const GLubyte ch40data[] = {
0x4,0x8,0x10,0x30,0x20,0x60,0x60,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x60,
0x60,0x20,0x30,0x10,0x8,0x4,
};
static const BitmapCharRec ch40 = {6,22,-1,5,8,ch40data};
/* char: 0x27 ''' */
static const GLubyte ch39data[] = {
0xc0,0x60,0x20,0xe0,0xc0,
};
static const BitmapCharRec ch39 = {3,5,-3,-12,8,ch39data};
/* char: 0x26 '&' */
static const GLubyte ch38data[] = {
0x3c,0x3c,0x7f,0x7e,0xe1,0xe1,0xc0,0xc0,0xc1,0xc0,0xc1,0xa0,0x63,0x20,0x37,0x10,
0x1e,0x18,0xe,0x3e,0xf,0x0,0x1d,0x80,0x18,0xc0,0x18,0x40,0x18,0x40,0xc,0xc0,
0x7,0x80,
};
static const BitmapCharRec ch38 = {16,17,-1,0,18,ch38data};
/* char: 0x25 '%' */
static const GLubyte ch37data[] = {
0x30,0x3c,0x0,0x18,0x72,0x0,0xc,0x61,0x0,0x4,0x60,0x80,0x6,0x60,0x80,0x3,
0x30,0x80,0x1,0x19,0x80,0x1,0x8f,0x0,0x78,0xc0,0x0,0xe4,0x40,0x0,0xc2,0x60,
0x0,0xc1,0x30,0x0,0xc1,0x10,0x0,0x61,0x18,0x0,0x33,0xfc,0x0,0x1e,0xc,0x0,
};
static const BitmapCharRec ch37 = {17,16,-1,0,19,ch37data};
/* char: 0x24 '$' */
static const GLubyte ch36data[] = {
0x4,0x0,0x4,0x0,0x3f,0x0,0xe5,0xc0,0xc4,0xc0,0x84,0x60,0x84,0x60,0x4,0x60,
0x4,0xe0,0x7,0xc0,0x7,0x80,0x1e,0x0,0x3c,0x0,0x74,0x0,0x64,0x0,0x64,0x20,
0x64,0x60,0x34,0xe0,0x1f,0x80,0x4,0x0,0x4,0x0,
};
static const BitmapCharRec ch36 = {11,21,0,2,12,ch36data};
/* char: 0x23 '#' */
static const GLubyte ch35data[] = {
0x22,0x0,0x22,0x0,0x22,0x0,0x22,0x0,0x22,0x0,0xff,0xc0,0xff,0xc0,0x11,0x0,
0x11,0x0,0x11,0x0,0x7f,0xe0,0x7f,0xe0,0x8,0x80,0x8,0x80,0x8,0x80,0x8,0x80,
0x8,0x80,
};
static const BitmapCharRec ch35 = {11,17,-1,0,13,ch35data};
/* char: 0x22 '"' */
static const GLubyte ch34data[] = {
0x88,0xcc,0xcc,0xcc,0xcc,
};
static const BitmapCharRec ch34 = {6,5,-1,-12,10,ch34data};
/* char: 0x21 '!' */
static const GLubyte ch33data[] = {
0xc0,0xc0,0x0,0x0,0x0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
0xc0,
};
static const BitmapCharRec ch33 = {2,17,-3,0,8,ch33data};
/* char: 0x20 ' ' */
#ifdef _WIN32
/* XXX Work around Microsoft OpenGL 1.1 bug where glBitmap with
a height or width of zero does not advance the raster position
as specified by OpenGL. (Cosmo OpenGL does not have this bug.) */
static const GLubyte ch32data[] = { 0x0 };
static const BitmapCharRec ch32 = {1,1,0,0,6,ch32data};
#else
static const BitmapCharRec ch32 = {0,0,0,0,6,0};
#endif
static const BitmapCharRec * const chars[] = {
&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,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
&ch160,
&ch161,
&ch162,
&ch163,
&ch164,
&ch165,
&ch166,
&ch167,
&ch168,
&ch169,
&ch170,
&ch171,
&ch172,
&ch173,
&ch174,
&ch175,
&ch176,
&ch177,
&ch178,
&ch179,
&ch180,
&ch181,
&ch182,
&ch183,
&ch184,
&ch185,
&ch186,
&ch187,
&ch188,
&ch189,
&ch190,
&ch191,
&ch192,
&ch193,
&ch194,
&ch195,
&ch196,
&ch197,
&ch198,
&ch199,
&ch200,
&ch201,
&ch202,
&ch203,
&ch204,
&ch205,
&ch206,
&ch207,
&ch208,
&ch209,
&ch210,
&ch211,
&ch212,
&ch213,
&ch214,
&ch215,
&ch216,
&ch217,
&ch218,
&ch219,
&ch220,
&ch221,
&ch222,
&ch223,
&ch224,
&ch225,
&ch226,
&ch227,
&ch228,
&ch229,
&ch230,
&ch231,
&ch232,
&ch233,
&ch234,
&ch235,
&ch236,
&ch237,
&ch238,
&ch239,
&ch240,
&ch241,
&ch242,
&ch243,
&ch244,
&ch245,
&ch246,
&ch247,
&ch248,
&ch249,
&ch250,
&ch251,
&ch252,
&ch253,
&ch254,
&ch255,
};
const BitmapFontRec glutBitmapTimesRoman24 = {
"-adobe-times-medium-r-normal--24-240-75-75-p-124-iso8859-1",
224,
32,
chars
};
/* Copyright (c) Mark J. Kilgard, 1994. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include <stdio.h>
#include "glutint.h"
/* strdup is actually not a standard ANSI C or POSIX routine
so implement a private one for GLUT. OpenVMS does not have a
strdup; Linux's standard libc doesn't declare strdup by default
(unless BSD or SVID interfaces are requested). */
char *
__glutStrdup(const char *string)
{
char *copy;
copy = (char*) malloc(strlen(string) + 1);
if (copy == NULL)
return NULL;
strcpy(copy, string);
return copy;
}
void
__glutWarning(char *format,...)
{
va_list args;
va_start(args, format);
fprintf(stderr, "GLUT: Warning in %s: ",
__glutProgramName ? __glutProgramName : "(unamed)");
vfprintf(stderr, format, args);
va_end(args);
putc('\n', stderr);
}
/* CENTRY */
void APIENTRY
glutReportErrors(void)
{
GLenum error;
while ((error = glGetError()) != GL_NO_ERROR)
__glutWarning("GL error: %s", gluErrorString(error));
}
/* ENDCENTRY */
void
__glutFatalError(char *format,...)
{
va_list args;
va_start(args, format);
fprintf(stderr, "GLUT: Fatal Error in %s: ",
__glutProgramName ? __glutProgramName : "(unamed)");
vfprintf(stderr, format, args);
va_end(args);
putc('\n', stderr);
exit(1);
}
void
__glutFatalUsage(char *format,...)
{
va_list args;
va_start(args, format);
fprintf(stderr, "GLUT: Fatal API Usage in %s: ",
__glutProgramName ? __glutProgramName : "(unamed)");
vfprintf(stderr, format, args);
va_end(args);
putc('\n', stderr);
abort();
}
/* Copyright (c) Mark J. Kilgard, 1996. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#include <stdlib.h>
#if !defined(_WIN32) && !defined(__BEOS__)
#include <GL/glx.h>
#endif
#ifdef __sgi
#include <dlfcn.h>
#endif
#include "glutint.h"
/* Grumble. The IRIX 6.3 and early IRIX 6.4 OpenGL headers
support the video resize extension, but failed to define
GLX_SGIX_video_resize. */
#ifdef GLX_SYNC_FRAME_SGIX
#define GLX_SGIX_video_resize 1
#endif
#if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_video_resize)
static int canVideoResize = -1;
static int videoResizeChannel;
#else
static int canVideoResize = 0;
#endif
static int videoResizeInUse = 0;
static int dx = -1, dy = -1, dw = -1, dh = -1;
/* XXX Note that IRIX 6.2, 6.3, and some 6.4 versions have a
bug where programs seg-fault when they attempt video
resizing from an indirect OpenGL context (either local or
over a network). */
#if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_video_resize)
static volatile int errorCaught;
/* ARGSUSED */
static
catchXSGIvcErrors(Display * dpy, XErrorEvent * event)
{
errorCaught = 1;
return 0;
}
#endif
/* CENTRY */
int APIENTRY
glutVideoResizeGet(GLenum param)
{
#if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_video_resize)
if (canVideoResize < 0) {
canVideoResize = __glutIsSupportedByGLX("GLX_SGIX_video_resize");
if (canVideoResize) {
#if __sgi
/* This is a hack because IRIX 6.2, 6.3, and some 6.4
versions were released with GLX_SGIX_video_resize
being advertised by the X server though the video
resize extension is not actually supported. We try to
determine if the libGL.so we are using actually has a
video resize entrypoint before we try to use the
feature. */
void (*func) (void);
void *glxDso = dlopen("libGL.so", RTLD_LAZY);
func = (void (*)(void)) dlsym(glxDso, "glXQueryChannelDeltasSGIX");
if (!func) {
canVideoResize = 0;
} else
#endif
{
char *channelString;
int (*handler) (Display *, XErrorEvent *);
channelString = getenv("GLUT_VIDEO_RESIZE_CHANNEL");
videoResizeChannel = channelString ? atoi(channelString) : 0;
/* Work around another annoying problem with SGI's
GLX_SGIX_video_resize implementation. Early IRIX
6.4 OpenGL's advertise the extension and have the
video resize API, but an XSGIvc X protocol errors
result trying to use the API. Set up an error
handler to intercept what would otherwise be a fatal
error. If an error was recieved, do not report that
video resize is possible. */
handler = XSetErrorHandler(catchXSGIvcErrors);
errorCaught = 0;
glXQueryChannelDeltasSGIX(__glutDisplay, __glutScreen,
videoResizeChannel, &dx, &dy, &dw, &dh);
/* glXQueryChannelDeltasSGIX is an inherent X server
round-trip so we know we will have gotten either the
correct reply or and error by this time. */
XSetErrorHandler(handler);
/* Still yet another work around. In IRIX 6.4 betas,
glXQueryChannelDeltasSGIX will return as if it
succeeded, but the values are filled with junk.
Watch to make sure the delta variables really make
sense. */
if (errorCaught ||
dx < 0 || dy < 0 || dw < 0 || dh < 0 ||
dx > 2048 || dy > 2048 || dw > 2048 || dh > 2048) {
canVideoResize = 0;
}
}
}
}
#endif /* GLX_SGIX_video_resize */
switch (param) {
case GLUT_VIDEO_RESIZE_POSSIBLE:
return canVideoResize;
case GLUT_VIDEO_RESIZE_IN_USE:
return videoResizeInUse;
case GLUT_VIDEO_RESIZE_X_DELTA:
return dx;
case GLUT_VIDEO_RESIZE_Y_DELTA:
return dy;
case GLUT_VIDEO_RESIZE_WIDTH_DELTA:
return dw;
case GLUT_VIDEO_RESIZE_HEIGHT_DELTA:
return dh;
case GLUT_VIDEO_RESIZE_X:
case GLUT_VIDEO_RESIZE_Y:
case GLUT_VIDEO_RESIZE_WIDTH:
case GLUT_VIDEO_RESIZE_HEIGHT:
#if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_video_resize)
if (videoResizeInUse) {
int x, y, width, height;
glXQueryChannelRectSGIX(__glutDisplay, __glutScreen,
videoResizeChannel, &x, &y, &width, &height);
switch (param) {
case GLUT_VIDEO_RESIZE_X:
return x;
case GLUT_VIDEO_RESIZE_Y:
return y;
case GLUT_VIDEO_RESIZE_WIDTH:
return width;
case GLUT_VIDEO_RESIZE_HEIGHT:
return height;
}
}
#endif
return -1;
default:
__glutWarning("invalid glutVideoResizeGet parameter: %d", param);
return -1;
}
}
void APIENTRY
glutSetupVideoResizing(void)
{
#if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_video_resize)
if (glutVideoResizeGet(GLUT_VIDEO_RESIZE_POSSIBLE)) {
glXBindChannelToWindowSGIX(__glutDisplay, __glutScreen,
videoResizeChannel, __glutCurrentWindow->win);
videoResizeInUse = 1;
} else
#endif
__glutFatalError("glutEstablishVideoResizing: video resizing not possible.\n");
}
void APIENTRY
glutStopVideoResizing(void)
{
#if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_video_resize)
if (glutVideoResizeGet(GLUT_VIDEO_RESIZE_POSSIBLE)) {
if (videoResizeInUse) {
glXBindChannelToWindowSGIX(__glutDisplay, __glutScreen,
videoResizeChannel, None);
videoResizeInUse = 0;
}
}
#endif
}
/* ARGSUSED */
void APIENTRY
glutVideoResize(int x, int y, int width, int height)
{
#if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_video_resize)
if (videoResizeInUse) {
#ifdef GLX_SYNC_SWAP_SGIX
/* glXChannelRectSyncSGIX introduced in a patch to IRIX
6.2; the original unpatched IRIX 6.2 behavior is always
GLX_SYNC_SWAP_SGIX. */
glXChannelRectSyncSGIX(__glutDisplay, __glutScreen,
videoResizeChannel, GLX_SYNC_SWAP_SGIX);
#endif
glXChannelRectSGIX(__glutDisplay, __glutScreen,
videoResizeChannel, x, y, width, height);
}
#endif
}
/* ARGSUSED */
void APIENTRY
glutVideoPan(int x, int y, int width, int height)
{
#if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_video_resize)
if (videoResizeInUse) {
#ifdef GLX_SYNC_FRAME_SGIX
/* glXChannelRectSyncSGIX introduced in a patch to IRIX
6.2; the original unpatched IRIX 6.2 behavior is always
GLX_SYNC_SWAP_SGIX. We just ignore that we cannot
accomplish GLX_SYNC_FRAME_SGIX on IRIX unpatched 6.2;
this means you'd need a glutSwapBuffers to actually
realize the video resize. */
glXChannelRectSyncSGIX(__glutDisplay, __glutScreen,
videoResizeChannel, GLX_SYNC_FRAME_SGIX);
#endif
glXChannelRectSGIX(__glutDisplay, __glutScreen,
videoResizeChannel, x, y, width, height);
}
#endif
}
/* ENDCENTRY */
/***********************************************************
* Copyright (C) 1997, Be Inc. Copyright (C) 1999, Jake Hamby.
*
* This program is freely distributable without licensing fees
* and is provided without guarantee or warrantee expressed or
* implied. This program is -not- in the public domain.
*
*
* FILE: glutWindow.h
*
* DESCRIPTION: the GlutWindow class saves all events for
* handling by main thread
***********************************************************/
/***********************************************************
* Headers
***********************************************************/
#include <GL/glut.h>
#include <Window.h>
#include <GLView.h>
/***********************************************************
* CLASS: GlutWindow
*
* INHERITS FROM: BGLView (NOT BWindow!)
*
* DESCRIPTION: all information needed for windows and
* subwindows (handled as similarly as possible)
***********************************************************/
class GlutWindow : public BGLView {
public:
GlutWindow(GlutWindow *nparent, char *name, int x, int y, int width,
int height, ulong options);
void KeyDown(const char *bytes, int32 numBytes);
void MouseDown(BPoint point);
void MouseMoved(BPoint point, uint32 transit, const BMessage *message);
void FrameResized(float width, float height);
void Draw(BRect updateRect);
void Pulse(); // needed since MouseUp() is broken
void MouseCheck(); // check for button state changes
void ErrorCallback(GLenum errorCode);
static long MenuThread(void *menu);
int num; // window number returned to user
int cursor; // my cursor
#define GLUT_MAX_MENUS 3
int menu[GLUT_MAX_MENUS]; // my popup menus
int m_width, m_height; // the last width and height reported to GLUT
uint32 m_buttons; // the last mouse button state
/* Window relationship state. */
GlutWindow *parent; /* parent window */
GlutWindow *children; /* first child window */
GlutWindow *siblings; /* next sibling */
// leave out buttons and dials callbacks that we don't support
GLUTdisplayCB display; /* redraw */
GLUTreshapeCB reshape; /* resize (width,height) */
GLUTmouseCB mouse; /* mouse (button,state,x,y) */
GLUTmotionCB motion; /* motion (x,y) */
GLUTpassiveCB passive; /* passive motion (x,y) */
GLUTentryCB entry; /* window entry/exit (state) */
GLUTkeyboardCB keyboard; /* keyboard (ASCII,x,y) */
GLUTvisibilityCB visibility; /* visibility */
GLUTspecialCB special; /* special key */
GLUTwindowStatusCB windowStatus; /* window status */
bool anyevents; // were any events received?
bool displayEvent; // call display
bool reshapeEvent; // call reshape
bool mouseEvent; // call mouse
bool motionEvent; // call motion
bool passiveEvent; // call passive
bool entryEvent; // call entry
bool keybEvent; // call keyboard
bool windowStatusEvent; // call visibility
bool specialEvent; // call special
bool statusEvent; // menu status changed
bool menuEvent; // menu selected
int button, mouseState; // for mouse callback
int mouseX, mouseY; // for mouse callback
int motionX, motionY; // for motion callback
int passiveX, passiveY; // for passive callback
int entryState; // for entry callback
unsigned char key; // for keyboard callback
int keyX, keyY; // for keyboard callback
int visState; // for visibility callback
int specialKey; // for special key callback
int specialX, specialY; // for special callback
int modifierKeys; // modifier key state
int menuStatus; // for status callback
int statusX, statusY; // for status callback
int menuNumber; // for menu and status callbacks
int menuValue; // for menu callback
bool visible; // for visibility callback
};
/***********************************************************
* CLASS: GlutBWindow
*
* INHERITS FROM: BDirectWindow
*
* DESCRIPTION: basically a BWindow that won't quit
***********************************************************/
class GlutBWindow : public BDirectWindow {
public:
GlutBWindow(BRect frame, char *name);
~GlutBWindow();
void DirectConnected(direct_buffer_info *info);
bool QuitRequested(); // exits app
void Minimize(bool minimized); // minimized windows are not visible
void Hide();
void Show();
GlutWindow *bgl;
bool fConnectionDisabled;
};
/* Copyright (c) Nate Robins, 1997. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#include <Screen.h>
#include <stdio.h>
#include "beos_x11.h"
/* NOTE: These functions require a BApplication to be instantiated first */
int DisplayWidth() {
BScreen s;
return s.Frame().IntegerWidth() + 1;
}
int DisplayHeight() {
BScreen s;
return s.Frame().IntegerHeight() + 1;
}
/* the following function was stolen from the X sources as indicated. */
/* Copyright Massachusetts Institute of Technology 1985, 1986, 1987 */
/* $XConsortium: XParseGeom.c,v 11.18 91/02/21 17:23:05 rws Exp $ */
/*
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, and that the name of M.I.T. not be used in advertising or
publicity pertaining to distribution of the software without specific,
written prior permission. M.I.T. makes no representations about the
suitability of this software for any purpose. It is provided "as is"
without express or implied warranty.
*/
#if 0 // Not used currently...
/*
*Returns pointer to first char ins search which is also in what, else NULL.
*/
static char *strscan (char *search, char *what)
{
int i, len = strlen (what);
char c;
while ((c = *(search++))) {
for (i = 0; i < len; i++)
if (c == what [i])
return (--search);
}
return (NULL);
}
#endif
/*
* 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);
}
int XParseGeometry (char *string, int *x, int *y,
unsigned int *width, unsigned int *height)
{
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);
}
/***********************************************************
* Copyright (C) 1997, Be Inc. Copyright (C) 1999, Jake Hamby.
*
* This program is freely distributable without licensing fees
* and is provided without guarantee or warrantee expressed or
* implied. This program is -not- in the public domain.
*
* FILE: glutBlocker.cpp
*
* DESCRIPTION: helper class for GLUT event loop.
* if a window receives an event, wake up the event loop.
***********************************************************/
/***********************************************************
* Headers
***********************************************************/
#include "glutBlocker.h"
/***********************************************************
* Global variable
***********************************************************/
GlutBlocker gBlock;
/***********************************************************
* Member functions
***********************************************************/
GlutBlocker::GlutBlocker() {
gSem = create_sem(1, "gSem");
eSem = create_sem(0, "eSem");
events = false;
sleeping = false;
}
GlutBlocker::~GlutBlocker() {
delete_sem(eSem);
delete_sem(gSem);
}
void GlutBlocker::WaitEvent() {
acquire_sem(gSem);
if(!events) { // wait for new event
sleeping = true;
release_sem(gSem);
acquire_sem(eSem); // next event will release eSem
} else {
release_sem(gSem);
}
}
void GlutBlocker::WaitEvent(bigtime_t usecs) {
acquire_sem(gSem);
if(!events) { // wait for new event
sleeping = true;
release_sem(gSem);
acquire_sem_etc(eSem, 1, B_TIMEOUT, usecs); // wait for next event or timeout
} else {
release_sem(gSem);
}
}
void GlutBlocker::NewEvent() {
acquire_sem(gSem);
events = true; // next call to WaitEvent returns immediately
if(sleeping) {
sleeping = false;
release_sem(eSem); // if event loop is blocking, wake it up
}
release_sem(gSem);
}
/***********************************************************
* Copyright (C) 1997, Be Inc. Copyright (C) 1999, Jake Hamby.
*
* This program is freely distributable without licensing fees
* and is provided without guarantee or warrantee expressed or
* implied. This program is -not- in the public domain.
*
*
* FILE: glutCallback.cpp
*
* DESCRIPTION: put all the callback setting routines in
* one place
***********************************************************/
/***********************************************************
* Headers
***********************************************************/
#include <GL/glut.h>
#include "glutint.h"
#include "glutState.h"
/***********************************************************
* Window related callbacks
***********************************************************/
void APIENTRY
glutDisplayFunc(GLUTdisplayCB displayFunc)
{
/* XXX Remove the warning after GLUT 3.0. */
if (!displayFunc)
__glutFatalError("NULL display callback not allowed in GLUT 3.0; update your code.");
gState.currentWindow->display = displayFunc;
}
void APIENTRY
glutKeyboardFunc(GLUTkeyboardCB keyboardFunc)
{
gState.currentWindow->keyboard = keyboardFunc;
}
void APIENTRY
glutSpecialFunc(GLUTspecialCB specialFunc)
{
gState.currentWindow->special = specialFunc;
}
void APIENTRY
glutMouseFunc(GLUTmouseCB mouseFunc)
{
gState.currentWindow->mouse = mouseFunc;
}
void APIENTRY
glutMotionFunc(GLUTmotionCB motionFunc)
{
gState.currentWindow->motion = motionFunc;
}
void APIENTRY
glutPassiveMotionFunc(GLUTpassiveCB passiveMotionFunc)
{
gState.currentWindow->passive = passiveMotionFunc;
}
void APIENTRY
glutEntryFunc(GLUTentryCB entryFunc)
{
gState.currentWindow->entry = entryFunc;
if (!entryFunc) {
gState.currentWindow->entryState = -1;
}
}
void APIENTRY
glutWindowStatusFunc(GLUTwindowStatusCB windowStatusFunc)
{
gState.currentWindow->windowStatus = windowStatusFunc;
}
static void
visibilityHelper(int status)
{
if (status == GLUT_HIDDEN || status == GLUT_FULLY_COVERED)
gState.currentWindow->visibility(GLUT_NOT_VISIBLE);
else
gState.currentWindow->visibility(GLUT_VISIBLE);
}
void APIENTRY
glutVisibilityFunc(GLUTvisibilityCB visibilityFunc)
{
gState.currentWindow->visibility = visibilityFunc;
if (visibilityFunc)
glutWindowStatusFunc(visibilityHelper);
else
glutWindowStatusFunc(NULL);
}
void APIENTRY
glutReshapeFunc(GLUTreshapeCB reshapeFunc)
{
if (reshapeFunc) {
gState.currentWindow->reshape = reshapeFunc;
} else {
gState.currentWindow->reshape = __glutDefaultReshape;
}
}
/***********************************************************
* General callbacks (timer callback in glutEvent.cpp)
***********************************************************/
/* DEPRICATED, use glutMenuStatusFunc instead. */
void APIENTRY
glutMenuStateFunc(GLUTmenuStateCB menuStateFunc)
{
gState.menuStatus = (GLUTmenuStatusCB) menuStateFunc;
}
void APIENTRY
glutMenuStatusFunc(GLUTmenuStatusCB menuStatusFunc)
{
gState.menuStatus = menuStatusFunc;
}
void APIENTRY
glutIdleFunc(GLUTidleCB idleFunc)
{
gState.idle = idleFunc;
}
/***********************************************************
* Unsupported callbacks
***********************************************************/
void APIENTRY
glutOverlayDisplayFunc(GLUTdisplayCB displayFunc)
{
}
void APIENTRY
glutSpaceballMotionFunc(GLUTspaceMotionCB spaceMotionFunc)
{
}
void APIENTRY
glutSpaceballRotateFunc(GLUTspaceRotateCB spaceRotateFunc)
{
}
void APIENTRY
glutSpaceballButtonFunc(GLUTspaceButtonCB spaceButtonFunc)
{
}
void APIENTRY
glutButtonBoxFunc(GLUTbuttonBoxCB buttonBoxFunc)
{
}
void APIENTRY
glutDialsFunc(GLUTdialsCB dialsFunc)
{
}
void APIENTRY
glutTabletMotionFunc(GLUTtabletMotionCB tabletMotionFunc)
{
}
void APIENTRY
glutTabletButtonFunc(GLUTtabletButtonCB tabletButtonFunc)
{
}
/***********************************************************
* Copyright (C) 1997, Be Inc. Copyright (C) 1999, Jake Hamby.
*
* This program is freely distributable without licensing fees
* and is provided without guarantee or warrantee expressed or
* implied. This program is -not- in the public domain.
*
*
* FILE: glutColor.cpp
*
* DESCRIPTION: we don't support indexed color, so this code is
* really simple
***********************************************************/
/***********************************************************
* Headers
***********************************************************/
#include <GL/glut.h>
#include "glutint.h"
void glutSetColor(int cell, GLfloat red, GLfloat green, GLfloat blue) {
__glutWarning("glutSetColor: current window is RGBA");
}
GLfloat glutGetColor(int cell, int component) {
__glutWarning("glutGetColor: current window is RGBA");
return -1.0;
}
void glutCopyColormap(int win) {
__glutWarning("glutCopyColormap: color index not supported in BeOS");
}
/***********************************************************
* Copyright (C) 1997, Be Inc. Copyright (C) 1999, Jake Hamby.
*
* This program is freely distributable without licensing fees
* and is provided without guarantee or warrantee expressed or
* implied. This program is -not- in the public domain.
*
*
* FILE: glutCursor.cpp
*
* DESCRIPTION: code for handling custom mouse cursors
***********************************************************/
/***********************************************************
* Headers
***********************************************************/
#include <GL/glut.h>
#include "glutint.h"
#include "glutState.h"
#include "glutCursors.h"
static const unsigned char *cursorTable[] = {
XC_arrow, /* GLUT_CURSOR_RIGHT_ARROW */
XC_top_left_arrow, /* GLUT_CURSOR_LEFT_ARROW */
XC_hand1, /* GLUT_CURSOR_INFO */
XC_pirate, /* GLUT_CURSOR_DESTROY */
XC_question_arrow, /* GLUT_CURSOR_HELP */
XC_exchange, /* GLUT_CURSOR_CYCLE */
XC_spraycan, /* GLUT_CURSOR_SPRAY */
XC_watch, /* GLUT_CURSOR_WAIT */
XC_xterm, /* GLUT_CURSOR_TEXT */
XC_crosshair, /* GLUT_CURSOR_CROSSHAIR */
XC_sb_v_double_arrow, /* GLUT_CURSOR_UP_DOWN */
XC_sb_h_double_arrow, /* GLUT_CURSOR_LEFT_RIGHT */
XC_top_side, /* GLUT_CURSOR_TOP_SIDE */
XC_bottom_side, /* GLUT_CURSOR_BOTTOM_SIDE */
XC_left_side, /* GLUT_CURSOR_LEFT_SIDE */
XC_right_side, /* GLUT_CURSOR_RIGHT_SIDE */
XC_top_left_corner, /* GLUT_CURSOR_TOP_LEFT_CORNER */
XC_top_right_corner, /* GLUT_CURSOR_TOP_RIGHT_CORNER */
XC_bottom_right_corner, /* GLUT_CURSOR_BOTTOM_RIGHT_CORNER */
XC_bottom_left_corner, /* GLUT_CURSOR_BOTTOM_LEFT_CORNER */
};
/***********************************************************
* FUNCTION: glutSetCursor (4.13)
*
* DESCRIPTION: set a new mouse cursor for current window
***********************************************************/
void glutSetCursor(int cursor) {
gState.currentWindow->Window()->Lock();
gState.currentWindow->cursor = cursor;
__glutSetCursor(cursor);
gState.currentWindow->Window()->Unlock();
}
/***********************************************************
* FUNCTION: __glutSetCursor
*
* DESCRIPTION: the actual cursor changing routine
***********************************************************/
void __glutSetCursor(int cursor) {
int realcursor = cursor;
if (cursor < 0 || cursor > GLUT_CURSOR_BOTTOM_LEFT_CORNER) {
switch(cursor) {
case GLUT_CURSOR_INHERIT:
return; // don't change cursor
case GLUT_CURSOR_NONE:
// this hides the cursor until the user moves the mouse
// change it to HideCursor() AT YOUR OWN RISK!
be_app->ObscureCursor();
return;
case GLUT_CURSOR_FULL_CROSSHAIR:
realcursor = GLUT_CURSOR_CROSSHAIR;
break;
default:
__glutWarning("unknown cursor\n");
return;
}
}
be_app->SetCursor(cursorTable[realcursor]);
}
/***********************************************************
* FUNCTION: glutWarpPointer (x.xx)
*
* DESCRIPTION: move the mouse pointer to a new location
* (note: can't do this in BeOS!)
***********************************************************/
void glutWarpPointer(int x, int y) { }
/***********************************************************
* Copyright (C) 1997, Be Inc. Copyright (C) 1999, Jake Hamby.
*
* This program is freely distributable without licensing fees
* and is provided without guarantee or warrantee expressed or
* implied. This program is -not- in the public domain.
*
*
* FILE: glutDstr.cpp
*
* DESCRIPTION: convert display string into a Be options variable
***********************************************************/
/***********************************************************
* Headers
***********************************************************/
#include <GL/glut.h>
#include <string.h>
#include <stdlib.h>
#include "glutint.h"
#include "glutState.h"
/***********************************************************
* FUNCTION: glutInitDisplayString
*
* DESCRIPTION: sets the display string variable
***********************************************************/
void APIENTRY
glutInitDisplayString(const char *string)
{
if (gState.displayString) {
free(gState.displayString);
}
if (string) {
gState.displayString = strdup(string);
if (!gState.displayString)
__glutFatalError("out of memory.");
} else
gState.displayString = NULL;
}
/***********************************************************
* FUNCTION: __glutConvertDisplayModeFromString
*
* DESCRIPTION: converts the current display mode into a BGLView
* display mode, printing warnings as appropriate.
*
* PARAMETERS: if options is non-NULL, the current display mode is
* returned in it.
*
* RETURNS: 1 if the current display mode is possible, else 0
***********************************************************/
int __glutConvertDisplayModeFromString(unsigned long *options) {
ulong newoptions = 0;
char *word = strtok(gState.displayString, " \t");
do {
char *cstr = strpbrk(word, "=><!~");
if(cstr)
*cstr = '\0';
// this is the most minimal possible parser. scan for
// options that we support, and add them to newoptions
// this will certainly cause it to accept things that we
// don't actually support, but if we don't support it, the
// program's probably not going to work anyway.
if(!strcmp(word, "alpha")) {
newoptions |= BGL_ALPHA;
} else if((!strcmp(word, "acc")) || (!strcmp(word, "acca"))) {
newoptions |= BGL_ACCUM;
} else if(!strcmp(word, "depth")) {
newoptions |= BGL_DEPTH;
} else if(!strcmp(word, "double")) {
newoptions |= BGL_DOUBLE;
} else if(!strcmp(word, "stencil")) {
newoptions |= BGL_STENCIL;
}
} while((word = strtok(0, " \t")) != 0);
if (options)
*options = newoptions;
return 1; // assume we support it
}
/***********************************************************
* Copyright (C) 1997, Be Inc. Copyright (C) 1999, Jake Hamby.
*
* This program is freely distributable without licensing fees
* and is provided without guarantee or warrantee expressed or
* implied. This program is -not- in the public domain.
*
*
* FILE: glutEvent.cpp
*
* DESCRIPTION: here it is, the BeOS GLUT event loop
***********************************************************/
/***********************************************************
* Headers
***********************************************************/
#include <GL/glut.h>
#include "glutint.h"
#include "glutState.h"
#include "glutBlocker.h"
/***********************************************************
* CLASS: GLUTtimer
*
* DESCRIPTION: list of timer callbacks
***********************************************************/
struct GLUTtimer {
GLUTtimer *next; // list of timers
bigtime_t timeout; // time to be called
GLUTtimerCB func; // function to call
int value; // value
};
/***********************************************************
* Private variables
***********************************************************/
static GLUTtimer *__glutTimerList = 0; // list of timer callbacks
static GLUTtimer *freeTimerList = 0;
/***********************************************************
* FUNCTION: glutTimerFunc (7.19)
*
* DESCRIPTION: register a new timer callback
***********************************************************/
void APIENTRY
glutTimerFunc(unsigned int interval, GLUTtimerCB timerFunc, int value)
{
GLUTtimer *timer, *other;
GLUTtimer **prevptr;
if (!timerFunc)
return;
if (freeTimerList) {
timer = freeTimerList;
freeTimerList = timer->next;
} else {
timer = new GLUTtimer();
if (!timer)
__glutFatalError("out of memory.");
}
timer->func = timerFunc;
timer->value = value;
timer->next = NULL;
timer->timeout = system_time() + (interval*1000); // 1000 ticks in a millisecond
prevptr = &__glutTimerList;
other = *prevptr;
while (other && (other->timeout < timer->timeout)) {
prevptr = &other->next;
other = *prevptr;
}
timer->next = other;
*prevptr = timer;
}
/***********************************************************
* FUNCTION: handleTimeouts
*
* DESCRIPTION: private function to handle outstanding timeouts
***********************************************************/
static void
handleTimeouts(void)
{
bigtime_t now;
GLUTtimer *timer;
/* Assumption is that __glutTimerList is already determined
to be non-NULL. */
now = system_time();
while (__glutTimerList->timeout <= now) {
timer = __glutTimerList;
if(gState.currentWindow)
gState.currentWindow->LockGL();
timer->func(timer->value);
if(gState.currentWindow)
gState.currentWindow->UnlockGL();
__glutTimerList = timer->next;
timer->next = freeTimerList;
freeTimerList = timer;
if (!__glutTimerList)
break;
}
}
/***********************************************************
* FUNCTION: processEventsAndTimeouts
*
* DESCRIPTION: clear gBlock, then check all windows for events
***********************************************************/
static void
processEventsAndTimeouts(void)
{
gBlock.WaitEvent(); // if there is already an event, returns
// immediately, otherwise wait forever
gBlock.ClearEvents();
if(gState.quitAll)
exit(0); // exit handler cleans up windows and quits nicely
if (gState.currentWindow)
gState.currentWindow->LockGL();
for(int i=0; i<gState.windowListSize; i++) {
if (gState.windowList[i]) {
GlutWindow *win = gState.windowList[i];
// NOTE: we can use win as a shortcut for gState.windowList[i]
// in callbacks, EXCEPT we need to check the original variable
// after each callback to make sure the window hasn't been destroyed
if (win->anyevents) {
win->anyevents = false;
if (win->reshapeEvent) {
win->reshapeEvent = false;
__glutSetWindow(win);
win->reshape(win->m_width, win->m_height);
}
if (!gState.windowList[i])
continue; // window was destroyed by callback!
if (win->displayEvent) {
win->displayEvent = false;
__glutSetWindow(win);
win->display();
}
if (!gState.windowList[i])
continue; // window was destroyed by callback!
if (win->mouseEvent) {
win->mouseEvent = false;
__glutSetWindow(win);
if (win->mouse) {
gState.modifierKeys = win->modifierKeys;
win->mouse(win->button, win->mouseState, win->mouseX, win->mouseY);
gState.modifierKeys = ~0;
}
}
if (!gState.windowList[i])
continue; // window was destroyed by callback!
if (win->menuEvent) {
win->menuEvent = false;
__glutSetWindow(win);
GlutMenu *menu = __glutGetMenuByNum(win->menuNumber);
if (menu) {
gState.currentMenu = menu;
menu->select(win->menuValue);
}
}
if (!gState.windowList[i])
continue; // window was destroyed by callback!
if (win->statusEvent) {
win->statusEvent = false;
__glutSetWindow(win);
if (gState.menuStatus) {
gState.currentMenu = __glutGetMenuByNum(win->menuNumber);
gState.menuStatus(win->menuStatus, win->statusX, win->statusY);
}
}
if (!gState.windowList[i])
continue; // window was destroyed by callback!
if (win->motionEvent) {
win->motionEvent = false;
__glutSetWindow(win);
if (win->motion)
win->motion(win->motionX, win->motionY);
}
if (!gState.windowList[i])
continue; // window was destroyed by callback!
if (win->passiveEvent) {
win->passiveEvent = false;
__glutSetWindow(win);
if (win->passive)
win->passive(win->passiveX, win->passiveY);
}
if (!gState.windowList[i])
continue; // window was destroyed by callback!
if (win->keybEvent) {
win->keybEvent = false;
__glutSetWindow(win);
if (win->keyboard) {
gState.modifierKeys = win->modifierKeys;
win->keyboard(win->key, win->keyX, win->keyY);
gState.modifierKeys = ~0;
}
}
if (!gState.windowList[i])
continue; // window was destroyed by callback!
if (win->specialEvent) {
win->specialEvent = false;
__glutSetWindow(win);
if (win->special) {
gState.modifierKeys = win->modifierKeys;
win->special(win->specialKey, win->specialX, win->specialY);
gState.modifierKeys = ~0;
}
}
if (!gState.windowList[i])
continue; // window was destroyed by callback!
if (win->entryEvent) {
win->entryEvent = false;
__glutSetWindow(win);
if (win->entry)
win->entry(win->entryState);
}
if (!gState.windowList[i])
continue; // window was destroyed by callback!
if (win->windowStatusEvent) {
win->windowStatusEvent = false;
__glutSetWindow(win);
if (win->windowStatus)
win->windowStatus(win->visState);
}
if (!gState.windowList[i])
continue; // window was destroyed by callback!
}
}
}
if (gState.currentWindow)
gState.currentWindow->UnlockGL();
// This code isn't necessary since BGLView automatically traps errors
#if 0
if(gState.debug) {
for(int i=0; i<gState.windowListSize; i++) {
if (gState.windowList[i]) {
gState.windowList[i]->LockGL();
glutReportErrors();
gState.windowList[i]->UnlockGL();
}
}
}
#endif
if (__glutTimerList) {
handleTimeouts();
}
}
/***********************************************************
* FUNCTION: waitForSomething
*
* DESCRIPTION: use gBlock to wait for a new event or timeout
***********************************************************/
static void
waitForSomething(void)
{
bigtime_t timeout = __glutTimerList->timeout;
bigtime_t now = system_time();
if (gBlock.PendingEvent())
goto immediatelyHandleEvent;
if(timeout>now)
gBlock.WaitEvent(timeout-now);
if (gBlock.PendingEvent()) {
immediatelyHandleEvent:
processEventsAndTimeouts();
} else {
if (__glutTimerList)
handleTimeouts();
}
}
/***********************************************************
* FUNCTION: idleWait
*
* DESCRIPTION: check for events, then call idle function
***********************************************************/
static void
idleWait(void)
{
if (gBlock.PendingEvent()) {
processEventsAndTimeouts();
} else {
if (__glutTimerList)
handleTimeouts();
}
/* Make sure idle func still exists! */
if(gState.currentWindow)
gState.currentWindow->LockGL();
if (gState.idle) {
gState.idle();
}
if(gState.currentWindow)
gState.currentWindow->UnlockGL();
}
/***********************************************************
* FUNCTION: glutMainLoop (3.1)
*
* DESCRIPTION: enter the event processing loop
***********************************************************/
void glutMainLoop()
{
if (!gState.windowListSize)
__glutFatalUsage("main loop entered with no windows created.");
if(gState.currentWindow)
gState.currentWindow->UnlockGL();
for (;;) {
if (gState.idle) {
idleWait();
} else {
if (__glutTimerList) {
waitForSomething();
} else {
processEventsAndTimeouts();
}
}
}
}
/***********************************************************
* CLASS: GlutWindow
*
* FUNCTION: KeyDown
*
* DESCRIPTION: handles keyboard and special events
***********************************************************/
void GlutWindow::KeyDown(const char *s, int32 slen)
{
ulong aChar = s[0];
BGLView::KeyDown(s,slen);
BPoint p;
switch (aChar) {
case B_FUNCTION_KEY:
switch(Window()->CurrentMessage()->FindInt32("key")) {
case B_F1_KEY:
aChar = GLUT_KEY_F1;
goto specialLabel;
case B_F2_KEY:
aChar = GLUT_KEY_F2;
goto specialLabel;
case B_F3_KEY:
aChar = GLUT_KEY_F3;
goto specialLabel;
case B_F4_KEY:
aChar = GLUT_KEY_F4;
goto specialLabel;
case B_F5_KEY:
aChar = GLUT_KEY_F5;
goto specialLabel;
case B_F6_KEY:
aChar = GLUT_KEY_F6;
goto specialLabel;
case B_F7_KEY:
aChar = GLUT_KEY_F7;
goto specialLabel;
case B_F8_KEY:
aChar = GLUT_KEY_F8;
goto specialLabel;
case B_F9_KEY:
aChar = GLUT_KEY_F9;
goto specialLabel;
case B_F10_KEY:
aChar = GLUT_KEY_F10;
goto specialLabel;
case B_F11_KEY:
aChar = GLUT_KEY_F11;
goto specialLabel;
case B_F12_KEY:
aChar = GLUT_KEY_F12;
goto specialLabel;
default:
return;
}
case B_LEFT_ARROW:
aChar = GLUT_KEY_LEFT;
goto specialLabel;
case B_UP_ARROW:
aChar = GLUT_KEY_UP;
goto specialLabel;
case B_RIGHT_ARROW:
aChar = GLUT_KEY_RIGHT;
goto specialLabel;
case B_DOWN_ARROW:
aChar = GLUT_KEY_DOWN;
goto specialLabel;
case B_PAGE_UP:
aChar = GLUT_KEY_PAGE_UP;
goto specialLabel;
case B_PAGE_DOWN:
aChar = GLUT_KEY_PAGE_DOWN;
goto specialLabel;
case B_HOME:
aChar = GLUT_KEY_HOME;
goto specialLabel;
case B_END:
aChar = GLUT_KEY_END;
goto specialLabel;
case B_INSERT:
aChar = GLUT_KEY_INSERT;
specialLabel:
if (special) {
anyevents = specialEvent = true;
GetMouse(&p,&m_buttons);
specialKey = aChar;
specialX = (int)p.x;
specialY = (int)p.y;
goto setModifiers; // set the modifier variable
}
return;
default:
break;
}
if (keyboard) {
anyevents = keybEvent = true;
GetMouse(&p,&m_buttons);
key = aChar;
keyX = (int)p.x;
keyY = (int)p.y;
setModifiers:
modifierKeys = 0;
uint32 beMod = Window()->CurrentMessage()->FindInt32("modifiers");
if(beMod & B_SHIFT_KEY)
modifierKeys |= GLUT_ACTIVE_SHIFT;
if(beMod & B_CONTROL_KEY)
modifierKeys |= GLUT_ACTIVE_CTRL;
if(beMod & B_OPTION_KEY) {
// since the window traps B_COMMAND_KEY, we'll have to settle
// for the option key.. but we need to get the raw character,
// not the Unicode-enhanced version
key = Window()->CurrentMessage()->FindInt32("raw_char");
modifierKeys |= GLUT_ACTIVE_ALT;
}
gBlock.NewEvent();
}
}
/***********************************************************
* CLASS: GlutWindow
*
* FUNCTION: MouseDown
*
* DESCRIPTION: handles mouse and menustatus events
***********************************************************/
void GlutWindow::MouseDown(BPoint point)
{
BGLView::MouseDown(point);
MouseCheck();
}
/***********************************************************
* CLASS: GlutWindow
*
* FUNCTION: MouseCheck
*
* DESCRIPTION: checks for button state changes
***********************************************************/
void GlutWindow::MouseCheck()
{
if (mouseEvent)
return; // we already have an outstanding mouse event
BPoint point;
uint32 newButtons;
GetMouse(&point, &newButtons);
if (m_buttons != newButtons) {
if (newButtons&B_PRIMARY_MOUSE_BUTTON && !(m_buttons&B_PRIMARY_MOUSE_BUTTON)) {
button = GLUT_LEFT_BUTTON;
mouseState = GLUT_DOWN;
} else if (m_buttons&B_PRIMARY_MOUSE_BUTTON && !(newButtons&B_PRIMARY_MOUSE_BUTTON)) {
button = GLUT_LEFT_BUTTON;
mouseState = GLUT_UP;
} else if (newButtons&B_SECONDARY_MOUSE_BUTTON && !(m_buttons&B_SECONDARY_MOUSE_BUTTON)) {
button = GLUT_RIGHT_BUTTON;
mouseState = GLUT_DOWN;
} else if (m_buttons&B_SECONDARY_MOUSE_BUTTON && !(newButtons&B_SECONDARY_MOUSE_BUTTON)) {
button = GLUT_RIGHT_BUTTON;
mouseState = GLUT_UP;
} else if (newButtons&B_TERTIARY_MOUSE_BUTTON && !(m_buttons&B_TERTIARY_MOUSE_BUTTON)) {
button = GLUT_MIDDLE_BUTTON;
mouseState = GLUT_DOWN;
} else if (m_buttons&B_TERTIARY_MOUSE_BUTTON && !(newButtons&B_TERTIARY_MOUSE_BUTTON)) {
button = GLUT_MIDDLE_BUTTON;
mouseState = GLUT_UP;
}
} else {
return; // no change, return
}
m_buttons = newButtons;
if (mouseState == GLUT_DOWN) {
BWindow *w = Window();
GlutMenu *m = __glutGetMenuByNum(menu[button]);
if (m) {
if (gState.menuStatus) {
anyevents = statusEvent = true;
menuNumber = menu[button];
menuStatus = GLUT_MENU_IN_USE;
statusX = (int)point.x;
statusY = (int)point.y;
gBlock.NewEvent();
}
BRect bounds = w->Frame();
point.x += bounds.left;
point.y += bounds.top;
GlutPopUp *bmenu = static_cast<GlutPopUp*>(m->CreateBMenu()); // start menu
bmenu->point = point;
bmenu->win = this;
thread_id menu_thread = spawn_thread(MenuThread, "menu thread", B_NORMAL_PRIORITY, bmenu);
resume_thread(menu_thread);
return;
}
}
if (mouse) {
anyevents = mouseEvent = true;
mouseX = (int)point.x;
mouseY = (int)point.y;
modifierKeys = 0;
uint32 beMod = modifiers();
if(beMod & B_SHIFT_KEY)
modifierKeys |= GLUT_ACTIVE_SHIFT;
if(beMod & B_CONTROL_KEY)
modifierKeys |= GLUT_ACTIVE_CTRL;
if(beMod & B_OPTION_KEY) {
modifierKeys |= GLUT_ACTIVE_ALT;
}
gBlock.NewEvent();
}
}
/***********************************************************
* CLASS: GlutWindow
*
* FUNCTION: MouseMoved
*
* DESCRIPTION: handles entry, motion, and passive events
***********************************************************/
void GlutWindow::MouseMoved(BPoint point,
ulong transit, const BMessage *msg)
{
BGLView::MouseMoved(point,transit,msg);
if(transit != B_INSIDE_VIEW) {
if (entry) {
anyevents = entryEvent = true;
gBlock.NewEvent();
}
if (transit == B_ENTERED_VIEW) {
entryState = GLUT_ENTERED;
MakeFocus(); // make me the current focus
__glutSetCursor(cursor);
} else
entryState = GLUT_LEFT;
}
MouseCheck();
if(m_buttons) {
if(motion) {
anyevents = motionEvent = true;
motionX = (int)point.x;
motionY = (int)point.y;
gBlock.NewEvent();
}
} else {
if(passive) {
anyevents = passiveEvent = true;
passiveX = (int)point.x;
passiveY = (int)point.y;
gBlock.NewEvent();
}
}
}
/***********************************************************
* CLASS: GlutWindow
*
* FUNCTION: FrameResized
*
* DESCRIPTION: handles reshape event
***********************************************************/
void GlutWindow::FrameResized(float width, float height)
{
BGLView::FrameResized(width, height);
if (visible) {
anyevents = reshapeEvent = true;
m_width = (int)(width)+1;
m_height = (int)(height)+1;
gBlock.NewEvent();
}
}
/***********************************************************
* CLASS: GlutWindow
*
* FUNCTION: Draw
*
* DESCRIPTION: handles reshape and display events
***********************************************************/
void GlutWindow::Draw(BRect updateRect)
{
BGLView::Draw(updateRect);
BRect frame = Frame();
if (m_width != (frame.Width()+1) || m_height != (frame.Height()+1)) {
FrameResized(frame.Width(), frame.Height());
}
Window()->Lock();
if (visible) {
anyevents = displayEvent = true;
gBlock.NewEvent();
}
Window()->Unlock();
}
/***********************************************************
* CLASS: GlutWindow
*
* FUNCTION: Pulse
*
* DESCRIPTION: handles mouse up event (MouseUp is broken)
***********************************************************/
void GlutWindow::Pulse()
{
BGLView::Pulse();
if (m_buttons) { // if there are buttons pressed
MouseCheck();
}
}
/***********************************************************
* CLASS: GlutWindow
*
* FUNCTION: ErrorCallback
*
* DESCRIPTION: handles GL error messages
***********************************************************/
void GlutWindow::ErrorCallback(GLenum errorCode) {
__glutWarning("GL error: %s", gluErrorString(errorCode));
}
/***********************************************************
* CLASS: GlutWindow
*
* FUNCTION: MenuThread
*
* DESCRIPTION: a new thread to launch popup menu, wait
* wait for response, then clean up afterwards and
* send appropriate messages
***********************************************************/
long GlutWindow::MenuThread(void *m) {
GlutPopUp *bmenu = static_cast<GlutPopUp*>(m);
GlutWindow *win = bmenu->win; // my window
GlutBMenuItem *result = (GlutBMenuItem*)bmenu->Go(bmenu->point);
win->Window()->Lock();
win->anyevents = win->statusEvent = true;
win->menuStatus = GLUT_MENU_NOT_IN_USE;
win->menuNumber = bmenu->menu;
BPoint cursor;
uint32 buttons;
win->GetMouse(&cursor, &buttons);
win->statusX = (int)cursor.x;
win->statusY = (int)cursor.y;
if(result && result->menu) {
win->menuEvent = true;
win->menuNumber = result->menu; // in case it was a submenu
win->menuValue = result->value;
}
win->Window()->Unlock();
gBlock.NewEvent();
delete bmenu;
return 0;
}
/***********************************************************
* Copyright (C) 1997, Be Inc. Copyright (C) 1999, Jake Hamby.
*
* This program is freely distributable without licensing fees
* and is provided without guarantee or warrantee expressed or
* implied. This program is -not- in the public domain.
*
*
* FILE: glutGet.cpp
*
* DESCRIPTION: get state information from GL
***********************************************************/
/***********************************************************
* Headers
***********************************************************/
#include <GL/glut.h>
#include <string.h>
#include <Autolock.h>
#include <Screen.h>
#include "glutint.h"
#include "glutState.h"
/***********************************************************
* Global variables
***********************************************************/
// rough guess, since we don't know how big the monitor really is
const float dots_per_mm = (72/25.4); // dots per millimeter
/***********************************************************
* FUNCTION: glutGet (9.1)
*
* DESCRIPTION: retrieve window and GL state
***********************************************************/
int glutGet(GLenum state) {
switch(state) {
case GLUT_WINDOW_X:
{BAutolock winlock(gState.currentWindow->Window()); // need to lock the window
if (gState.currentWindow->parent)
return (int)gState.currentWindow->Frame().left;
else
return (int)gState.currentWindow->Window()->Frame().left;
}
case GLUT_WINDOW_Y:
{BAutolock winlock(gState.currentWindow->Window());
if (gState.currentWindow->parent)
return (int)gState.currentWindow->Frame().top;
else
return (int)gState.currentWindow->Window()->Frame().top;
}
case GLUT_WINDOW_WIDTH:
{BAutolock winlock(gState.currentWindow->Window());
return gState.currentWindow->m_width;
}
case GLUT_WINDOW_HEIGHT:
{BAutolock winlock(gState.currentWindow->Window());
return gState.currentWindow->m_height;
}
case GLUT_WINDOW_PARENT:
{BAutolock winlock(gState.currentWindow->Window());
if(gState.currentWindow->parent)
return gState.currentWindow->parent->num + 1;
else
return 0;
}
case GLUT_WINDOW_NUM_CHILDREN:
{BAutolock winlock(gState.currentWindow->Window());
int num = 0;
GlutWindow *children = gState.currentWindow->children;
while (children) {
num++;
children = children->siblings;
}
return num;
}
case GLUT_WINDOW_BUFFER_SIZE: // best guesses
case GLUT_WINDOW_DEPTH_SIZE:
return 32;
case GLUT_WINDOW_STENCIL_SIZE:
case GLUT_WINDOW_RED_SIZE: // always 24-bit color
case GLUT_WINDOW_GREEN_SIZE:
case GLUT_WINDOW_BLUE_SIZE:
case GLUT_WINDOW_ALPHA_SIZE:
case GLUT_WINDOW_ACCUM_RED_SIZE:
case GLUT_WINDOW_ACCUM_GREEN_SIZE:
case GLUT_WINDOW_ACCUM_BLUE_SIZE:
case GLUT_WINDOW_ACCUM_ALPHA_SIZE:
return 8;
case GLUT_WINDOW_DOUBLEBUFFER: // always double-buffered RGBA
case GLUT_WINDOW_RGBA:
return 1;
case GLUT_WINDOW_COLORMAP_SIZE: // don't support these
case GLUT_WINDOW_NUM_SAMPLES:
case GLUT_WINDOW_STEREO:
return 0;
case GLUT_WINDOW_CURSOR:
return gState.currentWindow->cursor; // don't need to lock window since it won't change
case GLUT_SCREEN_WIDTH:
return (int)(BScreen().Frame().Width()) + 1;
case GLUT_SCREEN_HEIGHT:
return (int)(BScreen().Frame().Height()) + 1;
case GLUT_SCREEN_WIDTH_MM:
return (int)((BScreen().Frame().Width() + 1) / dots_per_mm);
case GLUT_SCREEN_HEIGHT_MM:
return (int)((BScreen().Frame().Height() + 1) / dots_per_mm);
case GLUT_MENU_NUM_ITEMS:
return gState.currentMenu->num;
case GLUT_DISPLAY_MODE_POSSIBLE:
return __glutConvertDisplayMode(0); // returns 1 if possible
case GLUT_INIT_DISPLAY_MODE:
return gState.displayMode;
case GLUT_INIT_WINDOW_X:
return gState.initX;
case GLUT_INIT_WINDOW_Y:
return gState.initY;
case GLUT_INIT_WINDOW_WIDTH:
return gState.initWidth;
case GLUT_INIT_WINDOW_HEIGHT:
return gState.initHeight;
case GLUT_ELAPSED_TIME:
bigtime_t elapsed, beginning, now;
__glutInitTime(&beginning);
now = system_time();
elapsed = now - beginning;
return (int) (elapsed / 1000); // 1000 ticks in a millisecond
default:
__glutWarning("invalid glutGet parameter: %d", state);
return -1;
}
}
/***********************************************************
* FUNCTION: glutLayerGet (9.2)
*
* DESCRIPTION: since we don't support layers, this is easy
***********************************************************/
int glutLayerGet(GLenum info) {
switch(info) {
case GLUT_OVERLAY_POSSIBLE:
case GLUT_HAS_OVERLAY:
return 0;
case GLUT_LAYER_IN_USE:
return GLUT_NORMAL;
case GLUT_TRANSPARENT_INDEX:
return -1;
case GLUT_NORMAL_DAMAGED:
return gState.currentWindow->displayEvent;
case GLUT_OVERLAY_DAMAGED:
return -1;
default:
__glutWarning("invalid glutLayerGet param: %d", info);
return -1;
}
}
/***********************************************************
* FUNCTION: glutDeviceGet (9.3)
*
* DESCRIPTION: get info about I/O devices we support
* easy, since BeOS only supports a keyboard and mouse now
***********************************************************/
int glutDeviceGet(GLenum info) {
switch(info) {
case GLUT_HAS_KEYBOARD:
case GLUT_HAS_MOUSE:
return 1;
case GLUT_HAS_SPACEBALL:
case GLUT_HAS_DIAL_AND_BUTTON_BOX:
case GLUT_HAS_TABLET:
case GLUT_NUM_SPACEBALL_BUTTONS:
case GLUT_NUM_BUTTON_BOX_BUTTONS:
case GLUT_NUM_DIALS:
case GLUT_NUM_TABLET_BUTTONS:
return 0;
case GLUT_NUM_MOUSE_BUTTONS:
{
int32 mouseButtons = 3; // good guess
if(get_mouse_type(&mouseButtons) != B_OK) {
__glutWarning("error getting number of mouse buttons");
}
return mouseButtons;
}
default:
__glutWarning("invalid glutDeviceGet parameter: %d", info);
return -1;
}
}
/***********************************************************
* FUNCTION: glutGetModifiers (9.4)
*
* DESCRIPTION: get the modifier key state for the current window
***********************************************************/
int glutGetModifiers() {
if(gState.modifierKeys == (int) ~0) {
__glutWarning(
"glutCurrentModifiers: do not call outside core input callback.");
return 0;
}
return gState.modifierKeys;
}
/***********************************************************
* Copyright (C) 1997, Be Inc. Copyright (C) 1999, Jake Hamby.
*
* This program is freely distributable without licensing fees
* and is provided without guarantee or warrantee expressed or
* implied. This program is -not- in the public domain.
*
*
* FILE: glutInit.cpp
*
* DESCRIPTION: initialize GLUT state
***********************************************************/
/***********************************************************
* Headers
***********************************************************/
#include <GL/glut.h>
#include <string.h>
#include <stdlib.h>
#include <signal.h>
#include "glutint.h"
#include "glutState.h"
#include "glutBlocker.h"
#include "beos_x11.h"
/***********************************************************
* Global variables
***********************************************************/
GlutState gState;
char *__glutProgramName = NULL;
/***********************************************************
* Private variables
***********************************************************/
static int __glutArgc;
static char **__glutArgv;
/***********************************************************
* FUNCTION: __glutInitTime
*
* DESCRIPTION: set up start time variable
***********************************************************/
void __glutInitTime(bigtime_t *beginning)
{
static int beenhere = 0;
static bigtime_t genesis;
if (!beenhere) {
genesis = system_time();
beenhere = 1;
}
*beginning = genesis;
}
/***********************************************************
* FUNCTION: removeArgs
*
* DESCRIPTION: helper function for glutInit to remove args
* from argv variable passed in
***********************************************************/
static void
removeArgs(int *argcp, char **argv, int numToRemove)
{
int i, j;
for (i = 0, j = numToRemove; argv[j]; i++, j++) {
argv[i] = argv[j];
}
argv[i] = NULL;
*argcp -= numToRemove;
}
/***********************************************************
* FUNCTION: bAppThread
*
* DESCRIPTION: starts the BApplication message loop running
***********************************************************/
static int32 bAppThread(void *arg) {
be_app->Lock();
return be_app->Run();
}
/***********************************************************
* FUNCTION: sigHandler
*
* DESCRIPTION: shuts down the app on CTRL-C
***********************************************************/
static void sigHandler(int) {
gState.quitAll = true;
gBlock.NewEvent();
}
/***********************************************************
* FUNCTION: glutInit (2.1)
*
* DESCRIPTION: create BApplication, parse cmd-line arguments,
* and set up gState structure.
***********************************************************/
void glutInit(int *argcp, char **argv) {
char *str, *geometry = NULL;
int i;
if (gState.display) {
__glutWarning("glutInit being called a second time.");
return;
}
/* Determine temporary program name. */
str = strrchr(argv[0], '/');
if (str == NULL) {
__glutProgramName = argv[0];
} else {
__glutProgramName = str + 1;
}
/* Make private copy of command line arguments. */
__glutArgc = *argcp;
__glutArgv = (char **) malloc(__glutArgc * sizeof(char *));
if (!__glutArgv)
__glutFatalError("out of memory.");
for (i = 0; i < __glutArgc; i++) {
__glutArgv[i] = strdup(argv[i]);
if (!__glutArgv[i])
__glutFatalError("out of memory.");
}
/* determine permanent program name */
str = strrchr(__glutArgv[0], '/');
if (str == NULL) {
__glutProgramName = __glutArgv[0];
} else {
__glutProgramName = str + 1;
}
/* parse arguments for standard options */
for (i = 1; i < __glutArgc; i++) {
if (!strcmp(__glutArgv[i], "-display")) {
__glutWarning("-display option only valid for X glut.");
if (++i >= __glutArgc) {
__glutFatalError(
"follow -display option with X display name.");
}
removeArgs(argcp, &argv[1], 2);
} else if (!strcmp(__glutArgv[i], "-geometry")) {
if (++i >= __glutArgc) {
__glutFatalError(
"follow -geometry option with geometry parameter.");
}
geometry = __glutArgv[i];
removeArgs(argcp, &argv[1], 2);
} else if (!strcmp(__glutArgv[i], "-direct")) {
__glutWarning("-direct option only valid for X glut.");
removeArgs(argcp, &argv[1], 1);
} else if (!strcmp(__glutArgv[i], "-indirect")) {
__glutWarning("-indirect option only valid for X glut.");
removeArgs(argcp, &argv[1], 1);
} else if (!strcmp(__glutArgv[i], "-iconic")) {
__glutWarning("-iconic option doesn't make sense in BeOS.");
removeArgs(argcp, &argv[1], 1);
} else if (!strcmp(__glutArgv[i], "-gldebug")) {
gState.debug = true;
removeArgs(argcp, &argv[1], 1);
} else if (!strcmp(__glutArgv[i], "-sync")) {
__glutWarning("-sync option only valid for X glut.");
removeArgs(argcp, &argv[1], 1);
} else {
/* Once unknown option encountered, stop command line
processing. */
break;
}
}
__glutInit(); /* Create BApplication first so DisplayWidth() works */
if (geometry) {
int flags, x, y, width, height;
/* Fix bogus "{width|height} may be used before set"
warning */
width = 0;
height = 0;
flags = XParseGeometry(geometry, &x, &y,
(unsigned int *) &width, (unsigned int *) &height);
if (WidthValue & flags) {
/* Careful because X does not allow zero or negative
width windows */
if (width > 0)
gState.initWidth = width;
}
if (HeightValue & flags) {
/* Careful because X does not allow zero or negative
height windows */
if (height > 0)
gState.initHeight = height;
}
if (XValue & flags) {
if (XNegative & flags)
x = DisplayWidth() + x - gState.initWidth;
/* Play safe: reject negative X locations */
if (x >= 0)
gState.initX = x;
}
if (YValue & flags) {
if (YNegative & flags)
y = DisplayHeight() + y - gState.initHeight;
/* Play safe: reject negative Y locations */
if (y >= 0)
gState.initY = y;
}
}
}
/***********************************************************
* FUNCTION: __glutInit
*
* DESCRIPTION: create BApplication, parse cmd-line arguments,
* and set up gState structure.
***********************************************************/
void __glutInit() {
// open BApplication
gState.display = new BApplication("application/x-glut-demo");
be_app->Unlock();
gState.appthread = spawn_thread(bAppThread, "BApplication", B_NORMAL_PRIORITY, 0);
resume_thread(gState.appthread);
bigtime_t unused;
__glutInitTime(&unused);
/* set atexit() function to destroy all windows before exiting */
if(atexit(__glutDestroyAllWindows))
__glutFatalError("can't set exit handler");
/* similarly, destroy all windows on CTRL-C */
signal(SIGINT, sigHandler);
}
/***********************************************************
* FUNCTION: glutInitWindowPosition (2.2)
*
* DESCRIPTION: set initial window position
***********************************************************/
void glutInitWindowPosition(int x, int y) {
gState.initX = x;
gState.initY = y;
}
/***********************************************************
* FUNCTION: glutInitWindowSize (2.2)
*
* DESCRIPTION: set initial window size
***********************************************************/
void glutInitWindowSize(int width, int height) {
gState.initWidth = width;
gState.initHeight = height;
}
/***********************************************************
* FUNCTION: glutInitDisplayMode (2.3)
*
* DESCRIPTION: set initial display mode
***********************************************************/
void glutInitDisplayMode(unsigned int mode) {
gState.displayMode = mode;
}
/***********************************************************
* Copyright (C) 1997, Be Inc. Copyright (C) 1999, Jake Hamby.
*
* This program is freely distributable without licensing fees
* and is provided without guarantee or warrantee expressed or
* implied. This program is -not- in the public domain.
*
* FILE: glutMenu.cpp
*
* DESCRIPTION: code for popup menu handling
***********************************************************/
/***********************************************************
* Headers
***********************************************************/
#include <GL/glut.h>
#include <stdlib.h>
#include <string.h>
#include "glutint.h"
#include "glutState.h"
/***********************************************************
* Private variables
***********************************************************/
static GlutMenu **menuList = 0;
static int menuListSize = 0;
/***********************************************************
* FUNCTION: getUnusedMenuSlot
*
* DESCRIPTION: helper function to get a new menu slot
***********************************************************/
GlutMenu *__glutGetMenuByNum(int menunum)
{
if (menunum < 1 || menunum > menuListSize) {
return NULL;
}
return menuList[menunum - 1];
}
/***********************************************************
* FUNCTION: getUnusedMenuSlot
*
* DESCRIPTION: helper function to get a new menu slot
***********************************************************/
static int
getUnusedMenuSlot(void)
{
int i;
/* Look for allocated, unused slot. */
for (i = 0; i < menuListSize; i++) {
if (!menuList[i]) {
return i;
}
}
/* Allocate a new slot. */
menuListSize++;
menuList = (GlutMenu **)
realloc(menuList, menuListSize * sizeof(GlutMenu *));
if (!menuList)
__glutFatalError("out of memory.");
menuList[menuListSize - 1] = NULL;
return menuListSize - 1;
}
/***********************************************************
* FUNCTION: glutCreateMenu (6.1)
*
* DESCRIPTION: create a new menu
***********************************************************/
int APIENTRY
glutCreateMenu(GLUTselectCB selectFunc)
{
GlutMenu *menu;
int menuid;
menuid = getUnusedMenuSlot();
menu = new GlutMenu(menuid, selectFunc); // constructor sets up members
menuList[menuid] = menu;
gState.currentMenu = menu;
return menuid + 1;
}
/***********************************************************
* FUNCTION: glutSetMenu (6.2)
* glutGetMenu
*
* DESCRIPTION: set and get the current menu
***********************************************************/
int APIENTRY
glutGetMenu(void)
{
if (gState.currentMenu) {
return gState.currentMenu->id + 1;
} else {
return 0;
}
}
void APIENTRY
glutSetMenu(int menuid)
{
GlutMenu *menu;
if (menuid < 1 || menuid > menuListSize) {
__glutWarning("glutSetMenu attempted on bogus menu.");
return;
}
menu = menuList[menuid - 1];
if (!menu) {
__glutWarning("glutSetMenu attempted on bogus menu.");
return;
}
gState.currentMenu = menu;
}
/***********************************************************
* FUNCTION: glutDestroyMenu (6.3)
*
* DESCRIPTION: destroy the specified menu
***********************************************************/
void APIENTRY
glutDestroyMenu(int menunum)
{
GlutMenu *menu = __glutGetMenuByNum(menunum);
menuList[menunum - 1] = 0;
if (gState.currentMenu == menu) {
gState.currentMenu = 0;
}
delete menu;
}
/***********************************************************
* FUNCTION: glutAddMenuEntry (6.4)
*
* DESCRIPTION: add a new menu item
***********************************************************/
void
glutAddMenuEntry(const char *label, int value)
{
new GlutMenuItem(gState.currentMenu, false, value, label);
}
/***********************************************************
* FUNCTION: glutAddSubMenu (6.5)
*
* DESCRIPTION: add a new submenu
***********************************************************/
void
glutAddSubMenu(const char *label, int menu)
{
new GlutMenuItem(gState.currentMenu, true, menu-1, label);
}
/***********************************************************
* FUNCTION: glutChangeToMenuEntry (6.6)
*
* DESCRIPTION: change menuitem into a menu entry
***********************************************************/
void
glutChangeToMenuEntry(int num, const char *label, int value)
{
GlutMenuItem *item;
int i;
i = gState.currentMenu->num;
item = gState.currentMenu->list;
while (item) {
if (i == num) {
free(item->label);
item->label = strdup(label);
item->isTrigger = false;
item->value = value;
return;
}
i--;
item = item->next;
}
__glutWarning("Current menu has no %d item.", num);
}
/***********************************************************
* FUNCTION: glutChangeToSubMenu (6.7)
*
* DESCRIPTION: change menuitem into a submenu
***********************************************************/
void
glutChangeToSubMenu(int num, const char *label, int menu)
{
GlutMenuItem *item;
int i;
i = gState.currentMenu->num;
item = gState.currentMenu->list;
while (item) {
if (i == num) {
free(item->label);
item->label = strdup(label);
item->isTrigger = true;
item->value = menu-1;
return;
}
i--;
item = item->next;
}
__glutWarning("Current menu has no %d item.", num);
}
/***********************************************************
* FUNCTION: glutRemoveMenuItem (6.8)
*
* DESCRIPTION: remove a menu item
***********************************************************/
void
glutRemoveMenuItem(int num)
{
GlutMenuItem *item, **prev;
int i;
i = gState.currentMenu->num;
prev = &gState.currentMenu->list;
item = gState.currentMenu->list;
while (item) {
if (i == num) {
gState.currentMenu->num--;
/* Patch up menu's item list. */
*prev = item->next;
free(item->label);
delete item;
return;
}
i--;
prev = &item->next;
item = item->next;
}
__glutWarning("Current menu has no %d item.", num);
}
/***********************************************************
* FUNCTION: glutAttachMenu (6.9)
* glutDetachMenu
*
* DESCRIPTION: attach and detach menu from view
***********************************************************/
void
glutAttachMenu(int button)
{
gState.currentWindow->menu[button] = gState.currentMenu->id + 1;
}
void
glutDetachMenu(int button)
{
gState.currentWindow->menu[button] = 0;
}
/***********************************************************
* CLASS: GlutMenu
*
* FUNCTION: CreateBMenu
*
* DESCRIPTION: construct a BPopupMenu for this menu
***********************************************************/
BMenu *GlutMenu::CreateBMenu(bool toplevel) {
BMenu *bpopup;
if(toplevel) {
bpopup = new GlutPopUp(id+1);
} else {
bpopup = new BMenu("");
}
GlutMenuItem *item = list;
while (item) {
GlutBMenuItem *bitem;
if(item->isTrigger) {
// recursively call CreateBMenu
bitem = new GlutBMenuItem(menuList[item->value]->CreateBMenu(false));
bitem->SetLabel(item->label);
bitem->menu = 0; // real menu items start at 1
bitem->value = 0;
} else {
bitem = new GlutBMenuItem(item->label);
bitem->menu = id + 1;
bitem->value = item->value;
}
bpopup->AddItem(bitem, 0);
item = item->next;
}
return bpopup;
}
/***********************************************************
* CLASS: GlutMenu
*
* FUNCTION: (destructor)
*
* DESCRIPTION: destroy the menu and its items (but not submenus!)
***********************************************************/
GlutMenu::~GlutMenu() {
while (list) {
GlutMenuItem *next = list->next;
delete list;
list = next;
}
}
/***********************************************************
* CLASS: GlutMenuItem
*
* FUNCTION: (constructor)
*
* DESCRIPTION: construct the new menu item and add to parent
***********************************************************/
GlutMenuItem::GlutMenuItem(GlutMenu *n_menu, bool n_trig, int n_value, const char *n_label)
{
menu = n_menu;
isTrigger = n_trig;
value = n_value;
label = strdup(n_label);
next = menu->list;
menu->list = this;
menu->num++;
}
/***********************************************************
* Copyright (C) 1997, Be Inc. Copyright (C) 1999, Jake Hamby.
*
* This program is freely distributable without licensing fees
* and is provided without guarantee or warrantee expressed or
* implied. This program is -not- in the public domain.
*
*
* FILE: glutOverlay.cpp
*
* DESCRIPTION: we don't support overlays, so this code is
* really simple
***********************************************************/
/***********************************************************
* Headers
***********************************************************/
#include <GL/glut.h>
#include "glutint.h"
void glutEstablishOverlay() {
__glutFatalError("BeOS lacks overlay support.");
}
void glutUseLayer(GLenum layer) {
// ignore
}
void glutRemoveOverlay() {
// ignore
}
void glutPostOverlayRedisplay() {
// ignore
}
void glutShowOverlay() {
// ignore
}
void glutHideOverlay() {
// ignore
}
void glutPostWindowOverlayRedisplay(int win) {
// ignore
}
/***********************************************************
* Copyright (C) 1997, Be Inc. Copyright (C) 1999, Jake Hamby.
*
* This program is freely distributable without licensing fees
* and is provided without guarantee or warrantee expressed or
* implied. This program is -not- in the public domain.
*
*
* FILE: glutWindow.cpp
*
* DESCRIPTION: all the routines for dealing with GlutWindows
***********************************************************/
/***********************************************************
* Headers
***********************************************************/
#include <GL/glut.h>
#include <stdlib.h>
#include "glutint.h"
#include "glutState.h"
#include "glutBlocker.h"
/***********************************************************
* FUNCTION: getUnusedWindowSlot
*
* DESCRIPTION: helper function to get a new window slot
***********************************************************/
static int
getUnusedWindowSlot()
{
int i;
/* Look for allocated, unused slot. */
for (i = 0; i < gState.windowListSize; i++) {
if (!gState.windowList[i]) {
return i;
}
}
/* Allocate a new slot. */
gState.windowListSize++;
gState.windowList = (GlutWindow **)
realloc(gState.windowList,
gState.windowListSize * sizeof(GlutWindow *));
if (!gState.windowList)
__glutFatalError("out of memory.");
gState.windowList[gState.windowListSize - 1] = NULL;
return gState.windowListSize - 1;
}
/***********************************************************
* FUNCTION: __glutDefaultDisplay
* __glutDefaultReshape
*
* DESCRIPTION: default display and reshape functions
***********************************************************/
static void
__glutDefaultDisplay(void)
{
/* XXX Remove the warning after GLUT 3.0. */
__glutWarning("The following is a new check for GLUT 3.0; update your code.");
__glutFatalError(
"redisplay needed for window %d, but no display callback.",
gState.currentWindow->num + 1);
}
void
__glutDefaultReshape(int width, int height)
{
/* Adjust the viewport of the window */
glViewport(0, 0, (GLsizei) width, (GLsizei) height);
}
/***********************************************************
* CLASS: GlutWindow
*
* FUNCTION: (constructor)
*
* DESCRIPTION: creates a new GLUT window
* note: subwindows don't resize, but top-level windows
* follow all sides
***********************************************************/
GlutWindow::GlutWindow(GlutWindow *nparent, char *name,
int x, int y, int width, int height, ulong options) :
BGLView(
(nparent ? BRect(x,y,x+width-1,y+height-1) :
BRect(0,0,width-1,height-1)), name,
(nparent ? B_FOLLOW_NONE : B_FOLLOW_ALL_SIDES),
B_WILL_DRAW|B_FRAME_EVENTS|B_FULL_UPDATE_ON_RESIZE|B_PULSE_NEEDED,
options)
{
// add myself to window list
num = getUnusedWindowSlot();
gState.windowList[num] = this;
// set up parent/children relationships
parent = nparent;
if (parent) {
siblings = parent->children;
parent->children = this;
} else {
siblings = 0;
}
children = 0;
// initialize variables
cursor = GLUT_CURSOR_INHERIT; // default cursor
for (int i = 0; i < GLUT_MAX_MENUS; i++) {
menu[i] = 0;
}
m_width = width;
m_height = height;
m_buttons = 0;
// clear callbacks
display = __glutDefaultDisplay;
reshape = __glutDefaultReshape;
mouse = 0;
motion = 0;
passive = 0;
entry = 0;
keyboard = 0;
visibility = 0;
special = 0;
windowStatus = 0;
// clear event counters
anyevents = 1;
displayEvent = 1; // get a reshape and a display event right away
reshapeEvent = 1;
mouseEvent = 0;
motionEvent = 0;
passiveEvent = 0;
entryEvent = 0;
keybEvent = 0;
windowStatusEvent = 0; // DirectConnected() will report change in
visState = -1; // visibility
specialEvent = 0;
statusEvent = 0;
menuEvent = 0;
visible = true;
gBlock.QuickNewEvent();
// if i'm a subwindow, add me to my parent view
if (parent) {
parent->Window()->Lock();
parent->AddChild(this);
parent->Window()->Unlock();
} else {
// if I'm a top-level window, create my BWindow
GlutBWindow *mybwindow = new GlutBWindow(
BRect(x,y,x+width-1,y+height-1), name);
mybwindow->AddChild(this);
mybwindow->bgl = this;
mybwindow->Show();
}
// give me the keyboard focus (focus follows mouse, X style, as
// implemented in GlutWindow::MouseMoved())
Window()->Lock();
MakeFocus();
Window()->Unlock();
// make myself the default window
__glutSetWindow(this);
}
/***********************************************************
* FUNCTION: glutCreateWindow (4.1)
*
* DESCRIPTION: creates a new GLUT window
***********************************************************/
int glutCreateWindow(const char *name) {
if (!be_app)
__glutInit();
ulong options;
if (!__glutConvertDisplayMode(&options)) {
__glutWarning("visual with necessary capabilities not found.");
}
// if X or Y is negative, then start at a reasonable position
bool defaultxy = (gState.initX < 0) || (gState.initY < 0);
GlutWindow *window = new GlutWindow(0, const_cast<char*>(name),
(defaultxy ? 50 : gState.initX), (defaultxy ? 50 : gState.initY),
gState.initWidth, gState.initHeight, options);
return window->num + 1;
}
/***********************************************************
* FUNCTION: glutCreateSubWindow (4.2)
*
* DESCRIPTION: creates a new GLUT subwindow
* Note: a subwindow is a GlutWindow (which is actually
* a BGLView) without its own BWindow
***********************************************************/
int glutCreateSubWindow(int win, int x, int y, int width, int height) {
ulong options;
if (!__glutConvertDisplayMode(&options)) {
__glutFatalError("visual with necessary capabilities not found.");
}
GlutWindow *window = new GlutWindow(gState.windowList[win-1], "child",
x, y, width, height, options);
return window->num + 1;
}
/***********************************************************
* FUNCTION: __glutSetWindow
*
* DESCRIPTION: set the current window (utility function)
***********************************************************/
void
__glutSetWindow(GlutWindow * window)
{
if (gState.currentWindow)
gState.currentWindow->UnlockGL();
gState.currentWindow = window;
gState.currentWindow->LockGL();
}
/***********************************************************
* FUNCTION: glutSetWindow (4.3)
* glutGetWindow
*
* DESCRIPTION: set and get the current window
***********************************************************/
void glutSetWindow(int win) {
GlutWindow *window;
if (win < 1 || win > gState.windowListSize) {
__glutWarning("glutSetWindow attempted on bogus window.");
return;
}
window = gState.windowList[win - 1];
if (!window) {
__glutWarning("glutSetWindow attempted on bogus window.");
return;
}
__glutSetWindow(window);
}
int glutGetWindow() {
if (gState.currentWindow) {
return gState.currentWindow->num + 1;
} else {
return 0;
}
}
/***********************************************************
* FUNCTION: __glutDestroyWindow
*
* DESCRIPTION: recursively set entries to 0
***********************************************************/
static void
__glutDestroyWindow(GlutWindow *window, GlutWindow *initialWindow) {
// first, find all children recursively and set their entries to 0
GlutWindow *cur = window->children;
while (cur) {
GlutWindow *siblings = cur->siblings;
__glutDestroyWindow(cur, initialWindow);
cur = siblings;
}
/* Remove from parent's children list (only necessary for
non-initial windows and subwindows!). */
GlutWindow *parent = window->parent;
if (parent && parent == initialWindow->parent) {
GlutWindow **prev = &parent->children;
cur = parent->children;
while (cur) {
if (cur == window) {
*prev = cur->siblings;
break;
}
prev = &(cur->siblings);
cur = cur->siblings;
}
}
// finally, check if we are the current window, and set to 0
if (gState.currentWindow == window) {
gState.currentWindow = 0;
}
gState.windowList[window->num] = 0;
}
/***********************************************************
* FUNCTION: glutDestroyWindow (4.4)
*
* DESCRIPTION: destroy window and all its children
***********************************************************/
void glutDestroyWindow(int win) {
// can't destroy a window if another window has the GL context
if (gState.currentWindow)
gState.currentWindow->UnlockGL();
// lock the window
GlutWindow *window = gState.windowList[win-1];
BWindow *bwindow = window->Window();
bwindow->Lock();
// if win is the current window, set current window to 0
if (gState.currentWindow == window) {
gState.currentWindow = 0;
}
// recursively set child entries to 0
__glutDestroyWindow(window, window);
// try flushing OpenGL
window->LockGL();
glFlush();
window->UnlockGL();
// now, if the window was top-level, delete its BWindow
if(!window->parent) {
bwindow->Quit();
} else {
// else, detach it from the BWindow and delete it
window->RemoveSelf();
delete window;
bwindow->Unlock();
}
// relock GL if the current window is still valid
if(gState.currentWindow)
gState.currentWindow->LockGL();
}
/***********************************************************
* FUNCTION: __glutDestroyAllWindows
*
* DESCRIPTION: destroy all windows when exit() is called
* this seems to be necessary to avoid delays
* and crashes when using BDirectWindow
***********************************************************/
void __glutDestroyAllWindows() {
for(int i=0; i<gState.windowListSize; i++) {
if (gState.windowList[i]) {
glutDestroyWindow(i + 1);
}
}
gState.display->Lock();
gState.display->Quit();
status_t ignored;
wait_for_thread(gState.appthread, &ignored);
}
/***********************************************************
* FUNCTION: glutPostRedisplay (4.5)
*
* DESCRIPTION: mark window as needing redisplay
***********************************************************/
void glutPostRedisplay() {
gState.currentWindow->Window()->Lock();
gState.currentWindow->anyevents = true;
gState.currentWindow->displayEvent = true;
gState.currentWindow->Window()->Unlock();
gBlock.QuickNewEvent();
}
/***********************************************************
* FUNCTION: glutPostWindowRedisplay
*
* DESCRIPTION: mark window as needing redisplay
***********************************************************/
void glutPostWindowRedisplay(int win) {
GlutWindow *gwin = gState.windowList[win - 1];
gwin->Window()->Lock();
gwin->anyevents = true;
gwin->displayEvent = true;
gwin->Window()->Unlock();
gBlock.QuickNewEvent();
}
/***********************************************************
* FUNCTION: glutSwapBuffers (4.6)
*
* DESCRIPTION: swap buffers
***********************************************************/
void glutSwapBuffers() {
gState.currentWindow->SwapBuffers();
}
/***********************************************************
* FUNCTION: glutPositionWindow (4.7)
*
* DESCRIPTION: move window
***********************************************************/
void glutPositionWindow(int x, int y) {
BDirectWindow *win = dynamic_cast<BDirectWindow*>(gState.currentWindow->Window());
win->Lock();
if (gState.currentWindow->parent)
gState.currentWindow->MoveTo(x, y); // move the child view
else {
if(win->IsFullScreen()) {
win->SetFullScreen(false);
}
win->MoveTo(x, y); // move the window
}
win->Unlock();
}
/***********************************************************
* FUNCTION: glutReshapeWindow (4.8)
*
* DESCRIPTION: reshape window (we'll catch the callback
* when the view gets a Draw() message
***********************************************************/
void glutReshapeWindow(int width, int height) {
BDirectWindow *win = dynamic_cast<BDirectWindow*>(gState.currentWindow->Window());
win->Lock();
if (gState.currentWindow->parent)
gState.currentWindow->ResizeTo(width-1, height-1); // resize the child
else {
if(win->IsFullScreen()) {
win->SetFullScreen(false);
}
win->ResizeTo(width-1, height-1); // resize the parent
}
win->Unlock();
}
/***********************************************************
* FUNCTION: glutFullScreen (4.9)
*
* DESCRIPTION: makes the window full screen
***********************************************************/
void glutFullScreen() {
BDirectWindow *win = dynamic_cast<BDirectWindow*>(gState.currentWindow->Window());
win->Lock();
win->SetFullScreen(true);
win->Unlock();
}
/***********************************************************
* FUNCTION: glutPopWindow (4.10)
* glutPushWindow
*
* DESCRIPTION: change the stacking order of the current window
* NOTE: I can't figure out how to do this for windows,
* and there is no concept of "stacking order" for
* subwindows, so these are currently no-ops.
***********************************************************/
void glutPopWindow() { }
void glutPushWindow() { }
/***********************************************************
* FUNCTION: glutShowWindow (4.11)
* glutHideWindow
* glutIconifyWindow
*
* DESCRIPTION: change display status of current window
***********************************************************/
void glutShowWindow() {
gState.currentWindow->Window()->Lock();
if (gState.currentWindow->parent) // subwindow
gState.currentWindow->Show();
else {
if(gState.currentWindow->Window()->IsHidden())
gState.currentWindow->Window()->Show(); // show the actual BWindow
gState.currentWindow->Window()->Minimize(false);
}
gState.currentWindow->Window()->Unlock();
}
void glutHideWindow() {
gState.currentWindow->Window()->Lock();
if (gState.currentWindow->parent) // subwindow
gState.currentWindow->Hide();
else
gState.currentWindow->Window()->Hide(); // show the actual BWindow
gState.currentWindow->Window()->Unlock();
}
void glutIconifyWindow() {
if(gState.currentWindow->parent)
__glutFatalError("can't iconify a subwindow");
gState.currentWindow->Window()->Lock();
gState.currentWindow->Window()->Minimize(true);
gState.currentWindow->Window()->Unlock();
}
/***********************************************************
* FUNCTION: glutSetWindowTitle (4.12)
* glutSetIconTitle
*
* DESCRIPTION: set the window title (icon title is same)
***********************************************************/
void glutSetWindowTitle(const char *name) {
if (gState.currentWindow->parent)
__glutFatalError("glutSetWindowTitle: isn't a top-level window");
gState.currentWindow->Window()->Lock();
gState.currentWindow->Window()->SetTitle(name);
gState.currentWindow->Window()->Unlock();
}
void glutSetIconTitle(const char *name) {
glutSetWindowTitle(name);
}
/***********************************************************
* FUNCTION: __glutConvertDisplayMode
*
* DESCRIPTION: converts the current display mode into a BGLView
* display mode, printing warnings as appropriate.
*
* PARAMETERS: if options is non-NULL, the current display mode is
* returned in it.
*
* RETURNS: 1 if the current display mode is possible, else 0
***********************************************************/
int __glutConvertDisplayMode(unsigned long *options) {
if (gState.displayString) {
/* __glutDisplayString should be NULL except if
glutInitDisplayString has been called to register a
different display string. Calling glutInitDisplayString
means using a string instead of an integer mask determine
the visual to use. This big ugly code is in glutDstr.cpp */
return __glutConvertDisplayModeFromString(options);
}
if(options) {
ulong newoptions = 0;
if(gState.displayMode & GLUT_ACCUM)
newoptions |= BGL_ACCUM;
if(gState.displayMode & GLUT_ALPHA)
newoptions |= BGL_ALPHA;
if(gState.displayMode & GLUT_DEPTH)
newoptions |= BGL_DEPTH;
if(gState.displayMode & GLUT_DOUBLE)
newoptions |= BGL_DOUBLE;
if(gState.displayMode & GLUT_STENCIL)
newoptions |= BGL_STENCIL;
*options = newoptions;
}
if(gState.displayMode & GLUT_INDEX) {
__glutWarning("BeOS doesn't support indexed color");
return 0;
}
if(gState.displayMode & GLUT_MULTISAMPLE) {
return 1; // try to go without multisampling
}
if(gState.displayMode & GLUT_STEREO) {
__glutWarning("BeOS doesn't support stereo windows");
return 0;
}
if(gState.displayMode & GLUT_LUMINANCE) {
__glutWarning("BeOS doesn't support luminance color model");
return 0;
}
return 1; // visual supported
}
/***********************************************************
* CLASS: GlutBWindow
*
* DESCRIPTION: very thin wrapper around BWindow
***********************************************************/
GlutBWindow::GlutBWindow(BRect frame, char *name) :
BDirectWindow(frame, name, B_TITLED_WINDOW, 0) {
fConnectionDisabled = false;
bgl = 0;
SetPulseRate(100000);
if (!SupportsWindowMode()) {
__glutFatalError("video card doesn't support windowed operation");
}
}
void GlutBWindow::DirectConnected( direct_buffer_info *info ) {
bgl->DirectConnected(info);
if(bgl && !fConnectionDisabled) {
bgl->EnableDirectMode(true);
}
int newVisState;
if((info->buffer_state & B_DIRECT_MODE_MASK) == B_DIRECT_START) {
bgl->visible = true;
}
if(!bgl->visible || info->buffer_state == B_DIRECT_STOP)
newVisState = GLUT_HIDDEN;
else {
if (info->clip_list_count == 0)
newVisState = GLUT_FULLY_COVERED;
else if (info->clip_list_count == 1)
newVisState = GLUT_FULLY_RETAINED;
else
newVisState = GLUT_PARTIALLY_RETAINED;
}
if(newVisState != bgl->visState) {
bgl->visState = newVisState;
bgl->anyevents = bgl->windowStatusEvent = true;
gBlock.NewEvent();
}
}
GlutBWindow::~GlutBWindow() {
fConnectionDisabled = true;
if(bgl) {
bgl->EnableDirectMode(false);
}
if(!IsHidden())
Hide();
Sync();
}
bool GlutBWindow::QuitRequested() {
gState.quitAll = true;
gBlock.NewEvent();
return false; // don't quit now, wait for main thread to do it
}
void GlutBWindow::Minimize(bool minimize) {
bgl->visible = !minimize;
BWindow::Minimize(minimize);
}
void GlutBWindow::Hide() {
BWindow::Hide();
bgl->visible = false;
}
void GlutBWindow::Show() {
BWindow::Show();
bgl->visible = true;
}
# Makefile for GLUT
#
# NOTICE: The OpenGL Utility Toolkit (GLUT) distribution contains source
# code published in a book titled "Programming OpenGL for the X Window
# System" (ISBN: 0-201-48359-9) published by Addison-Wesley. The
# programs and associated files contained in the distribution were
# developed by Mark J. Kilgard and are Copyright 1994, 1995, 1996 by Mark
# J. Kilgard (unless otherwise noted). The programs are not in the
# public domain, but they are freely distributable without licensing
# fees. These programs are provided without guarantee or warrantee
# expressed or implied.
#
# GLUT source included with Mesa with permission from Mark Kilgard.
# src/glut/beos/Makefile
TOP = ../../..
include $(TOP)/configs/current
GLUT_MAJOR = 3
GLUT_MINOR = 7
GLUT_TINY = 1
CPP_SOURCES = \
glutBlocker.cpp \
glutInit.cpp \
glutWindow.cpp \
glutEvent.cpp \
glutCallback.cpp \
glutOverlay.cpp \
glutGet.cpp \
glutColor.cpp \
glutCursor.cpp \
glutMenu.cpp \
glutDstr.cpp \
beos_x11.cpp
C_SOURCES = \
glut_8x13.c \
glut_9x15.c \
glut_bitmap.c \
glut_bwidth.c \
glut_hel10.c \
glut_hel12.c \
glut_hel18.c \
glut_tr10.c \
glut_tr24.c \
glut_mroman.c \
glut_roman.c \
glut_stroke.c \
glut_swidth.c \
glut_shapes.c \
glut_teapot.c \
glut_vidresize.c \
glut_util.c \
glut_ext.c
OBJECTS = \
$(CPP_SOURCES:.cpp=.o) \
$(C_SOURCES:.c=.o)
INCLUDES = \
-I. \
-I- \
-I$(TOP)/include
# Rules
.cpp.o:
$(CC) -c $< $(INCLUDES) $(CFLAGS) $(GLUT_CFLAGS) -o $@
.c.o:
$(CC) -c $< $(INCLUDES) $(CFLAGS) $(GLUT_CFLAGS) -o $@
# ---- TARGETS
default: $(TOP)/$(LIB_DIR) $(TOP)/$(LIB_DIR)/$(GLUT_LIB_NAME)
# Create the lib directory if missing
$(TOP)/$(LIB_DIR):
mkdir $(TOP)/$(LIB_DIR)
# Make the library
$(TOP)/$(LIB_DIR)/$(GLUT_LIB_NAME): depend $(OBJECTS)
@$(TOP)/bin/mklib -o $(GLUT_LIB) -ldflags '$(LDFLAGS)' \
-major $(GLUT_MAJOR) -minor $(GLUT_MINOR) -patch $(GLUT_TINY) \
-install $(TOP)/$(LIB_DIR) $(MKLIB_OPTIONS) $(GLUT_LIB_DEPS) \
$(OBJECTS)
clean:
-rm -f *.o
depend: $(SOURCES)
touch depend
$(MKDEP) $(MKDEP_OPTIONS) $(INCLUDES) $(SOURCES) > /dev/null
include depend
/*
* DOS/DJGPP Mesa Utility Toolkit
* Version: 1.0
*
* Copyright (C) 2005 Daniel Borca 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
* DANIEL BORCA 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 "internal.h"
GLUTSShotCB _glut_timer_cb[MAX_TIMER_CB];
GLUTidleCB _glut_idle_func = NULL;
void APIENTRY
glutDisplayFunc (GLUTdisplayCB func)
{
_glut_current->display = func;
}
void APIENTRY
glutReshapeFunc (GLUTreshapeCB func)
{
_glut_current->reshape = func;
}
void APIENTRY
glutKeyboardFunc (GLUTkeyboardCB func)
{
_glut_current->keyboard = func;
}
void APIENTRY
glutMouseFunc (GLUTmouseCB func)
{
_glut_current->mouse = func;
}
void APIENTRY
glutMotionFunc (GLUTmotionCB func)
{
_glut_current->motion = func;
}
void APIENTRY
glutPassiveMotionFunc (GLUTpassiveCB func)
{
_glut_current->passive = func;
}
void APIENTRY
glutEntryFunc (GLUTentryCB func)
{
_glut_current->entry = func;
}
void APIENTRY
glutVisibilityFunc (GLUTvisibilityCB func)
{
_glut_current->visibility = func;
}
void APIENTRY
glutWindowStatusFunc (GLUTwindowStatusCB func)
{
_glut_current->windowStatus = func;
}
void APIENTRY
glutIdleFunc (GLUTidleCB func)
{
_glut_idle_func = func;
}
void APIENTRY
glutTimerFunc (unsigned int millis, GLUTtimerCB func, int value)
{
int i;
if (millis > 0) {
for (i = 0; i < MAX_TIMER_CB; i++) {
GLUTSShotCB *cb = &_glut_timer_cb[i];
if (cb->func == NULL) {
cb->value = value;
cb->func = func;
cb->time = glutGet(GLUT_ELAPSED_TIME) + millis;
break;
}
}
}
}
void APIENTRY
glutSpecialFunc (GLUTspecialCB func)
{
_glut_current->special = func;
}
void APIENTRY
glutSpaceballMotionFunc (GLUTspaceMotionCB func)
{
_glut_current->spaceMotion = func;
}
void APIENTRY
glutSpaceballRotateFunc (GLUTspaceRotateCB func)
{
_glut_current->spaceRotate = func;
}
void APIENTRY
glutSpaceballButtonFunc (GLUTspaceButtonCB func)
{
_glut_current->spaceButton = func;
}
void APIENTRY
glutDialsFunc (GLUTdialsCB func)
{
_glut_current->dials = func;
}
void APIENTRY
glutButtonBoxFunc (GLUTbuttonBoxCB func)
{
_glut_current->buttonBox = func;
}
void APIENTRY
glutTabletMotionFunc (GLUTtabletMotionCB func)
{
_glut_current->tabletMotion = func;
}
void APIENTRY
glutTabletButtonFunc (GLUTtabletButtonCB func)
{
_glut_current->tabletButton = func;
}
void APIENTRY
glutJoystickFunc (GLUTjoystickCB func, int interval)
{
_glut_current->joystick = func;
}
void APIENTRY
glutKeyboardUpFunc (GLUTkeyboardCB func)
{
_glut_current->keyboardUp = func;
}
void APIENTRY
glutSpecialUpFunc (GLUTspecialCB func)
{
_glut_current->specialUp = func;
}
void APIENTRY
glutMouseWheelFunc (GLUTmouseWheelCB func)
{
_glut_current->mouseWheel = func;
}
/*
* DOS/DJGPP Mesa Utility Toolkit
* Version: 1.0
*
* Copyright (C) 2005 Daniel Borca 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
* DANIEL BORCA 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 "internal.h"
void APIENTRY
glutBitmapCharacter (void *font, int c)
{
const GLUTBitmapFont *bfp = _glut_font(font);
const GLUTBitmapChar *bcp;
if (c >= bfp->num || !(bcp = bfp->table[c]))
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);
glBitmap(bcp->width, bcp->height, bcp->xorig, bcp->yorig,
bcp->xmove, 0, bcp->bitmap);
glPopClientAttrib();
}
void APIENTRY
glutBitmapString (void *font, const unsigned char *string)
{
const GLUTBitmapFont *bfp = _glut_font(font);
const GLUTBitmapChar *bcp;
unsigned char c;
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);
while ((c = *(string++))) {
if (c < bfp->num && (bcp = bfp->table[c]))
glBitmap(bcp->width, bcp->height, bcp->xorig,
bcp->yorig, bcp->xmove, 0, bcp->bitmap);
}
glPopClientAttrib();
}
int APIENTRY
glutBitmapWidth (void *font, int c)
{
const GLUTBitmapFont *bfp = _glut_font(font);
const GLUTBitmapChar *bcp;
if (c >= bfp->num || !(bcp = bfp->table[c]))
return 0;
return bcp->xmove;
}
int APIENTRY
glutBitmapLength (void *font, const unsigned char *string)
{
const GLUTBitmapFont *bfp = _glut_font(font);
const GLUTBitmapChar *bcp;
unsigned char c;
int length = 0;
while ((c = *(string++))) {
if (c < bfp->num && (bcp = bfp->table[c]))
length += bcp->xmove;
}
return length;
}
int APIENTRY
glutBitmapHeight (void *font)
{
const GLUTBitmapFont *bfp = _glut_font(font);
return bfp->height;
}
/*
* DOS/DJGPP Mesa Utility Toolkit
* Version: 1.0
*
* Copyright (C) 2005 Daniel Borca 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
* DANIEL BORCA 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 INTERNAL_H_included
#define INTERNAL_H_included
#include <GL/glut.h>
#include "GL/dmesa.h"
#define MAX_WINDOWS 2
#define MAX_TIMER_CB 8
#define RESERVED_COLORS 0
/* GLUT function types */
typedef void (GLUTCALLBACK *GLUTdisplayCB) (void);
typedef void (GLUTCALLBACK *GLUTreshapeCB) (int, int);
typedef void (GLUTCALLBACK *GLUTkeyboardCB) (unsigned char, int, int);
typedef void (GLUTCALLBACK *GLUTmouseCB) (int, int, int, int);
typedef void (GLUTCALLBACK *GLUTmotionCB) (int, int);
typedef void (GLUTCALLBACK *GLUTpassiveCB) (int, int);
typedef void (GLUTCALLBACK *GLUTentryCB) (int);
typedef void (GLUTCALLBACK *GLUTvisibilityCB) (int);
typedef void (GLUTCALLBACK *GLUTwindowStatusCB) (int);
typedef void (GLUTCALLBACK *GLUTidleCB) (void);
typedef void (GLUTCALLBACK *GLUTtimerCB) (int);
typedef void (GLUTCALLBACK *GLUTmenuStateCB) (int); /* DEPRECATED. */
typedef void (GLUTCALLBACK *GLUTmenuStatusCB) (int, int, int);
typedef void (GLUTCALLBACK *GLUTselectCB) (int);
typedef void (GLUTCALLBACK *GLUTspecialCB) (int, int, int);
typedef void (GLUTCALLBACK *GLUTspaceMotionCB) (int, int, int);
typedef void (GLUTCALLBACK *GLUTspaceRotateCB) (int, int, int);
typedef void (GLUTCALLBACK *GLUTspaceButtonCB) (int, int);
typedef void (GLUTCALLBACK *GLUTdialsCB) (int, int);
typedef void (GLUTCALLBACK *GLUTbuttonBoxCB) (int, int);
typedef void (GLUTCALLBACK *GLUTtabletMotionCB) (int, int);
typedef void (GLUTCALLBACK *GLUTtabletButtonCB) (int, int, int, int);
typedef void (GLUTCALLBACK *GLUTjoystickCB) (unsigned int, int, int, int);
typedef void (GLUTCALLBACK *GLUTdestroyCB) (void);
typedef void (GLUTCALLBACK *GLUTmouseWheelCB) (int, int, int, int);
typedef void (GLUTCALLBACK *GLUTmenuDestroyCB) (void);
typedef struct {
GLuint bpp, alpha;
GLuint depth, stencil;
GLuint accum;
GLint geometry[2];
GLuint refresh;
GLint flags;
} GLUTvisual;
typedef struct {
GLint x, y;
GLint width, height;
GLuint mode;
} GLUTdefault;
typedef struct {
void (*func) (int);
int value;
int time;
} GLUTSShotCB;
typedef struct GLUTwindow {
int num; /* window id */
DMesaContext context;
DMesaBuffer buffer;
int show_mouse;
GLboolean redisplay;
/* GLUT settable or visible window state. */
int xpos;
int ypos;
int width; /* window width in pixels */
int height; /* window height in pixels */
/* Per-window callbacks. */
GLUTdisplayCB display; /* redraw */
GLUTreshapeCB reshape; /* resize (width,height) */
GLUTmouseCB mouse; /* mouse (button,state,x,y) */
GLUTmotionCB motion; /* motion (x,y) */
GLUTpassiveCB passive; /* passive motion (x,y) */
GLUTentryCB entry; /* window entry/exit (state) */
GLUTkeyboardCB keyboard; /* keyboard (ASCII,x,y) */
GLUTkeyboardCB keyboardUp; /* keyboard up (ASCII,x,y) */
GLUTwindowStatusCB windowStatus; /* window status */
GLUTvisibilityCB visibility; /* visibility */
GLUTspecialCB special; /* special key */
GLUTspecialCB specialUp; /* special up key */
GLUTbuttonBoxCB buttonBox; /* button box */
GLUTdialsCB dials; /* dials */
GLUTspaceMotionCB spaceMotion; /* Spaceball motion */
GLUTspaceRotateCB spaceRotate; /* Spaceball rotate */
GLUTspaceButtonCB spaceButton; /* Spaceball button */
GLUTtabletMotionCB tabletMotion; /* tablet motion */
GLUTtabletButtonCB tabletButton; /* tablet button */
GLUTjoystickCB joystick; /* joystick */
GLUTdestroyCB destroy; /* destroy */
GLUTmouseWheelCB mouseWheel; /* mouse wheel */
/* specific data */
void *data;
} GLUTwindow;
typedef struct {
int width, height;
int xorig, yorig;
int xmove;
const unsigned char *bitmap;
} GLUTBitmapChar;
typedef struct {
const char *name;
int height;
int num;
const GLUTBitmapChar *const *table;
} GLUTBitmapFont;
typedef struct {
const GLfloat x, y;
} GLUTStrokeVertex;
typedef struct {
const unsigned num;
const GLUTStrokeVertex *vertex;
} GLUTStrokeStrip;
typedef struct {
const GLfloat right;
const unsigned num;
const GLUTStrokeStrip *strip;
} GLUTStrokeChar;
typedef struct {
const char *name;
const unsigned num;
const GLUTStrokeChar *const *table;
const GLfloat height;
const GLfloat descent;
} GLUTStrokeFont;
extern char *__glutProgramName;
extern GLUTvisual _glut_visual;
extern GLUTdefault _glut_default;
extern GLuint _glut_fps;
extern GLUTidleCB _glut_idle_func;
extern GLUTmenuStatusCB _glut_menu_status_func;
extern GLUTSShotCB _glut_timer_cb[];
extern GLUTwindow *_glut_current, *_glut_windows[];
extern int _glut_mouse; /* number of buttons, if mouse installed */
extern int _glut_mouse_x, _glut_mouse_y; /* mouse coords, relative to current win */
extern void _glut_mouse_init (void);
extern void _glut_fatal(char *format,...);
extern void *_glut_font (void *font);
#include "pc_hw/pc_hw.h"
#endif
/*
* DOS/DJGPP Mesa Utility Toolkit
* Version: 1.0
*
* Copyright (C) 2005 Daniel Borca 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
* DANIEL BORCA 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 "internal.h"
#define CLAMP(i) ((i) > 1.0F ? 1.0F : ((i) < 0.0F ? 0.0F : (i)))
void APIENTRY
glutSetColor (int ndx, GLfloat red, GLfloat green, GLfloat blue)
{
if (_glut_default.mode & GLUT_INDEX) {
if ((ndx >= 0) && (ndx < (256 - RESERVED_COLORS))) {
DMesaSetCI(ndx, CLAMP(red), CLAMP(green), CLAMP(blue));
}
}
}
GLfloat APIENTRY
glutGetColor (int ndx, int component)
{
return 0.0;
}
void APIENTRY
glutCopyColormap (int win)
{
}
/*
* DOS/DJGPP Mesa Utility Toolkit
* Version: 1.0
*
* Copyright (C) 2005 Daniel Borca 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
* DANIEL BORCA 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 <string.h>
#include "internal.h"
int APIENTRY
glutExtensionSupported (const char *extension)
{
static const GLubyte *extensions = NULL;
const GLubyte *last, *where;
/* Extension names should not have spaces. */
if (strchr(extension, ' ') || *extension == '\0') {
return GL_FALSE;
}
/* Not my problem if you don't have a valid OpenGL context */
if (!extensions) {
extensions = glGetString(GL_EXTENSIONS);
}
if (!extensions) {
return GL_FALSE;
}
/* Take care of sub-strings etc. */
for (last = extensions;;) {
if ((where = (GLubyte *)strstr((const char *)last, extension)) == NULL) {
return GL_FALSE;
}
last = where + strlen(extension);
if (where == extensions || *(where - 1) == ' ') {
if (*last == ' ' || *last == '\0') {
return GL_TRUE;
}
}
}
}
GLUTproc APIENTRY
glutGetProcAddress (const char *procName)
{
/* TODO - handle glut namespace */
return (GLUTproc)DMesaGetProcAddress(procName);
}
/* autogenerated by bdf2c! do not edit */
/* "Public domain font. Share and enjoy." */
#include "internal.h"
/*
typedef struct {
int width, height;
int xorig, yorig;
int xmove;
const unsigned char *bitmap;
} GLUTBitmapChar;
typedef struct {
const char *name;
int height;
int num;
const GLUTBitmapChar *const *table;
} GLUTBitmapFont;
*/
static const unsigned char ch0data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch0 = { 8, 13, 0, 2, 8, ch0data };
static const unsigned char ch1data[] = {
0x0,0x0,0x0,0x10,0x38,0x7c,0xfe,0x7c,0x38,0x10,0x0,0x0,0x0
};
static const GLUTBitmapChar ch1 = { 8, 13, 0, 2, 8, ch1data };
static const unsigned char ch2data[] = {
0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x0
};
static const GLUTBitmapChar ch2 = { 8, 13, 0, 2, 8, ch2data };
static const unsigned char ch3data[] = {
0x8,0x8,0x8,0x3e,0x88,0x88,0xf8,0x88,0x88,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch3 = { 8, 13, 0, 2, 8, ch3data };
static const unsigned char ch4data[] = {
0x10,0x10,0x1c,0x10,0x9e,0x80,0xe0,0x80,0xf0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch4 = { 8, 13, 0, 2, 8, ch4data };
static const unsigned char ch5data[] = {
0x22,0x22,0x3c,0x22,0x3c,0x78,0x80,0x80,0x78,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch5 = { 8, 13, 0, 2, 8, ch5data };
static const unsigned char ch6data[] = {
0x20,0x20,0x3c,0x20,0x3e,0xf8,0x80,0x80,0x80,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch6 = { 8, 13, 0, 2, 8, ch6data };
static const unsigned char ch7data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x38,0x44,0x44,0x38,0x0,0x0
};
static const GLUTBitmapChar ch7 = { 8, 13, 0, 2, 8, ch7data };
static const unsigned char ch8data[] = {
0x0,0x0,0xfe,0x10,0x10,0xfe,0x10,0x10,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch8 = { 8, 13, 0, 2, 8, ch8data };
static const unsigned char ch9data[] = {
0x3e,0x20,0x20,0x20,0x88,0x98,0xa8,0xc8,0x88,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch9 = { 8, 13, 0, 2, 8, ch9data };
static const unsigned char ch10data[] = {
0x8,0x8,0x8,0x8,0x3e,0x20,0x50,0x88,0x88,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch10 = { 8, 13, 0, 2, 8, ch10data };
static const unsigned char ch11data[] = {
0x0,0x0,0x0,0x0,0x0,0xf0,0x10,0x10,0x10,0x10,0x10,0x10,0x10
};
static const GLUTBitmapChar ch11 = { 8, 13, 0, 2, 8, ch11data };
static const unsigned char ch12data[] = {
0x10,0x10,0x10,0x10,0x10,0xf0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch12 = { 8, 13, 0, 2, 8, ch12data };
static const unsigned char ch13data[] = {
0x10,0x10,0x10,0x10,0x10,0x1f,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch13 = { 8, 13, 0, 2, 8, ch13data };
static const unsigned char ch14data[] = {
0x0,0x0,0x0,0x0,0x0,0x1f,0x10,0x10,0x10,0x10,0x10,0x10,0x10
};
static const GLUTBitmapChar ch14 = { 8, 13, 0, 2, 8, ch14data };
static const unsigned char ch15data[] = {
0x10,0x10,0x10,0x10,0x10,0xff,0x10,0x10,0x10,0x10,0x10,0x10,0x10
};
static const GLUTBitmapChar ch15 = { 8, 13, 0, 2, 8, ch15data };
static const unsigned char ch16data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x0
};
static const GLUTBitmapChar ch16 = { 8, 13, 0, 2, 8, ch16data };
static const unsigned char ch17data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch17 = { 8, 13, 0, 2, 8, ch17data };
static const unsigned char ch18data[] = {
0x0,0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch18 = { 8, 13, 0, 2, 8, ch18data };
static const unsigned char ch19data[] = {
0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch19 = { 8, 13, 0, 2, 8, ch19data };
static const unsigned char ch20data[] = {
0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch20 = { 8, 13, 0, 2, 8, ch20data };
static const unsigned char ch21data[] = {
0x10,0x10,0x10,0x10,0x10,0x1f,0x10,0x10,0x10,0x10,0x10,0x10,0x10
};
static const GLUTBitmapChar ch21 = { 8, 13, 0, 2, 8, ch21data };
static const unsigned char ch22data[] = {
0x10,0x10,0x10,0x10,0x10,0xf0,0x10,0x10,0x10,0x10,0x10,0x10,0x10
};
static const GLUTBitmapChar ch22 = { 8, 13, 0, 2, 8, ch22data };
static const unsigned char ch23data[] = {
0x0,0x0,0x0,0x0,0x0,0xff,0x10,0x10,0x10,0x10,0x10,0x10,0x10
};
static const GLUTBitmapChar ch23 = { 8, 13, 0, 2, 8, ch23data };
static const unsigned char ch24data[] = {
0x10,0x10,0x10,0x10,0x10,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch24 = { 8, 13, 0, 2, 8, ch24data };
static const unsigned char ch25data[] = {
0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10
};
static const GLUTBitmapChar ch25 = { 8, 13, 0, 2, 8, ch25data };
static const unsigned char ch26data[] = {
0x0,0x0,0xfe,0x2,0x8,0x20,0x80,0x20,0x8,0x2,0x0,0x0,0x0
};
static const GLUTBitmapChar ch26 = { 8, 13, 0, 2, 8, ch26data };
static const unsigned char ch27data[] = {
0x0,0x0,0xfe,0x80,0x20,0x8,0x2,0x8,0x20,0x80,0x0,0x0,0x0
};
static const GLUTBitmapChar ch27 = { 8, 13, 0, 2, 8, ch27data };
static const unsigned char ch28data[] = {
0x0,0x0,0x44,0x24,0x24,0x24,0x24,0x7e,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch28 = { 8, 13, 0, 2, 8, ch28data };
static const unsigned char ch29data[] = {
0x0,0x0,0x80,0x40,0xfe,0x10,0xfe,0x4,0x2,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch29 = { 8, 13, 0, 2, 8, ch29data };
static const unsigned char ch30data[] = {
0x0,0x0,0xdc,0x62,0x20,0x20,0x20,0x70,0x20,0x22,0x1c,0x0,0x0
};
static const GLUTBitmapChar ch30 = { 8, 13, 0, 2, 8, ch30data };
static const unsigned char ch31data[] = {
0x0,0x0,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch31 = { 8, 13, 0, 2, 8, ch31data };
static const unsigned char ch32data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch32 = { 8, 13, 0, 2, 8, ch32data };
static const unsigned char ch33data[] = {
0x0,0x0,0x10,0x0,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x0,0x0
};
static const GLUTBitmapChar ch33 = { 8, 13, 0, 2, 8, ch33data };
static const unsigned char ch34data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x24,0x24,0x24,0x0,0x0
};
static const GLUTBitmapChar ch34 = { 8, 13, 0, 2, 8, ch34data };
static const unsigned char ch35data[] = {
0x0,0x0,0x0,0x24,0x24,0x7e,0x24,0x7e,0x24,0x24,0x0,0x0,0x0
};
static const GLUTBitmapChar ch35 = { 8, 13, 0, 2, 8, ch35data };
static const unsigned char ch36data[] = {
0x0,0x0,0x0,0x10,0x78,0x14,0x38,0x50,0x3c,0x10,0x0,0x0,0x0
};
static const GLUTBitmapChar ch36 = { 8, 13, 0, 2, 8, ch36data };
static const unsigned char ch37data[] = {
0x0,0x0,0x44,0x2a,0x24,0x10,0x8,0x8,0x24,0x52,0x22,0x0,0x0
};
static const GLUTBitmapChar ch37 = { 8, 13, 0, 2, 8, ch37data };
static const unsigned char ch38data[] = {
0x0,0x0,0x3a,0x44,0x4a,0x30,0x48,0x48,0x30,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch38 = { 8, 13, 0, 2, 8, ch38data };
static const unsigned char ch39data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x30,0x38,0x0,0x0
};
static const GLUTBitmapChar ch39 = { 8, 13, 0, 2, 8, ch39data };
static const unsigned char ch40data[] = {
0x0,0x0,0x4,0x8,0x8,0x10,0x10,0x10,0x8,0x8,0x4,0x0,0x0
};
static const GLUTBitmapChar ch40 = { 8, 13, 0, 2, 8, ch40data };
static const unsigned char ch41data[] = {
0x0,0x0,0x20,0x10,0x10,0x8,0x8,0x8,0x10,0x10,0x20,0x0,0x0
};
static const GLUTBitmapChar ch41 = { 8, 13, 0, 2, 8, ch41data };
static const unsigned char ch42data[] = {
0x0,0x0,0x0,0x0,0x24,0x18,0x7e,0x18,0x24,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch42 = { 8, 13, 0, 2, 8, ch42data };
static const unsigned char ch43data[] = {
0x0,0x0,0x0,0x0,0x10,0x10,0x7c,0x10,0x10,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch43 = { 8, 13, 0, 2, 8, ch43data };
static const unsigned char ch44data[] = {
0x0,0x40,0x30,0x38,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch44 = { 8, 13, 0, 2, 8, ch44data };
static const unsigned char ch45data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x7e,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch45 = { 8, 13, 0, 2, 8, ch45data };
static const unsigned char ch46data[] = {
0x0,0x10,0x38,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch46 = { 8, 13, 0, 2, 8, ch46data };
static const unsigned char ch47data[] = {
0x0,0x0,0x80,0x80,0x40,0x20,0x10,0x8,0x4,0x2,0x2,0x0,0x0
};
static const GLUTBitmapChar ch47 = { 8, 13, 0, 2, 8, ch47data };
static const unsigned char ch48data[] = {
0x0,0x0,0x18,0x24,0x42,0x42,0x42,0x42,0x42,0x24,0x18,0x0,0x0
};
static const GLUTBitmapChar ch48 = { 8, 13, 0, 2, 8, ch48data };
static const unsigned char ch49data[] = {
0x0,0x0,0x7c,0x10,0x10,0x10,0x10,0x10,0x50,0x30,0x10,0x0,0x0
};
static const GLUTBitmapChar ch49 = { 8, 13, 0, 2, 8, ch49data };
static const unsigned char ch50data[] = {
0x0,0x0,0x7e,0x40,0x20,0x18,0x4,0x2,0x42,0x42,0x3c,0x0,0x0
};
static const GLUTBitmapChar ch50 = { 8, 13, 0, 2, 8, ch50data };
static const unsigned char ch51data[] = {
0x0,0x0,0x3c,0x42,0x2,0x2,0x1c,0x8,0x4,0x2,0x7e,0x0,0x0
};
static const GLUTBitmapChar ch51 = { 8, 13, 0, 2, 8, ch51data };
static const unsigned char ch52data[] = {
0x0,0x0,0x4,0x4,0x7e,0x44,0x44,0x24,0x14,0xc,0x4,0x0,0x0
};
static const GLUTBitmapChar ch52 = { 8, 13, 0, 2, 8, ch52data };
static const unsigned char ch53data[] = {
0x0,0x0,0x3c,0x42,0x2,0x2,0x62,0x5c,0x40,0x40,0x7e,0x0,0x0
};
static const GLUTBitmapChar ch53 = { 8, 13, 0, 2, 8, ch53data };
static const unsigned char ch54data[] = {
0x0,0x0,0x3c,0x42,0x42,0x62,0x5c,0x40,0x40,0x20,0x1c,0x0,0x0
};
static const GLUTBitmapChar ch54 = { 8, 13, 0, 2, 8, ch54data };
static const unsigned char ch55data[] = {
0x0,0x0,0x20,0x20,0x10,0x10,0x8,0x8,0x4,0x2,0x7e,0x0,0x0
};
static const GLUTBitmapChar ch55 = { 8, 13, 0, 2, 8, ch55data };
static const unsigned char ch56data[] = {
0x0,0x0,0x3c,0x42,0x42,0x42,0x3c,0x42,0x42,0x42,0x3c,0x0,0x0
};
static const GLUTBitmapChar ch56 = { 8, 13, 0, 2, 8, ch56data };
static const unsigned char ch57data[] = {
0x0,0x0,0x38,0x4,0x2,0x2,0x3a,0x46,0x42,0x42,0x3c,0x0,0x0
};
static const GLUTBitmapChar ch57 = { 8, 13, 0, 2, 8, ch57data };
static const unsigned char ch58data[] = {
0x0,0x10,0x38,0x10,0x0,0x0,0x10,0x38,0x10,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch58 = { 8, 13, 0, 2, 8, ch58data };
static const unsigned char ch59data[] = {
0x0,0x40,0x30,0x38,0x0,0x0,0x10,0x38,0x10,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch59 = { 8, 13, 0, 2, 8, ch59data };
static const unsigned char ch60data[] = {
0x0,0x0,0x2,0x4,0x8,0x10,0x20,0x10,0x8,0x4,0x2,0x0,0x0
};
static const GLUTBitmapChar ch60 = { 8, 13, 0, 2, 8, ch60data };
static const unsigned char ch61data[] = {
0x0,0x0,0x0,0x0,0x7e,0x0,0x0,0x7e,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch61 = { 8, 13, 0, 2, 8, ch61data };
static const unsigned char ch62data[] = {
0x0,0x0,0x40,0x20,0x10,0x8,0x4,0x8,0x10,0x20,0x40,0x0,0x0
};
static const GLUTBitmapChar ch62 = { 8, 13, 0, 2, 8, ch62data };
static const unsigned char ch63data[] = {
0x0,0x0,0x8,0x0,0x8,0x8,0x4,0x2,0x42,0x42,0x3c,0x0,0x0
};
static const GLUTBitmapChar ch63 = { 8, 13, 0, 2, 8, ch63data };
static const unsigned char ch64data[] = {
0x0,0x0,0x3c,0x40,0x4a,0x56,0x52,0x4e,0x42,0x42,0x3c,0x0,0x0
};
static const GLUTBitmapChar ch64 = { 8, 13, 0, 2, 8, ch64data };
static const unsigned char ch65data[] = {
0x0,0x0,0x42,0x42,0x42,0x7e,0x42,0x42,0x42,0x24,0x18,0x0,0x0
};
static const GLUTBitmapChar ch65 = { 8, 13, 0, 2, 8, ch65data };
static const unsigned char ch66data[] = {
0x0,0x0,0xfc,0x42,0x42,0x42,0x7c,0x42,0x42,0x42,0xfc,0x0,0x0
};
static const GLUTBitmapChar ch66 = { 8, 13, 0, 2, 8, ch66data };
static const unsigned char ch67data[] = {
0x0,0x0,0x3c,0x42,0x40,0x40,0x40,0x40,0x40,0x42,0x3c,0x0,0x0
};
static const GLUTBitmapChar ch67 = { 8, 13, 0, 2, 8, ch67data };
static const unsigned char ch68data[] = {
0x0,0x0,0xfc,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0xfc,0x0,0x0
};
static const GLUTBitmapChar ch68 = { 8, 13, 0, 2, 8, ch68data };
static const unsigned char ch69data[] = {
0x0,0x0,0x7e,0x40,0x40,0x40,0x78,0x40,0x40,0x40,0x7e,0x0,0x0
};
static const GLUTBitmapChar ch69 = { 8, 13, 0, 2, 8, ch69data };
static const unsigned char ch70data[] = {
0x0,0x0,0x40,0x40,0x40,0x40,0x78,0x40,0x40,0x40,0x7e,0x0,0x0
};
static const GLUTBitmapChar ch70 = { 8, 13, 0, 2, 8, ch70data };
static const unsigned char ch71data[] = {
0x0,0x0,0x3a,0x46,0x42,0x4e,0x40,0x40,0x40,0x42,0x3c,0x0,0x0
};
static const GLUTBitmapChar ch71 = { 8, 13, 0, 2, 8, ch71data };
static const unsigned char ch72data[] = {
0x0,0x0,0x42,0x42,0x42,0x42,0x7e,0x42,0x42,0x42,0x42,0x0,0x0
};
static const GLUTBitmapChar ch72 = { 8, 13, 0, 2, 8, ch72data };
static const unsigned char ch73data[] = {
0x0,0x0,0x7c,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x7c,0x0,0x0
};
static const GLUTBitmapChar ch73 = { 8, 13, 0, 2, 8, ch73data };
static const unsigned char ch74data[] = {
0x0,0x0,0x38,0x44,0x4,0x4,0x4,0x4,0x4,0x4,0x1e,0x0,0x0
};
static const GLUTBitmapChar ch74 = { 8, 13, 0, 2, 8, ch74data };
static const unsigned char ch75data[] = {
0x0,0x0,0x42,0x44,0x48,0x50,0x60,0x50,0x48,0x44,0x42,0x0,0x0
};
static const GLUTBitmapChar ch75 = { 8, 13, 0, 2, 8, ch75data };
static const unsigned char ch76data[] = {
0x0,0x0,0x7e,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x0,0x0
};
static const GLUTBitmapChar ch76 = { 8, 13, 0, 2, 8, ch76data };
static const unsigned char ch77data[] = {
0x0,0x0,0x82,0x82,0x82,0x92,0x92,0xaa,0xc6,0x82,0x82,0x0,0x0
};
static const GLUTBitmapChar ch77 = { 8, 13, 0, 2, 8, ch77data };
static const unsigned char ch78data[] = {
0x0,0x0,0x42,0x42,0x42,0x46,0x4a,0x52,0x62,0x42,0x42,0x0,0x0
};
static const GLUTBitmapChar ch78 = { 8, 13, 0, 2, 8, ch78data };
static const unsigned char ch79data[] = {
0x0,0x0,0x3c,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x3c,0x0,0x0
};
static const GLUTBitmapChar ch79 = { 8, 13, 0, 2, 8, ch79data };
static const unsigned char ch80data[] = {
0x0,0x0,0x40,0x40,0x40,0x40,0x7c,0x42,0x42,0x42,0x7c,0x0,0x0
};
static const GLUTBitmapChar ch80 = { 8, 13, 0, 2, 8, ch80data };
static const unsigned char ch81data[] = {
0x0,0x2,0x3c,0x4a,0x52,0x42,0x42,0x42,0x42,0x42,0x3c,0x0,0x0
};
static const GLUTBitmapChar ch81 = { 8, 13, 0, 2, 8, ch81data };
static const unsigned char ch82data[] = {
0x0,0x0,0x42,0x44,0x48,0x50,0x7c,0x42,0x42,0x42,0x7c,0x0,0x0
};
static const GLUTBitmapChar ch82 = { 8, 13, 0, 2, 8, ch82data };
static const unsigned char ch83data[] = {
0x0,0x0,0x3c,0x42,0x2,0x2,0x3c,0x40,0x40,0x42,0x3c,0x0,0x0
};
static const GLUTBitmapChar ch83 = { 8, 13, 0, 2, 8, ch83data };
static const unsigned char ch84data[] = {
0x0,0x0,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0xfe,0x0,0x0
};
static const GLUTBitmapChar ch84 = { 8, 13, 0, 2, 8, ch84data };
static const unsigned char ch85data[] = {
0x0,0x0,0x3c,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x0,0x0
};
static const GLUTBitmapChar ch85 = { 8, 13, 0, 2, 8, ch85data };
static const unsigned char ch86data[] = {
0x0,0x0,0x10,0x28,0x28,0x28,0x44,0x44,0x44,0x82,0x82,0x0,0x0
};
static const GLUTBitmapChar ch86 = { 8, 13, 0, 2, 8, ch86data };
static const unsigned char ch87data[] = {
0x0,0x0,0x44,0xaa,0x92,0x92,0x92,0x82,0x82,0x82,0x82,0x0,0x0
};
static const GLUTBitmapChar ch87 = { 8, 13, 0, 2, 8, ch87data };
static const unsigned char ch88data[] = {
0x0,0x0,0x82,0x82,0x44,0x28,0x10,0x28,0x44,0x82,0x82,0x0,0x0
};
static const GLUTBitmapChar ch88 = { 8, 13, 0, 2, 8, ch88data };
static const unsigned char ch89data[] = {
0x0,0x0,0x10,0x10,0x10,0x10,0x10,0x28,0x44,0x82,0x82,0x0,0x0
};
static const GLUTBitmapChar ch89 = { 8, 13, 0, 2, 8, ch89data };
static const unsigned char ch90data[] = {
0x0,0x0,0x7e,0x40,0x40,0x20,0x10,0x8,0x4,0x2,0x7e,0x0,0x0
};
static const GLUTBitmapChar ch90 = { 8, 13, 0, 2, 8, ch90data };
static const unsigned char ch91data[] = {
0x0,0x0,0x3c,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x0,0x0
};
static const GLUTBitmapChar ch91 = { 8, 13, 0, 2, 8, ch91data };
static const unsigned char ch92data[] = {
0x0,0x0,0x2,0x2,0x4,0x8,0x10,0x20,0x40,0x80,0x80,0x0,0x0
};
static const GLUTBitmapChar ch92 = { 8, 13, 0, 2, 8, ch92data };
static const unsigned char ch93data[] = {
0x0,0x0,0x78,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x78,0x0,0x0
};
static const GLUTBitmapChar ch93 = { 8, 13, 0, 2, 8, ch93data };
static const unsigned char ch94data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x44,0x28,0x10,0x0,0x0
};
static const GLUTBitmapChar ch94 = { 8, 13, 0, 2, 8, ch94data };
static const unsigned char ch95data[] = {
0x0,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch95 = { 8, 13, 0, 2, 8, ch95data };
static const unsigned char ch96data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x18,0x38,0x0,0x0
};
static const GLUTBitmapChar ch96 = { 8, 13, 0, 2, 8, ch96data };
static const unsigned char ch97data[] = {
0x0,0x0,0x3a,0x46,0x42,0x3e,0x2,0x3c,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch97 = { 8, 13, 0, 2, 8, ch97data };
static const unsigned char ch98data[] = {
0x0,0x0,0x5c,0x62,0x42,0x42,0x62,0x5c,0x40,0x40,0x40,0x0,0x0
};
static const GLUTBitmapChar ch98 = { 8, 13, 0, 2, 8, ch98data };
static const unsigned char ch99data[] = {
0x0,0x0,0x3c,0x42,0x40,0x40,0x42,0x3c,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch99 = { 8, 13, 0, 2, 8, ch99data };
static const unsigned char ch100data[] = {
0x0,0x0,0x3a,0x46,0x42,0x42,0x46,0x3a,0x2,0x2,0x2,0x0,0x0
};
static const GLUTBitmapChar ch100 = { 8, 13, 0, 2, 8, ch100data };
static const unsigned char ch101data[] = {
0x0,0x0,0x3c,0x42,0x40,0x7e,0x42,0x3c,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch101 = { 8, 13, 0, 2, 8, ch101data };
static const unsigned char ch102data[] = {
0x0,0x0,0x20,0x20,0x20,0x20,0x7c,0x20,0x20,0x22,0x1c,0x0,0x0
};
static const GLUTBitmapChar ch102 = { 8, 13, 0, 2, 8, ch102data };
static const unsigned char ch103data[] = {
0x3c,0x42,0x3c,0x40,0x38,0x44,0x44,0x3a,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch103 = { 8, 13, 0, 2, 8, ch103data };
static const unsigned char ch104data[] = {
0x0,0x0,0x42,0x42,0x42,0x42,0x62,0x5c,0x40,0x40,0x40,0x0,0x0
};
static const GLUTBitmapChar ch104 = { 8, 13, 0, 2, 8, ch104data };
static const unsigned char ch105data[] = {
0x0,0x0,0x7c,0x10,0x10,0x10,0x10,0x30,0x0,0x10,0x0,0x0,0x0
};
static const GLUTBitmapChar ch105 = { 8, 13, 0, 2, 8, ch105data };
static const unsigned char ch106data[] = {
0x38,0x44,0x44,0x4,0x4,0x4,0x4,0xc,0x0,0x4,0x0,0x0,0x0
};
static const GLUTBitmapChar ch106 = { 8, 13, 0, 2, 8, ch106data };
static const unsigned char ch107data[] = {
0x0,0x0,0x42,0x44,0x48,0x70,0x48,0x44,0x40,0x40,0x40,0x0,0x0
};
static const GLUTBitmapChar ch107 = { 8, 13, 0, 2, 8, ch107data };
static const unsigned char ch108data[] = {
0x0,0x0,0x7c,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x30,0x0,0x0
};
static const GLUTBitmapChar ch108 = { 8, 13, 0, 2, 8, ch108data };
static const unsigned char ch109data[] = {
0x0,0x0,0x82,0x92,0x92,0x92,0x92,0xec,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch109 = { 8, 13, 0, 2, 8, ch109data };
static const unsigned char ch110data[] = {
0x0,0x0,0x42,0x42,0x42,0x42,0x62,0x5c,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch110 = { 8, 13, 0, 2, 8, ch110data };
static const unsigned char ch111data[] = {
0x0,0x0,0x3c,0x42,0x42,0x42,0x42,0x3c,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch111 = { 8, 13, 0, 2, 8, ch111data };
static const unsigned char ch112data[] = {
0x40,0x40,0x40,0x5c,0x62,0x42,0x62,0x5c,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch112 = { 8, 13, 0, 2, 8, ch112data };
static const unsigned char ch113data[] = {
0x2,0x2,0x2,0x3a,0x46,0x42,0x46,0x3a,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch113 = { 8, 13, 0, 2, 8, ch113data };
static const unsigned char ch114data[] = {
0x0,0x0,0x20,0x20,0x20,0x20,0x22,0x5c,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch114 = { 8, 13, 0, 2, 8, ch114data };
static const unsigned char ch115data[] = {
0x0,0x0,0x3c,0x42,0xc,0x30,0x42,0x3c,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch115 = { 8, 13, 0, 2, 8, ch115data };
static const unsigned char ch116data[] = {
0x0,0x0,0x1c,0x22,0x20,0x20,0x20,0x7c,0x20,0x20,0x0,0x0,0x0
};
static const GLUTBitmapChar ch116 = { 8, 13, 0, 2, 8, ch116data };
static const unsigned char ch117data[] = {
0x0,0x0,0x3a,0x44,0x44,0x44,0x44,0x44,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch117 = { 8, 13, 0, 2, 8, ch117data };
static const unsigned char ch118data[] = {
0x0,0x0,0x10,0x28,0x28,0x44,0x44,0x44,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch118 = { 8, 13, 0, 2, 8, ch118data };
static const unsigned char ch119data[] = {
0x0,0x0,0x44,0xaa,0x92,0x92,0x82,0x82,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch119 = { 8, 13, 0, 2, 8, ch119data };
static const unsigned char ch120data[] = {
0x0,0x0,0x42,0x24,0x18,0x18,0x24,0x42,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch120 = { 8, 13, 0, 2, 8, ch120data };
static const unsigned char ch121data[] = {
0x3c,0x42,0x2,0x3a,0x46,0x42,0x42,0x42,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch121 = { 8, 13, 0, 2, 8, ch121data };
static const unsigned char ch122data[] = {
0x0,0x0,0x7e,0x20,0x10,0x8,0x4,0x7e,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch122 = { 8, 13, 0, 2, 8, ch122data };
static const unsigned char ch123data[] = {
0x0,0x0,0xe,0x10,0x10,0x8,0x30,0x8,0x10,0x10,0xe,0x0,0x0
};
static const GLUTBitmapChar ch123 = { 8, 13, 0, 2, 8, ch123data };
static const unsigned char ch124data[] = {
0x0,0x0,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x0,0x0
};
static const GLUTBitmapChar ch124 = { 8, 13, 0, 2, 8, ch124data };
static const unsigned char ch125data[] = {
0x0,0x0,0x70,0x8,0x8,0x10,0xc,0x10,0x8,0x8,0x70,0x0,0x0
};
static const GLUTBitmapChar ch125 = { 8, 13, 0, 2, 8, ch125data };
static const unsigned char ch126data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x48,0x54,0x24,0x0,0x0
};
static const GLUTBitmapChar ch126 = { 8, 13, 0, 2, 8, ch126data };
static const unsigned char ch127data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch127 = { 8, 13, 0, 2, 8, ch127data };
static const unsigned char ch160data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch160 = { 8, 13, 0, 2, 8, ch160data };
static const unsigned char ch161data[] = {
0x0,0x0,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x0,0x10,0x0,0x0
};
static const GLUTBitmapChar ch161 = { 8, 13, 0, 2, 8, ch161data };
static const unsigned char ch162data[] = {
0x0,0x0,0x0,0x10,0x38,0x54,0x50,0x50,0x54,0x38,0x10,0x0,0x0
};
static const GLUTBitmapChar ch162 = { 8, 13, 0, 2, 8, ch162data };
static const unsigned char ch163data[] = {
0x0,0x0,0xdc,0x62,0x20,0x20,0x20,0x70,0x20,0x22,0x1c,0x0,0x0
};
static const GLUTBitmapChar ch163 = { 8, 13, 0, 2, 8, ch163data };
static const unsigned char ch164data[] = {
0x0,0x0,0x0,0x42,0x3c,0x24,0x24,0x3c,0x42,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch164 = { 8, 13, 0, 2, 8, ch164data };
static const unsigned char ch165data[] = {
0x0,0x0,0x10,0x10,0x7c,0x10,0x7c,0x28,0x44,0x82,0x82,0x0,0x0
};
static const GLUTBitmapChar ch165 = { 8, 13, 0, 2, 8, ch165data };
static const unsigned char ch166data[] = {
0x0,0x0,0x10,0x10,0x10,0x10,0x0,0x10,0x10,0x10,0x10,0x0,0x0
};
static const GLUTBitmapChar ch166 = { 8, 13, 0, 2, 8, ch166data };
static const unsigned char ch167data[] = {
0x0,0x0,0x18,0x24,0x4,0x18,0x24,0x24,0x18,0x20,0x24,0x18,0x0
};
static const GLUTBitmapChar ch167 = { 8, 13, 0, 2, 8, ch167data };
static const unsigned char ch168data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6c,0x0,0x0
};
static const GLUTBitmapChar ch168 = { 8, 13, 0, 2, 8, ch168data };
static const unsigned char ch169data[] = {
0x0,0x0,0x0,0x38,0x44,0x92,0xaa,0xa2,0xaa,0x92,0x44,0x38,0x0
};
static const GLUTBitmapChar ch169 = { 8, 13, 0, 2, 8, ch169data };
static const unsigned char ch170data[] = {
0x0,0x0,0x0,0x0,0x7c,0x0,0x3c,0x44,0x3c,0x4,0x38,0x0,0x0
};
static const GLUTBitmapChar ch170 = { 8, 13, 0, 2, 8, ch170data };
static const unsigned char ch171data[] = {
0x0,0x0,0x0,0x12,0x24,0x48,0x90,0x48,0x24,0x12,0x0,0x0,0x0
};
static const GLUTBitmapChar ch171 = { 8, 13, 0, 2, 8, ch171data };
static const unsigned char ch172data[] = {
0x0,0x0,0x0,0x2,0x2,0x2,0x7e,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch172 = { 8, 13, 0, 2, 8, ch172data };
static const unsigned char ch173data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x7e,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch173 = { 8, 13, 0, 2, 8, ch173data };
static const unsigned char ch174data[] = {
0x0,0x0,0x0,0x38,0x44,0xaa,0xb2,0xaa,0xaa,0x92,0x44,0x38,0x0
};
static const GLUTBitmapChar ch174 = { 8, 13, 0, 2, 8, ch174data };
static const unsigned char ch175data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7e,0x0,0x0
};
static const GLUTBitmapChar ch175 = { 8, 13, 0, 2, 8, ch175data };
static const unsigned char ch176data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x18,0x24,0x24,0x18,0x0,0x0
};
static const GLUTBitmapChar ch176 = { 8, 13, 0, 2, 8, ch176data };
static const unsigned char ch177data[] = {
0x0,0x0,0x0,0x7c,0x0,0x10,0x10,0x7c,0x10,0x10,0x0,0x0,0x0
};
static const GLUTBitmapChar ch177 = { 8, 13, 0, 2, 8, ch177data };
static const unsigned char ch178data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x78,0x40,0x30,0x8,0x48,0x30,0x0
};
static const GLUTBitmapChar ch178 = { 8, 13, 0, 2, 8, ch178data };
static const unsigned char ch179data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x30,0x48,0x8,0x10,0x48,0x30,0x0
};
static const GLUTBitmapChar ch179 = { 8, 13, 0, 2, 8, ch179data };
static const unsigned char ch180data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10,0x8,0x0
};
static const GLUTBitmapChar ch180 = { 8, 13, 0, 2, 8, ch180data };
static const unsigned char ch181data[] = {
0x0,0x40,0x5a,0x66,0x42,0x42,0x42,0x42,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch181 = { 8, 13, 0, 2, 8, ch181data };
static const unsigned char ch182data[] = {
0x0,0x0,0x14,0x14,0x14,0x14,0x34,0x74,0x74,0x74,0x3e,0x0,0x0
};
static const GLUTBitmapChar ch182 = { 8, 13, 0, 2, 8, ch182data };
static const unsigned char ch183data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x18,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch183 = { 8, 13, 0, 2, 8, ch183data };
static const unsigned char ch184data[] = {
0x18,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch184 = { 8, 13, 0, 2, 8, ch184data };
static const unsigned char ch185data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x70,0x20,0x20,0x20,0x60,0x20,0x0
};
static const GLUTBitmapChar ch185 = { 8, 13, 0, 2, 8, ch185data };
static const unsigned char ch186data[] = {
0x0,0x0,0x0,0x0,0x0,0x78,0x0,0x30,0x48,0x48,0x30,0x0,0x0
};
static const GLUTBitmapChar ch186 = { 8, 13, 0, 2, 8, ch186data };
static const unsigned char ch187data[] = {
0x0,0x0,0x0,0x90,0x48,0x24,0x12,0x24,0x48,0x90,0x0,0x0,0x0
};
static const GLUTBitmapChar ch187 = { 8, 13, 0, 2, 8, ch187data };
static const unsigned char ch188data[] = {
0x0,0x0,0x6,0x1a,0x12,0xa,0xe6,0x42,0x40,0x40,0xc0,0x40,0x0
};
static const GLUTBitmapChar ch188 = { 8, 13, 0, 2, 8, ch188data };
static const unsigned char ch189data[] = {
0x0,0x0,0x1e,0x10,0xc,0x2,0xf2,0x4c,0x40,0x40,0xc0,0x40,0x0
};
static const GLUTBitmapChar ch189 = { 8, 13, 0, 2, 8, ch189data };
static const unsigned char ch190data[] = {
0x0,0x0,0x6,0x1a,0x12,0xa,0x66,0x92,0x10,0x20,0x90,0x60,0x0
};
static const GLUTBitmapChar ch190 = { 8, 13, 0, 2, 8, ch190data };
static const unsigned char ch191data[] = {
0x0,0x0,0x3c,0x42,0x42,0x40,0x20,0x10,0x10,0x0,0x10,0x0,0x0
};
static const GLUTBitmapChar ch191 = { 8, 13, 0, 2, 8, ch191data };
static const unsigned char ch192data[] = {
0x0,0x0,0x42,0x42,0x7e,0x42,0x42,0x24,0x18,0x0,0x8,0x10,0x0
};
static const GLUTBitmapChar ch192 = { 8, 13, 0, 2, 8, ch192data };
static const unsigned char ch193data[] = {
0x0,0x0,0x42,0x42,0x7e,0x42,0x42,0x24,0x18,0x0,0x10,0x8,0x0
};
static const GLUTBitmapChar ch193 = { 8, 13, 0, 2, 8, ch193data };
static const unsigned char ch194data[] = {
0x0,0x0,0x42,0x42,0x7e,0x42,0x42,0x24,0x18,0x0,0x24,0x18,0x0
};
static const GLUTBitmapChar ch194 = { 8, 13, 0, 2, 8, ch194data };
static const unsigned char ch195data[] = {
0x0,0x0,0x42,0x42,0x7e,0x42,0x42,0x24,0x18,0x0,0x28,0x14,0x0
};
static const GLUTBitmapChar ch195 = { 8, 13, 0, 2, 8, ch195data };
static const unsigned char ch196data[] = {
0x0,0x0,0x42,0x42,0x7e,0x42,0x42,0x24,0x18,0x0,0x24,0x24,0x0
};
static const GLUTBitmapChar ch196 = { 8, 13, 0, 2, 8, ch196data };
static const unsigned char ch197data[] = {
0x0,0x0,0x42,0x42,0x7e,0x42,0x42,0x24,0x18,0x18,0x24,0x18,0x0
};
static const GLUTBitmapChar ch197 = { 8, 13, 0, 2, 8, ch197data };
static const unsigned char ch198data[] = {
0x0,0x0,0x9e,0x90,0x90,0xf0,0x9c,0x90,0x90,0x90,0x6e,0x0,0x0
};
static const GLUTBitmapChar ch198 = { 8, 13, 0, 2, 8, ch198data };
static const unsigned char ch199data[] = {
0x10,0x8,0x3c,0x42,0x40,0x40,0x40,0x40,0x40,0x42,0x3c,0x0,0x0
};
static const GLUTBitmapChar ch199 = { 8, 13, 0, 2, 8, ch199data };
static const unsigned char ch200data[] = {
0x0,0x0,0x7e,0x40,0x40,0x78,0x40,0x40,0x7e,0x0,0x8,0x10,0x0
};
static const GLUTBitmapChar ch200 = { 8, 13, 0, 2, 8, ch200data };
static const unsigned char ch201data[] = {
0x0,0x0,0x7e,0x40,0x40,0x78,0x40,0x40,0x7e,0x0,0x10,0x8,0x0
};
static const GLUTBitmapChar ch201 = { 8, 13, 0, 2, 8, ch201data };
static const unsigned char ch202data[] = {
0x0,0x0,0x7e,0x40,0x40,0x78,0x40,0x40,0x7e,0x0,0x24,0x18,0x0
};
static const GLUTBitmapChar ch202 = { 8, 13, 0, 2, 8, ch202data };
static const unsigned char ch203data[] = {
0x0,0x0,0x7e,0x40,0x40,0x78,0x40,0x40,0x7e,0x0,0x24,0x24,0x0
};
static const GLUTBitmapChar ch203 = { 8, 13, 0, 2, 8, ch203data };
static const unsigned char ch204data[] = {
0x0,0x0,0x7c,0x10,0x10,0x10,0x10,0x10,0x7c,0x0,0x8,0x10,0x0
};
static const GLUTBitmapChar ch204 = { 8, 13, 0, 2, 8, ch204data };
static const unsigned char ch205data[] = {
0x0,0x0,0x7c,0x10,0x10,0x10,0x10,0x10,0x7c,0x0,0x10,0x8,0x0
};
static const GLUTBitmapChar ch205 = { 8, 13, 0, 2, 8, ch205data };
static const unsigned char ch206data[] = {
0x0,0x0,0x7c,0x10,0x10,0x10,0x10,0x10,0x7c,0x0,0x24,0x18,0x0
};
static const GLUTBitmapChar ch206 = { 8, 13, 0, 2, 8, ch206data };
static const unsigned char ch207data[] = {
0x0,0x0,0x7c,0x10,0x10,0x10,0x10,0x10,0x7c,0x0,0x28,0x28,0x0
};
static const GLUTBitmapChar ch207 = { 8, 13, 0, 2, 8, ch207data };
static const unsigned char ch208data[] = {
0x0,0x0,0xfc,0x42,0x42,0x42,0xe2,0x42,0x42,0x42,0xfc,0x0,0x0
};
static const GLUTBitmapChar ch208 = { 8, 13, 0, 2, 8, ch208data };
static const unsigned char ch209data[] = {
0x0,0x0,0x82,0x86,0x8a,0x92,0xa2,0xc2,0x82,0x0,0x28,0x14,0x0
};
static const GLUTBitmapChar ch209 = { 8, 13, 0, 2, 8, ch209data };
static const unsigned char ch210data[] = {
0x0,0x0,0x7c,0x82,0x82,0x82,0x82,0x82,0x7c,0x0,0x8,0x10,0x0
};
static const GLUTBitmapChar ch210 = { 8, 13, 0, 2, 8, ch210data };
static const unsigned char ch211data[] = {
0x0,0x0,0x7c,0x82,0x82,0x82,0x82,0x82,0x7c,0x0,0x10,0x8,0x0
};
static const GLUTBitmapChar ch211 = { 8, 13, 0, 2, 8, ch211data };
static const unsigned char ch212data[] = {
0x0,0x0,0x7c,0x82,0x82,0x82,0x82,0x82,0x7c,0x0,0x24,0x18,0x0
};
static const GLUTBitmapChar ch212 = { 8, 13, 0, 2, 8, ch212data };
static const unsigned char ch213data[] = {
0x0,0x0,0x7c,0x82,0x82,0x82,0x82,0x82,0x7c,0x0,0x28,0x14,0x0
};
static const GLUTBitmapChar ch213 = { 8, 13, 0, 2, 8, ch213data };
static const unsigned char ch214data[] = {
0x0,0x0,0x7c,0x82,0x82,0x82,0x82,0x82,0x7c,0x0,0x28,0x28,0x0
};
static const GLUTBitmapChar ch214 = { 8, 13, 0, 2, 8, ch214data };
static const unsigned char ch215data[] = {
0x0,0x0,0x0,0x42,0x24,0x18,0x18,0x24,0x42,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch215 = { 8, 13, 0, 2, 8, ch215data };
static const unsigned char ch216data[] = {
0x0,0x40,0x3c,0x62,0x52,0x52,0x52,0x4a,0x4a,0x46,0x3c,0x2,0x0
};
static const GLUTBitmapChar ch216 = { 8, 13, 0, 2, 8, ch216data };
static const unsigned char ch217data[] = {
0x0,0x0,0x3c,0x42,0x42,0x42,0x42,0x42,0x42,0x0,0x8,0x10,0x0
};
static const GLUTBitmapChar ch217 = { 8, 13, 0, 2, 8, ch217data };
static const unsigned char ch218data[] = {
0x0,0x0,0x3c,0x42,0x42,0x42,0x42,0x42,0x42,0x0,0x10,0x8,0x0
};
static const GLUTBitmapChar ch218 = { 8, 13, 0, 2, 8, ch218data };
static const unsigned char ch219data[] = {
0x0,0x0,0x3c,0x42,0x42,0x42,0x42,0x42,0x42,0x0,0x24,0x18,0x0
};
static const GLUTBitmapChar ch219 = { 8, 13, 0, 2, 8, ch219data };
static const unsigned char ch220data[] = {
0x0,0x0,0x3c,0x42,0x42,0x42,0x42,0x42,0x42,0x0,0x24,0x24,0x0
};
static const GLUTBitmapChar ch220 = { 8, 13, 0, 2, 8, ch220data };
static const unsigned char ch221data[] = {
0x0,0x0,0x10,0x10,0x10,0x10,0x28,0x44,0x44,0x0,0x10,0x8,0x0
};
static const GLUTBitmapChar ch221 = { 8, 13, 0, 2, 8, ch221data };
static const unsigned char ch222data[] = {
0x0,0x0,0x40,0x40,0x40,0x7c,0x42,0x42,0x42,0x7c,0x40,0x0,0x0
};
static const GLUTBitmapChar ch222 = { 8, 13, 0, 2, 8, ch222data };
static const unsigned char ch223data[] = {
0x0,0x40,0x5c,0x62,0x42,0x42,0x7c,0x42,0x42,0x3c,0x0,0x0,0x0
};
static const GLUTBitmapChar ch223 = { 8, 13, 0, 2, 8, ch223data };
static const unsigned char ch224data[] = {
0x0,0x0,0x3a,0x46,0x42,0x3e,0x2,0x3c,0x0,0x0,0x8,0x10,0x0
};
static const GLUTBitmapChar ch224 = { 8, 13, 0, 2, 8, ch224data };
static const unsigned char ch225data[] = {
0x0,0x0,0x3a,0x46,0x42,0x3e,0x2,0x3c,0x0,0x0,0x10,0x8,0x0
};
static const GLUTBitmapChar ch225 = { 8, 13, 0, 2, 8, ch225data };
static const unsigned char ch226data[] = {
0x0,0x0,0x3a,0x46,0x42,0x3e,0x2,0x3c,0x0,0x0,0x24,0x18,0x0
};
static const GLUTBitmapChar ch226 = { 8, 13, 0, 2, 8, ch226data };
static const unsigned char ch227data[] = {
0x0,0x0,0x3a,0x46,0x42,0x3e,0x2,0x3c,0x0,0x0,0x28,0x14,0x0
};
static const GLUTBitmapChar ch227 = { 8, 13, 0, 2, 8, ch227data };
static const unsigned char ch228data[] = {
0x0,0x0,0x3a,0x46,0x42,0x3e,0x2,0x3c,0x0,0x0,0x24,0x24,0x0
};
static const GLUTBitmapChar ch228 = { 8, 13, 0, 2, 8, ch228data };
static const unsigned char ch229data[] = {
0x0,0x0,0x3a,0x46,0x42,0x3e,0x2,0x3c,0x0,0x18,0x24,0x18,0x0
};
static const GLUTBitmapChar ch229 = { 8, 13, 0, 2, 8, ch229data };
static const unsigned char ch230data[] = {
0x0,0x0,0x6c,0x92,0x90,0x7c,0x12,0x6c,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch230 = { 8, 13, 0, 2, 8, ch230data };
static const unsigned char ch231data[] = {
0x10,0x8,0x3c,0x42,0x40,0x40,0x42,0x3c,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch231 = { 8, 13, 0, 2, 8, ch231data };
static const unsigned char ch232data[] = {
0x0,0x0,0x3c,0x42,0x40,0x7e,0x42,0x3c,0x0,0x0,0x8,0x10,0x0
};
static const GLUTBitmapChar ch232 = { 8, 13, 0, 2, 8, ch232data };
static const unsigned char ch233data[] = {
0x0,0x0,0x3c,0x42,0x40,0x7e,0x42,0x3c,0x0,0x0,0x10,0x8,0x0
};
static const GLUTBitmapChar ch233 = { 8, 13, 0, 2, 8, ch233data };
static const unsigned char ch234data[] = {
0x0,0x0,0x3c,0x42,0x40,0x7e,0x42,0x3c,0x0,0x0,0x24,0x18,0x0
};
static const GLUTBitmapChar ch234 = { 8, 13, 0, 2, 8, ch234data };
static const unsigned char ch235data[] = {
0x0,0x0,0x3c,0x42,0x40,0x7e,0x42,0x3c,0x0,0x0,0x24,0x24,0x0
};
static const GLUTBitmapChar ch235 = { 8, 13, 0, 2, 8, ch235data };
static const unsigned char ch236data[] = {
0x0,0x0,0x7c,0x10,0x10,0x10,0x10,0x30,0x0,0x0,0x10,0x20,0x0
};
static const GLUTBitmapChar ch236 = { 8, 13, 0, 2, 8, ch236data };
static const unsigned char ch237data[] = {
0x0,0x0,0x7c,0x10,0x10,0x10,0x10,0x30,0x0,0x0,0x20,0x10,0x0
};
static const GLUTBitmapChar ch237 = { 8, 13, 0, 2, 8, ch237data };
static const unsigned char ch238data[] = {
0x0,0x0,0x7c,0x10,0x10,0x10,0x10,0x30,0x0,0x0,0x48,0x30,0x0
};
static const GLUTBitmapChar ch238 = { 8, 13, 0, 2, 8, ch238data };
static const unsigned char ch239data[] = {
0x0,0x0,0x7c,0x10,0x10,0x10,0x10,0x30,0x0,0x0,0x28,0x28,0x0
};
static const GLUTBitmapChar ch239 = { 8, 13, 0, 2, 8, ch239data };
static const unsigned char ch240data[] = {
0x0,0x0,0x3c,0x42,0x42,0x42,0x42,0x3c,0x4,0x28,0x18,0x24,0x0
};
static const GLUTBitmapChar ch240 = { 8, 13, 0, 2, 8, ch240data };
static const unsigned char ch241data[] = {
0x0,0x0,0x42,0x42,0x42,0x42,0x62,0x5c,0x0,0x0,0x28,0x14,0x0
};
static const GLUTBitmapChar ch241 = { 8, 13, 0, 2, 8, ch241data };
static const unsigned char ch242data[] = {
0x0,0x0,0x3c,0x42,0x42,0x42,0x42,0x3c,0x0,0x0,0x8,0x10,0x0
};
static const GLUTBitmapChar ch242 = { 8, 13, 0, 2, 8, ch242data };
static const unsigned char ch243data[] = {
0x0,0x0,0x3c,0x42,0x42,0x42,0x42,0x3c,0x0,0x0,0x10,0x8,0x0
};
static const GLUTBitmapChar ch243 = { 8, 13, 0, 2, 8, ch243data };
static const unsigned char ch244data[] = {
0x0,0x0,0x3c,0x42,0x42,0x42,0x42,0x3c,0x0,0x0,0x24,0x18,0x0
};
static const GLUTBitmapChar ch244 = { 8, 13, 0, 2, 8, ch244data };
static const unsigned char ch245data[] = {
0x0,0x0,0x3c,0x42,0x42,0x42,0x42,0x3c,0x0,0x0,0x28,0x14,0x0
};
static const GLUTBitmapChar ch245 = { 8, 13, 0, 2, 8, ch245data };
static const unsigned char ch246data[] = {
0x0,0x0,0x3c,0x42,0x42,0x42,0x42,0x3c,0x0,0x0,0x24,0x24,0x0
};
static const GLUTBitmapChar ch246 = { 8, 13, 0, 2, 8, ch246data };
static const unsigned char ch247data[] = {
0x0,0x0,0x0,0x10,0x10,0x0,0x7c,0x0,0x10,0x10,0x0,0x0,0x0
};
static const GLUTBitmapChar ch247 = { 8, 13, 0, 2, 8, ch247data };
static const unsigned char ch248data[] = {
0x0,0x40,0x3c,0x62,0x52,0x4a,0x46,0x3c,0x2,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch248 = { 8, 13, 0, 2, 8, ch248data };
static const unsigned char ch249data[] = {
0x0,0x0,0x3a,0x44,0x44,0x44,0x44,0x44,0x0,0x0,0x8,0x10,0x0
};
static const GLUTBitmapChar ch249 = { 8, 13, 0, 2, 8, ch249data };
static const unsigned char ch250data[] = {
0x0,0x0,0x3a,0x44,0x44,0x44,0x44,0x44,0x0,0x0,0x10,0x8,0x0
};
static const GLUTBitmapChar ch250 = { 8, 13, 0, 2, 8, ch250data };
static const unsigned char ch251data[] = {
0x0,0x0,0x3a,0x44,0x44,0x44,0x44,0x44,0x0,0x0,0x24,0x18,0x0
};
static const GLUTBitmapChar ch251 = { 8, 13, 0, 2, 8, ch251data };
static const unsigned char ch252data[] = {
0x0,0x0,0x3a,0x44,0x44,0x44,0x44,0x44,0x0,0x0,0x24,0x24,0x0
};
static const GLUTBitmapChar ch252 = { 8, 13, 0, 2, 8, ch252data };
static const unsigned char ch253data[] = {
0x3c,0x42,0x2,0x3a,0x46,0x42,0x42,0x42,0x0,0x0,0x10,0x8,0x0
};
static const GLUTBitmapChar ch253 = { 8, 13, 0, 2, 8, ch253data };
static const unsigned char ch254data[] = {
0x40,0x40,0x5c,0x62,0x42,0x42,0x62,0x5c,0x40,0x40,0x0,0x0,0x0
};
static const GLUTBitmapChar ch254 = { 8, 13, 0, 2, 8, ch254data };
static const unsigned char ch255data[] = {
0x3c,0x42,0x2,0x3a,0x46,0x42,0x42,0x42,0x0,0x0,0x24,0x24,0x0
};
static const GLUTBitmapChar ch255 = { 8, 13, 0, 2, 8, ch255data };
static const GLUTBitmapChar *chars[] = {
&ch0, &ch1, &ch2, &ch3, &ch4, &ch5, &ch6, &ch7,
&ch8, &ch9, &ch10, &ch11, &ch12, &ch13, &ch14, &ch15,
&ch16, &ch17, &ch18, &ch19, &ch20, &ch21, &ch22, &ch23,
&ch24, &ch25, &ch26, &ch27, &ch28, &ch29, &ch30, &ch31,
&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,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
&ch160, &ch161, &ch162, &ch163, &ch164, &ch165, &ch166, &ch167,
&ch168, &ch169, &ch170, &ch171, &ch172, &ch173, &ch174, &ch175,
&ch176, &ch177, &ch178, &ch179, &ch180, &ch181, &ch182, &ch183,
&ch184, &ch185, &ch186, &ch187, &ch188, &ch189, &ch190, &ch191,
&ch192, &ch193, &ch194, &ch195, &ch196, &ch197, &ch198, &ch199,
&ch200, &ch201, &ch202, &ch203, &ch204, &ch205, &ch206, &ch207,
&ch208, &ch209, &ch210, &ch211, &ch212, &ch213, &ch214, &ch215,
&ch216, &ch217, &ch218, &ch219, &ch220, &ch221, &ch222, &ch223,
&ch224, &ch225, &ch226, &ch227, &ch228, &ch229, &ch230, &ch231,
&ch232, &ch233, &ch234, &ch235, &ch236, &ch237, &ch238, &ch239,
&ch240, &ch241, &ch242, &ch243, &ch244, &ch245, &ch246, &ch247,
&ch248, &ch249, &ch250, &ch251, &ch252, &ch253, &ch254, &ch255
};
const GLUTBitmapFont glutBitmap8By13 = {
"-Misc-Fixed-Medium-R-Normal--13-120-75-75-C-80-ISO8859-1",
13, 256, chars
};
/* autogenerated by bdf2c! do not edit */
/* "Public domain terminal emulator font. Share and enjoy." */
#include "internal.h"
/*
typedef struct {
int width, height;
int xorig, yorig;
int xmove;
const unsigned char *bitmap;
} GLUTBitmapChar;
typedef struct {
const char *name;
int height;
int num;
const GLUTBitmapChar *const *table;
} GLUTBitmapFont;
*/
static const unsigned char ch0data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch0 = { 9, 15, 0, 3, 9, ch0data };
static const unsigned char ch1data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0x1c,0x0,0x3e,0x0,0x7f,0x0,0x3e,0x0,
0x1c,0x0,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch1 = { 9, 15, 0, 3, 9, ch1data };
static const unsigned char ch2data[] = {
0x55,0x0,0xaa,0x0,0x55,0x0,0xaa,0x0,0x55,0x0,0xaa,0x0,0x55,0x0,0xaa,0x0,
0x55,0x0,0xaa,0x0,0x55,0x0,0xaa,0x0,0x55,0x0,0xaa,0x0,0x0,0x0
};
static const GLUTBitmapChar ch2 = { 9, 15, 0, 3, 9, ch2data };
static const unsigned char ch3data[] = {
0x0,0x0,0x4,0x0,0x4,0x0,0x4,0x0,0x1f,0x0,0x0,0x0,0x44,0x0,0x44,0x0,
0x7c,0x0,0x44,0x0,0x44,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch3 = { 9, 15, 0, 3, 9, ch3data };
static const unsigned char ch4data[] = {
0x0,0x0,0x8,0x0,0x8,0x0,0xe,0x0,0x8,0x0,0xf,0x0,0x40,0x0,0x40,0x0,
0x70,0x0,0x40,0x0,0x78,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch4 = { 9, 15, 0, 3, 9, ch4data };
static const unsigned char ch5data[] = {
0x0,0x0,0x11,0x0,0x11,0x0,0x1e,0x0,0x11,0x0,0x1e,0x0,0x0,0x0,0x3c,0x0,
0x40,0x0,0x40,0x0,0x3c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch5 = { 9, 15, 0, 3, 9, ch5data };
static const unsigned char ch6data[] = {
0x0,0x0,0x10,0x0,0x10,0x0,0x1e,0x0,0x10,0x0,0x1f,0x0,0x0,0x0,0x7c,0x0,
0x40,0x0,0x40,0x0,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch6 = { 9, 15, 0, 3, 9, ch6data };
static const unsigned char ch7data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
0x0,0x0,0x1c,0x0,0x22,0x0,0x22,0x0,0x1c,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch7 = { 9, 15, 0, 3, 9, ch7data };
static const unsigned char ch8data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x7f,0x0,0x8,0x0,0x8,0x0,0x7f,0x0,0x8,0x0,
0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch8 = { 9, 15, 0, 3, 9, ch8data };
static const unsigned char ch9data[] = {
0x0,0x0,0x1f,0x0,0x10,0x0,0x10,0x0,0x10,0x0,0x10,0x0,0x44,0x0,0x4c,0x0,
0x54,0x0,0x64,0x0,0x44,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch9 = { 9, 15, 0, 3, 9, ch9data };
static const unsigned char ch10data[] = {
0x0,0x0,0x4,0x0,0x4,0x0,0x4,0x0,0x4,0x0,0x1f,0x0,0x0,0x0,0x10,0x0,
0x28,0x0,0x44,0x0,0x44,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch10 = { 9, 15, 0, 3, 9, ch10data };
static const unsigned char ch11data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf8,0x0,0x8,0x0,
0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0
};
static const GLUTBitmapChar ch11 = { 9, 15, 0, 3, 9, ch11data };
static const unsigned char ch12data[] = {
0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0xf8,0x0,0x0,0x0,
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch12 = { 9, 15, 0, 3, 9, ch12data };
static const unsigned char ch13data[] = {
0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0xf,0x80,0x0,0x0,
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch13 = { 9, 15, 0, 3, 9, ch13data };
static const unsigned char ch14data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf,0x80,0x8,0x0,
0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0
};
static const GLUTBitmapChar ch14 = { 9, 15, 0, 3, 9, ch14data };
static const unsigned char ch15data[] = {
0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0xff,0x80,0x8,0x0,
0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0
};
static const GLUTBitmapChar ch15 = { 9, 15, 0, 3, 9, ch15data };
static const unsigned char ch16data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
0x0,0x0,0x0,0x0,0xff,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch16 = { 9, 15, 0, 3, 9, ch16data };
static const unsigned char ch17data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
0xff,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch17 = { 9, 15, 0, 3, 9, ch17data };
static const unsigned char ch18data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x80,0x0,0x0,
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch18 = { 9, 15, 0, 3, 9, ch18data };
static const unsigned char ch19data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x80,0x0,0x0,0x0,0x0,0x0,0x0,
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch19 = { 9, 15, 0, 3, 9, ch19data };
static const unsigned char ch20data[] = {
0x0,0x0,0x0,0x0,0xff,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch20 = { 9, 15, 0, 3, 9, ch20data };
static const unsigned char ch21data[] = {
0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0xf,0x80,0x8,0x0,
0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0
};
static const GLUTBitmapChar ch21 = { 9, 15, 0, 3, 9, ch21data };
static const unsigned char ch22data[] = {
0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0xf8,0x0,0x8,0x0,
0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0
};
static const GLUTBitmapChar ch22 = { 9, 15, 0, 3, 9, ch22data };
static const unsigned char ch23data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x80,0x8,0x0,
0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0
};
static const GLUTBitmapChar ch23 = { 9, 15, 0, 3, 9, ch23data };
static const unsigned char ch24data[] = {
0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0xff,0x80,0x0,0x0,
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch24 = { 9, 15, 0, 3, 9, ch24data };
static const unsigned char ch25data[] = {
0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,
0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0
};
static const GLUTBitmapChar ch25 = { 9, 15, 0, 3, 9, ch25data };
static const unsigned char ch26data[] = {
0x0,0x0,0x3f,0x0,0x0,0x0,0x1,0x0,0x2,0x0,0x4,0x0,0x8,0x0,0x10,0x0,
0x10,0x0,0x8,0x0,0x4,0x0,0x2,0x0,0x1,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch26 = { 9, 15, 0, 3, 9, ch26data };
static const unsigned char ch27data[] = {
0x0,0x0,0x7f,0x0,0x0,0x0,0x40,0x0,0x20,0x0,0x10,0x0,0x8,0x0,0x4,0x0,
0x4,0x0,0x8,0x0,0x10,0x0,0x20,0x0,0x40,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch27 = { 9, 15, 0, 3, 9, ch27data };
static const unsigned char ch28data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x22,0x0,0x12,0x0,0x12,0x0,0x12,0x0,0x12,0x0,
0x12,0x0,0x7f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch28 = { 9, 15, 0, 3, 9, ch28data };
static const unsigned char ch29data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x0,0x20,0x0,0x7f,0x0,0x8,0x0,0x7f,0x0,
0x2,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch29 = { 9, 15, 0, 3, 9, ch29data };
static const unsigned char ch30data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x2e,0x0,0x51,0x0,0x30,0x0,0x10,0x0,0x10,0x0,
0x7c,0x0,0x10,0x0,0x10,0x0,0x11,0x0,0xe,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch30 = { 9, 15, 0, 3, 9, ch30data };
static const unsigned char ch31data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc,0x0,0xc,0x0,0x0,0x0,
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch31 = { 9, 15, 0, 3, 9, ch31data };
static const unsigned char ch32data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch32 = { 9, 15, 0, 3, 9, ch32data };
static const unsigned char ch33data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0x8,0x0,0x0,0x0,0x0,0x0,0x8,0x0,
0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x0,0x0
};
static const GLUTBitmapChar ch33 = { 9, 15, 0, 3, 9, ch33data };
static const unsigned char ch34data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
0x0,0x0,0x0,0x0,0x12,0x0,0x12,0x0,0x12,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch34 = { 9, 15, 0, 3, 9, ch34data };
static const unsigned char ch35data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x24,0x0,0x24,0x0,0x7e,0x0,0x24,0x0,
0x24,0x0,0x7e,0x0,0x24,0x0,0x24,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch35 = { 9, 15, 0, 3, 9, ch35data };
static const unsigned char ch36data[] = {
0x0,0x0,0x0,0x0,0x8,0x0,0x3e,0x0,0x49,0x0,0x9,0x0,0x9,0x0,0xa,0x0,
0x1c,0x0,0x28,0x0,0x48,0x0,0x49,0x0,0x3e,0x0,0x8,0x0,0x0,0x0
};
static const GLUTBitmapChar ch36 = { 9, 15, 0, 3, 9, ch36data };
static const unsigned char ch37data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x42,0x0,0x25,0x0,0x25,0x0,0x12,0x0,0x8,0x0,
0x8,0x0,0x24,0x0,0x52,0x0,0x52,0x0,0x21,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch37 = { 9, 15, 0, 3, 9, ch37data };
static const unsigned char ch38data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x31,0x0,0x4a,0x0,0x44,0x0,0x4a,0x0,0x31,0x0,
0x30,0x0,0x48,0x0,0x48,0x0,0x48,0x0,0x30,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch38 = { 9, 15, 0, 3, 9, ch38data };
static const unsigned char ch39data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
0x0,0x0,0x10,0x0,0x8,0x0,0x4,0x0,0x6,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch39 = { 9, 15, 0, 3, 9, ch39data };
static const unsigned char ch40data[] = {
0x0,0x0,0x0,0x0,0x4,0x0,0x8,0x0,0x8,0x0,0x10,0x0,0x10,0x0,0x10,0x0,
0x10,0x0,0x10,0x0,0x10,0x0,0x8,0x0,0x8,0x0,0x4,0x0,0x0,0x0
};
static const GLUTBitmapChar ch40 = { 9, 15, 0, 3, 9, ch40data };
static const unsigned char ch41data[] = {
0x0,0x0,0x0,0x0,0x10,0x0,0x8,0x0,0x8,0x0,0x4,0x0,0x4,0x0,0x4,0x0,
0x4,0x0,0x4,0x0,0x4,0x0,0x8,0x0,0x8,0x0,0x10,0x0,0x0,0x0
};
static const GLUTBitmapChar ch41 = { 9, 15, 0, 3, 9, ch41data };
static const unsigned char ch42data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0x49,0x0,0x2a,0x0,0x1c,0x0,
0x2a,0x0,0x49,0x0,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch42 = { 9, 15, 0, 3, 9, ch42data };
static const unsigned char ch43data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x7f,0x0,
0x8,0x0,0x8,0x0,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch43 = { 9, 15, 0, 3, 9, ch43data };
static const unsigned char ch44data[] = {
0x8,0x0,0x4,0x0,0x4,0x0,0xc,0x0,0xc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch44 = { 9, 15, 0, 3, 9, ch44data };
static const unsigned char ch45data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7f,0x0,
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch45 = { 9, 15, 0, 3, 9, ch45data };
static const unsigned char ch46data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0xc,0x0,0xc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch46 = { 9, 15, 0, 3, 9, ch46data };
static const unsigned char ch47data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x0,0x20,0x0,0x20,0x0,0x10,0x0,0x8,0x0,
0x8,0x0,0x4,0x0,0x2,0x0,0x2,0x0,0x1,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch47 = { 9, 15, 0, 3, 9, ch47data };
static const unsigned char ch48data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x1c,0x0,0x22,0x0,0x41,0x0,0x41,0x0,0x41,0x0,
0x41,0x0,0x41,0x0,0x41,0x0,0x22,0x0,0x1c,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch48 = { 9, 15, 0, 3, 9, ch48data };
static const unsigned char ch49data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x7f,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,
0x8,0x0,0x48,0x0,0x28,0x0,0x18,0x0,0x8,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch49 = { 9, 15, 0, 3, 9, ch49data };
static const unsigned char ch50data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x7f,0x0,0x40,0x0,0x20,0x0,0x18,0x0,0x4,0x0,
0x2,0x0,0x1,0x0,0x41,0x0,0x41,0x0,0x3e,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch50 = { 9, 15, 0, 3, 9, ch50data };
static const unsigned char ch51data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3e,0x0,0x41,0x0,0x1,0x0,0x1,0x0,0x1,0x0,
0xe,0x0,0x4,0x0,0x2,0x0,0x1,0x0,0x7f,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch51 = { 9, 15, 0, 3, 9, ch51data };
static const unsigned char ch52data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x2,0x0,0x2,0x0,0x7f,0x0,0x42,0x0,
0x22,0x0,0x12,0x0,0xa,0x0,0x6,0x0,0x2,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch52 = { 9, 15, 0, 3, 9, ch52data };
static const unsigned char ch53data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3e,0x0,0x41,0x0,0x1,0x0,0x1,0x0,0x1,0x0,
0x61,0x0,0x5e,0x0,0x40,0x0,0x40,0x0,0x7f,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch53 = { 9, 15, 0, 3, 9, ch53data };
static const unsigned char ch54data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3e,0x0,0x41,0x0,0x41,0x0,0x41,0x0,0x61,0x0,
0x5e,0x0,0x40,0x0,0x40,0x0,0x20,0x0,0x1e,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch54 = { 9, 15, 0, 3, 9, ch54data };
static const unsigned char ch55data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x0,0x20,0x0,0x10,0x0,0x10,0x0,0x8,0x0,
0x4,0x0,0x2,0x0,0x1,0x0,0x1,0x0,0x7f,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch55 = { 9, 15, 0, 3, 9, ch55data };
static const unsigned char ch56data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x1c,0x0,0x22,0x0,0x41,0x0,0x41,0x0,0x22,0x0,
0x1c,0x0,0x22,0x0,0x41,0x0,0x22,0x0,0x1c,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch56 = { 9, 15, 0, 3, 9, ch56data };
static const unsigned char ch57data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3c,0x0,0x2,0x0,0x1,0x0,0x1,0x0,0x3d,0x0,
0x43,0x0,0x41,0x0,0x41,0x0,0x41,0x0,0x3e,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch57 = { 9, 15, 0, 3, 9, ch57data };
static const unsigned char ch58data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0xc,0x0,0xc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
0xc,0x0,0xc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch58 = { 9, 15, 0, 3, 9, ch58data };
static const unsigned char ch59data[] = {
0x8,0x0,0x4,0x0,0x4,0x0,0xc,0x0,0xc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
0xc,0x0,0xc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch59 = { 9, 15, 0, 3, 9, ch59data };
static const unsigned char ch60data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x4,0x0,0x8,0x0,0x10,0x0,0x20,0x0,
0x20,0x0,0x10,0x0,0x8,0x0,0x4,0x0,0x2,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch60 = { 9, 15, 0, 3, 9, ch60data };
static const unsigned char ch61data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7f,0x0,0x0,0x0,0x0,0x0,
0x7f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch61 = { 9, 15, 0, 3, 9, ch61data };
static const unsigned char ch62data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x0,0x10,0x0,0x8,0x0,0x4,0x0,0x2,0x0,
0x2,0x0,0x4,0x0,0x8,0x0,0x10,0x0,0x20,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch62 = { 9, 15, 0, 3, 9, ch62data };
static const unsigned char ch63data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x8,0x0,0x8,0x0,0x4,0x0,
0x2,0x0,0x1,0x0,0x41,0x0,0x41,0x0,0x3e,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch63 = { 9, 15, 0, 3, 9, ch63data };
static const unsigned char ch64data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3e,0x0,0x40,0x0,0x40,0x0,0x4d,0x0,0x53,0x0,
0x51,0x0,0x4f,0x0,0x41,0x0,0x41,0x0,0x3e,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch64 = { 9, 15, 0, 3, 9, ch64data };
static const unsigned char ch65data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x41,0x0,0x41,0x0,0x41,0x0,0x7f,0x0,0x41,0x0,
0x41,0x0,0x41,0x0,0x22,0x0,0x14,0x0,0x8,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch65 = { 9, 15, 0, 3, 9, ch65data };
static const unsigned char ch66data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x7e,0x0,0x21,0x0,0x21,0x0,0x21,0x0,0x21,0x0,
0x3e,0x0,0x21,0x0,0x21,0x0,0x21,0x0,0x7e,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch66 = { 9, 15, 0, 3, 9, ch66data };
static const unsigned char ch67data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3e,0x0,0x41,0x0,0x40,0x0,0x40,0x0,0x40,0x0,
0x40,0x0,0x40,0x0,0x40,0x0,0x41,0x0,0x3e,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch67 = { 9, 15, 0, 3, 9, ch67data };
static const unsigned char ch68data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x7e,0x0,0x21,0x0,0x21,0x0,0x21,0x0,0x21,0x0,
0x21,0x0,0x21,0x0,0x21,0x0,0x21,0x0,0x7e,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch68 = { 9, 15, 0, 3, 9, ch68data };
static const unsigned char ch69data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x7f,0x0,0x20,0x0,0x20,0x0,0x20,0x0,0x20,0x0,
0x3c,0x0,0x20,0x0,0x20,0x0,0x20,0x0,0x7f,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch69 = { 9, 15, 0, 3, 9, ch69data };
static const unsigned char ch70data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x0,0x20,0x0,0x20,0x0,0x20,0x0,0x20,0x0,
0x3c,0x0,0x20,0x0,0x20,0x0,0x20,0x0,0x7f,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch70 = { 9, 15, 0, 3, 9, ch70data };
static const unsigned char ch71data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3e,0x0,0x41,0x0,0x41,0x0,0x41,0x0,0x47,0x0,
0x40,0x0,0x40,0x0,0x40,0x0,0x41,0x0,0x3e,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch71 = { 9, 15, 0, 3, 9, ch71data };
static const unsigned char ch72data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x41,0x0,0x41,0x0,0x41,0x0,0x41,0x0,0x41,0x0,
0x7f,0x0,0x41,0x0,0x41,0x0,0x41,0x0,0x41,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch72 = { 9, 15, 0, 3, 9, ch72data };
static const unsigned char ch73data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3e,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,
0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x3e,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch73 = { 9, 15, 0, 3, 9, ch73data };
static const unsigned char ch74data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3c,0x0,0x42,0x0,0x2,0x0,0x2,0x0,0x2,0x0,
0x2,0x0,0x2,0x0,0x2,0x0,0x2,0x0,0xf,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch74 = { 9, 15, 0, 3, 9, ch74data };
static const unsigned char ch75data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x41,0x0,0x42,0x0,0x44,0x0,0x48,0x0,0x50,0x0,
0x70,0x0,0x48,0x0,0x44,0x0,0x42,0x0,0x41,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch75 = { 9, 15, 0, 3, 9, ch75data };
static const unsigned char ch76data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x7f,0x0,0x40,0x0,0x40,0x0,0x40,0x0,0x40,0x0,
0x40,0x0,0x40,0x0,0x40,0x0,0x40,0x0,0x40,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch76 = { 9, 15, 0, 3, 9, ch76data };
static const unsigned char ch77data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x41,0x0,0x41,0x0,0x41,0x0,0x49,0x0,0x49,0x0,
0x55,0x0,0x55,0x0,0x63,0x0,0x41,0x0,0x41,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch77 = { 9, 15, 0, 3, 9, ch77data };
static const unsigned char ch78data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x41,0x0,0x41,0x0,0x41,0x0,0x43,0x0,0x45,0x0,
0x49,0x0,0x51,0x0,0x61,0x0,0x41,0x0,0x41,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch78 = { 9, 15, 0, 3, 9, ch78data };
static const unsigned char ch79data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3e,0x0,0x41,0x0,0x41,0x0,0x41,0x0,0x41,0x0,
0x41,0x0,0x41,0x0,0x41,0x0,0x41,0x0,0x3e,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch79 = { 9, 15, 0, 3, 9, ch79data };
static const unsigned char ch80data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x0,0x40,0x0,0x40,0x0,0x40,0x0,0x40,0x0,
0x7e,0x0,0x41,0x0,0x41,0x0,0x41,0x0,0x7e,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch80 = { 9, 15, 0, 3, 9, ch80data };
static const unsigned char ch81data[] = {
0x0,0x0,0x3,0x0,0x4,0x0,0x3e,0x0,0x49,0x0,0x51,0x0,0x41,0x0,0x41,0x0,
0x41,0x0,0x41,0x0,0x41,0x0,0x41,0x0,0x3e,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch81 = { 9, 15, 0, 3, 9, ch81data };
static const unsigned char ch82data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x41,0x0,0x41,0x0,0x42,0x0,0x44,0x0,0x48,0x0,
0x7e,0x0,0x41,0x0,0x41,0x0,0x41,0x0,0x7e,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch82 = { 9, 15, 0, 3, 9, ch82data };
static const unsigned char ch83data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3e,0x0,0x41,0x0,0x41,0x0,0x1,0x0,0x6,0x0,
0x38,0x0,0x40,0x0,0x41,0x0,0x41,0x0,0x3e,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch83 = { 9, 15, 0, 3, 9, ch83data };
static const unsigned char ch84data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,
0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x7f,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch84 = { 9, 15, 0, 3, 9, ch84data };
static const unsigned char ch85data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3e,0x0,0x41,0x0,0x41,0x0,0x41,0x0,0x41,0x0,
0x41,0x0,0x41,0x0,0x41,0x0,0x41,0x0,0x41,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch85 = { 9, 15, 0, 3, 9, ch85data };
static const unsigned char ch86data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0x14,0x0,0x14,0x0,0x14,0x0,0x22,0x0,
0x22,0x0,0x22,0x0,0x41,0x0,0x41,0x0,0x41,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch86 = { 9, 15, 0, 3, 9, ch86data };
static const unsigned char ch87data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x22,0x0,0x55,0x0,0x49,0x0,0x49,0x0,0x49,0x0,
0x49,0x0,0x41,0x0,0x41,0x0,0x41,0x0,0x41,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch87 = { 9, 15, 0, 3, 9, ch87data };
static const unsigned char ch88data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x41,0x0,0x41,0x0,0x22,0x0,0x14,0x0,0x8,0x0,
0x8,0x0,0x14,0x0,0x22,0x0,0x41,0x0,0x41,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch88 = { 9, 15, 0, 3, 9, ch88data };
static const unsigned char ch89data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,
0x8,0x0,0x14,0x0,0x22,0x0,0x41,0x0,0x41,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch89 = { 9, 15, 0, 3, 9, ch89data };
static const unsigned char ch90data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x7f,0x0,0x40,0x0,0x40,0x0,0x20,0x0,0x10,0x0,
0x8,0x0,0x4,0x0,0x2,0x0,0x1,0x0,0x7f,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch90 = { 9, 15, 0, 3, 9, ch90data };
static const unsigned char ch91data[] = {
0x0,0x0,0x0,0x0,0x1e,0x0,0x10,0x0,0x10,0x0,0x10,0x0,0x10,0x0,0x10,0x0,
0x10,0x0,0x10,0x0,0x10,0x0,0x10,0x0,0x10,0x0,0x1e,0x0,0x0,0x0
};
static const GLUTBitmapChar ch91 = { 9, 15, 0, 3, 9, ch91data };
static const unsigned char ch92data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x2,0x0,0x2,0x0,0x4,0x0,0x8,0x0,
0x8,0x0,0x10,0x0,0x20,0x0,0x20,0x0,0x40,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch92 = { 9, 15, 0, 3, 9, ch92data };
static const unsigned char ch93data[] = {
0x0,0x0,0x0,0x0,0x3c,0x0,0x4,0x0,0x4,0x0,0x4,0x0,0x4,0x0,0x4,0x0,
0x4,0x0,0x4,0x0,0x4,0x0,0x4,0x0,0x4,0x0,0x3c,0x0,0x0,0x0
};
static const GLUTBitmapChar ch93 = { 9, 15, 0, 3, 9, ch93data };
static const unsigned char ch94data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
0x0,0x0,0x41,0x0,0x22,0x0,0x14,0x0,0x8,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch94 = { 9, 15, 0, 3, 9, ch94data };
static const unsigned char ch95data[] = {
0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch95 = { 9, 15, 0, 3, 9, ch95data };
static const unsigned char ch96data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
0x0,0x0,0x2,0x0,0x4,0x0,0x8,0x0,0x18,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch96 = { 9, 15, 0, 3, 9, ch96data };
static const unsigned char ch97data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3d,0x0,0x43,0x0,0x41,0x0,0x3f,0x0,0x1,0x0,
0x1,0x0,0x3e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch97 = { 9, 15, 0, 3, 9, ch97data };
static const unsigned char ch98data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x5e,0x0,0x61,0x0,0x41,0x0,0x41,0x0,0x41,0x0,
0x61,0x0,0x5e,0x0,0x40,0x0,0x40,0x0,0x40,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch98 = { 9, 15, 0, 3, 9, ch98data };
static const unsigned char ch99data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3e,0x0,0x41,0x0,0x40,0x0,0x40,0x0,0x40,0x0,
0x41,0x0,0x3e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch99 = { 9, 15, 0, 3, 9, ch99data };
static const unsigned char ch100data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3d,0x0,0x43,0x0,0x41,0x0,0x41,0x0,0x41,0x0,
0x43,0x0,0x3d,0x0,0x1,0x0,0x1,0x0,0x1,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch100 = { 9, 15, 0, 3, 9, ch100data };
static const unsigned char ch101data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3e,0x0,0x40,0x0,0x40,0x0,0x7f,0x0,0x41,0x0,
0x41,0x0,0x3e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch101 = { 9, 15, 0, 3, 9, ch101data };
static const unsigned char ch102data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x10,0x0,0x10,0x0,0x10,0x0,0x10,0x0,0x7c,0x0,
0x10,0x0,0x10,0x0,0x11,0x0,0x11,0x0,0xe,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch102 = { 9, 15, 0, 3, 9, ch102data };
static const unsigned char ch103data[] = {
0x3e,0x0,0x41,0x0,0x41,0x0,0x3e,0x0,0x40,0x0,0x3c,0x0,0x42,0x0,0x42,0x0,
0x42,0x0,0x3d,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch103 = { 9, 15, 0, 3, 9, ch103data };
static const unsigned char ch104data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x41,0x0,0x41,0x0,0x41,0x0,0x41,0x0,0x41,0x0,
0x61,0x0,0x5e,0x0,0x40,0x0,0x40,0x0,0x40,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch104 = { 9, 15, 0, 3, 9, ch104data };
static const unsigned char ch105data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3e,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,
0x8,0x0,0x38,0x0,0x0,0x0,0x0,0x0,0x18,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch105 = { 9, 15, 0, 3, 9, ch105data };
static const unsigned char ch106data[] = {
0x3c,0x0,0x42,0x0,0x42,0x0,0x42,0x0,0x2,0x0,0x2,0x0,0x2,0x0,0x2,0x0,
0x2,0x0,0xe,0x0,0x0,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch106 = { 9, 15, 0, 3, 9, ch106data };
static const unsigned char ch107data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x41,0x0,0x46,0x0,0x58,0x0,0x60,0x0,0x58,0x0,
0x46,0x0,0x41,0x0,0x40,0x0,0x40,0x0,0x40,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch107 = { 9, 15, 0, 3, 9, ch107data };
static const unsigned char ch108data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3e,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,
0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x38,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch108 = { 9, 15, 0, 3, 9, ch108data };
static const unsigned char ch109data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x41,0x0,0x49,0x0,0x49,0x0,0x49,0x0,0x49,0x0,
0x49,0x0,0x76,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch109 = { 9, 15, 0, 3, 9, ch109data };
static const unsigned char ch110data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x41,0x0,0x41,0x0,0x41,0x0,0x41,0x0,0x41,0x0,
0x61,0x0,0x5e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch110 = { 9, 15, 0, 3, 9, ch110data };
static const unsigned char ch111data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3e,0x0,0x41,0x0,0x41,0x0,0x41,0x0,0x41,0x0,
0x41,0x0,0x3e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch111 = { 9, 15, 0, 3, 9, ch111data };
static const unsigned char ch112data[] = {
0x40,0x0,0x40,0x0,0x40,0x0,0x5e,0x0,0x61,0x0,0x41,0x0,0x41,0x0,0x41,0x0,
0x61,0x0,0x5e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch112 = { 9, 15, 0, 3, 9, ch112data };
static const unsigned char ch113data[] = {
0x1,0x0,0x1,0x0,0x1,0x0,0x3d,0x0,0x43,0x0,0x41,0x0,0x41,0x0,0x41,0x0,
0x43,0x0,0x3d,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch113 = { 9, 15, 0, 3, 9, ch113data };
static const unsigned char ch114data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x0,0x20,0x0,0x20,0x0,0x20,0x0,0x21,0x0,
0x31,0x0,0x4e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch114 = { 9, 15, 0, 3, 9, ch114data };
static const unsigned char ch115data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3e,0x0,0x41,0x0,0x1,0x0,0x3e,0x0,0x40,0x0,
0x41,0x0,0x3e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch115 = { 9, 15, 0, 3, 9, ch115data };
static const unsigned char ch116data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0xe,0x0,0x11,0x0,0x10,0x0,0x10,0x0,0x10,0x0,
0x10,0x0,0x7e,0x0,0x10,0x0,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch116 = { 9, 15, 0, 3, 9, ch116data };
static const unsigned char ch117data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3d,0x0,0x42,0x0,0x42,0x0,0x42,0x0,0x42,0x0,
0x42,0x0,0x42,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch117 = { 9, 15, 0, 3, 9, ch117data };
static const unsigned char ch118data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0x14,0x0,0x14,0x0,0x22,0x0,0x22,0x0,
0x41,0x0,0x41,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch118 = { 9, 15, 0, 3, 9, ch118data };
static const unsigned char ch119data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x22,0x0,0x55,0x0,0x49,0x0,0x49,0x0,0x49,0x0,
0x41,0x0,0x41,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch119 = { 9, 15, 0, 3, 9, ch119data };
static const unsigned char ch120data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x41,0x0,0x22,0x0,0x14,0x0,0x8,0x0,0x14,0x0,
0x22,0x0,0x41,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch120 = { 9, 15, 0, 3, 9, ch120data };
static const unsigned char ch121data[] = {
0x3c,0x0,0x42,0x0,0x2,0x0,0x3a,0x0,0x46,0x0,0x42,0x0,0x42,0x0,0x42,0x0,
0x42,0x0,0x42,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch121 = { 9, 15, 0, 3, 9, ch121data };
static const unsigned char ch122data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x7f,0x0,0x20,0x0,0x10,0x0,0x8,0x0,0x4,0x0,
0x2,0x0,0x7f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch122 = { 9, 15, 0, 3, 9, ch122data };
static const unsigned char ch123data[] = {
0x0,0x0,0x0,0x0,0x7,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x4,0x0,0x18,0x0,
0x18,0x0,0x4,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x7,0x0,0x0,0x0
};
static const GLUTBitmapChar ch123 = { 9, 15, 0, 3, 9, ch123data };
static const unsigned char ch124data[] = {
0x0,0x0,0x0,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,
0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x0,0x0
};
static const GLUTBitmapChar ch124 = { 9, 15, 0, 3, 9, ch124data };
static const unsigned char ch125data[] = {
0x0,0x0,0x0,0x0,0x70,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x10,0x0,0xc,0x0,
0xc,0x0,0x10,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x70,0x0,0x0,0x0
};
static const GLUTBitmapChar ch125 = { 9, 15, 0, 3, 9, ch125data };
static const unsigned char ch126data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
0x0,0x0,0x0,0x0,0x46,0x0,0x49,0x0,0x31,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch126 = { 9, 15, 0, 3, 9, ch126data };
static const unsigned char ch127data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch127 = { 9, 15, 0, 3, 9, ch127data };
static const unsigned char ch160data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch160 = { 9, 15, 0, 3, 9, ch160data };
static const unsigned char ch161data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,
0x8,0x0,0x8,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0x8,0x0,0x0,0x0
};
static const GLUTBitmapChar ch161 = { 9, 15, 0, 3, 9, ch161data };
static const unsigned char ch162data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x0,0x3c,0x0,0x52,0x0,0x50,0x0,0x48,0x0,
0x4a,0x0,0x3c,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch162 = { 9, 15, 0, 3, 9, ch162data };
static const unsigned char ch163data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x2e,0x0,0x51,0x0,0x30,0x0,0x10,0x0,0x10,0x0,
0x7c,0x0,0x10,0x0,0x10,0x0,0x11,0x0,0xe,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch163 = { 9, 15, 0, 3, 9, ch163data };
static const unsigned char ch164data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x41,0x0,0x3e,0x0,
0x22,0x0,0x22,0x0,0x3e,0x0,0x41,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch164 = { 9, 15, 0, 3, 9, ch164data };
static const unsigned char ch165data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x3e,0x0,0x8,0x0,
0x3e,0x0,0x14,0x0,0x22,0x0,0x41,0x0,0x41,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch165 = { 9, 15, 0, 3, 9, ch165data };
static const unsigned char ch166data[] = {
0x0,0x0,0x0,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x0,0x0,
0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch166 = { 9, 15, 0, 3, 9, ch166data };
static const unsigned char ch167data[] = {
0x0,0x0,0x0,0x0,0x1c,0x0,0x22,0x0,0x2,0x0,0x1c,0x0,0x22,0x0,0x22,0x0,
0x22,0x0,0x1c,0x0,0x20,0x0,0x22,0x0,0x1c,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch167 = { 9, 15, 0, 3, 9, ch167data };
static const unsigned char ch168data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x14,0x0,0x14,0x0,0x0,0x0
};
static const GLUTBitmapChar ch168 = { 9, 15, 0, 3, 9, ch168data };
static const unsigned char ch169data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3c,0x0,0x42,0x0,0x99,0x0,0xa5,0x0,
0xa1,0x0,0xa5,0x0,0x99,0x0,0x42,0x0,0x3c,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch169 = { 9, 15, 0, 3, 9, ch169data };
static const unsigned char ch170data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1f,0x0,0x0,0x0,
0xf,0x0,0x12,0x0,0xe,0x0,0x12,0x0,0xc,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch170 = { 9, 15, 0, 3, 9, ch170data };
static const unsigned char ch171data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x9,0x0,0x12,0x0,0x24,0x0,0x48,0x0,
0x48,0x0,0x24,0x0,0x12,0x0,0x9,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch171 = { 9, 15, 0, 3, 9, ch171data };
static const unsigned char ch172data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x2,0x0,0x2,0x0,
0x7e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch172 = { 9, 15, 0, 3, 9, ch172data };
static const unsigned char ch173data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7e,0x0,
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch173 = { 9, 15, 0, 3, 9, ch173data };
static const unsigned char ch174data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3c,0x0,0x42,0x0,0xa5,0x0,0xa9,0x0,
0xbd,0x0,0xa5,0x0,0xb9,0x0,0x42,0x0,0x3c,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch174 = { 9, 15, 0, 3, 9, ch174data };
static const unsigned char ch175data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7e,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch175 = { 9, 15, 0, 3, 9, ch175data };
static const unsigned char ch176data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
0x0,0x0,0xc,0x0,0x12,0x0,0x12,0x0,0xc,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch176 = { 9, 15, 0, 3, 9, ch176data };
static const unsigned char ch177data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7f,0x0,0x0,0x0,0x8,0x0,0x8,0x0,
0x8,0x0,0x7f,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch177 = { 9, 15, 0, 3, 9, ch177data };
static const unsigned char ch178data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x78,0x0,
0x40,0x0,0x30,0x0,0x8,0x0,0x48,0x0,0x30,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch178 = { 9, 15, 0, 3, 9, ch178data };
static const unsigned char ch179data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x30,0x0,
0x48,0x0,0x8,0x0,0x10,0x0,0x48,0x0,0x30,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch179 = { 9, 15, 0, 3, 9, ch179data };
static const unsigned char ch180data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x18,0x0,0x4,0x0,0x0,0x0
};
static const GLUTBitmapChar ch180 = { 9, 15, 0, 3, 9, ch180data };
static const unsigned char ch181data[] = {
0x0,0x0,0x40,0x0,0x40,0x0,0x5d,0x0,0x63,0x0,0x41,0x0,0x41,0x0,0x41,0x0,
0x41,0x0,0x41,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch181 = { 9, 15, 0, 3, 9, ch181data };
static const unsigned char ch182data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x5,0x0,0x5,0x0,0x5,0x0,0x5,0x0,0x5,0x0,
0x3d,0x0,0x45,0x0,0x45,0x0,0x45,0x0,0x3f,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch182 = { 9, 15, 0, 3, 9, ch182data };
static const unsigned char ch183data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc,0x0,
0xc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch183 = { 9, 15, 0, 3, 9, ch183data };
static const unsigned char ch184data[] = {
0x18,0x0,0x24,0x0,0xc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch184 = { 9, 15, 0, 3, 9, ch184data };
static const unsigned char ch185data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x70,0x0,
0x20,0x0,0x20,0x0,0x20,0x0,0x60,0x0,0x20,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch185 = { 9, 15, 0, 3, 9, ch185data };
static const unsigned char ch186data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
0x7c,0x0,0x0,0x0,0x38,0x0,0x44,0x0,0x44,0x0,0x38,0x0,0x0,0x0
};
static const GLUTBitmapChar ch186 = { 9, 15, 0, 3, 9, ch186data };
static const unsigned char ch187data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x48,0x0,0x24,0x0,0x12,0x0,0x9,0x0,
0x9,0x0,0x12,0x0,0x24,0x0,0x48,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch187 = { 9, 15, 0, 3, 9, ch187data };
static const unsigned char ch188data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3,0x0,0xd,0x0,0x9,0x0,0x5,0x0,0x73,0x0,
0x21,0x0,0x20,0x0,0x20,0x0,0x60,0x0,0x20,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch188 = { 9, 15, 0, 3, 9, ch188data };
static const unsigned char ch189data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0xf,0x0,0x8,0x0,0x6,0x0,0x1,0x0,0x79,0x0,
0x26,0x0,0x20,0x0,0x20,0x0,0x60,0x0,0x20,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch189 = { 9, 15, 0, 3, 9, ch189data };
static const unsigned char ch190data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3,0x0,0xd,0x0,0x9,0x0,0x5,0x0,0x33,0x0,
0x49,0x0,0x8,0x0,0x10,0x0,0x48,0x0,0x30,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch190 = { 9, 15, 0, 3, 9, ch190data };
static const unsigned char ch191data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3e,0x0,0x41,0x0,0x41,0x0,0x40,0x0,0x20,0x0,
0x10,0x0,0x8,0x0,0x8,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch191 = { 9, 15, 0, 3, 9, ch191data };
static const unsigned char ch192data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x41,0x0,0x41,0x0,0x41,0x0,0x7f,0x0,0x41,0x0,
0x41,0x0,0x22,0x0,0x1c,0x0,0x0,0x0,0xc,0x0,0x10,0x0,0x0,0x0
};
static const GLUTBitmapChar ch192 = { 9, 15, 0, 3, 9, ch192data };
static const unsigned char ch193data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x41,0x0,0x41,0x0,0x41,0x0,0x7f,0x0,0x41,0x0,
0x41,0x0,0x22,0x0,0x1c,0x0,0x0,0x0,0x18,0x0,0x4,0x0,0x0,0x0
};
static const GLUTBitmapChar ch193 = { 9, 15, 0, 3, 9, ch193data };
static const unsigned char ch194data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x41,0x0,0x41,0x0,0x41,0x0,0x7f,0x0,0x41,0x0,
0x41,0x0,0x22,0x0,0x1c,0x0,0x0,0x0,0x22,0x0,0x1c,0x0,0x0,0x0
};
static const GLUTBitmapChar ch194 = { 9, 15, 0, 3, 9, ch194data };
static const unsigned char ch195data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x41,0x0,0x41,0x0,0x41,0x0,0x7f,0x0,0x41,0x0,
0x41,0x0,0x22,0x0,0x1c,0x0,0x0,0x0,0x28,0x0,0x14,0x0,0x0,0x0
};
static const GLUTBitmapChar ch195 = { 9, 15, 0, 3, 9, ch195data };
static const unsigned char ch196data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x41,0x0,0x41,0x0,0x41,0x0,0x7f,0x0,0x41,0x0,
0x41,0x0,0x22,0x0,0x1c,0x0,0x0,0x0,0x14,0x0,0x14,0x0,0x0,0x0
};
static const GLUTBitmapChar ch196 = { 9, 15, 0, 3, 9, ch196data };
static const unsigned char ch197data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x41,0x0,0x41,0x0,0x41,0x0,0x7f,0x0,0x41,0x0,
0x41,0x0,0x22,0x0,0x1c,0x0,0x8,0x0,0x14,0x0,0x8,0x0,0x0,0x0
};
static const GLUTBitmapChar ch197 = { 9, 15, 0, 3, 9, ch197data };
static const unsigned char ch198data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x4f,0x0,0x48,0x0,0x48,0x0,0x48,0x0,0x7e,0x0,
0x48,0x0,0x48,0x0,0x48,0x0,0x48,0x0,0x37,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch198 = { 9, 15, 0, 3, 9, ch198data };
static const unsigned char ch199data[] = {
0x18,0x0,0x24,0x0,0xc,0x0,0x3e,0x0,0x41,0x0,0x40,0x0,0x40,0x0,0x40,0x0,
0x40,0x0,0x40,0x0,0x40,0x0,0x41,0x0,0x3e,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch199 = { 9, 15, 0, 3, 9, ch199data };
static const unsigned char ch200data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x7f,0x0,0x20,0x0,0x20,0x0,0x20,0x0,0x3c,0x0,
0x20,0x0,0x20,0x0,0x7f,0x0,0x0,0x0,0xc,0x0,0x10,0x0,0x0,0x0
};
static const GLUTBitmapChar ch200 = { 9, 15, 0, 3, 9, ch200data };
static const unsigned char ch201data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x7f,0x0,0x20,0x0,0x20,0x0,0x20,0x0,0x3c,0x0,
0x20,0x0,0x20,0x0,0x7f,0x0,0x0,0x0,0x18,0x0,0x4,0x0,0x0,0x0
};
static const GLUTBitmapChar ch201 = { 9, 15, 0, 3, 9, ch201data };
static const unsigned char ch202data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x7f,0x0,0x20,0x0,0x20,0x0,0x20,0x0,0x3c,0x0,
0x20,0x0,0x20,0x0,0x7f,0x0,0x0,0x0,0x22,0x0,0x1c,0x0,0x0,0x0
};
static const GLUTBitmapChar ch202 = { 9, 15, 0, 3, 9, ch202data };
static const unsigned char ch203data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x7f,0x0,0x20,0x0,0x20,0x0,0x20,0x0,0x3c,0x0,
0x20,0x0,0x20,0x0,0x7f,0x0,0x0,0x0,0x14,0x0,0x14,0x0,0x0,0x0
};
static const GLUTBitmapChar ch203 = { 9, 15, 0, 3, 9, ch203data };
static const unsigned char ch204data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3e,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,
0x8,0x0,0x8,0x0,0x3e,0x0,0x0,0x0,0xc,0x0,0x10,0x0,0x0,0x0
};
static const GLUTBitmapChar ch204 = { 9, 15, 0, 3, 9, ch204data };
static const unsigned char ch205data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3e,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,
0x8,0x0,0x8,0x0,0x3e,0x0,0x0,0x0,0x18,0x0,0x4,0x0,0x0,0x0
};
static const GLUTBitmapChar ch205 = { 9, 15, 0, 3, 9, ch205data };
static const unsigned char ch206data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3e,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,
0x8,0x0,0x8,0x0,0x3e,0x0,0x0,0x0,0x22,0x0,0x1c,0x0,0x0,0x0
};
static const GLUTBitmapChar ch206 = { 9, 15, 0, 3, 9, ch206data };
static const unsigned char ch207data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3e,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,
0x8,0x0,0x8,0x0,0x3e,0x0,0x0,0x0,0x14,0x0,0x14,0x0,0x0,0x0
};
static const GLUTBitmapChar ch207 = { 9, 15, 0, 3, 9, ch207data };
static const unsigned char ch208data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x7e,0x0,0x21,0x0,0x21,0x0,0x21,0x0,0x21,0x0,
0x79,0x0,0x21,0x0,0x21,0x0,0x21,0x0,0x7e,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch208 = { 9, 15, 0, 3, 9, ch208data };
static const unsigned char ch209data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x41,0x0,0x43,0x0,0x45,0x0,0x49,0x0,0x49,0x0,
0x51,0x0,0x61,0x0,0x41,0x0,0x0,0x0,0x28,0x0,0x14,0x0,0x0,0x0
};
static const GLUTBitmapChar ch209 = { 9, 15, 0, 3, 9, ch209data };
static const unsigned char ch210data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3e,0x0,0x41,0x0,0x41,0x0,0x41,0x0,0x41,0x0,
0x41,0x0,0x41,0x0,0x3e,0x0,0x0,0x0,0xc,0x0,0x10,0x0,0x0,0x0
};
static const GLUTBitmapChar ch210 = { 9, 15, 0, 3, 9, ch210data };
static const unsigned char ch211data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3e,0x0,0x41,0x0,0x41,0x0,0x41,0x0,0x41,0x0,
0x41,0x0,0x41,0x0,0x3e,0x0,0x0,0x0,0x18,0x0,0x4,0x0,0x0,0x0
};
static const GLUTBitmapChar ch211 = { 9, 15, 0, 3, 9, ch211data };
static const unsigned char ch212data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3e,0x0,0x41,0x0,0x41,0x0,0x41,0x0,0x41,0x0,
0x41,0x0,0x41,0x0,0x3e,0x0,0x0,0x0,0x22,0x0,0x1c,0x0,0x0,0x0
};
static const GLUTBitmapChar ch212 = { 9, 15, 0, 3, 9, ch212data };
static const unsigned char ch213data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3e,0x0,0x41,0x0,0x41,0x0,0x41,0x0,0x41,0x0,
0x41,0x0,0x41,0x0,0x3e,0x0,0x0,0x0,0x28,0x0,0x14,0x0,0x0,0x0
};
static const GLUTBitmapChar ch213 = { 9, 15, 0, 3, 9, ch213data };
static const unsigned char ch214data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3e,0x0,0x41,0x0,0x41,0x0,0x41,0x0,0x41,0x0,
0x41,0x0,0x41,0x0,0x3e,0x0,0x0,0x0,0x14,0x0,0x14,0x0,0x0,0x0
};
static const GLUTBitmapChar ch214 = { 9, 15, 0, 3, 9, ch214data };
static const unsigned char ch215data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x41,0x0,0x22,0x0,0x14,0x0,0x8,0x0,
0x14,0x0,0x22,0x0,0x41,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch215 = { 9, 15, 0, 3, 9, ch215data };
static const unsigned char ch216data[] = {
0x0,0x0,0x0,0x0,0x40,0x0,0x3e,0x0,0x61,0x0,0x51,0x0,0x51,0x0,0x49,0x0,
0x49,0x0,0x45,0x0,0x45,0x0,0x43,0x0,0x3e,0x0,0x1,0x0,0x0,0x0
};
static const GLUTBitmapChar ch216 = { 9, 15, 0, 3, 9, ch216data };
static const unsigned char ch217data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3e,0x0,0x41,0x0,0x41,0x0,0x41,0x0,0x41,0x0,
0x41,0x0,0x41,0x0,0x41,0x0,0x0,0x0,0xc,0x0,0x10,0x0,0x0,0x0
};
static const GLUTBitmapChar ch217 = { 9, 15, 0, 3, 9, ch217data };
static const unsigned char ch218data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3e,0x0,0x41,0x0,0x41,0x0,0x41,0x0,0x41,0x0,
0x41,0x0,0x41,0x0,0x41,0x0,0x0,0x0,0x18,0x0,0x4,0x0,0x0,0x0
};
static const GLUTBitmapChar ch218 = { 9, 15, 0, 3, 9, ch218data };
static const unsigned char ch219data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3e,0x0,0x41,0x0,0x41,0x0,0x41,0x0,0x41,0x0,
0x41,0x0,0x41,0x0,0x41,0x0,0x0,0x0,0x22,0x0,0x1c,0x0,0x0,0x0
};
static const GLUTBitmapChar ch219 = { 9, 15, 0, 3, 9, ch219data };
static const unsigned char ch220data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3e,0x0,0x41,0x0,0x41,0x0,0x41,0x0,0x41,0x0,
0x41,0x0,0x41,0x0,0x41,0x0,0x0,0x0,0x14,0x0,0x14,0x0,0x0,0x0
};
static const GLUTBitmapChar ch220 = { 9, 15, 0, 3, 9, ch220data };
static const unsigned char ch221data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x14,0x0,
0x22,0x0,0x41,0x0,0x41,0x0,0x0,0x0,0x18,0x0,0x4,0x0,0x0,0x0
};
static const GLUTBitmapChar ch221 = { 9, 15, 0, 3, 9, ch221data };
static const unsigned char ch222data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x0,0x40,0x0,0x40,0x0,0x7e,0x0,0x41,0x0,
0x41,0x0,0x41,0x0,0x7e,0x0,0x40,0x0,0x40,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch222 = { 9, 15, 0, 3, 9, ch222data };
static const unsigned char ch223data[] = {
0x0,0x0,0x0,0x0,0x40,0x0,0x5e,0x0,0x61,0x0,0x41,0x0,0x41,0x0,0x7e,0x0,
0x41,0x0,0x41,0x0,0x3e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch223 = { 9, 15, 0, 3, 9, ch223data };
static const unsigned char ch224data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3d,0x0,0x43,0x0,0x41,0x0,0x3f,0x0,0x1,0x0,
0x1,0x0,0x3e,0x0,0x0,0x0,0x0,0x0,0xc,0x0,0x10,0x0,0x0,0x0
};
static const GLUTBitmapChar ch224 = { 9, 15, 0, 3, 9, ch224data };
static const unsigned char ch225data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3d,0x0,0x43,0x0,0x41,0x0,0x3f,0x0,0x1,0x0,
0x1,0x0,0x3e,0x0,0x0,0x0,0x0,0x0,0x18,0x0,0x4,0x0,0x0,0x0
};
static const GLUTBitmapChar ch225 = { 9, 15, 0, 3, 9, ch225data };
static const unsigned char ch226data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3d,0x0,0x43,0x0,0x41,0x0,0x3f,0x0,0x1,0x0,
0x1,0x0,0x3e,0x0,0x0,0x0,0x0,0x0,0x22,0x0,0x1c,0x0,0x0,0x0
};
static const GLUTBitmapChar ch226 = { 9, 15, 0, 3, 9, ch226data };
static const unsigned char ch227data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3d,0x0,0x43,0x0,0x41,0x0,0x3f,0x0,0x1,0x0,
0x1,0x0,0x3e,0x0,0x0,0x0,0x0,0x0,0x28,0x0,0x14,0x0,0x0,0x0
};
static const GLUTBitmapChar ch227 = { 9, 15, 0, 3, 9, ch227data };
static const unsigned char ch228data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3d,0x0,0x43,0x0,0x41,0x0,0x3f,0x0,0x1,0x0,
0x1,0x0,0x3e,0x0,0x0,0x0,0x0,0x0,0x14,0x0,0x14,0x0,0x0,0x0
};
static const GLUTBitmapChar ch228 = { 9, 15, 0, 3, 9, ch228data };
static const unsigned char ch229data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3d,0x0,0x43,0x0,0x41,0x0,0x3f,0x0,0x1,0x0,
0x1,0x0,0x3e,0x0,0x0,0x0,0xc,0x0,0x12,0x0,0xc,0x0,0x0,0x0
};
static const GLUTBitmapChar ch229 = { 9, 15, 0, 3, 9, ch229data };
static const unsigned char ch230data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x37,0x0,0x49,0x0,0x48,0x0,0x3e,0x0,0x9,0x0,
0x49,0x0,0x36,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch230 = { 9, 15, 0, 3, 9, ch230data };
static const unsigned char ch231data[] = {
0x18,0x0,0x24,0x0,0xc,0x0,0x3e,0x0,0x41,0x0,0x40,0x0,0x40,0x0,0x40,0x0,
0x41,0x0,0x3e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch231 = { 9, 15, 0, 3, 9, ch231data };
static const unsigned char ch232data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3e,0x0,0x40,0x0,0x40,0x0,0x7f,0x0,0x41,0x0,
0x41,0x0,0x3e,0x0,0x0,0x0,0x0,0x0,0xc,0x0,0x10,0x0,0x0,0x0
};
static const GLUTBitmapChar ch232 = { 9, 15, 0, 3, 9, ch232data };
static const unsigned char ch233data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3e,0x0,0x40,0x0,0x40,0x0,0x7f,0x0,0x41,0x0,
0x41,0x0,0x3e,0x0,0x0,0x0,0x0,0x0,0x18,0x0,0x4,0x0,0x0,0x0
};
static const GLUTBitmapChar ch233 = { 9, 15, 0, 3, 9, ch233data };
static const unsigned char ch234data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3e,0x0,0x40,0x0,0x40,0x0,0x7f,0x0,0x41,0x0,
0x41,0x0,0x3e,0x0,0x0,0x0,0x0,0x0,0x22,0x0,0x1c,0x0,0x0,0x0
};
static const GLUTBitmapChar ch234 = { 9, 15, 0, 3, 9, ch234data };
static const unsigned char ch235data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3e,0x0,0x40,0x0,0x40,0x0,0x7f,0x0,0x41,0x0,
0x41,0x0,0x3e,0x0,0x0,0x0,0x0,0x0,0x14,0x0,0x14,0x0,0x0,0x0
};
static const GLUTBitmapChar ch235 = { 9, 15, 0, 3, 9, ch235data };
static const unsigned char ch236data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3e,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,
0x8,0x0,0x38,0x0,0x0,0x0,0x0,0x0,0xc,0x0,0x10,0x0,0x0,0x0
};
static const GLUTBitmapChar ch236 = { 9, 15, 0, 3, 9, ch236data };
static const unsigned char ch237data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3e,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,
0x8,0x0,0x38,0x0,0x0,0x0,0x0,0x0,0x18,0x0,0x4,0x0,0x0,0x0
};
static const GLUTBitmapChar ch237 = { 9, 15, 0, 3, 9, ch237data };
static const unsigned char ch238data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3e,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,
0x8,0x0,0x38,0x0,0x0,0x0,0x0,0x0,0x24,0x0,0x18,0x0,0x0,0x0
};
static const GLUTBitmapChar ch238 = { 9, 15, 0, 3, 9, ch238data };
static const unsigned char ch239data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3e,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x0,
0x8,0x0,0x38,0x0,0x0,0x0,0x0,0x0,0x14,0x0,0x14,0x0,0x0,0x0
};
static const GLUTBitmapChar ch239 = { 9, 15, 0, 3, 9, ch239data };
static const unsigned char ch240data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3e,0x0,0x41,0x0,0x41,0x0,0x41,0x0,0x41,0x0,
0x41,0x0,0x3e,0x0,0x4,0x0,0x28,0x0,0x18,0x0,0x24,0x0,0x0,0x0
};
static const GLUTBitmapChar ch240 = { 9, 15, 0, 3, 9, ch240data };
static const unsigned char ch241data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x41,0x0,0x41,0x0,0x41,0x0,0x41,0x0,0x41,0x0,
0x61,0x0,0x5e,0x0,0x0,0x0,0x0,0x0,0x28,0x0,0x14,0x0,0x0,0x0
};
static const GLUTBitmapChar ch241 = { 9, 15, 0, 3, 9, ch241data };
static const unsigned char ch242data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3e,0x0,0x41,0x0,0x41,0x0,0x41,0x0,0x41,0x0,
0x41,0x0,0x3e,0x0,0x0,0x0,0x0,0x0,0xc,0x0,0x10,0x0,0x0,0x0
};
static const GLUTBitmapChar ch242 = { 9, 15, 0, 3, 9, ch242data };
static const unsigned char ch243data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3e,0x0,0x41,0x0,0x41,0x0,0x41,0x0,0x41,0x0,
0x41,0x0,0x3e,0x0,0x0,0x0,0x0,0x0,0x18,0x0,0x4,0x0,0x0,0x0
};
static const GLUTBitmapChar ch243 = { 9, 15, 0, 3, 9, ch243data };
static const unsigned char ch244data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3e,0x0,0x41,0x0,0x41,0x0,0x41,0x0,0x41,0x0,
0x41,0x0,0x3e,0x0,0x0,0x0,0x0,0x0,0x22,0x0,0x1c,0x0,0x0,0x0
};
static const GLUTBitmapChar ch244 = { 9, 15, 0, 3, 9, ch244data };
static const unsigned char ch245data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3e,0x0,0x41,0x0,0x41,0x0,0x41,0x0,0x41,0x0,
0x41,0x0,0x3e,0x0,0x0,0x0,0x0,0x0,0x28,0x0,0x14,0x0,0x0,0x0
};
static const GLUTBitmapChar ch245 = { 9, 15, 0, 3, 9, ch245data };
static const unsigned char ch246data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3e,0x0,0x41,0x0,0x41,0x0,0x41,0x0,0x41,0x0,
0x41,0x0,0x3e,0x0,0x0,0x0,0x0,0x0,0x14,0x0,0x14,0x0,0x0,0x0
};
static const GLUTBitmapChar ch246 = { 9, 15, 0, 3, 9, ch246data };
static const unsigned char ch247data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0x1c,0x0,0x8,0x0,0x0,0x0,0x7f,0x0,
0x0,0x0,0x8,0x0,0x1c,0x0,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch247 = { 9, 15, 0, 3, 9, ch247data };
static const unsigned char ch248data[] = {
0x0,0x0,0x0,0x0,0x40,0x0,0x3e,0x0,0x51,0x0,0x51,0x0,0x49,0x0,0x45,0x0,
0x45,0x0,0x3e,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch248 = { 9, 15, 0, 3, 9, ch248data };
static const unsigned char ch249data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3d,0x0,0x42,0x0,0x42,0x0,0x42,0x0,0x42,0x0,
0x42,0x0,0x42,0x0,0x0,0x0,0x0,0x0,0xc,0x0,0x10,0x0,0x0,0x0
};
static const GLUTBitmapChar ch249 = { 9, 15, 0, 3, 9, ch249data };
static const unsigned char ch250data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3d,0x0,0x42,0x0,0x42,0x0,0x42,0x0,0x42,0x0,
0x42,0x0,0x42,0x0,0x0,0x0,0x0,0x0,0x18,0x0,0x4,0x0,0x0,0x0
};
static const GLUTBitmapChar ch250 = { 9, 15, 0, 3, 9, ch250data };
static const unsigned char ch251data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3d,0x0,0x42,0x0,0x42,0x0,0x42,0x0,0x42,0x0,
0x42,0x0,0x42,0x0,0x0,0x0,0x0,0x0,0x22,0x0,0x1c,0x0,0x0,0x0
};
static const GLUTBitmapChar ch251 = { 9, 15, 0, 3, 9, ch251data };
static const unsigned char ch252data[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x3d,0x0,0x42,0x0,0x42,0x0,0x42,0x0,0x42,0x0,
0x42,0x0,0x42,0x0,0x0,0x0,0x0,0x0,0x14,0x0,0x14,0x0,0x0,0x0
};
static const GLUTBitmapChar ch252 = { 9, 15, 0, 3, 9, ch252data };
static const unsigned char ch253data[] = {
0x3c,0x0,0x42,0x0,0x2,0x0,0x3a,0x0,0x46,0x0,0x42,0x0,0x42,0x0,0x42,0x0,
0x42,0x0,0x42,0x0,0x0,0x0,0x0,0x0,0x18,0x0,0x4,0x0,0x0,0x0
};
static const GLUTBitmapChar ch253 = { 9, 15, 0, 3, 9, ch253data };
static const unsigned char ch254data[] = {
0x40,0x0,0x40,0x0,0x40,0x0,0x5e,0x0,0x61,0x0,0x41,0x0,0x41,0x0,0x41,0x0,
0x61,0x0,0x5e,0x0,0x40,0x0,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
static const GLUTBitmapChar ch254 = { 9, 15, 0, 3, 9, ch254data };
static const unsigned char ch255data[] = {
0x3c,0x0,0x42,0x0,0x2,0x0,0x3a,0x0,0x46,0x0,0x42,0x0,0x42,0x0,0x42,0x0,
0x42,0x0,0x42,0x0,0x0,0x0,0x0,0x0,0x14,0x0,0x14,0x0,0x0,0x0
};
static const GLUTBitmapChar ch255 = { 9, 15, 0, 3, 9, ch255data };
static const GLUTBitmapChar *chars[] = {
&ch0, &ch1, &ch2, &ch3, &ch4, &ch5, &ch6, &ch7,
&ch8, &ch9, &ch10, &ch11, &ch12, &ch13, &ch14, &ch15,
&ch16, &ch17, &ch18, &ch19, &ch20, &ch21, &ch22, &ch23,
&ch24, &ch25, &ch26, &ch27, &ch28, &ch29, &ch30, &ch31,
&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,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
&ch160, &ch161, &ch162, &ch163, &ch164, &ch165, &ch166, &ch167,
&ch168, &ch169, &ch170, &ch171, &ch172, &ch173, &ch174, &ch175,
&ch176, &ch177, &ch178, &ch179, &ch180, &ch181, &ch182, &ch183,
&ch184, &ch185, &ch186, &ch187, &ch188, &ch189, &ch190, &ch191,
&ch192, &ch193, &ch194, &ch195, &ch196, &ch197, &ch198, &ch199,
&ch200, &ch201, &ch202, &ch203, &ch204, &ch205, &ch206, &ch207,
&ch208, &ch209, &ch210, &ch211, &ch212, &ch213, &ch214, &ch215,
&ch216, &ch217, &ch218, &ch219, &ch220, &ch221, &ch222, &ch223,
&ch224, &ch225, &ch226, &ch227, &ch228, &ch229, &ch230, &ch231,
&ch232, &ch233, &ch234, &ch235, &ch236, &ch237, &ch238, &ch239,
&ch240, &ch241, &ch242, &ch243, &ch244, &ch245, &ch246, &ch247,
&ch248, &ch249, &ch250, &ch251, &ch252, &ch253, &ch254, &ch255
};
const GLUTBitmapFont glutBitmap9By15 = {
"-Misc-Fixed-Medium-R-Normal--15-140-75-75-C-90-ISO8859-1",
15, 256, chars
};
/* autogenerated by bdf2c! do not edit */
/* "Copyright (c) 1984, 1987 Adobe Systems Incorporated. All Rights Reserved. Copyright (c) 1988, 1991 Digital Equipment Corporation. All Rights Reserved." */
#include "internal.h"
/*
typedef struct {
int width, height;
int xorig, yorig;
int xmove;
const unsigned char *bitmap;
} GLUTBitmapChar;
typedef struct {
const char *name;
int height;
int num;
const GLUTBitmapChar *const *table;
} GLUTBitmapFont;
*/
static const unsigned char ch32data[] = {
0x0
};
static const GLUTBitmapChar ch32 = { 1, 1, 0, 0, 3, ch32data };
static const unsigned char ch33data[] = {
0x80,0x0,0x80,0x80,0x80,0x80,0x80,0x80
};
static const GLUTBitmapChar ch33 = { 1, 8, -1, 0, 3, ch33data };
static const unsigned char ch34data[] = {
0xa0,0xa0
};
static const GLUTBitmapChar ch34 = { 3, 2, -1, -6, 4, ch34data };
static const unsigned char ch35data[] = {
0x50,0x50,0xf8,0x28,0x7c,0x28,0x28
};
static const GLUTBitmapChar ch35 = { 6, 7, 0, 0, 6, ch35data };
static const unsigned char ch36data[] = {
0x20,0x70,0xa8,0x28,0x70,0xa0,0xa8,0x70,0x20
};
static const GLUTBitmapChar ch36 = { 5, 9, 0, 1, 6, ch36data };
static const unsigned char ch37data[] = {
0x26,0x29,0x16,0x10,0x8,0x68,0x94,0x64
};
static const GLUTBitmapChar ch37 = { 8, 8, 0, 0, 9, ch37data };
static const unsigned char ch38data[] = {
0x64,0x98,0x98,0xa4,0x60,0x50,0x50,0x20
};
static const GLUTBitmapChar ch38 = { 6, 8, -1, 0, 8, ch38data };
static const unsigned char ch39data[] = {
0x80,0x40,0x40
};
static const GLUTBitmapChar ch39 = { 2, 3, -1, -5, 3, ch39data };
static const unsigned char ch40data[] = {
0x20,0x40,0x40,0x80,0x80,0x80,0x80,0x40,0x40,0x20
};
static const GLUTBitmapChar ch40 = { 3, 10, 0, 2, 4, ch40data };
static const unsigned char ch41data[] = {
0x80,0x40,0x40,0x20,0x20,0x20,0x20,0x40,0x40,0x80
};
static const GLUTBitmapChar ch41 = { 3, 10, -1, 2, 4, ch41data };
static const unsigned char ch42data[] = {
0xa0,0x40,0xa0
};
static const GLUTBitmapChar ch42 = { 3, 3, 0, -5, 4, ch42data };
static const unsigned char ch43data[] = {
0x20,0x20,0xf8,0x20,0x20
};
static const GLUTBitmapChar ch43 = { 5, 5, 0, -1, 6, ch43data };
static const unsigned char ch44data[] = {
0x80,0x40,0x40
};
static const GLUTBitmapChar ch44 = { 2, 3, 0, 2, 3, ch44data };
static const unsigned char ch45data[] = {
0xf8
};
static const GLUTBitmapChar ch45 = { 5, 1, -1, -3, 7, ch45data };
static const unsigned char ch46data[] = {
0x80
};
static const GLUTBitmapChar ch46 = { 1, 1, -1, 0, 3, ch46data };
static const unsigned char ch47data[] = {
0x80,0x80,0x40,0x40,0x40,0x40,0x20,0x20
};
static const GLUTBitmapChar ch47 = { 3, 8, 0, 0, 3, ch47data };
static const unsigned char ch48data[] = {
0x70,0x88,0x88,0x88,0x88,0x88,0x88,0x70
};
static const GLUTBitmapChar ch48 = { 5, 8, 0, 0, 6, ch48data };
static const unsigned char ch49data[] = {
0x40,0x40,0x40,0x40,0x40,0x40,0xc0,0x40
};
static const GLUTBitmapChar ch49 = { 2, 8, -1, 0, 6, ch49data };
static const unsigned char ch50data[] = {
0xf8,0x80,0x40,0x30,0x8,0x8,0x88,0x70
};
static const GLUTBitmapChar ch50 = { 5, 8, 0, 0, 6, ch50data };
static const unsigned char ch51data[] = {
0x70,0x88,0x8,0x8,0x30,0x8,0x88,0x70
};
static const GLUTBitmapChar ch51 = { 5, 8, 0, 0, 6, ch51data };
static const unsigned char ch52data[] = {
0x10,0x10,0xf8,0x90,0x50,0x50,0x30,0x10
};
static const GLUTBitmapChar ch52 = { 5, 8, 0, 0, 6, ch52data };
static const unsigned char ch53data[] = {
0x70,0x88,0x8,0x8,0xf0,0x80,0x80,0xf8
};
static const GLUTBitmapChar ch53 = { 5, 8, 0, 0, 6, ch53data };
static const unsigned char ch54data[] = {
0x70,0x88,0x88,0xc8,0xb0,0x80,0x88,0x70
};
static const GLUTBitmapChar ch54 = { 5, 8, 0, 0, 6, ch54data };
static const unsigned char ch55data[] = {
0x40,0x40,0x20,0x20,0x10,0x10,0x8,0xf8
};
static const GLUTBitmapChar ch55 = { 5, 8, 0, 0, 6, ch55data };
static const unsigned char ch56data[] = {
0x70,0x88,0x88,0x88,0x70,0x88,0x88,0x70
};
static const GLUTBitmapChar ch56 = { 5, 8, 0, 0, 6, ch56data };
static const unsigned char ch57data[] = {
0x70,0x88,0x8,0x68,0x98,0x88,0x88,0x70
};
static const GLUTBitmapChar ch57 = { 5, 8, 0, 0, 6, ch57data };
static const unsigned char ch58data[] = {
0x80,0x0,0x0,0x0,0x0,0x80
};
static const GLUTBitmapChar ch58 = { 1, 6, -1, 0, 3, ch58data };
static const unsigned char ch59data[] = {
0x80,0x40,0x40,0x0,0x0,0x0,0x0,0x40
};
static const GLUTBitmapChar ch59 = { 2, 8, 0, 2, 3, ch59data };
static const unsigned char ch60data[] = {
0x20,0x40,0x80,0x40,0x20
};
static const GLUTBitmapChar ch60 = { 3, 5, -1, -1, 6, ch60data };
static const unsigned char ch61data[] = {
0xf0,0x0,0xf0
};
static const GLUTBitmapChar ch61 = { 4, 3, 0, -2, 5, ch61data };
static const unsigned char ch62data[] = {
0x80,0x40,0x20,0x40,0x80
};
static const GLUTBitmapChar ch62 = { 3, 5, -1, -1, 6, ch62data };
static const unsigned char ch63data[] = {
0x40,0x0,0x40,0x40,0x20,0x10,0x90,0x60
};
static const GLUTBitmapChar ch63 = { 4, 8, -1, 0, 6, ch63data };
static const unsigned char ch64data[] = {
0x3e,0x0,0x40,0x0,0x9b,0x0,0xa4,0x80,0xa4,0x80,0xa2,0x40,0x92,0x40,0x4d,0x40,
0x20,0x80,0x1f,0x0
};
static const GLUTBitmapChar ch64 = { 10, 10, 0, 2, 11, ch64data };
static const unsigned char ch65data[] = {
0x82,0x82,0x7c,0x44,0x28,0x28,0x10,0x10
};
static const GLUTBitmapChar ch65 = { 7, 8, 0, 0, 7, ch65data };
static const unsigned char ch66data[] = {
0xf0,0x88,0x88,0x88,0xf0,0x88,0x88,0xf0
};
static const GLUTBitmapChar ch66 = { 5, 8, -1, 0, 7, ch66data };
static const unsigned char ch67data[] = {
0x78,0x84,0x80,0x80,0x80,0x80,0x84,0x78
};
static const GLUTBitmapChar ch67 = { 6, 8, -1, 0, 8, ch67data };
static const unsigned char ch68data[] = {
0xf0,0x88,0x84,0x84,0x84,0x84,0x88,0xf0
};
static const GLUTBitmapChar ch68 = { 6, 8, -1, 0, 8, ch68data };
static const unsigned char ch69data[] = {
0xf8,0x80,0x80,0x80,0xf8,0x80,0x80,0xf8
};
static const GLUTBitmapChar ch69 = { 5, 8, -1, 0, 7, ch69data };
static const unsigned char ch70data[] = {
0x80,0x80,0x80,0x80,0xf0,0x80,0x80,0xf8
};
static const GLUTBitmapChar ch70 = { 5, 8, -1, 0, 6, ch70data };
static const unsigned char ch71data[] = {
0x74,0x8c,0x84,0x8c,0x80,0x80,0x84,0x78
};
static const GLUTBitmapChar ch71 = { 6, 8, -1, 0, 8, ch71data };
static const unsigned char ch72data[] = {
0x84,0x84,0x84,0x84,0xfc,0x84,0x84,0x84
};
static const GLUTBitmapChar ch72 = { 6, 8, -1, 0, 8, ch72data };
static const unsigned char ch73data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80
};
static const GLUTBitmapChar ch73 = { 1, 8, -1, 0, 3, ch73data };
static const unsigned char ch74data[] = {
0x60,0x90,0x10,0x10,0x10,0x10,0x10,0x10
};
static const GLUTBitmapChar ch74 = { 4, 8, 0, 0, 5, ch74data };
static const unsigned char ch75data[] = {
0x88,0x88,0x90,0x90,0xe0,0xa0,0x90,0x88
};
static const GLUTBitmapChar ch75 = { 5, 8, -1, 0, 7, ch75data };
static const unsigned char ch76data[] = {
0xf0,0x80,0x80,0x80,0x80,0x80,0x80,0x80
};
static const GLUTBitmapChar ch76 = { 4, 8, -1, 0, 6, ch76data };
static const unsigned char ch77data[] = {
0x92,0x92,0x92,0xaa,0xaa,0xc6,0xc6,0x82
};
static const GLUTBitmapChar ch77 = { 7, 8, -1, 0, 9, ch77data };
static const unsigned char ch78data[] = {
0x8c,0x8c,0x94,0x94,0xa4,0xa4,0xc4,0xc4
};
static const GLUTBitmapChar ch78 = { 6, 8, -1, 0, 8, ch78data };
static const unsigned char ch79data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x78
};
static const GLUTBitmapChar ch79 = { 6, 8, -1, 0, 8, ch79data };
static const unsigned char ch80data[] = {
0x80,0x80,0x80,0x80,0xf0,0x88,0x88,0xf0
};
static const GLUTBitmapChar ch80 = { 5, 8, -1, 0, 7, ch80data };
static const unsigned char ch81data[] = {
0x2,0x7c,0x8c,0x94,0x84,0x84,0x84,0x84,0x78
};
static const GLUTBitmapChar ch81 = { 7, 9, -1, 1, 8, ch81data };
static const unsigned char ch82data[] = {
0x88,0x88,0x88,0x88,0xf0,0x88,0x88,0xf0
};
static const GLUTBitmapChar ch82 = { 5, 8, -1, 0, 7, ch82data };
static const unsigned char ch83data[] = {
0x70,0x88,0x88,0x8,0x70,0x80,0x88,0x70
};
static const GLUTBitmapChar ch83 = { 5, 8, -1, 0, 7, ch83data };
static const unsigned char ch84data[] = {
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xf8
};
static const GLUTBitmapChar ch84 = { 5, 8, 0, 0, 5, ch84data };
static const unsigned char ch85data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x84
};
static const GLUTBitmapChar ch85 = { 6, 8, -1, 0, 8, ch85data };
static const unsigned char ch86data[] = {
0x10,0x28,0x28,0x44,0x44,0x44,0x82,0x82
};
static const GLUTBitmapChar ch86 = { 7, 8, 0, 0, 7, ch86data };
static const unsigned char ch87data[] = {
0x22,0x0,0x22,0x0,0x22,0x0,0x55,0x0,0x49,0x0,0x49,0x0,0x88,0x80,0x88,0x80
};
static const GLUTBitmapChar ch87 = { 9, 8, 0, 0, 9, ch87data };
static const unsigned char ch88data[] = {
0x88,0x88,0x50,0x50,0x20,0x50,0x88,0x88
};
static const GLUTBitmapChar ch88 = { 5, 8, -1, 0, 7, ch88data };
static const unsigned char ch89data[] = {
0x10,0x10,0x10,0x28,0x28,0x44,0x44,0x82
};
static const GLUTBitmapChar ch89 = { 7, 8, 0, 0, 7, ch89data };
static const unsigned char ch90data[] = {
0xf8,0x80,0x40,0x20,0x20,0x10,0x8,0xf8
};
static const GLUTBitmapChar ch90 = { 5, 8, -1, 0, 7, ch90data };
static const unsigned char ch91data[] = {
0xc0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xc0
};
static const GLUTBitmapChar ch91 = { 2, 10, -1, 2, 3, ch91data };
static const unsigned char ch92data[] = {
0x20,0x20,0x40,0x40,0x40,0x40,0x80,0x80
};
static const GLUTBitmapChar ch92 = { 3, 8, 0, 0, 3, ch92data };
static const unsigned char ch93data[] = {
0xc0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xc0
};
static const GLUTBitmapChar ch93 = { 2, 10, 0, 2, 3, ch93data };
static const unsigned char ch94data[] = {
0x88,0x50,0x50,0x20,0x20
};
static const GLUTBitmapChar ch94 = { 5, 5, 0, -3, 6, ch94data };
static const unsigned char ch95data[] = {
0xfc
};
static const GLUTBitmapChar ch95 = { 6, 1, 0, 2, 6, ch95data };
static const unsigned char ch96data[] = {
0x80,0x80,0x40
};
static const GLUTBitmapChar ch96 = { 2, 3, 0, -5, 3, ch96data };
static const unsigned char ch97data[] = {
0x68,0x90,0x90,0x70,0x10,0xe0
};
static const GLUTBitmapChar ch97 = { 5, 6, 0, 0, 5, ch97data };
static const unsigned char ch98data[] = {
0xb0,0xc8,0x88,0x88,0xc8,0xb0,0x80,0x80
};
static const GLUTBitmapChar ch98 = { 5, 8, 0, 0, 6, ch98data };
static const unsigned char ch99data[] = {
0x60,0x90,0x80,0x80,0x90,0x60
};
static const GLUTBitmapChar ch99 = { 4, 6, 0, 0, 5, ch99data };
static const unsigned char ch100data[] = {
0x68,0x98,0x88,0x88,0x98,0x68,0x8,0x8
};
static const GLUTBitmapChar ch100 = { 5, 8, 0, 0, 6, ch100data };
static const unsigned char ch101data[] = {
0x60,0x90,0x80,0xf0,0x90,0x60
};
static const GLUTBitmapChar ch101 = { 4, 6, 0, 0, 5, ch101data };
static const unsigned char ch102data[] = {
0x40,0x40,0x40,0x40,0x40,0xe0,0x40,0x30
};
static const GLUTBitmapChar ch102 = { 4, 8, 0, 0, 4, ch102data };
static const unsigned char ch103data[] = {
0x70,0x8,0x68,0x98,0x88,0x88,0x98,0x68
};
static const GLUTBitmapChar ch103 = { 5, 8, 0, 2, 6, ch103data };
static const unsigned char ch104data[] = {
0x88,0x88,0x88,0x88,0xc8,0xb0,0x80,0x80
};
static const GLUTBitmapChar ch104 = { 5, 8, 0, 0, 6, ch104data };
static const unsigned char ch105data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x80
};
static const GLUTBitmapChar ch105 = { 1, 8, 0, 0, 2, ch105data };
static const unsigned char ch106data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x80
};
static const GLUTBitmapChar ch106 = { 1, 9, 0, 1, 2, ch106data };
static const unsigned char ch107data[] = {
0x90,0x90,0xa0,0xc0,0xa0,0x90,0x80,0x80
};
static const GLUTBitmapChar ch107 = { 4, 8, 0, 0, 5, ch107data };
static const unsigned char ch108data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80
};
static const GLUTBitmapChar ch108 = { 1, 8, 0, 0, 2, ch108data };
static const unsigned char ch109data[] = {
0x92,0x92,0x92,0x92,0x92,0xec
};
static const GLUTBitmapChar ch109 = { 7, 6, 0, 0, 8, ch109data };
static const unsigned char ch110data[] = {
0x88,0x88,0x88,0x88,0xc8,0xb0
};
static const GLUTBitmapChar ch110 = { 5, 6, 0, 0, 6, ch110data };
static const unsigned char ch111data[] = {
0x70,0x88,0x88,0x88,0x88,0x70
};
static const GLUTBitmapChar ch111 = { 5, 6, 0, 0, 6, ch111data };
static const unsigned char ch112data[] = {
0x80,0x80,0xb0,0xc8,0x88,0x88,0xc8,0xb0
};
static const GLUTBitmapChar ch112 = { 5, 8, 0, 2, 6, ch112data };
static const unsigned char ch113data[] = {
0x8,0x8,0x68,0x98,0x88,0x88,0x98,0x68
};
static const GLUTBitmapChar ch113 = { 5, 8, 0, 2, 6, ch113data };
static const unsigned char ch114data[] = {
0x80,0x80,0x80,0x80,0xc0,0xa0
};
static const GLUTBitmapChar ch114 = { 3, 6, 0, 0, 4, ch114data };
static const unsigned char ch115data[] = {
0x60,0x90,0x10,0x60,0x90,0x60
};
static const GLUTBitmapChar ch115 = { 4, 6, 0, 0, 5, ch115data };
static const unsigned char ch116data[] = {
0x60,0x40,0x40,0x40,0x40,0xe0,0x40,0x40
};
static const GLUTBitmapChar ch116 = { 3, 8, 0, 0, 4, ch116data };
static const unsigned char ch117data[] = {
0x70,0x90,0x90,0x90,0x90,0x90
};
static const GLUTBitmapChar ch117 = { 4, 6, 0, 0, 5, ch117data };
static const unsigned char ch118data[] = {
0x20,0x20,0x50,0x50,0x88,0x88
};
static const GLUTBitmapChar ch118 = { 5, 6, 0, 0, 6, ch118data };
static const unsigned char ch119data[] = {
0x28,0x28,0x54,0x54,0x92,0x92
};
static const GLUTBitmapChar ch119 = { 7, 6, 0, 0, 8, ch119data };
static const unsigned char ch120data[] = {
0x88,0x88,0x50,0x20,0x50,0x88
};
static const GLUTBitmapChar ch120 = { 5, 6, 0, 0, 6, ch120data };
static const unsigned char ch121data[] = {
0x80,0x40,0x40,0x60,0xa0,0xa0,0x90,0x90
};
static const GLUTBitmapChar ch121 = { 4, 8, 0, 2, 5, ch121data };
static const unsigned char ch122data[] = {
0xf0,0x80,0x40,0x20,0x10,0xf0
};
static const GLUTBitmapChar ch122 = { 4, 6, 0, 0, 5, ch122data };
static const unsigned char ch123data[] = {
0x20,0x40,0x40,0x40,0x40,0x80,0x40,0x40,0x40,0x20
};
static const GLUTBitmapChar ch123 = { 3, 10, 0, 2, 3, ch123data };
static const unsigned char ch124data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80
};
static const GLUTBitmapChar ch124 = { 1, 10, -1, 2, 3, ch124data };
static const unsigned char ch125data[] = {
0x80,0x40,0x40,0x40,0x40,0x20,0x40,0x40,0x40,0x80
};
static const GLUTBitmapChar ch125 = { 3, 10, 0, 2, 3, ch125data };
static const unsigned char ch126data[] = {
0x98,0x64
};
static const GLUTBitmapChar ch126 = { 6, 2, 0, -3, 7, ch126data };
static const unsigned char ch160data[] = {
0x0
};
static const GLUTBitmapChar ch160 = { 1, 1, 0, 0, 3, ch160data };
static const unsigned char ch161data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x80
};
static const GLUTBitmapChar ch161 = { 1, 8, -1, 2, 3, ch161data };
static const unsigned char ch162data[] = {
0x40,0x70,0xa8,0xa0,0xa0,0xa8,0x70,0x10
};
static const GLUTBitmapChar ch162 = { 5, 8, 0, 1, 6, ch162data };
static const unsigned char ch163data[] = {
0xb0,0x48,0x40,0x40,0xe0,0x40,0x48,0x30
};
static const GLUTBitmapChar ch163 = { 5, 8, 0, 0, 6, ch163data };
static const unsigned char ch164data[] = {
0x90,0x60,0x90,0x90,0x60,0x90
};
static const GLUTBitmapChar ch164 = { 4, 6, 0, -1, 5, ch164data };
static const unsigned char ch165data[] = {
0x20,0xf8,0x20,0xf8,0x50,0x50,0x88,0x88
};
static const GLUTBitmapChar ch165 = { 5, 8, 0, 0, 6, ch165data };
static const unsigned char ch166data[] = {
0x80,0x80,0x80,0x80,0x0,0x0,0x80,0x80,0x80,0x80
};
static const GLUTBitmapChar ch166 = { 1, 10, -1, 2, 3, ch166data };
static const unsigned char ch167data[] = {
0x70,0x88,0x18,0x70,0xc8,0x98,0x70,0xc0,0x88,0x70
};
static const GLUTBitmapChar ch167 = { 5, 10, 0, 2, 6, ch167data };
static const unsigned char ch168data[] = {
0xa0
};
static const GLUTBitmapChar ch168 = { 3, 1, 0, -7, 3, ch168data };
static const unsigned char ch169data[] = {
0x38,0x44,0x9a,0xa2,0x9a,0x44,0x38
};
static const GLUTBitmapChar ch169 = { 7, 7, -1, 0, 9, ch169data };
static const unsigned char ch170data[] = {
0xe0,0x0,0xa0,0x20,0xe0
};
static const GLUTBitmapChar ch170 = { 3, 5, 0, -3, 4, ch170data };
static const unsigned char ch171data[] = {
0x28,0x50,0xa0,0x50,0x28
};
static const GLUTBitmapChar ch171 = { 5, 5, 0, 0, 6, ch171data };
static const unsigned char ch172data[] = {
0x8,0x8,0xf8
};
static const GLUTBitmapChar ch172 = { 5, 3, -1, -2, 7, ch172data };
static const unsigned char ch173data[] = {
0xe0
};
static const GLUTBitmapChar ch173 = { 3, 1, 0, -3, 4, ch173data };
static const unsigned char ch174data[] = {
0x38,0x44,0xaa,0xb2,0xba,0x44,0x38
};
static const GLUTBitmapChar ch174 = { 7, 7, -1, 0, 9, ch174data };
static const unsigned char ch175data[] = {
0xe0
};
static const GLUTBitmapChar ch175 = { 3, 1, 0, -7, 3, ch175data };
static const unsigned char ch176data[] = {
0x60,0x90,0x90,0x60
};
static const GLUTBitmapChar ch176 = { 4, 4, 0, -3, 4, ch176data };
static const unsigned char ch177data[] = {
0xf8,0x0,0x20,0x20,0xf8,0x20,0x20
};
static const GLUTBitmapChar ch177 = { 5, 7, 0, 0, 6, ch177data };
static const unsigned char ch178data[] = {
0xe0,0x40,0xa0,0x60
};
static const GLUTBitmapChar ch178 = { 3, 4, 0, -3, 3, ch178data };
static const unsigned char ch179data[] = {
0xc0,0x20,0x40,0xe0
};
static const GLUTBitmapChar ch179 = { 3, 4, 0, -3, 3, ch179data };
static const unsigned char ch180data[] = {
0x80,0x40
};
static const GLUTBitmapChar ch180 = { 2, 2, 0, -6, 3, ch180data };
static const unsigned char ch181data[] = {
0x80,0x80,0xf0,0x90,0x90,0x90,0x90,0x90
};
static const GLUTBitmapChar ch181 = { 4, 8, 0, 2, 5, ch181data };
static const unsigned char ch182data[] = {
0x28,0x28,0x28,0x28,0x28,0x68,0xe8,0xe8,0xe8,0x7c
};
static const GLUTBitmapChar ch182 = { 6, 10, 0, 2, 6, ch182data };
static const unsigned char ch183data[] = {
0xc0
};
static const GLUTBitmapChar ch183 = { 2, 1, 0, -3, 3, ch183data };
static const unsigned char ch184data[] = {
0xc0,0x40
};
static const GLUTBitmapChar ch184 = { 2, 2, 0, 2, 3, ch184data };
static const unsigned char ch185data[] = {
0x40,0x40,0xc0,0x40
};
static const GLUTBitmapChar ch185 = { 2, 4, 0, -3, 3, ch185data };
static const unsigned char ch186data[] = {
0xe0,0x0,0xe0,0xa0,0xe0
};
static const GLUTBitmapChar ch186 = { 3, 5, 0, -3, 4, ch186data };
static const unsigned char ch187data[] = {
0xa0,0x50,0x28,0x50,0xa0
};
static const GLUTBitmapChar ch187 = { 5, 5, 0, 0, 6, ch187data };
static const unsigned char ch188data[] = {
0x21,0x0,0x17,0x80,0x13,0x0,0x9,0x0,0x48,0x0,0x44,0x0,0xc4,0x0,0x42,0x0
};
static const GLUTBitmapChar ch188 = { 9, 8, 0, 0, 9, ch188data };
static const unsigned char ch189data[] = {
0x27,0x12,0x15,0xb,0x48,0x44,0xc4,0x42
};
static const GLUTBitmapChar ch189 = { 8, 8, 0, 0, 9, ch189data };
static const unsigned char ch190data[] = {
0x21,0x0,0x17,0x80,0x13,0x0,0x9,0x0,0xc8,0x0,0x24,0x0,0x44,0x0,0xe2,0x0
};
static const GLUTBitmapChar ch190 = { 9, 8, 0, 0, 9, ch190data };
static const unsigned char ch191data[] = {
0x60,0x90,0x80,0x40,0x20,0x20,0x0,0x20
};
static const GLUTBitmapChar ch191 = { 4, 8, -1, 2, 6, ch191data };
static const unsigned char ch192data[] = {
0x82,0x82,0x7c,0x44,0x28,0x28,0x10,0x10,0x0,0x10,0x20
};
static const GLUTBitmapChar ch192 = { 7, 11, 0, 0, 7, ch192data };
static const unsigned char ch193data[] = {
0x82,0x82,0x7c,0x44,0x28,0x28,0x10,0x10,0x0,0x10,0x8
};
static const GLUTBitmapChar ch193 = { 7, 11, 0, 0, 7, ch193data };
static const unsigned char ch194data[] = {
0x82,0x82,0x7c,0x44,0x28,0x28,0x10,0x10,0x0,0x28,0x10
};
static const GLUTBitmapChar ch194 = { 7, 11, 0, 0, 7, ch194data };
static const unsigned char ch195data[] = {
0x82,0x82,0x7c,0x44,0x28,0x28,0x10,0x10,0x0,0x28,0x14
};
static const GLUTBitmapChar ch195 = { 7, 11, 0, 0, 7, ch195data };
static const unsigned char ch196data[] = {
0x82,0x82,0x7c,0x44,0x28,0x28,0x10,0x10,0x0,0x28
};
static const GLUTBitmapChar ch196 = { 7, 10, 0, 0, 7, ch196data };
static const unsigned char ch197data[] = {
0x82,0x82,0x7c,0x44,0x28,0x28,0x10,0x10,0x10,0x28,0x10
};
static const GLUTBitmapChar ch197 = { 7, 11, 0, 0, 7, ch197data };
static const unsigned char ch198data[] = {
0x8f,0x80,0x88,0x0,0x78,0x0,0x48,0x0,0x2f,0x80,0x28,0x0,0x18,0x0,0x1f,0x80
};
static const GLUTBitmapChar ch198 = { 9, 8, 0, 0, 10, ch198data };
static const unsigned char ch199data[] = {
0x30,0x10,0x78,0x84,0x80,0x80,0x80,0x80,0x84,0x78
};
static const GLUTBitmapChar ch199 = { 6, 10, -1, 2, 8, ch199data };
static const unsigned char ch200data[] = {
0xf8,0x80,0x80,0x80,0xf8,0x80,0x80,0xf8,0x0,0x20,0x40
};
static const GLUTBitmapChar ch200 = { 5, 11, -1, 0, 7, ch200data };
static const unsigned char ch201data[] = {
0xf8,0x80,0x80,0x80,0xf8,0x80,0x80,0xf8,0x0,0x20,0x10
};
static const GLUTBitmapChar ch201 = { 5, 11, -1, 0, 7, ch201data };
static const unsigned char ch202data[] = {
0xf8,0x80,0x80,0xf8,0x80,0x80,0x80,0xf8,0x0,0x50,0x20
};
static const GLUTBitmapChar ch202 = { 5, 11, -1, 0, 7, ch202data };
static const unsigned char ch203data[] = {
0xf8,0x80,0x80,0x80,0xf8,0x80,0x80,0xf8,0x0,0x50
};
static const GLUTBitmapChar ch203 = { 5, 10, -1, 0, 7, ch203data };
static const unsigned char ch204data[] = {
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x0,0x40,0x80
};
static const GLUTBitmapChar ch204 = { 2, 11, 0, 0, 3, ch204data };
static const unsigned char ch205data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x80,0x40
};
static const GLUTBitmapChar ch205 = { 2, 11, -1, 0, 3, ch205data };
static const unsigned char ch206data[] = {
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x0,0xa0,0x40
};
static const GLUTBitmapChar ch206 = { 3, 11, 0, 0, 3, ch206data };
static const unsigned char ch207data[] = {
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x0,0xa0
};
static const GLUTBitmapChar ch207 = { 3, 10, 0, 0, 3, ch207data };
static const unsigned char ch208data[] = {
0x78,0x44,0x42,0x42,0xf2,0x42,0x44,0x78
};
static const GLUTBitmapChar ch208 = { 7, 8, 0, 0, 8, ch208data };
static const unsigned char ch209data[] = {
0x8c,0x8c,0x94,0x94,0xa4,0xa4,0xc4,0xc4,0x0,0x50,0x28
};
static const GLUTBitmapChar ch209 = { 6, 11, -1, 0, 8, ch209data };
static const unsigned char ch210data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x78,0x0,0x10,0x20
};
static const GLUTBitmapChar ch210 = { 6, 11, -1, 0, 8, ch210data };
static const unsigned char ch211data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x78,0x0,0x10,0x8
};
static const GLUTBitmapChar ch211 = { 6, 11, -1, 0, 8, ch211data };
static const unsigned char ch212data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x78,0x0,0x28,0x10
};
static const GLUTBitmapChar ch212 = { 6, 11, -1, 0, 8, ch212data };
static const unsigned char ch213data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x78,0x0,0x50,0x28
};
static const GLUTBitmapChar ch213 = { 6, 11, -1, 0, 8, ch213data };
static const unsigned char ch214data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x78,0x0,0x48
};
static const GLUTBitmapChar ch214 = { 6, 10, -1, 0, 8, ch214data };
static const unsigned char ch215data[] = {
0x88,0x50,0x20,0x50,0x88
};
static const GLUTBitmapChar ch215 = { 5, 5, 0, -1, 6, ch215data };
static const unsigned char ch216data[] = {
0x80,0x78,0xc4,0xa4,0xa4,0x94,0x94,0x8c,0x78,0x4
};
static const GLUTBitmapChar ch216 = { 6, 10, -1, 1, 8, ch216data };
static const unsigned char ch217data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x0,0x10,0x20
};
static const GLUTBitmapChar ch217 = { 6, 11, -1, 0, 8, ch217data };
static const unsigned char ch218data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x0,0x20,0x10
};
static const GLUTBitmapChar ch218 = { 6, 11, -1, 0, 8, ch218data };
static const unsigned char ch219data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x0,0x28,0x10
};
static const GLUTBitmapChar ch219 = { 6, 11, -1, 0, 8, ch219data };
static const unsigned char ch220data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x0,0x48
};
static const GLUTBitmapChar ch220 = { 6, 10, -1, 0, 8, ch220data };
static const unsigned char ch221data[] = {
0x10,0x10,0x10,0x28,0x28,0x44,0x44,0x82,0x0,0x10,0x8
};
static const GLUTBitmapChar ch221 = { 7, 11, 0, 0, 7, ch221data };
static const unsigned char ch222data[] = {
0x80,0x80,0xf0,0x88,0x88,0xf0,0x80,0x80
};
static const GLUTBitmapChar ch222 = { 5, 8, -1, 0, 7, ch222data };
static const unsigned char ch223data[] = {
0xa0,0x90,0x90,0x90,0xa0,0x90,0x90,0x60
};
static const GLUTBitmapChar ch223 = { 4, 8, 0, 0, 5, ch223data };
static const unsigned char ch224data[] = {
0x68,0x90,0x90,0x70,0x10,0xe0,0x0,0x20,0x40
};
static const GLUTBitmapChar ch224 = { 5, 9, 0, 0, 5, ch224data };
static const unsigned char ch225data[] = {
0x68,0x90,0x90,0x70,0x10,0xe0,0x0,0x20,0x10
};
static const GLUTBitmapChar ch225 = { 5, 9, 0, 0, 5, ch225data };
static const unsigned char ch226data[] = {
0x68,0x90,0x90,0x70,0x10,0xe0,0x0,0x50,0x20
};
static const GLUTBitmapChar ch226 = { 5, 9, 0, 0, 5, ch226data };
static const unsigned char ch227data[] = {
0x68,0x90,0x90,0x70,0x10,0xe0,0x0,0xa0,0x50
};
static const GLUTBitmapChar ch227 = { 5, 9, 0, 0, 5, ch227data };
static const unsigned char ch228data[] = {
0x68,0x90,0x90,0x70,0x10,0xe0,0x0,0x50
};
static const GLUTBitmapChar ch228 = { 5, 8, 0, 0, 5, ch228data };
static const unsigned char ch229data[] = {
0x68,0x90,0x90,0x70,0x10,0xe0,0x20,0x50,0x20
};
static const GLUTBitmapChar ch229 = { 5, 9, 0, 0, 5, ch229data };
static const unsigned char ch230data[] = {
0x6c,0x92,0x90,0x7e,0x12,0xec
};
static const GLUTBitmapChar ch230 = { 7, 6, 0, 0, 8, ch230data };
static const unsigned char ch231data[] = {
0x60,0x20,0x60,0x90,0x80,0x80,0x90,0x60
};
static const GLUTBitmapChar ch231 = { 4, 8, 0, 2, 5, ch231data };
static const unsigned char ch232data[] = {
0x60,0x90,0x80,0xf0,0x90,0x60,0x0,0x20,0x40
};
static const GLUTBitmapChar ch232 = { 4, 9, 0, 0, 5, ch232data };
static const unsigned char ch233data[] = {
0x60,0x90,0x80,0xf0,0x90,0x60,0x0,0x40,0x20
};
static const GLUTBitmapChar ch233 = { 4, 9, 0, 0, 5, ch233data };
static const unsigned char ch234data[] = {
0x60,0x90,0x80,0xf0,0x90,0x60,0x0,0x50,0x20
};
static const GLUTBitmapChar ch234 = { 4, 9, 0, 0, 5, ch234data };
static const unsigned char ch235data[] = {
0x60,0x90,0x80,0xf0,0x90,0x60,0x0,0x50
};
static const GLUTBitmapChar ch235 = { 4, 8, 0, 0, 5, ch235data };
static const unsigned char ch236data[] = {
0x40,0x40,0x40,0x40,0x40,0x40,0x0,0x40,0x80
};
static const GLUTBitmapChar ch236 = { 2, 9, 1, 0, 2, ch236data };
static const unsigned char ch237data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x80,0x40
};
static const GLUTBitmapChar ch237 = { 2, 9, 0, 0, 2, ch237data };
static const unsigned char ch238data[] = {
0x40,0x40,0x40,0x40,0x40,0x40,0x0,0xa0,0x40
};
static const GLUTBitmapChar ch238 = { 3, 9, 1, 0, 2, ch238data };
static const unsigned char ch239data[] = {
0x40,0x40,0x40,0x40,0x40,0x40,0x0,0xa0
};
static const GLUTBitmapChar ch239 = { 3, 8, 0, 0, 2, ch239data };
static const unsigned char ch240data[] = {
0x70,0x88,0x88,0x88,0x88,0x78,0x90,0x60,0x50
};
static const GLUTBitmapChar ch240 = { 5, 9, 0, 0, 6, ch240data };
static const unsigned char ch241data[] = {
0x90,0x90,0x90,0x90,0x90,0xe0,0x0,0xa0,0x50
};
static const GLUTBitmapChar ch241 = { 4, 9, 0, 0, 5, ch241data };
static const unsigned char ch242data[] = {
0x70,0x88,0x88,0x88,0x88,0x70,0x0,0x20,0x40
};
static const GLUTBitmapChar ch242 = { 5, 9, 0, 0, 6, ch242data };
static const unsigned char ch243data[] = {
0x70,0x88,0x88,0x88,0x88,0x70,0x0,0x20,0x10
};
static const GLUTBitmapChar ch243 = { 5, 9, 0, 0, 6, ch243data };
static const unsigned char ch244data[] = {
0x70,0x88,0x88,0x88,0x88,0x70,0x0,0x50,0x20
};
static const GLUTBitmapChar ch244 = { 5, 9, 0, 0, 6, ch244data };
static const unsigned char ch245data[] = {
0x70,0x88,0x88,0x88,0x88,0x70,0x0,0x50,0x28
};
static const GLUTBitmapChar ch245 = { 5, 9, 0, 0, 6, ch245data };
static const unsigned char ch246data[] = {
0x70,0x88,0x88,0x88,0x88,0x70,0x0,0x50
};
static const GLUTBitmapChar ch246 = { 5, 8, 0, 0, 6, ch246data };
static const unsigned char ch247data[] = {
0x20,0x0,0xf8,0x0,0x20
};
static const GLUTBitmapChar ch247 = { 5, 5, 0, -1, 6, ch247data };
static const unsigned char ch248data[] = {
0x70,0x88,0xc8,0xa8,0x98,0x74
};
static const GLUTBitmapChar ch248 = { 6, 6, 0, 0, 6, ch248data };
static const unsigned char ch249data[] = {
0x70,0x90,0x90,0x90,0x90,0x90,0x0,0x20,0x40
};
static const GLUTBitmapChar ch249 = { 4, 9, 0, 0, 5, ch249data };
static const unsigned char ch250data[] = {
0x70,0x90,0x90,0x90,0x90,0x90,0x0,0x40,0x20
};
static const GLUTBitmapChar ch250 = { 4, 9, 0, 0, 5, ch250data };
static const unsigned char ch251data[] = {
0x70,0x90,0x90,0x90,0x90,0x90,0x0,0x50,0x20
};
static const GLUTBitmapChar ch251 = { 4, 9, 0, 0, 5, ch251data };
static const unsigned char ch252data[] = {
0x70,0x90,0x90,0x90,0x90,0x90,0x0,0x50
};
static const GLUTBitmapChar ch252 = { 4, 8, 0, 0, 5, ch252data };
static const unsigned char ch253data[] = {
0x80,0x40,0x40,0x60,0xa0,0xa0,0x90,0x90,0x0,0x20,0x10
};
static const GLUTBitmapChar ch253 = { 4, 11, 0, 2, 5, ch253data };
static const unsigned char ch254data[] = {
0x80,0x80,0xb0,0xc8,0x88,0x88,0xc8,0xb0,0x80,0x80
};
static const GLUTBitmapChar ch254 = { 5, 10, 0, 2, 6, ch254data };
static const unsigned char ch255data[] = {
0x80,0x40,0x40,0x60,0xa0,0xa0,0x90,0x90,0x0,0x50
};
static const GLUTBitmapChar ch255 = { 4, 10, 0, 2, 5, ch255data };
static const GLUTBitmapChar *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, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
&ch160, &ch161, &ch162, &ch163, &ch164, &ch165, &ch166, &ch167,
&ch168, &ch169, &ch170, &ch171, &ch172, &ch173, &ch174, &ch175,
&ch176, &ch177, &ch178, &ch179, &ch180, &ch181, &ch182, &ch183,
&ch184, &ch185, &ch186, &ch187, &ch188, &ch189, &ch190, &ch191,
&ch192, &ch193, &ch194, &ch195, &ch196, &ch197, &ch198, &ch199,
&ch200, &ch201, &ch202, &ch203, &ch204, &ch205, &ch206, &ch207,
&ch208, &ch209, &ch210, &ch211, &ch212, &ch213, &ch214, &ch215,
&ch216, &ch217, &ch218, &ch219, &ch220, &ch221, &ch222, &ch223,
&ch224, &ch225, &ch226, &ch227, &ch228, &ch229, &ch230, &ch231,
&ch232, &ch233, &ch234, &ch235, &ch236, &ch237, &ch238, &ch239,
&ch240, &ch241, &ch242, &ch243, &ch244, &ch245, &ch246, &ch247,
&ch248, &ch249, &ch250, &ch251, &ch252, &ch253, &ch254, &ch255
};
const GLUTBitmapFont glutBitmapHelvetica10 = {
"-Adobe-Helvetica-Medium-R-Normal--10-100-75-75-P-56-ISO8859-1",
13, 256, chars
};
/* autogenerated by bdf2c! do not edit */
/* "Copyright (c) 1984, 1987 Adobe Systems Incorporated. All Rights Reserved. Copyright (c) 1988, 1991 Digital Equipment Corporation. All Rights Reserved." */
#include "internal.h"
/*
typedef struct {
int width, height;
int xorig, yorig;
int xmove;
const unsigned char *bitmap;
} GLUTBitmapChar;
typedef struct {
const char *name;
int height;
int num;
const GLUTBitmapChar *const *table;
} GLUTBitmapFont;
*/
static const unsigned char ch32data[] = {
0x0
};
static const GLUTBitmapChar ch32 = { 1, 1, 0, 0, 4, ch32data };
static const unsigned char ch33data[] = {
0x80,0x0,0x80,0x80,0x80,0x80,0x80,0x80,0x80
};
static const GLUTBitmapChar ch33 = { 1, 9, -1, 0, 3, ch33data };
static const unsigned char ch34data[] = {
0xa0,0xa0,0xa0
};
static const GLUTBitmapChar ch34 = { 3, 3, -1, -6, 5, ch34data };
static const unsigned char ch35data[] = {
0x50,0x50,0x50,0xfc,0x28,0xfc,0x28,0x28
};
static const GLUTBitmapChar ch35 = { 6, 8, 0, 0, 7, ch35data };
static const unsigned char ch36data[] = {
0x20,0x70,0xa8,0xa8,0x28,0x70,0xa0,0xa8,0x70,0x20
};
static const GLUTBitmapChar ch36 = { 5, 10, -1, 1, 7, ch36data };
static const unsigned char ch37data[] = {
0x23,0x0,0x14,0x80,0x14,0x80,0x13,0x0,0x8,0x0,0x68,0x0,0x94,0x0,0x94,0x0,
0x62,0x0
};
static const GLUTBitmapChar ch37 = { 9, 9, -1, 0, 11, ch37data };
static const unsigned char ch38data[] = {
0x72,0x8c,0x84,0x8a,0x50,0x30,0x48,0x48,0x30
};
static const GLUTBitmapChar ch38 = { 7, 9, -1, 0, 9, ch38data };
static const unsigned char ch39data[] = {
0x80,0x40,0xc0
};
static const GLUTBitmapChar ch39 = { 2, 3, -1, -6, 3, ch39data };
static const unsigned char ch40data[] = {
0x20,0x40,0x40,0x80,0x80,0x80,0x80,0x80,0x80,0x40,0x40,0x20
};
static const GLUTBitmapChar ch40 = { 3, 12, -1, 3, 4, ch40data };
static const unsigned char ch41data[] = {
0x80,0x40,0x40,0x20,0x20,0x20,0x20,0x20,0x20,0x40,0x40,0x80
};
static const GLUTBitmapChar ch41 = { 3, 12, 0, 3, 4, ch41data };
static const unsigned char ch42data[] = {
0xa0,0x40,0xa0
};
static const GLUTBitmapChar ch42 = { 3, 3, -1, -6, 5, ch42data };
static const unsigned char ch43data[] = {
0x20,0x20,0xf8,0x20,0x20
};
static const GLUTBitmapChar ch43 = { 5, 5, -1, -1, 7, ch43data };
static const unsigned char ch44data[] = {
0x80,0x40,0x40
};
static const GLUTBitmapChar ch44 = { 2, 3, -1, 2, 4, ch44data };
static const unsigned char ch45data[] = {
0xf8
};
static const GLUTBitmapChar ch45 = { 5, 1, -1, -3, 8, ch45data };
static const unsigned char ch46data[] = {
0x80
};
static const GLUTBitmapChar ch46 = { 1, 1, -1, 0, 3, ch46data };
static const unsigned char ch47data[] = {
0x80,0x80,0x40,0x40,0x40,0x20,0x20,0x10,0x10
};
static const GLUTBitmapChar ch47 = { 4, 9, 0, 0, 4, ch47data };
static const unsigned char ch48data[] = {
0x70,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x70
};
static const GLUTBitmapChar ch48 = { 5, 9, -1, 0, 7, ch48data };
static const unsigned char ch49data[] = {
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xe0,0x20
};
static const GLUTBitmapChar ch49 = { 3, 9, -1, 0, 7, ch49data };
static const unsigned char ch50data[] = {
0xf8,0x80,0x80,0x40,0x20,0x10,0x8,0x88,0x70
};
static const GLUTBitmapChar ch50 = { 5, 9, -1, 0, 7, ch50data };
static const unsigned char ch51data[] = {
0x70,0x88,0x88,0x8,0x8,0x30,0x8,0x88,0x70
};
static const GLUTBitmapChar ch51 = { 5, 9, -1, 0, 7, ch51data };
static const unsigned char ch52data[] = {
0x8,0x8,0xfc,0x88,0x48,0x28,0x28,0x18,0x8
};
static const GLUTBitmapChar ch52 = { 6, 9, 0, 0, 7, ch52data };
static const unsigned char ch53data[] = {
0x70,0x88,0x88,0x8,0x8,0xf0,0x80,0x80,0xf8
};
static const GLUTBitmapChar ch53 = { 5, 9, -1, 0, 7, ch53data };
static const unsigned char ch54data[] = {
0x70,0x88,0x88,0x88,0xc8,0xb0,0x80,0x88,0x70
};
static const GLUTBitmapChar ch54 = { 5, 9, -1, 0, 7, ch54data };
static const unsigned char ch55data[] = {
0x40,0x40,0x20,0x20,0x20,0x10,0x10,0x8,0xf8
};
static const GLUTBitmapChar ch55 = { 5, 9, -1, 0, 7, ch55data };
static const unsigned char ch56data[] = {
0x70,0x88,0x88,0x88,0x88,0x70,0x88,0x88,0x70
};
static const GLUTBitmapChar ch56 = { 5, 9, -1, 0, 7, ch56data };
static const unsigned char ch57data[] = {
0x70,0x88,0x8,0x8,0x78,0x88,0x88,0x88,0x70
};
static const GLUTBitmapChar ch57 = { 5, 9, -1, 0, 7, ch57data };
static const unsigned char ch58data[] = {
0x80,0x0,0x0,0x0,0x0,0x80
};
static const GLUTBitmapChar ch58 = { 1, 6, -1, 0, 3, ch58data };
static const unsigned char ch59data[] = {
0x80,0x40,0x40,0x0,0x0,0x0,0x0,0x40
};
static const GLUTBitmapChar ch59 = { 2, 8, 0, 2, 3, ch59data };
static const unsigned char ch60data[] = {
0xc,0x30,0xc0,0x30,0xc
};
static const GLUTBitmapChar ch60 = { 6, 5, 0, -1, 7, ch60data };
static const unsigned char ch61data[] = {
0xf8,0x0,0xf8
};
static const GLUTBitmapChar ch61 = { 5, 3, -1, -2, 7, ch61data };
static const unsigned char ch62data[] = {
0xc0,0x30,0xc,0x30,0xc0
};
static const GLUTBitmapChar ch62 = { 6, 5, -1, -1, 7, ch62data };
static const unsigned char ch63data[] = {
0x20,0x0,0x20,0x20,0x10,0x10,0x88,0x88,0x70
};
static const GLUTBitmapChar ch63 = { 5, 9, -1, 0, 7, ch63data };
static const unsigned char ch64data[] = {
0x3e,0x0,0x40,0x0,0x9b,0x0,0xa6,0x80,0xa2,0x40,0xa2,0x40,0x92,0x40,0x4d,0x40,
0x60,0x80,0x1f,0x0
};
static const GLUTBitmapChar ch64 = { 10, 10, -1, 1, 12, ch64data };
static const unsigned char ch65data[] = {
0x82,0x82,0x82,0x7c,0x44,0x44,0x28,0x28,0x10
};
static const GLUTBitmapChar ch65 = { 7, 9, -1, 0, 9, ch65data };
static const unsigned char ch66data[] = {
0xf8,0x84,0x84,0x84,0xf8,0x84,0x84,0x84,0xf8
};
static const GLUTBitmapChar ch66 = { 6, 9, -1, 0, 8, ch66data };
static const unsigned char ch67data[] = {
0x3c,0x42,0x80,0x80,0x80,0x80,0x80,0x42,0x3c
};
static const GLUTBitmapChar ch67 = { 7, 9, -1, 0, 9, ch67data };
static const unsigned char ch68data[] = {
0xf8,0x84,0x82,0x82,0x82,0x82,0x82,0x84,0xf8
};
static const GLUTBitmapChar ch68 = { 7, 9, -1, 0, 9, ch68data };
static const unsigned char ch69data[] = {
0xfc,0x80,0x80,0x80,0xfc,0x80,0x80,0x80,0xfc
};
static const GLUTBitmapChar ch69 = { 6, 9, -1, 0, 8, ch69data };
static const unsigned char ch70data[] = {
0x80,0x80,0x80,0x80,0xf8,0x80,0x80,0x80,0xfc
};
static const GLUTBitmapChar ch70 = { 6, 9, -1, 0, 8, ch70data };
static const unsigned char ch71data[] = {
0x3a,0x46,0x82,0x82,0x8e,0x80,0x80,0x42,0x3c
};
static const GLUTBitmapChar ch71 = { 7, 9, -1, 0, 9, ch71data };
static const unsigned char ch72data[] = {
0x82,0x82,0x82,0x82,0xfe,0x82,0x82,0x82,0x82
};
static const GLUTBitmapChar ch72 = { 7, 9, -1, 0, 9, ch72data };
static const unsigned char ch73data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80
};
static const GLUTBitmapChar ch73 = { 1, 9, -1, 0, 3, ch73data };
static const unsigned char ch74data[] = {
0x70,0x88,0x88,0x8,0x8,0x8,0x8,0x8,0x8
};
static const GLUTBitmapChar ch74 = { 5, 9, -1, 0, 7, ch74data };
static const unsigned char ch75data[] = {
0x82,0x84,0x88,0x90,0xe0,0xa0,0x90,0x88,0x84
};
static const GLUTBitmapChar ch75 = { 7, 9, -1, 0, 8, ch75data };
static const unsigned char ch76data[] = {
0xf8,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80
};
static const GLUTBitmapChar ch76 = { 5, 9, -1, 0, 7, ch76data };
static const unsigned char ch77data[] = {
0x88,0x80,0x88,0x80,0x94,0x80,0x94,0x80,0xa2,0x80,0xa2,0x80,0xc1,0x80,0xc1,0x80,
0x80,0x80
};
static const GLUTBitmapChar ch77 = { 9, 9, -1, 0, 11, ch77data };
static const unsigned char ch78data[] = {
0x82,0x86,0x8a,0x8a,0x92,0xa2,0xa2,0xc2,0x82
};
static const GLUTBitmapChar ch78 = { 7, 9, -1, 0, 9, ch78data };
static const unsigned char ch79data[] = {
0x3c,0x42,0x81,0x81,0x81,0x81,0x81,0x42,0x3c
};
static const GLUTBitmapChar ch79 = { 8, 9, -1, 0, 10, ch79data };
static const unsigned char ch80data[] = {
0x80,0x80,0x80,0x80,0xf8,0x84,0x84,0x84,0xf8
};
static const GLUTBitmapChar ch80 = { 6, 9, -1, 0, 8, ch80data };
static const unsigned char ch81data[] = {
0x3d,0x42,0x85,0x89,0x81,0x81,0x81,0x42,0x3c
};
static const GLUTBitmapChar ch81 = { 8, 9, -1, 0, 10, ch81data };
static const unsigned char ch82data[] = {
0x84,0x84,0x84,0x88,0xf8,0x84,0x84,0x84,0xf8
};
static const GLUTBitmapChar ch82 = { 6, 9, -1, 0, 8, ch82data };
static const unsigned char ch83data[] = {
0x78,0x84,0x84,0x4,0x18,0x60,0x80,0x84,0x78
};
static const GLUTBitmapChar ch83 = { 6, 9, -1, 0, 8, ch83data };
static const unsigned char ch84data[] = {
0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0xfe
};
static const GLUTBitmapChar ch84 = { 7, 9, 0, 0, 7, ch84data };
static const unsigned char ch85data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84
};
static const GLUTBitmapChar ch85 = { 6, 9, -1, 0, 8, ch85data };
static const unsigned char ch86data[] = {
0x10,0x10,0x28,0x28,0x44,0x44,0x44,0x82,0x82
};
static const GLUTBitmapChar ch86 = { 7, 9, -1, 0, 9, ch86data };
static const unsigned char ch87data[] = {
0x22,0x0,0x22,0x0,0x22,0x0,0x55,0x0,0x55,0x0,0x49,0x0,0x88,0x80,0x88,0x80,
0x88,0x80
};
static const GLUTBitmapChar ch87 = { 9, 9, -1, 0, 11, ch87data };
static const unsigned char ch88data[] = {
0x82,0x44,0x44,0x28,0x10,0x28,0x44,0x44,0x82
};
static const GLUTBitmapChar ch88 = { 7, 9, -1, 0, 9, ch88data };
static const unsigned char ch89data[] = {
0x10,0x10,0x10,0x10,0x28,0x44,0x44,0x82,0x82
};
static const GLUTBitmapChar ch89 = { 7, 9, -1, 0, 9, ch89data };
static const unsigned char ch90data[] = {
0xfe,0x80,0x40,0x20,0x10,0x8,0x4,0x2,0xfe
};
static const GLUTBitmapChar ch90 = { 7, 9, -1, 0, 9, ch90data };
static const unsigned char ch91data[] = {
0xc0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xc0
};
static const GLUTBitmapChar ch91 = { 2, 12, -1, 3, 3, ch91data };
static const unsigned char ch92data[] = {
0x10,0x10,0x20,0x20,0x20,0x40,0x40,0x80,0x80
};
static const GLUTBitmapChar ch92 = { 4, 9, 0, 0, 4, ch92data };
static const unsigned char ch93data[] = {
0xc0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xc0
};
static const GLUTBitmapChar ch93 = { 2, 12, 0, 3, 3, ch93data };
static const unsigned char ch94data[] = {
0x88,0x50,0x20
};
static const GLUTBitmapChar ch94 = { 5, 3, 0, -5, 6, ch94data };
static const unsigned char ch95data[] = {
0xfe
};
static const GLUTBitmapChar ch95 = { 7, 1, 0, 2, 7, ch95data };
static const unsigned char ch96data[] = {
0xc0,0x80,0x40
};
static const GLUTBitmapChar ch96 = { 2, 3, 0, -6, 3, ch96data };
static const unsigned char ch97data[] = {
0x74,0x88,0x88,0x78,0x8,0x88,0x70
};
static const GLUTBitmapChar ch97 = { 6, 7, -1, 0, 7, ch97data };
static const unsigned char ch98data[] = {
0xb0,0xc8,0x88,0x88,0x88,0xc8,0xb0,0x80,0x80
};
static const GLUTBitmapChar ch98 = { 5, 9, -1, 0, 7, ch98data };
static const unsigned char ch99data[] = {
0x70,0x88,0x80,0x80,0x80,0x88,0x70
};
static const GLUTBitmapChar ch99 = { 5, 7, -1, 0, 7, ch99data };
static const unsigned char ch100data[] = {
0x68,0x98,0x88,0x88,0x88,0x98,0x68,0x8,0x8
};
static const GLUTBitmapChar ch100 = { 5, 9, -1, 0, 7, ch100data };
static const unsigned char ch101data[] = {
0x70,0x88,0x80,0xf8,0x88,0x88,0x70
};
static const GLUTBitmapChar ch101 = { 5, 7, -1, 0, 7, ch101data };
static const unsigned char ch102data[] = {
0x40,0x40,0x40,0x40,0x40,0x40,0xe0,0x40,0x30
};
static const GLUTBitmapChar ch102 = { 4, 9, 0, 0, 3, ch102data };
static const unsigned char ch103data[] = {
0x70,0x88,0x8,0x68,0x98,0x88,0x88,0x88,0x98,0x68
};
static const GLUTBitmapChar ch103 = { 5, 10, -1, 3, 7, ch103data };
static const unsigned char ch104data[] = {
0x88,0x88,0x88,0x88,0x88,0xc8,0xb0,0x80,0x80
};
static const GLUTBitmapChar ch104 = { 5, 9, -1, 0, 7, ch104data };
static const unsigned char ch105data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x80
};
static const GLUTBitmapChar ch105 = { 1, 9, -1, 0, 3, ch105data };
static const unsigned char ch106data[] = {
0x80,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x0,0x40
};
static const GLUTBitmapChar ch106 = { 2, 12, 0, 3, 3, ch106data };
static const unsigned char ch107data[] = {
0x88,0x90,0xa0,0xc0,0xc0,0xa0,0x90,0x80,0x80
};
static const GLUTBitmapChar ch107 = { 5, 9, -1, 0, 6, ch107data };
static const unsigned char ch108data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80
};
static const GLUTBitmapChar ch108 = { 1, 9, -1, 0, 3, ch108data };
static const unsigned char ch109data[] = {
0x92,0x92,0x92,0x92,0x92,0xda,0xa4
};
static const GLUTBitmapChar ch109 = { 7, 7, -1, 0, 9, ch109data };
static const unsigned char ch110data[] = {
0x88,0x88,0x88,0x88,0x88,0xc8,0xb0
};
static const GLUTBitmapChar ch110 = { 5, 7, -1, 0, 7, ch110data };
static const unsigned char ch111data[] = {
0x70,0x88,0x88,0x88,0x88,0x88,0x70
};
static const GLUTBitmapChar ch111 = { 5, 7, -1, 0, 7, ch111data };
static const unsigned char ch112data[] = {
0x80,0x80,0x80,0xb0,0xc8,0x88,0x88,0x88,0xc8,0xb0
};
static const GLUTBitmapChar ch112 = { 5, 10, -1, 3, 7, ch112data };
static const unsigned char ch113data[] = {
0x8,0x8,0x8,0x68,0x98,0x88,0x88,0x88,0x98,0x68
};
static const GLUTBitmapChar ch113 = { 5, 10, -1, 3, 7, ch113data };
static const unsigned char ch114data[] = {
0x80,0x80,0x80,0x80,0x80,0xc0,0xa0
};
static const GLUTBitmapChar ch114 = { 3, 7, -1, 0, 4, ch114data };
static const unsigned char ch115data[] = {
0x60,0x90,0x10,0x60,0x80,0x90,0x60
};
static const GLUTBitmapChar ch115 = { 4, 7, -1, 0, 6, ch115data };
static const unsigned char ch116data[] = {
0x60,0x40,0x40,0x40,0x40,0x40,0xe0,0x40,0x40
};
static const GLUTBitmapChar ch116 = { 3, 9, 0, 0, 3, ch116data };
static const unsigned char ch117data[] = {
0x68,0x98,0x88,0x88,0x88,0x88,0x88
};
static const GLUTBitmapChar ch117 = { 5, 7, -1, 0, 7, ch117data };
static const unsigned char ch118data[] = {
0x20,0x20,0x50,0x50,0x88,0x88,0x88
};
static const GLUTBitmapChar ch118 = { 5, 7, -1, 0, 7, ch118data };
static const unsigned char ch119data[] = {
0x22,0x0,0x22,0x0,0x55,0x0,0x49,0x0,0x49,0x0,0x88,0x80,0x88,0x80
};
static const GLUTBitmapChar ch119 = { 9, 7, 0, 0, 9, ch119data };
static const unsigned char ch120data[] = {
0x84,0x84,0x48,0x30,0x30,0x48,0x84
};
static const GLUTBitmapChar ch120 = { 6, 7, 0, 0, 6, ch120data };
static const unsigned char ch121data[] = {
0x80,0x40,0x20,0x20,0x50,0x50,0x90,0x88,0x88,0x88
};
static const GLUTBitmapChar ch121 = { 5, 10, -1, 3, 7, ch121data };
static const unsigned char ch122data[] = {
0xf0,0x80,0x40,0x40,0x20,0x10,0xf0
};
static const GLUTBitmapChar ch122 = { 4, 7, -1, 0, 6, ch122data };
static const unsigned char ch123data[] = {
0x30,0x40,0x40,0x40,0x40,0x40,0x80,0x40,0x40,0x40,0x40,0x30
};
static const GLUTBitmapChar ch123 = { 4, 12, 0, 3, 4, ch123data };
static const unsigned char ch124data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80
};
static const GLUTBitmapChar ch124 = { 1, 12, -1, 3, 3, ch124data };
static const unsigned char ch125data[] = {
0xc0,0x20,0x20,0x20,0x20,0x20,0x10,0x20,0x20,0x20,0x20,0xc0
};
static const GLUTBitmapChar ch125 = { 4, 12, 0, 3, 4, ch125data };
static const unsigned char ch126data[] = {
0x98,0x64
};
static const GLUTBitmapChar ch126 = { 6, 2, 0, -3, 7, ch126data };
static const unsigned char ch160data[] = {
0x0
};
static const GLUTBitmapChar ch160 = { 1, 1, 0, 0, 4, ch160data };
static const unsigned char ch161data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x80
};
static const GLUTBitmapChar ch161 = { 1, 10, -1, 3, 3, ch161data };
static const unsigned char ch162data[] = {
0x40,0x70,0xc8,0xa0,0xa0,0xa0,0xa8,0x70,0x10
};
static const GLUTBitmapChar ch162 = { 5, 9, -1, 1, 7, ch162data };
static const unsigned char ch163data[] = {
0xb0,0x48,0x20,0x20,0xf0,0x40,0x40,0x48,0x30
};
static const GLUTBitmapChar ch163 = { 5, 9, -1, 0, 7, ch163data };
static const unsigned char ch164data[] = {
0x84,0x78,0x48,0x48,0x78,0x84
};
static const GLUTBitmapChar ch164 = { 6, 6, 0, -1, 7, ch164data };
static const unsigned char ch165data[] = {
0x20,0x20,0xf8,0x20,0xf8,0x20,0x50,0x88,0x88
};
static const GLUTBitmapChar ch165 = { 5, 9, -1, 0, 7, ch165data };
static const unsigned char ch166data[] = {
0x80,0x80,0x80,0x80,0x0,0x0,0x0,0x80,0x80,0x80,0x80
};
static const GLUTBitmapChar ch166 = { 1, 11, -1, 2, 3, ch166data };
static const unsigned char ch167data[] = {
0x70,0x88,0x8,0x30,0x48,0x88,0x88,0x90,0x60,0x80,0x88,0x70
};
static const GLUTBitmapChar ch167 = { 5, 12, 0, 3, 6, ch167data };
static const unsigned char ch168data[] = {
0xa0
};
static const GLUTBitmapChar ch168 = { 3, 1, 0, -8, 3, ch168data };
static const unsigned char ch169data[] = {
0x3e,0x0,0x41,0x0,0x9c,0x80,0xa2,0x80,0xa0,0x80,0xa2,0x80,0x9c,0x80,0x41,0x0,
0x3e,0x0
};
static const GLUTBitmapChar ch169 = { 9, 9, -1, 0, 11, ch169data };
static const unsigned char ch170data[] = {
0xe0,0x0,0xa0,0x20,0xe0
};
static const GLUTBitmapChar ch170 = { 3, 5, -1, -4, 5, ch170data };
static const unsigned char ch171data[] = {
0x28,0x50,0xa0,0x50,0x28
};
static const GLUTBitmapChar ch171 = { 5, 5, -1, -1, 7, ch171data };
static const unsigned char ch172data[] = {
0x4,0x4,0x4,0xfc
};
static const GLUTBitmapChar ch172 = { 6, 4, -1, -2, 8, ch172data };
static const unsigned char ch173data[] = {
0xf0
};
static const GLUTBitmapChar ch173 = { 4, 1, 0, -3, 5, ch173data };
static const unsigned char ch174data[] = {
0x3e,0x0,0x41,0x0,0x94,0x80,0x94,0x80,0x98,0x80,0x94,0x80,0x9c,0x80,0x41,0x0,
0x3e,0x0
};
static const GLUTBitmapChar ch174 = { 9, 9, -1, 0, 11, ch174data };
static const unsigned char ch175data[] = {
0xf0
};
static const GLUTBitmapChar ch175 = { 4, 1, 0, -8, 4, ch175data };
static const unsigned char ch176data[] = {
0x60,0x90,0x90,0x60
};
static const GLUTBitmapChar ch176 = { 4, 4, 0, -4, 5, ch176data };
static const unsigned char ch177data[] = {
0xf8,0x0,0x20,0x20,0xf8,0x20,0x20
};
static const GLUTBitmapChar ch177 = { 5, 7, -1, 0, 7, ch177data };
static const unsigned char ch178data[] = {
0xf0,0x40,0x20,0x90,0x60
};
static const GLUTBitmapChar ch178 = { 4, 5, 0, -3, 4, ch178data };
static const unsigned char ch179data[] = {
0xc0,0x20,0x40,0x20,0xe0
};
static const GLUTBitmapChar ch179 = { 3, 5, 0, -3, 4, ch179data };
static const unsigned char ch180data[] = {
0x80,0x40
};
static const GLUTBitmapChar ch180 = { 2, 2, 0, -8, 2, ch180data };
static const unsigned char ch181data[] = {
0x80,0x80,0x80,0xe8,0x98,0x88,0x88,0x88,0x88,0x88
};
static const GLUTBitmapChar ch181 = { 5, 10, -1, 3, 7, ch181data };
static const unsigned char ch182data[] = {
0x28,0x28,0x28,0x28,0x28,0x28,0x68,0xe8,0xe8,0xe8,0x68,0x3c
};
static const GLUTBitmapChar ch182 = { 6, 12, 0, 3, 7, ch182data };
static const unsigned char ch183data[] = {
0x80
};
static const GLUTBitmapChar ch183 = { 1, 1, -1, -3, 3, ch183data };
static const unsigned char ch184data[] = {
0xc0,0x20,0x20,0x40
};
static const GLUTBitmapChar ch184 = { 3, 4, 0, 3, 3, ch184data };
static const unsigned char ch185data[] = {
0x40,0x40,0x40,0xc0,0x40
};
static const GLUTBitmapChar ch185 = { 2, 5, -1, -3, 4, ch185data };
static const unsigned char ch186data[] = {
0xe0,0x0,0xe0,0xa0,0xe0
};
static const GLUTBitmapChar ch186 = { 3, 5, -1, -4, 5, ch186data };
static const unsigned char ch187data[] = {
0xa0,0x50,0x28,0x50,0xa0
};
static const GLUTBitmapChar ch187 = { 5, 5, -1, -1, 7, ch187data };
static const unsigned char ch188data[] = {
0x41,0x0,0x27,0x80,0x15,0x0,0x13,0x0,0x49,0x0,0x44,0x0,0x44,0x0,0xc2,0x0,
0x41,0x0
};
static const GLUTBitmapChar ch188 = { 9, 9, 0, 0, 10, ch188data };
static const unsigned char ch189data[] = {
0x47,0x80,0x22,0x0,0x11,0x0,0x14,0x80,0x4b,0x0,0x48,0x0,0x44,0x0,0xc2,0x0,
0x41,0x0
};
static const GLUTBitmapChar ch189 = { 9, 9, 0, 0, 10, ch189data };
static const unsigned char ch190data[] = {
0x21,0x0,0x17,0x80,0x15,0x0,0xb,0x0,0xc9,0x0,0x24,0x0,0x44,0x0,0x22,0x0,
0xe1,0x0
};
static const GLUTBitmapChar ch190 = { 9, 9, 0, 0, 10, ch190data };
static const unsigned char ch191data[] = {
0x70,0x88,0x88,0x40,0x40,0x20,0x20,0x0,0x20
};
static const GLUTBitmapChar ch191 = { 5, 9, -1, 3, 7, ch191data };
static const unsigned char ch192data[] = {
0x82,0x82,0x82,0x7c,0x44,0x44,0x28,0x10,0x10,0x0,0x10,0x20
};
static const GLUTBitmapChar ch192 = { 7, 12, -1, 0, 9, ch192data };
static const unsigned char ch193data[] = {
0x82,0x82,0x82,0x7c,0x44,0x44,0x28,0x10,0x10,0x0,0x10,0x8
};
static const GLUTBitmapChar ch193 = { 7, 12, -1, 0, 9, ch193data };
static const unsigned char ch194data[] = {
0x82,0x82,0x82,0x7c,0x44,0x44,0x28,0x10,0x10,0x0,0x28,0x10
};
static const GLUTBitmapChar ch194 = { 7, 12, -1, 0, 9, ch194data };
static const unsigned char ch195data[] = {
0x82,0x82,0x82,0x7c,0x44,0x44,0x28,0x10,0x10,0x0,0x28,0x14
};
static const GLUTBitmapChar ch195 = { 7, 12, -1, 0, 9, ch195data };
static const unsigned char ch196data[] = {
0x82,0x82,0x82,0x7c,0x44,0x44,0x28,0x10,0x10,0x0,0x28
};
static const GLUTBitmapChar ch196 = { 7, 11, -1, 0, 9, ch196data };
static const unsigned char ch197data[] = {
0x82,0x82,0x82,0x7c,0x44,0x44,0x28,0x10,0x10,0x10,0x28,0x10
};
static const GLUTBitmapChar ch197 = { 7, 12, -1, 0, 9, ch197data };
static const unsigned char ch198data[] = {
0x8f,0x80,0x88,0x0,0x88,0x0,0x78,0x0,0x4f,0x80,0x48,0x0,0x28,0x0,0x28,0x0,
0x1f,0x80
};
static const GLUTBitmapChar ch198 = { 9, 9, -1, 0, 11, ch198data };
static const unsigned char ch199data[] = {
0x30,0x8,0x8,0x3c,0x42,0x80,0x80,0x80,0x80,0x80,0x42,0x3c
};
static const GLUTBitmapChar ch199 = { 7, 12, -1, 3, 9, ch199data };
static const unsigned char ch200data[] = {
0xfc,0x80,0x80,0x80,0xfc,0x80,0x80,0x80,0xfc,0x0,0x10,0x20
};
static const GLUTBitmapChar ch200 = { 6, 12, -1, 0, 8, ch200data };
static const unsigned char ch201data[] = {
0xfc,0x80,0x80,0x80,0xfc,0x80,0x80,0x80,0xfc,0x0,0x10,0x8
};
static const GLUTBitmapChar ch201 = { 6, 12, -1, 0, 8, ch201data };
static const unsigned char ch202data[] = {
0xfc,0x80,0x80,0x80,0xfc,0x80,0x80,0x80,0xfc,0x0,0x28,0x10
};
static const GLUTBitmapChar ch202 = { 6, 12, -1, 0, 8, ch202data };
static const unsigned char ch203data[] = {
0xfc,0x80,0x80,0x80,0xfc,0x80,0x80,0x80,0xfc,0x0,0x28
};
static const GLUTBitmapChar ch203 = { 6, 11, -1, 0, 8, ch203data };
static const unsigned char ch204data[] = {
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x0,0x40,0x80
};
static const GLUTBitmapChar ch204 = { 2, 12, 0, 0, 3, ch204data };
static const unsigned char ch205data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x80,0x40
};
static const GLUTBitmapChar ch205 = { 2, 12, -1, 0, 3, ch205data };
static const unsigned char ch206data[] = {
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x0,0xa0,0x40
};
static const GLUTBitmapChar ch206 = { 3, 12, 0, 0, 3, ch206data };
static const unsigned char ch207data[] = {
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x0,0xa0
};
static const GLUTBitmapChar ch207 = { 3, 11, 0, 0, 3, ch207data };
static const unsigned char ch208data[] = {
0x7c,0x42,0x41,0x41,0xf1,0x41,0x41,0x42,0x7c
};
static const GLUTBitmapChar ch208 = { 8, 9, 0, 0, 9, ch208data };
static const unsigned char ch209data[] = {
0x82,0x86,0x8a,0x8a,0x92,0xa2,0xa2,0xc2,0x82,0x0,0x28,0x14
};
static const GLUTBitmapChar ch209 = { 7, 12, -1, 0, 9, ch209data };
static const unsigned char ch210data[] = {
0x3c,0x42,0x81,0x81,0x81,0x81,0x81,0x42,0x3c,0x0,0x8,0x10
};
static const GLUTBitmapChar ch210 = { 8, 12, -1, 0, 10, ch210data };
static const unsigned char ch211data[] = {
0x3c,0x42,0x81,0x81,0x81,0x81,0x81,0x42,0x3c,0x0,0x8,0x4
};
static const GLUTBitmapChar ch211 = { 8, 12, -1, 0, 10, ch211data };
static const unsigned char ch212data[] = {
0x3c,0x42,0x81,0x81,0x81,0x81,0x81,0x42,0x3c,0x0,0x14,0x8
};
static const GLUTBitmapChar ch212 = { 8, 12, -1, 0, 10, ch212data };
static const unsigned char ch213data[] = {
0x3c,0x42,0x81,0x81,0x81,0x81,0x81,0x42,0x3c,0x0,0x28,0x14
};
static const GLUTBitmapChar ch213 = { 8, 12, -1, 0, 10, ch213data };
static const unsigned char ch214data[] = {
0x3c,0x42,0x81,0x81,0x81,0x81,0x81,0x42,0x3c,0x0,0x24
};
static const GLUTBitmapChar ch214 = { 8, 11, -1, 0, 10, ch214data };
static const unsigned char ch215data[] = {
0x88,0x50,0x20,0x50,0x88
};
static const GLUTBitmapChar ch215 = { 5, 5, -1, -1, 7, ch215data };
static const unsigned char ch216data[] = {
0x80,0x0,0x5e,0x0,0x21,0x0,0x50,0x80,0x48,0x80,0x44,0x80,0x44,0x80,0x42,0x80,
0x21,0x0,0x1e,0x80,0x0,0x40
};
static const GLUTBitmapChar ch216 = { 10, 11, 0, 1, 10, ch216data };
static const unsigned char ch217data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x0,0x10,0x20
};
static const GLUTBitmapChar ch217 = { 6, 12, -1, 0, 8, ch217data };
static const unsigned char ch218data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x0,0x10,0x8
};
static const GLUTBitmapChar ch218 = { 6, 12, -1, 0, 8, ch218data };
static const unsigned char ch219data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x0,0x28,0x10
};
static const GLUTBitmapChar ch219 = { 6, 12, -1, 0, 8, ch219data };
static const unsigned char ch220data[] = {
0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x0,0x48
};
static const GLUTBitmapChar ch220 = { 6, 11, -1, 0, 8, ch220data };
static const unsigned char ch221data[] = {
0x10,0x10,0x10,0x10,0x28,0x44,0x44,0x82,0x82,0x0,0x10,0x8
};
static const GLUTBitmapChar ch221 = { 7, 12, -1, 0, 9, ch221data };
static const unsigned char ch222data[] = {
0x80,0x80,0xf8,0x84,0x84,0x84,0xf8,0x80,0x80
};
static const GLUTBitmapChar ch222 = { 6, 9, -1, 0, 8, ch222data };
static const unsigned char ch223data[] = {
0xb0,0x88,0x88,0x88,0xb0,0x88,0x88,0x88,0x70
};
static const GLUTBitmapChar ch223 = { 5, 9, -1, 0, 7, ch223data };
static const unsigned char ch224data[] = {
0x74,0x88,0x88,0x78,0x8,0x88,0x70,0x0,0x10,0x20
};
static const GLUTBitmapChar ch224 = { 6, 10, -1, 0, 7, ch224data };
static const unsigned char ch225data[] = {
0x74,0x88,0x88,0x78,0x8,0x88,0x70,0x0,0x20,0x10
};
static const GLUTBitmapChar ch225 = { 6, 10, -1, 0, 7, ch225data };
static const unsigned char ch226data[] = {
0x74,0x88,0x88,0x78,0x8,0x88,0x70,0x0,0x50,0x20
};
static const GLUTBitmapChar ch226 = { 6, 10, -1, 0, 7, ch226data };
static const unsigned char ch227data[] = {
0x74,0x88,0x88,0x78,0x8,0x88,0x70,0x0,0x50,0x28
};
static const GLUTBitmapChar ch227 = { 6, 10, -1, 0, 7, ch227data };
static const unsigned char ch228data[] = {
0x74,0x88,0x88,0x78,0x8,0x88,0x70,0x0,0x50
};
static const GLUTBitmapChar ch228 = { 6, 9, -1, 0, 7, ch228data };
static const unsigned char ch229data[] = {
0x74,0x88,0x88,0x78,0x8,0x88,0x70,0x30,0x48,0x30
};
static const GLUTBitmapChar ch229 = { 6, 10, -1, 0, 7, ch229data };
static const unsigned char ch230data[] = {
0x77,0x0,0x88,0x80,0x88,0x0,0x7f,0x80,0x8,0x80,0x88,0x80,0x77,0x0
};
static const GLUTBitmapChar ch230 = { 9, 7, -1, 0, 11, ch230data };
static const unsigned char ch231data[] = {
0x60,0x10,0x20,0x70,0x88,0x80,0x80,0x80,0x88,0x70
};
static const GLUTBitmapChar ch231 = { 5, 10, -1, 3, 7, ch231data };
static const unsigned char ch232data[] = {
0x70,0x88,0x80,0xf8,0x88,0x88,0x70,0x0,0x20,0x40
};
static const GLUTBitmapChar ch232 = { 5, 10, -1, 0, 7, ch232data };
static const unsigned char ch233data[] = {
0x70,0x88,0x80,0xf8,0x88,0x88,0x70,0x0,0x20,0x10
};
static const GLUTBitmapChar ch233 = { 5, 10, -1, 0, 7, ch233data };
static const unsigned char ch234data[] = {
0x70,0x88,0x80,0xf8,0x88,0x88,0x70,0x0,0x50,0x20
};
static const GLUTBitmapChar ch234 = { 5, 10, -1, 0, 7, ch234data };
static const unsigned char ch235data[] = {
0x70,0x88,0x80,0xf8,0x88,0x88,0x70,0x0,0x50
};
static const GLUTBitmapChar ch235 = { 5, 9, -1, 0, 7, ch235data };
static const unsigned char ch236data[] = {
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x0,0x40,0x80
};
static const GLUTBitmapChar ch236 = { 2, 10, 0, 0, 3, ch236data };
static const unsigned char ch237data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x80,0x40
};
static const GLUTBitmapChar ch237 = { 2, 10, -1, 0, 3, ch237data };
static const unsigned char ch238data[] = {
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x0,0xa0,0x40
};
static const GLUTBitmapChar ch238 = { 3, 10, 0, 0, 3, ch238data };
static const unsigned char ch239data[] = {
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x0,0xa0
};
static const GLUTBitmapChar ch239 = { 3, 9, 0, 0, 3, ch239data };
static const unsigned char ch240data[] = {
0x70,0x88,0x88,0x88,0x88,0x78,0x8,0x50,0x30,0x68
};
static const GLUTBitmapChar ch240 = { 5, 10, -1, 0, 7, ch240data };
static const unsigned char ch241data[] = {
0x88,0x88,0x88,0x88,0x88,0xc8,0xb0,0x0,0x50,0x28
};
static const GLUTBitmapChar ch241 = { 5, 10, -1, 0, 7, ch241data };
static const unsigned char ch242data[] = {
0x70,0x88,0x88,0x88,0x88,0x88,0x70,0x0,0x20,0x40
};
static const GLUTBitmapChar ch242 = { 5, 10, -1, 0, 7, ch242data };
static const unsigned char ch243data[] = {
0x70,0x88,0x88,0x88,0x88,0x88,0x70,0x0,0x20,0x10
};
static const GLUTBitmapChar ch243 = { 5, 10, -1, 0, 7, ch243data };
static const unsigned char ch244data[] = {
0x70,0x88,0x88,0x88,0x88,0x88,0x70,0x0,0x50,0x20
};
static const GLUTBitmapChar ch244 = { 5, 10, -1, 0, 7, ch244data };
static const unsigned char ch245data[] = {
0x70,0x88,0x88,0x88,0x88,0x88,0x70,0x0,0x50,0x28
};
static const GLUTBitmapChar ch245 = { 5, 10, -1, 0, 7, ch245data };
static const unsigned char ch246data[] = {
0x70,0x88,0x88,0x88,0x88,0x88,0x70,0x0,0x50
};
static const GLUTBitmapChar ch246 = { 5, 9, -1, 0, 7, ch246data };
static const unsigned char ch247data[] = {
0x20,0x0,0xf8,0x0,0x20
};
static const GLUTBitmapChar ch247 = { 5, 5, -1, -1, 7, ch247data };
static const unsigned char ch248data[] = {
0xb8,0x44,0x64,0x54,0x4c,0x44,0x3a
};
static const GLUTBitmapChar ch248 = { 7, 7, 0, 0, 7, ch248data };
static const unsigned char ch249data[] = {
0x68,0x98,0x88,0x88,0x88,0x88,0x88,0x0,0x20,0x40
};
static const GLUTBitmapChar ch249 = { 5, 10, -1, 0, 7, ch249data };
static const unsigned char ch250data[] = {
0x68,0x98,0x88,0x88,0x88,0x88,0x88,0x0,0x20,0x10
};
static const GLUTBitmapChar ch250 = { 5, 10, -1, 0, 7, ch250data };
static const unsigned char ch251data[] = {
0x68,0x98,0x88,0x88,0x88,0x88,0x88,0x0,0x50,0x20
};
static const GLUTBitmapChar ch251 = { 5, 10, -1, 0, 7, ch251data };
static const unsigned char ch252data[] = {
0x68,0x98,0x88,0x88,0x88,0x88,0x88,0x0,0x50
};
static const GLUTBitmapChar ch252 = { 5, 9, -1, 0, 7, ch252data };
static const unsigned char ch253data[] = {
0x80,0x40,0x20,0x20,0x50,0x50,0x90,0x88,0x88,0x88,0x0,0x20,0x10
};
static const GLUTBitmapChar ch253 = { 5, 13, -1, 3, 7, ch253data };
static const unsigned char ch254data[] = {
0x80,0x80,0x80,0xb0,0xc8,0x88,0x88,0x88,0xc8,0xb0,0x80,0x80
};
static const GLUTBitmapChar ch254 = { 5, 12, -1, 3, 7, ch254data };
static const unsigned char ch255data[] = {
0xc0,0x20,0x20,0x20,0x30,0x50,0x50,0x48,0x88,0x88,0x0,0x50
};
static const GLUTBitmapChar ch255 = { 5, 12, -1, 3, 7, ch255data };
static const GLUTBitmapChar *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, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
&ch160, &ch161, &ch162, &ch163, &ch164, &ch165, &ch166, &ch167,
&ch168, &ch169, &ch170, &ch171, &ch172, &ch173, &ch174, &ch175,
&ch176, &ch177, &ch178, &ch179, &ch180, &ch181, &ch182, &ch183,
&ch184, &ch185, &ch186, &ch187, &ch188, &ch189, &ch190, &ch191,
&ch192, &ch193, &ch194, &ch195, &ch196, &ch197, &ch198, &ch199,
&ch200, &ch201, &ch202, &ch203, &ch204, &ch205, &ch206, &ch207,
&ch208, &ch209, &ch210, &ch211, &ch212, &ch213, &ch214, &ch215,
&ch216, &ch217, &ch218, &ch219, &ch220, &ch221, &ch222, &ch223,
&ch224, &ch225, &ch226, &ch227, &ch228, &ch229, &ch230, &ch231,
&ch232, &ch233, &ch234, &ch235, &ch236, &ch237, &ch238, &ch239,
&ch240, &ch241, &ch242, &ch243, &ch244, &ch245, &ch246, &ch247,
&ch248, &ch249, &ch250, &ch251, &ch252, &ch253, &ch254, &ch255
};
const GLUTBitmapFont glutBitmapHelvetica12 = {
"-Adobe-Helvetica-Medium-R-Normal--12-120-75-75-P-67-ISO8859-1",
15, 256, chars
};
/* autogenerated by bdf2c! do not edit */
/* "Copyright (c) 1984, 1987 Adobe Systems Incorporated. All Rights Reserved. Copyright (c) 1988, 1991 Digital Equipment Corporation. All Rights Reserved." */
#include "internal.h"
/*
typedef struct {
int width, height;
int xorig, yorig;
int xmove;
const unsigned char *bitmap;
} GLUTBitmapChar;
typedef struct {
const char *name;
int height;
int num;
const GLUTBitmapChar *const *table;
} GLUTBitmapFont;
*/
static const unsigned char ch32data[] = {
0x0
};
static const GLUTBitmapChar ch32 = { 1, 1, 0, 0, 5, ch32data };
static const unsigned char ch33data[] = {
0xc0,0xc0,0x0,0x0,0x80,0x80,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0
};
static const GLUTBitmapChar ch33 = { 2, 14, -2, 0, 6, ch33data };
static const unsigned char ch34data[] = {
0x90,0x90,0xd8,0xd8,0xd8
};
static const GLUTBitmapChar ch34 = { 5, 5, 0, -9, 5, ch34data };
static const unsigned char ch35data[] = {
0x24,0x0,0x24,0x0,0x24,0x0,0xff,0x80,0xff,0x80,0x12,0x0,0x12,0x0,0x12,0x0,
0x7f,0xc0,0x7f,0xc0,0x9,0x0,0x9,0x0,0x9,0x0
};
static const GLUTBitmapChar ch35 = { 10, 13, 0, 0, 10, ch35data };
static const unsigned char ch36data[] = {
0x8,0x0,0x8,0x0,0x3e,0x0,0x7f,0x0,0xeb,0x80,0xc9,0x80,0x9,0x80,0xf,0x0,
0x3e,0x0,0x78,0x0,0xe8,0x0,0xc8,0x0,0xcb,0x0,0x7f,0x0,0x3e,0x0,0x8,0x0
};
static const GLUTBitmapChar ch36 = { 9, 16, -1, 2, 10, ch36data };
static const unsigned char ch37data[] = {
0x18,0x78,0x18,0xfc,0xc,0xcc,0xc,0xcc,0x6,0xfc,0x6,0x78,0x3,0x0,0x7b,0x0,
0xfd,0x80,0xcd,0x80,0xcc,0xc0,0xfc,0xc0,0x78,0x60
};
static const GLUTBitmapChar ch37 = { 14, 13, -1, 0, 16, ch37data };
static const unsigned char ch38data[] = {
0x3c,0x70,0x7e,0xe0,0xe7,0xc0,0xc3,0x80,0xc3,0xc0,0xc6,0xc0,0xee,0xc0,0x7c,0x0,
0x3c,0x0,0x66,0x0,0x66,0x0,0x7e,0x0,0x3c,0x0
};
static const GLUTBitmapChar ch38 = { 12, 13, -1, 0, 13, ch38data };
static const unsigned char ch39data[] = {
0x80,0x40,0x40,0xc0,0xc0
};
static const GLUTBitmapChar ch39 = { 2, 5, -1, -9, 4, ch39data };
static const unsigned char ch40data[] = {
0x10,0x30,0x60,0x60,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x60,0x60,
0x30,0x10
};
static const GLUTBitmapChar ch40 = { 4, 18, -1, 4, 6, ch40data };
static const unsigned char ch41data[] = {
0x80,0xc0,0x60,0x60,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x60,0x60,
0xc0,0x80
};
static const GLUTBitmapChar ch41 = { 4, 18, -1, 4, 6, ch41data };
static const unsigned char ch42data[] = {
0x88,0x70,0x70,0xf8,0x20,0x20
};
static const GLUTBitmapChar ch42 = { 5, 6, -1, -8, 7, ch42data };
static const unsigned char ch43data[] = {
0x18,0x18,0x18,0x18,0xff,0xff,0x18,0x18,0x18,0x18
};
static const GLUTBitmapChar ch43 = { 8, 10, -1, 0, 10, ch43data };
static const unsigned char ch44data[] = {
0x80,0x40,0x40,0xc0,0xc0
};
static const GLUTBitmapChar ch44 = { 2, 5, -1, 3, 5, ch44data };
static const unsigned char ch45data[] = {
0xff,0xff
};
static const GLUTBitmapChar ch45 = { 8, 2, -1, -4, 11, ch45data };
static const unsigned char ch46data[] = {
0xc0,0xc0
};
static const GLUTBitmapChar ch46 = { 2, 2, -1, 0, 5, ch46data };
static const unsigned char ch47data[] = {
0xc0,0xc0,0x40,0x40,0x60,0x60,0x20,0x20,0x30,0x30,0x10,0x10,0x18,0x18
};
static const GLUTBitmapChar ch47 = { 5, 14, 0, 0, 5, ch47data };
static const unsigned char ch48data[] = {
0x3c,0x7e,0x66,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0x66,0x7e,0x3c
};
static const GLUTBitmapChar ch48 = { 8, 13, -1, 0, 10, ch48data };
static const unsigned char ch49data[] = {
0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xf8,0xf8,0x18
};
static const GLUTBitmapChar ch49 = { 5, 13, -2, 0, 10, ch49data };
static const unsigned char ch50data[] = {
0xff,0xff,0xc0,0xe0,0x70,0x38,0x1c,0xe,0x7,0x3,0xc3,0xfe,0x3c
};
static const GLUTBitmapChar ch50 = { 8, 13, -1, 0, 10, ch50data };
static const unsigned char ch51data[] = {
0x3c,0x7e,0xc7,0xc3,0x3,0x7,0x1e,0x1c,0x6,0xc3,0xc3,0x7e,0x3c
};
static const GLUTBitmapChar ch51 = { 8, 13, -1, 0, 10, ch51data };
static const unsigned char ch52data[] = {
0x3,0x0,0x3,0x0,0x3,0x0,0xff,0x80,0xff,0x80,0xc3,0x0,0x63,0x0,0x33,0x0,
0x33,0x0,0x1b,0x0,0xf,0x0,0x7,0x0,0x3,0x0
};
static const GLUTBitmapChar ch52 = { 9, 13, -1, 0, 10, ch52data };
static const unsigned char ch53data[] = {
0x7c,0xfe,0xc7,0xc3,0x3,0x3,0xc7,0xfe,0xfc,0xc0,0xc0,0xfe,0xfe
};
static const GLUTBitmapChar ch53 = { 8, 13, -1, 0, 10, ch53data };
static const unsigned char ch54data[] = {
0x3c,0x7e,0xe3,0xc3,0xc3,0xc3,0xfe,0xdc,0xc0,0xc0,0x63,0x7f,0x3c
};
static const GLUTBitmapChar ch54 = { 8, 13, -1, 0, 10, ch54data };
static const unsigned char ch55data[] = {
0x60,0x60,0x30,0x30,0x30,0x18,0x18,0xc,0xc,0x6,0x3,0xff,0xff
};
static const GLUTBitmapChar ch55 = { 8, 13, -1, 0, 10, ch55data };
static const unsigned char ch56data[] = {
0x3c,0x7e,0xe7,0xc3,0xc3,0x66,0x7e,0x66,0xc3,0xc3,0xe7,0x7e,0x3c
};
static const GLUTBitmapChar ch56 = { 8, 13, -1, 0, 10, ch56data };
static const unsigned char ch57data[] = {
0x7c,0xfe,0xc6,0x3,0x3,0x3b,0x7f,0xc3,0xc3,0xc3,0xc7,0x7e,0x3c
};
static const GLUTBitmapChar ch57 = { 8, 13, -1, 0, 10, ch57data };
static const unsigned char ch58data[] = {
0xc0,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0xc0
};
static const GLUTBitmapChar ch58 = { 2, 10, -1, 0, 5, ch58data };
static const unsigned char ch59data[] = {
0x80,0x40,0x40,0xc0,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0xc0
};
static const GLUTBitmapChar ch59 = { 2, 13, -1, 3, 5, ch59data };
static const unsigned char ch60data[] = {
0x3,0xf,0x3c,0x70,0xc0,0x70,0x3c,0xf,0x3
};
static const GLUTBitmapChar ch60 = { 8, 9, -1, 0, 10, ch60data };
static const unsigned char ch61data[] = {
0xfe,0xfe,0x0,0x0,0xfe,0xfe
};
static const GLUTBitmapChar ch61 = { 7, 6, -2, -2, 11, ch61data };
static const unsigned char ch62data[] = {
0xc0,0xf0,0x3c,0xe,0x3,0xe,0x3c,0xf0,0xc0
};
static const GLUTBitmapChar ch62 = { 8, 9, -1, 0, 10, ch62data };
static const unsigned char ch63data[] = {
0x30,0x30,0x0,0x0,0x30,0x30,0x30,0x38,0x1c,0xe,0xc6,0xc6,0xfe,0x7c
};
static const GLUTBitmapChar ch63 = { 7, 14, -1, 0, 10, ch63data };
static const unsigned char ch64data[] = {
0x7,0xe0,0x1f,0xf0,0x38,0x0,0x70,0x0,0x67,0x70,0xcf,0xf8,0xcc,0xcc,0xcc,0x66,
0xcc,0x66,0xcc,0x63,0xc6,0x33,0x67,0x73,0x63,0xb3,0x30,0x6,0x1c,0xe,0xf,0xfc,
0x3,0xf0
};
static const GLUTBitmapChar ch64 = { 16, 17, -1, 3, 18, ch64data };
static const unsigned char ch65data[] = {
0xc0,0x30,0xc0,0x30,0x60,0x60,0x60,0x60,0x7f,0xe0,0x3f,0xc0,0x30,0xc0,0x30,0xc0,
0x19,0x80,0x19,0x80,0xf,0x0,0xf,0x0,0x6,0x0,0x6,0x0
};
static const GLUTBitmapChar ch65 = { 12, 14, 0, 0, 12, ch65data };
static const unsigned char ch66data[] = {
0xff,0x80,0xff,0xc0,0xc0,0xe0,0xc0,0x60,0xc0,0x60,0xc0,0xe0,0xff,0xc0,0xff,0x80,
0xc1,0x80,0xc0,0xc0,0xc0,0xc0,0xc1,0xc0,0xff,0x80,0xff,0x0
};
static const GLUTBitmapChar ch66 = { 11, 14, -1, 0, 13, ch66data };
static const unsigned char ch67data[] = {
0xf,0x80,0x3f,0xe0,0x70,0x70,0x60,0x30,0xe0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,
0xc0,0x0,0xe0,0x0,0x60,0x30,0x70,0x70,0x3f,0xe0,0xf,0x80
};
static const GLUTBitmapChar ch67 = { 12, 14, -1, 0, 14, ch67data };
static const unsigned char ch68data[] = {
0xff,0x0,0xff,0x80,0xc1,0xc0,0xc0,0xc0,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,
0xc0,0x60,0xc0,0x60,0xc0,0xc0,0xc1,0xc0,0xff,0x80,0xff,0x0
};
static const GLUTBitmapChar ch68 = { 11, 14, -1, 0, 13, ch68data };
static const unsigned char ch69data[] = {
0xff,0x80,0xff,0x80,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x0,0xff,0x0,
0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x80,0xff,0x80
};
static const GLUTBitmapChar ch69 = { 9, 14, -1, 0, 11, ch69data };
static const unsigned char ch70data[] = {
0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x0,0xff,0x0,
0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x80,0xff,0x80
};
static const GLUTBitmapChar ch70 = { 9, 14, -1, 0, 11, ch70data };
static const unsigned char ch71data[] = {
0xf,0xb0,0x3f,0xf0,0x70,0x70,0x60,0x30,0xe0,0x30,0xc1,0xf0,0xc1,0xf0,0xc0,0x0,
0xc0,0x0,0xe0,0x30,0x60,0x30,0x70,0x70,0x3f,0xe0,0xf,0x80
};
static const GLUTBitmapChar ch71 = { 12, 14, -1, 0, 14, ch71data };
static const unsigned char ch72data[] = {
0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xff,0xe0,0xff,0xe0,
0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60
};
static const GLUTBitmapChar ch72 = { 11, 14, -1, 0, 13, ch72data };
static const unsigned char ch73data[] = {
0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0
};
static const GLUTBitmapChar ch73 = { 2, 14, -2, 0, 6, ch73data };
static const unsigned char ch74data[] = {
0x3c,0x7e,0xe7,0xc3,0xc3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3
};
static const GLUTBitmapChar ch74 = { 8, 14, -1, 0, 10, ch74data };
static const unsigned char ch75data[] = {
0xc0,0x70,0xc0,0xe0,0xc1,0xc0,0xc3,0x80,0xc7,0x0,0xce,0x0,0xfc,0x0,0xf8,0x0,
0xdc,0x0,0xce,0x0,0xc7,0x0,0xc3,0x80,0xc1,0xc0,0xc0,0xe0
};
static const GLUTBitmapChar ch75 = { 12, 14, -1, 0, 13, ch75data };
static const unsigned char ch76data[] = {
0xff,0xff,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0
};
static const GLUTBitmapChar ch76 = { 8, 14, -1, 0, 10, ch76data };
static const unsigned char ch77data[] = {
0xc3,0xc,0xc3,0xc,0xc7,0x8c,0xc4,0x8c,0xcc,0xcc,0xcc,0xcc,0xd8,0x6c,0xd8,0x6c,
0xf0,0x3c,0xf0,0x3c,0xe0,0x1c,0xe0,0x1c,0xc0,0xc,0xc0,0xc
};
static const GLUTBitmapChar ch77 = { 14, 14, -1, 0, 16, ch77data };
static const unsigned char ch78data[] = {
0xc0,0x60,0xc0,0xe0,0xc1,0xe0,0xc1,0xe0,0xc3,0x60,0xc6,0x60,0xc6,0x60,0xcc,0x60,
0xcc,0x60,0xd8,0x60,0xf0,0x60,0xf0,0x60,0xe0,0x60,0xc0,0x60
};
static const GLUTBitmapChar ch78 = { 11, 14, -1, 0, 13, ch78data };
static const unsigned char ch79data[] = {
0xf,0x80,0x3f,0xe0,0x70,0x70,0x60,0x30,0xe0,0x38,0xc0,0x18,0xc0,0x18,0xc0,0x18,
0xc0,0x18,0xe0,0x38,0x60,0x30,0x70,0x70,0x3f,0xe0,0xf,0x80
};
static const GLUTBitmapChar ch79 = { 13, 14, -1, 0, 15, ch79data };
static const unsigned char ch80data[] = {
0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x0,0xff,0x80,
0xc1,0xc0,0xc0,0xc0,0xc0,0xc0,0xc1,0xc0,0xff,0x80,0xff,0x0
};
static const GLUTBitmapChar ch80 = { 10, 14, -1, 0, 12, ch80data };
static const unsigned char ch81data[] = {
0x0,0x30,0xf,0xb0,0x3f,0xe0,0x70,0xf0,0x61,0xb0,0xe1,0xb8,0xc0,0x18,0xc0,0x18,
0xc0,0x18,0xc0,0x18,0xe0,0x38,0x60,0x30,0x70,0x70,0x3f,0xe0,0xf,0x80
};
static const GLUTBitmapChar ch81 = { 13, 15, -1, 1, 15, ch81data };
static const unsigned char ch82data[] = {
0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc1,0x80,0xc1,0x80,0xff,0x0,0xff,0x80,
0xc1,0xc0,0xc0,0xc0,0xc0,0xc0,0xc1,0xc0,0xff,0x80,0xff,0x0
};
static const GLUTBitmapChar ch82 = { 10, 14, -1, 0, 12, ch82data };
static const unsigned char ch83data[] = {
0x3f,0x0,0x7f,0xc0,0xe0,0xe0,0xc0,0x60,0x0,0x60,0x0,0xe0,0x3,0xc0,0x1f,0x0,
0x7c,0x0,0xe0,0x0,0xc0,0x60,0xe0,0xe0,0x7f,0xc0,0x1f,0x0
};
static const GLUTBitmapChar ch83 = { 11, 14, -1, 0, 13, ch83data };
static const unsigned char ch84data[] = {
0xc,0x0,0xc,0x0,0xc,0x0,0xc,0x0,0xc,0x0,0xc,0x0,0xc,0x0,0xc,0x0,
0xc,0x0,0xc,0x0,0xc,0x0,0xc,0x0,0xff,0xc0,0xff,0xc0
};
static const GLUTBitmapChar ch84 = { 10, 14, -1, 0, 12, ch84data };
static const unsigned char ch85data[] = {
0x1f,0x0,0x7f,0xc0,0x60,0xc0,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,
0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60
};
static const GLUTBitmapChar ch85 = { 11, 14, -1, 0, 13, ch85data };
static const unsigned char ch86data[] = {
0x6,0x0,0xf,0x0,0xf,0x0,0x19,0x80,0x19,0x80,0x19,0x80,0x30,0xc0,0x30,0xc0,
0x30,0xc0,0x60,0x60,0x60,0x60,0x60,0x60,0xc0,0x30,0xc0,0x30
};
static const GLUTBitmapChar ch86 = { 12, 14, -1, 0, 14, ch86data };
static const unsigned char ch87data[] = {
0x18,0x18,0x18,0x18,0x1c,0x38,0x34,0x2c,0x36,0x6c,0x36,0x6c,0x66,0x66,0x66,0x66,
0x62,0x46,0x63,0xc6,0xc3,0xc3,0xc1,0x83,0xc1,0x83,0xc1,0x83
};
static const GLUTBitmapChar ch87 = { 16, 14, -1, 0, 18, ch87data };
static const unsigned char ch88data[] = {
0xc0,0x60,0xe0,0xe0,0x60,0xc0,0x71,0xc0,0x31,0x80,0x1b,0x0,0xe,0x0,0xe,0x0,
0x1b,0x0,0x31,0x80,0x71,0xc0,0x60,0xc0,0xe0,0xe0,0xc0,0x60
};
static const GLUTBitmapChar ch88 = { 11, 14, -1, 0, 13, ch88data };
static const unsigned char ch89data[] = {
0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0xf,0x0,0x19,0x80,
0x30,0xc0,0x30,0xc0,0x60,0x60,0x60,0x60,0xc0,0x30,0xc0,0x30
};
static const GLUTBitmapChar ch89 = { 12, 14, -1, 0, 14, ch89data };
static const unsigned char ch90data[] = {
0xff,0xc0,0xff,0xc0,0xc0,0x0,0x60,0x0,0x30,0x0,0x18,0x0,0x1c,0x0,0xc,0x0,
0x6,0x0,0x3,0x0,0x1,0x80,0x0,0xc0,0xff,0xc0,0xff,0xc0
};
static const GLUTBitmapChar ch90 = { 10, 14, -1, 0, 12, ch90data };
static const unsigned char ch91data[] = {
0xf0,0xf0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
0xf0,0xf0
};
static const GLUTBitmapChar ch91 = { 4, 18, -1, 4, 5, ch91data };
static const unsigned char ch92data[] = {
0x18,0x18,0x10,0x10,0x30,0x30,0x20,0x20,0x60,0x60,0x40,0x40,0xc0,0xc0
};
static const GLUTBitmapChar ch92 = { 5, 14, 0, 0, 5, ch92data };
static const unsigned char ch93data[] = {
0xf0,0xf0,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
0xf0,0xf0
};
static const GLUTBitmapChar ch93 = { 4, 18, 0, 4, 5, ch93data };
static const unsigned char ch94data[] = {
0x82,0xc6,0x6c,0x38,0x10
};
static const GLUTBitmapChar ch94 = { 7, 5, -1, -8, 9, ch94data };
static const unsigned char ch95data[] = {
0xff,0xc0,0xff,0xc0
};
static const GLUTBitmapChar ch95 = { 10, 2, 0, 4, 10, ch95data };
static const unsigned char ch96data[] = {
0xc0,0xc0,0x80,0x80,0x40
};
static const GLUTBitmapChar ch96 = { 2, 5, -1, -9, 4, ch96data };
static const unsigned char ch97data[] = {
0x76,0xee,0xc6,0xc6,0xe6,0x7e,0xe,0xc6,0xee,0x7c
};
static const GLUTBitmapChar ch97 = { 7, 10, -1, 0, 9, ch97data };
static const unsigned char ch98data[] = {
0xde,0x0,0xff,0x0,0xe3,0x0,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xe3,0x0,
0xff,0x0,0xde,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0
};
static const GLUTBitmapChar ch98 = { 9, 14, -1, 0, 11, ch98data };
static const unsigned char ch99data[] = {
0x3e,0x7f,0x63,0xc0,0xc0,0xc0,0xc0,0x63,0x7f,0x3e
};
static const GLUTBitmapChar ch99 = { 8, 10, -1, 0, 10, ch99data };
static const unsigned char ch100data[] = {
0x3d,0x80,0x7f,0x80,0x63,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0x63,0x80,
0x7f,0x80,0x3d,0x80,0x1,0x80,0x1,0x80,0x1,0x80,0x1,0x80
};
static const GLUTBitmapChar ch100 = { 9, 14, -1, 0, 11, ch100data };
static const unsigned char ch101data[] = {
0x3c,0x7f,0xe3,0xc0,0xc0,0xff,0xc3,0xc3,0x7e,0x3c
};
static const GLUTBitmapChar ch101 = { 8, 10, -1, 0, 10, ch101data };
static const unsigned char ch102data[] = {
0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0xfc,0xfc,0x30,0x30,0x3c,0x1c
};
static const GLUTBitmapChar ch102 = { 6, 14, 0, 0, 6, ch102data };
static const unsigned char ch103data[] = {
0x1c,0x0,0x7f,0x0,0x63,0x0,0x1,0x80,0x3d,0x80,0x7f,0x80,0x63,0x80,0xc1,0x80,
0xc1,0x80,0xc1,0x80,0xc1,0x80,0x61,0x80,0x7f,0x80,0x3d,0x80
};
static const GLUTBitmapChar ch103 = { 9, 14, -1, 4, 11, ch103data };
static const unsigned char ch104data[] = {
0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xe3,0xdf,0xce,0xc0,0xc0,0xc0,0xc0
};
static const GLUTBitmapChar ch104 = { 8, 14, -1, 0, 10, ch104data };
static const unsigned char ch105data[] = {
0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x0,0x0,0xc0,0xc0
};
static const GLUTBitmapChar ch105 = { 2, 14, -1, 0, 4, ch105data };
static const unsigned char ch106data[] = {
0xe0,0xf0,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x0,0x0,
0x30,0x30
};
static const GLUTBitmapChar ch106 = { 4, 18, 1, 4, 4, ch106data };
static const unsigned char ch107data[] = {
0xc7,0xc6,0xce,0xcc,0xd8,0xf8,0xf0,0xd8,0xcc,0xc6,0xc0,0xc0,0xc0,0xc0
};
static const GLUTBitmapChar ch107 = { 8, 14, -1, 0, 9, ch107data };
static const unsigned char ch108data[] = {
0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0
};
static const GLUTBitmapChar ch108 = { 2, 14, -1, 0, 4, ch108data };
static const unsigned char ch109data[] = {
0xc6,0x30,0xc6,0x30,0xc6,0x30,0xc6,0x30,0xc6,0x30,0xc6,0x30,0xc6,0x30,0xe7,0x30,
0xde,0xf0,0xcc,0x60
};
static const GLUTBitmapChar ch109 = { 12, 10, -1, 0, 14, ch109data };
static const unsigned char ch110data[] = {
0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xe3,0xdf,0xce
};
static const GLUTBitmapChar ch110 = { 8, 10, -1, 0, 10, ch110data };
static const unsigned char ch111data[] = {
0x3e,0x0,0x7f,0x0,0x63,0x0,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0x63,0x0,
0x7f,0x0,0x3e,0x0
};
static const GLUTBitmapChar ch111 = { 9, 10, -1, 0, 11, ch111data };
static const unsigned char ch112data[] = {
0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xde,0x0,0xff,0x0,0xe3,0x0,0xc1,0x80,
0xc1,0x80,0xc1,0x80,0xc1,0x80,0xe3,0x0,0xff,0x0,0xde,0x0
};
static const GLUTBitmapChar ch112 = { 9, 14, -1, 4, 11, ch112data };
static const unsigned char ch113data[] = {
0x1,0x80,0x1,0x80,0x1,0x80,0x1,0x80,0x3d,0x80,0x7f,0x80,0x63,0x80,0xc1,0x80,
0xc1,0x80,0xc1,0x80,0xc1,0x80,0x63,0x80,0x7f,0x80,0x3d,0x80
};
static const GLUTBitmapChar ch113 = { 9, 14, -1, 4, 11, ch113data };
static const unsigned char ch114data[] = {
0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xe0,0xd8,0xd8
};
static const GLUTBitmapChar ch114 = { 5, 10, -1, 0, 6, ch114data };
static const unsigned char ch115data[] = {
0x78,0xfc,0xc6,0x6,0x3e,0xfc,0xc0,0xc6,0x7e,0x3c
};
static const GLUTBitmapChar ch115 = { 7, 10, -1, 0, 9, ch115data };
static const unsigned char ch116data[] = {
0x18,0x38,0x30,0x30,0x30,0x30,0x30,0x30,0xfc,0xfc,0x30,0x30,0x30
};
static const GLUTBitmapChar ch116 = { 6, 13, 0, 0, 6, ch116data };
static const unsigned char ch117data[] = {
0x73,0xfb,0xc7,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3
};
static const GLUTBitmapChar ch117 = { 8, 10, -1, 0, 10, ch117data };
static const unsigned char ch118data[] = {
0x18,0x18,0x3c,0x24,0x66,0x66,0x66,0xc3,0xc3,0xc3
};
static const GLUTBitmapChar ch118 = { 8, 10, -1, 0, 10, ch118data };
static const unsigned char ch119data[] = {
0x19,0x80,0x19,0x80,0x39,0xc0,0x29,0x40,0x69,0x60,0x66,0x60,0x66,0x60,0xc6,0x30,
0xc6,0x30,0xc6,0x30
};
static const GLUTBitmapChar ch119 = { 12, 10, -1, 0, 14, ch119data };
static const unsigned char ch120data[] = {
0xc3,0xe7,0x66,0x3c,0x18,0x18,0x3c,0x66,0xe7,0xc3
};
static const GLUTBitmapChar ch120 = { 8, 10, -1, 0, 10, ch120data };
static const unsigned char ch121data[] = {
0x70,0x70,0x18,0x18,0x18,0x18,0x3c,0x24,0x66,0x66,0x66,0xc3,0xc3,0xc3
};
static const GLUTBitmapChar ch121 = { 8, 14, -1, 4, 10, ch121data };
static const unsigned char ch122data[] = {
0xfe,0xfe,0xc0,0x60,0x30,0x18,0xc,0x6,0xfe,0xfe
};
static const GLUTBitmapChar ch122 = { 7, 10, -1, 0, 9, ch122data };
static const unsigned char ch123data[] = {
0xc,0x18,0x30,0x30,0x30,0x30,0x30,0x30,0x60,0xc0,0x60,0x30,0x30,0x30,0x30,0x30,
0x18,0xc
};
static const GLUTBitmapChar ch123 = { 6, 18, 0, 4, 6, ch123data };
static const unsigned char ch124data[] = {
0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
0xc0,0xc0
};
static const GLUTBitmapChar ch124 = { 2, 18, -1, 4, 4, ch124data };
static const unsigned char ch125data[] = {
0xc0,0x60,0x30,0x30,0x30,0x30,0x30,0x30,0x18,0xc,0x18,0x30,0x30,0x30,0x30,0x30,
0x60,0xc0
};
static const GLUTBitmapChar ch125 = { 6, 18, 0, 4, 6, ch125data };
static const unsigned char ch126data[] = {
0xcc,0x7e,0x33
};
static const GLUTBitmapChar ch126 = { 8, 3, -1, -4, 10, ch126data };
static const unsigned char ch160data[] = {
0x0
};
static const GLUTBitmapChar ch160 = { 1, 1, 0, 0, 5, ch160data };
static const unsigned char ch161data[] = {
0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x40,0x40,0x0,0x0,0xc0,0xc0
};
static const GLUTBitmapChar ch161 = { 2, 14, -2, 4, 6, ch161data };
static const unsigned char ch162data[] = {
0x10,0x10,0x3e,0x7f,0x6b,0xc8,0xc8,0xc8,0xc8,0x6b,0x7f,0x3e,0x4,0x4
};
static const GLUTBitmapChar ch162 = { 8, 14, -1, 2, 10, ch162data };
static const unsigned char ch163data[] = {
0xdf,0x0,0xff,0x80,0x60,0x80,0x30,0x0,0x18,0x0,0x18,0x0,0x7e,0x0,0x30,0x0,
0x60,0x0,0x61,0x80,0x61,0x80,0x3f,0x0,0x1e,0x0
};
static const GLUTBitmapChar ch163 = { 9, 13, 0, 0, 10, ch163data };
static const unsigned char ch164data[] = {
0xc3,0xff,0x66,0x66,0x66,0xff,0xc3
};
static const GLUTBitmapChar ch164 = { 8, 7, -1, -3, 10, ch164data };
static const unsigned char ch165data[] = {
0x18,0x18,0x18,0x18,0xff,0x18,0xff,0x3c,0x66,0x66,0x66,0xc3,0xc3
};
static const GLUTBitmapChar ch165 = { 8, 13, -1, 0, 10, ch165data };
static const unsigned char ch166data[] = {
0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x0,0x0,0x0,0x0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
0xc0
};
static const GLUTBitmapChar ch166 = { 2, 17, -1, 3, 4, ch166data };
static const unsigned char ch167data[] = {
0x3c,0x7e,0xc3,0xc3,0x7,0xe,0x3e,0x73,0xe3,0xc3,0xc7,0x6e,0x7c,0xf0,0xc3,0xc3,
0x7e,0x3c
};
static const GLUTBitmapChar ch167 = { 8, 18, -1, 4, 10, ch167data };
static const unsigned char ch168data[] = {
0xd8,0xd8
};
static const GLUTBitmapChar ch168 = { 5, 2, 0, -11, 6, ch168data };
static const unsigned char ch169data[] = {
0xf,0x80,0x30,0x60,0x40,0x10,0x47,0x10,0x88,0x88,0x90,0x8,0x90,0x8,0x90,0x8,
0x88,0x88,0x47,0x10,0x40,0x10,0x30,0x60,0xf,0x80
};
static const GLUTBitmapChar ch169 = { 13, 13, -1, 0, 15, ch169data };
static const unsigned char ch170data[] = {
0xf8,0x0,0x68,0xd8,0x48,0x38,0xc8,0x70
};
static const GLUTBitmapChar ch170 = { 5, 8, -1, -6, 7, ch170data };
static const unsigned char ch171data[] = {
0x12,0x36,0x6c,0xd8,0xd8,0x6c,0x36,0x12
};
static const GLUTBitmapChar ch171 = { 7, 8, -1, -1, 9, ch171data };
static const unsigned char ch172data[] = {
0x1,0x80,0x1,0x80,0x1,0x80,0xff,0x80,0xff,0x80
};
static const GLUTBitmapChar ch172 = { 9, 5, -1, -3, 11, ch172data };
static const unsigned char ch173data[] = {
0xf8,0xf8
};
static const GLUTBitmapChar ch173 = { 5, 2, -1, -4, 7, ch173data };
static const unsigned char ch174data[] = {
0xf,0x80,0x30,0x60,0x40,0x10,0x48,0x50,0x88,0x88,0x89,0x8,0x8f,0x88,0x88,0x48,
0x88,0x48,0x4f,0x90,0x40,0x10,0x30,0x60,0xf,0x80
};
static const GLUTBitmapChar ch174 = { 13, 13, -1, 0, 14, ch174data };
static const unsigned char ch175data[] = {
0xf8
};
static const GLUTBitmapChar ch175 = { 5, 1, 0, -12, 5, ch175data };
static const unsigned char ch176data[] = {
0x70,0xd8,0x88,0xd8,0x70
};
static const GLUTBitmapChar ch176 = { 5, 5, -1, -8, 7, ch176data };
static const unsigned char ch177data[] = {
0xff,0xff,0x0,0x18,0x18,0x18,0xff,0xff,0x18,0x18,0x18
};
static const GLUTBitmapChar ch177 = { 8, 11, -1, 0, 10, ch177data };
static const unsigned char ch178data[] = {
0xf8,0xf8,0x60,0x30,0x18,0x98,0xf8,0x70
};
static const GLUTBitmapChar ch178 = { 5, 8, 0, -5, 6, ch178data };
static const unsigned char ch179data[] = {
0x70,0xf8,0x98,0x30,0x30,0x98,0xf8,0x70
};
static const GLUTBitmapChar ch179 = { 5, 8, 0, -5, 6, ch179data };
static const unsigned char ch180data[] = {
0xc0,0x60,0x30
};
static const GLUTBitmapChar ch180 = { 4, 3, 0, -11, 4, ch180data };
static const unsigned char ch181data[] = {
0xc0,0xc0,0xc0,0xc0,0xdb,0xff,0xe7,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3
};
static const GLUTBitmapChar ch181 = { 8, 14, -1, 4, 10, ch181data };
static const unsigned char ch182data[] = {
0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x32,0x72,0xf2,0xf2,0xf2,0xf2,
0x72,0x3f
};
static const GLUTBitmapChar ch182 = { 8, 18, -1, 4, 10, ch182data };
static const unsigned char ch183data[] = {
0xc0,0xc0
};
static const GLUTBitmapChar ch183 = { 2, 2, -1, -4, 4, ch183data };
static const unsigned char ch184data[] = {
0xf0,0xd8,0x18,0x70,0x60
};
static const GLUTBitmapChar ch184 = { 5, 5, 0, 4, 5, ch184data };
static const unsigned char ch185data[] = {
0x60,0x60,0x60,0x60,0x60,0xe0,0xe0,0x60
};
static const GLUTBitmapChar ch185 = { 3, 8, -1, -5, 6, ch185data };
static const unsigned char ch186data[] = {
0xf8,0x0,0x70,0xd8,0x88,0x88,0xd8,0x70
};
static const GLUTBitmapChar ch186 = { 5, 8, -1, -6, 7, ch186data };
static const unsigned char ch187data[] = {
0x90,0xd8,0x6c,0x36,0x36,0x6c,0xd8,0x90
};
static const GLUTBitmapChar ch187 = { 7, 8, -1, -1, 9, ch187data };
static const unsigned char ch188data[] = {
0x30,0x30,0x30,0x30,0x19,0xf8,0xd,0xb0,0xc,0xf0,0x66,0x70,0x62,0x30,0x63,0x10,
0x61,0x80,0x61,0x80,0xe0,0xc0,0xe0,0x60,0x60,0x60
};
static const GLUTBitmapChar ch188 = { 13, 13, -1, 0, 15, ch188data };
static const unsigned char ch189data[] = {
0x30,0xf8,0x30,0xf8,0x18,0x60,0xc,0x30,0xc,0x18,0x66,0x98,0x62,0xf8,0x63,0x70,
0x61,0x80,0x61,0x80,0xe0,0xc0,0xe0,0x60,0x60,0x60
};
static const GLUTBitmapChar ch189 = { 13, 13, -1, 0, 15, ch189data };
static const unsigned char ch190data[] = {
0x18,0x18,0x18,0x18,0xc,0xfc,0x6,0xd8,0x6,0x78,0x73,0x38,0xf9,0x18,0x99,0x88,
0x30,0xc0,0x30,0xc0,0x98,0x60,0xf8,0x30,0x70,0x30
};
static const GLUTBitmapChar ch190 = { 14, 13, 0, 0, 15, ch190data };
static const unsigned char ch191data[] = {
0x7c,0xfe,0xc6,0xc6,0xe0,0x70,0x38,0x18,0x18,0x18,0x0,0x0,0x18,0x18
};
static const GLUTBitmapChar ch191 = { 7, 14, -1, 4, 10, ch191data };
static const unsigned char ch192data[] = {
0xc0,0x30,0xc0,0x30,0x60,0x60,0x60,0x60,0x7f,0xe0,0x3f,0xc0,0x30,0xc0,0x30,0xc0,
0x19,0x80,0x19,0x80,0xf,0x0,0xf,0x0,0x6,0x0,0x6,0x0,0x0,0x0,0x6,0x0,
0xc,0x0,0x18,0x0
};
static const GLUTBitmapChar ch192 = { 12, 18, 0, 0, 12, ch192data };
static const unsigned char ch193data[] = {
0xc0,0x30,0xc0,0x30,0x60,0x60,0x60,0x60,0x7f,0xe0,0x3f,0xc0,0x30,0xc0,0x30,0xc0,
0x19,0x80,0x19,0x80,0xf,0x0,0xf,0x0,0x6,0x0,0x6,0x0,0x0,0x0,0x6,0x0,
0x3,0x0,0x1,0x80
};
static const GLUTBitmapChar ch193 = { 12, 18, 0, 0, 12, ch193data };
static const unsigned char ch194data[] = {
0xc0,0x30,0xc0,0x30,0x60,0x60,0x60,0x60,0x7f,0xe0,0x3f,0xc0,0x30,0xc0,0x30,0xc0,
0x19,0x80,0x19,0x80,0xf,0x0,0xf,0x0,0x6,0x0,0x6,0x0,0x0,0x0,0x19,0x80,
0xf,0x0,0x6,0x0
};
static const GLUTBitmapChar ch194 = { 12, 18, 0, 0, 12, ch194data };
static const unsigned char ch195data[] = {
0xc0,0x30,0xc0,0x30,0x60,0x60,0x60,0x60,0x7f,0xe0,0x3f,0xc0,0x30,0xc0,0x30,0xc0,
0x19,0x80,0x19,0x80,0xf,0x0,0xf,0x0,0x6,0x0,0x6,0x0,0x0,0x0,0x13,0x0,
0x16,0x80,0xc,0x80
};
static const GLUTBitmapChar ch195 = { 12, 18, 0, 0, 12, ch195data };
static const unsigned char ch196data[] = {
0xc0,0x30,0xc0,0x30,0x60,0x60,0x60,0x60,0x7f,0xe0,0x3f,0xc0,0x30,0xc0,0x30,0xc0,
0x19,0x80,0x19,0x80,0xf,0x0,0xf,0x0,0x6,0x0,0x6,0x0,0x0,0x0,0x19,0x80,
0x19,0x80
};
static const GLUTBitmapChar ch196 = { 12, 17, 0, 0, 12, ch196data };
static const unsigned char ch197data[] = {
0xc0,0x30,0xc0,0x30,0x60,0x60,0x60,0x60,0x7f,0xe0,0x3f,0xc0,0x30,0xc0,0x30,0xc0,
0x19,0x80,0x19,0x80,0xf,0x0,0xf,0x0,0x6,0x0,0x6,0x0,0xf,0x0,0x19,0x80,
0x19,0x80,0xf,0x0
};
static const GLUTBitmapChar ch197 = { 12, 18, 0, 0, 12, ch197data };
static const unsigned char ch198data[] = {
0xc1,0xff,0xc1,0xff,0x61,0x80,0x61,0x80,0x7f,0x80,0x3f,0x80,0x31,0xfe,0x31,0xfe,
0x19,0x80,0x19,0x80,0xd,0x80,0xd,0x80,0x7,0xff,0x7,0xff
};
static const GLUTBitmapChar ch198 = { 16, 14, -1, 0, 18, ch198data };
static const unsigned char ch199data[] = {
0x1e,0x0,0x1b,0x0,0x3,0x0,0xe,0x0,0xf,0x80,0x3f,0xe0,0x70,0x70,0x60,0x30,
0xe0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xe0,0x0,0x60,0x30,0x70,0x70,
0x3f,0xe0,0xf,0x80
};
static const GLUTBitmapChar ch199 = { 12, 18, -1, 4, 14, ch199data };
static const unsigned char ch200data[] = {
0xff,0x80,0xff,0x80,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x0,0xff,0x0,
0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x80,0xff,0x80,0x0,0x0,0xc,0x0,
0x18,0x0,0x30,0x0
};
static const GLUTBitmapChar ch200 = { 9, 18, -1, 0, 11, ch200data };
static const unsigned char ch201data[] = {
0xff,0x80,0xff,0x80,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x0,0xff,0x0,
0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x80,0xff,0x80,0x0,0x0,0xc,0x0,
0x6,0x0,0x3,0x0
};
static const GLUTBitmapChar ch201 = { 9, 18, -1, 0, 11, ch201data };
static const unsigned char ch202data[] = {
0xff,0x80,0xff,0x80,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x0,0xff,0x0,
0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x80,0xff,0x80,0x0,0x0,0x33,0x0,
0x1e,0x0,0xc,0x0
};
static const GLUTBitmapChar ch202 = { 9, 18, -1, 0, 11, ch202data };
static const unsigned char ch203data[] = {
0xff,0x80,0xff,0x80,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x0,0xff,0x0,
0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x80,0xff,0x80,0x0,0x0,0x33,0x0,
0x33,0x0
};
static const GLUTBitmapChar ch203 = { 9, 17, -1, 0, 11, ch203data };
static const unsigned char ch204data[] = {
0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x0,0x30,
0x60,0xc0
};
static const GLUTBitmapChar ch204 = { 4, 18, 0, 0, 6, ch204data };
static const unsigned char ch205data[] = {
0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x0,0xc0,
0x60,0x30
};
static const GLUTBitmapChar ch205 = { 4, 18, -2, 0, 6, ch205data };
static const unsigned char ch206data[] = {
0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x0,0xcc,
0x78,0x30
};
static const GLUTBitmapChar ch206 = { 6, 18, 0, 0, 6, ch206data };
static const unsigned char ch207data[] = {
0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x0,0xcc,
0xcc
};
static const GLUTBitmapChar ch207 = { 6, 17, 0, 0, 6, ch207data };
static const unsigned char ch208data[] = {
0x7f,0x80,0x7f,0xc0,0x60,0xe0,0x60,0x60,0x60,0x30,0x60,0x30,0xfc,0x30,0xfc,0x30,
0x60,0x30,0x60,0x30,0x60,0x60,0x60,0xe0,0x7f,0xc0,0x7f,0x80
};
static const GLUTBitmapChar ch208 = { 12, 14, 0, 0, 13, ch208data };
static const unsigned char ch209data[] = {
0xc0,0x60,0xc0,0xe0,0xc1,0xe0,0xc1,0xe0,0xc3,0x60,0xc6,0x60,0xc6,0x60,0xcc,0x60,
0xcc,0x60,0xd8,0x60,0xd8,0x60,0xf0,0x60,0xe0,0x60,0xe0,0x60,0x0,0x0,0x13,0x0,
0x16,0x80,0xc,0x80
};
static const GLUTBitmapChar ch209 = { 11, 18, -1, 0, 13, ch209data };
static const unsigned char ch210data[] = {
0xf,0x80,0x3f,0xe0,0x70,0x70,0x60,0x30,0xe0,0x38,0xc0,0x18,0xc0,0x18,0xc0,0x18,
0xc0,0x18,0xe0,0x38,0x60,0x30,0x70,0x70,0x3f,0xe0,0xf,0x80,0x0,0x0,0x3,0x0,
0x6,0x0,0xc,0x0
};
static const GLUTBitmapChar ch210 = { 13, 18, -1, 0, 15, ch210data };
static const unsigned char ch211data[] = {
0xf,0x80,0x3f,0xe0,0x70,0x70,0x60,0x30,0xe0,0x38,0xc0,0x18,0xc0,0x18,0xc0,0x18,
0xc0,0x18,0xe0,0x38,0x60,0x30,0x70,0x70,0x3f,0xe0,0xf,0x80,0x0,0x0,0x3,0x0,
0x1,0x80,0x0,0xc0
};
static const GLUTBitmapChar ch211 = { 13, 18, -1, 0, 15, ch211data };
static const unsigned char ch212data[] = {
0xf,0x80,0x3f,0xe0,0x70,0x70,0x60,0x30,0xe0,0x38,0xc0,0x18,0xc0,0x18,0xc0,0x18,
0xc0,0x18,0xe0,0x38,0x60,0x30,0x70,0x70,0x3f,0xe0,0xf,0x80,0x0,0x0,0xc,0xc0,
0x7,0x80,0x3,0x0
};
static const GLUTBitmapChar ch212 = { 13, 18, -1, 0, 15, ch212data };
static const unsigned char ch213data[] = {
0xf,0x80,0x3f,0xe0,0x70,0x70,0x60,0x30,0xe0,0x38,0xc0,0x18,0xc0,0x18,0xc0,0x18,
0xc0,0x18,0xe0,0x38,0x60,0x30,0x70,0x70,0x3f,0xe0,0xf,0x80,0x0,0x0,0x9,0x80,
0xb,0x40,0x6,0x40
};
static const GLUTBitmapChar ch213 = { 13, 18, -1, 0, 15, ch213data };
static const unsigned char ch214data[] = {
0xf,0x80,0x3f,0xe0,0x70,0x70,0x60,0x30,0xe0,0x38,0xc0,0x18,0xc0,0x18,0xc0,0x18,
0xc0,0x18,0xe0,0x38,0x60,0x30,0x70,0x70,0x3f,0xe0,0xf,0x80,0x0,0x0,0xd,0x80,
0xd,0x80
};
static const GLUTBitmapChar ch214 = { 13, 17, -1, 0, 15, ch214data };
static const unsigned char ch215data[] = {
0xc0,0xc0,0x61,0x80,0x33,0x0,0x1e,0x0,0xc,0x0,0x1e,0x0,0x33,0x0,0x61,0x80,
0xc0,0xc0
};
static const GLUTBitmapChar ch215 = { 10, 9, 0, 0, 10, ch215data };
static const unsigned char ch216data[] = {
0xc7,0xc0,0xff,0xf0,0x78,0x38,0x38,0x18,0x6c,0x1c,0x6e,0xc,0x67,0xc,0x63,0x8c,
0x61,0xcc,0x70,0xdc,0x30,0x78,0x38,0x38,0x1f,0xfc,0x7,0xcc
};
static const GLUTBitmapChar ch216 = { 14, 14, 0, 0, 15, ch216data };
static const unsigned char ch217data[] = {
0x1f,0x0,0x7f,0xc0,0x60,0xc0,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,
0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0x0,0x0,0x6,0x0,
0xc,0x0,0x18,0x0
};
static const GLUTBitmapChar ch217 = { 11, 18, -1, 0, 13, ch217data };
static const unsigned char ch218data[] = {
0x1f,0x0,0x7f,0xc0,0x60,0xc0,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,
0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0x0,0x0,0xc,0x0,
0x6,0x0,0x3,0x0
};
static const GLUTBitmapChar ch218 = { 11, 18, -1, 0, 13, ch218data };
static const unsigned char ch219data[] = {
0x1f,0x0,0x7f,0xc0,0x60,0xc0,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,
0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0x0,0x0,0x19,0x80,
0xf,0x0,0x6,0x0
};
static const GLUTBitmapChar ch219 = { 11, 18, -1, 0, 13, ch219data };
static const unsigned char ch220data[] = {
0x1f,0x0,0x7f,0xc0,0x60,0xc0,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,
0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0x0,0x0,0x19,0x80,
0x19,0x80
};
static const GLUTBitmapChar ch220 = { 11, 17, -1, 0, 13, ch220data };
static const unsigned char ch221data[] = {
0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0xf,0x0,0x19,0x80,
0x30,0xc0,0x30,0xc0,0x60,0x60,0x60,0x60,0xc0,0x30,0xc0,0x30,0x0,0x0,0x6,0x0,
0x3,0x0,0x1,0x80
};
static const GLUTBitmapChar ch221 = { 12, 18, -1, 0, 14, ch221data };
static const unsigned char ch222data[] = {
0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x0,0xff,0x80,0xc1,0xc0,0xc0,0xc0,0xc0,0xc0,
0xc1,0xc0,0xff,0x80,0xff,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0
};
static const GLUTBitmapChar ch222 = { 10, 14, -1, 0, 12, ch222data };
static const unsigned char ch223data[] = {
0xdc,0xde,0xc6,0xc6,0xc6,0xc6,0xdc,0xdc,0xc6,0xc6,0xc6,0xc6,0x7c,0x38
};
static const GLUTBitmapChar ch223 = { 7, 14, -1, 0, 9, ch223data };
static const unsigned char ch224data[] = {
0x76,0xee,0xc6,0xc6,0xe6,0x7e,0xe,0xc6,0xee,0x7c,0x0,0x18,0x30,0x60
};
static const GLUTBitmapChar ch224 = { 7, 14, -1, 0, 9, ch224data };
static const unsigned char ch225data[] = {
0x76,0xee,0xc6,0xc6,0xe6,0x7e,0xe,0xc6,0xee,0x7c,0x0,0x30,0x18,0xc
};
static const GLUTBitmapChar ch225 = { 7, 14, -1, 0, 9, ch225data };
static const unsigned char ch226data[] = {
0x76,0xee,0xc6,0xc6,0xe6,0x7e,0xe,0xc6,0xee,0x7c,0x0,0x66,0x3c,0x18
};
static const GLUTBitmapChar ch226 = { 7, 14, -1, 0, 9, ch226data };
static const unsigned char ch227data[] = {
0x76,0xee,0xc6,0xc6,0xe6,0x7e,0xe,0xc6,0xee,0x7c,0x0,0x4c,0x5a,0x32
};
static const GLUTBitmapChar ch227 = { 7, 14, -1, 0, 9, ch227data };
static const unsigned char ch228data[] = {
0x76,0xee,0xc6,0xc6,0xe6,0x7e,0xe,0xc6,0xee,0x7c,0x0,0x6c,0x6c
};
static const GLUTBitmapChar ch228 = { 7, 13, -1, 0, 9, ch228data };
static const unsigned char ch229data[] = {
0x76,0xee,0xc6,0xc6,0xe6,0x7e,0xe,0xc6,0xee,0x7c,0x38,0x6c,0x6c,0x38
};
static const GLUTBitmapChar ch229 = { 7, 14, -1, 0, 9, ch229data };
static const unsigned char ch230data[] = {
0x75,0xe0,0xef,0xf8,0xc7,0x18,0xc6,0x0,0xe6,0x0,0x7f,0xf8,0xe,0x18,0xc6,0x18,
0xef,0xf0,0x7d,0xe0
};
static const GLUTBitmapChar ch230 = { 13, 10, -1, 0, 15, ch230data };
static const unsigned char ch231data[] = {
0x78,0x6c,0xc,0x38,0x3e,0x7f,0x63,0xc0,0xc0,0xc0,0xc0,0x63,0x7f,0x3e
};
static const GLUTBitmapChar ch231 = { 8, 14, -1, 4, 10, ch231data };
static const unsigned char ch232data[] = {
0x3c,0x7f,0xe3,0xc0,0xc0,0xff,0xc3,0xc3,0x7e,0x3c,0x0,0x18,0x30,0x60
};
static const GLUTBitmapChar ch232 = { 8, 14, -1, 0, 10, ch232data };
static const unsigned char ch233data[] = {
0x3c,0x7f,0xe3,0xc0,0xc0,0xff,0xc3,0xc3,0x7e,0x3c,0x0,0x18,0xc,0x6
};
static const GLUTBitmapChar ch233 = { 8, 14, -1, 0, 10, ch233data };
static const unsigned char ch234data[] = {
0x3c,0x7f,0xe3,0xc0,0xc0,0xff,0xc3,0xc3,0x7e,0x3c,0x0,0x66,0x3c,0x18
};
static const GLUTBitmapChar ch234 = { 8, 14, -1, 0, 10, ch234data };
static const unsigned char ch235data[] = {
0x3c,0x7f,0xe3,0xc0,0xc0,0xff,0xc3,0xc3,0x7e,0x3c,0x0,0x36,0x36
};
static const GLUTBitmapChar ch235 = { 8, 13, -1, 0, 10, ch235data };
static const unsigned char ch236data[] = {
0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x0,0x30,0x60,0xc0
};
static const GLUTBitmapChar ch236 = { 4, 14, 0, 0, 4, ch236data };
static const unsigned char ch237data[] = {
0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x0,0xc0,0x60,0x30
};
static const GLUTBitmapChar ch237 = { 4, 14, 0, 0, 4, ch237data };
static const unsigned char ch238data[] = {
0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x0,0xcc,0x78,0x30
};
static const GLUTBitmapChar ch238 = { 6, 14, 1, 0, 4, ch238data };
static const unsigned char ch239data[] = {
0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x0,0xd8,0xd8
};
static const GLUTBitmapChar ch239 = { 5, 13, 0, 0, 4, ch239data };
static const unsigned char ch240data[] = {
0x3e,0x0,0x7f,0x0,0x63,0x0,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0x63,0x0,
0x7f,0x0,0x3e,0x0,0x4c,0x0,0x38,0x0,0x36,0x0,0x60,0x0
};
static const GLUTBitmapChar ch240 = { 9, 14, -1, 0, 11, ch240data };
static const unsigned char ch241data[] = {
0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xe3,0xdf,0xce,0x0,0x4c,0x5a,0x32
};
static const GLUTBitmapChar ch241 = { 8, 14, -1, 0, 10, ch241data };
static const unsigned char ch242data[] = {
0x3e,0x0,0x7f,0x0,0x63,0x0,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0x63,0x0,
0x7f,0x0,0x3e,0x0,0x0,0x0,0xc,0x0,0x18,0x0,0x30,0x0
};
static const GLUTBitmapChar ch242 = { 9, 14, -1, 0, 11, ch242data };
static const unsigned char ch243data[] = {
0x3e,0x0,0x7f,0x0,0x63,0x0,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0x63,0x0,
0x7f,0x0,0x3e,0x0,0x0,0x0,0x18,0x0,0xc,0x0,0x6,0x0
};
static const GLUTBitmapChar ch243 = { 9, 14, -1, 0, 11, ch243data };
static const unsigned char ch244data[] = {
0x3e,0x0,0x7f,0x0,0x63,0x0,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0x63,0x0,
0x7f,0x0,0x3e,0x0,0x0,0x0,0x33,0x0,0x1e,0x0,0xc,0x0
};
static const GLUTBitmapChar ch244 = { 9, 14, -1, 0, 11, ch244data };
static const unsigned char ch245data[] = {
0x3e,0x0,0x7f,0x0,0x63,0x0,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0x63,0x0,
0x7f,0x0,0x3e,0x0,0x0,0x0,0x26,0x0,0x2d,0x0,0x19,0x0
};
static const GLUTBitmapChar ch245 = { 9, 14, -1, 0, 11, ch245data };
static const unsigned char ch246data[] = {
0x3e,0x0,0x7f,0x0,0x63,0x0,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0x63,0x0,
0x7f,0x0,0x3e,0x0,0x0,0x0,0x36,0x0,0x36,0x0
};
static const GLUTBitmapChar ch246 = { 9, 13, -1, 0, 11, ch246data };
static const unsigned char ch247data[] = {
0x18,0x18,0x0,0xff,0xff,0x0,0x18,0x18
};
static const GLUTBitmapChar ch247 = { 8, 8, -1, -1, 10, ch247data };
static const unsigned char ch248data[] = {
0xce,0x0,0x7f,0x80,0x31,0x80,0x78,0xc0,0x6c,0xc0,0x66,0xc0,0x63,0xc0,0x31,0x80,
0x3f,0xc0,0xe,0x60
};
static const GLUTBitmapChar ch248 = { 11, 10, 0, 0, 11, ch248data };
static const unsigned char ch249data[] = {
0x73,0xfb,0xc7,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0x0,0xc,0x18,0x30
};
static const GLUTBitmapChar ch249 = { 8, 14, -1, 0, 10, ch249data };
static const unsigned char ch250data[] = {
0x73,0xfb,0xc7,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0x0,0x18,0xc,0x6
};
static const GLUTBitmapChar ch250 = { 8, 14, -1, 0, 10, ch250data };
static const unsigned char ch251data[] = {
0x73,0xfb,0xc7,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0x0,0x66,0x3c,0x18
};
static const GLUTBitmapChar ch251 = { 8, 14, -1, 0, 10, ch251data };
static const unsigned char ch252data[] = {
0x73,0xfb,0xc7,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0x0,0x66,0x66
};
static const GLUTBitmapChar ch252 = { 8, 13, -1, 0, 10, ch252data };
static const unsigned char ch253data[] = {
0x70,0x70,0x18,0x18,0x18,0x18,0x3c,0x24,0x66,0x66,0x66,0xc3,0xc3,0xc3,0x0,0x18,
0xc,0x6
};
static const GLUTBitmapChar ch253 = { 8, 18, -1, 4, 10, ch253data };
static const unsigned char ch254data[] = {
0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xde,0x0,0xff,0x0,0xe3,0x0,0xc1,0x80,
0xc1,0x80,0xc1,0x80,0xc1,0x80,0xe3,0x0,0xff,0x0,0xde,0x0,0xc0,0x0,0xc0,0x0,
0xc0,0x0,0xc0,0x0
};
static const GLUTBitmapChar ch254 = { 9, 18, -1, 4, 11, ch254data };
static const unsigned char ch255data[] = {
0x70,0x70,0x18,0x18,0x18,0x18,0x3c,0x24,0x66,0x66,0x66,0xc3,0xc3,0xc3,0x0,0x66,
0x66
};
static const GLUTBitmapChar ch255 = { 8, 17, -1, 4, 10, ch255data };
static const GLUTBitmapChar *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, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
&ch160, &ch161, &ch162, &ch163, &ch164, &ch165, &ch166, &ch167,
&ch168, &ch169, &ch170, &ch171, &ch172, &ch173, &ch174, &ch175,
&ch176, &ch177, &ch178, &ch179, &ch180, &ch181, &ch182, &ch183,
&ch184, &ch185, &ch186, &ch187, &ch188, &ch189, &ch190, &ch191,
&ch192, &ch193, &ch194, &ch195, &ch196, &ch197, &ch198, &ch199,
&ch200, &ch201, &ch202, &ch203, &ch204, &ch205, &ch206, &ch207,
&ch208, &ch209, &ch210, &ch211, &ch212, &ch213, &ch214, &ch215,
&ch216, &ch217, &ch218, &ch219, &ch220, &ch221, &ch222, &ch223,
&ch224, &ch225, &ch226, &ch227, &ch228, &ch229, &ch230, &ch231,
&ch232, &ch233, &ch234, &ch235, &ch236, &ch237, &ch238, &ch239,
&ch240, &ch241, &ch242, &ch243, &ch244, &ch245, &ch246, &ch247,
&ch248, &ch249, &ch250, &ch251, &ch252, &ch253, &ch254, &ch255
};
const GLUTBitmapFont glutBitmapHelvetica18 = {
"-Adobe-Helvetica-Medium-R-Normal--18-180-75-75-P-98-ISO8859-1",
22, 256, chars
};
/*
* DOS/DJGPP Mesa Utility Toolkit
* Version: 1.0
*
* Copyright (C) 2005 Daniel Borca 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
* DANIEL BORCA 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 <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "internal.h"
char *__glutProgramName = NULL;
GLUTvisual _glut_visual = {
16, 8, 16, 8, 16, /* bpp, alpha, depth, stencil, accum */
{ 0, 0 }, 0, /* geometry */
0 /* flags */
};
GLUTdefault _glut_default = {
0, 0, /* glutInitWindowPosition */
300, 300, /* glutInitWindowSize */
0 /* glutInitDisplayMode */
};
GLuint _glut_fps = 0;
static char *init_string;
void
_glut_fatal (char *format,...)
{
va_list args;
va_start(args, format);
fprintf(stderr, "GLUT: Fatal Error in %s: ",
__glutProgramName ? __glutProgramName : "(unamed)");
vfprintf(stderr, format, args);
va_end(args);
putc('\n', stderr);
exit(1);
}
/* strdup is actually not a standard ANSI C or POSIX routine
* so implement a private one for GLUT.
*/
static char *
_glut_strdup (const char *string)
{
if (string != NULL) {
int len = strlen(string) + 1;
char *p = malloc(len);
if (p != NULL) {
return strcpy(p, string);
}
}
return NULL;
}
void APIENTRY
glutInit (int *argc, char **argv)
{
char *str;
const char *env;
if ((env = getenv("DMESA_GLUT_BPP")) != NULL) {
_glut_visual.bpp = atoi(env);
}
if ((env = getenv("DMESA_GLUT_ALPHA")) != NULL) {
_glut_visual.alpha = atoi(env);
}
if ((env = getenv("DMESA_GLUT_DEPTH")) != NULL) {
_glut_visual.depth = atoi(env);
}
if ((env = getenv("DMESA_GLUT_STENCIL")) != NULL) {
_glut_visual.stencil = atoi(env);
}
if ((env = getenv("DMESA_GLUT_ACCUM")) != NULL) {
_glut_visual.accum = atoi(env);
}
if ((env = getenv("DMESA_GLUT_REFRESH")) != NULL) {
_glut_visual.refresh = atoi(env);
}
/* Determine program name. */
str = strrchr(argv[0], '/');
if (str == NULL) {
str = argv[0];
} else {
str++;
}
__glutProgramName = _glut_strdup(str);
/* check if GLUT_FPS env var is set */
if ((env = getenv("GLUT_FPS")) != NULL) {
if ((_glut_fps = atoi(env)) <= 0) {
_glut_fps = 5000; /* 5000 milliseconds */
}
}
/* Initialize timer */
glutGet(GLUT_ELAPSED_TIME);
}
void APIENTRY
glutInitDisplayMode (unsigned int mode)
{
_glut_default.mode = mode;
}
void APIENTRY
glutInitWindowPosition (int x, int y)
{
_glut_default.x = x;
_glut_default.y = y;
}
void APIENTRY
glutInitWindowSize (int width, int height)
{
_glut_default.width = width;
_glut_default.height = height;
}
void APIENTRY
glutInitDisplayString (const char *string)
{
init_string = _glut_strdup(string);
}
void APIENTRY
glutSetOption (GLenum pname, int value)
{
switch (pname) {
case GLUT_INIT_WINDOW_X:
_glut_default.x = value;
break;
case GLUT_INIT_WINDOW_Y:
_glut_default.y = value;
break;
}
}
void APIENTRY
glutForceJoystickFunc (void)
{
}
void APIENTRY
glutIgnoreKeyRepeat (int ignore)
{
}
void APIENTRY
glutSetKeyRepeat (int repeatMode)
{
}
void APIENTRY
glutVideoPan (int x, int y, int w, int h)
{
}
int APIENTRY
glutVideoResizeGet( GLenum eWhat )
{
return 0;
}
void APIENTRY
glutSetupVideoResizing (void)
{
}
void APIENTRY
glutStopVideoResizing (void)
{
}
void APIENTRY
glutVideoResize (int x, int y, int w, int h)
{
}
/*
* DOS/DJGPP Mesa Utility Toolkit
* Version: 1.0
*
* Copyright (C) 2005 Daniel Borca 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
* DANIEL BORCA 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 "internal.h"
int APIENTRY
glutLayerGet (GLenum info)
{
switch (info) {
case GLUT_OVERLAY_POSSIBLE:
case GLUT_HAS_OVERLAY:
return GL_FALSE;
case GLUT_LAYER_IN_USE:
return GLUT_NORMAL;
case GLUT_NORMAL_DAMAGED:
return GL_FALSE;
case GLUT_OVERLAY_DAMAGED:
case GLUT_TRANSPARENT_INDEX:
default:
return -1;
}
}
void APIENTRY
glutOverlayDisplayFunc (GLUTdisplayCB func)
{
}
void APIENTRY
glutEstablishOverlay (void)
{
}
void APIENTRY
glutRemoveOverlay (void)
{
}
void APIENTRY
glutUseLayer (GLenum layer)
{
}
void APIENTRY
glutPostOverlayRedisplay (void)
{
}
void APIENTRY
glutShowOverlay (void)
{
}
void APIENTRY
glutHideOverlay (void)
{
}
void APIENTRY
glutPostWindowOverlayRedisplay (int win)
{
}
/*
* DOS/DJGPP Mesa Utility Toolkit
* Version: 1.0
*
* Copyright (C) 2005 Daniel Borca 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
* DANIEL BORCA 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 <string.h>
#include <GL/glut.h>
#include "GL/dmesa.h"
#include "PC_HW/pc_hw.h"
#include "internal.h"
static int looping = 0;
#define DO_REDISPLAY(w, ccin, ccout) \
do { \
if (w->redisplay && w->display) { \
int rv = GL_TRUE; \
\
idle = GL_FALSE; \
w->redisplay = GL_FALSE; \
\
/* test IN condition (whether we need to `MakeCurrent') */\
if (ccin) { \
rv = DMesaMakeCurrent(w->context, w->buffer); \
} \
\
/* do the display only if `MakeCurrent' didn't failed */ \
if (rv) { \
if (w->show_mouse && !(_glut_default.mode & GLUT_DOUBLE)) {\
/* XXX scare mouse */ \
w->display(); \
/* XXX unscare mouse */ \
} else { \
w->display(); \
} \
\
/* update OUT condition */ \
ccout; \
} \
} \
} while (0)
void APIENTRY
glutMainLoopEvent (void)
{
int i, n;
GLUTwindow *w;
GLboolean idle;
static int old_mouse_x = 0;
static int old_mouse_y = 0;
static int old_mouse_b = 0;
static GLboolean virgin = GL_TRUE;
if (virgin) {
pc_install_keyb();
_glut_mouse_init();
for (i = 0; i < MAX_WINDOWS; i++) {
w = _glut_windows[i];
if (w != NULL) {
glutSetWindow(w->num);
glutPostRedisplay();
if (w->reshape) {
w->reshape(w->width, w->height);
}
if (w->visibility) {
w->visibility(GLUT_VISIBLE);
}
}
}
virgin = GL_FALSE;
}
idle = GL_TRUE;
n = 0;
for (i = 0; i < MAX_WINDOWS; i++) {
w = _glut_windows[i];
if ((w != NULL) && (w != _glut_current)) {
/* 1) redisplay `w'
* 2) `MakeCurrent' always
* 3) update number of non-default windows
*/
DO_REDISPLAY(w, GL_TRUE, n++);
}
}
/* 1) redisplay `_glut_current'
* 2) `MakeCurrent' only if we previously did non-default windows
* 3) don't update anything
*/
DO_REDISPLAY(_glut_current, n, n);
if (_glut_mouse) {
int mouse_x;
int mouse_y;
int mouse_z;
int mouse_b;
/* query mouse */
mouse_b = pc_query_mouse(&mouse_x, &mouse_y, &mouse_z);
/* relative to window coordinates */
_glut_mouse_x = mouse_x - _glut_current->xpos;
_glut_mouse_y = mouse_y - _glut_current->ypos;
/* mouse was moved? */
if ((mouse_x != old_mouse_x) || (mouse_y != old_mouse_y)) {
idle = GL_FALSE;
old_mouse_x = mouse_x;
old_mouse_y = mouse_y;
if (mouse_b) {
/* any button pressed */
if (_glut_current->motion) {
_glut_current->motion(_glut_mouse_x, _glut_mouse_y);
}
} else {
/* no button pressed */
if (_glut_current->passive) {
_glut_current->passive(_glut_mouse_x, _glut_mouse_y);
}
}
}
/* button state changed? */
if (mouse_b != old_mouse_b) {
GLUTmouseCB mouse_func;
if ((mouse_func = _glut_current->mouse)) {
if ((old_mouse_b & 1) && !(mouse_b & 1))
mouse_func(GLUT_LEFT_BUTTON, GLUT_UP, _glut_mouse_x, _glut_mouse_y);
else if (!(old_mouse_b & 1) && (mouse_b & 1))
mouse_func(GLUT_LEFT_BUTTON, GLUT_DOWN, _glut_mouse_x, _glut_mouse_y);
if ((old_mouse_b & 2) && !(mouse_b & 2))
mouse_func(GLUT_RIGHT_BUTTON, GLUT_UP, _glut_mouse_x, _glut_mouse_y);
else if (!(old_mouse_b & 2) && (mouse_b & 2))
mouse_func(GLUT_RIGHT_BUTTON, GLUT_DOWN, _glut_mouse_x, _glut_mouse_y);
if ((old_mouse_b & 4) && !(mouse_b & 4))
mouse_func(GLUT_MIDDLE_BUTTON, GLUT_UP, _glut_mouse_x, _glut_mouse_y);
else if (!(old_mouse_b & 3) && (mouse_b & 4))
mouse_func(GLUT_MIDDLE_BUTTON, GLUT_DOWN, _glut_mouse_x, _glut_mouse_y);
}
idle = GL_FALSE;
old_mouse_b = mouse_b;
}
}
if (pc_keypressed()) {
int key;
int glut_key;
idle = GL_FALSE;
key = pc_readkey();
switch (key>>16) {
case KEY_F1: glut_key = GLUT_KEY_F1; goto special;
case KEY_F2: glut_key = GLUT_KEY_F2; goto special;
case KEY_F3: glut_key = GLUT_KEY_F3; goto special;
case KEY_F4: glut_key = GLUT_KEY_F4; goto special;
case KEY_F5: glut_key = GLUT_KEY_F5; goto special;
case KEY_F6: glut_key = GLUT_KEY_F6; goto special;
case KEY_F7: glut_key = GLUT_KEY_F7; goto special;
case KEY_F8: glut_key = GLUT_KEY_F8; goto special;
case KEY_F9: glut_key = GLUT_KEY_F9; goto special;
case KEY_F10: glut_key = GLUT_KEY_F10; goto special;
case KEY_F11: glut_key = GLUT_KEY_F11; goto special;
case KEY_F12: glut_key = GLUT_KEY_F12; goto special;
case KEY_LEFT: glut_key = GLUT_KEY_LEFT; goto special;
case KEY_UP: glut_key = GLUT_KEY_UP; goto special;
case KEY_RIGHT: glut_key = GLUT_KEY_RIGHT; goto special;
case KEY_DOWN: glut_key = GLUT_KEY_DOWN; goto special;
case KEY_PGUP: glut_key = GLUT_KEY_PAGE_UP; goto special;
case KEY_PGDN: glut_key = GLUT_KEY_PAGE_DOWN; goto special;
case KEY_HOME: glut_key = GLUT_KEY_HOME; goto special;
case KEY_END: glut_key = GLUT_KEY_END; goto special;
case KEY_INSERT: glut_key = GLUT_KEY_INSERT; goto special;
special:
if (_glut_current->special) {
_glut_current->special(glut_key, _glut_mouse_x, _glut_mouse_y);
}
break;
default:
if (_glut_current->keyboard) {
_glut_current->keyboard(key & 0xFF, _glut_mouse_x, _glut_mouse_y);
}
}
}
if (idle && _glut_idle_func)
_glut_idle_func();
for (i = 0; i < MAX_TIMER_CB; i++) {
int time = glutGet(GLUT_ELAPSED_TIME);
GLUTSShotCB *cb = &_glut_timer_cb[i];
if (cb->func && (time >= cb->time)) {
cb->func(cb->value);
cb->func = NULL;
}
}
}
void APIENTRY
glutMainLoop (void)
{
looping++;
while (looping) {
glutMainLoopEvent();
}
}
void APIENTRY
glutLeaveMainLoop (void)
{
looping--;
}
/*
* DOS/DJGPP Mesa Utility Toolkit
* Version: 1.0
*
* Copyright (C) 2005 Daniel Borca 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
* DANIEL BORCA 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 "internal.h"
GLUTmenuStatusCB _glut_menu_status_func = NULL;
void APIENTRY
glutMenuStateFunc (GLUTmenuStateCB func)
{
_glut_menu_status_func = (GLUTmenuStatusCB)func;
}
void APIENTRY
glutMenuStatusFunc (GLUTmenuStatusCB func)
{
_glut_menu_status_func = func;
}
int APIENTRY
glutCreateMenu (GLUTselectCB func)
{
return 0;
}
void APIENTRY
glutDestroyMenu (int menu)
{
}
int APIENTRY
glutGetMenu (void)
{
return 0;
}
void APIENTRY
glutSetMenu (int menu)
{
}
void APIENTRY
glutAddMenuEntry (const char *label, int value)
{
}
void APIENTRY
glutAddSubMenu (const char *label, int submenu)
{
}
void APIENTRY
glutChangeToMenuEntry (int item, const char *label, int value)
{
}
void APIENTRY
glutChangeToSubMenu (int item, const char *label, int submenu)
{
}
void APIENTRY
glutRemoveMenuItem (int item)
{
}
void APIENTRY
glutAttachMenu (int button)
{
}
void APIENTRY
glutDetachMenu (int button)
{
}
void APIENTRY
glutMenuDestroyFunc ( void (* callback)( void ) )
{
}
void * APIENTRY
glutGetMenuData (void)
{
return NULL;
}
void APIENTRY
glutSetMenuData (void *data)
{
}
/*
* DOS/DJGPP Mesa Utility Toolkit
* Version: 1.0
*
* Copyright (C) 2005 Daniel Borca 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
* DANIEL BORCA 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 "internal.h"
int _glut_mouse;
int _glut_mouse_x = 0, _glut_mouse_y = 0;
void
_glut_mouse_init (void)
{
if ((_glut_mouse = pc_install_mouse())) {
pc_mouse_area(_glut_current->xpos, _glut_current->ypos, _glut_current->xpos + _glut_current->width - 1, _glut_current->ypos + _glut_current->height - 1);
_glut_current->show_mouse = (_glut_current->mouse || _glut_current->motion || _glut_current->passive);
}
}
void APIENTRY
glutSetCursor (int cursor)
{
/* XXX completely futile until full mouse support (maybe never) */
}
void APIENTRY
glutWarpPointer (int x, int y)
{
pc_warp_mouse(x, y);
}
/* GENERATED FILE -- DO NOT MODIFY */
#include "internal.h"
/* char: 0x20 */
static const GLUTStrokeChar ch32 = {104.7619f,0,NULL};
/* char: 0x21 */
static const GLUTStrokeVertex ch33st0[] =
{
{52.3810f,100.0000f},
{52.3810f,33.3333f}
};
static const GLUTStrokeVertex ch33st1[] =
{
{52.3810f,9.5238f},
{47.6191f,4.7619f},
{52.3810f,0.0000f},
{57.1429f,4.7619f},
{52.3810f,9.5238f}
};
static const GLUTStrokeStrip ch33st[] =
{
{2,ch33st0},
{5,ch33st1}
};
static const GLUTStrokeChar ch33 = {104.7619f,2,ch33st};
/* char: 0x22 */
static const GLUTStrokeVertex ch34st0[] =
{
{33.3334f,100.0000f},
{33.3334f,66.6667f}
};
static const GLUTStrokeVertex ch34st1[] =
{
{71.4286f,100.0000f},
{71.4286f,66.6667f}
};
static const GLUTStrokeStrip ch34st[] =
{
{2,ch34st0},
{2,ch34st1}
};
static const GLUTStrokeChar ch34 = {104.7619f,2,ch34st};
/* char: 0x23 */
static const GLUTStrokeVertex ch35st0[] =
{
{54.7619f,119.0476f},
{21.4286f,-33.3333f}
};
static const GLUTStrokeVertex ch35st1[] =
{
{83.3334f,119.0476f},
{50.0000f,-33.3333f}
};
static const GLUTStrokeVertex ch35st2[] =
{
{21.4286f,57.1429f},
{88.0952f,57.1429f}
};
static const GLUTStrokeVertex ch35st3[] =
{
{16.6667f,28.5714f},
{83.3334f,28.5714f}
};
static const GLUTStrokeStrip ch35st[] =
{
{2,ch35st0},
{2,ch35st1},
{2,ch35st2},
{2,ch35st3}
};
static const GLUTStrokeChar ch35 = {104.7619f,4,ch35st};
/* char: 0x24 */
static const GLUTStrokeVertex ch36st0[] =
{
{42.8571f,119.0476f},
{42.8571f,-19.0476f}
};
static const GLUTStrokeVertex ch36st1[] =
{
{61.9047f,119.0476f},
{61.9047f,-19.0476f}
};
static const GLUTStrokeVertex ch36st2[] =
{
{85.7143f,85.7143f},
{76.1905f,95.2381f},
{61.9047f,100.0000f},
{42.8571f,100.0000f},
{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.6190f},
{76.1905f,42.8571f},
{80.9524f,38.0952f},
{85.7143f,28.5714f},
{85.7143f,14.2857f},
{76.1905f,4.7619f},
{61.9047f,0.0000f},
{42.8571f,0.0000f},
{28.5714f,4.7619f},
{19.0476f,14.2857f}
};
static const GLUTStrokeStrip ch36st[] =
{
{2,ch36st0},
{2,ch36st1},
{20,ch36st2}
};
static const GLUTStrokeChar ch36 = {104.7619f,3,ch36st};
/* char: 0x25 */
static const GLUTStrokeVertex ch37st0[] =
{
{95.2381f,100.0000f},
{9.5238f,0.0000f}
};
static const GLUTStrokeVertex ch37st1[] =
{
{33.3333f,100.0000f},
{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.0000f},
{33.3333f,100.0000f},
{42.8571f,95.2381f},
{57.1428f,90.4762f},
{71.4286f,90.4762f},
{85.7143f,95.2381f},
{95.2381f,100.0000f}
};
static const GLUTStrokeVertex ch37st2[] =
{
{76.1905f,33.3333f},
{66.6667f,28.5714f},
{61.9048f,19.0476f},
{61.9048f,9.5238f},
{71.4286f,0.0000f},
{80.9524f,0.0000f},
{90.4762f,4.7619f},
{95.2381f,14.2857f},
{95.2381f,23.8095f},
{85.7143f,33.3333f},
{76.1905f,33.3333f}
};
static const GLUTStrokeStrip ch37st[] =
{
{2,ch37st0},
{16,ch37st1},
{11,ch37st2}
};
static const GLUTStrokeChar ch37 = {104.7619f,3,ch37st};
/* char: 0x26 */
static const GLUTStrokeVertex ch38st0[] =
{
{100.0000f,57.1429f},
{100.0000f,61.9048f},
{95.2381f,66.6667f},
{90.4762f,66.6667f},
{85.7143f,61.9048f},
{80.9524f,52.3810f},
{71.4286f,28.5714f},
{61.9048f,14.2857f},
{52.3809f,4.7619f},
{42.8571f,0.0000f},
{23.8095f,0.0000f},
{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.6190f,61.9048f},
{52.3809f,66.6667f},
{57.1429f,76.1905f},
{57.1429f,85.7143f},
{52.3809f,95.2381f},
{42.8571f,100.0000f},
{33.3333f,95.2381f},
{28.5714f,85.7143f},
{28.5714f,76.1905f},
{33.3333f,61.9048f},
{42.8571f,47.6190f},
{66.6667f,14.2857f},
{76.1905f,4.7619f},
{85.7143f,0.0000f},
{95.2381f,0.0000f},
{100.0000f,4.7619f},
{100.0000f,9.5238f}
};
static const GLUTStrokeStrip ch38st[] =
{
{34,ch38st0}
};
static const GLUTStrokeChar ch38 = {104.7619f,1,ch38st};
/* char: 0x27 */
static const GLUTStrokeVertex ch39st0[] =
{
{52.3810f,100.0000f},
{52.3810f,66.6667f}
};
static const GLUTStrokeStrip ch39st[] =
{
{2,ch39st0}
};
static const GLUTStrokeChar ch39 = {104.7619f,1,ch39st};
/* char: 0x28 */
static const GLUTStrokeVertex ch40st0[] =
{
{69.0476f,119.0476f},
{59.5238f,109.5238f},
{50.0000f,95.2381f},
{40.4762f,76.1905f},
{35.7143f,52.3810f},
{35.7143f,33.3333f},
{40.4762f,9.5238f},
{50.0000f,-9.5238f},
{59.5238f,-23.8095f},
{69.0476f,-33.3333f}
};
static const GLUTStrokeStrip ch40st[] =
{
{10,ch40st0}
};
static const GLUTStrokeChar ch40 = {104.7619f,1,ch40st};
/* char: 0x29 */
static const GLUTStrokeVertex ch41st0[] =
{
{35.7143f,119.0476f},
{45.2381f,109.5238f},
{54.7619f,95.2381f},
{64.2857f,76.1905f},
{69.0476f,52.3810f},
{69.0476f,33.3333f},
{64.2857f,9.5238f},
{54.7619f,-9.5238f},
{45.2381f,-23.8095f},
{35.7143f,-33.3333f}
};
static const GLUTStrokeStrip ch41st[] =
{
{10,ch41st0}
};
static const GLUTStrokeChar ch41 = {104.7619f,1,ch41st};
/* char: 0x2a */
static const GLUTStrokeVertex ch42st0[] =
{
{52.3810f,71.4286f},
{52.3810f,14.2857f}
};
static const GLUTStrokeVertex ch42st1[] =
{
{28.5715f,57.1429f},
{76.1905f,28.5714f}
};
static const GLUTStrokeVertex ch42st2[] =
{
{76.1905f,57.1429f},
{28.5715f,28.5714f}
};
static const GLUTStrokeStrip ch42st[] =
{
{2,ch42st0},
{2,ch42st1},
{2,ch42st2}
};
static const GLUTStrokeChar ch42 = {104.7619f,3,ch42st};
/* char: 0x2b */
static const GLUTStrokeVertex ch43st0[] =
{
{52.3809f,85.7143f},
{52.3809f,0.0000f}
};
static const GLUTStrokeVertex ch43st1[] =
{
{9.5238f,42.8571f},
{95.2381f,42.8571f}
};
static const GLUTStrokeStrip ch43st[] =
{
{2,ch43st0},
{2,ch43st1}
};
static const GLUTStrokeChar ch43 = {104.7619f,2,ch43st};
/* char: 0x2c */
static const GLUTStrokeVertex ch44st0[] =
{
{57.1429f,4.7619f},
{52.3810f,0.0000f},
{47.6191f,4.7619f},
{52.3810f,9.5238f},
{57.1429f,4.7619f},
{57.1429f,-4.7619f},
{52.3810f,-14.2857f},
{47.6191f,-19.0476f}
};
static const GLUTStrokeStrip ch44st[] =
{
{8,ch44st0}
};
static const GLUTStrokeChar ch44 = {104.7619f,1,ch44st};
/* char: 0x2d */
static const GLUTStrokeVertex ch45st0[] =
{
{9.5238f,42.8571f},
{95.2381f,42.8571f}
};
static const GLUTStrokeStrip ch45st[] =
{
{2,ch45st0}
};
static const GLUTStrokeChar ch45 = {104.7619f,1,ch45st};
/* char: 0x2e */
static const GLUTStrokeVertex ch46st0[] =
{
{52.3810f,9.5238f},
{47.6191f,4.7619f},
{52.3810f,0.0000f},
{57.1429f,4.7619f},
{52.3810f,9.5238f}
};
static const GLUTStrokeStrip ch46st[] =
{
{5,ch46st0}
};
static const GLUTStrokeChar ch46 = {104.7619f,1,ch46st};
/* char: 0x2f */
static const GLUTStrokeVertex ch47st0[] =
{
{19.0476f,-14.2857f},
{85.7143f,100.0000f}
};
static const GLUTStrokeStrip ch47st[] =
{
{2,ch47st0}
};
static const GLUTStrokeChar ch47 = {104.7619f,1,ch47st};
/* char: 0x30 */
static const GLUTStrokeVertex ch48st0[] =
{
{47.6190f,100.0000f},
{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.6190f,0.0000f},
{57.1428f,0.0000f},
{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.0000f},
{47.6190f,100.0000f}
};
static const GLUTStrokeStrip ch48st[] =
{
{17,ch48st0}
};
static const GLUTStrokeChar ch48 = {104.7619f,1,ch48st};
/* char: 0x31 */
static const GLUTStrokeVertex ch49st0[] =
{
{40.4762f,80.9524f},
{50.0000f,85.7143f},
{64.2857f,100.0000f},
{64.2857f,0.0000f}
};
static const GLUTStrokeStrip ch49st[] =
{
{4,ch49st0}
};
static const GLUTStrokeChar ch49 = {104.7619f,1,ch49st};
/* char: 0x32 */
static const GLUTStrokeVertex ch50st0[] =
{
{23.8095f,76.1905f},
{23.8095f,80.9524f},
{28.5714f,90.4762f},
{33.3333f,95.2381f},
{42.8571f,100.0000f},
{61.9047f,100.0000f},
{71.4286f,95.2381f},
{76.1905f,90.4762f},
{80.9524f,80.9524f},
{80.9524f,71.4286f},
{76.1905f,61.9048f},
{66.6666f,47.6190f},
{19.0476f,0.0000f},
{85.7143f,0.0000f}
};
static const GLUTStrokeStrip ch50st[] =
{
{14,ch50st0}
};
static const GLUTStrokeChar ch50 = {104.7619f,1,ch50st};
/* char: 0x33 */
static const GLUTStrokeVertex ch51st0[] =
{
{28.5714f,100.0000f},
{80.9524f,100.0000f},
{52.3809f,61.9048f},
{66.6666f,61.9048f},
{76.1905f,57.1429f},
{80.9524f,52.3810f},
{85.7143f,38.0952f},
{85.7143f,28.5714f},
{80.9524f,14.2857f},
{71.4286f,4.7619f},
{57.1428f,0.0000f},
{42.8571f,0.0000f},
{28.5714f,4.7619f},
{23.8095f,9.5238f},
{19.0476f,19.0476f}
};
static const GLUTStrokeStrip ch51st[] =
{
{15,ch51st0}
};
static const GLUTStrokeChar ch51 = {104.7619f,1,ch51st};
/* char: 0x34 */
static const GLUTStrokeVertex ch52st0[] =
{
{64.2857f,100.0000f},
{16.6667f,33.3333f},
{88.0952f,33.3333f}
};
static const GLUTStrokeVertex ch52st1[] =
{
{64.2857f,100.0000f},
{64.2857f,0.0000f}
};
static const GLUTStrokeStrip ch52st[] =
{
{3,ch52st0},
{2,ch52st1}
};
static const GLUTStrokeChar ch52 = {104.7619f,2,ch52st};
/* char: 0x35 */
static const GLUTStrokeVertex ch53st0[] =
{
{76.1905f,100.0000f},
{28.5714f,100.0000f},
{23.8095f,57.1429f},
{28.5714f,61.9048f},
{42.8571f,66.6667f},
{57.1428f,66.6667f},
{71.4286f,61.9048f},
{80.9524f,52.3810f},
{85.7143f,38.0952f},
{85.7143f,28.5714f},
{80.9524f,14.2857f},
{71.4286f,4.7619f},
{57.1428f,0.0000f},
{42.8571f,0.0000f},
{28.5714f,4.7619f},
{23.8095f,9.5238f},
{19.0476f,19.0476f}
};
static const GLUTStrokeStrip ch53st[] =
{
{17,ch53st0}
};
static const GLUTStrokeChar ch53 = {104.7619f,1,ch53st};
/* char: 0x36 */
static const GLUTStrokeVertex ch54st0[] =
{
{78.5714f,85.7143f},
{73.8096f,95.2381f},
{59.5238f,100.0000f},
{50.0000f,100.0000f},
{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.0000f,0.0000f},
{54.7619f,0.0000f},
{69.0476f,4.7619f},
{78.5714f,14.2857f},
{83.3334f,28.5714f},
{83.3334f,33.3333f},
{78.5714f,47.6190f},
{69.0476f,57.1429f},
{54.7619f,61.9048f},
{50.0000f,61.9048f},
{35.7143f,57.1429f},
{26.1905f,47.6190f},
{21.4286f,33.3333f}
};
static const GLUTStrokeStrip ch54st[] =
{
{23,ch54st0}
};
static const GLUTStrokeChar ch54 = {104.7619f,1,ch54st};
/* char: 0x37 */
static const GLUTStrokeVertex ch55st0[] =
{
{85.7143f,100.0000f},
{38.0952f,0.0000f}
};
static const GLUTStrokeVertex ch55st1[] =
{
{19.0476f,100.0000f},
{85.7143f,100.0000f}
};
static const GLUTStrokeStrip ch55st[] =
{
{2,ch55st0},
{2,ch55st1}
};
static const GLUTStrokeChar ch55 = {104.7619f,2,ch55st};
/* char: 0x38 */
static const GLUTStrokeVertex ch56st0[] =
{
{42.8571f,100.0000f},
{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.3810f},
{80.9524f,42.8571f},
{85.7143f,33.3333f},
{85.7143f,19.0476f},
{80.9524f,9.5238f},
{76.1905f,4.7619f},
{61.9047f,0.0000f},
{42.8571f,0.0000f},
{28.5714f,4.7619f},
{23.8095f,9.5238f},
{19.0476f,19.0476f},
{19.0476f,33.3333f},
{23.8095f,42.8571f},
{33.3333f,52.3810f},
{47.6190f,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.0000f},
{42.8571f,100.0000f}
};
static const GLUTStrokeStrip ch56st[] =
{
{29,ch56st0}
};
static const GLUTStrokeChar ch56 = {104.7619f,1,ch56st};
/* char: 0x39 */
static const GLUTStrokeVertex ch57st0[] =
{
{83.3334f,66.6667f},
{78.5714f,52.3810f},
{69.0476f,42.8571f},
{54.7619f,38.0952f},
{50.0000f,38.0952f},
{35.7143f,42.8571f},
{26.1905f,52.3810f},
{21.4286f,66.6667f},
{21.4286f,71.4286f},
{26.1905f,85.7143f},
{35.7143f,95.2381f},
{50.0000f,100.0000f},
{54.7619f,100.0000f},
{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.0000f},
{45.2381f,0.0000f},
{30.9524f,4.7619f},
{26.1905f,14.2857f}
};
static const GLUTStrokeStrip ch57st[] =
{
{23,ch57st0}
};
static const GLUTStrokeChar ch57 = {104.7619f,1,ch57st};
/* char: 0x3a */
static const GLUTStrokeVertex ch58st0[] =
{
{52.3810f,66.6667f},
{47.6191f,61.9048f},
{52.3810f,57.1429f},
{57.1429f,61.9048f},
{52.3810f,66.6667f}
};
static const GLUTStrokeVertex ch58st1[] =
{
{52.3810f,9.5238f},
{47.6191f,4.7619f},
{52.3810f,0.0000f},
{57.1429f,4.7619f},
{52.3810f,9.5238f}
};
static const GLUTStrokeStrip ch58st[] =
{
{5,ch58st0},
{5,ch58st1}
};
static const GLUTStrokeChar ch58 = {104.7619f,2,ch58st};
/* char: 0x3b */
static const GLUTStrokeVertex ch59st0[] =
{
{52.3810f,66.6667f},
{47.6191f,61.9048f},
{52.3810f,57.1429f},
{57.1429f,61.9048f},
{52.3810f,66.6667f}
};
static const GLUTStrokeVertex ch59st1[] =
{
{57.1429f,4.7619f},
{52.3810f,0.0000f},
{47.6191f,4.7619f},
{52.3810f,9.5238f},
{57.1429f,4.7619f},
{57.1429f,-4.7619f},
{52.3810f,-14.2857f},
{47.6191f,-19.0476f}
};
static const GLUTStrokeStrip ch59st[] =
{
{5,ch59st0},
{8,ch59st1}
};
static const GLUTStrokeChar ch59 = {104.7619f,2,ch59st};
/* char: 0x3c */
static const GLUTStrokeVertex ch60st0[] =
{
{90.4762f,85.7143f},
{14.2857f,42.8571f},
{90.4762f,0.0000f}
};
static const GLUTStrokeStrip ch60st[] =
{
{3,ch60st0}
};
static const GLUTStrokeChar ch60 = {104.7619f,1,ch60st};
/* char: 0x3d */
static const GLUTStrokeVertex ch61st0[] =
{
{9.5238f,57.1429f},
{95.2381f,57.1429f}
};
static const GLUTStrokeVertex ch61st1[] =
{
{9.5238f,28.5714f},
{95.2381f,28.5714f}
};
static const GLUTStrokeStrip ch61st[] =
{
{2,ch61st0},
{2,ch61st1}
};
static const GLUTStrokeChar ch61 = {104.7619f,2,ch61st};
/* char: 0x3e */
static const GLUTStrokeVertex ch62st0[] =
{
{14.2857f,85.7143f},
{90.4762f,42.8571f},
{14.2857f,0.0000f}
};
static const GLUTStrokeStrip ch62st[] =
{
{3,ch62st0}
};
static const GLUTStrokeChar ch62 = {104.7619f,1,ch62st};
/* char: 0x3f */
static const GLUTStrokeVertex ch63st0[] =
{
{23.8095f,76.1905f},
{23.8095f,80.9524f},
{28.5714f,90.4762f},
{33.3333f,95.2381f},
{42.8571f,100.0000f},
{61.9047f,100.0000f},
{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.6190f},
{52.3809f,33.3333f}
};
static const GLUTStrokeVertex ch63st1[] =
{
{52.3809f,9.5238f},
{47.6190f,4.7619f},
{52.3809f,0.0000f},
{57.1428f,4.7619f},
{52.3809f,9.5238f}
};
static const GLUTStrokeStrip ch63st[] =
{
{14,ch63st0},
{5,ch63st1}
};
static const GLUTStrokeChar ch63 = {104.7619f,2,ch63st};
/* char: 0x40 */
static const GLUTStrokeVertex ch64st0[] =
{
{64.2857f,52.3810f},
{54.7619f,57.1429f},
{45.2381f,57.1429f},
{40.4762f,47.6190f},
{40.4762f,42.8571f},
{45.2381f,33.3333f},
{54.7619f,33.3333f},
{64.2857f,38.0952f}
};
static const GLUTStrokeVertex ch64st1[] =
{
{64.2857f,57.1429f},
{64.2857f,38.0952f},
{69.0476f,33.3333f},
{78.5714f,33.3333f},
{83.3334f,42.8571f},
{83.3334f,47.6190f},
{78.5714f,61.9048f},
{69.0476f,71.4286f},
{54.7619f,76.1905f},
{50.0000f,76.1905f},
{35.7143f,71.4286f},
{26.1905f,61.9048f},
{21.4286f,47.6190f},
{21.4286f,42.8571f},
{26.1905f,28.5714f},
{35.7143f,19.0476f},
{50.0000f,14.2857f},
{54.7619f,14.2857f},
{69.0476f,19.0476f}
};
static const GLUTStrokeStrip ch64st[] =
{
{8,ch64st0},
{19,ch64st1}
};
static const GLUTStrokeChar ch64 = {104.7619f,2,ch64st};
/* char: 0x41 */
static const GLUTStrokeVertex ch65st0[] =
{
{52.3809f,100.0000f},
{14.2857f,0.0000f}
};
static const GLUTStrokeVertex ch65st1[] =
{
{52.3809f,100.0000f},
{90.4762f,0.0000f}
};
static const GLUTStrokeVertex ch65st2[] =
{
{28.5714f,33.3333f},
{76.1905f,33.3333f}
};
static const GLUTStrokeStrip ch65st[] =
{
{2,ch65st0},
{2,ch65st1},
{2,ch65st2}
};
static const GLUTStrokeChar ch65 = {104.7619f,3,ch65st};
/* char: 0x42 */
static const GLUTStrokeVertex ch66st0[] =
{
{19.0476f,100.0000f},
{19.0476f,0.0000f}
};
static const GLUTStrokeVertex ch66st1[] =
{
{19.0476f,100.0000f},
{61.9047f,100.0000f},
{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.3810f}
};
static const GLUTStrokeVertex ch66st2[] =
{
{19.0476f,52.3810f},
{61.9047f,52.3810f},
{76.1905f,47.6190f},
{80.9524f,42.8571f},
{85.7143f,33.3333f},
{85.7143f,19.0476f},
{80.9524f,9.5238f},
{76.1905f,4.7619f},
{61.9047f,0.0000f},
{19.0476f,0.0000f}
};
static const GLUTStrokeStrip ch66st[] =
{
{2,ch66st0},
{9,ch66st1},
{10,ch66st2}
};
static const GLUTStrokeChar ch66 = {104.7619f,3,ch66st};
/* char: 0x43 */
static const GLUTStrokeVertex ch67st0[] =
{
{88.0952f,76.1905f},
{83.3334f,85.7143f},
{73.8096f,95.2381f},
{64.2857f,100.0000f},
{45.2381f,100.0000f},
{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.0000f},
{64.2857f,0.0000f},
{73.8096f,4.7619f},
{83.3334f,14.2857f},
{88.0952f,23.8095f}
};
static const GLUTStrokeStrip ch67st[] =
{
{18,ch67st0}
};
static const GLUTStrokeChar ch67 = {104.7619f,1,ch67st};
/* char: 0x44 */
static const GLUTStrokeVertex ch68st0[] =
{
{19.0476f,100.0000f},
{19.0476f,0.0000f}
};
static const GLUTStrokeVertex ch68st1[] =
{
{19.0476f,100.0000f},
{52.3809f,100.0000f},
{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.0000f},
{19.0476f,0.0000f}
};
static const GLUTStrokeStrip ch68st[] =
{
{2,ch68st0},
{12,ch68st1}
};
static const GLUTStrokeChar ch68 = {104.7619f,2,ch68st};
/* char: 0x45 */
static const GLUTStrokeVertex ch69st0[] =
{
{21.4286f,100.0000f},
{21.4286f,0.0000f}
};
static const GLUTStrokeVertex ch69st1[] =
{
{21.4286f,100.0000f},
{83.3334f,100.0000f}
};
static const GLUTStrokeVertex ch69st2[] =
{
{21.4286f,52.3810f},
{59.5238f,52.3810f}
};
static const GLUTStrokeVertex ch69st3[] =
{
{21.4286f,0.0000f},
{83.3334f,0.0000f}
};
static const GLUTStrokeStrip ch69st[] =
{
{2,ch69st0},
{2,ch69st1},
{2,ch69st2},
{2,ch69st3}
};
static const GLUTStrokeChar ch69 = {104.7619f,4,ch69st};
/* char: 0x46 */
static const GLUTStrokeVertex ch70st0[] =
{
{21.4286f,100.0000f},
{21.4286f,0.0000f}
};
static const GLUTStrokeVertex ch70st1[] =
{
{21.4286f,100.0000f},
{83.3334f,100.0000f}
};
static const GLUTStrokeVertex ch70st2[] =
{
{21.4286f,52.3810f},
{59.5238f,52.3810f}
};
static const GLUTStrokeStrip ch70st[] =
{
{2,ch70st0},
{2,ch70st1},
{2,ch70st2}
};
static const GLUTStrokeChar ch70 = {104.7619f,3,ch70st};
/* char: 0x47 */
static const GLUTStrokeVertex ch71st0[] =
{
{88.0952f,76.1905f},
{83.3334f,85.7143f},
{73.8096f,95.2381f},
{64.2857f,100.0000f},
{45.2381f,100.0000f},
{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.0000f},
{64.2857f,0.0000f},
{73.8096f,4.7619f},
{83.3334f,14.2857f},
{88.0952f,23.8095f},
{88.0952f,38.0952f}
};
static const GLUTStrokeVertex ch71st1[] =
{
{64.2857f,38.0952f},
{88.0952f,38.0952f}
};
static const GLUTStrokeStrip ch71st[] =
{
{19,ch71st0},
{2,ch71st1}
};
static const GLUTStrokeChar ch71 = {104.7619f,2,ch71st};
/* char: 0x48 */
static const GLUTStrokeVertex ch72st0[] =
{
{19.0476f,100.0000f},
{19.0476f,0.0000f}
};
static const GLUTStrokeVertex ch72st1[] =
{
{85.7143f,100.0000f},
{85.7143f,0.0000f}
};
static const GLUTStrokeVertex ch72st2[] =
{
{19.0476f,52.3810f},
{85.7143f,52.3810f}
};
static const GLUTStrokeStrip ch72st[] =
{
{2,ch72st0},
{2,ch72st1},
{2,ch72st2}
};
static const GLUTStrokeChar ch72 = {104.7619f,3,ch72st};
/* char: 0x49 */
static const GLUTStrokeVertex ch73st0[] =
{
{52.3810f,100.0000f},
{52.3810f,0.0000f}
};
static const GLUTStrokeStrip ch73st[] =
{
{2,ch73st0}
};
static const GLUTStrokeChar ch73 = {104.7619f,1,ch73st};
/* char: 0x4a */
static const GLUTStrokeVertex ch74st0[] =
{
{76.1905f,100.0000f},
{76.1905f,23.8095f},
{71.4286f,9.5238f},
{66.6667f,4.7619f},
{57.1429f,0.0000f},
{47.6191f,0.0000f},
{38.0953f,4.7619f},
{33.3334f,9.5238f},
{28.5715f,23.8095f},
{28.5715f,33.3333f}
};
static const GLUTStrokeStrip ch74st[] =
{
{10,ch74st0}
};
static const GLUTStrokeChar ch74 = {104.7619f,1,ch74st};
/* char: 0x4b */
static const GLUTStrokeVertex ch75st0[] =
{
{19.0476f,100.0000f},
{19.0476f,0.0000f}
};
static const GLUTStrokeVertex ch75st1[] =
{
{85.7143f,100.0000f},
{19.0476f,33.3333f}
};
static const GLUTStrokeVertex ch75st2[] =
{
{42.8571f,57.1429f},
{85.7143f,0.0000f}
};
static const GLUTStrokeStrip ch75st[] =
{
{2,ch75st0},
{2,ch75st1},
{2,ch75st2}
};
static const GLUTStrokeChar ch75 = {104.7619f,3,ch75st};
/* char: 0x4c */
static const GLUTStrokeVertex ch76st0[] =
{
{23.8095f,100.0000f},
{23.8095f,0.0000f}
};
static const GLUTStrokeVertex ch76st1[] =
{
{23.8095f,0.0000f},
{80.9524f,0.0000f}
};
static const GLUTStrokeStrip ch76st[] =
{
{2,ch76st0},
{2,ch76st1}
};
static const GLUTStrokeChar ch76 = {104.7619f,2,ch76st};
/* char: 0x4d */
static const GLUTStrokeVertex ch77st0[] =
{
{14.2857f,100.0000f},
{14.2857f,0.0000f}
};
static const GLUTStrokeVertex ch77st1[] =
{
{14.2857f,100.0000f},
{52.3809f,0.0000f}
};
static const GLUTStrokeVertex ch77st2[] =
{
{90.4762f,100.0000f},
{52.3809f,0.0000f}
};
static const GLUTStrokeVertex ch77st3[] =
{
{90.4762f,100.0000f},
{90.4762f,0.0000f}
};
static const GLUTStrokeStrip ch77st[] =
{
{2,ch77st0},
{2,ch77st1},
{2,ch77st2},
{2,ch77st3}
};
static const GLUTStrokeChar ch77 = {104.7619f,4,ch77st};
/* char: 0x4e */
static const GLUTStrokeVertex ch78st0[] =
{
{19.0476f,100.0000f},
{19.0476f,0.0000f}
};
static const GLUTStrokeVertex ch78st1[] =
{
{19.0476f,100.0000f},
{85.7143f,0.0000f}
};
static const GLUTStrokeVertex ch78st2[] =
{
{85.7143f,100.0000f},
{85.7143f,0.0000f}
};
static const GLUTStrokeStrip ch78st[] =
{
{2,ch78st0},
{2,ch78st1},
{2,ch78st2}
};
static const GLUTStrokeChar ch78 = {104.7619f,3,ch78st};
/* char: 0x4f */
static const GLUTStrokeVertex ch79st0[] =
{
{42.8571f,100.0000f},
{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.0000f},
{61.9047f,0.0000f},
{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.0000f},
{42.8571f,100.0000f}
};
static const GLUTStrokeStrip ch79st[] =
{
{21,ch79st0}
};
static const GLUTStrokeChar ch79 = {104.7619f,1,ch79st};
/* char: 0x50 */
static const GLUTStrokeVertex ch80st0[] =
{
{19.0476f,100.0000f},
{19.0476f,0.0000f}
};
static const GLUTStrokeVertex ch80st1[] =
{
{19.0476f,100.0000f},
{61.9047f,100.0000f},
{76.1905f,95.2381f},
{80.9524f,90.4762f},
{85.7143f,80.9524f},
{85.7143f,66.6667f},
{80.9524f,57.1429f},
{76.1905f,52.3810f},
{61.9047f,47.6190f},
{19.0476f,47.6190f}
};
static const GLUTStrokeStrip ch80st[] =
{
{2,ch80st0},
{10,ch80st1}
};
static const GLUTStrokeChar ch80 = {104.7619f,2,ch80st};
/* char: 0x51 */
static const GLUTStrokeVertex ch81st0[] =
{
{42.8571f,100.0000f},
{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.0000f},
{61.9047f,0.0000f},
{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.0000f},
{42.8571f,100.0000f}
};
static const GLUTStrokeVertex ch81st1[] =
{
{57.1428f,19.0476f},
{85.7143f,-9.5238f}
};
static const GLUTStrokeStrip ch81st[] =
{
{21,ch81st0},
{2,ch81st1}
};
static const GLUTStrokeChar ch81 = {104.7619f,2,ch81st};
/* char: 0x52 */
static const GLUTStrokeVertex ch82st0[] =
{
{19.0476f,100.0000f},
{19.0476f,0.0000f}
};
static const GLUTStrokeVertex ch82st1[] =
{
{19.0476f,100.0000f},
{61.9047f,100.0000f},
{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.3810f},
{19.0476f,52.3810f}
};
static const GLUTStrokeVertex ch82st2[] =
{
{52.3809f,52.3810f},
{85.7143f,0.0000f}
};
static const GLUTStrokeStrip ch82st[] =
{
{2,ch82st0},
{10,ch82st1},
{2,ch82st2}
};
static const GLUTStrokeChar ch82 = {104.7619f,3,ch82st};
/* char: 0x53 */
static const GLUTStrokeVertex ch83st0[] =
{
{85.7143f,85.7143f},
{76.1905f,95.2381f},
{61.9047f,100.0000f},
{42.8571f,100.0000f},
{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.6190f},
{76.1905f,42.8571f},
{80.9524f,38.0952f},
{85.7143f,28.5714f},
{85.7143f,14.2857f},
{76.1905f,4.7619f},
{61.9047f,0.0000f},
{42.8571f,0.0000f},
{28.5714f,4.7619f},
{19.0476f,14.2857f}
};
static const GLUTStrokeStrip ch83st[] =
{
{20,ch83st0}
};
static const GLUTStrokeChar ch83 = {104.7619f,1,ch83st};
/* char: 0x54 */
static const GLUTStrokeVertex ch84st0[] =
{
{52.3809f,100.0000f},
{52.3809f,0.0000f}
};
static const GLUTStrokeVertex ch84st1[] =
{
{19.0476f,100.0000f},
{85.7143f,100.0000f}
};
static const GLUTStrokeStrip ch84st[] =
{
{2,ch84st0},
{2,ch84st1}
};
static const GLUTStrokeChar ch84 = {104.7619f,2,ch84st};
/* char: 0x55 */
static const GLUTStrokeVertex ch85st0[] =
{
{19.0476f,100.0000f},
{19.0476f,28.5714f},
{23.8095f,14.2857f},
{33.3333f,4.7619f},
{47.6190f,0.0000f},
{57.1428f,0.0000f},
{71.4286f,4.7619f},
{80.9524f,14.2857f},
{85.7143f,28.5714f},
{85.7143f,100.0000f}
};
static const GLUTStrokeStrip ch85st[] =
{
{10,ch85st0}
};
static const GLUTStrokeChar ch85 = {104.7619f,1,ch85st};
/* char: 0x56 */
static const GLUTStrokeVertex ch86st0[] =
{
{14.2857f,100.0000f},
{52.3809f,0.0000f}
};
static const GLUTStrokeVertex ch86st1[] =
{
{90.4762f,100.0000f},
{52.3809f,0.0000f}
};
static const GLUTStrokeStrip ch86st[] =
{
{2,ch86st0},
{2,ch86st1}
};
static const GLUTStrokeChar ch86 = {104.7619f,2,ch86st};
/* char: 0x57 */
static const GLUTStrokeVertex ch87st0[] =
{
{4.7619f,100.0000f},
{28.5714f,0.0000f}
};
static const GLUTStrokeVertex ch87st1[] =
{
{52.3809f,100.0000f},
{28.5714f,0.0000f}
};
static const GLUTStrokeVertex ch87st2[] =
{
{52.3809f,100.0000f},
{76.1905f,0.0000f}
};
static const GLUTStrokeVertex ch87st3[] =
{
{100.0000f,100.0000f},
{76.1905f,0.0000f}
};
static const GLUTStrokeStrip ch87st[] =
{
{2,ch87st0},
{2,ch87st1},
{2,ch87st2},
{2,ch87st3}
};
static const GLUTStrokeChar ch87 = {104.7619f,4,ch87st};
/* char: 0x58 */
static const GLUTStrokeVertex ch88st0[] =
{
{19.0476f,100.0000f},
{85.7143f,0.0000f}
};
static const GLUTStrokeVertex ch88st1[] =
{
{85.7143f,100.0000f},
{19.0476f,0.0000f}
};
static const GLUTStrokeStrip ch88st[] =
{
{2,ch88st0},
{2,ch88st1}
};
static const GLUTStrokeChar ch88 = {104.7619f,2,ch88st};
/* char: 0x59 */
static const GLUTStrokeVertex ch89st0[] =
{
{14.2857f,100.0000f},
{52.3809f,52.3810f},
{52.3809f,0.0000f}
};
static const GLUTStrokeVertex ch89st1[] =
{
{90.4762f,100.0000f},
{52.3809f,52.3810f}
};
static const GLUTStrokeStrip ch89st[] =
{
{3,ch89st0},
{2,ch89st1}
};
static const GLUTStrokeChar ch89 = {104.7619f,2,ch89st};
/* char: 0x5a */
static const GLUTStrokeVertex ch90st0[] =
{
{85.7143f,100.0000f},
{19.0476f,0.0000f}
};
static const GLUTStrokeVertex ch90st1[] =
{
{19.0476f,100.0000f},
{85.7143f,100.0000f}
};
static const GLUTStrokeVertex ch90st2[] =
{
{19.0476f,0.0000f},
{85.7143f,0.0000f}
};
static const GLUTStrokeStrip ch90st[] =
{
{2,ch90st0},
{2,ch90st1},
{2,ch90st2}
};
static const GLUTStrokeChar ch90 = {104.7619f,3,ch90st};
/* char: 0x5b */
static const GLUTStrokeVertex ch91st0[] =
{
{35.7143f,119.0476f},
{35.7143f,-33.3333f}
};
static const GLUTStrokeVertex ch91st1[] =
{
{40.4762f,119.0476f},
{40.4762f,-33.3333f}
};
static const GLUTStrokeVertex ch91st2[] =
{
{35.7143f,119.0476f},
{69.0476f,119.0476f}
};
static const GLUTStrokeVertex ch91st3[] =
{
{35.7143f,-33.3333f},
{69.0476f,-33.3333f}
};
static const GLUTStrokeStrip ch91st[] =
{
{2,ch91st0},
{2,ch91st1},
{2,ch91st2},
{2,ch91st3}
};
static const GLUTStrokeChar ch91 = {104.7619f,4,ch91st};
/* char: 0x5c */
static const GLUTStrokeVertex ch92st0[] =
{
{19.0476f,100.0000f},
{85.7143f,-14.2857f}
};
static const GLUTStrokeStrip ch92st[] =
{
{2,ch92st0}
};
static const GLUTStrokeChar ch92 = {104.7619f,1,ch92st};
/* char: 0x5d */
static const GLUTStrokeVertex ch93st0[] =
{
{64.2857f,119.0476f},
{64.2857f,-33.3333f}
};
static const GLUTStrokeVertex ch93st1[] =
{
{69.0476f,119.0476f},
{69.0476f,-33.3333f}
};
static const GLUTStrokeVertex ch93st2[] =
{
{35.7143f,119.0476f},
{69.0476f,119.0476f}
};
static const GLUTStrokeVertex ch93st3[] =
{
{35.7143f,-33.3333f},
{69.0476f,-33.3333f}
};
static const GLUTStrokeStrip ch93st[] =
{
{2,ch93st0},
{2,ch93st1},
{2,ch93st2},
{2,ch93st3}
};
static const GLUTStrokeChar ch93 = {104.7619f,4,ch93st};
/* char: 0x5e */
static const GLUTStrokeVertex ch94st0[] =
{
{52.3809f,109.5238f},
{14.2857f,42.8571f}
};
static const GLUTStrokeVertex ch94st1[] =
{
{52.3809f,109.5238f},
{90.4762f,42.8571f}
};
static const GLUTStrokeStrip ch94st[] =
{
{2,ch94st0},
{2,ch94st1}
};
static const GLUTStrokeChar ch94 = {104.7619f,2,ch94st};
/* char: 0x5f */
static const GLUTStrokeVertex ch95st0[] =
{
{0.0000f,-33.3333f},
{104.7619f,-33.3333f},
{104.7619f,-28.5714f},
{0.0000f,-28.5714f},
{0.0000f,-33.3333f}
};
static const GLUTStrokeStrip ch95st[] =
{
{5,ch95st0}
};
static const GLUTStrokeChar ch95 = {104.7619f,1,ch95st};
/* char: 0x60 */
static const GLUTStrokeVertex ch96st0[] =
{
{42.8572f,100.0000f},
{66.6667f,71.4286f}
};
static const GLUTStrokeVertex ch96st1[] =
{
{42.8572f,100.0000f},
{38.0953f,95.2381f},
{66.6667f,71.4286f}
};
static const GLUTStrokeStrip ch96st[] =
{
{2,ch96st0},
{3,ch96st1}
};
static const GLUTStrokeChar ch96 = {104.7619f,2,ch96st};
/* char: 0x61 */
static const GLUTStrokeVertex ch97st0[] =
{
{80.9524f,66.6667f},
{80.9524f,0.0000f}
};
static const GLUTStrokeVertex ch97st1[] =
{
{80.9524f,52.3810f},
{71.4285f,61.9048f},
{61.9047f,66.6667f},
{47.6190f,66.6667f},
{38.0952f,61.9048f},
{28.5714f,52.3810f},
{23.8095f,38.0952f},
{23.8095f,28.5714f},
{28.5714f,14.2857f},
{38.0952f,4.7619f},
{47.6190f,0.0000f},
{61.9047f,0.0000f},
{71.4285f,4.7619f},
{80.9524f,14.2857f}
};
static const GLUTStrokeStrip ch97st[] =
{
{2,ch97st0},
{14,ch97st1}
};
static const GLUTStrokeChar ch97 = {104.7619f,2,ch97st};
/* char: 0x62 */
static const GLUTStrokeVertex ch98st0[] =
{
{23.8095f,100.0000f},
{23.8095f,0.0000f}
};
static const GLUTStrokeVertex ch98st1[] =
{
{23.8095f,52.3810f},
{33.3333f,61.9048f},
{42.8571f,66.6667f},
{57.1428f,66.6667f},
{66.6666f,61.9048f},
{76.1905f,52.3810f},
{80.9524f,38.0952f},
{80.9524f,28.5714f},
{76.1905f,14.2857f},
{66.6666f,4.7619f},
{57.1428f,0.0000f},
{42.8571f,0.0000f},
{33.3333f,4.7619f},
{23.8095f,14.2857f}
};
static const GLUTStrokeStrip ch98st[] =
{
{2,ch98st0},
{14,ch98st1}
};
static const GLUTStrokeChar ch98 = {104.7619f,2,ch98st};
/* char: 0x63 */
static const GLUTStrokeVertex ch99st0[] =
{
{80.9524f,52.3810f},
{71.4285f,61.9048f},
{61.9047f,66.6667f},
{47.6190f,66.6667f},
{38.0952f,61.9048f},
{28.5714f,52.3810f},
{23.8095f,38.0952f},
{23.8095f,28.5714f},
{28.5714f,14.2857f},
{38.0952f,4.7619f},
{47.6190f,0.0000f},
{61.9047f,0.0000f},
{71.4285f,4.7619f},
{80.9524f,14.2857f}
};
static const GLUTStrokeStrip ch99st[] =
{
{14,ch99st0}
};
static const GLUTStrokeChar ch99 = {104.7619f,1,ch99st};
/* char: 0x64 */
static const GLUTStrokeVertex ch100st0[] =
{
{80.9524f,100.0000f},
{80.9524f,0.0000f}
};
static const GLUTStrokeVertex ch100st1[] =
{
{80.9524f,52.3810f},
{71.4285f,61.9048f},
{61.9047f,66.6667f},
{47.6190f,66.6667f},
{38.0952f,61.9048f},
{28.5714f,52.3810f},
{23.8095f,38.0952f},
{23.8095f,28.5714f},
{28.5714f,14.2857f},
{38.0952f,4.7619f},
{47.6190f,0.0000f},
{61.9047f,0.0000f},
{71.4285f,4.7619f},
{80.9524f,14.2857f}
};
static const GLUTStrokeStrip ch100st[] =
{
{2,ch100st0},
{14,ch100st1}
};
static const GLUTStrokeChar ch100 = {104.7619f,2,ch100st};
/* char: 0x65 */
static const GLUTStrokeVertex ch101st0[] =
{
{23.8095f,38.0952f},
{80.9524f,38.0952f},
{80.9524f,47.6190f},
{76.1905f,57.1429f},
{71.4285f,61.9048f},
{61.9047f,66.6667f},
{47.6190f,66.6667f},
{38.0952f,61.9048f},
{28.5714f,52.3810f},
{23.8095f,38.0952f},
{23.8095f,28.5714f},
{28.5714f,14.2857f},
{38.0952f,4.7619f},
{47.6190f,0.0000f},
{61.9047f,0.0000f},
{71.4285f,4.7619f},
{80.9524f,14.2857f}
};
static const GLUTStrokeStrip ch101st[] =
{
{17,ch101st0}
};
static const GLUTStrokeChar ch101 = {104.7619f,1,ch101st};
/* char: 0x66 */
static const GLUTStrokeVertex ch102st0[] =
{
{71.4286f,100.0000f},
{61.9048f,100.0000f},
{52.3810f,95.2381f},
{47.6191f,80.9524f},
{47.6191f,0.0000f}
};
static const GLUTStrokeVertex ch102st1[] =
{
{33.3334f,66.6667f},
{66.6667f,66.6667f}
};
static const GLUTStrokeStrip ch102st[] =
{
{5,ch102st0},
{2,ch102st1}
};
static const GLUTStrokeChar ch102 = {104.7619f,2,ch102st};
/* char: 0x67 */
static const GLUTStrokeVertex ch103st0[] =
{
{80.9524f,66.6667f},
{80.9524f,-9.5238f},
{76.1905f,-23.8095f},
{71.4285f,-28.5714f},
{61.9047f,-33.3333f},
{47.6190f,-33.3333f},
{38.0952f,-28.5714f}
};
static const GLUTStrokeVertex ch103st1[] =
{
{80.9524f,52.3810f},
{71.4285f,61.9048f},
{61.9047f,66.6667f},
{47.6190f,66.6667f},
{38.0952f,61.9048f},
{28.5714f,52.3810f},
{23.8095f,38.0952f},
{23.8095f,28.5714f},
{28.5714f,14.2857f},
{38.0952f,4.7619f},
{47.6190f,0.0000f},
{61.9047f,0.0000f},
{71.4285f,4.7619f},
{80.9524f,14.2857f}
};
static const GLUTStrokeStrip ch103st[] =
{
{7,ch103st0},
{14,ch103st1}
};
static const GLUTStrokeChar ch103 = {104.7619f,2,ch103st};
/* char: 0x68 */
static const GLUTStrokeVertex ch104st0[] =
{
{26.1905f,100.0000f},
{26.1905f,0.0000f}
};
static const GLUTStrokeVertex ch104st1[] =
{
{26.1905f,47.6190f},
{40.4762f,61.9048f},
{50.0000f,66.6667f},
{64.2857f,66.6667f},
{73.8095f,61.9048f},
{78.5715f,47.6190f},
{78.5715f,0.0000f}
};
static const GLUTStrokeStrip ch104st[] =
{
{2,ch104st0},
{7,ch104st1}
};
static const GLUTStrokeChar ch104 = {104.7619f,2,ch104st};
/* char: 0x69 */
static const GLUTStrokeVertex ch105st0[] =
{
{47.6191f,100.0000f},
{52.3810f,95.2381f},
{57.1429f,100.0000f},
{52.3810f,104.7619f},
{47.6191f,100.0000f}
};
static const GLUTStrokeVertex ch105st1[] =
{
{52.3810f,66.6667f},
{52.3810f,0.0000f}
};
static const GLUTStrokeStrip ch105st[] =
{
{5,ch105st0},
{2,ch105st1}
};
static const GLUTStrokeChar ch105 = {104.7619f,2,ch105st};
/* char: 0x6a */
static const GLUTStrokeVertex ch106st0[] =
{
{57.1429f,100.0000f},
{61.9048f,95.2381f},
{66.6667f,100.0000f},
{61.9048f,104.7619f},
{57.1429f,100.0000f}
};
static const GLUTStrokeVertex ch106st1[] =
{
{61.9048f,66.6667f},
{61.9048f,-14.2857f},
{57.1429f,-28.5714f},
{47.6191f,-33.3333f},
{38.0953f,-33.3333f}
};
static const GLUTStrokeStrip ch106st[] =
{
{5,ch106st0},
{5,ch106st1}
};
static const GLUTStrokeChar ch106 = {104.7619f,2,ch106st};
/* char: 0x6b */
static const GLUTStrokeVertex ch107st0[] =
{
{26.1905f,100.0000f},
{26.1905f,0.0000f}
};
static const GLUTStrokeVertex ch107st1[] =
{
{73.8095f,66.6667f},
{26.1905f,19.0476f}
};
static const GLUTStrokeVertex ch107st2[] =
{
{45.2381f,38.0952f},
{78.5715f,0.0000f}
};
static const GLUTStrokeStrip ch107st[] =
{
{2,ch107st0},
{2,ch107st1},
{2,ch107st2}
};
static const GLUTStrokeChar ch107 = {104.7619f,3,ch107st};
/* char: 0x6c */
static const GLUTStrokeVertex ch108st0[] =
{
{52.3810f,100.0000f},
{52.3810f,0.0000f}
};
static const GLUTStrokeStrip ch108st[] =
{
{2,ch108st0}
};
static const GLUTStrokeChar ch108 = {104.7619f,1,ch108st};
/* char: 0x6d */
static const GLUTStrokeVertex ch109st0[] =
{
{0.0000f,66.6667f},
{0.0000f,0.0000f}
};
static const GLUTStrokeVertex ch109st1[] =
{
{0.0000f,47.6190f},
{14.2857f,61.9048f},
{23.8095f,66.6667f},
{38.0952f,66.6667f},
{47.6190f,61.9048f},
{52.3810f,47.6190f},
{52.3810f,0.0000f}
};
static const GLUTStrokeVertex ch109st2[] =
{
{52.3810f,47.6190f},
{66.6667f,61.9048f},
{76.1905f,66.6667f},
{90.4762f,66.6667f},
{100.0000f,61.9048f},
{104.7619f,47.6190f},
{104.7619f,0.0000f}
};
static const GLUTStrokeStrip ch109st[] =
{
{2,ch109st0},
{7,ch109st1},
{7,ch109st2}
};
static const GLUTStrokeChar ch109 = {104.7619f,3,ch109st};
/* char: 0x6e */
static const GLUTStrokeVertex ch110st0[] =
{
{26.1905f,66.6667f},
{26.1905f,0.0000f}
};
static const GLUTStrokeVertex ch110st1[] =
{
{26.1905f,47.6190f},
{40.4762f,61.9048f},
{50.0000f,66.6667f},
{64.2857f,66.6667f},
{73.8095f,61.9048f},
{78.5715f,47.6190f},
{78.5715f,0.0000f}
};
static const GLUTStrokeStrip ch110st[] =
{
{2,ch110st0},
{7,ch110st1}
};
static const GLUTStrokeChar ch110 = {104.7619f,2,ch110st};
/* char: 0x6f */
static const GLUTStrokeVertex ch111st0[] =
{
{45.2381f,66.6667f},
{35.7143f,61.9048f},
{26.1905f,52.3810f},
{21.4286f,38.0952f},
{21.4286f,28.5714f},
{26.1905f,14.2857f},
{35.7143f,4.7619f},
{45.2381f,0.0000f},
{59.5238f,0.0000f},
{69.0476f,4.7619f},
{78.5714f,14.2857f},
{83.3334f,28.5714f},
{83.3334f,38.0952f},
{78.5714f,52.3810f},
{69.0476f,61.9048f},
{59.5238f,66.6667f},
{45.2381f,66.6667f}
};
static const GLUTStrokeStrip ch111st[] =
{
{17,ch111st0}
};
static const GLUTStrokeChar ch111 = {104.7619f,1,ch111st};
/* char: 0x70 */
static const GLUTStrokeVertex ch112st0[] =
{
{23.8095f,66.6667f},
{23.8095f,-33.3333f}
};
static const GLUTStrokeVertex ch112st1[] =
{
{23.8095f,52.3810f},
{33.3333f,61.9048f},
{42.8571f,66.6667f},
{57.1428f,66.6667f},
{66.6666f,61.9048f},
{76.1905f,52.3810f},
{80.9524f,38.0952f},
{80.9524f,28.5714f},
{76.1905f,14.2857f},
{66.6666f,4.7619f},
{57.1428f,0.0000f},
{42.8571f,0.0000f},
{33.3333f,4.7619f},
{23.8095f,14.2857f}
};
static const GLUTStrokeStrip ch112st[] =
{
{2,ch112st0},
{14,ch112st1}
};
static const GLUTStrokeChar ch112 = {104.7619f,2,ch112st};
/* char: 0x71 */
static const GLUTStrokeVertex ch113st0[] =
{
{80.9524f,66.6667f},
{80.9524f,-33.3333f}
};
static const GLUTStrokeVertex ch113st1[] =
{
{80.9524f,52.3810f},
{71.4285f,61.9048f},
{61.9047f,66.6667f},
{47.6190f,66.6667f},
{38.0952f,61.9048f},
{28.5714f,52.3810f},
{23.8095f,38.0952f},
{23.8095f,28.5714f},
{28.5714f,14.2857f},
{38.0952f,4.7619f},
{47.6190f,0.0000f},
{61.9047f,0.0000f},
{71.4285f,4.7619f},
{80.9524f,14.2857f}
};
static const GLUTStrokeStrip ch113st[] =
{
{2,ch113st0},
{14,ch113st1}
};
static const GLUTStrokeChar ch113 = {104.7619f,2,ch113st};
/* char: 0x72 */
static const GLUTStrokeVertex ch114st0[] =
{
{33.3334f,66.6667f},
{33.3334f,0.0000f}
};
static const GLUTStrokeVertex ch114st1[] =
{
{33.3334f,38.0952f},
{38.0953f,52.3810f},
{47.6191f,61.9048f},
{57.1429f,66.6667f},
{71.4286f,66.6667f}
};
static const GLUTStrokeStrip ch114st[] =
{
{2,ch114st0},
{5,ch114st1}
};
static const GLUTStrokeChar ch114 = {104.7619f,2,ch114st};
/* char: 0x73 */
static const GLUTStrokeVertex ch115st0[] =
{
{78.5715f,52.3810f},
{73.8095f,61.9048f},
{59.5238f,66.6667f},
{45.2381f,66.6667f},
{30.9524f,61.9048f},
{26.1905f,52.3810f},
{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.0000f},
{45.2381f,0.0000f},
{30.9524f,4.7619f},
{26.1905f,14.2857f}
};
static const GLUTStrokeStrip ch115st[] =
{
{17,ch115st0}
};
static const GLUTStrokeChar ch115 = {104.7619f,1,ch115st};
/* char: 0x74 */
static const GLUTStrokeVertex ch116st0[] =
{
{47.6191f,100.0000f},
{47.6191f,19.0476f},
{52.3810f,4.7619f},
{61.9048f,0.0000f},
{71.4286f,0.0000f}
};
static const GLUTStrokeVertex ch116st1[] =
{
{33.3334f,66.6667f},
{66.6667f,66.6667f}
};
static const GLUTStrokeStrip ch116st[] =
{
{5,ch116st0},
{2,ch116st1}
};
static const GLUTStrokeChar ch116 = {104.7619f,2,ch116st};
/* char: 0x75 */
static const GLUTStrokeVertex ch117st0[] =
{
{26.1905f,66.6667f},
{26.1905f,19.0476f},
{30.9524f,4.7619f},
{40.4762f,0.0000f},
{54.7619f,0.0000f},
{64.2857f,4.7619f},
{78.5715f,19.0476f}
};
static const GLUTStrokeVertex ch117st1[] =
{
{78.5715f,66.6667f},
{78.5715f,0.0000f}
};
static const GLUTStrokeStrip ch117st[] =
{
{7,ch117st0},
{2,ch117st1}
};
static const GLUTStrokeChar ch117 = {104.7619f,2,ch117st};
/* char: 0x76 */
static const GLUTStrokeVertex ch118st0[] =
{
{23.8095f,66.6667f},
{52.3809f,0.0000f}
};
static const GLUTStrokeVertex ch118st1[] =
{
{80.9524f,66.6667f},
{52.3809f,0.0000f}
};
static const GLUTStrokeStrip ch118st[] =
{
{2,ch118st0},
{2,ch118st1}
};
static const GLUTStrokeChar ch118 = {104.7619f,2,ch118st};
/* char: 0x77 */
static const GLUTStrokeVertex ch119st0[] =
{
{14.2857f,66.6667f},
{33.3333f,0.0000f}
};
static const GLUTStrokeVertex ch119st1[] =
{
{52.3809f,66.6667f},
{33.3333f,0.0000f}
};
static const GLUTStrokeVertex ch119st2[] =
{
{52.3809f,66.6667f},
{71.4286f,0.0000f}
};
static const GLUTStrokeVertex ch119st3[] =
{
{90.4762f,66.6667f},
{71.4286f,0.0000f}
};
static const GLUTStrokeStrip ch119st[] =
{
{2,ch119st0},
{2,ch119st1},
{2,ch119st2},
{2,ch119st3}
};
static const GLUTStrokeChar ch119 = {104.7619f,4,ch119st};
/* char: 0x78 */
static const GLUTStrokeVertex ch120st0[] =
{
{26.1905f,66.6667f},
{78.5715f,0.0000f}
};
static const GLUTStrokeVertex ch120st1[] =
{
{78.5715f,66.6667f},
{26.1905f,0.0000f}
};
static const GLUTStrokeStrip ch120st[] =
{
{2,ch120st0},
{2,ch120st1}
};
static const GLUTStrokeChar ch120 = {104.7619f,2,ch120st};
/* char: 0x79 */
static const GLUTStrokeVertex ch121st0[] =
{
{26.1905f,66.6667f},
{54.7619f,0.0000f}
};
static const GLUTStrokeVertex ch121st1[] =
{
{83.3334f,66.6667f},
{54.7619f,0.0000f},
{45.2381f,-19.0476f},
{35.7143f,-28.5714f},
{26.1905f,-33.3333f},
{21.4286f,-33.3333f}
};
static const GLUTStrokeStrip ch121st[] =
{
{2,ch121st0},
{6,ch121st1}
};
static const GLUTStrokeChar ch121 = {104.7619f,2,ch121st};
/* char: 0x7a */
static const GLUTStrokeVertex ch122st0[] =
{
{78.5715f,66.6667f},
{26.1905f,0.0000f}
};
static const GLUTStrokeVertex ch122st1[] =
{
{26.1905f,66.6667f},
{78.5715f,66.6667f}
};
static const GLUTStrokeVertex ch122st2[] =
{
{26.1905f,0.0000f},
{78.5715f,0.0000f}
};
static const GLUTStrokeStrip ch122st[] =
{
{2,ch122st0},
{2,ch122st1},
{2,ch122st2}
};
static const GLUTStrokeChar ch122 = {104.7619f,3,ch122st};
/* char: 0x7b */
static const GLUTStrokeVertex ch123st0[] =
{
{64.2857f,119.0476f},
{54.7619f,114.2857f},
{50.0000f,109.5238f},
{45.2381f,100.0000f},
{45.2381f,90.4762f},
{50.0000f,80.9524f},
{54.7619f,76.1905f},
{59.5238f,66.6667f},
{59.5238f,57.1429f},
{50.0000f,47.6190f}
};
static const GLUTStrokeVertex ch123st1[] =
{
{54.7619f,114.2857f},
{50.0000f,104.7619f},
{50.0000f,95.2381f},
{54.7619f,85.7143f},
{59.5238f,80.9524f},
{64.2857f,71.4286f},
{64.2857f,61.9048f},
{59.5238f,52.3810f},
{40.4762f,42.8571f},
{59.5238f,33.3333f},
{64.2857f,23.8095f},
{64.2857f,14.2857f},
{59.5238f,4.7619f},
{54.7619f,0.0000f},
{50.0000f,-9.5238f},
{50.0000f,-19.0476f},
{54.7619f,-28.5714f}
};
static const GLUTStrokeVertex ch123st2[] =
{
{50.0000f,38.0952f},
{59.5238f,28.5714f},
{59.5238f,19.0476f},
{54.7619f,9.5238f},
{50.0000f,4.7619f},
{45.2381f,-4.7619f},
{45.2381f,-14.2857f},
{50.0000f,-23.8095f},
{54.7619f,-28.5714f},
{64.2857f,-33.3333f}
};
static const GLUTStrokeStrip ch123st[] =
{
{10,ch123st0},
{17,ch123st1},
{10,ch123st2}
};
static const GLUTStrokeChar ch123 = {104.7619f,3,ch123st};
/* char: 0x7c */
static const GLUTStrokeVertex ch124st0[] =
{
{52.3810f,119.0476f},
{52.3810f,-33.3333f}
};
static const GLUTStrokeStrip ch124st[] =
{
{2,ch124st0}
};
static const GLUTStrokeChar ch124 = {104.7619f,1,ch124st};
/* char: 0x7d */
static const GLUTStrokeVertex ch125st0[] =
{
{40.4762f,119.0476f},
{50.0000f,114.2857f},
{54.7619f,109.5238f},
{59.5238f,100.0000f},
{59.5238f,90.4762f},
{54.7619f,80.9524f},
{50.0000f,76.1905f},
{45.2381f,66.6667f},
{45.2381f,57.1429f},
{54.7619f,47.6190f}
};
static const GLUTStrokeVertex ch125st1[] =
{
{50.0000f,114.2857f},
{54.7619f,104.7619f},
{54.7619f,95.2381f},
{50.0000f,85.7143f},
{45.2381f,80.9524f},
{40.4762f,71.4286f},
{40.4762f,61.9048f},
{45.2381f,52.3810f},
{64.2857f,42.8571f},
{45.2381f,33.3333f},
{40.4762f,23.8095f},
{40.4762f,14.2857f},
{45.2381f,4.7619f},
{50.0000f,0.0000f},
{54.7619f,-9.5238f},
{54.7619f,-19.0476f},
{50.0000f,-28.5714f}
};
static const GLUTStrokeVertex ch125st2[] =
{
{54.7619f,38.0952f},
{45.2381f,28.5714f},
{45.2381f,19.0476f},
{50.0000f,9.5238f},
{54.7619f,4.7619f},
{59.5238f,-4.7619f},
{59.5238f,-14.2857f},
{54.7619f,-23.8095f},
{50.0000f,-28.5714f},
{40.4762f,-33.3333f}
};
static const GLUTStrokeStrip ch125st[] =
{
{10,ch125st0},
{17,ch125st1},
{10,ch125st2}
};
static const GLUTStrokeChar ch125 = {104.7619f,3,ch125st};
/* char: 0x7e */
static const GLUTStrokeVertex ch126st0[] =
{
{9.5238f,28.5714f},
{9.5238f,38.0952f},
{14.2857f,52.3810f},
{23.8095f,57.1429f},
{33.3333f,57.1429f},
{42.8571f,52.3810f},
{61.9048f,38.0952f},
{71.4286f,33.3333f},
{80.9524f,33.3333f},
{90.4762f,38.0952f},
{95.2381f,47.6190f}
};
static const GLUTStrokeVertex ch126st1[] =
{
{9.5238f,38.0952f},
{14.2857f,47.6190f},
{23.8095f,52.3810f},
{33.3333f,52.3810f},
{42.8571f,47.6190f},
{61.9048f,33.3333f},
{71.4286f,28.5714f},
{80.9524f,28.5714f},
{90.4762f,33.3333f},
{95.2381f,47.6190f},
{95.2381f,57.1429f}
};
static const GLUTStrokeStrip ch126st[] =
{
{11,ch126st0},
{11,ch126st1}
};
static const GLUTStrokeChar ch126 = {104.7619f,2,ch126st};
static const GLUTStrokeChar *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
};
const GLUTStrokeFont glutStrokeMonoRoman = {"MonoRoman",128,chars,152.3809f,33.3333f};
/* GENERATED FILE -- DO NOT MODIFY */
#include "internal.h"
/* char: 0x20 */
static const GLUTStrokeChar ch32 = {104.7619f,0,NULL};
/* char: 0x21 */
static const GLUTStrokeVertex ch33st0[] =
{
{13.3819f,100.0000f},
{13.3819f,33.3333f}
};
static const GLUTStrokeVertex ch33st1[] =
{
{13.3819f,9.5238f},
{8.6200f,4.7619f},
{13.3819f,0.0000f},
{18.1438f,4.7619f},
{13.3819f,9.5238f}
};
static const GLUTStrokeStrip ch33st[] =
{
{2,ch33st0},
{5,ch33st1}
};
static const GLUTStrokeChar ch33 = {26.6238f,2,ch33st};
/* char: 0x22 */
static const GLUTStrokeVertex ch34st0[] =
{
{4.0200f,100.0000f},
{4.0200f,66.6667f}
};
static const GLUTStrokeVertex ch34st1[] =
{
{42.1152f,100.0000f},
{42.1152f,66.6667f}
};
static const GLUTStrokeStrip ch34st[] =
{
{2,ch34st0},
{2,ch34st1}
};
static const GLUTStrokeChar ch34 = {51.4352f,2,ch34st};
/* char: 0x23 */
static const GLUTStrokeVertex ch35st0[] =
{
{41.2952f,119.0476f},
{7.9619f,-33.3333f}
};
static const GLUTStrokeVertex ch35st1[] =
{
{69.8667f,119.0476f},
{36.5333f,-33.3333f}
};
static const GLUTStrokeVertex ch35st2[] =
{
{7.9619f,57.1429f},
{74.6286f,57.1429f}
};
static const GLUTStrokeVertex ch35st3[] =
{
{3.2000f,28.5714f},
{69.8667f,28.5714f}
};
static const GLUTStrokeStrip ch35st[] =
{
{2,ch35st0},
{2,ch35st1},
{2,ch35st2},
{2,ch35st3}
};
static const GLUTStrokeChar ch35 = {79.4886f,4,ch35st};
/* char: 0x24 */
static const GLUTStrokeVertex ch36st0[] =
{
{28.6295f,119.0476f},
{28.6295f,-19.0476f}
};
static const GLUTStrokeVertex ch36st1[] =
{
{47.6771f,119.0476f},
{47.6771f,-19.0476f}
};
static const GLUTStrokeVertex ch36st2[] =
{
{71.4867f,85.7143f},
{61.9629f,95.2381f},
{47.6771f,100.0000f},
{28.6295f,100.0000f},
{14.3438f,95.2381f},
{4.8200f,85.7143f},
{4.8200f,76.1905f},
{9.5819f,66.6667f},
{14.3438f,61.9048f},
{23.8676f,57.1429f},
{52.4390f,47.6190f},
{61.9629f,42.8571f},
{66.7248f,38.0952f},
{71.4867f,28.5714f},
{71.4867f,14.2857f},
{61.9629f,4.7619f},
{47.6771f,0.0000f},
{28.6295f,0.0000f},
{14.3438f,4.7619f},
{4.8200f,14.2857f}
};
static const GLUTStrokeStrip ch36st[] =
{
{2,ch36st0},
{2,ch36st1},
{20,ch36st2}
};
static const GLUTStrokeChar ch36 = {76.2067f,3,ch36st};
/* char: 0x25 */
static const GLUTStrokeVertex ch37st0[] =
{
{92.0743f,100.0000f},
{6.3600f,0.0000f}
};
static const GLUTStrokeVertex ch37st1[] =
{
{30.1695f,100.0000f},
{39.6933f,90.4762f},
{39.6933f,80.9524f},
{34.9314f,71.4286f},
{25.4076f,66.6667f},
{15.8838f,66.6667f},
{6.3600f,76.1905f},
{6.3600f,85.7143f},
{11.1219f,95.2381f},
{20.6457f,100.0000f},
{30.1695f,100.0000f},
{39.6933f,95.2381f},
{53.9790f,90.4762f},
{68.2648f,90.4762f},
{82.5505f,95.2381f},
{92.0743f,100.0000f}
};
static const GLUTStrokeVertex ch37st2[] =
{
{73.0267f,33.3333f},
{63.5029f,28.5714f},
{58.7410f,19.0476f},
{58.7410f,9.5238f},
{68.2648f,0.0000f},
{77.7886f,0.0000f},
{87.3124f,4.7619f},
{92.0743f,14.2857f},
{92.0743f,23.8095f},
{82.5505f,33.3333f},
{73.0267f,33.3333f}
};
static const GLUTStrokeStrip ch37st[] =
{
{2,ch37st0},
{16,ch37st1},
{11,ch37st2}
};
static const GLUTStrokeChar ch37 = {96.5743f,3,ch37st};
/* char: 0x26 */
static const GLUTStrokeVertex ch38st0[] =
{
{101.2181f,57.1429f},
{101.2181f,61.9048f},
{96.4562f,66.6667f},
{91.6943f,66.6667f},
{86.9324f,61.9048f},
{82.1705f,52.3810f},
{72.6467f,28.5714f},
{63.1229f,14.2857f},
{53.5990f,4.7619f},
{44.0752f,0.0000f},
{25.0276f,0.0000f},
{15.5038f,4.7619f},
{10.7419f,9.5238f},
{5.9800f,19.0476f},
{5.9800f,28.5714f},
{10.7419f,38.0952f},
{15.5038f,42.8571f},
{48.8371f,61.9048f},
{53.5990f,66.6667f},
{58.3610f,76.1905f},
{58.3610f,85.7143f},
{53.5990f,95.2381f},
{44.0752f,100.0000f},
{34.5514f,95.2381f},
{29.7895f,85.7143f},
{29.7895f,76.1905f},
{34.5514f,61.9048f},
{44.0752f,47.6190f},
{67.8848f,14.2857f},
{77.4086f,4.7619f},
{86.9324f,0.0000f},
{96.4562f,0.0000f},
{101.2181f,4.7619f},
{101.2181f,9.5238f}
};
static const GLUTStrokeStrip ch38st[] =
{
{34,ch38st0}
};
static const GLUTStrokeChar ch38 = {101.7581f,1,ch38st};
/* char: 0x27 */
static const GLUTStrokeVertex ch39st0[] =
{
{4.4400f,100.0000f},
{4.4400f,66.6667f}
};
static const GLUTStrokeStrip ch39st[] =
{
{2,ch39st0}
};
static const GLUTStrokeChar ch39 = {13.6200f,1,ch39st};
/* char: 0x28 */
static const GLUTStrokeVertex ch40st0[] =
{
{40.9133f,119.0476f},
{31.3895f,109.5238f},
{21.8657f,95.2381f},
{12.3419f,76.1905f},
{7.5800f,52.3810f},
{7.5800f,33.3333f},
{12.3419f,9.5238f},
{21.8657f,-9.5238f},
{31.3895f,-23.8095f},
{40.9133f,-33.3333f}
};
static const GLUTStrokeStrip ch40st[] =
{
{10,ch40st0}
};
static const GLUTStrokeChar ch40 = {47.1733f,1,ch40st};
/* char: 0x29 */
static const GLUTStrokeVertex ch41st0[] =
{
{5.2800f,119.0476f},
{14.8038f,109.5238f},
{24.3276f,95.2381f},
{33.8514f,76.1905f},
{38.6133f,52.3810f},
{38.6133f,33.3333f},
{33.8514f,9.5238f},
{24.3276f,-9.5238f},
{14.8038f,-23.8095f},
{5.2800f,-33.3333f}
};
static const GLUTStrokeStrip ch41st[] =
{
{10,ch41st0}
};
static const GLUTStrokeChar ch41 = {47.5333f,1,ch41st};
/* char: 0x2a */
static const GLUTStrokeVertex ch42st0[] =
{
{30.7695f,71.4286f},
{30.7695f,14.2857f}
};
static const GLUTStrokeVertex ch42st1[] =
{
{6.9600f,57.1429f},
{54.5790f,28.5714f}
};
static const GLUTStrokeVertex ch42st2[] =
{
{54.5790f,57.1429f},
{6.9600f,28.5714f}
};
static const GLUTStrokeStrip ch42st[] =
{
{2,ch42st0},
{2,ch42st1},
{2,ch42st2}
};
static const GLUTStrokeChar ch42 = {59.4390f,3,ch42st};
/* char: 0x2b */
static const GLUTStrokeVertex ch43st0[] =
{
{48.8371f,85.7143f},
{48.8371f,0.0000f}
};
static const GLUTStrokeVertex ch43st1[] =
{
{5.9800f,42.8571f},
{91.6943f,42.8571f}
};
static const GLUTStrokeStrip ch43st[] =
{
{2,ch43st0},
{2,ch43st1}
};
static const GLUTStrokeChar ch43 = {97.2543f,2,ch43st};
/* char: 0x2c */
static const GLUTStrokeVertex ch44st0[] =
{
{18.2838f,4.7619f},
{13.5219f,0.0000f},
{8.7600f,4.7619f},
{13.5219f,9.5238f},
{18.2838f,4.7619f},
{18.2838f,-4.7619f},
{13.5219f,-14.2857f},
{8.7600f,-19.0476f}
};
static const GLUTStrokeStrip ch44st[] =
{
{8,ch44st0}
};
static const GLUTStrokeChar ch44 = {26.0638f,1,ch44st};
/* char: 0x2d */
static const GLUTStrokeVertex ch45st0[] =
{
{7.3800f,42.8571f},
{93.0943f,42.8571f}
};
static const GLUTStrokeStrip ch45st[] =
{
{2,ch45st0}
};
static const GLUTStrokeChar ch45 = {100.7543f,1,ch45st};
/* char: 0x2e */
static const GLUTStrokeVertex ch46st0[] =
{
{13.1019f,9.5238f},
{8.3400f,4.7619f},
{13.1019f,0.0000f},
{17.8638f,4.7619f},
{13.1019f,9.5238f}
};
static const GLUTStrokeStrip ch46st[] =
{
{5,ch46st0}
};
static const GLUTStrokeChar ch46 = {26.4838f,1,ch46st};
/* char: 0x2f */
static const GLUTStrokeVertex ch47st0[] =
{
{7.2400f,-14.2857f},
{73.9067f,100.0000f}
};
static const GLUTStrokeStrip ch47st[] =
{
{2,ch47st0}
};
static const GLUTStrokeChar ch47 = {82.1067f,1,ch47st};
/* char: 0x30 */
static const GLUTStrokeVertex ch48st0[] =
{
{33.5514f,100.0000f},
{19.2657f,95.2381f},
{9.7419f,80.9524f},
{4.9800f,57.1429f},
{4.9800f,42.8571f},
{9.7419f,19.0476f},
{19.2657f,4.7619f},
{33.5514f,0.0000f},
{43.0752f,0.0000f},
{57.3610f,4.7619f},
{66.8848f,19.0476f},
{71.6467f,42.8571f},
{71.6467f,57.1429f},
{66.8848f,80.9524f},
{57.3610f,95.2381f},
{43.0752f,100.0000f},
{33.5514f,100.0000f}
};
static const GLUTStrokeStrip ch48st[] =
{
{17,ch48st0}
};
static const GLUTStrokeChar ch48 = {77.0667f,1,ch48st};
/* char: 0x31 */
static const GLUTStrokeVertex ch49st0[] =
{
{11.8200f,80.9524f},
{21.3438f,85.7143f},
{35.6295f,100.0000f},
{35.6295f,0.0000f}
};
static const GLUTStrokeStrip ch49st[] =
{
{4,ch49st0}
};
static const GLUTStrokeChar ch49 = {66.5295f,1,ch49st};
/* char: 0x32 */
static const GLUTStrokeVertex ch50st0[] =
{
{10.1819f,76.1905f},
{10.1819f,80.9524f},
{14.9438f,90.4762f},
{19.7057f,95.2381f},
{29.2295f,100.0000f},
{48.2771f,100.0000f},
{57.8010f,95.2381f},
{62.5629f,90.4762f},
{67.3248f,80.9524f},
{67.3248f,71.4286f},
{62.5629f,61.9048f},
{53.0390f,47.6190f},
{5.4200f,0.0000f},
{72.0867f,0.0000f}
};
static const GLUTStrokeStrip ch50st[] =
{
{14,ch50st0}
};
static const GLUTStrokeChar ch50 = {77.6467f,1,ch50st};
/* char: 0x33 */
static const GLUTStrokeVertex ch51st0[] =
{
{14.5238f,100.0000f},
{66.9048f,100.0000f},
{38.3333f,61.9048f},
{52.6190f,61.9048f},
{62.1429f,57.1429f},
{66.9048f,52.3810f},
{71.6667f,38.0952f},
{71.6667f,28.5714f},
{66.9048f,14.2857f},
{57.3810f,4.7619f},
{43.0952f,0.0000f},
{28.8095f,0.0000f},
{14.5238f,4.7619f},
{9.7619f,9.5238f},
{5.0000f,19.0476f}
};
static const GLUTStrokeStrip ch51st[] =
{
{15,ch51st0}
};
static const GLUTStrokeChar ch51 = {77.0467f,1,ch51st};
/* char: 0x34 */
static const GLUTStrokeVertex ch52st0[] =
{
{51.4990f,100.0000f},
{3.8800f,33.3333f},
{75.3086f,33.3333f}
};
static const GLUTStrokeVertex ch52st1[] =
{
{51.4990f,100.0000f},
{51.4990f,0.0000f}
};
static const GLUTStrokeStrip ch52st[] =
{
{3,ch52st0},
{2,ch52st1}
};
static const GLUTStrokeChar ch52 = {80.1686f,2,ch52st};
/* char: 0x35 */
static const GLUTStrokeVertex ch53st0[] =
{
{62.0029f,100.0000f},
{14.3838f,100.0000f},
{9.6219f,57.1429f},
{14.3838f,61.9048f},
{28.6695f,66.6667f},
{42.9552f,66.6667f},
{57.2410f,61.9048f},
{66.7648f,52.3810f},
{71.5267f,38.0952f},
{71.5267f,28.5714f},
{66.7648f,14.2857f},
{57.2410f,4.7619f},
{42.9552f,0.0000f},
{28.6695f,0.0000f},
{14.3838f,4.7619f},
{9.6219f,9.5238f},
{4.8600f,19.0476f}
};
static const GLUTStrokeStrip ch53st[] =
{
{17,ch53st0}
};
static const GLUTStrokeChar ch53 = {77.6867f,1,ch53st};
/* char: 0x36 */
static const GLUTStrokeVertex ch54st0[] =
{
{62.7229f,85.7143f},
{57.9610f,95.2381f},
{43.6752f,100.0000f},
{34.1514f,100.0000f},
{19.8657f,95.2381f},
{10.3419f,80.9524f},
{5.5800f,57.1429f},
{5.5800f,33.3333f},
{10.3419f,14.2857f},
{19.8657f,4.7619f},
{34.1514f,0.0000f},
{38.9133f,0.0000f},
{53.1990f,4.7619f},
{62.7229f,14.2857f},
{67.4848f,28.5714f},
{67.4848f,33.3333f},
{62.7229f,47.6190f},
{53.1990f,57.1429f},
{38.9133f,61.9048f},
{34.1514f,61.9048f},
{19.8657f,57.1429f},
{10.3419f,47.6190f},
{5.5800f,33.3333f}
};
static const GLUTStrokeStrip ch54st[] =
{
{23,ch54st0}
};
static const GLUTStrokeChar ch54 = {73.8048f,1,ch54st};
/* char: 0x37 */
static const GLUTStrokeVertex ch55st0[] =
{
{72.2267f,100.0000f},
{24.6076f,0.0000f}
};
static const GLUTStrokeVertex ch55st1[] =
{
{5.5600f,100.0000f},
{72.2267f,100.0000f}
};
static const GLUTStrokeStrip ch55st[] =
{
{2,ch55st0},
{2,ch55st1}
};
static const GLUTStrokeChar ch55 = {77.2267f,2,ch55st};
/* char: 0x38 */
static const GLUTStrokeVertex ch56st0[] =
{
{29.4095f,100.0000f},
{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.9810f,52.3810f},
{67.5048f,42.8571f},
{72.2667f,33.3333f},
{72.2667f,19.0476f},
{67.5048f,9.5238f},
{62.7429f,4.7619f},
{48.4571f,0.0000f},
{29.4095f,0.0000f},
{15.1238f,4.7619f},
{10.3619f,9.5238f},
{5.6000f,19.0476f},
{5.6000f,33.3333f},
{10.3619f,42.8571f},
{19.8857f,52.3810f},
{34.1714f,57.1429f},
{53.2190f,61.9048f},
{62.7429f,66.6667f},
{67.5048f,76.1905f},
{67.5048f,85.7143f},
{62.7429f,95.2381f},
{48.4571f,100.0000f},
{29.4095f,100.0000f}
};
static const GLUTStrokeStrip ch56st[] =
{
{29,ch56st0}
};
static const GLUTStrokeChar ch56 = {77.6667f,1,ch56st};
/* char: 0x39 */
static const GLUTStrokeVertex ch57st0[] =
{
{68.5048f,66.6667f},
{63.7429f,52.3810f},
{54.2190f,42.8571f},
{39.9333f,38.0952f},
{35.1714f,38.0952f},
{20.8857f,42.8571f},
{11.3619f,52.3810f},
{6.6000f,66.6667f},
{6.6000f,71.4286f},
{11.3619f,85.7143f},
{20.8857f,95.2381f},
{35.1714f,100.0000f},
{39.9333f,100.0000f},
{54.2190f,95.2381f},
{63.7429f,85.7143f},
{68.5048f,66.6667f},
{68.5048f,42.8571f},
{63.7429f,19.0476f},
{54.2190f,4.7619f},
{39.9333f,0.0000f},
{30.4095f,0.0000f},
{16.1238f,4.7619f},
{11.3619f,14.2857f}
};
static const GLUTStrokeStrip ch57st[] =
{
{23,ch57st0}
};
static const GLUTStrokeChar ch57 = {74.0648f,1,ch57st};
/* char: 0x3a */
static const GLUTStrokeVertex ch58st0[] =
{
{14.0819f,66.6667f},
{9.3200f,61.9048f},
{14.0819f,57.1429f},
{18.8438f,61.9048f},
{14.0819f,66.6667f}
};
static const GLUTStrokeVertex ch58st1[] =
{
{14.0819f,9.5238f},
{9.3200f,4.7619f},
{14.0819f,0.0000f},
{18.8438f,4.7619f},
{14.0819f,9.5238f}
};
static const GLUTStrokeStrip ch58st[] =
{
{5,ch58st0},
{5,ch58st1}
};
static const GLUTStrokeChar ch58 = {26.2238f,2,ch58st};
/* char: 0x3b */
static const GLUTStrokeVertex ch59st0[] =
{
{12.9619f,66.6667f},
{8.2000f,61.9048f},
{12.9619f,57.1429f},
{17.7238f,61.9048f},
{12.9619f,66.6667f}
};
static const GLUTStrokeVertex ch59st1[] =
{
{17.7238f,4.7619f},
{12.9619f,0.0000f},
{8.2000f,4.7619f},
{12.9619f,9.5238f},
{17.7238f,4.7619f},
{17.7238f,-4.7619f},
{12.9619f,-14.2857f},
{8.2000f,-19.0476f}
};
static const GLUTStrokeStrip ch59st[] =
{
{5,ch59st0},
{8,ch59st1}
};
static const GLUTStrokeChar ch59 = {26.3038f,2,ch59st};
/* char: 0x3c */
static const GLUTStrokeVertex ch60st0[] =
{
{79.2505f,85.7143f},
{3.0600f,42.8571f},
{79.2505f,0.0000f}
};
static const GLUTStrokeStrip ch60st[] =
{
{3,ch60st0}
};
static const GLUTStrokeChar ch60 = {81.6105f,1,ch60st};
/* char: 0x3d */
static const GLUTStrokeVertex ch61st0[] =
{
{5.7000f,57.1429f},
{91.4143f,57.1429f}
};
static const GLUTStrokeVertex ch61st1[] =
{
{5.7000f,28.5714f},
{91.4143f,28.5714f}
};
static const GLUTStrokeStrip ch61st[] =
{
{2,ch61st0},
{2,ch61st1}
};
static const GLUTStrokeChar ch61 = {97.2543f,2,ch61st};
/* char: 0x3e */
static const GLUTStrokeVertex ch62st0[] =
{
{2.7800f,85.7143f},
{78.9705f,42.8571f},
{2.7800f,0.0000f}
};
static const GLUTStrokeStrip ch62st[] =
{
{3,ch62st0}
};
static const GLUTStrokeChar ch62 = {81.6105f,1,ch62st};
/* char: 0x3f */
static const GLUTStrokeVertex ch63st0[] =
{
{8.4200f,76.1905f},
{8.4200f,80.9524f},
{13.1819f,90.4762f},
{17.9438f,95.2381f},
{27.4676f,100.0000f},
{46.5152f,100.0000f},
{56.0390f,95.2381f},
{60.8010f,90.4762f},
{65.5629f,80.9524f},
{65.5629f,71.4286f},
{60.8010f,61.9048f},
{56.0390f,57.1429f},
{36.9914f,47.6190f},
{36.9914f,33.3333f}
};
static const GLUTStrokeVertex ch63st1[] =
{
{36.9914f,9.5238f},
{32.2295f,4.7619f},
{36.9914f,0.0000f},
{41.7533f,4.7619f},
{36.9914f,9.5238f}
};
static const GLUTStrokeStrip ch63st[] =
{
{14,ch63st0},
{5,ch63st1}
};
static const GLUTStrokeChar ch63 = {73.9029f,2,ch63st};
/* char: 0x40 */
static const GLUTStrokeVertex ch64st0[] =
{
{49.2171f,52.3810f},
{39.6933f,57.1429f},
{30.1695f,57.1429f},
{25.4076f,47.6190f},
{25.4076f,42.8571f},
{30.1695f,33.3333f},
{39.6933f,33.3333f},
{49.2171f,38.0952f}
};
static const GLUTStrokeVertex ch64st1[] =
{
{49.2171f,57.1429f},
{49.2171f,38.0952f},
{53.9790f,33.3333f},
{63.5029f,33.3333f},
{68.2648f,42.8571f},
{68.2648f,47.6190f},
{63.5029f,61.9048f},
{53.9790f,71.4286f},
{39.6933f,76.1905f},
{34.9314f,76.1905f},
{20.6457f,71.4286f},
{11.1219f,61.9048f},
{6.3600f,47.6190f},
{6.3600f,42.8571f},
{11.1219f,28.5714f},
{20.6457f,19.0476f},
{34.9314f,14.2857f},
{39.6933f,14.2857f},
{53.9790f,19.0476f}
};
static const GLUTStrokeStrip ch64st[] =
{
{8,ch64st0},
{19,ch64st1}
};
static const GLUTStrokeChar ch64 = {74.3648f,2,ch64st};
/* char: 0x41 */
static const GLUTStrokeVertex ch65st0[] =
{
{40.5952f,100.0000f},
{2.5000f,0.0000f}
};
static const GLUTStrokeVertex ch65st1[] =
{
{40.5952f,100.0000f},
{78.6905f,0.0000f}
};
static const GLUTStrokeVertex ch65st2[] =
{
{16.7857f,33.3333f},
{64.4048f,33.3333f}
};
static const GLUTStrokeStrip ch65st[] =
{
{2,ch65st0},
{2,ch65st1},
{2,ch65st2}
};
static const GLUTStrokeChar ch65 = {80.4905f,3,ch65st};
/* char: 0x42 */
static const GLUTStrokeVertex ch66st0[] =
{
{11.4200f,100.0000f},
{11.4200f,0.0000f}
};
static const GLUTStrokeVertex ch66st1[] =
{
{11.4200f,100.0000f},
{54.2771f,100.0000f},
{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.3810f}
};
static const GLUTStrokeVertex ch66st2[] =
{
{11.4200f,52.3810f},
{54.2771f,52.3810f},
{68.5629f,47.6190f},
{73.3248f,42.8571f},
{78.0867f,33.3333f},
{78.0867f,19.0476f},
{73.3248f,9.5238f},
{68.5629f,4.7619f},
{54.2771f,0.0000f},
{11.4200f,0.0000f}
};
static const GLUTStrokeStrip ch66st[] =
{
{2,ch66st0},
{9,ch66st1},
{10,ch66st2}
};
static const GLUTStrokeChar ch66 = {83.6267f,3,ch66st};
/* char: 0x43 */
static const GLUTStrokeVertex ch67st0[] =
{
{78.0886f,76.1905f},
{73.3267f,85.7143f},
{63.8029f,95.2381f},
{54.2790f,100.0000f},
{35.2314f,100.0000f},
{25.7076f,95.2381f},
{16.1838f,85.7143f},
{11.4219f,76.1905f},
{6.6600f,61.9048f},
{6.6600f,38.0952f},
{11.4219f,23.8095f},
{16.1838f,14.2857f},
{25.7076f,4.7619f},
{35.2314f,0.0000f},
{54.2790f,0.0000f},
{63.8029f,4.7619f},
{73.3267f,14.2857f},
{78.0886f,23.8095f}
};
static const GLUTStrokeStrip ch67st[] =
{
{18,ch67st0}
};
static const GLUTStrokeChar ch67 = {84.4886f,1,ch67st};
/* char: 0x44 */
static const GLUTStrokeVertex ch68st0[] =
{
{11.9600f,100.0000f},
{11.9600f,0.0000f}
};
static const GLUTStrokeVertex ch68st1[] =
{
{11.9600f,100.0000f},
{45.2933f,100.0000f},
{59.5790f,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.5790f,4.7619f},
{45.2933f,0.0000f},
{11.9600f,0.0000f}
};
static const GLUTStrokeStrip ch68st[] =
{
{2,ch68st0},
{12,ch68st1}
};
static const GLUTStrokeChar ch68 = {85.2867f,2,ch68st};
/* char: 0x45 */
static const GLUTStrokeVertex ch69st0[] =
{
{11.4200f,100.0000f},
{11.4200f,0.0000f}
};
static const GLUTStrokeVertex ch69st1[] =
{
{11.4200f,100.0000f},
{73.3248f,100.0000f}
};
static const GLUTStrokeVertex ch69st2[] =
{
{11.4200f,52.3810f},
{49.5152f,52.3810f}
};
static const GLUTStrokeVertex ch69st3[] =
{
{11.4200f,0.0000f},
{73.3248f,0.0000f}
};
static const GLUTStrokeStrip ch69st[] =
{
{2,ch69st0},
{2,ch69st1},
{2,ch69st2},
{2,ch69st3}
};
static const GLUTStrokeChar ch69 = {78.1848f,4,ch69st};
/* char: 0x46 */
static const GLUTStrokeVertex ch70st0[] =
{
{11.4200f,100.0000f},
{11.4200f,0.0000f}
};
static const GLUTStrokeVertex ch70st1[] =
{
{11.4200f,100.0000f},
{73.3248f,100.0000f}
};
static const GLUTStrokeVertex ch70st2[] =
{
{11.4200f,52.3810f},
{49.5152f,52.3810f}
};
static const GLUTStrokeStrip ch70st[] =
{
{2,ch70st0},
{2,ch70st1},
{2,ch70st2}
};
static const GLUTStrokeChar ch70 = {78.7448f,3,ch70st};
/* char: 0x47 */
static const GLUTStrokeVertex ch71st0[] =
{
{78.4886f,76.1905f},
{73.7267f,85.7143f},
{64.2029f,95.2381f},
{54.6790f,100.0000f},
{35.6314f,100.0000f},
{26.1076f,95.2381f},
{16.5838f,85.7143f},
{11.8219f,76.1905f},
{7.0600f,61.9048f},
{7.0600f,38.0952f},
{11.8219f,23.8095f},
{16.5838f,14.2857f},
{26.1076f,4.7619f},
{35.6314f,0.0000f},
{54.6790f,0.0000f},
{64.2029f,4.7619f},
{73.7267f,14.2857f},
{78.4886f,23.8095f},
{78.4886f,38.0952f}
};
static const GLUTStrokeVertex ch71st1[] =
{
{54.6790f,38.0952f},
{78.4886f,38.0952f}
};
static const GLUTStrokeStrip ch71st[] =
{
{19,ch71st0},
{2,ch71st1}
};
static const GLUTStrokeChar ch71 = {89.7686f,2,ch71st};
/* char: 0x48 */
static const GLUTStrokeVertex ch72st0[] =
{
{11.4200f,100.0000f},
{11.4200f,0.0000f}
};
static const GLUTStrokeVertex ch72st1[] =
{
{78.0867f,100.0000f},
{78.0867f,0.0000f}
};
static const GLUTStrokeVertex ch72st2[] =
{
{11.4200f,52.3810f},
{78.0867f,52.3810f}
};
static const GLUTStrokeStrip ch72st[] =
{
{2,ch72st0},
{2,ch72st1},
{2,ch72st2}
};
static const GLUTStrokeChar ch72 = {89.0867f,3,ch72st};
/* char: 0x49 */
static const GLUTStrokeVertex ch73st0[] =
{
{10.8600f,100.0000f},
{10.8600f,0.0000f}
};
static const GLUTStrokeStrip ch73st[] =
{
{2,ch73st0}
};
static const GLUTStrokeChar ch73 = {21.3000f,1,ch73st};
/* char: 0x4a */
static const GLUTStrokeVertex ch74st0[] =
{
{50.1190f,100.0000f},
{50.1190f,23.8095f},
{45.3571f,9.5238f},
{40.5952f,4.7619f},
{31.0714f,0.0000f},
{21.5476f,0.0000f},
{12.0238f,4.7619f},
{7.2619f,9.5238f},
{2.5000f,23.8095f},
{2.5000f,33.3333f}
};
static const GLUTStrokeStrip ch74st[] =
{
{10,ch74st0}
};
static const GLUTStrokeChar ch74 = {59.9990f,1,ch74st};
/* char: 0x4b */
static const GLUTStrokeVertex ch75st0[] =
{
{11.2800f,100.0000f},
{11.2800f,0.0000f}
};
static const GLUTStrokeVertex ch75st1[] =
{
{77.9467f,100.0000f},
{11.2800f,33.3333f}
};
static const GLUTStrokeVertex ch75st2[] =
{
{35.0895f,57.1429f},
{77.9467f,0.0000f}
};
static const GLUTStrokeStrip ch75st[] =
{
{2,ch75st0},
{2,ch75st1},
{2,ch75st2}
};
static const GLUTStrokeChar ch75 = {79.3267f,3,ch75st};
/* char: 0x4c */
static const GLUTStrokeVertex ch76st0[] =
{
{11.6800f,100.0000f},
{11.6800f,0.0000f}
};
static const GLUTStrokeVertex ch76st1[] =
{
{11.6800f,0.0000f},
{68.8229f,0.0000f}
};
static const GLUTStrokeStrip ch76st[] =
{
{2,ch76st0},
{2,ch76st1}
};
static const GLUTStrokeChar ch76 = {71.3229f,2,ch76st};
/* char: 0x4d */
static const GLUTStrokeVertex ch77st0[] =
{
{10.8600f,100.0000f},
{10.8600f,0.0000f}
};
static const GLUTStrokeVertex ch77st1[] =
{
{10.8600f,100.0000f},
{48.9552f,0.0000f}
};
static const GLUTStrokeVertex ch77st2[] =
{
{87.0505f,100.0000f},
{48.9552f,0.0000f}
};
static const GLUTStrokeVertex ch77st3[] =
{
{87.0505f,100.0000f},
{87.0505f,0.0000f}
};
static const GLUTStrokeStrip ch77st[] =
{
{2,ch77st0},
{2,ch77st1},
{2,ch77st2},
{2,ch77st3}
};
static const GLUTStrokeChar ch77 = {97.2105f,4,ch77st};
/* char: 0x4e */
static const GLUTStrokeVertex ch78st0[] =
{
{11.1400f,100.0000f},
{11.1400f,0.0000f}
};
static const GLUTStrokeVertex ch78st1[] =
{
{11.1400f,100.0000f},
{77.8067f,0.0000f}
};
static const GLUTStrokeVertex ch78st2[] =
{
{77.8067f,100.0000f},
{77.8067f,0.0000f}
};
static const GLUTStrokeStrip ch78st[] =
{
{2,ch78st0},
{2,ch78st1},
{2,ch78st2}
};
static const GLUTStrokeChar ch78 = {88.8067f,3,ch78st};
/* char: 0x4f */
static const GLUTStrokeVertex ch79st0[] =
{
{34.8114f,100.0000f},
{25.2876f,95.2381f},
{15.7638f,85.7143f},
{11.0019f,76.1905f},
{6.2400f,61.9048f},
{6.2400f,38.0952f},
{11.0019f,23.8095f},
{15.7638f,14.2857f},
{25.2876f,4.7619f},
{34.8114f,0.0000f},
{53.8590f,0.0000f},
{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.8590f,100.0000f},
{34.8114f,100.0000f}
};
static const GLUTStrokeStrip ch79st[] =
{
{21,ch79st0}
};
static const GLUTStrokeChar ch79 = {88.8305f,1,ch79st};
/* char: 0x50 */
static const GLUTStrokeVertex ch80st0[] =
{
{12.1000f,100.0000f},
{12.1000f,0.0000f}
};
static const GLUTStrokeVertex ch80st1[] =
{
{12.1000f,100.0000f},
{54.9571f,100.0000f},
{69.2429f,95.2381f},
{74.0048f,90.4762f},
{78.7667f,80.9524f},
{78.7667f,66.6667f},
{74.0048f,57.1429f},
{69.2429f,52.3810f},
{54.9571f,47.6190f},
{12.1000f,47.6190f}
};
static const GLUTStrokeStrip ch80st[] =
{
{2,ch80st0},
{10,ch80st1}
};
static const GLUTStrokeChar ch80 = {85.6667f,2,ch80st};
/* char: 0x51 */
static const GLUTStrokeVertex ch81st0[] =
{
{33.8714f,100.0000f},
{24.3476f,95.2381f},
{14.8238f,85.7143f},
{10.0619f,76.1905f},
{5.3000f,61.9048f},
{5.3000f,38.0952f},
{10.0619f,23.8095f},
{14.8238f,14.2857f},
{24.3476f,4.7619f},
{33.8714f,0.0000f},
{52.9190f,0.0000f},
{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.9190f,100.0000f},
{33.8714f,100.0000f}
};
static const GLUTStrokeVertex ch81st1[] =
{
{48.1571f,19.0476f},
{76.7286f,-9.5238f}
};
static const GLUTStrokeStrip ch81st[] =
{
{21,ch81st0},
{2,ch81st1}
};
static const GLUTStrokeChar ch81 = {88.0905f,2,ch81st};
/* char: 0x52 */
static const GLUTStrokeVertex ch82st0[] =
{
{11.6800f,100.0000f},
{11.6800f,0.0000f}
};
static const GLUTStrokeVertex ch82st1[] =
{
{11.6800f,100.0000f},
{54.5371f,100.0000f},
{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.3810f},
{11.6800f,52.3810f}
};
static const GLUTStrokeVertex ch82st2[] =
{
{45.0133f,52.3810f},
{78.3467f,0.0000f}
};
static const GLUTStrokeStrip ch82st[] =
{
{2,ch82st0},
{10,ch82st1},
{2,ch82st2}
};
static const GLUTStrokeChar ch82 = {82.3667f,3,ch82st};
/* char: 0x53 */
static const GLUTStrokeVertex ch83st0[] =
{
{74.6667f,85.7143f},
{65.1429f,95.2381f},
{50.8571f,100.0000f},
{31.8095f,100.0000f},
{17.5238f,95.2381f},
{8.0000f,85.7143f},
{8.0000f,76.1905f},
{12.7619f,66.6667f},
{17.5238f,61.9048f},
{27.0476f,57.1429f},
{55.6190f,47.6190f},
{65.1429f,42.8571f},
{69.9048f,38.0952f},
{74.6667f,28.5714f},
{74.6667f,14.2857f},
{65.1429f,4.7619f},
{50.8571f,0.0000f},
{31.8095f,0.0000f},
{17.5238f,4.7619f},
{8.0000f,14.2857f}
};
static const GLUTStrokeStrip ch83st[] =
{
{20,ch83st0}
};
static const GLUTStrokeChar ch83 = {80.8267f,1,ch83st};
/* char: 0x54 */
static const GLUTStrokeVertex ch84st0[] =
{
{35.6933f,100.0000f},
{35.6933f,0.0000f}
};
static const GLUTStrokeVertex ch84st1[] =
{
{2.3600f,100.0000f},
{69.0267f,100.0000f}
};
static const GLUTStrokeStrip ch84st[] =
{
{2,ch84st0},
{2,ch84st1}
};
static const GLUTStrokeChar ch84 = {71.9467f,2,ch84st};
/* char: 0x55 */
static const GLUTStrokeVertex ch85st0[] =
{
{11.5400f,100.0000f},
{11.5400f,28.5714f},
{16.3019f,14.2857f},
{25.8257f,4.7619f},
{40.1114f,0.0000f},
{49.6352f,0.0000f},
{63.9210f,4.7619f},
{73.4448f,14.2857f},
{78.2067f,28.5714f},
{78.2067f,100.0000f}
};
static const GLUTStrokeStrip ch85st[] =
{
{10,ch85st0}
};
static const GLUTStrokeChar ch85 = {89.4867f,1,ch85st};
/* char: 0x56 */
static const GLUTStrokeVertex ch86st0[] =
{
{2.3600f,100.0000f},
{40.4552f,0.0000f}
};
static const GLUTStrokeVertex ch86st1[] =
{
{78.5505f,100.0000f},
{40.4552f,0.0000f}
};
static const GLUTStrokeStrip ch86st[] =
{
{2,ch86st0},
{2,ch86st1}
};
static const GLUTStrokeChar ch86 = {81.6105f,2,ch86st};
/* char: 0x57 */
static const GLUTStrokeVertex ch87st0[] =
{
{2.2200f,100.0000f},
{26.0295f,0.0000f}
};
static const GLUTStrokeVertex ch87st1[] =
{
{49.8390f,100.0000f},
{26.0295f,0.0000f}
};
static const GLUTStrokeVertex ch87st2[] =
{
{49.8390f,100.0000f},
{73.6486f,0.0000f}
};
static const GLUTStrokeVertex ch87st3[] =
{
{97.4581f,100.0000f},
{73.6486f,0.0000f}
};
static const GLUTStrokeStrip ch87st[] =
{
{2,ch87st0},
{2,ch87st1},
{2,ch87st2},
{2,ch87st3}
};
static const GLUTStrokeChar ch87 = {100.5181f,4,ch87st};
/* char: 0x58 */
static const GLUTStrokeVertex ch88st0[] =
{
{2.5000f,100.0000f},
{69.1667f,0.0000f}
};
static const GLUTStrokeVertex ch88st1[] =
{
{69.1667f,100.0000f},
{2.5000f,0.0000f}
};
static const GLUTStrokeStrip ch88st[] =
{
{2,ch88st0},
{2,ch88st1}
};
static const GLUTStrokeChar ch88 = {72.3667f,2,ch88st};
/* char: 0x59 */
static const GLUTStrokeVertex ch89st0[] =
{
{1.5200f,100.0000f},
{39.6152f,52.3810f},
{39.6152f,0.0000f}
};
static const GLUTStrokeVertex ch89st1[] =
{
{77.7105f,100.0000f},
{39.6152f,52.3810f}
};
static const GLUTStrokeStrip ch89st[] =
{
{3,ch89st0},
{2,ch89st1}
};
static const GLUTStrokeChar ch89 = {79.6505f,2,ch89st};
/* char: 0x5a */
static const GLUTStrokeVertex ch90st0[] =
{
{69.1667f,100.0000f},
{2.5000f,0.0000f}
};
static const GLUTStrokeVertex ch90st1[] =
{
{2.5000f,100.0000f},
{69.1667f,100.0000f}
};
static const GLUTStrokeVertex ch90st2[] =
{
{2.5000f,0.0000f},
{69.1667f,0.0000f}
};
static const GLUTStrokeStrip ch90st[] =
{
{2,ch90st0},
{2,ch90st1},
{2,ch90st2}
};
static const GLUTStrokeChar ch90 = {73.7467f,3,ch90st};
/* char: 0x5b */
static const GLUTStrokeVertex ch91st0[] =
{
{7.7800f,119.0476f},
{7.7800f,-33.3333f}
};
static const GLUTStrokeVertex ch91st1[] =
{
{12.5419f,119.0476f},
{12.5419f,-33.3333f}
};
static const GLUTStrokeVertex ch91st2[] =
{
{7.7800f,119.0476f},
{41.1133f,119.0476f}
};
static const GLUTStrokeVertex ch91st3[] =
{
{7.7800f,-33.3333f},
{41.1133f,-33.3333f}
};
static const GLUTStrokeStrip ch91st[] =
{
{2,ch91st0},
{2,ch91st1},
{2,ch91st2},
{2,ch91st3}
};
static const GLUTStrokeChar ch91 = {46.1133f,4,ch91st};
/* char: 0x5c */
static const GLUTStrokeVertex ch92st0[] =
{
{5.8400f,100.0000f},
{72.5067f,-14.2857f}
};
static const GLUTStrokeStrip ch92st[] =
{
{2,ch92st0}
};
static const GLUTStrokeChar ch92 = {78.2067f,1,ch92st};
/* char: 0x5d */
static const GLUTStrokeVertex ch93st0[] =
{
{33.0114f,119.0476f},
{33.0114f,-33.3333f}
};
static const GLUTStrokeVertex ch93st1[] =
{
{37.7733f,119.0476f},
{37.7733f,-33.3333f}
};
static const GLUTStrokeVertex ch93st2[] =
{
{4.4400f,119.0476f},
{37.7733f,119.0476f}
};
static const GLUTStrokeVertex ch93st3[] =
{
{4.4400f,-33.3333f},
{37.7733f,-33.3333f}
};
static const GLUTStrokeStrip ch93st[] =
{
{2,ch93st0},
{2,ch93st1},
{2,ch93st2},
{2,ch93st3}
};
static const GLUTStrokeChar ch93 = {46.3933f,4,ch93st};
/* char: 0x5e */
static const GLUTStrokeVertex ch94st0[] =
{
{44.0752f,109.5238f},
{5.9800f,42.8571f}
};
static const GLUTStrokeVertex ch94st1[] =
{
{44.0752f,109.5238f},
{82.1705f,42.8571f}
};
static const GLUTStrokeStrip ch94st[] =
{
{2,ch94st0},
{2,ch94st1}
};
static const GLUTStrokeChar ch94 = {90.2305f,2,ch94st};
/* char: 0x5f */
static const GLUTStrokeVertex ch95st0[] =
{
{-1.1000f,-33.3333f},
{103.6619f,-33.3333f},
{103.6619f,-28.5714f},
{-1.1000f,-28.5714f},
{-1.1000f,-33.3333f}
};
static const GLUTStrokeStrip ch95st[] =
{
{5,ch95st0}
};
static const GLUTStrokeChar ch95 = {104.0619f,1,ch95st};
/* char: 0x60 */
static const GLUTStrokeVertex ch96st0[] =
{
{33.0219f,100.0000f},
{56.8314f,71.4286f}
};
static const GLUTStrokeVertex ch96st1[] =
{
{33.0219f,100.0000f},
{28.2600f,95.2381f},
{56.8314f,71.4286f}
};
static const GLUTStrokeStrip ch96st[] =
{
{2,ch96st0},
{3,ch96st1}
};
static const GLUTStrokeChar ch96 = {83.5714f,2,ch96st};
/* char: 0x61 */
static const GLUTStrokeVertex ch97st0[] =
{
{63.8229f,66.6667f},
{63.8229f,0.0000f}
};
static const GLUTStrokeVertex ch97st1[] =
{
{63.8229f,52.3810f},
{54.2990f,61.9048f},
{44.7752f,66.6667f},
{30.4895f,66.6667f},
{20.9657f,61.9048f},
{11.4419f,52.3810f},
{6.6800f,38.0952f},
{6.6800f,28.5714f},
{11.4419f,14.2857f},
{20.9657f,4.7619f},
{30.4895f,0.0000f},
{44.7752f,0.0000f},
{54.2990f,4.7619f},
{63.8229f,14.2857f}
};
static const GLUTStrokeStrip ch97st[] =
{
{2,ch97st0},
{14,ch97st1}
};
static const GLUTStrokeChar ch97 = {66.6029f,2,ch97st};
/* char: 0x62 */
static const GLUTStrokeVertex ch98st0[] =
{
{8.7600f,100.0000f},
{8.7600f,0.0000f}
};
static const GLUTStrokeVertex ch98st1[] =
{
{8.7600f,52.3810f},
{18.2838f,61.9048f},
{27.8076f,66.6667f},
{42.0933f,66.6667f},
{51.6171f,61.9048f},
{61.1410f,52.3810f},
{65.9029f,38.0952f},
{65.9029f,28.5714f},
{61.1410f,14.2857f},
{51.6171f,4.7619f},
{42.0933f,0.0000f},
{27.8076f,0.0000f},
{18.2838f,4.7619f},
{8.7600f,14.2857f}
};
static const GLUTStrokeStrip ch98st[] =
{
{2,ch98st0},
{14,ch98st1}
};
static const GLUTStrokeChar ch98 = {70.4629f,2,ch98st};
/* char: 0x63 */
static const GLUTStrokeVertex ch99st0[] =
{
{62.6629f,52.3810f},
{53.1390f,61.9048f},
{43.6152f,66.6667f},
{29.3295f,66.6667f},
{19.8057f,61.9048f},
{10.2819f,52.3810f},
{5.5200f,38.0952f},
{5.5200f,28.5714f},
{10.2819f,14.2857f},
{19.8057f,4.7619f},
{29.3295f,0.0000f},
{43.6152f,0.0000f},
{53.1390f,4.7619f},
{62.6629f,14.2857f}
};
static const GLUTStrokeStrip ch99st[] =
{
{14,ch99st0}
};
static const GLUTStrokeChar ch99 = {68.9229f,1,ch99st};
/* char: 0x64 */
static const GLUTStrokeVertex ch100st0[] =
{
{61.7829f,100.0000f},
{61.7829f,0.0000f}
};
static const GLUTStrokeVertex ch100st1[] =
{
{61.7829f,52.3810f},
{52.2590f,61.9048f},
{42.7352f,66.6667f},
{28.4495f,66.6667f},
{18.9257f,61.9048f},
{9.4019f,52.3810f},
{4.6400f,38.0952f},
{4.6400f,28.5714f},
{9.4019f,14.2857f},
{18.9257f,4.7619f},
{28.4495f,0.0000f},
{42.7352f,0.0000f},
{52.2590f,4.7619f},
{61.7829f,14.2857f}
};
static const GLUTStrokeStrip ch100st[] =
{
{2,ch100st0},
{14,ch100st1}
};
static const GLUTStrokeChar ch100 = {70.2629f,2,ch100st};
/* char: 0x65 */
static const GLUTStrokeVertex ch101st0[] =
{
{5.7200f,38.0952f},
{62.8629f,38.0952f},
{62.8629f,47.6190f},
{58.1010f,57.1429f},
{53.3390f,61.9048f},
{43.8152f,66.6667f},
{29.5295f,66.6667f},
{20.0057f,61.9048f},
{10.4819f,52.3810f},
{5.7200f,38.0952f},
{5.7200f,28.5714f},
{10.4819f,14.2857f},
{20.0057f,4.7619f},
{29.5295f,0.0000f},
{43.8152f,0.0000f},
{53.3390f,4.7619f},
{62.8629f,14.2857f}
};
static const GLUTStrokeStrip ch101st[] =
{
{17,ch101st0}
};
static const GLUTStrokeChar ch101 = {68.5229f,1,ch101st};
/* char: 0x66 */
static const GLUTStrokeVertex ch102st0[] =
{
{38.7752f,100.0000f},
{29.2514f,100.0000f},
{19.7276f,95.2381f},
{14.9657f,80.9524f},
{14.9657f,0.0000f}
};
static const GLUTStrokeVertex ch102st1[] =
{
{0.6800f,66.6667f},
{34.0133f,66.6667f}
};
static const GLUTStrokeStrip ch102st[] =
{
{5,ch102st0},
{2,ch102st1}
};
static const GLUTStrokeChar ch102 = {38.6552f,2,ch102st};
/* char: 0x67 */
static const GLUTStrokeVertex ch103st0[] =
{
{62.5029f,66.6667f},
{62.5029f,-9.5238f},
{57.7410f,-23.8095f},
{52.9790f,-28.5714f},
{43.4552f,-33.3333f},
{29.1695f,-33.3333f},
{19.6457f,-28.5714f}
};
static const GLUTStrokeVertex ch103st1[] =
{
{62.5029f,52.3810f},
{52.9790f,61.9048f},
{43.4552f,66.6667f},
{29.1695f,66.6667f},
{19.6457f,61.9048f},
{10.1219f,52.3810f},
{5.3600f,38.0952f},
{5.3600f,28.5714f},
{10.1219f,14.2857f},
{19.6457f,4.7619f},
{29.1695f,0.0000f},
{43.4552f,0.0000f},
{52.9790f,4.7619f},
{62.5029f,14.2857f}
};
static const GLUTStrokeStrip ch103st[] =
{
{7,ch103st0},
{14,ch103st1}
};
static const GLUTStrokeChar ch103 = {70.9829f,2,ch103st};
/* char: 0x68 */
static const GLUTStrokeVertex ch104st0[] =
{
{9.6000f,100.0000f},
{9.6000f,0.0000f}
};
static const GLUTStrokeVertex ch104st1[] =
{
{9.6000f,47.6190f},
{23.8857f,61.9048f},
{33.4095f,66.6667f},
{47.6952f,66.6667f},
{57.2190f,61.9048f},
{61.9810f,47.6190f},
{61.9810f,0.0000f}
};
static const GLUTStrokeStrip ch104st[] =
{
{2,ch104st0},
{7,ch104st1}
};
static const GLUTStrokeChar ch104 = {71.0210f,2,ch104st};
/* char: 0x69 */
static const GLUTStrokeVertex ch105st0[] =
{
{10.0200f,100.0000f},
{14.7819f,95.2381f},
{19.5438f,100.0000f},
{14.7819f,104.7619f},
{10.0200f,100.0000f}
};
static const GLUTStrokeVertex ch105st1[] =
{
{14.7819f,66.6667f},
{14.7819f,0.0000f}
};
static const GLUTStrokeStrip ch105st[] =
{
{5,ch105st0},
{2,ch105st1}
};
static const GLUTStrokeChar ch105 = {28.8638f,2,ch105st};
/* char: 0x6a */
static const GLUTStrokeVertex ch106st0[] =
{
{17.3876f,100.0000f},
{22.1495f,95.2381f},
{26.9114f,100.0000f},
{22.1495f,104.7619f},
{17.3876f,100.0000f}
};
static const GLUTStrokeVertex ch106st1[] =
{
{22.1495f,66.6667f},
{22.1495f,-14.2857f},
{17.3876f,-28.5714f},
{7.8638f,-33.3333f},
{-1.6600f,-33.3333f}
};
static const GLUTStrokeStrip ch106st[] =
{
{5,ch106st0},
{5,ch106st1}
};
static const GLUTStrokeChar ch106 = {36.2314f,2,ch106st};
/* char: 0x6b */
static const GLUTStrokeVertex ch107st0[] =
{
{9.6000f,100.0000f},
{9.6000f,0.0000f}
};
static const GLUTStrokeVertex ch107st1[] =
{
{57.2190f,66.6667f},
{9.6000f,19.0476f}
};
static const GLUTStrokeVertex ch107st2[] =
{
{28.6476f,38.0952f},
{61.9810f,0.0000f}
};
static const GLUTStrokeStrip ch107st[] =
{
{2,ch107st0},
{2,ch107st1},
{2,ch107st2}
};
static const GLUTStrokeChar ch107 = {62.5210f,3,ch107st};
/* char: 0x6c */
static const GLUTStrokeVertex ch108st0[] =
{
{10.0200f,100.0000f},
{10.0200f,0.0000f}
};
static const GLUTStrokeStrip ch108st[] =
{
{2,ch108st0}
};
static const GLUTStrokeChar ch108 = {19.3400f,1,ch108st};
/* char: 0x6d */
static const GLUTStrokeVertex ch109st0[] =
{
{9.6000f,66.6667f},
{9.6000f,0.0000f}
};
static const GLUTStrokeVertex ch109st1[] =
{
{9.6000f,47.6190f},
{23.8857f,61.9048f},
{33.4095f,66.6667f},
{47.6952f,66.6667f},
{57.2190f,61.9048f},
{61.9810f,47.6190f},
{61.9810f,0.0000f}
};
static const GLUTStrokeVertex ch109st2[] =
{
{61.9810f,47.6190f},
{76.2667f,61.9048f},
{85.7905f,66.6667f},
{100.0762f,66.6667f},
{109.6000f,61.9048f},
{114.3619f,47.6190f},
{114.3619f,0.0000f}
};
static const GLUTStrokeStrip ch109st[] =
{
{2,ch109st0},
{7,ch109st1},
{7,ch109st2}
};
static const GLUTStrokeChar ch109 = {123.9619f,3,ch109st};
/* char: 0x6e */
static const GLUTStrokeVertex ch110st0[] =
{
{9.1800f,66.6667f},
{9.1800f,0.0000f}
};
static const GLUTStrokeVertex ch110st1[] =
{
{9.1800f,47.6190f},
{23.4657f,61.9048f},
{32.9895f,66.6667f},
{47.2752f,66.6667f},
{56.7990f,61.9048f},
{61.5610f,47.6190f},
{61.5610f,0.0000f}
};
static const GLUTStrokeStrip ch110st[] =
{
{2,ch110st0},
{7,ch110st1}
};
static const GLUTStrokeChar ch110 = {70.8810f,2,ch110st};
/* char: 0x6f */
static const GLUTStrokeVertex ch111st0[] =
{
{28.7895f,66.6667f},
{19.2657f,61.9048f},
{9.7419f,52.3810f},
{4.9800f,38.0952f},
{4.9800f,28.5714f},
{9.7419f,14.2857f},
{19.2657f,4.7619f},
{28.7895f,0.0000f},
{43.0752f,0.0000f},
{52.5990f,4.7619f},
{62.1229f,14.2857f},
{66.8848f,28.5714f},
{66.8848f,38.0952f},
{62.1229f,52.3810f},
{52.5990f,61.9048f},
{43.0752f,66.6667f},
{28.7895f,66.6667f}
};
static const GLUTStrokeStrip ch111st[] =
{
{17,ch111st0}
};
static const GLUTStrokeChar ch111 = {71.7448f,1,ch111st};
/* char: 0x70 */
static const GLUTStrokeVertex ch112st0[] =
{
{9.4600f,66.6667f},
{9.4600f,-33.3333f}
};
static const GLUTStrokeVertex ch112st1[] =
{
{9.4600f,52.3810f},
{18.9838f,61.9048f},
{28.5076f,66.6667f},
{42.7933f,66.6667f},
{52.3171f,61.9048f},
{61.8410f,52.3810f},
{66.6029f,38.0952f},
{66.6029f,28.5714f},
{61.8410f,14.2857f},
{52.3171f,4.7619f},
{42.7933f,0.0000f},
{28.5076f,0.0000f},
{18.9838f,4.7619f},
{9.4600f,14.2857f}
};
static const GLUTStrokeStrip ch112st[] =
{
{2,ch112st0},
{14,ch112st1}
};
static const GLUTStrokeChar ch112 = {70.8029f,2,ch112st};
/* char: 0x71 */
static const GLUTStrokeVertex ch113st0[] =
{
{61.9829f,66.6667f},
{61.9829f,-33.3333f}
};
static const GLUTStrokeVertex ch113st1[] =
{
{61.9829f,52.3810f},
{52.4590f,61.9048f},
{42.9352f,66.6667f},
{28.6495f,66.6667f},
{19.1257f,61.9048f},
{9.6019f,52.3810f},
{4.8400f,38.0952f},
{4.8400f,28.5714f},
{9.6019f,14.2857f},
{19.1257f,4.7619f},
{28.6495f,0.0000f},
{42.9352f,0.0000f},
{52.4590f,4.7619f},
{61.9829f,14.2857f}
};
static const GLUTStrokeStrip ch113st[] =
{
{2,ch113st0},
{14,ch113st1}
};
static const GLUTStrokeChar ch113 = {70.7429f,2,ch113st};
/* char: 0x72 */
static const GLUTStrokeVertex ch114st0[] =
{
{9.4600f,66.6667f},
{9.4600f,0.0000f}
};
static const GLUTStrokeVertex ch114st1[] =
{
{9.4600f,38.0952f},
{14.2219f,52.3810f},
{23.7457f,61.9048f},
{33.2695f,66.6667f},
{47.5552f,66.6667f}
};
static const GLUTStrokeStrip ch114st[] =
{
{2,ch114st0},
{5,ch114st1}
};
static const GLUTStrokeChar ch114 = {49.4952f,2,ch114st};
/* char: 0x73 */
static const GLUTStrokeVertex ch115st0[] =
{
{57.0810f,52.3810f},
{52.3190f,61.9048f},
{38.0333f,66.6667f},
{23.7476f,66.6667f},
{9.4619f,61.9048f},
{4.7000f,52.3810f},
{9.4619f,42.8571f},
{18.9857f,38.0952f},
{42.7952f,33.3333f},
{52.3190f,28.5714f},
{57.0810f,19.0476f},
{57.0810f,14.2857f},
{52.3190f,4.7619f},
{38.0333f,0.0000f},
{23.7476f,0.0000f},
{9.4619f,4.7619f},
{4.7000f,14.2857f}
};
static const GLUTStrokeStrip ch115st[] =
{
{17,ch115st0}
};
static const GLUTStrokeChar ch115 = {62.3210f,1,ch115st};
/* char: 0x74 */
static const GLUTStrokeVertex ch116st0[] =
{
{14.8257f,100.0000f},
{14.8257f,19.0476f},
{19.5876f,4.7619f},
{29.1114f,0.0000f},
{38.6352f,0.0000f}
};
static const GLUTStrokeVertex ch116st1[] =
{
{0.5400f,66.6667f},
{33.8733f,66.6667f}
};
static const GLUTStrokeStrip ch116st[] =
{
{5,ch116st0},
{2,ch116st1}
};
static const GLUTStrokeChar ch116 = {39.3152f,2,ch116st};
/* char: 0x75 */
static const GLUTStrokeVertex ch117st0[] =
{
{9.4600f,66.6667f},
{9.4600f,19.0476f},
{14.2219f,4.7619f},
{23.7457f,0.0000f},
{38.0314f,0.0000f},
{47.5552f,4.7619f},
{61.8410f,19.0476f}
};
static const GLUTStrokeVertex ch117st1[] =
{
{61.8410f,66.6667f},
{61.8410f,0.0000f}
};
static const GLUTStrokeStrip ch117st[] =
{
{7,ch117st0},
{2,ch117st1}
};
static const GLUTStrokeChar ch117 = {71.1610f,2,ch117st};
/* char: 0x76 */
static const GLUTStrokeVertex ch118st0[] =
{
{1.8000f,66.6667f},
{30.3714f,0.0000f}
};
static const GLUTStrokeVertex ch118st1[] =
{
{58.9429f,66.6667f},
{30.3714f,0.0000f}
};
static const GLUTStrokeStrip ch118st[] =
{
{2,ch118st0},
{2,ch118st1}
};
static const GLUTStrokeChar ch118 = {60.6029f,2,ch118st};
/* char: 0x77 */
static const GLUTStrokeVertex ch119st0[] =
{
{2.5000f,66.6667f},
{21.5476f,0.0000f}
};
static const GLUTStrokeVertex ch119st1[] =
{
{40.5952f,66.6667f},
{21.5476f,0.0000f}
};
static const GLUTStrokeVertex ch119st2[] =
{
{40.5952f,66.6667f},
{59.6429f,0.0000f}
};
static const GLUTStrokeVertex ch119st3[] =
{
{78.6905f,66.6667f},
{59.6429f,0.0000f}
};
static const GLUTStrokeStrip ch119st[] =
{
{2,ch119st0},
{2,ch119st1},
{2,ch119st2},
{2,ch119st3}
};
static const GLUTStrokeChar ch119 = {80.4905f,4,ch119st};
/* char: 0x78 */
static const GLUTStrokeVertex ch120st0[] =
{
{1.6600f,66.6667f},
{54.0410f,0.0000f}
};
static const GLUTStrokeVertex ch120st1[] =
{
{54.0410f,66.6667f},
{1.6600f,0.0000f}
};
static const GLUTStrokeStrip ch120st[] =
{
{2,ch120st0},
{2,ch120st1}
};
static const GLUTStrokeChar ch120 = {56.4010f,2,ch120st};
/* char: 0x79 */
static const GLUTStrokeVertex ch121st0[] =
{
{6.5619f,66.6667f},
{35.1333f,0.0000f}
};
static const GLUTStrokeVertex ch121st1[] =
{
{63.7048f,66.6667f},
{35.1333f,0.0000f},
{25.6095f,-19.0476f},
{16.0857f,-28.5714f},
{6.5619f,-33.3333f},
{1.8000f,-33.3333f}
};
static const GLUTStrokeStrip ch121st[] =
{
{2,ch121st0},
{6,ch121st1}
};
static const GLUTStrokeChar ch121 = {66.0648f,2,ch121st};
/* char: 0x7a */
static const GLUTStrokeVertex ch122st0[] =
{
{56.8210f,66.6667f},
{4.4400f,0.0000f}
};
static const GLUTStrokeVertex ch122st1[] =
{
{4.4400f,66.6667f},
{56.8210f,66.6667f}
};
static const GLUTStrokeVertex ch122st2[] =
{
{4.4400f,0.0000f},
{56.8210f,0.0000f}
};
static const GLUTStrokeStrip ch122st[] =
{
{2,ch122st0},
{2,ch122st1},
{2,ch122st2}
};
static const GLUTStrokeChar ch122 = {61.8210f,3,ch122st};
/* char: 0x7b */
static const GLUTStrokeVertex ch123st0[] =
{
{31.1895f,119.0476f},
{21.6657f,114.2857f},
{16.9038f,109.5238f},
{12.1419f,100.0000f},
{12.1419f,90.4762f},
{16.9038f,80.9524f},
{21.6657f,76.1905f},
{26.4276f,66.6667f},
{26.4276f,57.1429f},
{16.9038f,47.6190f}
};
static const GLUTStrokeVertex ch123st1[] =
{
{21.6657f,114.2857f},
{16.9038f,104.7619f},
{16.9038f,95.2381f},
{21.6657f,85.7143f},
{26.4276f,80.9524f},
{31.1895f,71.4286f},
{31.1895f,61.9048f},
{26.4276f,52.3810f},
{7.3800f,42.8571f},
{26.4276f,33.3333f},
{31.1895f,23.8095f},
{31.1895f,14.2857f},
{26.4276f,4.7619f},
{21.6657f,0.0000f},
{16.9038f,-9.5238f},
{16.9038f,-19.0476f},
{21.6657f,-28.5714f}
};
static const GLUTStrokeVertex 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 GLUTStrokeStrip ch123st[] =
{
{10,ch123st0},
{17,ch123st1},
{10,ch123st2}
};
static const GLUTStrokeChar ch123 = {41.6295f,3,ch123st};
/* char: 0x7c */
static const GLUTStrokeVertex ch124st0[] =
{
{11.5400f,119.0476f},
{11.5400f,-33.3333f}
};
static const GLUTStrokeStrip ch124st[] =
{
{2,ch124st0}
};
static const GLUTStrokeChar ch124 = {23.7800f,1,ch124st};
/* char: 0x7d */
static const GLUTStrokeVertex ch125st0[] =
{
{9.1800f,119.0476f},
{18.7038f,114.2857f},
{23.4657f,109.5238f},
{28.2276f,100.0000f},
{28.2276f,90.4762f},
{23.4657f,80.9524f},
{18.7038f,76.1905f},
{13.9419f,66.6667f},
{13.9419f,57.1429f},
{23.4657f,47.6190f}
};
static const GLUTStrokeVertex ch125st1[] =
{
{18.7038f,114.2857f},
{23.4657f,104.7619f},
{23.4657f,95.2381f},
{18.7038f,85.7143f},
{13.9419f,80.9524f},
{9.1800f,71.4286f},
{9.1800f,61.9048f},
{13.9419f,52.3810f},
{32.9895f,42.8571f},
{13.9419f,33.3333f},
{9.1800f,23.8095f},
{9.1800f,14.2857f},
{13.9419f,4.7619f},
{18.7038f,0.0000f},
{23.4657f,-9.5238f},
{23.4657f,-19.0476f},
{18.7038f,-28.5714f}
};
static const GLUTStrokeVertex 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.1800f,-33.3333f}
};
static const GLUTStrokeStrip ch125st[] =
{
{10,ch125st0},
{17,ch125st1},
{10,ch125st2}
};
static const GLUTStrokeChar ch125 = {41.4695f,3,ch125st};
/* char: 0x7e */
static const GLUTStrokeVertex ch126st0[] =
{
{2.9200f,28.5714f},
{2.9200f,38.0952f},
{7.6819f,52.3810f},
{17.2057f,57.1429f},
{26.7295f,57.1429f},
{36.2533f,52.3810f},
{55.3010f,38.0952f},
{64.8248f,33.3333f},
{74.3486f,33.3333f},
{83.8724f,38.0952f},
{88.6343f,47.6190f}
};
static const GLUTStrokeVertex ch126st1[] =
{
{2.9200f,38.0952f},
{7.6819f,47.6190f},
{17.2057f,52.3810f},
{26.7295f,52.3810f},
{36.2533f,47.6190f},
{55.3010f,33.3333f},
{64.8248f,28.5714f},
{74.3486f,28.5714f},
{83.8724f,33.3333f},
{88.6343f,47.6190f},
{88.6343f,57.1429f}
};
static const GLUTStrokeStrip ch126st[] =
{
{11,ch126st0},
{11,ch126st1}
};
static const GLUTStrokeChar ch126 = {91.2743f,2,ch126st};
static const GLUTStrokeChar *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
};
const GLUTStrokeFont glutStrokeRoman = {"Roman",128,chars,152.3809f,33.3333f};
/*
* 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 <math.h>
#include "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 GLUTAPIENTRY glutWireCube( GLdouble dSize )
{
double size = dSize * 0.5;
# 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 GLUTAPIENTRY glutSolidCube( GLdouble dSize )
{
double size = dSize * 0.5;
# 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 circleTable(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;
/* 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);
_glut_fatal("Failed to allocate memory in circleTable");
}
/* Compute cos and sin around the circle */
for (i=0; 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 GLUTAPIENTRY 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;
circleTable(&sint1,&cost1,-slices);
circleTable(&sint2,&cost2,stacks*2);
/* The top stack is covered with a triangle fan */
z0 = 1.0;
z1 = cost2[1];
r0 = 0.0;
r1 = sint2[1];
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 solid sphere
*/
void GLUTAPIENTRY 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;
circleTable(&sint1,&cost1,-slices );
circleTable(&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 GLUTAPIENTRY 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;
const double rStep = base/stacks;
/* 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;
circleTable(&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 GLUTAPIENTRY 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;
const double rStep = base/stacks;
/* 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;
circleTable(&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 GLUTAPIENTRY 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;
/* Pre-computed circle */
double *sint,*cost;
circleTable(&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 GLUTAPIENTRY 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;
/* Pre-computed circle */
double *sint,*cost;
circleTable(&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);
}
/*
*
*/
void GLUTAPIENTRY 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 ;
/*
* 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();
}
/*
*
*/
void GLUTAPIENTRY 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 ;
/*
* 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 GLUTAPIENTRY glutWireDodecahedron( void )
{
/* 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 = 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 GLUTAPIENTRY glutSolidDodecahedron( void )
{
/* 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 = 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 GLUTAPIENTRY glutWireOctahedron( void )
{
#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, 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,-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, 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,-RADIUS, 0.0 ); glVertex3d( 0.0, 0.0,-RADIUS );
glEnd();
#undef RADIUS
}
/*
*
*/
void GLUTAPIENTRY glutSolidOctahedron( void )
{
#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, 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,-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, 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,-RADIUS, 0.0 ); glVertex3d( 0.0, 0.0,-RADIUS );
glEnd();
#undef RADIUS
}
/*
*
*/
void GLUTAPIENTRY glutWireTetrahedron( void )
{
/* 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.
*/
double r0[3] = { 1.0, 0.0, 0.0 } ;
double r1[3] = { -0.333333333333, 0.942809041582, 0.0 } ;
double r2[3] = { -0.333333333333, -0.471404520791, 0.816496580928 } ;
double r3[3] = { -0.333333333333, -0.471404520791, -0.816496580928 } ;
glBegin( GL_LINE_LOOP ) ;
glNormal3d ( -1.0, 0.0, 0.0 ) ; glVertex3dv ( r1 ) ; glVertex3dv ( r3 ) ; glVertex3dv ( r2 ) ;
glNormal3d ( 0.333333333333, -0.942809041582, 0.0 ) ; glVertex3dv ( r0 ) ; glVertex3dv ( r2 ) ; glVertex3dv ( r3 ) ;
glNormal3d ( 0.333333333333, 0.471404520791, -0.816496580928 ) ; glVertex3dv ( r0 ) ; glVertex3dv ( r3 ) ; glVertex3dv ( r1 ) ;
glNormal3d ( 0.333333333333, 0.471404520791, 0.816496580928 ) ; glVertex3dv ( r0 ) ; glVertex3dv ( r1 ) ; glVertex3dv ( r2 ) ;
glEnd() ;
}
/*
*
*/
void GLUTAPIENTRY glutSolidTetrahedron( void )
{
/* 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.
*/
double r0[3] = { 1.0, 0.0, 0.0 } ;
double r1[3] = { -0.333333333333, 0.942809041582, 0.0 } ;
double r2[3] = { -0.333333333333, -0.471404520791, 0.816496580928 } ;
double r3[3] = { -0.333333333333, -0.471404520791, -0.816496580928 } ;
glBegin( GL_TRIANGLES ) ;
glNormal3d ( -1.0, 0.0, 0.0 ) ; glVertex3dv ( r1 ) ; glVertex3dv ( r3 ) ; glVertex3dv ( r2 ) ;
glNormal3d ( 0.333333333333, -0.942809041582, 0.0 ) ; glVertex3dv ( r0 ) ; glVertex3dv ( r2 ) ; glVertex3dv ( r3 ) ;
glNormal3d ( 0.333333333333, 0.471404520791, -0.816496580928 ) ; glVertex3dv ( r0 ) ; glVertex3dv ( r3 ) ; glVertex3dv ( r1 ) ;
glNormal3d ( 0.333333333333, 0.471404520791, 0.816496580928 ) ; glVertex3dv ( r0 ) ; glVertex3dv ( r1 ) ; glVertex3dv ( r2 ) ;
glEnd() ;
}
/*
*
*/
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 } } ;
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 GLUTAPIENTRY glutWireIcosahedron( void )
{
int i ;
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 GLUTAPIENTRY glutSolidIcosahedron( void )
{
int i ;
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 () ;
}
/*
*
*/
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 } } ;
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 } } ;
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 GLUTAPIENTRY glutWireRhombicDodecahedron( void )
{
int i ;
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 GLUTAPIENTRY glutSolidRhombicDodecahedron( void )
{
int i ;
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 () ;
}
#define NUM_FACES 4
static GLdouble tetrahedron_v[4][3] = /* Vertices */
{
{ -0.5, -0.288675134595, -0.144337567297 },
{ 0.5, -0.288675134595, -0.144337567297 },
{ 0.0, 0.577350269189, -0.144337567297 },
{ 0.0, 0.0, 0.672159013631 }
} ;
static GLint tetrahedron_i[4][3] = /* Vertex indices */
{
{ 0, 1, 2 }, { 0, 2, 3 }, { 0, 3, 1 }, { 1, 3, 2 }
} ;
static GLdouble tetrahedron_n[4][3] = /* Normals */
{
{ 0.0, 0.0, -1.0 },
{ -0.816496580928, 0.471404520791, 0.333333333333 },
{ 0.0, -0.942809041582, 0.333333333333 },
{ 0.816496580928, 0.471404520791, 0.333333333333 }
} ;
void GLUTAPIENTRY glutWireSierpinskiSponge ( int num_levels, GLdouble offset[3], GLdouble scale )
{
int i, j ;
if ( num_levels == 0 )
{
for ( i = 0 ; i < NUM_FACES ; i++ )
{
glBegin ( GL_LINE_LOOP ) ;
glNormal3dv ( tetrahedron_n[i] ) ;
for ( j = 0; j < 3; j++ )
{
double x = offset[0] + scale * tetrahedron_v[tetrahedron_i[i][j]][0] ;
double y = offset[1] + scale * tetrahedron_v[tetrahedron_i[i][j]][1] ;
double z = offset[2] + scale * tetrahedron_v[tetrahedron_i[i][j]][2] ;
glVertex3d ( x, y, z ) ;
}
glEnd () ;
}
}
else
{
GLdouble local_offset[3] ; /* Use a local variable to avoid buildup of roundoff errors */
num_levels -- ;
scale /= 2.0 ;
local_offset[0] = offset[0] + scale * tetrahedron_v[0][0] ;
local_offset[1] = offset[1] + scale * tetrahedron_v[0][1] ;
local_offset[2] = offset[2] + scale * tetrahedron_v[0][2] ;
glutWireSierpinskiSponge ( num_levels, local_offset, scale ) ;
local_offset[0] += scale ;
glutWireSierpinskiSponge ( num_levels, local_offset, scale ) ;
local_offset[0] -= 0.5 * scale ;
local_offset[1] += 0.866025403784 * scale ;
glutWireSierpinskiSponge ( num_levels, local_offset, scale ) ;
local_offset[1] -= 0.577350269189 * scale ;
local_offset[2] += 0.816496580928 * scale ;
glutWireSierpinskiSponge ( num_levels, local_offset, scale ) ;
}
}
void GLUTAPIENTRY glutSolidSierpinskiSponge ( int num_levels, GLdouble offset[3], GLdouble scale )
{
int i, j ;
if ( num_levels == 0 )
{
glBegin ( GL_TRIANGLES ) ;
for ( i = 0 ; i < NUM_FACES ; i++ )
{
glNormal3dv ( tetrahedron_n[i] ) ;
for ( j = 0; j < 3; j++ )
{
double x = offset[0] + scale * tetrahedron_v[tetrahedron_i[i][j]][0] ;
double y = offset[1] + scale * tetrahedron_v[tetrahedron_i[i][j]][1] ;
double z = offset[2] + scale * tetrahedron_v[tetrahedron_i[i][j]][2] ;
glVertex3d ( x, y, z ) ;
}
}
glEnd () ;
}
else
{
GLdouble local_offset[3] ; /* Use a local variable to avoid buildup of roundoff errors */
num_levels -- ;
scale /= 2.0 ;
local_offset[0] = offset[0] + scale * tetrahedron_v[0][0] ;
local_offset[1] = offset[1] + scale * tetrahedron_v[0][1] ;
local_offset[2] = offset[2] + scale * tetrahedron_v[0][2] ;
glutSolidSierpinskiSponge ( num_levels, local_offset, scale ) ;
local_offset[0] += scale ;
glutSolidSierpinskiSponge ( num_levels, local_offset, scale ) ;
local_offset[0] -= 0.5 * scale ;
local_offset[1] += 0.866025403784 * scale ;
glutSolidSierpinskiSponge ( num_levels, local_offset, scale ) ;
local_offset[1] -= 0.577350269189 * scale ;
local_offset[2] += 0.816496580928 * scale ;
glutSolidSierpinskiSponge ( num_levels, local_offset, scale ) ;
}
}
#undef NUM_FACES
/*** END OF FILE ***/
/*
* DOS/DJGPP Mesa Utility Toolkit
* Version: 1.0
*
* Copyright (C) 2005 Daniel Borca 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
* DANIEL BORCA 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 <stdio.h>
#include "internal.h"
#define FREQUENCY 100 /* set this to zero to use the default timer */
static int timer_installed;
#if FREQUENCY
static volatile int ticks;
static void
ticks_timer (void *p)
{
(void)p;
ticks++;
} ENDOFUNC(ticks_timer)
#else
#include <time.h>
static struct timeval then;
#endif
int APIENTRY
glutGet (GLenum type)
{
switch (type) {
case GLUT_WINDOW_X:
return _glut_current->xpos;
case GLUT_WINDOW_Y:
return _glut_current->ypos;
case GLUT_WINDOW_WIDTH:
return _glut_current->width;
case GLUT_WINDOW_HEIGHT:
return _glut_current->height;
case GLUT_WINDOW_STENCIL_SIZE:
return _glut_visual.stencil;
case GLUT_WINDOW_DEPTH_SIZE:
return _glut_visual.depth;
case GLUT_WINDOW_RGBA:
return !(_glut_default.mode & GLUT_INDEX);
case GLUT_WINDOW_COLORMAP_SIZE:
return (_glut_default.mode & GLUT_INDEX) ? (256 - RESERVED_COLORS) : 0;
case GLUT_SCREEN_WIDTH:
return _glut_visual.geometry[0];
case GLUT_SCREEN_HEIGHT:
return _glut_visual.geometry[1];
case GLUT_INIT_WINDOW_X:
return _glut_default.x;
case GLUT_INIT_WINDOW_Y:
return _glut_default.y;
case GLUT_INIT_WINDOW_WIDTH:
return _glut_default.width;
case GLUT_INIT_WINDOW_HEIGHT:
return _glut_default.height;
case GLUT_INIT_DISPLAY_MODE:
return _glut_default.mode;
case GLUT_ELAPSED_TIME:
#if FREQUENCY
if (!timer_installed) {
timer_installed = GL_TRUE;
LOCKDATA(ticks);
LOCKFUNC(ticks_timer);
pc_install_int(ticks_timer, NULL, FREQUENCY);
}
return ticks * 1000 / FREQUENCY;
#else
if (!timer_installed) {
timer_installed = GL_TRUE;
gettimeofday(&then, NULL);
return 0;
} else {
struct timeval now;
gettimeofday(&now, NULL);
return (now.tv_usec - then.tv_usec) / 1000 +
(now.tv_sec - then.tv_sec) * 1000;
}
#endif
default:
return -1;
}
}
int APIENTRY
glutDeviceGet (GLenum type)
{
switch (type) {
case GLUT_HAS_KEYBOARD:
return GL_TRUE;
case GLUT_HAS_MOUSE:
return (_glut_mouse != 0);
case GLUT_NUM_MOUSE_BUTTONS:
return _glut_mouse;
case GLUT_HAS_SPACEBALL:
case GLUT_HAS_DIAL_AND_BUTTON_BOX:
case GLUT_HAS_TABLET:
return GL_FALSE;
case GLUT_NUM_SPACEBALL_BUTTONS:
case GLUT_NUM_BUTTON_BOX_BUTTONS:
case GLUT_NUM_DIALS:
case GLUT_NUM_TABLET_BUTTONS:
return 0;
default:
return -1;
}
}
int APIENTRY
glutGetModifiers (void)
{
int mod = 0;
int shifts = pc_keyshifts();
if (shifts & (KB_SHIFT_FLAG | KB_CAPSLOCK_FLAG)) {
mod |= GLUT_ACTIVE_SHIFT;
}
if (shifts & KB_ALT_FLAG) {
mod |= GLUT_ACTIVE_ALT;
}
if (shifts & KB_CTRL_FLAG) {
mod |= GLUT_ACTIVE_CTRL;
}
return mod;
}
void APIENTRY
glutReportErrors (void)
{
/* reports all the OpenGL errors that happened till now */
}
/* GAME MODE
* Hack alert: incomplete... what is GameMode, anyway?
*/
static GLint game;
static GLboolean game_possible;
static GLboolean game_active;
static GLuint game_width;
static GLuint game_height;
static GLuint game_bpp;
static GLuint game_refresh;
void APIENTRY
glutGameModeString (const char *string)
{
if (sscanf(string, "%ux%u:%u@%u", &game_width, &game_height, &game_bpp, &game_refresh) == 4) {
game_possible = GL_TRUE;
}
}
int APIENTRY
glutGameModeGet (GLenum mode)
{
switch (mode) {
case GLUT_GAME_MODE_ACTIVE:
return game_active;
case GLUT_GAME_MODE_POSSIBLE:
return game_possible && !_glut_current;
case GLUT_GAME_MODE_WIDTH:
return game_active ? (int)game_width : -1;
case GLUT_GAME_MODE_HEIGHT:
return game_active ? (int)game_height : -1;
case GLUT_GAME_MODE_PIXEL_DEPTH:
return game_active ? (int)game_bpp : -1;
case GLUT_GAME_MODE_REFRESH_RATE:
return game_active ? (int)game_refresh : -1;
default:
return -1;
}
}
int APIENTRY
glutEnterGameMode (void)
{
if (glutGameModeGet(GLUT_GAME_MODE_POSSIBLE)) {
_glut_visual.bpp = game_bpp;
_glut_visual.refresh = game_refresh;
glutInitWindowSize(game_width, game_height);
if ((game = glutCreateWindow("<game>")) > 0) {
game_active = GL_TRUE;
}
return game;
} else {
return 0;
}
}
void GLUTAPIENTRY
glutLeaveGameMode (void)
{
if (glutGameModeGet(GLUT_GAME_MODE_ACTIVE)) {
game_active = GL_FALSE;
glutDestroyWindow(game);
}
}
/*
* FxGLUT version 0.12 - GLUT for Voodoo 1 and 2 under Linux
* Copyright (C) 1999 Christopher John Purnell
* cjp@lost.org.uk
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "internal.h"
void
glutStrokeCharacter (void *font, int c)
{
const GLUTStrokeFont *sfp = _glut_font(font);
const GLUTStrokeChar *scp;
const GLUTStrokeStrip *ssp;
const GLUTStrokeVertex *svp;
unsigned i, j;
if (((unsigned)c) >= sfp->num || !(scp = sfp->table[c]))
return;
ssp = scp->strip;
for (i = 0; i < scp->num; i++, ssp++) {
svp = ssp->vertex;
glBegin(GL_LINE_STRIP);
for (j = 0; j < ssp->num; j++, svp++) {
glVertex2f(svp->x, svp->y);
}
glEnd();
}
glTranslatef(scp->right, 0.0, 0.0);
}
void
glutStrokeString (void *font, const unsigned char *string)
{
const GLUTStrokeFont *sfp = _glut_font(font);
const GLUTStrokeChar *scp;
const GLUTStrokeStrip *ssp;
const GLUTStrokeVertex *svp;
unsigned char c;
unsigned i, j;
while ((c = *(string++))) {
if (c < sfp->num && (scp = sfp->table[c])) {
ssp = scp->strip;
for (i = 0; i < scp->num; i++, ssp++) {
svp = ssp->vertex;
glBegin(GL_LINE_STRIP);
for (j = 0; j < ssp->num; j++, svp++) {
glVertex2f(svp->x, svp->y);
}
glEnd();
}
glTranslatef(scp->right, 0.0, 0.0);
}
}
}
int
glutStrokeWidth (void *font, int c)
{
const GLUTStrokeFont *sfp = _glut_font(font);
const GLUTStrokeChar *scp;
if (((unsigned)c) >= sfp->num || !(scp = sfp->table[c]))
return 0;
return scp->right;
}
int
glutStrokeLength (void *font, const unsigned char *string)
{
const GLUTStrokeFont *sfp = _glut_font(font);
const GLUTStrokeChar *scp;
unsigned char c;
int length = 0;
while ((c = *(string++))) {
if (c < sfp->num && (scp = sfp->table[c]))
length += scp->right;
}
return length;
}
GLfloat
glutStrokeHeight (void *font)
{
const GLUTStrokeFont *sfp = _glut_font(font);
return sfp->height;
}
/*
* (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 "internal.h"
/*
* 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 float 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 float tex[2][2][2] =
{
{ {0, 0}, {1, 0} },
{ {0, 1}, {1, 1} }
};
static void teapot( GLint grid, GLdouble scale, GLenum type )
{
float p[4][4][3], q[4][4][3], r[4][4][3], s[4][4][3];
long i, j, k, l;
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();
glRotatef(270.0, 1.0, 0.0, 0.0);
glScalef(0.5 * scale, 0.5 * scale, 0.5 * scale);
glTranslatef(0.0, 0.0, -1.5);
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;
}
}
}
}
glMap2f(GL_MAP2_TEXTURE_COORD_2, 0, 1, 2, 2, 0, 1, 4, 2,
&tex[0][0][0]);
glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4,
&p[0][0][0]);
glMapGrid2f(grid, 0.0, 1.0, grid, 0.0, 1.0);
glEvalMesh2(type, 0, grid, 0, grid);
glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4,
&q[0][0][0]);
glEvalMesh2(type, 0, grid, 0, grid);
if (i < 6)
{
glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4,
&r[0][0][0]);
glEvalMesh2(type, 0, grid, 0, grid);
glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4,
&s[0][0][0]);
glEvalMesh2(type, 0, grid, 0, grid);
}
}
glPopMatrix();
glPopAttrib();
}
void glutWireTeapot(GLdouble size)
{
teapot(10, size, GL_LINE);
}
void glutSolidTeapot(GLdouble size)
{
teapot(7, size, GL_FILL);
}
/* autogenerated by bdf2c! do not edit */
/* "Copyright (c) 1984, 1987 Adobe Systems Incorporated. All Rights Reserved. Copyright (c) 1988, 1991 Digital Equipment Corporation. All Rights Reserved." */
#include "internal.h"
/*
typedef struct {
int width, height;
int xorig, yorig;
int xmove;
const unsigned char *bitmap;
} GLUTBitmapChar;
typedef struct {
const char *name;
int height;
int num;
const GLUTBitmapChar *const *table;
} GLUTBitmapFont;
*/
static const unsigned char ch32data[] = {
0x0
};
static const GLUTBitmapChar ch32 = { 1, 1, 0, 0, 2, ch32data };
static const unsigned char ch33data[] = {
0x80,0x0,0x80,0x80,0x80,0x80,0x80
};
static const GLUTBitmapChar ch33 = { 1, 7, -1, 0, 3, ch33data };
static const unsigned char ch34data[] = {
0xa0,0xa0
};
static const GLUTBitmapChar ch34 = { 3, 2, 0, -5, 4, ch34data };
static const unsigned char ch35data[] = {
0x50,0x50,0xf8,0x50,0xf8,0x50,0x50
};
static const GLUTBitmapChar ch35 = { 5, 7, 0, 0, 5, ch35data };
static const unsigned char ch36data[] = {
0x20,0xe0,0x90,0x10,0x60,0x80,0x90,0x70,0x20
};
static const GLUTBitmapChar ch36 = { 4, 9, 0, 1, 5, ch36data };
static const unsigned char ch37data[] = {
0x44,0x2a,0x2a,0x56,0xa8,0xa4,0x7e
};
static const GLUTBitmapChar ch37 = { 7, 7, 0, 0, 8, ch37data };
static const unsigned char ch38data[] = {
0x76,0x8d,0x98,0x74,0x6e,0x50,0x30
};
static const GLUTBitmapChar ch38 = { 8, 7, 0, 0, 8, ch38data };
static const unsigned char ch39data[] = {
0x40,0xc0
};
static const GLUTBitmapChar ch39 = { 2, 2, 0, -5, 3, ch39data };
static const unsigned char ch40data[] = {
0x20,0x40,0x40,0x80,0x80,0x80,0x40,0x40,0x20
};
static const GLUTBitmapChar ch40 = { 3, 9, 0, 2, 4, ch40data };
static const unsigned char ch41data[] = {
0x80,0x40,0x40,0x20,0x20,0x20,0x40,0x40,0x80
};
static const GLUTBitmapChar ch41 = { 3, 9, 0, 2, 4, ch41data };
static const unsigned char ch42data[] = {
0xa0,0x40,0xa0
};
static const GLUTBitmapChar ch42 = { 3, 3, 0, -4, 5, ch42data };
static const unsigned char ch43data[] = {
0x20,0x20,0xf8,0x20,0x20
};
static const GLUTBitmapChar ch43 = { 5, 5, 0, 0, 6, ch43data };
static const unsigned char ch44data[] = {
0x80,0x80,0x80
};
static const GLUTBitmapChar ch44 = { 1, 3, -1, 2, 3, ch44data };
static const unsigned char ch45data[] = {
0xf0
};
static const GLUTBitmapChar ch45 = { 4, 1, -1, -2, 7, ch45data };
static const unsigned char ch46data[] = {
0x80
};
static const GLUTBitmapChar ch46 = { 1, 1, -1, 0, 3, ch46data };
static const unsigned char ch47data[] = {
0x80,0x80,0x40,0x40,0x40,0x20,0x20
};
static const GLUTBitmapChar ch47 = { 3, 7, 0, 0, 3, ch47data };
static const unsigned char ch48data[] = {
0x60,0x90,0x90,0x90,0x90,0x90,0x60
};
static const GLUTBitmapChar ch48 = { 4, 7, 0, 0, 5, ch48data };
static const unsigned char ch49data[] = {
0xe0,0x40,0x40,0x40,0x40,0xc0,0x40
};
static const GLUTBitmapChar ch49 = { 3, 7, -1, 0, 5, ch49data };
static const unsigned char ch50data[] = {
0xf0,0x40,0x20,0x20,0x10,0x90,0x60
};
static const GLUTBitmapChar ch50 = { 4, 7, 0, 0, 5, ch50data };
static const unsigned char ch51data[] = {
0xe0,0x10,0x10,0x60,0x10,0x90,0x60
};
static const GLUTBitmapChar ch51 = { 4, 7, 0, 0, 5, ch51data };
static const unsigned char ch52data[] = {
0x10,0x10,0xf8,0x90,0x50,0x30,0x10
};
static const GLUTBitmapChar ch52 = { 5, 7, 0, 0, 5, ch52data };
static const unsigned char ch53data[] = {
0xe0,0x90,0x10,0x10,0xe0,0x40,0x70
};
static const GLUTBitmapChar ch53 = { 4, 7, 0, 0, 5, ch53data };
static const unsigned char ch54data[] = {
0x60,0x90,0x90,0x90,0xe0,0x40,0x30
};
static const GLUTBitmapChar ch54 = { 4, 7, 0, 0, 5, ch54data };
static const unsigned char ch55data[] = {
0x40,0x40,0x40,0x20,0x20,0x90,0xf0
};
static const GLUTBitmapChar ch55 = { 4, 7, 0, 0, 5, ch55data };
static const unsigned char ch56data[] = {
0x60,0x90,0x90,0x60,0x90,0x90,0x60
};
static const GLUTBitmapChar ch56 = { 4, 7, 0, 0, 5, ch56data };
static const unsigned char ch57data[] = {
0xc0,0x20,0x70,0x90,0x90,0x90,0x60
};
static const GLUTBitmapChar ch57 = { 4, 7, 0, 0, 5, ch57data };
static const unsigned char ch58data[] = {
0x80,0x0,0x0,0x0,0x80
};
static const GLUTBitmapChar ch58 = { 1, 5, -1, 0, 3, ch58data };
static const unsigned char ch59data[] = {
0x80,0x80,0x80,0x0,0x0,0x0,0x80
};
static const GLUTBitmapChar ch59 = { 1, 7, -1, 2, 3, ch59data };
static const unsigned char ch60data[] = {
0x20,0x40,0x80,0x40,0x20
};
static const GLUTBitmapChar ch60 = { 3, 5, -1, 0, 5, ch60data };
static const unsigned char ch61data[] = {
0xf8,0x0,0xf8
};
static const GLUTBitmapChar ch61 = { 5, 3, 0, -1, 6, ch61data };
static const unsigned char ch62data[] = {
0x80,0x40,0x20,0x40,0x80
};
static const GLUTBitmapChar ch62 = { 3, 5, 0, 0, 5, ch62data };
static const unsigned char ch63data[] = {
0x40,0x0,0x40,0x40,0x20,0xa0,0xe0
};
static const GLUTBitmapChar ch63 = { 3, 7, 0, 0, 4, ch63data };
static const unsigned char ch64data[] = {
0x3e,0x40,0x92,0xad,0xa5,0xa5,0x9d,0x42,0x3c
};
static const GLUTBitmapChar ch64 = { 8, 9, 0, 2, 9, ch64data };
static const unsigned char ch65data[] = {
0xee,0x44,0x7c,0x28,0x28,0x38,0x10
};
static const GLUTBitmapChar ch65 = { 7, 7, 0, 0, 8, ch65data };
static const unsigned char ch66data[] = {
0xf0,0x48,0x48,0x70,0x48,0x48,0xf0
};
static const GLUTBitmapChar ch66 = { 5, 7, 0, 0, 6, ch66data };
static const unsigned char ch67data[] = {
0x78,0xc4,0x80,0x80,0x80,0xc4,0x7c
};
static const GLUTBitmapChar ch67 = { 6, 7, 0, 0, 7, ch67data };
static const unsigned char ch68data[] = {
0xf8,0x4c,0x44,0x44,0x44,0x4c,0xf8
};
static const GLUTBitmapChar ch68 = { 6, 7, 0, 0, 7, ch68data };
static const unsigned char ch69data[] = {
0xf8,0x48,0x40,0x70,0x40,0x48,0xf8
};
static const GLUTBitmapChar ch69 = { 5, 7, 0, 0, 6, ch69data };
static const unsigned char ch70data[] = {
0xe0,0x40,0x40,0x70,0x40,0x48,0xf8
};
static const GLUTBitmapChar ch70 = { 5, 7, 0, 0, 6, ch70data };
static const unsigned char ch71data[] = {
0x78,0xc4,0x84,0x9c,0x80,0xc4,0x7c
};
static const GLUTBitmapChar ch71 = { 6, 7, 0, 0, 7, ch71data };
static const unsigned char ch72data[] = {
0xee,0x44,0x44,0x7c,0x44,0x44,0xee
};
static const GLUTBitmapChar ch72 = { 7, 7, 0, 0, 8, ch72data };
static const unsigned char ch73data[] = {
0xe0,0x40,0x40,0x40,0x40,0x40,0xe0
};
static const GLUTBitmapChar ch73 = { 3, 7, 0, 0, 4, ch73data };
static const unsigned char ch74data[] = {
0xc0,0xa0,0x20,0x20,0x20,0x20,0x70
};
static const GLUTBitmapChar ch74 = { 4, 7, 0, 0, 4, ch74data };
static const unsigned char ch75data[] = {
0xec,0x48,0x50,0x60,0x50,0x48,0xec
};
static const GLUTBitmapChar ch75 = { 6, 7, 0, 0, 7, ch75data };
static const unsigned char ch76data[] = {
0xf8,0x48,0x40,0x40,0x40,0x40,0xe0
};
static const GLUTBitmapChar ch76 = { 5, 7, 0, 0, 6, ch76data };
static const unsigned char ch77data[] = {
0xeb,0x80,0x49,0x0,0x55,0x0,0x55,0x0,0x63,0x0,0x63,0x0,0xe3,0x80
};
static const GLUTBitmapChar ch77 = { 9, 7, 0, 0, 10, ch77data };
static const unsigned char ch78data[] = {
0xe4,0x4c,0x4c,0x54,0x54,0x64,0xee
};
static const GLUTBitmapChar ch78 = { 7, 7, 0, 0, 8, ch78data };
static const unsigned char ch79data[] = {
0x78,0xcc,0x84,0x84,0x84,0xcc,0x78
};
static const GLUTBitmapChar ch79 = { 6, 7, 0, 0, 7, ch79data };
static const unsigned char ch80data[] = {
0xe0,0x40,0x40,0x70,0x48,0x48,0xf0
};
static const GLUTBitmapChar ch80 = { 5, 7, 0, 0, 6, ch80data };
static const unsigned char ch81data[] = {
0xc,0x18,0x70,0xcc,0x84,0x84,0x84,0xcc,0x78
};
static const GLUTBitmapChar ch81 = { 6, 9, 0, 2, 7, ch81data };
static const unsigned char ch82data[] = {
0xec,0x48,0x50,0x70,0x48,0x48,0xf0
};
static const GLUTBitmapChar ch82 = { 6, 7, 0, 0, 7, ch82data };
static const unsigned char ch83data[] = {
0xe0,0x90,0x10,0x60,0xc0,0x90,0x70
};
static const GLUTBitmapChar ch83 = { 4, 7, 0, 0, 5, ch83data };
static const unsigned char ch84data[] = {
0x70,0x20,0x20,0x20,0x20,0xa8,0xf8
};
static const GLUTBitmapChar ch84 = { 5, 7, 0, 0, 6, ch84data };
static const unsigned char ch85data[] = {
0x38,0x6c,0x44,0x44,0x44,0x44,0xee
};
static const GLUTBitmapChar ch85 = { 7, 7, 0, 0, 8, ch85data };
static const unsigned char ch86data[] = {
0x10,0x10,0x28,0x28,0x6c,0x44,0xee
};
static const GLUTBitmapChar ch86 = { 7, 7, 0, 0, 8, ch86data };
static const unsigned char ch87data[] = {
0x22,0x0,0x22,0x0,0x55,0x0,0x55,0x0,0xc9,0x80,0x88,0x80,0xdd,0xc0
};
static const GLUTBitmapChar ch87 = { 10, 7, 0, 0, 10, ch87data };
static const unsigned char ch88data[] = {
0xee,0x44,0x28,0x10,0x28,0x44,0xee
};
static const GLUTBitmapChar ch88 = { 7, 7, 0, 0, 8, ch88data };
static const unsigned char ch89data[] = {
0x38,0x10,0x10,0x28,0x28,0x44,0xee
};
static const GLUTBitmapChar ch89 = { 7, 7, 0, 0, 8, ch89data };
static const unsigned char ch90data[] = {
0xf8,0x88,0x40,0x20,0x10,0x88,0xf8
};
static const GLUTBitmapChar ch90 = { 5, 7, 0, 0, 6, ch90data };
static const unsigned char ch91data[] = {
0xc0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xc0
};
static const GLUTBitmapChar ch91 = { 2, 9, 0, 2, 3, ch91data };
static const unsigned char ch92data[] = {
0x20,0x20,0x40,0x40,0x40,0x80,0x80
};
static const GLUTBitmapChar ch92 = { 3, 7, 0, 0, 3, ch92data };
static const unsigned char ch93data[] = {
0xc0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xc0
};
static const GLUTBitmapChar ch93 = { 2, 9, 0, 2, 3, ch93data };
static const unsigned char ch94data[] = {
0xa0,0xa0,0x40
};
static const GLUTBitmapChar ch94 = { 3, 3, -1, -4, 5, ch94data };
static const unsigned char ch95data[] = {
0xf8
};
static const GLUTBitmapChar ch95 = { 5, 1, 0, 3, 5, ch95data };
static const unsigned char ch96data[] = {
0xc0,0x80
};
static const GLUTBitmapChar ch96 = { 2, 2, 0, -5, 3, ch96data };
static const unsigned char ch97data[] = {
0xe0,0xa0,0x60,0x20,0xc0
};
static const GLUTBitmapChar ch97 = { 3, 5, 0, 0, 4, ch97data };
static const unsigned char ch98data[] = {
0xe0,0x90,0x90,0x90,0xe0,0x80,0x80
};
static const GLUTBitmapChar ch98 = { 4, 7, 0, 0, 5, ch98data };
static const unsigned char ch99data[] = {
0x60,0x80,0x80,0x80,0x60
};
static const GLUTBitmapChar ch99 = { 3, 5, 0, 0, 4, ch99data };
static const unsigned char ch100data[] = {
0x68,0x90,0x90,0x90,0x70,0x10,0x30
};
static const GLUTBitmapChar ch100 = { 5, 7, 0, 0, 5, ch100data };
static const unsigned char ch101data[] = {
0x60,0x80,0xc0,0xa0,0x60
};
static const GLUTBitmapChar ch101 = { 3, 5, 0, 0, 4, ch101data };
static const unsigned char ch102data[] = {
0xe0,0x40,0x40,0x40,0xe0,0x40,0x30
};
static const GLUTBitmapChar ch102 = { 4, 7, 0, 0, 4, ch102data };
static const unsigned char ch103data[] = {
0xe0,0x90,0x60,0x40,0xa0,0xa0,0x70
};
static const GLUTBitmapChar ch103 = { 4, 7, 0, 2, 5, ch103data };
static const unsigned char ch104data[] = {
0xd8,0x90,0x90,0x90,0xe0,0x80,0x80
};
static const GLUTBitmapChar ch104 = { 5, 7, 0, 0, 5, ch104data };
static const unsigned char ch105data[] = {
0x40,0x40,0x40,0x40,0xc0,0x0,0x40
};
static const GLUTBitmapChar ch105 = { 2, 7, 0, 0, 3, ch105data };
static const unsigned char ch106data[] = {
0x80,0x40,0x40,0x40,0x40,0x40,0xc0,0x0,0x40
};
static const GLUTBitmapChar ch106 = { 2, 9, 0, 2, 3, ch106data };
static const unsigned char ch107data[] = {
0x98,0x90,0xe0,0xa0,0x90,0x80,0x80
};
static const GLUTBitmapChar ch107 = { 5, 7, 0, 0, 5, ch107data };
static const unsigned char ch108data[] = {
0xe0,0x40,0x40,0x40,0x40,0x40,0xc0
};
static const GLUTBitmapChar ch108 = { 3, 7, 0, 0, 4, ch108data };
static const unsigned char ch109data[] = {
0xdb,0x92,0x92,0x92,0xec
};
static const GLUTBitmapChar ch109 = { 8, 5, 0, 0, 8, ch109data };
static const unsigned char ch110data[] = {
0xd8,0x90,0x90,0x90,0xe0
};
static const GLUTBitmapChar ch110 = { 5, 5, 0, 0, 5, ch110data };
static const unsigned char ch111data[] = {
0x60,0x90,0x90,0x90,0x60
};
static const GLUTBitmapChar ch111 = { 4, 5, 0, 0, 5, ch111data };
static const unsigned char ch112data[] = {
0xc0,0x80,0xe0,0x90,0x90,0x90,0xe0
};
static const GLUTBitmapChar ch112 = { 4, 7, 0, 2, 5, ch112data };
static const unsigned char ch113data[] = {
0x38,0x10,0x70,0x90,0x90,0x90,0x70
};
static const GLUTBitmapChar ch113 = { 5, 7, 0, 2, 5, ch113data };
static const unsigned char ch114data[] = {
0xe0,0x40,0x40,0x60,0xa0
};
static const GLUTBitmapChar ch114 = { 3, 5, 0, 0, 4, ch114data };
static const unsigned char ch115data[] = {
0xe0,0x20,0x60,0x80,0xe0
};
static const GLUTBitmapChar ch115 = { 3, 5, 0, 0, 4, ch115data };
static const unsigned char ch116data[] = {
0x30,0x40,0x40,0x40,0xe0,0x40
};
static const GLUTBitmapChar ch116 = { 4, 6, 0, 0, 4, ch116data };
static const unsigned char ch117data[] = {
0x68,0x90,0x90,0x90,0x90
};
static const GLUTBitmapChar ch117 = { 5, 5, 0, 0, 5, ch117data };
static const unsigned char ch118data[] = {
0x20,0x60,0x50,0x90,0xd8
};
static const GLUTBitmapChar ch118 = { 5, 5, 0, 0, 5, ch118data };
static const unsigned char ch119data[] = {
0x28,0x6c,0x54,0x92,0xdb
};
static const GLUTBitmapChar ch119 = { 8, 5, 0, 0, 8, ch119data };
static const unsigned char ch120data[] = {
0xd8,0x50,0x20,0x50,0xd8
};
static const GLUTBitmapChar ch120 = { 5, 5, 0, 0, 6, ch120data };
static const unsigned char ch121data[] = {
0x40,0x40,0x20,0x30,0x50,0x48,0xdc
};
static const GLUTBitmapChar ch121 = { 6, 7, 1, 2, 5, ch121data };
static const unsigned char ch122data[] = {
0xf0,0x90,0x40,0x20,0xf0
};
static const GLUTBitmapChar ch122 = { 4, 5, 0, 0, 5, ch122data };
static const unsigned char ch123data[] = {
0x20,0x40,0x40,0x40,0x80,0x40,0x40,0x40,0x20
};
static const GLUTBitmapChar ch123 = { 3, 9, 0, 2, 4, ch123data };
static const unsigned char ch124data[] = {
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80
};
static const GLUTBitmapChar ch124 = { 1, 9, 0, 2, 2, ch124data };
static const unsigned char ch125data[] = {
0x80,0x40,0x40,0x40,0x20,0x40,0x40,0x40,0x80
};
static const GLUTBitmapChar ch125 = { 3, 9, 0, 2, 4, ch125data };
static const unsigned char ch126data[] = {
0x98,0x64
};
static const GLUTBitmapChar ch126 = { 6, 2, 0, -2, 7, ch126data };
static const unsigned char ch160data[] = {
0x0
};
static const GLUTBitmapChar ch160 = { 1, 1, 0, 0, 2, ch160data };
static const unsigned char ch161data[] = {
0x80,0x80,0x80,0x80,0x80,0x0,0x80
};
static const GLUTBitmapChar ch161 = { 1, 7, -1, 2, 3, ch161data };
static const unsigned char ch162data[] = {
0x80,0xe0,0x90,0x80,0x90,0x70,0x10
};
static const GLUTBitmapChar ch162 = { 4, 7, 0, 1, 5, ch162data };
static const unsigned char ch163data[] = {
0xf0,0xc8,0x40,0xe0,0x40,0x50,0x30
};
static const GLUTBitmapChar ch163 = { 5, 7, 0, 0, 5, ch163data };
static const unsigned char ch164data[] = {
0x88,0x70,0x50,0x50,0x70,0x88
};
static const GLUTBitmapChar ch164 = { 5, 6, 0, -1, 5, ch164data };
static const unsigned char ch165data[] = {
0x70,0x20,0xf8,0x20,0xd8,0x50,0x88
};
static const GLUTBitmapChar ch165 = { 5, 7, 0, 0, 5, ch165data };
static const unsigned char ch166data[] = {
0x80,0x80,0x80,0x0,0x80,0x80,0x80
};
static const GLUTBitmapChar ch166 = { 1, 7, 0, 0, 2, ch166data };
static const unsigned char ch167data[] = {
0xe0,0x90,0x20,0x50,0x90,0xa0,0x40,0x90,0x70
};
static const GLUTBitmapChar ch167 = { 4, 9, 0, 1, 5, ch167data };
static const unsigned char ch168data[] = {
0xa0
};
static const GLUTBitmapChar ch168 = { 3, 1, -1, -6, 5, ch168data };
static const unsigned char ch169data[] = {
0x38,0x44,0x9a,0xa2,0x9a,0x44,0x38
};
static const GLUTBitmapChar ch169 = { 7, 7, -1, 0, 9, ch169data };
static const unsigned char ch170data[] = {
0xe0,0x0,0xa0,0x20,0xc0
};
static const GLUTBitmapChar ch170 = { 3, 5, 0, -2, 4, ch170data };
static const unsigned char ch171data[] = {
0x50,0xa0,0xa0,0x50
};
static const GLUTBitmapChar ch171 = { 4, 4, 0, -1, 5, ch171data };
static const unsigned char ch172data[] = {
0x8,0x8,0xf8
};
static const GLUTBitmapChar ch172 = { 5, 3, -1, -1, 7, ch172data };
static const unsigned char ch173data[] = {
0xe0
};
static const GLUTBitmapChar ch173 = { 3, 1, 0, -2, 4, ch173data };
static const unsigned char ch174data[] = {
0x38,0x44,0xaa,0xb2,0xba,0x44,0x38
};
static const GLUTBitmapChar ch174 = { 7, 7, -1, 0, 9, ch174data };
static const unsigned char ch175data[] = {
0xe0
};
static const GLUTBitmapChar ch175 = { 3, 1, 0, -6, 4, ch175data };
static const unsigned char ch176data[] = {
0x60,0x90,0x90,0x60
};
static const GLUTBitmapChar ch176 = { 4, 4, 0, -3, 4, ch176data };
static const unsigned char ch177data[] = {
0xf8,0x0,0x20,0x20,0xf8,0x20,0x20
};
static const GLUTBitmapChar ch177 = { 5, 7, 0, 0, 6, ch177data };
static const unsigned char ch178data[] = {
0xe0,0x40,0xa0,0x60
};
static const GLUTBitmapChar ch178 = { 3, 4, 0, -3, 3, ch178data };
static const unsigned char ch179data[] = {
0xc0,0x20,0x40,0xe0
};
static const GLUTBitmapChar ch179 = { 3, 4, 0, -3, 3, ch179data };
static const unsigned char ch180data[] = {
0x80,0x40
};
static const GLUTBitmapChar ch180 = { 2, 2, 0, -5, 3, ch180data };
static const unsigned char ch181data[] = {
0x80,0x80,0xe8,0x90,0x90,0x90,0x90
};
static const GLUTBitmapChar ch181 = { 5, 7, 0, 2, 5, ch181data };
static const unsigned char ch182data[] = {
0x28,0x28,0x28,0x28,0x68,0xe8,0xe8,0xe8,0x7c
};
static const GLUTBitmapChar ch182 = { 6, 9, 0, 2, 6, ch182data };
static const unsigned char ch183data[] = {
0x80
};
static const GLUTBitmapChar ch183 = { 1, 1, 0, -2, 2, ch183data };
static const unsigned char ch184data[] = {
0xc0,0x20,0x40
};
static const GLUTBitmapChar ch184 = { 3, 3, 0, 3, 4, ch184data };
static const unsigned char ch185data[] = {
0xe0,0x40,0xc0,0x40
};
static const GLUTBitmapChar ch185 = { 3, 4, 0, -3, 3, ch185data };
static const unsigned char ch186data[] = {
0xe0,0x0,0x40,0xa0,0x40
};
static const GLUTBitmapChar ch186 = { 3, 5, 0, -2, 4, ch186data };
static const unsigned char ch187data[] = {
0xa0,0x50,0x50,0xa0
};
static const GLUTBitmapChar ch187 = { 4, 4, 0, -1, 5, ch187data };
static const unsigned char ch188data[] = {
0x44,0x3e,0x2c,0xf4,0x48,0xc8,0x44
};
static const GLUTBitmapChar ch188 = { 7, 7, 0, 0, 8, ch188data };
static const unsigned char ch189data[] = {
0x4e,0x24,0x2a,0xf6,0x48,0xc8,0x44
};
static const GLUTBitmapChar ch189 = { 7, 7, 0, 0, 8, ch189data };
static const unsigned char ch190data[] = {
0x44,0x3e,0x2c,0xd4,0x28,0x48,0xe4
};
static const GLUTBitmapChar ch190 = { 7, 7, 0, 0, 8, ch190data };
static const unsigned char ch191data[] = {
0xe0,0xa0,0x80,0x40,0x40,0x0,0x40
};
static const GLUTBitmapChar ch191 = { 3, 7, 0, 2, 4, ch191data };
static const unsigned char ch192data[] = {
0xee,0x44,0x7c,0x28,0x28,0x38,0x10,0x0,0x10,0x20
};
static const GLUTBitmapChar ch192 = { 7, 10, 0, 0, 8, ch192data };
static const unsigned char ch193data[] = {
0xee,0x44,0x7c,0x28,0x28,0x38,0x10,0x0,0x10,0x8
};
static const GLUTBitmapChar ch193 = { 7, 10, 0, 0, 8, ch193data };
static const unsigned char ch194data[] = {
0xee,0x44,0x7c,0x28,0x28,0x38,0x10,0x0,0x28,0x10
};
static const GLUTBitmapChar ch194 = { 7, 10, 0, 0, 8, ch194data };
static const unsigned char ch195data[] = {
0xee,0x44,0x7c,0x28,0x28,0x38,0x10,0x0,0x28,0x14
};
static const GLUTBitmapChar ch195 = { 7, 10, 0, 0, 8, ch195data };
static const unsigned char ch196data[] = {
0xee,0x44,0x7c,0x28,0x28,0x38,0x10,0x0,0x28
};
static const GLUTBitmapChar ch196 = { 7, 9, 0, 0, 8, ch196data };
static const unsigned char ch197data[] = {
0xee,0x44,0x7c,0x28,0x28,0x38,0x10,0x10,0x28,0x10
};
static const GLUTBitmapChar ch197 = { 7, 10, 0, 0, 8, ch197data };
static const unsigned char ch198data[] = {
0xef,0x49,0x78,0x2e,0x28,0x39,0x1f
};
static const GLUTBitmapChar ch198 = { 8, 7, 0, 0, 9, ch198data };
static const unsigned char ch199data[] = {
0x60,0x10,0x20,0x78,0xc4,0x80,0x80,0x80,0xc4,0x7c
};
static const GLUTBitmapChar ch199 = { 6, 10, 0, 3, 7, ch199data };
static const unsigned char ch200data[] = {
0xf8,0x48,0x40,0x70,0x40,0x48,0xf8,0x0,0x20,0x40
};
static const GLUTBitmapChar ch200 = { 5, 10, 0, 0, 6, ch200data };
static const unsigned char ch201data[] = {
0xf8,0x48,0x40,0x70,0x40,0x48,0xf8,0x0,0x20,0x10
};
static const GLUTBitmapChar ch201 = { 5, 10, 0, 0, 6, ch201data };
static const unsigned char ch202data[] = {
0xf8,0x48,0x40,0x70,0x40,0x48,0xf8,0x0,0x50,0x20
};
static const GLUTBitmapChar ch202 = { 5, 10, 0, 0, 6, ch202data };
static const unsigned char ch203data[] = {
0xf8,0x48,0x40,0x70,0x40,0x48,0xf8,0x0,0x50
};
static const GLUTBitmapChar ch203 = { 5, 9, 0, 0, 6, ch203data };
static const unsigned char ch204data[] = {
0xe0,0x40,0x40,0x40,0x40,0x40,0xe0,0x0,0x40,0x80
};
static const GLUTBitmapChar ch204 = { 3, 10, 0, 0, 4, ch204data };
static const unsigned char ch205data[] = {
0xe0,0x40,0x40,0x40,0x40,0x40,0xe0,0x0,0x40,0x20
};
static const GLUTBitmapChar ch205 = { 3, 10, 0, 0, 4, ch205data };
static const unsigned char ch206data[] = {
0xe0,0x40,0x40,0x40,0x40,0x40,0xe0,0x0,0xa0,0x40
};
static const GLUTBitmapChar ch206 = { 3, 10, 0, 0, 4, ch206data };
static const unsigned char ch207data[] = {
0xe0,0x40,0x40,0x40,0x40,0x40,0xe0,0x0,0xa0
};
static const GLUTBitmapChar ch207 = { 3, 9, 0, 0, 4, ch207data };
static const unsigned char ch208data[] = {
0xf8,0x4c,0x44,0xe4,0x44,0x4c,0xf8
};
static const GLUTBitmapChar ch208 = { 6, 7, 0, 0, 7, ch208data };
static const unsigned char ch209data[] = {
0xe4,0x4c,0x4c,0x54,0x54,0x64,0xee,0x0,0x50,0x28
};
static const GLUTBitmapChar ch209 = { 7, 10, 0, 0, 8, ch209data };
static const unsigned char ch210data[] = {
0x78,0xcc,0x84,0x84,0x84,0xcc,0x78,0x0,0x20,0x40
};
static const GLUTBitmapChar ch210 = { 6, 10, 0, 0, 7, ch210data };
static const unsigned char ch211data[] = {
0x78,0xcc,0x84,0x84,0x84,0xcc,0x78,0x0,0x10,0x8
};
static const GLUTBitmapChar ch211 = { 6, 10, 0, 0, 7, ch211data };
static const unsigned char ch212data[] = {
0x78,0xcc,0x84,0x84,0x84,0xcc,0x78,0x0,0x50,0x20
};
static const GLUTBitmapChar ch212 = { 6, 10, 0, 0, 7, ch212data };
static const unsigned char ch213data[] = {
0x78,0xcc,0x84,0x84,0x84,0xcc,0x78,0x0,0x50,0x28
};
static const GLUTBitmapChar ch213 = { 6, 10, 0, 0, 7, ch213data };
static const unsigned char ch214data[] = {
0x78,0xcc,0x84,0x84,0x84,0xcc,0x78,0x0,0x50
};
static const GLUTBitmapChar ch214 = { 6, 9, 0, 0, 7, ch214data };
static const unsigned char ch215data[] = {
0x88,0x50,0x20,0x50,0x88
};
static const GLUTBitmapChar ch215 = { 5, 5, 0, 0, 6, ch215data };
static const unsigned char ch216data[] = {
0x80,0x7c,0x66,0x52,0x52,0x4a,0x66,0x3e,0x1
};
static const GLUTBitmapChar ch216 = { 8, 9, 0, 1, 8, ch216data };
static const unsigned char ch217data[] = {
0x38,0x6c,0x44,0x44,0x44,0x44,0xee,0x0,0x10,0x20
};
static const GLUTBitmapChar ch217 = { 7, 10, 0, 0, 8, ch217data };
static const unsigned char ch218data[] = {
0x38,0x6c,0x44,0x44,0x44,0x44,0xee,0x0,0x10,0x8
};
static const GLUTBitmapChar ch218 = { 7, 10, 0, 0, 8, ch218data };
static const unsigned char ch219data[] = {
0x38,0x6c,0x44,0x44,0x44,0x44,0xee,0x0,0x28,0x10
};
static const GLUTBitmapChar ch219 = { 7, 10, 0, 0, 8, ch219data };
static const unsigned char ch220data[] = {
0x38,0x6c,0x44,0x44,0x44,0x44,0xee,0x0,0x28
};
static const GLUTBitmapChar ch220 = { 7, 9, 0, 0, 8, ch220data };
static const unsigned char ch221data[] = {
0x38,0x10,0x10,0x28,0x28,0x44,0xee,0x0,0x10,0x8
};
static const GLUTBitmapChar ch221 = { 7, 10, 0, 0, 8, ch221data };
static const unsigned char ch222data[] = {
0xe0,0x40,0x70,0x48,0x70,0x40,0xe0
};
static const GLUTBitmapChar ch222 = { 5, 7, 0, 0, 6, ch222data };
static const unsigned char ch223data[] = {
0xe0,0x50,0x50,0x60,0x50,0x50,0x20
};
static const GLUTBitmapChar ch223 = { 4, 7, 0, 0, 5, ch223data };
static const unsigned char ch224data[] = {
0xe0,0xa0,0x60,0x20,0xc0,0x0,0x40,0x80
};
static const GLUTBitmapChar ch224 = { 3, 8, 0, 0, 4, ch224data };
static const unsigned char ch225data[] = {
0xe0,0xa0,0x60,0x20,0xc0,0x0,0x40,0x20
};
static const GLUTBitmapChar ch225 = { 3, 8, 0, 0, 4, ch225data };
static const unsigned char ch226data[] = {
0xe0,0xa0,0x60,0x20,0xc0,0x0,0xa0,0x40
};
static const GLUTBitmapChar ch226 = { 3, 8, 0, 0, 4, ch226data };
static const unsigned char ch227data[] = {
0xe0,0xa0,0x60,0x20,0xc0,0x0,0xa0,0x50
};
static const GLUTBitmapChar ch227 = { 4, 8, 0, 0, 4, ch227data };
static const unsigned char ch228data[] = {
0xe0,0xa0,0x60,0x20,0xc0,0x0,0xa0
};
static const GLUTBitmapChar ch228 = { 3, 7, 0, 0, 4, ch228data };
static const unsigned char ch229data[] = {
0xe0,0xa0,0x60,0x20,0xc0,0x40,0xa0,0x40
};
static const GLUTBitmapChar ch229 = { 3, 8, 0, 0, 4, ch229data };
static const unsigned char ch230data[] = {
0xd8,0xa0,0x70,0x28,0xd8
};
static const GLUTBitmapChar ch230 = { 5, 5, 0, 0, 6, ch230data };
static const unsigned char ch231data[] = {
0xc0,0x20,0x40,0x60,0x80,0x80,0x80,0x60
};
static const GLUTBitmapChar ch231 = { 3, 8, 0, 3, 4, ch231data };
static const unsigned char ch232data[] = {
0x60,0x80,0xc0,0xa0,0x60,0x0,0x40,0x80
};
static const GLUTBitmapChar ch232 = { 3, 8, 0, 0, 4, ch232data };
static const unsigned char ch233data[] = {
0x60,0x80,0xc0,0xa0,0x60,0x0,0x40,0x20
};
static const GLUTBitmapChar ch233 = { 3, 8, 0, 0, 4, ch233data };
static const unsigned char ch234data[] = {
0x60,0x80,0xc0,0xa0,0x60,0x0,0xa0,0x40
};
static const GLUTBitmapChar ch234 = { 3, 8, 0, 0, 4, ch234data };
static const unsigned char ch235data[] = {
0x60,0x80,0xc0,0xa0,0x60,0x0,0xa0
};
static const GLUTBitmapChar ch235 = { 3, 7, 0, 0, 4, ch235data };
static const unsigned char ch236data[] = {
0xe0,0x40,0x40,0x40,0xc0,0x0,0x40,0x80
};
static const GLUTBitmapChar ch236 = { 3, 8, 0, 0, 4, ch236data };
static const unsigned char ch237data[] = {
0xe0,0x40,0x40,0x40,0xc0,0x0,0x40,0x20
};
static const GLUTBitmapChar ch237 = { 3, 8, 0, 0, 4, ch237data };
static const unsigned char ch238data[] = {
0xe0,0x40,0x40,0x40,0xc0,0x0,0xa0,0x40
};
static const GLUTBitmapChar ch238 = { 3, 8, 0, 0, 4, ch238data };
static const unsigned char ch239data[] = {
0xe0,0x40,0x40,0x40,0xc0,0x0,0xa0
};
static const GLUTBitmapChar ch239 = { 3, 7, 0, 0, 4, ch239data };
static const unsigned char ch240data[] = {
0x60,0x90,0x90,0x90,0x70,0xa0,0x70,0x40
};
static const GLUTBitmapChar ch240 = { 4, 8, 0, 0, 5, ch240data };
static const unsigned char ch241data[] = {
0xd8,0x90,0x90,0x90,0xe0,0x0,0xa0,0x50
};
static const GLUTBitmapChar ch241 = { 5, 8, 0, 0, 5, ch241data };
static const unsigned char ch242data[] = {
0x60,0x90,0x90,0x90,0x60,0x0,0x20,0x40
};
static const GLUTBitmapChar ch242 = { 4, 8, 0, 0, 5, ch242data };
static const unsigned char ch243data[] = {
0x60,0x90,0x90,0x90,0x60,0x0,0x40,0x20
};
static const GLUTBitmapChar ch243 = { 4, 8, 0, 0, 5, ch243data };
static const unsigned char ch244data[] = {
0x60,0x90,0x90,0x90,0x60,0x0,0xa0,0x40
};
static const GLUTBitmapChar ch244 = { 4, 8, 0, 0, 5, ch244data };
static const unsigned char ch245data[] = {
0x60,0x90,0x90,0x90,0x60,0x0,0xa0,0x50
};
static const GLUTBitmapChar ch245 = { 4, 8, 0, 0, 5, ch245data };
static const unsigned char ch246data[] = {
0x60,0x90,0x90,0x90,0x60,0x0,0xa0
};
static const GLUTBitmapChar ch246 = { 4, 7, 0, 0, 5, ch246data };
static const unsigned char ch247data[] = {
0x20,0x0,0xf8,0x0,0x20
};
static const GLUTBitmapChar ch247 = { 5, 5, 0, 0, 6, ch247data };
static const unsigned char ch248data[] = {
0x80,0x70,0x48,0x48,0x48,0x38,0x4
};
static const GLUTBitmapChar ch248 = { 6, 7, 1, 1, 5, ch248data };
static const unsigned char ch249data[] = {
0x68,0x90,0x90,0x90,0x90,0x0,0x20,0x40
};
static const GLUTBitmapChar ch249 = { 5, 8, 0, 0, 5, ch249data };
static const unsigned char ch250data[] = {
0x68,0x90,0x90,0x90,0x90,0x0,0x40,0x20
};
static const GLUTBitmapChar ch250 = { 5, 8, 0, 0, 5, ch250data };
static const unsigned char ch251data[] = {
0x68,0x90,0x90,0x90,0x90,0x0,0x50,0x20
};
static const GLUTBitmapChar ch251 = { 5, 8, 0, 0, 5, ch251data };
static const unsigned char ch252data[] = {
0x68,0x90,0x90,0x90,0x90,0x0,0x50
};
static const GLUTBitmapChar ch252 = { 5, 7, 0, 0, 5, ch252data };
static const unsigned char ch253data[] = {
0x80,0xc0,0x40,0x60,0xa0,0x90,0xb8,0x0,0x20,0x10
};
static const GLUTBitmapChar ch253 = { 5, 10, 0, 2, 5, ch253data };
static const unsigned char ch254data[] = {
0xc0,0x80,0xe0,0x90,0x90,0x90,0xe0,0x80,0x80
};
static const GLUTBitmapChar ch254 = { 4, 9, 0, 2, 5, ch254data };
static const unsigned char ch255data[] = {
0x80,0xc0,0x40,0x60,0xa0,0x90,0xb8,0x0,0xa0
};
static const GLUTBitmapChar ch255 = { 5, 9, 0, 2, 5, ch255data };
static const GLUTBitmapChar *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, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
&ch160, &ch161, &ch162, &ch163, &ch164, &ch165, &ch166, &ch167,
&ch168, &ch169, &ch170, &ch171, &ch172, &ch173, &ch174, &ch175,
&ch176, &ch177, &ch178, &ch179, &ch180, &ch181, &ch182, &ch183,
&ch184, &ch185, &ch186, &ch187, &ch188, &ch189, &ch190, &ch191,
&ch192, &ch193, &ch194, &ch195, &ch196, &ch197, &ch198, &ch199,
&ch200, &ch201, &ch202, &ch203, &ch204, &ch205, &ch206, &ch207,
&ch208, &ch209, &ch210, &ch211, &ch212, &ch213, &ch214, &ch215,
&ch216, &ch217, &ch218, &ch219, &ch220, &ch221, &ch222, &ch223,
&ch224, &ch225, &ch226, &ch227, &ch228, &ch229, &ch230, &ch231,
&ch232, &ch233, &ch234, &ch235, &ch236, &ch237, &ch238, &ch239,
&ch240, &ch241, &ch242, &ch243, &ch244, &ch245, &ch246, &ch247,
&ch248, &ch249, &ch250, &ch251, &ch252, &ch253, &ch254, &ch255
};
const GLUTBitmapFont glutBitmapTimesRoman10 = {
"-Adobe-Times-Medium-R-Normal--10-100-75-75-P-54-ISO8859-1",
13, 256, chars
};
/* autogenerated by bdf2c! do not edit */
/* "Copyright (c) 1984, 1987 Adobe Systems Incorporated. All Rights Reserved. Copyright (c) 1988, 1991 Digital Equipment Corporation. All Rights Reserved." */
#include "internal.h"
/*
typedef struct {
int width, height;
int xorig, yorig;
int xmove;
const unsigned char *bitmap;
} GLUTBitmapChar;
typedef struct {
const char *name;
int height;
int num;
const GLUTBitmapChar *const *table;
} GLUTBitmapFont;
*/
static const unsigned char ch32data[] = {
0x0
};
static const GLUTBitmapChar ch32 = { 1, 1, 0, 0, 6, ch32data };
static const unsigned char ch33data[] = {
0xc0,0xc0,0x0,0x0,0x0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
0xc0
};
static const GLUTBitmapChar ch33 = { 2, 17, -3, 0, 8, ch33data };
static const unsigned char ch34data[] = {
0x88,0xcc,0xcc,0xcc,0xcc
};
static const GLUTBitmapChar ch34 = { 6, 5, -1, -12, 10, ch34data };
static const unsigned char ch35data[] = {
0x22,0x0,0x22,0x0,0x22,0x0,0x22,0x0,0x22,0x0,0xff,0xc0,0xff,0xc0,0x11,0x0,
0x11,0x0,0x11,0x0,0x7f,0xe0,0x7f,0xe0,0x8,0x80,0x8,0x80,0x8,0x80,0x8,0x80,
0x8,0x80
};
static const GLUTBitmapChar ch35 = { 11, 17, -1, 0, 13, ch35data };
static const unsigned char ch36data[] = {
0x4,0x0,0x4,0x0,0x3f,0x0,0xe5,0xc0,0xc4,0xc0,0x84,0x60,0x84,0x60,0x4,0x60,
0x4,0xe0,0x7,0xc0,0x7,0x80,0x1e,0x0,0x3c,0x0,0x74,0x0,0x64,0x0,0x64,0x20,
0x64,0x60,0x34,0xe0,0x1f,0x80,0x4,0x0,0x4,0x0
};
static const GLUTBitmapChar ch36 = { 11, 21, 0, 2, 12, ch36data };
static const unsigned char ch37data[] = {
0x30,0x3c,0x0,0x18,0x72,0x0,0xc,0x61,0x0,0x4,0x60,0x80,0x6,0x60,0x80,0x3,
0x30,0x80,0x1,0x19,0x80,0x1,0x8f,0x0,0x78,0xc0,0x0,0xe4,0x40,0x0,0xc2,0x60,
0x0,0xc1,0x30,0x0,0xc1,0x10,0x0,0x61,0x18,0x0,0x33,0xfc,0x0,0x1e,0xc,0x0
};
static const GLUTBitmapChar ch37 = { 17, 16, -1, 0, 19, ch37data };
static const unsigned char ch38data[] = {
0x3c,0x3c,0x7f,0x7e,0xe1,0xe1,0xc0,0xc0,0xc1,0xc0,0xc1,0xa0,0x63,0x20,0x37,0x10,
0x1e,0x18,0xe,0x3e,0xf,0x0,0x1d,0x80,0x18,0xc0,0x18,0x40,0x18,0x40,0xc,0xc0,
0x7,0x80
};
static const GLUTBitmapChar ch38 = { 16, 17, -1, 0, 18, ch38data };
static const unsigned char ch39data[] = {
0xc0,0x60,0x20,0xe0,0xc0
};
static const GLUTBitmapChar ch39 = { 3, 5, -3, -12, 8, ch39data };
static const unsigned char ch40data[] = {
0x4,0x8,0x10,0x30,0x20,0x60,0x60,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x60,
0x60,0x20,0x30,0x10,0x8,0x4
};
static const GLUTBitmapChar ch40 = { 6, 22, -1, 5, 8, ch40data };
static const unsigned char ch41data[] = {
0x80,0x40,0x20,0x30,0x10,0x18,0x18,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0x18,
0x18,0x10,0x30,0x20,0x40,0x80
};
static const GLUTBitmapChar ch41 = { 6, 22, -1, 5, 8, ch41data };
static const unsigned char ch42data[] = {
0x8,0x0,0x1c,0x0,0xc9,0x80,0xeb,0x80,0x1c,0x0,0xeb,0x80,0xc9,0x80,0x1c,0x0,
0x8,0x0
};
static const GLUTBitmapChar ch42 = { 9, 9, -2, -8, 12, ch42data };
static const unsigned char ch43data[] = {
0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0xff,0xf0,0xff,0xf0,0x6,0x0,
0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0
};
static const GLUTBitmapChar ch43 = { 12, 12, -1, -1, 14, ch43data };
static const unsigned char ch44data[] = {
0xc0,0x60,0x20,0xe0,0xc0
};
static const GLUTBitmapChar ch44 = { 3, 5, -2, 3, 7, ch44data };
static const unsigned char ch45data[] = {
0xff,0xf0,0xff,0xf0
};
static const GLUTBitmapChar ch45 = { 12, 2, -1, -6, 14, ch45data };
static const unsigned char ch46data[] = {
0xc0,0xc0
};
static const GLUTBitmapChar ch46 = { 2, 2, -2, 0, 6, ch46data };
static const unsigned char ch47data[] = {
0xc0,0xc0,0xc0,0x60,0x60,0x20,0x30,0x30,0x10,0x18,0x18,0x8,0xc,0xc,0x4,0x6,
0x6,0x3,0x3,0x3
};
static const GLUTBitmapChar ch47 = { 8, 20, 1, 3, 7, ch47data };
static const unsigned char ch48data[] = {
0x1e,0x0,0x33,0x0,0x61,0x80,0x61,0x80,0xe1,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x61,0x80,0x61,0x80,0x33,0x0,
0x1e,0x0
};
static const GLUTBitmapChar ch48 = { 10, 17, -1, 0, 12, ch48data };
static const unsigned char ch49data[] = {
0xff,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x78,0x18,
0x8
};
static const GLUTBitmapChar ch49 = { 8, 17, -2, 0, 12, ch49data };
static const unsigned char ch50data[] = {
0xff,0x80,0xff,0xc0,0x60,0x40,0x30,0x0,0x18,0x0,0xc,0x0,0x4,0x0,0x6,0x0,
0x3,0x0,0x3,0x0,0x1,0x80,0x1,0x80,0x81,0x80,0x81,0x80,0x43,0x80,0x7f,0x0,
0x1c,0x0
};
static const GLUTBitmapChar ch50 = { 10, 17, -1, 0, 12, ch50data };
static const unsigned char ch51data[] = {
0x78,0x0,0xe6,0x0,0xc3,0x0,0x1,0x0,0x1,0x80,0x1,0x80,0x1,0x80,0x3,0x80,
0x7,0x0,0x1e,0x0,0xc,0x0,0x6,0x0,0x83,0x0,0x83,0x0,0x47,0x0,0x7e,0x0,
0x1c,0x0
};
static const GLUTBitmapChar ch51 = { 9, 17, -1, 0, 12, ch51data };
static const unsigned char ch52data[] = {
0x3,0x0,0x3,0x0,0x3,0x0,0x3,0x0,0xff,0xc0,0xff,0xc0,0xc3,0x0,0x43,0x0,
0x63,0x0,0x23,0x0,0x33,0x0,0x13,0x0,0x1b,0x0,0xb,0x0,0x7,0x0,0x7,0x0,
0x3,0x0
};
static const GLUTBitmapChar ch52 = { 10, 17, -1, 0, 12, ch52data };
static const unsigned char ch53data[] = {
0x7e,0x0,0xe3,0x80,0xc1,0x80,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x1,0xc0,
0x3,0x80,0xf,0x80,0x7e,0x0,0x78,0x0,0x60,0x0,0x20,0x0,0x20,0x0,0x1f,0x80,
0x1f,0xc0
};
static const GLUTBitmapChar ch53 = { 10, 17, -1, 0, 12, ch53data };
static const unsigned char ch54data[] = {
0x1e,0x0,0x7b,0x80,0x61,0x80,0xe0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
0xc1,0x80,0xf3,0x80,0xee,0x0,0x60,0x0,0x70,0x0,0x30,0x0,0x18,0x0,0xe,0x0,
0x3,0xc0
};
static const GLUTBitmapChar ch54 = { 10, 17, -1, 0, 12, ch54data };
static const unsigned char ch55data[] = {
0x18,0x0,0x18,0x0,0xc,0x0,0xc,0x0,0xc,0x0,0x4,0x0,0x6,0x0,0x6,0x0,
0x2,0x0,0x3,0x0,0x3,0x0,0x1,0x0,0x1,0x80,0x81,0x80,0xc0,0xc0,0xff,0xc0,
0x7f,0xc0
};
static const GLUTBitmapChar ch55 = { 10, 17, -1, 0, 12, ch55data };
static const unsigned char ch56data[] = {
0x1e,0x0,0x73,0x80,0xe1,0x80,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x41,0xc0,0x61,0x80,
0x37,0x0,0x1e,0x0,0x1e,0x0,0x33,0x0,0x61,0x80,0x61,0x80,0x61,0x80,0x33,0x0,
0x1e,0x0
};
static const GLUTBitmapChar ch56 = { 10, 17, -1, 0, 12, ch56data };
static const unsigned char ch57data[] = {
0xf0,0x0,0x1c,0x0,0x6,0x0,0x3,0x0,0x3,0x80,0x1,0x80,0x1d,0x80,0x73,0xc0,
0x61,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc1,0xc0,0x61,0x80,0x77,0x80,
0x1e,0x0
};
static const GLUTBitmapChar ch57 = { 10, 17, -1, 0, 12, ch57data };
static const unsigned char ch58data[] = {
0xc0,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0xc0
};
static const GLUTBitmapChar ch58 = { 2, 11, -2, 0, 6, ch58data };
static const unsigned char ch59data[] = {
0xc0,0x60,0x20,0xe0,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0xc0
};
static const GLUTBitmapChar ch59 = { 3, 14, -2, 3, 7, ch59data };
static const unsigned char ch60data[] = {
0x0,0x60,0x1,0xc0,0x7,0x0,0x1c,0x0,0x70,0x0,0xc0,0x0,0x70,0x0,0x1c,0x0,
0x7,0x0,0x1,0xc0,0x0,0x60
};
static const GLUTBitmapChar ch60 = { 11, 11, -1, -1, 13, ch60data };
static const unsigned char ch61data[] = {
0xff,0xf0,0xff,0xf0,0x0,0x0,0x0,0x0,0xff,0xf0,0xff,0xf0
};
static const GLUTBitmapChar ch61 = { 12, 6, -1, -4, 14, ch61data };
static const unsigned char ch62data[] = {
0xc0,0x0,0x70,0x0,0x1c,0x0,0x7,0x0,0x1,0xc0,0x0,0x60,0x1,0xc0,0x7,0x0,
0x1c,0x0,0x70,0x0,0xc0,0x0
};
static const GLUTBitmapChar ch62 = { 11, 11, -1, -1, 13, ch62data };
static const unsigned char ch63data[] = {
0x30,0x30,0x0,0x0,0x10,0x10,0x10,0x18,0x18,0xc,0xe,0x7,0xc3,0xc3,0x83,0xc6,
0x7c
};
static const GLUTBitmapChar ch63 = { 8, 17, -2, 0, 11, ch63data };
static const unsigned char ch64data[] = {
0x3,0xf0,0x0,0xe,0xc,0x0,0x18,0x0,0x0,0x30,0x0,0x0,0x61,0xde,0x0,0x63,
0x7b,0x0,0xc6,0x39,0x80,0xc6,0x18,0x80,0xc6,0x18,0xc0,0xc6,0x18,0x40,0xc6,0xc,
0x40,0xc3,0xc,0x40,0xc3,0x8c,0x40,0xe1,0xfc,0x40,0x60,0xec,0xc0,0x70,0x0,0x80,
0x38,0x1,0x80,0x1c,0x3,0x0,0xf,0xe,0x0,0x3,0xf8,0x0
};
static const GLUTBitmapChar ch64 = { 18, 20, -2, 3, 22, ch64data };
static const unsigned char ch65data[] = {
0xfc,0x1f,0x80,0x30,0x6,0x0,0x10,0x6,0x0,0x10,0xc,0x0,0x18,0xc,0x0,0x8,
0xc,0x0,0xf,0xf8,0x0,0xc,0x18,0x0,0x4,0x18,0x0,0x4,0x30,0x0,0x6,0x30,
0x0,0x2,0x30,0x0,0x2,0x60,0x0,0x1,0x60,0x0,0x1,0xc0,0x0,0x1,0xc0,0x0,
0x0,0x80,0x0
};
static const GLUTBitmapChar ch65 = { 17, 17, 0, 0, 17, ch65data };
static const unsigned char ch66data[] = {
0xff,0xe0,0x30,0x78,0x30,0x18,0x30,0xc,0x30,0xc,0x30,0xc,0x30,0x18,0x30,0x38,
0x3f,0xe0,0x30,0x40,0x30,0x30,0x30,0x18,0x30,0x18,0x30,0x18,0x30,0x30,0x30,0x70,
0xff,0xc0
};
static const GLUTBitmapChar ch66 = { 14, 17, -1, 0, 16, ch66data };
static const unsigned char ch67data[] = {
0x7,0xe0,0x1e,0x38,0x38,0x8,0x60,0x4,0x60,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,
0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0x60,0x4,0x60,0x4,0x38,0xc,0x1c,0x3c,
0x7,0xe4
};
static const GLUTBitmapChar ch67 = { 14, 17, -1, 0, 16, ch67data };
static const unsigned char ch68data[] = {
0xff,0xc0,0x30,0x70,0x30,0x38,0x30,0xc,0x30,0xc,0x30,0x6,0x30,0x6,0x30,0x6,
0x30,0x6,0x30,0x6,0x30,0x6,0x30,0x6,0x30,0xc,0x30,0xc,0x30,0x38,0x30,0x70,
0xff,0xc0
};
static const GLUTBitmapChar ch68 = { 15, 17, -1, 0, 17, ch68data };
static const unsigned char ch69data[] = {
0xff,0xf8,0x30,0x18,0x30,0x8,0x30,0x8,0x30,0x0,0x30,0x0,0x30,0x40,0x30,0x40,
0x3f,0xc0,0x30,0x40,0x30,0x40,0x30,0x0,0x30,0x0,0x30,0x10,0x30,0x10,0x30,0x30,
0xff,0xf0
};
static const GLUTBitmapChar ch69 = { 13, 17, -1, 0, 15, ch69data };
static const unsigned char ch70data[] = {
0xfc,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x20,0x30,0x20,
0x3f,0xe0,0x30,0x20,0x30,0x20,0x30,0x0,0x30,0x0,0x30,0x10,0x30,0x10,0x30,0x30,
0xff,0xf0
};
static const GLUTBitmapChar ch70 = { 12, 17, -1, 0, 14, ch70data };
static const unsigned char ch71data[] = {
0x7,0xe0,0x1e,0x38,0x38,0x1c,0x60,0xc,0x60,0xc,0xc0,0xc,0xc0,0xc,0xc0,0x3f,
0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0x60,0x4,0x60,0x4,0x38,0xc,0x1c,0x3c,
0x7,0xe4
};
static const GLUTBitmapChar ch71 = { 16, 17, -1, 0, 18, ch71data };
static const unsigned char ch72data[] = {
0xfc,0x1f,0x80,0x30,0x6,0x0,0x30,0x6,0x0,0x30,0x6,0x0,0x30,0x6,0x0,0x30,
0x6,0x0,0x30,0x6,0x0,0x30,0x6,0x0,0x3f,0xfe,0x0,0x30,0x6,0x0,0x30,0x6,
0x0,0x30,0x6,0x0,0x30,0x6,0x0,0x30,0x6,0x0,0x30,0x6,0x0,0x30,0x6,0x0,
0xfc,0x1f,0x80
};
static const GLUTBitmapChar ch72 = { 17, 17, -1, 0, 19, ch72data };
static const unsigned char ch73data[] = {
0xfc,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
0xfc
};
static const GLUTBitmapChar ch73 = { 6, 17, -1, 0, 8, ch73data };
static const unsigned char ch74data[] = {
0x78,0x0,0xcc,0x0,0xc6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,
0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,
0x1f,0x80
};
static const GLUTBitmapChar ch74 = { 9, 17, -1, 0, 11, ch74data };
static const unsigned char ch75data[] = {
0xfc,0x1f,0x30,0xe,0x30,0x1c,0x30,0x38,0x30,0x70,0x30,0xe0,0x31,0xc0,0x33,0x80,
0x3f,0x0,0x3e,0x0,0x33,0x0,0x31,0x80,0x30,0xc0,0x30,0x60,0x30,0x30,0x30,0x18,
0xfc,0x7e
};
static const GLUTBitmapChar ch75 = { 16, 17, -1, 0, 17, ch75data };
static const unsigned char ch76data[] = {
0xff,0xf8,0x30,0x18,0x30,0x8,0x30,0x8,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,
0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,
0xfc,0x0
};
static const GLUTBitmapChar ch76 = { 13, 17, -1, 0, 14, ch76data };
static const unsigned char ch77data[] = {
0xf8,0x21,0xf8,0x20,0x60,0x60,0x20,0x60,0x60,0x20,0xd0,0x60,0x20,0xd0,0x60,0x21,
0x88,0x60,0x21,0x88,0x60,0x23,0x8,0x60,0x23,0x4,0x60,0x26,0x4,0x60,0x26,0x2,
0x60,0x2c,0x2,0x60,0x2c,0x2,0x60,0x38,0x1,0x60,0x38,0x1,0x60,0x30,0x0,0xe0,
0xf0,0x0,0xf8
};
static const GLUTBitmapChar ch77 = { 21, 17, -1, 0, 22, ch77data };
static const unsigned char ch78data[] = {
0xf8,0xc,0x20,0x1c,0x20,0x1c,0x20,0x34,0x20,0x64,0x20,0x64,0x20,0xc4,0x21,0x84,
0x21,0x84,0x23,0x4,0x26,0x4,0x26,0x4,0x2c,0x4,0x38,0x4,0x38,0x4,0x30,0x4,
0xf0,0x1f
};
static const GLUTBitmapChar ch78 = { 16, 17, -1, 0, 18, ch78data };
static const unsigned char ch79data[] = {
0x7,0xe0,0x1c,0x38,0x38,0x1c,0x60,0x6,0x60,0x6,0xc0,0x3,0xc0,0x3,0xc0,0x3,
0xc0,0x3,0xc0,0x3,0xc0,0x3,0xc0,0x3,0x60,0x6,0x60,0x6,0x38,0x1c,0x1c,0x38,
0x7,0xe0
};
static const GLUTBitmapChar ch79 = { 16, 17, -1, 0, 18, ch79data };
static const unsigned char ch80data[] = {
0xfc,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,
0x3f,0xc0,0x30,0x70,0x30,0x30,0x30,0x18,0x30,0x18,0x30,0x18,0x30,0x30,0x30,0x70,
0xff,0xc0
};
static const GLUTBitmapChar ch80 = { 13, 17, -1, 0, 15, ch80data };
static const unsigned char ch81data[] = {
0x0,0xf,0x0,0x38,0x0,0x70,0x0,0xe0,0x1,0xc0,0x7,0xe0,0x1c,0x38,0x38,0x1c,
0x60,0x6,0x60,0x6,0xc0,0x3,0xc0,0x3,0xc0,0x3,0xc0,0x3,0xc0,0x3,0xc0,0x3,
0xc0,0x3,0x60,0x6,0x60,0x6,0x38,0x1c,0x1c,0x38,0x7,0xe0
};
static const GLUTBitmapChar ch81 = { 16, 22, -1, 5, 18, ch81data };
static const unsigned char ch82data[] = {
0xfc,0x1e,0x30,0x1c,0x30,0x38,0x30,0x70,0x30,0x60,0x30,0xc0,0x31,0xc0,0x33,0x80,
0x3f,0xc0,0x30,0x70,0x30,0x30,0x30,0x38,0x30,0x18,0x30,0x38,0x30,0x30,0x30,0x70,
0xff,0xc0
};
static const GLUTBitmapChar ch82 = { 15, 17, -1, 0, 16, ch82data };
static const unsigned char ch83data[] = {
0x9e,0x0,0xf1,0x80,0xc0,0xc0,0x80,0x60,0x80,0x60,0x0,0x60,0x0,0xe0,0x3,0xc0,
0xf,0x80,0x1e,0x0,0x78,0x0,0xe0,0x0,0xc0,0x40,0xc0,0x40,0xc0,0xc0,0x63,0xc0,
0x1e,0x40
};
static const GLUTBitmapChar ch83 = { 11, 17, -1, 0, 13, ch83data };
static const unsigned char ch84data[] = {
0xf,0xc0,0x3,0x0,0x3,0x0,0x3,0x0,0x3,0x0,0x3,0x0,0x3,0x0,0x3,0x0,
0x3,0x0,0x3,0x0,0x3,0x0,0x3,0x0,0x3,0x0,0x83,0x4,0x83,0x4,0xc3,0xc,
0xff,0xfc
};
static const GLUTBitmapChar ch84 = { 14, 17, -1, 0, 16, ch84data };
static const unsigned char ch85data[] = {
0x7,0xe0,0x1c,0x30,0x18,0x8,0x30,0x8,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,
0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,
0xfc,0x1f
};
static const GLUTBitmapChar ch85 = { 16, 17, -1, 0, 18, ch85data };
static const unsigned char ch86data[] = {
0x1,0x80,0x0,0x1,0x80,0x0,0x1,0x80,0x0,0x3,0xc0,0x0,0x3,0x40,0x0,0x3,
0x60,0x0,0x6,0x20,0x0,0x6,0x20,0x0,0x6,0x30,0x0,0xc,0x10,0x0,0xc,0x18,
0x0,0x18,0x8,0x0,0x18,0x8,0x0,0x18,0xc,0x0,0x30,0x4,0x0,0x30,0x6,0x0,
0xfc,0x1f,0x80
};
static const GLUTBitmapChar ch86 = { 17, 17, 0, 0, 17, ch86data };
static const unsigned char ch87data[] = {
0x1,0x83,0x0,0x1,0x83,0x0,0x1,0x83,0x80,0x3,0x87,0x80,0x3,0x46,0x80,0x3,
0x46,0xc0,0x6,0x46,0x40,0x6,0x4c,0x40,0x6,0x4c,0x60,0xc,0x2c,0x60,0xc,0x2c,
0x20,0x18,0x2c,0x20,0x18,0x18,0x30,0x18,0x18,0x10,0x30,0x18,0x10,0x30,0x18,0x18,
0xfc,0x7e,0x7e
};
static const GLUTBitmapChar ch87 = { 23, 17, 0, 0, 23, ch87data };
static const unsigned char ch88data[] = {
0xfc,0xf,0xc0,0x30,0x3,0x80,0x18,0x7,0x0,0x8,0xe,0x0,0x4,0xc,0x0,0x6,
0x18,0x0,0x2,0x38,0x0,0x1,0x70,0x0,0x0,0xe0,0x0,0x0,0xc0,0x0,0x1,0xc0,
0x0,0x3,0xa0,0x0,0x3,0x10,0x0,0x6,0x8,0x0,0xe,0xc,0x0,0x1c,0x6,0x0,
0x7e,0xf,0x80
};
static const GLUTBitmapChar ch88 = { 18, 17, 0, 0, 18, ch88data };
static const unsigned char ch89data[] = {
0x7,0xe0,0x1,0x80,0x1,0x80,0x1,0x80,0x1,0x80,0x1,0x80,0x1,0x80,0x3,0xc0,
0x3,0x40,0x6,0x60,0x6,0x20,0xc,0x30,0x1c,0x10,0x18,0x18,0x38,0x8,0x30,0xc,
0xfc,0x3f
};
static const GLUTBitmapChar ch89 = { 16, 17, 0, 0, 16, ch89data };
static const unsigned char ch90data[] = {
0xff,0xf8,0xe0,0x18,0x70,0x8,0x30,0x8,0x38,0x0,0x18,0x0,0x1c,0x0,0xe,0x0,
0x6,0x0,0x7,0x0,0x3,0x0,0x3,0x80,0x1,0xc0,0x80,0xc0,0x80,0xe0,0xc0,0x70,
0xff,0xf0
};
static const GLUTBitmapChar ch90 = { 13, 17, -1, 0, 15, ch90data };
static const unsigned char ch91data[] = {
0xf8,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
0xc0,0xc0,0xc0,0xc0,0xf8
};
static const GLUTBitmapChar ch91 = { 5, 21, -2, 4, 8, ch91data };
static const unsigned char ch92data[] = {
0x6,0x6,0x4,0xc,0xc,0x8,0x18,0x18,0x10,0x30,0x30,0x20,0x60,0x60,0x40,0xc0,
0xc0
};
static const GLUTBitmapChar ch92 = { 7, 17, 0, 0, 7, ch92data };
static const unsigned char ch93data[] = {
0xf8,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
0x18,0x18,0x18,0x18,0xf8
};
static const GLUTBitmapChar ch93 = { 5, 21, -1, 4, 8, ch93data };
static const unsigned char ch94data[] = {
0x80,0x80,0xc1,0x80,0x41,0x0,0x63,0x0,0x22,0x0,0x36,0x0,0x14,0x0,0x1c,0x0,
0x8,0x0
};
static const GLUTBitmapChar ch94 = { 9, 9, -1, -8, 11, ch94data };
static const unsigned char ch95data[] = {
0xff,0xf8,0xff,0xf8
};
static const GLUTBitmapChar ch95 = { 13, 2, 0, 5, 13, ch95data };
static const unsigned char ch96data[] = {
0x60,0xe0,0x80,0xc0,0x60
};
static const GLUTBitmapChar ch96 = { 3, 5, -2, -12, 7, ch96data };
static const unsigned char ch97data[] = {
0x71,0x80,0xfb,0x0,0xc7,0x0,0xc3,0x0,0xc3,0x0,0x63,0x0,0x3b,0x0,0xf,0x0,
0x3,0x0,0x63,0x0,0x67,0x0,0x3e,0x0
};
static const GLUTBitmapChar ch97 = { 9, 12, -1, 0, 11, ch97data };
static const unsigned char ch98data[] = {
0x5e,0x0,0x73,0x80,0x61,0x80,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,
0x60,0xc0,0x61,0x80,0x73,0x80,0x6e,0x0,0x60,0x0,0x60,0x0,0x60,0x0,0x60,0x0,
0xe0,0x0
};
static const GLUTBitmapChar ch98 = { 10, 17, -1, 0, 12, ch98data };
static const unsigned char ch99data[] = {
0x1e,0x0,0x7f,0x0,0x70,0x80,0xe0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,
0xc0,0x0,0x41,0x80,0x63,0x80,0x1f,0x0
};
static const GLUTBitmapChar ch99 = { 9, 12, -1, 0, 11, ch99data };
static const unsigned char ch100data[] = {
0x1e,0xc0,0x73,0x80,0x61,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,
0xc1,0x80,0x61,0x80,0x73,0x80,0x1d,0x80,0x1,0x80,0x1,0x80,0x1,0x80,0x1,0x80,
0x3,0x80
};
static const GLUTBitmapChar ch100 = { 10, 17, -1, 0, 12, ch100data };
static const unsigned char ch101data[] = {
0x1e,0x0,0x7f,0x0,0x70,0x80,0xe0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x80,
0xc1,0x80,0x41,0x80,0x63,0x0,0x1e,0x0
};
static const GLUTBitmapChar ch101 = { 9, 12, -1, 0, 11, ch101data };
static const unsigned char ch102data[] = {
0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0xfe,0x30,0x30,0x30,0x16,
0xe
};
static const GLUTBitmapChar ch102 = { 7, 17, 0, 0, 7, ch102data };
static const unsigned char ch103data[] = {
0x3f,0x0,0xf1,0xc0,0xc0,0x60,0xc0,0x20,0x60,0x60,0x3f,0xc0,0x7f,0x0,0x60,0x0,
0x30,0x0,0x3e,0x0,0x33,0x0,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x33,0x0,
0x1f,0xc0
};
static const GLUTBitmapChar ch103 = { 11, 17, -1, 5, 12, ch103data };
static const unsigned char ch104data[] = {
0xf1,0xe0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,
0x60,0xc0,0x71,0xc0,0x6f,0x80,0x67,0x0,0x60,0x0,0x60,0x0,0x60,0x0,0x60,0x0,
0xe0,0x0
};
static const GLUTBitmapChar ch104 = { 11, 17, -1, 0, 13, ch104data };
static const unsigned char ch105data[] = {
0xf0,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0xe0,0x0,0x0,0x0,0x60,
0x60
};
static const GLUTBitmapChar ch105 = { 4, 17, -1, 0, 6, ch105data };
static const unsigned char ch106data[] = {
0xc0,0xe0,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
0x70,0x0,0x0,0x0,0x30,0x30
};
static const GLUTBitmapChar ch106 = { 4, 22, 0, 5, 6, ch106data };
static const unsigned char ch107data[] = {
0xf3,0xe0,0x61,0xc0,0x63,0x80,0x67,0x0,0x6e,0x0,0x6c,0x0,0x78,0x0,0x68,0x0,
0x64,0x0,0x66,0x0,0x63,0x0,0x67,0xc0,0x60,0x0,0x60,0x0,0x60,0x0,0x60,0x0,
0xe0,0x0
};
static const GLUTBitmapChar ch107 = { 11, 17, -1, 0, 12, ch107data };
static const unsigned char ch108data[] = {
0xf0,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,
0xe0
};
static const GLUTBitmapChar ch108 = { 4, 17, -1, 0, 6, ch108data };
static const unsigned char ch109data[] = {
0xf1,0xe3,0xc0,0x60,0xc1,0x80,0x60,0xc1,0x80,0x60,0xc1,0x80,0x60,0xc1,0x80,0x60,
0xc1,0x80,0x60,0xc1,0x80,0x60,0xc1,0x80,0x60,0xc1,0x80,0x71,0xe3,0x80,0x6f,0x9f,
0x0,0xe7,0xe,0x0
};
static const GLUTBitmapChar ch109 = { 18, 12, -1, 0, 20, ch109data };
static const unsigned char ch110data[] = {
0xf1,0xe0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,
0x60,0xc0,0x71,0xc0,0x6f,0x80,0xe7,0x0
};
static const GLUTBitmapChar ch110 = { 11, 12, -1, 0, 13, ch110data };
static const unsigned char ch111data[] = {
0x1e,0x0,0x73,0x80,0x61,0x80,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
0xc0,0xc0,0x61,0x80,0x73,0x80,0x1e,0x0
};
static const GLUTBitmapChar ch111 = { 10, 12, -1, 0, 12, ch111data };
static const unsigned char ch112data[] = {
0xf0,0x0,0x60,0x0,0x60,0x0,0x60,0x0,0x60,0x0,0x6e,0x0,0x73,0x80,0x61,0x80,
0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x61,0x80,0x73,0x80,
0xee,0x0
};
static const GLUTBitmapChar ch112 = { 10, 17, -1, 5, 12, ch112data };
static const unsigned char ch113data[] = {
0x3,0xc0,0x1,0x80,0x1,0x80,0x1,0x80,0x1,0x80,0x1d,0x80,0x73,0x80,0x61,0x80,
0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0x61,0x80,0x73,0x80,
0x1d,0x80
};
static const GLUTBitmapChar ch113 = { 10, 17, -1, 5, 12, ch113data };
static const unsigned char ch114data[] = {
0xf0,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x76,0x6e,0xe6
};
static const GLUTBitmapChar ch114 = { 7, 12, -1, 0, 8, ch114data };
static const unsigned char ch115data[] = {
0xf8,0xc6,0x83,0x3,0x7,0x1e,0x7c,0x70,0xe0,0xc2,0x66,0x3e
};
static const GLUTBitmapChar ch115 = { 8, 12, -1, 0, 10, ch115data };
static const unsigned char ch116data[] = {
0x1c,0x32,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0xfe,0x70,0x30,0x10
};
static const GLUTBitmapChar ch116 = { 7, 15, 0, 0, 7, ch116data };
static const unsigned char ch117data[] = {
0x1c,0xe0,0x3e,0xc0,0x71,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,
0x60,0xc0,0x60,0xc0,0x60,0xc0,0xe1,0xc0
};
static const GLUTBitmapChar ch117 = { 11, 12, -1, 0, 13, ch117data };
static const unsigned char ch118data[] = {
0x4,0x0,0xe,0x0,0xe,0x0,0x1a,0x0,0x19,0x0,0x19,0x0,0x31,0x0,0x30,0x80,
0x30,0x80,0x60,0x80,0x60,0xc0,0xf1,0xe0
};
static const GLUTBitmapChar ch118 = { 11, 12, 0, 0, 11, ch118data };
static const unsigned char ch119data[] = {
0x4,0x10,0x0,0xe,0x38,0x0,0xe,0x38,0x0,0x1a,0x28,0x0,0x1a,0x64,0x0,0x19,
0x64,0x0,0x31,0x64,0x0,0x30,0xc2,0x0,0x30,0xc2,0x0,0x60,0xc2,0x0,0x60,0xc3,
0x0,0xf1,0xe7,0x80
};
static const GLUTBitmapChar ch119 = { 17, 12, 0, 0, 17, ch119data };
static const unsigned char ch120data[] = {
0xf1,0xe0,0x60,0xc0,0x21,0x80,0x33,0x80,0x1b,0x0,0xe,0x0,0xc,0x0,0x1a,0x0,
0x39,0x0,0x31,0x80,0x60,0xc0,0xf1,0xe0
};
static const GLUTBitmapChar ch120 = { 11, 12, -1, 0, 13, ch120data };
static const unsigned char ch121data[] = {
0xe0,0x0,0xf0,0x0,0x18,0x0,0x8,0x0,0xc,0x0,0x4,0x0,0xe,0x0,0xe,0x0,
0x1a,0x0,0x19,0x0,0x19,0x0,0x31,0x0,0x30,0x80,0x30,0x80,0x60,0x80,0x60,0xc0,
0xf1,0xe0
};
static const GLUTBitmapChar ch121 = { 11, 17, 0, 5, 11, ch121data };
static const unsigned char ch122data[] = {
0xff,0xc3,0x61,0x70,0x30,0x38,0x18,0x1c,0xe,0x86,0xc3,0xff
};
static const GLUTBitmapChar ch122 = { 8, 12, -1, 0, 10, ch122data };
static const unsigned char ch123data[] = {
0x7,0xc,0x18,0x18,0x18,0x18,0x18,0x18,0x10,0x30,0x20,0xc0,0x20,0x30,0x10,0x18,
0x18,0x18,0x18,0x18,0xc,0x7
};
static const GLUTBitmapChar ch123 = { 8, 22, -1, 5, 10, ch123data };
static const unsigned char ch124data[] = {
0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
0xc0
};
static const GLUTBitmapChar ch124 = { 2, 17, -2, 0, 6, ch124data };
static const unsigned char ch125data[] = {
0xe0,0x30,0x18,0x18,0x18,0x18,0x18,0x18,0x8,0xc,0x4,0x3,0x4,0xc,0x8,0x18,
0x18,0x18,0x18,0x18,0x30,0xe0
};
static const GLUTBitmapChar ch125 = { 8, 22, -1, 5, 10, ch125data };
static const unsigned char ch126data[] = {
0x83,0x80,0xc7,0xc0,0x7c,0x60,0x38,0x20
};
static const GLUTBitmapChar ch126 = { 11, 4, -1, -5, 13, ch126data };
static const unsigned char ch160data[] = {
0x0
};
static const GLUTBitmapChar ch160 = { 1, 1, 0, 0, 6, ch160data };
static const unsigned char ch161data[] = {
0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x0,0x0,0x0,0xc0,
0xc0
};
static const GLUTBitmapChar ch161 = { 2, 17, -4, 5, 8, ch161data };
static const unsigned char ch162data[] = {
0x40,0x0,0x40,0x0,0x3e,0x0,0x7f,0x0,0x70,0x80,0xd0,0x0,0xc8,0x0,0xc8,0x0,
0xc8,0x0,0xc4,0x0,0xc4,0x0,0x43,0x80,0x63,0x80,0x1f,0x0,0x1,0x0,0x1,0x0
};
static const GLUTBitmapChar ch162 = { 9, 16, -1, 2, 12, ch162data };
static const unsigned char ch163data[] = {
0xe7,0x80,0xbe,0xc0,0x78,0x40,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,
0x30,0x0,0xfc,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x31,0x80,0x19,0x80,
0xf,0x0
};
static const GLUTBitmapChar ch163 = { 10, 17, -1, 0, 12, ch163data };
static const unsigned char ch164data[] = {
0xc0,0x60,0xee,0xe0,0x7f,0xc0,0x31,0x80,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,
0x31,0x80,0x7f,0xc0,0xee,0xe0,0xc0,0x60
};
static const GLUTBitmapChar ch164 = { 11, 12, -1, -3, 13, ch164data };
static const unsigned char ch165data[] = {
0xf,0xc0,0x3,0x0,0x3,0x0,0x3,0x0,0x3,0x0,0x1f,0xe0,0x3,0x0,0x1f,0xe0,
0x3,0x0,0x7,0x80,0xc,0x80,0xc,0xc0,0x18,0x40,0x18,0x60,0x30,0x20,0x70,0x30,
0xf8,0x7c
};
static const GLUTBitmapChar ch165 = { 14, 17, 0, 0, 14, ch165data };
static const unsigned char ch166data[] = {
0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x0,0x0,0x0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
0xc0
};
static const GLUTBitmapChar ch166 = { 2, 17, -2, 0, 6, ch166data };
static const unsigned char ch167data[] = {
0x38,0x64,0x62,0x6,0xe,0x1c,0x38,0x74,0xe2,0xc3,0x83,0x87,0x4e,0x3c,0x38,0x70,
0x60,0x46,0x26,0x1c
};
static const GLUTBitmapChar ch167 = { 8, 20, -2, 2, 12, ch167data };
static const unsigned char ch168data[] = {
0xcc,0xcc
};
static const GLUTBitmapChar ch168 = { 6, 2, -1, -14, 8, ch168data };
static const unsigned char ch169data[] = {
0x7,0xf0,0x0,0x1c,0x1c,0x0,0x30,0x6,0x0,0x61,0xc3,0x0,0x47,0x71,0x0,0xc4,
0x19,0x80,0x8c,0x0,0x80,0x88,0x0,0x80,0x88,0x0,0x80,0x88,0x0,0x80,0x8c,0x0,
0x80,0xc4,0x19,0x80,0x47,0x31,0x0,0x61,0xe3,0x0,0x30,0x6,0x0,0x1c,0x1c,0x0,
0x7,0xf0,0x0
};
static const GLUTBitmapChar ch169 = { 17, 17, -1, 0, 19, ch169data };
static const unsigned char ch170data[] = {
0x7e,0x0,0x76,0xcc,0xcc,0x7c,0xc,0xcc,0x78
};
static const GLUTBitmapChar ch170 = { 7, 9, 0, -8, 8, ch170data };
static const unsigned char ch171data[] = {
0x8,0x80,0x19,0x80,0x33,0x0,0x66,0x0,0xcc,0x0,0xcc,0x0,0x66,0x0,0x33,0x0,
0x19,0x80,0x8,0x80
};
static const GLUTBitmapChar ch171 = { 9, 10, -2, -1, 13, ch171data };
static const unsigned char ch172data[] = {
0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x30,0xff,0xf0,0xff,0xf0
};
static const GLUTBitmapChar ch172 = { 12, 7, -1, -3, 14, ch172data };
static const unsigned char ch173data[] = {
0xfe,0xfe
};
static const GLUTBitmapChar ch173 = { 7, 2, -1, -5, 9, ch173data };
static const unsigned char ch174data[] = {
0x7,0xf0,0x0,0x1c,0x1c,0x0,0x30,0x6,0x0,0x60,0x3,0x0,0x47,0x19,0x0,0xc2,
0x31,0x80,0x82,0x20,0x80,0x82,0x40,0x80,0x83,0xe0,0x80,0x82,0x30,0x80,0x82,0x10,
0x80,0xc2,0x11,0x80,0x42,0x31,0x0,0x67,0xe3,0x0,0x30,0x6,0x0,0x1c,0x1c,0x0,
0x7,0xf0,0x0
};
static const GLUTBitmapChar ch174 = { 17, 17, -1, 0, 19, ch174data };
static const unsigned char ch175data[] = {
0xfc,0xfc
};
static const GLUTBitmapChar ch175 = { 6, 2, -1, -14, 8, ch175data };
static const unsigned char ch176data[] = {
0x38,0x44,0x82,0x82,0x82,0x44,0x38
};
static const GLUTBitmapChar ch176 = { 7, 7, -1, -10, 9, ch176data };
static const unsigned char ch177data[] = {
0xff,0xf0,0xff,0xf0,0x0,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,
0xff,0xf0,0xff,0xf0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0
};
static const GLUTBitmapChar ch177 = { 12, 15, -1, 0, 14, ch177data };
static const unsigned char ch178data[] = {
0xfc,0x44,0x20,0x30,0x10,0x8,0xc,0x8c,0x4c,0x38
};
static const GLUTBitmapChar ch178 = { 6, 10, 0, -7, 7, ch178data };
static const unsigned char ch179data[] = {
0x70,0x88,0x8c,0xc,0x8,0x30,0x8,0x8c,0x4c,0x38
};
static const GLUTBitmapChar ch179 = { 6, 10, 0, -7, 7, ch179data };
static const unsigned char ch180data[] = {
0x80,0x60,0x38,0x18
};
static const GLUTBitmapChar ch180 = { 5, 4, -2, -13, 8, ch180data };
static const unsigned char ch181data[] = {
0x40,0x0,0xe0,0x0,0xc0,0x0,0x40,0x0,0x40,0x0,0x5c,0xe0,0x7e,0xc0,0x71,0xc0,
0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,
0xe1,0xc0
};
static const GLUTBitmapChar ch181 = { 11, 17, -1, 5, 13, ch181data };
static const unsigned char ch182data[] = {
0x9,0x0,0x9,0x0,0x9,0x0,0x9,0x0,0x9,0x0,0x9,0x0,0x9,0x0,0x9,0x0,
0x9,0x0,0x9,0x0,0x9,0x0,0x19,0x0,0x39,0x0,0x79,0x0,0x79,0x0,0xf9,0x0,
0xf9,0x0,0xf9,0x0,0x79,0x0,0x79,0x0,0x39,0x0,0x1f,0x80
};
static const GLUTBitmapChar ch182 = { 9, 22, -1, 5, 11, ch182data };
static const unsigned char ch183data[] = {
0xc0,0xc0
};
static const GLUTBitmapChar ch183 = { 2, 2, -2, -6, 6, ch183data };
static const unsigned char ch184data[] = {
0x78,0xcc,0xc,0x3c,0x30,0x10
};
static const GLUTBitmapChar ch184 = { 6, 6, -1, 6, 8, ch184data };
static const unsigned char ch185data[] = {
0xf8,0x20,0x20,0x20,0x20,0x20,0x20,0xa0,0x60,0x20
};
static const GLUTBitmapChar ch185 = { 5, 10, -1, -7, 7, ch185data };
static const unsigned char ch186data[] = {
0xfc,0x0,0x78,0xcc,0xcc,0xcc,0xcc,0xcc,0x78
};
static const GLUTBitmapChar ch186 = { 6, 9, -1, -8, 8, ch186data };
static const unsigned char ch187data[] = {
0x88,0x0,0xcc,0x0,0x66,0x0,0x33,0x0,0x19,0x80,0x19,0x80,0x33,0x0,0x66,0x0,
0xcc,0x0,0x88,0x0
};
static const GLUTBitmapChar ch187 = { 9, 10, -2, -1, 12, ch187data };
static const unsigned char ch188data[] = {
0x30,0x4,0x10,0x4,0x18,0xff,0x8,0x44,0xc,0x64,0x6,0x24,0x2,0x14,0xfb,0x1c,
0x21,0xc,0x21,0x84,0x20,0xc0,0x20,0x40,0x20,0x60,0x20,0x20,0xa0,0x30,0x60,0x18,
0x20,0x8
};
static const GLUTBitmapChar ch188 = { 16, 17, -1, 0, 18, ch188data };
static const unsigned char ch189data[] = {
0x30,0x7e,0x10,0x22,0x18,0x10,0x8,0x18,0xc,0x8,0x6,0x4,0x2,0x6,0xfb,0x46,
0x21,0x26,0x21,0x9c,0x20,0xc0,0x20,0x40,0x20,0x60,0x20,0x20,0xa0,0x30,0x60,0x18,
0x20,0x8
};
static const GLUTBitmapChar ch189 = { 15, 17, -1, 0, 18, ch189data };
static const unsigned char ch190data[] = {
0x18,0x2,0x0,0x8,0x2,0x0,0xc,0x7f,0x80,0x4,0x22,0x0,0x6,0x32,0x0,0x3,
0x12,0x0,0x1,0xa,0x0,0x71,0x8e,0x0,0x88,0x86,0x0,0x8c,0xc2,0x0,0xc,0x60,
0x0,0x8,0x20,0x0,0x30,0x30,0x0,0x8,0x10,0x0,0x8c,0x18,0x0,0x4c,0xc,0x0,
0x38,0x4,0x0
};
static const GLUTBitmapChar ch190 = { 17, 17, 0, 0, 18, ch190data };
static const unsigned char ch191data[] = {
0x3e,0x63,0xc1,0xc3,0xc3,0xe0,0x70,0x30,0x38,0x18,0x18,0x8,0x8,0x0,0x0,0xc,
0xc
};
static const GLUTBitmapChar ch191 = { 8, 17, -1, 5, 11, ch191data };
static const unsigned char ch192data[] = {
0xfc,0x1f,0x80,0x30,0x6,0x0,0x10,0x6,0x0,0x10,0xc,0x0,0x18,0xc,0x0,0x8,
0xc,0x0,0xf,0xf8,0x0,0xc,0x18,0x0,0x4,0x18,0x0,0x4,0x30,0x0,0x6,0x30,
0x0,0x2,0x30,0x0,0x2,0x60,0x0,0x1,0x60,0x0,0x1,0xc0,0x0,0x1,0xc0,0x0,
0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x20,0x0,0x0,0xc0,0x0,0x3,0x80,0x0,0x3,
0x0,0x0
};
static const GLUTBitmapChar ch192 = { 17, 22, 0, 0, 17, ch192data };
static const unsigned char ch193data[] = {
0xfc,0x1f,0x80,0x30,0x6,0x0,0x10,0x6,0x0,0x10,0xc,0x0,0x18,0xc,0x0,0x8,
0xc,0x0,0xf,0xf8,0x0,0xc,0x18,0x0,0x4,0x18,0x0,0x4,0x30,0x0,0x6,0x30,
0x0,0x2,0x30,0x0,0x2,0x60,0x0,0x1,0x60,0x0,0x1,0xc0,0x0,0x1,0xc0,0x0,
0x0,0x80,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0xc0,0x0,0x0,0x70,0x0,0x0,
0x30,0x0
};
static const GLUTBitmapChar ch193 = { 17, 22, 0, 0, 17, ch193data };
static const unsigned char ch194data[] = {
0xfc,0x1f,0x80,0x30,0x6,0x0,0x10,0x6,0x0,0x10,0xc,0x0,0x18,0xc,0x0,0x8,
0xc,0x0,0xf,0xf8,0x0,0xc,0x18,0x0,0x4,0x18,0x0,0x4,0x30,0x0,0x6,0x30,
0x0,0x2,0x30,0x0,0x2,0x60,0x0,0x1,0x60,0x0,0x1,0xc0,0x0,0x1,0xc0,0x0,
0x0,0x80,0x0,0x0,0x0,0x0,0x8,0x10,0x0,0x6,0x60,0x0,0x3,0xc0,0x0,0x1,
0x80,0x0
};
static const GLUTBitmapChar ch194 = { 17, 22, 0, 0, 17, ch194data };
static const unsigned char ch195data[] = {
0xfc,0x1f,0x80,0x30,0x7,0x0,0x10,0x6,0x0,0x10,0xc,0x0,0x18,0xc,0x0,0x8,
0xc,0x0,0xf,0xf8,0x0,0xc,0x18,0x0,0x4,0x18,0x0,0x4,0x30,0x0,0x6,0x30,
0x0,0x2,0x30,0x0,0x2,0x60,0x0,0x1,0x60,0x0,0x1,0xc0,0x0,0x1,0xc0,0x0,
0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0xe0,0x0,0x3,0x90,0x0
};
static const GLUTBitmapChar ch195 = { 17, 21, 0, 0, 17, ch195data };
static const unsigned char ch196data[] = {
0xfc,0x1f,0x80,0x30,0x6,0x0,0x10,0x6,0x0,0x10,0xc,0x0,0x18,0xc,0x0,0x8,
0xc,0x0,0xf,0xf8,0x0,0xc,0x18,0x0,0x4,0x18,0x0,0x4,0x30,0x0,0x6,0x30,
0x0,0x2,0x30,0x0,0x2,0x60,0x0,0x1,0x60,0x0,0x1,0xc0,0x0,0x1,0xc0,0x0,
0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6,0x30,0x0,0x6,0x30,0x0
};
static const GLUTBitmapChar ch196 = { 17, 21, 0, 0, 17, ch196data };
static const unsigned char ch197data[] = {
0xfc,0x1f,0x80,0x30,0x6,0x0,0x10,0x6,0x0,0x10,0xc,0x0,0x18,0xc,0x0,0x8,
0xc,0x0,0xf,0xf8,0x0,0xc,0x18,0x0,0x4,0x18,0x0,0x4,0x30,0x0,0x6,0x30,
0x0,0x2,0x30,0x0,0x2,0x60,0x0,0x1,0x60,0x0,0x1,0xc0,0x0,0x1,0xc0,0x0,
0x0,0x80,0x0,0x1,0xc0,0x0,0x2,0x20,0x0,0x2,0x20,0x0,0x1,0xc0,0x0
};
static const GLUTBitmapChar ch197 = { 17, 21, 0, 0, 17, ch197data };
static const unsigned char ch198data[] = {
0xf9,0xff,0xf0,0x30,0x60,0x30,0x10,0x60,0x10,0x10,0x60,0x10,0x18,0x60,0x0,0x8,
0x60,0x0,0xf,0xe0,0x80,0xc,0x60,0x80,0x4,0x7f,0x80,0x4,0x60,0x80,0x6,0x60,
0x80,0x2,0x60,0x0,0x2,0x60,0x0,0x1,0x60,0x20,0x1,0x60,0x20,0x1,0xe0,0x60,
0x3,0xff,0xe0
};
static const GLUTBitmapChar ch198 = { 20, 17, 0, 0, 21, ch198data };
static const unsigned char ch199data[] = {
0x7,0x80,0xc,0xc0,0x0,0xc0,0x3,0xc0,0x3,0x0,0x1,0x0,0x7,0xe0,0x1e,0x38,
0x38,0x8,0x60,0x4,0x60,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,
0xc0,0x0,0xc0,0x0,0x60,0x4,0x60,0x4,0x38,0xc,0x1c,0x3c,0x7,0xe4
};
static const GLUTBitmapChar ch199 = { 14, 23, -1, 6, 16, ch199data };
static const unsigned char ch200data[] = {
0xff,0xf8,0x30,0x18,0x30,0x8,0x30,0x8,0x30,0x0,0x30,0x0,0x30,0x40,0x30,0x40,
0x3f,0xc0,0x30,0x40,0x30,0x40,0x30,0x0,0x30,0x0,0x30,0x10,0x30,0x10,0x30,0x30,
0xff,0xf0,0x0,0x0,0x1,0x0,0x6,0x0,0x1c,0x0,0x18,0x0
};
static const GLUTBitmapChar ch200 = { 13, 22, -1, 0, 15, ch200data };
static const unsigned char ch201data[] = {
0xff,0xf8,0x30,0x18,0x30,0x8,0x30,0x8,0x30,0x0,0x30,0x0,0x30,0x40,0x30,0x40,
0x3f,0xc0,0x30,0x40,0x30,0x40,0x30,0x0,0x30,0x0,0x30,0x10,0x30,0x10,0x30,0x30,
0xff,0xf0,0x0,0x0,0x4,0x0,0x3,0x0,0x1,0xc0,0x0,0xc0
};
static const GLUTBitmapChar ch201 = { 13, 22, -1, 0, 15, ch201data };
static const unsigned char ch202data[] = {
0xff,0xf8,0x30,0x18,0x30,0x8,0x30,0x8,0x30,0x0,0x30,0x0,0x30,0x40,0x30,0x40,
0x3f,0xc0,0x30,0x40,0x30,0x40,0x30,0x0,0x30,0x0,0x30,0x10,0x30,0x10,0x30,0x30,
0xff,0xf0,0x0,0x0,0x10,0x20,0xc,0xc0,0x7,0x80,0x3,0x0
};
static const GLUTBitmapChar ch202 = { 13, 22, -1, 0, 15, ch202data };
static const unsigned char ch203data[] = {
0xff,0xf8,0x30,0x18,0x30,0x8,0x30,0x8,0x30,0x0,0x30,0x0,0x30,0x40,0x30,0x40,
0x3f,0xc0,0x30,0x40,0x30,0x40,0x30,0x0,0x30,0x0,0x30,0x10,0x30,0x10,0x30,0x30,
0xff,0xf0,0x0,0x0,0x0,0x0,0x19,0x80,0x19,0x80
};
static const GLUTBitmapChar ch203 = { 13, 21, -1, 0, 15, ch203data };
static const unsigned char ch204data[] = {
0xfc,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
0xfc,0x0,0x8,0x30,0xe0,0xc0
};
static const GLUTBitmapChar ch204 = { 6, 22, -1, 0, 8, ch204data };
static const unsigned char ch205data[] = {
0xfc,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
0xfc,0x0,0x40,0x30,0x1c,0xc
};
static const GLUTBitmapChar ch205 = { 6, 22, -1, 0, 8, ch205data };
static const unsigned char ch206data[] = {
0x7e,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
0x7e,0x0,0x81,0x66,0x3c,0x18
};
static const GLUTBitmapChar ch206 = { 8, 22, -1, 0, 8, ch206data };
static const unsigned char ch207data[] = {
0xfc,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
0xfc,0x0,0x0,0xcc,0xcc
};
static const GLUTBitmapChar ch207 = { 6, 21, -1, 0, 8, ch207data };
static const unsigned char ch208data[] = {
0x7f,0xe0,0x18,0x38,0x18,0x1c,0x18,0x6,0x18,0x6,0x18,0x3,0x18,0x3,0x18,0x3,
0xff,0x3,0x18,0x3,0x18,0x3,0x18,0x3,0x18,0x6,0x18,0x6,0x18,0x1c,0x18,0x38,
0x7f,0xe0
};
static const GLUTBitmapChar ch208 = { 16, 17, 0, 0, 17, ch208data };
static const unsigned char ch209data[] = {
0xf8,0xc,0x20,0x1c,0x20,0x1c,0x20,0x34,0x20,0x64,0x20,0x64,0x20,0xc4,0x21,0x84,
0x21,0x84,0x23,0x4,0x26,0x4,0x26,0x4,0x2c,0x4,0x38,0x4,0x38,0x4,0x30,0x4,
0xf0,0x1f,0x0,0x0,0x0,0x0,0x4,0xe0,0x3,0x90
};
static const GLUTBitmapChar ch209 = { 16, 21, -1, 0, 18, ch209data };
static const unsigned char ch210data[] = {
0x7,0xe0,0x1c,0x38,0x38,0x1c,0x60,0x6,0x60,0x6,0xc0,0x3,0xc0,0x3,0xc0,0x3,
0xc0,0x3,0xc0,0x3,0xc0,0x3,0xc0,0x3,0x60,0x6,0x60,0x6,0x38,0x1c,0x1c,0x38,
0x7,0xe0,0x0,0x0,0x0,0x40,0x1,0x80,0x7,0x0,0x6,0x0
};
static const GLUTBitmapChar ch210 = { 16, 22, -1, 0, 18, ch210data };
static const unsigned char ch211data[] = {
0x7,0xe0,0x1c,0x38,0x38,0x1c,0x60,0x6,0x60,0x6,0xc0,0x3,0xc0,0x3,0xc0,0x3,
0xc0,0x3,0xc0,0x3,0xc0,0x3,0xc0,0x3,0x60,0x6,0x60,0x6,0x38,0x1c,0x1c,0x38,
0x7,0xe0,0x0,0x0,0x1,0x0,0x0,0xc0,0x0,0x70,0x0,0x30
};
static const GLUTBitmapChar ch211 = { 16, 22, -1, 0, 18, ch211data };
static const unsigned char ch212data[] = {
0x7,0xe0,0x1c,0x38,0x38,0x1c,0x60,0x6,0x60,0x6,0xc0,0x3,0xc0,0x3,0xc0,0x3,
0xc0,0x3,0xc0,0x3,0xc0,0x3,0xc0,0x3,0x60,0x6,0x60,0x6,0x38,0x1c,0x1c,0x38,
0x7,0xe0,0x0,0x0,0x8,0x10,0x6,0x60,0x3,0xc0,0x1,0x80
};
static const GLUTBitmapChar ch212 = { 16, 22, -1, 0, 18, ch212data };
static const unsigned char ch213data[] = {
0x7,0xe0,0x1c,0x38,0x38,0x1c,0x60,0x6,0x60,0x6,0xc0,0x3,0xc0,0x3,0xc0,0x3,
0xc0,0x3,0xc0,0x3,0xc0,0x3,0xc0,0x3,0x60,0x6,0x60,0x6,0x38,0x1c,0x1c,0x38,
0x7,0xe0,0x0,0x0,0x0,0x0,0x4,0xe0,0x3,0x90
};
static const GLUTBitmapChar ch213 = { 16, 21, -1, 0, 18, ch213data };
static const unsigned char ch214data[] = {
0x7,0xe0,0x1c,0x38,0x38,0x1c,0x60,0x6,0x60,0x6,0xc0,0x3,0xc0,0x3,0xc0,0x3,
0xc0,0x3,0xc0,0x3,0xc0,0x3,0xc0,0x3,0x60,0x6,0x60,0x6,0x38,0x1c,0x1c,0x38,
0x7,0xe0,0x0,0x0,0x0,0x0,0x6,0x60,0x6,0x60
};
static const GLUTBitmapChar ch214 = { 16, 21, -1, 0, 18, ch214data };
static const unsigned char ch215data[] = {
0x80,0x40,0xc0,0xc0,0x61,0x80,0x33,0x0,0x1e,0x0,0xc,0x0,0x1e,0x0,0x33,0x0,
0x61,0x80,0xc0,0xc0,0x80,0x40
};
static const GLUTBitmapChar ch215 = { 10, 11, -2, -1, 14, ch215data };
static const unsigned char ch216data[] = {
0x20,0x0,0x27,0xe0,0x1c,0x38,0x38,0x1c,0x68,0x6,0x64,0x6,0xc2,0x3,0xc2,0x3,
0xc1,0x3,0xc1,0x3,0xc0,0x83,0xc0,0x83,0xc0,0x43,0x60,0x46,0x60,0x26,0x38,0x1c,
0x1c,0x38,0x7,0xe4,0x0,0x4
};
static const GLUTBitmapChar ch216 = { 16, 19, -1, 1, 18, ch216data };
static const unsigned char ch217data[] = {
0x7,0xe0,0x1c,0x30,0x18,0x8,0x30,0x8,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,
0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,
0xfc,0x1f,0x0,0x0,0x0,0x40,0x1,0x80,0x7,0x0,0x6,0x0
};
static const GLUTBitmapChar ch217 = { 16, 22, -1, 0, 18, ch217data };
static const unsigned char ch218data[] = {
0x7,0xe0,0x1c,0x30,0x18,0x8,0x30,0x8,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,
0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,
0xfc,0x1f,0x0,0x0,0x1,0x0,0x0,0xc0,0x0,0x70,0x0,0x30
};
static const GLUTBitmapChar ch218 = { 16, 22, -1, 0, 18, ch218data };
static const unsigned char ch219data[] = {
0x7,0xe0,0x1c,0x30,0x18,0x8,0x30,0x8,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,
0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,
0xfc,0x1f,0x0,0x0,0x8,0x10,0x6,0x60,0x3,0xc0,0x1,0x80
};
static const GLUTBitmapChar ch219 = { 16, 22, -1, 0, 18, ch219data };
static const unsigned char ch220data[] = {
0x7,0xe0,0x1c,0x30,0x18,0x8,0x30,0x8,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,
0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,0x30,0x4,
0xfc,0x1f,0x0,0x0,0x0,0x0,0x6,0x30,0x6,0x30
};
static const GLUTBitmapChar ch220 = { 16, 21, -1, 0, 18, ch220data };
static const unsigned char ch221data[] = {
0x7,0xe0,0x1,0x80,0x1,0x80,0x1,0x80,0x1,0x80,0x1,0x80,0x1,0x80,0x3,0xc0,
0x3,0x40,0x6,0x60,0x6,0x20,0xc,0x30,0x1c,0x10,0x18,0x18,0x38,0x8,0x30,0xc,
0xfc,0x3f,0x0,0x0,0x1,0x0,0x0,0xc0,0x0,0x70,0x0,0x30
};
static const GLUTBitmapChar ch221 = { 16, 22, 0, 0, 16, ch221data };
static const unsigned char ch222data[] = {
0xfc,0x0,0x30,0x0,0x30,0x0,0x30,0x0,0x3f,0xc0,0x30,0x70,0x30,0x30,0x30,0x18,
0x30,0x18,0x30,0x18,0x30,0x30,0x30,0x70,0x3f,0xc0,0x30,0x0,0x30,0x0,0x30,0x0,
0xfc,0x0
};
static const GLUTBitmapChar ch222 = { 13, 17, -1, 0, 15, ch222data };
static const unsigned char ch223data[] = {
0xe7,0x0,0x6c,0x80,0x6c,0xc0,0x60,0xc0,0x60,0xc0,0x61,0xc0,0x61,0x80,0x63,0x80,
0x67,0x0,0x6c,0x0,0x63,0x0,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x33,0x0,
0x1e,0x0
};
static const GLUTBitmapChar ch223 = { 10, 17, -1, 0, 12, ch223data };
static const unsigned char ch224data[] = {
0x71,0x80,0xfb,0x0,0xc7,0x0,0xc3,0x0,0xc3,0x0,0x63,0x0,0x3b,0x0,0xf,0x0,
0x3,0x0,0x63,0x0,0x67,0x0,0x3e,0x0,0x0,0x0,0x4,0x0,0x18,0x0,0x70,0x0,
0x60,0x0
};
static const GLUTBitmapChar ch224 = { 9, 17, -1, 0, 11, ch224data };
static const unsigned char ch225data[] = {
0x71,0x80,0xfb,0x0,0xc7,0x0,0xc3,0x0,0xc3,0x0,0x63,0x0,0x3b,0x0,0xf,0x0,
0x3,0x0,0x63,0x0,0x67,0x0,0x3e,0x0,0x0,0x0,0x10,0x0,0xc,0x0,0x7,0x0,
0x3,0x0
};
static const GLUTBitmapChar ch225 = { 9, 17, -1, 0, 11, ch225data };
static const unsigned char ch226data[] = {
0x71,0x80,0xfb,0x0,0xc7,0x0,0xc3,0x0,0xc3,0x0,0x63,0x0,0x3b,0x0,0xf,0x0,
0x3,0x0,0x63,0x0,0x67,0x0,0x3e,0x0,0x0,0x0,0x42,0x0,0x24,0x0,0x3c,0x0,
0x18,0x0
};
static const GLUTBitmapChar ch226 = { 9, 17, -1, 0, 11, ch226data };
static const unsigned char ch227data[] = {
0x71,0x80,0xfb,0x0,0xc7,0x0,0xc3,0x0,0xc3,0x0,0x63,0x0,0x3b,0x0,0xf,0x0,
0x3,0x0,0x63,0x0,0x67,0x0,0x3e,0x0,0x0,0x0,0x0,0x0,0x5c,0x0,0x3a,0x0
};
static const GLUTBitmapChar ch227 = { 9, 16, -1, 0, 11, ch227data };
static const unsigned char ch228data[] = {
0x71,0x80,0xfb,0x0,0xc7,0x0,0xc3,0x0,0xc3,0x0,0x63,0x0,0x3b,0x0,0xf,0x0,
0x3,0x0,0x63,0x0,0x67,0x0,0x3e,0x0,0x0,0x0,0x0,0x0,0x66,0x0,0x66,0x0
};
static const GLUTBitmapChar ch228 = { 9, 16, -1, 0, 11, ch228data };
static const unsigned char ch229data[] = {
0x71,0x80,0xfb,0x0,0xc7,0x0,0xc3,0x0,0xc3,0x0,0x63,0x0,0x3b,0x0,0xf,0x0,
0x3,0x0,0x63,0x0,0x67,0x0,0x3e,0x0,0x0,0x0,0x1c,0x0,0x22,0x0,0x22,0x0,
0x1c,0x0
};
static const GLUTBitmapChar ch229 = { 9, 17, -1, 0, 11, ch229data };
static const unsigned char ch230data[] = {
0x70,0xf0,0xfb,0xf8,0xc7,0x84,0xc3,0x0,0xc3,0x0,0x63,0x0,0x3b,0x0,0xf,0xfc,
0x3,0xc,0x63,0xc,0x67,0x98,0x3c,0xf0
};
static const GLUTBitmapChar ch230 = { 14, 12, -1, 0, 16, ch230data };
static const unsigned char ch231data[] = {
0x3c,0x0,0x66,0x0,0x6,0x0,0x1e,0x0,0x18,0x0,0x8,0x0,0x1e,0x0,0x7f,0x0,
0x70,0x80,0xe0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0x41,0x80,
0x63,0x80,0x1f,0x0
};
static const GLUTBitmapChar ch231 = { 9, 18, -1, 6, 11, ch231data };
static const unsigned char ch232data[] = {
0x1e,0x0,0x7f,0x0,0x70,0x80,0xe0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x80,
0xc1,0x80,0x41,0x80,0x63,0x0,0x1e,0x0,0x0,0x0,0x4,0x0,0x18,0x0,0x70,0x0,
0x60,0x0
};
static const GLUTBitmapChar ch232 = { 9, 17, -1, 0, 11, ch232data };
static const unsigned char ch233data[] = {
0x1e,0x0,0x7f,0x0,0x70,0x80,0xe0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x80,
0xc1,0x80,0x41,0x80,0x63,0x0,0x1e,0x0,0x0,0x0,0x10,0x0,0xc,0x0,0x7,0x0,
0x3,0x0
};
static const GLUTBitmapChar ch233 = { 9, 17, -1, 0, 11, ch233data };
static const unsigned char ch234data[] = {
0x1e,0x0,0x7f,0x0,0x70,0x80,0xe0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x80,
0xc1,0x80,0x41,0x80,0x63,0x0,0x1e,0x0,0x0,0x0,0x21,0x0,0x12,0x0,0x1e,0x0,
0xc,0x0
};
static const GLUTBitmapChar ch234 = { 9, 17, -1, 0, 11, ch234data };
static const unsigned char ch235data[] = {
0x1e,0x0,0x7f,0x0,0x70,0x80,0xe0,0x0,0xc0,0x0,0xc0,0x0,0xc0,0x0,0xff,0x80,
0xc1,0x80,0x41,0x80,0x63,0x0,0x1e,0x0,0x0,0x0,0x0,0x0,0x33,0x0,0x33,0x0
};
static const GLUTBitmapChar ch235 = { 9, 16, -1, 0, 11, ch235data };
static const unsigned char ch236data[] = {
0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x70,0x0,0x8,0x30,0xe0,
0xc0
};
static const GLUTBitmapChar ch236 = { 5, 17, 0, 0, 6, ch236data };
static const unsigned char ch237data[] = {
0xf0,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0xe0,0x0,0x80,0x60,0x38,
0x18
};
static const GLUTBitmapChar ch237 = { 5, 17, -1, 0, 6, ch237data };
static const unsigned char ch238data[] = {
0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x70,0x0,0x84,0x48,0x78,
0x30
};
static const GLUTBitmapChar ch238 = { 6, 17, 0, 0, 6, ch238data };
static const unsigned char ch239data[] = {
0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x70,0x0,0x0,0xcc,0xcc
};
static const GLUTBitmapChar ch239 = { 6, 16, 0, 0, 6, ch239data };
static const unsigned char ch240data[] = {
0x1e,0x0,0x73,0x80,0x61,0x80,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
0xc0,0xc0,0x61,0x80,0x73,0x80,0x1f,0x0,0xc6,0x0,0x3c,0x0,0x1e,0x0,0x71,0x80,
0xc0,0x0
};
static const GLUTBitmapChar ch240 = { 10, 17, -1, 0, 12, ch240data };
static const unsigned char ch241data[] = {
0xf1,0xe0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,
0x60,0xc0,0x71,0xc0,0x6f,0x80,0xe7,0x0,0x0,0x0,0x0,0x0,0x27,0x0,0x1c,0x80
};
static const GLUTBitmapChar ch241 = { 11, 16, -1, 0, 13, ch241data };
static const unsigned char ch242data[] = {
0x1e,0x0,0x73,0x80,0x61,0x80,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
0xc0,0xc0,0x61,0x80,0x73,0x80,0x1e,0x0,0x0,0x0,0x2,0x0,0xc,0x0,0x38,0x0,
0x30,0x0
};
static const GLUTBitmapChar ch242 = { 10, 17, -1, 0, 12, ch242data };
static const unsigned char ch243data[] = {
0x1e,0x0,0x73,0x80,0x61,0x80,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
0xc0,0xc0,0x61,0x80,0x73,0x80,0x1e,0x0,0x0,0x0,0x8,0x0,0x6,0x0,0x3,0x80,
0x1,0x80
};
static const GLUTBitmapChar ch243 = { 10, 17, -1, 0, 12, ch243data };
static const unsigned char ch244data[] = {
0x1e,0x0,0x73,0x80,0x61,0x80,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
0xc0,0xc0,0x61,0x80,0x73,0x80,0x1e,0x0,0x0,0x0,0x21,0x0,0x12,0x0,0x1e,0x0,
0xc,0x0
};
static const GLUTBitmapChar ch244 = { 10, 17, -1, 0, 12, ch244data };
static const unsigned char ch245data[] = {
0x1e,0x0,0x73,0x80,0x61,0x80,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
0xc0,0xc0,0x61,0x80,0x73,0x80,0x1e,0x0,0x0,0x0,0x0,0x0,0x27,0x0,0x1c,0x80
};
static const GLUTBitmapChar ch245 = { 10, 16, -1, 0, 12, ch245data };
static const unsigned char ch246data[] = {
0x1e,0x0,0x73,0x80,0x61,0x80,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
0xc0,0xc0,0x61,0x80,0x73,0x80,0x1e,0x0,0x0,0x0,0x0,0x0,0x33,0x0,0x33,0x0
};
static const GLUTBitmapChar ch246 = { 10, 16, -1, 0, 12, ch246data };
static const unsigned char ch247data[] = {
0x6,0x0,0x6,0x0,0x0,0x0,0x0,0x0,0xff,0xf0,0xff,0xf0,0x0,0x0,0x0,0x0,
0x6,0x0,0x6,0x0
};
static const GLUTBitmapChar ch247 = { 12, 10, -1, -2, 14, ch247data };
static const unsigned char ch248data[] = {
0xc0,0x0,0xde,0x0,0x73,0x80,0x71,0x80,0xd0,0xc0,0xd8,0xc0,0xc8,0xc0,0xcc,0xc0,
0xc4,0xc0,0xc6,0xc0,0x63,0x80,0x73,0x80,0x1e,0xc0,0x0,0xc0
};
static const GLUTBitmapChar ch248 = { 10, 14, -1, 1, 12, ch248data };
static const unsigned char ch249data[] = {
0x1c,0xe0,0x3e,0xc0,0x71,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,
0x60,0xc0,0x60,0xc0,0x60,0xc0,0xe1,0xc0,0x0,0x0,0x2,0x0,0xc,0x0,0x38,0x0,
0x30,0x0
};
static const GLUTBitmapChar ch249 = { 11, 17, -1, 0, 13, ch249data };
static const unsigned char ch250data[] = {
0x1c,0xe0,0x3e,0xc0,0x71,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,
0x60,0xc0,0x60,0xc0,0x60,0xc0,0xe1,0xc0,0x0,0x0,0x8,0x0,0x6,0x0,0x3,0x80,
0x1,0x80
};
static const GLUTBitmapChar ch250 = { 11, 17, -1, 0, 13, ch250data };
static const unsigned char ch251data[] = {
0x1c,0xe0,0x3e,0xc0,0x71,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,
0x60,0xc0,0x60,0xc0,0x60,0xc0,0xe1,0xc0,0x0,0x0,0x21,0x0,0x12,0x0,0x1e,0x0,
0xc,0x0
};
static const GLUTBitmapChar ch251 = { 11, 17, -1, 0, 13, ch251data };
static const unsigned char ch252data[] = {
0x1c,0xe0,0x3e,0xc0,0x71,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,
0x60,0xc0,0x60,0xc0,0x60,0xc0,0xe1,0xc0,0x0,0x0,0x0,0x0,0x33,0x0,0x33,0x0
};
static const GLUTBitmapChar ch252 = { 11, 16, -1, 0, 13, ch252data };
static const unsigned char ch253data[] = {
0xe0,0x0,0xf0,0x0,0x18,0x0,0x8,0x0,0xc,0x0,0x4,0x0,0xe,0x0,0xe,0x0,
0x1a,0x0,0x19,0x0,0x19,0x0,0x31,0x0,0x30,0x80,0x30,0x80,0x60,0x80,0x60,0xc0,
0xf1,0xe0,0x0,0x0,0x8,0x0,0x6,0x0,0x3,0x80,0x1,0x80
};
static const GLUTBitmapChar ch253 = { 11, 22, 0, 5, 11, ch253data };
static const unsigned char ch254data[] = {
0xf0,0x0,0x60,0x0,0x60,0x0,0x60,0x0,0x60,0x0,0x6e,0x0,0x73,0x80,0x61,0x80,
0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x60,0xc0,0x61,0x80,0x73,0x80,
0x6e,0x0,0x60,0x0,0x60,0x0,0x60,0x0,0x60,0x0,0xe0,0x0
};
static const GLUTBitmapChar ch254 = { 10, 22, -1, 5, 12, ch254data };
static const unsigned char ch255data[] = {
0xe0,0x0,0xf0,0x0,0x18,0x0,0x8,0x0,0xc,0x0,0x4,0x0,0xe,0x0,0xe,0x0,
0x1a,0x0,0x19,0x0,0x19,0x0,0x31,0x0,0x30,0x80,0x30,0x80,0x60,0x80,0x60,0xc0,
0xf1,0xe0,0x0,0x0,0x0,0x0,0x33,0x0,0x33,0x0
};
static const GLUTBitmapChar ch255 = { 11, 21, 0, 5, 11, ch255data };
static const GLUTBitmapChar *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, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
&ch160, &ch161, &ch162, &ch163, &ch164, &ch165, &ch166, &ch167,
&ch168, &ch169, &ch170, &ch171, &ch172, &ch173, &ch174, &ch175,
&ch176, &ch177, &ch178, &ch179, &ch180, &ch181, &ch182, &ch183,
&ch184, &ch185, &ch186, &ch187, &ch188, &ch189, &ch190, &ch191,
&ch192, &ch193, &ch194, &ch195, &ch196, &ch197, &ch198, &ch199,
&ch200, &ch201, &ch202, &ch203, &ch204, &ch205, &ch206, &ch207,
&ch208, &ch209, &ch210, &ch211, &ch212, &ch213, &ch214, &ch215,
&ch216, &ch217, &ch218, &ch219, &ch220, &ch221, &ch222, &ch223,
&ch224, &ch225, &ch226, &ch227, &ch228, &ch229, &ch230, &ch231,
&ch232, &ch233, &ch234, &ch235, &ch236, &ch237, &ch238, &ch239,
&ch240, &ch241, &ch242, &ch243, &ch244, &ch245, &ch246, &ch247,
&ch248, &ch249, &ch250, &ch251, &ch252, &ch253, &ch254, &ch255
};
const GLUTBitmapFont glutBitmapTimesRoman24 = {
"-Adobe-Times-Medium-R-Normal--24-240-75-75-P-124-ISO8859-1",
28, 256, chars
};
/*
* DOS/DJGPP Mesa Utility Toolkit
* Version: 1.0
*
* Copyright (C) 2005 Daniel Borca 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
* DANIEL BORCA 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 "internal.h"
extern GLUTStrokeFont glutStrokeRoman, glutStrokeMonoRoman;
extern GLUTBitmapFont glutBitmap8By13, glutBitmap9By15, glutBitmapTimesRoman10, glutBitmapTimesRoman24, glutBitmapHelvetica10, glutBitmapHelvetica12, glutBitmapHelvetica18;
/* To get around the fact that DJGPP DXEs only allow functions
to be exported and no data addresses (as Unix DSOs support), the
GLUT API constants such as GLUT_STROKE_ROMAN have to get passed
through a case statement to get mapped to the actual data structure
address. */
void *
_glut_font (void *font)
{
switch ((int)font) {
case (int)GLUT_STROKE_ROMAN:
return &glutStrokeRoman;
case (int)GLUT_STROKE_MONO_ROMAN:
return &glutStrokeMonoRoman;
case (int)GLUT_BITMAP_9_BY_15:
return &glutBitmap9By15;
case (int)GLUT_BITMAP_8_BY_13:
return &glutBitmap8By13;
case (int)GLUT_BITMAP_TIMES_ROMAN_10:
return &glutBitmapTimesRoman10;
case (int)GLUT_BITMAP_TIMES_ROMAN_24:
return &glutBitmapTimesRoman24;
case (int)GLUT_BITMAP_HELVETICA_10:
return &glutBitmapHelvetica10;
case (int)GLUT_BITMAP_HELVETICA_12:
return &glutBitmapHelvetica12;
case (int)GLUT_BITMAP_HELVETICA_18:
return &glutBitmapHelvetica18;
default:
if ((font == &glutStrokeRoman) ||
(font == &glutStrokeMonoRoman) ||
(font == &glutBitmap9By15) ||
(font == &glutBitmap8By13) ||
(font == &glutBitmapTimesRoman10) ||
(font == &glutBitmapTimesRoman24) ||
(font == &glutBitmapHelvetica10) ||
(font == &glutBitmapHelvetica12) ||
(font == &glutBitmapHelvetica18)) {
return font;
}
_glut_fatal("bad font!");
return NULL;
}
}
/*
* DOS/DJGPP Mesa Utility Toolkit
* Version: 1.0
*
* Copyright (C) 2005 Daniel Borca 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
* DANIEL BORCA 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 <stdio.h>
#include "internal.h"
static GLuint swaptime, swapcount;
static DMesaVisual visual = NULL;
GLUTwindow *_glut_current, *_glut_windows[MAX_WINDOWS];
static void
clean (void)
{
int i;
for (i=1; i<=MAX_WINDOWS; i++) {
glutDestroyWindow(i);
}
if (visual) DMesaDestroyVisual(visual);
pc_close_stdout();
pc_close_stderr();
}
static GLUTwindow *
_glut_window (int win)
{
if (win > 0 && --win < MAX_WINDOWS) {
return _glut_windows[win];
}
return NULL;
}
int APIENTRY
glutCreateWindow (const char *title)
{
int i;
int m8width = (_glut_default.width + 7) & ~7;
if (!(_glut_default.mode & GLUT_DOUBLE)) {
return 0;
}
/* We set the Visual once. This will be our desktop (graphic mode).
* We should do this in the `glutInit' code, but we don't have any idea
* about its geometry. Supposedly, when we are about to create one
* window, we have a slight idea about resolution.
*/
if (!visual) {
if ((visual=DMesaCreateVisual(_glut_default.x + m8width, _glut_default.y + _glut_default.height, _glut_visual.bpp, _glut_visual.refresh,
GLUT_SINGLE,
!(_glut_default.mode & GLUT_INDEX),
(_glut_default.mode & GLUT_ALPHA ) ? _glut_visual.alpha : 0,
(_glut_default.mode & GLUT_DEPTH ) ? _glut_visual.depth : 0,
(_glut_default.mode & GLUT_STENCIL) ? _glut_visual.stencil : 0,
(_glut_default.mode & GLUT_ACCUM ) ? _glut_visual.accum : 0))==NULL) {
return 0;
}
DMesaGetIntegerv(DMESA_GET_SCREEN_SIZE, _glut_visual.geometry);
DMesaGetIntegerv(DMESA_GET_DRIVER_CAPS, &_glut_visual.flags);
/* Also hook stdio/stderr once */
pc_open_stdout();
pc_open_stderr();
pc_atexit(clean);
}
/* Search for an empty slot.
* Each window has its own rendering Context and its own Buffer.
*/
for (i=0; i<MAX_WINDOWS; i++) {
if (_glut_windows[i] == NULL) {
DMesaContext c;
DMesaBuffer b;
GLUTwindow *w;
if ((w = (GLUTwindow *)calloc(1, sizeof(GLUTwindow))) == NULL) {
return 0;
}
/* Allocate the rendering Context. */
if ((c = DMesaCreateContext(visual, NULL)) == NULL) {
free(w);
return 0;
}
/* Allocate the Buffer (displayable area).
* We have to specify buffer size and position (inside the desktop).
*/
if ((b = DMesaCreateBuffer(visual, _glut_default.x, _glut_default.y, m8width, _glut_default.height)) == NULL) {
DMesaDestroyContext(c);
free(w);
return 0;
}
/* Bind Buffer to Context and make the Context the current one. */
if (!DMesaMakeCurrent(c, b)) {
DMesaDestroyBuffer(b);
DMesaDestroyContext(c);
free(w);
return 0;
}
_glut_current = _glut_windows[i] = w;
w->num = ++i;
w->xpos = _glut_default.x;
w->ypos = _glut_default.y;
w->width = m8width;
w->height = _glut_default.height;
w->context = c;
w->buffer = b;
return i;
}
}
return 0;
}
int APIENTRY
glutCreateSubWindow (int win, int x, int y, int width, int height)
{
return GL_FALSE;
}
void APIENTRY
glutDestroyWindow (int win)
{
GLUTwindow *w = _glut_window(win);
if (w != NULL) {
if (w->destroy) {
w->destroy();
}
DMesaMakeCurrent(NULL, NULL);
DMesaDestroyBuffer(w->buffer);
DMesaDestroyContext(w->context);
free(w);
_glut_windows[win - 1] = NULL;
}
}
void APIENTRY
glutPostRedisplay (void)
{
_glut_current->redisplay = GL_TRUE;
}
void APIENTRY
glutSwapBuffers (void)
{
if (_glut_current->show_mouse) {
/* XXX scare mouse */
DMesaSwapBuffers(_glut_current->buffer);
/* XXX unscare mouse */
} else {
DMesaSwapBuffers(_glut_current->buffer);
}
if (_glut_fps) {
GLint t = glutGet(GLUT_ELAPSED_TIME);
swapcount++;
if (swaptime == 0)
swaptime = t;
else if (t - swaptime > _glut_fps) {
double time = 0.001 * (t - swaptime);
double fps = (double)swapcount / time;
fprintf(stderr, "GLUT: %d frames in %.2f seconds = %.2f FPS\n", swapcount, time, fps);
swaptime = t;
swapcount = 0;
}
}
}
int APIENTRY
glutGetWindow (void)
{
return _glut_current->num;
}
void APIENTRY
glutSetWindow (int win)
{
GLUTwindow *w = _glut_window(win);
if (w != NULL) {
_glut_current = w;
DMesaMakeCurrent(_glut_current->context, _glut_current->buffer);
}
}
void APIENTRY
glutSetWindowTitle (const char *title)
{
}
void APIENTRY
glutSetIconTitle (const char *title)
{
}
void APIENTRY
glutPositionWindow (int x, int y)
{
if (DMesaMoveBuffer(x, y)) {
_glut_current->xpos = x;
_glut_current->ypos = y;
}
}
void APIENTRY
glutReshapeWindow (int width, int height)
{
if (DMesaResizeBuffer(width, height)) {
_glut_current->width = width;
_glut_current->height = height;
if (_glut_current->reshape) {
_glut_current->reshape(width, height);
} else {
glViewport(0, 0, width, height);
}
}
}
void APIENTRY
glutFullScreen (void)
{
}
void APIENTRY
glutPopWindow (void)
{
}
void APIENTRY
glutPushWindow (void)
{
}
void APIENTRY
glutIconifyWindow (void)
{
}
void APIENTRY
glutShowWindow (void)
{
}
void APIENTRY
glutHideWindow (void)
{
}
void APIENTRY
glutCloseFunc (GLUTdestroyCB destroy)
{
_glut_current->destroy = destroy;
}
void APIENTRY
glutPostWindowRedisplay (int win)
{
GLUTwindow *w = _glut_window(win);
if (w != NULL) {
w->redisplay = GL_TRUE;
}
}
void * APIENTRY
glutGetWindowData (void)
{
return _glut_current->data;
}
void APIENTRY
glutSetWindowData (void *data)
{
_glut_current->data = data;
}
# DOS/DJGPP Mesa Utility Toolkit
# Version: 1.0
#
# Copyright (C) 2005 Daniel Borca 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
# DANIEL BORCA 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.
#
# Available options:
#
# Environment variables:
# CFLAGS
#
# GLIDE path to Glide3 SDK; used to resolve DXEs.
# default = $(TOP)/glide3
#
# Targets:
# all: build GLUT
# clean: remove object files
#
.PHONY: all clean
TOP = ../../..
GLIDE ?= $(TOP)/glide3
LIBDIR = $(TOP)/lib
GLUT_LIB = libglut.a
GLUT_DXE = glut.dxe
GLUT_IMP = libiglut.a
export LD_LIBRARY_PATH := $(LD_LIBRARY_PATH);$(LIBDIR);$(GLIDE)/lib
CC = gcc
CFLAGS += -I$(TOP)/include -I. -IPC_HW
CFLAGS += -DGLUT_IMPORT_LIB
AR = ar
ARFLAGS = crus
HAVEDXE3 = $(wildcard $(DJDIR)/bin/dxe3gen.exe)
ifeq ($(wildcard $(addsuffix /rm.exe,$(subst ;, ,$(PATH)))),)
UNLINK = del $(subst /,\,$(1))
else
UNLINK = $(RM) $(1)
endif
CORE_SOURCES = \
loop.c \
callback.c \
color.c \
extens.c \
init.c \
menu.c \
mouse.c \
overlay.c \
state.c \
util.c \
window.c \
f8x13.c \
f9x15.c \
hel10.c \
hel12.c \
hel18.c \
tr10.c \
tr24.c \
mroman.c \
roman.c \
bitmap.c \
stroke.c \
teapot.c \
shapes.c
PC_HW_SOURCES = \
PC_HW/pc_hw.c \
PC_HW/pc_keyb.c \
PC_HW/pc_mouse.c \
PC_HW/pc_timer.c \
PC_HW/pc_irq.S
SOURCES = $(CORE_SOURCES) $(PC_HW_SOURCES)
OBJECTS = $(addsuffix .o,$(basename $(SOURCES)))
.c.o:
$(CC) -o $@ $(CFLAGS) -c $<
.S.o:
$(CC) -o $@ $(CFLAGS) -c $<
.s.o:
$(CC) -o $@ $(CFLAGS) -x assembler-with-cpp -c $<
all: $(LIBDIR)/$(GLUT_LIB) $(LIBDIR)/$(GLUT_DXE) $(LIBDIR)/$(GLUT_IMP)
$(LIBDIR)/$(GLUT_LIB): $(OBJECTS)
$(AR) $(ARFLAGS) $@ $^
$(LIBDIR)/$(GLUT_DXE) $(LIBDIR)/$(GLUT_IMP): $(OBJECTS)
ifeq ($(HAVEDXE3),)
$(warning Missing DXE3 package... Skipping $(GLUT_DXE))
else
-dxe3gen -o $(LIBDIR)/$(GLUT_DXE) -Y $(LIBDIR)/$(GLUT_IMP) -D "MesaGLUT DJGPP" -E _glut -P gl.dxe -U $^
endif
clean:
-$(call UNLINK,*.o)
-$(call UNLINK,PC_HW/*.o)
-include depend
/*
* PC/HW routine collection v1.3 for DOS/DJGPP
*
* Copyright (C) 2002 - Daniel Borca
* Email : dborca@yahoo.com
* Web : http://www.geocities.com/dborca
*/
#include <pc.h>
#include <sys/exceptn.h>
#include <sys/farptr.h>
#include "pc_hw.h"
#define KEYB_IRQ 1
#define KEY_BUFFER_SIZE 64
#define KB_MODIFIERS (KB_SHIFT_FLAG | KB_CTRL_FLAG | KB_ALT_FLAG | KB_LWIN_FLAG | KB_RWIN_FLAG | KB_MENU_FLAG)
#define KB_LED_FLAGS (KB_SCROLOCK_FLAG | KB_NUMLOCK_FLAG | KB_CAPSLOCK_FLAG)
static int keyboard_installed;
static volatile struct {
volatile int start, end;
volatile int key[KEY_BUFFER_SIZE];
} key_buffer;
static volatile int key_enhanced, key_pause_loop, key_shifts;
static int leds_ok = TRUE;
static int in_a_terrupt = FALSE;
static volatile char pc_key[KEY_MAX];
/* convert Allegro format scancodes into key_shifts flag bits */
static unsigned short modifier_table[KEY_MAX - KEY_MODIFIERS] = {
KB_SHIFT_FLAG, KB_SHIFT_FLAG, KB_CTRL_FLAG,
KB_CTRL_FLAG, KB_ALT_FLAG, KB_ALT_FLAG,
KB_LWIN_FLAG, KB_RWIN_FLAG, KB_MENU_FLAG,
KB_SCROLOCK_FLAG, KB_NUMLOCK_FLAG, KB_CAPSLOCK_FLAG
};
/* lookup table for converting hardware scancodes into Allegro format */
static unsigned char hw_to_mycode[128] = {
/* 0x00 */ 0, KEY_ESC, KEY_1, KEY_2,
/* 0x04 */ KEY_3, KEY_4, KEY_5, KEY_6,
/* 0x08 */ KEY_7, KEY_8, KEY_9, KEY_0,
/* 0x0C */ KEY_MINUS, KEY_EQUALS, KEY_BACKSPACE, KEY_TAB,
/* 0x10 */ KEY_Q, KEY_W, KEY_E, KEY_R,
/* 0x14 */ KEY_T, KEY_Y, KEY_U, KEY_I,
/* 0x18 */ KEY_O, KEY_P, KEY_OPENBRACE, KEY_CLOSEBRACE,
/* 0x1C */ KEY_ENTER, KEY_LCONTROL, KEY_A, KEY_S,
/* 0x20 */ KEY_D, KEY_F, KEY_G, KEY_H,
/* 0x24 */ KEY_J, KEY_K, KEY_L, KEY_COLON,
/* 0x28 */ KEY_QUOTE, KEY_TILDE, KEY_LSHIFT, KEY_BACKSLASH,
/* 0x2C */ KEY_Z, KEY_X, KEY_C, KEY_V,
/* 0x30 */ KEY_B, KEY_N, KEY_M, KEY_COMMA,
/* 0x34 */ KEY_STOP, KEY_SLASH, KEY_RSHIFT, KEY_ASTERISK,
/* 0x38 */ KEY_ALT, KEY_SPACE, KEY_CAPSLOCK, KEY_F1,
/* 0x3C */ KEY_F2, KEY_F3, KEY_F4, KEY_F5,
/* 0x40 */ KEY_F6, KEY_F7, KEY_F8, KEY_F9,
/* 0x44 */ KEY_F10, KEY_NUMLOCK, KEY_SCRLOCK, KEY_7_PAD,
/* 0x48 */ KEY_8_PAD, KEY_9_PAD, KEY_MINUS_PAD, KEY_4_PAD,
/* 0x4C */ KEY_5_PAD, KEY_6_PAD, KEY_PLUS_PAD, KEY_1_PAD,
/* 0x50 */ KEY_2_PAD, KEY_3_PAD, KEY_0_PAD, KEY_DEL_PAD,
/* 0x54 */ KEY_PRTSCR, 0, KEY_BACKSLASH2, KEY_F11,
/* 0x58 */ KEY_F12, 0, 0, KEY_LWIN,
/* 0x5C */ KEY_RWIN, KEY_MENU, 0, 0,
/* 0x60 */ 0, 0, 0, 0,
/* 0x64 */ 0, 0, 0, 0,
/* 0x68 */ 0, 0, 0, 0,
/* 0x6C */ 0, 0, 0, 0,
/* 0x70 */ KEY_KANA, 0, 0, KEY_ABNT_C1,
/* 0x74 */ 0, 0, 0, 0,
/* 0x78 */ 0, KEY_CONVERT, 0, KEY_NOCONVERT,
/* 0x7C */ 0, KEY_YEN, 0, 0
};
/* lookup table for converting extended hardware codes into Allegro format */
static unsigned char hw_to_mycode_ex[128] = {
/* 0x00 */ 0, KEY_ESC, KEY_1, KEY_2,
/* 0x04 */ KEY_3, KEY_4, KEY_5, KEY_6,
/* 0x08 */ KEY_7, KEY_8, KEY_9, KEY_0,
/* 0x0C */ KEY_MINUS, KEY_EQUALS, KEY_BACKSPACE, KEY_TAB,
/* 0x10 */ KEY_CIRCUMFLEX, KEY_AT, KEY_COLON2, KEY_R,
/* 0x14 */ KEY_KANJI, KEY_Y, KEY_U, KEY_I,
/* 0x18 */ KEY_O, KEY_P, KEY_OPENBRACE, KEY_CLOSEBRACE,
/* 0x1C */ KEY_ENTER_PAD, KEY_RCONTROL, KEY_A, KEY_S,
/* 0x20 */ KEY_D, KEY_F, KEY_G, KEY_H,
/* 0x24 */ KEY_J, KEY_K, KEY_L, KEY_COLON,
/* 0x28 */ KEY_QUOTE, KEY_TILDE, 0, KEY_BACKSLASH,
/* 0x2C */ KEY_Z, KEY_X, KEY_C, KEY_V,
/* 0x30 */ KEY_B, KEY_N, KEY_M, KEY_COMMA,
/* 0x34 */ KEY_STOP, KEY_SLASH_PAD, 0, KEY_PRTSCR,
/* 0x38 */ KEY_ALTGR, KEY_SPACE, KEY_CAPSLOCK, KEY_F1,
/* 0x3C */ KEY_F2, KEY_F3, KEY_F4, KEY_F5,
/* 0x40 */ KEY_F6, KEY_F7, KEY_F8, KEY_F9,
/* 0x44 */ KEY_F10, KEY_NUMLOCK, KEY_PAUSE, KEY_HOME,
/* 0x48 */ KEY_UP, KEY_PGUP, KEY_MINUS_PAD, KEY_LEFT,
/* 0x4C */ KEY_5_PAD, KEY_RIGHT, KEY_PLUS_PAD, KEY_END,
/* 0x50 */ KEY_DOWN, KEY_PGDN, KEY_INSERT, KEY_DEL,
/* 0x54 */ KEY_PRTSCR, 0, KEY_BACKSLASH2, KEY_F11,
/* 0x58 */ KEY_F12, 0, 0, KEY_LWIN,
/* 0x5C */ KEY_RWIN, KEY_MENU, 0, 0,
/* 0x60 */ 0, 0, 0, 0,
/* 0x64 */ 0, 0, 0, 0,
/* 0x68 */ 0, 0, 0, 0,
/* 0x6C */ 0, 0, 0, 0,
/* 0x70 */ 0, 0, 0, 0,
/* 0x74 */ 0, 0, 0, 0,
/* 0x78 */ 0, 0, 0, 0,
/* 0x7C */ 0, 0, 0, 0
};
/* default mapping table for the US keyboard layout */
static unsigned short standard_key_ascii_table[KEY_MAX] = {
/* start */ 0,
/* alphabet */ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
/* numbers */ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
/* numpad */ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
/* func keys */ 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
/* misc chars */ 27, '`', '-', '=', 8, 9, '[', ']', 13, ';', '\'', '\\', '\\', ',', '.', '/', ' ',
/* controls */ 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
/* numpad */ '/', '*', '-', '+', '.', 13,
/* modifiers */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
/* capslock mapping table for the US keyboard layout */
static unsigned short standard_key_capslock_table[KEY_MAX] = {
/* start */ 0,
/* alphabet */ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
/* numbers */ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
/* numpad */ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
/* func keys */ 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
/* misc chars */ 27, '`', '-', '=', 8, 9, '[', ']', 13, ';', '\'', '\\', '\\', ',', '.', '/', ' ',
/* controls */ 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
/* numpad */ '/', '*', '-', '+', '.', 13,
/* modifiers */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
/* shifted mapping table for the US keyboard layout */
static unsigned short standard_key_shift_table[KEY_MAX] = {
/* start */ 0,
/* alphabet */ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
/* numbers */ ')', '!', '@', '#', '$', '%', '^', '&', '*', '(',
/* numpad */ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
/* func keys */ 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
/* misc chars */ 27, '~', '_', '+', 8, 9, '{', '}', 13, ':', '"', '|', '|', '<', '>', '?', ' ',
/* controls */ 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
/* numpad */ '/', '*', '-', '+', '.', 13,
/* modifiers */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
/* ctrl+key mapping table for the US keyboard layout */
static unsigned short standard_key_control_table[KEY_MAX] = {
/* start */ 0,
/* alphabet */ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
/* numbers */ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
/* numpad */ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
/* func keys */ 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
/* misc chars */ 27, 2, 2, 2, 127, 127, 2, 2, 10, 2, 2, 2, 2, 2, 2, 2, 2,
/* controls */ 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
/* numpad */ 2, 2, 2, 2, 2, 10,
/* modifiers */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
/* convert numeric pad scancodes into arrow codes */
static unsigned char numlock_table[10] = {
KEY_INSERT, KEY_END, KEY_DOWN, KEY_PGDN, KEY_LEFT,
KEY_5_PAD, KEY_RIGHT, KEY_HOME, KEY_UP, KEY_PGUP
};
/* kb_wait_for_write_ready:
* Wait for the keyboard controller to set the ready-for-write bit.
*/
static __inline int
kb_wait_for_write_ready (void)
{
int timeout = 4096;
while ((timeout > 0) && (inportb(0x64) & 2)) timeout--;
return (timeout > 0);
}
/* kb_wait_for_read_ready:
* Wait for the keyboard controller to set the ready-for-read bit.
*/
static __inline int
kb_wait_for_read_ready (void)
{
int timeout = 16384;
while ((timeout > 0) && (!(inportb(0x64) & 1))) timeout--;
return (timeout > 0);
}
/* kb_send_data:
* Sends a byte to the keyboard controller. Returns 1 if all OK.
*/
static __inline int
kb_send_data (unsigned char data)
{
int resends = 4;
int timeout, temp;
do {
if (!kb_wait_for_write_ready())
return 0;
outportb(0x60, data);
timeout = 4096;
while (--timeout > 0) {
if (!kb_wait_for_read_ready())
return 0;
temp = inportb(0x60);
if (temp == 0xFA)
return 1;
if (temp == 0xFE)
break;
}
} while ((resends-- > 0) && (timeout > 0));
return 0;
}
static void
update_leds (int leds)
{
if (leds_ok) {
if (!in_a_terrupt)
DISABLE();
if (!kb_send_data(0xED)) {
kb_send_data(0xF4);
leds_ok = FALSE;
} else if (!kb_send_data((leds >> 8) & 7)) {
kb_send_data(0xF4);
leds_ok = FALSE;
}
if (!in_a_terrupt)
ENABLE();
}
} ENDOFUNC(update_leds)
static void
inject_key (int scancode)
{
unsigned short *table;
if ((scancode >= KEY_0_PAD) && (scancode <= KEY_9_PAD)) {
if (((key_shifts & KB_NUMLOCK_FLAG) != 0) == ((key_shifts & KB_SHIFT_FLAG) != 0)) {
scancode = numlock_table[scancode - KEY_0_PAD];
}
table = standard_key_ascii_table;
} else if (key_shifts & KB_CTRL_FLAG) {
table = standard_key_control_table;
} else if (key_shifts & KB_SHIFT_FLAG) {
if (key_shifts & KB_CAPSLOCK_FLAG) {
if (standard_key_ascii_table[scancode] == standard_key_capslock_table[scancode]) {
table = standard_key_shift_table;
} else {
table = standard_key_ascii_table;
}
} else {
table = standard_key_shift_table;
}
} else if (key_shifts & KB_CAPSLOCK_FLAG) {
table = standard_key_capslock_table;
} else {
table = standard_key_ascii_table;
}
key_buffer.key[key_buffer.end++] = (scancode << 16) | table[scancode];
if (key_buffer.end >= KEY_BUFFER_SIZE)
key_buffer.end = 0;
if (key_buffer.end == key_buffer.start) {
key_buffer.start++;
if (key_buffer.start >= KEY_BUFFER_SIZE)
key_buffer.start = 0;
}
} ENDOFUNC(inject_key)
static void
handle_code (int scancode, int keycode)
{
in_a_terrupt++;
if (keycode == 0) { /* pause */
inject_key(scancode);
pc_key[KEY_PAUSE] ^= TRUE;
} else if (scancode) {
int flag;
if (scancode >= KEY_MODIFIERS) {
flag = modifier_table[scancode - KEY_MODIFIERS];
} else {
flag = 0;
}
if ((char)keycode < 0) { /* release */
pc_key[scancode] = FALSE;
if (flag & KB_MODIFIERS) {
key_shifts &= ~flag;
}
} else { /* keypress */
pc_key[scancode] = TRUE;
if (flag & KB_MODIFIERS) {
key_shifts |= flag;
}
if (flag & KB_LED_FLAGS) {
key_shifts ^= flag;
update_leds(key_shifts);
}
if (scancode < KEY_MODIFIERS) {
inject_key(scancode);
}
}
}
in_a_terrupt--;
} ENDOFUNC(handle_code)
static int
keyboard ()
{
unsigned char temp, scancode;
temp = inportb(0x60);
if (temp <= 0xe1) {
if (key_pause_loop) {
if (!--key_pause_loop) handle_code(KEY_PAUSE, 0);
} else
switch (temp) {
case 0xe0:
key_enhanced = TRUE;
break;
case 0xe1:
key_pause_loop = 5;
break;
default:
if (key_enhanced) {
key_enhanced = FALSE;
scancode = hw_to_mycode_ex[temp & 0x7f];
} else {
scancode = hw_to_mycode[temp & 0x7f];
}
handle_code(scancode, temp);
}
}
if (((temp==0x4F)||(temp==0x53))&&(key_shifts&KB_CTRL_FLAG)&&(key_shifts&KB_ALT_FLAG)) {
/* Hack alert:
* only SIGINT (but not Ctrl-Break)
* calls the destructors and will safely clean up
*/
__asm("\n\
movb $0x79, %%al \n\
call ___djgpp_hw_exception \n\
":::"%eax", "%ebx", "%ecx", "%edx", "%esi", "%edi", "memory");
}
__asm("\n\
inb $0x61, %%al \n\
movb %%al, %%ah \n\
orb $0x80, %%al \n\
outb %%al, $0x61 \n\
xchgb %%al, %%ah \n\
outb %%al, $0x61 \n\
movb $0x20, %%al \n\
outb %%al, $0x20 \n\
":::"%eax");
return 0;
} ENDOFUNC(keyboard)
int
pc_keypressed (void)
{
return (key_buffer.start!=key_buffer.end);
}
int
pc_readkey (void)
{
if (keyboard_installed) {
int key;
while (key_buffer.start == key_buffer.end) {
__dpmi_yield();
}
DISABLE();
key = key_buffer.key[key_buffer.start++];
if (key_buffer.start >= KEY_BUFFER_SIZE)
key_buffer.start = 0;
ENABLE();
return key;
} else {
return 0;
}
}
int
pc_keydown (int code)
{
return pc_key[code];
}
int
pc_keyshifts (void)
{
return key_shifts;
}
void
pc_remove_keyb (void)
{
if (keyboard_installed) {
int s1, s2, s3;
keyboard_installed = FALSE;
pc_clexit(pc_remove_keyb);
DISABLE();
_farsetsel(__djgpp_dos_sel);
_farnspokew(0x41c, _farnspeekw(0x41a));
s1 = _farnspeekb(0x417) & 0x80;
s2 = _farnspeekb(0x418) & 0xFC;
s3 = _farnspeekb(0x496) & 0xF3;
if (pc_key[KEY_RSHIFT]) { s1 |= 1; }
if (pc_key[KEY_LSHIFT]) { s1 |= 2; }
if (pc_key[KEY_LCONTROL]) { s2 |= 1; s1 |= 4; }
if (pc_key[KEY_ALT]) { s1 |= 8; s2 |= 2; }
if (pc_key[KEY_RCONTROL]) { s1 |= 4; s3 |= 4; }
if (pc_key[KEY_ALTGR]) { s1 |= 8; s3 |= 8; }
if (key_shifts & KB_SCROLOCK_FLAG) s1 |= 16;
if (key_shifts & KB_NUMLOCK_FLAG) s1 |= 32;
if (key_shifts & KB_CAPSLOCK_FLAG) s1 |= 64;
_farnspokeb(0x417, s1);
_farnspokeb(0x418, s2);
_farnspokeb(0x496, s3);
update_leds(key_shifts);
ENABLE();
pc_remove_irq(KEYB_IRQ);
}
}
int
pc_install_keyb (void)
{
if (keyboard_installed || pc_install_irq(KEYB_IRQ, keyboard)) {
return -1;
} else {
int s1, s2, s3;
LOCKDATA(key_buffer);
LOCKDATA(key_enhanced);
LOCKDATA(key_pause_loop);
LOCKDATA(key_shifts);
LOCKDATA(leds_ok);
LOCKDATA(in_a_terrupt);
LOCKDATA(pc_key);
LOCKDATA(modifier_table);
LOCKDATA(hw_to_mycode);
LOCKDATA(hw_to_mycode_ex);
LOCKDATA(standard_key_ascii_table);
LOCKDATA(standard_key_capslock_table);
LOCKDATA(standard_key_shift_table);
LOCKDATA(standard_key_control_table);
LOCKDATA(numlock_table);
LOCKFUNC(update_leds);
LOCKFUNC(inject_key);
LOCKFUNC(handle_code);
LOCKFUNC(keyboard);
DISABLE();
_farsetsel(__djgpp_dos_sel);
_farnspokew(0x41c, _farnspeekw(0x41a));
key_shifts = 0;
s1 = _farnspeekb(0x417);
s2 = _farnspeekb(0x418);
s3 = _farnspeekb(0x496);
if (s1 & 1) { key_shifts |= KB_SHIFT_FLAG; pc_key[KEY_RSHIFT] = TRUE; }
if (s1 & 2) { key_shifts |= KB_SHIFT_FLAG; pc_key[KEY_LSHIFT] = TRUE; }
if (s2 & 1) { key_shifts |= KB_CTRL_FLAG; pc_key[KEY_LCONTROL] = TRUE; }
if (s2 & 2) { key_shifts |= KB_ALT_FLAG; pc_key[KEY_ALT] = TRUE; }
if (s3 & 4) { key_shifts |= KB_CTRL_FLAG; pc_key[KEY_RCONTROL] = TRUE; }
if (s3 & 8) { key_shifts |= KB_ALT_FLAG; pc_key[KEY_ALTGR] = TRUE; }
if (s1 & 16) key_shifts |= KB_SCROLOCK_FLAG;
if (s1 & 32) key_shifts |= KB_NUMLOCK_FLAG;
if (s1 & 64) key_shifts |= KB_CAPSLOCK_FLAG;
update_leds(key_shifts);
key_enhanced = key_pause_loop = 0;
key_buffer.start = key_buffer.end = 0;
ENABLE();
pc_atexit(pc_remove_keyb);
keyboard_installed = TRUE;
return 0;
}
}
/*
* PC/HW routine collection v1.3 for DOS/DJGPP
*
* Copyright (C) 2002 - Daniel Borca
* Email : dborca@yahoo.com
* Web : http://www.geocities.com/dborca
*/
#include <dpmi.h>
#include <fcntl.h>
#include <sys/stat.h> /* for mode definitions */
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include "pc_hw.h"
/*
* atexit
*/
#define MAX_ATEXIT 32
static volatile int atexitcnt;
static VFUNC atexittbl[MAX_ATEXIT];
static void __attribute__((destructor))
doexit (void)
{
while (atexitcnt) atexittbl[--atexitcnt]();
}
int
pc_clexit (VFUNC f)
{
int i;
for (i = 0; i < atexitcnt; i++) {
if (atexittbl[i] == f) {
for (atexitcnt--; i < atexitcnt; i++) atexittbl[i] = atexittbl[i+1];
atexittbl[i] = 0;
return 0;
}
}
return -1;
}
int
pc_atexit (VFUNC f)
{
pc_clexit(f);
if (atexitcnt < MAX_ATEXIT) {
atexittbl[atexitcnt++] = f;
return 0;
}
return -1;
}
/*
* locked memory allocation
*/
void *
pc_malloc (size_t size)
{
void *p = malloc(size);
if (p) {
if (_go32_dpmi_lock_data(p, size)) {
free(p);
return NULL;
}
}
return p;
}
/*
* standard redirection
*/
static char outname[L_tmpnam];
static int h_out, h_outbak;
static char errname[L_tmpnam];
static int h_err, h_errbak;
int
pc_open_stdout (void)
{
tmpnam(outname);
if ((h_out=open(outname, O_WRONLY | O_CREAT | O_TEXT | O_TRUNC, S_IREAD | S_IWRITE)) > 0) {
h_outbak = dup(STDOUT_FILENO);
fflush(stdout);
dup2(h_out, STDOUT_FILENO);
}
return h_out;
}
void
pc_close_stdout (void)
{
FILE *f;
char *line = alloca(512);
if (h_out > 0) {
dup2(h_outbak, STDOUT_FILENO);
close(h_out);
close(h_outbak);
f = fopen(outname, "rt");
while (fgets(line, 512, f)) {
fputs(line, stdout);
}
fclose(f);
remove(outname);
}
}
int
pc_open_stderr (void)
{
tmpnam(errname);
if ((h_err=open(errname, O_WRONLY | O_CREAT | O_TEXT | O_TRUNC, S_IREAD | S_IWRITE)) > 0) {
h_errbak = dup(STDERR_FILENO);
fflush(stderr);
dup2(h_err, STDERR_FILENO);
}
return h_err;
}
void
pc_close_stderr (void)
{
FILE *f;
char *line = alloca(512);
if (h_err > 0) {
dup2(h_errbak, STDERR_FILENO);
close(h_err);
close(h_errbak);
f = fopen(errname, "rt");
while (fgets(line, 512, f)) {
fputs(line, stderr);
}
fclose(f);
remove(errname);
}
}
/*
* PC/HW routine collection v1.4 for DOS/DJGPP
*
* Copyright (C) 2002 - Daniel Borca
* Email : dborca@yahoo.com
* Web : http://www.geocities.com/dborca
*/
#ifndef PC_HW_H_included
#define PC_HW_H_included
#include <dpmi.h>
#include <stdlib.h>
/*
* misc C definitions
*/
#define FALSE 0
#define TRUE !FALSE
#define SQR(x) ((x) * (x))
#define MIN(x,y) (((x) < (y)) ? (x) : (y))
#define MAX(x,y) (((x) > (y)) ? (x) : (y))
#define MID(x,y,z) MAX((x), MIN((y), (z)))
typedef void (*VFUNC) (void);
typedef void (*PFUNC) (void *);
typedef void (*MFUNC) (int x, int y, int z, int b);
/*
* atexit
*/
int pc_atexit (VFUNC f);
int pc_clexit (VFUNC f);
/*
* locked memory
*/
#define ENDOFUNC(x) static void x##_end() { }
#define LOCKFUNC(x) _go32_dpmi_lock_code((void *)x, (long)x##_end - (long)x)
#define LOCKDATA(x) _go32_dpmi_lock_data((void *)&x, sizeof(x))
#define LOCKBUFF(x, l) _go32_dpmi_lock_data((void *)x, l)
void *pc_malloc (size_t size);
/*
* IRQ
*/
#define ENABLE() __asm __volatile ("sti")
#define DISABLE() __asm __volatile ("cli")
extern int pc_install_irq (int i, int (*handler) ());
extern int pc_remove_irq (int i);
/*
* keyboard
*/
#define KB_SHIFT_FLAG 0x0001
#define KB_CTRL_FLAG 0x0002
#define KB_ALT_FLAG 0x0004
#define KB_LWIN_FLAG 0x0008
#define KB_RWIN_FLAG 0x0010
#define KB_MENU_FLAG 0x0020
#define KB_SCROLOCK_FLAG 0x0100
#define KB_NUMLOCK_FLAG 0x0200
#define KB_CAPSLOCK_FLAG 0x0400
#define KB_INALTSEQ_FLAG 0x0800
#define KB_ACCENT1_FLAG 0x1000
#define KB_ACCENT2_FLAG 0x2000
#define KB_ACCENT3_FLAG 0x4000
#define KB_ACCENT4_FLAG 0x8000
#define KEY_A 1
#define KEY_B 2
#define KEY_C 3
#define KEY_D 4
#define KEY_E 5
#define KEY_F 6
#define KEY_G 7
#define KEY_H 8
#define KEY_I 9
#define KEY_J 10
#define KEY_K 11
#define KEY_L 12
#define KEY_M 13
#define KEY_N 14
#define KEY_O 15
#define KEY_P 16
#define KEY_Q 17
#define KEY_R 18
#define KEY_S 19
#define KEY_T 20
#define KEY_U 21
#define KEY_V 22
#define KEY_W 23
#define KEY_X 24
#define KEY_Y 25
#define KEY_Z 26
#define KEY_0 27
#define KEY_1 28
#define KEY_2 29
#define KEY_3 30
#define KEY_4 31
#define KEY_5 32
#define KEY_6 33
#define KEY_7 34
#define KEY_8 35
#define KEY_9 36
#define KEY_0_PAD 37
#define KEY_1_PAD 38
#define KEY_2_PAD 39
#define KEY_3_PAD 40
#define KEY_4_PAD 41
#define KEY_5_PAD 42
#define KEY_6_PAD 43
#define KEY_7_PAD 44
#define KEY_8_PAD 45
#define KEY_9_PAD 46
#define KEY_F1 47
#define KEY_F2 48
#define KEY_F3 49
#define KEY_F4 50
#define KEY_F5 51
#define KEY_F6 52
#define KEY_F7 53
#define KEY_F8 54
#define KEY_F9 55
#define KEY_F10 56
#define KEY_F11 57
#define KEY_F12 58
#define KEY_ESC 59
#define KEY_TILDE 60
#define KEY_MINUS 61
#define KEY_EQUALS 62
#define KEY_BACKSPACE 63
#define KEY_TAB 64
#define KEY_OPENBRACE 65
#define KEY_CLOSEBRACE 66
#define KEY_ENTER 67
#define KEY_COLON 68
#define KEY_QUOTE 69
#define KEY_BACKSLASH 70
#define KEY_BACKSLASH2 71
#define KEY_COMMA 72
#define KEY_STOP 73
#define KEY_SLASH 74
#define KEY_SPACE 75
#define KEY_INSERT 76
#define KEY_DEL 77
#define KEY_HOME 78
#define KEY_END 79
#define KEY_PGUP 80
#define KEY_PGDN 81
#define KEY_LEFT 82
#define KEY_RIGHT 83
#define KEY_UP 84
#define KEY_DOWN 85
#define KEY_SLASH_PAD 86
#define KEY_ASTERISK 87
#define KEY_MINUS_PAD 88
#define KEY_PLUS_PAD 89
#define KEY_DEL_PAD 90
#define KEY_ENTER_PAD 91
#define KEY_PRTSCR 92
#define KEY_PAUSE 93
#define KEY_ABNT_C1 94
#define KEY_YEN 95
#define KEY_KANA 96
#define KEY_CONVERT 97
#define KEY_NOCONVERT 98
#define KEY_AT 99
#define KEY_CIRCUMFLEX 100
#define KEY_COLON2 101
#define KEY_KANJI 102
#define KEY_MODIFIERS 103
#define KEY_LSHIFT 103
#define KEY_RSHIFT 104
#define KEY_LCONTROL 105
#define KEY_RCONTROL 106
#define KEY_ALT 107
#define KEY_ALTGR 108
#define KEY_LWIN 109
#define KEY_RWIN 110
#define KEY_MENU 111
#define KEY_SCRLOCK 112
#define KEY_NUMLOCK 113
#define KEY_CAPSLOCK 114
#define KEY_MAX 115
int pc_install_keyb (void);
void pc_remove_keyb (void);
int pc_keypressed (void);
int pc_readkey (void);
int pc_keydown (int code);
int pc_keyshifts (void);
/*
* timer
*/
int pc_install_int (PFUNC func, void *parm, unsigned int freq);
int pc_remove_int (int fid);
int pc_adjust_int (int fid, unsigned int freq);
void pc_remove_timer (void);
/*
* mouse
*/
int pc_install_mouse (void);
void pc_remove_mouse (void);
MFUNC pc_install_mouse_handler (MFUNC handler);
void pc_mouse_area (int x1, int y1, int x2, int y2);
void pc_mouse_speed (int xspeed, int yspeed);
int pc_query_mouse (int *x, int *y, int *z);
void pc_warp_mouse (int x, int y);
/*
* standard redirection
*/
int pc_open_stdout (void);
int pc_open_stderr (void);
void pc_close_stdout (void);
void pc_close_stderr (void);
#endif
/*
* PC/HW routine collection v1.3 for DOS/DJGPP
*
* Copyright (C) 2002 - Daniel Borca
* Email : dborca@yahoo.com
* Web : http://www.geocities.com/dborca
*/
.file "pc_irq.S"
.text
#define IRQ_STACK_SIZE 16384
#define IRQ_WRAPPER_LEN (__irq_wrapper_1-__irq_wrapper_0)
#define IRQ_OLD (__irq_old_0-__irq_wrapper_0)
#define IRQ_HOOK (__irq_hook_0-__irq_wrapper_0)
#define IRQ_STACK (__irq_stack_0-__irq_wrapper_0)
.balign 4
common:
movw $0x0400, %ax
int $0x31
movl %ss:8(%ebp), %ebx
cmpl $15, %ebx
jbe 0f
fail:
orl $-1, %eax
popl %edi
popl %ebx
leave
ret
0:
movl %ebx, %edi
imull $IRQ_WRAPPER_LEN, %edi
addl $__irq_wrapper_0, %edi
cmpb $7, %bl
jbe 1f
movb %dl, %dh
subb $8, %dh
1:
addb %dh, %bl
ret
.balign 4
.global _pc_install_irq
_pc_install_irq:
pushl %ebp
movl %esp, %ebp
pushl %ebx
pushl %edi
call common
cmpl $0, IRQ_HOOK(%edi)
jne fail
pushl $IRQ_WRAPPER_LEN
pushl %edi
call __go32_dpmi_lock_code
addl $8, %esp
testl %eax, %eax
jnz fail
pushl $IRQ_STACK_SIZE
call _pc_malloc
popl %edx
testl %eax, %eax
jz fail
addl %edx, %eax
movl %eax, IRQ_STACK(%edi)
movl ___djgpp_ds_alias, %eax
movl %eax, IRQ_STACK+4(%edi)
movl %ss:12(%ebp), %eax
movl %eax, IRQ_HOOK(%edi)
movw $0x0204, %ax
int $0x31
movl %edx, IRQ_OLD(%edi)
movw %cx, IRQ_OLD+4(%edi)
movw $0x0205, %ax
movl %edi, %edx
movl %cs, %ecx
int $0x31
done:
xorl %eax, %eax
popl %edi
popl %ebx
leave
ret
.balign 4
.global _pc_remove_irq
_pc_remove_irq:
pushl %ebp
movl %esp, %ebp
pushl %ebx
pushl %edi
call common
cmpl $0, IRQ_HOOK(%edi)
je fail
movl $0, IRQ_HOOK(%edi)
movw $0x0205, %ax
movl IRQ_OLD(%edi), %edx
movl IRQ_OLD+4(%edi), %ecx
int $0x31
movl IRQ_STACK(%edi), %eax
subl $IRQ_STACK_SIZE, %eax
pushl %eax
call _free
popl %eax
jmp done
#define WRAPPER(x) ; \
.balign 4 ; \
__irq_wrapper_##x: ; \
pushal ; \
pushl %ds ; \
pushl %es ; \
pushl %fs ; \
pushl %gs ; \
movl %ss, %ebx ; \
movl %esp, %esi ; \
lss %cs:__irq_stack_##x, %esp ; \
pushl %ss ; \
pushl %ss ; \
popl %es ; \
popl %ds ; \
movl ___djgpp_dos_sel, %fs ; \
pushl %fs ; \
popl %gs ; \
call *__irq_hook_##x ; \
movl %ebx, %ss ; \
movl %esi, %esp ; \
testl %eax, %eax ; \
popl %gs ; \
popl %fs ; \
popl %es ; \
popl %ds ; \
popal ; \
jz __irq_ignore_##x ; \
__irq_bypass_##x: ; \
ljmp *%cs:__irq_old_##x ; \
__irq_ignore_##x: ; \
iret ; \
.balign 4 ; \
__irq_old_##x: ; \
.long 0, 0 ; \
__irq_hook_##x: ; \
.long 0 ; \
__irq_stack_##x: ; \
.long 0, 0
WRAPPER(0);
WRAPPER(1);
WRAPPER(2);
WRAPPER(3);
WRAPPER(4);
WRAPPER(5);
WRAPPER(6);
WRAPPER(7);
WRAPPER(8);
WRAPPER(9);
WRAPPER(10);
WRAPPER(11);
WRAPPER(12);
WRAPPER(13);
WRAPPER(14);
WRAPPER(15);
/*
* PC/HW routine collection v1.3 for DOS/DJGPP
*
* Copyright (C) 2002 - Daniel Borca
* Email : dborca@yahoo.com
* Web : http://www.geocities.com/dborca
*/
#include <dpmi.h>
#include <sys/exceptn.h>
#include <sys/segments.h>
#include "pc_hw.h"
#define PC_CUTE_WHEEL 1 /* CuteMouse WheelAPI */
#define MOUSE_STACK_SIZE 16384
#define CLEAR_MICKEYS() \
do { \
__asm __volatile ("movw $0xb, %%ax; int $0x33":::"%eax", "%ecx", "%edx"); \
ox = oy = 0; \
} while (0)
extern void mouse_wrap (void);
extern int mouse_wrap_end[];
static MFUNC mouse_func;
static long mouse_callback;
static __dpmi_regs mouse_regs;
static volatile struct {
volatile int x, y, z, b;
} pc_mouse;
static int minx = 0;
static int maxx = 319;
static int miny = 0;
static int maxy = 199;
static int minz = 0;
static int maxz = 255;
static int sx = 2;
static int sy = 2;
static int emulat3 = FALSE;
static int ox, oy;
static void
mouse (__dpmi_regs *r)
{
int nx = (signed short)r->x.si / sx;
int ny = (signed short)r->x.di / sy;
int dx = nx - ox;
int dy = ny - oy;
#if PC_CUTE_WHEEL
int dz = (signed char)r->h.bh;
#endif
ox = nx;
oy = ny;
pc_mouse.b = r->h.bl;
pc_mouse.x = MID(minx, pc_mouse.x + dx, maxx);
pc_mouse.y = MID(miny, pc_mouse.y + dy, maxy);
#if PC_CUTE_WHEEL
pc_mouse.z = MID(minz, pc_mouse.z + dz, maxz);
#endif
if (emulat3) {
if ((pc_mouse.b & 3) == 3) {
pc_mouse.b = 4;
}
}
if (mouse_func) {
mouse_func(pc_mouse.x, pc_mouse.y, pc_mouse.z, pc_mouse.b);
}
} ENDOFUNC(mouse)
void
pc_remove_mouse (void)
{
if (mouse_callback) {
pc_clexit(pc_remove_mouse);
__asm("\n\
movl %%edx, %%ecx \n\
shrl $16, %%ecx \n\
movw $0x0304, %%ax \n\
int $0x31 \n\
movw $0x000c, %%ax \n\
xorl %%ecx, %%ecx \n\
int $0x33 \n\
"::"d"(mouse_callback):"%eax", "%ecx");
mouse_callback = 0;
free((void *)(mouse_wrap_end[0] - MOUSE_STACK_SIZE));
}
}
int
pc_install_mouse (void)
{
int buttons;
/* fail if already call-backed */
if (mouse_callback) {
return 0;
}
/* reset mouse and get status */
__asm("\n\
xorl %%eax, %%eax \n\
int $0x33 \n\
andl %%ebx, %%eax \n\
movl %%eax, %0 \n\
":"=g" (buttons)::"%eax", "%ebx");
if (!buttons) {
return 0;
}
/* lock wrapper */
LOCKDATA(mouse_func);
LOCKDATA(mouse_callback);
LOCKDATA(mouse_regs);
LOCKDATA(pc_mouse);
LOCKDATA(minx);
LOCKDATA(maxx);
LOCKDATA(miny);
LOCKDATA(maxy);
LOCKDATA(minz);
LOCKDATA(maxz);
LOCKDATA(sx);
LOCKDATA(sy);
LOCKDATA(emulat3);
LOCKDATA(ox);
LOCKDATA(oy);
LOCKFUNC(mouse);
LOCKFUNC(mouse_wrap);
mouse_wrap_end[1] = __djgpp_ds_alias;
/* grab a locked stack */
if ((mouse_wrap_end[0] = (int)pc_malloc(MOUSE_STACK_SIZE)) == NULL) {
return 0;
}
/* try to hook a call-back */
__asm("\n\
pushl %%ds \n\
pushl %%es \n\
movw $0x0303, %%ax \n\
pushl %%ds \n\
pushl %%cs \n\
popl %%ds \n\
popl %%es \n\
int $0x31 \n\
popl %%es \n\
popl %%ds \n\
jc 0f \n\
shll $16, %%ecx \n\
movw %%dx, %%cx \n\
movl %%ecx, %0 \n\
0: \n\
":"=g"(mouse_callback)
:"S" (mouse_wrap), "D"(&mouse_regs)
:"%eax", "%ecx", "%edx");
if (!mouse_callback) {
free((void *)mouse_wrap_end[0]);
return 0;
}
/* adjust stack */
mouse_wrap_end[0] += MOUSE_STACK_SIZE;
/* install the handler */
mouse_regs.x.ax = 0x000c;
#if PC_CUTE_WHEEL
mouse_regs.x.cx = 0x7f | 0x80;
#else
mouse_regs.x.cx = 0x7f;
#endif
mouse_regs.x.dx = mouse_callback & 0xffff;
mouse_regs.x.es = mouse_callback >> 16;
__dpmi_int(0x33, &mouse_regs);
CLEAR_MICKEYS();
emulat3 = (buttons < 3);
pc_atexit(pc_remove_mouse);
return buttons;
}
MFUNC
pc_install_mouse_handler (MFUNC handler)
{
MFUNC old;
if (!mouse_callback && !pc_install_mouse()) {
return NULL;
}
old = mouse_func;
mouse_func = handler;
return old;
}
void
pc_mouse_area (int x1, int y1, int x2, int y2)
{
minx = x1;
maxx = x2;
miny = y1;
maxy = y2;
}
void
pc_mouse_speed (int xspeed, int yspeed)
{
DISABLE();
sx = MAX(1, xspeed);
sy = MAX(1, yspeed);
ENABLE();
}
int
pc_query_mouse (int *x, int *y, int *z)
{
*x = pc_mouse.x;
*y = pc_mouse.y;
*z = pc_mouse.z;
return pc_mouse.b;
}
void
pc_warp_mouse (int x, int y)
{
CLEAR_MICKEYS();
pc_mouse.x = MID(minx, x, maxx);
pc_mouse.y = MID(miny, y, maxy);
if (mouse_func) {
mouse_func(pc_mouse.x, pc_mouse.y, pc_mouse.z, pc_mouse.b);
}
}
/* Hack alert:
* `mouse_wrap_end' actually holds the
* address of stack in a safe data selector.
*/
__asm("\n\
.text \n\
.p2align 5,,31 \n\
.global _mouse_wrap \n\
_mouse_wrap: \n\
cld \n\
lodsl \n\
movl %eax, %es:42(%edi) \n\
addw $4, %es:46(%edi) \n\
pushl %es \n\
movl %ss, %ebx \n\
movl %esp, %esi \n\
lss %cs:_mouse_wrap_end, %esp\n\
pushl %ss \n\
pushl %ss \n\
popl %es \n\
popl %ds \n\
movl ___djgpp_dos_sel, %fs \n\
pushl %fs \n\
popl %gs \n\
pushl %edi \n\
call _mouse \n\
popl %edi \n\
movl %ebx, %ss \n\
movl %esi, %esp \n\
popl %es \n\
iret \n\
.global _mouse_wrap_end \n\
_mouse_wrap_end:.long 0, 0");
/*
* PC/HW routine collection v1.5 for DOS/DJGPP
*
* Copyright (C) 2002 - Daniel Borca
* Email : dborca@yahoo.com
* Web : http://www.geocities.com/dborca
*/
#include <pc.h>
#include <string.h>
#include "pc_hw.h"
#define TIMER_IRQ 0
#define MAX_TIMERS 8
#define PIT_FREQ 0x1234DD
#define ADJUST(timer, basefreq) timer.counter = PIT_FREQ * timer.freq / SQR(basefreq)
#define unvolatile(__v, __t) __extension__ ({union { volatile __t __cp; __t __p; } __q; __q.__cp = __v; __q.__p;})
static int timer_installed;
typedef struct {
volatile unsigned int counter, clock_ticks, freq;
volatile PFUNC func;
volatile void *parm;
} TIMER;
static TIMER timer_main, timer_func[MAX_TIMERS];
/* Desc: main timer callback
*
* In : -
* Out : 0 to bypass BIOS, 1 to chain to BIOS
*
* Note: -
*/
static int
timer ()
{
int i;
for (i = 0; i < MAX_TIMERS; i++) {
TIMER *t = &timer_func[i];
if (t->func) {
t->clock_ticks += t->counter;
if (t->clock_ticks >= timer_main.counter) {
t->clock_ticks -= timer_main.counter;
t->func(unvolatile(t->parm, void *));
}
}
}
timer_main.clock_ticks += timer_main.counter;
if (timer_main.clock_ticks >= 0x10000) {
timer_main.clock_ticks -= 0x10000;
return 1;
} else {
outportb(0x20, 0x20);
return 0;
}
} ENDOFUNC(timer)
/* Desc: uninstall timer engine
*
* In : -
* Out : -
*
* Note: -
*/
void
pc_remove_timer (void)
{
if (timer_installed) {
timer_installed = FALSE;
pc_clexit(pc_remove_timer);
DISABLE();
outportb(0x43, 0x34);
outportb(0x40, 0);
outportb(0x40, 0);
ENABLE();
pc_remove_irq(TIMER_IRQ);
}
}
/* Desc: remove timerfunc
*
* In : timerfunc id
* Out : 0 if success
*
* Note: tries to relax the main timer whenever possible
*/
int
pc_remove_int (int fid)
{
int i;
unsigned int freq = 0;
/* are we installed? */
if (!timer_installed) {
return -1;
}
/* sanity check */
if ((fid < 0) || (fid >= MAX_TIMERS) || (timer_func[fid].func == NULL)) {
return -1;
}
timer_func[fid].func = NULL;
/* scan for maximum frequency */
for (i = 0; i < MAX_TIMERS; i++) {
TIMER *t = &timer_func[i];
if (t->func) {
if (freq < t->freq) {
freq = t->freq;
}
}
}
/* if there are no callbacks left, cleanup */
if (!freq) {
pc_remove_timer();
return 0;
}
/* if we just lowered the maximum frequency, try to relax the timer engine */
if (freq < timer_main.freq) {
unsigned int new_counter = PIT_FREQ / freq;
DISABLE();
for (i = 0; i < MAX_TIMERS; i++) {
if (timer_func[i].func) {
ADJUST(timer_func[i], freq);
}
}
outportb(0x43, 0x34);
outportb(0x40, (unsigned char)new_counter);
outportb(0x40, (unsigned char)(new_counter>>8));
timer_main.clock_ticks = 0;
timer_main.counter = new_counter;
timer_main.freq = freq;
ENABLE();
}
return 0;
} ENDOFUNC(pc_remove_int)
/* Desc: adjust timerfunc
*
* In : timerfunc id, new frequency (Hz)
* Out : 0 if success
*
* Note: might change the main timer frequency
*/
int
pc_adjust_int (int fid, unsigned int freq)
{
int i;
/* are we installed? */
if (!timer_installed) {
return -1;
}
/* sanity check */
if ((fid < 0) || (fid >= MAX_TIMERS) || (timer_func[fid].func == NULL)) {
return -1;
}
timer_func[fid].freq = freq;
/* scan for maximum frequency */
freq = 0;
for (i = 0; i < MAX_TIMERS; i++) {
TIMER *t = &timer_func[i];
if (t->func) {
if (freq < t->freq) {
freq = t->freq;
}
}
}
/* update main timer / sons to match highest frequency */
DISABLE();
/* using '>' is correct still (and avoids updating
* the HW timer too often), but doesn't relax the timer!
*/
if (freq != timer_main.freq) {
unsigned int new_counter = PIT_FREQ / freq;
for (i = 0; i < MAX_TIMERS; i++) {
if (timer_func[i].func) {
ADJUST(timer_func[i], freq);
}
}
outportb(0x43, 0x34);
outportb(0x40, (unsigned char)new_counter);
outportb(0x40, (unsigned char)(new_counter>>8));
timer_main.clock_ticks = 0;
timer_main.counter = new_counter;
timer_main.freq = freq;
} else {
ADJUST(timer_func[fid], timer_main.freq);
}
ENABLE();
return 0;
} ENDOFUNC(pc_adjust_int)
/* Desc: install timer engine
*
* In : -
* Out : 0 for success
*
* Note: initial frequency is 18.2 Hz
*/
static int
install_timer (void)
{
if (timer_installed || pc_install_irq(TIMER_IRQ, timer)) {
return -1;
} else {
memset(timer_func, 0, sizeof(timer_func));
LOCKDATA(timer_func);
LOCKDATA(timer_main);
LOCKFUNC(timer);
LOCKFUNC(pc_adjust_int);
LOCKFUNC(pc_remove_int);
timer_main.counter = 0x10000;
DISABLE();
outportb(0x43, 0x34);
outportb(0x40, 0);
outportb(0x40, 0);
timer_main.clock_ticks = 0;
ENABLE();
pc_atexit(pc_remove_timer);
timer_installed = TRUE;
return 0;
}
}
/* Desc: install timerfunc
*
* In : callback function, opaque pointer to be passed to callee, freq (Hz)
* Out : timerfunc id (0 .. MAX_TIMERS-1)
*
* Note: returns -1 if error
*/
int
pc_install_int (PFUNC func, void *parm, unsigned int freq)
{
int i;
TIMER *t = NULL;
/* ensure the timer engine is set up */
if (!timer_installed) {
if (install_timer()) {
return -1;
}
}
/* find an empty slot */
for (i = 0; i < MAX_TIMERS; i++) {
if (!timer_func[i].func) {
t = &timer_func[i];
break;
}
}
if (t == NULL) {
return -1;
}
DISABLE();
t->func = func;
t->parm = parm;
t->freq = freq;
t->clock_ticks = 0;
/* update main timer / sons to match highest frequency */
if (freq > timer_main.freq) {
unsigned int new_counter = PIT_FREQ / freq;
for (i = 0; i < MAX_TIMERS; i++) {
if (timer_func[i].func) {
ADJUST(timer_func[i], freq);
}
}
outportb(0x43, 0x34);
outportb(0x40, (unsigned char)new_counter);
outportb(0x40, (unsigned char)(new_counter>>8));
timer_main.clock_ticks = 0;
timer_main.counter = new_counter;
timer_main.freq = freq;
} else {
/* t == &timer_func[i] */
ADJUST(timer_func[i], timer_main.freq);
}
i = t - timer_func;
ENABLE();
return i;
}
/* **************************************************************************
* ggiglut.c
* **************************************************************************
*
* Copyright (C) 1998 Uwe Maurer - uwe_maurer@t-online.de
* Copyright (C) 1999 James Simmons
* Copyright (C) 1999 Jon Taylor
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* **************************************************************************
* To-do:
* - Make everything use the portable ggi_* types
*
*/
#define BUILDING_GGIGLUT
#define WIDTH 640
#define HEIGHT 480
#define GRAPHTYPE_RGB GT_16BIT
#define GRAPHTYPE_INDEX GT_8BIT
/*************************************************************************/
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>
#include <stdio.h>
#include <stdarg.h>
#include <string.h>
#include "GL/ggimesa.h"
#include "debug.h"
#include <ggi/ggi.h>
#include <ggi/gii.h>
int _ggiglutDebugSync = 0;
uint32 _ggiglutDebugState = 0;
char *__glutProgramName = "GGI";
static ggi_visual_t __glut_vis;
static ggi_mesa_context_t __glut_ctx;
//static int __glut_width = WIDTH;
//static int __glut_height = HEIGHT;
//static ggi_graphtype __glut_gt_rgb = GRAPHTYPE_RGB;
//static ggi_graphtype __glut_gt_index = GRAPHTYPE_INDEX;
static int __glut_width = GGI_AUTO;
static int __glut_height = GGI_AUTO;
static ggi_graphtype __glut_gt_rgb = GT_AUTO;
static ggi_graphtype __glut_gt_index = GT_8BIT;
static int __glut_init = GL_FALSE;
static int mousex = WIDTH / 2;
static int mousey = HEIGHT / 2;
static int mouse_moved = GL_FALSE;
static int mouse_down = GL_FALSE;
static int mouse_showcursor = GL_FALSE;
static void (*__glut_reshape)(int, int);
static void (*__glut_display)(void);
static void (*__glut_idle)(void);
static void (*__glut_keyboard)(unsigned char, int, int);
static void (*__glut_special)(int, int, int);
static void (*__glut_mouse)(int, int, int, int);
static void (*__glut_motion)(int, int);
static void (*__glut_passive_motion)(int, int);
static void (*__glut_visibility)(int);
static unsigned int __glut_mode = GLUT_RGB | GLUT_SINGLE | GLUT_DEPTH;
static int __glut_mod_keys = 0;
static int __glut_redisplay = GL_FALSE;
/* Menu */
static int __glut_menubutton = -1;
static int __glut_menuactive = GL_FALSE;
#define MAX_ENTRIES 64
typedef struct menu_s
{
char *label[MAX_ENTRIES];
int value[MAX_ENTRIES];
struct menu_s * submenu[MAX_ENTRIES];
void (*func)(int);
int max_strlen;
int num_entries;
} menu_t;
static menu_t *mainmenu;
static menu_t *curmenu;
static menu_t *activemenu;
void glutInit(int *argc, char **argv)
{
ggi_graphtype gt;
int i, k;
char *str;
GGIGLUTDPRINT_CORE("glutInit() called\n");
#define REMOVE {for (k=i;k<*argc-1;k++) argv[k]=argv[k+1]; \
(*argc)--; i--; }
if (__glut_init) return;
str = getenv("GGIGLUT_DEBUG");
if (str != NULL) {
_ggiglutDebugState = atoi(str);
fprintf(stderr, "Debugging=%d\n", _ggiglutDebugState);
GGIGLUTDPRINT_CORE("Debugging=%d\n", _ggiglutDebugState);
}
str = getenv("GGIGLUT_DEBUGSYNC");
if (str != NULL) {
_ggiglutDebugSync = 1;
}
if (argc && argv)
{
for (i = 1; i < *argc; i++)
{
if (strcmp(argv[i], "-mouse") == 0)
{
mouse_showcursor = GL_TRUE;
REMOVE;
}
else
if (strcmp(argv[i], "-bpp") == 0 && (i + 1) < (*argc))
{
switch(atoi(argv[i + 1]))
{
case 4: gt = GT_4BIT; break;
case 8: gt = GT_8BIT; break;
case 15: gt = GT_15BIT; break;
case 16: gt = GT_16BIT; break;
case 24: gt = GT_24BIT; break;
case 32: gt = GT_32BIT; break;
default:
ggiPanic("\"%s\" bits per pixel?\n", argv[i+1]);
}
__glut_gt_rgb = __glut_gt_index = gt;
REMOVE;
REMOVE;
}
else
if (strcmp(argv[i], "-size") == 0 && (i + 2) < (*argc))
{
__glut_width = atoi(argv[i + 1]);
__glut_height = atoi(argv[i + 2]);
REMOVE;
REMOVE;
REMOVE;
}
}
}
if (ggiInit() < 0)
{
ggiPanic("ggiInit() failed!\n");
}
__glut_init = GL_TRUE;
#undef REMOVE
}
void glutInitWindowPosition(int x, int y)
{
GGIGLUTDPRINT_CORE("glutInitWindowPosition() called\n");
}
void glutInitWindowSize(int x, int y)
{
GGIGLUTDPRINT_CORE("glutInitWindowsSize() called\n");
}
void glutFullScreen(void)
{
GGIGLUTDPRINT_CORE("glutFullScreen() called\n");
}
void glutInitDisplayMode(unsigned int mode)
{
GGIGLUTDPRINT_CORE("glutInitDisplayMode() called\n");
__glut_mode = mode;
}
void glutInitDisplayString(const char *string)
{
GGIGLUTDPRINT_CORE("glutInitDisplayString(%s) called\n", string);
}
int glutCreateWindow(const char *title)
{
ggi_graphtype gt;
ggi_mode mode =
{
1,
{ GGI_AUTO, GGI_AUTO },
{ GGI_AUTO, GGI_AUTO },
{ 0, 0 },
GT_AUTO,
{ GGI_AUTO, GGI_AUTO }
};
int frames;
int rgb;
int err;
GGIGLUTDPRINT_CORE("glutCreateWindow() called\n");
if (!__glut_init)
glutInit(NULL, NULL);
GGIGLUTDPRINT("GGIGLUT: %s\n", title);
rgb = !(__glut_mode & GLUT_INDEX);
frames = (__glut_mode & GLUT_DOUBLE) ? 2 : 1;
gt = (rgb) ? __glut_gt_rgb : __glut_gt_index;
__glut_vis = ggiOpen(NULL);
if (__glut_vis == NULL)
{
ggiPanic("ggiOpen() failed!\n");
/* return GL_FALSE; */
}
ggiSetFlags(__glut_vis, GGIFLAG_ASYNC);
ggiCheckMode(__glut_vis, &mode);
err = ggiSetMode(__glut_vis, &mode);
if (err < 0)
{
ggiPanic("Can't set graphic mode!\n");
/* return GL_FALSE; */
}
if (ggiMesaExtendVisual(__glut_vis, GL_FALSE, GL_FALSE,
16, 0, 0, 0, 0, 0, 1) < 0)
{
ggiPanic("GGIMesaSetVisual failed!\n");
}
__glut_ctx = ggiMesaCreateContext(__glut_vis);
if (__glut_ctx == NULL)
ggiPanic("Can't create mesa-context\n");
ggiGetMode(__glut_vis, &mode);
__glut_width = mode.visible.x;
__glut_height = mode.visible.y;
mousex = mode.visible.x / 2;
mousey = mode.visible.y / 2;
ggiMesaMakeCurrent(__glut_ctx, __glut_vis);
if (__glut_reshape)
__glut_reshape(__glut_width, __glut_height);
return GL_TRUE;
}
void glutReshapeFunc(void (*func)(int, int))
{
GGIGLUTDPRINT_CORE("glutReshapeFunc() called\n");
__glut_reshape = func;
if (__glut_vis && __glut_reshape)
__glut_reshape(__glut_width, __glut_height);
}
void glutKeyboardFunc(void (*keyboard)(unsigned char key, int x, int y))
{
GGIGLUTDPRINT_CORE("glutKeyBoardFunc() called\n");
__glut_keyboard = keyboard;
}
int glutGetModifiers(void)
{
GGIGLUTDPRINT_CORE("glutGetModifiers() called\n");
return __glut_mod_keys;
}
void glutEntryFunc(void (*func)(int state))
{
GGIGLUTDPRINT_CORE("glutEntryFunc() called\n");
}
void glutVisibilitFunc(void (*func)(int state))
{
GGIGLUTDPRINT_CORE("glutVisibilityFunc() called\n");
}
void glutTimerFunc(unsigned int millis, void (*func)(int value), int value)
{
GGIGLUTDPRINT_CORE("glutTimerFunc() called\n");
}
void glutMenuStateFunc(void (*func)(int state))
{
GGIGLUTDPRINT_CORE("glutMenuStateFunc() called\n");
}
int glutGet(GLenum type)
{
GGIGLUTDPRINT_CORE("glutGet() called\n");
switch(type)
{
case GLUT_WINDOW_X:
return 0;
case GLUT_WINDOW_Y:
return 0;
case GLUT_WINDOW_WIDTH:
return __glut_width;
case GLUT_WINDOW_HEIGHT:
return __glut_height;
case GLUT_MENU_NUM_ITEMS:
if (curmenu)
return curmenu->num_entries;
else
return 0;
default:
GGIGLUTDPRINT("glutGet: unknown type %i\n", type);
}
return 0;
}
void glutSpecialFunc(void (*special)(int key, int x, int y))
{
GGIGLUTDPRINT_CORE("glutSpecialFunc() called\n");
__glut_special=special;
}
void glutDisplayFunc(void (*disp)(void))
{
GGIGLUTDPRINT_CORE("glutDisplayFunc() called\n");
__glut_display=disp;
}
void glutSetColor(int index, GLfloat red, GLfloat green, GLfloat blue)
{
ggi_color c;
GLfloat max;
GGIGLUTDPRINT_CORE("glutSetColor() called\n");
if (red > 1.0) red = 1.0;
if (red < 0.0) red = 0.0;
if (green > 1.0) green = 1.0;
if (green < 0.0) green = 0.0;
if (blue > 1.0) blue = 1.0;
if (blue < 0.0) blue = 0.0;
max = (float)((1 << GGI_COLOR_PRECISION) - 1);
c.r = (int)(max * red);
c.g = (int)(max * green);
c.b = (int)(max * blue);
ggiSetPalette(__glut_vis, index, 1, &c);
}
void glutPostRedisplay(void)
{
GGIGLUTDPRINT_CORE("glutPostRedisplay() called\n");
__glut_redisplay = GL_TRUE;
}
void glutPostWindowRedisplay(int win)
{
GGIGLUTDPRINT_CORE("glutPostWindowRedisplay() called\n");
__glut_redisplay = GL_TRUE;
}
void glutSwapBuffers(void)
{
GGIGLUTDPRINT_CORE("glutSwapBuffers() called\n");
ggiMesaSwapBuffers();
}
void glutIdleFunc(void (*idle)(void))
{
GGIGLUTDPRINT_CORE("glutIdleFunc() called\n");
__glut_idle = idle;
}
static void keyboard(ggi_event *ev)
{
int sym;
int modifer = 0, key = 0;
GGIGLUTDPRINT_CORE("keyboard() called\n");
sym = ev->key.sym;
modifer = ev->key.modifiers;
if (modifer == GII_KM_SHIFT)
__glut_mod_keys |= GLUT_ACTIVE_SHIFT;
if (modifer == GII_KM_CTRL)
__glut_mod_keys |= GLUT_ACTIVE_CTRL;
if (modifer == GII_KM_ALT)
__glut_mod_keys |= GLUT_ACTIVE_ALT;
/* if (__glut_special && key) __glut_special(GII_KTYP(key),0,0); */
if (__glut_keyboard)
// __glut_keyboard(GII_UNICODE(sym), 0, 0);
__glut_keyboard(sym, 0, 0);
}
static void mouseabs(ggi_event *ev)
{
int oldx = mousex;
int oldy = mousey;
mousex = ev->pmove.x;
mousey = ev->pmove.y;
if (mousex < 0) mousex = 0;
if (mousey < 0) mousey = 0;
if (mousex >= __glut_width) mousex = __glut_width - 1;
if (mousey >= __glut_height) mousey = __glut_height - 1;
if (mousex != oldx || mousey != oldy) mouse_moved = GL_TRUE;
}
static void mouse(ggi_event *ev)
{
int oldx = mousex;
int oldy = mousey;
GGIGLUTDPRINT_CORE("mouse() called\n");
mousex += ev->pmove.x >> 1;
mousey += ev->pmove.y >> 1;
if (mousex < 0) mousex = 0;
if (mousey < 0) mousey = 0;
if (mousex >= __glut_width) mousex = __glut_width - 1;
if (mousey >= __glut_height) mousey = __glut_height - 1;
if (mousex != oldx || mousey != oldy) mouse_moved = GL_TRUE;
}
static void showmenu(void);
static int clickmenu(void);
static void updatemouse(void);
static void drawmouse(void);
static void mousemove(void)
{
GGIGLUTDPRINT_CORE("mousemove() called\n");
if (mouse_moved) {
if (__glut_motion && mouse_down) {
__glut_motion(mousex,mousey);
}
if (__glut_passive_motion && (!mouse_down)) {
__glut_passive_motion(mousex,mousey);
}
if (__glut_menuactive) updatemouse();
mouse_moved=GL_FALSE;
}
}
static void button(ggi_event *ev)
{
int i;
int btn[4] = {
0,
GLUT_LEFT_BUTTON,
GLUT_RIGHT_BUTTON,
GLUT_MIDDLE_BUTTON
};
GGIGLUTDPRINT_CORE("button() called\n");
mousemove();
if (ev->pbutton.button <= 3) { /* GGI can have >3 buttons ! */
char state = ev->any.type == evPtrButtonPress ? GLUT_DOWN : GLUT_UP;
if (__glut_menuactive) {
if (state == GLUT_UP && clickmenu()) {
glutPostRedisplay();
__glut_menuactive = GL_FALSE;
}
} else
if (btn[ev->pbutton.button] == __glut_menubutton) {
__glut_menuactive = GL_TRUE;
activemenu = mainmenu;
showmenu();
} else
if (__glut_mouse) {
__glut_mouse(btn[ev->pbutton.button], state, mousex, mousey);
}
if (state == GLUT_DOWN) {
mouse_down |= (1 << (ev->pbutton.button - 1));
}
else mouse_down &= ~( 1 << (ev->pbutton.button - 1));
}
}
void glutMainLoop(void)
{
ggi_event ev;
ggi_event_mask evmask = (emKeyPress | emKeyRepeat | emPtrMove | emPtrButton);
GGIGLUTDPRINT_CORE("glutMainLoop() called\n");
ggiSetEventMask(__glut_vis, evmask);
glutPostRedisplay();
if (__glut_visibility)
__glut_visibility(GLUT_VISIBLE);
while (1)
{
if (!__glut_menuactive)
{
if (__glut_idle)
__glut_idle();
if (__glut_redisplay && __glut_display)
{
__glut_redisplay = GL_FALSE;
__glut_display();
}
}
while (1)
{
struct timeval t = {0, 0};
if (ggiEventPoll(__glut_vis, evmask, &t) == 0)
break;
ggiEventRead(__glut_vis, &ev, evmask);
switch (ev.any.type)
{
case evKeyPress:
case evKeyRepeat:
keyboard(&ev);
break;
case evPtrAbsolute:
mouseabs(&ev);
break;
case evPtrRelative:
mouse(&ev);
break;
case evPtrButtonPress:
case evPtrButtonRelease:
button(&ev);
break;
}
}
mousemove();
}
}
static void showmenu()
{
int y,i;
ggi_color col = { 0xffff, 0xffff, 0xffff };
GGIGLUTDPRINT_CORE("showmenu() called\n");
ggiSetGCForeground(__glut_vis,ggiMapColor(__glut_vis,&col));
ggiSetOrigin(__glut_vis,0,0);
for (y = i = 0; i < activemenu->num_entries; i++, y += 8) {
ggiPuts(__glut_vis, 0, y, activemenu->label[i]);
}
drawmouse();
}
static int clickmenu(void)
{
int i;
int w, h;
GGIGLUTDPRINT_CORE("clickmenu() called\n");
i = mousey / 8;
if (i >= activemenu->num_entries) return GL_TRUE;
if (mousex >= 8 * strlen(activemenu->label[i])) return GL_TRUE;
if (activemenu->submenu[i]) {
ggi_color col={0,0,0};
ggiSetGCForeground(__glut_vis,ggiMapColor(__glut_vis,&col));
h=activemenu->num_entries*8;
w=activemenu->max_strlen*8;
ggiDrawBox(__glut_vis,0,0,w,h);
activemenu=activemenu->submenu[i];
showmenu();
return GL_FALSE;
}
curmenu=activemenu;
activemenu->func(activemenu->value[i]);
return GL_TRUE;
}
static int oldx=-1;
static int oldy=-1;
static char buffer[16*16*4];
static void updatemouse()
{
GGIGLUTDPRINT_CORE("updatemouse() called\n");
ggiPutBox(__glut_vis,oldx,oldy,16,16,buffer);
drawmouse();
}
static void drawmouse()
{
int x,y;
GGIGLUTDPRINT_CORE("drawmouse() called\n");
x=mousex-8;
if (x<0) x=0;
y=mousey-8;
if (y<0) y=0;
ggiGetBox(__glut_vis,x,y,16,16,buffer);
ggiDrawLine(__glut_vis,mousex-2,mousey,mousex+2,mousey);
ggiDrawLine(__glut_vis,mousex,mousey-2,mousex,mousey+2);
oldx=x;
oldy=y;
}
int glutCreateMenu(void(*func)(int))
{
menu_t *m;
GGIGLUTDPRINT_CORE("glutCreateMenu() called\n");
m=malloc(sizeof(menu_t));
memset(m,0,sizeof(menu_t));
curmenu=m;
curmenu->func=func;
return (int)curmenu;
}
static void addEntry(const char *label,int value,menu_t *submenu)
{
int i=curmenu->num_entries;
GGIGLUTDPRINT_CORE("addEntry() called\n");
/* printf("%i %i %s %p\n",i,value,label,submenu); */
if (i<MAX_ENTRIES) {
curmenu->label[i]=strdup(label);
curmenu->value[i]=value;
curmenu->submenu[i]=submenu;
if (strlen(label)>curmenu->max_strlen)
curmenu->max_strlen=strlen(label);
curmenu->num_entries++;
}
}
void glutAddMenuEntry(const char *label,int value)
{
GGIGLUTDPRINT_CORE("glutAddMenuEntry() called\n");
addEntry(label,value,NULL);
}
void glutAddSubMenu(const char *label,int submenu)
{
char text[100];
GGIGLUTDPRINT_CORE("glutAddSubMenu() called\n");
if (!curmenu) return;
strncpy(text,label,98);
text[98]=0;
text[strlen(text)+1]=0;
text[strlen(text)]='>';
addEntry(text,0,(menu_t *) submenu);
}
void glutAttachMenu(int button)
{
GGIGLUTDPRINT_CORE("glutAttachMenu() called\n");
mainmenu=curmenu;
__glut_menubutton=button;
}
void glutDetachMenu(int button)
{
GGIGLUTDPRINT_CORE("glutDetachMenu() called\n");
}
void glutVisibilityFunc(void (*func)(int state))
{
GGIGLUTDPRINT_CORE("glutVisibilityFunc() called\n");
__glut_visibility=func;
}
void glutMouseFunc(void (*mouse)(int, int, int, int))
{
GGIGLUTDPRINT_CORE("glutMouseFunc() called\n");
__glut_mouse=mouse;
}
void glutMotionFunc(void (*motion)(int,int))
{
GGIGLUTDPRINT_CORE("glutMotionFunc() called\n");
__glut_motion=motion;
}
void glutPassiveMotionFunc(void (*motion)(int,int))
{
GGIGLUTDPRINT_CORE("glutPassiveMotionFunc() called\n");
__glut_passive_motion=motion;
}
void glutSetWindowTitle(const char *title)
{
GGIGLUTDPRINT_CORE("glutSetWindowTitle() called\n");
}
void glutSetIconTitle(const char *title)
{
GGIGLUTDPRINT_CORE("glutSetIconTitle() called\n");
}
void glutChangeToMenuEntry(int item,const char *label,int value)
{
GGIGLUTDPRINT_CORE("glutChangeToMenuEntry() called\n");
if (item>0 && item<=curmenu->num_entries) {
item--;
free(curmenu->label[item]);
curmenu->label[item]=strdup(label);
curmenu->value[item]=value;
curmenu->submenu[item]=NULL;
}
}
void glutChangeToSubMenu(int item,const char *label,int submenu)
{
GGIGLUTDPRINT_CORE("glutChengeToSubMenu() called\n");
if (item>0 && item<=curmenu->num_entries) {
item--;
free(curmenu->label[item]);
curmenu->label[item]=strdup(label);
curmenu->value[item]=0;
curmenu->submenu[item]=(menu_t *)submenu;
}
}
void glutDestroyMenu(int menu)
{
menu_t *m=(menu_t *)menu;
int i;
GGIGLUTDPRINT_CORE("glutDestroyMenu() called\n");
for (i=0;i<m->num_entries;i++) {
free(m->label[i]);
}
free(m);
}
int glutCreateSubWindow(int win,int x,int y,int w,int h)
{
GGIGLUTDPRINT_CORE("glutCreateSubWindow() called\n");
return 0;
}
void glutDestroyWindow(int win)
{
GGIGLUTDPRINT_CORE("glutDestroyWindow() called\n");
}
int glutGetWindow(void)
{
GGIGLUTDPRINT_CORE("glutGetWindow() called\n");
return 0;
}
void glutSetWindow(int win)
{
GGIGLUTDPRINT_CORE("glutSetWindow() called\n");
}
void glutPositionWindow(int x,int y)
{
GGIGLUTDPRINT_CORE("glutPositionWindow() called\n");
}
void glutReshapeWindow(int x,int y)
{
GGIGLUTDPRINT_CORE("glutReshapeWindow() called\n");
}
void glutPushWindow(void)
{
GGIGLUTDPRINT_CORE("glutPushWindow() called\n");
}
void glutPopWindow(void)
{
GGIGLUTDPRINT_CORE("glutPopWindow() called\n");
}
void glutIconifyWindow(void)
{
GGIGLUTDPRINT_CORE("glutIconifyWindow() called\n");
}
void glutShowWindow()
{
GGIGLUTDPRINT_CORE("glutShowWindow() called\n");
}
void glutHideWindow()
{
GGIGLUTDPRINT_CORE("glutHideWindow() called\n");
}
void glutSetCursor(int cursor)
{
GGIGLUTDPRINT_CORE("glutSetCursor() called\n");
}
void glutWarpPointer(int x,int y)
{
GGIGLUTDPRINT_CORE("glutWarpPointer() called\n");
}
void glutEstablishOverlay(void)
{
GGIGLUTDPRINT_CORE("glutEstablishOverlay() called\n");
}
void glutRemoveOverlay(void)
{
GGIGLUTDPRINT_CORE("glutRemoveOverlay() called\n");
}
void glutUseLayer(GLenum layer)
{
GGIGLUTDPRINT_CORE("glutUseLayer() called\n");
}
int glutLayerGet(GLenum type)
{
GGIGLUTDPRINT_CORE("glutLayerGet() called\n");
return 0;
}
void glutPostOverlayRedisplay(void)
{
GGIGLUTDPRINT_CORE("glutPostOverlayRedisplay() called\n");
}
void glutPostWindowOverlayRedisplay(int w)
{
GGIGLUTDPRINT_CORE("glutPostWindowOverlayRedisplay() called\n");
}
void glutShowOverlay(void)
{
GGIGLUTDPRINT_CORE("glutShowOverlay() called\n");
}
void glutHideOverlay(void)
{
GGIGLUTDPRINT_CORE("glutHideOverlay() called\n");
}
int glutGetMenu(void)
{
GGIGLUTDPRINT_CORE("glutGetMenu() called\n");
return 0;
}
void glutSetMenu(int menu)
{
GGIGLUTDPRINT_CORE("glutSetMenu() called\n");
}
void glutRemoveMenuItem(int item)
{
GGIGLUTDPRINT_CORE("glutRemoveMenuItem() called\n");
}
void glutSpaceBallMotionFunc(void (*func)(int key,int x,int y))
{
GGIGLUTDPRINT_CORE("glutSpaceBallMotionFunc() called\n");
}
void glutSpaceBallRotateFunc(void (*func)(int x,int y,int z))
{
GGIGLUTDPRINT_CORE("glutSpaceBallRotateFunc() called\n");
}
void glutSpaceBallButtonFunc(void (*func)(int button,int state))
{
GGIGLUTDPRINT_CORE("glutSpaceBallButtonFunc() called\n");
}
void glutCopyColormap(int win)
{
GGIGLUTDPRINT_CORE("glutCopyColormap() called\n");
}
int glutDeviceGet(GLenum param)
{
GGIGLUTDPRINT_CORE("glutDeviceGet() called\n");
return 0;
}
/* $Id: debug.h,v 1.1.1.1 2008/11/11 16:05:19 cube Exp $
******************************************************************************
GGIMesa debugging macros
Copyright (C) 1998-1999 Marcus Sundberg [marcus@ggi-project.org]
Copyright (C) 1999-2000 Jon Taylor [taylorj@ggi-project.org]
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
THE AUTHOR(S) 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 _GGI_GLUT_INTERNAL_DEBUG_H
#define _GGI_GLUT_INTERNAL_DEBUG_H
#define DEBUG
#include <stdio.h>
#include <stdarg.h>
#include <ggi/types.h>
#include <ggi/gg.h>
__BEGIN_DECLS
/* Exported variables */
#ifdef BUILDING_GGIGLUT
extern uint32 _ggiglutDebugState;
extern int _ggiglutDebugSync;
#else
IMPORTVAR uint32 _ggiglutDebugState;
IMPORTVAR int _ggiglutDebugSync;
#endif
__END_DECLS
/* Debugging types
* bit 0 is reserved! */
#define GGIGLUTDEBUG_CORE (1<<1) /* 2 */
#define GGIGLUTDEBUG_MODE (1<<2) /* 4 */
#define GGIGLUTDEBUG_COLOR (1<<3) /* 8 */
#define GGIGLUTDEBUG_DRAW (1<<4) /* 16 */
#define GGIGLUTDEBUG_MISC (1<<5) /* 32 */
#define GGIGLUTDEBUG_LIBS (1<<6) /* 64 */
#define GGIGLUTDEBUG_EVENTS (1<<7) /* 128 */
#define GGIGLUTDEBUG_ALL 0xffffffff
#ifdef __GNUC__
#ifdef DEBUG
#define GGIGLUTDPRINT(form,args...) if (_ggiglutDebugState) { ggDPrintf(_ggiglutDebugSync, "GGIGLUT",form, ##args); }
#define GGIGLUTDPRINT_CORE(form,args...) if (_ggiglutDebugState & GGIGLUTDEBUG_CORE) { ggDPrintf(_ggiglutDebugSync,"GGIGLUT",form, ##args); }
#define GGIGLUTDPRINT_MODE(form,args...) if (_ggiglutDebugState & GGIGLUTDEBUG_MODE) { ggDPrintf(_ggiglutDebugSync,"GGIGLUT",form, ##args); }
#define GGIGLUTDPRINT_COLOR(form,args...) if (_ggiglutDebugState & GGIGLUTDEBUG_COLOR) { ggDPrintf(_ggiglutDebugSync,"GGIGLUT",form, ##args); }
#define GGIGLUTDPRINT_DRAW(form,args...) if (_ggiglutDebugState & GGIGLUTDEBUG_DRAW) { ggDPrintf(_ggiglutDebugSync,"GGIGLUT",form, ##args); }
#define GGIGLUTDPRINT_MISC(form,args...) if (_ggiglutDebugState & GGIGLUTDEBUG_MISC) { ggDPrintf(_ggiglutDebugSync,"GGIGLUT",form, ##args); }
#define GGIGLUTDPRINT_LIBS(form,args...) if (_ggiglutDebugState & GGIGLUTDEBUG_LIBS) { ggDPrintf(_ggiglutDebugSync,"GGIGLUT",form, ##args); }
#define GGIGLUTDPRINT_EVENTS(form,args...) if (_ggiglutDebugState & GGIGLUTDEBUG_EVENTS) { ggDPrintf(_ggiglutDebugSync,"GGIGLUT",form, ##args); }
#else /* DEBUG */
#define GGIGLUTDPRINT(form,args...) do{}while(0)
#define GGIGLUTDPRINT_CORE(form,args...) do{}while(0)
#define GGIGLUTDPRINT_MODE(form,args...) do{}while(0)
#define GGIGLUTDPRINT_COLOR(form,args...) do{}while(0)
#define GGIGLUTDPRINT_DRAW(form,args...) do{}while(0)
#define GGIGLUTDPRINT_MISC(form,args...) do{}while(0)
#define GGIGLUTDPRINT_LIBS(form,args...) do{}while(0)
#define GGIGLUTDPRINT_EVENTS(form,args...) do{}while(0)
#endif /* DEBUG */
#else /* __GNUC__ */
__BEGIN_DECLS
static inline void GGIGLUTDPRINT(const char *form,...)
{
#ifdef DEBUG
if (_ggiDebugState) {
va_list args;
fprintf(stderr, "GGIGLUT: ");
va_start(args, form);
vfprintf(stderr, form, args);
va_end(args);
if (_ggiglutDebugSync) fflush(stderr);
}
#endif
}
static inline void GGIGLUTDPRINT_CORE(const char *form,...)
{
#ifdef DEBUG
if (_ggiDebugState & GGIDEBUG_CORE) {
va_list args;
fprintf(stderr, "GGIGLUT: ");
va_start(args, form);
vfprintf(stderr, form, args);
va_end(args);
if (_ggiglutDebugSync) fflush(stderr);
}
#endif
}
static inline void GGIGLUTDPRINT_MODE(const char *form,...)
{
#ifdef DEBUG
if (_ggiDebugState & GGIDEBUG_MODE) {
va_list args;
fprintf(stderr, "GGIGLUT: ");
va_start(args, form);
vfprintf(stderr, form, args);
va_end(args);
if (_ggiglutDebugSync) fflush(stderr);
}
#endif
}
static inline void GGIGLUTDPRINT_COLOR(const char *form,...)
{
#ifdef DEBUG
if (_ggiDebugState & GGIDEBUG_COLOR) {
va_list args;
fprintf(stderr, "GGIGLUT: ");
va_start(args, form);
vfprintf(stderr, form, args);
va_end(args);
if (_ggiglutDebugSync) fflush(stderr);
}
#endif
}
static inline void GGIGLUTDPRINT_DRAW(const char *form,...)
{
#ifdef DEBUG
if (_ggiDebugState & GGIDEBUG_DRAW) {
va_list args;
fprintf(stderr, "GGIGLUT: ");
va_start(args, form);
vfprintf(stderr, form, args);
va_end(args);
if (_ggiglutDebugSync) fflush(stderr);
}
#endif
}
static inline void GGIGLUTDPRINT_MISC(const char *form,...)
{
#ifdef DEBUG
if (_ggiDebugState & GGIDEBUG_MISC) {
va_list args;
fprintf(stderr, "GGIGLUT: ");
va_start(args, form);
vfprintf(stderr, form, args);
va_end(args);
if (_ggiglutDebugSync) fflush(stderr);
}
#endif
}
static inline void GGIGLUTDPRINT_LIBS(const char *form,...)
{
#ifdef DEBUG
if (_ggiDebugState & GGIDEBUG_LIBS) {
va_list args;
fprintf(stderr, "GGIGLUT: ");
va_start(args, form);
vfprintf(stderr, form, args);
va_end(args);
if (_ggiglutDebugSync) fflush(stderr);
}
#endif
}
static inline void GGIGLUTDPRINT_EVENTS(const char *form,...)
{
#ifdef DEBUG
if (_ggiDebugState & GGIDEBUG_EVENTS) {
va_list args;
fprintf(stderr, "GGIGLUT: ");
va_start(args, form);
vfprintf(stderr, form, args);
va_end(args);
if (_ggiglutDebugSync) fflush(stderr);
}
#endif
}
__END_DECLS
#endif /* __GNUC__ */
#ifdef DEBUG
#define GGIGLUT_ASSERT(x,str) \
{ if (!(x)) { \
fprintf(stderr,"GGIGLUT:%s:%d: INTERNAL ERROR: %s\n",__FILE__,__LINE__,str); \
exit(1); \
} }
#define GGIGLUT_APPASSERT(x,str) \
{ if (!(x)) { \
fprintf(stderr,"GGIGLUT:%s:%d: APPLICATION ERROR: %s\n",__FILE__,__LINE__,str); \
exit(1); \
} }
#else /* DEBUG */
#define GGIGLUT_ASSERT(x,str) do{}while(0)
#define GGIGLUT_APPASSERT(x,str) do{}while(0)
#endif /* DEBUG */
#ifdef DEBUG
# define GGIGLUTD0(x) x
#else
# define GGIGLUTD0(x) /* empty */
#endif
#ifdef GGIGLUTDLEV
# if GGIGLUTDLEV == 1
# define GGIGLUTD1(x) x
# define GGIGLUTD2(x) /* empty */
# define GGIGLUTD3(x) /* empty */
# elif GGIGLUTDLEV == 2
# define GGIGLUTD1(x) x
# define GGIGLUTD2(x) x
# define GGIGLUTD3(x) /* empty */
# elif GGIGLUTDLEV > 2
# define GGIGLUTD1(x) x
# define GGIGLUTD2(x) x
# define GGIGLUTD3(x) x
# endif
#else
# define GGIGLUTD1(x) /* empty */
# define GGIGLUTD2(x) /* empty */
# define GGIGLUTD3(x) /* empty */
#endif
#endif /* _GGI_MESA_INTERNAL_DEBUG_H */
# Makefile for GLUT for ggi
TOP = ../../..
include $(TOP)/configs/current
##### MACROS #####
GLUT_MAJOR = 3
GLUT_MINOR = 7
GLUT_TINY = 1
SOURCES = \
ggiglut.c
OBJECTS = $(SOURCES:.c=.o)
##### RULES #####
.c.o:
$(CC) -c -I$(TOP)/include $(CFLAGS) $(GLUT_CFLAGS) $<
##### TARGETS #####
default: $(TOP)/$(LIB_DIR)/$(GLUT_LIB_NAME)
# Make the library
$(TOP)/$(LIB_DIR)/$(GLUT_LIB_NAME): depend $(OBJECTS)
$(TOP)/bin/mklib -o $(GLUT_LIB) -linker '$(CC)' -ldflags '$(LDFLAGS)' \
-major $(GLUT_MAJOR) -minor $(GLUT_MINOR) \
-patch $(GLUT_TINY) $(MKLIB_OPTIONS) -install $(TOP)/$(LIB_DIR) \
$(GLUT_LIB_DEPS) $(OBJECTS)
clean:
-rm -f *.o *~
-rm -f *.lo
-rm -f *.la
-rm -rf .libs
depend: $(SOURCES)
touch depend
$(MKDEP) $(MKDEP_OPTIONS) -I$(TOP)/include $(SOURCES)
include depend
/*
* Mesa 3-D graphics library
* Version: 6.5
* Copyright (C) 1995-2006 Brian Paul
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/*
* Library for glut using mesa fbdev driver
*
* Written by Sean D'Epagnier (c) 2006
*/
#include <stdlib.h>
#include <GL/glut.h>
#include "internal.h"
void (*DisplayFunc)(void) = NULL;
void (*ReshapeFunc)(int width, int height) = NULL;
void (*KeyboardFunc)(unsigned char key, int x, int y) = NULL;
void (*KeyboardUpFunc)(unsigned char key, int x, int y) = NULL;
void (*MouseFunc)(int key, int state, int x, int y) = NULL;
void (*MotionFunc)(int x, int y) = NULL;
void (*PassiveMotionFunc)(int x, int y) = NULL;
void (*VisibilityFunc)(int state) = NULL;
void (*SpecialFunc)(int key, int x, int y) = NULL;
void (*SpecialUpFunc)(int key, int x, int y) = NULL;
void (*IdleFunc)(void) = NULL;
void (*MenuStatusFunc)(int state, int x, int y) = NULL;
void (*MenuStateFunc)(int state) = NULL;
void glutDisplayFunc(void (*func)(void))
{
DisplayFunc = func;
}
void glutOverlayDisplayFunc(void (*func)(void))
{
}
void glutWindowStatusFunc(void (*func)(int state))
{
}
void glutReshapeFunc(void (*func)(int width, int height))
{
ReshapeFunc = func;
}
void glutKeyboardFunc(void (*func)(unsigned char key, int x, int y))
{
KeyboardFunc = func;
}
void glutKeyboardUpFunc(void (*func)(unsigned char key, int x, int y))
{
KeyboardUpFunc = func;
}
void glutMouseFunc(void (*func)(int button, int state, int x, int y))
{
MouseFunc = func;
}
void glutMotionFunc(void (*func)(int x, int y))
{
MotionFunc = func;
}
void glutPassiveMotionFunc(void (*func)(int x, int y))
{
PassiveMotionFunc = func;
}
void glutJoystickFunc(void (*func)(unsigned int buttonMask,
int x, int y, int z), int pollInterval)
{
}
void glutVisibilityFunc(void (*func)(int state))
{
VisibilityFunc = func;
}
void glutEntryFunc(void (*func)(int state))
{
}
void glutSpecialFunc(void (*func)(int key, int x, int y))
{
SpecialFunc = func;
}
void glutSpecialUpFunc(void (*func)(int key, int x, int y))
{
SpecialUpFunc = func;
}
void glutSpaceballMotionFunc(void (*func)(int x, int y, int z))
{
}
void glutSpaceballRotateFunc(void (*func)(int x, int y, int z))
{
}
void glutSpaceballButtonFunc(void (*func)(int button, int state))
{
}
void glutButtonBoxFunc(void (*func)(int button, int state))
{
}
void glutDialsFunc(void (*func)(int dial, int value))
{
}
void glutTabletMotionFunc(void (*func)(int x, int y))
{
}
void glutTabletButtonFunc(void (*func)(int button, int state,
int x, int y))
{
}
void glutMenuStatusFunc(void (*func)(int status, int x, int y))
{
MenuStatusFunc = func;
}
void glutMenuStateFunc(void (*func)(int status))
{
MenuStateFunc = func;
}
void glutIdleFunc(void (*func)(void))
{
IdleFunc = func;
}
void glutTimerFunc(unsigned int msecs,
void (*func)(int value), int value)
{
struct GlutTimer **head = &GlutTimers, *timer = malloc(sizeof *timer);
timer->time = glutGet(GLUT_ELAPSED_TIME) + msecs;
timer->func = func;
timer->value = value;
while(*head && (*head)->time < timer->time)
head = &(*head)->next;
timer->next = *head;
*head = timer;
}
# subset glut
TOP = ../../..
include $(TOP)/configs/current
GLX_SHARED = $(TOP)/src/glut/glx
MINI_SHARED = $(TOP)/src/glut/mini
GLUT_MAJOR = 3
GLUT_MINOR = 7
GLUT_TINY = 1
INCLUDES = -I$(TOP)/include -I$(GLX_SHARED)
CORE_SOURCES = \
fbdev.c \
colormap.c \
cursor.c \
menu.c \
overlay.c \
ext.c \
state.c \
input.c \
callback.c \
gamemode.c \
vidresize.c \
bitmap.c \
stroke.c
GLX_SHARED_SOURCES = \
$(GLX_SHARED)/glut_8x13.c \
$(GLX_SHARED)/glut_9x15.c \
$(GLX_SHARED)/glut_hel10.c \
$(GLX_SHARED)/glut_hel12.c \
$(GLX_SHARED)/glut_hel18.c \
$(GLX_SHARED)/glut_tr10.c \
$(GLX_SHARED)/glut_tr24.c \
$(GLX_SHARED)/glut_mroman.c \
$(GLX_SHARED)/glut_roman.c \
MINI_SHARED_SOURCES = \
$(MINI_SHARED)/models.c \
$(MINI_SHARED)/teapot.c
SOURCES = $(CORE_SOURCES) $(GLX_SHARED_SOURCES) $(MINI_SHARED_SOURCES)
OBJECTS = $(SOURCES:.c=.o)
##### RULES #####
.c.o:
$(CC) -c $(INCLUDES) $(CFLAGS) $(DEFINES) $< -o $@
.S.o:
$(CC) -c $(INCLUDES) $(CFLAGS) $(DEFINES) $< -o $@
##### TARGETS #####
default: depend $(TOP)/$(LIB_DIR)/$(GLUT_LIB_NAME)
# Make the library
$(TOP)/$(LIB_DIR)/$(GLUT_LIB_NAME): depend $(OBJECTS)
$(TOP)/bin/mklib -o $(GLUT_LIB) -linker '$(CC)' -ldflags '$(LDFLAGS)' \
-major $(GLUT_MAJOR) -minor $(GLUT_MINOR) -patch $(GLUT_TINY) \
$(GLUT_LIB_DEPS) -install $(TOP)/$(LIB_DIR) \
$(MKLIB_OPTIONS) $(OBJECTS)
install:
$(INSTALL) -d $(DESTDIR)$(INSTALL_DIR)/include/GL
$(INSTALL) -d $(DESTDIR)$(INSTALL_DIR)/$(LIB_DIR)
$(INSTALL) -m 644 $(TOP)/include/GL/glut.h $(DESTDIR)$(INSTALL_DIR)/include/GL
$(INSTALL) $(TOP)/$(LIB_DIR)/libglut* $(DESTDIR)$(INSTALL_DIR)/$(LIB_DIR)
# Run 'make -f Makefile.solo dep' to update the dependencies if you change
# what's included by any source file.
depend: $(SOURCES)
touch depend
$(MKDEP) $(MKDEP_OPTIONS) $(INCLUDES) $(SOURCES) > /dev/null
# Emacs tags
tags:
etags `find . -name \*.[ch]` `find ../include`
# Remove .o and backup files
clean: depend
-rm -f depend
-rm -f *.o *~ *.o *~ *.so libglut.so.3.7
include depend
/*
* Mesa 3-D graphics library
* Version: 6.5
* Copyright (C) 1995-2006 Brian Paul
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/*
* Library for glut using mesa fbdev driver
*
* Written by Sean D'Epagnier (c) 2006
*
* To improve on this library, maybe support subwindows or overlays,
* I (sean at depagnier dot com) will do my best to help.
*/
#include "glutbitmap.h"
void glutBitmapCharacter(GLUTbitmapFont font, int c)
{
const BitmapCharRec *ch;
BitmapFontPtr fi = (BitmapFontPtr) font;
if (c < fi->first ||
c >= fi->first + fi->num_chars)
return;
ch = fi->ch[c - fi->first];
if (!ch)
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);
glBitmap(ch->width, ch->height, ch->xorig, ch->yorig,
ch->advance, 0, ch->bitmap);
glPopClientAttrib();
}
int glutBitmapWidth (GLUTbitmapFont font, int c)
{
const BitmapCharRec *ch;
BitmapFontPtr fi = (BitmapFontPtr) font;
if (c < fi->first || c >= fi->first + fi->num_chars)
return 0;
ch = fi->ch[c - fi->first];
if (ch)
return ch->advance;
return 0;
}
int glutBitmapLength(GLUTbitmapFont font, const unsigned char *string)
{
int length = 0;
for (; *string; string++)
length += glutBitmapWidth(font, *string);
return length;
}
/*
* Mesa 3-D graphics library
* Version: 6.5
* Copyright (C) 1995-2006 Brian Paul
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/*
* Library for glut using mesa fbdev driver
*
* Written by Sean D'Epagnier (c) 2006
*/
#include <stdio.h>
#include <stdlib.h>
#include <linux/fb.h>
#include <GL/gl.h>
#include <GL/glut.h>
#include "internal.h"
#define TOCMAP(x)(unsigned short)((x<0?0:x>1?1:x)*(GLfloat) ((1<<16) - 1))
#define TORMAP(x)(unsigned short)((x<0?0:x>1?1:x)*(GLfloat)(REVERSECMAPSIZE-1))
#define FROMCMAP(x) (GLfloat)x / (GLfloat)((1<<16) - 1)
static struct fb_cmap ColorMap, OriginalColorMap;
unsigned short RedColorMap[256], GreenColorMap[256], BlueColorMap[256];
unsigned char ReverseColorMap[REVERSECMAPSIZE]
[REVERSECMAPSIZE]
[REVERSECMAPSIZE];
static void FindReverseMap(int r, int g, int b)
{
static int count;
int i, shift = 16 - REVERSECMAPSIZELOG;
unsigned int minv = -1, mini = 0;
for(i=0; i<256; i++) {
int val = 0;
val += abs(r-(RedColorMap[i]>>shift));
val += abs(g-(GreenColorMap[i]>>shift));
val += abs(b-(BlueColorMap[i]>>shift));
if(val < minv) {
minv = val;
mini = i;
}
}
ReverseColorMap[r][g][b] = mini;
}
static void FillItemReverseColorMap(int r, int g, int b)
{
FindReverseMap(r, g, b);
if(r > 0)
FindReverseMap(r-1, g, b);
if(r < REVERSECMAPSIZE - 1)
FindReverseMap(r+1, g, b);
if(g > 0)
FindReverseMap(r, g-1, b);
if(g < REVERSECMAPSIZE - 1)
FindReverseMap(r, g+1, b);
if(b > 0)
FindReverseMap(r, g, b-1);
if(b < REVERSECMAPSIZE - 1)
FindReverseMap(r, g, b+1);
}
static void FillReverseColorMap(void)
{
int r, g, b;
for(r = 0; r < REVERSECMAPSIZE; r++)
for(g = 0; g < REVERSECMAPSIZE; g++)
for(b = 0; b < REVERSECMAPSIZE; b++)
FindReverseMap(r, g, b);
}
void RestoreColorMap(void)
{
if(FixedInfo.visual == FB_VISUAL_TRUECOLOR)
return;
if (ioctl(FrameBufferFD, FBIOPUTCMAP, (void *) &ColorMap) < 0)
sprintf(exiterror, "ioctl(FBIOPUTCMAP) failed!\n");
}
void LoadColorMap(void)
{
if(FixedInfo.visual == FB_VISUAL_TRUECOLOR)
return;
ColorMap.start = 0;
ColorMap.red = RedColorMap;
ColorMap.green = GreenColorMap;
ColorMap.blue = BlueColorMap;
ColorMap.transp = NULL;
if(DisplayMode & GLUT_INDEX) {
ColorMap.len = 256;
if (ioctl(FrameBufferFD, FBIOGETCMAP, (void *) &ColorMap) < 0)
sprintf(exiterror, "ioctl(FBIOGETCMAP) failed!\n");
FillReverseColorMap();
} else {
int rcols = 1 << VarInfo.red.length;
int gcols = 1 << VarInfo.green.length;
int bcols = 1 << VarInfo.blue.length;
int i;
ColorMap.len = gcols;
for (i = 0; i < rcols ; i++)
RedColorMap[i] = (65536/(rcols-1)) * i;
for (i = 0; i < gcols ; i++)
GreenColorMap[i] = (65536/(gcols-1)) * i;
for (i = 0; i < bcols ; i++)
BlueColorMap[i] = (65536/(bcols-1)) * i;
RestoreColorMap();
}
}
void glutSetColor(int cell, GLfloat red, GLfloat green, GLfloat blue)
{
if(cell < 0 || cell >= 256)
return;
RedColorMap[cell] = TOCMAP(red);
GreenColorMap[cell] = TOCMAP(green);
BlueColorMap[cell] = TOCMAP(blue);
RestoreColorMap();
FillItemReverseColorMap(TORMAP(red), TORMAP(green), TORMAP(blue));
}
GLfloat glutGetColor(int cell, int component)
{
if(!(DisplayMode & GLUT_INDEX))
return -1.0;
if(cell < 0 || cell > 256)
return -1.0;
switch(component) {
case GLUT_RED:
return FROMCMAP(RedColorMap[cell]);
case GLUT_GREEN:
return FROMCMAP(GreenColorMap[cell]);
case GLUT_BLUE:
return FROMCMAP(BlueColorMap[cell]);
}
return -1.0;
}
void glutCopyColormap(int win)
{
}
/*
* Mesa 3-D graphics library
* Version: 6.5
* Copyright (C) 1995-2006 Brian Paul
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/*
* Library for glut using mesa fbdev driver
*
* Written by Sean D'Epagnier (c) 2006
*/
/* these routines are written to access graphics memory directly, not using mesa
to render the cursor, this is faster, it would be good to use a hardware
cursor if it exists instead */
#include <stdio.h>
#include <stdlib.h>
#include <inttypes.h>
#include <string.h>
#include <linux/fb.h>
#include <GL/glut.h>
#include "internal.h"
#include "cursors.h"
int CurrentCursor = GLUT_CURSOR_LEFT_ARROW;
static int LastMouseX, LastMouseY;
static unsigned char *MouseBuffer;
void InitializeCursor(void)
{
if(!MouseBuffer && (MouseBuffer = malloc(CURSOR_WIDTH * CURSOR_HEIGHT
* VarInfo.bits_per_pixel / 8)) == NULL) {
sprintf(exiterror, "malloc failure\n");
exit(0);
}
MouseX = VarInfo.xres / 2;
MouseY = VarInfo.yres / 2;
}
void EraseCursor(void)
{
int off = LastMouseY * FixedInfo.line_length
+ LastMouseX * VarInfo.bits_per_pixel / 8;
int stride = CURSOR_WIDTH * VarInfo.bits_per_pixel / 8;
int i;
unsigned char *src = MouseBuffer;
if(!MouseVisible || CurrentCursor < 0 || CurrentCursor >= NUM_CURSORS)
return;
for(i = 0; i<CURSOR_HEIGHT; i++) {
memcpy(BackBuffer + off, src, stride);
src += stride;
off += FixedInfo.line_length;
}
}
static void SaveCursor(int x, int y)
{
int bypp, off, stride, i;
unsigned char *src = MouseBuffer;
if(x < 0)
LastMouseX = 0;
else
if(x > (int)VarInfo.xres - CURSOR_WIDTH)
LastMouseX = VarInfo.xres - CURSOR_WIDTH;
else
LastMouseX = x;
if(y < 0)
LastMouseY = 0;
else
if(y > (int)VarInfo.yres - CURSOR_HEIGHT)
LastMouseY = VarInfo.yres - CURSOR_HEIGHT;
else
LastMouseY = y;
bypp = VarInfo.bits_per_pixel / 8;
off = LastMouseY * FixedInfo.line_length + LastMouseX * bypp;
stride = CURSOR_WIDTH * bypp;
for(i = 0; i<CURSOR_HEIGHT; i++) {
memcpy(src, BackBuffer + off, stride);
src += stride;
off += FixedInfo.line_length;
}
}
void DrawCursor(void)
{
int i, j, px, py, xoff, xlen, yoff, ylen, bypp, cstride, dstride;
unsigned char *c;
const unsigned char *d;
if(!MouseVisible || CurrentCursor < 0 || CurrentCursor >= NUM_CURSORS)
return;
px = MouseX - CursorsXOffset[CurrentCursor];
py = MouseY - CursorsYOffset[CurrentCursor];
SaveCursor(px, py);
xoff = 0;
if(px < 0)
xoff = -px;
xlen = CURSOR_WIDTH;
if(px + CURSOR_WIDTH > VarInfo.xres)
xlen = VarInfo.xres - px;
yoff = 0;
if(py < 0)
yoff = -py;
ylen = CURSOR_HEIGHT;
if(py + CURSOR_HEIGHT > VarInfo.yres)
ylen = VarInfo.yres - py;
bypp = VarInfo.bits_per_pixel / 8;
c = BackBuffer + FixedInfo.line_length * (py + yoff) + (px + xoff) * bypp;
cstride = FixedInfo.line_length - bypp * (xlen - xoff);
d = Cursors[CurrentCursor] + (CURSOR_WIDTH * yoff + xoff)*4;
dstride = (CURSOR_WIDTH - xlen + xoff) * 4;
switch(bypp) {
case 1:
{
const int shift = 8 - REVERSECMAPSIZELOG;
for(i = yoff; i < ylen; i++) {
for(j = xoff; j < xlen; j++) {
if(d[3] < 220)
*c = ReverseColorMap
[(d[0]+(((int)(RedColorMap[c[0]]>>8)*d[3])>>8))>>shift]
[(d[1]+(((int)(GreenColorMap[c[0]]>>8)*d[3])>>8))>>shift]
[(d[2]+(((int)(BlueColorMap[c[0]]>>8)*d[3])>>8))>>shift];
c++;
d+=4;
}
d += dstride;
c += cstride;
}
} break;
case 2:
{
uint16_t *e = (void*)c;
cstride /= 2;
for(i = yoff; i < ylen; i++) {
for(j = xoff; j < xlen; j++) {
if(d[3] < 220)
e[0] = ((((d[0] + (((int)(((e[0] >> 8) & 0xf8)
| ((c[0] >> 11) & 0x7)) * d[3]) >> 8)) & 0xf8) << 8)
| (((d[1] + (((int)(((e[0] >> 3) & 0xfc)
| ((e[0] >> 5) & 0x3)) * d[3]) >> 8)) & 0xfc) << 3)
| ((d[2] + (((int)(((e[0] << 3) & 0xf8)
| (e[0] & 0x7)) * d[3]) >> 8)) >> 3));
e++;
d+=4;
}
d += dstride;
e += cstride;
}
} break;
case 3:
case 4:
for(i = yoff; i < ylen; i++) {
for(j = xoff; j < xlen; j++) {
if(d[3] < 220) {
c[0] = d[0] + (((int)c[0] * d[3]) >> 8);
c[1] = d[1] + (((int)c[1] * d[3]) >> 8);
c[2] = d[2] + (((int)c[2] * d[3]) >> 8);
}
c+=bypp;
d+=4;
}
d += dstride;
c += cstride;
} break;
}
}
#define MIN(x, y) x < y ? x : y
void SwapCursor(void)
{
int px = MouseX - CursorsXOffset[CurrentCursor];
int py = MouseY - CursorsYOffset[CurrentCursor];
int minx = MIN(px, LastMouseX);
int sizex = abs(px - LastMouseX);
int miny = MIN(py, LastMouseY);
int sizey = abs(py - LastMouseY);
if(MouseVisible)
DrawCursor();
/* now update the portion of the screen that has changed, this is also
used to hide the mouse if MouseVisible is 0 */
if(DisplayMode & GLUT_DOUBLE && ((sizex || sizey) || !MouseVisible)) {
int off, stride, i;
if(minx < 0)
minx = 0;
if(miny < 0)
miny = 0;
if(minx + sizex > VarInfo.xres - CURSOR_WIDTH)
sizex = VarInfo.xres - CURSOR_WIDTH - minx;
if(miny + sizey > VarInfo.yres - CURSOR_HEIGHT)
sizey = VarInfo.yres - CURSOR_HEIGHT - miny;
off = FixedInfo.line_length * miny
+ minx * VarInfo.bits_per_pixel / 8;
stride = (sizex + CURSOR_WIDTH) * VarInfo.bits_per_pixel / 8;
for(i = 0; i < sizey + CURSOR_HEIGHT; i++) {
memcpy(FrameBuffer+off, BackBuffer+off, stride);
off += FixedInfo.line_length;
}
}
}
void glutWarpPointer(int x, int y)
{
if(x < 0)
x = 0;
if(x >= VarInfo.xres)
x = VarInfo.xres - 1;
MouseX = x;
if(y < 0)
y = 0;
if(y >= VarInfo.yres)
y = VarInfo.yres - 1;
MouseY = y;
EraseCursor();
SwapCursor();
}
void glutSetCursor(int cursor)
{
if(cursor == GLUT_CURSOR_FULL_CROSSHAIR)
cursor = GLUT_CURSOR_CROSSHAIR;
EraseCursor();
MouseVisible = 1;
CurrentCursor = cursor;
SwapCursor();
}
/* These cursor images were generated from png files
included in xorg.
They are in the format RGBA and are each 32x32
the RGB components have already been multiplied
by the alpha, and the alpha is already inverted */
#define CURSOR_WIDTH 32
#define CURSOR_HEIGHT 32
int CursorsXOffset[20]={16, 4, 9, 16, 7, 16, 10, 8, 8, 11,
16, 13, 12, 20, 3, 28, 3, 28, 28, 3};
int CursorsYOffset[20]={4, 4, 2, 20, 28, 14, 0, 8, 14, 11,
14, 12, 3, 28, 18, 12, 3, 3, 26, 26};
const unsigned char Cursors[][CURSOR_WIDTH * CURSOR_HEIGHT * 4] = {
{
0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 210,
0, 0, 0, 76, 0, 0, 0, 100, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 210, 2, 2, 2, 73,
127, 127, 127, 64, 0, 0, 0, 64, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 210, 2, 2, 2, 73, 127, 127, 127, 64,
190, 190, 190, 64, 0, 0, 0, 64, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 254, 0, 0, 0, 251,
0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 252,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 210,
2, 2, 2, 73, 127, 127, 127, 64, 190, 190, 190, 64,
190, 190, 190, 64, 0, 0, 0, 64, 0, 0, 0, 255,
0, 0, 0, 254, 0, 0, 0, 248, 0, 0, 0, 236,
0, 0, 0, 227, 0, 0, 0, 229, 0, 0, 0, 240,
0, 0, 0, 252, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 210, 2, 2, 2, 73,
127, 127, 127, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 0, 0, 0, 64, 0, 0, 0, 254,
0, 0, 0, 248, 0, 0, 0, 234, 0, 0, 0, 221,
0, 0, 0, 217, 0, 0, 0, 218, 0, 0, 0, 228,
0, 0, 0, 248, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 210, 2, 2, 2, 73, 127, 127, 127, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 0, 0, 0, 64, 0, 0, 0, 248,
0, 0, 0, 234, 0, 0, 0, 221, 0, 0, 0, 216,
0, 0, 0, 216, 0, 0, 0, 216, 0, 0, 0, 225,
0, 0, 0, 246, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 210,
2, 2, 2, 73, 127, 127, 127, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 0, 0, 0, 62, 0, 0, 0, 234,
0, 0, 0, 221, 0, 0, 0, 216, 0, 0, 0, 215,
0, 0, 0, 215, 0, 0, 0, 216, 0, 0, 0, 225,
0, 0, 0, 245, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 210, 2, 2, 2, 73,
127, 127, 127, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
189, 189, 189, 62, 0, 0, 0, 59, 0, 0, 0, 221,
0, 0, 0, 216, 0, 0, 0, 215, 0, 0, 0, 215,
0, 0, 0, 215, 0, 0, 0, 216, 0, 0, 0, 225,
0, 0, 0, 245, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 210, 2, 2, 2, 73, 127, 127, 127, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 189, 189, 189, 62,
189, 189, 189, 59, 0, 0, 0, 55, 0, 0, 0, 216,
0, 0, 0, 215, 0, 0, 0, 215, 0, 0, 0, 215,
0, 0, 0, 215, 0, 0, 0, 216, 0, 0, 0, 225,
0, 0, 0, 245, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 210,
2, 2, 2, 73, 127, 127, 127, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 189, 189, 189, 62, 189, 189, 189, 59,
189, 189, 189, 55, 0, 0, 0, 54, 0, 0, 0, 215,
0, 0, 0, 215, 0, 0, 0, 215, 0, 0, 0, 215,
0, 0, 0, 215, 0, 0, 0, 216, 0, 0, 0, 225,
0, 0, 0, 245, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 210, 2, 2, 2, 73,
127, 127, 127, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
189, 189, 189, 62, 189, 189, 189, 59, 189, 189, 189, 55,
190, 190, 190, 54, 0, 0, 0, 54, 0, 0, 0, 215,
0, 0, 0, 215, 0, 0, 0, 215, 0, 0, 0, 215,
0, 0, 0, 215, 0, 0, 0, 216, 0, 0, 0, 225,
0, 0, 0, 245, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 222, 2, 2, 2, 73, 127, 127, 127, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 189, 189, 189, 62,
189, 189, 189, 59, 189, 189, 189, 55, 190, 190, 190, 54,
190, 190, 190, 54, 0, 0, 0, 54, 0, 0, 0, 215,
0, 0, 0, 215, 0, 0, 0, 215, 0, 0, 0, 215,
0, 0, 0, 215, 0, 0, 0, 216, 0, 0, 0, 225,
0, 0, 0, 245, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 189, 26, 26, 26, 64, 130, 130, 130, 64,
187, 187, 187, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 189, 189, 189, 62, 189, 189, 189, 59,
189, 189, 189, 55, 190, 190, 190, 54, 190, 190, 190, 54,
190, 190, 190, 54, 0, 0, 0, 54, 0, 0, 0, 215,
0, 0, 0, 215, 0, 0, 0, 215, 0, 0, 0, 215,
0, 0, 0, 215, 0, 0, 0, 216, 0, 0, 0, 225,
0, 0, 0, 245, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 252, 0, 0, 0, 174, 0, 0, 0, 94,
23, 23, 23, 64, 104, 104, 104, 64, 178, 178, 178, 64,
189, 189, 189, 62, 189, 189, 189, 59, 189, 189, 189, 55,
190, 190, 190, 54, 190, 190, 190, 54, 190, 190, 190, 54,
190, 190, 190, 54, 0, 0, 0, 54, 0, 0, 0, 215,
0, 0, 0, 215, 0, 0, 0, 215, 0, 0, 0, 215,
0, 0, 0, 215, 0, 0, 0, 216, 0, 0, 0, 225,
0, 0, 0, 245, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 201, 0, 0, 0, 97, 56, 56, 56, 62,
189, 189, 189, 59, 189, 189, 189, 55, 190, 190, 190, 54,
190, 190, 190, 54, 190, 190, 190, 54, 190, 190, 190, 54,
190, 190, 190, 54, 0, 0, 0, 54, 0, 0, 0, 215,
0, 0, 0, 215, 0, 0, 0, 215, 0, 0, 0, 215,
0, 0, 0, 215, 0, 0, 0, 216, 0, 0, 0, 225,
0, 0, 0, 245, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 91, 133, 133, 133, 61,
189, 189, 189, 56, 190, 190, 190, 54, 148, 148, 148, 54,
127, 127, 127, 54, 186, 186, 186, 54, 190, 190, 190, 54,
190, 190, 190, 54, 0, 0, 0, 54, 0, 0, 0, 215,
0, 0, 0, 215, 0, 0, 0, 215, 0, 0, 0, 215,
0, 0, 0, 215, 0, 0, 0, 216, 0, 0, 0, 225,
0, 0, 0, 245, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 198, 26, 26, 26, 63, 189, 189, 189, 60,
189, 189, 189, 55, 190, 190, 190, 54, 56, 56, 56, 54,
0, 0, 0, 67, 20, 20, 20, 54, 101, 101, 101, 54,
175, 175, 175, 54, 0, 0, 0, 54, 0, 0, 0, 215,
0, 0, 0, 215, 0, 0, 0, 215, 0, 0, 0, 215,
0, 0, 0, 215, 0, 0, 0, 216, 0, 0, 0, 225,
0, 0, 0, 245, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 118, 107, 107, 107, 64, 189, 189, 189, 62,
189, 189, 189, 57, 165, 165, 165, 55, 2, 2, 2, 59,
0, 0, 0, 203, 0, 0, 0, 172, 0, 0, 0, 105,
5, 5, 5, 56, 0, 0, 0, 72, 0, 0, 0, 215,
0, 0, 0, 215, 0, 0, 0, 215, 0, 0, 0, 215,
0, 0, 0, 215, 0, 0, 0, 216, 0, 0, 0, 225,
0, 0, 0, 245, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 225,
8, 8, 8, 64, 178, 178, 178, 64, 189, 189, 189, 63,
190, 190, 190, 61, 88, 88, 88, 59, 0, 0, 0, 119,
0, 0, 0, 218, 0, 0, 0, 216, 0, 0, 0, 215,
0, 0, 0, 202, 0, 0, 0, 207, 0, 0, 0, 215,
0, 0, 0, 215, 0, 0, 0, 215, 0, 0, 0, 215,
0, 0, 0, 215, 0, 0, 0, 216, 0, 0, 0, 225,
0, 0, 0, 245, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 144,
80, 80, 80, 64, 190, 190, 190, 64, 190, 190, 190, 64,
184, 184, 184, 64, 14, 14, 14, 63, 0, 0, 0, 202,
0, 0, 0, 222, 0, 0, 0, 216, 0, 0, 0, 215,
0, 0, 0, 215, 0, 0, 0, 215, 0, 0, 0, 215,
0, 0, 0, 215, 0, 0, 0, 215, 0, 0, 0, 215,
0, 0, 0, 215, 0, 0, 0, 216, 0, 0, 0, 225,
0, 0, 0, 245, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 243, 0, 0, 0, 73,
160, 160, 160, 64, 190, 190, 190, 64, 190, 190, 190, 64,
122, 122, 122, 64, 0, 0, 0, 102, 0, 0, 0, 237,
0, 0, 0, 220, 0, 0, 0, 216, 0, 0, 0, 215,
0, 0, 0, 215, 0, 0, 0, 215, 0, 0, 0, 215,
0, 0, 0, 216, 0, 0, 0, 216, 0, 0, 0, 216,
0, 0, 0, 216, 0, 0, 0, 216, 0, 0, 0, 225,
0, 0, 0, 246, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 207, 23, 23, 23, 64,
169, 169, 169, 64, 190, 190, 190, 64, 190, 190, 190, 64,
41, 41, 41, 64, 0, 0, 0, 178, 0, 0, 0, 229,
0, 0, 0, 217, 0, 0, 0, 216, 0, 0, 0, 215,
0, 0, 0, 215, 0, 0, 0, 215, 0, 0, 0, 216,
0, 0, 0, 218, 0, 0, 0, 219, 0, 0, 0, 217,
0, 0, 0, 216, 0, 0, 0, 217, 0, 0, 0, 228,
0, 0, 0, 247, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 249, 0, 0, 0, 135,
2, 2, 2, 70, 62, 62, 62, 64, 110, 110, 110, 64,
0, 0, 0, 78, 0, 0, 0, 234, 0, 0, 0, 222,
0, 0, 0, 216, 0, 0, 0, 215, 0, 0, 0, 215,
0, 0, 0, 215, 0, 0, 0, 216, 0, 0, 0, 217,
0, 0, 0, 227, 0, 0, 0, 235, 0, 0, 0, 230,
0, 0, 0, 225, 0, 0, 0, 226, 0, 0, 0, 239,
0, 0, 0, 252, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 237, 0, 0, 0, 165, 0, 0, 0, 111,
0, 0, 0, 179, 0, 0, 0, 232, 0, 0, 0, 218,
0, 0, 0, 216, 0, 0, 0, 215, 0, 0, 0, 215,
0, 0, 0, 215, 0, 0, 0, 216, 0, 0, 0, 221,
0, 0, 0, 239, 0, 0, 0, 250, 0, 0, 0, 249,
0, 0, 0, 245, 0, 0, 0, 246, 0, 0, 0, 251,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 254,
0, 0, 0, 245, 0, 0, 0, 224, 0, 0, 0, 216,
0, 0, 0, 215, 0, 0, 0, 215, 0, 0, 0, 215,
0, 0, 0, 216, 0, 0, 0, 217, 0, 0, 0, 228,
0, 0, 0, 247, 0, 0, 0, 254, 0, 0, 0, 255,
0, 0, 0, 254, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 254,
0, 0, 0, 242, 0, 0, 0, 222, 0, 0, 0, 216,
0, 0, 0, 215, 0, 0, 0, 215, 0, 0, 0, 215,
0, 0, 0, 216, 0, 0, 0, 219, 0, 0, 0, 236,
0, 0, 0, 252, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 254,
0, 0, 0, 246, 0, 0, 0, 228, 0, 0, 0, 218,
0, 0, 0, 216, 0, 0, 0, 216, 0, 0, 0, 216,
0, 0, 0, 216, 0, 0, 0, 225, 0, 0, 0, 244,
0, 0, 0, 254, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 252, 0, 0, 0, 243, 0, 0, 0, 231,
0, 0, 0, 223, 0, 0, 0, 219, 0, 0, 0, 217,
0, 0, 0, 220, 0, 0, 0, 234, 0, 0, 0, 250,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 253, 0, 0, 0, 249,
0, 0, 0, 242, 0, 0, 0, 235, 0, 0, 0, 231,
0, 0, 0, 235, 0, 0, 0, 247, 0, 0, 0, 254,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255,
},{
0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 100,
0, 0, 0, 76, 0, 0, 0, 210, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 64,
127, 127, 127, 64, 2, 2, 2, 73, 0, 0, 0, 210,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 64,
190, 190, 190, 64, 127, 127, 127, 64, 2, 2, 2, 73,
0, 0, 0, 210, 0, 0, 0, 255, 0, 0, 0, 252,
0, 0, 0, 248, 0, 0, 0, 248, 0, 0, 0, 251,
0, 0, 0, 254, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 64,
190, 190, 190, 64, 190, 190, 190, 64, 127, 127, 127, 64,
2, 2, 2, 73, 0, 0, 0, 208, 0, 0, 0, 241,
0, 0, 0, 230, 0, 0, 0, 228, 0, 0, 0, 237,
0, 0, 0, 249, 0, 0, 0, 254, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
127, 127, 127, 64, 2, 2, 2, 71, 0, 0, 0, 189,
0, 0, 0, 219, 0, 0, 0, 218, 0, 0, 0, 222,
0, 0, 0, 235, 0, 0, 0, 249, 0, 0, 0, 254,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 127, 127, 127, 62, 2, 2, 2, 64,
0, 0, 0, 179, 0, 0, 0, 217, 0, 0, 0, 217,
0, 0, 0, 222, 0, 0, 0, 235, 0, 0, 0, 249,
0, 0, 0, 254, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 189, 189, 189, 62, 127, 127, 127, 57,
3, 3, 3, 62, 0, 0, 0, 179, 0, 0, 0, 217,
0, 0, 0, 217, 0, 0, 0, 222, 0, 0, 0, 235,
0, 0, 0, 249, 0, 0, 0, 254, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 189, 189, 189, 62, 189, 189, 189, 57,
127, 127, 127, 54, 3, 3, 3, 62, 0, 0, 0, 179,
0, 0, 0, 217, 0, 0, 0, 217, 0, 0, 0, 222,
0, 0, 0, 235, 0, 0, 0, 249, 0, 0, 0, 254,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 189, 189, 189, 62, 189, 189, 189, 57,
190, 190, 190, 54, 127, 127, 127, 54, 3, 3, 3, 62,
0, 0, 0, 179, 0, 0, 0, 217, 0, 0, 0, 217,
0, 0, 0, 222, 0, 0, 0, 235, 0, 0, 0, 249,
0, 0, 0, 254, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 189, 189, 189, 62, 189, 189, 189, 57,
190, 190, 190, 54, 190, 190, 190, 54, 127, 127, 127, 54,
3, 3, 3, 62, 0, 0, 0, 179, 0, 0, 0, 217,
0, 0, 0, 217, 0, 0, 0, 222, 0, 0, 0, 235,
0, 0, 0, 249, 0, 0, 0, 254, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 189, 189, 189, 62, 189, 189, 189, 57,
190, 190, 190, 54, 190, 190, 190, 54, 190, 190, 190, 54,
127, 127, 127, 54, 3, 3, 3, 62, 0, 0, 0, 179,
0, 0, 0, 217, 0, 0, 0, 217, 0, 0, 0, 222,
0, 0, 0, 235, 0, 0, 0, 249, 0, 0, 0, 254,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 189, 189, 189, 62, 189, 189, 189, 57,
190, 190, 190, 54, 190, 190, 190, 54, 190, 190, 190, 54,
190, 190, 190, 54, 127, 127, 127, 54, 3, 3, 3, 62,
0, 0, 0, 189, 0, 0, 0, 217, 0, 0, 0, 217,
0, 0, 0, 222, 0, 0, 0, 235, 0, 0, 0, 249,
0, 0, 0, 254, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 189, 189, 189, 62, 189, 189, 189, 57,
190, 190, 190, 54, 190, 190, 190, 54, 190, 190, 190, 54,
186, 186, 186, 54, 130, 130, 130, 54, 26, 26, 26, 54,
0, 0, 0, 161, 0, 0, 0, 217, 0, 0, 0, 217,
0, 0, 0, 217, 0, 0, 0, 222, 0, 0, 0, 235,
0, 0, 0, 249, 0, 0, 0, 254, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 189, 189, 189, 62, 189, 189, 189, 57,
190, 190, 190, 54, 178, 178, 178, 54, 103, 103, 103, 54,
23, 23, 23, 54, 0, 0, 0, 79, 0, 0, 0, 148,
0, 0, 0, 214, 0, 0, 0, 217, 0, 0, 0, 217,
0, 0, 0, 217, 0, 0, 0, 217, 0, 0, 0, 222,
0, 0, 0, 235, 0, 0, 0, 249, 0, 0, 0, 254,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 189, 189, 189, 62, 189, 189, 189, 57,
190, 190, 190, 54, 56, 56, 56, 54, 0, 0, 0, 82,
0, 0, 0, 171, 0, 0, 0, 217, 0, 0, 0, 217,
0, 0, 0, 217, 0, 0, 0, 217, 0, 0, 0, 217,
0, 0, 0, 217, 0, 0, 0, 217, 0, 0, 0, 217,
0, 0, 0, 222, 0, 0, 0, 235, 0, 0, 0, 250,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 64,
190, 190, 190, 64, 190, 190, 190, 64, 187, 187, 187, 64,
127, 127, 127, 64, 147, 147, 147, 62, 189, 189, 189, 57,
190, 190, 190, 54, 133, 133, 133, 54, 0, 0, 0, 77,
0, 0, 0, 217, 0, 0, 0, 217, 0, 0, 0, 217,
0, 0, 0, 217, 0, 0, 0, 217, 0, 0, 0, 217,
0, 0, 0, 217, 0, 0, 0, 217, 0, 0, 0, 217,
0, 0, 0, 218, 0, 0, 0, 224, 0, 0, 0, 243,
0, 0, 0, 254, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 64,
175, 175, 175, 64, 100, 100, 100, 64, 20, 20, 20, 64,
0, 0, 0, 79, 56, 56, 56, 62, 189, 189, 189, 57,
190, 190, 190, 54, 190, 190, 190, 54, 26, 26, 26, 54,
0, 0, 0, 169, 0, 0, 0, 217, 0, 0, 0, 217,
0, 0, 0, 217, 0, 0, 0, 217, 0, 0, 0, 217,
0, 0, 0, 217, 0, 0, 0, 217, 0, 0, 0, 217,
0, 0, 0, 217, 0, 0, 0, 222, 0, 0, 0, 241,
0, 0, 0, 253, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 85,
5, 5, 5, 67, 0, 0, 0, 124, 0, 0, 0, 204,
0, 0, 0, 240, 2, 2, 2, 68, 165, 165, 165, 57,
190, 190, 190, 54, 190, 190, 190, 54, 106, 106, 106, 54,
0, 0, 0, 100, 0, 0, 0, 217, 0, 0, 0, 217,
0, 0, 0, 217, 0, 0, 0, 217, 0, 0, 0, 217,
0, 0, 0, 217, 0, 0, 0, 217, 0, 0, 0, 218,
0, 0, 0, 221, 0, 0, 0, 230, 0, 0, 0, 246,
0, 0, 0, 254, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 246,
0, 0, 0, 240, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 132, 88, 88, 88, 57,
190, 190, 190, 54, 190, 190, 190, 54, 178, 178, 178, 54,
8, 8, 8, 54, 0, 0, 0, 192, 0, 0, 0, 217,
0, 0, 0, 217, 0, 0, 0, 217, 0, 0, 0, 217,
0, 0, 0, 217, 0, 0, 0, 219, 0, 0, 0, 227,
0, 0, 0, 236, 0, 0, 0, 245, 0, 0, 0, 253,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 209, 14, 14, 14, 57,
184, 184, 184, 54, 190, 190, 190, 54, 190, 190, 190, 54,
80, 80, 80, 54, 0, 0, 0, 123, 0, 0, 0, 217,
0, 0, 0, 217, 0, 0, 0, 217, 0, 0, 0, 217,
0, 0, 0, 217, 0, 0, 0, 223, 0, 0, 0, 239,
0, 0, 0, 251, 0, 0, 0, 254, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 246, 0, 0, 0, 92,
121, 121, 121, 54, 190, 190, 190, 54, 190, 190, 190, 54,
160, 160, 160, 54, 0, 0, 0, 62, 0, 0, 0, 207,
0, 0, 0, 217, 0, 0, 0, 217, 0, 0, 0, 217,
0, 0, 0, 217, 0, 0, 0, 221, 0, 0, 0, 238,
0, 0, 0, 252, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 248, 0, 0, 0, 166,
41, 41, 41, 55, 190, 190, 190, 54, 189, 189, 189, 55,
169, 169, 169, 55, 23, 23, 23, 55, 0, 0, 0, 176,
0, 0, 0, 217, 0, 0, 0, 217, 0, 0, 0, 217,
0, 0, 0, 217, 0, 0, 0, 218, 0, 0, 0, 230,
0, 0, 0, 248, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 252, 0, 0, 0, 234,
0, 0, 0, 71, 109, 109, 109, 57, 62, 62, 62, 58,
2, 2, 2, 65, 0, 0, 0, 122, 0, 0, 0, 214,
0, 0, 0, 217, 0, 0, 0, 217, 0, 0, 0, 217,
0, 0, 0, 217, 0, 0, 0, 217, 0, 0, 0, 223,
0, 0, 0, 241, 0, 0, 0, 253, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 251,
0, 0, 0, 178, 0, 0, 0, 109, 0, 0, 0, 163,
0, 0, 0, 233, 0, 0, 0, 240, 0, 0, 0, 222,
0, 0, 0, 217, 0, 0, 0, 217, 0, 0, 0, 217,
0, 0, 0, 217, 0, 0, 0, 217, 0, 0, 0, 219,
0, 0, 0, 233, 0, 0, 0, 250, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 247, 0, 0, 0, 229,
0, 0, 0, 218, 0, 0, 0, 217, 0, 0, 0, 217,
0, 0, 0, 217, 0, 0, 0, 217, 0, 0, 0, 217,
0, 0, 0, 226, 0, 0, 0, 245, 0, 0, 0, 254,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 252, 0, 0, 0, 237,
0, 0, 0, 221, 0, 0, 0, 217, 0, 0, 0, 217,
0, 0, 0, 217, 0, 0, 0, 217, 0, 0, 0, 217,
0, 0, 0, 223, 0, 0, 0, 243, 0, 0, 0, 254,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 254, 0, 0, 0, 245,
0, 0, 0, 226, 0, 0, 0, 218, 0, 0, 0, 217,
0, 0, 0, 217, 0, 0, 0, 217, 0, 0, 0, 219,
0, 0, 0, 229, 0, 0, 0, 246, 0, 0, 0, 254,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 251,
0, 0, 0, 235, 0, 0, 0, 222, 0, 0, 0, 219,
0, 0, 0, 220, 0, 0, 0, 224, 0, 0, 0, 232,
0, 0, 0, 243, 0, 0, 0, 252, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 254,
0, 0, 0, 247, 0, 0, 0, 236, 0, 0, 0, 232,
0, 0, 0, 236, 0, 0, 0, 243, 0, 0, 0, 249,
0, 0, 0, 253, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255,
},{
0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 13, 14, 20, 170, 45, 49, 63, 26,
50, 52, 63, 26, 63, 67, 78, 80, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
17, 18, 21, 197, 36, 36, 41, 108, 53, 53, 63, 0,
58, 57, 69, 0, 76, 81, 96, 28, 62, 65, 76, 129,
16, 17, 19, 233, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
4, 4, 17, 55, 94, 94, 99, 0, 210, 213, 218, 0,
206, 209, 214, 0, 117, 118, 124, 0, 23, 24, 36, 0,
31, 33, 38, 210, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
13, 12, 22, 55, 100, 100, 103, 0, 202, 204, 208, 0,
193, 195, 200, 0, 122, 123, 128, 0, 29, 30, 39, 0,
29, 32, 36, 210, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
14, 14, 25, 55, 101, 101, 104, 0, 201, 203, 208, 0,
193, 195, 200, 0, 121, 121, 127, 0, 32, 32, 43, 0,
28, 31, 37, 210, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
17, 16, 27, 55, 101, 101, 104, 0, 200, 203, 207, 0,
193, 196, 201, 0, 119, 120, 125, 0, 33, 33, 44, 0,
26, 29, 36, 187, 0, 0, 0, 189, 0, 0, 0, 189,
0, 0, 0, 203, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
17, 16, 27, 55, 101, 101, 104, 0, 199, 201, 206, 0,
194, 196, 200, 0, 118, 119, 124, 0, 36, 36, 46, 0,
24, 27, 34, 173, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 187, 0, 0, 0, 220, 0, 0, 0, 248,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
18, 17, 28, 55, 102, 103, 106, 0, 202, 205, 210, 0,
198, 200, 205, 0, 117, 118, 123, 0, 40, 40, 51, 0,
7, 7, 9, 169, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 240,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
20, 19, 29, 55, 104, 104, 107, 0, 204, 206, 212, 0,
201, 203, 208, 0, 117, 117, 123, 0, 34, 35, 47, 0,
13, 15, 19, 160, 12, 13, 17, 164, 13, 14, 17, 164,
13, 14, 17, 164, 14, 15, 18, 164, 12, 13, 15, 224,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
2, 2, 6, 197, 22, 22, 30, 20, 33, 33, 39, 20,
19, 20, 25, 163, 0, 0, 0, 255, 0, 0, 0, 255,
23, 22, 33, 55, 103, 103, 106, 0, 205, 207, 212, 0,
202, 204, 210, 0, 114, 114, 121, 0, 27, 27, 36, 0,
41, 45, 56, 0, 43, 46, 58, 0, 38, 41, 54, 0,
52, 54, 65, 0, 49, 51, 64, 0, 51, 54, 66, 45,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
9, 9, 9, 28, 79, 80, 85, 0, 82, 82, 89, 0,
52, 54, 63, 77, 25, 28, 34, 151, 0, 0, 0, 255,
23, 22, 33, 55, 103, 103, 106, 0, 207, 209, 213, 0,
205, 207, 212, 0, 112, 113, 119, 0, 33, 32, 42, 0,
72, 73, 78, 0, 36, 36, 47, 0, 30, 30, 41, 0,
74, 75, 81, 0, 45, 44, 52, 0, 39, 40, 50, 22,
41, 42, 49, 126, 25, 26, 30, 211, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
26, 26, 26, 25, 211, 213, 218, 0, 214, 217, 221, 0,
67, 67, 77, 0, 21, 20, 26, 50, 5, 5, 7, 246,
25, 24, 32, 50, 103, 103, 106, 0, 209, 211, 215, 0,
208, 210, 214, 0, 111, 112, 118, 0, 60, 60, 70, 0,
209, 210, 214, 0, 98, 99, 106, 0, 77, 76, 83, 0,
204, 206, 210, 0, 67, 68, 74, 0, 34, 34, 44, 0,
2, 2, 20, 0, 58, 61, 70, 143, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
2, 2, 2, 104, 73, 74, 78, 0, 216, 218, 222, 0,
191, 193, 199, 0, 149, 150, 156, 3, 23, 23, 36, 11,
33, 32, 40, 0, 97, 97, 101, 0, 209, 211, 216, 0,
208, 210, 214, 0, 113, 113, 119, 0, 57, 56, 65, 0,
204, 205, 209, 0, 99, 99, 105, 0, 78, 77, 84, 0,
198, 200, 205, 0, 70, 69, 77, 0, 87, 86, 93, 0,
167, 168, 173, 0, 73, 74, 83, 2, 45, 47, 54, 101,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 2, 218, 27, 27, 31, 61, 130, 131, 135, 0,
197, 198, 203, 0, 183, 184, 190, 0, 90, 90, 100, 0,
38, 37, 47, 0, 103, 103, 108, 0, 210, 212, 216, 0,
210, 212, 217, 0, 159, 160, 164, 0, 108, 109, 114, 0,
209, 211, 215, 0, 148, 149, 153, 0, 122, 122, 127, 0,
202, 204, 209, 0, 78, 78, 87, 0, 112, 112, 118, 0,
201, 203, 208, 0, 68, 67, 74, 0, 39, 40, 46, 89,
0, 0, 0, 252, 0, 0, 0, 252, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 2, 2, 3, 198, 17, 16, 26, 0,
163, 165, 169, 0, 203, 205, 209, 0, 222, 224, 228, 0,
62, 61, 70, 0, 107, 107, 114, 0, 209, 211, 216, 0,
225, 227, 231, 0, 213, 215, 220, 0, 209, 212, 216, 0,
214, 216, 220, 0, 212, 214, 218, 0, 205, 208, 213, 0,
210, 212, 217, 0, 66, 67, 74, 0, 107, 108, 113, 0,
202, 204, 208, 0, 68, 68, 75, 0, 38, 38, 46, 63,
0, 0, 0, 178, 0, 0, 0, 190, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 3, 3, 4, 209, 21, 20, 31, 0,
170, 172, 176, 0, 209, 211, 216, 0, 210, 212, 216, 0,
55, 54, 63, 0, 107, 108, 114, 0, 209, 212, 216, 0,
230, 232, 236, 0, 239, 242, 245, 0, 236, 238, 242, 0,
234, 237, 241, 0, 229, 232, 237, 0, 219, 221, 227, 0,
209, 211, 216, 0, 194, 197, 202, 0, 204, 206, 211, 0,
205, 207, 211, 0, 67, 67, 74, 0, 36, 38, 45, 63,
0, 0, 0, 178, 0, 0, 0, 184, 0, 0, 0, 219,
0, 0, 0, 242, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 3, 3, 3, 226, 5, 5, 14, 93,
110, 111, 119, 22, 177, 179, 183, 0, 215, 217, 221, 0,
111, 111, 120, 0, 155, 156, 162, 0, 213, 215, 220, 0,
228, 231, 234, 0, 233, 236, 240, 0, 232, 235, 240, 0,
229, 231, 236, 0, 225, 227, 231, 0, 217, 220, 225, 0,
211, 213, 218, 0, 203, 205, 211, 0, 201, 203, 208, 0,
214, 216, 221, 0, 66, 66, 72, 0, 36, 38, 45, 63,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 221, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
10, 9, 20, 65, 87, 87, 93, 0, 229, 231, 234, 0,
210, 212, 216, 0, 205, 207, 212, 0, 213, 215, 221, 0,
221, 224, 229, 0, 226, 229, 234, 0, 226, 229, 234, 0,
221, 223, 228, 0, 216, 219, 224, 0, 213, 215, 221, 0,
209, 211, 216, 0, 203, 206, 212, 0, 201, 203, 208, 0,
214, 217, 221, 0, 63, 62, 68, 0, 36, 37, 44, 63,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 179, 0, 0, 0, 209, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 247, 14, 14, 17, 170, 36, 37, 48, 0,
204, 206, 209, 0, 212, 214, 220, 0, 212, 214, 219, 0,
215, 218, 224, 0, 219, 222, 227, 0, 218, 221, 227, 0,
215, 217, 223, 0, 211, 213, 219, 0, 209, 211, 217, 0,
206, 208, 215, 0, 206, 209, 215, 0, 212, 214, 219, 0,
217, 219, 224, 0, 53, 52, 59, 0, 34, 36, 44, 63,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 204, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 205, 28, 27, 35, 0,
198, 199, 203, 0, 211, 214, 219, 0, 207, 210, 215, 0,
208, 210, 216, 0, 209, 212, 218, 0, 210, 212, 217, 0,
206, 209, 215, 0, 204, 207, 213, 0, 200, 203, 209, 0,
198, 201, 206, 0, 206, 209, 215, 0, 201, 203, 207, 0,
152, 154, 160, 0, 41, 43, 51, 58, 14, 14, 18, 124,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 204, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 1, 205, 5, 5, 18, 0,
207, 209, 213, 0, 221, 223, 227, 0, 205, 207, 212, 0,
200, 203, 209, 0, 203, 206, 212, 0, 202, 205, 211, 0,
200, 202, 208, 0, 197, 199, 205, 0, 195, 198, 203, 0,
193, 195, 200, 0, 196, 198, 203, 0, 154, 155, 160, 0,
36, 36, 42, 0, 43, 49, 60, 108, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 204, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 254, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 253, 0, 0, 1, 244,
32, 31, 42, 14, 115, 115, 120, 0, 195, 197, 201, 0,
195, 197, 202, 0, 196, 199, 204, 0, 196, 199, 205, 0,
196, 198, 203, 0, 194, 196, 201, 0, 191, 194, 199, 0,
191, 193, 197, 0, 191, 193, 198, 0, 156, 157, 162, 0,
32, 31, 38, 0, 44, 48, 59, 108, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 204, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
25, 25, 36, 16, 109, 110, 114, 0, 198, 200, 205, 0,
194, 196, 201, 0, 195, 197, 203, 0, 195, 198, 203, 0,
194, 197, 202, 0, 194, 196, 200, 0, 193, 195, 199, 0,
191, 193, 198, 0, 191, 193, 197, 0, 156, 158, 163, 0,
28, 27, 34, 0, 29, 32, 39, 126, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 204, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
9, 9, 21, 39, 81, 82, 86, 1, 176, 178, 182, 22,
170, 171, 175, 21, 170, 172, 176, 15, 171, 173, 176, 15,
170, 171, 175, 15, 169, 171, 175, 15, 168, 170, 174, 16,
168, 170, 173, 22, 168, 170, 174, 22, 136, 138, 141, 15,
18, 18, 23, 0, 25, 27, 33, 134, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 204, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 248, 0, 0, 0, 77, 0, 0, 0, 52,
0, 0, 0, 49, 0, 0, 0, 36, 0, 0, 0, 36,
0, 0, 0, 36, 0, 0, 0, 36, 0, 0, 0, 36,
0, 0, 0, 38, 0, 0, 0, 38, 0, 0, 0, 36,
0, 0, 0, 109, 1, 1, 1, 176, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 200, 0, 0, 0, 229, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 254, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 241, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 223, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 254, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 254, 0, 0, 0, 249, 0, 0, 0, 184,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 223, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 184,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 231, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 191,
0, 0, 0, 178, 0, 0, 0, 183, 0, 0, 0, 183,
0, 0, 0, 183, 0, 0, 0, 183, 0, 0, 0, 183,
0, 0, 0, 183, 0, 0, 0, 183, 0, 0, 0, 185,
0, 0, 0, 185, 0, 0, 0, 182, 0, 0, 0, 178,
0, 0, 0, 235, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 251,
0, 0, 0, 200, 0, 0, 0, 193, 0, 0, 0, 193,
0, 0, 0, 193, 0, 0, 0, 193, 0, 0, 0, 193,
0, 0, 0, 193, 0, 0, 0, 193, 0, 0, 0, 194,
0, 0, 0, 194, 0, 0, 0, 193, 0, 0, 0, 221,
0, 0, 0, 253, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255,
},{
0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 254,
7, 7, 7, 246, 14, 14, 14, 239, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 254, 45, 45, 45, 164,
51, 51, 51, 83, 47, 47, 47, 67, 53, 53, 53, 61,
45, 45, 45, 54, 50, 50, 50, 64, 55, 55, 55, 135,
24, 24, 24, 223, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
8, 8, 8, 243, 39, 39, 39, 111, 7, 7, 7, 50,
0, 0, 0, 50, 0, 0, 0, 50, 0, 0, 0, 50,
0, 0, 0, 50, 0, 0, 0, 50, 1, 1, 1, 50,
37, 37, 37, 61, 48, 48, 48, 177, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
59, 59, 59, 100, 3, 3, 3, 50, 2, 2, 2, 50,
0, 0, 0, 50, 0, 0, 0, 50, 0, 0, 0, 50,
0, 0, 0, 50, 0, 0, 0, 50, 1, 1, 1, 50,
4, 4, 4, 50, 44, 44, 44, 56, 26, 26, 26, 226,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 6, 6, 6, 248,
35, 35, 35, 54, 1, 1, 1, 50, 2, 2, 2, 50,
0, 0, 0, 50, 0, 0, 0, 50, 0, 0, 0, 50,
0, 0, 0, 50, 0, 0, 0, 50, 0, 0, 0, 50,
1, 1, 1, 50, 31, 31, 31, 50, 44, 44, 44, 205,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 2, 2, 2, 252,
38, 38, 38, 55, 16, 16, 16, 50, 2, 2, 2, 50,
1, 1, 1, 50, 1, 1, 1, 50, 0, 0, 0, 50,
0, 0, 0, 50, 1, 1, 1, 50, 1, 1, 1, 48,
5, 5, 5, 44, 30, 30, 30, 42, 35, 35, 35, 171,
0, 0, 0, 208, 0, 0, 0, 210, 0, 0, 0, 243,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 254,
77, 77, 77, 56, 39, 39, 39, 51, 2, 2, 2, 50,
14, 14, 14, 50, 12, 12, 12, 50, 2, 2, 2, 50,
3, 3, 3, 50, 13, 13, 13, 45, 2, 2, 2, 36,
4, 4, 4, 35, 65, 65, 65, 36, 39, 39, 39, 134,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 203, 0, 0, 0, 249, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
101, 101, 101, 58, 45, 45, 45, 66, 98, 98, 98, 50,
161, 161, 161, 50, 155, 155, 155, 50, 16, 16, 16, 50,
112, 112, 112, 44, 161, 161, 161, 35, 131, 131, 131, 35,
14, 14, 14, 35, 108, 108, 108, 54, 7, 7, 7, 172,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 191, 0, 0, 0, 253,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
84, 84, 84, 117, 14, 14, 14, 50, 149, 149, 149, 50,
163, 163, 163, 50, 148, 148, 148, 50, 41, 41, 41, 49,
106, 106, 106, 35, 163, 163, 163, 35, 163, 163, 163, 35,
33, 33, 33, 35, 84, 84, 84, 63, 15, 15, 15, 166,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 238,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
72, 72, 72, 70, 5, 5, 5, 50, 65, 65, 65, 50,
108, 108, 108, 50, 58, 58, 58, 50, 125, 125, 125, 50,
79, 79, 79, 35, 97, 97, 97, 35, 80, 80, 80, 35,
6, 6, 6, 35, 36, 36, 36, 40, 27, 27, 27, 153,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 238,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
14, 14, 14, 239, 57, 57, 57, 141, 71, 71, 71, 102,
61, 61, 61, 87, 12, 12, 12, 50, 154, 154, 154, 52,
94, 94, 94, 35, 38, 38, 38, 41, 70, 70, 70, 87,
69, 69, 69, 54, 30, 30, 30, 147, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 233,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 100, 100, 100, 99,
100, 100, 100, 102, 48, 48, 48, 57, 23, 23, 23, 50,
42, 42, 42, 39, 92, 92, 92, 50, 50, 50, 50, 129,
49, 49, 49, 135, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 186, 0, 0, 0, 245,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 21, 21, 21, 227,
33, 33, 33, 206, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 28, 28, 28, 214, 43, 43, 43, 50,
111, 111, 111, 105, 99, 99, 99, 63, 103, 103, 103, 60,
105, 105, 105, 45, 114, 114, 114, 59, 67, 67, 67, 60,
50, 50, 50, 102, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 178, 8, 8, 8, 171, 35, 35, 35, 145,
0, 0, 0, 178, 0, 0, 0, 196, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 3, 3, 3, 251, 55, 55, 55, 66,
29, 29, 29, 51, 18, 18, 18, 225, 0, 0, 0, 255,
0, 0, 0, 255, 38, 38, 38, 205, 30, 30, 30, 51,
105, 105, 105, 57, 102, 102, 102, 63, 99, 99, 99, 56,
112, 112, 112, 42, 113, 113, 113, 46, 19, 19, 19, 35,
41, 41, 41, 111, 0, 0, 0, 178, 0, 0, 0, 178,
23, 23, 23, 158, 52, 52, 52, 65, 55, 55, 55, 36,
13, 13, 13, 168, 0, 0, 0, 180, 0, 0, 0, 239,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 42, 42, 42, 206, 24, 24, 24, 50,
6, 6, 6, 50, 47, 47, 47, 178, 0, 0, 0, 254,
0, 0, 0, 255, 0, 0, 0, 255, 48, 48, 48, 168,
24, 24, 24, 52, 32, 32, 32, 50, 63, 63, 63, 50,
40, 40, 40, 43, 14, 14, 14, 37, 38, 38, 38, 60,
17, 17, 17, 165, 0, 0, 0, 178, 29, 29, 29, 147,
40, 40, 40, 48, 55, 55, 55, 48, 49, 49, 49, 38,
9, 9, 9, 170, 0, 0, 0, 211, 0, 0, 0, 254,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 45, 45, 45, 137, 4, 4, 4, 50,
3, 3, 3, 50, 44, 44, 44, 68, 38, 38, 38, 203,
0, 0, 0, 254, 0, 0, 0, 255, 0, 0, 0, 255,
26, 26, 26, 193, 41, 41, 41, 72, 39, 39, 39, 57,
14, 14, 14, 71, 22, 22, 22, 140, 1, 1, 1, 211,
0, 0, 0, 202, 36, 36, 36, 137, 31, 31, 31, 46,
16, 16, 16, 35, 87, 87, 87, 50, 24, 24, 24, 47,
23, 23, 23, 191, 0, 0, 0, 254, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
32, 32, 32, 198, 30, 30, 30, 60, 65, 65, 65, 62,
38, 38, 38, 50, 6, 6, 6, 50, 24, 24, 24, 50,
55, 55, 55, 110, 38, 38, 38, 199, 3, 3, 3, 251,
0, 0, 0, 255, 0, 0, 0, 255, 2, 2, 2, 252,
2, 2, 2, 252, 11, 11, 11, 237, 11, 11, 11, 167,
15, 15, 15, 115, 40, 40, 40, 40, 76, 76, 76, 62,
84, 84, 84, 47, 53, 53, 53, 39, 36, 36, 36, 39,
20, 20, 20, 192, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
80, 80, 80, 119, 2, 2, 2, 50, 20, 20, 20, 50,
41, 41, 41, 67, 64, 64, 64, 50, 10, 10, 10, 50,
2, 2, 2, 50, 14, 14, 14, 50, 51, 51, 51, 66,
60, 60, 60, 120, 8, 8, 8, 244, 0, 0, 0, 255,
12, 12, 12, 214, 51, 51, 51, 83, 24, 24, 24, 36,
15, 15, 15, 39, 93, 93, 93, 41, 55, 55, 55, 64,
47, 47, 47, 118, 38, 38, 38, 150, 41, 41, 41, 145,
2, 2, 2, 214, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 222, 0, 0, 0, 194,
0, 0, 0, 253, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
21, 21, 21, 231, 90, 90, 90, 96, 51, 51, 51, 185,
0, 0, 0, 255, 13, 13, 13, 239, 9, 9, 9, 227,
55, 55, 55, 102, 36, 36, 36, 54, 42, 42, 42, 36,
96, 96, 96, 35, 73, 73, 73, 88, 24, 24, 24, 75,
7, 7, 7, 50, 13, 13, 13, 50, 62, 62, 62, 40,
80, 80, 80, 78, 38, 38, 38, 148, 0, 0, 0, 178,
0, 0, 0, 179, 0, 0, 0, 181, 2, 2, 2, 177,
1, 1, 1, 234, 0, 0, 0, 255, 0, 0, 0, 254,
0, 0, 0, 206, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 250, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
57, 57, 57, 191, 24, 24, 24, 50, 25, 25, 25, 106,
8, 8, 8, 232, 8, 8, 8, 244, 3, 3, 3, 251,
73, 73, 73, 148, 66, 66, 66, 97, 55, 55, 55, 38,
7, 7, 7, 35, 3, 3, 3, 40, 40, 40, 40, 50,
77, 77, 77, 93, 80, 80, 80, 106, 34, 34, 34, 51,
44, 44, 44, 45, 26, 26, 26, 102, 14, 14, 14, 148,
44, 44, 44, 141, 65, 65, 65, 133, 55, 55, 55, 82,
29, 29, 29, 77, 46, 46, 46, 194, 0, 0, 0, 198,
0, 0, 0, 178, 0, 0, 0, 189, 0, 0, 0, 180,
0, 0, 0, 249, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 58, 58, 58, 57, 35, 35, 35, 65,
14, 14, 14, 51, 17, 17, 17, 52, 15, 15, 15, 60,
4, 4, 4, 48, 1, 1, 1, 38, 30, 30, 30, 38,
56, 56, 56, 61, 49, 49, 49, 114, 23, 23, 23, 173,
33, 33, 33, 182, 60, 60, 60, 84, 45, 45, 45, 57,
35, 35, 35, 50, 14, 14, 14, 45, 60, 60, 60, 50,
38, 38, 38, 46, 18, 18, 18, 47, 4, 4, 4, 50,
6, 6, 6, 48, 35, 35, 35, 140, 0, 0, 0, 181,
0, 0, 0, 184, 0, 0, 0, 182, 0, 0, 0, 178,
0, 0, 0, 236, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 57, 57, 57, 131, 34, 34, 34, 51,
28, 28, 28, 52, 58, 58, 58, 50, 36, 36, 36, 50,
54, 54, 54, 48, 46, 46, 46, 104, 23, 23, 23, 158,
1, 1, 1, 177, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 190, 13, 13, 13, 206,
43, 43, 43, 187, 60, 60, 60, 112, 54, 54, 54, 57,
85, 85, 85, 58, 87, 87, 87, 60, 39, 39, 39, 41,
60, 60, 60, 71, 16, 16, 16, 169, 0, 0, 0, 189,
0, 0, 0, 192, 0, 0, 0, 203, 0, 0, 0, 205,
0, 0, 0, 253, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 35, 35, 35, 119, 12, 12, 12, 50,
76, 76, 76, 62, 46, 46, 46, 98, 51, 51, 51, 169,
11, 11, 11, 216, 0, 0, 0, 191, 0, 0, 0, 204,
0, 0, 0, 229, 0, 0, 0, 217, 0, 0, 0, 212,
0, 0, 0, 181, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 179, 0, 0, 0, 223, 18, 18, 18, 195,
56, 56, 56, 84, 15, 15, 15, 36, 6, 6, 6, 35,
46, 46, 46, 121, 0, 0, 0, 211, 0, 0, 0, 238,
0, 0, 0, 253, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 38, 38, 38, 194, 50, 50, 50, 115,
51, 51, 51, 158, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 234, 0, 0, 0, 182, 0, 0, 0, 225,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 226, 0, 0, 0, 201, 0, 0, 0, 180,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 180, 53, 53, 53, 102, 58, 58, 58, 62,
35, 35, 35, 166, 0, 0, 0, 240, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 227,
0, 0, 0, 220, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 247, 0, 0, 0, 178, 0, 0, 0, 180,
0, 0, 0, 203, 0, 0, 0, 207, 0, 0, 0, 213,
0, 0, 0, 181, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 190, 0, 0, 0, 213,
0, 0, 0, 218, 1, 1, 1, 177, 1, 1, 1, 177,
0, 0, 0, 178, 0, 0, 0, 182, 0, 0, 0, 194,
0, 0, 0, 190, 0, 0, 0, 183, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 198, 0, 0, 0, 184,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 186, 0, 0, 0, 214,
0, 0, 0, 237, 0, 0, 0, 253, 0, 0, 0, 255,
0, 0, 0, 254, 0, 0, 0, 235, 0, 0, 0, 220,
0, 0, 0, 199, 0, 0, 0, 178, 0, 0, 0, 181,
0, 0, 0, 181, 0, 0, 0, 180, 0, 0, 0, 178,
0, 0, 0, 187, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 202, 0, 0, 0, 178,
0, 0, 0, 183, 0, 0, 0, 178, 0, 0, 0, 192,
0, 0, 0, 223, 0, 0, 0, 252, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 245, 0, 0, 0, 214,
0, 0, 0, 179, 0, 0, 0, 184, 0, 0, 0, 178,
0, 0, 0, 218, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 210, 0, 0, 0, 178,
0, 0, 0, 191, 0, 0, 0, 241, 0, 0, 0, 254,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 245, 0, 0, 0, 188, 0, 0, 0, 178,
0, 0, 0, 226, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 254, 0, 0, 0, 247,
0, 0, 0, 251, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 239, 0, 0, 0, 237,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255,
},{
0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 13, 13, 13, 233, 58, 58, 58, 179,
87, 87, 87, 150, 89, 89, 89, 146, 68, 68, 68, 166,
23, 23, 23, 213, 0, 0, 0, 253, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 22, 22, 22, 226,
150, 150, 150, 90, 239, 239, 239, 8, 249, 249, 249, 0,
242, 242, 242, 0, 243, 243, 243, 0, 248, 248, 248, 0,
248, 248, 248, 2, 180, 180, 180, 46, 50, 50, 50, 175,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 35, 35, 35, 212, 220, 220, 220, 26,
245, 245, 245, 0, 197, 197, 197, 0, 159, 159, 159, 1,
134, 134, 134, 21, 133, 133, 133, 30, 178, 178, 178, 6,
219, 219, 219, 0, 242, 242, 242, 0, 229, 229, 229, 2,
83, 83, 83, 126, 0, 0, 0, 254, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
4, 4, 4, 247, 200, 200, 200, 43, 246, 246, 246, 0,
175, 175, 175, 0, 82, 82, 82, 54, 12, 12, 12, 200,
0, 0, 0, 253, 0, 0, 0, 255, 3, 3, 3, 229,
81, 81, 81, 103, 216, 216, 216, 2, 239, 239, 239, 0,
216, 216, 216, 2, 45, 45, 45, 167, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
80, 80, 80, 160, 254, 254, 254, 0, 206, 206, 206, 0,
104, 104, 104, 36, 1, 1, 1, 239, 0, 0, 0, 255,
0, 0, 0, 246, 0, 0, 0, 207, 0, 0, 0, 182,
0, 0, 0, 178, 75, 75, 75, 96, 242, 242, 242, 0,
231, 231, 231, 0, 140, 140, 140, 31, 0, 0, 0, 202,
0, 0, 0, 243, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
163, 163, 163, 75, 243, 243, 243, 0, 177, 177, 177, 0,
36, 36, 36, 155, 0, 0, 0, 255, 0, 0, 0, 239,
0, 0, 0, 185, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 178, 1, 1, 1, 177, 203, 203, 203, 20,
242, 242, 242, 0, 183, 183, 183, 2, 5, 5, 5, 156,
0, 0, 0, 182, 0, 0, 0, 232, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
141, 141, 141, 57, 162, 162, 162, 11, 139, 139, 139, 6,
3, 3, 3, 229, 0, 0, 0, 250, 0, 0, 0, 187,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 195,
0, 0, 0, 236, 0, 0, 0, 252, 168, 168, 168, 66,
243, 243, 243, 0, 178, 178, 178, 1, 10, 10, 10, 145,
0, 0, 0, 178, 0, 0, 0, 182, 0, 0, 0, 242,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 254, 0, 0, 0, 247, 2, 2, 2, 228,
0, 0, 0, 254, 0, 0, 0, 218, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 194, 0, 0, 0, 252,
0, 0, 0, 255, 2, 2, 2, 251, 207, 207, 207, 32,
234, 234, 234, 0, 154, 154, 154, 5, 2, 2, 2, 183,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 204,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 191, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 234, 0, 0, 0, 255,
0, 0, 0, 255, 105, 105, 105, 137, 253, 253, 253, 0,
196, 196, 196, 0, 88, 88, 88, 64, 0, 0, 0, 246,
0, 0, 0, 179, 0, 0, 0, 178, 0, 0, 0, 184,
0, 0, 0, 254, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 251, 0, 0, 0, 183, 0, 0, 0, 179,
0, 0, 0, 183, 0, 0, 0, 253, 0, 0, 0, 254,
99, 99, 99, 143, 248, 248, 248, 3, 213, 213, 213, 0,
126, 126, 126, 10, 13, 13, 13, 203, 0, 0, 0, 255,
0, 0, 0, 186, 0, 0, 0, 178, 0, 0, 0, 180,
0, 0, 0, 251, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 253, 0, 0, 0, 247,
0, 0, 0, 242, 2, 2, 2, 252, 126, 126, 126, 115,
251, 251, 251, 1, 213, 213, 213, 0, 130, 130, 130, 6,
24, 24, 24, 170, 0, 0, 0, 255, 0, 0, 0, 251,
0, 0, 0, 181, 0, 0, 0, 178, 0, 0, 0, 184,
0, 0, 0, 254, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
1, 1, 1, 253, 138, 138, 138, 104, 252, 252, 252, 0,
202, 202, 202, 0, 119, 119, 119, 11, 21, 21, 21, 175,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 214,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 206,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
87, 87, 87, 155, 252, 252, 252, 1, 200, 200, 200, 0,
113, 113, 113, 19, 13, 13, 13, 197, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 218, 0, 0, 0, 179,
0, 0, 0, 178, 0, 0, 0, 183, 0, 0, 0, 244,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 2, 2, 2, 250,
211, 211, 211, 30, 231, 231, 231, 0, 139, 139, 139, 5,
13, 13, 13, 196, 0, 0, 0, 255, 0, 0, 0, 254,
0, 0, 0, 210, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 181, 0, 0, 0, 233, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 32, 32, 32, 207,
252, 252, 252, 1, 208, 208, 208, 0, 85, 85, 85, 78,
0, 0, 0, 255, 0, 0, 0, 254, 0, 0, 0, 205,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 182,
0, 0, 0, 233, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 58, 58, 58, 176,
253, 253, 253, 0, 195, 195, 195, 0, 59, 59, 59, 128,
0, 0, 0, 255, 0, 0, 0, 218, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 185, 0, 0, 0, 240,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 49, 49, 49, 177,
174, 174, 174, 17, 134, 134, 134, 17, 35, 35, 35, 153,
0, 0, 0, 250, 0, 0, 0, 182, 0, 0, 0, 178,
0, 0, 0, 182, 0, 0, 0, 241, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 254,
0, 0, 0, 251, 0, 0, 0, 251, 0, 0, 0, 254,
0, 0, 0, 231, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 211, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 252,
0, 0, 0, 252, 0, 0, 0, 252, 0, 0, 0, 254,
0, 0, 0, 220, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 228, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 176, 176, 176, 51,
238, 238, 238, 0, 230, 230, 230, 0, 55, 55, 55, 148,
0, 0, 0, 219, 0, 0, 0, 179, 0, 0, 0, 179,
0, 0, 0, 234, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 182, 182, 182, 51,
252, 252, 252, 0, 204, 204, 204, 0, 46, 46, 46, 148,
0, 0, 0, 253, 0, 0, 0, 250, 0, 0, 0, 250,
0, 0, 0, 254, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 4, 4, 4, 245,
31, 31, 31, 206, 37, 37, 37, 199, 195, 195, 195, 40,
249, 249, 249, 0, 200, 200, 200, 0, 80, 80, 80, 108,
49, 49, 49, 186, 31, 31, 31, 197, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 3, 3, 3, 247,
182, 182, 182, 40, 251, 251, 251, 0, 254, 254, 254, 0,
253, 253, 253, 0, 236, 236, 236, 0, 247, 247, 247, 0,
204, 204, 204, 0, 49, 49, 49, 97, 0, 0, 0, 184,
0, 0, 0, 236, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
41, 41, 41, 186, 233, 233, 233, 1, 250, 250, 250, 0,
254, 254, 254, 0, 249, 249, 249, 0, 197, 197, 197, 0,
100, 100, 100, 25, 0, 0, 0, 173, 0, 0, 0, 178,
0, 0, 0, 234, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 127, 127, 127, 87, 243, 243, 243, 0,
252, 252, 252, 0, 223, 223, 223, 0, 151, 151, 151, 0,
23, 23, 23, 123, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 224, 0, 0, 0, 241, 0, 0, 0, 245,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 12, 12, 12, 228, 209, 209, 209, 14,
243, 243, 243, 0, 184, 184, 184, 0, 78, 78, 78, 47,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 227,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 77, 77, 77, 143,
231, 231, 231, 0, 135, 135, 135, 3, 11, 11, 11, 146,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 195, 0, 0, 0, 254,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 250,
154, 154, 154, 48, 56, 56, 56, 104, 0, 0, 0, 190,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 179, 0, 0, 0, 238, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
21, 21, 21, 201, 3, 3, 3, 233, 0, 0, 0, 235,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 206, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 205, 0, 0, 0, 178, 0, 0, 0, 182,
0, 0, 0, 246, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 247, 0, 0, 0, 183, 0, 0, 0, 217,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 229, 0, 0, 0, 252,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255,
},{
0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 2, 3, 2, 251,
14, 20, 12, 231, 23, 36, 18, 210, 28, 45, 22, 199,
29, 47, 23, 197, 28, 48, 21, 194, 20, 35, 15, 211,
5, 8, 4, 244, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 254,
32, 43, 28, 204, 79, 121, 65, 112, 100, 173, 76, 47,
95, 180, 66, 38, 82, 175, 50, 38, 77, 169, 46, 38,
74, 166, 44, 38, 68, 162, 37, 38, 67, 161, 36, 38,
62, 155, 30, 42, 63, 138, 38, 74, 43, 96, 26, 129,
16, 38, 9, 202, 0, 0, 0, 254, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
1, 1, 1, 253, 39, 54, 33, 191, 95, 142, 79, 88,
107, 184, 82, 38, 83, 175, 52, 38, 54, 149, 22, 38,
33, 116, 5, 38, 24, 98, 0, 42, 21, 83, 0, 66,
17, 68, 0, 99, 15, 60, 0, 116, 12, 51, 0, 134,
13, 52, 0, 134, 17, 66, 0, 117, 27, 92, 5, 85,
36, 114, 10, 54, 34, 95, 13, 106, 10, 23, 5, 220,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 54, 94, 41, 123, 0, 1, 0, 250,
0, 0, 0, 255, 0, 0, 0, 255, 24, 33, 22, 216,
99, 140, 86, 93, 107, 185, 81, 38, 87, 181, 55, 38,
52, 147, 20, 39, 26, 102, 0, 38, 18, 75, 0, 62,
7, 30, 0, 156, 0, 3, 0, 240, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 2, 0, 248, 11, 44, 0, 167, 27, 94, 4, 76,
0, 3, 0, 245, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
12, 16, 10, 235, 78, 157, 52, 42, 9, 37, 0, 179,
1, 1, 1, 253, 70, 93, 62, 148, 116, 182, 94, 43,
96, 184, 66, 38, 68, 174, 33, 38, 37, 134, 5, 39,
22, 90, 0, 39, 9, 35, 0, 126, 0, 1, 0, 248,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 254,
0, 0, 0, 245, 0, 0, 0, 236, 0, 0, 0, 232,
0, 0, 0, 229, 0, 0, 0, 227, 0, 0, 0, 231,
0, 0, 0, 239, 0, 0, 0, 252, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
42, 64, 35, 177, 79, 171, 49, 38, 26, 102, 1, 80,
78, 106, 69, 133, 117, 188, 94, 38, 82, 182, 49, 38,
53, 168, 15, 38, 32, 129, 0, 39, 22, 89, 0, 39,
7, 29, 0, 148, 0, 0, 0, 254, 0, 0, 0, 255,
0, 0, 0, 246, 0, 0, 0, 214, 0, 0, 0, 185,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 181, 0, 0, 0, 194,
0, 0, 0, 217, 0, 0, 0, 246, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
72, 117, 57, 115, 78, 178, 45, 39, 49, 164, 11, 38,
91, 182, 61, 39, 81, 182, 47, 38, 49, 172, 7, 38,
35, 141, 0, 38, 23, 95, 0, 38, 7, 28, 0, 150,
0, 0, 0, 255, 0, 0, 0, 244, 0, 0, 0, 208,
0, 0, 0, 180, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 179, 0, 0, 0, 187,
0, 0, 0, 201, 0, 0, 0, 208, 0, 0, 0, 215,
0, 0, 0, 219, 0, 0, 0, 215, 0, 0, 0, 206,
0, 0, 0, 195, 0, 0, 0, 184, 0, 0, 0, 218,
0, 0, 0, 252, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 2, 2, 1, 252,
96, 164, 73, 58, 72, 179, 36, 38, 48, 173, 6, 38,
54, 175, 13, 38, 47, 173, 5, 35, 39, 160, 0, 34,
29, 120, 0, 38, 14, 56, 0, 98, 0, 0, 0, 250,
0, 0, 0, 214, 0, 0, 0, 180, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 181,
0, 0, 0, 208, 0, 0, 0, 243, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 246, 0, 0, 0, 208,
0, 0, 0, 222, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 26, 38, 22, 209,
96, 178, 69, 42, 62, 178, 24, 38, 43, 172, 0, 38,
43, 172, 0, 38, 42, 171, 0, 32, 37, 149, 0, 29,
26, 104, 0, 38, 3, 14, 0, 189, 0, 0, 0, 188,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 188, 0, 0, 0, 243,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 56, 89, 45, 148,
87, 181, 55, 39, 53, 175, 12, 38, 43, 172, 0, 38,
43, 172, 0, 38, 42, 172, 0, 28, 37, 152, 0, 27,
29, 118, 0, 38, 9, 25, 3, 153, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 192, 0, 0, 0, 248, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 85, 141, 67, 86,
77, 179, 42, 40, 47, 173, 5, 38, 42, 171, 0, 38,
41, 166, 0, 36, 39, 159, 0, 27, 37, 150, 0, 27,
38, 147, 2, 27, 50, 149, 17, 29, 35, 95, 15, 76,
7, 20, 3, 154, 0, 0, 0, 178, 0, 0, 0, 191,
0, 0, 0, 249, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 252,
3, 12, 0, 217, 3, 12, 0, 228, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 11, 16, 10, 236, 101, 177, 75, 44,
62, 171, 26, 38, 38, 150, 0, 38, 34, 139, 0, 38,
32, 129, 0, 33, 29, 117, 0, 27, 25, 104, 0, 29,
20, 85, 0, 40, 15, 60, 0, 71, 9, 36, 0, 108,
2, 9, 0, 156, 0, 0, 0, 179, 0, 0, 0, 241,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 1, 0, 249, 3, 14, 0, 209,
8, 35, 0, 157, 15, 59, 0, 105, 21, 85, 0, 55,
53, 129, 27, 39, 32, 53, 25, 186, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 40, 62, 33, 179, 75, 161, 46, 38,
30, 117, 1, 38, 26, 104, 0, 39, 20, 83, 0, 61,
14, 56, 0, 84, 7, 32, 0, 114, 2, 12, 0, 150,
0, 0, 0, 175, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 203, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 2, 0, 246, 4, 17, 0, 200, 9, 38, 0, 151,
15, 61, 0, 100, 22, 89, 0, 52, 27, 107, 0, 39,
29, 120, 0, 38, 33, 131, 0, 38, 54, 155, 19, 38,
98, 175, 73, 45, 8, 11, 7, 241, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 33, 63, 22, 159, 15, 54, 2, 119,
7, 29, 0, 171, 2, 9, 0, 223, 0, 0, 0, 249,
0, 0, 0, 181, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 205, 0, 0, 0, 250,
0, 0, 0, 255, 0, 0, 0, 255, 11, 41, 1, 159,
33, 107, 8, 47, 33, 119, 5, 38, 31, 125, 0, 40,
33, 132, 0, 38, 35, 142, 0, 38, 38, 152, 0, 38,
40, 161, 0, 38, 46, 168, 5, 38, 78, 180, 43, 39,
80, 134, 62, 93, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 231,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 184,
0, 0, 0, 218, 0, 0, 0, 254, 0, 0, 0, 254,
16, 40, 8, 197, 41, 116, 16, 90, 38, 147, 2, 38,
39, 160, 0, 38, 43, 171, 0, 38, 43, 172, 0, 39,
43, 172, 0, 38, 54, 175, 14, 38, 87, 181, 56, 39,
52, 83, 41, 154, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 245, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 210,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 179,
0, 0, 0, 183, 0, 0, 0, 198, 0, 0, 0, 215,
0, 0, 0, 235, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 3, 14, 0, 211, 28, 114, 0, 38,
38, 155, 0, 38, 43, 172, 0, 38, 43, 172, 0, 38,
43, 172, 0, 38, 63, 178, 25, 38, 96, 178, 68, 39,
22, 32, 19, 186, 0, 0, 0, 205, 0, 0, 0, 187,
0, 0, 0, 178, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 188,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 183,
0, 0, 0, 201, 0, 0, 0, 219, 0, 0, 0, 237,
0, 0, 0, 253, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 11, 44, 0, 123, 29, 117, 0, 38,
39, 160, 0, 38, 43, 172, 0, 36, 44, 173, 1, 33,
45, 173, 3, 31, 72, 179, 37, 28, 92, 158, 69, 45,
1, 1, 1, 177, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 250, 0, 0, 0, 205,
0, 0, 0, 222, 0, 0, 0, 240, 0, 0, 0, 254,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
3, 12, 0, 206, 22, 89, 0, 42, 34, 138, 0, 37,
44, 170, 2, 29, 65, 178, 26, 27, 69, 179, 32, 27,
52, 172, 12, 27, 83, 181, 51, 27, 68, 110, 53, 85,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 2, 10, 0, 212,
17, 69, 0, 54, 29, 118, 0, 38, 43, 161, 4, 38,
67, 178, 31, 38, 104, 186, 76, 33, 92, 155, 71, 50,
39, 148, 4, 28, 88, 179, 57, 27, 37, 58, 30, 129,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 185, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 3, 13, 0, 200, 17, 71, 0, 52,
28, 115, 0, 39, 49, 159, 13, 39, 77, 181, 44, 38,
105, 186, 79, 38, 115, 160, 100, 72, 15, 20, 14, 175,
21, 87, 0, 65, 90, 168, 63, 31, 8, 12, 7, 168,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 206, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 1, 4, 0, 239,
6, 26, 0, 188, 0, 0, 0, 254, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 1, 4, 0, 239,
8, 32, 0, 151, 19, 79, 0, 45, 34, 124, 4, 39,
64, 168, 30, 38, 94, 184, 64, 38, 118, 183, 96, 42,
78, 108, 68, 130, 7, 8, 7, 232, 0, 0, 0, 179,
7, 29, 0, 134, 65, 120, 47, 64, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 227, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 1, 7, 0, 237,
30, 95, 8, 95, 28, 96, 6, 83, 9, 38, 0, 170,
5, 22, 0, 201, 1, 7, 0, 234, 0, 2, 0, 245,
0, 3, 0, 242, 2, 9, 0, 226, 3, 16, 0, 209,
7, 30, 0, 171, 11, 46, 0, 131, 20, 83, 0, 50,
29, 112, 1, 38, 54, 147, 22, 38, 89, 181, 58, 38,
110, 184, 86, 39, 94, 137, 80, 95, 28, 36, 25, 214,
0, 0, 0, 253, 0, 0, 0, 198, 0, 0, 0, 178,
0, 0, 0, 177, 19, 30, 14, 149, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 179,
0, 0, 0, 248, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 16, 44, 6, 186, 43, 118, 18, 76,
52, 143, 21, 39, 45, 133, 16, 38, 35, 120, 8, 41,
33, 115, 5, 40, 37, 122, 8, 38, 38, 125, 10, 38,
44, 133, 13, 38, 51, 144, 20, 38, 65, 161, 33, 38,
88, 179, 58, 38, 109, 182, 85, 41, 85, 126, 72, 107,
30, 40, 27, 208, 0, 0, 0, 255, 0, 0, 0, 253,
0, 0, 0, 202, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 179,
0, 0, 0, 192, 0, 0, 0, 178, 0, 0, 0, 194,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 254,
11, 24, 7, 222, 32, 64, 21, 172, 43, 97, 25, 128,
65, 128, 44, 96, 74, 143, 51, 79, 76, 139, 55, 85,
75, 136, 54, 88, 71, 127, 52, 100, 65, 109, 50, 123,
54, 83, 44, 155, 17, 23, 15, 228, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 251, 0, 0, 0, 199,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 180, 0, 0, 0, 225,
0, 0, 0, 237, 0, 0, 0, 178, 0, 0, 0, 215,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 229, 0, 0, 0, 243, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 254,
0, 0, 0, 230, 0, 0, 0, 191, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 194, 0, 0, 0, 240, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 197, 0, 0, 0, 237,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 229, 0, 0, 0, 187, 0, 0, 0, 206,
0, 0, 0, 226, 0, 0, 0, 237, 0, 0, 0, 245,
0, 0, 0, 248, 0, 0, 0, 242, 0, 0, 0, 236,
0, 0, 0, 227, 0, 0, 0, 214, 0, 0, 0, 191,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 188, 0, 0, 0, 225,
0, 0, 0, 254, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 245, 0, 0, 0, 254,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 252, 0, 0, 0, 213,
0, 0, 0, 185, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 178,
0, 0, 0, 178, 0, 0, 0, 178, 0, 0, 0, 192,
0, 0, 0, 226, 0, 0, 0, 253, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 254, 0, 0, 0, 239, 0, 0, 0, 223,
0, 0, 0, 208, 0, 0, 0, 201, 0, 0, 0, 199,
0, 0, 0, 200, 0, 0, 0, 204, 0, 0, 0, 209,
0, 0, 0, 219, 0, 0, 0, 237, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255,
},{
0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 13, 5, 13, 201,
32, 13, 24, 144, 1, 0, 1, 248, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 18, 8, 16, 185, 130, 40, 22, 23,
146, 46, 22, 6, 35, 13, 21, 148, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
2, 1, 2, 245, 95, 32, 25, 56, 169, 58, 22, 0,
163, 57, 25, 0, 104, 34, 24, 42, 3, 1, 4, 238,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 2, 1, 3, 242,
15, 8, 20, 186, 148, 60, 31, 10, 172, 86, 59, 0,
176, 89, 55, 0, 134, 48, 24, 15, 18, 10, 24, 174,
3, 2, 5, 238, 0, 0, 0, 255, 0, 0, 0, 254,
0, 0, 0, 253, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 253, 68, 55, 76, 108,
79, 54, 76, 73, 188, 142, 152, 0, 189, 159, 185, 0,
180, 98, 70, 0, 149, 69, 43, 14, 123, 103, 128, 49,
42, 32, 48, 150, 0, 0, 0, 252, 0, 0, 0, 240,
0, 0, 0, 233, 0, 0, 0, 248, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 13, 7, 17, 198, 160, 134, 161, 15,
152, 121, 143, 18, 198, 177, 205, 0, 205, 187, 216, 0,
175, 106, 91, 0, 172, 95, 70, 9, 205, 182, 205, 3,
103, 85, 109, 67, 0, 0, 0, 240, 0, 0, 0, 215,
0, 0, 0, 209, 0, 0, 0, 231, 0, 0, 0, 252,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 42, 28, 45, 144, 196, 173, 202, 0,
194, 164, 189, 0, 214, 198, 226, 0, 210, 193, 222, 0,
162, 91, 82, 0, 179, 102, 82, 1, 200, 177, 206, 0,
111, 88, 114, 49, 0, 0, 0, 223, 0, 0, 0, 205,
0, 0, 0, 203, 0, 0, 0, 218, 0, 0, 0, 247,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 62, 45, 68, 115, 197, 176, 207, 0,
195, 168, 195, 0, 216, 200, 227, 0, 203, 183, 212, 0,
157, 84, 74, 0, 159, 84, 72, 4, 198, 177, 208, 0,
92, 72, 98, 69, 0, 0, 0, 214, 0, 0, 0, 203,
0, 0, 0, 202, 0, 0, 0, 210, 0, 0, 0, 233,
0, 0, 0, 248, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 84, 66, 91, 87, 202, 183, 212, 0,
191, 164, 193, 0, 217, 202, 227, 0, 197, 173, 203, 0,
173, 113, 112, 0, 163, 96, 92, 4, 202, 184, 214, 0,
76, 58, 80, 81, 0, 0, 0, 205, 0, 0, 0, 202,
0, 0, 0, 202, 0, 0, 0, 203, 0, 0, 0, 210,
0, 0, 0, 234, 0, 0, 0, 253, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 109, 88, 117, 56, 199, 176, 204, 0,
199, 179, 211, 0, 216, 201, 227, 0, 197, 170, 200, 0,
185, 139, 148, 0, 168, 107, 108, 4, 199, 180, 210, 0,
59, 42, 62, 97, 0, 0, 0, 202, 0, 0, 0, 202,
0, 0, 0, 202, 0, 0, 0, 202, 0, 0, 0, 204,
0, 0, 0, 225, 0, 0, 0, 251, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
2, 1, 3, 244, 128, 103, 133, 36, 190, 164, 193, 0,
202, 180, 212, 0, 215, 198, 226, 0, 200, 173, 201, 0,
188, 154, 171, 0, 168, 115, 123, 4, 190, 166, 196, 0,
43, 29, 45, 118, 0, 0, 0, 202, 0, 0, 0, 202,
0, 0, 0, 202, 0, 0, 0, 202, 0, 0, 0, 204,
0, 0, 0, 225, 0, 0, 0, 251, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
13, 6, 14, 207, 148, 121, 151, 22, 206, 183, 213, 0,
191, 155, 180, 0, 209, 186, 214, 0, 205, 178, 203, 0,
222, 205, 227, 0, 190, 160, 184, 0, 187, 161, 191, 1,
28, 17, 29, 138, 0, 0, 0, 202, 0, 0, 0, 202,
0, 0, 0, 202, 0, 0, 0, 202, 0, 0, 0, 205,
0, 0, 0, 228, 0, 0, 0, 252, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 1, 0, 1, 250, 31, 19, 33, 162,
142, 119, 147, 36, 213, 193, 222, 0, 210, 186, 214, 0,
209, 163, 170, 0, 213, 185, 210, 0, 207, 182, 209, 0,
215, 185, 213, 0, 221, 198, 223, 0, 193, 166, 193, 1,
56, 36, 56, 92, 1, 0, 1, 197, 0, 0, 0, 202,
0, 0, 0, 202, 0, 0, 0, 202, 0, 0, 0, 206,
0, 0, 0, 231, 0, 0, 0, 253, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 34, 20, 35, 155, 187, 162, 190, 9,
221, 199, 224, 0, 177, 134, 184, 0, 157, 93, 100, 0,
182, 112, 102, 0, 155, 80, 71, 0, 176, 123, 133, 0,
208, 157, 181, 0, 212, 171, 194, 0, 215, 185, 211, 0,
166, 132, 156, 10, 13, 6, 14, 162, 0, 0, 0, 202,
0, 0, 0, 202, 0, 0, 0, 202, 0, 0, 0, 207,
0, 0, 0, 235, 0, 0, 0, 254, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 82, 54, 73, 85, 182, 138, 159, 2,
184, 134, 149, 2, 195, 142, 153, 0, 180, 102, 88, 0,
200, 155, 159, 0, 149, 81, 74, 0, 173, 85, 67, 0,
197, 146, 156, 0, 190, 134, 142, 0, 166, 113, 125, 5,
119, 78, 95, 34, 14, 6, 14, 163, 0, 0, 0, 202,
0, 0, 0, 202, 0, 0, 0, 202, 0, 0, 0, 208,
0, 0, 0, 238, 0, 0, 0, 254, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 10, 5, 11, 217, 27, 12, 23, 175,
84, 42, 55, 77, 173, 95, 89, 0, 201, 134, 117, 0,
203, 150, 161, 0, 200, 151, 161, 0, 168, 83, 53, 0,
217, 130, 88, 0, 171, 82, 67, 0, 108, 50, 62, 24,
10, 4, 9, 177, 0, 0, 0, 202, 0, 0, 0, 202,
0, 0, 0, 202, 0, 0, 0, 202, 0, 0, 0, 209,
0, 0, 0, 238, 0, 0, 0, 254, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
73, 31, 42, 96, 183, 96, 77, 0, 180, 123, 107, 30,
201, 147, 131, 15, 218, 183, 141, 0, 217, 157, 84, 1,
189, 117, 83, 22, 180, 92, 74, 0, 101, 46, 59, 37,
2, 0, 1, 198, 0, 0, 0, 202, 0, 0, 0, 202,
0, 0, 0, 202, 0, 0, 0, 202, 0, 0, 0, 205,
0, 0, 0, 225, 0, 0, 0, 249, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
111, 57, 68, 63, 215, 153, 138, 0, 155, 112, 104, 64,
47, 23, 29, 187, 102, 67, 55, 115, 77, 44, 41, 119,
148, 103, 100, 49, 207, 145, 147, 0, 104, 52, 61, 56,
0, 0, 0, 202, 0, 0, 0, 202, 0, 0, 0, 202,
0, 0, 0, 202, 0, 0, 0, 202, 0, 0, 0, 204,
0, 0, 0, 217, 0, 0, 0, 246, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 18, 8, 13, 219,
176, 138, 147, 29, 229, 204, 199, 0, 139, 106, 109, 89,
0, 0, 0, 254, 0, 0, 0, 245, 17, 8, 11, 202,
191, 165, 167, 25, 228, 210, 213, 0, 131, 93, 105, 54,
0, 0, 0, 201, 0, 0, 0, 202, 0, 0, 0, 202,
0, 0, 0, 202, 0, 0, 0, 202, 0, 0, 0, 212,
0, 0, 0, 235, 0, 0, 0, 251, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 51, 36, 41, 183,
226, 225, 225, 5, 231, 231, 231, 0, 158, 142, 148, 75,
0, 0, 0, 255, 0, 0, 0, 254, 22, 12, 15, 221,
173, 173, 173, 59, 197, 197, 197, 30, 118, 108, 111, 92,
0, 0, 0, 204, 0, 0, 0, 203, 0, 0, 0, 203,
0, 0, 0, 203, 0, 0, 0, 203, 0, 0, 0, 220,
0, 0, 0, 249, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 8, 7, 8, 246,
86, 86, 86, 160, 107, 107, 107, 136, 35, 35, 35, 216,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 254,
2, 2, 2, 232, 9, 9, 9, 199, 0, 0, 0, 215,
0, 0, 0, 226, 0, 0, 0, 220, 0, 0, 0, 220,
0, 0, 0, 214, 0, 0, 0, 205, 0, 0, 0, 224,
0, 0, 0, 251, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 252,
0, 0, 0, 229, 0, 0, 0, 207, 0, 0, 0, 226,
0, 0, 0, 249, 0, 0, 0, 249, 0, 0, 0, 247,
0, 0, 0, 227, 0, 0, 0, 207, 0, 0, 0, 226,
0, 0, 0, 252, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 249,
0, 0, 0, 221, 0, 0, 0, 207, 0, 0, 0, 229,
0, 0, 0, 252, 0, 0, 0, 255, 0, 0, 0, 251,
0, 0, 0, 227, 0, 0, 0, 212, 0, 0, 0, 230,
0, 0, 0, 252, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 251,
0, 0, 0, 231, 0, 0, 0, 222, 0, 0, 0, 239,
0, 0, 0, 254, 0, 0, 0, 255, 0, 0, 0, 254,
0, 0, 0, 245, 0, 0, 0, 240, 0, 0, 0, 247,
0, 0, 0, 254, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 251, 0, 0, 0, 250, 0, 0, 0, 253,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 254, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255,
},{
0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
28, 28, 28, 226, 34, 34, 34, 220, 34, 34, 34, 220,
34, 34, 34, 220, 34, 34, 34, 220, 34, 34, 34, 220,
34, 34, 34, 220, 15, 15, 15, 239, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 55, 55, 55, 189,
44, 45, 45, 114, 28, 31, 32, 83, 36, 42, 43, 83,
38, 45, 47, 83, 38, 45, 47, 83, 27, 30, 31, 83,
28, 29, 30, 85, 62, 62, 62, 136, 22, 22, 22, 232,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 59, 59, 59, 148,
127, 122, 98, 16, 12, 24, 26, 0, 18, 31, 34, 0,
14, 26, 29, 0, 12, 23, 26, 0, 9, 19, 21, 0,
23, 33, 34, 0, 106, 95, 73, 66, 57, 57, 57, 197,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 60, 60, 60, 142,
175, 160, 127, 25, 117, 114, 93, 7, 174, 154, 118, 0,
200, 173, 128, 0, 189, 161, 115, 0, 135, 116, 80, 0,
76, 70, 55, 35, 127, 111, 79, 60, 58, 58, 58, 196,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 55, 55, 55, 194, 81, 76, 68, 99,
232, 207, 156, 1, 198, 176, 143, 0, 194, 184, 170, 0,
182, 177, 169, 0, 184, 178, 169, 0, 190, 175, 155, 0,
181, 153, 112, 0, 133, 111, 75, 32, 71, 70, 69, 133,
17, 17, 17, 237, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
29, 29, 29, 225, 74, 73, 69, 112, 213, 187, 139, 9,
197, 185, 168, 0, 179, 178, 176, 0, 190, 190, 190, 0,
158, 158, 157, 0, 171, 170, 169, 0, 159, 157, 156, 0,
165, 160, 156, 0, 187, 163, 127, 0, 120, 102, 71, 45,
71, 71, 71, 138, 0, 0, 0, 226, 0, 0, 0, 226,
0, 0, 0, 227, 0, 0, 0, 237, 0, 0, 0, 251,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
67, 67, 67, 161, 160, 144, 113, 43, 202, 181, 151, 0,
192, 192, 192, 0, 208, 209, 209, 0, 197, 197, 197, 0,
207, 208, 208, 0, 200, 200, 200, 0, 187, 187, 186, 0,
139, 137, 140, 0, 151, 146, 141, 0, 196, 164, 117, 0,
80, 73, 60, 78, 37, 37, 37, 174, 0, 0, 0, 204,
0, 0, 0, 206, 0, 0, 0, 219, 0, 0, 0, 244,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 8, 8, 8, 246,
72, 71, 69, 119, 221, 192, 144, 2, 189, 186, 182, 0,
181, 182, 181, 0, 181, 186, 190, 0, 203, 205, 207, 0,
214, 215, 215, 0, 211, 212, 212, 0, 184, 184, 186, 0,
185, 185, 186, 0, 147, 144, 143, 0, 187, 169, 146, 0,
126, 104, 68, 39, 75, 75, 75, 130, 2, 2, 2, 202,
0, 0, 0, 207, 0, 0, 0, 218, 0, 0, 0, 242,
0, 0, 0, 254, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 22, 22, 22, 232,
93, 89, 80, 98, 212, 186, 142, 0, 184, 183, 182, 0,
206, 207, 207, 0, 210, 212, 213, 0, 183, 185, 189, 0,
164, 171, 179, 0, 170, 172, 176, 0, 205, 206, 207, 0,
214, 215, 215, 0, 165, 163, 162, 0, 181, 173, 162, 0,
186, 153, 98, 10, 71, 63, 50, 77, 47, 47, 47, 166,
0, 0, 0, 205, 0, 0, 0, 210, 0, 0, 0, 229,
0, 0, 0, 249, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 22, 22, 22, 232,
93, 87, 77, 96, 210, 185, 141, 0, 164, 162, 160, 0,
201, 202, 202, 0, 217, 219, 219, 0, 213, 214, 214, 0,
150, 158, 168, 0, 189, 191, 193, 0, 213, 214, 214, 0,
215, 216, 216, 0, 159, 157, 156, 0, 182, 174, 162, 0,
194, 158, 100, 3, 87, 72, 51, 61, 52, 52, 52, 162,
0, 0, 0, 204, 0, 0, 0, 205, 0, 0, 0, 212,
0, 0, 0, 235, 0, 0, 0, 252, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 12, 12, 12, 242,
73, 71, 67, 113, 213, 182, 130, 0, 178, 177, 175, 0,
172, 172, 171, 0, 215, 216, 216, 0, 199, 199, 199, 0,
183, 183, 182, 0, 181, 180, 179, 0, 211, 212, 212, 0,
211, 212, 212, 0, 154, 152, 151, 0, 193, 181, 162, 0,
127, 103, 67, 32, 68, 68, 68, 116, 12, 12, 12, 194,
0, 0, 0, 204, 0, 0, 0, 204, 0, 0, 0, 206,
0, 0, 0, 220, 0, 0, 0, 246, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
66, 66, 66, 150, 162, 137, 94, 30, 185, 170, 150, 0,
143, 141, 140, 0, 203, 203, 203, 0, 186, 186, 185, 0,
169, 172, 180, 0, 182, 183, 185, 0, 197, 197, 197, 0,
181, 180, 179, 0, 144, 140, 137, 0, 187, 161, 122, 0,
82, 71, 52, 67, 50, 50, 50, 163, 0, 0, 0, 204,
0, 0, 0, 204, 0, 0, 0, 204, 0, 0, 0, 204,
0, 0, 0, 211, 0, 0, 0, 237, 0, 0, 0, 253,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
45, 45, 45, 209, 73, 66, 54, 97, 197, 165, 113, 2,
177, 172, 165, 0, 138, 136, 136, 0, 166, 164, 164, 0,
176, 175, 176, 0, 186, 185, 185, 0, 166, 164, 163, 0,
164, 161, 160, 0, 182, 165, 143, 0, 140, 115, 75, 21,
69, 68, 68, 110, 5, 5, 5, 199, 0, 0, 0, 204,
0, 0, 0, 204, 0, 0, 0, 204, 0, 0, 0, 204,
0, 0, 0, 207, 0, 0, 0, 223, 0, 0, 0, 248,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 254, 69, 69, 69, 168, 94, 84, 64, 78,
210, 181, 129, 1, 182, 167, 146, 0, 166, 162, 160, 0,
154, 150, 147, 0, 155, 152, 151, 0, 175, 170, 164, 0,
182, 161, 131, 0, 144, 118, 77, 15, 64, 61, 56, 93,
34, 34, 34, 176, 0, 0, 0, 204, 0, 0, 0, 204,
0, 0, 0, 204, 0, 0, 0, 204, 0, 0, 0, 204,
0, 0, 0, 207, 0, 0, 0, 225, 0, 0, 0, 248,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 4, 4, 4, 250, 63, 63, 63, 139,
179, 156, 111, 28, 156, 141, 103, 7, 199, 170, 120, 0,
183, 156, 114, 0, 177, 149, 108, 0, 153, 126, 86, 0,
101, 87, 62, 26, 104, 87, 60, 49, 66, 66, 66, 150,
0, 0, 0, 204, 0, 0, 0, 204, 0, 0, 0, 204,
0, 0, 0, 204, 0, 0, 0, 204, 0, 0, 0, 204,
0, 0, 0, 213, 0, 0, 0, 239, 0, 0, 0, 253,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 58, 58, 58, 145,
135, 123, 89, 9, 6, 18, 21, 0, 14, 23, 23, 0,
23, 23, 18, 0, 16, 16, 13, 0, 3, 10, 11, 0,
18, 24, 21, 0, 103, 87, 60, 54, 53, 53, 53, 161,
0, 0, 0, 204, 0, 0, 0, 204, 0, 0, 0, 204,
0, 0, 0, 204, 0, 0, 0, 204, 0, 0, 0, 206,
0, 0, 0, 223, 0, 0, 0, 248, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 67, 67, 67, 165,
31, 31, 29, 86, 1, 6, 8, 44, 6, 18, 21, 44,
7, 22, 24, 44, 2, 8, 9, 43, 0, 2, 3, 41,
7, 10, 10, 40, 49, 48, 46, 93, 35, 35, 35, 175,
0, 0, 0, 204, 0, 0, 0, 204, 0, 0, 0, 204,
0, 0, 0, 204, 0, 0, 0, 205, 0, 0, 0, 215,
0, 0, 0, 238, 0, 0, 0, 253, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 4, 4, 4, 250,
59, 59, 59, 187, 59, 59, 59, 180, 59, 59, 59, 180,
59, 59, 59, 180, 59, 59, 59, 180, 59, 59, 59, 175,
59, 59, 59, 159, 43, 43, 43, 170, 0, 0, 0, 204,
0, 0, 0, 204, 0, 0, 0, 204, 0, 0, 0, 204,
0, 0, 0, 205, 0, 0, 0, 211, 0, 0, 0, 233,
0, 0, 0, 251, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 253,
0, 0, 0, 233, 0, 0, 0, 212, 0, 0, 0, 205,
0, 0, 0, 204, 0, 0, 0, 204, 0, 0, 0, 204,
0, 0, 0, 207, 0, 0, 0, 218, 0, 0, 0, 243,
0, 0, 0, 254, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 253,
0, 0, 0, 237, 0, 0, 0, 212, 0, 0, 0, 205,
0, 0, 0, 204, 0, 0, 0, 204, 0, 0, 0, 204,
0, 0, 0, 206, 0, 0, 0, 220, 0, 0, 0, 246,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 250, 0, 0, 0, 238, 0, 0, 0, 233,
0, 0, 0, 233, 0, 0, 0, 233, 0, 0, 0, 233,
0, 0, 0, 234, 0, 0, 0, 242, 0, 0, 0, 253,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255,
},{
0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 237,
0, 0, 0, 252, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 251, 0, 0, 0, 65,
0, 0, 0, 77, 0, 0, 0, 95, 0, 0, 0, 76,
0, 0, 0, 195, 0, 0, 0, 209, 0, 0, 0, 105,
0, 0, 0, 77, 0, 0, 0, 95, 0, 0, 0, 77,
0, 0, 0, 245, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 101, 136, 136, 136, 67,
171, 171, 171, 79, 174, 174, 174, 80, 174, 174, 174, 80,
103, 103, 103, 60, 87, 87, 87, 59, 171, 171, 171, 79,
174, 174, 174, 80, 174, 174, 174, 80, 158, 158, 158, 75,
5, 5, 5, 69, 0, 0, 0, 252, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 77, 158, 158, 158, 75,
174, 174, 174, 80, 174, 174, 174, 80, 174, 174, 174, 80,
174, 174, 174, 80, 174, 174, 174, 80, 174, 174, 174, 80,
174, 174, 174, 80, 174, 174, 174, 80, 165, 165, 165, 78,
5, 5, 5, 51, 0, 0, 0, 237, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 245, 5, 5, 5, 67,
10, 10, 10, 68, 8, 8, 8, 52, 105, 105, 105, 64,
174, 174, 174, 80, 174, 174, 174, 80, 125, 125, 125, 66,
10, 10, 10, 57, 10, 10, 10, 63, 8, 8, 8, 81,
0, 0, 0, 215, 0, 0, 0, 253, 0, 0, 0, 253,
0, 0, 0, 252, 0, 0, 0, 251, 0, 0, 0, 251,
0, 0, 0, 252, 0, 0, 0, 254, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 7, 7, 7, 56,
174, 174, 174, 80, 174, 174, 174, 80, 17, 17, 17, 38,
0, 0, 0, 218, 0, 0, 0, 214, 0, 0, 0, 210,
0, 0, 0, 228, 0, 0, 0, 235, 0, 0, 0, 236,
0, 0, 0, 231, 0, 0, 0, 229, 0, 0, 0, 230,
0, 0, 0, 233, 0, 0, 0, 245, 0, 0, 0, 254,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 75,
174, 174, 174, 80, 173, 173, 173, 79, 9, 9, 9, 53,
0, 0, 0, 210, 0, 0, 0, 209, 0, 0, 0, 209,
0, 0, 0, 209, 0, 0, 0, 211, 0, 0, 0, 212,
0, 0, 0, 209, 0, 0, 0, 209, 0, 0, 0, 209,
0, 0, 0, 212, 0, 0, 0, 231, 0, 0, 0, 251,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 59,
174, 174, 174, 80, 173, 173, 173, 79, 12, 12, 12, 62,
0, 0, 0, 212, 0, 0, 0, 207, 0, 0, 0, 206,
0, 0, 0, 205, 0, 0, 0, 205, 0, 0, 0, 205,
0, 0, 0, 205, 0, 0, 0, 206, 0, 0, 0, 207,
0, 0, 0, 211, 0, 0, 0, 231, 0, 0, 0, 251,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 82,
174, 174, 174, 80, 173, 173, 173, 80, 12, 12, 12, 66,
0, 0, 0, 231, 0, 0, 0, 226, 0, 0, 0, 222,
0, 0, 0, 211, 0, 0, 0, 205, 0, 0, 0, 205,
0, 0, 0, 209, 0, 0, 0, 221, 0, 0, 0, 226,
0, 0, 0, 230, 0, 0, 0, 243, 0, 0, 0, 253,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 65,
174, 174, 174, 80, 174, 174, 174, 80, 10, 10, 10, 58,
0, 0, 0, 251, 0, 0, 0, 250, 0, 0, 0, 244,
0, 0, 0, 223, 0, 0, 0, 207, 0, 0, 0, 205,
0, 0, 0, 219, 0, 0, 0, 242, 0, 0, 0, 249,
0, 0, 0, 251, 0, 0, 0, 253, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 82,
174, 174, 174, 80, 174, 174, 174, 80, 7, 7, 7, 48,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 250,
0, 0, 0, 229, 0, 0, 0, 208, 0, 0, 0, 207,
0, 0, 0, 225, 0, 0, 0, 249, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 76,
174, 174, 174, 80, 174, 174, 174, 80, 12, 12, 12, 73,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 251,
0, 0, 0, 229, 0, 0, 0, 209, 0, 0, 0, 207,
0, 0, 0, 226, 0, 0, 0, 250, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 75,
174, 174, 174, 80, 174, 174, 174, 80, 13, 13, 13, 80,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 251,
0, 0, 0, 229, 0, 0, 0, 209, 0, 0, 0, 207,
0, 0, 0, 226, 0, 0, 0, 250, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 89,
174, 174, 174, 80, 174, 174, 174, 80, 11, 11, 11, 65,
0, 0, 0, 252, 0, 0, 0, 255, 0, 0, 0, 251,
0, 0, 0, 229, 0, 0, 0, 209, 0, 0, 0, 207,
0, 0, 0, 226, 0, 0, 0, 250, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 89,
174, 174, 174, 80, 174, 174, 174, 80, 8, 8, 8, 51,
0, 0, 0, 237, 0, 0, 0, 255, 0, 0, 0, 251,
0, 0, 0, 229, 0, 0, 0, 209, 0, 0, 0, 207,
0, 0, 0, 226, 0, 0, 0, 250, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 69,
174, 174, 174, 80, 174, 174, 174, 80, 12, 12, 12, 70,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 251,
0, 0, 0, 229, 0, 0, 0, 209, 0, 0, 0, 207,
0, 0, 0, 226, 0, 0, 0, 250, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 80,
174, 174, 174, 80, 174, 174, 174, 80, 13, 13, 13, 80,
0, 0, 0, 234, 0, 0, 0, 255, 0, 0, 0, 251,
0, 0, 0, 229, 0, 0, 0, 209, 0, 0, 0, 207,
0, 0, 0, 226, 0, 0, 0, 250, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 87,
174, 174, 174, 80, 174, 174, 174, 80, 11, 11, 11, 64,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 251,
0, 0, 0, 229, 0, 0, 0, 209, 0, 0, 0, 207,
0, 0, 0, 226, 0, 0, 0, 250, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 87,
174, 174, 174, 80, 174, 174, 174, 80, 12, 12, 12, 73,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 251,
0, 0, 0, 229, 0, 0, 0, 209, 0, 0, 0, 207,
0, 0, 0, 226, 0, 0, 0, 250, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 95,
174, 174, 174, 80, 174, 174, 174, 80, 12, 12, 12, 73,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 251,
0, 0, 0, 229, 0, 0, 0, 209, 0, 0, 0, 207,
0, 0, 0, 226, 0, 0, 0, 250, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 9, 9, 9, 61,
174, 174, 174, 80, 174, 174, 174, 80, 25, 25, 25, 55,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 251,
0, 0, 0, 229, 0, 0, 0, 209, 0, 0, 0, 207,
0, 0, 0, 226, 0, 0, 0, 250, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 245, 6, 6, 6, 78,
7, 7, 7, 53, 10, 10, 10, 61, 105, 105, 105, 64,
174, 174, 174, 80, 174, 174, 174, 80, 125, 125, 125, 66,
12, 12, 12, 68, 9, 9, 9, 58, 6, 6, 6, 63,
0, 0, 0, 210, 0, 0, 0, 209, 0, 0, 0, 207,
0, 0, 0, 226, 0, 0, 0, 250, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 84, 158, 158, 158, 75,
174, 174, 174, 80, 174, 174, 174, 80, 174, 174, 174, 80,
174, 174, 174, 80, 174, 174, 174, 80, 174, 174, 174, 80,
174, 174, 174, 80, 174, 174, 174, 80, 150, 150, 150, 71,
7, 7, 7, 62, 0, 0, 0, 209, 0, 0, 0, 207,
0, 0, 0, 226, 0, 0, 0, 250, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 88, 147, 147, 147, 72,
174, 174, 174, 80, 174, 174, 174, 80, 174, 174, 174, 80,
103, 103, 103, 60, 87, 87, 87, 59, 171, 171, 171, 79,
174, 174, 174, 80, 174, 174, 174, 80, 157, 157, 157, 74,
8, 8, 8, 82, 0, 0, 0, 193, 0, 0, 0, 207,
0, 0, 0, 225, 0, 0, 0, 249, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 251, 0, 0, 0, 81,
0, 0, 0, 87, 0, 0, 0, 95, 0, 0, 0, 82,
0, 0, 0, 195, 0, 0, 0, 209, 0, 0, 0, 81,
0, 0, 0, 74, 0, 0, 0, 87, 0, 0, 0, 74,
0, 0, 0, 198, 0, 0, 0, 205, 0, 0, 0, 205,
0, 0, 0, 219, 0, 0, 0, 242, 0, 0, 0, 249,
0, 0, 0, 251, 0, 0, 0, 253, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 254, 0, 0, 0, 245,
0, 0, 0, 228, 0, 0, 0, 206, 0, 0, 0, 191,
0, 0, 0, 211, 0, 0, 0, 205, 0, 0, 0, 205,
0, 0, 0, 209, 0, 0, 0, 221, 0, 0, 0, 226,
0, 0, 0, 230, 0, 0, 0, 243, 0, 0, 0, 253,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 252, 0, 0, 0, 234,
0, 0, 0, 212, 0, 0, 0, 207, 0, 0, 0, 206,
0, 0, 0, 205, 0, 0, 0, 205, 0, 0, 0, 205,
0, 0, 0, 205, 0, 0, 0, 206, 0, 0, 0, 207,
0, 0, 0, 211, 0, 0, 0, 231, 0, 0, 0, 251,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 252, 0, 0, 0, 235,
0, 0, 0, 213, 0, 0, 0, 209, 0, 0, 0, 209,
0, 0, 0, 209, 0, 0, 0, 211, 0, 0, 0, 212,
0, 0, 0, 209, 0, 0, 0, 209, 0, 0, 0, 209,
0, 0, 0, 212, 0, 0, 0, 231, 0, 0, 0, 251,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 254, 0, 0, 0, 247,
0, 0, 0, 235, 0, 0, 0, 230, 0, 0, 0, 229,
0, 0, 0, 231, 0, 0, 0, 235, 0, 0, 0, 236,
0, 0, 0, 231, 0, 0, 0, 229, 0, 0, 0, 230,
0, 0, 0, 233, 0, 0, 0, 245, 0, 0, 0, 254,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 254,
0, 0, 0, 252, 0, 0, 0, 251, 0, 0, 0, 251,
0, 0, 0, 252, 0, 0, 0, 253, 0, 0, 0, 253,
0, 0, 0, 252, 0, 0, 0, 251, 0, 0, 0, 251,
0, 0, 0, 252, 0, 0, 0, 254, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255,
},{
0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 252, 0, 0, 0, 168, 0, 0, 0, 162,
0, 0, 0, 246, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 168, 160, 160, 160, 64, 172, 172, 172, 64,
12, 12, 12, 145, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 159, 190, 190, 190, 64, 190, 190, 190, 64,
23, 23, 23, 136, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 159, 190, 190, 190, 64, 190, 190, 190, 64,
23, 23, 23, 136, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 254, 0, 0, 0, 252,
0, 0, 0, 252, 0, 0, 0, 254, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 159, 190, 190, 190, 64, 190, 190, 190, 64,
23, 23, 23, 136, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 254, 0, 0, 0, 247, 0, 0, 0, 235,
0, 0, 0, 234, 0, 0, 0, 245, 0, 0, 0, 254,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 159, 190, 190, 190, 64, 190, 190, 190, 64,
23, 23, 23, 136, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 252, 0, 0, 0, 234, 0, 0, 0, 214,
0, 0, 0, 212, 0, 0, 0, 231, 0, 0, 0, 251,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 159, 190, 190, 190, 64, 190, 190, 190, 64,
23, 23, 23, 136, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 251, 0, 0, 0, 230, 0, 0, 0, 208,
0, 0, 0, 207, 0, 0, 0, 226, 0, 0, 0, 250,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 159, 190, 190, 190, 64, 190, 190, 190, 64,
23, 23, 23, 136, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 251, 0, 0, 0, 230, 0, 0, 0, 208,
0, 0, 0, 207, 0, 0, 0, 226, 0, 0, 0, 250,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 252, 0, 0, 0, 168,
0, 0, 0, 159, 0, 0, 0, 159, 0, 0, 0, 159,
0, 0, 0, 159, 0, 0, 0, 159, 0, 0, 0, 159,
0, 0, 0, 112, 190, 190, 190, 64, 190, 190, 190, 64,
23, 23, 23, 100, 0, 0, 0, 159, 0, 0, 0, 159,
0, 0, 0, 157, 0, 0, 0, 144, 0, 0, 0, 130,
0, 0, 0, 129, 0, 0, 0, 169, 0, 0, 0, 250,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 168, 160, 160, 160, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
189, 189, 189, 63, 190, 190, 190, 57, 189, 189, 189, 52,
189, 189, 189, 52, 112, 112, 112, 57, 0, 0, 0, 213,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 162, 172, 172, 172, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
189, 189, 189, 63, 190, 190, 190, 57, 189, 189, 189, 52,
189, 189, 189, 52, 124, 124, 124, 57, 0, 0, 0, 207,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 246, 12, 12, 12, 145,
23, 23, 23, 136, 23, 23, 23, 136, 23, 23, 23, 136,
23, 23, 23, 136, 23, 23, 23, 136, 23, 23, 23, 135,
23, 23, 23, 98, 189, 189, 189, 63, 189, 189, 189, 63,
44, 44, 44, 89, 23, 23, 23, 133, 23, 23, 23, 133,
23, 23, 23, 131, 23, 23, 23, 121, 23, 23, 23, 110,
23, 23, 23, 110, 5, 5, 5, 146, 0, 0, 0, 246,
0, 0, 0, 251, 0, 0, 0, 251, 0, 0, 0, 251,
0, 0, 0, 251, 0, 0, 0, 252, 0, 0, 0, 253,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 254, 0, 0, 0, 247,
0, 0, 0, 147, 189, 189, 189, 58, 190, 190, 190, 57,
23, 23, 23, 122, 0, 0, 0, 230, 0, 0, 0, 230,
0, 0, 0, 228, 0, 0, 0, 217, 0, 0, 0, 206,
0, 0, 0, 205, 0, 0, 0, 215, 0, 0, 0, 227,
0, 0, 0, 230, 0, 0, 0, 230, 0, 0, 0, 230,
0, 0, 0, 230, 0, 0, 0, 230, 0, 0, 0, 237,
0, 0, 0, 250, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 252, 0, 0, 0, 235,
0, 0, 0, 135, 190, 190, 190, 52, 189, 189, 189, 52,
23, 23, 23, 111, 0, 0, 0, 208, 0, 0, 0, 208,
0, 0, 0, 208, 0, 0, 0, 206, 0, 0, 0, 204,
0, 0, 0, 204, 0, 0, 0, 206, 0, 0, 0, 208,
0, 0, 0, 208, 0, 0, 0, 208, 0, 0, 0, 208,
0, 0, 0, 208, 0, 0, 0, 209, 0, 0, 0, 217,
0, 0, 0, 241, 0, 0, 0, 254, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 252, 0, 0, 0, 234,
0, 0, 0, 134, 189, 189, 189, 52, 189, 189, 189, 52,
23, 23, 23, 110, 0, 0, 0, 207, 0, 0, 0, 207,
0, 0, 0, 207, 0, 0, 0, 206, 0, 0, 0, 204,
0, 0, 0, 204, 0, 0, 0, 205, 0, 0, 0, 207,
0, 0, 0, 207, 0, 0, 0, 207, 0, 0, 0, 207,
0, 0, 0, 207, 0, 0, 0, 208, 0, 0, 0, 216,
0, 0, 0, 240, 0, 0, 0, 254, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 254, 0, 0, 0, 245,
0, 0, 0, 146, 189, 189, 189, 57, 189, 189, 189, 57,
23, 23, 23, 120, 0, 0, 0, 226, 0, 0, 0, 226,
0, 0, 0, 224, 0, 0, 0, 215, 0, 0, 0, 206,
0, 0, 0, 205, 0, 0, 0, 214, 0, 0, 0, 224,
0, 0, 0, 226, 0, 0, 0, 226, 0, 0, 0, 226,
0, 0, 0, 226, 0, 0, 0, 227, 0, 0, 0, 234,
0, 0, 0, 248, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 254,
0, 0, 0, 157, 189, 189, 189, 63, 189, 189, 189, 63,
23, 23, 23, 133, 0, 0, 0, 250, 0, 0, 0, 250,
0, 0, 0, 246, 0, 0, 0, 227, 0, 0, 0, 208,
0, 0, 0, 207, 0, 0, 0, 224, 0, 0, 0, 245,
0, 0, 0, 250, 0, 0, 0, 250, 0, 0, 0, 250,
0, 0, 0, 250, 0, 0, 0, 250, 0, 0, 0, 252,
0, 0, 0, 254, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 159, 190, 190, 190, 64, 190, 190, 190, 64,
23, 23, 23, 136, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 251, 0, 0, 0, 230, 0, 0, 0, 208,
0, 0, 0, 207, 0, 0, 0, 226, 0, 0, 0, 250,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 168, 160, 160, 160, 64, 172, 172, 172, 64,
12, 12, 12, 145, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 251, 0, 0, 0, 230, 0, 0, 0, 208,
0, 0, 0, 207, 0, 0, 0, 226, 0, 0, 0, 250,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 252, 0, 0, 0, 168, 0, 0, 0, 162,
0, 0, 0, 246, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 251, 0, 0, 0, 230, 0, 0, 0, 208,
0, 0, 0, 207, 0, 0, 0, 226, 0, 0, 0, 250,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 251, 0, 0, 0, 230, 0, 0, 0, 208,
0, 0, 0, 207, 0, 0, 0, 226, 0, 0, 0, 250,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 251, 0, 0, 0, 230, 0, 0, 0, 208,
0, 0, 0, 207, 0, 0, 0, 226, 0, 0, 0, 250,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 252, 0, 0, 0, 234, 0, 0, 0, 214,
0, 0, 0, 212, 0, 0, 0, 231, 0, 0, 0, 251,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 254, 0, 0, 0, 247, 0, 0, 0, 235,
0, 0, 0, 234, 0, 0, 0, 245, 0, 0, 0, 254,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 254, 0, 0, 0, 252,
0, 0, 0, 252, 0, 0, 0, 254, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255,
},{
0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 201,
0, 0, 0, 201, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 192, 107, 107, 107, 67,
107, 107, 107, 67, 0, 0, 0, 192, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 192, 107, 107, 107, 67, 190, 190, 190, 64,
190, 190, 190, 64, 107, 107, 107, 67, 0, 0, 0, 192,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 192,
107, 107, 107, 67, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 107, 107, 107, 67,
0, 0, 0, 192, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 253, 0, 0, 0, 253, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 192, 107, 107, 107, 67,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
107, 107, 107, 67, 0, 0, 0, 192, 0, 0, 0, 250,
0, 0, 0, 239, 0, 0, 0, 239, 0, 0, 0, 250,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 201, 107, 107, 107, 67, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 106, 106, 106, 65, 0, 0, 0, 184,
0, 0, 0, 216, 0, 0, 0, 216, 0, 0, 0, 234,
0, 0, 0, 249, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 204, 23, 23, 23, 136, 23, 23, 23, 136,
23, 23, 23, 136, 23, 23, 23, 100, 190, 190, 190, 64,
190, 190, 190, 64, 23, 23, 23, 100, 23, 23, 23, 135,
23, 23, 23, 132, 23, 23, 23, 122, 0, 0, 0, 170,
0, 0, 0, 206, 0, 0, 0, 206, 0, 0, 0, 215,
0, 0, 0, 234, 0, 0, 0, 249, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 159, 190, 190, 190, 64,
190, 190, 190, 64, 0, 0, 0, 159, 0, 0, 0, 249,
0, 0, 0, 234, 0, 0, 0, 215, 0, 0, 0, 206,
0, 0, 0, 204, 0, 0, 0, 204, 0, 0, 0, 206,
0, 0, 0, 215, 0, 0, 0, 234, 0, 0, 0, 249,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 159, 190, 190, 190, 64,
190, 190, 190, 64, 0, 0, 0, 155, 0, 0, 0, 234,
0, 0, 0, 215, 0, 0, 0, 206, 0, 0, 0, 204,
0, 0, 0, 204, 0, 0, 0, 204, 0, 0, 0, 204,
0, 0, 0, 206, 0, 0, 0, 215, 0, 0, 0, 234,
0, 0, 0, 250, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 159, 190, 190, 190, 64,
189, 189, 189, 64, 0, 0, 0, 148, 0, 0, 0, 218,
0, 0, 0, 209, 0, 0, 0, 207, 0, 0, 0, 205,
0, 0, 0, 204, 0, 0, 0, 204, 0, 0, 0, 205,
0, 0, 0, 207, 0, 0, 0, 209, 0, 0, 0, 218,
0, 0, 0, 240, 0, 0, 0, 253, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 159, 190, 190, 190, 64,
189, 189, 189, 64, 0, 0, 0, 150, 0, 0, 0, 229,
0, 0, 0, 226, 0, 0, 0, 224, 0, 0, 0, 215,
0, 0, 0, 206, 0, 0, 0, 206, 0, 0, 0, 215,
0, 0, 0, 224, 0, 0, 0, 226, 0, 0, 0, 229,
0, 0, 0, 242, 0, 0, 0, 253, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 159, 190, 190, 190, 64,
190, 190, 190, 64, 0, 0, 0, 158, 0, 0, 0, 250,
0, 0, 0, 250, 0, 0, 0, 246, 0, 0, 0, 227,
0, 0, 0, 208, 0, 0, 0, 208, 0, 0, 0, 227,
0, 0, 0, 246, 0, 0, 0, 250, 0, 0, 0, 250,
0, 0, 0, 253, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 159, 190, 190, 190, 64,
190, 190, 190, 64, 0, 0, 0, 159, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 251, 0, 0, 0, 230,
0, 0, 0, 208, 0, 0, 0, 208, 0, 0, 0, 230,
0, 0, 0, 251, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 159, 190, 190, 190, 64,
190, 190, 190, 64, 0, 0, 0, 159, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 251, 0, 0, 0, 230,
0, 0, 0, 208, 0, 0, 0, 208, 0, 0, 0, 230,
0, 0, 0, 251, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 159, 190, 190, 190, 64,
190, 190, 190, 64, 0, 0, 0, 159, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 251, 0, 0, 0, 230,
0, 0, 0, 208, 0, 0, 0, 208, 0, 0, 0, 230,
0, 0, 0, 251, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 159, 190, 190, 190, 64,
190, 190, 190, 64, 0, 0, 0, 159, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 251, 0, 0, 0, 230,
0, 0, 0, 208, 0, 0, 0, 208, 0, 0, 0, 230,
0, 0, 0, 251, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 180, 68, 68, 68, 88, 71, 71, 71, 88,
71, 71, 71, 88, 71, 71, 71, 76, 190, 190, 190, 64,
190, 190, 190, 64, 71, 71, 71, 76, 71, 71, 71, 88,
71, 71, 71, 88, 68, 68, 68, 87, 0, 0, 0, 160,
0, 0, 0, 208, 0, 0, 0, 208, 0, 0, 0, 230,
0, 0, 0, 251, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 225, 62, 62, 62, 82, 187, 187, 187, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
187, 187, 187, 64, 62, 62, 62, 80, 0, 0, 0, 202,
0, 0, 0, 208, 0, 0, 0, 208, 0, 0, 0, 230,
0, 0, 0, 251, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 225, 62, 62, 62, 82,
187, 187, 187, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 187, 187, 187, 64,
62, 62, 62, 82, 0, 0, 0, 221, 0, 0, 0, 229,
0, 0, 0, 208, 0, 0, 0, 208, 0, 0, 0, 229,
0, 0, 0, 251, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 225,
62, 62, 62, 82, 187, 187, 187, 64, 190, 190, 190, 64,
190, 190, 190, 64, 186, 186, 186, 63, 61, 61, 61, 79,
0, 0, 0, 216, 0, 0, 0, 243, 0, 0, 0, 225,
0, 0, 0, 207, 0, 0, 0, 207, 0, 0, 0, 225,
0, 0, 0, 243, 0, 0, 0, 246, 0, 0, 0, 247,
0, 0, 0, 251, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 225, 62, 62, 62, 82, 187, 187, 187, 64,
187, 187, 187, 63, 62, 62, 62, 76, 0, 0, 0, 197,
0, 0, 0, 220, 0, 0, 0, 218, 0, 0, 0, 212,
0, 0, 0, 205, 0, 0, 0, 205, 0, 0, 0, 212,
0, 0, 0, 218, 0, 0, 0, 220, 0, 0, 0, 224,
0, 0, 0, 240, 0, 0, 0, 253, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 225, 62, 62, 62, 82,
62, 62, 62, 81, 0, 0, 0, 213, 0, 0, 0, 221,
0, 0, 0, 208, 0, 0, 0, 206, 0, 0, 0, 205,
0, 0, 0, 204, 0, 0, 0, 204, 0, 0, 0, 205,
0, 0, 0, 206, 0, 0, 0, 208, 0, 0, 0, 221,
0, 0, 0, 242, 0, 0, 0, 254, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 234,
0, 0, 0, 234, 0, 0, 0, 252, 0, 0, 0, 239,
0, 0, 0, 219, 0, 0, 0, 207, 0, 0, 0, 204,
0, 0, 0, 204, 0, 0, 0, 204, 0, 0, 0, 204,
0, 0, 0, 207, 0, 0, 0, 219, 0, 0, 0, 239,
0, 0, 0, 252, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 251,
0, 0, 0, 238, 0, 0, 0, 219, 0, 0, 0, 207,
0, 0, 0, 204, 0, 0, 0, 204, 0, 0, 0, 207,
0, 0, 0, 219, 0, 0, 0, 238, 0, 0, 0, 251,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 251, 0, 0, 0, 238, 0, 0, 0, 219,
0, 0, 0, 207, 0, 0, 0, 207, 0, 0, 0, 219,
0, 0, 0, 238, 0, 0, 0, 251, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 251, 0, 0, 0, 239,
0, 0, 0, 221, 0, 0, 0, 221, 0, 0, 0, 239,
0, 0, 0, 251, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 252,
0, 0, 0, 244, 0, 0, 0, 244, 0, 0, 0, 252,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 254, 0, 0, 0, 254, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255,
},{
0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 253,
20, 20, 20, 148, 15, 15, 15, 160, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 28, 28, 28, 128, 7, 7, 7, 177,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 246, 34, 34, 34, 122,
168, 168, 168, 64, 36, 36, 36, 133, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 73, 73, 73, 95, 149, 149, 149, 64,
16, 16, 16, 152, 0, 0, 0, 254, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 236, 52, 52, 52, 103, 179, 179, 179, 64,
190, 190, 190, 64, 36, 36, 36, 133, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 254, 0, 0, 0, 253, 0, 0, 0, 254,
0, 0, 0, 255, 73, 73, 73, 95, 190, 190, 190, 64,
164, 164, 164, 64, 29, 29, 29, 128, 0, 0, 0, 249,
0, 0, 0, 255, 0, 0, 0, 253, 0, 0, 0, 253,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 222,
75, 75, 75, 87, 186, 186, 186, 64, 190, 190, 190, 64,
190, 190, 190, 64, 87, 87, 87, 83, 63, 63, 63, 117,
63, 63, 63, 117, 63, 63, 63, 117, 63, 63, 63, 116,
63, 63, 63, 111, 63, 63, 63, 109, 63, 63, 63, 115,
63, 63, 63, 117, 112, 112, 112, 73, 190, 190, 190, 64,
190, 190, 190, 64, 176, 176, 176, 64, 47, 47, 47, 108,
0, 0, 0, 238, 0, 0, 0, 239, 0, 0, 0, 234,
0, 0, 0, 248, 0, 0, 0, 254, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 36, 36, 36, 106,
187, 187, 187, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 189, 189, 189, 63, 189, 189, 189, 59,
189, 189, 189, 54, 189, 189, 189, 55, 189, 189, 189, 62,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 173, 173, 173, 64,
11, 11, 11, 141, 0, 0, 0, 229, 0, 0, 0, 212,
0, 0, 0, 225, 0, 0, 0, 245, 0, 0, 0, 254,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 234,
56, 56, 56, 100, 181, 181, 181, 64, 190, 190, 190, 64,
190, 190, 190, 64, 70, 70, 70, 91, 42, 42, 42, 138,
42, 42, 42, 133, 42, 42, 42, 122, 42, 42, 42, 113,
42, 42, 42, 111, 42, 42, 42, 117, 42, 42, 42, 131,
42, 42, 42, 136, 99, 99, 99, 75, 190, 190, 190, 63,
190, 190, 190, 63, 167, 167, 167, 63, 32, 32, 32, 122,
0, 0, 0, 241, 0, 0, 0, 226, 0, 0, 0, 207,
0, 0, 0, 208, 0, 0, 0, 222, 0, 0, 0, 243,
0, 0, 0, 253, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 245, 37, 37, 37, 118, 170, 170, 170, 64,
190, 190, 190, 64, 35, 35, 35, 133, 0, 0, 0, 247,
0, 0, 0, 227, 0, 0, 0, 210, 0, 0, 0, 205,
0, 0, 0, 204, 0, 0, 0, 210, 0, 0, 0, 222,
0, 0, 0, 226, 73, 73, 73, 84, 189, 189, 189, 57,
151, 151, 151, 57, 18, 18, 18, 129, 0, 0, 0, 224,
0, 0, 0, 224, 0, 0, 0, 214, 0, 0, 0, 205,
0, 0, 0, 204, 0, 0, 0, 207, 0, 0, 0, 219,
0, 0, 0, 241, 0, 0, 0, 253, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 252, 22, 22, 22, 141,
156, 156, 156, 64, 36, 36, 36, 132, 0, 0, 0, 235,
0, 0, 0, 211, 0, 0, 0, 205, 0, 0, 0, 204,
0, 0, 0, 204, 0, 0, 0, 205, 0, 0, 0, 206,
0, 0, 0, 206, 73, 73, 73, 77, 131, 131, 131, 54,
8, 8, 8, 140, 0, 0, 0, 206, 0, 0, 0, 206,
0, 0, 0, 206, 0, 0, 0, 205, 0, 0, 0, 204,
0, 0, 0, 204, 0, 0, 0, 204, 0, 0, 0, 207,
0, 0, 0, 225, 0, 0, 0, 249, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
10, 10, 10, 170, 11, 11, 11, 173, 0, 0, 0, 245,
0, 0, 0, 224, 0, 0, 0, 209, 0, 0, 0, 204,
0, 0, 0, 204, 0, 0, 0, 209, 0, 0, 0, 219,
0, 0, 0, 222, 20, 20, 20, 129, 2, 2, 2, 173,
0, 0, 0, 222, 0, 0, 0, 222, 0, 0, 0, 222,
0, 0, 0, 221, 0, 0, 0, 212, 0, 0, 0, 205,
0, 0, 0, 204, 0, 0, 0, 206, 0, 0, 0, 217,
0, 0, 0, 238, 0, 0, 0, 253, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 254,
0, 0, 0, 247, 0, 0, 0, 227, 0, 0, 0, 210,
0, 0, 0, 205, 0, 0, 0, 216, 0, 0, 0, 242,
0, 0, 0, 250, 0, 0, 0, 251, 0, 0, 0, 251,
0, 0, 0, 251, 0, 0, 0, 251, 0, 0, 0, 251,
0, 0, 0, 247, 0, 0, 0, 226, 0, 0, 0, 207,
0, 0, 0, 207, 0, 0, 0, 220, 0, 0, 0, 241,
0, 0, 0, 253, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 254, 0, 0, 0, 249, 0, 0, 0, 231,
0, 0, 0, 213, 0, 0, 0, 218, 0, 0, 0, 246,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 252, 0, 0, 0, 228, 0, 0, 0, 211,
0, 0, 0, 223, 0, 0, 0, 243, 0, 0, 0, 253,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 250,
0, 0, 0, 236, 0, 0, 0, 231, 0, 0, 0, 249,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 253, 0, 0, 0, 237, 0, 0, 0, 231,
0, 0, 0, 246, 0, 0, 0, 254, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 253, 0, 0, 0, 252, 0, 0, 0, 254,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 252, 0, 0, 0, 252,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255,
},{
0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 180,
0, 0, 0, 159, 0, 0, 0, 159, 0, 0, 0, 159,
0, 0, 0, 159, 0, 0, 0, 159, 0, 0, 0, 159,
0, 0, 0, 159, 0, 0, 0, 159, 0, 0, 0, 159,
0, 0, 0, 159, 0, 0, 0, 159, 0, 0, 0, 159,
0, 0, 0, 159, 0, 0, 0, 159, 0, 0, 0, 159,
0, 0, 0, 159, 0, 0, 0, 171, 0, 0, 0, 252,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 180, 139, 139, 139, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 157, 157, 157, 64, 5, 5, 5, 157,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 171, 157, 157, 157, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 172, 172, 172, 64, 8, 8, 8, 148,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 252, 5, 5, 5, 157,
23, 23, 23, 136, 23, 23, 23, 136, 23, 23, 23, 136,
23, 23, 23, 136, 23, 23, 23, 136, 23, 23, 23, 135,
23, 23, 23, 134, 23, 23, 23, 133, 23, 23, 23, 133,
23, 23, 23, 133, 23, 23, 23, 133, 23, 23, 23, 133,
23, 23, 23, 133, 23, 23, 23, 133, 23, 23, 23, 133,
23, 23, 23, 133, 9, 9, 9, 144, 0, 0, 0, 242,
0, 0, 0, 251, 0, 0, 0, 251, 0, 0, 0, 251,
0, 0, 0, 251, 0, 0, 0, 252, 0, 0, 0, 252,
0, 0, 0, 254, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 254, 0, 0, 0, 248,
0, 0, 0, 236, 0, 0, 0, 194, 0, 0, 0, 173,
0, 0, 0, 230, 0, 0, 0, 230, 0, 0, 0, 230,
0, 0, 0, 230, 0, 0, 0, 230, 0, 0, 0, 230,
0, 0, 0, 230, 0, 0, 0, 230, 0, 0, 0, 230,
0, 0, 0, 230, 0, 0, 0, 230, 0, 0, 0, 230,
0, 0, 0, 230, 0, 0, 0, 230, 0, 0, 0, 235,
0, 0, 0, 247, 0, 0, 0, 254, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 253, 0, 0, 0, 236,
0, 0, 0, 178, 83, 83, 83, 60, 127, 127, 127, 52,
3, 3, 3, 140, 0, 0, 0, 208, 0, 0, 0, 208,
0, 0, 0, 208, 0, 0, 0, 208, 0, 0, 0, 208,
0, 0, 0, 208, 0, 0, 0, 208, 0, 0, 0, 208,
0, 0, 0, 208, 0, 0, 0, 208, 0, 0, 0, 208,
0, 0, 0, 208, 0, 0, 0, 208, 0, 0, 0, 213,
0, 0, 0, 233, 0, 0, 0, 252, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 252, 0, 0, 0, 195,
83, 83, 83, 61, 189, 189, 189, 52, 189, 189, 189, 52,
127, 127, 127, 52, 3, 3, 3, 139, 0, 0, 0, 207,
0, 0, 0, 207, 0, 0, 0, 207, 0, 0, 0, 207,
0, 0, 0, 207, 0, 0, 0, 207, 0, 0, 0, 207,
0, 0, 0, 207, 0, 0, 0, 207, 0, 0, 0, 207,
0, 0, 0, 207, 0, 0, 0, 207, 0, 0, 0, 212,
0, 0, 0, 232, 0, 0, 0, 251, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 210, 82, 82, 82, 71,
190, 190, 190, 58, 189, 189, 189, 57, 189, 189, 189, 57,
189, 189, 189, 57, 127, 127, 127, 57, 2, 2, 2, 150,
0, 0, 0, 226, 0, 0, 0, 226, 0, 0, 0, 224,
0, 0, 0, 224, 0, 0, 0, 226, 0, 0, 0, 226,
0, 0, 0, 226, 0, 0, 0, 226, 0, 0, 0, 226,
0, 0, 0, 226, 0, 0, 0, 227, 0, 0, 0, 231,
0, 0, 0, 245, 0, 0, 0, 254, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 210, 83, 83, 83, 73, 190, 190, 190, 64,
189, 189, 189, 63, 186, 186, 186, 63, 189, 189, 189, 63,
186, 186, 186, 63, 189, 189, 189, 63, 127, 127, 127, 63,
3, 3, 3, 167, 0, 0, 0, 245, 0, 0, 0, 235,
0, 0, 0, 233, 0, 0, 0, 243, 0, 0, 0, 249,
0, 0, 0, 250, 0, 0, 0, 250, 0, 0, 0, 250,
0, 0, 0, 250, 0, 0, 0, 250, 0, 0, 0, 251,
0, 0, 0, 254, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 210,
83, 83, 83, 73, 190, 190, 190, 64, 190, 190, 190, 64,
83, 83, 83, 64, 166, 166, 166, 64, 190, 190, 190, 64,
68, 68, 68, 64, 181, 181, 181, 64, 190, 190, 190, 64,
127, 127, 127, 63, 3, 3, 3, 158, 0, 0, 0, 218,
0, 0, 0, 215, 0, 0, 0, 231, 0, 0, 0, 248,
0, 0, 0, 254, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 210, 83, 83, 83, 73,
190, 190, 190, 64, 190, 190, 190, 64, 83, 83, 83, 73,
0, 0, 0, 139, 166, 166, 166, 64, 190, 190, 190, 64,
23, 23, 23, 118, 44, 44, 44, 94, 180, 180, 180, 63,
189, 189, 189, 59, 127, 127, 127, 54, 3, 3, 3, 139,
0, 0, 0, 206, 0, 0, 0, 213, 0, 0, 0, 231,
0, 0, 0, 248, 0, 0, 0, 254, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 210, 83, 83, 83, 73, 190, 190, 190, 64,
190, 190, 190, 64, 83, 83, 83, 73, 0, 0, 0, 210,
0, 0, 0, 183, 166, 166, 166, 64, 190, 190, 190, 64,
23, 23, 23, 135, 0, 0, 0, 233, 44, 44, 44, 87,
181, 181, 181, 54, 189, 189, 189, 52, 127, 127, 127, 51,
2, 2, 2, 137, 0, 0, 0, 205, 0, 0, 0, 213,
0, 0, 0, 231, 0, 0, 0, 248, 0, 0, 0, 254,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 213,
83, 83, 83, 73, 190, 190, 190, 64, 190, 190, 190, 64,
83, 83, 83, 73, 0, 0, 0, 210, 0, 0, 0, 255,
0, 0, 0, 183, 166, 166, 166, 64, 190, 190, 190, 64,
24, 24, 24, 132, 0, 0, 0, 236, 0, 0, 0, 202,
44, 44, 44, 76, 180, 180, 180, 51, 189, 189, 189, 51,
127, 127, 127, 51, 3, 3, 3, 139, 0, 0, 0, 205,
0, 0, 0, 213, 0, 0, 0, 231, 0, 0, 0, 248,
0, 0, 0, 254, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 189,
127, 127, 127, 64, 190, 190, 190, 64, 83, 83, 83, 73,
0, 0, 0, 210, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 183, 166, 166, 166, 64, 189, 189, 189, 63,
23, 23, 23, 124, 0, 0, 0, 217, 0, 0, 0, 207,
0, 0, 0, 191, 44, 44, 44, 76, 180, 180, 180, 51,
160, 160, 160, 51, 14, 14, 14, 115, 0, 0, 0, 206,
0, 0, 0, 206, 0, 0, 0, 213, 0, 0, 0, 231,
0, 0, 0, 248, 0, 0, 0, 254, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
2, 2, 2, 171, 56, 56, 56, 73, 0, 0, 0, 210,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 183, 165, 165, 165, 63, 189, 189, 189, 59,
23, 23, 23, 114, 0, 0, 0, 207, 0, 0, 0, 206,
0, 0, 0, 214, 0, 0, 0, 202, 41, 41, 41, 77,
17, 17, 17, 102, 0, 0, 0, 212, 0, 0, 0, 216,
0, 0, 0, 208, 0, 0, 0, 206, 0, 0, 0, 213,
0, 0, 0, 231, 0, 0, 0, 248, 0, 0, 0, 254,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 181, 166, 166, 166, 59, 190, 190, 190, 54,
23, 23, 23, 109, 0, 0, 0, 207, 0, 0, 0, 217,
0, 0, 0, 233, 0, 0, 0, 229, 0, 0, 0, 209,
0, 0, 0, 207, 0, 0, 0, 223, 0, 0, 0, 235,
0, 0, 0, 221, 0, 0, 0, 208, 0, 0, 0, 206,
0, 0, 0, 213, 0, 0, 0, 231, 0, 0, 0, 248,
0, 0, 0, 254, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 253,
0, 0, 0, 175, 165, 165, 165, 55, 189, 189, 189, 52,
23, 23, 23, 110, 0, 0, 0, 217, 0, 0, 0, 236,
0, 0, 0, 248, 0, 0, 0, 233, 0, 0, 0, 210,
0, 0, 0, 207, 0, 0, 0, 226, 0, 0, 0, 247,
0, 0, 0, 240, 0, 0, 0, 221, 0, 0, 0, 208,
0, 0, 0, 206, 0, 0, 0, 214, 0, 0, 0, 235,
0, 0, 0, 252, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 253,
0, 0, 0, 173, 166, 166, 166, 54, 189, 189, 189, 52,
23, 23, 23, 117, 0, 0, 0, 236, 0, 0, 0, 250,
0, 0, 0, 252, 0, 0, 0, 233, 0, 0, 0, 210,
0, 0, 0, 207, 0, 0, 0, 226, 0, 0, 0, 249,
0, 0, 0, 252, 0, 0, 0, 241, 0, 0, 0, 221,
0, 0, 0, 209, 0, 0, 0, 212, 0, 0, 0, 232,
0, 0, 0, 251, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 180, 166, 166, 166, 58, 189, 189, 189, 56,
24, 24, 24, 127, 0, 0, 0, 250, 0, 0, 0, 255,
0, 0, 0, 252, 0, 0, 0, 233, 0, 0, 0, 210,
0, 0, 0, 207, 0, 0, 0, 226, 0, 0, 0, 250,
0, 0, 0, 255, 0, 0, 0, 252, 0, 0, 0, 241,
0, 0, 0, 226, 0, 0, 0, 229, 0, 0, 0, 245,
0, 0, 0, 254, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 183, 165, 165, 165, 63, 189, 189, 189, 62,
23, 23, 23, 134, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 252, 0, 0, 0, 233, 0, 0, 0, 210,
0, 0, 0, 207, 0, 0, 0, 226, 0, 0, 0, 250,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 253,
0, 0, 0, 248, 0, 0, 0, 249, 0, 0, 0, 254,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 183, 166, 166, 166, 64, 190, 190, 190, 64,
23, 23, 23, 136, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 252, 0, 0, 0, 233, 0, 0, 0, 210,
0, 0, 0, 207, 0, 0, 0, 226, 0, 0, 0, 250,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 183, 166, 166, 166, 64, 190, 190, 190, 64,
23, 23, 23, 136, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 252, 0, 0, 0, 233, 0, 0, 0, 210,
0, 0, 0, 207, 0, 0, 0, 226, 0, 0, 0, 250,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 228, 0, 0, 0, 159, 0, 0, 0, 159,
0, 0, 0, 204, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 252, 0, 0, 0, 233, 0, 0, 0, 210,
0, 0, 0, 207, 0, 0, 0, 226, 0, 0, 0, 250,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 252, 0, 0, 0, 233, 0, 0, 0, 210,
0, 0, 0, 207, 0, 0, 0, 226, 0, 0, 0, 250,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 253, 0, 0, 0, 233, 0, 0, 0, 210,
0, 0, 0, 207, 0, 0, 0, 226, 0, 0, 0, 250,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 253, 0, 0, 0, 235, 0, 0, 0, 213,
0, 0, 0, 211, 0, 0, 0, 229, 0, 0, 0, 250,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 254, 0, 0, 0, 245, 0, 0, 0, 233,
0, 0, 0, 231, 0, 0, 0, 241, 0, 0, 0, 253,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 254, 0, 0, 0, 252,
0, 0, 0, 252, 0, 0, 0, 253, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255,
},{
0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 207,
0, 0, 0, 164, 0, 0, 0, 164, 0, 0, 0, 230,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 23, 23, 23, 136,
185, 185, 185, 64, 161, 161, 161, 64, 0, 0, 0, 183,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 23, 23, 23, 136,
190, 190, 190, 64, 166, 166, 166, 64, 0, 0, 0, 183,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 23, 23, 23, 136,
190, 190, 190, 64, 166, 166, 166, 64, 0, 0, 0, 183,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 253, 0, 0, 0, 251, 0, 0, 0, 251,
0, 0, 0, 253, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 23, 23, 23, 136,
190, 190, 190, 64, 166, 166, 166, 64, 0, 0, 0, 183,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 252,
0, 0, 0, 240, 0, 0, 0, 229, 0, 0, 0, 231,
0, 0, 0, 244, 0, 0, 0, 254, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 23, 23, 23, 136,
190, 190, 190, 64, 166, 166, 166, 64, 0, 0, 0, 183,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 250,
0, 0, 0, 228, 0, 0, 0, 210, 0, 0, 0, 213,
0, 0, 0, 235, 0, 0, 0, 253, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 23, 23, 23, 136,
190, 190, 190, 64, 166, 166, 166, 64, 0, 0, 0, 183,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 250,
0, 0, 0, 226, 0, 0, 0, 207, 0, 0, 0, 210,
0, 0, 0, 233, 0, 0, 0, 252, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 23, 23, 23, 136,
190, 190, 190, 64, 166, 166, 166, 64, 0, 0, 0, 183,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 250,
0, 0, 0, 226, 0, 0, 0, 207, 0, 0, 0, 210,
0, 0, 0, 233, 0, 0, 0, 252, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 253, 13, 13, 13, 137,
35, 35, 35, 104, 0, 0, 0, 241, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 23, 23, 23, 136,
190, 190, 190, 64, 166, 166, 166, 64, 0, 0, 0, 183,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 250,
0, 0, 0, 193, 47, 47, 47, 67, 1, 1, 1, 149,
0, 0, 0, 233, 0, 0, 0, 252, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 12, 12, 12, 148, 153, 153, 153, 64,
177, 177, 177, 64, 37, 37, 37, 101, 0, 0, 0, 241,
0, 0, 0, 255, 0, 0, 0, 255, 23, 23, 23, 136,
190, 190, 190, 64, 166, 166, 166, 64, 0, 0, 0, 183,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 213,
73, 73, 73, 69, 187, 187, 187, 52, 117, 117, 117, 54,
0, 0, 0, 180, 0, 0, 0, 252, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 5, 5, 5, 166, 136, 136, 136, 64,
190, 190, 190, 64, 176, 176, 176, 64, 37, 37, 37, 101,
0, 0, 0, 242, 0, 0, 0, 255, 23, 23, 23, 136,
190, 190, 190, 64, 166, 166, 166, 64, 0, 0, 0, 183,
0, 0, 0, 255, 0, 0, 0, 218, 72, 72, 72, 76,
187, 187, 187, 57, 189, 189, 189, 52, 94, 94, 94, 58,
0, 0, 0, 191, 0, 0, 0, 252, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 6, 6, 6, 159,
137, 137, 137, 64, 190, 190, 190, 64, 176, 176, 176, 64,
36, 36, 36, 101, 0, 0, 0, 242, 23, 23, 23, 135,
189, 189, 189, 62, 165, 165, 165, 62, 0, 0, 0, 182,
0, 0, 0, 218, 73, 73, 73, 77, 188, 188, 188, 63,
189, 189, 189, 57, 95, 95, 95, 56, 0, 0, 0, 166,
0, 0, 0, 233, 0, 0, 0, 252, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
6, 6, 6, 159, 137, 137, 137, 64, 190, 190, 190, 64,
176, 176, 176, 64, 36, 36, 36, 101, 23, 23, 23, 119,
189, 189, 189, 57, 166, 166, 166, 56, 0, 0, 0, 140,
71, 71, 71, 77, 188, 188, 188, 64, 189, 189, 189, 63,
96, 96, 96, 61, 0, 0, 0, 162, 0, 0, 0, 210,
0, 0, 0, 233, 0, 0, 0, 252, 0, 0, 0, 255,
0, 0, 0, 250, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 6, 6, 6, 158, 138, 138, 138, 64,
190, 190, 190, 64, 176, 176, 176, 63, 60, 60, 60, 58,
190, 190, 190, 53, 166, 166, 166, 52, 71, 71, 71, 55,
188, 188, 188, 60, 189, 189, 189, 63, 96, 96, 96, 68,
0, 0, 0, 176, 0, 0, 0, 207, 0, 0, 0, 210,
0, 0, 0, 233, 0, 0, 0, 252, 0, 0, 0, 250,
0, 0, 0, 235, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 6, 6, 6, 157,
138, 138, 138, 64, 189, 189, 189, 63, 182, 182, 182, 59,
190, 190, 190, 54, 185, 185, 185, 51, 187, 187, 187, 52,
189, 189, 189, 55, 97, 97, 97, 65, 0, 0, 0, 192,
0, 0, 0, 226, 0, 0, 0, 207, 0, 0, 0, 210,
0, 0, 0, 233, 0, 0, 0, 247, 0, 0, 0, 235,
0, 0, 0, 216, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
6, 6, 6, 157, 138, 138, 138, 64, 189, 189, 189, 62,
190, 190, 190, 58, 189, 189, 189, 54, 189, 189, 189, 51,
97, 97, 97, 56, 0, 0, 0, 172, 0, 0, 0, 234,
0, 0, 0, 223, 0, 0, 0, 207, 0, 0, 0, 209,
0, 0, 0, 228, 0, 0, 0, 232, 0, 0, 0, 216,
0, 0, 0, 206, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 6, 6, 6, 156, 139, 139, 139, 64,
189, 189, 189, 62, 190, 190, 190, 58, 98, 98, 98, 58,
0, 0, 0, 160, 0, 0, 0, 208, 0, 0, 0, 216,
0, 0, 0, 214, 0, 0, 0, 206, 0, 0, 0, 207,
0, 0, 0, 216, 0, 0, 0, 214, 0, 0, 0, 206,
0, 0, 0, 207, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 7, 7, 7, 155,
139, 139, 139, 64, 99, 99, 99, 67, 0, 0, 0, 180,
0, 0, 0, 214, 0, 0, 0, 206, 0, 0, 0, 206,
0, 0, 0, 206, 0, 0, 0, 204, 0, 0, 0, 205,
0, 0, 0, 206, 0, 0, 0, 206, 0, 0, 0, 207,
0, 0, 0, 217, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
4, 4, 4, 172, 0, 0, 0, 200, 0, 0, 0, 248,
0, 0, 0, 232, 0, 0, 0, 214, 0, 0, 0, 206,
0, 0, 0, 204, 0, 0, 0, 204, 0, 0, 0, 204,
0, 0, 0, 204, 0, 0, 0, 207, 0, 0, 0, 217,
0, 0, 0, 237, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 251, 2, 2, 2, 165, 5, 5, 5, 153,
5, 5, 5, 153, 5, 5, 5, 153, 5, 5, 5, 153,
5, 5, 5, 153, 5, 5, 5, 153, 5, 5, 5, 153,
5, 5, 5, 153, 5, 5, 5, 153, 5, 5, 5, 153,
5, 5, 5, 148, 5, 5, 5, 137, 6, 6, 6, 127,
6, 6, 6, 123, 5, 5, 5, 122, 5, 5, 5, 122,
1, 1, 1, 141, 0, 0, 0, 217, 0, 0, 0, 237,
0, 0, 0, 251, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
6, 6, 6, 154, 161, 161, 161, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 189, 189, 189, 62, 190, 190, 190, 58,
189, 189, 189, 54, 189, 189, 189, 51, 189, 189, 189, 52,
143, 143, 143, 54, 0, 0, 0, 167, 0, 0, 0, 251,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
8, 8, 8, 149, 169, 169, 169, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 189, 189, 189, 62,
190, 190, 190, 58, 190, 190, 190, 54, 189, 189, 189, 55,
153, 153, 153, 59, 0, 0, 0, 171, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 247, 7, 7, 7, 152, 19, 19, 19, 140,
19, 19, 19, 140, 19, 19, 19, 140, 19, 19, 19, 140,
19, 19, 19, 140, 19, 19, 19, 139, 19, 19, 19, 137,
19, 19, 19, 136, 19, 19, 19, 136, 19, 19, 19, 136,
19, 19, 19, 136, 19, 19, 19, 135, 19, 19, 19, 135,
19, 19, 19, 133, 19, 19, 19, 129, 19, 19, 19, 130,
4, 4, 4, 154, 0, 0, 0, 247, 0, 0, 0, 250,
0, 0, 0, 250, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 254, 0, 0, 0, 245, 0, 0, 0, 231,
0, 0, 0, 226, 0, 0, 0, 226, 0, 0, 0, 226,
0, 0, 0, 226, 0, 0, 0, 226, 0, 0, 0, 226,
0, 0, 0, 225, 0, 0, 0, 223, 0, 0, 0, 224,
0, 0, 0, 225, 0, 0, 0, 226, 0, 0, 0, 226,
0, 0, 0, 226, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 251, 0, 0, 0, 232, 0, 0, 0, 212,
0, 0, 0, 207, 0, 0, 0, 207, 0, 0, 0, 207,
0, 0, 0, 207, 0, 0, 0, 207, 0, 0, 0, 207,
0, 0, 0, 207, 0, 0, 0, 207, 0, 0, 0, 207,
0, 0, 0, 207, 0, 0, 0, 207, 0, 0, 0, 207,
0, 0, 0, 207,
},{
0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 231,
0, 0, 0, 228, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 204, 92, 92, 92, 68,
106, 106, 106, 65, 0, 0, 0, 188, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 224, 0, 0, 0, 213,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 1, 1, 1, 158, 190, 190, 190, 64,
190, 190, 190, 64, 20, 20, 20, 139, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 212, 79, 79, 79, 77, 105, 105, 105, 68,
1, 1, 1, 191, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 1, 1, 1, 158, 190, 190, 190, 64,
190, 190, 190, 64, 20, 20, 20, 139, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 254, 0, 0, 0, 253, 0, 0, 0, 205,
88, 88, 88, 73, 189, 189, 189, 64, 188, 188, 188, 64,
45, 45, 45, 85, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 1, 1, 1, 158, 190, 190, 190, 64,
190, 190, 190, 64, 20, 20, 20, 139, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 250,
0, 0, 0, 239, 0, 0, 0, 184, 98, 98, 98, 68,
189, 189, 189, 64, 187, 187, 187, 64, 68, 68, 68, 82,
0, 0, 0, 220, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 253,
0, 0, 0, 253, 0, 0, 0, 254, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 1, 1, 1, 158, 190, 190, 190, 64,
190, 190, 190, 64, 20, 20, 20, 139, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 253, 0, 0, 0, 238,
1, 1, 1, 162, 108, 108, 108, 57, 190, 190, 190, 58,
184, 184, 184, 63, 60, 60, 60, 86, 0, 0, 0, 226,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 250, 0, 0, 0, 239,
0, 0, 0, 235, 0, 0, 0, 247, 0, 0, 0, 254,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 1, 1, 1, 158, 190, 190, 190, 64,
190, 190, 190, 64, 20, 20, 20, 139, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 252, 2, 2, 2, 166,
117, 117, 117, 54, 189, 189, 189, 52, 181, 181, 181, 56,
52, 52, 52, 90, 0, 0, 0, 231, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 249, 0, 0, 0, 234, 0, 0, 0, 216,
0, 0, 0, 213, 0, 0, 0, 229, 0, 0, 0, 249,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 1, 1, 1, 158, 190, 190, 190, 64,
190, 190, 190, 64, 20, 20, 20, 139, 0, 0, 0, 255,
0, 0, 0, 255, 3, 3, 3, 170, 126, 126, 126, 59,
190, 190, 190, 52, 178, 178, 178, 52, 44, 44, 44, 86,
0, 0, 0, 231, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 254, 0, 0, 0, 249,
0, 0, 0, 233, 0, 0, 0, 214, 0, 0, 0, 206,
0, 0, 0, 208, 0, 0, 0, 225, 0, 0, 0, 247,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 1, 1, 1, 158, 190, 190, 190, 64,
190, 190, 190, 64, 20, 20, 20, 139, 0, 0, 0, 255,
6, 6, 6, 161, 135, 135, 135, 63, 190, 190, 190, 58,
185, 185, 185, 52, 70, 70, 70, 52, 33, 33, 33, 104,
33, 33, 33, 128, 33, 33, 33, 132, 33, 33, 33, 132,
32, 32, 32, 131, 32, 32, 32, 129, 32, 32, 32, 121,
32, 32, 32, 112, 33, 33, 33, 106, 32, 32, 32, 107,
32, 32, 32, 112, 30, 30, 30, 123, 0, 0, 0, 209,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 1, 1, 1, 158, 190, 190, 190, 64,
190, 190, 190, 64, 20, 20, 20, 139, 0, 0, 0, 178,
140, 140, 140, 64, 190, 190, 190, 63, 190, 190, 190, 58,
190, 190, 190, 52, 189, 189, 189, 52, 189, 189, 189, 56,
189, 189, 189, 62, 190, 190, 190, 64, 190, 190, 190, 64,
189, 189, 189, 62, 189, 189, 189, 58, 190, 190, 190, 53,
189, 189, 189, 51, 189, 189, 189, 52, 189, 189, 189, 56,
190, 190, 190, 60, 175, 175, 175, 63, 0, 0, 0, 174,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 1, 1, 1, 158, 190, 190, 190, 64,
190, 190, 190, 64, 20, 20, 20, 139, 0, 0, 0, 224,
64, 64, 64, 84, 186, 186, 186, 63, 190, 190, 190, 58,
185, 185, 185, 52, 136, 136, 136, 52, 136, 136, 136, 56,
135, 135, 135, 62, 135, 135, 135, 64, 135, 135, 135, 62,
135, 135, 135, 58, 135, 135, 135, 53, 135, 135, 135, 51,
135, 135, 135, 52, 135, 135, 135, 56, 135, 135, 135, 61,
135, 135, 135, 63, 125, 125, 125, 64, 0, 0, 0, 175,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 1, 1, 1, 158, 190, 190, 190, 64,
190, 190, 190, 64, 20, 20, 20, 139, 0, 0, 0, 255,
0, 0, 0, 229, 56, 56, 56, 88, 183, 183, 183, 58,
190, 190, 190, 52, 112, 112, 112, 52, 1, 1, 1, 132,
0, 0, 0, 212, 0, 0, 0, 211, 0, 0, 0, 195,
0, 0, 0, 181, 0, 0, 0, 176, 0, 0, 0, 177,
0, 0, 0, 186, 0, 0, 0, 201, 0, 0, 0, 209,
0, 0, 0, 210, 0, 0, 0, 211, 0, 0, 0, 238,
0, 0, 0, 246, 0, 0, 0, 246, 0, 0, 0, 246,
0, 0, 0, 246, 0, 0, 0, 247, 0, 0, 0, 247,
0, 0, 0, 251, 0, 0, 0, 255,
0, 0, 0, 255, 1, 1, 1, 158, 190, 190, 190, 64,
190, 190, 190, 64, 20, 20, 20, 139, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 232, 47, 47, 47, 87,
180, 180, 180, 52, 189, 189, 189, 52, 122, 122, 122, 57,
3, 3, 3, 166, 0, 0, 0, 227, 0, 0, 0, 211,
0, 0, 0, 205, 0, 0, 0, 204, 0, 0, 0, 205,
0, 0, 0, 211, 0, 0, 0, 217, 0, 0, 0, 219,
0, 0, 0, 219, 0, 0, 0, 219, 0, 0, 0, 219,
0, 0, 0, 219, 0, 0, 0, 219, 0, 0, 0, 219,
0, 0, 0, 219, 0, 0, 0, 219, 0, 0, 0, 222,
0, 0, 0, 237, 0, 0, 0, 255,
0, 0, 0, 255, 1, 1, 1, 158, 190, 190, 190, 64,
190, 190, 190, 64, 20, 20, 20, 139, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 252, 0, 0, 0, 218,
40, 40, 40, 83, 176, 176, 176, 52, 189, 189, 189, 56,
130, 130, 130, 59, 5, 5, 5, 139, 0, 0, 0, 205,
0, 0, 0, 204, 0, 0, 0, 204, 0, 0, 0, 204,
0, 0, 0, 205, 0, 0, 0, 206, 0, 0, 0, 206,
0, 0, 0, 206, 0, 0, 0, 206, 0, 0, 0, 206,
0, 0, 0, 206, 0, 0, 0, 206, 0, 0, 0, 206,
0, 0, 0, 206, 0, 0, 0, 206, 0, 0, 0, 209,
0, 0, 0, 230, 0, 0, 0, 255,
0, 0, 0, 255, 1, 1, 1, 158, 190, 190, 190, 64,
190, 190, 190, 64, 20, 20, 20, 139, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 252, 0, 0, 0, 232,
0, 0, 0, 199, 34, 34, 34, 86, 172, 172, 172, 56,
189, 189, 189, 60, 137, 137, 137, 57, 8, 8, 8, 127,
0, 0, 0, 204, 0, 0, 0, 204, 0, 0, 0, 205,
0, 0, 0, 210, 0, 0, 0, 215, 0, 0, 0, 217,
0, 0, 0, 217, 0, 0, 0, 217, 0, 0, 0, 217,
0, 0, 0, 217, 0, 0, 0, 217, 0, 0, 0, 217,
0, 0, 0, 217, 0, 0, 0, 217, 0, 0, 0, 220,
0, 0, 0, 236, 0, 0, 0, 255,
0, 0, 0, 255, 1, 1, 1, 158, 190, 190, 190, 64,
190, 190, 190, 64, 20, 20, 20, 139, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 252, 0, 0, 0, 232,
0, 0, 0, 209, 0, 0, 0, 199, 28, 28, 28, 99,
168, 168, 168, 62, 190, 190, 190, 61, 145, 145, 145, 57,
11, 11, 11, 120, 0, 0, 0, 205, 0, 0, 0, 206,
0, 0, 0, 217, 0, 0, 0, 234, 0, 0, 0, 242,
0, 0, 0, 244, 0, 0, 0, 244, 0, 0, 0, 244,
0, 0, 0, 244, 0, 0, 0, 244, 0, 0, 0, 244,
0, 0, 0, 244, 0, 0, 0, 244, 0, 0, 0, 245,
0, 0, 0, 250, 0, 0, 0, 255,
0, 0, 0, 255, 1, 1, 1, 158, 190, 190, 190, 64,
190, 190, 190, 64, 20, 20, 20, 139, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 252, 0, 0, 0, 232,
0, 0, 0, 209, 0, 0, 0, 206, 0, 0, 0, 218,
23, 23, 23, 118, 162, 162, 162, 64, 175, 175, 175, 62,
35, 35, 35, 94, 0, 0, 0, 211, 0, 0, 0, 205,
0, 0, 0, 209, 0, 0, 0, 224, 0, 0, 0, 243,
0, 0, 0, 253, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 1, 1, 1, 160, 181, 181, 181, 64,
187, 187, 187, 64, 14, 14, 14, 141, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 252, 0, 0, 0, 232,
0, 0, 0, 209, 0, 0, 0, 206, 0, 0, 0, 224,
0, 0, 0, 245, 19, 19, 19, 133, 32, 32, 32, 113,
0, 0, 0, 235, 0, 0, 0, 229, 0, 0, 0, 212,
0, 0, 0, 206, 0, 0, 0, 209, 0, 0, 0, 224,
0, 0, 0, 243, 0, 0, 0, 253, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 235, 36, 36, 36, 110,
43, 43, 43, 103, 0, 0, 0, 225, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 252, 0, 0, 0, 232,
0, 0, 0, 209, 0, 0, 0, 206, 0, 0, 0, 224,
0, 0, 0, 249, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 254, 0, 0, 0, 247, 0, 0, 0, 230,
0, 0, 0, 212, 0, 0, 0, 206, 0, 0, 0, 209,
0, 0, 0, 223, 0, 0, 0, 242, 0, 0, 0, 253,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 252, 0, 0, 0, 232,
0, 0, 0, 209, 0, 0, 0, 206, 0, 0, 0, 224,
0, 0, 0, 249, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 254, 0, 0, 0, 248,
0, 0, 0, 231, 0, 0, 0, 213, 0, 0, 0, 206,
0, 0, 0, 209, 0, 0, 0, 226, 0, 0, 0, 248,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 252, 0, 0, 0, 233,
0, 0, 0, 209, 0, 0, 0, 207, 0, 0, 0, 224,
0, 0, 0, 249, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 254,
0, 0, 0, 248, 0, 0, 0, 232, 0, 0, 0, 214,
0, 0, 0, 211, 0, 0, 0, 228, 0, 0, 0, 248,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 253, 0, 0, 0, 236,
0, 0, 0, 214, 0, 0, 0, 210, 0, 0, 0, 229,
0, 0, 0, 250, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 254, 0, 0, 0, 249, 0, 0, 0, 236,
0, 0, 0, 233, 0, 0, 0, 245, 0, 0, 0, 254,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 254, 0, 0, 0, 247,
0, 0, 0, 234, 0, 0, 0, 231, 0, 0, 0, 243,
0, 0, 0, 253, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 253,
0, 0, 0, 252, 0, 0, 0, 254, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255,
},{
0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 252, 0, 0, 0, 173,
0, 0, 0, 182, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 191, 0, 0, 0, 215, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 5, 5, 5, 158, 155, 155, 155, 64,
137, 137, 137, 64, 0, 0, 0, 181, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 2, 2, 2, 174,
125, 125, 125, 64, 80, 80, 80, 74, 0, 0, 0, 212,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 23, 23, 23, 136, 190, 190, 190, 64,
190, 190, 190, 64, 0, 0, 0, 159, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 57, 57, 57, 72,
190, 190, 190, 64, 189, 189, 189, 64, 79, 79, 79, 74,
0, 0, 0, 213, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 23, 23, 23, 136, 190, 190, 190, 64,
190, 190, 190, 64, 0, 0, 0, 159, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 207,
87, 87, 87, 72, 190, 190, 190, 64, 189, 189, 189, 64,
79, 79, 79, 74, 0, 0, 0, 213, 0, 0, 0, 255,
0, 0, 0, 254, 0, 0, 0, 252, 0, 0, 0, 253,
0, 0, 0, 255, 23, 23, 23, 136, 190, 190, 190, 64,
190, 190, 190, 64, 0, 0, 0, 159, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 207, 87, 87, 87, 72, 190, 190, 190, 64,
189, 189, 189, 64, 78, 78, 78, 75, 0, 0, 0, 213,
0, 0, 0, 247, 0, 0, 0, 236, 0, 0, 0, 238,
0, 0, 0, 250, 23, 23, 23, 135, 190, 190, 190, 64,
190, 190, 190, 64, 0, 0, 0, 160, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 206, 89, 89, 89, 71,
190, 190, 190, 64, 189, 189, 189, 64, 78, 78, 78, 73,
0, 0, 0, 193, 0, 0, 0, 214, 0, 0, 0, 216,
0, 0, 0, 234, 23, 23, 23, 132, 190, 190, 190, 64,
190, 190, 190, 64, 0, 0, 0, 159, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 206,
89, 89, 89, 71, 190, 190, 190, 64, 189, 189, 189, 62,
77, 77, 77, 66, 0, 0, 0, 174, 0, 0, 0, 206,
0, 0, 0, 215, 23, 23, 23, 123, 189, 189, 189, 63,
190, 190, 190, 64, 0, 0, 0, 160, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 232, 0, 0, 0, 190, 0, 0, 0, 190,
0, 0, 0, 190, 0, 0, 0, 190, 0, 0, 0, 190,
0, 0, 0, 190, 0, 0, 0, 190, 0, 0, 0, 190,
0, 0, 0, 190, 0, 0, 0, 190, 0, 0, 0, 190,
0, 0, 0, 141, 90, 90, 90, 64, 190, 190, 190, 63,
188, 188, 188, 60, 76, 76, 76, 64, 0, 0, 0, 174,
0, 0, 0, 206, 23, 23, 23, 113, 189, 189, 189, 59,
189, 189, 189, 63, 0, 0, 0, 159, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 160, 158, 158, 158, 64, 158, 158, 158, 64,
158, 158, 158, 64, 158, 158, 158, 64, 158, 158, 158, 64,
158, 158, 158, 64, 158, 158, 158, 64, 158, 158, 158, 64,
158, 158, 158, 64, 158, 158, 158, 64, 158, 158, 158, 64,
158, 158, 158, 64, 158, 158, 158, 64, 187, 187, 187, 64,
189, 189, 189, 63, 188, 188, 188, 60, 76, 76, 76, 64,
0, 0, 0, 176, 23, 23, 23, 109, 190, 190, 190, 54,
189, 189, 189, 59, 0, 0, 0, 157, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 159, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 189, 189, 189, 63, 132, 132, 132, 60,
0, 0, 0, 158, 23, 23, 23, 110, 189, 189, 189, 52,
190, 190, 190, 54, 0, 0, 0, 149, 0, 0, 0, 250,
0, 0, 0, 254, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 200, 32, 32, 32, 127, 32, 32, 32, 127,
32, 32, 32, 127, 32, 32, 32, 127, 32, 32, 32, 127,
32, 32, 32, 126, 32, 32, 32, 126, 32, 32, 32, 124,
32, 32, 32, 124, 32, 32, 32, 124, 32, 32, 32, 124,
32, 32, 32, 110, 71, 71, 71, 63, 187, 187, 187, 63,
189, 189, 189, 63, 134, 134, 134, 63, 4, 4, 4, 157,
0, 0, 0, 234, 23, 23, 23, 116, 189, 189, 189, 51,
189, 189, 189, 52, 0, 0, 0, 136, 0, 0, 0, 235,
0, 0, 0, 250, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 254, 0, 0, 0, 244, 0, 0, 0, 233,
0, 0, 0, 231, 0, 0, 0, 231, 0, 0, 0, 219,
38, 38, 38, 92, 176, 176, 176, 58, 190, 190, 190, 58,
134, 134, 134, 58, 5, 5, 5, 145, 0, 0, 0, 231,
0, 0, 0, 227, 23, 23, 23, 116, 189, 189, 189, 52,
189, 189, 189, 51, 0, 0, 0, 129, 0, 0, 0, 216,
0, 0, 0, 234, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 252, 0, 0, 0, 232, 0, 0, 0, 212,
0, 0, 0, 209, 0, 0, 0, 197, 37, 37, 37, 82,
177, 177, 177, 52, 190, 190, 190, 52, 135, 135, 135, 52,
5, 5, 5, 131, 0, 0, 0, 209, 0, 0, 0, 209,
0, 0, 0, 208, 23, 23, 23, 110, 189, 189, 189, 51,
189, 189, 189, 51, 0, 0, 0, 128, 0, 0, 0, 206,
0, 0, 0, 217, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 252, 0, 0, 0, 232, 0, 0, 0, 211,
0, 0, 0, 196, 37, 37, 37, 81, 176, 176, 176, 52,
189, 189, 189, 52, 135, 135, 135, 52, 5, 5, 5, 131,
0, 0, 0, 208, 0, 0, 0, 208, 0, 0, 0, 208,
0, 0, 0, 207, 23, 23, 23, 110, 189, 189, 189, 51,
189, 189, 189, 51, 0, 0, 0, 128, 0, 0, 0, 206,
0, 0, 0, 216, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 253, 0, 0, 0, 242, 0, 0, 0, 218,
36, 36, 36, 89, 177, 177, 177, 57, 190, 190, 190, 57,
136, 136, 136, 57, 5, 5, 5, 145, 0, 0, 0, 228,
0, 0, 0, 228, 0, 0, 0, 228, 0, 0, 0, 228,
0, 0, 0, 225, 24, 24, 24, 115, 189, 189, 189, 52,
189, 189, 189, 51, 0, 0, 0, 129, 0, 0, 0, 214,
0, 0, 0, 232, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 253, 35, 35, 35, 99,
176, 176, 176, 63, 189, 189, 189, 63, 136, 136, 136, 63,
6, 6, 6, 157, 0, 0, 0, 250, 0, 0, 0, 250,
0, 0, 0, 250, 0, 0, 0, 250, 0, 0, 0, 247,
0, 0, 0, 235, 23, 23, 23, 116, 189, 189, 189, 51,
189, 189, 189, 51, 0, 0, 0, 135, 0, 0, 0, 232,
0, 0, 0, 248, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 24, 24, 24, 117,
167, 167, 167, 64, 137, 137, 137, 64, 6, 6, 6, 159,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 252, 0, 0, 0, 239,
0, 0, 0, 220, 23, 23, 23, 111, 189, 189, 189, 51,
189, 189, 189, 54, 0, 0, 0, 147, 0, 0, 0, 249,
0, 0, 0, 254, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 249,
21, 21, 21, 128, 6, 6, 6, 161, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 252, 0, 0, 0, 240, 0, 0, 0, 220,
0, 0, 0, 208, 10, 10, 10, 116, 176, 176, 176, 54,
163, 163, 163, 58, 0, 0, 0, 165, 0, 0, 0, 254,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 253,
0, 0, 0, 240, 0, 0, 0, 220, 0, 0, 0, 208,
0, 0, 0, 206, 0, 0, 0, 202, 17, 17, 17, 123,
13, 13, 13, 140, 0, 0, 0, 248, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 248,
0, 0, 0, 226, 0, 0, 0, 208, 0, 0, 0, 206,
0, 0, 0, 214, 0, 0, 0, 232, 0, 0, 0, 248,
0, 0, 0, 254, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 249,
0, 0, 0, 229, 0, 0, 0, 212, 0, 0, 0, 214,
0, 0, 0, 232, 0, 0, 0, 248, 0, 0, 0, 254,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 254,
0, 0, 0, 246, 0, 0, 0, 233, 0, 0, 0, 236,
0, 0, 0, 249, 0, 0, 0, 254, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 254, 0, 0, 0, 251, 0, 0, 0, 252,
0, 0, 0, 254, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255,
},{
0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 180,
0, 0, 0, 159, 0, 0, 0, 159, 0, 0, 0, 159,
0, 0, 0, 159, 0, 0, 0, 159, 0, 0, 0, 159,
0, 0, 0, 159, 0, 0, 0, 159, 0, 0, 0, 159,
0, 0, 0, 159, 0, 0, 0, 159, 0, 0, 0, 159,
0, 0, 0, 159, 0, 0, 0, 159, 0, 0, 0, 159,
0, 0, 0, 159, 0, 0, 0, 168, 0, 0, 0, 252,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 177, 142, 142, 142, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 160, 160, 160, 64, 0, 0, 0, 168,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 159, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 172, 172, 172, 64, 0, 0, 0, 162,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 159, 190, 190, 190, 64,
190, 190, 190, 64, 44, 44, 44, 91, 23, 23, 23, 136,
23, 23, 23, 136, 23, 23, 23, 136, 23, 23, 23, 135,
23, 23, 23, 134, 23, 23, 23, 133, 23, 23, 23, 133,
23, 23, 23, 133, 23, 23, 23, 133, 23, 23, 23, 133,
23, 23, 23, 133, 23, 23, 23, 133, 23, 23, 23, 133,
23, 23, 23, 133, 12, 12, 12, 141, 0, 0, 0, 242,
0, 0, 0, 251, 0, 0, 0, 251, 0, 0, 0, 251,
0, 0, 0, 251, 0, 0, 0, 252, 0, 0, 0, 252,
0, 0, 0, 254, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 159, 190, 190, 190, 64,
190, 190, 190, 64, 23, 23, 23, 136, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 254, 0, 0, 0, 248,
0, 0, 0, 236, 0, 0, 0, 230, 0, 0, 0, 230,
0, 0, 0, 230, 0, 0, 0, 230, 0, 0, 0, 230,
0, 0, 0, 230, 0, 0, 0, 230, 0, 0, 0, 230,
0, 0, 0, 230, 0, 0, 0, 230, 0, 0, 0, 230,
0, 0, 0, 230, 0, 0, 0, 230, 0, 0, 0, 230,
0, 0, 0, 230, 0, 0, 0, 230, 0, 0, 0, 234,
0, 0, 0, 247, 0, 0, 0, 254, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 159, 190, 190, 190, 64,
190, 190, 190, 64, 23, 23, 23, 136, 0, 0, 0, 255,
0, 0, 0, 216, 0, 0, 0, 158, 0, 0, 0, 148,
0, 0, 0, 135, 0, 0, 0, 131, 0, 0, 0, 131,
0, 0, 0, 131, 0, 0, 0, 131, 0, 0, 0, 131,
0, 0, 0, 131, 0, 0, 0, 131, 0, 0, 0, 131,
0, 0, 0, 131, 0, 0, 0, 177, 0, 0, 0, 208,
0, 0, 0, 208, 0, 0, 0, 208, 0, 0, 0, 208,
0, 0, 0, 208, 0, 0, 0, 208, 0, 0, 0, 214,
0, 0, 0, 235, 0, 0, 0, 252, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 159, 190, 190, 190, 64,
190, 190, 190, 64, 23, 23, 23, 136, 0, 0, 0, 255,
0, 0, 0, 159, 189, 189, 189, 63, 189, 189, 189, 58,
190, 190, 190, 52, 189, 189, 189, 51, 189, 189, 189, 51,
189, 189, 189, 52, 189, 189, 189, 52, 189, 189, 189, 52,
189, 189, 189, 52, 189, 189, 189, 52, 189, 189, 189, 52,
189, 189, 189, 52, 0, 0, 0, 129, 0, 0, 0, 207,
0, 0, 0, 207, 0, 0, 0, 207, 0, 0, 0, 207,
0, 0, 0, 207, 0, 0, 0, 207, 0, 0, 0, 212,
0, 0, 0, 234, 0, 0, 0, 252, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 159, 190, 190, 190, 64,
190, 190, 190, 64, 23, 23, 23, 136, 0, 0, 0, 255,
0, 0, 0, 159, 189, 189, 189, 63, 190, 190, 190, 57,
189, 189, 189, 52, 189, 189, 189, 51, 189, 189, 189, 54,
189, 189, 189, 56, 189, 189, 189, 57, 189, 189, 189, 57,
189, 189, 189, 57, 189, 189, 189, 57, 189, 189, 189, 57,
189, 189, 189, 57, 0, 0, 0, 141, 0, 0, 0, 226,
0, 0, 0, 226, 0, 0, 0, 226, 0, 0, 0, 226,
0, 0, 0, 226, 0, 0, 0, 226, 0, 0, 0, 231,
0, 0, 0, 245, 0, 0, 0, 254, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 159, 190, 190, 190, 64,
190, 190, 190, 64, 23, 23, 23, 136, 0, 0, 0, 255,
0, 0, 0, 159, 189, 189, 189, 63, 190, 190, 190, 57,
189, 189, 189, 52, 171, 171, 171, 52, 29, 29, 29, 59,
0, 0, 0, 146, 0, 0, 0, 156, 0, 0, 0, 154,
0, 0, 0, 154, 0, 0, 0, 154, 0, 0, 0, 154,
0, 0, 0, 154, 0, 0, 0, 209, 0, 0, 0, 246,
0, 0, 0, 246, 0, 0, 0, 246, 0, 0, 0, 246,
0, 0, 0, 246, 0, 0, 0, 246, 0, 0, 0, 249,
0, 0, 0, 254, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 159, 190, 190, 190, 64,
190, 190, 190, 64, 23, 23, 23, 136, 0, 0, 0, 255,
0, 0, 0, 159, 189, 189, 189, 63, 190, 190, 190, 57,
172, 172, 172, 52, 189, 189, 189, 52, 171, 171, 171, 57,
29, 29, 29, 106, 0, 0, 0, 234, 0, 0, 0, 232,
0, 0, 0, 230, 0, 0, 0, 229, 0, 0, 0, 229,
0, 0, 0, 229, 0, 0, 0, 229, 0, 0, 0, 229,
0, 0, 0, 229, 0, 0, 0, 229, 0, 0, 0, 229,
0, 0, 0, 230, 0, 0, 0, 232, 0, 0, 0, 243,
0, 0, 0, 253, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 159, 190, 190, 190, 64,
190, 190, 190, 64, 23, 23, 23, 136, 0, 0, 0, 255,
0, 0, 0, 159, 189, 189, 189, 63, 190, 190, 190, 57,
29, 29, 29, 55, 171, 171, 171, 52, 189, 189, 189, 57,
171, 171, 171, 62, 29, 29, 29, 98, 0, 0, 0, 204,
0, 0, 0, 208, 0, 0, 0, 208, 0, 0, 0, 208,
0, 0, 0, 208, 0, 0, 0, 208, 0, 0, 0, 208,
0, 0, 0, 208, 0, 0, 0, 208, 0, 0, 0, 208,
0, 0, 0, 208, 0, 0, 0, 212, 0, 0, 0, 232,
0, 0, 0, 252, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 159, 190, 190, 190, 64,
190, 190, 190, 64, 23, 23, 23, 136, 0, 0, 0, 255,
0, 0, 0, 159, 189, 189, 189, 63, 190, 190, 190, 57,
0, 0, 0, 122, 29, 29, 29, 88, 171, 171, 171, 57,
189, 189, 189, 62, 172, 172, 172, 57, 30, 30, 30, 88,
0, 0, 0, 197, 0, 0, 0, 204, 0, 0, 0, 204,
0, 0, 0, 205, 0, 0, 0, 207, 0, 0, 0, 208,
0, 0, 0, 208, 0, 0, 0, 208, 0, 0, 0, 208,
0, 0, 0, 208, 0, 0, 0, 212, 0, 0, 0, 232,
0, 0, 0, 252, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 159, 190, 190, 190, 64,
190, 190, 190, 64, 23, 23, 23, 136, 0, 0, 0, 255,
0, 0, 0, 159, 189, 189, 189, 63, 190, 190, 190, 57,
0, 0, 0, 129, 0, 0, 0, 200, 29, 29, 29, 95,
171, 171, 171, 62, 190, 190, 190, 57, 172, 172, 172, 52,
29, 29, 29, 87, 0, 0, 0, 197, 0, 0, 0, 204,
0, 0, 0, 208, 0, 0, 0, 219, 0, 0, 0, 228,
0, 0, 0, 230, 0, 0, 0, 230, 0, 0, 0, 230,
0, 0, 0, 230, 0, 0, 0, 232, 0, 0, 0, 243,
0, 0, 0, 253, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 159, 190, 190, 190, 64,
190, 190, 190, 64, 23, 23, 23, 136, 0, 0, 0, 255,
0, 0, 0, 159, 189, 189, 189, 63, 190, 190, 190, 57,
0, 0, 0, 129, 0, 0, 0, 207, 0, 0, 0, 218,
29, 29, 29, 105, 172, 172, 172, 57, 189, 189, 189, 52,
172, 172, 172, 51, 29, 29, 29, 87, 0, 0, 0, 197,
0, 0, 0, 207, 0, 0, 0, 220, 0, 0, 0, 239,
0, 0, 0, 249, 0, 0, 0, 251, 0, 0, 0, 251,
0, 0, 0, 251, 0, 0, 0, 252, 0, 0, 0, 253,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 159, 190, 190, 190, 64,
190, 190, 190, 64, 23, 23, 23, 136, 0, 0, 0, 255,
0, 0, 0, 159, 189, 189, 189, 63, 190, 190, 190, 57,
0, 0, 0, 129, 0, 0, 0, 207, 0, 0, 0, 226,
0, 0, 0, 237, 29, 29, 29, 99, 172, 172, 172, 52,
189, 189, 189, 51, 172, 172, 172, 52, 29, 29, 29, 88,
0, 0, 0, 198, 0, 0, 0, 209, 0, 0, 0, 223,
0, 0, 0, 243, 0, 0, 0, 253, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 159, 190, 190, 190, 64,
190, 190, 190, 64, 23, 23, 23, 136, 0, 0, 0, 255,
0, 0, 0, 159, 189, 189, 189, 63, 190, 190, 190, 57,
0, 0, 0, 129, 0, 0, 0, 207, 0, 0, 0, 226,
0, 0, 0, 246, 0, 0, 0, 222, 29, 29, 29, 89,
172, 172, 172, 52, 189, 189, 189, 55, 171, 171, 171, 55,
30, 30, 30, 88, 0, 0, 0, 198, 0, 0, 0, 209,
0, 0, 0, 223, 0, 0, 0, 243, 0, 0, 0, 253,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 159, 190, 190, 190, 64,
190, 190, 190, 64, 23, 23, 23, 136, 0, 0, 0, 255,
0, 0, 0, 159, 189, 189, 189, 63, 190, 190, 190, 57,
0, 0, 0, 129, 0, 0, 0, 207, 0, 0, 0, 226,
0, 0, 0, 246, 0, 0, 0, 229, 0, 0, 0, 201,
30, 30, 30, 88, 171, 171, 171, 57, 189, 189, 189, 60,
163, 163, 163, 56, 3, 3, 3, 120, 0, 0, 0, 205,
0, 0, 0, 209, 0, 0, 0, 223, 0, 0, 0, 243,
0, 0, 0, 253, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 159, 190, 190, 190, 64,
190, 190, 190, 64, 23, 23, 23, 136, 0, 0, 0, 255,
0, 0, 0, 159, 189, 189, 189, 63, 190, 190, 190, 57,
0, 0, 0, 129, 0, 0, 0, 207, 0, 0, 0, 226,
0, 0, 0, 246, 0, 0, 0, 229, 0, 0, 0, 208,
0, 0, 0, 201, 29, 29, 29, 96, 163, 163, 163, 62,
44, 44, 44, 89, 0, 0, 0, 208, 0, 0, 0, 209,
0, 0, 0, 205, 0, 0, 0, 209, 0, 0, 0, 223,
0, 0, 0, 243, 0, 0, 0, 253, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 162, 172, 172, 172, 64,
181, 181, 181, 64, 14, 14, 14, 139, 0, 0, 0, 255,
0, 0, 0, 216, 0, 0, 0, 157, 0, 0, 0, 144,
0, 0, 0, 176, 0, 0, 0, 207, 0, 0, 0, 226,
0, 0, 0, 246, 0, 0, 0, 229, 0, 0, 0, 208,
0, 0, 0, 208, 0, 0, 0, 221, 3, 3, 3, 145,
0, 0, 0, 235, 0, 0, 0, 243, 0, 0, 0, 223,
0, 0, 0, 209, 0, 0, 0, 205, 0, 0, 0, 209,
0, 0, 0, 223, 0, 0, 0, 243, 0, 0, 0, 253,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 246, 12, 12, 12, 145,
14, 14, 14, 139, 0, 0, 0, 237, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 251, 0, 0, 0, 230,
0, 0, 0, 208, 0, 0, 0, 207, 0, 0, 0, 226,
0, 0, 0, 246, 0, 0, 0, 229, 0, 0, 0, 208,
0, 0, 0, 208, 0, 0, 0, 230, 0, 0, 0, 251,
0, 0, 0, 255, 0, 0, 0, 253, 0, 0, 0, 243,
0, 0, 0, 223, 0, 0, 0, 209, 0, 0, 0, 205,
0, 0, 0, 209, 0, 0, 0, 224, 0, 0, 0, 244,
0, 0, 0, 254, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 251, 0, 0, 0, 230,
0, 0, 0, 208, 0, 0, 0, 207, 0, 0, 0, 226,
0, 0, 0, 246, 0, 0, 0, 230, 0, 0, 0, 208,
0, 0, 0, 208, 0, 0, 0, 230, 0, 0, 0, 251,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 253,
0, 0, 0, 243, 0, 0, 0, 223, 0, 0, 0, 209,
0, 0, 0, 205, 0, 0, 0, 213, 0, 0, 0, 235,
0, 0, 0, 252, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 251, 0, 0, 0, 230,
0, 0, 0, 208, 0, 0, 0, 207, 0, 0, 0, 226,
0, 0, 0, 246, 0, 0, 0, 232, 0, 0, 0, 212,
0, 0, 0, 212, 0, 0, 0, 232, 0, 0, 0, 252,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 253, 0, 0, 0, 243, 0, 0, 0, 224,
0, 0, 0, 213, 0, 0, 0, 222, 0, 0, 0, 242,
0, 0, 0, 254, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 252, 0, 0, 0, 233,
0, 0, 0, 212, 0, 0, 0, 211, 0, 0, 0, 230,
0, 0, 0, 249, 0, 0, 0, 243, 0, 0, 0, 232,
0, 0, 0, 232, 0, 0, 0, 243, 0, 0, 0, 253,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 253, 0, 0, 0, 244,
0, 0, 0, 235, 0, 0, 0, 242, 0, 0, 0, 252,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 254, 0, 0, 0, 245,
0, 0, 0, 232, 0, 0, 0, 230, 0, 0, 0, 243,
0, 0, 0, 253, 0, 0, 0, 253, 0, 0, 0, 252,
0, 0, 0, 252, 0, 0, 0, 253, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 254,
0, 0, 0, 252, 0, 0, 0, 254, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 254,
0, 0, 0, 251, 0, 0, 0, 251, 0, 0, 0, 254,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255,
},{
0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 242, 2, 2, 2, 158, 3, 3, 3, 156,
3, 3, 3, 156, 3, 3, 3, 156, 3, 3, 3, 156,
3, 3, 3, 156, 3, 3, 3, 156, 3, 3, 3, 156,
3, 3, 3, 156, 3, 3, 3, 156, 3, 3, 3, 156,
3, 3, 3, 156, 3, 3, 3, 156, 3, 3, 3, 156,
3, 3, 3, 156, 3, 3, 3, 156, 3, 3, 3, 156,
1, 1, 1, 183, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
16, 16, 16, 137, 176, 176, 176, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
128, 128, 128, 64, 0, 0, 0, 197, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
18, 18, 18, 134, 180, 180, 180, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
172, 172, 172, 64, 0, 0, 0, 178, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 237, 11, 11, 11, 145, 17, 17, 17, 143,
17, 17, 17, 143, 17, 17, 17, 143, 17, 17, 17, 143,
17, 17, 17, 143, 17, 17, 17, 143, 17, 17, 17, 142,
16, 16, 16, 142, 16, 16, 16, 141, 16, 16, 16, 141,
16, 16, 16, 141, 16, 16, 16, 141, 16, 16, 16, 141,
16, 16, 16, 141, 53, 53, 53, 86, 189, 189, 189, 64,
172, 172, 172, 64, 0, 0, 0, 176, 0, 0, 0, 253,
0, 0, 0, 253, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 254, 0, 0, 0, 249, 0, 0, 0, 239,
0, 0, 0, 236, 0, 0, 0, 236, 0, 0, 0, 235,
0, 0, 0, 235, 0, 0, 0, 235, 0, 0, 0, 235,
0, 0, 0, 235, 40, 40, 40, 110, 189, 189, 189, 59,
172, 172, 172, 59, 0, 0, 0, 164, 0, 0, 0, 235,
0, 0, 0, 235, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 207, 10, 10, 10, 150,
10, 10, 10, 150, 10, 10, 10, 150, 10, 10, 10, 150,
10, 10, 10, 148, 10, 10, 10, 139, 10, 10, 10, 128,
10, 10, 10, 125, 10, 10, 10, 125, 10, 10, 10, 125,
10, 10, 10, 125, 9, 9, 9, 125, 0, 0, 0, 182,
0, 0, 0, 211, 40, 40, 40, 99, 189, 189, 189, 53,
172, 172, 172, 53, 0, 0, 0, 147, 0, 0, 0, 211,
0, 0, 0, 211, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 7, 7, 7, 152, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
189, 189, 189, 63, 190, 190, 190, 58, 189, 189, 189, 53,
189, 189, 189, 52, 189, 189, 189, 51, 189, 189, 189, 51,
189, 189, 189, 51, 175, 175, 175, 51, 0, 0, 0, 141,
0, 0, 0, 206, 40, 40, 40, 96, 189, 189, 189, 51,
172, 172, 172, 51, 0, 0, 0, 143, 0, 0, 0, 206,
0, 0, 0, 206, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 6, 6, 6, 152, 176, 176, 176, 64,
176, 176, 176, 64, 176, 176, 176, 64, 176, 176, 176, 64,
176, 176, 176, 64, 176, 176, 176, 61, 176, 176, 176, 57,
177, 177, 177, 55, 185, 185, 185, 55, 189, 189, 189, 55,
189, 189, 189, 55, 175, 175, 175, 55, 0, 0, 0, 151,
0, 0, 0, 221, 40, 40, 40, 103, 189, 189, 189, 55,
172, 172, 172, 55, 0, 0, 0, 154, 0, 0, 0, 221,
0, 0, 0, 221, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 220, 0, 0, 0, 173,
0, 0, 0, 173, 0, 0, 0, 173, 0, 0, 0, 173,
0, 0, 0, 173, 0, 0, 0, 172, 0, 0, 0, 150,
46, 46, 46, 63, 181, 181, 181, 61, 190, 190, 190, 61,
190, 190, 190, 61, 175, 175, 175, 61, 0, 0, 0, 167,
0, 0, 0, 245, 39, 39, 39, 115, 190, 190, 190, 61,
172, 172, 172, 61, 0, 0, 0, 170, 0, 0, 0, 245,
0, 0, 0, 246, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 234, 47, 47, 47, 91,
181, 181, 181, 59, 189, 189, 189, 59, 163, 163, 163, 59,
189, 189, 189, 59, 175, 175, 175, 59, 0, 0, 0, 160,
0, 0, 0, 234, 40, 40, 40, 110, 189, 189, 189, 59,
172, 172, 172, 59, 0, 0, 0, 163, 0, 0, 0, 236,
0, 0, 0, 245, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 235, 47, 47, 47, 92, 180, 180, 180, 59,
190, 190, 190, 54, 156, 156, 156, 53, 30, 30, 30, 58,
189, 189, 189, 53, 175, 175, 175, 53, 0, 0, 0, 144,
0, 0, 0, 210, 39, 39, 39, 98, 189, 189, 189, 53,
172, 172, 172, 53, 0, 0, 0, 146, 0, 0, 0, 214,
0, 0, 0, 232, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 235,
48, 48, 48, 92, 182, 182, 182, 63, 190, 190, 190, 58,
156, 156, 156, 53, 16, 16, 16, 108, 13, 13, 13, 117,
189, 189, 189, 52, 174, 174, 174, 52, 0, 0, 0, 141,
0, 0, 0, 206, 39, 39, 39, 96, 189, 189, 189, 51,
172, 172, 172, 51, 0, 0, 0, 142, 0, 0, 0, 208,
0, 0, 0, 229, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 234, 49, 49, 49, 92,
182, 182, 182, 64, 189, 189, 189, 64, 155, 155, 155, 61,
15, 15, 15, 121, 0, 0, 0, 224, 13, 13, 13, 129,
190, 190, 190, 56, 175, 175, 175, 56, 0, 0, 0, 153,
0, 0, 0, 217, 39, 39, 39, 98, 189, 189, 189, 51,
172, 172, 172, 51, 0, 0, 0, 142, 0, 0, 0, 208,
0, 0, 0, 229, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 234, 49, 49, 49, 92, 182, 182, 182, 64,
190, 190, 190, 64, 155, 155, 155, 64, 15, 15, 15, 133,
0, 0, 0, 248, 0, 0, 0, 250, 13, 13, 13, 143,
190, 190, 190, 62, 175, 175, 175, 62, 0, 0, 0, 163,
0, 0, 0, 222, 39, 39, 39, 98, 189, 189, 189, 51,
172, 172, 172, 51, 0, 0, 0, 142, 0, 0, 0, 208,
0, 0, 0, 229, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 234,
49, 49, 49, 91, 182, 182, 182, 64, 190, 190, 190, 64,
155, 155, 155, 64, 15, 15, 15, 135, 0, 0, 0, 253,
0, 0, 0, 255, 0, 0, 0, 255, 13, 13, 13, 146,
189, 189, 189, 64, 175, 175, 175, 61, 0, 0, 0, 153,
0, 0, 0, 210, 39, 39, 39, 96, 189, 189, 189, 52,
172, 172, 172, 52, 0, 0, 0, 142, 0, 0, 0, 208,
0, 0, 0, 229, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 234, 49, 49, 49, 91,
182, 182, 182, 64, 190, 190, 190, 64, 154, 154, 154, 64,
14, 14, 14, 135, 0, 0, 0, 253, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 13, 13, 13, 146,
189, 189, 189, 62, 174, 174, 174, 57, 0, 0, 0, 143,
0, 0, 0, 205, 40, 40, 40, 97, 190, 190, 190, 54,
172, 172, 172, 54, 0, 0, 0, 143, 0, 0, 0, 208,
0, 0, 0, 229, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 5, 5, 5, 141, 167, 167, 167, 64,
190, 190, 190, 64, 154, 154, 154, 64, 14, 14, 14, 136,
0, 0, 0, 253, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 254, 13, 13, 13, 142,
189, 189, 189, 57, 175, 175, 175, 53, 0, 0, 0, 140,
0, 0, 0, 208, 40, 40, 40, 102, 189, 189, 189, 59,
172, 172, 172, 57, 0, 0, 0, 144, 0, 0, 0, 208,
0, 0, 0, 229, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 244, 33, 33, 33, 106,
138, 138, 138, 64, 13, 13, 13, 136, 0, 0, 0, 253,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 254, 0, 0, 0, 245, 11, 11, 11, 132,
163, 163, 163, 53, 151, 151, 151, 51, 0, 0, 0, 143,
0, 0, 0, 220, 39, 39, 39, 111, 189, 189, 189, 62,
172, 172, 172, 58, 0, 0, 0, 144, 0, 0, 0, 208,
0, 0, 0, 229, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 244,
0, 0, 0, 177, 0, 0, 0, 253, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 254,
0, 0, 0, 245, 0, 0, 0, 227, 0, 0, 0, 186,
0, 0, 0, 150, 0, 0, 0, 152, 0, 0, 0, 204,
0, 0, 0, 240, 16, 16, 16, 137, 150, 150, 150, 63,
117, 117, 117, 58, 0, 0, 0, 160, 0, 0, 0, 208,
0, 0, 0, 229, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 254, 0, 0, 0, 246,
0, 0, 0, 227, 0, 0, 0, 211, 0, 0, 0, 205,
0, 0, 0, 208, 0, 0, 0, 221, 0, 0, 0, 240,
0, 0, 0, 252, 0, 0, 0, 249, 0, 0, 0, 186,
0, 0, 0, 183, 0, 0, 0, 208, 0, 0, 0, 208,
0, 0, 0, 229, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 253, 0, 0, 0, 237,
0, 0, 0, 214, 0, 0, 0, 206, 0, 0, 0, 208,
0, 0, 0, 221, 0, 0, 0, 240, 0, 0, 0, 252,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 252,
0, 0, 0, 231, 0, 0, 0, 209, 0, 0, 0, 208,
0, 0, 0, 229, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 254, 0, 0, 0, 243,
0, 0, 0, 222, 0, 0, 0, 211, 0, 0, 0, 221,
0, 0, 0, 240, 0, 0, 0, 252, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 252,
0, 0, 0, 232, 0, 0, 0, 211, 0, 0, 0, 211,
0, 0, 0, 231, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 252,
0, 0, 0, 242, 0, 0, 0, 233, 0, 0, 0, 242,
0, 0, 0, 252, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 253,
0, 0, 0, 242, 0, 0, 0, 230, 0, 0, 0, 230,
0, 0, 0, 242, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 253, 0, 0, 0, 251, 0, 0, 0, 253,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 253, 0, 0, 0, 251, 0, 0, 0, 251,
0, 0, 0, 253, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255,
},{
0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 213,
0, 0, 0, 218, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 254,
0, 0, 0, 210, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 245,
0, 0, 0, 221, 0, 0, 0, 221, 0, 0, 0, 245,
0, 0, 0, 255, 7, 7, 7, 164, 128, 128, 128, 64,
117, 117, 117, 64, 0, 0, 0, 188, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 252, 16, 16, 16, 133,
111, 111, 111, 64, 8, 8, 8, 154, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 161,
134, 134, 134, 64, 134, 134, 134, 64, 0, 0, 0, 161,
0, 0, 0, 255, 23, 23, 23, 136, 190, 190, 190, 64,
190, 190, 190, 64, 0, 0, 0, 159, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 2, 2, 2, 154, 156, 156, 156, 64,
190, 190, 190, 64, 148, 148, 148, 64, 12, 12, 12, 143,
0, 0, 0, 254, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 159,
190, 190, 190, 64, 190, 190, 190, 64, 0, 0, 0, 159,
0, 0, 0, 255, 23, 23, 23, 136, 190, 190, 190, 64,
190, 190, 190, 64, 0, 0, 0, 159, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 233, 50, 50, 50, 92,
182, 182, 182, 64, 190, 190, 190, 64, 155, 155, 155, 64,
16, 16, 16, 133, 0, 0, 0, 252, 0, 0, 0, 255,
0, 0, 0, 254, 0, 0, 0, 254, 0, 0, 0, 159,
190, 190, 190, 64, 190, 190, 190, 64, 0, 0, 0, 159,
0, 0, 0, 255, 23, 23, 23, 136, 190, 190, 190, 64,
190, 190, 190, 64, 0, 0, 0, 159, 0, 0, 0, 254,
0, 0, 0, 254, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 238,
42, 42, 42, 99, 177, 177, 177, 64, 190, 190, 190, 64,
161, 161, 161, 64, 22, 22, 22, 123, 0, 0, 0, 248,
0, 0, 0, 246, 0, 0, 0, 240, 0, 0, 0, 154,
189, 189, 189, 64, 190, 190, 190, 64, 0, 0, 0, 159,
0, 0, 0, 255, 23, 23, 23, 136, 189, 189, 189, 64,
189, 189, 189, 62, 0, 0, 0, 148, 0, 0, 0, 238,
0, 0, 0, 246, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 242, 34, 34, 34, 106, 173, 173, 173, 64,
190, 190, 190, 64, 167, 167, 167, 64, 27, 27, 27, 110,
0, 0, 0, 218, 0, 0, 0, 215, 0, 0, 0, 140,
190, 190, 190, 61, 189, 189, 189, 64, 0, 0, 0, 159,
0, 0, 0, 255, 23, 23, 23, 136, 190, 190, 190, 63,
190, 190, 190, 58, 0, 0, 0, 133, 0, 0, 0, 214,
0, 0, 0, 233, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 247, 27, 27, 27, 115,
167, 167, 167, 64, 190, 190, 190, 63, 173, 173, 173, 59,
34, 34, 34, 88, 0, 0, 0, 195, 0, 0, 0, 130,
190, 190, 190, 56, 190, 190, 190, 61, 0, 0, 0, 159,
0, 0, 0, 255, 23, 23, 23, 136, 189, 189, 189, 63,
190, 190, 190, 57, 0, 0, 0, 129, 0, 0, 0, 208,
0, 0, 0, 230, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 249,
22, 22, 22, 123, 161, 161, 161, 64, 190, 190, 190, 61,
177, 177, 177, 56, 42, 42, 42, 81, 0, 0, 0, 115,
190, 190, 190, 52, 189, 189, 189, 56, 0, 0, 0, 154,
0, 0, 0, 253, 23, 23, 23, 136, 189, 189, 189, 63,
190, 190, 190, 57, 0, 0, 0, 129, 0, 0, 0, 208,
0, 0, 0, 229, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 252, 16, 16, 16, 133, 155, 155, 155, 63,
190, 190, 190, 61, 181, 181, 181, 56, 50, 50, 50, 52,
189, 189, 189, 51, 190, 190, 190, 52, 0, 0, 0, 141,
0, 0, 0, 242, 23, 23, 23, 134, 189, 189, 189, 63,
190, 190, 190, 57, 0, 0, 0, 129, 0, 0, 0, 208,
0, 0, 0, 229, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 254, 12, 12, 12, 143,
147, 147, 147, 64, 190, 190, 190, 61, 185, 185, 185, 56,
189, 189, 189, 53, 189, 189, 189, 51, 0, 0, 0, 131,
0, 0, 0, 222, 23, 23, 23, 127, 189, 189, 189, 62,
190, 190, 190, 57, 0, 0, 0, 129, 0, 0, 0, 208,
0, 0, 0, 229, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 190, 55, 55, 55, 109,
55, 55, 55, 109, 55, 55, 55, 109, 55, 55, 55, 109,
55, 55, 55, 109, 55, 55, 55, 109, 55, 55, 55, 109,
64, 64, 64, 67, 173, 173, 173, 64, 190, 190, 190, 61,
189, 189, 189, 57, 189, 189, 189, 53, 0, 0, 0, 128,
0, 0, 0, 208, 23, 23, 23, 116, 189, 189, 189, 59,
189, 189, 189, 57, 0, 0, 0, 129, 0, 0, 0, 208,
0, 0, 0, 229, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 159, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 189, 189, 189, 64,
189, 189, 189, 62, 190, 190, 190, 57, 0, 0, 0, 131,
0, 0, 0, 205, 23, 23, 23, 110, 190, 190, 190, 54,
190, 190, 190, 54, 0, 0, 0, 129, 0, 0, 0, 208,
0, 0, 0, 229, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 165, 111, 111, 111, 64,
111, 111, 111, 64, 111, 111, 111, 64, 111, 111, 111, 64,
111, 111, 111, 64, 111, 111, 111, 64, 111, 111, 111, 64,
111, 111, 111, 64, 111, 111, 111, 64, 111, 111, 111, 64,
111, 111, 111, 64, 111, 111, 111, 62, 0, 0, 0, 146,
0, 0, 0, 212, 23, 23, 23, 109, 189, 189, 189, 51,
189, 189, 189, 52, 0, 0, 0, 128, 0, 0, 0, 208,
0, 0, 0, 229, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 252, 0, 0, 0, 244,
0, 0, 0, 244, 0, 0, 0, 244, 0, 0, 0, 244,
0, 0, 0, 244, 0, 0, 0, 243, 0, 0, 0, 240,
0, 0, 0, 236, 0, 0, 0, 235, 0, 0, 0, 235,
0, 0, 0, 235, 0, 0, 0, 234, 0, 0, 0, 236,
0, 0, 0, 222, 23, 23, 23, 111, 189, 189, 189, 51,
189, 189, 189, 51, 0, 0, 0, 127, 0, 0, 0, 208,
0, 0, 0, 229, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 228, 0, 0, 0, 221,
0, 0, 0, 221, 0, 0, 0, 221, 0, 0, 0, 221,
0, 0, 0, 221, 0, 0, 0, 219, 0, 0, 0, 207,
0, 0, 0, 194, 0, 0, 0, 191, 0, 0, 0, 191,
0, 0, 0, 191, 0, 0, 0, 191, 0, 0, 0, 190,
0, 0, 0, 186, 23, 23, 23, 100, 189, 189, 189, 51,
189, 189, 189, 51, 0, 0, 0, 128, 0, 0, 0, 208,
0, 0, 0, 230, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 193, 106, 106, 106, 65, 134, 134, 134, 64,
134, 134, 134, 64, 134, 134, 134, 64, 134, 134, 134, 64,
134, 134, 134, 64, 134, 134, 134, 63, 133, 133, 133, 58,
133, 133, 133, 53, 133, 133, 133, 52, 133, 133, 133, 52,
133, 133, 133, 52, 133, 133, 133, 52, 133, 133, 133, 52,
133, 133, 133, 51, 141, 141, 141, 51, 189, 189, 189, 51,
189, 189, 189, 51, 0, 0, 0, 128, 0, 0, 0, 209,
0, 0, 0, 230, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 159, 184, 184, 184, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 190, 190, 190, 63, 189, 189, 189, 59,
189, 189, 189, 55, 190, 190, 190, 54, 190, 190, 190, 54,
190, 190, 190, 54, 190, 190, 190, 54, 190, 190, 190, 54,
190, 190, 190, 54, 190, 190, 190, 54, 190, 190, 190, 54,
177, 177, 177, 54, 0, 0, 0, 137, 0, 0, 0, 220,
0, 0, 0, 237, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 233, 33, 33, 33, 117, 55, 55, 55, 109,
55, 55, 55, 109, 55, 55, 55, 109, 55, 55, 55, 109,
55, 55, 55, 109, 55, 55, 55, 109, 55, 55, 55, 107,
55, 55, 55, 105, 55, 55, 55, 105, 55, 55, 55, 105,
55, 55, 55, 105, 55, 55, 55, 105, 55, 55, 55, 105,
55, 55, 55, 105, 55, 55, 55, 105, 55, 55, 55, 105,
23, 23, 23, 124, 0, 0, 0, 232, 0, 0, 0, 244,
0, 0, 0, 249, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 249, 0, 0, 0, 240,
0, 0, 0, 236, 0, 0, 0, 235, 0, 0, 0, 235,
0, 0, 0, 235, 0, 0, 0, 235, 0, 0, 0, 235,
0, 0, 0, 235, 0, 0, 0, 235, 0, 0, 0, 235,
0, 0, 0, 235, 0, 0, 0, 235, 0, 0, 0, 236,
0, 0, 0, 235, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 253, 0, 0, 0, 236, 0, 0, 0, 216,
0, 0, 0, 210, 0, 0, 0, 210, 0, 0, 0, 210,
0, 0, 0, 210, 0, 0, 0, 210, 0, 0, 0, 210,
0, 0, 0, 210, 0, 0, 0, 210, 0, 0, 0, 210,
0, 0, 0, 210, 0, 0, 0, 210, 0, 0, 0, 210,
0, 0, 0, 210, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 252, 0, 0, 0, 233, 0, 0, 0, 212,
0, 0, 0, 207, 0, 0, 0, 207, 0, 0, 0, 207,
0, 0, 0, 207, 0, 0, 0, 207, 0, 0, 0, 207,
0, 0, 0, 207, 0, 0, 0, 207, 0, 0, 0, 207,
0, 0, 0, 207, 0, 0, 0, 207, 0, 0, 0, 207,
0, 0, 0, 207, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 254, 0, 0, 0, 245, 0, 0, 0, 230,
0, 0, 0, 226, 0, 0, 0, 225, 0, 0, 0, 225,
0, 0, 0, 225, 0, 0, 0, 225, 0, 0, 0, 225,
0, 0, 0, 225, 0, 0, 0, 225, 0, 0, 0, 225,
0, 0, 0, 225, 0, 0, 0, 225, 0, 0, 0, 225,
0, 0, 0, 225,
},{
0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 243,
0, 0, 0, 241, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 203, 87, 87, 87, 69,
100, 100, 100, 65, 4, 4, 4, 179, 0, 0, 0, 255,
0, 0, 0, 249, 0, 0, 0, 228, 0, 0, 0, 228,
0, 0, 0, 247, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 219,
0, 0, 0, 253, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 161, 188, 188, 188, 64,
190, 190, 190, 64, 26, 26, 26, 132, 0, 0, 0, 255,
0, 0, 0, 166, 123, 123, 123, 64, 126, 126, 126, 64,
3, 3, 3, 155, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 4, 4, 4, 171, 101, 101, 101, 65,
19, 19, 19, 130, 0, 0, 0, 251, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 161, 188, 188, 188, 64,
190, 190, 190, 64, 26, 26, 26, 132, 0, 0, 0, 255,
0, 0, 0, 164, 185, 185, 185, 64, 190, 190, 190, 64,
6, 6, 6, 152, 0, 0, 0, 254, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
7, 7, 7, 160, 134, 134, 134, 64, 190, 190, 190, 64,
161, 161, 161, 64, 7, 7, 7, 144, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 161, 188, 188, 188, 64,
190, 190, 190, 64, 26, 26, 26, 132, 0, 0, 0, 255,
0, 0, 0, 164, 185, 185, 185, 64, 189, 189, 189, 62,
6, 6, 6, 143, 0, 0, 0, 239, 0, 0, 0, 249,
0, 0, 0, 254, 0, 0, 0, 253, 10, 10, 10, 149,
142, 142, 142, 64, 190, 190, 190, 64, 186, 186, 186, 64,
66, 66, 66, 82, 0, 0, 0, 221, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 254,
0, 0, 0, 253, 0, 0, 0, 254, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 161, 188, 188, 188, 64,
190, 190, 190, 64, 26, 26, 26, 132, 0, 0, 0, 255,
0, 0, 0, 164, 185, 185, 185, 63, 189, 189, 189, 59,
5, 5, 5, 128, 0, 0, 0, 215, 0, 0, 0, 235,
0, 0, 0, 248, 14, 14, 14, 135, 150, 150, 150, 59,
189, 189, 189, 59, 183, 183, 183, 62, 57, 57, 57, 87,
0, 0, 0, 227, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 253, 0, 0, 0, 246,
0, 0, 0, 238, 0, 0, 0, 245, 0, 0, 0, 253,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 161, 188, 188, 188, 64,
190, 190, 190, 64, 26, 26, 26, 132, 0, 0, 0, 255,
0, 0, 0, 164, 185, 185, 185, 63, 189, 189, 189, 57,
6, 6, 6, 124, 0, 0, 0, 208, 0, 0, 0, 225,
19, 19, 19, 125, 156, 156, 156, 58, 190, 190, 190, 53,
179, 179, 179, 54, 48, 48, 48, 87, 0, 0, 0, 231,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 253, 0, 0, 0, 243, 0, 0, 0, 225,
0, 0, 0, 214, 0, 0, 0, 224, 0, 0, 0, 244,
0, 0, 0, 254, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 161, 188, 188, 188, 64,
190, 190, 190, 64, 26, 26, 26, 132, 0, 0, 0, 255,
0, 0, 0, 164, 184, 184, 184, 63, 189, 189, 189, 57,
6, 6, 6, 124, 0, 0, 0, 202, 24, 24, 24, 106,
163, 163, 163, 62, 189, 189, 189, 57, 176, 176, 176, 52,
40, 40, 40, 83, 0, 0, 0, 217, 0, 0, 0, 252,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 253,
0, 0, 0, 242, 0, 0, 0, 223, 0, 0, 0, 209,
0, 0, 0, 206, 0, 0, 0, 213, 0, 0, 0, 236,
0, 0, 0, 252, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 161, 188, 188, 188, 64,
190, 190, 190, 64, 26, 26, 26, 132, 0, 0, 0, 255,
0, 0, 0, 164, 184, 184, 184, 63, 189, 189, 189, 57,
6, 6, 6, 115, 30, 30, 30, 90, 169, 169, 169, 57,
189, 189, 189, 62, 171, 171, 171, 57, 33, 33, 33, 87,
0, 0, 0, 199, 0, 0, 0, 232, 0, 0, 0, 252,
0, 0, 0, 255, 0, 0, 0, 252, 0, 0, 0, 241,
0, 0, 0, 222, 0, 0, 0, 208, 0, 0, 0, 205,
0, 0, 0, 210, 0, 0, 0, 225, 0, 0, 0, 245,
0, 0, 0, 254, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 161, 188, 188, 188, 64,
190, 190, 190, 64, 26, 26, 26, 132, 0, 0, 0, 255,
0, 0, 0, 164, 184, 184, 184, 63, 189, 189, 189, 57,
43, 43, 43, 53, 173, 173, 173, 52, 190, 190, 190, 57,
166, 166, 166, 62, 27, 27, 27, 102, 0, 0, 0, 200,
0, 0, 0, 209, 0, 0, 0, 232, 0, 0, 0, 252,
0, 0, 0, 252, 0, 0, 0, 240, 0, 0, 0, 221,
0, 0, 0, 208, 0, 0, 0, 205, 0, 0, 0, 210,
0, 0, 0, 226, 0, 0, 0, 245, 0, 0, 0, 253,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 161, 188, 188, 188, 64,
190, 190, 190, 64, 26, 26, 26, 132, 0, 0, 0, 255,
0, 0, 0, 164, 184, 184, 184, 63, 189, 189, 189, 57,
180, 180, 180, 52, 189, 189, 189, 52, 160, 160, 160, 57,
21, 21, 21, 120, 0, 0, 0, 222, 0, 0, 0, 207,
0, 0, 0, 209, 0, 0, 0, 231, 0, 0, 0, 248,
0, 0, 0, 239, 0, 0, 0, 220, 0, 0, 0, 208,
0, 0, 0, 205, 0, 0, 0, 211, 0, 0, 0, 227,
0, 0, 0, 246, 0, 0, 0, 254, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 161, 188, 188, 188, 64,
190, 190, 190, 64, 26, 26, 26, 132, 0, 0, 0, 255,
0, 0, 0, 164, 184, 184, 184, 63, 189, 189, 189, 57,
189, 189, 189, 52, 175, 175, 175, 52, 58, 58, 58, 59,
42, 42, 42, 115, 42, 42, 42, 109, 42, 42, 42, 99,
42, 42, 42, 100, 41, 41, 41, 110, 42, 42, 42, 114,
42, 42, 42, 106, 2, 2, 2, 153, 0, 0, 0, 205,
0, 0, 0, 212, 0, 0, 0, 229, 0, 0, 0, 246,
0, 0, 0, 254, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 161, 188, 188, 188, 64,
190, 190, 190, 64, 26, 26, 26, 132, 0, 0, 0, 255,
0, 0, 0, 164, 184, 184, 184, 63, 189, 189, 189, 57,
189, 189, 189, 52, 189, 189, 189, 52, 190, 190, 190, 57,
189, 189, 189, 62, 189, 189, 189, 57, 189, 189, 189, 52,
189, 189, 189, 52, 190, 190, 190, 54, 190, 190, 190, 54,
189, 189, 189, 52, 12, 12, 12, 118, 0, 0, 0, 212,
0, 0, 0, 230, 0, 0, 0, 247, 0, 0, 0, 254,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 161, 188, 188, 188, 64,
190, 190, 190, 64, 26, 26, 26, 132, 0, 0, 0, 255,
0, 0, 0, 166, 123, 123, 123, 63, 126, 126, 126, 57,
126, 126, 126, 52, 126, 126, 126, 52, 126, 126, 126, 57,
126, 126, 126, 62, 126, 126, 126, 57, 126, 126, 126, 52,
126, 126, 126, 51, 126, 126, 126, 52, 126, 126, 126, 51,
126, 126, 126, 51, 8, 8, 8, 126, 0, 0, 0, 231,
0, 0, 0, 247, 0, 0, 0, 254, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 161, 188, 188, 188, 64,
190, 190, 190, 64, 26, 26, 26, 132, 0, 0, 0, 255,
0, 0, 0, 248, 0, 0, 0, 224, 0, 0, 0, 203,
0, 0, 0, 186, 0, 0, 0, 186, 0, 0, 0, 205,
0, 0, 0, 220, 0, 0, 0, 204, 0, 0, 0, 186,
0, 0, 0, 183, 0, 0, 0, 183, 0, 0, 0, 183,
0, 0, 0, 187, 0, 0, 0, 216, 0, 0, 0, 239,
0, 0, 0, 244, 0, 0, 0, 245, 0, 0, 0, 245,
0, 0, 0, 246, 0, 0, 0, 246, 0, 0, 0, 251,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 161, 188, 188, 188, 64,
190, 190, 190, 64, 26, 26, 26, 126, 0, 0, 0, 238,
0, 0, 0, 238, 0, 0, 0, 233, 0, 0, 0, 212,
0, 0, 0, 193, 0, 0, 0, 194, 0, 0, 0, 213,
0, 0, 0, 229, 0, 0, 0, 212, 0, 0, 0, 193,
0, 0, 0, 190, 0, 0, 0, 190, 0, 0, 0, 190,
0, 0, 0, 193, 0, 0, 0, 200, 0, 0, 0, 217,
0, 0, 0, 218, 0, 0, 0, 218, 0, 0, 0, 218,
0, 0, 0, 218, 0, 0, 0, 221, 0, 0, 0, 238,
0, 0, 0, 253, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 161, 188, 188, 188, 64,
190, 190, 190, 64, 127, 127, 127, 64, 117, 117, 117, 64,
117, 117, 117, 64, 117, 117, 117, 63, 117, 117, 117, 57,
117, 117, 117, 52, 117, 117, 117, 52, 117, 117, 117, 57,
117, 117, 117, 62, 117, 117, 117, 57, 117, 117, 117, 52,
117, 117, 117, 51, 117, 117, 117, 51, 117, 117, 117, 51,
117, 117, 117, 51, 104, 104, 104, 52, 6, 6, 6, 136,
0, 0, 0, 206, 0, 0, 0, 206, 0, 0, 0, 206,
0, 0, 0, 206, 0, 0, 0, 210, 0, 0, 0, 232,
0, 0, 0, 252, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 163, 179, 179, 179, 64,
190, 190, 190, 64, 190, 190, 190, 64, 190, 190, 190, 64,
190, 190, 190, 64, 189, 189, 189, 63, 189, 189, 189, 57,
189, 189, 189, 52, 189, 189, 189, 52, 190, 190, 190, 57,
189, 189, 189, 62, 189, 189, 189, 59, 189, 189, 189, 55,
189, 189, 189, 55, 189, 189, 189, 55, 189, 189, 189, 55,
189, 189, 189, 55, 189, 189, 189, 55, 34, 34, 34, 104,
0, 0, 0, 218, 0, 0, 0, 218, 0, 0, 0, 218,
0, 0, 0, 218, 0, 0, 0, 221, 0, 0, 0, 238,
0, 0, 0, 253, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 236, 37, 37, 37, 108,
73, 73, 73, 91, 73, 73, 73, 91, 73, 73, 73, 91,
73, 73, 73, 91, 73, 73, 73, 89, 73, 73, 73, 80,
73, 73, 73, 73, 73, 73, 73, 74, 73, 73, 73, 81,
73, 73, 73, 88, 73, 73, 73, 88, 74, 74, 74, 87,
73, 73, 73, 87, 73, 73, 73, 87, 73, 73, 73, 87,
73, 73, 73, 87, 61, 61, 61, 88, 0, 0, 0, 191,
0, 0, 0, 243, 0, 0, 0, 243, 0, 0, 0, 243,
0, 0, 0, 243, 0, 0, 0, 245, 0, 0, 0, 249,
0, 0, 0, 254, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 250, 0, 0, 0, 227,
0, 0, 0, 207, 0, 0, 0, 206, 0, 0, 0, 219,
0, 0, 0, 233, 0, 0, 0, 235, 0, 0, 0, 235,
0, 0, 0, 235, 0, 0, 0, 235, 0, 0, 0, 235,
0, 0, 0, 235, 0, 0, 0, 235, 0, 0, 0, 235,
0, 0, 0, 235, 0, 0, 0, 235, 0, 0, 0, 235,
0, 0, 0, 235, 0, 0, 0, 235, 0, 0, 0, 238,
0, 0, 0, 248, 0, 0, 0, 254, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 250, 0, 0, 0, 227,
0, 0, 0, 207, 0, 0, 0, 205, 0, 0, 0, 207,
0, 0, 0, 209, 0, 0, 0, 210, 0, 0, 0, 210,
0, 0, 0, 210, 0, 0, 0, 210, 0, 0, 0, 210,
0, 0, 0, 210, 0, 0, 0, 210, 0, 0, 0, 210,
0, 0, 0, 210, 0, 0, 0, 210, 0, 0, 0, 210,
0, 0, 0, 210, 0, 0, 0, 210, 0, 0, 0, 215,
0, 0, 0, 234, 0, 0, 0, 252, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 251, 0, 0, 0, 232,
0, 0, 0, 211, 0, 0, 0, 207, 0, 0, 0, 207,
0, 0, 0, 207, 0, 0, 0, 207, 0, 0, 0, 207,
0, 0, 0, 207, 0, 0, 0, 207, 0, 0, 0, 207,
0, 0, 0, 207, 0, 0, 0, 207, 0, 0, 0, 207,
0, 0, 0, 207, 0, 0, 0, 207, 0, 0, 0, 207,
0, 0, 0, 207, 0, 0, 0, 207, 0, 0, 0, 211,
0, 0, 0, 231, 0, 0, 0, 251, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255,
0, 0, 0, 255, 0, 0, 0, 254, 0, 0, 0, 245,
0, 0, 0, 231, 0, 0, 0, 226, 0, 0, 0, 226,
0, 0, 0, 226, 0, 0, 0, 226, 0, 0, 0, 226,
0, 0, 0, 226, 0, 0, 0, 226, 0, 0, 0, 226,
0, 0, 0, 226, 0, 0, 0, 226, 0, 0, 0, 226,
0, 0, 0, 226, 0, 0, 0, 226, 0, 0, 0, 226,
0, 0, 0, 226, 0, 0, 0, 226, 0, 0, 0, 230,
0, 0, 0, 243, 0, 0, 0, 254, 0, 0, 0, 255,
0, 0, 0, 255,
}};
#define NUM_CURSORS sizeof(Cursors) / sizeof(Cursors[0])
/*
* Mesa 3-D graphics library
* Version: 6.5
* Copyright (C) 1995-2006 Brian Paul
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/*
* Library for glut using mesa fbdev driver
*
* Written by Sean D'Epagnier (c) 2006
*/
#include <stdio.h>
#include <GL/gl.h>
#include <GL/glut.h>
#include "internal.h"
void glutReportErrors(void)
{
GLenum error;
while ((error = glGetError()) != GL_NO_ERROR)
sprintf(exiterror, "GL error: %s", gluErrorString(error));
}
static struct {
const char *name;
const GLUTproc address;
} glut_functions[] = {
{ "glutInit", (const GLUTproc) glutInit },
{ "glutInitDisplayMode", (const GLUTproc) glutInitDisplayMode },
{ "glutInitWindowPosition", (const GLUTproc) glutInitWindowPosition },
{ "glutInitWindowSize", (const GLUTproc) glutInitWindowSize },
{ "glutMainLoop", (const GLUTproc) glutMainLoop },
{ "glutCreateWindow", (const GLUTproc) glutCreateWindow },
{ "glutCreateSubWindow", (const GLUTproc) glutCreateSubWindow },
{ "glutDestroyWindow", (const GLUTproc) glutDestroyWindow },
{ "glutPostRedisplay", (const GLUTproc) glutPostRedisplay },
{ "glutSwapBuffers", (const GLUTproc) glutSwapBuffers },
{ "glutGetWindow", (const GLUTproc) glutGetWindow },
{ "glutSetWindow", (const GLUTproc) glutSetWindow },
{ "glutSetWindowTitle", (const GLUTproc) glutSetWindowTitle },
{ "glutSetIconTitle", (const GLUTproc) glutSetIconTitle },
{ "glutPositionWindow", (const GLUTproc) glutPositionWindow },
{ "glutReshapeWindow", (const GLUTproc) glutReshapeWindow },
{ "glutPopWindow", (const GLUTproc) glutPopWindow },
{ "glutPushWindow", (const GLUTproc) glutPushWindow },
{ "glutIconifyWindow", (const GLUTproc) glutIconifyWindow },
{ "glutShowWindow", (const GLUTproc) glutShowWindow },
{ "glutHideWindow", (const GLUTproc) glutHideWindow },
{ "glutFullScreen", (const GLUTproc) glutFullScreen },
{ "glutSetCursor", (const GLUTproc) glutSetCursor },
{ "glutWarpPointer", (const GLUTproc) glutWarpPointer },
{ "glutEstablishOverlay", (const GLUTproc) glutEstablishOverlay },
{ "glutRemoveOverlay", (const GLUTproc) glutRemoveOverlay },
{ "glutUseLayer", (const GLUTproc) glutUseLayer },
{ "glutPostOverlayRedisplay", (const GLUTproc) glutPostOverlayRedisplay },
{ "glutShowOverlay", (const GLUTproc) glutShowOverlay },
{ "glutHideOverlay", (const GLUTproc) glutHideOverlay },
{ "glutCreateMenu", (const GLUTproc) glutCreateMenu },
{ "glutDestroyMenu", (const GLUTproc) glutDestroyMenu },
{ "glutGetMenu", (const GLUTproc) glutGetMenu },
{ "glutSetMenu", (const GLUTproc) glutSetMenu },
{ "glutAddMenuEntry", (const GLUTproc) glutAddMenuEntry },
{ "glutAddSubMenu", (const GLUTproc) glutAddSubMenu },
{ "glutChangeToMenuEntry", (const GLUTproc) glutChangeToMenuEntry },
{ "glutChangeToSubMenu", (const GLUTproc) glutChangeToSubMenu },
{ "glutRemoveMenuItem", (const GLUTproc) glutRemoveMenuItem },
{ "glutAttachMenu", (const GLUTproc) glutAttachMenu },
{ "glutDetachMenu", (const GLUTproc) glutDetachMenu },
{ "glutDisplayFunc", (const GLUTproc) glutDisplayFunc },
{ "glutReshapeFunc", (const GLUTproc) glutReshapeFunc },
{ "glutKeyboardFunc", (const GLUTproc) glutKeyboardFunc },
{ "glutMouseFunc", (const GLUTproc) glutMouseFunc },
{ "glutMotionFunc", (const GLUTproc) glutMotionFunc },
{ "glutPassiveMotionFunc", (const GLUTproc) glutPassiveMotionFunc },
{ "glutEntryFunc", (const GLUTproc) glutEntryFunc },
{ "glutVisibilityFunc", (const GLUTproc) glutVisibilityFunc },
{ "glutIdleFunc", (const GLUTproc) glutIdleFunc },
{ "glutTimerFunc", (const GLUTproc) glutTimerFunc },
{ "glutMenuStateFunc", (const GLUTproc) glutMenuStateFunc },
{ "glutSpecialFunc", (const GLUTproc) glutSpecialFunc },
{ "glutSpaceballRotateFunc", (const GLUTproc) glutSpaceballRotateFunc },
{ "glutButtonBoxFunc", (const GLUTproc) glutButtonBoxFunc },
{ "glutDialsFunc", (const GLUTproc) glutDialsFunc },
{ "glutTabletMotionFunc", (const GLUTproc) glutTabletMotionFunc },
{ "glutTabletButtonFunc", (const GLUTproc) glutTabletButtonFunc },
{ "glutMenuStatusFunc", (const GLUTproc) glutMenuStatusFunc },
{ "glutOverlayDisplayFunc", (const GLUTproc) glutOverlayDisplayFunc },
{ "glutSetColor", (const GLUTproc) glutSetColor },
{ "glutGetColor", (const GLUTproc) glutGetColor },
{ "glutCopyColormap", (const GLUTproc) glutCopyColormap },
{ "glutGet", (const GLUTproc) glutGet },
{ "glutDeviceGet", (const GLUTproc) glutDeviceGet },
{ "glutExtensionSupported", (const GLUTproc) glutExtensionSupported },
{ "glutGetModifiers", (const GLUTproc) glutGetModifiers },
{ "glutLayerGet", (const GLUTproc) glutLayerGet },
{ "glutGetProcAddress", (const GLUTproc) glutGetProcAddress },
{ "glutBitmapCharacter", (const GLUTproc) glutBitmapCharacter },
{ "glutBitmapWidth", (const GLUTproc) glutBitmapWidth },
{ "glutStrokeCharacter", (const GLUTproc) glutStrokeCharacter },
{ "glutStrokeWidth", (const GLUTproc) glutStrokeWidth },
{ "glutBitmapLength", (const GLUTproc) glutBitmapLength },
{ "glutStrokeLength", (const GLUTproc) glutStrokeLength },
{ "glutWireSphere", (const GLUTproc) glutWireSphere },
{ "glutSolidSphere", (const GLUTproc) glutSolidSphere },
{ "glutWireCone", (const GLUTproc) glutWireCone },
{ "glutSolidCone", (const GLUTproc) glutSolidCone },
{ "glutWireCube", (const GLUTproc) glutWireCube },
{ "glutSolidCube", (const GLUTproc) glutSolidCube },
{ "glutWireTorus", (const GLUTproc) glutWireTorus },
{ "glutSolidTorus", (const GLUTproc) glutSolidTorus },
{ "glutWireDodecahedron", (const GLUTproc) glutWireDodecahedron },
{ "glutSolidDodecahedron", (const GLUTproc) glutSolidDodecahedron },
{ "glutWireTeapot", (const GLUTproc) glutWireTeapot },
{ "glutSolidTeapot", (const GLUTproc) glutSolidTeapot },
{ "glutWireOctahedron", (const GLUTproc) glutWireOctahedron },
{ "glutSolidOctahedron", (const GLUTproc) glutSolidOctahedron },
{ "glutWireTetrahedron", (const GLUTproc) glutWireTetrahedron },
{ "glutSolidTetrahedron", (const GLUTproc) glutSolidTetrahedron },
{ "glutWireIcosahedron", (const GLUTproc) glutWireIcosahedron },
{ "glutSolidIcosahedron", (const GLUTproc) glutSolidIcosahedron },
{ "glutReportErrors", (const GLUTproc) glutReportErrors },
{ NULL, NULL }
};
GLUTproc glutGetProcAddress(const char *procName)
{
/* Try GLUT functions first */
int i;
for (i = 0; glut_functions[i].name; i++) {
if (strcmp(glut_functions[i].name, procName) == 0)
return glut_functions[i].address;
}
/* Try core GL functions */
return (GLUTproc) glFBDevGetProcAddress(procName);
}
/*
* Mesa 3-D graphics library
* Version: 6.5
* Copyright (C) 1995-2006 Brian Paul
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/*
* Library for glut using mesa fbdev driver
*
* Written by Sean D'Epagnier (c) 2006
*
* To improve on this library, maybe support subwindows or overlays,
* I (sean at depagnier dot com) will do my best to help.
*/
#include <errno.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
#include <inttypes.h>
#include <sys/mman.h>
#include <sys/time.h>
#include <sys/kd.h>
#include <linux/fb.h>
#include <linux/vt.h>
#include <GL/gl.h>
#include <GL/glut.h>
#include "internal.h"
#define FBMODES "/etc/fb.modes"
struct fb_fix_screeninfo FixedInfo;
struct fb_var_screeninfo VarInfo;
static struct fb_var_screeninfo OrigVarInfo;
static int DesiredDepth = 0;
int FrameBufferFD = -1;
unsigned char *FrameBuffer;
unsigned char *BackBuffer = NULL;
int DisplayMode;
struct GlutTimer *GlutTimers = NULL;
struct timeval StartTime;
/* per window data */
GLFBDevContextPtr Context;
GLFBDevBufferPtr Buffer;
GLFBDevVisualPtr Visual;
int Redisplay;
int Visible;
int VisibleSwitch;
int Active;
static int Resized;
/* we have to poll to see if we are visible
on a framebuffer that is not active */
int VisiblePoll;
int Swapping, VTSwitch;
static int FramebufferIndex;
static int Initialized;
char exiterror[256];
/* test if the active console is attached to the same framebuffer */
void TestVisible(void) {
struct fb_con2fbmap confb;
struct vt_stat st;
int ret;
ioctl(ConsoleFD, VT_GETSTATE, &st);
confb.console = st.v_active;
ret = ioctl(FrameBufferFD, FBIOGET_CON2FBMAP, &confb);
if(ret == -1 || confb.framebuffer == FramebufferIndex) {
VisibleSwitch = 1;
Visible = 0;
VisiblePoll = 0;
}
}
static void Cleanup(void)
{
/* do not handle this signal when cleaning up */
signal(SIGWINCH, SIG_IGN);
if(GameMode)
glutLeaveGameMode();
if(ConsoleFD != -1)
RestoreVT();
/* close mouse */
CloseMouse();
if(Visual)
glutDestroyWindow(1);
/* restore original variable screen info */
if(FrameBufferFD != -1) {
OrigVarInfo.xoffset = 0;
OrigVarInfo.yoffset = 0;
if (ioctl(FrameBufferFD, FBIOPUT_VSCREENINFO, &OrigVarInfo))
fprintf(stderr, "ioctl(FBIOPUT_VSCREENINFO failed): %s\n",
strerror(errno));
if(FrameBuffer)
munmap(FrameBuffer, FixedInfo.smem_len);
close(FrameBufferFD);
}
/* free allocated back buffer */
if(DisplayMode & GLUT_DOUBLE)
free(BackBuffer);
/* free menu items */
FreeMenus();
if(exiterror[0])
fprintf(stderr, "[glfbdev glut] %s", exiterror);
}
static void CrashHandler(int sig)
{
sprintf(exiterror, "Caught signal %d, cleaning up\n", sig);
exit(0);
}
static void removeArgs(int *argcp, char **argv, int num)
{
int i;
for (i = 0; argv[i+num]; i++)
argv[i] = argv[i+num];
argv[i] = NULL;
*argcp -= num;
}
#define REQPARAM(PARAM) \
if (i >= *argcp - 1) { \
fprintf(stderr, PARAM" requires a parameter\n"); \
exit(0); \
}
void glutInit (int *argcp, char **argv)
{
int i, nomouse = 0, nokeyboard = 0, usestdin = 0;
int RequiredWidth = 0, RequiredHeight;
char *fbdev;
stack_t stack;
struct sigaction sa;
/* parse out args */
for (i = 1; i < *argcp;) {
if (!strcmp(argv[i], "-geometry")) {
REQPARAM("geometry");
if(sscanf(argv[i+1], "%dx%d", &RequiredWidth,
&RequiredHeight) != 2) {
fprintf(stderr,"Please specify geometry as widthxheight\n");
exit(0);
}
removeArgs(argcp, &argv[i], 2);
} else
if (!strcmp(argv[i], "-bpp")) {
REQPARAM("bpp");
if(sscanf(argv[i+1], "%d", &DesiredDepth) != 1) {
fprintf(stderr, "Please specify a parameter for bpp\n");
exit(0);
}
removeArgs(argcp, &argv[i], 2);
} else
if (!strcmp(argv[i], "-vt")) {
REQPARAM("vt");
if(sscanf(argv[i+1], "%d", &CurrentVT) != 1) {
fprintf(stderr, "Please specify a parameter for vt\n");
exit(0);
}
removeArgs(argcp, &argv[i], 2);
} else
if (!strcmp(argv[i], "-mousespeed")) {
REQPARAM("mousespeed");
if(sscanf(argv[i+1], "%lf", &MouseSpeed) != 1) {
fprintf(stderr, "Please specify a mouse speed, eg: 2.5\n");
exit(0);
}
removeArgs(argcp, &argv[i], 2);
} else
if (!strcmp(argv[i], "-nomouse")) {
nomouse = 1;
removeArgs(argcp, &argv[i], 1);
} else
if (!strcmp(argv[i], "-nokeyboard")) {
nokeyboard = 1;
removeArgs(argcp, &argv[i], 1);
} else
if (!strcmp(argv[i], "-stdin")) {
usestdin = 1;
removeArgs(argcp, &argv[i], 1);
} else
if (!strcmp(argv[i], "-gpmmouse")) {
#ifdef HAVE_GPM
GpmMouse = 1;
#else
fprintf(stderr, "gpm support not compiled\n");
exit(0);
#endif
removeArgs(argcp, &argv[i], 1);
} else
if (!strcmp(argv[i], "--")) {
removeArgs(argcp, &argv[i], 1);
break;
} else
i++;
}
gettimeofday(&StartTime, 0);
atexit(Cleanup);
/* set up SIGSEGV to use alternate stack */
stack.ss_flags = 0;
stack.ss_size = SIGSTKSZ;
if(!(stack.ss_sp = malloc(SIGSTKSZ)))
sprintf(exiterror, "Failed to allocate alternate stack for SIGSEGV!\n");
sigaltstack(&stack, NULL);
sa.sa_handler = CrashHandler;
sa.sa_flags = SA_ONSTACK;
sigemptyset(&sa.sa_mask);
sigaction(SIGSEGV, &sa, NULL);
signal(SIGINT, CrashHandler);
signal(SIGTERM, CrashHandler);
signal(SIGABRT, CrashHandler);
if(nomouse == 0)
InitializeMouse();
if(nokeyboard == 0)
InitializeVT(usestdin);
fbdev = getenv("FRAMEBUFFER");
if(fbdev) {
#ifdef MULTIHEAD
if(!sscanf(fbdev, "/dev/fb%d", &FramebufferIndex))
if(!sscanf(fbdev, "/dev/fb/%d", &FramebufferIndex))
sprintf(exiterror, "Could not determine Framebuffer index!\n");
#endif
} else {
static char fb[128];
struct fb_con2fbmap confb;
int fd = open("/dev/fb0", O_RDWR);
FramebufferIndex = 0;
confb.console = CurrentVT;
if(ioctl(fd, FBIOGET_CON2FBMAP, &confb) != -1)
FramebufferIndex = confb.framebuffer;
sprintf(fb, "/dev/fb%d", FramebufferIndex);
fbdev = fb;
close(fd);
}
/* open the framebuffer device */
FrameBufferFD = open(fbdev, O_RDWR);
if (FrameBufferFD < 0) {
sprintf(exiterror, "Error opening %s: %s\n", fbdev, strerror(errno));
exit(0);
}
/* get the fixed screen info */
if (ioctl(FrameBufferFD, FBIOGET_FSCREENINFO, &FixedInfo)) {
sprintf(exiterror, "error: ioctl(FBIOGET_FSCREENINFO) failed: %s\n",
strerror(errno));
exit(0);
}
/* get the variable screen info */
if (ioctl(FrameBufferFD, FBIOGET_VSCREENINFO, &OrigVarInfo)) {
sprintf(exiterror, "error: ioctl(FBIOGET_VSCREENINFO) failed: %s\n",
strerror(errno));
exit(0);
}
/* operate on a copy */
VarInfo = OrigVarInfo;
/* set the depth, resolution, etc */
if(RequiredWidth)
if(!ParseFBModes(RequiredWidth, RequiredWidth, RequiredHeight,
RequiredHeight, 0, MAX_VSYNC)) {
sprintf(exiterror, "No mode (%dx%d) found in "FBMODES"\n",
RequiredWidth, RequiredHeight);
exit(0);
}
Initialized = 1;
}
void glutInitDisplayMode (unsigned int mode)
{
DisplayMode = mode;
}
static const char *GetStrVal(const char *p, int *set, int min, int max)
{
char *endptr;
int comp = *p, val;
if(p[1] == '=')
p++;
if(*p == '\0')
return p;
val = strtol(p+1, &endptr, 10);
if(endptr == p+1)
return p;
switch(comp) {
case '!':
if(val == min)
val = max;
else
val = min;
break;
case '<':
val = min;
break;
case '>':
val = max;
break;
}
if(val < min || val > max) {
sprintf(exiterror, "display string value out of range\n");
exit(0);
}
*set = val;
return endptr;
}
static void SetAttrib(int val, int attr)
{
if(val)
DisplayMode |= attr;
else
DisplayMode &= ~attr;
}
void glutInitDisplayString(const char *string)
{
const char *p = string;
int val;
while(*p) {
if(*p == ' ')
p++;
else
if(memcmp(p, "acca", 4) == 0) {
p = GetStrVal(p+4, &AccumSize, 1, 32);
SetAttrib(AccumSize, GLUT_ACCUM);
} else
if(memcmp(p, "acc", 3) == 0) {
p = GetStrVal(p+3, &AccumSize, 1, 32);
SetAttrib(AccumSize, GLUT_ACCUM);
} else
if(memcmp(p, "depth", 5) == 0) {
p = GetStrVal(p+5, &DepthSize, 12, 32);
SetAttrib(DepthSize, GLUT_DEPTH);
} else
if(memcmp(p, "double", 6) == 0) {
val = 1;
p = GetStrVal(p+6, &val, 0, 1);
SetAttrib(val, GLUT_DOUBLE);
} else
if(memcmp(p, "index", 5) == 0) {
val = 1;
p = GetStrVal(p+5, &val, 0, 1);
SetAttrib(val, GLUT_INDEX);
} else
if(memcmp(p, "stencil", 7) == 0) {
p = GetStrVal(p+7, &StencilSize, 0, 1);
SetAttrib(StencilSize, GLUT_STENCIL);
} else
if(memcmp(p, "samples", 7) == 0) {
NumSamples = 1;
p = GetStrVal(p+7, &NumSamples, 0, 16);
SetAttrib(NumSamples, GLUT_MULTISAMPLE);
} else
if(p = strchr(p, ' '))
p++;
else
break;
}
}
void glutInitWindowPosition (int x, int y)
{
}
void glutInitWindowSize (int width, int height)
{
}
static void ProcessTimers(void)
{
while(GlutTimers && GlutTimers->time <= glutGet(GLUT_ELAPSED_TIME)) {
struct GlutTimer *timer = GlutTimers;
GlutTimers = timer->next;
timer->func(timer->value);
free(timer);
}
}
void glutMainLoop(void)
{
int idleiters;
if(ReshapeFunc)
ReshapeFunc(VarInfo.xres, VarInfo.yres);
if(!DisplayFunc) {
sprintf(exiterror, "Fatal Error: No Display Function registered\n");
exit(0);
}
for(;;) {
ProcessTimers();
if(Active)
ReceiveInput();
else
if(VisiblePoll)
TestVisible();
if(IdleFunc)
IdleFunc();
if(VisibleSwitch) {
VisibleSwitch = 0;
if(VisibilityFunc)
VisibilityFunc(Visible ? GLUT_VISIBLE : GLUT_NOT_VISIBLE);
}
if(Resized) {
SetVideoMode();
CreateBuffer();
if(!glFBDevMakeCurrent( Context, Buffer, Buffer )) {
sprintf(exiterror, "Failure to Make Current\n");
exit(0);
}
InitializeMenus();
if(ReshapeFunc)
ReshapeFunc(VarInfo.xres, VarInfo.yres);
Redisplay = 1;
Resized = 0;
}
if(Visible && Redisplay) {
Redisplay = 0;
EraseCursor();
DisplayFunc();
if(!(DisplayMode & GLUT_DOUBLE)) {
if(ActiveMenu)
DrawMenus();
DrawCursor();
}
idleiters = 0;
} else {
/* we sleep if not receiving redisplays, and
the main loop is running faster than 2khz */
static int lasttime;
int time = glutGet(GLUT_ELAPSED_TIME);
if(time > lasttime) {
if(idleiters >= 2)
usleep(100);
idleiters = 0;
lasttime = time;
}
idleiters++;
}
}
}
int ParseFBModes(int minw, int maxw, int minh, int maxh, int minf, int maxf)
{
char buf[1024];
struct fb_var_screeninfo vi = VarInfo;
FILE *fbmodes = fopen(FBMODES, "r");
if(!fbmodes) {
sprintf(exiterror, "Warning: could not open "FBMODES"\n");
return 0;
}
while(fgets(buf, sizeof buf, fbmodes)) {
char *c;
int v, bpp, freq;
if(!(c = strstr(buf, "geometry")))
continue;
v = sscanf(c, "geometry %d %d %d %d %d", &vi.xres, &vi.yres,
&vi.xres_virtual, &vi.yres_virtual, &bpp);
if(v != 5)
continue;
if(maxw < minw) {
if(maxw < vi.xres && minw > vi.xres)
continue;
} else
if(maxw < vi.xres || minw > vi.xres)
continue;
if(maxh < minh) {
if(maxh < vi.yres && minh > vi.yres)
continue;
} else
if(maxh < vi.yres || minh > vi.yres)
continue;
fgets(buf, sizeof buf, fbmodes);
if(!(c = strstr(buf, "timings")))
continue;
v = sscanf(c, "timings %d %d %d %d %d %d %d", &vi.pixclock,
&vi.left_margin, &vi.right_margin, &vi.upper_margin,
&vi.lower_margin, &vi.hsync_len, &vi.vsync_len);
if(v != 7)
continue;
freq = 1E12/vi.pixclock
/(vi.left_margin + vi.xres + vi.right_margin + vi.hsync_len)
/(vi.upper_margin + vi.yres + vi.lower_margin + vi.vsync_len);
if(maxf < minf) {
if(maxf < freq && minf > freq)
continue;
} else
if(maxf < freq || minf > freq)
continue;
VarInfo = vi;
fclose(fbmodes);
return 1;
}
fclose(fbmodes);
return 0;
}
void SetVideoMode(void)
{
/* set new variable screen info */
if (ioctl(FrameBufferFD, FBIOPUT_VSCREENINFO, &VarInfo)) {
sprintf(exiterror, "FBIOPUT_VSCREENINFO failed: %s\n", strerror(errno));
strcat(exiterror, "Perhaps the device does not support the selected mode\n");
exit(0);
}
/* reload the screen info to update rgb bits */
if (ioctl(FrameBufferFD, FBIOGET_VSCREENINFO, &VarInfo)) {
sprintf(exiterror, "error: ioctl(FBIOGET_VSCREENINFO) failed: %s\n",
strerror(errno));
exit(0);
}
/* reload the fixed info to update color mode */
if (ioctl(FrameBufferFD, FBIOGET_FSCREENINFO, &FixedInfo)) {
sprintf(exiterror, "error: ioctl(FBIOGET_FSCREENINFO) failed: %s\n",
strerror(errno));
exit(0);
}
if (DesiredDepth && DesiredDepth != VarInfo.bits_per_pixel) {
sprintf(exiterror, "error: Could not set set %d bpp\n", DesiredDepth);
exit(0);
}
if(DisplayMode & GLUT_INDEX && FixedInfo.visual == FB_VISUAL_DIRECTCOLOR) {
sprintf(exiterror, "error: Could not set 8 bit color mode\n");
exit(0);
}
/* initialize colormap */
LoadColorMap();
}
void CreateBuffer(void)
{
int size = VarInfo.xres_virtual * VarInfo.yres_virtual
* VarInfo.bits_per_pixel / 8;
/* mmap the framebuffer into our address space */
if(FrameBuffer)
munmap(FrameBuffer, FixedInfo.smem_len);
FrameBuffer = mmap(0, FixedInfo.smem_len, PROT_READ | PROT_WRITE,
MAP_SHARED, FrameBufferFD, 0);
if (FrameBuffer == MAP_FAILED) {
sprintf(exiterror, "error: unable to mmap framebuffer: %s\n",
strerror(errno));
exit(0);
}
if(DisplayMode & GLUT_DOUBLE) {
free(BackBuffer);
if(!(BackBuffer = malloc(size))) {
sprintf(exiterror, "Failed to allocate double buffer\n");
exit(0);
}
} else
BackBuffer = FrameBuffer;
if(Buffer)
glFBDevDestroyBuffer(Buffer);
if(!(Buffer = glFBDevCreateBuffer( &FixedInfo, &VarInfo, Visual,
FrameBuffer, BackBuffer, size))) {
sprintf(exiterror, "Failure to create Buffer\n");
exit(0);
}
}
void CreateVisual(void)
{
int i, mask = DisplayMode;
int attribs[20];
for(i=0; i<sizeof(attribs)/sizeof(*attribs) && mask; i++) {
if(mask & GLUT_DOUBLE) {
attribs[i] = GLFBDEV_DOUBLE_BUFFER;
mask &= ~GLUT_DOUBLE;
continue;
}
if(mask & GLUT_INDEX) {
attribs[i] = GLFBDEV_COLOR_INDEX;
mask &= ~GLUT_INDEX;
continue;
}
if(mask & GLUT_DEPTH) {
attribs[i] = GLFBDEV_DEPTH_SIZE;
attribs[++i] = DepthSize;
mask &= ~GLUT_DEPTH;
continue;
}
if(mask & GLUT_STENCIL) {
attribs[i] = GLFBDEV_STENCIL_SIZE;
attribs[++i] = StencilSize;
mask &= ~GLUT_STENCIL;
continue;
}
if(mask & GLUT_ACCUM) {
attribs[i] = GLFBDEV_ACCUM_SIZE;
attribs[++i] = AccumSize;
mask &= ~GLUT_ACCUM;
continue;
}
if(mask & GLUT_ALPHA)
if(!(DisplayMode & GLUT_INDEX)) {
mask &= ~GLUT_ALPHA;
i--;
continue;
}
if(mask & GLUT_MULTISAMPLE) {
attribs[i] = GLFBDEV_MULTISAMPLE;
attribs[++i] = NumSamples;
mask &= ~GLUT_MULTISAMPLE;
continue;
}
sprintf(exiterror, "Invalid mode from glutInitDisplayMode\n");
exit(0);
}
attribs[i] = GLFBDEV_NONE;
if(!(Visual = glFBDevCreateVisual( &FixedInfo, &VarInfo, attribs ))) {
sprintf(exiterror, "Failure to create Visual\n");
exit(0);
}
}
static void SignalWinch(int arg)
{
/* we can't change bitdepth without destroying the visual */
int bits_per_pixel = VarInfo.bits_per_pixel;
struct fb_bitfield red = VarInfo.red, green = VarInfo.green,
blue = VarInfo.blue, transp = VarInfo.transp;
/* get the variable screen info */
if (ioctl(FrameBufferFD, FBIOGET_VSCREENINFO, &VarInfo)) {
sprintf(exiterror, "error: ioctl(FBIOGET_VSCREENINFO) failed: %s\n",
strerror(errno));
exit(0);
}
/* restore bitdepth and color masks only */
VarInfo.bits_per_pixel = bits_per_pixel;
VarInfo.red = red;
VarInfo.green = green;
VarInfo.blue = blue;
VarInfo.transp = transp;
Resized = 1;
}
int glutCreateWindow (const char *title)
{
if(Initialized == 0) {
int argc = 0;
char *argv[] = {NULL};
glutInit(&argc, argv);
}
if(Context)
return 0;
if(DisplayMode & GLUT_INDEX)
VarInfo.bits_per_pixel = 8;
else
if(VarInfo.bits_per_pixel == 8)
VarInfo.bits_per_pixel = 32;
if (DesiredDepth)
VarInfo.bits_per_pixel = DesiredDepth;
VarInfo.xoffset = 0;
VarInfo.yoffset = 0;
VarInfo.nonstd = 0;
VarInfo.vmode &= ~FB_VMODE_YWRAP; /* turn off scrolling */
SetVideoMode();
CreateVisual();
CreateBuffer();
if(!(Context = glFBDevCreateContext(Visual, NULL))) {
sprintf(exiterror, "Failure to create Context\n");
exit(0);
}
if(!glFBDevMakeCurrent( Context, Buffer, Buffer )) {
sprintf(exiterror, "Failure to Make Current\n");
exit(0);
}
InitializeCursor();
InitializeMenus();
glutSetWindowTitle(title);
signal(SIGWINCH, SignalWinch);
Visible = 1;
VisibleSwitch = 1;
Redisplay = 1;
return 1;
}
int glutCreateSubWindow(int win, int x, int y, int width, int height)
{
return 0;
}
void glutSetWindow(int win)
{
}
int glutGetWindow(void)
{
return 1;
}
void glutDestroyWindow(int win)
{
glFBDevMakeCurrent( NULL, NULL, NULL);
glFBDevDestroyContext(Context);
glFBDevDestroyBuffer(Buffer);
glFBDevDestroyVisual(Visual);
Visual = NULL;
}
void glutPostRedisplay(void)
{
Redisplay = 1;
}
void glutPostWindowRedisplay(int win)
{
Redisplay = 1;
}
void glutSwapBuffers(void)
{
glFlush();
if(!(DisplayMode & GLUT_DOUBLE))
return;
if(ActiveMenu)
DrawMenus();
DrawCursor();
if(Visible) {
Swapping = 1;
glFBDevSwapBuffers(Buffer);
Swapping = 0;
}
/* if there was a vt switch while swapping, switch now */
if(VTSwitch) {
if(ioctl(ConsoleFD, VT_ACTIVATE, VTSwitch) < 0)
sprintf(exiterror, "Error switching console\n");
VTSwitch = 0;
}
}
void glutPositionWindow(int x, int y)
{
}
void glutReshapeWindow(int width, int height)
{
if(GameMode)
return;
if(!ParseFBModes(width, width, height, height, 0, MAX_VSYNC))
return;
signal(SIGWINCH, SIG_IGN);
SetVideoMode();
signal(SIGWINCH, SignalWinch);
Resized = 1;
}
void glutFullScreen(void)
{
}
void glutPopWindow(void)
{
}
void glutPushWindow(void)
{
}
void glutShowWindow(void)
{
Visible = 1;
}
void glutHideWindow(void)
{
Visible = 0;
}
static void UnIconifyWindow(int sig)
{
if(ConsoleFD == 0)
InitializeVT(1);
else
if(ConsoleFD > 0)
InitializeVT(0);
if (ioctl(FrameBufferFD, FBIOPUT_VSCREENINFO, &VarInfo)) {
sprintf(exiterror, "ioctl(FBIOPUT_VSCREENINFO failed): %s\n",
strerror(errno));
exit(0);
}
RestoreColorMap();
Redisplay = 1;
VisibleSwitch = 1;
Visible = 1;
}
void glutIconifyWindow(void)
{
RestoreVT();
signal(SIGCONT, UnIconifyWindow);
if (ioctl(FrameBufferFD, FBIOPUT_VSCREENINFO, &OrigVarInfo))
fprintf(stderr, "ioctl(FBIOPUT_VSCREENINFO failed): %s\n",
strerror(errno));
raise(SIGSTOP);
}
void glutSetWindowTitle(const char *name)
{
/* escape code to set title in screen */
if(getenv("TERM") && memcmp(getenv("TERM"), "screen", 6) == 0)
printf("\033k%s\033\\", name);
}
void glutSetIconTitle(const char *name)
{
}
/*
* Mesa 3-D graphics library
* Version: 6.5
* Copyright (C) 1995-2006 Brian Paul
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/*
* Library for glut using mesa fbdev driver
*
* Written by Sean D'Epagnier (c) 2006
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <linux/fb.h>
#include <GL/glut.h>
#include "internal.h"
int GameMode;
static int ModePossible, DispChanged;
static struct fb_var_screeninfo NormVarInfo, GameVarInfo;
static GLFBDevContextPtr GameContext;
static GLFBDevVisualPtr NormVisual;
/* storage for non-gamemode callbacks */
void (*KeyFuncs[2])(unsigned char key, int x, int y);
static void (*NormFuncs[8])();
static const char*SetOpers(const char *p, unsigned int *min, unsigned int *max)
{
char *endptr;
int comp = *p, val, neq = 0;
if(p[1] == '=') {
neq = 0;
p++;
}
val = strtol(p+1, &endptr, 10);
if(endptr == p+1)
return p;
switch(comp) {
case '=':
*min = *max = val;
break;
case '!':
*min = val + 1;
*max = val - 1;
break;
case '<':
*max = val - neq;
break;
case '>':
*min = val + neq;
break;
}
return endptr;
}
void glutGameModeString(const char *string)
{
const char *p = string;
unsigned int minb = 15, maxb = 32;
unsigned int minw = 0, maxw = -1;
unsigned int minh, maxh = -1;
unsigned int minf = 0, maxf = MAX_VSYNC;
char *endptr;
int count = -1, val;
ModePossible = 0;
if(DisplayMode & GLUT_INDEX)
minb = maxb = 8;
again:
count++;
if((val = strtol(p, &endptr, 10)) && *endptr=='x') {
maxw = minw = val;
p = endptr + 1;
maxh = minh = strtol(p, &endptr, 10);
p = endptr;
goto again;
}
if(*p == ':') {
minb = strtol(p+1, &endptr, 10);
p = endptr;
if(DisplayMode & GLUT_INDEX) {
if(minb != 8)
return;
} else
if(minb != 15 && minb != 16 && minb != 24 && minb != 32)
return;
maxb = minb;
goto again;
}
if(*p == '@') {
minf = strtol(p+1, &endptr, 10) - 5;
maxf = minf + 10;
p = endptr;
goto again;
}
if(count == 0)
while(*p) {
if(*p == ' ')
p++;
else
if(memcmp(p, "bpp", 3) == 0)
p = SetOpers(p+3, &minb, &maxb);
else
if(memcmp(p, "height", 6) == 0)
p = SetOpers(p+6, &minh, &maxh);
else
if(memcmp(p, "hertz", 5) == 0)
p = SetOpers(p+5, &minf, &maxf);
else
if(memcmp(p, "width", 5) == 0)
p = SetOpers(p+5, &minw, &maxw);
else
if(p = strchr(p, ' '))
p++;
else
break;
}
NormVarInfo = VarInfo;
if(!ParseFBModes(minw, maxw, minh, maxh, minf, maxf))
return;
GameVarInfo = VarInfo;
VarInfo = NormVarInfo;
/* determine optimal bitdepth, make sure we have enough video memory */
if(VarInfo.bits_per_pixel && VarInfo.bits_per_pixel <= maxb)
GameVarInfo.bits_per_pixel = VarInfo.bits_per_pixel;
else
GameVarInfo.bits_per_pixel = maxb;
while(FixedInfo.smem_len < GameVarInfo.xres * GameVarInfo.yres
* GameVarInfo.bits_per_pixel / 8) {
if(GameVarInfo.bits_per_pixel < minb)
return;
GameVarInfo.bits_per_pixel = ((GameVarInfo.bits_per_pixel+1)/8)*8-8;
}
ModePossible = 1;
}
int glutEnterGameMode(void)
{
if(ActiveMenu)
return 0;
if(!ModePossible)
return 0;
if(GameMode) {
if(!memcmp(&GameVarInfo, &VarInfo, sizeof VarInfo)) {
DispChanged = 0;
return 1;
}
glutLeaveGameMode();
}
if (ioctl(FrameBufferFD, FBIOPUT_VSCREENINFO, &GameVarInfo))
return 0;
NormVarInfo = VarInfo;
VarInfo = GameVarInfo;
NormVisual = Visual;
SetVideoMode();
CreateVisual();
CreateBuffer();
if(!(GameContext = glFBDevCreateContext(Visual, NULL))) {
sprintf(exiterror, "Failure to create Context\n");
exit(0);
}
if(!glFBDevMakeCurrent( GameContext, Buffer, Buffer )) {
sprintf(exiterror, "Failure to Make Game Current\n");
exit(0);
}
InitializeCursor();
KeyFuncs[0] = KeyboardFunc;
KeyFuncs[1] = KeyboardUpFunc;
NormFuncs[0] = DisplayFunc;
NormFuncs[1] = ReshapeFunc;
NormFuncs[2] = MouseFunc;
NormFuncs[3] = MotionFunc;
NormFuncs[4] = PassiveMotionFunc;
NormFuncs[5] = VisibilityFunc;
NormFuncs[6] = SpecialFunc;
NormFuncs[7] = SpecialUpFunc;
DisplayFunc = NULL;
ReshapeFunc = NULL;
KeyboardFunc = NULL;
KeyboardUpFunc = NULL;
MouseFunc = NULL;
MotionFunc = NULL;
PassiveMotionFunc = NULL;
VisibilityFunc = NULL;
SpecialFunc = SpecialUpFunc = NULL;
DispChanged = 1;
GameMode = 1;
Visible = 1;
VisibleSwitch = 1;
Redisplay = 1;
return 1;
}
void glutLeaveGameMode(void)
{
if(!GameMode)
return;
glFBDevDestroyContext(GameContext);
glFBDevDestroyVisual(Visual);
VarInfo = NormVarInfo;
Visual = NormVisual;
if(Visual) {
SetVideoMode();
CreateBuffer();
if(!glFBDevMakeCurrent( Context, Buffer, Buffer )) {
sprintf(exiterror, "Failure to Make Current\n");
exit(0);
}
Redisplay = 1;
}
KeyboardFunc = KeyFuncs[0];
KeyboardUpFunc = KeyFuncs[1];
DisplayFunc = NormFuncs[0];
ReshapeFunc = NormFuncs[1];
MouseFunc = NormFuncs[2];
MotionFunc = NormFuncs[3];
PassiveMotionFunc = NormFuncs[4];
VisibilityFunc = NormFuncs[5];
SpecialFunc = NormFuncs[6];
SpecialUpFunc = NormFuncs[7];
GameMode = 0;
}
int glutGameModeGet(GLenum mode) {
switch(mode) {
case GLUT_GAME_MODE_ACTIVE:
return GameMode;
case GLUT_GAME_MODE_POSSIBLE:
return ModePossible;
case GLUT_GAME_MODE_DISPLAY_CHANGED:
return DispChanged;
}
if(!ModePossible)
return -1;
switch(mode) {
case GLUT_GAME_MODE_WIDTH:
return GameVarInfo.xres;
case GLUT_GAME_MODE_HEIGHT:
return GameVarInfo.yres;
case GLUT_GAME_MODE_PIXEL_DEPTH:
return GameVarInfo.bits_per_pixel;
case GLUT_GAME_MODE_REFRESH_RATE:
return 1E12/GameVarInfo.pixclock
/ (GameVarInfo.left_margin + GameVarInfo.xres
+ GameVarInfo.right_margin + GameVarInfo.hsync_len)
/ (GameVarInfo.upper_margin + GameVarInfo.yres
+ GameVarInfo.lower_margin + GameVarInfo.vsync_len);
}
}
/*
* Mesa 3-D graphics library
* Version: 6.5
* Copyright (C) 1995-2006 Brian Paul
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/*
* Library for glut using mesa fbdev driver
*
* Written by Sean D'Epagnier (c) 2006
*/
#include <errno.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
#include <termios.h>
#include <inttypes.h>
#include <sys/ioctl.h>
#include <sys/poll.h>
#include <sys/kd.h>
#include <linux/keyboard.h>
#include <linux/fb.h>
#include <linux/vt.h>
#include <GL/glut.h>
#include "internal.h"
#define MOUSEDEV "/dev/gpmdata"
#ifdef HAVE_GPM
#include <gpm.h>
int GpmMouse;
#endif
int CurrentVT = 0;
int ConsoleFD = -1;
int KeyboardModifiers;
int MouseX, MouseY;
int NumMouseButtons;
double MouseSpeed = 0;
int KeyRepeatMode = GLUT_KEY_REPEAT_DEFAULT;
int MouseVisible = 0;
int LastMouseTime = 0;
static int OldKDMode = -1;
static int OldMode = KD_TEXT;
static struct vt_mode OldVTMode;
static struct termios OldTermios;
static int KeyboardLedState;
static int MouseFD;
static int kbdpipe[2];
static int LastStdinKeyTime, LastStdinSpecialKey = -1, LastStdinCode = -1;
#define MODIFIER(mod) \
KeyboardModifiers = release ? KeyboardModifiers & ~mod \
: KeyboardModifiers | mod;
/* signal handler attached to SIGIO on keyboard input, vt
switching and modifiers is handled in the signal handler
other keypresses read from a pipe that leaves the handler
if a program locks up the glut loop, you can still switch
vts and kill it without Alt-SysRq hack */
static void KeyboardHandler(int sig)
{
unsigned char code;
while(read(ConsoleFD, &code, 1) == 1) {
int release, labelval;
struct kbentry entry;
static int lalt; /* only left alt does vt switch */
release = code & 0x80;
entry.kb_index = code & 0x7F;
entry.kb_table = 0;
if (ioctl(ConsoleFD, KDGKBENT, &entry) < 0) {
sprintf(exiterror, "ioctl(KDGKBENT) failed.\n");
exit(0);
}
labelval = entry.kb_value;
switch(labelval) {
case K_SHIFT:
case K_SHIFTL:
MODIFIER(GLUT_ACTIVE_SHIFT);
continue;
case K_CTRL:
MODIFIER(GLUT_ACTIVE_CTRL);
continue;
case K_ALT:
lalt = !release;
case K_ALTGR:
MODIFIER(GLUT_ACTIVE_ALT);
continue;
}
if(lalt && !release) {
/* VT switch, we must do it */
int vt = -1;
struct vt_stat st;
if(labelval >= K_F1 && labelval <= K_F12)
vt = labelval - K_F1 + 1;
if(labelval == K_LEFT)
if(ioctl(ConsoleFD, VT_GETSTATE, &st) >= 0)
vt = st.v_active - 1;
if(labelval == K_RIGHT)
if(ioctl(ConsoleFD, VT_GETSTATE, &st) >= 0)
vt = st.v_active + 1;
if(vt != -1) {
if(Swapping)
VTSwitch = vt;
else
if(ioctl(ConsoleFD, VT_ACTIVATE, vt) < 0)
sprintf(exiterror, "Error switching console\n");
continue;
}
}
write(kbdpipe[1], &code, 1);
}
}
static void LedModifier(int led, int release)
{
static int releaseflag = K_CAPS | K_NUM | K_HOLD;
if(release)
releaseflag |= led;
else
if(releaseflag & led) {
KeyboardLedState ^= led;
releaseflag &= ~led;
}
ioctl(ConsoleFD, KDSKBLED, KeyboardLedState);
ioctl(ConsoleFD, KDSETLED, 0x80);
}
static void HandleKeyPress(unsigned char key, int up)
{
if(up) {
if(KeyboardUpFunc)
KeyboardUpFunc(key, MouseX, MouseY);
} else
if(KeyboardFunc)
KeyboardFunc(key, MouseX, MouseY);
else
if(key == 27)
exit(0); /* no handler, to provide a way to exit */
}
static void HandleSpecialPress(int key, int up)
{
if(up) {
if(SpecialUpFunc)
SpecialUpFunc(key, MouseX, MouseY);
} else
if(SpecialFunc)
SpecialFunc(key, MouseX, MouseY);
}
static void ReleaseStdinKey(void)
{
if(LastStdinSpecialKey != -1) {
HandleSpecialPress(LastStdinSpecialKey, 1);
LastStdinSpecialKey = -1;
}
if(LastStdinCode != -1) {
HandleKeyPress(LastStdinCode, 1);
LastStdinCode = -1;
}
}
#define READKEY read(kbdpipe[0], &code, 1)
static int ReadKey(void)
{
int release, labelval, labelvalnoshift;
unsigned char code;
int specialkey = 0;
struct kbentry entry;
if(READKEY != 1) {
/* if we are reading from stdin, we detect key releases when the key
does not repeat after a given timeout */
if(ConsoleFD == 0 && LastStdinKeyTime + 100 < glutGet(GLUT_ELAPSED_TIME))
ReleaseStdinKey();
return 0;
}
if(code == 0)
return 0;
/* stdin input escape code based */
if(ConsoleFD == 0) {
KeyboardModifiers = 0;
altset:
if(code == 27 && READKEY == 1) {
if(code != 91) {
KeyboardModifiers |= GLUT_ACTIVE_ALT;
goto altset;
}
READKEY;
switch(code) {
case 68:
specialkey = GLUT_KEY_LEFT; break;
case 65:
specialkey = GLUT_KEY_UP; break;
case 67:
specialkey = GLUT_KEY_RIGHT; break;
case 66:
specialkey = GLUT_KEY_DOWN; break;
case 52:
specialkey = GLUT_KEY_END; READKEY; break;
case 53:
specialkey = GLUT_KEY_PAGE_UP; READKEY; break;
case 54:
specialkey = GLUT_KEY_PAGE_DOWN; READKEY; break;
case 49:
READKEY;
if(code == 126)
specialkey = GLUT_KEY_HOME;
else {
specialkey = GLUT_KEY_F1 + code - 50;
READKEY;
}
break;
case 50:
READKEY;
if(code == 126)
specialkey = GLUT_KEY_INSERT;
else {
if(code > '1')
code--;
if(code > '6')
code--;
if(code > '3') {
KeyboardModifiers |= GLUT_ACTIVE_SHIFT;
code -= 12;
}
specialkey = GLUT_KEY_F1 + code - 40;
READKEY;
}
break;
case 51:
READKEY;
if(code == 126) {
code = '\b';
goto stdkey;
}
KeyboardModifiers |= GLUT_ACTIVE_SHIFT;
specialkey = GLUT_KEY_F1 + code - 45;
READKEY;
break;
case 91:
READKEY;
specialkey = GLUT_KEY_F1 + code - 65;
break;
default:
return 0;
}
}
if(specialkey) {
LastStdinKeyTime = glutGet(GLUT_ELAPSED_TIME);
if(LastStdinSpecialKey != specialkey) {
ReleaseStdinKey();
HandleSpecialPress(specialkey, 0);
LastStdinSpecialKey = specialkey;
LastStdinKeyTime += 200; /* initial repeat */
} else
if(KeyRepeatMode != GLUT_KEY_REPEAT_OFF)
HandleSpecialPress(specialkey, 0);
} else {
if(code >= 1 && code <= 26 && code != '\r') {
KeyboardModifiers |= GLUT_ACTIVE_CTRL;
code += 'a' - 1;
}
if((code >= 43 && code <= 34) || (code == 60)
|| (code >= 62 && code <= 90) || (code == 94)
|| (code == 95) || (code >= 123 && code <= 126))
KeyboardModifiers |= GLUT_ACTIVE_SHIFT;
stdkey:
LastStdinKeyTime = glutGet(GLUT_ELAPSED_TIME);
if(LastStdinCode != code) {
ReleaseStdinKey();
HandleKeyPress(code, 0);
LastStdinCode = code;
LastStdinKeyTime += 200; /* initial repeat */
} else
if(KeyRepeatMode != GLUT_KEY_REPEAT_OFF)
HandleSpecialPress(code, 0);
}
return 1;
}
/* linux kbd reading */
release = code & 0x80;
code &= 0x7F;
if(KeyRepeatMode == GLUT_KEY_REPEAT_OFF) {
static char keystates[128];
if(release)
keystates[code] = 0;
else {
if(keystates[code])
return 1;
keystates[code] = 1;
}
}
entry.kb_index = code;
entry.kb_table = 0;
if (ioctl(ConsoleFD, KDGKBENT, &entry) < 0) {
sprintf(exiterror, "ioctl(KDGKBENT) failed.\n");
exit(0);
}
labelvalnoshift = entry.kb_value;
if(KeyboardModifiers & GLUT_ACTIVE_SHIFT)
entry.kb_table |= K_SHIFTTAB;
if (ioctl(ConsoleFD, KDGKBENT, &entry) < 0) {
sprintf(exiterror, "ioctl(KDGKBENT) failed.\n");
exit(0);
}
labelval = entry.kb_value;
switch(labelvalnoshift) {
case K_CAPS:
LedModifier(LED_CAP, release);
return 0;
case K_NUM:
LedModifier(LED_NUM, release);
return 0;
case K_HOLD: /* scroll lock suspends glut */
LedModifier(LED_SCR, release);
while(KeyboardLedState & LED_SCR) {
usleep(10000);
ReadKey();
}
return 0;
}
/* we could queue keypresses here */
if(KeyboardLedState & LED_SCR)
return 0;
if(labelvalnoshift >= K_F1 && labelvalnoshift <= K_F12)
specialkey = GLUT_KEY_F1 + labelvalnoshift - K_F1;
else
switch(labelvalnoshift) {
case K_LEFT:
specialkey = GLUT_KEY_LEFT; break;
case K_UP:
specialkey = GLUT_KEY_UP; break;
case K_RIGHT:
specialkey = GLUT_KEY_RIGHT; break;
case K_DOWN:
specialkey = GLUT_KEY_DOWN; break;
case K_PGUP:
specialkey = GLUT_KEY_PAGE_UP; break;
case K_PGDN:
specialkey = GLUT_KEY_PAGE_DOWN; break;
case K_FIND:
specialkey = GLUT_KEY_HOME; break;
case K_SELECT:
specialkey = GLUT_KEY_END; break;
case K_INSERT:
specialkey = GLUT_KEY_INSERT; break;
case K_REMOVE:
labelval = '\b';
break;
case K_ENTER:
labelval = '\r'; break;
}
/* likely a keypad input, but depends on keyboard mapping, ignore */
if(labelval == 512)
return 1;
/* dispatch callback */
if(specialkey)
HandleSpecialPress(specialkey, release);
else {
char c = labelval;
if(KeyboardLedState & LED_CAP) {
if(c >= 'A' && c <= 'Z')
c += 'a' - 'A';
else
if(c >= 'a' && c <= 'z')
c += 'A' - 'a';
}
HandleKeyPress(c, release);
}
return 1;
}
void glutIgnoreKeyRepeat(int ignore)
{
KeyRepeatMode = ignore ? GLUT_KEY_REPEAT_OFF : GLUT_KEY_REPEAT_ON;
}
void glutSetKeyRepeat(int repeatMode)
{
KeyRepeatMode = repeatMode;
}
void glutForceJoystickFunc(void)
{
}
static void HandleMousePress(int button, int pressed)
{
if(TryMenu(button, pressed))
return;
if(MouseFunc)
MouseFunc(button, pressed ? GLUT_DOWN : GLUT_UP, MouseX, MouseY);
}
static int ReadMouse(void)
{
int l, r, m;
static int ll, lm, lr;
signed char dx, dy;
#ifdef HAVE_GPM
if(GpmMouse) {
Gpm_Event event;
struct pollfd pfd;
pfd.fd = gpm_fd;
pfd.events = POLLIN;
if(poll(&pfd, 1, 1) != 1)
return 0;
if(Gpm_GetEvent(&event) != 1)
return 0;
l = event.buttons & GPM_B_LEFT;
m = event.buttons & GPM_B_MIDDLE;
r = event.buttons & GPM_B_RIGHT;
/* gpm is weird in that it gives a button number when the button
is released, with type set to GPM_UP, this is only a problem
if it is the last button released */
if(event.type & GPM_UP)
if(event.buttons == GPM_B_LEFT || event.buttons == GPM_B_MIDDLE ||
event.buttons == GPM_B_RIGHT || event.buttons == GPM_B_FOURTH)
l = m = r = 0;
dx = event.dx;
dy = event.dy;
} else
#endif
{
char data[4];
if(MouseFD == -1)
return 0;
if(read(MouseFD, data, 4) != 4)
return 0;
l = ((data[0] & 0x20) >> 3);
m = ((data[3] & 0x10) >> 3);
r = ((data[0] & 0x10) >> 4);
dx = (((data[0] & 0x03) << 6) | (data[1] & 0x3F));
dy = (((data[0] & 0x0C) << 4) | (data[2] & 0x3F));
}
MouseX += dx * MouseSpeed;
if(MouseX < 0)
MouseX = 0;
else
if(MouseX >= VarInfo.xres)
MouseX = VarInfo.xres - 1;
MouseY += dy * MouseSpeed;
if(MouseY < 0)
MouseY = 0;
else
if(MouseY >= VarInfo.yres)
MouseY = VarInfo.yres - 1;
if(l != ll)
HandleMousePress(GLUT_LEFT_BUTTON, l);
if(m != lm)
HandleMousePress(GLUT_MIDDLE_BUTTON, m);
if(r != lr)
HandleMousePress(GLUT_RIGHT_BUTTON, r);
ll = l, lm = m, lr = r;
if(dx || dy || !MouseVisible) {
if(l || m || r) {
if(MotionFunc)
MotionFunc(MouseX, MouseY);
} else
if(PassiveMotionFunc)
PassiveMotionFunc(MouseX, MouseY);
EraseCursor();
MouseVisible = 1;
if(ActiveMenu)
Redisplay = 1;
else
SwapCursor();
}
LastMouseTime = glutGet(GLUT_ELAPSED_TIME);
return 1;
}
void ReceiveInput(void)
{
if(ConsoleFD != -1)
while(ReadKey());
while(ReadMouse());
/* implement a 2 second timeout on the mouse */
if(MouseVisible && glutGet(GLUT_ELAPSED_TIME) - LastMouseTime > 2000) {
EraseCursor();
MouseVisible = 0;
SwapCursor();
}
}
static void VTSwitchHandler(int sig)
{
struct vt_stat st;
switch(sig) {
case SIGUSR1:
ioctl(ConsoleFD, VT_RELDISP, 1);
Active = 0;
#ifdef MULTIHEAD
VisiblePoll = 1;
TestVisible();
#else
VisibleSwitch = 1;
Visible = 0;
#endif
break;
case SIGUSR2:
ioctl(ConsoleFD, VT_GETSTATE, &st);
if(st.v_active)
ioctl(ConsoleFD, VT_RELDISP, VT_ACKACQ);
RestoreColorMap();
Active = 1;
Visible = 1;
VisibleSwitch = 1;
Redisplay = 1;
break;
}
}
void InitializeVT(int usestdin)
{
struct termios tio;
struct vt_mode vt;
char console[128];
signal(SIGIO, SIG_IGN);
Active = 1;
if(usestdin) {
ConsoleFD = 0;
goto setattribs;
}
/* detect the current vt if it was not specified */
if(CurrentVT == 0) {
int fd = open("/dev/tty", O_RDWR | O_NDELAY, 0);
struct vt_stat st;
if(fd == -1) {
sprintf(exiterror, "Failed to open /dev/tty\n");
exit(0);
}
if(ioctl(fd, VT_GETSTATE, &st) == -1) {
fprintf(stderr, "Could not detect current vt, specify with -vt\n");
fprintf(stderr, "Defaulting to stdin input\n");
ConsoleFD = 0;
close(fd);
goto setattribs;
}
CurrentVT = st.v_active;
close(fd);
}
/* if we close with the modifier set in glutIconifyWindow, we won't
get the signal when they are released, so set to zero here */
KeyboardModifiers = 0;
/* open the console tty */
sprintf(console, "/dev/tty%d", CurrentVT);
ConsoleFD = open(console, O_RDWR | O_NDELAY, 0);
if (ConsoleFD < 0) {
sprintf(exiterror, "error couldn't open %s,"
" defaulting to stdin \n", console);
ConsoleFD = 0;
goto setattribs;
}
signal(SIGUSR1, VTSwitchHandler);
signal(SIGUSR2, VTSwitchHandler);
if (ioctl(ConsoleFD, VT_GETMODE, &OldVTMode) < 0) {
sprintf(exiterror,"Failed to grab %s, defaulting to stdin\n", console);
close(ConsoleFD);
ConsoleFD = 0;
goto setattribs;
}
vt = OldVTMode;
vt.mode = VT_PROCESS;
vt.waitv = 0;
vt.relsig = SIGUSR1;
vt.acqsig = SIGUSR2;
if (ioctl(ConsoleFD, VT_SETMODE, &vt) < 0) {
sprintf(exiterror, "error: ioctl(VT_SETMODE) failed: %s\n",
strerror(errno));
close(ConsoleFD);
ConsoleFD = 0;
exit(1);
}
if (ioctl(ConsoleFD, KDGKBMODE, &OldKDMode) < 0) {
sprintf(exiterror, "Warning: ioctl KDGKBMODE failed!\n");
OldKDMode = K_XLATE;
}
/* use SIGIO so VT switching can work if the program is locked */
signal(SIGIO, KeyboardHandler);
pipe(kbdpipe);
if(fcntl(kbdpipe[0], F_SETFL, O_NONBLOCK | O_ASYNC) < 0) {
sprintf(exiterror, "Failed to set keyboard to non-blocking\n");
exit(0);
}
fcntl(ConsoleFD, F_SETOWN, getpid());
if(ioctl(ConsoleFD, KDGETMODE, &OldMode) < 0)
sprintf(exiterror, "Warning: Failed to get terminal mode\n");
#ifdef HAVE_GPM
if(!GpmMouse)
#endif
if(ioctl(ConsoleFD, KDSETMODE, KD_GRAPHICS) < 0)
sprintf(exiterror,"Warning: Failed to set terminal to graphics\n");
if(ioctl(ConsoleFD, KDSKBMODE, K_MEDIUMRAW) < 0) {
sprintf(exiterror, "ioctl KDSKBMODE failed!\n");
exit(0);
}
if(ioctl(ConsoleFD, KDGKBLED, &KeyboardLedState) < 0) {
sprintf(exiterror, "ioctl KDGKBLED failed!\n");
exit(0);
}
setattribs:
/* enable async input input */
if(fcntl(ConsoleFD, F_SETFL, O_ASYNC) < 0) {
sprintf(exiterror, "Failed to set O_ASYNC mode on fd %d\n", ConsoleFD);
exit(0);
}
/* save old terminos settings */
if (tcgetattr(ConsoleFD, &OldTermios) < 0) {
sprintf(exiterror, "tcgetattr failed\n");
exit(0);
}
tio = OldTermios;
/* terminos settings for straight-through mode */
tio.c_lflag &= ~(ICANON | ECHO | ISIG);
tio.c_iflag &= ~(ISTRIP | IGNCR | ICRNL | INLCR | IXOFF | IXON);
tio.c_iflag |= IGNBRK;
tio.c_cc[VMIN] = 0;
tio.c_cc[VTIME] = 0;
if (tcsetattr(ConsoleFD, TCSANOW, &tio) < 0) {
sprintf(exiterror, "tcsetattr failed\n");
exit(0);
}
}
void RestoreVT(void)
{
if(ConsoleFD < 0)
return;
if (tcsetattr(ConsoleFD, TCSANOW, &OldTermios) < 0)
sprintf(exiterror, "tcsetattr failed\n");
/* setting the mode to text from graphics restores the colormap */
if(
#ifdef HAVE_GPM
!GpmMouse ||
#endif
ConsoleFD == 0)
if(ioctl(ConsoleFD, KDSETMODE, KD_GRAPHICS) < 0)
goto skipioctl; /* no need to fail twice */
if(ioctl(ConsoleFD, KDSETMODE, OldMode) < 0)
fprintf(stderr, "ioctl KDSETMODE failed!\n");
skipioctl:
if(ConsoleFD == 0)
return;
/* restore keyboard state */
if (ioctl(ConsoleFD, VT_SETMODE, &OldVTMode) < 0)
fprintf(stderr, "Failed to set vtmode\n");
if (ioctl(ConsoleFD, KDSKBMODE, OldKDMode) < 0)
fprintf(stderr, "ioctl KDSKBMODE failed!\n");
close(ConsoleFD);
close(kbdpipe[0]);
close(kbdpipe[1]);
}
void InitializeMouse(void)
{
#ifdef HAVE_GPM
if(!GpmMouse)
#endif
{
const char *mousedev = getenv("MOUSE");
if(!mousedev)
mousedev = MOUSEDEV;
if((MouseFD = open(mousedev, O_RDONLY | O_NONBLOCK)) >= 0) {
if(!MouseSpeed)
MouseSpeed = 1;
NumMouseButtons = 3;
return;
}
}
#ifdef HAVE_GPM
{
Gpm_Connect conn;
int c;
conn.eventMask = ~0; /* Want to know about all the events */
conn.defaultMask = 0; /* don't handle anything by default */
conn.minMod = 0; /* want everything */
conn.maxMod = ~0; /* all modifiers included */
if(Gpm_Open(&conn, 0) != -1) {
if(!MouseSpeed)
MouseSpeed = 8;
NumMouseButtons = 3;
return;
}
fprintf(stderr, "Cannot open gpmctl.\n");
}
#endif
fprintf(stderr,"Cannot open %s.\n"
"Continuing without Mouse\n", MOUSEDEV);
}
void CloseMouse(void)
{
#ifdef HAVE_GPM
if(GpmMouse) {
if(NumMouseButtons)
Gpm_Close();
} else
#endif
if(MouseFD >= 0)
close(MouseFD);
}
/*
* Mesa 3-D graphics library
* Version: 6.5
* Copyright (C) 1995-2006 Brian Paul
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/*
* Library for glut using mesa fbdev driver
*
* Written by Sean D'Epagnier (c) 2006
*/
#include <sys/time.h>
#include <linux/fb.h>
#include <GL/glfbdev.h>
#define MULTIHEAD /* enable multihead hacks,
it allows the program to continue drawing
without reading input when a second fbdev
has keyboard focus it can cause
screen corruption that requires C-l to fix */
#define HAVE_GPM
#define MAX_VSYNC 200
/* this causes these symbols to not be exported */
#pragma GCC visibility push(hidden)
/* --------- fbdev ------------ */
extern int Redisplay;
extern int Visible;
extern int VisibleSwitch;
extern int Active;
extern int VisiblePoll;
extern int Swapping, VTSwitch;
void TestVisible(void);
int ParseFBModes(int, int, int, int, int, int);
void SetVideoMode(void);
void CreateBuffer(void);
void CreateVisual(void);
extern int FrameBufferFD;
extern unsigned char *FrameBuffer;
extern unsigned char *BackBuffer;
extern int DisplayMode;
extern char exiterror[256];
extern struct fb_fix_screeninfo FixedInfo;
extern struct fb_var_screeninfo VarInfo;
extern GLFBDevContextPtr Context;
extern GLFBDevBufferPtr Buffer;
extern GLFBDevVisualPtr Visual;
/* --- colormap --- */
#define REVERSECMAPSIZELOG 3
#define REVERSECMAPSIZE (1<<REVERSECMAPSIZELOG)
extern unsigned short RedColorMap[256],
GreenColorMap[256],
BlueColorMap[256];
extern unsigned char ReverseColorMap[REVERSECMAPSIZE]
[REVERSECMAPSIZE]
[REVERSECMAPSIZE];
void LoadColorMap(void);
void RestoreColorMap(void);
/* --- mouse --- */
extern int MouseX, MouseY;
extern int CurrentCursor;
extern int MouseVisible;
extern int LastMouseTime;
extern int NumMouseButtons;
void InitializeCursor(void);
void EraseCursor(void);
void DrawCursor(void);
void SwapCursor(void);
/* --- menus --- */
struct GlutMenu {
int NumItems;
int x, y;
int width;
int selected;
struct {
int value;
int submenu;
char *name;
} *Items;
void (*func)(int);
};
extern struct GlutMenu *Menus;
extern int ActiveMenu;
extern int CurrentMenu;
void InitializeMenus(void);
void FreeMenus(void);
void DrawMenus(void);
int TryMenu(int, int);
void OpenMenu(void);
void CloseMenu(void);
/* --- state --- */
extern int AccumSize, DepthSize, StencilSize, NumSamples;
extern struct timeval StartTime;
extern int KeyboardModifiers;
/* --- input --- */
#ifdef HAVE_GPM
extern int GpmMouse;
#endif
extern int CurrentVT;
extern int ConsoleFD;
extern double MouseSpeed;
extern int KeyRepeatMode;
void InitializeVT(int);
void RestoreVT(void);
void CloseMouse(void);
void InitializeMouse(void);
void ReceiveInput(void);
/* --- callback --- */
extern void (*DisplayFunc)(void);
extern void (*ReshapeFunc)(int width, int height);
extern void (*KeyboardFunc)(unsigned char key, int x, int y);
extern void (*KeyboardUpFunc)(unsigned char key, int x, int y);
extern void (*MouseFunc)(int key, int state, int x, int y);
extern void (*MotionFunc)(int x, int y);
extern void (*PassiveMotionFunc)(int x, int y);
extern void (*VisibilityFunc)(int state);
extern void (*SpecialFunc)(int key, int x, int y);
extern void (*SpecialUpFunc)(int key, int x, int y);
extern void (*IdleFunc)(void);
extern void (*MenuStatusFunc)(int state, int x, int y);
extern void (*MenuStateFunc)(int state);
/* --- timers --- */
struct GlutTimer {
int time;
void (*func)(int);
int value;
struct GlutTimer *next;
};
extern struct GlutTimer *GlutTimers;
/* ------- Game Mode -------- */
extern int GameMode;
#pragma GCC visibility pop
/*
* Mesa 3-D graphics library
* Version: 6.5
* Copyright (C) 1995-2006 Brian Paul
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/*
* Library for glut using mesa fbdev driver
*
* Written by Sean D'Epagnier (c) 2006
*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <linux/fb.h>
#include <GL/glut.h>
#include "internal.h"
#define MENU_FONT_WIDTH 9
#define MENU_FONT_HEIGHT 15
#define MENU_FONT GLUT_BITMAP_9_BY_15
#define SUBMENU_OFFSET 20
struct GlutMenu *Menus;
int ActiveMenu;
int CurrentMenu;
static double MenuProjection[16];
static int AttachedMenus[3];
static int NumMenus = 1;
static int SelectedMenu;
void InitializeMenus(void)
{
glPushAttrib(GL_TRANSFORM_BIT);
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
gluOrtho2D(0.0, VarInfo.xres, VarInfo.yres, 0.0);
glGetDoublev(GL_PROJECTION_MATRIX, MenuProjection);
glPopMatrix();
glPopAttrib();
}
void FreeMenus(void)
{
int i, j;
for(i = 1; i<NumMenus; i++) {
for(j = 0; j<Menus[i].NumItems; j++)
free(Menus[i].Items[j].name);
free(Menus[i].Items);
}
free(Menus);
}
int TryMenu(int button, int pressed)
{
if(ActiveMenu && !pressed) {
ActiveMenu = 0;
CloseMenu();
Redisplay = 1;
return 1;
}
if(AttachedMenus[button] && pressed) {
ActiveMenu = AttachedMenus[button];
OpenMenu();
Redisplay = 1;
return 1;
}
return 0;
}
static int DrawMenu(int menu, int x, int *y)
{
int i;
int ret = 1;
for(i=0; i < Menus[menu].NumItems; i++) {
char *s = Menus[menu].Items[i].name;
int a = 0;
if(MouseY >= *y && MouseY < *y + MENU_FONT_HEIGHT &&
MouseX >= x && MouseX < x + Menus[menu].width) {
a = 1;
SelectedMenu = menu;
ret = 0;
Menus[menu].selected = i;
glColor3f(1,0,0);
} else
glColor3f(1,1,1);
*y += MENU_FONT_HEIGHT;
glRasterPos2i(x, *y);
for(; *s; s++)
glutBitmapCharacter(MENU_FONT, *s);
if(Menus[menu].selected == i)
if(Menus[menu].Items[i].submenu)
if(DrawMenu(Menus[menu].Items[i].submenu, x
+ SUBMENU_OFFSET, y)) {
if(!a)
Menus[menu].selected = -1;
} else
ret = 0;
}
return ret;
}
void DrawMenus(void)
{
int x, y;
if(GameMode)
return;
x = Menus[ActiveMenu].x;
y = Menus[ActiveMenu].y;
/* save old settings */
glPushAttrib(GL_COLOR_BUFFER_BIT | GL_CURRENT_BIT
| GL_ENABLE_BIT | GL_VIEWPORT_BIT);
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadMatrixd(MenuProjection);
glViewport(0, 0, VarInfo.xres, VarInfo.yres);
glDisable(GL_DEPTH_TEST);
glDisable(GL_ALPHA_TEST);
glDisable(GL_LIGHTING);
glDisable(GL_FOG);
glDisable(GL_TEXTURE_2D);
glEnable(GL_COLOR_LOGIC_OP);
glLogicOp(GL_AND_REVERSE);
if(DrawMenu(ActiveMenu, x, &y))
Menus[ActiveMenu].selected = -1;
/* restore settings */
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
glPopMatrix();
glPopAttrib();
}
void OpenMenu(void)
{
if(MenuStatusFunc)
MenuStatusFunc(GLUT_MENU_IN_USE, MouseX, MouseY);
if(MenuStateFunc)
MenuStateFunc(GLUT_MENU_IN_USE);
Menus[ActiveMenu].x = MouseX-Menus[ActiveMenu].width/2;
if(Menus[ActiveMenu].x < 0)
Menus[ActiveMenu].x = 0;
if(Menus[ActiveMenu].x + Menus[ActiveMenu].width >= VarInfo.xres)
Menus[ActiveMenu].x = VarInfo.xres - Menus[ActiveMenu].width - 1;
Menus[ActiveMenu].y = MouseY-Menus[ActiveMenu].NumItems*MENU_FONT_HEIGHT/2;
Menus[ActiveMenu].selected = -1;
}
void CloseMenu(void)
{
if(MenuStatusFunc)
MenuStatusFunc(GLUT_MENU_NOT_IN_USE, MouseX, MouseY);
if(MenuStateFunc)
MenuStateFunc(GLUT_MENU_NOT_IN_USE);
if(SelectedMenu > 0) {
int selected = Menus[SelectedMenu].selected;
if(selected >= 0)
if(Menus[SelectedMenu].Items[selected].submenu == 0)
Menus[SelectedMenu].func(Menus[SelectedMenu].Items
[selected].value);
}
}
/* glut menu functions */
int glutCreateMenu(void (*func)(int value))
{
CurrentMenu = NumMenus;
NumMenus++;
Menus = realloc(Menus, sizeof(*Menus) * NumMenus);
Menus[CurrentMenu].NumItems = 0;
Menus[CurrentMenu].Items = NULL;
Menus[CurrentMenu].func = func;
Menus[CurrentMenu].width = 0;
return CurrentMenu;
}
void glutSetMenu(int menu)
{
CurrentMenu = menu;
}
int glutGetMenu(void)
{
return CurrentMenu;
}
void glutDestroyMenu(int menu)
{
if(menu == CurrentMenu)
CurrentMenu = 0;
}
static void NameMenuEntry(int entry, const char *name)
{
int cm = CurrentMenu;
if(!(Menus[cm].Items[entry-1].name = realloc(Menus[cm].Items[entry-1].name,
strlen(name) + 1))) {
sprintf(exiterror, "realloc failed in NameMenuEntry\n");
exit(0);
}
strcpy(Menus[cm].Items[entry-1].name, name);
if(strlen(name) * MENU_FONT_WIDTH > Menus[cm].width)
Menus[cm].width = strlen(name) * MENU_FONT_WIDTH;
}
static int AddMenuItem(const char *name)
{
int cm = CurrentMenu;
int item = Menus[cm].NumItems++;
if(!(Menus[cm].Items = realloc(Menus[cm].Items,
Menus[cm].NumItems * sizeof(*Menus[0].Items)))) {
sprintf(exiterror, "realloc failed in AddMenuItem\n");
exit(0);
}
Menus[cm].Items[item].name = NULL;
NameMenuEntry(item+1, name);
return item;
}
void glutAddMenuEntry(const char *name, int value)
{
int item = AddMenuItem(name);
Menus[CurrentMenu].Items[item].value = value;
Menus[CurrentMenu].Items[item].submenu = 0;
}
void glutAddSubMenu(const char *name, int menu)
{
int item = AddMenuItem(name);
if(menu == CurrentMenu) {
sprintf(exiterror, "Recursive menus not supported\n");
exit(0);
}
Menus[CurrentMenu].Items[item].submenu = menu;
}
void glutChangeToMenuEntry(int entry, const char *name, int value)
{
NameMenuEntry(entry, name);
Menus[CurrentMenu].Items[entry-1].value = value;
Menus[CurrentMenu].Items[entry-1].submenu = 0;
}
void glutChangeToSubMenu(int entry, const char *name, int menu)
{
NameMenuEntry(entry, name);
Menus[CurrentMenu].Items[entry-1].submenu = menu;
}
void glutRemoveMenuItem(int entry)
{
memmove(Menus[CurrentMenu].Items + entry - 1,
Menus[CurrentMenu].Items + entry,
sizeof(*Menus[0].Items) * (Menus[CurrentMenu].NumItems - entry));
Menus[CurrentMenu].NumItems--;
}
void glutAttachMenu(int button)
{
AttachedMenus[button] = CurrentMenu;
}
void glutDetachMenu(int button)
{
AttachedMenus[button] = 0;
}
/*
* Mesa 3-D graphics library
* Version: 6.5
* Copyright (C) 1995-2006 Brian Paul
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/*
* Library for glut using mesa fbdev driver
*
* Written by Sean D'Epagnier (c) 2006
*/
#include <stdlib.h>
#include <GL/gl.h>
void glutEstablishOverlay(void)
{
exit(0);
}
void glutUseLayer(GLenum layer)
{
}
void glutRemoveOverlay(void)
{
}
void glutPostOverlayRedisplay(void)
{
}
void glutPostWindowOverlayRedisplay(int win)
{
}
void glutShowOverlay(void)
{
}
void glutHideOverlay(void)
{
}
/*
* Mesa 3-D graphics library
* Version: 6.5
* Copyright (C) 1995-2006 Brian Paul
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/*
* Library for glut using mesa fbdev driver
*
* Written by Sean D'Epagnier (c) 2006
*/
#include <string.h>
#include <sys/time.h>
#include <linux/fb.h>
#include <GL/glut.h>
#include "../../mesa/main/config.h"
#include "internal.h"
int AccumSize = 16; /* per channel size of accumulation buffer */
int DepthSize = DEFAULT_SOFTWARE_DEPTH_BITS;
int StencilSize = STENCIL_BITS;
int NumSamples = 4;
int glutGet(GLenum state)
{
switch(state) {
case GLUT_WINDOW_X:
return 0;
case GLUT_WINDOW_Y:
return 0;
case GLUT_INIT_WINDOW_WIDTH:
case GLUT_WINDOW_WIDTH:
case GLUT_SCREEN_WIDTH:
return VarInfo.xres;
case GLUT_INIT_WINDOW_HEIGHT:
case GLUT_WINDOW_HEIGHT:
case GLUT_SCREEN_HEIGHT:
return VarInfo.yres;
case GLUT_WINDOW_BUFFER_SIZE:
return VarInfo.bits_per_pixel;
case GLUT_WINDOW_STENCIL_SIZE:
return StencilSize;
case GLUT_WINDOW_DEPTH_SIZE:
return DepthSize;
case GLUT_WINDOW_RED_SIZE:
return VarInfo.red.length;
case GLUT_WINDOW_GREEN_SIZE:
return VarInfo.green.length;
case GLUT_WINDOW_BLUE_SIZE:
return VarInfo.green.length;
case GLUT_WINDOW_ALPHA_SIZE:
return VarInfo.transp.length;
case GLUT_WINDOW_ACCUM_RED_SIZE:
case GLUT_WINDOW_ACCUM_GREEN_SIZE:
case GLUT_WINDOW_ACCUM_BLUE_SIZE:
case GLUT_WINDOW_ACCUM_ALPHA_SIZE:
return AccumSize;
case GLUT_WINDOW_DOUBLEBUFFER:
if(DisplayMode & GLUT_DOUBLE)
return 1;
return 0;
case GLUT_WINDOW_RGBA:
if(DisplayMode & GLUT_INDEX)
return 0;
return 1;
case GLUT_WINDOW_PARENT:
return 0;
case GLUT_WINDOW_NUM_CHILDREN:
return 0;
case GLUT_WINDOW_COLORMAP_SIZE:
if(DisplayMode & GLUT_INDEX)
return 256;
return 0;
case GLUT_WINDOW_NUM_SAMPLES:
return NumSamples;
case GLUT_WINDOW_STEREO:
return 0;
case GLUT_WINDOW_CURSOR:
return CurrentCursor;
case GLUT_SCREEN_WIDTH_MM:
return VarInfo.width;
case GLUT_SCREEN_HEIGHT_MM:
return VarInfo.height;
case GLUT_MENU_NUM_ITEMS:
if(CurrentMenu)
return Menus[CurrentMenu].NumItems;
return 0;
case GLUT_DISPLAY_MODE_POSSIBLE:
if((DisplayMode & GLUT_MULTISAMPLE)
|| (DisplayMode & GLUT_STEREO)
|| (DisplayMode & GLUT_LUMINANCE)
|| (DisplayMode & GLUT_ALPHA) && (DisplayMode & GLUT_INDEX))
return 0;
return 1;
case GLUT_INIT_DISPLAY_MODE:
return DisplayMode;
case GLUT_INIT_WINDOW_X:
case GLUT_INIT_WINDOW_Y:
return 0;
case GLUT_ELAPSED_TIME:
{
static struct timeval tv;
gettimeofday(&tv, 0);
return 1000 * (tv.tv_sec - StartTime.tv_sec)
+ (tv.tv_usec - StartTime.tv_usec) / 1000;
}
}
return -1;
}
int glutLayerGet(GLenum info)
{
switch(info) {
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 -1;
case GLUT_NORMAL_DAMAGED:
return Redisplay;
case GLUT_OVERLAY_DAMAGED:
return -1;
}
return -1;
}
int glutDeviceGet(GLenum info)
{
switch(info) {
case GLUT_HAS_KEYBOARD:
return ConsoleFD != -1 ? 1 : 0;
case GLUT_HAS_MOUSE:
case GLUT_NUM_MOUSE_BUTTONS:
return NumMouseButtons;
case GLUT_HAS_SPACEBALL:
case GLUT_HAS_DIAL_AND_BUTTON_BOX:
case GLUT_HAS_TABLET:
return 0;
case GLUT_NUM_SPACEBALL_BUTTONS:
case GLUT_NUM_BUTTON_BOX_BUTTONS:
case GLUT_NUM_DIALS:
case GLUT_NUM_TABLET_BUTTONS:
return 0;
case GLUT_DEVICE_IGNORE_KEY_REPEAT:
return KeyRepeatMode == GLUT_KEY_REPEAT_OFF;
case GLUT_DEVICE_KEY_REPEAT:
return KeyRepeatMode;
case GLUT_JOYSTICK_POLL_RATE:
case GLUT_HAS_JOYSTICK:
case GLUT_JOYSTICK_BUTTONS:
case GLUT_JOYSTICK_AXES:
return 0;
}
return -1;
}
int glutGetModifiers(void){
return KeyboardModifiers;
}
int glutExtensionSupported(const char *extension)
{
const char *exts = (const char *) glGetString(GL_EXTENSIONS);
const char *start = exts;
int len = strlen(extension);
for(;;) {
const char *p = strstr(exts, extension);
if(!p)
break;
if((p == start || p[-1] == ' ') && (p[len] == ' ' || p[len] == 0))
return 1;
exts = p + len;
}
return 0;
}
/*
* Mesa 3-D graphics library
* Version: 6.5
* Copyright (C) 1995-2006 Brian Paul
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/*
* Library for glut using mesa fbdev driver
*
* Written by Sean D'Epagnier (c) 2006
*
* To improve on this library, maybe support subwindows or overlays,
* I (sean at depagnier dot com) will do my best to help.
*/
#include <GL/glut.h>
#include "glutstroke.h"
void glutStrokeCharacter(GLUTstrokeFont font, int c)
{
const StrokeCharRec *ch;
const StrokeRec *stroke;
const CoordRec *coord;
StrokeFontPtr fontinfo = (StrokeFontPtr) font;
int i, j;
if (c < 0 || c >= fontinfo->num_chars)
return;
ch = &(fontinfo->ch[c]);
if (ch) {
for (i = ch->num_strokes, stroke = ch->stroke;
i > 0; i--, stroke++) {
glBegin(GL_LINE_STRIP);
for (j = stroke->num_coords, coord = stroke->coord;
j > 0; j--, coord++) {
glVertex2f(coord->x, coord->y);
}
glEnd();
}
glTranslatef(ch->right, 0.0, 0.0);
}
}
int glutStrokeWidth(GLUTstrokeFont font, int c)
{
StrokeFontPtr fontinfo;
const StrokeCharRec *ch;
fontinfo = (StrokeFontPtr) font;
if (c < 0 || c >= fontinfo->num_chars)
return 0;
ch = &(fontinfo->ch[c]);
if (ch)
return ch->right;
return 0;
}
int glutStrokeLength(GLUTstrokeFont font, const unsigned char *string)
{
int length = 0;
for (; *string; string++)
length += glutStrokeWidth(font, *string);
return length;
}
/*
* Mesa 3-D graphics library
* Version: 6.5
* Copyright (C) 1995-2006 Brian Paul
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/*
* Library for glut using mesa fbdev driver
*
* Written by Sean D'Epagnier (c) 2006
*/
/* Notice, if you know how to implement these functions correctly
please proceed */
#include <stdlib.h>
#include <GL/glut.h>
#include "internal.h"
int glutVideoResizeGet(GLenum param)
{
return 0;
}
void glutSetupVideoResizing(void)
{
}
void glutStopVideoResizing(void)
{
}
void glutVideoResize(int x, int y, int width, int height)
{
}
void glutVideoPan(int x, int y, int width, int height)
{
}
/*
* Mesa 3-D graphics library
* Version: 3.4
* Copyright (C) 1995-1998 Brian Paul
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/*
* DOS/DJGPP glut driver v1.0 for Mesa 4.0
*
* Copyright (C) 2002 - Borca Daniel
* Email : dborca@yahoo.com
* Web : http://www.geocities.com/dborca
*/
#include "GL/glut.h"
#include "internal.h"
void APIENTRY glutDisplayFunc (void (GLUTCALLBACK *func) (void))
{
display_func = func;
}
void APIENTRY glutReshapeFunc (void (GLUTCALLBACK *func) (int width, int height))
{
reshape_func = func;
}
void APIENTRY glutKeyboardFunc (void (GLUTCALLBACK *func) (unsigned char key, int x, int y))
{
keyboard_func = func;
}
void APIENTRY glutMouseFunc (void (GLUTCALLBACK *func) (int button, int state, int x, int y))
{
mouse_func = func;
}
void APIENTRY glutMotionFunc (void (GLUTCALLBACK *func) (int x, int y))
{
motion_func = func;
}
void APIENTRY glutPassiveMotionFunc (void (GLUTCALLBACK *func) (int x, int y))
{
passive_motion_func = func;
}
void APIENTRY glutEntryFunc (void (GLUTCALLBACK *func) (int state))
{
entry_func = func;
}
void APIENTRY glutVisibilityFunc (void (GLUTCALLBACK *func) (int state))
{
visibility_func = func;
}
void APIENTRY glutIdleFunc (void (GLUTCALLBACK *func) (void))
{
idle_func = func;
}
void APIENTRY glutTimerFunc (unsigned int millis, void (GLUTCALLBACK *func) (int value), int value)
{
}
void APIENTRY glutMenuStateFunc (void (GLUTCALLBACK *func) (int state))
{
menu_state_func = func;
}
void APIENTRY glutSpecialFunc (void (GLUTCALLBACK *func) (int key, int x, int y))
{
special_func = func;
}
void APIENTRY glutSpaceballMotionFunc (void (GLUTCALLBACK *func) (int x, int y, int z))
{
}
void APIENTRY glutSpaceballRotateFunc (void (GLUTCALLBACK *func) (int x, int y, int z))
{
}
void APIENTRY glutSpaceballButtonFunc (void (GLUTCALLBACK *func) (int button, int state))
{
}
void APIENTRY glutButtonBoxFunc (void (GLUTCALLBACK *func) (int button, int state))
{
}
void APIENTRY glutDialsFunc (void (GLUTCALLBACK *func) (int dial, int value))
{
}
void APIENTRY glutTabletMotionFunc (void (GLUTCALLBACK *func) (int x, int y))
{
}
void APIENTRY glutTabletButtonFunc (void (GLUTCALLBACK *func) (int button, int state, int x, int y))
{
}
void APIENTRY glutMenuStatusFunc (void (GLUTCALLBACK *func) (int status, int x, int y))
{
}
void APIENTRY glutOverlayDisplayFunc (void (GLUTCALLBACK *func) (void))
{
}
void APIENTRY glutWindowStatusFunc (void (GLUTCALLBACK *func) (int state))
{
}
/* Copyright (c) Mark J. Kilgard, 1994. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#include "glutbitmap.h"
void APIENTRY
glutBitmapCharacter(GLUTbitmapFont font, int c)
{
const BitmapCharRec *ch;
BitmapFontPtr fontinfo;
GLfloat swapbytes, lsbfirst, rowlength;
GLfloat skiprows, skippixels, alignment;
#if defined(_WIN32)
fontinfo = (BitmapFontPtr) __glutFont(font);
#else
fontinfo = (BitmapFontPtr) font;
#endif
if (c < fontinfo->first ||
c >= fontinfo->first + fontinfo->num_chars)
return;
ch = fontinfo->ch[c - fontinfo->first];
if (ch) {
/* Save current modes. */
/* glGetFloatv(GL_UNPACK_SWAP_BYTES, &swapbytes); */
/* glGetFloatv(GL_UNPACK_LSB_FIRST, &lsbfirst); */
/* glGetFloatv(GL_UNPACK_ROW_LENGTH, &rowlength); */
/* glGetFloatv(GL_UNPACK_SKIP_ROWS, &skiprows); */
/* glGetFloatv(GL_UNPACK_SKIP_PIXELS, &skippixels); */
glGetFloatv(GL_UNPACK_ALIGNMENT, &alignment);
/* Little endian machines (DEC Alpha for example) could
benefit from setting GL_UNPACK_LSB_FIRST to GL_TRUE
instead of GL_FALSE, but this would require changing the
generated bitmaps too. */
/* 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(ch->width, ch->height, ch->xorig, ch->yorig,
ch->advance, 0, ch->bitmap);
/* Restore saved modes. */
/* glPixelStorei(GL_UNPACK_SWAP_BYTES, swapbytes); */
/* glPixelStorei(GL_UNPACK_LSB_FIRST, (int)lsbfirst); */
/* glPixelStorei(GL_UNPACK_ROW_LENGTH, (int)rowlength); */
/* glPixelStorei(GL_UNPACK_SKIP_ROWS, skiprows); */
/* glPixelStorei(GL_UNPACK_SKIP_PIXELS, skippixels); */
glPixelStorei(GL_UNPACK_ALIGNMENT, (int)alignment);
}
}
/*
* Mesa 3-D graphics library
* Version: 3.4
* Copyright (C) 1995-1998 Brian Paul
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/*
* DOS/DJGPP glut driver v1.0 for Mesa 4.0
*
* Copyright (C) 2002 - Borca Daniel
* Email : dborca@yahoo.com
* Web : http://www.geocities.com/dborca
*/
#include "GL/glut.h"
#include "internal.h"
GLenum g_display_mode = 0;
GLuint g_width = DEFAULT_WIDTH;
GLuint g_height = DEFAULT_HEIGHT;
GLint g_mouse = GL_FALSE;
GLboolean g_redisplay = GL_FALSE;
GLint g_xpos = 0;
GLint g_ypos = 0;
void (GLUTCALLBACK *display_func) (void) = 0;
void (GLUTCALLBACK *reshape_func) (int width, int height) = 0;
void (GLUTCALLBACK *keyboard_func) (unsigned char key, int x, int y) = 0;
void (GLUTCALLBACK *mouse_func) (int button, int state, int x, int y) = 0;
void (GLUTCALLBACK *motion_func) (int x, int y) = 0;
void (GLUTCALLBACK *passive_motion_func) (int x, int y) = 0;
void (GLUTCALLBACK *entry_func) (int state) = 0;
void (GLUTCALLBACK *visibility_func) (int state) = 0;
void (GLUTCALLBACK *idle_func) (void) = 0;
void (GLUTCALLBACK *menu_state_func) (int state) = 0;
void (GLUTCALLBACK *special_func) (int key, int x, int y) = 0;
void (GLUTCALLBACK *spaceball_motion_func) (int x, int y, int z) = 0;
void (GLUTCALLBACK *spaceball_rotate_func) (int x, int y, int z) = 0;
void (GLUTCALLBACK *spaceball_button_func) (int button, int state) = 0;
void (GLUTCALLBACK *button_box_func) (int button, int state) = 0;
void (GLUTCALLBACK *dials_func) (int dial, int value) = 0;
void (GLUTCALLBACK *tablet_motion_func) (int x, int y) = 0;
void (GLUTCALLBACK *tabled_button_func) (int button, int state, int x, int y) = 0;
void (GLUTCALLBACK *menu_status_func) (int status, int x, int y) = 0;
void (GLUTCALLBACK *overlay_display_func) (void) = 0;
void (GLUTCALLBACK *window_status_func) (int state) = 0;
/*
* Mesa 3-D graphics library
* Version: 3.4
* Copyright (C) 1995-1998 Brian Paul
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/*
* DOS/DJGPP glut driver v1.0 for Mesa 4.0
*
* Copyright (C) 2002 - Borca Daniel
* Email : dborca@yahoo.com
* Web : http://www.geocities.com/dborca
*/
#include "GL/glut.h"
void APIENTRY glutSetColor (int ndx, GLfloat red, GLfloat green, GLfloat blue)
{
}
GLfloat APIENTRY glutGetColor (int ndx, int component)
{
return 0.0;
}
void APIENTRY glutCopyColormap (int win)
{
}
/*
* Mesa 3-D graphics library
* Version: 4.0
* Copyright (C) 1995-1998 Brian Paul
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/*
* DOS/DJGPP glut driver v1.0 for Mesa 4.0
*
* Copyright (C) 2002 - Borca Daniel
* Email : dborca@yahoo.com
* Web : http://www.geocities.com/dborca
*/
#ifndef INTERNAL_H_included
#define INTERNAL_H_included
#include "GL/glut.h"
/* #include "pc_hw/pc_hw.h" */
#define MAX_WINDOWS 4
#define DEFAULT_WIDTH 640
#define DEFAULT_HEIGHT 480
#define DEFAULT_BPP 16
#define DEPTH_SIZE 16
#define STENCIL_SIZE 8
#define ACCUM_SIZE 16
extern GLenum g_display_mode;
extern GLuint g_width;
extern GLuint g_height;
extern GLint g_mouse;
extern GLboolean g_redisplay;
extern GLint g_xpos;
extern GLint g_ypos;
extern void (GLUTCALLBACK *display_func) (void);
extern void (GLUTCALLBACK *reshape_func) (int width, int height);
extern void (GLUTCALLBACK *keyboard_func) (unsigned char key, int x, int y);
extern void (GLUTCALLBACK *mouse_func) (int button, int state, int x, int y);
extern void (GLUTCALLBACK *motion_func) (int x, int y);
extern void (GLUTCALLBACK *passive_motion_func) (int x, int y);
extern void (GLUTCALLBACK *entry_func) (int state);
extern void (GLUTCALLBACK *visibility_func) (int state);
extern void (GLUTCALLBACK *idle_func) (void);
extern void (GLUTCALLBACK *menu_state_func) (int state);
extern void (GLUTCALLBACK *special_func) (int key, int x, int y);
extern void (GLUTCALLBACK *spaceball_motion_func) (int x, int y, int z);
extern void (GLUTCALLBACK *spaceball_rotate_func) (int x, int y, int z);
extern void (GLUTCALLBACK *spaceball_button_func) (int button, int state);
extern void (GLUTCALLBACK *button_box_func) (int button, int state);
extern void (GLUTCALLBACK *dials_func) (int dial, int value);
extern void (GLUTCALLBACK *tablet_motion_func) (int x, int y);
extern void (GLUTCALLBACK *tabled_button_func) (int button, int state, int x, int y);
extern void (GLUTCALLBACK *menu_status_func) (int status, int x, int y);
extern void (GLUTCALLBACK *overlay_display_func) (void);
extern void (GLUTCALLBACK *window_status_func) (int state);
#endif
/*
* Mesa 3-D graphics library
* Version: 4.0
* Copyright (C) 1995-1998 Brian Paul
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/*
* DOS/DJGPP glut driver v1.0 for Mesa 4.0
*
* Copyright (C) 2002 - Borca Daniel
* Email : dborca@yahoo.com
* Web : http://www.geocities.com/dborca
*/
#include "GL/glut.h"
#include "internal.h"
void APIENTRY glutInit (int *argcp, char **argv)
{
glutGet(GLUT_ELAPSED_TIME);
}
void APIENTRY glutInitDisplayMode (unsigned int mode)
{
g_display_mode = mode;
}
void APIENTRY glutInitWindowPosition (int x, int y)
{
g_xpos = x;
g_ypos = y;
}
void APIENTRY glutInitWindowSize (int width, int height)
{
g_width = width;
g_height = height;
}
/*
* Mesa 3-D graphics library
* Version: 3.4
* Copyright (C) 1995-1998 Brian Paul
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/*
* DOS/DJGPP glut driver v1.0 for Mesa 4.0
*
* Copyright (C) 2002 - Borca Daniel
* Email : dborca@yahoo.com
* Web : http://www.geocities.com/dborca
*/
#include "GL/glut.h"
void APIENTRY glutEstablishOverlay (void)
{
}
void APIENTRY glutRemoveOverlay (void)
{
}
void APIENTRY glutUseLayer (GLenum layer)
{
}
void APIENTRY glutPostOverlayRedisplay (void)
{
}
void APIENTRY glutShowOverlay (void)
{
}
void APIENTRY glutHideOverlay (void)
{
}
/*
* Mesa 3-D graphics library
* Version: 3.4
* Copyright (C) 1995-1998 Brian Paul
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/*
* DOS/DJGPP glut driver v1.0 for Mesa 4.0
*
* Copyright (C) 2002 - Borca Daniel
* Email : dborca@yahoo.com
* Web : http://www.geocities.com/dborca
*/
#include "GL/glut.h"
int APIENTRY glutCreateMenu (void (GLUTCALLBACK *func) (int))
{
return 0;
}
void APIENTRY glutDestroyMenu (int menu)
{
}
int APIENTRY glutGetMenu (void)
{
return 0;
}
void APIENTRY glutSetMenu (int menu)
{
}
void APIENTRY glutAddMenuEntry (const char *label, int value)
{
}
void APIENTRY glutAddSubMenu (const char *label, int submenu)
{
}
void APIENTRY glutChangeToMenuEntry (int item, const char *label, int value)
{
}
void APIENTRY glutChangeToSubMenu (int item, const char *label, int submenu)
{
}
void APIENTRY glutRemoveMenuItem (int item)
{
}
void APIENTRY glutAttachMenu (int button)
{
}
void APIENTRY glutDetachMenu (int button)
{
}
/* Copyright (c) Mark J. Kilgard, 1994, 1997. */
/**
(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 <math.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include "GL/glut.h"
/* Some <math.h> files do not define M_PI... */
#ifndef M_PI
#define M_PI 3.14159265358979323846
#endif
static GLUquadricObj *quadObj;
#define QUAD_OBJ_INIT() { if(!quadObj) initQuadObj(); }
static void
initQuadObj(void)
{
quadObj = gluNewQuadric();
/* if (!quadObj)
__glutFatalError("out of memory."); */
}
/* CENTRY */
void APIENTRY
glutWireSphere(GLdouble radius, GLint slices, GLint stacks)
{
QUAD_OBJ_INIT();
gluQuadricDrawStyle(quadObj, GLU_LINE);
gluQuadricNormals(quadObj, GLU_SMOOTH);
/* If we ever changed/used the texture or orientation state
of quadObj, we'd need to change it to the defaults here
with gluQuadricTexture and/or gluQuadricOrientation. */
gluSphere(quadObj, radius, slices, stacks);
}
void APIENTRY
glutSolidSphere(GLdouble radius, GLint slices, GLint stacks)
{
QUAD_OBJ_INIT();
gluQuadricDrawStyle(quadObj, GLU_FILL);
gluQuadricNormals(quadObj, GLU_SMOOTH);
/* If we ever changed/used the texture or orientation state
of quadObj, we'd need to change it to the defaults here
with gluQuadricTexture and/or gluQuadricOrientation. */
gluSphere(quadObj, radius, slices, stacks);
}
void APIENTRY
glutWireCone(GLdouble base, GLdouble height,
GLint slices, GLint stacks)
{
QUAD_OBJ_INIT();
gluQuadricDrawStyle(quadObj, GLU_LINE);
gluQuadricNormals(quadObj, GLU_SMOOTH);
/* If we ever changed/used the texture or orientation state
of quadObj, we'd need to change it to the defaults here
with gluQuadricTexture and/or gluQuadricOrientation. */
gluCylinder(quadObj, base, 0.0, height, slices, stacks);
}
void APIENTRY
glutSolidCone(GLdouble base, GLdouble height,
GLint slices, GLint stacks)
{
QUAD_OBJ_INIT();
gluQuadricDrawStyle(quadObj, GLU_FILL);
gluQuadricNormals(quadObj, GLU_SMOOTH);
/* If we ever changed/used the texture or orientation state
of quadObj, we'd need to change it to the defaults here
with gluQuadricTexture and/or gluQuadricOrientation. */
gluCylinder(quadObj, base, 0.0, height, slices, stacks);
}
/* ENDCENTRY */
static void
drawBox(GLfloat size, GLenum type)
{
static GLfloat n[6][3] =
{
{-1.0, 0.0, 0.0},
{0.0, 1.0, 0.0},
{1.0, 0.0, 0.0},
{0.0, -1.0, 0.0},
{0.0, 0.0, 1.0},
{0.0, 0.0, -1.0}
};
static GLint faces[6][4] =
{
{0, 1, 2, 3},
{3, 2, 6, 7},
{7, 6, 5, 4},
{4, 5, 1, 0},
{5, 6, 2, 1},
{7, 4, 0, 3}
};
GLfloat v[8][3];
GLint i;
v[0][0] = v[1][0] = v[2][0] = v[3][0] = -size / 2;
v[4][0] = v[5][0] = v[6][0] = v[7][0] = size / 2;
v[0][1] = v[1][1] = v[4][1] = v[5][1] = -size / 2;
v[2][1] = v[3][1] = v[6][1] = v[7][1] = size / 2;
v[0][2] = v[3][2] = v[4][2] = v[7][2] = -size / 2;
v[1][2] = v[2][2] = v[5][2] = v[6][2] = size / 2;
for (i = 5; i >= 0; i--) {
glBegin(type);
glNormal3fv(&n[i][0]);
glVertex3fv(&v[faces[i][0]][0]);
glVertex3fv(&v[faces[i][1]][0]);
glVertex3fv(&v[faces[i][2]][0]);
glVertex3fv(&v[faces[i][3]][0]);
glEnd();
}
}
/* CENTRY */
void APIENTRY
glutWireCube(GLdouble size)
{
drawBox(size, GL_LINE_LOOP);
}
void APIENTRY
glutSolidCube(GLdouble size)
{
drawBox(size, GL_QUADS);
}
/* ENDCENTRY */
static void
doughnut(GLfloat r, GLfloat R, GLint nsides, GLint rings)
{
int i, j;
GLfloat theta, phi, theta1;
GLfloat cosTheta, sinTheta;
GLfloat cosTheta1, sinTheta1;
GLfloat ringDelta, sideDelta;
ringDelta = 2.0 * M_PI / rings;
sideDelta = 2.0 * M_PI / nsides;
theta = 0.0;
cosTheta = 1.0;
sinTheta = 0.0;
for (i = rings - 1; i >= 0; i--) {
theta1 = theta + ringDelta;
cosTheta1 = cos(theta1);
sinTheta1 = sin(theta1);
glBegin(GL_QUAD_STRIP);
phi = 0.0;
for (j = nsides; j >= 0; j--) {
GLfloat cosPhi, sinPhi, dist;
phi += sideDelta;
cosPhi = cos(phi);
sinPhi = sin(phi);
dist = R + r * cosPhi;
glNormal3f(cosTheta1 * cosPhi, -sinTheta1 * cosPhi, sinPhi);
glVertex3f(cosTheta1 * dist, -sinTheta1 * dist, r * sinPhi);
glNormal3f(cosTheta * cosPhi, -sinTheta * cosPhi, sinPhi);
glVertex3f(cosTheta * dist, -sinTheta * dist, r * sinPhi);
}
glEnd();
theta = theta1;
cosTheta = cosTheta1;
sinTheta = sinTheta1;
}
}
/* CENTRY */
void APIENTRY
glutWireTorus(GLdouble innerRadius, GLdouble outerRadius,
GLint nsides, GLint rings)
{
glPushAttrib(GL_POLYGON_BIT);
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
doughnut(innerRadius, outerRadius, nsides, rings);
glPopAttrib();
}
void APIENTRY
glutSolidTorus(GLdouble innerRadius, GLdouble outerRadius,
GLint nsides, GLint rings)
{
doughnut(innerRadius, outerRadius, nsides, rings);
}
/* ENDCENTRY */
static GLfloat dodec[20][3];
static void
initDodecahedron(void)
{
GLfloat alpha, beta;
alpha = sqrt(2.0 / (3.0 + sqrt(5.0)));
beta = 1.0 + sqrt(6.0 / (3.0 + sqrt(5.0)) -
2.0 + 2.0 * sqrt(2.0 / (3.0 + sqrt(5.0))));
/* *INDENT-OFF* */
dodec[0][0] = -alpha; dodec[0][1] = 0; dodec[0][2] = beta;
dodec[1][0] = alpha; dodec[1][1] = 0; dodec[1][2] = beta;
dodec[2][0] = -1; dodec[2][1] = -1; dodec[2][2] = -1;
dodec[3][0] = -1; dodec[3][1] = -1; dodec[3][2] = 1;
dodec[4][0] = -1; dodec[4][1] = 1; dodec[4][2] = -1;
dodec[5][0] = -1; dodec[5][1] = 1; dodec[5][2] = 1;
dodec[6][0] = 1; dodec[6][1] = -1; dodec[6][2] = -1;
dodec[7][0] = 1; dodec[7][1] = -1; dodec[7][2] = 1;
dodec[8][0] = 1; dodec[8][1] = 1; dodec[8][2] = -1;
dodec[9][0] = 1; dodec[9][1] = 1; dodec[9][2] = 1;
dodec[10][0] = beta; dodec[10][1] = alpha; dodec[10][2] = 0;
dodec[11][0] = beta; dodec[11][1] = -alpha; dodec[11][2] = 0;
dodec[12][0] = -beta; dodec[12][1] = alpha; dodec[12][2] = 0;
dodec[13][0] = -beta; dodec[13][1] = -alpha; dodec[13][2] = 0;
dodec[14][0] = -alpha; dodec[14][1] = 0; dodec[14][2] = -beta;
dodec[15][0] = alpha; dodec[15][1] = 0; dodec[15][2] = -beta;
dodec[16][0] = 0; dodec[16][1] = beta; dodec[16][2] = alpha;
dodec[17][0] = 0; dodec[17][1] = beta; dodec[17][2] = -alpha;
dodec[18][0] = 0; dodec[18][1] = -beta; dodec[18][2] = alpha;
dodec[19][0] = 0; dodec[19][1] = -beta; dodec[19][2] = -alpha;
/* *INDENT-ON* */
}
#define DIFF3(_a,_b,_c) { \
(_c)[0] = (_a)[0] - (_b)[0]; \
(_c)[1] = (_a)[1] - (_b)[1]; \
(_c)[2] = (_a)[2] - (_b)[2]; \
}
static void
crossprod(GLfloat v1[3], GLfloat v2[3], GLfloat prod[3])
{
GLfloat p[3]; /* in case prod == v1 or v2 */
p[0] = v1[1] * v2[2] - v2[1] * v1[2];
p[1] = v1[2] * v2[0] - v2[2] * v1[0];
p[2] = v1[0] * v2[1] - v2[0] * v1[1];
prod[0] = p[0];
prod[1] = p[1];
prod[2] = p[2];
}
static void
normalize(GLfloat v[3])
{
GLfloat d;
d = sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]);
if (d == 0.0) {
/* __glutWarning("normalize: zero length vector"); */
v[0] = d = 1.0;
}
d = 1 / d;
v[0] *= d;
v[1] *= d;
v[2] *= d;
}
static void
pentagon(int a, int b, int c, int d, int e, GLenum shadeType)
{
GLfloat n0[3], d1[3], d2[3];
DIFF3(dodec[a], dodec[b], d1);
DIFF3(dodec[b], dodec[c], d2);
crossprod(d1, d2, n0);
normalize(n0);
glBegin(shadeType);
glNormal3fv(n0);
glVertex3fv(&dodec[a][0]);
glVertex3fv(&dodec[b][0]);
glVertex3fv(&dodec[c][0]);
glVertex3fv(&dodec[d][0]);
glVertex3fv(&dodec[e][0]);
glEnd();
}
static void
dodecahedron(GLenum type)
{
static int inited = 0;
if (inited == 0) {
inited = 1;
initDodecahedron();
}
pentagon(0, 1, 9, 16, 5, type);
pentagon(1, 0, 3, 18, 7, type);
pentagon(1, 7, 11, 10, 9, type);
pentagon(11, 7, 18, 19, 6, type);
pentagon(8, 17, 16, 9, 10, type);
pentagon(2, 14, 15, 6, 19, type);
pentagon(2, 13, 12, 4, 14, type);
pentagon(2, 19, 18, 3, 13, type);
pentagon(3, 0, 5, 12, 13, type);
pentagon(6, 15, 8, 10, 11, type);
pentagon(4, 17, 8, 15, 14, type);
pentagon(4, 12, 5, 16, 17, type);
}
/* CENTRY */
void APIENTRY
glutWireDodecahedron(void)
{
dodecahedron(GL_LINE_LOOP);
}
void APIENTRY
glutSolidDodecahedron(void)
{
dodecahedron(GL_TRIANGLE_FAN);
}
/* ENDCENTRY */
static void
recorditem(GLfloat * n1, GLfloat * n2, GLfloat * n3,
GLenum shadeType)
{
GLfloat q0[3], q1[3];
DIFF3(n1, n2, q0);
DIFF3(n2, n3, q1);
crossprod(q0, q1, q1);
normalize(q1);
glBegin(shadeType);
glNormal3fv(q1);
glVertex3fv(n1);
glVertex3fv(n2);
glVertex3fv(n3);
glEnd();
}
static void
subdivide(GLfloat * v0, GLfloat * v1, GLfloat * v2,
GLenum shadeType)
{
int depth;
GLfloat w0[3], w1[3], w2[3];
GLfloat l;
int i, j, k, n;
depth = 1;
for (i = 0; i < depth; i++) {
for (j = 0; i + j < depth; j++) {
k = depth - i - j;
for (n = 0; n < 3; n++) {
w0[n] = (i * v0[n] + j * v1[n] + k * v2[n]) / depth;
w1[n] = ((i + 1) * v0[n] + j * v1[n] + (k - 1) * v2[n])
/ depth;
w2[n] = (i * v0[n] + (j + 1) * v1[n] + (k - 1) * v2[n])
/ depth;
}
l = sqrt(w0[0] * w0[0] + w0[1] * w0[1] + w0[2] * w0[2]);
w0[0] /= l;
w0[1] /= l;
w0[2] /= l;
l = sqrt(w1[0] * w1[0] + w1[1] * w1[1] + w1[2] * w1[2]);
w1[0] /= l;
w1[1] /= l;
w1[2] /= l;
l = sqrt(w2[0] * w2[0] + w2[1] * w2[1] + w2[2] * w2[2]);
w2[0] /= l;
w2[1] /= l;
w2[2] /= l;
recorditem(w1, w0, w2, shadeType);
}
}
}
static void
drawtriangle(int i, GLfloat data[][3], int ndx[][3],
GLenum shadeType)
{
GLfloat *x0, *x1, *x2;
x0 = data[ndx[i][0]];
x1 = data[ndx[i][1]];
x2 = data[ndx[i][2]];
subdivide(x0, x1, x2, shadeType);
}
/* octahedron data: The octahedron produced is centered at the
origin and has radius 1.0 */
static GLfloat odata[6][3] =
{
{1.0, 0.0, 0.0},
{-1.0, 0.0, 0.0},
{0.0, 1.0, 0.0},
{0.0, -1.0, 0.0},
{0.0, 0.0, 1.0},
{0.0, 0.0, -1.0}
};
static int ondex[8][3] =
{
{0, 4, 2},
{1, 2, 4},
{0, 3, 4},
{1, 4, 3},
{0, 2, 5},
{1, 5, 2},
{0, 5, 3},
{1, 3, 5}
};
static void
octahedron(GLenum shadeType)
{
int i;
for (i = 7; i >= 0; i--) {
drawtriangle(i, odata, ondex, shadeType);
}
}
/* CENTRY */
void APIENTRY
glutWireOctahedron(void)
{
octahedron(GL_LINE_LOOP);
}
void APIENTRY
glutSolidOctahedron(void)
{
octahedron(GL_TRIANGLES);
}
/* ENDCENTRY */
/* icosahedron data: These numbers are rigged to make an
icosahedron of radius 1.0 */
#define X .525731112119133606
#define Z .850650808352039932
static GLfloat idata[12][3] =
{
{-X, 0, Z},
{X, 0, Z},
{-X, 0, -Z},
{X, 0, -Z},
{0, Z, X},
{0, Z, -X},
{0, -Z, X},
{0, -Z, -X},
{Z, X, 0},
{-Z, X, 0},
{Z, -X, 0},
{-Z, -X, 0}
};
static int index[20][3] =
{
{0, 4, 1},
{0, 9, 4},
{9, 5, 4},
{4, 5, 8},
{4, 8, 1},
{8, 10, 1},
{8, 3, 10},
{5, 3, 8},
{5, 2, 3},
{2, 7, 3},
{7, 10, 3},
{7, 6, 10},
{7, 11, 6},
{11, 0, 6},
{0, 1, 6},
{6, 1, 10},
{9, 0, 11},
{9, 11, 2},
{9, 2, 5},
{7, 2, 11},
};
static void
icosahedron(GLenum shadeType)
{
int i;
for (i = 19; i >= 0; i--) {
drawtriangle(i, idata, index, shadeType);
}
}
/* CENTRY */
void APIENTRY
glutWireIcosahedron(void)
{
icosahedron(GL_LINE_LOOP);
}
void APIENTRY
glutSolidIcosahedron(void)
{
icosahedron(GL_TRIANGLES);
}
/* ENDCENTRY */
/* tetrahedron data: */
#define T 1.73205080756887729
static GLfloat tdata[4][3] =
{
{T, T, T},
{T, -T, -T},
{-T, T, -T},
{-T, -T, T}
};
static int tndex[4][3] =
{
{0, 1, 3},
{2, 1, 0},
{3, 2, 0},
{1, 2, 3}
};
static void
tetrahedron(GLenum shadeType)
{
int i;
for (i = 3; i >= 0; i--)
drawtriangle(i, tdata, tndex, shadeType);
}
/* CENTRY */
void APIENTRY
glutWireTetrahedron(void)
{
tetrahedron(GL_LINE_LOOP);
}
void APIENTRY
glutSolidTetrahedron(void)
{
tetrahedron(GL_TRIANGLES);
}
/* ENDCENTRY */
prefix=@INSTALL_DIR@
exec_prefix=${prefix}
libdir=${exec_prefix}/@LIB_DIR@
includedir=${prefix}/include
Name: glut
Description: Mesa OpenGL Utility Toolkit library
Requires: gl glu
Version: @VERSION@
Libs: -L${libdir} -lglut
Cflags: -I${includedir}
/*
* Mesa 3-D graphics library
* Version: 3.4
* Copyright (C) 1995-1998 Brian Paul
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/*
* DOS/DJGPP glut driver v1.0 for Mesa 4.0
*
* Copyright (C) 2002 - Borca Daniel
* Email : dborca@yahoo.com
* Web : http://www.geocities.com/dborca
*/
#include "GL/glut.h"
#include <sys/time.h>
#define TIMEDELTA(dest, src1, src2) { \
if(((dest).tv_usec = (src1).tv_usec - (src2).tv_usec) < 0) { \
(dest).tv_usec += 1000000; \
(dest).tv_sec = (src1).tv_sec - (src2).tv_sec - 1; \
} else { \
(dest).tv_sec = (src1).tv_sec - (src2).tv_sec; \
} \
}
int APIENTRY glutGet (GLenum type)
{
switch (type) {
case GLUT_WINDOW_RGBA:
return 1;
case GLUT_ELAPSED_TIME: {
static int inited = 0;
static struct timeval elapsed, beginning, now;
if (!inited) {
gettimeofday(&beginning, 0);
inited = 1;
}
gettimeofday(&now, 0);
TIMEDELTA(elapsed, now, beginning);
/* Return elapsed milliseconds. */
return (int) ((elapsed.tv_sec * 1000) + (elapsed.tv_usec / 1000));
}
default:
return 0;
}
}
int APIENTRY glutDeviceGet (GLenum type)
{
return 0;
}
/* Copyright (c) Mark J. Kilgard, 1994. */
/**
(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/gl.h>
#include <GL/glu.h>
#include "GL/glut.h"
/* 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] =
{
/* rim */
{102, 103, 104, 105, 4, 5, 6, 7, 8, 9, 10, 11,
12, 13, 14, 15},
/* body */
{12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
24, 25, 26, 27},
{24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36,
37, 38, 39, 40},
/* lid */
{96, 96, 96, 96, 97, 98, 99, 100, 101, 101, 101,
101, 0, 1, 2, 3,},
{0, 1, 2, 3, 106, 107, 108, 109, 110, 111, 112,
113, 114, 115, 116, 117},
/* bottom */
{118, 118, 118, 118, 124, 122, 119, 121, 123, 126,
125, 120, 40, 39, 38, 37},
/* handle */
{41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
53, 54, 55, 56},
{53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
28, 65, 66, 67},
/* spout */
{68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
80, 81, 82, 83},
{80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
92, 93, 94, 95}
};
/* *INDENT-OFF* */
static float 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 float tex[2][2][2] =
{
{ {0, 0},
{1, 0}},
{ {0, 1},
{1, 1}}
};
/* *INDENT-ON* */
static void
teapot(GLint grid, GLdouble scale, GLenum type)
{
float p[4][4][3], q[4][4][3], r[4][4][3], s[4][4][3];
long i, j, k, l;
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();
glRotatef(270.0, 1.0, 0.0, 0.0);
glScalef(0.5 * scale, 0.5 * scale, 0.5 * scale);
glTranslatef(0.0, 0.0, -1.5);
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;
}
}
}
}
glMap2f(GL_MAP2_TEXTURE_COORD_2, 0, 1, 2, 2, 0, 1, 4, 2,
&tex[0][0][0]);
glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4,
&p[0][0][0]);
glMapGrid2f(grid, 0.0, 1.0, grid, 0.0, 1.0);
glEvalMesh2(type, 0, grid, 0, grid);
glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4,
&q[0][0][0]);
glEvalMesh2(type, 0, grid, 0, grid);
if (i < 6) {
glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4,
&r[0][0][0]);
glEvalMesh2(type, 0, grid, 0, grid);
glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4,
&s[0][0][0]);
glEvalMesh2(type, 0, grid, 0, grid);
}
}
glPopMatrix();
glPopAttrib();
}
/* CENTRY */
void APIENTRY
glutSolidTeapot(GLdouble scale)
{
teapot(7, scale, GL_FILL);
}
void APIENTRY
glutWireTeapot(GLdouble scale)
{
teapot(10, scale, GL_LINE);
}
/* ENDCENTRY */
/*
* Mesa 3-D graphics library
* Version: 4.1
* Copyright (C) 1995-1998 Brian Paul
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/*
* DOS/DJGPP glut driver v1.2 for Mesa 4.1
*
* Copyright (C) 2002 - Borca Daniel
* Email : dborca@yahoo.com
* Web : http://www.geocities.com/dborca
*/
#include <stdio.h>
#include <GL/gl.h>
#include "GL/glut.h"
#include "internal.h"
#define USE_MINI_GLX 1
#if USE_MINI_GLX
#include "GL/miniglx.h"
#else
#include <GL/glx.h>
#endif
static GLXContext context = 0;
static Window win;
static XVisualInfo *visinfo = 0;
static Display *dpy = 0;
int APIENTRY glutCreateWindow (const char *title)
{
XSetWindowAttributes attr;
unsigned long mask;
GLXContext ctx;
int scrnum = 0;
Window root = RootWindow( dpy, scrnum );
if (win)
return 0;
if (!dpy) {
dpy = XOpenDisplay(NULL);
if (!dpy) {
printf("Error: XOpenDisplay failed\n");
exit(1);
}
}
if (!visinfo) {
int attrib[] = {GLX_RGBA,
GLX_RED_SIZE, 1,
GLX_GREEN_SIZE, 1,
GLX_BLUE_SIZE, 1,
GLX_DEPTH_SIZE, 1,
GLX_DOUBLEBUFFER,
None };
visinfo = glXChooseVisual( dpy, scrnum, attrib );
if (!visinfo) {
printf("Error: couldn't get an RGB, Double-buffered visual\n");
exit(1);
}
}
/* window attributes */
attr.background_pixel = 0;
attr.border_pixel = 0;
attr.colormap = XCreateColormap( dpy, root, visinfo->visual, AllocNone);
attr.event_mask = StructureNotifyMask | ExposureMask;
mask = CWBackPixel | CWBorderPixel | CWColormap | CWEventMask;
win = XCreateWindow( dpy, root, g_xpos, g_ypos, g_width, g_height,
0, visinfo->depth, InputOutput,
visinfo->visual, mask, &attr );
if (!win) {
printf("Error: XCreateWindow failed\n");
exit(1);
}
ctx = glXCreateContext( dpy, visinfo, NULL, True );
if (!ctx) {
printf("Error: glXCreateContext failed\n");
exit(1);
}
if (!glXMakeCurrent( dpy, win, ctx )) {
printf("Error: glXMakeCurrent failed\n");
exit(1);
}
if (!(g_display_mode & GLUT_DOUBLE))
glDrawBuffer( GL_FRONT );
XMapWindow( dpy, win );
#if !USE_MINI_GLX
{
XEvent e;
while (1) {
XNextEvent( dpy, &e );
if (e.type == MapNotify && e.xmap.window == win) {
break;
}
}
}
#endif
return 1;
}
int APIENTRY glutCreateSubWindow (int win, int x, int y, int width, int height)
{
return GL_FALSE;
}
void APIENTRY glutDestroyWindow (int idx)
{
if (dpy && win)
XDestroyWindow( dpy, win );
if (dpy)
XCloseDisplay( dpy );
win = 0;
dpy = 0;
}
void APIENTRY glutPostRedisplay (void)
{
g_redisplay = GL_TRUE;
}
void APIENTRY glutSwapBuffers (void)
{
/* if (g_mouse) pc_scare_mouse(); */
if (dpy && win) glXSwapBuffers( dpy, win );
/* if (g_mouse) pc_unscare_mouse(); */
}
int APIENTRY glutGetWindow (void)
{
return 0;
}
void APIENTRY glutSetWindow (int win)
{
}
void APIENTRY glutSetWindowTitle (const char *title)
{
}
void APIENTRY glutSetIconTitle (const char *title)
{
}
void APIENTRY glutPositionWindow (int x, int y)
{
}
void APIENTRY glutReshapeWindow (int width, int height)
{
}
void APIENTRY glutPopWindow (void)
{
}
void APIENTRY glutPushWindow (void)
{
}
void APIENTRY glutIconifyWindow (void)
{
}
void APIENTRY glutShowWindow (void)
{
}
void APIENTRY glutHideWindow (void)
{
}
void APIENTRY glutMainLoop (void)
{
GLboolean idle;
GLboolean have_event;
XEvent evt;
int visible = 0;
glutPostRedisplay();
if (reshape_func) reshape_func(g_width, g_height);
while (GL_TRUE) {
idle = GL_TRUE;
if (visible && idle_func)
have_event = XCheckMaskEvent( dpy, ~0, &evt );
else
have_event = XNextEvent( dpy, &evt );
if (have_event) {
idle = GL_FALSE;
switch(evt.type) {
case MapNotify:
if (visibility_func) {
visibility_func(GLUT_VISIBLE);
}
visible = 1;
break;
case UnmapNotify:
if (visibility_func) {
visibility_func(GLUT_NOT_VISIBLE);
}
visible = 0;
break;
case Expose:
g_redisplay = 1;
break;
}
}
if (visible && g_redisplay && display_func) {
idle = GL_FALSE;
g_redisplay = GL_FALSE;
display_func();
}
if (visible && idle && idle_func) {
idle_func();
}
}
}
/*
* Copyright (C) 2006 Claudio Ciccani <klan@users.sf.net>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/time.h>
#include "internal.h"
typedef void (GLUTCALLBACK *__GlutTimerCallback) ( int value );
typedef struct __GlutTimer_s {
unsigned int interval;
struct timeval expire;
__GlutTimerCallback func;
int value;
struct __GlutTimer_s *next;
struct __GlutTimer_s *prev;
} __GlutTimer;
/*****************************************************************************/
static __GlutTimer *g_timers = NULL;
/*****************************************************************************/
void GLUTAPIENTRY
glutDisplayFunc( void (GLUTCALLBACK *func) (void) )
{
display_func = func;
}
void GLUTAPIENTRY
glutReshapeFunc( void (GLUTCALLBACK *func) (int width, int height) )
{
reshape_func = func;
}
void GLUTAPIENTRY
glutKeyboardFunc( void (GLUTCALLBACK *func) (unsigned char key, int x, int y) )
{
keyboard_func = func;
}
void GLUTAPIENTRY
glutMouseFunc( void (GLUTCALLBACK *func) (int button, int state, int x, int y) )
{
mouse_func = func;
}
void GLUTAPIENTRY
glutMotionFunc( void (GLUTCALLBACK *func) (int x, int y) )
{
motion_func = func;
}
void GLUTAPIENTRY
glutPassiveMotionFunc( void (GLUTCALLBACK *func) (int x, int y) )
{
passive_motion_func = func;
}
void GLUTAPIENTRY
glutEntryFunc( void (GLUTCALLBACK *func) (int state) )
{
entry_func = func;
}
void GLUTAPIENTRY
glutVisibilityFunc( void (GLUTCALLBACK *func) (int state) )
{
visibility_func = func;
}
void GLUTAPIENTRY
glutMenuStateFunc( void (GLUTCALLBACK *func) (int state) )
{
menu_state_func = func;
}
void GLUTAPIENTRY
glutSpecialFunc( void (GLUTCALLBACK *func) (int key, int x, int y) )
{
special_func = func;
}
void GLUTAPIENTRY
glutSpaceballMotionFunc( void (GLUTCALLBACK *func) (int x, int y, int z) )
{
}
void GLUTAPIENTRY
glutSpaceballRotateFunc( void (GLUTCALLBACK *func) (int x, int y, int z) )
{
}
void GLUTAPIENTRY
glutSpaceballButtonFunc( void (GLUTCALLBACK *func) (int button, int state) )
{
}
void GLUTAPIENTRY
glutButtonBoxFunc( void (GLUTCALLBACK *func) (int button, int state) )
{
}
void GLUTAPIENTRY
glutDialsFunc( void (GLUTCALLBACK *func) (int dial, int value) )
{
}
void GLUTAPIENTRY
glutTabletMotionFunc( void (GLUTCALLBACK *func) (int x, int y) )
{
}
void GLUTAPIENTRY
glutTabletButtonFunc( void (GLUTCALLBACK *func) (int button, int state, int x, int y) )
{
}
void GLUTAPIENTRY
glutMenuStatusFunc( void (GLUTCALLBACK *func) (int status, int x, int y) )
{
}
void GLUTAPIENTRY
glutOverlayDisplayFunc( void (GLUTCALLBACK *func) (void) )
{
}
void GLUTAPIENTRY
glutWindowStatusFunc( void (GLUTCALLBACK *func) (int state) )
{
}
void GLUTAPIENTRY
glutKeyboardUpFunc( void (GLUTCALLBACK *func) (unsigned char key, int x, int y) )
{
keyboard_up_func = func;
}
void GLUTAPIENTRY
glutSpecialUpFunc( void (GLUTCALLBACK *func) (int key, int x, int y) )
{
special_up_func = func;
}
void GLUTAPIENTRY
glutJoystickFunc( void (GLUTCALLBACK *func)(unsigned int buttons, int x, int y, int z), int pollInterval )
{
joystick_func = func;
/* FIXME: take care of pollInterval */
}
void GLUTAPIENTRY
glutIdleFunc( void (GLUTCALLBACK *func) (void) )
{
idle_func = func;
}
void GLUTAPIENTRY
glutTimerFunc( unsigned int msec, void (GLUTCALLBACK *func) (int value), int value )
{
__GlutTimer *timer;
struct timeval now;
if (!func)
return;
timer = calloc( 1, sizeof(__GlutTimer) );
if (!timer)
__glutFatalError( "out of memory" );
gettimeofday( &now, NULL );
timer->interval = msec;
timer->expire.tv_sec = now.tv_sec + (now.tv_usec/1000 + msec) / 1000;
timer->expire.tv_usec = (now.tv_usec + msec*1000) % 1000000;
timer->func = func;
timer->value = value;
if (g_timers) {
timer->prev = g_timers->prev;
g_timers->prev->next = timer;
g_timers->prev = timer;
}
else {
g_timers = timer;
g_timers->prev = timer;
}
}
void
__glutHandleTimers( void )
{
__GlutTimer *cur;
struct timeval now;
for (cur = g_timers; cur; cur = cur->next ) {
gettimeofday( &now, NULL );
if (cur->expire.tv_sec > now.tv_sec ||
(cur->expire.tv_sec == now.tv_sec &&
cur->expire.tv_usec >= now.tv_usec))
{
g_idle = GL_FALSE;
cur->func( cur->value );
cur->expire.tv_sec += (cur->expire.tv_usec/1000 + cur->interval) / 1000;
cur->expire.tv_usec = (cur->expire.tv_usec + cur->interval*1000) % 1000000;
}
}
}
void
__glutFreeTimers( void )
{
__GlutTimer *cur = g_timers;
while (cur) {
__GlutTimer *next = cur->next;
free( cur );
cur = next;
}
g_timers = NULL;
}
# subset glut
TOP = ../../..
include $(TOP)/configs/current
MARK = $(TOP)/src/glut/glx
GLUT_MAJOR = 3
GLUT_MINOR = 7
GLUT_TINY = 1
INCLUDES = -I$(TOP)/include -I$(MARK) $(shell pkg-config --cflags directfb)
GLUT_LIB_DEPS += $(shell pkg-config --libs directfb)
CORE_SOURCES = \
callback.c \
color.c \
cursor.c \
ext.c \
events.c \
font.c \
game.c \
globals.c \
init.c \
menu.c \
models.c \
overlay.c \
state.c \
teapot.c \
window.c \
MARK_SOURCES = \
$(MARK)/glut_8x13.c \
$(MARK)/glut_9x15.c \
$(MARK)/glut_hel10.c \
$(MARK)/glut_hel12.c \
$(MARK)/glut_hel18.c \
$(MARK)/glut_tr10.c \
$(MARK)/glut_tr24.c
SOURCES = $(CORE_SOURCES) $(MARK_SOURCES)
OBJECTS = $(SOURCES:.c=.o)
##### RULES #####
.c.o:
$(CC) -c $(INCLUDES) $(CFLAGS) $(DEFINES) $< -o $@
.S.o:
$(CC) -c $(INCLUDES) $(CFLAGS) $(DEFINES) $< -o $@
##### TARGETS #####
default: depend $(TOP)/$(LIB_DIR)/$(GLUT_LIB_NAME)
# Make the library
$(TOP)/$(LIB_DIR)/$(GLUT_LIB_NAME): depend $(OBJECTS)
$(TOP)/bin/mklib -o $(GLUT_LIB) -linker '$(CC)' -ldflags '$(LDFLAGS)' \
-major $(GLUT_MAJOR) -minor $(GLUT_MINOR) -patch $(GLUT_TINY) \
$(GLUT_LIB_DEPS) -install $(TOP)/$(LIB_DIR) \
$(MKLIB_OPTIONS) $(OBJECTS)
# Run 'make -f Makefile.solo dep' to update the dependencies if you change
# what's included by any source file.
depend: $(SOURCES)
touch depend
$(MKDEP) $(MKDEP_OPTIONS) $(INCLUDES) $(SOURCES) > /dev/null
# Emacs tags
tags:
etags `find . -name \*.[ch]` `find ../include`
# Remove .o and backup files
clean: depend
-rm -f depend
-rm -f *.o *~ *.o *~ *.so libglut.so.3.7
include depend
DirectFB GLUT Implementation NOTES
----------------------------------
* To have high performance rendering, it's really important to
use glutEnterGameMode() instead of glutCreateWindow()/glutFullScreen().
You can also force a windowed application to game mode by setting
the environment variable "__GLUT_GAME_MODE".
#ifndef __GLUT_CURSORS_H__
#define __GLUT_CURSORS_H__
static const unsigned char cur_right_arrow[] = {
16, /* size */
1, 2, /* hotspot */
/* data */
0x00, 0x00, 0x60, 0x00, 0x78, 0x00, 0x3e, 0x00,
0x3f, 0x80, 0x1f, 0xe0, 0x1f, 0xf8, 0x0f, 0x80,
0x0f, 0xc0, 0x06, 0xe0, 0x06, 0x70, 0x02, 0x38,
0x02, 0x1c, 0x00, 0x0e, 0x00, 0x04, 0x00, 0x00,
/* mask */
0xe0, 0x00, 0xf8, 0x00, 0xfe, 0x00, 0x7f, 0x80,
0x7f, 0xe0, 0x3f, 0xf8, 0x3f, 0xfc, 0x1f, 0xfc,
0x1f, 0xe0, 0x0f, 0xf0, 0x0f, 0xf8, 0x07, 0x7c,
0x07, 0x3e, 0x02, 0x1f, 0x00, 0x0e, 0x00, 0x04,
};
static const unsigned char cur_left_arrow[] = {
16, /* size */
1, 15, /* hotspot */
/* data */
0x00, 0x00, 0x80, 0x06, 0x00, 0x1e, 0x00, 0x7c,
0x01, 0xfc, 0x07, 0xf8, 0x1f, 0xf8, 0x01, 0xf0,
0x01, 0xf0, 0x02, 0x60, 0x04, 0x60, 0x08, 0x40,
0x10, 0x40, 0x20, 0x00, 0x40, 0x00, 0x00, 0x00,
/* mask */
0x00, 0x07, 0x00, 0x1f, 0x00, 0x7f, 0x01, 0xfe,
0x07, 0xfe, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xf8,
0x03, 0xf8, 0x07, 0xf0, 0x0e, 0xf0, 0x1c, 0xe0,
0x38, 0xe0, 0x70, 0xe0, 0xe0, 0x00, 0xc0, 0x00,
};
static const unsigned char cur_info[] = {
16, /* size */
0, 2, /* hotspot */
/* data */
0x30, 0x00, 0x3c, 0x00, 0x0f, 0x00, 0x07, 0x80,
0x03, 0xc0, 0x07, 0xe0, 0x0f, 0xf0, 0x07, 0xf4,
0x0f, 0xfe, 0x0f, 0xfa, 0x07, 0xe0, 0x03, 0xe0,
0x00, 0x52, 0x00, 0x46, 0x00, 0x2c, 0x00, 0x18,
/* mask */
0xb8, 0x00, 0x3e, 0x00, 0x1f, 0x80, 0x0f, 0xc0,
0x07, 0xe0, 0x0f, 0xf0, 0x1f, 0xfc, 0x1f, 0xfe,
0x1f, 0xfe, 0x1f, 0xfe, 0x0f, 0xfe, 0x07, 0xfe,
0x03, 0xfe, 0x00, 0xfe, 0x00, 0x7e, 0x00, 0x3c,
};
static const unsigned char cur_destroy[] = {
16, /* size */
12, 8, /* hotspot */
/* data */
0x01, 0xe0, 0x03, 0xf0, 0x07, 0xf8, 0x0c, 0xcc,
0x0c, 0xcc, 0x07, 0xf8, 0x03, 0xf0, 0x01, 0xe0,
0x21, 0xe1, 0x61, 0xe1, 0x10, 0xc2, 0x0e, 0x1c,
0x01, 0xe0, 0x47, 0xf8, 0x7c, 0x0f, 0x20, 0x01,
/* mask */
0x03, 0xf0, 0x07, 0xf8, 0x0f, 0xfc, 0x1f, 0xfe,
0x1f, 0xfe, 0x0f, 0xfc, 0x07, 0xf8, 0x83, 0xf1,
0xe3, 0xf1, 0xf3, 0xf3, 0x39, 0xef, 0x1e, 0x1e,
0x01, 0xe0, 0xc7, 0xfe, 0xff, 0xff, 0x7c, 0x0f,
};
static const unsigned char cur_help[] = {
16, /* size */
7, 8, /* hotspot */
/* data */
0x83, 0xe0, 0x07, 0xf0, 0x0e, 0x38, 0x0c, 0x18,
0x0c, 0x38, 0x0e, 0x30, 0x07, 0x00, 0x03, 0xc0,
0x01, 0xc0, 0x01, 0x40, 0x01, 0x40, 0x07, 0x70,
0x03, 0x60, 0x01, 0xc0, 0x00, 0x80, 0x00, 0x00,
/* mask */
0x03, 0xe0, 0x07, 0xf0, 0x0f, 0xf8, 0x1f, 0xfc,
0x1e, 0x3c, 0x1e, 0x7c, 0x1f, 0x78, 0x0f, 0xf0,
0x07, 0xe0, 0x03, 0xe0, 0x03, 0xe0, 0x07, 0xf0,
0x0f, 0xf8, 0x07, 0xf0, 0x03, 0xe0, 0x01, 0xc0,
};
static const unsigned char cur_cycle[] = {
16, /* size */
7, 9, /* hotspot */
/* data */
0x00, 0x00, 0x07, 0xe2, 0x0f, 0xf6, 0x18, 0x3e,
0x10, 0x12, 0x00, 0x32, 0x00, 0x7e, 0x00, 0x00,
0x00, 0x00, 0x7e, 0x00, 0x4c, 0x00, 0x48, 0x08,
0x7c, 0x18, 0x6f, 0xf0, 0x47, 0xe0, 0x00, 0x00,
/* mask */
0x07, 0xe3, 0x0f, 0xf7, 0x1f, 0xff, 0x3f, 0xff,
0x38, 0x3f, 0x30, 0xff, 0x00, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0x00, 0xfe, 0x0c, 0xfc, 0x1c,
0xff, 0xfc, 0xff, 0xf8, 0xef, 0xf0, 0xc7, 0xe0,
};
static const unsigned char cur_spray[] = {
16, /* size */
2, 4, /* hotspot */
/* data */
0x98, 0x00, 0x02, 0x00, 0x18, 0xb0, 0x02, 0x78,
0x18, 0x58, 0x00, 0xfc, 0x00, 0x84, 0x00, 0x9c,
0x00, 0x94, 0x00, 0x9c, 0x00, 0x94, 0x00, 0x9c,
0x00, 0x9c, 0x00, 0x84, 0x00, 0x84, 0x00, 0xfc,
/* mask */
0x30, 0x00, 0x34, 0x60, 0x35, 0xf0, 0x35, 0xf0,
0x35, 0xf8, 0x03, 0xfc, 0x03, 0xfc, 0x03, 0xfc,
0x03, 0xfc, 0x03, 0xfc, 0x03, 0xfc, 0x03, 0xfc,
0x03, 0xfc, 0x03, 0xfc, 0x03, 0xfc, 0x03, 0xfc,
};
static const unsigned char cur_wait[] = {
16, /* size */
9, 1, /* hotspot */
/* data */
0x07, 0xf8, 0x07, 0xf8, 0x07, 0xf8, 0x0f, 0xfc,
0x18, 0x86, 0x30, 0x83, 0xe0, 0x81, 0xe1, 0xc1,
0xe1, 0xc1, 0xe0, 0x21, 0x30, 0x13, 0x18, 0x06,
0x0f, 0xfc, 0x07, 0xf8, 0x07, 0xf8, 0x07, 0xf8,
/* mask */
0x0f, 0xfc, 0x0f, 0xfc, 0x0f, 0xfc, 0x1f, 0xfe,
0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff,
0x1f, 0xfe, 0x0f, 0xfc, 0x0f, 0xfc, 0x0f, 0xfc,
};
static const unsigned char cur_text[] = {
16, /* size */
8, 8, /* hotspot */
/* data */
0x00, 0x00, 0x0f, 0x70, 0x09, 0xc0, 0x00, 0x80,
0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80,
0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80,
0x00, 0x80, 0x01, 0xc0, 0x07, 0x70, 0x00, 0x00,
/* mask */
0x0f, 0x78, 0x0f, 0xf8, 0x0f, 0xf8, 0x03, 0xe0,
0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0,
0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0,
0x03, 0xe0, 0x0f, 0xf8, 0x0f, 0xf8, 0x0f, 0x78,
};
static const unsigned char cur_crosshair[] = {
16, /* size */
7, 9, /* hotspot */
/* data */
0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80,
0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0xff, 0x7f,
0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80,
0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00,
/* mask */
0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0,
0x01, 0xc0, 0x01, 0xc0, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0,
0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0,
};
static const unsigned char cur_up_down[] = {
16, /* size */
7, 8, /* hotspot */
/* data */
0x00, 0x80, 0x09, 0xc0, 0x03, 0xe0, 0x07, 0xf0,
0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40,
0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x07, 0xf0,
0x03, 0xe0, 0x01, 0xc0, 0x00, 0x80, 0x00, 0x00,
/* mask */
0x01, 0xc0, 0x03, 0xe0, 0x07, 0xf0, 0x0f, 0xf8,
0x0f, 0xf8, 0x03, 0xe0, 0x03, 0xe0, 0x03, 0xe0,
0x03, 0xe0, 0x03, 0xe0, 0x0f, 0xf8, 0x0f, 0xf8,
0x07, 0xf0, 0x03, 0xe0, 0x01, 0xc0, 0x00, 0x00,
};
static const unsigned char cur_left_right[] = {
16, /* size */
7, 8, /* hotspot */
/* data */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08, 0x08, 0x18, 0x0c, 0x3f, 0xfe, 0x78, 0x0f,
0x3f, 0xfe, 0x18, 0x0c, 0x08, 0x08, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
/* mask */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8c, 0x18,
0x1c, 0x1c, 0x3f, 0xfe, 0x7f, 0xff, 0x7f, 0xff,
0x7f, 0xff, 0x3f, 0xfe, 0x1c, 0x1c, 0x0c, 0x18,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
static const unsigned char cur_top_side[] = {
16, /* size */
1, 8, /* hotspot */
/* data */
0x00, 0x00, 0xff, 0xfe, 0x3f, 0xfe, 0x00, 0x00,
0x00, 0x80, 0x01, 0xc0, 0x02, 0xa0, 0x04, 0x90,
0x08, 0x88, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80,
0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00,
/* mask */
0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff,
0x01, 0xc0, 0x03, 0xe0, 0x07, 0xf0, 0x0f, 0xf8,
0x1d, 0xdc, 0x19, 0xcc, 0x01, 0xc0, 0x01, 0xc0,
0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0,
};
static const unsigned char cur_bottom_side[] = {
16, /* size */
14, 8, /* hotspot */
/* data */
0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80,
0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x08, 0x88,
0x04, 0x90, 0x02, 0xa0, 0x01, 0xc0, 0x00, 0x80,
0x00, 0x00, 0x3f, 0xfe, 0x3f, 0xfe, 0x00, 0x00,
/* mask */
0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0,
0x01, 0xc0, 0x01, 0xc0, 0x19, 0xcc, 0x1d, 0xdc,
0x0f, 0xf8, 0x07, 0xf0, 0x03, 0xe0, 0x01, 0xc0,
0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff,
};
static const unsigned char cur_left_side[] = {
16, /* size */
7, 15, /* hotspot */
/* data */
0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x01, 0x06,
0x00, 0x86, 0x00, 0x46, 0x00, 0x26, 0x7f, 0xf6,
0x00, 0x26, 0x00, 0x46, 0x00, 0x86, 0x01, 0x06,
0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
/* mask */
0x00, 0x0f, 0x00, 0x0f, 0x03, 0x0f, 0x03, 0x8f,
0x01, 0xcf, 0x00, 0xef, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x00, 0xef, 0x01, 0xcf, 0x03, 0x8f,
0x03, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x00,
};
static const unsigned char cur_right_side[] = {
16, /* size */
7, 2, /* hotspot */
/* data */
0x00, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x80,
0x61, 0x00, 0x62, 0x00, 0x64, 0x00, 0x6f, 0xfe,
0x64, 0x00, 0x62, 0x00, 0x61, 0x00, 0x60, 0x80,
0x60, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
/* mask */
0xf0, 0x00, 0xf0, 0x00, 0xf0, 0xc0, 0xf1, 0xc0,
0xf3, 0x80, 0xf7, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xf7, 0x00, 0xf3, 0x80, 0xf1, 0xc0,
0xf0, 0xc0, 0xf0, 0x00, 0xf0, 0x00, 0x00, 0x00,
};
static const unsigned char cur_top_left[] = {
16, /* size */
1, 15, /* hotspot */
/* data */
0x00, 0x00, 0xff, 0xfe, 0x7f, 0xfe, 0x00, 0x06,
0x00, 0x06, 0x00, 0x06, 0x1f, 0xc6, 0x00, 0xc6,
0x01, 0x46, 0x02, 0x46, 0x04, 0x46, 0x08, 0x46,
0x10, 0x46, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00,
/* mask */
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x0f, 0x3f, 0xef, 0x3f, 0xef, 0x3f, 0xef,
0x03, 0xef, 0x07, 0xef, 0x0e, 0xef, 0x1c, 0xef,
0x38, 0xef, 0x30, 0xef, 0x00, 0x0f, 0x00, 0x0f,
};
static const unsigned char cur_top_right[] = {
16, /* size */
1, 2, /* hotspot */
/* data */
0x00, 0x00, 0xff, 0xfe, 0x7f, 0xfe, 0x60, 0x00,
0x60, 0x00, 0x60, 0x00, 0x63, 0xf8, 0x63, 0x00,
0x62, 0x80, 0x62, 0x40, 0x62, 0x20, 0x62, 0x10,
0x62, 0x08, 0x60, 0x00, 0x60, 0x00, 0x00, 0x00,
/* mask */
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xf0, 0x00, 0xf7, 0xfc, 0xf7, 0xfc, 0xf7, 0xfc,
0xf7, 0xc0, 0xf7, 0xe0, 0xf7, 0x70, 0xf7, 0x38,
0xf7, 0x1c, 0xf7, 0x0c, 0xf0, 0x00, 0xf0, 0x00,
};
static const unsigned char cur_bottom_right[] = {
16, /* size */
14, 2, /* hotspot */
/* data */
0x00, 0x00, 0x60, 0x00, 0x60, 0x00, 0x62, 0x08,
0x62, 0x10, 0x62, 0x20, 0x62, 0x40, 0x62, 0x80,
0x63, 0x00, 0x63, 0xf8, 0x60, 0x00, 0x60, 0x00,
0x60, 0x00, 0x7f, 0xfe, 0x7f, 0xfe, 0x00, 0x00,
/* mask */
0xf0, 0x00, 0xf0, 0x00, 0xf7, 0x0c, 0xf7, 0x1c,
0xf7, 0x38, 0xf7, 0x70, 0xf7, 0xe0, 0xf7, 0xc0,
0xf7, 0xfc, 0xf7, 0xfc, 0xf7, 0xfc, 0xf0, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
};
static const unsigned char cur_bottom_left[] = {
16, /* size */
14, 15, /* hotspot */
/* data */
0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x10, 0x46,
0x08, 0x46, 0x04, 0x46, 0x02, 0x46, 0x01, 0x46,
0x00, 0xc6, 0x1f, 0xc6, 0x00, 0x06, 0x00, 0x06,
0x00, 0x06, 0x7f, 0xfe, 0x7f, 0xfe, 0x00, 0x00,
/* mask */
0x00, 0x0f, 0x00, 0x0f, 0x30, 0xef, 0x38, 0xef,
0x1c, 0xef, 0x0e, 0xef, 0x07, 0xef, 0x03, 0xef,
0x3f, 0xef, 0x3f, 0xef, 0x3f, 0xef, 0x00, 0x0f,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
};
#endif /* __GLUT_CURSORS_H__ */
/*
* Copyright (C) 2006 Claudio Ciccani <klan@users.sf.net>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
#include "internal.h"
void GLUTAPIENTRY
glutSetColor( int index, GLfloat red, GLfloat green, GLfloat blue )
{
}
GLfloat GLUTAPIENTRY
glutGetColor( int index, int component )
{
return 0.0;
}
void GLUTAPIENTRY
glutCopyColormap( int win )
{
}
/*
* Copyright (C) 2006 Claudio Ciccani <klan@users.sf.net>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "internal.h"
#include "cursors.h"
void GLUTAPIENTRY
glutSetCursor( int type )
{
const unsigned char *cursor;
DFBSurfaceDescription dsc;
IDirectFBSurface *shape;
if (!g_current || !g_current->window)
return;
if (g_current->cursor == type)
return;
switch (type) {
case GLUT_CURSOR_RIGHT_ARROW:
cursor = &cur_right_arrow[0];
break;
case GLUT_CURSOR_LEFT_ARROW:
cursor = &cur_left_arrow[0];
break;
case GLUT_CURSOR_INFO:
cursor = &cur_info[0];
break;
case GLUT_CURSOR_DESTROY:
cursor = &cur_destroy[0];
break;
case GLUT_CURSOR_HELP:
cursor = &cur_help[0];
break;
case GLUT_CURSOR_CYCLE:
cursor = &cur_cycle[0];
break;
case GLUT_CURSOR_SPRAY:
cursor = &cur_spray[0];
break;
case GLUT_CURSOR_WAIT:
cursor = &cur_wait[0];
break;
case GLUT_CURSOR_TEXT:
cursor = &cur_text[0];
break;
case GLUT_CURSOR_CROSSHAIR:
cursor = &cur_crosshair[0];
break;
case GLUT_CURSOR_UP_DOWN:
cursor = &cur_up_down[0];
break;
case GLUT_CURSOR_LEFT_RIGHT:
cursor = &cur_left_right[0];
break;
case GLUT_CURSOR_TOP_SIDE:
cursor = &cur_top_side[0];
break;
case GLUT_CURSOR_BOTTOM_SIDE:
cursor = &cur_bottom_side[0];
break;
case GLUT_CURSOR_LEFT_SIDE:
cursor = &cur_left_side[0];
break;
case GLUT_CURSOR_RIGHT_SIDE:
cursor = &cur_right_side[0];
break;
case GLUT_CURSOR_TOP_LEFT_CORNER:
cursor = &cur_top_left[0];
break;
case GLUT_CURSOR_TOP_RIGHT_CORNER:
cursor = &cur_top_right[0];
break;
case GLUT_CURSOR_BOTTOM_RIGHT_CORNER:
cursor = &cur_bottom_right[0];
break;
case GLUT_CURSOR_BOTTOM_LEFT_CORNER:
cursor = &cur_bottom_left[0];
break;
case GLUT_CURSOR_NONE:
cursor = NULL;
break;
default:
cursor = &cur_right_arrow[0];
break;
}
dsc.flags = DSDESC_WIDTH | DSDESC_HEIGHT | DSDESC_PIXELFORMAT;
dsc.width =
dsc.height = cursor ? cursor[0] : 8;
dsc.pixelformat = DSPF_ARGB;
if (dfb->CreateSurface( dfb, &dsc, &shape ))
return;
if (cursor) {
__u8 *src = (__u8*) &cursor[3];
__u8 *msk = src + cursor[0]*cursor[0]/8;
void *dst;
int pitch;
int x, y;
if (shape->Lock( shape, DSLF_WRITE, &dst, &pitch )) {
shape->Release( shape );
return;
}
for (y = 0; y < cursor[0]; y++) {
for (x = 0; x < cursor[0]; x++) {
((__u32*)dst)[x] =
((src[x>>3] & (0x80 >> (x&7))) ? 0 : 0x00ffffff) |
((msk[x>>3] & (0x80 >> (x&7))) ? 0xff000000 : 0);
}
dst += pitch;
src += cursor[0]/8;
msk += cursor[0]/8;
}
shape->Unlock( shape );
}
else {
/* Invisible cursor */
shape->Clear( shape, 0, 0, 0, 0 );
}
g_current->window->SetCursorShape( g_current->window, shape,
cursor ? cursor[1] : 0,
cursor ? cursor[2] : 0 );
g_current->cursor = type;
shape->Release( shape );
}
void GLUTAPIENTRY
glutWarpPointer( int x, int y )
{
if (g_current) {
if (!g_game) {
int wx, wy;
g_current->window->GetPosition( g_current->window, &wx, &wy );
primary->WarpCursor( primary, wx+x, wy+y );
}
else {
g_current->cx = x;
g_current->cy = y;
}
}
}
/*
* Copyright (C) 2006 Claudio Ciccani <klan@users.sf.net>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
#include "internal.h"
IDirectFB *dfb = NULL;
IDirectFBDisplayLayer *primary = NULL;
IDirectFBEventBuffer *events = NULL;
IDirectFBInputDevice *keyboard = NULL;
IDirectFBInputDevice *mouse = NULL;
IDirectFBInputDevice *joystick = NULL;
GLenum g_display_mode = 0;
GLuint g_width = DEFAULT_WIDTH;
GLuint g_height = DEFAULT_HEIGHT;
GLint g_xpos = 0;
GLint g_ypos = 0;
GLint g_bpp = 0;
GLboolean g_idle = GL_TRUE;
__GlutWindow *g_current = NULL;
__GlutWindow *g_game = NULL;
void (GLUTCALLBACK *display_func) (void) = 0;
void (GLUTCALLBACK *reshape_func) (int width, int height) = 0;
void (GLUTCALLBACK *keyboard_func) (unsigned char key, int x, int y) = 0;
void (GLUTCALLBACK *mouse_func) (int button, int state, int x, int y) = 0;
void (GLUTCALLBACK *motion_func) (int x, int y) = 0;
void (GLUTCALLBACK *passive_motion_func) (int x, int y) = 0;
void (GLUTCALLBACK *entry_func) (int state) = 0;
void (GLUTCALLBACK *visibility_func) (int state) = 0;
void (GLUTCALLBACK *idle_func) (void) = 0;
void (GLUTCALLBACK *menu_state_func) (int state) = 0;
void (GLUTCALLBACK *special_func) (int key, int x, int y) = 0;
void (GLUTCALLBACK *spaceball_motion_func) (int x, int y, int z) = 0;
void (GLUTCALLBACK *spaceball_rotate_func) (int x, int y, int z) = 0;
void (GLUTCALLBACK *spaceball_button_func) (int button, int state) = 0;
void (GLUTCALLBACK *button_box_func) (int button, int state) = 0;
void (GLUTCALLBACK *dials_func) (int dial, int value) = 0;
void (GLUTCALLBACK *tablet_motion_func) (int x, int y) = 0;
void (GLUTCALLBACK *tabled_button_func) (int button, int state, int x, int y) = 0;
void (GLUTCALLBACK *menu_status_func) (int status, int x, int y) = 0;
void (GLUTCALLBACK *overlay_display_func) (void) = 0;
void (GLUTCALLBACK *window_status_func) (int state) = 0;
void (GLUTCALLBACK *keyboard_up_func) (unsigned char key, int x, int y) = 0;
void (GLUTCALLBACK *special_up_func) (int key, int x, int y) = 0;
void (GLUTCALLBACK *joystick_func) (unsigned int buttons, int x, int y, int z) = 0;
/*
* Copyright (C) 2006 Claudio Ciccani <klan@users.sf.net>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include "internal.h"
/*****************************************************************************/
static int g_ignore_key_repeat = 0;
/*****************************************************************************/
int GLUTAPIENTRY
glutDeviceGet( GLenum type )
{
switch (type) {
case GLUT_HAS_KEYBOARD:
return (keyboard != NULL);
case GLUT_HAS_MOUSE:
return (mouse != NULL);
case GLUT_NUM_MOUSE_BUTTONS:
if (mouse) {
DFBInputDeviceDescription dsc;
mouse->GetDescription( mouse, &dsc );
return dsc.max_button+1;
}
break;
case GLUT_DEVICE_IGNORE_KEY_REPEAT:
return g_ignore_key_repeat;
case GLUT_DEVICE_KEY_REPEAT:
return (g_ignore_key_repeat) ? GLUT_KEY_REPEAT_OFF
: GLUT_KEY_REPEAT_ON;
case GLUT_HAS_JOYSTICK:
case GLUT_OWNS_JOYSTICK:
return (g_game && joystick); /* only available in game mode */
case GLUT_JOYSTICK_BUTTONS:
if (joystick) {
DFBInputDeviceDescription dsc;
joystick->GetDescription( joystick, &dsc );
return dsc.max_button+1;
}
break;
case GLUT_JOYSTICK_AXES:
if (joystick) {
DFBInputDeviceDescription dsc;
joystick->GetDescription( joystick, &dsc );
return dsc.max_axis+1;
}
break;
case GLUT_JOYSTICK_POLL_RATE:
if (joystick)
return 1; /* hack */
break;
default:
break;
}
return 0;
}
int GLUTAPIENTRY
glutGetModifiers( void )
{
if (g_current)
return g_current->modifiers;
return 0;
}
void GLUTAPIENTRY
glutIgnoreKeyRepeat( int ignore )
{
g_ignore_key_repeat = ignore;
}
void GLUTAPIENTRY
glutSetKeyRepeat( int mode )
{
g_ignore_key_repeat = (mode == GLUT_KEY_REPEAT_OFF);
}
void GLUTAPIENTRY
glutForceJoystickFunc( void )
{
if (g_game && joystick && joystick_func) {
joystick_func( g_game->buttons,
g_game->jx, g_game->jy, g_game->jz );
}
}
static int
__glutSpecialKey( DFBInputDeviceKeySymbol key )
{
switch (key) {
case DIKS_F1:
return GLUT_KEY_F1;
case DIKS_F2:
return GLUT_KEY_F2;
case DIKS_F3:
return GLUT_KEY_F3;
case DIKS_F4:
return GLUT_KEY_F4;
case DIKS_F5:
return GLUT_KEY_F5;
case DIKS_F6:
return GLUT_KEY_F6;
case DIKS_F7:
return GLUT_KEY_F7;
case DIKS_F8:
return GLUT_KEY_F8;
case DIKS_F9:
return GLUT_KEY_F9;
case DIKS_F10:
return GLUT_KEY_F10;
case DIKS_F11:
return GLUT_KEY_F11;
case DIKS_F12:
return GLUT_KEY_F12;
case DIKS_CURSOR_LEFT:
return GLUT_KEY_LEFT;
case DIKS_CURSOR_UP:
return GLUT_KEY_UP;
case DIKS_CURSOR_RIGHT:
return GLUT_KEY_RIGHT;
case DIKS_CURSOR_DOWN:
return GLUT_KEY_DOWN;
case DIKS_PAGE_UP:
return GLUT_KEY_PAGE_UP;
case DIKS_PAGE_DOWN:
return GLUT_KEY_PAGE_DOWN;
case DIKS_HOME:
return GLUT_KEY_HOME;
case DIKS_END:
return GLUT_KEY_END;
case DIKS_INSERT:
return GLUT_KEY_INSERT;
default:
break;
}
return 0;
}
static int
__glutButton( DFBInputDeviceButtonIdentifier button )
{
switch (button) {
case DIBI_LEFT:
return GLUT_LEFT_BUTTON;
case DIBI_MIDDLE:
return GLUT_MIDDLE_BUTTON;
case DIBI_RIGHT:
return GLUT_RIGHT_BUTTON;
default:
break;
}
return 0;
}
static int
__glutModifiers( DFBInputDeviceModifierMask mask )
{
return ((mask & DIMM_SHIFT) ? GLUT_ACTIVE_SHIFT : 0) |
((mask & DIMM_CONTROL) ? GLUT_ACTIVE_CTRL : 0) |
((mask & DIMM_ALT) ? GLUT_ACTIVE_ALT : 0);
}
static void
__glutWindowEvent( DFBWindowEvent *e, DFBWindowEvent *p )
{
__GlutWindow *window;
window = __glutFindWindow( e->window_id );
if (!window) /* window was destroyed */
return;
switch (e->type) {
case DWET_KEYDOWN:
window->modifiers = __glutModifiers( e->modifiers );
if (g_ignore_key_repeat && p) {
if (p->type == DWET_KEYDOWN &&
p->window_id == e->window_id &&
p->key_symbol == e->key_symbol)
break;
}
if (DFB_KEY_IS_ASCII( e->key_symbol )) {
if (keyboard_func) {
__glutSetWindow( window );
keyboard_func( e->key_symbol, e->x, e->y );
}
}
else {
int key = __glutSpecialKey( e->key_symbol );
if (key && special_func) {
__glutSetWindow( window );
special_func( key, e->x, e->y );
}
}
break;
case DWET_KEYUP:
window->modifiers = __glutModifiers( e->modifiers );
if (DFB_KEY_IS_ASCII( e->key_symbol )) {
if (keyboard_up_func) {
__glutSetWindow( window );
keyboard_up_func( e->key_symbol, e->x, e->y );
}
}
else {
int key = __glutSpecialKey( e->key_symbol );
if (key && special_up_func) {
__glutSetWindow( window );
special_up_func( key, e->x, e->y );
}
}
break;
case DWET_BUTTONDOWN:
if (mouse_func) {
__glutSetWindow( window );
mouse_func( __glutButton( e->button ), GLUT_DOWN, e->x, e->y );
}
break;
case DWET_BUTTONUP:
if (mouse_func) {
__glutSetWindow( window );
mouse_func( __glutButton( e->button ), GLUT_UP, e->x, e->y );
}
break;
case DWET_MOTION:
if (e->buttons) {
if (motion_func) {
__glutSetWindow( window );
motion_func( e->cx, e->cy );
}
}
else {
if (passive_motion_func) {
__glutSetWindow( window );
passive_motion_func( e->cx, e->cy );
}
}
break;
case DWET_ENTER:
if (entry_func) {
__glutSetWindow( window );
entry_func( GLUT_ENTERED );
}
break;
case DWET_LEAVE:
if (entry_func) {
__glutSetWindow( window );
entry_func( GLUT_LEFT );
}
break;
case DWET_SIZE:
window->reshape = GL_TRUE;
window->redisplay = GL_TRUE;
break;
default:
break;
}
}
static void
__glutInputEvent( DFBInputEvent *e, DFBInputEvent *p )
{
__glutAssert( g_game != NULL );
switch (e->type) {
case DIET_KEYPRESS:
g_game->modifiers = __glutModifiers( e->modifiers );
if (g_ignore_key_repeat && p) {
if (p->type == DIET_KEYPRESS &&
p->key_symbol == e->key_symbol)
break;
}
if (DFB_KEY_IS_ASCII( e->key_symbol )) {
if (keyboard_func) {
__glutSetWindow( g_game );
keyboard_func( e->key_symbol, g_game->cx, g_game->cy );
}
}
else {
int key = __glutSpecialKey( e->key_symbol );
if (key && special_func) {
__glutSetWindow( g_game );
special_func( key, g_game->cx, g_game->cy );
}
}
break;
case DIET_KEYRELEASE:
g_game->modifiers = __glutModifiers( e->modifiers );
if (DFB_KEY_IS_ASCII( e->key_symbol )) {
if (keyboard_up_func) {
__glutSetWindow( g_game );
keyboard_up_func( e->key_symbol, g_game->cx, g_game->cy );
}
}
else {
int key = __glutSpecialKey( e->key_symbol );
if (key && special_up_func) {
__glutSetWindow( g_game );
special_up_func( key, g_game->cx, g_game->cy );
}
}
break;
case DIET_BUTTONPRESS:
if (e->device_id == DIDID_JOYSTICK) {
g_game->buttons = e->buttons;
if (joystick_func) {
__glutSetWindow( g_game );
joystick_func( g_game->buttons,
g_game->jx, g_game->jy, g_game->jz );
}
}
else {
if (mouse_func) {
__glutSetWindow( g_game );
mouse_func( __glutButton( e->button ),
GLUT_DOWN, g_game->cx, g_game->cy );
}
}
break;
case DIET_BUTTONRELEASE:
if (e->device_id == DIDID_JOYSTICK) {
g_game->buttons = e->buttons;
if (joystick_func) {
__glutSetWindow( g_game );
joystick_func( g_game->buttons,
g_game->jx, g_game->jy, g_game->jz );
}
}
else {
if (mouse_func) {
__glutSetWindow( g_game );
mouse_func( __glutButton( e->button ),
GLUT_UP, g_game->cx, g_game->cy );
}
}
break;
case DIET_AXISMOTION:
if (e->device_id == DIDID_JOYSTICK) {
switch (e->axis) {
case DIAI_X:
if (e->flags & DIEF_AXISABS)
g_game->jx = e->axisabs;
else if (e->flags & DIEF_AXISREL)
g_game->jx += e->axisrel;
break;
case DIAI_Y:
if (e->flags & DIEF_AXISABS)
g_game->jy = e->axisabs;
else if (e->flags & DIEF_AXISREL)
g_game->jy += e->axisrel;
break;
case DIAI_Z:
if (e->flags & DIEF_AXISABS)
g_game->jz = e->axisabs;
else if (e->flags & DIEF_AXISREL)
g_game->jz += e->axisrel;
break;
default:
break;
}
if (joystick_func) {
__glutSetWindow( g_game );
joystick_func( g_game->buttons,
g_game->jx, g_game->jy, g_game->jz );
}
}
else {
switch (e->axis) {
case DIAI_X:
if (e->flags & DIEF_AXISABS)
g_game->cx = e->axisabs;
else if (e->flags & DIEF_AXISREL)
g_game->cx += e->axisrel;
break;
case DIAI_Y:
if (e->flags & DIEF_AXISABS)
g_game->cy = e->axisabs;
else if (e->flags & DIEF_AXISREL)
g_game->cy += e->axisrel;
break;
default:
return;
}
if (e->buttons && motion_func) {
__glutSetWindow( g_game );
motion_func( g_game->cx, g_game->cy );
}
else if (!e->buttons && passive_motion_func) {
__glutSetWindow( g_game );
passive_motion_func( g_game->cx, g_game->cy );
}
}
break;
default:
break;
}
}
void GLUTAPIENTRY
glutMainLoop( void )
{
__glutAssert( events != NULL );
while (GL_TRUE) {
DFBEvent evt, prev;
g_idle = GL_TRUE;
__glutHandleTimers();
__glutHandleWindows();
prev.clazz = DFEC_NONE;
while (events->GetEvent( events, &evt ) == DFB_OK) {
g_idle = GL_FALSE;
switch (evt.clazz) {
case DFEC_WINDOW:
if (prev.clazz == DFEC_WINDOW)
__glutWindowEvent( &evt.window, &prev.window );
else
__glutWindowEvent( &evt.window, NULL );
break;
case DFEC_INPUT:
if (prev.clazz == DFEC_INPUT)
__glutInputEvent( &evt.input, &prev.input );
else
__glutInputEvent( &evt.input, NULL );
break;
default:
__glutWarning( "unexpected event class %d!\n", evt.clazz );
break;
}
prev = evt;
__glutHandleTimers();
}
if (g_idle) {
if (idle_func) {
idle_func();
}
else {
__glutSetWindow( NULL );
usleep( 500 );
}
}
}
}
/*
* Copyright (C) 2006 Claudio Ciccani <klan@users.sf.net>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "internal.h"
static const struct {
const char *name;
const GLUTproc address;
} glut_functions[] = {
{ "glutInit", (const GLUTproc) glutInit },
{ "glutInitDisplayMode", (const GLUTproc) glutInitDisplayMode },
{ "glutInitDisplayString", (const GLUTproc) glutInitDisplayString },
{ "glutInitWindowPosition", (const GLUTproc) glutInitWindowPosition },
{ "glutInitWindowSize", (const GLUTproc) glutInitWindowSize },
{ "glutMainLoop", (const GLUTproc) glutMainLoop },
{ "glutCreateWindow", (const GLUTproc) glutCreateWindow },
{ "glutCreateSubWindow", (const GLUTproc) glutCreateSubWindow },
{ "glutDestroyWindow", (const GLUTproc) glutDestroyWindow },
{ "glutPostRedisplay", (const GLUTproc) glutPostRedisplay },
{ "glutPostWindowRedisplay", (const GLUTproc) glutPostWindowRedisplay },
{ "glutSwapBuffers", (const GLUTproc) glutSwapBuffers },
{ "glutGetWindow", (const GLUTproc) glutGetWindow },
{ "glutSetWindow", (const GLUTproc) glutSetWindow },
{ "glutSetWindowTitle", (const GLUTproc) glutSetWindowTitle },
{ "glutSetIconTitle", (const GLUTproc) glutSetIconTitle },
{ "glutPositionWindow", (const GLUTproc) glutPositionWindow },
{ "glutReshapeWindow", (const GLUTproc) glutReshapeWindow },
{ "glutPopWindow", (const GLUTproc) glutPopWindow },
{ "glutPushWindow", (const GLUTproc) glutPushWindow },
{ "glutIconifyWindow", (const GLUTproc) glutIconifyWindow },
{ "glutShowWindow", (const GLUTproc) glutShowWindow },
{ "glutHideWindow", (const GLUTproc) glutHideWindow },
{ "glutFullScreen", (const GLUTproc) glutFullScreen },
{ "glutSetCursor", (const GLUTproc) glutSetCursor },
{ "glutWarpPointer", (const GLUTproc) glutWarpPointer },
{ "glutEstablishOverlay", (const GLUTproc) glutEstablishOverlay },
{ "glutRemoveOverlay", (const GLUTproc) glutRemoveOverlay },
{ "glutUseLayer", (const GLUTproc) glutUseLayer },
{ "glutPostOverlayRedisplay", (const GLUTproc) glutPostOverlayRedisplay },
{ "glutPostWindowOverlayRedisplay", (const GLUTproc) glutPostWindowOverlayRedisplay },
{ "glutShowOverlay", (const GLUTproc) glutShowOverlay },
{ "glutHideOverlay", (const GLUTproc) glutHideOverlay },
{ "glutCreateMenu", (const GLUTproc) glutCreateMenu },
{ "glutDestroyMenu", (const GLUTproc) glutDestroyMenu },
{ "glutGetMenu", (const GLUTproc) glutGetMenu },
{ "glutSetMenu", (const GLUTproc) glutSetMenu },
{ "glutAddMenuEntry", (const GLUTproc) glutAddMenuEntry },
{ "glutAddSubMenu", (const GLUTproc) glutAddSubMenu },
{ "glutChangeToMenuEntry", (const GLUTproc) glutChangeToMenuEntry },
{ "glutChangeToSubMenu", (const GLUTproc) glutChangeToSubMenu },
{ "glutRemoveMenuItem", (const GLUTproc) glutRemoveMenuItem },
{ "glutAttachMenu", (const GLUTproc) glutAttachMenu },
{ "glutDetachMenu", (const GLUTproc) glutDetachMenu },
{ "glutDisplayFunc", (const GLUTproc) glutDisplayFunc },
{ "glutReshapeFunc", (const GLUTproc) glutReshapeFunc },
{ "glutKeyboardFunc", (const GLUTproc) glutKeyboardFunc },
{ "glutMouseFunc", (const GLUTproc) glutMouseFunc },
{ "glutMotionFunc", (const GLUTproc) glutMotionFunc },
{ "glutPassiveMotionFunc", (const GLUTproc) glutPassiveMotionFunc },
{ "glutEntryFunc", (const GLUTproc) glutEntryFunc },
{ "glutVisibilityFunc", (const GLUTproc) glutVisibilityFunc },
{ "glutIdleFunc", (const GLUTproc) glutIdleFunc },
{ "glutTimerFunc", (const GLUTproc) glutTimerFunc },
{ "glutMenuStateFunc", (const GLUTproc) glutMenuStateFunc },
{ "glutSpecialFunc", (const GLUTproc) glutSpecialFunc },
{ "glutSpaceballMotionFunc", (const GLUTproc) glutSpaceballMotionFunc },
{ "glutSpaceballRotateFunc", (const GLUTproc) glutSpaceballRotateFunc },
{ "glutSpaceballButtonFunc", (const GLUTproc) glutSpaceballButtonFunc },
{ "glutButtonBoxFunc", (const GLUTproc) glutButtonBoxFunc },
{ "glutDialsFunc", (const GLUTproc) glutDialsFunc },
{ "glutTabletMotionFunc", (const GLUTproc) glutTabletMotionFunc },
{ "glutTabletButtonFunc", (const GLUTproc) glutTabletButtonFunc },
{ "glutMenuStatusFunc", (const GLUTproc) glutMenuStatusFunc },
{ "glutOverlayDisplayFunc", (const GLUTproc) glutOverlayDisplayFunc },
{ "glutWindowStatusFunc", (const GLUTproc) glutWindowStatusFunc },
{ "glutKeyboardUpFunc", (const GLUTproc) glutKeyboardUpFunc },
{ "glutSpecialUpFunc", (const GLUTproc) glutSpecialUpFunc },
{ "glutJoystickFunc", (const GLUTproc) glutJoystickFunc },
{ "glutSetColor", (const GLUTproc) glutSetColor },
{ "glutGetColor", (const GLUTproc) glutGetColor },
{ "glutCopyColormap", (const GLUTproc) glutCopyColormap },
{ "glutGet", (const GLUTproc) glutGet },
{ "glutDeviceGet", (const GLUTproc) glutDeviceGet },
{ "glutExtensionSupported", (const GLUTproc) glutExtensionSupported },
{ "glutGetModifiers", (const GLUTproc) glutGetModifiers },
{ "glutLayerGet", (const GLUTproc) glutLayerGet },
{ "glutGetProcAddress", (const GLUTproc) glutGetProcAddress },
{ "glutBitmapCharacter", (const GLUTproc) glutBitmapCharacter },
{ "glutBitmapWidth", (const GLUTproc) glutBitmapWidth },
{ "glutStrokeCharacter", (const GLUTproc) glutStrokeCharacter },
{ "glutStrokeWidth", (const GLUTproc) glutStrokeWidth },
{ "glutBitmapLength", (const GLUTproc) glutBitmapLength },
{ "glutStrokeLength", (const GLUTproc) glutStrokeLength },
{ "glutWireSphere", (const GLUTproc) glutWireSphere },
{ "glutSolidSphere", (const GLUTproc) glutSolidSphere },
{ "glutWireCone", (const GLUTproc) glutWireCone },
{ "glutSolidCone", (const GLUTproc) glutSolidCone },
{ "glutWireCube", (const GLUTproc) glutWireCube },
{ "glutSolidCube", (const GLUTproc) glutSolidCube },
{ "glutWireTorus", (const GLUTproc) glutWireTorus },
{ "glutSolidTorus", (const GLUTproc) glutSolidTorus },
{ "glutWireDodecahedron", (const GLUTproc) glutWireDodecahedron },
{ "glutSolidDodecahedron", (const GLUTproc) glutSolidDodecahedron },
{ "glutWireTeapot", (const GLUTproc) glutWireTeapot },
{ "glutSolidTeapot", (const GLUTproc) glutSolidTeapot },
{ "glutWireOctahedron", (const GLUTproc) glutWireOctahedron },
{ "glutSolidOctahedron", (const GLUTproc) glutSolidOctahedron },
{ "glutWireTetrahedron", (const GLUTproc) glutWireTetrahedron },
{ "glutSolidTetrahedron", (const GLUTproc) glutSolidTetrahedron },
{ "glutWireIcosahedron", (const GLUTproc) glutWireIcosahedron },
{ "glutSolidIcosahedron", (const GLUTproc) glutSolidIcosahedron },
// { "glutVideoResizeGet", (const GLUTproc) glutVideoResizeGet },
// { "glutSetupVideoResizing", (const GLUTproc) glutSetupVideoResizing },
// { "glutStopVideoResizing", (const GLUTproc) glutStopVideoResizing },
// { "glutVideoResize", (const GLUTproc) glutVideoResize },
// { "glutVideoPan", (const GLUTproc) glutVideoPan },
{ "glutReportErrors", (const GLUTproc) glutReportErrors },
{ "glutIgnoreKeyRepeat", (const GLUTproc) glutIgnoreKeyRepeat },
{ "glutSetKeyRepeat", (const GLUTproc) glutSetKeyRepeat },
{ "glutForceJoystickFunc", (const GLUTproc) glutForceJoystickFunc },
{ "glutGameModeString", (const GLUTproc) glutGameModeString },
{ "glutEnterGameMode", (const GLUTproc) glutEnterGameMode },
{ "glutLeaveGameMode", (const GLUTproc) glutLeaveGameMode },
{ "glutGameModeGet", (const GLUTproc) glutGameModeGet },
};
GLUTproc GLUTAPIENTRY
glutGetProcAddress( const char *name )
{
int i;
for (i = 0; i < sizeof(glut_functions)/sizeof(glut_functions[0]); i++) {
if (!strcmp( name, glut_functions[i].name ))
return glut_functions[i].address;
}
#if DIRECTFBGL_INTERFACE_VERSION >= 1
if (g_current) {
void *address = NULL;
g_current->gl->GetProcAddress( g_current->gl, name, &address );
return address;
}
#endif
return NULL;
}
int GLUTAPIENTRY
glutExtensionSupported( const char *name )
{
GLubyte *extensions;
int length;
if (!name || !*name)
return 0;
length = strlen( name );
extensions = (GLubyte*) glGetString( GL_EXTENSIONS );
while (extensions && *extensions) {
GLubyte *next;
next = strchr( extensions, ' ' );
if (next) {
if (length == (int)(next - extensions)) {
if (!strncmp( extensions, name, length ))
return 1;
}
extensions = next+1;
}
else {
if (!strcmp( extensions, name ))
return 1;
break;
}
}
return 0;
}
/* Copyright (c) Mark J. Kilgard, 1994, 1998.
This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#include "internal.h"
#include "font.h"
#if defined(_WIN32) || defined (GLUT_IMPORT_LIB)
static inline void*
__glutFont( void *font )
{
switch((long)font) {
case (long)GLUT_STROKE_ROMAN:
return &glutStrokeRoman;
case (long)GLUT_STROKE_MONO_ROMAN:
return &glutStrokeMonoRoman;
case (long)GLUT_BITMAP_9_BY_15:
return &glutBitmap9By15;
case (long)GLUT_BITMAP_8_BY_13:
return &glutBitmap8By13;
case (long)GLUT_BITMAP_TIMES_ROMAN_10:
return &glutBitmapTimesRoman10;
case (long)GLUT_BITMAP_TIMES_ROMAN_24:
return &glutBitmapTimesRoman24;
case (long)GLUT_BITMAP_HELVETICA_10:
return &glutBitmapHelvetica10;
case (long)GLUT_BITMAP_HELVETICA_12:
return &glutBitmapHelvetica12;
case (long)GLUT_BITMAP_HELVETICA_18:
return &glutBitmapHelvetica18;
}
return NULL;
}
#else
static inline void*
__glutFont( void *font )
{
return font;
}
#endif
void GLUTAPIENTRY
glutBitmapCharacter( GLUTbitmapFont font, int c )
{
const BitmapCharRec *ch;
BitmapFontPtr fontinfo;
GLint swapbytes, lsbfirst, rowlength;
GLint skiprows, skippixels, alignment;
fontinfo = (BitmapFontPtr) __glutFont( font );
if (!fontinfo || c < fontinfo->first ||
c >= fontinfo->first + fontinfo->num_chars)
return;
ch = fontinfo->ch[c - fontinfo->first];
if (ch) {
/* Save current modes. */
glGetIntegerv(GL_UNPACK_SWAP_BYTES, &swapbytes);
glGetIntegerv(GL_UNPACK_LSB_FIRST, &lsbfirst);
glGetIntegerv(GL_UNPACK_ROW_LENGTH, &rowlength);
glGetIntegerv(GL_UNPACK_SKIP_ROWS, &skiprows);
glGetIntegerv(GL_UNPACK_SKIP_PIXELS, &skippixels);
glGetIntegerv(GL_UNPACK_ALIGNMENT, &alignment);
/* Little endian machines (DEC Alpha for example) could
benefit from setting GL_UNPACK_LSB_FIRST to GL_TRUE
instead of GL_FALSE, but this would require changing the
generated bitmaps too. */
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(ch->width, ch->height, ch->xorig, ch->yorig,
ch->advance, 0, ch->bitmap);
/* Restore saved modes. */
glPixelStorei(GL_UNPACK_SWAP_BYTES, swapbytes);
glPixelStorei(GL_UNPACK_LSB_FIRST, lsbfirst);
glPixelStorei(GL_UNPACK_ROW_LENGTH, rowlength);
glPixelStorei(GL_UNPACK_SKIP_ROWS, skiprows);
glPixelStorei(GL_UNPACK_SKIP_PIXELS, skippixels);
glPixelStorei(GL_UNPACK_ALIGNMENT, alignment);
}
}
int GLUTAPIENTRY
glutBitmapWidth( GLUTbitmapFont font, int c )
{
BitmapFontPtr fontinfo;
const BitmapCharRec *ch;
fontinfo = (BitmapFontPtr) __glutFont( font );
if (!fontinfo || c < fontinfo->first ||
c >= fontinfo->first + fontinfo->num_chars)
return 0;
ch = fontinfo->ch[c - fontinfo->first];
if (ch)
return ch->advance;
return 0;
}
int GLUTAPIENTRY
glutBitmapLength( GLUTbitmapFont font, const unsigned char *string )
{
int c, length;
BitmapFontPtr fontinfo;
const BitmapCharRec *ch;
fontinfo = (BitmapFontPtr) __glutFont( font );
if (!fontinfo)
return 0;
for (length = 0; *string != '\0'; string++) {
c = *string;
if (c >= fontinfo->first &&
c < fontinfo->first + fontinfo->num_chars) {
ch = fontinfo->ch[c - fontinfo->first];
if (ch)
length += ch->advance;
}
}
return length;
}
void GLUTAPIENTRY
glutStrokeCharacter( GLUTstrokeFont font, int c )
{
const StrokeCharRec *ch;
const StrokeRec *stroke;
const CoordRec *coord;
StrokeFontPtr fontinfo;
int i, j;
fontinfo = (StrokeFontPtr) __glutFont( font );
if (!fontinfo || c < 0 || c >= fontinfo->num_chars)
return;
ch = &(fontinfo->ch[c]);
if (ch) {
for (i = ch->num_strokes, stroke = ch->stroke;
i > 0; i--, stroke++) {
glBegin(GL_LINE_STRIP);
for (j = stroke->num_coords, coord = stroke->coord;
j > 0; j--, coord++) {
glVertex2f(coord->x, coord->y);
}
glEnd();
}
glTranslatef(ch->right, 0.0, 0.0);
}
}
int GLUTAPIENTRY
glutStrokeWidth( GLUTstrokeFont font, int c )
{
StrokeFontPtr fontinfo;
const StrokeCharRec *ch;
fontinfo = (StrokeFontPtr) __glutFont( font );
if (!fontinfo || c < 0 || c >= fontinfo->num_chars)
return 0;
ch = &(fontinfo->ch[c]);
if (ch)
return ch->right;
return 0;
}
int GLUTAPIENTRY
glutStrokeLength( GLUTstrokeFont font, const unsigned char *string )
{
int c, length;
StrokeFontPtr fontinfo;
const StrokeCharRec *ch;
fontinfo = (StrokeFontPtr) __glutFont( font );
if (!fontinfo)
return 0;
for (length = 0; *string != '\0'; string++) {
c = *string;
if (c >= 0 && c < fontinfo->num_chars) {
ch = &(fontinfo->ch[c]);
if (ch)
length += ch->right;
}
}
return length;
}
/* Copyright (c) Mark J. Kilgard, 1994, 1998. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#ifndef __GLUT_FONT_H__
#define __GLUT_FONT_H__
typedef struct {
const GLsizei width;
const GLsizei height;
const GLfloat xorig;
const GLfloat yorig;
const GLfloat advance;
const GLubyte *bitmap;
} BitmapCharRec, *BitmapCharPtr;
typedef struct {
const char *name;
const int num_chars;
const int first;
const BitmapCharRec * const *ch;
} BitmapFontRec, *BitmapFontPtr;
typedef void *GLUTbitmapFont;
typedef struct {
float x;
float y;
} CoordRec, *CoordPtr;
typedef struct {
int num_coords;
const CoordRec *coord;
} StrokeRec, *StrokePtr;
typedef struct {
int num_strokes;
const StrokeRec *stroke;
float center;
float right;
} StrokeCharRec, *StrokeCharPtr;
typedef struct {
const char *name;
int num_chars;
const StrokeCharRec *ch;
float top;
float bottom;
} StrokeFontRec, *StrokeFontPtr;
typedef void *GLUTstrokeFont;
#endif /* __GLUT_FONT_H__ */
/*
* Copyright (C) 2006 Claudio Ciccani <klan@users.sf.net>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "internal.h"
/*****************************************************************************/
static int g_display_changed = 0;
/*****************************************************************************/
void GLUTAPIENTRY
glutGameModeString( const char *string )
{
int x, y, bpp;
char *tmp;
if (!string)
return;
tmp = strchr( string, 'x' );
if (tmp) {
x = strtol( string, NULL, 10 );
y = strtol( tmp+1, NULL, 10 );
if (x > 0 && y > 0) {
g_width = x;
g_height = y;
}
}
tmp = strchr( string, ':' );
if (tmp) {
bpp = strtol( tmp+1, NULL, 10 );
if (bpp > 0)
g_bpp = bpp;
}
}
int GLUTAPIENTRY
glutEnterGameMode( void )
{
DFBDisplayLayerConfig prev, cur;
glutInit( NULL, NULL );
primary->GetConfiguration( primary, &prev );
primary->SetCooperativeLevel( primary, DLSCL_EXCLUSIVE );
if (g_game)
__glutDestroyWindow( g_game );
g_game = __glutCreateWindow( GL_TRUE );
if (!g_game)
return 0;
__glutSetWindow( g_game );
g_game->cursor = GLUT_CURSOR_NONE;
primary->GetConfiguration( primary, &cur );
g_display_changed = (cur.width != prev.width ||
cur.height != prev.height ||
cur.pixelformat != prev.pixelformat);
return g_game->id;
}
void GLUTAPIENTRY
glutLeaveGameMode( void )
{
if (g_game)
__glutDestroyWindow( g_game );
primary->SetCooperativeLevel( primary, DLSCL_ADMINISTRATIVE );
}
int GLUTAPIENTRY
glutGameModeGet( GLenum type )
{
switch (type) {
case GLUT_GAME_MODE_ACTIVE:
return (g_game != NULL);
case GLUT_GAME_MODE_POSSIBLE:
if (primary) {
DFBDisplayLayerConfig c;
c.flags = DLCONF_WIDTH | DLCONF_HEIGHT;
c.width = g_width;
c.height = g_height;
/* XXX: bpp */
if (primary->TestConfiguration( primary, &c, 0 ) == DFB_OK)
return 1;
}
break;
case GLUT_GAME_MODE_WIDTH:
if (g_game) {
int w;
g_game->surface->GetSize( g_game->surface, &w, 0 );
return w;
}
break;
case GLUT_GAME_MODE_HEIGHT:
if (g_game) {
int h;
g_game->surface->GetSize( g_game->surface, 0, &h );
return h;
}
break;
case GLUT_GAME_MODE_PIXEL_DEPTH:
if (g_game) {
DFBSurfacePixelFormat f;
g_game->surface->GetPixelFormat( g_game->surface, &f );
return DFB_COLOR_BITS_PER_PIXEL( f );
}
break;
case GLUT_GAME_MODE_REFRESH_RATE:
return 60; /* assume 60hz */
case GLUT_GAME_MODE_DISPLAY_CHANGED:
return g_display_changed;
default:
break;
}
return 0;
}
/*
* Copyright (C) 2006 Claudio Ciccani <klan@users.sf.net>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
#ifndef __GLUT_INTERNAL_H__
#define __GLUT_INTERNAL_H__
#include <stdio.h>
#include <stdlib.h>
#include <directfb.h>
#include <directfb_version.h>
#include <directfbgl.h>
#include "GL/glut.h"
#define VERSION_CODE( M, m, r ) (((M) << 16) | ((m) << 8) | ((r)))
#define DIRECTFB_VERSION_CODE VERSION_CODE( DIRECTFB_MAJOR_VERSION, \
DIRECTFB_MINOR_VERSION, \
DIRECTFB_MICRO_VERSION )
#define DEFAULT_WIDTH 640
#define DEFAULT_HEIGHT 480
/*
* Window request flags
*/
#define WINDOW_REQUEST_POSITION 0x00000001
#define WINDOW_REQUEST_RESIZE 0x00000002
#define WINDOW_REQUEST_RESTACK 0x00000004
#define WINDOW_REQUEST_SHOW 0x00000008
#define WINDOW_REQUEST_HIDE 0x00000010
#define WINDOW_REQUEST_DESTROY 0x00000020
/*
* GLUT Window implementation
*/
typedef struct __GlutWindow_s {
int id;
DFBWindowID wid;
IDirectFBWindow *window; /* NULL = fullscreen (game mode) */
IDirectFBSurface *surface;
IDirectFBGL *gl;
/* cursor position in fullscreen mode */
int cx;
int cy;
/* joystick position */
int jx;
int jy;
int jz;
/* pressed modifiers */
int modifiers;
/* pressed buttons */
int buttons;
/* current cursor shape */
int cursor;
struct {
int flags;
int x;
int y;
int w;
int h;
int z;
} req;
GLboolean visible;
GLboolean redisplay;
GLboolean reshape;
GLboolean visibility;
struct __GlutWindow_s *next;
struct __GlutWindow_s *prev;
} __GlutWindow;
/* Global Vars */
extern IDirectFB *dfb;
extern IDirectFBDisplayLayer *primary;
extern IDirectFBEventBuffer *events;
extern IDirectFBInputDevice *keyboard;
extern IDirectFBInputDevice *mouse;
extern IDirectFBInputDevice *joystick;
extern GLenum g_display_mode;
extern GLuint g_width;
extern GLuint g_height;
extern GLint g_xpos;
extern GLint g_ypos;
extern GLint g_bpp;
extern GLboolean g_idle;
extern __GlutWindow *g_current;
extern __GlutWindow *g_game;
/* Global Funcs */
/* window.c */
extern __GlutWindow* __glutCreateWindow( GLboolean fullscreen );
extern __GlutWindow* __glutFindWindow( DFBWindowID id );
extern void __glutSetWindow( __GlutWindow *window );
extern void __glutHandleWindows( void );
extern void __glutDestroyWindow( __GlutWindow *window );
extern void __glutDestroyWindows( void );
/* callback.c */
extern void __glutHandleTimers( void );
extern void __glutFreeTimers( void );
/* Global Callbacks */
extern void (GLUTCALLBACK *display_func) (void);
extern void (GLUTCALLBACK *reshape_func) (int width, int height);
extern void (GLUTCALLBACK *keyboard_func) (unsigned char key, int x, int y);
extern void (GLUTCALLBACK *mouse_func) (int button, int state, int x, int y);
extern void (GLUTCALLBACK *motion_func) (int x, int y);
extern void (GLUTCALLBACK *passive_motion_func) (int x, int y);
extern void (GLUTCALLBACK *entry_func) (int state);
extern void (GLUTCALLBACK *visibility_func) (int state);
extern void (GLUTCALLBACK *idle_func) (void);
extern void (GLUTCALLBACK *menu_state_func) (int state);
extern void (GLUTCALLBACK *special_func) (int key, int x, int y);
extern void (GLUTCALLBACK *spaceball_motion_func) (int x, int y, int z);
extern void (GLUTCALLBACK *spaceball_rotate_func) (int x, int y, int z);
extern void (GLUTCALLBACK *spaceball_button_func) (int button, int state);
extern void (GLUTCALLBACK *button_box_func) (int button, int state);
extern void (GLUTCALLBACK *dials_func) (int dial, int value);
extern void (GLUTCALLBACK *tablet_motion_func) (int x, int y);
extern void (GLUTCALLBACK *tabled_button_func) (int button, int state, int x, int y);
extern void (GLUTCALLBACK *menu_status_func) (int status, int x, int y);
extern void (GLUTCALLBACK *overlay_display_func) (void);
extern void (GLUTCALLBACK *window_status_func) (int state);
extern void (GLUTCALLBACK *keyboard_up_func) (unsigned char key, int x, int y);
extern void (GLUTCALLBACK *special_up_func) (int key, int x, int y);
extern void (GLUTCALLBACK *joystick_func) (unsigned int buttons, int x, int y, int z);
#ifdef DEBUG
# define __glutAssert( exp ) {\
if (!(exp)) {\
fprintf( stderr, "(!!) *** Assertion [%s] failed in %s() ***\n",\
#exp, __FUNCTION__ );
fflush( stderr );\
exit( -1 );\
}\
}
#else
# define __glutAssert( exp )
#endif
#define __glutWarning( format, ... ) {\
fprintf( stderr, "(!) GLUT: " format "!\n", ## __VA_ARGS__ );\
fflush( stderr );\
}
#define __glutFatalError( format, ... ) {\
fprintf( stderr, "(!) GLUT: " format "!\n", ## __VA_ARGS__ );\
fprintf( stderr, "\t-> from %s() at line %d\n", __FUNCTION__, __LINE__ );\
fflush( stderr );\
exit( -1 );\
}
#endif /* __GLUT_INTERNAL_H__ */
/*
* Copyright (C) 2006 Claudio Ciccani <klan@users.sf.net>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "internal.h"
static void
__glutExit( void )
{
__glutFreeTimers();
__glutDestroyWindows();
if (events) {
events->Release( events );
events = NULL;
}
if (joystick) {
joystick->Release( joystick );
joystick = NULL;
}
if (mouse) {
mouse->Release( mouse );
mouse = NULL;
}
if (keyboard) {
keyboard->Release( keyboard );
keyboard = NULL;
}
if (primary) {
primary->Release( primary );
primary = NULL;
}
if (dfb) {
dfb->Release( dfb );
dfb = NULL;
}
}
void GLUTAPIENTRY
glutInit( int *argcp, char **argv )
{
DFBResult ret;
if (dfb)
return;
glutGet( GLUT_ELAPSED_TIME );
ret = DirectFBInit( argcp, argv ? &argv : NULL );
if (ret)
DirectFBErrorFatal( "DirectFBInit()", ret );
ret = DirectFBCreate( &dfb );
if (ret)
DirectFBErrorFatal( "DirectFBCreate()", ret );
ret = dfb->GetDisplayLayer( dfb, DLID_PRIMARY, &primary );
if (ret)
DirectFBErrorFatal( "IDirectFB::GetDisplayLayer()", ret );
ret = dfb->CreateEventBuffer( dfb, &events );
if (ret)
DirectFBErrorFatal( "IDirectFB::CreateEventBuffer()", ret );
dfb->GetInputDevice( dfb, DIDID_KEYBOARD, &keyboard );
dfb->GetInputDevice( dfb, DIDID_MOUSE, &mouse );
dfb->GetInputDevice( dfb, DIDID_JOYSTICK, &joystick );
primary->SetCooperativeLevel( primary, DLSCL_ADMINISTRATIVE );
atexit( __glutExit );
}
void GLUTAPIENTRY
glutInitDisplayMode( unsigned int mode )
{
g_display_mode = mode;
}
void GLUTAPIENTRY
glutInitWindowPosition( int x, int y )
{
g_xpos = x;
g_ypos = y;
}
void GLUTAPIENTRY
glutInitWindowSize( int width, int height )
{
g_width = width;
g_height = height;
}
void GLUTAPIENTRY
glutInitDisplayString( const char *string )
{
}
/*
* Copyright (C) 2006 Claudio Ciccani <klan@users.sf.net>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
#include "internal.h"
void GLUTAPIENTRY
glutEstablishOverlay( void )
{
}
void GLUTAPIENTRY
glutRemoveOverlay( void )
{
}
void GLUTAPIENTRY
glutUseLayer( GLenum layer )
{
}
void GLUTAPIENTRY
glutPostOverlayRedisplay( void )
{
}
void GLUTAPIENTRY
glutPostWindowOverlayRedisplay( int win )
{
}
void GLUTAPIENTRY
glutShowOverlay( void )
{
}
void GLUTAPIENTRY
glutHideOverlay( void )
{
}
/*
* Copyright (C) 2006 Claudio Ciccani <klan@users.sf.net>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
#include "internal.h"
int GLUTAPIENTRY
glutCreateMenu( void (GLUTCALLBACK *func) (int) )
{
return 0;
}
void GLUTAPIENTRY
glutDestroyMenu( int menu )
{
}
int GLUTAPIENTRY
glutGetMenu( void )
{
return 0;
}
void GLUTAPIENTRY
glutSetMenu( int menu )
{
}
void GLUTAPIENTRY
glutAddMenuEntry( const char *label, int value )
{
}
void GLUTAPIENTRY
glutAddSubMenu( const char *label, int submenu )
{
}
void GLUTAPIENTRY
glutChangeToMenuEntry( int item, const char *label, int value )
{
}
void GLUTAPIENTRY
glutChangeToSubMenu( int item, const char *label, int submenu )
{
}
void GLUTAPIENTRY
glutRemoveMenuItem( int item )
{
}
void GLUTAPIENTRY
glutAttachMenu( int button )
{
}
void GLUTAPIENTRY
glutDetachMenu( int button )
{
}
/* Copyright (c) Mark J. Kilgard, 1994, 1997. */
/**
(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 <math.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include "internal.h"
/* Some <math.h> files do not define M_PI... */
#ifndef M_PI
#define M_PI 3.14159265358979323846
#endif
static GLUquadricObj *quadObj;
#define QUAD_OBJ_INIT() { if(!quadObj) initQuadObj(); }
static void
initQuadObj(void)
{
quadObj = gluNewQuadric();
if (!quadObj)
__glutFatalError("out of memory");
}
/* CENTRY */
void GLUTAPIENTRY
glutWireSphere(GLdouble radius, GLint slices, GLint stacks)
{
QUAD_OBJ_INIT();
gluQuadricDrawStyle(quadObj, GLU_LINE);
gluQuadricNormals(quadObj, GLU_SMOOTH);
/* If we ever changed/used the texture or orientation state
of quadObj, we'd need to change it to the defaults here
with gluQuadricTexture and/or gluQuadricOrientation. */
gluSphere(quadObj, radius, slices, stacks);
}
void GLUTAPIENTRY
glutSolidSphere(GLdouble radius, GLint slices, GLint stacks)
{
QUAD_OBJ_INIT();
gluQuadricDrawStyle(quadObj, GLU_FILL);
gluQuadricNormals(quadObj, GLU_SMOOTH);
/* If we ever changed/used the texture or orientation state
of quadObj, we'd need to change it to the defaults here
with gluQuadricTexture and/or gluQuadricOrientation. */
gluSphere(quadObj, radius, slices, stacks);
}
void GLUTAPIENTRY
glutWireCone(GLdouble base, GLdouble height,
GLint slices, GLint stacks)
{
QUAD_OBJ_INIT();
gluQuadricDrawStyle(quadObj, GLU_LINE);
gluQuadricNormals(quadObj, GLU_SMOOTH);
/* If we ever changed/used the texture or orientation state
of quadObj, we'd need to change it to the defaults here
with gluQuadricTexture and/or gluQuadricOrientation. */
gluCylinder(quadObj, base, 0.0, height, slices, stacks);
}
void GLUTAPIENTRY
glutSolidCone(GLdouble base, GLdouble height,
GLint slices, GLint stacks)
{
QUAD_OBJ_INIT();
gluQuadricDrawStyle(quadObj, GLU_FILL);
gluQuadricNormals(quadObj, GLU_SMOOTH);
/* If we ever changed/used the texture or orientation state
of quadObj, we'd need to change it to the defaults here
with gluQuadricTexture and/or gluQuadricOrientation. */
gluCylinder(quadObj, base, 0.0, height, slices, stacks);
}
/* ENDCENTRY */
static void
drawBox(GLfloat size, GLenum type)
{
static GLfloat n[6][3] =
{
{-1.0, 0.0, 0.0},
{0.0, 1.0, 0.0},
{1.0, 0.0, 0.0},
{0.0, -1.0, 0.0},
{0.0, 0.0, 1.0},
{0.0, 0.0, -1.0}
};
static GLint faces[6][4] =
{
{0, 1, 2, 3},
{3, 2, 6, 7},
{7, 6, 5, 4},
{4, 5, 1, 0},
{5, 6, 2, 1},
{7, 4, 0, 3}
};
GLfloat v[8][3];
GLint i;
v[0][0] = v[1][0] = v[2][0] = v[3][0] = -size / 2;
v[4][0] = v[5][0] = v[6][0] = v[7][0] = size / 2;
v[0][1] = v[1][1] = v[4][1] = v[5][1] = -size / 2;
v[2][1] = v[3][1] = v[6][1] = v[7][1] = size / 2;
v[0][2] = v[3][2] = v[4][2] = v[7][2] = -size / 2;
v[1][2] = v[2][2] = v[5][2] = v[6][2] = size / 2;
for (i = 5; i >= 0; i--) {
glBegin(type);
/* glNormal3fv(&n[i][0]); */
glVertex3fv(&v[faces[i][0]][0]);
glVertex3fv(&v[faces[i][1]][0]);
glVertex3fv(&v[faces[i][2]][0]);
glVertex3fv(&v[faces[i][3]][0]);
glEnd();
}
}
/* CENTRY */
void GLUTAPIENTRY
glutWireCube(GLdouble size)
{
drawBox(size, GL_LINE_LOOP);
}
void GLUTAPIENTRY
glutSolidCube(GLdouble size)
{
drawBox(size, GL_QUADS);
}
/* ENDCENTRY */
static void
doughnut(GLfloat r, GLfloat R, GLint nsides, GLint rings)
{
int i, j;
GLfloat theta, phi, theta1;
GLfloat cosTheta, sinTheta;
GLfloat cosTheta1, sinTheta1;
GLfloat ringDelta, sideDelta;
ringDelta = 2.0 * M_PI / rings;
sideDelta = 2.0 * M_PI / nsides;
theta = 0.0;
cosTheta = 1.0;
sinTheta = 0.0;
for (i = rings - 1; i >= 0; i--) {
theta1 = theta + ringDelta;
cosTheta1 = cos(theta1);
sinTheta1 = sin(theta1);
glBegin(GL_QUAD_STRIP);
phi = 0.0;
for (j = nsides; j >= 0; j--) {
GLfloat cosPhi, sinPhi, dist;
phi += sideDelta;
cosPhi = cos(phi);
sinPhi = sin(phi);
dist = R + r * cosPhi;
/* glNormal3f(cosTheta1 * cosPhi, -sinTheta1 * cosPhi, sinPhi); */
glVertex3f(cosTheta1 * dist, -sinTheta1 * dist, r * sinPhi);
/* glNormal3f(cosTheta * cosPhi, -sinTheta * cosPhi, sinPhi); */
glVertex3f(cosTheta * dist, -sinTheta * dist, r * sinPhi);
}
glEnd();
theta = theta1;
cosTheta = cosTheta1;
sinTheta = sinTheta1;
}
}
/* CENTRY */
void GLUTAPIENTRY
glutWireTorus(GLdouble innerRadius, GLdouble outerRadius,
GLint nsides, GLint rings)
{
/* glPushAttrib(GL_POLYGON_BIT); */
/* glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); */
doughnut(innerRadius, outerRadius, nsides, rings);
/* glPopAttrib(); */
}
void GLUTAPIENTRY
glutSolidTorus(GLdouble innerRadius, GLdouble outerRadius,
GLint nsides, GLint rings)
{
doughnut(innerRadius, outerRadius, nsides, rings);
}
/* ENDCENTRY */
static GLfloat dodec[20][3];
static void
initDodecahedron(void)
{
GLfloat alpha, beta;
alpha = sqrt(2.0 / (3.0 + sqrt(5.0)));
beta = 1.0 + sqrt(6.0 / (3.0 + sqrt(5.0)) -
2.0 + 2.0 * sqrt(2.0 / (3.0 + sqrt(5.0))));
/* *INDENT-OFF* */
dodec[0][0] = -alpha; dodec[0][1] = 0; dodec[0][2] = beta;
dodec[1][0] = alpha; dodec[1][1] = 0; dodec[1][2] = beta;
dodec[2][0] = -1; dodec[2][1] = -1; dodec[2][2] = -1;
dodec[3][0] = -1; dodec[3][1] = -1; dodec[3][2] = 1;
dodec[4][0] = -1; dodec[4][1] = 1; dodec[4][2] = -1;
dodec[5][0] = -1; dodec[5][1] = 1; dodec[5][2] = 1;
dodec[6][0] = 1; dodec[6][1] = -1; dodec[6][2] = -1;
dodec[7][0] = 1; dodec[7][1] = -1; dodec[7][2] = 1;
dodec[8][0] = 1; dodec[8][1] = 1; dodec[8][2] = -1;
dodec[9][0] = 1; dodec[9][1] = 1; dodec[9][2] = 1;
dodec[10][0] = beta; dodec[10][1] = alpha; dodec[10][2] = 0;
dodec[11][0] = beta; dodec[11][1] = -alpha; dodec[11][2] = 0;
dodec[12][0] = -beta; dodec[12][1] = alpha; dodec[12][2] = 0;
dodec[13][0] = -beta; dodec[13][1] = -alpha; dodec[13][2] = 0;
dodec[14][0] = -alpha; dodec[14][1] = 0; dodec[14][2] = -beta;
dodec[15][0] = alpha; dodec[15][1] = 0; dodec[15][2] = -beta;
dodec[16][0] = 0; dodec[16][1] = beta; dodec[16][2] = alpha;
dodec[17][0] = 0; dodec[17][1] = beta; dodec[17][2] = -alpha;
dodec[18][0] = 0; dodec[18][1] = -beta; dodec[18][2] = alpha;
dodec[19][0] = 0; dodec[19][1] = -beta; dodec[19][2] = -alpha;
/* *INDENT-ON* */
}
#define DIFF3(_a,_b,_c) { \
(_c)[0] = (_a)[0] - (_b)[0]; \
(_c)[1] = (_a)[1] - (_b)[1]; \
(_c)[2] = (_a)[2] - (_b)[2]; \
}
static void
crossprod(GLfloat v1[3], GLfloat v2[3], GLfloat prod[3])
{
GLfloat p[3]; /* in case prod == v1 or v2 */
p[0] = v1[1] * v2[2] - v2[1] * v1[2];
p[1] = v1[2] * v2[0] - v2[2] * v1[0];
p[2] = v1[0] * v2[1] - v2[0] * v1[1];
prod[0] = p[0];
prod[1] = p[1];
prod[2] = p[2];
}
static void
normalize(GLfloat v[3])
{
GLfloat d;
d = sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]);
if (d == 0.0) {
/* __glutWarning("normalize: zero length vector"); */
v[0] = d = 1.0;
}
d = 1 / d;
v[0] *= d;
v[1] *= d;
v[2] *= d;
}
static void
pentagon(int a, int b, int c, int d, int e, GLenum shadeType)
{
GLfloat n0[3], d1[3], d2[3];
DIFF3(dodec[a], dodec[b], d1);
DIFF3(dodec[b], dodec[c], d2);
crossprod(d1, d2, n0);
normalize(n0);
glBegin(shadeType);
/* glNormal3fv(n0); */
glVertex3fv(&dodec[a][0]);
glVertex3fv(&dodec[b][0]);
glVertex3fv(&dodec[c][0]);
glVertex3fv(&dodec[d][0]);
glVertex3fv(&dodec[e][0]);
glEnd();
}
static void
dodecahedron(GLenum type)
{
static int inited = 0;
if (inited == 0) {
inited = 1;
initDodecahedron();
}
pentagon(0, 1, 9, 16, 5, type);
pentagon(1, 0, 3, 18, 7, type);
pentagon(1, 7, 11, 10, 9, type);
pentagon(11, 7, 18, 19, 6, type);
pentagon(8, 17, 16, 9, 10, type);
pentagon(2, 14, 15, 6, 19, type);
pentagon(2, 13, 12, 4, 14, type);
pentagon(2, 19, 18, 3, 13, type);
pentagon(3, 0, 5, 12, 13, type);
pentagon(6, 15, 8, 10, 11, type);
pentagon(4, 17, 8, 15, 14, type);
pentagon(4, 12, 5, 16, 17, type);
}
/* CENTRY */
void GLUTAPIENTRY
glutWireDodecahedron(void)
{
dodecahedron(GL_LINE_LOOP);
}
void GLUTAPIENTRY
glutSolidDodecahedron(void)
{
dodecahedron(GL_TRIANGLE_FAN);
}
/* ENDCENTRY */
static void
recorditem(GLfloat * n1, GLfloat * n2, GLfloat * n3,
GLenum shadeType)
{
GLfloat q0[3], q1[3];
DIFF3(n1, n2, q0);
DIFF3(n2, n3, q1);
crossprod(q0, q1, q1);
normalize(q1);
glBegin(shadeType);
/* glNormal3fv(q1); */
glVertex3fv(n1);
glVertex3fv(n2);
glVertex3fv(n3);
glEnd();
}
static void
subdivide(GLfloat * v0, GLfloat * v1, GLfloat * v2,
GLenum shadeType)
{
int depth;
GLfloat w0[3], w1[3], w2[3];
GLfloat l;
int i, j, k, n;
depth = 1;
for (i = 0; i < depth; i++) {
for (j = 0; i + j < depth; j++) {
k = depth - i - j;
for (n = 0; n < 3; n++) {
w0[n] = (i * v0[n] + j * v1[n] + k * v2[n]) / depth;
w1[n] = ((i + 1) * v0[n] + j * v1[n] + (k - 1) * v2[n])
/ depth;
w2[n] = (i * v0[n] + (j + 1) * v1[n] + (k - 1) * v2[n])
/ depth;
}
l = sqrt(w0[0] * w0[0] + w0[1] * w0[1] + w0[2] * w0[2]);
w0[0] /= l;
w0[1] /= l;
w0[2] /= l;
l = sqrt(w1[0] * w1[0] + w1[1] * w1[1] + w1[2] * w1[2]);
w1[0] /= l;
w1[1] /= l;
w1[2] /= l;
l = sqrt(w2[0] * w2[0] + w2[1] * w2[1] + w2[2] * w2[2]);
w2[0] /= l;
w2[1] /= l;
w2[2] /= l;
recorditem(w1, w0, w2, shadeType);
}
}
}
static void
drawtriangle(int i, GLfloat data[][3], int ndx[][3],
GLenum shadeType)
{
GLfloat *x0, *x1, *x2;
x0 = data[ndx[i][0]];
x1 = data[ndx[i][1]];
x2 = data[ndx[i][2]];
subdivide(x0, x1, x2, shadeType);
}
/* octahedron data: The octahedron produced is centered at the
origin and has radius 1.0 */
static GLfloat odata[6][3] =
{
{1.0, 0.0, 0.0},
{-1.0, 0.0, 0.0},
{0.0, 1.0, 0.0},
{0.0, -1.0, 0.0},
{0.0, 0.0, 1.0},
{0.0, 0.0, -1.0}
};
static int ondex[8][3] =
{
{0, 4, 2},
{1, 2, 4},
{0, 3, 4},
{1, 4, 3},
{0, 2, 5},
{1, 5, 2},
{0, 5, 3},
{1, 3, 5}
};
static void
octahedron(GLenum shadeType)
{
int i;
for (i = 7; i >= 0; i--) {
drawtriangle(i, odata, ondex, shadeType);
}
}
/* CENTRY */
void GLUTAPIENTRY
glutWireOctahedron(void)
{
octahedron(GL_LINE_LOOP);
}
void GLUTAPIENTRY
glutSolidOctahedron(void)
{
octahedron(GL_TRIANGLES);
}
/* ENDCENTRY */
/* icosahedron data: These numbers are rigged to make an
icosahedron of radius 1.0 */
#define X .525731112119133606
#define Z .850650808352039932
static GLfloat idata[12][3] =
{
{-X, 0, Z},
{X, 0, Z},
{-X, 0, -Z},
{X, 0, -Z},
{0, Z, X},
{0, Z, -X},
{0, -Z, X},
{0, -Z, -X},
{Z, X, 0},
{-Z, X, 0},
{Z, -X, 0},
{-Z, -X, 0}
};
static int index[20][3] =
{
{0, 4, 1},
{0, 9, 4},
{9, 5, 4},
{4, 5, 8},
{4, 8, 1},
{8, 10, 1},
{8, 3, 10},
{5, 3, 8},
{5, 2, 3},
{2, 7, 3},
{7, 10, 3},
{7, 6, 10},
{7, 11, 6},
{11, 0, 6},
{0, 1, 6},
{6, 1, 10},
{9, 0, 11},
{9, 11, 2},
{9, 2, 5},
{7, 2, 11},
};
static void
icosahedron(GLenum shadeType)
{
int i;
for (i = 19; i >= 0; i--) {
drawtriangle(i, idata, index, shadeType);
}
}
/* CENTRY */
void GLUTAPIENTRY
glutWireIcosahedron(void)
{
icosahedron(GL_LINE_LOOP);
}
void GLUTAPIENTRY
glutSolidIcosahedron(void)
{
icosahedron(GL_TRIANGLES);
}
/* ENDCENTRY */
/* tetrahedron data: */
#define T 1.73205080756887729
static GLfloat tdata[4][3] =
{
{T, T, T},
{T, -T, -T},
{-T, T, -T},
{-T, -T, T}
};
static int tndex[4][3] =
{
{0, 1, 3},
{2, 1, 0},
{3, 2, 0},
{1, 2, 3}
};
static void
tetrahedron(GLenum shadeType)
{
int i;
for (i = 3; i >= 0; i--)
drawtriangle(i, tdata, tndex, shadeType);
}
/* CENTRY */
void GLUTAPIENTRY
glutWireTetrahedron(void)
{
tetrahedron(GL_LINE_LOOP);
}
void GLUTAPIENTRY
glutSolidTetrahedron(void)
{
tetrahedron(GL_TRIANGLES);
}
/* ENDCENTRY */
/*
* Copyright (C) 2006 Claudio Ciccani <klan@users.sf.net>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include "GL/glu.h"
#include "internal.h"
int GLUTAPIENTRY
glutGet( GLenum type )
{
switch (type) {
case GLUT_WINDOW_X:
if (g_current && g_current->window) {
int x;
g_current->window->GetPosition( g_current->window, &x, 0 );
return x;
}
break;
case GLUT_WINDOW_Y:
if (g_current && g_current->window) {
int y;
g_current->window->GetPosition( g_current->window, 0, &y );
return y;
}
break;
case GLUT_WINDOW_WIDTH:
if (g_current) {
int w;
g_current->surface->GetSize( g_current->surface, &w, 0 );
return w;
}
break;
case GLUT_WINDOW_HEIGHT:
if (g_current) {
int h;
g_current->surface->GetSize( g_current->surface, 0, &h );
return h;
}
break;
case GLUT_WINDOW_BUFFER_SIZE:
if (g_current) {
DFBGLAttributes a;
g_current->gl->GetAttributes( g_current->gl, &a );
return a.buffer_size;
}
break;
case GLUT_WINDOW_STENCIL_SIZE:
if (g_current) {
DFBGLAttributes a;
g_current->gl->GetAttributes( g_current->gl, &a );
return a.stencil_size;
}
break;
case GLUT_WINDOW_DEPTH_SIZE:
if (g_current) {
DFBGLAttributes a;
g_current->gl->GetAttributes( g_current->gl, &a );
return a.depth_size;
}
break;
case GLUT_WINDOW_RED_SIZE:
if (g_current) {
DFBGLAttributes a;
g_current->gl->GetAttributes( g_current->gl, &a );
return a.red_size;
}
break;
case GLUT_WINDOW_GREEN_SIZE:
if (g_current) {
DFBGLAttributes a;
g_current->gl->GetAttributes( g_current->gl, &a );
return a.green_size;
}
break;
case GLUT_WINDOW_BLUE_SIZE:
if (g_current) {
DFBGLAttributes a;
g_current->gl->GetAttributes( g_current->gl, &a );
return a.blue_size;
}
break;
case GLUT_WINDOW_ALPHA_SIZE:
if (g_current) {
DFBGLAttributes a;
g_current->gl->GetAttributes( g_current->gl, &a );
return a.alpha_size;
}
break;
case GLUT_WINDOW_ACCUM_RED_SIZE:
if (g_current) {
DFBGLAttributes a;
g_current->gl->GetAttributes( g_current->gl, &a );
return a.accum_red_size;
}
break;
case GLUT_WINDOW_ACCUM_GREEN_SIZE:
if (g_current) {
DFBGLAttributes a;
g_current->gl->GetAttributes( g_current->gl, &a );
return a.accum_green_size;
}
break;
case GLUT_WINDOW_ACCUM_BLUE_SIZE:
if (g_current) {
DFBGLAttributes a;
g_current->gl->GetAttributes( g_current->gl, &a );
return a.accum_blue_size;
}
break;
case GLUT_WINDOW_ACCUM_ALPHA_SIZE:
if (g_current) {
DFBGLAttributes a;
g_current->gl->GetAttributes( g_current->gl, &a );
return a.accum_alpha_size;
}
break;
case GLUT_WINDOW_DOUBLEBUFFER:
if (g_current) {
DFBGLAttributes a;
g_current->gl->GetAttributes( g_current->gl, &a );
return a.double_buffer;
}
break;
case GLUT_WINDOW_RGBA:
return 1;
case GLUT_WINDOW_CURSOR:
if (g_current)
return g_current->cursor;
break;
case GLUT_SCREEN_WIDTH:
if (primary) {
DFBDisplayLayerConfig c;
primary->GetConfiguration( primary, &c );
return c.width;
}
break;
case GLUT_SCREEN_HEIGHT:
if (primary) {
DFBDisplayLayerConfig c;
primary->GetConfiguration( primary, &c );
return c.height;
}
break;
case GLUT_INIT_DISPLAY_MODE:
return g_display_mode;
case GLUT_INIT_WINDOW_X:
return g_xpos;
case GLUT_INIT_WINDOW_Y:
return g_ypos;
case GLUT_INIT_WINDOW_WIDTH:
return g_width;
case GLUT_INIT_WINDOW_HEIGHT:
return g_height;
case GLUT_ELAPSED_TIME:
{
static long long start = -1;
struct timeval t;
gettimeofday( &t, NULL );
if (start == -1) {
start = t.tv_sec * 1000ll + t.tv_usec / 1000ll;
return 0;
}
return (t.tv_sec * 1000ll + t.tv_usec / 1000ll - start);
}
break;
default:
break;
}
return 0;
}
int GLUTAPIENTRY
glutLayerGet( GLenum type )
{
return 0;
}
void GLUTAPIENTRY
glutReportErrors( void )
{
GLenum error;
while ((error = glGetError()) != GL_NO_ERROR)
__glutWarning( "**OpenGL Error** %s", gluErrorString( error ) );
}
/* Copyright (c) Mark J. Kilgard, 1994. */
/**
(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/gl.h>
#include <GL/glu.h>
#include "GL/glut.h"
/* 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] =
{
/* rim */
{102, 103, 104, 105, 4, 5, 6, 7, 8, 9, 10, 11,
12, 13, 14, 15},
/* body */
{12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
24, 25, 26, 27},
{24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36,
37, 38, 39, 40},
/* lid */
{96, 96, 96, 96, 97, 98, 99, 100, 101, 101, 101,
101, 0, 1, 2, 3,},
{0, 1, 2, 3, 106, 107, 108, 109, 110, 111, 112,
113, 114, 115, 116, 117},
/* bottom */
{118, 118, 118, 118, 124, 122, 119, 121, 123, 126,
125, 120, 40, 39, 38, 37},
/* handle */
{41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
53, 54, 55, 56},
{53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
28, 65, 66, 67},
/* spout */
{68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
80, 81, 82, 83},
{80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
92, 93, 94, 95}
};
/* *INDENT-OFF* */
static float 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 float tex[2][2][2] =
{
{ {0, 0},
{1, 0}},
{ {0, 1},
{1, 1}}
};
/* *INDENT-ON* */
static void
teapot(GLint grid, GLdouble scale, GLenum type)
{
float p[4][4][3], q[4][4][3], r[4][4][3], s[4][4][3];
long i, j, k, l;
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();
glRotatef(270.0, 1.0, 0.0, 0.0);
glScalef(0.5 * scale, 0.5 * scale, 0.5 * scale);
glTranslatef(0.0, 0.0, -1.5);
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;
}
}
}
}
glMap2f(GL_MAP2_TEXTURE_COORD_2, 0, 1, 2, 2, 0, 1, 4, 2,
&tex[0][0][0]);
glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4,
&p[0][0][0]);
glMapGrid2f(grid, 0.0, 1.0, grid, 0.0, 1.0);
glEvalMesh2(type, 0, grid, 0, grid);
glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4,
&q[0][0][0]);
glEvalMesh2(type, 0, grid, 0, grid);
if (i < 6) {
glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4,
&r[0][0][0]);
glEvalMesh2(type, 0, grid, 0, grid);
glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4,
&s[0][0][0]);
glEvalMesh2(type, 0, grid, 0, grid);
}
}
glPopMatrix();
glPopAttrib();
}
/* CENTRY */
void GLUTAPIENTRY
glutSolidTeapot(GLdouble scale)
{
teapot(7, scale, GL_FILL);
}
void GLUTAPIENTRY
glutWireTeapot(GLdouble scale)
{
teapot(10, scale, GL_LINE);
}
/* ENDCENTRY */
/*
* Copyright (C) 2006 Claudio Ciccani <klan@users.sf.net>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "internal.h"
/*****************************************************************************/
static __GlutWindow *g_stack = NULL;
/*****************************************************************************/
__GlutWindow*
__glutCreateWindow( GLboolean fullscreen )
{
__GlutWindow *new;
DFBResult ret;
static int curid = 1;
new = calloc( 1, sizeof(__GlutWindow) );
if (!new)
__glutFatalError( "out of memory" );
new->id = curid++;
if (fullscreen) {
DFBDisplayLayerConfig config;
DFBDisplayLayerConfigFlags fail = 0;
config.flags = DLCONF_WIDTH | DLCONF_HEIGHT |
DLCONF_BUFFERMODE;
config.width = g_width;
config.height = g_height;
if (g_display_mode & GLUT_DOUBLE)
config.buffermode = DLBM_BACKVIDEO;
else
config.buffermode = DLBM_FRONTONLY;
if (g_bpp) {
config.flags |= DLCONF_PIXELFORMAT;
switch (g_bpp) {
case 8:
config.pixelformat = DSPF_RGB332;
break;
case 15:
config.pixelformat = DSPF_ARGB1555;
break;
case 16:
config.pixelformat = DSPF_RGB16;
break;
case 24:
case 32:
config.pixelformat = DSPF_RGB32;
break;
default:
config.flags &= ~DLCONF_PIXELFORMAT;
break;
}
}
primary->TestConfiguration( primary, &config, &fail );
config.flags &= ~fail;
primary->SetConfiguration( primary, &config );
ret = primary->GetSurface( primary, &new->surface );
if (ret) {
DirectFBError( "IDirectFBDisplayLayer::GetSurface()", ret );
free( new );
return NULL;
}
ret = new->surface->GetGL( new->surface, &new->gl );
if (ret) {
DirectFBError( "IDirectFBSurface::GetGL()", ret );
new->surface->Release( new->surface );
free( new );
return NULL;
}
events->Reset( events );
if (keyboard)
keyboard->AttachEventBuffer( keyboard, events );
if (mouse)
mouse->AttachEventBuffer( mouse, events );
if (joystick)
joystick->AttachEventBuffer( joystick, events );
new->visible = GL_TRUE;
}
else {
DFBWindowDescription dsc;
dsc.flags = DWDESC_CAPS | DWDESC_POSX | DWDESC_POSY |
DWDESC_WIDTH | DWDESC_HEIGHT;
dsc.caps = DWCAPS_NONE;
dsc.posx = g_xpos;
dsc.posy = g_ypos;
dsc.width = g_width;
dsc.height = g_height;
if (g_display_mode & GLUT_DOUBLE)
dsc.caps |= DWCAPS_DOUBLEBUFFER;
if (g_display_mode & GLUT_ALPHA)
dsc.caps |= DWCAPS_ALPHACHANNEL;
ret = primary->CreateWindow( primary, &dsc, &new->window );
if (ret) {
DirectFBError( "IDirectFBDisplayLayer::CreateWindow()", ret );
free( new );
return NULL;
}
new->window->GetID( new->window, &new->wid );
ret = new->window->GetSurface( new->window, &new->surface );
if (ret) {
DirectFBError( "IDirectFBWindow::GetSurface()", ret );
new->window->Release( new->window );
free( new );
return NULL;
}
ret = new->surface->GetGL( new->surface, &new->gl );
if (ret) {
DirectFBError( "IDirectFBSurface::GetGl()", ret );
new->surface->Release( new->surface );
new->window->Release( new->window );
free( new );
return NULL;
}
new->window->AttachEventBuffer( new->window, events );
/* enable only handled events */
new->window->DisableEvents( new->window, DWET_ALL );
new->window->EnableEvents( new->window, DWET_KEYDOWN | DWET_KEYUP |
DWET_BUTTONDOWN | DWET_BUTTONUP |
DWET_ENTER | DWET_LEAVE |
DWET_MOTION | DWET_SIZE );
new->req.flags |= WINDOW_REQUEST_SHOW;
}
new->reshape = GL_TRUE;
new->visibility = GL_TRUE;
new->redisplay = GL_TRUE;
if (g_stack) {
new->prev = g_stack->prev;
g_stack->prev->next = new;
g_stack->prev = new;
}
else {
new->prev = new;
g_stack = new;
}
return new;
}
__GlutWindow*
__glutFindWindow( DFBWindowID id )
{
__GlutWindow *cur;
for (cur = g_stack; cur; cur = cur->next) {
if (cur->wid == id)
return cur;
}
__glutFatalError( "Window %d not found", id );
return NULL;
}
void
__glutSetWindow( __GlutWindow *window )
{
if (g_current) {
if (g_current == window)
return;
g_current->gl->Unlock( g_current->gl );
}
if (window)
window->gl->Lock( window->gl );
g_current = window;
}
void
__glutHandleWindows( void )
{
__GlutWindow *cur = g_stack;
while (cur) {
__GlutWindow *next = cur->next;
if (cur->window && cur->req.flags) {
if (cur == g_current)
cur->gl->Unlock( cur->gl );
if (cur->req.flags & WINDOW_REQUEST_DESTROY) {
__glutDestroyWindow( cur );
cur = next;
continue;
}
if (cur->req.flags & WINDOW_REQUEST_POSITION) {
cur->window->MoveTo( cur->window,
cur->req.x, cur->req.y );
}
if (cur->req.flags & WINDOW_REQUEST_RESIZE) {
cur->window->Resize( cur->window,
cur->req.w, cur->req.h );
cur->reshape = GL_TRUE;
cur->redisplay = GL_TRUE;
}
if (cur->req.flags & WINDOW_REQUEST_RESTACK) {
while (cur->req.z > 0) {
if (cur->req.z >= +1000) {
cur->window->RaiseToTop( cur->window );
cur->req.z = 0;
break;
}
cur->window->Raise( cur->window );
cur->req.z--;
}
while (cur->req.z < 0) {
if (cur->req.z <= -1000) {
cur->window->LowerToBottom( cur->window );
cur->req.z = 0;
break;
}
cur->window->Lower( cur->window );
cur->req.z++;
}
}
if (cur->req.flags & WINDOW_REQUEST_SHOW) {
cur->window->SetOpacity( cur->window, 0xff );
cur->visible = GL_TRUE;
cur->visibility = GL_TRUE;
}
else if (cur->req.flags & WINDOW_REQUEST_HIDE) {
cur->window->SetOpacity( cur->window, 0x00 );
cur->visible = GL_FALSE;
cur->visibility = GL_TRUE;
}
cur->req.flags = 0;
if (cur == g_current)
cur->gl->Lock( cur->gl );
}
if (cur->reshape && reshape_func) {
int w, h;
g_idle = GL_FALSE;
cur->surface->GetSize( cur->surface, &w, &h );
__glutSetWindow( cur );
reshape_func( w, h );
}
if (cur->visibility && visibility_func) {
g_idle = GL_FALSE;
__glutSetWindow( cur );
visibility_func( cur->visible ? GLUT_VISIBLE : GLUT_NOT_VISIBLE );
}
if (cur->redisplay && display_func) {
g_idle = GL_FALSE;
__glutSetWindow( cur );
display_func();
}
cur->reshape = GL_FALSE;
cur->visibility = GL_FALSE;
cur->redisplay = GL_FALSE;
cur = next;
}
}
void
__glutDestroyWindow( __GlutWindow *window )
{
__GlutWindow *next = window->next;
__GlutWindow *prev = window->prev;
__glutAssert( window != NULL );
if (window == g_current)
g_current = NULL;
if (window == g_game)
g_game = NULL;
window->gl->Unlock( window->gl );
window->gl->Release( window->gl );
window->surface->Release( window->surface );
if (window->window) {
#if DIRECTFB_VERSION_CODE >= VERSION_CODE(0,9,26)
window->window->DetachEventBuffer( window->window, events );
#else
window->window->Destroy( window->window );
#endif
window->window->Release( window->window );
}
else {
#if DIRECTFB_VERSION_CODE >= VERSION_CODE(0,9,26)
if (joystick)
joystick->DetachEventBuffer( joystick, events );
if (mouse)
mouse->DetachEventBuffer( mouse, events );
if (keyboard)
keyboard->DetachEventBuffer( keyboard, events );
#endif
events->Reset( events );
}
free( window );
if (next)
next->prev = prev;
else
g_stack->prev = prev;
if (window == g_stack)
g_stack = next;
else
prev->next = next;
}
void
__glutDestroyWindows( void )
{
__GlutWindow *cur = g_stack;
while (cur) {
__GlutWindow *next = cur->next;
__glutDestroyWindow( cur );
cur = next;
}
}
int GLUTAPIENTRY
glutCreateWindow( const char *title )
{
__GlutWindow *window;
if (getenv( "__GLUT_GAME_MODE" ))
return glutEnterGameMode();
glutInit( NULL, NULL );
window = __glutCreateWindow( GL_FALSE );
if (!window)
return 0;
__glutSetWindow( window );
glutSetCursor( GLUT_CURSOR_INHERIT );
return window->id;
}
int GLUTAPIENTRY
glutCreateSubWindow( int win, int x, int y, int width, int height )
{
return GL_FALSE;
}
void GLUTAPIENTRY
glutDestroyWindow( int win )
{
__GlutWindow *cur;
for (cur = g_stack; cur; cur = cur->next) {
if (cur->id == win) {
if (cur->window)
cur->window->Destroy( cur->window );
cur->req.flags |= WINDOW_REQUEST_DESTROY;
break;
}
}
}
void GLUTAPIENTRY
glutPostRedisplay( void )
{
if (g_current)
g_current->redisplay = GL_TRUE;
}
void GLUTAPIENTRY
glutPostWindowRedisplay( int win )
{
__GlutWindow *cur;
for (cur = g_stack; cur; cur = cur->next) {
if (cur->id == win) {
cur->redisplay = GL_TRUE;
break;
}
}
}
void GLUTAPIENTRY
glutSwapBuffers( void )
{
if (g_current) {
g_current->gl->Unlock( g_current->gl );
g_current->surface->Flip( g_current->surface, NULL, 0 );
g_current->gl->Lock( g_current->gl );
}
}
int GLUTAPIENTRY
glutGetWindow( void )
{
return (g_current) ? g_current->id : 0;
}
void GLUTAPIENTRY
glutSetWindow( int win )
{
__GlutWindow *cur;
if (g_current && g_current->id == win)
return;
for (cur = g_stack; cur; cur = cur->next) {
if (cur->id == win) {
__glutSetWindow( cur );
break;
}
}
}
void GLUTAPIENTRY
glutSetWindowTitle( const char *title )
{
}
void GLUTAPIENTRY
glutSetIconTitle( const char *title )
{
}
void GLUTAPIENTRY
glutFullScreen( void )
{
if (g_current && !g_game) {
DFBDisplayLayerConfig config;
primary->GetConfiguration( primary, &config );
g_current->req.flags |= WINDOW_REQUEST_POSITION |
WINDOW_REQUEST_RESIZE |
WINDOW_REQUEST_RESTACK;
g_current->req.x = 0;
g_current->req.y = 0;
g_current->req.w = config.width;
g_current->req.h = config.height;
g_current->req.z = 1000;
}
}
void GLUTAPIENTRY
glutPositionWindow( int x, int y )
{
if (g_current && !g_game) {
g_current->req.flags |= WINDOW_REQUEST_POSITION;
g_current->req.x = x;
g_current->req.y = y;
}
}
void GLUTAPIENTRY
glutReshapeWindow( int width, int height )
{
if (g_current && !g_game) {
g_current->req.flags |= WINDOW_REQUEST_RESIZE;
g_current->req.w = width;
g_current->req.h = height;
}
}
void GLUTAPIENTRY
glutPopWindow( void )
{
if (g_current && !g_game) {
g_current->req.flags |= WINDOW_REQUEST_RESTACK;
g_current->req.z--;
}
}
void GLUTAPIENTRY
glutPushWindow( void )
{
if (g_current && !g_game) {
g_current->req.flags |= WINDOW_REQUEST_RESTACK;
g_current->req.z++;
}
}
void GLUTAPIENTRY
glutIconifyWindow( void )
{
}
void GLUTAPIENTRY
glutShowWindow( void )
{
if (g_current && !g_game) {
g_current->req.flags |= WINDOW_REQUEST_SHOW;
g_current->req.flags &= ~WINDOW_REQUEST_HIDE;
}
}
void GLUTAPIENTRY
glutHideWindow( void )
{
if (g_current && !g_game) {
g_current->req.flags |= WINDOW_REQUEST_HIDE;
g_current->req.flags &= ~WINDOW_REQUEST_SHOW;
}
}
# Microsoft Developer Studio Project File - Name="glut" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
CFG=glut - 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 "glut.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 "glut.mak" CFG="glut - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "glut - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE "glut - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
MTL=midl.exe
RSC=rc.exe
!IF "$(CFG)" == "glut - 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 /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GLUT_EXPORTS" /YX /FD /c
# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../../../include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_DLL" /D "_USRDLL" /D "GLUT_EXPORTS" /D "MESA" /D "BUILD_GL32" /FD /c
# SUBTRACT CPP /YX
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# 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 /nologo /dll /machine:I386
# ADD LINK32 opengl32.lib glu32.lib winmm.lib msvcrt.lib oldnames.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 /dll /machine:I386 /nodefaultlib /out:"Release/GLUT32.DLL" /libpath:"../../mesa/Release"
# Begin Special Build Tool
SOURCE="$(InputPath)"
PostBuild_Cmds=if not exist ..\..\..\..\lib md ..\..\..\..\lib copy Release\GLUT32.LIB ..\..\..\..\lib copy Release\GLUT32.DLL ..\..\..\..\lib if exist ..\..\..\..\progs\demos copy Release\GLUT32.DLL ..\..\..\..\progs\demos
# End Special Build Tool
!ELSEIF "$(CFG)" == "glut - 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 /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GLUT_EXPORTS" /YX /FD /GZ /c
# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "../../../../include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_DLL" /D "_USRDLL" /D "GLUT_EXPORTS" /D "MESA" /D "BUILD_GL32" /FD /GZ /c
# SUBTRACT CPP /YX
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# 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 /nologo /dll /debug /machine:I386 /pdbtype:sept
# ADD LINK32 winmm.lib msvcrtd.lib oldnames.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 opengl32.lib glu32.lib /nologo /dll /incremental:no /debug /machine:I386 /nodefaultlib /out:"Debug/GLUT32.DLL" /pdbtype:sept /libpath:"../../mesa/Debug"
# Begin Special Build Tool
SOURCE="$(InputPath)"
PostBuild_Cmds=if not exist ..\..\..\..\lib md ..\..\..\..\lib copy Debug\GLUT32.LIB ..\..\..\..\lib copy Debug\GLUT32.DLL ..\..\..\..\lib if exist ..\..\..\..\progs\demos copy Debug\GLUT32.DLL ..\..\..\..\progs\demos
# End Special Build Tool
!ENDIF
# Begin Target
# Name "glut - Win32 Release"
# Name "glut - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=..\..\..\..\src\glut\glx\glut_8x13.c
# End Source File
# Begin Source File
SOURCE=..\..\..\..\src\glut\glx\glut_9x15.c
# End Source File
# Begin Source File
SOURCE=..\..\..\..\src\glut\glx\glut_bitmap.c
# End Source File
# Begin Source File
SOURCE=..\..\..\..\src\glut\glx\glut_bwidth.c
# End Source File
# Begin Source File
SOURCE=..\..\..\..\src\glut\glx\glut_cindex.c
# End Source File
# Begin Source File
SOURCE=..\..\..\..\src\glut\glx\glut_cmap.c
# End Source File
# Begin Source File
SOURCE=..\..\..\..\src\glut\glx\glut_cursor.c
# End Source File
# Begin Source File
SOURCE=..\..\..\..\src\glut\glx\glut_dials.c
# End Source File
# Begin Source File
SOURCE=..\..\..\..\src\glut\glx\glut_dstr.c
# End Source File
# Begin Source File
SOURCE=..\..\..\..\src\glut\glx\glut_event.c
# End Source File
# Begin Source File
SOURCE=..\..\..\..\src\glut\glx\glut_ext.c
# End Source File
# Begin Source File
SOURCE=..\..\..\..\src\glut\glx\glut_fcb.c
# End Source File
# Begin Source File
SOURCE=..\..\..\..\src\glut\glx\glut_fullscrn.c
# End Source File
# Begin Source File
SOURCE=..\..\..\..\src\glut\glx\glut_gamemode.c
# End Source File
# Begin Source File
SOURCE=..\..\..\..\src\glut\glx\glut_get.c
# End Source File
# Begin Source File
SOURCE=..\..\..\..\src\glut\glx\glut_hel10.c
# End Source File
# Begin Source File
SOURCE=..\..\..\..\src\glut\glx\glut_hel12.c
# End Source File
# Begin Source File
SOURCE=..\..\..\..\src\glut\glx\glut_hel18.c
# End Source File
# Begin Source File
SOURCE=..\..\..\..\src\glut\glx\glut_init.c
# End Source File
# Begin Source File
SOURCE=..\..\..\..\src\glut\glx\glut_input.c
# End Source File
# Begin Source File
SOURCE=..\..\..\..\src\glut\glx\glut_joy.c
# End Source File
# Begin Source File
SOURCE=..\..\..\..\src\glut\glx\glut_key.c
# End Source File
# Begin Source File
SOURCE=..\..\..\..\src\glut\glx\glut_keyctrl.c
# End Source File
# Begin Source File
SOURCE=..\..\..\..\src\glut\glx\glut_keyup.c
# End Source File
# Begin Source File
SOURCE=..\..\..\..\src\glut\glx\glut_mesa.c
# End Source File
# Begin Source File
SOURCE=..\..\..\..\src\glut\glx\glut_modifier.c
# End Source File
# Begin Source File
SOURCE=..\..\..\..\src\glut\glx\glut_mroman.c
# End Source File
# Begin Source File
SOURCE=..\..\..\..\src\glut\glx\glut_overlay.c
# End Source File
# Begin Source File
SOURCE=..\..\..\..\src\glut\glx\glut_roman.c
# End Source File
# Begin Source File
SOURCE=..\..\..\..\src\glut\glx\glut_shapes.c
# End Source File
# Begin Source File
SOURCE=..\..\..\..\src\glut\glx\glut_space.c
# End Source File
# Begin Source File
SOURCE=..\..\..\..\src\glut\glx\glut_stroke.c
# End Source File
# Begin Source File
SOURCE=..\..\..\..\src\glut\glx\glut_swap.c
# End Source File
# Begin Source File
SOURCE=..\..\..\..\src\glut\glx\glut_swidth.c
# End Source File
# Begin Source File
SOURCE=..\..\..\..\src\glut\glx\glut_tablet.c
# End Source File
# Begin Source File
SOURCE=..\..\..\..\src\glut\glx\glut_teapot.c
# End Source File
# Begin Source File
SOURCE=..\..\..\..\src\glut\glx\glut_tr10.c
# End Source File
# Begin Source File
SOURCE=..\..\..\..\src\glut\glx\glut_tr24.c
# End Source File
# Begin Source File
SOURCE=..\..\..\..\src\glut\glx\glut_util.c
# End Source File
# Begin Source File
SOURCE=..\..\..\..\src\glut\glx\glut_vidresize.c
# End Source File
# Begin Source File
SOURCE=..\..\..\..\src\glut\glx\glut_warp.c
# End Source File
# Begin Source File
SOURCE=..\..\..\..\src\glut\glx\glut_win.c
# End Source File
# Begin Source File
SOURCE=..\..\..\..\src\glut\glx\glut_winmisc.c
# End Source File
# Begin Source File
SOURCE=..\..\..\..\src\glut\glx\win32_glx.c
# End Source File
# Begin Source File
SOURCE=..\..\..\..\src\glut\glx\win32_menu.c
# End Source File
# Begin Source File
SOURCE=..\..\..\..\src\glut\glx\win32_util.c
# End Source File
# Begin Source File
SOURCE=..\..\..\..\src\glut\glx\win32_winproc.c
# End Source File
# Begin Source File
SOURCE=..\..\..\..\src\glut\glx\win32_x11.c
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# Begin Source File
SOURCE=..\..\..\..\src\glut\glx\glutbitmap.h
# End Source File
# Begin Source File
SOURCE=..\..\..\..\src\glut\glx\glutint.h
# End Source File
# Begin Source File
SOURCE=..\..\..\..\src\glut\glx\glutstroke.h
# End Source File
# Begin Source File
SOURCE=..\..\..\..\src\glut\glx\glutwin32.h
# End Source File
# Begin Source File
SOURCE=..\..\..\..\src\glut\glx\stroke.h
# End Source File
# Begin Source File
SOURCE=..\..\..\..\src\glut\glx\win32_glx.h
# End Source File
# Begin Source File
SOURCE=..\..\..\..\src\glut\glx\win32_x11.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
# End Target
# End Project
<?xml version="1.0" encoding = "Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="7.00"
Name="glut"
SccProjectName=""
SccLocalPath="">
<Platforms>
<Platform
Name="Win32"/>
</Platforms>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory=".\Debug"
IntermediateDirectory=".\Debug"
ConfigurationType="2"
UseOfMFC="0"
ATLMinimizesCRunTimeLibraryUsage="FALSE"
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="../../../../include"
PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS;_DLL;_USRDLL;GLUT_EXPORTS;MESA;BUILD_GL32"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
PrecompiledHeaderFile=".\Debug/glut.pch"
AssemblerListingLocation=".\Debug/"
ObjectFile=".\Debug/"
ProgramDataBaseFileName=".\Debug/"
WarningLevel="3"
SuppressStartupBanner="TRUE"
DebugInformationFormat="3"
CompileAs="0"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
AdditionalOptions="/MACHINE:I386"
AdditionalDependencies="winmm.lib msvcrtd.lib oldnames.lib odbc32.lib odbccp32.lib opengl32.lib glu32.lib"
OutputFile="Debug/GLUT32.DLL"
LinkIncremental="1"
SuppressStartupBanner="TRUE"
AdditionalLibraryDirectories="../../mesa/Debug"
IgnoreAllDefaultLibraries="TRUE"
GenerateDebugInformation="TRUE"
ProgramDatabaseFile=".\Debug/GLUT32.pdb"
ImportLibrary=".\Debug/GLUT32.lib"/>
<Tool
Name="VCMIDLTool"
PreprocessorDefinitions="_DEBUG"
MkTypLibCompatible="TRUE"
SuppressStartupBanner="TRUE"
TargetEnvironment="1"
TypeLibraryName=".\Debug/glut.tlb"/>
<Tool
Name="VCPostBuildEventTool"
CommandLine="if not exist ..\..\..\..\lib md ..\..\..\..\lib
copy Debug\GLUT32.LIB ..\..\..\..\lib
copy Debug\GLUT32.DLL ..\..\..\..\lib
if exist ..\..\..\..\progs\demos copy Debug\GLUT32.DLL ..\..\..\..\progs\demos
"/>
<Tool
Name="VCPreBuildEventTool"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="_DEBUG"
Culture="1033"/>
<Tool
Name="VCWebServiceProxyGeneratorTool"/>
<Tool
Name="VCWebDeploymentTool"/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory=".\Release"
IntermediateDirectory=".\Release"
ConfigurationType="2"
UseOfMFC="0"
ATLMinimizesCRunTimeLibraryUsage="FALSE"
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="../../../../include"
PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;_DLL;_USRDLL;GLUT_EXPORTS;MESA;BUILD_GL32"
StringPooling="TRUE"
RuntimeLibrary="0"
EnableFunctionLevelLinking="TRUE"
PrecompiledHeaderFile=".\Release/glut.pch"
AssemblerListingLocation=".\Release/"
ObjectFile=".\Release/"
ProgramDataBaseFileName=".\Release/"
WarningLevel="3"
SuppressStartupBanner="TRUE"
CompileAs="0"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
AdditionalOptions="/MACHINE:I386"
AdditionalDependencies="opengl32.lib glu32.lib winmm.lib msvcrt.lib oldnames.lib odbc32.lib odbccp32.lib"
OutputFile="Release/GLUT32.DLL"
LinkIncremental="1"
SuppressStartupBanner="TRUE"
AdditionalLibraryDirectories="../../mesa/Release"
IgnoreAllDefaultLibraries="TRUE"
ProgramDatabaseFile=".\Release/GLUT32.pdb"
ImportLibrary=".\Release/GLUT32.lib"/>
<Tool
Name="VCMIDLTool"
PreprocessorDefinitions="NDEBUG"
MkTypLibCompatible="TRUE"
SuppressStartupBanner="TRUE"
TargetEnvironment="1"
TypeLibraryName=".\Release/glut.tlb"/>
<Tool
Name="VCPostBuildEventTool"
CommandLine="if not exist ..\..\..\..\lib md ..\..\..\..\lib
copy Release\GLUT32.LIB ..\..\..\..\lib
copy Release\GLUT32.DLL ..\..\..\..\lib
if exist ..\..\..\..\progs\demos copy Release\GLUT32.DLL ..\..\..\..\progs\demos
"/>
<Tool
Name="VCPreBuildEventTool"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="NDEBUG"
Culture="1033"/>
<Tool
Name="VCWebServiceProxyGeneratorTool"/>
<Tool
Name="VCWebDeploymentTool"/>
</Configuration>
</Configurations>
<Files>
<Filter
Name="Source Files"
Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">
<File
RelativePath="..\..\..\..\src\glut\glx\glut_8x13.c">
</File>
<File
RelativePath="..\..\..\..\src\glut\glx\glut_9x15.c">
</File>
<File
RelativePath="..\..\..\..\src\glut\glx\glut_bitmap.c">
</File>
<File
RelativePath="..\..\..\..\src\glut\glx\glut_bwidth.c">
</File>
<File
RelativePath="..\..\..\..\src\glut\glx\glut_cindex.c">
</File>
<File
RelativePath="..\..\..\..\src\glut\glx\glut_cmap.c">
</File>
<File
RelativePath="..\..\..\..\src\glut\glx\glut_cursor.c">
</File>
<File
RelativePath="..\..\..\..\src\glut\glx\glut_dials.c">
</File>
<File
RelativePath="..\..\..\..\src\glut\glx\glut_dstr.c">
</File>
<File
RelativePath="..\..\..\..\src\glut\glx\glut_event.c">
</File>
<File
RelativePath="..\..\..\..\src\glut\glx\glut_ext.c">
</File>
<File
RelativePath="..\..\..\..\src\glut\glx\glut_fcb.c">
</File>
<File
RelativePath="..\..\..\..\src\glut\glx\glut_fullscrn.c">
</File>
<File
RelativePath="..\..\..\..\src\glut\glx\glut_gamemode.c">
</File>
<File
RelativePath="..\..\..\..\src\glut\glx\glut_get.c">
</File>
<File
RelativePath="..\..\..\..\src\glut\glx\glut_hel10.c">
</File>
<File
RelativePath="..\..\..\..\src\glut\glx\glut_hel12.c">
</File>
<File
RelativePath="..\..\..\..\src\glut\glx\glut_hel18.c">
</File>
<File
RelativePath="..\..\..\..\src\glut\glx\glut_init.c">
</File>
<File
RelativePath="..\..\..\..\src\glut\glx\glut_input.c">
</File>
<File
RelativePath="..\..\..\..\src\glut\glx\glut_joy.c">
</File>
<File
RelativePath="..\..\..\..\src\glut\glx\glut_key.c">
</File>
<File
RelativePath="..\..\..\..\src\glut\glx\glut_keyctrl.c">
</File>
<File
RelativePath="..\..\..\..\src\glut\glx\glut_keyup.c">
</File>
<File
RelativePath="..\..\..\..\src\glut\glx\glut_mesa.c">
</File>
<File
RelativePath="..\..\..\..\src\glut\glx\glut_modifier.c">
</File>
<File
RelativePath="..\..\..\..\src\glut\glx\glut_mroman.c">
</File>
<File
RelativePath="..\..\..\..\src\glut\glx\glut_overlay.c">
</File>
<File
RelativePath="..\..\..\..\src\glut\glx\glut_roman.c">
</File>
<File
RelativePath="..\..\..\..\src\glut\glx\glut_shapes.c">
</File>
<File
RelativePath="..\..\..\..\src\glut\glx\glut_space.c">
</File>
<File
RelativePath="..\..\..\..\src\glut\glx\glut_stroke.c">
</File>
<File
RelativePath="..\..\..\..\src\glut\glx\glut_swap.c">
</File>
<File
RelativePath="..\..\..\..\src\glut\glx\glut_swidth.c">
</File>
<File
RelativePath="..\..\..\..\src\glut\glx\glut_tablet.c">
</File>
<File
RelativePath="..\..\..\..\src\glut\glx\glut_teapot.c">
</File>
<File
RelativePath="..\..\..\..\src\glut\glx\glut_tr10.c">
</File>
<File
RelativePath="..\..\..\..\src\glut\glx\glut_tr24.c">
</File>
<File
RelativePath="..\..\..\..\src\glut\glx\glut_util.c">
</File>
<File
RelativePath="..\..\..\..\src\glut\glx\glut_vidresize.c">
</File>
<File
RelativePath="..\..\..\..\src\glut\glx\glut_warp.c">
</File>
<File
RelativePath="..\..\..\..\src\glut\glx\glut_win.c">
</File>
<File
RelativePath="..\..\..\..\src\glut\glx\glut_winmisc.c">
</File>
<File
RelativePath="..\..\..\..\src\glut\glx\win32_glx.c">
</File>
<File
RelativePath="..\..\..\..\src\glut\glx\win32_menu.c">
</File>
<File
RelativePath="..\..\..\..\src\glut\glx\win32_util.c">
</File>
<File
RelativePath="..\..\..\..\src\glut\glx\win32_winproc.c">
</File>
<File
RelativePath="..\..\..\..\src\glut\glx\win32_x11.c">
</File>
</Filter>
<Filter
Name="Header Files"
Filter="h;hpp;hxx;hm;inl">
<File
RelativePath="..\..\..\..\src\glut\glx\glutbitmap.h">
</File>
<File
RelativePath="..\..\..\..\src\glut\glx\glutint.h">
</File>
<File
RelativePath="..\..\..\..\src\glut\glx\glutstroke.h">
</File>
<File
RelativePath="..\..\..\..\src\glut\glx\glutwin32.h">
</File>
<File
RelativePath="..\..\..\..\src\glut\glx\stroke.h">
</File>
<File
RelativePath="..\..\..\..\src\glut\glx\win32_glx.h">
</File>
<File
RelativePath="..\..\..\..\src\glut\glx\win32_x11.h">
</File>
</Filter>
<Filter
Name="Resource Files"
Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">
</Filter>
</Files>
<Globals>
</Globals>
</VisualStudioProject>